summaryrefslogtreecommitdiff
path: root/java/openjdk6/files/icedtea/openjdk
diff options
context:
space:
mode:
authorJung-uk Kim <jkim@FreeBSD.org>2013-10-09 20:36:06 +0000
committerJung-uk Kim <jkim@FreeBSD.org>2013-10-09 20:36:06 +0000
commitf78b1b9ba06ffbbdecee2801917443f79011f134 (patch)
treefc3ef7699ec2d5dff96245bc6d90117d597fb678 /java/openjdk6/files/icedtea/openjdk
parentBump PORTREVISION after plist change (diff)
Update to Build b28.
Diffstat (limited to 'java/openjdk6/files/icedtea/openjdk')
-rw-r--r--java/openjdk6/files/icedtea/openjdk/5102804-memory_leak.patch429
-rw-r--r--java/openjdk6/files/icedtea/openjdk/6469266-xmlsec_1.4.2.patch23876
-rw-r--r--java/openjdk6/files/icedtea/openjdk/6501644-icu_sync.patch8066
-rw-r--r--java/openjdk6/files/icedtea/openjdk/6669869-queries_per_appcontext.patch355
-rw-r--r--java/openjdk6/files/icedtea/openjdk/6786028-wcag_bold_tags.patch2914
-rw-r--r--java/openjdk6/files/icedtea/openjdk/6786682-wcag_lang.patch274
-rw-r--r--java/openjdk6/files/icedtea/openjdk/6786688-wcag_table.patch2828
-rw-r--r--java/openjdk6/files/icedtea/openjdk/6786690-wcag_dl.patch3230
-rw-r--r--java/openjdk6/files/icedtea/openjdk/6802694-no_deprecated.patch601
-rw-r--r--java/openjdk6/files/icedtea/openjdk/6851834-handle_renames.patch605
-rw-r--r--java/openjdk6/files/icedtea/openjdk/6851834-restructure.patch26853
-rw-r--r--java/openjdk6/files/icedtea/openjdk/6886358-layout_update.patch13847
-rw-r--r--java/openjdk6/files/icedtea/openjdk/6888167-medialib_memory_leaks.patch134
-rw-r--r--java/openjdk6/files/icedtea/openjdk/6961178-doclet_xml.patch1989
-rw-r--r--java/openjdk6/files/icedtea/openjdk/6963811-deadlock_fix.patch42
-rw-r--r--java/openjdk6/files/icedtea/openjdk/7006270-regressions.patch299
-rw-r--r--java/openjdk6/files/icedtea/openjdk/7017324-kerning_crash.patch101
-rw-r--r--java/openjdk6/files/icedtea/openjdk/7032388-work_without_cmov_instruction.patch178
-rw-r--r--java/openjdk6/files/icedtea/openjdk/7036559-concurrenthashmap_improvements.patch1436
-rw-r--r--java/openjdk6/files/icedtea/openjdk/7064279-fixup.patch71
-rw-r--r--java/openjdk6/files/icedtea/openjdk/7064279-resource_release.patch436
-rw-r--r--java/openjdk6/files/icedtea/openjdk/7133220-factory_finder_parser_transform_useBSClassLoader.patch299
-rw-r--r--java/openjdk6/files/icedtea/openjdk/7195301-no_instanceof_node.patch86
-rw-r--r--java/openjdk6/files/icedtea/openjdk/7197906-handle_32_bit_shifts.patch33
-rw-r--r--java/openjdk6/files/icedtea/openjdk/8004302-soap_test_failure.patch75
-rw-r--r--java/openjdk6/files/icedtea/openjdk/8004341-jck_dialog_failure-02.patch18
-rw-r--r--java/openjdk6/files/icedtea/openjdk/8004341-jck_dialog_failure.patch19
-rw-r--r--java/openjdk6/files/icedtea/openjdk/8005615-failure_to_load_logger_implementation.patch542
-rw-r--r--java/openjdk6/files/icedtea/openjdk/8007393.patch78
-rw-r--r--java/openjdk6/files/icedtea/openjdk/8007611.patch24
30 files changed, 0 insertions, 89738 deletions
diff --git a/java/openjdk6/files/icedtea/openjdk/5102804-memory_leak.patch b/java/openjdk6/files/icedtea/openjdk/5102804-memory_leak.patch
deleted file mode 100644
index 01dd35c1bee2..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/5102804-memory_leak.patch
+++ /dev/null
@@ -1,429 +0,0 @@
-# HG changeset patch
-# User andrew
-# Date 1365704033 -3600
-# Node ID 06255d9f82761abc74c30f31fda00968ffef4bc3
-# Parent a939f541de9af5ccb78225c27cd46cd7dc6bcf87
-5102804: Memory leak in Introspector.getBeanInfo(Class) for custom BeanInfo: Class param (includes WeakCache from 6397609)
-Reviewed-by: peterz
-
-diff --git a/src/share/classes/com/sun/beans/WeakCache.java b/src/share/classes/com/sun/beans/WeakCache.java
-new file mode 100644
---- /dev/null
-+++ jdk/src/share/classes/com/sun/beans/WeakCache.java
-@@ -0,0 +1,91 @@
-+/*
-+ * Copyright 2008 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.beans;
-+
-+import java.lang.ref.Reference;
-+import java.lang.ref.WeakReference;
-+
-+import java.util.Map;
-+import java.util.WeakHashMap;
-+
-+/**
-+ * A hashtable-based cache with weak keys and weak values.
-+ * An entry in the map will be automatically removed
-+ * when its key is no longer in the ordinary use.
-+ * A value will be automatically removed as well
-+ * when it is no longer in the ordinary use.
-+ *
-+ * @since 1.7
-+ *
-+ * @author Sergey A. Malenkov
-+ */
-+public final class WeakCache<K, V> {
-+ private final Map<K, Reference<V>> map = new WeakHashMap<K, Reference<V>>();
-+
-+ /**
-+ * Returns a value to which the specified {@code key} is mapped,
-+ * or {@code null} if this map contains no mapping for the {@code key}.
-+ *
-+ * @param key the key whose associated value is returned
-+ * @return a value to which the specified {@code key} is mapped
-+ */
-+ public V get(K key) {
-+ Reference<V> reference = this.map.get(key);
-+ if (reference == null) {
-+ return null;
-+ }
-+ V value = reference.get();
-+ if (value == null) {
-+ this.map.remove(key);
-+ }
-+ return value;
-+ }
-+
-+ /**
-+ * Associates the specified {@code value} with the specified {@code key}.
-+ * Removes the mapping for the specified {@code key} from this cache
-+ * if it is present and the specified {@code value} is {@code null}.
-+ * If the cache previously contained a mapping for the {@code key},
-+ * the old value is replaced by the specified {@code value}.
-+ *
-+ * @param key the key with which the specified value is associated
-+ * @param value the value to be associated with the specified key
-+ */
-+ public void put(K key, V value) {
-+ if (value != null) {
-+ this.map.put(key, new WeakReference<V>(value));
-+ }
-+ else {
-+ this.map.remove(key);
-+ }
-+ }
-+
-+ /**
-+ * Removes all of the mappings from this cache.
-+ */
-+ public void clear() {
-+ this.map.clear();
-+ }
-+}
-diff --git a/src/share/classes/java/beans/Introspector.java b/src/share/classes/java/beans/Introspector.java
---- jdk/src/share/classes/java/beans/Introspector.java
-+++ jdk/src/share/classes/java/beans/Introspector.java
-@@ -25,25 +25,18 @@
-
- package java.beans;
-
-+import com.sun.beans.WeakCache;
- 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;
-
--import java.security.AccessController;
--import java.security.PrivilegedAction;
--
--import java.util.Collections;
- import java.util.Map;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.EventListener;
- import java.util.List;
--import java.util.WeakHashMap;
- import java.util.TreeMap;
- import sun.awt.AppContext;
- import sun.reflect.misc.ReflectUtil;
-@@ -110,8 +103,8 @@
- public final static int IGNORE_ALL_BEANINFO = 3;
-
- // Static Caches to speed up introspection.
-- private static Map declaredMethodCache =
-- Collections.synchronizedMap(new WeakHashMap());
-+ private static WeakCache<Class<?>, Method[]> declaredMethodCache =
-+ new WeakCache<Class<?>, Method[]>();
-
- private static final Object BEANINFO_CACHE = new Object();
-
-@@ -177,20 +170,21 @@
- if (!ReflectUtil.isPackageAccessible(beanClass)) {
- return (new Introspector(beanClass, null, USE_ALL_BEANINFO)).getBeanInfo();
- }
-- Map<Class<?>, BeanInfo> map;
- synchronized (BEANINFO_CACHE) {
-- map = (Map<Class<?>, BeanInfo>) AppContext.getAppContext().get(BEANINFO_CACHE);
-- if (map == null) {
-- map = Collections.synchronizedMap(new WeakHashMap<Class<?>, BeanInfo>());
-- AppContext.getAppContext().put(BEANINFO_CACHE, map);
-+ WeakCache<Class<?>, BeanInfo> beanInfoCache =
-+ (WeakCache<Class<?>, BeanInfo>) AppContext.getAppContext().get(BEANINFO_CACHE);
-+
-+ if (beanInfoCache == null) {
-+ beanInfoCache = new WeakCache<Class<?>, BeanInfo>();
-+ AppContext.getAppContext().put(BEANINFO_CACHE, beanInfoCache);
- }
-+ BeanInfo beanInfo = beanInfoCache.get(beanClass);
-+ if (beanInfo == null) {
-+ beanInfo = (new Introspector(beanClass, null, USE_ALL_BEANINFO)).getBeanInfo();
-+ beanInfoCache.put(beanClass, beanInfo);
-+ }
-+ return beanInfo;
- }
-- BeanInfo bi = map.get(beanClass);
-- if (bi == null) {
-- bi = (new Introspector(beanClass, null, USE_ALL_BEANINFO)).getBeanInfo();
-- map.put(beanClass, bi);
-- }
-- return bi;
- }
-
- /**
-@@ -337,11 +331,13 @@
- */
-
- public static void flushCaches() {
-- Map map = (Map) AppContext.getAppContext().get(BEANINFO_CACHE);
-- if (map != null) {
-- map.clear();
-+ synchronized (BEANINFO_CACHE) {
-+ WeakCache beanInfoCache = (WeakCache) AppContext.getAppContext().get(BEANINFO_CACHE);
-+ if (beanInfoCache != null) {
-+ beanInfoCache.clear();
-+ }
-+ declaredMethodCache.clear();
- }
-- declaredMethodCache.clear();
- }
-
- /**
-@@ -363,11 +359,13 @@
- if (clz == null) {
- throw new NullPointerException();
- }
-- Map map = (Map) AppContext.getAppContext().get(BEANINFO_CACHE);
-- if (map != null) {
-- map.remove(clz);
-+ synchronized (BEANINFO_CACHE) {
-+ WeakCache beanInfoCache = (WeakCache) AppContext.getAppContext().get(BEANINFO_CACHE);
-+ if (beanInfoCache != null) {
-+ beanInfoCache.put(clz, null);
-+ }
-+ declaredMethodCache.put(clz, null);
- }
-- declaredMethodCache.remove(clz);
- }
-
- //======================================================================
-@@ -1306,41 +1304,26 @@
- /*
- * Internal method to return *public* methods within a class.
- */
-- private static synchronized Method[] getPublicDeclaredMethods(Class clz) {
-+ private static Method[] getPublicDeclaredMethods(Class clz) {
- // Looking up Class.getDeclaredMethods is relatively expensive,
- // so we cache the results.
-- Method[] result = null;
- if (!ReflectUtil.isPackageAccessible(clz)) {
- return new Method[0];
- }
-- final Class fclz = clz;
-- Reference ref = (Reference)declaredMethodCache.get(fclz);
-- if (ref != null) {
-- result = (Method[])ref.get();
-- if (result != null) {
-- return result;
-+ synchronized (BEANINFO_CACHE) {
-+ Method[] result = declaredMethodCache.get(clz);
-+ if (result == null) {
-+ result = clz.getMethods();
-+ for (int i = 0; i < result.length; i++) {
-+ Method method = result[i];
-+ if (!method.getDeclaringClass().equals(clz)) {
-+ result[i] = null;
-+ }
-+ }
-+ declaredMethodCache.put(clz, result);
- }
-+ return result;
- }
--
-- // We have to raise privilege for getDeclaredMethods
-- result = (Method[]) AccessController.doPrivileged(new PrivilegedAction() {
-- public Object run() {
-- return fclz.getDeclaredMethods();
-- }
-- });
--
--
-- // Null out any non-public methods.
-- for (int i = 0; i < result.length; i++) {
-- Method method = result[i];
-- int mods = method.getModifiers();
-- if (!Modifier.isPublic(mods)) {
-- result[i] = null;
-- }
-- }
-- // Add it to the cache.
-- declaredMethodCache.put(fclz, new SoftReference(result));
-- return result;
- }
-
- //======================================================================
-diff --git a/test/java/beans/Introspector/Test5102804.java b/test/java/beans/Introspector/Test5102804.java
-new file mode 100644
---- /dev/null
-+++ jdk/test/java/beans/Introspector/Test5102804.java
-@@ -0,0 +1,155 @@
-+/*
-+ * 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 5102804
-+ * @summary Tests memory leak
-+ * @author Sergey Malenkov
-+ */
-+
-+import java.beans.BeanInfo;
-+import java.beans.IntrospectionException;
-+import java.beans.Introspector;
-+import java.beans.PropertyDescriptor;
-+import java.beans.SimpleBeanInfo;
-+import java.lang.ref.Reference;
-+import java.lang.ref.WeakReference;
-+import java.net.URL;
-+import java.net.URLClassLoader;
-+
-+public class Test5102804 {
-+ private static final String BEAN_NAME = "Test5102804$Example";
-+ private static final String BEAN_INFO_NAME = BEAN_NAME + "BeanInfo";
-+
-+ public static void main(String[] args) {
-+ if (!isCollectible(getReference()))
-+ throw new Error("Reference is not collected");
-+ }
-+
-+ private static Reference getReference() {
-+ try {
-+ ClassLoader loader = new Loader();
-+ Class type = Class.forName(BEAN_NAME, true, loader);
-+ if (!type.getClassLoader().equals(loader)) {
-+ throw new Error("Wrong class loader");
-+ }
-+ BeanInfo info = Introspector.getBeanInfo(type);
-+ if (0 != info.getDefaultPropertyIndex()) {
-+ throw new Error("Wrong bean info found");
-+ }
-+ return new WeakReference<Class>(type);
-+ }
-+ catch (IntrospectionException exception) {
-+ throw new Error("Introspection Error", exception);
-+ }
-+ catch (ClassNotFoundException exception) {
-+ throw new Error("Class Not Found", exception);
-+ }
-+ }
-+
-+ private static boolean isCollectible(Reference reference) {
-+ int[] array = new int[10];
-+ while (true) {
-+ try {
-+ array = new int[array.length + array.length / 3];
-+ }
-+ catch (OutOfMemoryError error) {
-+ return null == reference.get();
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Custom class loader to load the Example class by itself.
-+ * Could also load it from a different code source, but this is easier to set up.
-+ */
-+ private static final class Loader extends URLClassLoader {
-+ Loader() {
-+ super(new URL[] {
-+ Test5102804.class.getProtectionDomain().getCodeSource().getLocation()
-+ });
-+ }
-+
-+ @Override
-+ protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException {
-+ Class c = findLoadedClass(name);
-+ if (c == null) {
-+ if (BEAN_NAME.equals(name) || BEAN_INFO_NAME.equals(name)) {
-+ c = findClass(name);
-+ }
-+ else try {
-+ c = getParent().loadClass(name);
-+ }
-+ catch (ClassNotFoundException exception) {
-+ c = findClass(name);
-+ }
-+ }
-+ if (resolve) {
-+ resolveClass(c);
-+ }
-+ return c;
-+ }
-+ }
-+
-+ /**
-+ * A simple bean to load from the Loader class, not main class loader.
-+ */
-+ public static final class Example {
-+ private int value;
-+
-+ public int getValue() {
-+ return value;
-+ }
-+
-+ public void setValue(int value) {
-+ this.value = value;
-+ }
-+ }
-+
-+ /**
-+ * The BeanInfo for the Example class.
-+ * It is also loaded from the Loader class.
-+ */
-+ public static final class ExampleBeanInfo extends SimpleBeanInfo {
-+ @Override
-+ public int getDefaultPropertyIndex() {
-+ return 0;
-+ }
-+
-+ @Override
-+ public PropertyDescriptor[] getPropertyDescriptors() {
-+ try {
-+ return new PropertyDescriptor[] {
-+ new PropertyDescriptor("value", Class.forName(BEAN_NAME))
-+ };
-+ }
-+ catch (ClassNotFoundException exception) {
-+ return null;
-+ }
-+ catch (IntrospectionException exception) {
-+ return null;
-+ }
-+ }
-+ }
-+}
diff --git a/java/openjdk6/files/icedtea/openjdk/6469266-xmlsec_1.4.2.patch b/java/openjdk6/files/icedtea/openjdk/6469266-xmlsec_1.4.2.patch
deleted file mode 100644
index eb64e0a61366..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/6469266-xmlsec_1.4.2.patch
+++ /dev/null
@@ -1,23876 +0,0 @@
-# HG changeset patch
-# User andrew
-# Date 1371136223 -3600
-# Node ID a955a845f0d1b8e21e0780986d971b3712db26c7
-# Parent 2ae6d8da293f30c94c9478a6634c7a480328c5c5
-6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
-Reviewed-by: valeriep
-
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/Init.java b/src/share/classes/com/sun/org/apache/xml/internal/security/Init.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/Init.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/Init.java
-@@ -20,12 +20,9 @@
- */
- package com.sun.org.apache.xml.internal.security;
-
--
--
- import java.io.InputStream;
- import java.security.AccessController;
- import java.security.PrivilegedAction;
--
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
-
-@@ -51,7 +48,7 @@
- * done by calling {@link Init#init} which should be done in any static block
- * of the files of this library. We ensure that this call is only executed once.
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public final class Init {
-
-@@ -113,20 +110,19 @@
- dbf.setValidating(false);
-
- DocumentBuilder db = dbf.newDocumentBuilder();
--
- // We don't allow users to override the Apache XML Security
- // configuration in the JRE. Users should use the standard security
- // provider mechanism instead if implementing their own
- // transform or canonicalization algorithms.
-- // String cfile = System.getProperty("com.sun.org.apache.xml.internal.security.resource.config");
-- // InputStream is =
-- // Class.forName("com.sun.org.apache.xml.internal.security.Init")
-- // .getResourceAsStream(cfile != null ? cfile : "resource/config.xml");
-+ // InputStream is = Class.forName("com.sun.org.apache.xml.internal.security.Init").getResourceAsStream("resource/config.xml");
- InputStream is = (InputStream) AccessController.doPrivileged(
- new PrivilegedAction() {
- public Object run() {
-+// String cfile = System.getProperty
-+// ("com.sun.org.apache.xml.internal.security.resource.config");
- return getClass().getResourceAsStream
-- ("resource/config.xml");
-+// (cfile != null ? cfile : "resource/config.xml");
-+ ("resource/config.xml");
- }
- });
-
-@@ -167,7 +163,7 @@
- //
- // if (tag.equals("ResourceBundles")){
- // XX_configure_i18n_start = System.currentTimeMillis();
--// Element resource=(Element)el;
-+// Element resource=(Element)el;
- // /* configure internationalization */
- // Attr langAttr = resource.getAttributeNode("defaultLanguageCode");
- // Attr countryAttr = resource.getAttributeNode("defaultCountryCode");
-@@ -202,11 +198,11 @@
-
- if (currMeth.getDeclaringClass().getName()
- .equals(JAVACLASS)) {
-- log.log(java.util.logging.Level.FINE, currMeth.getDeclaringClass().toString());
-+ log.log(java.util.logging.Level.FINE, currMeth.getDe claringClass().toString());
- }
- }*/
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Canonicalizer.register(" + URI + ", "
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Canonicalizer.register(" + URI + ", "
- + JAVACLASS + ")");
- Canonicalizer.register(URI, JAVACLASS);
- } catch (ClassNotFoundException e) {
-@@ -233,9 +229,8 @@
- "JAVACLASS");
- try {
- Class.forName(JAVACLASS);
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Transform.register(" + URI + ", " + JAVACLASS
-- + ")");
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Transform.register(" + URI + ", " + JAVACLASS + ")");
- Transform.register(URI, JAVACLASS);
- } catch (ClassNotFoundException e) {
- Object exArgs[] = { URI, JAVACLASS };
-@@ -284,12 +279,11 @@
- //
- // if (currMeth.getDeclaringClass().getName()
- // .equals(JAVACLASS)) {
--// log.log(java.util.logging.Level.FINE, currMeth.getDeclaringClass().toString());
-+// log.log(java.util.logging.Level.FINE, currMeth.getDe claringClass().toString());
- // }
- // }
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "SignatureAlgorithm.register(" + URI + ", "
-- + JAVACLASS + ")");
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "SignatureAlgorithm.register(" + URI + ", " + JAVACLASS + ")");
- SignatureAlgorithm.register(URI, JAVACLASS);
- } catch (ClassNotFoundException e) {
- Object exArgs[] = { URI, JAVACLASS };
-@@ -320,13 +314,11 @@
- "DESCRIPTION");
-
- if ((Description != null) && (Description.length() > 0)) {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Register Resolver: " + JAVACLASS + ": "
-- + Description);
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Register Resolver: " + JAVACLASS + ": " + Description);
- } else {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Register Resolver: " + JAVACLASS
-- + ": For unknown purposes");
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Register Resolver: " + JAVACLASS + ": For unknown purposes");
- }
- try {
- ResourceResolver.register(JAVACLASS);
-@@ -359,13 +351,11 @@
- "DESCRIPTION");
-
- if ((Description != null) && (Description.length() > 0)) {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Register Resolver: " + JAVACLASS + ": "
-- + Description);
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Register Resolver: " + JAVACLASS + ": " + Description);
- } else {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Register Resolver: " + JAVACLASS
-- + ": For unknown purposes");
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Register Resolver: " + JAVACLASS + ": For unknown purposes");
- }
-
- KeyResolver.register(JAVACLASS);
-@@ -376,8 +366,8 @@
-
- if (tag.equals("PrefixMappings")){
- XX_configure_reg_prefixes_start = System.currentTimeMillis();
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Now I try to bind prefixes:");
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Now I try to bind prefixes:");
-
- Element[] nl = XMLUtils.selectNodes(el.getFirstChild(), CONF_NS,"PrefixMapping");
-
-@@ -386,8 +376,8 @@
- "namespace");
- String prefix = nl[i].getAttributeNS(null,
- "prefix");
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Now I try to bind " + prefix + " to " + namespace);
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Now I try to bind " + prefix + " to " + namespace);
- com.sun.org.apache.xml.internal.security.utils.ElementProxy
- .setDefaultPrefix(namespace, prefix);
- }
-@@ -398,19 +388,19 @@
- long XX_init_end = System.currentTimeMillis();
-
- //J-
-- if (true) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "XX_init " + ((int)(XX_init_end - XX_init_start)) + " ms");
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, " XX_prng " + ((int)(XX_prng_end - XX_prng_start)) + " ms");
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, " XX_parsing " + ((int)(XX_parsing_end - XX_parsing_start)) + " ms");
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, " XX_configure_i18n " + ((int)(XX_configure_i18n_end- XX_configure_i18n_start)) + " ms");
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, " XX_configure_reg_c14n " + ((int)(XX_configure_reg_c14n_end- XX_configure_reg_c14n_start)) + " ms");
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, " XX_configure_reg_jcemapper " + ((int)(XX_configure_reg_jcemapper_end- XX_configure_reg_jcemapper_start)) + " ms");
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, " XX_configure_reg_keyInfo " + ((int)(XX_configure_reg_keyInfo_end- XX_configure_reg_keyInfo_start)) + " ms");
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, " XX_configure_reg_keyResolver " + ((int)(XX_configure_reg_keyResolver_end- XX_configure_reg_keyResolver_start)) + " ms");
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, " XX_configure_reg_prefixes " + ((int)(XX_configure_reg_prefixes_end- XX_configure_reg_prefixes_start)) + " ms");
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, " XX_configure_reg_resourceresolver " + ((int)(XX_configure_reg_resourceresolver_end- XX_configure_reg_resourceresolver_start)) + " ms");
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, " XX_configure_reg_sigalgos " + ((int)(XX_configure_reg_sigalgos_end- XX_configure_reg_sigalgos_start)) + " ms");
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, " XX_configure_reg_transforms " + ((int)(XX_configure_reg_transforms_end- XX_configure_reg_transforms_start)) + " ms");
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, "XX_init " + ((int)(XX_init_end - XX_init_start)) + " ms");
-+ log.log(java.util.logging.Level.FINE, " XX_prng " + ((int)(XX_prng_end - XX_prng_start)) + " ms");
-+ log.log(java.util.logging.Level.FINE, " XX_parsing " + ((int)(XX_parsing_end - XX_parsing_start)) + " ms");
-+ log.log(java.util.logging.Level.FINE, " XX_configure_i18n " + ((int)(XX_configure_i18n_end- XX_configure_i18n_start)) + " ms");
-+ log.log(java.util.logging.Level.FINE, " XX_configure_reg_c14n " + ((int)(XX_configure_reg_c14n_end- XX_configure_reg_c14n_start)) + " ms");
-+ log.log(java.util.logging.Level.FINE, " XX_configure_reg_jcemapper " + ((int)(XX_configure_reg_jcemapper_end- XX_configure_reg_jcemapper_start)) + " ms");
-+ log.log(java.util.logging.Level.FINE, " XX_configure_reg_keyInfo " + ((int)(XX_configure_reg_keyInfo_end- XX_configure_reg_keyInfo_start)) + " ms");
-+ log.log(java.util.logging.Level.FINE, " XX_configure_reg_keyResolver " + ((int)(XX_configure_reg_keyResolver_end- XX_configure_reg_keyResolver_start)) + " ms");
-+ log.log(java.util.logging.Level.FINE, " XX_configure_reg_prefixes " + ((int)(XX_configure_reg_prefixes_end- XX_configure_reg_prefixes_start)) + " ms");
-+ log.log(java.util.logging.Level.FINE, " XX_configure_reg_resourceresolver " + ((int)(XX_configure_reg_resourceresolver_end- XX_configure_reg_resourceresolver_start)) + " ms");
-+ log.log(java.util.logging.Level.FINE, " XX_configure_reg_sigalgos " + ((int)(XX_configure_reg_sigalgos_end- XX_configure_reg_sigalgos_start)) + " ms");
-+ log.log(java.util.logging.Level.FINE, " XX_configure_reg_transforms " + ((int)(XX_configure_reg_transforms_end- XX_configure_reg_transforms_start)) + " ms");
- }
- } catch (Exception e) {
- log.log(java.util.logging.Level.SEVERE, "Bad: ", e);
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/Algorithm.java b/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/Algorithm.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/Algorithm.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/Algorithm.java
-@@ -24,7 +24,7 @@
-
- import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
- import com.sun.org.apache.xml.internal.security.utils.Constants;
--import com.sun.org.apache.xml.internal.security.utils.ElementProxy;
-+import com.sun.org.apache.xml.internal.security.utils.SignatureElementProxy;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
-
-@@ -33,11 +33,7 @@
- * The Algorithm class which stores the Algorithm URI as a string.
- *
- */
--public abstract class Algorithm extends ElementProxy {
--
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(Algorithm.class.getName());
-+public abstract class Algorithm extends SignatureElementProxy {
-
- /**
- *
-@@ -79,7 +75,7 @@
- */
- protected void setAlgorithmURI(String algorithmURI) {
-
-- if ((this._state == MODE_CREATE) && (algorithmURI != null)) {
-+ if ( (algorithmURI != null)) {
- this._constructionElement.setAttributeNS(null, Constants._ATT_ALGORITHM,
- algorithmURI);
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/JCEMapper.java b/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/JCEMapper.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/JCEMapper.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/JCEMapper.java
-@@ -35,7 +35,7 @@
- /**
- * This class maps algorithm identifier URIs to JAVA JCE class names.
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class JCEMapper {
-
-@@ -45,9 +45,9 @@
-
-
-
-- private static Map uriToJCEName = new HashMap();
-+ private static Map uriToJCEName;
-
-- private static Map algorithmsMap = new HashMap();
-+ private static Map algorithmsMap;
-
- private static String providerName = null;
- /**
-@@ -63,6 +63,8 @@
-
- static void loadAlgorithms( Element algorithmsEl) {
- Element[] algorithms = XMLUtils.selectNodes(algorithmsEl.getFirstChild(),Init.CONF_NS,"Algorithm");
-+ uriToJCEName = new HashMap( algorithms.length * 2);
-+ algorithmsMap = new HashMap( algorithms.length * 2);
- for (int i = 0 ;i < algorithms.length ;i ++) {
- Element el = algorithms[i];
- String id = el.getAttribute("URI");
-@@ -70,6 +72,7 @@
- uriToJCEName.put(id, jceName);
- algorithmsMap.put(id, new Algorithm(el));
- }
-+
- }
-
- static Algorithm getAlgorithmMapping(String algoURI) {
-@@ -84,8 +87,8 @@
- *
- */
- public static String translateURItoJCEID(String AlgorithmURI) {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Request for URI " + AlgorithmURI);
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Request for URI " + AlgorithmURI);
-
- String jceName = (String) uriToJCEName.get(AlgorithmURI);
- return jceName;
-@@ -100,8 +103,8 @@
- *
- */
- public static String getAlgorithmClassFromURI(String AlgorithmURI) {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Request for URI " + AlgorithmURI);
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Request for URI " + AlgorithmURI);
-
- return ((Algorithm) algorithmsMap.get(AlgorithmURI)).algorithmClass;
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/MessageDigestAlgorithm.java b/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/MessageDigestAlgorithm.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/MessageDigestAlgorithm.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/MessageDigestAlgorithm.java
-@@ -20,10 +20,10 @@
- */
- package com.sun.org.apache.xml.internal.security.algorithms;
-
--
--
- import java.security.MessageDigest;
- import java.security.NoSuchProviderException;
-+import java.util.HashMap;
-+import java.util.Map;
-
- import com.sun.org.apache.xml.internal.security.signature.XMLSignatureException;
- import com.sun.org.apache.xml.internal.security.utils.Constants;
-@@ -41,11 +41,6 @@
- */
- public class MessageDigestAlgorithm extends Algorithm {
-
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(
-- MessageDigestAlgorithm.class.getName());
--
- /** Message Digest - NOT RECOMMENDED MD5*/
- public static final String ALGO_ID_DIGEST_NOT_RECOMMENDED_MD5 = Constants.MoreAlgorithmsSpecNS + "md5";
- /** Digest - Required SHA1*/
-@@ -76,6 +71,12 @@
- this.algorithm = messageDigest;
- }
-
-+ static ThreadLocal instances=new ThreadLocal() {
-+ protected Object initialValue() {
-+ return new HashMap();
-+ };
-+ };
-+
- /**
- * Factory method for constructing a message digest algorithm by name.
- *
-@@ -86,8 +87,15 @@
- */
- public static MessageDigestAlgorithm getInstance(
- Document doc, String algorithmURI) throws XMLSignatureException {
-+ MessageDigest md = getDigestInstance(algorithmURI);
-+ return new MessageDigestAlgorithm(doc, md, algorithmURI);
-+ }
-
-- String algorithmID = JCEMapper.translateURItoJCEID(algorithmURI);
-+private static MessageDigest getDigestInstance(String algorithmURI) throws XMLSignatureException {
-+ MessageDigest result=(MessageDigest) ((Map)instances.get()).get(algorithmURI);
-+ if (result!=null)
-+ return result;
-+ String algorithmID = JCEMapper.translateURItoJCEID(algorithmURI);
-
- if (algorithmID == null) {
- Object[] exArgs = { algorithmURI };
-@@ -113,8 +121,9 @@
-
- throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
- }
-- return new MessageDigestAlgorithm(doc, md, algorithmURI);
-- }
-+ ((Map)instances.get()).put(algorithmURI, md);
-+ return md;
-+}
-
- /**
- * Returns the actual {@link java.security.MessageDigest} algorithm object
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithm.java b/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithm.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithm.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithm.java
-@@ -25,6 +25,7 @@
- import java.security.SecureRandom;
- import java.security.spec.AlgorithmParameterSpec;
- import java.util.HashMap;
-+import java.util.Map;
-
- import com.sun.org.apache.xml.internal.security.algorithms.implementations.IntegrityHmac;
- import com.sun.org.apache.xml.internal.security.exceptions.AlgorithmAlreadyRegisteredException;
-@@ -52,9 +53,35 @@
- /** All available algorithm classes are registered here */
- static HashMap _algorithmHash = null;
-
-+ static ThreadLocal instancesSigning=new ThreadLocal() {
-+ protected Object initialValue() {
-+ return new HashMap();
-+ };
-+ };
-+
-+ static ThreadLocal instancesVerify=new ThreadLocal() {
-+ protected Object initialValue() {
-+ return new HashMap();
-+ };
-+ };
-+
-+ static ThreadLocal keysSigning=new ThreadLocal() {
-+ protected Object initialValue() {
-+ return new HashMap();
-+ };
-+ };
-+ static ThreadLocal keysVerify=new ThreadLocal() {
-+ protected Object initialValue() {
-+ return new HashMap();
-+ };
-+ };
-+// boolean isForSigning=false;
-+
- /** Field _signatureAlgorithm */
- protected SignatureAlgorithmSpi _signatureAlgorithm = null;
-
-+ private String algorithmURI;
-+
- /**
- * Constructor SignatureAlgorithm
- *
-@@ -64,18 +91,49 @@
- */
- public SignatureAlgorithm(Document doc, String algorithmURI)
- throws XMLSecurityException {
-+ super(doc, algorithmURI);
-+ this.algorithmURI = algorithmURI;
-+ }
-
-- super(doc, algorithmURI);
-
-- try {
-+ private void initializeAlgorithm(boolean isForSigning) throws XMLSignatureException {
-+ if (_signatureAlgorithm!=null) {
-+ return;
-+ }
-+ _signatureAlgorithm=isForSigning ? getInstanceForSigning(algorithmURI) : getInstanceForVerify(algorithmURI);
-+ this._signatureAlgorithm
-+ .engineGetContextFromElement(this._constructionElement);
-+ }
-+ private static SignatureAlgorithmSpi getInstanceForSigning(String algorithmURI) throws XMLSignatureException {
-+ SignatureAlgorithmSpi result=(SignatureAlgorithmSpi) ((Map)instancesSigning.get()).get(algorithmURI);
-+ if (result!=null) {
-+ result.reset();
-+ return result;
-+ }
-+ result=buildSigner(algorithmURI, result);
-+ ((Map)instancesSigning.get()).put(algorithmURI,result);
-+ return result;
-+ }
-+ private static SignatureAlgorithmSpi getInstanceForVerify(String algorithmURI) throws XMLSignatureException {
-+ SignatureAlgorithmSpi result=(SignatureAlgorithmSpi) ((Map)instancesVerify.get()).get(algorithmURI);
-+ if (result!=null) {
-+ result.reset();
-+ return result;
-+ }
-+ result=buildSigner(algorithmURI, result);
-+ ((Map)instancesVerify.get()).put(algorithmURI,result);
-+ return result;
-+ }
-+
-+ private static SignatureAlgorithmSpi buildSigner(String algorithmURI, SignatureAlgorithmSpi result) throws XMLSignatureException {
-+ try {
- Class implementingClass =
- SignatureAlgorithm.getImplementingClass(algorithmURI);
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Create URI \"" + algorithmURI + "\" class \""
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Create URI \"" + algorithmURI + "\" class \""
- + implementingClass + "\"");
--
-- this._signatureAlgorithm =
-- (SignatureAlgorithmSpi) implementingClass.newInstance();
-+ result=(SignatureAlgorithmSpi) implementingClass.newInstance();
-+ return result;
- } catch (IllegalAccessException ex) {
- Object exArgs[] = { algorithmURI, ex.getMessage() };
-
-@@ -92,7 +150,7 @@
- throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs,
- ex);
- }
-- }
-+}
-
- /**
- * Constructor SignatureAlgorithm
-@@ -107,7 +165,8 @@
- throws XMLSecurityException {
-
- this(doc, algorithmURI);
--
-+ this.algorithmURI=algorithmURI;
-+ initializeAlgorithm(true);
- this._signatureAlgorithm.engineSetHMACOutputLength(HMACOutputLength);
- ((IntegrityHmac)this._signatureAlgorithm)
- .engineAddContextToElement(this._constructionElement);
-@@ -124,37 +183,7 @@
- throws XMLSecurityException {
-
- super(element, BaseURI);
--
-- String algorithmURI = this.getURI();
--
-- try {
-- Class implementingClass =
-- SignatureAlgorithm.getImplementingClass(algorithmURI);
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Create URI \"" + algorithmURI + "\" class \""
-- + implementingClass + "\"");
--
-- this._signatureAlgorithm =
-- (SignatureAlgorithmSpi) implementingClass.newInstance();
--
-- this._signatureAlgorithm
-- .engineGetContextFromElement(this._constructionElement);
-- } catch (IllegalAccessException ex) {
-- Object exArgs[] = { algorithmURI, ex.getMessage() };
--
-- throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs,
-- ex);
-- } catch (InstantiationException ex) {
-- Object exArgs[] = { algorithmURI, ex.getMessage() };
--
-- throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs,
-- ex);
-- } catch (NullPointerException ex) {
-- Object exArgs[] = { algorithmURI, ex.getMessage() };
--
-- throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs,
-- ex);
-- }
-+ algorithmURI = this.getURI();
- }
-
- /**
-@@ -175,7 +204,12 @@
- * @return the result of the {@link java.security.Signature#getAlgorithm} method
- */
- public String getJCEAlgorithmString() {
-- return this._signatureAlgorithm.engineGetJCEAlgorithmString();
-+ try {
-+ return getInstanceForVerify(algorithmURI).engineGetJCEAlgorithmString();
-+ } catch (XMLSignatureException e) {
-+ //Ignore.
-+ return null;
-+ }
- }
-
- /**
-@@ -184,7 +218,11 @@
- * @return The Provider of this Signature Alogrithm
- */
- public String getJCEProviderName() {
-- return this._signatureAlgorithm.engineGetJCEProviderName();
-+ try {
-+ return getInstanceForVerify(algorithmURI).engineGetJCEProviderName();
-+ } catch (XMLSignatureException e) {
-+ return null;
-+ }
- }
-
- /**
-@@ -231,7 +269,13 @@
- * @throws XMLSignatureException
- */
- public void initSign(Key signingKey) throws XMLSignatureException {
-- this._signatureAlgorithm.engineInitSign(signingKey);
-+ initializeAlgorithm(true);
-+ Map map=(Map)keysSigning.get();
-+ if (map.get(this.algorithmURI)==signingKey) {
-+ return;
-+ }
-+ map.put(this.algorithmURI,signingKey);
-+ this._signatureAlgorithm.engineInitSign(signingKey);
- }
-
- /**
-@@ -244,6 +288,7 @@
- */
- public void initSign(Key signingKey, SecureRandom secureRandom)
- throws XMLSignatureException {
-+ initializeAlgorithm(true);
- this._signatureAlgorithm.engineInitSign(signingKey, secureRandom);
- }
-
-@@ -258,6 +303,7 @@
- public void initSign(
- Key signingKey, AlgorithmParameterSpec algorithmParameterSpec)
- throws XMLSignatureException {
-+ initializeAlgorithm(true);
- this._signatureAlgorithm.engineInitSign(signingKey,
- algorithmParameterSpec);
- }
-@@ -282,7 +328,13 @@
- * @throws XMLSignatureException
- */
- public void initVerify(Key verificationKey) throws XMLSignatureException {
-- this._signatureAlgorithm.engineInitVerify(verificationKey);
-+ initializeAlgorithm(false);
-+ Map map=(Map)keysVerify.get();
-+ if (map.get(this.algorithmURI)==verificationKey) {
-+ return;
-+ }
-+ map.put(this.algorithmURI,verificationKey);
-+ this._signatureAlgorithm.engineInitVerify(verificationKey);
- }
-
- /**
-@@ -320,7 +372,7 @@
- .getLogger(SignatureAlgorithm.class.getName());
- }
-
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Init() called");
-+ log.log(java.util.logging.Level.FINE, "Init() called");
-
- if (!SignatureAlgorithm._alreadyInitialized) {
- SignatureAlgorithm._algorithmHash = new HashMap(10);
-@@ -340,8 +392,8 @@
- throws AlgorithmAlreadyRegisteredException,XMLSignatureException {
-
- {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Try to register " + algorithmURI + " " + implementingClass);
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Try to register " + algorithmURI + " " + implementingClass);
-
- // are we already registered?
- Class registeredClassClass =
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithmSpi.java b/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithmSpi.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithmSpi.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithmSpi.java
-@@ -20,27 +20,20 @@
- */
- package com.sun.org.apache.xml.internal.security.algorithms;
-
--
--
- import java.security.Key;
- import java.security.SecureRandom;
- import java.security.spec.AlgorithmParameterSpec;
-
- import com.sun.org.apache.xml.internal.security.signature.XMLSignatureException;
--import org.w3c.dom.Document;
- import org.w3c.dom.Element;
-
-
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public abstract class SignatureAlgorithmSpi {
-
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(SignatureAlgorithmSpi.class.getName());
--
- /**
- * Returns the URI representation of <code>Transformation algorithm</code>
- *
-@@ -167,20 +160,6 @@
- protected abstract void engineSetParameter(AlgorithmParameterSpec params)
- throws XMLSignatureException;
-
-- /** Field _doc */
-- Document _doc = null;
--
-- /**
-- * Method engineSetDocument
-- *
-- * @param doc
-- */
-- protected void engineSetDocument(Document doc) {
-- this._doc = doc;
-- }
--
-- /** Field _constructionElement */
-- Element _constructionElement = null;
-
- /**
- * Method engineGetContextFromElement
-@@ -188,7 +167,6 @@
- * @param element
- */
- protected void engineGetContextFromElement(Element element) {
-- this._constructionElement = element;
- }
-
- /**
-@@ -199,4 +177,7 @@
- */
- protected abstract void engineSetHMACOutputLength(int HMACOutputLength)
- throws XMLSignatureException;
-+
-+ public void reset() {
-+ }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/IntegrityHmac.java b/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/IntegrityHmac.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/IntegrityHmac.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/IntegrityHmac.java
-@@ -45,7 +45,7 @@
-
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public abstract class IntegrityHmac extends SignatureAlgorithmSpi {
-
-@@ -80,8 +80,8 @@
- public IntegrityHmac() throws XMLSignatureException {
-
- String algorithmID = JCEMapper.translateURItoJCEID(this.engineGetURI());
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Created IntegrityHmacSHA1 using " + algorithmID);
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Created IntegrityHmacSHA1 using " + algorithmID);
-
- try {
- this._macAlgorithm = Mac.getInstance(algorithmID);
-@@ -105,6 +105,10 @@
- throw new XMLSignatureException("empty");
- }
-
-+ public void reset() {
-+ _HMACOutputLength=0;
-+ }
-+
- /**
- * Proxy method for {@link java.security.Signature#verify(byte[])}
- * which is executed on the internal {@link java.security.Signature} object.
-@@ -153,7 +157,20 @@
- try {
- this._macAlgorithm.init(secretKey);
- } catch (InvalidKeyException ex) {
-- throw new XMLSignatureException("empty", ex);
-+ // reinstantiate Mac object to work around bug in JDK
-+ // see: http://bugs.sun.com/view_bug.do?bug_id=4953555
-+ Mac mac = this._macAlgorithm;
-+ try {
-+ this._macAlgorithm = Mac.getInstance
-+ (_macAlgorithm.getAlgorithm());
-+ } catch (Exception e) {
-+ // this shouldn't occur, but if it does, restore previous Mac
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, "Exception when reinstantiating Mac:" + e);
-+ }
-+ this._macAlgorithm = mac;
-+ }
-+ throw new XMLSignatureException("empty", ex);
- }
- }
-
-@@ -333,7 +350,7 @@
- */
- protected String engineGetJCEAlgorithmString() {
-
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "engineGetJCEAlgorithmString()");
-+ log.log(java.util.logging.Level.FINE, "engineGetJCEAlgorithmString()");
-
- return this._macAlgorithm.getAlgorithm();
- }
-@@ -407,7 +424,8 @@
- /**
- * Class IntegrityHmacSHA1
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
-+ * @version $Revision: 1.5 $
- */
- public static class IntegrityHmacSHA1 extends IntegrityHmac {
-
-@@ -437,7 +455,8 @@
- /**
- * Class IntegrityHmacSHA256
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
-+ * @version $Revision: 1.5 $
- */
- public static class IntegrityHmacSHA256 extends IntegrityHmac {
-
-@@ -467,7 +486,8 @@
- /**
- * Class IntegrityHmacSHA384
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
-+ * @version $Revision: 1.5 $
- */
- public static class IntegrityHmacSHA384 extends IntegrityHmac {
-
-@@ -497,7 +517,8 @@
- /**
- * Class IntegrityHmacSHA512
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
-+ * @version $Revision: 1.5 $
- */
- public static class IntegrityHmacSHA512 extends IntegrityHmac {
-
-@@ -527,7 +548,8 @@
- /**
- * Class IntegrityHmacRIPEMD160
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
-+ * @version $Revision: 1.5 $
- */
- public static class IntegrityHmacRIPEMD160 extends IntegrityHmac {
-
-@@ -557,7 +579,8 @@
- /**
- * Class IntegrityHmacMD5
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
-+ * @version $Revision: 1.5 $
- */
- public static class IntegrityHmacMD5 extends IntegrityHmac {
-
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureBaseRSA.java b/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureBaseRSA.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureBaseRSA.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureBaseRSA.java
-@@ -3,7 +3,7 @@
- * DO NOT REMOVE OR ALTER!
- */
- /*
-- * Copyright 1999-2004 The Apache Software Foundation.
-+ * Copyright 1999-2007 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
-@@ -20,8 +20,6 @@
- */
- package com.sun.org.apache.xml.internal.security.algorithms.implementations;
-
--
--
- import java.security.InvalidAlgorithmParameterException;
- import java.security.InvalidKeyException;
- import java.security.Key;
-@@ -38,329 +36,344 @@
- import com.sun.org.apache.xml.internal.security.signature.XMLSignature;
- import com.sun.org.apache.xml.internal.security.signature.XMLSignatureException;
-
--
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public abstract class SignatureBaseRSA extends SignatureAlgorithmSpi {
-
-- /** {@link java.util.logging} logging facility */
-+ /** {@link java.util.logging} logging facility */
- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(SignatureBaseRSA.class.getName());
-+ java.util.logging.Logger.getLogger
-+ (SignatureBaseRSA.class.getName());
-
- /** @inheritDoc */
-- public abstract String engineGetURI();
-+ public abstract String engineGetURI();
-
-- /** Field algorithm */
-- private java.security.Signature _signatureAlgorithm = null;
-+ /** Field algorithm */
-+ private java.security.Signature _signatureAlgorithm = null;
-
-- /**
-- * Constructor SignatureRSA
-- *
-- * @throws XMLSignatureException
-- */
-- public SignatureBaseRSA() throws XMLSignatureException {
-+ /**
-+ * Constructor SignatureRSA
-+ *
-+ * @throws XMLSignatureException
-+ */
-+ public SignatureBaseRSA() throws XMLSignatureException {
-
-- String algorithmID = JCEMapper.translateURItoJCEID(this.engineGetURI());
-+ String algorithmID = JCEMapper.translateURItoJCEID(this.engineGetURI());
-
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Created SignatureDSA using " + algorithmID);
-- String provider=JCEMapper.getProviderId();
-- try {
-- if (provider==null) {
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Created SignatureRSA using " + algorithmID);
-+ String provider=JCEMapper.getProviderId();
-+ try {
-+ if (provider==null) {
- this._signatureAlgorithm = Signature.getInstance(algorithmID);
-- } else {
-+ } else {
- this._signatureAlgorithm = Signature.getInstance(algorithmID,provider);
-- }
-- } catch (java.security.NoSuchAlgorithmException ex) {
-- Object[] exArgs = { algorithmID,
-- ex.getLocalizedMessage() };
-+ }
-+ } catch (java.security.NoSuchAlgorithmException ex) {
-+ Object[] exArgs = { algorithmID, ex.getLocalizedMessage() };
-
-- throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
-- } catch (NoSuchProviderException ex) {
-- Object[] exArgs = { algorithmID,
-- ex.getLocalizedMessage() };
-+ throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
-+ } catch (NoSuchProviderException ex) {
-+ Object[] exArgs = { algorithmID, ex.getLocalizedMessage() };
-
-- throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
-+ throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
- }
-- }
-+ }
-
-- /** @inheritDoc */
-- protected void engineSetParameter(AlgorithmParameterSpec params)
-- throws XMLSignatureException {
-+ /** @inheritDoc */
-+ protected void engineSetParameter(AlgorithmParameterSpec params)
-+ throws XMLSignatureException {
-
-- try {
-- this._signatureAlgorithm.setParameter(params);
-- } catch (InvalidAlgorithmParameterException ex) {
-- throw new XMLSignatureException("empty", ex);
-- }
-- }
-+ try {
-+ this._signatureAlgorithm.setParameter(params);
-+ } catch (InvalidAlgorithmParameterException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-
-- /** @inheritDoc */
-- protected boolean engineVerify(byte[] signature)
-- throws XMLSignatureException {
-+ /** @inheritDoc */
-+ protected boolean engineVerify(byte[] signature)
-+ throws XMLSignatureException {
-
-- try {
-- return this._signatureAlgorithm.verify(signature);
-- } catch (SignatureException ex) {
-- throw new XMLSignatureException("empty", ex);
-- }
-- }
-+ try {
-+ return this._signatureAlgorithm.verify(signature);
-+ } catch (SignatureException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-
-- /** @inheritDoc */
-- protected void engineInitVerify(Key publicKey) throws XMLSignatureException {
-+ /** @inheritDoc */
-+ protected void engineInitVerify(Key publicKey) throws XMLSignatureException {
-
-- if (!(publicKey instanceof PublicKey)) {
-- String supplied = publicKey.getClass().getName();
-- String needed = PublicKey.class.getName();
-- Object exArgs[] = { supplied, needed };
-+ if (!(publicKey instanceof PublicKey)) {
-+ String supplied = publicKey.getClass().getName();
-+ String needed = PublicKey.class.getName();
-+ Object exArgs[] = { supplied, needed };
-
-- throw new XMLSignatureException("algorithms.WrongKeyForThisOperation",
-- exArgs);
-- }
-+ throw new XMLSignatureException
-+ ("algorithms.WrongKeyForThisOperation", exArgs);
-+ }
-
-- try {
-- this._signatureAlgorithm.initVerify((PublicKey) publicKey);
-- } catch (InvalidKeyException ex) {
-- throw new XMLSignatureException("empty", ex);
-- }
-- }
-+ try {
-+ this._signatureAlgorithm.initVerify((PublicKey) publicKey);
-+ } catch (InvalidKeyException ex) {
-+ // reinstantiate Signature object to work around bug in JDK
-+ // see: http://bugs.sun.com/view_bug.do?bug_id=4953555
-+ Signature sig = this._signatureAlgorithm;
-+ try {
-+ this._signatureAlgorithm = Signature.getInstance
-+ (_signatureAlgorithm.getAlgorithm());
-+ } catch (Exception e) {
-+ // this shouldn't occur, but if it does, restore previous
-+ // Signature
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, "Exception when reinstantiating Signature:" + e);
-+ }
-+ this._signatureAlgorithm = sig;
-+ }
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-
-- /** @inheritDoc */
-- protected byte[] engineSign() throws XMLSignatureException {
-+ /** @inheritDoc */
-+ protected byte[] engineSign() throws XMLSignatureException {
-+ try {
-+ return this._signatureAlgorithm.sign();
-+ } catch (SignatureException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-
-- try {
-- return this._signatureAlgorithm.sign();
-- } catch (SignatureException ex) {
-- throw new XMLSignatureException("empty", ex);
-- }
-- }
-+ /** @inheritDoc */
-+ protected void engineInitSign(Key privateKey, SecureRandom secureRandom)
-+ throws XMLSignatureException {
-
-- /** @inheritDoc */
-- protected void engineInitSign(Key privateKey, SecureRandom secureRandom)
-- throws XMLSignatureException {
-+ if (!(privateKey instanceof PrivateKey)) {
-+ String supplied = privateKey.getClass().getName();
-+ String needed = PrivateKey.class.getName();
-+ Object exArgs[] = { supplied, needed };
-
-- if (!(privateKey instanceof PrivateKey)) {
-- String supplied = privateKey.getClass().getName();
-- String needed = PrivateKey.class.getName();
-- Object exArgs[] = { supplied, needed };
-+ throw new XMLSignatureException
-+ ("algorithms.WrongKeyForThisOperation", exArgs);
-+ }
-
-- throw new XMLSignatureException("algorithms.WrongKeyForThisOperation",
-- exArgs);
-- }
-+ try {
-+ this._signatureAlgorithm.initSign
-+ ((PrivateKey) privateKey, secureRandom);
-+ } catch (InvalidKeyException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-
-- try {
-- this._signatureAlgorithm.initSign((PrivateKey) privateKey,
-- secureRandom);
-- } catch (InvalidKeyException ex) {
-- throw new XMLSignatureException("empty", ex);
-- }
-- }
-+ /** @inheritDoc */
-+ protected void engineInitSign(Key privateKey) throws XMLSignatureException {
-
-- /** @inheritDoc */
-- protected void engineInitSign(Key privateKey) throws XMLSignatureException {
-+ if (!(privateKey instanceof PrivateKey)) {
-+ String supplied = privateKey.getClass().getName();
-+ String needed = PrivateKey.class.getName();
-+ Object exArgs[] = { supplied, needed };
-
-- if (!(privateKey instanceof PrivateKey)) {
-- String supplied = privateKey.getClass().getName();
-- String needed = PrivateKey.class.getName();
-- Object exArgs[] = { supplied, needed };
-+ throw new XMLSignatureException
-+ ("algorithms.WrongKeyForThisOperation", exArgs);
-+ }
-
-- throw new XMLSignatureException("algorithms.WrongKeyForThisOperation",
-- exArgs);
-- }
-+ try {
-+ this._signatureAlgorithm.initSign((PrivateKey) privateKey);
-+ } catch (InvalidKeyException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-
-- try {
-- this._signatureAlgorithm.initSign((PrivateKey) privateKey);
-- } catch (InvalidKeyException ex) {
-- throw new XMLSignatureException("empty", ex);
-- }
-- }
-+ /** @inheritDoc */
-+ protected void engineUpdate(byte[] input) throws XMLSignatureException {
-+ try {
-+ this._signatureAlgorithm.update(input);
-+ } catch (SignatureException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-
-- /** @inheritDoc */
-- protected void engineUpdate(byte[] input) throws XMLSignatureException {
-+ /** @inheritDoc */
-+ protected void engineUpdate(byte input) throws XMLSignatureException {
-+ try {
-+ this._signatureAlgorithm.update(input);
-+ } catch (SignatureException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-
-- try {
-- this._signatureAlgorithm.update(input);
-- } catch (SignatureException ex) {
-- throw new XMLSignatureException("empty", ex);
-- }
-- }
-+ /** @inheritDoc */
-+ protected void engineUpdate(byte buf[], int offset, int len)
-+ throws XMLSignatureException {
-+ try {
-+ this._signatureAlgorithm.update(buf, offset, len);
-+ } catch (SignatureException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-
-- /** @inheritDoc */
-- protected void engineUpdate(byte input) throws XMLSignatureException {
-+ /** @inheritDoc */
-+ protected String engineGetJCEAlgorithmString() {
-+ return this._signatureAlgorithm.getAlgorithm();
-+ }
-
-- try {
-- this._signatureAlgorithm.update(input);
-- } catch (SignatureException ex) {
-- throw new XMLSignatureException("empty", ex);
-- }
-- }
-+ /** @inheritDoc */
-+ protected String engineGetJCEProviderName() {
-+ return this._signatureAlgorithm.getProvider().getName();
-+ }
-
-- /** @inheritDoc */
-- protected void engineUpdate(byte buf[], int offset, int len)
-- throws XMLSignatureException {
-+ /** @inheritDoc */
-+ protected void engineSetHMACOutputLength(int HMACOutputLength)
-+ throws XMLSignatureException {
-+ throw new XMLSignatureException
-+ ("algorithms.HMACOutputLengthOnlyForHMAC");
-+ }
-
-- try {
-- this._signatureAlgorithm.update(buf, offset, len);
-- } catch (SignatureException ex) {
-- throw new XMLSignatureException("empty", ex);
-- }
-- }
-+ /** @inheritDoc */
-+ protected void engineInitSign(
-+ Key signingKey, AlgorithmParameterSpec algorithmParameterSpec)
-+ throws XMLSignatureException {
-+ throw new XMLSignatureException(
-+ "algorithms.CannotUseAlgorithmParameterSpecOnRSA");
-+ }
-
-- /** @inheritDoc */
-- protected String engineGetJCEAlgorithmString() {
-- return this._signatureAlgorithm.getAlgorithm();
-- }
-+ /**
-+ * Class SignatureRSASHA1
-+ *
-+ * @author $Author: mullan $
-+ * @version $Revision: 1.5 $
-+ */
-+ public static class SignatureRSASHA1 extends SignatureBaseRSA {
-
-- /** @inheritDoc */
-- protected String engineGetJCEProviderName() {
-- return this._signatureAlgorithm.getProvider().getName();
-- }
-+ /**
-+ * Constructor SignatureRSASHA1
-+ *
-+ * @throws XMLSignatureException
-+ */
-+ public SignatureRSASHA1() throws XMLSignatureException {
-+ super();
-+ }
-
-- /** @inheritDoc */
-- protected void engineSetHMACOutputLength(int HMACOutputLength)
-- throws XMLSignatureException {
-- throw new XMLSignatureException("algorithms.HMACOutputLengthOnlyForHMAC");
-- }
-+ /** @inheritDoc */
-+ public String engineGetURI() {
-+ return XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA1;
-+ }
-+ }
-
-- /** @inheritDoc */
-- protected void engineInitSign(
-- Key signingKey, AlgorithmParameterSpec algorithmParameterSpec)
-- throws XMLSignatureException {
-- throw new XMLSignatureException(
-- "algorithms.CannotUseAlgorithmParameterSpecOnRSA");
-- }
-+ /**
-+ * Class SignatureRSASHA256
-+ *
-+ * @author $Author: mullan $
-+ * @version $Revision: 1.5 $
-+ */
-+ public static class SignatureRSASHA256 extends SignatureBaseRSA {
-
-- /**
-- * Class SignatureRSASHA1
-- *
-- * @author $Author: raul $
-- */
-- public static class SignatureRSASHA1 extends SignatureBaseRSA {
-+ /**
-+ * Constructor SignatureRSASHA256
-+ *
-+ * @throws XMLSignatureException
-+ */
-+ public SignatureRSASHA256() throws XMLSignatureException {
-+ super();
-+ }
-
-- /**
-- * Constructor SignatureRSASHA1
-- *
-- * @throws XMLSignatureException
-- */
-- public SignatureRSASHA1() throws XMLSignatureException {
-- super();
-- }
-+ /** @inheritDoc */
-+ public String engineGetURI() {
-+ return XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA256;
-+ }
-+ }
-
-- /** @inheritDoc */
-- public String engineGetURI() {
-- return XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA1;
-- }
-- }
-+ /**
-+ * Class SignatureRSASHA384
-+ *
-+ * @author $Author: mullan $
-+ * @version $Revision: 1.5 $
-+ */
-+ public static class SignatureRSASHA384 extends SignatureBaseRSA {
-
-- /**
-- * Class SignatureRSASHA256
-- *
-- * @author $Author: raul $
-- */
-- public static class SignatureRSASHA256 extends SignatureBaseRSA {
-+ /**
-+ * Constructor SignatureRSASHA384
-+ *
-+ * @throws XMLSignatureException
-+ */
-+ public SignatureRSASHA384() throws XMLSignatureException {
-+ super();
-+ }
-
-- /**
-- * Constructor SignatureRSASHA256
-- *
-- * @throws XMLSignatureException
-- */
-- public SignatureRSASHA256() throws XMLSignatureException {
-- super();
-- }
-+ /** @inheritDoc */
-+ public String engineGetURI() {
-+ return XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA384;
-+ }
-+ }
-
-- /** @inheritDoc */
-- public String engineGetURI() {
-- return XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA256;
-- }
-- }
-+ /**
-+ * Class SignatureRSASHA512
-+ *
-+ * @author $Author: mullan $
-+ * @version $Revision: 1.5 $
-+ */
-+ public static class SignatureRSASHA512 extends SignatureBaseRSA {
-
-- /**
-- * Class SignatureRSASHA384
-- *
-- * @author $Author: raul $
-- */
-- public static class SignatureRSASHA384 extends SignatureBaseRSA {
-+ /**
-+ * Constructor SignatureRSASHA512
-+ *
-+ * @throws XMLSignatureException
-+ */
-+ public SignatureRSASHA512() throws XMLSignatureException {
-+ super();
-+ }
-
-- /**
-- * Constructor SignatureRSASHA384
-- *
-- * @throws XMLSignatureException
-- */
-- public SignatureRSASHA384() throws XMLSignatureException {
-- super();
-- }
-+ /** @inheritDoc */
-+ public String engineGetURI() {
-+ return XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA512;
-+ }
-+ }
-
-- /** @inheritDoc */
-- public String engineGetURI() {
-- return XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA384;
-- }
-- }
-+ /**
-+ * Class SignatureRSARIPEMD160
-+ *
-+ * @author $Author: mullan $
-+ * @version $Revision: 1.5 $
-+ */
-+ public static class SignatureRSARIPEMD160 extends SignatureBaseRSA {
-
-- /**
-- * Class SignatureRSASHA512
-- *
-- * @author $Author: raul $
-- */
-- public static class SignatureRSASHA512 extends SignatureBaseRSA {
-+ /**
-+ * Constructor SignatureRSARIPEMD160
-+ *
-+ * @throws XMLSignatureException
-+ */
-+ public SignatureRSARIPEMD160() throws XMLSignatureException {
-+ super();
-+ }
-
-- /**
-- * Constructor SignatureRSASHA512
-- *
-- * @throws XMLSignatureException
-- */
-- public SignatureRSASHA512() throws XMLSignatureException {
-- super();
-- }
-+ /** @inheritDoc */
-+ public String engineGetURI() {
-+ return XMLSignature.ALGO_ID_SIGNATURE_RSA_RIPEMD160;
-+ }
-+ }
-
-- /** @inheritDoc */
-- public String engineGetURI() {
-- return XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA512;
-- }
-- }
-+ /**
-+ * Class SignatureRSAMD5
-+ *
-+ * @author $Author: mullan $
-+ * @version $Revision: 1.5 $
-+ */
-+ public static class SignatureRSAMD5 extends SignatureBaseRSA {
-
-- /**
-- * Class SignatureRSARIPEMD160
-- *
-- * @author $Author: raul $
-- */
-- public static class SignatureRSARIPEMD160 extends SignatureBaseRSA {
-+ /**
-+ * Constructor SignatureRSAMD5
-+ *
-+ * @throws XMLSignatureException
-+ */
-+ public SignatureRSAMD5() throws XMLSignatureException {
-+ super();
-+ }
-
-- /**
-- * Constructor SignatureRSARIPEMD160
-- *
-- * @throws XMLSignatureException
-- */
-- public SignatureRSARIPEMD160() throws XMLSignatureException {
-- super();
-- }
--
-- /** @inheritDoc */
-- public String engineGetURI() {
-- return XMLSignature.ALGO_ID_SIGNATURE_RSA_RIPEMD160;
-- }
-- }
--
-- /**
-- * Class SignatureRSAMD5
-- *
-- * @author $Author: raul $
-- */
-- public static class SignatureRSAMD5 extends SignatureBaseRSA {
--
-- /**
-- * Constructor SignatureRSAMD5
-- *
-- * @throws XMLSignatureException
-- */
-- public SignatureRSAMD5() throws XMLSignatureException {
-- super();
-- }
--
-- /** @inheritDoc */
-- public String engineGetURI() {
-- return XMLSignature.ALGO_ID_SIGNATURE_NOT_RECOMMENDED_RSA_MD5;
-- }
-- }
-+ /** @inheritDoc */
-+ public String engineGetURI() {
-+ return XMLSignature.ALGO_ID_SIGNATURE_NOT_RECOMMENDED_RSA_MD5;
-+ }
-+ }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureDSA.java b/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureDSA.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureDSA.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureDSA.java
-@@ -20,8 +20,6 @@
- */
- package com.sun.org.apache.xml.internal.security.algorithms.implementations;
-
--
--
- import java.io.IOException;
- import java.security.InvalidAlgorithmParameterException;
- import java.security.InvalidKeyException;
-@@ -39,342 +37,359 @@
- import com.sun.org.apache.xml.internal.security.utils.Base64;
- import com.sun.org.apache.xml.internal.security.utils.Constants;
-
--
- /**
- *
-- * @author $Author: vishal $
-+ * @author $Author: mullan $
- */
- public class SignatureDSA extends SignatureAlgorithmSpi {
-
-- /** {@link java.util.logging} logging facility */
-+ /** {@link java.util.logging} logging facility */
- static java.util.logging.Logger log =
- java.util.logging.Logger.getLogger(SignatureDSA.class.getName());
-
-- /** Field _URI */
-- public static final String _URI = Constants.SignatureSpecNS + "dsa-sha1";
-+ /** Field _URI */
-+ public static final String _URI = Constants.SignatureSpecNS + "dsa-sha1";
-
-- /** Field algorithm */
-- private java.security.Signature _signatureAlgorithm = null;
-+ /** Field algorithm */
-+ private java.security.Signature _signatureAlgorithm = null;
-
-- /**
-- * Method engineGetURI
-- *
-- * @inheritDoc
-- */
-- protected String engineGetURI() {
-- return SignatureDSA._URI;
-- }
-+ /**
-+ * Method engineGetURI
-+ *
-+ * @inheritDoc
-+ */
-+ protected String engineGetURI() {
-+ return SignatureDSA._URI;
-+ }
-
-- /**
-- * Constructor SignatureDSA
-- *
-- * @throws XMLSignatureException
-- */
-- public SignatureDSA() throws XMLSignatureException {
-+ /**
-+ * Constructor SignatureDSA
-+ *
-+ * @throws XMLSignatureException
-+ */
-+ public SignatureDSA() throws XMLSignatureException {
-
-- String algorithmID = JCEMapper.translateURItoJCEID(SignatureDSA._URI);
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Created SignatureDSA using " + algorithmID);
-+ String algorithmID = JCEMapper.translateURItoJCEID(SignatureDSA._URI);
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Created SignatureDSA using " + algorithmID);
-
-- try {
-- this._signatureAlgorithm = Signature.getInstance(algorithmID);
-- } catch (java.security.NoSuchAlgorithmException ex) {
-- Object[] exArgs = { algorithmID,
-- ex.getLocalizedMessage() };
-+ String provider = JCEMapper.getProviderId();
-+ try {
-+ if (provider == null) {
-+ this._signatureAlgorithm = Signature.getInstance(algorithmID);
-+ } else {
-+ this._signatureAlgorithm =
-+ Signature.getInstance(algorithmID, provider);
-+ }
-+ } catch (java.security.NoSuchAlgorithmException ex) {
-+ Object[] exArgs = { algorithmID, ex.getLocalizedMessage() };
-+ throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
-+ } catch (java.security.NoSuchProviderException ex) {
-+ Object[] exArgs = { algorithmID, ex.getLocalizedMessage() };
-+ throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
-+ }
-+ }
-
-- throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
-- }
-- }
-+ /**
-+ * @inheritDoc
-+ */
-+ protected void engineSetParameter(AlgorithmParameterSpec params)
-+ throws XMLSignatureException {
-
-- /**
-- * @inheritDoc
-- */
-- protected void engineSetParameter(AlgorithmParameterSpec params)
-+ try {
-+ this._signatureAlgorithm.setParameter(params);
-+ } catch (InvalidAlgorithmParameterException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-+
-+ /**
-+ * @inheritDoc
-+ */
-+ protected boolean engineVerify(byte[] signature)
- throws XMLSignatureException {
-
-- try {
-- this._signatureAlgorithm.setParameter(params);
-- } catch (InvalidAlgorithmParameterException ex) {
-- throw new XMLSignatureException("empty", ex);
-- }
-- }
-+ try {
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Called DSA.verify() on " + Base64.encode(signature));
-
-- /**
-- * @inheritDoc
-- */
-- protected boolean engineVerify(byte[] signature)
-+ byte[] jcebytes = SignatureDSA.convertXMLDSIGtoASN1(signature);
-+
-+ return this._signatureAlgorithm.verify(jcebytes);
-+ } catch (SignatureException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ } catch (IOException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-+
-+ /**
-+ * @inheritDoc
-+ */
-+ protected void engineInitVerify(Key publicKey) throws XMLSignatureException {
-+
-+ if (!(publicKey instanceof PublicKey)) {
-+ String supplied = publicKey.getClass().getName();
-+ String needed = PublicKey.class.getName();
-+ Object exArgs[] = { supplied, needed };
-+
-+ throw new XMLSignatureException
-+ ("algorithms.WrongKeyForThisOperation", exArgs);
-+ }
-+
-+ try {
-+ this._signatureAlgorithm.initVerify((PublicKey) publicKey);
-+ } catch (InvalidKeyException ex) {
-+ // reinstantiate Signature object to work around bug in JDK
-+ // see: http://bugs.sun.com/view_bug.do?bug_id=4953555
-+ Signature sig = this._signatureAlgorithm;
-+ try {
-+ this._signatureAlgorithm = Signature.getInstance
-+ (_signatureAlgorithm.getAlgorithm());
-+ } catch (Exception e) {
-+ // this shouldn't occur, but if it does, restore previous
-+ // Signature
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, "Exception when reinstantiating Signature:" + e);
-+ }
-+ this._signatureAlgorithm = sig;
-+ }
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-+
-+ /**
-+ * @inheritDoc
-+ */
-+ protected byte[] engineSign() throws XMLSignatureException {
-+
-+ try {
-+ byte jcebytes[] = this._signatureAlgorithm.sign();
-+
-+ return SignatureDSA.convertASN1toXMLDSIG(jcebytes);
-+ } catch (IOException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ } catch (SignatureException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-+
-+ /**
-+ * @inheritDoc
-+ */
-+ protected void engineInitSign(Key privateKey, SecureRandom secureRandom)
- throws XMLSignatureException {
-
-- try {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Called DSA.verify() on " + Base64.encode(signature));
-+ if (!(privateKey instanceof PrivateKey)) {
-+ String supplied = privateKey.getClass().getName();
-+ String needed = PrivateKey.class.getName();
-+ Object exArgs[] = { supplied, needed };
-
-- byte[] jcebytes = SignatureDSA.convertXMLDSIGtoASN1(signature);
-+ throw new XMLSignatureException
-+ ("algorithms.WrongKeyForThisOperation", exArgs);
-+ }
-
-- return this._signatureAlgorithm.verify(jcebytes);
-- } catch (SignatureException ex) {
-- throw new XMLSignatureException("empty", ex);
-- } catch (IOException ex) {
-- throw new XMLSignatureException("empty", ex);
-- }
-- }
-+ try {
-+ this._signatureAlgorithm.initSign((PrivateKey) privateKey,
-+ secureRandom);
-+ } catch (InvalidKeyException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-
-- /**
-- * @inheritDoc
-- */
-- protected void engineInitVerify(Key publicKey) throws XMLSignatureException {
-+ /**
-+ * @inheritDoc
-+ */
-+ protected void engineInitSign(Key privateKey) throws XMLSignatureException {
-
-- if (!(publicKey instanceof PublicKey)) {
-- String supplied = publicKey.getClass().getName();
-- String needed = PublicKey.class.getName();
-- Object exArgs[] = { supplied, needed };
-+ if (!(privateKey instanceof PrivateKey)) {
-+ String supplied = privateKey.getClass().getName();
-+ String needed = PrivateKey.class.getName();
-+ Object exArgs[] = { supplied, needed };
-
-- throw new XMLSignatureException("algorithms.WrongKeyForThisOperation",
-- exArgs);
-- }
-+ throw new XMLSignatureException
-+ ("algorithms.WrongKeyForThisOperation", exArgs);
-+ }
-
-- try {
-- this._signatureAlgorithm.initVerify((PublicKey) publicKey);
-- } catch (InvalidKeyException ex) {
-- throw new XMLSignatureException("empty", ex);
-- }
-- }
-+ try {
-+ this._signatureAlgorithm.initSign((PrivateKey) privateKey);
-+ } catch (InvalidKeyException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-
-- /**
-- * @inheritDoc
-- */
-- protected byte[] engineSign() throws XMLSignatureException {
-+ /**
-+ * @inheritDoc
-+ */
-+ protected void engineUpdate(byte[] input) throws XMLSignatureException {
-+ try {
-+ this._signatureAlgorithm.update(input);
-+ } catch (SignatureException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-
-- try {
-- byte jcebytes[] = this._signatureAlgorithm.sign();
-+ /**
-+ * @inheritDoc
-+ */
-+ protected void engineUpdate(byte input) throws XMLSignatureException {
-+ try {
-+ this._signatureAlgorithm.update(input);
-+ } catch (SignatureException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-
-- return SignatureDSA.convertASN1toXMLDSIG(jcebytes);
-- } catch (IOException ex) {
-- throw new XMLSignatureException("empty", ex);
-- } catch (SignatureException ex) {
-- throw new XMLSignatureException("empty", ex);
-- }
-- }
-+ /**
-+ * @inheritDoc
-+ */
-+ protected void engineUpdate(byte buf[], int offset, int len)
-+ throws XMLSignatureException {
-+ try {
-+ this._signatureAlgorithm.update(buf, offset, len);
-+ } catch (SignatureException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-
-- /**
-- * @inheritDoc
-- */
-- protected void engineInitSign(Key privateKey, SecureRandom secureRandom)
-- throws XMLSignatureException {
-+ /**
-+ * Method engineGetJCEAlgorithmString
-+ *
-+ * @inheritDoc
-+ */
-+ protected String engineGetJCEAlgorithmString() {
-+ return this._signatureAlgorithm.getAlgorithm();
-+ }
-
-- if (!(privateKey instanceof PrivateKey)) {
-- String supplied = privateKey.getClass().getName();
-- String needed = PrivateKey.class.getName();
-- Object exArgs[] = { supplied, needed };
-+ /**
-+ * Method engineGetJCEProviderName
-+ *
-+ * @inheritDoc
-+ */
-+ protected String engineGetJCEProviderName() {
-+ return this._signatureAlgorithm.getProvider().getName();
-+ }
-
-- throw new XMLSignatureException("algorithms.WrongKeyForThisOperation",
-- exArgs);
-- }
--
-- try {
-- this._signatureAlgorithm.initSign((PrivateKey) privateKey,
-- secureRandom);
-- } catch (InvalidKeyException ex) {
-- throw new XMLSignatureException("empty", ex);
-- }
-- }
--
-- /**
-- * @inheritDoc
-- */
-- protected void engineInitSign(Key privateKey) throws XMLSignatureException {
--
-- if (!(privateKey instanceof PrivateKey)) {
-- String supplied = privateKey.getClass().getName();
-- String needed = PrivateKey.class.getName();
-- Object exArgs[] = { supplied, needed };
--
-- throw new XMLSignatureException("algorithms.WrongKeyForThisOperation",
-- exArgs);
-- }
--
-- try {
-- this._signatureAlgorithm.initSign((PrivateKey) privateKey);
-- } catch (InvalidKeyException ex) {
-- throw new XMLSignatureException("empty", ex);
-- }
-- }
--
-- /**
-- * @inheritDoc
-- */
-- protected void engineUpdate(byte[] input) throws XMLSignatureException {
--
-- try {
-- this._signatureAlgorithm.update(input);
-- } catch (SignatureException ex) {
-- throw new XMLSignatureException("empty", ex);
-- }
-- }
--
-- /**
-- * @inheritDoc
-- */
-- protected void engineUpdate(byte input) throws XMLSignatureException {
--
-- try {
-- this._signatureAlgorithm.update(input);
-- } catch (SignatureException ex) {
-- throw new XMLSignatureException("empty", ex);
-- }
-- }
--
-- /**
-- * @inheritDoc
-- */
-- protected void engineUpdate(byte buf[], int offset, int len)
-- throws XMLSignatureException {
--
-- try {
-- this._signatureAlgorithm.update(buf, offset, len);
-- } catch (SignatureException ex) {
-- throw new XMLSignatureException("empty", ex);
-- }
-- }
--
-- /**
-- * Method engineGetJCEAlgorithmString
-- *
-- * @inheritDoc
-- */
-- protected String engineGetJCEAlgorithmString() {
-- return this._signatureAlgorithm.getAlgorithm();
-- }
--
-- /**
-- * Method engineGetJCEProviderName
-- *
-- * @inheritDoc
-- */
-- protected String engineGetJCEProviderName() {
-- return this._signatureAlgorithm.getProvider().getName();
-- }
--
--
-- /**
-- * Converts an ASN.1 DSA value to a XML Signature DSA Value.
-- *
-- * The JAVA JCE DSA Signature algorithm creates ASN.1 encoded (r,s) value
-- * pairs; the XML Signature requires the core BigInteger values.
-- *
-- * @param asn1Bytes
-- * @return the decode bytes
-- *
-- * @throws IOException
-- * @see <A HREF="http://www.w3.org/TR/xmldsig-core/#dsa-sha1">6.4.1 DSA</A>
-- */
-- private static byte[] convertASN1toXMLDSIG(byte asn1Bytes[])
-+ /**
-+ * Converts an ASN.1 DSA value to a XML Signature DSA Value.
-+ *
-+ * The JAVA JCE DSA Signature algorithm creates ASN.1 encoded (r,s) value
-+ * pairs; the XML Signature requires the core BigInteger values.
-+ *
-+ * @param asn1Bytes
-+ * @return the decode bytes
-+ *
-+ * @throws IOException
-+ * @see <A HREF="http://www.w3.org/TR/xmldsig-core/#dsa-sha1">6.4.1 DSA</A>
-+ */
-+ private static byte[] convertASN1toXMLDSIG(byte asn1Bytes[])
- throws IOException {
-
-- byte rLength = asn1Bytes[3];
-- int i;
-+ byte rLength = asn1Bytes[3];
-+ int i;
-
-- for (i = rLength; (i > 0) && (asn1Bytes[(4 + rLength) - i] == 0); i--);
-+ for (i = rLength; (i > 0) && (asn1Bytes[(4 + rLength) - i] == 0); i--);
-
-- byte sLength = asn1Bytes[5 + rLength];
-- int j;
-+ byte sLength = asn1Bytes[5 + rLength];
-+ int j;
-
-- for (j = sLength;
-+ for (j = sLength;
- (j > 0) && (asn1Bytes[(6 + rLength + sLength) - j] == 0); j--);
-
-- if ((asn1Bytes[0] != 48) || (asn1Bytes[1] != asn1Bytes.length - 2)
-+ if ((asn1Bytes[0] != 48) || (asn1Bytes[1] != asn1Bytes.length - 2)
- || (asn1Bytes[2] != 2) || (i > 20)
- || (asn1Bytes[4 + rLength] != 2) || (j > 20)) {
-- throw new IOException("Invalid ASN.1 format of DSA signature");
-- }
-- byte xmldsigBytes[] = new byte[40];
-+ throw new IOException("Invalid ASN.1 format of DSA signature");
-+ }
-+ byte xmldsigBytes[] = new byte[40];
-
-- System.arraycopy(asn1Bytes, (4 + rLength) - i, xmldsigBytes, 20 - i,
-+ System.arraycopy(asn1Bytes, (4 + rLength) - i, xmldsigBytes, 20 - i,
- i);
-- System.arraycopy(asn1Bytes, (6 + rLength + sLength) - j, xmldsigBytes,
-+ System.arraycopy(asn1Bytes, (6 + rLength + sLength) - j, xmldsigBytes,
- 40 - j, j);
-
-- return xmldsigBytes;
-- }
-+ return xmldsigBytes;
-+ }
-
-- /**
-- * Converts a XML Signature DSA Value to an ASN.1 DSA value.
-- *
-- * The JAVA JCE DSA Signature algorithm creates ASN.1 encoded (r,s) value
-- * pairs; the XML Signature requires the core BigInteger values.
-- *
-- * @param xmldsigBytes
-- * @return the encoded ASN.1 bytes
-- *
-- * @throws IOException
-- * @see <A HREF="http://www.w3.org/TR/xmldsig-core/#dsa-sha1">6.4.1 DSA</A>
-- */
-- private static byte[] convertXMLDSIGtoASN1(byte xmldsigBytes[])
-+ /**
-+ * Converts a XML Signature DSA Value to an ASN.1 DSA value.
-+ *
-+ * The JAVA JCE DSA Signature algorithm creates ASN.1 encoded (r,s) value
-+ * pairs; the XML Signature requires the core BigInteger values.
-+ *
-+ * @param xmldsigBytes
-+ * @return the encoded ASN.1 bytes
-+ *
-+ * @throws IOException
-+ * @see <A HREF="http://www.w3.org/TR/xmldsig-core/#dsa-sha1">6.4.1 DSA</A>
-+ */
-+ private static byte[] convertXMLDSIGtoASN1(byte xmldsigBytes[])
- throws IOException {
-
-- if (xmldsigBytes.length != 40) {
-- throw new IOException("Invalid XMLDSIG format of DSA signature");
-- }
-+ if (xmldsigBytes.length != 40) {
-+ throw new IOException("Invalid XMLDSIG format of DSA signature");
-+ }
-
-- int i;
-+ int i;
-
-- for (i = 20; (i > 0) && (xmldsigBytes[20 - i] == 0); i--);
-+ for (i = 20; (i > 0) && (xmldsigBytes[20 - i] == 0); i--);
-
-- int j = i;
-+ int j = i;
-
-- if (xmldsigBytes[20 - i] < 0) {
-+ if (xmldsigBytes[20 - i] < 0) {
- j += 1;
-- }
-+ }
-
-- int k;
-+ int k;
-
-- for (k = 20; (k > 0) && (xmldsigBytes[40 - k] == 0); k--);
-+ for (k = 20; (k > 0) && (xmldsigBytes[40 - k] == 0); k--);
-
-- int l = k;
-+ int l = k;
-
-- if (xmldsigBytes[40 - k] < 0) {
-- l += 1;
-- }
-+ if (xmldsigBytes[40 - k] < 0) {
-+ l += 1;
-+ }
-
-- byte asn1Bytes[] = new byte[6 + j + l];
-+ byte asn1Bytes[] = new byte[6 + j + l];
-
-- asn1Bytes[0] = 48;
-- asn1Bytes[1] = (byte) (4 + j + l);
-- asn1Bytes[2] = 2;
-- asn1Bytes[3] = (byte) j;
-+ asn1Bytes[0] = 48;
-+ asn1Bytes[1] = (byte) (4 + j + l);
-+ asn1Bytes[2] = 2;
-+ asn1Bytes[3] = (byte) j;
-
-- System.arraycopy(xmldsigBytes, 20 - i, asn1Bytes, (4 + j) - i, i);
-+ System.arraycopy(xmldsigBytes, 20 - i, asn1Bytes, (4 + j) - i, i);
-
-- asn1Bytes[4 + j] = 2;
-- asn1Bytes[5 + j] = (byte) l;
-+ asn1Bytes[4 + j] = 2;
-+ asn1Bytes[5 + j] = (byte) l;
-
-- System.arraycopy(xmldsigBytes, 40 - k, asn1Bytes, (6 + j + l) - k, k);
-+ System.arraycopy(xmldsigBytes, 40 - k, asn1Bytes, (6 + j + l) - k, k);
-
-- return asn1Bytes;
-- }
-+ return asn1Bytes;
-+ }
-
-- /**
-- * Method engineSetHMACOutputLength
-- *
-- * @param HMACOutputLength
-- * @throws XMLSignatureException
-- */
-- protected void engineSetHMACOutputLength(int HMACOutputLength)
-- throws XMLSignatureException {
-- throw new XMLSignatureException("algorithms.HMACOutputLengthOnlyForHMAC");
-- }
-+ /**
-+ * Method engineSetHMACOutputLength
-+ *
-+ * @param HMACOutputLength
-+ * @throws XMLSignatureException
-+ */
-+ protected void engineSetHMACOutputLength(int HMACOutputLength)
-+ throws XMLSignatureException {
-+ throw new XMLSignatureException(
-+ "algorithms.HMACOutputLengthOnlyForHMAC");
-+ }
-
-- /**
-- * Method engineInitSign
-- *
-- * @param signingKey
-- * @param algorithmParameterSpec
-- * @throws XMLSignatureException
-- */
-- protected void engineInitSign(
-- Key signingKey, AlgorithmParameterSpec algorithmParameterSpec)
-- throws XMLSignatureException {
-- throw new XMLSignatureException(
-- "algorithms.CannotUseAlgorithmParameterSpecOnDSA");
-- }
-+ /**
-+ * Method engineInitSign
-+ *
-+ * @param signingKey
-+ * @param algorithmParameterSpec
-+ * @throws XMLSignatureException
-+ */
-+ protected void engineInitSign(
-+ Key signingKey, AlgorithmParameterSpec algorithmParameterSpec)
-+ throws XMLSignatureException {
-+ throw new XMLSignatureException(
-+ "algorithms.CannotUseAlgorithmParameterSpecOnDSA");
-+ }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureECDSA.java b/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureECDSA.java
-new file mode 100644
---- /dev/null
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureECDSA.java
-@@ -0,0 +1,384 @@
-+/*
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
-+ */
-+/*
-+ * Copyright 1999-2004 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+package com.sun.org.apache.xml.internal.security.algorithms.implementations;
-+
-+
-+
-+import java.io.IOException;
-+import java.security.InvalidAlgorithmParameterException;
-+import java.security.InvalidKeyException;
-+import java.security.Key;
-+import java.security.NoSuchProviderException;
-+import java.security.PrivateKey;
-+import java.security.PublicKey;
-+import java.security.SecureRandom;
-+import java.security.Signature;
-+import java.security.SignatureException;
-+import java.security.spec.AlgorithmParameterSpec;
-+
-+import com.sun.org.apache.xml.internal.security.algorithms.JCEMapper;
-+import com.sun.org.apache.xml.internal.security.algorithms.SignatureAlgorithmSpi;
-+import com.sun.org.apache.xml.internal.security.signature.XMLSignature;
-+import com.sun.org.apache.xml.internal.security.signature.XMLSignatureException;
-+import com.sun.org.apache.xml.internal.security.utils.Base64;
-+
-+
-+/**
-+ *
-+ * @author $Author: mullan $
-+ */
-+public abstract class SignatureECDSA extends SignatureAlgorithmSpi {
-+
-+ /** {@link java.util.logging} logging facility */
-+ static java.util.logging.Logger log =
-+ java.util.logging.Logger.getLogger(SignatureECDSA.class.getName());
-+
-+ /** @inheritDoc */
-+ public abstract String engineGetURI();
-+
-+ /** Field algorithm */
-+ private java.security.Signature _signatureAlgorithm = null;
-+
-+ /**
-+ * Converts an ASN.1 ECDSA value to a XML Signature ECDSA Value.
-+ *
-+ * The JAVA JCE ECDSA Signature algorithm creates ASN.1 encoded (r,s) value
-+ * pairs; the XML Signature requires the core BigInteger values.
-+ *
-+ * @param asn1Bytes
-+ * @return the decode bytes
-+ *
-+ * @throws IOException
-+ * @see <A HREF="http://www.w3.org/TR/xmldsig-core/#dsa-sha1">6.4.1 DSA</A>
-+ * @see <A HREF="ftp://ftp.rfc-editor.org/in-notes/rfc4050.txt">3.3. ECDSA Signatures</A>
-+ */
-+ private static byte[] convertASN1toXMLDSIG(byte asn1Bytes[])
-+ throws IOException {
-+
-+ byte rLength = asn1Bytes[3];
-+ int i;
-+
-+ for (i = rLength; (i > 0) && (asn1Bytes[(4 + rLength) - i] == 0); i--);
-+
-+ byte sLength = asn1Bytes[5 + rLength];
-+ int j;
-+
-+ for (j = sLength;
-+ (j > 0) && (asn1Bytes[(6 + rLength + sLength) - j] == 0); j--);
-+
-+ if ((asn1Bytes[0] != 48) || (asn1Bytes[1] != asn1Bytes.length - 2)
-+ || (asn1Bytes[2] != 2) || (i > 24)
-+ || (asn1Bytes[4 + rLength] != 2) || (j > 24)) {
-+ throw new IOException("Invalid ASN.1 format of ECDSA signature");
-+ }
-+ byte xmldsigBytes[] = new byte[48];
-+
-+ System.arraycopy(asn1Bytes, (4 + rLength) - i, xmldsigBytes, 24 - i,
-+ i);
-+ System.arraycopy(asn1Bytes, (6 + rLength + sLength) - j, xmldsigBytes,
-+ 48 - j, j);
-+
-+ return xmldsigBytes;
-+ }
-+
-+ /**
-+ * Converts a XML Signature ECDSA Value to an ASN.1 DSA value.
-+ *
-+ * The JAVA JCE ECDSA Signature algorithm creates ASN.1 encoded (r,s) value
-+ * pairs; the XML Signature requires the core BigInteger values.
-+ *
-+ * @param xmldsigBytes
-+ * @return the encoded ASN.1 bytes
-+ *
-+ * @throws IOException
-+ * @see <A HREF="http://www.w3.org/TR/xmldsig-core/#dsa-sha1">6.4.1 DSA</A>
-+ * @see <A HREF="ftp://ftp.rfc-editor.org/in-notes/rfc4050.txt">3.3. ECDSA Signatures</A>
-+ */
-+ private static byte[] convertXMLDSIGtoASN1(byte xmldsigBytes[])
-+ throws IOException {
-+
-+ if (xmldsigBytes.length != 48) {
-+ throw new IOException("Invalid XMLDSIG format of ECDSA signature");
-+ }
-+
-+ int i;
-+
-+ for (i = 24; (i > 0) && (xmldsigBytes[24 - i] == 0); i--);
-+
-+ int j = i;
-+
-+ if (xmldsigBytes[24 - i] < 0) {
-+ j += 1;
-+ }
-+
-+ int k;
-+
-+ for (k = 24; (k > 0) && (xmldsigBytes[48 - k] == 0); k--);
-+
-+ int l = k;
-+
-+ if (xmldsigBytes[48 - k] < 0) {
-+ l += 1;
-+ }
-+
-+ byte asn1Bytes[] = new byte[6 + j + l];
-+
-+ asn1Bytes[0] = 48;
-+ asn1Bytes[1] = (byte) (4 + j + l);
-+ asn1Bytes[2] = 2;
-+ asn1Bytes[3] = (byte) j;
-+
-+ System.arraycopy(xmldsigBytes, 24 - i, asn1Bytes, (4 + j) - i, i);
-+
-+ asn1Bytes[4 + j] = 2;
-+ asn1Bytes[5 + j] = (byte) l;
-+
-+ System.arraycopy(xmldsigBytes, 48 - k, asn1Bytes, (6 + j + l) - k, k);
-+
-+ return asn1Bytes;
-+ }
-+
-+ /**
-+ * Constructor SignatureRSA
-+ *
-+ * @throws XMLSignatureException
-+ */
-+ public SignatureECDSA() throws XMLSignatureException {
-+
-+ String algorithmID = JCEMapper.translateURItoJCEID(this.engineGetURI());
-+
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Created SignatureECDSA using " + algorithmID);
-+ String provider=JCEMapper.getProviderId();
-+ try {
-+ if (provider==null) {
-+ this._signatureAlgorithm = Signature.getInstance(algorithmID);
-+ } else {
-+ this._signatureAlgorithm = Signature.getInstance(algorithmID,provider);
-+ }
-+ } catch (java.security.NoSuchAlgorithmException ex) {
-+ Object[] exArgs = { algorithmID,
-+ ex.getLocalizedMessage() };
-+
-+ throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
-+ } catch (NoSuchProviderException ex) {
-+ Object[] exArgs = { algorithmID,
-+ ex.getLocalizedMessage() };
-+
-+ throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
-+ }
-+ }
-+
-+ /** @inheritDoc */
-+ protected void engineSetParameter(AlgorithmParameterSpec params)
-+ throws XMLSignatureException {
-+
-+ try {
-+ this._signatureAlgorithm.setParameter(params);
-+ } catch (InvalidAlgorithmParameterException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-+
-+ /** @inheritDoc */
-+ protected boolean engineVerify(byte[] signature)
-+ throws XMLSignatureException {
-+
-+ try {
-+ byte[] jcebytes = SignatureECDSA.convertXMLDSIGtoASN1(signature);
-+
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Called ECDSA.verify() on " + Base64.encode(signature));
-+
-+ return this._signatureAlgorithm.verify(jcebytes);
-+ } catch (SignatureException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ } catch (IOException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-+
-+ /** @inheritDoc */
-+ protected void engineInitVerify(Key publicKey) throws XMLSignatureException {
-+
-+ if (!(publicKey instanceof PublicKey)) {
-+ String supplied = publicKey.getClass().getName();
-+ String needed = PublicKey.class.getName();
-+ Object exArgs[] = { supplied, needed };
-+
-+ throw new XMLSignatureException("algorithms.WrongKeyForThisOperation",
-+ exArgs);
-+ }
-+
-+ try {
-+ this._signatureAlgorithm.initVerify((PublicKey) publicKey);
-+ } catch (InvalidKeyException ex) {
-+ // reinstantiate Signature object to work around bug in JDK
-+ // see: http://bugs.sun.com/view_bug.do?bug_id=4953555
-+ Signature sig = this._signatureAlgorithm;
-+ try {
-+ this._signatureAlgorithm = Signature.getInstance
-+ (_signatureAlgorithm.getAlgorithm());
-+ } catch (Exception e) {
-+ // this shouldn't occur, but if it does, restore previous
-+ // Signature
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, "Exception when reinstantiating Signature:" + e);
-+ }
-+ this._signatureAlgorithm = sig;
-+ }
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-+
-+ /** @inheritDoc */
-+ protected byte[] engineSign() throws XMLSignatureException {
-+
-+ try {
-+ byte jcebytes[] = this._signatureAlgorithm.sign();
-+
-+ return SignatureECDSA.convertASN1toXMLDSIG(jcebytes);
-+ } catch (SignatureException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ } catch (IOException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-+
-+ /** @inheritDoc */
-+ protected void engineInitSign(Key privateKey, SecureRandom secureRandom)
-+ throws XMLSignatureException {
-+
-+ if (!(privateKey instanceof PrivateKey)) {
-+ String supplied = privateKey.getClass().getName();
-+ String needed = PrivateKey.class.getName();
-+ Object exArgs[] = { supplied, needed };
-+
-+ throw new XMLSignatureException("algorithms.WrongKeyForThisOperation",
-+ exArgs);
-+ }
-+
-+ try {
-+ this._signatureAlgorithm.initSign((PrivateKey) privateKey,
-+ secureRandom);
-+ } catch (InvalidKeyException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-+
-+ /** @inheritDoc */
-+ protected void engineInitSign(Key privateKey) throws XMLSignatureException {
-+
-+ if (!(privateKey instanceof PrivateKey)) {
-+ String supplied = privateKey.getClass().getName();
-+ String needed = PrivateKey.class.getName();
-+ Object exArgs[] = { supplied, needed };
-+
-+ throw new XMLSignatureException("algorithms.WrongKeyForThisOperation",
-+ exArgs);
-+ }
-+
-+ try {
-+ this._signatureAlgorithm.initSign((PrivateKey) privateKey);
-+ } catch (InvalidKeyException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-+
-+ /** @inheritDoc */
-+ protected void engineUpdate(byte[] input) throws XMLSignatureException {
-+
-+ try {
-+ this._signatureAlgorithm.update(input);
-+ } catch (SignatureException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-+
-+ /** @inheritDoc */
-+ protected void engineUpdate(byte input) throws XMLSignatureException {
-+
-+ try {
-+ this._signatureAlgorithm.update(input);
-+ } catch (SignatureException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-+
-+ /** @inheritDoc */
-+ protected void engineUpdate(byte buf[], int offset, int len)
-+ throws XMLSignatureException {
-+
-+ try {
-+ this._signatureAlgorithm.update(buf, offset, len);
-+ } catch (SignatureException ex) {
-+ throw new XMLSignatureException("empty", ex);
-+ }
-+ }
-+
-+ /** @inheritDoc */
-+ protected String engineGetJCEAlgorithmString() {
-+ return this._signatureAlgorithm.getAlgorithm();
-+ }
-+
-+ /** @inheritDoc */
-+ protected String engineGetJCEProviderName() {
-+ return this._signatureAlgorithm.getProvider().getName();
-+ }
-+
-+ /** @inheritDoc */
-+ protected void engineSetHMACOutputLength(int HMACOutputLength)
-+ throws XMLSignatureException {
-+ throw new XMLSignatureException("algorithms.HMACOutputLengthOnlyForHMAC");
-+ }
-+
-+ /** @inheritDoc */
-+ protected void engineInitSign(
-+ Key signingKey, AlgorithmParameterSpec algorithmParameterSpec)
-+ throws XMLSignatureException {
-+ throw new XMLSignatureException(
-+ "algorithms.CannotUseAlgorithmParameterSpecOnRSA");
-+ }
-+
-+ /**
-+ * Class SignatureRSASHA1
-+ *
-+ * @author $Author: mullan $
-+ * @version $Revision: 1.2 $
-+ */
-+ public static class SignatureECDSASHA1 extends SignatureECDSA {
-+
-+ /**
-+ * Constructor SignatureRSASHA1
-+ *
-+ * @throws XMLSignatureException
-+ */
-+ public SignatureECDSASHA1() throws XMLSignatureException {
-+ super();
-+ }
-+
-+ /** @inheritDoc */
-+ public String engineGetURI() {
-+ return XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA1;
-+ }
-+ }
-+
-+}
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/CanonicalizationException.java b/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/CanonicalizationException.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/CanonicalizationException.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/CanonicalizationException.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/Canonicalizer.java b/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/Canonicalizer.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/Canonicalizer.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/Canonicalizer.java
-@@ -3,7 +3,7 @@
- * DO NOT REMOVE OR ALTER!
- */
- /*
-- * Copyright 1999-2004 The Apache Software Foundation.
-+ * Copyright 1999-2008 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
-@@ -20,8 +20,6 @@
- */
- package com.sun.org.apache.xml.internal.security.c14n;
-
--
--
- import java.io.ByteArrayInputStream;
- import java.io.OutputStream;
- import java.util.HashMap;
-@@ -37,318 +35,326 @@
- import org.w3c.dom.NodeList;
- import org.xml.sax.InputSource;
-
--
- /**
- *
-- *
- * @author Christian Geuer-Pollmann
- */
- public class Canonicalizer {
-
-- //J-
-- /** The output encoding of canonicalized data */
-- public static final String ENCODING = "UTF8";
-+ /** The output encoding of canonicalized data */
-+ public static final String ENCODING = "UTF8";
-
-+ /**
-+ * XPath Expresion for selecting every node and continuous comments joined
-+ * in only one node
-+ */
-+ public static final String XPATH_C14N_WITH_COMMENTS_SINGLE_NODE =
-+ "(.//. | .//@* | .//namespace::*)";
-
-- /**
-- * XPath Expresion for selecting every node and continuos comments joined in only one node
-- */
-- public static final String XPATH_C14N_WITH_COMMENTS_SINGLE_NODE = "(.//. | .//@* | .//namespace::*)";
--
--
-- /**
-+ /**
- * The URL defined in XML-SEC Rec for inclusive c14n <b>without</b> comments.
- */
-- public static final String ALGO_ID_C14N_OMIT_COMMENTS = "http://www.w3.org/TR/2001/REC-xml-c14n-20010315";
-- /**
-- * The URL defined in XML-SEC Rec for inclusive c14n <b>with</b> comments.
-- */
-- public static final String ALGO_ID_C14N_WITH_COMMENTS = ALGO_ID_C14N_OMIT_COMMENTS + "#WithComments";
-- /**
-- * The URL defined in XML-SEC Rec for exclusive c14n <b>without</b> comments.
-- */
-- public static final String ALGO_ID_C14N_EXCL_OMIT_COMMENTS = "http://www.w3.org/2001/10/xml-exc-c14n#";
-- /**
-- * The URL defined in XML-SEC Rec for exclusive c14n <b>with</b> comments.
-- */
-- public static final String ALGO_ID_C14N_EXCL_WITH_COMMENTS = ALGO_ID_C14N_EXCL_OMIT_COMMENTS + "WithComments";
-+ public static final String ALGO_ID_C14N_OMIT_COMMENTS =
-+ "http://www.w3.org/TR/2001/REC-xml-c14n-20010315";
-+ /**
-+ * The URL defined in XML-SEC Rec for inclusive c14n <b>with</b> comments.
-+ */
-+ public static final String ALGO_ID_C14N_WITH_COMMENTS =
-+ ALGO_ID_C14N_OMIT_COMMENTS + "#WithComments";
-+ /**
-+ * The URL defined in XML-SEC Rec for exclusive c14n <b>without</b> comments.
-+ */
-+ public static final String ALGO_ID_C14N_EXCL_OMIT_COMMENTS =
-+ "http://www.w3.org/2001/10/xml-exc-c14n#";
-+ /**
-+ * The URL defined in XML-SEC Rec for exclusive c14n <b>with</b> comments.
-+ */
-+ public static final String ALGO_ID_C14N_EXCL_WITH_COMMENTS =
-+ ALGO_ID_C14N_EXCL_OMIT_COMMENTS + "WithComments";
-+ /**
-+ * The URI for inclusive c14n 1.1 <b>without</b> comments.
-+ */
-+ public static final String ALGO_ID_C14N11_OMIT_COMMENTS =
-+ "http://www.w3.org/2006/12/xml-c14n11";
-+ /**
-+ * The URI for inclusive c14n 1.1 <b>with</b> comments.
-+ */
-+ public static final String ALGO_ID_C14N11_WITH_COMMENTS =
-+ ALGO_ID_C14N11_OMIT_COMMENTS + "#WithComments";
-
-- static boolean _alreadyInitialized = false;
-- static Map _canonicalizerHash = null;
-+ static boolean _alreadyInitialized = false;
-+ static Map _canonicalizerHash = null;
-
-- protected CanonicalizerSpi canonicalizerSpi = null;
-- //J+
-+ protected CanonicalizerSpi canonicalizerSpi = null;
-
-- /**
-- * Method init
-- *
-- */
-- public static void init() {
-+ /**
-+ * Method init
-+ *
-+ */
-+ public static void init() {
-
-- if (!Canonicalizer._alreadyInitialized) {
-- Canonicalizer._canonicalizerHash = new HashMap(10);
-- Canonicalizer._alreadyInitialized = true;
-- }
-- }
-+ if (!Canonicalizer._alreadyInitialized) {
-+ Canonicalizer._canonicalizerHash = new HashMap(10);
-+ Canonicalizer._alreadyInitialized = true;
-+ }
-+ }
-
-- /**
-- * Constructor Canonicalizer
-- *
-- * @param algorithmURI
-- * @throws InvalidCanonicalizerException
-- */
-- private Canonicalizer(String algorithmURI)
-+ /**
-+ * Constructor Canonicalizer
-+ *
-+ * @param algorithmURI
-+ * @throws InvalidCanonicalizerException
-+ */
-+ private Canonicalizer(String algorithmURI)
- throws InvalidCanonicalizerException {
-
-- try {
-- Class implementingClass = getImplementingClass(algorithmURI);
-+ try {
-+ Class implementingClass = getImplementingClass(algorithmURI);
-
-- this.canonicalizerSpi =
-- (CanonicalizerSpi) implementingClass.newInstance();
-- this.canonicalizerSpi.reset=true;
-- } catch (Exception e) {
-- Object exArgs[] = { algorithmURI };
-+ this.canonicalizerSpi =
-+ (CanonicalizerSpi) implementingClass.newInstance();
-+ this.canonicalizerSpi.reset=true;
-+ } catch (Exception e) {
-+ Object exArgs[] = { algorithmURI };
-
-- throw new InvalidCanonicalizerException(
-- "signature.Canonicalizer.UnknownCanonicalizer", exArgs);
-- }
-- }
-+ throw new InvalidCanonicalizerException(
-+ "signature.Canonicalizer.UnknownCanonicalizer", exArgs);
-+ }
-+ }
-
-- /**
-- * Method getInstance
-- *
-- * @param algorithmURI
-- * @return a Conicicalizer instance ready for the job
-- * @throws InvalidCanonicalizerException
-- */
-- public static final Canonicalizer getInstance(String algorithmURI)
-+ /**
-+ * Method getInstance
-+ *
-+ * @param algorithmURI
-+ * @return a Conicicalizer instance ready for the job
-+ * @throws InvalidCanonicalizerException
-+ */
-+ public static final Canonicalizer getInstance(String algorithmURI)
- throws InvalidCanonicalizerException {
-
-- Canonicalizer c14nizer = new Canonicalizer(algorithmURI);
-+ Canonicalizer c14nizer = new Canonicalizer(algorithmURI);
-
-- return c14nizer;
-- }
-+ return c14nizer;
-+ }
-
-- /**
-- * Method register
-- *
-- * @param algorithmURI
-- * @param implementingClass
-- * @throws AlgorithmAlreadyRegisteredException
-- */
-- public static void register(String algorithmURI, String implementingClass)
-+ /**
-+ * Method register
-+ *
-+ * @param algorithmURI
-+ * @param implementingClass
-+ * @throws AlgorithmAlreadyRegisteredException
-+ */
-+ public static void register(String algorithmURI, String implementingClass)
- throws AlgorithmAlreadyRegisteredException {
-
-- // check whether URI is already registered
-- Class registeredClass = getImplementingClass(algorithmURI);
-+ // check whether URI is already registered
-+ Class registeredClass = getImplementingClass(algorithmURI);
-
-- if (registeredClass != null) {
-- Object exArgs[] = { algorithmURI, registeredClass };
-+ if (registeredClass != null) {
-+ Object exArgs[] = { algorithmURI, registeredClass };
-
-- throw new AlgorithmAlreadyRegisteredException(
-- "algorithm.alreadyRegistered", exArgs);
-- }
-+ throw new AlgorithmAlreadyRegisteredException(
-+ "algorithm.alreadyRegistered", exArgs);
-+ }
-
-- try {
-- _canonicalizerHash.put(algorithmURI, Class.forName(implementingClass));
-+ try {
-+ _canonicalizerHash.put(algorithmURI, Class.forName(implementingClass));
- } catch (ClassNotFoundException e) {
-- throw new RuntimeException("c14n class not found");
-+ throw new RuntimeException("c14n class not found");
- }
-- }
-+ }
-
-- /**
-- * Method getURI
-- *
-- * @return the URI defined for this c14n instance.
-- */
-- public final String getURI() {
-- return this.canonicalizerSpi.engineGetURI();
-- }
-+ /**
-+ * Method getURI
-+ *
-+ * @return the URI defined for this c14n instance.
-+ */
-+ public final String getURI() {
-+ return this.canonicalizerSpi.engineGetURI();
-+ }
-
-- /**
-- * Method getIncludeComments
-- *
-- * @return true if the c14n respect the comments.
-- */
-- public boolean getIncludeComments() {
-- return this.canonicalizerSpi.engineGetIncludeComments();
-- }
-+ /**
-+ * Method getIncludeComments
-+ *
-+ * @return true if the c14n respect the comments.
-+ */
-+ public boolean getIncludeComments() {
-+ return this.canonicalizerSpi.engineGetIncludeComments();
-+ }
-
-- /**
-- * This method tries to canonicalize the given bytes. It's possible to even
-- * canonicalize non-wellformed sequences if they are well-formed after being
-- * wrapped with a <CODE>&gt;a&lt;...&gt;/a&lt;</CODE>.
-- *
-- * @param inputBytes
-- * @return the result of the conicalization.
-- * @throws CanonicalizationException
-- * @throws java.io.IOException
-- * @throws javax.xml.parsers.ParserConfigurationException
-- * @throws org.xml.sax.SAXException
-- */
-- public byte[] canonicalize(byte[] inputBytes)
-+ /**
-+ * This method tries to canonicalize the given bytes. It's possible to even
-+ * canonicalize non-wellformed sequences if they are well-formed after being
-+ * wrapped with a <CODE>&gt;a&lt;...&gt;/a&lt;</CODE>.
-+ *
-+ * @param inputBytes
-+ * @return the result of the conicalization.
-+ * @throws CanonicalizationException
-+ * @throws java.io.IOException
-+ * @throws javax.xml.parsers.ParserConfigurationException
-+ * @throws org.xml.sax.SAXException
-+ */
-+ public byte[] canonicalize(byte[] inputBytes)
- throws javax.xml.parsers.ParserConfigurationException,
- java.io.IOException, org.xml.sax.SAXException,
- CanonicalizationException {
-
-- ByteArrayInputStream bais = new ByteArrayInputStream(inputBytes);
-- InputSource in = new InputSource(bais);
-- DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();
-+ ByteArrayInputStream bais = new ByteArrayInputStream(inputBytes);
-+ InputSource in = new InputSource(bais);
-+ DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();
-
-- dfactory.setNamespaceAware(true);
-+ dfactory.setNamespaceAware(true);
-
-- // needs to validate for ID attribute nomalization
-- dfactory.setValidating(true);
-+ // needs to validate for ID attribute nomalization
-+ dfactory.setValidating(true);
-
-- DocumentBuilder db = dfactory.newDocumentBuilder();
-+ DocumentBuilder db = dfactory.newDocumentBuilder();
-
-- /*
-- * for some of the test vectors from the specification,
-- * there has to be a validatin parser for ID attributes, default
-- * attribute values, NMTOKENS, etc.
-- * Unfortunaltely, the test vectors do use different DTDs or
-- * even no DTD. So Xerces 1.3.1 fires many warnings about using
-- * ErrorHandlers.
-- *
-- * Text from the spec:
-- *
-- * The input octet stream MUST contain a well-formed XML document,
-- * but the input need not be validated. However, the attribute
-- * value normalization and entity reference resolution MUST be
-- * performed in accordance with the behaviors of a validating
-- * XML processor. As well, nodes for default attributes (declared
-- * in the ATTLIST with an AttValue but not specified) are created
-- * in each element. Thus, the declarations in the document type
-- * declaration are used to help create the canonical form, even
-- * though the document type declaration is not retained in the
-- * canonical form.
-- *
-- */
-- db.setErrorHandler(new com.sun.org.apache.xml.internal.security.utils
-- .IgnoreAllErrorHandler());
-+ /*
-+ * for some of the test vectors from the specification,
-+ * there has to be a validatin parser for ID attributes, default
-+ * attribute values, NMTOKENS, etc.
-+ * Unfortunaltely, the test vectors do use different DTDs or
-+ * even no DTD. So Xerces 1.3.1 fires many warnings about using
-+ * ErrorHandlers.
-+ *
-+ * Text from the spec:
-+ *
-+ * The input octet stream MUST contain a well-formed XML document,
-+ * but the input need not be validated. However, the attribute
-+ * value normalization and entity reference resolution MUST be
-+ * performed in accordance with the behaviors of a validating
-+ * XML processor. As well, nodes for default attributes (declared
-+ * in the ATTLIST with an AttValue but not specified) are created
-+ * in each element. Thus, the declarations in the document type
-+ * declaration are used to help create the canonical form, even
-+ * though the document type declaration is not retained in the
-+ * canonical form.
-+ *
-+ */
-+ db.setErrorHandler(new com.sun.org.apache.xml.internal.security.utils
-+ .IgnoreAllErrorHandler());
-
-- Document document = db.parse(in);
-- byte result[] = this.canonicalizeSubtree(document);
-+ Document document = db.parse(in);
-+ byte result[] = this.canonicalizeSubtree(document);
-
-- return result;
-- }
-+ return result;
-+ }
-
-- /**
-- * Canonicalizes the subtree rooted by <CODE>node</CODE>.
-- *
-- * @param node The node to canicalize
-- * @return the result of the c14n.
-- *
-- * @throws CanonicalizationException
-- */
-- public byte[] canonicalizeSubtree(Node node)
-+ /**
-+ * Canonicalizes the subtree rooted by <CODE>node</CODE>.
-+ *
-+ * @param node The node to canicalize
-+ * @return the result of the c14n.
-+ *
-+ * @throws CanonicalizationException
-+ */
-+ public byte[] canonicalizeSubtree(Node node)
- throws CanonicalizationException {
-- return this.canonicalizerSpi.engineCanonicalizeSubTree(node);
-- }
-+ return this.canonicalizerSpi.engineCanonicalizeSubTree(node);
-+ }
-
-- /**
-- * Canonicalizes the subtree rooted by <CODE>node</CODE>.
-- *
-- * @param node
-- * @param inclusiveNamespaces
-- * @return the result of the c14n.
-- * @throws CanonicalizationException
-- */
-- public byte[] canonicalizeSubtree(Node node, String inclusiveNamespaces)
-+ /**
-+ * Canonicalizes the subtree rooted by <CODE>node</CODE>.
-+ *
-+ * @param node
-+ * @param inclusiveNamespaces
-+ * @return the result of the c14n.
-+ * @throws CanonicalizationException
-+ */
-+ public byte[] canonicalizeSubtree(Node node, String inclusiveNamespaces)
- throws CanonicalizationException {
-- return this.canonicalizerSpi.engineCanonicalizeSubTree(node,
-+ return this.canonicalizerSpi.engineCanonicalizeSubTree(node,
- inclusiveNamespaces);
-- }
-+ }
-
-- /**
-- * Canonicalizes an XPath node set. The <CODE>xpathNodeSet</CODE> is treated
-- * as a list of XPath nodes, not as a list of subtrees.
-- *
-- * @param xpathNodeSet
-- * @return the result of the c14n.
-- * @throws CanonicalizationException
-- */
-- public byte[] canonicalizeXPathNodeSet(NodeList xpathNodeSet)
-+ /**
-+ * Canonicalizes an XPath node set. The <CODE>xpathNodeSet</CODE> is treated
-+ * as a list of XPath nodes, not as a list of subtrees.
-+ *
-+ * @param xpathNodeSet
-+ * @return the result of the c14n.
-+ * @throws CanonicalizationException
-+ */
-+ public byte[] canonicalizeXPathNodeSet(NodeList xpathNodeSet)
- throws CanonicalizationException {
-- return this.canonicalizerSpi.engineCanonicalizeXPathNodeSet(xpathNodeSet);
-- }
-+ return this.canonicalizerSpi.engineCanonicalizeXPathNodeSet(xpathNodeSet);
-+ }
-
-- /**
-- * Canonicalizes an XPath node set. The <CODE>xpathNodeSet</CODE> is treated
-- * as a list of XPath nodes, not as a list of subtrees.
-- *
-- * @param xpathNodeSet
-- * @param inclusiveNamespaces
-- * @return the result of the c14n.
-- * @throws CanonicalizationException
-- */
-- public byte[] canonicalizeXPathNodeSet(
-+ /**
-+ * Canonicalizes an XPath node set. The <CODE>xpathNodeSet</CODE> is treated
-+ * as a list of XPath nodes, not as a list of subtrees.
-+ *
-+ * @param xpathNodeSet
-+ * @param inclusiveNamespaces
-+ * @return the result of the c14n.
-+ * @throws CanonicalizationException
-+ */
-+ public byte[] canonicalizeXPathNodeSet(
- NodeList xpathNodeSet, String inclusiveNamespaces)
- throws CanonicalizationException {
-- return this.canonicalizerSpi.engineCanonicalizeXPathNodeSet(xpathNodeSet,
-+ return this.canonicalizerSpi.engineCanonicalizeXPathNodeSet(xpathNodeSet,
- inclusiveNamespaces);
-- }
-+ }
-
-- /**
-- * Canonicalizes an XPath node set.
-- *
-- * @param xpathNodeSet
-- * @return the result of the c14n.
-- * @throws CanonicalizationException
-- */
-- public byte[] canonicalizeXPathNodeSet(Set xpathNodeSet)
-+ /**
-+ * Canonicalizes an XPath node set.
-+ *
-+ * @param xpathNodeSet
-+ * @return the result of the c14n.
-+ * @throws CanonicalizationException
-+ */
-+ public byte[] canonicalizeXPathNodeSet(Set xpathNodeSet)
- throws CanonicalizationException {
-- return this.canonicalizerSpi.engineCanonicalizeXPathNodeSet(xpathNodeSet);
-- }
-+ return this.canonicalizerSpi.engineCanonicalizeXPathNodeSet(xpathNodeSet);
-+ }
-
-- /**
-- * Canonicalizes an XPath node set.
-- *
-- * @param xpathNodeSet
-- * @param inclusiveNamespaces
-- * @return the result of the c14n.
-- * @throws CanonicalizationException
-- */
-- public byte[] canonicalizeXPathNodeSet(
-- Set xpathNodeSet, String inclusiveNamespaces)
-- throws CanonicalizationException {
-- return this.canonicalizerSpi.engineCanonicalizeXPathNodeSet(xpathNodeSet,
-- inclusiveNamespaces);
-- }
-+ /**
-+ * Canonicalizes an XPath node set.
-+ *
-+ * @param xpathNodeSet
-+ * @param inclusiveNamespaces
-+ * @return the result of the c14n.
-+ * @throws CanonicalizationException
-+ */
-+ public byte[] canonicalizeXPathNodeSet(Set xpathNodeSet,
-+ String inclusiveNamespaces) throws CanonicalizationException {
-+ return this.canonicalizerSpi.engineCanonicalizeXPathNodeSet(xpathNodeSet,
-+ inclusiveNamespaces);
-+ }
-
-- /**
-- * Sets the writter where the cannocalization ends. ByteArrayOutputStream if
-- * none is setted.
-- * @param os
-- */
-- public void setWriter(OutputStream os) {
-- this.canonicalizerSpi.setWriter(os);
-- }
-+ /**
-+ * Sets the writer where the canonicalization ends. ByteArrayOutputStream
-+ * if none is set.
-+ * @param os
-+ */
-+ public void setWriter(OutputStream os) {
-+ this.canonicalizerSpi.setWriter(os);
-+ }
-
-- /**
-- * Returns the name of the implementing {@link CanonicalizerSpi} class
-- *
-- * @return the name of the implementing {@link CanonicalizerSpi} class
-- */
-- public String getImplementingCanonicalizerClass() {
-- return this.canonicalizerSpi.getClass().getName();
-- }
-+ /**
-+ * Returns the name of the implementing {@link CanonicalizerSpi} class
-+ *
-+ * @return the name of the implementing {@link CanonicalizerSpi} class
-+ */
-+ public String getImplementingCanonicalizerClass() {
-+ return this.canonicalizerSpi.getClass().getName();
-+ }
-
-- /**
-- * Method getImplementingClass
-- *
-- * @param URI
-- * @return the name of the class that implements the give URI
-- */
-- private static Class getImplementingClass(String URI) {
-- return (Class) _canonicalizerHash.get(URI);
-- }
-+ /**
-+ * Method getImplementingClass
-+ *
-+ * @param URI
-+ * @return the name of the class that implements the given URI
-+ */
-+ private static Class getImplementingClass(String URI) {
-+ return (Class) _canonicalizerHash.get(URI);
-+ }
-
-- /**
-- * Set the canonicalizator behaviour to not reset.
-- *
-- */
-- public void notReset() {
-- this.canonicalizerSpi.reset=false;
-- }
-+ /**
-+ * Set the canonicalizer behaviour to not reset.
-+ */
-+ public void notReset() {
-+ this.canonicalizerSpi.reset = false;
-+ }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/InvalidCanonicalizerException.java b/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/InvalidCanonicalizerException.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/InvalidCanonicalizerException.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/InvalidCanonicalizerException.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/helper/AttrCompare.java b/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/helper/AttrCompare.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/helper/AttrCompare.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/helper/AttrCompare.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -21,17 +20,17 @@
- */
- package com.sun.org.apache.xml.internal.security.c14n.helper;
-
--
--
- import com.sun.org.apache.xml.internal.security.utils.Constants;
- import org.w3c.dom.Attr;
--
-+import java.io.Serializable;
-+import java.util.Comparator;
-
- /**
- * Compares two attributes based on the C14n specification.
- *
- * <UL>
-- * <LI>Namespace nodes have a lesser document order position than attribute nodes.
-+ * <LI>Namespace nodes have a lesser document order position than attribute
-+ * nodes.
- * <LI> An element's namespace nodes are sorted lexicographically by
- * local name (the default namespace node, if one exists, has no
- * local name and is therefore lexicographically least).
-@@ -40,104 +39,89 @@
- * key (an empty namespace URI is lexicographically least).
- * </UL>
- *
-- * $todo$ Should we implement java.util.Comparator and import java.util.Arrays to use Arrays.sort(intarray);
- * @author Christian Geuer-Pollmann
- */
--public class AttrCompare implements java.util.Comparator {
-+public class AttrCompare implements Comparator, Serializable {
-
-- private final int ATTR0_BEFORE_ATTR1 = -1;
-- private final int ATTR1_BEFORE_ATTR0 = 1;
-+ private final static long serialVersionUID = -7113259629930576230L;
-+ private final static int ATTR0_BEFORE_ATTR1 = -1;
-+ private final static int ATTR1_BEFORE_ATTR0 = 1;
-+ private final static String XMLNS=Constants.NamespaceSpecNS;
-
-- private final static String XMLNS=Constants.NamespaceSpecNS;
-- /**
-- * Compares two attributes based on the C14n specification.
-- *
-- * <UL>
-- * <LI>Namespace nodes have a lesser document order position than attribute nodes.
-- * <LI> An element's namespace nodes are sorted lexicographically by
-- * local name (the default namespace node, if one exists, has no
-- * local name and is therefore lexicographically least).
-- * <LI> An element's attribute nodes are sorted lexicographically with
-- * namespace URI as the primary key and local name as the secondary
-- * key (an empty namespace URI is lexicographically least).
-- * </UL>
-- *
-- * @param obj0 casted Attr
-- * @param obj1 casted Attr
-- * @return returns a negative integer, zero, or a positive integer as obj0 is less than, equal to, or greater than obj1
-- *
-- */
-- public int compare(Object obj0, Object obj1) {
-+ /**
-+ * Compares two attributes based on the C14n specification.
-+ *
-+ * <UL>
-+ * <LI>Namespace nodes have a lesser document order position than
-+ * attribute nodes.
-+ * <LI> An element's namespace nodes are sorted lexicographically by
-+ * local name (the default namespace node, if one exists, has no
-+ * local name and is therefore lexicographically least).
-+ * <LI> An element's attribute nodes are sorted lexicographically with
-+ * namespace URI as the primary key and local name as the secondary
-+ * key (an empty namespace URI is lexicographically least).
-+ * </UL>
-+ *
-+ * @param obj0 casted Attr
-+ * @param obj1 casted Attr
-+ * @return returns a negative integer, zero, or a positive integer as
-+ * obj0 is less than, equal to, or greater than obj1
-+ *
-+ */
-+ public int compare(Object obj0, Object obj1) {
-
-- Attr attr0 = (Attr) obj0;
-- Attr attr1 = (Attr) obj1;
-- String namespaceURI0 = attr0.getNamespaceURI();
-- String namespaceURI1 = attr1.getNamespaceURI();
-+ Attr attr0 = (Attr) obj0;
-+ Attr attr1 = (Attr) obj1;
-+ String namespaceURI0 = attr0.getNamespaceURI();
-+ String namespaceURI1 = attr1.getNamespaceURI();
-
-- boolean isNamespaceAttr0 =
-- XMLNS.equals(namespaceURI0);
-- boolean isNamespaceAttr1 =
-- XMLNS.equals(namespaceURI1);
-+ boolean isNamespaceAttr0 = XMLNS==namespaceURI0;
-+ boolean isNamespaceAttr1 = XMLNS==namespaceURI1;
-
-- if (isNamespaceAttr0) {
-- if (isNamespaceAttr1) {
-+ if (isNamespaceAttr0) {
-+ if (isNamespaceAttr1) {
-+ // both are namespaces
-+ String localname0 = attr0.getLocalName();
-+ String localname1 = attr1.getLocalName();
-
-- // both are namespaces
-- String localname0 = attr0.getLocalName();
-- String localname1 = attr1.getLocalName();
-+ if (localname0.equals("xmlns")) {
-+ localname0 = "";
-+ }
-
-- if (localname0.equals("xmlns")) {
-- localname0 = "";
-+ if (localname1.equals("xmlns")) {
-+ localname1 = "";
-+ }
-+
-+ return localname0.compareTo(localname1);
- }
-+ // attr0 is a namespace, attr1 is not
-+ return ATTR0_BEFORE_ATTR1;
-+ }
-
-- if (localname1.equals("xmlns")) {
-- localname1 = "";
-- }
--
-- return localname0.compareTo(localname1);
-- }
-- // attr0 is a namespace, attr1 is not
-- return ATTR0_BEFORE_ATTR1;
--
-- }
-- if (isNamespaceAttr1) {
--
-+ if (isNamespaceAttr1) {
- // attr1 is a namespace, attr0 is not
- return ATTR1_BEFORE_ATTR0;
-- }
-+ }
-
-- // none is a namespae
--
-- if (namespaceURI0 == null) {
-- if (namespaceURI1 == null) {
-- /*
-- String localName0 = attr0.getLocalName();
-- String localName1 = attr1.getLocalName();
-- return localName0.compareTo(localName1);
-- */
--
-+ // none is a namespace
-+ if (namespaceURI0 == null) {
-+ if (namespaceURI1 == null) {
- String name0 = attr0.getName();
- String name1 = attr1.getName();
- return name0.compareTo(name1);
-+ }
-+ return ATTR0_BEFORE_ATTR1;
- }
-- return ATTR0_BEFORE_ATTR1;
-
-- }
-- if (namespaceURI1 == null) {
-- return ATTR1_BEFORE_ATTR0;
-- }
-- int a = namespaceURI0.compareTo(namespaceURI1);
-+ if (namespaceURI1 == null) {
-+ return ATTR1_BEFORE_ATTR0;
-+ }
-
-- if (a != 0) {
-- return a;
-- }
-- /*
-- String localName0 = ;
-- String localName1 =;*/
-+ int a = namespaceURI0.compareTo(namespaceURI1);
-+ if (a != 0) {
-+ return a;
-+ }
-
-- return (attr0.getLocalName())
-- .compareTo( attr1.getLocalName());
--
-- }
--
-+ return (attr0.getLocalName()).compareTo(attr1.getLocalName());
-+ }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11.java b/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11.java
-new file mode 100644
---- /dev/null
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11.java
-@@ -0,0 +1,684 @@
-+/*
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
-+ */
-+/*
-+ * Copyright 2008 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+package com.sun.org.apache.xml.internal.security.c14n.implementations;
-+
-+import java.io.IOException;
-+import java.net.URI;
-+import java.net.URISyntaxException;
-+import java.util.ArrayList;
-+import java.util.Collection;
-+import java.util.HashMap;
-+import java.util.Iterator;
-+import java.util.List;
-+import java.util.Map;
-+import java.util.Set;
-+import java.util.SortedSet;
-+import java.util.TreeSet;
-+import javax.xml.parsers.ParserConfigurationException;
-+import org.w3c.dom.Attr;
-+import org.w3c.dom.Document;
-+import org.w3c.dom.Element;
-+import org.w3c.dom.NamedNodeMap;
-+import org.w3c.dom.Node;
-+import org.xml.sax.SAXException;
-+
-+import java.util.logging.Logger;
-+import java.util.logging.Logger;
-+import com.sun.org.apache.xml.internal.security.c14n.CanonicalizationException;
-+import com.sun.org.apache.xml.internal.security.c14n.helper.C14nHelper;
-+import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
-+import com.sun.org.apache.xml.internal.security.utils.Constants;
-+import com.sun.org.apache.xml.internal.security.utils.XMLUtils;
-+
-+/**
-+ * Implements <A HREF="http://www.w3.org/TR/2008/PR-xml-c14n11-20080129/">
-+ * Canonical XML Version 1.1</A>, a W3C Proposed Recommendation from 29
-+ * January 2008.
-+ *
-+ * @author Sean Mullan
-+ * @author Raul Benito
-+ * @version $Revision: 1.2 $
-+ */
-+public abstract class Canonicalizer11 extends CanonicalizerBase {
-+ boolean firstCall = true;
-+ final SortedSet result = new TreeSet(COMPARE);
-+ static final String XMLNS_URI = Constants.NamespaceSpecNS;
-+ static final String XML_LANG_URI = Constants.XML_LANG_SPACE_SpecNS;
-+
-+ static Logger log = Logger.getLogger(Canonicalizer11.class.getName());
-+
-+ static class XmlAttrStack {
-+ int currentLevel = 0;
-+ int lastlevel = 0;
-+ XmlsStackElement cur;
-+ static class XmlsStackElement {
-+ int level;
-+ boolean rendered = false;
-+ List nodes = new ArrayList();
-+ };
-+ List levels = new ArrayList();
-+ void push(int level) {
-+ currentLevel = level;
-+ if (currentLevel == -1)
-+ return;
-+ cur = null;
-+ while (lastlevel >= currentLevel) {
-+ levels.remove(levels.size() - 1);
-+ if (levels.size() == 0) {
-+ lastlevel = 0;
-+ return;
-+ }
-+ lastlevel=((XmlsStackElement)levels.get(levels.size()-1)).level;
-+ }
-+ }
-+ void addXmlnsAttr(Attr n) {
-+ if (cur == null) {
-+ cur = new XmlsStackElement();
-+ cur.level = currentLevel;
-+ levels.add(cur);
-+ lastlevel = currentLevel;
-+ }
-+ cur.nodes.add(n);
-+ }
-+ void getXmlnsAttr(Collection col) {
-+ if (cur == null) {
-+ cur = new XmlsStackElement();
-+ cur.level = currentLevel;
-+ lastlevel = currentLevel;
-+ levels.add(cur);
-+ }
-+ int size = levels.size() - 2;
-+ boolean parentRendered = false;
-+ XmlsStackElement e = null;
-+ if (size == -1) {
-+ parentRendered = true;
-+ } else {
-+ e = (XmlsStackElement) levels.get(size);
-+ if (e.rendered && e.level+1 == currentLevel)
-+ parentRendered = true;
-+ }
-+ if (parentRendered) {
-+ col.addAll(cur.nodes);
-+ cur.rendered = true;
-+ return;
-+ }
-+
-+ Map loa = new HashMap();
-+ List baseAttrs = new ArrayList();
-+ boolean successiveOmitted = true;
-+ for (;size>=0;size--) {
-+ e = (XmlsStackElement) levels.get(size);
-+ if (e.rendered) {
-+ successiveOmitted = false;
-+ }
-+ Iterator it = e.nodes.iterator();
-+ while (it.hasNext() && successiveOmitted) {
-+ Attr n = (Attr) it.next();
-+ if (n.getLocalName().equals("base")) {
-+ if (!e.rendered) {
-+ baseAttrs.add(n);
-+ }
-+ } else if (!loa.containsKey(n.getName()))
-+ loa.put(n.getName(), n);
-+ }
-+ }
-+ if (!baseAttrs.isEmpty()) {
-+ Iterator it = cur.nodes.iterator();
-+ String base = null;
-+ Attr baseAttr = null;
-+ while (it.hasNext()) {
-+ Attr n = (Attr) it.next();
-+ if (n.getLocalName().equals("base")) {
-+ base = n.getValue();
-+ baseAttr = n;
-+ break;
-+ }
-+ }
-+ it = baseAttrs.iterator();
-+ while (it.hasNext()) {
-+ Attr n = (Attr) it.next();
-+ if (base == null) {
-+ base = n.getValue();
-+ baseAttr = n;
-+ } else {
-+ try {
-+ base = joinURI(n.getValue(), base);
-+ } catch (URISyntaxException ue) {
-+ ue.printStackTrace();
-+ }
-+ }
-+ }
-+ if (base != null && base.length() != 0) {
-+ baseAttr.setValue(base);
-+ col.add(baseAttr);
-+ }
-+ }
-+
-+ cur.rendered = true;
-+ col.addAll(loa.values());
-+ }
-+ };
-+ XmlAttrStack xmlattrStack = new XmlAttrStack();
-+
-+ /**
-+ * Constructor Canonicalizer11
-+ *
-+ * @param includeComments
-+ */
-+ public Canonicalizer11(boolean includeComments) {
-+ super(includeComments);
-+ }
-+
-+ /**
-+ * Returns the Attr[]s to be outputted for the given element.
-+ * <br>
-+ * The code of this method is a copy of {@link #handleAttributes(Element,
-+ * NameSpaceSymbTable)},
-+ * whereas it takes into account that subtree-c14n is -- well --
-+ * subtree-based.
-+ * So if the element in question isRoot of c14n, it's parent is not in the
-+ * node set, as well as all other ancestors.
-+ *
-+ * @param E
-+ * @param ns
-+ * @return the Attr[]s to be outputted
-+ * @throws CanonicalizationException
-+ */
-+ Iterator handleAttributesSubtree(Element E, NameSpaceSymbTable ns)
-+ throws CanonicalizationException {
-+ if (!E.hasAttributes() && !firstCall) {
-+ return null;
-+ }
-+ // result will contain the attrs which have to be outputted
-+ final SortedSet result = this.result;
-+ result.clear();
-+ NamedNodeMap attrs = E.getAttributes();
-+ int attrsLength = attrs.getLength();
-+
-+ for (int i = 0; i < attrsLength; i++) {
-+ Attr N = (Attr) attrs.item(i);
-+ String NUri = N.getNamespaceURI();
-+
-+ if (XMLNS_URI != NUri) {
-+ // It's not a namespace attr node. Add to the result and
-+ // continue.
-+ result.add(N);
-+ continue;
-+ }
-+
-+ String NName = N.getLocalName();
-+ String NValue = N.getValue();
-+ if (XML.equals(NName)
-+ && XML_LANG_URI.equals(NValue)) {
-+ // The default mapping for xml must not be output.
-+ continue;
-+ }
-+
-+ Node n = ns.addMappingAndRender(NName, NValue, N);
-+
-+ if (n != null) {
-+ // Render the ns definition
-+ result.add(n);
-+ if (C14nHelper.namespaceIsRelative(N)) {
-+ Object exArgs[] = {E.getTagName(), NName, N.getNodeValue()};
-+ throw new CanonicalizationException(
-+ "c14n.Canonicalizer.RelativeNamespace", exArgs);
-+ }
-+ }
-+ }
-+
-+ if (firstCall) {
-+ // It is the first node of the subtree
-+ // Obtain all the namespaces defined in the parents, and added
-+ // to the output.
-+ ns.getUnrenderedNodes(result);
-+ // output the attributes in the xml namespace.
-+ xmlattrStack.getXmlnsAttr(result);
-+ firstCall = false;
-+ }
-+
-+ return result.iterator();
-+ }
-+
-+ /**
-+ * Returns the Attr[]s to be outputted for the given element.
-+ * <br>
-+ * IMPORTANT: This method expects to work on a modified DOM tree, i.e. a
-+ * DOM which has been prepared using
-+ * {@link com.sun.org.apache.xml.internal.security.utils.XMLUtils#circumventBug2650(
-+ * org.w3c.dom.Document)}.
-+ *
-+ * @param E
-+ * @param ns
-+ * @return the Attr[]s to be outputted
-+ * @throws CanonicalizationException
-+ */
-+ Iterator handleAttributes(Element E, NameSpaceSymbTable ns)
-+ throws CanonicalizationException {
-+ // result will contain the attrs which have to be output
-+ xmlattrStack.push(ns.getLevel());
-+ boolean isRealVisible = isVisibleDO(E, ns.getLevel()) == 1;
-+ NamedNodeMap attrs = null;
-+ int attrsLength = 0;
-+ if (E.hasAttributes()) {
-+ attrs = E.getAttributes();
-+ attrsLength = attrs.getLength();
-+ }
-+
-+ SortedSet result = this.result;
-+ result.clear();
-+
-+ for (int i = 0; i < attrsLength; i++) {
-+ Attr N = (Attr) attrs.item(i);
-+ String NUri = N.getNamespaceURI();
-+
-+ if (XMLNS_URI != NUri) {
-+ // A non namespace definition node.
-+ if (XML_LANG_URI == NUri) {
-+ if (N.getLocalName().equals("id")) {
-+ if (isRealVisible) {
-+ // treat xml:id like any other attribute
-+ // (emit it, but don't inherit it)
-+ result.add(N);
-+ }
-+ } else {
-+ xmlattrStack.addXmlnsAttr(N);
-+ }
-+ } else if (isRealVisible) {
-+ // The node is visible add the attribute to the list of
-+ // output attributes.
-+ result.add(N);
-+ }
-+ // keep working
-+ continue;
-+ }
-+
-+ String NName = N.getLocalName();
-+ String NValue = N.getValue();
-+ if ("xml".equals(NName)
-+ && XML_LANG_URI.equals(NValue)) {
-+ /* except omit namespace node with local name xml, which defines
-+ * the xml prefix, if its string value is
-+ * http://www.w3.org/XML/1998/namespace.
-+ */
-+ continue;
-+ }
-+ // add the prefix binding to the ns symb table.
-+ // ns.addInclusiveMapping(NName,NValue,N,isRealVisible);
-+ if (isVisible(N)) {
-+ if (!isRealVisible && ns.removeMappingIfRender(NName)) {
-+ continue;
-+ }
-+ // The xpath select this node output it if needed.
-+ // Node n = ns.addMappingAndRenderXNodeSet
-+ // (NName, NValue, N, isRealVisible);
-+ Node n = ns.addMappingAndRender(NName, NValue, N);
-+ if (n != null) {
-+ result.add(n);
-+ if (C14nHelper.namespaceIsRelative(N)) {
-+ Object exArgs[] =
-+ { E.getTagName(), NName, N.getNodeValue() };
-+ throw new CanonicalizationException(
-+ "c14n.Canonicalizer.RelativeNamespace", exArgs);
-+ }
-+ }
-+ } else {
-+ if (isRealVisible && NName != XMLNS) {
-+ ns.removeMapping(NName);
-+ } else {
-+ ns.addMapping(NName, NValue, N);
-+ }
-+ }
-+ }
-+ if (isRealVisible) {
-+ // The element is visible, handle the xmlns definition
-+ Attr xmlns = E.getAttributeNodeNS(XMLNS_URI, XMLNS);
-+ Node n = null;
-+ if (xmlns == null) {
-+ // No xmlns def just get the already defined.
-+ n = ns.getMapping(XMLNS);
-+ } else if (!isVisible(xmlns)) {
-+ // There is a defn but the xmlns is not selected by the xpath.
-+ // then xmlns=""
-+ n = ns.addMappingAndRender(XMLNS, "", nullNode);
-+ }
-+ // output the xmlns def if needed.
-+ if (n != null) {
-+ result.add(n);
-+ }
-+ // Float all xml:* attributes of the unselected parent elements to
-+ // this one. addXmlAttributes(E,result);
-+ xmlattrStack.getXmlnsAttr(result);
-+ ns.getUnrenderedNodes(result);
-+ }
-+
-+ return result.iterator();
-+ }
-+
-+ /**
-+ * Always throws a CanonicalizationException because this is inclusive c14n.
-+ *
-+ * @param xpathNodeSet
-+ * @param inclusiveNamespaces
-+ * @return none it always fails
-+ * @throws CanonicalizationException always
-+ */
-+ public byte[] engineCanonicalizeXPathNodeSet(Set xpathNodeSet,
-+ String inclusiveNamespaces) throws CanonicalizationException {
-+ throw new CanonicalizationException(
-+ "c14n.Canonicalizer.UnsupportedOperation");
-+ }
-+
-+ /**
-+ * Always throws a CanonicalizationException because this is inclusive c14n.
-+ *
-+ * @param rootNode
-+ * @param inclusiveNamespaces
-+ * @return none it always fails
-+ * @throws CanonicalizationException
-+ */
-+ public byte[] engineCanonicalizeSubTree(Node rootNode,
-+ String inclusiveNamespaces) throws CanonicalizationException {
-+ throw new CanonicalizationException(
-+ "c14n.Canonicalizer.UnsupportedOperation");
-+ }
-+
-+ void circumventBugIfNeeded(XMLSignatureInput input)
-+ throws CanonicalizationException, ParserConfigurationException,
-+ IOException, SAXException {
-+ if (!input.isNeedsToBeExpanded())
-+ return;
-+ Document doc = null;
-+ if (input.getSubNode() != null) {
-+ doc = XMLUtils.getOwnerDocument(input.getSubNode());
-+ } else {
-+ doc = XMLUtils.getOwnerDocument(input.getNodeSet());
-+ }
-+ XMLUtils.circumventBug2650(doc);
-+ }
-+
-+ void handleParent(Element e, NameSpaceSymbTable ns) {
-+ if (!e.hasAttributes()) {
-+ return;
-+ }
-+ xmlattrStack.push(-1);
-+ NamedNodeMap attrs = e.getAttributes();
-+ int attrsLength = attrs.getLength();
-+ for (int i = 0; i < attrsLength; i++) {
-+ Attr N = (Attr) attrs.item(i);
-+ if (Constants.NamespaceSpecNS != N.getNamespaceURI()) {
-+ // Not a namespace definition, ignore.
-+ if (XML_LANG_URI == N.getNamespaceURI()) {
-+ xmlattrStack.addXmlnsAttr(N);
-+ }
-+ continue;
-+ }
-+
-+ String NName = N.getLocalName();
-+ String NValue = N.getNodeValue();
-+ if (XML.equals(NName)
-+ && Constants.XML_LANG_SPACE_SpecNS.equals(NValue)) {
-+ continue;
-+ }
-+ ns.addMapping(NName,NValue,N);
-+ }
-+ }
-+
-+ private static String joinURI(String baseURI, String relativeURI)
-+ throws URISyntaxException {
-+ String bscheme = null;
-+ String bauthority = null;
-+ String bpath = "";
-+ String bquery = null;
-+ String bfragment = null; // Is this correct?
-+
-+ // pre-parse the baseURI
-+ if (baseURI != null) {
-+ if (baseURI.endsWith("..")) {
-+ baseURI = baseURI + "/";
-+ }
-+ URI base = new URI(baseURI);
-+ bscheme = base.getScheme();
-+ bauthority = base.getAuthority();
-+ bpath = base.getPath();
-+ bquery = base.getQuery();
-+ bfragment = base.getFragment();
-+ }
-+
-+ URI r = new URI(relativeURI);
-+ String rscheme = r.getScheme();
-+ String rauthority = r.getAuthority();
-+ String rpath = r.getPath();
-+ String rquery = r.getQuery();
-+ String rfragment = null;
-+
-+ String tscheme, tauthority, tpath, tquery, tfragment;
-+ if (rscheme != null && rscheme.equals(bscheme)) {
-+ rscheme = null;
-+ }
-+ if (rscheme != null) {
-+ tscheme = rscheme;
-+ tauthority = rauthority;
-+ tpath = removeDotSegments(rpath);
-+ tquery = rquery;
-+ } else {
-+ if (rauthority != null) {
-+ tauthority = rauthority;
-+ tpath = removeDotSegments(rpath);
-+ tquery = rquery;
-+ } else {
-+ if (rpath.length() == 0) {
-+ tpath = bpath;
-+ if (rquery != null) {
-+ tquery = rquery;
-+ } else {
-+ tquery = bquery;
-+ }
-+ } else {
-+ if (rpath.startsWith("/")) {
-+ tpath = removeDotSegments(rpath);
-+ } else {
-+ if (bauthority != null && bpath.length() == 0) {
-+ tpath = "/" + rpath;
-+ } else {
-+ int last = bpath.lastIndexOf('/');
-+ if (last == -1) {
-+ tpath = rpath;
-+ } else {
-+ tpath = bpath.substring(0, last+1) + rpath;
-+ }
-+ }
-+ tpath = removeDotSegments(tpath);
-+ }
-+ tquery = rquery;
-+ }
-+ tauthority = bauthority;
-+ }
-+ tscheme = bscheme;
-+ }
-+ tfragment = rfragment;
-+ return new URI(tscheme, tauthority, tpath, tquery, tfragment).toString();
-+ }
-+
-+ private static String removeDotSegments(String path) {
-+
-+ log.log(java.util.logging.Level.FINE, "STEP OUTPUT BUFFER\t\tINPUT BUFFER");
-+
-+ // 1. The input buffer is initialized with the now-appended path
-+ // components then replace occurrences of "//" in the input buffer
-+ // with "/" until no more occurrences of "//" are in the input buffer.
-+ String input = path;
-+ while (input.indexOf("//") > -1) {
-+ input = input.replaceAll("//", "/");
-+ }
-+
-+ // Initialize the output buffer with the empty string.
-+ StringBuffer output = new StringBuffer();
-+
-+ // If the input buffer starts with a root slash "/" then move this
-+ // character to the output buffer.
-+ if (input.charAt(0) == '/') {
-+ output.append("/");
-+ input = input.substring(1);
-+ }
-+
-+ printStep("1 ", output.toString(), input);
-+
-+ // While the input buffer is not empty, loop as follows
-+ while (input.length() != 0) {
-+ // 2A. If the input buffer begins with a prefix of "./",
-+ // then remove that prefix from the input buffer
-+ // else if the input buffer begins with a prefix of "../", then
-+ // if also the output does not contain the root slash "/" only,
-+ // then move this prefix to the end of the output buffer else
-+ // remove that prefix
-+ if (input.startsWith("./")) {
-+ input = input.substring(2);
-+ printStep("2A", output.toString(), input);
-+ } else if (input.startsWith("../")) {
-+ input = input.substring(3);
-+ if (!output.toString().equals("/")) {
-+ output.append("../");
-+ }
-+ printStep("2A", output.toString(), input);
-+ // 2B. if the input buffer begins with a prefix of "/./" or "/.",
-+ // where "." is a complete path segment, then replace that prefix
-+ // with "/" in the input buffer; otherwise,
-+ } else if (input.startsWith("/./")) {
-+ input = input.substring(2);
-+ printStep("2B", output.toString(), input);
-+ } else if (input.equals("/.")) {
-+ // FIXME: what is complete path segment?
-+ input = input.replaceFirst("/.", "/");
-+ printStep("2B", output.toString(), input);
-+ // 2C. if the input buffer begins with a prefix of "/../" or "/..",
-+ // where ".." is a complete path segment, then replace that prefix
-+ // with "/" in the input buffer and if also the output buffer is
-+ // empty, last segment in the output buffer equals "../" or "..",
-+ // where ".." is a complete path segment, then append ".." or "/.."
-+ // for the latter case respectively to the output buffer else
-+ // remove the last segment and its preceding "/" (if any) from the
-+ // output buffer and if hereby the first character in the output
-+ // buffer was removed and it was not the root slash then delete a
-+ // leading slash from the input buffer; otherwise,
-+ } else if (input.startsWith("/../")) {
-+ input = input.substring(3);
-+ if (output.length() == 0) {
-+ output.append("/");
-+ } else if (output.toString().endsWith("../")) {
-+ output.append("..");
-+ } else if (output.toString().endsWith("..")) {
-+ output.append("/..");
-+ } else {
-+ int index = output.lastIndexOf("/");
-+ if (index == -1) {
-+ output = new StringBuffer();
-+ if (input.charAt(0) == '/') {
-+ input = input.substring(1);
-+ }
-+ } else {
-+ output = output.delete(index, output.length());
-+ }
-+ }
-+ printStep("2C", output.toString(), input);
-+ } else if (input.equals("/..")) {
-+ // FIXME: what is complete path segment?
-+ input = input.replaceFirst("/..", "/");
-+ if (output.length() == 0) {
-+ output.append("/");
-+ } else if (output.toString().endsWith("../")) {
-+ output.append("..");
-+ } else if (output.toString().endsWith("..")) {
-+ output.append("/..");
-+ } else {
-+ int index = output.lastIndexOf("/");
-+ if (index == -1) {
-+ output = new StringBuffer();
-+ if (input.charAt(0) == '/') {
-+ input = input.substring(1);
-+ }
-+ } else {
-+ output = output.delete(index, output.length());
-+ }
-+ }
-+ printStep("2C", output.toString(), input);
-+ // 2D. if the input buffer consists only of ".", then remove
-+ // that from the input buffer else if the input buffer consists
-+ // only of ".." and if the output buffer does not contain only
-+ // the root slash "/", then move the ".." to the output buffer
-+ // else delte it.; otherwise,
-+ } else if (input.equals(".")) {
-+ input = "";
-+ printStep("2D", output.toString(), input);
-+ } else if (input.equals("..")) {
-+ if (!output.toString().equals("/"))
-+ output.append("..");
-+ input = "";
-+ printStep("2D", output.toString(), input);
-+ // 2E. move the first path segment (if any) in the input buffer
-+ // to the end of the output buffer, including the initial "/"
-+ // character (if any) and any subsequent characters up to, but not
-+ // including, the next "/" character or the end of the input buffer.
-+ } else {
-+ int end = -1;
-+ int begin = input.indexOf('/');
-+ if (begin == 0) {
-+ end = input.indexOf('/', 1);
-+ } else {
-+ end = begin;
-+ begin = 0;
-+ }
-+ String segment;
-+ if (end == -1) {
-+ segment = input.substring(begin);
-+ input = "";
-+ } else {
-+ segment = input.substring(begin, end);
-+ input = input.substring(end);
-+ }
-+ output.append(segment);
-+ printStep("2E", output.toString(), input);
-+ }
-+ }
-+
-+ // 3. Finally, if the only or last segment of the output buffer is
-+ // "..", where ".." is a complete path segment not followed by a slash
-+ // then append a slash "/". The output buffer is returned as the result
-+ // of remove_dot_segments
-+ if (output.toString().endsWith("..")) {
-+ output.append("/");
-+ printStep("3 ", output.toString(), input);
-+ }
-+
-+ return output.toString();
-+ }
-+
-+ private static void printStep(String step, String output, String input) {
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, " " + step + ": " + output);
-+ if (output.length() == 0) {
-+ log.log(java.util.logging.Level.FINE, "\t\t\t\t" + input);
-+ } else {
-+ log.log(java.util.logging.Level.FINE, "\t\t\t" + input);
-+ }
-+ }
-+ }
-+}
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11_OmitComments.java b/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11_OmitComments.java
-new file mode 100644
---- /dev/null
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11_OmitComments.java
-@@ -0,0 +1,41 @@
-+/*
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
-+ */
-+/*
-+ * Copyright 2008 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+package com.sun.org.apache.xml.internal.security.c14n.implementations;
-+
-+import com.sun.org.apache.xml.internal.security.c14n.Canonicalizer;
-+
-+/**
-+ * @author Sean Mullan
-+ */
-+public class Canonicalizer11_OmitComments extends Canonicalizer11 {
-+
-+ public Canonicalizer11_OmitComments() {
-+ super(false);
-+ }
-+
-+ public final String engineGetURI() {
-+ return Canonicalizer.ALGO_ID_C14N11_OMIT_COMMENTS;
-+ }
-+
-+ public final boolean engineGetIncludeComments() {
-+ return false;
-+ }
-+}
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11_WithComments.java b/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11_WithComments.java
-new file mode 100644
---- /dev/null
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11_WithComments.java
-@@ -0,0 +1,41 @@
-+/*
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
-+ */
-+/*
-+ * Copyright 2008 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+package com.sun.org.apache.xml.internal.security.c14n.implementations;
-+
-+import com.sun.org.apache.xml.internal.security.c14n.Canonicalizer;
-+
-+/**
-+ * @author Sean Mullan
-+ */
-+public class Canonicalizer11_WithComments extends Canonicalizer11 {
-+
-+ public Canonicalizer11_WithComments() {
-+ super(true);
-+ }
-+
-+ public final String engineGetURI() {
-+ return Canonicalizer.ALGO_ID_C14N11_WITH_COMMENTS;
-+ }
-+
-+ public final boolean engineGetIncludeComments() {
-+ return true;
-+ }
-+}
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315.java b/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -23,20 +22,30 @@
-
-
-
-+import java.io.IOException;
-+import java.util.ArrayList;
-+import java.util.Collection;
- import java.util.HashMap;
- import java.util.Iterator;
-+import java.util.List;
- import java.util.Map;
- import java.util.Set;
- import java.util.SortedSet;
- import java.util.TreeSet;
-
-+import javax.xml.parsers.ParserConfigurationException;
-+
- import com.sun.org.apache.xml.internal.security.c14n.CanonicalizationException;
- import com.sun.org.apache.xml.internal.security.c14n.helper.C14nHelper;
-+import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
- import com.sun.org.apache.xml.internal.security.utils.Constants;
-+import com.sun.org.apache.xml.internal.security.utils.XMLUtils;
- import org.w3c.dom.Attr;
-+import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.w3c.dom.NamedNodeMap;
- import org.w3c.dom.Node;
-+import org.xml.sax.SAXException;
-
-
- /**
-@@ -44,13 +53,92 @@
- * XML Version 1.0</A>, a W3C Recommendation from 15 March 2001.
- *
- * @author Christian Geuer-Pollmann <geuerp@apache.org>
-+ * @version $Revision: 1.5 $
- */
- public abstract class Canonicalizer20010315 extends CanonicalizerBase {
- boolean firstCall=true;
- final SortedSet result= new TreeSet(COMPARE);
- static final String XMLNS_URI=Constants.NamespaceSpecNS;
- static final String XML_LANG_URI=Constants.XML_LANG_SPACE_SpecNS;
-- /**
-+ static class XmlAttrStack {
-+ int currentLevel=0;
-+ int lastlevel=0;
-+ XmlsStackElement cur;
-+ static class XmlsStackElement {
-+ int level;
-+ boolean rendered=false;
-+ List nodes=new ArrayList();
-+ };
-+ List levels=new ArrayList();
-+ void push(int level) {
-+ currentLevel=level;
-+ if (currentLevel==-1)
-+ return;
-+ cur=null;
-+ while (lastlevel>=currentLevel) {
-+ levels.remove(levels.size()-1);
-+ if (levels.size()==0) {
-+ lastlevel=0;
-+ return;
-+ }
-+ lastlevel=((XmlsStackElement)levels.get(levels.size()-1)).level;
-+ }
-+ }
-+ void addXmlnsAttr(Attr n) {
-+ if (cur==null) {
-+ cur=new XmlsStackElement();
-+ cur.level=currentLevel;
-+ levels.add(cur);
-+ lastlevel=currentLevel;
-+ }
-+ cur.nodes.add(n);
-+ }
-+ void getXmlnsAttr(Collection col) {
-+ int size=levels.size()-1;
-+ if (cur==null) {
-+ cur=new XmlsStackElement();
-+ cur.level=currentLevel;
-+ lastlevel=currentLevel;
-+ levels.add(cur);
-+ }
-+ boolean parentRendered=false;
-+ XmlsStackElement e=null;
-+ if (size==-1) {
-+ parentRendered=true;
-+ } else {
-+ e=(XmlsStackElement)levels.get(size);
-+ if (e.rendered && e.level+1==currentLevel)
-+ parentRendered=true;
-+
-+ }
-+ if (parentRendered) {
-+ col.addAll(cur.nodes);
-+ cur.rendered=true;
-+ return;
-+ }
-+
-+ Map loa = new HashMap();
-+ for (;size>=0;size--) {
-+ e=(XmlsStackElement)levels.get(size);
-+ Iterator it=e.nodes.iterator();
-+ while (it.hasNext()) {
-+ Attr n=(Attr)it.next();
-+ if (!loa.containsKey(n.getName()))
-+ loa.put(n.getName(),n);
-+ }
-+ //if (e.rendered)
-+ //break;
-+
-+ };
-+ //cur.nodes.clear();
-+ //cur.nodes.addAll(loa.values());
-+ cur.rendered=true;
-+ col.addAll(loa.values());
-+ }
-+
-+ }
-+ XmlAttrStack xmlattrStack=new XmlAttrStack();
-+ /**
- * Constructor Canonicalizer20010315
- *
- * @param includeComments
-@@ -86,16 +174,16 @@
-
- for (int i = 0; i < attrsLength; i++) {
- Attr N = (Attr) attrs.item(i);
-- String NName=N.getLocalName();
-- String NValue=N.getValue();
- String NUri =N.getNamespaceURI();
-
-- if (!XMLNS_URI.equals(NUri)) {
-+ if (XMLNS_URI!=NUri) {
- //It's not a namespace attr node. Add to the result and continue.
- result.add(N);
- continue;
- }
-
-+ String NName=N.getLocalName();
-+ String NValue=N.getValue();
- if (XML.equals(NName)
- && XML_LANG_URI.equals(NValue)) {
- //The default mapping for xml must not be output.
-@@ -120,65 +208,14 @@
- //Obtain all the namespaces defined in the parents, and added to the output.
- ns.getUnrenderedNodes(result);
- //output the attributes in the xml namespace.
-- addXmlAttributesSubtree(E, result);
-- firstCall=false;
-+ xmlattrStack.getXmlnsAttr(result);
-+ firstCall=false;
- }
-
- return result.iterator();
- }
-
- /**
-- * Float the xml:* attributes of the parent nodes to the root node of c14n
-- * @param E the root node.
-- * @param result the xml:* attributes to output.
-- */
-- private void addXmlAttributesSubtree(Element E, SortedSet result) {
-- // E is in the node-set
-- Node parent = E.getParentNode();
-- Map loa = new HashMap();
--
-- if ((parent != null) && (parent.getNodeType() == Node.ELEMENT_NODE)) {
--
-- // parent element is not in node set
-- for (Node ancestor = parent;
-- (ancestor != null)
-- && (ancestor.getNodeType() == Node.ELEMENT_NODE);
-- ancestor = ancestor.getParentNode()) {
-- Element el=((Element) ancestor);
-- if (!el.hasAttributes()) {
-- continue;
-- }
-- // for all ancestor elements
-- NamedNodeMap ancestorAttrs = el.getAttributes();
--
-- for (int i = 0; i < ancestorAttrs.getLength(); i++) {
-- // for all attributes in the ancestor element
-- Attr currentAncestorAttr = (Attr) ancestorAttrs.item(i);
--
-- if (XML_LANG_URI.equals(
-- currentAncestorAttr.getNamespaceURI())) {
--
-- // do we have an xml:* ?
-- if (!E.hasAttributeNS(
-- XML_LANG_URI,
-- currentAncestorAttr.getLocalName())) {
--
-- // the xml:* attr is not in E
-- if (!loa.containsKey(currentAncestorAttr.getName())) {
-- loa.put(currentAncestorAttr.getName(),
-- currentAncestorAttr);
-- }
-- }
-- }
-- }
-- }
-- }
--
-- result.addAll( loa.values());
--
-- }
--
-- /**
- * Returns the Attr[]s to be outputted for the given element.
- * <br>
- * IMPORTANT: This method expects to work on a modified DOM tree, i.e. a DOM which has
-@@ -192,7 +229,8 @@
- */
- Iterator handleAttributes(Element E, NameSpaceSymbTable ns ) throws CanonicalizationException {
- // result will contain the attrs which have to be outputted
-- boolean isRealVisible=isVisible(E);
-+ xmlattrStack.push(ns.getLevel());
-+ boolean isRealVisible=isVisibleDO(E,ns.getLevel())==1;
- NamedNodeMap attrs = null;
- int attrsLength = 0;
- if (E.hasAttributes()) {
-@@ -204,16 +242,15 @@
- SortedSet result = this.result;
- result.clear();
-
--
- for (int i = 0; i < attrsLength; i++) {
- Attr N = (Attr) attrs.item(i);
-- String NName=N.getLocalName();
-- String NValue=N.getValue();
- String NUri =N.getNamespaceURI();
-
-- if (!XMLNS_URI.equals(NUri)) {
-+ if (XMLNS_URI!=NUri) {
- //A non namespace definition node.
-- if (isRealVisible){
-+ if (XML_LANG_URI==NUri) {
-+ xmlattrStack.addXmlnsAttr(N);
-+ } else if (isRealVisible){
- //The node is visible add the attribute to the list of output attributes.
- result.add(N);
- }
-@@ -221,7 +258,8 @@
- continue;
- }
-
--
-+ String NName=N.getLocalName();
-+ String NValue=N.getValue();
- if ("xml".equals(NName)
- && XML_LANG_URI.equals(NValue)) {
- /* except omit namespace node with local name xml, which defines
-@@ -232,16 +270,26 @@
- //add the prefix binding to the ns symb table.
- //ns.addInclusiveMapping(NName,NValue,N,isRealVisible);
- if (isVisible(N)) {
-- //The xpath select this node output it if needed.
-- Node n=ns.addMappingAndRenderXNodeSet(NName,NValue,N,isRealVisible);
-- if (n!=null) {
-+ if (!isRealVisible && ns.removeMappingIfRender(NName)) {
-+ continue;
-+ }
-+ //The xpath select this node output it if needed.
-+ //Node n=ns.addMappingAndRenderXNodeSet(NName,NValue,N,isRealVisible);
-+ Node n=ns.addMappingAndRender(NName,NValue,N);
-+ if (n!=null) {
- result.add(n);
- if (C14nHelper.namespaceIsRelative(N)) {
- Object exArgs[] = { E.getTagName(), NName, N.getNodeValue() };
- throw new CanonicalizationException(
- "c14n.Canonicalizer.RelativeNamespace", exArgs);
-- }
-- }
-+ }
-+ }
-+ } else {
-+ if (isRealVisible && NName!=XMLNS) {
-+ ns.removeMapping(NName);
-+ } else {
-+ ns.addMapping(NName,NValue,N);
-+ }
- }
- }
- if (isRealVisible) {
-@@ -254,85 +302,22 @@
- } else if ( !isVisible(xmlns)) {
- //There is a definition but the xmlns is not selected by the xpath.
- //then xmlns=""
-- n=ns.addMappingAndRenderXNodeSet(XMLNS,"",nullNode,true);
-+ n=ns.addMappingAndRender(XMLNS,"",nullNode);
- }
- //output the xmlns def if needed.
- if (n!=null) {
- result.add(n);
- }
- //Float all xml:* attributes of the unselected parent elements to this one.
-- addXmlAttributes(E,result);
-+ //addXmlAttributes(E,result);
-+ xmlattrStack.getXmlnsAttr(result);
-+ ns.getUnrenderedNodes(result);
-+
- }
-
- return result.iterator();
- }
- /**
-- * Float the xml:* attributes of the unselected parent nodes to the ciurrent node.
-- * @param E
-- * @param result
-- */
-- private void addXmlAttributes(Element E, SortedSet result) {
-- /* The processing of an element node E MUST be modified slightly when an
-- * XPath node-set is given as input and the element's parent is omitted
-- * from the node-set. The method for processing the attribute axis of an
-- * element E in the node-set is enhanced. All element nodes along E's
-- * ancestor axis are examined for nearest occurrences of attributes in
-- * the xml namespace, such as xml:lang and xml:space (whether or not they
-- * are in the node-set). From this list of attributes, remove any that are
-- * in E's attribute axis (whether or not they are in the node-set). Then,
-- * lexicographically merge this attribute list with the nodes of E's
-- * attribute axis that are in the node-set. The result of visiting the
-- * attribute axis is computed by processing the attribute nodes in this
-- * merged attribute list.
-- */
--
-- // E is in the node-set
-- Node parent = E.getParentNode();
-- Map loa = new HashMap();
--
-- if ((parent != null) && (parent.getNodeType() == Node.ELEMENT_NODE)
-- &&!isVisible(parent)) {
--
-- // parent element is not in node set
-- for (Node ancestor = parent;
-- (ancestor != null)
-- && (ancestor.getNodeType() == Node.ELEMENT_NODE);
-- ancestor = ancestor.getParentNode()) {
-- Element el=((Element) ancestor);
-- if (!el.hasAttributes()) {
-- continue;
-- }
-- // for all ancestor elements
-- NamedNodeMap ancestorAttrs =el.getAttributes();
--
-- for (int i = 0; i < ancestorAttrs.getLength(); i++) {
--
-- // for all attributes in the ancestor element
-- Attr currentAncestorAttr = (Attr) ancestorAttrs.item(i);
--
-- if (XML_LANG_URI.equals(
-- currentAncestorAttr.getNamespaceURI())) {
--
-- // do we have an xml:* ?
-- if (!E.hasAttributeNS(
-- XML_LANG_URI,
-- currentAncestorAttr.getLocalName())) {
--
-- // the xml:* attr is not in E
-- if (!loa.containsKey(currentAncestorAttr.getName())) {
-- loa.put(currentAncestorAttr.getName(),
-- currentAncestorAttr);
-- }
-- }
-- }
-- }
-- }
-- }
-- result.addAll(loa.values());
--
--}
--
-- /**
- * Always throws a CanonicalizationException because this is inclusive c14n.
- *
- * @param xpathNodeSet
-@@ -363,4 +348,43 @@
- throw new CanonicalizationException(
- "c14n.Canonicalizer.UnsupportedOperation");
- }
-+ void circumventBugIfNeeded(XMLSignatureInput input) throws CanonicalizationException, ParserConfigurationException, IOException, SAXException {
-+ if (!input.isNeedsToBeExpanded())
-+ return;
-+ Document doc = null;
-+ if (input.getSubNode() != null) {
-+ doc=XMLUtils.getOwnerDocument(input.getSubNode());
-+ } else {
-+ doc=XMLUtils.getOwnerDocument(input.getNodeSet());
-+ }
-+ XMLUtils.circumventBug2650(doc);
-+
-+ }
-+
-+ void handleParent(Element e, NameSpaceSymbTable ns) {
-+ if (!e.hasAttributes()) {
-+ return;
-+ }
-+ xmlattrStack.push(-1);
-+ NamedNodeMap attrs = e.getAttributes();
-+ int attrsLength = attrs.getLength();
-+ for (int i = 0; i < attrsLength; i++) {
-+ Attr N = (Attr) attrs.item(i);
-+ if (Constants.NamespaceSpecNS!=N.getNamespaceURI()) {
-+ //Not a namespace definition, ignore.
-+ if (XML_LANG_URI==N.getNamespaceURI()) {
-+ xmlattrStack.addXmlnsAttr(N);
-+ }
-+ continue;
-+ }
-+
-+ String NName=N.getLocalName();
-+ String NValue=N.getNodeValue();
-+ if (XML.equals(NName)
-+ && Constants.XML_LANG_SPACE_SpecNS.equals(NValue)) {
-+ continue;
-+ }
-+ ns.addMapping(NName,NValue,N);
-+ }
-+ }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315Excl.java b/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315Excl.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315Excl.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315Excl.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -21,20 +20,26 @@
- */
- package com.sun.org.apache.xml.internal.security.c14n.implementations;
-
-+import java.io.IOException;
- import java.util.Iterator;
- import java.util.Set;
- import java.util.SortedSet;
- import java.util.TreeSet;
-
-+import javax.xml.parsers.ParserConfigurationException;
-+
- import com.sun.org.apache.xml.internal.security.c14n.CanonicalizationException;
- import com.sun.org.apache.xml.internal.security.c14n.helper.C14nHelper;
- import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
- import com.sun.org.apache.xml.internal.security.transforms.params.InclusiveNamespaces;
- import com.sun.org.apache.xml.internal.security.utils.Constants;
-+import com.sun.org.apache.xml.internal.security.utils.XMLUtils;
- import org.w3c.dom.Attr;
-+import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.w3c.dom.NamedNodeMap;
- import org.w3c.dom.Node;
-+import org.xml.sax.SAXException;
- /**
- * Implements &quot; <A
- * HREF="http://www.w3.org/TR/2002/REC-xml-exc-c14n-20020718/">Exclusive XML
-@@ -47,6 +52,7 @@
- * <i>THIS </i> implementation is a complete rewrite of the algorithm.
- *
- * @author Christian Geuer-Pollmann <geuerp@apache.org>
-+ * @version $Revision: 1.5 $
- * @see <a href="http://www.w3.org/TR/2002/REC-xml-exc-c14n-20020718/ Exclusive#">
- * XML Canonicalization, Version 1.0</a>
- */
-@@ -55,7 +61,7 @@
- * This Set contains the names (Strings like "xmlns" or "xmlns:foo") of
- * the inclusive namespaces.
- */
-- TreeSet _inclusiveNSSet = null;
-+ TreeSet _inclusiveNSSet = new TreeSet();
- static final String XMLNS_URI=Constants.NamespaceSpecNS;
- final SortedSet result = new TreeSet(COMPARE);
- /**
-@@ -143,10 +149,8 @@
-
- for (int i = 0; i < attrsLength; i++) {
- Attr N = (Attr) attrs.item(i);
-- String NName=N.getLocalName();
-- String NNodeValue=N.getNodeValue();
-
-- if (!XMLNS_URI.equals(N.getNamespaceURI())) {
-+ if (XMLNS_URI!=N.getNamespaceURI()) {
- //Not a namespace definition.
- //The Element is output element, add his prefix(if used) to visibyUtilized
- String prefix = N.getPrefix();
-@@ -157,6 +161,8 @@
- result.add(N);
- continue;
- }
-+ String NName=N.getLocalName();
-+ String NNodeValue=N.getNodeValue();
-
- if (ns.addMapping(NName, NNodeValue,N)) {
- //New definition check if it is relative.
-@@ -168,17 +174,17 @@
- }
- }
- }
-+ String prefix;
-+ if (E.getNamespaceURI() != null) {
-+ prefix = E.getPrefix();
-+ if ((prefix == null) || (prefix.length() == 0)) {
-+ prefix=XMLNS;
-+ }
-
-- if (E.getNamespaceURI() != null) {
-- String prefix = E.getPrefix();
-- if ((prefix == null) || (prefix.length() == 0)) {
-- visiblyUtilized.add(XMLNS);
-- } else {
-- visiblyUtilized.add(prefix);
-- }
- } else {
-- visiblyUtilized.add(XMLNS);
-+ prefix=XMLNS;
- }
-+ visiblyUtilized.add(prefix);
-
- //This can be optimezed by I don't have time
- Iterator it=visiblyUtilized.iterator();
-@@ -211,12 +217,6 @@
-
- }
-
-- /** @inheritDoc */
-- public byte[] engineCanonicalizeXPathNodeSet(Set xpathNodeSet
-- ) throws CanonicalizationException {
-- return engineCanonicalizeXPathNodeSet(xpathNodeSet,"");
-- }
--
- /**
- * @inheritDoc
- * @param E
-@@ -236,21 +236,20 @@
- //The prefix visibly utilized(in the attribute or in the name) in the element
- Set visiblyUtilized =null;
- //It's the output selected.
-- boolean isOutputElement = isVisible(E);
-+ boolean isOutputElement=isVisibleDO(E,ns.getLevel())==1;
- if (isOutputElement) {
- visiblyUtilized = (Set) this._inclusiveNSSet.clone();
- }
-
- for (int i = 0; i < attrsLength; i++) {
- Attr N = (Attr) attrs.item(i);
-- String NName=N.getLocalName();
-- String NNodeValue=N.getNodeValue();
-- if ( !isVisible(N) ) {
-- //The node is not in the nodeset(if there is a nodeset)
-- continue;
-- }
-
-- if (!XMLNS_URI.equals(N.getNamespaceURI())) {
-+
-+ if (XMLNS_URI!=N.getNamespaceURI()) {
-+ if ( !isVisible(N) ) {
-+ //The node is not in the nodeset(if there is a nodeset)
-+ continue;
-+ }
- //Not a namespace definition.
- if (isOutputElement) {
- //The Element is output element, add his prefix(if used) to visibyUtilized
-@@ -263,6 +262,25 @@
- }
- continue;
- }
-+ String NName=N.getLocalName();
-+ if (isOutputElement && !isVisible(N) && NName!=XMLNS) {
-+ ns.removeMappingIfNotRender(NName);
-+ continue;
-+ }
-+ String NNodeValue=N.getNodeValue();
-+
-+ if (!isOutputElement && isVisible(N) && _inclusiveNSSet.contains(NName) && !ns.removeMappingIfRender(NName)) {
-+ Node n=ns.addMappingAndRender(NName,NNodeValue,N);
-+ if (n!=null) {
-+ result.add(n);
-+ if (C14nHelper.namespaceIsRelative(N)) {
-+ Object exArgs[] = { E.getTagName(), NName, N.getNodeValue() };
-+ throw new CanonicalizationException(
-+ "c14n.Canonicalizer.RelativeNamespace", exArgs);
-+ }
-+ }
-+ }
-+
-
-
- if (ns.addMapping(NName, NNodeValue,N)) {
-@@ -306,18 +324,20 @@
- }
- result.add(key);
- }
-- } else /*if (_circunvented)*/ {
-- Iterator it=this._inclusiveNSSet.iterator();
-- while (it.hasNext()) {
-- String s=(String)it.next();
-- Attr key=ns.getMappingWithoutRendered(s);
-- if (key==null) {
-- continue;
-- }
-- result.add(key);
-- }
- }
-
- return result.iterator();
- }
-+ void circumventBugIfNeeded(XMLSignatureInput input) throws CanonicalizationException, ParserConfigurationException, IOException, SAXException {
-+ if (!input.isNeedsToBeExpanded() || _inclusiveNSSet.isEmpty())
-+ return;
-+ Document doc = null;
-+ if (input.getSubNode() != null) {
-+ doc=XMLUtils.getOwnerDocument(input.getSubNode());
-+ } else {
-+ doc=XMLUtils.getOwnerDocument(input.getNodeSet());
-+ }
-+
-+ XMLUtils.circumventBug2650(doc);
-+ }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315ExclWithComments.java b/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315ExclWithComments.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315ExclWithComments.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315ExclWithComments.java
-@@ -28,6 +28,7 @@
- /**
- * Class Canonicalizer20010315ExclWithComments
- *
-+ * @version $Revision: 1.5 $
- */
- public class Canonicalizer20010315ExclWithComments
- extends Canonicalizer20010315Excl {
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315WithComments.java b/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315WithComments.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315WithComments.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315WithComments.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerBase.java b/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerBase.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerBase.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerBase.java
-@@ -27,9 +27,11 @@
- import java.io.OutputStream;
- import java.io.UnsupportedEncodingException;
- import java.util.ArrayList;
-+import java.util.HashMap;
- import java.util.Iterator;
- import java.util.List;
- import java.util.ListIterator;
-+import java.util.Map;
- import java.util.Set;
-
- import javax.xml.parsers.DocumentBuilderFactory;
-@@ -45,7 +47,6 @@
- import com.sun.org.apache.xml.internal.security.utils.XMLUtils;
- import org.w3c.dom.Attr;
- import org.w3c.dom.Comment;
--import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.w3c.dom.NamedNodeMap;
- import org.w3c.dom.Node;
-@@ -57,6 +58,7 @@
- * Abstract base class for canonicalization algorithms.
- *
- * @author Christian Geuer-Pollmann <geuerp@apache.org>
-+ * @version $Revision: 1.5 $
- */
- public abstract class CanonicalizerBase extends CanonicalizerSpi {
- //Constants to be outputed, In char array form, so
-@@ -123,6 +125,18 @@
- return engineCanonicalizeSubTree(rootNode,(Node)null);
- }
- /**
-+ * Method engineCanonicalizeXPathNodeSet
-+ * @inheritDoc
-+ * @param xpathNodeSet
-+ * @throws CanonicalizationException
-+ */
-+ public byte[] engineCanonicalizeXPathNodeSet(Set xpathNodeSet)
-+ throws CanonicalizationException {
-+ this._xpathNodeSet = xpathNodeSet;
-+ return engineCanonicalizeXPathNodeSetInternal(XMLUtils.getOwnerDocument(this._xpathNodeSet));
-+ }
-+
-+ /**
- * Canonicalizes a Subtree node.
- * @param input the root of the subtree to canicalize
- * @return The canonicalize stream.
-@@ -143,15 +157,8 @@
- return bytes;
- } else if (input.isNodeSet()) {
- nodeFilter=input.getNodeFilters();
-- Document doc = null;
-- if (input.getSubNode() != null) {
-- doc=XMLUtils.getOwnerDocument(input.getSubNode());
-- } else {
-- doc=XMLUtils.getOwnerDocument(input.getNodeSet());
-- }
-- if (input.isNeedsToBeExpanded()) {
-- XMLUtils.circumventBug2650(doc);
-- }
-+
-+ circumventBugIfNeeded(input);
-
- if (input.getSubNode() != null) {
- bytes = engineCanonicalizeXPathNodeSetInternal(input.getSubNode());
-@@ -173,6 +180,13 @@
- }
- }
- /**
-+ * @param _writer The _writer to set.
-+ */
-+ public void setWriter(OutputStream _writer) {
-+ this._writer = _writer;
-+ }
-+
-+ /**
- * Canonicalizes a Subtree node.
- *
- * @param rootNode
-@@ -187,11 +201,13 @@
- this._excludeNode = excludeNode;
- try {
- NameSpaceSymbTable ns=new NameSpaceSymbTable();
-+ int nodeLevel=NODE_BEFORE_DOCUMENT_ELEMENT;
- if (rootNode != null && rootNode.getNodeType() == Node.ELEMENT_NODE) {
- //Fills the nssymbtable with the definitions of the parent of the root subnode
- getParentNameSpaces((Element)rootNode,ns);
-+ nodeLevel=NODE_NOT_BEFORE_OR_AFTER_DOCUMENT_ELEMENT;
- }
-- this.canonicalizeSubTree(rootNode,ns,rootNode);
-+ this.canonicalizeSubTree(rootNode,ns,rootNode,nodeLevel);
- this._writer.close();
- if (this._writer instanceof ByteArrayOutputStream) {
- byte []result=((ByteArrayOutputStream)this._writer).toByteArray();
-@@ -199,6 +215,12 @@
- ((ByteArrayOutputStream)this._writer).reset();
- }
- return result;
-+ } else if (this._writer instanceof UnsyncByteArrayOutputStream) {
-+ byte []result=((UnsyncByteArrayOutputStream)this._writer).toByteArray();
-+ if (reset) {
-+ ((UnsyncByteArrayOutputStream)this._writer).reset();
-+ }
-+ return result;
- }
- return null;
-
-@@ -219,13 +241,17 @@
- * @throws CanonicalizationException
- * @throws IOException
- */
-- final void canonicalizeSubTree(Node currentNode, NameSpaceSymbTable ns,Node endnode)
-+ final void canonicalizeSubTree(Node currentNode, NameSpaceSymbTable ns,Node endnode,
-+ int documentLevel)
- throws CanonicalizationException, IOException {
-+ if (isVisibleInt(currentNode)==-1)
-+ return;
- Node sibling=null;
- Node parentNode=null;
- final OutputStream writer=this._writer;
- final Node excludeNode=this._excludeNode;
- final boolean includeComments=this._includeComments;
-+ Map cache=new HashMap();
- do {
- switch (currentNode.getNodeType()) {
-
-@@ -242,18 +268,17 @@
- case Node.DOCUMENT_FRAGMENT_NODE :
- case Node.DOCUMENT_NODE :
- ns.outputNodePush();
-- //currentNode = currentNode.getFirstChild();
- sibling= currentNode.getFirstChild();
- break;
-
- case Node.COMMENT_NODE :
- if (includeComments) {
-- outputCommentToWriter((Comment) currentNode, writer);
-+ outputCommentToWriter((Comment) currentNode, writer, documentLevel);
- }
- break;
-
- case Node.PROCESSING_INSTRUCTION_NODE :
-- outputPItoWriter((ProcessingInstruction) currentNode, writer);
-+ outputPItoWriter((ProcessingInstruction) currentNode, writer, documentLevel);
- break;
-
- case Node.TEXT_NODE :
-@@ -262,6 +287,7 @@
- break;
-
- case Node.ELEMENT_NODE :
-+ documentLevel=NODE_NOT_BEFORE_OR_AFTER_DOCUMENT_ELEMENT;
- if (currentNode==excludeNode) {
- break;
- }
-@@ -270,27 +296,27 @@
- ns.outputNodePush();
- writer.write('<');
- String name=currentElement.getTagName();
-- writeStringToUtf8(name,writer);
-+ UtfHelpper.writeByte(name,writer,cache);
-
- Iterator attrs = this.handleAttributesSubtree(currentElement,ns);
- if (attrs!=null) {
- //we output all Attrs which are available
- while (attrs.hasNext()) {
- Attr attr = (Attr) attrs.next();
-- outputAttrToWriter(attr.getNodeName(),attr.getNodeValue(), writer);
-+ outputAttrToWriter(attr.getNodeName(),attr.getNodeValue(), writer,cache);
- }
- }
- writer.write('>');
- sibling= currentNode.getFirstChild();
- if (sibling==null) {
- writer.write(_END_TAG);
-- writeStringToUtf8(name,writer);
-+ UtfHelpper.writeStringToUtf8(name,writer);
- writer.write('>');
- //We fineshed with this level, pop to the previous definitions.
- ns.outputNodePop();
-- if (parentNode != null) {
-+ if (parentNode != null) {
- sibling= currentNode.getNextSibling();
-- }
-+ }
- } else {
- parentNode=currentElement;
- }
-@@ -298,7 +324,7 @@
- }
- while (sibling==null && parentNode!=null) {
- writer.write(_END_TAG);
-- writeStringToUtf8(((Element)parentNode).getTagName(),writer);
-+ UtfHelpper.writeByte(((Element)parentNode).getTagName(),writer,cache);
- writer.write('>');
- //We fineshed with this level, pop to the previous definitions.
- ns.outputNodePop();
-@@ -307,6 +333,7 @@
- sibling=parentNode.getNextSibling();
- parentNode=parentNode.getParentNode();
- if (parentNode !=null && parentNode.getNodeType() != Node.ELEMENT_NODE) {
-+ documentLevel=NODE_AFTER_DOCUMENT_ELEMENT;
- parentNode=null;
- }
- }
-@@ -317,47 +344,8 @@
- } while(true);
- }
-
-- /**
-- * Checks whether a Comment or ProcessingInstruction is before or after the
-- * document element. This is needed for prepending or appending "\n"s.
-- *
-- * @param currentNode comment or pi to check
-- * @return NODE_BEFORE_DOCUMENT_ELEMENT, NODE_NOT_BEFORE_OR_AFTER_DOCUMENT_ELEMENT or NODE_AFTER_DOCUMENT_ELEMENT
-- * @see #NODE_BEFORE_DOCUMENT_ELEMENT
-- * @see #NODE_NOT_BEFORE_OR_AFTER_DOCUMENT_ELEMENT
-- * @see #NODE_AFTER_DOCUMENT_ELEMENT
-- */
-- final static int getPositionRelativeToDocumentElement(Node currentNode) {
-
-- if ((currentNode == null) ||
-- (currentNode.getParentNode().getNodeType() != Node.DOCUMENT_NODE) ) {
-- return CanonicalizerBase.NODE_NOT_BEFORE_OR_AFTER_DOCUMENT_ELEMENT;
-- }
-- Element documentElement = currentNode.getOwnerDocument().getDocumentElement();
-- if ( (documentElement == null) || (documentElement == currentNode) ){
-- return CanonicalizerBase.NODE_NOT_BEFORE_OR_AFTER_DOCUMENT_ELEMENT;
-- }
-
-- for (Node x = currentNode; x != null; x = x.getNextSibling()) {
-- if (x == documentElement) {
-- return CanonicalizerBase.NODE_BEFORE_DOCUMENT_ELEMENT;
-- }
-- }
--
-- return CanonicalizerBase.NODE_AFTER_DOCUMENT_ELEMENT;
-- }
--
-- /**
-- * Method engineCanonicalizeXPathNodeSet
-- * @inheritDoc
-- * @param xpathNodeSet
-- * @throws CanonicalizationException
-- */
-- public byte[] engineCanonicalizeXPathNodeSet(Set xpathNodeSet)
-- throws CanonicalizationException {
-- this._xpathNodeSet = xpathNodeSet;
-- return engineCanonicalizeXPathNodeSetInternal(XMLUtils.getOwnerDocument(this._xpathNodeSet));
-- }
- private byte[] engineCanonicalizeXPathNodeSetInternal(Node doc)
- throws CanonicalizationException {
-
-@@ -370,6 +358,12 @@
- ((ByteArrayOutputStream)this._writer).reset();
- }
- return sol;
-+ } else if (this._writer instanceof UnsyncByteArrayOutputStream) {
-+ byte []result=((UnsyncByteArrayOutputStream)this._writer).toByteArray();
-+ if (reset) {
-+ ((UnsyncByteArrayOutputStream)this._writer).reset();
-+ }
-+ return result;
- }
- return null;
- } catch (UnsupportedEncodingException ex) {
-@@ -390,11 +384,17 @@
- */
- final void canonicalizeXPathNodeSet(Node currentNode,Node endnode )
- throws CanonicalizationException, IOException {
-- boolean currentNodeIsVisible = false;
-- NameSpaceSymbTable ns=new NameSpaceSymbTable();
-+ if (isVisibleInt(currentNode)==-1)
-+ return;
-+ boolean currentNodeIsVisible = false;
-+ NameSpaceSymbTable ns=new NameSpaceSymbTable();
-+ if (currentNode != null && currentNode.getNodeType() == Node.ELEMENT_NODE)
-+ getParentNameSpaces((Element)currentNode,ns);
- Node sibling=null;
- Node parentNode=null;
- OutputStream writer=this._writer;
-+ int documentLevel=NODE_BEFORE_DOCUMENT_ELEMENT;
-+ Map cache=new HashMap();
- do {
- switch (currentNode.getNodeType()) {
-
-@@ -416,14 +416,14 @@
- break;
-
- case Node.COMMENT_NODE :
-- if (this._includeComments && isVisible(currentNode)) {
-- outputCommentToWriter((Comment) currentNode, writer);
-+ if (this._includeComments && (isVisibleDO(currentNode,ns.getLevel())==1)) {
-+ outputCommentToWriter((Comment) currentNode, writer, documentLevel);
- }
- break;
-
- case Node.PROCESSING_INSTRUCTION_NODE :
- if (isVisible(currentNode))
-- outputPItoWriter((ProcessingInstruction) currentNode, writer);
-+ outputPItoWriter((ProcessingInstruction) currentNode, writer, documentLevel);
- break;
-
- case Node.TEXT_NODE :
-@@ -436,12 +436,6 @@
- || (nextSibling.getNodeType()
- == Node.CDATA_SECTION_NODE));
- nextSibling = nextSibling.getNextSibling()) {
-- /* The XPath data model allows to select only the first of a
-- * sequence of mixed text and CDATA nodes. But we must output
-- * them all, so we must search:
-- *
-- * @see http://nagoya.apache.org/bugzilla/show_bug.cgi?id=6329
-- */
- outputTextToWriter(nextSibling.getNodeValue(), writer);
- currentNode=nextSibling;
- sibling=currentNode.getNextSibling();
-@@ -451,15 +445,21 @@
- break;
-
- case Node.ELEMENT_NODE :
-+ documentLevel=NODE_NOT_BEFORE_OR_AFTER_DOCUMENT_ELEMENT;
- Element currentElement = (Element) currentNode;
- //Add a level to the nssymbtable. So latter can be pop-back.
- String name=null;
-- currentNodeIsVisible=isVisible(currentNode);
-+ int i=isVisibleDO(currentNode,ns.getLevel());
-+ if (i==-1) {
-+ sibling= currentNode.getNextSibling();
-+ break;
-+ }
-+ currentNodeIsVisible=(i==1);
- if (currentNodeIsVisible) {
- ns.outputNodePush();
- writer.write('<');
- name=currentElement.getTagName();
-- writeStringToUtf8(name,writer);
-+ UtfHelpper.writeByte(name,writer,cache);
- } else {
- ns.push();
- }
-@@ -469,7 +469,7 @@
- //we output all Attrs which are available
- while (attrs.hasNext()) {
- Attr attr = (Attr) attrs.next();
-- outputAttrToWriter(attr.getNodeName(),attr.getNodeValue(), writer);
-+ outputAttrToWriter(attr.getNodeName(),attr.getNodeValue(), writer,cache);
- }
- }
- if (currentNodeIsVisible) {
-@@ -480,7 +480,7 @@
- if (sibling==null) {
- if (currentNodeIsVisible) {
- writer.write(_END_TAG);
-- writeStringToUtf8(name,writer);
-+ UtfHelpper.writeByte(name,writer,cache);
- writer.write('>');
- //We fineshed with this level, pop to the previous definitions.
- ns.outputNodePop();
-@@ -498,7 +498,7 @@
- while (sibling==null && parentNode!=null) {
- if (isVisible(parentNode)) {
- writer.write(_END_TAG);
-- writeStringToUtf8(((Element)parentNode).getTagName(),writer);
-+ UtfHelpper.writeByte(((Element)parentNode).getTagName(),writer,cache);
- writer.write('>');
- //We fineshed with this level, pop to the previous definitions.
- ns.outputNodePop();
-@@ -511,6 +511,7 @@
- parentNode=parentNode.getParentNode();
- if (parentNode != null && parentNode.getNodeType() != Node.ELEMENT_NODE) {
- parentNode=null;
-+ documentLevel=NODE_AFTER_DOCUMENT_ELEMENT;
- }
- }
- if (sibling==null)
-@@ -519,12 +520,38 @@
- sibling=currentNode.getNextSibling();
- } while(true);
- }
-+ int isVisibleDO(Node currentNode,int level) {
-+ if (nodeFilter!=null) {
-+ Iterator it=nodeFilter.iterator();
-+ while (it.hasNext()) {
-+ int i=((NodeFilter)it.next()).isNodeIncludeDO(currentNode,level);
-+ if (i!=1)
-+ return i;
-+ }
-+ }
-+ if ((this._xpathNodeSet!=null) && !this._xpathNodeSet.contains(currentNode))
-+ return 0;
-+ return 1;
-+ }
-+ int isVisibleInt(Node currentNode) {
-+ if (nodeFilter!=null) {
-+ Iterator it=nodeFilter.iterator();
-+ while (it.hasNext()) {
-+ int i=((NodeFilter)it.next()).isNodeInclude(currentNode);
-+ if (i!=1)
-+ return i;
-+ }
-+ }
-+ if ((this._xpathNodeSet!=null) && !this._xpathNodeSet.contains(currentNode))
-+ return 0;
-+ return 1;
-+ }
-
- boolean isVisible(Node currentNode) {
- if (nodeFilter!=null) {
- Iterator it=nodeFilter.iterator();
- while (it.hasNext()) {
-- if (!((NodeFilter)it.next()).isNodeInclude(currentNode))
-+ if (((NodeFilter)it.next()).isNodeInclude(currentNode)!=1)
- return false;
- }
- }
-@@ -533,13 +560,36 @@
- return true;
- }
-
-+ void handleParent(Element e,NameSpaceSymbTable ns) {
-+ if (!e.hasAttributes()) {
-+ return;
-+ }
-+ NamedNodeMap attrs = e.getAttributes();
-+ int attrsLength = attrs.getLength();
-+ for (int i = 0; i < attrsLength; i++) {
-+ Attr N = (Attr) attrs.item(i);
-+ if (Constants.NamespaceSpecNS!=N.getNamespaceURI()) {
-+ //Not a namespace definition, ignore.
-+ continue;
-+ }
-+
-+ String NName=N.getLocalName();
-+ String NValue=N.getNodeValue();
-+ if (XML.equals(NName)
-+ && Constants.XML_LANG_SPACE_SpecNS.equals(NValue)) {
-+ continue;
-+ }
-+ ns.addMapping(NName,NValue,N);
-+ }
-+ }
-+
- /**
- * Adds to ns the definitons from the parent elements of el
- * @param el
- * @param ns
- */
-- final static void getParentNameSpaces(Element el,NameSpaceSymbTable ns) {
-- List parents=new ArrayList();
-+ final void getParentNameSpaces(Element el,NameSpaceSymbTable ns) {
-+ List parents=new ArrayList(10);
- Node n1=el.getParentNode();
- if (n1 == null || n1.getNodeType() != Node.ELEMENT_NODE) {
- return;
-@@ -553,28 +603,9 @@
- //Visit them in reverse order.
- ListIterator it=parents.listIterator(parents.size());
- while (it.hasPrevious()) {
-- Element ele=(Element)it.previous();
-- if (!ele.hasAttributes()) {
-- continue;
-+ Element ele=(Element)it.previous();
-+ handleParent(ele, ns);
- }
-- NamedNodeMap attrs = ele.getAttributes();
-- int attrsLength = attrs.getLength();
-- for (int i = 0; i < attrsLength; i++) {
-- Attr N = (Attr) attrs.item(i);
-- if (!Constants.NamespaceSpecNS.equals(N.getNamespaceURI())) {
-- //Not a namespace definition, ignore.
-- continue;
-- }
--
-- String NName=N.getLocalName();
-- String NValue=N.getNodeValue();
-- if (XML.equals(NName)
-- && Constants.XML_LANG_SPACE_SpecNS.equals(NValue)) {
-- continue;
-- }
-- ns.addMapping(NName,NValue,N);
-- }
-- }
- Attr nsprefix;
- if (((nsprefix=ns.getMappingWithoutRendered("xmlns"))!=null)
- && "".equals(nsprefix.getValue())) {
-@@ -582,269 +613,6 @@
- }
- }
- /**
-- * Outputs an Attribute to the internal Writer.
-- *
-- * The string value of the node is modified by replacing
-- * <UL>
-- * <LI>all ampersands (&) with <CODE>&amp;amp;</CODE></LI>
-- * <LI>all open angle brackets (<) with <CODE>&amp;lt;</CODE></LI>
-- * <LI>all quotation mark characters with <CODE>&amp;quot;</CODE></LI>
-- * <LI>and the whitespace characters <CODE>#x9</CODE>, #xA, and #xD, with character
-- * references. The character references are written in uppercase
-- * hexadecimal with no leading zeroes (for example, <CODE>#xD</CODE> is represented
-- * by the character reference <CODE>&amp;#xD;</CODE>)</LI>
-- * </UL>
-- *
-- * @param name
-- * @param value
-- * @param writer
-- * @throws IOException
-- */
-- static final void outputAttrToWriter(final String name, final String value, final OutputStream writer) throws IOException {
-- writer.write(' ');
-- writeStringToUtf8(name,writer);
-- writer.write(equalsStr);
-- byte []toWrite;
-- final int length = value.length();
-- for (int i=0;i < length; i++) {
-- char c = value.charAt(i);
--
-- switch (c) {
--
-- case '&' :
-- toWrite=_AMP_;
-- //writer.write(_AMP_);
-- break;
--
-- case '<' :
-- toWrite=_LT_;
-- //writer.write(_LT_);
-- break;
--
-- case '"' :
-- toWrite=_QUOT_;
-- //writer.write(_QUOT_);
-- break;
--
-- case 0x09 : // '\t'
-- toWrite=__X9_;
-- //writer.write(__X9_);
-- break;
--
-- case 0x0A : // '\n'
-- toWrite=__XA_;
-- //writer.write(__XA_);
-- break;
--
-- case 0x0D : // '\r'
-- toWrite=__XD_;
-- //writer.write(__XD_);
-- break;
--
-- default :
-- writeCharToUtf8(c,writer);
-- //this._writer.write(c);
-- continue;
-- }
-- writer.write(toWrite);
-- }
--
-- writer.write('\"');
-- }
--
-- final static void writeCharToUtf8(final char c,final OutputStream out) throws IOException{
-- char ch;
-- if (/*(c >= 0x0001) &&*/ (c <= 0x007F)) {
-- out.write(c);
-- return;
-- }
-- int bias;
-- int write;
-- if (c > 0x07FF) {
-- ch=(char)(c>>>12);
-- write=0xE0;
-- if (ch>0) {
-- write |= ( ch & 0x0F);
-- }
-- out.write(write);
-- write=0x80;
-- bias=0x3F;
-- } else {
-- write=0xC0;
-- bias=0x1F;
-- }
-- ch=(char)(c>>>6);
-- if (ch>0) {
-- write|= (ch & bias);
-- }
-- out.write(write);
-- out.write(0x80 | ((c) & 0x3F));
--
-- }
--
-- final static void writeStringToUtf8(final String str,final OutputStream out) throws IOException{
-- final int length=str.length();
-- int i=0;
-- char c;
-- while (i<length) {
-- c=str.charAt(i++);
-- if (/*(c >= 0x0001) &&*/ (c <= 0x007F)) {
-- out.write(c);
-- continue;
-- }
-- char ch;
-- int bias;
-- int write;
-- if (c > 0x07FF) {
-- ch=(char)(c>>>12);
-- write=0xE0;
-- if (ch>0) {
-- write |= ( ch & 0x0F);
-- }
-- out.write(write);
-- write=0x80;
-- bias=0x3F;
-- } else {
-- write=0xC0;
-- bias=0x1F;
-- }
-- ch=(char)(c>>>6);
-- if (ch>0) {
-- write|= (ch & bias);
-- }
-- out.write(write);
-- out.write(0x80 | ((c) & 0x3F));
-- continue;
--
-- }
--
-- }
-- /**
-- * Outputs a PI to the internal Writer.
-- *
-- * @param currentPI
-- * @param writer where to write the things
-- * @throws IOException
-- */
-- static final void outputPItoWriter(ProcessingInstruction currentPI, OutputStream writer) throws IOException {
-- final int position = getPositionRelativeToDocumentElement(currentPI);
--
-- if (position == NODE_AFTER_DOCUMENT_ELEMENT) {
-- writer.write('\n');
-- }
-- writer.write(_BEGIN_PI);
--
-- final String target = currentPI.getTarget();
-- int length = target.length();
--
-- for (int i = 0; i < length; i++) {
-- char c=target.charAt(i);
-- if (c==0x0D) {
-- writer.write(__XD_);
-- } else {
-- writeCharToUtf8(c,writer);
-- }
-- }
--
-- final String data = currentPI.getData();
--
-- length = data.length();
--
-- if (length > 0) {
-- writer.write(' ');
--
-- for (int i = 0; i < length; i++) {
-- char c=data.charAt(i);
-- if (c==0x0D) {
-- writer.write(__XD_);
-- } else {
-- writeCharToUtf8(c,writer);
-- }
-- }
-- }
--
-- writer.write(_END_PI);
-- if (position == NODE_BEFORE_DOCUMENT_ELEMENT) {
-- writer.write('\n');
-- }
-- }
--
-- /**
-- * Method outputCommentToWriter
-- *
-- * @param currentComment
-- * @param writer writer where to write the things
-- * @throws IOException
-- */
-- static final void outputCommentToWriter(Comment currentComment, OutputStream writer) throws IOException {
-- final int position = getPositionRelativeToDocumentElement(currentComment);
-- if (position == NODE_AFTER_DOCUMENT_ELEMENT) {
-- writer.write('\n');
-- }
-- writer.write(_BEGIN_COMM);
--
-- final String data = currentComment.getData();
-- final int length = data.length();
--
-- for (int i = 0; i < length; i++) {
-- char c=data.charAt(i);
-- if (c==0x0D) {
-- writer.write(__XD_);
-- } else {
-- writeCharToUtf8(c,writer);
-- }
-- }
--
-- writer.write(_END_COMM);
-- if (position == NODE_BEFORE_DOCUMENT_ELEMENT) {
-- writer.write('\n');
-- }
-- }
--
-- /**
-- * Outputs a Text of CDATA section to the internal Writer.
-- *
-- * @param text
-- * @param writer writer where to write the things
-- * @throws IOException
-- */
-- static final void outputTextToWriter(final String text, final OutputStream writer) throws IOException {
-- final int length = text.length();
-- byte []toWrite;
-- for (int i = 0; i < length; i++) {
-- char c = text.charAt(i);
--
-- switch (c) {
--
-- case '&' :
-- toWrite=_AMP_;
-- //writer.write(_AMP_);
-- break;
--
-- case '<' :
-- toWrite=_LT_;
-- //writer.write(_LT_);
-- break;
--
-- case '>' :
-- toWrite=_GT_;
-- //writer.write(_GT_);
-- break;
--
-- case 0xD :
-- toWrite=__XD_;
-- //writer.write(__XD_);
-- break;
--
-- default :
-- writeCharToUtf8(c,writer);
-- continue;
-- }
-- writer.write(toWrite);
-- }
-- }
--
-- /**
- * Obtain the attributes to output for this node in XPathNodeSet c14n.
- *
- * @param E
-@@ -866,13 +634,207 @@
- abstract Iterator handleAttributesSubtree(Element E, NameSpaceSymbTable ns)
- throws CanonicalizationException;
-
-+ abstract void circumventBugIfNeeded(XMLSignatureInput input) throws CanonicalizationException, ParserConfigurationException, IOException, SAXException;
-
-+ /**
-+ * Outputs an Attribute to the internal Writer.
-+ *
-+ * The string value of the node is modified by replacing
-+ * <UL>
-+ * <LI>all ampersands (&) with <CODE>&amp;amp;</CODE></LI>
-+ * <LI>all open angle brackets (<) with <CODE>&amp;lt;</CODE></LI>
-+ * <LI>all quotation mark characters with <CODE>&amp;quot;</CODE></LI>
-+ * <LI>and the whitespace characters <CODE>#x9</CODE>, #xA, and #xD, with character
-+ * references. The character references are written in uppercase
-+ * hexadecimal with no leading zeroes (for example, <CODE>#xD</CODE> is represented
-+ * by the character reference <CODE>&amp;#xD;</CODE>)</LI>
-+ * </UL>
-+ *
-+ * @param name
-+ * @param value
-+ * @param writer
-+ * @throws IOException
-+ */
-+ static final void outputAttrToWriter(final String name, final String value, final OutputStream writer,
-+ final Map cache) throws IOException {
-+ writer.write(' ');
-+ UtfHelpper.writeByte(name,writer,cache);
-+ writer.write(equalsStr);
-+ byte []toWrite;
-+ final int length = value.length();
-+ int i=0;
-+ while (i < length) {
-+ char c = value.charAt(i++);
-
-- /**
-- * @param _writer The _writer to set.
-- */
-- public void setWriter(OutputStream _writer) {
-- this._writer = _writer;
-- }
-+ switch (c) {
-+
-+ case '&' :
-+ toWrite=_AMP_;
-+ break;
-+
-+ case '<' :
-+ toWrite=_LT_;
-+ break;
-+
-+ case '"' :
-+ toWrite=_QUOT_;
-+ break;
-+
-+ case 0x09 : // '\t'
-+ toWrite=__X9_;
-+ break;
-+
-+ case 0x0A : // '\n'
-+ toWrite=__XA_;
-+ break;
-+
-+ case 0x0D : // '\r'
-+ toWrite=__XD_;
-+ break;
-+
-+ default :
-+ if (c < 0x80 ) {
-+ writer.write(c);
-+ } else {
-+ UtfHelpper.writeCharToUtf8(c,writer);
-+ };
-+ continue;
-+ }
-+ writer.write(toWrite);
-+ }
-+
-+ writer.write('\"');
-+ }
-+
-+ /**
-+ * Outputs a PI to the internal Writer.
-+ *
-+ * @param currentPI
-+ * @param writer where to write the things
-+ * @throws IOException
-+ */
-+ static final void outputPItoWriter(ProcessingInstruction currentPI, OutputStream writer,int position) throws IOException {
-+
-+ if (position == NODE_AFTER_DOCUMENT_ELEMENT) {
-+ writer.write('\n');
-+ }
-+ writer.write(_BEGIN_PI);
-+
-+ final String target = currentPI.getTarget();
-+ int length = target.length();
-+
-+ for (int i = 0; i < length; i++) {
-+ char c=target.charAt(i);
-+ if (c==0x0D) {
-+ writer.write(__XD_);
-+ } else {
-+ if (c < 0x80) {
-+ writer.write(c);
-+ } else {
-+ UtfHelpper.writeCharToUtf8(c,writer);
-+ };
-+ }
-+ }
-+
-+ final String data = currentPI.getData();
-+
-+ length = data.length();
-+
-+ if (length > 0) {
-+ writer.write(' ');
-+
-+ for (int i = 0; i < length; i++) {
-+ char c=data.charAt(i);
-+ if (c==0x0D) {
-+ writer.write(__XD_);
-+ } else {
-+ UtfHelpper.writeCharToUtf8(c,writer);
-+ }
-+ }
-+ }
-+
-+ writer.write(_END_PI);
-+ if (position == NODE_BEFORE_DOCUMENT_ELEMENT) {
-+ writer.write('\n');
-+ }
-+ }
-+
-+ /**
-+ * Method outputCommentToWriter
-+ *
-+ * @param currentComment
-+ * @param writer writer where to write the things
-+ * @throws IOException
-+ */
-+ static final void outputCommentToWriter(Comment currentComment, OutputStream writer,int position) throws IOException {
-+ if (position == NODE_AFTER_DOCUMENT_ELEMENT) {
-+ writer.write('\n');
-+ }
-+ writer.write(_BEGIN_COMM);
-+
-+ final String data = currentComment.getData();
-+ final int length = data.length();
-+
-+ for (int i = 0; i < length; i++) {
-+ char c=data.charAt(i);
-+ if (c==0x0D) {
-+ writer.write(__XD_);
-+ } else {
-+ if (c < 0x80) {
-+ writer.write(c);
-+ } else {
-+ UtfHelpper.writeCharToUtf8(c,writer);
-+ };
-+ }
-+ }
-+
-+ writer.write(_END_COMM);
-+ if (position == NODE_BEFORE_DOCUMENT_ELEMENT) {
-+ writer.write('\n');
-+ }
-+ }
-+
-+ /**
-+ * Outputs a Text of CDATA section to the internal Writer.
-+ *
-+ * @param text
-+ * @param writer writer where to write the things
-+ * @throws IOException
-+ */
-+ static final void outputTextToWriter(final String text, final OutputStream writer) throws IOException {
-+ final int length = text.length();
-+ byte []toWrite;
-+ for (int i = 0; i < length; i++) {
-+ char c = text.charAt(i);
-+
-+ switch (c) {
-+
-+ case '&' :
-+ toWrite=_AMP_;
-+ break;
-+
-+ case '<' :
-+ toWrite=_LT_;
-+ break;
-+
-+ case '>' :
-+ toWrite=_GT_;
-+ break;
-+
-+ case 0xD :
-+ toWrite=__XD_;
-+ break;
-+
-+ default :
-+ if (c < 0x80) {
-+ writer.write(c);
-+ } else {
-+ UtfHelpper.writeCharToUtf8(c,writer);
-+ };
-+ continue;
-+ }
-+ writer.write(toWrite);
-+ }
-+ }
-
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/NameSpaceSymbTable.java b/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/NameSpaceSymbTable.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/NameSpaceSymbTable.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/NameSpaceSymbTable.java
-@@ -20,16 +20,10 @@
- */
- package com.sun.org.apache.xml.internal.security.c14n.implementations;
-
--import java.lang.reflect.Array;
--import java.util.AbstractList;
- import java.util.ArrayList;
--import java.util.Arrays;
- import java.util.Collection;
--import java.util.HashMap;
- import java.util.Iterator;
- import java.util.List;
--import java.util.Map;
--
-
-
- import org.w3c.dom.Attr;
-@@ -46,21 +40,26 @@
- public class NameSpaceSymbTable {
-
- /**The map betwen prefix-> entry table. */
-- SymbMap symb = new SymbMap();
-+ SymbMap symb;
- /**The level of nameSpaces (for Inclusive visibility).*/
- int nameSpaces=0;
- /**The stacks for removing the definitions when doing pop.*/
-- List level = new ArrayList();
-+ List level;
- boolean cloned=true;
- static final String XMLNS="xmlns";
-+ final static SymbMap initialMap=new SymbMap();
-+ static {
-+ NameSpaceSymbEntry ne=new NameSpaceSymbEntry("",null,true,XMLNS);
-+ ne.lastrendered="";
-+ initialMap.put(XMLNS,ne);
-+ }
- /**
- * Default constractor
- **/
- public NameSpaceSymbTable() {
-+ level = new ArrayList(10);
- //Insert the default binding for xmlns.
-- NameSpaceSymbEntry ne=new NameSpaceSymbEntry("",null,true);
-- ne.lastrendered="";
-- symb.put(XMLNS,ne);
-+ symb=(SymbMap) initialMap.clone();
- }
-
- /**
-@@ -75,8 +74,14 @@
- NameSpaceSymbEntry n=(NameSpaceSymbEntry)(it.next());
- //put them rendered?
- if ((!n.rendered) && (n.n!=null)) {
-+ n=(NameSpaceSymbEntry) n.clone();
-+ needsClone();
-+ symb.put(n.prefix,n);
-+ n.lastrendered=n.uri;
-+ n.rendered=true;
-+
- result.add(n.n);
-- n.rendered=true;
-+
- }
- }
- }
-@@ -104,10 +109,6 @@
- **/
- public void push() {
- //Put the number of namespace definitions in the stack.
-- /**if (cloned) {
-- Object ob[]= {symb,cloned ? symb : null};
-- level.add(ob);
-- } **/
- level.add(null);
- cloned=false;
- }
-@@ -124,7 +125,7 @@
- if (size==0) {
- cloned=false;
- } else
-- cloned=(level.get(size-1)!=symb);
-+ cloned=(level.get(size-1)!=symb);
- } else {
- cloned=false;
- }
-@@ -134,8 +135,7 @@
-
- final void needsClone() {
- if (!cloned) {
-- level.remove(level.size()-1);
-- level.add(symb);
-+ level.set(level.size()-1,symb);
- symb=(SymbMap) symb.clone();
- cloned=true;
- }
-@@ -200,7 +200,7 @@
- return false;
- }
- //Creates and entry in the table for this new definition.
-- NameSpaceSymbEntry ne=new NameSpaceSymbEntry(uri,n,false);
-+ NameSpaceSymbEntry ne=new NameSpaceSymbEntry(uri,n,false,prefix);
- needsClone();
- symb.put(prefix, ne);
- if (ob != null) {
-@@ -238,7 +238,7 @@
- return null;
- }
-
-- NameSpaceSymbEntry ne=new NameSpaceSymbEntry(uri,n,true);
-+ NameSpaceSymbEntry ne=new NameSpaceSymbEntry(uri,n,true,prefix);
- ne.lastrendered=uri;
- needsClone();
- symb.put(prefix, ne);
-@@ -251,53 +251,38 @@
- }
- return ne.n;
- }
-- /**
-- * Adds & gets(if needed) the attribute node that defines the binding for the prefix.
-- * Take on account if the rules of rendering in the inclusive c14n.
-- * For inclusive c14n.
-- * @param prefix the prefix to obtain the attribute.
-- * @param outputNode the container element is an output element.
-- * @param uri the Uri of the definition
-- * @param n the attribute that have the definition
-- * @return null if there is no need to render the prefix. Otherwise the node of
-- * definition.
-- **/
-- public Node addMappingAndRenderXNodeSet(String prefix, String uri,Attr n,boolean outputNode) {
-+
-+ public int getLevel() {
-+ // TODO Auto-generated method stub
-+ return level.size();
-+ }
-+
-+ public void removeMapping(String prefix) {
- NameSpaceSymbEntry ob = symb.get(prefix);
-- int visibleNameSpaces=nameSpaces;
-- if ((ob!=null) && uri.equals(ob.uri)) {
-- if (!ob.rendered) {
-- ob=(NameSpaceSymbEntry)ob.clone();
-- needsClone();
-- symb.put(prefix,ob);
-- ob.rendered=true;
-- ob.level=visibleNameSpaces;
-- return ob.n;
-- }
-- ob=(NameSpaceSymbEntry)ob.clone();
-+
-+ if (ob!=null) {
- needsClone();
-- symb.put(prefix,ob);
-- if (outputNode && (((visibleNameSpaces-ob.level)<2) || XMLNS.equals(prefix)) ) {
-- ob.level=visibleNameSpaces;
-- return null; //Already rendered, just return nulll
-- }
-- ob.level=visibleNameSpaces;
-- return ob.n;
-- }
-+ symb.put(prefix,null);
-+ }
-+ }
-
-- NameSpaceSymbEntry ne=new NameSpaceSymbEntry(uri,n,true);
-- ne.level=nameSpaces;
-- ne.rendered=true;
-- needsClone();
-- symb.put(prefix, ne);
-- if (ob != null) {
-- ne.lastrendered=ob.lastrendered;
-+ public void removeMappingIfNotRender(String prefix) {
-+ NameSpaceSymbEntry ob = symb.get(prefix);
-
-- if ((ob.lastrendered!=null)&& (ob.lastrendered.equals(uri))) {
-- ne.rendered=true;
-- }
-- }
-- return ne.n;
-+ if (ob!=null && !ob.rendered) {
-+ needsClone();
-+ symb.put(prefix,null);
-+ }
-+ }
-+
-+ public boolean removeMappingIfRender(String prefix) {
-+ NameSpaceSymbEntry ob = symb.get(prefix);
-+
-+ if (ob!=null && ob.rendered) {
-+ needsClone();
-+ symb.put(prefix,null);
-+ }
-+ return false;
- }
- }
-
-@@ -305,10 +290,11 @@
- * The internal structure of NameSpaceSymbTable.
- **/
- class NameSpaceSymbEntry implements Cloneable {
-- NameSpaceSymbEntry(String name,Attr n,boolean rendered) {
-+ NameSpaceSymbEntry(String name,Attr n,boolean rendered,String prefix) {
- this.uri=name;
- this.rendered=rendered;
- this.n=n;
-+ this.prefix=prefix;
- }
- /** @inheritDoc */
- public Object clone() {
-@@ -320,6 +306,7 @@
- }
- /** The level where the definition was rendered(Only for inclusive) */
- int level=0;
-+ String prefix;
- /**The URI that the prefix defines */
- String uri;
- /**The last output in the URI for this prefix (This for speed reason).*/
-@@ -330,53 +317,57 @@
- Attr n;
- };
-
--class SymbMap implements Cloneable{
-- int free=23;
-- NameSpaceSymbEntry[] entries=new NameSpaceSymbEntry[free];
-- String[] keys=new String[free];
--
-- void put(String key, NameSpaceSymbEntry value) {
-+class SymbMap implements Cloneable {
-+ int free=23;
-+ NameSpaceSymbEntry[] entries;
-+ String[] keys;
-+ SymbMap() {
-+ entries=new NameSpaceSymbEntry[free];
-+ keys=new String[free];
-+ }
-+ void put(String key, NameSpaceSymbEntry value) {
- int index = index(key);
-- Object oldKey = keys[index];
-- keys[index] = key;
-- entries[index] = value;
-+ Object oldKey = keys[index];
-+ keys[index] = key;
-+ entries[index] = value;
- if (oldKey==null || !oldKey.equals(key)) {
-- if (--free == 0) {
-- free=entries.length;
-- int newCapacity = free<<2;
-- rehash(newCapacity);
-- }
-+ if (--free == 0) {
-+ free=entries.length;
-+ int newCapacity = free<<2;
-+ rehash(newCapacity);
-+ }
- }
- }
-
- List entrySet() {
-- List a=new ArrayList();
-- for (int i=0;i<entries.length;i++) {
-- if ((entries[i]!=null) && !("".equals(entries[i]))) {
-- a.add(entries[i]);
-- }
-- }
-- return a;
-+ List a=new ArrayList();
-+ for (int i=0;i<entries.length;i++) {
-+ if ((entries[i]!=null) && !("".equals(entries[i].uri))) {
-+ a.add(entries[i]);
-+ }
- }
-+ return a;
-+ }
-
--
-- protected int index(Object obj) {
-+ protected int index(Object obj) {
- Object[] set = keys;
-- int length = set.length;
-- //abs of index
-+ int length = set.length;
-+ //abs of index
- int index = (obj.hashCode() & 0x7fffffff) % length;
- Object cur = set[index];
-
- if (cur == null || (cur.equals( obj))) {
-- return index;
-+ return index;
- }
-+ length=length-1;
- do {
-- index=index==length? 0:++index;
-- cur = set[index];
-+ index=index==length? 0:++index;
-+ cur = set[index];
- } while (cur != null && (!cur.equals(obj)));
- return index;
- }
-- /**
-+
-+ /**
- * rehashes the map to the new capacity.
- *
- * @param newCapacity an <code>int</code> value
-@@ -384,37 +375,38 @@
- protected void rehash(int newCapacity) {
- int oldCapacity = keys.length;
- String oldKeys[] = keys;
-- NameSpaceSymbEntry oldVals[] = entries;
-+ NameSpaceSymbEntry oldVals[] = entries;
-
-- keys = new String[newCapacity];
-- entries = new NameSpaceSymbEntry[newCapacity];
-+ keys = new String[newCapacity];
-+ entries = new NameSpaceSymbEntry[newCapacity];
-
- for (int i = oldCapacity; i-- > 0;) {
- if(oldKeys[i] != null) {
- String o = oldKeys[i];
- int index = index(o);
-- keys[index] = o;
-- entries[index] = oldVals[i];
-+ keys[index] = o;
-+ entries[index] = oldVals[i];
- }
- }
- }
-- NameSpaceSymbEntry get(String key) {
-- return entries[index(key)];
-- }
-- protected Object clone() {
-- // TODO Auto-generated method stub
-- try {
-- SymbMap copy=(SymbMap) super.clone();
-- copy.entries=new NameSpaceSymbEntry[entries.length];
-- System.arraycopy(entries,0,copy.entries,0,entries.length);
-- copy.keys=new String[keys.length];
-- System.arraycopy(keys,0,copy.keys,0,keys.length);
-
-- return copy;
-- } catch (CloneNotSupportedException e) {
-- // TODO Auto-generated catch block
-- e.printStackTrace();
-- }
-- return null;
-+ NameSpaceSymbEntry get(String key) {
-+ return entries[index(key)];
-+ }
-+
-+ protected Object clone() {
-+ try {
-+ SymbMap copy=(SymbMap) super.clone();
-+ copy.entries=new NameSpaceSymbEntry[entries.length];
-+ System.arraycopy(entries,0,copy.entries,0,entries.length);
-+ copy.keys=new String[keys.length];
-+ System.arraycopy(keys,0,copy.keys,0,keys.length);
-+
-+ return copy;
-+ } catch (CloneNotSupportedException e) {
-+ // TODO Auto-generated catch block
-+ e.printStackTrace();
- }
-+ return null;
-+ }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/UtfHelpper.java b/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/UtfHelpper.java
-new file mode 100644
---- /dev/null
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/UtfHelpper.java
-@@ -0,0 +1,155 @@
-+package com.sun.org.apache.xml.internal.security.c14n.implementations;
-+
-+import java.io.IOException;
-+import java.io.OutputStream;
-+import java.util.Map;
-+
-+public class UtfHelpper {
-+
-+ final static void writeByte(final String str,final OutputStream out,Map cache) throws IOException {
-+ byte []result=(byte[]) cache.get(str);
-+ if (result==null) {
-+ result=getStringInUtf8(str);
-+ cache.put(str,result);
-+ }
-+
-+ out.write(result);
-+
-+ }
-+
-+ final static void writeCharToUtf8(final char c,final OutputStream out) throws IOException{
-+ if (c < 0x80) {
-+ out.write(c);
-+ return;
-+ }
-+ if ((c >= 0xD800 && c <= 0xDBFF) || (c >= 0xDC00 && c <= 0xDFFF) ){
-+ //No Surrogates in sun java
-+ out.write(0x3f);
-+ return;
-+ }
-+ int bias;
-+ int write;
-+ char ch;
-+ if (c > 0x07FF) {
-+ ch=(char)(c>>>12);
-+ write=0xE0;
-+ if (ch>0) {
-+ write |= ( ch & 0x0F);
-+ }
-+ out.write(write);
-+ write=0x80;
-+ bias=0x3F;
-+ } else {
-+ write=0xC0;
-+ bias=0x1F;
-+ }
-+ ch=(char)(c>>>6);
-+ if (ch>0) {
-+ write|= (ch & bias);
-+ }
-+ out.write(write);
-+ out.write(0x80 | ((c) & 0x3F));
-+
-+ }
-+
-+ final static void writeStringToUtf8(final String str,final OutputStream out) throws IOException{
-+ final int length=str.length();
-+ int i=0;
-+ char c;
-+ while (i<length) {
-+ c=str.charAt(i++);
-+ if (c < 0x80) {
-+ out.write(c);
-+ continue;
-+ }
-+ if ((c >= 0xD800 && c <= 0xDBFF) || (c >= 0xDC00 && c <= 0xDFFF) ){
-+ //No Surrogates in sun java
-+ out.write(0x3f);
-+ continue;
-+ }
-+ char ch;
-+ int bias;
-+ int write;
-+ if (c > 0x07FF) {
-+ ch=(char)(c>>>12);
-+ write=0xE0;
-+ if (ch>0) {
-+ write |= ( ch & 0x0F);
-+ }
-+ out.write(write);
-+ write=0x80;
-+ bias=0x3F;
-+ } else {
-+ write=0xC0;
-+ bias=0x1F;
-+ }
-+ ch=(char)(c>>>6);
-+ if (ch>0) {
-+ write|= (ch & bias);
-+ }
-+ out.write(write);
-+ out.write(0x80 | ((c) & 0x3F));
-+
-+ }
-+
-+ }
-+ public final static byte[] getStringInUtf8(final String str) {
-+ final int length=str.length();
-+ boolean expanded=false;
-+ byte []result=new byte[length];
-+ int i=0;
-+ int out=0;
-+ char c;
-+ while (i<length) {
-+ c=str.charAt(i++);
-+ if ( c < 0x80 ) {
-+ result[out++]=(byte)c;
-+ continue;
-+ }
-+ if ((c >= 0xD800 && c <= 0xDBFF) || (c >= 0xDC00 && c <= 0xDFFF) ){
-+ //No Surrogates in sun java
-+ result[out++]=0x3f;
-+
-+ continue;
-+ }
-+ if (!expanded) {
-+ byte newResult[]=new byte[3*length];
-+ System.arraycopy(result, 0, newResult, 0, out);
-+ result=newResult;
-+ expanded=true;
-+ }
-+ char ch;
-+ int bias;
-+ byte write;
-+ if (c > 0x07FF) {
-+ ch=(char)(c>>>12);
-+ write=(byte)0xE0;
-+ if (ch>0) {
-+ write |= ( ch & 0x0F);
-+ }
-+ result[out++]=write;
-+ write=(byte)0x80;
-+ bias=0x3F;
-+ } else {
-+ write=(byte)0xC0;
-+ bias=0x1F;
-+ }
-+ ch=(char)(c>>>6);
-+ if (ch>0) {
-+ write|= (ch & bias);
-+ }
-+ result[out++]=write;
-+ result[out++]=(byte)(0x80 | ((c) & 0x3F));/**/
-+
-+ }
-+ if (expanded) {
-+ byte newResult[]=new byte[out];
-+ System.arraycopy(result, 0, newResult, 0, out);
-+ result=newResult;
-+ }
-+ return result;
-+ }
-+
-+
-+
-+}
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/encryption/XMLCipher.java b/src/share/classes/com/sun/org/apache/xml/internal/security/encryption/XMLCipher.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/encryption/XMLCipher.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/encryption/XMLCipher.java
-@@ -22,6 +22,7 @@
-
-
- import java.io.ByteArrayOutputStream;
-+import java.io.InputStream;
- import java.io.IOException;
- import java.io.StringReader;
- import java.io.UnsupportedEncodingException;
-@@ -30,6 +31,7 @@
- import java.security.Key;
- import java.security.NoSuchAlgorithmException;
- import java.security.NoSuchProviderException;
-+import java.util.HashMap;
- import java.util.Iterator;
- import java.util.LinkedList;
- import java.util.List;
-@@ -204,7 +206,7 @@
- * @since 1.0.
- */
- private XMLCipher() {
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Constructing XMLCipher...");
-+ logger.log(java.util.logging.Level.FINE, "Constructing XMLCipher...");
-
- _factory = new Factory();
- _serializer = new Serializer();
-@@ -266,7 +268,7 @@
- public static XMLCipher getInstance(String transformation) throws
- XMLEncryptionException {
- // sanity checks
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Getting XMLCipher...");
-+ logger.log(java.util.logging.Level.FINE, "Getting XMLCipher...");
- if (null == transformation)
- logger.log(java.util.logging.Level.SEVERE, "Transformation unexpectedly null...");
- if(!isValidEncryptionAlgorithm(transformation))
-@@ -294,7 +296,7 @@
-
- try {
- instance._contextCipher = Cipher.getInstance(jceAlgorithm);
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "cihper.algoritm = " +
-+ logger.log(java.util.logging.Level.FINE, "cihper.algoritm = " +
- instance._contextCipher.getAlgorithm());
- } catch (NoSuchAlgorithmException nsae) {
- throw new XMLEncryptionException("empty", nsae);
-@@ -305,49 +307,6 @@
- return (instance);
- }
-
-- public static XMLCipher getInstance(String transformation,Cipher cipher) throws
-- XMLEncryptionException {
-- // sanity checks
-- logger.log(java.util.logging.Level.FINE, "Getting XMLCipher...");
-- if (null == transformation)
-- logger.log(java.util.logging.Level.SEVERE, "Transformation unexpectedly null...");
-- if(!isValidEncryptionAlgorithm(transformation))
-- logger.log(java.util.logging.Level.WARNING, "Algorithm non-standard, expected one of " + ENC_ALGORITHMS);
--
-- XMLCipher instance = new XMLCipher();
--
-- instance._algorithm = transformation;
-- instance._key = null;
-- instance._kek = null;
--
--
-- /* Create a canonicaliser - used when serialising DOM to octets
-- * prior to encryption (and for the reverse) */
--
-- try {
-- instance._canon = Canonicalizer.getInstance
-- (Canonicalizer.ALGO_ID_C14N_WITH_COMMENTS);
--
-- } catch (InvalidCanonicalizerException ice) {
-- throw new XMLEncryptionException("empty", ice);
-- }
--
-- String jceAlgorithm = JCEMapper.translateURItoJCEID(transformation);
--
-- try {
-- instance._contextCipher = cipher;
-- //Cipher.getInstance(jceAlgorithm);
-- logger.log(java.util.logging.Level.FINE, "cihper.algoritm = " +
-- instance._contextCipher.getAlgorithm());
-- }catch(Exception ex) {
-- throw new XMLEncryptionException("empty", ex);
-- }
--
-- return (instance);
-- }
--
--
--
- /**
- * Returns an <code>XMLCipher</code> that implements the specified
- * transformation, operates on the specified context document and serializes
-@@ -380,6 +339,45 @@
- return instance;
- }
-
-+ public static XMLCipher getInstance(String transformation,Cipher cipher) throws XMLEncryptionException {
-+ // sanity checks
-+ logger.log(java.util.logging.Level.FINE, "Getting XMLCipher...");
-+ if (null == transformation)
-+ logger.log(java.util.logging.Level.SEVERE, "Transformation unexpectedly null...");
-+ if(!isValidEncryptionAlgorithm(transformation))
-+ logger.log(java.util.logging.Level.WARNING, "Algorithm non-standard, expected one of " + ENC_ALGORITHMS);
-+
-+ XMLCipher instance = new XMLCipher();
-+
-+ instance._algorithm = transformation;
-+ instance._key = null;
-+ instance._kek = null;
-+
-+
-+ /* Create a canonicaliser - used when serialising DOM to octets
-+ * prior to encryption (and for the reverse) */
-+
-+ try {
-+ instance._canon = Canonicalizer.getInstance
-+ (Canonicalizer.ALGO_ID_C14N_WITH_COMMENTS);
-+
-+ } catch (InvalidCanonicalizerException ice) {
-+ throw new XMLEncryptionException("empty", ice);
-+ }
-+
-+ String jceAlgorithm = JCEMapper.translateURItoJCEID(transformation);
-+
-+ try {
-+ instance._contextCipher = cipher;
-+ //Cipher.getInstance(jceAlgorithm);
-+ logger.log(java.util.logging.Level.FINE, "cihper.algoritm = " +
-+ instance._contextCipher.getAlgorithm());
-+ }catch(Exception ex) {
-+ throw new XMLEncryptionException("empty", ex);
-+ }
-+
-+ return (instance);
-+ }
-
- /**
- * Returns an <code>XMLCipher</code> that implements the specified
-@@ -396,7 +394,7 @@
- public static XMLCipher getProviderInstance(String transformation, String provider)
- throws XMLEncryptionException {
- // sanity checks
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Getting XMLCipher...");
-+ logger.log(java.util.logging.Level.FINE, "Getting XMLCipher...");
- if (null == transformation)
- logger.log(java.util.logging.Level.SEVERE, "Transformation unexpectedly null...");
- if(null == provider)
-@@ -429,9 +427,9 @@
-
- instance._contextCipher = Cipher.getInstance(jceAlgorithm, provider);
-
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "cipher._algorithm = " +
-+ logger.log(java.util.logging.Level.FINE, "cipher._algorithm = " +
- instance._contextCipher.getAlgorithm());
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "provider.name = " + provider);
-+ logger.log(java.util.logging.Level.FINE, "provider.name = " + provider);
- } catch (NoSuchAlgorithmException nsae) {
- throw new XMLEncryptionException("empty", nsae);
- } catch (NoSuchProviderException nspre) {
-@@ -490,7 +488,7 @@
- public static XMLCipher getInstance()
- throws XMLEncryptionException {
- // sanity checks
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Getting XMLCipher for no transformation...");
-+ logger.log(java.util.logging.Level.FINE, "Getting XMLCipher for no transformation...");
-
- XMLCipher instance = new XMLCipher();
-
-@@ -532,7 +530,7 @@
- throws XMLEncryptionException {
- // sanity checks
-
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Getting XMLCipher, provider but no transformation");
-+ logger.log(java.util.logging.Level.FINE, "Getting XMLCipher, provider but no transformation");
- if(null == provider)
- logger.log(java.util.logging.Level.SEVERE, "Provider unexpectedly null..");
- if("" == provider)
-@@ -578,7 +576,7 @@
- */
- public void init(int opmode, Key key) throws XMLEncryptionException {
- // sanity checks
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Initializing XMLCipher...");
-+ logger.log(java.util.logging.Level.FINE, "Initializing XMLCipher...");
-
- _ek = null;
- _ed = null;
-@@ -586,18 +584,18 @@
- switch (opmode) {
-
- case ENCRYPT_MODE :
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "opmode = ENCRYPT_MODE");
-+ logger.log(java.util.logging.Level.FINE, "opmode = ENCRYPT_MODE");
- _ed = createEncryptedData(CipherData.VALUE_TYPE, "NO VALUE YET");
- break;
- case DECRYPT_MODE :
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "opmode = DECRYPT_MODE");
-+ logger.log(java.util.logging.Level.FINE, "opmode = DECRYPT_MODE");
- break;
- case WRAP_MODE :
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "opmode = WRAP_MODE");
-+ logger.log(java.util.logging.Level.FINE, "opmode = WRAP_MODE");
- _ek = createEncryptedKey(CipherData.VALUE_TYPE, "NO VALUE YET");
- break;
- case UNWRAP_MODE :
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "opmode = UNWRAP_MODE");
-+ logger.log(java.util.logging.Level.FINE, "opmode = UNWRAP_MODE");
- break;
- default :
- logger.log(java.util.logging.Level.SEVERE, "Mode unexpectedly invalid");
-@@ -622,7 +620,7 @@
- public EncryptedData getEncryptedData() {
-
- // Sanity checks
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Returning EncryptedData");
-+ logger.log(java.util.logging.Level.FINE, "Returning EncryptedData");
- return _ed;
-
- }
-@@ -640,7 +638,7 @@
- public EncryptedKey getEncryptedKey() {
-
- // Sanity checks
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Returning EncryptedKey");
-+ logger.log(java.util.logging.Level.FINE, "Returning EncryptedKey");
- return _ek;
- }
-
-@@ -750,11 +748,11 @@
- */
-
- private Document encryptElement(Element element) throws Exception{
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Encrypting element...");
-+ logger.log(java.util.logging.Level.FINE, "Encrypting element...");
- if(null == element)
- logger.log(java.util.logging.Level.SEVERE, "Element unexpectedly null...");
- if(_cipherMode != ENCRYPT_MODE)
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "XMLCipher unexpectedly not in ENCRYPT_MODE...");
-+ logger.log(java.util.logging.Level.FINE, "XMLCipher unexpectedly not in ENCRYPT_MODE...");
-
- if (_algorithm == null) {
- throw new XMLEncryptionException("XMLCipher instance without transformation specified");
-@@ -785,11 +783,11 @@
- */
- private Document encryptElementContent(Element element) throws
- /* XMLEncryption */Exception {
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Encrypting element content...");
-+ logger.log(java.util.logging.Level.FINE, "Encrypting element content...");
- if(null == element)
- logger.log(java.util.logging.Level.SEVERE, "Element unexpectedly null...");
- if(_cipherMode != ENCRYPT_MODE)
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "XMLCipher unexpectedly not in ENCRYPT_MODE...");
-+ logger.log(java.util.logging.Level.FINE, "XMLCipher unexpectedly not in ENCRYPT_MODE...");
-
- if (_algorithm == null) {
- throw new XMLEncryptionException("XMLCipher instance without transformation specified");
-@@ -815,7 +813,7 @@
- */
- public Document doFinal(Document context, Document source) throws
- /* XMLEncryption */Exception {
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Processing source document...");
-+ logger.log(java.util.logging.Level.FINE, "Processing source document...");
- if(null == context)
- logger.log(java.util.logging.Level.SEVERE, "Context document unexpectedly null...");
- if(null == source)
-@@ -855,7 +853,7 @@
- */
- public Document doFinal(Document context, Element element) throws
- /* XMLEncryption */Exception {
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Processing source element...");
-+ logger.log(java.util.logging.Level.FINE, "Processing source element...");
- if(null == context)
- logger.log(java.util.logging.Level.SEVERE, "Context document unexpectedly null...");
- if(null == element)
-@@ -898,7 +896,7 @@
- */
- public Document doFinal(Document context, Element element, boolean content)
- throws /* XMLEncryption*/ Exception {
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Processing source element...");
-+ logger.log(java.util.logging.Level.FINE, "Processing source element...");
- if(null == context)
- logger.log(java.util.logging.Level.SEVERE, "Context document unexpectedly null...");
- if(null == element)
-@@ -954,6 +952,34 @@
-
- /**
- * Returns an <code>EncryptedData</code> interface. Use this operation if
-+ * you want to have full control over the serialization of the element
-+ * or element content.
-+ *
-+ * This does not change the source document in any way.
-+ *
-+ * @param context the context <code>Document</code>.
-+ * @param type a URI identifying type information about the plaintext form
-+ * of the encrypted content (may be <code>null</code>)
-+ * @param serializedData the serialized data
-+ * @return the <code>EncryptedData</code>
-+ * @throws Exception
-+ */
-+ public EncryptedData encryptData(Document context, String type,
-+ InputStream serializedData) throws Exception {
-+
-+ logger.log(java.util.logging.Level.FINE, "Encrypting element...");
-+ if (null == context)
-+ logger.log(java.util.logging.Level.SEVERE, "Context document unexpectedly null...");
-+ if (null == serializedData)
-+ logger.log(java.util.logging.Level.SEVERE, "Serialized data unexpectedly null...");
-+ if (_cipherMode != ENCRYPT_MODE)
-+ logger.log(java.util.logging.Level.FINE, "XMLCipher unexpectedly not in ENCRYPT_MODE...");
-+
-+ return encryptData(context, null, type, serializedData);
-+ }
-+
-+ /**
-+ * Returns an <code>EncryptedData</code> interface. Use this operation if
- * you want to have full control over the contents of the
- * <code>EncryptedData</code> structure.
- *
-@@ -966,160 +992,60 @@
- * @return the <code>EncryptedData</code>
- * @throws Exception
- */
-- public EncryptedData encryptData(Document context, Element element, boolean contentMode) throws
-- /* XMLEncryption */ Exception {
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Encrypting element...");
-- if (null == context)
-- logger.log(java.util.logging.Level.SEVERE, "Context document unexpectedly null...");
-- if (null == element)
-- logger.log(java.util.logging.Level.SEVERE, "Element unexpectedly null...");
-- if (_cipherMode != ENCRYPT_MODE)
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "XMLCipher unexpectedly not in ENCRYPT_MODE...");
--
-- _contextDocument = context;
--
-- if (_algorithm == null) {
-- throw new XMLEncryptionException("XMLCipher instance without transformation specified");
-- }
--
-- String serializedOctets = null;
-- if (contentMode) {
-- NodeList children = element.getChildNodes();
-- if ((null != children)) {
-- serializedOctets = _serializer.serialize(children);
-- } else {
-- Object exArgs[] = { "Element has no content." };
-- throw new XMLEncryptionException("empty", exArgs);
-- }
-- } else {
-- serializedOctets = _serializer.serialize(element);
-- }
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Serialized octets:\n" + serializedOctets);
--
-- byte[] encryptedBytes = null;
--
-- // Now create the working cipher if none was created already
-- Cipher c;
-- if (_contextCipher == null) {
-- String jceAlgorithm =
-- JCEMapper.translateURItoJCEID(_algorithm);
--
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "alg = " + jceAlgorithm);
--
-- try {
-- if (_requestedJCEProvider == null)
-- c = Cipher.getInstance(jceAlgorithm);
-- else
-- c = Cipher.getInstance(jceAlgorithm, _requestedJCEProvider);
-- } catch (NoSuchAlgorithmException nsae) {
-- throw new XMLEncryptionException("empty", nsae);
-- } catch (NoSuchProviderException nspre) {
-- throw new XMLEncryptionException("empty", nspre);
-- } catch (NoSuchPaddingException nspae) {
-- throw new XMLEncryptionException("empty", nspae);
-- }
-- }
-- else {
-- c = _contextCipher;
-- }
-- // Now perform the encryption
--
-- try {
-- // Should internally generate an IV
-- // todo - allow user to set an IV
-- c.init(_cipherMode, _key);
-- } catch (InvalidKeyException ike) {
-- throw new XMLEncryptionException("empty", ike);
-- }
--
-- try {
-- encryptedBytes =
-- c.doFinal(serializedOctets.getBytes("UTF-8"));
--
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Expected cipher.outputSize = " +
-- Integer.toString(c.getOutputSize(
-- serializedOctets.getBytes().length)));
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Actual cipher.outputSize = " +
-- Integer.toString(encryptedBytes.length));
-- } catch (IllegalStateException ise) {
-- throw new XMLEncryptionException("empty", ise);
-- } catch (IllegalBlockSizeException ibse) {
-- throw new XMLEncryptionException("empty", ibse);
-- } catch (BadPaddingException bpe) {
-- throw new XMLEncryptionException("empty", bpe);
-- } catch (UnsupportedEncodingException uee) {
-- throw new XMLEncryptionException("empty", uee);
-- }
--
-- // Now build up to a properly XML Encryption encoded octet stream
-- // IvParameterSpec iv;
--
-- byte[] iv = c.getIV();
-- byte[] finalEncryptedBytes =
-- new byte[iv.length + encryptedBytes.length];
-- System.arraycopy(iv, 0, finalEncryptedBytes, 0,
-- iv.length);
-- System.arraycopy(encryptedBytes, 0, finalEncryptedBytes,
-- iv.length,
-- encryptedBytes.length);
--
-- String base64EncodedEncryptedOctets = Base64.encode(finalEncryptedBytes);
--
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Encrypted octets:\n" + base64EncodedEncryptedOctets);
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Encrypted octets length = " +
-- base64EncodedEncryptedOctets.length());
--
-- try {
-- CipherData cd = _ed.getCipherData();
-- CipherValue cv = cd.getCipherValue();
-- // cv.setValue(base64EncodedEncryptedOctets.getBytes());
-- cv.setValue(base64EncodedEncryptedOctets);
--
-- if (contentMode) {
-- _ed.setType(
-- new URI(EncryptionConstants.TYPE_CONTENT).toString());
-- } else {
-- _ed.setType(
-- new URI(EncryptionConstants.TYPE_ELEMENT).toString());
-- }
-- EncryptionMethod method =
-- _factory.newEncryptionMethod(new URI(_algorithm).toString());
-- _ed.setEncryptionMethod(method);
-- } catch (URI.MalformedURIException mfue) {
-- throw new XMLEncryptionException("empty", mfue);
-- }
-- return (_ed);
-- }
--
--
--
-- public EncryptedData encryptData(Document context, byte [] serializedOctets, boolean contentMode) throws
-- /* XMLEncryption */ Exception {
-+ public EncryptedData encryptData(
-+ Document context, Element element, boolean contentMode)
-+ throws /* XMLEncryption */ Exception {
-+
- logger.log(java.util.logging.Level.FINE, "Encrypting element...");
- if (null == context)
- logger.log(java.util.logging.Level.SEVERE, "Context document unexpectedly null...");
-- if (null == serializedOctets)
-- logger.log(java.util.logging.Level.SEVERE, "Canonicalized Data is unexpectedly null...");
-+ if (null == element)
-+ logger.log(java.util.logging.Level.SEVERE, "Element unexpectedly null...");
- if (_cipherMode != ENCRYPT_MODE)
- logger.log(java.util.logging.Level.FINE, "XMLCipher unexpectedly not in ENCRYPT_MODE...");
-
-+ if (contentMode) {
-+ return encryptData
-+ (context, element, EncryptionConstants.TYPE_CONTENT, null);
-+ } else {
-+ return encryptData
-+ (context, element, EncryptionConstants.TYPE_ELEMENT, null);
-+ }
-+ }
-+
-+ private EncryptedData encryptData(
-+ Document context, Element element, String type,
-+ InputStream serializedData) throws /* XMLEncryption */ Exception {
-+
- _contextDocument = context;
-
- if (_algorithm == null) {
-- throw new XMLEncryptionException("XMLCipher instance without transformation specified");
-+ throw new XMLEncryptionException
-+ ("XMLCipher instance without transformation specified");
- }
-
--
-- logger.log(java.util.logging.Level.FINE, "Serialized octets:\n" + serializedOctets);
-+ String serializedOctets = null;
-+ if (serializedData == null) {
-+ if (type == EncryptionConstants.TYPE_CONTENT) {
-+ NodeList children = element.getChildNodes();
-+ if (null != children) {
-+ serializedOctets = _serializer.serialize(children);
-+ } else {
-+ Object exArgs[] = { "Element has no content." };
-+ throw new XMLEncryptionException("empty", exArgs);
-+ }
-+ } else {
-+ serializedOctets = _serializer.serialize(element);
-+ }
-+ logger.log(java.util.logging.Level.FINE, "Serialized octets:\n" + serializedOctets);
-+ }
-
- byte[] encryptedBytes = null;
-
- // Now create the working cipher if none was created already
- Cipher c;
- if (_contextCipher == null) {
-- String jceAlgorithm =
-- JCEMapper.translateURItoJCEID(_algorithm);
--
-+ String jceAlgorithm = JCEMapper.translateURItoJCEID(_algorithm);
- logger.log(java.util.logging.Level.FINE, "alg = " + jceAlgorithm);
-
- try {
-@@ -1148,41 +1074,47 @@
- }
-
- try {
-- encryptedBytes =
-- c.doFinal(serializedOctets);
--
-- logger.log(java.util.logging.Level.FINE, "Expected cipher.outputSize = " +
-+ if (serializedData != null) {
-+ int numBytes;
-+ byte[] buf = new byte[8192];
-+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
-+ while ((numBytes = serializedData.read(buf)) != -1) {
-+ byte[] data = c.update(buf, 0, numBytes);
-+ baos.write(data);
-+ }
-+ baos.write(c.doFinal());
-+ encryptedBytes = baos.toByteArray();
-+ } else {
-+ encryptedBytes = c.doFinal(serializedOctets.getBytes("UTF-8"));
-+ logger.log(java.util.logging.Level.FINE, "Expected cipher.outputSize = " +
- Integer.toString(c.getOutputSize(
-- serializedOctets.length)));
-+ serializedOctets.getBytes().length)));
-+ }
- logger.log(java.util.logging.Level.FINE, "Actual cipher.outputSize = " +
-- Integer.toString(encryptedBytes.length));
-+ Integer.toString(encryptedBytes.length));
- } catch (IllegalStateException ise) {
- throw new XMLEncryptionException("empty", ise);
- } catch (IllegalBlockSizeException ibse) {
- throw new XMLEncryptionException("empty", ibse);
- } catch (BadPaddingException bpe) {
- throw new XMLEncryptionException("empty", bpe);
-- } catch (Exception uee) {
-+ } catch (UnsupportedEncodingException uee) {
- throw new XMLEncryptionException("empty", uee);
- }
-
- // Now build up to a properly XML Encryption encoded octet stream
- // IvParameterSpec iv;
--
- byte[] iv = c.getIV();
- byte[] finalEncryptedBytes =
- new byte[iv.length + encryptedBytes.length];
-- System.arraycopy(iv, 0, finalEncryptedBytes, 0,
-- iv.length);
-- System.arraycopy(encryptedBytes, 0, finalEncryptedBytes,
-- iv.length,
-- encryptedBytes.length);
--
-+ System.arraycopy(iv, 0, finalEncryptedBytes, 0, iv.length);
-+ System.arraycopy(encryptedBytes, 0, finalEncryptedBytes, iv.length,
-+ encryptedBytes.length);
- String base64EncodedEncryptedOctets = Base64.encode(finalEncryptedBytes);
-
- logger.log(java.util.logging.Level.FINE, "Encrypted octets:\n" + base64EncodedEncryptedOctets);
- logger.log(java.util.logging.Level.FINE, "Encrypted octets length = " +
-- base64EncodedEncryptedOctets.length());
-+ base64EncodedEncryptedOctets.length());
-
- try {
- CipherData cd = _ed.getCipherData();
-@@ -1190,15 +1122,11 @@
- // cv.setValue(base64EncodedEncryptedOctets.getBytes());
- cv.setValue(base64EncodedEncryptedOctets);
-
-- if (contentMode) {
-- _ed.setType(
-- new URI(EncryptionConstants.TYPE_CONTENT).toString());
-- } else {
-- _ed.setType(
-- new URI(EncryptionConstants.TYPE_ELEMENT).toString());
-+ if (type != null) {
-+ _ed.setType(new URI(type).toString());
- }
- EncryptionMethod method =
-- _factory.newEncryptionMethod(new URI(_algorithm).toString());
-+ _factory.newEncryptionMethod(new URI(_algorithm).toString());
- _ed.setEncryptionMethod(method);
- } catch (URI.MalformedURIException mfue) {
- throw new XMLEncryptionException("empty", mfue);
-@@ -1206,7 +1134,6 @@
- return (_ed);
- }
-
--
- /**
- * Returns an <code>EncryptedData</code> interface. Use this operation if
- * you want to load an <code>EncryptedData</code> structure from a DOM
-@@ -1219,7 +1146,7 @@
- */
- public EncryptedData loadEncryptedData(Document context, Element element)
- throws XMLEncryptionException {
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Loading encrypted element...");
-+ logger.log(java.util.logging.Level.FINE, "Loading encrypted element...");
- if(null == context)
- logger.log(java.util.logging.Level.SEVERE, "Context document unexpectedly null...");
- if(null == element)
-@@ -1246,13 +1173,13 @@
-
- public EncryptedKey loadEncryptedKey(Document context, Element element)
- throws XMLEncryptionException {
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Loading encrypted key...");
-+ logger.log(java.util.logging.Level.FINE, "Loading encrypted key...");
- if(null == context)
- logger.log(java.util.logging.Level.SEVERE, "Context document unexpectedly null...");
- if(null == element)
- logger.log(java.util.logging.Level.SEVERE, "Element unexpectedly null...");
- if(_cipherMode != UNWRAP_MODE && _cipherMode != DECRYPT_MODE)
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "XMLCipher unexpectedly not in UNWRAP_MODE or DECRYPT_MODE...");
-+ logger.log(java.util.logging.Level.FINE, "XMLCipher unexpectedly not in UNWRAP_MODE or DECRYPT_MODE...");
-
- _contextDocument = context;
- _ek = _factory.newEncryptedKey(element);
-@@ -1290,12 +1217,12 @@
- public EncryptedKey encryptKey(Document doc, Key key) throws
- XMLEncryptionException {
-
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Encrypting key ...");
-+ logger.log(java.util.logging.Level.FINE, "Encrypting key ...");
-
- if(null == key)
- logger.log(java.util.logging.Level.SEVERE, "Key unexpectedly null...");
- if(_cipherMode != WRAP_MODE)
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "XMLCipher unexpectedly not in WRAP_MODE...");
-+ logger.log(java.util.logging.Level.FINE, "XMLCipher unexpectedly not in WRAP_MODE...");
-
- if (_algorithm == null) {
-
-@@ -1313,7 +1240,7 @@
- String jceAlgorithm =
- JCEMapper.translateURItoJCEID(_algorithm);
-
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "alg = " + jceAlgorithm);
-+ logger.log(java.util.logging.Level.FINE, "alg = " + jceAlgorithm);
-
- try {
- if (_requestedJCEProvider == null)
-@@ -1345,8 +1272,8 @@
-
- String base64EncodedEncryptedOctets = Base64.encode(encryptedBytes);
-
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Encrypted key octets:\n" + base64EncodedEncryptedOctets);
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Encrypted key octets length = " +
-+ logger.log(java.util.logging.Level.FINE, "Encrypted key octets:\n" + base64EncodedEncryptedOctets);
-+ logger.log(java.util.logging.Level.FINE, "Encrypted key octets length = " +
- base64EncodedEncryptedOctets.length());
-
- CipherValue cv = _ek.getCipherData().getCipherValue();
-@@ -1376,10 +1303,10 @@
- public Key decryptKey(EncryptedKey encryptedKey, String algorithm) throws
- XMLEncryptionException {
-
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Decrypting key from previously loaded EncryptedKey...");
-+ logger.log(java.util.logging.Level.FINE, "Decrypting key from previously loaded EncryptedKey...");
-
- if(_cipherMode != UNWRAP_MODE)
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "XMLCipher unexpectedly not in UNWRAP_MODE...");
-+ logger.log(java.util.logging.Level.FINE, "XMLCipher unexpectedly not in UNWRAP_MODE...");
-
- if (algorithm == null) {
- throw new XMLEncryptionException("Cannot decrypt a key without knowing the algorithm");
-@@ -1387,7 +1314,7 @@
-
- if (_key == null) {
-
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Trying to find a KEK via key resolvers");
-+ logger.log(java.util.logging.Level.FINE, "Trying to find a KEK via key resolvers");
-
- KeyInfo ki = encryptedKey.getKeyInfo();
- if (ki != null) {
-@@ -1418,7 +1345,7 @@
- JCEMapper.translateURItoJCEID(
- encryptedKey.getEncryptionMethod().getAlgorithm());
-
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "JCE Algorithm = " + jceAlgorithm);
-+ logger.log(java.util.logging.Level.FINE, "JCE Algorithm = " + jceAlgorithm);
-
- try {
- if (_requestedJCEProvider == null)
-@@ -1448,7 +1375,7 @@
- throw new XMLEncryptionException("empty", nsae);
- }
-
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Decryption of key type " + algorithm + " OK");
-+ logger.log(java.util.logging.Level.FINE, "Decryption of key type " + algorithm + " OK");
-
- return ret;
-
-@@ -1478,14 +1405,9 @@
- *
- * @param node the <code>Node</code> to clear.
- */
-- private void removeContent(Node node) {
-- NodeList list = node.getChildNodes();
-- if (list.getLength() > 0) {
-- Node n = list.item(0);
-- if (null != n) {
-- n.getParentNode().removeChild(n);
-- }
-- removeContent(node);
-+ private static void removeContent(Node node) {
-+ while (node.hasChildNodes()) {
-+ node.removeChild(node.getFirstChild());
- }
- }
-
-@@ -1499,7 +1421,7 @@
- private Document decryptElement(Element element) throws
- XMLEncryptionException {
-
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Decrypting element...");
-+ logger.log(java.util.logging.Level.FINE, "Decrypting element...");
-
- if(_cipherMode != DECRYPT_MODE)
- logger.log(java.util.logging.Level.SEVERE, "XMLCipher unexpectedly not in DECRYPT_MODE...");
-@@ -1512,7 +1434,7 @@
- }
-
-
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Decrypted octets:\n" + octets);
-+ logger.log(java.util.logging.Level.FINE, "Decrypted octets:\n" + octets);
-
- Node sourceParent = element.getParentNode();
-
-@@ -1573,7 +1495,7 @@
- public byte[] decryptToByteArray(Element element)
- throws XMLEncryptionException {
-
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Decrypting to ByteArray...");
-+ logger.log(java.util.logging.Level.FINE, "Decrypting to ByteArray...");
-
- if(_cipherMode != DECRYPT_MODE)
- logger.log(java.util.logging.Level.SEVERE, "XMLCipher unexpectedly not in DECRYPT_MODE...");
-@@ -2226,7 +2148,7 @@
- AgreementMethod newAgreementMethod(Element element) throws
- XMLEncryptionException {
- if (null == element) {
-- //complain
-+ throw new NullPointerException("element is null");
- }
-
- String algorithm = element.getAttributeNS(null,
-@@ -2292,7 +2214,7 @@
- CipherData newCipherData(Element element) throws
- XMLEncryptionException {
- if (null == element) {
-- // complain
-+ throw new NullPointerException("element is null");
- }
-
- int type = 0;
-@@ -2352,7 +2274,7 @@
- (Element) transformsElements.item(0);
-
- if (transformsElement != null) {
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Creating a DSIG based Transforms element");
-+ logger.log(java.util.logging.Level.FINE, "Creating a DSIG based Transforms element");
- try {
- result.setTransforms(new TransformsImpl(transformsElement));
- }
-@@ -2411,34 +2333,28 @@
- XMLEncryptionException {
- EncryptedData result = null;
-
-- NodeList dataElements = element.getElementsByTagNameNS(
-- EncryptionConstants.EncryptionSpecNS,
-- EncryptionConstants._TAG_CIPHERDATA);
--
-- // Need to get the last CipherData found, as earlier ones will
-- // be for elements in the KeyInfo lists
-+ NodeList dataElements = element.getElementsByTagNameNS(
-+ EncryptionConstants.EncryptionSpecNS,
-+ EncryptionConstants._TAG_CIPHERDATA);
-+
-+ // Need to get the last CipherData found, as earlier ones will
-+ // be for elements in the KeyInfo lists
-
- Element dataElement =
-- (Element) dataElements.item(dataElements.getLength() - 1);
-+ (Element) dataElements.item(dataElements.getLength() - 1);
-
- CipherData data = newCipherData(dataElement);
-
- result = newEncryptedData(data);
-
-- try {
-- result.setId(element.getAttributeNS(
-- null, EncryptionConstants._ATT_ID));
-- result.setType(new URI(
-- element.getAttributeNS(
-- null, EncryptionConstants._ATT_TYPE)).toString());
-- result.setMimeType(element.getAttributeNS(
-- null, EncryptionConstants._ATT_MIMETYPE));
-- result.setEncoding(new URI(
-- element.getAttributeNS(
-- null, Constants._ATT_ENCODING)).toString());
-- } catch (URI.MalformedURIException mfue) {
-- // do nothing
-- }
-+ result.setId(element.getAttributeNS(
-+ null, EncryptionConstants._ATT_ID));
-+ result.setType(
-+ element.getAttributeNS(null, EncryptionConstants._ATT_TYPE));
-+ result.setMimeType(element.getAttributeNS(
-+ null, EncryptionConstants._ATT_MIMETYPE));
-+ result.setEncoding(
-+ element.getAttributeNS(null, Constants._ATT_ENCODING));
-
- Element encryptionMethodElement =
- (Element) element.getElementsByTagNameNS(
-@@ -2450,18 +2366,18 @@
- }
-
- // BFL 16/7/03 - simple implementation
-- // TODO: Work out how to handle relative URI
-+ // TODO: Work out how to handle relative URI
-
- Element keyInfoElement =
- (Element) element.getElementsByTagNameNS(
- Constants.SignatureSpecNS, Constants._TAG_KEYINFO).item(0);
- if (null != keyInfoElement) {
-- try {
-- result.setKeyInfo(new KeyInfo(keyInfoElement, null));
-- } catch (XMLSecurityException xse) {
-- throw new XMLEncryptionException("Error loading Key Info",
-- xse);
-- }
-+ try {
-+ result.setKeyInfo(new KeyInfo(keyInfoElement, null));
-+ } catch (XMLSecurityException xse) {
-+ throw new XMLEncryptionException("Error loading Key Info",
-+ xse);
-+ }
- }
-
- // TODO: Implement
-@@ -2511,31 +2427,25 @@
- EncryptedKey newEncryptedKey(Element element) throws
- XMLEncryptionException {
- EncryptedKey result = null;
-- NodeList dataElements = element.getElementsByTagNameNS(
-- EncryptionConstants.EncryptionSpecNS,
-- EncryptionConstants._TAG_CIPHERDATA);
-+ NodeList dataElements = element.getElementsByTagNameNS(
-+ EncryptionConstants.EncryptionSpecNS,
-+ EncryptionConstants._TAG_CIPHERDATA);
- Element dataElement =
-- (Element) dataElements.item(dataElements.getLength() - 1);
-+ (Element) dataElements.item(dataElements.getLength() - 1);
-
- CipherData data = newCipherData(dataElement);
- result = newEncryptedKey(data);
-
-- try {
-- result.setId(element.getAttributeNS(
-- null, EncryptionConstants._ATT_ID));
-- result.setType(new URI(
-- element.getAttributeNS(
-- null, EncryptionConstants._ATT_TYPE)).toString());
-- result.setMimeType(element.getAttributeNS(
-- null, EncryptionConstants._ATT_MIMETYPE));
-- result.setEncoding(new URI(
-- element.getAttributeNS(
-- null, Constants._ATT_ENCODING)).toString());
-- result.setRecipient(element.getAttributeNS(
-- null, EncryptionConstants._ATT_RECIPIENT));
-- } catch (URI.MalformedURIException mfue) {
-- // do nothing
-- }
-+ result.setId(element.getAttributeNS(
-+ null, EncryptionConstants._ATT_ID));
-+ result.setType(
-+ element.getAttributeNS(null, EncryptionConstants._ATT_TYPE));
-+ result.setMimeType(element.getAttributeNS(
-+ null, EncryptionConstants._ATT_MIMETYPE));
-+ result.setEncoding(
-+ element.getAttributeNS(null, Constants._ATT_ENCODING));
-+ result.setRecipient(element.getAttributeNS(
-+ null, EncryptionConstants._ATT_RECIPIENT));
-
- Element encryptionMethodElement =
- (Element) element.getElementsByTagNameNS(
-@@ -2550,12 +2460,12 @@
- (Element) element.getElementsByTagNameNS(
- Constants.SignatureSpecNS, Constants._TAG_KEYINFO).item(0);
- if (null != keyInfoElement) {
-- try {
-- result.setKeyInfo(new KeyInfo(keyInfoElement, null));
-- } catch (XMLSecurityException xse) {
-- throw new XMLEncryptionException("Error loading Key Info",
-- xse);
-- }
-+ try {
-+ result.setKeyInfo(new KeyInfo(keyInfoElement, null));
-+ } catch (XMLSecurityException xse) {
-+ throw new XMLEncryptionException
-+ ("Error loading Key Info", xse);
-+ }
- }
-
- // TODO: Implement
-@@ -2581,7 +2491,8 @@
- EncryptionConstants.EncryptionSpecNS,
- EncryptionConstants._TAG_CARRIEDKEYNAME).item(0);
- if (null != carriedNameElement) {
-- result.setCarriedName(carriedNameElement.getNodeValue());
-+ result.setCarriedName
-+ (carriedNameElement.getFirstChild().getNodeValue());
- }
-
- return (result);
-@@ -2680,13 +2591,8 @@
- EncryptionProperty newEncryptionProperty(Element element) {
- EncryptionProperty result = newEncryptionProperty();
-
-- try {
-- result.setTarget(new URI(
-- element.getAttributeNS(
-- null, EncryptionConstants._ATT_TARGET)).toString());
-- } catch (URI.MalformedURIException mfue) {
-- // do nothing
-- }
-+ result.setTarget(
-+ element.getAttributeNS(null, EncryptionConstants._ATT_TARGET));
- result.setId(element.getAttributeNS(
- null, EncryptionConstants._ATT_ID));
- // TODO: Make this lot work...
-@@ -2943,7 +2849,7 @@
- } catch (URI.MalformedURIException mfue) {
- //complain
- }
-- algorithm = tmpAlgorithm.toString();
-+ algorithmURI = tmpAlgorithm.toString();
- }
-
- // <element name="AgreementMethod" type="xenc:AgreementMethodType"/>
-@@ -3183,7 +3089,7 @@
- _contextDocument, EncryptionConstants.EncryptionSpecNS,
- EncryptionConstants._TAG_CIPHERVALUE);
- result.appendChild(_contextDocument.createTextNode(
-- new String(cipherValue)));
-+ cipherValue));
-
- return (result);
- }
-@@ -3247,8 +3153,7 @@
- }
- if (null != super.getType()) {
- result.setAttributeNS(
-- null, EncryptionConstants._ATT_TYPE,
-- super.getType().toString());
-+ null, EncryptionConstants._ATT_TYPE, super.getType());
- }
- if (null != super.getMimeType()) {
- result.setAttributeNS(
-@@ -3258,7 +3163,7 @@
- if (null != super.getEncoding()) {
- result.setAttributeNS(
- null, EncryptionConstants._ATT_ENCODING,
-- super.getEncoding().toString());
-+ super.getEncoding());
- }
- if (null != super.getEncryptionMethod()) {
- result.appendChild(((EncryptionMethodImpl)
-@@ -3383,8 +3288,7 @@
- }
- if (null != super.getType()) {
- result.setAttributeNS(
-- null, EncryptionConstants._ATT_TYPE,
-- super.getType().toString());
-+ null, EncryptionConstants._ATT_TYPE, super.getType());
- }
- if (null != super.getMimeType()) {
- result.setAttributeNS(null,
-@@ -3392,7 +3296,7 @@
- }
- if (null != super.getEncoding()) {
- result.setAttributeNS(null, Constants._ATT_ENCODING,
-- super.getEncoding().toString());
-+ super.getEncoding());
- }
- if (null != getRecipient()) {
- result.setAttributeNS(null,
-@@ -3468,13 +3372,17 @@
- * @param type
- */
- public void setType(String type) {
-- URI tmpType = null;
-- try {
-- tmpType = new URI(type);
-- } catch (URI.MalformedURIException mfue) {
-- // complain
-+ if (type == null || type.length() == 0) {
-+ this.type = null;
-+ } else {
-+ URI tmpType = null;
-+ try {
-+ tmpType = new URI(type);
-+ } catch (URI.MalformedURIException mfue) {
-+ // complain
-+ }
-+ this.type = tmpType.toString();
- }
-- this.type = tmpType.toString();
- }
- /**
- *
-@@ -3502,13 +3410,17 @@
- * @param encoding
- */
- public void setEncoding(String encoding) {
-- URI tmpEncoding = null;
-- try {
-- tmpEncoding = new URI(encoding);
-- } catch (URI.MalformedURIException mfue) {
-- // complain
-+ if (encoding == null || encoding.length() == 0) {
-+ this.encoding = null;
-+ } else {
-+ URI tmpEncoding = null;
-+ try {
-+ tmpEncoding = new URI(encoding);
-+ } catch (URI.MalformedURIException mfue) {
-+ // complain
-+ }
-+ this.encoding = tmpEncoding.toString();
- }
-- this.encoding = tmpEncoding.toString();
- }
- /**
- *
-@@ -3635,7 +3547,7 @@
- _contextDocument, EncryptionConstants.EncryptionSpecNS,
- EncryptionConstants._TAG_ENCRYPTIONMETHOD);
- result.setAttributeNS(null, EncryptionConstants._ATT_ALGORITHM,
-- algorithm.toString());
-+ algorithm);
- if (keySize > 0) {
- result.appendChild(
- ElementProxy.createElementForFamily(_contextDocument,
-@@ -3735,8 +3647,7 @@
- private class EncryptionPropertyImpl implements EncryptionProperty {
- private String target = null;
- private String id = null;
-- private String attributeName = null;
-- private String attributeValue = null;
-+ private HashMap attributeMap = new HashMap();
- private List encryptionInformation = null;
-
- /**
-@@ -3752,13 +3663,24 @@
- }
- /** @inheritDoc */
- public void setTarget(String target) {
-- URI tmpTarget = null;
-- try {
-- tmpTarget = new URI(target);
-- } catch (URI.MalformedURIException mfue) {
-- // complain
-+ if (target == null || target.length() == 0) {
-+ this.target = null;
-+ } else if (target.startsWith("#")) {
-+ /*
-+ * This is a same document URI reference. Do not parse,
-+ * because com.sun.org.apache.xml.internal.utils.URI considers this an
-+ * illegal URI because it has no scheme.
-+ */
-+ this.target = target;
-+ } else {
-+ URI tmpTarget = null;
-+ try {
-+ tmpTarget = new URI(target);
-+ } catch (URI.MalformedURIException mfue) {
-+ // complain
-+ }
-+ this.target = tmpTarget.toString();
- }
-- this.target = tmpTarget.toString();
- }
- /** @inheritDoc */
- public String getId() {
-@@ -3770,12 +3692,11 @@
- }
- /** @inheritDoc */
- public String getAttribute(String attribute) {
-- return (attributeValue);
-+ return (String) attributeMap.get(attribute);
- }
- /** @inheritDoc */
- public void setAttribute(String attribute, String value) {
-- attributeName = attribute;
-- attributeValue = value;
-+ attributeMap.put(attribute, value);
- }
- /** @inheritDoc */
- public Iterator getEncryptionInformation() {
-@@ -3805,7 +3726,7 @@
- EncryptionConstants._TAG_ENCRYPTIONPROPERTY);
- if (null != target) {
- result.setAttributeNS(null, EncryptionConstants._ATT_TARGET,
-- target.toString());
-+ target);
- }
- if (null != id) {
- result.setAttributeNS(null, EncryptionConstants._ATT_ID,
-@@ -3839,7 +3760,13 @@
- * @param doc
- */
- public TransformsImpl(Document doc) {
-- super(doc);
-+ if (doc == null) {
-+ throw new RuntimeException("Document is null");
-+ }
-+
-+ this._doc = doc;
-+ this._constructionElement = createElementForFamilyLocal(this._doc,
-+ this.getBaseNamespace(), this.getBaseLocalName());
- }
- /**
- *
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/encryption/XMLCipherInput.java b/src/share/classes/com/sun/org/apache/xml/internal/security/encryption/XMLCipherInput.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/encryption/XMLCipherInput.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/encryption/XMLCipherInput.java
-@@ -108,84 +108,78 @@
- return null;
- }
-
-- /**
-- * Internal method to get bytes in decryption mode
-+ /**
-+ * Internal method to get bytes in decryption mode
- * @return the decripted bytes
- * @throws XMLEncryptionException
-- */
-+ */
-+ private byte[] getDecryptBytes() throws XMLEncryptionException {
-
-- private byte[] getDecryptBytes() throws XMLEncryptionException {
--
-- String base64EncodedEncryptedOctets = null;
-+ String base64EncodedEncryptedOctets = null;
-
- if (_cipherData.getDataType() == CipherData.REFERENCE_TYPE) {
-- // Fun time!
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Found a reference type CipherData");
-- CipherReference cr = _cipherData.getCipherReference();
-+ // Fun time!
-+ logger.log(java.util.logging.Level.FINE, "Found a reference type CipherData");
-+ CipherReference cr = _cipherData.getCipherReference();
-
-- // Need to wrap the uri in an Attribute node so that we can
-- // Pass to the resource resolvers
-+ // Need to wrap the uri in an Attribute node so that we can
-+ // Pass to the resource resolvers
-
-- Attr uriAttr = cr.getURIAsAttr();
-- XMLSignatureInput input = null;
-+ Attr uriAttr = cr.getURIAsAttr();
-+ XMLSignatureInput input = null;
-
-- try {
-- ResourceResolver resolver =
-- ResourceResolver.getInstance(uriAttr, null);
-- input = resolver.resolve(uriAttr, null);
-- } catch (ResourceResolverException ex) {
-- throw new XMLEncryptionException("empty", ex);
-- }
-+ try {
-+ ResourceResolver resolver =
-+ ResourceResolver.getInstance(uriAttr, null);
-+ input = resolver.resolve(uriAttr, null);
-+ } catch (ResourceResolverException ex) {
-+ throw new XMLEncryptionException("empty", ex);
-+ }
-
-- if (input != null) {
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Managed to resolve URI \"" + cr.getURI() + "\"");
-- }
-- else {
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Failed to resolve URI \"" + cr.getURI() + "\"");
-- }
-+ if (input != null) {
-+ logger.log(java.util.logging.Level.FINE, "Managed to resolve URI \"" + cr.getURI() + "\"");
-+ } else {
-+ logger.log(java.util.logging.Level.FINE, "Failed to resolve URI \"" + cr.getURI() + "\"");
-+ }
-
-- // Lets see if there are any transforms
-- Transforms transforms = cr.getTransforms();
-- if (transforms != null) {
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Have transforms in cipher reference");
-- try {
-- com.sun.org.apache.xml.internal.security.transforms.Transforms dsTransforms =
-- transforms.getDSTransforms();
-- input = dsTransforms.performTransforms(input);
-- } catch (TransformationException ex) {
-- throw new XMLEncryptionException("empty", ex);
-- }
-- }
-+ // Lets see if there are any transforms
-+ Transforms transforms = cr.getTransforms();
-+ if (transforms != null) {
-+ logger.log(java.util.logging.Level.FINE, "Have transforms in cipher reference");
-+ try {
-+ com.sun.org.apache.xml.internal.security.transforms.Transforms dsTransforms =
-+ transforms.getDSTransforms();
-+ input = dsTransforms.performTransforms(input);
-+ } catch (TransformationException ex) {
-+ throw new XMLEncryptionException("empty", ex);
-+ }
-+ }
-
-- try {
-- return input.getBytes();
-- }
-- catch (IOException ex) {
-- throw new XMLEncryptionException("empty", ex);
-- } catch (CanonicalizationException ex) {
-- throw new XMLEncryptionException("empty", ex);
-- }
-+ try {
-+ return input.getBytes();
-+ } catch (IOException ex) {
-+ throw new XMLEncryptionException("empty", ex);
-+ } catch (CanonicalizationException ex) {
-+ throw new XMLEncryptionException("empty", ex);
-+ }
-
-- // retrieve the cipher text
-+ // retrieve the cipher text
- } else if (_cipherData.getDataType() == CipherData.VALUE_TYPE) {
-- CipherValue cv = _cipherData.getCipherValue();
-- base64EncodedEncryptedOctets = new String(cv.getValue());
-+ base64EncodedEncryptedOctets =
-+ _cipherData.getCipherValue().getValue();
- } else {
-- throw new XMLEncryptionException("CipherData.getDataType() returned unexpected value");
-- }
-+ throw new XMLEncryptionException("CipherData.getDataType() returned unexpected value");
-+ }
-
-- if (logger.isLoggable(java.util.logging.Level.FINE)) logger.log(java.util.logging.Level.FINE, "Encrypted octets:\n" + base64EncodedEncryptedOctets);
-+ logger.log(java.util.logging.Level.FINE, "Encrypted octets:\n" + base64EncodedEncryptedOctets);
-
- byte[] encryptedBytes = null;
--
- try {
-- encryptedBytes = Base64.decode(base64EncodedEncryptedOctets);
-+ encryptedBytes = Base64.decode(base64EncodedEncryptedOctets);
- } catch (Base64DecodingException bde) {
- throw new XMLEncryptionException("empty", bde);
- }
-
-- return (encryptedBytes);
--
-- }
--
-+ return (encryptedBytes);
-+ }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/ContentHandlerAlreadyRegisteredException.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/ContentHandlerAlreadyRegisteredException.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/ContentHandlerAlreadyRegisteredException.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/ContentHandlerAlreadyRegisteredException.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -28,7 +27,7 @@
-
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class ContentHandlerAlreadyRegisteredException
- extends XMLSecurityException {
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/KeyInfo.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/KeyInfo.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/KeyInfo.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/KeyInfo.java
-@@ -25,6 +25,8 @@
- import java.security.PublicKey;
- import java.security.cert.X509Certificate;
- import java.util.ArrayList;
-+import java.util.Collections;
-+import java.util.Iterator;
- import java.util.List;
-
- import javax.crypto.SecretKey;
-@@ -88,15 +90,22 @@
- * The <CODE>containsXXX()</CODE> methods return <I>whether</I> the KeyInfo
- * contains the corresponding type.
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class KeyInfo extends SignatureElementProxy {
-
- /** {@link java.util.logging} logging facility */
- static java.util.logging.Logger log =
- java.util.logging.Logger.getLogger(KeyInfo.class.getName());
-+ List x509Datas=null;
-+ List encryptedKeys=null;
-
--
-+ static final List nullList;
-+ static {
-+ List list = new ArrayList();
-+ list.add(null);
-+ nullList = Collections.unmodifiableList(list);
-+ }
-
- /**
- * Constructor KeyInfo
-@@ -108,7 +117,6 @@
-
- XMLUtils.addReturnToElement(this._constructionElement);
-
--
- }
-
- /**
-@@ -119,8 +127,8 @@
- * @throws XMLSecurityException
- */
- public KeyInfo(Element element, String BaseURI) throws XMLSecurityException {
--
- super(element, BaseURI);
-+ // _storageResolvers.add(null);
-
- }
-
-@@ -131,7 +139,7 @@
- */
- public void setId(String Id) {
-
-- if ((this._state == MODE_SIGN) && (Id != null)) {
-+ if ((Id != null)) {
- this._constructionElement.setAttributeNS(null, Constants._ATT_ID, Id);
- IdResolver.registerElementById(this._constructionElement, Id);
- }
-@@ -162,10 +170,8 @@
- */
- public void add(KeyName keyname) {
-
-- if (this._state == MODE_SIGN) {
- this._constructionElement.appendChild(keyname.getElement());
- XMLUtils.addReturnToElement(this._constructionElement);
-- }
- }
-
- /**
-@@ -219,11 +225,8 @@
- * @param keyvalue
- */
- public void add(KeyValue keyvalue) {
--
-- if (this._state == MODE_SIGN) {
- this._constructionElement.appendChild(keyvalue.getElement());
- XMLUtils.addReturnToElement(this._constructionElement);
-- }
- }
-
- /**
-@@ -241,11 +244,8 @@
- * @param mgmtdata
- */
- public void add(MgmtData mgmtdata) {
--
-- if (this._state == MODE_SIGN) {
- this._constructionElement.appendChild(mgmtdata.getElement());
- XMLUtils.addReturnToElement(this._constructionElement);
-- }
- }
-
- /**
-@@ -254,11 +254,8 @@
- * @param pgpdata
- */
- public void add(PGPData pgpdata) {
--
-- if (this._state == MODE_SIGN) {
- this._constructionElement.appendChild(pgpdata.getElement());
- XMLUtils.addReturnToElement(this._constructionElement);
-- }
- }
-
- /**
-@@ -279,11 +276,8 @@
- * @param retrievalmethod
- */
- public void add(RetrievalMethod retrievalmethod) {
--
-- if (this._state == MODE_SIGN) {
- this._constructionElement.appendChild(retrievalmethod.getElement());
- XMLUtils.addReturnToElement(this._constructionElement);
-- }
- }
-
- /**
-@@ -292,11 +286,8 @@
- * @param spkidata
- */
- public void add(SPKIData spkidata) {
--
-- if (this._state == MODE_SIGN) {
- this._constructionElement.appendChild(spkidata.getElement());
- XMLUtils.addReturnToElement(this._constructionElement);
-- }
- }
-
- /**
-@@ -305,11 +296,11 @@
- * @param x509data
- */
- public void add(X509Data x509data) {
--
-- if (this._state == MODE_SIGN) {
-+ if (x509Datas==null)
-+ x509Datas=new ArrayList();
-+ x509Datas.add(x509data);
- this._constructionElement.appendChild(x509data.getElement());
- XMLUtils.addReturnToElement(this._constructionElement);
-- }
- }
-
- /**
-@@ -321,12 +312,11 @@
-
- public void add(EncryptedKey encryptedKey)
- throws XMLEncryptionException {
--
-- if (this._state == MODE_SIGN) {
-+ if (encryptedKeys==null)
-+ encryptedKeys=new ArrayList();
-+ encryptedKeys.add(encryptedKey);
- XMLCipher cipher = XMLCipher.getInstance();
- this._constructionElement.appendChild(cipher.martial(encryptedKey));
-- }
--
- }
-
- /**
-@@ -335,11 +325,8 @@
- * @param element
- */
- public void addUnknownElement(Element element) {
--
-- if (this._state == MODE_SIGN) {
- this._constructionElement.appendChild(element);
- XMLUtils.addReturnToElement(this._constructionElement);
-- }
- }
-
- /**
-@@ -403,6 +390,9 @@
- *@return the number of the X509Data tags
- */
- public int lengthX509Data() {
-+ if (x509Datas!=null) {
-+ return x509Datas.size();
-+ }
- return this.length(Constants.SignatureSpecNS, Constants._TAG_X509DATA);
- }
-
-@@ -550,7 +540,9 @@
- * @throws XMLSecurityException
- */
- public X509Data itemX509Data(int i) throws XMLSecurityException {
--
-+ if (x509Datas!=null) {
-+ return (X509Data) x509Datas.get(i);
-+ }
- Element e = XMLUtils.selectDsNode(this._constructionElement.getFirstChild(),
- Constants._TAG_X509DATA,i);
-
-@@ -569,7 +561,9 @@
- */
-
- public EncryptedKey itemEncryptedKey(int i) throws XMLSecurityException {
--
-+ if (encryptedKeys!=null) {
-+ return (EncryptedKey) encryptedKeys.get(i);
-+ }
- Element e =
- XMLUtils.selectXencNode(this._constructionElement.getFirstChild(),
- EncryptionConstants._TAG_ENCRYPTEDKEY,i);
-@@ -707,20 +701,20 @@
- PublicKey pk = this.getPublicKeyFromInternalResolvers();
-
- if (pk != null) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "I could find a key using the per-KeyInfo key resolvers");
-+ log.log(java.util.logging.Level.FINE, "I could find a key using the per-KeyInfo key resolvers");
-
- return pk;
- }
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "I couldn't find a key using the per-KeyInfo key resolvers");
-+ log.log(java.util.logging.Level.FINE, "I couldn't find a key using the per-KeyInfo key resolvers");
-
- pk = this.getPublicKeyFromStaticResolvers();
-
- if (pk != null) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "I could find a key using the system-wide key resolvers");
-+ log.log(java.util.logging.Level.FINE, "I could find a key using the system-wide key resolvers");
-
- return pk;
- }
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "I couldn't find a key using the system-wide key resolvers");
-+ log.log(java.util.logging.Level.FINE, "I couldn't find a key using the system-wide key resolvers");
-
- return null;
- }
-@@ -732,46 +726,29 @@
- * @throws KeyResolverException
- */
- PublicKey getPublicKeyFromStaticResolvers() throws KeyResolverException {
--
-- for (int i = 0; i < KeyResolver.length(); i++) {
-- KeyResolver keyResolver = KeyResolver.item(i);
-+ int length=KeyResolver.length();
-+ int storageLength=this._storageResolvers.size();
-+ Iterator it= KeyResolver.iterator();
-+ for (int i = 0; i < length; i++) {
-+ KeyResolverSpi keyResolver = (KeyResolverSpi) it.next();
- Node currentChild=this._constructionElement.getFirstChild();
-+ String uri= this.getBaseURI();
- while (currentChild!=null) {
- if (currentChild.getNodeType() == Node.ELEMENT_NODE) {
-- if (this._storageResolvers.size() == 0) {
--
-- // if we do not have storage resolvers, we verify with null
-- StorageResolver storage = null;
--
-- if (keyResolver.canResolve((Element) currentChild,
-- this.getBaseURI(), storage)) {
-- PublicKey pk =
-- keyResolver.resolvePublicKey((Element) currentChild,
-- this.getBaseURI(),
-- storage);
--
-- if (pk != null) {
-- return pk;
-- }
-- }
-- } else {
-- for (int k = 0; k < this._storageResolvers.size(); k++) {
-+ for (int k = 0; k < storageLength; k++) {
- StorageResolver storage =
- (StorageResolver) this._storageResolvers.get(k);
-
-- if (keyResolver.canResolve((Element) currentChild,
-- this.getBaseURI(), storage)) {
-- PublicKey pk =
-- keyResolver.resolvePublicKey((Element) currentChild,
-- this.getBaseURI(),
-+ PublicKey pk =
-+ keyResolver.engineLookupAndResolvePublicKey((Element) currentChild,
-+ uri,
- storage);
-
-- if (pk != null) {
-- return pk;
-- }
-+ if (pk != null) {
-+ KeyResolver.hit(it);
-+ return pk;
- }
- }
-- }
- }
- currentChild=currentChild.getNextSibling();
- }
-@@ -786,50 +763,27 @@
- * @throws KeyResolverException
- */
- PublicKey getPublicKeyFromInternalResolvers() throws KeyResolverException {
--
-- for (int i = 0; i < this.lengthInternalKeyResolver(); i++) {
-+ int length=lengthInternalKeyResolver();
-+ int storageLength=this._storageResolvers.size();
-+ for (int i = 0; i < length; i++) {
- KeyResolverSpi keyResolver = this.itemInternalKeyResolver(i);
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Try " + keyResolver.getClass().getName());
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Try " + keyResolver.getClass().getName());
-
- Node currentChild=this._constructionElement.getFirstChild();
-+ String uri=this.getBaseURI();
- while (currentChild!=null) {
- if (currentChild.getNodeType() == Node.ELEMENT_NODE) {
-- if (this._storageResolvers.size() == 0) {
--
-- // if we do not have storage resolvers, we verify with null
-- StorageResolver storage = null;
--
-- if (keyResolver.engineCanResolve((Element) currentChild,
-- this.getBaseURI(),
-- storage)) {
-- PublicKey pk =
-- keyResolver
-- .engineResolvePublicKey((Element) currentChild, this
-- .getBaseURI(), storage);
-+ for (int k = 0; k < storageLength; k++) {
-+ StorageResolver storage =
-+ (StorageResolver) this._storageResolvers.get(k);
-+ PublicKey pk = keyResolver
-+ .engineLookupAndResolvePublicKey((Element) currentChild, uri, storage);
-
- if (pk != null) {
-- return pk;
-+ return pk;
- }
- }
-- } else {
-- for (int k = 0; k < this._storageResolvers.size(); k++) {
-- StorageResolver storage =
-- (StorageResolver) this._storageResolvers.get(k);
--
-- if (keyResolver.engineCanResolve((Element) currentChild,
-- this.getBaseURI(),
-- storage)) {
-- PublicKey pk = keyResolver
-- .engineResolvePublicKey((Element) currentChild, this
-- .getBaseURI(), storage);
--
-- if (pk != null) {
-- return pk;
-- }
-- }
-- }
-- }
- }
- currentChild=currentChild.getNextSibling();
- }
-@@ -850,12 +804,12 @@
- X509Certificate cert = this.getX509CertificateFromInternalResolvers();
-
- if (cert != null) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE,
-+ log.log(java.util.logging.Level.FINE,
- "I could find a X509Certificate using the per-KeyInfo key resolvers");
-
- return cert;
- }
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE,
-+ log.log(java.util.logging.Level.FINE,
- "I couldn't find a X509Certificate using the per-KeyInfo key resolvers");
-
-
-@@ -863,12 +817,12 @@
- cert = this.getX509CertificateFromStaticResolvers();
-
- if (cert != null) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE,
-+ log.log(java.util.logging.Level.FINE,
- "I could find a X509Certificate using the system-wide key resolvers");
-
- return cert;
- }
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE,
-+ log.log(java.util.logging.Level.FINE,
- "I couldn't find a X509Certificate using the system-wide key resolvers");
-
-
-@@ -885,53 +839,44 @@
- */
- X509Certificate getX509CertificateFromStaticResolvers()
- throws KeyResolverException {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Start getX509CertificateFromStaticResolvers() with "
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Start getX509CertificateFromStaticResolvers() with "
- + KeyResolver.length() + " resolvers");
-+ String uri=this.getBaseURI();
-+ int length= KeyResolver.length();
-+ int storageLength=this._storageResolvers.size();
-+ Iterator it = KeyResolver.iterator();
-+ for (int i = 0; i <length; i++) {
-+ KeyResolverSpi keyResolver = (KeyResolverSpi) it.next();
-+ X509Certificate cert= applyCurrentResolver(uri, storageLength, keyResolver);
-+ if (cert!=null) {
-+ KeyResolver.hit(it);
-+ return cert;
-+ }
-+ }
-+ return null;
-+ }
-
-- for (int i = 0; i < KeyResolver.length(); i++) {
-- KeyResolver keyResolver = KeyResolver.item(i);
-- Node currentChild=this._constructionElement.getFirstChild();
-- while (currentChild!=null) {
-- if (currentChild.getNodeType() == Node.ELEMENT_NODE) {
-- if (this._storageResolvers.size() == 0) {
-+ private X509Certificate applyCurrentResolver(String uri, int storageLength, KeyResolverSpi keyResolver) throws KeyResolverException {
-+ Node currentChild=this._constructionElement.getFirstChild();
-+ while (currentChild!=null) {
-+ if (currentChild.getNodeType() == Node.ELEMENT_NODE) {
-+ for (int k = 0; k < storageLength; k++) {
-+ StorageResolver storage =
-+ (StorageResolver) this._storageResolvers.get(k);
-
-- // if we do not have storage resolvers, we verify with null
-- StorageResolver storage = null;
-+ X509Certificate cert = keyResolver
-+ .engineLookupResolveX509Certificate((Element) currentChild, uri,
-+ storage);
-
-- if (keyResolver.canResolve((Element) currentChild,
-- this.getBaseURI(), storage)) {
-- X509Certificate cert =
-- keyResolver
-- .resolveX509Certificate((Element) currentChild, this
-- .getBaseURI(), storage);
--
-- if (cert != null) {
-- return cert;
-- }
-- }
-- } else {
-- for (int k = 0; k < this._storageResolvers.size(); k++) {
-- StorageResolver storage =
-- (StorageResolver) this._storageResolvers.get(k);
--
-- if (keyResolver.canResolve((Element) currentChild,
-- this.getBaseURI(), storage)) {
-- X509Certificate cert = keyResolver
-- .resolveX509Certificate((Element) currentChild, this
-- .getBaseURI(), storage);
--
-- if (cert != null) {
-- return cert;
-- }
-- }
-+ if (cert != null) {
-+ return cert;
- }
- }
- }
- currentChild=currentChild.getNextSibling();
- }
-- }
-- return null;
-+ return null;
- }
-
- /**
-@@ -942,55 +887,18 @@
- */
- X509Certificate getX509CertificateFromInternalResolvers()
- throws KeyResolverException {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Start getX509CertificateFromInternalResolvers() with "
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Start getX509CertificateFromInternalResolvers() with "
- + this.lengthInternalKeyResolver() + " resolvers");
--
-+ String uri=this.getBaseURI();
-+ int storageLength=this._storageResolvers.size();
- for (int i = 0; i < this.lengthInternalKeyResolver(); i++) {
- KeyResolverSpi keyResolver = this.itemInternalKeyResolver(i);
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Try " + keyResolver.getClass().getName());
--
-- Node currentChild=this._constructionElement.getFirstChild();
-- while (currentChild!=null) {
-- if (currentChild.getNodeType() == Node.ELEMENT_NODE) {
-- if (this._storageResolvers.size() == 0) {
--
-- // if we do not have storage resolvers, we verify with null
-- StorageResolver storage = null;
--
-- if (keyResolver.engineCanResolve((Element) currentChild,
-- this.getBaseURI(),
-- storage)) {
-- X509Certificate cert =
-- keyResolver.engineResolveX509Certificate(
-- (Element) currentChild, this.getBaseURI(), storage);
--
-- if (cert != null) {
-- return cert;
-- }
-- }
-- } else {
-- for (int k = 0; k < this._storageResolvers.size(); k++) {
-- StorageResolver storage =
-- (StorageResolver) this._storageResolvers.get(k);
--
-- if (keyResolver.engineCanResolve((Element) currentChild,
-- this.getBaseURI(),
-- storage)) {
-- X509Certificate cert =
-- keyResolver.engineResolveX509Certificate(
-- (Element) currentChild, this.getBaseURI(),
-- storage);
--
-- if (cert != null) {
-- return cert;
-- }
-- }
-- }
-- }
-- }
-- currentChild=currentChild.getNextSibling();
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Try " + keyResolver.getClass().getName());
-+ X509Certificate cert= applyCurrentResolver(uri, storageLength, keyResolver);
-+ if (cert!=null) {
-+ return cert;
- }
- }
-
-@@ -1006,21 +914,21 @@
- SecretKey sk = this.getSecretKeyFromInternalResolvers();
-
- if (sk != null) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "I could find a secret key using the per-KeyInfo key resolvers");
-+ log.log(java.util.logging.Level.FINE, "I could find a secret key using the per-KeyInfo key resolvers");
-
- return sk;
- }
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "I couldn't find a secret key using the per-KeyInfo key resolvers");
-+ log.log(java.util.logging.Level.FINE, "I couldn't find a secret key using the per-KeyInfo key resolvers");
-
-
- sk = this.getSecretKeyFromStaticResolvers();
-
- if (sk != null) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "I could find a secret key using the system-wide key resolvers");
-+ log.log(java.util.logging.Level.FINE, "I could find a secret key using the system-wide key resolvers");
-
- return sk;
- }
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "I couldn't find a secret key using the system-wide key resolvers");
-+ log.log(java.util.logging.Level.FINE, "I couldn't find a secret key using the system-wide key resolvers");
-
-
- return null;
-@@ -1034,47 +942,29 @@
- */
-
- SecretKey getSecretKeyFromStaticResolvers() throws KeyResolverException {
--
-- for (int i = 0; i < KeyResolver.length(); i++) {
-- KeyResolver keyResolver = KeyResolver.item(i);
-+ final int length=KeyResolver.length();
-+ int storageLength=this._storageResolvers.size();
-+ Iterator it = KeyResolver.iterator();
-+ for (int i = 0; i < length; i++) {
-+ KeyResolverSpi keyResolver = (KeyResolverSpi) it.next();
-
- Node currentChild=this._constructionElement.getFirstChild();
-+ String uri=this.getBaseURI();
- while (currentChild!=null) {
- if (currentChild.getNodeType() == Node.ELEMENT_NODE) {
-- if (this._storageResolvers.size() == 0) {
-+ for (int k = 0; k < storageLength; k++) {
-+ StorageResolver storage =
-+ (StorageResolver) this._storageResolvers.get(k);
-
-- // if we do not have storage resolvers, we verify with null
-- StorageResolver storage = null;
--
-- if (keyResolver.canResolve((Element) currentChild,
-- this.getBaseURI(), storage)) {
-- SecretKey sk =
-- keyResolver.resolveSecretKey((Element) currentChild,
-- this.getBaseURI(),
-- storage);
-+ SecretKey sk =
-+ keyResolver.engineLookupAndResolveSecretKey((Element) currentChild,
-+ uri,
-+ storage);
-
- if (sk != null) {
- return sk;
- }
- }
-- } else {
-- for (int k = 0; k < this._storageResolvers.size(); k++) {
-- StorageResolver storage =
-- (StorageResolver) this._storageResolvers.get(k);
--
-- if (keyResolver.canResolve((Element) currentChild,
-- this.getBaseURI(), storage)) {
-- SecretKey sk =
-- keyResolver.resolveSecretKey((Element) currentChild,
-- this.getBaseURI(),
-- storage);
--
-- if (sk != null) {
-- return sk;
-- }
-- }
-- }
-- }
- }
- currentChild=currentChild.getNextSibling();
- }
-@@ -1090,51 +980,28 @@
- */
-
- SecretKey getSecretKeyFromInternalResolvers() throws KeyResolverException {
--
-+ int storageLength=this._storageResolvers.size();
- for (int i = 0; i < this.lengthInternalKeyResolver(); i++) {
- KeyResolverSpi keyResolver = this.itemInternalKeyResolver(i);
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Try " + keyResolver.getClass().getName());
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Try " + keyResolver.getClass().getName());
-
- Node currentChild=this._constructionElement.getFirstChild();
-+ String uri=this.getBaseURI();
- while (currentChild!=null) {
- if (currentChild.getNodeType() == Node.ELEMENT_NODE) {
-- if (this._storageResolvers.size() == 0) {
-+ for (int k = 0; k < storageLength; k++) {
-+ StorageResolver storage =
-+ (StorageResolver) this._storageResolvers.get(k);
-
-- // if we do not have storage resolvers, we verify with null
-- StorageResolver storage = null;
--
-- if (keyResolver.engineCanResolve((Element) currentChild,
-- this.getBaseURI(),
-- storage)) {
-- SecretKey sk =
-- keyResolver
-- .engineResolveSecretKey((Element) currentChild, this
-- .getBaseURI(), storage);
-+ SecretKey sk = keyResolver
-+ .engineLookupAndResolveSecretKey((Element) currentChild, uri, storage);
-
- if (sk != null) {
- return sk;
- }
-- }
-- } else {
-- for (int k = 0; k < this._storageResolvers.size(); k++) {
-- StorageResolver storage =
-- (StorageResolver) this._storageResolvers.get(k);
--
-- if (keyResolver.engineCanResolve((Element) currentChild,
-- this.getBaseURI(),
-- storage)) {
-- SecretKey sk = keyResolver
-- .engineResolveSecretKey((Element) currentChild, this
-- .getBaseURI(), storage);
--
-- if (sk != null) {
-- return sk;
-- }
-- }
-- }
-- }
-- }
-+ }
-+ }
- currentChild=currentChild.getNextSibling();
- }
- }
-@@ -1145,7 +1012,7 @@
- /**
- * Stores the individual (per-KeyInfo) {@link KeyResolver}s
- */
-- List _internalKeyResolvers = new ArrayList();
-+ List _internalKeyResolvers = null;
-
- /**
- * This method is used to add a custom {@link KeyResolverSpi} to a KeyInfo
-@@ -1154,6 +1021,9 @@
- * @param realKeyResolver
- */
- public void registerInternalKeyResolver(KeyResolverSpi realKeyResolver) {
-+ if (_internalKeyResolvers==null) {
-+ _internalKeyResolvers=new ArrayList();
-+ }
- this._internalKeyResolvers.add(realKeyResolver);
- }
-
-@@ -1162,6 +1032,8 @@
- * @return the length of the key
- */
- int lengthInternalKeyResolver() {
-+ if (_internalKeyResolvers==null)
-+ return 0;
- return this._internalKeyResolvers.size();
- }
-
-@@ -1176,7 +1048,7 @@
- }
-
- /** Field _storageResolvers */
-- List _storageResolvers = new ArrayList();
-+ List _storageResolvers = nullList;
-
- /**
- * Method addStorageResolver
-@@ -1184,19 +1056,11 @@
- * @param storageResolver
- */
- public void addStorageResolver(StorageResolver storageResolver) {
-+ if (_storageResolvers == nullList ){
-+ _storageResolvers=new ArrayList();
-+ }
-+ this._storageResolvers.add(storageResolver);
-
-- if (storageResolver != null) {
-- this._storageResolvers.add(storageResolver);
-- }
-- }
--
-- /**
-- * Method getStorageResolvers
-- *
-- * @return the internalStorages
-- */
-- List getStorageResolvers() {
-- return this._storageResolvers;
- }
-
- //J-
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/KeyUtils.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/KeyUtils.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/KeyUtils.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/KeyUtils.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -36,7 +35,7 @@
- /**
- * Utility class for for <CODE>com.sun.org.apache.xml.internal.security.keys</CODE> package.
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class KeyUtils {
-
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyInfoContent.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyInfoContent.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyInfoContent.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyInfoContent.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -28,7 +27,7 @@
- /**
- * Empty interface just to identify Elements that can be cildren of ds:KeyInfo.
- *
-- * @author $Author: blautenb $
-+ * @author $Author: mullan $
- */
- public interface KeyInfoContent {
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyName.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyName.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyName.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyName.java
-@@ -20,25 +20,18 @@
- */
- package com.sun.org.apache.xml.internal.security.keys.content;
-
--
--
- import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
- import com.sun.org.apache.xml.internal.security.utils.Constants;
- import com.sun.org.apache.xml.internal.security.utils.SignatureElementProxy;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
-
--
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class KeyName extends SignatureElementProxy implements KeyInfoContent {
-
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(KeyName.class.getName());
--
- /**
- * Constructor KeyName
- *
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyValue.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyValue.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyValue.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyValue.java
-@@ -20,11 +20,8 @@
- */
- package com.sun.org.apache.xml.internal.security.keys.content;
-
--
--
- import java.security.PublicKey;
-
--
- import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
- import com.sun.org.apache.xml.internal.security.keys.content.keyvalues.DSAKeyValue;
- import com.sun.org.apache.xml.internal.security.keys.content.keyvalues.RSAKeyValue;
-@@ -34,140 +31,131 @@
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
-
--
- /**
- * The KeyValue element contains a single public key that may be useful in
- * validating the signature. Structured formats for defining DSA (REQUIRED)
- * and RSA (RECOMMENDED) public keys are defined in Signature Algorithms
- * (section 6.4). The KeyValue element may include externally defined public
-- * keys values represented as PCDATA or element types from an external namespace.
-+ * keys values represented as PCDATA or element types from an external
-+ * namespace.
- *
-- * @author $Author: vishal $
-+ * @author $Author: mullan $
- */
- public class KeyValue extends SignatureElementProxy implements KeyInfoContent {
-
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(KeyValue.class.getName());
-+ /**
-+ * Constructor KeyValue
-+ *
-+ * @param doc
-+ * @param dsaKeyValue
-+ */
-+ public KeyValue(Document doc, DSAKeyValue dsaKeyValue) {
-
-- /**
-- * Constructor KeyValue
-- *
-- * @param doc
-- * @param dsaKeyValue
-- */
-- public KeyValue(Document doc, DSAKeyValue dsaKeyValue) {
-+ super(doc);
-
-- super(doc);
-+ XMLUtils.addReturnToElement(this._constructionElement);
-+ this._constructionElement.appendChild(dsaKeyValue.getElement());
-+ XMLUtils.addReturnToElement(this._constructionElement);
-+ }
-
-- XMLUtils.addReturnToElement(this._constructionElement);
-- this._constructionElement.appendChild(dsaKeyValue.getElement());
-- XMLUtils.addReturnToElement(this._constructionElement);
-- }
-+ /**
-+ * Constructor KeyValue
-+ *
-+ * @param doc
-+ * @param rsaKeyValue
-+ */
-+ public KeyValue(Document doc, RSAKeyValue rsaKeyValue) {
-
-- /**
-- * Constructor KeyValue
-- *
-- * @param doc
-- * @param rsaKeyValue
-- */
-- public KeyValue(Document doc, RSAKeyValue rsaKeyValue) {
-+ super(doc);
-
-- super(doc);
-+ XMLUtils.addReturnToElement(this._constructionElement);
-+ this._constructionElement.appendChild(rsaKeyValue.getElement());
-+ XMLUtils.addReturnToElement(this._constructionElement);
-+ }
-
-- XMLUtils.addReturnToElement(this._constructionElement);
-- this._constructionElement.appendChild(rsaKeyValue.getElement());
-- XMLUtils.addReturnToElement(this._constructionElement);
-- }
-+ /**
-+ * Constructor KeyValue
-+ *
-+ * @param doc
-+ * @param unknownKeyValue
-+ */
-+ public KeyValue(Document doc, Element unknownKeyValue) {
-
-- /**
-- * Constructor KeyValue
-- *
-- * @param doc
-- * @param unknownKeyValue
-- */
-- public KeyValue(Document doc, Element unknownKeyValue) {
-+ super(doc);
-
-- super(doc);
-+ XMLUtils.addReturnToElement(this._constructionElement);
-+ this._constructionElement.appendChild(unknownKeyValue);
-+ XMLUtils.addReturnToElement(this._constructionElement);
-+ }
-
-- XMLUtils.addReturnToElement(this._constructionElement);
-- this._constructionElement.appendChild(unknownKeyValue);
-- XMLUtils.addReturnToElement(this._constructionElement);
-- }
-+ /**
-+ * Constructor KeyValue
-+ *
-+ * @param doc
-+ * @param pk
-+ */
-+ public KeyValue(Document doc, PublicKey pk) {
-
-- /**
-- * Constructor KeyValue
-- *
-- * @param doc
-- * @param pk
-- */
-- public KeyValue(Document doc, PublicKey pk) {
-+ super(doc);
-
-- super(doc);
-+ XMLUtils.addReturnToElement(this._constructionElement);
-
-- XMLUtils.addReturnToElement(this._constructionElement);
-+ if (pk instanceof java.security.interfaces.DSAPublicKey) {
-+ DSAKeyValue dsa = new DSAKeyValue(this._doc, pk);
-
-- if (pk instanceof java.security.interfaces.DSAPublicKey) {
-- DSAKeyValue dsa = new DSAKeyValue(this._doc, pk);
-+ this._constructionElement.appendChild(dsa.getElement());
-+ XMLUtils.addReturnToElement(this._constructionElement);
-+ } else if (pk instanceof java.security.interfaces.RSAPublicKey) {
-+ RSAKeyValue rsa = new RSAKeyValue(this._doc, pk);
-
-- this._constructionElement.appendChild(dsa.getElement());
-- XMLUtils.addReturnToElement(this._constructionElement);
-- } else if (pk instanceof java.security.interfaces.RSAPublicKey) {
-- RSAKeyValue rsa = new RSAKeyValue(this._doc, pk);
-+ this._constructionElement.appendChild(rsa.getElement());
-+ XMLUtils.addReturnToElement(this._constructionElement);
-+ }
-+ }
-
-- this._constructionElement.appendChild(rsa.getElement());
-- XMLUtils.addReturnToElement(this._constructionElement);
-- }
-- }
-+ /**
-+ * Constructor KeyValue
-+ *
-+ * @param element
-+ * @param BaseURI
-+ * @throws XMLSecurityException
-+ */
-+ public KeyValue(Element element, String BaseURI)
-+ throws XMLSecurityException {
-+ super(element, BaseURI);
-+ }
-
-- /**
-- * Constructor KeyValue
-- *
-- * @param element
-- * @param BaseURI
-- * @throws XMLSecurityException
-- */
-- public KeyValue(Element element, String BaseURI)
-- throws XMLSecurityException {
-- super(element, BaseURI);
-- }
-+ /**
-+ * Method getPublicKey
-+ *
-+ * @return the public key
-+ * @throws XMLSecurityException
-+ */
-+ public PublicKey getPublicKey() throws XMLSecurityException {
-
-- /**
-- * Method getPublicKey
-- *
-- * @return the public key
-- * @throws XMLSecurityException
-- */
-- public PublicKey getPublicKey() throws XMLSecurityException {
-+ Element rsa = XMLUtils.selectDsNode
-+ (this._constructionElement.getFirstChild(),
-+ Constants._TAG_RSAKEYVALUE,0);
-
-+ if (rsa != null) {
-+ RSAKeyValue kv = new RSAKeyValue(rsa, this._baseURI);
-+ return kv.getPublicKey();
-+ }
-
-- Element rsa = XMLUtils.selectDsNode(this._constructionElement.getFirstChild(),
-- Constants._TAG_RSAKEYVALUE,0);
-+ Element dsa = XMLUtils.selectDsNode
-+ (this._constructionElement.getFirstChild(),
-+ Constants._TAG_DSAKEYVALUE,0);
-
-- if (rsa != null) {
-- RSAKeyValue kv = new RSAKeyValue(rsa,
-- this._baseURI);
-+ if (dsa != null) {
-+ DSAKeyValue kv = new DSAKeyValue(dsa, this._baseURI);
-+ return kv.getPublicKey();
-+ }
-
-- return kv.getPublicKey();
-- }
-+ return null;
-+ }
-
-- Element dsa = XMLUtils.selectDsNode(this._constructionElement,
-- Constants._TAG_DSAKEYVALUE,0);
--
--
-- if (dsa != null) {
-- DSAKeyValue kv = new DSAKeyValue(dsa,
-- this._baseURI);
--
-- return kv.getPublicKey();
-- }
--
--
-- return null;
-- }
--
-- /** @inheritDoc */
-- public String getBaseLocalName() {
-- return Constants._TAG_KEYVALUE;
-- }
-+ /** @inheritDoc */
-+ public String getBaseLocalName() {
-+ return Constants._TAG_KEYVALUE;
-+ }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/MgmtData.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/MgmtData.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/MgmtData.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/MgmtData.java
-@@ -20,25 +20,18 @@
- */
- package com.sun.org.apache.xml.internal.security.keys.content;
-
--
--
- import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
- import com.sun.org.apache.xml.internal.security.utils.Constants;
- import com.sun.org.apache.xml.internal.security.utils.SignatureElementProxy;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
-
--
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class MgmtData extends SignatureElementProxy implements KeyInfoContent {
-
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(MgmtData.class.getName());
--
- /**
- * Constructor MgmtData
- *
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/PGPData.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/PGPData.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/PGPData.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/PGPData.java
-@@ -20,25 +20,18 @@
- */
- package com.sun.org.apache.xml.internal.security.keys.content;
-
--
--
- import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
- import com.sun.org.apache.xml.internal.security.utils.Constants;
- import com.sun.org.apache.xml.internal.security.utils.SignatureElementProxy;
- import org.w3c.dom.Element;
-
--
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- * $todo$ Implement
- */
- public class PGPData extends SignatureElementProxy implements KeyInfoContent {
-
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(PGPData.class.getName());
--
- /**
- * Constructor PGPData
- *
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/RetrievalMethod.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/RetrievalMethod.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/RetrievalMethod.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/RetrievalMethod.java
-@@ -20,9 +20,6 @@
- */
- package com.sun.org.apache.xml.internal.security.keys.content;
-
--
--
--
- import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
- import com.sun.org.apache.xml.internal.security.signature.XMLSignatureException;
- import com.sun.org.apache.xml.internal.security.transforms.Transforms;
-@@ -33,17 +30,13 @@
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
-
--
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class RetrievalMethod extends SignatureElementProxy
- implements KeyInfoContent {
-
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(RetrievalMethod.class.getName());
- //J-
- /** DSA retrieval */
- public static final String TYPE_DSA = Constants.SignatureSpecNS + "DSAKeyValue";
-@@ -133,7 +126,7 @@
-
- try {
- Element transformsElem =
-- XMLUtils.selectDsNode(this._constructionElement,
-+ XMLUtils.selectDsNode(this._constructionElement.getFirstChild(),
- Constants
- ._TAG_TRANSFORMS, 0);
-
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/SPKIData.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/SPKIData.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/SPKIData.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/SPKIData.java
-@@ -20,25 +20,18 @@
- */
- package com.sun.org.apache.xml.internal.security.keys.content;
-
--
--
- import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
- import com.sun.org.apache.xml.internal.security.utils.Constants;
- import com.sun.org.apache.xml.internal.security.utils.SignatureElementProxy;
- import org.w3c.dom.Element;
-
--
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- * $todo$ implement
- */
- public class SPKIData extends SignatureElementProxy implements KeyInfoContent {
-
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(SPKIData.class.getName());
--
- /**
- * Constructor SPKIData
- *
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/X509Data.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/X509Data.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/X509Data.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/X509Data.java
-@@ -41,7 +41,7 @@
-
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class X509Data extends SignatureElementProxy implements KeyInfoContent {
-
-@@ -72,60 +72,17 @@
- throws XMLSecurityException {
-
- super(element, BaseURI);
--
-- boolean noElements=true;
- Node sibling=this._constructionElement.getFirstChild();
- while (sibling!=null) {
- if (sibling.getNodeType()!=Node.ELEMENT_NODE) {
- sibling=sibling.getNextSibling();
- continue;
- }
-- noElements=false;
-- Element currentElem = (Element) sibling;
-- sibling=sibling.getNextSibling();
-- String localname = currentElem.getLocalName();
--
-- if (currentElem.getNamespaceURI().equals(Constants.SignatureSpecNS)) {
-- if (localname.equals(Constants._TAG_X509ISSUERSERIAL)) {
-- XMLX509IssuerSerial is = new XMLX509IssuerSerial(currentElem,
-- BaseURI);
--
-- this.add(is);
-- } else if (localname.equals(Constants._TAG_X509SKI)) {
-- XMLX509SKI ski = new XMLX509SKI(currentElem, BaseURI);
--
-- this.add(ski);
-- } else if (localname.equals(Constants._TAG_X509SUBJECTNAME)) {
-- XMLX509SubjectName sn = new XMLX509SubjectName(currentElem,
-- BaseURI);
--
-- this.add(sn);
-- } else if (localname.equals(Constants._TAG_X509CERTIFICATE)) {
-- XMLX509Certificate cert = new XMLX509Certificate(currentElem,
-- BaseURI);
--
-- this.add(cert);
-- } else if (localname.equals(Constants._TAG_X509CRL)) {
-- XMLX509CRL crl = new XMLX509CRL(currentElem, BaseURI);
--
-- this.add(crl);
-- } else {
-- log.log(java.util.logging.Level.WARNING, "Found a " + currentElem.getTagName() + " element in "
-- + Constants._TAG_X509DATA);
-- this.addUnknownElement(currentElem);
-- }
-- } else {
-- log.log(java.util.logging.Level.WARNING, "Found a " + currentElem.getTagName() + " element in "
-- + Constants._TAG_X509DATA);
-- this.addUnknownElement(currentElem);
-- }
-+ return;
- }
-- if (noElements) {
-- Object exArgs[] = { "Elements", Constants._TAG_X509DATA };
--
-- throw new XMLSecurityException("xml.WrongContent", exArgs);
-- }
--
-+ /* No Elements found */
-+ Object exArgs[] = { "Elements", Constants._TAG_X509DATA };
-+ throw new XMLSecurityException("xml.WrongContent", exArgs);
- }
-
- /**
-@@ -169,11 +126,9 @@
- */
- public void add(XMLX509IssuerSerial xmlX509IssuerSerial) {
-
-- if (this._state == MODE_SIGN) {
- this._constructionElement
- .appendChild(xmlX509IssuerSerial.getElement());
- XMLUtils.addReturnToElement(this._constructionElement);
-- }
- }
-
- /**
-@@ -202,11 +157,8 @@
- * @param xmlX509SKI
- */
- public void add(XMLX509SKI xmlX509SKI) {
--
-- if (this._state == MODE_SIGN) {
- this._constructionElement.appendChild(xmlX509SKI.getElement());
- XMLUtils.addReturnToElement(this._constructionElement);
-- }
- }
-
- /**
-@@ -233,11 +185,8 @@
- * @param xmlX509SubjectName
- */
- public void add(XMLX509SubjectName xmlX509SubjectName) {
--
-- if (this._state == MODE_SIGN) {
- this._constructionElement.appendChild(xmlX509SubjectName.getElement());
- XMLUtils.addReturnToElement(this._constructionElement);
-- }
- }
-
- /**
-@@ -266,11 +215,8 @@
- * @param xmlX509Certificate
- */
- public void add(XMLX509Certificate xmlX509Certificate) {
--
-- if (this._state == MODE_SIGN) {
- this._constructionElement.appendChild(xmlX509Certificate.getElement());
- XMLUtils.addReturnToElement(this._constructionElement);
-- }
- }
-
- /**
-@@ -288,11 +234,8 @@
- * @param xmlX509CRL
- */
- public void add(XMLX509CRL xmlX509CRL) {
--
-- if (this._state == MODE_SIGN) {
- this._constructionElement.appendChild(xmlX509CRL.getElement());
- XMLUtils.addReturnToElement(this._constructionElement);
-- }
- }
-
- /**
-@@ -301,11 +244,8 @@
- * @param element
- */
- public void addUnknownElement(Element element) {
--
-- if (this._state == MODE_SIGN) {
- this._constructionElement.appendChild(element);
- XMLUtils.addReturnToElement(this._constructionElement);
-- }
- }
-
- /**
-@@ -479,7 +419,7 @@
- * TODO implement
- **/
- public Element itemUnknownElement(int i) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "itemUnknownElement not implemented:"+i);
-+ log.log(java.util.logging.Level.FINE, "itemUnknownElement not implemented:"+i);
- return null;
- }
-
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/DSAKeyValue.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/DSAKeyValue.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/DSAKeyValue.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/DSAKeyValue.java
-@@ -20,8 +20,6 @@
- */
- package com.sun.org.apache.xml.internal.security.keys.content.keyvalues;
-
--
--
- import java.math.BigInteger;
- import java.security.Key;
- import java.security.KeyFactory;
-@@ -39,18 +37,13 @@
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
-
--
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class DSAKeyValue extends SignatureElementProxy
- implements KeyValueContent {
-
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(DSAKeyValue.class.getName());
--
- /**
- * Constructor DSAKeyValue
- *
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/KeyValueContent.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/KeyValueContent.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/KeyValueContent.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/KeyValueContent.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -32,7 +31,7 @@
- *
- *
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- *
- */
- public interface KeyValueContent {
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/RSAKeyValue.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/RSAKeyValue.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/RSAKeyValue.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/RSAKeyValue.java
-@@ -20,8 +20,6 @@
- */
- package com.sun.org.apache.xml.internal.security.keys.content.keyvalues;
-
--
--
- import java.math.BigInteger;
- import java.security.Key;
- import java.security.KeyFactory;
-@@ -39,19 +37,13 @@
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
-
--
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class RSAKeyValue extends SignatureElementProxy
- implements KeyValueContent {
-
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(
-- RSAKeyValue.class.getName());
--
- /**
- * Constructor RSAKeyValue
- *
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509CRL.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509CRL.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509CRL.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509CRL.java
-@@ -20,30 +20,20 @@
- */
- package com.sun.org.apache.xml.internal.security.keys.content.x509;
-
--
--
- import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
- import com.sun.org.apache.xml.internal.security.utils.Constants;
- import com.sun.org.apache.xml.internal.security.utils.SignatureElementProxy;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
-
--
- /**
- *
-- *
-- *
-- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- *
- */
- public class XMLX509CRL extends SignatureElementProxy
- implements XMLX509DataContent {
-
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(XMLX509CRL.class.getName());
--
- /**
- * Constructor XMLX509CRL
- *
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509Certificate.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509Certificate.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509Certificate.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509Certificate.java
-@@ -20,8 +20,6 @@
- */
- package com.sun.org.apache.xml.internal.security.keys.content.x509;
-
--
--
- import java.io.ByteArrayInputStream;
- import java.security.PublicKey;
- import java.security.cert.CertificateException;
-@@ -34,18 +32,13 @@
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
-
--
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class XMLX509Certificate extends SignatureElementProxy
- implements XMLX509DataContent {
-
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(XMLX509Certificate.class.getName());
--
- /** Field JCA_CERT_ID */
- public static final String JCA_CERT_ID = "X.509";
-
-@@ -146,23 +139,25 @@
- return null;
- }
-
-- /** @inheritDoc */
-- public boolean equals(Object obj) {
-+ /** @inheritDoc */
-+ public boolean equals(Object obj) {
-
-- try {
-- if (!obj.getClass().getName().equals(this.getClass().getName())) {
-+ if (obj == null) {
- return false;
-- }
-+ }
-+ if (!this.getClass().getName().equals(obj.getClass().getName())) {
-+ return false;
-+ }
-+ XMLX509Certificate other = (XMLX509Certificate) obj;
-+ try {
-
-- XMLX509Certificate other = (XMLX509Certificate) obj;
--
-- /** $todo$ or should be create X509Certificates and use the equals() from the Certs */
-- return java.security.MessageDigest.isEqual(other.getCertificateBytes(),
-- this.getCertificateBytes());
-- } catch (XMLSecurityException ex) {
-- return false;
-- }
-- }
-+ /** $todo$ or should be create X509Certificates and use the equals() from the Certs */
-+ return java.security.MessageDigest.isEqual
-+ (other.getCertificateBytes(), this.getCertificateBytes());
-+ } catch (XMLSecurityException ex) {
-+ return false;
-+ }
-+ }
-
- /** @inheritDoc */
- public String getBaseLocalName() {
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509DataContent.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509DataContent.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509DataContent.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509DataContent.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -28,7 +27,7 @@
- /**
- * Just used for tagging contents that are allowed inside a ds:X509Data Element.
- *
-- * @author $Author: blautenb $
-+ * @author $Author: mullan $
- */
- public interface XMLX509DataContent {
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509IssuerSerial.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509IssuerSerial.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509IssuerSerial.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509IssuerSerial.java
-@@ -20,8 +20,6 @@
- */
- package com.sun.org.apache.xml.internal.security.keys.content.x509;
-
--
--
- import java.math.BigInteger;
- import java.security.cert.X509Certificate;
-
-@@ -33,148 +31,139 @@
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
-
--
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class XMLX509IssuerSerial extends SignatureElementProxy
- implements XMLX509DataContent {
-
-- /** {@link java.util.logging} logging facility */
-+ /** {@link java.util.logging} logging facility */
- static java.util.logging.Logger log =
- java.util.logging.Logger.getLogger(
- XMLX509IssuerSerial.class.getName());
-
-- /**
-- * Constructor XMLX509IssuerSerial
-- *
-- * @param element
-- * @param BaseURI
-- * @throws XMLSecurityException
-- */
-- public XMLX509IssuerSerial(Element element, String BaseURI)
-+ /**
-+ * Constructor XMLX509IssuerSerial
-+ *
-+ * @param element
-+ * @param baseURI
-+ * @throws XMLSecurityException
-+ */
-+ public XMLX509IssuerSerial(Element element, String baseURI)
- throws XMLSecurityException {
-- super(element, BaseURI);
-- }
-+ super(element, baseURI);
-+ }
-
-- /**
-- * Constructor XMLX509IssuerSerial
-- *
-- * @param doc
-- * @param X509IssuerName
-- * @param X509SerialNumber
-- */
-- public XMLX509IssuerSerial(Document doc, String X509IssuerName,
-- BigInteger X509SerialNumber) {
-+ /**
-+ * Constructor XMLX509IssuerSerial
-+ *
-+ * @param doc
-+ * @param x509IssuerName
-+ * @param x509SerialNumber
-+ */
-+ public XMLX509IssuerSerial(Document doc, String x509IssuerName,
-+ BigInteger x509SerialNumber) {
-
-- super(doc);
-+ super(doc);
-+ XMLUtils.addReturnToElement(this._constructionElement);
-+ addTextElement(x509IssuerName, Constants._TAG_X509ISSUERNAME);
-+ addTextElement(x509SerialNumber.toString(), Constants._TAG_X509SERIALNUMBER);
-+ }
-
-- XMLUtils.addReturnToElement(this._constructionElement);
-- this.addTextElement(X509IssuerName, Constants._TAG_X509ISSUERNAME);
-- XMLUtils.addReturnToElement(this._constructionElement);
-- this.addTextElement(X509SerialNumber.toString(), Constants._TAG_X509SERIALNUMBER);
-- }
-+ /**
-+ * Constructor XMLX509IssuerSerial
-+ *
-+ * @param doc
-+ * @param x509IssuerName
-+ * @param x509SerialNumber
-+ */
-+ public XMLX509IssuerSerial(Document doc, String x509IssuerName,
-+ String x509SerialNumber) {
-+ this(doc, x509IssuerName, new BigInteger(x509SerialNumber));
-+ }
-
-- /**
-- * Constructor XMLX509IssuerSerial
-- *
-- * @param doc
-- * @param X509IssuerName
-- * @param X509SerialNumber
-- */
-- public XMLX509IssuerSerial(Document doc, String X509IssuerName,
-- String X509SerialNumber) {
-- this(doc, X509IssuerName, new BigInteger(X509SerialNumber));
-- }
-+ /**
-+ * Constructor XMLX509IssuerSerial
-+ *
-+ * @param doc
-+ * @param x509IssuerName
-+ * @param x509SerialNumber
-+ */
-+ public XMLX509IssuerSerial(Document doc, String x509IssuerName,
-+ int x509SerialNumber) {
-+ this(doc, x509IssuerName,
-+ new BigInteger(Integer.toString(x509SerialNumber)));
-+ }
-
-- /**
-- * Constructor XMLX509IssuerSerial
-- *
-- * @param doc
-- * @param X509IssuerName
-- * @param X509SerialNumber
-- */
-- public XMLX509IssuerSerial(Document doc, String X509IssuerName,
-- int X509SerialNumber) {
-- this(doc, X509IssuerName,
-- new BigInteger(Integer.toString(X509SerialNumber)));
-- }
-+ /**
-+ * Constructor XMLX509IssuerSerial
-+ *
-+ * @param doc
-+ * @param x509certificate
-+ */
-+ public XMLX509IssuerSerial(Document doc, X509Certificate x509certificate) {
-
-- /**
-- * Constructor XMLX509IssuerSerial
-- *
-- * @param doc
-- * @param x509certificate
-- */
-- public XMLX509IssuerSerial(Document doc, X509Certificate x509certificate) {
-+ this(doc,
-+ RFC2253Parser.normalize(x509certificate.getIssuerDN().getName()),
-+ x509certificate.getSerialNumber());
-+ }
-
-- this(doc,
-- RFC2253Parser.normalize(x509certificate.getIssuerDN().getName()),
-- x509certificate.getSerialNumber());
-- }
-+ /**
-+ * Method getSerialNumber
-+ *
-+ * @return the serial number
-+ */
-+ public BigInteger getSerialNumber() {
-
-- /**
-- * Method getSerialNumber
-- *
-- *
-- * @return the serial number
-- */
-- public BigInteger getSerialNumber() {
-+ String text = this.getTextFromChildElement
-+ (Constants._TAG_X509SERIALNUMBER, Constants.SignatureSpecNS);
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "X509SerialNumber text: " + text);
-
-- String text =
-- this.getTextFromChildElement(Constants._TAG_X509SERIALNUMBER,
-- Constants.SignatureSpecNS);
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "In dem X509SerialNumber wurde gefunden: " + text);
-+ return new BigInteger(text);
-+ }
-
-- return new BigInteger(text);
-- }
-+ /**
-+ * Method getSerialNumberInteger
-+ *
-+ * @return the serial number as plain int
-+ */
-+ public int getSerialNumberInteger() {
-+ return this.getSerialNumber().intValue();
-+ }
-
-- /**
-- * Method getSerialNumberInteger
-- *
-- *
-- * @return the serial number as plain int
-- */
-- public int getSerialNumberInteger() {
-- return this.getSerialNumber().intValue();
-- }
-+ /**
-+ * Method getIssuerName
-+ *
-+ * @return the issuer name
-+ */
-+ public String getIssuerName() {
-
-- /**
-- * Method getIssuerName
-- *
-- *
-- * @return the issuer name
-- */
-- public String getIssuerName() {
-+ return RFC2253Parser
-+ .normalize(this
-+ .getTextFromChildElement(Constants._TAG_X509ISSUERNAME,
-+ Constants.SignatureSpecNS));
-+ }
-
-- return RFC2253Parser
-- .normalize(this
-- .getTextFromChildElement(Constants._TAG_X509ISSUERNAME,
-- Constants.SignatureSpecNS));
-- }
-+ /** @inheritDoc */
-+ public boolean equals(Object obj) {
-
-- /** @inheritDoc */
-- public boolean equals(Object obj) {
-+ if (obj == null) {
-+ return false;
-+ }
-+ if (!this.getClass().getName().equals(obj.getClass().getName())) {
-+ return false;
-+ }
-
-- if (!obj.getClass().getName().equals(this.getClass().getName())) {
-- return false;
-- }
-+ XMLX509IssuerSerial other = (XMLX509IssuerSerial) obj;
-
-- XMLX509IssuerSerial other = (XMLX509IssuerSerial) obj;
-+ return this.getSerialNumber().equals(other.getSerialNumber())
-+ && this.getIssuerName().equals(other.getIssuerName());
-+ }
-
--
-- if (other.getSerialNumber().equals(this.getSerialNumber())
-- && other.getIssuerName().equals(this.getIssuerName())) {
-- return true;
-- }
--
-- return false;
-- }
--
-- /** @inheritDoc */
-- public String getBaseLocalName() {
-- return Constants._TAG_X509ISSUERSERIAL;
-- }
-+ /** @inheritDoc */
-+ public String getBaseLocalName() {
-+ return Constants._TAG_X509ISSUERSERIAL;
-+ }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509SKI.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509SKI.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509SKI.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509SKI.java
-@@ -20,8 +20,6 @@
- */
- package com.sun.org.apache.xml.internal.security.keys.content.x509;
-
--
--
- import java.io.IOException;
- import java.io.ByteArrayInputStream;
- import java.io.InputStream;
-@@ -36,192 +34,143 @@
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
-
--import sun.security.util.DerValue;
--
--
- /**
- * Handles SubjectKeyIdentifier (SKI) for X.509v3.
- *
-- * @author $Author: raul $
-- * @see <A HREF="http://java.sun.com/products/jdk/1.2/docs/api/java/security/cert/X509Extension.html">Interface X509Extension</A>
-+ * @author $Author: mullan $
-+ * @see <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/security/cert/X509Extension.html">Interface X509Extension</A>
- */
- public class XMLX509SKI extends SignatureElementProxy
- implements XMLX509DataContent {
-
-- /** {@link java.util.logging} logging facility */
-+ /** {@link java.util.logging} logging facility */
- static java.util.logging.Logger log =
- java.util.logging.Logger.getLogger(XMLX509SKI.class.getName());
-
-- /**
-- * <CODE>SubjectKeyIdentifier (id-ce-subjectKeyIdentifier) (2.5.29.14)</CODE>:
-- * This extension identifies the public key being certified. It enables
-- * distinct keys used by the same subject to be differentiated
-- * (e.g., as key updating occurs).
-- * <BR />
-- * A key identifer shall be unique with respect to all key identifiers
-- * for the subject with which it is used. This extension is always non-critical.
-- */
-- public static final String SKI_OID = "2.5.29.14";
-+ /**
-+ * <CODE>SubjectKeyIdentifier (id-ce-subjectKeyIdentifier) (2.5.29.14)</CODE>:
-+ * This extension identifies the public key being certified. It enables
-+ * distinct keys used by the same subject to be differentiated
-+ * (e.g., as key updating occurs).
-+ * <BR />
-+ * A key identifer shall be unique with respect to all key identifiers
-+ * for the subject with which it is used. This extension is always non-critical.
-+ */
-+ public static final String SKI_OID = "2.5.29.14";
-
-- /**
-- * Constructor X509SKI
-- *
-- * @param doc
-- * @param skiBytes
-- */
-- public XMLX509SKI(Document doc, byte[] skiBytes) {
-+ /**
-+ * Constructor X509SKI
-+ *
-+ * @param doc
-+ * @param skiBytes
-+ */
-+ public XMLX509SKI(Document doc, byte[] skiBytes) {
-+ super(doc);
-+ this.addBase64Text(skiBytes);
-+ }
-
-- super(doc);
-+ /**
-+ * Constructor XMLX509SKI
-+ *
-+ * @param doc
-+ * @param x509certificate
-+ * @throws XMLSecurityException
-+ */
-+ public XMLX509SKI(Document doc, X509Certificate x509certificate)
-+ throws XMLSecurityException {
-+ super(doc);
-+ this.addBase64Text(XMLX509SKI.getSKIBytesFromCert(x509certificate));
-+ }
-
-- this.addBase64Text(skiBytes);
-- }
-+ /**
-+ * Constructor XMLX509SKI
-+ *
-+ * @param element
-+ * @param BaseURI
-+ * @throws XMLSecurityException
-+ */
-+ public XMLX509SKI(Element element, String BaseURI)
-+ throws XMLSecurityException {
-+ super(element, BaseURI);
-+ }
-
-- /**
-- * Constructor XMLX509SKI
-- *
-- * @param doc
-- * @param x509certificate
-- * @throws XMLSecurityException
-- */
-- public XMLX509SKI(Document doc, X509Certificate x509certificate)
-- throws XMLSecurityException {
-+ /**
-+ * Method getSKIBytes
-+ *
-+ * @return the skibytes
-+ * @throws XMLSecurityException
-+ */
-+ public byte[] getSKIBytes() throws XMLSecurityException {
-+ return this.getBytesFromTextChild();
-+ }
-
-- super(doc);
-+ /**
-+ * Method getSKIBytesFromCert
-+ *
-+ * @param cert
-+ * @return ski bytes from the given certificate
-+ *
-+ * @throws XMLSecurityException
-+ * @see java.security.cert.X509Extension#getExtensionValue(java.lang.String)
-+ */
-+ public static byte[] getSKIBytesFromCert(X509Certificate cert)
-+ throws XMLSecurityException {
-
-- this.addBase64Text(XMLX509SKI.getSKIBytesFromCert(x509certificate));
-- }
--
-- /**
-- * Constructor XMLX509SKI
-- *
-- * @param element
-- * @param BaseURI
-- * @throws XMLSecurityException
-- */
-- public XMLX509SKI(Element element, String BaseURI)
-- throws XMLSecurityException {
-- super(element, BaseURI);
-- }
--
-- /**
-- * Method getSKIBytes
-- *
-- * @return the skibytes
-- * @throws XMLSecurityException
-- */
-- public byte[] getSKIBytes() throws XMLSecurityException {
-- return this.getBytesFromTextChild();
-- }
--
-- /**
-- * Method getSKIBytesFromCert
-- *
-- * @param cert
-- * @return sky bytes from the given certificate
-- *
-- * @throws XMLSecurityException
-- * @see java.security.cert.X509Extension#getExtensionValue(java.lang.String)
-- */
-- public static byte[] getSKIBytesFromCert(X509Certificate cert)
-- throws XMLSecurityException {
--
-- try {
--
-- /*
-- * Gets the DER-encoded OCTET string for the extension value (extnValue)
-- * identified by the passed-in oid String. The oid string is
-- * represented by a set of positive whole numbers separated by periods.
-- */
-- byte[] derEncodedValue = cert.getExtensionValue(XMLX509SKI.SKI_OID);
--
-- if (cert.getVersion() < 3) {
-+ if (cert.getVersion() < 3) {
- Object exArgs[] = { new Integer(cert.getVersion()) };
--
- throw new XMLSecurityException("certificate.noSki.lowVersion",
- exArgs);
-- }
-+ }
-
-- byte[] extensionValue = null;
-+ /*
-+ * Gets the DER-encoded OCTET string for the extension value
-+ * (extnValue) identified by the passed-in oid String. The oid
-+ * string is represented by a set of positive whole numbers
-+ * separated by periods.
-+ */
-+ byte[] extensionValue = cert.getExtensionValue(XMLX509SKI.SKI_OID);
-+ if (extensionValue == null) {
-+ throw new XMLSecurityException("certificate.noSki.null");
-+ }
-
-- /**
-- * Use sun.security.util.DerValue if it is present.
-- */
-- try {
-- DerValue dervalue = new DerValue(derEncodedValue);
-- if (dervalue == null) {
-- throw new XMLSecurityException("certificate.noSki.null");
-- }
-- if (dervalue.tag != DerValue.tag_OctetString) {
-- throw new XMLSecurityException("certificate.noSki.notOctetString");
-- }
-- extensionValue = dervalue.getOctetString();
-- } catch (NoClassDefFoundError e) {
-- }
-+ /**
-+ * Strip away first four bytes from the extensionValue
-+ * The first two bytes are the tag and length of the extensionValue
-+ * OCTET STRING, and the next two bytes are the tag and length of
-+ * the skid OCTET STRING.
-+ */
-+ byte skidValue[] = new byte[extensionValue.length - 4];
-
-- /**
-- * Fall back to org.bouncycastle.asn1.DERInputStream
-- */
-- if (extensionValue == null) {
-- try {
-- Class clazz = Class.forName("org.bouncycastle.asn1.DERInputStream");
-- if (clazz != null) {
-- Constructor constructor = clazz.getConstructor(new Class[]{InputStream.class});
-- InputStream is = (InputStream) constructor.newInstance(new Object[]{new ByteArrayInputStream(derEncodedValue)});
-- Method method = clazz.getMethod("readObject", new Class[]{});
-- Object obj = method.invoke(is, new Object[]{});
-- if (obj == null) {
-- throw new XMLSecurityException("certificate.noSki.null");
-- }
-- Class clazz2 = Class.forName("org.bouncycastle.asn1.ASN1OctetString");
-- if (!clazz2.isInstance(obj)) {
-- throw new XMLSecurityException("certificate.noSki.notOctetString");
-- }
-- Method method2 = clazz2.getMethod("getOctets", new Class[]{});
-- extensionValue = (byte[]) method2.invoke(obj, new Object[]{});
-- }
-- } catch (Throwable t) {
-- }
-- }
-+ System.arraycopy(extensionValue, 4, skidValue, 0, skidValue.length);
-
-- /**
-- * Strip away first two bytes from the DerValue (tag and length)
-- */
-- byte abyte0[] = new byte[extensionValue.length - 2];
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, "Base64 of SKI is " + Base64.encode(skidValue));
-+ }
-
-- System.arraycopy(extensionValue, 2, abyte0, 0, abyte0.length);
-+ return skidValue;
-+ }
-
-- /*
-- byte abyte0[] = new byte[derEncodedValue.length - 4];
-- System.arraycopy(derEncodedValue, 4, abyte0, 0, abyte0.length);
-- */
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Base64 of SKI is " + Base64.encode(abyte0));
-+ /** @inheritDoc */
-+ public boolean equals(Object obj) {
-+ if (obj == null) {
-+ return false;
-+ }
-+ if (!this.getClass().getName().equals(obj.getClass().getName())) {
-+ return false;
-+ }
-
-- return abyte0;
-- } catch (IOException ex) {
-- throw new XMLSecurityException("generic.EmptyMessage", ex);
-- }
-- }
-+ XMLX509SKI other = (XMLX509SKI) obj;
-
-- /** @inheritDoc */
-- public boolean equals(Object obj) {
-+ try {
-+ return java.security.MessageDigest.isEqual(other.getSKIBytes(),
-+ this.getSKIBytes());
-+ } catch (XMLSecurityException ex) {
-+ return false;
-+ }
-+ }
-
-- if (!obj.getClass().getName().equals(this.getClass().getName())) {
-- return false;
-- }
--
-- XMLX509SKI other = (XMLX509SKI) obj;
--
-- try {
-- return java.security.MessageDigest.isEqual(other.getSKIBytes(),
-- this.getSKIBytes());
-- } catch (XMLSecurityException ex) {
-- return false;
-- }
-- }
--
-- /** @inheritDoc */
-- public String getBaseLocalName() {
-- return Constants._TAG_X509SKI;
-- }
-+ /** @inheritDoc */
-+ public String getBaseLocalName() {
-+ return Constants._TAG_X509SKI;
-+ }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509SubjectName.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509SubjectName.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509SubjectName.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509SubjectName.java
-@@ -20,8 +20,6 @@
- */
- package com.sun.org.apache.xml.internal.security.keys.content.x509;
-
--
--
- import java.security.cert.X509Certificate;
-
- import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
-@@ -33,15 +31,11 @@
-
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class XMLX509SubjectName extends SignatureElementProxy
- implements XMLX509DataContent {
-
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(XMLX509SubjectName.class.getName());
--
- /**
- * Constructor X509SubjectName
- *
-@@ -88,23 +82,21 @@
- return RFC2253Parser.normalize(this.getTextFromTextChild());
- }
-
-- /** @inheritDoc */
-- public boolean equals(Object obj) {
-+ /** @inheritDoc */
-+ public boolean equals(Object obj) {
-+ if (obj == null) {
-+ return false;
-+ }
-
-- if (!obj.getClass().getName().equals(this.getClass().getName())) {
-- return false;
-- }
-+ if (!this.getClass().getName().equals(obj.getClass().getName())) {
-+ return false;
-+ }
-
-- XMLX509SubjectName other = (XMLX509SubjectName) obj;
-- String otherSubject = other.getSubjectName();
-- String thisSubject = this.getSubjectName();
-+ XMLX509SubjectName other = (XMLX509SubjectName) obj;
-+ String otherSubject = other.getSubjectName();
-+ String thisSubject = this.getSubjectName();
-
-- if (otherSubject.equals(thisSubject)) {
-- return true;
-- }
--
-- return false;
--
-+ return thisSubject.equals(otherSubject);
- }
-
- /** @inheritDoc */
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/InvalidKeyResolverException.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/InvalidKeyResolverException.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/InvalidKeyResolverException.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/InvalidKeyResolverException.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -29,7 +28,7 @@
- /**
- *
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class InvalidKeyResolverException extends XMLSecurityException {
-
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolver.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolver.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolver.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolver.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -26,6 +25,7 @@
- import java.security.PublicKey;
- import java.security.cert.X509Certificate;
- import java.util.ArrayList;
-+import java.util.Iterator;
- import java.util.List;
-
- import javax.crypto.SecretKey;
-@@ -39,7 +39,8 @@
- * KeyResolver is factory class for subclass of KeyResolverSpi that
- * represent child element of KeyInfo.
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
-+ * @version %I%, %G%
- */
- public class KeyResolver {
-
-@@ -72,6 +73,7 @@
- InstantiationException {
- this._resolverSpi =
- (KeyResolverSpi) Class.forName(className).newInstance();
-+ this._resolverSpi.setGlobalResolver(true);
- }
-
- /**
-@@ -83,21 +85,17 @@
- return KeyResolver._resolverVector.size();
- }
-
-- /**
-- * Method item
-- *
-- * @param i
-- * @return the number i resolver registerd
-- * @throws KeyResolverException
-- */
-- public static KeyResolver item(int i) throws KeyResolverException {
--
-- KeyResolver resolver = (KeyResolver) KeyResolver._resolverVector.get(i);
-- if (resolver==null) {
-- throw new KeyResolverException("utils.resolver.noClass");
-- }
--
-- return resolver;
-+ public static void hit(Iterator hintI) {
-+ ResolverIterator hint = (ResolverIterator) hintI;
-+ int i = hint.i;
-+ if (i!=1 && hint.res ==_resolverVector) {
-+ List resolverVector=(List)((ArrayList)_resolverVector).clone();
-+ Object ob=resolverVector.remove(i-1);
-+ resolverVector.add(0,ob);
-+ _resolverVector=resolverVector;
-+ } else {
-+ //System.out.println("KeyResolver hitting");
-+ }
- }
-
- /**
-@@ -106,17 +104,19 @@
- * @param element
- * @param BaseURI
- * @param storage
-- * @return the instance that happends to implement the thing.
-+ * @return The certificate represented by the element.
- *
- * @throws KeyResolverException
- */
-- public static final KeyResolver getInstance(
-+ public static final X509Certificate getX509Certificate(
- Element element, String BaseURI, StorageResolver storage)
- throws KeyResolverException {
-
-- for (int i = 0; i < KeyResolver._resolverVector.size(); i++) {
-+ // use the old vector to not be hit by updates
-+ List resolverVector = KeyResolver._resolverVector;
-+ for (int i = 0; i < resolverVector.size(); i++) {
- KeyResolver resolver=
-- (KeyResolver) KeyResolver._resolverVector.get(i);
-+ (KeyResolver) resolverVector.get(i);
-
- if (resolver==null) {
- Object exArgs[] = {
-@@ -127,11 +127,63 @@
-
- throw new KeyResolverException("utils.resolver.noClass", exArgs);
- }
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "check resolvability by class " + resolver.getClass());
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "check resolvability by class " + resolver.getClass());
-
-- if (resolver.canResolve(element, BaseURI, storage)) {
-- return resolver;
-+ X509Certificate cert=resolver.resolveX509Certificate(element, BaseURI, storage);
-+ if (cert!=null) {
-+ return cert;
-+ }
-+ }
-+
-+ Object exArgs[] = {
-+ (((element != null) && (element.getNodeType() == Node.ELEMENT_NODE))
-+ ? element.getTagName()
-+ : "null") };
-+
-+ throw new KeyResolverException("utils.resolver.noClass", exArgs);
-+ }
-+ /**
-+ * Method getInstance
-+ *
-+ * @param element
-+ * @param BaseURI
-+ * @param storage
-+ * @return the public key contained in the element
-+ *
-+ * @throws KeyResolverException
-+ */
-+ public static final PublicKey getPublicKey(
-+ Element element, String BaseURI, StorageResolver storage)
-+ throws KeyResolverException {
-+
-+ List resolverVector = KeyResolver._resolverVector;
-+ for (int i = 0; i < resolverVector.size(); i++) {
-+ KeyResolver resolver=
-+ (KeyResolver) resolverVector.get(i);
-+
-+ if (resolver==null) {
-+ Object exArgs[] = {
-+ (((element != null)
-+ && (element.getNodeType() == Node.ELEMENT_NODE))
-+ ? element.getTagName()
-+ : "null") };
-+
-+ throw new KeyResolverException("utils.resolver.noClass", exArgs);
-+ }
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "check resolvability by class " + resolver.getClass());
-+
-+ PublicKey cert=resolver.resolvePublicKey(element, BaseURI, storage);
-+ if (cert!=null) {
-+ if (i!=0 && resolverVector==_resolverVector) {
-+ //update resolver.
-+ resolverVector=(List)((ArrayList)_resolverVector).clone();
-+ Object ob=resolverVector.remove(i);
-+ resolverVector.add(0,ob);
-+ _resolverVector=resolverVector;
-+ }
-+ return cert;
- }
- }
-
-@@ -182,34 +234,6 @@
- KeyResolver._resolverVector.add(0, className);
- }
-
-- /*
-- * Method resolve
-- *
-- * @param element
-- *
-- * @throws KeyResolverException
-- */
--
-- /**
-- * Method resolveStatic
-- *
-- * @param element
-- * @param BaseURI
-- * @param storage
-- * @return resolve from the static register an element
-- *
-- * @throws KeyResolverException
-- */
-- public static PublicKey resolveStatic(
-- Element element, String BaseURI, StorageResolver storage)
-- throws KeyResolverException {
--
-- KeyResolver myResolver = KeyResolver.getInstance(element, BaseURI,
-- storage);
--
-- return myResolver.resolvePublicKey(element, BaseURI, storage);
-- }
--
- /**
- * Method resolve
- *
-@@ -223,7 +247,7 @@
- public PublicKey resolvePublicKey(
- Element element, String BaseURI, StorageResolver storage)
- throws KeyResolverException {
-- return this._resolverSpi.engineResolvePublicKey(element, BaseURI, storage);
-+ return this._resolverSpi.engineLookupAndResolvePublicKey(element, BaseURI, storage);
- }
-
- /**
-@@ -239,7 +263,7 @@
- public X509Certificate resolveX509Certificate(
- Element element, String BaseURI, StorageResolver storage)
- throws KeyResolverException {
-- return this._resolverSpi.engineResolveX509Certificate(element, BaseURI,
-+ return this._resolverSpi.engineLookupResolveX509Certificate(element, BaseURI,
- storage);
- }
-
-@@ -253,7 +277,7 @@
- public SecretKey resolveSecretKey(
- Element element, String BaseURI, StorageResolver storage)
- throws KeyResolverException {
-- return this._resolverSpi.engineResolveSecretKey(element, BaseURI,
-+ return this._resolverSpi.engineLookupAndResolveSecretKey(element, BaseURI,
- storage);
- }
-
-@@ -277,14 +301,6 @@
- return this._resolverSpi.engineGetProperty(key);
- }
-
-- /**
-- * Method getPropertyKeys
-- *
-- * @return the properties key registerd in this resolver
-- */
-- public String[] getPropertyKeys() {
-- return this._resolverSpi.engineGetPropertyKeys();
-- }
-
- /**
- * Method understandsProperty
-@@ -296,18 +312,6 @@
- return this._resolverSpi.understandsProperty(propertyToTest);
- }
-
-- /**
-- * Method canResolve
-- *
-- * @param element
-- * @param BaseURI
-- * @param storage
-- * @return true if can resolve the key in the element
-- */
-- public boolean canResolve(Element element, String BaseURI,
-- StorageResolver storage) {
-- return this._resolverSpi.engineCanResolve(element, BaseURI, storage);
-- }
-
- /**
- * Method resolverClassName
-@@ -317,4 +321,37 @@
- public String resolverClassName() {
- return this._resolverSpi.getClass().getName();
- }
-+
-+ static class ResolverIterator implements Iterator {
-+ List res;
-+ Iterator it;
-+ int i;
-+ public ResolverIterator(List list) {
-+ res = list;
-+ it = res.iterator();
-+ }
-+ public boolean hasNext() {
-+ // TODO Auto-generated method stub
-+ return it.hasNext();
-+ }
-+
-+ public Object next() {
-+ i++;
-+ KeyResolver resolver = (KeyResolver) it.next();
-+ if (resolver==null) {
-+ throw new RuntimeException("utils.resolver.noClass");
-+ }
-+
-+ return resolver._resolverSpi;
-+ }
-+
-+ public void remove() {
-+ // TODO Auto-generated method stub
-+
-+ }
-+
-+ };
-+ public static Iterator iterator() {
-+ return new ResolverIterator(_resolverVector);
-+ }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolverException.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolverException.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolverException.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolverException.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -31,7 +30,7 @@
- *
- *
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- *
- */
- public class KeyResolverException extends XMLSecurityException {
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolverSpi.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolverSpi.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolverSpi.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolverSpi.java
-@@ -20,17 +20,15 @@
- */
- package com.sun.org.apache.xml.internal.security.keys.keyresolver;
-
--
--
- import java.security.PublicKey;
- import java.security.cert.X509Certificate;
-+import java.util.HashMap;
-
- import javax.crypto.SecretKey;
-
- import com.sun.org.apache.xml.internal.security.keys.storage.StorageResolver;
- import org.w3c.dom.Element;
-
--
- /**
- * This class is abstract class for a child KeyInfo Elemnet.
- *
-@@ -41,14 +39,10 @@
- * JAVACLASS="MyPackage.MyKeyValueImpl"//gt;
- * </PRE>
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
-+ * @version $Revision: 1.5 $
- */
- public abstract class KeyResolverSpi {
--
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(KeyResolverSpi.class.getName());
--
- /**
- * This method helps the {@link com.sun.org.apache.xml.internal.security.utils.resolver.ResourceResolver} to decide whether a
- * {@link com.sun.org.apache.xml.internal.security.utils.resolver.ResourceResolverSpi} is able to perform the requested action.
-@@ -56,10 +50,12 @@
- * @param element
- * @param BaseURI
- * @param storage
-- * @return true if can resolve the key in the element
-+ * @return
- */
-- abstract public boolean engineCanResolve(Element element, String BaseURI,
-- StorageResolver storage);
-+ public boolean engineCanResolve(Element element, String BaseURI,
-+ StorageResolver storage) {
-+ throw new UnsupportedOperationException();
-+ }
-
- /**
- * Method engineResolvePublicKey
-@@ -71,9 +67,60 @@
- *
- * @throws KeyResolverException
- */
-- abstract public PublicKey engineResolvePublicKey(
-+ public PublicKey engineResolvePublicKey(
- Element element, String BaseURI, StorageResolver storage)
-- throws KeyResolverException;
-+ throws KeyResolverException {
-+ throw new UnsupportedOperationException();
-+ };
-+
-+ /**
-+ * Method engineResolvePublicKey
-+ *
-+ * @param element
-+ * @param BaseURI
-+ * @param storage
-+ * @return resolved public key from the registered from the element.
-+ *
-+ * @throws KeyResolverException
-+ */
-+ public PublicKey engineLookupAndResolvePublicKey(
-+ Element element, String BaseURI, StorageResolver storage)
-+ throws KeyResolverException {
-+ KeyResolverSpi tmp = cloneIfNeeded();
-+ if (!tmp.engineCanResolve(element, BaseURI, storage))
-+ return null;
-+ return tmp.engineResolvePublicKey(element, BaseURI, storage);
-+ }
-+
-+ private KeyResolverSpi cloneIfNeeded() throws KeyResolverException {
-+ KeyResolverSpi tmp=this;
-+ if (globalResolver) {
-+ try {
-+ tmp = (KeyResolverSpi) getClass().newInstance();
-+ } catch (InstantiationException e) {
-+ throw new KeyResolverException("",e);
-+ } catch (IllegalAccessException e) {
-+ throw new KeyResolverException("",e);
-+ }
-+ }
-+ return tmp;
-+ }
-+
-+ /**
-+ * Method engineResolveCertificate
-+ *
-+ * @param element
-+ * @param BaseURI
-+ * @param storage
-+ * @return resolved X509Certificate key from the registered from the elements
-+ *
-+ * @throws KeyResolverException
-+ */
-+ public X509Certificate engineResolveX509Certificate(
-+ Element element, String BaseURI, StorageResolver storage)
-+ throws KeyResolverException{
-+ throw new UnsupportedOperationException();
-+ };
-
- /**
- * Method engineResolveCertificate
-@@ -85,9 +132,30 @@
- *
- * @throws KeyResolverException
- */
-- abstract public X509Certificate engineResolveX509Certificate(
-+ public X509Certificate engineLookupResolveX509Certificate(
- Element element, String BaseURI, StorageResolver storage)
-- throws KeyResolverException;
-+ throws KeyResolverException {
-+ KeyResolverSpi tmp = cloneIfNeeded();
-+ if (!tmp.engineCanResolve(element, BaseURI, storage))
-+ return null;
-+ return tmp.engineResolveX509Certificate(element, BaseURI, storage);
-+
-+ }
-+ /**
-+ * Method engineResolveSecretKey
-+ *
-+ * @param element
-+ * @param BaseURI
-+ * @param storage
-+ * @return resolved SecretKey key from the registered from the elements
-+ *
-+ * @throws KeyResolverException
-+ */
-+ public SecretKey engineResolveSecretKey(
-+ Element element, String BaseURI, StorageResolver storage)
-+ throws KeyResolverException{
-+ throw new UnsupportedOperationException();
-+ };
-
- /**
- * Method engineResolveSecretKey
-@@ -99,12 +167,19 @@
- *
- * @throws KeyResolverException
- */
-- abstract public SecretKey engineResolveSecretKey(
-+ public SecretKey engineLookupAndResolveSecretKey(
- Element element, String BaseURI, StorageResolver storage)
-- throws KeyResolverException;
-+ throws KeyResolverException {
-+ KeyResolverSpi tmp = cloneIfNeeded();
-+ if (!tmp.engineCanResolve(element, BaseURI, storage))
-+ return null;
-+ return tmp.engineResolveSecretKey(element, BaseURI, storage);
-+ }
-
- /** Field _properties */
-- protected java.util.Map _properties = new java.util.HashMap(10);
-+ protected java.util.Map _properties = null;
-+
-+ protected boolean globalResolver=false;
-
- /**
- * Method engineSetProperty
-@@ -113,19 +188,8 @@
- * @param value
- */
- public void engineSetProperty(String key, String value) {
--
-- java.util.Iterator i = this._properties.keySet().iterator();
--
-- while (i.hasNext()) {
-- String c = (String) i.next();
--
-- if (c.equals(key)) {
-- key = c;
--
-- break;
-- }
-- }
--
-+ if (_properties==null)
-+ _properties=new HashMap();
- this._properties.put(key, value);
- }
-
-@@ -136,49 +200,26 @@
- * @return obtain the property appointed by key
- */
- public String engineGetProperty(String key) {
--
-- java.util.Iterator i = this._properties.keySet().iterator();
--
-- while (i.hasNext()) {
-- String c = (String) i.next();
--
-- if (c.equals(key)) {
-- key = c;
--
-- break;
-- }
-- }
-+ if (_properties==null)
-+ return null;
-
- return (String) this._properties.get(key);
- }
-
- /**
-- * Method engineGetPropertyKeys
-- *
-- * @return the keys of properties known by this resolver
-- */
-- public String[] engineGetPropertyKeys() {
-- return new String[0];
-- }
--
-- /**
- * Method understandsProperty
- *
- * @param propertyToTest
- * @return true if understood the property
- */
- public boolean understandsProperty(String propertyToTest) {
-+ if (_properties==null)
-+ return false;
-
-- String[] understood = this.engineGetPropertyKeys();
-+ return this._properties.get(propertyToTest)!=null;
-+ }
-+ public void setGlobalResolver(boolean globalResolver) {
-+ this.globalResolver = globalResolver;
-+ }
-
-- if (understood != null) {
-- for (int i = 0; i < understood.length; i++) {
-- if (understood[i].equals(propertyToTest)) {
-- return true;
-- }
-- }
-- }
--
-- return false;
-- }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/DSAKeyValueResolver.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/DSAKeyValueResolver.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/DSAKeyValueResolver.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/DSAKeyValueResolver.java
-@@ -37,46 +37,10 @@
-
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class DSAKeyValueResolver extends KeyResolverSpi {
-
-- /** Field _dsaKeyElement */
-- private Element _dsaKeyElement = null;
--
-- /** @inheritDoc */
-- public boolean engineCanResolve(Element element, String BaseURI,
-- StorageResolver storage) {
--
-- if (element == null) {
-- return false;
-- }
--
-- boolean isKeyValue = XMLUtils.elementIsInSignatureSpace(element,
-- Constants._TAG_KEYVALUE);
-- boolean isDSAKeyValue = XMLUtils.elementIsInSignatureSpace(element,
-- Constants._TAG_DSAKEYVALUE);
--
-- if (isKeyValue) {
--
-- this._dsaKeyElement =
-- XMLUtils.selectDsNode(element.getFirstChild(),Constants._TAG_DSAKEYVALUE,0);
--
-- if (this._dsaKeyElement != null) {
-- return true;
-- }
-- } else if (isDSAKeyValue) {
--
-- // this trick is needed to allow the RetrievalMethodResolver to eat a
-- // ds:DSAKeyValue directly (without KeyValue)
-- this._dsaKeyElement = element;
--
-- return true;
-- }
--
-- return false;
-- }
--
- /**
- * Method engineResolvePublicKey
- *
-@@ -85,20 +49,30 @@
- * @param storage
- * @return null if no {@link PublicKey} could be obtained
- */
-- public PublicKey engineResolvePublicKey(
-+ public PublicKey engineLookupAndResolvePublicKey(
- Element element, String BaseURI, StorageResolver storage) {
-+ if (element == null) {
-+ return null;
-+ }
-+ Element dsaKeyElement=null;
-+ boolean isKeyValue = XMLUtils.elementIsInSignatureSpace(element,
-+ Constants._TAG_KEYVALUE);
-+ if (isKeyValue) {
-+ dsaKeyElement =
-+ XMLUtils.selectDsNode(element.getFirstChild(),Constants._TAG_DSAKEYVALUE,0);
-+ } else if (XMLUtils.elementIsInSignatureSpace(element,
-+ Constants._TAG_DSAKEYVALUE)) {
-+ // this trick is needed to allow the RetrievalMethodResolver to eat a
-+ // ds:DSAKeyValue directly (without KeyValue)
-+ dsaKeyElement = element;
-+ }
-
-- if (this._dsaKeyElement == null) {
-- boolean weCanResolve = this.engineCanResolve(element, BaseURI,
-- storage);
--
-- if (!weCanResolve || (this._dsaKeyElement == null)) {
-- return null;
-- }
-+ if (dsaKeyElement == null) {
-+ return null;
- }
-
- try {
-- DSAKeyValue dsaKeyValue = new DSAKeyValue(this._dsaKeyElement,
-+ DSAKeyValue dsaKeyValue = new DSAKeyValue(dsaKeyElement,
- BaseURI);
- PublicKey pk = dsaKeyValue.getPublicKey();
-
-@@ -112,13 +86,13 @@
-
-
- /** @inheritDoc */
-- public X509Certificate engineResolveX509Certificate(
-+ public X509Certificate engineLookupResolveX509Certificate(
- Element element, String BaseURI, StorageResolver storage) {
- return null;
- }
-
- /** @inheritDoc */
-- public javax.crypto.SecretKey engineResolveSecretKey(
-+ public javax.crypto.SecretKey engineLookupAndResolveSecretKey(
- Element element, String BaseURI, StorageResolver storage){
- return null;
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/EncryptedKeyResolver.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/EncryptedKeyResolver.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/EncryptedKeyResolver.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/EncryptedKeyResolver.java
-@@ -56,7 +56,6 @@
- RSAKeyValueResolver.class.getName());
-
-
-- Key _key;
- Key _kek;
- String _algorithm;
-
-@@ -66,7 +65,6 @@
- * @param algorithm
- */
- public EncryptedKeyResolver(String algorithm) {
-- _key = null;
- _kek = null;
- _algorithm=algorithm;
- }
-@@ -78,64 +76,49 @@
- */
-
- public EncryptedKeyResolver(String algorithm, Key kek) {
-- _key = null;
- _algorithm = algorithm;
- _kek = kek;
-
- }
-
-- /**
-- * Method engineCanResolve
-- *
-- * @param element
-- * @param BaseURI
-- * @param storage
-- * @return true if can resolve the key in the element
-- *
-- */
--
-- public boolean engineCanResolve(Element element, String BaseURI,
-- StorageResolver storage) {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "EncryptedKeyResolver - Can I resolve " + element.getTagName());
--
-- if (element == null) {
-- return false;
-- }
--
-- boolean isEncryptedKey = XMLUtils.elementIsInEncryptionSpace(element,
-- EncryptionConstants._TAG_ENCRYPTEDKEY);
--
-- if (isEncryptedKey) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Passed an Encrypted Key");
-- try {
-- XMLCipher cipher = XMLCipher.getInstance();
-- cipher.init(XMLCipher.UNWRAP_MODE, _kek);
-- EncryptedKey ek = cipher.loadEncryptedKey(element);
-- _key = cipher.decryptKey(ek, _algorithm);
-- }
-- catch (Exception e) {}
-- }
--
-- return (_key != null);
-- }
--
- /** @inheritDoc */
-- public PublicKey engineResolvePublicKey(
-+ public PublicKey engineLookupAndResolvePublicKey(
- Element element, String BaseURI, StorageResolver storage) {
-
- return null;
- }
-
- /** @inheritDoc */
-- public X509Certificate engineResolveX509Certificate(
-+ public X509Certificate engineLookupResolveX509Certificate(
- Element element, String BaseURI, StorageResolver storage) {
- return null;
- }
-
- /** @inheritDoc */
-- public javax.crypto.SecretKey engineResolveSecretKey(
-+ public javax.crypto.SecretKey engineLookupAndResolveSecretKey(
- Element element, String BaseURI, StorageResolver storage) {
-- return (SecretKey) _key;
-+ SecretKey key=null;
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "EncryptedKeyResolver - Can I resolve " + element.getTagName());
-+
-+ if (element == null) {
-+ return null;
-+ }
-+
-+ boolean isEncryptedKey = XMLUtils.elementIsInEncryptionSpace(element,
-+ EncryptionConstants._TAG_ENCRYPTEDKEY);
-+
-+ if (isEncryptedKey) {
-+ log.log(java.util.logging.Level.FINE, "Passed an Encrypted Key");
-+ try {
-+ XMLCipher cipher = XMLCipher.getInstance();
-+ cipher.init(XMLCipher.UNWRAP_MODE, _kek);
-+ EncryptedKey ek = cipher.loadEncryptedKey(element);
-+ key = (SecretKey) cipher.decryptKey(ek, _algorithm);
-+ }
-+ catch (Exception e) {}
-+ }
-+
-+ return key;
- }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/RSAKeyValueResolver.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/RSAKeyValueResolver.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/RSAKeyValueResolver.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/RSAKeyValueResolver.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -38,7 +37,7 @@
-
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class RSAKeyValueResolver extends KeyResolverSpi {
-
-@@ -48,75 +47,55 @@
- RSAKeyValueResolver.class.getName());
-
- /** Field _rsaKeyElement */
-- private Element _rsaKeyElement = null;
-+
-
- /** @inheritDoc */
-- public boolean engineCanResolve(Element element, String BaseURI,
-- StorageResolver storage) {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Can I resolve " + element.getTagName());
--
-+ public PublicKey engineLookupAndResolvePublicKey(
-+ Element element, String BaseURI, StorageResolver storage) {
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Can I resolve " + element.getTagName());
- if (element == null) {
-- return false;
-+ return null;
- }
-
-- boolean isKeyValue = XMLUtils.elementIsInSignatureSpace(element,
-- Constants._TAG_KEYVALUE);
-- boolean isRSAKeyValue = XMLUtils.elementIsInSignatureSpace(element,
-- Constants._TAG_RSAKEYVALUE);
--
-- if (isKeyValue) {
-- this._rsaKeyElement = XMLUtils.selectDsNode(element.getFirstChild(),
-- Constants._TAG_RSAKEYVALUE, 0);
--
-- if (this._rsaKeyElement != null) {
-- return true;
-- }
-- } else if (isRSAKeyValue) {
--
-+ boolean isKeyValue = XMLUtils.elementIsInSignatureSpace(element,
-+ Constants._TAG_KEYVALUE);
-+ Element rsaKeyElement=null;
-+ if (isKeyValue) {
-+ rsaKeyElement = XMLUtils.selectDsNode(element.getFirstChild(),
-+ Constants._TAG_RSAKEYVALUE, 0);
-+ } else if (XMLUtils.elementIsInSignatureSpace(element,
-+ Constants._TAG_RSAKEYVALUE)) {
- // this trick is needed to allow the RetrievalMethodResolver to eat a
- // ds:RSAKeyValue directly (without KeyValue)
-- this._rsaKeyElement = element;
-+ rsaKeyElement = element;
-+ }
-
-- return true;
-- }
-
-- return false;
-- }
--
-- /** @inheritDoc */
-- public PublicKey engineResolvePublicKey(
-- Element element, String BaseURI, StorageResolver storage) {
--
-- if (this._rsaKeyElement == null) {
-- boolean weCanResolve = this.engineCanResolve(element, BaseURI,
-- storage);
--
-- if (!weCanResolve || (this._rsaKeyElement == null)) {
-- return null;
-- }
-+ if (rsaKeyElement == null) {
-+ return null;
- }
-
- try {
-- RSAKeyValue rsaKeyValue = new RSAKeyValue(this._rsaKeyElement,
-+ RSAKeyValue rsaKeyValue = new RSAKeyValue(rsaKeyElement,
- BaseURI);
-
- return rsaKeyValue.getPublicKey();
- } catch (XMLSecurityException ex) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "XMLSecurityException", ex);
-+ log.log(java.util.logging.Level.FINE, "XMLSecurityException", ex);
- }
-
- return null;
- }
-
- /** @inheritDoc */
-- public X509Certificate engineResolveX509Certificate(
-+ public X509Certificate engineLookupResolveX509Certificate(
- Element element, String BaseURI, StorageResolver storage) {
- return null;
- }
-
- /** @inheritDoc */
-- public javax.crypto.SecretKey engineResolveSecretKey(
-+ public javax.crypto.SecretKey engineLookupAndResolveSecretKey(
- Element element, String BaseURI, StorageResolver storage) {
- return null;
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/RetrievalMethodResolver.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/RetrievalMethodResolver.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/RetrievalMethodResolver.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/RetrievalMethodResolver.java
-@@ -28,7 +28,15 @@
- import java.security.cert.CertificateException;
- import java.security.cert.CertificateFactory;
- import java.security.cert.X509Certificate;
-+import java.util.ArrayList;
-+import java.util.Iterator;
-+import java.util.List;
-+import java.util.ListIterator;
-+import java.util.Set;
-
-+import javax.xml.parsers.ParserConfigurationException;
-+
-+import com.sun.org.apache.xml.internal.security.c14n.CanonicalizationException;
- import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
- import com.sun.org.apache.xml.internal.security.keys.content.RetrievalMethod;
- import com.sun.org.apache.xml.internal.security.keys.content.x509.XMLX509Certificate;
-@@ -44,6 +52,7 @@
- import org.w3c.dom.Attr;
- import org.w3c.dom.Element;
- import org.w3c.dom.Node;
-+import org.xml.sax.SAXException;
-
-
- /**
-@@ -55,7 +64,7 @@
- * RetrievalMethodResolver cannot handle itself, resolving of the extracted
- * element is delegated back to the KeyResolver mechanism.
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $ modified by Dave Garcia
- */
- public class RetrievalMethodResolver extends KeyResolverSpi {
-
-@@ -65,26 +74,6 @@
- RetrievalMethodResolver.class.getName());
-
- /**
-- * Method engineCanResolve
-- * @inheritDoc
-- * @param element
-- * @param BaseURI
-- * @param storage
-- *
-- */
-- public boolean engineCanResolve(Element element, String BaseURI,
-- StorageResolver storage) {
--
-- if
-- (!XMLUtils.elementIsInSignatureSpace(element,
-- Constants._TAG_RETRIEVALMETHOD)) {
-- return false;
-- }
--
-- return true;
-- }
--
-- /**
- * Method engineResolvePublicKey
- * @inheritDoc
- * @param element
-@@ -92,82 +81,59 @@
- * @param storage
- *
- */
-- public PublicKey engineResolvePublicKey(
-+ public PublicKey engineLookupAndResolvePublicKey(
- Element element, String BaseURI, StorageResolver storage)
- {
-+ if (!XMLUtils.elementIsInSignatureSpace(element,
-+ Constants._TAG_RETRIEVALMETHOD)) {
-+ return null;
-+ }
-
- try {
-- RetrievalMethod rm = new RetrievalMethod(element, BaseURI);
-- Attr uri = rm.getURIAttr();
-+ //Create a retrieval method over the given element
-+ RetrievalMethod rm = new RetrievalMethod(element, BaseURI);
-+ String type = rm.getType();
-+ XMLSignatureInput resource=resolveInput(rm,BaseURI);
-+ if (RetrievalMethod.TYPE_RAWX509.equals(type)) {
-+ //a raw certificate, direct parsing is done!
-+ X509Certificate cert=getRawCertificate(resource);
-+ if (cert != null) {
-+ return cert.getPublicKey();
-+ }
-+ return null;
-+ };
-+ Element e = obtainRefrenceElement(resource);
-+ return resolveKey(e,BaseURI,storage);
-+ } catch (XMLSecurityException ex) {
-+ log.log(java.util.logging.Level.FINE, "XMLSecurityException", ex);
-+ } catch (CertificateException ex) {
-+ log.log(java.util.logging.Level.FINE, "CertificateException", ex);
-+ } catch (IOException ex) {
-+ log.log(java.util.logging.Level.FINE, "IOException", ex);
-+ } catch (ParserConfigurationException e) {
-+ log.log(java.util.logging.Level.FINE, "ParserConfigurationException", e);
-+ } catch (SAXException e) {
-+ log.log(java.util.logging.Level.FINE, "SAXException", e);
-+ }
-+ return null;
-+ }
-
-- // type can be null because it's optional
-- String type = rm.getType();
-- Transforms transforms = rm.getTransforms();
-- ResourceResolver resRes = ResourceResolver.getInstance(uri, BaseURI);
--
-- if (resRes != null) {
-- XMLSignatureInput resource = resRes.resolve(uri, BaseURI);
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Before applying Transforms, resource has "
-- + resource.getBytes().length + "bytes");
--
-- if (transforms != null) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "We have Transforms");
--
-- resource = transforms.performTransforms(resource);
-- }
-- if (true) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "After applying Transforms, resource has "
-- + resource.getBytes().length + "bytes");
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Resolved to resource " + resource.getSourceURI());
-- }
--
-- byte inputBytes[] = resource.getBytes();
--
-- if ((type != null) && type.equals(RetrievalMethod.TYPE_RAWX509)) {
--
-- // if the resource stores a raw certificate, we have to handle it
-- CertificateFactory certFact =
-- CertificateFactory
-- .getInstance(XMLX509Certificate.JCA_CERT_ID);
-- X509Certificate cert =
-- (X509Certificate) certFact
-- .generateCertificate(new ByteArrayInputStream(inputBytes));
--
-- if (cert != null) {
-- return cert.getPublicKey();
-- }
-- } else {
--
-- // otherwise, we parse the resource, create an Element and delegate
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "we have to parse " + inputBytes.length + " bytes");
--
-- Element e = this.getDocFromBytes(inputBytes);
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Now we have a {" + e.getNamespaceURI() + "}"
-- + e.getLocalName() + " Element");
--
-- if (e != null) {
-- KeyResolver newKeyResolver = KeyResolver.getInstance(getFirstElementChild(e),
-- BaseURI, storage);
--
-- if (newKeyResolver != null) {
-- return newKeyResolver.resolvePublicKey(getFirstElementChild(e), BaseURI,
-- storage);
-- }
-- }
-- }
-- }
-- } catch (XMLSecurityException ex) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "XMLSecurityException", ex);
-- } catch (CertificateException ex) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "CertificateException", ex);
-- } catch (IOException ex) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "IOException", ex);
-- }
--
-- return null;
-+ static private Element obtainRefrenceElement(XMLSignatureInput resource) throws CanonicalizationException, ParserConfigurationException, IOException, SAXException, KeyResolverException {
-+ Element e;
-+ if (resource.isElement()){
-+ e=(Element) resource.getSubNode();
-+ } else if (resource.isNodeSet()) {
-+ //Retrieved resource is a nodeSet
-+ e=getDocumentElement(resource.getNodeSet());
-+ } else {
-+ //Retrieved resource is an inputStream
-+ byte inputBytes[] = resource.getBytes();
-+ e = getDocFromBytes(inputBytes);
-+ //otherwise, we parse the resource, create an Element and delegate
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "we have to parse " + inputBytes.length + " bytes");
-+ }
-+ return e;
- }
-
- /**
-@@ -178,85 +144,100 @@
- * @param storage
- *
- */
-- public X509Certificate engineResolveX509Certificate(
-+ public X509Certificate engineLookupResolveX509Certificate(
- Element element, String BaseURI, StorageResolver storage)
- {
-+ if (!XMLUtils.elementIsInSignatureSpace(element,
-+ Constants._TAG_RETRIEVALMETHOD)) {
-+ return null;
-+ }
-
-- try {
-+ try {
- RetrievalMethod rm = new RetrievalMethod(element, BaseURI);
-- Attr uri = rm.getURIAttr();
-- Transforms transforms = rm.getTransforms();
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Asked to resolve URI " + uri);
-+ String type = rm.getType();
-+ XMLSignatureInput resource=resolveInput(rm,BaseURI);
-+ if (RetrievalMethod.TYPE_RAWX509.equals(type)) {
-+ X509Certificate cert=getRawCertificate(resource);
-+ return cert;
-+ }
-+ Element e = obtainRefrenceElement(resource);
-+ return resolveCertificate(e,BaseURI,storage);
-+ } catch (XMLSecurityException ex) {
-+ log.log(java.util.logging.Level.FINE, "XMLSecurityException", ex);
-+ } catch (CertificateException ex) {
-+ log.log(java.util.logging.Level.FINE, "CertificateException", ex);
-+ } catch (IOException ex) {
-+ log.log(java.util.logging.Level.FINE, "IOException", ex);
-+ } catch (ParserConfigurationException e) {
-+ log.log(java.util.logging.Level.FINE, "ParserConfigurationException", e);
-+ } catch (SAXException e) {
-+ log.log(java.util.logging.Level.FINE, "SAXException", e);
-+ }
-+ return null;
-+ }
-
-- ResourceResolver resRes = ResourceResolver.getInstance(uri, BaseURI);
-+ /**
-+ * Retrieves a x509Certificate from the given information
-+ * @param e
-+ * @param BaseURI
-+ * @param storage
-+ * @return
-+ * @throws KeyResolverException
-+ */
-+ static private X509Certificate resolveCertificate(Element e,String BaseURI,StorageResolver storage) throws KeyResolverException{
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Now we have a {" + e.getNamespaceURI() + "}"+ e.getLocalName() + " Element");
-+ //An element has been provided
-+ if (e != null) {
-+ return KeyResolver.getX509Certificate(e,BaseURI, storage);
-+ }
-+ return null;
-+ }
-
-- if (resRes != null) {
-- XMLSignatureInput resource = resRes.resolve(uri, BaseURI);
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Before applying Transforms, resource has "
-- + resource.getBytes().length + "bytes");
-+ /**
-+ * Retrieves a x509Certificate from the given information
-+ * @param e
-+ * @param BaseURI
-+ * @param storage
-+ * @return
-+ * @throws KeyResolverException
-+ */
-+ static private PublicKey resolveKey(Element e,String BaseURI,StorageResolver storage) throws KeyResolverException{
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Now we have a {" + e.getNamespaceURI() + "}"+ e.getLocalName() + " Element");
-+ //An element has been provided
-+ if (e != null) {
-+ return KeyResolver.getPublicKey(e,BaseURI, storage);
-+ }
-+ return null;
-+ }
-
-- if (transforms != null) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "We have Transforms");
--
-- resource = transforms.performTransforms(resource);
-- }
--
-- if (true) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "After applying Transforms, resource has "
-- + resource.getBytes().length + "bytes");
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Resolved to resource " + resource.getSourceURI());
-- }
--
-- byte inputBytes[] = resource.getBytes();
--
-- if ((rm.getType() != null)
-- && rm.getType().equals(RetrievalMethod.TYPE_RAWX509)) {
--
-- // if the resource stores a raw certificate, we have to handle it
-- CertificateFactory certFact =
-- CertificateFactory
-- .getInstance(XMLX509Certificate.JCA_CERT_ID);
-- X509Certificate cert =
-- (X509Certificate) certFact
-- .generateCertificate(new ByteArrayInputStream(inputBytes));
--
-- if (cert != null) {
-- return cert;
-- }
-- } else {
--
-- // otherwise, we parse the resource, create an Element and delegate
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "we have to parse " + inputBytes.length + " bytes");
--
-- Element e = this.getDocFromBytes(inputBytes);
--
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Now we have a {" + e.getNamespaceURI() + "}"
-- + e.getLocalName() + " Element");
--
-- if (e != null) {
-- KeyResolver newKeyResolver = KeyResolver.getInstance(getFirstElementChild(e),
-- BaseURI, storage);
--
-- if (newKeyResolver != null) {
-- return newKeyResolver.resolveX509Certificate(getFirstElementChild(e), BaseURI,
-- storage);
-- }
-- }
-- }
-- }
-- } catch (XMLSecurityException ex) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "XMLSecurityException", ex);
-- } catch (CertificateException ex) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "CertificateException", ex);
-- } catch (IOException ex) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "IOException", ex);
-- }
--
-- return null;
-+ static private X509Certificate getRawCertificate(XMLSignatureInput resource) throws CanonicalizationException, IOException, CertificateException{
-+ byte inputBytes[] = resource.getBytes();
-+ // if the resource stores a raw certificate, we have to handle it
-+ CertificateFactory certFact =CertificateFactory.getInstance(XMLX509Certificate.JCA_CERT_ID);
-+ X509Certificate cert =(X509Certificate) certFact.generateCertificate(new ByteArrayInputStream(inputBytes));
-+ return cert;
-+ }
-+ /**
-+ * Resolves the input from the given retrieval method
-+ * @return
-+ * @throws XMLSecurityException
-+ */
-+ static private XMLSignatureInput resolveInput(RetrievalMethod rm,String BaseURI) throws XMLSecurityException{
-+ Attr uri = rm.getURIAttr();
-+ //Apply the trnasforms
-+ Transforms transforms = rm.getTransforms();
-+ ResourceResolver resRes = ResourceResolver.getInstance(uri, BaseURI);
-+ if (resRes != null) {
-+ XMLSignatureInput resource = resRes.resolve(uri, BaseURI);
-+ if (transforms != null) {
-+ log.log(java.util.logging.Level.FINE, "We have Transforms");
-+ resource = transforms.performTransforms(resource);
-+ }
-+ return resource;
-+ }
-+ return null;
- }
-
- /**
-@@ -266,18 +247,13 @@
- * @return the Document Element after parsing bytes
- * @throws KeyResolverException if something goes wrong
- */
-- Element getDocFromBytes(byte[] bytes) throws KeyResolverException {
--
-+ static Element getDocFromBytes(byte[] bytes) throws KeyResolverException {
- try {
-- javax.xml.parsers.DocumentBuilderFactory dbf =
-- javax.xml.parsers.DocumentBuilderFactory.newInstance();
--
-+ javax.xml.parsers.DocumentBuilderFactory dbf =javax.xml.parsers.DocumentBuilderFactory.newInstance();
- dbf.setNamespaceAware(true);
--
- javax.xml.parsers.DocumentBuilder db = dbf.newDocumentBuilder();
- org.w3c.dom.Document doc =
- db.parse(new java.io.ByteArrayInputStream(bytes));
--
- return doc.getDocumentElement();
- } catch (org.xml.sax.SAXException ex) {
- throw new KeyResolverException("empty", ex);
-@@ -296,16 +272,43 @@
- * @param storage
- *
- */
-- public javax.crypto.SecretKey engineResolveSecretKey(
-+ public javax.crypto.SecretKey engineLookupAndResolveSecretKey(
- Element element, String BaseURI, StorageResolver storage)
- {
- return null;
- }
-- static Element getFirstElementChild(Element e){
-- Node n=e.getFirstChild();
-- while (n!=null && n.getNodeType()!=Node.ELEMENT_NODE) {
-- n=n.getNextSibling();
-- }
-- return (Element)n;
-+
-+ static Element getDocumentElement(Set set) {
-+ Iterator it=set.iterator();
-+ Element e=null;
-+ while (it.hasNext()) {
-+ Node currentNode=(Node)it.next();
-+ if (currentNode != null && currentNode.getNodeType() == Node.ELEMENT_NODE) {
-+ e=(Element)currentNode;
-+ break;
-+ }
-+
-+ }
-+ List parents=new ArrayList(10);
-+
-+ //Obtain all the parents of the elemnt
-+ while (e != null) {
-+ parents.add(e);
-+ Node n=e.getParentNode();
-+ if (n == null || n.getNodeType() != Node.ELEMENT_NODE) {
-+ break;
-+ }
-+ e=(Element)n;
-+ }
-+ //Visit them in reverse order.
-+ ListIterator it2=parents.listIterator(parents.size()-1);
-+ Element ele=null;
-+ while (it2.hasPrevious()) {
-+ ele=(Element)it2.previous();
-+ if (set.contains(ele)) {
-+ return ele;
-+ }
-+ }
-+ return null;
- }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509CertificateResolver.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509CertificateResolver.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509CertificateResolver.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509CertificateResolver.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -41,7 +40,7 @@
- * Resolves Certificates which are directly contained inside a
- * <CODE>ds:X509Certificate</CODE> Element.
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class X509CertificateResolver extends KeyResolverSpi {
-
-@@ -49,47 +48,7 @@
- static java.util.logging.Logger log =
- java.util.logging.Logger.getLogger(X509CertificateResolver.class.getName());
-
-- /** Field _dsaKeyElement */
-- Element[] _x509CertKeyElements = null;
-
-- /**
-- * Method engineCanResolve
-- * @inheritDoc
-- * @param element
-- * @param BaseURI
-- * @param storage
-- *
-- */
-- public boolean engineCanResolve(Element element, String BaseURI,
-- StorageResolver storage) {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Can I resolve " + element.getTagName() + "?");
--
-- if (!XMLUtils.elementIsInSignatureSpace(element,
-- Constants._TAG_X509DATA)) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "I can't");
--
-- return false;
-- }
--
--
-- this._x509CertKeyElements = XMLUtils.selectDsNodes(element.getFirstChild(),
-- Constants._TAG_X509CERTIFICATE);
--
-- if ((this._x509CertKeyElements != null)
-- && (this._x509CertKeyElements.length > 0)) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Yes Sir, I can");
--
-- return true;
-- }
--
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "I can't");
--
-- return false;
-- }
--
-- /** Field _x509certObject[] */
-- XMLX509Certificate _x509certObject[] = null;
-
- /**
- * Method engineResolvePublicKey
-@@ -100,11 +59,11 @@
- *
- * @throws KeyResolverException
- */
-- public PublicKey engineResolvePublicKey(
-+ public PublicKey engineLookupAndResolvePublicKey(
- Element element, String BaseURI, StorageResolver storage)
- throws KeyResolverException {
-
-- X509Certificate cert = this.engineResolveX509Certificate(element,
-+ X509Certificate cert = this.engineLookupResolveX509Certificate(element,
- BaseURI, storage);
-
- if (cert != null) {
-@@ -123,43 +82,33 @@
- *
- * @throws KeyResolverException
- */
-- public X509Certificate engineResolveX509Certificate(
-+ public X509Certificate engineLookupResolveX509Certificate(
- Element element, String BaseURI, StorageResolver storage)
- throws KeyResolverException {
-
- try {
-- if ((this._x509CertKeyElements == null)
-- || (this._x509CertKeyElements.length == 0)) {
-- boolean weCanResolve = this.engineCanResolve(element, BaseURI,
-- storage);
-+ Element[] els=XMLUtils.selectDsNodes(element.getFirstChild(),
-+ Constants._TAG_X509CERTIFICATE);
-+ if ((els == null) || (els.length == 0)) {
-+ Element el=XMLUtils.selectDsNode(element.getFirstChild(),
-+ Constants._TAG_X509DATA,0);
-+ if (el!=null) {
-+ return engineLookupResolveX509Certificate(el, BaseURI, storage);
-+ }
-+ return null;
-+ }
-
-- if (!weCanResolve || (this._x509CertKeyElements == null)
-- || (this._x509CertKeyElements.length == 0)) {
-- return null;
-+ // populate Object array
-+ for (int i = 0; i < els.length; i++) {
-+ XMLX509Certificate xmlCert=new XMLX509Certificate(els[i], BaseURI);
-+ X509Certificate cert = xmlCert.getX509Certificate();
-+ if (cert!=null) {
-+ return cert;
- }
- }
--
-- this._x509certObject =
-- new XMLX509Certificate[this._x509CertKeyElements.length];
--
-- // populate Object array
-- for (int i = 0; i < this._x509CertKeyElements.length; i++) {
-- this._x509certObject[i] =
-- new XMLX509Certificate(this._x509CertKeyElements[i]
-- , BaseURI);
-- }
--
-- for (int i = 0; i < this._x509certObject.length; i++) {
-- X509Certificate cert = this._x509certObject[i].getX509Certificate();
--
-- if (cert != null) {
-- return cert;
-- }
-- }
--
- return null;
- } catch (XMLSecurityException ex) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "XMLSecurityException", ex);
-+ log.log(java.util.logging.Level.FINE, "XMLSecurityException", ex);
-
- throw new KeyResolverException("generic.EmptyMessage", ex);
- }
-@@ -173,7 +122,7 @@
- * @param storage
- *
- */
-- public javax.crypto.SecretKey engineResolveSecretKey(
-+ public javax.crypto.SecretKey engineLookupAndResolveSecretKey(
- Element element, String BaseURI, StorageResolver storage)
- {
- return null;
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509IssuerSerialResolver.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509IssuerSerialResolver.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509IssuerSerialResolver.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509IssuerSerialResolver.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -39,7 +38,7 @@
-
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class X509IssuerSerialResolver extends KeyResolverSpi {
-
-@@ -48,44 +47,13 @@
- java.util.logging.Logger.getLogger(
- X509IssuerSerialResolver.class.getName());
-
-- /** @inheritDoc */
-- public boolean engineCanResolve(Element element, String BaseURI,
-- StorageResolver storage) {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Can I resolve " + element.getTagName() + "?");
--
-- X509Data x509data = null;
-- try {
-- x509data = new X509Data(element, BaseURI);
-- } catch (XMLSignatureException ex) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "I can't");
--
-- return false;
-- } catch (XMLSecurityException ex) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "I can't");
--
-- return false;
-- }
--
-- if (x509data == null) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "I can't");
-- return false;
-- }
--
-- if (x509data.containsIssuerSerial()) {
-- return true;
-- }
--
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "I can't");
-- return false;
-- }
-
- /** @inheritDoc */
-- public PublicKey engineResolvePublicKey(
-+ public PublicKey engineLookupAndResolvePublicKey(
- Element element, String BaseURI, StorageResolver storage)
- throws KeyResolverException {
-
-- X509Certificate cert = this.engineResolveX509Certificate(element,
-+ X509Certificate cert = this.engineLookupResolveX509Certificate(element,
- BaseURI, storage);
-
- if (cert != null) {
-@@ -96,10 +64,31 @@
- }
-
- /** @inheritDoc */
-- public X509Certificate engineResolveX509Certificate(
-+ public X509Certificate engineLookupResolveX509Certificate(
- Element element, String BaseURI, StorageResolver storage)
- throws KeyResolverException {
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Can I resolve " + element.getTagName() + "?");
-
-+ X509Data x509data = null;
-+ try {
-+ x509data = new X509Data(element, BaseURI);
-+ } catch (XMLSignatureException ex) {
-+ log.log(java.util.logging.Level.FINE, "I can't");
-+ return null;
-+ } catch (XMLSecurityException ex) {
-+ log.log(java.util.logging.Level.FINE, "I can't");
-+ return null;
-+ }
-+
-+ if (x509data == null) {
-+ log.log(java.util.logging.Level.FINE, "I can't");
-+ return null;
-+ }
-+
-+ if (!x509data.containsIssuerSerial()) {
-+ return null;
-+ }
- try {
- if (storage == null) {
- Object exArgs[] = { Constants._TAG_X509ISSUERSERIAL };
-@@ -107,53 +96,52 @@
- new KeyResolverException("KeyResolver.needStorageResolver",
- exArgs);
-
-- if (log.isLoggable(java.util.logging.Level.INFO)) log.log(java.util.logging.Level.INFO, "", ex);
-+ log.log(java.util.logging.Level.INFO, "", ex);
- throw ex;
- }
-
-- X509Data x509data = new X509Data(element, BaseURI);
- int noOfISS = x509data.lengthIssuerSerial();
-
- while (storage.hasNext()) {
- X509Certificate cert = storage.next();
- XMLX509IssuerSerial certSerial = new XMLX509IssuerSerial(element.getOwnerDocument(), cert);
-
-- if (true) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Found Certificate Issuer: "
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, "Found Certificate Issuer: "
- + certSerial.getIssuerName());
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Found Certificate Serial: "
-+ log.log(java.util.logging.Level.FINE, "Found Certificate Serial: "
- + certSerial.getSerialNumber().toString());
- }
-
- for (int i=0; i<noOfISS; i++) {
- XMLX509IssuerSerial xmliss = x509data.itemIssuerSerial(i);
-
-- if (true) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Found Element Issuer: "
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, "Found Element Issuer: "
- + xmliss.getIssuerName());
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Found Element Serial: "
-+ log.log(java.util.logging.Level.FINE, "Found Element Serial: "
- + xmliss.getSerialNumber().toString());
- }
-
- if (certSerial.equals(xmliss)) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "match !!! ");
-+ log.log(java.util.logging.Level.FINE, "match !!! ");
-
- return cert;
- }
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "no match...");
-+ log.log(java.util.logging.Level.FINE, "no match...");
- }
- }
-
- return null;
- } catch (XMLSecurityException ex) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "XMLSecurityException", ex);
-+ log.log(java.util.logging.Level.FINE, "XMLSecurityException", ex);
-
- throw new KeyResolverException("generic.EmptyMessage", ex);
- }
- }
-
- /** @inheritDoc */
-- public javax.crypto.SecretKey engineResolveSecretKey(
-+ public javax.crypto.SecretKey engineLookupAndResolveSecretKey(
- Element element, String BaseURI, StorageResolver storage) {
- return null;
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509SKIResolver.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509SKIResolver.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509SKIResolver.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509SKIResolver.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -40,7 +39,7 @@
- /**
- *
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class X509SKIResolver extends KeyResolverSpi {
-
-@@ -48,50 +47,6 @@
- static java.util.logging.Logger log =
- java.util.logging.Logger.getLogger(X509SKIResolver.class.getName());
-
-- /** Field _x509childNodes */
-- private Element _x509childNodes[] = null;
--
-- /** Field _x509childObject[] */
-- private XMLX509SKI _x509childObject[] = null;
--
-- /**
-- * Method engineCanResolve
-- * @inheritDoc
-- * @param element
-- * @param BaseURI
-- * @param storage
-- *
-- */
-- public boolean engineCanResolve(Element element, String BaseURI,
-- StorageResolver storage) {
-- if (true) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Can I resolve " + element.getTagName() + "?");
-- }
--
-- if (!XMLUtils.elementIsInSignatureSpace(element,
-- Constants._TAG_X509DATA)) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "I can't");
--
-- return false;
-- }
--
--
--
--
-- this._x509childNodes = XMLUtils.selectDsNodes(element,
-- Constants._TAG_X509SKI);
--
-- if ((this._x509childNodes != null)
-- && (this._x509childNodes.length > 0)) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Yes Sir, I can");
--
-- return true;
-- }
--
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "I can't");
--
-- return false;
-- }
-
- /**
- * Method engineResolvePublicKey
-@@ -102,11 +57,11 @@
- * @return null if no {@link PublicKey} could be obtained
- * @throws KeyResolverException
- */
-- public PublicKey engineResolvePublicKey(
-+ public PublicKey engineLookupAndResolvePublicKey(
- Element element, String BaseURI, StorageResolver storage)
- throws KeyResolverException {
-
-- X509Certificate cert = this.engineResolveX509Certificate(element,
-+ X509Certificate cert = this.engineLookupResolveX509Certificate(element,
- BaseURI, storage);
-
- if (cert != null) {
-@@ -125,46 +80,55 @@
- *
- * @throws KeyResolverException
- */
-- public X509Certificate engineResolveX509Certificate(
-+ public X509Certificate engineLookupResolveX509Certificate(
- Element element, String BaseURI, StorageResolver storage)
- throws KeyResolverException {
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, "Can I resolve " + element.getTagName() + "?");
-+ }
-+ if (!XMLUtils.elementIsInSignatureSpace(element,
-+ Constants._TAG_X509DATA)) {
-+ log.log(java.util.logging.Level.FINE, "I can't");
-+ return null;
-+ }
-+ /** Field _x509childObject[] */
-+ XMLX509SKI x509childObject[] = null;
-
-- try {
-- if (this._x509childNodes == null) {
-- boolean weCanResolve = this.engineCanResolve(element, BaseURI,
-- storage);
-+ Element x509childNodes[] = null;
-+ x509childNodes = XMLUtils.selectDsNodes(element.getFirstChild(),
-+ Constants._TAG_X509SKI);
-
-- if (!weCanResolve || (this._x509childNodes == null)) {
-- return null;
-- }
-- }
--
-+ if (!((x509childNodes != null)
-+ && (x509childNodes.length > 0))) {
-+ log.log(java.util.logging.Level.FINE, "I can't");
-+ return null;
-+ }
-+ try {
- if (storage == null) {
- Object exArgs[] = { Constants._TAG_X509SKI };
- KeyResolverException ex =
- new KeyResolverException("KeyResolver.needStorageResolver",
- exArgs);
-
-- if (log.isLoggable(java.util.logging.Level.INFO)) log.log(java.util.logging.Level.INFO, "", ex);
-+ log.log(java.util.logging.Level.INFO, "", ex);
-
- throw ex;
- }
-
-- this._x509childObject =
-- new XMLX509SKI[this._x509childNodes.length];
-+ x509childObject = new XMLX509SKI[x509childNodes.length];
-
-- for (int i = 0; i < this._x509childNodes.length; i++) {
-- this._x509childObject[i] =
-- new XMLX509SKI(this._x509childNodes[i], BaseURI);
-+ for (int i = 0; i < x509childNodes.length; i++) {
-+ x509childObject[i] =
-+ new XMLX509SKI(x509childNodes[i], BaseURI);
- }
-
- while (storage.hasNext()) {
- X509Certificate cert = storage.next();
- XMLX509SKI certSKI = new XMLX509SKI(element.getOwnerDocument(), cert);
-
-- for (int i = 0; i < this._x509childObject.length; i++) {
-- if (certSKI.equals(this._x509childObject[i])) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Return PublicKey from "
-+ for (int i = 0; i < x509childObject.length; i++) {
-+ if (certSKI.equals(x509childObject[i])) {
-+ log.log(java.util.logging.Level.FINE, "Return PublicKey from "
- + cert.getSubjectDN().getName());
-
- return cert;
-@@ -186,7 +150,7 @@
- * @param storage
- *
- */
-- public javax.crypto.SecretKey engineResolveSecretKey(
-+ public javax.crypto.SecretKey engineLookupAndResolveSecretKey(
- Element element, String BaseURI, StorageResolver storage)
- {
- return null;
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509SubjectNameResolver.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509SubjectNameResolver.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509SubjectNameResolver.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509SubjectNameResolver.java
-@@ -38,7 +38,7 @@
-
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class X509SubjectNameResolver extends KeyResolverSpi {
-
-@@ -47,50 +47,6 @@
- java.util.logging.Logger.getLogger(
- X509SubjectNameResolver.class.getName());
-
-- /** Field _x509childNodes */
-- private Element[] _x509childNodes = null;
--
-- /** Field _x509childObject[] */
-- private XMLX509SubjectName _x509childObject[] = null;
--
-- /**
-- * Method engineCanResolve
-- * @inheritDoc
-- * @param element
-- * @param BaseURI
-- * @param storage
-- *
-- */
-- public boolean engineCanResolve(Element element, String BaseURI,
-- StorageResolver storage) {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Can I resolve " + element.getTagName() + "?");
--
--
-- if (!XMLUtils.elementIsInSignatureSpace(element,
-- Constants._TAG_X509DATA) ) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "I can't");
--
-- return false;
-- }
--
--
--
-- this._x509childNodes = XMLUtils.selectDsNodes(element,
-- Constants._TAG_X509SUBJECTNAME);
--
-- if ((this._x509childNodes != null)
-- && (this._x509childNodes.length > 0)) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Yes Sir, I can");
--
-- return true;
-- }
--
--
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "I can't");
--
-- return false;
-- }
-
- /**
- * Method engineResolvePublicKey
-@@ -101,11 +57,11 @@
- * @return null if no {@link PublicKey} could be obtained
- * @throws KeyResolverException
- */
-- public PublicKey engineResolvePublicKey(
-+ public PublicKey engineLookupAndResolvePublicKey(
- Element element, String BaseURI, StorageResolver storage)
- throws KeyResolverException {
-
-- X509Certificate cert = this.engineResolveX509Certificate(element,
-+ X509Certificate cert = this.engineLookupResolveX509Certificate(element,
- BaseURI, storage);
-
- if (cert != null) {
-@@ -124,37 +80,46 @@
- *
- * @throws KeyResolverException
- */
-- public X509Certificate engineResolveX509Certificate(
-+ public X509Certificate engineLookupResolveX509Certificate(
- Element element, String BaseURI, StorageResolver storage)
- throws KeyResolverException {
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Can I resolve " + element.getTagName() + "?");
-+ Element[] x509childNodes = null;
-+ XMLX509SubjectName x509childObject[] = null;
-+
-+ if (!XMLUtils.elementIsInSignatureSpace(element,
-+ Constants._TAG_X509DATA) ) {
-+ log.log(java.util.logging.Level.FINE, "I can't");
-+ return null;
-+ }
-+ x509childNodes = XMLUtils.selectDsNodes(element.getFirstChild(),
-+ Constants._TAG_X509SUBJECTNAME);
-+
-+ if (!((x509childNodes != null)
-+ && (x509childNodes.length > 0))) {
-+ log.log(java.util.logging.Level.FINE, "I can't");
-+ return null;
-+ }
-
- try {
-- if (this._x509childNodes == null) {
-- boolean weCanResolve = this.engineCanResolve(element, BaseURI,
-- storage);
--
-- if (!weCanResolve || (this._x509childNodes == null)) {
-- return null;
-- }
-- }
--
- if (storage == null) {
- Object exArgs[] = { Constants._TAG_X509SUBJECTNAME };
- KeyResolverException ex =
- new KeyResolverException("KeyResolver.needStorageResolver",
- exArgs);
-
-- if (log.isLoggable(java.util.logging.Level.INFO)) log.log(java.util.logging.Level.INFO, "", ex);
-+ log.log(java.util.logging.Level.INFO, "", ex);
-
- throw ex;
- }
-
-- this._x509childObject =
-- new XMLX509SubjectName[this._x509childNodes.length];
-+ x509childObject =
-+ new XMLX509SubjectName[x509childNodes.length];
-
-- for (int i = 0; i < this._x509childNodes.length; i++) {
-- this._x509childObject[i] =
-- new XMLX509SubjectName(this._x509childNodes[i],
-+ for (int i = 0; i < x509childNodes.length; i++) {
-+ x509childObject[i] =
-+ new XMLX509SubjectName(x509childNodes[i],
- BaseURI);
- }
-
-@@ -163,24 +128,24 @@
- XMLX509SubjectName certSN =
- new XMLX509SubjectName(element.getOwnerDocument(), cert);
-
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Found Certificate SN: " + certSN.getSubjectName());
-+ log.log(java.util.logging.Level.FINE, "Found Certificate SN: " + certSN.getSubjectName());
-
-- for (int i = 0; i < this._x509childObject.length; i++) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Found Element SN: "
-- + this._x509childObject[i].getSubjectName());
-+ for (int i = 0; i < x509childObject.length; i++) {
-+ log.log(java.util.logging.Level.FINE, "Found Element SN: "
-+ + x509childObject[i].getSubjectName());
-
-- if (certSN.equals(this._x509childObject[i])) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "match !!! ");
-+ if (certSN.equals(x509childObject[i])) {
-+ log.log(java.util.logging.Level.FINE, "match !!! ");
-
- return cert;
- }
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "no match...");
-+ log.log(java.util.logging.Level.FINE, "no match...");
- }
- }
-
- return null;
- } catch (XMLSecurityException ex) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "XMLSecurityException", ex);
-+ log.log(java.util.logging.Level.FINE, "XMLSecurityException", ex);
-
- throw new KeyResolverException("generic.EmptyMessage", ex);
- }
-@@ -194,7 +159,7 @@
- * @param storage
- *
- */
-- public javax.crypto.SecretKey engineResolveSecretKey(
-+ public javax.crypto.SecretKey engineLookupAndResolveSecretKey(
- Element element, String BaseURI, StorageResolver storage)
- {
- return null;
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/StorageResolver.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/StorageResolver.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/StorageResolver.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/StorageResolver.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -21,8 +20,6 @@
- */
- package com.sun.org.apache.xml.internal.security.keys.storage;
-
--
--
- import java.security.KeyStore;
- import java.security.cert.X509Certificate;
- import java.util.ArrayList;
-@@ -36,7 +33,7 @@
- /**
- * This class collects customized resolvers for Certificates.
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class StorageResolver {
-
-@@ -45,7 +42,7 @@
- java.util.logging.Logger.getLogger(StorageResolver.class.getName());
-
- /** Field _storageResolvers */
-- List _storageResolvers = new ArrayList();
-+ List _storageResolvers = null;
-
- /** Field _iterator */
- Iterator _iterator = null;
-@@ -71,7 +68,8 @@
- * @param resolver
- */
- public void add(StorageResolverSpi resolver) {
--
-+ if (_storageResolvers==null)
-+ _storageResolvers=new ArrayList();
- this._storageResolvers.add(resolver);
-
- this._iterator = null;
-@@ -126,6 +124,8 @@
- public Iterator getIterator() {
-
- if (this._iterator == null) {
-+ if (_storageResolvers==null)
-+ _storageResolvers=new ArrayList();
- this._iterator = new StorageResolverIterator(this._storageResolvers.iterator());
- }
-
-@@ -140,6 +140,8 @@
- public boolean hasNext() {
-
- if (this._iterator == null) {
-+ if (_storageResolvers==null)
-+ _storageResolvers=new ArrayList();
- this._iterator = new StorageResolverIterator(this._storageResolvers.iterator());
- }
-
-@@ -158,15 +160,13 @@
- /**
- * Class StorageResolverIterator
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
-+ * @version $Revision: 1.5 $
- */
-- class StorageResolverIterator implements Iterator {
-+ static class StorageResolverIterator implements Iterator {
-
- /** Field _resolvers */
-- Iterator _resolvers = null;
--
-- /** Field _currentResolver */
-- int _currentResolver = 0;
-+ Iterator _resolvers = null;
-
- /**
- * Constructor FilesystemIterator
-@@ -179,17 +179,16 @@
-
- /** @inheritDoc */
- public boolean hasNext() {
-- return _resolvers.hasNext();
-+ return _resolvers.hasNext();
- }
-
- /** @inheritDoc */
- public Object next() {
-- return _resolvers.next();
-+ return _resolvers.next();
- }
-
- /**
- * Method remove
-- *
- */
- public void remove() {
- throw new UnsupportedOperationException(
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/StorageResolverException.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/StorageResolverException.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/StorageResolverException.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/StorageResolverException.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -28,7 +27,7 @@
-
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class StorageResolverException extends XMLSecurityException {
-
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/StorageResolverSpi.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/StorageResolverSpi.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/StorageResolverSpi.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/StorageResolverSpi.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -28,7 +27,7 @@
-
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public abstract class StorageResolverSpi {
-
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/implementations/CertsInFilesystemDirectoryResolver.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/implementations/CertsInFilesystemDirectoryResolver.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/implementations/CertsInFilesystemDirectoryResolver.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/implementations/CertsInFilesystemDirectoryResolver.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -21,8 +20,6 @@
- */
- package com.sun.org.apache.xml.internal.security.keys.storage.implementations;
-
--
--
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
-@@ -40,12 +37,11 @@
- import com.sun.org.apache.xml.internal.security.keys.storage.StorageResolverSpi;
- import com.sun.org.apache.xml.internal.security.utils.Base64;
-
--
- /**
- * This {@link StorageResolverSpi} makes all raw (binary) {@link X509Certificate}s
- * which reside as files in a single directory available to the {@link com.sun.org.apache.xml.internal.security.keys.storage.StorageResolver}.
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class CertsInFilesystemDirectoryResolver extends StorageResolverSpi {
-
-@@ -131,20 +127,20 @@
- dn = cert.getSubjectDN().getName();
- added = true;
- } catch (FileNotFoundException ex) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Could not add certificate from file " + filename, ex);
-+ log.log(java.util.logging.Level.FINE, "Could not add certificate from file " + filename, ex);
- } catch (IOException ex) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Could not add certificate from file " + filename, ex);
-+ log.log(java.util.logging.Level.FINE, "Could not add certificate from file " + filename, ex);
- } catch (CertificateNotYetValidException ex) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Could not add certificate from file " + filename, ex);
-+ log.log(java.util.logging.Level.FINE, "Could not add certificate from file " + filename, ex);
- } catch (CertificateExpiredException ex) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Could not add certificate from file " + filename, ex);
-+ log.log(java.util.logging.Level.FINE, "Could not add certificate from file " + filename, ex);
- } catch (CertificateException ex) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Could not add certificate from file " + filename, ex);
-+ log.log(java.util.logging.Level.FINE, "Could not add certificate from file " + filename, ex);
- }
-
- if (added) {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Added certificate: " + dn);
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Added certificate: " + dn);
- }
- }
- }
-@@ -157,9 +153,10 @@
- /**
- * Class FilesystemIterator
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
-+ * @version $Revision: 1.5 $
- */
-- class FilesystemIterator implements Iterator {
-+ private static class FilesystemIterator implements Iterator {
-
- /** Field _certs */
- List _certs = null;
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/implementations/KeyStoreResolver.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/implementations/KeyStoreResolver.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/implementations/KeyStoreResolver.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/implementations/KeyStoreResolver.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -21,8 +20,6 @@
- */
- package com.sun.org.apache.xml.internal.security.keys.storage.implementations;
-
--
--
- import java.security.KeyStore;
- import java.security.KeyStoreException;
- import java.security.cert.X509Certificate;
-@@ -37,7 +34,7 @@
- * Makes the Certificates from a JAVA {@link KeyStore} object available to the
- * {@link com.sun.org.apache.xml.internal.security.keys.storage.StorageResolver}.
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class KeyStoreResolver extends StorageResolverSpi {
-
-@@ -66,9 +63,10 @@
- /**
- * Class KeyStoreIterator
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
-+ * @version $Revision: 1.5 $
- */
-- class KeyStoreIterator implements Iterator {
-+ static class KeyStoreIterator implements Iterator {
-
- /** Field _keyStore */
- KeyStore _keyStore = null;
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/implementations/SingleCertificateResolver.java b/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/implementations/SingleCertificateResolver.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/implementations/SingleCertificateResolver.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/implementations/SingleCertificateResolver.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -21,8 +20,6 @@
- */
- package com.sun.org.apache.xml.internal.security.keys.storage.implementations;
-
--
--
- import java.security.cert.X509Certificate;
- import java.util.Iterator;
-
-@@ -33,7 +30,7 @@
- * This {@link StorageResolverSpi} makes a single {@link X509Certificate}
- * available to the {@link com.sun.org.apache.xml.internal.security.keys.storage.StorageResolver}.
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class SingleCertificateResolver extends StorageResolverSpi {
-
-@@ -61,9 +58,10 @@
- /**
- * Class InternalIterator
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
-+ * @version $Revision: 1.5 $
- */
-- class InternalIterator implements Iterator {
-+ static class InternalIterator implements Iterator {
-
- /** Field _alreadyReturned */
- boolean _alreadyReturned = false;
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/resource/config.xml b/src/share/classes/com/sun/org/apache/xml/internal/security/resource/config.xml
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/resource/config.xml
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/resource/config.xml
-@@ -14,6 +14,10 @@
- JAVACLASS="com.sun.org.apache.xml.internal.security.c14n.implementations.Canonicalizer20010315ExclOmitComments"/>
- <CanonicalizationMethod URI="http://www.w3.org/2001/10/xml-exc-c14n#WithComments"
- JAVACLASS="com.sun.org.apache.xml.internal.security.c14n.implementations.Canonicalizer20010315ExclWithComments"/>
-+ <CanonicalizationMethod URI="http://www.w3.org/2006/12/xml-c14n11"
-+ JAVACLASS="com.sun.org.apache.xml.internal.security.c14n.implementations.Canonicalizer11_OmitComments"/>
-+ <CanonicalizationMethod URI="http://www.w3.org/2006/12/xml-c14n11#WithComments"
-+ JAVACLASS="com.sun.org.apache.xml.internal.security.c14n.implementations.Canonicalizer11_WithComments"/>
- </CanonicalizationMethods>
- <TransformAlgorithms>
- <!-- Base64 -->
-@@ -25,6 +29,12 @@
- <!-- c14n with comments -->
- <TransformAlgorithm URI="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"
- JAVACLASS="com.sun.org.apache.xml.internal.security.transforms.implementations.TransformC14NWithComments" />
-+ <!-- c14n 1.1 omitting comments -->
-+ <TransformAlgorithm URI="http://www.w3.org/2006/12/xml-c14n11"
-+ JAVACLASS="com.sun.org.apache.xml.internal.security.transforms.implementations.TransformC14N11" />
-+ <!-- c14n 1.1 with comments -->
-+ <TransformAlgorithm URI="http://www.w3.org/2006/12/xml-c14n11#WithComments"
-+ JAVACLASS="com.sun.org.apache.xml.internal.security.transforms.implementations.TransformC14N11_WithComments" />
- <!-- exclusive c14n omitting comments -->
- <TransformAlgorithm URI="http://www.w3.org/2001/10/xml-exc-c14n#"
- JAVACLASS="com.sun.org.apache.xml.internal.security.transforms.implementations.TransformC14NExclusive" />
-@@ -66,6 +76,8 @@
- JAVACLASS="com.sun.org.apache.xml.internal.security.algorithms.implementations.SignatureBaseRSA$SignatureRSASHA384" />
- <SignatureAlgorithm URI="http://www.w3.org/2001/04/xmldsig-more#rsa-sha512"
- JAVACLASS="com.sun.org.apache.xml.internal.security.algorithms.implementations.SignatureBaseRSA$SignatureRSASHA512" />
-+ <SignatureAlgorithm URI="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha1"
-+ JAVACLASS="com.sun.org.apache.xml.internal.security.algorithms.implementations.SignatureECDSA$SignatureECDSASHA1" />
-
- <SignatureAlgorithm URI="http://www.w3.org/2001/04/xmldsig-more#hmac-md5"
- JAVACLASS="com.sun.org.apache.xml.internal.security.algorithms.implementations.IntegrityHmac$IntegrityHmacMD5" />
-@@ -166,6 +178,13 @@
- RequirementLevel="OPTIONAL"
- SpecificationURL="http://www.ietf.org/internet-drafts/draft-eastlake-xmldsig-uri-02.txt"
- JCEName="SHA512withRSA"/>
-+
-+ <Algorithm URI="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha1"
-+ Description="ECDSA Signature with SHA-1 message digest"
-+ AlgorithmClass="Signature"
-+ RequirementLevel="OPTIONAL"
-+ SpecificationURL="http://www.ietf.org/internet-drafts/draft-eastlake-xmldsig-uri-02.txt"
-+ JCEName="ECDSAwithSHA1"/>
-
- <!-- MAC Algorithms -->
- <Algorithm URI="http://www.w3.org/2001/04/xmldsig-more#hmac-md5"
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/resource/schema/xmldsig-core-schema.dtd b/src/share/classes/com/sun/org/apache/xml/internal/security/resource/schema/xmldsig-core-schema.dtd
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/resource/schema/xmldsig-core-schema.dtd
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/resource/schema/xmldsig-core-schema.dtd
-@@ -3,7 +3,7 @@
- Joseph Reagle $last changed 20001215$
-
- http://www.w3.org/2000/09/xmldsig#
-- $Revision: 1.1 $ on $Date: 2002/02/08 20:32:26 $ by $Author: reagle $
-+ $Revision: 1.6 $ on $Date: 2008/07/24 16:15:03 $ by $Author: mullan $
-
- Copyright 2001 The Internet Society and W3C (Massachusetts Institute
- of Technology, Institut National de Recherche en Informatique et en
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/resource/schema/xmldsig-core-schema.xsd b/src/share/classes/com/sun/org/apache/xml/internal/security/resource/schema/xmldsig-core-schema.xsd
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/resource/schema/xmldsig-core-schema.xsd
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/resource/schema/xmldsig-core-schema.xsd
-@@ -11,7 +11,7 @@
-
- <!-- Schema for XML Signatures
- http://www.w3.org/2000/09/xmldsig#
-- $Revision: 1.1 $ on $Date: 2002/02/08 20:32:26 $ by $Author: reagle $
-+ $Revision: 1.6 $ on $Date: 2008/07/24 16:15:03 $ by $Author: mullan $
-
- Copyright 2001 The Internet Society and W3C (Massachusetts Institute
- of Technology, Institut National de Recherche en Informatique et en
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/signature/InvalidDigestValueException.java b/src/share/classes/com/sun/org/apache/xml/internal/security/signature/InvalidDigestValueException.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/InvalidDigestValueException.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/InvalidDigestValueException.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/signature/InvalidSignatureValueException.java b/src/share/classes/com/sun/org/apache/xml/internal/security/signature/InvalidSignatureValueException.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/InvalidSignatureValueException.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/InvalidSignatureValueException.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/signature/Manifest.java b/src/share/classes/com/sun/org/apache/xml/internal/security/signature/Manifest.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/Manifest.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/Manifest.java
-@@ -68,14 +68,11 @@
- /** Field verificationResults[] */
- private boolean verificationResults[] = null;
-
-- /** Field _signedContents */
-- List _signedContents = new ArrayList();
--
- /** Field _resolverProperties */
-- HashMap _resolverProperties = new HashMap(10);
-+ HashMap _resolverProperties = null;
-
- /** Field _perManifestResolvers */
-- List _perManifestResolvers = new ArrayList();
-+ List _perManifestResolvers = null;
-
- /**
- * Consturts {@link Manifest}
-@@ -144,8 +141,6 @@
- String BaseURI, String referenceURI, Transforms transforms, String digestURI, String ReferenceId, String ReferenceType)
- throws XMLSignatureException {
-
-- if (this._state == MODE_SIGN) {
--
- // the this._doc is handed implicitly by the this.getOwnerDocument()
- Reference ref = new Reference(this._doc, BaseURI, referenceURI, this,
- transforms, digestURI);
-@@ -164,7 +159,6 @@
- // add the Element of the Reference object to the Manifest/SignedInfo
- this._constructionElement.appendChild(ref.getElement());
- XMLUtils.addReturnToElement(this._constructionElement);
-- }
- }
-
- /**
-@@ -178,7 +172,6 @@
- public void generateDigestValues()
- throws XMLSignatureException, ReferenceNotInitializedException {
-
-- if (this._state == MODE_SIGN) {
- for (int i = 0; i < this.getLength(); i++) {
-
- // update the cached Reference object, the Element content is automatically updated
-@@ -186,7 +179,6 @@
-
- currentRef.generateDigestValue();
- }
-- }
- }
-
- /**
-@@ -208,11 +200,6 @@
- */
- public Reference item(int i) throws XMLSecurityException {
-
-- if (this._state == MODE_SIGN) {
--
-- // we already have real objects
-- return (Reference) this._references.get(i);
-- }
- if (this._references.get(i) == null) {
-
- // not yet constructed, so _we_ have to
-@@ -232,7 +219,7 @@
- */
- public void setId(String Id) {
-
-- if ((this._state == MODE_SIGN) && (Id != null)) {
-+ if (Id != null) {
- this._constructionElement.setAttributeNS(null, Constants._ATT_ID, Id);
- IdResolver.registerElementById(this._constructionElement, Id);
- }
-@@ -294,9 +281,9 @@
- XMLUtils.selectDsNodes(this._constructionElement.getFirstChild(),
- Constants._TAG_REFERENCE);
- }
-- if (true) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "verify " +_referencesEl.length + " References");
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "I am " + (followManifests
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, "verify " +_referencesEl.length + " References");
-+ log.log(java.util.logging.Level.FINE, "I am " + (followManifests
- ? ""
- : "not") + " requested to follow nested Manifests");
- }
-@@ -325,13 +312,13 @@
- if (!currentRefVerified) {
- verify = false;
- }
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "The Reference has Type " + currentRef.getType());
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "The Reference has Type " + currentRef.getType());
-
- // was verification successful till now and do we want to verify the Manifest?
- if (verify && followManifests
- && currentRef.typeIsReferenceToManifest()) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "We have to follow a nested Manifest");
-+ log.log(java.util.logging.Level.FINE, "We have to follow a nested Manifest");
-
- try {
- XMLSignatureInput signedManifestNodes =
-@@ -381,7 +368,7 @@
-
- log.log(java.util.logging.Level.WARNING, "The nested Manifest was invalid (bad)");
- } else {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "The nested Manifest was valid (good)");
-+ log.log(java.util.logging.Level.FINE, "The nested Manifest was valid (good)");
- }
- } catch (IOException ex) {
- throw new ReferenceNotInitializedException("empty", ex);
-@@ -458,9 +445,13 @@
- */
- public void addResourceResolver(ResourceResolver resolver) {
-
-- if (resolver != null) {
-- this._perManifestResolvers.add(resolver);
-+ if (resolver == null) {
-+ return;
- }
-+ if (_perManifestResolvers==null)
-+ _perManifestResolvers = new ArrayList();
-+ this._perManifestResolvers.add(resolver);
-+
- }
-
- /**
-@@ -470,9 +461,13 @@
- */
- public void addResourceResolver(ResourceResolverSpi resolverSpi) {
-
-- if (resolverSpi != null) {
-- this._perManifestResolvers.add(new ResourceResolver(resolverSpi));
-+ if (resolverSpi == null) {
-+ return;
- }
-+ if (_perManifestResolvers==null)
-+ _perManifestResolvers = new ArrayList();
-+ this._perManifestResolvers.add(new ResourceResolver(resolverSpi));
-+
- }
-
- /**
-@@ -483,6 +478,9 @@
- * @param value the value
- */
- public void setResolverProperty(String key, String value) {
-+ if (_resolverProperties==null) {
-+ _resolverProperties=new HashMap(10);
-+ }
- this._resolverProperties.put(key, value);
- }
-
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/signature/MissingResourceFailureException.java b/src/share/classes/com/sun/org/apache/xml/internal/security/signature/MissingResourceFailureException.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/MissingResourceFailureException.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/MissingResourceFailureException.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/signature/NodeFilter.java b/src/share/classes/com/sun/org/apache/xml/internal/security/signature/NodeFilter.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/NodeFilter.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/NodeFilter.java
-@@ -31,8 +31,23 @@
- /**
- * Tells if a node must be outputed in c14n.
- * @param n
-- * @return true if node must be outputed, false otherwise.
-+ * @return 1 if the node should be outputed.
-+ * 0 if node must not be outputed,
-+ * -1 if the node and all it's child must not be output.
-+ *
- */
-- public boolean isNodeInclude(Node n);
-+ public int isNodeInclude(Node n);
-+ /**
-+ * Tells if a node must be outputed in a c14n.
-+ * The caller must assured that this method is always call
-+ * in document order. The implementations can use this
-+ * restriction to optimize the transformation.
-+ * @param n
-+ * @param level the relative level in the tree
-+ * @return 1 if the node should be outputed.
-+ * 0 if node must not be outputed,
-+ * -1 if the node and all it's child must not be output.
-+ */
-+ public int isNodeIncludeDO(Node n, int level);
-
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/signature/ObjectContainer.java b/src/share/classes/com/sun/org/apache/xml/internal/security/signature/ObjectContainer.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/ObjectContainer.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/ObjectContainer.java
-@@ -20,8 +20,6 @@
- */
- package com.sun.org.apache.xml.internal.security.signature;
-
--
--
- import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
- import com.sun.org.apache.xml.internal.security.utils.Constants;
- import com.sun.org.apache.xml.internal.security.utils.IdResolver;
-@@ -35,16 +33,11 @@
- * Handles <code>&lt;ds:Object&gt;</code> elements
- * <code>Object<code> {@link Element} supply facility which can contain any kind data
- *
-- *
- * @author Christian Geuer-Pollmann
- * $todo$ if we remove childen, the boolean values are not updated
- */
- public class ObjectContainer extends SignatureElementProxy {
-
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(ObjectContainer.class.getName());
--
- /**
- * Constructs {@link ObjectContainer}
- *
-@@ -75,7 +68,7 @@
- */
- public void setId(String Id) {
-
-- if ((this._state == MODE_SIGN) && (Id != null)) {
-+ if ((Id != null)) {
- this._constructionElement.setAttributeNS(null, Constants._ATT_ID, Id);
- IdResolver.registerElementById(this._constructionElement, Id);
- }
-@@ -97,7 +90,7 @@
- */
- public void setMimeType(String MimeType) {
-
-- if ((this._state == MODE_SIGN) && (MimeType != null)) {
-+ if ( (MimeType != null)) {
- this._constructionElement.setAttributeNS(null, Constants._ATT_MIMETYPE,
- MimeType);
- }
-@@ -119,7 +112,7 @@
- */
- public void setEncoding(String Encoding) {
-
-- if ((this._state == MODE_SIGN) && (Encoding != null)) {
-+ if ((Encoding != null)) {
- this._constructionElement.setAttributeNS(null, Constants._ATT_ENCODING,
- Encoding);
- }
-@@ -135,18 +128,16 @@
- }
-
- /**
-- * Adds childe Node
-+ * Adds child Node
- *
-- * @param node childe Node
-+ * @param node child Node
- * @return the new node in the tree.
- */
- public Node appendChild(Node node) {
-
- Node result = null;
-
-- if (this._state == MODE_SIGN) {
-- result = this._constructionElement.appendChild(node);
-- }
-+ result = this._constructionElement.appendChild(node);
-
- return result;
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/signature/Reference.java b/src/share/classes/com/sun/org/apache/xml/internal/security/signature/Reference.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/Reference.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/Reference.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -25,6 +24,8 @@
-
- import java.io.IOException;
- import java.io.OutputStream;
-+import java.security.AccessController;
-+import java.security.PrivilegedAction;
- import java.util.HashSet;
- import java.util.Set;
-
-@@ -102,6 +103,32 @@
- */
- public class Reference extends SignatureElementProxy {
-
-+ /**
-+ * Look up useC14N11 system property. If true, an explicit C14N11 transform
-+ * will be added if necessary when generating the signature. See section
-+ * 3.1.1 of http://www.w3.org/2007/xmlsec/Drafts/xmldsig-core/ for more info.
-+ */
-+ private static boolean useC14N11 =
-+ AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
-+ public Boolean run() {
-+ return Boolean.getBoolean
-+ ("com.sun.org.apache.xml.internal.security.useC14N11");
-+ }
-+ });
-+
-+/*
-+ static {
-+ try {
-+ useC14N11 = Boolean.getBoolean("com.sun.org.apache.xml.internal.security.useC14N11");
-+ } catch (Exception e) {
-+ // ignore exceptions
-+ }
-+ }
-+*/
-+
-+ /** Field CacheSignedNodes */
-+ public final static boolean CacheSignedNodes = false;
-+
- /** {@link java.util.logging} logging facility */
- static java.util.logging.Logger log =
- java.util.logging.Logger.getLogger(Reference.class.getName());
-@@ -118,6 +145,12 @@
- XMLSignatureInput _transformsOutput;
- //J+
-
-+private Transforms transforms;
-+
-+private Element digestMethodElem;
-+
-+private Element digestValueElement;
-+
- /**
- * Constructor Reference
- *
-@@ -148,6 +181,7 @@
- // this._manifest.appendChild(this._doc.createTextNode("\n"));
-
- if (transforms != null) {
-+ this.transforms=transforms;
- this._constructionElement.appendChild(transforms.getElement());
- XMLUtils.addReturnToElement(this._constructionElement);
- }
-@@ -156,11 +190,12 @@
- MessageDigestAlgorithm.getInstance(this._doc,
- messageDigestAlgorithm);
-
-- this._constructionElement.appendChild(mda.getElement());
-+ digestMethodElem=mda.getElement();
-+ this._constructionElement.appendChild(digestMethodElem);
- XMLUtils.addReturnToElement(this._constructionElement);
- }
- {
-- Element digestValueElement =
-+ digestValueElement =
- XMLUtils.createElementInSignatureSpace(this._doc,
- Constants._TAG_DIGESTVALUE);
-
-@@ -182,7 +217,15 @@
- throws XMLSecurityException {
-
- super(element, BaseURI);
--
-+ this._baseURI=BaseURI;
-+ Element el=XMLUtils.getNextElement(element.getFirstChild());
-+ if (Constants._TAG_TRANSFORMS.equals(el.getLocalName()) &&
-+ Constants.SignatureSpecNS.equals(el.getNamespaceURI())) {
-+ transforms = new Transforms(el,this._baseURI);
-+ el=XMLUtils.getNextElement(el.getNextSibling());
-+ }
-+ digestMethodElem = el;
-+ digestValueElement =XMLUtils.getNextElement(digestMethodElem.getNextSibling());;
- this._manifest = manifest;
- }
-
-@@ -197,9 +240,6 @@
- public MessageDigestAlgorithm getMessageDigestAlgorithm()
- throws XMLSignatureException {
-
-- Element digestMethodElem = XMLUtils.selectDsNode(this._constructionElement.getFirstChild(),
-- Constants._TAG_DIGESTMETHOD,0);
--
- if (digestMethodElem == null) {
- return null;
- }
-@@ -221,7 +261,7 @@
- */
- public void setURI(String URI) {
-
-- if ((this._state == MODE_SIGN) && (URI != null)) {
-+ if ( URI != null) {
- this._constructionElement.setAttributeNS(null, Constants._ATT_URI,
- URI);
- }
-@@ -243,7 +283,7 @@
- */
- public void setId(String Id) {
-
-- if ((this._state == MODE_SIGN) && (Id != null)) {
-+ if ( Id != null ) {
- this._constructionElement.setAttributeNS(null, Constants._ATT_ID, Id);
- IdResolver.registerElementById(this._constructionElement, Id);
- }
-@@ -265,7 +305,7 @@
- */
- public void setType(String Type) {
-
-- if ((this._state == MODE_SIGN) && (Type != null)) {
-+ if (Type != null) {
- this._constructionElement.setAttributeNS(null, Constants._ATT_TYPE,
- Type);
- }
-@@ -291,8 +331,7 @@
- */
- public boolean typeIsReferenceToObject() {
-
-- if ((this.getType() != null)
-- && this.getType().equals(Reference.OBJECT_URI)) {
-+ if (Reference.OBJECT_URI.equals(this.getType())) {
- return true;
- }
-
-@@ -309,8 +348,7 @@
- */
- public boolean typeIsReferenceToManifest() {
-
-- if ((this.getType() != null)
-- && this.getType().equals(Reference.MANIFEST_URI)) {
-+ if (Reference.MANIFEST_URI.equals(this.getType())) {
- return true;
- }
-
-@@ -324,10 +362,6 @@
- */
- private void setDigestValueElement(byte[] digestValue)
- {
--
-- if (this._state == MODE_SIGN) {
-- Element digestValueElement =XMLUtils.selectDsNode(this._constructionElement.getFirstChild(),
-- Constants._TAG_DIGESTVALUE,0);
- Node n=digestValueElement.getFirstChild();
- while (n!=null) {
- digestValueElement.removeChild(n);
-@@ -338,7 +372,6 @@
- Text t = this._doc.createTextNode(base64codedValue);
-
- digestValueElement.appendChild(t);
-- }
- }
-
- /**
-@@ -349,11 +382,7 @@
- */
- public void generateDigestValue()
- throws XMLSignatureException, ReferenceNotInitializedException {
--
-- if (this._state == MODE_SIGN) {
--
-- this.setDigestValueElement(this.calculateDigest());
-- }
-+ this.setDigestValueElement(this.calculateDigest(false));
- }
-
- /**
-@@ -608,9 +637,12 @@
- * but only preserve the octets, the memory footprint is dramatically
- * reduced.
- */
-+ if (!Reference.CacheSignedNodes) {
-
-- this._transformsOutput = output;
-+ this._transformsOutput = output;//new XMLSignatureInput(output.getBytes());
-
-+ //this._transformsOutput.setSourceURI(output.getSourceURI());
-+ }
- return output;
- } catch (XMLSecurityException ex) {
- throw new ReferenceNotInitializedException("empty", ex);
-@@ -630,16 +662,7 @@
- throws XMLSignatureException, InvalidTransformException,
- TransformationException, XMLSecurityException {
-
-- Element transformsElement = XMLUtils.selectDsNode(this._constructionElement.getFirstChild(),
-- Constants._TAG_TRANSFORMS,0);
--
-- if (transformsElement != null) {
-- Transforms transforms = new Transforms(transformsElement,
-- this._baseURI);
--
-- return transforms;
-- }
-- return null;
-+ return transforms;
- }
-
- /**
-@@ -667,13 +690,14 @@
-
-
- /**
-- * Method resolverResult
-+ * Method calculateDigest
- *
-+ * @param validating true if validating the reference
- * @return reference Calculate the digest of this reference.
- * @throws ReferenceNotInitializedException
- * @throws XMLSignatureException
- */
-- private byte[] calculateDigest()
-+ private byte[] calculateDigest(boolean validating)
- throws ReferenceNotInitializedException, XMLSignatureException {
-
- try {
-@@ -684,7 +708,20 @@
- DigesterOutputStream diOs=new DigesterOutputStream(mda);
- OutputStream os=new UnsyncBufferedOutputStream(diOs);
- XMLSignatureInput output=this.dereferenceURIandPerformTransforms(os);
-- output.updateOutputStream(os);
-+ // if signing and c14n11 property == true explicitly add
-+ // C14N11 transform if needed
-+ if (this.useC14N11 && !validating &&
-+ !output.isOutputStreamSet() && !output.isOctetStream()) {
-+ if (transforms == null) {
-+ transforms = new Transforms(this._doc);
-+ this._constructionElement.insertBefore
-+ (transforms.getElement(), digestMethodElem);
-+ }
-+ transforms.addTransform(Transforms.TRANSFORM_C14N11_OMIT_COMMENTS);
-+ output.updateOutputStream(os, true);
-+ } else {
-+ output.updateOutputStream(os);
-+ }
- os.flush();
- //this.getReferencedBytes(diOs);
- //mda.update(data);
-@@ -694,7 +731,7 @@
- throw new ReferenceNotInitializedException("empty", ex);
- } catch (IOException ex) {
- throw new ReferenceNotInitializedException("empty", ex);
-- }
-+ }
- }
-
- /**
-@@ -702,12 +739,10 @@
- *
- * @return the digest value.
- * @throws Base64DecodingException if Reference contains no proper base64 encoded data.
-- * @throws XMLSecurityException if the Reference does not contain a DigestValue element
-+ * @throws XMLSecurityException if the Reference does not contain a DigestValue element
- */
- public byte[] getDigestValue() throws Base64DecodingException, XMLSecurityException {
-- Element digestValueElem = XMLUtils.selectDsNode(this._constructionElement.getFirstChild()
-- ,Constants._TAG_DIGESTVALUE,0);
-- if (digestValueElem == null) {
-+ if (digestValueElement == null) {
- // The required element is not in the XML!
- Object[] exArgs ={ Constants._TAG_DIGESTVALUE,
- Constants.SignatureSpecNS };
-@@ -715,7 +750,7 @@
- "signature.Verification.NoSignatureElement",
- exArgs);
- }
-- byte[] elemDig = Base64.decode(digestValueElem);
-+ byte[] elemDig = Base64.decode(digestValueElement);
- return elemDig;
- }
-
-@@ -731,13 +766,15 @@
- throws ReferenceNotInitializedException, XMLSecurityException {
-
- byte[] elemDig = this.getDigestValue();
-- byte[] calcDig = this.calculateDigest();
-+ byte[] calcDig = this.calculateDigest(true);
- boolean equal = MessageDigestAlgorithm.isEqual(elemDig, calcDig);
-
- if (!equal) {
- log.log(java.util.logging.Level.WARNING, "Verification failed for URI \"" + this.getURI() + "\"");
-+ log.log(java.util.logging.Level.WARNING, "Expected Digest: " + Base64.encode(elemDig));
-+ log.log(java.util.logging.Level.WARNING, "Actual Digest: " + Base64.encode(calcDig));
- } else {
-- if (log.isLoggable(java.util.logging.Level.INFO)) log.log(java.util.logging.Level.INFO, "Verification successful for URI \"" + this.getURI() + "\"");
-+ log.log(java.util.logging.Level.INFO, "Verification successful for URI \"" + this.getURI() + "\"");
- }
-
- return equal;
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/signature/ReferenceNotInitializedException.java b/src/share/classes/com/sun/org/apache/xml/internal/security/signature/ReferenceNotInitializedException.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/ReferenceNotInitializedException.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/ReferenceNotInitializedException.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/signature/SignatureProperties.java b/src/share/classes/com/sun/org/apache/xml/internal/security/signature/SignatureProperties.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/SignatureProperties.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/SignatureProperties.java
-@@ -20,8 +20,6 @@
- */
- package com.sun.org.apache.xml.internal.security.signature;
-
--
--
- import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
- import com.sun.org.apache.xml.internal.security.utils.Constants;
- import com.sun.org.apache.xml.internal.security.utils.IdResolver;
-@@ -42,10 +40,6 @@
- */
- public class SignatureProperties extends SignatureElementProxy {
-
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(SignatureProperties.class.getName());
--
- /**
- * Constructor SignatureProperties
- *
-@@ -115,7 +109,7 @@
- */
- public void setId(String Id) {
-
-- if ((this._state == MODE_SIGN) && (Id != null)) {
-+ if ((Id != null)) {
- this._constructionElement.setAttributeNS(null, Constants._ATT_ID, Id);
- IdResolver.registerElementById(this._constructionElement, Id);
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/signature/SignatureProperty.java b/src/share/classes/com/sun/org/apache/xml/internal/security/signature/SignatureProperty.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/SignatureProperty.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/SignatureProperty.java
-@@ -30,18 +30,13 @@
-
- /**
- * Handles <code>&lt;ds:SignatureProperty&gt;</code> elements
-- * Addittional information item concerning the generation of the signature(s) can
-+ * Additional information item concerning the generation of the signature(s) can
- * be placed in this Element
- *
- * @author Christian Geuer-Pollmann
- */
- public class SignatureProperty extends SignatureElementProxy {
-
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(
-- SignatureProperty.class.getName());
--
- /**
- * Constructs{@link SignatureProperty} using specified <code>Target</code> attribute
- *
-@@ -85,7 +80,7 @@
- */
- public void setId(String Id) {
-
-- if ((this._state == MODE_SIGN) && (Id != null)) {
-+ if ((Id != null)) {
- this._constructionElement.setAttributeNS(null, Constants._ATT_ID, Id);
- IdResolver.registerElementById(this._constructionElement, Id);
- }
-@@ -107,7 +102,7 @@
- */
- public void setTarget(String Target) {
-
-- if ((this._state == MODE_SIGN) && (Target != null)) {
-+ if ((Target != null)) {
- this._constructionElement.setAttributeNS(null, Constants._ATT_TARGET, Target);
- }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/signature/SignedInfo.java b/src/share/classes/com/sun/org/apache/xml/internal/security/signature/SignedInfo.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/SignedInfo.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/SignedInfo.java
-@@ -20,12 +20,9 @@
- */
- package com.sun.org.apache.xml.internal.security.signature;
-
--
--
- import java.io.ByteArrayInputStream;
- import java.io.IOException;
- import java.io.OutputStream;
--
- import javax.crypto.SecretKey;
- import javax.crypto.spec.SecretKeySpec;
- import javax.xml.parsers.ParserConfigurationException;
-@@ -43,165 +40,174 @@
- import org.w3c.dom.Node;
- import org.xml.sax.SAXException;
-
--
- /**
- * Handles <code>&lt;ds:SignedInfo&gt;</code> elements
- * This <code>SignedInfo<code> element includes the canonicalization algorithm,
-- * a signature algorithm, and one or more references
-+ * a signature algorithm, and one or more references.
-+ *
- * @author Christian Geuer-Pollmann
- */
- public class SignedInfo extends Manifest {
-
-- /** Field _signatureAlgorithm */
-- private SignatureAlgorithm _signatureAlgorithm = null;
-+ /** Field _signatureAlgorithm */
-+ private SignatureAlgorithm _signatureAlgorithm = null;
-
-- /** Field _c14nizedBytes */
-- private byte[] _c14nizedBytes = null;
-+ /** Field _c14nizedBytes */
-+ private byte[] _c14nizedBytes = null;
-
-- /**
-- * Overwrites {@link Manifest#addDocument} because it creates another Element.
-- *
-- * @param doc the {@link Document} in which <code>XMLsignature</code> will be placed
-- * @throws XMLSecurityException
-- */
-- public SignedInfo(Document doc) throws XMLSecurityException {
-- this(doc, XMLSignature.ALGO_ID_SIGNATURE_DSA, Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS);
-- }
-+ private Element c14nMethod;
-+ private Element signatureMethod;
-
-- /**
-- * Constructs {@link SignedInfo} using given Canoicaliztion algorithm and Signature algorithm
-- *
-- * @param doc <code>SignedInfo</code> is placed in this document
-- * @param CanonicalizationMethodURI URI representation of the Canonicalization method
-- * @param SignatureMethodURI URI representation of the Digest and Signature algorithm
-- * @throws XMLSecurityException
-- */
-- public SignedInfo(
-- Document doc, String SignatureMethodURI, String CanonicalizationMethodURI)
-+ /**
-+ * Overwrites {@link Manifest#addDocument} because it creates another
-+ * Element.
-+ *
-+ * @param doc the {@link Document} in which <code>XMLsignature</code> will
-+ * be placed
-+ * @throws XMLSecurityException
-+ */
-+ public SignedInfo(Document doc) throws XMLSecurityException {
-+ this(doc, XMLSignature.ALGO_ID_SIGNATURE_DSA,
-+ Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS);
-+ }
-+
-+ /**
-+ * Constructs {@link SignedInfo} using given Canonicalization algorithm and
-+ * Signature algorithm.
-+ *
-+ * @param doc <code>SignedInfo</code> is placed in this document
-+ * @param signatureMethodURI URI representation of the Digest and
-+ * Signature algorithm
-+ * @param canonicalizationMethodURI URI representation of the
-+ * Canonicalization method
-+ * @throws XMLSecurityException
-+ */
-+ public SignedInfo(Document doc, String signatureMethodURI,
-+ String canonicalizationMethodURI)
- throws XMLSecurityException {
-- this(doc, SignatureMethodURI, 0, CanonicalizationMethodURI);
-- }
-+ this(doc, signatureMethodURI, 0, canonicalizationMethodURI);
-+ }
-
-- /**
-- * Constructor SignedInfo
-- *
-- * @param doc
-- * @param CanonicalizationMethodURI
-- * @param SignatureMethodURI
-- * @param HMACOutputLength
-- * @throws XMLSecurityException
-- */
-- public SignedInfo(
-- Document doc, String SignatureMethodURI, int HMACOutputLength, String CanonicalizationMethodURI)
-+ /**
-+ * Constructor SignedInfo
-+ *
-+ * @param doc <code>SignedInfo</code> is placed in this document
-+ * @param signatureMethodURI URI representation of the Digest and
-+ * Signature algorithm
-+ * @param hMACOutputLength
-+ * @param canonicalizationMethodURI URI representation of the
-+ * Canonicalization method
-+ * @throws XMLSecurityException
-+ */
-+ public SignedInfo(Document doc, String signatureMethodURI,
-+ int hMACOutputLength, String canonicalizationMethodURI)
- throws XMLSecurityException {
-
-- super(doc);
-+ super(doc);
-
-- // XMLUtils.addReturnToElement(this._constructionElement);
-- {
-- Element canonElem = XMLUtils.createElementInSignatureSpace(this._doc,
-+ c14nMethod = XMLUtils.createElementInSignatureSpace(this._doc,
- Constants._TAG_CANONICALIZATIONMETHOD);
-
-- canonElem.setAttributeNS(null, Constants._ATT_ALGORITHM,
-- CanonicalizationMethodURI);
-- this._constructionElement.appendChild(canonElem);
-- XMLUtils.addReturnToElement(this._constructionElement);
-- }
-- {
-- if (HMACOutputLength > 0) {
-+ c14nMethod.setAttributeNS(null, Constants._ATT_ALGORITHM,
-+ canonicalizationMethodURI);
-+ this._constructionElement.appendChild(c14nMethod);
-+ XMLUtils.addReturnToElement(this._constructionElement);
-+
-+ if (hMACOutputLength > 0) {
- this._signatureAlgorithm = new SignatureAlgorithm(this._doc,
-- SignatureMethodURI, HMACOutputLength);
-- } else {
-+ signatureMethodURI, hMACOutputLength);
-+ } else {
- this._signatureAlgorithm = new SignatureAlgorithm(this._doc,
-- SignatureMethodURI);
-- }
-+ signatureMethodURI);
-+ }
-
-- this._constructionElement
-- .appendChild(this._signatureAlgorithm.getElement());
-- XMLUtils.addReturnToElement(this._constructionElement);
-- }
-- }
-+ signatureMethod = this._signatureAlgorithm.getElement();
-+ this._constructionElement.appendChild(signatureMethod);
-+ XMLUtils.addReturnToElement(this._constructionElement);
-+ }
-
-- /**
-- * @param doc
-- * @param SignatureMethodElem
-- * @param CanonicalizationMethodElem
-- * @throws XMLSecurityException
-- */
-- public SignedInfo(
-- Document doc, Element SignatureMethodElem, Element CanonicalizationMethodElem)
-- throws XMLSecurityException {
-+ /**
-+ * @param doc
-+ * @param signatureMethodElem
-+ * @param canonicalizationMethodElem
-+ * @throws XMLSecurityException
-+ */
-+ public SignedInfo(Document doc, Element signatureMethodElem,
-+ Element canonicalizationMethodElem) throws XMLSecurityException {
-
-- super(doc);
-+ super(doc);
-+ // Check this?
-+ this.c14nMethod = canonicalizationMethodElem;
-+ this._constructionElement.appendChild(c14nMethod);
-+ XMLUtils.addReturnToElement(this._constructionElement);
-
-- this._constructionElement.appendChild(CanonicalizationMethodElem);
-- XMLUtils.addReturnToElement(this._constructionElement);
-+ this._signatureAlgorithm =
-+ new SignatureAlgorithm(signatureMethodElem, null);
-
-- this._signatureAlgorithm = new SignatureAlgorithm(SignatureMethodElem, null);
-+ signatureMethod = this._signatureAlgorithm.getElement();
-+ this._constructionElement.appendChild(signatureMethod);
-
-- this._constructionElement
-- .appendChild(this._signatureAlgorithm.getElement());
-- XMLUtils.addReturnToElement(this._constructionElement);
-- }
-+ XMLUtils.addReturnToElement(this._constructionElement);
-+ }
-
-- /**
-- * Build a {@link SignedInfo} from an {@link Element}
-- *
-- * @param element <code>SignedInfo</code>
-- * @param BaseURI the URI of the resource where the XML instance was stored
-- * @throws XMLSecurityException
-- * @see <A HREF="http://lists.w3.org/Archives/Public/w3c-ietf-xmldsig/2001OctDec/0033.html">Question</A>
-- * @see <A HREF="http://lists.w3.org/Archives/Public/w3c-ietf-xmldsig/2001OctDec/0054.html">Answer</A>
-- */
-- public SignedInfo(Element element, String BaseURI)
-+ /**
-+ * Build a {@link SignedInfo} from an {@link Element}
-+ *
-+ * @param element <code>SignedInfo</code>
-+ * @param baseURI the URI of the resource where the XML instance was stored
-+ * @throws XMLSecurityException
-+ * @see <A HREF="http://lists.w3.org/Archives/Public/w3c-ietf-xmldsig/2001OctDec/0033.html">Question</A>
-+ * @see <A HREF="http://lists.w3.org/Archives/Public/w3c-ietf-xmldsig/2001OctDec/0054.html">Answer</A>
-+ */
-+ public SignedInfo(Element element, String baseURI)
- throws XMLSecurityException {
-
-- // Parse the Reference children and Id attribute in the Manifest
-- super(element, BaseURI);
-+ // Parse the Reference children and Id attribute in the Manifest
-+ super(element, baseURI);
-
-- /* canonicalize ds:SignedInfo, reparse it into a new document
-- * and replace the original not-canonicalized ds:SignedInfo by
-- * the re-parsed canonicalized one.
-- */
-- String c14nMethodURI=this.getCanonicalizationMethodURI();
-- if (!(c14nMethodURI.equals("http://www.w3.org/TR/2001/REC-xml-c14n-20010315") ||
-- c14nMethodURI.equals("http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments") ||
-- c14nMethodURI.equals("http://www.w3.org/2001/10/xml-exc-c14n#") ||
-- c14nMethodURI.equals("http://www.w3.org/2001/10/xml-exc-c14n#WithComments"))) {
-- //The c14n is not a secure one and can rewrite the URIs or like that reparse the SignedInfo to be sure
-- try {
-- Canonicalizer c14nizer =
-- Canonicalizer.getInstance(this.getCanonicalizationMethodURI());
-+ /* canonicalize ds:SignedInfo, reparse it into a new document
-+ * and replace the original not-canonicalized ds:SignedInfo by
-+ * the re-parsed canonicalized one.
-+ */
-+ c14nMethod = XMLUtils.getNextElement(element.getFirstChild());
-+ String c14nMethodURI = this.getCanonicalizationMethodURI();
-+ if (!(c14nMethodURI.equals(Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS) ||
-+ c14nMethodURI.equals(Canonicalizer.ALGO_ID_C14N_WITH_COMMENTS) ||
-+ c14nMethodURI.equals(Canonicalizer.ALGO_ID_C14N_EXCL_OMIT_COMMENTS) ||
-+ c14nMethodURI.equals(Canonicalizer.ALGO_ID_C14N_EXCL_WITH_COMMENTS))) {
-+ // the c14n is not a secure one and can rewrite the URIs or like
-+ // that reparse the SignedInfo to be sure
-+ try {
-+ Canonicalizer c14nizer =
-+ Canonicalizer.getInstance(this.getCanonicalizationMethodURI());
-
-- this._c14nizedBytes =
-- c14nizer.canonicalizeSubtree(this._constructionElement);
-- javax.xml.parsers.DocumentBuilderFactory dbf =
-- javax.xml.parsers.DocumentBuilderFactory.newInstance();
-+ this._c14nizedBytes =
-+ c14nizer.canonicalizeSubtree(this._constructionElement);
-+ javax.xml.parsers.DocumentBuilderFactory dbf =
-+ javax.xml.parsers.DocumentBuilderFactory.newInstance();
-+ dbf.setNamespaceAware(true);
-+ javax.xml.parsers.DocumentBuilder db = dbf.newDocumentBuilder();
-+ org.w3c.dom.Document newdoc =
-+ db.parse(new ByteArrayInputStream(this._c14nizedBytes));
-+ Node imported =
-+ this._doc.importNode(newdoc.getDocumentElement(), true);
-
-- dbf.setNamespaceAware(true);
-+ this._constructionElement.getParentNode().replaceChild(imported,
-+ this._constructionElement);
-
-- javax.xml.parsers.DocumentBuilder db = dbf.newDocumentBuilder();
-- org.w3c.dom.Document newdoc =
-- db.parse(new ByteArrayInputStream(this._c14nizedBytes));
-- Node imported = this._doc.importNode(newdoc.getDocumentElement(),
-- true);
--
-- this._constructionElement.getParentNode().replaceChild(imported,
-- this._constructionElement);
--
-- this._constructionElement = (Element) imported;
-- } catch (ParserConfigurationException ex) {
-- throw new XMLSecurityException("empty", ex);
-- } catch (IOException ex) {
-- throw new XMLSecurityException("empty", ex);
-- } catch (SAXException ex) {
-- throw new XMLSecurityException("empty", ex);
-- }
-- }
-- this._signatureAlgorithm =
-- new SignatureAlgorithm(this.getSignatureMethodElement(),
-- this.getBaseURI());
-- }
-+ this._constructionElement = (Element) imported;
-+ } catch (ParserConfigurationException ex) {
-+ throw new XMLSecurityException("empty", ex);
-+ } catch (IOException ex) {
-+ throw new XMLSecurityException("empty", ex);
-+ } catch (SAXException ex) {
-+ throw new XMLSecurityException("empty", ex);
-+ }
-+ }
-+ signatureMethod = XMLUtils.getNextElement(c14nMethod.getNextSibling());
-+ this._signatureAlgorithm =
-+ new SignatureAlgorithm(signatureMethod, this.getBaseURI());
-+ }
-
- /**
- * Tests core validation process
-@@ -294,12 +300,8 @@
- */
- public String getCanonicalizationMethodURI() {
-
-- Element el= XMLUtils.selectDsNode(this._constructionElement.getFirstChild(),
-- Constants._TAG_CANONICALIZATIONMETHOD,0);
-- if (el==null) {
-- return null;
-- }
-- return el.getAttributeNS(null, Constants._ATT_ALGORITHM);
-+
-+ return c14nMethod.getAttributeNS(null, Constants._ATT_ALGORITHM);
- }
-
- /**
-@@ -324,8 +326,7 @@
- *
- */
- public Element getSignatureMethodElement() {
-- return XMLUtils.selectDsNode(this._constructionElement.getFirstChild(),
-- Constants._TAG_SIGNATUREMETHOD,0);
-+ return signatureMethod;
- }
-
- /**
-@@ -343,6 +344,9 @@
- .getJCEAlgorithmString());
- }
-
-+ protected SignatureAlgorithm getSignatureAlgorithm() {
-+ return _signatureAlgorithm;
-+ }
- /**
- * Method getBaseLocalName
- * @inheritDoc
-@@ -354,21 +358,16 @@
-
- public String getInclusiveNamespaces() {
-
-- Element el= XMLUtils.selectDsNode(this._constructionElement.getFirstChild(),
-- Constants._TAG_CANONICALIZATIONMETHOD,0);
-- if (el==null) {
-- return null;
-- }
-
-- String c14nMethodURI = el.getAttributeNS(null, Constants._ATT_ALGORITHM);
-+
-+ String c14nMethodURI = c14nMethod.getAttributeNS(null, Constants._ATT_ALGORITHM);
- if(!(c14nMethodURI.equals("http://www.w3.org/2001/10/xml-exc-c14n#") ||
- c14nMethodURI.equals("http://www.w3.org/2001/10/xml-exc-c14n#WithComments"))) {
- return null;
- }
-
-- Element inclusiveElement = XMLUtils.selectNode(
-- el.getFirstChild(),InclusiveNamespaces.ExclusiveCanonicalizationNamespace,
-- InclusiveNamespaces._TAG_EC_INCLUSIVENAMESPACES,0);
-+ Element inclusiveElement = XMLUtils.getNextElement(
-+ c14nMethod.getFirstChild());
-
- if(inclusiveElement != null)
- {
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignature.java b/src/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignature.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignature.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignature.java
-@@ -75,7 +75,7 @@
- * <li>sign and checkSignatureValue methods are used to sign and validate the
- * signature. </li></ul>
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public final class XMLSignature extends SignatureElementProxy {
-
-@@ -115,6 +115,10 @@
- public static final String ALGO_ID_MAC_HMAC_SHA384 = Constants.MoreAlgorithmsSpecNS + "hmac-sha384";
- /** HMAC - Optional HMAC-SHA512 */
- public static final String ALGO_ID_MAC_HMAC_SHA512 = Constants.MoreAlgorithmsSpecNS + "hmac-sha512";
-+ /**Signature - Optional ECDSAwithSHA1 */
-+ public static final String ALGO_ID_SIGNATURE_ECDSA_SHA1 = "http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha1";
-+
-+
- //J+
-
- /** ds:Signature.ds:SignedInfo element */
-@@ -130,6 +134,8 @@
- */
- private boolean _followManifestsDuringValidation = false;
-
-+private Element signatureValueElement;
-+
- /**
- * This creates a new <CODE>ds:Signature</CODE> Element and adds an empty
- * <CODE>ds:SignedInfo</CODE>.
-@@ -195,6 +201,15 @@
-
- super(doc);
-
-+ String xmlnsDsPrefix =
-+ getDefaultPrefixBindings(Constants.SignatureSpecNS);
-+ if (xmlnsDsPrefix == null) {
-+ this._constructionElement.setAttributeNS
-+ (Constants.NamespaceSpecNS, "xmlns", Constants.SignatureSpecNS);
-+ } else {
-+ this._constructionElement.setAttributeNS
-+ (Constants.NamespaceSpecNS, xmlnsDsPrefix, Constants.SignatureSpecNS);
-+ }
- XMLUtils.addReturnToElement(this._constructionElement);
-
- this._baseURI = BaseURI;
-@@ -206,7 +221,7 @@
- XMLUtils.addReturnToElement(this._constructionElement);
-
- // create an empty SignatureValue; this is filled by setSignatureValueElement
-- Element signatureValueElement =
-+ signatureValueElement =
- XMLUtils.createElementInSignatureSpace(this._doc,
- Constants._TAG_SIGNATUREVALUE);
-
-@@ -227,6 +242,15 @@
-
- super(doc);
-
-+ String xmlnsDsPrefix =
-+ getDefaultPrefixBindings(Constants.SignatureSpecNS);
-+ if (xmlnsDsPrefix == null) {
-+ this._constructionElement.setAttributeNS
-+ (Constants.NamespaceSpecNS, "xmlns", Constants.SignatureSpecNS);
-+ } else {
-+ this._constructionElement.setAttributeNS
-+ (Constants.NamespaceSpecNS, xmlnsDsPrefix, Constants.SignatureSpecNS);
-+ }
- XMLUtils.addReturnToElement(this._constructionElement);
-
- this._baseURI = BaseURI;
-@@ -236,7 +260,7 @@
- XMLUtils.addReturnToElement(this._constructionElement);
-
- // create an empty SignatureValue; this is filled by setSignatureValueElement
-- Element signatureValueElement =
-+ signatureValueElement =
- XMLUtils.createElementInSignatureSpace(this._doc,
- Constants._TAG_SIGNATUREVALUE);
-
-@@ -259,8 +283,8 @@
- super(element, BaseURI);
-
- // check out SignedInfo child
-- Element signedInfoElem = XMLUtils.selectDsNode(this._constructionElement.getFirstChild(),
-- Constants._TAG_SIGNEDINFO,0);
-+ Element signedInfoElem = XMLUtils.getNextElement(element.getFirstChild());// XMLUtils.selectDsNode(this._constructionElement.getFirstChild(),
-+ //Constants._TAG_SIGNEDINFO,0);
-
- // check to see if it is there
- if (signedInfoElem == null) {
-@@ -274,8 +298,8 @@
- this._signedInfo = new SignedInfo(signedInfoElem, BaseURI);
-
- // check out SignatureValue child
-- Element signatureValueElement = XMLUtils.selectDsNode(this._constructionElement.getFirstChild(),
-- Constants._TAG_SIGNATUREVALUE,0);
-+ this.signatureValueElement =XMLUtils.getNextElement(signedInfoElem.getNextSibling()); //XMLUtils.selectDsNode(this._constructionElement.getFirstChild(),
-+ // Constants._TAG_SIGNATUREVALUE,0);
-
- // check to see if it exists
- if (signatureValueElement == null) {
-@@ -286,11 +310,12 @@
- }
-
- // <element ref="ds:KeyInfo" minOccurs="0"/>
-- Element keyInfoElem =XMLUtils.selectDsNode(this._constructionElement.getFirstChild(),
-- Constants._TAG_KEYINFO,0);
-+ Element keyInfoElem = XMLUtils.getNextElement(signatureValueElement.getNextSibling());//XMLUtils.selectDsNode(this._constructionElement.getFirstChild(),
-+ // Constants._TAG_KEYINFO,0);
-
- // If it exists use it, but it's not mandatory
-- if (keyInfoElem != null) {
-+ if ((keyInfoElem != null) && (keyInfoElem.getNamespaceURI().equals(Constants.SignatureSpecNS) &&
-+ keyInfoElem.getLocalName().equals(Constants._TAG_KEYINFO)) ) {
- this._keyInfo = new KeyInfo(keyInfoElem, BaseURI);
- }
- }
-@@ -302,7 +327,7 @@
- */
- public void setId(String Id) {
-
-- if ((this._state == MODE_SIGN) && (Id != null)) {
-+ if ( (Id != null)) {
- this._constructionElement.setAttributeNS(null, Constants._ATT_ID, Id);
- IdResolver.registerElementById(this._constructionElement, Id);
- }
-@@ -336,9 +361,7 @@
- public byte[] getSignatureValue() throws XMLSignatureException {
-
- try {
-- Element signatureValueElem = XMLUtils.selectDsNode(this._constructionElement.getFirstChild(),
-- Constants._TAG_SIGNATUREVALUE,0);
-- byte[] signatureValue = Base64.decode(signatureValueElem);
-+ byte[] signatureValue = Base64.decode(signatureValueElement);
-
- return signatureValue;
- } catch (Base64DecodingException ex) {
-@@ -346,33 +369,28 @@
- }
- }
-
-- /**
-- * Base64 encodes and sets the bytes as the content of the SignatureValue
-- * Node.
-- *
-- * @param bytes bytes to be used by SignatureValue before Base64 encoding
-- */
-- private void setSignatureValueElement(byte[] bytes)
-- {
-+ /**
-+ * Base64 encodes and sets the bytes as the content of the SignatureValue
-+ * Node.
-+ *
-+ * @param bytes bytes to be used by SignatureValue before Base64 encoding
-+ */
-+ private void setSignatureValueElement(byte[] bytes) {
-
-- if (this._state == MODE_SIGN) {
-- Element signatureValueElem = XMLUtils.selectDsNode(this._constructionElement.getFirstChild(),
-- Constants._TAG_SIGNATUREVALUE,0);
-- while (signatureValueElem.hasChildNodes()) {
-- signatureValueElem.removeChild(signatureValueElem.getFirstChild());
-- }
-+ while (signatureValueElement.hasChildNodes()) {
-+ signatureValueElement.removeChild
-+ (signatureValueElement.getFirstChild());
-+ }
-
-- String base64codedValue = Base64.encode(bytes);
-+ String base64codedValue = Base64.encode(bytes);
-
-- if (base64codedValue.length() > 76) {
-+ if (base64codedValue.length() > 76 && !XMLUtils.ignoreLineBreaks()) {
- base64codedValue = "\n" + base64codedValue + "\n";
-- }
-+ }
-
-- Text t = this._doc.createTextNode(base64codedValue);
--
-- signatureValueElem.appendChild(t);
-- }
-- }
-+ Text t = this._doc.createTextNode(base64codedValue);
-+ signatureValueElement.appendChild(t);
-+ }
-
- /**
- * Returns the KeyInfo child. If we are in signing mode and the KeyInfo
-@@ -385,7 +403,7 @@
- public KeyInfo getKeyInfo() {
-
- // check to see if we are signing and if we have to create a keyinfo
-- if ((this._state == MODE_SIGN) && (this._keyInfo == null)) {
-+ if ( (this._keyInfo == null)) {
-
- // create the KeyInfo
- this._keyInfo = new KeyInfo(this._doc);
-@@ -401,8 +419,7 @@
- // add it before the object
- this._constructionElement.insertBefore(keyInfoElement,
- firstObject);
-- this._constructionElement
-- .insertBefore(this._doc.createTextNode("\n"), firstObject);
-+ XMLUtils.addReturnBeforeChild(this._constructionElement, firstObject);
- } else {
-
- // add it as the last element to the signature
-@@ -425,17 +442,17 @@
- public void appendObject(ObjectContainer object)
- throws XMLSignatureException {
-
-- try {
-- if (this._state != MODE_SIGN) {
-- throw new XMLSignatureException(
-- "signature.operationOnlyBeforeSign");
-- }
-+ //try {
-+ //if (this._state != MODE_SIGN) {
-+ // throw new XMLSignatureException(
-+ // "signature.operationOnlyBeforeSign");
-+ //}
-
- this._constructionElement.appendChild(object.getElement());
- XMLUtils.addReturnToElement(this._constructionElement);
-- } catch (XMLSecurityException ex) {
-- throw new XMLSignatureException("empty", ex);
-- }
-+ //} catch (XMLSecurityException ex) {
-+ // throw new XMLSignatureException("empty", ex);
-+ //}
- }
-
- /**
-@@ -481,23 +498,13 @@
- }
-
- try {
-- if (this._state == MODE_SIGN) {
--
-- // XMLUtils.indentSignature(this._constructionElement, " ", 0);
-- // get the SignatureMethodElement
-- Element signatureMethodElement =
-- this._signedInfo.getSignatureMethodElement();
--
-+ // if (this._state == MODE_SIGN) {
- //Create a SignatureAlgorithm object
-- SignatureAlgorithm sa =
-- new SignatureAlgorithm(signatureMethodElement,
-- this.getBaseURI());
--
-+ SignedInfo si = this.getSignedInfo();
-+ SignatureAlgorithm sa = si.getSignatureAlgorithm();
- // initialize SignatureAlgorithm for signing
- sa.initSign(signingKey);
-
-- SignedInfo si = this.getSignedInfo();
--
- // generate digest values for all References in this SignedInfo
- si.generateDigestValues();
- OutputStream so=new UnsyncBufferedOutputStream(new SignerOutputStream(sa));
-@@ -513,7 +520,7 @@
-
- // set them on the SignateValue element
- this.setSignatureValueElement(jcebytes);
-- }
-+ //}
- } catch (CanonicalizationException ex) {
- throw new XMLSignatureException("empty", ex);
- } catch (InvalidCanonicalizerException ex) {
-@@ -584,50 +591,45 @@
-
- throw new XMLSignatureException("empty", exArgs);
- }
--
- // all references inside the signedinfo need to be dereferenced and
- // digested again to see if the outcome matches the stored value in the
- // SignedInfo.
- // If _followManifestsDuringValidation is true it will do the same for
- // References inside a Manifest.
- try {
-- if (!this.getSignedInfo()
-- .verify(this._followManifestsDuringValidation)) {
-- return false;
-- }
--
-+ SignedInfo si=this.getSignedInfo();
- //create a SignatureAlgorithms from the SignatureMethod inside
- //SignedInfo. This is used to validate the signature.
-- SignatureAlgorithm sa =
-- new SignatureAlgorithm(this.getSignedInfo()
-- .getSignatureMethodElement(), this.getBaseURI());
-- if (true) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "SignatureMethodURI = " + sa.getAlgorithmURI());
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "jceSigAlgorithm = " + sa.getJCEAlgorithmString());
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "jceSigProvider = " + sa.getJCEProviderName());
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "PublicKey = " + pk);
-+ SignatureAlgorithm sa =si.getSignatureAlgorithm();
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, "SignatureMethodURI = " + sa.getAlgorithmURI());
-+ log.log(java.util.logging.Level.FINE, "jceSigAlgorithm = " + sa.getJCEAlgorithmString());
-+ log.log(java.util.logging.Level.FINE, "jceSigProvider = " + sa.getJCEProviderName());
-+ log.log(java.util.logging.Level.FINE, "PublicKey = " + pk);
- }
- sa.initVerify(pk);
-
- // Get the canonicalized (normalized) SignedInfo
- SignerOutputStream so=new SignerOutputStream(sa);
- OutputStream bos=new UnsyncBufferedOutputStream(so);
-- this._signedInfo.signInOctectStream(bos);
-+ si.signInOctectStream(bos);
- try {
-- bos.close();
-- } catch (IOException e) {
-- //Imposible
-- }
-+ bos.close();
-+ } catch (IOException e) {
-+ //Imposible
-+ }
-
- //retrieve the byte[] from the stored signature
- byte sigBytes[] = this.getSignatureValue();
-
--
- //Have SignatureAlgorithm sign the input bytes and compare them to the
- //bytes that were stored in the signature.
-- boolean verify = sa.verify(sigBytes);
-+ if (!sa.verify(sigBytes)) {
-+ log.log(java.util.logging.Level.WARNING, "Signature verification failed.");
-+ return false;
-+ }
-
-- return verify;
-+ return si.verify(this._followManifestsDuringValidation);
- } catch (XMLSecurityException ex) {
- throw new XMLSignatureException("empty", ex);
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureException.java b/src/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureException.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureException.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureException.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java b/src/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java
-@@ -2,9 +2,8 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
-- * Copyright 1999-2004 The Apache Software Foundation.
-+ * Copyright 1999-2008 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
-@@ -21,8 +20,6 @@
- */
- package com.sun.org.apache.xml.internal.security.signature;
-
--
--
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
-@@ -39,7 +36,9 @@
- import javax.xml.parsers.ParserConfigurationException;
-
- import com.sun.org.apache.xml.internal.security.c14n.CanonicalizationException;
-+import com.sun.org.apache.xml.internal.security.c14n.implementations.CanonicalizerBase;
- import com.sun.org.apache.xml.internal.security.c14n.implementations.Canonicalizer20010315OmitComments;
-+import com.sun.org.apache.xml.internal.security.c14n.implementations.Canonicalizer11_OmitComments;
- import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityRuntimeException;
- import com.sun.org.apache.xml.internal.security.utils.JavaUtils;
- import com.sun.org.apache.xml.internal.security.utils.XMLUtils;
-@@ -47,463 +46,483 @@
- import org.w3c.dom.Node;
- import org.xml.sax.SAXException;
-
--
- /**
- * Class XMLSignatureInput
- *
- * @author Christian Geuer-Pollmann
- * $todo$ check whether an XMLSignatureInput can be _both_, octet stream _and_ node set?
- */
--public class XMLSignatureInput implements Cloneable {
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(XMLSignatureInput.class.getName());
-+public class XMLSignatureInput implements Cloneable {
-+ static java.util.logging.Logger log =
-+ java.util.logging.Logger.getLogger
-+ (XMLSignatureInput.class.getName());
-
-- /*
-+ /*
- * The XMLSignature Input can be either:
- * A byteArray like with/or without InputStream.
-- * Or a nodeSet like defined either:
-- * * as a collection of nodes
-- * * or as subnode excluding or not commets and excluding or
-- * not other nodes.
-- */
-- /**
-- * Some InputStreams do not support the {@link java.io.InputStream#reset}
-- * method, so we read it in completely and work on our Proxy.
-- */
-- InputStream _inputOctetStreamProxy = null;
-- /**
-- * The original NodeSet for this XMLSignatureInput
-- */
-- Set _inputNodeSet = null;
-- /**
-- * The original Element
-- */
-- Node _subNode=null;
-- /**
-- * Exclude Node *for enveloped transformations*
-- */
-- Node excludeNode=null;
-- /**
-- *
-- */
-- boolean excludeComments=false;
-+ * Or a nodeSet like defined either:
-+ * * as a collection of nodes
-+ * * or as subnode excluding or not commets and excluding or
-+ * not other nodes.
-+ */
-
-- boolean isNodeSet=false;
-- /**
-- * A cached bytes
-- */
-- byte []bytes=null;
-+ /**
-+ * Some InputStreams do not support the {@link java.io.InputStream#reset}
-+ * method, so we read it in completely and work on our Proxy.
-+ */
-+ InputStream _inputOctetStreamProxy = null;
-+ /**
-+ * The original NodeSet for this XMLSignatureInput
-+ */
-+ Set _inputNodeSet = null;
-+ /**
-+ * The original Element
-+ */
-+ Node _subNode=null;
-+ /**
-+ * Exclude Node *for enveloped transformations*
-+ */
-+ Node excludeNode=null;
-+ /**
-+ *
-+ */
-+ boolean excludeComments=false;
-
-- /**
-- * Some Transforms may require explicit MIME type, charset (IANA registered "character set"), or other such information concerning the data they are receiving from an earlier Transform or the source data, although no Transform algorithm specified in this document needs such explicit information. Such data characteristics are provided as parameters to the Transform algorithm and should be described in the specification for the algorithm.
-- */
-- private String _MIMEType = null;
-+ boolean isNodeSet=false;
-+ /**
-+ * A cached bytes
-+ */
-+ byte []bytes=null;
-
-- /**
-- * Field _SourceURI
-- */
-- private String _SourceURI = null;
-+ /**
-+ * Some Transforms may require explicit MIME type, charset (IANA registered "character set"), or other such information concerning the data they are receiving from an earlier Transform or the source data, although no Transform algorithm specified in this document needs such explicit information. Such data characteristics are provided as parameters to the Transform algorithm and should be described in the specification for the algorithm.
-+ */
-+ private String _MIMEType = null;
-
-- /**
-- * Node Filter list.
-- */
-- List nodeFilters=new ArrayList();
-+ /**
-+ * Field _SourceURI
-+ */
-+ private String _SourceURI = null;
-
-- boolean needsToBeExpanded=false;
-- /**
-- * Check if the structured is needed to be circumbented.
-- * @return true if so.
-- */
-- public boolean isNeedsToBeExpanded() {
-- return needsToBeExpanded;
-- }
-+ /**
-+ * Node Filter list.
-+ */
-+ List nodeFilters=new ArrayList();
-
-- /**
-- * Set if the structured is needed to be circumbented.
-- * @param needsToBeExpanded true if so.
-- */
-- public void setNeedsToBeExpanded(boolean needsToBeExpanded) {
-+ boolean needsToBeExpanded=false;
-+ OutputStream outputStream=null;
-+
-+ /**
-+ * Check if the structured is needed to be circumbented.
-+ * @return true if so.
-+ */
-+ public boolean isNeedsToBeExpanded() {
-+ return needsToBeExpanded;
-+ }
-+
-+ /**
-+ * Set if the structured is needed to be circumbented.
-+ * @param needsToBeExpanded true if so.
-+ */
-+ public void setNeedsToBeExpanded(boolean needsToBeExpanded) {
- this.needsToBeExpanded = needsToBeExpanded;
-- }
-- OutputStream outputStream=null;
-+ }
-
-- /**
-- * Construct a XMLSignatureInput from an octet array.
-- * <p>
-- * This is a comfort method, which internally converts the byte[] array into an InputStream
-- * <p>NOTE: no defensive copy</p>
-- * @param inputOctets an octet array which including XML document or node
-- */
-- public XMLSignatureInput(byte[] inputOctets) {
-+ /**
-+ * Construct a XMLSignatureInput from an octet array.
-+ * <p>
-+ * This is a comfort method, which internally converts the byte[] array into
-+ * an InputStream
-+ * <p>NOTE: no defensive copy</p>
-+ * @param inputOctets an octet array which including XML document or node
-+ */
-+ public XMLSignatureInput(byte[] inputOctets) {
-
-- // NO defensive copy
-+ // NO defensive copy
-
-- //this._inputOctetStreamProxy = new ByteArrayInputStream(inputOctets);
-- this.bytes=inputOctets;
-- }
-+ //this._inputOctetStreamProxy = new ByteArrayInputStream(inputOctets);
-+ this.bytes=inputOctets;
-+ }
-
-+ /**
-+ * Constructs a <code>XMLSignatureInput</code> from an octet stream. The
-+ * stream is directly read.
-+ *
-+ * @param inputOctetStream
-+ */
-+ public XMLSignatureInput(InputStream inputOctetStream) {
-+ this._inputOctetStreamProxy=inputOctetStream;
-
-- /**
-- * Constructs a <code>XMLSignatureInput</code> from an octet stream. The
-- * stream is directly read.
-- *
-- * @param inputOctetStream
-- */
-- public XMLSignatureInput(InputStream inputOctetStream) {
-- this._inputOctetStreamProxy=inputOctetStream;
-+ //this(JavaUtils.getBytesFromStream(inputOctetStream));
-+ }
-
-- //this(JavaUtils.getBytesFromStream(inputOctetStream));
-+ /**
-+ * Construct a XMLSignatureInput from a String.
-+ * <p>
-+ * This is a comfort method, which internally converts the String into a byte
-+ * [] array using the {@link java.lang.String#getBytes()} method.
-+ * @deprecated
-+ * @param inputStr the input String which including XML document or node
-+ */
-+ public XMLSignatureInput(String inputStr) {
-+ this(inputStr.getBytes());
-+ }
-
-- }
-+ /**
-+ * Construct a XMLSignatureInput from a String with a given encoding.
-+ * <p>
-+ * This is a comfort method, which internally converts the String into a byte
-+ * [] array using the {@link java.lang.String#getBytes()} method.
-+ *
-+ * @deprecated
-+ * @param inputStr the input String with encoding <code>encoding</code>
-+ * @param encoding the encoding of <code>inputStr</code>
-+ * @throws UnsupportedEncodingException
-+ */
-+ public XMLSignatureInput(String inputStr, String encoding)
-+ throws UnsupportedEncodingException {
-+ this(inputStr.getBytes(encoding));
-+ }
-
-- /**
-- * Construct a XMLSignatureInput from a String.
-- * <p>
-- * This is a comfort method, which internally converts the String into a byte[] array using the {@link java.lang.String#getBytes()} method.
-- * @deprecated
-- * @param inputStr the input String which including XML document or node
-- */
-- public XMLSignatureInput(String inputStr) {
-- this(inputStr.getBytes());
-- }
-+ /**
-+ * Construct a XMLSignatureInput from a subtree rooted by rootNode. This
-+ * method included the node and <I>all</I> his descendants in the output.
-+ *
-+ * @param rootNode
-+ */
-+ public XMLSignatureInput(Node rootNode)
-+ {
-+ this._subNode = rootNode;
-+ }
-
-- /**
-- * Construct a XMLSignatureInput from a String with a given encoding.
-- * <p>
-- * This is a comfort method, which internally converts the String into a byte[] array using the {@link java.lang.String#getBytes()} method.
-- *
-- * @deprecated
-- * @param inputStr the input String with encoding <code>encoding</code>
-- * @param encoding the encoding of <code>inputStr</code>
-- * @throws UnsupportedEncodingException
-- */
-- public XMLSignatureInput(String inputStr, String encoding)
-- throws UnsupportedEncodingException {
-- this(inputStr.getBytes(encoding));
-- }
-+ /**
-+ * Constructor XMLSignatureInput
-+ *
-+ * @param inputNodeSet
-+ * @param usedXPathAPI
-+ */
-+ public XMLSignatureInput(Set inputNodeSet) {
-+ this._inputNodeSet = inputNodeSet;
-+ }
-
-- /**
-- * Construct a XMLSignatureInput from a subtree rooted by rootNode. This
-- * method included the node and <I>all</I> his descendants in the output.
-- *
-- * @param rootNode
-- */
-- public XMLSignatureInput(Node rootNode)
-- {
-- this._subNode = rootNode;
-- }
-+ /**
-+ * Returns the node set from input which was specified as the parameter of
-+ * {@link XMLSignatureInput} constructor
-+ *
-+ * @return the node set
-+ * @throws SAXException
-+ * @throws IOException
-+ * @throws ParserConfigurationException
-+ * @throws CanonicalizationException
-+ */
-+ public Set getNodeSet() throws CanonicalizationException,
-+ ParserConfigurationException, IOException, SAXException {
-+ return getNodeSet(false);
-+ }
-
-- /**
-- * Constructor XMLSignatureInput
-- *
-- * @param inputNodeSet
-- * @param usedXPathAPI
-- */
-- public XMLSignatureInput(Set inputNodeSet) {
-- this._inputNodeSet = inputNodeSet;
-- }
--
-- /**
-- * Returns the node set from input which was specified as the parameter of {@link XMLSignatureInput} constructor
-- *
-- * @return the node set
-- * @throws SAXException
-- * @throws IOException
-- * @throws ParserConfigurationException
-- * @throws CanonicalizationException
-- * @throws CanonicalizationException
-- * @throws IOException
-- * @throws ParserConfigurationException
-- * @throws SAXException
-- */
-- public Set getNodeSet() throws CanonicalizationException, ParserConfigurationException, IOException, SAXException {
-- return getNodeSet(false);
-- }
-- /**
-- * Returns the node set from input which was specified as the parameter of {@link XMLSignatureInput} constructor
-- * @param circunvent
-- *
-- * @return the node set
-- * @throws SAXException
-- * @throws IOException
-- * @throws ParserConfigurationException
-- * @throws CanonicalizationException
-- * @throws CanonicalizationException
-- * @throws IOException
-- * @throws ParserConfigurationException
-- * @throws SAXException
-- */
-- public Set getNodeSet(boolean circunvent)
-+ /**
-+ * Returns the node set from input which was specified as the parameter of
-+ * {@link XMLSignatureInput} constructor
-+ * @param circumvent
-+ *
-+ * @return the node set
-+ * @throws SAXException
-+ * @throws IOException
-+ * @throws ParserConfigurationException
-+ * @throws CanonicalizationException
-+ */
-+ public Set getNodeSet(boolean circumvent)
- throws ParserConfigurationException, IOException, SAXException,
- CanonicalizationException {
-- if (this._inputNodeSet!=null) {
-- return this._inputNodeSet;
-- }
-- if (this.isElement()) {
-+ if (this._inputNodeSet!=null) {
-+ return this._inputNodeSet;
-+ }
-+ if ((this._inputOctetStreamProxy==null)&& (this._subNode!=null) ) {
-
-- if (circunvent) {
-- XMLUtils.circumventBug2650(XMLUtils.getOwnerDocument(_subNode));
-+ if (circumvent) {
-+ XMLUtils.circumventBug2650(XMLUtils.getOwnerDocument(_subNode));
- }
- this._inputNodeSet = new HashSet();
- XMLUtils.getSet(_subNode,this._inputNodeSet, excludeNode, this.excludeComments);
-
-- return this._inputNodeSet;
-- }
-- else if (this.isOctetStream()) {
-- convertToNodes();
-- HashSet result=new HashSet();
-- XMLUtils.getSet(_subNode, result,null,false);
-+ return this._inputNodeSet;
-+ } else if (this.isOctetStream()) {
-+ convertToNodes();
-+ HashSet result=new HashSet();
-+ XMLUtils.getSet(_subNode, result,null,false);
- //this._inputNodeSet=result;
- return result;
-- }
-+ }
-
-- throw new RuntimeException(
-- "getNodeSet() called but no input data present");
-- }
-+ throw new RuntimeException(
-+ "getNodeSet() called but no input data present");
-+ }
-
-- /**
-- * Returns the Octect stream(byte Stream) from input which was specified as the parameter of {@link XMLSignatureInput} constructor
-- *
-- * @return the Octect stream(byte Stream) from input which was specified as the parameter of {@link XMLSignatureInput} constructor
-- * @throws IOException
-- */
-- public InputStream getOctetStream()
-- throws IOException {
-+ /**
-+ * Returns the Octect stream(byte Stream) from input which was specified as
-+ * the parameter of {@link XMLSignatureInput} constructor
-+ *
-+ * @return the Octect stream(byte Stream) from input which was specified as
-+ * the parameter of {@link XMLSignatureInput} constructor
-+ * @throws IOException
-+ */
-+ public InputStream getOctetStream() throws IOException {
-
-- return getResetableInputStream();
-+ return getResetableInputStream();
-+ }
-
-- }
-- /**
-+ /**
- * @return real octect stream
- */
- public InputStream getOctetStreamReal () {
-- return this._inputOctetStreamProxy;
-- }
-- /**
-- * Returns the byte array from input which was specified as the parameter of {@link XMLSignatureInput} constructor
-- *
-- * @return the byte[] from input which was specified as the parameter of {@link XMLSignatureInput} constructor
-- *
-- * @throws CanonicalizationException
-- * @throws IOException
-- */
-- public byte[] getBytes()
-- throws IOException, CanonicalizationException {
-- if (bytes!=null) {
-- return bytes;
-- }
-- InputStream is = getResetableInputStream();
-- if (is!=null) {
-- //reseatable can read again bytes.
-- if (bytes==null) {
-- is.reset();
-- bytes=JavaUtils.getBytesFromStream(is);
-- }
-- return bytes;
-- }
-- Canonicalizer20010315OmitComments c14nizer =
-- new Canonicalizer20010315OmitComments();
-+ return this._inputOctetStreamProxy;
-+ }
-+
-+ /**
-+ * Returns the byte array from input which was specified as the parameter of
-+ * {@link XMLSignatureInput} constructor
-+ *
-+ * @return the byte[] from input which was specified as the parameter of
-+ * {@link XMLSignatureInput} constructor
-+ *
-+ * @throws CanonicalizationException
-+ * @throws IOException
-+ */
-+ public byte[] getBytes() throws IOException, CanonicalizationException {
-+ if (bytes!=null) {
-+ return bytes;
-+ }
-+ InputStream is = getResetableInputStream();
-+ if (is!=null) {
-+ //resetable can read again bytes.
-+ if (bytes==null) {
-+ is.reset();
-+ bytes=JavaUtils.getBytesFromStream(is);
-+ }
-+ return bytes;
-+ }
-+ Canonicalizer20010315OmitComments c14nizer =
-+ new Canonicalizer20010315OmitComments();
- bytes=c14nizer.engineCanonicalize(this);
- return bytes;
-- }
-+ }
-
-+ /**
-+ * Determines if the object has been set up with a Node set
-+ *
-+ * @return true if the object has been set up with a Node set
-+ */
-+ public boolean isNodeSet() {
-+ return (( (this._inputOctetStreamProxy == null)
-+ && (this._inputNodeSet != null) ) || isNodeSet);
-+ }
-
-- /**
-- * Determines if the object has been set up with a Node set
-- *
-- * @return true is the object has been set up with a Node set
-- */
-- public boolean isNodeSet() {
-- return (( (this._inputOctetStreamProxy == null)
-- && (this._inputNodeSet != null) ) || isNodeSet);
-- }
-- /**
-- * Determines if the object has been set up with an Element
-- *
-- * @return true is the object has been set up with a Node set
-- */
-- public boolean isElement() {
-- return ((this._inputOctetStreamProxy==null)&& (this._subNode!=null)
-- && (this._inputNodeSet==null) && !isNodeSet
-- );
-- }
-+ /**
-+ * Determines if the object has been set up with an Element
-+ *
-+ * @return true if the object has been set up with a Node set
-+ */
-+ public boolean isElement() {
-+ return ((this._inputOctetStreamProxy==null)&& (this._subNode!=null)
-+ && (this._inputNodeSet==null) && !isNodeSet);
-+ }
-
-- /**
-- * Determines if the object has been set up with an octet stream
-- *
-- * @return true is the object has been set up with an octet stream
-- */
-- public boolean isOctetStream() {
-- return ( ((this._inputOctetStreamProxy != null) || bytes!=null)
-+ /**
-+ * Determines if the object has been set up with an octet stream
-+ *
-+ * @return true if the object has been set up with an octet stream
-+ */
-+ public boolean isOctetStream() {
-+ return ( ((this._inputOctetStreamProxy != null) || bytes!=null)
- && ((this._inputNodeSet == null) && _subNode ==null));
-- }
-+ }
-
-- /**
-- * Determines if the object has been set up with a ByteArray
-- *
-- * @return true is the object has been set up with an octet stream
-- */
-- public boolean isByteArray() {
-- return ( (bytes!=null)
-+ /**
-+ * Determines if {@link #setOutputStream} has been called with a
-+ * non-null OutputStream.
-+ *
-+ * @return true if {@link #setOutputStream} has been called with a
-+ * non-null OutputStream
-+ */
-+ public boolean isOutputStreamSet() {
-+ return outputStream != null;
-+ }
-+
-+ /**
-+ * Determines if the object has been set up with a ByteArray
-+ *
-+ * @return true is the object has been set up with an octet stream
-+ */
-+ public boolean isByteArray() {
-+ return ( (bytes!=null)
- && ((this._inputNodeSet == null) && _subNode ==null));
-- }
-+ }
-
-- /**
-- * Is the object correctly set up?
-- *
-- * @return true if the object has been set up correctly
-- */
-- public boolean isInitialized() {
-- return (this.isOctetStream() || this.isNodeSet());
-- }
-+ /**
-+ * Is the object correctly set up?
-+ *
-+ * @return true if the object has been set up correctly
-+ */
-+ public boolean isInitialized() {
-+ return (this.isOctetStream() || this.isNodeSet());
-+ }
-
-- /**
-- * Returns MIMEType
-- *
-- * @return MIMEType
-- */
-- public String getMIMEType() {
-- return this._MIMEType;
-- }
-+ /**
-+ * Returns MIMEType
-+ *
-+ * @return MIMEType
-+ */
-+ public String getMIMEType() {
-+ return this._MIMEType;
-+ }
-
-- /**
-- * Sets MIMEType
-- *
-- * @param MIMEType
-- */
-- public void setMIMEType(String MIMEType) {
-- this._MIMEType = MIMEType;
-- }
-+ /**
-+ * Sets MIMEType
-+ *
-+ * @param MIMEType
-+ */
-+ public void setMIMEType(String MIMEType) {
-+ this._MIMEType = MIMEType;
-+ }
-
-- /**
-- * Return SourceURI
-- *
-- * @return SourceURI
-- */
-- public String getSourceURI() {
-- return this._SourceURI;
-- }
-+ /**
-+ * Return SourceURI
-+ *
-+ * @return SourceURI
-+ */
-+ public String getSourceURI() {
-+ return this._SourceURI;
-+ }
-
-- /**
-- * Sets SourceURI
-- *
-- * @param SourceURI
-- */
-- public void setSourceURI(String SourceURI) {
-- this._SourceURI = SourceURI;
-- }
-+ /**
-+ * Sets SourceURI
-+ *
-+ * @param SourceURI
-+ */
-+ public void setSourceURI(String SourceURI) {
-+ this._SourceURI = SourceURI;
-+ }
-
--
-- /**
-- * Method toString
-- * @inheritDoc
-- *
-- */
-- public String toString() {
--
-- if (this.isNodeSet()) {
-- return "XMLSignatureInput/NodeSet/" + this._inputNodeSet.size()
-+ /**
-+ * Method toString
-+ * @inheritDoc
-+ */
-+ public String toString() {
-+ if (this.isNodeSet()) {
-+ return "XMLSignatureInput/NodeSet/" + this._inputNodeSet.size()
- + " nodes/" + this.getSourceURI();
-- }
-- if (this.isElement()) {
-- return "XMLSignatureInput/Element/" + this._subNode
-- + " exclude "+ this.excludeNode + " comments:" +
-- this.excludeComments
-- +"/" + this.getSourceURI();
-- }
-- try {
-+ }
-+ if (this.isElement()) {
-+ return "XMLSignatureInput/Element/" + this._subNode
-+ + " exclude "+ this.excludeNode + " comments:" +
-+ this.excludeComments +"/" + this.getSourceURI();
-+ }
-+ try {
- return "XMLSignatureInput/OctetStream/" + this.getBytes().length
- + " octets/" + this.getSourceURI();
-- } catch (Exception ex) {
-+ } catch (IOException iex) {
- return "XMLSignatureInput/OctetStream//" + this.getSourceURI();
-- }
-+ } catch (CanonicalizationException cex) {
-+ return "XMLSignatureInput/OctetStream//" + this.getSourceURI();
-+ }
-+ }
-
-- }
-+ /**
-+ * Method getHTMLRepresentation
-+ *
-+ * @throws XMLSignatureException
-+ * @return The HTML representation for this XMLSignature
-+ */
-+ public String getHTMLRepresentation() throws XMLSignatureException {
-
-- /**
-- * Method getHTMLRepresentation
-- *
-- * @throws XMLSignatureException
-- * @return The HTML representation for this XMLSignature
-- */
-- public String getHTMLRepresentation() throws XMLSignatureException {
-+ XMLSignatureInputDebugger db = new XMLSignatureInputDebugger(this);
-
-- XMLSignatureInputDebugger db = new XMLSignatureInputDebugger(this);
-+ return db.getHTMLRepresentation();
-+ }
-
-- return db.getHTMLRepresentation();
-- }
--
-- /**
-- * Method getHTMLRepresentation
-- *
-- * @param inclusiveNamespaces
-- * @throws XMLSignatureException
-- * @return The HTML representation for this XMLSignature
-- */
-- public String getHTMLRepresentation(Set inclusiveNamespaces)
-+ /**
-+ * Method getHTMLRepresentation
-+ *
-+ * @param inclusiveNamespaces
-+ * @throws XMLSignatureException
-+ * @return The HTML representation for this XMLSignature
-+ */
-+ public String getHTMLRepresentation(Set inclusiveNamespaces)
- throws XMLSignatureException {
-
-- XMLSignatureInputDebugger db = new XMLSignatureInputDebugger( this,
-+ XMLSignatureInputDebugger db = new XMLSignatureInputDebugger( this,
- inclusiveNamespaces);
-
-- return db.getHTMLRepresentation();
-- }
-+ return db.getHTMLRepresentation();
-+ }
-
-- /**
-- * Gets the exclude node of this XMLSignatureInput
-- * @return Returns the excludeNode.
-- */
-+ /**
-+ * Gets the exclude node of this XMLSignatureInput
-+ * @return Returns the excludeNode.
-+ */
- public Node getExcludeNode() {
-- return excludeNode;
-+ return excludeNode;
- }
-
- /**
- * Sets the exclude node of this XMLSignatureInput
- * @param excludeNode The excludeNode to set.
- */
-- public void setExcludeNode(Node excludeNode) {
-- this.excludeNode = excludeNode;
-- }
-+ public void setExcludeNode(Node excludeNode) {
-+ this.excludeNode = excludeNode;
-+ }
-
-- /**
-- * Gets the node of this XMLSignatureInput
-- * @return The excludeNode set.
-- */
-- public Node getSubNode() {
-- return _subNode;
-- }
-- /**
-- * @return Returns the excludeComments.
-- */
-- public boolean isExcludeComments() {
-+ /**
-+ * Gets the node of this XMLSignatureInput
-+ * @return The excludeNode set.
-+ */
-+ public Node getSubNode() {
-+ return _subNode;
-+ }
-+
-+ /**
-+ * @return Returns the excludeComments.
-+ */
-+ public boolean isExcludeComments() {
- return excludeComments;
-- }
-- /**
-- * @param excludeComments The excludeComments to set.
-- */
-- public void setExcludeComments(boolean excludeComments) {
-+ }
-+
-+ /**
-+ * @param excludeComments The excludeComments to set.
-+ */
-+ public void setExcludeComments(boolean excludeComments) {
- this.excludeComments = excludeComments;
-- }
-+ }
-
-- /**
-- * @param diOs
-- * @throws IOException
-- * @throws CanonicalizationException
-- */
-- public void updateOutputStream(OutputStream diOs) throws CanonicalizationException, IOException {
-+ /**
-+ * @param diOs
-+ * @throws IOException
-+ * @throws CanonicalizationException
-+ */
-+ public void updateOutputStream(OutputStream diOs)
-+ throws CanonicalizationException, IOException {
-+ updateOutputStream(diOs, false);
-+ }
-+
-+ public void updateOutputStream(OutputStream diOs, boolean c14n11)
-+ throws CanonicalizationException, IOException {
- if (diOs==outputStream) {
-- return;
-+ return;
- }
- if (bytes!=null) {
- diOs.write(bytes);
- return;
-- }else if (_inputOctetStreamProxy==null) {
-- Canonicalizer20010315OmitComments c14nizer =
-- new Canonicalizer20010315OmitComments();
-- c14nizer.setWriter(diOs);
-+ } else if (_inputOctetStreamProxy==null) {
-+ CanonicalizerBase c14nizer = null;
-+ if (c14n11) {
-+ c14nizer = new Canonicalizer11_OmitComments();
-+ } else {
-+ c14nizer = new Canonicalizer20010315OmitComments();
-+ }
-+ c14nizer.setWriter(diOs);
- c14nizer.engineCanonicalize(this);
- return;
-- } else {
-+ } else {
- InputStream is = getResetableInputStream();
- if (bytes!=null) {
- //already read write it, can be rea.
-@@ -516,25 +535,22 @@
- while ((num=is.read(bytesT))>0) {
- diOs.write(bytesT,0,num);
- }
-+ }
-+ }
-
-- }
-+ /**
-+ * @param os
-+ */
-+ public void setOutputStream(OutputStream os) {
-+ outputStream=os;
-+ }
-
-- }
--
--
-- /**
-- * @param os
-- */
-- public void setOutputStream(OutputStream os) {
-- outputStream=os;
--
-- }
- protected InputStream getResetableInputStream() throws IOException{
- if ((_inputOctetStreamProxy instanceof ByteArrayInputStream) ) {
- if (!_inputOctetStreamProxy.markSupported()) {
- throw new RuntimeException("Accepted as Markable but not truly been"+_inputOctetStreamProxy);
- }
-- return _inputOctetStreamProxy;
-+ return _inputOctetStreamProxy;
- }
- if (bytes!=null) {
- _inputOctetStreamProxy=new ByteArrayInputStream(bytes);
-@@ -543,7 +559,7 @@
- if (_inputOctetStreamProxy ==null)
- return null;
- if (_inputOctetStreamProxy.markSupported()) {
-- if (log.isLoggable(java.util.logging.Level.INFO)) log.log(java.util.logging.Level.INFO, "Mark Suported but not used as reset");
-+ log.log(java.util.logging.Level.INFO, "Mark Suported but not used as reset");
- }
- bytes=JavaUtils.getBytesFromStream(_inputOctetStreamProxy);
- _inputOctetStreamProxy.close();
-@@ -551,66 +567,63 @@
- return _inputOctetStreamProxy;
- }
-
-+ /**
-+ * @param filter
-+ */
-+ public void addNodeFilter(NodeFilter filter) {
-+ if (isOctetStream()) {
-+ try {
-+ convertToNodes();
-+ } catch (Exception e) {
-+ throw new XMLSecurityRuntimeException("signature.XMLSignatureInput.nodesetReference",e);
-+ }
-+ }
-+ nodeFilters.add(filter);
-+ }
-
-- /**
-- * @param filter
-- */
-- public void addNodeFilter(NodeFilter filter) {
-- if (isOctetStream()) {
-- try {
-- convertToNodes();
-- } catch (Exception e) {
-- throw new XMLSecurityRuntimeException("signature.XMLSignatureInput.nodesetReference",e);
-- }
-- }
-- nodeFilters.add(filter);
-+ /**
-+ * @return the node filters
-+ */
-+ public List getNodeFilters() {
-+ // TODO Auto-generated method stub
-+ return nodeFilters;
-+ }
-
-- }
-+ /**
-+ * @param b
-+ */
-+ public void setNodeSet(boolean b) {
-+ isNodeSet=b;
-+ }
-
-- /**
-- * @return the node filters
-- */
-- public List getNodeFilters() {
-- // TODO Auto-generated method stub
-- return nodeFilters;
-- }
--
-- /**
-- * @param b
-- */
-- public void setNodeSet(boolean b) {
-- isNodeSet=b;
--
-- }
--
-- void convertToNodes() throws CanonicalizationException, ParserConfigurationException, IOException, SAXException{
-- DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();
-+ void convertToNodes() throws CanonicalizationException,
-+ ParserConfigurationException, IOException, SAXException {
-+ DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();
- dfactory.setValidating(false);
- dfactory.setNamespaceAware(true);
- DocumentBuilder db = dfactory.newDocumentBuilder();
- // select all nodes, also the comments.
- try {
-- db.setErrorHandler(new com.sun.org.apache.xml.internal.security.utils
-- .IgnoreAllErrorHandler());
-+ db.setErrorHandler(new com.sun.org.apache.xml.internal.security.utils
-+ .IgnoreAllErrorHandler());
-
-- Document doc = db.parse(this.getOctetStream());
-+ Document doc = db.parse(this.getOctetStream());
-
-- XMLUtils.circumventBug2650(doc);
-- this._subNode=doc.getDocumentElement();
-+ this._subNode=doc.getDocumentElement();
- } catch (SAXException ex) {
-
-- // if a not-wellformed nodeset exists, put a container around it...
-- ByteArrayOutputStream baos = new ByteArrayOutputStream();
-+ // if a not-wellformed nodeset exists, put a container around it...
-+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
-- baos.write("<container>".getBytes());
-- baos.write(this.getBytes());
-- baos.write("</container>".getBytes());
-+ baos.write("<container>".getBytes());
-+ baos.write(this.getBytes());
-+ baos.write("</container>".getBytes());
-
-- byte result[] = baos.toByteArray();
-- Document document = db.parse(new ByteArrayInputStream(result));
-- this._subNode=document.getDocumentElement().getFirstChild().getFirstChild();
-+ byte result[] = baos.toByteArray();
-+ Document document = db.parse(new ByteArrayInputStream(result));
-+ this._subNode=document.getDocumentElement().getFirstChild().getFirstChild();
- }
- this._inputOctetStreamProxy=null;
- this.bytes=null;
-- }
-+ }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInputDebugger.java b/src/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInputDebugger.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInputDebugger.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInputDebugger.java
-@@ -39,7 +39,8 @@
- /**
- * Class XMLSignatureInputDebugger
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
-+ * @version $Revision: 1.3 $
- */
- public class XMLSignatureInputDebugger {
-
-@@ -599,23 +600,23 @@
-
- length = data.length();
-
-- if ((data != null) && (length > 0)) {
-- this._writer.write(" ");
-+ if (length > 0) {
-+ this._writer.write(" ");
-
-- for (int i = 0; i < length; i++) {
-- char c = data.charAt(i);
-+ for (int i = 0; i < length; i++) {
-+ char c = data.charAt(i);
-
-- switch (c) {
-+ switch (c) {
-
-- case 0x0D:
-- this._writer.write("&amp;#xD;");
-- break;
-+ case 0x0D:
-+ this._writer.write("&amp;#xD;");
-+ break;
-
-- default:
-- this._writer.write(c);
-- break;
-- }
-+ default:
-+ this._writer.write(c);
-+ break;
- }
-+ }
- }
-
- this._writer.write("?&gt;");
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/InvalidTransformException.java b/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/InvalidTransformException.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/InvalidTransformException.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/InvalidTransformException.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java b/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java
-@@ -20,14 +20,11 @@
- */
- package com.sun.org.apache.xml.internal.security.transforms;
-
--
--
- import java.io.IOException;
- import java.io.OutputStream;
--import java.util.HashMap;
- import java.security.AccessController;
- import java.security.PrivilegedAction;
--
-+import java.util.HashMap;
- import javax.xml.parsers.ParserConfigurationException;
-
- import com.sun.org.apache.xml.internal.security.c14n.CanonicalizationException;
-@@ -38,17 +35,17 @@
- import com.sun.org.apache.xml.internal.security.utils.Constants;
- import com.sun.org.apache.xml.internal.security.utils.HelperNodeList;
- import com.sun.org.apache.xml.internal.security.utils.SignatureElementProxy;
-+import com.sun.org.apache.xml.internal.security.utils.XMLUtils;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.w3c.dom.NodeList;
- import org.xml.sax.SAXException;
-
--
- /**
- * Implements the behaviour of the <code>ds:Transform</code> element.
- *
-- * This <code>Transform</code>(Factory) class role as the Factory and Proxy of
-- * implemanting class that have the functionality of <a
-+ * This <code>Transform</code>(Factory) class acts as the Factory and Proxy of
-+ * the implementing class that supports the functionality of <a
- * href=http://www.w3.org/TR/xmldsig-core/#sec-TransformAlg>a Transform
- * algorithm</a>.
- * Implements the Factory and Proxy pattern for ds:Transform algorithms.
-@@ -60,322 +57,311 @@
- */
- public final class Transform extends SignatureElementProxy {
-
-- /** {@link java.util.logging} logging facility */
-+ /** {@link java.util.logging} logging facility */
- static java.util.logging.Logger log =
- java.util.logging.Logger.getLogger(Transform.class.getName());
-
-- /** Field _alreadyInitialized */
-- static boolean _alreadyInitialized = false;
-+ /** Field _alreadyInitialized */
-+ private static boolean alreadyInitialized = false;
-
-- /** All available Transform classes are registered here */
-- static HashMap _transformHash = null;
-+ /** All available Transform classes are registered here */
-+ private static HashMap transformClassHash = null;
-
-- /** Field transformSpi */
-- protected TransformSpi transformSpi = null;
-+ private static HashMap transformSpiHash = new HashMap();
-
-- /**
-- * Constructs {@link Transform}
-- *
-- * @param doc the {@link Document} in which <code>Transform</code> will be placed
-- * @param algorithmURI URI representation of
-- * <code>Transform algorithm</code> will be specified as parameter of
-- * {@link #getInstance(Document, String)}, when generate. </br>
-- * @param contextNodes the child node list of <code>Transform</code> element
-- * @throws InvalidTransformException
-- */
-- public Transform(Document doc, String algorithmURI, NodeList contextNodes)
-- throws InvalidTransformException {
-+ private TransformSpi transformSpi = null;
-
-- super(doc);
-+ /**
-+ * Constructs {@link Transform}
-+ *
-+ * @param doc the {@link Document} in which <code>Transform</code> will be
-+ * placed
-+ * @param algorithmURI URI representation of
-+ * <code>Transform algorithm</code> which will be specified as parameter of
-+ * {@link #getInstance(Document, String)}, when generated. </br>
-+ * @param contextNodes the child node list of <code>Transform</code> element
-+ * @throws InvalidTransformException
-+ */
-+ public Transform(Document doc, String algorithmURI, NodeList contextNodes)
-+ throws InvalidTransformException {
-
-- try {
-- this._constructionElement.setAttributeNS(null, Constants._ATT_ALGORITHM,
-- algorithmURI);
-+ super(doc);
-
-- Class implementingClass =
-- Transform.getImplementingClass(algorithmURI);
-+ this._constructionElement.setAttributeNS
-+ (null, Constants._ATT_ALGORITHM, algorithmURI);
-
-- if(implementingClass == null) {
-+ transformSpi = getTransformSpi(algorithmURI);
-+ if (transformSpi == null) {
- Object exArgs[] = { algorithmURI };
--
- throw new InvalidTransformException(
- "signature.Transform.UnknownTransform", exArgs);
-- }
-- if (true) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Create URI \"" + algorithmURI + "\" class \""
-- + implementingClass + "\"");
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "The NodeList is " + contextNodes);
-- }
-+ }
-
-- // create the custom Transform object
-- this.transformSpi =
-- (TransformSpi) implementingClass.newInstance();
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, "Create URI \"" + algorithmURI + "\" class \""
-+ + transformSpi.getClass() + "\"");
-+ log.log(java.util.logging.Level.FINE, "The NodeList is " + contextNodes);
-+ }
-
-- this.transformSpi.setTransform(this);
-+ // give it to the current document
-+ if (contextNodes != null) {
-+ for (int i = 0; i < contextNodes.getLength(); i++) {
-+ this._constructionElement.appendChild
-+ (contextNodes.item(i).cloneNode(true));
-+ }
-+ }
-+ }
-
-- // give it to the current document
-- if (contextNodes != null) {
-- /*
-- while (contextNodes.getLength() > 0) {
-- this._constructionElement.appendChild(contextNodes.item(0));
-- }
-- */
-+ /**
-+ * This constructor can only be called from the {@link Transforms} object,
-+ * so it's protected.
-+ *
-+ * @param element <code>ds:Transform</code> element
-+ * @param BaseURI the URI of the resource where the XML instance was stored
-+ * @throws InvalidTransformException
-+ * @throws TransformationException
-+ * @throws XMLSecurityException
-+ */
-+ public Transform(Element element, String BaseURI)
-+ throws InvalidTransformException, TransformationException,
-+ XMLSecurityException {
-
-- for (int i = 0; i < contextNodes.getLength(); i++) {
-- this._constructionElement.appendChild(contextNodes.item(i).cloneNode(true));
-- }
-+ super(element, BaseURI);
-
-- }
-- } catch (IllegalAccessException ex) {
-- Object exArgs[] = { algorithmURI };
-+ // retrieve Algorithm Attribute from ds:Transform
-+ String algorithmURI = element.getAttributeNS(null, Constants._ATT_ALGORITHM);
-
-- throw new InvalidTransformException(
-- "signature.Transform.UnknownTransform", exArgs, ex);
-- } catch (InstantiationException ex) {
-- Object exArgs[] = { algorithmURI };
-+ if (algorithmURI == null || algorithmURI.length() == 0) {
-+ Object exArgs[] = { Constants._ATT_ALGORITHM,
-+ Constants._TAG_TRANSFORM };
-+ throw new TransformationException("xml.WrongContent", exArgs);
-+ }
-
-- throw new InvalidTransformException(
-- "signature.Transform.UnknownTransform", exArgs, ex);
-- }
-- }
-+ transformSpi = getTransformSpi(algorithmURI);
-+ if (transformSpi == null) {
-+ Object exArgs[] = { algorithmURI };
-+ throw new InvalidTransformException(
-+ "signature.Transform.UnknownTransform", exArgs);
-+ }
-+ }
-
-- /**
-- * This constructor can only be called from the {@link Transforms} object, so
-- * it's protected.
-- *
-- * @param element <code>ds:Transform</code> element
-- * @param BaseURI the URI of the resource where the XML instance was stored
-- * @throws InvalidTransformException
-- * @throws TransformationException
-- * @throws XMLSecurityException
-- */
-- public Transform(Element element, String BaseURI)
-- throws InvalidTransformException, TransformationException,
-- XMLSecurityException {
-+ /**
-+ * Generates a Transform object that implements the specified
-+ * <code>Transform algorithm</code> URI.
-+ *
-+ * @param algorithmURI <code>Transform algorithm</code> URI representation,
-+ * such as specified in
-+ * <a href=http://www.w3.org/TR/xmldsig-core/#sec-TransformAlg>Transform algorithm </a>
-+ * @param doc the proxy {@link Document}
-+ * @return <code>{@link Transform}</code> object
-+ * @throws InvalidTransformException
-+ */
-+ public static Transform getInstance(
-+ Document doc, String algorithmURI) throws InvalidTransformException {
-+ return getInstance(doc, algorithmURI, (NodeList) null);
-+ }
-
-- super(element, BaseURI);
-+ /**
-+ * Generates a Transform object that implements the specified
-+ * <code>Transform algorithm</code> URI.
-+ *
-+ * @param algorithmURI <code>Transform algorithm</code> URI representation,
-+ * such as specified in
-+ * <a href=http://www.w3.org/TR/xmldsig-core/#sec-TransformAlg>Transform algorithm </a>
-+ * @param contextChild the child element of <code>Transform</code> element
-+ * @param doc the proxy {@link Document}
-+ * @return <code>{@link Transform}</code> object
-+ * @throws InvalidTransformException
-+ */
-+ public static Transform getInstance(
-+ Document doc, String algorithmURI, Element contextChild)
-+ throws InvalidTransformException {
-
-- // retrieve Algorithm Attribute from ds:Transform
-- String AlgorithmURI = element.getAttributeNS(null, Constants._ATT_ALGORITHM);
-+ HelperNodeList contextNodes = new HelperNodeList();
-
-- if ((AlgorithmURI == null) || (AlgorithmURI.length() == 0)) {
-- Object exArgs[] = { Constants._ATT_ALGORITHM,
-- Constants._TAG_TRANSFORM };
-+ XMLUtils.addReturnToElement(doc, contextNodes);
-+ contextNodes.appendChild(contextChild);
-+ XMLUtils.addReturnToElement(doc, contextNodes);
-
-- throw new TransformationException("xml.WrongContent", exArgs);
-- }
-+ return getInstance(doc, algorithmURI, contextNodes);
-+ }
-
-- try {
-- Class implementingClass = (Class) _transformHash.get(AlgorithmURI);
-- this.transformSpi =
-- (TransformSpi) implementingClass.newInstance();
-+ /**
-+ * Generates a Transform object that implements the specified
-+ * <code>Transform algorithm</code> URI.
-+ *
-+ * @param algorithmURI <code>Transform algorithm</code> URI form, such as
-+ * specified in <a href=http://www.w3.org/TR/xmldsig-core/#sec-TransformAlg>
-+ * Transform algorithm </a>
-+ * @param contextNodes the child node list of <code>Transform</code> element
-+ * @param doc the proxy {@link Document}
-+ * @return <code>{@link Transform}</code> object
-+ * @throws InvalidTransformException
-+ */
-+ public static Transform getInstance(
-+ Document doc, String algorithmURI, NodeList contextNodes)
-+ throws InvalidTransformException {
-+ return new Transform(doc, algorithmURI, contextNodes);
-+ }
-
-- this.transformSpi.setTransform(this);
-- } catch (IllegalAccessException e) {
-- Object exArgs[] = { AlgorithmURI };
-+ /**
-+ * Initalizes for this {@link Transform}.
-+ */
-+ public static void init() {
-+ if (!alreadyInitialized) {
-+ transformClassHash = new HashMap(10);
-+ // make sure builtin algorithms are all registered first
-+ com.sun.org.apache.xml.internal.security.Init.init();
-+ alreadyInitialized = true;
-+ }
-+ }
-
-- throw new InvalidTransformException(
-- "signature.Transform.UnknownTransform", exArgs);
-- } catch (InstantiationException e) {
-- Object exArgs[] = { AlgorithmURI };
-+ /**
-+ * Registers implementing class of the Transform algorithm with algorithmURI
-+ *
-+ * @param algorithmURI algorithmURI URI representation of
-+ * <code>Transform algorithm</code> will be specified as parameter of
-+ * {@link #getInstance(Document, String)}, when generate. </br>
-+ * @param implementingClass <code>implementingClass</code> the implementing
-+ * class of {@link TransformSpi}
-+ * @throws AlgorithmAlreadyRegisteredException if specified algorithmURI
-+ * is already registered
-+ */
-+ public static void register(String algorithmURI, String implementingClass)
-+ throws AlgorithmAlreadyRegisteredException {
-
-- throw new InvalidTransformException(
-- "signature.Transform.UnknownTransform", exArgs);
-- } catch (NullPointerException e) {
-- Object exArgs[] = { AlgorithmURI };
--
-- throw new InvalidTransformException(
-- "signature.Transform.UnknownTransform", exArgs);
-- }
-- }
--
-- /**
-- * Generates a Transform object that implements the specified <code>Transform algorithm</code> URI.
-- *
-- * @param algorithmURI <code>Transform algorithm</code> URI representation, such as specified in <a href=http://www.w3.org/TR/xmldsig-core/#sec-TransformAlg>Transform algorithm </a>
-- * @param doc the proxy {@link Document}
-- * @return <code>{@link Transform}</code> object
-- * @throws InvalidTransformException
-- */
-- public static final Transform getInstance(
-- Document doc, String algorithmURI) throws InvalidTransformException {
-- return Transform.getInstance(doc, algorithmURI, (NodeList) null);
-- }
--
-- /**
-- * Generates a Transform object that implements the specified <code>Transform algorithm</code> URI.
-- *
-- * @param algorithmURI <code>Transform algorithm</code> URI representation, such as specified in <a href=http://www.w3.org/TR/xmldsig-core/#sec-TransformAlg>Transform algorithm </a>
-- * @param contextChild the child element of <code>Transform</code> element
-- * @param doc the proxy {@link Document}
-- * @return <code>{@link Transform}</code> object
-- * @throws InvalidTransformException
-- */
-- public static final Transform getInstance(
-- Document doc, String algorithmURI, Element contextChild)
-- throws InvalidTransformException {
--
-- HelperNodeList contextNodes = new HelperNodeList();
--
-- contextNodes.appendChild(doc.createTextNode("\n"));
-- contextNodes.appendChild(contextChild);
-- contextNodes.appendChild(doc.createTextNode("\n"));
--
-- return Transform.getInstance(doc, algorithmURI, contextNodes);
-- }
--
-- /**
-- * Generates a Transform object that implements the specified <code>Transform algorithm</code> URI.
-- *
-- * @param algorithmURI <code>Transform algorithm</code> URI form, such as specified in <a href=http://www.w3.org/TR/xmldsig-core/#sec-TransformAlg>Transform algorithm </a>
-- * @param contextNodes the child node list of <code>Transform</code> element
-- * @param doc the proxy {@link Document}
-- * @return <code>{@link Transform}</code> object
-- * @throws InvalidTransformException
-- */
-- public static final Transform getInstance(
-- Document doc, String algorithmURI, NodeList contextNodes)
-- throws InvalidTransformException {
-- return new Transform(doc, algorithmURI, contextNodes);
-- }
--
-- /**
-- * Initalizes for this {@link Transform}
-- *
-- */
-- public static void init() {
--
-- if (!_alreadyInitialized) {
-- _transformHash = new HashMap(10);
-- // make sure builtin algorithms are all registered first
-- com.sun.org.apache.xml.internal.security.Init.init();
-- _alreadyInitialized = true;
-- }
-- }
--
-- /**
-- * Registers implementing class of the Transform algorithm with algorithmURI
-- *
-- * @param algorithmURI algorithmURI URI representation of <code>Transform algorithm</code>
-- * will be specified as parameter of {@link #getInstance(Document, String)}, when generate. </br>
-- * @param implementingClass <code>implementingClass</code> the implementing class of {@link TransformSpi}
-- * @throws AlgorithmAlreadyRegisteredException if specified algorithmURI is already registered
-- */
-- public static void register(String algorithmURI, String implementingClass)
-- throws AlgorithmAlreadyRegisteredException {
--
-- {
--
-- // are we already registered?
-- Class registeredClass = Transform.getImplementingClass(algorithmURI);
--
-- if ((registeredClass != null) ) {
-+ // are we already registered?
-+ Class registeredClass = getImplementingClass(algorithmURI);
-+ if ((registeredClass != null) ) {
- Object exArgs[] = { algorithmURI, registeredClass };
--
- throw new AlgorithmAlreadyRegisteredException(
- "algorithm.alreadyRegistered", exArgs);
-- }
-+ }
-
-- ClassLoader cl = Thread.currentThread().getContextClassLoader();
-+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
-
-- try {
-- Transform._transformHash.put
-- (algorithmURI, Class.forName(implementingClass, true, cl));
-- } catch (ClassNotFoundException e) {
-- throw new RuntimeException(e);
-- }
-- }
-- }
-+ try {
-+ transformClassHash.put
-+ (algorithmURI, Class.forName(implementingClass, true, cl));
-+ } catch (ClassNotFoundException e) {
-+ throw new RuntimeException(e);
-+ }
-+ }
-
-- /**
-- * Returns the URI representation of Transformation algorithm
-- *
-- * @return the URI representation of Transformation algorithm
-- */
-- public final String getURI() {
-- return this._constructionElement.getAttributeNS(null, Constants._ATT_ALGORITHM);
-- }
-+ /**
-+ * Returns the URI representation of Transformation algorithm
-+ *
-+ * @return the URI representation of Transformation algorithm
-+ */
-+ public String getURI() {
-+ return this._constructionElement.getAttributeNS
-+ (null, Constants._ATT_ALGORITHM);
-+ }
-
-- /**
-- * Transforms the input, and generats {@link XMLSignatureInput} as output.
-- * @param input input {@link XMLSignatureInput} which can supplied Octect Stream and NodeSet as Input of Transformation
-- *
-- * @return the {@link XMLSignatureInput} class as the result of transformation
-- * @throws CanonicalizationException
-- * @throws IOException
-- * @throws InvalidCanonicalizerException
-- * @throws TransformationException
-- */
-- public XMLSignatureInput performTransform(XMLSignatureInput input)
-- throws IOException, CanonicalizationException,
-- InvalidCanonicalizerException, TransformationException {
-+ /**
-+ * Transforms the input, and generates {@link XMLSignatureInput} as output.
-+ *
-+ * @param input input {@link XMLSignatureInput} which can supplied Octet
-+ * Stream and NodeSet as Input of Transformation
-+ * @return the {@link XMLSignatureInput} class as the result of
-+ * transformation
-+ * @throws CanonicalizationException
-+ * @throws IOException
-+ * @throws InvalidCanonicalizerException
-+ * @throws TransformationException
-+ */
-+ public XMLSignatureInput performTransform(XMLSignatureInput input)
-+ throws IOException, CanonicalizationException,
-+ InvalidCanonicalizerException, TransformationException {
-
-- XMLSignatureInput result = null;
-+ XMLSignatureInput result = null;
-
-- try {
-- result = transformSpi.enginePerformTransform(input);
-- } catch (ParserConfigurationException ex) {
-- Object exArgs[] = { this.getURI(), "ParserConfigurationException" };
-+ try {
-+ result = transformSpi.enginePerformTransform(input, this);
-+ } catch (ParserConfigurationException ex) {
-+ Object exArgs[] = { this.getURI(), "ParserConfigurationException" };
-+ throw new CanonicalizationException(
-+ "signature.Transform.ErrorDuringTransform", exArgs, ex);
-+ } catch (SAXException ex) {
-+ Object exArgs[] = { this.getURI(), "SAXException" };
-+ throw new CanonicalizationException(
-+ "signature.Transform.ErrorDuringTransform", exArgs, ex);
-+ }
-
-- throw new CanonicalizationException(
-- "signature.Transform.ErrorDuringTransform", exArgs, ex);
-- } catch (SAXException ex) {
-- Object exArgs[] = { this.getURI(), "SAXException" };
-+ return result;
-+ }
-
-- throw new CanonicalizationException(
-- "signature.Transform.ErrorDuringTransform", exArgs, ex);
-- }
-+ /**
-+ * Transforms the input, and generates {@link XMLSignatureInput} as output.
-+ *
-+ * @param input input {@link XMLSignatureInput} which can supplied Octet
-+ * Stream and NodeSet as Input of Transformation
-+ * @param os where to output the result of the last transformation
-+ * @return the {@link XMLSignatureInput} class as the result of
-+ * transformation
-+ * @throws CanonicalizationException
-+ * @throws IOException
-+ * @throws InvalidCanonicalizerException
-+ * @throws TransformationException
-+ */
-+ public XMLSignatureInput performTransform(XMLSignatureInput input,
-+ OutputStream os) throws IOException, CanonicalizationException,
-+ InvalidCanonicalizerException, TransformationException {
-
-- return result;
-- }
-+ XMLSignatureInput result = null;
-
-- /**
-- * Transforms the input, and generats {@link XMLSignatureInput} as output.
-- * @param input input {@link XMLSignatureInput} which can supplied Octect Stream and NodeSet as Input of Transformation
-- * @param os where to output the result of the last transformation
-- *
-- * @return the {@link XMLSignatureInput} class as the result of transformation
-- * @throws CanonicalizationException
-- * @throws IOException
-- * @throws InvalidCanonicalizerException
-- * @throws TransformationException
-- */
-- public XMLSignatureInput performTransform(XMLSignatureInput input, OutputStream os)
-- throws IOException, CanonicalizationException,
-- InvalidCanonicalizerException, TransformationException {
-+ try {
-+ result = transformSpi.enginePerformTransform(input, os, this);
-+ } catch (ParserConfigurationException ex) {
-+ Object exArgs[] = { this.getURI(), "ParserConfigurationException" };
-+ throw new CanonicalizationException(
-+ "signature.Transform.ErrorDuringTransform", exArgs, ex);
-+ } catch (SAXException ex) {
-+ Object exArgs[] = { this.getURI(), "SAXException" };
-+ throw new CanonicalizationException(
-+ "signature.Transform.ErrorDuringTransform", exArgs, ex);
-+ }
-
-- XMLSignatureInput result = null;
-+ return result;
-+ }
-
-- try {
-- result = transformSpi.enginePerformTransform(input,os);
-- } catch (ParserConfigurationException ex) {
-- Object exArgs[] = { this.getURI(), "ParserConfigurationException" };
-+ /**
-+ * Method getImplementingClass
-+ *
-+ * @param URI
-+ * @return The name of the class implementing the URI.
-+ */
-+ private static Class getImplementingClass(String URI) {
-+ return (Class) transformClassHash.get(URI);
-+ }
-
-- throw new CanonicalizationException(
-- "signature.Transform.ErrorDuringTransform", exArgs, ex);
-- } catch (SAXException ex) {
-- Object exArgs[] = { this.getURI(), "SAXException" };
-+ private static TransformSpi getTransformSpi(String URI)
-+ throws InvalidTransformException {
-+ try {
-+ Object value = transformSpiHash.get(URI);
-+ if (value != null) {
-+ return (TransformSpi) value;
-+ }
-+ Class cl = (Class) transformClassHash.get(URI);
-+ if (cl != null) {
-+ TransformSpi tr = (TransformSpi) cl.newInstance();
-+ transformSpiHash.put(URI, tr);
-+ return tr;
-+ }
-+ } catch (InstantiationException ex) {
-+ Object exArgs[] = { URI };
-+ throw new InvalidTransformException(
-+ "signature.Transform.UnknownTransform", exArgs, ex);
-+ } catch (IllegalAccessException ex) {
-+ Object exArgs[] = { URI };
-+ throw new InvalidTransformException(
-+ "signature.Transform.UnknownTransform", exArgs, ex);
-+ }
-+ return null;
-+ }
-
-- throw new CanonicalizationException(
-- "signature.Transform.ErrorDuringTransform", exArgs, ex);
-- }
--
-- return result;
-- }
--
-- /**
-- * Method getImplementingClass
-- *
-- * @param URI
-- * @return The name of the class implementing the URI.
-- */
-- private static Class getImplementingClass(String URI) {
-- return (Class)Transform._transformHash.get(URI);
-- }
--
--
-- /** @inheritDoc */
-- public String getBaseLocalName() {
-- return Constants._TAG_TRANSFORM;
-- }
-+ /** @inheritDoc */
-+ public String getBaseLocalName() {
-+ return Constants._TAG_TRANSFORM;
-+ }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/TransformParam.java b/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/TransformParam.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/TransformParam.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/TransformParam.java
-@@ -23,7 +23,7 @@
-
- /**
- *
-- * @author $Author: blautenb $
-+ * @author $Author: mullan $
- */
-
- public interface TransformParam {
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/TransformSpi.java b/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/TransformSpi.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/TransformSpi.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/TransformSpi.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -21,11 +20,8 @@
- */
- package com.sun.org.apache.xml.internal.security.transforms;
-
--
--
- import java.io.IOException;
- import java.io.OutputStream;
--
- import javax.xml.parsers.ParserConfigurationException;
-
- import com.sun.org.apache.xml.internal.security.c14n.CanonicalizationException;
-@@ -33,68 +29,109 @@
- import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
- import org.xml.sax.SAXException;
-
--
- /**
- * Base class which all Transform algorithms extend. The common methods that
-- * have to be overridden are the {@link #enginePerformTransform(XMLSignatureInput)} method.
-+ * have to be overridden are the
-+ * {@link #enginePerformTransform(XMLSignatureInput, Transform)} method.
- *
- * @author Christian Geuer-Pollmann
- */
- public abstract class TransformSpi {
-+ /**
-+ * For API compatibility not thread safe.
-+ * @deprecated
-+ */
-+ protected Transform _transformObject = null;
-+ /**
-+ * Set the transform object.
-+ * Depeprecated For API compatibility.
-+ * @param transform the Transform
-+ * @deprecated
-+ */
-+ protected void setTransform(Transform transform) {
-+ this._transformObject = transform;
-+ }
-+ /**
-+ * The mega method which MUST be implemented by the Transformation Algorithm.
-+ *
-+ * @param input {@link XMLSignatureInput} as the input of transformation
-+ * @param os where to output this transformation.
-+ * @param _transformObject the Transform
-+ * @return {@link XMLSignatureInput} as the result of transformation
-+ * @throws CanonicalizationException
-+ * @throws IOException
-+ * @throws InvalidCanonicalizerException
-+ * @throws ParserConfigurationException
-+ * @throws SAXException
-+ * @throws TransformationException
-+ */
-+ protected XMLSignatureInput enginePerformTransform(
-+ XMLSignatureInput input, OutputStream os, Transform _transformObject)
-+ throws IOException,
-+ CanonicalizationException, InvalidCanonicalizerException,
-+ TransformationException, ParserConfigurationException,
-+ SAXException {
-+ return enginePerformTransform(input, _transformObject);
-+ }
-+ /**
-+ * The mega method which MUST be implemented by the Transformation Algorithm.
-+ * In order to be compatible with preexisting Transform implementations,
-+ * by default this implementation invokes the deprecated, thread-unsafe
-+ * methods. Subclasses should override this with a thread-safe
-+ * implementation.
-+ *
-+ * @param input {@link XMLSignatureInput} as the input of transformation
-+ * @param _transformObject the Transform
-+ * @return {@link XMLSignatureInput} as the result of transformation
-+ * @throws CanonicalizationException
-+ * @throws IOException
-+ * @throws InvalidCanonicalizerException
-+ * @throws ParserConfigurationException
-+ * @throws SAXException
-+ * @throws TransformationException
-+ */
-+ protected XMLSignatureInput enginePerformTransform(
-+ XMLSignatureInput input, Transform _transformObject)
-+ throws IOException,
-+ CanonicalizationException, InvalidCanonicalizerException,
-+ TransformationException, ParserConfigurationException,
-+ SAXException {
-+ //Default implementation overide with a much better
-+ try {
-+ TransformSpi tmp = (TransformSpi) getClass().newInstance();
-+ tmp.setTransform(_transformObject);
-+ return tmp.enginePerformTransform(input);
-+ } catch (InstantiationException e) {
-+ throw new TransformationException("",e);
-+ } catch (IllegalAccessException e) {
-+ throw new TransformationException("",e);
-+ }
-+ }
-
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(TransformSpi.class.getName());
--
-- protected Transform _transformObject = null;
-- protected void setTransform(Transform transform) {
-- this._transformObject = transform;
-- }
--
-- /**
-- * The mega method which MUST be implemented by the Transformation Algorithm.
-- *
-- * @param input {@link XMLSignatureInput} as the input of transformation
-- * @param os where to output this transformation.
-- * @return {@link XMLSignatureInput} as the result of transformation
-- * @throws CanonicalizationException
-- * @throws IOException
-- * @throws InvalidCanonicalizerException
-- * @throws ParserConfigurationException
-- * @throws SAXException
-- * @throws TransformationException
-- */
-- protected XMLSignatureInput enginePerformTransform(
-- XMLSignatureInput input, OutputStream os)
-- throws IOException,
-- CanonicalizationException, InvalidCanonicalizerException,
-- TransformationException, ParserConfigurationException,
-- SAXException {
-- return enginePerformTransform(input);
-- }
-- /**
-- * The mega method which MUST be implemented by the Transformation Algorithm.
-- *
-- * @param input {@link XMLSignatureInput} as the input of transformation
-- * @return {@link XMLSignatureInput} as the result of transformation
-- * @throws CanonicalizationException
-- * @throws IOException
-- * @throws InvalidCanonicalizerException
-- * @throws ParserConfigurationException
-- * @throws SAXException
-- * @throws TransformationException
-- */
-- protected abstract XMLSignatureInput enginePerformTransform(
-- XMLSignatureInput input)
-- throws IOException,
-- CanonicalizationException, InvalidCanonicalizerException,
-- TransformationException, ParserConfigurationException,
-- SAXException;
--
-- /**
-- * Returns the URI representation of <code>Transformation algorithm</code>
-- *
-- * @return the URI representation of <code>Transformation algorithm</code>
-- */
-- protected abstract String engineGetURI();
-+ /**
-+ * The mega method which MUST be implemented by the Transformation Algorithm.
-+ * @deprecated
-+ * @param input {@link XMLSignatureInput} as the input of transformation
-+ * @return {@link XMLSignatureInput} as the result of transformation
-+ * @throws CanonicalizationException
-+ * @throws IOException
-+ * @throws InvalidCanonicalizerException
-+ * @throws ParserConfigurationException
-+ * @throws SAXException
-+ * @throws TransformationException
-+ */
-+ protected XMLSignatureInput enginePerformTransform(
-+ XMLSignatureInput input)
-+ throws IOException,
-+ CanonicalizationException, InvalidCanonicalizerException,
-+ TransformationException, ParserConfigurationException,
-+ SAXException {
-+ throw new UnsupportedOperationException();
-+ }
-+ /**
-+ * Returns the URI representation of <code>Transformation algorithm</code>
-+ *
-+ * @return the URI representation of <code>Transformation algorithm</code>
-+ */
-+ protected abstract String engineGetURI();
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/TransformationException.java b/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/TransformationException.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/TransformationException.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/TransformationException.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transforms.java b/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transforms.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transforms.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transforms.java
-@@ -3,7 +3,7 @@
- * DO NOT REMOVE OR ALTER!
- */
- /*
-- * Copyright 1999-2004 The Apache Software Foundation.
-+ * Copyright 1999-2008 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
-@@ -20,8 +20,6 @@
- */
- package com.sun.org.apache.xml.internal.security.transforms;
-
--
--
- import java.io.IOException;
- import java.io.OutputStream;
-
-@@ -39,11 +37,13 @@
- import org.w3c.dom.Element;
- import org.w3c.dom.NodeList;
-
--
- /**
-- * Holder of the {@link com.sun.org.apache.xml.internal.security.transforms.Transform} steps to be performed on the data.
-- * The input to the first Transform is the result of dereferencing the <code>URI</code> attribute of the <code>Reference</code> element.
-- * The output from the last Transform is the input for the <code>DigestMethod algorithm</code>
-+ * Holder of the {@link com.sun.org.apache.xml.internal.security.transforms.Transform} steps to
-+ * be performed on the data.
-+ * The input to the first Transform is the result of dereferencing the
-+ * <code>URI</code> attribute of the <code>Reference</code> element.
-+ * The output from the last Transform is the input for the
-+ * <code>DigestMethod algorithm</code>
- *
- * @author Christian Geuer-Pollmann
- * @see Transform
-@@ -51,252 +51,273 @@
- */
- public class Transforms extends SignatureElementProxy {
-
-- /** {@link java.util.logging} logging facility */
-+ /** {@link java.util.logging} logging facility */
- static java.util.logging.Logger log =
- java.util.logging.Logger.getLogger(Transforms.class.getName());
-- //J-
-- /** Canonicalization - Required Canonical XML (omits comments) */
-- public static final String TRANSFORM_C14N_OMIT_COMMENTS = Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS;
-- /** Canonicalization - Recommended Canonical XML with Comments */
-- public static final String TRANSFORM_C14N_WITH_COMMENTS = Canonicalizer.ALGO_ID_C14N_WITH_COMMENTS;
-- /** Canonicalization - Required Exclusive Canonicalization (omits comments) */
-- public static final String TRANSFORM_C14N_EXCL_OMIT_COMMENTS = Canonicalizer.ALGO_ID_C14N_EXCL_OMIT_COMMENTS;
-- /** Canonicalization - Recommended Exclusive Canonicalization with Comments */
-- public static final String TRANSFORM_C14N_EXCL_WITH_COMMENTS = Canonicalizer.ALGO_ID_C14N_EXCL_WITH_COMMENTS;
-- /** Transform - Optional XSLT */
-- public static final String TRANSFORM_XSLT = "http://www.w3.org/TR/1999/REC-xslt-19991116";
-- /** Transform - Required base64 decoding */
-- public static final String TRANSFORM_BASE64_DECODE = Constants.SignatureSpecNS + "base64";
-- /** Transform - Recommended XPath */
-- public static final String TRANSFORM_XPATH = "http://www.w3.org/TR/1999/REC-xpath-19991116";
-- /** Transform - Required Enveloped Signature */
-- public static final String TRANSFORM_ENVELOPED_SIGNATURE = Constants.SignatureSpecNS + "enveloped-signature";
-- /** Transform - XPointer */
-- public static final String TRANSFORM_XPOINTER = "http://www.w3.org/TR/2001/WD-xptr-20010108";
-- /** Transform - XPath Filter v2.0 */
-- public static final String TRANSFORM_XPATH2FILTER04 = "http://www.w3.org/2002/04/xmldsig-filter2";
-- /** Transform - XPath Filter */
-- public static final String TRANSFORM_XPATH2FILTER = "http://www.w3.org/2002/06/xmldsig-filter2";
-- /** Transform - XPath Filter CHGP private*/
-- public static final String TRANSFORM_XPATHFILTERCHGP = "http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/#xpathFilter";
-- //J+
-- Element []transforms;
-- /**
-- * Consturcts {@link Transforms}
-- *
-- * @param doc the {@link Document} in which <code>XMLsignature</code> will be placed
-- */
-- public Transforms(Document doc) {
-+ /** Canonicalization - Required Canonical XML (omits comments) */
-+ public static final String TRANSFORM_C14N_OMIT_COMMENTS
-+ = Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS;
-+ /** Canonicalization - Recommended Canonical XML with Comments */
-+ public static final String TRANSFORM_C14N_WITH_COMMENTS
-+ = Canonicalizer.ALGO_ID_C14N_WITH_COMMENTS;
-+ /** Canonicalization - Required Canonical XML 1.1 (omits comments) */
-+ public static final String TRANSFORM_C14N11_OMIT_COMMENTS
-+ = Canonicalizer.ALGO_ID_C14N11_OMIT_COMMENTS;
-+ /** Canonicalization - Recommended Canonical XML 1.1 with Comments */
-+ public static final String TRANSFORM_C14N11_WITH_COMMENTS
-+ = Canonicalizer.ALGO_ID_C14N11_WITH_COMMENTS;
-+ /** Canonicalization - Required Exclusive Canonicalization (omits comments) */
-+ public static final String TRANSFORM_C14N_EXCL_OMIT_COMMENTS
-+ = Canonicalizer.ALGO_ID_C14N_EXCL_OMIT_COMMENTS;
-+ /** Canonicalization - Recommended Exclusive Canonicalization with Comments */
-+ public static final String TRANSFORM_C14N_EXCL_WITH_COMMENTS
-+ = Canonicalizer.ALGO_ID_C14N_EXCL_WITH_COMMENTS;
-+ /** Transform - Optional XSLT */
-+ public static final String TRANSFORM_XSLT
-+ = "http://www.w3.org/TR/1999/REC-xslt-19991116";
-+ /** Transform - Required base64 decoding */
-+ public static final String TRANSFORM_BASE64_DECODE
-+ = Constants.SignatureSpecNS + "base64";
-+ /** Transform - Recommended XPath */
-+ public static final String TRANSFORM_XPATH
-+ = "http://www.w3.org/TR/1999/REC-xpath-19991116";
-+ /** Transform - Required Enveloped Signature */
-+ public static final String TRANSFORM_ENVELOPED_SIGNATURE
-+ = Constants.SignatureSpecNS + "enveloped-signature";
-+ /** Transform - XPointer */
-+ public static final String TRANSFORM_XPOINTER
-+ = "http://www.w3.org/TR/2001/WD-xptr-20010108";
-+ /** Transform - XPath Filter v2.0 */
-+ public static final String TRANSFORM_XPATH2FILTER04
-+ = "http://www.w3.org/2002/04/xmldsig-filter2";
-+ /** Transform - XPath Filter */
-+ public static final String TRANSFORM_XPATH2FILTER
-+ = "http://www.w3.org/2002/06/xmldsig-filter2";
-+ /** Transform - XPath Filter CHGP private */
-+ public static final String TRANSFORM_XPATHFILTERCHGP
-+ = "http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/#xpathFilter";
-
-- super(doc);
-+ Element []transforms;
-
-- XMLUtils.addReturnToElement(this._constructionElement);
-- }
-+ protected Transforms() { };
-
-- /**
-- * Consturcts {@link Transforms} from {@link Element} which is <code>Transforms</code> Element
-- *
-- * @param element is <code>Transforms</code> element
-- * @param BaseURI the URI where the XML instance was stored
-- * @throws DOMException
-- * @throws InvalidTransformException
-- * @throws TransformationException
-- * @throws XMLSecurityException
-- * @throws XMLSignatureException
-- */
-- public Transforms(Element element, String BaseURI)
-+ /**
-+ * Constructs {@link Transforms}.
-+ *
-+ * @param doc the {@link Document} in which <code>XMLSignature</code> will
-+ * be placed
-+ */
-+ public Transforms(Document doc) {
-+ super(doc);
-+ XMLUtils.addReturnToElement(this._constructionElement);
-+ }
-+
-+ /**
-+ * Constructs {@link Transforms} from {@link Element} which is
-+ * <code>Transforms</code> Element
-+ *
-+ * @param element is <code>Transforms</code> element
-+ * @param BaseURI the URI where the XML instance was stored
-+ * @throws DOMException
-+ * @throws InvalidTransformException
-+ * @throws TransformationException
-+ * @throws XMLSecurityException
-+ * @throws XMLSignatureException
-+ */
-+ public Transforms(Element element, String BaseURI)
- throws DOMException, XMLSignatureException,
- InvalidTransformException, TransformationException,
- XMLSecurityException {
-
-- super(element, BaseURI);
-+ super(element, BaseURI);
-
-- int numberOfTransformElems = this.getLength();
-+ int numberOfTransformElems = this.getLength();
-
-- if (numberOfTransformElems == 0) {
-+ if (numberOfTransformElems == 0) {
-
-- // At least ont Transform element must be present. Bad.
-- Object exArgs[] = { Constants._TAG_TRANSFORM,
-- Constants._TAG_TRANSFORMS };
-+ // At least one Transform element must be present. Bad.
-+ Object exArgs[] = { Constants._TAG_TRANSFORM,
-+ Constants._TAG_TRANSFORMS };
-
-- throw new TransformationException("xml.WrongContent", exArgs);
-- }
-- }
-+ throw new TransformationException("xml.WrongContent", exArgs);
-+ }
-+ }
-
-- /**
-- * Adds the <code>Transform</code> with the specified <code>Transform algorithm URI</code>
-- *
-- * @param transformURI the URI form of transform that indicates which transformation is applied to data
-- * @throws TransformationException
-- */
-- public void addTransform(String transformURI)
-+ /**
-+ * Adds the <code>Transform</code> with the specified <code>Transform
-+ * algorithm URI</code>
-+ *
-+ * @param transformURI the URI form of transform that indicates which
-+ * transformation is applied to data
-+ * @throws TransformationException
-+ */
-+ public void addTransform(String transformURI)
- throws TransformationException {
-
-- try {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Transforms.addTransform(" + transformURI + ")");
-+ try {
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Transforms.addTransform(" + transformURI + ")");
-
-- Transform transform = Transform.getInstance(this._doc, transformURI);
-+ Transform transform =
-+ Transform.getInstance(this._doc, transformURI);
-
-- this.addTransform(transform);
-- } catch (InvalidTransformException ex) {
-- throw new TransformationException("empty", ex);
-- }
-- }
-+ this.addTransform(transform);
-+ } catch (InvalidTransformException ex) {
-+ throw new TransformationException("empty", ex);
-+ }
-+ }
-
-- /**
-- * Adds the <code>Transform</code> with the specified <code>Transform algorithm URI</code>
-- *
-- * @param transformURI the URI form of transform that indicates which transformation is applied to data
-- * @param contextElement
-- * @throws TransformationException
-- * @see Transform#getInstance(Document doc, String algorithmURI, Element childElement)
-- */
-- public void addTransform(String transformURI, Element contextElement)
-+ /**
-+ * Adds the <code>Transform</code> with the specified <code>Transform
-+ * algorithm URI</code>
-+ *
-+ * @param transformURI the URI form of transform that indicates which
-+ * transformation is applied to data
-+ * @param contextElement
-+ * @throws TransformationException
-+ * @see Transform#getInstance(Document doc, String algorithmURI, Element childElement)
-+ */
-+ public void addTransform(String transformURI, Element contextElement)
- throws TransformationException {
-
-- try {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Transforms.addTransform(" + transformURI + ")");
-+ try {
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Transforms.addTransform(" + transformURI + ")");
-
-- Transform transform = Transform.getInstance(this._doc, transformURI,
-- contextElement);
-+ Transform transform =
-+ Transform.getInstance(this._doc, transformURI, contextElement);
-
-- this.addTransform(transform);
-- } catch (InvalidTransformException ex) {
-- throw new TransformationException("empty", ex);
-- }
-- }
-+ this.addTransform(transform);
-+ } catch (InvalidTransformException ex) {
-+ throw new TransformationException("empty", ex);
-+ }
-+ }
-
-- /**
-- * Adds the <code>Transform</code> with the specified <code>Transform algorithm URI</code>
-- *
-- * @param transformURI the URI form of transform that indicates which transformation is applied to data
-- * @param contextNodes
-- * @throws TransformationException
-- * @see Transform#getInstance(Document doc, String algorithmURI, NodeList contextNodes)
-- */
-- public void addTransform(String transformURI, NodeList contextNodes)
-+ /**
-+ * Adds the <code>Transform</code> with the specified <code>Transform
-+ * algorithm URI</code>.
-+ *
-+ * @param transformURI the URI form of transform that indicates which
-+ * transformation is applied to data
-+ * @param contextNodes
-+ * @throws TransformationException
-+ * @see Transform#getInstance(Document doc, String algorithmURI, NodeList contextNodes)
-+ */
-+ public void addTransform(String transformURI, NodeList contextNodes)
- throws TransformationException {
-
-- try {
-- Transform transform = Transform.getInstance(this._doc, transformURI,
-- contextNodes);
-+ try {
-+ Transform transform =
-+ Transform.getInstance(this._doc, transformURI, contextNodes);
-+ this.addTransform(transform);
-+ } catch (InvalidTransformException ex) {
-+ throw new TransformationException("empty", ex);
-+ }
-+ }
-
-- this.addTransform(transform);
-- } catch (InvalidTransformException ex) {
-- throw new TransformationException("empty", ex);
-- }
-- }
-+ /**
-+ * Adds a user-provided Transform step.
-+ *
-+ * @param transform {@link Transform} object
-+ */
-+ private void addTransform(Transform transform) {
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Transforms.addTransform(" + transform.getURI() + ")");
-
-- /**
-- * Adds a user-provided Transform step.
-- *
-- * @param transform {@link Transform} object
-- */
-- private void addTransform(Transform transform) {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Transforms.addTransform(" + transform.getURI() + ")");
-+ Element transformElement = transform.getElement();
-
-- Element transformElement = transform.getElement();
-+ this._constructionElement.appendChild(transformElement);
-+ XMLUtils.addReturnToElement(this._constructionElement);
-+ }
-
-- this._constructionElement.appendChild(transformElement);
-- XMLUtils.addReturnToElement(this._constructionElement);
-- }
-+ /**
-+ * Applies all included <code>Transform</code>s to xmlSignatureInput and
-+ * returns the result of these transformations.
-+ *
-+ * @param xmlSignatureInput the input for the <code>Transform</code>s
-+ * @return the result of the <code>Transforms</code>
-+ * @throws TransformationException
-+ */
-+ public XMLSignatureInput performTransforms(
-+ XMLSignatureInput xmlSignatureInput) throws TransformationException {
-+ return performTransforms(xmlSignatureInput, null);
-+ }
-
-- /**
-- * Applies all included <code>Transform</code>s to xmlSignatureInput and returns the result of these transformations.
-- *
-- * @param xmlSignatureInput the input for the <code>Transform</code>s
-- * @return the result of the <code>Transforms</code>
-- * @throws TransformationException
-- */
-- public XMLSignatureInput performTransforms(
-- XMLSignatureInput xmlSignatureInput) throws TransformationException {
-- return performTransforms(xmlSignatureInput,null);
-- }
-+ /**
-+ * Applies all included <code>Transform</code>s to xmlSignatureInput and
-+ * returns the result of these transformations.
-+ *
-+ * @param xmlSignatureInput the input for the <code>Transform</code>s
-+ * @param os where to output the last transformation.
-+ * @return the result of the <code>Transforms</code>
-+ * @throws TransformationException
-+ */
-+ public XMLSignatureInput performTransforms(
-+ XMLSignatureInput xmlSignatureInput, OutputStream os)
-+ throws TransformationException {
-
-- /**
-- * Applies all included <code>Transform</code>s to xmlSignatureInput and returns the result of these transformations.
-- *
-- * @param xmlSignatureInput the input for the <code>Transform</code>s
-- * @param os where to output the last transformation.
-- * @return the result of the <code>Transforms</code>
-- * @throws TransformationException
-- */
-- public XMLSignatureInput performTransforms(
-- XMLSignatureInput xmlSignatureInput,OutputStream os) throws TransformationException {
-+ try {
-+ int last=this.getLength()-1;
-+ for (int i = 0; i < last; i++) {
-+ Transform t = this.item(i);
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, "Perform the (" + i + ")th " + t.getURI()
-+ + " transform");
-+ }
-+ xmlSignatureInput = t.performTransform(xmlSignatureInput);
-+ }
-+ if (last>=0) {
-+ Transform t = this.item(last);
-+ xmlSignatureInput = t.performTransform(xmlSignatureInput, os);
-+ }
-
-- try {
-- int last=this.getLength()-1;
-- for (int i = 0; i < last; i++) {
-- Transform t = this.item(i);
-- if (true) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Preform the (" + i + ")th " + t.getURI() + " transform");
-+ return xmlSignatureInput;
-+ } catch (IOException ex) {
-+ throw new TransformationException("empty", ex);
-+ } catch (CanonicalizationException ex) {
-+ throw new TransformationException("empty", ex);
-+ } catch (InvalidCanonicalizerException ex) {
-+ throw new TransformationException("empty", ex);
-+ }
-+ }
-+
-+ /**
-+ * Return the nonnegative number of transformations.
-+ *
-+ * @return the number of transformations
-+ */
-+ public int getLength()
-+ {
-+ if (transforms == null) {
-+ transforms = XMLUtils.selectDsNodes
-+ (this._constructionElement.getFirstChild(), "Transform");
-+ }
-+ return transforms.length;
-+ }
-+
-+ /**
-+ * Return the <it>i</it><sup>th</sup> <code>{@link Transform}</code>.
-+ * Valid <code>i</code> values are 0 to <code>{@link #getLength}-1</code>.
-+ *
-+ * @param i index of {@link Transform} to return
-+ * @return the <it>i</it><sup>th</sup> Transform
-+ * @throws TransformationException
-+ */
-+ public Transform item(int i) throws TransformationException {
-+
-+ try {
-+ if (transforms == null) {
-+ transforms = XMLUtils.selectDsNodes
-+ (this._constructionElement.getFirstChild(), "Transform");
- }
-- xmlSignatureInput = t.performTransform(xmlSignatureInput);
-- }
-- if (last>=0) {
-- Transform t = this.item(last);
-- xmlSignatureInput = t.performTransform(xmlSignatureInput, os);
-- }
-+ return new Transform(transforms[i], this._baseURI);
-+ } catch (XMLSecurityException ex) {
-+ throw new TransformationException("empty", ex);
-+ }
-+ }
-
--
-- return xmlSignatureInput;
-- } catch (IOException ex) {
-- throw new TransformationException("empty", ex);
-- // } catch (ParserConfigurationException ex) { throw new TransformationException("empty", ex);
-- // } catch (SAXException ex) { throw new TransformationException("empty", ex);
-- } catch (CanonicalizationException ex) {
-- throw new TransformationException("empty", ex);
-- } catch (InvalidCanonicalizerException ex) {
-- throw new TransformationException("empty", ex);
-- }
-- }
--
-- /**
-- * Return the nonnegative number of transformations.
-- *
-- * @return the number of transformations
-- */
-- public int getLength()
-- {
-- /*Element nscontext = XMLUtils.createDSctx(this._doc, "ds",
-- Constants.SignatureSpecNS);
-- NodeList transformElems =
-- XPathAPI.selectNodeList(this._constructionElement,
-- "./ds:Transform", nscontext);
-- return transformElems.getLength();*/
-- if (transforms==null) {
-- transforms=XMLUtils.selectDsNodes(this._constructionElement.getFirstChild(),
-- "Transform");
-- }
-- return transforms.length;
-- }
--
-- /**
-- * Return the <it>i</it><sup>th</sup> <code>{@link Transform}</code>.
-- * Valid <code>i</code> values are 0 to <code>{@link #getLength}-1</code>.
-- *
-- * @param i index of {@link Transform} to return
-- * @return the <it>i</it><sup>th</sup> transforms
-- * @throws TransformationException
-- */
-- public Transform item(int i) throws TransformationException {
--
-- try {
-- if (transforms==null) {
-- transforms=XMLUtils.selectDsNodes(this._constructionElement.getFirstChild(),
-- "Transform");
-- }
-- return new Transform(transforms[i], this._baseURI);
-- } catch (XMLSecurityException ex) {
-- throw new TransformationException("empty", ex);
-- }
-- }
--
-- /** @inheritDoc */
-- public String getBaseLocalName() {
-- return Constants._TAG_TRANSFORMS;
-- }
-+ /** @inheritDoc */
-+ public String getBaseLocalName() {
-+ return Constants._TAG_TRANSFORMS;
-+ }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/FuncHereContext.java b/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/FuncHereContext.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/FuncHereContext.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/FuncHereContext.java
-@@ -62,7 +62,7 @@
- * -scott
- * </PRE>
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- * @see com.sun.org.apache.xml.internal.security.transforms.implementations.FuncHere
- * @see com.sun.org.apache.xml.internal.security.utils.XPathFuncHereAPI
- * @see <A HREF="http://www.w3.org/Signature/Drafts/xmldsig-core/Overview.html#function-here">XML Signature - The here() function</A>
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformBase64Decode.java b/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformBase64Decode.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformBase64Decode.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformBase64Decode.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -33,6 +32,7 @@
- import com.sun.org.apache.xml.internal.security.c14n.CanonicalizationException;
- import com.sun.org.apache.xml.internal.security.exceptions.Base64DecodingException;
- import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
-+import com.sun.org.apache.xml.internal.security.transforms.Transform;
- import com.sun.org.apache.xml.internal.security.transforms.TransformSpi;
- import com.sun.org.apache.xml.internal.security.transforms.TransformationException;
- import com.sun.org.apache.xml.internal.security.transforms.Transforms;
-@@ -43,7 +43,6 @@
- import org.w3c.dom.Text;
- import org.xml.sax.SAXException;
-
--
- /**
- * Implements the <CODE>http://www.w3.org/2000/09/xmldsig#base64</CODE> decoding
- * transform.
-@@ -95,13 +94,15 @@
- * @throws IOException
- * @throws TransformationException
- */
-- protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input)
-+ protected XMLSignatureInput enginePerformTransform
-+ (XMLSignatureInput input, Transform _transformObject)
- throws IOException, CanonicalizationException,
- TransformationException {
-- return enginePerformTransform(input,null);
-+ return enginePerformTransform(input, null, _transformObject);
- }
-+
- protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input,
-- OutputStream os)
-+ OutputStream os, Transform _transformObject)
- throws IOException, CanonicalizationException,
- TransformationException {
- try {
-@@ -116,7 +117,7 @@
- byte[] decodedBytes = Base64.decode(sb.toString());
- return new XMLSignatureInput(decodedBytes);
- }
-- Base64.decode(sb.toString().getBytes(),os);
-+ Base64.decode(sb.toString(),os);
- XMLSignatureInput output=new XMLSignatureInput((byte[])null);
- output.setOutputStream(os);
- return output;
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14N.java b/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14N.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14N.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14N.java
-@@ -20,17 +20,15 @@
- */
- package com.sun.org.apache.xml.internal.security.transforms.implementations;
-
--
--
- import java.io.OutputStream;
-
- import com.sun.org.apache.xml.internal.security.c14n.CanonicalizationException;
- import com.sun.org.apache.xml.internal.security.c14n.implementations.Canonicalizer20010315OmitComments;
- import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
-+import com.sun.org.apache.xml.internal.security.transforms.Transform;
- import com.sun.org.apache.xml.internal.security.transforms.TransformSpi;
- import com.sun.org.apache.xml.internal.security.transforms.Transforms;
-
--
- /**
- * Implements the <CODE>http://www.w3.org/TR/2001/REC-xml-c14n-20010315</CODE>
- * transform.
-@@ -54,18 +52,19 @@
- /**
- * @inheritDoc
- */
-- protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input)
-+ protected XMLSignatureInput enginePerformTransform
-+ (XMLSignatureInput input, Transform _transformObject)
- throws CanonicalizationException {
-- return enginePerformTransform(input,null);
-+ return enginePerformTransform(input, null, _transformObject);
- }
-- protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input,OutputStream os)
-+
-+ protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input,OutputStream os, Transform _transformObject)
- throws CanonicalizationException {
- Canonicalizer20010315OmitComments c14n = new Canonicalizer20010315OmitComments();
- if (os!=null) {
- c14n.setWriter(os);
- }
- byte[] result = null;
-- input.setNeedsToBeExpanded(true);
- result=c14n.engineCanonicalize(input);
- XMLSignatureInput output=new XMLSignatureInput(result);
- if (os!=null) {
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14N11.java b/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14N11.java
-new file mode 100644
---- /dev/null
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14N11.java
-@@ -0,0 +1,65 @@
-+/*
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
-+ */
-+/*
-+ * Copyright 2008 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+package com.sun.org.apache.xml.internal.security.transforms.implementations;
-+
-+import java.io.OutputStream;
-+
-+import com.sun.org.apache.xml.internal.security.c14n.CanonicalizationException;
-+import com.sun.org.apache.xml.internal.security.c14n.implementations.Canonicalizer11_OmitComments;
-+import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
-+import com.sun.org.apache.xml.internal.security.transforms.Transform;
-+import com.sun.org.apache.xml.internal.security.transforms.TransformSpi;
-+import com.sun.org.apache.xml.internal.security.transforms.Transforms;
-+
-+/**
-+ * Implements the <CODE>http://www.w3.org/2006/12/xml-c14n11</CODE>
-+ * (C14N 1.1) transform.
-+ *
-+ * @author Sean Mullan
-+ */
-+public class TransformC14N11 extends TransformSpi {
-+
-+ protected String engineGetURI() {
-+ return Transforms.TRANSFORM_C14N11_OMIT_COMMENTS;
-+ }
-+
-+ protected XMLSignatureInput enginePerformTransform
-+ (XMLSignatureInput input, Transform transform)
-+ throws CanonicalizationException {
-+ return enginePerformTransform(input, null, transform);
-+ }
-+
-+ protected XMLSignatureInput enginePerformTransform
-+ (XMLSignatureInput input, OutputStream os, Transform transform)
-+ throws CanonicalizationException {
-+ Canonicalizer11_OmitComments c14n = new Canonicalizer11_OmitComments();
-+ if (os != null) {
-+ c14n.setWriter(os);
-+ }
-+ byte[] result = null;
-+ result = c14n.engineCanonicalize(input);
-+ XMLSignatureInput output = new XMLSignatureInput(result);
-+ if (os != null) {
-+ output.setOutputStream(os);
-+ }
-+ return output;
-+ }
-+}
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14N11_WithComments.java b/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14N11_WithComments.java
-new file mode 100644
---- /dev/null
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14N11_WithComments.java
-@@ -0,0 +1,67 @@
-+/*
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
-+ */
-+/*
-+ * Copyright 2008 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+package com.sun.org.apache.xml.internal.security.transforms.implementations;
-+
-+import java.io.OutputStream;
-+
-+import com.sun.org.apache.xml.internal.security.c14n.CanonicalizationException;
-+import com.sun.org.apache.xml.internal.security.c14n.implementations.Canonicalizer11_WithComments;
-+import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
-+import com.sun.org.apache.xml.internal.security.transforms.Transform;
-+import com.sun.org.apache.xml.internal.security.transforms.TransformSpi;
-+import com.sun.org.apache.xml.internal.security.transforms.Transforms;
-+
-+/**
-+ * Implements the <CODE>http://www.w3.org/2006/12/xml-c14n-11#WithComments</CODE>
-+ * (C14N 1.1 With Comments) transform.
-+ *
-+ * @author Sean Mullan
-+ */
-+public class TransformC14N11_WithComments extends TransformSpi {
-+
-+ protected String engineGetURI() {
-+ return Transforms.TRANSFORM_C14N11_WITH_COMMENTS;
-+ }
-+
-+ protected XMLSignatureInput enginePerformTransform
-+ (XMLSignatureInput input, Transform transform)
-+ throws CanonicalizationException {
-+ return enginePerformTransform(input, null, transform);
-+ }
-+
-+ protected XMLSignatureInput enginePerformTransform
-+ (XMLSignatureInput input, OutputStream os, Transform transform)
-+ throws CanonicalizationException {
-+
-+ Canonicalizer11_WithComments c14n = new Canonicalizer11_WithComments();
-+ if (os != null) {
-+ c14n.setWriter(os);
-+ }
-+
-+ byte[] result = null;
-+ result = c14n.engineCanonicalize(input);
-+ XMLSignatureInput output = new XMLSignatureInput(result);
-+ if (os != null) {
-+ output.setOutputStream(os);
-+ }
-+ return output;
-+ }
-+}
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14NExclusive.java b/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14NExclusive.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14NExclusive.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14NExclusive.java
-@@ -20,25 +20,24 @@
- */
- package com.sun.org.apache.xml.internal.security.transforms.implementations;
-
--
--
- import java.io.OutputStream;
-
- import com.sun.org.apache.xml.internal.security.c14n.CanonicalizationException;
- import com.sun.org.apache.xml.internal.security.c14n.implementations.Canonicalizer20010315ExclOmitComments;
- import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
- import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
-+import com.sun.org.apache.xml.internal.security.transforms.Transform;
- import com.sun.org.apache.xml.internal.security.transforms.TransformSpi;
- import com.sun.org.apache.xml.internal.security.transforms.Transforms;
- import com.sun.org.apache.xml.internal.security.transforms.params.InclusiveNamespaces;
- import com.sun.org.apache.xml.internal.security.utils.XMLUtils;
- import org.w3c.dom.Element;
-
--
- /**
- * Class TransformC14NExclusive
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
-+ * @version $Revision: 1.5 $
- */
- public class TransformC14NExclusive extends TransformSpi {
-
-@@ -46,7 +45,6 @@
- public static final String implementedTransformURI =
- Transforms.TRANSFORM_C14N_EXCL_OMIT_COMMENTS;
-
--
- /**
- * Method engineGetURI
- *
-@@ -63,27 +61,29 @@
- * @return the transformed of the input
- * @throws CanonicalizationException
- */
-- protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input)
-+ protected XMLSignatureInput enginePerformTransform
-+ (XMLSignatureInput input, Transform _transformObject)
- throws CanonicalizationException {
-- return enginePerformTransform(input,null);
-+ return enginePerformTransform(input, null, _transformObject);
- }
-- protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input,OutputStream os)
-+
-+ protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input,OutputStream os, Transform _transformObject)
- throws CanonicalizationException {
- try {
- String inclusiveNamespaces = null;
-
-- if (this._transformObject
-+ if (_transformObject
- .length(InclusiveNamespaces
- .ExclusiveCanonicalizationNamespace, InclusiveNamespaces
- ._TAG_EC_INCLUSIVENAMESPACES) == 1) {
- Element inclusiveElement =
- XMLUtils.selectNode(
-- this._transformObject.getElement().getFirstChild(),
-+ _transformObject.getElement().getFirstChild(),
- InclusiveNamespaces.ExclusiveCanonicalizationNamespace,
- InclusiveNamespaces._TAG_EC_INCLUSIVENAMESPACES,0);
-
- inclusiveNamespaces = new InclusiveNamespaces(inclusiveElement,
-- this._transformObject.getBaseURI()).getInclusiveNamespaces();
-+ _transformObject.getBaseURI()).getInclusiveNamespaces();
- }
-
- Canonicalizer20010315ExclOmitComments c14n =
-@@ -92,7 +92,6 @@
- c14n.setWriter(os);
- }
- byte []result;
-- input.setNeedsToBeExpanded(true);
- result =c14n.engineCanonicalize(input, inclusiveNamespaces);
-
- XMLSignatureInput output=new XMLSignatureInput(result);
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14NExclusiveWithComments.java b/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14NExclusiveWithComments.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14NExclusiveWithComments.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14NExclusiveWithComments.java
-@@ -20,21 +20,19 @@
- */
- package com.sun.org.apache.xml.internal.security.transforms.implementations;
-
--
--
- import java.io.OutputStream;
-
- import com.sun.org.apache.xml.internal.security.c14n.CanonicalizationException;
- import com.sun.org.apache.xml.internal.security.c14n.implementations.Canonicalizer20010315ExclWithComments;
- import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
- import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
-+import com.sun.org.apache.xml.internal.security.transforms.Transform;
- import com.sun.org.apache.xml.internal.security.transforms.TransformSpi;
- import com.sun.org.apache.xml.internal.security.transforms.Transforms;
- import com.sun.org.apache.xml.internal.security.transforms.params.InclusiveNamespaces;
- import com.sun.org.apache.xml.internal.security.utils.XMLUtils;
- import org.w3c.dom.Element;
-
--
- /**
- * Implements the <CODE>http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments</CODE>
- * transform.
-@@ -47,7 +45,6 @@
- public static final String implementedTransformURI =
- Transforms.TRANSFORM_C14N_EXCL_WITH_COMMENTS;
-
--
- /**
- * Method engineGetURI
- *@inheritDoc
-@@ -60,27 +57,29 @@
- /**
- * @inheritDoc
- */
-- protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input)
-+ protected XMLSignatureInput enginePerformTransform
-+ (XMLSignatureInput input, Transform _transformObject)
- throws CanonicalizationException {
-- return enginePerformTransform(input,null);
-+ return enginePerformTransform(input, null, _transformObject);
- }
-- protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input,OutputStream os)
-+
-+ protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input,OutputStream os, Transform _transformObject)
- throws CanonicalizationException {
- try {
- String inclusiveNamespaces = null;
-
-- if (this._transformObject
-+ if (_transformObject
- .length(InclusiveNamespaces
- .ExclusiveCanonicalizationNamespace, InclusiveNamespaces
- ._TAG_EC_INCLUSIVENAMESPACES) == 1) {
- Element inclusiveElement =
- XMLUtils.selectNode(
-- this._transformObject.getElement().getFirstChild(),
-+ _transformObject.getElement().getFirstChild(),
- InclusiveNamespaces.ExclusiveCanonicalizationNamespace,
- InclusiveNamespaces._TAG_EC_INCLUSIVENAMESPACES,0);
-
- inclusiveNamespaces = new InclusiveNamespaces(inclusiveElement,
-- this._transformObject.getBaseURI()).getInclusiveNamespaces();
-+ _transformObject.getBaseURI()).getInclusiveNamespaces();
- }
-
- Canonicalizer20010315ExclWithComments c14n =
-@@ -88,7 +87,6 @@
- if (os!=null) {
- c14n.setWriter( os);
- }
-- input.setNeedsToBeExpanded(true);
- byte []result;
- result =c14n.engineCanonicalize(input, inclusiveNamespaces);
- XMLSignatureInput output=new XMLSignatureInput(result);
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14NWithComments.java b/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14NWithComments.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14NWithComments.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14NWithComments.java
-@@ -20,17 +20,15 @@
- */
- package com.sun.org.apache.xml.internal.security.transforms.implementations;
-
--
--
- import java.io.OutputStream;
-
- import com.sun.org.apache.xml.internal.security.c14n.CanonicalizationException;
- import com.sun.org.apache.xml.internal.security.c14n.implementations.Canonicalizer20010315WithComments;
- import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
-+import com.sun.org.apache.xml.internal.security.transforms.Transform;
- import com.sun.org.apache.xml.internal.security.transforms.TransformSpi;
- import com.sun.org.apache.xml.internal.security.transforms.Transforms;
-
--
- /**
- * Implements the <CODE>http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments</CODE>
- * transform.
-@@ -43,18 +41,20 @@
- public static final String implementedTransformURI =
- Transforms.TRANSFORM_C14N_WITH_COMMENTS;
-
--
- /** @inheritDoc */
- protected String engineGetURI() {
- return implementedTransformURI;
- }
-+
- /** @inheritDoc */
-- protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input)
-- throws CanonicalizationException {
-- return enginePerformTransform(input,null);
-+ protected XMLSignatureInput enginePerformTransform
-+ (XMLSignatureInput input, Transform _transformObject)
-+ throws CanonicalizationException {
-+ return enginePerformTransform(input, null, _transformObject);
- }
-+
- /** @inheritDoc */
-- protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input,OutputStream os)
-+ protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input,OutputStream os, Transform _transformObject)
- throws CanonicalizationException {
-
- Canonicalizer20010315WithComments c14n = new Canonicalizer20010315WithComments();
-@@ -63,7 +63,6 @@
- }
-
- byte[] result = null;
-- input.setNeedsToBeExpanded(true);
- result=c14n.engineCanonicalize(input);
- XMLSignatureInput output=new XMLSignatureInput(result);
- if (os!=null) {
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformEnvelopedSignature.java b/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformEnvelopedSignature.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformEnvelopedSignature.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformEnvelopedSignature.java
-@@ -20,10 +20,9 @@
- */
- package com.sun.org.apache.xml.internal.security.transforms.implementations;
-
--
--
- import com.sun.org.apache.xml.internal.security.signature.NodeFilter;
- import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
-+import com.sun.org.apache.xml.internal.security.transforms.Transform;
- import com.sun.org.apache.xml.internal.security.transforms.TransformSpi;
- import com.sun.org.apache.xml.internal.security.transforms.TransformationException;
- import com.sun.org.apache.xml.internal.security.transforms.Transforms;
-@@ -32,7 +31,6 @@
- import org.w3c.dom.Element;
- import org.w3c.dom.Node;
-
--
- /**
- * Implements the <CODE>http://www.w3.org/2000/09/xmldsig#enveloped-signature</CODE>
- * transform.
-@@ -57,7 +55,7 @@
- /**
- * @inheritDoc
- */
-- protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input)
-+ protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input, Transform _transformObject)
- throws TransformationException {
-
-
-@@ -74,14 +72,7 @@
- * (including comments) in the node-set representing the octet stream.
- */
-
-- /*
-- if (input.isOctetStream()) {
-- input.setNodesetXPath(Canonicalizer.XPATH_C14N_WITH_COMMENTS);
-- }
-- */
--
-- Element transformElement = this._transformObject.getElement();
-- Node signatureElement = transformElement;
-+ Node signatureElement = _transformObject.getElement();
-
-
- signatureElement = searchSignatureElement(signatureElement);
-@@ -124,18 +115,24 @@
- }
- return signatureElement;
- }
-- class EnvelopedNodeFilter implements NodeFilter {
-+ static class EnvelopedNodeFilter implements NodeFilter {
- Node exclude;
- EnvelopedNodeFilter(Node n) {
-- exclude=n;
-+ exclude=n;
- }
-- /**
-- * @see com.sun.org.apache.xml.internal.security.signature.NodeFilter#isNodeInclude(org.w3c.dom.Node)
-- */
-- public boolean isNodeInclude(Node n) {
-- // TODO Optimize me.
-- return !XMLUtils.isDescendantOrSelf(exclude,n);
-- }
--
-+ public int isNodeIncludeDO(Node n, int level) {
-+ if ((n==exclude))
-+ return -1;
-+ return 1;
-+ }
-+ /**
-+ * @see com.sun.org.apache.xml.internal.security.signature.NodeFilter#isNodeInclude(org.w3c.dom.Node)
-+ */
-+ public int isNodeInclude(Node n) {
-+ if ((n==exclude) || XMLUtils.isDescendantOrSelf(exclude,n))
-+ return -1;
-+ return 1;
-+ //return !XMLUtils.isDescendantOrSelf(exclude,n);
-+ }
- }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXPath.java b/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXPath.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXPath.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXPath.java
-@@ -20,13 +20,12 @@
- */
- package com.sun.org.apache.xml.internal.security.transforms.implementations;
-
--
--
- import javax.xml.transform.TransformerException;
-
- import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityRuntimeException;
- import com.sun.org.apache.xml.internal.security.signature.NodeFilter;
- import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
-+import com.sun.org.apache.xml.internal.security.transforms.Transform;
- import com.sun.org.apache.xml.internal.security.transforms.TransformSpi;
- import com.sun.org.apache.xml.internal.security.transforms.TransformationException;
- import com.sun.org.apache.xml.internal.security.transforms.Transforms;
-@@ -40,7 +39,6 @@
- import org.w3c.dom.Element;
- import org.w3c.dom.Node;
-
--
- /**
- * Class TransformXPath
- *
-@@ -53,15 +51,10 @@
- */
- public class TransformXPath extends TransformSpi {
-
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(TransformXPath.class.getName());
--
- /** Field implementedTransformURI */
- public static final String implementedTransformURI =
- Transforms.TRANSFORM_XPATH;
-
--
- /**
- * Method engineGetURI
- *
-@@ -78,7 +71,7 @@
- *
- * @throws TransformationException
- */
-- protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input)
-+ protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input, Transform _transformObject)
- throws TransformationException {
-
- try {
-@@ -94,12 +87,12 @@
- * The evaluation of this expression includes all of the document's nodes
- * (including comments) in the node-set representing the octet stream.
- */
-- CachedXPathAPIHolder.setDoc(this._transformObject.getElement().getOwnerDocument());
-+ CachedXPathAPIHolder.setDoc(_transformObject.getElement().getOwnerDocument());
-
-
-
- Element xpathElement =XMLUtils.selectDsNode(
-- this._transformObject.getElement().getFirstChild(),
-+ _transformObject.getElement().getFirstChild(),
- Constants._TAG_XPATH,0);
-
- if (xpathElement == null) {
-@@ -129,42 +122,47 @@
- * @return true if needs to be circunvent for bug.
- */
- private boolean needsCircunvent(String str) {
-- return true;
-- //return str.contains("namespace");
-+ //return true;
-+ //return false;
-+ return (str.indexOf("namespace") != -1) || (str.indexOf("name()") != -1);
-+ }
-
-- }
-- class XPathNodeFilter implements NodeFilter {
-- PrefixResolverDefault prefixResolver;
-- CachedXPathFuncHereAPI xPathFuncHereAPI =
-- new CachedXPathFuncHereAPI(CachedXPathAPIHolder.getCachedXPathAPI());
-- ;
-+ static class XPathNodeFilter implements NodeFilter {
-+ PrefixResolverDefault prefixResolver;
-+ CachedXPathFuncHereAPI xPathFuncHereAPI =
-+ new CachedXPathFuncHereAPI(CachedXPathAPIHolder.getCachedXPathAPI());
- Node xpathnode;
- String str;
- XPathNodeFilter(Element xpathElement,
- Node xpathnode, String str) {
-- this.xpathnode=xpathnode;
-- this.str=str;
-- prefixResolver =new PrefixResolverDefault(xpathElement);
-+ this.xpathnode=xpathnode;
-+ this.str=str;
-+ prefixResolver =new PrefixResolverDefault(xpathElement);
- }
-
--
-- /**
-- * @see com.sun.org.apache.xml.internal.security.signature.NodeFilter#isNodeInclude(org.w3c.dom.Node)
-- */
-- public boolean isNodeInclude(Node currentNode) {
-- XObject includeInResult;
-- try {
-- includeInResult = xPathFuncHereAPI.eval(currentNode,
-- xpathnode, str,prefixResolver);
-- return includeInResult.bool();
-- } catch (TransformerException e) {
-+ /**
-+ * @see com.sun.org.apache.xml.internal.security.signature.NodeFilter#isNodeInclude(org.w3c.dom.Node)
-+ */
-+ public int isNodeInclude(Node currentNode) {
-+ XObject includeInResult;
-+ try {
-+ includeInResult = xPathFuncHereAPI.eval(currentNode,
-+ xpathnode, str,prefixResolver);
-+ if (includeInResult.bool())
-+ return 1;
-+ return 0;
-+ } catch (TransformerException e) {
- Object[] eArgs = {currentNode};
-- throw new XMLSecurityRuntimeException("signature.Transform.node", eArgs, e);
-- }
-- catch (Exception e) {
-+ throw new XMLSecurityRuntimeException
-+ ("signature.Transform.node", eArgs, e);
-+ } catch (Exception e) {
- Object[] eArgs = {currentNode, new Short(currentNode.getNodeType())};
-- throw new XMLSecurityRuntimeException("signature.Transform.nodeAndType",eArgs, e);
-- }
-- }
-+ throw new XMLSecurityRuntimeException
-+ ("signature.Transform.nodeAndType",eArgs, e);
-+ }
-+ }
-+ public int isNodeIncludeDO(Node n, int level) {
-+ return isNodeInclude(n);
-+ }
- }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXPath2Filter.java b/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXPath2Filter.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXPath2Filter.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXPath2Filter.java
-@@ -24,7 +24,10 @@
-
- import java.io.IOException;
- import java.util.ArrayList;
-+import java.util.HashSet;
-+import java.util.Iterator;
- import java.util.List;
-+import java.util.Set;
-
- import javax.xml.parsers.ParserConfigurationException;
- import javax.xml.transform.TransformerException;
-@@ -34,6 +37,7 @@
- import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
- import com.sun.org.apache.xml.internal.security.signature.NodeFilter;
- import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
-+import com.sun.org.apache.xml.internal.security.transforms.Transform;
- import com.sun.org.apache.xml.internal.security.transforms.TransformSpi;
- import com.sun.org.apache.xml.internal.security.transforms.TransformationException;
- import com.sun.org.apache.xml.internal.security.transforms.Transforms;
-@@ -88,9 +92,9 @@
- *
- * @throws TransformationException
- */
-- protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input)
-+ protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input, Transform _transformObject)
- throws TransformationException {
-- CachedXPathAPIHolder.setDoc(this._transformObject.getElement().getOwnerDocument());
-+ CachedXPathAPIHolder.setDoc(_transformObject.getElement().getOwnerDocument());
- try {
- List unionNodes=new ArrayList();
- List substractNodes=new ArrayList();
-@@ -101,7 +105,7 @@
-
-
- Element []xpathElements =XMLUtils.selectNodes(
-- this._transformObject.getElement().getFirstChild(),
-+ _transformObject.getElement().getFirstChild(),
- XPath2FilterContainer.XPathFilter2NS,
- XPath2FilterContainer._TAG_XPATH2);
- int noOfSteps = xpathElements.length;
-@@ -122,7 +126,7 @@
-
- for (int i = 0; i < noOfSteps; i++) {
- Element xpathElement =XMLUtils.selectNode(
-- this._transformObject.getElement().getFirstChild(),
-+ _transformObject.getElement().getFirstChild(),
- XPath2FilterContainer.XPathFilter2NS,
- XPath2FilterContainer._TAG_XPATH2,i);
- XPath2FilterContainer xpathContainer =
-@@ -143,9 +147,9 @@
- }
- }
-
-- input.setNeedsToBeExpanded(true);
-
-- input.addNodeFilter(new XPath2NodeFilter(unionNodes,substractNodes,intersectNodes));
-+ input.addNodeFilter(new XPath2NodeFilter(convertNodeListToSet(unionNodes),
-+ convertNodeListToSet(substractNodes),convertNodeListToSet(intersectNodes)));
- input.setNodeSet(true);
- return input;
- } catch (TransformerException ex) {
-@@ -166,37 +170,110 @@
- throw new TransformationException("empty", ex);
- }
- }
-+ static Set convertNodeListToSet(List l){
-+ Set result=new HashSet();
-+ for (int j=0;j<l.size();j++) {
-+ NodeList rootNodes=(NodeList) l.get(j);
-+ int length = rootNodes.getLength();
-+
-+ for (int i = 0; i < length; i++) {
-+ Node rootNode = rootNodes.item(i);
-+ result.add(rootNode);
-+
-+ }
-+
-+ }
-+ return result;
-+ }
- }
-
- class XPath2NodeFilter implements NodeFilter {
-- XPath2NodeFilter(List unionNodes, List substractNodes,
-- List intersectNodes) {
-+ boolean hasUnionNodes;
-+ boolean hasSubstractNodes;
-+ boolean hasIntersectNodes;
-+ XPath2NodeFilter(Set unionNodes, Set substractNodes,
-+ Set intersectNodes) {
- this.unionNodes=unionNodes;
-+ hasUnionNodes=!unionNodes.isEmpty();
- this.substractNodes=substractNodes;
-+ hasSubstractNodes=!substractNodes.isEmpty();
- this.intersectNodes=intersectNodes;
-+ hasIntersectNodes=!intersectNodes.isEmpty();
- }
-- List unionNodes=new ArrayList();
-- List substractNodes=new ArrayList();
-- List intersectNodes=new ArrayList();
-+ Set unionNodes;
-+ Set substractNodes;
-+ Set intersectNodes;
-
-
- /**
- * @see com.sun.org.apache.xml.internal.security.signature.NodeFilter#isNodeInclude(org.w3c.dom.Node)
- */
-- public boolean isNodeInclude(Node currentNode) {
-- boolean notIncluded=false;
-- if (rooted(currentNode,substractNodes)) {
-- notIncluded=true;
-- } else if (!rooted(currentNode,intersectNodes)) {
-- notIncluded=true;
-- }
-- if (notIncluded && rooted(currentNode,unionNodes)) {
-- notIncluded=false;
-+ public int isNodeInclude(Node currentNode) {
-+ int result=1;
-+
-+ if (hasSubstractNodes && rooted(currentNode, substractNodes)) {
-+ result = -1;
-+ } else if (hasIntersectNodes && !rooted(currentNode, intersectNodes)) {
-+ result = 0;
- }
-
-- return !notIncluded;
-+ //TODO OPTIMIZE
-+ if (result==1)
-+ return 1;
-+ if (hasUnionNodes) {
-+ if (rooted(currentNode, unionNodes)) {
-+ return 1;
-+ }
-+ result=0;
-+ }
-+ return result;
-
- }
-+ int inSubstract=-1;
-+ int inIntersect=-1;
-+ int inUnion=-1;
-+ public int isNodeIncludeDO(Node n, int level) {
-+ int result=1;
-+ if (hasSubstractNodes) {
-+ if ((inSubstract==-1) || (level<=inSubstract)) {
-+ if (inList(n, substractNodes)) {
-+ inSubstract=level;
-+ } else {
-+ inSubstract=-1;
-+ }
-+ }
-+ if (inSubstract!=-1){
-+ result=-1;
-+ }
-+ }
-+ if (result!=-1){
-+ if (hasIntersectNodes) {
-+ if ((inIntersect==-1) || (level<=inIntersect)) {
-+ if (!inList(n, intersectNodes)) {
-+ inIntersect=-1;
-+ result=0;
-+ } else {
-+ inIntersect=level;
-+ }
-+ }
-+ }
-+ }
-+
-+ if (level<=inUnion)
-+ inUnion=-1;
-+ if (result==1)
-+ return 1;
-+ if (hasUnionNodes) {
-+ if ((inUnion==-1) && inList(n, unionNodes)) {
-+ inUnion=level;
-+ }
-+ if (inUnion!=-1)
-+ return 1;
-+ result=0;
-+ }
-+
-+ return result;
-+ }
-
- /**
- * Method rooted
-@@ -205,20 +282,28 @@
- *
- * @return if rooted bye the rootnodes
- */
-- boolean rooted(Node currentNode, List nodeList ) {
-- for (int j=0;j<nodeList.size();j++) {
-- NodeList rootNodes=(NodeList) nodeList.get(j);
-- int length = rootNodes.getLength();
--
-- for (int i = 0; i < length; i++) {
-- Node rootNode = rootNodes.item(i);
--
-- if (XMLUtils.isDescendantOrSelf(rootNode,currentNode)) {
-- return true;
-- }
-- }
--
-+ static boolean rooted(Node currentNode, Set nodeList ) {
-+ if (nodeList.contains(currentNode)) {
-+ return true;
-+ }
-+ Iterator it=nodeList.iterator();
-+ while (it.hasNext()) {
-+ Node rootNode = (Node) it.next();
-+ if (XMLUtils.isDescendantOrSelf(rootNode,currentNode)) {
-+ return true;
-+ }
- }
- return false;
- }
-+
-+ /**
-+ * Method rooted
-+ * @param currentNode
-+ * @param nodeList
-+ *
-+ * @return if rooted bye the rootnodes
-+ */
-+ static boolean inList(Node currentNode, Set nodeList ) {
-+ return nodeList.contains(currentNode);
-+ }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXPointer.java b/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXPointer.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXPointer.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXPointer.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -25,6 +24,7 @@
-
-
- import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
-+import com.sun.org.apache.xml.internal.security.transforms.Transform;
- import com.sun.org.apache.xml.internal.security.transforms.TransformSpi;
- import com.sun.org.apache.xml.internal.security.transforms.TransformationException;
- import com.sun.org.apache.xml.internal.security.transforms.Transforms;
-@@ -56,7 +56,7 @@
- * @throws TransformationException
- *
- */
-- protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input)
-+ protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input, Transform _transformObject)
- throws TransformationException {
-
- Object exArgs[] = { implementedTransformURI };
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXSLT.java b/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXSLT.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXSLT.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXSLT.java
-@@ -2,9 +2,8 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
-- * Copyright 1999-2004 The Apache Software Foundation.
-+ * Copyright 1999-2007 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
-@@ -21,14 +20,12 @@
- */
- package com.sun.org.apache.xml.internal.security.transforms.implementations;
-
--
--
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.io.OutputStream;
-+import java.lang.reflect.Method;
-
--import javax.xml.XMLConstants;
- import javax.xml.transform.Source;
- import javax.xml.transform.Transformer;
- import javax.xml.transform.TransformerConfigurationException;
-@@ -40,13 +37,13 @@
-
- import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
- import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
-+import com.sun.org.apache.xml.internal.security.transforms.Transform;
- import com.sun.org.apache.xml.internal.security.transforms.TransformSpi;
- import com.sun.org.apache.xml.internal.security.transforms.TransformationException;
- import com.sun.org.apache.xml.internal.security.transforms.Transforms;
- import com.sun.org.apache.xml.internal.security.utils.XMLUtils;
- import org.w3c.dom.Element;
-
--
- /**
- * Class TransformXSLT
- *
-@@ -65,6 +62,17 @@
- static final String defaultXSLTSpecNSprefix = "xslt";
- static final String XSLTSTYLESHEET = "stylesheet";
-
-+ // check for secure processing feature
-+ private static Class xClass = null;
-+ static {
-+ try {
-+ xClass = Class.forName("javax.xml.XMLConstants");
-+ } catch (Exception e) {}
-+ }
-+
-+ static java.util.logging.Logger log =
-+ java.util.logging.Logger.getLogger(
-+ TransformXSLT.class.getName());
-
- /**
- * Method engineGetURI
-@@ -83,16 +91,22 @@
- * @throws IOException
- * @throws TransformationException
- */
-- protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input)
-+ protected XMLSignatureInput enginePerformTransform
-+ (XMLSignatureInput input, Transform _transformObject)
- throws IOException,
- TransformationException {
-- return enginePerformTransform(input,null);
-+ return enginePerformTransform(input, null, _transformObject);
- }
-- protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input,OutputStream baos)
-+
-+ protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input,OutputStream baos, Transform _transformObject)
- throws IOException,
- TransformationException {
-+ if (xClass == null) {
-+ Object exArgs[] = { "SECURE_PROCESSING_FEATURE not supported" };
-+ throw new TransformationException("generic.EmptyMessage", exArgs);
-+ }
- try {
-- Element transformElement = this._transformObject.getElement();
-+ Element transformElement = _transformObject.getElement();
-
- Element _xsltElement =
- XMLUtils.selectNode(transformElement.getFirstChild(),
-@@ -105,8 +119,10 @@
- }
-
- TransformerFactory tFactory = TransformerFactory.newInstance();
-+ Class c = tFactory.getClass();
-+ Method m = c.getMethod("setFeature", new Class[] {String.class, boolean.class});
- // Process XSLT stylesheets in a secure manner
-- tFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
-+ m.invoke(tFactory, new Object[] {"http://javax.xml.XMLConstants/feature/secure-processing", Boolean.TRUE});
-
- /*
- * This transform requires an octet stream as input. If the actual
-@@ -139,12 +155,25 @@
- }
-
- Transformer transformer = tFactory.newTransformer(stylesheet);
-+
-+ // Force Xalan to use \n as line separator on all OSes. This
-+ // avoids OS specific signature validation failures due to line
-+ // separator differences in the transformed output. Unfortunately,
-+ // this is not a standard JAXP property so will not work with non-Xalan
-+ // implementations.
-+ try {
-+ transformer.setOutputProperty
-+ ("{http://xml.apache.org/xalan}line-separator", "\n");
-+ } catch (Exception e) {
-+ log.log(java.util.logging.Level.WARNING, "Unable to set Xalan line-separator property: "
-+ + e.getMessage());
-+ }
-+
- if (baos==null) {
-- ByteArrayOutputStream baos1 = new ByteArrayOutputStream();
-- StreamResult outputTarget = new StreamResult(baos1);
-- transformer.transform(xmlSource, outputTarget);
-- return new XMLSignatureInput(baos1.toByteArray());
--
-+ ByteArrayOutputStream baos1 = new ByteArrayOutputStream();
-+ StreamResult outputTarget = new StreamResult(baos1);
-+ transformer.transform(xmlSource, outputTarget);
-+ return new XMLSignatureInput(baos1.toByteArray());
- }
- StreamResult outputTarget = new StreamResult(baos);
-
-@@ -164,6 +193,18 @@
- Object exArgs[] = { ex.getMessage() };
-
- throw new TransformationException("generic.EmptyMessage", exArgs, ex);
-+ } catch (NoSuchMethodException ex) {
-+ Object exArgs[] = { ex.getMessage() };
-+
-+ throw new TransformationException("generic.EmptyMessage", exArgs, ex);
-+ } catch (IllegalAccessException ex) {
-+ Object exArgs[] = { ex.getMessage() };
-+
-+ throw new TransformationException("generic.EmptyMessage", exArgs, ex);
-+ } catch (java.lang.reflect.InvocationTargetException ex) {
-+ Object exArgs[] = { ex.getMessage() };
-+
-+ throw new TransformationException("generic.EmptyMessage", exArgs, ex);
- }
- }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/params/XPath2FilterContainer.java b/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/params/XPath2FilterContainer.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/params/XPath2FilterContainer.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/params/XPath2FilterContainer.java
-@@ -26,6 +26,7 @@
- import com.sun.org.apache.xml.internal.security.transforms.TransformParam;
- import com.sun.org.apache.xml.internal.security.utils.ElementProxy;
- import com.sun.org.apache.xml.internal.security.utils.HelperNodeList;
-+import com.sun.org.apache.xml.internal.security.utils.XMLUtils;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.w3c.dom.Node;
-@@ -36,7 +37,7 @@
- * Implements the parameters for the <A
- * HREF="http://www.w3.org/TR/xmldsig-filter2/">XPath Filter v2.0</A>.
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- * @see <A HREF="http://www.w3.org/TR/xmldsig-filter2/">XPath Filter v2.0 (TR)</A>
- * @see <A HREF="http://www.w3.org/Signature/Drafts/xmldsig-xfilter2/">XPath Filter v2.0 (editors copy)</A>
- */
-@@ -188,7 +189,7 @@
-
- HelperNodeList nl = new HelperNodeList();
-
-- nl.appendChild(doc.createTextNode("\n"));
-+ XMLUtils.addReturnToElement(doc, nl);
-
- for (int i = 0; i < params.length; i++) {
- String type = params[i][0];
-@@ -207,7 +208,7 @@
- XPath2FilterContainer c = new XPath2FilterContainer(doc, xpath, type);
-
- nl.appendChild(c.getElement());
-- nl.appendChild(doc.createTextNode("\n"));
-+ XMLUtils.addReturnToElement(doc, nl);
- }
-
- return nl;
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/params/XPath2FilterContainer04.java b/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/params/XPath2FilterContainer04.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/params/XPath2FilterContainer04.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/params/XPath2FilterContainer04.java
-@@ -25,6 +25,7 @@
- import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
- import com.sun.org.apache.xml.internal.security.transforms.TransformParam;
- import com.sun.org.apache.xml.internal.security.utils.ElementProxy;
-+import com.sun.org.apache.xml.internal.security.utils.XMLUtils;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.w3c.dom.Node;
-@@ -35,7 +36,7 @@
- * Implements the parameters for the <A
- * HREF="http://www.w3.org/TR/xmldsig-filter2/">XPath Filter v2.0</A>.
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- * @see <A HREF="http://www.w3.org/TR/xmldsig-filter2/">XPath Filter v2.0 (TR)</A>
- * @see <A HREF="http://www.w3.org/Signature/Drafts/xmldsig-xfilter2/">XPath Filter v2.0 (editors copy)</A>
- */
-@@ -87,8 +88,9 @@
-
- if ((xpath2filter.length() > 2)
- && (!Character.isWhitespace(xpath2filter.charAt(0)))) {
-- this._constructionElement.appendChild(doc.createTextNode("\n"
-- + xpath2filter + "\n"));
-+ XMLUtils.addReturnToElement(this._constructionElement);
-+ this._constructionElement.appendChild(doc.createTextNode(xpath2filter));
-+ XMLUtils.addReturnToElement(this._constructionElement);
- } else {
- this._constructionElement
- .appendChild(doc.createTextNode(xpath2filter));
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/params/XPathFilterCHGPContainer.java b/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/params/XPathFilterCHGPContainer.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/params/XPathFilterCHGPContainer.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/params/XPathFilterCHGPContainer.java
-@@ -36,7 +36,7 @@
- * Implements the parameters for a custom Transform which has a better performance
- * thatn the xfilter2.
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class XPathFilterCHGPContainer extends ElementProxy
- implements TransformParam {
-@@ -104,7 +104,7 @@
- includeButSearchElem
- .appendChild(this._doc
- .createTextNode(indentXPathText(includeButSearch)));
-- this._constructionElement.appendChild(doc.createTextNode("\n"));
-+ XMLUtils.addReturnToElement(this._constructionElement);
- this._constructionElement.appendChild(includeButSearchElem);
- }
-
-@@ -118,7 +118,7 @@
- excludeButSearchElem
- .appendChild(this._doc
- .createTextNode(indentXPathText(excludeButSearch)));
-- this._constructionElement.appendChild(doc.createTextNode("\n"));
-+ XMLUtils.addReturnToElement(this._constructionElement);
- this._constructionElement.appendChild(excludeButSearchElem);
- }
-
-@@ -129,11 +129,11 @@
-
- excludeElem
- .appendChild(this._doc.createTextNode(indentXPathText(exclude)));
-- this._constructionElement.appendChild(doc.createTextNode("\n"));
-+ XMLUtils.addReturnToElement(this._constructionElement);
- this._constructionElement.appendChild(excludeElem);
- }
-
-- this._constructionElement.appendChild(doc.createTextNode("\n"));
-+ XMLUtils.addReturnToElement(this._constructionElement);
- }
-
- /**
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/Base64.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/Base64.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/Base64.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/Base64.java
-@@ -20,24 +20,17 @@
- */
- package com.sun.org.apache.xml.internal.security.utils;
-
--
--
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
--import java.io.StringReader;
- import java.math.BigInteger;
-
--import javax.xml.parsers.DocumentBuilder;
--import javax.xml.parsers.DocumentBuilderFactory;
--
- import com.sun.org.apache.xml.internal.security.exceptions.Base64DecodingException;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.w3c.dom.Node;
- import org.w3c.dom.Text;
--import org.xml.sax.InputSource;
-
-
- /**
-@@ -53,17 +46,10 @@
- */
- public class Base64 {
-
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(Base64.class.getName());
--
-
- /** Field BASE64DEFAULTLENGTH */
- public static final int BASE64DEFAULTLENGTH = 76;
-
-- /** Field _base64length */
-- static int _base64length = Base64.BASE64DEFAULTLENGTH;
--
- private Base64() {
- // we don't allow instantiation
- }
-@@ -79,7 +65,7 @@
- * @param bitlen <code>int<code> the desired length in bits of the representation
- * @return a byte array with <code>bitlen</code> bits of <code>big</code>
- */
-- static byte[] getBytes(BigInteger big, int bitlen) {
-+ static final byte[] getBytes(BigInteger big, int bitlen) {
-
- //round bitlen
- bitlen = ((bitlen + 7) >> 3) << 3;
-@@ -121,7 +107,7 @@
- * @param big
- * @return String with Base64 encoding
- */
-- public static String encode(BigInteger big) {
-+ public static final String encode(BigInteger big) {
- return encode(getBytes(big, big.bitLength()));
- }
-
-@@ -136,7 +122,7 @@
- * @param bitlen <code>int<code> the desired length in bits of the representation
- * @return a byte array with <code>bitlen</code> bits of <code>big</code>
- */
-- public static byte[] encode(BigInteger big, int bitlen) {
-+ public static final byte[] encode(BigInteger big, int bitlen) {
-
- //round bitlen
- bitlen = ((bitlen + 7) >> 3) << 3;
-@@ -179,7 +165,7 @@
- * @return the biginter obtained from the node
- * @throws Base64DecodingException
- */
-- public static BigInteger decodeBigIntegerFromElement(Element element) throws Base64DecodingException
-+ public static final BigInteger decodeBigIntegerFromElement(Element element) throws Base64DecodingException
- {
- return new BigInteger(1, Base64.decode(element));
- }
-@@ -191,7 +177,7 @@
- * @return the biginter obtained from the text node
- * @throws Base64DecodingException
- */
-- public static BigInteger decodeBigIntegerFromText(Text text) throws Base64DecodingException
-+ public static final BigInteger decodeBigIntegerFromText(Text text) throws Base64DecodingException
- {
- return new BigInteger(1, Base64.decode(text.getData()));
- }
-@@ -203,7 +189,7 @@
- * @param element
- * @param biginteger
- */
-- public static void fillElementWithBigInteger(Element element,
-+ public static final void fillElementWithBigInteger(Element element,
- BigInteger biginteger) {
-
- String encodedInt = encode(biginteger);
-@@ -229,7 +215,7 @@
- * $todo$ not tested yet
- * @throws Base64DecodingException
- */
-- public static byte[] decode(Element element) throws Base64DecodingException {
-+ public static final byte[] decode(Element element) throws Base64DecodingException {
-
- Node sibling = element.getFirstChild();
- StringBuffer sb = new StringBuffer();
-@@ -255,7 +241,7 @@
- * @return an Element with the base64 encoded in the text.
- *
- */
-- public static Element encodeToElement(Document doc, String localName,
-+ public static final Element encodeToElement(Document doc, String localName,
- byte[] bytes) {
-
- Element el = XMLUtils.createElementInSignatureSpace(doc, localName);
-@@ -275,20 +261,23 @@
- * @throws Base64DecodingException
- *
- */
-- public static byte[] decode(byte[] base64) throws Base64DecodingException {
-- return decodeInternal(base64);
-+ public final static byte[] decode(byte[] base64) throws Base64DecodingException {
-+ return decodeInternal(base64, -1);
- }
-
-
-
- /**
-- * Encode a byte array and fold lines at the standard 76th character.
-+ * Encode a byte array and fold lines at the standard 76th character unless
-+ * ignore line breaks property is set.
- *
- * @param binaryData <code>byte[]<code> to be base64 encoded
- * @return the <code>String<code> with encoded data
- */
-- public static String encode(byte[] binaryData) {
-- return encode(binaryData,BASE64DEFAULTLENGTH);
-+ public static final String encode(byte[] binaryData) {
-+ return XMLUtils.ignoreLineBreaks()
-+ ? encode(binaryData, Integer.MAX_VALUE)
-+ : encode(binaryData, BASE64DEFAULTLENGTH);
- }
-
- /**
-@@ -302,7 +291,7 @@
- * @throws IOException
- * @throws Base64DecodingException
- */
-- public static byte[] decode(BufferedReader reader)
-+ public final static byte[] decode(BufferedReader reader)
- throws IOException, Base64DecodingException {
-
- UnsyncByteArrayOutputStream baos = new UnsyncByteArrayOutputStream();
-@@ -317,28 +306,6 @@
- return baos.toByteArray();
- }
-
-- /**
-- * Method main
-- *
-- *
-- * @param args
-- *
-- * @throws Exception
-- */
-- public static void main(String[] args) throws Exception {
--
-- DocumentBuilderFactory docBuilderFactory =
-- DocumentBuilderFactory.newInstance();
-- DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
-- String testString1 =
-- "<container><base64 value=\"Should be 'Hallo'\">SGFsbG8=</base64></container>";
-- InputSource inputSource = new InputSource(new StringReader(testString1));
-- Document doc = docBuilder.parse(inputSource);
-- Element base64Elem =
-- (Element) doc.getDocumentElement().getChildNodes().item(0);
--
-- System.out.println(new String(decode(base64Elem)));
-- }
- static private final int BASELENGTH = 255;
- static private final int LOOKUPLENGTH = 64;
- static private final int TWENTYFOURBITGROUP = 24;
-@@ -347,7 +314,6 @@
- static private final int FOURBYTE = 4;
- static private final int SIGN = -128;
- static private final char PAD = '=';
-- static private final boolean fDebug = false;
- static final private byte [] base64Alphabet = new byte[BASELENGTH];
- static final private char [] lookUpBase64Alphabet = new char[LOOKUPLENGTH];
-
-@@ -406,7 +372,7 @@
- * @param length <code>int<code> length of wrapped lines; No wrapping if less than 4.
- * @return a <code>String</code> with encoded data
- */
-- public static String encode(byte[] binaryData,int length) {
-+ public static final String encode(byte[] binaryData,int length) {
-
- if (length<4) {
- length=Integer.MAX_VALUE;
-@@ -434,9 +400,7 @@
- int encodedIndex = 0;
- int dataIndex = 0;
- int i = 0;
-- if (fDebug) {
-- System.out.println("number of triplets = " + numberTriplets );
-- }
-+
-
- for (int line = 0; line < numberLines; line++) {
- for (int quartet = 0; quartet < 19; quartet++) {
-@@ -444,9 +408,6 @@
- b2 = binaryData[dataIndex++];
- b3 = binaryData[dataIndex++];
-
-- if (fDebug) {
-- System.out.println( "b1= " + b1 +", b2= " + b2 + ", b3= " + b3 );
-- }
-
- l = (byte)(b2 & 0x0f);
- k = (byte)(b1 & 0x03);
-@@ -456,11 +417,6 @@
- byte val2 = ((b2 & SIGN)==0)?(byte)(b2>>4):(byte)((b2)>>4^0xf0);
- byte val3 = ((b3 & SIGN)==0)?(byte)(b3>>6):(byte)((b3)>>6^0xfc);
-
-- if (fDebug) {
-- System.out.println( "val2 = " + val2 );
-- System.out.println( "k4 = " + (k<<4));
-- System.out.println( "vak = " + (val2 | (k<<4)));
-- }
-
- encodedData[encodedIndex++] = lookUpBase64Alphabet[ val1 ];
- encodedData[encodedIndex++] = lookUpBase64Alphabet[ val2 | ( k<<4 )];
-@@ -477,9 +433,6 @@
- b2 = binaryData[dataIndex++];
- b3 = binaryData[dataIndex++];
-
-- if (fDebug) {
-- System.out.println( "b1= " + b1 +", b2= " + b2 + ", b3= " + b3 );
-- }
-
- l = (byte)(b2 & 0x0f);
- k = (byte)(b1 & 0x03);
-@@ -489,11 +442,6 @@
- byte val2 = ((b2 & SIGN)==0)?(byte)(b2>>4):(byte)((b2)>>4^0xf0);
- byte val3 = ((b3 & SIGN)==0)?(byte)(b3>>6):(byte)((b3)>>6^0xfc);
-
-- if (fDebug) {
-- System.out.println( "val2 = " + val2 );
-- System.out.println( "k4 = " + (k<<4));
-- System.out.println( "vak = " + (val2 | (k<<4)));
-- }
-
- encodedData[encodedIndex++] = lookUpBase64Alphabet[ val1 ];
- encodedData[encodedIndex++] = lookUpBase64Alphabet[ val2 | ( k<<4 )];
-@@ -505,11 +453,7 @@
- if (fewerThan24bits == EIGHTBIT) {
- b1 = binaryData[dataIndex];
- k = (byte) ( b1 &0x03 );
-- if (fDebug) {
-- System.out.println("b1=" + b1);
-- System.out.println("b1<<2 = " + (b1>>2) );
-- }
-- byte val1 = ((b1 & SIGN)==0)?(byte)(b1>>2):(byte)((b1)>>2^0xc0);
-+ byte val1 = ((b1 & SIGN)==0)?(byte)(b1>>2):(byte)((b1)>>2^0xc0);
- encodedData[encodedIndex++] = lookUpBase64Alphabet[ val1 ];
- encodedData[encodedIndex++] = lookUpBase64Alphabet[ k<<4 ];
- encodedData[encodedIndex++] = PAD;
-@@ -534,23 +478,38 @@
- return new String(encodedData);
- }
-
-- /**
-- * Decodes Base64 data into octects
-- *
-- * @param encoded Byte array containing Base64 data
-- * @return Array containind decoded data.
-- * @throws Base64DecodingException
-- */
-- public final static byte[] decode(String encoded) throws Base64DecodingException {
-+ /**
-+ * Decodes Base64 data into octects
-+ *
-+ * @param encoded String containing base64 encoded data
-+ * @return byte array containing the decoded data
-+ * @throws Base64DecodingException if there is a problem decoding the data
-+ */
-+ public final static byte[] decode(String encoded) throws Base64DecodingException {
-
-- if (encoded == null)
-- return null;
-+ if (encoded == null)
-+ return null;
-+ byte []bytes=new byte[encoded.length()];
-+ int len=getBytesInternal(encoded, bytes);
-+ return decodeInternal(bytes, len);
-+ }
-
-- return decodeInternal(encoded.getBytes());
-- }
-- protected final static byte[] decodeInternal(byte[] base64Data) throws Base64DecodingException {
-+ protected static final int getBytesInternal(String s,byte[] result) {
-+ int length=s.length();
-+
-+ int newSize=0;
-+ for (int i = 0; i < length; i++) {
-+ byte dataS=(byte)s.charAt(i);
-+ if (!isWhiteSpace(dataS))
-+ result[newSize++] = dataS;
-+ }
-+ return newSize;
-+
-+ }
-+ protected final static byte[] decodeInternal(byte[] base64Data, int len) throws Base64DecodingException {
- // remove white spaces
-- int len = removeWhiteSpace(base64Data);
-+ if (len==-1)
-+ len = removeWhiteSpace(base64Data);
-
- if (len%FOURBYTE != 0) {
- throw new Base64DecodingException("decoding.divisible.four");
-@@ -629,7 +588,20 @@
- }
- return decodedData;
- }
--
-+ /**
-+ * Decodes Base64 data into outputstream
-+ *
-+ * @param base64Data String containing Base64 data
-+ * @param os the outputstream
-+ * @throws IOException
-+ * @throws Base64DecodingException
-+ */
-+ public final static void decode(String base64Data,
-+ OutputStream os) throws Base64DecodingException, IOException {
-+ byte[] bytes=new byte[base64Data.length()];
-+ int len=getBytesInternal(base64Data, bytes);
-+ decode(bytes,os,len);
-+ }
- /**
- * Decodes Base64 data into outputstream
- *
-@@ -640,8 +612,14 @@
- */
- public final static void decode(byte[] base64Data,
- OutputStream os) throws Base64DecodingException, IOException {
-- // remove white spaces
-- int len = removeWhiteSpace(base64Data);
-+ decode(base64Data,os,-1);
-+ }
-+ protected final static void decode(byte[] base64Data,
-+ OutputStream os,int len) throws Base64DecodingException, IOException {
-+
-+ // remove white spaces
-+ if (len==-1)
-+ len = removeWhiteSpace(base64Data);
-
- if (len%FOURBYTE != 0) {
- throw new Base64DecodingException("decoding.divisible.four");
-@@ -798,7 +776,7 @@
- * @param data the byte array of base64 data (with WS)
- * @return the new length
- */
-- protected static int removeWhiteSpace(byte[] data) {
-+ protected static final int removeWhiteSpace(byte[] data) {
- if (data == null)
- return 0;
-
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/CachedXPathAPIHolder.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/CachedXPathAPIHolder.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/CachedXPathAPIHolder.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/CachedXPathAPIHolder.java
-@@ -23,35 +23,33 @@
- import com.sun.org.apache.xpath.internal.CachedXPathAPI;
- import org.w3c.dom.Document;
-
--
- /**
- * @author Raul Benito
- */
- public class CachedXPathAPIHolder {
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(CachedXPathAPIHolder.class.getName());
-
- static ThreadLocal local=new ThreadLocal();
- static ThreadLocal localDoc=new ThreadLocal();
-
-- /**
-- * Sets the doc for the xpath transformation. Resets the cache if needed
-- * @param doc
-- */
-- public static void setDoc(Document doc) {
-- if (localDoc.get()!=doc) {
-+ /**
-+ * Sets the doc for the xpath transformation. Resets the cache if needed
-+ * @param doc
-+ */
-+ public static void setDoc(Document doc) {
-+ if (localDoc.get()!=doc) {
- CachedXPathAPI cx=(CachedXPathAPI)local.get();
- if (cx==null) {
-- cx=new CachedXPathAPI();
-- local.set(cx);
-- localDoc.set(doc);
-- return;
-+ cx=new CachedXPathAPI();
-+ local.set(cx);
-+ localDoc.set(doc);
-+ return;
- }
- //Different docs reset.
- cx.getXPathContext().reset();
- localDoc.set(doc);
- }
-- }
-+ }
-+
- /**
- * @return the cachexpathapi for this thread
- */
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/CachedXPathFuncHereAPI.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/CachedXPathFuncHereAPI.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/CachedXPathFuncHereAPI.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/CachedXPathFuncHereAPI.java
-@@ -45,7 +45,7 @@
-
- /**
- *
-- * @author $Author: dims $
-+ * @author $Author: mullan $
- */
- public class CachedXPathFuncHereAPI {
-
-@@ -291,6 +291,7 @@
- .getDocumentElement()
- : namespaceNode);
-
-+ // only check if string points to different object (for performance)
- if (str!=xpathStr) {
- if (str.indexOf("here()")>0) {
- _context.reset();
-@@ -340,6 +341,7 @@
- // XPathContext should be done away with.)
- // Create the XPath object.
- //String str = CachedXPathFuncHereAPI.getStrFromNode(xpathnode);
-+ // only check if string points to different object (for performance)
- if (str!=xpathStr) {
- if (str.indexOf("here()")>0) {
- _context.reset();
-@@ -421,7 +423,7 @@
-
- private static void fixupFunctionTable() {
- boolean installed = false;
-- if (log.isLoggable(java.util.logging.Level.INFO)) log.log(java.util.logging.Level.INFO, "Registering Here function");
-+ log.log(java.util.logging.Level.INFO, "Registering Here function");
- /**
- * Try to register our here() implementation as internal function.
- */
-@@ -434,7 +436,7 @@
- installed = true;
- }
- } catch (Throwable t) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Error installing function using the static installFunction method", t);
-+ log.log(java.util.logging.Level.FINE, "Error installing function using the static installFunction method", t);
- }
- if(!installed) {
- try {
-@@ -445,15 +447,15 @@
- installFunction.invoke(_funcTable, params);
- installed = true;
- } catch (Throwable t) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Error installing function using the static installFunction method", t);
-+ log.log(java.util.logging.Level.FINE, "Error installing function using the static installFunction method", t);
- }
- }
-- if (true) {
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
- if (installed) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Registered class " + FuncHere.class.getName()
-+ log.log(java.util.logging.Level.FINE, "Registered class " + FuncHere.class.getName()
- + " for XPath function 'here()' function in internal table");
- } else {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Unable to register class " + FuncHere.class.getName()
-+ log.log(java.util.logging.Level.FINE, "Unable to register class " + FuncHere.class.getName()
- + " for XPath function 'here()' function in internal table");
- }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/ClassLoaderUtils.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/ClassLoaderUtils.java
-new file mode 100644
---- /dev/null
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/ClassLoaderUtils.java
-@@ -0,0 +1,277 @@
-+/*
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
-+ */
-+/**
-+ * Licensed to the Apache Software Foundation (ASF) under one
-+ * or more contributor license agreements. See the NOTICE file
-+ * distributed with this work for additional information
-+ * regarding copyright ownership. The ASF licenses this file
-+ * to you under the Apache License, Version 2.0 (the
-+ * "License"); you may not use this file except in compliance
-+ * with the License. You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing,
-+ * software distributed under the License is distributed on an
-+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-+ * KIND, either express or implied. See the License for the
-+ * specific language governing permissions and limitations
-+ * under the License.
-+ */
-+
-+package com.sun.org.apache.xml.internal.security.utils;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.net.URL;
-+import java.util.ArrayList;
-+import java.util.Enumeration;
-+import java.util.List;
-+
-+/**
-+ * This class is extremely useful for loading resources and classes in a fault
-+ * tolerant manner that works across different applications servers. Do not
-+ * touch this unless you're a grizzled classloading guru veteran who is going to
-+ * verify any change on 6 different application servers.
-+ */
-+public final class ClassLoaderUtils {
-+
-+ /** {@link org.apache.commons.logging} logging facility */
-+ private static final java.util.logging.Logger log =
-+ java.util.logging.Logger.getLogger(ClassLoaderUtils.class.getName());
-+
-+ private ClassLoaderUtils() {
-+ }
-+
-+ /**
-+ * Load a given resource. <p/> This method will try to load the resource
-+ * using the following methods (in order):
-+ * <ul>
-+ * <li>From Thread.currentThread().getContextClassLoader()
-+ * <li>From ClassLoaderUtil.class.getClassLoader()
-+ * <li>callingClass.getClassLoader()
-+ * </ul>
-+ *
-+ * @param resourceName The name of the resource to load
-+ * @param callingClass The Class object of the calling object
-+ */
-+ public static URL getResource(String resourceName, Class<?> callingClass) {
-+ URL url = Thread.currentThread().getContextClassLoader().getResource(resourceName);
-+ if (url == null && resourceName.startsWith("/")) {
-+ //certain classloaders need it without the leading /
-+ url =
-+ Thread.currentThread().getContextClassLoader().getResource(
-+ resourceName.substring(1)
-+ );
-+ }
-+
-+ ClassLoader cluClassloader = ClassLoaderUtils.class.getClassLoader();
-+ if (cluClassloader == null) {
-+ cluClassloader = ClassLoader.getSystemClassLoader();
-+ }
-+ if (url == null) {
-+ url = cluClassloader.getResource(resourceName);
-+ }
-+ if (url == null && resourceName.startsWith("/")) {
-+ //certain classloaders need it without the leading /
-+ url = cluClassloader.getResource(resourceName.substring(1));
-+ }
-+
-+ if (url == null) {
-+ ClassLoader cl = callingClass.getClassLoader();
-+
-+ if (cl != null) {
-+ url = cl.getResource(resourceName);
-+ }
-+ }
-+
-+ if (url == null) {
-+ url = callingClass.getResource(resourceName);
-+ }
-+
-+ if ((url == null) && (resourceName != null) && (resourceName.charAt(0) != '/')) {
-+ return getResource('/' + resourceName, callingClass);
-+ }
-+
-+ return url;
-+ }
-+
-+ /**
-+ * Load a given resources. <p/> This method will try to load the resources
-+ * using the following methods (in order):
-+ * <ul>
-+ * <li>From Thread.currentThread().getContextClassLoader()
-+ * <li>From ClassLoaderUtil.class.getClassLoader()
-+ * <li>callingClass.getClassLoader()
-+ * </ul>
-+ *
-+ * @param resourceName The name of the resource to load
-+ * @param callingClass The Class object of the calling object
-+ */
-+ public static List<URL> getResources(String resourceName, Class<?> callingClass) {
-+ List<URL> ret = new ArrayList<URL>();
-+ Enumeration<URL> urls = new Enumeration<URL>() {
-+ public boolean hasMoreElements() {
-+ return false;
-+ }
-+ public URL nextElement() {
-+ return null;
-+ }
-+
-+ };
-+ try {
-+ urls = Thread.currentThread().getContextClassLoader().getResources(resourceName);
-+ } catch (IOException e) {
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, e.getMessage(), e);
-+ }
-+ //ignore
-+ }
-+ if (!urls.hasMoreElements() && resourceName.startsWith("/")) {
-+ //certain classloaders need it without the leading /
-+ try {
-+ urls =
-+ Thread.currentThread().getContextClassLoader().getResources(
-+ resourceName.substring(1)
-+ );
-+ } catch (IOException e) {
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, e.getMessage(), e);
-+ }
-+ // ignore
-+ }
-+ }
-+
-+ ClassLoader cluClassloader = ClassLoaderUtils.class.getClassLoader();
-+ if (cluClassloader == null) {
-+ cluClassloader = ClassLoader.getSystemClassLoader();
-+ }
-+ if (!urls.hasMoreElements()) {
-+ try {
-+ urls = cluClassloader.getResources(resourceName);
-+ } catch (IOException e) {
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, e.getMessage(), e);
-+ }
-+ // ignore
-+ }
-+ }
-+ if (!urls.hasMoreElements() && resourceName.startsWith("/")) {
-+ //certain classloaders need it without the leading /
-+ try {
-+ urls = cluClassloader.getResources(resourceName.substring(1));
-+ } catch (IOException e) {
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, e.getMessage(), e);
-+ }
-+ // ignore
-+ }
-+ }
-+
-+ if (!urls.hasMoreElements()) {
-+ ClassLoader cl = callingClass.getClassLoader();
-+
-+ if (cl != null) {
-+ try {
-+ urls = cl.getResources(resourceName);
-+ } catch (IOException e) {
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, e.getMessage(), e);
-+ }
-+ // ignore
-+ }
-+ }
-+ }
-+
-+ if (!urls.hasMoreElements()) {
-+ URL url = callingClass.getResource(resourceName);
-+ if (url != null) {
-+ ret.add(url);
-+ }
-+ }
-+ while (urls.hasMoreElements()) {
-+ ret.add(urls.nextElement());
-+ }
-+
-+
-+ if (ret.isEmpty() && (resourceName != null) && (resourceName.charAt(0) != '/')) {
-+ return getResources('/' + resourceName, callingClass);
-+ }
-+ return ret;
-+ }
-+
-+
-+ /**
-+ * This is a convenience method to load a resource as a stream. <p/> The
-+ * algorithm used to find the resource is given in getResource()
-+ *
-+ * @param resourceName The name of the resource to load
-+ * @param callingClass The Class object of the calling object
-+ */
-+ public static InputStream getResourceAsStream(String resourceName, Class<?> callingClass) {
-+ URL url = getResource(resourceName, callingClass);
-+
-+ try {
-+ return (url != null) ? url.openStream() : null;
-+ } catch (IOException e) {
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, e.getMessage(), e);
-+ }
-+ return null;
-+ }
-+ }
-+
-+ /**
-+ * Load a class with a given name. <p/> It will try to load the class in the
-+ * following order:
-+ * <ul>
-+ * <li>From Thread.currentThread().getContextClassLoader()
-+ * <li>Using the basic Class.forName()
-+ * <li>From ClassLoaderUtil.class.getClassLoader()
-+ * <li>From the callingClass.getClassLoader()
-+ * </ul>
-+ *
-+ * @param className The name of the class to load
-+ * @param callingClass The Class object of the calling object
-+ * @throws ClassNotFoundException If the class cannot be found anywhere.
-+ */
-+ public static Class<?> loadClass(String className, Class<?> callingClass)
-+ throws ClassNotFoundException {
-+ try {
-+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
-+
-+ if (cl != null) {
-+ return cl.loadClass(className);
-+ }
-+ } catch (ClassNotFoundException e) {
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, e.getMessage(), e);
-+ }
-+ //ignore
-+ }
-+ return loadClass2(className, callingClass);
-+ }
-+
-+ private static Class<?> loadClass2(String className, Class<?> callingClass)
-+ throws ClassNotFoundException {
-+ try {
-+ return Class.forName(className);
-+ } catch (ClassNotFoundException ex) {
-+ try {
-+ if (ClassLoaderUtils.class.getClassLoader() != null) {
-+ return ClassLoaderUtils.class.getClassLoader().loadClass(className);
-+ }
-+ } catch (ClassNotFoundException exc) {
-+ if (callingClass != null && callingClass.getClassLoader() != null) {
-+ return callingClass.getClassLoader().loadClass(className);
-+ }
-+ }
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, ex.getMessage(), ex);
-+ }
-+ throw ex;
-+ }
-+ }
-+}
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/Constants.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/Constants.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/Constants.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/Constants.java
-@@ -20,11 +20,8 @@
- */
- package com.sun.org.apache.xml.internal.security.utils;
-
--
--
- import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
-
--
- /**
- * Provides all constants and some translation functions for i18n.
- *
-@@ -32,14 +29,10 @@
- * <A HREF="http://www.w3.org/TR/xmldsig-core/#sec-TransformAlg">XML
- * Signature specification</A>.
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class Constants {
-
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(Constants.class.getName());
--
- /** Field configurationFile */
- public static final String configurationFile = "data/websig.conf";
-
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/DigesterOutputStream.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/DigesterOutputStream.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/DigesterOutputStream.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/DigesterOutputStream.java
-@@ -3,7 +3,7 @@
- * DO NOT REMOVE OR ALTER!
- */
- /*
-- * Copyright 1999-2004 The Apache Software Foundation.
-+ * Copyright 1999-2008 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
-@@ -29,34 +29,40 @@
- *
- */
- public class DigesterOutputStream extends ByteArrayOutputStream {
-- final static byte none[]="error".getBytes();
- final MessageDigestAlgorithm mda;
-- /**
-- * @param mda
-- */
-- public DigesterOutputStream(MessageDigestAlgorithm mda) {
-+ static java.util.logging.Logger log =
-+ java.util.logging.Logger.getLogger
-+ (DigesterOutputStream.class.getName());
-+
-+ /**
-+ * @param mda
-+ */
-+ public DigesterOutputStream(MessageDigestAlgorithm mda) {
- this.mda=mda;
-- }
-+ }
-
- /** @inheritDoc */
-- public byte[] toByteArray() {
-- return none;
-- }
--
-- /** @inheritDoc */
-- public void write(byte[] arg0) {
-- mda.update(arg0);
-- }
-+ public void write(byte[] arg0) {
-+ write(arg0, 0, arg0.length);
-+ }
-
- /** @inheritDoc */
-- public void write(int arg0) {
-- mda.update((byte)arg0);
-- }
-+ public void write(int arg0) {
-+ mda.update((byte)arg0);
-+ }
-
- /** @inheritDoc */
-- public void write(byte[] arg0, int arg1, int arg2) {
-- mda.update(arg0, arg1, arg2);
-+ public void write(byte[] arg0, int arg1, int arg2) {
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, "Pre-digested input:");
-+ StringBuffer sb = new StringBuffer(arg2);
-+ for (int i=arg1; i<(arg1+arg2); i++) {
-+ sb.append((char) arg0[i]);
-+ }
-+ log.log(java.util.logging.Level.FINE, sb.toString());
- }
-+ mda.update(arg0, arg1, arg2);
-+ }
-
- /**
- * @return the digest value
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/ElementChecker.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/ElementChecker.java
-new file mode 100644
---- /dev/null
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/ElementChecker.java
-@@ -0,0 +1,17 @@
-+package com.sun.org.apache.xml.internal.security.utils;
-+
-+import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
-+import org.w3c.dom.Element;
-+import org.w3c.dom.Node;
-+
-+public interface ElementChecker {
-+ /**
-+ * Check that the elemnt is the one expect
-+ *
-+ * @throws XMLSecurityException
-+ */
-+ public void guaranteeThatElementInCorrectSpace(ElementProxy expected, Element actual)
-+ throws XMLSecurityException;
-+
-+ public boolean isNamespaceElement(Node el, String type, String ns);
-+}
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/ElementCheckerImpl.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/ElementCheckerImpl.java
-new file mode 100644
---- /dev/null
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/ElementCheckerImpl.java
-@@ -0,0 +1,60 @@
-+package com.sun.org.apache.xml.internal.security.utils;
-+
-+import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
-+import org.w3c.dom.Element;
-+import org.w3c.dom.Node;
-+
-+public abstract class ElementCheckerImpl implements ElementChecker {
-+ public boolean isNamespaceElement(Node el, String type, String ns) {
-+ if ((el == null) ||
-+ ns!=el.getNamespaceURI() || !el.getLocalName().equals(type)){
-+ return false;
-+ }
-+
-+ return true;
-+ }
-+ /** A checker for DOM that interns NS */
-+ public static class InternedNsChecker extends ElementCheckerImpl{
-+ public void guaranteeThatElementInCorrectSpace(ElementProxy expected,
-+ Element actual) throws XMLSecurityException {
-+
-+ String localnameSHOULDBE = expected.getBaseLocalName();
-+ String namespaceSHOULDBE = expected.getBaseNamespace();
-+
-+ String localnameIS = actual.getLocalName();
-+ String namespaceIS = actual.getNamespaceURI();
-+ if ((namespaceSHOULDBE!=namespaceIS) ||
-+ !localnameSHOULDBE.equals(localnameIS) ) {
-+ Object exArgs[] = { namespaceIS +":"+ localnameIS,
-+ namespaceSHOULDBE +":"+ localnameSHOULDBE};
-+ throw new XMLSecurityException("xml.WrongElement", exArgs);
-+ }
-+ }
-+ }
-+
-+ /** A checker for DOM that interns NS */
-+ public static class FullChecker extends ElementCheckerImpl {
-+ public void guaranteeThatElementInCorrectSpace(ElementProxy expected,
-+ Element actual) throws XMLSecurityException {
-+
-+ String localnameSHOULDBE = expected.getBaseLocalName();
-+ String namespaceSHOULDBE = expected.getBaseNamespace();
-+
-+ String localnameIS = actual.getLocalName();
-+ String namespaceIS = actual.getNamespaceURI();
-+ if ((!namespaceSHOULDBE.equals(namespaceIS)) ||
-+ !localnameSHOULDBE.equals(localnameIS) ) {
-+ Object exArgs[] = { namespaceIS +":"+ localnameIS,
-+ namespaceSHOULDBE +":"+ localnameSHOULDBE};
-+ throw new XMLSecurityException("xml.WrongElement", exArgs);
-+ }
-+ }
-+ }
-+
-+ /** An empty checker if schema checking is used */
-+ public static class EmptyChecker extends ElementCheckerImpl {
-+ public void guaranteeThatElementInCorrectSpace(ElementProxy expected,
-+ Element actual) throws XMLSecurityException {
-+ }
-+ }
-+}
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/ElementProxy.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/ElementProxy.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/ElementProxy.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/ElementProxy.java
-@@ -3,7 +3,7 @@
- * DO NOT REMOVE OR ALTER!
- */
- /*
-- * Copyright 1999-2004 The Apache Software Foundation.
-+ * Copyright 1999-2008 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
-@@ -46,26 +46,6 @@
- /** {@link java.util.logging} logging facility */
- static java.util.logging.Logger log =
- java.util.logging.Logger.getLogger(ElementProxy.class.getName());
-- //J-
-- /** The element has been created by the code **/
-- public static final int MODE_CREATE = 0;
-- /** The element has been readed from a DOM tree by the code **/
-- public static final int MODE_PROCESS = 1;
-- /** The element isn't known if it is readen or created **/
-- public static final int MODE_UNKNOWN = 2;
--
-- /** The element is going to be signed **/
-- public static final int MODE_SIGN = MODE_CREATE;
-- /** The element is going to be verified **/
-- public static final int MODE_VERIFY = MODE_PROCESS;
--
-- /** The element is going to be encrypted **/
-- public static final int MODE_ENCRYPT = MODE_CREATE;
-- /** The element is going to be decrypted **/
-- public static final int MODE_DECRYPT = MODE_PROCESS;
--
-- protected int _state = MODE_UNKNOWN;
-- //J+
-
- /**
- * Returns the namespace of the Elements of the sub-class.
-@@ -95,11 +75,6 @@
- *
- */
- public ElementProxy() {
--
-- this._doc = null;
-- this._state = ElementProxy.MODE_UNKNOWN;
-- this._baseURI = null;
-- this._constructionElement = null;
- }
-
- /**
-@@ -108,18 +83,43 @@
- * @param doc
- */
- public ElementProxy(Document doc) {
--
-- this();
--
- if (doc == null) {
- throw new RuntimeException("Document is null");
- }
-
- this._doc = doc;
-- this._state = ElementProxy.MODE_CREATE;
-- this._constructionElement = ElementProxy.createElementForFamily(this._doc,
-- this.getBaseNamespace(), this.getBaseLocalName());
-+ this._constructionElement = createElementForFamilyLocal(this._doc,
-+ this.getBaseNamespace(), this.getBaseLocalName());
- }
-+ protected Element createElementForFamilyLocal(Document doc, String namespace,
-+ String localName) {
-+ Element result = null;
-+ if (namespace == null) {
-+ result = doc.createElementNS(null, localName);
-+ } else {
-+ String baseName=this.getBaseNamespace();
-+ String prefix=ElementProxy.getDefaultPrefix(baseName);
-+ if ((prefix == null) || (prefix.length() == 0)) {
-+ result = doc.createElementNS(namespace, localName);
-+
-+ result.setAttributeNS(Constants.NamespaceSpecNS, "xmlns",
-+ namespace);
-+ } else {
-+ String tagName=null;
-+ String defaultPrefixNaming=ElementProxy.getDefaultPrefixBindings(baseName);
-+ StringBuffer sb=new StringBuffer(prefix);
-+ sb.append(':');
-+ sb.append(localName);
-+ tagName=sb.toString();
-+ result = doc.createElementNS(namespace, tagName );
-+
-+ result.setAttributeNS(Constants.NamespaceSpecNS, defaultPrefixNaming,
-+ namespace);
-+ }
-+ }
-+ return result;
-+}
-+
-
- /**
- * This method creates an Element in a given namespace with a given localname.
-@@ -150,7 +150,7 @@
- } else {
- result = doc.createElementNS(namespace, prefix + ":" + localName);
-
-- result.setAttributeNS(Constants.NamespaceSpecNS, "xmlns:" + prefix,
-+ result.setAttributeNS(Constants.NamespaceSpecNS, ElementProxy.getDefaultPrefixBindings(namespace),
- namespace);
- }
- }
-@@ -171,15 +171,12 @@
- if (element == null) {
- throw new XMLSecurityException("ElementProxy.nullElement");
- }
-- if (true) {
-- }
-
-- if (true) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "setElement(" + element.getTagName() + ", \"" + BaseURI + "\"");
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, "setElement(" + element.getTagName() + ", \"" + BaseURI + "\"");
- }
-
- this._doc = element.getOwnerDocument();
-- this._state = ElementProxy.MODE_PROCESS;
- this._constructionElement = element;
- this._baseURI = BaseURI;
- }
-@@ -193,20 +190,16 @@
- */
- public ElementProxy(Element element, String BaseURI)
- throws XMLSecurityException {
--
-- this();
--
- if (element == null) {
- throw new XMLSecurityException("ElementProxy.nullElement");
- }
-
-- if (true) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "setElement(\"" + element.getTagName() + "\", \"" + BaseURI
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, "setElement(\"" + element.getTagName() + "\", \"" + BaseURI
- + "\")");
- }
-
- this._doc = element.getOwnerDocument();
-- this._state = ElementProxy.MODE_PROCESS;
- this._constructionElement = element;
- this._baseURI = BaseURI;
-
-@@ -256,25 +249,18 @@
- return this._baseURI;
- }
-
-+ static ElementChecker checker = new ElementCheckerImpl.InternedNsChecker();
-+
- /**
- * Method guaranteeThatElementInCorrectSpace
- *
- * @throws XMLSecurityException
- */
-- public void guaranteeThatElementInCorrectSpace()
-+ void guaranteeThatElementInCorrectSpace()
- throws XMLSecurityException {
-
-- String localnameSHOULDBE = this.getBaseLocalName();
-- String namespaceSHOULDBE = this.getBaseNamespace();
-+ checker.guaranteeThatElementInCorrectSpace(this,this._constructionElement);
-
-- String localnameIS = this._constructionElement.getLocalName();
-- String namespaceIS = this._constructionElement.getNamespaceURI();
-- if ( !localnameSHOULDBE.equals(localnameIS) ||
-- !namespaceSHOULDBE.equals(namespaceIS)) {
-- Object exArgs[] = { namespaceIS +":"+ localnameIS,
-- namespaceSHOULDBE +":"+ localnameSHOULDBE};
-- throw new XMLSecurityException("xml.WrongElement", exArgs);
-- }
- }
-
- /**
-@@ -308,7 +294,9 @@
- Element e = Base64.encodeToElement(this._doc, localname, bytes);
-
- this._constructionElement.appendChild(e);
-- this._constructionElement.appendChild(this._doc.createTextNode("\n"));
-+ if (!XMLUtils.ignoreLineBreaks()) {
-+ this._constructionElement.appendChild(this._doc.createTextNode("\n"));
-+ }
- }
- }
-
-@@ -336,8 +324,9 @@
- public void addBase64Text(byte[] bytes) {
-
- if (bytes != null) {
-- Text t = this._doc.createTextNode("\n" + Base64.encode(bytes) + "\n");
--
-+ Text t = XMLUtils.ignoreLineBreaks()
-+ ? this._doc.createTextNode(Base64.encode(bytes))
-+ : this._doc.createTextNode("\n" + Base64.encode(bytes) + "\n");
- this._constructionElement.appendChild(t);
- }
- }
-@@ -375,7 +364,7 @@
-
- /**
- * Method getBytesFromChildElement
-- *
-+ * @deprecated
- * @param localname
- * @param namespace
- * @return the bytes
-@@ -416,28 +405,24 @@
- /**
- * Method getBytesFromTextChild
- *
-- * @return The base64 bytes from the first text child of this element
-+ * @return The base64 bytes from the text children of this element
- * @throws XMLSecurityException
- */
- public byte[] getBytesFromTextChild() throws XMLSecurityException {
--
-- Text t = (Text)this._constructionElement.getFirstChild();
--
--
-- return Base64.decode(t.getData());
-+ return Base64.decode
-+ (XMLUtils.getFullTextChildrenFromElement(this._constructionElement));
- }
-
- /**
- * Method getTextFromTextChild
- *
-- * @return the Text obtained concatening all the the text nodes of this element
-+ * @return the Text obtained by concatenating all the text nodes of this
-+ * element
- */
- public String getTextFromTextChild() {
- return XMLUtils.getFullTextChildrenFromElement(this._constructionElement);
- }
-
--
--
- /**
- * Method length
- *
-@@ -451,7 +436,7 @@
- while (sibling!=null) {
- if (localname.equals(sibling.getLocalName())
- &&
-- namespace.equals(sibling.getNamespaceURI())) {
-+ namespace==sibling.getNamespaceURI() ) {
- number++;
- }
- sibling=sibling.getNextSibling();
-@@ -509,39 +494,49 @@
-
- /** Field _prefixMappings */
- static HashMap _prefixMappings = new HashMap();
-+ static HashMap _prefixMappingsBindings = new HashMap();
-
-- /**
-- * Method setDefaultPrefix
-- *
-- * @param namespace
-- * @param prefix
-- * @throws XMLSecurityException
-- */
-- public static void setDefaultPrefix(String namespace, String prefix)
-- throws XMLSecurityException {
-+ /**
-+ * Method setDefaultPrefix
-+ *
-+ * @param namespace
-+ * @param prefix
-+ * @throws XMLSecurityException
-+ */
-+ public static void setDefaultPrefix(String namespace, String prefix)
-+ throws XMLSecurityException {
-
- if (ElementProxy._prefixMappings.containsValue(prefix)) {
-
-- Object storedNamespace=ElementProxy._prefixMappings.get(namespace);
-- if (!storedNamespace.equals(prefix)) {
-+ Object storedNamespace=ElementProxy._prefixMappings.get(namespace);
-+ if (!storedNamespace.equals(prefix)) {
- Object exArgs[] = { prefix, namespace, storedNamespace };
-
- throw new XMLSecurityException("prefix.AlreadyAssigned", exArgs);
-- }
-- }
-- ElementProxy._prefixMappings.put(namespace, prefix);
-+ }
-+ }
-+ if (Constants.SignatureSpecNS.equals(namespace)) {
-+ XMLUtils.dsPrefix=prefix;
-+ }
-+ ElementProxy._prefixMappings.put(namespace, prefix.intern());
-+ if (prefix.length() == 0) {
-+ ElementProxy._prefixMappingsBindings.put(namespace, "xmlns");
-+ } else {
-+ ElementProxy._prefixMappingsBindings.put(namespace, ("xmlns:"+prefix).intern());
-+ }
- }
-
-- /**
-- * Method getDefaultPrefix
-- *
-- * @param namespace
-- * @return the default prefix bind to this element.
-- */
-- public static String getDefaultPrefix(String namespace) {
-+ /**
-+ * Method getDefaultPrefix
-+ *
-+ * @param namespace
-+ * @return the default prefix bind to this element.
-+ */
-+ public static String getDefaultPrefix(String namespace) {
-+ return (String) ElementProxy._prefixMappings.get(namespace);
-+ }
-
-- String prefix = (String) ElementProxy._prefixMappings.get(namespace);
--
-- return prefix;
-- }
-+ public static String getDefaultPrefixBindings(String namespace) {
-+ return (String) ElementProxy._prefixMappingsBindings.get(namespace);
-+ }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/EncryptionConstants.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/EncryptionConstants.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/EncryptionConstants.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/EncryptionConstants.java
-@@ -27,7 +27,7 @@
-
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class EncryptionConstants {
- //J-
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/EncryptionElementProxy.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/EncryptionElementProxy.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/EncryptionElementProxy.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/EncryptionElementProxy.java
-@@ -31,7 +31,7 @@
- * This is the base object for all objects which map directly to an Element from
- * the xenc spec.
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public abstract class EncryptionElementProxy extends ElementProxy {
-
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/HelperNodeList.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/HelperNodeList.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/HelperNodeList.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/HelperNodeList.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -21,30 +20,21 @@
- */
- package com.sun.org.apache.xml.internal.security.utils;
-
--
--
- import java.util.ArrayList;
-
- import org.w3c.dom.Document;
- import org.w3c.dom.Node;
- import org.w3c.dom.NodeList;
-
--
- /**
- *
-- *
- * @author Christian Geuer-Pollmann
- *
- */
- public class HelperNodeList implements NodeList {
-
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(HelperNodeList.class.getName());
--
- /** Field nodes */
- ArrayList nodes = new ArrayList(20);
--
- boolean _allNodesMustHaveSameParent = false;
-
- /**
-@@ -70,7 +60,7 @@
- */
- public Node item(int index) {
-
-- // if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "item(" + index + ") of " + this.getLength() + " nodes");
-+ // log.log(java.util.logging.Level.FINE, "item(" + index + ") of " + this.getLength() + " nodes");
-
- return (Node) nodes.get(index);
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/I18n.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/I18n.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/I18n.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/I18n.java
-@@ -20,18 +20,13 @@
- */
- package com.sun.org.apache.xml.internal.security.utils;
-
--
--
- import java.text.MessageFormat;
- import java.util.Locale;
- import java.util.ResourceBundle;
-
--
- /**
- * The Internationalization (I18N) pack.
- *
-- *
-- *
- * @author Christian Geuer-Pollmann
- */
- public class I18n {
-@@ -50,8 +45,8 @@
-
- /** Field resourceBundle */
- private static ResourceBundle resourceBundle =
-- ResourceBundle.getBundle
-- (Constants.exceptionMessagesResourceBundleBase, Locale.US);
-+ ResourceBundle.getBundle
-+ (Constants.exceptionMessagesResourceBundleBase, Locale.US);
-
- /** Field alreadyInitialized */
- private static boolean alreadyInitialized = false;
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/IdResolver.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/IdResolver.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/IdResolver.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/IdResolver.java
-@@ -20,18 +20,16 @@
- */
- package com.sun.org.apache.xml.internal.security.utils;
-
--
--
-+import java.lang.ref.WeakReference;
-+import java.util.Arrays;
-+import java.util.WeakHashMap;
-
- import org.w3c.dom.Attr;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
-+import org.w3c.dom.NamedNodeMap;
- import org.w3c.dom.Node;
-
--import java.util.Arrays;
--import java.util.WeakHashMap;
--import java.lang.ref.WeakReference;
--
-
- /**
- * Purpose of this class is to enable the XML Parser to keep track of ID
-@@ -45,193 +43,242 @@
- * ID: We know that all <CODE>@Id</CODE> attributes in an Element from the XML
- * Signature namespace are of type <CODE>ID</CODE>.
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- * @see <A HREF="http://www.xml.com/lpt/a/2001/11/07/id.html">"Identity Crisis" on xml.com</A>
- */
- public class IdResolver {
-
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-+ /** {@link java.util.logging} logging facility */
-+ private static java.util.logging.Logger log =
- java.util.logging.Logger.getLogger(IdResolver.class.getName());
-
-- static WeakHashMap docMap = new WeakHashMap();
-+ private static WeakHashMap docMap = new WeakHashMap();
-
-- /**
-- * Constructor IdResolver
-- *
-- */
-- private IdResolver() {
-+ /**
-+ * Constructor IdResolver
-+ *
-+ */
-+ private IdResolver() {
-+ // we don't allow instantiation
-+ }
-
-- // we don't allow instantiation
-- }
-+ /**
-+ * Method registerElementById
-+ *
-+ * @param element the element to register
-+ * @param idValue the value of the ID attribute
-+ */
-+ public static void registerElementById(Element element, String idValue) {
-+ Document doc = element.getOwnerDocument();
-+ WeakHashMap elementMap = (WeakHashMap) docMap.get(doc);
-+ if(elementMap == null) {
-+ elementMap = new WeakHashMap();
-+ docMap.put(doc, elementMap);
-+ }
-+ elementMap.put(idValue, new WeakReference(element));
-+ }
-
-- /**
-- * Method registerElementById
-- *
-- * @param element
-- * @param idValue
-- */
-- public static void registerElementById(Element element, String idValue) {
-- Document doc = element.getOwnerDocument();
-- WeakHashMap elementMap = (WeakHashMap) docMap.get(doc);
-- if(elementMap == null) {
-- elementMap = new WeakHashMap();
-- docMap.put(doc, elementMap);
-- }
-- elementMap.put(idValue, new WeakReference(element));
-- }
-+ /**
-+ * Method registerElementById
-+ *
-+ * @param element the element to register
-+ * @param id the ID attribute
-+ */
-+ public static void registerElementById(Element element, Attr id) {
-+ IdResolver.registerElementById(element, id.getNodeValue());
-+ }
-
-- /**
-- * Method registerElementById
-- *
-- * @param element
-- * @param id
-- */
-- public static void registerElementById(Element element, Attr id) {
-- IdResolver.registerElementById(element, id.getNodeValue());
-- }
-+ /**
-+ * Method getElementById
-+ *
-+ * @param doc the document
-+ * @param id the value of the ID
-+ * @return the element obtained by the id, or null if it is not found.
-+ */
-+ public static Element getElementById(Document doc, String id) {
-
-- /**
-- * Method getElementById
-- *
-- * @param doc
-- * @param id
-- * @return the element obtained by the Id, or null if it is not found.
-- */
-- public static Element getElementById(Document doc, String id) {
-+ Element result = IdResolver.getElementByIdType(doc, id);
-
-- Element result = null;
--
-- result = IdResolver.getElementByIdType(doc, id);
--
-- if (result != null) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE,
-+ if (result != null) {
-+ log.log(java.util.logging.Level.FINE,
- "I could find an Element using the simple getElementByIdType method: "
- + result.getTagName());
-
-- return result;
-- }
-+ return result;
-+ }
-
-- result = IdResolver.getElementByIdUsingDOM(doc, id);
-+ result = IdResolver.getElementByIdUsingDOM(doc, id);
-
-- if (result != null) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE,
-+ if (result != null) {
-+ log.log(java.util.logging.Level.FINE,
- "I could find an Element using the simple getElementByIdUsingDOM method: "
- + result.getTagName());
-
-- return result;
-- }
-- // this must be done so that Xalan can catch ALL namespaces
-- //XMLUtils.circumventBug2650(doc);
-- result = IdResolver.getElementBySearching(doc, id);
-+ return result;
-+ }
-+ // this must be done so that Xalan can catch ALL namespaces
-+ //XMLUtils.circumventBug2650(doc);
-+ result = IdResolver.getElementBySearching(doc, id);
-
-- if (result != null) {
-- IdResolver.registerElementById(result, id);
-+ if (result != null) {
-+ IdResolver.registerElementById(result, id);
-
-- return result;
-- }
-+ return result;
-+ }
-
-- return null;
-- }
-+ return null;
-+ }
-
-
- /**
- * Method getElementByIdUsingDOM
- *
-- * @param doc
-- * @param id
-- * @return the element obtained by the Id, or null if it is not found.
-+ * @param doc the document
-+ * @param id the value of the ID
-+ * @return the element obtained by the id, or null if it is not found.
- */
- private static Element getElementByIdUsingDOM(Document doc, String id) {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "getElementByIdUsingDOM() Search for ID " + id);
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "getElementByIdUsingDOM() Search for ID " + id);
- return doc.getElementById(id);
- }
-
-- /**
-- * Method getElementByIdType
-- *
-- * @param doc
-- * @param id
-- * @return the element obtained by the Id, or null if it is not found.
-- */
-- private static Element getElementByIdType(Document doc, String id) {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "getElementByIdType() Search for ID " + id);
-- WeakHashMap elementMap = (WeakHashMap) docMap.get(doc);
-- if (elementMap != null) {
-- WeakReference weakReference = (WeakReference) elementMap.get(id);
-- if (weakReference != null)
-- {
-+ /**
-+ * Method getElementByIdType
-+ *
-+ * @param doc the document
-+ * @param id the value of the ID
-+ * @return the element obtained by the id, or null if it is not found.
-+ */
-+ private static Element getElementByIdType(Document doc, String id) {
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "getElementByIdType() Search for ID " + id);
-+ WeakHashMap elementMap = (WeakHashMap) docMap.get(doc);
-+ if (elementMap != null) {
-+ WeakReference weakReference = (WeakReference) elementMap.get(id);
-+ if (weakReference != null) {
- return (Element) weakReference.get();
-- }
-- }
-- return null;
-- }
-+ }
-+ }
-+ return null;
-+ }
-
-+ private static java.util.List names;
-+ private static int namesLength;
-+ static {
-+ String namespaces[]={
-+ Constants.SignatureSpecNS,
-+ EncryptionConstants.EncryptionSpecNS,
-+ "http://schemas.xmlsoap.org/soap/security/2000-12",
-+ "http://www.w3.org/2002/03/xkms#",
-+ "urn:oasis:names:tc:SAML:1.0:assertion",
-+ "urn:oasis:names:tc:SAML:1.0:protocol"
-+ };
-+ names = Arrays.asList(namespaces);
-+ namesLength = names.size();
-+ }
-
-- static java.util.List names;
-- static {
-- String namespaces[]={ Constants.SignatureSpecNS,
-- EncryptionConstants.EncryptionSpecNS,
-- "http://schemas.xmlsoap.org/soap/security/2000-12",
-- "http://www.w3.org/2002/03/xkms#"
-- };
-- names=Arrays.asList(namespaces);
-- }
-
-+ private static Element getElementBySearching(Node root,String id) {
-+ Element []els=new Element[namesLength + 1];
-+ getEl(root,id,els);
-+ for (int i=0;i<els.length;i++) {
-+ if (els[i]!=null) {
-+ return els[i];
-+ }
-+ }
-+ return null;
-+ }
-
-- private static Element getElementBySearching(Node root,String id) {
-- Element []els=new Element[5];
-- getElementBySearching(root,id,els);
-- for (int i=0;i<els.length;i++) {
-- if (els[i]!=null) {
-- return els[i];
-- }
-- }
-- return null;
-+ private static int getEl(Node currentNode,String id,Element []els) {
-+ Node sibling=null;
-+ Node parentNode=null;
-+ do {
-+ switch (currentNode.getNodeType()) {
-+ case Node.DOCUMENT_FRAGMENT_NODE :
-+ case Node.DOCUMENT_NODE :
-+ sibling= currentNode.getFirstChild();
-+ break;
-
-- }
-- private static int getElementBySearching(Node root,String id,Element []els) {
-- switch (root.getNodeType()) {
-- case Node.ELEMENT_NODE:
-- Element el=(Element)root;
-- if (el.hasAttributes()) {
-- int index=names.indexOf(el.getNamespaceURI());
-- if (index<0) {
-- index=4;
-- }
-- if (el.getAttribute("Id").equals(id)) {
-- els[index]=el;
-- if (index==0) {
-- return 1;
-- }
-- } else if ( el.getAttribute("id").equals(id) ) {
-- if (index!=2) {
-- index=4;
-- }
-- els[index]=el;
-- } else if ( el.getAttribute("ID").equals(id) ) {
-- if (index!=3) {
-- index=4;
-- }
-- els[index]=el;
-- } else if ((index==3)&&(
-- el.getAttribute("OriginalRequestID").equals(id) ||
-- el.getAttribute("RequestID").equals(id) ||
-- el.getAttribute("ResponseID" ).equals(id))) {
-- els[3]=el;
-- }
-- }
-- case Node.DOCUMENT_NODE:
-- Node sibling=root.getFirstChild();
-- while (sibling!=null) {
-- if (getElementBySearching(sibling,id,els)==1)
-+
-+ case Node.ELEMENT_NODE :
-+ Element currentElement = (Element) currentNode;
-+ if (isElement(currentElement, id, els)==1)
-+ return 1;
-+ sibling= currentNode.getFirstChild();
-+ if (sibling==null) {
-+ if (parentNode != null) {
-+ sibling= currentNode.getNextSibling();
-+ }
-+ } else {
-+ parentNode=currentElement;
-+ }
-+ break;
-+ } while (sibling==null && parentNode!=null) {
-+ sibling=parentNode.getNextSibling();
-+ parentNode=parentNode.getParentNode();
-+ if (parentNode != null && parentNode.getNodeType() != Node.ELEMENT_NODE) {
-+ parentNode=null;
-+ }
-+ }
-+ if (sibling==null)
-+ return 1;
-+ currentNode=sibling;
-+ sibling=currentNode.getNextSibling();
-+ } while(true);
-+
-+ }
-+ public static int isElement(Element el, String id,Element[] els) {
-+ if (!el.hasAttributes()) {
-+ return 0;
-+ }
-+ NamedNodeMap ns=el.getAttributes();
-+ int elementIndex=names.indexOf(el.getNamespaceURI());
-+ elementIndex=(elementIndex<0) ? namesLength : elementIndex;
-+ for (int length=ns.getLength(), i=0; i<length; i++) {
-+ Attr n=(Attr)ns.item(i);
-+ String s=n.getNamespaceURI();
-+
-+ int index=s==null ? elementIndex : names.indexOf(n.getNamespaceURI());
-+ index=(index<0) ? namesLength : index;
-+ String name=n.getLocalName();
-+ if (name.length()>2)
-+ continue;
-+ String value=n.getNodeValue();
-+ if (name.charAt(0)=='I') {
-+ char ch=name.charAt(1);
-+ if (ch=='d' && value.equals(id)) {
-+ els[index]=el;
-+ if (index==0) {
- return 1;
-- sibling=sibling.getNextSibling();
-+ }
-+ } else if (ch=='D' &&value.endsWith(id)) {
-+ if (index!=3) {
-+ index=namesLength;
-+ }
-+ els[index]=el;
- }
-- }
-- return 0;
-- }
--
-+ } else if ( "id".equals(name) && value.equals(id) ) {
-+ if (index!=2) {
-+ index=namesLength;
-+ }
-+ els[index]=el;
-+ }
-+ }
-+ //For an element namespace search for importants
-+ if ((elementIndex==3)&&(
-+ el.getAttribute("OriginalRequestID").equals(id) ||
-+ el.getAttribute("RequestID").equals(id) ||
-+ el.getAttribute("ResponseID").equals(id))) {
-+ els[3]=el;
-+ } else if ((elementIndex==4)&&(
-+ el.getAttribute("AssertionID").equals(id))) {
-+ els[4]=el;
-+ } else if ((elementIndex==5)&&(
-+ el.getAttribute("RequestID").equals(id) ||
-+ el.getAttribute("ResponseID").equals(id))) {
-+ els[5]=el;
-+ }
-+ return 0;
-+ }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/JavaUtils.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/JavaUtils.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/JavaUtils.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/JavaUtils.java
-@@ -20,8 +20,6 @@
- */
- package com.sun.org.apache.xml.internal.security.utils;
-
--
--
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
-@@ -29,99 +27,105 @@
- import java.io.IOException;
- import java.io.InputStream;
-
--
- /**
- * A collection of different, general-purpose methods for JAVA-specific things
- * @author Christian Geuer-Pollmann
-- *
- */
- public class JavaUtils {
-
-- /** {@link java.util.logging} logging facility */
-+ /** {@link java.util.logging} logging facility */
- static java.util.logging.Logger log =
- java.util.logging.Logger.getLogger(JavaUtils.class.getName());
-
-- private JavaUtils() {
-- // we don't allow instantiation
-- }
-- /**
-- * Method getBytesFromFile
-- *
-- * @param fileName
-- * @return the bytes readed from the file
-- *
-- * @throws FileNotFoundException
-- * @throws IOException
-- */
-- public static byte[] getBytesFromFile(String fileName)
-- throws FileNotFoundException, IOException {
-+ private JavaUtils() {
-+ // we don't allow instantiation
-+ }
-
-- byte refBytes[] = null;
-+ /**
-+ * Method getBytesFromFile
-+ *
-+ * @param fileName
-+ * @return the bytes readed from the file
-+ *
-+ * @throws FileNotFoundException
-+ * @throws IOException
-+ */
-+ public static byte[] getBytesFromFile(String fileName)
-+ throws FileNotFoundException, IOException {
-
-- {
-- FileInputStream fisRef = new FileInputStream(fileName);
-- UnsyncByteArrayOutputStream baos = new UnsyncByteArrayOutputStream();
-- byte buf[] = new byte[1024];
-- int len;
-+ byte refBytes[] = null;
-
-- while ((len = fisRef.read(buf)) > 0) {
-+ FileInputStream fisRef = new FileInputStream(fileName);
-+ try {
-+ UnsyncByteArrayOutputStream baos = new UnsyncByteArrayOutputStream();
-+ byte buf[] = new byte[1024];
-+ int len;
-+
-+ while ((len = fisRef.read(buf)) > 0) {
-+ baos.write(buf, 0, len);
-+ }
-+
-+ refBytes = baos.toByteArray();
-+ } finally {
-+ fisRef.close();
-+ }
-+
-+ return refBytes;
-+ }
-+
-+ /**
-+ * Method writeBytesToFilename
-+ *
-+ * @param filename
-+ * @param bytes
-+ */
-+ public static void writeBytesToFilename(String filename, byte[] bytes) {
-+
-+ FileOutputStream fos = null;
-+ try {
-+ if (filename != null && bytes != null) {
-+ File f = new File(filename);
-+
-+ fos = new FileOutputStream(f);
-+
-+ fos.write(bytes);
-+ fos.close();
-+ } else {
-+ log.log(java.util.logging.Level.FINE, "writeBytesToFilename got null byte[] pointed");
-+ }
-+ } catch (IOException ex) {
-+ if (fos != null) {
-+ try {
-+ fos.close();
-+ } catch (IOException ioe) {}
-+ }
-+ }
-+ }
-+
-+ /**
-+ * This method reads all bytes from the given InputStream till EOF and
-+ * returns them as a byte array.
-+ *
-+ * @param inputStream
-+ * @return the bytes readed from the stream
-+ *
-+ * @throws FileNotFoundException
-+ * @throws IOException
-+ */
-+ public static byte[] getBytesFromStream(InputStream inputStream)
-+ throws IOException {
-+
-+ byte refBytes[] = null;
-+
-+ UnsyncByteArrayOutputStream baos = new UnsyncByteArrayOutputStream();
-+ byte buf[] = new byte[1024];
-+ int len;
-+
-+ while ((len = inputStream.read(buf)) > 0) {
- baos.write(buf, 0, len);
-- }
-+ }
-
-- refBytes = baos.toByteArray();
-- }
--
-- return refBytes;
-- }
--
-- /**
-- * Method writeBytesToFilename
-- *
-- * @param filename
-- * @param bytes
-- */
-- public static void writeBytesToFilename(String filename, byte[] bytes) {
--
-- try {
-- if (filename != null && bytes != null) {
-- File f = new File(filename);
--
-- FileOutputStream fos = new FileOutputStream(f);
--
-- fos.write(bytes);
-- fos.close();
-- } else {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "writeBytesToFilename got null byte[] pointed");
-- }
-- } catch (Exception ex) {}
-- }
--
-- /**
-- * This method reads all bytes from the given InputStream till EOF and returns
-- * them as a byte array.
-- *
-- * @param inputStream
-- * @return the bytes readed from the stream
-- *
-- * @throws FileNotFoundException
-- * @throws IOException
-- */
-- public static byte[] getBytesFromStream(InputStream inputStream) throws IOException {
--
-- byte refBytes[] = null;
--
-- {
-- UnsyncByteArrayOutputStream baos = new UnsyncByteArrayOutputStream();
-- byte buf[] = new byte[1024];
-- int len;
--
-- while ((len = inputStream.read(buf)) > 0) {
-- baos.write(buf, 0, len);
-- }
--
-- refBytes = baos.toByteArray();
-- }
--
-- return refBytes;
-- }
-+ refBytes = baos.toByteArray();
-+ return refBytes;
-+ }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/RFC2253Parser.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/RFC2253Parser.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/RFC2253Parser.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/RFC2253Parser.java
-@@ -28,7 +28,7 @@
-
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class RFC2253Parser {
-
-@@ -158,7 +158,13 @@
- return str;
- }
- String attrType = normalizeAT(str.substring(0, i));
-- String attrValue = normalizeV(str.substring(i + 1));
-+ // only normalize if value is a String
-+ String attrValue = null;
-+ if (attrType.charAt(0) >= '0' && attrType.charAt(0) <= '9') {
-+ attrValue = str.substring(i + 1);
-+ } else {
-+ attrValue = normalizeV(str.substring(i + 1));
-+ }
-
- return attrType + "=" + attrValue;
-
-@@ -474,7 +480,7 @@
- static String trim(String str) {
-
- String trimed = str.trim();
-- int i = str.indexOf(trimed.substring(0)) + trimed.length();
-+ int i = str.indexOf(trimed) + trimed.length();
-
- if ((str.length() > i) && trimed.endsWith("\\")
- &&!trimed.endsWith("\\\\")) {
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/SignatureElementProxy.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/SignatureElementProxy.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/SignatureElementProxy.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/SignatureElementProxy.java
-@@ -30,19 +30,25 @@
- /**
- * Class SignatureElementProxy
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
-+ * @version $Revision: 1.5 $
- */
- public abstract class SignatureElementProxy extends ElementProxy {
--
-+ protected SignatureElementProxy() {
-+ };
- /**
- * Constructor SignatureElementProxy
- *
- * @param doc
- */
- public SignatureElementProxy(Document doc) {
-- super(doc);
-- //this._constructionElement.setAttributeNS(Constants.NamespaceSpecNS,"xmlns:ds",
-- // Constants.SignatureSpecNS);
-+ if (doc == null) {
-+ throw new RuntimeException("Document is null");
-+ }
-+
-+ this._doc = doc;
-+ this._constructionElement = XMLUtils.createElementInSignatureSpace(this._doc,
-+ this.getBaseLocalName());
- }
-
- /**
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/SignerOutputStream.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/SignerOutputStream.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/SignerOutputStream.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/SignerOutputStream.java
-@@ -3,7 +3,7 @@
- * DO NOT REMOVE OR ALTER!
- */
- /*
-- * Copyright 1999-2004 The Apache Software Foundation.
-+ * Copyright 1999-2008 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
-@@ -30,8 +30,11 @@
- *
- */
- public class SignerOutputStream extends ByteArrayOutputStream {
-- final static byte none[]="error".getBytes();
- final SignatureAlgorithm sa;
-+ static java.util.logging.Logger log =
-+ java.util.logging.Logger.getLogger
-+ (SignerOutputStream.class.getName());
-+
- /**
- * @param sa
- */
-@@ -40,21 +43,18 @@
- }
-
- /** @inheritDoc */
-- public byte[] toByteArray() {
-- return none;
-- }
--
-- /** @inheritDoc */
- public void write(byte[] arg0) {
-+ super.write(arg0, 0, arg0.length);
- try {
-- sa.update(arg0);
-- } catch (XMLSignatureException e) {
-+ sa.update(arg0);
-+ } catch (XMLSignatureException e) {
- throw new RuntimeException(""+e);
-- }
-+ }
- }
-
- /** @inheritDoc */
- public void write(int arg0) {
-+ super.write(arg0);
- try {
- sa.update((byte)arg0);
- } catch (XMLSignatureException e) {
-@@ -64,12 +64,19 @@
-
- /** @inheritDoc */
- public void write(byte[] arg0, int arg1, int arg2) {
-+ super.write(arg0, arg1, arg2);
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+ log.log(java.util.logging.Level.FINE, "Canonicalized SignedInfo:");
-+ StringBuffer sb = new StringBuffer(arg2);
-+ for (int i=arg1; i<(arg1+arg2); i++) {
-+ sb.append((char) arg0[i]);
-+ }
-+ log.log(java.util.logging.Level.FINE, sb.toString());
-+ }
- try {
- sa.update(arg0,arg1,arg2);
- } catch (XMLSignatureException e) {
- throw new RuntimeException(""+e);
- }
- }
--
--
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/UnsyncBufferedOutputStream.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/UnsyncBufferedOutputStream.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/UnsyncBufferedOutputStream.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/UnsyncBufferedOutputStream.java
-@@ -30,14 +30,21 @@
- */
- public class UnsyncBufferedOutputStream extends OutputStream {
- final OutputStream out;
-+
-+ final byte[] buf;
- static final int size=8*1024;
-- final byte[] buf=new byte[size];
-+ private static ThreadLocal bufCahce = new ThreadLocal() {
-+ protected synchronized Object initialValue() {
-+ return new byte[size];
-+ }
-+ };
- int pointer=0;
- /**
- * Creates a buffered output stream without synchronization
- * @param out the outputstream to buffer
- */
- public UnsyncBufferedOutputStream(OutputStream out) {
-+ buf=(byte[])bufCahce.get();
- this.out=out;
- }
-
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/UnsyncByteArrayOutputStream.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/UnsyncByteArrayOutputStream.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/UnsyncByteArrayOutputStream.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/UnsyncByteArrayOutputStream.java
-@@ -20,17 +20,25 @@
- */
- package com.sun.org.apache.xml.internal.security.utils;
-
--import java.io.ByteArrayOutputStream;
-+import java.io.OutputStream;
-
- /**
- * A simple Unsynced ByteArryOutputStream
- * @author raul
- *
- */
--public class UnsyncByteArrayOutputStream extends ByteArrayOutputStream {
-- int size=4*1024;
-- byte []buf=new byte[size];
-- int pos;
-+public class UnsyncByteArrayOutputStream extends OutputStream {
-+ private static ThreadLocal bufCahce = new ThreadLocal() {
-+ protected synchronized Object initialValue() {
-+ return new byte[8*1024];
-+ }
-+ };
-+ byte[] buf;
-+ int size=8*1024;//buf.length;
-+ int pos=0;
-+ public UnsyncByteArrayOutputStream() {
-+ buf=(byte[])bufCahce.get();
-+ }
- /** @inheritDoc */
- public void write(byte[] arg0) {
- int newPos=pos+arg0.length;
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/XMLUtils.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/XMLUtils.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/XMLUtils.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/XMLUtils.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -25,8 +24,12 @@
-
- import java.io.IOException;
- import java.io.OutputStream;
-+import java.security.AccessController;
-+import java.security.PrivilegedAction;
-+import java.util.HashMap;
- import java.util.HashSet;
- import java.util.Iterator;
-+import java.util.Map;
- import java.util.Set;
-
- import com.sun.org.apache.xml.internal.security.c14n.CanonicalizationException;
-@@ -49,6 +52,14 @@
- */
- public class XMLUtils {
-
-+ private static boolean ignoreLineBreaks =
-+ AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
-+ public Boolean run() {
-+ return Boolean.getBoolean
-+ ("com.sun.org.apache.xml.internal.security.ignoreLineBreaks");
-+ }
-+ });
-+
- /**
- * Constructor XMLUtils
- *
-@@ -57,7 +68,13 @@
-
- // we don't allow instantiation
- }
-+ public static Element getNextElement(Node el) {
-+ while ((el!=null) && (el.getNodeType()!=Node.ELEMENT_NODE)) {
-+ el=el.getNextSibling();
-+ }
-+ return (Element)el;
-
-+ }
-
- /**
- * @param rootNode
-@@ -212,6 +229,8 @@
- }
-
-
-+ static String dsPrefix=null;
-+ static Map namePrefixes=new HashMap();
- /**
- * Creates an Element in the XML Signature specification namespace.
- *
-@@ -226,28 +245,20 @@
- throw new RuntimeException("Document is null");
- }
-
-- String ds = Constants.getSignatureSpecNSprefix();
--
-- if ((ds == null) || (ds.length() == 0)) {
-- Element element = doc.createElementNS(Constants.SignatureSpecNS,
-- elementName);
--
-- element.setAttributeNS(Constants.NamespaceSpecNS, "xmlns",
-- Constants.SignatureSpecNS);
--
-- return element;
-+ if ((dsPrefix == null) || (dsPrefix.length() == 0)) {
-+ return doc.createElementNS(Constants.SignatureSpecNS, elementName);
- }
-- Element element = doc.createElementNS(Constants.SignatureSpecNS,
-- ds + ":" + elementName);
--
-- element.setAttributeNS(Constants.NamespaceSpecNS, "xmlns:" + ds,
-- Constants.SignatureSpecNS);
--
-- return element;
--
-+ String namePrefix=(String) namePrefixes.get(elementName);
-+ if (namePrefix==null) {
-+ StringBuffer tag=new StringBuffer(dsPrefix);
-+ tag.append(':');
-+ tag.append(elementName);
-+ namePrefix=tag.toString();
-+ namePrefixes.put(elementName,namePrefix);
-+ }
-+ return doc.createElementNS(Constants.SignatureSpecNS, namePrefix);
- }
-
--
- /**
- * Returns true if the element is in XML Signature namespace and the local
- * name equals the supplied one.
-@@ -258,17 +269,7 @@
- */
- public static boolean elementIsInSignatureSpace(Element element,
- String localName) {
--
-- if ((element == null) ||
-- !Constants.SignatureSpecNS.equals(element.getNamespaceURI()) ){
-- return false;
-- }
--
-- if (!element.getLocalName().equals(localName)) {
-- return false;
-- }
--
-- return true;
-+ return ElementProxy.checker.isNamespaceElement(element, localName, Constants.SignatureSpecNS);
- }
-
- /**
-@@ -281,18 +282,7 @@
- */
- public static boolean elementIsInEncryptionSpace(Element element,
- String localName) {
--
-- if ((element == null) ||
-- !EncryptionConstants.EncryptionSpecNS.equals(element.getNamespaceURI())
-- ){
-- return false;
-- }
--
-- if (!element.getLocalName().equals(localName)) {
-- return false;
-- }
--
-- return true;
-+ return ElementProxy.checker.isNamespaceElement(element, localName, EncryptionConstants.EncryptionSpecNS);
- }
-
- /**
-@@ -352,32 +342,28 @@
- + (npe == null ? "" : npe.getMessage()) + "\"");
- }
-
-+ /**
-+ * Method createDSctx
-+ *
-+ * @param doc
-+ * @param prefix
-+ * @param namespace
-+ * @return the element.
-+ */
-+ public static Element createDSctx(Document doc, String prefix,
-+ String namespace) {
-
-+ if ((prefix == null) || (prefix.trim().length() == 0)) {
-+ throw new IllegalArgumentException("You must supply a prefix");
-+ }
-
-- /**
-- * Method createDSctx
-- *
-- * @param doc
-- * @param prefix
-- * @param namespace
-- * @return the element.
-- */
-- public static Element createDSctx(Document doc, String prefix,
-- String namespace) {
-+ Element ctx = doc.createElementNS(null, "namespaceContext");
-
-- if ((prefix == null) || (prefix.trim().length() == 0)) {
-- throw new IllegalArgumentException("You must supply a prefix");
-- }
-+ ctx.setAttributeNS(Constants.NamespaceSpecNS, "xmlns:" + prefix.trim(),
-+ namespace);
-
-- Element ctx = doc.createElementNS(null, "namespaceContext");
--
-- ctx.setAttributeNS(Constants.NamespaceSpecNS, "xmlns:" + prefix.trim(),
-- namespace);
--
-- return ctx;
-- }
--
--
-+ return ctx;
-+ }
-
- /**
- * Method addReturnToElement
-@@ -386,9 +372,23 @@
- */
- public static void addReturnToElement(Element e) {
-
-- Document doc = e.getOwnerDocument();
-+ if (!ignoreLineBreaks) {
-+ Document doc = e.getOwnerDocument();
-+ e.appendChild(doc.createTextNode("\n"));
-+ }
-+ }
-
-- e.appendChild(doc.createTextNode("\n"));
-+ public static void addReturnToElement(Document doc, HelperNodeList nl) {
-+ if (!ignoreLineBreaks) {
-+ nl.appendChild(doc.createTextNode("\n"));
-+ }
-+ }
-+
-+ public static void addReturnBeforeChild(Element e, Node child) {
-+ if (!ignoreLineBreaks) {
-+ Document doc = e.getOwnerDocument();
-+ e.insertBefore(doc.createTextNode("\n"), child);
-+ }
- }
-
- /**
-@@ -470,7 +470,7 @@
-
- for (int i = 0; i < attributesLength; i++) {
- Attr currentAttr = (Attr) attributes.item(i);
-- if (!namespaceNs.equals(currentAttr.getNamespaceURI()))
-+ if (namespaceNs!=currentAttr.getNamespaceURI())
- continue;
- if (childElement.hasAttributeNS(namespaceNs,
- currentAttr.getLocalName())) {
-@@ -511,8 +511,7 @@
- */
- public static Element selectDsNode(Node sibling, String nodeName, int number) {
- while (sibling!=null) {
-- if (nodeName.equals(sibling.getLocalName())
-- && Constants.SignatureSpecNS.equals(sibling.getNamespaceURI())) {
-+ if (ElementProxy.checker.isNamespaceElement(sibling, nodeName, Constants.SignatureSpecNS )) {
- if (number==0){
- return (Element)sibling;
- }
-@@ -532,8 +531,7 @@
-
- public static Element selectXencNode(Node sibling, String nodeName, int number) {
- while (sibling!=null) {
-- if (nodeName.equals(sibling.getLocalName())
-- && EncryptionConstants.EncryptionSpecNS.equals(sibling.getNamespaceURI())) {
-+ if (ElementProxy.checker.isNamespaceElement(sibling, nodeName, EncryptionConstants.EncryptionSpecNS )) {
- if (number==0){
- return (Element)sibling;
- }
-@@ -591,8 +589,7 @@
- */
- public static Element selectNode(Node sibling, String uri,String nodeName, int number) {
- while (sibling!=null) {
-- if (nodeName.equals(sibling.getLocalName())
-- && uri.equals(sibling.getNamespaceURI())) {
-+ if (ElementProxy.checker.isNamespaceElement(sibling, nodeName, uri)) {
- if (number==0){
- return (Element)sibling;
- }
-@@ -611,7 +608,6 @@
- public static Element[] selectDsNodes(Node sibling,String nodeName) {
- return selectNodes(sibling,Constants.SignatureSpecNS,nodeName);
- }
--
- /**
- * @param sibling
- * @param uri
-@@ -624,8 +620,7 @@
- int curr=0;
- //List list=new ArrayList();
- while (sibling!=null) {
-- if (nodeName.equals(sibling.getLocalName())
-- && uri.equals(sibling.getNamespaceURI())) {
-+ if (ElementProxy.checker.isNamespaceElement(sibling, nodeName, uri)) {
- a[curr++]=(Element)sibling;
- if (size<=curr) {
- int cursize= size<<2;
-@@ -694,4 +689,8 @@
- }
- }
- }
-+
-+ public static boolean ignoreLineBreaks() {
-+ return ignoreLineBreaks;
-+ }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/XPathFuncHereAPI.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/XPathFuncHereAPI.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/XPathFuncHereAPI.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/XPathFuncHereAPI.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -53,7 +52,7 @@
- * XPaths using the low-level API, and then just use the XPaths
- * over and over.
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- * @see <a href="http://www.w3.org/TR/xpath">XPath Specification</a>
- */
- public class XPathFuncHereAPI {
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolver.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolver.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolver.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolver.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -21,8 +20,6 @@
- */
- package com.sun.org.apache.xml.internal.security.utils.resolver;
-
--
--
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
-@@ -30,7 +27,6 @@
- import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
- import org.w3c.dom.Attr;
-
--
- /**
- * During reference validation, we have to retrieve resources from somewhere.
- * This is done by retrieving a Resolver. The resolver needs two arguments: The
-@@ -48,7 +44,7 @@
- * <LI> Die erste Implementierung, die die Aufgabe erf??llt, f??hrt die Aufl??sung durch.
- * </UL>
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class ResourceResolver {
-
-@@ -62,8 +58,7 @@
- /** these are the system-wide resolvers */
- static List _resolverVector = null;
-
-- /** Field _individualResolverVector */
-- List _individualResolverVector = null;
-+ static boolean allThreadSafeInList=true;
-
- /** Field transformSpi */
- protected ResourceResolverSpi _resolverSpi = null;
-@@ -92,6 +87,7 @@
- this._resolverSpi = resourceResolver;
- }
-
-+
- /**
- * Method getInstance
- *
-@@ -107,13 +103,32 @@
- for (int i = 0; i < length; i++) {
- ResourceResolver resolver =
- (ResourceResolver) ResourceResolver._resolverVector.get(i);
-+ ResourceResolver resolverTmp=null;
-+ try {
-+ resolverTmp = allThreadSafeInList || resolver._resolverSpi.engineIsThreadSafe() ? resolver :
-+ new ResourceResolver((ResourceResolverSpi)resolver._resolverSpi.getClass().newInstance());
-+ } catch (InstantiationException e) {
-+ throw new ResourceResolverException("",e,uri,BaseURI);
-+ } catch (IllegalAccessException e) {
-+ throw new ResourceResolverException("",e,uri,BaseURI);
-+ }
-
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "check resolvability by class " + resolver._resolverSpi.getClass().getName());
-
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "check resolvability by class " + resolver.getClass().getName());
-+ if ((resolver != null) && resolverTmp.canResolve(uri, BaseURI)) {
-+ if (i!=0) {
-+ //update resolver.
-+ //System.out.println("Swaping");
-+ List resolverVector=(List)((ArrayList)_resolverVector).clone();
-+ resolverVector.remove(i);
-+ resolverVector.add(0,resolver);
-+ _resolverVector=resolverVector;
-+ } else {
-+ //System.out.println("hitting");
-+ }
-
-- if ((resolver != null) && resolver.canResolve(uri, BaseURI)) {
-- return resolver;
-+ return resolverTmp;
- }
- }
-
-@@ -137,9 +152,10 @@
- public static final ResourceResolver getInstance(
- Attr uri, String BaseURI, List individualResolvers)
- throws ResourceResolverException {
-- if (true) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "I was asked to create a ResourceResolver and got " + individualResolvers.size());
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, " extra resolvers to my existing " + ResourceResolver._resolverVector.size() + " system-wide resolvers");
-+ if (log.isLoggable(java.util.logging.Level.FINE)) {
-+
-+ log.log(java.util.logging.Level.FINE, "I was asked to create a ResourceResolver and got " + (individualResolvers==null? 0 : individualResolvers.size()) );
-+ log.log(java.util.logging.Level.FINE, " extra resolvers to my existing " + ResourceResolver._resolverVector.size() + " system-wide resolvers");
- }
-
- // first check the individual Resolvers
-@@ -151,8 +167,8 @@
-
- if (resolver != null) {
- String currentClass = resolver._resolverSpi.getClass().getName();
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "check resolvability by class " + currentClass);
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "check resolvability by class " + currentClass);
-
- if (resolver.canResolve(uri, BaseURI)) {
- return resolver;
-@@ -175,39 +191,46 @@
- }
- }
-
-- /**
-- * Method register
-- *
-- * @param className
-- */
-- public static void register(String className) {
-- ResourceResolver resolver = null;
-+ /**
-+ * Registers a ResourceResolverSpi class. This method logs a warning if
-+ * the class cannot be registered.
-+ *
-+ * @param className the name of the ResourceResolverSpi class to be
-+ * registered
-+ */
-+ public static void register(String className) {
-+ register(className, false);
-+ }
-
-+ /**
-+ * Registers a ResourceResolverSpi class at the beginning of the provider
-+ * list. This method logs a warning if the class cannot be registered.
-+ *
-+ * @param className the name of the ResourceResolverSpi class to be
-+ * registered
-+ */
-+ public static void registerAtStart(String className) {
-+ register(className, true);
-+ }
-+
-+ private static void register(String className, boolean start) {
- try {
-- resolver = new ResourceResolver(className);
-- ResourceResolver._resolverVector.add(resolver);
-+ ResourceResolver resolver = new ResourceResolver(className);
-+ if (start) {
-+ ResourceResolver._resolverVector.add(0, resolver);
-+ log.log(java.util.logging.Level.FINE, "registered resolver");
-+ } else {
-+ ResourceResolver._resolverVector.add(resolver);
-+ }
-+ if (!resolver._resolverSpi.engineIsThreadSafe()) {
-+ allThreadSafeInList=false;
-+ }
- } catch (Exception e) {
--// Object exArgs[] = { ((uri != null)
--// ? uri.getNodeValue()
--// : "null"), BaseURI };
--//
--// throw new ResourceResolverException("utils.resolver.noClass",
--// exArgs, e, uri, BaseURI);
-- log.log(java.util.logging.Level.WARNING, "Error loading resolver " + className +" disabling it");
-+ log.log(java.util.logging.Level.WARNING, "Error loading resolver " + className +" disabling it");
- } catch (NoClassDefFoundError e) {
-- log.log(java.util.logging.Level.WARNING, "Error loading resolver " + className +" disabling it");
-+ log.log(java.util.logging.Level.WARNING, "Error loading resolver " + className +" disabling it");
- }
--
-- }
--
-- /**
-- * Method registerAtStart
-- *
-- * @param className
-- */
-- public static void registerAtStart(String className) {
-- ResourceResolver._resolverVector.add(0, className);
-- }
-+ }
-
- /**
- * Method resolve
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolverException.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolverException.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolverException.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolverException.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -31,7 +30,7 @@
- * This Exception is thrown if something related to the
- * {@link com.sun.org.apache.xml.internal.security.utils.resolver.ResourceResolver} goes wrong.
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class ResourceResolverException extends XMLSecurityException {
-
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolverSpi.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolverSpi.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolverSpi.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolverSpi.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -22,6 +21,7 @@
- package com.sun.org.apache.xml.internal.security.utils.resolver;
-
-
-+import java.util.HashMap;
- import java.util.Map;
-
- import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
-@@ -31,7 +31,7 @@
- /**
- * During reference validation, we have to retrieve resources from somewhere.
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public abstract class ResourceResolverSpi {
-
-@@ -41,7 +41,7 @@
- ResourceResolverSpi.class.getName());
-
- /** Field _properties */
-- protected java.util.Map _properties = new java.util.HashMap(10);
-+ protected java.util.Map _properties = null;
-
- /**
- * This is the workhorse method used to resolve resources.
-@@ -62,19 +62,9 @@
- * @param value
- */
- public void engineSetProperty(String key, String value) {
--
-- java.util.Iterator i = this._properties.keySet().iterator();
--
-- while (i.hasNext()) {
-- String c = (String) i.next();
--
-- if (c.equals(key)) {
-- key = c;
--
-- break;
-- }
-- }
--
-+ if (_properties==null) {
-+ _properties=new HashMap();
-+ }
- this._properties.put(key, value);
- }
-
-@@ -85,19 +75,9 @@
- * @return the value of the property
- */
- public String engineGetProperty(String key) {
--
-- java.util.Iterator i = this._properties.keySet().iterator();
--
-- while (i.hasNext()) {
-- String c = (String) i.next();
--
-- if (c.equals(key)) {
-- key = c;
--
-- break;
-- }
-- }
--
-+ if (_properties==null) {
-+ return null;
-+ }
- return (String) this._properties.get(key);
- }
-
-@@ -106,9 +86,22 @@
- * @param properties
- */
- public void engineAddProperies(Map properties) {
-- this._properties.putAll(properties);
-+ if (properties!=null) {
-+ if (_properties==null) {
-+ _properties=new HashMap();
-+ }
-+ this._properties.putAll(properties);
-+ }
- }
--
-+ /**
-+ * Tells if the implementation does can be reused by several threads safely.
-+ * It normally means that the implemantation does not have any member, or there is
-+ * member change betwen engineCanResolve & engineResolve invocations. Or it mantians all
-+ * member info in ThreadLocal methods.
-+ */
-+ public boolean engineIsThreadSafe() {
-+ return false;
-+ }
- /**
- * This method helps the {@link ResourceResolver} to decide whether a
- * {@link ResourceResolverSpi} is able to perform the requested action.
-@@ -174,8 +167,8 @@
- && (ch3 != '/'));
-
- if (isDosFilename) {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Found DOS filename: " + str);
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Found DOS filename: " + str);
- }
- }
-
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverAnonymous.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverAnonymous.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverAnonymous.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverAnonymous.java
-@@ -32,14 +32,10 @@
-
- /**
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
-
- public class ResolverAnonymous extends ResourceResolverSpi {
-- /** {@link java.util.logging} logging facility */
-- static java.util.logging.Logger log =
-- java.util.logging.Logger.getLogger(
-- ResolverAnonymous.class.getName());
-
- private XMLSignatureInput _input = null;
-
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java
-@@ -2,7 +2,6 @@
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
--
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
-@@ -67,11 +66,12 @@
- ResolverDirectHTTP.class.getName());
-
- /** Field properties[] */
-- static final String properties[] = { "http.proxy.host", "http.proxy.port",
-- "http.proxy.username",
-- "http.proxy.password",
-- "http.basic.username",
-- "http.basic.password" };
-+ private static final String properties[] =
-+ { "http.proxy.host", "http.proxy.port",
-+ "http.proxy.username",
-+ "http.proxy.password",
-+ "http.basic.username",
-+ "http.basic.password" };
-
- /** Field HttpProxyHost */
- private static final int HttpProxyHost = 0;
-@@ -91,6 +91,9 @@
- /** Field HttpProxyPass */
- private static final int HttpBasicPass = 5;
-
-+ public boolean engineIsThreadSafe() {
-+ return true;
-+ }
- /**
- * Method resolve
- *
-@@ -117,15 +120,14 @@
- useProxy = true;
- }
-
-- // switch on proxy usage
- String oldProxySet = null;
- String oldProxyHost = null;
- String oldProxyPort = null;
-+ // switch on proxy usage
- if (useProxy) {
- if (log.isLoggable(java.util.logging.Level.FINE)) {
-- log.log(java.util.logging.Level.FINE,
-- "Use of HTTP proxy enabled: " + proxyHost + ":"
-- + proxyPort);
-+ log.log(java.util.logging.Level.FINE, "Use of HTTP proxy enabled: " + proxyHost + ":"
-+ + proxyPort);
- }
- oldProxySet = System.getProperty("http.proxySet");
- oldProxyHost = System.getProperty("http.proxyHost");
-@@ -215,11 +217,8 @@
- summarized += read;
- }
-
-- if (log.isLoggable(java.util.logging.Level.FINE)) {
-- log.log(java.util.logging.Level.FINE,
-- "Fetched " + summarized + " bytes from URI "
-- + uriNew.toString());
-- }
-+ log.log(java.util.logging.Level.FINE, "Fetched " + summarized + " bytes from URI "
-+ + uriNew.toString());
-
- XMLSignatureInput result = new XMLSignatureInput(baos.toByteArray());
-
-@@ -253,39 +252,36 @@
- */
- public boolean engineCanResolve(Attr uri, String BaseURI) {
- if (uri == null) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) {
-- log.log(java.util.logging.Level.FINE, "quick fail, uri == null");
-- }
-+ log.log(java.util.logging.Level.FINE, "quick fail, uri == null");
-+
- return false;
- }
-
- String uriNodeValue = uri.getNodeValue();
-
- if (uriNodeValue.equals("") || (uriNodeValue.charAt(0)=='#')) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) {
-- log.log(java.util.logging.Level.FINE,
-- "quick fail for empty URIs and local ones");
-- }
-+ log.log(java.util.logging.Level.FINE, "quick fail for empty URIs and local ones");
-+
- return false;
- }
-
- if (log.isLoggable(java.util.logging.Level.FINE)) {
-- log.log(java.util.logging.Level.FINE,
-- "I was asked whether I can resolve " + uriNodeValue);
-+ log.log(java.util.logging.Level.FINE, "I was asked whether I can resolve " + uriNodeValue);
- }
-+
- if ( uriNodeValue.startsWith("http:") ||
-- BaseURI.startsWith("http:")) {
-+ (BaseURI!=null && BaseURI.startsWith("http:") )) {
- if (log.isLoggable(java.util.logging.Level.FINE)) {
-- log.log(java.util.logging.Level.FINE,
-- "I state that I can resolve " + uriNodeValue);
-+ log.log(java.util.logging.Level.FINE, "I state that I can resolve " + uriNodeValue);
- }
-+
- return true;
- }
-
- if (log.isLoggable(java.util.logging.Level.FINE)) {
-- log.log(java.util.logging.Level.FINE,
-- "I state that I can't resolve " + uriNodeValue);
-+ log.log(java.util.logging.Level.FINE, "I state that I can't resolve " + uriNodeValue);
- }
-+
- return false;
- }
-
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverFragment.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverFragment.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverFragment.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverFragment.java
-@@ -34,7 +34,7 @@
- /**
- * This resolver is used for resolving same-document URIs like URI="" of URI="#id".
- *
-- * @author $Author: dims $
-+ * @author $Author: mullan $
- * @see <A HREF="http://www.w3.org/TR/xmldsig-core/#sec-ReferenceProcessingModel">The Reference processing model in the XML Signature spec</A>
- * @see <A HREF="http://www.w3.org/TR/xmldsig-core/#sec-Same-Document">Same-Document URI-References in the XML Signature spec</A>
- * @see <A HREF="http://www.ietf.org/rfc/rfc2396.txt">Section 4.2 of RFC 2396</A>
-@@ -45,7 +45,9 @@
- static java.util.logging.Logger log =
- java.util.logging.Logger.getLogger(
- ResolverFragment.class.getName());
--
-+ public boolean engineIsThreadSafe() {
-+ return true;
-+ }
- /**
- * Method engineResolve
- *
-@@ -72,7 +74,7 @@
- * resource containing the signature
- */
-
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "ResolverFragment with empty URI (means complete document)");
-+ log.log(java.util.logging.Level.FINE, "ResolverFragment with empty URI (means complete document)");
- selectedElem = doc;
- } else {
-
-@@ -93,14 +95,14 @@
- throw new ResourceResolverException(
- "signature.Verification.MissingID", exArgs, uri, BaseURI);
- }
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Try to catch an Element with ID " + id + " and Element was " + selectedElem);
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Try to catch an Element with ID " + id + " and Element was " + selectedElem);
- }
-
- XMLSignatureInput result = new XMLSignatureInput(selectedElem);
- result.setExcludeComments(true);
-
-- //if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "We return a nodeset with " + resultSet.size() + " nodes");
-+ //log.log(java.util.logging.Level.FINE, "We return a nodeset with " + resultSet.size() + " nodes");
- result.setMIMEType("text/xml");
- result.setSourceURI((BaseURI != null) ? BaseURI.concat(uri.getNodeValue()) :
- uri.getNodeValue());
-@@ -117,21 +119,24 @@
- public boolean engineCanResolve(Attr uri, String BaseURI) {
-
- if (uri == null) {
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Quick fail for null uri");
-+ log.log(java.util.logging.Level.FINE, "Quick fail for null uri");
- return false;
- }
-
- String uriNodeValue = uri.getNodeValue();
-
-- if (uriNodeValue.equals("")
-- || ((uriNodeValue.charAt(0)=='#')
-- &&!uriNodeValue.startsWith("#xpointer("))) {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "State I can resolve reference: \"" + uriNodeValue + "\"");
-+ if (uriNodeValue.equals("") ||
-+ (
-+ (uriNodeValue.charAt(0)=='#')
-+ && !((uriNodeValue.charAt(1)=='x') && uriNodeValue.startsWith("#xpointer("))
-+ )
-+ ){
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "State I can resolve reference: \"" + uriNodeValue + "\"");
- return true;
- }
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Do not seem to be able to resolve reference: \"" + uriNodeValue + "\"");
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Do not seem to be able to resolve reference: \"" + uriNodeValue + "\"");
- return false;
- }
-
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverLocalFilesystem.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverLocalFilesystem.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverLocalFilesystem.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverLocalFilesystem.java
-@@ -20,8 +20,6 @@
- */
- package com.sun.org.apache.xml.internal.security.utils.resolver.implementations;
-
--
--
- import java.io.FileInputStream;
-
- import com.sun.org.apache.xml.internal.utils.URI;
-@@ -30,11 +28,10 @@
- import com.sun.org.apache.xml.internal.security.utils.resolver.ResourceResolverSpi;
- import org.w3c.dom.Attr;
-
--
- /**
- * A simple ResourceResolver for requests into the local filesystem.
- *
-- * @author $Author: raul $
-+ * @author $Author: mullan $
- */
- public class ResolverLocalFilesystem extends ResourceResolverSpi {
-
-@@ -43,6 +40,9 @@
- java.util.logging.Logger.getLogger(
- ResolverLocalFilesystem.class.getName());
-
-+ public boolean engineIsThreadSafe() {
-+ return true;
-+ }
- /**
- * @inheritDoc
- */
-@@ -50,7 +50,7 @@
- throws ResourceResolverException {
-
- try {
-- URI uriNew = new URI(new URI(BaseURI), uri.getNodeValue());
-+ URI uriNew = getNewURI(uri.getNodeValue(), BaseURI);
-
- // if the URI contains a fragment, ignore it
- URI uriNewNoFrag = new URI(uriNew);
-@@ -72,6 +72,7 @@
- }
- }
-
-+ private static int FILE_URI_LENGTH="file:/".length();
- /**
- * Method translateUriToFilename
- *
-@@ -80,7 +81,7 @@
- */
- private static String translateUriToFilename(String uri) {
-
-- String subStr = uri.substring("file:/".length());
-+ String subStr = uri.substring(FILE_URI_LENGTH);
-
- if (subStr.indexOf("%20") > -1)
- {
-@@ -121,26 +122,36 @@
-
- String uriNodeValue = uri.getNodeValue();
-
-- if (uriNodeValue.equals("") || (uriNodeValue.charAt(0)=='#')) {
-+ if (uriNodeValue.equals("") || (uriNodeValue.charAt(0)=='#') ||
-+ uriNodeValue.startsWith("http:")) {
- return false;
- }
-
- try {
- //URI uriNew = new URI(new URI(BaseURI), uri.getNodeValue());
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "I was asked whether I can resolve " + uriNodeValue/*uriNew.toString()*/);
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "I was asked whether I can resolve " + uriNodeValue/*uriNew.toString()*/);
-
- if ( uriNodeValue.startsWith("file:") ||
- BaseURI.startsWith("file:")/*uriNew.getScheme().equals("file")*/) {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "I state that I can resolve " + uriNodeValue/*uriNew.toString()*/);
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "I state that I can resolve " + uriNodeValue/*uriNew.toString()*/);
-
- return true;
- }
- } catch (Exception e) {}
-
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "But I can't");
-+ log.log(java.util.logging.Level.FINE, "But I can't");
-
- return false;
- }
-+
-+ private static URI getNewURI(String uri, String BaseURI)
-+ throws URI.MalformedURIException {
-+
-+ if ((BaseURI == null) || "".equals(BaseURI)) {
-+ return new URI(uri);
-+ }
-+ return new URI(new URI(BaseURI), uri);
-+ }
- }
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverXPointer.java b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverXPointer.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverXPointer.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverXPointer.java
-@@ -44,7 +44,7 @@
- * nodes of the parse tree (all descendants, plus all attributes,
- * plus all namespaces nodes).
- *
-- * @author $Author: dims $
-+ * @author $Author: mullan $
- */
- public class ResolverXPointer extends ResourceResolverSpi {
-
-@@ -53,6 +53,9 @@
- java.util.logging.Logger.getLogger(
- ResolverXPointer.class.getName());
-
-+ public boolean engineIsThreadSafe() {
-+ return true;
-+ }
- /**
- * @inheritDoc
- */
-@@ -70,7 +73,7 @@
- String id = getXPointerId(uriStr);
- resultNode =IdResolver.getElementById(doc, id);
-
-- // if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Use #xpointer(id('" + id + "')) on element " + selectedElem);
-+ // log.log(java.util.logging.Level.FINE, "Use #xpointer(id('" + id + "')) on element " + selectedElem);
-
- if (resultNode == null) {
- Object exArgs[] = { id };
-@@ -148,14 +151,14 @@
- uri.length()
- - 2);
-
-- // if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "idPlusDelim=" + idPlusDelim);
-+ // log.log(java.util.logging.Level.FINE, "idPlusDelim=" + idPlusDelim);
- int idLen=idPlusDelim.length() -1;
- if (((idPlusDelim.charAt(0) == '"') && (idPlusDelim
- .charAt(idLen) == '"')) || ((idPlusDelim
- .charAt(0) == '\'') && (idPlusDelim
- .charAt(idLen) == '\''))) {
-- if (true)
-- if (log.isLoggable(java.util.logging.Level.FINE)) log.log(java.util.logging.Level.FINE, "Id="
-+ if (log.isLoggable(java.util.logging.Level.FINE))
-+ log.log(java.util.logging.Level.FINE, "Id="
- + idPlusDelim.substring(1, idLen));
-
- return true;
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/DigesterOutputStream.java b/src/share/classes/org/jcp/xml/dsig/internal/DigesterOutputStream.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/DigesterOutputStream.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/DigesterOutputStream.java
-@@ -19,7 +19,10 @@
- *
- */
- /*
-- * $Id: DigesterOutputStream.java,v 1.1.2.2 2005/08/12 18:15:35 mullan Exp $
-+ * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
-+ */
-+/*
-+ * $Id: DigesterOutputStream.java,v 1.2 2008/07/24 15:20:31 mullan Exp $
- */
- package org.jcp.xml.dsig.internal;
-
-@@ -35,10 +38,11 @@
- /**
- * This class has been modified slightly to use java.security.MessageDigest
- * objects as input, rather than
-- * org.apache.xml.security.algorithms.MessageDigestAlgorithm objects.
-+ * com.sun.org.apache.xml.internal.security.algorithms.MessageDigestAlgorithm objects.
- * It also optionally caches the input bytes.
- *
- * @author raul
-+ * @author Sean Mullan
- */
- public class DigesterOutputStream extends OutputStream {
- private boolean buffer = false;
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/MacOutputStream.java b/src/share/classes/org/jcp/xml/dsig/internal/MacOutputStream.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/MacOutputStream.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/MacOutputStream.java
-@@ -24,15 +24,14 @@
- import javax.crypto.Mac;
-
- /**
-- * Derived from Apache sources and changed to use Mac objects
-- * objects instead of org.apache.xml.security.algorithms.SignatureAlgorithm
-- * objects.
-+ * Derived from Apache sources and changed to use Mac objects instead of
-+ * com.sun.org.apache.xml.internal.security.algorithms.SignatureAlgorithm objects.
- *
- * @author raul
-+ * @author Sean Mullan
- *
- */
- public class MacOutputStream extends ByteArrayOutputStream {
-- private final static byte none[]="error".getBytes();
- private final Mac mac;
-
- public MacOutputStream(Mac mac) {
-@@ -40,22 +39,20 @@
- }
-
- /** @inheritDoc */
-- public byte[] toByteArray() {
-- return none;
-- }
--
-- /** @inheritDoc */
- public void write(byte[] arg0) {
-+ super.write(arg0, 0, arg0.length);
- mac.update(arg0);
- }
-
- /** @inheritDoc */
- public void write(int arg0) {
-- mac.update((byte)arg0);
-+ super.write(arg0);
-+ mac.update((byte) arg0);
- }
-
- /** @inheritDoc */
- public void write(byte[] arg0, int arg1, int arg2) {
-- mac.update(arg0,arg1,arg2);
-+ super.write(arg0, arg1, arg2);
-+ mac.update(arg0, arg1, arg2);
- }
- }
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/SignerOutputStream.java b/src/share/classes/org/jcp/xml/dsig/internal/SignerOutputStream.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/SignerOutputStream.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/SignerOutputStream.java
-@@ -19,7 +19,10 @@
- *
- */
- /*
-- * $Id: SignerOutputStream.java,v 1.1.2.2 2005/08/12 18:01:58 mullan Exp $
-+ * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
-+ */
-+/*
-+ * $Id: SignerOutputStream.java,v 1.2 2008/07/24 15:20:31 mullan Exp $
- */
- package org.jcp.xml.dsig.internal;
-
-@@ -29,10 +32,11 @@
-
- /**
- * Derived from Apache sources and changed to use java.security.Signature
-- * objects as input instead of org.apache.xml.security.algorithms.SignatureAlgorithm
-+ * objects as input instead of com.sun.org.apache.xml.internal.security.algorithms.SignatureAlgorithm
- * objects.
- *
- * @author raul
-+ * @author Sean Mullan
- */
- public class SignerOutputStream extends ByteArrayOutputStream {
- private final Signature sig;
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: ApacheCanonicalizer.java,v 1.17 2005/09/19 18:20:04 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: ApacheCanonicalizer.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-@@ -53,6 +52,10 @@
-
- public abstract class ApacheCanonicalizer extends TransformService {
-
-+ static {
-+ com.sun.org.apache.xml.internal.security.Init.init();
-+ }
-+
- private static Logger log = Logger.getLogger("org.jcp.xml.dsig.internal.dom");
- protected Canonicalizer apacheCanonicalizer;
- private Transform apacheTransform;
-@@ -235,13 +238,9 @@
- }
-
- try {
-- if (os != null) {
-- in = apacheTransform.performTransform(in, os);
-- if (!in.isNodeSet() && !in.isElement()) {
-- return null;
-- }
-- } else {
-- in = apacheTransform.performTransform(in);
-+ in = apacheTransform.performTransform(in, os);
-+ if (!in.isNodeSet() && !in.isElement()) {
-+ return null;
- }
- if (in.isOctetStream()) {
- return new ApacheOctetStreamData(in);
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheData.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheData.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheData.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheData.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: ApacheData.java,v 1.4 2005/05/10 18:15:31 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: ApacheData.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: ApacheNodeSetData.java,v 1.4 2005/05/10 18:15:31 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: ApacheNodeSetData.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-@@ -83,7 +82,7 @@
- boolean skipNode = false;
- while (it.hasNext() && !skipNode) {
- NodeFilter nf = (NodeFilter) it.next();
-- if (!nf.isNodeInclude(currentNode)) {
-+ if (nf.isNodeInclude(currentNode)!=1) {
- skipNode = true;
- }
- }
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: ApacheOctetStreamData.java,v 1.4 2005/05/10 18:15:31 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: ApacheOctetStreamData.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: ApacheTransform.java,v 1.23 2005/09/15 14:29:03 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: ApacheTransform.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-@@ -54,6 +53,10 @@
- */
- public abstract class ApacheTransform extends TransformService {
-
-+ static {
-+ com.sun.org.apache.xml.internal.security.Init.init();
-+ }
-+
- private static Logger log = Logger.getLogger("org.jcp.xml.dsig.internal.dom");
- private Transform apacheTransform;
- protected Document ownerDoc;
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMBase64Transform.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMBase64Transform.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMBase64Transform.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMBase64Transform.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMBase64Transform.java,v 1.14 2005/05/10 18:15:31 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMBase64Transform.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14N11Method.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14N11Method.java
-new file mode 100644
---- /dev/null
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14N11Method.java
-@@ -0,0 +1,79 @@
-+/*
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
-+ */
-+/*
-+ * Copyright 2008 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMCanonicalXMLC14N11Method.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
-+ */
-+package org.jcp.xml.dsig.internal.dom;
-+
-+import javax.xml.crypto.*;
-+import javax.xml.crypto.dsig.*;
-+import javax.xml.crypto.dsig.spec.TransformParameterSpec;
-+
-+import java.security.InvalidAlgorithmParameterException;
-+
-+import com.sun.org.apache.xml.internal.security.c14n.Canonicalizer;
-+import com.sun.org.apache.xml.internal.security.c14n.InvalidCanonicalizerException;
-+
-+/**
-+ * DOM-based implementation of CanonicalizationMethod for Canonical XML 1.1
-+ * (with or without comments). Uses Apache XML-Sec Canonicalizer.
-+ *
-+ * @author Sean Mullan
-+ */
-+public final class DOMCanonicalXMLC14N11Method extends ApacheCanonicalizer {
-+
-+ public static final String C14N_11 = "http://www.w3.org/2006/12/xml-c14n11";
-+ public static final String C14N_11_WITH_COMMENTS
-+ = "http://www.w3.org/2006/12/xml-c14n11#WithComments";
-+
-+ public void init(TransformParameterSpec params)
-+ throws InvalidAlgorithmParameterException {
-+ if (params != null) {
-+ throw new InvalidAlgorithmParameterException("no parameters " +
-+ "should be specified for Canonical XML 1.1 algorithm");
-+ }
-+ }
-+
-+ public Data transform(Data data, XMLCryptoContext xc)
-+ throws TransformException {
-+
-+ // ignore comments if dereferencing same-document URI that requires
-+ // you to omit comments, even if the Transform says otherwise -
-+ // this is to be compliant with section 4.3.3.3 of W3C Rec.
-+ if (data instanceof DOMSubTreeData) {
-+ DOMSubTreeData subTree = (DOMSubTreeData) data;
-+ if (subTree.excludeComments()) {
-+ try {
-+ apacheCanonicalizer = Canonicalizer.getInstance(C14N_11);
-+ } catch (InvalidCanonicalizerException ice) {
-+ throw new TransformException
-+ ("Couldn't find Canonicalizer for: " +
-+ C14N_11 + ": " + ice.getMessage(), ice);
-+ }
-+ }
-+ }
-+
-+ return canonicalize(data, xc);
-+ }
-+}
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14NMethod.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14NMethod.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14NMethod.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14NMethod.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMCanonicalXMLC14NMethod.java,v 1.24.4.1 2005/08/12 15:27:49 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMCanonicalXMLC14NMethod.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalizationMethod.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalizationMethod.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalizationMethod.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalizationMethod.java
-@@ -1,34 +1,34 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMCanonicalizationMethod.java,v 1.25 2005/05/10 18:15:31 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMCanonicalizationMethod.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
- import java.io.OutputStream;
- import java.security.InvalidAlgorithmParameterException;
-+import java.security.Provider;
-
- import org.w3c.dom.Element;
-
-@@ -60,9 +60,9 @@
- *
- * @param cmElem a CanonicalizationMethod element
- */
-- public DOMCanonicalizationMethod(Element cmElem, XMLCryptoContext context)
-- throws MarshalException{
-- super(cmElem, context);
-+ public DOMCanonicalizationMethod(Element cmElem, XMLCryptoContext context,
-+ Provider provider) throws MarshalException {
-+ super(cmElem, context, provider);
- }
-
- /**
-@@ -75,7 +75,7 @@
- * additional context (may be <code>null</code> if not applicable)
- * @return the canonicalized data
- * @throws NullPointerException if <code>data</code> is <code>null</code>
-- * @throws XMLSignatureException if an unexpected error occurs while
-+ * @throws TransformException if an unexpected error occurs while
- * canonicalizing the data
- */
- public Data canonicalize(Data data, XMLCryptoContext xc)
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMCryptoBinary.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMCryptoBinary.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMCryptoBinary.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMCryptoBinary.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMCryptoBinary.java,v 1.14 2005/05/12 19:28:29 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMCryptoBinary.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMDigestMethod.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMDigestMethod.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMDigestMethod.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMDigestMethod.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMDigestMethod.java,v 1.17 2005/05/10 18:15:32 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMDigestMethod.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-@@ -127,7 +126,7 @@
-
- /**
- * Unmarshals <code>DigestMethodParameterSpec</code> from the specified
-- * <code>Element</code>. By default, this method throws an exception since
-+ * <code>Element</code>. By default, this method throws an exception since
- * most DigestMethod algorithms do not have parameters. Subclasses should
- * override it if they have parameters.
- *
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMEnvelopedTransform.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMEnvelopedTransform.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMEnvelopedTransform.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMEnvelopedTransform.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMEnvelopedTransform.java,v 1.16 2005/05/10 18:15:32 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMEnvelopedTransform.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMExcC14NMethod.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMExcC14NMethod.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMExcC14NMethod.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMExcC14NMethod.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMExcC14NMethod.java,v 1.28 2005/09/23 20:20:41 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMExcC14NMethod.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-@@ -104,7 +103,7 @@
- Element excElem = DOMUtils.createElement
- (ownerDoc, "InclusiveNamespaces",
- CanonicalizationMethod.EXCLUSIVE, prefix);
-- if (prefix == null) {
-+ if (prefix == null || prefix.length() == 0) {
- excElem.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns",
- CanonicalizationMethod.EXCLUSIVE);
- } else {
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMHMACSignatureMethod.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMHMACSignatureMethod.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMHMACSignatureMethod.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMHMACSignatureMethod.java
-@@ -1,29 +1,28 @@
-+/*
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
-+ */
-+/*
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
- /*
- * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
- */
- /*
-- * $Id: DOMHMACSignatureMethod.java,v 1.17 2005/09/15 14:29:04 mullan Exp $
-+ * $Id: DOMHMACSignatureMethod.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMKeyInfo.java,v 1.19 2005/05/12 19:28:30 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMKeyInfo.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-@@ -33,6 +32,7 @@
- import javax.xml.crypto.dsig.keyinfo.KeyInfo;
- import javax.xml.crypto.dom.*;
-
-+import java.security.Provider;
- import java.util.*;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
-@@ -82,10 +82,10 @@
- /**
- * Creates a <code>DOMKeyInfo</code> from XML.
- *
-- * @param input XML input
-+ * @param kiElem KeyInfo element
- */
-- public DOMKeyInfo(Element kiElem, XMLCryptoContext context)
-- throws MarshalException {
-+ public DOMKeyInfo(Element kiElem, XMLCryptoContext context,
-+ Provider provider) throws MarshalException {
- // get Id attribute, if specified
- id = DOMUtils.getAttributeValue(kiElem, "Id");
-
-@@ -112,7 +112,10 @@
- } else if (localName.equals("KeyValue")) {
- content.add(new DOMKeyValue(childElem));
- } else if (localName.equals("RetrievalMethod")) {
-- content.add(new DOMRetrievalMethod(childElem, context));
-+ content.add
-+ (new DOMRetrievalMethod(childElem, context, provider));
-+ } else if (localName.equals("PGPData")) {
-+ content.add(new DOMPGPData(childElem));
- } else { //may be MgmtData, SPKIData or element from other namespace
- content.add(new javax.xml.crypto.dom.DOMStructure((childElem)));
- }
-@@ -139,7 +142,7 @@
- Element kiElem = DOMUtils.createElement
- (DOMUtils.getOwnerDocument(pNode), "KeyInfo",
- XMLSignature.XMLNS, dsPrefix);
-- if (dsPrefix == null) {
-+ if (dsPrefix == null || dsPrefix.length() == 0) {
- kiElem.setAttributeNS
- ("http://www.w3.org/2000/xmlns/", "xmlns", XMLSignature.XMLNS);
- } else {
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java
-@@ -1,34 +1,34 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMKeyInfoFactory.java,v 1.24 2005/09/23 20:18:50 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMKeyInfoFactory.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
- import java.math.BigInteger;
--import java.security.*;
-+import java.security.KeyException;
-+import java.security.PublicKey;
- import java.util.List;
- import javax.xml.crypto.*;
- import javax.xml.crypto.dsig.*;
-@@ -45,7 +45,6 @@
- */
- public final class DOMKeyInfoFactory extends KeyInfoFactory {
-
--
- public DOMKeyInfoFactory() { }
-
- public KeyInfo newKeyInfo(List content) {
-@@ -135,7 +134,7 @@
- "support DOM Level 2 and be namespace aware");
- }
- if (tag.equals("KeyInfo")) {
-- return new DOMKeyInfo(element, null);
-+ return new DOMKeyInfo(element, null, getProvider());
- } else {
- throw new MarshalException("invalid KeyInfo tag: " + tag);
- }
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyName.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyName.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyName.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyName.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMKeyName.java,v 1.12 2005/05/10 18:15:32 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMKeyName.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyValue.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyValue.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyValue.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyValue.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMKeyValue.java,v 1.18 2005/05/10 18:15:33 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMKeyValue.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMManifest.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMManifest.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMManifest.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMManifest.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMManifest.java,v 1.16 2005/05/12 19:28:31 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMManifest.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-@@ -31,6 +30,7 @@
- import javax.xml.crypto.dom.DOMCryptoContext;
- import javax.xml.crypto.dsig.*;
-
-+import java.security.Provider;
- import java.util.*;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
-@@ -83,13 +83,13 @@
- *
- * @param manElem a Manifest element
- */
-- public DOMManifest(Element manElem, XMLCryptoContext context)
-- throws MarshalException {
-+ public DOMManifest(Element manElem, XMLCryptoContext context,
-+ Provider provider) throws MarshalException {
- this.id = DOMUtils.getAttributeValue(manElem, "Id");
- Element refElem = DOMUtils.getFirstChildElement(manElem);
- List refs = new ArrayList();
- while (refElem != null) {
-- refs.add(new DOMReference(refElem, context));
-+ refs.add(new DOMReference(refElem, context, provider));
- refElem = DOMUtils.getNextSiblingElement(refElem);
- }
- this.references = Collections.unmodifiableList(refs);
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMPGPData.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMPGPData.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMPGPData.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMPGPData.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMPGPData.java,v 1.18 2005/05/12 19:28:31 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMPGPData.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java
-@@ -1,28 +1,26 @@
- /*
-- * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
-+ */
-+/*
-+ * Copyright 2005 The Apache Software Foundation.
- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
- *
-- * 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).
-+ * http://www.apache.org/licenses/LICENSE-2.0
- *
-- * 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.
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
- */
--
-+/*
-+ * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-+ */
- /*
- * ===========================================================================
- *
-@@ -31,7 +29,7 @@
- * ===========================================================================
- */
- /*
-- * $Id: DOMReference.java,v 1.40 2005/09/19 18:27:04 mullan Exp $
-+ * $Id: DOMReference.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-@@ -67,13 +65,27 @@
- public final class DOMReference extends DOMStructure
- implements Reference, DOMURIReference {
-
-+ /**
-+ * Look up useC14N11 system property. If true, an explicit C14N11 transform
-+ * will be added if necessary when generating the signature. See section
-+ * 3.1.1 of http://www.w3.org/2007/xmlsec/Drafts/xmldsig-core/ for more info.
-+ *
-+ * If true, overrides the same property if set in the XMLSignContext.
-+ */
-+ private static boolean useC14N11 =
-+ AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
-+ public Boolean run() {
-+ return Boolean.getBoolean
-+ ("com.sun.org.apache.xml.internal.security.useC14N11");
-+ }
-+ });
-+
- private static Logger log = Logger.getLogger("org.jcp.xml.dsig.internal.dom");
-
- private final DigestMethod digestMethod;
- private final String id;
-- private final List appliedTransforms;
- private final List transforms;
-- private final List allTransforms;
-+ private List allTransforms;
- private final Data appliedTransformData;
- private Attr here;
- private final String uri;
-@@ -87,6 +99,7 @@
- private Data derefData;
- private InputStream dis;
- private MessageDigest md;
-+ private Provider provider;
-
- /**
- * Creates a <code>Reference</code> from the specified parameters.
-@@ -104,24 +117,25 @@
- * not of type <code>Transform</code>
- */
- public DOMReference(String uri, String type, DigestMethod dm,
-- List transforms, String id) {
-- this(uri, type, dm, null, null, transforms, id, null);
-- }
--
-- public DOMReference(String uri, String type, DigestMethod dm,
-- List appliedTransforms, Data result, List transforms, String id) {
-- this(uri, type, dm, appliedTransforms, result, transforms, id, null);
-+ List transforms, String id, Provider provider) {
-+ this(uri, type, dm, null, null, transforms, id, null, provider);
- }
-
- public DOMReference(String uri, String type, DigestMethod dm,
- List appliedTransforms, Data result, List transforms, String id,
-- byte[] digestValue){
-+ Provider provider) {
-+ this(uri, type, dm, appliedTransforms,
-+ result, transforms, id, null, provider);
-+ }
-+
-+ public DOMReference(String uri, String type, DigestMethod dm,
-+ List appliedTransforms, Data result, List transforms, String id,
-+ byte[] digestValue, Provider provider) {
- if (dm == null) {
- throw new NullPointerException("DigestMethod must be non-null");
- }
-- if (appliedTransforms == null || appliedTransforms.isEmpty()) {
-- this.appliedTransforms = Collections.EMPTY_LIST;
-- } else {
-+ this.allTransforms = new ArrayList();
-+ if (appliedTransforms != null) {
- List transformsCopy = new ArrayList(appliedTransforms);
- for (int i = 0, size = transformsCopy.size(); i < size; i++) {
- if (!(transformsCopy.get(i) instanceof Transform)) {
-@@ -129,10 +143,9 @@
- ("appliedTransforms["+i+"] is not a valid type");
- }
- }
-- this.appliedTransforms =
-- Collections.unmodifiableList(transformsCopy);
-+ this.allTransforms = transformsCopy;
- }
-- if (transforms == null || transforms.isEmpty()) {
-+ if (transforms == null) {
- this.transforms = Collections.EMPTY_LIST;
- } else {
- List transformsCopy = new ArrayList(transforms);
-@@ -142,11 +155,9 @@
- ("transforms["+i+"] is not a valid type");
- }
- }
-- this.transforms = Collections.unmodifiableList(transformsCopy);
-+ this.transforms = transformsCopy;
-+ this.allTransforms.addAll(transformsCopy);
- }
-- List all = new ArrayList(this.appliedTransforms);
-- all.addAll(this.transforms);
-- this.allTransforms = Collections.unmodifiableList(all);
- this.digestMethod = dm;
- this.uri = uri;
- if ((uri != null) && (!uri.equals(""))) {
-@@ -163,6 +174,7 @@
- this.digested = true;
- }
- this.appliedTransformData = result;
-+ this.provider = provider;
- }
-
- /**
-@@ -170,15 +182,16 @@
- *
- * @param refElem a Reference element
- */
-- public DOMReference(Element refElem, XMLCryptoContext context)
-- throws MarshalException {
-+ public DOMReference(Element refElem, XMLCryptoContext context,
-+ Provider provider) throws MarshalException {
- // unmarshal Transforms, if specified
- Element nextSibling = DOMUtils.getFirstChildElement(refElem);
- List transforms = new ArrayList(5);
- if (nextSibling.getLocalName().equals("Transforms")) {
- Element transformElem = DOMUtils.getFirstChildElement(nextSibling);
- while (transformElem != null) {
-- transforms.add(new DOMTransform(transformElem, context));
-+ transforms.add
-+ (new DOMTransform(transformElem, context, provider));
- transformElem = DOMUtils.getNextSiblingElement(transformElem);
- }
- nextSibling = DOMUtils.getNextSiblingElement(nextSibling);
-@@ -203,15 +216,10 @@
- this.type = DOMUtils.getAttributeValue(refElem, "Type");
- this.here = refElem.getAttributeNodeNS(null, "URI");
- this.refElem = refElem;
--
-- if (transforms.isEmpty()) {
-- this.transforms = Collections.EMPTY_LIST;
-- } else {
-- this.transforms = Collections.unmodifiableList(transforms);
-- }
-- this.appliedTransforms = Collections.EMPTY_LIST;
-+ this.transforms = transforms;
- this.allTransforms = transforms;
- this.appliedTransformData = null;
-+ this.provider = provider;
- }
-
- public DigestMethod getDigestMethod() {
-@@ -231,7 +239,7 @@
- }
-
- public List getTransforms() {
-- return allTransforms;
-+ return Collections.unmodifiableList(allTransforms);
- }
-
- public byte[] getDigestValue() {
-@@ -259,17 +267,13 @@
- DOMUtils.setAttribute(refElem, "Type", type);
-
- // create and append Transforms element
-- if (!transforms.isEmpty() || !appliedTransforms.isEmpty()) {
-+ if (!allTransforms.isEmpty()) {
- Element transformsElem = DOMUtils.createElement
- (ownerDoc, "Transforms", XMLSignature.XMLNS, dsPrefix);
- refElem.appendChild(transformsElem);
-- for (int i = 0, size = appliedTransforms.size(); i < size; i++) {
-+ for (int i = 0, size = allTransforms.size(); i < size; i++) {
- DOMStructure transform =
-- (DOMStructure) appliedTransforms.get(i);
-- transform.marshal(transformsElem, dsPrefix, context);
-- }
-- for (int i = 0, size = transforms.size(); i < size; i++) {
-- DOMStructure transform = (DOMStructure) transforms.get(i);
-+ (DOMStructure) allTransforms.get(i);
- transform.marshal(transformsElem, dsPrefix, context);
- }
- }
-@@ -416,21 +420,62 @@
- try {
- if (data != null) {
- XMLSignatureInput xi;
-+ // explicitly use C14N 1.1 when generating signature
-+ // first check system property, then context property
-+ boolean c14n11 = useC14N11;
-+ String c14nalg = CanonicalizationMethod.INCLUSIVE;
-+ if (context instanceof XMLSignContext) {
-+ if (!c14n11) {
-+ Boolean prop = (Boolean) context.getProperty
-+ ("com.sun.org.apache.xml.internal.security.useC14N11");
-+ c14n11 = (prop != null && prop.booleanValue() == true);
-+ if (c14n11) {
-+ c14nalg = "http://www.w3.org/2006/12/xml-c14n11";
-+ }
-+ } else {
-+ c14nalg = "http://www.w3.org/2006/12/xml-c14n11";
-+ }
-+ }
- if (data instanceof ApacheData) {
- xi = ((ApacheData) data).getXMLSignatureInput();
- } else if (data instanceof OctetStreamData) {
- xi = new XMLSignatureInput
- (((OctetStreamData)data).getOctetStream());
- } else if (data instanceof NodeSetData) {
-- TransformService spi = TransformService.getInstance
-- (CanonicalizationMethod.INCLUSIVE, "DOM");
-+ TransformService spi = null;
-+ try {
-+ spi = TransformService.getInstance(c14nalg, "DOM");
-+ } catch (NoSuchAlgorithmException nsae) {
-+ spi = TransformService.getInstance
-+ (c14nalg, "DOM", provider);
-+ }
- data = spi.transform(data, context);
- xi = new XMLSignatureInput
- (((OctetStreamData)data).getOctetStream());
- } else {
- throw new XMLSignatureException("unrecognized Data type");
- }
-- xi.updateOutputStream(os);
-+ if (context instanceof XMLSignContext && c14n11
-+ && !xi.isOctetStream() && !xi.isOutputStreamSet()) {
-+ DOMTransform t = new DOMTransform
-+ (TransformService.getInstance(c14nalg, "DOM"));
-+ Element transformsElem = null;
-+ String dsPrefix = DOMUtils.getSignaturePrefix(context);
-+ if (allTransforms.isEmpty()) {
-+ transformsElem = DOMUtils.createElement(
-+ refElem.getOwnerDocument(),
-+ "Transforms", XMLSignature.XMLNS, dsPrefix);
-+ refElem.insertBefore(transformsElem,
-+ DOMUtils.getFirstChildElement(refElem));
-+ } else {
-+ transformsElem = DOMUtils.getFirstChildElement(refElem);
-+ }
-+ t.marshal(transformsElem, dsPrefix, (DOMCryptoContext) context);
-+ allTransforms.add(t);
-+ xi.updateOutputStream(os, true);
-+ } else {
-+ xi.updateOutputStream(os);
-+ }
- }
- os.flush();
- if (cache != null && cache.booleanValue() == true) {
-@@ -466,7 +511,7 @@
- Arrays.equals(digestValue, oref.getDigestValue());
-
- return (digestMethod.equals(oref.getDigestMethod()) && idsEqual &&
-- urisEqual && typesEqual && transforms.equals(oref.getTransforms()));
-+ urisEqual && typesEqual && allTransforms.equals(oref.getTransforms()));
- }
-
- boolean isDigested() {
-@@ -486,7 +531,7 @@
- };
- } catch (Exception e) {
- // log a warning
-- log.log(Level.WARNING,
-+ log.log(Level.WARNING,
- "cannot cache dereferenced data: " + e);
- return null;
- }
-@@ -499,7 +544,7 @@
- (xsi.getOctetStream(), xsi.getSourceURI(), xsi.getMIMEType());
- } catch (IOException ioe) {
- // log a warning
-- log.log(Level.WARNING,
-+ log.log(Level.WARNING,
- "cannot cache dereferenced data: " + ioe);
- return null;
- }
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java
-@@ -1,28 +1,26 @@
-+/*
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
-+ */
-+/*
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
- /*
- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
- */
--
- /*
- * ===========================================================================
- *
-@@ -31,13 +29,14 @@
- * ===========================================================================
- */
- /*
-- * $Id: DOMRetrievalMethod.java,v 1.24 2005/05/12 19:28:32 mullan Exp $
-+ * $Id: DOMRetrievalMethod.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
- import java.io.ByteArrayInputStream;
- import java.net.URI;
- import java.net.URISyntaxException;
-+import java.security.Provider;
- import java.util.*;
- import javax.xml.crypto.*;
- import javax.xml.crypto.dsig.*;
-@@ -116,8 +115,8 @@
- *
- * @param rmElem a RetrievalMethod element
- */
-- public DOMRetrievalMethod(Element rmElem, XMLCryptoContext context)
-- throws MarshalException {
-+ public DOMRetrievalMethod(Element rmElem, XMLCryptoContext context,
-+ Provider provider) throws MarshalException {
- // get URI and Type attributes
- uri = DOMUtils.getAttributeValue(rmElem, "URI");
- type = DOMUtils.getAttributeValue(rmElem, "Type");
-@@ -132,7 +131,8 @@
- Element transformElem =
- DOMUtils.getFirstChildElement(transformsElem);
- while (transformElem != null) {
-- transforms.add(new DOMTransform(transformElem, context));
-+ transforms.add
-+ (new DOMTransform(transformElem, context, provider));
- transformElem = DOMUtils.getNextSiblingElement(transformElem);
- }
- }
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureMethod.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureMethod.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureMethod.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureMethod.java
-@@ -1,32 +1,28 @@
- /*
-- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * Copyright 1999-2004 The Apache Software Foundation.
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
- */
- /*
-- * $Id: DOMSignatureMethod.java,v 1.20.4.1 2005/08/12 14:23:49 mullan Exp $
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMSignatureMethod.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-@@ -226,7 +222,11 @@
- }
- if (signature == null) {
- try {
-- signature = Signature.getInstance(getSignatureAlgorithm());
-+ Provider p = (Provider) context.getProperty
-+ ("org.jcp.xml.dsig.internal.dom.SignatureProvider");
-+ signature = (p == null)
-+ ? Signature.getInstance(getSignatureAlgorithm())
-+ : Signature.getInstance(getSignatureAlgorithm(), p);
- } catch (NoSuchAlgorithmException nsae) {
- throw new XMLSignatureException(nsae);
- }
-@@ -274,7 +274,11 @@
- }
- if (signature == null) {
- try {
-- signature = Signature.getInstance(getSignatureAlgorithm());
-+ Provider p = (Provider) context.getProperty
-+ ("org.jcp.xml.dsig.internal.dom.SignatureProvider");
-+ signature = (p == null)
-+ ? Signature.getInstance(getSignatureAlgorithm())
-+ : Signature.getInstance(getSignatureAlgorithm(), p);
- } catch (NoSuchAlgorithmException nsae) {
- throw new XMLSignatureException(nsae);
- }
-@@ -302,7 +306,7 @@
-
- /**
- * Marshals the algorithm-specific parameters to an Element and
-- * appends it to the specified parent element. By default, this method
-+ * appends it to the specified parent element. By default, this method
- * throws an exception since most SignatureMethod algorithms do not have
- * parameters. Subclasses should override it if they have parameters.
- *
-@@ -360,7 +364,6 @@
- private static byte[] convertASN1toXMLDSIG(byte asn1Bytes[])
- throws IOException {
-
-- // THIS CODE IS COPIED FROM APACHE (see copyright at top of file)
- byte rLength = asn1Bytes[3];
- int i;
-
-@@ -401,7 +404,6 @@
- private static byte[] convertXMLDSIGtoASN1(byte xmldsigBytes[])
- throws IOException {
-
-- // THIS CODE IS COPIED FROM APACHE (see copyright at top of file)
- if (xmldsigBytes.length != 40) {
- throw new IOException("Invalid XMLDSIG format of DSA signature");
- }
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperties.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperties.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperties.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperties.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMSignatureProperties.java,v 1.12 2005/05/12 19:28:32 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMSignatureProperties.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperty.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperty.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperty.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperty.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMSignatureProperty.java,v 1.14 2005/05/12 19:28:32 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMSignatureProperty.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMSignedInfo.java,v 1.30 2005/09/23 20:14:07 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMSignedInfo.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-@@ -37,6 +36,7 @@
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.OutputStream;
-+import java.security.Provider;
- import java.util.*;
- import java.util.logging.Level;
- import java.util.logging.Logger;
-@@ -126,8 +126,8 @@
- *
- * @param siElem a SignedInfo element
- */
-- public DOMSignedInfo(Element siElem, XMLCryptoContext context)
-- throws MarshalException {
-+ public DOMSignedInfo(Element siElem, XMLCryptoContext context,
-+ Provider provider) throws MarshalException {
- localSiElem = siElem;
- ownerDoc = siElem.getOwnerDocument();
-
-@@ -136,7 +136,8 @@
-
- // unmarshal CanonicalizationMethod
- Element cmElem = DOMUtils.getFirstChildElement(siElem);
-- canonicalizationMethod = new DOMCanonicalizationMethod(cmElem, context);
-+ canonicalizationMethod = new DOMCanonicalizationMethod
-+ (cmElem, context, provider);
-
- // unmarshal SignatureMethod
- Element smElem = DOMUtils.getNextSiblingElement(cmElem);
-@@ -146,7 +147,7 @@
- ArrayList refList = new ArrayList(5);
- Element refElem = DOMUtils.getNextSiblingElement(smElem);
- while (refElem != null) {
-- refList.add(new DOMReference(refElem, context));
-+ refList.add(new DOMReference(refElem, context, provider));
- refElem = DOMUtils.getNextSiblingElement(refElem);
- }
- references = Collections.unmodifiableList(refList);
-@@ -188,9 +189,8 @@
-
- DOMSubTreeData subTree = new DOMSubTreeData(localSiElem, true);
-
-- OctetStreamData data = null;
- try {
-- data = (OctetStreamData) ((DOMCanonicalizationMethod)
-+ Data data = ((DOMCanonicalizationMethod)
- canonicalizationMethod).canonicalize(subTree, context, os);
- } catch (TransformException te) {
- throw new XMLSignatureException(te);
-@@ -205,9 +205,11 @@
- char[] siBytes = new char[signedInfoBytes.length];
- try {
- isr.read(siBytes);
-- } catch (IOException ioex) {} //ignore since this is logging code
-- log.log(Level.FINE, "Canonicalized SignedInfo:\n"
-- + new String(siBytes));
-+ log.log(Level.FINE, "Canonicalized SignedInfo:\n"
-+ + new String(siBytes));
-+ } catch (IOException ioex) {
-+ log.log(Level.FINE, "IOException reading SignedInfo bytes");
-+ }
- log.log(Level.FINE, "Data to be signed/verified:"
- + Base64.encode(signedInfoBytes));
- }
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMStructure.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMStructure.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMStructure.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMStructure.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMStructure.java,v 1.11 2005/05/10 18:15:34 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMStructure.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSubTreeData.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSubTreeData.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSubTreeData.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSubTreeData.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMSubTreeData.java,v 1.2 2005/09/15 14:29:04 mullan Exp $
-+ * Copyright 2006 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMSubTreeData.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java
-@@ -1,35 +1,35 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMTransform.java,v 1.25 2005/05/10 18:15:34 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMTransform.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
- import java.io.OutputStream;
- import java.security.InvalidAlgorithmParameterException;
- import java.security.NoSuchAlgorithmException;
-+import java.security.Provider;
- import java.security.spec.AlgorithmParameterSpec;
-
- import org.w3c.dom.Document;
-@@ -68,14 +68,17 @@
- *
- * @param transElem a Transform element
- */
-- public DOMTransform(Element transElem, XMLCryptoContext context)
-- throws MarshalException {
-- Document ownerDoc = transElem.getOwnerDocument();
-+ public DOMTransform(Element transElem, XMLCryptoContext context,
-+ Provider provider) throws MarshalException {
- String algorithm = DOMUtils.getAttributeValue(transElem, "Algorithm");
- try {
- spi = TransformService.getInstance(algorithm, "DOM");
-- } catch (NoSuchAlgorithmException e) {
-- throw new MarshalException(e);
-+ } catch (NoSuchAlgorithmException e1) {
-+ try {
-+ spi = TransformService.getInstance(algorithm, "DOM", provider);
-+ } catch (NoSuchAlgorithmException e2) {
-+ throw new MarshalException(e2);
-+ }
- }
- try {
- spi.init(new javax.xml.crypto.dom.DOMStructure(transElem), context);
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMURIDereferencer.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMURIDereferencer.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMURIDereferencer.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMURIDereferencer.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMURIDereferencer.java,v 1.19 2005/09/23 20:09:34 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMURIDereferencer.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-@@ -83,11 +82,9 @@
- // this is a bit of a hack to check for registered
- // IDRefs and manually register them with Apache's IdResolver
- // map which includes builtin schema knowledge of DSig/Enc IDs
-- if (context instanceof XMLSignContext) {
-- Node referencedElem = dcc.getElementById(id);
-- if (referencedElem != null) {
-- IdResolver.registerElementById((Element) referencedElem, id);
-- }
-+ Node referencedElem = dcc.getElementById(id);
-+ if (referencedElem != null) {
-+ IdResolver.registerElementById((Element) referencedElem, id);
- }
- }
-
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMUtils.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMUtils.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMUtils.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMUtils.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMUtils.java,v 1.18 2005/05/12 19:28:34 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMUtils.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-@@ -77,7 +76,8 @@
- */
- public static Element createElement(Document doc, String tag, String nsURI,
- String prefix) {
-- String qName = prefix == null ? tag : prefix + ":" + tag;
-+ String qName = (prefix == null || prefix.length() == 0)
-+ ? tag : prefix + ":" + tag;
- return doc.createElementNS(nsURI, qName);
- }
-
-@@ -327,6 +327,7 @@
- XPathType type = (XPathType) types.get(i);
- XPathType otype = (XPathType) otypes.get(i);
- if (!type.getExpression().equals(otype.getExpression()) ||
-+ !type.getNamespaceMap().equals(otype.getNamespaceMap()) ||
- type.getFilter() != otype.getFilter()) {
- return false;
- }
-@@ -341,8 +342,8 @@
-
- private static boolean paramsEqual(XPathFilterParameterSpec spec1,
- XPathFilterParameterSpec spec2) {
--
-- return spec1.getXPath().equals(spec2.getXPath());
-+ return (spec1.getXPath().equals(spec2.getXPath()) &&
-+ spec1.getNamespaceMap().equals(spec2.getNamespaceMap()));
- }
-
- private static boolean paramsEqual(XSLTTransformParameterSpec spec1,
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMX509Data.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMX509Data.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMX509Data.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMX509Data.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMX509Data.java,v 1.20 2005/05/12 19:28:34 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMX509Data.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-@@ -53,7 +52,7 @@
- public final class DOMX509Data extends DOMStructure implements X509Data {
-
- private final List content;
-- private CertificateFactory cf; //FIX - make this static?
-+ private CertificateFactory cf;
-
- /**
- * Creates a DOMX509Data.
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMX509IssuerSerial.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMX509IssuerSerial.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMX509IssuerSerial.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMX509IssuerSerial.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMX509IssuerSerial.java,v 1.13 2005/05/10 18:15:35 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMX509IssuerSerial.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLObject.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLObject.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLObject.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLObject.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMXMLObject.java,v 1.16 2005/05/12 19:28:35 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMXMLObject.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-@@ -31,6 +30,7 @@
- import javax.xml.crypto.dom.DOMCryptoContext;
- import javax.xml.crypto.dsig.*;
-
-+import java.security.Provider;
- import java.util.*;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
-@@ -87,8 +87,8 @@
- * @param objElem an Object element
- * @throws MarshalException if there is an error when unmarshalling
- */
-- public DOMXMLObject(Element objElem, XMLCryptoContext context)
-- throws MarshalException {
-+ public DOMXMLObject(Element objElem, XMLCryptoContext context,
-+ Provider provider) throws MarshalException {
- // unmarshal attributes
- this.encoding = DOMUtils.getAttributeValue(objElem, "Encoding");
- this.id = DOMUtils.getAttributeValue(objElem, "Id");
-@@ -103,7 +103,7 @@
- Element childElem = (Element) child;
- String tag = childElem.getLocalName();
- if (tag.equals("Manifest")) {
-- content.add(new DOMManifest(childElem, context));
-+ content.add(new DOMManifest(childElem, context, provider));
- continue;
- } else if (tag.equals("SignatureProperties")) {
- content.add(new DOMSignatureProperties(childElem));
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java
-@@ -1,28 +1,26 @@
-+/*
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
-+ */
-+/*
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
- /*
- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
- */
--
- /*
- * ===========================================================================
- *
-@@ -31,7 +29,7 @@
- * ===========================================================================
- */
- /*
-- * $Id: DOMXMLSignature.java,v 1.42 2005/09/23 20:29:04 mullan Exp $
-+ * $Id: DOMXMLSignature.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-@@ -45,6 +43,7 @@
- import java.io.*;
- import java.security.InvalidKeyException;
- import java.security.Key;
-+import java.security.Provider;
- import java.util.Collections;
- import java.util.ArrayList;
- import java.util.HashMap;
-@@ -128,8 +127,8 @@
- * @param sigElem Signature element
- * @throws MarshalException if XMLSignature cannot be unmarshalled
- */
-- public DOMXMLSignature(Element sigElem, XMLCryptoContext context)
-- throws MarshalException {
-+ public DOMXMLSignature(Element sigElem, XMLCryptoContext context,
-+ Provider provider) throws MarshalException {
- localSigElem = sigElem;
- ownerDoc = localSigElem.getOwnerDocument();
-
-@@ -138,7 +137,7 @@
-
- // unmarshal SignedInfo
- Element siElem = DOMUtils.getFirstChildElement(localSigElem);
-- si = new DOMSignedInfo(siElem, context);
-+ si = new DOMSignedInfo(siElem, context, provider);
-
- // unmarshal SignatureValue
- Element sigValElem = DOMUtils.getNextSiblingElement(siElem);
-@@ -147,7 +146,7 @@
- // unmarshal KeyInfo, if specified
- Element nextSibling = DOMUtils.getNextSiblingElement(sigValElem);
- if (nextSibling != null && nextSibling.getLocalName().equals("KeyInfo")) {
-- ki = new DOMKeyInfo(nextSibling, context);
-+ ki = new DOMKeyInfo(nextSibling, context, provider);
- nextSibling = DOMUtils.getNextSiblingElement(nextSibling);
- }
-
-@@ -157,7 +156,8 @@
- } else {
- List tempObjects = new ArrayList();
- while (nextSibling != null) {
-- tempObjects.add(new DOMXMLObject(nextSibling, context));
-+ tempObjects.add
-+ (new DOMXMLObject(nextSibling, context, provider));
- nextSibling = DOMUtils.getNextSiblingElement(nextSibling);
- }
- objects = Collections.unmodifiableList(tempObjects);
-@@ -201,9 +201,7 @@
- (ownerDoc, "Signature", XMLSignature.XMLNS, dsPrefix);
-
- // append xmlns attribute
-- //XXX I think this is supposed to be automatically inserted when
-- //XXX serializing a DOM2 tree, but doesn't seem to work with JAXP/Xalan
-- if (dsPrefix == null) {
-+ if (dsPrefix == null || dsPrefix.length() == 0) {
- sigElem.setAttributeNS
- ("http://www.w3.org/2000/xmlns/", "xmlns", XMLSignature.XMLNS);
- } else {
-@@ -301,7 +299,7 @@
- Reference ref = (Reference) manRefs.get(k);
- boolean refValid = ref.validate(vc);
- if (log.isLoggable(Level.FINE)) {
-- log.log(Level.FINE, "Manifest ref["
-+ log.log(Level.FINE, "Manifest ref["
- + ref.getURI() + "] is valid: " + refValid);
- }
- validateMans &= refValid;
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMXMLSignatureFactory.java,v 1.21 2005/09/23 19:59:11 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMXMLSignatureFactory.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-@@ -33,7 +32,8 @@
- import javax.xml.crypto.dsig.keyinfo.*;
- import javax.xml.crypto.dsig.spec.*;
-
--import java.security.*;
-+import java.security.InvalidAlgorithmParameterException;
-+import java.security.NoSuchAlgorithmException;
- import java.security.spec.AlgorithmParameterSpec;
- import java.util.List;
- import org.w3c.dom.Document;
-@@ -67,7 +67,7 @@
-
- public Reference newReference(String uri, DigestMethod dm, List transforms,
- String type, String id) {
-- return new DOMReference(uri, type, dm, transforms, id);
-+ return new DOMReference(uri, type, dm, transforms, id, getProvider());
- }
-
- public Reference newReference(String uri, DigestMethod dm,
-@@ -83,7 +83,7 @@
- throw new NullPointerException("result cannot be null");
- }
- return new DOMReference
-- (uri, type, dm, appliedTransforms, result, transforms, id);
-+ (uri, type, dm, appliedTransforms, result, transforms, id, getProvider());
- }
-
- public Reference newReference(String uri, DigestMethod dm, List transforms,
-@@ -92,7 +92,7 @@
- throw new NullPointerException("digestValue cannot be null");
- }
- return new DOMReference
-- (uri, type, dm, null, null, transforms, id, digestValue);
-+ (uri, type, dm, null, null, transforms, id, digestValue, getProvider());
- }
-
- public SignedInfo newSignedInfo(CanonicalizationMethod cm,
-@@ -170,7 +170,7 @@
- "support DOM Level 2 and be namespace aware");
- }
- if (tag.equals("Signature")) {
-- return new DOMXMLSignature(element, context);
-+ return new DOMXMLSignature(element, context, getProvider());
- } else {
- throw new MarshalException("invalid Signature tag: " + tag);
- }
-@@ -235,7 +235,12 @@
- public Transform newTransform(String algorithm,
- TransformParameterSpec params) throws NoSuchAlgorithmException,
- InvalidAlgorithmParameterException {
-- TransformService spi = TransformService.getInstance(algorithm, "DOM");
-+ TransformService spi;
-+ try {
-+ spi = TransformService.getInstance(algorithm, "DOM");
-+ } catch (NoSuchAlgorithmException nsae) {
-+ spi = TransformService.getInstance(algorithm, "DOM", getProvider());
-+ }
- spi.init(params);
- return new DOMTransform(spi);
- }
-@@ -243,7 +248,12 @@
- public Transform newTransform(String algorithm,
- XMLStructure params) throws NoSuchAlgorithmException,
- InvalidAlgorithmParameterException {
-- TransformService spi = TransformService.getInstance(algorithm, "DOM");
-+ TransformService spi;
-+ try {
-+ spi = TransformService.getInstance(algorithm, "DOM");
-+ } catch (NoSuchAlgorithmException nsae) {
-+ spi = TransformService.getInstance(algorithm, "DOM", getProvider());
-+ }
- if (params == null) {
- spi.init(null);
- } else {
-@@ -255,7 +265,12 @@
- public CanonicalizationMethod newCanonicalizationMethod(String algorithm,
- C14NMethodParameterSpec params) throws NoSuchAlgorithmException,
- InvalidAlgorithmParameterException {
-- TransformService spi = TransformService.getInstance(algorithm, "DOM");
-+ TransformService spi;
-+ try {
-+ spi = TransformService.getInstance(algorithm, "DOM");
-+ } catch (NoSuchAlgorithmException nsae) {
-+ spi = TransformService.getInstance(algorithm, "DOM", getProvider());
-+ }
- spi.init(params);
- return new DOMCanonicalizationMethod(spi);
- }
-@@ -263,7 +278,12 @@
- public CanonicalizationMethod newCanonicalizationMethod(String algorithm,
- XMLStructure params) throws NoSuchAlgorithmException,
- InvalidAlgorithmParameterException {
-- TransformService spi = TransformService.getInstance(algorithm, "DOM");
-+ TransformService spi;
-+ try {
-+ spi = TransformService.getInstance(algorithm, "DOM");
-+ } catch (NoSuchAlgorithmException nsae) {
-+ spi = TransformService.getInstance(algorithm, "DOM", getProvider());
-+ }
- if (params == null) {
- spi.init(null);
- } else {
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXPathFilter2Transform.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXPathFilter2Transform.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXPathFilter2Transform.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXPathFilter2Transform.java
-@@ -1,28 +1,23 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
-+ */
-+/*
-+ * Copyright 2005 The Apache Software Foundation.
- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
- *
-- * 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).
-+ * http://www.apache.org/licenses/LICENSE-2.0
- *
-- * 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.
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
- */
--
- /*
- * ===========================================================================
- *
-@@ -31,7 +26,10 @@
- * ===========================================================================
- */
- /*
-- * $Id: DOMXPathFilter2Transform.java,v 1.18 2005/09/19 18:30:30 mullan Exp $
-+ * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMXPathFilter2Transform.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-@@ -129,7 +127,8 @@
- XPathFilter2ParameterSpec xp =
- (XPathFilter2ParameterSpec) getParameterSpec();
- String prefix = DOMUtils.getNSPrefix(context, Transform.XPATH2);
-- String qname = (prefix == null) ? "xmlns" : "xmlns:" + prefix;
-+ String qname = (prefix == null || prefix.length() == 0)
-+ ? "xmlns" : "xmlns:" + prefix;
- List list = xp.getXPathList();
- for (int i = 0, size = list.size(); i < size; i++) {
- XPathType xpathType = (XPathType) list.get(i);
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXPathTransform.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXPathTransform.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXPathTransform.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXPathTransform.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMXPathTransform.java,v 1.16 2005/05/12 19:28:35 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMXPathTransform.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXSLTTransform.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXSLTTransform.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXSLTTransform.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMXSLTTransform.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: DOMXSLTTransform.java,v 1.15 2005/05/10 18:15:36 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: DOMXSLTTransform.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/Utils.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/Utils.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/Utils.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/Utils.java
-@@ -1,29 +1,28 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
- */
- /*
-- * $Id: Utils.java,v 1.14 2005/09/23 19:49:20 mullan Exp $
-+ * Copyright 2005 The Apache Software Foundation.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+/*
-+ * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: Utils.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/dom/XMLDSigRI.java b/src/share/classes/org/jcp/xml/dsig/internal/dom/XMLDSigRI.java
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/XMLDSigRI.java
-+++ jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/XMLDSigRI.java
-@@ -1,28 +1,23 @@
- /*
-- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ * reserved comment block
-+ * DO NOT REMOVE OR ALTER!
-+ */
-+/*
-+ * Copyright 2005 The Apache Software Foundation.
- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
- *
-- * 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).
-+ * http://www.apache.org/licenses/LICENSE-2.0
- *
-- * 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.
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
- */
--
- /*
- * ===========================================================================
- *
-@@ -31,7 +26,10 @@
- * ===========================================================================
- */
- /*
-- * $Id: XMLDSigRI.java,v 1.7 2005/05/12 19:28:36 mullan Exp $
-+ * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
-+ */
-+/*
-+ * $Id: XMLDSigRI.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
- */
- package org.jcp.xml.dsig.internal.dom;
-
-@@ -86,6 +84,22 @@
- CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS +
- " MechanismType", "DOM");
-
-+ // Inclusive C14N 1.1
-+ map.put((String)"TransformService." +
-+ "http://www.w3.org/2006/12/xml-c14n11",
-+ "org.jcp.xml.dsig.internal.dom.DOMCanonicalXMLC14N11Method");
-+ map.put((String)"TransformService." +
-+ "http://www.w3.org/2006/12/xml-c14n11" +
-+ " MechanismType", "DOM");
-+
-+ // InclusiveWithComments C14N 1.1
-+ map.put((String)"TransformService." +
-+ "http://www.w3.org/2006/12/xml-c14n11#WithComments",
-+ "org.jcp.xml.dsig.internal.dom.DOMCanonicalXMLC14N11Method");
-+ map.put((String)"TransformService." +
-+ "http://www.w3.org/2006/12/xml-c14n11#WithComments" +
-+ " MechanismType", "DOM");
-+
- // Exclusive C14N
- map.put((String) "TransformService." + CanonicalizationMethod.EXCLUSIVE,
- "org.jcp.xml.dsig.internal.dom.DOMExcC14NMethod");
-diff --git a/src/share/classes/org/jcp/xml/dsig/internal/package.html b/src/share/classes/org/jcp/xml/dsig/internal/package.html
-deleted file mode 100644
---- jdk/src/share/classes/org/jcp/xml/dsig/internal/package.html
-+++ /dev/null
-@@ -1,5 +0,0 @@
--<html>
--<body>
--Contains the classes of the Reference Implementation of JSR 105.
--</body>
--</html>
-diff --git a/test/javax/xml/crypto/dsig/GenerationTests.java b/test/javax/xml/crypto/dsig/GenerationTests.java
---- jdk/test/javax/xml/crypto/dsig/GenerationTests.java
-+++ jdk/test/javax/xml/crypto/dsig/GenerationTests.java
-@@ -90,6 +90,7 @@
- private static Certificate signingCert;
- private static KeyStore ks;
- private final static String DIR = System.getProperty("test.src", ".");
-+// private final static String DIR = ".";
- private final static String DATA_DIR =
- DIR + System.getProperty("file.separator") + "data";
- private final static String KEYSTORE =
-@@ -200,6 +201,9 @@
- DOMSignContext dsc = new DOMSignContext(signingKey, envelope);
-
- sig.sign(dsc);
-+// StringWriter sw = new StringWriter();
-+// dumpDocument(doc, sw);
-+// System.out.println(sw.toString());
-
- DOMValidateContext dvc = new DOMValidateContext
- (kvks, envelope.getFirstChild());
diff --git a/java/openjdk6/files/icedtea/openjdk/6501644-icu_sync.patch b/java/openjdk6/files/icedtea/openjdk/6501644-icu_sync.patch
deleted file mode 100644
index 299a59691ef8..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/6501644-icu_sync.patch
+++ /dev/null
@@ -1,8066 +0,0 @@
-# HG changeset patch
-# User andrew
-# Date 1365739093 -3600
-# Node ID e8ed86062291305172267be90dcec2acef7c15a8
-# Parent c7ddbf756d7f35d6e782eb91b86ce2938de44fb8
-6501644: sync LayoutEngine *code* structure to match ICU
-Reviewed-by: prr
-
-diff --git a/make/sun/font/Makefile b/make/sun/font/Makefile
---- jdk/make/sun/font/Makefile
-+++ jdk/make/sun/font/Makefile
-@@ -209,3 +209,7 @@
- -I$(PLATFORM_SRC)/native/sun/java2d/d3d
- endif
-
-+# Make the Layout Engine build standalone
-+CPPFLAGS += -DLE_STANDALONE
-+
-+
-diff --git a/src/share/native/sun/font/layout/AlternateSubstSubtables.cpp b/src/share/native/sun/font/layout/AlternateSubstSubtables.cpp
---- jdk/src/share/native/sun/font/layout/AlternateSubstSubtables.cpp
-+++ jdk/src/share/native/sun/font/layout/AlternateSubstSubtables.cpp
-@@ -37,6 +37,8 @@
- #include "GlyphIterator.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- le_uint32 AlternateSubstitutionSubtable::process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter) const
- {
- // NOTE: For now, we'll just pick the first alternative...
-@@ -64,3 +66,5 @@
-
- return 0;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/AlternateSubstSubtables.h b/src/share/native/sun/font/layout/AlternateSubstSubtables.h
---- jdk/src/share/native/sun/font/layout/AlternateSubstSubtables.h
-+++ jdk/src/share/native/sun/font/layout/AlternateSubstSubtables.h
-@@ -32,12 +32,19 @@
- #ifndef __ALTERNATESUBSTITUTIONSUBTABLES_H
- #define __ALTERNATESUBSTITUTIONSUBTABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LEGlyphFilter.h"
- #include "OpenTypeTables.h"
- #include "GlyphSubstitutionTables.h"
- #include "GlyphIterator.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct AlternateSetTable
- {
- le_uint16 glyphCount;
-@@ -52,4 +59,5 @@
- le_uint32 process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter = NULL) const;
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/AnchorTables.cpp b/src/share/native/sun/font/layout/AnchorTables.cpp
---- jdk/src/share/native/sun/font/layout/AnchorTables.cpp
-+++ jdk/src/share/native/sun/font/layout/AnchorTables.cpp
-@@ -35,6 +35,8 @@
- #include "AnchorTables.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- void AnchorTable::getAnchor(LEGlyphID glyphID, const LEFontInstance *fontInstance,
- LEPoint &anchor) const
- {
-@@ -124,3 +126,6 @@
-
- fontInstance->pixelsToUnits(pixels, anchor);
- }
-+
-+U_NAMESPACE_END
-+
-diff --git a/src/share/native/sun/font/layout/AnchorTables.h b/src/share/native/sun/font/layout/AnchorTables.h
---- jdk/src/share/native/sun/font/layout/AnchorTables.h
-+++ jdk/src/share/native/sun/font/layout/AnchorTables.h
-@@ -32,10 +32,17 @@
- #ifndef __ANCHORTABLES_H
- #define __ANCHORTABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LEFontInstance.h"
- #include "OpenTypeTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct AnchorTable
- {
- le_uint16 anchorFormat;
-@@ -66,5 +73,7 @@
- void getAnchor(const LEFontInstance *fontInstance, LEPoint &anchor) const;
- };
-
-+U_NAMESPACE_END
-+#endif
-
--#endif
-+
-diff --git a/src/share/native/sun/font/layout/ArabicLayoutEngine.cpp b/src/share/native/sun/font/layout/ArabicLayoutEngine.cpp
---- jdk/src/share/native/sun/font/layout/ArabicLayoutEngine.cpp
-+++ jdk/src/share/native/sun/font/layout/ArabicLayoutEngine.cpp
-@@ -49,23 +49,25 @@
- #include "ArabicShaping.h"
- #include "CanonShaping.h"
-
-+U_NAMESPACE_BEGIN
-+
- le_bool CharSubstitutionFilter::accept(LEGlyphID glyph) const
- {
- return fFontInstance->canDisplay((LEUnicode) glyph);
- }
-
--ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(
-- const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-- le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable)
-+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ArabicOpenTypeLayoutEngine)
-+
-+ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable)
- : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable)
- {
- fFeatureMap = ArabicShaping::getFeatureMap(fFeatureMapCount);
- fFeatureOrder = TRUE;
- }
-
--ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(
-- const LEFontInstance *fontInstance,
-- le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags)
-+ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-+ le_int32 typoFlags)
- : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags)
- {
- fFeatureMap = ArabicShaping::getFeatureMap(fFeatureMapCount);
-@@ -86,9 +88,8 @@
- // Input: characters
- // Output: characters, char indices, tags
- // Returns: output character count
--le_int32 ArabicOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[],
-- le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-+le_int32 ArabicOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
- {
- if (LE_FAILURE(success)) {
- return 0;
-@@ -124,8 +125,8 @@
- return count;
- }
-
--void ArabicOpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-+void ArabicOpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse,
-+ LEGlyphStorage &glyphStorage, LEErrorCode &success)
- {
- if (LE_FAILURE(success)) {
- return;
-@@ -137,24 +138,20 @@
- }
-
- if (fGPOSTable != NULL) {
-- OpenTypeLayoutEngine::adjustGlyphPositions(chars, offset, count,
-- reverse, glyphStorage, success);
-+ OpenTypeLayoutEngine::adjustGlyphPositions(chars, offset, count, reverse, glyphStorage, success);
- } else if (fGDEFTable != NULL) {
- GDEFMarkFilter filter(fGDEFTable);
-
- adjustMarkGlyphs(glyphStorage, &filter, success);
- } else {
-- GlyphDefinitionTableHeader *gdefTable =
-- (GlyphDefinitionTableHeader *) CanonShaping::glyphDefinitionTable;
-+ GlyphDefinitionTableHeader *gdefTable = (GlyphDefinitionTableHeader *) CanonShaping::glyphDefinitionTable;
- GDEFMarkFilter filter(gdefTable);
-
- adjustMarkGlyphs(&chars[offset], count, reverse, glyphStorage, &filter, success);
- }
- }
-
--UnicodeArabicOpenTypeLayoutEngine::UnicodeArabicOpenTypeLayoutEngine(
-- const LEFontInstance *fontInstance,
-- le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags)
-+UnicodeArabicOpenTypeLayoutEngine::UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags)
- : ArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags | LE_CHAR_FILTER_FEATURE_FLAG)
- {
- fGSUBTable = (const GlyphSubstitutionTableHeader *) CanonShaping::glyphSubstitutionTable;
-@@ -168,8 +165,7 @@
- }
-
- // "glyphs", "indices" -> glyphs, indices
--le_int32 UnicodeArabicOpenTypeLayoutEngine::glyphPostProcessing(
-- LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-+le_int32 UnicodeArabicOpenTypeLayoutEngine::glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success)
- {
- if (LE_FAILURE(success)) {
- return 0;
-@@ -192,17 +188,14 @@
-
- glyphStorage.adoptCharIndicesArray(tempGlyphStorage);
-
-- ArabicOpenTypeLayoutEngine::mapCharsToGlyphs(tempChars, 0, tempGlyphCount, FALSE,
-- TRUE, glyphStorage, success);
-+ ArabicOpenTypeLayoutEngine::mapCharsToGlyphs(tempChars, 0, tempGlyphCount, FALSE, TRUE, glyphStorage, success);
-
- LE_DELETE_ARRAY(tempChars);
-
- return tempGlyphCount;
- }
-
--void UnicodeArabicOpenTypeLayoutEngine::mapCharsToGlyphs(const LEUnicode chars[],
-- le_int32 offset, le_int32 count, le_bool reverse, le_bool /*mirror*/,
-- LEGlyphStorage &glyphStorage, LEErrorCode &success)
-+void UnicodeArabicOpenTypeLayoutEngine::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool /*mirror*/, LEGlyphStorage &glyphStorage, LEErrorCode &success)
- {
- if (LE_FAILURE(success)) {
- return;
-@@ -227,9 +220,8 @@
- }
- }
-
--void UnicodeArabicOpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[],
-- le_int32 offset, le_int32 count, le_bool reverse,
-- LEGlyphStorage &glyphStorage, LEErrorCode &success)
-+void UnicodeArabicOpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse,
-+ LEGlyphStorage &glyphStorage, LEErrorCode &success)
- {
- if (LE_FAILURE(success)) {
- return;
-@@ -244,3 +236,6 @@
-
- adjustMarkGlyphs(&chars[offset], count, reverse, glyphStorage, &filter, success);
- }
-+
-+U_NAMESPACE_END
-+
-diff --git a/src/share/native/sun/font/layout/ArabicLayoutEngine.h b/src/share/native/sun/font/layout/ArabicLayoutEngine.h
---- jdk/src/share/native/sun/font/layout/ArabicLayoutEngine.h
-+++ jdk/src/share/native/sun/font/layout/ArabicLayoutEngine.h
-@@ -43,6 +43,8 @@
- #include "GlyphDefinitionTables.h"
- #include "GlyphPositioningTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- /**
- * This class implements OpenType layout for Arabic fonts. It overrides
- * the characerProcessing method to assign the correct OpenType feature
-@@ -71,8 +73,8 @@
- *
- * @internal
- */
-- ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode,
-- le_int32 languageCode, le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable);
-+ ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable);
-
- /**
- * This constructor is used when the font requires a "canned" GSUB table which can't be known
-@@ -87,8 +89,8 @@
- *
- * @internal
- */
-- ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode,
-- le_int32 languageCode, le_int32 typoFlags);
-+ ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-+ le_int32 typoFlags);
-
- /**
- * The destructor, virtual for correct polymorphic invocation.
-@@ -97,6 +99,20 @@
- */
- virtual ~ArabicOpenTypeLayoutEngine();
-
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ virtual UClassID getDynamicClassID() const;
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for this class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ static UClassID getStaticClassID();
-+
- protected:
-
- /**
-@@ -108,8 +124,7 @@
- * @param offset - the index of the first character to process
- * @param count - the number of characters to process
- * @param max - the number of characters in the input context
-- * @param rightToLeft - <code>TRUE</code> if the characters are in a
-- * right to left directional run
-+ * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
- *
- * Output parameters:
- * @param outChars - the output character arrayt
-@@ -121,9 +136,8 @@
- *
- * @internal
- */
-- virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_int32 max, le_bool rightToLeft,
-- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+ virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
- /**
- * This method applies the GPOS table if it is present, otherwise it ensures that all vowel
-@@ -142,11 +156,9 @@
- *
- * @internal
- */
-- virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+ virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-- // static void adjustMarkGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count,
-- // le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+ // static void adjustMarkGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
- };
-
-@@ -178,8 +190,8 @@
- *
- * @internal
- */
-- UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance,
-- le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags);
-+ UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-+ le_int32 typoFlags);
-
- /**
- * The destructor, virtual for correct polymorphic invocation.
-@@ -208,8 +220,7 @@
- *
- * @internal
- */
-- virtual le_int32 glyphPostProcessing(LEGlyphStorage &tempGlyphStorage,
-- LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+ virtual le_int32 glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
- /**
- * This method copies the input characters into the output glyph index array,
-@@ -227,8 +238,7 @@
- *
- * @internal
- */
-- virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_bool reverse, le_bool mirror,
-+ virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool mirror,
- LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
- /**
-@@ -245,8 +255,9 @@
- *
- * @internal
- */
-- virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+ virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
- };
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/ArabicShaping.cpp b/src/share/native/sun/font/layout/ArabicShaping.cpp
---- jdk/src/share/native/sun/font/layout/ArabicShaping.cpp
-+++ jdk/src/share/native/sun/font/layout/ArabicShaping.cpp
-@@ -35,6 +35,8 @@
- #include "LEGlyphStorage.h"
- #include "ClassDefinitionTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- // This table maps Unicode joining types to
- // ShapeTypes.
- const ArabicShaping::ShapeType ArabicShaping::shapeTypes[] =
-@@ -102,9 +104,7 @@
- #define markFeatureMask 0x00040000UL
- #define mkmkFeatureMask 0x00020000UL
-
--#define ISOL_FEATURES (isolFeatureMask | ligaFeatureMask | msetFeatureMask | \
-- markFeatureMask | ccmpFeatureMask | rligFeatureMask | caltFeatureMask | \
-- dligFeatureMask | cswhFeatureMask | cursFeatureMask | kernFeatureMask | mkmkFeatureMask)
-+#define ISOL_FEATURES (isolFeatureMask | ligaFeatureMask | msetFeatureMask | markFeatureMask | ccmpFeatureMask | rligFeatureMask | caltFeatureMask | dligFeatureMask | cswhFeatureMask | cursFeatureMask | kernFeatureMask | mkmkFeatureMask)
-
- #define SHAPE_MASK 0xF0000000UL
-
-@@ -226,3 +226,5 @@
- adjustTags(erout, 2, glyphStorage);
- }
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/ArabicShaping.h b/src/share/native/sun/font/layout/ArabicShaping.h
---- jdk/src/share/native/sun/font/layout/ArabicShaping.h
-+++ jdk/src/share/native/sun/font/layout/ArabicShaping.h
-@@ -32,12 +32,19 @@
- #ifndef __ARABICSHAPING_H
- #define __ARABICSHAPING_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "OpenTypeTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEGlyphStorage;
-
--class ArabicShaping {
-+class ArabicShaping /* not : public UObject because all methods are static */ {
- public:
- // Joining types
- enum JoiningTypes
-@@ -74,8 +81,8 @@
-
- typedef le_int32 ShapeType;
-
-- static void shape(const LEUnicode *chars, le_int32 offset, le_int32 charCount,
-- le_int32 charMax, le_bool rightToLeft, LEGlyphStorage &glyphStorage);
-+ static void shape(const LEUnicode *chars, le_int32 offset, le_int32 charCount, le_int32 charMax,
-+ le_bool rightToLeft, LEGlyphStorage &glyphStorage);
-
- static const FeatureMap *getFeatureMap(le_int32 &count);
-
-@@ -88,8 +95,8 @@
- static const le_uint8 shapingTypeTable[];
- static const ShapeType shapeTypes[];
-
-- static void adjustTags(le_int32 outIndex, le_int32 shapeOffset,
-- LEGlyphStorage &glyphStorage);
-+ static void adjustTags(le_int32 outIndex, le_int32 shapeOffset, LEGlyphStorage &glyphStorage);
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/AttachmentPosnSubtables.h b/src/share/native/sun/font/layout/AttachmentPosnSubtables.h
---- jdk/src/share/native/sun/font/layout/AttachmentPosnSubtables.h
-+++ jdk/src/share/native/sun/font/layout/AttachmentPosnSubtables.h
-@@ -32,12 +32,19 @@
- #ifndef __ATTACHMENTPOSITIONINGSUBTABLES_H
- #define __ATTACHMENTPOSITIONINGSUBTABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "OpenTypeTables.h"
- #include "GlyphPositioningTables.h"
- #include "ValueRecords.h"
- #include "GlyphIterator.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct AttachmentPositioningSubtable : GlyphPositioningSubtable
- {
- Offset baseCoverageTableOffset;
-@@ -55,4 +62,6 @@
- return getGlyphCoverage(baseCoverageTableOffset, baseGlyphID);
- }
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/CanonData.cpp b/src/share/native/sun/font/layout/CanonData.cpp
---- jdk/src/share/native/sun/font/layout/CanonData.cpp
-+++ jdk/src/share/native/sun/font/layout/CanonData.cpp
-@@ -36,6 +36,8 @@
- #include "LETypes.h"
- #include "CanonShaping.h"
-
-+U_NAMESPACE_BEGIN
-+
- const le_uint8 CanonShaping::glyphSubstitutionTable[] = {
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x01, 0x58, 0x02, 0x86, 0x00, 0x12, 0x61, 0x72, 0x61, 0x62,
- 0x00, 0x6E, 0x62, 0x65, 0x6E, 0x67, 0x00, 0x82, 0x63, 0x79, 0x72, 0x6C, 0x00, 0x8E, 0x64, 0x65,
-@@ -3773,3 +3775,5 @@
- 0x00, 0xDC, 0xD1, 0x85, 0xD1, 0x89, 0x00, 0xE6, 0xD1, 0x8A, 0xD1, 0x8B, 0x00, 0xDC, 0xD1, 0xAA,
- 0xD1, 0xAD, 0x00, 0xE6, 0xD2, 0x42, 0xD2, 0x44, 0x00, 0xE6
- };
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/CanonShaping.cpp b/src/share/native/sun/font/layout/CanonShaping.cpp
---- jdk/src/share/native/sun/font/layout/CanonShaping.cpp
-+++ jdk/src/share/native/sun/font/layout/CanonShaping.cpp
-@@ -35,8 +35,9 @@
- #include "GlyphDefinitionTables.h"
- #include "ClassDefinitionTables.h"
-
--void CanonShaping::sortMarks(le_int32 *indices,
-- const le_int32 *combiningClasses, le_int32 index, le_int32 limit)
-+U_NAMESPACE_BEGIN
-+
-+void CanonShaping::sortMarks(le_int32 *indices, const le_int32 *combiningClasses, le_int32 index, le_int32 limit)
- {
- for (le_int32 j = index + 1; j < limit; j += 1) {
- le_int32 i;
-@@ -55,13 +56,11 @@
- }
- }
-
--void CanonShaping::reorderMarks(const LEUnicode *inChars, le_int32 charCount,
-- le_bool rightToLeft, LEUnicode *outChars, LEGlyphStorage &glyphStorage)
-+void CanonShaping::reorderMarks(const LEUnicode *inChars, le_int32 charCount, le_bool rightToLeft,
-+ LEUnicode *outChars, LEGlyphStorage &glyphStorage)
- {
-- const GlyphDefinitionTableHeader *gdefTable =
-- (const GlyphDefinitionTableHeader *) glyphDefinitionTable;
-- const ClassDefinitionTable *classTable =
-- gdefTable->getMarkAttachClassDefinitionTable();
-+ const GlyphDefinitionTableHeader *gdefTable = (const GlyphDefinitionTableHeader *) glyphDefinitionTable;
-+ const ClassDefinitionTable *classTable = gdefTable->getMarkAttachClassDefinitionTable();
- le_int32 *combiningClasses = LE_NEW_ARRAY(le_int32, charCount);
- le_int32 *indices = LE_NEW_ARRAY(le_int32, charCount);
- LEErrorCode status = LE_NO_ERROR;
-@@ -103,3 +102,5 @@
- LE_DELETE_ARRAY(indices);
- LE_DELETE_ARRAY(combiningClasses);
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/CanonShaping.h b/src/share/native/sun/font/layout/CanonShaping.h
---- jdk/src/share/native/sun/font/layout/CanonShaping.h
-+++ jdk/src/share/native/sun/font/layout/CanonShaping.h
-@@ -34,20 +34,22 @@
-
- #include "LETypes.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEGlyphStorage;
-
--class CanonShaping
-+class CanonShaping /* not : public UObject because all members are static */
- {
- public:
- static const le_uint8 glyphSubstitutionTable[];
- static const le_uint8 glyphDefinitionTable[];
-
-- static void reorderMarks(const LEUnicode *inChars, le_int32 charCount,
-- le_bool rightToLeft, LEUnicode *outChars, LEGlyphStorage &glyphStorage);
-+ static void reorderMarks(const LEUnicode *inChars, le_int32 charCount, le_bool rightToLeft,
-+ LEUnicode *outChars, LEGlyphStorage &glyphStorage);
-
- private:
-- static void sortMarks(le_int32 *indices, const le_int32 *combiningClasses,
-- le_int32 index, le_int32 limit);
-+ static void sortMarks(le_int32 *indices, const le_int32 *combiningClasses, le_int32 index, le_int32 limit);
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/CharSubstitutionFilter.h b/src/share/native/sun/font/layout/CharSubstitutionFilter.h
---- jdk/src/share/native/sun/font/layout/CharSubstitutionFilter.h
-+++ jdk/src/share/native/sun/font/layout/CharSubstitutionFilter.h
-@@ -35,6 +35,8 @@
- #include "LETypes.h"
- #include "LEGlyphFilter.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEFontInstance;
-
- /**
-@@ -43,7 +45,7 @@
- *
- * @internal
- */
--class CharSubstitutionFilter : public LEGlyphFilter
-+class CharSubstitutionFilter : public UMemory, public LEGlyphFilter
- {
- private:
- /**
-@@ -98,4 +100,7 @@
- le_bool accept(LEGlyphID glyph) const;
- };
-
-+U_NAMESPACE_END
- #endif
-+
-+
-diff --git a/src/share/native/sun/font/layout/ClassDefinitionTables.cpp b/src/share/native/sun/font/layout/ClassDefinitionTables.cpp
---- jdk/src/share/native/sun/font/layout/ClassDefinitionTables.cpp
-+++ jdk/src/share/native/sun/font/layout/ClassDefinitionTables.cpp
-@@ -35,6 +35,8 @@
- #include "ClassDefinitionTables.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- le_int32 ClassDefinitionTable::getGlyphClass(LEGlyphID glyphID) const
- {
- switch(SWAPW(classFormat)) {
-@@ -139,3 +141,5 @@
-
- return FALSE;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/ClassDefinitionTables.h b/src/share/native/sun/font/layout/ClassDefinitionTables.h
---- jdk/src/share/native/sun/font/layout/ClassDefinitionTables.h
-+++ jdk/src/share/native/sun/font/layout/ClassDefinitionTables.h
-@@ -32,9 +32,16 @@
- #ifndef __CLASSDEFINITIONTABLES_H
- #define __CLASSDEFINITIONTABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "OpenTypeTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct ClassDefinitionTable
- {
- le_uint16 classFormat;
-@@ -69,4 +76,5 @@
- le_bool hasGlyphClass(le_int32 glyphClass) const;
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/ContextualGlyphInsertion.h b/src/share/native/sun/font/layout/ContextualGlyphInsertion.h
---- jdk/src/share/native/sun/font/layout/ContextualGlyphInsertion.h
-+++ jdk/src/share/native/sun/font/layout/ContextualGlyphInsertion.h
-@@ -32,12 +32,19 @@
- #ifndef __CONTEXTUALGLYPHINSERTION_H
- #define __CONTEXTUALGLYPHINSERTION_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LayoutTables.h"
- #include "StateTables.h"
- #include "MorphTables.h"
- #include "MorphStateTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct ContextualGlyphInsertionHeader : MorphStateTableHeader
- {
- };
-@@ -60,4 +67,5 @@
- ByteOffset markedInsertionListOffset;
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/ContextualGlyphSubstProc.cpp b/src/share/native/sun/font/layout/ContextualGlyphSubstProc.cpp
---- jdk/src/share/native/sun/font/layout/ContextualGlyphSubstProc.cpp
-+++ jdk/src/share/native/sun/font/layout/ContextualGlyphSubstProc.cpp
-@@ -39,6 +39,10 @@
- #include "LEGlyphStorage.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
-+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ContextualGlyphSubstitutionProcessor)
-+
- ContextualGlyphSubstitutionProcessor::ContextualGlyphSubstitutionProcessor(const MorphSubtableHeader *morphSubtableHeader)
- : StateTableProcessor(morphSubtableHeader)
- {
-@@ -57,8 +61,7 @@
- markGlyph = 0;
- }
-
--ByteOffset ContextualGlyphSubstitutionProcessor::processStateEntry(LEGlyphStorage &glyphStorage,
-- le_int32 &currGlyph, EntryTableIndex index)
-+ByteOffset ContextualGlyphSubstitutionProcessor::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index)
- {
- const ContextualGlyphSubstitutionStateEntry *entry = &entryTable[index];
- ByteOffset newState = SWAPW(entry->newStateOffset);
-@@ -97,3 +100,5 @@
- void ContextualGlyphSubstitutionProcessor::endStateTable()
- {
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/ContextualGlyphSubstProc.h b/src/share/native/sun/font/layout/ContextualGlyphSubstProc.h
---- jdk/src/share/native/sun/font/layout/ContextualGlyphSubstProc.h
-+++ jdk/src/share/native/sun/font/layout/ContextualGlyphSubstProc.h
-@@ -32,12 +32,19 @@
- #ifndef __CONTEXTUALGLYPHSUBSTITUTIONPROCESSOR_H
- #define __CONTEXTUALGLYPHSUBSTITUTIONPROCESSOR_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "MorphTables.h"
- #include "SubtableProcessor.h"
- #include "StateTableProcessor.h"
- #include "ContextualGlyphSubstitution.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEGlyphStorage;
-
- class ContextualGlyphSubstitutionProcessor : public StateTableProcessor
-@@ -52,6 +59,20 @@
- ContextualGlyphSubstitutionProcessor(const MorphSubtableHeader *morphSubtableHeader);
- virtual ~ContextualGlyphSubstitutionProcessor();
-
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ virtual UClassID getDynamicClassID() const;
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for this class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ static UClassID getStaticClassID();
-+
- private:
- ContextualGlyphSubstitutionProcessor();
-
-@@ -62,6 +83,8 @@
- le_int32 markGlyph;
-
- const ContextualGlyphSubstitutionHeader *contextualGlyphSubstitutionHeader;
-+
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/ContextualGlyphSubstitution.h b/src/share/native/sun/font/layout/ContextualGlyphSubstitution.h
---- jdk/src/share/native/sun/font/layout/ContextualGlyphSubstitution.h
-+++ jdk/src/share/native/sun/font/layout/ContextualGlyphSubstitution.h
-@@ -32,11 +32,18 @@
- #ifndef __CONTEXTUALGLYPHSUBSTITUTION_H
- #define __CONTEXTUALGLYPHSUBSTITUTION_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LayoutTables.h"
- #include "StateTables.h"
- #include "MorphTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct ContextualGlyphSubstitutionHeader : MorphStateTableHeader
- {
- ByteOffset substitutionTableOffset;
-@@ -55,4 +62,5 @@
- WordOffset currOffset;
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp b/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp
---- jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp
-+++ jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp
-@@ -24,7 +24,6 @@
- */
-
- /*
-- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-@@ -39,6 +38,8 @@
- #include "CoverageTables.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- /*
- NOTE: This could be optimized somewhat by keeping track
- of the previous sequenceIndex in the loop and doing next()
-@@ -350,7 +351,7 @@
-
- // NOTE: This could be a #define, but that seems to confuse
- // the Visual Studio .NET 2003 compiler on the calls to the
--// GlyphIterator constructor. It somehow can't decide if
-+// GlyphIterator constructor. It somehow can't decide if
- // emptyFeatureList matches an le_uint32 or an le_uint16...
- static const FeatureMask emptyFeatureList = 0x00000000UL;
-
-@@ -542,3 +543,5 @@
-
- return 0;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/ContextualSubstSubtables.h b/src/share/native/sun/font/layout/ContextualSubstSubtables.h
---- jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.h
-+++ jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.h
-@@ -32,6 +32,11 @@
- #ifndef __CONTEXTUALSUBSTITUTIONSUBTABLES_H
- #define __CONTEXTUALSUBSTITUTIONSUBTABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LEFontInstance.h"
- #include "OpenTypeTables.h"
-@@ -39,6 +44,8 @@
- #include "GlyphIterator.h"
- #include "LookupProcessor.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct SubstitutionLookupRecord
- {
- le_uint16 sequenceIndex;
-@@ -218,4 +225,5 @@
- le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/CoverageTables.cpp b/src/share/native/sun/font/layout/CoverageTables.cpp
---- jdk/src/share/native/sun/font/layout/CoverageTables.cpp
-+++ jdk/src/share/native/sun/font/layout/CoverageTables.cpp
-@@ -35,6 +35,8 @@
- #include "CoverageTables.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- le_int32 CoverageTable::getGlyphCoverage(LEGlyphID glyphID) const
- {
- switch(SWAPW(coverageFormat))
-@@ -106,3 +108,5 @@
-
- return startCoverageIndex + (ttGlyphID - firstInRange);
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/CoverageTables.h b/src/share/native/sun/font/layout/CoverageTables.h
---- jdk/src/share/native/sun/font/layout/CoverageTables.h
-+++ jdk/src/share/native/sun/font/layout/CoverageTables.h
-@@ -32,9 +32,16 @@
- #ifndef __COVERAGETABLES_H
- #define __COVERAGETABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "OpenTypeTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct CoverageTable
- {
- le_uint16 coverageFormat;
-@@ -58,5 +65,5 @@
- le_int32 getGlyphCoverage(LEGlyphID glyphID) const;
- };
-
--
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/CursiveAttachmentSubtables.cpp b/src/share/native/sun/font/layout/CursiveAttachmentSubtables.cpp
---- jdk/src/share/native/sun/font/layout/CursiveAttachmentSubtables.cpp
-+++ jdk/src/share/native/sun/font/layout/CursiveAttachmentSubtables.cpp
-@@ -37,6 +37,8 @@
- #include "OpenTypeUtilities.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- le_uint32 CursiveAttachmentSubtable::process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const
- {
- LEGlyphID glyphID = glyphIterator->getCurrGlyphID();
-@@ -68,3 +70,5 @@
-
- return 1;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/CursiveAttachmentSubtables.h b/src/share/native/sun/font/layout/CursiveAttachmentSubtables.h
---- jdk/src/share/native/sun/font/layout/CursiveAttachmentSubtables.h
-+++ jdk/src/share/native/sun/font/layout/CursiveAttachmentSubtables.h
-@@ -32,10 +32,17 @@
- #ifndef __CURSIVEATTACHMENTSUBTABLES_H
- #define __CURSIVEATTACHMENTSUBTABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "OpenTypeTables.h"
- #include "GlyphPositioningTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEFontInstance;
- class GlyphIterator;
-
-@@ -53,4 +60,7 @@
- le_uint32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
- };
-
-+U_NAMESPACE_END
- #endif
-+
-+
-diff --git a/src/share/native/sun/font/layout/DefaultCharMapper.h b/src/share/native/sun/font/layout/DefaultCharMapper.h
---- jdk/src/share/native/sun/font/layout/DefaultCharMapper.h
-+++ jdk/src/share/native/sun/font/layout/DefaultCharMapper.h
-@@ -24,7 +24,6 @@
- */
-
- /*
-- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-@@ -32,9 +31,16 @@
- #ifndef __DEFAULTCHARMAPPER_H
- #define __DEFAULTCHARMAPPER_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LEFontInstance.h"
-
-+U_NAMESPACE_BEGIN
-+
- /**
- * This class is an instance of LECharMapper which
- * implements control character filtering and bidi
-@@ -42,7 +48,7 @@
- *
- * @see LECharMapper
- */
--class DefaultCharMapper : public LECharMapper
-+class DefaultCharMapper : public UMemory, public LECharMapper
- {
- private:
- le_bool fFilterControls;
-@@ -77,4 +83,5 @@
- LEUnicode32 mapChar(LEUnicode32 ch) const;
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/DeviceTables.cpp b/src/share/native/sun/font/layout/DeviceTables.cpp
---- jdk/src/share/native/sun/font/layout/DeviceTables.cpp
-+++ jdk/src/share/native/sun/font/layout/DeviceTables.cpp
-@@ -25,6 +25,7 @@
-
- /*
- *
-+ *
- * (C) Copyright IBM Corp. 1998 - 2005 - All Rights Reserved
- *
- */
-@@ -34,6 +35,8 @@
- #include "DeviceTables.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- const le_uint16 DeviceTable::fieldMasks[] = {0x0003, 0x000F, 0x00FF};
- const le_uint16 DeviceTable::fieldSignBits[] = {0x0002, 0x0008, 0x0080};
- const le_uint16 DeviceTable::fieldBits[] = { 2, 4, 8};
-@@ -62,3 +65,5 @@
-
- return result;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/DeviceTables.h b/src/share/native/sun/font/layout/DeviceTables.h
---- jdk/src/share/native/sun/font/layout/DeviceTables.h
-+++ jdk/src/share/native/sun/font/layout/DeviceTables.h
-@@ -25,6 +25,7 @@
-
- /*
- *
-+ *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-@@ -32,10 +33,15 @@
- #ifndef __DEVICETABLES_H
- #define __DEVICETABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "OpenTypeTables.h"
--#include "GlyphIterator.h"
--#include "GlyphPositionAdjustments.h"
-+
-+U_NAMESPACE_BEGIN
-
- struct DeviceTable
- {
-@@ -52,5 +58,7 @@
- static const le_uint16 fieldBits[];
- };
-
-+U_NAMESPACE_END
-+#endif
-
--#endif
-+
-diff --git a/src/share/native/sun/font/layout/ExtensionSubtables.cpp b/src/share/native/sun/font/layout/ExtensionSubtables.cpp
---- jdk/src/share/native/sun/font/layout/ExtensionSubtables.cpp
-+++ jdk/src/share/native/sun/font/layout/ExtensionSubtables.cpp
-@@ -25,7 +25,8 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 2003 - All Rights Reserved
-+ *
-+ * (C) Copyright IBM Corp. 2002 - All Rights Reserved
- *
- */
-
-@@ -37,6 +38,9 @@
- #include "GlyphIterator.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
-+
- // FIXME: should look at the format too... maybe have a sub-class for it?
- le_uint32 ExtensionSubtable::process(const LookupProcessor *lookupProcessor, le_uint16 lookupType,
- GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const
-@@ -52,3 +56,5 @@
-
- return 0;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/ExtensionSubtables.h b/src/share/native/sun/font/layout/ExtensionSubtables.h
---- jdk/src/share/native/sun/font/layout/ExtensionSubtables.h
-+++ jdk/src/share/native/sun/font/layout/ExtensionSubtables.h
-@@ -25,6 +25,7 @@
-
- /*
- *
-+ *
- * (C) Copyright IBM Corp. 2002-2003 - All Rights Reserved
- *
- */
-@@ -32,12 +33,19 @@
- #ifndef __EXTENSIONSUBTABLES_H
- #define __EXTENSIONSUBTABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "OpenTypeTables.h"
- #include "GlyphSubstitutionTables.h"
- #include "LookupProcessor.h"
- #include "GlyphIterator.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct ExtensionSubtable //: GlyphSubstitutionSubtable
- {
- le_uint16 substFormat;
-@@ -48,4 +56,5 @@
- GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/Features.cpp b/src/share/native/sun/font/layout/Features.cpp
---- jdk/src/share/native/sun/font/layout/Features.cpp
-+++ jdk/src/share/native/sun/font/layout/Features.cpp
-@@ -25,6 +25,7 @@
-
- /*
- *
-+ *
- * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved
- *
- */
-@@ -35,6 +36,8 @@
- #include "Features.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- const FeatureTable *FeatureListTable::getFeatureTable(le_uint16 featureIndex, LETag *featureTag) const
- {
- if (featureIndex >= SWAPW(featureCount)) {
-@@ -79,3 +82,5 @@
- return 0;
- #endif
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/Features.h b/src/share/native/sun/font/layout/Features.h
---- jdk/src/share/native/sun/font/layout/Features.h
-+++ jdk/src/share/native/sun/font/layout/Features.h
-@@ -32,9 +32,16 @@
- #ifndef __FEATURES_H
- #define __FEATURES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "OpenTypeTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct FeatureRecord
- {
- ATag featureTag;
-@@ -53,9 +60,10 @@
- le_uint16 featureCount;
- FeatureRecord featureRecordArray[ANY_NUMBER];
-
-- const FeatureTable *getFeatureTable(le_uint16 featureIndex, LETag *featureTag) const;
-+ const FeatureTable *getFeatureTable(le_uint16 featureIndex, LETag *featureTag) const;
-
- const FeatureTable *getFeatureTable(LETag featureTag) const;
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/GDEFMarkFilter.cpp b/src/share/native/sun/font/layout/GDEFMarkFilter.cpp
---- jdk/src/share/native/sun/font/layout/GDEFMarkFilter.cpp
-+++ jdk/src/share/native/sun/font/layout/GDEFMarkFilter.cpp
-@@ -34,6 +34,8 @@
- #include "GDEFMarkFilter.h"
- #include "GlyphDefinitionTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- GDEFMarkFilter::GDEFMarkFilter(const GlyphDefinitionTableHeader *gdefTable)
- {
- classDefTable = gdefTable->getGlyphClassDefinitionTable();
-@@ -50,3 +52,5 @@
-
- return glyphClass == gcdMarkGlyph;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/GDEFMarkFilter.h b/src/share/native/sun/font/layout/GDEFMarkFilter.h
---- jdk/src/share/native/sun/font/layout/GDEFMarkFilter.h
-+++ jdk/src/share/native/sun/font/layout/GDEFMarkFilter.h
-@@ -32,11 +32,18 @@
- #ifndef __GDEFMARKFILTER__H
- #define __GDEFMARKFILTER__H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LEGlyphFilter.h"
- #include "GlyphDefinitionTables.h"
-
--class GDEFMarkFilter : public LEGlyphFilter
-+U_NAMESPACE_BEGIN
-+
-+class GDEFMarkFilter : public UMemory, public LEGlyphFilter
- {
- private:
- const GlyphClassDefinitionTable *classDefTable;
-@@ -51,5 +58,5 @@
- virtual le_bool accept(LEGlyphID glyph) const;
- };
-
--
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/GXLayoutEngine.cpp b/src/share/native/sun/font/layout/GXLayoutEngine.cpp
---- jdk/src/share/native/sun/font/layout/GXLayoutEngine.cpp
-+++ jdk/src/share/native/sun/font/layout/GXLayoutEngine.cpp
-@@ -23,6 +23,7 @@
- *
- */
-
-+
- /*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-@@ -36,8 +37,11 @@
-
- #include "MorphTables.h"
-
--GXLayoutEngine::GXLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode,
-- le_int32 languageCode, const MorphTableHeader *morphTable)
-+U_NAMESPACE_BEGIN
-+
-+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(GXLayoutEngine)
-+
-+GXLayoutEngine::GXLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, const MorphTableHeader *morphTable)
- : LayoutEngine(fontInstance, scriptCode, languageCode, 0), fMorphTable(morphTable)
- {
- // nothing else to do?
-@@ -49,9 +53,7 @@
- }
-
- // apply 'mort' table
--le_int32 GXLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage,
-- LEErrorCode &success)
-+le_int32 GXLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success)
- {
- if (LE_FAILURE(success)) {
- return 0;
-@@ -74,9 +76,8 @@
- }
-
- // apply positional tables
--void GXLayoutEngine::adjustGlyphPositions(const LEUnicode chars[],
-- le_int32 offset, le_int32 count, le_bool /*reverse*/,
-- LEGlyphStorage &/*glyphStorage*/, LEErrorCode &success)
-+void GXLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool /*reverse*/,
-+ LEGlyphStorage &/*glyphStorage*/, LEErrorCode &success)
- {
- if (LE_FAILURE(success)) {
- return;
-@@ -89,3 +90,5 @@
-
- // FIXME: no positional processing yet...
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/GXLayoutEngine.h b/src/share/native/sun/font/layout/GXLayoutEngine.h
---- jdk/src/share/native/sun/font/layout/GXLayoutEngine.h
-+++ jdk/src/share/native/sun/font/layout/GXLayoutEngine.h
-@@ -23,6 +23,7 @@
- *
- */
-
-+
- /*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
-@@ -37,6 +38,8 @@
-
- #include "MorphTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEFontInstance;
- class LEGlyphStorage;
-
-@@ -70,8 +73,7 @@
- *
- * @internal
- */
-- GXLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode,
-- le_int32 languageCode, const MorphTableHeader *morphTable);
-+ GXLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, const MorphTableHeader *morphTable);
-
- /**
- * The destructor, virtual for correct polymorphic invocation.
-@@ -80,6 +82,20 @@
- */
- virtual ~GXLayoutEngine();
-
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ virtual UClassID getDynamicClassID() const;
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for this class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ static UClassID getStaticClassID();
-+
- protected:
-
- /**
-@@ -99,10 +115,8 @@
- * @param offset - the index of the first character to process
- * @param count - the number of characters to process
- * @param max - the number of characters in the input context
-- * @param rightToLeft - <code>TRUE</code> if the text is in a
-- * right to left directional run
-- * @param glyphStorage - the glyph storage object. The glyph
-- * and char index arrays will be set.
-+ * @param rightToLeft - <code>TRUE</code> if the text is in a right to left directional run
-+ * @param glyphStorage - the glyph storage object. The glyph and char index arrays will be set.
- *
- * Output parameters:
- * @param success - set to an error code if the operation fails
-@@ -111,8 +125,7 @@
- *
- * @internal
- */
-- virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_int32 max, le_bool rightToLeft,
-+ virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
- LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
- /**
-@@ -120,16 +133,18 @@
- * 'kern', 'trak', 'bsln', 'opbd' and 'just' tables.
- *
- * Input parameters:
-- * @param glyphStorage - the object holding the glyph storage.
-- * The positions will be updated as needed.
-+ * @param glyphStorage - the object holding the glyph storage. The positions will be updated as needed.
- *
- * Output parameters:
- * @param success - set to an error code if the operation fails
- *
- * @internal
- */
-- virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+ virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse,
-+ LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+
- };
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/GlyphDefinitionTables.cpp b/src/share/native/sun/font/layout/GlyphDefinitionTables.cpp
---- jdk/src/share/native/sun/font/layout/GlyphDefinitionTables.cpp
-+++ jdk/src/share/native/sun/font/layout/GlyphDefinitionTables.cpp
-@@ -34,6 +34,8 @@
- #include "GlyphDefinitionTables.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- const GlyphClassDefinitionTable *GlyphDefinitionTableHeader::getGlyphClassDefinitionTable() const
- {
- return (const GlyphClassDefinitionTable *) ((char *) this + SWAPW(glyphClassDefOffset));
-@@ -53,3 +55,5 @@
- {
- return (const MarkAttachClassDefinitionTable *) ((char *) this + SWAPW(MarkAttachClassDefOffset));
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/GlyphDefinitionTables.h b/src/share/native/sun/font/layout/GlyphDefinitionTables.h
---- jdk/src/share/native/sun/font/layout/GlyphDefinitionTables.h
-+++ jdk/src/share/native/sun/font/layout/GlyphDefinitionTables.h
-@@ -32,10 +32,17 @@
- #ifndef __GLYPHDEFINITIONTABLES_H
- #define __GLYPHDEFINITIONTABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "OpenTypeTables.h"
- #include "ClassDefinitionTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- typedef ClassDefinitionTable GlyphClassDefinitionTable;
-
- enum GlyphClassDefinitions
-@@ -110,4 +117,5 @@
- const MarkAttachClassDefinitionTable *getMarkAttachClassDefinitionTable() const;
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/GlyphIterator.cpp b/src/share/native/sun/font/layout/GlyphIterator.cpp
---- jdk/src/share/native/sun/font/layout/GlyphIterator.cpp
-+++ jdk/src/share/native/sun/font/layout/GlyphIterator.cpp
-@@ -38,11 +38,10 @@
- #include "Lookups.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-
--GlyphIterator::GlyphIterator(LEGlyphStorage &theGlyphStorage,
-- GlyphPositionAdjustments *theGlyphPositionAdjustments,
-- le_bool rightToLeft, le_uint16 theLookupFlags, FeatureMask theFeatureMask,
-- const GlyphDefinitionTableHeader *theGlyphDefinitionTableHeader)
-+GlyphIterator::GlyphIterator(LEGlyphStorage &theGlyphStorage, GlyphPositionAdjustments *theGlyphPositionAdjustments, le_bool rightToLeft, le_uint16 theLookupFlags,
-+ FeatureMask theFeatureMask, const GlyphDefinitionTableHeader *theGlyphDefinitionTableHeader)
- : direction(1), position(-1), nextLimit(-1), prevLimit(-1),
- glyphStorage(theGlyphStorage), glyphPositionAdjustments(theGlyphPositionAdjustments),
- srcIndex(-1), destIndex(-1), lookupFlags(theLookupFlags), featureMask(theFeatureMask),
-@@ -262,8 +261,8 @@
- glyphPositionAdjustments->setBaseOffset(position, baseOffset);
- }
-
--void GlyphIterator::adjustCurrGlyphPositionAdjustment(float xPlacementAdjust,
-- float yPlacementAdjust, float xAdvanceAdjust, float yAdvanceAdjust)
-+void GlyphIterator::adjustCurrGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust,
-+ float xAdvanceAdjust, float yAdvanceAdjust)
- {
- if (direction < 0) {
- if (position <= nextLimit || position >= prevLimit) {
-@@ -281,8 +280,8 @@
- glyphPositionAdjustments->adjustYAdvance(position, yAdvanceAdjust);
- }
-
--void GlyphIterator::setCurrGlyphPositionAdjustment(float xPlacementAdjust,
-- float yPlacementAdjust, float xAdvanceAdjust, float yAdvanceAdjust)
-+void GlyphIterator::setCurrGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust,
-+ float xAdvanceAdjust, float yAdvanceAdjust)
- {
- if (direction < 0) {
- if (position <= nextLimit || position >= prevLimit) {
-@@ -484,10 +483,11 @@
-
- do {
- newPosition -= direction;
-- } while (newPosition != prevLimit && glyphStorage[newPosition] != 0xFFFE &&
-- filterGlyph(newPosition));
-+ } while (newPosition != prevLimit && glyphStorage[newPosition] != 0xFFFE && filterGlyph(newPosition));
-
- position = newPosition;
-
- return position != prevLimit;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/GlyphIterator.h b/src/share/native/sun/font/layout/GlyphIterator.h
---- jdk/src/share/native/sun/font/layout/GlyphIterator.h
-+++ jdk/src/share/native/sun/font/layout/GlyphIterator.h
-@@ -32,26 +32,24 @@
- #ifndef __GLYPHITERATOR_H
- #define __GLYPHITERATOR_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "OpenTypeTables.h"
- #include "GlyphDefinitionTables.h"
-
--struct InsertionRecord
--{
-- InsertionRecord *next;
-- le_int32 position;
-- le_int32 count;
-- LEGlyphID glyphs[ANY_NUMBER];
--};
-+U_NAMESPACE_BEGIN
-
- class LEGlyphStorage;
- class GlyphPositionAdjustments;
-
--class GlyphIterator {
-+class GlyphIterator : public UMemory {
- public:
-- GlyphIterator(LEGlyphStorage &theGlyphStorage, GlyphPositionAdjustments *theGlyphPositionAdjustments,
-- le_bool rightToLeft, le_uint16 theLookupFlags, FeatureMask theFeatureMask,
-- const GlyphDefinitionTableHeader *theGlyphDefinitionTableHeader);
-+ GlyphIterator(LEGlyphStorage &theGlyphStorage, GlyphPositionAdjustments *theGlyphPositionAdjustments, le_bool rightToLeft, le_uint16 theLookupFlags,
-+ FeatureMask theFeatureMask, const GlyphDefinitionTableHeader *theGlyphDefinitionTableHeader);
-
- GlyphIterator(GlyphIterator &that);
-
-@@ -122,4 +120,5 @@
- GlyphIterator &operator=(const GlyphIterator &other); // forbid copying of this class
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/GlyphLookupTables.cpp b/src/share/native/sun/font/layout/GlyphLookupTables.cpp
---- jdk/src/share/native/sun/font/layout/GlyphLookupTables.cpp
-+++ jdk/src/share/native/sun/font/layout/GlyphLookupTables.cpp
-@@ -35,6 +35,8 @@
- #include "GlyphLookupTables.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- le_bool GlyphLookupTableHeader::coversScript(LETag scriptTag) const
- {
- const ScriptListTable *scriptListTable = (const ScriptListTable *) ((char *)this + SWAPW(scriptListOffset));
-@@ -51,3 +53,5 @@
- // Note: don't have to SWAPW langSysTable->featureCount to check for non-zero.
- return langSysTable != NULL && langSysTable->featureCount != 0;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/GlyphLookupTables.h b/src/share/native/sun/font/layout/GlyphLookupTables.h
---- jdk/src/share/native/sun/font/layout/GlyphLookupTables.h
-+++ jdk/src/share/native/sun/font/layout/GlyphLookupTables.h
-@@ -32,9 +32,16 @@
- #ifndef __GLYPHLOOKUPTABLES_H
- #define __GLYPHLOOKUPTABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "OpenTypeTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct GlyphLookupTableHeader
- {
- fixed32 version;
-@@ -46,4 +53,7 @@
- le_bool coversScriptAndLanguage(LETag scriptTag, LETag languageTag, le_bool exactMatch = FALSE) const;
- };
-
-+U_NAMESPACE_END
-+
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/GlyphPositionAdjustments.cpp b/src/share/native/sun/font/layout/GlyphPositionAdjustments.cpp
---- jdk/src/share/native/sun/font/layout/GlyphPositionAdjustments.cpp
-+++ jdk/src/share/native/sun/font/layout/GlyphPositionAdjustments.cpp
-@@ -34,6 +34,8 @@
- #include "LEGlyphStorage.h"
- #include "LEFontInstance.h"
-
-+U_NAMESPACE_BEGIN
-+
- #define CHECK_ALLOCATE_ARRAY(array, type, size) \
- if (array == NULL) { \
- array = (type *) new type[size]; \
-@@ -185,3 +187,5 @@
-
- return NULL;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/GlyphPositionAdjustments.h b/src/share/native/sun/font/layout/GlyphPositionAdjustments.h
---- jdk/src/share/native/sun/font/layout/GlyphPositionAdjustments.h
-+++ jdk/src/share/native/sun/font/layout/GlyphPositionAdjustments.h
-@@ -32,16 +32,23 @@
- #ifndef __GLYPHPOSITIONADJUSTMENTS_H
- #define __GLYPHPOSITIONADJUSTMENTS_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "OpenTypeTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEGlyphStorage;
- class LEFontInstance;
-
--class GlyphPositionAdjustments
-+class GlyphPositionAdjustments : public UMemory
- {
- private:
-- class Adjustment {
-+ class Adjustment : public UMemory {
- public:
-
- inline Adjustment();
-@@ -78,7 +85,7 @@
- // allow copying of this class because all of its fields are simple types
- };
-
-- class EntryExitPoint
-+ class EntryExitPoint : public UMemory
- {
- public:
- inline EntryExitPoint();
-@@ -144,14 +151,11 @@
- inline void adjustXAdvance(le_int32 index, float xAdjustment);
- inline void adjustYAdvance(le_int32 index, float yAdjustment);
-
-- void setEntryPoint(le_int32 index, LEPoint &newEntryPoint,
-- le_bool baselineIsLogicalEnd);
-- void setExitPoint(le_int32 index, LEPoint &newExitPoint,
-- le_bool baselineIsLogicalEnd);
-+ void setEntryPoint(le_int32 index, LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd);
-+ void setExitPoint(le_int32 index, LEPoint &newExitPoint, le_bool baselineIsLogicalEnd);
- void setCursiveGlyph(le_int32 index, le_bool baselineIsLogicalEnd);
-
-- void applyCursiveAdjustments(LEGlyphStorage &glyphStorage, le_bool rightToLeft,
-- const LEFontInstance *fontInstance);
-+ void applyCursiveAdjustments(LEGlyphStorage &glyphStorage, le_bool rightToLeft, const LEFontInstance *fontInstance);
- };
-
- inline GlyphPositionAdjustments::Adjustment::Adjustment()
-@@ -160,10 +164,8 @@
- // nothing else to do!
- }
-
--inline GlyphPositionAdjustments::Adjustment::Adjustment(float xPlace, float yPlace,
-- float xAdv, float yAdv, le_int32 baseOff)
-- : xPlacement(xPlace), yPlacement(yPlace), xAdvance(xAdv), yAdvance(yAdv),
-- baseOffset(baseOff)
-+inline GlyphPositionAdjustments::Adjustment::Adjustment(float xPlace, float yPlace, float xAdv, float yAdv, le_int32 baseOff)
-+ : xPlacement(xPlace), yPlacement(yPlace), xAdvance(xAdv), yAdvance(yAdv), baseOffset(baseOff)
- {
- // nothing else to do!
- }
-@@ -246,7 +248,7 @@
- inline GlyphPositionAdjustments::EntryExitPoint::EntryExitPoint()
- : fFlags(0)
- {
-- fEntryPoint.fX = fEntryPoint.fY = fExitPoint.fX = fEntryPoint.fY = 0;
-+ fEntryPoint.fX = fEntryPoint.fY = fExitPoint.fX = fExitPoint.fY = 0;
- }
-
- inline GlyphPositionAdjustments::EntryExitPoint::~EntryExitPoint()
-@@ -264,12 +266,10 @@
- return (fFlags & EEF_BASELINE_IS_LOGICAL_END) != 0;
- }
-
--inline void GlyphPositionAdjustments::EntryExitPoint::setEntryPoint(
-- LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd)
-+inline void GlyphPositionAdjustments::EntryExitPoint::setEntryPoint(LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd)
- {
- if (baselineIsLogicalEnd) {
-- fFlags |= (EEF_HAS_ENTRY_POINT | EEF_IS_CURSIVE_GLYPH |
-- EEF_BASELINE_IS_LOGICAL_END);
-+ fFlags |= (EEF_HAS_ENTRY_POINT | EEF_IS_CURSIVE_GLYPH | EEF_BASELINE_IS_LOGICAL_END);
- } else {
- fFlags |= (EEF_HAS_ENTRY_POINT | EEF_IS_CURSIVE_GLYPH);
- }
-@@ -277,12 +277,10 @@
- fEntryPoint = newEntryPoint;
- }
-
--inline void GlyphPositionAdjustments::EntryExitPoint::setExitPoint(
-- LEPoint &newExitPoint, le_bool baselineIsLogicalEnd)
-+inline void GlyphPositionAdjustments::EntryExitPoint::setExitPoint(LEPoint &newExitPoint, le_bool baselineIsLogicalEnd)
- {
- if (baselineIsLogicalEnd) {
-- fFlags |= (EEF_HAS_EXIT_POINT | EEF_IS_CURSIVE_GLYPH |
-- EEF_BASELINE_IS_LOGICAL_END);
-+ fFlags |= (EEF_HAS_EXIT_POINT | EEF_IS_CURSIVE_GLYPH | EEF_BASELINE_IS_LOGICAL_END);
- } else {
- fFlags |= (EEF_HAS_EXIT_POINT | EEF_IS_CURSIVE_GLYPH);
- }
-@@ -290,8 +288,7 @@
- fExitPoint = newExitPoint;
- }
-
--inline void GlyphPositionAdjustments::EntryExitPoint::setCursiveGlyph(
-- le_bool baselineIsLogicalEnd)
-+inline void GlyphPositionAdjustments::EntryExitPoint::setCursiveGlyph(le_bool baselineIsLogicalEnd)
- {
- if (baselineIsLogicalEnd) {
- fFlags |= (EEF_IS_CURSIVE_GLYPH | EEF_BASELINE_IS_LOGICAL_END);
-@@ -386,4 +383,5 @@
- return fEntryExitPoints != NULL;
- }
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/GlyphPositioningTables.cpp b/src/share/native/sun/font/layout/GlyphPositioningTables.cpp
---- jdk/src/share/native/sun/font/layout/GlyphPositioningTables.cpp
-+++ jdk/src/share/native/sun/font/layout/GlyphPositioningTables.cpp
-@@ -24,7 +24,6 @@
- */
-
- /*
-- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-@@ -40,18 +39,18 @@
- #include "LEGlyphStorage.h"
- #include "GlyphPositionAdjustments.h"
-
--void GlyphPositioningTableHeader::process(LEGlyphStorage &glyphStorage,
-- GlyphPositionAdjustments *glyphPositionAdjustments, le_bool rightToLeft,
-- LETag scriptTag, LETag languageTag,
-- const GlyphDefinitionTableHeader *glyphDefinitionTableHeader,
-- const LEFontInstance *fontInstance,
-- const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) const
-+U_NAMESPACE_BEGIN
-+
-+void GlyphPositioningTableHeader::process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments, le_bool rightToLeft,
-+ LETag scriptTag, LETag languageTag,
-+ const GlyphDefinitionTableHeader *glyphDefinitionTableHeader,
-+ const LEFontInstance *fontInstance, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) const
- {
-- GlyphPositioningLookupProcessor processor(this, scriptTag, languageTag, featureMap,
-- featureMapCount, featureOrder);
-+ GlyphPositioningLookupProcessor processor(this, scriptTag, languageTag, featureMap, featureMapCount, featureOrder);
-
-- processor.process(glyphStorage, glyphPositionAdjustments, rightToLeft,
-- glyphDefinitionTableHeader, fontInstance);
-+ processor.process(glyphStorage, glyphPositionAdjustments, rightToLeft, glyphDefinitionTableHeader, fontInstance);
-
- glyphPositionAdjustments->applyCursiveAdjustments(glyphStorage, rightToLeft, fontInstance);
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/GlyphPositioningTables.h b/src/share/native/sun/font/layout/GlyphPositioningTables.h
---- jdk/src/share/native/sun/font/layout/GlyphPositioningTables.h
-+++ jdk/src/share/native/sun/font/layout/GlyphPositioningTables.h
-@@ -24,7 +24,6 @@
- */
-
- /*
-- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-@@ -32,11 +31,18 @@
- #ifndef __GLYPHPOSITIONINGTABLES_H
- #define __GLYPHPOSITIONINGTABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "OpenTypeTables.h"
- #include "Lookups.h"
- #include "GlyphLookupTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEFontInstance;
- class LEGlyphStorage;
- class LEGlyphFilter;
-@@ -45,12 +51,10 @@
-
- struct GlyphPositioningTableHeader : public GlyphLookupTableHeader
- {
-- void process(LEGlyphStorage &glyphStorage,
-- GlyphPositionAdjustments *glyphPositionAdjustments,
-+ void process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments,
- le_bool rightToLeft, LETag scriptTag, LETag languageTag,
- const GlyphDefinitionTableHeader *glyphDefinitionTableHeader,
-- const LEFontInstance *fontInstance,
-- const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) const;
-+ const LEFontInstance *fontInstance, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) const;
- };
-
- enum GlyphPositioningSubtableTypes
-@@ -68,4 +72,5 @@
-
- typedef LookupSubtable GlyphPositioningSubtable;
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/GlyphPosnLookupProc.cpp b/src/share/native/sun/font/layout/GlyphPosnLookupProc.cpp
---- jdk/src/share/native/sun/font/layout/GlyphPosnLookupProc.cpp
-+++ jdk/src/share/native/sun/font/layout/GlyphPosnLookupProc.cpp
-@@ -24,7 +24,6 @@
- */
-
- /*
-- *
- * (C) Copyright IBM Corp. 1998 - 2005 - All Rights Reserved
- *
- */
-@@ -50,6 +49,8 @@
- #include "GlyphPosnLookupProc.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- // Aside from the names, the contextual positioning subtables are
- // the same as the contextual substitution subtables.
- typedef ContextualSubstitutionSubtable ContextualPositioningSubtable;
-@@ -57,8 +58,7 @@
-
- GlyphPositioningLookupProcessor::GlyphPositioningLookupProcessor(
- const GlyphPositioningTableHeader *glyphPositioningTableHeader,
-- LETag scriptTag, LETag languageTag,
-- const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder)
-+ LETag scriptTag, LETag languageTag, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder)
- : LookupProcessor(
- (char *) glyphPositioningTableHeader,
- SWAPW(glyphPositioningTableHeader->scriptListOffset),
-@@ -166,3 +166,5 @@
- GlyphPositioningLookupProcessor::~GlyphPositioningLookupProcessor()
- {
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/GlyphPosnLookupProc.h b/src/share/native/sun/font/layout/GlyphPosnLookupProc.h
---- jdk/src/share/native/sun/font/layout/GlyphPosnLookupProc.h
-+++ jdk/src/share/native/sun/font/layout/GlyphPosnLookupProc.h
-@@ -24,7 +24,6 @@
- */
-
- /*
-- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-@@ -32,6 +31,11 @@
- #ifndef __GLYPHPOSITIONINGLOOKUPPROCESSOR_H
- #define __GLYPHPOSITIONINGLOOKUPPROCESSOR_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LEFontInstance.h"
- #include "OpenTypeTables.h"
-@@ -42,12 +46,13 @@
- #include "GlyphIterator.h"
- #include "LookupProcessor.h"
-
-+U_NAMESPACE_BEGIN
-+
- class GlyphPositioningLookupProcessor : public LookupProcessor
- {
- public:
- GlyphPositioningLookupProcessor(const GlyphPositioningTableHeader *glyphPositioningTableHeader,
-- LETag scriptTag, LETag languageTag,
-- const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder);
-+ LETag scriptTag, LETag languageTag, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder);
-
- virtual ~GlyphPositioningLookupProcessor();
-
-@@ -63,4 +68,5 @@
- GlyphPositioningLookupProcessor &operator=(const GlyphPositioningLookupProcessor &other); // forbid copying of this class
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/GlyphSubstLookupProc.cpp b/src/share/native/sun/font/layout/GlyphSubstLookupProc.cpp
---- jdk/src/share/native/sun/font/layout/GlyphSubstLookupProc.cpp
-+++ jdk/src/share/native/sun/font/layout/GlyphSubstLookupProc.cpp
-@@ -48,17 +48,17 @@
- #include "GlyphSubstLookupProc.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- GlyphSubstitutionLookupProcessor::GlyphSubstitutionLookupProcessor(
- const GlyphSubstitutionTableHeader *glyphSubstitutionTableHeader,
-- LETag scriptTag, LETag languageTag, const LEGlyphFilter *filter,
-- const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder)
-+ LETag scriptTag, LETag languageTag, const LEGlyphFilter *filter, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder)
- : LookupProcessor(
- (char *) glyphSubstitutionTableHeader,
- SWAPW(glyphSubstitutionTableHeader->scriptListOffset),
- SWAPW(glyphSubstitutionTableHeader->featureListOffset),
- SWAPW(glyphSubstitutionTableHeader->lookupListOffset),
-- scriptTag, languageTag, featureMap, featureMapCount, featureOrder)
-- , fFilter(filter)
-+ scriptTag, languageTag, featureMap, featureMapCount, featureOrder), fFilter(filter)
- {
- // anything?
- }
-@@ -143,3 +143,5 @@
- GlyphSubstitutionLookupProcessor::~GlyphSubstitutionLookupProcessor()
- {
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/GlyphSubstLookupProc.h b/src/share/native/sun/font/layout/GlyphSubstLookupProc.h
---- jdk/src/share/native/sun/font/layout/GlyphSubstLookupProc.h
-+++ jdk/src/share/native/sun/font/layout/GlyphSubstLookupProc.h
-@@ -24,7 +24,6 @@
- */
-
- /*
-- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-@@ -32,6 +31,11 @@
- #ifndef __GLYPHSUBSTITUTIONLOOKUPPROCESSOR_H
- #define __GLYPHSUBSTITUTIONLOOKUPPROCESSOR_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LEGlyphFilter.h"
- #include "LEFontInstance.h"
-@@ -43,12 +47,13 @@
- #include "GlyphIterator.h"
- #include "LookupProcessor.h"
-
-+U_NAMESPACE_BEGIN
-+
- class GlyphSubstitutionLookupProcessor : public LookupProcessor
- {
- public:
- GlyphSubstitutionLookupProcessor(const GlyphSubstitutionTableHeader *glyphSubstitutionTableHeader,
-- LETag scriptTag, LETag languageTag, const LEGlyphFilter *filter,
-- const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder);
-+ LETag scriptTag, LETag languageTag, const LEGlyphFilter *filter, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder);
-
- virtual ~GlyphSubstitutionLookupProcessor();
-
-@@ -65,4 +70,5 @@
- GlyphSubstitutionLookupProcessor &operator=(const GlyphSubstitutionLookupProcessor &other); // forbid copying of this class
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/GlyphSubstitutionTables.cpp b/src/share/native/sun/font/layout/GlyphSubstitutionTables.cpp
---- jdk/src/share/native/sun/font/layout/GlyphSubstitutionTables.cpp
-+++ jdk/src/share/native/sun/font/layout/GlyphSubstitutionTables.cpp
-@@ -40,14 +40,15 @@
- #include "LEGlyphStorage.h"
- #include "LESwaps.h"
-
--le_int32 GlyphSubstitutionTableHeader::process(LEGlyphStorage &glyphStorage,
-- le_bool rightToLeft, LETag scriptTag, LETag languageTag,
-- const GlyphDefinitionTableHeader *glyphDefinitionTableHeader,
-- const LEGlyphFilter *filter, const FeatureMap *featureMap,
-- le_int32 featureMapCount, le_bool featureOrder) const
-+U_NAMESPACE_BEGIN
-+
-+le_int32 GlyphSubstitutionTableHeader::process(LEGlyphStorage &glyphStorage, le_bool rightToLeft, LETag scriptTag, LETag languageTag,
-+ const GlyphDefinitionTableHeader *glyphDefinitionTableHeader,
-+ const LEGlyphFilter *filter, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) const
- {
-- GlyphSubstitutionLookupProcessor processor(this, scriptTag, languageTag, filter, featureMap,
-- featureMapCount, featureOrder);
-+ GlyphSubstitutionLookupProcessor processor(this, scriptTag, languageTag, filter, featureMap, featureMapCount, featureOrder);
-
- return processor.process(glyphStorage, NULL, rightToLeft, glyphDefinitionTableHeader, NULL);
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/GlyphSubstitutionTables.h b/src/share/native/sun/font/layout/GlyphSubstitutionTables.h
---- jdk/src/share/native/sun/font/layout/GlyphSubstitutionTables.h
-+++ jdk/src/share/native/sun/font/layout/GlyphSubstitutionTables.h
-@@ -32,22 +32,27 @@
- #ifndef __GLYPHSUBSTITUTIONTABLES_H
- #define __GLYPHSUBSTITUTIONTABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "OpenTypeTables.h"
- #include "Lookups.h"
- #include "GlyphLookupTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEGlyphStorage;
- class LEGlyphFilter;
- struct GlyphDefinitionTableHeader;
-
- struct GlyphSubstitutionTableHeader : public GlyphLookupTableHeader
- {
-- le_int32 process(LEGlyphStorage &glyphStorage,
-- le_bool rightToLeft, LETag scriptTag, LETag languageTag,
-- const GlyphDefinitionTableHeader *glyphDefinitionTableHeader,
-- const LEGlyphFilter *filter, const FeatureMap *featureMap,
-- le_int32 featureMapCount, le_bool featureOrder) const;
-+ le_int32 process(LEGlyphStorage &glyphStorage, le_bool rightToLeft, LETag scriptTag, LETag languageTag,
-+ const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, const LEGlyphFilter *filter,
-+ const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) const;
- };
-
- enum GlyphSubstitutionSubtableTypes
-@@ -64,4 +69,5 @@
-
- typedef LookupSubtable GlyphSubstitutionSubtable;
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/HanLayoutEngine.cpp b/src/share/native/sun/font/layout/HanLayoutEngine.cpp
---- jdk/src/share/native/sun/font/layout/HanLayoutEngine.cpp
-+++ jdk/src/share/native/sun/font/layout/HanLayoutEngine.cpp
-@@ -24,7 +24,6 @@
- */
-
- /*
-- *
- * HanLayoutEngine.cpp: OpenType processing for Han fonts.
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved.
-@@ -41,6 +40,10 @@
- #include "LEGlyphStorage.h"
- #include "OpenTypeTables.h"
-
-+U_NAMESPACE_BEGIN
-+
-+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(HanOpenTypeLayoutEngine)
-+
- #define loclFeatureTag LE_LOCL_FEATURE_TAG
- #define smplFeatureTag LE_SMPL_FEATURE_TAG
- #define tradFeatureTag LE_TRAD_FEATURE_TAG
-@@ -60,9 +63,8 @@
-
- #define features (loclFeatureMask)
-
--HanOpenTypeLayoutEngine::HanOpenTypeLayoutEngine(const LEFontInstance *fontInstance,
-- le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags,
-- const GlyphSubstitutionTableHeader *gsubTable)
-+HanOpenTypeLayoutEngine::HanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable)
- : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable)
- {
- fFeatureMap = featureMap;
-@@ -74,9 +76,8 @@
- // nothing to do
- }
-
--le_int32 HanOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[],
-- le_int32 offset, le_int32 count, le_int32 max, le_bool /*rightToLeft*/,
-- LEUnicode *&/*outChars*/, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-+le_int32 HanOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool /*rightToLeft*/,
-+ LEUnicode *&/*outChars*/, LEGlyphStorage &glyphStorage, LEErrorCode &success)
- {
- if (LE_FAILURE(success)) {
- return 0;
-@@ -104,3 +105,5 @@
-
- return count;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/HanLayoutEngine.h b/src/share/native/sun/font/layout/HanLayoutEngine.h
---- jdk/src/share/native/sun/font/layout/HanLayoutEngine.h
-+++ jdk/src/share/native/sun/font/layout/HanLayoutEngine.h
-@@ -23,8 +23,8 @@
- *
- */
-
-+
- /*
-- *
- * HanLayoutEngine.h: OpenType processing for Han fonts.
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved.
-@@ -40,6 +40,8 @@
-
- #include "GlyphSubstitutionTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEGlyphStorage;
-
- /**
-@@ -69,9 +71,8 @@
- *
- * @internal
- */
-- HanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode,
-- le_int32 languageCode,
-- le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable);
-+ HanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable);
-
-
- /**
-@@ -81,6 +82,20 @@
- */
- virtual ~HanOpenTypeLayoutEngine();
-
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ virtual UClassID getDynamicClassID() const;
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for this class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ static UClassID getStaticClassID();
-+
- protected:
-
- /**
-@@ -92,10 +107,8 @@
- * @param offset - the index of the first character to process
- * @param count - the number of characters to process
- * @param max - the number of characters in the input context
-- * @param rightToLeft - <code>TRUE</code> if the characters are in a
-- * right to left directional run
-- * @param glyphStorage - the object holding the glyph storage. The char
-- * index and auxillary data arrays will be set.
-+ * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
-+ * @param glyphStorage - the object holding the glyph storage. The char index and auxillary data arrays will be set.
- *
- * Output parameters:
- * @param outChars - the output character arrayt
-@@ -107,9 +120,10 @@
- *
- * @internal
- */
-- virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_int32 max, le_bool rightToLeft,
-- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+ virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/IndicClassTables.cpp b/src/share/native/sun/font/layout/IndicClassTables.cpp
---- jdk/src/share/native/sun/font/layout/IndicClassTables.cpp
-+++ jdk/src/share/native/sun/font/layout/IndicClassTables.cpp
-@@ -35,6 +35,8 @@
- #include "OpenTypeUtilities.h"
- #include "IndicReordering.h"
-
-+U_NAMESPACE_BEGIN
-+
- // Split matra table indices
- #define _x1 (1 << CF_INDEX_SHIFT)
- #define _x2 (2 << CF_INDEX_SHIFT)
-@@ -385,3 +387,5 @@
-
- return classTable->getWorstCaseExpansion();
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/IndicLayoutEngine.cpp b/src/share/native/sun/font/layout/IndicLayoutEngine.cpp
---- jdk/src/share/native/sun/font/layout/IndicLayoutEngine.cpp
-+++ jdk/src/share/native/sun/font/layout/IndicLayoutEngine.cpp
-@@ -45,20 +45,20 @@
-
- #include "IndicReordering.h"
-
--IndicOpenTypeLayoutEngine::IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance,
-- le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags,
-- const GlyphSubstitutionTableHeader *gsubTable)
-- : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable),
-- fMPreFixups(NULL)
-+U_NAMESPACE_BEGIN
-+
-+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(IndicOpenTypeLayoutEngine)
-+
-+IndicOpenTypeLayoutEngine::IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable)
-+ : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable), fMPreFixups(NULL)
- {
- fFeatureMap = IndicReordering::getFeatureMap(fFeatureMapCount);
- fFeatureOrder = TRUE;
- }
-
--IndicOpenTypeLayoutEngine::IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance,
-- le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags)
-- : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags),
-- fMPreFixups(NULL)
-+IndicOpenTypeLayoutEngine::IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags)
-+ : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags), fMPreFixups(NULL)
- {
- fFeatureMap = IndicReordering::getFeatureMap(fFeatureMapCount);
- fFeatureOrder = TRUE;
-@@ -71,9 +71,8 @@
-
- // Input: characters, tags
- // Output: glyphs, char indices
--le_int32 IndicOpenTypeLayoutEngine::glyphProcessing(const LEUnicode chars[],
-- le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-- LEGlyphStorage &glyphStorage, LEErrorCode &success)
-+le_int32 IndicOpenTypeLayoutEngine::glyphProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-+ LEGlyphStorage &glyphStorage, LEErrorCode &success)
- {
- if (LE_FAILURE(success)) {
- return 0;
-@@ -84,8 +83,7 @@
- return 0;
- }
-
-- le_int32 retCount = OpenTypeLayoutEngine::glyphProcessing(chars, offset, count, max,
-- rightToLeft, glyphStorage, success);
-+ le_int32 retCount = OpenTypeLayoutEngine::glyphProcessing(chars, offset, count, max, rightToLeft, glyphStorage, success);
-
- if (LE_FAILURE(success)) {
- return 0;
-@@ -99,9 +97,8 @@
- // Input: characters
- // Output: characters, char indices, tags
- // Returns: output character count
--le_int32 IndicOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[],
-- le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-+le_int32 IndicOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
- {
- if (LE_FAILURE(success)) {
- return 0;
-@@ -131,9 +128,10 @@
-
- // NOTE: assumes this allocates featureTags...
- // (probably better than doing the worst case stuff here...)
-- le_int32 outCharCount = IndicReordering::reorder(&chars[offset], count, fScriptCode,
-- outChars, glyphStorage, &fMPreFixups);
-+ le_int32 outCharCount = IndicReordering::reorder(&chars[offset], count, fScriptCode, outChars, glyphStorage, &fMPreFixups);
-+
- glyphStorage.adoptGlyphCount(outCharCount);
--
- return outCharCount;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/IndicLayoutEngine.h b/src/share/native/sun/font/layout/IndicLayoutEngine.h
---- jdk/src/share/native/sun/font/layout/IndicLayoutEngine.h
-+++ jdk/src/share/native/sun/font/layout/IndicLayoutEngine.h
-@@ -43,6 +43,8 @@
- #include "GlyphDefinitionTables.h"
- #include "GlyphPositioningTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- class MPreFixups;
- class LEGlyphStorage;
-
-@@ -77,9 +79,8 @@
- *
- * @internal
- */
-- IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance,
-- le_int32 scriptCode, le_int32 languageCode,
-- le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable);
-+ IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable);
-
- /**
- * This constructor is used when the font requires a "canned" GSUB table which can't be known
-@@ -94,8 +95,8 @@
- *
- * @internal
- */
-- IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance,
-- le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags);
-+ IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-+ le_int32 typoFlags);
-
- /**
- * The destructor, virtual for correct polymorphic invocation.
-@@ -104,6 +105,20 @@
- */
- virtual ~IndicOpenTypeLayoutEngine();
-
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ virtual UClassID getDynamicClassID() const;
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for this class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ static UClassID getStaticClassID();
-+
- protected:
-
- /**
-@@ -117,10 +132,9 @@
- * @param offset - the index of the first character to process
- * @param count - the number of characters to process
- * @param max - the number of characters in the input context
-- * @param rightToLeft - <code>TRUE</code> if the characters are in a
-- * right to left directional run
-- * @param glyphStorage - the glyph storage object. The glyph and character
-- * index arrays will be set. The auxillary data array will be set to the feature tags.
-+ * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
-+ * @param glyphStorage - the glyph storage object. The glyph and character index arrays will be set.
-+ * the auxillary data array will be set to the feature tags.
- *
- * Output parameters:
- * @param success - set to an error code if the operation fails
-@@ -129,9 +143,8 @@
- *
- * @internal
- */
-- virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_int32 max, le_bool rightToLeft,
-- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+ virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
- /**
- * This method does character to glyph mapping, applies the GSUB table and applies
-@@ -147,11 +160,9 @@
- * @param offset - the index of the first character to process
- * @param count - the number of characters to process
- * @param max - the number of characters in the input context
-- * @param rightToLeft - <code>TRUE</code> if the characters are in a
-- * right to left directional run
-+ * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
- * @param featureTags - the feature tag array
-- * @param glyphStorage - the glyph storage object. The glyph and char
-- * index arrays will be set.
-+ * @param glyphStorage - the glyph storage object. The glyph and char index arrays will be set.
- *
- * Output parameters:
- * @param success - set to an error code if the operation fails
-@@ -163,12 +174,14 @@
- *
- * @internal
- */
-- virtual le_int32 glyphProcessing(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage,
-- LEErrorCode &success);
-+ virtual le_int32 glyphProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-+ LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
- private:
-+
- MPreFixups *fMPreFixups;
- };
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/IndicRearrangement.h b/src/share/native/sun/font/layout/IndicRearrangement.h
---- jdk/src/share/native/sun/font/layout/IndicRearrangement.h
-+++ jdk/src/share/native/sun/font/layout/IndicRearrangement.h
-@@ -32,12 +32,19 @@
- #ifndef __INDICREARRANGEMENT_H
- #define __INDICREARRANGEMENT_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LayoutTables.h"
- #include "StateTables.h"
- #include "MorphTables.h"
- #include "MorphStateTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct IndicRearrangementSubtableHeader : MorphStateTableHeader
- {
- };
-@@ -78,4 +85,6 @@
- {
- };
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/IndicRearrangementProcessor.cpp b/src/share/native/sun/font/layout/IndicRearrangementProcessor.cpp
---- jdk/src/share/native/sun/font/layout/IndicRearrangementProcessor.cpp
-+++ jdk/src/share/native/sun/font/layout/IndicRearrangementProcessor.cpp
-@@ -39,6 +39,10 @@
- #include "LEGlyphStorage.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
-+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(IndicRearrangementProcessor)
-+
- IndicRearrangementProcessor::IndicRearrangementProcessor(const MorphSubtableHeader *morphSubtableHeader)
- : StateTableProcessor(morphSubtableHeader)
- {
-@@ -56,8 +60,7 @@
- lastGlyph = 0;
- }
-
--ByteOffset IndicRearrangementProcessor::processStateEntry(LEGlyphStorage &glyphStorage,
-- le_int32 &currGlyph, EntryTableIndex index)
-+ByteOffset IndicRearrangementProcessor::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index)
- {
- const IndicRearrangementStateEntry *entry = &entryTable[index];
- ByteOffset newState = SWAPW(entry->newStateOffset);
-@@ -416,3 +419,5 @@
- break;
- }
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/IndicRearrangementProcessor.h b/src/share/native/sun/font/layout/IndicRearrangementProcessor.h
---- jdk/src/share/native/sun/font/layout/IndicRearrangementProcessor.h
-+++ jdk/src/share/native/sun/font/layout/IndicRearrangementProcessor.h
-@@ -32,12 +32,19 @@
- #ifndef __INDICREARRANGEMENTPROCESSOR_H
- #define __INDICREARRANGEMENTPROCESSOR_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "MorphTables.h"
- #include "SubtableProcessor.h"
- #include "StateTableProcessor.h"
- #include "IndicRearrangement.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEGlyphStorage;
-
- class IndicRearrangementProcessor : public StateTableProcessor
-@@ -54,12 +61,28 @@
- IndicRearrangementProcessor(const MorphSubtableHeader *morphSubtableHeader);
- virtual ~IndicRearrangementProcessor();
-
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ virtual UClassID getDynamicClassID() const;
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for this class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ static UClassID getStaticClassID();
-+
- protected:
- le_int32 firstGlyph;
- le_int32 lastGlyph;
-
- const IndicRearrangementStateEntry *entryTable;
- const IndicRearrangementSubtableHeader *indicRearrangementSubtableHeader;
-+
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/IndicReordering.cpp b/src/share/native/sun/font/layout/IndicReordering.cpp
---- jdk/src/share/native/sun/font/layout/IndicReordering.cpp
-+++ jdk/src/share/native/sun/font/layout/IndicReordering.cpp
-@@ -36,6 +36,8 @@
- #include "LEGlyphStorage.h"
- #include "MPreFixups.h"
-
-+U_NAMESPACE_BEGIN
-+
- #define initFeatureTag LE_INIT_FEATURE_TAG
- #define nuktFeatureTag LE_NUKT_FEATURE_TAG
- #define akhnFeatureTag LE_AKHN_FEATURE_TAG
-@@ -71,7 +73,7 @@
- #define distFeatureMask 0x00020000UL
- #define initFeatureMask 0x00010000UL
-
--class ReorderingOutput {
-+class ReorderingOutput : public UMemory {
- private:
- le_int32 fOutIndex;
- LEUnicode *fOutChars;
-@@ -187,8 +189,7 @@
- fOutIndex += 1;
- }
-
-- le_bool noteMatra(const IndicClassTable *classTable, LEUnicode matra, le_uint32 matraIndex,
-- FeatureMask matraFeatures, le_bool wordStart)
-+ le_bool noteMatra(const IndicClassTable *classTable, LEUnicode matra, le_uint32 matraIndex, FeatureMask matraFeatures, le_bool wordStart)
- {
- IndicClassTable::CharClass matraClass = classTable->getCharClass(matra);
-
-@@ -219,13 +220,12 @@
- return FALSE;
- }
-
-- void noteVowelModifier(const IndicClassTable *classTable, LEUnicode vowelModifier,
-- le_uint32 vowelModifierIndex, FeatureMask vowelModifierFeatures)
-+ void noteVowelModifier(const IndicClassTable *classTable, LEUnicode vowelModifier, le_uint32 vowelModifierIndex, FeatureMask vowelModifierFeatures)
- {
- IndicClassTable::CharClass vmClass = classTable->getCharClass(vowelModifier);
-
- fVMIndex = vowelModifierIndex;
-- fVMFeatures = vowelModifierFeatures;
-+ fVMFeatures = vowelModifierFeatures;
-
- if (IndicClassTable::isVowelModifier(vmClass)) {
- switch (vmClass & CF_POS_MASK) {
-@@ -244,13 +244,12 @@
- }
- }
-
-- void noteStressMark(const IndicClassTable *classTable, LEUnicode stressMark,
-- le_uint32 stressMarkIndex, FeatureMask stressMarkFeatures)
-+ void noteStressMark(const IndicClassTable *classTable, LEUnicode stressMark, le_uint32 stressMarkIndex, FeatureMask stressMarkFeatures)
- {
- IndicClassTable::CharClass smClass = classTable->getCharClass(stressMark);
-
- fSMIndex = stressMarkIndex;
-- fSMFeatures = stressMarkFeatures;
-+ fSMFeatures = stressMarkFeatures;
-
- if (IndicClassTable::isStressMark(smClass)) {
- switch (smClass & CF_POS_MASK) {
-@@ -360,9 +359,7 @@
- };
-
- // TODO: Find better names for these!
--#define tagArray4 (nuktFeatureMask | akhnFeatureMask | vatuFeatureMask | presFeatureMask | \
-- blwsFeatureMask | abvsFeatureMask | pstsFeatureMask | halnFeatureMask | \
-- blwmFeatureMask | abvmFeatureMask | distFeatureMask)
-+#define tagArray4 (nuktFeatureMask | akhnFeatureMask | vatuFeatureMask | presFeatureMask | blwsFeatureMask | abvsFeatureMask | pstsFeatureMask | halnFeatureMask | blwmFeatureMask | abvmFeatureMask | distFeatureMask)
- #define tagArray3 (pstfFeatureMask | tagArray4)
- #define tagArray2 (halfFeatureMask | tagArray3)
- #define tagArray1 (blwfFeatureMask | tagArray2)
-@@ -415,8 +412,7 @@
- return featureMap;
- }
-
--le_int32 IndicReordering::findSyllable(const IndicClassTable *classTable,
-- const LEUnicode *chars, le_int32 prev, le_int32 charCount)
-+le_int32 IndicReordering::findSyllable(const IndicClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount)
- {
- le_int32 cursor = prev;
- le_int8 state = 0;
-@@ -752,3 +748,5 @@
- delete mpreFixups;
- }
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/IndicReordering.h b/src/share/native/sun/font/layout/IndicReordering.h
---- jdk/src/share/native/sun/font/layout/IndicReordering.h
-+++ jdk/src/share/native/sun/font/layout/IndicReordering.h
-@@ -32,9 +32,16 @@
- #ifndef __INDICREORDERING_H
- #define __INDICREORDERING_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "OpenTypeTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- // Characters that get refered to by name...
- #define C_SIGN_ZWNJ 0x200C
- #define C_SIGN_ZWJ 0x200D
-@@ -140,7 +147,7 @@
- static const IndicClassTable *getScriptClassTable(le_int32 scriptCode);
- };
-
--class IndicReordering {
-+class IndicReordering /* not : public UObject because all methods are static */ {
- public:
- static le_int32 getWorstCaseExpansion(le_int32 scriptCode);
-
-@@ -156,8 +163,7 @@
- // do not instantiate
- IndicReordering();
-
-- static le_int32 findSyllable(const IndicClassTable *classTable, const LEUnicode *chars,
-- le_int32 prev, le_int32 charCount);
-+ static le_int32 findSyllable(const IndicClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount);
-
- };
-
-@@ -305,4 +311,5 @@
- return hasBelowBaseForm(getCharClass(ch));
- }
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/KernTable.cpp b/src/share/native/sun/font/layout/KernTable.cpp
---- jdk/src/share/native/sun/font/layout/KernTable.cpp
-+++ jdk/src/share/native/sun/font/layout/KernTable.cpp
-@@ -25,6 +25,7 @@
-
- /*
- *
-+ *
- * (C) Copyright IBM Corp. 2004-2005 - All Rights Reserved
- *
- */
-@@ -39,6 +40,8 @@
-
- #define DEBUG 0
-
-+U_NAMESPACE_BEGIN
-+
- struct PairInfo {
- le_uint32 key; // sigh, MSVC compiler gags on union here
- le_int16 value; // fword, kern value in funits
-@@ -191,6 +194,12 @@
- float adjust = 0;
- for (int i = 1, e = storage.getGlyphCount(); i < e; ++i) {
- key = key << 16 | (storage[i] & 0xffff);
-+
-+ // argh, to do a binary search, we need to have the pair list in sorted order
-+ // but it is not in sorted order on win32 platforms because of the endianness difference
-+ // so either I have to swap the element each time I examine it, or I have to swap
-+ // all the elements ahead of time and store them in the font
-+
- const PairInfo* p = pairs;
- const PairInfo* tp = (const PairInfo*)(p + rangeShift);
- if (key > tp->key) {
-@@ -238,3 +247,6 @@
- storage.adjustPosition(storage.getGlyphCount(), adjust, 0, success);
- }
- }
-+
-+U_NAMESPACE_END
-+
-diff --git a/src/share/native/sun/font/layout/KernTable.h b/src/share/native/sun/font/layout/KernTable.h
---- jdk/src/share/native/sun/font/layout/KernTable.h
-+++ jdk/src/share/native/sun/font/layout/KernTable.h
-@@ -25,6 +25,7 @@
-
- /*
- *
-+ *
- * (C) Copyright IBM Corp. 2004-2005 - All Rights Reserved
- *
- */
-@@ -37,9 +38,12 @@
- #endif
-
- #include "LETypes.h"
-+//#include "LEFontInstance.h"
-+//#include "LEGlyphStorage.h"
-
- #include <stdio.h>
-
-+U_NAMESPACE_BEGIN
- struct PairInfo;
- class LEFontInstance;
- class LEGlyphStorage;
-@@ -67,4 +71,6 @@
- void process(LEGlyphStorage& storage);
- };
-
-+U_NAMESPACE_END
-+
- #endif
-diff --git a/src/share/native/sun/font/layout/KhmerLayoutEngine.cpp b/src/share/native/sun/font/layout/KhmerLayoutEngine.cpp
---- jdk/src/share/native/sun/font/layout/KhmerLayoutEngine.cpp
-+++ jdk/src/share/native/sun/font/layout/KhmerLayoutEngine.cpp
-@@ -23,8 +23,8 @@
- *
- */
-
-+
- /*
-- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- * This file is a modification of the ICU file IndicLayoutEngine.cpp
-@@ -38,17 +38,20 @@
- #include "LEGlyphStorage.h"
- #include "KhmerReordering.h"
-
--KhmerOpenTypeLayoutEngine::KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance,
-- le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags,
-- const GlyphSubstitutionTableHeader *gsubTable)
-+U_NAMESPACE_BEGIN
-+
-+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(KhmerOpenTypeLayoutEngine)
-+
-+KhmerOpenTypeLayoutEngine::KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable)
- : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable)
- {
- fFeatureMap = KhmerReordering::getFeatureMap(fFeatureMapCount);
- fFeatureOrder = TRUE;
- }
-
--KhmerOpenTypeLayoutEngine::KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance,
-- le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags)
-+KhmerOpenTypeLayoutEngine::KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-+ le_int32 typoFlags)
- : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags)
- {
- fFeatureMap = KhmerReordering::getFeatureMap(fFeatureMapCount);
-@@ -63,16 +66,14 @@
- // Input: characters
- // Output: characters, char indices, tags
- // Returns: output character count
--le_int32 KhmerOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[],
-- le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-+le_int32 KhmerOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
- {
- if (LE_FAILURE(success)) {
- return 0;
- }
-
-- if (chars == NULL || offset < 0 || count < 0 || max < 0 ||
-- offset >= max || offset + count > max) {
-+ if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
- success = LE_ILLEGAL_ARGUMENT_ERROR;
- return 0;
- }
-@@ -96,9 +97,10 @@
-
- // NOTE: assumes this allocates featureTags...
- // (probably better than doing the worst case stuff here...)
-- le_int32 outCharCount = KhmerReordering::reorder(&chars[offset], count,
-- fScriptCode, outChars, glyphStorage);
-+ le_int32 outCharCount = KhmerReordering::reorder(&chars[offset], count, fScriptCode, outChars, glyphStorage);
-
- glyphStorage.adoptGlyphCount(outCharCount);
- return outCharCount;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/KhmerLayoutEngine.h b/src/share/native/sun/font/layout/KhmerLayoutEngine.h
---- jdk/src/share/native/sun/font/layout/KhmerLayoutEngine.h
-+++ jdk/src/share/native/sun/font/layout/KhmerLayoutEngine.h
-@@ -23,6 +23,7 @@
- *
- */
-
-+
- /*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-@@ -45,19 +46,18 @@
- // #include "GlyphDefinitionTables.h"
- // #include "GlyphPositioningTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- // class MPreFixups;
- // class LEGlyphStorage;
-
- /**
- * This class implements OpenType layout for Khmer OpenType fonts, as
-- * specified by Microsoft in "Creating and Supporting OpenType Fonts
-- * for Khmer Scripts"
-- * (http://www.microsoft.com/typography/otspec/indicot/default.htm)
-- * TODO: change url
-+ * specified by Microsoft in "Creating and Supporting OpenType Fonts for
-+ * Khmer Scripts" (http://www.microsoft.com/typography/otspec/indicot/default.htm) TODO: change url
- *
-- * This class overrides the characterProcessing method to do Khmer
-- * character processing and reordering (See the MS spec. for more
-- * details)
-+ * This class overrides the characterProcessing method to do Khmer character processing
-+ * and reordering (See the MS spec. for more details)
- *
- * @internal
- */
-@@ -65,11 +65,10 @@
- {
- public:
- /**
-- * This is the main constructor. It constructs an instance of
-- * KhmerOpenTypeLayoutEngine for a particular font, script and
-- * language. It takes the GSUB table as a parameter since
-- * LayoutEngine::layoutEngineFactory has to read the GSUB table to
-- * know that it has an Khmer OpenType font.
-+ * This is the main constructor. It constructs an instance of KhmerOpenTypeLayoutEngine for
-+ * a particular font, script and language. It takes the GSUB table as a parameter since
-+ * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an
-+ * Khmer OpenType font.
- *
- * @param fontInstance - the font
- * @param scriptCode - the script
-@@ -82,14 +81,12 @@
- *
- * @internal
- */
-- KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance,
-- le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags,
-- const GlyphSubstitutionTableHeader *gsubTable);
-+ KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable);
-
- /**
-- * This constructor is used when the font requires a "canned" GSUB
-- * table which can't be known until after this constructor has
-- * been invoked.
-+ * This constructor is used when the font requires a "canned" GSUB table which can't be known
-+ * until after this constructor has been invoked.
- *
- * @param fontInstance - the font
- * @param scriptCode - the script
-@@ -100,8 +97,8 @@
- *
- * @internal
- */
-- KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance,
-- le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags);
-+ KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-+ le_int32 typoFlags);
-
- /**
- * The destructor, virtual for correct polymorphic invocation.
-@@ -110,25 +107,35 @@
- */
- virtual ~KhmerOpenTypeLayoutEngine();
-
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ virtual UClassID getDynamicClassID() const;
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for this class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ static UClassID getStaticClassID();
-+
- protected:
-
- /**
-- * This method does Khmer OpenType character processing. It
-- * assigns the OpenType feature tags to the characters, and may
-- * generate output characters which have been reordered. It may
-- * also split some vowels, resulting in more output characters
-- * than input characters.
-+ * This method does Khmer OpenType character processing. It assigns the OpenType feature
-+ * tags to the characters, and may generate output characters which have been reordered.
-+ * It may also split some vowels, resulting in more output characters than input characters.
- *
- * Input parameters:
- * @param chars - the input character context
- * @param offset - the index of the first character to process
- * @param count - the number of characters to process
- * @param max - the number of characters in the input context
-- * @param rightToLeft - <code>TRUE</code> if the characters are in
-- * a right to left directional run
-- * @param glyphStorage - the glyph storage object. The glyph and
-- * character index arrays will be set. the auxillary data array
-- * will be set to the feature tags.
-+ * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
-+ * @param glyphStorage - the glyph storage object. The glyph and character index arrays will be set.
-+ * the auxillary data array will be set to the feature tags.
- *
- * Output parameters:
- * @param success - set to an error code if the operation fails
-@@ -137,9 +144,11 @@
- *
- * @internal
- */
-- virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_int32 max, le_bool rightToLeft,
-- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+ virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+
- };
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/KhmerReordering.cpp b/src/share/native/sun/font/layout/KhmerReordering.cpp
---- jdk/src/share/native/sun/font/layout/KhmerReordering.cpp
-+++ jdk/src/share/native/sun/font/layout/KhmerReordering.cpp
-@@ -37,6 +37,9 @@
- #include "KhmerReordering.h"
- #include "LEGlyphStorage.h"
-
-+
-+U_NAMESPACE_BEGIN
-+
- // Characters that get refered to by name...
- enum
- {
-@@ -53,35 +56,23 @@
-
- enum
- {
-- // simple classes, they are used in the statetable (in this file)
-- // to control the length of a syllable they are also used to know
-- // where a character should be placed (location in reference to
-- // the base character) and also to know if a character, when
-- // independtly displayed, should be displayed with a dotted-circle
-- // to indicate error in syllable construction
--
-+ // simple classes, they are used in the statetable (in this file) to control the length of a syllable
-+ // they are also used to know where a character should be placed (location in reference to the base character)
-+ // and also to know if a character, when independtly displayed, should be displayed with a dotted-circle to
-+ // indicate error in syllable construction
- _xx = KhmerClassTable::CC_RESERVED,
-- _sa = KhmerClassTable::CC_SIGN_ABOVE | KhmerClassTable::CF_DOTTED_CIRCLE
-- | KhmerClassTable::CF_POS_ABOVE,
-- _sp = KhmerClassTable::CC_SIGN_AFTER | KhmerClassTable::CF_DOTTED_CIRCLE
-- | KhmerClassTable::CF_POS_AFTER,
-+ _sa = KhmerClassTable::CC_SIGN_ABOVE | KhmerClassTable::CF_DOTTED_CIRCLE | KhmerClassTable::CF_POS_ABOVE,
-+ _sp = KhmerClassTable::CC_SIGN_AFTER | KhmerClassTable::CF_DOTTED_CIRCLE| KhmerClassTable::CF_POS_AFTER,
- _c1 = KhmerClassTable::CC_CONSONANT | KhmerClassTable::CF_CONSONANT,
- _c2 = KhmerClassTable::CC_CONSONANT2 | KhmerClassTable::CF_CONSONANT,
- _c3 = KhmerClassTable::CC_CONSONANT3 | KhmerClassTable::CF_CONSONANT,
-- _rb = KhmerClassTable::CC_ROBAT | KhmerClassTable::CF_POS_ABOVE
-- | KhmerClassTable::CF_DOTTED_CIRCLE,
-- _cs = KhmerClassTable::CC_CONSONANT_SHIFTER | KhmerClassTable::CF_DOTTED_CIRCLE
-- | KhmerClassTable::CF_SHIFTER,
-- _dl = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_BEFORE
-- | KhmerClassTable::CF_DOTTED_CIRCLE,
-- _db = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_BELOW
-- | KhmerClassTable::CF_DOTTED_CIRCLE,
-- _da = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_ABOVE
-- | KhmerClassTable::CF_DOTTED_CIRCLE | KhmerClassTable::CF_ABOVE_VOWEL,
-- _dr = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_AFTER
-- | KhmerClassTable::CF_DOTTED_CIRCLE,
-- _co = KhmerClassTable::CC_COENG | KhmerClassTable::CF_COENG
-- | KhmerClassTable::CF_DOTTED_CIRCLE,
-+ _rb = KhmerClassTable::CC_ROBAT | KhmerClassTable::CF_POS_ABOVE | KhmerClassTable::CF_DOTTED_CIRCLE,
-+ _cs = KhmerClassTable::CC_CONSONANT_SHIFTER | KhmerClassTable::CF_DOTTED_CIRCLE | KhmerClassTable::CF_SHIFTER,
-+ _dl = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_BEFORE | KhmerClassTable::CF_DOTTED_CIRCLE,
-+ _db = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_BELOW | KhmerClassTable::CF_DOTTED_CIRCLE,
-+ _da = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_ABOVE | KhmerClassTable::CF_DOTTED_CIRCLE | KhmerClassTable::CF_ABOVE_VOWEL,
-+ _dr = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_AFTER | KhmerClassTable::CF_DOTTED_CIRCLE,
-+ _co = KhmerClassTable::CC_COENG | KhmerClassTable::CF_COENG | KhmerClassTable::CF_DOTTED_CIRCLE,
-
- // split vowel
- _va = _da | KhmerClassTable::CF_SPLIT_VOWEL,
-@@ -90,13 +81,10 @@
-
-
- // Character class tables
--
--// _xx character does not combine into syllable, such as numbers,
--// puntuation marks, non-Khmer signs...
-+// _xx character does not combine into syllable, such as numbers, puntuation marks, non-Khmer signs...
- // _sa Sign placed above the base
- // _sp Sign placed after the base
--// _c1 Consonant of type 1 or independent vowel (independent vowels
--// behave as type 1 consonants)
-+// _c1 Consonant of type 1 or independent vowel (independent vowels behave as type 1 consonants)
- // _c2 Consonant of type 2 (only RO)
- // _c3 Consonant of type 3
- // _rb Khmer sign robat u17CC. combining mark for subscript consonants
-@@ -105,13 +93,10 @@
- // _db Dependent vowel placed below the base
- // _da Dependent vowel placed above the base
- // _dr Dependent vowel placed behind the base (right of the base)
--// _co Khmer combining mark COENG u17D2, combines with the consonant
--// or independent vowel following it to create a subscript consonant
--// or independent vowel
--// _va Khmer split vowel in wich the first part is before the base and
--// the second one above the base
--// _vr Khmer split vowel in wich the first part is before the base and
--// the second one behind (right of) the base
-+// _co Khmer combining mark COENG u17D2, combines with the consonant or independent vowel following
-+// it to create a subscript consonant or independent vowel
-+// _va Khmer split vowel in wich the first part is before the base and the second one above the base
-+// _vr Khmer split vowel in wich the first part is before the base and the second one behind (right of) the base
-
- static const KhmerClassTable::CharClass khmerCharClasses[] =
- {
-@@ -129,19 +114,19 @@
- //
-
- //
--// The range of characters defined in the above table is defined
--// here. FOr Khmer 1780 to 17DF Even if the Khmer range is bigger, all
--// other characters are not combinable, and therefore treated as _xx
-+// The range of characters defined in the above table is defined here. FOr Khmer 1780 to 17DF
-+// Even if the Khmer range is bigger, all other characters are not combinable, and therefore treated
-+// as _xx
- static const KhmerClassTable khmerClassTable = {0x1780, 0x17df, khmerCharClasses};
-
-
--// Below we define how a character in the input string is either in
--// the khmerCharClasses table (in which case we get its type back), a
--// ZWJ or ZWNJ (two characters that may appear within the syllable,
--// but are not in the table) we also get their type back, or an
--// unknown object in which case we get _xx (CC_RESERVED) back
-+// Below we define how a character in the input string is either in the khmerCharClasses table
-+// (in which case we get its type back), a ZWJ or ZWNJ (two characters that may appear
-+// within the syllable, but are not in the table) we also get their type back, or an unknown object
-+// in which case we get _xx (CC_RESERVED) back
- KhmerClassTable::CharClass KhmerClassTable::getCharClass(LEUnicode ch) const
- {
-+
- if (ch == C_SIGN_ZWJ) {
- return CC_ZERO_WIDTH_J_MARK;
- }
-@@ -164,13 +149,14 @@
-
-
-
--class ReorderingOutput {
-+class ReorderingOutput : public UMemory {
- private:
- le_int32 fOutIndex;
- LEUnicode *fOutChars;
-
- LEGlyphStorage &fGlyphStorage;
-
-+
- public:
- ReorderingOutput(LEUnicode *outChars, LEGlyphStorage &glyphStorage)
- : fOutIndex(0), fOutChars(outChars), fGlyphStorage(glyphStorage)
-@@ -232,18 +218,11 @@
- #define abvmFeatureMask 0x00100000UL
- #define mkmkFeatureMask 0x00080000UL
-
--#define tagPref (prefFeatureMask | presFeatureMask | \
-- cligFeatureMask | distFeatureMask)
--#define tagAbvf (abvfFeatureMask | abvsFeatureMask | \
-- cligFeatureMask | distFeatureMask | abvmFeatureMask | mkmkFeatureMask)
--#define tagPstf (blwfFeatureMask | blwsFeatureMask | prefFeatureMask | \
-- presFeatureMask | pstfFeatureMask | pstsFeatureMask | cligFeatureMask | \
-- distFeatureMask | blwmFeatureMask)
--#define tagBlwf (blwfFeatureMask | blwsFeatureMask | cligFeatureMask | \
-- distFeatureMask | blwmFeatureMask | mkmkFeatureMask)
--#define tagDefault (prefFeatureMask | blwfFeatureMask | presFeatureMask | \
-- blwsFeatureMask | cligFeatureMask | distFeatureMask | abvmFeatureMask | \
-- blwmFeatureMask | mkmkFeatureMask)
-+#define tagPref (prefFeatureMask | presFeatureMask | cligFeatureMask | distFeatureMask)
-+#define tagAbvf (abvfFeatureMask | abvsFeatureMask | cligFeatureMask | distFeatureMask | abvmFeatureMask | mkmkFeatureMask)
-+#define tagPstf (blwfFeatureMask | blwsFeatureMask | prefFeatureMask | presFeatureMask | pstfFeatureMask | pstsFeatureMask | cligFeatureMask | distFeatureMask | blwmFeatureMask)
-+#define tagBlwf (blwfFeatureMask | blwsFeatureMask | cligFeatureMask | distFeatureMask | blwmFeatureMask | mkmkFeatureMask)
-+#define tagDefault (prefFeatureMask | blwfFeatureMask | presFeatureMask | blwsFeatureMask | cligFeatureMask | distFeatureMask | abvmFeatureMask | blwmFeatureMask | mkmkFeatureMask)
-
-
-
-@@ -274,35 +253,32 @@
- // The stateTable is used to calculate the end (the length) of a well
- // formed Khmer Syllable.
- //
--// Each horizontal line is ordered exactly the same way as the values
--// in KhmerClassTable CharClassValues in KhmerReordering.h This
--// coincidence of values allows the follow up of the table.
-+// Each horizontal line is ordered exactly the same way as the values in KhmerClassTable
-+// CharClassValues in KhmerReordering.h This coincidence of values allows the
-+// follow up of the table.
- //
--// Each line corresponds to a state, which does not necessarily need
--// to be a type of component... for example, state 2 is a base, with
--// is always a first character in the syllable, but the state could be
--// produced a consonant of any type when it is the first character
--// that is analysed (in ground state).
-+// Each line corresponds to a state, which does not necessarily need to be a type
-+// of component... for example, state 2 is a base, with is always a first character
-+// in the syllable, but the state could be produced a consonant of any type when
-+// it is the first character that is analysed (in ground state).
- //
- // Differentiating 3 types of consonants is necessary in order to
- // forbid the use of certain combinations, such as having a second
--// coeng after a coeng RO.
--// The inexistent possibility of having a type 3 after another type 3
--// is permitted, eliminating it would very much complicate the table,
--// and it does not create typing problems, as the case above.
-+// coeng after a coeng RO,
-+// The inexistent possibility of having a type 3 after another type 3 is permitted,
-+// eliminating it would very much complicate the table, and it does not create typing
-+// problems, as the case above.
- //
--// The table is quite complex, in order to limit the number of coeng
--// consonants to 2 (by means of the table).
-+// The table is quite complex, in order to limit the number of coeng consonants
-+// to 2 (by means of the table).
- //
- // There a peculiarity, as far as Unicode is concerned:
- // - The consonant-shifter is considered in two possible different
--// locations, the one considered in Unicode 3.0 and the one considered
--// in Unicode 4.0. (there is a backwards compatibility problem in this
--// standard).
-+// locations, the one considered in Unicode 3.0 and the one considered in
-+// Unicode 4.0. (there is a backwards compatibility problem in this standard).
-
-
--// xx independent character, such as a number, punctuation sign or
--// non-khmer char
-+// xx independent character, such as a number, punctuation sign or non-khmer char
- //
- // c1 Khmer consonant of type 1 or an independent vowel
- // that is, a letter in which the subscript for is only under the
-@@ -320,10 +296,9 @@
- //
- // co coeng character (u17D2)
- //
--// dv dependent vowel (including split vowels, they are treated in the
--// same way). even if dv is not defined above, the component that is
--// really tested for is KhmerClassTable::CC_DEPENDENT_VOWEL, which is
--// common to all dependent vowels
-+// dv dependent vowel (including split vowels, they are treated in the same way).
-+// even if dv is not defined above, the component that is really tested for is
-+// KhmerClassTable::CC_DEPENDENT_VOWEL, which is common to all dependent vowels
- //
- // zwj Zero Width joiner
- //
-@@ -352,8 +327,7 @@
- {-1, -1, -1, -1, 12, 13, -1, -1, 16, 17, 1, 14}, // 8 - First consonant of type 2 after coeng
- {-1, -1, -1, -1, 12, 13, -1, 10, 16, 17, 1, 14}, // 9 - First consonant or type 3 after ceong
- {-1, 11, 11, 11, -1, -1, -1, -1, -1, -1, -1, -1}, // 10 - Second Coeng (no register shifter before)
-- {-1, -1, -1, -1, 15, -1, -1, -1, 16, 17, 1, 14}, // 11 - Second coeng consonant
-- // (or ind. vowel) no register shifter before
-+ {-1, -1, -1, -1, 15, -1, -1, -1, 16, 17, 1, 14}, // 11 - Second coeng consonant (or ind. vowel) no register shifter before
- {-1, -1, 1, -1, -1, 13, -1, -1, 16, -1, -1, -1}, // 12 - Second ZWNJ before a register shifter
- {-1, -1, -1, -1, 15, -1, -1, -1, 16, 17, 1, 14}, // 13 - Second register shifter
- {-1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1}, // 14 - ZWJ before vowel
-@@ -363,6 +337,7 @@
- {-1, -1, -1, -1, -1, -1, -1, 19, -1, -1, -1, -1}, // 18 - ZWJ after vowel
- {-1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, // 19 - Third coeng
- {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1}, // 20 - dependent vowel after a Robat
-+
- };
-
-
-@@ -377,15 +352,13 @@
- // Given an input string of characters and a location in which to start looking
- // calculate, using the state table, which one is the last character of the syllable
- // that starts in the starting position.
--le_int32 KhmerReordering::findSyllable(const KhmerClassTable *classTable,
-- const LEUnicode *chars, le_int32 prev, le_int32 charCount)
-+le_int32 KhmerReordering::findSyllable(const KhmerClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount)
- {
- le_int32 cursor = prev;
- le_int8 state = 0;
-
- while (cursor < charCount) {
-- KhmerClassTable::CharClass charClass = (classTable->getCharClass(chars[cursor])
-- & KhmerClassTable::CF_CLASS_MASK);
-+ KhmerClassTable::CharClass charClass = (classTable->getCharClass(chars[cursor]) & KhmerClassTable::CF_CLASS_MASK);
-
- state = khmerStateTable[state][charClass];
-
-@@ -402,8 +375,8 @@
-
- // This is the real reordering function as applied to the Khmer language
-
--le_int32 KhmerReordering::reorder(const LEUnicode *chars, le_int32 charCount,
-- le_int32 /*scriptCode*/, LEUnicode *outChars, LEGlyphStorage &glyphStorage)
-+le_int32 KhmerReordering::reorder(const LEUnicode *chars, le_int32 charCount, le_int32 /*scriptCode*/,
-+ LEUnicode *outChars, LEGlyphStorage &glyphStorage)
- {
- const KhmerClassTable *classTable = KhmerClassTable::getKhmerClassTable();
-
-@@ -442,8 +415,7 @@
- // and because CC_CONSONANT2 is enough to identify it, as it is the only consonant
- // with this flag
- if ( (charClass & KhmerClassTable::CF_COENG) && (i + 1 < syllable) &&
-- ( (classTable->getCharClass(chars[i + 1]) &
-- KhmerClassTable::CF_CLASS_MASK) == KhmerClassTable::CC_CONSONANT2) )
-+ ( (classTable->getCharClass(chars[i + 1]) & KhmerClassTable::CF_CLASS_MASK) == KhmerClassTable::CC_CONSONANT2) )
- {
- coengRo = i;
- }
-@@ -455,16 +427,15 @@
- output.writeChar(C_RO, coengRo + 1, tagPref);
- }
-
-- // shall we add a dotted circle? If in the position in which
-- // the base should be (first char in the string) there is a
-- // character that has the Dotted circle flag (a character that
-- // cannot be a base) then write a dotted circle
-+ // shall we add a dotted circle?
-+ // If in the position in which the base should be (first char in the string) there is
-+ // a character that has the Dotted circle flag (a character that cannot be a base)
-+ // then write a dotted circle
- if (classTable->getCharClass(chars[prev]) & KhmerClassTable::CF_DOTTED_CIRCLE) {
- output.writeChar(C_DOTTED_CIRCLE, prev, tagDefault);
- }
-
-- // copy what is left to the output, skipping before vowels and
-- // coeng Ro if they are present
-+ // copy what is left to the output, skipping before vowels and coeng Ro if they are present
- for (i = prev; i < syllable; i += 1) {
- charClass = classTable->getCharClass(chars[i]);
-
-@@ -515,30 +486,14 @@
- // and there is an extra rule for C_VOWEL_AA + C_SIGN_NIKAHIT also for two
- // different positions, right after the shifter or after a vowel (Unicode 4)
- if ( (charClass & KhmerClassTable::CF_SHIFTER) && (i + 1 < syllable) ) {
-- if (classTable->getCharClass(chars[i + 1]) & KhmerClassTable::CF_ABOVE_VOWEL ) {
-- output.writeChar(chars[i], i, tagBlwf);
-- break;
-- }
-- if (i + 2 < syllable &&
-- ( (classTable->getCharClass(chars[i + 1]) &
-- KhmerClassTable::CF_CLASS_MASK) == C_VOWEL_AA) &&
-- ( (classTable->getCharClass(chars[i + 2]) &
-- KhmerClassTable::CF_CLASS_MASK) == C_SIGN_NIKAHIT) )
-- {
-- output.writeChar(chars[i], i, tagBlwf);
-- break;
-- }
-- if (i + 3 < syllable && (classTable->getCharClass(chars[i + 3]) &
-- KhmerClassTable::CF_ABOVE_VOWEL) )
-- {
-- output.writeChar(chars[i], i, tagBlwf);
-- break;
-- }
-- if (i + 4 < syllable &&
-- ( (classTable->getCharClass(chars[i + 3]) &
-- KhmerClassTable::CF_CLASS_MASK) == C_VOWEL_AA) &&
-- ( (classTable->getCharClass(chars[i + 4]) &
-- KhmerClassTable::CF_CLASS_MASK) == C_SIGN_NIKAHIT) )
-+ if ((classTable->getCharClass(chars[i + 1]) & KhmerClassTable::CF_ABOVE_VOWEL)
-+ || (i + 2 < syllable
-+ && ( (classTable->getCharClass(chars[i + 1]) & KhmerClassTable::CF_CLASS_MASK) == C_VOWEL_AA)
-+ && ( (classTable->getCharClass(chars[i + 2]) & KhmerClassTable::CF_CLASS_MASK) == C_SIGN_NIKAHIT))
-+ || (i + 3 < syllable && (classTable->getCharClass(chars[i + 3]) & KhmerClassTable::CF_ABOVE_VOWEL))
-+ || (i + 4 < syllable
-+ && ( (classTable->getCharClass(chars[i + 3]) & KhmerClassTable::CF_CLASS_MASK) == C_VOWEL_AA)
-+ && ( (classTable->getCharClass(chars[i + 4]) & KhmerClassTable::CF_CLASS_MASK) == C_SIGN_NIKAHIT) ) )
- {
- output.writeChar(chars[i], i, tagBlwf);
- break;
-@@ -556,3 +511,6 @@
-
- return output.getOutputIndex();
- }
-+
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/KhmerReordering.h b/src/share/native/sun/font/layout/KhmerReordering.h
---- jdk/src/share/native/sun/font/layout/KhmerReordering.h
-+++ jdk/src/share/native/sun/font/layout/KhmerReordering.h
-@@ -24,7 +24,6 @@
- */
-
- /*
-- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- * This file is a modification of the ICU file IndicReordering.h
-@@ -35,80 +34,60 @@
- #ifndef __KHMERREORDERING_H
- #define __KHMERREORDERING_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "OpenTypeTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEGlyphStorage;
-
- // Vocabulary
--
--// Base ->
--// A consonant or an independent vowel in its full (not
--// subscript) form. It is the center of the syllable, it can be
--// souranded by coeng (subscript) consonants, vowels, split
--// vowels, signs... but there is only one base in a syllable, it
--// has to be coded as the first character of the syllable.
--// split vowel ->
--// vowel that has two parts placed separately (e.g. Before and
--// after the consonant). Khmer language has five of them. Khmer
--// split vowels either have one part before the base and one after
--// the base or they have a part before the base and a part above
--// the base. The first part of all Khmer split vowels is the same
--// character, identical to the glyph of Khmer dependent vowel SRA
--// EI
--// coeng ->
--// modifier used in Khmer to construct coeng (subscript)
--// consonants differently than indian languages, the coeng
--// modifies the consonant that follows it, not the one preceding
--// it Each consonant has two forms, the base form and the
--// subscript form the base form is the normal one (using the
--// consonants code-point), the subscript form is displayed when
--// the combination coeng + consonant is encountered.
--// Consonant of type 1 ->
--// A consonant which has subscript for that only occupies space
--// under a base consonant
--// Consonant of type 2 ->
--// Its subscript form occupies space under and before the base
--// (only one, RO)
--// Consonant of Type 3 ->
--// Its subscript form occupies space under and after the base
--// (KHO, CHHO, THHO, BA, YO, SA)
--// Consonant shifter ->
--// Khmer has to series of consonants. The same dependent vowel has
--// different sounds if it is attached to a consonant of the first
--// series or a consonant of the second series Most consonants have
--// an equivalent in the other series, but some of theme exist only
--// in one series (for example SA). If we want to use the consonant
--// SA with a vowel sound that can only be done with a vowel sound
--// that corresponds to a vowel accompanying a consonant of the
--// other series, then we need to use a consonant shifter: TRIISAP
--// or MUSIKATOAN x17C9 y x17CA. TRIISAP changes a first series
--// consonant to second series sound and MUSIKATOAN a second series
--// consonant to have a first series vowel sound. Consonant
--// shifter are both normally supercript marks, but, when they are
--// followed by a superscript, they change shape and take the form
--// of subscript dependent vowel SRA U. If they are in the same
--// syllable as a coeng consonant, Unicode 3.0 says that they
--// should be typed before the coeng. Unicode 4.0 breaks the
--// standard and says that it should be placed after the coeng
--// consonant.
--// Dependent vowel ->
--// In khmer dependent vowels can be placed above, below, before or
--// after the base Each vowel has its own position. Only one vowel
--// per syllable is allowed.
--// Signs ->
--// Khmer has above signs and post signs. Only one above sign
--// and/or one post sign are Allowed in a syllable.
-+// Base -> A consonant or an independent vowel in its full (not subscript) form. It is the
-+// center of the syllable, it can be souranded by coeng (subscript) consonants, vowels,
-+// split vowels, signs... but there is only one base in a syllable, it has to be coded as
-+// the first character of the syllable.
-+// split vowel --> vowel that has two parts placed separately (e.g. Before and after the consonant).
-+// Khmer language has five of them. Khmer split vowels either have one part before the
-+// base and one after the base or they have a part before the base and a part above the base.
-+// The first part of all Khmer split vowels is the same character, identical to
-+// the glyph of Khmer dependent vowel SRA EI
-+// coeng --> modifier used in Khmer to construct coeng (subscript) consonants
-+// Differently than indian languages, the coeng modifies the consonant that follows it,
-+// not the one preceding it Each consonant has two forms, the base form and the subscript form
-+// the base form is the normal one (using the consonants code-point), the subscript form is
-+// displayed when the combination coeng + consonant is encountered.
-+// Consonant of type 1 -> A consonant which has subscript for that only occupies space under a base consonant
-+// Consonant of type 2.-> Its subscript form occupies space under and before the base (only one, RO)
-+// Consonant of Type 3 -> Its subscript form occupies space under and after the base (KHO, CHHO, THHO, BA, YO, SA)
-+// Consonant shifter -> Khmer has to series of consonants. The same dependent vowel has different sounds
-+// if it is attached to a consonant of the first series or a consonant of the second series
-+// Most consonants have an equivalent in the other series, but some of theme exist only in
-+// one series (for example SA). If we want to use the consonant SA with a vowel sound that
-+// can only be done with a vowel sound that corresponds to a vowel accompanying a consonant
-+// of the other series, then we need to use a consonant shifter: TRIISAP or MUSIKATOAN
-+// x17C9 y x17CA. TRIISAP changes a first series consonant to second series sound and
-+// MUSIKATOAN a second series consonant to have a first series vowel sound.
-+// Consonant shifter are both normally supercript marks, but, when they are followed by a
-+// superscript, they change shape and take the form of subscript dependent vowel SRA U.
-+// If they are in the same syllable as a coeng consonant, Unicode 3.0 says that they
-+// should be typed before the coeng. Unicode 4.0 breaks the standard and says that it should
-+// be placed after the coeng consonant.
-+// Dependent vowel -> In khmer dependent vowels can be placed above, below, before or after the base
-+// Each vowel has its own position. Only one vowel per syllable is allowed.
-+// Signs -> Khmer has above signs and post signs. Only one above sign and/or one post sign are
-+// Allowed in a syllable.
-+//
- //
-
--// This list must include all types of components that can be used
--// inside a syllable
--struct KhmerClassTable
-+struct KhmerClassTable // This list must include all types of components that can be used inside a syllable
- {
-- // order is important here! This order must be the same that is
-- // found in each horizontal line in the statetable for Khmer (file
-- // KhmerReordering.cpp).
-- enum CharClassValues
-+ enum CharClassValues // order is important here! This order must be the same that is found in each horizontal
-+ // line in the statetable for Khmer (file KhmerReordering.cpp).
- {
- CC_RESERVED = 0,
- CC_CONSONANT = 1, // consonant of type 1 or independent vowel
-@@ -116,8 +95,7 @@
- CC_CONSONANT3 = 3, // Consonant of type 3
- CC_ZERO_WIDTH_NJ_MARK = 4, // Zero Width non joiner character (0x200C)
- CC_CONSONANT_SHIFTER = 5,
-- CC_ROBAT = 6, // Khmer special diacritic accent
-- // -treated differently in state table
-+ CC_ROBAT = 6, // Khmer special diacritic accent -treated differently in state table
- CC_COENG = 7, // Subscript consonant combining character
- CC_DEPENDENT_VOWEL = 8,
- CC_SIGN_ABOVE = 9,
-@@ -131,10 +109,8 @@
- CF_CLASS_MASK = 0x0000FFFF,
-
- CF_CONSONANT = 0x01000000, // flag to speed up comparing
-- CF_SPLIT_VOWEL = 0x02000000, // flag for a split vowel -> the first part
-- // is added in front of the syllable
-- CF_DOTTED_CIRCLE = 0x04000000, // add a dotted circle if a character with
-- // this flag is the first in a syllable
-+ CF_SPLIT_VOWEL = 0x02000000, // flag for a split vowel -> the first part is added in front of the syllable
-+ CF_DOTTED_CIRCLE = 0x04000000, // add a dotted circle if a character with this flag is the first in a syllable
- CF_COENG = 0x08000000, // flag to speed up comparing
- CF_SHIFTER = 0x10000000, // flag to speed up comparing
- CF_ABOVE_VOWEL = 0x20000000, // flag to speed up comparing
-@@ -161,10 +137,10 @@
- };
-
-
--class KhmerReordering {
-+class KhmerReordering /* not : public UObject because all methods are static */ {
- public:
-- static le_int32 reorder(const LEUnicode *theChars, le_int32 charCount,
-- le_int32 scriptCode, LEUnicode *outChars, LEGlyphStorage &glyphStorage);
-+ static le_int32 reorder(const LEUnicode *theChars, le_int32 charCount, le_int32 scriptCode,
-+ LEUnicode *outChars, LEGlyphStorage &glyphStorage);
-
- static const FeatureMap *getFeatureMap(le_int32 &count);
-
-@@ -172,8 +148,10 @@
- // do not instantiate
- KhmerReordering();
-
-- static le_int32 findSyllable(const KhmerClassTable *classTable,
-- const LEUnicode *chars, le_int32 prev, le_int32 charCount);
-+ static le_int32 findSyllable(const KhmerClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount);
-+
- };
-
-+
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/LEFontInstance.cpp b/src/share/native/sun/font/layout/LEFontInstance.cpp
---- jdk/src/share/native/sun/font/layout/LEFontInstance.cpp
-+++ jdk/src/share/native/sun/font/layout/LEFontInstance.cpp
-@@ -24,7 +24,6 @@
- */
-
- /*
-- *
- *******************************************************************************
- *
- * Copyright (C) 1999-2005, International Business Machines
-@@ -42,6 +41,10 @@
- #include "LEFontInstance.h"
- #include "LEGlyphStorage.h"
-
-+U_NAMESPACE_BEGIN
-+
-+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LEFontInstance)
-+
- const LEFontInstance *LEFontInstance::getSubFont(const LEUnicode chars[], le_int32 *offset, le_int32 limit,
- le_int32 script, LEErrorCode &success) const
- {
-@@ -59,7 +62,7 @@
- }
-
- void LEFontInstance::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count,
-- le_bool reverse, const LECharMapper *mapper, LEGlyphStorage &glyphStorage) const
-+ le_bool reverse, const LECharMapper *mapper, LEGlyphStorage &glyphStorage) const
- {
- le_int32 i, out = 0, dir = 1;
-
-@@ -100,3 +103,5 @@
-
- return mapCharToGlyph(mappedChar);
- }
-+U_NAMESPACE_END
-+
-diff --git a/src/share/native/sun/font/layout/LEFontInstance.h b/src/share/native/sun/font/layout/LEFontInstance.h
---- jdk/src/share/native/sun/font/layout/LEFontInstance.h
-+++ jdk/src/share/native/sun/font/layout/LEFontInstance.h
-@@ -34,6 +34,12 @@
- #define __LEFONTINSTANCE_H
-
- #include "LETypes.h"
-+/**
-+ * \file
-+ * \brief C++ API: Layout Engine Font Instance object
-+ */
-+
-+U_NAMESPACE_BEGIN
-
- /**
- * Instances of this class are used by <code>LEFontInstance::mapCharsToGlyphs</code> and
-@@ -44,7 +50,7 @@
- *
- * @stable ICU 3.2
- */
--class LECharMapper
-+class LECharMapper /* not : public UObject because this is an interface/mixin class */
- {
- public:
- /**
-@@ -97,7 +103,7 @@
- *
- * @draft ICU 3.0
- */
--class LEFontInstance
-+class U_LAYOUT_API LEFontInstance : public UObject
- {
- public:
-
-@@ -160,8 +166,7 @@
- *
- * @stable ICU 3.2
- */
-- virtual const LEFontInstance *getSubFont(const LEUnicode chars[], le_int32 *offset,
-- le_int32 limit, le_int32 script, LEErrorCode &success) const;
-+ virtual const LEFontInstance *getSubFont(const LEUnicode chars[], le_int32 *offset, le_int32 limit, le_int32 script, LEErrorCode &success) const;
-
- //
- // Font file access
-@@ -238,8 +243,7 @@
- *
- * @draft ICU 3.0
- */
-- virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count,
-- le_bool reverse, const LECharMapper *mapper, LEGlyphStorage &glyphStorage) const;
-+ virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, const LECharMapper *mapper, LEGlyphStorage &glyphStorage) const;
-
- /**
- * This method maps a single character to a glyph index, using the
-@@ -502,6 +506,21 @@
- * @stable ICU 3.2
- */
- virtual le_int32 getLineHeight() const;
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
-+ *
-+ * @stable ICU 3.2
-+ */
-+ virtual UClassID getDynamicClassID() const;
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for this class.
-+ *
-+ * @stable ICU 3.2
-+ */
-+ static UClassID getStaticClassID();
-+
- };
-
- inline le_bool LEFontInstance::canDisplay(LEUnicode32 ch) const
-@@ -562,4 +581,7 @@
- return getAscent() + getDescent() + getLeading();
- }
-
-+U_NAMESPACE_END
- #endif
-+
-+
-diff --git a/src/share/native/sun/font/layout/LEGlyphFilter.h b/src/share/native/sun/font/layout/LEGlyphFilter.h
---- jdk/src/share/native/sun/font/layout/LEGlyphFilter.h
-+++ jdk/src/share/native/sun/font/layout/LEGlyphFilter.h
-@@ -34,14 +34,15 @@
-
- #include "LETypes.h"
-
-+U_NAMESPACE_BEGIN
-+
- /**
- * This is a helper class that is used to
- * recognize a set of glyph indices.
- *
- * @internal
- */
--class LEGlyphFilter
--{
-+class LEGlyphFilter /* not : public UObject because this is an interface/mixin class */ {
- public:
- /**
- * Destructor.
-@@ -63,4 +64,5 @@
- virtual le_bool accept(LEGlyphID glyph) const = 0;
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/LEGlyphStorage.cpp b/src/share/native/sun/font/layout/LEGlyphStorage.cpp
---- jdk/src/share/native/sun/font/layout/LEGlyphStorage.cpp
-+++ jdk/src/share/native/sun/font/layout/LEGlyphStorage.cpp
-@@ -24,7 +24,6 @@
- */
-
- /*
-- *
- **********************************************************************
- * Copyright (C) 1998-2005, International Business Machines
- * Corporation and others. All Rights Reserved.
-@@ -35,6 +34,10 @@
- #include "LEInsertionList.h"
- #include "LEGlyphStorage.h"
-
-+U_NAMESPACE_BEGIN
-+
-+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LEGlyphStorage)
-+
- LEGlyphStorage::LEGlyphStorage()
- : fGlyphCount(0), fGlyphs(NULL), fCharIndices(NULL), fPositions(NULL),
- fAuxData(NULL), fInsertionList(NULL), fSrcIndex(0), fDestIndex(0)
-@@ -603,3 +606,6 @@
-
- return FALSE;
- }
-+
-+U_NAMESPACE_END
-+
-diff --git a/src/share/native/sun/font/layout/LEGlyphStorage.h b/src/share/native/sun/font/layout/LEGlyphStorage.h
---- jdk/src/share/native/sun/font/layout/LEGlyphStorage.h
-+++ jdk/src/share/native/sun/font/layout/LEGlyphStorage.h
-@@ -24,7 +24,6 @@
- */
-
- /*
-- *
- **********************************************************************
- * Copyright (C) 1998-2005, International Business Machines
- * Corporation and others. All Rights Reserved.
-@@ -38,6 +37,13 @@
- #include "LEInsertionList.h"
-
- /**
-+ * \file
-+ * \brief C++ API: This class encapsulates the per-glyph storage used by the ICU LayoutEngine.
-+ */
-+
-+U_NAMESPACE_BEGIN
-+
-+/**
- * This class encapsulates the per-glyph storage used by the ICU LayoutEngine.
- * For each glyph it holds the glyph ID, the index of the backing store character
- * which produced the glyph, the X and Y position of the glyph and an auxillary data
-@@ -50,7 +56,7 @@
- *
- * @draft ICU 3.6
- */
--class U_LAYOUT_API LEGlyphStorage : protected LEInsertionCallback
-+class U_LAYOUT_API LEGlyphStorage : public UObject, protected LEInsertionCallback
- {
- private:
- /**
-@@ -112,35 +118,37 @@
-
- protected:
- /**
-- * This implements <code>LEInsertionCallback</code>. The
-- * <code>LEInsertionList</code> will call this method once for
-- * each insertion.
-+ * This implements <code>LEInsertionCallback</code>. The <code>LEInsertionList</code>
-+ * will call this method once for each insertion.
- *
- * @param atPosition the position of the insertion
- * @param count the number of glyphs being inserted
- * @param newGlyphs the address of the new glyph IDs
- *
-- * @return <code>true</code> if <code>LEInsertionList</code>
-- * should stop processing the insertion list after this insertion.
-+ * @return <code>true</code> if <code>LEInsertionList</code> should stop
-+ * processing the insertion list after this insertion.
- *
- * @see LEInsertionList.h
- *
- * @draft ICU 3.0
- */
-- virtual le_bool applyInsertion(le_int32 atPosition, le_int32 count,
-- LEGlyphID newGlyphs[]);
-+ virtual le_bool applyInsertion(le_int32 atPosition, le_int32 count, LEGlyphID newGlyphs[]);
-
- public:
-
- /**
-- * Allocates an empty <code>LEGlyphStorage</code> object. You must
-- * call <code>allocateGlyphArray, allocatePositions and
-- * allocateAuxData</code> to allocate the data.
-+ * Allocates an empty <code>LEGlyphStorage</code> object. You must call
-+ * <code>allocateGlyphArray, allocatePositions and allocateAuxData</code>
-+ * to allocate the data.
-+ *
-+ * @draft ICU 3.0
- */
- LEGlyphStorage();
-
- /**
- * The destructor. This will deallocate all of the arrays.
-+ *
-+ * @draft ICU 3.0
- */
- ~LEGlyphStorage();
-
-@@ -154,9 +162,9 @@
- inline le_int32 getGlyphCount() const;
-
- /**
-- * This method copies the glyph array into a caller supplied
-- * array. The caller must ensure that the array is large enough
-- * to hold all the glyphs.
-+ * This method copies the glyph array into a caller supplied array.
-+ * The caller must ensure that the array is large enough to hold all
-+ * the glyphs.
- *
- * @param glyphs - the destiniation glyph array
- * @param success - set to an error code if the operation fails
-@@ -166,10 +174,10 @@
- void getGlyphs(LEGlyphID glyphs[], LEErrorCode &success) const;
-
- /**
-- * This method copies the glyph array into a caller supplied
-- * array, ORing in extra bits. (This functionality is needed by
-- * the JDK, which uses 32 bits pre glyph idex, with the high 16
-- * bits encoding the composite font slot number)
-+ * This method copies the glyph array into a caller supplied array,
-+ * ORing in extra bits. (This functionality is needed by the JDK,
-+ * which uses 32 bits pre glyph idex, with the high 16 bits encoding
-+ * the composite font slot number)
- *
- * @param glyphs - the destination (32 bit) glyph array
- * @param extraBits - this value will be ORed with each glyph index
-@@ -177,13 +185,12 @@
- *
- * @draft ICU 3.0
- */
-- void getGlyphs(le_uint32 glyphs[], le_uint32 extraBits,
-- LEErrorCode &success) const;
-+ void getGlyphs(le_uint32 glyphs[], le_uint32 extraBits, LEErrorCode &success) const;
-
- /**
-- * This method copies the character index array into a caller
-- * supplied array. The caller must ensure that the array is large
-- * enough to hold a character index for each glyph.
-+ * This method copies the character index array into a caller supplied array.
-+ * The caller must ensure that the array is large enough to hold a
-+ * character index for each glyph.
- *
- * @param charIndices - the destiniation character index array
- * @param success - set to an error code if the operation fails
-@@ -193,9 +200,9 @@
- void getCharIndices(le_int32 charIndices[], LEErrorCode &success) const;
-
- /**
-- * This method copies the character index array into a caller
-- * supplied array. The caller must ensure that the array is large
-- * enough to hold a character index for each glyph.
-+ * This method copies the character index array into a caller supplied array.
-+ * The caller must ensure that the array is large enough to hold a
-+ * character index for each glyph.
- *
- * @param charIndices - the destiniation character index array
- * @param indexBase - an offset which will be added to each index
-@@ -203,14 +210,13 @@
- *
- * @draft ICU 3.0
- */
-- void getCharIndices(le_int32 charIndices[], le_int32 indexBase,
-- LEErrorCode &success) const;
-+ void getCharIndices(le_int32 charIndices[], le_int32 indexBase, LEErrorCode &success) const;
-
- /**
-- * This method copies the position array into a caller supplied
-- * array. The caller must ensure that the array is large enough
-- * to hold an X and Y position for each glyph, plus an extra X and
-- * Y for the advance of the last glyph.
-+ * This method copies the position array into a caller supplied array.
-+ * The caller must ensure that the array is large enough to hold an
-+ * X and Y position for each glyph, plus an extra X and Y for the
-+ * advance of the last glyph.
- *
- * @param positions - the destiniation position array
- * @param success - set to an error code if the operation fails
-@@ -233,33 +239,27 @@
- *
- * @draft ICU 3.0
- */
-- void getGlyphPosition(le_int32 glyphIndex, float &x, float &y,
-- LEErrorCode &success) const;
-+ void getGlyphPosition(le_int32 glyphIndex, float &x, float &y, LEErrorCode &success) const;
-
- /**
-- * This method allocates the glyph array, the char indices array
-- * and the insertion list. You must call this method before using
-- * the object. This method also initializes the char indices
-+ * This method allocates the glyph array, the char indices array and the insertion list. You
-+ * must call this method before using the object. This method also initializes the char indices
- * array.
-- * @param initialGlyphCount the initial size of the glyph and char
-- * indices arrays.
-- * @param rightToLeft <code>true</code> if the original input text
-- * is right to left.
-- * @param success set to an error code if the storage cannot be
-- * allocated of if the initial glyph count is not positive.
-+ *
-+ * @param initialGlyphCount the initial size of the glyph and char indices arrays.
-+ * @param rightToLeft <code>true</code> if the original input text is right to left.
-+ * @param success set to an error code if the storage cannot be allocated of if the initial
-+ * glyph count is not positive.
- *
- * @draft ICU 3.0
- */
-- void allocateGlyphArray(le_int32 initialGlyphCount, le_bool rightToLeft,
-- LEErrorCode &success);
-+ void allocateGlyphArray(le_int32 initialGlyphCount, le_bool rightToLeft, LEErrorCode &success);
-
- /**
-- * This method allocates the storage for the glyph positions. It
-- * allocates one extra X, Y position pair for the position just
-- * after the last glyph.
-+ * This method allocates the storage for the glyph positions. It allocates one extra X, Y
-+ * position pair for the position just after the last glyph.
- *
-- * @param success set to an error code if the positions array
-- * cannot be allocated.
-+ * @param success set to an error code if the positions array cannot be allocated.
- *
- * @return the number of X, Y position pairs allocated.
- *
-@@ -270,8 +270,7 @@
- /**
- * This method allocates the storage for the auxillary glyph data.
- *
-- * @param success set to an error code if the aulillary data array
-- * cannot be allocated.
-+ * @param success set to an error code if the aulillary data array cannot be allocated.
- *
- * @return the size of the auxillary data array.
- *
-@@ -282,10 +281,8 @@
- /**
- * Copy the entire auxillary data array.
- *
-- * @param auxData the auxillary data array will be copied to this
-- * address
-- * @param success set to an error code if the data cannot be
-- * copied
-+ * @param auxData the auxillary data array will be copied to this address
-+ * @param success set to an error code if the data cannot be copied
- *
- * @draft ICU 3.6
- */
-@@ -295,8 +292,7 @@
- * Get the glyph ID for a particular glyph.
- *
- * @param glyphIndex the index into the glyph array
-- * @param success set to an error code if the glyph ID cannot be
-- * retrieved.
-+ * @param success set to an error code if the glyph ID cannot be retrieved.
- *
- * @return the glyph ID
- *
-@@ -308,8 +304,7 @@
- * Get the char index for a particular glyph.
- *
- * @param glyphIndex the index into the glyph array
-- * @param success set to an error code if the char index cannot be
-- * retrieved.
-+ * @param success set to an error code if the char index cannot be retrieved.
- *
- * @return the character index
- *
-@@ -322,8 +317,7 @@
- * Get the auxillary data for a particular glyph.
- *
- * @param glyphIndex the index into the glyph array
-- * @param success set to an error code if the auxillary data
-- * cannot be retrieved.
-+ * @param success set to an error code if the auxillary data cannot be retrieved.
- *
- * @return the auxillary data
- *
-@@ -345,11 +339,10 @@
-
- /**
- * Call this method to replace a single glyph in the glyph array
-- * with multiple glyphs. This method uses the
-- * <code>LEInsertionList</code> to do the insertion. It returns
-- * the address of storage where the new glyph IDs can be
-- * stored. They will not actually be inserted into the glyph array
-- * until <code>applyInsertions</code> is called.
-+ * with multiple glyphs. This method uses the <code>LEInsertionList</code>
-+ * to do the insertion. It returns the address of storage where the new
-+ * glyph IDs can be stored. They will not actually be inserted into the
-+ * glyph array until <code>applyInsertions</code> is called.
- *
- * @param atIndex the index of the glyph to be replaced
- * @param insertCount the number of glyphs to replace it with
-@@ -381,26 +374,22 @@
- *
- * @param glyphIndex the index of the glyph
- * @param glyphID the new glyph ID
-- * @param success will be set to an error code if the glyph ID
-- * cannot be set.
-+ * @param success will be set to an error code if the glyph ID cannot be set.
- *
- * @draft ICU 3.0
- */
-- void setGlyphID(le_int32 glyphIndex, LEGlyphID glyphID,
-- LEErrorCode &success);
-+ void setGlyphID(le_int32 glyphIndex, LEGlyphID glyphID, LEErrorCode &success);
-
- /**
- * Set the char index for a particular glyph.
- *
- * @param glyphIndex the index of the glyph
- * @param charIndex the new char index
-- * @param success will be set to an error code if the char index
-- * cannot be set.
-+ * @param success will be set to an error code if the char index cannot be set.
- *
- * @draft ICU 3.0
- */
-- void setCharIndex(le_int32 glyphIndex, le_int32 charIndex,
-- LEErrorCode &success);
-+ void setCharIndex(le_int32 glyphIndex, le_int32 charIndex, LEErrorCode &success);
-
- /**
- * Set the X, Y position for a particular glyph.
-@@ -408,13 +397,11 @@
- * @param glyphIndex the index of the glyph
- * @param x the new X position
- * @param y the new Y position
-- * @param success will be set to an error code if the position
-- * cannot be set.
-+ * @param success will be set to an error code if the position cannot be set.
- *
- * @draft ICU 3.0
- */
-- void setPosition(le_int32 glyphIndex, float x, float y,
-- LEErrorCode &success);
-+ void setPosition(le_int32 glyphIndex, float x, float y, LEErrorCode &success);
-
- /**
- * Adjust the X, Y position for a particular glyph.
-@@ -422,21 +409,18 @@
- * @param glyphIndex the index of the glyph
- * @param xAdjust the adjustment to the glyph's X position
- * @param yAdjust the adjustment to the glyph's Y position
-- * @param success will be set to an error code if the glyph's
-- * position cannot be adjusted.
-+ * @param success will be set to an error code if the glyph's position cannot be adjusted.
- *
- * @draft ICU 3.0
- */
-- void adjustPosition(le_int32 glyphIndex, float xAdjust, float yAdjust,
-- LEErrorCode &success);
-+ void adjustPosition(le_int32 glyphIndex, float xAdjust, float yAdjust, LEErrorCode &success);
-
- /**
- * Set the auxillary data for a particular glyph.
- *
- * @param glyphIndex the index of the glyph
- * @param auxData the new auxillary data
-- * @param success will be set to an error code if the auxillary
-- * data cannot be set.
-+ * @param success will be set to an error code if the auxillary data cannot be set.
- *
- * @draft ICU 3.6
- */
-@@ -511,14 +495,28 @@
- void adoptGlyphCount(le_int32 newGlyphCount);
-
- /**
-- * This method frees the glyph, character index, position and
-- * auxillary data arrays so that the LayoutEngine can be reused to
-- * layout a different characer array. (This method is also called
-+ * This method frees the glyph, character index, position and
-+ * auxillary data arrays so that the LayoutEngine can be reused
-+ * to layout a different characer array. (This method is also called
- * by the destructor)
- *
- * @draft ICU 3.0
- */
- void reset();
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
-+ *
-+ * @draft ICU 3.0
-+ */
-+ virtual UClassID getDynamicClassID() const;
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for this class.
-+ *
-+ * @draft ICU 3.0
-+ */
-+ static UClassID getStaticClassID();
- };
-
- inline le_int32 LEGlyphStorage::getGlyphCount() const
-@@ -531,4 +529,7 @@
- return fGlyphs[glyphIndex];
- }
-
-+
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/LEInsertionList.cpp b/src/share/native/sun/font/layout/LEInsertionList.cpp
---- jdk/src/share/native/sun/font/layout/LEInsertionList.cpp
-+++ jdk/src/share/native/sun/font/layout/LEInsertionList.cpp
-@@ -24,7 +24,6 @@
- */
-
- /*
-- *
- **********************************************************************
- * Copyright (C) 1998-2004, International Business Machines
- * Corporation and others. All Rights Reserved.
-@@ -34,6 +33,8 @@
- #include "LETypes.h"
- #include "LEInsertionList.h"
-
-+U_NAMESPACE_BEGIN
-+
- #define ANY_NUMBER 1
-
- struct InsertionRecord
-@@ -44,6 +45,8 @@
- LEGlyphID glyphs[ANY_NUMBER];
- };
-
-+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LEInsertionList)
-+
- LEInsertionList::LEInsertionList(le_bool rightToLeft)
- : head(NULL), tail(NULL), growAmount(0), append(rightToLeft)
- {
-@@ -106,3 +109,5 @@
-
- return FALSE;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/LEInsertionList.h b/src/share/native/sun/font/layout/LEInsertionList.h
---- jdk/src/share/native/sun/font/layout/LEInsertionList.h
-+++ jdk/src/share/native/sun/font/layout/LEInsertionList.h
-@@ -24,7 +24,6 @@
- */
-
- /*
-- *
- **********************************************************************
- * Copyright (C) 1998-2004, International Business Machines
- * Corporation and others. All Rights Reserved.
-@@ -36,6 +35,8 @@
-
- #include "LETypes.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct InsertionRecord;
-
- /**
-@@ -78,7 +79,7 @@
- *
- * @internal
- */
--class LEInsertionList
-+class LEInsertionList : public UObject
- {
- public:
- /**
-@@ -140,6 +141,20 @@
- */
- void reset();
-
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ virtual UClassID getDynamicClassID() const;
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for this class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ static UClassID getStaticClassID();
-+
- private:
-
- /**
-@@ -174,4 +189,6 @@
- le_bool append;
- };
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/LELanguages.h b/src/share/native/sun/font/layout/LELanguages.h
---- jdk/src/share/native/sun/font/layout/LELanguages.h
-+++ jdk/src/share/native/sun/font/layout/LELanguages.h
-@@ -25,10 +25,12 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2004. All Rights Reserved.
-+ * (C) Copyright IBM Corp. 1998-2005. All Rights Reserved.
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
-+ *
-+ * Generated on: 07/19/2005 01:01:08 PM PDT
- */
-
- #ifndef __LELANGUAGES_H
-@@ -37,11 +39,18 @@
- #include "LETypes.h"
-
- /**
-+ * \file
-+ * \brief C++ API: List of language codes for LayoutEngine
-+ */
-+
-+U_NAMESPACE_BEGIN
-+
-+/**
- * A provisional list of language codes. For now,
- * this is just a list of languages which the LayoutEngine
- * supports.
- *
-- * @draft ICU 3.0
-+ * @draft ICU 3.4
- */
-
- enum LanguageCodes {
-@@ -79,4 +88,5 @@
- languageCodeCount = 30
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/LEScripts.h b/src/share/native/sun/font/layout/LEScripts.h
---- jdk/src/share/native/sun/font/layout/LEScripts.h
-+++ jdk/src/share/native/sun/font/layout/LEScripts.h
-@@ -25,17 +25,23 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2004. All Rights Reserved.
-+ * (C) Copyright IBM Corp. 1998-2005. All Rights Reserved.
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
-- *
- */
-
- #ifndef __LESCRIPTS_H
- #define __LESCRIPTS_H
-
- #include "LETypes.h"
-+/**
-+ * \file
-+ * \brief C++ API: Constants for Unicode script values
-+ */
-+
-+
-+U_NAMESPACE_BEGIN
-
- /**
- * Constants for Unicode script values, generated using
-@@ -104,4 +110,5 @@
- scriptCodeCount = 55
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/LEStandalone.h b/src/share/native/sun/font/layout/LEStandalone.h
-new file mode 100644
---- /dev/null
-+++ jdk/src/share/native/sun/font/layout/LEStandalone.h
-@@ -0,0 +1,132 @@
-+/*
-+ * 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.
-+ *
-+ */
-+
-+#ifndef __LESTANDALONE
-+#define __LESTANDALONE
-+
-+/* Definitions to make Layout Engine work away from ICU. */
-+#ifndef U_NAMESPACE_BEGIN
-+#define U_NAMESPACE_BEGIN
-+#endif
-+
-+#ifndef U_NAMESPACE_END
-+#define U_NAMESPACE_END
-+#endif
-+
-+/* RTTI Definition */
-+typedef const char *UClassID;
-+#ifndef UOBJECT_DEFINE_RTTI_IMPLEMENTATION
-+#define UOBJECT_DEFINE_RTTI_IMPLEMENTATION(x) UClassID x::getStaticClassID(){static char z=0; return (UClassID)&z; } UClassID x::getDynamicClassID() const{return x::getStaticClassID(); }
-+#endif
-+
-+/* UMemory's functions aren't used by the layout engine. */
-+struct UMemory {};
-+/* UObject's functions aren't used by the layout engine. */
-+struct UObject {};
-+
-+/* String handling */
-+#include <stdlib.h>
-+#include <string.h>
-+
-+/**
-+ * A convenience macro to test for the success of a LayoutEngine call.
-+ *
-+ * @stable ICU 2.4
-+ */
-+#define LE_SUCCESS(code) ((code)<=LE_NO_ERROR)
-+
-+/**
-+ * A convenience macro to test for the failure of a LayoutEngine call.
-+ *
-+ * @stable ICU 2.4
-+ */
-+#define LE_FAILURE(code) ((code)>LE_NO_ERROR)
-+
-+
-+#ifndef _LP64
-+typedef long le_int32;
-+typedef unsigned long le_uint32;
-+#else
-+typedef int le_int32;
-+typedef unsigned int le_uint32;
-+#endif
-+
-+#define HAVE_LE_INT32 1
-+#define HAVE_LE_UINT32 1
-+
-+typedef unsigned short UChar;
-+typedef le_uint32 UChar32;
-+
-+typedef short le_int16;
-+#define HAVE_LE_INT16 1
-+
-+typedef unsigned short le_uint16;
-+#define HAVE_LE_UINT16
-+
-+typedef signed char le_int8;
-+#define HAVE_LE_INT8
-+
-+typedef unsigned char le_uint8;
-+#define HAVE_LE_UINT8
-+
-+typedef char UBool;
-+
-+/**
-+ * Error codes returned by the LayoutEngine.
-+ *
-+ * @stable ICU 2.4
-+ */
-+enum LEErrorCode {
-+ /* informational */
-+ LE_NO_SUBFONT_WARNING = -127, // U_USING_DEFAULT_WARNING,
-+
-+ /* success */
-+ LE_NO_ERROR = 0, // U_ZERO_ERROR,
-+
-+ /* failures */
-+ LE_ILLEGAL_ARGUMENT_ERROR = 1, // U_ILLEGAL_ARGUMENT_ERROR,
-+ LE_MEMORY_ALLOCATION_ERROR = 7, // U_MEMORY_ALLOCATION_ERROR,
-+ LE_INDEX_OUT_OF_BOUNDS_ERROR = 8, //U_INDEX_OUTOFBOUNDS_ERROR,
-+ LE_NO_LAYOUT_ERROR = 16, // U_UNSUPPORTED_ERROR,
-+ LE_INTERNAL_ERROR = 5, // U_INTERNAL_PROGRAM_ERROR,
-+ LE_FONT_FILE_NOT_FOUND_ERROR = 4, // U_FILE_ACCESS_ERROR,
-+ LE_MISSING_FONT_TABLE_ERROR = 2 // U_MISSING_RESOURCE_ERROR
-+};
-+#define HAVE_LEERRORCODE
-+
-+#define U_LAYOUT_API
-+
-+#define uprv_malloc malloc
-+#define uprv_free free
-+#define uprv_memcpy memcpy
-+#define uprv_realloc realloc
-+
-+#if !defined(U_IS_BIG_ENDIAN)
-+ #ifdef _LITTLE_ENDIAN
-+ #define U_IS_BIG_ENDIAN 0
-+ #endif
-+#endif
-+
-+#endif
-diff --git a/src/share/native/sun/font/layout/LESwaps.h b/src/share/native/sun/font/layout/LESwaps.h
---- jdk/src/share/native/sun/font/layout/LESwaps.h
-+++ jdk/src/share/native/sun/font/layout/LESwaps.h
-@@ -26,7 +26,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-@@ -35,11 +35,12 @@
-
- #include "LETypes.h"
-
--#if !defined(U_IS_BIG_ENDIAN)
-- #ifdef _LITTLE_ENDIAN
-- #define U_IS_BIG_ENDIAN 0
-- #endif
--#endif
-+/**
-+ * \file
-+ * \brief C++ API: Endian independent access to data for LayoutEngine
-+ */
-+
-+U_NAMESPACE_BEGIN
-
- /**
- * A convenience macro which invokes the swapWord member function
-@@ -47,7 +48,6 @@
- *
- * @stable ICU 2.8
- */
--
- #if defined(U_IS_BIG_ENDIAN)
- #if U_IS_BIG_ENDIAN
- #define SWAPW(value) (value)
-@@ -64,7 +64,6 @@
- *
- * @stable ICU 2.8
- */
--
- #if defined(U_IS_BIG_ENDIAN)
- #if U_IS_BIG_ENDIAN
- #define SWAPL(value) (value)
-@@ -86,8 +85,7 @@
- *
- * @stable ICU 2.8
- */
--class LESwaps
--{
-+class U_LAYOUT_API LESwaps /* not : public UObject because all methods are static */ {
- public:
-
- #if !defined(U_IS_BIG_ENDIAN)
-@@ -144,4 +142,5 @@
- LESwaps() {} // private - forbid instantiation
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/LETypes.h b/src/share/native/sun/font/layout/LETypes.h
---- jdk/src/share/native/sun/font/layout/LETypes.h
-+++ jdk/src/share/native/sun/font/layout/LETypes.h
-@@ -23,7 +23,6 @@
- *
- */
-
--
- /*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-@@ -33,73 +32,97 @@
- #ifndef __LETYPES_H
- #define __LETYPES_H
-
-+/**
-+ * If LE_Standalone is defined, it must exist and contain
-+ * definitions for some core ICU defines.
-+ */
-+#ifdef LE_STANDALONE
-+#include "LEStandalone.h"
-+#endif
-+
-+#ifdef LE_STANDALONE
-+/* Stand-alone Layout Engine- without ICU. */
-+#include "LEStandalone.h"
- #define LE_USE_CMEMORY
-+#else
-+#if !defined(LE_USE_CMEMORY) && (defined(U_LAYOUT_IMPLEMENTATION) || defined(U_LAYOUTEX_IMPLEMENTATION) || defined(U_STATIC_IMPLEMENTATION) || defined(U_COMBINED_IMPLEMENTATION))
-+#define LE_USE_CMEMORY
-+#endif
-
-+#include "unicode/utypes.h"
-+#include "unicode/uobject.h"
- #ifdef LE_USE_CMEMORY
- #include "cmemory.h"
- #endif
-+#endif /* not standalone */
-
--#ifndef _LP64
--typedef long le_int32;
--typedef unsigned long le_uint32;
--#else
--typedef int le_int32;
--typedef unsigned int le_uint32;
--#endif
-+U_NAMESPACE_BEGIN
-
--typedef short le_int16;
--typedef unsigned short le_uint16;
--typedef signed char le_int8;
--typedef unsigned char le_uint8;
--typedef char le_bool;
-+/*!
-+ * \file
-+ * \brief Basic definitions for the ICU LayoutEngine
-+ */
-
--typedef char UClassID;
--
--#if 0
- /**
- * A type used for signed, 32-bit integers.
- *
- * @stable ICU 2.4
- */
-+#ifndef HAVE_LE_INT32
- typedef int32_t le_int32;
-+#endif
-
- /**
- * A type used for unsigned, 32-bit integers.
- *
- * @stable ICU 2.4
- */
-+#ifndef HAVE_LE_UINT32
- typedef uint32_t le_uint32;
-+#endif
-
- /**
- * A type used for signed, 16-bit integers.
- *
- * @stable ICU 2.4
- */
-+#ifndef HAVE_LE_INT16
- typedef int16_t le_int16;
-+#endif
-
-+#ifndef HAVE_LE_UINT16
- /**
- * A type used for unsigned, 16-bit integers.
- *
- * @stable ICU 2.4
- */
- typedef uint16_t le_uint16;
-+#endif
-
-+#ifndef HAVE_LE_INT8
- /**
- * A type used for signed, 8-bit integers.
- *
- * @stable ICU 2.4
- */
- typedef int8_t le_int8;
--
-+#endif
-+
-+#ifndef HAVE_LE_UINT8
- /**
- * A type used for unsigned, 8-bit integers.
- *
- * @stable ICU 2.4
- */
- typedef uint8_t le_uint8;
-+#endif
-
--typedef char le_bool;
--#endif
-+/**
-+* A type used for boolean values.
-+*
-+* @stable ICU 2.4
-+*/
-+typedef UBool le_bool;
-
- #ifndef TRUE
- /**
-@@ -292,21 +315,21 @@
- *
- * @stable ICU 2.4
- */
--typedef le_uint16 LEUnicode16;
-+typedef UChar LEUnicode16;
-
- /**
- * Used to represent 32-bit Unicode code points.
- *
- * @stable ICU 2.4
- */
--typedef le_uint32 LEUnicode32;
-+typedef UChar32 LEUnicode32;
-
- /**
- * Used to represent 16-bit Unicode code points.
- *
- * @deprecated since ICU 2.4. Use LEUnicode16 instead
- */
--typedef le_uint16 LEUnicode;
-+typedef UChar LEUnicode;
-
- /**
- * Used to hold a pair of (x, y) values which represent a point.
-@@ -353,7 +376,7 @@
- *
- * @internal
- */
--#define LE_ARRAY_COPY(dst, src, count) memcpy((void *) (dst), (void *) (src), (count) * sizeof (src)[0])
-+#define LE_ARRAY_COPY(dst, src, count) uprv_memcpy((void *) (dst), (void *) (src), (count) * sizeof (src)[0])
-
- /**
- * Allocate an array of basic types. This is used to isolate the rest of
-@@ -361,7 +384,7 @@
- *
- * @internal
- */
--#define LE_NEW_ARRAY(type, count) (type *) malloc((count) * sizeof(type))
-+#define LE_NEW_ARRAY(type, count) (type *) uprv_malloc((count) * sizeof(type))
-
- /**
- * Re-allocate an array of basic types. This is used to isolate the rest of
-@@ -369,7 +392,7 @@
- *
- * @internal
- */
--#define LE_GROW_ARRAY(array, newSize) realloc((void *) (array), (newSize) * sizeof (array)[0])
-+#define LE_GROW_ARRAY(array, newSize) uprv_realloc((void *) (array), (newSize) * sizeof (array)[0])
-
- /**
- * Free an array of basic types. This is used to isolate the rest of
-@@ -377,7 +400,7 @@
- *
- * @internal
- */
--#define LE_DELETE_ARRAY(array) free((void *) (array))
-+#define LE_DELETE_ARRAY(array) uprv_free((void *) (array))
- #endif
-
- /**
-@@ -595,22 +618,24 @@
- *
- * @stable ICU 2.4
- */
-+#ifndef HAVE_LEERRORCODE
- enum LEErrorCode {
- /* informational */
-- LE_NO_SUBFONT_WARNING = -127, // U_USING_DEFAULT_WARNING,
-+ LE_NO_SUBFONT_WARNING = U_USING_DEFAULT_WARNING, /**< The font does not contain subfonts. */
-
- /* success */
-- LE_NO_ERROR = 0, // U_ZERO_ERROR,
-+ LE_NO_ERROR = U_ZERO_ERROR, /**< No error, no warning. */
-
- /* failures */
-- LE_ILLEGAL_ARGUMENT_ERROR = 1, // U_ILLEGAL_ARGUMENT_ERROR,
-- LE_MEMORY_ALLOCATION_ERROR = 7, // U_MEMORY_ALLOCATION_ERROR,
-- LE_INDEX_OUT_OF_BOUNDS_ERROR = 8, //U_INDEX_OUTOFBOUNDS_ERROR,
-- LE_NO_LAYOUT_ERROR = 16, // U_UNSUPPORTED_ERROR,
-- LE_INTERNAL_ERROR = 5, // U_INTERNAL_PROGRAM_ERROR,
-- LE_FONT_FILE_NOT_FOUND_ERROR = 4, // U_FILE_ACCESS_ERROR,
-- LE_MISSING_FONT_TABLE_ERROR = 2 // U_MISSING_RESOURCE_ERROR
-+ LE_ILLEGAL_ARGUMENT_ERROR = U_ILLEGAL_ARGUMENT_ERROR, /**< An illegal argument was detected. */
-+ LE_MEMORY_ALLOCATION_ERROR = U_MEMORY_ALLOCATION_ERROR, /**< Memory allocation error. */
-+ LE_INDEX_OUT_OF_BOUNDS_ERROR = U_INDEX_OUTOFBOUNDS_ERROR, /**< Trying to access an index that is out of bounds. */
-+ LE_NO_LAYOUT_ERROR = U_UNSUPPORTED_ERROR, /**< You must call layoutChars() first. */
-+ LE_INTERNAL_ERROR = U_INTERNAL_PROGRAM_ERROR, /**< An internal error was encountered. */
-+ LE_FONT_FILE_NOT_FOUND_ERROR = U_FILE_ACCESS_ERROR, /**< The requested font file cannot be opened. */
-+ LE_MISSING_FONT_TABLE_ERROR = U_MISSING_RESOURCE_ERROR /**< The requested font table does not exist. */
- };
-+#endif
-
- #ifndef XP_CPLUSPLUS
- /**
-@@ -626,7 +651,9 @@
- *
- * @stable ICU 2.4
- */
--#define LE_SUCCESS(code) ((code)<=LE_NO_ERROR)
-+#ifndef LE_FAILURE
-+#define LE_SUCCESS(code) (U_SUCCESS((UErrorCode)code))
-+#endif
-
- enum LEFeatureENUMs {
- LE_Kerning_FEATURE_ENUM = 0,
-@@ -648,7 +675,11 @@
- *
- * @stable ICU 2.4
- */
--#define LE_FAILURE(code) ((code)>LE_NO_ERROR)
-+#ifndef LE_FAILURE
-+#define LE_FAILURE(code) (U_FAILURE((UErrorCode)code))
-+#endif
-
--#define U_LAYOUT_API
-+U_NAMESPACE_END
- #endif
-+
-+
-diff --git a/src/share/native/sun/font/layout/LayoutEngine.cpp b/src/share/native/sun/font/layout/LayoutEngine.cpp
---- jdk/src/share/native/sun/font/layout/LayoutEngine.cpp
-+++ jdk/src/share/native/sun/font/layout/LayoutEngine.cpp
-@@ -23,6 +23,7 @@
- *
- */
-
-+
- /*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-@@ -41,6 +42,7 @@
- #include "IndicLayoutEngine.h"
- #include "KhmerLayoutEngine.h"
- #include "ThaiLayoutEngine.h"
-+//#include "TibetanLayoutEngine.h"
- #include "GXLayoutEngine.h"
- #include "ScriptAndLanguageTags.h"
- #include "CharSubstitutionFilter.h"
-@@ -56,6 +58,8 @@
-
- #include "KernTable.h"
-
-+U_NAMESPACE_BEGIN
-+
- const LEUnicode32 DefaultCharMapper::controlChars[] = {
- 0x0009, 0x000A, 0x000D,
- /*0x200C, 0x200D,*/ 0x200E, 0x200F,
-@@ -102,9 +106,7 @@
- }
-
- if (fMirror) {
-- le_int32 index = OpenTypeUtilities::search((le_uint32) ch,
-- (le_uint32 *)DefaultCharMapper::mirroredChars,
-- DefaultCharMapper::mirroredCharsCount);
-+ le_int32 index = OpenTypeUtilities::search((le_uint32) ch, (le_uint32 *)DefaultCharMapper::mirroredChars, DefaultCharMapper::mirroredCharsCount);
-
- if (mirroredChars[index] == ch) {
- return DefaultCharMapper::srahCderorrim[index];
-@@ -133,6 +135,9 @@
- // nothing to do
- }
-
-+
-+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LayoutEngine)
-+
- #define ccmpFeatureTag LE_CCMP_FEATURE_TAG
-
- #define ccmpFeatureMask 0x80000000UL
-@@ -146,10 +151,9 @@
-
- static const le_int32 canonFeatureMapCount = LE_ARRAY_SIZE(canonFeatureMap);
-
--LayoutEngine::LayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode,
-- le_int32 languageCode, le_int32 typoFlags)
-- : fGlyphStorage(NULL), fFontInstance(fontInstance), fScriptCode(scriptCode),
-- fLanguageCode(languageCode), fTypoFlags(typoFlags)
-+LayoutEngine::LayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags)
-+ : fGlyphStorage(NULL), fFontInstance(fontInstance), fScriptCode(scriptCode), fLanguageCode(languageCode),
-+ fTypoFlags(typoFlags)
- {
- fGlyphStorage = new LEGlyphStorage();
- }
-@@ -159,8 +163,7 @@
- return fGlyphStorage->getGlyphCount();
- }
-
--void LayoutEngine::getCharIndices(le_int32 charIndices[], le_int32 indexBase,
-- LEErrorCode &success) const
-+void LayoutEngine::getCharIndices(le_int32 charIndices[], le_int32 indexBase, LEErrorCode &success) const
- {
- fGlyphStorage->getCharIndices(charIndices, indexBase, success);
- }
-@@ -171,8 +174,7 @@
- }
-
- // Copy the glyphs into caller's (32-bit) glyph array, OR in extraBits
--void LayoutEngine::getGlyphs(le_uint32 glyphs[], le_uint32 extraBits,
-- LEErrorCode &success) const
-+void LayoutEngine::getGlyphs(le_uint32 glyphs[], le_uint32 extraBits, LEErrorCode &success) const
- {
- fGlyphStorage->getGlyphs(glyphs, extraBits, success);
- }
-@@ -219,15 +221,13 @@
- fGlyphStorage->getGlyphPositions(positions, success);
- }
-
--void LayoutEngine::getGlyphPosition(le_int32 glyphIndex, float &x, float &y,
-- LEErrorCode &success) const
-+void LayoutEngine::getGlyphPosition(le_int32 glyphIndex, float &x, float &y, LEErrorCode &success) const
- {
- fGlyphStorage->getGlyphPosition(glyphIndex, x, y, success);
- }
-
--le_int32 LayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_int32 max, le_bool rightToLeft, LEUnicode *&outChars,
-- LEGlyphStorage &glyphStorage, LEErrorCode &success)
-+le_int32 LayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
- {
- if (LE_FAILURE(success)) {
- return 0;
-@@ -238,12 +238,7 @@
- return 0;
- }
-
-- if ((fTypoFlags & 0x4) == 0) { // no canonical processing
-- return count;
-- }
--
-- const GlyphSubstitutionTableHeader *canonGSUBTable =
-- (GlyphSubstitutionTableHeader *) CanonShaping::glyphSubstitutionTable;
-+ const GlyphSubstitutionTableHeader *canonGSUBTable = (GlyphSubstitutionTableHeader *) CanonShaping::glyphSubstitutionTable;
- LETag scriptTag = OpenTypeLayoutEngine::getScriptTag(fScriptCode);
- LETag langSysTag = OpenTypeLayoutEngine::getLangSysTag(fLanguageCode);
- le_int32 i, dir = 1, out = 0, outCharCount = count;
-@@ -257,16 +252,15 @@
- // We could just do the mark reordering for all scripts, but most
- // of them probably don't need it...
- if (fScriptCode == hebrScriptCode) {
-- reordered = LE_NEW_ARRAY(LEUnicode, count);
-+ reordered = LE_NEW_ARRAY(LEUnicode, count);
-
-- if (reordered == NULL) {
-- success = LE_MEMORY_ALLOCATION_ERROR;
-- return 0;
-- }
-+ if (reordered == NULL) {
-+ success = LE_MEMORY_ALLOCATION_ERROR;
-+ return 0;
-+ }
-
-- CanonShaping::reorderMarks(&chars[offset], count, rightToLeft,
-- reordered, glyphStorage);
-- inChars = reordered;
-+ CanonShaping::reorderMarks(&chars[offset], count, rightToLeft, reordered, glyphStorage);
-+ inChars = reordered;
- }
-
- glyphStorage.allocateGlyphArray(count, rightToLeft, success);
-@@ -290,8 +284,7 @@
- LE_DELETE_ARRAY(reordered);
- }
-
-- outCharCount = canonGSUBTable->process(glyphStorage, rightToLeft, scriptTag,
-- langSysTag, NULL, substitutionFilter, canonFeatureMap, canonFeatureMapCount, FALSE);
-+ outCharCount = canonGSUBTable->process(glyphStorage, rightToLeft, scriptTag, langSysTag, NULL, substitutionFilter, canonFeatureMap, canonFeatureMapCount, FALSE);
-
- out = (rightToLeft? outCharCount - 1 : 0);
-
-@@ -306,35 +299,26 @@
- return outCharCount;
- }
-
--
--le_int32 LayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_int32 max, le_bool rightToLeft,
-- LEGlyphStorage &glyphStorage, LEErrorCode &success)
-+le_int32 LayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-+ LEGlyphStorage &glyphStorage, LEErrorCode &success)
- {
- if (LE_FAILURE(success)) {
- return 0;
- }
-
-- if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max ||
-- offset + count > max) {
--
-+ if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
- success = LE_ILLEGAL_ARGUMENT_ERROR;
- return 0;
- }
-
- LEUnicode *outChars = NULL;
-- le_int32 outCharCount = characterProcessing(chars, offset, count, max,
-- rightToLeft, outChars, glyphStorage, success);
-+ le_int32 outCharCount = characterProcessing(chars, offset, count, max, rightToLeft, outChars, glyphStorage, success);
-
- if (outChars != NULL) {
-- mapCharsToGlyphs(outChars, 0, outCharCount, rightToLeft, rightToLeft,
-- glyphStorage, success);
-- // FIXME: a subclass may have allocated this, in which case this delete
-- // might not work...
-- LE_DELETE_ARRAY(outChars);
-+ mapCharsToGlyphs(outChars, 0, outCharCount, rightToLeft, rightToLeft, glyphStorage, success);
-+ LE_DELETE_ARRAY(outChars); // FIXME: a subclass may have allocated this, in which case this delete might not work...
- } else {
-- mapCharsToGlyphs(chars, offset, count, rightToLeft, rightToLeft,
-- glyphStorage, success);
-+ mapCharsToGlyphs(chars, offset, count, rightToLeft, rightToLeft, glyphStorage, success);
- }
-
- return glyphStorage.getGlyphCount();
-@@ -342,8 +326,7 @@
-
- // Input: glyphs
- // Output: positions
--void LayoutEngine::positionGlyphs(LEGlyphStorage &glyphStorage,
-- float x, float y, LEErrorCode &success)
-+void LayoutEngine::positionGlyphs(LEGlyphStorage &glyphStorage, float x, float y, LEErrorCode &success)
- {
- if (LE_FAILURE(success)) {
- return;
-@@ -370,9 +353,8 @@
- glyphStorage.setPosition(glyphCount, x, y, success);
- }
-
--void LayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_bool reverse,
-- LEGlyphStorage &glyphStorage, LEErrorCode &success)
-+void LayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse,
-+ LEGlyphStorage &glyphStorage, LEErrorCode &success)
- {
- if (LE_FAILURE(success)) {
- return;
-@@ -399,8 +381,7 @@
- return;
- }
-
--void LayoutEngine::adjustMarkGlyphs(LEGlyphStorage &glyphStorage,
-- LEGlyphFilter *markFilter, LEErrorCode &success)
-+void LayoutEngine::adjustMarkGlyphs(LEGlyphStorage &glyphStorage, LEGlyphFilter *markFilter, LEErrorCode &success)
- {
- float xAdjust = 0;
- le_int32 p, glyphCount = glyphStorage.getGlyphCount();
-@@ -436,9 +417,7 @@
- glyphStorage.adjustPosition(glyphCount, xAdjust, 0, success);
- }
-
--void LayoutEngine::adjustMarkGlyphs(const LEUnicode chars[], le_int32 charCount,
-- le_bool reverse, LEGlyphStorage &glyphStorage, LEGlyphFilter *markFilter,
-- LEErrorCode &success)
-+void LayoutEngine::adjustMarkGlyphs(const LEUnicode chars[], le_int32 charCount, le_bool reverse, LEGlyphStorage &glyphStorage, LEGlyphFilter *markFilter, LEErrorCode &success)
- {
- float xAdjust = 0;
- le_int32 c = 0, direction = 1, p;
-@@ -485,9 +464,8 @@
- return fFontInstance->getFontTable(tableTag);
- }
-
--void LayoutEngine::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_bool reverse, le_bool mirror,
-- LEGlyphStorage &glyphStorage, LEErrorCode &success)
-+void LayoutEngine::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool mirror,
-+ LEGlyphStorage &glyphStorage, LEErrorCode &success)
- {
- if (LE_FAILURE(success)) {
- return;
-@@ -497,32 +475,27 @@
-
- DefaultCharMapper charMapper(TRUE, mirror);
-
-- fFontInstance->mapCharsToGlyphs(chars, offset, count, reverse,
-- &charMapper, glyphStorage);
-+ fFontInstance->mapCharsToGlyphs(chars, offset, count, reverse, &charMapper, glyphStorage);
- }
-
- // Input: characters, font?
- // Output: glyphs, positions, char indices
- // Returns: number of glyphs
--le_int32 LayoutEngine::layoutChars(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_int32 max, le_bool rightToLeft,
-- float x, float y, LEErrorCode &success)
-+le_int32 LayoutEngine::layoutChars(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-+ float x, float y, LEErrorCode &success)
- {
- if (LE_FAILURE(success)) {
- return 0;
- }
-
-- if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max ||
-- offset + count > max) {
--
-+ if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
- success = LE_ILLEGAL_ARGUMENT_ERROR;
- return 0;
- }
-
- le_int32 glyphCount;
-
-- glyphCount = computeGlyphs(chars, offset, count, max, rightToLeft,
-- *fGlyphStorage, success);
-+ glyphCount = computeGlyphs(chars, offset, count, max, rightToLeft, *fGlyphStorage, success);
- positionGlyphs(*fGlyphStorage, x, y, success);
- adjustGlyphPositions(chars, offset, count, rightToLeft, *fGlyphStorage, success);
-
-@@ -534,17 +507,13 @@
- fGlyphStorage->reset();
- }
-
--LayoutEngine *LayoutEngine::layoutEngineFactory(const LEFontInstance *fontInstance,
-- le_int32 scriptCode, le_int32 languageCode, LEErrorCode &success)
-+LayoutEngine *LayoutEngine::layoutEngineFactory(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, LEErrorCode &success)
- {
- // 3 -> kerning and ligatures
-- return LayoutEngine::layoutEngineFactory(fontInstance, scriptCode,
-- languageCode, LE_DEFAULT_FEATURE_FLAG, success);
-+ return LayoutEngine::layoutEngineFactory(fontInstance, scriptCode, languageCode, LE_DEFAULT_FEATURE_FLAG, success);
- }
-
--LayoutEngine *LayoutEngine::layoutEngineFactory(const LEFontInstance *fontInstance,
-- le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags,
-- LEErrorCode &success)
-+LayoutEngine *LayoutEngine::layoutEngineFactory(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags, LEErrorCode &success)
- {
- static const le_uint32 gsubTableTag = LE_GSUB_TABLE_TAG;
- static const le_uint32 mortTableTag = LE_MORT_TABLE_TAG;
-@@ -553,18 +522,12 @@
- return NULL;
- }
-
-- // code2000 has GPOS kern feature tags for latn script
--
-- const GlyphSubstitutionTableHeader *gsubTable =
-- (const GlyphSubstitutionTableHeader *) fontInstance->getFontTable(gsubTableTag);
-+ const GlyphSubstitutionTableHeader *gsubTable = (const GlyphSubstitutionTableHeader *) fontInstance->getFontTable(gsubTableTag);
- LayoutEngine *result = NULL;
- LETag scriptTag = 0x00000000;
- LETag languageTag = 0x00000000;
-
-- if (gsubTable != NULL &&
-- gsubTable->coversScript(scriptTag =
-- OpenTypeLayoutEngine::getScriptTag(scriptCode))) {
--
-+ if (gsubTable != NULL && gsubTable->coversScript(scriptTag = OpenTypeLayoutEngine::getScriptTag(scriptCode))) {
- switch (scriptCode) {
- case bengScriptCode:
- case devaScriptCode:
-@@ -576,13 +539,11 @@
- case tamlScriptCode:
- case teluScriptCode:
- case sinhScriptCode:
-- result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode,
-- languageCode, typoFlags, gsubTable);
-+ result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable);
- break;
-
- case arabScriptCode:
-- result = new ArabicOpenTypeLayoutEngine(fontInstance, scriptCode,
-- languageCode, typoFlags, gsubTable);
-+ result = new ArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable);
- break;
-
- case haniScriptCode:
-@@ -594,33 +555,33 @@
- case zhtLanguageCode:
- case zhsLanguageCode:
- if (gsubTable->coversScriptAndLanguage(scriptTag, languageTag, TRUE)) {
-- result = new HanOpenTypeLayoutEngine(fontInstance, scriptCode,
-- languageCode, typoFlags, gsubTable);
-+ result = new HanOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable);
- break;
- }
-
- // note: falling through to default case.
- default:
-- result = new OpenTypeLayoutEngine(fontInstance, scriptCode,
-- languageCode, typoFlags, gsubTable);
-+ result = new OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable);
- break;
- }
-
- break;
-+#if 0
-+ case tibtScriptCode:
-+ result = new TibetanOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable);
-+ break;
-+#endif
-
- case khmrScriptCode:
-- result = new KhmerOpenTypeLayoutEngine(fontInstance, scriptCode,
-- languageCode, typoFlags, gsubTable);
-+ result = new KhmerOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable);
- break;
-
- default:
-- result = new OpenTypeLayoutEngine(fontInstance, scriptCode,
-- languageCode, typoFlags, gsubTable);
-+ result = new OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable);
- break;
- }
- } else {
-- const MorphTableHeader *morphTable =
-- (MorphTableHeader *) fontInstance->getFontTable(mortTableTag);
-+ const MorphTableHeader *morphTable = (MorphTableHeader *) fontInstance->getFontTable(mortTableTag);
-
- if (morphTable != NULL && SWAPL(morphTable->version)==0x00010000) {
- result = new GXLayoutEngine(fontInstance, scriptCode, languageCode, morphTable);
-@@ -637,16 +598,18 @@
- case teluScriptCode:
- case sinhScriptCode:
- {
-- result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode,
-- languageCode, typoFlags);
-+ result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags);
- break;
- }
-
- case arabScriptCode:
-- result = new UnicodeArabicOpenTypeLayoutEngine(fontInstance, scriptCode,
-- languageCode, typoFlags);
-+ //case hebrScriptCode:
-+ result = new UnicodeArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags);
- break;
-
-+ //case hebrScriptCode:
-+ // return new HebrewOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags);
-+
- case thaiScriptCode:
- result = new ThaiLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags);
- break;
-@@ -668,3 +631,5 @@
- LayoutEngine::~LayoutEngine() {
- delete fGlyphStorage;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/LayoutEngine.h b/src/share/native/sun/font/layout/LayoutEngine.h
---- jdk/src/share/native/sun/font/layout/LayoutEngine.h
-+++ jdk/src/share/native/sun/font/layout/LayoutEngine.h
-@@ -23,6 +23,7 @@
- *
- */
-
-+
- /*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-@@ -34,63 +35,61 @@
-
- #include "LETypes.h"
-
--#include <string.h>
-+/**
-+ * \file
-+ * \brief C++ API: Virtual base class for complex text layout.
-+ */
-+
-+U_NAMESPACE_BEGIN
-
- class LEFontInstance;
- class LEGlyphFilter;
- class LEGlyphStorage;
-
- /**
-- * This is a virtual base class used to do complex text layout. The
-- * text must all be in a single font, script, and language. An
-- * instance of a LayoutEngine can be created by calling the
-- * layoutEngineFactory method. Fonts are identified by instances of
-- * the LEFontInstance class. Script and language codes are identified
-+ * This is a virtual base class used to do complex text layout. The text must all
-+ * be in a single font, script, and language. An instance of a LayoutEngine can be
-+ * created by calling the layoutEngineFactory method. Fonts are identified by
-+ * instances of the LEFontInstance class. Script and language codes are identified
- * by integer codes, which are defined in ScriptAndLanuageTags.h.
- *
-- * Note that this class is not public API. It is declared public so
-- * that it can be exported from the library that it is a part of.
-+ * Note that this class is not public API. It is declared public so that it can be
-+ * exported from the library that it is a part of.
- *
-- * The input to the layout process is an array of characters in
-- * logical order, and a starting X, Y position for the text. The
-- * output is an array of glyph indices, an array of character indices
-- * for the glyphs, and an array of glyph positions. These arrays are
-- * protected members of LayoutEngine which can be retreived by a
-- * public method. The reset method can be called to free these arrays
-- * so that the LayoutEngine can be reused.
-+ * The input to the layout process is an array of characters in logical order,
-+ * and a starting X, Y position for the text. The output is an array of glyph indices,
-+ * an array of character indices for the glyphs, and an array of glyph positions.
-+ * These arrays are protected members of LayoutEngine which can be retreived by a
-+ * public method. The reset method can be called to free these arrays so that the
-+ * LayoutEngine can be reused.
- *
-- * The layout process is done in three steps. There is a protected
-- * virtual method for each step. These methods have a default
-- * implementation which only does character to glyph mapping and
-- * default positioning using the glyph's advance widths. Subclasses
-- * can override these methods for more advanced layout. There is a
-- * public method which invokes the steps in the correct order.
-+ * The layout process is done in three steps. There is a protected virtual method
-+ * for each step. These methods have a default implementation which only does
-+ * character to glyph mapping and default positioning using the glyph's advance
-+ * widths. Subclasses can override these methods for more advanced layout.
-+ * There is a public method which invokes the steps in the correct order.
- *
- * The steps are:
- *
-- * 1) Glyph processing - character to glyph mapping and any other
-- * glyph processing such as ligature substitution and contextual
-- * forms.
-+ * 1) Glyph processing - character to glyph mapping and any other glyph processing
-+ * such as ligature substitution and contextual forms.
- *
-- * 2) Glyph positioning - position the glyphs based on their advance
-- * widths.
-+ * 2) Glyph positioning - position the glyphs based on their advance widths.
- *
-- * 3) Glyph position adjustments - adjustment of glyph positions for
-- * kerning, accent placement, etc.
-+ * 3) Glyph position adjustments - adjustment of glyph positions for kerning,
-+ * accent placement, etc.
- *
-- * NOTE: in all methods below, output parameters are references to
-- * pointers so the method can allocate and free the storage as
-- * needed. All storage allocated in this way is owned by the object
-- * which created it, and will be freed when it is no longer needed, or
-- * when the object's destructor is invoked.
-+ * NOTE: in all methods below, output parameters are references to pointers so
-+ * the method can allocate and free the storage as needed. All storage allocated
-+ * in this way is owned by the object which created it, and will be freed when it
-+ * is no longer needed, or when the object's destructor is invoked.
- *
- * @see LEFontInstance
- * @see ScriptAndLanguageTags.h
- *
- * @stable ICU 2.8
- */
--class U_LAYOUT_API LayoutEngine
--{
-+class U_LAYOUT_API LayoutEngine : public UObject {
- protected:
- /**
- * The object which holds the glyph storage
-@@ -134,21 +133,21 @@
- le_int32 fTypoFlags;
-
- /**
-- * This constructs an instance for a given font, script and
-- * language. Subclass constructors
-+ * This constructs an instance for a given font, script and language. Subclass constructors
- * must call this constructor.
- *
- * @param fontInstance - the font for the text
- * @param scriptCode - the script for the text
- * @param languageCode - the language for the text
-+ * @param typoFlags - the typographic control flags for the text. Set bit 1 if kerning
-+ * is desired, set bit 2 if ligature formation is desired. Others are reserved.
- *
- * @see LEFontInstance
- * @see ScriptAndLanguageTags.h
- *
- * @internal
- */
-- LayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode,
-- le_int32 languageCode, le_int32 typoFlags);
-+ LayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags);
-
- /**
- * This overrides the default no argument constructor to make it
-@@ -160,11 +159,10 @@
- LayoutEngine();
-
- /**
-- * This method does any required pre-processing to the input
-- * characters. It may generate output characters that differ from
-- * the input charcters due to insertions, deletions, or
-- * reorderings. In such cases, it will also generate an output
-- * character index array reflecting these changes.
-+ * This method does any required pre-processing to the input characters. It
-+ * may generate output characters that differ from the input charcters due to
-+ * insertions, deletions, or reorderings. In such cases, it will also generate an
-+ * output character index array reflecting these changes.
- *
- * Subclasses must override this method.
- *
-@@ -173,44 +171,36 @@
- * @param offset - the index of the first character to process
- * @param count - the number of characters to process
- * @param max - the number of characters in the input context
-- * @param rightToLeft - TRUE if the characters are in a right to
-- * left directional run
-- * @param outChars - the output character array, if different from
-- * the input
-- * @param glyphStorage - the object that holds the per-glyph
-- * storage. The character index array may be set.
-+ * @param rightToLeft - TRUE if the characters are in a right to left directional run
-+ * @param outChars - the output character array, if different from the input
-+ * @param glyphStorage - the object that holds the per-glyph storage. The character index array may be set.
- * @param success - set to an error code if the operation fails
-- * @return the output character count (input character count if no
-- * change)
-+ *
-+ * @return the output character count (input character count if no change)
- *
- * @internal
- */
-- virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_int32 max, le_bool rightToLeft,
-- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+ virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
- /**
-- * This method does the glyph processing. It converts an array of
-- * characters into an array of glyph indices and character
-- * indices. The characters to be processed are passed in a
-- * surrounding context. The context is specified as a starting
-- * address and a maximum character count. An offset and a count
-- * are used to specify the characters to be processed.
-+ * This method does the glyph processing. It converts an array of characters
-+ * into an array of glyph indices and character indices. The characters to be
-+ * processed are passed in a surrounding context. The context is specified as
-+ * a starting address and a maximum character count. An offset and a count are
-+ * used to specify the characters to be processed.
- *
-- * The default implementation of this method only does character
-- * to glyph mapping. Subclasses needing more elaborate glyph
-- * processing must override this method.
-+ * The default implementation of this method only does character to glyph mapping.
-+ * Subclasses needing more elaborate glyph processing must override this method.
- *
- * Input parameters:
- * @param chars - the character context
- * @param offset - the offset of the first character to process
- * @param count - the number of characters to process
- * @param max - the number of characters in the context.
-- * @param rightToLeft - TRUE if the text is in a right to left
-- * directional run
-- * @param glyphStorage - the object which holds the per-glyph
-- * storage. The glyph and char indices arrays will be
-- * set.
-+ * @param rightToLeft - TRUE if the text is in a right to left directional run
-+ * @param glyphStorage - the object which holds the per-glyph storage. The glyph and char indices arrays
-+ * will be set.
- *
- * Output parameters:
- * @param success - set to an error code if the operation fails
-@@ -219,60 +209,50 @@
- *
- * @internal
- */
-- virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_int32 max, le_bool rightToLeft,
-- LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+ virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
- /**
-- * This method does basic glyph positioning. The default
-- * implementation positions the glyphs based on their advance
-- * widths. This is sufficient for most uses. It is not expected
-- * that many subclasses will override this method.
-+ * This method does basic glyph positioning. The default implementation positions
-+ * the glyphs based on their advance widths. This is sufficient for most uses. It
-+ * is not expected that many subclasses will override this method.
- *
- * Input parameters:
-- * @param glyphStorage - the object which holds the per-glyph storage.
-- * The glyph position array will be set.
-+ * @param glyphStorage - the object which holds the per-glyph storage. The glyph position array will be set.
- * @param x - the starting X position
- * @param y - the starting Y position
- * @param success - set to an error code if the operation fails
- *
- * @internal
- */
-- virtual void positionGlyphs(LEGlyphStorage &glyphStorage,
-- float x, float y, LEErrorCode &success);
-+ virtual void positionGlyphs(LEGlyphStorage &glyphStorage, float x, float y, LEErrorCode &success);
-
- /**
-- * This method does positioning adjustments like accent
-- * positioning and kerning. The default implementation does
-- * nothing. Subclasses needing position adjustments must override
-- * this method.
-+ * This method does positioning adjustments like accent positioning and
-+ * kerning. The default implementation does nothing. Subclasses needing
-+ * position adjustments must override this method.
- *
-- * Note that this method has both characters and glyphs as input
-- * so that it can use the character codes to determine glyph types
-- * if that information isn't directly available. (e.g. Some Arabic
-- * OpenType fonts don't have a GDEF table)
-+ * Note that this method has both characters and glyphs as input so that
-+ * it can use the character codes to determine glyph types if that information
-+ * isn't directly available. (e.g. Some Arabic OpenType fonts don't have a GDEF
-+ * table)
- *
- * @param chars - the input character context
- * @param offset - the offset of the first character to process
- * @param count - the number of characters to process
-- * @param reverse - <code>TRUE</code> if the glyphs in the glyph
-- * array have been reordered
-- * @param glyphStorage - the object which holds the per-glyph
-- * storage. The glyph positions will be adjusted as needed.
-- * @param success - output parameter set to an error code if the
-- * operation fails
-+ * @param reverse - <code>TRUE</code> if the glyphs in the glyph array have been reordered
-+ * @param glyphStorage - the object which holds the per-glyph storage. The glyph positions will be
-+ * adjusted as needed.
-+ * @param success - output parameter set to an error code if the operation fails
- *
- * @internal
- */
-- virtual void adjustGlyphPositions(const LEUnicode chars[],
-- le_int32 offset, le_int32 count, le_bool reverse,
-- LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+ virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
- /**
-- * This method gets a table from the font associated with the
-- * text. The default implementation gets the table from the font
-- * instance. Subclasses which need to get the tables some other
-- * way must override this method.
-+ * This method gets a table from the font associated with
-+ * the text. The default implementation gets the table from
-+ * the font instance. Subclasses which need to get the tables
-+ * some other way must override this method.
- *
- * @param tableTag - the four byte table tag.
- *
-@@ -283,127 +263,106 @@
- virtual const void *getFontTable(LETag tableTag) const;
-
- /**
-- * This method does character to glyph mapping. The default
-- * implementation uses the font instance to do the mapping. It
-- * will allocate the glyph and character index arrays if they're
-- * not already allocated. If it allocates the character index
-- * array, it will fill it it.
-+ * This method does character to glyph mapping. The default implementation
-+ * uses the font instance to do the mapping. It will allocate the glyph and
-+ * character index arrays if they're not already allocated. If it allocates the
-+ * character index array, it will fill it it.
- *
-- * This method supports right to left text with the ability to
-- * store the glyphs in reverse order, and by supporting character
-- * mirroring, which will replace a character which has a left and
-- * right form, such as parens, with the opposite form before
-- * mapping it to a glyph index.
-+ * This method supports right to left
-+ * text with the ability to store the glyphs in reverse order, and by supporting
-+ * character mirroring, which will replace a character which has a left and right
-+ * form, such as parens, with the opposite form before mapping it to a glyph index.
- *
- * Input parameters:
- * @param chars - the input character context
- * @param offset - the offset of the first character to be mapped
- * @param count - the number of characters to be mapped
-- * @param reverse - if <code>TRUE</code>, the output will be in
-- * reverse order
-+ * @param reverse - if <code>TRUE</code>, the output will be in reverse order
- * @param mirror - if <code>TRUE</code>, do character mirroring
-- * @param glyphStorage - the object which holds the per-glyph
-- * storage. The glyph and char indices arrays will be
-- * filled in.
-+ * @param glyphStorage - the object which holds the per-glyph storage. The glyph and char
-+ * indices arrays will be filled in.
- * @param success - set to an error code if the operation fails
- *
- * @see LEFontInstance
- *
- * @internal
- */
-- virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_bool reverse, le_bool mirror,
-- LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+ virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool mirror, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
- /**
-- * This is a convenience method that forces the advance width of
-- * mark glyphs to be zero, which is required for proper selection
-- * and highlighting.
-+ * This is a convenience method that forces the advance width of mark
-+ * glyphs to be zero, which is required for proper selection and highlighting.
- *
-- * @param glyphStorage - the object containing the per-glyph
-- * storage. The positions array will be modified.
-+ * @param glyphStorage - the object containing the per-glyph storage. The positions array will be modified.
- * @param markFilter - used to identify mark glyphs
-- * @param success - output parameter set to an error code if the
-- * operation fails
-+ * @param success - output parameter set to an error code if the operation fails
- *
- * @see LEGlyphFilter
- *
- * @internal
- */
-- static void adjustMarkGlyphs(LEGlyphStorage &glyphStorage,
-- LEGlyphFilter *markFilter, LEErrorCode &success);
-+ static void adjustMarkGlyphs(LEGlyphStorage &glyphStorage, LEGlyphFilter *markFilter, LEErrorCode &success);
-
-
- /**
-- * This is a convenience method that forces the advance width of
-- * mark glyphs to be zero, which is required for proper selection
-- * and highlighting. This method uses the input characters to
-- * identify marks. This is required in cases where the font does
-- * not contain enough information to identify them based on the
-- * glyph IDs.
-+ * This is a convenience method that forces the advance width of mark
-+ * glyphs to be zero, which is required for proper selection and highlighting.
-+ * This method uses the input characters to identify marks. This is required in
-+ * cases where the font does not contain enough information to identify them based
-+ * on the glyph IDs.
- *
- * @param chars - the array of input characters
- * @param charCount - the number of input characers
-- * @param glyphStorage - the object containing the per-glyph
-- * storage. The positions array will be modified.
-- * @param reverse - <code>TRUE</code> if the glyph array has been
-- * reordered
-+ * @param glyphStorage - the object containing the per-glyph storage. The positions array will be modified.
-+ * @param reverse - <code>TRUE</code> if the glyph array has been reordered
- * @param markFilter - used to identify mark glyphs
-- * @param success - output parameter set to an error code if the
-- * operation fails
-+ * @param success - output parameter set to an error code if the operation fails
- *
- * @see LEGlyphFilter
- *
- * @internal
- */
-- static void adjustMarkGlyphs(const LEUnicode chars[],
-- le_int32 charCount, le_bool reverse,
-- LEGlyphStorage &glyphStorage, LEGlyphFilter *markFilter,
-- LEErrorCode &success);
-+ static void adjustMarkGlyphs(const LEUnicode chars[], le_int32 charCount, le_bool reverse, LEGlyphStorage &glyphStorage, LEGlyphFilter *markFilter, LEErrorCode &success);
-+
-
- public:
- /**
- * The destructor. It will free any storage allocated for the
- * glyph, character index and position arrays by calling the reset
-- * method. It is declared virtual so that it will be invoked by
-- * the subclass destructors.
-+ * method. It is declared virtual so that it will be invoked by the
-+ * subclass destructors.
- *
- * @stable ICU 2.8
- */
- virtual ~LayoutEngine();
-
- /**
-- * This method will invoke the layout steps in their correct order
-- * by calling the 32 bit versions of the computeGlyphs and
-- * positionGlyphs methods.(It doesn't * call the
-- * adjustGlyphPositions method because that doesn't apply for
-- * default * processing.) It will compute the glyph, character
-- * index and position arrays.
-+ * This method will invoke the layout steps in their correct order by calling
-+ * the computeGlyphs, positionGlyphs and adjustGlyphPosition methods.. It will
-+ * compute the glyph, character index and position arrays.
- *
- * @param chars - the input character context
- * @param offset - the offset of the first character to process
- * @param count - the number of characters to process
- * @param max - the number of characters in the input context
-- * @param rightToLeft - true if the characers are in a right to
-- * left directional run
-+ * @param rightToLeft - TRUE if the characers are in a right to left directional run
- * @param x - the initial X position
- * @param y - the initial Y position
-- * @param success - output parameter set to an error code if the
-- * operation fails
-+ * @param success - output parameter set to an error code if the operation fails
-+ *
- * @return the number of glyphs in the glyph array
- *
-- * Note: the glyph, character index and position array can be
-- * accessed using the getter method below.
-+ * Note; the glyph, character index and position array can be accessed
-+ * using the getter method below.
-+ *
-+ * @stable ICU 2.8
- */
-- le_int32 layoutChars(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_int32 max, le_bool rightToLeft, float x,
-- float y, LEErrorCode &success);
-+ virtual le_int32 layoutChars(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, float x, float y, LEErrorCode &success);
-
- /**
-- * This method returns the number of glyphs in the glyph
-- * array. Note that the number of glyphs will be greater than or
-- * equal to the number of characters used to create the
-- * LayoutEngine.
-+ * This method returns the number of glyphs in the glyph array. Note
-+ * that the number of glyphs will be greater than or equal to the number
-+ * of characters used to create the LayoutEngine.
- *
- * @return the number of glyphs in the glyph array
- *
-@@ -412,9 +371,9 @@
- le_int32 getGlyphCount() const;
-
- /**
-- * This method copies the glyph array into a caller supplied
-- * array. The caller must ensure that the array is large enough
-- * to hold all the glyphs.
-+ * This method copies the glyph array into a caller supplied array.
-+ * The caller must ensure that the array is large enough to hold all
-+ * the glyphs.
- *
- * @param glyphs - the destiniation glyph array
- * @param success - set to an error code if the operation fails
-@@ -424,10 +383,10 @@
- void getGlyphs(LEGlyphID glyphs[], LEErrorCode &success) const;
-
- /**
-- * This method copies the glyph array into a caller supplied
-- * array, ORing in extra bits. (This functionality is needed by
-- * the JDK, which uses 32 bits pre glyph idex, with the high 16
-- * bits encoding the composite font slot number)
-+ * This method copies the glyph array into a caller supplied array,
-+ * ORing in extra bits. (This functionality is needed by the JDK,
-+ * which uses 32 bits pre glyph idex, with the high 16 bits encoding
-+ * the composite font slot number)
- *
- * @param glyphs - the destination (32 bit) glyph array
- * @param extraBits - this value will be ORed with each glyph index
-@@ -435,13 +394,12 @@
- *
- * @stable ICU 2.8
- */
-- virtual void getGlyphs(le_uint32 glyphs[], le_uint32 extraBits,
-- LEErrorCode &success) const;
-+ virtual void getGlyphs(le_uint32 glyphs[], le_uint32 extraBits, LEErrorCode &success) const;
-
- /**
-- * This method copies the character index array into a caller
-- * supplied array. The caller must ensure that the array is large
-- * enough to hold a character index for each glyph.
-+ * This method copies the character index array into a caller supplied array.
-+ * The caller must ensure that the array is large enough to hold a
-+ * character index for each glyph.
- *
- * @param charIndices - the destiniation character index array
- * @param success - set to an error code if the operation fails
-@@ -451,9 +409,9 @@
- void getCharIndices(le_int32 charIndices[], LEErrorCode &success) const;
-
- /**
-- * This method copies the character index array into a caller
-- * supplied array. The caller must ensure that the array is large
-- * enough to hold a character index for each glyph.
-+ * This method copies the character index array into a caller supplied array.
-+ * The caller must ensure that the array is large enough to hold a
-+ * character index for each glyph.
- *
- * @param charIndices - the destiniation character index array
- * @param indexBase - an offset which will be added to each index
-@@ -461,14 +419,13 @@
- *
- * @stable ICU 2.8
- */
-- void getCharIndices(le_int32 charIndices[], le_int32 indexBase,
-- LEErrorCode &success) const;
-+ void getCharIndices(le_int32 charIndices[], le_int32 indexBase, LEErrorCode &success) const;
-
- /**
-- * This method copies the position array into a caller supplied
-- * array. The caller must ensure that the array is large enough
-- * to hold an X and Y position for each glyph, plus an extra X and
-- * Y for the advance of the last glyph.
-+ * This method copies the position array into a caller supplied array.
-+ * The caller must ensure that the array is large enough to hold an
-+ * X and Y position for each glyph, plus an extra X and Y for the
-+ * advance of the last glyph.
- *
- * @param positions - the destiniation position array
- * @param success - set to an error code if the operation fails
-@@ -491,8 +448,7 @@
- *
- * @stable ICU 2.8
- */
-- void getGlyphPosition(le_int32 glyphIndex, float &x, float &y,
-- LEErrorCode &success) const;
-+ void getGlyphPosition(le_int32 glyphIndex, float &x, float &y, LEErrorCode &success) const;
-
- /**
- * This method frees the glyph, character index and position arrays
-@@ -511,8 +467,7 @@
- * @param fontInstance - the font of the text
- * @param scriptCode - the script of the text
- * @param languageCode - the language of the text
-- * @param success - output parameter set to an error code if the
-- * operation fails
-+ * @param success - output parameter set to an error code if the operation fails
- *
- * @return a LayoutEngine which can layout text in the given font.
- *
-@@ -520,17 +475,30 @@
- *
- * @stable ICU 2.8
- */
-- static LayoutEngine *layoutEngineFactory(const LEFontInstance *fontInstance,
-- le_int32 scriptCode, le_int32 languageCode, LEErrorCode &success);
-+ static LayoutEngine *layoutEngineFactory(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, LEErrorCode &success);
-
- /**
- * Override of existing call that provides flags to control typography.
- * @draft ICU 3.4
- */
-- static LayoutEngine *layoutEngineFactory(
-- const LEFontInstance *fontInstance,
-- le_int32 scriptCode, le_int32 languageCode,
-- le_int32 typo_flags, LEErrorCode &success);
-+ static LayoutEngine *layoutEngineFactory(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typo_flags, LEErrorCode &success);
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ virtual UClassID getDynamicClassID() const;
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for this class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ static UClassID getStaticClassID();
-+
- };
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/LayoutTables.h b/src/share/native/sun/font/layout/LayoutTables.h
---- jdk/src/share/native/sun/font/layout/LayoutTables.h
-+++ jdk/src/share/native/sun/font/layout/LayoutTables.h
-@@ -32,11 +32,20 @@
- #ifndef __LAYOUTTABLES_H
- #define __LAYOUTTABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
-
-+U_NAMESPACE_BEGIN
-+
- #define ANY_NUMBER 1
-
- typedef le_int16 ByteOffset;
- typedef le_int16 WordOffset;
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/LigatureSubstProc.cpp b/src/share/native/sun/font/layout/LigatureSubstProc.cpp
---- jdk/src/share/native/sun/font/layout/LigatureSubstProc.cpp
-+++ jdk/src/share/native/sun/font/layout/LigatureSubstProc.cpp
-@@ -39,10 +39,14 @@
- #include "LEGlyphStorage.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- #define ExtendedComplement(m) ((le_int32) (~((le_uint32) (m))))
- #define SignBit(m) ((ExtendedComplement(m) >> 1) & (le_int32)(m))
- #define SignExtend(v,m) (((v) & SignBit(m))? ((v) | ExtendedComplement(m)): (v))
-
-+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LigatureSubstitutionProcessor)
-+
- LigatureSubstitutionProcessor::LigatureSubstitutionProcessor(const MorphSubtableHeader *morphSubtableHeader)
- : StateTableProcessor(morphSubtableHeader)
- {
-@@ -63,8 +67,7 @@
- m = -1;
- }
-
--ByteOffset LigatureSubstitutionProcessor::processStateEntry(LEGlyphStorage &glyphStorage,
-- le_int32 &currGlyph, EntryTableIndex index)
-+ByteOffset LigatureSubstitutionProcessor::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index)
- {
- const LigatureSubstitutionStateEntry *entry = &entryTable[index];
- ByteOffset newState = SWAPW(entry->newStateOffset);
-@@ -162,3 +165,5 @@
- void LigatureSubstitutionProcessor::endStateTable()
- {
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/LigatureSubstProc.h b/src/share/native/sun/font/layout/LigatureSubstProc.h
---- jdk/src/share/native/sun/font/layout/LigatureSubstProc.h
-+++ jdk/src/share/native/sun/font/layout/LigatureSubstProc.h
-@@ -32,12 +32,19 @@
- #ifndef __LIGATURESUBSTITUTIONPROCESSOR_H
- #define __LIGATURESUBSTITUTIONPROCESSOR_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "MorphTables.h"
- #include "SubtableProcessor.h"
- #include "StateTableProcessor.h"
- #include "LigatureSubstitution.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEGlyphStorage;
-
- #define nComponents 16
-@@ -54,6 +61,20 @@
- LigatureSubstitutionProcessor(const MorphSubtableHeader *morphSubtableHeader);
- virtual ~LigatureSubstitutionProcessor();
-
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ virtual UClassID getDynamicClassID() const;
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for this class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ static UClassID getStaticClassID();
-+
- private:
- LigatureSubstitutionProcessor();
-
-@@ -68,6 +89,8 @@
- le_int16 m;
-
- const LigatureSubstitutionHeader *ligatureSubstitutionHeader;
-+
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp b/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp
---- jdk/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp
-+++ jdk/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp
-@@ -25,6 +25,7 @@
-
- /*
- *
-+ *
- * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved
- *
- */
-@@ -37,6 +38,8 @@
- #include "GlyphIterator.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- le_uint32 LigatureSubstitutionSubtable::process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter) const
- {
- LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-@@ -92,3 +95,5 @@
-
- return 0;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/LigatureSubstSubtables.h b/src/share/native/sun/font/layout/LigatureSubstSubtables.h
---- jdk/src/share/native/sun/font/layout/LigatureSubstSubtables.h
-+++ jdk/src/share/native/sun/font/layout/LigatureSubstSubtables.h
-@@ -32,12 +32,19 @@
- #ifndef __LIGATURESUBSTITUTIONSUBTABLES_H
- #define __LIGATURESUBSTITUTIONSUBTABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LEGlyphFilter.h"
- #include "OpenTypeTables.h"
- #include "GlyphSubstitutionTables.h"
- #include "GlyphIterator.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct LigatureSetTable
- {
- le_uint16 ligatureCount;
-@@ -59,4 +66,5 @@
- le_uint32 process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter = NULL) const;
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/LigatureSubstitution.h b/src/share/native/sun/font/layout/LigatureSubstitution.h
---- jdk/src/share/native/sun/font/layout/LigatureSubstitution.h
-+++ jdk/src/share/native/sun/font/layout/LigatureSubstitution.h
-@@ -32,12 +32,19 @@
- #ifndef __LIGATURESUBSTITUTION_H
- #define __LIGATURESUBSTITUTION_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LayoutTables.h"
- #include "StateTables.h"
- #include "MorphTables.h"
- #include "MorphStateTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct LigatureSubstitutionHeader : MorphStateTableHeader
- {
- ByteOffset ligatureActionTableOffset;
-@@ -65,4 +72,5 @@
- lafComponentOffsetMask = 0x3FFFFFFF
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/LookupProcessor.cpp b/src/share/native/sun/font/layout/LookupProcessor.cpp
---- jdk/src/share/native/sun/font/layout/LookupProcessor.cpp
-+++ jdk/src/share/native/sun/font/layout/LookupProcessor.cpp
-@@ -42,6 +42,8 @@
- #include "LEGlyphStorage.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- le_uint32 LookupProcessor::applyLookupTable(const LookupTable *lookupTable, GlyphIterator *glyphIterator,
- const LEFontInstance *fontInstance) const
- {
-@@ -65,10 +67,9 @@
- return 1;
- }
-
--le_int32 LookupProcessor::process(LEGlyphStorage &glyphStorage,
-- GlyphPositionAdjustments *glyphPositionAdjustments,
-- le_bool rightToLeft, const GlyphDefinitionTableHeader *glyphDefinitionTableHeader,
-- const LEFontInstance *fontInstance) const
-+le_int32 LookupProcessor::process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments,
-+ le_bool rightToLeft, const GlyphDefinitionTableHeader *glyphDefinitionTableHeader,
-+ const LEFontInstance *fontInstance) const
- {
- le_int32 glyphCount = glyphStorage.getGlyphCount();
-
-@@ -140,8 +141,7 @@
-
- LookupProcessor::LookupProcessor(const char *baseAddress,
- Offset scriptListOffset, Offset featureListOffset, Offset lookupListOffset,
-- LETag scriptTag, LETag languageTag, const FeatureMap *featureMap,
-- le_int32 featureMapCount, le_bool orderFeatures)
-+ LETag scriptTag, LETag languageTag, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool orderFeatures)
- : lookupListTable(NULL), featureListTable(NULL), lookupSelectArray(NULL), lookupSelectCount(0),
- lookupOrderArray(NULL), lookupOrderCount(0)
- {
-@@ -309,3 +309,5 @@
- LE_DELETE_ARRAY(lookupOrderArray);
- LE_DELETE_ARRAY(lookupSelectArray);
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/LookupProcessor.h b/src/share/native/sun/font/layout/LookupProcessor.h
---- jdk/src/share/native/sun/font/layout/LookupProcessor.h
-+++ jdk/src/share/native/sun/font/layout/LookupProcessor.h
-@@ -25,6 +25,7 @@
-
- /*
- *
-+ *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-@@ -32,9 +33,18 @@
- #ifndef __LOOKUPPROCESSOR_H
- #define __LOOKUPPROCESSOR_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LEFontInstance.h"
- #include "OpenTypeTables.h"
-+//#include "Lookups.h"
-+//#include "Features.h"
-+
-+U_NAMESPACE_BEGIN
-
- class LEFontInstance;
- class LEGlyphStorage;
-@@ -46,13 +56,10 @@
- struct LookupSubtable;
- struct LookupTable;
-
--class LookupProcessor
--{
-+class LookupProcessor : public UMemory {
- public:
-- le_int32 process(LEGlyphStorage &glyphStorage,
-- GlyphPositionAdjustments *glyphPositionAdjustments,
-- le_bool rightToLeft, const GlyphDefinitionTableHeader *glyphDefinitionTableHeader,
-- const LEFontInstance *fontInstance) const;
-+ le_int32 process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments,
-+ le_bool rightToLeft, const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, const LEFontInstance *fontInstance) const;
-
- le_uint32 applyLookupTable(const LookupTable *lookupTable, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
-
-@@ -64,19 +71,18 @@
- virtual ~LookupProcessor();
-
- protected:
-- LookupProcessor(const char *baseAddress,
-+ LookupProcessor(const char *baseAddress,
- Offset scriptListOffset, Offset featureListOffset, Offset lookupListOffset,
-- LETag scriptTag, LETag languageTag, const FeatureMap *featureMap,
-- le_int32 featureMapCount, le_bool orderFeatures);
-+ LETag scriptTag, LETag languageTag, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool orderFeatures);
-
-- LookupProcessor();
-+ LookupProcessor();
-
- le_int32 selectLookups(const FeatureTable *featureTable, FeatureMask featureMask, le_int32 order);
-
- const LookupListTable *lookupListTable;
- const FeatureListTable *featureListTable;
-
-- FeatureMask *lookupSelectArray;
-+ FeatureMask *lookupSelectArray;
- le_uint32 lookupSelectCount;
-
- le_uint16 *lookupOrderArray;
-@@ -88,4 +94,5 @@
- LookupProcessor &operator=(const LookupProcessor &other); // forbid copying of this class
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/LookupTables.cpp b/src/share/native/sun/font/layout/LookupTables.cpp
---- jdk/src/share/native/sun/font/layout/LookupTables.cpp
-+++ jdk/src/share/native/sun/font/layout/LookupTables.cpp
-@@ -34,6 +34,8 @@
- #include "LookupTables.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- /*
- These are the rolled-up versions of the uniform binary search.
- Someday, if we need more performance, we can un-roll them.
-@@ -104,3 +106,5 @@
-
- return NULL;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/LookupTables.h b/src/share/native/sun/font/layout/LookupTables.h
---- jdk/src/share/native/sun/font/layout/LookupTables.h
-+++ jdk/src/share/native/sun/font/layout/LookupTables.h
-@@ -32,9 +32,16 @@
- #ifndef __LOOKUPTABLES_H
- #define __LOOKUPTABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LayoutTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- enum LookupTableFormat
- {
- ltfSimpleArray = 0,
-@@ -104,4 +111,5 @@
- LookupValue valueArray[ANY_NUMBER];
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/Lookups.cpp b/src/share/native/sun/font/layout/Lookups.cpp
---- jdk/src/share/native/sun/font/layout/Lookups.cpp
-+++ jdk/src/share/native/sun/font/layout/Lookups.cpp
-@@ -35,6 +35,8 @@
- #include "CoverageTables.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- const LookupTable *LookupListTable::getLookupTable(le_uint16 lookupTableIndex) const
- {
- if (lookupTableIndex >= SWAPW(lookupCount)) {
-@@ -63,3 +65,5 @@
-
- return coverageTable->getGlyphCoverage(glyphID);
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/Lookups.h b/src/share/native/sun/font/layout/Lookups.h
---- jdk/src/share/native/sun/font/layout/Lookups.h
-+++ jdk/src/share/native/sun/font/layout/Lookups.h
-@@ -32,9 +32,16 @@
- #ifndef __LOOKUPS_H
- #define __LOOKUPS_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "OpenTypeTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- enum LookupFlags
- {
- lfBaselineIsLogicalEnd = 0x0001, // The MS spec. calls this flag "RightToLeft" but this name is more accurate
-@@ -79,6 +86,5 @@
- return getGlyphCoverage(coverageTableOffset, glyphID);
- }
-
--
--
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/MPreFixups.cpp b/src/share/native/sun/font/layout/MPreFixups.cpp
---- jdk/src/share/native/sun/font/layout/MPreFixups.cpp
-+++ jdk/src/share/native/sun/font/layout/MPreFixups.cpp
-@@ -33,6 +33,8 @@
- #include "LEGlyphStorage.h"
- #include "MPreFixups.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct FixupData
- {
- le_int32 fBaseIndex;
-@@ -92,7 +94,7 @@
-
- for (i = 0; i < mpreCount; i += 1) {
- mpreSave[i] = glyphStorage[mpreIndex + i];
-- indexSave[i] = glyphStorage.getCharIndex(mpreIndex + i, success);
-+ indexSave[i] = glyphStorage.getCharIndex(mpreIndex + i, success); //charIndices[mpreIndex + i];
- }
-
- for (i = 0; i < moveCount; i += 1) {
-@@ -112,3 +114,5 @@
- LE_DELETE_ARRAY(mpreSave);
- }
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/MPreFixups.h b/src/share/native/sun/font/layout/MPreFixups.h
---- jdk/src/share/native/sun/font/layout/MPreFixups.h
-+++ jdk/src/share/native/sun/font/layout/MPreFixups.h
-@@ -32,14 +32,22 @@
- #ifndef __MPREFIXUPS_H
- #define __MPREFIXUPS_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEGlyphStorage;
-
- // Might want to make this a private member...
- struct FixupData;
-
--class MPreFixups {
-+class MPreFixups : public UMemory
-+{
- public:
- MPreFixups(le_int32 charCount);
- ~MPreFixups();
-@@ -53,4 +61,7 @@
- le_int32 fFixupCount;
- };
-
-+U_NAMESPACE_END
- #endif
-+
-+
-diff --git a/src/share/native/sun/font/layout/MarkArrays.cpp b/src/share/native/sun/font/layout/MarkArrays.cpp
---- jdk/src/share/native/sun/font/layout/MarkArrays.cpp
-+++ jdk/src/share/native/sun/font/layout/MarkArrays.cpp
-@@ -36,6 +36,8 @@
- #include "MarkArrays.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- le_int32 MarkArray::getMarkClass(LEGlyphID glyphID, le_int32 coverageIndex, const LEFontInstance *fontInstance,
- LEPoint &anchor) const
- {
-@@ -58,3 +60,5 @@
-
- return markClass;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/MarkArrays.h b/src/share/native/sun/font/layout/MarkArrays.h
---- jdk/src/share/native/sun/font/layout/MarkArrays.h
-+++ jdk/src/share/native/sun/font/layout/MarkArrays.h
-@@ -32,10 +32,17 @@
- #ifndef __MARKARRAYS_H
- #define __MARKARRAYS_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LEFontInstance.h"
- #include "OpenTypeTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct MarkRecord
- {
- le_uint16 markClass;
-@@ -51,4 +58,7 @@
- LEPoint &anchor) const;
- };
-
-+U_NAMESPACE_END
- #endif
-+
-+
-diff --git a/src/share/native/sun/font/layout/MarkToBasePosnSubtables.cpp b/src/share/native/sun/font/layout/MarkToBasePosnSubtables.cpp
---- jdk/src/share/native/sun/font/layout/MarkToBasePosnSubtables.cpp
-+++ jdk/src/share/native/sun/font/layout/MarkToBasePosnSubtables.cpp
-@@ -40,6 +40,8 @@
- #include "GlyphIterator.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- LEGlyphID MarkToBasePositioningSubtable::findBaseGlyph(GlyphIterator *glyphIterator) const
- {
- if (glyphIterator->prev()) {
-@@ -106,7 +108,6 @@
- glyphIterator->setCurrGlyphBaseOffset(baseIterator.getCurrStreamPosition());
-
- if (glyphIterator->isRightToLeft()) {
-- // dlf flip advance to local coordinate system
- glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX, anchorDiffY, -markAdvance.fX, -markAdvance.fY);
- } else {
- LEPoint baseAdvance;
-@@ -114,9 +115,10 @@
- fontInstance->getGlyphAdvance(baseGlyph, pixels);
- fontInstance->pixelsToUnits(pixels, baseAdvance);
-
-- // flip advances to local coordinate system
- glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX - baseAdvance.fX, anchorDiffY - baseAdvance.fY, -markAdvance.fX, -markAdvance.fY);
- }
-
- return 1;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/MarkToBasePosnSubtables.h b/src/share/native/sun/font/layout/MarkToBasePosnSubtables.h
---- jdk/src/share/native/sun/font/layout/MarkToBasePosnSubtables.h
-+++ jdk/src/share/native/sun/font/layout/MarkToBasePosnSubtables.h
-@@ -32,6 +32,11 @@
- #ifndef __MARKTOBASEPOSITIONINGSUBTABLES_H
- #define __MARKTOBASEPOSITIONINGSUBTABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LEFontInstance.h"
- #include "OpenTypeTables.h"
-@@ -39,6 +44,8 @@
- #include "AttachmentPosnSubtables.h"
- #include "GlyphIterator.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct MarkToBasePositioningSubtable : AttachmentPositioningSubtable
- {
- le_int32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
-@@ -56,4 +63,6 @@
- BaseRecord baseRecordArray[ANY_NUMBER];
- };
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/MarkToLigaturePosnSubtables.cpp b/src/share/native/sun/font/layout/MarkToLigaturePosnSubtables.cpp
---- jdk/src/share/native/sun/font/layout/MarkToLigaturePosnSubtables.cpp
-+++ jdk/src/share/native/sun/font/layout/MarkToLigaturePosnSubtables.cpp
-@@ -39,6 +39,8 @@
- #include "GlyphIterator.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- LEGlyphID MarkToLigaturePositioningSubtable::findLigatureGlyph(GlyphIterator *glyphIterator) const
- {
- if (glyphIterator->prev()) {
-@@ -117,9 +119,10 @@
- fontInstance->getGlyphAdvance(ligatureGlyph, pixels);
- fontInstance->pixelsToUnits(pixels, ligatureAdvance);
-
-- glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX - ligatureAdvance.fX,
-- anchorDiffY - ligatureAdvance.fY, -markAdvance.fX, -markAdvance.fY);
-+ glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX - ligatureAdvance.fX, anchorDiffY - ligatureAdvance.fY, -markAdvance.fX, -markAdvance.fY);
- }
-
- return 1;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/MarkToLigaturePosnSubtables.h b/src/share/native/sun/font/layout/MarkToLigaturePosnSubtables.h
---- jdk/src/share/native/sun/font/layout/MarkToLigaturePosnSubtables.h
-+++ jdk/src/share/native/sun/font/layout/MarkToLigaturePosnSubtables.h
-@@ -32,6 +32,11 @@
- #ifndef __MARKTOLIGATUREPOSITIONINGSUBTABLES_H
- #define __MARKTOLIGATUREPOSITIONINGSUBTABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LEFontInstance.h"
- #include "OpenTypeTables.h"
-@@ -39,6 +44,8 @@
- #include "AttachmentPosnSubtables.h"
- #include "GlyphIterator.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct MarkToLigaturePositioningSubtable : AttachmentPositioningSubtable
- {
- le_int32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
-@@ -62,4 +69,6 @@
- Offset ligatureAttachTableOffsetArray[ANY_NUMBER];
- };
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/MarkToMarkPosnSubtables.cpp b/src/share/native/sun/font/layout/MarkToMarkPosnSubtables.cpp
---- jdk/src/share/native/sun/font/layout/MarkToMarkPosnSubtables.cpp
-+++ jdk/src/share/native/sun/font/layout/MarkToMarkPosnSubtables.cpp
-@@ -40,6 +40,8 @@
- #include "GlyphIterator.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- LEGlyphID MarkToMarkPositioningSubtable::findMark2Glyph(GlyphIterator *glyphIterator) const
- {
- if (glyphIterator->findMark2Glyph()) {
-@@ -88,7 +90,7 @@
- const AnchorTable *anchorTable = (const AnchorTable *) ((char *) mark2Array + anchorTableOffset);
- LEPoint mark2Anchor, markAdvance, pixels;
-
-- if (anchorTableOffset == 0) { // jb4729
-+ if (anchorTableOffset == 0) {
- // this seems to mean that the marks don't attach...
- return 0;
- }
-@@ -111,9 +113,10 @@
- fontInstance->getGlyphAdvance(mark2Glyph, pixels);
- fontInstance->pixelsToUnits(pixels, mark2Advance);
-
-- glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX - mark2Advance.fX,
-- anchorDiffY - mark2Advance.fY, -markAdvance.fX, -markAdvance.fY);
-+ glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX - mark2Advance.fX, anchorDiffY - mark2Advance.fY, -markAdvance.fX, -markAdvance.fY);
- }
-
- return 1;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/MarkToMarkPosnSubtables.h b/src/share/native/sun/font/layout/MarkToMarkPosnSubtables.h
---- jdk/src/share/native/sun/font/layout/MarkToMarkPosnSubtables.h
-+++ jdk/src/share/native/sun/font/layout/MarkToMarkPosnSubtables.h
-@@ -32,6 +32,11 @@
- #ifndef __MARKTOMARKPOSITIONINGSUBTABLES_H
- #define __MARKTOMARKPOSITIONINGSUBTABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LEFontInstance.h"
- #include "OpenTypeTables.h"
-@@ -39,6 +44,8 @@
- #include "AttachmentPosnSubtables.h"
- #include "GlyphIterator.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct MarkToMarkPositioningSubtable : AttachmentPositioningSubtable
- {
- le_int32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
-@@ -56,4 +63,6 @@
- Mark2Record mark2RecordArray[ANY_NUMBER];
- };
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/MirroredCharData.cpp b/src/share/native/sun/font/layout/MirroredCharData.cpp
---- jdk/src/share/native/sun/font/layout/MirroredCharData.cpp
-+++ jdk/src/share/native/sun/font/layout/MirroredCharData.cpp
-@@ -36,6 +36,8 @@
- #include "LETypes.h"
- #include "DefaultCharMapper.h"
-
-+U_NAMESPACE_BEGIN
-+
- const LEUnicode32 DefaultCharMapper::mirroredChars[] = {
- 0x0028, 0x0029, 0x003C, 0x003E, 0x005B, 0x005D, 0x007B, 0x007D,
- 0x00AB, 0x00BB, 0x2039, 0x203A, 0x2045, 0x2046, 0x207D, 0x207E,
-@@ -127,3 +129,5 @@
- };
-
- const le_int32 DefaultCharMapper::mirroredCharsCount = 332;
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/MorphStateTables.h b/src/share/native/sun/font/layout/MorphStateTables.h
---- jdk/src/share/native/sun/font/layout/MorphStateTables.h
-+++ jdk/src/share/native/sun/font/layout/MorphStateTables.h
-@@ -32,14 +32,22 @@
- #ifndef __MORPHSTATETABLES_H
- #define __MORPHSTATETABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LayoutTables.h"
- #include "MorphTables.h"
- #include "StateTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct MorphStateTableHeader : MorphSubtableHeader
- {
- StateTableHeader stHeader;
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/MorphTables.cpp b/src/share/native/sun/font/layout/MorphTables.cpp
---- jdk/src/share/native/sun/font/layout/MorphTables.cpp
-+++ jdk/src/share/native/sun/font/layout/MorphTables.cpp
-@@ -42,6 +42,8 @@
- #include "LEGlyphStorage.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- void MorphTableHeader::process(LEGlyphStorage &glyphStorage) const
- {
- const ChainHeader *chainHeader = chains;
-@@ -114,3 +116,5 @@
- delete processor;
- }
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/MorphTables.h b/src/share/native/sun/font/layout/MorphTables.h
---- jdk/src/share/native/sun/font/layout/MorphTables.h
-+++ jdk/src/share/native/sun/font/layout/MorphTables.h
-@@ -32,9 +32,16 @@
- #ifndef __MORPHTABLES_H
- #define __MORPHTABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LayoutTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEGlyphStorage;
-
- typedef le_uint32 FeatureFlags;
-@@ -98,4 +105,6 @@
- void process(LEGlyphStorage &glyphStorage) const;
- };
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/MultipleSubstSubtables.cpp b/src/share/native/sun/font/layout/MultipleSubstSubtables.cpp
---- jdk/src/share/native/sun/font/layout/MultipleSubstSubtables.cpp
-+++ jdk/src/share/native/sun/font/layout/MultipleSubstSubtables.cpp
-@@ -37,6 +37,8 @@
- #include "GlyphIterator.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- le_uint32 MultipleSubstitutionSubtable::process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter) const
- {
- LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-@@ -106,3 +108,5 @@
-
- return 0;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/MultipleSubstSubtables.h b/src/share/native/sun/font/layout/MultipleSubstSubtables.h
---- jdk/src/share/native/sun/font/layout/MultipleSubstSubtables.h
-+++ jdk/src/share/native/sun/font/layout/MultipleSubstSubtables.h
-@@ -32,12 +32,19 @@
- #ifndef __MULTIPLESUBSTITUTIONSUBTABLES_H
- #define __MULTIPLESUBSTITUTIONSUBTABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LEGlyphFilter.h"
- #include "OpenTypeTables.h"
- #include "GlyphSubstitutionTables.h"
- #include "GlyphIterator.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct SequenceTable
- {
- le_uint16 glyphCount;
-@@ -52,4 +59,5 @@
- le_uint32 process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter = NULL) const;
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/NonContextualGlyphSubst.h b/src/share/native/sun/font/layout/NonContextualGlyphSubst.h
---- jdk/src/share/native/sun/font/layout/NonContextualGlyphSubst.h
-+++ jdk/src/share/native/sun/font/layout/NonContextualGlyphSubst.h
-@@ -25,6 +25,7 @@
-
- /*
- *
-+ *
- * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved
- *
- */
-@@ -32,14 +33,23 @@
- #ifndef __NONCONTEXTUALGLYPHSUBSTITUTION_H
- #define __NONCONTEXTUALGLYPHSUBSTITUTION_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LayoutTables.h"
- #include "LookupTables.h"
- #include "MorphTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct NonContextualGlyphSubstitutionHeader : MorphSubtableHeader
- {
- LookupTable table;
- };
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/NonContextualGlyphSubstProc.cpp b/src/share/native/sun/font/layout/NonContextualGlyphSubstProc.cpp
---- jdk/src/share/native/sun/font/layout/NonContextualGlyphSubstProc.cpp
-+++ jdk/src/share/native/sun/font/layout/NonContextualGlyphSubstProc.cpp
-@@ -41,6 +41,8 @@
- #include "TrimmedArrayProcessor.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- NonContextualGlyphSubstitutionProcessor::NonContextualGlyphSubstitutionProcessor()
- {
- }
-@@ -79,3 +81,5 @@
- return NULL;
- }
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/NonContextualGlyphSubstProc.h b/src/share/native/sun/font/layout/NonContextualGlyphSubstProc.h
---- jdk/src/share/native/sun/font/layout/NonContextualGlyphSubstProc.h
-+++ jdk/src/share/native/sun/font/layout/NonContextualGlyphSubstProc.h
-@@ -32,11 +32,18 @@
- #ifndef __NONCONTEXTUALGLYPHSUBSTITUTIONPROCESSOR_H
- #define __NONCONTEXTUALGLYPHSUBSTITUTIONPROCESSOR_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "MorphTables.h"
- #include "SubtableProcessor.h"
- #include "NonContextualGlyphSubst.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEGlyphStorage;
-
- class NonContextualGlyphSubstitutionProcessor : public SubtableProcessor
-@@ -57,4 +64,5 @@
- NonContextualGlyphSubstitutionProcessor &operator=(const NonContextualGlyphSubstitutionProcessor &other); // forbid copying of this class
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/OpenTypeLayoutEngine.cpp b/src/share/native/sun/font/layout/OpenTypeLayoutEngine.cpp
---- jdk/src/share/native/sun/font/layout/OpenTypeLayoutEngine.cpp
-+++ jdk/src/share/native/sun/font/layout/OpenTypeLayoutEngine.cpp
-@@ -47,6 +47,10 @@
-
- #include "GDEFMarkFilter.h"
-
-+U_NAMESPACE_BEGIN
-+
-+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(OpenTypeLayoutEngine)
-+
- #define ccmpFeatureTag LE_CCMP_FEATURE_TAG
- #define ligaFeatureTag LE_LIGA_FEATURE_TAG
- #define cligFeatureTag LE_CLIG_FEATURE_TAG
-@@ -78,7 +82,7 @@
- {ccmpFeatureTag, ccmpFeatureMask},
- {ligaFeatureTag, ligaFeatureMask},
- {cligFeatureTag, cligFeatureMask},
-- {kernFeatureTag, kernFeatureMask},
-+ {kernFeatureTag, kernFeatureMask},
- {paltFeatureTag, paltFeatureMask},
- {markFeatureTag, markFeatureMask},
- {mkmkFeatureTag, mkmkFeatureMask}
-@@ -86,19 +90,15 @@
-
- static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap);
-
--OpenTypeLayoutEngine::OpenTypeLayoutEngine(const LEFontInstance *fontInstance,
-- le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags,
-- const GlyphSubstitutionTableHeader *gsubTable)
-- : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags),
-- fFeatureMask(minimalFeatures), fFeatureMap(featureMap),
-- fFeatureMapCount(featureMapCount), fFeatureOrder(FALSE),
-- fGSUBTable(gsubTable), fGDEFTable(NULL), fGPOSTable(NULL),
-- fSubstitutionFilter(NULL)
-+OpenTypeLayoutEngine::OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable)
-+ : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags), fFeatureMask(minimalFeatures),
-+ fFeatureMap(featureMap), fFeatureMapCount(featureMapCount), fFeatureOrder(FALSE),
-+ fGSUBTable(gsubTable), fGDEFTable(NULL), fGPOSTable(NULL), fSubstitutionFilter(NULL)
- {
- static const le_uint32 gdefTableTag = LE_GDEF_TABLE_TAG;
- static const le_uint32 gposTableTag = LE_GPOS_TABLE_TAG;
-- const GlyphPositioningTableHeader *gposTable =
-- (const GlyphPositioningTableHeader *) getFontTable(gposTableTag);
-+ const GlyphPositioningTableHeader *gposTable = (const GlyphPositioningTableHeader *) getFontTable(gposTableTag);
-
- applyTypoFlags();
-
-@@ -128,11 +128,10 @@
- LayoutEngine::reset();
- }
-
--OpenTypeLayoutEngine::OpenTypeLayoutEngine(const LEFontInstance *fontInstance,
-- le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags)
-- : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags),
-- fFeatureOrder(FALSE), fGSUBTable(NULL), fGDEFTable(NULL),
-- fGPOSTable(NULL), fSubstitutionFilter(NULL)
-+OpenTypeLayoutEngine::OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-+ le_int32 typoFlags)
-+ : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags), fFeatureOrder(FALSE),
-+ fGSUBTable(NULL), fGDEFTable(NULL), fGPOSTable(NULL), fSubstitutionFilter(NULL)
- {
- applyTypoFlags();
- setScriptAndLanguageTags();
-@@ -171,9 +170,8 @@
- fLangSysTag = getLangSysTag(fLanguageCode);
- }
-
--le_int32 OpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[],
-- le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-+le_int32 OpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
- {
- if (LE_FAILURE(success)) {
- return 0;
-@@ -184,8 +182,7 @@
- return 0;
- }
-
-- le_int32 outCharCount = LayoutEngine::characterProcessing(chars, offset, count,
-- max, rightToLeft, outChars, glyphStorage, success);
-+ le_int32 outCharCount = LayoutEngine::characterProcessing(chars, offset, count, max, rightToLeft, outChars, glyphStorage, success);
-
- if (LE_FAILURE(success)) {
- return 0;
-@@ -203,16 +200,14 @@
-
- // Input: characters, tags
- // Output: glyphs, char indices
--le_int32 OpenTypeLayoutEngine::glyphProcessing(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_int32 max, le_bool rightToLeft,
-- LEGlyphStorage &glyphStorage, LEErrorCode &success)
-+le_int32 OpenTypeLayoutEngine::glyphProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-+ LEGlyphStorage &glyphStorage, LEErrorCode &success)
- {
- if (LE_FAILURE(success)) {
- return 0;
- }
-
-- if (chars == NULL || offset < 0 || count < 0 || max < 0 ||
-- offset >= max || offset + count > max) {
-+ if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
- success = LE_ILLEGAL_ARGUMENT_ERROR;
- return 0;
- }
-@@ -224,16 +219,14 @@
- }
-
- if (fGSUBTable != NULL) {
-- count = fGSUBTable->process(glyphStorage, rightToLeft,
-- fScriptTag, fLangSysTag, fGDEFTable, fSubstitutionFilter,
-- fFeatureMap, fFeatureMapCount, fFeatureOrder);
-+ count = fGSUBTable->process(glyphStorage, rightToLeft, fScriptTag, fLangSysTag, fGDEFTable, fSubstitutionFilter,
-+ fFeatureMap, fFeatureMapCount, fFeatureOrder);
- }
-
- return count;
- }
-
--le_int32 OpenTypeLayoutEngine::glyphPostProcessing(LEGlyphStorage &tempGlyphStorage,
-- LEGlyphStorage &glyphStorage, LEErrorCode &success)
-+le_int32 OpenTypeLayoutEngine::glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success)
- {
- if (LE_FAILURE(success)) {
- return 0;
-@@ -247,9 +240,7 @@
- return glyphStorage.getGlyphCount();
- }
-
--le_int32 OpenTypeLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage,
-- LEErrorCode &success)
-+le_int32 OpenTypeLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success)
- {
- LEUnicode *outChars = NULL;
- LEGlyphStorage fakeGlyphStorage;
-@@ -259,25 +250,19 @@
- return 0;
- }
-
-- if (chars == NULL || offset < 0 || count < 0 || max < 0 ||
-- offset >= max || offset + count > max) {
-+ if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
- success = LE_ILLEGAL_ARGUMENT_ERROR;
- return 0;
- }
-
-- outCharCount = characterProcessing(chars, offset, count, max, rightToLeft,
-- outChars, fakeGlyphStorage, success);
-+ outCharCount = characterProcessing(chars, offset, count, max, rightToLeft, outChars, fakeGlyphStorage, success);
-
- if (outChars != NULL) {
-- fakeGlyphCount = glyphProcessing(outChars, 0, outCharCount, outCharCount,
-- rightToLeft, fakeGlyphStorage, success);
-- // FIXME: a subclass may have allocated this, in which case
-- // this delete might not work...
-- LE_DELETE_ARRAY(outChars);
-+ fakeGlyphCount = glyphProcessing(outChars, 0, outCharCount, outCharCount, rightToLeft, fakeGlyphStorage, success);
-+ LE_DELETE_ARRAY(outChars); // FIXME: a subclass may have allocated this, in which case this delete might not work...
- //adjustGlyphs(outChars, 0, outCharCount, rightToLeft, fakeGlyphs, fakeGlyphCount);
- } else {
-- fakeGlyphCount = glyphProcessing(chars, offset, count, max, rightToLeft,
-- fakeGlyphStorage, success);
-+ fakeGlyphCount = glyphProcessing(chars, offset, count, max, rightToLeft, fakeGlyphStorage, success);
- //adjustGlyphs(chars, offset, count, rightToLeft, fakeGlyphs, fakeGlyphCount);
- }
-
-@@ -287,8 +272,8 @@
- }
-
- // apply GPOS table, if any
--void OpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-+void OpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse,
-+ LEGlyphStorage &glyphStorage, LEErrorCode &success)
- {
- if (LE_FAILURE(success)) {
- return;
-@@ -324,8 +309,8 @@
- }
- #endif
-
-- fGPOSTable->process(glyphStorage, adjustments, reverse, fScriptTag, fLangSysTag,
-- fGDEFTable, fFontInstance, fFeatureMap, fFeatureMapCount, fFeatureOrder);
-+ fGPOSTable->process(glyphStorage, adjustments, reverse, fScriptTag, fLangSysTag, fGDEFTable, fFontInstance,
-+ fFeatureMap, fFeatureMapCount, fFeatureOrder);
-
- float xAdjust = 0, yAdjust = 0;
-
-@@ -360,4 +345,12 @@
-
- delete adjustments;
- }
-+
-+#if 0
-+ // Don't know why this is here...
-+ LE_DELETE_ARRAY(fFeatureTags);
-+ fFeatureTags = NULL;
-+#endif
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/OpenTypeLayoutEngine.h b/src/share/native/sun/font/layout/OpenTypeLayoutEngine.h
---- jdk/src/share/native/sun/font/layout/OpenTypeLayoutEngine.h
-+++ jdk/src/share/native/sun/font/layout/OpenTypeLayoutEngine.h
-@@ -23,9 +23,7 @@
- *
- */
-
--
- /*
-- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-@@ -42,6 +40,8 @@
- #include "GlyphDefinitionTables.h"
- #include "GlyphPositioningTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- /**
- * OpenTypeLayoutEngine implements complex text layout for OpenType fonts - that is
- * fonts which have GSUB and GPOS tables associated with them. In order to do this,
-@@ -87,7 +87,7 @@
- * @internal
- */
- OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-- le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable);
-+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable);
-
- /**
- * This constructor is used when the font requires a "canned" GSUB table which can't be known
-@@ -95,11 +95,12 @@
- *
- * @param fontInstance - the font
- * @param scriptCode - the script
-- * @param languageCode - the language
-+ * @param langaugeCode - the language
- *
- * @internal
- */
-- OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags);
-+ OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-+ le_int32 typoFlags);
-
- /**
- * The destructor, virtual for correct polymorphic invocation.
-@@ -132,6 +133,20 @@
- */
- static LETag getLangSysTag(le_int32 languageCode);
-
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ virtual UClassID getDynamicClassID() const;
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for this class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ static UClassID getStaticClassID();
-+
- private:
-
- /**
-@@ -259,9 +274,8 @@
- *
- * @internal
- */
-- virtual le_int32 characterProcessing(const LEUnicode /*chars*/[], le_int32 offset,
-- le_int32 count, le_int32 max, le_bool /*rightToLeft*/,
-- LEUnicode *&/*outChars*/, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+ virtual le_int32 characterProcessing(const LEUnicode /*chars*/[], le_int32 offset, le_int32 count, le_int32 max, le_bool /*rightToLeft*/,
-+ LEUnicode *&/*outChars*/, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
- /**
- * This method does character to glyph mapping, and applies the GSUB table. The
-@@ -292,9 +306,8 @@
- *
- * @internal
- */
-- virtual le_int32 glyphProcessing(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_int32 max, le_bool rightToLeft,
-- LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+ virtual le_int32 glyphProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-+ LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
- /**
- * This method does any processing necessary to convert "fake"
-@@ -321,8 +334,7 @@
- *
- * @internal
- */
-- virtual le_int32 glyphPostProcessing(LEGlyphStorage &tempGlyphStorage,
-- LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+ virtual le_int32 glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
- /**
- * This method applies the characterProcessing, glyphProcessing and glyphPostProcessing
-@@ -346,8 +358,7 @@
- *
- * @internal
- */
-- virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count,
-- le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+ virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
- /**
- * This method uses the GPOS table, if there is one, to adjust the glyph positions.
-@@ -364,8 +375,7 @@
- *
- * @internal
- */
-- virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count,
-- le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+ virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
- /**
- * This method frees the feature tag array so that the
-@@ -377,4 +387,6 @@
- virtual void reset();
- };
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/OpenTypeTables.h b/src/share/native/sun/font/layout/OpenTypeTables.h
---- jdk/src/share/native/sun/font/layout/OpenTypeTables.h
-+++ jdk/src/share/native/sun/font/layout/OpenTypeTables.h
-@@ -32,8 +32,15 @@
- #ifndef __OPENTYPETABLES_H
- #define __OPENTYPETABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
-
-+U_NAMESPACE_BEGIN
-+
- #define ANY_NUMBER 1
-
- typedef le_uint16 Offset;
-@@ -62,4 +69,5 @@
- FeatureMask mask;
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/OpenTypeUtilities.cpp b/src/share/native/sun/font/layout/OpenTypeUtilities.cpp
---- jdk/src/share/native/sun/font/layout/OpenTypeUtilities.cpp
-+++ jdk/src/share/native/sun/font/layout/OpenTypeUtilities.cpp
-@@ -34,6 +34,8 @@
- #include "OpenTypeUtilities.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- //
- // Finds the high bit by binary searching
- // through the bits in n.
-@@ -192,3 +194,7 @@
- array[i + 1] = v;
- }
- }
-+
-+
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/OpenTypeUtilities.h b/src/share/native/sun/font/layout/OpenTypeUtilities.h
---- jdk/src/share/native/sun/font/layout/OpenTypeUtilities.h
-+++ jdk/src/share/native/sun/font/layout/OpenTypeUtilities.h
-@@ -32,10 +32,17 @@
- #ifndef __OPENTYPEUTILITIES_H
- #define __OPENTYPEUTILITIES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "OpenTypeTables.h"
-
--class OpenTypeUtilities {
-+U_NAMESPACE_BEGIN
-+
-+class OpenTypeUtilities /* not : public UObject because all methods are static */ {
- public:
- static le_int8 highBit(le_int32 value);
- static Offset getTagOffset(LETag tag, const TagAndOffsetRecord *records, le_int32 recordCount);
-@@ -48,4 +55,5 @@
- OpenTypeUtilities() {} // private - forbid instantiation
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/PairPositioningSubtables.cpp b/src/share/native/sun/font/layout/PairPositioningSubtables.cpp
---- jdk/src/share/native/sun/font/layout/PairPositioningSubtables.cpp
-+++ jdk/src/share/native/sun/font/layout/PairPositioningSubtables.cpp
-@@ -39,6 +39,8 @@
- #include "OpenTypeUtilities.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- le_uint32 PairPositioningSubtable::process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const
- {
- switch(SWAPW(subtableFormat))
-@@ -82,8 +84,7 @@
- const PairValueRecord *pairValueRecord = NULL;
-
- if (pairValueCount != 0) {
-- pairValueRecord = findPairValueRecord((TTGlyphID) LE_GET_GLYPH(secondGlyph),
-- pairSetTable->pairValueRecordArray, pairValueCount, recordSize);
-+ pairValueRecord = findPairValueRecord((TTGlyphID) LE_GET_GLYPH(secondGlyph), pairSetTable->pairValueRecordArray, pairValueCount, recordSize);
- }
-
- if (pairValueRecord == NULL) {
-@@ -91,8 +92,7 @@
- }
-
- if (valueFormat1 != 0) {
-- pairValueRecord->valueRecord1.adjustPosition(SWAPW(valueFormat1), (char *) this,
-- tempIterator, fontInstance);
-+ pairValueRecord->valueRecord1.adjustPosition(SWAPW(valueFormat1), (char *) this, tempIterator, fontInstance);
- }
-
- if (valueFormat2 != 0) {
-@@ -171,3 +171,5 @@
-
- return NULL;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/PairPositioningSubtables.h b/src/share/native/sun/font/layout/PairPositioningSubtables.h
---- jdk/src/share/native/sun/font/layout/PairPositioningSubtables.h
-+++ jdk/src/share/native/sun/font/layout/PairPositioningSubtables.h
-@@ -32,6 +32,11 @@
- #ifndef __PAIRPOSITIONINGSUBTABLES_H
- #define __PAIRPOSITIONINGSUBTABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LEFontInstance.h"
- #include "OpenTypeTables.h"
-@@ -39,6 +44,8 @@
- #include "ValueRecords.h"
- #include "GlyphIterator.h"
-
-+U_NAMESPACE_BEGIN
-+
- // NOTE: ValueRecord has a variable size
- struct PairValueRecord
- {
-@@ -96,4 +103,7 @@
- le_uint32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
- };
-
-+U_NAMESPACE_END
- #endif
-+
-+
-diff --git a/src/share/native/sun/font/layout/ScriptAndLanguage.cpp b/src/share/native/sun/font/layout/ScriptAndLanguage.cpp
---- jdk/src/share/native/sun/font/layout/ScriptAndLanguage.cpp
-+++ jdk/src/share/native/sun/font/layout/ScriptAndLanguage.cpp
-@@ -25,6 +25,7 @@
-
- /*
- *
-+ *
- * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved
- *
- */
-@@ -35,6 +36,8 @@
- #include "ScriptAndLanguage.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- const LangSysTable *ScriptTable::findLanguage(LETag languageTag, le_bool exactMatch) const
- {
- le_uint16 count = SWAPW(langSysCount);
-@@ -79,3 +82,5 @@
-
- return scriptTable->findLanguage(languageTag, exactMatch);
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/ScriptAndLanguage.h b/src/share/native/sun/font/layout/ScriptAndLanguage.h
---- jdk/src/share/native/sun/font/layout/ScriptAndLanguage.h
-+++ jdk/src/share/native/sun/font/layout/ScriptAndLanguage.h
-@@ -32,9 +32,16 @@
- #ifndef __SCRIPTANDLANGUAGE_H
- #define __SCRIPTANDLANGUAGE_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "OpenTypeTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- typedef TagAndOffsetRecord LangSysRecord;
-
- struct LangSysTable
-@@ -65,4 +72,6 @@
- const LangSysTable *findLanguage(LETag scriptTag, LETag languageTag, le_bool exactMatch = FALSE) const;
- };
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/ScriptAndLanguageTags.cpp b/src/share/native/sun/font/layout/ScriptAndLanguageTags.cpp
---- jdk/src/share/native/sun/font/layout/ScriptAndLanguageTags.cpp
-+++ jdk/src/share/native/sun/font/layout/ScriptAndLanguageTags.cpp
-@@ -35,6 +35,8 @@
- #include "ScriptAndLanguageTags.h"
- #include "OpenTypeLayoutEngine.h"
-
-+U_NAMESPACE_BEGIN
-+
- const LETag OpenTypeLayoutEngine::scriptTags[] = {
- zyyyScriptTag, /* 'zyyy' (COMMON) */
- qaaiScriptTag, /* 'qaai' (INHERITED) */
-@@ -125,3 +127,5 @@
- zhsLanguageTag, /* 'ZHS' (Chinese (Simplified)) */
- zhtLanguageTag /* 'ZHT' (Chinese (Traditional)) */
- };
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/ScriptAndLanguageTags.h b/src/share/native/sun/font/layout/ScriptAndLanguageTags.h
---- jdk/src/share/native/sun/font/layout/ScriptAndLanguageTags.h
-+++ jdk/src/share/native/sun/font/layout/ScriptAndLanguageTags.h
-@@ -36,6 +36,13 @@
-
- #include "LETypes.h"
-
-+U_NAMESPACE_BEGIN
-+
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- const LETag zyyyScriptTag = 0x7A797979; /* 'zyyy' (COMMON) */
- const LETag qaaiScriptTag = 0x71616169; /* 'qaai' (INHERITED) */
- const LETag arabScriptTag = 0x61726162; /* 'arab' (ARABIC) */
-@@ -126,4 +133,6 @@
- const LETag zhsLanguageTag = 0x5A485320; /* 'ZHS' (Chinese (Simplified)) */
- const LETag zhtLanguageTag = 0x5A485420; /* 'ZHT' (Chinese (Traditional)) */
-
-+
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/SegmentArrayProcessor.cpp b/src/share/native/sun/font/layout/SegmentArrayProcessor.cpp
---- jdk/src/share/native/sun/font/layout/SegmentArrayProcessor.cpp
-+++ jdk/src/share/native/sun/font/layout/SegmentArrayProcessor.cpp
-@@ -38,6 +38,10 @@
- #include "LEGlyphStorage.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
-+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SegmentArrayProcessor)
-+
- SegmentArrayProcessor::SegmentArrayProcessor()
- {
- }
-@@ -77,3 +81,5 @@
- }
- }
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/SegmentArrayProcessor.h b/src/share/native/sun/font/layout/SegmentArrayProcessor.h
---- jdk/src/share/native/sun/font/layout/SegmentArrayProcessor.h
-+++ jdk/src/share/native/sun/font/layout/SegmentArrayProcessor.h
-@@ -32,12 +32,19 @@
- #ifndef __SEGMENTARRAYPROCESSOR_H
- #define __SEGMENTARRAYPROCESSOR_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "MorphTables.h"
- #include "SubtableProcessor.h"
- #include "NonContextualGlyphSubst.h"
- #include "NonContextualGlyphSubstProc.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEGlyphStorage;
-
- class SegmentArrayProcessor : public NonContextualGlyphSubstitutionProcessor
-@@ -49,11 +56,28 @@
-
- virtual ~SegmentArrayProcessor();
-
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ virtual UClassID getDynamicClassID() const;
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for this class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ static UClassID getStaticClassID();
-+
- private:
- SegmentArrayProcessor();
-
- protected:
- const SegmentArrayLookupTable *segmentArrayLookupTable;
-+
- };
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/SegmentSingleProcessor.cpp b/src/share/native/sun/font/layout/SegmentSingleProcessor.cpp
---- jdk/src/share/native/sun/font/layout/SegmentSingleProcessor.cpp
-+++ jdk/src/share/native/sun/font/layout/SegmentSingleProcessor.cpp
-@@ -38,6 +38,10 @@
- #include "LEGlyphStorage.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
-+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SegmentSingleProcessor)
-+
- SegmentSingleProcessor::SegmentSingleProcessor()
- {
- }
-@@ -71,3 +75,5 @@
- }
- }
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/SegmentSingleProcessor.h b/src/share/native/sun/font/layout/SegmentSingleProcessor.h
---- jdk/src/share/native/sun/font/layout/SegmentSingleProcessor.h
-+++ jdk/src/share/native/sun/font/layout/SegmentSingleProcessor.h
-@@ -32,12 +32,19 @@
- #ifndef __SEGMENTSINGLEPROCESSOR_H
- #define __SEGMENTSINGLEPROCESSOR_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "MorphTables.h"
- #include "SubtableProcessor.h"
- #include "NonContextualGlyphSubst.h"
- #include "NonContextualGlyphSubstProc.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEGlyphStorage;
-
- class SegmentSingleProcessor : public NonContextualGlyphSubstitutionProcessor
-@@ -49,11 +56,28 @@
-
- virtual ~SegmentSingleProcessor();
-
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ virtual UClassID getDynamicClassID() const;
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for this class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ static UClassID getStaticClassID();
-+
- private:
- SegmentSingleProcessor();
-
- protected:
- const SegmentSingleLookupTable *segmentSingleLookupTable;
-+
- };
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/ShapingTypeData.cpp b/src/share/native/sun/font/layout/ShapingTypeData.cpp
---- jdk/src/share/native/sun/font/layout/ShapingTypeData.cpp
-+++ jdk/src/share/native/sun/font/layout/ShapingTypeData.cpp
-@@ -36,6 +36,8 @@
- #include "LETypes.h"
- #include "ArabicShaping.h"
-
-+U_NAMESPACE_BEGIN
-+
- const le_uint8 ArabicShaping::shapingTypeTable[] = {
- 0x00, 0x02, 0x00, 0xAD, 0x00, 0xAD, 0x00, 0xAD, 0x00, 0x05, 0x03, 0x00, 0x03, 0x6F, 0x00, 0x05,
- 0x04, 0x83, 0x04, 0x86, 0x00, 0x05, 0x04, 0x88, 0x04, 0x89, 0x00, 0x05, 0x05, 0x91, 0x05, 0xB9,
-@@ -104,3 +106,5 @@
- 0xFE, 0x20, 0xFE, 0x23, 0x00, 0x05, 0xFE, 0xFF, 0xFE, 0xFF, 0x00, 0x05, 0xFF, 0xF9, 0xFF, 0xFB,
- 0x00, 0x05
- };
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/SimpleArrayProcessor.cpp b/src/share/native/sun/font/layout/SimpleArrayProcessor.cpp
---- jdk/src/share/native/sun/font/layout/SimpleArrayProcessor.cpp
-+++ jdk/src/share/native/sun/font/layout/SimpleArrayProcessor.cpp
-@@ -38,6 +38,10 @@
- #include "LEGlyphStorage.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
-+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SimpleArrayProcessor)
-+
- SimpleArrayProcessor::SimpleArrayProcessor()
- {
- }
-@@ -68,3 +72,5 @@
- }
- }
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/SimpleArrayProcessor.h b/src/share/native/sun/font/layout/SimpleArrayProcessor.h
---- jdk/src/share/native/sun/font/layout/SimpleArrayProcessor.h
-+++ jdk/src/share/native/sun/font/layout/SimpleArrayProcessor.h
-@@ -32,12 +32,19 @@
- #ifndef __SIMPLEARRAYPROCESSOR_H
- #define __SIMPLEARRAYPROCESSOR_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "MorphTables.h"
- #include "SubtableProcessor.h"
- #include "NonContextualGlyphSubst.h"
- #include "NonContextualGlyphSubstProc.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEGlyphStorage;
-
- class SimpleArrayProcessor : public NonContextualGlyphSubstitutionProcessor
-@@ -49,11 +56,28 @@
-
- virtual ~SimpleArrayProcessor();
-
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ virtual UClassID getDynamicClassID() const;
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for this class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ static UClassID getStaticClassID();
-+
- private:
- SimpleArrayProcessor();
-
- protected:
- const SimpleArrayLookupTable *simpleArrayLookupTable;
-+
- };
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/SinglePositioningSubtables.cpp b/src/share/native/sun/font/layout/SinglePositioningSubtables.cpp
---- jdk/src/share/native/sun/font/layout/SinglePositioningSubtables.cpp
-+++ jdk/src/share/native/sun/font/layout/SinglePositioningSubtables.cpp
-@@ -38,6 +38,8 @@
- #include "GlyphIterator.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- le_uint32 SinglePositioningSubtable::process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const
- {
- switch(SWAPW(subtableFormat))
-@@ -84,11 +86,12 @@
- le_int16 coverageIndex = (le_int16) getGlyphCoverage(glyph);
-
- if (coverageIndex >= 0) {
-- valueRecordArray[0].adjustPosition(coverageIndex, SWAPW(valueFormat), (const char *) this,
-- *glyphIterator, fontInstance);
-+ valueRecordArray[0].adjustPosition(coverageIndex, SWAPW(valueFormat), (const char *) this, *glyphIterator, fontInstance);
-
- return 1;
- }
-
- return 0;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/SinglePositioningSubtables.h b/src/share/native/sun/font/layout/SinglePositioningSubtables.h
---- jdk/src/share/native/sun/font/layout/SinglePositioningSubtables.h
-+++ jdk/src/share/native/sun/font/layout/SinglePositioningSubtables.h
-@@ -32,6 +32,11 @@
- #ifndef __SINGLEPOSITIONINGSUBTABLES_H
- #define __SINGLEPOSITIONINGSUBTABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LEFontInstance.h"
- #include "OpenTypeTables.h"
-@@ -39,6 +44,8 @@
- #include "ValueRecords.h"
- #include "GlyphIterator.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct SinglePositioningSubtable : GlyphPositioningSubtable
- {
- le_uint32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
-@@ -61,4 +68,7 @@
- le_uint32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
- };
-
-+U_NAMESPACE_END
- #endif
-+
-+
-diff --git a/src/share/native/sun/font/layout/SingleSubstitutionSubtables.cpp b/src/share/native/sun/font/layout/SingleSubstitutionSubtables.cpp
---- jdk/src/share/native/sun/font/layout/SingleSubstitutionSubtables.cpp
-+++ jdk/src/share/native/sun/font/layout/SingleSubstitutionSubtables.cpp
-@@ -37,6 +37,8 @@
- #include "GlyphIterator.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- le_uint32 SingleSubstitutionSubtable::process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter) const
- {
- switch(SWAPW(subtableFormat))
-@@ -98,3 +100,5 @@
-
- return 0;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/SingleSubstitutionSubtables.h b/src/share/native/sun/font/layout/SingleSubstitutionSubtables.h
---- jdk/src/share/native/sun/font/layout/SingleSubstitutionSubtables.h
-+++ jdk/src/share/native/sun/font/layout/SingleSubstitutionSubtables.h
-@@ -32,12 +32,19 @@
- #ifndef __SINGLESUBSTITUTIONSUBTABLES_H
- #define __SINGLESUBSTITUTIONSUBTABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LEGlyphFilter.h"
- #include "OpenTypeTables.h"
- #include "GlyphSubstitutionTables.h"
- #include "GlyphIterator.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct SingleSubstitutionSubtable : GlyphSubstitutionSubtable
- {
- le_uint32 process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter = NULL) const;
-@@ -58,4 +65,7 @@
- le_uint32 process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter = NULL) const;
- };
-
-+U_NAMESPACE_END
- #endif
-+
-+
-diff --git a/src/share/native/sun/font/layout/SingleTableProcessor.cpp b/src/share/native/sun/font/layout/SingleTableProcessor.cpp
---- jdk/src/share/native/sun/font/layout/SingleTableProcessor.cpp
-+++ jdk/src/share/native/sun/font/layout/SingleTableProcessor.cpp
-@@ -38,6 +38,10 @@
- #include "LEGlyphStorage.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
-+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SingleTableProcessor)
-+
- SingleTableProcessor::SingleTableProcessor()
- {
- }
-@@ -68,3 +72,5 @@
- }
- }
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/SingleTableProcessor.h b/src/share/native/sun/font/layout/SingleTableProcessor.h
---- jdk/src/share/native/sun/font/layout/SingleTableProcessor.h
-+++ jdk/src/share/native/sun/font/layout/SingleTableProcessor.h
-@@ -32,12 +32,19 @@
- #ifndef __SINGLETABLEPROCESSOR_H
- #define __SINGLETABLEPROCESSOR_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "MorphTables.h"
- #include "SubtableProcessor.h"
- #include "NonContextualGlyphSubst.h"
- #include "NonContextualGlyphSubstProc.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEGlyphStorage;
-
- class SingleTableProcessor : public NonContextualGlyphSubstitutionProcessor
-@@ -49,11 +56,27 @@
-
- virtual ~SingleTableProcessor();
-
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ virtual UClassID getDynamicClassID() const;
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for this class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ static UClassID getStaticClassID();
-+
- private:
- SingleTableProcessor();
-
- protected:
- const SingleTableLookupTable *singleTableLookupTable;
-+
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/StateTableProcessor.cpp b/src/share/native/sun/font/layout/StateTableProcessor.cpp
---- jdk/src/share/native/sun/font/layout/StateTableProcessor.cpp
-+++ jdk/src/share/native/sun/font/layout/StateTableProcessor.cpp
-@@ -38,6 +38,8 @@
- #include "LEGlyphStorage.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- StateTableProcessor::StateTableProcessor()
- {
- }
-@@ -101,3 +103,5 @@
-
- endStateTable();
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/StateTableProcessor.h b/src/share/native/sun/font/layout/StateTableProcessor.h
---- jdk/src/share/native/sun/font/layout/StateTableProcessor.h
-+++ jdk/src/share/native/sun/font/layout/StateTableProcessor.h
-@@ -32,11 +32,18 @@
- #ifndef __STATETABLEPROCESSOR_H
- #define __STATETABLEPROCESSOR_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "MorphTables.h"
- #include "MorphStateTables.h"
- #include "SubtableProcessor.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEGlyphStorage;
-
- class StateTableProcessor : public SubtableProcessor
-@@ -72,4 +79,5 @@
- StateTableProcessor &operator=(const StateTableProcessor &other); // forbid copying of this class
- };
-
-+U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/StateTables.h b/src/share/native/sun/font/layout/StateTables.h
---- jdk/src/share/native/sun/font/layout/StateTables.h
-+++ jdk/src/share/native/sun/font/layout/StateTables.h
-@@ -32,6 +32,11 @@
- #ifndef __STATETABLES_H
- #define __STATETABLES_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LayoutTables.h"
-
-@@ -70,6 +75,8 @@
- #define LE_STATE_PATIENCE_INCR(x) if((x)!=le_patience_curr) ++le_patience_count;
-
-
-+U_NAMESPACE_BEGIN
-+
- struct StateTableHeader
- {
- le_int16 stateSize;
-@@ -113,4 +120,6 @@
- le_int16 flags;
- };
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/SubstitutionLookups.cpp b/src/share/native/sun/font/layout/SubstitutionLookups.cpp
---- jdk/src/share/native/sun/font/layout/SubstitutionLookups.cpp
-+++ jdk/src/share/native/sun/font/layout/SubstitutionLookups.cpp
-@@ -39,6 +39,8 @@
- #include "CoverageTables.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- /*
- NOTE: This could be optimized somewhat by keeping track
- of the previous sequenceIndex in the loop and doing next()
-@@ -65,3 +67,5 @@
- lookupProcessor->applySingleLookup(lookupListIndex, &tempIterator, fontInstance);
- }
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/SubstitutionLookups.h b/src/share/native/sun/font/layout/SubstitutionLookups.h
---- jdk/src/share/native/sun/font/layout/SubstitutionLookups.h
-+++ jdk/src/share/native/sun/font/layout/SubstitutionLookups.h
-@@ -32,6 +32,11 @@
- #ifndef __SUBSTITUTIONLOOKUPS_H
- #define __SUBSTITUTIONLOOKUPS_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LEFontInstance.h"
- #include "OpenTypeTables.h"
-@@ -39,6 +44,8 @@
- #include "GlyphIterator.h"
- #include "LookupProcessor.h"
-
-+U_NAMESPACE_BEGIN
-+
- struct SubstitutionLookupRecord
- {
- le_uint16 sequenceIndex;
-@@ -56,4 +63,6 @@
- le_int32 position);
- };
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/SubtableProcessor.cpp b/src/share/native/sun/font/layout/SubtableProcessor.cpp
---- jdk/src/share/native/sun/font/layout/SubtableProcessor.cpp
-+++ jdk/src/share/native/sun/font/layout/SubtableProcessor.cpp
-@@ -34,6 +34,8 @@
- #include "SubtableProcessor.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- SubtableProcessor::SubtableProcessor()
- {
- }
-@@ -50,3 +52,5 @@
- SubtableProcessor::~SubtableProcessor()
- {
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/SubtableProcessor.h b/src/share/native/sun/font/layout/SubtableProcessor.h
---- jdk/src/share/native/sun/font/layout/SubtableProcessor.h
-+++ jdk/src/share/native/sun/font/layout/SubtableProcessor.h
-@@ -32,13 +32,19 @@
- #ifndef __SUBTABLEPROCESSOR_H
- #define __SUBTABLEPROCESSOR_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "MorphTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEGlyphStorage;
-
--class SubtableProcessor
--{
-+class SubtableProcessor : public UMemory {
- public:
- virtual void process(LEGlyphStorage &glyphStorage) = 0;
- virtual ~SubtableProcessor();
-@@ -60,4 +66,6 @@
- SubtableProcessor &operator=(const SubtableProcessor &other); // forbid copying of this class
- };
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/ThaiLayoutEngine.cpp b/src/share/native/sun/font/layout/ThaiLayoutEngine.cpp
---- jdk/src/share/native/sun/font/layout/ThaiLayoutEngine.cpp
-+++ jdk/src/share/native/sun/font/layout/ThaiLayoutEngine.cpp
-@@ -38,8 +38,11 @@
-
- #include "ThaiShaping.h"
-
--ThaiLayoutEngine::ThaiLayoutEngine(const LEFontInstance *fontInstance,
-- le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags)
-+U_NAMESPACE_BEGIN
-+
-+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ThaiLayoutEngine)
-+
-+ThaiLayoutEngine::ThaiLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags)
- : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags)
- {
- fErrorChar = 0x25CC;
-@@ -73,16 +76,13 @@
- // Output: glyphs, char indices
- // Returns: the glyph count
- // NOTE: this assumes that ThaiShaping::compose will allocate the outChars array...
--le_int32 ThaiLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_int32 max, le_bool /*rightToLeft*/,
-- LEGlyphStorage &glyphStorage, LEErrorCode &success)
-+le_int32 ThaiLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool /*rightToLeft*/, LEGlyphStorage &glyphStorage, LEErrorCode &success)
- {
- if (LE_FAILURE(success)) {
- return 0;
- }
-
-- if (chars == NULL || offset < 0 || count < 0 || max < 0 ||
-- offset >= max || offset + count > max) {
-+ if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
- success = LE_ILLEGAL_ARGUMENT_ERROR;
- return 0;
- }
-@@ -107,8 +107,7 @@
- return 0;
- }
-
-- glyphCount = ThaiShaping::compose(chars, offset, count, fGlyphSet, fErrorChar,
-- outChars, glyphStorage);
-+ glyphCount = ThaiShaping::compose(chars, offset, count, fGlyphSet, fErrorChar, outChars, glyphStorage);
- mapCharsToGlyphs(outChars, 0, glyphCount, FALSE, FALSE, glyphStorage, success);
-
- LE_DELETE_ARRAY(outChars);
-@@ -116,3 +115,5 @@
- glyphStorage.adoptGlyphCount(glyphCount);
- return glyphCount;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/ThaiLayoutEngine.h b/src/share/native/sun/font/layout/ThaiLayoutEngine.h
---- jdk/src/share/native/sun/font/layout/ThaiLayoutEngine.h
-+++ jdk/src/share/native/sun/font/layout/ThaiLayoutEngine.h
-@@ -39,6 +39,8 @@
-
- #include "ThaiShaping.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEGlyphStorage;
-
- /**
-@@ -66,8 +68,7 @@
- *
- * @internal
- */
-- ThaiLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode,
-- le_int32 languageCode, le_int32 typoFlags);
-+ ThaiLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags);
-
- /**
- * The destructor, virtual for correct polymorphic invocation.
-@@ -76,6 +77,20 @@
- */
- virtual ~ThaiLayoutEngine();
-
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ virtual UClassID getDynamicClassID() const;
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for this class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ static UClassID getStaticClassID();
-+
- protected:
- /**
- * A small integer indicating which Thai encoding
-@@ -109,10 +124,8 @@
- * @param offset - the index of the first character to process
- * @param count - the number of characters to process
- * @param max - the number of characters in the input context
-- * @param rightToLeft - <code>TRUE</code> if the text is in a
-- * right to left directional run
-- * @param glyphStorage - the glyph storage object. The glyph and
-- * char index arrays will be set.
-+ * @param rightToLeft - <code>TRUE</code> if the text is in a right to left directional run
-+ * @param glyphStorage - the glyph storage object. The glyph and char index arrays will be set.
- *
- * Output parameters:
- * @param success - set to an error code if the operation fails
-@@ -123,10 +136,11 @@
- *
- * @internal
- */
-- virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset,
-- le_int32 count, le_int32 max, le_bool rightToLeft,
-+ virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
- LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
- };
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/ThaiShaping.cpp b/src/share/native/sun/font/layout/ThaiShaping.cpp
---- jdk/src/share/native/sun/font/layout/ThaiShaping.cpp
-+++ jdk/src/share/native/sun/font/layout/ThaiShaping.cpp
-@@ -35,6 +35,8 @@
- #include "LEGlyphStorage.h"
- #include "ThaiShaping.h"
-
-+U_NAMESPACE_BEGIN
-+
- enum {
- CH_SPACE = 0x0020,
- CH_YAMAKKAN = 0x0E4E,
-@@ -248,9 +250,8 @@
- return transition.nextState;
- }
-
--le_uint8 ThaiShaping::getNextState(LEUnicode ch, le_uint8 prevState, le_int32 inputIndex,
-- le_uint8 glyphSet, LEUnicode errorChar,
-- le_uint8 &charClass, LEUnicode *output, LEGlyphStorage &glyphStorage, le_int32 &outputIndex)
-+le_uint8 ThaiShaping::getNextState(LEUnicode ch, le_uint8 prevState, le_int32 inputIndex, le_uint8 glyphSet, LEUnicode errorChar,
-+ le_uint8 &charClass, LEUnicode *output, LEGlyphStorage &glyphStorage, le_int32 &outputIndex)
- {
- StateTransition transition;
-
-@@ -327,3 +328,5 @@
-
- return outputIndex;
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/ThaiShaping.h b/src/share/native/sun/font/layout/ThaiShaping.h
---- jdk/src/share/native/sun/font/layout/ThaiShaping.h
-+++ jdk/src/share/native/sun/font/layout/ThaiShaping.h
-@@ -32,13 +32,20 @@
- #ifndef __THAISHAPING_H
- #define __THAISHAPING_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LEGlyphFilter.h"
- #include "OpenTypeTables.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEGlyphStorage;
-
--class ThaiShaping {
-+class ThaiShaping /* not : public UObject because all methods are static */ {
- public:
-
- enum {
-@@ -120,4 +127,7 @@
- return thaiStateTable[state][currClass];
- }
-
-+U_NAMESPACE_END
- #endif
-+
-+
-diff --git a/src/share/native/sun/font/layout/ThaiStateTables.cpp b/src/share/native/sun/font/layout/ThaiStateTables.cpp
---- jdk/src/share/native/sun/font/layout/ThaiStateTables.cpp
-+++ jdk/src/share/native/sun/font/layout/ThaiStateTables.cpp
-@@ -25,6 +25,7 @@
-
- /*
- *
-+ *
- * (C) Copyright IBM Corp. 1999-2003 - All Rights Reserved
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
-@@ -35,6 +36,8 @@
- #include "LETypes.h"
- #include "ThaiShaping.h"
-
-+U_NAMESPACE_BEGIN
-+
- const le_uint8 ThaiShaping::classTable[] = {
- // 0 1 2 3 4 5 6 7 8 9 A B C D E F
- // -------------------------------------------------------------------------------
-@@ -105,3 +108,5 @@
- /*50*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {51, tC}, { 0, tR}, { 0, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
- /*51*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}}
- };
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/TrimmedArrayProcessor.cpp b/src/share/native/sun/font/layout/TrimmedArrayProcessor.cpp
---- jdk/src/share/native/sun/font/layout/TrimmedArrayProcessor.cpp
-+++ jdk/src/share/native/sun/font/layout/TrimmedArrayProcessor.cpp
-@@ -38,6 +38,10 @@
- #include "LEGlyphStorage.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
-+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(TrimmedArrayProcessor)
-+
- TrimmedArrayProcessor::TrimmedArrayProcessor()
- {
- }
-@@ -72,3 +76,5 @@
- }
- }
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/TrimmedArrayProcessor.h b/src/share/native/sun/font/layout/TrimmedArrayProcessor.h
---- jdk/src/share/native/sun/font/layout/TrimmedArrayProcessor.h
-+++ jdk/src/share/native/sun/font/layout/TrimmedArrayProcessor.h
-@@ -32,12 +32,19 @@
- #ifndef __TRIMMEDARRAYPROCESSOR_H
- #define __TRIMMEDARRAYPROCESSOR_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "MorphTables.h"
- #include "SubtableProcessor.h"
- #include "NonContextualGlyphSubst.h"
- #include "NonContextualGlyphSubstProc.h"
-
-+U_NAMESPACE_BEGIN
-+
- class LEGlyphStorage;
-
- class TrimmedArrayProcessor : public NonContextualGlyphSubstitutionProcessor
-@@ -49,6 +56,20 @@
-
- virtual ~TrimmedArrayProcessor();
-
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ virtual UClassID getDynamicClassID() const;
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for this class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ static UClassID getStaticClassID();
-+
- private:
- TrimmedArrayProcessor();
-
-@@ -56,6 +77,9 @@
- TTGlyphID firstGlyph;
- TTGlyphID lastGlyph;
- const TrimmedArrayLookupTable *trimmedArrayLookupTable;
-+
- };
-
-+U_NAMESPACE_END
- #endif
-+
-diff --git a/src/share/native/sun/font/layout/ValueRecords.cpp b/src/share/native/sun/font/layout/ValueRecords.cpp
---- jdk/src/share/native/sun/font/layout/ValueRecords.cpp
-+++ jdk/src/share/native/sun/font/layout/ValueRecords.cpp
-@@ -37,6 +37,8 @@
- #include "GlyphIterator.h"
- #include "LESwaps.h"
-
-+U_NAMESPACE_BEGIN
-+
- #define Nibble(value, nibble) ((value >> (nibble * 4)) & 0xF)
- #define NibbleBits(value, nibble) (bitsInNibble[Nibble(value, nibble)])
-
-@@ -161,8 +163,8 @@
- xPlacementAdjustment, yPlacementAdjustment, xAdvanceAdjustment, yAdvanceAdjustment);
- }
-
--void ValueRecord::adjustPosition(le_int16 index, ValueFormat valueFormat, const char *base,
-- GlyphIterator &glyphIterator, const LEFontInstance *fontInstance) const
-+void ValueRecord::adjustPosition(le_int16 index, ValueFormat valueFormat, const char *base, GlyphIterator &glyphIterator,
-+ const LEFontInstance *fontInstance) const
- {
- float xPlacementAdjustment = 0;
- float yPlacementAdjustment = 0;
-@@ -323,3 +325,5 @@
-
- return getFieldCount(valueFormat & beforeMasks[field]);
- }
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/ValueRecords.h b/src/share/native/sun/font/layout/ValueRecords.h
---- jdk/src/share/native/sun/font/layout/ValueRecords.h
-+++ jdk/src/share/native/sun/font/layout/ValueRecords.h
-@@ -32,11 +32,18 @@
- #ifndef __VALUERECORDS_H
- #define __VALUERECORDS_H
-
-+/**
-+ * \file
-+ * \internal
-+ */
-+
- #include "LETypes.h"
- #include "LEFontInstance.h"
- #include "OpenTypeTables.h"
- #include "GlyphIterator.h"
-
-+U_NAMESPACE_BEGIN
-+
- typedef le_uint16 ValueFormat;
- typedef le_int16 ValueRecordField;
-
-@@ -84,5 +91,7 @@
- vfbAnyDevice = vfbXPlaDevice + vfbYPlaDevice + vfbXAdvDevice + vfbYAdvDevice
- };
-
-+U_NAMESPACE_END
-+#endif
-
--#endif
-+
diff --git a/java/openjdk6/files/icedtea/openjdk/6669869-queries_per_appcontext.patch b/java/openjdk6/files/icedtea/openjdk/6669869-queries_per_appcontext.patch
deleted file mode 100644
index 5e0f001e7b35..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/6669869-queries_per_appcontext.patch
+++ /dev/null
@@ -1,355 +0,0 @@
-# HG changeset patch
-# User andrew
-# Date 1365686276 -3600
-# Node ID a939f541de9af5ccb78225c27cd46cd7dc6bcf87
-# Parent 9745a1f43592582cce60d8632d614fafc7dfdc3c
-6669869: Beans.isDesignTime() and other queries should be per-AppContext
-Reviewed-by: peterz, rupashka
-
-diff --git a/src/share/classes/java/beans/Beans.java b/src/share/classes/java/beans/Beans.java
---- jdk/src/share/classes/java/beans/Beans.java
-+++ jdk/src/share/classes/java/beans/Beans.java
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1996, 2009, Oracle and/or its affiliates. All rights reserved.
- * 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,26 +27,41 @@
-
- import com.sun.beans.finder.ClassFinder;
-
--import java.applet.*;
-+import java.applet.Applet;
-+import java.applet.AppletContext;
-+import java.applet.AppletStub;
-+import java.applet.AudioClip;
-
--import java.awt.*;
--
--import java.beans.AppletInitializer;
-+import java.awt.GraphicsEnvironment;
-+import java.awt.Image;
-
- import java.beans.beancontext.BeanContext;
-
--import java.io.*;
--
--import java.lang.reflect.Constructor;
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.ObjectInputStream;
-+import java.io.ObjectStreamClass;
-+import java.io.StreamCorruptedException;
-
- import java.net.URL;
--import java.lang.reflect.Array;
-+
-+import java.security.AccessController;
-+import java.security.PrivilegedAction;
-+
-+import java.util.Enumeration;
-+import java.util.Hashtable;
-+import java.util.Iterator;
-+import java.util.Vector;
-+
-+import sun.awt.AppContext;
-
- /**
- * This class provides some general purpose beans control methods.
- */
-
- public class Beans {
-+ private static final Object DESIGN_TIME = new Object();
-+ private static final Object GUI_AVAILABLE = new Object();
-
- /**
- * <p>
-@@ -59,12 +74,12 @@
- * @param beanName the name of the bean within the class-loader.
- * For example "sun.beanbox.foobah"
- *
-- * @exception java.lang.ClassNotFoundException if the class of a serialized
-+ * @exception ClassNotFoundException if the class of a serialized
- * object could not be found.
-- * @exception java.io.IOException if an I/O error occurs.
-+ * @exception IOException if an I/O error occurs.
- */
-
-- public static Object instantiate(ClassLoader cls, String beanName) throws java.io.IOException, ClassNotFoundException {
-+ public static Object instantiate(ClassLoader cls, String beanName) throws IOException, ClassNotFoundException {
- return Beans.instantiate(cls, beanName, null, null);
- }
-
-@@ -80,12 +95,12 @@
- * For example "sun.beanbox.foobah"
- * @param beanContext The BeanContext in which to nest the new bean
- *
-- * @exception java.lang.ClassNotFoundException if the class of a serialized
-+ * @exception ClassNotFoundException if the class of a serialized
- * object could not be found.
-- * @exception java.io.IOException if an I/O error occurs.
-+ * @exception IOException if an I/O error occurs.
- */
-
-- public static Object instantiate(ClassLoader cls, String beanName, BeanContext beanContext) throws java.io.IOException, ClassNotFoundException {
-+ public static Object instantiate(ClassLoader cls, String beanName, BeanContext beanContext) throws IOException, ClassNotFoundException {
- return Beans.instantiate(cls, beanName, beanContext, null);
- }
-
-@@ -135,19 +150,19 @@
- * @param beanContext The BeanContext in which to nest the new bean
- * @param initializer The AppletInitializer for the new bean
- *
-- * @exception java.lang.ClassNotFoundException if the class of a serialized
-+ * @exception ClassNotFoundException if the class of a serialized
- * object could not be found.
-- * @exception java.io.IOException if an I/O error occurs.
-+ * @exception IOException if an I/O error occurs.
- */
-
- public static Object instantiate(ClassLoader cls, String beanName, BeanContext beanContext, AppletInitializer initializer)
-- throws java.io.IOException, ClassNotFoundException {
-+ throws IOException, ClassNotFoundException {
-
-- java.io.InputStream ins;
-- java.io.ObjectInputStream oins = null;
-+ InputStream ins;
-+ ObjectInputStream oins = null;
- Object result = null;
- boolean serialized = false;
-- java.io.IOException serex = null;
-+ IOException serex = null;
-
- // If the given classloader is null, we check if an
- // system classloader is available and (if so)
-@@ -166,8 +181,8 @@
- // Try to find a serialized object with this name
- final String serName = beanName.replace('.','/').concat(".ser");
- final ClassLoader loader = cls;
-- ins = (InputStream)java.security.AccessController.doPrivileged
-- (new java.security.PrivilegedAction() {
-+ ins = (InputStream)AccessController.doPrivileged
-+ (new PrivilegedAction() {
- public Object run() {
- if (loader == null)
- return ClassLoader.getSystemResourceAsStream(serName);
-@@ -185,7 +200,7 @@
- result = oins.readObject();
- serialized = true;
- oins.close();
-- } catch (java.io.IOException ex) {
-+ } catch (IOException ex) {
- ins.close();
- // Drop through and try opening the class. But remember
- // the exception in case we can't find the class either.
-@@ -264,8 +279,8 @@
-
- final ClassLoader cloader = cls;
- objectUrl = (URL)
-- java.security.AccessController.doPrivileged
-- (new java.security.PrivilegedAction() {
-+ AccessController.doPrivileged
-+ (new PrivilegedAction() {
- public Object run() {
- if (cloader == null)
- return ClassLoader.getSystemResource
-@@ -377,10 +392,11 @@
- * @return True if we are running in an application construction
- * environment.
- *
-- * @see java.beans.DesignMode
-+ * @see DesignMode
- */
- public static boolean isDesignTime() {
-- return designTime;
-+ Object value = AppContext.getAppContext().get(DESIGN_TIME);
-+ return (value instanceof Boolean) && (Boolean) value;
- }
-
- /**
-@@ -393,11 +409,12 @@
- * false in a server environment or if an application is
- * running as part of a batch job.
- *
-- * @see java.beans.Visibility
-+ * @see Visibility
- *
- */
- public static boolean isGuiAvailable() {
-- return guiAvailable;
-+ Object value = AppContext.getAppContext().get(GUI_AVAILABLE);
-+ return (value instanceof Boolean) ? (Boolean) value : !GraphicsEnvironment.isHeadless();
- }
-
- /**
-@@ -423,7 +440,7 @@
- if (sm != null) {
- sm.checkPropertiesAccess();
- }
-- designTime = isDesignTime;
-+ AppContext.getAppContext().put(DESIGN_TIME, Boolean.valueOf(isDesignTime));
- }
-
- /**
-@@ -449,14 +466,7 @@
- if (sm != null) {
- sm.checkPropertiesAccess();
- }
-- guiAvailable = isGuiAvailable;
-- }
--
--
-- private static boolean designTime;
-- private static boolean guiAvailable;
-- static {
-- guiAvailable = !GraphicsEnvironment.isHeadless();
-+ AppContext.getAppContext().put(GUI_AVAILABLE, Boolean.valueOf(isGuiAvailable));
- }
- }
-
-@@ -501,7 +511,7 @@
-
- class BeansAppletContext implements AppletContext {
- Applet target;
-- java.util.Hashtable imageCache = new java.util.Hashtable();
-+ Hashtable imageCache = new Hashtable();
-
- BeansAppletContext(Applet target) {
- this.target = target;
-@@ -546,8 +556,8 @@
- return null;
- }
-
-- public java.util.Enumeration getApplets() {
-- java.util.Vector applets = new java.util.Vector();
-+ public Enumeration getApplets() {
-+ Vector applets = new Vector();
- applets.addElement(target);
- return applets.elements();
- }
-@@ -573,7 +583,7 @@
- return null;
- }
-
-- public java.util.Iterator getStreamKeys(){
-+ public Iterator getStreamKeys(){
- // We do nothing.
- return null;
- }
-diff --git a/test/java/beans/Beans/6669869/TestDesignTime.java b/test/java/beans/Beans/6669869/TestDesignTime.java
-new file mode 100644
---- /dev/null
-+++ jdk/test/java/beans/Beans/6669869/TestDesignTime.java
-@@ -0,0 +1,52 @@
-+/*
-+ * 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 6669869
-+ * @summary Tests DesignTime property in different application contexts
-+ * @author Sergey Malenkov
-+ */
-+
-+import java.beans.Beans;
-+import sun.awt.SunToolkit;
-+
-+public class TestDesignTime implements Runnable {
-+ public static void main(String[] args) throws InterruptedException {
-+ if (Beans.isDesignTime()) {
-+ throw new Error("unexpected DesignTime property");
-+ }
-+ Beans.setDesignTime(!Beans.isDesignTime());
-+ ThreadGroup group = new ThreadGroup("$$$");
-+ Thread thread = new Thread(group, new TestDesignTime());
-+ thread.start();
-+ thread.join();
-+ }
-+
-+ public void run() {
-+ SunToolkit.createNewAppContext();
-+ if (Beans.isDesignTime()) {
-+ throw new Error("shared DesignTime property");
-+ }
-+ }
-+}
-diff --git a/test/java/beans/Beans/6669869/TestGuiAvailable.java b/test/java/beans/Beans/6669869/TestGuiAvailable.java
-new file mode 100644
---- /dev/null
-+++ jdk/test/java/beans/Beans/6669869/TestGuiAvailable.java
-@@ -0,0 +1,53 @@
-+/*
-+ * 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 6669869
-+ * @summary Tests GuiAvailable property in different application contexts
-+ * @author Sergey Malenkov
-+ */
-+
-+import java.awt.GraphicsEnvironment;
-+import java.beans.Beans;
-+import sun.awt.SunToolkit;
-+
-+public class TestGuiAvailable implements Runnable {
-+ public static void main(String[] args) throws InterruptedException {
-+ if (Beans.isGuiAvailable() == GraphicsEnvironment.isHeadless()) {
-+ throw new Error("unexpected GuiAvailable property");
-+ }
-+ Beans.setGuiAvailable(!Beans.isGuiAvailable());
-+ ThreadGroup group = new ThreadGroup("$$$");
-+ Thread thread = new Thread(group, new TestGuiAvailable());
-+ thread.start();
-+ thread.join();
-+ }
-+
-+ public void run() {
-+ SunToolkit.createNewAppContext();
-+ if (Beans.isGuiAvailable() == GraphicsEnvironment.isHeadless()) {
-+ throw new Error("shared GuiAvailable property");
-+ }
-+ }
-+}
diff --git a/java/openjdk6/files/icedtea/openjdk/6786028-wcag_bold_tags.patch b/java/openjdk6/files/icedtea/openjdk/6786028-wcag_bold_tags.patch
deleted file mode 100644
index 06392d278b3e..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/6786028-wcag_bold_tags.patch
+++ /dev/null
@@ -1,2914 +0,0 @@
-# HG changeset patch
-# User bpatel
-# Date 1231460819 28800
-# Node ID a50f3556d6954decf0897aa984c8ba43def77b9e
-# Parent 4ab5d66aaf2b9e5c09ab54748f6e2615b7818b12
-6786028: Javadoc HTML WCAG 2.0 accessibility issues in standard doclet - Bold tags should be strong
-Reviewed-by: jjg
-
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractExecutableMemberWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractExecutableMemberWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractExecutableMemberWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractExecutableMemberWriter.java
-@@ -71,7 +71,7 @@
- member.position().line() != classdoc.position().line()) {
- writer.printSrcLink(member, member.name());
- } else {
-- bold(member.name());
-+ strong(member.name());
- }
- writeParameters(member);
- writeExceptions(member);
-@@ -87,10 +87,10 @@
- protected void writeSummaryLink(int context, ClassDoc cd, ProgramElementDoc member) {
- ExecutableMemberDoc emd = (ExecutableMemberDoc)member;
- String name = emd.name();
-- writer.bold();
-+ writer.strong();
- writer.printDocLink(context, cd, (MemberDoc) emd,
- name, false);
-- writer.boldEnd();
-+ writer.strongEnd();
- writer.displayLength = name.length();
- writeParameters(emd, false);
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractIndexWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractIndexWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractIndexWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractIndexWriter.java
-@@ -78,12 +78,12 @@
- }
-
- /**
-- * Print the text "Index" in bold format in the navigation bar.
-+ * Print the text "Index" in strong format in the navigation bar.
- */
- protected void navLinkIndex() {
- navCellRevStart();
- fontStyle("NavBarFont1Rev");
-- boldText("doclet.Index");
-+ strongText("doclet.Index");
- fontEnd();
- navCellEnd();
- }
-@@ -98,7 +98,7 @@
- protected void generateContents(Character unicode, List memberlist) {
- anchor("_" + unicode + "_");
- h2();
-- bold(unicode.toString());
-+ strong(unicode.toString());
- h2End();
- dl();
- for (int i = 0; i < memberlist.size(); i++) {
-@@ -195,14 +195,14 @@
- protected void printComment(ProgramElementDoc element) {
- Tag[] tags;
- if (Util.isDeprecated(element)) {
-- boldText("doclet.Deprecated"); space();
-+ strongText("doclet.Deprecated"); space();
- if ((tags = element.tags("deprecated")).length > 0)
- printInlineDeprecatedComment(element, tags[0]);
- } else {
- ClassDoc cont = element.containingClass();
- while (cont != null) {
- if (Util.isDeprecated(cont)) {
-- boldText("doclet.Deprecated"); space();
-+ strongText("doclet.Deprecated"); space();
- break;
- }
- cont = cont.containingClass();
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java
-@@ -98,8 +98,8 @@
- writer.displayLength++;
- }
-
-- protected void bold(String str) {
-- writer.bold(str);
-+ protected void strong(String str) {
-+ writer.strong(str);
- writer.displayLength += str.length();
- }
-
-@@ -321,7 +321,7 @@
- if (deprmembers.size() > 0) {
- writer.tableIndexSummary();
- writer.tableHeaderStart("#CCCCFF");
-- writer.boldText(headingKey);
-+ writer.strongText(headingKey);
- writer.tableHeaderEnd();
- for (int i = 0; i < deprmembers.size(); i++) {
- ProgramElementDoc member =(ProgramElementDoc)deprmembers.get(i);
-@@ -363,7 +363,7 @@
- if (cd != null && !(pgmdoc instanceof ConstructorDoc)
- && !(pgmdoc instanceof ClassDoc)) {
- // Add class context
-- writer.bold(cd.name() + ".");
-+ writer.strong(cd.name() + ".");
- }
- writeSummaryLink(
- pgmdoc instanceof ClassDoc ?
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractPackageIndexWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractPackageIndexWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractPackageIndexWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractPackageIndexWriter.java
-@@ -137,13 +137,13 @@
- }
-
- /**
-- * Highlight "Overview" in the bold format, in the navigation bar as this
-+ * Highlight "Overview" in the strong format, in the navigation bar as this
- * is the overview page.
- */
- protected void navLinkContents() {
- navCellRevStart();
- fontStyle("NavBarFont1Rev");
-- boldText("doclet.Overview");
-+ strongText("doclet.Overview");
- fontEnd();
- navCellEnd();
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractTreeWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractTreeWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractTreeWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractTreeWriter.java
-@@ -173,7 +173,7 @@
- */
- protected void printPartialInfo(ClassDoc cd) {
- li("circle");
-- printPreQualifiedBoldClassLink(LinkInfoImpl.CONTEXT_TREE, cd);
-+ printPreQualifiedStrongClassLink(LinkInfoImpl.CONTEXT_TREE, cd);
- }
-
- /**
-@@ -193,7 +193,7 @@
- protected void navLinkTree() {
- navCellRevStart();
- fontStyle("NavBarFont1Rev");
-- boldText("doclet.Tree");
-+ strongText("doclet.Tree");
- fontEnd();
- navCellEnd();
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AllClassesFrameWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/AllClassesFrameWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AllClassesFrameWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AllClassesFrameWriter.java
-@@ -160,7 +160,7 @@
- */
- protected void printAllClassesTableHeader() {
- fontSizeStyle("+1", "FrameHeadingFont");
-- boldText("doclet.All_Classes");
-+ strongText("doclet.All_Classes");
- fontEnd();
- br();
- table();
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java
-@@ -65,7 +65,7 @@
- public void writeDefaultValueInfo(MemberDoc member) {
- writer.dl();
- writer.dt();
-- writer.bold(ConfigurationImpl.getInstance().
-+ writer.strong(ConfigurationImpl.getInstance().
- getText("doclet.Default"));
- writer.dd();
- writer.print(((AnnotationTypeElementDoc) member).defaultValue());
-@@ -84,7 +84,7 @@
- * {@inheritDoc}
- */
- public void printSummaryLabel(ClassDoc cd) {
-- writer.boldText("doclet.Annotation_Type_Optional_Member_Summary");
-+ writer.strongText("doclet.Annotation_Type_Optional_Member_Summary");
- }
-
- /**
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java
-@@ -131,7 +131,7 @@
- if (configuration().linksource) {
- writer.printSrcLink(member, member.name());
- } else {
-- bold(member.name());
-+ strong(member.name());
- }
- writer.preEnd();
- writer.dl();
-@@ -183,7 +183,7 @@
- * {@inheritDoc}
- */
- public void printSummaryLabel(ClassDoc cd) {
-- writer.boldText("doclet.Annotation_Type_Required_Member_Summary");
-+ writer.strongText("doclet.Annotation_Type_Required_Member_Summary");
- }
-
- /**
-@@ -210,9 +210,9 @@
- * {@inheritDoc}
- */
- protected void writeSummaryLink(int context, ClassDoc cd, ProgramElementDoc member) {
-- writer.bold();
-+ writer.strong();
- writer.printDocLink(context, (MemberDoc) member, member.name(), false);
-- writer.boldEnd();
-+ writer.strongEnd();
- }
-
- /**
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java
-@@ -84,7 +84,7 @@
- protected void navLinkClass() {
- navCellRevStart();
- fontStyle("NavBarFont1Rev");
-- boldText("doclet.Class");
-+ strongText("doclet.Class");
- fontEnd();
- navCellEnd();
- }
-@@ -176,7 +176,7 @@
- if (configuration().linksource) {
- printSrcLink(annotationType, name);
- } else {
-- bold(name);
-+ strong(name);
- }
- dlEnd();
- preEnd();
-@@ -220,7 +220,7 @@
- hr();
- Tag[] deprs = annotationType.tags("deprecated");
- if (Util.isDeprecated(annotationType)) {
-- boldText("doclet.Deprecated");
-+ strongText("doclet.Deprecated");
- if (deprs.length > 0) {
- Tag[] commentTags = deprs[0].inlineTags();
- if (commentTags.length > 0) {
-@@ -330,9 +330,9 @@
- dl();
- dt();
- if (annotationType.isInterface()) {
-- boldText("doclet.Enclosing_Interface");
-+ strongText("doclet.Enclosing_Interface");
- } else {
-- boldText("doclet.Enclosing_Class");
-+ strongText("doclet.Enclosing_Class");
- }
- dd();
- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS, outerClass,
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java
-@@ -394,7 +394,7 @@
- hr();
- center();
- h2();
-- boldText("doclet.ClassUse_Title", cltype, clname);
-+ strongText("doclet.ClassUse_Title", cltype, clname);
- h2End();
- centerEnd();
- }
-@@ -436,7 +436,7 @@
- protected void navLinkClassUse() {
- navCellRevStart();
- fontStyle("NavBarFont1Rev");
-- boldText("doclet.navClassUse");
-+ strongText("doclet.navClassUse");
- fontEnd();
- navCellEnd();
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java
-@@ -91,7 +91,7 @@
- protected void navLinkClass() {
- navCellRevStart();
- fontStyle("NavBarFont1Rev");
-- boldText("doclet.Class");
-+ strongText("doclet.Class");
- fontEnd();
- navCellEnd();
- }
-@@ -185,7 +185,7 @@
- if (configuration().linksource) {
- printSrcLink(classDoc, name);
- } else {
-- bold(name);
-+ strong(name);
- }
- if (!isInterface) {
- Type superclass = Util.getFirstVisibleSuperClass(classDoc,
-@@ -258,7 +258,7 @@
- hr();
- Tag[] deprs = classDoc.tags("deprecated");
- if (Util.isDeprecated(classDoc)) {
-- boldText("doclet.Deprecated");
-+ strongText("doclet.Deprecated");
- if (deprs.length > 0) {
- Tag[] commentTags = deprs[0].inlineTags();
- if (commentTags.length > 0) {
-@@ -307,9 +307,9 @@
- classDoc, false));
- if (configuration.shouldExcludeQualifier(
- classDoc.containingPackage().name())) {
-- bold(type.asClassDoc().name() + typeParameters);
-+ strong(type.asClassDoc().name() + typeParameters);
- } else {
-- bold(type.asClassDoc().qualifiedName() + typeParameters);
-+ strong(type.asClassDoc().qualifiedName() + typeParameters);
- }
- } else {
- print(getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS_TREE_PARENT,
-@@ -359,7 +359,7 @@
- if (subclasses.size() > 0) {
- dl();
- dt();
-- boldText("doclet.Subclasses");
-+ strongText("doclet.Subclasses");
- writeClassLinks(LinkInfoImpl.CONTEXT_SUBCLASSES,
- subclasses);
- }
-@@ -375,7 +375,7 @@
- if (subInterfaces.size() > 0) {
- dl();
- dt();
-- boldText("doclet.Subinterfaces");
-+ strongText("doclet.Subinterfaces");
- writeClassLinks(LinkInfoImpl.CONTEXT_SUBINTERFACES,
- subInterfaces);
- }
-@@ -397,7 +397,7 @@
- if (implcl.size() > 0) {
- dl();
- dt();
-- boldText("doclet.Implementing_Classes");
-+ strongText("doclet.Implementing_Classes");
- writeClassLinks(LinkInfoImpl.CONTEXT_IMPLEMENTED_CLASSES,
- implcl);
- }
-@@ -413,7 +413,7 @@
- if (classDoc.isClass() && interfaceArray.size() > 0) {
- dl();
- dt();
-- boldText("doclet.All_Implemented_Interfaces");
-+ strongText("doclet.All_Implemented_Interfaces");
- writeClassLinks(LinkInfoImpl.CONTEXT_IMPLEMENTED_INTERFACES,
- interfaceArray);
- }
-@@ -429,7 +429,7 @@
- if (classDoc.isInterface() && interfaceArray.size() > 0) {
- dl();
- dt();
-- boldText("doclet.All_Superinterfaces");
-+ strongText("doclet.All_Superinterfaces");
- writeClassLinks(LinkInfoImpl.CONTEXT_SUPER_INTERFACES,
- interfaceArray);
- }
-@@ -570,9 +570,9 @@
- dl();
- dt();
- if (outerClass.isInterface()) {
-- boldText("doclet.Enclosing_Interface");
-+ strongText("doclet.Enclosing_Interface");
- } else {
-- boldText("doclet.Enclosing_Class");
-+ strongText("doclet.Enclosing_Class");
- }
- dd();
- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS, outerClass,
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java
-@@ -92,7 +92,7 @@
- * {@inheritDoc}
- */
- public void writeContentsHeader() {
-- bold(configuration.getText("doclet.Contents"));
-+ strong(configuration.getText("doclet.Contents"));
- ul();
- }
-
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java
-@@ -144,7 +144,7 @@
- if (configuration().linksource) {
- writer.printSrcLink(constructor, constructor.name());
- } else {
-- bold(constructor.name());
-+ strong(constructor.name());
- }
- writeParameters(constructor);
- writeExceptions(constructor);
-@@ -220,7 +220,7 @@
- }
-
- public void printSummaryLabel(ClassDoc cd) {
-- writer.boldText("doclet.Constructor_Summary");
-+ writer.strongText("doclet.Constructor_Summary");
- }
-
- public void printSummaryAnchor(ClassDoc cd) {
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/DeprecatedListWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/DeprecatedListWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/DeprecatedListWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/DeprecatedListWriter.java
-@@ -111,7 +111,7 @@
- throws IOException {
- writeHeader();
-
-- bold(configuration.getText("doclet.Contents"));
-+ strong(configuration.getText("doclet.Contents"));
- ul();
- for (int i = 0; i < DeprecatedAPIListBuilder.NUM_TYPES; i++) {
- writeIndexLink(deprapi, i);
-@@ -156,7 +156,7 @@
- hr();
- center();
- h2();
-- boldText("doclet.Deprecated_API");
-+ strongText("doclet.Deprecated_API");
- h2End();
- centerEnd();
-
-@@ -180,7 +180,7 @@
- protected void navLinkDeprecated() {
- navCellRevStart();
- fontStyle("NavBarFont1Rev");
-- boldText("doclet.navDeprecated");
-+ strongText("doclet.navDeprecated");
- fontEnd();
- navCellEnd();
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java
-@@ -143,7 +143,7 @@
- if (configuration().linksource) {
- writer.printSrcLink(enumConstant, enumConstant.name());
- } else {
-- bold(enumConstant.name());
-+ strong(enumConstant.name());
- }
- writer.preEnd();
- writer.dl();
-@@ -201,7 +201,7 @@
- }
-
- public void printSummaryLabel(ClassDoc cd) {
-- writer.boldText("doclet.Enum_Constant_Summary");
-+ writer.strongText("doclet.Enum_Constant_Summary");
- }
-
- public void printSummaryAnchor(ClassDoc cd) {
-@@ -216,9 +216,9 @@
- }
-
- protected void writeSummaryLink(int context, ClassDoc cd, ProgramElementDoc member) {
-- writer.bold();
-+ writer.strong();
- writer.printDocLink(context, (MemberDoc) member, member.name(), false);
-- writer.boldEnd();
-+ writer.strongEnd();
- }
-
- protected void writeInheritedSummaryLink(ClassDoc cd,
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java
-@@ -153,7 +153,7 @@
- if (configuration().linksource) {
- writer.printSrcLink(field, field.name());
- } else {
-- bold(field.name());
-+ strong(field.name());
- }
- writer.preEnd();
- writer.dl();
-@@ -190,7 +190,7 @@
- holder.typeName() : holder.qualifiedTypeName(),
- false));
- writer.dd();
-- writer.bold(configuration().getText(holder.isClass()?
-+ writer.strong(configuration().getText(holder.isClass()?
- "doclet.Description_From_Class" :
- "doclet.Description_From_Interface", classlink));
- writer.ddEnd();
-@@ -237,7 +237,7 @@
- }
-
- public void printSummaryLabel(ClassDoc cd) {
-- writer.boldText("doclet.Field_Summary");
-+ writer.strongText("doclet.Field_Summary");
- }
-
- public void printSummaryAnchor(ClassDoc cd) {
-@@ -251,18 +251,18 @@
- public void printInheritedSummaryLabel(ClassDoc cd) {
- String classlink = writer.getPreQualifiedClassLink(
- LinkInfoImpl.CONTEXT_MEMBER, cd, false);
-- writer.bold();
-+ writer.strong();
- String key = cd.isClass()?
- "doclet.Fields_Inherited_From_Class" :
- "doclet.Fields_Inherited_From_Interface";
- writer.printText(key, classlink);
-- writer.boldEnd();
-+ writer.strongEnd();
- }
-
- protected void writeSummaryLink(int context, ClassDoc cd, ProgramElementDoc member) {
-- writer.bold();
-+ writer.strong();
- writer.printDocLink(context, cd , (MemberDoc) member, member.name(), false);
-- writer.boldEnd();
-+ writer.strongEnd();
- }
-
- protected void writeInheritedSummaryLink(ClassDoc cd,
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/HelpWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/HelpWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/HelpWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/HelpWriter.java
-@@ -223,7 +223,7 @@
- protected void navLinkHelp() {
- navCellRevStart();
- fontStyle("NavBarFont1Rev");
-- boldText("doclet.Help");
-+ strongText("doclet.Help");
- fontEnd();
- navCellEnd();
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java
-@@ -183,21 +183,21 @@
- * @param where Position in the file
- * @param target Name of the target frame.
- * @param label Tag for the link.
-- * @param bold Whether the label should be bold or not?
-+ * @param strong Whether the label should be strong or not?
- */
- public void printNoFramesTargetHyperLink(String link, String where,
- String target, String label,
-- boolean bold) {
-+ boolean strong) {
- script();
- println(" <!--");
- println(" if(window==top) {");
- println(" document.writeln('"
-- + getHyperLink(link, where, label, bold, "", "", target) + "');");
-+ + getHyperLink(link, where, label, strong, "", "", target) + "');");
- println(" }");
- println(" //-->");
- scriptEnd();
- noScript();
-- println(" " + getHyperLink(link, where, label, bold, "", "", target));
-+ println(" " + getHyperLink(link, where, label, strong, "", "", target));
- noScriptEnd();
- println(DocletConstants.NL);
- }
-@@ -958,10 +958,10 @@
- *
- * @param pkg the package to link to.
- * @param label the label for the link.
-- * @param isBold true if the label should be bold.
-+ * @param isStrong true if the label should be strong.
- */
-- public void printPackageLink(PackageDoc pkg, String label, boolean isBold) {
-- print(getPackageLink(pkg, label, isBold));
-+ public void printPackageLink(PackageDoc pkg, String label, boolean isStrong) {
-+ print(getPackageLink(pkg, label, isStrong));
- }
-
- /**
-@@ -969,12 +969,12 @@
- *
- * @param pkg the package to link to.
- * @param label the label for the link.
-- * @param isBold true if the label should be bold.
-+ * @param isStrong true if the label should be strong.
- * @param style the font of the package link label.
- */
-- public void printPackageLink(PackageDoc pkg, String label, boolean isBold,
-+ public void printPackageLink(PackageDoc pkg, String label, boolean isStrong,
- String style) {
-- print(getPackageLink(pkg, label, isBold, style));
-+ print(getPackageLink(pkg, label, isStrong, style));
- }
-
- /**
-@@ -982,12 +982,12 @@
- *
- * @param pkg the package to link to.
- * @param label the label for the link.
-- * @param isBold true if the label should be bold.
-+ * @param isStrong true if the label should be strong.
- * @return the link to the given package.
- */
- public String getPackageLink(PackageDoc pkg, String label,
-- boolean isBold) {
-- return getPackageLink(pkg, label, isBold, "");
-+ boolean isStrong) {
-+ return getPackageLink(pkg, label, isStrong, "");
- }
-
- /**
-@@ -995,11 +995,11 @@
- *
- * @param pkg the package to link to.
- * @param label the label for the link.
-- * @param isBold true if the label should be bold.
-+ * @param isStrong true if the label should be strong.
- * @param style the font of the package link label.
- * @return the link to the given package.
- */
-- public String getPackageLink(PackageDoc pkg, String label, boolean isBold,
-+ public String getPackageLink(PackageDoc pkg, String label, boolean isStrong,
- String style) {
- boolean included = pkg != null && pkg.isIncluded();
- if (! included) {
-@@ -1013,11 +1013,11 @@
- }
- if (included || pkg == null) {
- return getHyperLink(pathString(pkg, "package-summary.html"),
-- "", label, isBold, style);
-+ "", label, isStrong, style);
- } else {
- String crossPkgLink = getCrossPackageLink(Util.getPackageName(pkg));
- if (crossPkgLink != null) {
-- return getHyperLink(crossPkgLink, "", label, isBold, style);
-+ return getHyperLink(crossPkgLink, "", label, isStrong, style);
- } else {
- return label;
- }
-@@ -1087,12 +1087,12 @@
- * @param refMemName the name of the member being referenced. This should
- * be null or empty string if no member is being referenced.
- * @param label the label for the external link.
-- * @param bold true if the link should be bold.
-+ * @param strong true if the link should be strong.
- * @param style the style of the link.
- * @param code true if the label should be code font.
- */
- public String getCrossClassLink(String qualifiedClassName, String refMemName,
-- String label, boolean bold, String style,
-+ String label, boolean strong, String style,
- boolean code) {
- String className = "",
- packageName = qualifiedClassName == null ? "" : qualifiedClassName;
-@@ -1113,7 +1113,7 @@
- className + ".html?is-external=true"),
- refMemName == null ? "" : refMemName,
- label == null || label.length() == 0 ? defaultLabel : label,
-- bold, style,
-+ strong, style,
- configuration.getText("doclet.Href_Class_Or_Interface_Title", packageName),
- "");
- }
-@@ -1152,26 +1152,26 @@
- * link label.
- *
- * @param cd the class to link to.
-- * @param isBold true if the link should be bold.
-+ * @param isStrong true if the link should be strong.
- * @return the link with the package portion of the label in plain text.
- */
- public String getPreQualifiedClassLink(int context,
-- ClassDoc cd, boolean isBold) {
-+ ClassDoc cd, boolean isStrong) {
- String classlink = "";
- PackageDoc pd = cd.containingPackage();
- if(pd != null && ! configuration.shouldExcludeQualifier(pd.name())) {
- classlink = getPkgName(cd);
- }
-- classlink += getLink(new LinkInfoImpl(context, cd, cd.name(), isBold));
-+ classlink += getLink(new LinkInfoImpl(context, cd, cd.name(), isStrong));
- return classlink;
- }
-
-
- /**
-- * Print Class link, with only class name as the bold link and prefixing
-+ * Print Class link, with only class name as the strong link and prefixing
- * plain package name.
- */
-- public void printPreQualifiedBoldClassLink(int context, ClassDoc cd) {
-+ public void printPreQualifiedStrongClassLink(int context, ClassDoc cd) {
- print(getPreQualifiedClassLink(context, cd, true));
- }
-
-@@ -1187,16 +1187,16 @@
- print(configuration.getText(key, a1, a2));
- }
-
-- public void boldText(String key) {
-- bold(configuration.getText(key));
-+ public void strongText(String key) {
-+ strong(configuration.getText(key));
- }
-
-- public void boldText(String key, String a1) {
-- bold(configuration.getText(key, a1));
-+ public void strongText(String key, String a1) {
-+ strong(configuration.getText(key, a1));
- }
-
-- public void boldText(String key, String a1, String a2) {
-- bold(configuration.getText(key, a1, a2));
-+ public void strongText(String key, String a1, String a2) {
-+ strong(configuration.getText(key, a1, a2));
- }
-
- /**
-@@ -1205,11 +1205,11 @@
- * @param context the id of the context where the link will be printed.
- * @param doc the member being linked to.
- * @param label the label for the link.
-- * @param bold true if the link should be bold.
-+ * @param strong true if the link should be strong.
- */
- public void printDocLink(int context, MemberDoc doc, String label,
-- boolean bold) {
-- print(getDocLink(context, doc, label, bold));
-+ boolean strong) {
-+ print(getDocLink(context, doc, label, strong));
- }
-
- /**
-@@ -1221,11 +1221,11 @@
- * inheriting comments.
- * @param doc the member being linked to.
- * @param label the label for the link.
-- * @param bold true if the link should be bold.
-+ * @param strong true if the link should be strong.
- */
- public void printDocLink(int context, ClassDoc classDoc, MemberDoc doc,
-- String label, boolean bold) {
-- print(getDocLink(context, classDoc, doc, label, bold));
-+ String label, boolean strong) {
-+ print(getDocLink(context, classDoc, doc, label, strong));
- }
-
- /**
-@@ -1234,12 +1234,12 @@
- * @param context the id of the context where the link will be printed.
- * @param doc the member being linked to.
- * @param label the label for the link.
-- * @param bold true if the link should be bold.
-+ * @param strong true if the link should be strong.
- * @return the link for the given member.
- */
- public String getDocLink(int context, MemberDoc doc, String label,
-- boolean bold) {
-- return getDocLink(context, doc.containingClass(), doc, label, bold);
-+ boolean strong) {
-+ return getDocLink(context, doc.containingClass(), doc, label, strong);
- }
-
- /**
-@@ -1251,21 +1251,21 @@
- * inheriting comments.
- * @param doc the member being linked to.
- * @param label the label for the link.
-- * @param bold true if the link should be bold.
-+ * @param strong true if the link should be strong.
- * @return the link for the given member.
- */
- public String getDocLink(int context, ClassDoc classDoc, MemberDoc doc,
-- String label, boolean bold) {
-+ String label, boolean strong) {
- if (! (doc.isIncluded() ||
- Util.isLinkable(classDoc, configuration()))) {
- return label;
- } else if (doc instanceof ExecutableMemberDoc) {
- ExecutableMemberDoc emd = (ExecutableMemberDoc)doc;
- return getLink(new LinkInfoImpl(context, classDoc,
-- getAnchor(emd), label, bold));
-+ getAnchor(emd), label, strong));
- } else if (doc instanceof MemberDoc) {
- return getLink(new LinkInfoImpl(context, classDoc,
-- doc.name(), label, bold));
-+ doc.name(), label, strong));
- } else {
- return label;
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java
-@@ -100,7 +100,7 @@
- fieldType));
- }
- print(fieldDimensions + ' ');
-- bold(fieldName);
-+ strong(fieldName);
- writer.preEnd();
- writer.dl();
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/LinkFactoryImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/LinkFactoryImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/LinkFactoryImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/LinkFactoryImpl.java
-@@ -81,7 +81,7 @@
- !(linkInfo.classDoc.name() + ".html").equals(m_writer.filename)) {
- linkOutput.append(m_writer.getHyperLink(filename,
- classLinkInfo.where, label.toString(),
-- classLinkInfo.isBold, classLinkInfo.styleName,
-+ classLinkInfo.isStrong, classLinkInfo.styleName,
- title, classLinkInfo.target));
- if (noLabel && !classLinkInfo.excludeTypeParameterLinks) {
- linkOutput.append(getTypeParameterLinks(linkInfo).toString());
-@@ -92,7 +92,7 @@
- } else {
- String crossLink = m_writer.getCrossClassLink(
- classDoc.qualifiedName(), classLinkInfo.where,
-- label.toString(), classLinkInfo.isBold, classLinkInfo.styleName,
-+ label.toString(), classLinkInfo.isStrong, classLinkInfo.styleName,
- true);
- if (crossLink != null) {
- linkOutput.append(crossLink);
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/LinkInfoImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/LinkInfoImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/LinkInfoImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/LinkInfoImpl.java
-@@ -235,15 +235,15 @@
- * @param classDoc the class to link to.
- * @param where the value of the marker #.
- * @param label the label for the link.
-- * @param isBold true if the link should be bold.
-+ * @param isStrong true if the link should be strong.
- * @param styleName String style of text defined in style sheet.
- */
- public LinkInfoImpl (int context, ClassDoc classDoc, String where, String label,
-- boolean isBold, String styleName){
-+ boolean isStrong, String styleName){
- this.classDoc = classDoc;
- this.where = where;
- this.label = label;
-- this.isBold = isBold;
-+ this.isStrong = isStrong;
- this.styleName = styleName;
- setContext(context);
- }
-@@ -255,14 +255,14 @@
- * @param classDoc the class to link to.
- * @param where the value of the marker #.
- * @param label the label for the link.
-- * @param isBold true if the link should be bold.
-+ * @param isStrong true if the link should be strong.
- */
- public LinkInfoImpl (int context, ClassDoc classDoc, String where, String label,
-- boolean isBold){
-+ boolean isStrong){
- this.classDoc = classDoc;
- this.where = where;
- this.label = label;
-- this.isBold = isBold;
-+ this.isStrong = isStrong;
- setContext(context);
- }
-
-@@ -283,12 +283,12 @@
- *
- * @param context the context of the link.
- * @param executableMemberDoc the member to link to.
-- * @param isBold true if the link should be bold.
-+ * @param isStrong true if the link should be strong.
- */
- public LinkInfoImpl (int context, ExecutableMemberDoc executableMemberDoc,
-- boolean isBold){
-+ boolean isStrong){
- this.executableMemberDoc = executableMemberDoc;
-- this.isBold = isBold;
-+ this.isStrong = isStrong;
- setContext(context);
- }
-
-@@ -297,11 +297,11 @@
- *
- * @param context the context of the link.
- * @param classDoc the class to link to.
-- * @param isBold true if the link should be bold.
-+ * @param isStrong true if the link should be strong.
- */
-- public LinkInfoImpl (int context, ClassDoc classDoc, boolean isBold){
-+ public LinkInfoImpl (int context, ClassDoc classDoc, boolean isStrong){
- this.classDoc = classDoc;
-- this.isBold = isBold;
-+ this.isStrong = isStrong;
- setContext(context);
- }
-
-@@ -335,13 +335,13 @@
- * @param context the context of the link.
- * @param type the class to link to.
- * @param label the label for the link.
-- * @param isBold true if the link should be bold.
-+ * @param isStrong true if the link should be strong.
- */
- public LinkInfoImpl (int context, Type type, String label,
-- boolean isBold){
-+ boolean isStrong){
- this.type = type;
- this.label = label;
-- this.isBold = isBold;
-+ this.isStrong = isStrong;
- setContext(context);
- }
-
-@@ -351,13 +351,13 @@
- * @param context the context of the link.
- * @param classDoc the class to link to.
- * @param label the label for the link.
-- * @param isBold true if the link should be bold.
-+ * @param isStrong true if the link should be strong.
- */
- public LinkInfoImpl (int context, ClassDoc classDoc, String label,
-- boolean isBold){
-+ boolean isStrong){
- this.classDoc = classDoc;
- this.label = label;
-- this.isBold = isBold;
-+ this.isStrong = isStrong;
- setContext(context);
- }
-
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java
-@@ -167,7 +167,7 @@
- if (configuration().linksource) {
- writer.printSrcLink(method, method.name());
- } else {
-- bold(method.name());
-+ strong(method.name());
- }
- writeParameters(method);
- writeExceptions(method);
-@@ -210,7 +210,7 @@
- holder.typeName() : holder.qualifiedTypeName(),
- false));
- writer.dd();
-- writer.boldText(holder.asClassDoc().isClass()?
-+ writer.strongText(holder.asClassDoc().isClass()?
- "doclet.Description_From_Class":
- "doclet.Description_From_Interface",
- classlink);
-@@ -259,7 +259,7 @@
- }
-
- public void printSummaryLabel(ClassDoc cd) {
-- writer.boldText("doclet.Method_Summary");
-+ writer.strongText("doclet.Method_Summary");
- }
-
- public void printSummaryAnchor(ClassDoc cd) {
-@@ -274,12 +274,12 @@
- public void printInheritedSummaryLabel(ClassDoc cd) {
- String classlink = writer.getPreQualifiedClassLink(
- LinkInfoImpl.CONTEXT_MEMBER, cd, false);
-- writer.bold();
-+ writer.strong();
- String key = cd.isClass()?
- "doclet.Methods_Inherited_From_Class" :
- "doclet.Methods_Inherited_From_Interface";
- writer.printText(key, classlink);
-- writer.boldEnd();
-+ writer.strongEnd();
- }
-
- protected void printSummaryType(ProgramElementDoc member) {
-@@ -317,7 +317,7 @@
- writer.getLink(new LinkInfoImpl(context, overriddenType)));
- String name = method.name();
- writer.dt();
-- writer.boldText(label);
-+ writer.strongText(label);
- writer.dd();
- String methLink = writer.codeText(
- writer.getLink(
-@@ -363,7 +363,7 @@
- writer.getLink(new LinkInfoImpl(
- LinkInfoImpl.CONTEXT_METHOD_SPECIFIED_BY, intfac)));
- writer.dt();
-- writer.boldText("doclet.Specified_By");
-+ writer.strongText("doclet.Specified_By");
- writer.dd();
- methlink = writer.codeText(writer.getDocLink(
- LinkInfoImpl.CONTEXT_MEMBER, implementedMeth,
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java
-@@ -149,7 +149,7 @@
- }
-
- public void printSummaryLabel(ClassDoc cd) {
-- writer.boldText("doclet.Nested_Class_Summary");
-+ writer.strongText("doclet.Nested_Class_Summary");
- }
-
- public void printSummaryAnchor(ClassDoc cd) {
-@@ -164,18 +164,18 @@
- public void printInheritedSummaryLabel(ClassDoc cd) {
- String clslink = writer.getPreQualifiedClassLink(
- LinkInfoImpl.CONTEXT_MEMBER, cd, false);
-- writer.bold();
-+ writer.strong();
- writer.printText(cd.isInterface() ?
- "doclet.Nested_Classes_Interface_Inherited_From_Interface" :
- "doclet.Nested_Classes_Interfaces_Inherited_From_Class",
- clslink);
-- writer.boldEnd();
-+ writer.strongEnd();
- }
-
- protected void writeSummaryLink(int context, ClassDoc cd, ProgramElementDoc member) {
-- writer.bold();
-+ writer.strong();
- writer.printLink(new LinkInfoImpl(context, (ClassDoc)member, false));
-- writer.boldEnd();
-+ writer.strongEnd();
- }
-
- protected void writeInheritedSummaryLink(ClassDoc cd,
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexFrameWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexFrameWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexFrameWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexFrameWriter.java
-@@ -87,7 +87,7 @@
- }
-
- /**
-- * Print the "-packagesheader" string in bold format, at top of the page,
-+ * Print the "-packagesheader" string in strong format, at top of the page,
- * if it is not the empty string. Otherwise print the "-header" string.
- * Despite the name, there is actually no navigation bar for this page.
- */
-@@ -95,9 +95,9 @@
- printTableHeader(true);
- fontSizeStyle("+1", "FrameTitleFont");
- if (configuration.packagesheader.length() > 0) {
-- bold(replaceDocRootDir(configuration.packagesheader));
-+ strong(replaceDocRootDir(configuration.packagesheader));
- } else {
-- bold(replaceDocRootDir(configuration.header));
-+ strong(replaceDocRootDir(configuration.header));
- }
- fontEnd();
- printTableFooter(true);
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java
-@@ -102,9 +102,9 @@
- if(pkg != null && pkg.name().length() > 0) {
- trBgcolorStyle("white", "TableRowColor");
- summaryRow(20);
-- bold();
-+ strong();
- printPackageLink(pkg, Util.getPackageName(pkg), false);
-- boldEnd();
-+ strongEnd();
- summaryRowEnd();
- summaryRow(0);
- printSummaryComment(pkg);
-@@ -138,7 +138,7 @@
- if (root.inlineTags().length > 0) {
- printSummaryComment(root);
- p();
-- bold(configuration.getText("doclet.See"));
-+ strong(configuration.getText("doclet.See"));
- br();
- printNbsps();
- printHyperLink("", "overview_description",
-@@ -153,7 +153,7 @@
- protected void printIndexHeader(String text) {
- tableIndexSummary();
- tableHeaderStart("#CCCCFF");
-- bold(text);
-+ strong(text);
- tableHeaderEnd();
- }
-
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageTreeWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageTreeWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageTreeWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageTreeWriter.java
-@@ -144,7 +144,7 @@
- protected void printLinkToMainTree() {
- dl();
- dt();
-- boldText("doclet.Package_Hierarchies");
-+ strongText("doclet.Package_Hierarchies");
- dd();
- navLinkMainTree(configuration.getText("doclet.All_Packages"));
- dlEnd();
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java
-@@ -178,9 +178,9 @@
-
- trBgcolorStyle("white", "TableRowColor");
- summaryRow(0);
-- bold();
-+ strong();
- printHyperLink(path, packageName, usedClass.name(), true);
-- boldEnd();
-+ strongEnd();
- println(); br();
- printNbsps();
- printIndexComment(usedClass);
-@@ -219,7 +219,7 @@
- hr();
- center();
- h2();
-- boldText("doclet.ClassUse_Title", packageLabel, name);
-+ strongText("doclet.ClassUse_Title", packageLabel, name);
- h2End();
- centerEnd();
- }
-@@ -251,7 +251,7 @@
- protected void navLinkClassUse() {
- navCellRevStart();
- fontStyle("NavBarFont1Rev");
-- boldText("doclet.navClassUse");
-+ strongText("doclet.navClassUse");
- fontEnd();
- navCellEnd();
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java
-@@ -123,14 +123,14 @@
- }
- trBgcolorStyle("white", "TableRowColor");
- summaryRow(15);
-- bold();
-+ strong();
- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_PACKAGE,
- classes[i], false));
-- boldEnd();
-+ strongEnd();
- summaryRowEnd();
- summaryRow(0);
- if (Util.isDeprecated(classes[i])) {
-- boldText("doclet.Deprecated");
-+ strongText("doclet.Deprecated");
- if (classes[i].tags("deprecated").length > 0) {
- space();
- printSummaryDeprecatedComment(classes[i],
-@@ -155,7 +155,7 @@
- */
- protected void printFirstRow(String label) {
- tableHeaderStart("#CCCCFF");
-- bold(label);
-+ strong(label);
- tableHeaderEnd();
- }
-
-@@ -194,7 +194,7 @@
- if (packageDoc.inlineTags().length > 0 && ! configuration.nocomment) {
- printSummaryComment(packageDoc);
- p();
-- bold(configuration.getText("doclet.See"));
-+ strong(configuration.getText("doclet.See"));
- br();
- printNbsps();
- printHyperLink("", "package_description",
-@@ -268,7 +268,7 @@
- protected void navLinkPackage() {
- navCellRevStart();
- fontStyle("NavBarFont1Rev");
-- boldText("doclet.Package");
-+ strongText("doclet.Package");
- fontEnd();
- navCellEnd();
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/SerializedFormWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/SerializedFormWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/SerializedFormWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/SerializedFormWriterImpl.java
-@@ -73,9 +73,9 @@
- tableHeader();
- thAlign("center");
- font("+2");
-- boldText("doclet.Package");
-+ strongText("doclet.Package");
- print(' ');
-- bold(packageName);
-+ strong(packageName);
- tableFooter();
- }
-
-@@ -86,7 +86,7 @@
- * @param serialUID the serial UID to print.
- */
- public void writeSerialUIDInfo(String header, String serialUID) {
-- bold(header + "&nbsp;");
-+ strong(header + "&nbsp;");
- println(serialUID);
- p();
- }
-@@ -131,7 +131,7 @@
- tableHeader();
- thAlignColspan("left", 2);
- font("+2");
-- bold(className);
-+ strong(className);
- tableFooter();
- p();
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java
-@@ -81,7 +81,7 @@
- public void printTableHeadingBackground(String str) {
- tableIndexDetail();
- tableHeaderStart("#CCCCFF", 1);
-- bold(str);
-+ strong(str);
- tableHeaderEnd();
- tableEnd();
- }
-@@ -117,7 +117,7 @@
- protected void printIndexComment(Doc member, Tag[] firstSentenceTags) {
- Tag[] deprs = member.tags("deprecated");
- if (Util.isDeprecated((ProgramElementDoc) member)) {
-- boldText("doclet.Deprecated");
-+ strongText("doclet.Deprecated");
- space();
- if (deprs.length > 0) {
- printInlineDeprecatedComment(member, deprs[0]);
-@@ -126,7 +126,7 @@
- } else {
- ClassDoc cd = ((ProgramElementDoc)member).containingClass();
- if (cd != null && Util.isDeprecated(cd)) {
-- boldText("doclet.Deprecated"); space();
-+ strongText("doclet.Deprecated"); space();
- }
- }
- printSummaryComment(member, firstSentenceTags);
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java
-@@ -69,9 +69,9 @@
- Tag[] deprs = doc.tags("deprecated");
- if (doc instanceof ClassDoc) {
- if (Util.isDeprecated((ProgramElementDoc) doc)) {
-- output.append("<B>" +
-+ output.append("<STRONG>" +
- ConfigurationImpl.getInstance().
-- getText("doclet.Deprecated") + "</B>&nbsp;");
-+ getText("doclet.Deprecated") + "</STRONG>&nbsp;");
- if (deprs.length > 0) {
- Tag[] commentTags = deprs[0].inlineTags();
- if (commentTags.length > 0) {
-@@ -86,9 +86,9 @@
- } else {
- MemberDoc member = (MemberDoc) doc;
- if (Util.isDeprecated((ProgramElementDoc) doc)) {
-- output.append("<DD><B>" +
-+ output.append("<DD><STRONG>" +
- ConfigurationImpl.getInstance().
-- getText("doclet.Deprecated") + "</B>&nbsp;");
-+ getText("doclet.Deprecated") + "</STRONG>&nbsp;");
- if (deprs.length > 0) {
- output.append("<I>");
- output.append(commentTagsToOutput(null, doc,
-@@ -101,9 +101,9 @@
- }
- } else {
- if (Util.isDeprecated(member.containingClass())) {
-- output.append("<DD><B>" +
-+ output.append("<DD><STRONG>" +
- ConfigurationImpl.getInstance().
-- getText("doclet.Deprecated") + "</B>&nbsp;");
-+ getText("doclet.Deprecated") + "</STRONG>&nbsp;");
- }
- }
- }
-@@ -123,7 +123,7 @@
- public TagletOutput getParamHeader(String header) {
- StringBuffer result = new StringBuffer();
- result.append("<DT>");
-- result.append("<B>" + header + "</B>");
-+ result.append("<STRONG>" + header + "</STRONG>");
- return new TagletOutputImpl(result.toString());
- }
-
-@@ -141,8 +141,8 @@
- */
- public TagletOutput returnTagOutput(Tag returnTag) {
- TagletOutput result = new TagletOutputImpl(DocletConstants.NL + "<DT>" +
-- "<B>" + htmlWriter.configuration.getText("doclet.Returns") +
-- "</B>" + "<DD>" +
-+ "<STRONG>" + htmlWriter.configuration.getText("doclet.Returns") +
-+ "</STRONG>" + "<DD>" +
- htmlWriter.commentTagsToString(returnTag, null, returnTag.inlineTags(),
- false));
- return result;
-@@ -189,7 +189,7 @@
- if (result != null && result.length() > 0) {
- return result + ", " + DocletConstants.NL;
- } else {
-- return "<DT><B>" + htmlWriter.configuration().getText("doclet.See_Also") + "</B><DD>";
-+ return "<DT><STRONG>" + htmlWriter.configuration().getText("doclet.See_Also") + "</STRONG><DD>";
- }
- }
-
-@@ -197,7 +197,7 @@
- * {@inheritDoc}
- */
- public TagletOutput simpleTagOutput(Tag[] simpleTags, String header) {
-- String result = "<DT><B>" + header + "</B></DT>" + DocletConstants.NL +
-+ String result = "<DT><STRONG>" + header + "</STRONG></DT>" + DocletConstants.NL +
- " <DD>";
- for (int i = 0; i < simpleTags.length; i++) {
- if (i > 0) {
-@@ -212,7 +212,7 @@
- * {@inheritDoc}
- */
- public TagletOutput simpleTagOutput(Tag simpleTag, String header) {
-- return new TagletOutputImpl("<DT><B>" + header + "</B></DT>" + " <DD>"
-+ return new TagletOutputImpl("<DT><STRONG>" + header + "</STRONG></DT>" + " <DD>"
- + htmlWriter.commentTagsToString(simpleTag, null, simpleTag.inlineTags(), false)
- + "</DD>" + DocletConstants.NL);
- }
-@@ -221,8 +221,8 @@
- * {@inheritDoc}
- */
- public TagletOutput getThrowsHeader() {
-- return new TagletOutputImpl(DocletConstants.NL + "<DT>" + "<B>" +
-- htmlWriter.configuration().getText("doclet.Throws") + "</B>");
-+ return new TagletOutputImpl(DocletConstants.NL + "<DT>" + "<STRONG>" +
-+ htmlWriter.configuration().getText("doclet.Throws") + "</STRONG>");
- }
-
- /**
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/TreeWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/TreeWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/TreeWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/TreeWriter.java
-@@ -119,7 +119,7 @@
- if (!classesonly) {
- dl();
- dt();
-- boldText("doclet.Package_Hierarchies");
-+ strongText("doclet.Package_Hierarchies");
- dd();
- for (int i = 0; i < packages.length; i++) {
- if (packages[i].name().length() == 0) {
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java
-@@ -83,11 +83,11 @@
- * @param where Position of the link in the file. Character '#' is not
- * needed.
- * @param label Tag for the link.
-- * @param bold Boolean that sets label to bold.
-+ * @param strong Boolean that sets label to strong.
- */
- public void printHyperLink(String link, String where,
-- String label, boolean bold) {
-- print(getHyperLink(link, where, label, bold, "", "", ""));
-+ String label, boolean strong) {
-+ print(getHyperLink(link, where, label, strong, "", "", ""));
- }
-
- /**
-@@ -109,13 +109,13 @@
- * @param where Position of the link in the file. Character '#' is not
- * needed.
- * @param label Tag for the link.
-- * @param bold Boolean that sets label to bold.
-+ * @param strong Boolean that sets label to strong.
- * @param stylename String style of text defined in style sheet.
- */
- public void printHyperLink(String link, String where,
-- String label, boolean bold,
-+ String label, boolean strong,
- String stylename) {
-- print(getHyperLink(link, where, label, bold, stylename, "", ""));
-+ print(getHyperLink(link, where, label, strong, stylename, "", ""));
- }
-
- /**
-@@ -125,12 +125,12 @@
- * @param where Position of the link in the file. Character '#' is not
- * needed.
- * @param label Tag for the link.
-- * @param bold Boolean that sets label to bold.
-+ * @param strong Boolean that sets label to strong.
- * @return String Hyper Link.
- */
- public String getHyperLink(String link, String where,
-- String label, boolean bold) {
-- return getHyperLink(link, where, label, bold, "", "", "");
-+ String label, boolean strong) {
-+ return getHyperLink(link, where, label, strong, "", "", "");
- }
-
- /**
-@@ -140,14 +140,14 @@
- * @param where Position of the link in the file. Character '#' is not
- * needed.
- * @param label Tag for the link.
-- * @param bold Boolean that sets label to bold.
-+ * @param strong Boolean that sets label to strong.
- * @param stylename String style of text defined in style sheet.
- * @return String Hyper Link.
- */
- public String getHyperLink(String link, String where,
-- String label, boolean bold,
-+ String label, boolean strong,
- String stylename) {
-- return getHyperLink(link, where, label, bold, stylename, "", "");
-+ return getHyperLink(link, where, label, strong, stylename, "", "");
- }
-
- /**
-@@ -157,14 +157,14 @@
- * @param where Position of the link in the file. Character '#' is not
- * needed.
- * @param label Tag for the link.
-- * @param bold Boolean that sets label to bold.
-+ * @param strong Boolean that sets label to strong.
- * @param stylename String style of text defined in style sheet.
- * @param title String that describes the link's content for accessibility.
- * @param target Target frame.
- * @return String Hyper Link.
- */
- public String getHyperLink(String link, String where,
-- String label, boolean bold,
-+ String label, boolean strong,
- String stylename, String title, String target) {
- StringBuffer retlink = new StringBuffer();
- retlink.append("<A HREF=\"");
-@@ -186,12 +186,12 @@
- retlink.append(stylename);
- retlink.append("\">");
- }
-- if (bold) {
-- retlink.append("<B>");
-+ if (strong) {
-+ retlink.append("<STRONG>");
- }
- retlink.append(label);
-- if (bold) {
-- retlink.append("</B>");
-+ if (strong) {
-+ retlink.append("</STRONG>");
- }
- if (stylename != null && stylename.length() != 0) {
- retlink.append("</FONT>");
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java
-@@ -433,46 +433,46 @@
- }
-
- /**
-- * Get the "&lt;B&gt;" string.
-+ * Get the "&lt;STRONG&gt;" string.
- *
-- * @return String Return String "&lt;B&gt;";
-+ * @return String Return String "&lt;STRONG&gt;";
- */
-- public String getBold() {
-- return "<B>";
-+ public String getStrong() {
-+ return "<STRONG>";
- }
-
- /**
-- * Get the "&lt;/B&gt;" string.
-+ * Get the "&lt;/STRONG&gt;" string.
- *
-- * @return String Return String "&lt;/B&gt;";
-+ * @return String Return String "&lt;/STRONG&gt;";
- */
-- public String getBoldEnd() {
-- return "</B>";
-+ public String getStrongEnd() {
-+ return "</STRONG>";
- }
-
- /**
-- * Print &lt;B&gt; tag.
-+ * Print &lt;STRONG&gt; tag.
- */
-- public void bold() {
-- print("<B>");
-+ public void strong() {
-+ print("<STRONG>");
- }
-
- /**
-- * Print &lt;/B&gt; tag.
-+ * Print &lt;/STRONG&gt; tag.
- */
-- public void boldEnd() {
-- print("</B>");
-+ public void strongEnd() {
-+ print("</STRONG>");
- }
-
- /**
-- * Print text passed, in bold format using &lt;B&gt; and &lt;/B&gt; tags.
-+ * Print text passed, in strong format using &lt;STRONG&gt; and &lt;/STRONG&gt; tags.
- *
-- * @param text String to be printed in between &lt;B&gt; and &lt;/B&gt; tags.
-+ * @param text String to be printed in between &lt;STRONG&gt; and &lt;/STRONG&gt; tags.
- */
-- public void bold(String text) {
-- bold();
-+ public void strong(String text) {
-+ strong();
- print(text);
-- boldEnd();
-+ strongEnd();
- }
-
- /**
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/links/LinkInfo.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/links/LinkInfo.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/links/LinkInfo.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/links/LinkInfo.java
-@@ -69,9 +69,9 @@
- public String label;
-
- /**
-- * True if the link should be bolded.
-+ * True if the link should be strong.
- */
-- public boolean isBold = false;
-+ public boolean isStrong = false;
-
- /**
- * True if we should include the type in the link label. False otherwise.
-diff --git a/test/com/sun/javadoc/AccessAsciiArt/AccessAsciiArt.java b/test/com/sun/javadoc/AccessAsciiArt/AccessAsciiArt.java
---- langtools/test/com/sun/javadoc/AccessAsciiArt/AccessAsciiArt.java
-+++ langtools/test/com/sun/javadoc/AccessAsciiArt/AccessAsciiArt.java
-@@ -94,7 +94,7 @@
-
- // Test the third line of the class tree
- {
--" <IMG SRC=\"../../resources/inherit.gif\" ALT=\"extended by \"><B>p1.subpkg.SSC</B>",
-+" <IMG SRC=\"../../resources/inherit.gif\" ALT=\"extended by \"><STRONG>p1.subpkg.SSC</STRONG>",
- TMPDEST_DIR1 + "p1" + FS + "subpkg" + FS +"SSC.html" },
-
- };
-diff --git a/test/com/sun/javadoc/AuthorDD/AuthorDD.java b/test/com/sun/javadoc/AuthorDD/AuthorDD.java
---- langtools/test/com/sun/javadoc/AuthorDD/AuthorDD.java
-+++ langtools/test/com/sun/javadoc/AuthorDD/AuthorDD.java
-@@ -86,12 +86,12 @@
-
- // Test single @since tag:
-
-- { "<DT><B>Since:</B></DT>"+NL+" <DD>JDK 1.0</DD>",
-+ { "<DT><STRONG>Since:</STRONG></DT>"+NL+" <DD>JDK 1.0</DD>",
- BUGID + FS + "p1" + FS + "C1.html" },
-
- // Test multiple @author tags:
-
-- { "<DT><B>Author:</B></DT>"+NL+" <DD>Doug Kramer, Jamie, Neal</DD>"+NL,
-+ { "<DT><STRONG>Author:</STRONG></DT>"+NL+" <DD>Doug Kramer, Jamie, Neal</DD>"+NL,
- BUGID + FS + "p1" + FS + "C1.html" },
-
- };
-diff --git a/test/com/sun/javadoc/testClassCrossReferences/TestClassCrossReferences.java b/test/com/sun/javadoc/testClassCrossReferences/TestClassCrossReferences.java
---- langtools/test/com/sun/javadoc/testClassCrossReferences/TestClassCrossReferences.java
-+++ langtools/test/com/sun/javadoc/testClassCrossReferences/TestClassCrossReferences.java
-@@ -48,7 +48,7 @@
- "<A HREF=\"http://java.sun.com/j2se/1.4/docs/api/java/math/BigInteger.html?is-external=true#gcd(java.math.BigInteger)\" " +
- "title=\"class or interface in java.math\"><CODE>Link to external member gcd</CODE></A>"},
- {BUG_ID + FS + "C.html",
-- "<B>Overrides:</B><DD><CODE>toString</CODE> in class <CODE>java.lang.Object</CODE>"}
-+ "<STRONG>Overrides:</STRONG><DD><CODE>toString</CODE> in class <CODE>java.lang.Object</CODE>"}
- };
- private static final String[][] NEGATED_TEST = NO_TEST;
- private static final String[] ARGS =
-diff --git a/test/com/sun/javadoc/testClassTree/TestClassTree.java b/test/com/sun/javadoc/testClassTree/TestClassTree.java
---- langtools/test/com/sun/javadoc/testClassTree/TestClassTree.java
-+++ langtools/test/com/sun/javadoc/testClassTree/TestClassTree.java
-@@ -49,12 +49,12 @@
- private static final String[][] TEST = {
- {BUG_ID + FS + "pkg" + FS + "package-tree.html",
- "<LI TYPE=\"circle\">pkg.<A HREF=\"../pkg/ParentClass.html\" " +
-- "title=\"class in pkg\"><B>ParentClass</B></A><UL>"},
-+ "title=\"class in pkg\"><STRONG>ParentClass</STRONG></A><UL>"},
-
- {BUG_ID + FS + "pkg" + FS + "package-tree.html",
- "Annotation Type Hierarchy" + NL + "</H2>" + NL + "<UL>" + NL +
- "<LI TYPE=\"circle\">pkg.<A HREF=\"../pkg/AnnotationType.html\" " +
-- "title=\"annotation in pkg\"><B>AnnotationType</B></A> " +
-+ "title=\"annotation in pkg\"><STRONG>AnnotationType</STRONG></A> " +
- "(implements java.lang.annotation.Annotation)" + NL + "</UL>"},
-
- {BUG_ID + FS + "pkg" + FS + "package-tree.html",
-@@ -65,7 +65,7 @@
- "<LI TYPE=\"circle\">java.lang.Object<UL>" + NL +
- "<LI TYPE=\"circle\">java.lang.Enum&lt;E&gt; (implements java.lang.Comparable&lt;T&gt;, java.io.Serializable)" + NL +
- "<UL>" + NL +
-- "<LI TYPE=\"circle\">pkg.<A HREF=\"../pkg/Coin.html\" title=\"enum in pkg\"><B>Coin</B></A></UL>" + NL +
-+ "<LI TYPE=\"circle\">pkg.<A HREF=\"../pkg/Coin.html\" title=\"enum in pkg\"><STRONG>Coin</STRONG></A></UL>" + NL +
- "</UL>" + NL +
- "</UL>"
- },
-@@ -73,7 +73,7 @@
- private static final String[][] NEGATED_TEST = {
- {BUG_ID + FS + "pkg" + FS + "package-tree.html",
- "<LI TYPE=\"circle\">class pkg.<A HREF=\"../pkg/ParentClass.html\" " +
-- "title=\"class in pkg\"><B>ParentClass</B></A><UL>"}
-+ "title=\"class in pkg\"><STRONG>ParentClass</STRONG></A><UL>"}
- };
-
- /**
-diff --git a/test/com/sun/javadoc/testConstructorIndent/TestConstructorIndent.java b/test/com/sun/javadoc/testConstructorIndent/TestConstructorIndent.java
---- langtools/test/com/sun/javadoc/testConstructorIndent/TestConstructorIndent.java
-+++ langtools/test/com/sun/javadoc/testConstructorIndent/TestConstructorIndent.java
-@@ -46,7 +46,7 @@
- //Input for string search tests.
- private static final String[][] TEST = {
- {BUG_ID + FS + "C.html", "<DL>"+NL+"<DD>This is just a simple constructor."+ NL +
-- "<P>"+NL+"<DL>"+NL+"<DT><B>Parameters:</B><DD><CODE>i</CODE> - a param.</DL>"+NL +
-+ "<P>"+NL+"<DL>"+NL+"<DT><STRONG>Parameters:</STRONG><DD><CODE>i</CODE> - a param.</DL>"+NL +
- "</DL>"
- }
- };
-diff --git a/test/com/sun/javadoc/testDeprecatedDocs/TestDeprecatedDocs.java b/test/com/sun/javadoc/testDeprecatedDocs/TestDeprecatedDocs.java
---- langtools/test/com/sun/javadoc/testDeprecatedDocs/TestDeprecatedDocs.java
-+++ langtools/test/com/sun/javadoc/testDeprecatedDocs/TestDeprecatedDocs.java
-@@ -76,25 +76,25 @@
- {TARGET_FILE, "pkg.DeprecatedClassByAnnotation.method()"},
- {TARGET_FILE, "pkg.DeprecatedClassByAnnotation.field"},
-
-- {TARGET_FILE2, "<B>Deprecated.</B>" + NL +
-+ {TARGET_FILE2, "<STRONG>Deprecated.</STRONG>" + NL +
- "<P>" + NL +
- "<DL>" + NL +
- "<DT><PRE><FONT SIZE=\"-1\">@Deprecated" + NL +
-- "</FONT>public class <B>DeprecatedClassByAnnotation</B>"},
-+ "</FONT>public class <STRONG>DeprecatedClassByAnnotation</STRONG>"},
-
-- {TARGET_FILE2, "public int <B>field</B></PRE>" + NL +
-+ {TARGET_FILE2, "public int <STRONG>field</STRONG></PRE>" + NL +
- "<DL>" + NL +
-- "<DD><B>Deprecated.</B>&nbsp;<DL>"},
-+ "<DD><STRONG>Deprecated.</STRONG>&nbsp;<DL>"},
-
- {TARGET_FILE2, "<FONT SIZE=\"-1\">@Deprecated" + NL +
-- "</FONT>public <B>DeprecatedClassByAnnotation</B>()</PRE>" + NL +
-+ "</FONT>public <STRONG>DeprecatedClassByAnnotation</STRONG>()</PRE>" + NL +
- "<DL>" + NL +
-- "<DD><B>Deprecated.</B>"},
-+ "<DD><STRONG>Deprecated.</STRONG>"},
-
- {TARGET_FILE2, "<FONT SIZE=\"-1\">@Deprecated" + NL +
-- "</FONT>public void <B>method</B>()</PRE>" + NL +
-+ "</FONT>public void <STRONG>method</STRONG>()</PRE>" + NL +
- "<DL>" + NL +
-- "<DD><B>Deprecated.</B>"},
-+ "<DD><STRONG>Deprecated.</STRONG>"},
- };
-
- private static final String[][] NEGATED_TEST = NO_TEST;
-diff --git a/test/com/sun/javadoc/testExternalOverridenMethod/TestExternalOverridenMethod.java b/test/com/sun/javadoc/testExternalOverridenMethod/TestExternalOverridenMethod.java
---- langtools/test/com/sun/javadoc/testExternalOverridenMethod/TestExternalOverridenMethod.java
-+++ langtools/test/com/sun/javadoc/testExternalOverridenMethod/TestExternalOverridenMethod.java
-@@ -39,13 +39,13 @@
- private static final String BUG_ID = "4857717";
- private static final String[][] TEST = {
- {BUG_ID + FS + "pkg" + FS + "XReader.html",
-- "<B>Overrides:</B><DD><CODE><A HREF=\"" +
-+ "<STRONG>Overrides:</STRONG><DD><CODE><A HREF=\"" +
- "http://java.sun.com/j2se/1.4.1/docs/api/java/io/FilterReader.html?is-external=true#read()\"" +
- " title=\"class or interface in java.io\">read</A></CODE> in class " +
- "<CODE><A HREF=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/FilterReader.html?is-external=true\"" +
- " title=\"class or interface in java.io\">FilterReader</A>"},
- {BUG_ID + FS + "pkg" + FS + "XReader.html",
-- "<B>Specified by:</B><DD><CODE><A HREF=\"" +
-+ "<STRONG>Specified by:</STRONG><DD><CODE><A HREF=\"" +
- "http://java.sun.com/j2se/1.4.1/docs/api/java/io/DataInput.html?is-external=true#readInt()\"" +
- " title=\"class or interface in java.io\">readInt</A></CODE> in interface " +
- "<CODE><A HREF=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/DataInput.html?is-external=true\"" +
-diff --git a/test/com/sun/javadoc/testHeadings/TestHeadings.java b/test/com/sun/javadoc/testHeadings/TestHeadings.java
---- langtools/test/com/sun/javadoc/testHeadings/TestHeadings.java
-+++ langtools/test/com/sun/javadoc/testHeadings/TestHeadings.java
-@@ -48,16 +48,16 @@
- //Package summary
- {BUG_ID + FS + "pkg1" + FS + "package-summary.html",
- "<TH ALIGN=\"left\" COLSPAN=\"2\"><FONT SIZE=\"+2\">" + NL +
-- "<B>Class Summary</B></FONT></TH>"
-+ "<STRONG>Class Summary</STRONG></FONT></TH>"
- },
-
- // Class documentation
- {BUG_ID + FS + "pkg1" + FS + "C1.html",
- "<TH ALIGN=\"left\" COLSPAN=\"2\"><FONT SIZE=\"+2\">" + NL +
-- "<B>Field Summary</B></FONT></TH>"
-+ "<STRONG>Field Summary</STRONG></FONT></TH>"
- },
- {BUG_ID + FS + "pkg1" + FS + "C1.html",
-- "<TH ALIGN=\"left\"><B>Methods inherited from class " + "java.lang.Object</B></TH>"
-+ "<TH ALIGN=\"left\"><STRONG>Methods inherited from class " + "java.lang.Object</STRONG></TH>"
- },
-
- // Class use documentation
-@@ -76,7 +76,7 @@
- // Deprecated
- {BUG_ID + FS + "deprecated-list.html",
- "<TH ALIGN=\"left\" COLSPAN=\"2\"><FONT SIZE=\"+2\">" + NL +
-- "<B>Deprecated Methods</B></FONT></TH>"
-+ "<STRONG>Deprecated Methods</STRONG></FONT></TH>"
- },
-
- // Constant values
-@@ -90,20 +90,20 @@
- // Serialized Form
- {BUG_ID + FS + "serialized-form.html",
- "<TH ALIGN=\"center\"><FONT SIZE=\"+2\">" + NL +
-- "<B>Package</B> <B>pkg1</B></FONT></TH>"
-+ "<STRONG>Package</STRONG> <STRONG>pkg1</STRONG></FONT></TH>"
- },
- {BUG_ID + FS + "serialized-form.html",
- "<TH ALIGN=\"left\" COLSPAN=\"2\"><FONT SIZE=\"+2\">" + NL +
-- "<B>Class <A HREF=\"pkg1/C1.html\" " + "title=\"class in pkg1\">pkg1.C1</A> extends java.lang.Object " + "implements Serializable</B></FONT></TH>"
-+ "<STRONG>Class <A HREF=\"pkg1/C1.html\" " + "title=\"class in pkg1\">pkg1.C1</A> extends java.lang.Object " + "implements Serializable</STRONG></FONT></TH>"
- },
- {BUG_ID + FS + "serialized-form.html",
- "<TH ALIGN=\"left\" COLSPAN=\"1\"><FONT SIZE=\"+2\">" + NL +
-- "<B>Serialized Fields</B></FONT></TH>"
-+ "<STRONG>Serialized Fields</STRONG></FONT></TH>"
- },
-
- // Overview Frame
- {BUG_ID + FS + "overview-frame.html",
-- "<TH ALIGN=\"left\" NOWRAP><FONT size=\"+1\" " + "CLASS=\"FrameTitleFont\">" + NL + "<B>Test Files</B></FONT></TH>"
-+ "<TH ALIGN=\"left\" NOWRAP><FONT size=\"+1\" " + "CLASS=\"FrameTitleFont\">" + NL + "<STRONG>Test Files</STRONG></FONT></TH>"
- },
- {BUG_ID + FS + "overview-frame.html",
- "<TITLE>" + NL +
-diff --git a/test/com/sun/javadoc/testHelpOption/TestHelpOption.java b/test/com/sun/javadoc/testHelpOption/TestHelpOption.java
---- langtools/test/com/sun/javadoc/testHelpOption/TestHelpOption.java
-+++ langtools/test/com/sun/javadoc/testHelpOption/TestHelpOption.java
-@@ -91,7 +91,8 @@
-
- private static final String[][] TEST2 = {
- {BUG_ID + FS + "TestHelpOption.html",
-- "<A HREF=\"help-doc.html\"><FONT CLASS=\"NavBarFont1\">" + "<B>Help</B></FONT></A>"
-+ "<A HREF=\"help-doc.html\"><FONT CLASS=\"NavBarFont1\">" +
-+ "<STRONG>Help</STRONG></FONT></A>"
- },
- };
- private static final String[][] NEGATED_TEST2 = NO_TEST;
-diff --git a/test/com/sun/javadoc/testHref/TestHref.java b/test/com/sun/javadoc/testHref/TestHref.java
---- langtools/test/com/sun/javadoc/testHref/TestHref.java
-+++ langtools/test/com/sun/javadoc/testHref/TestHref.java
-@@ -67,7 +67,7 @@
- },
- //@see test.
- {BUG_ID + FS + "pkg" + FS + "C2.html",
-- "See Also:</B><DD><A HREF=\"../pkg/C1.html#method(int, int, java.util.ArrayList)\">"
-+ "See Also:</STRONG><DD><A HREF=\"../pkg/C1.html#method(int, int, java.util.ArrayList)\">"
- },
-
- //Header does not link to the page itself.
-@@ -77,7 +77,7 @@
-
- //Signature does not link to the page itself.
- {BUG_ID + FS + "pkg" + FS + "C4.html",
-- "public abstract class <B>C4&lt;E extends C4&lt;E&gt;&gt;</B>"
-+ "public abstract class <STRONG>C4&lt;E extends C4&lt;E&gt;&gt;</STRONG>"
- },
- };
- private static final String[][] NEGATED_TEST =
-diff --git a/test/com/sun/javadoc/testHtmlStrongTag/TestHtmlStrongTag.java b/test/com/sun/javadoc/testHtmlStrongTag/TestHtmlStrongTag.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testHtmlStrongTag/TestHtmlStrongTag.java
-@@ -0,0 +1,82 @@
-+/*
-+ * Copyright 1999-2008 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.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 6786028
-+ * @summary This test verifys the use of <strong> HTML tag instead of <B> by Javadoc std doclet.
-+ * @author Bhavesh Patel
-+ * @library ../lib/
-+ * @build JavadocTester
-+ * @build TestHtmlStrongTag
-+ * @run main TestHtmlStrongTag
-+ */
-+
-+public class TestHtmlStrongTag extends JavadocTester {
-+
-+ private static final String BUG_ID = "6786028";
-+ private static final String[][] TEST1 = {
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<STRONG>Method Summary</STRONG>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<STRONG>See Also:</STRONG>"},
-+ {BUG_ID + FS + "pkg1" + FS + "package-summary.html", "<STRONG>Class Summary</STRONG>"}};
-+ private static final String[][] NEGATED_TEST1 = {
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<B>"}};
-+ private static final String[][] TEST2 = {
-+ {BUG_ID + FS + "pkg2" + FS + "C2.html", "<STRONG>Method Summary</STRONG>"},
-+ {BUG_ID + FS + "pkg2" + FS + "C2.html", "<B>Comments:</B>"},
-+ {BUG_ID + FS + "pkg1" + FS + "package-summary.html", "<STRONG>Class Summary</STRONG>"}};
-+
-+ private static final String[] ARGS1 =
-+ new String[] {
-+ "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg1"};
-+ private static final String[] ARGS2 =
-+ new String[] {
-+ "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg2"};
-+
-+ /**
-+ * The entry point of the test.
-+ * @param args the array of command line arguments.
-+ */
-+ public static void main(String[] args) {
-+ TestHtmlStrongTag tester = new TestHtmlStrongTag();
-+ run(tester, ARGS1, TEST1, NEGATED_TEST1);
-+ run(tester, ARGS2, TEST2, NO_TEST);
-+ tester.printSummary();
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getBugId() {
-+ return BUG_ID;
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getBugName() {
-+ return getClass().getName();
-+ }
-+}
-diff --git a/test/com/sun/javadoc/testHtmlStrongTag/pkg1/C1.java b/test/com/sun/javadoc/testHtmlStrongTag/pkg1/C1.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testHtmlStrongTag/pkg1/C1.java
-@@ -0,0 +1,36 @@
-+/*
-+ * Copyright 1999-2008 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 pkg1;
-+
-+/**
-+ * @see java.lang.Object#wait(long, int)
-+ */
-+public class C1 {
-+
-+ public void method(int param1, int param2) {
-+
-+ }
-+}
-diff --git a/test/com/sun/javadoc/testHtmlStrongTag/pkg2/C2.java b/test/com/sun/javadoc/testHtmlStrongTag/pkg2/C2.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testHtmlStrongTag/pkg2/C2.java
-@@ -0,0 +1,31 @@
-+/*
-+ * Copyright 1999-2008 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 pkg2;
-+
-+/**
-+ * <B>Comments:</B> Class 2
-+ */
-+public class C2 {}
-diff --git a/test/com/sun/javadoc/testIndex/TestIndex.java b/test/com/sun/javadoc/testIndex/TestIndex.java
---- langtools/test/com/sun/javadoc/testIndex/TestIndex.java
-+++ langtools/test/com/sun/javadoc/testIndex/TestIndex.java
-@@ -54,27 +54,27 @@
-
- //Test index-all.html
- {BUG_ID + FS + "index-all.html",
-- "<A HREF=\"./pkg/C.html\" title=\"class in pkg\"><B>C</B></A>" +
-+ "<A HREF=\"./pkg/C.html\" title=\"class in pkg\"><STRONG>C</STRONG></A>" +
- " - Class in <A HREF=\"./pkg/package-summary.html\">pkg</A>"},
- {BUG_ID + FS + "index-all.html",
- "<A HREF=\"./pkg/Interface.html\" title=\"interface in pkg\">" +
-- "<B>Interface</B></A> - Interface in " +
-+ "<STRONG>Interface</STRONG></A> - Interface in " +
- "<A HREF=\"./pkg/package-summary.html\">pkg</A>"},
- {BUG_ID + FS + "index-all.html",
- "<A HREF=\"./pkg/AnnotationType.html\" title=\"annotation in pkg\">" +
-- "<B>AnnotationType</B></A> - Annotation Type in " +
-+ "<STRONG>AnnotationType</STRONG></A> - Annotation Type in " +
- "<A HREF=\"./pkg/package-summary.html\">pkg</A>"},
- {BUG_ID + FS + "index-all.html",
- "<A HREF=\"./pkg/Coin.html\" title=\"enum in pkg\">" +
-- "<B>Coin</B></A> - Enum in " +
-+ "<STRONG>Coin</STRONG></A> - Enum in " +
- "<A HREF=\"./pkg/package-summary.html\">pkg</A>"},
- {BUG_ID + FS + "index-all.html",
- "Class in <A HREF=\"./package-summary.html\">&lt;Unnamed&gt;</A>"},
- {BUG_ID + FS + "index-all.html",
-- "<DT><A HREF=\"./pkg/C.html#Java\"><B>Java</B></A> - " + NL +
-+ "<DT><A HREF=\"./pkg/C.html#Java\"><STRONG>Java</STRONG></A> - " + NL +
- "Static variable in class pkg.<A HREF=\"./pkg/C.html\" title=\"class in pkg\">C</A>" + NL +
- "<DD>&nbsp;" + NL +
-- "<DT><A HREF=\"./pkg/C.html#JDK\"><B>JDK</B></A> - " + NL +
-+ "<DT><A HREF=\"./pkg/C.html#JDK\"><STRONG>JDK</STRONG></A> - " + NL +
- "Static variable in class pkg.<A HREF=\"./pkg/C.html\" title=\"class in pkg\">C</A>" + NL +
- "<DD>&nbsp;"},
- };
-diff --git a/test/com/sun/javadoc/testInterface/TestInterface.java b/test/com/sun/javadoc/testInterface/TestInterface.java
---- langtools/test/com/sun/javadoc/testInterface/TestInterface.java
-+++ langtools/test/com/sun/javadoc/testInterface/TestInterface.java
-@@ -48,14 +48,14 @@
- //Input for string search tests.
- private static final String[][] TEST = {
- {BUG_ID + FS + "pkg" + FS + "Interface.html",
-- "int <B>method</B>()"},
-+ "int <STRONG>method</STRONG>()"},
- {BUG_ID + FS + "pkg" + FS + "Interface.html",
-- "static final int <B>field</B>"},
-+ "static final int <STRONG>field</STRONG>"},
-
-
- // Make sure known implementing class list is correct and omits type parameters.
- {BUG_ID + FS + "pkg" + FS + "Interface.html",
-- "<DT><B>All Known Implementing Classes:</B> " +
-+ "<DT><STRONG>All Known Implementing Classes:</STRONG> " +
- "<DD><A HREF=\"../pkg/Child.html\" " +
- "title=\"class in pkg\">Child</A>, " +
- "<A HREF=\"../pkg/Parent.html\" title=\"class in pkg\">" +
-@@ -63,34 +63,34 @@
-
- // Make sure "All Implemented Interfaces": has substituted type parameters
- {BUG_ID + FS + "pkg" + FS + "Child.html",
-- "<B>All Implemented Interfaces:</B> <DD><A HREF=\"../pkg/Interface.html\" title=\"interface in pkg\">Interface</A>&lt;T&gt;"
-+ "<STRONG>All Implemented Interfaces:</STRONG> <DD><A HREF=\"../pkg/Interface.html\" title=\"interface in pkg\">Interface</A>&lt;T&gt;"
- },
- //Make sure Class Tree has substituted type parameters.
- {BUG_ID + FS + "pkg" + FS + "Child.html",
- "<PRE>" + NL +
- "java.lang.Object" + NL +
- " <IMG SRC=\"../resources/inherit.gif\" ALT=\"extended by \"><A HREF=\"../pkg/Parent.html\" title=\"class in pkg\">pkg.Parent</A>&lt;T&gt;" + NL +
-- " <IMG SRC=\"../resources/inherit.gif\" ALT=\"extended by \"><B>pkg.Child&lt;T&gt;</B>" + NL +
-+ " <IMG SRC=\"../resources/inherit.gif\" ALT=\"extended by \"><STRONG>pkg.Child&lt;T&gt;</STRONG>" + NL +
- "</PRE>"
- },
- //Make sure "Direct Know Subclasses" omits type parameters
- {BUG_ID + FS + "pkg" + FS + "Parent.html",
-- "<B>Direct Known Subclasses:</B> <DD><A HREF=\"../pkg/Child.html\" title=\"class in pkg\">Child</A>"
-+ "<STRONG>Direct Known Subclasses:</STRONG> <DD><A HREF=\"../pkg/Child.html\" title=\"class in pkg\">Child</A>"
- },
- //Make sure "Specified By" has substituted type parameters.
- {BUG_ID + FS + "pkg" + FS + "Child.html",
-- "<B>Specified by:</B><DD><CODE><A HREF=\"../pkg/Interface.html#method()\">method</A></CODE> in interface <CODE><A HREF=\"../pkg/Interface.html\" title=\"interface in pkg\">Interface</A>&lt;<A HREF=\"../pkg/Child.html\" title=\"type parameter in Child\">T</A>&gt;</CODE>"
-+ "<STRONG>Specified by:</STRONG><DD><CODE><A HREF=\"../pkg/Interface.html#method()\">method</A></CODE> in interface <CODE><A HREF=\"../pkg/Interface.html\" title=\"interface in pkg\">Interface</A>&lt;<A HREF=\"../pkg/Child.html\" title=\"type parameter in Child\">T</A>&gt;</CODE>"
- },
- //Make sure "Overrides" has substituted type parameters.
- {BUG_ID + FS + "pkg" + FS + "Child.html",
-- "<B>Overrides:</B><DD><CODE><A HREF=\"../pkg/Parent.html#method()\">method</A></CODE> in class <CODE><A HREF=\"../pkg/Parent.html\" title=\"class in pkg\">Parent</A>&lt;<A HREF=\"../pkg/Child.html\" title=\"type parameter in Child\">T</A>&gt;</CODE>"
-+ "<STRONG>Overrides:</STRONG><DD><CODE><A HREF=\"../pkg/Parent.html#method()\">method</A></CODE> in class <CODE><A HREF=\"../pkg/Parent.html\" title=\"class in pkg\">Parent</A>&lt;<A HREF=\"../pkg/Child.html\" title=\"type parameter in Child\">T</A>&gt;</CODE>"
- },
- };
- private static final String[][] NEGATED_TEST = {
- {BUG_ID + FS + "pkg" + FS + "Interface.html",
-- "public int <B>method</B>()"},
-+ "public int <STRONG>method</STRONG>()"},
- {BUG_ID + FS + "pkg" + FS + "Interface.html",
-- "public static final int <B>field</B>"},
-+ "public static final int <STRONG>field</STRONG>"},
- };
-
- /**
-diff --git a/test/com/sun/javadoc/testJavascript/TestJavascript.java b/test/com/sun/javadoc/testJavascript/TestJavascript.java
---- langtools/test/com/sun/javadoc/testJavascript/TestJavascript.java
-+++ langtools/test/com/sun/javadoc/testJavascript/TestJavascript.java
-@@ -45,9 +45,9 @@
- //Input for string search tests.
- private static final String[][] TEST = {
- {BUG_ID + FS + "pkg" + FS + "C.html",
-- "<A HREF=\"../index.html?pkg/C.html\" target=\"_top\"><B>FRAMES</B></A>"},
-+ "<A HREF=\"../index.html?pkg/C.html\" target=\"_top\"><STRONG>FRAMES</STRONG></A>"},
- {BUG_ID + FS + "TestJavascript.html",
-- "<A HREF=\"index.html?TestJavascript.html\" target=\"_top\"><B>FRAMES</B></A>"},
-+ "<A HREF=\"index.html?TestJavascript.html\" target=\"_top\"><STRONG>FRAMES</STRONG></A>"},
- {BUG_ID + FS + "index.html",
- "<SCRIPT type=\"text/javascript\">" + NL +
- " targetPage = \"\" + window.location.search;" + NL +
-diff --git a/test/com/sun/javadoc/testLinkOption/TestLinkOption.java b/test/com/sun/javadoc/testLinkOption/TestLinkOption.java
---- langtools/test/com/sun/javadoc/testLinkOption/TestLinkOption.java
-+++ langtools/test/com/sun/javadoc/testLinkOption/TestLinkOption.java
-@@ -63,7 +63,7 @@
- "title=\"class or interface in java.lang\">Object</A>&nbsp;p3)"
- },
- {BUG_ID + "-1" + FS + "java" + FS + "lang" + FS + "StringBuilderChild.html",
-- "public abstract class <B>StringBuilderChild</B><DT>extends <A HREF=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true\" title=\"class or interface in java.lang\">Object</A>"
-+ "public abstract class <STRONG>StringBuilderChild</STRONG><DT>extends <A HREF=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true\" title=\"class or interface in java.lang\">Object</A>"
- },
-
- };
-diff --git a/test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java b/test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java
---- langtools/test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java
-+++ langtools/test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java
-@@ -59,7 +59,7 @@
- " Link to another inner class: <A HREF=\"../pkg/C.InnerC2.html\" title=\"class in pkg\"><CODE>C.InnerC2</CODE></A>"
- },
- {BUG_ID + FS + "pkg" + FS + "C.InnerC2.html",
-- "Enclosing class:</B><DD><A HREF=\"../pkg/C.html\" title=\"class in pkg\">C</A>"
-+ "Enclosing class:</STRONG><DD><A HREF=\"../pkg/C.html\" title=\"class in pkg\">C</A>"
- },
- };
- private static final String[][] NEGATED_TEST = {
-diff --git a/test/com/sun/javadoc/testMemberInheritence/TestMemberInheritence.java b/test/com/sun/javadoc/testMemberInheritence/TestMemberInheritence.java
---- langtools/test/com/sun/javadoc/testMemberInheritence/TestMemberInheritence.java
-+++ langtools/test/com/sun/javadoc/testMemberInheritence/TestMemberInheritence.java
-@@ -64,13 +64,17 @@
-
- // New labels as of 1.5.0
- {BUG_ID + FS + "pkg" + FS + "SubClass.html",
-- "<B>Nested classes/interfaces inherited from class pkg." + "<A HREF=\"../pkg/BaseClass.html\" title=\"class in pkg\">" + "BaseClass</A></B>"},
-+ "<STRONG>Nested classes/interfaces inherited from class pkg." +
-+ "<A HREF=\"../pkg/BaseClass.html\" title=\"class in pkg\">" +
-+ "BaseClass</A></STRONG>"},
- {BUG_ID + FS + "pkg" + FS + "SubClass.html",
-- "<B>Nested classes/interfaces inherited from interface pkg." + "<A HREF=\"../pkg/BaseInterface.html\" title=\"interface in pkg\">" + "BaseInterface</A></B>"},
-+ "<STRONG>Nested classes/interfaces inherited from interface pkg." +
-+ "<A HREF=\"../pkg/BaseInterface.html\" title=\"interface in pkg\">" +
-+ "BaseInterface</A></STRONG>"},
-
- // Test overriding/implementing methods with generic parameters.
- {BUG_ID + FS + "pkg" + FS + "BaseClass.html",
-- "<DT><B>Specified by:</B><DD><CODE><A HREF=\"../pkg/BaseInterface.html#getAnnotation(java.lang.Class)\">getAnnotation</A></CODE> in interface <CODE><A HREF=\"../pkg/BaseInterface.html\" title=\"interface in pkg\">BaseInterface</A></CODE></DL>"},
-+ "<DT><STRONG>Specified by:</STRONG><DD><CODE><A HREF=\"../pkg/BaseInterface.html#getAnnotation(java.lang.Class)\">getAnnotation</A></CODE> in interface <CODE><A HREF=\"../pkg/BaseInterface.html\" title=\"interface in pkg\">BaseInterface</A></CODE></DL>"},
-
- // Test diamond inheritence member summary (6256068)
- {BUG_ID + FS + "diamond" + FS + "Z.html",
-diff --git a/test/com/sun/javadoc/testMemberSummary/TestMemberSummary.java b/test/com/sun/javadoc/testMemberSummary/TestMemberSummary.java
---- langtools/test/com/sun/javadoc/testMemberSummary/TestMemberSummary.java
-+++ langtools/test/com/sun/javadoc/testMemberSummary/TestMemberSummary.java
-@@ -50,14 +50,14 @@
- {BUG_ID + FS + "pkg" + FS + "PublicChild.html",
- "<CODE>&nbsp;<A HREF=\"../pkg/PublicChild.html\" " +
- "title=\"class in pkg\">PublicChild</A></CODE></FONT></TD>" + NL +
-- "<TD><CODE><B><A HREF=\"../pkg/PublicChild.html#" +
-- "returnTypeTest()\">returnTypeTest</A></B>()</CODE>"
-+ "<TD><CODE><STRONG><A HREF=\"../pkg/PublicChild.html#" +
-+ "returnTypeTest()\">returnTypeTest</A></STRONG>()</CODE>"
- },
- // Check return type in member detail.
- {BUG_ID + FS + "pkg" + FS + "PublicChild.html",
- "public <A HREF=\"../pkg/PublicChild.html\" " +
- "title=\"class in pkg\">PublicChild</A> " +
-- "<B>returnTypeTest</B>()"
-+ "<STRONG>returnTypeTest</STRONG>()"
- },
-
- // Legacy anchor dimensions (6290760)
-diff --git a/test/com/sun/javadoc/testNavagation/TestNavagation.java b/test/com/sun/javadoc/testNavagation/TestNavagation.java
---- langtools/test/com/sun/javadoc/testNavagation/TestNavagation.java
-+++ langtools/test/com/sun/javadoc/testNavagation/TestNavagation.java
-@@ -47,17 +47,17 @@
- private static final String[][] TEST = {
- {BUG_ID + FS + "pkg" + FS + "A.html", "&nbsp;PREV CLASS&nbsp;"},
- {BUG_ID + FS + "pkg" + FS + "A.html",
-- "<A HREF=\"../pkg/C.html\" title=\"class in pkg\"><B>NEXT CLASS</B></A>"},
-+ "<A HREF=\"../pkg/C.html\" title=\"class in pkg\"><STRONG>NEXT CLASS</STRONG></A>"},
- {BUG_ID + FS + "pkg" + FS + "C.html",
-- "<A HREF=\"../pkg/A.html\" title=\"annotation in pkg\"><B>PREV CLASS</B></A>"},
-+ "<A HREF=\"../pkg/A.html\" title=\"annotation in pkg\"><STRONG>PREV CLASS</STRONG></A>"},
- {BUG_ID + FS + "pkg" + FS + "C.html",
-- "<A HREF=\"../pkg/E.html\" title=\"enum in pkg\"><B>NEXT CLASS</B></A>"},
-+ "<A HREF=\"../pkg/E.html\" title=\"enum in pkg\"><STRONG>NEXT CLASS</STRONG></A>"},
- {BUG_ID + FS + "pkg" + FS + "E.html",
-- "<A HREF=\"../pkg/C.html\" title=\"class in pkg\"><B>PREV CLASS</B></A>"},
-+ "<A HREF=\"../pkg/C.html\" title=\"class in pkg\"><STRONG>PREV CLASS</STRONG></A>"},
- {BUG_ID + FS + "pkg" + FS + "E.html",
-- "<A HREF=\"../pkg/I.html\" title=\"interface in pkg\"><B>NEXT CLASS</B></A>"},
-+ "<A HREF=\"../pkg/I.html\" title=\"interface in pkg\"><STRONG>NEXT CLASS</STRONG></A>"},
- {BUG_ID + FS + "pkg" + FS + "I.html",
-- "<A HREF=\"../pkg/E.html\" title=\"enum in pkg\"><B>PREV CLASS</B></A>"},
-+ "<A HREF=\"../pkg/E.html\" title=\"enum in pkg\"><STRONG>PREV CLASS</STRONG></A>"},
- {BUG_ID + FS + "pkg" + FS + "I.html", "&nbsp;NEXT CLASS"},
- // Test for 4664607
- {BUG_ID + FS + "pkg" + FS + "I.html",
-diff --git a/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java b/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java
---- langtools/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java
-+++ langtools/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java
-@@ -54,14 +54,14 @@
- {BUG_ID + FS + "pkg" + FS + "Coin.html", "Enum Coin</H2>"},
- //Make sure enum signature is correct.
- {BUG_ID + FS + "pkg" + FS + "Coin.html", "public enum "+
-- "<B>Coin</B><DT>extends java.lang.Enum&lt;" +
-+ "<STRONG>Coin</STRONG><DT>extends java.lang.Enum&lt;" +
- "<A HREF=\"../pkg/Coin.html\" title=\"enum in pkg\">Coin</A>&gt;"
- },
- //Check for enum constant section
-- {BUG_ID + FS + "pkg" + FS + "Coin.html", "<B>Enum Constant Summary</B>"},
-+ {BUG_ID + FS + "pkg" + FS + "Coin.html", "<STRONG>Enum Constant Summary</STRONG>"},
- //Detail for enum constant
- {BUG_ID + FS + "pkg" + FS + "Coin.html",
-- "<B><A HREF=\"../pkg/Coin.html#Dime\">Dime</A></B>"},
-+ "<STRONG><A HREF=\"../pkg/Coin.html#Dime\">Dime</A></STRONG>"},
- //Automatically insert documentation for values() and valueOf().
- {BUG_ID + FS + "pkg" + FS + "Coin.html",
- "Returns an array containing the constants of this enum type,"},
-@@ -79,11 +79,11 @@
- "Class TypeParameters&lt;E&gt;</H2>"},
- //Check class type parameters section.
- {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
-- "<DT><B>Type Parameters:</B><DD><CODE>E</CODE> - " +
-+ "<DT><STRONG>Type Parameters:</STRONG><DD><CODE>E</CODE> - " +
- "the type parameter for this class."},
- //Type parameters in @see/@link
- {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
-- "<DT><B>See Also:</B><DD><A HREF=\"../pkg/TypeParameters.html\" " +
-+ "<DT><STRONG>See Also:</STRONG><DD><A HREF=\"../pkg/TypeParameters.html\" " +
- "title=\"class in pkg\"><CODE>TypeParameters</CODE></A></DL>"},
- //Method that uses class type parameter.
- {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
-@@ -91,13 +91,13 @@
- "parameter in TypeParameters\">E</A>&nbsp;param)"},
- //Method type parameter section.
- {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
-- "<B>Type Parameters:</B><DD><CODE>T</CODE> - This is the first " +
-+ "<STRONG>Type Parameters:</STRONG><DD><CODE>T</CODE> - This is the first " +
- "type parameter.<DD><CODE>V</CODE> - This is the second type " +
- "parameter."},
- //Signature of method with type parameters
- {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
- "public &lt;T extends java.util.List,V&gt; " +
-- "java.lang.String[] <B>methodThatHasTypeParameters</B>"},
-+ "java.lang.String[] <STRONG>methodThatHasTypeParameters</STRONG>"},
- //Wildcard testing.
- {BUG_ID + FS + "pkg" + FS + "Wildcards.html",
- "<A HREF=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
-@@ -116,18 +116,18 @@
-
- //Signature of subclass that has type parameters.
- {BUG_ID + FS + "pkg" + FS + "TypeParameterSubClass.html",
-- "public class <B>TypeParameterSubClass&lt;T extends java.lang.String&gt;" +
-- "</B><DT>extends <A HREF=\"../pkg/TypeParameterSuperClass.html\" " +
-+ "public class <STRONG>TypeParameterSubClass&lt;T extends java.lang.String&gt;" +
-+ "</STRONG><DT>extends <A HREF=\"../pkg/TypeParameterSuperClass.html\" " +
- "title=\"class in pkg\">TypeParameterSuperClass</A>&lt;T&gt;"},
-
- //Interface generic parameter substitution
- //Signature of subclass that has type parameters.
- {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
-- "<B>All Implemented Interfaces:</B> <DD><A HREF=\"../pkg/SubInterface.html\" title=\"interface in pkg\">SubInterface</A>&lt;E&gt;, <A HREF=\"../pkg/SuperInterface.html\" title=\"interface in pkg\">SuperInterface</A>&lt;E&gt;</DD>"},
-+ "<STRONG>All Implemented Interfaces:</STRONG> <DD><A HREF=\"../pkg/SubInterface.html\" title=\"interface in pkg\">SubInterface</A>&lt;E&gt;, <A HREF=\"../pkg/SuperInterface.html\" title=\"interface in pkg\">SuperInterface</A>&lt;E&gt;</DD>"},
- {BUG_ID + FS + "pkg" + FS + "SuperInterface.html",
-- "<B>All Known Subinterfaces:</B> <DD><A HREF=\"../pkg/SubInterface.html\" title=\"interface in pkg\">SubInterface</A>&lt;V&gt;</DD>"},
-+ "<STRONG>All Known Subinterfaces:</STRONG> <DD><A HREF=\"../pkg/SubInterface.html\" title=\"interface in pkg\">SubInterface</A>&lt;V&gt;</DD>"},
- {BUG_ID + FS + "pkg" + FS + "SubInterface.html",
-- "<B>All Superinterfaces:</B> <DD><A HREF=\"../pkg/SuperInterface.html\" title=\"interface in pkg\">SuperInterface</A>&lt;V&gt;</DD>"},
-+ "<STRONG>All Superinterfaces:</STRONG> <DD><A HREF=\"../pkg/SuperInterface.html\" title=\"interface in pkg\">SuperInterface</A>&lt;V&gt;</DD>"},
-
- //=================================
- // VAR ARG TESTING
-@@ -155,18 +155,18 @@
- "Annotation Type AnnotationType</H2>"},
- //Make sure the signature is correct.
- {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
-- "public @interface <B>AnnotationType</B>"},
-+ "public @interface <STRONG>AnnotationType</STRONG>"},
- //Make sure member summary headings are correct.
- {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
-- "<B>Required Element Summary</B>"},
-+ "<STRONG>Required Element Summary</STRONG>"},
- {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
-- "<B>Optional Element Summary</B>"},
-+ "<STRONG>Optional Element Summary</STRONG>"},
- //Make sure element detail heading is correct
- {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
- "Element Detail"},
- //Make sure default annotation type value is printed when necessary.
- {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
-- "<B>Default:</B><DD>\"unknown\"</DD>"},
-+ "<STRONG>Default:</STRONG><DD>\"unknown\"</DD>"},
-
- //=================================
- // ANNOTATION TYPE USAGE TESTING
-@@ -182,40 +182,40 @@
- "<FONT SIZE=\"-1\">" +
- "<A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Class Annotation\","+NL +
- " <A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)"+NL +
-- "</FONT>public class <B>AnnotationTypeUsage</B><DT>extends java.lang.Object</DL>"},
-+ "</FONT>public class <STRONG>AnnotationTypeUsage</STRONG><DT>extends java.lang.Object</DL>"},
-
- //FIELD
- {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
- "<FONT SIZE=\"-1\">" +
- "<A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Field Annotation\","+NL +
- " <A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)"+NL +
-- "</FONT>public int <B>field</B>"},
-+ "</FONT>public int <STRONG>field</STRONG>"},
-
- //CONSTRUCTOR
- {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
- "<FONT SIZE=\"-1\">" +
- "<A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Constructor Annotation\","+NL +
- " <A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)"+NL +
-- "</FONT>public <B>AnnotationTypeUsage</B>()"},
-+ "</FONT>public <STRONG>AnnotationTypeUsage</STRONG>()"},
-
- //METHOD
- {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
- "<FONT SIZE=\"-1\">" +
- "<A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Method Annotation\","+NL +
- " <A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)"+NL +
-- "</FONT>public void <B>method</B>()"},
-+ "</FONT>public void <STRONG>method</STRONG>()"},
-
- //METHOD PARAMS
- {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
- "<PRE>" + NL +
-- "public void <B>methodWithParams</B>(<FONT SIZE=\"-1\"><A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Parameter Annotation\",<A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)</FONT>" + NL +
-+ "public void <STRONG>methodWithParams</STRONG>(<FONT SIZE=\"-1\"><A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Parameter Annotation\",<A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)</FONT>" + NL +
- " int&nbsp;documented," + NL +
- " int&nbsp;undocmented)</PRE>"},
-
- //CONSTRUCTOR PARAMS
- {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
- "<PRE>" + NL +
-- "public <B>AnnotationTypeUsage</B>(<FONT SIZE=\"-1\"><A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Constructor Param Annotation\",<A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)</FONT>" + NL +
-+ "public <STRONG>AnnotationTypeUsage</STRONG>(<FONT SIZE=\"-1\"><A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Constructor Param Annotation\",<A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)</FONT>" + NL +
- " int&nbsp;documented," + NL +
- " int&nbsp;undocmented)</PRE>"},
-
-@@ -270,7 +270,7 @@
- {BUG_ID + FS + "pkg1" + FS + "B.html",
- "<PRE><FONT SIZE=\"-1\"><A HREF=\"../pkg1/A.html\" title=\"annotation in pkg1\">@A</A>"},
- {BUG_ID + FS + "pkg1" + FS + "B.html",
-- "</FONT>public interface <B>B</B></DL>" + NL +
-+ "</FONT>public interface <STRONG>B</STRONG></DL>" + NL +
- "</PRE>"},
-
-
-@@ -278,7 +278,7 @@
- // Handle multiple bounds.
- //==============================================================
- {BUG_ID + FS + "pkg" + FS + "MultiTypeParameters.html",
-- "public &lt;T extends java.lang.Number & java.lang.Runnable&gt; T <B>foo</B>(T&nbsp;t)"},
-+ "public &lt;T extends java.lang.Number & java.lang.Runnable&gt; T <STRONG>foo</STRONG>(T&nbsp;t)"},
-
- //==============================================================
- // Test Class-Use Documenation for Type Parameters.
-@@ -289,13 +289,13 @@
- "<TH ALIGN=\"left\" COLSPAN=\"2\">Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</A></FONT></TH>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html",
-- "<TD><CODE><B><A HREF=\"../../pkg2/ClassUseTest1.html\" title=\"class in pkg2\">ClassUseTest1&lt;T extends Foo & Foo2&gt;</A></B></CODE>"
-+ "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest1.html\" title=\"class in pkg2\">ClassUseTest1&lt;T extends Foo & Foo2&gt;</A></STRONG></CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html",
- "<TH ALIGN=\"left\" COLSPAN=\"2\">Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</A></FONT></TH>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html",
-- "<TD><CODE><B>ClassUseTest1.</B><B><A HREF=\"../../pkg2/ClassUseTest1.html#method(T)\">method</A></B>(T&nbsp;t)</CODE>"
-+ "<TD><CODE><STRONG>ClassUseTest1.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest1.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html",
- "<TH ALIGN=\"left\" COLSPAN=\"2\">Fields in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</A></FONT></TH>"
-@@ -315,13 +315,13 @@
- "<TH ALIGN=\"left\" COLSPAN=\"2\">Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/Foo2.html\" title=\"interface in pkg2\">Foo2</A></FONT></TH>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo2.html",
-- "<TD><CODE><B><A HREF=\"../../pkg2/ClassUseTest1.html\" title=\"class in pkg2\">ClassUseTest1&lt;T extends Foo & Foo2&gt;</A></B></CODE>"
-+ "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest1.html\" title=\"class in pkg2\">ClassUseTest1&lt;T extends Foo & Foo2&gt;</A></STRONG></CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo2.html",
- "<TH ALIGN=\"left\" COLSPAN=\"2\">Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/Foo2.html\" title=\"interface in pkg2\">Foo2</A></FONT></TH>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo2.html",
-- "<TD><CODE><B>ClassUseTest1.</B><B><A HREF=\"../../pkg2/ClassUseTest1.html#method(T)\">method</A></B>(T&nbsp;t)</CODE>"
-+ "<TD><CODE><STRONG>ClassUseTest1.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest1.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
- },
-
- //ClassUseTest2: <T extends ParamTest<Foo3>>
-@@ -329,13 +329,13 @@
- "<TH ALIGN=\"left\" COLSPAN=\"2\">Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A></FONT></TH>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
-- "<TD><CODE><B><A HREF=\"../../pkg2/ClassUseTest2.html\" title=\"class in pkg2\">ClassUseTest2&lt;T extends ParamTest&lt;<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A>&gt;&gt;</A></B></CODE>"
-+ "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest2.html\" title=\"class in pkg2\">ClassUseTest2&lt;T extends ParamTest&lt;<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A>&gt;&gt;</A></STRONG></CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
- "<TH ALIGN=\"left\" COLSPAN=\"2\">Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A></FONT></TH>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
-- "<TD><CODE><B>ClassUseTest2.</B><B><A HREF=\"../../pkg2/ClassUseTest2.html#method(T)\">method</A></B>(T&nbsp;t)</CODE>"
-+ "<TD><CODE><STRONG>ClassUseTest2.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest2.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
- "<TH ALIGN=\"left\" COLSPAN=\"2\">Fields in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> declared as <A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A></FONT></TH>"
-@@ -354,13 +354,13 @@
- "<TH ALIGN=\"left\" COLSPAN=\"2\">Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A></FONT></TH>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html",
-- "<TD><CODE><B><A HREF=\"../../pkg2/ClassUseTest2.html\" title=\"class in pkg2\">ClassUseTest2&lt;T extends ParamTest&lt;<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A>&gt;&gt;</A></B></CODE>"
-+ "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest2.html\" title=\"class in pkg2\">ClassUseTest2&lt;T extends ParamTest&lt;<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A>&gt;&gt;</A></STRONG></CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html",
- "<TH ALIGN=\"left\" COLSPAN=\"2\">Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A></FONT></TH>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html",
-- "<TD><CODE><B>ClassUseTest2.</B><B><A HREF=\"../../pkg2/ClassUseTest2.html#method(T)\">method</A></B>(T&nbsp;t)</CODE>"
-+ "<TD><CODE><STRONG>ClassUseTest2.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest2.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html",
- "<TH ALIGN=\"left\" COLSPAN=\"2\">Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> that return types with arguments of type <A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A></FONT></TH>"
-@@ -374,13 +374,13 @@
- "<TH ALIGN=\"left\" COLSPAN=\"2\">Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">ParamTest2</A></FONT></TH>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html",
-- "<TD><CODE><B><A HREF=\"../../pkg2/ClassUseTest3.html\" title=\"class in pkg2\">ClassUseTest3&lt;T extends ParamTest2&lt;java.util.List&lt;? extends Foo4&gt;&gt;&gt;</A></B></CODE>"
-+ "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html\" title=\"class in pkg2\">ClassUseTest3&lt;T extends ParamTest2&lt;java.util.List&lt;? extends Foo4&gt;&gt;&gt;</A></STRONG></CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html",
- "<TH ALIGN=\"left\" COLSPAN=\"2\">Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">ParamTest2</A></FONT></TH>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html",
-- "<TD><CODE><B>ClassUseTest3.</B><B><A HREF=\"../../pkg2/ClassUseTest3.html#method(T)\">method</A></B>(T&nbsp;t)</CODE>"
-+ "<TD><CODE><STRONG>ClassUseTest3.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html",
- "<TH ALIGN=\"left\" COLSPAN=\"2\">Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">ParamTest2</A></FONT></TH>"
-@@ -393,13 +393,13 @@
- "<TH ALIGN=\"left\" COLSPAN=\"2\">Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</A></FONT></TH>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
-- "<TD><CODE><B><A HREF=\"../../pkg2/ClassUseTest3.html\" title=\"class in pkg2\">ClassUseTest3&lt;T extends ParamTest2&lt;java.util.List&lt;? extends Foo4&gt;&gt;&gt;</A></B></CODE>"
-+ "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html\" title=\"class in pkg2\">ClassUseTest3&lt;T extends ParamTest2&lt;java.util.List&lt;? extends Foo4&gt;&gt;&gt;</A></STRONG></CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
- "<TH ALIGN=\"left\" COLSPAN=\"2\">Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</A></FONT></TH>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
-- "<TD><CODE><B>ClassUseTest3.</B><B><A HREF=\"../../pkg2/ClassUseTest3.html#method(T)\">method</A></B>(T&nbsp;t)</CODE>"
-+ "<TD><CODE><STRONG>ClassUseTest3.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
- "<TH ALIGN=\"left\" COLSPAN=\"2\">Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> that return types with arguments of type <A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</A></FONT></TH>"
-@@ -415,13 +415,13 @@
- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
- "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
- "<CODE>&nbsp;void</CODE></FONT></TD>" + NL +
-- "<TD><CODE><B>ClassUseTest3.</B><B><A HREF=\"../../pkg2/ClassUseTest3.html#method(java.util.Set)\">method</A></B>(java.util.Set&lt;<A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</A>&gt;&nbsp;p)</CODE>"
-+ "<TD><CODE><STRONG>ClassUseTest3.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html#method(java.util.Set)\">method</A></STRONG>(java.util.Set&lt;<A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</A>&gt;&nbsp;p)</CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
- "<TH ALIGN=\"left\" COLSPAN=\"2\">Constructor parameters in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type arguments of type <A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</A></FONT></TH>" + NL +
- "</TR>" + NL +
- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-- "<TD><CODE><B><A HREF=\"../../pkg2/ClassUseTest3.html#ClassUseTest3(java.util.Set)\">ClassUseTest3</A></B>(java.util.Set&lt;<A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</A>&gt;&nbsp;p)</CODE>"
-+ "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html#ClassUseTest3(java.util.Set)\">ClassUseTest3</A></STRONG>(java.util.Set&lt;<A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</A>&gt;&nbsp;p)</CODE>"
- },
-
- //=================================
-@@ -432,7 +432,7 @@
- "Packages with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" title=\"annotation in pkg\">AnnotationType</A></FONT></TH>" + NL +
- "</TR>" + NL +
- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-- "<TD><A HREF=\"../../pkg/package-summary.html\"><B>pkg</B></A></TD>"
-+ "<TD><A HREF=\"../../pkg/package-summary.html\"><STRONG>pkg</STRONG></A></TD>"
- },
-
- {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
-@@ -441,7 +441,7 @@
- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
- "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
- "<CODE>&nbsp;class</CODE></FONT></TD>" + NL +
-- "<TD><CODE><B><A HREF=\"../../pkg/AnnotationTypeUsage.html\" title=\"class in pkg\">AnnotationTypeUsage</A></B></CODE>"
-+ "<TD><CODE><STRONG><A HREF=\"../../pkg/AnnotationTypeUsage.html\" title=\"class in pkg\">AnnotationTypeUsage</A></STRONG></CODE>"
- },
-
- {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
-@@ -450,7 +450,7 @@
- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
- "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
- "<CODE>&nbsp;int</CODE></FONT></TD>" + NL +
-- "<TD><CODE><B>AnnotationTypeUsage.</B><B><A HREF=\"../../pkg/AnnotationTypeUsage.html#field\">field</A></B></CODE>"
-+ "<TD><CODE><STRONG>AnnotationTypeUsage.</STRONG><STRONG><A HREF=\"../../pkg/AnnotationTypeUsage.html#field\">field</A></STRONG></CODE>"
- },
-
- {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
-@@ -459,7 +459,7 @@
- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
- "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
- "<CODE>&nbsp;void</CODE></FONT></TD>" + NL +
-- "<TD><CODE><B>AnnotationTypeUsage.</B><B><A HREF=\"../../pkg/AnnotationTypeUsage.html#method()\">method</A></B>()</CODE>"
-+ "<TD><CODE><STRONG>AnnotationTypeUsage.</STRONG><STRONG><A HREF=\"../../pkg/AnnotationTypeUsage.html#method()\">method</A></STRONG>()</CODE>"
- },
-
- {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
-@@ -468,7 +468,7 @@
- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
- "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
- "<CODE>&nbsp;void</CODE></FONT></TD>" + NL +
-- "<TD><CODE><B>AnnotationTypeUsage.</B><B><A HREF=\"../../pkg/AnnotationTypeUsage.html#methodWithParams(int, int)\">methodWithParams</A></B>(int&nbsp;documented," + NL +
-+ "<TD><CODE><STRONG>AnnotationTypeUsage.</STRONG><STRONG><A HREF=\"../../pkg/AnnotationTypeUsage.html#methodWithParams(int, int)\">methodWithParams</A></STRONG>(int&nbsp;documented," + NL +
- " int&nbsp;undocmented)</CODE>"
- },
-
-@@ -476,14 +476,14 @@
- "Constructors in <A HREF=\"../../pkg/package-summary.html\">pkg</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" title=\"annotation in pkg\">AnnotationType</A></FONT></TH>" + NL +
- "</TR>" + NL +
- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-- "<TD><CODE><B><A HREF=\"../../pkg/AnnotationTypeUsage.html#AnnotationTypeUsage()\">AnnotationTypeUsage</A></B>()</CODE>"
-+ "<TD><CODE><STRONG><A HREF=\"../../pkg/AnnotationTypeUsage.html#AnnotationTypeUsage()\">AnnotationTypeUsage</A></STRONG>()</CODE>"
- },
-
- {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
- "Constructor parameters in <A HREF=\"../../pkg/package-summary.html\">pkg</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" title=\"annotation in pkg\">AnnotationType</A></FONT></TH>" + NL +
- "</TR>" + NL +
- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-- "<TD><CODE><B><A HREF=\"../../pkg/AnnotationTypeUsage.html#AnnotationTypeUsage(int, int)\">AnnotationTypeUsage</A></B>(int&nbsp;documented," + NL +
-+ "<TD><CODE><STRONG><A HREF=\"../../pkg/AnnotationTypeUsage.html#AnnotationTypeUsage(int, int)\">AnnotationTypeUsage</A></STRONG>(int&nbsp;documented," + NL +
- " int&nbsp;undocmented)</CODE>"
- },
-
-@@ -491,13 +491,13 @@
- // TYPE PARAMETER IN INDEX
- //=================================
- {BUG_ID + FS + "index-all.html",
-- "<A HREF=\"./pkg2/Foo.html#method(java.util.Vector)\"><B>method(Vector&lt;Object&gt;)</B></A>"
-+ "<A HREF=\"./pkg2/Foo.html#method(java.util.Vector)\"><STRONG>method(Vector&lt;Object&gt;)</STRONG></A>"
- },
- //=================================
- // TYPE PARAMETER IN INDEX
- //=================================
- {BUG_ID + FS + "index-all.html",
-- "<A HREF=\"./pkg2/Foo.html#method(java.util.Vector)\"><B>method(Vector&lt;Object&gt;)</B></A>"
-+ "<A HREF=\"./pkg2/Foo.html#method(java.util.Vector)\"><STRONG>method(Vector&lt;Object&gt;)</STRONG></A>"
- },
- };
- private static final String[][] NEGATED_TEST = {
-@@ -505,7 +505,7 @@
- // ENUM TESTING
- //=================================
- //NO constructor section
-- {BUG_ID + FS + "pkg" + FS + "Coin.html", "<B>Constructor Summary</B>"},
-+ {BUG_ID + FS + "pkg" + FS + "Coin.html", "<STRONG>Constructor Summary</STRONG>"},
- //=================================
- // TYPE PARAMETER TESTING
- //=================================
-@@ -525,28 +525,28 @@
- "<FONT SIZE=\"-1\">" + NL +
- "<A HREF=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</A>(<A HREF=\"../pkg/AnnotationType.html#optional\">optional</A>=\"Class Annotation\"," + NL +
- " <A HREF=\"../pkg/AnnotationType.html#required\">required</A>=1994)" + NL +
-- "</FONT>public class <B>AnnotationTypeUsage</B><DT>extends java.lang.Object</DL>"},
-+ "</FONT>public class <STRONG>AnnotationTypeUsage</STRONG><DT>extends java.lang.Object</DL>"},
-
- //FIELD
- {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
- "<FONT SIZE=\"-1\">" + NL +
- "<A HREF=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</A>(<A HREF=\"../pkg/AnnotationType.html#optional\">optional</A>=\"Field Annotation\"," + NL +
- " <A HREF=\"../pkg/AnnotationType.html#required\">required</A>=1994)" + NL +
-- "</FONT>public int <B>field</B>"},
-+ "</FONT>public int <STRONG>field</STRONG>"},
-
- //CONSTRUCTOR
- {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
- "<FONT SIZE=\"-1\">" + NL +
- "<A HREF=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</A>(<A HREF=\"../pkg/AnnotationType.html#optional\">optional</A>=\"Constructor Annotation\"," + NL +
- " <A HREF=\"../pkg/AnnotationType.html#required\">required</A>=1994)" + NL +
-- "</FONT>public <B>AnnotationTypeUsage</B>()"},
-+ "</FONT>public <STRONG>AnnotationTypeUsage</STRONG>()"},
-
- //METHOD
- {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
- "<FONT SIZE=\"-1\">" + NL +
- "<A HREF=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</A>(<A HREF=\"../pkg/AnnotationType.html#optional\">optional</A>=\"Method Annotation\"," + NL +
- " <A HREF=\"../pkg/AnnotationType.html#required\">required</A>=1994)" + NL +
-- "</FONT>public void <B>method</B>()"},
-+ "</FONT>public void <STRONG>method</STRONG>()"},
-
- //=================================
- // Make sure annotation types do not
-diff --git a/test/com/sun/javadoc/testOverridenMethods/TestOverridenMethodDocCopy.java b/test/com/sun/javadoc/testOverridenMethods/TestOverridenMethodDocCopy.java
---- langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenMethodDocCopy.java
-+++ langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenMethodDocCopy.java
-@@ -46,9 +46,9 @@
- //Input for string search tests.
- private static final String[][] TEST = {
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "<B>Description copied from class: <CODE>" +
-+ "<STRONG>Description copied from class: <CODE>" +
- "<A HREF=\"../pkg1/BaseClass.html#overridenMethodWithDocsToCopy()\">" +
-- "BaseClass</A></CODE></B>"
-+ "BaseClass</A></CODE></STRONG>"
- }
- };
- private static final String[][] NEGATED_TEST = NO_TEST;
-diff --git a/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethods.java b/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethods.java
---- langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethods.java
-+++ langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethods.java
-@@ -40,11 +40,11 @@
- private static final String[][] TEST = {
- //The public method should be overriden
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</B><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
-+ "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
-
- //The public method in different package should be overriden
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</B><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"}
-+ "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"}
- };
-
- private static final String[][] NEGATED_TEST = {
-@@ -52,20 +52,20 @@
- //The package private method should be overriden since the base and sub class are in the same
- //package. However, the link should not show up because the package private methods are not documented.
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</B><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"},
-+ "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"},
-
- //The private method in should not be overriden
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</B><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-+ "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-
- //The private method in different package should not be overriden
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</B><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-+ "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-
- //The package private method should not be overriden since the base and sub class are in
- //different packages.
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</B><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"}
-+ "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"}
- };
-
- private static final String[] ARGS =
-diff --git a/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPackageFlag.java b/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPackageFlag.java
---- langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPackageFlag.java
-+++ langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPackageFlag.java
-@@ -40,32 +40,32 @@
- private static final String[][] TEST = {
- //The public method should be overriden
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</B><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
-+ "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
-
- //The public method in different package should be overriden
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</B><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
-+ "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
-
- //The package private method should be overriden since the base and sub class are in the same
- //package.
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</B><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"}
-+ "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"}
- };
-
- private static final String[][] NEGATED_TEST = {
-
- //The private method in should not be overriden
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</B><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-+ "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-
- //The private method in different package should not be overriden
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</B><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-+ "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-
- //The package private method should not be overriden since the base and sub class are in
- //different packages.
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</B><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"},
-+ "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"},
- };
-
- private static final String[] ARGS =
-diff --git a/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPrivateFlag.java b/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPrivateFlag.java
---- langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPrivateFlag.java
-+++ langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPrivateFlag.java
-@@ -40,32 +40,32 @@
- private static final String[][] TEST = {
- //The public method should be overriden
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</B><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
-+ "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
-
- //The package private method should be overriden since the base and sub class are in the same
- //package.
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</B><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"},
-+ "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"},
-
- //The public method in different package should be overriden
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</B><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
-+ "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
- };
-
- private static final String[][] NEGATED_TEST = {
-
- //The private method in should not be overriden
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</B><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-+ "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-
- //The private method in different package should not be overriden
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</B><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-+ "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-
- //The package private method should not be overriden since the base and sub class are in
- //different packages.
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</B><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"}
-+ "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"}
-
-
- };
-diff --git a/test/com/sun/javadoc/testPackagePage/TestPackagePage.java b/test/com/sun/javadoc/testPackagePage/TestPackagePage.java
---- langtools/test/com/sun/javadoc/testPackagePage/TestPackagePage.java
-+++ langtools/test/com/sun/javadoc/testPackagePage/TestPackagePage.java
-@@ -43,23 +43,24 @@
- },
- //With just one package, all general pages link to the single package page.
- {BUG_ID + "-1" + FS + "com" + FS + "pkg" + FS + "C.html",
-- "<A HREF=\"../../com/pkg/package-summary.html\">" + "<FONT CLASS=\"NavBarFont1\"><B>Package</B></FONT></A>"
-+ "<A HREF=\"../../com/pkg/package-summary.html\">" +
-+ "<FONT CLASS=\"NavBarFont1\"><STRONG>Package</STRONG></FONT></A>"
- },
- {BUG_ID + "-1" + FS + "com" + FS + "pkg" + FS + "package-tree.html",
- "<A HREF=\"../../com/pkg/package-summary.html\">" +
-- "<FONT CLASS=\"NavBarFont1\"><B>Package</B></FONT></A>"
-+ "<FONT CLASS=\"NavBarFont1\"><STRONG>Package</STRONG></FONT></A>"
- },
- {BUG_ID + "-1" + FS + "deprecated-list.html",
- "<A HREF=\"com/pkg/package-summary.html\">" +
-- "<FONT CLASS=\"NavBarFont1\"><B>Package</B></FONT></A>"
-+ "<FONT CLASS=\"NavBarFont1\"><STRONG>Package</STRONG></FONT></A>"
- },
- {BUG_ID + "-1" + FS + "index-all.html",
- "<A HREF=\"./com/pkg/package-summary.html\">" +
-- "<FONT CLASS=\"NavBarFont1\"><B>Package</B></FONT></A>"
-+ "<FONT CLASS=\"NavBarFont1\"><STRONG>Package</STRONG></FONT></A>"
- },
- {BUG_ID + "-1" + FS + "help-doc.html",
- "<A HREF=\"com/pkg/package-summary.html\">" +
-- "<FONT CLASS=\"NavBarFont1\"><B>Package</B></FONT></A>"
-+ "<FONT CLASS=\"NavBarFont1\"><STRONG>Package</STRONG></FONT></A>"
- },
- };
-
-diff --git a/test/com/sun/javadoc/testParamTaglet/TestParamTaglet.java b/test/com/sun/javadoc/testParamTaglet/TestParamTaglet.java
---- langtools/test/com/sun/javadoc/testParamTaglet/TestParamTaglet.java
-+++ langtools/test/com/sun/javadoc/testParamTaglet/TestParamTaglet.java
-@@ -48,12 +48,12 @@
- private static final String[][] TEST = {
- //Regular param tags.
- {BUG_ID + FS + "pkg" + FS + "C.html",
-- "<B>Parameters:</B><DD><CODE>param1</CODE> - testing 1 2 3." +
-+ "<STRONG>Parameters:</STRONG><DD><CODE>param1</CODE> - testing 1 2 3." +
- "<DD><CODE>param2</CODE> - testing 1 2 3."
- },
- //Param tags that don't match with any real parameters.
- {BUG_ID + FS + "pkg" + FS + "C.html",
-- "<B>Parameters:</B><DD><CODE><I>p1</I></CODE> - testing 1 2 3." +
-+ "<STRONG>Parameters:</STRONG><DD><CODE><I>p1</I></CODE> - testing 1 2 3." +
- "<DD><CODE><I>p2</I></CODE> - testing 1 2 3."
- },
- //{@inherit} doc misuse does not cause doclet to throw exception.
-diff --git a/test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java b/test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java
---- langtools/test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java
-+++ langtools/test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java
-@@ -85,22 +85,22 @@
- "<PRE>" + NL +
- "java.lang.Object" + NL +
- " <IMG SRC=\"../resources/inherit.gif\" " +
-- "ALT=\"extended by \"><B>pkg.PublicChild</B>" + NL +
-+ "ALT=\"extended by \"><STRONG>pkg.PublicChild</STRONG>" + NL +
- "</PRE>"
- },
-
- // Method is documented as though it is declared in the inheriting method.
- {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
-- "public void <B>methodInheritedFromParent</B>(int&nbsp;p1)"
-+ "public void <STRONG>methodInheritedFromParent</STRONG>(int&nbsp;p1)"
- },
-
- //Make sure implemented interfaces from private superclass are inherited
- {BUG_ID + "-1" + FS + "pkg" + FS + "PublicInterface.html",
-- "<B>All Known Implementing Classes:</B> <DD><A HREF=\"../pkg/PublicChild.html\" " +
-+ "<STRONG>All Known Implementing Classes:</STRONG> <DD><A HREF=\"../pkg/PublicChild.html\" " +
- "title=\"class in pkg\">PublicChild</A>"},
-
- {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
-- "<B>All Implemented Interfaces:</B> <DD><A HREF=\"../pkg/PublicInterface.html\" " +
-+ "<STRONG>All Implemented Interfaces:</STRONG> <DD><A HREF=\"../pkg/PublicInterface.html\" " +
- "title=\"interface in pkg\">PublicInterface</A>"},
-
- //Generic interface method test.
-@@ -110,12 +110,12 @@
- private static final String[][] NEGATED_TEST1 = {
- // Should not document that a method overrides method from private class.
- {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
-- "<B>Overrides:</B>"},
-+ "<STRONG>Overrides:</STRONG>"},
- // Should not document that a method specified by private interface.
- {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
-- "<B>Specified by:</B>"},
-+ "<STRONG>Specified by:</STRONG>"},
- {BUG_ID + "-1" + FS + "pkg" + FS + "PublicInterface.html",
-- "<B>Specified by:</B>"},
-+ "<STRONG>Specified by:</STRONG>"},
- // Should not mention that any documentation was copied.
- {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
- "Description copied from"},
-@@ -137,7 +137,7 @@
- //Do not inherit private interface method with generic parameters.
- //This method has been implemented.
- {BUG_ID + "-1" + FS + "pkg2" + FS + "C.html",
-- "<B><A HREF=\"../pkg2/I.html#hello(T)\">hello</A></B>"},
-+ "<STRONG><A HREF=\"../pkg2/I.html#hello(T)\">hello</A></STRONG>"},
- };
-
- // Test output when -private flag is used.
-@@ -174,14 +174,14 @@
- },
- // Should document that a method overrides method from private class.
- {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
-- "<B>Overrides:</B><DD><CODE>" +
-+ "<STRONG>Overrides:</STRONG><DD><CODE>" +
- "<A HREF=\"../pkg/PrivateParent.html#methodOverridenFromParent(char[], int, T, V, java.util.List)\">" +
- "methodOverridenFromParent</A></CODE> in class <CODE>" +
- "<A HREF=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" +
- "PrivateParent</A></CODE></DL>"},
- // Should document that a method is specified by private interface.
- {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
-- "<B>Specified by:</B><DD><CODE>" +
-+ "<STRONG>Specified by:</STRONG><DD><CODE>" +
- "<A HREF=\"../pkg/PrivateInterface.html#methodInterface(int)\">" +
- "methodInterface</A></CODE> in interface <CODE>" +
- "<A HREF=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" +
-@@ -209,12 +209,12 @@
-
- //Make sure implemented interfaces from private superclass are inherited
- {BUG_ID + "-2" + FS + "pkg" + FS + "PublicInterface.html",
-- "<B>All Known Implementing Classes:</B> <DD><A HREF=\"../pkg/PrivateParent.html\" " +
-+ "<STRONG>All Known Implementing Classes:</STRONG> <DD><A HREF=\"../pkg/PrivateParent.html\" " +
- "title=\"class in pkg\">PrivateParent</A>, " +
- "<A HREF=\"../pkg/PublicChild.html\" title=\"class in pkg\">PublicChild</A>"},
-
- {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
-- "<B>All Implemented Interfaces:</B> <DD><A HREF=\"../pkg/PrivateInterface.html\" " +
-+ "<STRONG>All Implemented Interfaces:</STRONG> <DD><A HREF=\"../pkg/PrivateInterface.html\" " +
- "title=\"interface in pkg\">PrivateInterface</A>, " +
- "<A HREF=\"../pkg/PublicInterface.html\" title=\"interface in pkg\">" +
- "PublicInterface</A>"},
-@@ -222,10 +222,13 @@
- //Since private flag is used, we can document that private interface method
- //with generic parameters has been implemented.
- {BUG_ID + "-2" + FS + "pkg2" + FS + "C.html",
-- "<B>Description copied from interface: " + "<CODE><A HREF=\"../pkg2/I.html#hello(T)\">I</A></CODE></B>"},
-+ "<STRONG>Description copied from interface: " +
-+ "<CODE><A HREF=\"../pkg2/I.html#hello(T)\">I</A></CODE></STRONG>"},
-
- {BUG_ID + "-2" + FS + "pkg2" + FS + "C.html",
-- "<B>Specified by:</B><DD><CODE><A HREF=\"../pkg2/I.html#hello(T)\">" + "hello</A></CODE> in interface <CODE><A HREF=\"../pkg2/I.html\" " + "title=\"interface in pkg2\">I</A>"},
-+ "<STRONG>Specified by:</STRONG><DD><CODE><A HREF=\"../pkg2/I.html#hello(T)\">" +
-+ "hello</A></CODE> in interface <CODE><A HREF=\"../pkg2/I.html\" " +
-+ "title=\"interface in pkg2\">I</A>"},
- };
- private static final String[][] NEGATED_TEST2 = NO_TEST;
-
-diff --git a/test/com/sun/javadoc/testSerializedForm/TestSerializedForm.java b/test/com/sun/javadoc/testSerializedForm/TestSerializedForm.java
---- langtools/test/com/sun/javadoc/testSerializedForm/TestSerializedForm.java
-+++ langtools/test/com/sun/javadoc/testSerializedForm/TestSerializedForm.java
-@@ -47,11 +47,11 @@
-
- private static final String[][] TEST = {
- {BUG_ID + FS + "serialized-form.html",
-- "protected java.lang.Object <B>readResolve</B>()"},
-+ "protected java.lang.Object <STRONG>readResolve</STRONG>()"},
- {BUG_ID + FS + "serialized-form.html",
-- "protected java.lang.Object <B>writeReplace</B>()"},
-+ "protected java.lang.Object <STRONG>writeReplace</STRONG>()"},
- {BUG_ID + FS + "serialized-form.html",
-- "protected java.lang.Object <B>readObjectNoData</B>()"},
-+ "protected java.lang.Object <STRONG>readObjectNoData</STRONG>()"},
- {BUG_ID + FS + "serialized-form.html",
- "See Also"},
- };
-diff --git a/test/com/sun/javadoc/testSimpleTag/TestSimpleTag.java b/test/com/sun/javadoc/testSimpleTag/TestSimpleTag.java
---- langtools/test/com/sun/javadoc/testSimpleTag/TestSimpleTag.java
-+++ langtools/test/com/sun/javadoc/testSimpleTag/TestSimpleTag.java
-@@ -42,13 +42,13 @@
- private static final String[][] TEST =
- new String[][] {
- {"./" + BUG_ID + "/C.html",
-- "<B>Todo:</B>"},
-+ "<STRONG>Todo:</STRONG>"},
- {"./" + BUG_ID + "/C.html",
-- "<B>EJB Beans:</B>"},
-+ "<STRONG>EJB Beans:</STRONG>"},
- {"./" + BUG_ID + "/C.html",
-- "<B>Regular Tag:</B>"},
-+ "<STRONG>Regular Tag:</STRONG>"},
- {"./" + BUG_ID + "/C.html",
-- "<B>Back-Slash-Tag:</B>"},
-+ "<STRONG>Back-Slash-Tag:</STRONG>"},
- };
-
- private static final String[] ARGS = new String[] {
-diff --git a/test/com/sun/javadoc/testSummaryHeading/TestSummaryHeading.java b/test/com/sun/javadoc/testSummaryHeading/TestSummaryHeading.java
---- langtools/test/com/sun/javadoc/testSummaryHeading/TestSummaryHeading.java
-+++ langtools/test/com/sun/javadoc/testSummaryHeading/TestSummaryHeading.java
-@@ -46,7 +46,7 @@
-
- //Input for string search tests.
- private static final String[][] TEST = {
-- {BUG_ID + FS + "C.html", "<B>Method Summary</B>"}
-+ {BUG_ID + FS + "C.html", "<STRONG>Method Summary</STRONG>"}
- };
- private static final String[][] NEGATED_TEST = NO_TEST;
-
-diff --git a/test/com/sun/javadoc/testThrowsHead/TestThrowsHead.java b/test/com/sun/javadoc/testThrowsHead/TestThrowsHead.java
---- langtools/test/com/sun/javadoc/testThrowsHead/TestThrowsHead.java
-+++ langtools/test/com/sun/javadoc/testThrowsHead/TestThrowsHead.java
-@@ -38,7 +38,7 @@
-
- private static final String BUG_ID = "4530727";
- private static final String[][] TEST = {
-- {BUG_ID + FS + "C.html", "<DT><B>Throws:</B>"}
-+ {BUG_ID + FS + "C.html", "<DT><STRONG>Throws:</STRONG>"}
- };
- private static final String[][] NEGATED_TEST = NO_TEST;
- private static final String[] ARGS = new String[] {
-diff --git a/test/com/sun/javadoc/testValueTag/TestValueTag.java b/test/com/sun/javadoc/testValueTag/TestValueTag.java
---- langtools/test/com/sun/javadoc/testValueTag/TestValueTag.java
-+++ langtools/test/com/sun/javadoc/testValueTag/TestValueTag.java
-@@ -88,7 +88,7 @@
- "Result: <A HREF=\"../pkg2/Class3.html#TEST_17_PASSES\">\"Test 17 passes\"</A>"},
- //Test @value tag used with custom tag.
- {BUG_ID + FS + "pkg1" + FS + "CustomTagUsage.html",
-- "<DT><B>Todo:</B></DT>" + NL +
-+ "<DT><STRONG>Todo:</STRONG></DT>" + NL +
- " <DD>the value of this constant is 55.</DD>"},
- //Test @value warning printed when used with non-constant.
- {WARNING_OUTPUT,"warning - @value tag (which references nonConstant) " +
diff --git a/java/openjdk6/files/icedtea/openjdk/6786682-wcag_lang.patch b/java/openjdk6/files/icedtea/openjdk/6786682-wcag_lang.patch
deleted file mode 100644
index 7bf290c8dae5..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/6786682-wcag_lang.patch
+++ /dev/null
@@ -1,274 +0,0 @@
-# HG changeset patch
-# User bpatel
-# Date 1232068871 28800
-# Node ID 92a90d8c955b6cc619d16975e02d9143715dedaa
-# Parent a50f3556d6954decf0897aa984c8ba43def77b9e
-6786682: Javadoc HTML WCAG 2.0 accessibility issues in standard doclet - HTML tag should have lang attribute
-Reviewed-by: jjg
-
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/ConfigurationImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/ConfigurationImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConfigurationImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConfigurationImpl.java
-@@ -493,4 +493,14 @@
- public Comparator getMemberComparator() {
- return null;
- }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public Locale getLocale() {
-+ if (root instanceof com.sun.tools.javadoc.RootDocImpl)
-+ return ((com.sun.tools.javadoc.RootDocImpl)root).getLocale();
-+ else
-+ return Locale.getDefault();
-+ }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java
-@@ -85,7 +85,7 @@
- * Print &lt;HTML&gt; tag. Add a newline character at the end.
- */
- public void html() {
-- println("<HTML>");
-+ println("<HTML lang=\"" + configuration.getLocale().getLanguage() + "\">");
- }
-
- /**
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/Configuration.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/Configuration.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/Configuration.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/Configuration.java
-@@ -707,6 +707,11 @@
- }
-
- /**
-+ * Return the Locale for this document.
-+ */
-+ public abstract Locale getLocale();
-+
-+ /**
- * Return the comparator that will be used to sort member documentation.
- * To no do any sorting, return null.
- *
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/SourceToHTMLConverter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/SourceToHTMLConverter.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/SourceToHTMLConverter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/SourceToHTMLConverter.java
-@@ -155,7 +155,7 @@
- reader.close();
- }
- output = addLineNumbers(output.toString());
-- output.insert(0, getHeader());
-+ output.insert(0, getHeader(configuration));
- output.append(getFooter());
- writeToFile(output.toString(), outputdir, cd.name(), configuration);
- } catch (Exception e){
-@@ -205,10 +205,11 @@
-
- /**
- * Get the header.
-+ * @param configuration the Doclet configuration
- * @return the header to the output file
- */
-- protected static String getHeader() {
-- StringBuffer result = new StringBuffer("<HTML>" + DocletConstants.NL);
-+ protected static String getHeader(Configuration configuration) {
-+ StringBuffer result = new StringBuffer("<HTML lang=\"" + configuration.getLocale().getLanguage() + "\">" + DocletConstants.NL);
- result.append("<BODY BGCOLOR=\""+ BGCOLOR + "\">" + DocletConstants.NL);
- result.append("<PRE>" + DocletConstants.NL);
- return result.toString();
-diff --git a/src/share/classes/com/sun/tools/javadoc/RootDocImpl.java b/src/share/classes/com/sun/tools/javadoc/RootDocImpl.java
---- langtools/src/share/classes/com/sun/tools/javadoc/RootDocImpl.java
-+++ langtools/src/share/classes/com/sun/tools/javadoc/RootDocImpl.java
-@@ -36,6 +36,7 @@
- import com.sun.tools.javac.util.List;
- import com.sun.tools.javac.util.ListBuffer;
- import com.sun.tools.javac.util.Position;
-+import java.util.Locale;
-
- /**
- * This class holds the information from one run of javadoc.
-@@ -361,4 +362,11 @@
- public Locale getLocale() {
- return env.doclocale.locale;
- }
-+
-+ /**
-+ * Return the locale provided by the user or the default locale value.
-+ */
-+ public Locale getLocale() {
-+ return env.doclocale.locale;
-+ }
- }
-diff --git a/test/com/sun/javadoc/testHtmlTag/TestHtmlTag.java b/test/com/sun/javadoc/testHtmlTag/TestHtmlTag.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testHtmlTag/TestHtmlTag.java
-@@ -0,0 +1,93 @@
-+/*
-+ * 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.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 6786682
-+ * @summary This test verifies the use of lang attribute by <HTML>.
-+ * @author Bhavesh Patel
-+ * @library ../lib/
-+ * @build JavadocTester
-+ * @build TestHtmlTag
-+ * @run main TestHtmlTag
-+ */
-+
-+import java.util.Locale;
-+
-+public class TestHtmlTag extends JavadocTester {
-+
-+ private static final String BUG_ID = "6786682";
-+ private static final String[][] TEST1 = {
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<HTML lang=\"" + Locale.getDefault().getLanguage() + "\">"},
-+ {BUG_ID + FS + "pkg1" + FS + "package-summary.html", "<HTML lang=\"" + Locale.getDefault().getLanguage() + "\">"}};
-+ private static final String[][] NEGATED_TEST1 = {
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<HTML>"}};
-+ private static final String[][] TEST2 = {
-+ {BUG_ID + FS + "pkg2" + FS + "C2.html", "<HTML lang=\"ja\">"},
-+ {BUG_ID + FS + "pkg2" + FS + "package-summary.html", "<HTML lang=\"ja\">"}};
-+ private static final String[][] NEGATED_TEST2 = {
-+ {BUG_ID + FS + "pkg2" + FS + "C2.html", "<HTML>"}};
-+ private static final String[][] TEST3 = {
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<HTML lang=\"en\">"},
-+ {BUG_ID + FS + "pkg1" + FS + "package-summary.html", "<HTML lang=\"en\">"}};
-+ private static final String[][] NEGATED_TEST3 = {
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<HTML>"}};
-+
-+ private static final String[] ARGS1 =
-+ new String[] {
-+ "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg1"};
-+ private static final String[] ARGS2 =
-+ new String[] {
-+ "-locale", "ja", "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg2"};
-+ private static final String[] ARGS3 =
-+ new String[] {
-+ "-locale", "en_US", "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg1"};
-+
-+ /**
-+ * The entry point of the test.
-+ * @param args the array of command line arguments.
-+ */
-+ public static void main(String[] args) {
-+ TestHtmlTag tester = new TestHtmlTag();
-+ run(tester, ARGS1, TEST1, NEGATED_TEST1);
-+ run(tester, ARGS2, TEST2, NEGATED_TEST2);
-+ run(tester, ARGS3, TEST3, NEGATED_TEST3);
-+ tester.printSummary();
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getBugId() {
-+ return BUG_ID;
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getBugName() {
-+ return getClass().getName();
-+ }
-+}
-diff --git a/test/com/sun/javadoc/testHtmlTag/pkg1/C1.java b/test/com/sun/javadoc/testHtmlTag/pkg1/C1.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testHtmlTag/pkg1/C1.java
-@@ -0,0 +1,33 @@
-+/*
-+ * 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 pkg1;
-+
-+public class C1 {
-+
-+ public void method(int param1, int param2) {
-+
-+ }
-+}
-diff --git a/test/com/sun/javadoc/testHtmlTag/pkg2/C2.java b/test/com/sun/javadoc/testHtmlTag/pkg2/C2.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testHtmlTag/pkg2/C2.java
-@@ -0,0 +1,31 @@
-+/*
-+ * 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 pkg2;
-+
-+/**
-+ * <B>Comments:</B> Class 2
-+ */
-+public class C2 {}
diff --git a/java/openjdk6/files/icedtea/openjdk/6786688-wcag_table.patch b/java/openjdk6/files/icedtea/openjdk/6786688-wcag_table.patch
deleted file mode 100644
index fb0dc47d499a..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/6786688-wcag_table.patch
+++ /dev/null
@@ -1,2828 +0,0 @@
-# HG changeset patch
-# User andrew
-# Date 1371572266 18000
-# Node ID 694e895f2b866d36ed7f8d4ea08ec64677d3fba1
-# Parent 9cad0410f52a47fdd3b294a10f076e7456a47e9a
-6786688: Javadoc HTML WCAG 2.0 accessibility issues in standard doclet - Table must have captions and headers
-Reviewed-by: jjg
-
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java
-@@ -60,7 +60,11 @@
-
- /*** abstracts ***/
-
-- public abstract void printSummaryLabel(ClassDoc cd);
-+ public abstract void printSummaryLabel();
-+
-+ public abstract void printTableSummary();
-+
-+ public abstract void printSummaryTableHeader(ProgramElementDoc member);
-
- public abstract void printInheritedSummaryLabel(ClassDoc cd);
-
-@@ -342,12 +346,13 @@
- * format for listing the API. Call methods from the sub-class to complete
- * the generation.
- */
-- protected void printDeprecatedAPI(List deprmembers, String headingKey) {
-+ protected void printDeprecatedAPI(List<Doc> deprmembers, String headingKey, String tableSummary, String[] tableHeader) {
- if (deprmembers.size() > 0) {
-- writer.tableIndexSummary();
-- writer.tableHeaderStart("#CCCCFF");
-- writer.strongText(headingKey);
-- writer.tableHeaderEnd();
-+ writer.tableIndexSummary(tableSummary);
-+ writer.tableCaptionStart();
-+ writer.printText(headingKey);
-+ writer.tableCaptionEnd();
-+ writer.summaryTableHeader(tableHeader, "col");
- for (int i = 0; i < deprmembers.size(); i++) {
- ProgramElementDoc member =(ProgramElementDoc)deprmembers.get(i);
- writer.trBgcolorStyle("white", "TableRowColor");
-@@ -370,19 +375,26 @@
- /**
- * Print use info.
- */
-- protected void printUseInfo(Object mems, String heading) {
-+ protected void printUseInfo(List<? extends ProgramElementDoc> mems, String heading, String tableSummary) {
- if (mems == null) {
- return;
- }
- List members = (List)mems;
-+ boolean printedUseTableHeader = false;
- if (members.size() > 0) {
-- writer.tableIndexSummary();
-- writer.tableUseInfoHeaderStart("#CCCCFF");
-+ writer.tableIndexSummary(tableSummary);
-+ writer.tableSubCaptionStart();
- writer.print(heading);
-- writer.tableHeaderEnd();
-+ writer.tableCaptionEnd();
- for (Iterator it = members.iterator(); it.hasNext(); ) {
- ProgramElementDoc pgmdoc = (ProgramElementDoc)it.next();
- ClassDoc cd = pgmdoc.containingClass();
-+ if (!printedUseTableHeader) {
-+ // Passing ProgramElementDoc helps decides printing
-+ // interface or class header in case of nested classes.
-+ this.printSummaryTableHeader(pgmdoc);
-+ printedUseTableHeader = true;
-+ }
-
- writer.printSummaryLinkType(this, pgmdoc);
- if (cd != null && !(pgmdoc instanceof ConstructorDoc)
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractPackageIndexWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractPackageIndexWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractPackageIndexWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractPackageIndexWriter.java
-@@ -35,6 +35,7 @@
- * generate overview-frame.html as well as overview-summary.html.
- *
- * @author Atul M Dambalkar
-+ * @author Bhavesh Patel (Modified)
- */
- public abstract class AbstractPackageIndexWriter extends HtmlDocletWriter {
-
-@@ -61,7 +62,7 @@
-
- protected abstract void printOverviewHeader();
-
-- protected abstract void printIndexHeader(String text);
-+ protected abstract void printIndexHeader(String text, String tableSummary);
-
- protected abstract void printIndexRow(PackageDoc pkg);
-
-@@ -101,7 +102,10 @@
- * Generate the frame or non-frame package index.
- */
- protected void generateIndex() {
-- printIndexContents(packages, "doclet.Package_Summary");
-+ printIndexContents(packages, "doclet.Package_Summary",
-+ configuration.getText("doclet.Member_Table_Summary",
-+ configuration.getText("doclet.Package_Summary"),
-+ configuration.getText("doclet.packages")));
- }
-
- /**
-@@ -111,10 +115,10 @@
- * @param packages Array of packages to be documented.
- * @param text String which will be used as the heading.
- */
-- protected void printIndexContents(PackageDoc[] packages, String text) {
-+ protected void printIndexContents(PackageDoc[] packages, String text, String tableSummary) {
- if (packages.length > 0) {
- Arrays.sort(packages);
-- printIndexHeader(text);
-+ printIndexHeader(text, tableSummary);
- printAllClassesPackagesLink();
- for(int i = 0; i < packages.length; i++) {
- if (packages[i] != null) {
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java
-@@ -34,6 +34,7 @@
- * Writes annotation type optional member documentation in HTML format.
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- */
- public class AnnotationTypeOptionalMemberWriterImpl extends
- AnnotationTypeRequiredMemberWriterImpl
-@@ -89,8 +90,27 @@
- /**
- * {@inheritDoc}
- */
-- public void printSummaryLabel(ClassDoc cd) {
-- writer.strongText("doclet.Annotation_Type_Optional_Member_Summary");
-+ public void printSummaryLabel() {
-+ writer.printText("doclet.Annotation_Type_Optional_Member_Summary");
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void printTableSummary() {
-+ writer.tableIndexSummary(configuration().getText("doclet.Member_Table_Summary",
-+ configuration().getText("doclet.Annotation_Type_Optional_Member_Summary"),
-+ configuration().getText("doclet.annotation_type_optional_members")));
-+ }
-+
-+ public void printSummaryTableHeader(ProgramElementDoc member) {
-+ String[] header = new String[] {
-+ writer.getModifierTypeHeader(),
-+ configuration().getText("doclet.0_and_1",
-+ configuration().getText("doclet.Annotation_Type_Optional_Member"),
-+ configuration().getText("doclet.Description"))
-+ };
-+ writer.summaryTableHeader(header, "col");
- }
-
- /**
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java
-@@ -34,6 +34,7 @@
- * Writes annotation type required member documentation in HTML format.
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- */
- public class AnnotationTypeRequiredMemberWriterImpl extends AbstractMemberWriter
- implements AnnotationTypeRequiredMemberWriter, MemberSummaryWriter {
-@@ -178,8 +179,27 @@
- /**
- * {@inheritDoc}
- */
-- public void printSummaryLabel(ClassDoc cd) {
-- writer.strongText("doclet.Annotation_Type_Required_Member_Summary");
-+ public void printSummaryLabel() {
-+ writer.printText("doclet.Annotation_Type_Required_Member_Summary");
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void printTableSummary() {
-+ writer.tableIndexSummary(configuration().getText("doclet.Member_Table_Summary",
-+ configuration().getText("doclet.Annotation_Type_Required_Member_Summary"),
-+ configuration().getText("doclet.annotation_type_required_members")));
-+ }
-+
-+ public void printSummaryTableHeader(ProgramElementDoc member) {
-+ String[] header = new String[] {
-+ writer.getModifierTypeHeader(),
-+ configuration().getText("doclet.0_and_1",
-+ configuration().getText("doclet.Annotation_Type_Required_Member"),
-+ configuration().getText("doclet.Description"))
-+ };
-+ writer.summaryTableHeader(header, "col");
- }
-
- /**
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java
-@@ -34,6 +34,7 @@
- * Generate class usage information.
- *
- * @author Robert G. Field
-+ * @author Bhavesh Patel (Modified)
- */
- public class ClassUseWriter extends SubWriterHolderWriter {
-
-@@ -65,6 +66,13 @@
- final ConstructorWriterImpl constrSubWriter;
- final FieldWriterImpl fieldSubWriter;
- final NestedClassWriterImpl classSubWriter;
-+ // Summary for various use tables.
-+ final String classUseTableSummary;
-+ final String subclassUseTableSummary;
-+ final String subinterfaceUseTableSummary;
-+ final String fieldUseTableSummary;
-+ final String methodUseTableSummary;
-+ final String constructorUseTableSummary;
-
-
- /**
-@@ -116,6 +124,18 @@
- constrSubWriter = new ConstructorWriterImpl(this);
- fieldSubWriter = new FieldWriterImpl(this);
- classSubWriter = new NestedClassWriterImpl(this);
-+ classUseTableSummary = configuration.getText("doclet.Use_Table_Summary",
-+ configuration.getText("doclet.classes"));
-+ subclassUseTableSummary = configuration.getText("doclet.Use_Table_Summary",
-+ configuration.getText("doclet.subclasses"));
-+ subinterfaceUseTableSummary = configuration.getText("doclet.Use_Table_Summary",
-+ configuration.getText("doclet.subinterfaces"));
-+ fieldUseTableSummary = configuration.getText("doclet.Use_Table_Summary",
-+ configuration.getText("doclet.fields"));
-+ methodUseTableSummary = configuration.getText("doclet.Use_Table_Summary",
-+ configuration.getText("doclet.methods"));
-+ constructorUseTableSummary = configuration.getText("doclet.Use_Table_Summary",
-+ configuration.getText("doclet.constructors"));
- }
-
- /**
-@@ -213,12 +233,13 @@
- }
-
- protected void generatePackageList() throws IOException {
-- tableIndexSummary();
-- tableHeaderStart("#CCCCFF");
-+ tableIndexSummary(useTableSummary);
-+ tableCaptionStart();
- printText("doclet.ClassUse_Packages.that.use.0",
- getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS_USE_HEADER, classdoc,
- false)));
-- tableHeaderEnd();
-+ tableCaptionEnd();
-+ summaryTableHeader(packageTableHeader, "col");
-
- for (Iterator it = pkgSet.iterator(); it.hasNext();) {
- PackageDoc pkg = (PackageDoc)it.next();
-@@ -234,12 +255,13 @@
- pkgToPackageAnnotations == null ||
- pkgToPackageAnnotations.size() == 0)
- return;
-- tableIndexSummary();
-- tableHeaderStart("#CCCCFF");
-+ tableIndexSummary(useTableSummary);
-+ tableCaptionStart();
- printText("doclet.ClassUse_PackageAnnotation",
- getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS_USE_HEADER, classdoc,
- false)));
-- tableHeaderEnd();
-+ tableCaptionEnd();
-+ summaryTableHeader(packageTableHeader, "col");
- for (Iterator it = pkgToPackageAnnotations.iterator(); it.hasNext();) {
- PackageDoc pkg = (PackageDoc)it.next();
- trBgcolorStyle("white", "TableRowColor");
-@@ -300,83 +322,68 @@
- LinkInfoImpl.CONTEXT_CLASS_USE_HEADER, classdoc, false));
- String pkgLink = getPackageLink(pkg, Util.getPackageName(pkg), false);
- classSubWriter.printUseInfo(pkgToClassAnnotations.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_Annotation", classLink,
-- pkgLink));
--
-+ configuration.getText("doclet.ClassUse_Annotation", classLink,
-+ pkgLink), classUseTableSummary);
- classSubWriter.printUseInfo(pkgToClassTypeParameter.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_TypeParameter", classLink,
-- pkgLink));
-+ configuration.getText("doclet.ClassUse_TypeParameter", classLink,
-+ pkgLink), classUseTableSummary);
- classSubWriter.printUseInfo(pkgToSubclass.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_Subclass", classLink,
-- pkgLink));
-+ configuration.getText("doclet.ClassUse_Subclass", classLink,
-+ pkgLink), subclassUseTableSummary);
- classSubWriter.printUseInfo(pkgToSubinterface.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_Subinterface",
-- classLink,
-- pkgLink));
-+ configuration.getText("doclet.ClassUse_Subinterface", classLink,
-+ pkgLink), subinterfaceUseTableSummary);
- classSubWriter.printUseInfo(pkgToImplementingClass.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_ImplementingClass",
-- classLink,
-- pkgLink));
-+ configuration.getText("doclet.ClassUse_ImplementingClass", classLink,
-+ pkgLink), classUseTableSummary);
- fieldSubWriter.printUseInfo(pkgToField.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_Field",
-- classLink,
-- pkgLink));
-+ configuration.getText("doclet.ClassUse_Field", classLink,
-+ pkgLink), fieldUseTableSummary);
- fieldSubWriter.printUseInfo(pkgToFieldAnnotations.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_FieldAnnotations",
-- classLink,
-- pkgLink));
-+ configuration.getText("doclet.ClassUse_FieldAnnotations", classLink,
-+ pkgLink), fieldUseTableSummary);
- fieldSubWriter.printUseInfo(pkgToFieldTypeParameter.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_FieldTypeParameter",
-- classLink,
-- pkgLink));
-+ configuration.getText("doclet.ClassUse_FieldTypeParameter", classLink,
-+ pkgLink), fieldUseTableSummary);
- methodSubWriter.printUseInfo(pkgToMethodAnnotations.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_MethodAnnotations", classLink,
-- pkgLink));
-+ configuration.getText("doclet.ClassUse_MethodAnnotations", classLink,
-+ pkgLink), methodUseTableSummary);
- methodSubWriter.printUseInfo(pkgToMethodParameterAnnotations.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_MethodParameterAnnotations", classLink,
-- pkgLink));
-+ configuration.getText("doclet.ClassUse_MethodParameterAnnotations", classLink,
-+ pkgLink), methodUseTableSummary);
- methodSubWriter.printUseInfo(pkgToMethodTypeParameter.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_MethodTypeParameter", classLink,
-- pkgLink));
-+ configuration.getText("doclet.ClassUse_MethodTypeParameter", classLink,
-+ pkgLink), methodUseTableSummary);
- methodSubWriter.printUseInfo(pkgToMethodReturn.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_MethodReturn",
-- classLink,
-- pkgLink));
-+ configuration.getText("doclet.ClassUse_MethodReturn", classLink,
-+ pkgLink), methodUseTableSummary);
- methodSubWriter.printUseInfo(pkgToMethodReturnTypeParameter.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_MethodReturnTypeParameter", classLink,
-- pkgLink));
-+ configuration.getText("doclet.ClassUse_MethodReturnTypeParameter", classLink,
-+ pkgLink), methodUseTableSummary);
- methodSubWriter.printUseInfo(pkgToMethodArgs.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_MethodArgs",
-- classLink,
-- pkgLink));
-+ configuration.getText("doclet.ClassUse_MethodArgs", classLink,
-+ pkgLink), methodUseTableSummary);
- methodSubWriter.printUseInfo(pkgToMethodArgTypeParameter.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_MethodArgsTypeParameters",
-- classLink,
-- pkgLink));
-+ configuration.getText("doclet.ClassUse_MethodArgsTypeParameters", classLink,
-+ pkgLink), methodUseTableSummary);
- methodSubWriter.printUseInfo(pkgToMethodThrows.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_MethodThrows",
-- classLink,
-- pkgLink));
-+ configuration.getText("doclet.ClassUse_MethodThrows", classLink,
-+ pkgLink), methodUseTableSummary);
- constrSubWriter.printUseInfo(pkgToConstructorAnnotations.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_ConstructorAnnotations",
-- classLink,
-- pkgLink));
-+ configuration.getText("doclet.ClassUse_ConstructorAnnotations", classLink,
-+ pkgLink), constructorUseTableSummary);
- constrSubWriter.printUseInfo(pkgToConstructorParameterAnnotations.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_ConstructorParameterAnnotations",
-- classLink,
-- pkgLink));
-+ configuration.getText("doclet.ClassUse_ConstructorParameterAnnotations", classLink,
-+ pkgLink), constructorUseTableSummary);
- constrSubWriter.printUseInfo(pkgToConstructorArgs.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_ConstructorArgs",
-- classLink,
-- pkgLink));
-+ configuration.getText("doclet.ClassUse_ConstructorArgs", classLink,
-+ pkgLink), constructorUseTableSummary);
- constrSubWriter.printUseInfo(pkgToConstructorArgTypeParameter.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_ConstructorArgsTypeParameters",
-- classLink,
-- pkgLink));
-+ configuration.getText("doclet.ClassUse_ConstructorArgsTypeParameters", classLink,
-+ pkgLink), constructorUseTableSummary);
- constrSubWriter.printUseInfo(pkgToConstructorThrows.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_ConstructorThrows",
-- classLink,
-- pkgLink));
-+ configuration.getText("doclet.ClassUse_ConstructorThrows", classLink,
-+ pkgLink), constructorUseTableSummary);
- }
-
- /**
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java
-@@ -35,6 +35,7 @@
- * Write the Constants Summary Page in HTML format.
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.4
- */
- public class ConstantsSummaryWriterImpl extends HtmlDocletWriter
-@@ -50,6 +51,10 @@
- */
- private ClassDoc currentClassDoc;
-
-+ private final String constantsTableSummary;
-+
-+ private final String[] constantsTableHeader;
-+
- /**
- * Construct a ConstantsSummaryWriter.
- * @param configuration the configuration used in this run
-@@ -59,6 +64,13 @@
- throws IOException {
- super(configuration, ConfigurationImpl.CONSTANTS_FILE_NAME);
- this.configuration = configuration;
-+ constantsTableSummary = configuration.getText("doclet.Constants_Table_Summary",
-+ configuration.getText("doclet.Constants_Summary"));
-+ constantsTableHeader = new String[] {
-+ getModifierTypeHeader(),
-+ configuration.getText("doclet.ConstantField"),
-+ configuration.getText("doclet.Value")
-+ };
- }
-
- /**
-@@ -151,12 +163,11 @@
- * @param classStr the heading to print.
- */
- protected void writeClassName(String classStr) {
-- table(1, 3, 0);
-- trBgcolorStyle("#EEEEFF", "TableSubHeadingColor");
-- thAlignColspan("left", 3);
-+ table(1, 3, 0, constantsTableSummary);
-+ tableSubCaptionStart();
- write(classStr);
-- thEnd();
-- trEnd();
-+ tableCaptionEnd();
-+ summaryTableHeader(constantsTableHeader, "col");
- }
-
- private void tableFooter(boolean isHeader) {
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java
-@@ -37,6 +37,7 @@
- *
- * @author Robert Field
- * @author Atul M Dambalkar
-+ * @author Bhavesh Patel (Modified)
- */
- public class ConstructorWriterImpl extends AbstractExecutableMemberWriter
- implements ConstructorWriter, MemberSummaryWriter {
-@@ -211,8 +212,34 @@
- this.foundNonPubConstructor = foundNonPubConstructor;
- }
-
-- public void printSummaryLabel(ClassDoc cd) {
-- writer.strongText("doclet.Constructor_Summary");
-+ public void printSummaryLabel() {
-+ writer.printText("doclet.Constructor_Summary");
-+ }
-+
-+ public void printTableSummary() {
-+ writer.tableIndexSummary(configuration().getText("doclet.Member_Table_Summary",
-+ configuration().getText("doclet.Constructor_Summary"),
-+ configuration().getText("doclet.constructors")));
-+ }
-+
-+ public void printSummaryTableHeader(ProgramElementDoc member) {
-+ String[] header;
-+ if (foundNonPubConstructor) {
-+ header = new String[] {
-+ configuration().getText("doclet.Modifier"),
-+ configuration().getText("doclet.0_and_1",
-+ configuration().getText("doclet.Constructor"),
-+ configuration().getText("doclet.Description"))
-+ };
-+ }
-+ else {
-+ header = new String[] {
-+ configuration().getText("doclet.0_and_1",
-+ configuration().getText("doclet.Constructor"),
-+ configuration().getText("doclet.Description"))
-+ };
-+ }
-+ writer.summaryTableHeader(header, "col");
- }
-
- public void printSummaryAnchor(ClassDoc cd) {
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/DeprecatedListWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/DeprecatedListWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/DeprecatedListWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/DeprecatedListWriter.java
-@@ -35,6 +35,7 @@
- *
- * @see java.util.List
- * @author Atul M Dambalkar
-+ * @author Bhavesh Patel (Modified)
- */
- public class DeprecatedListWriter extends SubWriterHolderWriter {
-
-@@ -55,6 +56,28 @@
- "doclet.Deprecated_Annotation_Type_Members"
- };
-
-+ private static final String[] SUMMARY_KEYS = new String[] {
-+ "doclet.deprecated_interfaces", "doclet.deprecated_classes",
-+ "doclet.deprecated_enums", "doclet.deprecated_exceptions",
-+ "doclet.deprecated_errors",
-+ "doclet.deprecated_annotation_types",
-+ "doclet.deprecated_fields",
-+ "doclet.deprecated_methods", "doclet.deprecated_constructors",
-+ "doclet.deprecated_enum_constants",
-+ "doclet.deprecated_annotation_type_members"
-+ };
-+
-+ private static final String[] HEADER_KEYS = new String[] {
-+ "doclet.Interface", "doclet.Class",
-+ "doclet.Enum", "doclet.Exceptions",
-+ "doclet.Errors",
-+ "doclet.AnnotationType",
-+ "doclet.Field",
-+ "doclet.Method", "doclet.Constructor",
-+ "doclet.Enum_Constant",
-+ "doclet.Annotation_Type_Member"
-+ };
-+
- private AbstractMemberWriter[] writers;
-
- private ConfigurationImpl configuration;
-@@ -119,11 +142,20 @@
- ulEnd();
- println();
-
-+ String memberTableSummary;
-+ String[] memberTableHeader = new String[1];
- for (int i = 0; i < DeprecatedAPIListBuilder.NUM_TYPES; i++) {
- if (deprapi.hasDocumentation(i)) {
- writeAnchor(deprapi, i);
-+ memberTableSummary =
-+ configuration.getText("doclet.Member_Table_Summary",
-+ configuration.getText(HEADING_KEYS[i]),
-+ configuration.getText(SUMMARY_KEYS[i]));
-+ memberTableHeader[0] = configuration.getText("doclet.0_and_1",
-+ configuration.getText(HEADER_KEYS[i]),
-+ configuration.getText("doclet.Description"));
- writers[i].printDeprecatedAPI(deprapi.getList(i),
-- HEADING_KEYS[i]);
-+ HEADING_KEYS[i], memberTableSummary, memberTableHeader);
- }
- }
- printDeprecatedFooter();
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java
-@@ -35,6 +35,7 @@
- * Writes enum constant documentation in HTML format.
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- */
- public class EnumConstantWriterImpl extends AbstractMemberWriter
- implements EnumConstantWriter, MemberSummaryWriter {
-@@ -194,8 +195,23 @@
- return VisibleMemberMap.ENUM_CONSTANTS;
- }
-
-- public void printSummaryLabel(ClassDoc cd) {
-- writer.strongText("doclet.Enum_Constant_Summary");
-+ public void printSummaryLabel() {
-+ writer.printText("doclet.Enum_Constant_Summary");
-+ }
-+
-+ public void printTableSummary() {
-+ writer.tableIndexSummary(configuration().getText("doclet.Member_Table_Summary",
-+ configuration().getText("doclet.Enum_Constant_Summary"),
-+ configuration().getText("doclet.enum_constants")));
-+ }
-+
-+ public void printSummaryTableHeader(ProgramElementDoc member) {
-+ String[] header = new String[] {
-+ configuration().getText("doclet.0_and_1",
-+ configuration().getText("doclet.Enum_Constant"),
-+ configuration().getText("doclet.Description"))
-+ };
-+ writer.summaryTableHeader(header, "col");
- }
-
- public void printSummaryAnchor(ClassDoc cd) {
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java
-@@ -37,6 +37,7 @@
- * @author Robert Field
- * @author Atul M Dambalkar
- * @author Jamie Ho (rewrite)
-+ * @author Bhavesh Patel (Modified)
- */
- public class FieldWriterImpl extends AbstractMemberWriter
- implements FieldWriter, MemberSummaryWriter {
-@@ -236,8 +237,24 @@
- return VisibleMemberMap.FIELDS;
- }
-
-- public void printSummaryLabel(ClassDoc cd) {
-- writer.strongText("doclet.Field_Summary");
-+ public void printSummaryLabel() {
-+ writer.printText("doclet.Field_Summary");
-+ }
-+
-+ public void printTableSummary() {
-+ writer.tableIndexSummary(configuration().getText("doclet.Member_Table_Summary",
-+ configuration().getText("doclet.Field_Summary"),
-+ configuration().getText("doclet.fields")));
-+ }
-+
-+ public void printSummaryTableHeader(ProgramElementDoc member) {
-+ String[] header = new String[] {
-+ writer.getModifierTypeHeader(),
-+ configuration().getText("doclet.0_and_1",
-+ configuration().getText("doclet.Field"),
-+ configuration().getText("doclet.Description"))
-+ };
-+ writer.summaryTableHeader(header, "col");
- }
-
- public void printSummaryAnchor(ClassDoc cd) {
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java
-@@ -785,6 +785,15 @@
- }
-
- /**
-+ * Print the Html table tag for the index summary tables.
-+ *
-+ * @param summary the summary for the table tag summary attribute.
-+ */
-+ public void tableIndexSummary(String summary) {
-+ table(1, "100%", 3, 0, summary);
-+ }
-+
-+ /**
- * Same as {@link #tableIndexSummary()}.
- */
- public void tableIndexDetail() {
-@@ -800,6 +809,40 @@
- }
-
- /**
-+ * Print table caption.
-+ */
-+ public void tableCaptionStart() {
-+ captionStyle("TableCaption");
-+ }
-+
-+ /**
-+ * Print table sub-caption.
-+ */
-+ public void tableSubCaptionStart() {
-+ captionStyle("TableSubCaption");
-+ }
-+
-+ /**
-+ * Print table caption end tags.
-+ */
-+ public void tableCaptionEnd() {
-+ captionEnd();
-+ }
-+
-+ /**
-+ * Print summary table header.
-+ */
-+ public void summaryTableHeader(String[] header, String scope) {
-+ tr();
-+ for ( int i=0; i < header.length; i++ ) {
-+ thScopeNoWrap("TableHeader", scope);
-+ print(header[i]);
-+ thEnd();
-+ }
-+ trEnd();
-+ }
-+
-+ /**
- * Prine table header information about color, column span and the font.
- *
- * @param color Background color.
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java
-@@ -38,6 +38,7 @@
- * @author Robert Field
- * @author Atul M Dambalkar
- * @author Jamie Ho (rewrite)
-+ * @author Bhavesh Patel (Modified)
- */
- public class MethodWriterImpl extends AbstractExecutableMemberWriter
- implements MethodWriter, MemberSummaryWriter {
-@@ -255,8 +256,24 @@
- return VisibleMemberMap.METHODS;
- }
-
-- public void printSummaryLabel(ClassDoc cd) {
-- writer.strongText("doclet.Method_Summary");
-+ public void printSummaryLabel() {
-+ writer.printText("doclet.Method_Summary");
-+ }
-+
-+ public void printTableSummary() {
-+ writer.tableIndexSummary(configuration().getText("doclet.Member_Table_Summary",
-+ configuration().getText("doclet.Method_Summary"),
-+ configuration().getText("doclet.methods")));
-+ }
-+
-+ public void printSummaryTableHeader(ProgramElementDoc member) {
-+ String[] header = new String[] {
-+ writer.getModifierTypeHeader(),
-+ configuration().getText("doclet.0_and_1",
-+ configuration().getText("doclet.Method"),
-+ configuration().getText("doclet.Description"))
-+ };
-+ writer.summaryTableHeader(header, "col");
- }
-
- public void printSummaryAnchor(ClassDoc cd) {
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java
-@@ -37,6 +37,7 @@
- * @author Robert Field
- * @author Atul M Dambalkar
- * @author Jamie Ho (rewrite)
-+ * @author Bhavesh Patel (Modified)
- */
- public class NestedClassWriterImpl extends AbstractMemberWriter
- implements MemberSummaryWriter {
-@@ -147,8 +148,35 @@
- return VisibleMemberMap.INNERCLASSES;
- }
-
-- public void printSummaryLabel(ClassDoc cd) {
-- writer.strongText("doclet.Nested_Class_Summary");
-+ public void printSummaryLabel() {
-+ writer.printText("doclet.Nested_Class_Summary");
-+ }
-+
-+ public void printTableSummary() {
-+ writer.tableIndexSummary(configuration().getText("doclet.Member_Table_Summary",
-+ configuration().getText("doclet.Nested_Class_Summary"),
-+ configuration().getText("doclet.nested_classes")));
-+ }
-+
-+ public void printSummaryTableHeader(ProgramElementDoc member) {
-+ String[] header;
-+ if (member.isInterface()) {
-+ header = new String[] {
-+ writer.getModifierTypeHeader(),
-+ configuration().getText("doclet.0_and_1",
-+ configuration().getText("doclet.Interface"),
-+ configuration().getText("doclet.Description"))
-+ };
-+ }
-+ else {
-+ header = new String[] {
-+ writer.getModifierTypeHeader(),
-+ configuration().getText("doclet.0_and_1",
-+ configuration().getText("doclet.Class"),
-+ configuration().getText("doclet.Description"))
-+ };
-+ }
-+ writer.summaryTableHeader(header, "col");
- }
-
- public void printSummaryAnchor(ClassDoc cd) {
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexFrameWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexFrameWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexFrameWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexFrameWriter.java
-@@ -114,7 +114,7 @@
- *
- * @param text Text string will not be used in this method.
- */
-- protected void printIndexHeader(String text) {
-+ protected void printIndexHeader(String text, String tableSummary) {
- printTableHeader(false);
- }
-
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java
-@@ -36,6 +36,7 @@
- * with the "pacakge-summary.html" file for the clicked package.
- *
- * @author Atul M Dambalkar
-+ * @author Bhavesh Patel (Modified)
- */
- public class PackageIndexWriter extends AbstractPackageIndexWriter {
-
-@@ -124,7 +125,10 @@
- if (list != null && list.size() > 0) {
- printIndexContents((PackageDoc[])list.
- toArray(new PackageDoc[list.size()]),
-- groupname);
-+ groupname,
-+ configuration.getText("doclet.Member_Table_Summary",
-+ groupname,
-+ configuration.getText("doclet.packages")));
- }
- }
- }
-@@ -150,11 +154,12 @@
- /**
- * Print Html tags for the table for this package index.
- */
-- protected void printIndexHeader(String text) {
-- tableIndexSummary();
-- tableHeaderStart("#CCCCFF");
-- strong(text);
-- tableHeaderEnd();
-+ protected void printIndexHeader(String text, String tableSummary) {
-+ tableIndexSummary(tableSummary);
-+ tableCaptionStart();
-+ print(text);
-+ tableCaptionEnd();
-+ summaryTableHeader(packageTableHeader, "col");
- }
-
- /**
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java
-@@ -34,6 +34,7 @@
- * Generate package usage information.
- *
- * @author Robert G. Field
-+ * @author Bhavesh Patel (Modified)
- */
- public class PackageUseWriter extends SubWriterHolderWriter {
-
-@@ -131,11 +132,12 @@
- }
-
- protected void generatePackageList() throws IOException {
-- tableIndexSummary();
-- tableHeaderStart("#CCCCFF");
-+ tableIndexSummary(useTableSummary);
-+ tableCaptionStart();
- printText("doclet.ClassUse_Packages.that.use.0",
- getPackageLink(pkgdoc, Util.getPackageName(pkgdoc), false));
-- tableHeaderEnd();
-+ tableCaptionEnd();
-+ summaryTableHeader(packageTableHeader, "col");
- Iterator it = usingPackageToUsedClasses.keySet().iterator();
- while (it.hasNext()) {
- PackageDoc pkg = configuration.root.packageNamed((String)it.next());
-@@ -147,6 +149,11 @@
- }
-
- protected void generateClassList() throws IOException {
-+ String[] classTableHeader = new String[] {
-+ configuration.getText("doclet.0_and_1",
-+ configuration.getText("doclet.Class"),
-+ configuration.getText("doclet.Description"))
-+ };
- Iterator itp = usingPackageToUsedClasses.keySet().iterator();
- while (itp.hasNext()) {
- String packageName = (String)itp.next();
-@@ -154,12 +161,14 @@
- if (usingPackage != null) {
- anchor(usingPackage.name());
- }
-- tableIndexSummary();
-- tableHeaderStart("#CCCCFF");
-+ tableIndexSummary(configuration.getText("doclet.Use_Table_Summary",
-+ configuration.getText("doclet.classes")));
-+ tableCaptionStart();
- printText("doclet.ClassUse_Classes.in.0.used.by.1",
- getPackageLink(pkgdoc, Util.getPackageName(pkgdoc), false),
- getPackageLink(usingPackage,Util.getPackageName(usingPackage), false));
-- tableHeaderEnd();
-+ tableCaptionEnd();
-+ summaryTableHeader(classTableHeader, "col");
- Iterator itc =
- ((Collection)usingPackageToUsedClasses.get(packageName))
- .iterator();
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java
-@@ -38,6 +38,7 @@
- * class-kind will update the frame with the clicked class-kind page.
- *
- * @author Atul M Dambalkar
-+ * @author Bhavesh Patel (Modified)
- */
- public class PackageWriterImpl extends HtmlDocletWriter
- implements PackageSummaryWriter {
-@@ -107,14 +108,15 @@
- /**
- * {@inheritDoc}
- */
-- public void writeClassesSummary(ClassDoc[] classes, String label) {
-+ public void writeClassesSummary(ClassDoc[] classes, String label, String tableSummary, String[] tableHeader) {
- if(classes.length > 0) {
- Arrays.sort(classes);
-- tableIndexSummary();
-+ tableIndexSummary(tableSummary);
- boolean printedHeading = false;
- for (int i = 0; i < classes.length; i++) {
- if (!printedHeading) {
-- printFirstRow(label);
-+ printTableCaption(label);
-+ printFirstRow(tableHeader);
- printedHeading = true;
- }
- if (!Util.isCoreClass(classes[i]) ||
-@@ -149,14 +151,23 @@
- }
-
- /**
-+ * Print the table caption for the class-listing.
-+ *
-+ * @param label label for the Class kind listing.
-+ */
-+ protected void printTableCaption(String label) {
-+ tableCaptionStart();
-+ print(label);
-+ tableCaptionEnd();
-+ }
-+
-+ /**
- * Print the table heading for the class-listing.
- *
-- * @param label Label for the Class kind listing.
-+ * @param tableHeader table header string for the Class listing.
- */
-- protected void printFirstRow(String label) {
-- tableHeaderStart("#CCCCFF");
-- strong(label);
-- tableHeaderEnd();
-+ protected void printFirstRow(String[] tableHeader) {
-+ summaryTableHeader(tableHeader, "col");
- }
-
- /**
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/StylesheetWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/StylesheetWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/StylesheetWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/StylesheetWriter.java
-@@ -33,6 +33,7 @@
- * Writes the style sheet for the doclet output.
- *
- * @author Atul M Dambalkar
-+ * @author Bhavesh Patel (Modified)
- */
- public class StylesheetWriter extends HtmlDocletWriter {
-
-@@ -115,6 +116,13 @@
- println("background-color:#FFFFFF; color:#000000}");
- print(".NavBarCell3 { font-family: Arial, Helvetica, sans-serif; ");
- println("background-color:#FFFFFF; color:#000000}");
-+
-+ print("/* "); printText("doclet.Style_line_12"); println(" */");
-+ print(".TableCaption { background: #CCCCFF; color:#000000; text-align: left; font-size: 150%; font-weight: bold; border-left: 2px ridge; border-right: 2px ridge; border-top: 2px ridge; padding-left: 5px; }");
-+ print(" /* "); printText("doclet.Style_line_5"); println(" */");
-+ print(".TableSubCaption { background: #EEEEFF; color:#000000; text-align: left; font-weight: bold; border-left: 2px ridge; border-right: 2px ridge; border-top: 2px ridge; padding-left: 5px; }");
-+ print(" /* "); printText("doclet.Style_line_6"); println(" */");
-+ print(".TableHeader { text-align: center; font-size: 80%; font-weight: bold; }");
- println("");
-
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java
-@@ -43,6 +43,7 @@
- *
- * @author Robert Field
- * @author Atul M Dambalkar
-+ * @author Bhavesh Patel (Modified)
- */
- public abstract class SubWriterHolderWriter extends HtmlDocletWriter {
-
-@@ -72,10 +73,11 @@
-
- public void printSummaryHeader(AbstractMemberWriter mw, ClassDoc cd) {
- mw.printSummaryAnchor(cd);
-- tableIndexSummary();
-- tableHeaderStart("#CCCCFF");
-- mw.printSummaryLabel(cd);
-- tableHeaderEnd();
-+ mw.printTableSummary();
-+ tableCaptionStart();
-+ mw.printSummaryLabel();
-+ tableCaptionEnd();
-+ mw.printSummaryTableHeader(cd);
- }
-
- public void printTableHeadingBackground(String str) {
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java
-@@ -37,6 +37,7 @@
- *
- * @since 1.2
- * @author Atul M Dambalkar
-+ * @author Bhavesh Patel (Modified)
- */
- public class HtmlWriter extends PrintWriter {
-
-@@ -67,6 +68,21 @@
- protected boolean memberDetailsListPrinted;
-
- /**
-+ * Header for tables displaying packages and description..
-+ */
-+ protected final String[] packageTableHeader;
-+
-+ /**
-+ * Summary for use tables displaying class and package use.
-+ */
-+ protected final String useTableSummary;
-+
-+ /**
-+ * Column header for class docs displaying Modifier and Type header.
-+ */
-+ protected final String modifierTypeHeader;
-+
-+ /**
- * Constructor.
- *
- * @param path The directory path to be created for this file
-@@ -86,6 +102,15 @@
- this.configuration = configuration;
- htmlFilename = filename;
- this.memberDetailsListPrinted = false;
-+ packageTableHeader = new String[] {
-+ configuration.getText("doclet.Package"),
-+ configuration.getText("doclet.Description")
-+ };
-+ useTableSummary = configuration.getText("doclet.Use_Table_Summary",
-+ configuration.getText("doclet.packages"));
-+ modifierTypeHeader = configuration.getText("doclet.0_and_1",
-+ configuration.getText("doclet.Modifier"),
-+ configuration.getText("doclet.Type"));
- }
-
- /**
-@@ -803,6 +828,26 @@
- }
-
- /**
-+ * Print HTML &lt;TABLE BORDER="border" WIDTH="width"
-+ * CELLPADDING="cellpadding" CELLSPACING="cellspacing" SUMMARY="summary"&gt; tag.
-+ *
-+ * @param border Border size.
-+ * @param width Width of the table.
-+ * @param cellpadding Cellpadding for the table cells.
-+ * @param cellspacing Cellspacing for the table cells.
-+ * @param summary Table summary.
-+ */
-+ public void table(int border, String width, int cellpadding,
-+ int cellspacing, String summary) {
-+ println(DocletConstants.NL +
-+ "<TABLE BORDER=\"" + border +
-+ "\" WIDTH=\"" + width +
-+ "\" CELLPADDING=\"" + cellpadding +
-+ "\" CELLSPACING=\"" + cellspacing +
-+ "\" SUMMARY=\"" + summary + "\">");
-+ }
-+
-+ /**
- * Print HTML &lt;TABLE BORDER="border" CELLPADDING="cellpadding"
- * CELLSPACING="cellspacing"&gt; tag.
- *
-@@ -819,6 +864,23 @@
- }
-
- /**
-+ * Print HTML &lt;TABLE BORDER="border" CELLPADDING="cellpadding"
-+ * CELLSPACING="cellspacing" SUMMARY="summary"&gt; tag.
-+ *
-+ * @param border Border size.
-+ * @param cellpadding Cellpadding for the table cells.
-+ * @param cellspacing Cellspacing for the table cells.
-+ * @param summary Table summary.
-+ */
-+ public void table(int border, int cellpadding, int cellspacing, String summary) {
-+ println(DocletConstants.NL +
-+ "<TABLE BORDER=\"" + border +
-+ "\" CELLPADDING=\"" + cellpadding +
-+ "\" CELLSPACING=\"" + cellspacing +
-+ "\" SUMMARY=\"" + summary + "\">");
-+ }
-+
-+ /**
- * Print HTML &lt;TABLE BORDER="border" WIDTH="width"&gt;
- *
- * @param border Border size.
-@@ -913,6 +975,23 @@
- }
-
- /**
-+ * Print &lt;CAPTION CLASS="stylename"&gt; tag. Adds a newline character
-+ * at the end.
-+ *
-+ * @param stylename style to be applied.
-+ */
-+ public void captionStyle(String stylename) {
-+ println("<CAPTION CLASS=\"" + stylename + "\">");
-+ }
-+
-+ /**
-+ * Print &lt;/CAPTION&gt; tag. Add a newline character at the end.
-+ */
-+ public void captionEnd() {
-+ println("</CAPTION>");
-+ }
-+
-+ /**
- * Print &lt;TR BGCOLOR="color" CLASS="stylename"&gt; tag. Adds a newline character
- * at the end.
- *
-@@ -953,6 +1032,23 @@
- }
-
- /**
-+ * Print &lt;TH CLASS="stylename" SCOPE="scope" NOWRAP&gt; tag.
-+ *
-+ * @param stylename style to be applied.
-+ * @param scope the scope attribute.
-+ */
-+ public void thScopeNoWrap(String stylename, String scope) {
-+ print("<TH CLASS=\"" + stylename + "\" SCOPE=\"" + scope + "\" NOWRAP>");
-+ }
-+
-+ /*
-+ * Returns a header for Modifier and Type column of a table.
-+ */
-+ public String getModifierTypeHeader() {
-+ return modifierTypeHeader;
-+ }
-+
-+ /**
- * Print &lt;TH align="align" COLSPAN=i&gt; tag.
- *
- * @param align the align attribute.
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard.properties b/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard.properties
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard.properties
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard.properties
-@@ -83,6 +83,17 @@
- doclet.Deprecated_Methods=Deprecated Methods
- doclet.Deprecated_Enum_Constants=Deprecated Enum Constants
- doclet.Deprecated_Annotation_Type_Members=Deprecated Annotation Type Elements
-+doclet.deprecated_classes=deprecated classes
-+doclet.deprecated_enums=deprecated enums
-+doclet.deprecated_interfaces=deprecated interfaces
-+doclet.deprecated_exceptions=deprecated exceptions
-+doclet.deprecated_annotation_types=deprecated annotation types
-+doclet.deprecated_errors=deprecated errors
-+doclet.deprecated_fields=deprecated fields
-+doclet.deprecated_constructors=deprecated constructors
-+doclet.deprecated_methods=deprecated methods
-+doclet.deprecated_enum_constants=deprecated enum constants
-+doclet.deprecated_annotation_type_members=deprecated annotation type elements
- doclet.Frame_Output=Frame Output
- doclet.Docs_generated_by_Javadoc=Documentation generated by Javadoc.
- doclet.Generated_Docs_Untitled=Generated Documentation (Untitled)
-@@ -171,6 +182,7 @@
- doclet.Style_line_9=Example of smaller, sans-serif font in frames
- doclet.Style_line_10=Navigation bar fonts and colors
- doclet.Style_line_11=Dark Blue
-+doclet.Style_line_12=Table caption style
- doclet.ClassUse_Packages.that.use.0=Packages that use {0}
- doclet.ClassUse_Uses.of.0.in.1=Uses of {0} in {1}
- doclet.ClassUse_Classes.in.0.used.by.1=Classes in {0} used by {1}
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/PackageSummaryWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/PackageSummaryWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/PackageSummaryWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/PackageSummaryWriter.java
-@@ -64,7 +64,7 @@
- * @param classes the array of classes to document.
- * @param label the label for this table.
- */
-- public abstract void writeClassesSummary(ClassDoc[] classes, String label);
-+ public abstract void writeClassesSummary(ClassDoc[] classes, String label, String tableSummary, String[] tableHeader);
-
- /**
- * Write the header for the summary.
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/PackageSummaryBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/PackageSummaryBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/PackageSummaryBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/PackageSummaryBuilder.java
-@@ -40,6 +40,7 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
- public class PackageSummaryBuilder extends AbstractBuilder {
-@@ -184,7 +185,15 @@
- * Build the summary for the classes in this package.
- */
- public void buildClassSummary() {
-- ClassDoc[] classes =
-+ String classTableSummary =
-+ configuration.getText("doclet.Member_Table_Summary",
-+ configuration.getText("doclet.Class_Summary"),
-+ configuration.getText("doclet.classes"));
-+ String[] classTableHeader = new String[] {
-+ configuration.getText("doclet.Class"),
-+ configuration.getText("doclet.Description")
-+ };
-+ ClassDoc[] classes =
- packageDoc.isIncluded()
- ? packageDoc.ordinaryClasses()
- : configuration.classDocCatalog.ordinaryClasses(
-@@ -192,7 +201,8 @@
- if (classes.length > 0) {
- packageWriter.writeClassesSummary(
- classes,
-- configuration.getText("doclet.Class_Summary"));
-+ configuration.getText("doclet.Class_Summary"),
-+ classTableSummary, classTableHeader);
- }
- }
-
-@@ -200,7 +210,15 @@
- * Build the summary for the interfaces in this package.
- */
- public void buildInterfaceSummary() {
-- ClassDoc[] interfaces =
-+ String interfaceTableSummary =
-+ configuration.getText("doclet.Member_Table_Summary",
-+ configuration.getText("doclet.Interface_Summary"),
-+ configuration.getText("doclet.interfaces"));
-+ String[] interfaceTableHeader = new String[] {
-+ configuration.getText("doclet.Interface"),
-+ configuration.getText("doclet.Description")
-+ };
-+ ClassDoc[] interfaces =
- packageDoc.isIncluded()
- ? packageDoc.interfaces()
- : configuration.classDocCatalog.interfaces(
-@@ -208,7 +226,8 @@
- if (interfaces.length > 0) {
- packageWriter.writeClassesSummary(
- interfaces,
-- configuration.getText("doclet.Interface_Summary"));
-+ configuration.getText("doclet.Interface_Summary"),
-+ interfaceTableSummary, interfaceTableHeader);
- }
- }
-
-@@ -216,7 +235,15 @@
- * Build the summary for the enums in this package.
- */
- public void buildAnnotationTypeSummary() {
-- ClassDoc[] annotationTypes =
-+ String annotationtypeTableSummary =
-+ configuration.getText("doclet.Member_Table_Summary",
-+ configuration.getText("doclet.Annotation_Types_Summary"),
-+ configuration.getText("doclet.annotationtypes"));
-+ String[] annotationtypeTableHeader = new String[] {
-+ configuration.getText("doclet.AnnotationType"),
-+ configuration.getText("doclet.Description")
-+ };
-+ ClassDoc[] annotationTypes =
- packageDoc.isIncluded()
- ? packageDoc.annotationTypes()
- : configuration.classDocCatalog.annotationTypes(
-@@ -224,7 +251,8 @@
- if (annotationTypes.length > 0) {
- packageWriter.writeClassesSummary(
- annotationTypes,
-- configuration.getText("doclet.Annotation_Types_Summary"));
-+ configuration.getText("doclet.Annotation_Types_Summary"),
-+ annotationtypeTableSummary, annotationtypeTableHeader);
- }
- }
-
-@@ -232,7 +260,15 @@
- * Build the summary for the enums in this package.
- */
- public void buildEnumSummary() {
-- ClassDoc[] enums =
-+ String enumTableSummary =
-+ configuration.getText("doclet.Member_Table_Summary",
-+ configuration.getText("doclet.Enum_Summary"),
-+ configuration.getText("doclet.enums"));
-+ String[] enumTableHeader = new String[] {
-+ configuration.getText("doclet.Enum"),
-+ configuration.getText("doclet.Description")
-+ };
-+ ClassDoc[] enums =
- packageDoc.isIncluded()
- ? packageDoc.enums()
- : configuration.classDocCatalog.enums(
-@@ -240,7 +276,8 @@
- if (enums.length > 0) {
- packageWriter.writeClassesSummary(
- enums,
-- configuration.getText("doclet.Enum_Summary"));
-+ configuration.getText("doclet.Enum_Summary"),
-+ enumTableSummary, enumTableHeader);
- }
- }
-
-@@ -248,7 +285,15 @@
- * Build the summary for the exceptions in this package.
- */
- public void buildExceptionSummary() {
-- ClassDoc[] exceptions =
-+ String exceptionTableSummary =
-+ configuration.getText("doclet.Member_Table_Summary",
-+ configuration.getText("doclet.Exception_Summary"),
-+ configuration.getText("doclet.exceptions"));
-+ String[] exceptionTableHeader = new String[] {
-+ configuration.getText("doclet.Exception"),
-+ configuration.getText("doclet.Description")
-+ };
-+ ClassDoc[] exceptions =
- packageDoc.isIncluded()
- ? packageDoc.exceptions()
- : configuration.classDocCatalog.exceptions(
-@@ -256,7 +301,8 @@
- if (exceptions.length > 0) {
- packageWriter.writeClassesSummary(
- exceptions,
-- configuration.getText("doclet.Exception_Summary"));
-+ configuration.getText("doclet.Exception_Summary"),
-+ exceptionTableSummary, exceptionTableHeader);
- }
- }
-
-@@ -264,7 +310,15 @@
- * Build the summary for the errors in this package.
- */
- public void buildErrorSummary() {
-- ClassDoc[] errors =
-+ String errorTableSummary =
-+ configuration.getText("doclet.Member_Table_Summary",
-+ configuration.getText("doclet.Error_Summary"),
-+ configuration.getText("doclet.errors"));
-+ String[] errorTableHeader = new String[] {
-+ configuration.getText("doclet.Error"),
-+ configuration.getText("doclet.Description")
-+ };
-+ ClassDoc[] errors =
- packageDoc.isIncluded()
- ? packageDoc.errors()
- : configuration.classDocCatalog.errors(
-@@ -272,7 +326,8 @@
- if (errors.length > 0) {
- packageWriter.writeClassesSummary(
- errors,
-- configuration.getText("doclet.Error_Summary"));
-+ configuration.getText("doclet.Error_Summary"),
-+ errorTableSummary, errorTableHeader);
- }
- }
-
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets.properties b/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets.properties
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets.properties
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets.properties
-@@ -82,6 +82,7 @@
- doclet.Errors=Errors
- doclet.Classes=Classes
- doclet.Packages=Packages
-+doclet.packages=packages
- doclet.All_Classes=All Classes
- doclet.All_Superinterfaces=All Superinterfaces:
- doclet.All_Implemented_Interfaces=All Implemented Interfaces:
-@@ -92,14 +93,20 @@
- doclet.Class=Class
- doclet.AnnotationType=Annotation Type
- doclet.annotationtype=annotation type
-+doclet.annotationtypes=annotation types
- doclet.Enum=Enum
- doclet.enum=enum
-+doclet.enums=enums
- doclet.interface=interface
-+doclet.interfaces=interfaces
- doclet.class=class
-+doclet.classes=classes
- doclet.Error=Error
- doclet.error=error
-+doclet.errors=errors
- doclet.Exception=Exception
- doclet.exception=exception
-+doclet.exceptions=exceptions
- doclet.extended_by=extended by
- doclet.extends=extends
- doclet.Package_private=(package private)
-@@ -125,6 +132,32 @@
- doclet.value_tag_invalid_constant=@value tag (which references {0}) can only be used in constants.
- doclet.dest_dir_create=Creating destination directory: "{0}"
- doclet.in={0} in {1}
-+doclet.Use_Table_Summary=Use table, listing {0}, and an explanation
-+doclet.Constants_Table_Summary={0} table, listing constant fields, and values
-+doclet.Member_Table_Summary={0} table, listing {1}, and an explanation
-+doclet.fields=fields
-+doclet.constructors=constructors
-+doclet.methods=methods
-+doclet.annotation_type_optional_members=optional elements
-+doclet.annotation_type_required_members=required elements
-+doclet.enum_constants=enum constants
-+doclet.nested_classes=nested classes
-+doclet.subclasses=subclasses
-+doclet.subinterfaces=subinterfaces
-+doclet.Modifier=Modifier
-+doclet.Type=Type
-+doclet.Field=Field
-+doclet.Constructor=Constructor
-+doclet.Method=Method
-+doclet.Annotation_Type_Optional_Member=Optional Element
-+doclet.Annotation_Type_Required_Member=Required Element
-+doclet.Annotation_Type_Member=Annotation Type Element
-+doclet.Enum_Constant=Enum Constant
-+doclet.Class=Class
-+doclet.Description=Description
-+doclet.ConstantField=Constant Field
-+doclet.Value=Value
-+doclet.0_and_1={0} and {1}
-
- #Documentation for Enums
- doclet.enum_values_doc=\n\
-diff --git a/test/com/sun/javadoc/testHeadings/TestHeadings.java b/test/com/sun/javadoc/testHeadings/TestHeadings.java
---- langtools/test/com/sun/javadoc/testHeadings/TestHeadings.java
-+++ langtools/test/com/sun/javadoc/testHeadings/TestHeadings.java
-@@ -47,14 +47,16 @@
- private static final String[][] TEST = {
- //Package summary
- {BUG_ID + FS + "pkg1" + FS + "package-summary.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\"><FONT SIZE=\"+2\">" + NL +
-- "<STRONG>Class Summary</STRONG></FONT></TH>"
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Class</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Description</TH>"
- },
-
- // Class documentation
- {BUG_ID + FS + "pkg1" + FS + "C1.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\"><FONT SIZE=\"+2\">" + NL +
-- "<STRONG>Field Summary</STRONG></FONT></TH>"
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-+ " SCOPE=\"col\" NOWRAP>Field and Description</TH>"
- },
- {BUG_ID + FS + "pkg1" + FS + "C1.html",
- "<TH ALIGN=\"left\"><STRONG>Methods inherited from class " + "java.lang.Object</STRONG></TH>"
-@@ -62,29 +64,32 @@
-
- // Class use documentation
- {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\"><FONT SIZE=\"+2\">" + NL +
-- "Packages that use <A HREF=\"../../pkg1/C1.html\" " + "title=\"class in pkg1\">C1</A></FONT></TH>"
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Package</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-+ " SCOPE=\"col\" NOWRAP>Description</TH>"
- },
- {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
- "<TH ALIGN=\"left\" COLSPAN=\"2\"><FONT SIZE=\"+2\">" + NL +
- "Uses of <A HREF=\"../../pkg1/C1.html\" " + "title=\"class in pkg1\">C1</A> in " + "<A HREF=\"../../pkg2/package-summary.html\">pkg2</A></FONT></TH>"
- },
- {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\">Fields in " + "<A HREF=\"../../pkg2/package-summary.html\">pkg2</A> " + "declared as <A HREF=\"../../pkg1/C1.html\" " + "title=\"class in pkg1\">C1</A></FONT></TH>"
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-+ " SCOPE=\"col\" NOWRAP>Field and Description</TH>"
- },
-
- // Deprecated
- {BUG_ID + FS + "deprecated-list.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\"><FONT SIZE=\"+2\">" + NL +
-- "<STRONG>Deprecated Methods</STRONG></FONT></TH>"
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Method and Description</TH>"
- },
-
- // Constant values
- {BUG_ID + FS + "constant-values.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"3\">pkg1.<A HREF=\"pkg1/C1.html\" " + "title=\"class in pkg1\">C1</A></TH>"
-- },
-- {BUG_ID + FS + "constant-values.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"3\">pkg1.<A HREF=\"pkg1/C1.html\" " + "title=\"class in pkg1\">C1</A></TH>"
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-+ " SCOPE=\"col\" NOWRAP>Constant Field</TH>" + NL +
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>Value</TH>"
- },
-
- // Serialized Form
-diff --git a/test/com/sun/javadoc/testHtmlStrongTag/TestHtmlStrongTag.java b/test/com/sun/javadoc/testHtmlStrongTag/TestHtmlStrongTag.java
---- langtools/test/com/sun/javadoc/testHtmlStrongTag/TestHtmlStrongTag.java
-+++ langtools/test/com/sun/javadoc/testHtmlStrongTag/TestHtmlStrongTag.java
-@@ -38,14 +38,15 @@
-
- private static final String BUG_ID = "6786028";
- private static final String[][] TEST1 = {
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<STRONG>See Also:</STRONG>"}};
-+ private static final String[][] NEGATED_TEST1 = {
- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<STRONG>Method Summary</STRONG>"},
-- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<STRONG>See Also:</STRONG>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<B>"},
- {BUG_ID + FS + "pkg1" + FS + "package-summary.html", "<STRONG>Class Summary</STRONG>"}};
-- private static final String[][] NEGATED_TEST1 = {
-- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<B>"}};
- private static final String[][] TEST2 = {
-+ {BUG_ID + FS + "pkg2" + FS + "C2.html", "<B>Comments:</B>"}};
-+ private static final String[][] NEGATED_TEST2 = {
- {BUG_ID + FS + "pkg2" + FS + "C2.html", "<STRONG>Method Summary</STRONG>"},
-- {BUG_ID + FS + "pkg2" + FS + "C2.html", "<B>Comments:</B>"},
- {BUG_ID + FS + "pkg1" + FS + "package-summary.html", "<STRONG>Class Summary</STRONG>"}};
-
- private static final String[] ARGS1 =
-@@ -62,7 +63,7 @@
- public static void main(String[] args) {
- TestHtmlStrongTag tester = new TestHtmlStrongTag();
- run(tester, ARGS1, TEST1, NEGATED_TEST1);
-- run(tester, ARGS2, TEST2, NO_TEST);
-+ run(tester, ARGS2, TEST2, NEGATED_TEST2);
- tester.printSummary();
- }
-
-diff --git a/test/com/sun/javadoc/testHtmlTableTags/TestHtmlTableTags.java b/test/com/sun/javadoc/testHtmlTableTags/TestHtmlTableTags.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testHtmlTableTags/TestHtmlTableTags.java
-@@ -0,0 +1,478 @@
-+/*
-+ * 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 6786688
-+ * @summary HTML tables should have table summary, caption and table headers.
-+ * @author Bhavesh Patel
-+ * @library ../lib/
-+ * @build JavadocTester
-+ * @build TestHtmlTableTags
-+ * @run main TestHtmlTableTags
-+ */
-+
-+public class TestHtmlTableTags extends JavadocTester {
-+
-+ //Test information.
-+ private static final String BUG_ID = "6786688";
-+
-+ //Javadoc arguments.
-+ private static final String[] ARGS = new String[] {
-+ "-d", BUG_ID, "-sourcepath", SRC_DIR, "-use", "pkg1", "pkg2"
-+ };
-+
-+ //Input for string tests for HTML table tags.
-+ private static final String[][] TABLE_TAGS_TEST = {
-+ /*
-+ * Test for validating summary for HTML tables
-+ */
-+
-+ //Package summary
-+ {BUG_ID + FS + "pkg1" + FS + "package-summary.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Class Summary table, " +
-+ "listing classes, and an explanation\">"
-+ },
-+ {BUG_ID + FS + "pkg1" + FS + "package-summary.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Interface Summary table, " +
-+ "listing interfaces, and an explanation\">"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "package-summary.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Enum Summary table, " +
-+ "listing enums, and an explanation\">"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "package-summary.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Annotation Types Summary table, " +
-+ "listing annotation types, and an explanation\">"
-+ },
-+ // Class documentation
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Field Summary table, " +
-+ "listing fields, and an explanation\">"
-+ },
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Method Summary table, " +
-+ "listing methods, and an explanation\">"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "C2.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Nested Class Summary table, " +
-+ "listing nested classes, and an explanation\">"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "C2.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Constructor Summary table, " +
-+ "listing constructors, and an explanation\">"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "C2.ModalExclusionType.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Enum Constant Summary table, " +
-+ "listing enum constants, and an explanation\">"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "C3.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Required Element Summary table, " +
-+ "listing required elements, and an explanation\">"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "C4.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Optional Element Summary table, " +
-+ "listing optional elements, and an explanation\">"
-+ },
-+ // Class use documentation
-+ {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "I1.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
-+ "listing packages, and an explanation\">"
-+ },
-+ {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
-+ "listing fields, and an explanation\">"
-+ },
-+ {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
-+ "listing methods, and an explanation\">"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
-+ "listing fields, and an explanation\">"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
-+ "listing methods, and an explanation\">"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.ModalExclusionType.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
-+ "listing packages, and an explanation\">"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.ModalExclusionType.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
-+ "listing methods, and an explanation\">"
-+ },
-+ // Package use documentation
-+ {BUG_ID + FS + "pkg1" + FS + "package-use.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
-+ "listing packages, and an explanation\">"
-+ },
-+ {BUG_ID + FS + "pkg1" + FS + "package-use.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
-+ "listing classes, and an explanation\">"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "package-use.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
-+ "listing packages, and an explanation\">"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "package-use.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
-+ "listing classes, and an explanation\">"
-+ },
-+ // Deprecated
-+ {BUG_ID + FS + "deprecated-list.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Deprecated Fields table, " +
-+ "listing deprecated fields, and an explanation\">"
-+ },
-+ {BUG_ID + FS + "deprecated-list.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Deprecated Methods table, " +
-+ "listing deprecated methods, and an explanation\">"
-+ },
-+ // Constant values
-+ {BUG_ID + FS + "constant-values.html",
-+ "<TABLE BORDER=\"1\" CELLPADDING=\"3\" CELLSPACING=\"0\" " +
-+ "SUMMARY=\"Constant Field Values table, listing " +
-+ "constant fields, and values\">"
-+ },
-+ // Overview Summary
-+ {BUG_ID + FS + "overview-summary.html",
-+ "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-+ "CELLSPACING=\"0\" SUMMARY=\"Packages table, " +
-+ "listing packages, and an explanation\">"
-+ },
-+
-+ /*
-+ * Test for validating caption for HTML tables
-+ */
-+
-+ //Package summary
-+ {BUG_ID + FS + "pkg1" + FS + "package-summary.html",
-+ "<CAPTION CLASS=\"TableCaption\">" + NL +
-+ "Class Summary</CAPTION>"
-+ },
-+ {BUG_ID + FS + "pkg1" + FS + "package-summary.html",
-+ "<CAPTION CLASS=\"TableCaption\">" + NL +
-+ "Interface Summary</CAPTION>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "package-summary.html",
-+ "<CAPTION CLASS=\"TableCaption\">" + NL +
-+ "Enum Summary</CAPTION>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "package-summary.html",
-+ "<CAPTION CLASS=\"TableCaption\">" + NL +
-+ "Annotation Types Summary</CAPTION>"
-+ },
-+ // Class documentation
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html",
-+ "<CAPTION CLASS=\"TableCaption\">" + NL +
-+ "Field Summary</CAPTION>"
-+ },
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html",
-+ "<CAPTION CLASS=\"TableCaption\">" + NL +
-+ "Method Summary</CAPTION>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "C2.html",
-+ "<CAPTION CLASS=\"TableCaption\">" + NL +
-+ "Nested Class Summary</CAPTION>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "C2.html",
-+ "<CAPTION CLASS=\"TableCaption\">" + NL +
-+ "Constructor Summary</CAPTION>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "C2.ModalExclusionType.html",
-+ "<CAPTION CLASS=\"TableCaption\">" + NL +
-+ "Enum Constant Summary</CAPTION>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "C3.html",
-+ "<CAPTION CLASS=\"TableCaption\">" + NL +
-+ "Required Element Summary</CAPTION>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "C4.html",
-+ "<CAPTION CLASS=\"TableCaption\">" + NL +
-+ "Optional Element Summary</CAPTION>"
-+ },
-+ // Class use documentation
-+ {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "I1.html",
-+ "<CAPTION CLASS=\"TableCaption\">" + NL +
-+ "Packages that use <A HREF=\"../../pkg1/I1.html\" " +
-+ "title=\"interface in pkg1\">I1</A></CAPTION>"
-+ },
-+ {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Fields in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> " +
-+ "declared as <A HREF=\"../../pkg1/C1.html\" title=\"class in pkg1\">" +
-+ "C1</A></CAPTION>"
-+ },
-+ {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> " +
-+ "with parameters of type <A HREF=\"../../pkg1/C1.html\" " +
-+ "title=\"class in pkg1\">C1</A></CAPTION>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.html",
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Fields in <A HREF=\"../../pkg1/package-summary.html\">pkg1</A> " +
-+ "declared as <A HREF=\"../../pkg2/C2.html\" title=\"class in pkg2\">" +
-+ "C2</A></CAPTION>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.html",
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Methods in <A HREF=\"../../pkg1/package-summary.html\">pkg1</A> " +
-+ "with parameters of type <A HREF=\"../../pkg2/C2.html\" " +
-+ "title=\"class in pkg2\">C2</A></CAPTION>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.ModalExclusionType.html",
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> " +
-+ "that return <A HREF=\"../../pkg2/C2.ModalExclusionType.html\" " +
-+ "title=\"enum in pkg2\">C2.ModalExclusionType</A></CAPTION>"
-+ },
-+ // Package use documentation
-+ {BUG_ID + FS + "pkg1" + FS + "package-use.html",
-+ "<CAPTION CLASS=\"TableCaption\">" + NL +
-+ "Packages that use <A HREF=\"../pkg1/package-summary.html\">" +
-+ "pkg1</A></CAPTION>"
-+ },
-+ {BUG_ID + FS + "pkg1" + FS + "package-use.html",
-+ "<CAPTION CLASS=\"TableCaption\">" + NL +
-+ "Classes in <A HREF=\"../pkg1/package-summary.html\">pkg1</A> " +
-+ "used by <A HREF=\"../pkg1/package-summary.html\">pkg1</A></CAPTION>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "package-use.html",
-+ "<CAPTION CLASS=\"TableCaption\">" + NL +
-+ "Packages that use <A HREF=\"../pkg2/package-summary.html\">" +
-+ "pkg2</A></CAPTION>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "package-use.html",
-+ "<CAPTION CLASS=\"TableCaption\">" + NL +
-+ "Classes in <A HREF=\"../pkg2/package-summary.html\">pkg2</A> " +
-+ "used by <A HREF=\"../pkg1/package-summary.html\">pkg1</A></CAPTION>"
-+ },
-+ // Deprecated
-+ {BUG_ID + FS + "deprecated-list.html",
-+ "<CAPTION CLASS=\"TableCaption\">" + NL +
-+ "Deprecated Fields</CAPTION>"
-+ },
-+ {BUG_ID + FS + "deprecated-list.html",
-+ "<CAPTION CLASS=\"TableCaption\">" + NL +
-+ "Deprecated Methods</CAPTION>"
-+ },
-+ // Constant values
-+ {BUG_ID + FS + "constant-values.html",
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "pkg1.<A HREF=\"pkg1/C1.html\" title=\"class in pkg1\">C1</A></CAPTION>"
-+ },
-+ // Overview Summary
-+ {BUG_ID + FS + "overview-summary.html",
-+ "<CAPTION CLASS=\"TableCaption\">" + NL +
-+ "Packages</CAPTION>"
-+ },
-+
-+ /*
-+ * Test for validating headers for HTML tables
-+ */
-+
-+ //Package summary
-+ {BUG_ID + FS + "pkg1" + FS + "package-summary.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Class</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Description</TH>"
-+ },
-+ {BUG_ID + FS + "pkg1" + FS + "package-summary.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Interface</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Description</TH>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "package-summary.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Enum</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Description</TH>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "package-summary.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Annotation Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-+ " SCOPE=\"col\" NOWRAP>Description</TH>"
-+ },
-+ // Class documentation
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-+ " SCOPE=\"col\" NOWRAP>Field and Description</TH>"
-+ },
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-+ " SCOPE=\"col\" NOWRAP>Method and Description</TH>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "C2.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-+ " SCOPE=\"col\" NOWRAP>Class and Description</TH>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "C2.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Constructor and Description</TH>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "C2.ModalExclusionType.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Enum Constant and Description</TH>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "C3.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-+ " SCOPE=\"col\" NOWRAP>Required Element and Description</TH>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "C4.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-+ " SCOPE=\"col\" NOWRAP>Optional Element and Description</TH>"
-+ },
-+ // Class use documentation
-+ {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "I1.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Package</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Description</TH>"
-+ },
-+ {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-+ " SCOPE=\"col\" NOWRAP>Field and Description</TH>"
-+ },
-+ {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-+ " SCOPE=\"col\" NOWRAP>Method and Description</TH>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-+ " SCOPE=\"col\" NOWRAP>Field and Description</TH>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-+ " SCOPE=\"col\" NOWRAP>Method and Description</TH>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.ModalExclusionType.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Package</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Description</TH>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.ModalExclusionType.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-+ " SCOPE=\"col\" NOWRAP>Method and Description</TH>"
-+ },
-+ // Package use documentation
-+ {BUG_ID + FS + "pkg1" + FS + "package-use.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Package</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Description</TH>"
-+ },
-+ {BUG_ID + FS + "pkg1" + FS + "package-use.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Class and Description</TH>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "package-use.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Package</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Description</TH>"
-+ },
-+ {BUG_ID + FS + "pkg2" + FS + "package-use.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Class and Description</TH>"
-+ },
-+ // Deprecated
-+ {BUG_ID + FS + "deprecated-list.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Field and Description</TH>"
-+ },
-+ {BUG_ID + FS + "deprecated-list.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Method and Description</TH>"
-+ },
-+ // Constant values
-+ {BUG_ID + FS + "constant-values.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-+ " SCOPE=\"col\" NOWRAP>Constant Field</TH>" + NL +
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>Value</TH>"
-+ },
-+ // Overview Summary
-+ {BUG_ID + FS + "overview-summary.html",
-+ "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-+ "Package</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Description</TH>"
-+ }
-+ };
-+ private static final String[][] NEGATED_TEST = NO_TEST;
-+
-+ /**
-+ * The entry point of the test.
-+ * @param args the array of command line arguments.
-+ */
-+ public static void main(String[] args) {
-+ TestHtmlTableTags tester = new TestHtmlTableTags();
-+ run(tester, ARGS, TABLE_TAGS_TEST, NEGATED_TEST);
-+ tester.printSummary();
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getBugId() {
-+ return BUG_ID;
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getBugName() {
-+ return getClass().getName();
-+ }
-+}
-diff --git a/test/com/sun/javadoc/testHtmlTableTags/pkg1/C1.java b/test/com/sun/javadoc/testHtmlTableTags/pkg1/C1.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testHtmlTableTags/pkg1/C1.java
-@@ -0,0 +1,81 @@
-+/*
-+ * 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.
-+ */
-+
-+package pkg1;
-+
-+import pkg2.*;
-+
-+/**
-+ * A test class.
-+ *
-+ * @author Bhavesh Patel
-+ */
-+public class C1 implements I1 {
-+
-+ /**
-+ * Test field for class.
-+ */
-+ public C2 field;
-+
-+ /**
-+ * Constant value.
-+ */
-+ public static final String CONSTANT1 = "C1";
-+
-+ /**
-+ * A test constructor.
-+ */
-+ C1() {
-+ }
-+
-+ /**
-+ * Method thats does some processing.
-+ *
-+ * @param param some parameter that is passed.
-+ * @return a sample object.
-+ */
-+ public C2 method(C2 param) {
-+ return param;
-+ }
-+
-+ /**
-+ * Method that is implemented.
-+ *
-+ * @param a some random value.
-+ * @param b some random value.
-+ */
-+ public void method1(int a, int b) {
-+ }
-+
-+ /**
-+ * Another inherited method.
-+ * @param c some value.
-+ */
-+ public void method2(int c) {
-+ }
-+
-+ /**
-+ * @deprecated don't use this anymore.
-+ */
-+ public void deprecatedMethod() {}
-+}
-diff --git a/test/com/sun/javadoc/testHtmlTableTags/pkg1/I1.java b/test/com/sun/javadoc/testHtmlTableTags/pkg1/I1.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testHtmlTableTags/pkg1/I1.java
-@@ -0,0 +1,48 @@
-+/*
-+ * 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.
-+ */
-+
-+package pkg1;
-+
-+/**
-+ * A sample interface used to test table tags.
-+ *
-+ * @author Bhavesh Patel
-+ */
-+public interface I1 {
-+
-+ /**
-+ * A test method.
-+ *
-+ * @param a blah.
-+ * @param b blah.
-+ */
-+ void method1(int a, int b);
-+
-+ /**
-+ * Another test method.
-+ *
-+ * @param c blah.
-+ */
-+ void method2(int c);
-+
-+}
-diff --git a/test/com/sun/javadoc/testHtmlTableTags/pkg1/package-info.java b/test/com/sun/javadoc/testHtmlTableTags/pkg1/package-info.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testHtmlTableTags/pkg1/package-info.java
-@@ -0,0 +1,27 @@
-+/*
-+ * 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 package 1 used to test table tags.
-+ */
-+package pkg1;
-diff --git a/test/com/sun/javadoc/testHtmlTableTags/pkg2/C2.java b/test/com/sun/javadoc/testHtmlTableTags/pkg2/C2.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testHtmlTableTags/pkg2/C2.java
-@@ -0,0 +1,73 @@
-+/*
-+ * 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.
-+ */
-+
-+package pkg2;
-+
-+import pkg1.*;
-+
-+/**
-+ * Another test class.
-+ *
-+ * @author Bhavesh Patel
-+ */
-+public class C2 {
-+
-+ /**
-+ * A test field.
-+ */
-+ public C1 field;
-+
-+ /**
-+ * @deprecated don't use this field anymore.
-+ */
-+ public C1 dep_field;
-+
-+ /**
-+ * A sample enum.
-+ */
-+ public static enum ModalExclusionType {
-+ /**
-+ * Test comment.
-+ */
-+ NO_EXCLUDE,
-+ /**
-+ * Another comment.
-+ */
-+ APPLICATION_EXCLUDE
-+ };
-+
-+ /**
-+ * A string constant.
-+ */
-+ public static final String CONSTANT1 = "C2";
-+
-+ /**
-+ * A sample method.
-+ *
-+ * @param param some parameter.
-+ * @return a test object.
-+ */
-+ public C1 method(C1 param) {
-+ return param;
-+ }
-+}
-diff --git a/test/com/sun/javadoc/testHtmlTableTags/pkg2/C3.java b/test/com/sun/javadoc/testHtmlTableTags/pkg2/C3.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testHtmlTableTags/pkg2/C3.java
-@@ -0,0 +1,40 @@
-+/*
-+ * 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 pkg2;
-+
-+import java.lang.annotation.*;
-+
-+/**
-+ * Test Annotation class.
-+ *
-+ * @author Bhavesh Patel
-+ */
-+public @interface C3 {
-+ /**
-+ * Comment.
-+ */
-+ String[] value();
-+}
-diff --git a/test/com/sun/javadoc/testHtmlTableTags/pkg2/C4.java b/test/com/sun/javadoc/testHtmlTableTags/pkg2/C4.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testHtmlTableTags/pkg2/C4.java
-@@ -0,0 +1,35 @@
-+/*
-+ * 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 pkg2;
-+
-+import java.lang.annotation.*;
-+
-+/*
-+ * A sample interface.
-+ */
-+public @interface C4 {
-+ boolean value() default true;
-+}
-diff --git a/test/com/sun/javadoc/testHtmlTableTags/pkg2/package-info.java b/test/com/sun/javadoc/testHtmlTableTags/pkg2/package-info.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testHtmlTableTags/pkg2/package-info.java
-@@ -0,0 +1,27 @@
-+/*
-+ * 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 package 2 used to test table tags.
-+ */
-+package pkg2;
-diff --git a/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java b/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java
---- langtools/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java
-+++ langtools/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java
-@@ -58,7 +58,8 @@
- "<A HREF=\"../pkg/Coin.html\" title=\"enum in pkg\">Coin</A>&gt;"
- },
- //Check for enum constant section
-- {BUG_ID + FS + "pkg" + FS + "Coin.html", "<STRONG>Enum Constant Summary</STRONG>"},
-+ {BUG_ID + FS + "pkg" + FS + "Coin.html", "<CAPTION CLASS=\"TableCaption\">" + NL +
-+ "Enum Constant Summary</CAPTION>"},
- //Detail for enum constant
- {BUG_ID + FS + "pkg" + FS + "Coin.html",
- "<STRONG><A HREF=\"../pkg/Coin.html#Dime\">Dime</A></STRONG>"},
-@@ -158,9 +159,11 @@
- "public @interface <STRONG>AnnotationType</STRONG>"},
- //Make sure member summary headings are correct.
- {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
-- "<STRONG>Required Element Summary</STRONG>"},
-+ "<CAPTION CLASS=\"TableCaption\">" + NL +
-+ "Required Element Summary</CAPTION>"},
- {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
-- "<STRONG>Optional Element Summary</STRONG>"},
-+ "<CAPTION CLASS=\"TableCaption\">" + NL +
-+ "Optional Element Summary</CAPTION>"},
- //Make sure element detail heading is correct
- {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
- "Element Detail"},
-@@ -286,39 +289,57 @@
-
- //ClassUseTest1: <T extends Foo & Foo2>
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\">Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</A></FONT></TH>"
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-+ "</A> with type parameters of type <A HREF=\"../../pkg2/Foo.html\" " +
-+ "title=\"class in pkg2\">Foo</A></CAPTION>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html",
- "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest1.html\" title=\"class in pkg2\">ClassUseTest1&lt;T extends Foo & Foo2&gt;</A></STRONG></CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\">Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</A></FONT></TH>"
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-+ "</A> with type parameters of type <A HREF=\"../../pkg2/Foo.html\" " +
-+ "title=\"class in pkg2\">Foo</A></CAPTION>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html",
- "<TD><CODE><STRONG>ClassUseTest1.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest1.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\">Fields in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</A></FONT></TH>"
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Fields in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-+ "</A> with type parameters of type <A HREF=\"../../pkg2/Foo.html\" " +
-+ "title=\"class in pkg2\">Foo</A></CAPTION>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html",
- "<A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A>&lt;<A HREF=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</A>&gt;</CODE></FONT></TD>"
- },
-
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\">Fields in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> declared as <A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A></FONT></TH>"
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Fields in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-+ "</A> declared as <A HREF=\"../../pkg2/ParamTest.html\" " +
-+ "title=\"class in pkg2\">ParamTest</A></CAPTION>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
- "<A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A>&lt;<A HREF=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</A>&gt;</CODE></FONT></TD>"
- },
-
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo2.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\">Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/Foo2.html\" title=\"interface in pkg2\">Foo2</A></FONT></TH>"
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-+ "</A> with type parameters of type <A HREF=\"../../pkg2/Foo2.html\" " +
-+ "title=\"interface in pkg2\">Foo2</A></CAPTION>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo2.html",
- "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest1.html\" title=\"class in pkg2\">ClassUseTest1&lt;T extends Foo & Foo2&gt;</A></STRONG></CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo2.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\">Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/Foo2.html\" title=\"interface in pkg2\">Foo2</A></FONT></TH>"
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-+ "</A> with type parameters of type <A HREF=\"../../pkg2/Foo2.html\" " +
-+ "title=\"interface in pkg2\">Foo2</A></CAPTION>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo2.html",
- "<TD><CODE><STRONG>ClassUseTest1.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest1.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
-@@ -326,44 +347,66 @@
-
- //ClassUseTest2: <T extends ParamTest<Foo3>>
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\">Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A></FONT></TH>"
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-+ "</A> with type parameters of type <A HREF=\"../../pkg2/ParamTest.html\" " +
-+ "title=\"class in pkg2\">ParamTest</A></CAPTION>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
- "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest2.html\" title=\"class in pkg2\">ClassUseTest2&lt;T extends ParamTest&lt;<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A>&gt;&gt;</A></STRONG></CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\">Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A></FONT></TH>"
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-+ "</A> with type parameters of type <A HREF=\"../../pkg2/ParamTest.html\" " +
-+ "title=\"class in pkg2\">ParamTest</A></CAPTION>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
- "<TD><CODE><STRONG>ClassUseTest2.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest2.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\">Fields in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> declared as <A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A></FONT></TH>"
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Fields in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-+ "</A> declared as <A HREF=\"../../pkg2/ParamTest.html\" " +
-+ "title=\"class in pkg2\">ParamTest</A></CAPTION>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
- "<A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A>&lt;<A HREF=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</A>&gt;</CODE></FONT></TD>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\">Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A></FONT></TH>"
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-+ "</A> with type parameters of type <A HREF=\"../../pkg2/ParamTest.html\" " +
-+ "title=\"class in pkg2\">ParamTest</A></CAPTION>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
- "&lt;T extends <A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A>&lt;<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A>&gt;&gt;"
- },
-
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\">Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A></FONT></TH>"
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-+ "</A> with type parameters of type <A HREF=\"../../pkg2/Foo3.html\" " +
-+ "title=\"class in pkg2\">Foo3</A></CAPTION>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html",
- "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest2.html\" title=\"class in pkg2\">ClassUseTest2&lt;T extends ParamTest&lt;<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A>&gt;&gt;</A></STRONG></CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\">Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A></FONT></TH>"
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-+ "</A> with type parameters of type <A HREF=\"../../pkg2/Foo3.html\" " +
-+ "title=\"class in pkg2\">Foo3</A></CAPTION>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html",
- "<TD><CODE><STRONG>ClassUseTest2.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest2.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\">Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> that return types with arguments of type <A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A></FONT></TH>"
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-+ "</A> that return types with arguments of type " +
-+ "<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">" +
-+ "Foo3</A></CAPTION>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html",
- "&lt;T extends <A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A>&lt;<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A>&gt;&gt;"
-@@ -371,38 +414,61 @@
-
- //ClassUseTest3: <T extends ParamTest2<List<? extends Foo4>>>
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\">Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">ParamTest2</A></FONT></TH>"
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-+ "</A> with type parameters of type " +
-+ "<A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">" +
-+ "ParamTest2</A></CAPTION>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html",
- "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html\" title=\"class in pkg2\">ClassUseTest3&lt;T extends ParamTest2&lt;java.util.List&lt;? extends Foo4&gt;&gt;&gt;</A></STRONG></CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\">Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">ParamTest2</A></FONT></TH>"
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-+ "</A> with type parameters of type " +
-+ "<A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">" +
-+ "ParamTest2</A></CAPTION>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html",
- "<TD><CODE><STRONG>ClassUseTest3.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\">Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">ParamTest2</A></FONT></TH>"
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-+ "</A> with type parameters of type " +
-+ "<A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">" +
-+ "ParamTest2</A></CAPTION>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html",
- "&lt;T extends <A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">ParamTest2</A>&lt;java.util.List&lt;? extends <A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</A>&gt;&gt;&gt;"
- },
-
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\">Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</A></FONT></TH>"
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-+ "</A> with type parameters of type " +
-+ "<A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">" +
-+ "Foo4</A></CAPTION>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
- "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html\" title=\"class in pkg2\">ClassUseTest3&lt;T extends ParamTest2&lt;java.util.List&lt;? extends Foo4&gt;&gt;&gt;</A></STRONG></CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\">Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type parameters of type <A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</A></FONT></TH>"
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-+ "</A> with type parameters of type <A HREF=\"../../pkg2/Foo4.html\" " +
-+ "title=\"class in pkg2\">Foo4</A></CAPTION>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
- "<TD><CODE><STRONG>ClassUseTest3.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\">Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> that return types with arguments of type <A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</A></FONT></TH>"
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-+ "</A> that return types with arguments of type " +
-+ "<A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">" +
-+ "Foo4</A></CAPTION>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
- "&lt;T extends <A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">ParamTest2</A>&lt;java.util.List&lt;? extends <A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</A>&gt;&gt;&gt;"
-@@ -410,81 +476,147 @@
-
- //Type parameters in constructor and method args
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\">Method parameters in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type arguments of type <A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</A></FONT></TH>" + NL +
-- "</TR>" + NL +
-- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-- "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
-- "<CODE>&nbsp;void</CODE></FONT></TD>" + NL +
-- "<TD><CODE><STRONG>ClassUseTest3.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html#method(java.util.Set)\">method</A></STRONG>(java.util.Set&lt;<A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</A>&gt;&nbsp;p)</CODE>"
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Method parameters in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-+ "</A> with type arguments of type <A HREF=\"../../pkg2/Foo4.html\" " +
-+ "title=\"class in pkg2\">Foo4</A></CAPTION>" + NL +
-+ "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Modifier and Type" +
-+ "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Method and Description</TH>" + NL +
-+ "</TR>" + NL +
-+ "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-+ "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
-+ "<CODE>&nbsp;void</CODE></FONT></TD>" + NL +
-+ "<TD><CODE><STRONG>ClassUseTest3.</STRONG><STRONG>" +
-+ "<A HREF=\"../../pkg2/ClassUseTest3.html#method(java.util.Set)\">" +
-+ "method</A></STRONG>(java.util.Set&lt;<A HREF=\"../../pkg2/Foo4.html\" " +
-+ "title=\"class in pkg2\">Foo4</A>&gt;&nbsp;p)</CODE>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\">Constructor parameters in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> with type arguments of type <A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</A></FONT></TH>" + NL +
-- "</TR>" + NL +
-- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-- "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html#ClassUseTest3(java.util.Set)\">ClassUseTest3</A></STRONG>(java.util.Set&lt;<A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</A>&gt;&nbsp;p)</CODE>"
-+ "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-+ "Constructor parameters in <A HREF=\"../../pkg2/package-summary.html\">" +
-+ "pkg2</A> with type arguments of type <A HREF=\"../../pkg2/Foo4.html\" " +
-+ "title=\"class in pkg2\">Foo4</A></CAPTION>" + NL +
-+ "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Constructor and Description" +
-+ "</TH>" + NL + "</TR>" + NL +
-+ "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-+ "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html#ClassUseTest3" +
-+ "(java.util.Set)\">ClassUseTest3</A></STRONG>(java.util.Set&lt;" +
-+ "<A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">" +
-+ "Foo4</A>&gt;&nbsp;p)</CODE>"
- },
-
- //=================================
- // Annotatation Type Usage
- //=================================
- {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
-- "<FONT SIZE=\"+2\">" + NL +
-- "Packages with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" title=\"annotation in pkg\">AnnotationType</A></FONT></TH>" + NL +
-- "</TR>" + NL +
-- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-- "<TD><A HREF=\"../../pkg/package-summary.html\"><STRONG>pkg</STRONG></A></TD>"
-+ "Packages with annotations of type " +
-+ "<A HREF=\"../../pkg/AnnotationType.html\" " +
-+ "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL +
-+ "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Package" +
-+ "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Description</TH>" + NL + "</TR>" + NL +
-+ "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-+ "<TD><A HREF=\"../../pkg/package-summary.html\"><STRONG>pkg" +
-+ "</STRONG></A></TD>"
- },
-
- {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
-- "Classes in <A HREF=\"../../pkg/package-summary.html\">pkg</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" title=\"annotation in pkg\">AnnotationType</A></FONT></TH>" + NL +
-- "</TR>" + NL +
-- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-- "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
-- "<CODE>&nbsp;class</CODE></FONT></TD>" + NL +
-- "<TD><CODE><STRONG><A HREF=\"../../pkg/AnnotationTypeUsage.html\" title=\"class in pkg\">AnnotationTypeUsage</A></STRONG></CODE>"
-+ "Classes in <A HREF=\"../../pkg/package-summary.html\">pkg" +
-+ "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " +
-+ "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL +
-+ "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Modifier and Type" +
-+ "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Class and Description</TH>" + NL +
-+ "</TR>" + NL +
-+ "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-+ "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
-+ "<CODE>&nbsp;class</CODE></FONT></TD>" + NL +
-+ "<TD><CODE><STRONG><A HREF=\"../../pkg/AnnotationTypeUsage.html\" " +
-+ "title=\"class in pkg\">AnnotationTypeUsage</A></STRONG></CODE>"
- },
-
- {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
-- "Fields in <A HREF=\"../../pkg/package-summary.html\">pkg</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" title=\"annotation in pkg\">AnnotationType</A></FONT></TH>" + NL +
-- "</TR>" + NL +
-- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-- "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
-- "<CODE>&nbsp;int</CODE></FONT></TD>" + NL +
-- "<TD><CODE><STRONG>AnnotationTypeUsage.</STRONG><STRONG><A HREF=\"../../pkg/AnnotationTypeUsage.html#field\">field</A></STRONG></CODE>"
-+ "Fields in <A HREF=\"../../pkg/package-summary.html\">pkg" +
-+ "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " +
-+ "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL +
-+ "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Modifier and Type" +
-+ "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Field and Description</TH>" + NL +
-+ "</TR>" + NL +
-+ "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-+ "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
-+ "<CODE>&nbsp;int</CODE></FONT></TD>" + NL +
-+ "<TD><CODE><STRONG>AnnotationTypeUsage.</STRONG><STRONG>" +
-+ "<A HREF=\"../../pkg/AnnotationTypeUsage.html#field\">field" +
-+ "</A></STRONG></CODE>"
- },
-
- {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
-- "Methods in <A HREF=\"../../pkg/package-summary.html\">pkg</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" title=\"annotation in pkg\">AnnotationType</A></FONT></TH>" + NL +
-- "</TR>" + NL +
-- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-- "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
-- "<CODE>&nbsp;void</CODE></FONT></TD>" + NL +
-- "<TD><CODE><STRONG>AnnotationTypeUsage.</STRONG><STRONG><A HREF=\"../../pkg/AnnotationTypeUsage.html#method()\">method</A></STRONG>()</CODE>"
-+ "Methods in <A HREF=\"../../pkg/package-summary.html\">pkg" +
-+ "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " +
-+ "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL +
-+ "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Modifier and Type" +
-+ "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Method and Description</TH>" + NL +
-+ "</TR>" + NL +
-+ "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-+ "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
-+ "<CODE>&nbsp;void</CODE></FONT></TD>" + NL +
-+ "<TD><CODE><STRONG>AnnotationTypeUsage.</STRONG><STRONG>" +
-+ "<A HREF=\"../../pkg/AnnotationTypeUsage.html#method()\">" +
-+ "method</A></STRONG>()</CODE>"
- },
-
- {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
-- "Method parameters in <A HREF=\"../../pkg/package-summary.html\">pkg</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" title=\"annotation in pkg\">AnnotationType</A></FONT></TH>" + NL +
-- "</TR>" + NL +
-- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-- "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
-- "<CODE>&nbsp;void</CODE></FONT></TD>" + NL +
-- "<TD><CODE><STRONG>AnnotationTypeUsage.</STRONG><STRONG><A HREF=\"../../pkg/AnnotationTypeUsage.html#methodWithParams(int, int)\">methodWithParams</A></STRONG>(int&nbsp;documented," + NL +
-- " int&nbsp;undocmented)</CODE>"
-+ "Method parameters in <A HREF=\"../../pkg/package-summary.html\">pkg" +
-+ "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " +
-+ "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL +
-+ "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Modifier and Type" +
-+ "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Method and Description</TH>" + NL +
-+ "</TR>" + NL +
-+ "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-+ "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
-+ "<CODE>&nbsp;void</CODE></FONT></TD>" + NL +
-+ "<TD><CODE><STRONG>AnnotationTypeUsage.</STRONG><STRONG>" +
-+ "<A HREF=\"../../pkg/AnnotationTypeUsage.html#methodWithParams" +
-+ "(int, int)\">methodWithParams</A></STRONG>(int&nbsp;documented," + NL +
-+ " int&nbsp;undocmented)</CODE>"
- },
-
- {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
-- "Constructors in <A HREF=\"../../pkg/package-summary.html\">pkg</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" title=\"annotation in pkg\">AnnotationType</A></FONT></TH>" + NL +
-- "</TR>" + NL +
-- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-- "<TD><CODE><STRONG><A HREF=\"../../pkg/AnnotationTypeUsage.html#AnnotationTypeUsage()\">AnnotationTypeUsage</A></STRONG>()</CODE>"
-+ "Constructors in <A HREF=\"../../pkg/package-summary.html\">pkg" +
-+ "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " +
-+ "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL +
-+ "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Constructor and Description" +
-+ "</TH>" + NL + "</TR>" + NL +
-+ "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-+ "<TD><CODE><STRONG><A HREF=\"../../pkg/" +
-+ "AnnotationTypeUsage.html#AnnotationTypeUsage()\">" +
-+ "AnnotationTypeUsage</A></STRONG>()</CODE>"
- },
-
- {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
-- "Constructor parameters in <A HREF=\"../../pkg/package-summary.html\">pkg</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" title=\"annotation in pkg\">AnnotationType</A></FONT></TH>" + NL +
-- "</TR>" + NL +
-- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-- "<TD><CODE><STRONG><A HREF=\"../../pkg/AnnotationTypeUsage.html#AnnotationTypeUsage(int, int)\">AnnotationTypeUsage</A></STRONG>(int&nbsp;documented," + NL +
-- " int&nbsp;undocmented)</CODE>"
-+ "Constructor parameters in <A HREF=\"../../pkg/package-summary.html\">pkg" +
-+ "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " +
-+ "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL +
-+ "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-+ " NOWRAP>Constructor and Description" +
-+ "</TH>" + NL + "</TR>" + NL +
-+ "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-+ "<TD><CODE><STRONG><A HREF=\"../../pkg/" +
-+ "AnnotationTypeUsage.html#AnnotationTypeUsage(int, int)\">" +
-+ "AnnotationTypeUsage</A></STRONG>(int&nbsp;documented," + NL +
-+ " int&nbsp;undocmented)</CODE>"
- },
-
- //=================================
-diff --git a/test/com/sun/javadoc/testSummaryHeading/TestSummaryHeading.java b/test/com/sun/javadoc/testSummaryHeading/TestSummaryHeading.java
---- langtools/test/com/sun/javadoc/testSummaryHeading/TestSummaryHeading.java
-+++ langtools/test/com/sun/javadoc/testSummaryHeading/TestSummaryHeading.java
-@@ -46,7 +46,8 @@
-
- //Input for string search tests.
- private static final String[][] TEST = {
-- {BUG_ID + FS + "C.html", "<STRONG>Method Summary</STRONG>"}
-+ {BUG_ID + FS + "C.html", "<CAPTION CLASS=\"TableCaption\">" + NL +
-+ "Method Summary</CAPTION>"}
- };
- private static final String[][] NEGATED_TEST = NO_TEST;
-
diff --git a/java/openjdk6/files/icedtea/openjdk/6786690-wcag_dl.patch b/java/openjdk6/files/icedtea/openjdk/6786690-wcag_dl.patch
deleted file mode 100644
index 1e85fea140d3..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/6786690-wcag_dl.patch
+++ /dev/null
@@ -1,3230 +0,0 @@
-# HG changeset patch
-# User andrew
-# Date 1371571959 18000
-# Node ID 9cad0410f52a47fdd3b294a10f076e7456a47e9a
-# Parent 9b884c583c41a545352b035d11d1ccacb96fbb2f
-6786690: Javadoc HTML WCAG 2.0 accessibility issues in standard doclet - DL tag and nesting issue
-Reviewed-by: jjg
-
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractIndexWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractIndexWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractIndexWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractIndexWriter.java
-@@ -25,11 +25,11 @@
-
- package com.sun.tools.doclets.formats.html;
-
--import com.sun.tools.doclets.internal.toolkit.util.*;
-+import java.io.*;
-+import java.util.*;
-
- import com.sun.javadoc.*;
--import java.io.*;
--import java.util.*;
-+import com.sun.tools.doclets.internal.toolkit.util.*;
-
- /**
- * Generate Index for all the Member Names with Indexing in
-@@ -100,18 +100,22 @@
- h2();
- strong(unicode.toString());
- h2End();
-- dl();
-- for (int i = 0; i < memberlist.size(); i++) {
-- Doc element = (Doc)memberlist.get(i);
-- if (element instanceof MemberDoc) {
-- printDescription((MemberDoc)element);
-- } else if (element instanceof ClassDoc) {
-- printDescription((ClassDoc)element);
-- } else if (element instanceof PackageDoc) {
-- printDescription((PackageDoc)element);
-+ int memberListSize = memberlist.size();
-+ // Display the list only if there are elements to be displayed.
-+ if (memberListSize > 0) {
-+ dl();
-+ for (int i = 0; i < memberListSize; i++) {
-+ Doc element = memberlist.get(i);
-+ if (element instanceof MemberDoc) {
-+ printDescription((MemberDoc)element);
-+ } else if (element instanceof ClassDoc) {
-+ printDescription((ClassDoc)element);
-+ } else if (element instanceof PackageDoc) {
-+ printDescription((PackageDoc)element);
-+ }
- }
-+ dlEnd();
- }
-- dlEnd();
- hr();
- }
-
-@@ -126,8 +130,10 @@
- printPackageLink(pkg, Util.getPackageName(pkg), true);
- print(" - ");
- print(configuration.getText("doclet.package") + " " + pkg.name());
-+ dtEnd();
- dd();
- printSummaryComment(pkg);
-+ ddEnd();
- }
-
- /**
-@@ -140,8 +146,10 @@
- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_INDEX, cd, true));
- print(" - ");
- printClassInfo(cd);
-+ dtEnd();
- dd();
- printComment(cd);
-+ ddEnd();
- }
-
- /**
-@@ -178,8 +186,10 @@
- println(" - ");
- printMemberDesc(member);
- println();
-+ dtEnd();
- dd();
- printComment(member);
-+ ddEnd();
- println();
- }
-
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java
-@@ -25,19 +25,20 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.lang.reflect.Modifier;
-+import java.util.*;
-+
-+import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
- import com.sun.tools.doclets.internal.toolkit.taglets.*;
-
--import com.sun.javadoc.*;
--import java.util.*;
--import java.lang.reflect.Modifier;
--
- /**
- * The base class for member writers.
- *
- * @author Robert Field
- * @author Atul M Dambalkar
- * @author Jamie Ho (Re-write)
-+ * @author Bhavesh Patel (Modified)
- */
- public abstract class AbstractMemberWriter {
-
-@@ -232,10 +233,26 @@
- }
- }
-
-+ /**
-+ * Print the deprecated output for the given member.
-+ *
-+ * @param member the member being documented.
-+ */
-+ protected void printDeprecated(ProgramElementDoc member) {
-+ String output = (new DeprecatedTaglet()).getTagletOutput(member,
-+ writer.getTagletWriterInstance(false)).toString().trim();
-+ if (!output.isEmpty()) {
-+ writer.printMemberDetailsListStartTag();
-+ writer.print(output);
-+ }
-+ }
-+
- protected void printComment(ProgramElementDoc member) {
- if (member.inlineTags().length > 0) {
-+ writer.printMemberDetailsListStartTag();
- writer.dd();
- writer.printInlineComment(member);
-+ writer.ddEnd();
- }
- }
-
-@@ -267,6 +284,14 @@
- }
-
- /**
-+ * Write the member footer.
-+ */
-+ protected void printMemberFooter() {
-+ writer.printMemberDetailsListEndTag();
-+ assert !writer.getMemberDetailsListPrinted();
-+ }
-+
-+ /**
- * Forward to containing writer
- */
- public void printSummaryHeader(ClassDoc cd) {
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java
-@@ -25,10 +25,10 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.io.*;
-+
-+import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.*;
--import com.sun.javadoc.*;
--
--import java.io.*;
-
- /**
- * Writes annotation type optional member documentation in HTML format.
-@@ -63,14 +63,20 @@
- * {@inheritDoc}
- */
- public void writeDefaultValueInfo(MemberDoc member) {
-- writer.dl();
-- writer.dt();
-- writer.strong(ConfigurationImpl.getInstance().
-- getText("doclet.Default"));
-- writer.dd();
-- writer.print(((AnnotationTypeElementDoc) member).defaultValue());
-- writer.ddEnd();
-- writer.dlEnd();
-+ if (((AnnotationTypeElementDoc) member).defaultValue() != null) {
-+ writer.printMemberDetailsListStartTag();
-+ writer.dd();
-+ writer.dl();
-+ writer.dt();
-+ writer.strong(ConfigurationImpl.getInstance().
-+ getText("doclet.Default"));
-+ writer.dtEnd();
-+ writer.dd();
-+ writer.print(((AnnotationTypeElementDoc) member).defaultValue());
-+ writer.ddEnd();
-+ writer.dlEnd();
-+ writer.ddEnd();
-+ }
- }
-
- /**
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java
-@@ -25,11 +25,10 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.io.*;
-+
-+import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.*;
--import com.sun.tools.doclets.internal.toolkit.taglets.*;
--import com.sun.javadoc.*;
--
--import java.io.*;
-
- /**
- * Writes annotation type required member documentation in HTML format.
-@@ -134,17 +133,14 @@
- strong(member.name());
- }
- writer.preEnd();
-- writer.dl();
-+ assert !writer.getMemberDetailsListPrinted();
- }
-
- /**
- * {@inheritDoc}
- */
- public void writeComments(MemberDoc member) {
-- if (member.inlineTags().length > 0) {
-- writer.dd();
-- writer.printInlineComment(member);
-- }
-+ printComment(member);
- }
-
- /**
-@@ -160,7 +156,7 @@
- * Write the annotation type member footer.
- */
- public void writeMemberFooter() {
-- writer.dlEnd();
-+ printMemberFooter();
- }
-
- /**
-@@ -267,9 +263,7 @@
- * {@inheritDoc}
- */
- public void writeDeprecated(MemberDoc member) {
-- print(((TagletOutputImpl)
-- (new DeprecatedTaglet()).getTagletOutput(member,
-- writer.getTagletWriterInstance(false))).toString());
-+ printDeprecated(member);
- }
-
- private Type getType(MemberDoc member) {
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java
-@@ -25,10 +25,10 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
- import com.sun.tools.doclets.internal.toolkit.builders.*;
--import com.sun.javadoc.*;
-
- /**
- * Generate the Class Information Page.
-@@ -165,8 +165,6 @@
- * {@inheritDoc}
- */
- public void writeAnnotationTypeSignature(String modifiers) {
-- dl();
-- dt();
- preNoNewLine();
- writeAnnotationInfo(annotationType);
- print(modifiers);
-@@ -178,7 +176,6 @@
- } else {
- strong(name);
- }
-- dlEnd();
- preEnd();
- p();
- }
-@@ -334,6 +331,7 @@
- } else {
- strongText("doclet.Enclosing_Class");
- }
-+ dtEnd();
- dd();
- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS, outerClass,
- false));
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java
-@@ -25,12 +25,12 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.util.*;
-+
-+import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
- import com.sun.tools.doclets.internal.toolkit.builders.*;
--import com.sun.javadoc.*;
--
--import java.util.*;
- import com.sun.tools.doclets.internal.toolkit.taglets.*;
-
- /**
-@@ -171,8 +171,6 @@
- */
- public void writeClassSignature(String modifiers) {
- boolean isInterface = classDoc.isInterface();
-- dl();
-- dt();
- preNoNewLine();
- writeAnnotationInfo(classDoc);
- print(modifiers);
-@@ -191,7 +189,7 @@
- Type superclass = Util.getFirstVisibleSuperClass(classDoc,
- configuration());
- if (superclass != null) {
-- dt();
-+ println();
- print("extends ");
- printLink(new LinkInfoImpl(
- LinkInfoImpl.CONTEXT_CLASS_SIGNATURE_PARENT_NAME,
-@@ -208,7 +206,7 @@
- continue;
- }
- if (counter == 0) {
-- dt();
-+ println();
- print(isInterface? "extends " : "implements ");
- } else {
- print(", ");
-@@ -219,7 +217,6 @@
- counter++;
- }
- }
-- dlEnd();
- preEnd();
- p();
- }
-@@ -342,6 +339,7 @@
- TagletOutput output = (new ParamTaglet()).getTagletOutput(classDoc,
- getTagletWriterInstance(false));
- print(output.toString());
-+ dtEnd();
- dlEnd();
- }
- }
-@@ -360,8 +358,10 @@
- dl();
- dt();
- strongText("doclet.Subclasses");
-+ dtEnd();
- writeClassLinks(LinkInfoImpl.CONTEXT_SUBCLASSES,
- subclasses);
-+ dlEnd();
- }
- }
- }
-@@ -376,8 +376,10 @@
- dl();
- dt();
- strongText("doclet.Subinterfaces");
-+ dtEnd();
- writeClassLinks(LinkInfoImpl.CONTEXT_SUBINTERFACES,
- subInterfaces);
-+ dlEnd();
- }
- }
- }
-@@ -398,8 +400,10 @@
- dl();
- dt();
- strongText("doclet.Implementing_Classes");
-+ dtEnd();
- writeClassLinks(LinkInfoImpl.CONTEXT_IMPLEMENTED_CLASSES,
- implcl);
-+ dlEnd();
- }
- }
-
-@@ -414,8 +418,10 @@
- dl();
- dt();
- strongText("doclet.All_Implemented_Interfaces");
-+ dtEnd();
- writeClassLinks(LinkInfoImpl.CONTEXT_IMPLEMENTED_INTERFACES,
- interfaceArray);
-+ dlEnd();
- }
- }
-
-@@ -430,8 +436,10 @@
- dl();
- dt();
- strongText("doclet.All_Superinterfaces");
-+ dtEnd();
- writeClassLinks(LinkInfoImpl.CONTEXT_SUPER_INTERFACES,
- interfaceArray);
-+ dlEnd();
- }
- }
-
-@@ -455,7 +463,6 @@
- }
- }
- ddEnd();
-- dlEnd();
- }
-
- protected void navLinkTree() {
-@@ -574,6 +581,7 @@
- } else {
- strongText("doclet.Enclosing_Class");
- }
-+ dtEnd();
- dd();
- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS, outerClass,
- false));
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java
-@@ -25,12 +25,12 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.io.*;
-+import java.util.*;
-+
-+import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
--import com.sun.tools.doclets.internal.toolkit.taglets.*;
--import com.sun.javadoc.*;
--import java.util.*;
--import java.io.*;
-
- /**
- * Writes constructor documentation.
-@@ -149,7 +149,7 @@
- writeParameters(constructor);
- writeExceptions(constructor);
- writer.preEnd();
-- writer.dl();
-+ assert !writer.getMemberDetailsListPrinted();
- }
-
- /**
-@@ -158,12 +158,7 @@
- * @param constructor the constructor being documented.
- */
- public void writeDeprecated(ConstructorDoc constructor) {
-- String output = ((TagletOutputImpl)
-- (new DeprecatedTaglet()).getTagletOutput(constructor,
-- writer.getTagletWriterInstance(false))).toString();
-- if (output != null && output.trim().length() > 0) {
-- writer.print(output);
-- }
-+ printDeprecated(constructor);
- }
-
- /**
-@@ -172,10 +167,7 @@
- * @param constructor the constructor being documented.
- */
- public void writeComments(ConstructorDoc constructor) {
-- if (constructor.inlineTags().length > 0) {
-- writer.dd();
-- writer.printInlineComment(constructor);
-- }
-+ printComment(constructor);
- }
-
- /**
-@@ -191,7 +183,7 @@
- * Write the constructor footer.
- */
- public void writeConstructorFooter() {
-- writer.dlEnd();
-+ printMemberFooter();
- }
-
- /**
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java
-@@ -25,12 +25,11 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.io.*;
-+
-+import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.*;
--import com.sun.tools.doclets.internal.toolkit.taglets.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
--import com.sun.javadoc.*;
--
--import java.io.*;
-
- /**
- * Writes enum constant documentation in HTML format.
-@@ -146,26 +145,21 @@
- strong(enumConstant.name());
- }
- writer.preEnd();
-- writer.dl();
-+ assert !writer.getMemberDetailsListPrinted();
- }
-
- /**
- * {@inheritDoc}
- */
- public void writeDeprecated(FieldDoc enumConstant) {
-- print(((TagletOutputImpl)
-- (new DeprecatedTaglet()).getTagletOutput(enumConstant,
-- writer.getTagletWriterInstance(false))).toString());
-+ printDeprecated(enumConstant);
- }
-
- /**
- * {@inheritDoc}
- */
- public void writeComments(FieldDoc enumConstant) {
-- if (enumConstant.inlineTags().length > 0) {
-- writer.dd();
-- writer.printInlineComment(enumConstant);
-- }
-+ printComment(enumConstant);
- }
-
- /**
-@@ -179,7 +173,7 @@
- * {@inheritDoc}
- */
- public void writeEnumConstantFooter() {
-- writer.dlEnd();
-+ printMemberFooter();
- }
-
- /**
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java
-@@ -25,12 +25,11 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.io.*;
-+
-+import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.*;
--import com.sun.tools.doclets.internal.toolkit.taglets.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
--import com.sun.javadoc.*;
--
--import java.io.*;
-
- /**
- * Writes field documentation in HTML format.
-@@ -156,7 +155,7 @@
- strong(field.name());
- }
- writer.preEnd();
-- writer.dl();
-+ assert !writer.getMemberDetailsListPrinted();
- }
-
- /**
-@@ -165,9 +164,7 @@
- * @param field the field being documented.
- */
- public void writeDeprecated(FieldDoc field) {
-- print(((TagletOutputImpl)
-- (new DeprecatedTaglet()).getTagletOutput(field,
-- writer.getTagletWriterInstance(false))).toString());
-+ printDeprecated(field);
- }
-
- /**
-@@ -178,10 +175,12 @@
- public void writeComments(FieldDoc field) {
- ClassDoc holder = field.containingClass();
- if (field.inlineTags().length > 0) {
-+ writer.printMemberDetailsListStartTag();
- if (holder.equals(classdoc) ||
- (! (holder.isPublic() || Util.isLinkable(holder, configuration())))) {
- writer.dd();
- writer.printInlineComment(field);
-+ writer.ddEnd();
- } else {
- String classlink = writer.codeText(
- writer.getDocLink(LinkInfoImpl.CONTEXT_FIELD_DOC_COPY,
-@@ -196,6 +195,7 @@
- writer.ddEnd();
- writer.dd();
- writer.printInlineComment(field);
-+ writer.ddEnd();
- }
- }
- }
-@@ -213,7 +213,7 @@
- * Write the field footer.
- */
- public void writeFieldFooter() {
-- writer.dlEnd();
-+ printMemberFooter();
- }
-
- /**
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java
-@@ -24,17 +24,16 @@
- */
-
- package com.sun.tools.doclets.formats.html;
--import com.sun.tools.doclets.formats.html.markup.*;
-
--import com.sun.tools.doclets.internal.toolkit.*;
--import com.sun.tools.doclets.internal.toolkit.util.*;
--import com.sun.tools.doclets.internal.toolkit.taglets.*;
--
--import com.sun.javadoc.*;
- import java.io.*;
- import java.text.SimpleDateFormat;
- import java.util.*;
-
-+import com.sun.javadoc.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-+import com.sun.tools.doclets.internal.toolkit.*;
-+import com.sun.tools.doclets.internal.toolkit.util.*;
-+import com.sun.tools.doclets.internal.toolkit.taglets.*;
-
- /**
- * Class for the Html Format Code Generation specific to JavaDoc.
-@@ -44,6 +43,7 @@
- * @since 1.2
- * @author Atul M Dambalkar
- * @author Robert Field
-+ * @author Bhavesh Patel (Modified)
- */
- public class HtmlDocletWriter extends HtmlDocWriter {
-
-@@ -205,7 +205,13 @@
- private void printMethodInfo(MethodDoc method) {
- ClassDoc[] intfacs = method.containingClass().interfaces();
- MethodDoc overriddenMethod = method.overriddenMethod();
-- if (intfacs.length > 0 || overriddenMethod != null) {
-+ // Check whether there is any implementation or overridden info to be
-+ // printed. If no overridden or implementation info needs to be
-+ // printed, do not print this section.
-+ if ((intfacs.length > 0 &&
-+ new ImplementedMethods(method, this.configuration).build().length > 0) ||
-+ overriddenMethod != null) {
-+ printMemberDetailsListStartTag();
- dd();
- printTagsInfoHeader();
- MethodWriterImpl.printImplementsInfo(this, method);
-@@ -216,7 +222,6 @@
- printTagsInfoFooter();
- ddEnd();
- }
-- dd();
- }
-
- protected void printTags(Doc doc) {
-@@ -230,41 +235,35 @@
- TagletWriter.genTagOuput(configuration.tagletManager, doc,
- configuration.tagletManager.getCustomTags(doc),
- getTagletWriterInstance(false), output);
-- if (output.toString().trim().length() > 0) {
-+ String outputString = output.toString().trim();
-+ // For RootDoc and ClassDoc, this section is not the definition description
-+ // but the start of definition list.
-+ if (!outputString.isEmpty()) {
-+ if (!(doc instanceof RootDoc || doc instanceof ClassDoc)) {
-+ printMemberDetailsListStartTag();
-+ dd();
-+ }
- printTagsInfoHeader();
-- print(output.toString());
-+ print(outputString);
- printTagsInfoFooter();
-- } else if (! (doc instanceof ConstructorDoc ||
-- doc instanceof RootDoc || doc instanceof ClassDoc)) {
-- //To be consistent with 1.4.2 output.
-- //I hate to do this but we have to pass the diff test to prove
-- //nothing has broken.
-- printTagsInfoHeader();
-- printTagsInfoFooter();
-+ if (!(doc instanceof RootDoc || doc instanceof ClassDoc))
-+ ddEnd();
- }
- }
-
- /**
-- * Check whether there are any tags to be printed.
-+ * Check whether there are any tags for Serialization Overview
-+ * section to be printed.
- *
-- * @param doc the Doc object to check for tags.
-+ * @param field the FieldDoc object to check for tags.
- * @return true if there are tags to be printed else return false.
- */
-- protected boolean hasTagsToPrint(Doc doc) {
-- if (doc instanceof MethodDoc) {
-- ClassDoc[] intfacs = ((MethodDoc)doc).containingClass().interfaces();
-- MethodDoc overriddenMethod = ((MethodDoc)doc).overriddenMethod();
-- if ((intfacs.length > 0 &&
-- new ImplementedMethods((MethodDoc)doc, this.configuration).build().length > 0) ||
-- overriddenMethod != null) {
-- return true;
-- }
-- }
-+ protected boolean hasSerializationOverviewTags(FieldDoc field) {
- TagletOutputImpl output = new TagletOutputImpl("");
-- TagletWriter.genTagOuput(configuration.tagletManager, doc,
-- configuration.tagletManager.getCustomTags(doc),
-+ TagletWriter.genTagOuput(configuration.tagletManager, field,
-+ configuration.tagletManager.getCustomTags(field),
- getTagletWriterInstance(false), output);
-- return (output.toString().trim().isEmpty());
-+ return (!output.toString().trim().isEmpty());
- }
-
- /**
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java
-@@ -25,11 +25,12 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.util.*;
-+
-+import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.taglets.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
--import com.sun.javadoc.*;
--import java.util.*;
-
- /**
- * Generate serialized form for serializable fields.
-@@ -37,6 +38,7 @@
- * <code>serialField</code> is processed.
- *
- * @author Joe Fialli
-+ * @author Bhavesh Patel (Modified)
- */
- public class HtmlSerialFieldWriter extends FieldWriterImpl
- implements SerializedFormWriter.SerialFieldWriter {
-@@ -75,7 +77,7 @@
- writer.println();
- if (heading.equals(
- configuration().getText("doclet.Serialized_Form_class"))) {
-- writer.dl();
-+ assert !writer.getMemberDetailsListPrinted();
- }
- } else {
- writer.printTableHeadingBackground(heading);
-@@ -102,7 +104,7 @@
- print(fieldDimensions + ' ');
- strong(fieldName);
- writer.preEnd();
-- writer.dl();
-+ assert !writer.getMemberDetailsListPrinted();
- }
-
- /**
-@@ -111,9 +113,7 @@
- * @param field the field to document.
- */
- public void writeMemberDeprecatedInfo(FieldDoc field) {
-- print(((TagletOutputImpl)
-- (new DeprecatedTaglet()).getTagletOutput(field,
-- writer.getTagletWriterInstance(false))).toString());
-+ printDeprecated(field);
- }
-
- /**
-@@ -123,14 +123,17 @@
- */
- public void writeMemberDescription(FieldDoc field) {
- if (field.inlineTags().length > 0) {
-+ writer.printMemberDetailsListStartTag();
- writer.dd();
- writer.printInlineComment(field);
-+ writer.ddEnd();
- }
- Tag[] tags = field.tags("serial");
- if (tags.length > 0) {
-- writer.dt();
-+ writer.printMemberDetailsListStartTag();
- writer.dd();
- writer.printInlineComment(field, tags[0]);
-+ writer.ddEnd();
- }
- }
-
-@@ -140,9 +143,14 @@
- * @param serialFieldTag the field to document (represented by tag).
- */
- public void writeMemberDescription(SerialFieldTag serialFieldTag) {
-- writer.dd();
-- writer.print(serialFieldTag.description());
-- writer.dlEnd();
-+ String serialFieldTagDesc = serialFieldTag.description().trim();
-+ if (!serialFieldTagDesc.isEmpty()) {
-+ writer.dl();
-+ writer.dd();
-+ writer.print(serialFieldTagDesc);
-+ writer.ddEnd();
-+ writer.dlEnd();
-+ }
- }
-
- /**
-@@ -151,33 +159,57 @@
- * @param field the field to document.
- */
- public void writeMemberTags(FieldDoc field) {
-- writer.dl();
- TagletOutputImpl output = new TagletOutputImpl("");
- TagletWriter.genTagOuput(configuration().tagletManager, field,
- configuration().tagletManager.getCustomTags(field),
- writer.getTagletWriterInstance(false), output);
-- if (output.toString().length() > 0) {
-- print(output.toString());
-+ String outputString = output.toString().trim();
-+ if (!outputString.isEmpty()) {
-+ writer.printMemberDetailsListStartTag();
-+ writer.dd();
-+ writer.dl();
-+ print(outputString);
-+ writer.dlEnd();
-+ writer.ddEnd();
- }
-- writer.dlEnd();
-- }
-- public void writeMemberFooter(FieldDoc member) {
-- writer.dlEnd();
- }
-
- /**
-- * Check to see if member details should be printed. If
-+ * Check to see if overview details should be printed. If
- * nocomment option set or if there is no text to be printed
-- * for deprecation info, inline comment, no serial tag or inline tags,
-- * do not print member details.
-+ * for deprecation info, comment or tags, do not print overview details.
-+ *
-+ * @param field the field to check overview details for.
-+ * @return true if overview details need to be printed
- */
-- public boolean shouldPrintMemberDetails(FieldDoc field) {
-- if (!configuration().nocomment)
-- if((field.inlineTags().length > 0) ||
-- (field.tags("serial").length > 0) || (writer.hasTagsToPrint(field)))
-+ public boolean shouldPrintOverview(FieldDoc field) {
-+ if (!configuration().nocomment) {
-+ if(!field.commentText().isEmpty() ||
-+ writer.hasSerializationOverviewTags(field))
- return true;
-- if (!Util.isDeprecated(field))
-+ }
-+ if (field.tags("deprecated").length > 0)
- return true;
- return false;
- }
-+
-+ public void writeMemberFooter() {
-+ printMemberFooter();
-+ }
-+
-+ /**
-+ * Write the footer information. If the serilization overview section was
-+ * printed, check for definition list and close list tag.
-+ *
-+ * @param heading the heading that was written.
-+ */
-+ public void writeFooter(String heading) {
-+ if (printedOverallAnchor) {
-+ if (heading.equals(
-+ configuration().getText("doclet.Serialized_Form_class"))) {
-+ writer.printMemberDetailsListEndTag();
-+ assert !writer.getMemberDetailsListPrinted();
-+ }
-+ }
-+ }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialMethodWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialMethodWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialMethodWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialMethodWriter.java
-@@ -25,9 +25,9 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.taglets.*;
--import com.sun.javadoc.*;
-
- /**
- * Generate serialized form for Serializable/Externalizable methods.
-@@ -66,14 +66,12 @@
- writeSignature(member);
- }
-
-- public void writeMemberFooter(MethodDoc member) {
-- writer.dlEnd();
-+ public void writeMemberFooter() {
-+ printMemberFooter();
- }
-
- public void writeDeprecatedMemberInfo(MethodDoc member) {
-- print(((TagletOutputImpl)
-- (new DeprecatedTaglet()).getTagletOutput(member,
-- writer.getTagletWriterInstance(false))).toString());
-+ printDeprecated(member);
- }
-
- public void writeMemberDescription(MethodDoc member) {
-@@ -81,23 +79,27 @@
- }
-
- public void writeMemberTags(MethodDoc member) {
-- writer.dd();
-- writer.dl();
- TagletOutputImpl output = new TagletOutputImpl("");
- TagletManager tagletManager =
- ConfigurationImpl.getInstance().tagletManager;
- TagletWriter.genTagOuput(tagletManager, member,
- tagletManager.getSerializedFormTags(),
- writer.getTagletWriterInstance(false), output);
-- print(output.toString());
-+ String outputString = output.toString().trim();
-+ if (!outputString.isEmpty()) {
-+ writer.printMemberDetailsListStartTag();
-+ writer.dd();
-+ writer.dl();
-+ print(outputString);
-+ writer.dlEnd();
-+ writer.ddEnd();
-+ }
- MethodDoc method = (MethodDoc)member;
- if (method.name().compareTo("writeExternal") == 0
- && method.tags("serialData").length == 0) {
- serialWarning(member.position(), "doclet.MissingSerialDataTag",
- method.containingClass().qualifiedName(), method.name());
- }
-- writer.ddEnd();
-- writer.dlEnd();
- }
-
- protected void printTypeLinkNoDimension(Type type) {
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java
-@@ -25,13 +25,13 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.io.*;
-+
-+import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
- import com.sun.tools.doclets.internal.toolkit.taglets.*;
-
--import java.io.*;
--import com.sun.javadoc.*;
--
- /**
- * Writes method documentation in HTML format.
- *
-@@ -172,7 +172,7 @@
- writeParameters(method);
- writeExceptions(method);
- writer.preEnd();
-- writer.dl();
-+ assert !writer.getMemberDetailsListPrinted();
- }
-
- /**
-@@ -181,12 +181,7 @@
- * @param method the method being documented.
- */
- public void writeDeprecated(MethodDoc method) {
-- String output = ((TagletOutputImpl)
-- (new DeprecatedTaglet()).getTagletOutput(method,
-- writer.getTagletWriterInstance(false))).toString();
-- if (output != null && output.trim().length() > 0) {
-- writer.print(output);
-- }
-+ printDeprecated(method);
- }
-
- /**
-@@ -197,11 +192,13 @@
- public void writeComments(Type holder, MethodDoc method) {
- ClassDoc holderClassDoc = holder.asClassDoc();
- if (method.inlineTags().length > 0) {
-+ writer.printMemberDetailsListStartTag();
- if (holder.asClassDoc().equals(classdoc) ||
- (! (holderClassDoc.isPublic() ||
- Util.isLinkable(holderClassDoc, configuration())))) {
- writer.dd();
- writer.printInlineComment(method);
-+ writer.ddEnd();
- } else {
- String classlink = writer.codeText(
- writer.getDocLink(LinkInfoImpl.CONTEXT_METHOD_DOC_COPY,
-@@ -217,6 +214,7 @@
- writer.ddEnd();
- writer.dd();
- writer.printInlineComment(method);
-+ writer.ddEnd();
- }
- }
- }
-@@ -234,8 +232,7 @@
- * Write the method footer.
- */
- public void writeMethodFooter() {
-- writer.ddEnd();
-- writer.dlEnd();
-+ printMemberFooter();
- }
-
- /**
-@@ -318,6 +315,7 @@
- String name = method.name();
- writer.dt();
- writer.strongText(label);
-+ writer.dtEnd();
- writer.dd();
- String methLink = writer.codeText(
- writer.getLink(
-@@ -326,6 +324,7 @@
- writer.getAnchor(method), name, false)
- ));
- writer.printText("doclet.in_class", methLink, overriddenTypeLink);
-+ writer.ddEnd();
- }
- }
-
-@@ -364,11 +363,13 @@
- LinkInfoImpl.CONTEXT_METHOD_SPECIFIED_BY, intfac)));
- writer.dt();
- writer.strongText("doclet.Specified_By");
-+ writer.dtEnd();
- writer.dd();
- methlink = writer.codeText(writer.getDocLink(
- LinkInfoImpl.CONTEXT_MEMBER, implementedMeth,
- implementedMeth.name(), false));
- writer.printText("doclet.in_interface", methlink, intfaclink);
-+ writer.ddEnd();
- }
-
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java
-@@ -25,11 +25,11 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.io.*;
-+
-+import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
--import com.sun.javadoc.*;
--
--import java.io.*;
-
- /**
- * Writes nested class documentation in HTML format.
-@@ -129,7 +129,6 @@
- writer.println("");
- }
- writer.anchor(nestedClass.name());
-- writer.dl();
- writer.h3();
- writer.print(nestedClass.name());
- writer.h3End();
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageTreeWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageTreeWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageTreeWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageTreeWriter.java
-@@ -25,9 +25,10 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.io.*;
-+
-+import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
--import com.sun.javadoc.*;
--import java.io.*;
-
- /**
- * Class to generate Tree page for a package. The name of the file generated is
-@@ -145,8 +146,10 @@
- dl();
- dt();
- strongText("doclet.Package_Hierarchies");
-+ dtEnd();
- dd();
- navLinkMainTree(configuration.getText("doclet.All_Packages"));
-+ ddEnd();
- dlEnd();
- hr();
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java
-@@ -25,17 +25,18 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.builders.SerializedFormBuilder;
- import com.sun.tools.doclets.internal.toolkit.taglets.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
--import com.sun.javadoc.*;
-
- /**
- * The taglet writer that writes HTML.
- *
- * @since 1.5
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- */
-
- public class TagletWriterImpl extends TagletWriter {
-@@ -99,11 +100,12 @@
- output.append(DocletConstants.NL + "<P>" +
- DocletConstants.NL);
- }
-+ output.append("</DD>");
- } else {
- if (Util.isDeprecated(member.containingClass())) {
- output.append("<DD><STRONG>" +
- ConfigurationImpl.getInstance().
-- getText("doclet.Deprecated") + "</STRONG>&nbsp;");
-+ getText("doclet.Deprecated") + "</STRONG>&nbsp;</DD>");
- }
- }
- }
-@@ -123,7 +125,7 @@
- public TagletOutput getParamHeader(String header) {
- StringBuffer result = new StringBuffer();
- result.append("<DT>");
-- result.append("<STRONG>" + header + "</STRONG>");
-+ result.append("<STRONG>" + header + "</STRONG></DT>");
- return new TagletOutputImpl(result.toString());
- }
-
-@@ -132,7 +134,7 @@
- */
- public TagletOutput paramTagOutput(ParamTag paramTag, String paramName) {
- TagletOutput result = new TagletOutputImpl("<DD><CODE>" + paramName + "</CODE>"
-- + " - " + htmlWriter.commentTagsToString(paramTag, null, paramTag.inlineTags(), false));
-+ + " - " + htmlWriter.commentTagsToString(paramTag, null, paramTag.inlineTags(), false) + "</DD>");
- return result;
- }
-
-@@ -142,9 +144,9 @@
- public TagletOutput returnTagOutput(Tag returnTag) {
- TagletOutput result = new TagletOutputImpl(DocletConstants.NL + "<DT>" +
- "<STRONG>" + htmlWriter.configuration.getText("doclet.Returns") +
-- "</STRONG>" + "<DD>" +
-+ "</STRONG>" + "</DT>" + "<DD>" +
- htmlWriter.commentTagsToString(returnTag, null, returnTag.inlineTags(),
-- false));
-+ false) + "</DD>");
- return result;
- }
-
-@@ -174,22 +176,21 @@
- }
- if (holder.isClass() && ((ClassDoc)holder).isSerializable()) {
- //Automatically add link to serialized form page for serializable classes.
-- if (!(SerializedFormBuilder.serialInclude(holder) &&
-+ if ((SerializedFormBuilder.serialInclude(holder) &&
- SerializedFormBuilder.serialInclude(((ClassDoc)holder).containingPackage()))) {
-- return result.equals("") ? null : new TagletOutputImpl(result);
-+ result = addSeeHeader(result);
-+ result += htmlWriter.getHyperLink(htmlWriter.relativePath + "serialized-form.html",
-+ ((ClassDoc)holder).qualifiedName(), htmlWriter.configuration.getText("doclet.Serialized_Form"), false);
- }
-- result = addSeeHeader(result);
-- result += htmlWriter.getHyperLink(htmlWriter.relativePath + "serialized-form.html",
-- ((ClassDoc)holder).qualifiedName(), htmlWriter.configuration.getText("doclet.Serialized_Form"), false);
- }
-- return result.equals("") ? null : new TagletOutputImpl(result);
-+ return result.equals("") ? null : new TagletOutputImpl(result + "</DD>");
- }
-
- private String addSeeHeader(String result) {
- if (result != null && result.length() > 0) {
- return result + ", " + DocletConstants.NL;
- } else {
-- return "<DT><STRONG>" + htmlWriter.configuration().getText("doclet.See_Also") + "</STRONG><DD>";
-+ return "<DT><STRONG>" + htmlWriter.configuration().getText("doclet.See_Also") + "</STRONG></DT><DD>";
- }
- }
-
-@@ -205,7 +206,8 @@
- }
- result += htmlWriter.commentTagsToString(simpleTags[i], null, simpleTags[i].inlineTags(), false);
- }
-- return new TagletOutputImpl(result + "</DD>" + DocletConstants.NL);
-+ result += "</DD>" + DocletConstants.NL;
-+ return new TagletOutputImpl(result);
- }
-
- /**
-@@ -222,7 +224,7 @@
- */
- public TagletOutput getThrowsHeader() {
- return new TagletOutputImpl(DocletConstants.NL + "<DT>" + "<STRONG>" +
-- htmlWriter.configuration().getText("doclet.Throws") + "</STRONG>");
-+ htmlWriter.configuration().getText("doclet.Throws") + "</STRONG></DT>");
- }
-
- /**
-@@ -241,6 +243,7 @@
- if (text != null && text.toString().length() > 0) {
- result += " - " + text;
- }
-+ result += "</DD>";
- return new TagletOutputImpl(result);
- }
-
-@@ -250,7 +253,7 @@
- public TagletOutput throwsTagOutput(Type throwsType) {
- return new TagletOutputImpl(DocletConstants.NL + "<DD>" +
- htmlWriter.codeText(htmlWriter.getLink(
-- new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER, throwsType))));
-+ new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER, throwsType))) + "</DD>");
- }
-
- /**
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/TreeWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/TreeWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/TreeWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/TreeWriter.java
-@@ -25,9 +25,11 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.io.*;
-+
-+import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
--import com.sun.javadoc.*;
--import java.io.*;
-+
- /**
- * Generate Class Hierarchy page for all the Classes in this run. Use
- * ClassTree for building the Tree. The name of
-@@ -120,6 +122,7 @@
- dl();
- dt();
- strongText("doclet.Package_Hierarchies");
-+ dtEnd();
- dd();
- for (int i = 0; i < packages.length; i++) {
- if (packages[i].name().length() == 0) {
-@@ -131,6 +134,7 @@
- print(", ");
- }
- }
-+ ddEnd();
- dlEnd();
- hr();
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java
-@@ -245,6 +245,31 @@
- }
-
- /**
-+ * Keep track of member details list. Print the definition list start tag
-+ * if it is not printed yet.
-+ */
-+ public void printMemberDetailsListStartTag () {
-+ if (!getMemberDetailsListPrinted()) {
-+ dl();
-+ memberDetailsListPrinted = true;
-+ }
-+ }
-+
-+ /**
-+ * Print the definition list end tag if the list start tag was printed.
-+ */
-+ public void printMemberDetailsListEndTag () {
-+ if (getMemberDetailsListPrinted()) {
-+ dlEnd();
-+ memberDetailsListPrinted = false;
-+ }
-+ }
-+
-+ public boolean getMemberDetailsListPrinted() {
-+ return memberDetailsListPrinted;
-+ }
-+
-+ /**
- * Print the frameset version of the Html file header.
- * Called only when generating an HTML frameset file.
- *
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java
-@@ -25,9 +25,10 @@
-
- package com.sun.tools.doclets.formats.html.markup;
-
-+import java.io.*;
-+
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
--import java.io.*;
-
- /**
- * Class for the Html format code generation.
-@@ -61,6 +62,11 @@
- protected Configuration configuration;
-
- /**
-+ * The flag to indicate whether a member details list is printed or not.
-+ */
-+ protected boolean memberDetailsListPrinted;
-+
-+ /**
- * Constructor.
- *
- * @param path The directory path to be created for this file
-@@ -79,6 +85,7 @@
- super(Util.genWriter(configuration, path, filename, docencoding));
- this.configuration = configuration;
- htmlFilename = filename;
-+ this.memberDetailsListPrinted = false;
- }
-
- /**
-@@ -529,7 +536,14 @@
- }
-
- /**
-- * Print &lt;DT&gt; tag.
-+ * Print &lt;/DT&gt; tag.
-+ */
-+ public void dtEnd() {
-+ print("</DT>");
-+ }
-+
-+ /**
-+ * Print &lt;DD&gt; tag.
- */
- public void dd() {
- print("<DD>");
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java
-@@ -25,8 +25,9 @@
-
- package com.sun.tools.doclets.internal.toolkit;
-
-+import java.io.*;
-+
- import com.sun.javadoc.*;
--import java.io.*;
-
- /**
- * The interface for writing serialized form output.
-@@ -147,22 +148,27 @@
- String fieldDimensions, String fieldName);
-
- /**
-+ * Write the member footer.
-+ */
-+ public void writeMemberFooter();
-+
-+ /**
-+ * Check to see if overview details should be printed. If
-+ * nocomment option set or if there is no text to be printed
-+ * for deprecation info, inline comment or tags,
-+ * do not print overview details.
-+ *
-+ * @param field the field to check overview details for.
-+ * @return true if overview details need to be printed
-+ */
-+ public boolean shouldPrintOverview(FieldDoc field);
-+
-+ /**
- * Write the footer.
- *
-- * @param member the member to write the header for.
-+ * @param heading the heading that was written.
- */
-- public void writeMemberFooter(FieldDoc member);
--
-- /**
-- * Check to see if member details should be printed. If
-- * nocomment option set or if there is no text to be printed
-- * for deprecation info, inline comment, no serial tag or inline tags,
-- * do not print member details.
-- *
-- * @param member the member to check details for.
-- * @return true if details need to be printed
-- */
-- public boolean shouldPrintMemberDetails(FieldDoc member);
-+ public void writeFooter (String heading);
- }
-
- /**
-@@ -193,10 +199,8 @@
-
- /**
- * Write the footer.
-- *
-- * @param member the member to write the header for.
- */
-- public void writeMemberFooter(MethodDoc member);
-+ public void writeMemberFooter();
-
- /**
- * Write the deprecated information for this member.
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java
-@@ -25,13 +25,14 @@
-
- package com.sun.tools.doclets.internal.toolkit.builders;
-
--import com.sun.tools.doclets.internal.toolkit.util.*;
--import com.sun.tools.doclets.internal.toolkit.*;
--import com.sun.javadoc.*;
- import java.io.*;
- import java.lang.reflect.*;
- import java.util.*;
-
-+import com.sun.javadoc.*;
-+import com.sun.tools.doclets.internal.toolkit.util.*;
-+import com.sun.tools.doclets.internal.toolkit.*;
-+
- /**
- * Builds the serialized form.
- *
-@@ -40,6 +41,7 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
- public class SerializedFormBuilder extends AbstractBuilder {
-@@ -379,7 +381,7 @@
- * Build the method footer.
- */
- public void buildMethodFooter() {
-- methodWriter.writeMemberFooter((MethodDoc) currentMember);
-+ methodWriter.writeMemberFooter();
- }
-
- /**
-@@ -407,13 +409,17 @@
- // information to be printed.
- if (fieldWriter.shouldPrintMemberDetails(serialPersistentField)) {
- fieldWriter.writeHeader(
-- configuration.getText("doclet.Serialized_Form_class"));
-+ configuration.getText("doclet.Serialized_Form_class"));
- fieldWriter.writeMemberDeprecatedInfo(serialPersistentField);
- if (!configuration.nocomment) {
- fieldWriter.writeMemberDescription(serialPersistentField);
- fieldWriter.writeMemberTags(serialPersistentField);
- }
- fieldWriter.writeMemberFooter(serialPersistentField);
-+ // Footer required to close the definition list tag
-+ // for serialization overview.
-+ fieldWriter.writeFooter(
-+ configuration.getText("doclet.Serialized_Form_class"));
- }
- }
- }
-@@ -476,11 +482,11 @@
- }
-
- /**
-- * Build the field footer.
-+ * Build the field sub footer.
- */
-- public void buildFieldFooter() {
-+ public void buildFieldSubFooter() {
- if (! currentClass.definesSerializableFields()) {
-- fieldWriter.writeMemberFooter((FieldDoc) currentMember);
-+ fieldWriter.writeMemberFooter();
- }
- }
-
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclet.xml b/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclet.xml
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclet.xml
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclet.xml
-@@ -26,180 +26,180 @@
- -->
-
-
--<Doclet>
--
-- <PackageDoc>
-- <PackageHeader/>
-- <Summary>
-- <SummaryHeader/>
-- <InterfaceSummary/>
-- <ClassSummary/>
-- <EnumSummary/>
-- <ExceptionSummary/>
-- <ErrorSummary/>
-- <AnnotationTypeSummary/>
-- <SummaryFooter/>
-- </Summary>
-- <PackageDescription/>
-- <PackageTags/>
-- <PackageFooter/>
-- </PackageDoc>
--
-- <AnnotationTypeDoc>
-- <AnnotationTypeHeader/>
-- <DeprecationInfo/>
-- <AnnotationTypeSignature/>
-- <AnnotationTypeDescription/>
-- <AnnotationTypeTagInfo/>
-- <MemberSummary>
-- <AnnotationTypeRequiredMemberSummary/>
-- <AnnotationTypeOptionalMemberSummary/>
-- </MemberSummary>
-- <AnnotationTypeRequiredMemberDetails>
-- <Header/>
-- <AnnotationTypeRequiredMember>
-- <MemberHeader/>
-- <Signature/>
-- <DeprecationInfo/>
-- <MemberComments/>
-- <TagInfo/>
-- <MemberFooter/>
-- </AnnotationTypeRequiredMember>
-- </AnnotationTypeRequiredMemberDetails>
-- <AnnotationTypeOptionalMemberDetails>
-- <AnnotationTypeOptionalMember>
-- <MemberHeader/>
-- <Signature/>
-- <DeprecationInfo/>
-- <MemberComments/>
-- <TagInfo/>
-- <DefaultValueInfo/>
-- <MemberFooter/>
-- </AnnotationTypeOptionalMember>
-- <Footer/>
-- </AnnotationTypeOptionalMemberDetails>
-- <AnnotationTypeFooter/>
-- </AnnotationTypeDoc>
--
-- <ClassDoc>
-- <ClassHeader/>
-- <ClassTree/>
-- <TypeParamInfo/>
-- <SuperInterfacesInfo/>
-- <ImplementedInterfacesInfo/>
-- <SubClassInfo/>
-- <SubInterfacesInfo/>
-- <InterfaceUsageInfo/>
-- <NestedClassInfo/>
-- <DeprecationInfo/>
-- <ClassSignature/>
-- <ClassDescription/>
-- <ClassTagInfo/>
-- <MemberSummary>
-- <NestedClassesSummary/>
-- <NestedClassesInheritedSummary/>
-- <EnumConstantsSummary/>
-- <FieldsSummary/>
-- <FieldsInheritedSummary/>
-- <ConstructorsSummary/>
-- <MethodsSummary/>
-- <MethodsInheritedSummary/>
-- </MemberSummary>
-- <EnumConstantsDetails>
-- <Header/>
-- <EnumConstant>
-- <EnumConstantHeader/>
-- <Signature/>
-- <DeprecationInfo/>
-- <EnumConstantComments/>
-- <TagInfo/>
-- <EnumConstantFooter/>
-- </EnumConstant>
-- <Footer/>
-- </EnumConstantsDetails>
-- <FieldDetails>
-- <Header/>
-- <FieldDoc>
-- <FieldHeader/>
-- <Signature/>
-- <DeprecationInfo/>
-- <FieldComments/>
-- <TagInfo/>
-- <FieldFooter/>
-- </FieldDoc>
-- <Footer/>
-- </FieldDetails>
-- <ConstructorDetails>
-- <Header/>
-- <ConstructorDoc>
-- <ConstructorHeader/>
-- <Signature/>
-- <DeprecationInfo/>
-- <ConstructorComments/>
-- <TagInfo/>
-- <ConstructorFooter/>
-- </ConstructorDoc>
-- <Footer/>
-- </ConstructorDetails>
-- <MethodDetails>
-- <Header/>
-- <MethodDoc>
-- <MethodHeader/>
-- <Signature/>
-- <DeprecationInfo/>
-- <MethodComments/>
-- <TagInfo/>
-- <MethodFooter/>
-- </MethodDoc>
-- <Footer/>
-- </MethodDetails>
-- <ClassFooter/>
-- </ClassDoc>
--
-- <ConstantSummary>
-- <Header/>
-- <Contents/>
-- <ConstantSummaries>
-- <PackageConstantSummary>
-- <PackageHeader/>
-- <ClassConstantSummary>
-- <ClassHeader/>
-- <ConstantMembers/>
-- <ClassFooter/>
-- </ClassConstantSummary>
-- </PackageConstantSummary>
-- </ConstantSummaries>
-- <Footer/>
-- </ConstantSummary>
--
-- <SerializedForm>
-- <Header/>
-- <SerializedFormSummaries>
-- <PackageSerializedForm>
-- <PackageHeader/>
-- <ClassSerializedForm>
-- <ClassHeader/>
-- <SerialUIDInfo/>
-- <MethodHeader/>
-- <SerializableMethods>
-- <MethodSubHeader/>
-- <DeprecatedMethodInfo/>
-- <MethodInfo>
-- <MethodDescription/>
-- <MethodTags/>
-- </MethodInfo>
-- <MethodFooter/>
-- </SerializableMethods>
-- <FieldHeader/>
-- <SerializableFields>
-- <FieldSubHeader/>
-- <FieldDeprecationInfo/>
-- <FieldInfo/>
-- <FieldFooter/>
-- </SerializableFields>
-- </ClassSerializedForm>
-- </PackageSerializedForm>
-- </SerializedFormSummaries>
-- <Footer/>
-- </SerializedForm>
--</Doclet>
-+<Doclet>
-+
-+ <PackageDoc>
-+ <PackageHeader/>
-+ <Summary>
-+ <SummaryHeader/>
-+ <InterfaceSummary/>
-+ <ClassSummary/>
-+ <EnumSummary/>
-+ <ExceptionSummary/>
-+ <ErrorSummary/>
-+ <AnnotationTypeSummary/>
-+ <SummaryFooter/>
-+ </Summary>
-+ <PackageDescription/>
-+ <PackageTags/>
-+ <PackageFooter/>
-+ </PackageDoc>
-+
-+ <AnnotationTypeDoc>
-+ <AnnotationTypeHeader/>
-+ <DeprecationInfo/>
-+ <AnnotationTypeSignature/>
-+ <AnnotationTypeDescription/>
-+ <AnnotationTypeTagInfo/>
-+ <MemberSummary>
-+ <AnnotationTypeRequiredMemberSummary/>
-+ <AnnotationTypeOptionalMemberSummary/>
-+ </MemberSummary>
-+ <AnnotationTypeRequiredMemberDetails>
-+ <Header/>
-+ <AnnotationTypeRequiredMember>
-+ <MemberHeader/>
-+ <Signature/>
-+ <DeprecationInfo/>
-+ <MemberComments/>
-+ <TagInfo/>
-+ <MemberFooter/>
-+ </AnnotationTypeRequiredMember>
-+ </AnnotationTypeRequiredMemberDetails>
-+ <AnnotationTypeOptionalMemberDetails>
-+ <AnnotationTypeOptionalMember>
-+ <MemberHeader/>
-+ <Signature/>
-+ <DeprecationInfo/>
-+ <MemberComments/>
-+ <TagInfo/>
-+ <DefaultValueInfo/>
-+ <MemberFooter/>
-+ </AnnotationTypeOptionalMember>
-+ <Footer/>
-+ </AnnotationTypeOptionalMemberDetails>
-+ <AnnotationTypeFooter/>
-+ </AnnotationTypeDoc>
-+
-+ <ClassDoc>
-+ <ClassHeader/>
-+ <ClassTree/>
-+ <TypeParamInfo/>
-+ <SuperInterfacesInfo/>
-+ <ImplementedInterfacesInfo/>
-+ <SubClassInfo/>
-+ <SubInterfacesInfo/>
-+ <InterfaceUsageInfo/>
-+ <NestedClassInfo/>
-+ <DeprecationInfo/>
-+ <ClassSignature/>
-+ <ClassDescription/>
-+ <ClassTagInfo/>
-+ <MemberSummary>
-+ <NestedClassesSummary/>
-+ <NestedClassesInheritedSummary/>
-+ <EnumConstantsSummary/>
-+ <FieldsSummary/>
-+ <FieldsInheritedSummary/>
-+ <ConstructorsSummary/>
-+ <MethodsSummary/>
-+ <MethodsInheritedSummary/>
-+ </MemberSummary>
-+ <EnumConstantsDetails>
-+ <Header/>
-+ <EnumConstant>
-+ <EnumConstantHeader/>
-+ <Signature/>
-+ <DeprecationInfo/>
-+ <EnumConstantComments/>
-+ <TagInfo/>
-+ <EnumConstantFooter/>
-+ </EnumConstant>
-+ <Footer/>
-+ </EnumConstantsDetails>
-+ <FieldDetails>
-+ <Header/>
-+ <FieldDoc>
-+ <FieldHeader/>
-+ <Signature/>
-+ <DeprecationInfo/>
-+ <FieldComments/>
-+ <TagInfo/>
-+ <FieldFooter/>
-+ </FieldDoc>
-+ <Footer/>
-+ </FieldDetails>
-+ <ConstructorDetails>
-+ <Header/>
-+ <ConstructorDoc>
-+ <ConstructorHeader/>
-+ <Signature/>
-+ <DeprecationInfo/>
-+ <ConstructorComments/>
-+ <TagInfo/>
-+ <ConstructorFooter/>
-+ </ConstructorDoc>
-+ <Footer/>
-+ </ConstructorDetails>
-+ <MethodDetails>
-+ <Header/>
-+ <MethodDoc>
-+ <MethodHeader/>
-+ <Signature/>
-+ <DeprecationInfo/>
-+ <MethodComments/>
-+ <TagInfo/>
-+ <MethodFooter/>
-+ </MethodDoc>
-+ <Footer/>
-+ </MethodDetails>
-+ <ClassFooter/>
-+ </ClassDoc>
-+
-+ <ConstantSummary>
-+ <Header/>
-+ <Contents/>
-+ <ConstantSummaries>
-+ <PackageConstantSummary>
-+ <PackageHeader/>
-+ <ClassConstantSummary>
-+ <ClassHeader/>
-+ <ConstantMembers/>
-+ <ClassFooter/>
-+ </ClassConstantSummary>
-+ </PackageConstantSummary>
-+ </ConstantSummaries>
-+ <Footer/>
-+ </ConstantSummary>
-+
-+ <SerializedForm>
-+ <Header/>
-+ <SerializedFormSummaries>
-+ <PackageSerializedForm>
-+ <PackageHeader/>
-+ <ClassSerializedForm>
-+ <ClassHeader/>
-+ <SerialUIDInfo/>
-+ <MethodHeader/>
-+ <SerializableMethods>
-+ <MethodSubHeader/>
-+ <DeprecatedMethodInfo/>
-+ <MethodInfo>
-+ <MethodDescription/>
-+ <MethodTags/>
-+ </MethodInfo>
-+ <MethodFooter/>
-+ </SerializableMethods>
-+ <FieldHeader/>
-+ <SerializableFields>
-+ <FieldSubHeader/>
-+ <FieldDeprecationInfo/>
-+ <FieldInfo/>
-+ <FieldSubFooter/>
-+ </SerializableFields>
-+ </ClassSerializedForm>
-+ </PackageSerializedForm>
-+ </SerializedFormSummaries>
-+ <Footer/>
-+ </SerializedForm>
-+</Doclet>
-diff --git a/test/com/sun/javadoc/AuthorDD/AuthorDD.java b/test/com/sun/javadoc/AuthorDD/AuthorDD.java
---- langtools/test/com/sun/javadoc/AuthorDD/AuthorDD.java
-+++ langtools/test/com/sun/javadoc/AuthorDD/AuthorDD.java
-@@ -91,7 +91,7 @@
-
- // Test multiple @author tags:
-
-- { "<DT><STRONG>Author:</STRONG></DT>"+NL+" <DD>Doug Kramer, Jamie, Neal</DD>"+NL,
-+ { "<DT><STRONG>Author:</STRONG></DT>"+NL+" <DD>Doug Kramer, Jamie, Neal</DD>",
- BUGID + FS + "p1" + FS + "C1.html" },
-
- };
-diff --git a/test/com/sun/javadoc/testClassCrossReferences/TestClassCrossReferences.java b/test/com/sun/javadoc/testClassCrossReferences/TestClassCrossReferences.java
---- langtools/test/com/sun/javadoc/testClassCrossReferences/TestClassCrossReferences.java
-+++ langtools/test/com/sun/javadoc/testClassCrossReferences/TestClassCrossReferences.java
-@@ -48,7 +48,7 @@
- "<A HREF=\"http://java.sun.com/j2se/1.4/docs/api/java/math/BigInteger.html?is-external=true#gcd(java.math.BigInteger)\" " +
- "title=\"class or interface in java.math\"><CODE>Link to external member gcd</CODE></A>"},
- {BUG_ID + FS + "C.html",
-- "<STRONG>Overrides:</STRONG><DD><CODE>toString</CODE> in class <CODE>java.lang.Object</CODE>"}
-+ "<STRONG>Overrides:</STRONG></DT><DD><CODE>toString</CODE> in class <CODE>java.lang.Object</CODE>"}
- };
- private static final String[][] NEGATED_TEST = NO_TEST;
- private static final String[] ARGS =
-diff --git a/test/com/sun/javadoc/testConstructorIndent/TestConstructorIndent.java b/test/com/sun/javadoc/testConstructorIndent/TestConstructorIndent.java
---- langtools/test/com/sun/javadoc/testConstructorIndent/TestConstructorIndent.java
-+++ langtools/test/com/sun/javadoc/testConstructorIndent/TestConstructorIndent.java
-@@ -45,9 +45,10 @@
-
- //Input for string search tests.
- private static final String[][] TEST = {
-- {BUG_ID + FS + "C.html", "<DL>"+NL+"<DD>This is just a simple constructor."+ NL +
-- "<P>"+NL+"<DL>"+NL+"<DT><STRONG>Parameters:</STRONG><DD><CODE>i</CODE> - a param.</DL>"+NL +
-- "</DL>"
-+ {BUG_ID + FS + "C.html", "<DL>" + NL + "<DD>This is just a simple constructor." + NL +
-+ "<P>" + NL + "</DD>" + NL + "<DD><DL>" + NL + "<DT><STRONG>Parameters:</STRONG>" +
-+ "</DT><DD><CODE>i</CODE> - a param.</DD></DL>" + NL +
-+ "</DD>" + NL + "</DL>"
- }
- };
- private static final String[][] NEGATED_TEST = NO_TEST;
-diff --git a/test/com/sun/javadoc/testDeprecatedDocs/TestDeprecatedDocs.java b/test/com/sun/javadoc/testDeprecatedDocs/TestDeprecatedDocs.java
---- langtools/test/com/sun/javadoc/testDeprecatedDocs/TestDeprecatedDocs.java
-+++ langtools/test/com/sun/javadoc/testDeprecatedDocs/TestDeprecatedDocs.java
-@@ -78,13 +78,12 @@
-
- {TARGET_FILE2, "<STRONG>Deprecated.</STRONG>" + NL +
- "<P>" + NL +
-- "<DL>" + NL +
-- "<DT><PRE><FONT SIZE=\"-1\">@Deprecated" + NL +
-+ "<PRE><FONT SIZE=\"-1\">@Deprecated" + NL +
- "</FONT>public class <STRONG>DeprecatedClassByAnnotation</STRONG>"},
-
- {TARGET_FILE2, "public int <STRONG>field</STRONG></PRE>" + NL +
- "<DL>" + NL +
-- "<DD><STRONG>Deprecated.</STRONG>&nbsp;<DL>"},
-+ "<DD><STRONG>Deprecated.</STRONG>&nbsp;</DD></DL>"},
-
- {TARGET_FILE2, "<FONT SIZE=\"-1\">@Deprecated" + NL +
- "</FONT>public <STRONG>DeprecatedClassByAnnotation</STRONG>()</PRE>" + NL +
-diff --git a/test/com/sun/javadoc/testExternalOverridenMethod/TestExternalOverridenMethod.java b/test/com/sun/javadoc/testExternalOverridenMethod/TestExternalOverridenMethod.java
---- langtools/test/com/sun/javadoc/testExternalOverridenMethod/TestExternalOverridenMethod.java
-+++ langtools/test/com/sun/javadoc/testExternalOverridenMethod/TestExternalOverridenMethod.java
-@@ -39,13 +39,13 @@
- private static final String BUG_ID = "4857717";
- private static final String[][] TEST = {
- {BUG_ID + FS + "pkg" + FS + "XReader.html",
-- "<STRONG>Overrides:</STRONG><DD><CODE><A HREF=\"" +
-+ "<STRONG>Overrides:</STRONG></DT><DD><CODE><A HREF=\"" +
- "http://java.sun.com/j2se/1.4.1/docs/api/java/io/FilterReader.html?is-external=true#read()\"" +
- " title=\"class or interface in java.io\">read</A></CODE> in class " +
- "<CODE><A HREF=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/FilterReader.html?is-external=true\"" +
- " title=\"class or interface in java.io\">FilterReader</A>"},
- {BUG_ID + FS + "pkg" + FS + "XReader.html",
-- "<STRONG>Specified by:</STRONG><DD><CODE><A HREF=\"" +
-+ "<STRONG>Specified by:</STRONG></DT><DD><CODE><A HREF=\"" +
- "http://java.sun.com/j2se/1.4.1/docs/api/java/io/DataInput.html?is-external=true#readInt()\"" +
- " title=\"class or interface in java.io\">readInt</A></CODE> in interface " +
- "<CODE><A HREF=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/DataInput.html?is-external=true\"" +
-diff --git a/test/com/sun/javadoc/testHref/TestHref.java b/test/com/sun/javadoc/testHref/TestHref.java
---- langtools/test/com/sun/javadoc/testHref/TestHref.java
-+++ langtools/test/com/sun/javadoc/testHref/TestHref.java
-@@ -67,7 +67,7 @@
- },
- //@see test.
- {BUG_ID + FS + "pkg" + FS + "C2.html",
-- "See Also:</STRONG><DD><A HREF=\"../pkg/C1.html#method(int, int, java.util.ArrayList)\">"
-+ "See Also:</STRONG></DT><DD><A HREF=\"../pkg/C1.html#method(int, int, java.util.ArrayList)\">"
- },
-
- //Header does not link to the page itself.
-diff --git a/test/com/sun/javadoc/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java b/test/com/sun/javadoc/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java
-@@ -0,0 +1,370 @@
-+/*
-+ * 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.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 6786690
-+ * @summary This test verifies the nesting of definition list tags.
-+ * @author Bhavesh Patel
-+ * @library ../lib/
-+ * @build JavadocTester
-+ * @build TestHtmlDefinitionListTag
-+ * @run main TestHtmlDefinitionListTag
-+ */
-+
-+public class TestHtmlDefinitionListTag extends JavadocTester {
-+
-+ private static final String BUG_ID = "6786690";
-+
-+ // Test common to all runs of javadoc. The class signature should print
-+ // properly enclosed definition list tags and the Annotation Type
-+ // Optional Element should print properly nested definition list tags
-+ // for default value.
-+ private static final String[][] TEST_ALL = {
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<PRE>public class " +
-+ "<STRONG>C1</STRONG>" + NL + "extends " +
-+ "java.lang.Object" + NL + "implements " +
-+ "java.io.Serializable</PRE>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C4.html", "<DL>" + NL + "<DD><DL>" + NL +
-+ "<DT><STRONG>Default:</STRONG></DT><DD>true</DD>" + NL +
-+ "</DL>" + NL + "</DD>" + NL + "</DL>"}};
-+
-+ // Test for normal run of javadoc in which various ClassDocs and
-+ // serialized form should have properly nested definition list tags
-+ // enclosing comments, tags and deprecated information.
-+ private static final String[][] TEST_CMNT_DEPR = {
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL +
-+ "<DT><STRONG>Since:</STRONG></DT>" + NL +
-+ " <DD>JDK1.0</DD>" + NL + "<DT><STRONG>See Also:</STRONG></DT><DD>" +
-+ "<A HREF=\"../pkg1/C2.html\" title=\"class in pkg1\">" +
-+ "<CODE>C2</CODE></A>, " + NL +
-+ "<A HREF=\"../serialized-form.html#pkg1.C1\">" +
-+ "Serialized Form</A></DD></DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL +
-+ "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
-+ " 1.5, replaced by" + NL +
-+ " <A HREF=\"../pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<CODE>setUndecorated(boolean)</CODE></A>.</I></DD>" +
-+ "<DD>This field indicates whether the C1 is undecorated." + NL +
-+ "<P>" + NL + "</DD>" + NL + "<DD><DL>" + NL + "<DT><STRONG>" +
-+ "Since:</STRONG></DT>" + NL + " <DD>1.4</DD>" + NL + "<DT>" +
-+ "<STRONG>See Also:</STRONG></DT><DD>" +
-+ "<A HREF=\"../pkg1/C1.html#setUndecorated(boolean)\"><CODE>" +
-+ "setUndecorated(boolean)</CODE></A></DD></DL>" + NL +"</DD>" + NL +
-+ "</DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL +
-+ "<DD>Constructor." + NL + "<P>" + NL + "</DD>" + NL +
-+ "<DD><DL>" + NL + "<DT><STRONG>Parameters:</STRONG></DT><DD>" +
-+ "<CODE>title</CODE> - the title</DD><DD><CODE>test</CODE>" +
-+ " - boolean value</DD>" + NL + "<DT><STRONG>Throws:</STRONG></DT>" + NL +
-+ "<DD><CODE>java.lang.IllegalArgumentException</CODE>" +
-+ " - if the <code>owner</code>'s" + NL + " <code>GraphicsConfiguration" +
-+ "</code> is not from a screen device</DD>" + NL +"<DD><CODE>" +
-+ "HeadlessException</CODE></DD></DL>" + NL + "</DD>" + NL +
-+ "</DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL +
-+ "<DD>Method comments." + NL + "<P>" + NL +
-+ "</DD>" + NL + "<DD><DL>" + NL + "<DT><STRONG>Parameters:" +
-+ "</STRONG></DT><DD><CODE>undecorated</CODE> - <code>true</code>" +
-+ " if no decorations are" + NL + " to be enabled;" + NL +
-+ " <code>false</code> if decorations are to be enabled." +
-+ "</DD><DT><STRONG>Since:</STRONG></DT>" + NL +
-+ " <DD>1.4</DD>" + NL + "<DT><STRONG>See Also:</STRONG></DT>" +
-+ "<DD><A HREF=\"../pkg1/C1.html#readObject()\"><CODE>" +
-+ "readObject()</CODE></A></DD></DL>" + NL + "</DD>" + NL +
-+ "</DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL + "<DD><DL>" + NL +
-+ "<DT><STRONG>Throws:</STRONG></DT>" + NL + "<DD><CODE>" +
-+ "java.io.IOException</CODE></DD><DT><STRONG>See Also:" +
-+ "</STRONG></DT><DD>" +
-+ "<A HREF=\"../pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<CODE>setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
-+ "</DD>" + NL + "</DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.ModalExclusionType.html", "<DL>" + NL +
-+ "<DD>No modal exclusion." + NL + "<P>" + NL +"</DD>" + NL +
-+ "</DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C2.html", "<DL>" + NL + "<DD>Constructor." + NL +
-+ "<P>" + NL +"</DD>" + NL + "</DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C2.html", "<DL>" + NL + "<DD><STRONG>" +
-+ "Deprecated.</STRONG>&nbsp;<I>As of JDK version 1.5, replaced " +
-+ "by" + NL + " <A HREF=\"../pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
-+ "</DD><DD>Set visible." + NL + "<P>" + NL + "</DD>" +NL +
-+ "<DD><DL>" + NL + "<DT><STRONG>Parameters:</STRONG></DT><DD>" +
-+ "<CODE>set</CODE> - boolean</DD><DT><STRONG>Since:</STRONG></DT>" + NL +
-+ " <DD>1.4</DD></DL>" + NL + "</DD>" + NL + "</DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C3.html", "<DL>" + NL + "<DD>Comment." + NL +
-+ "<P>" + NL + "</DD>" + NL + "</DL>"},
-+ {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "<DD><DL>" + NL +
-+ "<DT><STRONG>Throws:</STRONG></DT>" + NL + "<DD><CODE>" +
-+ "java.io.IOException</CODE></DD><DT><STRONG>See Also:</STRONG>" +
-+ "</DT><DD><A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<CODE>C1.setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
-+ "</DD>" + NL + "</DL>"},
-+ {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
-+ "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version " +
-+ "1.5, replaced by" + NL +
-+ " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<CODE>setUndecorated(boolean)</CODE></A>.</I></DD>" +
-+ "<DD>This field indicates whether the C1 is undecorated." + NL +
-+ "<P>" + NL + "</DD>" + NL + "<DD>&nbsp;</DD>" + NL +
-+ "<DD><DL>" + NL + "<DT><STRONG>Since:</STRONG></DT>" + NL +
-+ " <DD>1.4</DD>" + NL + "<DT><STRONG>See Also:</STRONG>" +
-+ "</DT><DD><A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<CODE>C1.setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
-+ "</DD>" + NL + "</DL>"},
-+ {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
-+ "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
-+ " 1.5, replaced by" + NL +
-+ " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
-+ "</DD><DD>Reads the object stream." + NL + "<P>" + NL +
-+ "</DD>" + NL + "<DD><DL>" + NL + "<DT><STRONG>Throws:" +
-+ "</STRONG></DT>" + NL + "<DD><CODE><code>" +
-+ "IOException</code></CODE></DD>" + NL +
-+ "<DD><CODE>java.io.IOException</CODE></DD></DL>" + NL +
-+ "</DD>" + NL + "</DL>"},
-+ {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
-+ "<DD><STRONG>Deprecated.</STRONG>&nbsp;</DD><DD>" +
-+ "The name for this class." + NL + "<P>" + NL + "</DD>" + NL +
-+ "<DD>&nbsp;</DD>" + NL + "</DL>"}};
-+
-+ // Test with -nocomment option. The ClassDocs and serialized form should
-+ // have properly nested definition list tags enclosing deprecated
-+ // information and should not display definition lists for comments
-+ // and tags.
-+ private static final String[][] TEST_NOCMNT = {
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL + "<DD><STRONG>" +
-+ "Deprecated.</STRONG>&nbsp;<I>As of JDK version 1.5, replaced by" + NL +
-+ " <A HREF=\"../pkg1/C1.html#setUndecorated(boolean)\"><CODE>" +
-+ "setUndecorated(boolean)</CODE></A>.</I></DD></DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C2.html", "<DL>" + NL +
-+ "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
-+ " 1.5, replaced by" + NL +
-+ " <A HREF=\"../pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
-+ "</DD></DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C5.html", "<PRE>" + NL +
-+ "protected <STRONG>C5</STRONG>()</PRE>" + NL + "<DL>" + NL +
-+ "<DD><STRONG>Deprecated.</STRONG>&nbsp;</DD></DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C5.html", "<PRE>" + NL +
-+ "public void <STRONG>printInfo</STRONG>()</PRE>" + NL + "<DL>" + NL +
-+ "<DD><STRONG>Deprecated.</STRONG>&nbsp;</DD></DL>"},
-+ {BUG_ID + FS + "serialized-form.html", "<PRE>" + NL + "boolean <STRONG>" +
-+ "undecorated</STRONG></PRE>" + NL + "<DL>" + NL + "<DD><STRONG>" +
-+ "Deprecated.</STRONG>&nbsp;<I>As of JDK version 1.5, replaced by" + NL +
-+ " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\"><CODE>" +
-+ "setUndecorated(boolean)</CODE></A>.</I></DD></DL>"},
-+ {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "<DD><STRONG>" +
-+ "Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
-+ " 1.5, replaced by" + NL +
-+ " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
-+ "</DD></DL>"},
-+ {BUG_ID + FS + "serialized-form.html", "<PRE>" + NL + "int <STRONG>" +
-+ "publicKey</STRONG></PRE>" + NL + "<DL>" + NL + "<DD><STRONG>" +
-+ "Deprecated.</STRONG>&nbsp;</DD></DL>"}};
-+
-+ // Test with -nodeprecated option. The ClassDocs should have properly nested
-+ // definition list tags enclosing comments and tags. The ClassDocs should not
-+ // display definition list for deprecated information. The serialized form
-+ // should display properly nested definition list tags for comments, tags
-+ // and deprecated information.
-+ private static final String[][] TEST_NODEPR = {
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL +
-+ "<DT><STRONG>Since:</STRONG></DT>" + NL +
-+ " <DD>JDK1.0</DD>" + NL + "<DT><STRONG>See Also:</STRONG></DT><DD>" +
-+ "<A HREF=\"../pkg1/C2.html\" title=\"class in pkg1\">" +
-+ "<CODE>C2</CODE></A>, " + NL +
-+ "<A HREF=\"../serialized-form.html#pkg1.C1\">" +
-+ "Serialized Form</A></DD></DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL +
-+ "<DD>Constructor." + NL + "<P>" + NL + "</DD>" + NL +
-+ "<DD><DL>" + NL + "<DT><STRONG>Parameters:</STRONG></DT><DD>" +
-+ "<CODE>title</CODE> - the title</DD><DD><CODE>test</CODE>" +
-+ " - boolean value</DD>" + NL + "<DT><STRONG>Throws:</STRONG></DT>" + NL +
-+ "<DD><CODE>java.lang.IllegalArgumentException</CODE>" +
-+ " - if the <code>owner</code>'s" + NL + " <code>GraphicsConfiguration" +
-+ "</code> is not from a screen device</DD>" + NL +"<DD><CODE>" +
-+ "HeadlessException</CODE></DD></DL>" + NL + "</DD>" + NL +
-+ "</DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL +
-+ "<DD>Method comments." + NL + "<P>" + NL +
-+ "</DD>" + NL + "<DD><DL>" + NL + "<DT><STRONG>Parameters:" +
-+ "</STRONG></DT><DD><CODE>undecorated</CODE> - <code>true</code>" +
-+ " if no decorations are" + NL + " to be enabled;" + NL +
-+ " <code>false</code> if decorations are to be enabled." +
-+ "</DD><DT><STRONG>Since:</STRONG></DT>" + NL +
-+ " <DD>1.4</DD>" + NL + "<DT><STRONG>See Also:</STRONG></DT>" +
-+ "<DD><A HREF=\"../pkg1/C1.html#readObject()\"><CODE>" +
-+ "readObject()</CODE></A></DD></DL>" + NL + "</DD>" + NL +
-+ "</DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL + "<DD><DL>" + NL +
-+ "<DT><STRONG>Throws:</STRONG></DT>" + NL + "<DD><CODE>" +
-+ "java.io.IOException</CODE></DD><DT><STRONG>See Also:" +
-+ "</STRONG></DT><DD>" +
-+ "<A HREF=\"../pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<CODE>setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
-+ "</DD>" + NL + "</DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.ModalExclusionType.html", "<DL>" + NL +
-+ "<DD>No modal exclusion." + NL + "<P>" + NL +"</DD>" + NL +
-+ "</DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C2.html", "<DL>" + NL + "<DD>Constructor." + NL +
-+ "<P>" + NL +"</DD>" + NL + "</DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C3.html", "<DL>" + NL + "<DD>Comment." + NL +
-+ "<P>" + NL + "</DD>" + NL + "</DL>"},
-+ {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "<DD><DL>" + NL +
-+ "<DT><STRONG>Throws:</STRONG></DT>" + NL + "<DD><CODE>" +
-+ "java.io.IOException</CODE></DD><DT><STRONG>See Also:</STRONG>" +
-+ "</DT><DD><A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<CODE>C1.setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
-+ "</DD>" + NL + "</DL>"},
-+ {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
-+ "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version " +
-+ "1.5, replaced by" + NL +
-+ " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<CODE>setUndecorated(boolean)</CODE></A>.</I></DD>" +
-+ "<DD>This field indicates whether the C1 is undecorated." + NL +
-+ "<P>" + NL + "</DD>" + NL + "<DD>&nbsp;</DD>" + NL +
-+ "<DD><DL>" + NL + "<DT><STRONG>Since:</STRONG></DT>" + NL +
-+ " <DD>1.4</DD>" + NL + "<DT><STRONG>See Also:</STRONG>" +
-+ "</DT><DD><A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<CODE>C1.setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
-+ "</DD>" + NL + "</DL>"},
-+ {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
-+ "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
-+ " 1.5, replaced by" + NL +
-+ " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
-+ "</DD><DD>Reads the object stream." + NL + "<P>" + NL +
-+ "</DD>" + NL + "<DD><DL>" + NL + "<DT><STRONG>Throws:" +
-+ "</STRONG></DT>" + NL + "<DD><CODE><code>" +
-+ "IOException</code></CODE></DD>" + NL +
-+ "<DD><CODE>java.io.IOException</CODE></DD></DL>" + NL +
-+ "</DD>" + NL + "</DL>"},
-+ {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
-+ "<DD><STRONG>Deprecated.</STRONG>&nbsp;</DD><DD>" +
-+ "The name for this class." + NL + "<P>" + NL + "</DD>" + NL +
-+ "<DD>&nbsp;</DD>" + NL + "</DL>"}};
-+
-+ // Test with -nocomment and -nodeprecated options. The ClassDocs whould
-+ // not display definition lists for any member details. The serialized
-+ // form should display properly nested definition list tags for
-+ // deprecated information only.
-+ private static final String[][] TEST_NOCMNT_NODEPR = {
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<PRE>" + NL + "public void " +
-+ "<STRONG>readObject</STRONG>()" + NL + " throws" +
-+ " java.io.IOException</PRE>" + NL + "<HR>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C2.html", "<PRE>" +NL + "public <STRONG>" +
-+ "C2</STRONG>()</PRE>" + NL + "<HR>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.ModalExclusionType.html", "<PRE>" + NL +
-+ "public static final " +
-+ "<A HREF=\"../pkg1/C1.ModalExclusionType.html\" " +
-+ "title=\"enum in pkg1\">C1.ModalExclusionType</A> <STRONG>" +
-+ "APPLICATION_EXCLUDE</STRONG></PRE>" + NL + "<HR>"},
-+ {BUG_ID + FS + "serialized-form.html", "<PRE>" + NL + "boolean <STRONG>" +
-+ "undecorated</STRONG></PRE>" + NL + "<DL>" + NL + "<DD><STRONG>" +
-+ "Deprecated.</STRONG>&nbsp;<I>As of JDK version 1.5, replaced by" + NL +
-+ " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\"><CODE>" +
-+ "setUndecorated(boolean)</CODE></A>.</I></DD></DL>"},
-+ {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "<DD><STRONG>" +
-+ "Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
-+ " 1.5, replaced by" + NL +
-+ " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
-+ "</DD></DL>"},
-+ {BUG_ID + FS + "serialized-form.html", "<PRE>" + NL + "int <STRONG>" +
-+ "publicKey</STRONG></PRE>" + NL + "<DL>" + NL + "<DD><STRONG>" +
-+ "Deprecated.</STRONG>&nbsp;</DD></DL>"}};
-+
-+ // Test for valid HTML generation which should not comprise of empty
-+ // definition list tags.
-+ private static final String[][] NEGATED_TEST = {
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL></DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL + "</DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.ModalExclusionType.html", "<DL></DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.ModalExclusionType.html", "<DL>" + NL + "</DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C2.html", "<DL></DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C2.html", "<DL>" + NL + "</DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C2.ModalType.html", "<DL></DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C2.ModalType.html", "<DL>" + NL + "</DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C3.html", "<DL></DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C3.html", "<DL>" + NL + "</DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C4.html", "<DL></DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C4.html", "<DL>" + NL + "</DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C5.html", "<DL></DL>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C5.html", "<DL>" + NL + "</DL>"},
-+ {BUG_ID + FS + "overview-tree.html", "<DL></DL>"},
-+ {BUG_ID + FS + "overview-tree.html", "<DL>" + NL + "</DL>"},
-+ {BUG_ID + FS + "serialized-form.html", "<DL></DL>"},
-+ {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "</DL>"}};
-+
-+ private static final String[] ARGS1 =
-+ new String[] {
-+ "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg1"};
-+
-+ private static final String[] ARGS2 =
-+ new String[] {
-+ "-d", BUG_ID, "-nocomment", "-sourcepath", SRC_DIR, "pkg1"};
-+
-+ private static final String[] ARGS3 =
-+ new String[] {
-+ "-d", BUG_ID, "-nodeprecated", "-sourcepath", SRC_DIR, "pkg1"};
-+
-+ private static final String[] ARGS4 =
-+ new String[] {
-+ "-d", BUG_ID, "-nocomment", "-nodeprecated", "-sourcepath", SRC_DIR, "pkg1"};
-+
-+ /**
-+ * The entry point of the test.
-+ * @param args the array of command line arguments.
-+ */
-+ public static void main(String[] args) {
-+ TestHtmlDefinitionListTag tester = new TestHtmlDefinitionListTag();
-+ run(tester, ARGS1, TEST_ALL, NEGATED_TEST);
-+ run(tester, ARGS1, TEST_CMNT_DEPR, NEGATED_TEST);
-+ run(tester, ARGS2, TEST_ALL, NEGATED_TEST);
-+ run(tester, ARGS2, TEST_NOCMNT, TEST_CMNT_DEPR);
-+ run(tester, ARGS3, TEST_ALL, NEGATED_TEST);
-+ run(tester, ARGS3, TEST_NODEPR, TEST_NOCMNT_NODEPR);
-+ run(tester, ARGS4, TEST_ALL, NEGATED_TEST);
-+ run(tester, ARGS4, TEST_NOCMNT_NODEPR, TEST_CMNT_DEPR);
-+ tester.printSummary();
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getBugId() {
-+ return BUG_ID;
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getBugName() {
-+ return getClass().getName();
-+ }
-+}
-diff --git a/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C1.java b/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C1.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C1.java
-@@ -0,0 +1,108 @@
-+/*
-+ * 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 pkg1;
-+
-+import java.io.IOException;
-+import java.io.Serializable;
-+
-+/**
-+ * A class comment for testing.
-+ *
-+ * @author Bhavesh Patel
-+ * @see C2
-+ * @since JDK1.0
-+ */
-+
-+public class C1 implements Serializable {
-+
-+ /**
-+ * This field indicates whether the C1 is undecorated.
-+ *
-+ * @see #setUndecorated(boolean)
-+ * @since 1.4
-+ * @serial
-+ * @deprecated As of JDK version 1.5, replaced by
-+ * {@link C1#setUndecorated(boolean) setUndecorated(boolean)}.
-+ */
-+ @Deprecated
-+ public boolean undecorated = false;
-+
-+ private String title;
-+
-+ /**
-+ * This enum specifies the possible modal exclusion types.
-+ *
-+ * @since 1.6
-+ */
-+ public static enum ModalExclusionType {
-+ /**
-+ * No modal exclusion.
-+ */
-+ NO_EXCLUDE,
-+ /**
-+ * <code>APPLICATION_EXCLUDE</code> indicates that a top-level window
-+ * won't be blocked by any application-modal dialogs. Also, it isn't
-+ * blocked by document-modal dialogs from outside of its child hierarchy.
-+ */
-+ APPLICATION_EXCLUDE
-+ };
-+
-+ /**
-+ * Constructor.
-+ *
-+ * @param title the title
-+ * @param test boolean value
-+ * @exception IllegalArgumentException if the <code>owner</code>'s
-+ * <code>GraphicsConfiguration</code> is not from a screen device
-+ * @exception HeadlessException
-+ */
-+ public C1(String title, boolean test) {
-+
-+ }
-+
-+ public C1(String title) {
-+
-+ }
-+
-+ /**
-+ * Method comments.
-+ * @param undecorated <code>true</code> if no decorations are
-+ * to be enabled;
-+ * <code>false</code> if decorations are to be enabled.
-+ * @see #readObject()
-+ * @since 1.4
-+ */
-+ public void setUndecorated(boolean undecorated) {
-+ /* Make sure we don't run in the middle of peer creation.*/
-+ }
-+
-+ /**
-+ * @see #setUndecorated(boolean)
-+ */
-+ public void readObject() throws IOException {
-+
-+ }
-+}
-diff --git a/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C2.java b/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C2.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C2.java
-@@ -0,0 +1,86 @@
-+/*
-+ * 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 pkg1;
-+
-+import java.io.ObjectInputStream;
-+import java.io.IOException;
-+import java.io.Serializable;
-+
-+/**
-+ * A class comment for testing.
-+ *
-+ * @author Bhavesh Patel
-+ * @see C1
-+ * @since JDK1.0
-+ */
-+
-+public class C2 implements Serializable {
-+
-+ /**
-+ * This field indicates title.
-+ */
-+ String title;
-+
-+ public static enum ModalType {
-+ NO_EXCLUDE
-+ };
-+
-+ /**
-+ * Constructor.
-+ *
-+ */
-+ public C2() {
-+
-+ }
-+
-+ public C2(String title) {
-+
-+ }
-+
-+ /**
-+ * Set visible.
-+ *
-+ * @param set boolean
-+ * @since 1.4
-+ * @deprecated As of JDK version 1.5, replaced by
-+ * {@link C1#setUndecorated(boolean) setUndecorated(boolean)}.
-+ */
-+ @Deprecated
-+ public void setVisible(boolean set) {
-+ }
-+
-+ /**
-+ * Reads the object stream.
-+ *
-+ * @param s ObjectInputStream
-+ * @throws <code>IOException</code>
-+ * @deprecated As of JDK version 1.5, replaced by
-+ * {@link C1#setUndecorated(boolean) setUndecorated(boolean)}.
-+ */
-+ @Deprecated
-+ public void readObject(ObjectInputStream s) throws IOException {
-+ }
-+}
-diff --git a/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C3.java b/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C3.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C3.java
-@@ -0,0 +1,42 @@
-+/*
-+ * 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 pkg1;
-+
-+import java.lang.annotation.*;
-+
-+/**
-+ * Test Annotation class.
-+ *
-+ * @author Bhavesh Patel
-+ * @since 1.5
-+ */
-+@Retention(RetentionPolicy.SOURCE)
-+public @interface C3 {
-+ /**
-+ * Comment.
-+ */
-+ String[] value();
-+}
-diff --git a/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C4.java b/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C4.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C4.java
-@@ -0,0 +1,39 @@
-+/*
-+ * 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 pkg1;
-+
-+import java.lang.annotation.*;
-+
-+/*
-+ * The @Inherited annotation has no effect when applied to an interface.
-+ */
-+@Documented
-+@Retention(RetentionPolicy.RUNTIME)
-+@Target(ElementType.TYPE)
-+@Inherited
-+public @interface C4 {
-+ boolean value() default true;
-+}
-diff --git a/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C5.java b/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C5.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C5.java
-@@ -0,0 +1,65 @@
-+/*
-+ * 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 pkg1;
-+
-+import java.io.Serializable;
-+
-+/**
-+ * Test for Serializable
-+ *
-+ * @author Bhavesh Patel
-+ * @deprecated This class is no longer used.
-+ */
-+@Deprecated
-+public abstract class C5 implements Serializable {
-+
-+ /**
-+ * The name for this class.
-+ *
-+ * @serial
-+ */
-+ private String name;
-+
-+ /**
-+ * @serial
-+ */
-+ private int publicKey;
-+
-+ /**
-+ * Constructor for serialization only.
-+ */
-+ protected C5() {
-+
-+ }
-+
-+ /**
-+ * Prints general information.
-+ *
-+ */
-+ public void printInfo() {
-+
-+ }
-+}
-diff --git a/test/com/sun/javadoc/testIndex/TestIndex.java b/test/com/sun/javadoc/testIndex/TestIndex.java
---- langtools/test/com/sun/javadoc/testIndex/TestIndex.java
-+++ langtools/test/com/sun/javadoc/testIndex/TestIndex.java
-@@ -73,10 +73,10 @@
- {BUG_ID + FS + "index-all.html",
- "<DT><A HREF=\"./pkg/C.html#Java\"><STRONG>Java</STRONG></A> - " + NL +
- "Static variable in class pkg.<A HREF=\"./pkg/C.html\" title=\"class in pkg\">C</A>" + NL +
-- "<DD>&nbsp;" + NL +
-+ "</DT><DD>&nbsp;</DD>" + NL + NL +
- "<DT><A HREF=\"./pkg/C.html#JDK\"><STRONG>JDK</STRONG></A> - " + NL +
- "Static variable in class pkg.<A HREF=\"./pkg/C.html\" title=\"class in pkg\">C</A>" + NL +
-- "<DD>&nbsp;"},
-+ "</DT><DD>&nbsp;</DD>"},
- };
- private static final String[][] NEGATED_TEST = NO_TEST;
-
-diff --git a/test/com/sun/javadoc/testInterface/TestInterface.java b/test/com/sun/javadoc/testInterface/TestInterface.java
---- langtools/test/com/sun/javadoc/testInterface/TestInterface.java
-+++ langtools/test/com/sun/javadoc/testInterface/TestInterface.java
-@@ -55,7 +55,7 @@
-
- // Make sure known implementing class list is correct and omits type parameters.
- {BUG_ID + FS + "pkg" + FS + "Interface.html",
-- "<DT><STRONG>All Known Implementing Classes:</STRONG> " +
-+ "<DT><STRONG>All Known Implementing Classes:</STRONG></DT> " +
- "<DD><A HREF=\"../pkg/Child.html\" " +
- "title=\"class in pkg\">Child</A>, " +
- "<A HREF=\"../pkg/Parent.html\" title=\"class in pkg\">" +
-@@ -63,7 +63,9 @@
-
- // Make sure "All Implemented Interfaces": has substituted type parameters
- {BUG_ID + FS + "pkg" + FS + "Child.html",
-- "<STRONG>All Implemented Interfaces:</STRONG> <DD><A HREF=\"../pkg/Interface.html\" title=\"interface in pkg\">Interface</A>&lt;T&gt;"
-+ "<STRONG>All Implemented Interfaces:</STRONG></DT> <DD>" +
-+ "<A HREF=\"../pkg/Interface.html\" title=\"interface in pkg\">" +
-+ "Interface</A>&lt;T&gt;"
- },
- //Make sure Class Tree has substituted type parameters.
- {BUG_ID + FS + "pkg" + FS + "Child.html",
-@@ -75,15 +77,15 @@
- },
- //Make sure "Direct Know Subclasses" omits type parameters
- {BUG_ID + FS + "pkg" + FS + "Parent.html",
-- "<STRONG>Direct Known Subclasses:</STRONG> <DD><A HREF=\"../pkg/Child.html\" title=\"class in pkg\">Child</A>"
-+ "<STRONG>Direct Known Subclasses:</STRONG></DT> <DD><A HREF=\"../pkg/Child.html\" title=\"class in pkg\">Child</A>"
- },
- //Make sure "Specified By" has substituted type parameters.
- {BUG_ID + FS + "pkg" + FS + "Child.html",
-- "<STRONG>Specified by:</STRONG><DD><CODE><A HREF=\"../pkg/Interface.html#method()\">method</A></CODE> in interface <CODE><A HREF=\"../pkg/Interface.html\" title=\"interface in pkg\">Interface</A>&lt;<A HREF=\"../pkg/Child.html\" title=\"type parameter in Child\">T</A>&gt;</CODE>"
-+ "<STRONG>Specified by:</STRONG></DT><DD><CODE><A HREF=\"../pkg/Interface.html#method()\">method</A></CODE> in interface <CODE><A HREF=\"../pkg/Interface.html\" title=\"interface in pkg\">Interface</A>&lt;<A HREF=\"../pkg/Child.html\" title=\"type parameter in Child\">T</A>&gt;</CODE>"
- },
- //Make sure "Overrides" has substituted type parameters.
- {BUG_ID + FS + "pkg" + FS + "Child.html",
-- "<STRONG>Overrides:</STRONG><DD><CODE><A HREF=\"../pkg/Parent.html#method()\">method</A></CODE> in class <CODE><A HREF=\"../pkg/Parent.html\" title=\"class in pkg\">Parent</A>&lt;<A HREF=\"../pkg/Child.html\" title=\"type parameter in Child\">T</A>&gt;</CODE>"
-+ "<STRONG>Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg/Parent.html#method()\">method</A></CODE> in class <CODE><A HREF=\"../pkg/Parent.html\" title=\"class in pkg\">Parent</A>&lt;<A HREF=\"../pkg/Child.html\" title=\"type parameter in Child\">T</A>&gt;</CODE>"
- },
- };
- private static final String[][] NEGATED_TEST = {
-diff --git a/test/com/sun/javadoc/testLinkOption/TestLinkOption.java b/test/com/sun/javadoc/testLinkOption/TestLinkOption.java
---- langtools/test/com/sun/javadoc/testLinkOption/TestLinkOption.java
-+++ langtools/test/com/sun/javadoc/testLinkOption/TestLinkOption.java
-@@ -63,7 +63,8 @@
- "title=\"class or interface in java.lang\">Object</A>&nbsp;p3)"
- },
- {BUG_ID + "-1" + FS + "java" + FS + "lang" + FS + "StringBuilderChild.html",
-- "public abstract class <STRONG>StringBuilderChild</STRONG><DT>extends <A HREF=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true\" title=\"class or interface in java.lang\">Object</A>"
-+ "public abstract class <STRONG>StringBuilderChild</STRONG>" + NL +
-+ "extends <A HREF=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true\" title=\"class or interface in java.lang\">Object</A>"
- },
-
- };
-diff --git a/test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java b/test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java
---- langtools/test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java
-+++ langtools/test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java
-@@ -59,7 +59,7 @@
- " Link to another inner class: <A HREF=\"../pkg/C.InnerC2.html\" title=\"class in pkg\"><CODE>C.InnerC2</CODE></A>"
- },
- {BUG_ID + FS + "pkg" + FS + "C.InnerC2.html",
-- "Enclosing class:</STRONG><DD><A HREF=\"../pkg/C.html\" title=\"class in pkg\">C</A>"
-+ "Enclosing class:</STRONG></DT><DD><A HREF=\"../pkg/C.html\" title=\"class in pkg\">C</A>"
- },
- };
- private static final String[][] NEGATED_TEST = {
-diff --git a/test/com/sun/javadoc/testMemberInheritence/TestMemberInheritence.java b/test/com/sun/javadoc/testMemberInheritence/TestMemberInheritence.java
---- langtools/test/com/sun/javadoc/testMemberInheritence/TestMemberInheritence.java
-+++ langtools/test/com/sun/javadoc/testMemberInheritence/TestMemberInheritence.java
-@@ -74,7 +74,7 @@
-
- // Test overriding/implementing methods with generic parameters.
- {BUG_ID + FS + "pkg" + FS + "BaseClass.html",
-- "<DT><STRONG>Specified by:</STRONG><DD><CODE><A HREF=\"../pkg/BaseInterface.html#getAnnotation(java.lang.Class)\">getAnnotation</A></CODE> in interface <CODE><A HREF=\"../pkg/BaseInterface.html\" title=\"interface in pkg\">BaseInterface</A></CODE></DL>"},
-+ "<DT><STRONG>Specified by:</STRONG></DT><DD><CODE><A HREF=\"../pkg/BaseInterface.html#getAnnotation(java.lang.Class)\">getAnnotation</A></CODE> in interface <CODE><A HREF=\"../pkg/BaseInterface.html\" title=\"interface in pkg\">BaseInterface</A></CODE></DD>"+NL+"</DL>"},
-
- // Test diamond inheritence member summary (6256068)
- {BUG_ID + FS + "diamond" + FS + "Z.html",
-diff --git a/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java b/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java
---- langtools/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java
-+++ langtools/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java
-@@ -54,7 +54,7 @@
- {BUG_ID + FS + "pkg" + FS + "Coin.html", "Enum Coin</H2>"},
- //Make sure enum signature is correct.
- {BUG_ID + FS + "pkg" + FS + "Coin.html", "public enum "+
-- "<STRONG>Coin</STRONG><DT>extends java.lang.Enum&lt;" +
-+ "<STRONG>Coin</STRONG>" + NL + "extends java.lang.Enum&lt;" +
- "<A HREF=\"../pkg/Coin.html\" title=\"enum in pkg\">Coin</A>&gt;"
- },
- //Check for enum constant section
-@@ -79,20 +79,20 @@
- "Class TypeParameters&lt;E&gt;</H2>"},
- //Check class type parameters section.
- {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
-- "<DT><STRONG>Type Parameters:</STRONG><DD><CODE>E</CODE> - " +
-+ "<DT><STRONG>Type Parameters:</STRONG></DT><DD><CODE>E</CODE> - " +
- "the type parameter for this class."},
- //Type parameters in @see/@link
- {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
-- "<DT><STRONG>See Also:</STRONG><DD><A HREF=\"../pkg/TypeParameters.html\" " +
-- "title=\"class in pkg\"><CODE>TypeParameters</CODE></A></DL>"},
-+ "<DT><STRONG>See Also:</STRONG></DT><DD><A HREF=\"../pkg/TypeParameters.html\" " +
-+ "title=\"class in pkg\"><CODE>TypeParameters</CODE></A></DD></DL>"},
- //Method that uses class type parameter.
- {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
- "(<A HREF=\"../pkg/TypeParameters.html\" title=\"type " +
- "parameter in TypeParameters\">E</A>&nbsp;param)"},
- //Method type parameter section.
- {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
-- "<STRONG>Type Parameters:</STRONG><DD><CODE>T</CODE> - This is the first " +
-- "type parameter.<DD><CODE>V</CODE> - This is the second type " +
-+ "<STRONG>Type Parameters:</STRONG></DT><DD><CODE>T</CODE> - This is the first " +
-+ "type parameter.</DD><DD><CODE>V</CODE> - This is the second type " +
- "parameter."},
- //Signature of method with type parameters
- {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
-@@ -117,17 +117,17 @@
- //Signature of subclass that has type parameters.
- {BUG_ID + FS + "pkg" + FS + "TypeParameterSubClass.html",
- "public class <STRONG>TypeParameterSubClass&lt;T extends java.lang.String&gt;" +
-- "</STRONG><DT>extends <A HREF=\"../pkg/TypeParameterSuperClass.html\" " +
-+ "</STRONG>" + NL + "extends <A HREF=\"../pkg/TypeParameterSuperClass.html\" " +
- "title=\"class in pkg\">TypeParameterSuperClass</A>&lt;T&gt;"},
-
- //Interface generic parameter substitution
- //Signature of subclass that has type parameters.
- {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
-- "<STRONG>All Implemented Interfaces:</STRONG> <DD><A HREF=\"../pkg/SubInterface.html\" title=\"interface in pkg\">SubInterface</A>&lt;E&gt;, <A HREF=\"../pkg/SuperInterface.html\" title=\"interface in pkg\">SuperInterface</A>&lt;E&gt;</DD>"},
-+ "<STRONG>All Implemented Interfaces:</STRONG></DT> <DD><A HREF=\"../pkg/SubInterface.html\" title=\"interface in pkg\">SubInterface</A>&lt;E&gt;, <A HREF=\"../pkg/SuperInterface.html\" title=\"interface in pkg\">SuperInterface</A>&lt;E&gt;</DD>"},
- {BUG_ID + FS + "pkg" + FS + "SuperInterface.html",
-- "<STRONG>All Known Subinterfaces:</STRONG> <DD><A HREF=\"../pkg/SubInterface.html\" title=\"interface in pkg\">SubInterface</A>&lt;V&gt;</DD>"},
-+ "<STRONG>All Known Subinterfaces:</STRONG></DT> <DD><A HREF=\"../pkg/SubInterface.html\" title=\"interface in pkg\">SubInterface</A>&lt;V&gt;</DD>"},
- {BUG_ID + FS + "pkg" + FS + "SubInterface.html",
-- "<STRONG>All Superinterfaces:</STRONG> <DD><A HREF=\"../pkg/SuperInterface.html\" title=\"interface in pkg\">SuperInterface</A>&lt;V&gt;</DD>"},
-+ "<STRONG>All Superinterfaces:</STRONG></DT> <DD><A HREF=\"../pkg/SuperInterface.html\" title=\"interface in pkg\">SuperInterface</A>&lt;V&gt;</DD>"},
-
- //=================================
- // VAR ARG TESTING
-@@ -166,7 +166,7 @@
- "Element Detail"},
- //Make sure default annotation type value is printed when necessary.
- {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
-- "<STRONG>Default:</STRONG><DD>\"unknown\"</DD>"},
-+ "<STRONG>Default:</STRONG></DT><DD>\"unknown\"</DD>"},
-
- //=================================
- // ANNOTATION TYPE USAGE TESTING
-@@ -182,7 +182,8 @@
- "<FONT SIZE=\"-1\">" +
- "<A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Class Annotation\","+NL +
- " <A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)"+NL +
-- "</FONT>public class <STRONG>AnnotationTypeUsage</STRONG><DT>extends java.lang.Object</DL>"},
-+ "</FONT>public class <STRONG>AnnotationTypeUsage</STRONG>" + NL +
-+ "extends java.lang.Object"},
-
- //FIELD
- {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
-@@ -270,8 +271,7 @@
- {BUG_ID + FS + "pkg1" + FS + "B.html",
- "<PRE><FONT SIZE=\"-1\"><A HREF=\"../pkg1/A.html\" title=\"annotation in pkg1\">@A</A>"},
- {BUG_ID + FS + "pkg1" + FS + "B.html",
-- "</FONT>public interface <STRONG>B</STRONG></DL>" + NL +
-- "</PRE>"},
-+ "</FONT>public interface <STRONG>B</STRONG></PRE>"},
-
-
- //==============================================================
-@@ -525,7 +525,7 @@
- "<FONT SIZE=\"-1\">" + NL +
- "<A HREF=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</A>(<A HREF=\"../pkg/AnnotationType.html#optional\">optional</A>=\"Class Annotation\"," + NL +
- " <A HREF=\"../pkg/AnnotationType.html#required\">required</A>=1994)" + NL +
-- "</FONT>public class <STRONG>AnnotationTypeUsage</STRONG><DT>extends java.lang.Object</DL>"},
-+ "</FONT>public class <STRONG>AnnotationTypeUsage</STRONG></DT><DT>extends java.lang.Object</DT></DL>"},
-
- //FIELD
- {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
-diff --git a/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethods.java b/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethods.java
---- langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethods.java
-+++ langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethods.java
-@@ -40,11 +40,11 @@
- private static final String[][] TEST = {
- //The public method should be overriden
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
-+ "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
-
- //The public method in different package should be overriden
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"}
-+ "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"}
- };
-
- private static final String[][] NEGATED_TEST = {
-@@ -52,20 +52,20 @@
- //The package private method should be overriden since the base and sub class are in the same
- //package. However, the link should not show up because the package private methods are not documented.
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"},
-+ "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"},
-
- //The private method in should not be overriden
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-+ "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-
- //The private method in different package should not be overriden
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-+ "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-
- //The package private method should not be overriden since the base and sub class are in
- //different packages.
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"}
-+ "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"}
- };
-
- private static final String[] ARGS =
-diff --git a/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPackageFlag.java b/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPackageFlag.java
---- langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPackageFlag.java
-+++ langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPackageFlag.java
-@@ -40,32 +40,32 @@
- private static final String[][] TEST = {
- //The public method should be overriden
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
-+ "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
-
- //The public method in different package should be overriden
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
-+ "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
-
- //The package private method should be overriden since the base and sub class are in the same
- //package.
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"}
-+ "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"}
- };
-
- private static final String[][] NEGATED_TEST = {
-
- //The private method in should not be overriden
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-+ "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-
- //The private method in different package should not be overriden
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-+ "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-
- //The package private method should not be overriden since the base and sub class are in
- //different packages.
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"},
-+ "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"},
- };
-
- private static final String[] ARGS =
-diff --git a/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPrivateFlag.java b/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPrivateFlag.java
---- langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPrivateFlag.java
-+++ langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPrivateFlag.java
-@@ -40,32 +40,32 @@
- private static final String[][] TEST = {
- //The public method should be overriden
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
-+ "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
-
- //The package private method should be overriden since the base and sub class are in the same
- //package.
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"},
-+ "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"},
-
- //The public method in different package should be overriden
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
-+ "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
- };
-
- private static final String[][] NEGATED_TEST = {
-
- //The private method in should not be overriden
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-+ "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-
- //The private method in different package should not be overriden
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-+ "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-
- //The package private method should not be overriden since the base and sub class are in
- //different packages.
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</STRONG><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"}
-+ "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"}
-
-
- };
-diff --git a/test/com/sun/javadoc/testParamTaglet/TestParamTaglet.java b/test/com/sun/javadoc/testParamTaglet/TestParamTaglet.java
---- langtools/test/com/sun/javadoc/testParamTaglet/TestParamTaglet.java
-+++ langtools/test/com/sun/javadoc/testParamTaglet/TestParamTaglet.java
-@@ -48,12 +48,12 @@
- private static final String[][] TEST = {
- //Regular param tags.
- {BUG_ID + FS + "pkg" + FS + "C.html",
-- "<STRONG>Parameters:</STRONG><DD><CODE>param1</CODE> - testing 1 2 3." +
-+ "<STRONG>Parameters:</STRONG></DT><DD><CODE>param1</CODE> - testing 1 2 3.</DD>" +
- "<DD><CODE>param2</CODE> - testing 1 2 3."
- },
- //Param tags that don't match with any real parameters.
- {BUG_ID + FS + "pkg" + FS + "C.html",
-- "<STRONG>Parameters:</STRONG><DD><CODE><I>p1</I></CODE> - testing 1 2 3." +
-+ "<STRONG>Parameters:</STRONG></DT><DD><CODE><I>p1</I></CODE> - testing 1 2 3.</DD>" +
- "<DD><CODE><I>p2</I></CODE> - testing 1 2 3."
- },
- //{@inherit} doc misuse does not cause doclet to throw exception.
-diff --git a/test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java b/test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java
---- langtools/test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java
-+++ langtools/test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java
-@@ -96,11 +96,11 @@
-
- //Make sure implemented interfaces from private superclass are inherited
- {BUG_ID + "-1" + FS + "pkg" + FS + "PublicInterface.html",
-- "<STRONG>All Known Implementing Classes:</STRONG> <DD><A HREF=\"../pkg/PublicChild.html\" " +
-+ "<STRONG>All Known Implementing Classes:</STRONG></DT> <DD><A HREF=\"../pkg/PublicChild.html\" " +
- "title=\"class in pkg\">PublicChild</A>"},
-
- {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
-- "<STRONG>All Implemented Interfaces:</STRONG> <DD><A HREF=\"../pkg/PublicInterface.html\" " +
-+ "<STRONG>All Implemented Interfaces:</STRONG></DT> <DD><A HREF=\"../pkg/PublicInterface.html\" " +
- "title=\"interface in pkg\">PublicInterface</A>"},
-
- //Generic interface method test.
-@@ -174,18 +174,18 @@
- },
- // Should document that a method overrides method from private class.
- {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
-- "<STRONG>Overrides:</STRONG><DD><CODE>" +
-+ "<STRONG>Overrides:</STRONG></DT><DD><CODE>" +
- "<A HREF=\"../pkg/PrivateParent.html#methodOverridenFromParent(char[], int, T, V, java.util.List)\">" +
- "methodOverridenFromParent</A></CODE> in class <CODE>" +
- "<A HREF=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" +
-- "PrivateParent</A></CODE></DL>"},
-+ "PrivateParent</A></CODE></DD>" + NL + "</DL>"},
- // Should document that a method is specified by private interface.
- {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
-- "<STRONG>Specified by:</STRONG><DD><CODE>" +
-+ "<STRONG>Specified by:</STRONG></DT><DD><CODE>" +
- "<A HREF=\"../pkg/PrivateInterface.html#methodInterface(int)\">" +
- "methodInterface</A></CODE> in interface <CODE>" +
- "<A HREF=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" +
-- "PrivateInterface</A></CODE></DL>" + NL + "</DD>"},
-+ "PrivateInterface</A></CODE></DD>" + NL + "</DL>" + NL + "</DD>"},
- // Method inheritence from non-public superinterface.
- {BUG_ID + "-2" + FS + "pkg" + FS + "PublicInterface.html",
- "Methods inherited from interface " +
-@@ -209,12 +209,12 @@
-
- //Make sure implemented interfaces from private superclass are inherited
- {BUG_ID + "-2" + FS + "pkg" + FS + "PublicInterface.html",
-- "<STRONG>All Known Implementing Classes:</STRONG> <DD><A HREF=\"../pkg/PrivateParent.html\" " +
-+ "<STRONG>All Known Implementing Classes:</STRONG></DT> <DD><A HREF=\"../pkg/PrivateParent.html\" " +
- "title=\"class in pkg\">PrivateParent</A>, " +
- "<A HREF=\"../pkg/PublicChild.html\" title=\"class in pkg\">PublicChild</A>"},
-
- {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
-- "<STRONG>All Implemented Interfaces:</STRONG> <DD><A HREF=\"../pkg/PrivateInterface.html\" " +
-+ "<STRONG>All Implemented Interfaces:</STRONG></DT> <DD><A HREF=\"../pkg/PrivateInterface.html\" " +
- "title=\"interface in pkg\">PrivateInterface</A>, " +
- "<A HREF=\"../pkg/PublicInterface.html\" title=\"interface in pkg\">" +
- "PublicInterface</A>"},
-@@ -226,7 +226,7 @@
- "<CODE><A HREF=\"../pkg2/I.html#hello(T)\">I</A></CODE></STRONG>"},
-
- {BUG_ID + "-2" + FS + "pkg2" + FS + "C.html",
-- "<STRONG>Specified by:</STRONG><DD><CODE><A HREF=\"../pkg2/I.html#hello(T)\">" +
-+ "<STRONG>Specified by:</STRONG></DT><DD><CODE><A HREF=\"../pkg2/I.html#hello(T)\">" +
- "hello</A></CODE> in interface <CODE><A HREF=\"../pkg2/I.html\" " +
- "title=\"interface in pkg2\">I</A>"},
- };
-diff --git a/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java b/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java
---- langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java
-+++ langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java
-@@ -41,39 +41,39 @@
- // Test for normal run of javadoc. The serialized-form.html should
- // display the inline comments, tags and deprecation information if any.
- private static final String[][] TEST_CMNT_DEPR = {
-- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "<DD><DL>" + NL + NL +
-- "<DT><STRONG>Throws:</STRONG>" + NL + "<DD><CODE>" +
-- "java.io.IOException</CODE><DT><STRONG>See Also:</STRONG>" +
-- "<DD><A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-- "<CODE>C1.setUndecorated(boolean)</CODE></A></DD>" + NL +
-- "</DL>" + NL + "</DL>"},
-+ {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "<DD><DL>" + NL +
-+ "<DT><STRONG>Throws:</STRONG></DT>" + NL + "<DD><CODE>" +
-+ "java.io.IOException</CODE></DD><DT><STRONG>See Also:</STRONG>" +
-+ "</DT><DD><A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<CODE>C1.setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
-+ "</DD>" + NL + "</DL>"},
- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
-- "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
-- " 1.5, replaced by" + NL +
-+ "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version " +
-+ "1.5, replaced by" + NL +
- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-- "<CODE>setUndecorated(boolean)</CODE></A>.</I>" +
-+ "<CODE>setUndecorated(boolean)</CODE></A>.</I></DD>" +
- "<DD>This field indicates whether the C1 is undecorated." + NL +
-- "<P>" + NL + "<DT><DD>&nbsp;<DL>" + NL +
-- "<DT><STRONG>Since:</STRONG></DT>" + NL +
-+ "<P>" + NL + "</DD>" + NL + "<DD>&nbsp;</DD>" + NL +
-+ "<DD><DL>" + NL + "<DT><STRONG>Since:</STRONG></DT>" + NL +
- " <DD>1.4</DD>" + NL + "<DT><STRONG>See Also:</STRONG>" +
-- "<DD><A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-- "<CODE>C1.setUndecorated(boolean)</CODE></A></DL>" + NL +
-- "</DL>"},
-+ "</DT><DD><A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<CODE>C1.setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
-+ "</DD>" + NL + "</DL>"},
- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
- "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
- " 1.5, replaced by" + NL +
- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
- "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
-- "<DD>Reads the object stream." + NL + "<P>" + NL +
-- "<DD><DL>" + NL + NL + "<DT><STRONG>Throws:" +
-- "</STRONG>" + NL + "<DD><CODE><code>" +
-- "IOException</code></CODE>" + NL +
-- "<DD><CODE>java.io.IOException</CODE></DD>" + NL +
-- "</DL>" + NL + "</DL>"},
-+ "</DD><DD>Reads the object stream." + NL + "<P>" + NL +
-+ "</DD>" + NL + "<DD><DL>" + NL + "<DT><STRONG>Throws:" +
-+ "</STRONG></DT>" + NL + "<DD><CODE><code>" +
-+ "IOException</code></CODE></DD>" + NL +
-+ "<DD><CODE>java.io.IOException</CODE></DD></DL>" + NL +
-+ "</DD>" + NL + "</DL>"},
- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
-- "<DD><STRONG>Deprecated.</STRONG>&nbsp;<DD>" +
-- "The name for this class." + NL + "<P>" + NL +
-- "<DT><DD>&nbsp;<DL>" + NL + "</DL>" + NL + "</DL>"}};
-+ "<DD><STRONG>Deprecated.</STRONG>&nbsp;</DD><DD>" +
-+ "The name for this class." + NL + "<P>" + NL + "</DD>" + NL +
-+ "<DD>&nbsp;</DD>" + NL + "</DL>"}};
-
- // Test with -nocomment option. The serialized-form.html should
- // not display the inline comments and tags but should display deprecation
-@@ -83,16 +83,16 @@
- "undecorated</STRONG></PRE>" + NL + "<DL>" + NL + "<DD><STRONG>" +
- "Deprecated.</STRONG>&nbsp;<I>As of JDK version 1.5, replaced by" + NL +
- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\"><CODE>" +
-- "setUndecorated(boolean)</CODE></A>.</I></DL>"},
-+ "setUndecorated(boolean)</CODE></A>.</I></DD></DL>"},
- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "<DD><STRONG>" +
- "Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
- " 1.5, replaced by" + NL +
- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
- "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
-- "</DL>"},
-+ "</DD></DL>"},
- {BUG_ID + FS + "serialized-form.html", "<PRE>" + NL + "int <STRONG>" +
- "publicKey</STRONG></PRE>" + NL + "<DL>" + NL + "<DD><STRONG>" +
-- "Deprecated.</STRONG>&nbsp;</DL>"}};
-+ "Deprecated.</STRONG>&nbsp;</DD></DL>"}};
-
- // Test with -nodeprecated option. The serialized-form.html should
- // ignore the -nodeprecated tag and display the deprecation info. This
-diff --git a/test/com/sun/javadoc/testThrowsTag/TestThrowsTag.java b/test/com/sun/javadoc/testThrowsTag/TestThrowsTag.java
---- langtools/test/com/sun/javadoc/testThrowsTag/TestThrowsTag.java
-+++ langtools/test/com/sun/javadoc/testThrowsTag/TestThrowsTag.java
-@@ -46,14 +46,14 @@
- //Input for string search tests.
- private static final String[][] TEST = {
- {BUG_ID + FS + "pkg" + FS + "C.html",
-- "<DD><CODE><A HREF=\"../pkg/T1.html\" title=\"class in pkg\">T1</A></CODE> - the first throws tag." + NL +
-- "<DD><CODE><A HREF=\"../pkg/T2.html\" title=\"class in pkg\">T2</A></CODE> - the second throws tag." + NL +
-- "<DD><CODE><A HREF=\"../pkg/T3.html\" title=\"class in pkg\">T3</A></CODE> - the third throws tag." + NL +
-- "<DD><CODE><A HREF=\"../pkg/T4.html\" title=\"class in pkg\">T4</A></CODE> - the fourth throws tag." + NL +
-- "<DD><CODE><A HREF=\"../pkg/T5.html\" title=\"class in pkg\">T5</A></CODE> - the first inherited throws tag." + NL +
-- "<DD><CODE><A HREF=\"../pkg/T6.html\" title=\"class in pkg\">T6</A></CODE> - the second inherited throws tag." + NL +
-- "<DD><CODE><A HREF=\"../pkg/T7.html\" title=\"class in pkg\">T7</A></CODE> - the third inherited throws tag." + NL +
-- "<DD><CODE><A HREF=\"../pkg/T8.html\" title=\"class in pkg\">T8</A></CODE> - the fourth inherited throws tag."
-+ "<DD><CODE><A HREF=\"../pkg/T1.html\" title=\"class in pkg\">T1</A></CODE> - the first throws tag.</DD>" + NL +
-+ "<DD><CODE><A HREF=\"../pkg/T2.html\" title=\"class in pkg\">T2</A></CODE> - the second throws tag.</DD>" + NL +
-+ "<DD><CODE><A HREF=\"../pkg/T3.html\" title=\"class in pkg\">T3</A></CODE> - the third throws tag.</DD>" + NL +
-+ "<DD><CODE><A HREF=\"../pkg/T4.html\" title=\"class in pkg\">T4</A></CODE> - the fourth throws tag.</DD>" + NL +
-+ "<DD><CODE><A HREF=\"../pkg/T5.html\" title=\"class in pkg\">T5</A></CODE> - the first inherited throws tag.</DD>" + NL +
-+ "<DD><CODE><A HREF=\"../pkg/T6.html\" title=\"class in pkg\">T6</A></CODE> - the second inherited throws tag.</DD>" + NL +
-+ "<DD><CODE><A HREF=\"../pkg/T7.html\" title=\"class in pkg\">T7</A></CODE> - the third inherited throws tag.</DD>" + NL +
-+ "<DD><CODE><A HREF=\"../pkg/T8.html\" title=\"class in pkg\">T8</A></CODE> - the fourth inherited throws tag.</DD>"
- },
- };
- private static final String[][] NEGATED_TEST = NO_TEST;
diff --git a/java/openjdk6/files/icedtea/openjdk/6802694-no_deprecated.patch b/java/openjdk6/files/icedtea/openjdk/6802694-no_deprecated.patch
deleted file mode 100644
index ba797822c5e4..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/6802694-no_deprecated.patch
+++ /dev/null
@@ -1,601 +0,0 @@
-# HG changeset patch
-# User andrew
-# Date 1371571658 18000
-# Node ID 9b884c583c41a545352b035d11d1ccacb96fbb2f
-# Parent 92a90d8c955b6cc619d16975e02d9143715dedaa
-6802694: Javadoc doclet does not display deprecated information with -nocomment option for serialized form
-Reviewed-by: jjg
-
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java
-@@ -245,6 +245,29 @@
- }
-
- /**
-+ * Check whether there are any tags to be printed.
-+ *
-+ * @param doc the Doc object to check for tags.
-+ * @return true if there are tags to be printed else return false.
-+ */
-+ protected boolean hasTagsToPrint(Doc doc) {
-+ if (doc instanceof MethodDoc) {
-+ ClassDoc[] intfacs = ((MethodDoc)doc).containingClass().interfaces();
-+ MethodDoc overriddenMethod = ((MethodDoc)doc).overriddenMethod();
-+ if ((intfacs.length > 0 &&
-+ new ImplementedMethods((MethodDoc)doc, this.configuration).build().length > 0) ||
-+ overriddenMethod != null) {
-+ return true;
-+ }
-+ }
-+ TagletOutputImpl output = new TagletOutputImpl("");
-+ TagletWriter.genTagOuput(configuration.tagletManager, doc,
-+ configuration.tagletManager.getCustomTags(doc),
-+ getTagletWriterInstance(false), output);
-+ return (output.toString().trim().isEmpty());
-+ }
-+
-+ /**
- * Returns a TagletWriter that knows how to write HTML.
- *
- * @return a TagletWriter that knows how to write HTML.
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java
-@@ -164,4 +164,20 @@
- public void writeMemberFooter(FieldDoc member) {
- writer.dlEnd();
- }
-+
-+ /**
-+ * Check to see if member details should be printed. If
-+ * nocomment option set or if there is no text to be printed
-+ * for deprecation info, inline comment, no serial tag or inline tags,
-+ * do not print member details.
-+ */
-+ public boolean shouldPrintMemberDetails(FieldDoc field) {
-+ if (!configuration().nocomment)
-+ if((field.inlineTags().length > 0) ||
-+ (field.tags("serial").length > 0) || (writer.hasTagsToPrint(field)))
-+ return true;
-+ if (!Util.isDeprecated(field))
-+ return true;
-+ return false;
-+ }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/TagletOutputImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/TagletOutputImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/TagletOutputImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/TagletOutputImpl.java
-@@ -67,4 +67,10 @@
- return output.toString();
- }
-
-+ /**
-+ * Check whether the taglet output is empty.
-+ */
-+ public boolean isEmpty() {
-+ return (toString().trim().isEmpty());
-+ }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java
-@@ -152,6 +152,17 @@
- * @param member the member to write the header for.
- */
- public void writeMemberFooter(FieldDoc member);
-+
-+ /**
-+ * Check to see if member details should be printed. If
-+ * nocomment option set or if there is no text to be printed
-+ * for deprecation info, inline comment, no serial tag or inline tags,
-+ * do not print member details.
-+ *
-+ * @param member the member to check details for.
-+ * @return true if details need to be printed
-+ */
-+ public boolean shouldPrintMemberDetails(FieldDoc member);
- }
-
- /**
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java
-@@ -403,16 +403,17 @@
- if (classDoc.definesSerializableFields()) {
- FieldDoc serialPersistentField =
- (FieldDoc)((Util.asList(classDoc.serializableFields()).get(0)));
-- String comment = serialPersistentField.commentText();
-- if (comment.length() > 0) {
-+ // Check to see if there are inline comments, tags or deprecation
-+ // information to be printed.
-+ if (fieldWriter.shouldPrintMemberDetails(serialPersistentField)) {
- fieldWriter.writeHeader(
- configuration.getText("doclet.Serialized_Form_class"));
-+ fieldWriter.writeMemberDeprecatedInfo(serialPersistentField);
- if (!configuration.nocomment) {
-- fieldWriter.writeMemberDeprecatedInfo(serialPersistentField);
- fieldWriter.writeMemberDescription(serialPersistentField);
- fieldWriter.writeMemberTags(serialPersistentField);
-- fieldWriter.writeMemberFooter(serialPersistentField);
- }
-+ fieldWriter.writeMemberFooter(serialPersistentField);
- }
- }
- }
-@@ -429,6 +430,16 @@
- }
-
- /**
-+ * Build the field deprecation information.
-+ */
-+ public void buildFieldDeprecationInfo() {
-+ if (!currentClass.definesSerializableFields()) {
-+ FieldDoc field = (FieldDoc)currentMember;
-+ fieldWriter.writeMemberDeprecatedInfo(field);
-+ }
-+ }
-+
-+ /**
- * Build the field information.
- */
- public void buildFieldInfo() {
-@@ -459,7 +470,6 @@
- "doclet.MissingSerialTag", cd.qualifiedName(),
- field.name());
- }
-- fieldWriter.writeMemberDeprecatedInfo(field);
- fieldWriter.writeMemberDescription(field);
- fieldWriter.writeMemberTags(field);
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclet.xml b/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclet.xml
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclet.xml
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclet.xml
-@@ -183,8 +183,8 @@
- <MethodHeader/>
- <SerializableMethods>
- <MethodSubHeader/>
-+ <DeprecatedMethodInfo/>
- <MethodInfo>
-- <DeprecatedMethodInfo/>
- <MethodDescription/>
- <MethodTags/>
- </MethodInfo>
-@@ -193,6 +193,7 @@
- <FieldHeader/>
- <SerializableFields>
- <FieldSubHeader/>
-+ <FieldDeprecationInfo/>
- <FieldInfo/>
- <FieldFooter/>
- </SerializableFields>
-diff --git a/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java b/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java
-@@ -0,0 +1,151 @@
-+/*
-+ * 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.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 6802694
-+ * @summary This test verifies deprecation info in serialized-form.html.
-+ * @author Bhavesh Patel
-+ * @library ../lib/
-+ * @build JavadocTester
-+ * @build TestSerializedFormDeprecationInfo
-+ * @run main TestSerializedFormDeprecationInfo
-+ */
-+
-+public class TestSerializedFormDeprecationInfo extends JavadocTester {
-+
-+ private static final String BUG_ID = "6802694";
-+
-+ // Test for normal run of javadoc. The serialized-form.html should
-+ // display the inline comments, tags and deprecation information if any.
-+ private static final String[][] TEST_CMNT_DEPR = {
-+ {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "<DD><DL>" + NL + NL +
-+ "<DT><STRONG>Throws:</STRONG>" + NL + "<DD><CODE>" +
-+ "java.io.IOException</CODE><DT><STRONG>See Also:</STRONG>" +
-+ "<DD><A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<CODE>C1.setUndecorated(boolean)</CODE></A></DD>" + NL +
-+ "</DL>" + NL + "</DL>"},
-+ {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
-+ "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
-+ " 1.5, replaced by" + NL +
-+ " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<CODE>setUndecorated(boolean)</CODE></A>.</I>" +
-+ "<DD>This field indicates whether the C1 is undecorated." + NL +
-+ "<P>" + NL + "<DT><DD>&nbsp;<DL>" + NL +
-+ "<DT><STRONG>Since:</STRONG></DT>" + NL +
-+ " <DD>1.4</DD>" + NL + "<DT><STRONG>See Also:</STRONG>" +
-+ "<DD><A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<CODE>C1.setUndecorated(boolean)</CODE></A></DL>" + NL +
-+ "</DL>"},
-+ {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
-+ "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
-+ " 1.5, replaced by" + NL +
-+ " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
-+ "<DD>Reads the object stream." + NL + "<P>" + NL +
-+ "<DD><DL>" + NL + NL + "<DT><STRONG>Throws:" +
-+ "</STRONG>" + NL + "<DD><CODE><code>" +
-+ "IOException</code></CODE>" + NL +
-+ "<DD><CODE>java.io.IOException</CODE></DD>" + NL +
-+ "</DL>" + NL + "</DL>"},
-+ {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
-+ "<DD><STRONG>Deprecated.</STRONG>&nbsp;<DD>" +
-+ "The name for this class." + NL + "<P>" + NL +
-+ "<DT><DD>&nbsp;<DL>" + NL + "</DL>" + NL + "</DL>"}};
-+
-+ // Test with -nocomment option. The serialized-form.html should
-+ // not display the inline comments and tags but should display deprecation
-+ // information if any.
-+ private static final String[][] TEST_NOCMNT = {
-+ {BUG_ID + FS + "serialized-form.html", "<PRE>" + NL + "boolean <STRONG>" +
-+ "undecorated</STRONG></PRE>" + NL + "<DL>" + NL + "<DD><STRONG>" +
-+ "Deprecated.</STRONG>&nbsp;<I>As of JDK version 1.5, replaced by" + NL +
-+ " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\"><CODE>" +
-+ "setUndecorated(boolean)</CODE></A>.</I></DL>"},
-+ {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "<DD><STRONG>" +
-+ "Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
-+ " 1.5, replaced by" + NL +
-+ " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
-+ "</DL>"},
-+ {BUG_ID + FS + "serialized-form.html", "<PRE>" + NL + "int <STRONG>" +
-+ "publicKey</STRONG></PRE>" + NL + "<DL>" + NL + "<DD><STRONG>" +
-+ "Deprecated.</STRONG>&nbsp;</DL>"}};
-+
-+ // Test with -nodeprecated option. The serialized-form.html should
-+ // ignore the -nodeprecated tag and display the deprecation info. This
-+ // test is similar to the normal run of javadoc in which inline comment, tags
-+ // and deprecation information will be displayed.
-+ private static final String[][] TEST_NODEPR = TEST_CMNT_DEPR;
-+
-+ // Test with -nodeprecated and -nocomment options. The serialized-form.html should
-+ // ignore the -nodeprecated tag and display the deprecation info but should not
-+ // display the inline comments and tags. This test is similar to the test with
-+ // -nocomment option.
-+ private static final String[][] TEST_NOCMNT_NODEPR = TEST_NOCMNT;
-+
-+ private static final String[] ARGS1 =
-+ new String[] {
-+ "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg1"};
-+
-+ private static final String[] ARGS2 =
-+ new String[] {
-+ "-d", BUG_ID, "-nocomment", "-sourcepath", SRC_DIR, "pkg1"};
-+
-+ private static final String[] ARGS3 =
-+ new String[] {
-+ "-d", BUG_ID, "-nodeprecated", "-sourcepath", SRC_DIR, "pkg1"};
-+
-+ private static final String[] ARGS4 =
-+ new String[] {
-+ "-d", BUG_ID, "-nocomment", "-nodeprecated", "-sourcepath", SRC_DIR, "pkg1"};
-+
-+ /**
-+ * The entry point of the test.
-+ * @param args the array of command line arguments.
-+ */
-+ public static void main(String[] args) {
-+ TestSerializedFormDeprecationInfo tester = new TestSerializedFormDeprecationInfo();
-+ run(tester, ARGS1, TEST_CMNT_DEPR, TEST_NOCMNT);
-+ run(tester, ARGS2, TEST_NOCMNT, TEST_CMNT_DEPR);
-+ run(tester, ARGS3, TEST_NODEPR, TEST_NOCMNT_NODEPR);
-+ run(tester, ARGS4, TEST_NOCMNT_NODEPR, TEST_NODEPR);
-+ tester.printSummary();
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getBugId() {
-+ return BUG_ID;
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getBugName() {
-+ return getClass().getName();
-+ }
-+}
-diff --git a/test/com/sun/javadoc/testSerializedFormDeprecationInfo/pkg1/C1.java b/test/com/sun/javadoc/testSerializedFormDeprecationInfo/pkg1/C1.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/pkg1/C1.java
-@@ -0,0 +1,108 @@
-+/*
-+ * 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 pkg1;
-+
-+import java.io.IOException;
-+import java.io.Serializable;
-+
-+/**
-+ * A class comment for testing.
-+ *
-+ * @author Bhavesh Patel
-+ * @see C2
-+ * @since JDK1.0
-+ */
-+
-+public class C1 implements Serializable {
-+
-+ /**
-+ * This field indicates whether the C1 is undecorated.
-+ *
-+ * @see #setUndecorated(boolean)
-+ * @since 1.4
-+ * @serial
-+ * @deprecated As of JDK version 1.5, replaced by
-+ * {@link C1#setUndecorated(boolean) setUndecorated(boolean)}.
-+ */
-+ @Deprecated
-+ public boolean undecorated = false;
-+
-+ private String title;
-+
-+ /**
-+ * This enum specifies the possible modal exclusion types.
-+ *
-+ * @since 1.6
-+ */
-+ public static enum ModalExclusionType {
-+ /**
-+ * No modal exclusion.
-+ */
-+ NO_EXCLUDE,
-+ /**
-+ * <code>APPLICATION_EXCLUDE</code> indicates that a top-level window
-+ * won't be blocked by any application-modal dialogs. Also, it isn't
-+ * blocked by document-modal dialogs from outside of its child hierarchy.
-+ */
-+ APPLICATION_EXCLUDE
-+ };
-+
-+ /**
-+ * Constructor.
-+ *
-+ * @param title the title
-+ * @param test boolean value
-+ * @exception IllegalArgumentException if the <code>owner</code>'s
-+ * <code>GraphicsConfiguration</code> is not from a screen device
-+ * @exception HeadlessException
-+ */
-+ public C1(String title, boolean test) {
-+
-+ }
-+
-+ public C1(String title) {
-+
-+ }
-+
-+ /**
-+ * Method comments.
-+ * @param undecorated <code>true</code> if no decorations are
-+ * to be enabled;
-+ * <code>false</code> if decorations are to be enabled.
-+ * @see #readObject()
-+ * @since 1.4
-+ */
-+ public void setUndecorated(boolean undecorated) {
-+ /* Make sure we don't run in the middle of peer creation.*/
-+ }
-+
-+ /**
-+ * @see #setUndecorated(boolean)
-+ */
-+ public void readObject() throws IOException {
-+
-+ }
-+}
-diff --git a/test/com/sun/javadoc/testSerializedFormDeprecationInfo/pkg1/C2.java b/test/com/sun/javadoc/testSerializedFormDeprecationInfo/pkg1/C2.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/pkg1/C2.java
-@@ -0,0 +1,86 @@
-+/*
-+ * 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 pkg1;
-+
-+import java.io.ObjectInputStream;
-+import java.io.IOException;
-+import java.io.Serializable;
-+
-+/**
-+ * A class comment for testing.
-+ *
-+ * @author Bhavesh Patel
-+ * @see C1
-+ * @since JDK1.0
-+ */
-+
-+public class C2 implements Serializable {
-+
-+ /**
-+ * This field indicates title.
-+ */
-+ String title;
-+
-+ public static enum ModalType {
-+ NO_EXCLUDE
-+ };
-+
-+ /**
-+ * Constructor.
-+ *
-+ */
-+ public C2() {
-+
-+ }
-+
-+ public C2(String title) {
-+
-+ }
-+
-+ /**
-+ * Set visible.
-+ *
-+ * @param set boolean
-+ * @since 1.4
-+ * @deprecated As of JDK version 1.5, replaced by
-+ * {@link C1#setUndecorated(boolean) setUndecorated(boolean)}.
-+ */
-+ @Deprecated
-+ public void setVisible(boolean set) {
-+ }
-+
-+ /**
-+ * Reads the object stream.
-+ *
-+ * @param s ObjectInputStream
-+ * @throws <code>IOException</code>
-+ * @deprecated As of JDK version 1.5, replaced by
-+ * {@link C1#setUndecorated(boolean) setUndecorated(boolean)}.
-+ */
-+ @Deprecated
-+ public void readObject(ObjectInputStream s) throws IOException {
-+ }
-+}
-diff --git a/test/com/sun/javadoc/testSerializedFormDeprecationInfo/pkg1/C3.java b/test/com/sun/javadoc/testSerializedFormDeprecationInfo/pkg1/C3.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/pkg1/C3.java
-@@ -0,0 +1,65 @@
-+/*
-+ * 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 pkg1;
-+
-+import java.io.Serializable;
-+
-+/**
-+ * Test for Serializable
-+ *
-+ * @author Bhavesh Patel
-+ * @deprecated This class is no longer used.
-+ */
-+@Deprecated
-+public abstract class C3 implements Serializable {
-+
-+ /**
-+ * The name for this class.
-+ *
-+ * @serial
-+ */
-+ private String name;
-+
-+ /**
-+ * @serial
-+ */
-+ private int publicKey;
-+
-+ /**
-+ * Constructor for serialization only.
-+ */
-+ protected C3() {
-+
-+ }
-+
-+ /**
-+ * Prints general information.
-+ *
-+ */
-+ public void printInfo() {
-+
-+ }
-+}
diff --git a/java/openjdk6/files/icedtea/openjdk/6851834-handle_renames.patch b/java/openjdk6/files/icedtea/openjdk/6851834-handle_renames.patch
deleted file mode 100644
index 0b9d615e7b91..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/6851834-handle_renames.patch
+++ /dev/null
@@ -1,605 +0,0 @@
-This handles the rename bits of the original 6851834
-diff -ruN openjdk.orig/langtools/src/share/classes/com/sun/tools/doclets/formats/html/SourceToHTMLConverter.java openjdk/langtools/src/share/classes/com/sun/tools/doclets/formats/html/SourceToHTMLConverter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/SourceToHTMLConverter.java 1969-12-31 19:00:00.000000000 -0500
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/SourceToHTMLConverter.java 2013-06-25 14:55:45.802321034 -0400
-@@ -0,0 +1,298 @@
-+/*
-+ * Copyright (c) 2001, 2006, Oracle and/or its affiliates. All rights reserved.
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+package com.sun.tools.doclets.formats.html;
-+
-+import java.io.*;
-+import javax.tools.FileObject;
-+import com.sun.javadoc.*;
-+import com.sun.tools.doclets.internal.toolkit.*;
-+import com.sun.tools.doclets.internal.toolkit.util.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-+
-+/**
-+ * Converts Java Source Code to HTML.
-+ *
-+ * This code is not part of an API.
-+ * It is implementation that is subject to change.
-+ * Do not use it as an API
-+ *
-+ * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
-+ * @since 1.4
-+ */
-+public class SourceToHTMLConverter {
-+
-+ /**
-+ * The number of trailing blank lines at the end of the page.
-+ * This is inserted so that anchors at the bottom of small pages
-+ * can be reached.
-+ */
-+ private static final int NUM_BLANK_LINES = 60;
-+
-+ /**
-+ * New line to be added to the documentation.
-+ */
-+ private static final Content NEW_LINE = new RawHtml(DocletConstants.NL);
-+
-+ /**
-+ * Relative path from the documentation root to the file that is being
-+ * generated.
-+ */
-+ private static String relativePath = "";
-+
-+ /**
-+ * Source is converted to HTML using static methods below.
-+ */
-+ private SourceToHTMLConverter() {}
-+
-+ /**
-+ * Convert the Classes in the given RootDoc to an HTML.
-+ *
-+ * @param configuration the configuration.
-+ * @param rd the RootDoc to convert.
-+ * @param outputdir the name of the directory to output to.
-+ */
-+ public static void convertRoot(ConfigurationImpl configuration, RootDoc rd,
-+ String outputdir) {
-+ if (rd == null || outputdir == null) {
-+ return;
-+ }
-+ PackageDoc[] pds = rd.specifiedPackages();
-+ for (int i = 0; i < pds.length; i++) {
-+ convertPackage(configuration, pds[i], outputdir);
-+ }
-+ ClassDoc[] cds = rd.specifiedClasses();
-+ for (int i = 0; i < cds.length; i++) {
-+ convertClass(configuration, cds[i],
-+ getPackageOutputDir(outputdir, cds[i].containingPackage()));
-+ }
-+ }
-+
-+ /**
-+ * Convert the Classes in the given Package to an HTML.
-+ *
-+ * @param configuration the configuration.
-+ * @param pd the Package to convert.
-+ * @param outputdir the name of the directory to output to.
-+ */
-+ public static void convertPackage(ConfigurationImpl configuration, PackageDoc pd,
-+ String outputdir) {
-+ if (pd == null || outputdir == null) {
-+ return;
-+ }
-+ String classOutputdir = getPackageOutputDir(outputdir, pd);
-+ ClassDoc[] cds = pd.allClasses();
-+ for (int i = 0; i < cds.length; i++) {
-+ convertClass(configuration, cds[i], classOutputdir);
-+ }
-+ }
-+
-+ /**
-+ * Return the directory write output to for the given package.
-+ *
-+ * @param outputDir the directory to output to.
-+ * @param pd the Package to generate output for.
-+ * @return the package output directory as a String.
-+ */
-+ private static String getPackageOutputDir(String outputDir, PackageDoc pd) {
-+ return outputDir + File.separator +
-+ DirectoryManager.getDirectoryPath(pd) + File.separator;
-+ }
-+
-+ /**
-+ * Convert the given Class to an HTML.
-+ *
-+ * @param configuration the configuration.
-+ * @param cd the class to convert.
-+ * @param outputdir the name of the directory to output to.
-+ */
-+ public static void convertClass(ConfigurationImpl configuration, ClassDoc cd,
-+ String outputdir) {
-+ if (cd == null || outputdir == null) {
-+ return;
-+ }
-+ try {
-+ SourcePosition sp = cd.position();
-+ if (sp == null)
-+ return;
-+ Reader r;
-+ // temp hack until we can update SourcePosition API.
-+ if (sp instanceof com.sun.tools.javadoc.SourcePositionImpl) {
-+ FileObject fo = ((com.sun.tools.javadoc.SourcePositionImpl) sp).fileObject();
-+ if (fo == null)
-+ return;
-+ r = fo.openReader(true);
-+ } else {
-+ File file = sp.file();
-+ if (file == null)
-+ return;
-+ r = new FileReader(file);
-+ }
-+ LineNumberReader reader = new LineNumberReader(r);
-+ int lineno = 1;
-+ String line;
-+ relativePath = DirectoryManager.getRelativePath(DocletConstants.SOURCE_OUTPUT_DIR_NAME) +
-+ DirectoryManager.getRelativePath(cd.containingPackage());
-+ Content body = getHeader();
-+ Content pre = new HtmlTree(HtmlTag.PRE);
-+ try {
-+ while ((line = reader.readLine()) != null) {
-+ addLineNo(pre, lineno);
-+ addLine(pre, line, configuration.sourcetab, lineno);
-+ lineno++;
-+ }
-+ } finally {
-+ reader.close();
-+ }
-+ addBlankLines(pre);
-+ Content div = HtmlTree.DIV(HtmlStyle.sourceContainer, pre);
-+ body.addContent(div);
-+ writeToFile(body, outputdir, cd.name(), configuration);
-+ } catch (Exception e){
-+ e.printStackTrace();
-+ }
-+ }
-+
-+ /**
-+ * Write the output to the file.
-+ *
-+ * @param body the documentation content to be written to the file.
-+ * @param outputDir the directory to output to.
-+ * @param className the name of the class that I am converting to HTML.
-+ * @param configuration the Doclet configuration to pass notices to.
-+ */
-+ private static void writeToFile(Content body, String outputDir,
-+ String className, ConfigurationImpl configuration) throws IOException {
-+ Content htmlDocType = DocType.Transitional();
-+ Content head = new HtmlTree(HtmlTag.HEAD);
-+ head.addContent(HtmlTree.TITLE(new StringContent(
-+ configuration.getText("doclet.Window_Source_title"))));
-+ head.addContent(getStyleSheetProperties(configuration));
-+ Content htmlTree = HtmlTree.HTML(configuration.getLocale().getLanguage(),
-+ head, body);
-+ Content htmlDocument = new HtmlDocument(htmlDocType, htmlTree);
-+ File dir = new File(outputDir);
-+ dir.mkdirs();
-+ File newFile = new File(dir, className + ".html");
-+ configuration.message.notice("doclet.Generating_0", newFile.getPath());
-+ FileOutputStream fout = new FileOutputStream(newFile);
-+ BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fout));
-+ bw.write(htmlDocument.toString());
-+ bw.close();
-+ fout.close();
-+ }
-+
-+ /**
-+ * Returns a link to the stylesheet file.
-+ *
-+ * @param configuration the doclet configuration for the current run of javadoc
-+ * @return an HtmlTree for the lINK tag which provides the stylesheet location
-+ */
-+ public static HtmlTree getStyleSheetProperties(ConfigurationImpl configuration) {
-+ String filename = configuration.stylesheetfile;
-+ if (filename.length() > 0) {
-+ File stylefile = new File(filename);
-+ String parent = stylefile.getParent();
-+ filename = (parent == null)?
-+ filename:
-+ filename.substring(parent.length() + 1);
-+ } else {
-+ filename = "stylesheet.css";
-+ }
-+ filename = relativePath + filename;
-+ HtmlTree link = HtmlTree.LINK("stylesheet", "text/css", filename, "Style");
-+ return link;
-+ }
-+
-+ /**
-+ * Get the header.
-+ *
-+ * @return the header content for the HTML file
-+ */
-+ private static Content getHeader() {
-+ return new HtmlTree(HtmlTag.BODY);
-+ }
-+
-+ /**
-+ * Add the line numbers for the source code.
-+ *
-+ * @param pre the content tree to which the line number will be added
-+ * @param lineno The line number
-+ */
-+ private static void addLineNo(Content pre, int lineno) {
-+ HtmlTree span = new HtmlTree(HtmlTag.SPAN);
-+ span.addStyle(HtmlStyle.sourceLineNo);
-+ if (lineno < 10) {
-+ span.addContent("00" + Integer.toString(lineno));
-+ } else if (lineno < 100) {
-+ span.addContent("0" + Integer.toString(lineno));
-+ } else {
-+ span.addContent(Integer.toString(lineno));
-+ }
-+ pre.addContent(span);
-+ }
-+
-+ /**
-+ * Add a line from source to the HTML file that is generated.
-+ *
-+ * @param pre the content tree to which the line will be added.
-+ * @param line the string to format.
-+ * @param tabLength the number of spaces for each tab.
-+ * @param currentLineNo the current number.
-+ */
-+ private static void addLine(Content pre, String line, int tabLength,
-+ int currentLineNo) {
-+ if (line != null) {
-+ StringBuffer lineBuffer = new StringBuffer(Util.escapeHtmlChars(line));
-+ Util.replaceTabs(tabLength, lineBuffer);
-+ pre.addContent(new RawHtml(lineBuffer.toString()));
-+ Content anchor = HtmlTree.A_NAME("line." + Integer.toString(currentLineNo));
-+ pre.addContent(anchor);
-+ pre.addContent(NEW_LINE);
-+ }
-+ }
-+
-+ /**
-+ * Add trailing blank lines at the end of the page.
-+ *
-+ * @param pre the content tree to which the blank lines will be added.
-+ */
-+ private static void addBlankLines(Content pre) {
-+ for (int i = 0; i < NUM_BLANK_LINES; i++) {
-+ pre.addContent(NEW_LINE);
-+ }
-+ }
-+
-+ /**
-+ * Given a <code>Doc</code>, return an anchor name for it.
-+ *
-+ * @param d the <code>Doc</code> to check.
-+ * @return the name of the anchor.
-+ */
-+ public static String getAnchorName(Doc d) {
-+ return "line." + d.position().line();
-+ }
-+}
-diff -ruN openjdk.orig/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/SourceToHTMLConverter.java openjdk/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/SourceToHTMLConverter.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/SourceToHTMLConverter.java 2013-06-25 14:55:45.802321034 -0400
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/SourceToHTMLConverter.java 1969-12-31 19:00:00.000000000 -0500
-@@ -1,298 +0,0 @@
--/*
-- * Copyright (c) 2001, 2006, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-- */
--
--package com.sun.tools.doclets.formats.html;
--
--import java.io.*;
--import javax.tools.FileObject;
--import com.sun.javadoc.*;
--import com.sun.tools.doclets.internal.toolkit.*;
--import com.sun.tools.doclets.internal.toolkit.util.*;
--import com.sun.tools.doclets.formats.html.markup.*;
--
--/**
-- * Converts Java Source Code to HTML.
-- *
-- * This code is not part of an API.
-- * It is implementation that is subject to change.
-- * Do not use it as an API
-- *
-- * @author Jamie Ho
-- * @author Bhavesh Patel (Modified)
-- * @since 1.4
-- */
--public class SourceToHTMLConverter {
--
-- /**
-- * The number of trailing blank lines at the end of the page.
-- * This is inserted so that anchors at the bottom of small pages
-- * can be reached.
-- */
-- private static final int NUM_BLANK_LINES = 60;
--
-- /**
-- * New line to be added to the documentation.
-- */
-- private static final Content NEW_LINE = new RawHtml(DocletConstants.NL);
--
-- /**
-- * Relative path from the documentation root to the file that is being
-- * generated.
-- */
-- private static String relativePath = "";
--
-- /**
-- * Source is converted to HTML using static methods below.
-- */
-- private SourceToHTMLConverter() {}
--
-- /**
-- * Convert the Classes in the given RootDoc to an HTML.
-- *
-- * @param configuration the configuration.
-- * @param rd the RootDoc to convert.
-- * @param outputdir the name of the directory to output to.
-- */
-- public static void convertRoot(ConfigurationImpl configuration, RootDoc rd,
-- String outputdir) {
-- if (rd == null || outputdir == null) {
-- return;
-- }
-- PackageDoc[] pds = rd.specifiedPackages();
-- for (int i = 0; i < pds.length; i++) {
-- convertPackage(configuration, pds[i], outputdir);
-- }
-- ClassDoc[] cds = rd.specifiedClasses();
-- for (int i = 0; i < cds.length; i++) {
-- convertClass(configuration, cds[i],
-- getPackageOutputDir(outputdir, cds[i].containingPackage()));
-- }
-- }
--
-- /**
-- * Convert the Classes in the given Package to an HTML.
-- *
-- * @param configuration the configuration.
-- * @param pd the Package to convert.
-- * @param outputdir the name of the directory to output to.
-- */
-- public static void convertPackage(ConfigurationImpl configuration, PackageDoc pd,
-- String outputdir) {
-- if (pd == null || outputdir == null) {
-- return;
-- }
-- String classOutputdir = getPackageOutputDir(outputdir, pd);
-- ClassDoc[] cds = pd.allClasses();
-- for (int i = 0; i < cds.length; i++) {
-- convertClass(configuration, cds[i], classOutputdir);
-- }
-- }
--
-- /**
-- * Return the directory write output to for the given package.
-- *
-- * @param outputDir the directory to output to.
-- * @param pd the Package to generate output for.
-- * @return the package output directory as a String.
-- */
-- private static String getPackageOutputDir(String outputDir, PackageDoc pd) {
-- return outputDir + File.separator +
-- DirectoryManager.getDirectoryPath(pd) + File.separator;
-- }
--
-- /**
-- * Convert the given Class to an HTML.
-- *
-- * @param configuration the configuration.
-- * @param cd the class to convert.
-- * @param outputdir the name of the directory to output to.
-- */
-- public static void convertClass(ConfigurationImpl configuration, ClassDoc cd,
-- String outputdir) {
-- if (cd == null || outputdir == null) {
-- return;
-- }
-- try {
-- SourcePosition sp = cd.position();
-- if (sp == null)
-- return;
-- Reader r;
-- // temp hack until we can update SourcePosition API.
-- if (sp instanceof com.sun.tools.javadoc.SourcePositionImpl) {
-- FileObject fo = ((com.sun.tools.javadoc.SourcePositionImpl) sp).fileObject();
-- if (fo == null)
-- return;
-- r = fo.openReader(true);
-- } else {
-- File file = sp.file();
-- if (file == null)
-- return;
-- r = new FileReader(file);
-- }
-- LineNumberReader reader = new LineNumberReader(r);
-- int lineno = 1;
-- String line;
-- relativePath = DirectoryManager.getRelativePath(DocletConstants.SOURCE_OUTPUT_DIR_NAME) +
-- DirectoryManager.getRelativePath(cd.containingPackage());
-- Content body = getHeader();
-- Content pre = new HtmlTree(HtmlTag.PRE);
-- try {
-- while ((line = reader.readLine()) != null) {
-- addLineNo(pre, lineno);
-- addLine(pre, line, configuration.sourcetab, lineno);
-- lineno++;
-- }
-- } finally {
-- reader.close();
-- }
-- addBlankLines(pre);
-- Content div = HtmlTree.DIV(HtmlStyle.sourceContainer, pre);
-- body.addContent(div);
-- writeToFile(body, outputdir, cd.name(), configuration);
-- } catch (Exception e){
-- e.printStackTrace();
-- }
-- }
--
-- /**
-- * Write the output to the file.
-- *
-- * @param body the documentation content to be written to the file.
-- * @param outputDir the directory to output to.
-- * @param className the name of the class that I am converting to HTML.
-- * @param configuration the Doclet configuration to pass notices to.
-- */
-- private static void writeToFile(Content body, String outputDir,
-- String className, ConfigurationImpl configuration) throws IOException {
-- Content htmlDocType = DocType.Transitional();
-- Content head = new HtmlTree(HtmlTag.HEAD);
-- head.addContent(HtmlTree.TITLE(new StringContent(
-- configuration.getText("doclet.Window_Source_title"))));
-- head.addContent(getStyleSheetProperties(configuration));
-- Content htmlTree = HtmlTree.HTML(configuration.getLocale().getLanguage(),
-- head, body);
-- Content htmlDocument = new HtmlDocument(htmlDocType, htmlTree);
-- File dir = new File(outputDir);
-- dir.mkdirs();
-- File newFile = new File(dir, className + ".html");
-- configuration.message.notice("doclet.Generating_0", newFile.getPath());
-- FileOutputStream fout = new FileOutputStream(newFile);
-- BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fout));
-- bw.write(htmlDocument.toString());
-- bw.close();
-- fout.close();
-- }
--
-- /**
-- * Returns a link to the stylesheet file.
-- *
-- * @param configuration the doclet configuration for the current run of javadoc
-- * @return an HtmlTree for the lINK tag which provides the stylesheet location
-- */
-- public static HtmlTree getStyleSheetProperties(ConfigurationImpl configuration) {
-- String filename = configuration.stylesheetfile;
-- if (filename.length() > 0) {
-- File stylefile = new File(filename);
-- String parent = stylefile.getParent();
-- filename = (parent == null)?
-- filename:
-- filename.substring(parent.length() + 1);
-- } else {
-- filename = "stylesheet.css";
-- }
-- filename = relativePath + filename;
-- HtmlTree link = HtmlTree.LINK("stylesheet", "text/css", filename, "Style");
-- return link;
-- }
--
-- /**
-- * Get the header.
-- *
-- * @return the header content for the HTML file
-- */
-- private static Content getHeader() {
-- return new HtmlTree(HtmlTag.BODY);
-- }
--
-- /**
-- * Add the line numbers for the source code.
-- *
-- * @param pre the content tree to which the line number will be added
-- * @param lineno The line number
-- */
-- private static void addLineNo(Content pre, int lineno) {
-- HtmlTree span = new HtmlTree(HtmlTag.SPAN);
-- span.addStyle(HtmlStyle.sourceLineNo);
-- if (lineno < 10) {
-- span.addContent("00" + Integer.toString(lineno));
-- } else if (lineno < 100) {
-- span.addContent("0" + Integer.toString(lineno));
-- } else {
-- span.addContent(Integer.toString(lineno));
-- }
-- pre.addContent(span);
-- }
--
-- /**
-- * Add a line from source to the HTML file that is generated.
-- *
-- * @param pre the content tree to which the line will be added.
-- * @param line the string to format.
-- * @param tabLength the number of spaces for each tab.
-- * @param currentLineNo the current number.
-- */
-- private static void addLine(Content pre, String line, int tabLength,
-- int currentLineNo) {
-- if (line != null) {
-- StringBuffer lineBuffer = new StringBuffer(Util.escapeHtmlChars(line));
-- Util.replaceTabs(tabLength, lineBuffer);
-- pre.addContent(new RawHtml(lineBuffer.toString()));
-- Content anchor = HtmlTree.A_NAME("line." + Integer.toString(currentLineNo));
-- pre.addContent(anchor);
-- pre.addContent(NEW_LINE);
-- }
-- }
--
-- /**
-- * Add trailing blank lines at the end of the page.
-- *
-- * @param pre the content tree to which the blank lines will be added.
-- */
-- private static void addBlankLines(Content pre) {
-- for (int i = 0; i < NUM_BLANK_LINES; i++) {
-- pre.addContent(NEW_LINE);
-- }
-- }
--
-- /**
-- * Given a <code>Doc</code>, return an anchor name for it.
-- *
-- * @param d the <code>Doc</code> to check.
-- * @return the name of the anchor.
-- */
-- public static String getAnchorName(Doc d) {
-- return "line." + d.position().line();
-- }
--}
diff --git a/java/openjdk6/files/icedtea/openjdk/6851834-restructure.patch b/java/openjdk6/files/icedtea/openjdk/6851834-restructure.patch
deleted file mode 100644
index 66011ee8189e..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/6851834-restructure.patch
+++ /dev/null
@@ -1,26853 +0,0 @@
-# HG changeset patch
-# User andrew
-# Date 1371730814 18000
-# Node ID 5761891cfee48bc9382dd68e5e1bf164cff9bfbf
-# Parent 741c190d6989de395cb95895dc0320415af6b131
-# PLEASE SEE the other 6851834 patch which handles renames more generally
-6851834: Javadoc doclet needs a structured approach to generate the output HTML.
-Reviewed-by: jjg
-
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractExecutableMemberWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractExecutableMemberWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractExecutableMemberWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractExecutableMemberWriter.java
-@@ -26,12 +26,16 @@
- package com.sun.tools.doclets.formats.html;
-
- import com.sun.javadoc.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-+import com.sun.tools.doclets.internal.toolkit.*;
-+import com.sun.tools.doclets.internal.toolkit.util.*;
-
- /**
- * Print method and constructor info.
- *
- * @author Robert Field
- * @author Atul M Dambalkar
-+ * @author Bhavesh Patel (Modified)
- */
- public abstract class AbstractExecutableMemberWriter extends AbstractMemberWriter {
-
-@@ -45,82 +49,111 @@
- }
-
- /**
-- * Write the type parameters for the executable member.
-+ * Add the type parameters for the executable member.
- *
- * @param member the member to write type parameters for.
-+ * @param htmltree the content tree to which the parameters will be added.
- * @return the display length required to write this information.
- */
-- protected int writeTypeParameters(ExecutableMemberDoc member) {
-+ protected int addTypeParameters(ExecutableMemberDoc member, Content htmltree) {
- LinkInfoImpl linkInfo = new LinkInfoImpl(
- LinkInfoImpl.CONTEXT_MEMBER_TYPE_PARAMS, member, false);
- String typeParameters = writer.getTypeParameterLinks(linkInfo);
- if (linkInfo.displayLength > 0) {
-- writer.print(typeParameters + " ");
-+ Content linkContent = new RawHtml(typeParameters);
-+ htmltree.addContent(linkContent);
-+ htmltree.addContent(writer.getSpace());
- writer.displayLength += linkInfo.displayLength + 1;
- }
- return linkInfo.displayLength;
- }
-
-- protected void writeSignature(ExecutableMemberDoc member) {
-- writer.displayLength = 0;
-- writer.pre();
-- writer.writeAnnotationInfo(member);
-- printModifiers(member);
-- writeTypeParameters(member);
-- if (configuration().linksource &&
-- member.position().line() != classdoc.position().line()) {
-- writer.printSrcLink(member, member.name());
-- } else {
-- strong(member.name());
-- }
-- writeParameters(member);
-- writeExceptions(member);
-- writer.preEnd();
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected Content getDeprecatedLink(ProgramElementDoc member) {
-+ ExecutableMemberDoc emd = (ExecutableMemberDoc)member;
-+ return writer.getDocLink(LinkInfoImpl.CONTEXT_MEMBER, (MemberDoc) emd,
-+ emd.qualifiedName() + emd.flatSignature());
- }
-
-- protected void writeDeprecatedLink(ProgramElementDoc member) {
-+ /**
-+ * Add the summary link for the member.
-+ *
-+ * @param context the id of the context where the link will be printed
-+ * @param classDoc the classDoc that we should link to
-+ * @param member the member being linked to
-+ * @param tdSummary the content tree to which the link will be added
-+ */
-+ protected void addSummaryLink(int context, ClassDoc cd, ProgramElementDoc member,
-+ Content tdSummary) {
- ExecutableMemberDoc emd = (ExecutableMemberDoc)member;
-- writer.printDocLink(LinkInfoImpl.CONTEXT_MEMBER, (MemberDoc) emd,
-- emd.qualifiedName() + emd.flatSignature(), false);
-+ String name = emd.name();
-+ Content strong = HtmlTree.STRONG(new RawHtml(
-+ writer.getDocLink(context, cd, (MemberDoc) emd,
-+ name, false)));
-+ Content code = HtmlTree.CODE(strong);
-+ writer.displayLength = name.length();
-+ addParameters(emd, false, code);
-+ tdSummary.addContent(code);
- }
-
-- protected void writeSummaryLink(int context, ClassDoc cd, ProgramElementDoc member) {
-- ExecutableMemberDoc emd = (ExecutableMemberDoc)member;
-- String name = emd.name();
-- writer.strong();
-- writer.printDocLink(context, cd, (MemberDoc) emd,
-- name, false);
-- writer.strongEnd();
-- writer.displayLength = name.length();
-- writeParameters(emd, false);
-+ /**
-+ * Add the inherited summary link for the member.
-+ *
-+ * @param classDoc the classDoc that we should link to
-+ * @param member the member being linked to
-+ * @param linksTree the content tree to which the link will be added
-+ */
-+ protected void addInheritedSummaryLink(ClassDoc cd,
-+ ProgramElementDoc member, Content linksTree) {
-+ linksTree.addContent(new RawHtml(
-+ writer.getDocLink(LinkInfoImpl.CONTEXT_MEMBER, cd, (MemberDoc) member,
-+ member.name(), false)));
- }
-
-- protected void writeInheritedSummaryLink(ClassDoc cd,
-- ProgramElementDoc member) {
-- writer.printDocLink(LinkInfoImpl.CONTEXT_MEMBER, cd, (MemberDoc) member,
-- member.name(), false);
-- }
--
-- protected void writeParam(ExecutableMemberDoc member, Parameter param,
-- boolean isVarArg) {
-+ /**
-+ * Add the parameter for the executable member.
-+ *
-+ * @param member the member to write parameter for.
-+ * @param param the parameter that needs to be written.
-+ * @param isVarArg true if this is a link to var arg.
-+ * @param tree the content tree to which the parameter information will be added.
-+ */
-+ protected void addParam(ExecutableMemberDoc member, Parameter param,
-+ boolean isVarArg, Content tree) {
- if (param.type() != null) {
-- writer.printLink(new LinkInfoImpl(
-- LinkInfoImpl.CONTEXT_EXECUTABLE_MEMBER_PARAM, param.type(),
-- isVarArg));
-+ Content link = new RawHtml(writer.getLink(new LinkInfoImpl(
-+ LinkInfoImpl.CONTEXT_EXECUTABLE_MEMBER_PARAM, param.type(),
-+ isVarArg)));
-+ tree.addContent(link);
- }
- if(param.name().length() > 0) {
-- writer.space();
-- writer.print(param.name());
-+ tree.addContent(writer.getSpace());
-+ tree.addContent(param.name());
- }
- }
-
-- protected void writeParameters(ExecutableMemberDoc member) {
-- writeParameters(member, true);
-+ /**
-+ * Add all the parameters for the executable member.
-+ *
-+ * @param member the member to write parameters for.
-+ * @param tree the content tree to which the parameters information will be added.
-+ */
-+ protected void addParameters(ExecutableMemberDoc member, Content htmltree) {
-+ addParameters(member, true, htmltree);
- }
-
-- protected void writeParameters(ExecutableMemberDoc member,
-- boolean includeAnnotations) {
-- print('(');
-+ /**
-+ * Add all the parameters for the executable member.
-+ *
-+ * @param member the member to write parameters for.
-+ * @param includeAnnotations true if annotation information needs to be added.
-+ * @param tree the content tree to which the parameters information will be added.
-+ */
-+ protected void addParameters(ExecutableMemberDoc member,
-+ boolean includeAnnotations, Content htmltree) {
-+ htmltree.addContent("(");
- Parameter[] params = member.parameters();
- String indent = makeSpace(writer.displayLength);
- if (configuration().linksource) {
-@@ -132,58 +165,70 @@
- Parameter param = params[paramstart];
- if (!param.name().startsWith("this$")) {
- if (includeAnnotations) {
-- boolean foundAnnotations =
-- writer.writeAnnotationInfo(indent.length(), member, param);
-- if (foundAnnotations) {
-- writer.println();
-- writer.print(indent);
-+ boolean foundAnnotations =
-+ writer.addAnnotationInfo(indent.length(),
-+ member, param, htmltree);
-+ if (foundAnnotations) {
-+ htmltree.addContent(DocletConstants.NL);
-+ htmltree.addContent(indent);
- }
- }
-- writeParam(member, param,
-- (paramstart == params.length - 1) && member.isVarArgs());
-+ addParam(member, param,
-+ (paramstart == params.length - 1) && member.isVarArgs(), htmltree);
- break;
- }
- }
-
- for (int i = paramstart + 1; i < params.length; i++) {
-- writer.print(',');
-- writer.println();
-- writer.print(indent);
-+ htmltree.addContent(",");
-+ htmltree.addContent(DocletConstants.NL);
-+ htmltree.addContent(indent);
- if (includeAnnotations) {
- boolean foundAnnotations =
-- writer.writeAnnotationInfo(indent.length(), member, params[i]);
-+ writer.addAnnotationInfo(indent.length(), member, params[i],
-+ htmltree);
- if (foundAnnotations) {
-- writer.println();
-- writer.print(indent);
-+ htmltree.addContent(DocletConstants.NL);
-+ htmltree.addContent(indent);
- }
- }
-- writeParam(member, params[i], (i == params.length - 1) && member.isVarArgs());
-+ addParam(member, params[i], (i == params.length - 1) && member.isVarArgs(),
-+ htmltree);
- }
-- writer.print(')');
-+ htmltree.addContent(")");
- }
-
-- protected void writeExceptions(ExecutableMemberDoc member) {
-+ /**
-+ * Add exceptions for the executable member.
-+ *
-+ * @param member the member to write exceptions for.
-+ * @param htmltree the content tree to which the exceptions information will be added.
-+ */
-+ protected void addExceptions(ExecutableMemberDoc member, Content htmltree) {
- Type[] exceptions = member.thrownExceptionTypes();
- if(exceptions.length > 0) {
- LinkInfoImpl memberTypeParam = new LinkInfoImpl(
-- LinkInfoImpl.CONTEXT_MEMBER, member, false);
-+ LinkInfoImpl.CONTEXT_MEMBER, member, false);
- int retlen = getReturnTypeLength(member);
- writer.getTypeParameterLinks(memberTypeParam);
- retlen += memberTypeParam.displayLength == 0 ?
- 0 : memberTypeParam.displayLength + 1;
- String indent = makeSpace(modifierString(member).length() +
-- member.name().length() + retlen - 4);
-- writer.println();
-- writer.print(indent);
-- writer.print("throws ");
-+ member.name().length() + retlen - 4);
-+ htmltree.addContent(DocletConstants.NL);
-+ htmltree.addContent(indent);
-+ htmltree.addContent("throws ");
- indent += " ";
-- writer.printLink(new LinkInfoImpl(
-- LinkInfoImpl.CONTEXT_MEMBER, exceptions[0]));
-+ Content link = new RawHtml(writer.getLink(new LinkInfoImpl(
-+ LinkInfoImpl.CONTEXT_MEMBER, exceptions[0])));
-+ htmltree.addContent(link);
- for(int i = 1; i < exceptions.length; i++) {
-- writer.println(",");
-- writer.print(indent);
-- writer.printLink(new LinkInfoImpl(
-- LinkInfoImpl.CONTEXT_MEMBER, exceptions[i]));
-+ htmltree.addContent(",");
-+ htmltree.addContent(DocletConstants.NL);
-+ htmltree.addContent(indent);
-+ Content exceptionLink = new RawHtml(writer.getLink(new LinkInfoImpl(
-+ LinkInfoImpl.CONTEXT_MEMBER, exceptions[i])));
-+ htmltree.addContent(exceptionLink);
- }
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractIndexWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractIndexWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractIndexWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractIndexWriter.java
-@@ -30,6 +30,8 @@
-
- import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-+import com.sun.tools.doclets.internal.toolkit.*;
-
- /**
- * Generate Index for all the Member Names with Indexing in
-@@ -39,6 +41,7 @@
- *
- * @see IndexBuilder
- * @author Atul M Dambalkar
-+ * @author Bhavesh Patel (Modified)
- */
- public class AbstractIndexWriter extends HtmlDocletWriter {
-
-@@ -78,175 +81,187 @@
- }
-
- /**
-- * Print the text "Index" in strong format in the navigation bar.
-+ * Get the index label for navigation bar.
-+ *
-+ * @return a content tree for the tree label
- */
-- protected void navLinkIndex() {
-- navCellRevStart();
-- fontStyle("NavBarFont1Rev");
-- strongText("doclet.Index");
-- fontEnd();
-- navCellEnd();
-+ protected Content getNavLinkIndex() {
-+ Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, indexLabel);
-+ return li;
- }
-
- /**
-- * Generate the member information for the unicode character along with the
-+ * Add the member information for the unicode character along with the
- * list of the members.
- *
-- * @param unicode Unicode for which member list information to be generated.
-- * @param memberlist List of members for the unicode character.
-+ * @param unicode Unicode for which member list information to be generated
-+ * @param memberlist List of members for the unicode character
-+ * @param contentTree the content tree to which the information will be added
- */
-- protected void generateContents(Character unicode, List memberlist) {
-- anchor("_" + unicode + "_");
-- h2();
-- strong(unicode.toString());
-- h2End();
-+ protected void addContents(Character unicode, List<? extends Doc> memberlist,
-+ Content contentTree) {
-+ contentTree.addContent(getMarkerAnchor("_" + unicode + "_"));
-+ Content headContent = new StringContent(unicode.toString());
-+ Content heading = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING, false,
-+ HtmlStyle.title, headContent);
-+ contentTree.addContent(heading);
- int memberListSize = memberlist.size();
- // Display the list only if there are elements to be displayed.
- if (memberListSize > 0) {
-- dl();
-+ Content dl = new HtmlTree(HtmlTag.DL);
- for (int i = 0; i < memberListSize; i++) {
- Doc element = memberlist.get(i);
- if (element instanceof MemberDoc) {
-- printDescription((MemberDoc)element);
-+ addDescription((MemberDoc)element, dl);
- } else if (element instanceof ClassDoc) {
-- printDescription((ClassDoc)element);
-+ addDescription((ClassDoc)element, dl);
- } else if (element instanceof PackageDoc) {
-- printDescription((PackageDoc)element);
-+ addDescription((PackageDoc)element, dl);
- }
- }
-- dlEnd();
-+ contentTree.addContent(dl);
- }
-- hr();
-- }
--
--
-- /**
-- * Print one line summary comment for the package.
-- *
-- * @param pkg PackageDoc passed.
-- */
-- protected void printDescription(PackageDoc pkg) {
-- dt();
-- printPackageLink(pkg, Util.getPackageName(pkg), true);
-- print(" - ");
-- print(configuration.getText("doclet.package") + " " + pkg.name());
-- dtEnd();
-- dd();
-- printSummaryComment(pkg);
-- ddEnd();
- }
-
- /**
-- * Print one line summary comment for the class.
-+ * Add one line summary comment for the package.
- *
-- * @param cd ClassDoc passed.
-+ * @param pkg the package to be documented
-+ * @param dlTree the content tree to which the description will be added
- */
-- protected void printDescription(ClassDoc cd) {
-- dt();
-- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_INDEX, cd, true));
-- print(" - ");
-- printClassInfo(cd);
-- dtEnd();
-- dd();
-- printComment(cd);
-- ddEnd();
-+ protected void addDescription(PackageDoc pkg, Content dlTree) {
-+ Content link = getPackageLink(pkg, new StringContent(Util.getPackageName(pkg)));
-+ Content dt = HtmlTree.DT(link);
-+ dt.addContent(" - ");
-+ dt.addContent(getResource("doclet.package"));
-+ dt.addContent(" " + pkg.name());
-+ dlTree.addContent(dt);
-+ Content dd = new HtmlTree(HtmlTag.DD);
-+ addSummaryComment(pkg, dd);
-+ dlTree.addContent(dd);
- }
-
- /**
-- * Print the classkind(class, interface, exception, error of the class
-+ * Add one line summary comment for the class.
-+ *
-+ * @param cd the class being documented
-+ * @param dlTree the content tree to which the description will be added
-+ */
-+ protected void addDescription(ClassDoc cd, Content dlTree) {
-+ Content link = new RawHtml(
-+ getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_INDEX, cd, true)));
-+ Content dt = HtmlTree.DT(link);
-+ dt.addContent(" - ");
-+ addClassInfo(cd, dt);
-+ dlTree.addContent(dt);
-+ Content dd = new HtmlTree(HtmlTag.DD);
-+ addComment(cd, dd);
-+ dlTree.addContent(dd);
-+ }
-+
-+ /**
-+ * Add the classkind(class, interface, exception, error of the class
- * passed.
- *
-- * @param cd ClassDoc.
-+ * @param cd the class being documented
-+ * @param contentTree the content tree to which the class info will be added
- */
-- protected void printClassInfo(ClassDoc cd) {
-- print(configuration.getText("doclet.in",
-- Util.getTypeName(configuration, cd, false),
-- getPackageLink(cd.containingPackage(),
-+ protected void addClassInfo(ClassDoc cd, Content contentTree) {
-+ contentTree.addContent(getResource("doclet.in",
-+ Util.getTypeName(configuration, cd, false),
-+ getPackageLinkString(cd.containingPackage(),
- Util.getPackageName(cd.containingPackage()), false)));
- }
-
--
- /**
-- * Generate Description for Class, Field, Method or Constructor.
-- * for Java.* Packages Class Members.
-+ * Add description for Class, Field, Method or Constructor.
- *
-- * @param member MemberDoc for the member of the Class Kind.
-- * @see com.sun.javadoc.MemberDoc
-+ * @param member MemberDoc for the member of the Class Kind
-+ * @param dlTree the content tree to which the description will be added
- */
-- protected void printDescription(MemberDoc member) {
-+ protected void addDescription(MemberDoc member, Content dlTree) {
- String name = (member instanceof ExecutableMemberDoc)?
- member.name() + ((ExecutableMemberDoc)member).flatSignature() :
- member.name();
- if (name.indexOf("<") != -1 || name.indexOf(">") != -1) {
- name = Util.escapeHtmlChars(name);
- }
-- ClassDoc containing = member.containingClass();
-- dt();
-- printDocLink(LinkInfoImpl.CONTEXT_INDEX, member, name, true);
-- println(" - ");
-- printMemberDesc(member);
-- println();
-- dtEnd();
-- dd();
-- printComment(member);
-- ddEnd();
-- println();
-+ Content span = HtmlTree.SPAN(HtmlStyle.strong,
-+ getDocLink(LinkInfoImpl.CONTEXT_INDEX, member, name));
-+ Content dt = HtmlTree.DT(span);
-+ dt.addContent(" - ");
-+ addMemberDesc(member, dt);
-+ dlTree.addContent(dt);
-+ Content dd = new HtmlTree(HtmlTag.DD);
-+ addComment(member, dd);
-+ dlTree.addContent(dd);
- }
-
--
- /**
-- * Print comment for each element in the index. If the element is deprecated
-+ * Add comment for each element in the index. If the element is deprecated
- * and it has a @deprecated tag, use that comment. Else if the containing
- * class for this element is deprecated, then add the word "Deprecated." at
- * the start and then print the normal comment.
- *
-- * @param element Index element.
-+ * @param element Index element
-+ * @param contentTree the content tree to which the comment will be added
- */
-- protected void printComment(ProgramElementDoc element) {
-+ protected void addComment(ProgramElementDoc element, Content contentTree) {
- Tag[] tags;
-+ Content span = HtmlTree.SPAN(HtmlStyle.strong, deprecatedPhrase);
-+ HtmlTree div = new HtmlTree(HtmlTag.DIV);
-+ div.addStyle(HtmlStyle.block);
- if (Util.isDeprecated(element)) {
-- strongText("doclet.Deprecated"); space();
-+ div.addContent(span);
- if ((tags = element.tags("deprecated")).length > 0)
-- printInlineDeprecatedComment(element, tags[0]);
-+ addInlineDeprecatedComment(element, tags[0], div);
-+ contentTree.addContent(div);
- } else {
- ClassDoc cont = element.containingClass();
- while (cont != null) {
- if (Util.isDeprecated(cont)) {
-- strongText("doclet.Deprecated"); space();
-+ div.addContent(span);
-+ contentTree.addContent(div);
- break;
- }
- cont = cont.containingClass();
- }
-- printSummaryComment(element);
-+ addSummaryComment(element, contentTree);
- }
- }
-
- /**
-- * Print description about the Static Varible/Method/Constructor for a
-+ * Add description about the Static Varible/Method/Constructor for a
- * member.
- *
-- * @param member MemberDoc for the member within the Class Kind.
-- * @see com.sun.javadoc.MemberDoc
-+ * @param member MemberDoc for the member within the Class Kind
-+ * @param contentTree the content tree to which the member description will be added
- */
-- protected void printMemberDesc(MemberDoc member) {
-+ protected void addMemberDesc(MemberDoc member, Content contentTree) {
- ClassDoc containing = member.containingClass();
-- String classdesc = Util.getTypeName(configuration, containing, true) + " " +
-- getPreQualifiedClassLink(LinkInfoImpl.CONTEXT_INDEX, containing,
-- false);
-+ String classdesc = Util.getTypeName(
-+ configuration, containing, true) + " ";
- if (member.isField()) {
- if (member.isStatic()) {
-- printText("doclet.Static_variable_in", classdesc);
-+ contentTree.addContent(
-+ getResource("doclet.Static_variable_in", classdesc));
- } else {
-- printText("doclet.Variable_in", classdesc);
-+ contentTree.addContent(
-+ getResource("doclet.Variable_in", classdesc));
- }
- } else if (member.isConstructor()) {
-- printText("doclet.Constructor_for", classdesc);
-+ contentTree.addContent(
-+ getResource("doclet.Constructor_for", classdesc));
- } else if (member.isMethod()) {
- if (member.isStatic()) {
-- printText("doclet.Static_method_in", classdesc);
-+ contentTree.addContent(
-+ getResource("doclet.Static_method_in", classdesc));
- } else {
-- printText("doclet.Method_in", classdesc);
-+ contentTree.addContent(
-+ getResource("doclet.Method_in", classdesc));
- }
- }
-+ addPreQualifiedClassLink(LinkInfoImpl.CONTEXT_INDEX, containing,
-+ false, contentTree);
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java
-@@ -25,10 +25,11 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.util.*;
- import java.lang.reflect.Modifier;
--import java.util.*;
--
- import com.sun.javadoc.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-+import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
- import com.sun.tools.doclets.internal.toolkit.taglets.*;
-
-@@ -60,36 +61,125 @@
-
- /*** abstracts ***/
-
-- public abstract void printSummaryLabel();
-+ /**
-+ * Add the summary label for the member.
-+ *
-+ * @param memberTree the content tree to which the label will be added
-+ */
-+ public abstract void addSummaryLabel(Content memberTree);
-
-- public abstract void printTableSummary();
-+ /**
-+ * Get the summary for the member summary table.
-+ *
-+ * @return a string for the table summary
-+ */
-+ public abstract String getTableSummary();
-
-- public abstract void printSummaryTableHeader(ProgramElementDoc member);
-+ /**
-+ * Get the caption for the member summary table.
-+ *
-+ * @return a string for the table caption
-+ */
-+ public abstract String getCaption();
-
-- public abstract void printInheritedSummaryLabel(ClassDoc cd);
-+ /**
-+ * Get the summary table header for the member.
-+ *
-+ * @param member the member to be documented
-+ * @return the summary table header
-+ */
-+ public abstract String[] getSummaryTableHeader(ProgramElementDoc member);
-
-- public abstract void printSummaryAnchor(ClassDoc cd);
-+ /**
-+ * Add inherited summary lable for the member.
-+ *
-+ * @param cd the class doc to which to link to
-+ * @param inheritedTree the content tree to which the inherited summary label will be added
-+ */
-+ public abstract void addInheritedSummaryLabel(ClassDoc cd, Content inheritedTree);
-
-- public abstract void printInheritedSummaryAnchor(ClassDoc cd);
-+ /**
-+ * Add the anchor for the summary section of the member.
-+ *
-+ * @param cd the class doc to be documented
-+ * @param memberTree the content tree to which the summary anchor will be added
-+ */
-+ public abstract void addSummaryAnchor(ClassDoc cd, Content memberTree);
-
-- protected abstract void printSummaryType(ProgramElementDoc member);
-+ /**
-+ * Add the anchor for the inherited summary section of the member.
-+ *
-+ * @param cd the class doc to be documented
-+ * @param inheritedTree the content tree to which the inherited summary anchor will be added
-+ */
-+ public abstract void addInheritedSummaryAnchor(ClassDoc cd, Content inheritedTree);
-
-- protected void writeSummaryLink(ClassDoc cd, ProgramElementDoc member) {
-- writeSummaryLink(LinkInfoImpl.CONTEXT_MEMBER, cd, member);
-+ /**
-+ * Add the summary type for the member.
-+ *
-+ * @param member the member to be documented
-+ * @param tdSummaryType the content tree to which the type will be added
-+ */
-+ protected abstract void addSummaryType(ProgramElementDoc member,
-+ Content tdSummaryType);
-+
-+ /**
-+ * Add the summary link for the member.
-+ *
-+ * @param cd the class doc to be documented
-+ * @param member the member to be documented
-+ * @param tdSummary the content tree to which the link will be added
-+ */
-+ protected void addSummaryLink(ClassDoc cd, ProgramElementDoc member,
-+ Content tdSummary) {
-+ addSummaryLink(LinkInfoImpl.CONTEXT_MEMBER, cd, member, tdSummary);
- }
-
-- protected abstract void writeSummaryLink(int context,
-- ClassDoc cd,
-- ProgramElementDoc member);
-+ /**
-+ * Add the summary link for the member.
-+ *
-+ * @param context the id of the context where the link will be printed
-+ * @param cd the class doc to be documented
-+ * @param member the member to be documented
-+ * @param tdSummary the content tree to which the summary link will be added
-+ */
-+ protected abstract void addSummaryLink(int context,
-+ ClassDoc cd, ProgramElementDoc member, Content tdSummary);
-
-- protected abstract void writeInheritedSummaryLink(ClassDoc cd,
-- ProgramElementDoc member);
-+ /**
-+ * Add the inherited summary link for the member.
-+ *
-+ * @param cd the class doc to be documented
-+ * @param member the member to be documented
-+ * @param linksTree the content tree to which the inherited summary link will be added
-+ */
-+ protected abstract void addInheritedSummaryLink(ClassDoc cd,
-+ ProgramElementDoc member, Content linksTree);
-
-- protected abstract void writeDeprecatedLink(ProgramElementDoc member);
-+ /**
-+ * Get the deprecated link.
-+ *
-+ * @param member the member being linked to
-+ * @return a content tree representing the link
-+ */
-+ protected abstract Content getDeprecatedLink(ProgramElementDoc member);
-
-- protected abstract void printNavSummaryLink(ClassDoc cd, boolean link);
-+ /**
-+ * Get the navigation summary link.
-+ *
-+ * @param cd the class doc to be documented
-+ * @param link true if its a link else the label to be printed
-+ * @return a content tree for the navigation summary link.
-+ */
-+ protected abstract Content getNavSummaryLink(ClassDoc cd, boolean link);
-
-- protected abstract void printNavDetailLink(boolean link);
-+ /**
-+ * Add the navigation detail link.
-+ *
-+ * @param link true if its a link else the label to be printed
-+ * @param liNav the content tree to which the navigation detail link will be added
-+ */
-+ protected abstract void addNavDetailLink(boolean link, Content liNav);
-
- /*** ***/
-
-@@ -109,6 +199,17 @@
- }
-
- /**
-+ * Add the member name to the content tree and modifies the display length.
-+ *
-+ * @param name the member name to be added to the content tree.
-+ * @param htmltree the content tree to which the name will be added.
-+ */
-+ protected void addName(String name, Content htmltree) {
-+ htmltree.addContent(name);
-+ writer.displayLength += name.length();
-+ }
-+
-+ /**
- * Return a string describing the access modifier flags.
- * Don't include native or synchronized.
- *
-@@ -131,18 +232,24 @@
- return type;
- }
-
-- protected void printModifiers(MemberDoc member) {
-+ /**
-+ * Add the modifier for the member.
-+ *
-+ * @param member the member for which teh modifier will be added.
-+ * @param htmltree the content tree to which the modifier information will be added.
-+ */
-+ protected void addModifiers(MemberDoc member, Content htmltree) {
- String mod = modifierString(member);
- // According to JLS, we should not be showing public modifier for
- // interface methods.
- if ((member.isField() || member.isMethod()) &&
- writer instanceof ClassWriterImpl &&
-- ((ClassWriterImpl) writer).getClassDoc().isInterface()) {
-+ ((ClassWriterImpl) writer).getClassDoc().isInterface()) {
- mod = Util.replaceText(mod, "public", "").trim();
- }
- if(mod.length() > 0) {
-- print(mod);
-- print(' ');
-+ htmltree.addContent(mod);
-+ htmltree.addContent(writer.getSpace());
- }
- }
-
-@@ -158,66 +265,43 @@
- }
-
- /**
-- * Print 'static' if static and type link.
-+ * Add the modifier and type for the member in the member summary.
-+ *
-+ * @param member the member to add the type for
-+ * @param type the type to add
-+ * @param tdSummaryType the content tree to which the modified and type will be added
- */
-- protected void printStaticAndType(boolean isStatic, Type type) {
-- writer.printTypeSummaryHeader();
-- if (isStatic) {
-- print("static");
-- }
-- writer.space();
-- if (type != null) {
-- writer.printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER,
-- type));
-- }
-- writer.printTypeSummaryFooter();
-- }
--
-- /**
-- * Print the modifier and type for the member in the member summary.
-- *
-- * @param member the member to print the type for.
-- * @param type the type to print.
-- */
-- protected void printModifierAndType(ProgramElementDoc member, Type type) {
-- writer.printTypeSummaryHeader();
-- printModifier(member);
-+ protected void addModifierAndType(ProgramElementDoc member, Type type,
-+ Content tdSummaryType) {
-+ HtmlTree code = new HtmlTree(HtmlTag.CODE);
-+ addModifier(member, code);
- if (type == null) {
-- writer.space();
- if (member.isClass()) {
-- print("class");
-+ code.addContent("class");
- } else {
-- print("interface");
-+ code.addContent("interface");
- }
-+ code.addContent(writer.getSpace());
- } else {
- if (member instanceof ExecutableMemberDoc &&
- ((ExecutableMemberDoc) member).typeParameters().length > 0) {
- //Code to avoid ugly wrapping in member summary table.
-- writer.table(0,0,0);
-- writer.trAlignVAlign("right", "");
-- writer.tdNowrap();
-- writer.font("-1");
-- writer.code();
-- int displayLength = ((AbstractExecutableMemberWriter) this).
-- writeTypeParameters((ExecutableMemberDoc) member);
-+ int displayLength = ((AbstractExecutableMemberWriter) this).addTypeParameters(
-+ (ExecutableMemberDoc) member, code);
- if (displayLength > 10) {
-- writer.br();
-+ code.addContent(new HtmlTree(HtmlTag.BR));
- }
-- writer.printLink(new LinkInfoImpl(
-- LinkInfoImpl.CONTEXT_SUMMARY_RETURN_TYPE, type));
-- writer.codeEnd();
-- writer.fontEnd();
-- writer.tdEnd();
-- writer.trEnd();
-- writer.tableEnd();
-+ code.addContent(new RawHtml(
-+ writer.getLink(new LinkInfoImpl(
-+ LinkInfoImpl.CONTEXT_SUMMARY_RETURN_TYPE, type))));
- } else {
-- writer.space();
-- writer.printLink(new LinkInfoImpl(
-- LinkInfoImpl.CONTEXT_SUMMARY_RETURN_TYPE, type));
-+ code.addContent(new RawHtml(
-+ writer.getLink(new LinkInfoImpl(
-+ LinkInfoImpl.CONTEXT_SUMMARY_RETURN_TYPE, type))));
- }
-
- }
-- writer.printTypeSummaryFooter();
-+ tdSummaryType.addContent(code);
- }
-
- private void printModifier(ProgramElementDoc member) {
-@@ -238,25 +322,53 @@
- }
-
- /**
-- * Print the deprecated output for the given member.
-+ * Add the modifier for the member.
-+ *
-+ * @param member the member to add the type for
-+ * @param code the content tree to which the modified will be added
-+ */
-+ private void addModifier(ProgramElementDoc member, Content code) {
-+ if (member.isProtected()) {
-+ code.addContent("protected ");
-+ } else if (member.isPrivate()) {
-+ code.addContent("private ");
-+ } else if (!member.isPublic()) { // Package private
-+ code.addContent(configuration().getText("doclet.Package_private"));
-+ code.addContent(" ");
-+ }
-+ if (member.isMethod() && ((MethodDoc)member).isAbstract()) {
-+ code.addContent("abstract ");
-+ }
-+ if (member.isStatic()) {
-+ code.addContent("static ");
-+ }
-+ }
-+
-+ /**
-+ * Add the deprecated information for the given member.
- *
- * @param member the member being documented.
-+ * @param contentTree the content tree to which the deprecated information will be added.
- */
-- protected void printDeprecated(ProgramElementDoc member) {
-+ protected void addDeprecatedInfo(ProgramElementDoc member, Content contentTree) {
- String output = (new DeprecatedTaglet()).getTagletOutput(member,
- writer.getTagletWriterInstance(false)).toString().trim();
- if (!output.isEmpty()) {
-- writer.printMemberDetailsListStartTag();
-- writer.print(output);
-+ Content deprecatedContent = new RawHtml(output);
-+ Content div = HtmlTree.DIV(HtmlStyle.block, deprecatedContent);
-+ contentTree.addContent(div);
- }
- }
-
-- protected void printComment(ProgramElementDoc member) {
-+ /**
-+ * Add the comment for the given member.
-+ *
-+ * @param member the member being documented.
-+ * @param contentTree the content tree to which the comment will be added.
-+ */
-+ protected void addComment(ProgramElementDoc member, Content htmltree) {
- if (member.inlineTags().length > 0) {
-- writer.printMemberDetailsListStartTag();
-- writer.dd();
-- writer.printInlineComment(member);
-- writer.ddEnd();
-+ writer.addInlineComment(member, htmltree);
- }
- }
-
-@@ -264,67 +376,19 @@
- return member.name();
- }
-
-- protected void printHead(MemberDoc member) {
-- writer.h3();
-- writer.print(member.name());
-- writer.h3End();
-- }
--
-- protected void printFullComment(ProgramElementDoc member) {
-- if(configuration().nocomment){
-- return;
-- }
-- writer.dl();
-- print(((TagletOutputImpl)
-- (new DeprecatedTaglet()).getTagletOutput(member,
-- writer.getTagletWriterInstance(false))).toString());
-- printCommentAndTags(member);
-- writer.dlEnd();
-- }
--
-- protected void printCommentAndTags(ProgramElementDoc member) {
-- printComment(member);
-- writer.printTags(member);
-+ /**
-+ * Get the header for the section.
-+ *
-+ * @param member the member being documented.
-+ * @return a header content for the section.
-+ */
-+ protected Content getHead(MemberDoc member) {
-+ Content memberContent = new RawHtml(member.name());
-+ Content heading = HtmlTree.HEADING(HtmlConstants.MEMBER_HEADING, memberContent);
-+ return heading;
- }
-
- /**
-- * Write the member footer.
-- */
-- protected void printMemberFooter() {
-- writer.printMemberDetailsListEndTag();
-- assert !writer.getMemberDetailsListPrinted();
-- }
--
-- /**
-- * Forward to containing writer
-- */
-- public void printSummaryHeader(ClassDoc cd) {
-- printedSummaryHeader = true;
-- writer.printSummaryHeader(this, cd);
-- }
--
-- /**
-- * Forward to containing writer
-- */
-- public void printInheritedSummaryHeader(ClassDoc cd) {
-- writer.printInheritedSummaryHeader(this, cd);
-- }
--
-- /**
-- * Forward to containing writer
-- */
-- public void printInheritedSummaryFooter(ClassDoc cd) {
-- writer.printInheritedSummaryFooter(this, cd);
-- }
--
-- /**
-- * Forward to containing writer
-- */
-- public void printSummaryFooter(ClassDoc cd) {
-- writer.printSummaryFooter(this, cd);
-- }
--
-- /**
- * Return true if the given <code>ProgramElement</code> is inherited
- * by the class that is being documented.
- *
-@@ -340,102 +404,134 @@
- return true;
- }
-
--
- /**
-- * Generate the code for listing the deprecated APIs. Create the table
-- * format for listing the API. Call methods from the sub-class to complete
-- * the generation.
-+ * Add deprecated information to the documentation tree
-+ *
-+ * @param deprmembers list of deprecated members
-+ * @param headingKey the caption for the deprecated members table
-+ * @param tableSummary the summary for the deprecated members table
-+ * @param tableHeader table headers for the deprecated members table
-+ * @param contentTree the content tree to which the deprecated members table will be added
- */
-- protected void printDeprecatedAPI(List<Doc> deprmembers, String headingKey, String tableSummary, String[] tableHeader) {
-+ protected void addDeprecatedAPI(List<Doc> deprmembers, String headingKey,
-+ String tableSummary, String[] tableHeader, Content contentTree) {
- if (deprmembers.size() > 0) {
-- writer.tableIndexSummary(tableSummary);
-- writer.tableCaptionStart();
-- writer.printText(headingKey);
-- writer.tableCaptionEnd();
-- writer.summaryTableHeader(tableHeader, "col");
-+ Content table = HtmlTree.TABLE(0, 3, 0, tableSummary,
-+ writer.getTableCaption(configuration().getText(headingKey)));
-+ table.addContent(writer.getSummaryTableHeader(tableHeader, "col"));
-+ Content tbody = new HtmlTree(HtmlTag.TBODY);
- for (int i = 0; i < deprmembers.size(); i++) {
- ProgramElementDoc member =(ProgramElementDoc)deprmembers.get(i);
-- writer.trBgcolorStyle("white", "TableRowColor");
-- writer.summaryRow(0);
-- writeDeprecatedLink(member);
-- writer.br();
-- writer.printNbsps();
-+ HtmlTree td = HtmlTree.TD(HtmlStyle.colOne, getDeprecatedLink(member));
- if (member.tags("deprecated").length > 0)
-- writer.printInlineDeprecatedComment(member, member.tags("deprecated")[0]);
-- writer.space();
-- writer.summaryRowEnd();
-- writer.trEnd();
-+ writer.addInlineDeprecatedComment(member,
-+ member.tags("deprecated")[0], td);
-+ HtmlTree tr = HtmlTree.TR(td);
-+ if (i%2 == 0)
-+ tr.addStyle(HtmlStyle.altColor);
-+ else
-+ tr.addStyle(HtmlStyle.rowColor);
-+ tbody.addContent(tr);
- }
-- writer.tableEnd();
-- writer.space();
-- writer.p();
-+ table.addContent(tbody);
-+ Content li = HtmlTree.LI(HtmlStyle.blockList, table);
-+ Content ul = HtmlTree.UL(HtmlStyle.blockList, li);
-+ contentTree.addContent(ul);
- }
- }
-
- /**
-- * Print use info.
-+ * Add use information to the documentation tree.
-+ *
-+ * @param mems list of program elements for which the use information will be added
-+ * @param heading the section heading
-+ * @param tableSummary the summary for the use table
-+ * @param contentTree the content tree to which the use information will be added
- */
-- protected void printUseInfo(List<? extends ProgramElementDoc> mems, String heading, String tableSummary) {
-+ protected void addUseInfo(List<? extends ProgramElementDoc> mems,
-+ String heading, String tableSummary, Content contentTree) {
- if (mems == null) {
- return;
- }
- List members = (List)mems;
- boolean printedUseTableHeader = false;
- if (members.size() > 0) {
-- writer.tableIndexSummary(tableSummary);
-- writer.tableSubCaptionStart();
-- writer.print(heading);
-- writer.tableCaptionEnd();
-- for (Iterator it = members.iterator(); it.hasNext(); ) {
-+ Content table = HtmlTree.TABLE(0, 3, 0, tableSummary,
-+ writer.getTableCaption(heading));
-+ Content tbody = new HtmlTree(HtmlTag.TBODY);
-+ Iterator<? extends ProgramElementDoc> it = members.iterator();
-+ for (int i = 0; it.hasNext(); i++) {
- ProgramElementDoc pgmdoc = (ProgramElementDoc)it.next();
- ClassDoc cd = pgmdoc.containingClass();
- if (!printedUseTableHeader) {
-- // Passing ProgramElementDoc helps decides printing
-- // interface or class header in case of nested classes.
-- this.printSummaryTableHeader(pgmdoc);
-+ table.addContent(writer.getSummaryTableHeader(
-+ this.getSummaryTableHeader(pgmdoc), "col"));
- printedUseTableHeader = true;
- }
--
-- writer.printSummaryLinkType(this, pgmdoc);
-+ HtmlTree tr = new HtmlTree(HtmlTag.TR);
-+ if (i % 2 == 0) {
-+ tr.addStyle(HtmlStyle.altColor);
-+ } else {
-+ tr.addStyle(HtmlStyle.rowColor);
-+ }
-+ HtmlTree tdFirst = new HtmlTree(HtmlTag.TD);
-+ tdFirst.addStyle(HtmlStyle.colFirst);
-+ writer.addSummaryType(this, pgmdoc, tdFirst);
-+ tr.addContent(tdFirst);
-+ HtmlTree tdLast = new HtmlTree(HtmlTag.TD);
-+ tdLast.addStyle(HtmlStyle.colLast);
- if (cd != null && !(pgmdoc instanceof ConstructorDoc)
-- && !(pgmdoc instanceof ClassDoc)) {
-- // Add class context
-- writer.strong(cd.name() + ".");
-+ && !(pgmdoc instanceof ClassDoc)) {
-+ HtmlTree name = new HtmlTree(HtmlTag.SPAN);
-+ name.addStyle(HtmlStyle.strong);
-+ name.addContent(cd.name() + ".");
-+ tdLast.addContent(name);
- }
-- writeSummaryLink(
-- pgmdoc instanceof ClassDoc ?
-- LinkInfoImpl.CONTEXT_CLASS_USE : LinkInfoImpl.CONTEXT_MEMBER,
-- cd, pgmdoc);
-- writer.printSummaryLinkComment(this, pgmdoc);
-+ addSummaryLink(pgmdoc instanceof ClassDoc ?
-+ LinkInfoImpl.CONTEXT_CLASS_USE : LinkInfoImpl.CONTEXT_MEMBER,
-+ cd, pgmdoc, tdLast);
-+ writer.addSummaryLinkComment(this, pgmdoc, tdLast);
-+ tr.addContent(tdLast);
-+ tbody.addContent(tr);
- }
-- writer.tableEnd();
-- writer.space();
-- writer.p();
-+ table.addContent(tbody);
-+ contentTree.addContent(table);
- }
- }
-
-- protected void navDetailLink(List members) {
-- printNavDetailLink(members.size() > 0? true: false);
-+ /**
-+ * Add the navigation detail link.
-+ *
-+ * @param members the members to be linked
-+ * @param liNav the content tree to which the navigation detail link will be added
-+ */
-+ protected void addNavDetailLink(List<?> members, Content liNav) {
-+ addNavDetailLink(members.size() > 0 ? true : false, liNav);
- }
-
--
-- protected void navSummaryLink(List members,
-- VisibleMemberMap visibleMemberMap) {
-+ /**
-+ * Add the navigation summary link.
-+ *
-+ * @param members members to be linked
-+ * @param visibleMemberMap the visible inherited members map
-+ * @param liNav the content tree to which the navigation summary link will be added
-+ */
-+ protected void addNavSummaryLink(List<?> members,
-+ VisibleMemberMap visibleMemberMap, Content liNav) {
- if (members.size() > 0) {
-- printNavSummaryLink(null, true);
-+ liNav.addContent(getNavSummaryLink(null, true));
- return;
-- } else {
-- ClassDoc icd = classdoc.superclass();
-- while (icd != null) {
-- List inhmembers = visibleMemberMap.getMembersFor(icd);
-- if (inhmembers.size() > 0) {
-- printNavSummaryLink(icd, true);
-- return;
-- }
-- icd = icd.superclass();
-+ }
-+ ClassDoc icd = classdoc.superclass();
-+ while (icd != null) {
-+ List<?> inhmembers = visibleMemberMap.getMembersFor(icd);
-+ if (inhmembers.size() > 0) {
-+ liNav.addContent(getNavSummaryLink(icd, true));
-+ return;
- }
-+ icd = icd.superclass();
- }
-- printNavSummaryLink(null, false);
-+ liNav.addContent(getNavSummaryLink(null, false));
- }
-
- protected void serialWarning(SourcePosition pos, String key, String a1, String a2) {
-@@ -453,12 +549,109 @@
- }
-
- /**
-- * {@inheritDoc}
-+ * Add the member summary for the given class.
-+ *
-+ * @param classDoc the class that is being documented
-+ * @param member the member being documented
-+ * @param firstSentenceTags the first sentence tags to be added to the summary
-+ * @param tableTree the content tree to which the documentation will be added
-+ * @param counter the counter for determing style for the table row
- */
-- public void writeMemberSummary(ClassDoc classDoc, ProgramElementDoc member,
-- Tag[] firstSentenceTags, boolean isFirst, boolean isLast) {
-- writer.printSummaryLinkType(this, member);
-- writeSummaryLink(classDoc, member);
-- writer.printSummaryLinkComment(this, member, firstSentenceTags);
-+ public void addMemberSummary(ClassDoc classDoc, ProgramElementDoc member,
-+ Tag[] firstSentenceTags, Content tableTree, int counter) {
-+ HtmlTree tdSummaryType = new HtmlTree(HtmlTag.TD);
-+ tdSummaryType.addStyle(HtmlStyle.colFirst);
-+ writer.addSummaryType(this, member, tdSummaryType);
-+ HtmlTree tdSummary = new HtmlTree(HtmlTag.TD);
-+ setSummaryColumnStyle(tdSummary);
-+ addSummaryLink(classDoc, member, tdSummary);
-+ writer.addSummaryLinkComment(this, member, firstSentenceTags, tdSummary);
-+ HtmlTree tr = HtmlTree.TR(tdSummaryType);
-+ tr.addContent(tdSummary);
-+ if (counter%2 == 0)
-+ tr.addStyle(HtmlStyle.altColor);
-+ else
-+ tr.addStyle(HtmlStyle.rowColor);
-+ tableTree.addContent(tr);
-+ }
-+
-+ /**
-+ * Set the style for the summary column.
-+ *
-+ * @param tdTree the column for which the style will be set
-+ */
-+ public void setSummaryColumnStyle(HtmlTree tdTree) {
-+ tdTree.addStyle(HtmlStyle.colLast);
-+ }
-+
-+ /**
-+ * Add inherited member summary for the given class and member.
-+ *
-+ * @param classDoc the class the inherited member belongs to
-+ * @param nestedClass the inherited member that is summarized
-+ * @param isFirst true if this is the first member in the list
-+ * @param isLast true if this is the last member in the list
-+ * @param linksTree the content tree to which the summary will be added
-+ */
-+ public void addInheritedMemberSummary(ClassDoc classDoc,
-+ ProgramElementDoc nestedClass, boolean isFirst, boolean isLast,
-+ Content linksTree) {
-+ writer.addInheritedMemberSummary(this, classDoc, nestedClass, isFirst,
-+ linksTree);
-+ }
-+
-+ /**
-+ * Get the inherited summary header for the given class.
-+ *
-+ * @param classDoc the class the inherited member belongs to
-+ * @return a content tree for the inherited summary header
-+ */
-+ public Content getInheritedSummaryHeader(ClassDoc classDoc) {
-+ Content inheritedTree = writer.getMemberTreeHeader();
-+ writer.addInheritedSummaryHeader(this, classDoc, inheritedTree);
-+ return inheritedTree;
-+ }
-+
-+ /**
-+ * Get the inherited summary links tree.
-+ *
-+ * @return a content tree for the inherited summary links
-+ */
-+ public Content getInheritedSummaryLinksTree() {
-+ return new HtmlTree(HtmlTag.CODE);
-+ }
-+
-+ /**
-+ * Get the summary table tree for the given class.
-+ *
-+ * @param classDoc the class for which the summary table is generated
-+ * @return a content tree for the summary table
-+ */
-+ public Content getSummaryTableTree(ClassDoc classDoc) {
-+ return writer.getSummaryTableTree(this, classDoc);
-+ }
-+
-+ /**
-+ * Get the member tree to be documented.
-+ *
-+ * @param memberTree the content tree of member to be documented
-+ * @return a content tree that will be added to the class documentation
-+ */
-+ public Content getMemberTree(Content memberTree) {
-+ return writer.getMemberTree(memberTree);
-+ }
-+
-+ /**
-+ * Get the member tree to be documented.
-+ *
-+ * @param memberTree the content tree of member to be documented
-+ * @param isLastContent true if the content to be added is the last content
-+ * @return a content tree that will be added to the class documentation
-+ */
-+ public Content getMemberTree(Content memberTree, boolean isLastContent) {
-+ if (isLastContent)
-+ return HtmlTree.UL(HtmlStyle.blockListLast, memberTree);
-+ else
-+ return HtmlTree.UL(HtmlStyle.blockList, memberTree);
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractPackageIndexWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractPackageIndexWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractPackageIndexWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractPackageIndexWriter.java
-@@ -25,9 +25,11 @@
-
- package com.sun.tools.doclets.formats.html;
-
--import com.sun.javadoc.*;
- import java.io.*;
- import java.util.*;
-+import com.sun.javadoc.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-+import com.sun.tools.doclets.internal.toolkit.*;
-
- /**
- * Abstract class to generate the overview files in
-@@ -56,105 +58,127 @@
- packages = configuration.packages;
- }
-
-- protected abstract void printNavigationBarHeader();
--
-- protected abstract void printNavigationBarFooter();
--
-- protected abstract void printOverviewHeader();
--
-- protected abstract void printIndexHeader(String text, String tableSummary);
--
-- protected abstract void printIndexRow(PackageDoc pkg);
--
-- protected abstract void printIndexFooter();
-+ /**
-+ * Adds the navigation bar header to the documentation tree.
-+ *
-+ * @param body the document tree to which the navigation bar header will be added
-+ */
-+ protected abstract void addNavigationBarHeader(Content body);
-
- /**
-- * Generate the contants in the package index file. Call appropriate
-+ * Adds the navigation bar footer to the documentation tree.
-+ *
-+ * @param body the document tree to which the navigation bar footer will be added
-+ */
-+ protected abstract void addNavigationBarFooter(Content body);
-+
-+ /**
-+ * Adds the overview header to the documentation tree.
-+ *
-+ * @param body the document tree to which the overview header will be added
-+ */
-+ protected abstract void addOverviewHeader(Content body);
-+
-+ /**
-+ * Adds the packages list to the documentation tree.
-+ *
-+ * @param packages an array of packagedoc objects
-+ * @param text caption for the table
-+ * @param tableSummary summary for the table
-+ * @param body the document tree to which the packages list will be added
-+ */
-+ protected abstract void addPackagesList(PackageDoc[] packages, String text,
-+ String tableSummary, Content body);
-+
-+ /**
-+ * Generate and prints the contents in the package index file. Call appropriate
- * methods from the sub-class in order to generate Frame or Non
- * Frame format.
-+ *
- * @param title the title of the window.
- * @param includeScript boolean set true if windowtitle script is to be included
- */
-- protected void generatePackageIndexFile(String title, boolean includeScript) throws IOException {
-+ protected void buildPackageIndexFile(String title, boolean includeScript) throws IOException {
- String windowOverview = configuration.getText(title);
-- printHtmlHeader(windowOverview,
-- configuration.metakeywords.getOverviewMetaKeywords(title,
-- configuration.doctitle),
-- includeScript);
-- printNavigationBarHeader();
-- printOverviewHeader();
--
-- generateIndex();
--
-- printOverview();
--
-- printNavigationBarFooter();
-- printBodyHtmlEnd();
-+ Content body = getBody(includeScript, getWindowTitle(windowOverview));
-+ addNavigationBarHeader(body);
-+ addOverviewHeader(body);
-+ addIndex(body);
-+ addOverview(body);
-+ addNavigationBarFooter(body);
-+ printHtmlDocument(configuration.metakeywords.getOverviewMetaKeywords(title,
-+ configuration.doctitle), includeScript, body);
- }
-
- /**
-- * Default to no overview, overwrite to add overview.
-+ * Default to no overview, override to add overview.
-+ *
-+ * @param body the document tree to which the overview will be added
- */
-- protected void printOverview() throws IOException {
-+ protected void addOverview(Content body) throws IOException {
- }
-
- /**
-- * Generate the frame or non-frame package index.
-+ * Adds the frame or non-frame package index to the documentation tree.
-+ *
-+ * @param body the document tree to which the index will be added
- */
-- protected void generateIndex() {
-- printIndexContents(packages, "doclet.Package_Summary",
-+ protected void addIndex(Content body) {
-+ addIndexContents(packages, "doclet.Package_Summary",
- configuration.getText("doclet.Member_Table_Summary",
- configuration.getText("doclet.Package_Summary"),
-- configuration.getText("doclet.packages")));
-+ configuration.getText("doclet.packages")), body);
- }
-
- /**
-- * Generate code for package index contents. Call appropriate methods from
-- * the sub-classes.
-+ * Adds package index contents. Call appropriate methods from
-+ * the sub-classes. Adds it to the body HtmlTree
- *
-- * @param packages Array of packages to be documented.
-- * @param text String which will be used as the heading.
-+ * @param packages array of packages to be documented
-+ * @param text string which will be used as the heading
-+ * @param tableSummary summary for the table
-+ * @param body the document tree to which the index contents will be added
- */
-- protected void printIndexContents(PackageDoc[] packages, String text, String tableSummary) {
-+ protected void addIndexContents(PackageDoc[] packages, String text,
-+ String tableSummary, Content body) {
- if (packages.length > 0) {
- Arrays.sort(packages);
-- printIndexHeader(text, tableSummary);
-- printAllClassesPackagesLink();
-- for(int i = 0; i < packages.length; i++) {
-- if (packages[i] != null) {
-- printIndexRow(packages[i]);
-- }
-- }
-- printIndexFooter();
-+ addAllClassesLink(body);
-+ addPackagesList(packages, text, tableSummary, body);
- }
- }
-
- /**
-- * Print the doctitle, if it is specified on the command line.
-+ * Adds the doctitle to the documentation tree, if it is specified on the command line.
-+ *
-+ * @param body the document tree to which the title will be added
- */
-- protected void printConfigurationTitle() {
-+ protected void addConfigurationTitle(Content body) {
- if (configuration.doctitle.length() > 0) {
-- center();
-- h1(configuration.doctitle);
-- centerEnd();
-+ Content title = new RawHtml(configuration.doctitle);
-+ Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING,
-+ HtmlStyle.title, title);
-+ Content div = HtmlTree.DIV(HtmlStyle.header, heading);
-+ body.addContent(div);
- }
- }
-
- /**
-- * Highlight "Overview" in the strong format, in the navigation bar as this
-- * is the overview page.
-+ * Returns highlighted "Overview", in the navigation bar as this is the
-+ * overview page.
-+ *
-+ * @return a Content object to be added to the documentation tree
- */
-- protected void navLinkContents() {
-- navCellRevStart();
-- fontStyle("NavBarFont1Rev");
-- strongText("doclet.Overview");
-- fontEnd();
-- navCellEnd();
-+ protected Content getNavLinkContents() {
-+ Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, overviewLabel);
-+ return li;
- }
-
- /**
- * Do nothing. This will be overridden in PackageIndexFrameWriter.
-+ *
-+ * @param body the document tree to which the all classes link will be added
- */
-- protected void printAllClassesPackagesLink() {
-+ protected void addAllClassesLink(Content body) {
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractTreeWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractTreeWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractTreeWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractTreeWriter.java
-@@ -25,11 +25,12 @@
-
- package com.sun.tools.doclets.formats.html;
-
--import com.sun.tools.doclets.internal.toolkit.util.*;
--
--import com.sun.javadoc.*;
- import java.io.*;
- import java.util.*;
-+import com.sun.tools.doclets.internal.toolkit.util.*;
-+import com.sun.tools.doclets.internal.toolkit.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-+import com.sun.javadoc.*;
-
- /**
- * Abstract class to print the class hierarchy page for all the Classes. This
-@@ -46,6 +47,8 @@
- */
- protected final ClassTree classtree;
-
-+ private static final String LI_CIRCLE = "circle";
-+
- /**
- * Constructor initilises classtree variable. This constructor will be used
- * while generating global tree file "overview-tree.html".
-@@ -87,55 +90,64 @@
- }
-
- /**
-- * Generate each level of the class tree. For each sub-class or
-+ * Add each level of the class tree. For each sub-class or
- * sub-interface indents the next level information.
-- * Recurses itself to generate subclasses info.
-- * To iterate is human, to recurse is divine - L. Peter Deutsch.
-+ * Recurses itself to add subclasses info.
- *
-- * @param parent the superclass or superinterface of the list.
-- * @param list list of the sub-classes at this level.
-- * @param isEnum true if we are generating a tree for enums.
-+ * @param parent the superclass or superinterface of the list
-+ * @param list list of the sub-classes at this level
-+ * @param isEnum true if we are generating a tree for enums
-+ * @param contentTree the content tree to which the level information will be added
- */
-- protected void generateLevelInfo(ClassDoc parent, List list,
-- boolean isEnum) {
-- if (list.size() > 0) {
-- ul();
-- for (int i = 0; i < list.size(); i++) {
-+ protected void addLevelInfo(ClassDoc parent, List<ClassDoc> list,
-+ boolean isEnum, Content contentTree) {
-+ int size = list.size();
-+ if (size > 0) {
-+ Content ul = new HtmlTree(HtmlTag.UL);
-+ for (int i = 0; i < size; i++) {
- ClassDoc local = (ClassDoc)list.get(i);
-- printPartialInfo(local);
-- printExtendsImplements(parent, local);
-- generateLevelInfo(local, classtree.subs(local, isEnum),
-- isEnum); // Recurse
-+ HtmlTree li = new HtmlTree(HtmlTag.LI);
-+ li.addAttr(HtmlAttr.TYPE, LI_CIRCLE);
-+ addPartialInfo(local, li);
-+ addExtendsImplements(parent, local, li);
-+ addLevelInfo(local, classtree.subs(local, isEnum),
-+ isEnum, li); // Recurse
-+ ul.addContent(li);
- }
-- ulEnd();
-+ contentTree.addContent(ul);
- }
- }
-
- /**
-- * Generate the heading for the tree depending upon tree type if it's a
-- * Class Tree or Interface tree and also print the tree.
-+ * Add the heading for the tree depending upon tree type if it's a
-+ * Class Tree or Interface tree.
- *
- * @param list List of classes which are at the most base level, all the
-- * other classes in this run will derive from these classes.
-- * @param heading Heading for the tree.
-+ * other classes in this run will derive from these classes
-+ * @param heading heading for the tree
-+ * @param div the content tree to which the tree will be added
- */
-- protected void generateTree(List list, String heading) {
-+ protected void addTree(List<ClassDoc> list, String heading, Content div) {
- if (list.size() > 0) {
- ClassDoc firstClassDoc = (ClassDoc)list.get(0);
-- printTreeHeading(heading);
-- generateLevelInfo(!firstClassDoc.isInterface()? firstClassDoc : null,
-- list,
-- list == classtree.baseEnums());
-+ Content headingContent = getResource(heading);
-+ div.addContent(HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING, true,
-+ headingContent));
-+ addLevelInfo(!firstClassDoc.isInterface()? firstClassDoc : null,
-+ list, list == classtree.baseEnums(), div);
- }
- }
-
- /**
-- * Print the information regarding the classes which this class extends or
-+ * Add information regarding the classes which this class extends or
- * implements.
- *
-- * @param cd The classdoc under consideration.
-+ * @param parent the parent class of the class being documented
-+ * @param cd the classdoc under consideration
-+ * @param contentTree the content tree to which the information will be added
- */
-- protected void printExtendsImplements(ClassDoc parent, ClassDoc cd) {
-+ protected void addExtendsImplements(ClassDoc parent, ClassDoc cd,
-+ Content contentTree) {
- ClassDoc[] interfaces = cd.interfaces();
- if (interfaces.length > (cd.isInterface()? 1 : 0)) {
- Arrays.sort(interfaces);
-@@ -148,53 +160,43 @@
- }
- if (counter == 0) {
- if (cd.isInterface()) {
-- print(" (" + configuration.getText("doclet.also") + " extends ");
-+ contentTree.addContent(" (");
-+ contentTree.addContent(getResource("doclet.also"));
-+ contentTree.addContent(" extends ");
- } else {
-- print(" (implements ");
-+ contentTree.addContent(" (implements ");
- }
- } else {
-- print(", ");
-+ contentTree.addContent(", ");
- }
-- printPreQualifiedClassLink(LinkInfoImpl.CONTEXT_TREE,
-- interfaces[i]);
-+ addPreQualifiedClassLink(LinkInfoImpl.CONTEXT_TREE,
-+ interfaces[i], contentTree);
- counter++;
- }
- }
- if (counter > 0) {
-- println(")");
-+ contentTree.addContent(")");
- }
- }
- }
-
- /**
-- * Print information about the class kind, if it's a "class" or "interface".
-+ * Add information about the class kind, if it's a "class" or "interface".
- *
-- * @param cd classdoc.
-+ * @param cd the class being documented
-+ * @param contentTree the content tree to which the information will be added
- */
-- protected void printPartialInfo(ClassDoc cd) {
-- li("circle");
-- printPreQualifiedStrongClassLink(LinkInfoImpl.CONTEXT_TREE, cd);
-+ protected void addPartialInfo(ClassDoc cd, Content contentTree) {
-+ addPreQualifiedStrongClassLink(LinkInfoImpl.CONTEXT_TREE, cd, contentTree);
- }
-
- /**
-- * Print the heading for the tree.
-+ * Get the tree label for the navigation bar.
- *
-- * @param heading Heading for the tree.
-+ * @return a content tree for the tree label
- */
-- protected void printTreeHeading(String heading) {
-- h2();
-- println(configuration.getText(heading));
-- h2End();
-- }
--
-- /**
-- * Highlight "Tree" word in the navigation bar, since this is the tree page.
-- */
-- protected void navLinkTree() {
-- navCellRevStart();
-- fontStyle("NavBarFont1Rev");
-- strongText("doclet.Tree");
-- fontEnd();
-- navCellEnd();
-+ protected Content getNavLinkTree() {
-+ Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, treeLabel);
-+ return li;
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AllClassesFrameWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/AllClassesFrameWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AllClassesFrameWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AllClassesFrameWriter.java
-@@ -25,11 +25,14 @@
-
- package com.sun.tools.doclets.formats.html;
-
--import com.sun.tools.doclets.internal.toolkit.util.*;
--import com.sun.javadoc.*;
- import java.io.*;
- import java.util.*;
-
-+import com.sun.javadoc.*;
-+import com.sun.tools.doclets.internal.toolkit.*;
-+import com.sun.tools.doclets.internal.toolkit.util.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-+
- /**
- * Generate the file with list of all the classes in this run. This page will be
- * used in the left-hand bottom frame, when "All Classes" link is clicked in
-@@ -38,6 +41,7 @@
- *
- * @author Atul M Dambalkar
- * @author Doug Kramer
-+ * @author Bhavesh Patel (Modified)
- */
- public class AllClassesFrameWriter extends HtmlDocletWriter {
-
-@@ -57,6 +61,11 @@
- protected IndexBuilder indexbuilder;
-
- /**
-+ * BR tag to be used within a document tree.
-+ */
-+ final HtmlTree BR = new HtmlTree(HtmlTag.BR);
-+
-+ /**
- * Construct AllClassesFrameWriter object. Also initilises the indexbuilder
- * variable in this class.
- * @throws IOException
-@@ -84,12 +93,12 @@
- try {
- allclassgen = new AllClassesFrameWriter(configuration,
- filename, indexbuilder);
-- allclassgen.generateAllClassesFile(true);
-+ allclassgen.buildAllClassesFile(true);
- allclassgen.close();
- filename = OUTPUT_FILE_NAME_NOFRAMES;
- allclassgen = new AllClassesFrameWriter(configuration,
- filename, indexbuilder);
-- allclassgen.generateAllClassesFile(false);
-+ allclassgen.buildAllClassesFile(false);
- allclassgen.close();
- } catch (IOException exc) {
- configuration.standardmessage.
-@@ -100,30 +109,34 @@
- }
-
- /**
-- * Print all the classes in table format in the file.
-+ * Print all the classes in the file.
- * @param wantFrames True if we want frames.
- */
-- protected void generateAllClassesFile(boolean wantFrames) throws IOException {
-+ protected void buildAllClassesFile(boolean wantFrames) throws IOException {
- String label = configuration.getText("doclet.All_Classes");
--
-- printHtmlHeader(label, null, false);
--
-- printAllClassesTableHeader();
-- printAllClasses(wantFrames);
-- printAllClassesTableFooter();
--
-- printBodyHtmlEnd();
-+ Content body = getBody(false, getWindowTitle(label));
-+ Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING,
-+ HtmlStyle.bar, allclassesLabel);
-+ body.addContent(heading);
-+ Content ul = new HtmlTree(HtmlTag.UL);
-+ // Generate the class links and add it to the tdFont tree.
-+ addAllClasses(ul, wantFrames);
-+ Content div = HtmlTree.DIV(HtmlStyle.indexContainer, ul);
-+ body.addContent(div);
-+ printHtmlDocument(null, false, body);
- }
-
- /**
-- * Use the sorted index of all the classes and print all the classes.
-+ * Use the sorted index of all the classes and add all the classes to the
-+ * content list.
- *
-+ * @param content HtmlTree content to which all classes information will be added
- * @param wantFrames True if we want frames.
- */
-- protected void printAllClasses(boolean wantFrames) {
-+ protected void addAllClasses(Content content, boolean wantFrames) {
- for (int i = 0; i < indexbuilder.elements().length; i++) {
- Character unicode = (Character)((indexbuilder.elements())[i]);
-- generateContents(indexbuilder.getMemberList(unicode), wantFrames);
-+ addContents(indexbuilder.getMemberList(unicode), wantFrames, content);
- }
- }
-
-@@ -136,46 +149,25 @@
- *
- * @param classlist Sorted list of classes.
- * @param wantFrames True if we want frames.
-+ * @param content HtmlTree content to which the links will be added
- */
-- protected void generateContents(List classlist, boolean wantFrames) {
-+ protected void addContents(List<Doc> classlist, boolean wantFrames,
-+ Content content) {
- for (int i = 0; i < classlist.size(); i++) {
- ClassDoc cd = (ClassDoc)(classlist.get(i));
- if (!Util.isCoreClass(cd)) {
- continue;
- }
- String label = italicsClassName(cd, false);
-+ Content linkContent;
- if(wantFrames){
-- printLink(new LinkInfoImpl(LinkInfoImpl.ALL_CLASSES_FRAME, cd,
-- label, "classFrame")
-- );
-+ linkContent = new RawHtml(getLink(new LinkInfoImpl(
-+ LinkInfoImpl.ALL_CLASSES_FRAME, cd, label, "classFrame")));
- } else {
-- printLink(new LinkInfoImpl(cd, label));
-+ linkContent = new RawHtml(getLink(new LinkInfoImpl(cd, label)));
- }
-- br();
-+ Content li = HtmlTree.LI(linkContent);
-+ content.addContent(li);
- }
- }
--
-- /**
-- * Print the heading "All Classes" and also print Html table tag.
-- */
-- protected void printAllClassesTableHeader() {
-- fontSizeStyle("+1", "FrameHeadingFont");
-- strongText("doclet.All_Classes");
-- fontEnd();
-- br();
-- table();
-- tr();
-- tdNowrap();
-- fontStyle("FrameItemFont");
-- }
--
-- /**
-- * Print Html closing table tag.
-- */
-- protected void printAllClassesTableFooter() {
-- fontEnd();
-- tdEnd();
-- trEnd();
-- tableEnd();
-- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java
-@@ -28,6 +28,7 @@
- import java.io.*;
-
- import com.sun.javadoc.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
- import com.sun.tools.doclets.internal.toolkit.*;
-
- /**
-@@ -54,29 +55,26 @@
- /**
- * {@inheritDoc}
- */
-- public void writeMemberSummaryHeader(ClassDoc classDoc) {
-- writer.println("<!-- =========== ANNOTATION TYPE OPTIONAL MEMBER SUMMARY =========== -->");
-- writer.println();
-- writer.printSummaryHeader(this, classDoc);
-+ public Content getMemberSummaryHeader(ClassDoc classDoc,
-+ Content memberSummaryTree) {
-+ memberSummaryTree.addContent(
-+ HtmlConstants.START_OF_ANNOTATION_TYPE_OPTIONAL_MEMBER_SUMMARY);
-+ Content memberTree = writer.getMemberTreeHeader();
-+ writer.addSummaryHeader(this, classDoc, memberTree);
-+ return memberTree;
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeDefaultValueInfo(MemberDoc member) {
-+ public void addDefaultValueInfo(MemberDoc member, Content annotationDocTree) {
- if (((AnnotationTypeElementDoc) member).defaultValue() != null) {
-- writer.printMemberDetailsListStartTag();
-- writer.dd();
-- writer.dl();
-- writer.dt();
-- writer.strong(ConfigurationImpl.getInstance().
-- getText("doclet.Default"));
-- writer.dtEnd();
-- writer.dd();
-- writer.print(((AnnotationTypeElementDoc) member).defaultValue());
-- writer.ddEnd();
-- writer.dlEnd();
-- writer.ddEnd();
-+ Content dt = HtmlTree.DT(writer.getResource("doclet.Default"));
-+ Content dl = HtmlTree.DL(dt);
-+ Content dd = HtmlTree.DD(new StringContent(
-+ ((AnnotationTypeElementDoc) member).defaultValue().toString()));
-+ dl.addContent(dd);
-+ annotationDocTree.addContent(dl);
- }
- }
-
-@@ -90,45 +88,58 @@
- /**
- * {@inheritDoc}
- */
-- public void printSummaryLabel() {
-- writer.printText("doclet.Annotation_Type_Optional_Member_Summary");
-+ public void addSummaryLabel(Content memberTree) {
-+ Content label = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING,
-+ writer.getResource("doclet.Annotation_Type_Optional_Member_Summary"));
-+ memberTree.addContent(label);
- }
-
- /**
- * {@inheritDoc}
- */
-- public void printTableSummary() {
-- writer.tableIndexSummary(configuration().getText("doclet.Member_Table_Summary",
-+ public String getTableSummary() {
-+ return configuration().getText("doclet.Member_Table_Summary",
- configuration().getText("doclet.Annotation_Type_Optional_Member_Summary"),
-- configuration().getText("doclet.annotation_type_optional_members")));
-+ configuration().getText("doclet.annotation_type_optional_members"));
- }
-
-- public void printSummaryTableHeader(ProgramElementDoc member) {
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getCaption() {
-+ return configuration().getText("doclet.Annotation_Type_Optional_Members");
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String[] getSummaryTableHeader(ProgramElementDoc member) {
- String[] header = new String[] {
- writer.getModifierTypeHeader(),
- configuration().getText("doclet.0_and_1",
- configuration().getText("doclet.Annotation_Type_Optional_Member"),
- configuration().getText("doclet.Description"))
- };
-- writer.summaryTableHeader(header, "col");
-+ return header;
- }
-
- /**
- * {@inheritDoc}
- */
-- public void printSummaryAnchor(ClassDoc cd) {
-- writer.anchor("annotation_type_optional_element_summary");
-+ public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
-+ memberTree.addContent(writer.getMarkerAnchor(
-+ "annotation_type_optional_element_summary"));
- }
-
- /**
- * {@inheritDoc}
- */
-- protected void printNavSummaryLink(ClassDoc cd, boolean link) {
-+ protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
- if (link) {
-- writer.printHyperLink("", "annotation_type_optional_element_summary",
-- configuration().getText("doclet.navAnnotationTypeOptionalMember"));
-+ return writer.getHyperLink("", "annotation_type_optional_element_summary",
-+ writer.getResource("doclet.navAnnotationTypeOptionalMember"));
- } else {
-- writer.printText("doclet.navAnnotationTypeOptionalMember");
-+ return writer.getResource("doclet.navAnnotationTypeOptionalMember");
- }
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java
-@@ -28,6 +28,7 @@
- import java.io.*;
-
- import com.sun.javadoc.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
- import com.sun.tools.doclets.internal.toolkit.*;
-
- /**
-@@ -51,122 +52,102 @@
- }
-
- /**
-- * Write the annotation type member summary header for the given class.
-- *
-- * @param classDoc the class the summary belongs to.
-+ * {@inheritDoc}
- */
-- public void writeMemberSummaryHeader(ClassDoc classDoc) {
-- writer.println("<!-- =========== ANNOTATION TYPE REQUIRED MEMBER SUMMARY =========== -->");
-- writer.println();
-- writer.printSummaryHeader(this, classDoc);
-- }
--
-- /**
-- * Write the annotation type member summary footer for the given class.
-- *
-- * @param classDoc the class the summary belongs to.
-- */
-- public void writeMemberSummaryFooter(ClassDoc classDoc) {
-- writer.printSummaryFooter(this, classDoc);
-+ public Content getMemberSummaryHeader(ClassDoc classDoc,
-+ Content memberSummaryTree) {
-+ memberSummaryTree.addContent(
-+ HtmlConstants.START_OF_ANNOTATION_TYPE_REQUIRED_MEMBER_SUMMARY);
-+ Content memberTree = writer.getMemberTreeHeader();
-+ writer.addSummaryHeader(this, classDoc, memberTree);
-+ return memberTree;
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeInheritedMemberSummaryHeader(ClassDoc classDoc) {
-- //Not appliable.
-+ public void addAnnotationDetailsTreeHeader(ClassDoc classDoc,
-+ Content memberDetailsTree) {
-+ if (!writer.printedAnnotationHeading) {
-+ memberDetailsTree.addContent(writer.getMarkerAnchor(
-+ "annotation_type_element_detail"));
-+ Content heading = HtmlTree.HEADING(HtmlConstants.DETAILS_HEADING,
-+ writer.annotationTypeDetailsLabel);
-+ memberDetailsTree.addContent(heading);
-+ writer.printedAnnotationHeading = true;
-+ }
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeInheritedMemberSummary(ClassDoc classDoc,
-- ProgramElementDoc member, boolean isFirst, boolean isLast) {
-- //Not appliable.
-+ public Content getAnnotationDocTreeHeader(MemberDoc member,
-+ Content annotationDetailsTree) {
-+ annotationDetailsTree.addContent(
-+ writer.getMarkerAnchor(member.name() +
-+ ((ExecutableMemberDoc) member).signature()));
-+ Content annotationDocTree = writer.getMemberTreeHeader();
-+ Content heading = new HtmlTree(HtmlConstants.MEMBER_HEADING);
-+ heading.addContent(member.name());
-+ annotationDocTree.addContent(heading);
-+ return annotationDocTree;
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeInheritedMemberSummaryFooter(ClassDoc classDoc) {
-- //Not appliable.
-+ public Content getSignature(MemberDoc member) {
-+ Content pre = new HtmlTree(HtmlTag.PRE);
-+ writer.addAnnotationInfo(member, pre);
-+ addModifiers(member, pre);
-+ Content link = new RawHtml(
-+ writer.getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER,
-+ getType(member))));
-+ pre.addContent(link);
-+ pre.addContent(writer.getSpace());
-+ if (configuration().linksource) {
-+ Content memberName = new StringContent(member.name());
-+ writer.addSrcLink(member, memberName, pre);
-+ } else {
-+ addName(member.name(), pre);
-+ }
-+ return pre;
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeHeader(ClassDoc classDoc, String header) {
-- writer.println();
-- writer.println("<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->");
-- writer.println();
-- writer.anchor("annotation_type_element_detail");
-- writer.printTableHeadingBackground(header);
-- writer.println();
-+ public void addDeprecated(MemberDoc member, Content annotationDocTree) {
-+ addDeprecatedInfo(member, annotationDocTree);
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeMemberHeader(MemberDoc member, boolean isFirst) {
-- if (! isFirst) {
-- writer.printMemberHeader();
-- writer.println("");
-- }
-- writer.anchor(member.name() + ((ExecutableMemberDoc) member).signature());
-- writer.h3();
-- writer.print(member.name());
-- writer.h3End();
-+ public void addComments(MemberDoc member, Content annotationDocTree) {
-+ addComment(member, annotationDocTree);
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeSignature(MemberDoc member) {
-- writer.pre();
-- writer.writeAnnotationInfo(member);
-- printModifiers(member);
-- writer.printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER,
-- getType(member)));
-- print(' ');
-- if (configuration().linksource) {
-- writer.printSrcLink(member, member.name());
-- } else {
-- strong(member.name());
-- }
-- writer.preEnd();
-- assert !writer.getMemberDetailsListPrinted();
-+ public void addTags(MemberDoc member, Content annotationDocTree) {
-+ writer.addTagsInfo(member, annotationDocTree);
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeComments(MemberDoc member) {
-- printComment(member);
-+ public Content getAnnotationDetails(Content annotationDetailsTree) {
-+ return getMemberTree(annotationDetailsTree);
- }
-
- /**
-- * Write the tag output for the given member.
-- *
-- * @param member the member being documented.
-+ * {@inheritDoc}
- */
-- public void writeTags(MemberDoc member) {
-- writer.printTags(member);
-- }
--
-- /**
-- * Write the annotation type member footer.
-- */
-- public void writeMemberFooter() {
-- printMemberFooter();
-- }
--
-- /**
-- * Write the footer for the annotation type member documentation.
-- *
-- * @param classDoc the class that the annotation type member belong to.
-- */
-- public void writeFooter(ClassDoc classDoc) {
-- //No footer to write for annotation type member documentation
-+ public Content getAnnotationDoc(Content annotationDocTree,
-+ boolean isLastContent) {
-+ return getMemberTree(annotationDocTree, isLastContent);
- }
-
- /**
-@@ -179,113 +160,120 @@
- /**
- * {@inheritDoc}
- */
-- public void printSummaryLabel() {
-- writer.printText("doclet.Annotation_Type_Required_Member_Summary");
-+ public void addSummaryLabel(Content memberTree) {
-+ Content label = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING,
-+ writer.getResource("doclet.Annotation_Type_Required_Member_Summary"));
-+ memberTree.addContent(label);
- }
-
- /**
- * {@inheritDoc}
- */
-- public void printTableSummary() {
-- writer.tableIndexSummary(configuration().getText("doclet.Member_Table_Summary",
-+ public String getTableSummary() {
-+ return configuration().getText("doclet.Member_Table_Summary",
- configuration().getText("doclet.Annotation_Type_Required_Member_Summary"),
-- configuration().getText("doclet.annotation_type_required_members")));
-+ configuration().getText("doclet.annotation_type_required_members"));
- }
-
-- public void printSummaryTableHeader(ProgramElementDoc member) {
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getCaption() {
-+ return configuration().getText("doclet.Annotation_Type_Required_Members");
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String[] getSummaryTableHeader(ProgramElementDoc member) {
- String[] header = new String[] {
- writer.getModifierTypeHeader(),
- configuration().getText("doclet.0_and_1",
- configuration().getText("doclet.Annotation_Type_Required_Member"),
- configuration().getText("doclet.Description"))
- };
-- writer.summaryTableHeader(header, "col");
-+ return header;
- }
-
- /**
- * {@inheritDoc}
- */
-- public void printSummaryAnchor(ClassDoc cd) {
-- writer.anchor("annotation_type_required_element_summary");
-+ public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
-+ memberTree.addContent(writer.getMarkerAnchor(
-+ "annotation_type_required_element_summary"));
- }
-
- /**
- * {@inheritDoc}
- */
-- public void printInheritedSummaryAnchor(ClassDoc cd) {
-- } // no such
--
-- /**
-- * {@inheritDoc}
-- */
-- public void printInheritedSummaryLabel(ClassDoc cd) {
-- // no such
-+ public void addInheritedSummaryAnchor(ClassDoc cd, Content inheritedTree) {
- }
-
- /**
- * {@inheritDoc}
- */
-- protected void writeSummaryLink(int context, ClassDoc cd, ProgramElementDoc member) {
-- writer.strong();
-- writer.printDocLink(context, (MemberDoc) member, member.name(), false);
-- writer.strongEnd();
-+ public void addInheritedSummaryLabel(ClassDoc cd, Content inheritedTree) {
- }
-
- /**
- * {@inheritDoc}
- */
-- protected void writeInheritedSummaryLink(ClassDoc cd,
-- ProgramElementDoc member) {
-+ protected void addSummaryLink(int context, ClassDoc cd, ProgramElementDoc member,
-+ Content tdSummary) {
-+ Content strong = HtmlTree.STRONG(new RawHtml(
-+ writer.getDocLink(context, (MemberDoc) member, member.name(), false)));
-+ Content code = HtmlTree.CODE(strong);
-+ tdSummary.addContent(code);
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected void addInheritedSummaryLink(ClassDoc cd,
-+ ProgramElementDoc member, Content linksTree) {
- //Not applicable.
- }
-
- /**
- * {@inheritDoc}
- */
-- protected void printSummaryType(ProgramElementDoc member) {
-+ protected void addSummaryType(ProgramElementDoc member, Content tdSummaryType) {
- MemberDoc m = (MemberDoc)member;
-- printModifierAndType(m, getType(m));
-+ addModifierAndType(m, getType(m), tdSummaryType);
- }
-
- /**
- * {@inheritDoc}
- */
-- protected void writeDeprecatedLink(ProgramElementDoc member) {
-- writer.printDocLink(LinkInfoImpl.CONTEXT_MEMBER,
-- (MemberDoc) member, ((MemberDoc)member).qualifiedName(), false);
-+ protected Content getDeprecatedLink(ProgramElementDoc member) {
-+ return writer.getDocLink(LinkInfoImpl.CONTEXT_MEMBER,
-+ (MemberDoc) member, ((MemberDoc)member).qualifiedName());
- }
-
- /**
- * {@inheritDoc}
- */
-- protected void printNavSummaryLink(ClassDoc cd, boolean link) {
-+ protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
- if (link) {
-- writer.printHyperLink("", "annotation_type_required_element_summary",
-- configuration().getText("doclet.navAnnotationTypeRequiredMember"));
-+ return writer.getHyperLink("", "annotation_type_required_element_summary",
-+ writer.getResource("doclet.navAnnotationTypeRequiredMember"));
- } else {
-- writer.printText("doclet.navAnnotationTypeRequiredMember");
-+ return writer.getResource("doclet.navAnnotationTypeRequiredMember");
- }
- }
-
- /**
- * {@inheritDoc}
- */
-- protected void printNavDetailLink(boolean link) {
-+ protected void addNavDetailLink(boolean link, Content liNav) {
- if (link) {
-- writer.printHyperLink("", "annotation_type_element_detail",
-- configuration().getText("doclet.navAnnotationTypeMember"));
-+ liNav.addContent(writer.getHyperLink("", "annotation_type_element_detail",
-+ writer.getResource("doclet.navAnnotationTypeMember")));
- } else {
-- writer.printText("doclet.navAnnotationTypeMember");
-+ liNav.addContent(writer.getResource("doclet.navAnnotationTypeMember"));
- }
- }
-
-- /**
-- * {@inheritDoc}
-- */
-- public void writeDeprecated(MemberDoc member) {
-- printDeprecated(member);
-- }
--
- private Type getType(MemberDoc member) {
- if (member instanceof FieldDoc) {
- return ((FieldDoc) member).type();
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java
-@@ -29,6 +29,7 @@
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
- import com.sun.tools.doclets.internal.toolkit.builders.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-
- /**
- * Generate the Class Information Page.
-@@ -40,6 +41,7 @@
- *
- * @author Atul M Dambalkar
- * @author Robert Field
-+ * @author Bhavesh Patel (Modified)
- */
- public class AnnotationTypeWriterImpl extends SubWriterHolderWriter
- implements AnnotationTypeWriter {
-@@ -69,126 +71,168 @@
- }
-
- /**
-- * Print this package link
-+ * Get this package link.
-+ *
-+ * @return a content tree for the package link
- */
-- protected void navLinkPackage() {
-- navCellStart();
-- printHyperLink("package-summary.html", "",
-- configuration.getText("doclet.Package"), true, "NavBarFont1");
-- navCellEnd();
-+ protected Content getNavLinkPackage() {
-+ Content linkContent = getHyperLink("package-summary.html", "",
-+ packageLabel);
-+ Content li = HtmlTree.LI(linkContent);
-+ return li;
- }
-
- /**
-- * Print class page indicator
-+ * Get the class link.
-+ *
-+ * @return a content tree for the class link
- */
-- protected void navLinkClass() {
-- navCellRevStart();
-- fontStyle("NavBarFont1Rev");
-- strongText("doclet.Class");
-- fontEnd();
-- navCellEnd();
-+ protected Content getNavLinkClass() {
-+ Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, classLabel);
-+ return li;
- }
-
- /**
-- * Print class use link
-+ * Get the class use link.
-+ *
-+ * @return a content tree for the class use link
- */
-- protected void navLinkClassUse() {
-- navCellStart();
-- printHyperLink("class-use/" + filename, "",
-- configuration.getText("doclet.navClassUse"), true, "NavBarFont1");
-- navCellEnd();
-+ protected Content getNavLinkClassUse() {
-+ Content linkContent = getHyperLink("class-use/" + filename, "", useLabel);
-+ Content li = HtmlTree.LI(linkContent);
-+ return li;
- }
-
- /**
-- * Print previous package link
-+ * Get link to previous class.
-+ *
-+ * @return a content tree for the previous class link
- */
-- protected void navLinkPrevious() {
-- if (prev == null) {
-- printText("doclet.Prev_Class");
-- } else {
-- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS,
-- prev.asClassDoc(), "",
-- configuration.getText("doclet.Prev_Class"), true));
-+ public Content getNavLinkPrevious() {
-+ Content li;
-+ if (prev != null) {
-+ Content prevLink = new RawHtml(getLink(new LinkInfoImpl(
-+ LinkInfoImpl.CONTEXT_CLASS, prev.asClassDoc(), "",
-+ configuration.getText("doclet.Prev_Class"), true)));
-+ li = HtmlTree.LI(prevLink);
- }
-+ else
-+ li = HtmlTree.LI(prevclassLabel);
-+ return li;
- }
-
- /**
-- * Print next package link
-+ * Get link to next class.
-+ *
-+ * @return a content tree for the next class link
- */
-- protected void navLinkNext() {
-- if (next == null) {
-- printText("doclet.Next_Class");
-- } else {
-- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS,
-- next.asClassDoc(), "",
-- configuration.getText("doclet.Next_Class"), true));
-+ public Content getNavLinkNext() {
-+ Content li;
-+ if (next != null) {
-+ Content nextLink = new RawHtml(getLink(new LinkInfoImpl(
-+ LinkInfoImpl.CONTEXT_CLASS, next.asClassDoc(), "",
-+ configuration.getText("doclet.Next_Class"), true)));
-+ li = HtmlTree.LI(nextLink);
- }
-+ else
-+ li = HtmlTree.LI(nextclassLabel);
-+ return li;
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeHeader(String header) {
--
-+ public Content getHeader(String header) {
- String pkgname = (annotationType.containingPackage() != null)?
- annotationType.containingPackage().name(): "";
- String clname = annotationType.name();
--
-- printHtmlHeader(clname,
-- configuration.metakeywords.getMetaKeywords(annotationType), true);
-- printTop();
-- navLinks(true);
-- hr();
-- println("<!-- ======== START OF CLASS DATA ======== -->");
-- h2();
-+ Content bodyTree = getBody(true, getWindowTitle(clname));
-+ addTop(bodyTree);
-+ addNavLinks(true, bodyTree);
-+ bodyTree.addContent(HtmlConstants.START_OF_CLASS_DATA);
-+ HtmlTree div = new HtmlTree(HtmlTag.DIV);
-+ div.addStyle(HtmlStyle.header);
- if (pkgname.length() > 0) {
-- font("-1"); print(pkgname); fontEnd(); br();
-+ Content pkgNameContent = new StringContent(pkgname);
-+ Content pkgNamePara = HtmlTree.P(HtmlStyle.subTitle, pkgNameContent);
-+ div.addContent(pkgNamePara);
- }
-- print(header + getTypeParameterLinks(new LinkInfoImpl(
-- LinkInfoImpl.CONTEXT_CLASS_HEADER,
-- annotationType, false)));
-- h2End();
-+ LinkInfoImpl linkInfo = new LinkInfoImpl(
-+ LinkInfoImpl.CONTEXT_CLASS_HEADER, annotationType, false);
-+ Content headerContent = new StringContent(header);
-+ Content heading = HtmlTree.HEADING(HtmlConstants.CLASS_PAGE_HEADING, true,
-+ HtmlStyle.title, headerContent);
-+ heading.addContent(new RawHtml(getTypeParameterLinks(linkInfo)));
-+ div.addContent(heading);
-+ bodyTree.addContent(div);
-+ return bodyTree;
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeFooter() {
-- println("<!-- ========= END OF CLASS DATA ========= -->");
-- hr();
-- navLinks(false);
-- printBottom();
-- printBodyHtmlEnd();
-+ public Content getAnnotationContentHeader() {
-+ return getContentHeader();
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeAnnotationTypeSignature(String modifiers) {
-- preNoNewLine();
-- writeAnnotationInfo(annotationType);
-- print(modifiers);
-- String name = annotationType.name() +
-- getTypeParameterLinks(new LinkInfoImpl(
-- LinkInfoImpl.CONTEXT_CLASS_SIGNATURE, annotationType, false));
-- if (configuration().linksource) {
-- printSrcLink(annotationType, name);
-- } else {
-- strong(name);
-- }
-- preEnd();
-- p();
-+ public void addFooter(Content contentTree) {
-+ contentTree.addContent(HtmlConstants.END_OF_CLASS_DATA);
-+ addNavLinks(false, contentTree);
-+ addBottom(contentTree);
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeAnnotationTypeDescription() {
-+ public void printDocument(Content contentTree) {
-+ printHtmlDocument(configuration.metakeywords.getMetaKeywords(annotationType),
-+ true, contentTree);
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public Content getAnnotationInfoTreeHeader() {
-+ return getMemberTreeHeader();
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public Content getAnnotationInfo(Content annotationInfoTree) {
-+ return getMemberTree(HtmlStyle.description, annotationInfoTree);
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addAnnotationTypeSignature(String modifiers, Content annotationInfoTree) {
-+ annotationInfoTree.addContent(new HtmlTree(HtmlTag.BR));
-+ Content pre = new HtmlTree(HtmlTag.PRE);
-+ addAnnotationInfo(annotationType, pre);
-+ pre.addContent(modifiers);
-+ LinkInfoImpl linkInfo = new LinkInfoImpl(
-+ LinkInfoImpl.CONTEXT_CLASS_SIGNATURE, annotationType, false);
-+ Content name = new RawHtml (annotationType.name() +
-+ getTypeParameterLinks(linkInfo));
-+ if (configuration().linksource) {
-+ addSrcLink(annotationType, name, pre);
-+ } else {
-+ pre.addContent(HtmlTree.STRONG(name));
-+ }
-+ annotationInfoTree.addContent(pre);
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addAnnotationTypeDescription(Content annotationInfoTree) {
- if(!configuration.nocomment) {
-- // generate documentation for the class.
- if (annotationType.inlineTags().length > 0) {
-- printInlineComment(annotationType);
-- p();
-+ addInlineComment(annotationType, annotationInfoTree);
- }
- }
- }
-@@ -196,148 +240,152 @@
- /**
- * {@inheritDoc}
- */
-- public void writeAnnotationTypeTagInfo() {
-- boolean needHr = annotationType.elements().length > 0;
-+ public void addAnnotationTypeTagInfo(Content annotationInfoTree) {
- if(!configuration.nocomment) {
-- // Print Information about all the tags here
-- printTags(annotationType);
-- if (needHr) {
-- hr();
-- }
-- p();
-- } else if (needHr) {
-- hr();
-+ addTagsInfo(annotationType, annotationInfoTree);
- }
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeAnnotationTypeDeprecationInfo() {
-- hr();
-+ public void addAnnotationTypeDeprecationInfo(Content annotationInfoTree) {
-+ Content hr = new HtmlTree(HtmlTag.HR);
-+ annotationInfoTree.addContent(hr);
- Tag[] deprs = annotationType.tags("deprecated");
- if (Util.isDeprecated(annotationType)) {
-- strongText("doclet.Deprecated");
-+ Content strong = HtmlTree.STRONG(deprecatedPhrase);
-+ Content div = HtmlTree.DIV(HtmlStyle.block, strong);
- if (deprs.length > 0) {
- Tag[] commentTags = deprs[0].inlineTags();
- if (commentTags.length > 0) {
--
-- space();
-- printInlineDeprecatedComment(annotationType, deprs[0]);
-+ div.addContent(getSpace());
-+ addInlineDeprecatedComment(annotationType, deprs[0], div);
- }
- }
-- p();
-+ annotationInfoTree.addContent(div);
- }
- }
-
-- protected void navLinkTree() {
-- navCellStart();
-- printHyperLink("package-tree.html", "",
-- configuration.getText("doclet.Tree"), true, "NavBarFont1");
-- navCellEnd();
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addAnnotationDetailsMarker(Content memberDetails) {
-+ memberDetails.addContent(HtmlConstants.START_OF_ANNOTATION_TYPE_DETAILS);
- }
-
-- protected void printSummaryDetailLinks() {
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected Content getNavLinkTree() {
-+ Content treeLinkContent = getHyperLink("package-tree.html",
-+ "", treeLabel, "", "");
-+ Content li = HtmlTree.LI(treeLinkContent);
-+ return li;
-+ }
-+
-+ /**
-+ * Add summary details to the navigation bar.
-+ *
-+ * @param subDiv the content tree to which the summary detail links will be added
-+ */
-+ protected void addSummaryDetailLinks(Content subDiv) {
- try {
-- tr();
-- tdVAlignClass("top", "NavBarCell3");
-- font("-2");
-- print(" ");
-- navSummaryLinks();
-- fontEnd();
-- tdEnd();
--
-- tdVAlignClass("top", "NavBarCell3");
-- font("-2");
-- navDetailLinks();
-- fontEnd();
-- tdEnd();
-- trEnd();
-+ Content div = HtmlTree.DIV(getNavSummaryLinks());
-+ div.addContent(getNavDetailLinks());
-+ subDiv.addContent(div);
- } catch (Exception e) {
- e.printStackTrace();
- throw new DocletAbortException();
- }
- }
-
-- protected void navSummaryLinks() throws Exception {
-- printText("doclet.Summary");
-- space();
-+ /**
-+ * Get summary links for navigation bar.
-+ *
-+ * @return the content tree for the navigation summary links
-+ */
-+ protected Content getNavSummaryLinks() throws Exception {
-+ Content li = HtmlTree.LI(summaryLabel);
-+ li.addContent(getSpace());
-+ Content ulNav = HtmlTree.UL(HtmlStyle.subNavList, li);
- MemberSummaryBuilder memberSummaryBuilder = (MemberSummaryBuilder)
-- configuration.getBuilderFactory().getMemberSummaryBuilder(this);
-- writeNavSummaryLink(memberSummaryBuilder,
-- "doclet.navAnnotationTypeRequiredMember",
-- VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED);
-- navGap();
-- writeNavSummaryLink(memberSummaryBuilder,
-- "doclet.navAnnotationTypeOptionalMember",
-- VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL);
-+ configuration.getBuilderFactory().getMemberSummaryBuilder(this);
-+ Content liNavReq = new HtmlTree(HtmlTag.LI);
-+ addNavSummaryLink(memberSummaryBuilder,
-+ "doclet.navAnnotationTypeRequiredMember",
-+ VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED, liNavReq);
-+ addNavGap(liNavReq);
-+ ulNav.addContent(liNavReq);
-+ Content liNavOpt = new HtmlTree(HtmlTag.LI);
-+ addNavSummaryLink(memberSummaryBuilder,
-+ "doclet.navAnnotationTypeOptionalMember",
-+ VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL, liNavOpt);
-+ ulNav.addContent(liNavOpt);
-+ return ulNav;
- }
-
-- private void writeNavSummaryLink(MemberSummaryBuilder builder,
-- String label, int type) {
-+ /**
-+ * Add the navigation summary link.
-+ *
-+ * @param builder builder for the member to be documented
-+ * @param label the label for the navigation
-+ * @param type type to be documented
-+ * @param liNav the content tree to which the navigation summary link will be added
-+ */
-+ protected void addNavSummaryLink(MemberSummaryBuilder builder,
-+ String label, int type, Content liNav) {
- AbstractMemberWriter writer = ((AbstractMemberWriter) builder.
-- getMemberSummaryWriter(type));
-+ getMemberSummaryWriter(type));
- if (writer == null) {
-- printText(label);
-+ liNav.addContent(getResource(label));
- } else {
-- writer.printNavSummaryLink(null,
-- ! builder.getVisibleMemberMap(type).noVisibleMembers());
-+ liNav.addContent(writer.getNavSummaryLink(null,
-+ ! builder.getVisibleMemberMap(type).noVisibleMembers()));
- }
- }
-
- /**
-- * Method navDetailLinks
-+ * Get detail links for the navigation bar.
- *
-- * @throws Exception
-- *
-+ * @return the content tree for the detail links
- */
-- protected void navDetailLinks() throws Exception {
-- printText("doclet.Detail");
-- space();
-+ protected Content getNavDetailLinks() throws Exception {
-+ Content li = HtmlTree.LI(detailLabel);
-+ li.addContent(getSpace());
-+ Content ulNav = HtmlTree.UL(HtmlStyle.subNavList, li);
- MemberSummaryBuilder memberSummaryBuilder = (MemberSummaryBuilder)
-- configuration.getBuilderFactory().getMemberSummaryBuilder(this);
-+ configuration.getBuilderFactory().getMemberSummaryBuilder(this);
- AbstractMemberWriter writerOptional =
-- ((AbstractMemberWriter) memberSummaryBuilder.
-+ ((AbstractMemberWriter) memberSummaryBuilder.
- getMemberSummaryWriter(VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL));
- AbstractMemberWriter writerRequired =
-- ((AbstractMemberWriter) memberSummaryBuilder.
-+ ((AbstractMemberWriter) memberSummaryBuilder.
- getMemberSummaryWriter(VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED));
- if (writerOptional != null){
-- writerOptional.printNavDetailLink(annotationType.elements().length > 0);
-+ Content liNavOpt = new HtmlTree(HtmlTag.LI);
-+ writerOptional.addNavDetailLink(annotationType.elements().length > 0, liNavOpt);
-+ ulNav.addContent(liNavOpt);
- } else if (writerRequired != null){
-- writerRequired.printNavDetailLink(annotationType.elements().length > 0);
-+ Content liNavReq = new HtmlTree(HtmlTag.LI);
-+ writerRequired.addNavDetailLink(annotationType.elements().length > 0, liNavReq);
-+ ulNav.addContent(liNavReq);
- } else {
-- printText("doclet.navAnnotationTypeMember");
-+ Content liNav = HtmlTree.LI(getResource("doclet.navAnnotationTypeMember"));
-+ ulNav.addContent(liNav);
- }
-- }
--
-- protected void navGap() {
-- space();
-- print('|');
-- space();
-+ return ulNav;
- }
-
- /**
-- * If this is an inner class or interface, write the enclosing class or
-- * interface.
-+ * Add gap between navigation bar elements.
-+ *
-+ * @param liNav the content tree to which the gap will be added
- */
-- public void writeNestedClassInfo() {
-- ClassDoc outerClass = annotationType.containingClass();
-- if (outerClass != null) {
-- dl();
-- dt();
-- if (annotationType.isInterface()) {
-- strongText("doclet.Enclosing_Interface");
-- } else {
-- strongText("doclet.Enclosing_Class");
-- }
-- dtEnd();
-- dd();
-- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS, outerClass,
-- false));
-- ddEnd();
-- dlEnd();
-- }
-+ protected void addNavGap(Content liNav) {
-+ liNav.addContent(getSpace());
-+ liNav.addContent("|");
-+ liNav.addContent(getSpace());
- }
-
- /**
-@@ -346,11 +394,4 @@
- public AnnotationTypeDoc getAnnotationTypeDoc() {
- return annotationType;
- }
--
-- /**
-- * {@inheritDoc}
-- */
-- public void completeMemberSummaryBuild() {
-- p();
-- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java
-@@ -25,10 +25,12 @@
-
- package com.sun.tools.doclets.formats.html;
-
--import com.sun.tools.doclets.internal.toolkit.util.*;
--import com.sun.javadoc.*;
- import java.io.*;
- import java.util.*;
-+import com.sun.javadoc.*;
-+import com.sun.tools.doclets.internal.toolkit.util.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-+import com.sun.tools.doclets.internal.toolkit.*;
-
- /**
- * Generate class usage information.
-@@ -207,257 +209,301 @@
- }
-
- /**
-- * Print the class use list.
-+ * Generate the class use list.
- */
- protected void generateClassUseFile() throws IOException {
--
-- printClassUseHeader();
--
-+ Content body = getClassUseHeader();
-+ HtmlTree div = new HtmlTree(HtmlTag.DIV);
-+ div.addStyle(HtmlStyle.classUseContainer);
- if (pkgSet.size() > 0) {
-- generateClassUse();
-+ addClassUse(div);
- } else {
-- printText("doclet.ClassUse_No.usage.of.0",
-- classdoc.qualifiedName());
-- p();
-+ div.addContent(getResource("doclet.ClassUse_No.usage.of.0",
-+ classdoc.qualifiedName()));
- }
--
-- printClassUseFooter();
-- }
--
-- protected void generateClassUse() throws IOException {
-- if (configuration.packages.length > 1) {
-- generatePackageList();
-- generatePackageAnnotationList();
-- }
-- generateClassList();
-- }
--
-- protected void generatePackageList() throws IOException {
-- tableIndexSummary(useTableSummary);
-- tableCaptionStart();
-- printText("doclet.ClassUse_Packages.that.use.0",
-- getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS_USE_HEADER, classdoc,
-- false)));
-- tableCaptionEnd();
-- summaryTableHeader(packageTableHeader, "col");
--
-- for (Iterator it = pkgSet.iterator(); it.hasNext();) {
-- PackageDoc pkg = (PackageDoc)it.next();
-- generatePackageUse(pkg);
-- }
-- tableEnd();
-- space();
-- p();
-- }
--
-- protected void generatePackageAnnotationList() throws IOException {
-- if ((! classdoc.isAnnotationType()) ||
-- pkgToPackageAnnotations == null ||
-- pkgToPackageAnnotations.size() == 0)
-- return;
-- tableIndexSummary(useTableSummary);
-- tableCaptionStart();
-- printText("doclet.ClassUse_PackageAnnotation",
-- getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS_USE_HEADER, classdoc,
-- false)));
-- tableCaptionEnd();
-- summaryTableHeader(packageTableHeader, "col");
-- for (Iterator it = pkgToPackageAnnotations.iterator(); it.hasNext();) {
-- PackageDoc pkg = (PackageDoc)it.next();
-- trBgcolorStyle("white", "TableRowColor");
-- summaryRow(0);
-- //Just want an anchor here.
-- printPackageLink(pkg, pkg.name(), true);
-- summaryRowEnd();
-- summaryRow(0);
-- printSummaryComment(pkg);
-- space();
-- summaryRowEnd();
-- trEnd();
-- }
-- tableEnd();
-- space();
-- p();
-- }
--
-- protected void generateClassList() throws IOException {
-- for (Iterator it = pkgSet.iterator(); it.hasNext();) {
-- PackageDoc pkg = (PackageDoc)it.next();
-- anchor(pkg.name());
-- tableIndexSummary();
-- tableHeaderStart("#CCCCFF");
-- printText("doclet.ClassUse_Uses.of.0.in.1",
-- getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS_USE_HEADER,
-- classdoc, false)),
-- getPackageLink(pkg, Util.getPackageName(pkg), false));
-- tableHeaderEnd();
-- tableEnd();
-- space();
-- p();
-- generateClassUse(pkg);
-- }
-+ body.addContent(div);
-+ addNavLinks(false, body);
-+ addBottom(body);
-+ printHtmlDocument(null, true, body);
- }
-
- /**
-- * Print the package use list.
-+ * Add the class use documentation.
-+ *
-+ * @param contentTree the content tree to which the class use information will be added
- */
-- protected void generatePackageUse(PackageDoc pkg) throws IOException {
-- trBgcolorStyle("white", "TableRowColor");
-- summaryRow(0);
-- //Just want an anchor here.
-- printHyperLink("", pkg.name(), Util.getPackageName(pkg), true);
-- summaryRowEnd();
-- summaryRow(0);
-- printSummaryComment(pkg);
-- space();
-- summaryRowEnd();
-- trEnd();
-+ protected void addClassUse(Content contentTree) throws IOException {
-+ HtmlTree ul = new HtmlTree(HtmlTag.UL);
-+ ul.addStyle(HtmlStyle.blockList);
-+ if (configuration.packages.length > 1) {
-+ addPackageList(ul);
-+ addPackageAnnotationList(ul);
-+ }
-+ addClassList(ul);
-+ contentTree.addContent(ul);
- }
-
- /**
-- * Print the class use list.
-+ * Add the packages list that use the given class.
-+ *
-+ * @param contentTree the content tree to which the packages list will be added
- */
-- protected void generateClassUse(PackageDoc pkg) throws IOException {
-- String classLink = getLink(new LinkInfoImpl(
-- LinkInfoImpl.CONTEXT_CLASS_USE_HEADER, classdoc, false));
-- String pkgLink = getPackageLink(pkg, Util.getPackageName(pkg), false);
-- classSubWriter.printUseInfo(pkgToClassAnnotations.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_Annotation", classLink,
-- pkgLink), classUseTableSummary);
-- classSubWriter.printUseInfo(pkgToClassTypeParameter.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_TypeParameter", classLink,
-- pkgLink), classUseTableSummary);
-- classSubWriter.printUseInfo(pkgToSubclass.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_Subclass", classLink,
-- pkgLink), subclassUseTableSummary);
-- classSubWriter.printUseInfo(pkgToSubinterface.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_Subinterface", classLink,
-- pkgLink), subinterfaceUseTableSummary);
-- classSubWriter.printUseInfo(pkgToImplementingClass.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_ImplementingClass", classLink,
-- pkgLink), classUseTableSummary);
-- fieldSubWriter.printUseInfo(pkgToField.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_Field", classLink,
-- pkgLink), fieldUseTableSummary);
-- fieldSubWriter.printUseInfo(pkgToFieldAnnotations.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_FieldAnnotations", classLink,
-- pkgLink), fieldUseTableSummary);
-- fieldSubWriter.printUseInfo(pkgToFieldTypeParameter.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_FieldTypeParameter", classLink,
-- pkgLink), fieldUseTableSummary);
-- methodSubWriter.printUseInfo(pkgToMethodAnnotations.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_MethodAnnotations", classLink,
-- pkgLink), methodUseTableSummary);
-- methodSubWriter.printUseInfo(pkgToMethodParameterAnnotations.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_MethodParameterAnnotations", classLink,
-- pkgLink), methodUseTableSummary);
-- methodSubWriter.printUseInfo(pkgToMethodTypeParameter.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_MethodTypeParameter", classLink,
-- pkgLink), methodUseTableSummary);
-- methodSubWriter.printUseInfo(pkgToMethodReturn.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_MethodReturn", classLink,
-- pkgLink), methodUseTableSummary);
-- methodSubWriter.printUseInfo(pkgToMethodReturnTypeParameter.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_MethodReturnTypeParameter", classLink,
-- pkgLink), methodUseTableSummary);
-- methodSubWriter.printUseInfo(pkgToMethodArgs.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_MethodArgs", classLink,
-- pkgLink), methodUseTableSummary);
-- methodSubWriter.printUseInfo(pkgToMethodArgTypeParameter.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_MethodArgsTypeParameters", classLink,
-- pkgLink), methodUseTableSummary);
-- methodSubWriter.printUseInfo(pkgToMethodThrows.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_MethodThrows", classLink,
-- pkgLink), methodUseTableSummary);
-- constrSubWriter.printUseInfo(pkgToConstructorAnnotations.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_ConstructorAnnotations", classLink,
-- pkgLink), constructorUseTableSummary);
-- constrSubWriter.printUseInfo(pkgToConstructorParameterAnnotations.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_ConstructorParameterAnnotations", classLink,
-- pkgLink), constructorUseTableSummary);
-- constrSubWriter.printUseInfo(pkgToConstructorArgs.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_ConstructorArgs", classLink,
-- pkgLink), constructorUseTableSummary);
-- constrSubWriter.printUseInfo(pkgToConstructorArgTypeParameter.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_ConstructorArgsTypeParameters", classLink,
-- pkgLink), constructorUseTableSummary);
-- constrSubWriter.printUseInfo(pkgToConstructorThrows.get(pkg.name()),
-- configuration.getText("doclet.ClassUse_ConstructorThrows", classLink,
-- pkgLink), constructorUseTableSummary);
-+ protected void addPackageList(Content contentTree) throws IOException {
-+ Content table = HtmlTree.TABLE(0, 3, 0, useTableSummary,
-+ getTableCaption(configuration().getText(
-+ "doclet.ClassUse_Packages.that.use.0",
-+ getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS_USE_HEADER, classdoc,
-+ false)))));
-+ table.addContent(getSummaryTableHeader(packageTableHeader, "col"));
-+ Content tbody = new HtmlTree(HtmlTag.TBODY);
-+ Iterator<PackageDoc> it = pkgSet.iterator();
-+ for (int i = 0; it.hasNext(); i++) {
-+ PackageDoc pkg = it.next();
-+ HtmlTree tr = new HtmlTree(HtmlTag.TR);
-+ if (i % 2 == 0) {
-+ tr.addStyle(HtmlStyle.altColor);
-+ } else {
-+ tr.addStyle(HtmlStyle.rowColor);
-+ }
-+ addPackageUse(pkg, tr);
-+ tbody.addContent(tr);
-+ }
-+ table.addContent(tbody);
-+ Content li = HtmlTree.LI(HtmlStyle.blockList, table);
-+ contentTree.addContent(li);
- }
-
- /**
-- * Print the header for the class use Listing.
-+ * Add the package annotation list.
-+ *
-+ * @param contentTree the content tree to which the package annotation list will be added
- */
-- protected void printClassUseHeader() {
-- String cltype = configuration.getText(classdoc.isInterface()?
-- "doclet.Interface":
-- "doclet.Class");
-- String clname = classdoc.qualifiedName();
-- printHtmlHeader(configuration.getText("doclet.Window_ClassUse_Header",
-- cltype, clname), null, true);
-- printTop();
-- navLinks(true);
-- hr();
-- center();
-- h2();
-- strongText("doclet.ClassUse_Title", cltype, clname);
-- h2End();
-- centerEnd();
-+ protected void addPackageAnnotationList(Content contentTree) throws IOException {
-+ if ((!classdoc.isAnnotationType()) ||
-+ pkgToPackageAnnotations == null ||
-+ pkgToPackageAnnotations.size() == 0) {
-+ return;
-+ }
-+ Content table = HtmlTree.TABLE(0, 3, 0, useTableSummary,
-+ getTableCaption(configuration().getText(
-+ "doclet.ClassUse_PackageAnnotation",
-+ getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS_USE_HEADER, classdoc,
-+ false)))));
-+ table.addContent(getSummaryTableHeader(packageTableHeader, "col"));
-+ Content tbody = new HtmlTree(HtmlTag.TBODY);
-+ Iterator<PackageDoc> it = pkgToPackageAnnotations.iterator();
-+ for (int i = 0; it.hasNext(); i++) {
-+ PackageDoc pkg = it.next();
-+ HtmlTree tr = new HtmlTree(HtmlTag.TR);
-+ if (i % 2 == 0) {
-+ tr.addStyle(HtmlStyle.altColor);
-+ } else {
-+ tr.addStyle(HtmlStyle.rowColor);
-+ }
-+ Content tdFirst = HtmlTree.TD(HtmlStyle.colFirst,
-+ getPackageLink(pkg, new StringContent(pkg.name())));
-+ tr.addContent(tdFirst);
-+ HtmlTree tdLast = new HtmlTree(HtmlTag.TD);
-+ tdLast.addStyle(HtmlStyle.colLast);
-+ if (pkg != null) {
-+ addSummaryComment(pkg, tdLast);
-+ } else {
-+ tdLast.addContent(getSpace());
-+ }
-+ tr.addContent(tdLast);
-+ tbody.addContent(tr);
-+ }
-+ table.addContent(tbody);
-+ Content li = HtmlTree.LI(HtmlStyle.blockList, table);
-+ contentTree.addContent(li);
- }
-
- /**
-- * Print the footer for the class use Listing.
-+ * Add the class list that use the given class.
-+ *
-+ * @param contentTree the content tree to which the class list will be added
- */
-- protected void printClassUseFooter() {
-- hr();
-- navLinks(false);
-- printBottom();
-- printBodyHtmlEnd();
-- }
--
--
-- /**
-- * Print this package link
-- */
-- protected void navLinkPackage() {
-- navCellStart();
-- printHyperLink("../package-summary.html", "",
-- configuration.getText("doclet.Package"), true, "NavBarFont1");
-- navCellEnd();
-+ protected void addClassList(Content contentTree) throws IOException {
-+ HtmlTree ul = new HtmlTree(HtmlTag.UL);
-+ ul.addStyle(HtmlStyle.blockList);
-+ for (Iterator<PackageDoc> it = pkgSet.iterator(); it.hasNext();) {
-+ PackageDoc pkg = it.next();
-+ Content li = HtmlTree.LI(HtmlStyle.blockList, getMarkerAnchor(pkg.name()));
-+ Content link = new RawHtml(
-+ configuration.getText("doclet.ClassUse_Uses.of.0.in.1",
-+ getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS_USE_HEADER,
-+ classdoc, false)),
-+ getPackageLinkString(pkg, Util.getPackageName(pkg), false)));
-+ Content heading = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING, link);
-+ li.addContent(heading);
-+ addClassUse(pkg, li);
-+ ul.addContent(li);
-+ }
-+ Content li = HtmlTree.LI(HtmlStyle.blockList, ul);
-+ contentTree.addContent(li);
- }
-
- /**
-- * Print class page indicator
-+ * Add the package use information.
-+ *
-+ * @param pkg the package that uses the given class
-+ * @param contentTree the content tree to which the package use information will be added
- */
-- protected void navLinkClass() {
-- navCellStart();
-- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS_USE_HEADER, classdoc, "",
-- configuration.getText("doclet.Class"), true, "NavBarFont1"));
-- navCellEnd();
-+ protected void addPackageUse(PackageDoc pkg, Content contentTree) throws IOException {
-+ Content tdFirst = HtmlTree.TD(HtmlStyle.colFirst,
-+ getHyperLink("", pkg.name(), new StringContent(Util.getPackageName(pkg))));
-+ contentTree.addContent(tdFirst);
-+ HtmlTree tdLast = new HtmlTree(HtmlTag.TD);
-+ tdLast.addStyle(HtmlStyle.colLast);
-+ if (pkg != null)
-+ addSummaryComment(pkg, tdLast);
-+ else
-+ tdLast.addContent(getSpace());
-+ contentTree.addContent(tdLast);
- }
-
- /**
-- * Print class use link
-+ * Add the class use information.
-+ *
-+ * @param pkg the package that uses the given class
-+ * @param contentTree the content tree to which the class use information will be added
- */
-- protected void navLinkClassUse() {
-- navCellRevStart();
-- fontStyle("NavBarFont1Rev");
-- strongText("doclet.navClassUse");
-- fontEnd();
-- navCellEnd();
-+ protected void addClassUse(PackageDoc pkg, Content contentTree) throws IOException {
-+ String classLink = getLink(new LinkInfoImpl(
-+ LinkInfoImpl.CONTEXT_CLASS_USE_HEADER, classdoc, false));
-+ String pkgLink = getPackageLinkString(pkg, Util.getPackageName(pkg), false);
-+ classSubWriter.addUseInfo(pkgToClassAnnotations.get(pkg.name()),
-+ configuration.getText("doclet.ClassUse_Annotation", classLink,
-+ pkgLink), classUseTableSummary, contentTree);
-+ classSubWriter.addUseInfo(pkgToClassTypeParameter.get(pkg.name()),
-+ configuration.getText("doclet.ClassUse_TypeParameter", classLink,
-+ pkgLink), classUseTableSummary, contentTree);
-+ classSubWriter.addUseInfo(pkgToSubclass.get(pkg.name()),
-+ configuration.getText("doclet.ClassUse_Subclass", classLink,
-+ pkgLink), subclassUseTableSummary, contentTree);
-+ classSubWriter.addUseInfo(pkgToSubinterface.get(pkg.name()),
-+ configuration.getText("doclet.ClassUse_Subinterface", classLink,
-+ pkgLink), subinterfaceUseTableSummary, contentTree);
-+ classSubWriter.addUseInfo(pkgToImplementingClass.get(pkg.name()),
-+ configuration.getText("doclet.ClassUse_ImplementingClass", classLink,
-+ pkgLink), classUseTableSummary, contentTree);
-+ fieldSubWriter.addUseInfo(pkgToField.get(pkg.name()),
-+ configuration.getText("doclet.ClassUse_Field", classLink,
-+ pkgLink), fieldUseTableSummary, contentTree);
-+ fieldSubWriter.addUseInfo(pkgToFieldAnnotations.get(pkg.name()),
-+ configuration.getText("doclet.ClassUse_FieldAnnotations", classLink,
-+ pkgLink), fieldUseTableSummary, contentTree);
-+ fieldSubWriter.addUseInfo(pkgToFieldTypeParameter.get(pkg.name()),
-+ configuration.getText("doclet.ClassUse_FieldTypeParameter", classLink,
-+ pkgLink), fieldUseTableSummary, contentTree);
-+ methodSubWriter.addUseInfo(pkgToMethodAnnotations.get(pkg.name()),
-+ configuration.getText("doclet.ClassUse_MethodAnnotations", classLink,
-+ pkgLink), methodUseTableSummary, contentTree);
-+ methodSubWriter.addUseInfo(pkgToMethodParameterAnnotations.get(pkg.name()),
-+ configuration.getText("doclet.ClassUse_MethodParameterAnnotations", classLink,
-+ pkgLink), methodUseTableSummary, contentTree);
-+ methodSubWriter.addUseInfo(pkgToMethodTypeParameter.get(pkg.name()),
-+ configuration.getText("doclet.ClassUse_MethodTypeParameter", classLink,
-+ pkgLink), methodUseTableSummary, contentTree);
-+ methodSubWriter.addUseInfo(pkgToMethodReturn.get(pkg.name()),
-+ configuration.getText("doclet.ClassUse_MethodReturn", classLink,
-+ pkgLink), methodUseTableSummary, contentTree);
-+ methodSubWriter.addUseInfo(pkgToMethodReturnTypeParameter.get(pkg.name()),
-+ configuration.getText("doclet.ClassUse_MethodReturnTypeParameter", classLink,
-+ pkgLink), methodUseTableSummary, contentTree);
-+ methodSubWriter.addUseInfo(pkgToMethodArgs.get(pkg.name()),
-+ configuration.getText("doclet.ClassUse_MethodArgs", classLink,
-+ pkgLink), methodUseTableSummary, contentTree);
-+ methodSubWriter.addUseInfo(pkgToMethodArgTypeParameter.get(pkg.name()),
-+ configuration.getText("doclet.ClassUse_MethodArgsTypeParameters", classLink,
-+ pkgLink), methodUseTableSummary, contentTree);
-+ methodSubWriter.addUseInfo(pkgToMethodThrows.get(pkg.name()),
-+ configuration.getText("doclet.ClassUse_MethodThrows", classLink,
-+ pkgLink), methodUseTableSummary, contentTree);
-+ constrSubWriter.addUseInfo(pkgToConstructorAnnotations.get(pkg.name()),
-+ configuration.getText("doclet.ClassUse_ConstructorAnnotations", classLink,
-+ pkgLink), constructorUseTableSummary, contentTree);
-+ constrSubWriter.addUseInfo(pkgToConstructorParameterAnnotations.get(pkg.name()),
-+ configuration.getText("doclet.ClassUse_ConstructorParameterAnnotations", classLink,
-+ pkgLink), constructorUseTableSummary, contentTree);
-+ constrSubWriter.addUseInfo(pkgToConstructorArgs.get(pkg.name()),
-+ configuration.getText("doclet.ClassUse_ConstructorArgs", classLink,
-+ pkgLink), constructorUseTableSummary, contentTree);
-+ constrSubWriter.addUseInfo(pkgToConstructorArgTypeParameter.get(pkg.name()),
-+ configuration.getText("doclet.ClassUse_ConstructorArgsTypeParameters", classLink,
-+ pkgLink), constructorUseTableSummary, contentTree);
-+ constrSubWriter.addUseInfo(pkgToConstructorThrows.get(pkg.name()),
-+ configuration.getText("doclet.ClassUse_ConstructorThrows", classLink,
-+ pkgLink), constructorUseTableSummary, contentTree);
- }
-
-- protected void navLinkTree() {
-- navCellStart();
-- if (classdoc.containingPackage().isIncluded()) {
-- printHyperLink("../package-tree.html", "",
-- configuration.getText("doclet.Tree"), true, "NavBarFont1");
-- } else {
-- printHyperLink(relativePath + "overview-tree.html", "",
-- configuration.getText("doclet.Tree"), true, "NavBarFont1");
-- }
-- navCellEnd();
-+ /**
-+ * Get the header for the class use Listing.
-+ *
-+ * @return a content tree representing the class use header
-+ */
-+ protected Content getClassUseHeader() {
-+ String cltype = configuration.getText(classdoc.isInterface()?
-+ "doclet.Interface":"doclet.Class");
-+ String clname = classdoc.qualifiedName();
-+ String title = configuration.getText("doclet.Window_ClassUse_Header",
-+ cltype, clname);
-+ Content bodyTree = getBody(true, getWindowTitle(title));
-+ addTop(bodyTree);
-+ addNavLinks(true, bodyTree);
-+ Content headContent = getResource("doclet.ClassUse_Title", cltype, clname);
-+ Content heading = HtmlTree.HEADING(HtmlConstants.CLASS_PAGE_HEADING,
-+ true, HtmlStyle.title, headContent);
-+ Content div = HtmlTree.DIV(HtmlStyle.header, heading);
-+ bodyTree.addContent(div);
-+ return bodyTree;
- }
-
-+ /**
-+ * Get this package link.
-+ *
-+ * @return a content tree for the package link
-+ */
-+ protected Content getNavLinkPackage() {
-+ Content linkContent = getHyperLink("../package-summary.html", "",
-+ packageLabel);
-+ Content li = HtmlTree.LI(linkContent);
-+ return li;
-+ }
-+
-+ /**
-+ * Get class page link.
-+ *
-+ * @return a content tree for the class page link
-+ */
-+ protected Content getNavLinkClass() {
-+ Content linkContent = new RawHtml(getLink(new LinkInfoImpl(
-+ LinkInfoImpl.CONTEXT_CLASS_USE_HEADER, classdoc, "",
-+ configuration.getText("doclet.Class"), false)));
-+ Content li = HtmlTree.LI(linkContent);
-+ return li;
-+ }
-+
-+ /**
-+ * Get the use link.
-+ *
-+ * @return a content tree for the use link
-+ */
-+ protected Content getNavLinkClassUse() {
-+ Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, useLabel);
-+ return li;
-+ }
-+
-+ /**
-+ * Get the tree link.
-+ *
-+ * @return a content tree for the tree link
-+ */
-+ protected Content getNavLinkTree() {
-+ Content linkContent = classdoc.containingPackage().isIncluded() ?
-+ getHyperLink("../package-tree.html", "", treeLabel) :
-+ getHyperLink(relativePath + "overview-tree.html", "", treeLabel);
-+ Content li = HtmlTree.LI(linkContent);
-+ return li;
-+ }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java
-@@ -32,6 +32,7 @@
- import com.sun.tools.doclets.internal.toolkit.util.*;
- import com.sun.tools.doclets.internal.toolkit.builders.*;
- import com.sun.tools.doclets.internal.toolkit.taglets.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-
- /**
- * Generate the Class Information Page.
-@@ -43,6 +44,7 @@
- *
- * @author Atul M Dambalkar
- * @author Robert Field
-+ * @author Bhavesh Patel (Modified)
- */
- public class ClassWriterImpl extends SubWriterHolderWriter
- implements ClassWriter {
-@@ -76,124 +78,173 @@
- }
-
- /**
-- * Print this package link
-+ * Get this package link.
-+ *
-+ * @return a content tree for the package link
- */
-- protected void navLinkPackage() {
-- navCellStart();
-- printHyperLink("package-summary.html", "",
-- configuration.getText("doclet.Package"), true, "NavBarFont1");
-- navCellEnd();
-+ protected Content getNavLinkPackage() {
-+ Content linkContent = getHyperLink("package-summary.html", "",
-+ packageLabel);
-+ Content li = HtmlTree.LI(linkContent);
-+ return li;
- }
-
- /**
-- * Print class page indicator
-+ * Get the class link.
-+ *
-+ * @return a content tree for the class link
- */
-- protected void navLinkClass() {
-- navCellRevStart();
-- fontStyle("NavBarFont1Rev");
-- strongText("doclet.Class");
-- fontEnd();
-- navCellEnd();
-+ protected Content getNavLinkClass() {
-+ Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, classLabel);
-+ return li;
- }
-
- /**
-- * Print class use link
-+ * Get the class use link.
-+ *
-+ * @return a content tree for the class use link
- */
-- protected void navLinkClassUse() {
-- navCellStart();
-- printHyperLink("class-use/" + filename, "",
-- configuration.getText("doclet.navClassUse"), true, "NavBarFont1");
-- navCellEnd();
-+ protected Content getNavLinkClassUse() {
-+ Content linkContent = getHyperLink("class-use/" + filename, "", useLabel);
-+ Content li = HtmlTree.LI(linkContent);
-+ return li;
- }
-
- /**
-- * Print previous package link
-+ * Get link to previous class.
-+ *
-+ * @return a content tree for the previous class link
- */
-- protected void navLinkPrevious() {
-- if (prev == null) {
-- printText("doclet.Prev_Class");
-- } else {
-- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS, prev, "",
-- configuration.getText("doclet.Prev_Class"), true));
-+ public Content getNavLinkPrevious() {
-+ Content li;
-+ if (prev != null) {
-+ Content prevLink = new RawHtml(getLink(new LinkInfoImpl(
-+ LinkInfoImpl.CONTEXT_CLASS, prev, "",
-+ configuration.getText("doclet.Prev_Class"), true)));
-+ li = HtmlTree.LI(prevLink);
- }
-+ else
-+ li = HtmlTree.LI(prevclassLabel);
-+ return li;
- }
-
- /**
-- * Print next package link
-+ * Get link to next class.
-+ *
-+ * @return a content tree for the next class link
- */
-- protected void navLinkNext() {
-- if (next == null) {
-- printText("doclet.Next_Class");
-- } else {
-- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS, next, "",
-- configuration.getText("doclet.Next_Class"), true));
-+ public Content getNavLinkNext() {
-+ Content li;
-+ if (next != null) {
-+ Content nextLink = new RawHtml(getLink(new LinkInfoImpl(
-+ LinkInfoImpl.CONTEXT_CLASS, next, "",
-+ configuration.getText("doclet.Next_Class"), true)));
-+ li = HtmlTree.LI(nextLink);
- }
-+ else
-+ li = HtmlTree.LI(nextclassLabel);
-+ return li;
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeHeader(String header) {
-+ public Content getHeader(String header) {
- String pkgname = (classDoc.containingPackage() != null)?
- classDoc.containingPackage().name(): "";
- String clname = classDoc.name();
-- printHtmlHeader(clname,
-- configuration.metakeywords.getMetaKeywords(classDoc), true);
-- printTop();
-- navLinks(true);
-- hr();
-- println("<!-- ======== START OF CLASS DATA ======== -->");
-- h2();
-+ Content bodyTree = getBody(true, getWindowTitle(clname));
-+ addTop(bodyTree);
-+ addNavLinks(true, bodyTree);
-+ bodyTree.addContent(HtmlConstants.START_OF_CLASS_DATA);
-+ HtmlTree div = new HtmlTree(HtmlTag.DIV);
-+ div.addStyle(HtmlStyle.header);
- if (pkgname.length() > 0) {
-- font("-1"); print(pkgname); fontEnd(); br();
-+ Content pkgNameContent = new StringContent(pkgname);
-+ Content pkgNamePara = HtmlTree.P(HtmlStyle.subTitle, pkgNameContent);
-+ div.addContent(pkgNamePara);
- }
- LinkInfoImpl linkInfo = new LinkInfoImpl( LinkInfoImpl.CONTEXT_CLASS_HEADER,
-- classDoc, false);
-+ classDoc, false);
- //Let's not link to ourselves in the header.
- linkInfo.linkToSelf = false;
-- print(header + getTypeParameterLinks(linkInfo));
-- h2End();
-+ Content headerContent = new StringContent(header);
-+ Content heading = HtmlTree.HEADING(HtmlConstants.CLASS_PAGE_HEADING, true,
-+ HtmlStyle.title, headerContent);
-+ heading.addContent(new RawHtml(getTypeParameterLinks(linkInfo)));
-+ div.addContent(heading);
-+ bodyTree.addContent(div);
-+ return bodyTree;
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeFooter() {
-- println("<!-- ========= END OF CLASS DATA ========= -->");
-- hr();
-- navLinks(false);
-- printBottom();
-- printBodyHtmlEnd();
-+ public Content getClassContentHeader() {
-+ return getContentHeader();
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeClassSignature(String modifiers) {
-+ public void addFooter(Content contentTree) {
-+ contentTree.addContent(HtmlConstants.END_OF_CLASS_DATA);
-+ addNavLinks(false, contentTree);
-+ addBottom(contentTree);
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void printDocument(Content contentTree) {
-+ printHtmlDocument(configuration.metakeywords.getMetaKeywords(classDoc),
-+ true, contentTree);
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public Content getClassInfoTreeHeader() {
-+ return getMemberTreeHeader();
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public Content getClassInfo(Content classInfoTree) {
-+ return getMemberTree(HtmlStyle.description, classInfoTree);
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addClassSignature(String modifiers, Content classInfoTree) {
- boolean isInterface = classDoc.isInterface();
-- preNoNewLine();
-- writeAnnotationInfo(classDoc);
-- print(modifiers);
-+ classInfoTree.addContent(new HtmlTree(HtmlTag.BR));
-+ Content pre = new HtmlTree(HtmlTag.PRE);
-+ addAnnotationInfo(classDoc, pre);
-+ pre.addContent(modifiers);
- LinkInfoImpl linkInfo = new LinkInfoImpl(
-- LinkInfoImpl.CONTEXT_CLASS_SIGNATURE, classDoc, false);
-+ LinkInfoImpl.CONTEXT_CLASS_SIGNATURE, classDoc, false);
- //Let's not link to ourselves in the signature.
- linkInfo.linkToSelf = false;
-- String name = classDoc.name() +
-- getTypeParameterLinks(linkInfo);
-+ Content name = new RawHtml (classDoc.name() +
-+ getTypeParameterLinks(linkInfo));
- if (configuration().linksource) {
-- printSrcLink(classDoc, name);
-+ addSrcLink(classDoc, name, pre);
- } else {
-- strong(name);
-+ pre.addContent(HtmlTree.STRONG(name));
- }
- if (!isInterface) {
- Type superclass = Util.getFirstVisibleSuperClass(classDoc,
-- configuration());
-+ configuration());
- if (superclass != null) {
-- println();
-- print("extends ");
-- printLink(new LinkInfoImpl(
-- LinkInfoImpl.CONTEXT_CLASS_SIGNATURE_PARENT_NAME,
-- superclass));
-+ pre.addContent("\n");
-+ pre.addContent("extends ");
-+ Content link = new RawHtml(getLink(new LinkInfoImpl(
-+ LinkInfoImpl.CONTEXT_CLASS_SIGNATURE_PARENT_NAME,
-+ superclass)));
-+ pre.addContent(link);
- }
- }
- Type[] implIntfacs = classDoc.interfaceTypes();
-@@ -202,34 +253,33 @@
- for (int i = 0; i < implIntfacs.length; i++) {
- ClassDoc classDoc = implIntfacs[i].asClassDoc();
- if (! (classDoc.isPublic() ||
-- Util.isLinkable(classDoc, configuration()))) {
-+ Util.isLinkable(classDoc, configuration()))) {
- continue;
- }
- if (counter == 0) {
-- println();
-- print(isInterface? "extends " : "implements ");
-+ pre.addContent("\n");
-+ pre.addContent(isInterface? "extends " : "implements ");
- } else {
-- print(", ");
-+ pre.addContent(", ");
- }
-- printLink(new LinkInfoImpl(
-- LinkInfoImpl.CONTEXT_CLASS_SIGNATURE_PARENT_NAME,
-- implIntfacs[i]));
-+ Content link = new RawHtml(getLink(new LinkInfoImpl(
-+ LinkInfoImpl.CONTEXT_CLASS_SIGNATURE_PARENT_NAME,
-+ implIntfacs[i])));
-+ pre.addContent(link);
- counter++;
- }
- }
-- preEnd();
-- p();
-+ classInfoTree.addContent(pre);
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeClassDescription() {
-+ public void addClassDescription(Content classInfoTree) {
- if(!configuration.nocomment) {
- // generate documentation for the class.
- if (classDoc.inlineTags().length > 0) {
-- printInlineComment(classDoc);
-- p();
-+ addInlineComment(classDoc, classInfoTree);
- }
- }
- }
-@@ -237,131 +287,118 @@
- /**
- * {@inheritDoc}
- */
-- public void writeClassTagInfo() {
-+ public void addClassTagInfo(Content classInfoTree) {
- if(!configuration.nocomment) {
- // Print Information about all the tags here
-- printTags(classDoc);
-- hr();
-- p();
-+ addTagsInfo(classDoc, classInfoTree);
-+ }
-+ }
-+
-+ /**
-+ * Get the class hierarchy tree for the given class.
-+ *
-+ * @param type the class to print the hierarchy for
-+ * @return a content tree for class inheritence
-+ */
-+ private Content getClassInheritenceTree(Type type) {
-+ Type sup;
-+ HtmlTree classTreeUl = new HtmlTree(HtmlTag.UL);
-+ classTreeUl.addStyle(HtmlStyle.inheritance);
-+ Content liTree = null;
-+ do {
-+ sup = Util.getFirstVisibleSuperClass(
-+ type instanceof ClassDoc ? (ClassDoc) type : type.asClassDoc(),
-+ configuration());
-+ if (sup != null) {
-+ HtmlTree ul = new HtmlTree(HtmlTag.UL);
-+ ul.addStyle(HtmlStyle.inheritance);
-+ ul.addContent(getTreeForClassHelper(type));
-+ if (liTree != null)
-+ ul.addContent(liTree);
-+ Content li = HtmlTree.LI(ul);
-+ liTree = li;
-+ type = sup;
-+ }
-+ else
-+ classTreeUl.addContent(getTreeForClassHelper(type));
-+ }
-+ while (sup != null);
-+ if (liTree != null)
-+ classTreeUl.addContent(liTree);
-+ return classTreeUl;
-+ }
-+
-+ /**
-+ * Get the class helper tree for the given class.
-+ *
-+ * @param type the class to print the helper for
-+ * @return a content tree for class helper
-+ */
-+ private Content getTreeForClassHelper(Type type) {
-+ Content li = new HtmlTree(HtmlTag.LI);
-+ if (type.equals(classDoc)) {
-+ String typeParameters = getTypeParameterLinks(
-+ new LinkInfoImpl(LinkInfoImpl.CONTEXT_TREE,
-+ classDoc, false));
-+ if (configuration.shouldExcludeQualifier(
-+ classDoc.containingPackage().name())) {
-+ li.addContent(type.asClassDoc().name());
-+ li.addContent(new RawHtml(typeParameters));
-+ } else {
-+ li.addContent(type.asClassDoc().qualifiedName());
-+ li.addContent(new RawHtml(typeParameters));
-+ }
- } else {
-- hr();
-+ Content link = new RawHtml(getLink(new LinkInfoImpl(
-+ LinkInfoImpl.CONTEXT_CLASS_TREE_PARENT,
-+ type instanceof ClassDoc ? (ClassDoc) type : type,
-+ configuration.getClassName(type.asClassDoc()), false)));
-+ li.addContent(link);
-+ }
-+ return li;
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addClassTree(Content classContentTree) {
-+ if (!classDoc.isClass()) {
-+ return;
-+ }
-+ classContentTree.addContent(getClassInheritenceTree(classDoc));
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addTypeParamInfo(Content classInfoTree) {
-+ if (classDoc.typeParamTags().length > 0) {
-+ TagletOutput output = (new ParamTaglet()).getTagletOutput(classDoc,
-+ getTagletWriterInstance(false));
-+ Content typeParam = new RawHtml(output.toString());
-+ Content dl = HtmlTree.DL(typeParam);
-+ classInfoTree.addContent(dl);
- }
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeClassDeprecationInfo() {
-- hr();
-- Tag[] deprs = classDoc.tags("deprecated");
-- if (Util.isDeprecated(classDoc)) {
-- strongText("doclet.Deprecated");
-- if (deprs.length > 0) {
-- Tag[] commentTags = deprs[0].inlineTags();
-- if (commentTags.length > 0) {
-- space();
-- printInlineDeprecatedComment(classDoc, deprs[0]);
-- }
-- }
-- p();
-- }
-- }
--
-- /**
-- * Generate the indent and get the line image for the class tree.
-- * For user accessibility, the image includes the alt attribute
-- * "extended by". (This method is not intended for a class
-- * implementing an interface, where "implemented by" would be required.)
-- *
-- * indent integer indicating the number of spaces to indent
-- */
-- private void writeStep(int indent) {
-- print(spaces(4 * indent - 2));
-- print("<IMG SRC=\"" + relativepathNoSlash + "/resources/inherit.gif\" " +
-- "ALT=\"" + configuration.getText("doclet.extended_by") + " \">");
-- }
--
-- /**
-- * Print the class hierarchy tree for the given class.
-- * @param type the class to print the hierarchy for.
-- * @return return the amount that should be indented in
-- * the next level of the tree.
-- */
-- private int writeTreeForClassHelper(Type type) {
-- Type sup = Util.getFirstVisibleSuperClass(
-- type instanceof ClassDoc ? (ClassDoc) type : type.asClassDoc(),
-- configuration());
-- int indent = 0;
-- if (sup != null) {
-- indent = writeTreeForClassHelper(sup);
-- writeStep(indent);
-- }
--
-- if (type.equals(classDoc)) {
-- String typeParameters = getTypeParameterLinks(
-- new LinkInfoImpl(
-- LinkInfoImpl.CONTEXT_TREE,
-- classDoc, false));
-- if (configuration.shouldExcludeQualifier(
-- classDoc.containingPackage().name())) {
-- strong(type.asClassDoc().name() + typeParameters);
-- } else {
-- strong(type.asClassDoc().qualifiedName() + typeParameters);
-- }
-- } else {
-- print(getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS_TREE_PARENT,
-- type instanceof ClassDoc ? (ClassDoc) type : type,
-- configuration.getClassName(type.asClassDoc()), false)));
-- }
-- println();
-- return indent + 1;
-- }
--
-- /**
-- * Print the class hierarchy tree for this class only.
-- */
-- public void writeClassTree() {
-- if (! classDoc.isClass()) {
-- return;
-- }
-- pre();
-- writeTreeForClassHelper(classDoc);
-- preEnd();
-- }
--
-- /**
-- * Write the type parameter information.
-- */
-- public void writeTypeParamInfo() {
-- if (classDoc.typeParamTags().length > 0) {
-- dl();
-- dt();
-- TagletOutput output = (new ParamTaglet()).getTagletOutput(classDoc,
-- getTagletWriterInstance(false));
-- print(output.toString());
-- dtEnd();
-- dlEnd();
-- }
-- }
--
-- /**
-- * {@inheritDoc}
-- */
-- public void writeSubClassInfo() {
-+ public void addSubClassInfo(Content classInfoTree) {
- if (classDoc.isClass()) {
- if (classDoc.qualifiedName().equals("java.lang.Object") ||
-- classDoc.qualifiedName().equals("org.omg.CORBA.Object")) {
-+ classDoc.qualifiedName().equals("org.omg.CORBA.Object")) {
- return; // Don't generate the list, too huge
- }
- List subclasses = classtree.subs(classDoc, false);
- if (subclasses.size() > 0) {
-- dl();
-- dt();
-- strongText("doclet.Subclasses");
-- dtEnd();
-- writeClassLinks(LinkInfoImpl.CONTEXT_SUBCLASSES,
-- subclasses);
-- dlEnd();
-+ Content label = getResource(
-+ "doclet.Subclasses");
-+ Content dt = HtmlTree.DT(label);
-+ Content dl = HtmlTree.DL(dt);
-+ dl.addContent(getClassLinks(LinkInfoImpl.CONTEXT_SUBCLASSES,
-+ subclasses));
-+ classInfoTree.addContent(dl);
- }
- }
- }
-@@ -369,140 +406,196 @@
- /**
- * {@inheritDoc}
- */
-- public void writeSubInterfacesInfo() {
-+ public void addSubInterfacesInfo(Content classInfoTree) {
- if (classDoc.isInterface()) {
- List subInterfaces = classtree.allSubs(classDoc, false);
- if (subInterfaces.size() > 0) {
-- dl();
-- dt();
-- strongText("doclet.Subinterfaces");
-- dtEnd();
-- writeClassLinks(LinkInfoImpl.CONTEXT_SUBINTERFACES,
-- subInterfaces);
-- dlEnd();
-+ Content label = getResource(
-+ "doclet.Subinterfaces");
-+ Content dt = HtmlTree.DT(label);
-+ Content dl = HtmlTree.DL(dt);
-+ dl.addContent(getClassLinks(LinkInfoImpl.CONTEXT_SUBINTERFACES,
-+ subInterfaces));
-+ classInfoTree.addContent(dl);
- }
- }
- }
-
- /**
-- * If this is the interface which are the classes, that implement this?
-- */
-- public void writeInterfaceUsageInfo () {
-- if (! classDoc.isInterface()) {
-- return;
-- }
-- if (classDoc.qualifiedName().equals("java.lang.Cloneable") ||
-- classDoc.qualifiedName().equals("java.io.Serializable")) {
-- return; // Don't generate the list, too big
-- }
-- List implcl = classtree.implementingclasses(classDoc);
-- if (implcl.size() > 0) {
-- dl();
-- dt();
-- strongText("doclet.Implementing_Classes");
-- dtEnd();
-- writeClassLinks(LinkInfoImpl.CONTEXT_IMPLEMENTED_CLASSES,
-- implcl);
-- dlEnd();
-- }
-- }
--
-- /**
- * {@inheritDoc}
- */
-- public void writeImplementedInterfacesInfo() {
-- //NOTE: we really should be using ClassDoc.interfaceTypes() here, but
-- // it doesn't walk up the tree like we want it to.
-- List interfaceArray = Util.getAllInterfaces(classDoc, configuration);
-- if (classDoc.isClass() && interfaceArray.size() > 0) {
-- dl();
-- dt();
-- strongText("doclet.All_Implemented_Interfaces");
-- dtEnd();
-- writeClassLinks(LinkInfoImpl.CONTEXT_IMPLEMENTED_INTERFACES,
-- interfaceArray);
-- dlEnd();
-+ public void addInterfaceUsageInfo (Content classInfoTree) {
-+ if (! classDoc.isInterface()) {
-+ return;
-+ }
-+ if (classDoc.qualifiedName().equals("java.lang.Cloneable") ||
-+ classDoc.qualifiedName().equals("java.io.Serializable")) {
-+ return; // Don't generate the list, too big
-+ }
-+ List<ClassDoc> implcl = classtree.implementingclasses(classDoc);
-+ if (implcl.size() > 0) {
-+ Content label = getResource(
-+ "doclet.Implementing_Classes");
-+ Content dt = HtmlTree.DT(label);
-+ Content dl = HtmlTree.DL(dt);
-+ dl.addContent(getClassLinks(LinkInfoImpl.CONTEXT_IMPLEMENTED_CLASSES,
-+ implcl));
-+ classInfoTree.addContent(dl);
- }
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeSuperInterfacesInfo() {
-+ public void addImplementedInterfacesInfo(Content classInfoTree) {
-+ //NOTE: we really should be using ClassDoc.interfaceTypes() here, but
-+ // it doesn't walk up the tree like we want it to.
-+ List<Type> interfaceArray = Util.getAllInterfaces(classDoc, configuration);
-+ if (classDoc.isClass() && interfaceArray.size() > 0) {
-+ Content label = getResource(
-+ "doclet.All_Implemented_Interfaces");
-+ Content dt = HtmlTree.DT(label);
-+ Content dl = HtmlTree.DL(dt);
-+ dl.addContent(getClassLinks(LinkInfoImpl.CONTEXT_IMPLEMENTED_INTERFACES,
-+ interfaceArray));
-+ classInfoTree.addContent(dl);
-+ }
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addSuperInterfacesInfo(Content classInfoTree) {
- //NOTE: we really should be using ClassDoc.interfaceTypes() here, but
- // it doesn't walk up the tree like we want it to.
- List interfaceArray = Util.getAllInterfaces(classDoc, configuration);
- if (classDoc.isInterface() && interfaceArray.size() > 0) {
-- dl();
-- dt();
-- strongText("doclet.All_Superinterfaces");
-- dtEnd();
-- writeClassLinks(LinkInfoImpl.CONTEXT_SUPER_INTERFACES,
-- interfaceArray);
-- dlEnd();
-+ Content label = getResource(
-+ "doclet.All_Superinterfaces");
-+ Content dt = HtmlTree.DT(label);
-+ Content dl = HtmlTree.DL(dt);
-+ dl.addContent(getClassLinks(LinkInfoImpl.CONTEXT_SUPER_INTERFACES,
-+ interfaceArray));
-+ classInfoTree.addContent(dl);
- }
- }
-
- /**
-- * Generate links to the given classes.
-+ * {@inheritDoc}
- */
-- private void writeClassLinks(int context, List list) {
-+ public void addNestedClassInfo(Content classInfoTree) {
-+ ClassDoc outerClass = classDoc.containingClass();
-+ if (outerClass != null) {
-+ Content label;
-+ if (outerClass.isInterface()) {
-+ label = getResource(
-+ "doclet.Enclosing_Interface");
-+ } else {
-+ label = getResource(
-+ "doclet.Enclosing_Class");
-+ }
-+ Content dt = HtmlTree.DT(label);
-+ Content dl = HtmlTree.DL(dt);
-+ Content dd = new HtmlTree(HtmlTag.DD);
-+ dd.addContent(new RawHtml(getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS, outerClass,
-+ false))));
-+ dl.addContent(dd);
-+ classInfoTree.addContent(dl);
-+ }
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addClassDeprecationInfo(Content classInfoTree) {
-+ Content hr = new HtmlTree(HtmlTag.HR);
-+ classInfoTree.addContent(hr);
-+ Tag[] deprs = classDoc.tags("deprecated");
-+ if (Util.isDeprecated(classDoc)) {
-+ Content strong = HtmlTree.STRONG(deprecatedPhrase);
-+ Content div = HtmlTree.DIV(HtmlStyle.block, strong);
-+ if (deprs.length > 0) {
-+ Tag[] commentTags = deprs[0].inlineTags();
-+ if (commentTags.length > 0) {
-+ div.addContent(getSpace());
-+ addInlineDeprecatedComment(classDoc, deprs[0], div);
-+ }
-+ }
-+ classInfoTree.addContent(div);
-+ }
-+ }
-+
-+ /**
-+ * Get links to the given classes.
-+ *
-+ * @param context the id of the context where the link will be printed
-+ * @param list the list of classes
-+ * @return a content tree for the class list
-+ */
-+ private Content getClassLinks(int context, List<?> list) {
- Object[] typeList = list.toArray();
-- //Sort the list to be printed.
-- print(' ');
-- dd();
-+ Content dd = new HtmlTree(HtmlTag.DD);
- for (int i = 0; i < list.size(); i++) {
- if (i > 0) {
-- print(", ");
-+ Content separator = new StringContent(", ");
-+ dd.addContent(separator);
- }
- if (typeList[i] instanceof ClassDoc) {
-- printLink(new LinkInfoImpl(context, (ClassDoc)(typeList[i])));
--
-+ Content link = new RawHtml(getLink(
-+ new LinkInfoImpl(context, (ClassDoc)(typeList[i]))));
-+ dd.addContent(link);
- } else {
-- printLink(new LinkInfoImpl(context, (Type)(typeList[i])));
-+ Content link = new RawHtml(getLink(
-+ new LinkInfoImpl(context, (Type)(typeList[i]))));
-+ dd.addContent(link);
- }
- }
-- ddEnd();
-+ return dd;
- }
-
-- protected void navLinkTree() {
-- navCellStart();
-- printHyperLink("package-tree.html", "",
-- configuration.getText("doclet.Tree"), true, "NavBarFont1");
-- navCellEnd();
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected Content getNavLinkTree() {
-+ Content treeLinkContent = getHyperLink("package-tree.html",
-+ "", treeLabel, "", "");
-+ Content li = HtmlTree.LI(treeLinkContent);
-+ return li;
- }
-
-- protected void printSummaryDetailLinks() {
-+ /**
-+ * Add summary details to the navigation bar.
-+ *
-+ * @param subDiv the content tree to which the summary detail links will be added
-+ */
-+ protected void addSummaryDetailLinks(Content subDiv) {
- try {
-- tr();
-- tdVAlignClass("top", "NavBarCell3");
-- font("-2");
-- print(" ");
-- navSummaryLinks();
-- fontEnd();
-- tdEnd();
-- tdVAlignClass("top", "NavBarCell3");
-- font("-2");
-- navDetailLinks();
-- fontEnd();
-- tdEnd();
-- trEnd();
-+ Content div = HtmlTree.DIV(getNavSummaryLinks());
-+ div.addContent(getNavDetailLinks());
-+ subDiv.addContent(div);
- } catch (Exception e) {
- e.printStackTrace();
- throw new DocletAbortException();
- }
- }
-
-- protected void navSummaryLinks() throws Exception {
-- printText("doclet.Summary");
-- space();
-+ /**
-+ * Get summary links for navigation bar.
-+ *
-+ * @return the content tree for the navigation summary links
-+ */
-+ protected Content getNavSummaryLinks() throws Exception {
-+ Content li = HtmlTree.LI(summaryLabel);
-+ li.addContent(getSpace());
-+ Content ulNav = HtmlTree.UL(HtmlStyle.subNavList, li);
- MemberSummaryBuilder memberSummaryBuilder = (MemberSummaryBuilder)
-- configuration.getBuilderFactory().getMemberSummaryBuilder(this);
-+ configuration.getBuilderFactory().getMemberSummaryBuilder(this);
- String[] navLinkLabels = new String[] {
- "doclet.navNested", "doclet.navEnum", "doclet.navField", "doclet.navConstructor",
-- "doclet.navMethod"
-+ "doclet.navMethod"
- };
- for (int i = 0; i < navLinkLabels.length; i++ ) {
-+ Content liNav = new HtmlTree(HtmlTag.LI);
- if (i == VisibleMemberMap.ENUM_CONSTANTS && ! classDoc.isEnum()) {
- continue;
- }
-@@ -511,38 +604,41 @@
- }
- AbstractMemberWriter writer =
- ((AbstractMemberWriter) memberSummaryBuilder.
-- getMemberSummaryWriter(i));
-+ getMemberSummaryWriter(i));
- if (writer == null) {
-- printText(navLinkLabels[i]);
-+ liNav.addContent(getResource(navLinkLabels[i]));
- } else {
-- writer.navSummaryLink(
-- memberSummaryBuilder.members(i),
-- memberSummaryBuilder.getVisibleMemberMap(i));
-+ writer.addNavSummaryLink(
-+ memberSummaryBuilder.members(i),
-+ memberSummaryBuilder.getVisibleMemberMap(i), liNav);
- }
- if (i < navLinkLabels.length-1) {
-- navGap();
-+ addNavGap(liNav);
- }
-+ ulNav.addContent(liNav);
- }
-+ return ulNav;
- }
-
- /**
-- * Method navDetailLinks
-+ * Get detail links for the navigation bar.
- *
-- * @throws Exception
-- *
-+ * @return the content tree for the detail links
- */
-- protected void navDetailLinks() throws Exception {
-- printText("doclet.Detail");
-- space();
-+ protected Content getNavDetailLinks() throws Exception {
-+ Content li = HtmlTree.LI(detailLabel);
-+ li.addContent(getSpace());
-+ Content ulNav = HtmlTree.UL(HtmlStyle.subNavList, li);
- MemberSummaryBuilder memberSummaryBuilder = (MemberSummaryBuilder)
-- configuration.getBuilderFactory().getMemberSummaryBuilder(this);
-+ configuration.getBuilderFactory().getMemberSummaryBuilder(this);
- String[] navLinkLabels = new String[] {
- "doclet.navNested", "doclet.navEnum", "doclet.navField", "doclet.navConstructor",
-- "doclet.navMethod"
-+ "doclet.navMethod"
- };
- for (int i = 1; i < navLinkLabels.length; i++ ) {
-+ Content liNav = new HtmlTree(HtmlTag.LI);
- AbstractMemberWriter writer =
-- ((AbstractMemberWriter) memberSummaryBuilder.
-+ ((AbstractMemberWriter) memberSummaryBuilder.
- getMemberSummaryWriter(i));
- if (i == VisibleMemberMap.ENUM_CONSTANTS && ! classDoc.isEnum()) {
- continue;
-@@ -551,43 +647,27 @@
- continue;
- }
- if (writer == null) {
-- printText(navLinkLabels[i]);
-+ liNav.addContent(getResource(navLinkLabels[i]));
- } else {
-- writer.navDetailLink(memberSummaryBuilder.members(i));
-+ writer.addNavDetailLink(memberSummaryBuilder.members(i), liNav);
- }
- if (i < navLinkLabels.length - 1) {
-- navGap();
-+ addNavGap(liNav);
- }
-+ ulNav.addContent(liNav);
- }
-- }
--
-- protected void navGap() {
-- space();
-- print('|');
-- space();
-+ return ulNav;
- }
-
- /**
-- * If this is an inner class or interface, write the enclosing class or
-- * interface.
-+ * Add gap between navigation bar elements.
-+ *
-+ * @param liNav the content tree to which the gap will be added
- */
-- public void writeNestedClassInfo() {
-- ClassDoc outerClass = classDoc.containingClass();
-- if (outerClass != null) {
-- dl();
-- dt();
-- if (outerClass.isInterface()) {
-- strongText("doclet.Enclosing_Interface");
-- } else {
-- strongText("doclet.Enclosing_Class");
-- }
-- dtEnd();
-- dd();
-- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS, outerClass,
-- false));
-- ddEnd();
-- dlEnd();
-- }
-+ protected void addNavGap(Content liNav) {
-+ liNav.addContent(getSpace());
-+ liNav.addContent("|");
-+ liNav.addContent(getSpace());
- }
-
- /**
-@@ -598,11 +678,4 @@
- public ClassDoc getClassDoc() {
- return classDoc;
- }
--
-- /**
-- * {@inheritDoc}
-- */
-- public void completeMemberSummaryBuild() {
-- p();
-- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java
-@@ -25,11 +25,12 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.io.*;
-+import java.util.*;
-+import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
--import com.sun.javadoc.*;
--import java.io.*;
--import java.util.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-
- /**
- * Write the Constants Summary Page in HTML format.
-@@ -76,67 +77,106 @@
- /**
- * {@inheritDoc}
- */
-- public void writeHeader() {
-- printHtmlHeader(configuration.getText("doclet.Constants_Summary"),
-- null, true);
-- printTop();
-- navLinks(true);
-- hr();
--
-- center();
-- h1(); printText("doclet.Constants_Summary"); h1End();
-- centerEnd();
--
-- hr(4, "noshade");
-+ public Content getHeader() {
-+ String label = configuration.getText("doclet.Constants_Summary");
-+ Content bodyTree = getBody(true, getWindowTitle(label));
-+ addTop(bodyTree);
-+ addNavLinks(true, bodyTree);
-+ return bodyTree;
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeFooter() {
-- hr();
-- navLinks(false);
-- printBottom();
-- printBodyHtmlEnd();
-+ public Content getContentsHeader() {
-+ return new HtmlTree(HtmlTag.UL);
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeContentsHeader() {
-- strong(configuration.getText("doclet.Contents"));
-- ul();
-+ public void addLinkToPackageContent(PackageDoc pkg, String parsedPackageName,
-+ Set<String> printedPackageHeaders, Content contentListTree) {
-+ String packageName = pkg.name();
-+ //add link to summary
-+ Content link;
-+ if (packageName.length() == 0) {
-+ link = getHyperLink("#" + DocletConstants.UNNAMED_PACKAGE_ANCHOR,
-+ "", defaultPackageLabel, "", "");
-+ } else {
-+ Content packageNameContent = getPackageLabel(parsedPackageName);
-+ packageNameContent.addContent(".*");
-+ link = getHyperLink("#" + parsedPackageName,
-+ "", packageNameContent, "", "");
-+ printedPackageHeaders.add(parsedPackageName);
-+ }
-+ contentListTree.addContent(HtmlTree.LI(link));
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeContentsFooter() {
-- ulEnd();
-- println();
-+ public Content getContentsList(Content contentListTree) {
-+ Content titleContent = getResource(
-+ "doclet.Constants_Summary");
-+ Content pHeading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, true,
-+ HtmlStyle.title, titleContent);
-+ Content div = HtmlTree.DIV(HtmlStyle.header, pHeading);
-+ Content headingContent = getResource(
-+ "doclet.Contents");
-+ div.addContent(HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING, true,
-+ headingContent));
-+ div.addContent(contentListTree);
-+ return div;
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeLinkToPackageContent(PackageDoc pkg, String parsedPackageName, Set printedPackageHeaders) {
-- String packageName = pkg.name();
-- //add link to summary
-- li();
-- if (packageName.length() == 0) {
-- printHyperLink("#" + DocletConstants.UNNAMED_PACKAGE_ANCHOR,
-- DocletConstants.DEFAULT_PACKAGE_NAME);
-- } else {
-- printHyperLink("#" + parsedPackageName, parsedPackageName + ".*");
-- printedPackageHeaders.add(parsedPackageName);
-- }
-- println();
-+ public Content getConstantSummaries() {
-+ HtmlTree summariesDiv = new HtmlTree(HtmlTag.DIV);
-+ summariesDiv.addStyle(HtmlStyle.constantValuesContainer);
-+ return summariesDiv;
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeConstantMembersHeader(ClassDoc cd) {
-+ public void addPackageName(PackageDoc pkg, String parsedPackageName,
-+ Content summariesTree) {
-+ Content pkgNameContent;
-+ if (parsedPackageName.length() == 0) {
-+ summariesTree.addContent(getMarkerAnchor(
-+ DocletConstants.UNNAMED_PACKAGE_ANCHOR));
-+ pkgNameContent = defaultPackageLabel;
-+ } else {
-+ summariesTree.addContent(getMarkerAnchor(
-+ parsedPackageName));
-+ pkgNameContent = getPackageLabel(parsedPackageName);
-+ }
-+ Content headingContent = new StringContent(".*");
-+ Content heading = HtmlTree.HEADING(HtmlConstants.PACKAGE_HEADING, true,
-+ pkgNameContent);
-+ heading.addContent(headingContent);
-+ summariesTree.addContent(heading);
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public Content getClassConstantHeader() {
-+ HtmlTree ul = new HtmlTree(HtmlTag.UL);
-+ ul.addStyle(HtmlStyle.blockList);
-+ return ul;
-+ }
-+
-+ /**
-+ * Get the table caption and header for the constant summary table
-+ *
-+ * @param cd classdoc to be documented
-+ * @return constant members header content
-+ */
-+ public Content getConstantMembersHeader(ClassDoc cd) {
- //generate links backward only to public classes.
- String classlink = (cd.isPublic() || cd.isProtected())?
- getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CONSTANT_SUMMARY, cd,
-@@ -144,112 +184,120 @@
- cd.qualifiedName();
- String name = cd.containingPackage().name();
- if (name.length() > 0) {
-- writeClassName(name + "." + classlink);
-+ return getClassName(name + "." + classlink);
- } else {
-- writeClassName(classlink);
-+ return getClassName(classlink);
- }
- }
-
- /**
-+ * Get the class name in the table caption and the table header.
-+ *
-+ * @param classStr the class name to print.
-+ * @return the table caption and header
-+ */
-+ protected Content getClassName(String classStr) {
-+ Content table = HtmlTree.TABLE(0, 3, 0, constantsTableSummary,
-+ getTableCaption(classStr));
-+ table.addContent(getSummaryTableHeader(constantsTableHeader, "col"));
-+ return table;
-+ }
-+
-+ /**
- * {@inheritDoc}
- */
-- public void writeConstantMembersFooter(ClassDoc cd) {
-- tableFooter(false);
-- p();
-+ public void addConstantMembers(ClassDoc cd, List<FieldDoc> fields,
-+ Content classConstantTree) {
-+ currentClassDoc = cd;
-+ Content tbody = new HtmlTree(HtmlTag.TBODY);
-+ for (int i = 0; i < fields.size(); ++i) {
-+ HtmlTree tr = new HtmlTree(HtmlTag.TR);
-+ if (i%2 == 0)
-+ tr.addStyle(HtmlStyle.altColor);
-+ else
-+ tr.addStyle(HtmlStyle.rowColor);
-+ addConstantMember(fields.get(i), tr);
-+ tbody.addContent(tr);
-+ }
-+ Content table = getConstantMembersHeader(cd);
-+ table.addContent(tbody);
-+ Content li = HtmlTree.LI(HtmlStyle.blockList, table);
-+ classConstantTree.addContent(li);
- }
-
- /**
-- * Print the class name in the table heading.
-- * @param classStr the heading to print.
-+ * Add the row for the constant summary table.
-+ *
-+ * @param member the field to be documented.
-+ * @param trTree an htmltree object for the table row
- */
-- protected void writeClassName(String classStr) {
-- table(1, 3, 0, constantsTableSummary);
-- tableSubCaptionStart();
-- write(classStr);
-- tableCaptionEnd();
-- summaryTableHeader(constantsTableHeader, "col");
-+ private void addConstantMember(FieldDoc member, HtmlTree trTree) {
-+ trTree.addContent(getTypeColumn(member));
-+ trTree.addContent(getNameColumn(member));
-+ trTree.addContent(getValue(member));
- }
-
-- private void tableFooter(boolean isHeader) {
-- fontEnd();
-- if (isHeader) {
-- thEnd();
-- } else {
-- tdEnd();
-+ /**
-+ * Get the type column for the constant summary table row.
-+ *
-+ * @param member the field to be documented.
-+ * @return the type column of the constant table row
-+ */
-+ private Content getTypeColumn(FieldDoc member) {
-+ Content anchor = getMarkerAnchor(currentClassDoc.qualifiedName() +
-+ "." + member.name());
-+ Content tdType = HtmlTree.TD(HtmlStyle.colFirst, anchor);
-+ Content code = new HtmlTree(HtmlTag.CODE);
-+ StringTokenizer mods = new StringTokenizer(member.modifiers());
-+ while(mods.hasMoreTokens()) {
-+ Content modifier = new StringContent(mods.nextToken());
-+ code.addContent(modifier);
-+ code.addContent(getSpace());
- }
-- trEnd();
-- tableEnd();
-- p();
-+ Content type = new RawHtml(getLink(new LinkInfoImpl(
-+ LinkInfoImpl.CONTEXT_CONSTANT_SUMMARY, member.type())));
-+ code.addContent(type);
-+ tdType.addContent(code);
-+ return tdType;
-+ }
-+
-+ /**
-+ * Get the name column for the constant summary table row.
-+ *
-+ * @param member the field to be documented.
-+ * @return the name column of the constant table row
-+ */
-+ private Content getNameColumn(FieldDoc member) {
-+ Content nameContent = new RawHtml(getDocLink(
-+ LinkInfoImpl.CONTEXT_CONSTANT_SUMMARY, member, member.name(), false));
-+ Content code = HtmlTree.CODE(nameContent);
-+ return HtmlTree.TD(code);
-+ }
-+
-+ /**
-+ * Get the value column for the constant summary table row.
-+ *
-+ * @param member the field to be documented.
-+ * @return the value column of the constant table row
-+ */
-+ private Content getValue(FieldDoc member) {
-+ Content valueContent = new StringContent(member.constantValueExpression());
-+ Content code = HtmlTree.CODE(valueContent);
-+ return HtmlTree.TD(HtmlStyle.colLast, code);
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writePackageName(PackageDoc pkg, String parsedPackageName) {
-- String pkgname;
-- if (parsedPackageName.length() == 0) {
-- anchor(DocletConstants.UNNAMED_PACKAGE_ANCHOR);
-- pkgname = DocletConstants.DEFAULT_PACKAGE_NAME;
-- } else {
-- anchor(parsedPackageName);
-- pkgname = parsedPackageName;
-- }
-- table(1, "100%", 3, 0);
-- trBgcolorStyle("#CCCCFF", "TableHeadingColor");
-- thAlign("left");
-- font("+2");
-- write(pkgname + ".*");
-- tableFooter(true);
-+ public void addFooter(Content contentTree) {
-+ addNavLinks(false, contentTree);
-+ addBottom(contentTree);
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeConstantMembers(ClassDoc cd, List fields) {
-- currentClassDoc = cd;
-- for (int i = 0; i < fields.size(); ++i) {
-- writeConstantMember((FieldDoc)(fields.get(i)));
-- }
-- }
--
-- private void writeConstantMember(FieldDoc member) {
-- trBgcolorStyle("white", "TableRowColor");
-- anchor(currentClassDoc.qualifiedName() + "." + member.name());
-- writeTypeColumn(member);
-- writeNameColumn(member);
-- writeValue(member);
-- trEnd();
-- }
--
-- private void writeTypeColumn(FieldDoc member) {
-- tdAlign("right");
-- font("-1");
-- code();
-- StringTokenizer mods = new StringTokenizer(member.modifiers());
-- while(mods.hasMoreTokens()) {
-- print(mods.nextToken() + "&nbsp;");
-- }
-- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CONSTANT_SUMMARY,
-- member.type()));
-- codeEnd();
-- fontEnd();
-- tdEnd();
-- }
--
-- private void writeNameColumn(FieldDoc member) {
-- tdAlign("left");
-- code();
-- printDocLink(LinkInfoImpl.CONTEXT_CONSTANT_SUMMARY, member,
-- member.name(), false);
-- codeEnd();
-- tdEnd();
-- }
--
-- private void writeValue(FieldDoc member) {
-- tdAlign("right");
-- code();
-- print(Util.escapeHtmlChars(member.constantValueExpression()));
-- codeEnd();
-- tdEnd();
-+ public void printDocument(Content contentTree) {
-+ printHtmlDocument(null, true, contentTree);
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java
-@@ -29,6 +29,7 @@
- import java.util.*;
-
- import com.sun.javadoc.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
-
-@@ -43,7 +44,6 @@
- implements ConstructorWriter, MemberSummaryWriter {
-
- private boolean foundNonPubConstructor = false;
-- private boolean printedSummaryHeader = false;
-
- /**
- * Construct a new ConstructorWriterImpl.
-@@ -75,125 +75,112 @@
- }
-
- /**
-- * Write the constructors summary header for the given class.
-- *
-- * @param classDoc the class the summary belongs to.
-+ * {@inheritDoc}
- */
-- public void writeMemberSummaryHeader(ClassDoc classDoc) {
-- printedSummaryHeader = true;
-- writer.println();
-- writer.println("<!-- ======== CONSTRUCTOR SUMMARY ======== -->");
-- writer.println();
-- writer.printSummaryHeader(this, classDoc);
-+ public Content getMemberSummaryHeader(ClassDoc classDoc,
-+ Content memberSummaryTree) {
-+ memberSummaryTree.addContent(HtmlConstants.START_OF_CONSTRUCTOR_SUMMARY);
-+ Content memberTree = writer.getMemberTreeHeader();
-+ writer.addSummaryHeader(this, classDoc, memberTree);
-+ return memberTree;
- }
-
- /**
-- * Write the constructors summary footer for the given class.
-- *
-- * @param classDoc the class the summary belongs to.
-+ * {@inheritDoc}
- */
-- public void writeMemberSummaryFooter(ClassDoc classDoc) {
-- writer.printSummaryFooter(this, classDoc);
-+ public Content getConstructorDetailsTreeHeader(ClassDoc classDoc,
-+ Content memberDetailsTree) {
-+ memberDetailsTree.addContent(HtmlConstants.START_OF_CONSTRUCTOR_DETAILS);
-+ Content constructorDetailsTree = writer.getMemberTreeHeader();
-+ constructorDetailsTree.addContent(writer.getMarkerAnchor("constructor_detail"));
-+ Content heading = HtmlTree.HEADING(HtmlConstants.DETAILS_HEADING,
-+ writer.constructorDetailsLabel);
-+ constructorDetailsTree.addContent(heading);
-+ return constructorDetailsTree;
- }
-
- /**
-- * Write the header for the constructor documentation.
-- *
-- * @param classDoc the class that the constructors belong to.
-+ * {@inheritDoc}
- */
-- public void writeHeader(ClassDoc classDoc, String header) {
-- writer.println();
-- writer.println("<!-- ========= CONSTRUCTOR DETAIL ======== -->");
-- writer.println();
-- writer.anchor("constructor_detail");
-- writer.printTableHeadingBackground(header);
-+ public Content getConstructorDocTreeHeader(ConstructorDoc constructor,
-+ Content constructorDetailsTree) {
-+ String erasureAnchor;
-+ if ((erasureAnchor = getErasureAnchor(constructor)) != null) {
-+ constructorDetailsTree.addContent(writer.getMarkerAnchor((erasureAnchor)));
-+ }
-+ constructorDetailsTree.addContent(
-+ writer.getMarkerAnchor(writer.getAnchor(constructor)));
-+ Content constructorDocTree = writer.getMemberTreeHeader();
-+ Content heading = new HtmlTree(HtmlConstants.MEMBER_HEADING);
-+ heading.addContent(constructor.name());
-+ constructorDocTree.addContent(heading);
-+ return constructorDocTree;
- }
-
- /**
-- * Write the constructor header for the given constructor.
-- *
-- * @param constructor the constructor being documented.
-- * @param isFirst the flag to indicate whether or not the constructor is the
-- * first to be documented.
-+ * {@inheritDoc}
- */
-- public void writeConstructorHeader(ConstructorDoc constructor, boolean isFirst) {
-- if (! isFirst) {
-- writer.printMemberHeader();
-+ public Content getSignature(ConstructorDoc constructor) {
-+ writer.displayLength = 0;
-+ Content pre = new HtmlTree(HtmlTag.PRE);
-+ writer.addAnnotationInfo(constructor, pre);
-+ addModifiers(constructor, pre);
-+ if (configuration().linksource) {
-+ Content constructorName = new StringContent(constructor.name());
-+ writer.addSrcLink(constructor, constructorName, pre);
-+ } else {
-+ addName(constructor.name(), pre);
- }
-- writer.println();
-- String erasureAnchor;
-- if ((erasureAnchor = getErasureAnchor(constructor)) != null) {
-- writer.anchor(erasureAnchor);
-- }
-- writer.anchor(constructor);
-- writer.h3();
-- writer.print(constructor.name());
-- writer.h3End();
-+ addParameters(constructor, pre);
-+ addExceptions(constructor, pre);
-+ return pre;
- }
-
- /**
-- * Write the signature for the given constructor.
-- *
-- * @param constructor the constructor being documented.
-+ * {@inheritDoc}
- */
-- public void writeSignature(ConstructorDoc constructor) {
-- writer.displayLength = 0;
-- writer.pre();
-- writer.writeAnnotationInfo(constructor);
-- printModifiers(constructor);
-- //printReturnType((ConstructorDoc)constructor);
-- if (configuration().linksource) {
-- writer.printSrcLink(constructor, constructor.name());
-- } else {
-- strong(constructor.name());
-- }
-- writeParameters(constructor);
-- writeExceptions(constructor);
-- writer.preEnd();
-- assert !writer.getMemberDetailsListPrinted();
-+ @Override
-+ public void setSummaryColumnStyle(HtmlTree tdTree) {
-+ if (foundNonPubConstructor)
-+ tdTree.addStyle(HtmlStyle.colLast);
-+ else
-+ tdTree.addStyle(HtmlStyle.colOne);
- }
-
- /**
-- * Write the deprecated output for the given constructor.
-- *
-- * @param constructor the constructor being documented.
-+ * {@inheritDoc}
- */
-- public void writeDeprecated(ConstructorDoc constructor) {
-- printDeprecated(constructor);
-+ public void addDeprecated(ConstructorDoc constructor, Content constructorDocTree) {
-+ addDeprecatedInfo(constructor, constructorDocTree);
- }
-
- /**
-- * Write the comments for the given constructor.
-- *
-- * @param constructor the constructor being documented.
-+ * {@inheritDoc}
- */
-- public void writeComments(ConstructorDoc constructor) {
-- printComment(constructor);
-+ public void addComments(ConstructorDoc constructor, Content constructorDocTree) {
-+ addComment(constructor, constructorDocTree);
- }
-
- /**
-- * Write the tag output for the given constructor.
-- *
-- * @param constructor the constructor being documented.
-+ * {@inheritDoc}
- */
-- public void writeTags(ConstructorDoc constructor) {
-- writer.printTags(constructor);
-+ public void addTags(ConstructorDoc constructor, Content constructorDocTree) {
-+ writer.addTagsInfo(constructor, constructorDocTree);
- }
-
- /**
-- * Write the constructor footer.
-+ * {@inheritDoc}
- */
-- public void writeConstructorFooter() {
-- printMemberFooter();
-+ public Content getConstructorDetails(Content constructorDetailsTree) {
-+ return getMemberTree(constructorDetailsTree);
- }
-
- /**
-- * Write the footer for the constructor documentation.
-- *
-- * @param classDoc the class that the constructors belong to.
-+ * {@inheritDoc}
- */
-- public void writeFooter(ClassDoc classDoc) {
-- //No footer to write for constructor documentation
-+ public Content getConstructorDoc(Content constructorDocTree,
-+ boolean isLastContent) {
-+ return getMemberTree(constructorDocTree, isLastContent);
- }
-
- /**
-@@ -212,17 +199,35 @@
- this.foundNonPubConstructor = foundNonPubConstructor;
- }
-
-- public void printSummaryLabel() {
-- writer.printText("doclet.Constructor_Summary");
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addSummaryLabel(Content memberTree) {
-+ Content label = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING,
-+ writer.getResource("doclet.Constructor_Summary"));
-+ memberTree.addContent(label);
- }
-
-- public void printTableSummary() {
-- writer.tableIndexSummary(configuration().getText("doclet.Member_Table_Summary",
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getTableSummary() {
-+ return configuration().getText("doclet.Member_Table_Summary",
- configuration().getText("doclet.Constructor_Summary"),
-- configuration().getText("doclet.constructors")));
-+ configuration().getText("doclet.constructors"));
- }
-
-- public void printSummaryTableHeader(ProgramElementDoc member) {
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getCaption() {
-+ return configuration().getText("doclet.Constructors");
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String[] getSummaryTableHeader(ProgramElementDoc member) {
- String[] header;
- if (foundNonPubConstructor) {
- header = new String[] {
-@@ -239,87 +244,73 @@
- configuration().getText("doclet.Description"))
- };
- }
-- writer.summaryTableHeader(header, "col");
-+ return header;
- }
-
-- public void printSummaryAnchor(ClassDoc cd) {
-- writer.anchor("constructor_summary");
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
-+ memberTree.addContent(writer.getMarkerAnchor("constructor_summary"));
- }
-
-- public void printInheritedSummaryAnchor(ClassDoc cd) {
-- } // no such
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addInheritedSummaryAnchor(ClassDoc cd, Content inheritedTree) {
-+ }
-
-- public void printInheritedSummaryLabel(ClassDoc cd) {
-- // no such
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addInheritedSummaryLabel(ClassDoc cd, Content inheritedTree) {
- }
-
- public int getMemberKind() {
- return VisibleMemberMap.CONSTRUCTORS;
- }
-
-- protected void navSummaryLink(List members) {
-- printNavSummaryLink(classdoc,
-- members.size() > 0? true: false);
-- }
--
-- protected void printNavSummaryLink(ClassDoc cd, boolean link) {
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
- if (link) {
-- writer.printHyperLink("", "constructor_summary",
-- ConfigurationImpl.getInstance().getText("doclet.navConstructor"));
-+ return writer.getHyperLink("", "constructor_summary",
-+ writer.getResource("doclet.navConstructor"));
- } else {
-- writer.printText("doclet.navConstructor");
-- }
-- }
--
-- protected void printNavDetailLink(boolean link) {
-- if (link) {
-- writer.printHyperLink("", "constructor_detail",
-- ConfigurationImpl.getInstance().getText("doclet.navConstructor"));
-- } else {
-- writer.printText("doclet.navConstructor");
-- }
-- }
--
-- protected void printSummaryType(ProgramElementDoc member) {
-- if (foundNonPubConstructor) {
-- writer.printTypeSummaryHeader();
-- if (member.isProtected()) {
-- print("protected ");
-- } else if (member.isPrivate()) {
-- print("private ");
-- } else if (member.isPublic()) {
-- writer.space();
-- } else {
-- writer.printText("doclet.Package_private");
-- }
-- writer.printTypeSummaryFooter();
-- }
-- }
--
-- /**
-- * Write the inherited member summary header for the given class.
-- *
-- * @param classDoc the class the summary belongs to.
-- */
-- public void writeInheritedMemberSummaryHeader(ClassDoc classDoc) {
-- if(! printedSummaryHeader){
-- //We don't want inherited summary to not be under heading.
-- writeMemberSummaryHeader(classDoc);
-- writeMemberSummaryFooter(classDoc);
-- printedSummaryHeader = true;
-+ return writer.getResource("doclet.navConstructor");
- }
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeInheritedMemberSummary(ClassDoc classDoc,
-- ProgramElementDoc member, boolean isFirst, boolean isLast) {}
-+ protected void addNavDetailLink(boolean link, Content liNav) {
-+ if (link) {
-+ liNav.addContent(writer.getHyperLink("", "constructor_detail",
-+ writer.getResource("doclet.navConstructor")));
-+ } else {
-+ liNav.addContent(writer.getResource("doclet.navConstructor"));
-+ }
-+ }
-
- /**
-- * Write the inherited member summary footer for the given class.
-- *
-- * @param classDoc the class the summary belongs to.
-+ * {@inheritDoc}
- */
-- public void writeInheritedMemberSummaryFooter(ClassDoc classDoc) {}
-+ protected void addSummaryType(ProgramElementDoc member, Content tdSummaryType) {
-+ if (foundNonPubConstructor) {
-+ Content code = new HtmlTree(HtmlTag.CODE);
-+ if (member.isProtected()) {
-+ code.addContent("protected ");
-+ } else if (member.isPrivate()) {
-+ code.addContent("private ");
-+ } else if (member.isPublic()) {
-+ code.addContent(writer.getSpace());
-+ } else {
-+ code.addContent(
-+ configuration().getText("doclet.Package_private"));
-+ }
-+ tdSummaryType.addContent(code);
-+ }
-+ }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/DeprecatedListWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/DeprecatedListWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/DeprecatedListWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/DeprecatedListWriter.java
-@@ -25,9 +25,11 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.io.*;
-+import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.util.DeprecatedAPIListBuilder;
- import com.sun.tools.doclets.internal.toolkit.util.*;
--import java.io.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-
- /**
- * Generate File to list all the deprecated classes and class members with the
-@@ -125,28 +127,21 @@
- }
-
- /**
-- * Print the deprecated API list. Separately print all class kinds and
-- * member kinds.
-+ * Generate the deprecated API list.
- *
- * @param deprapi list of deprecated API built already.
- */
- protected void generateDeprecatedListFile(DeprecatedAPIListBuilder deprapi)
-- throws IOException {
-- writeHeader();
--
-- strong(configuration.getText("doclet.Contents"));
-- ul();
-- for (int i = 0; i < DeprecatedAPIListBuilder.NUM_TYPES; i++) {
-- writeIndexLink(deprapi, i);
-- }
-- ulEnd();
-- println();
--
-+ throws IOException {
-+ Content body = getHeader();
-+ body.addContent(getContentsList(deprapi));
- String memberTableSummary;
- String[] memberTableHeader = new String[1];
-+ HtmlTree div = new HtmlTree(HtmlTag.DIV);
-+ div.addStyle(HtmlStyle.contentContainer);
- for (int i = 0; i < DeprecatedAPIListBuilder.NUM_TYPES; i++) {
- if (deprapi.hasDocumentation(i)) {
-- writeAnchor(deprapi, i);
-+ addAnchor(deprapi, i, div);
- memberTableSummary =
- configuration.getText("doclet.Member_Table_Summary",
- configuration.getText(HEADING_KEYS[i]),
-@@ -154,66 +149,87 @@
- memberTableHeader[0] = configuration.getText("doclet.0_and_1",
- configuration.getText(HEADER_KEYS[i]),
- configuration.getText("doclet.Description"));
-- writers[i].printDeprecatedAPI(deprapi.getList(i),
-- HEADING_KEYS[i], memberTableSummary, memberTableHeader);
-+ writers[i].addDeprecatedAPI(deprapi.getList(i),
-+ HEADING_KEYS[i], memberTableSummary, memberTableHeader, div);
- }
- }
-- printDeprecatedFooter();
-+ body.addContent(div);
-+ addNavLinks(false, body);
-+ addBottom(body);
-+ printHtmlDocument(null, true, body);
- }
-
-- private void writeIndexLink(DeprecatedAPIListBuilder builder,
-- int type) {
-+ /**
-+ * Add the index link.
-+ *
-+ * @param builder the deprecated list builder
-+ * @param type the type of list being documented
-+ * @param contentTree the content tree to which the index link will be added
-+ */
-+ private void addIndexLink(DeprecatedAPIListBuilder builder,
-+ int type, Content contentTree) {
- if (builder.hasDocumentation(type)) {
-- li();
-- printHyperLink("#" + ANCHORS[type],
-- configuration.getText(HEADING_KEYS[type]));
-- println();
-- }
-- }
--
-- private void writeAnchor(DeprecatedAPIListBuilder builder, int type) {
-- if (builder.hasDocumentation(type)) {
-- anchor(ANCHORS[type]);
-+ Content li = HtmlTree.LI(getHyperLink("#" + ANCHORS[type],
-+ getResource(HEADING_KEYS[type])));
-+ contentTree.addContent(li);
- }
- }
-
- /**
-- * Print the navigation bar and header for the deprecated API Listing.
-+ * Get the contents list.
-+ *
-+ * @param deprapi the deprecated list builder
-+ * @return a content tree for the contents list
- */
-- protected void writeHeader() {
-- printHtmlHeader(configuration.getText("doclet.Window_Deprecated_List"),
-- null, true);
-- printTop();
-- navLinks(true);
-- hr();
-- center();
-- h2();
-- strongText("doclet.Deprecated_API");
-- h2End();
-- centerEnd();
--
-- hr(4, "noshade");
-+ public Content getContentsList(DeprecatedAPIListBuilder deprapi) {
-+ Content headContent = getResource("doclet.Deprecated_API");
-+ Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, true,
-+ HtmlStyle.title, headContent);
-+ Content div = HtmlTree.DIV(HtmlStyle.header, heading);
-+ Content headingContent = getResource("doclet.Contents");
-+ div.addContent(HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING, true,
-+ headingContent));
-+ Content ul = new HtmlTree(HtmlTag.UL);
-+ for (int i = 0; i < DeprecatedAPIListBuilder.NUM_TYPES; i++) {
-+ addIndexLink(deprapi, i, ul);
-+ }
-+ div.addContent(ul);
-+ return div;
- }
-
- /**
-- * Print the navigation bar and the footer for the deprecated API Listing.
-+ * Add the anchor.
-+ *
-+ * @param builder the deprecated list builder
-+ * @param type the type of list being documented
-+ * @param contentTree the content tree to which the anchor will be added
- */
-- protected void printDeprecatedFooter() {
-- hr();
-- navLinks(false);
-- printBottom();
-- printBodyHtmlEnd();
-+ private void addAnchor(DeprecatedAPIListBuilder builder, int type, Content htmlTree) {
-+ if (builder.hasDocumentation(type)) {
-+ htmlTree.addContent(getMarkerAnchor(ANCHORS[type]));
-+ }
- }
-
- /**
-- * Highlight the word "Deprecated" in the navigation bar as this is the same
-- * page.
-+ * Get the header for the deprecated API Listing.
-+ *
-+ * @return a content tree for the header
- */
-- protected void navLinkDeprecated() {
-- navCellRevStart();
-- fontStyle("NavBarFont1Rev");
-- strongText("doclet.navDeprecated");
-- fontEnd();
-- navCellEnd();
-+ public Content getHeader() {
-+ String title = configuration.getText("doclet.Window_Deprecated_List");
-+ Content bodyTree = getBody(true, getWindowTitle(title));
-+ addTop(bodyTree);
-+ addNavLinks(true, bodyTree);
-+ return bodyTree;
-+ }
-+
-+ /**
-+ * Get the deprecated label.
-+ *
-+ * @return a content tree for the deprecated label
-+ */
-+ protected Content getNavLinkDeprecated() {
-+ Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, deprecatedLabel);
-+ return li;
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java
-@@ -28,6 +28,7 @@
- import java.io.*;
-
- import com.sun.javadoc.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
-
-@@ -40,8 +41,6 @@
- public class EnumConstantWriterImpl extends AbstractMemberWriter
- implements EnumConstantWriter, MemberSummaryWriter {
-
-- private boolean printedSummaryHeader = false;
--
- public EnumConstantWriterImpl(SubWriterHolderWriter writer,
- ClassDoc classdoc) {
- super(writer, classdoc);
-@@ -52,136 +51,98 @@
- }
-
- /**
-- * Write the enum constant summary header for the given class.
-- *
-- * @param classDoc the class the summary belongs to.
-+ * {@inheritDoc}
- */
-- public void writeMemberSummaryHeader(ClassDoc classDoc) {
-- printedSummaryHeader = true;
-- writer.println("<!-- =========== ENUM CONSTANT SUMMARY =========== -->");
-- writer.println();
-- writer.printSummaryHeader(this, classDoc);
-- }
--
-- /**
-- * Write the enum constant summary footer for the given class.
-- *
-- * @param classDoc the class the summary belongs to.
-- */
-- public void writeMemberSummaryFooter(ClassDoc classDoc) {
-- writer.printSummaryFooter(this, classDoc);
-- }
--
-- /**
-- * Write the inherited enum constant summary header for the given class.
-- *
-- * @param classDoc the class the summary belongs to.
-- */
-- public void writeInheritedMemberSummaryHeader(ClassDoc classDoc) {
-- if(! printedSummaryHeader){
-- //We don't want inherited summary to not be under heading.
-- writeMemberSummaryHeader(classDoc);
-- writeMemberSummaryFooter(classDoc);
-- printedSummaryHeader = true;
-- }
-- writer.printInheritedSummaryHeader(this, classDoc);
-+ public Content getMemberSummaryHeader(ClassDoc classDoc,
-+ Content memberSummaryTree) {
-+ memberSummaryTree.addContent(HtmlConstants.START_OF_ENUM_CONSTANT_SUMMARY);
-+ Content memberTree = writer.getMemberTreeHeader();
-+ writer.addSummaryHeader(this, classDoc, memberTree);
-+ return memberTree;
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeInheritedMemberSummary(ClassDoc classDoc,
-- ProgramElementDoc enumConstant, boolean isFirst, boolean isLast) {
-- writer.printInheritedSummaryMember(this, classDoc, enumConstant, isFirst);
-- }
--
-- /**
-- * Write the inherited enum constant summary footer for the given class.
-- *
-- * @param classDoc the class the summary belongs to.
-- */
-- public void writeInheritedMemberSummaryFooter(ClassDoc classDoc) {
-- writer.printInheritedSummaryFooter(this, classDoc);
-+ public Content getEnumConstantsDetailsTreeHeader(ClassDoc classDoc,
-+ Content memberDetailsTree) {
-+ memberDetailsTree.addContent(HtmlConstants.START_OF_ENUM_CONSTANT_DETAILS);
-+ Content enumConstantsDetailsTree = writer.getMemberTreeHeader();
-+ enumConstantsDetailsTree.addContent(writer.getMarkerAnchor("enum_constant_detail"));
-+ Content heading = HtmlTree.HEADING(HtmlConstants.DETAILS_HEADING,
-+ writer.enumConstantsDetailsLabel);
-+ enumConstantsDetailsTree.addContent(heading);
-+ return enumConstantsDetailsTree;
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeHeader(ClassDoc classDoc, String header) {
-- writer.println();
-- writer.println("<!-- ============ ENUM CONSTANT DETAIL =========== -->");
-- writer.println();
-- writer.anchor("enum_constant_detail");
-- writer.printTableHeadingBackground(header);
-- writer.println();
-+ public Content getEnumConstantsTreeHeader(FieldDoc enumConstant,
-+ Content enumConstantsDetailsTree) {
-+ enumConstantsDetailsTree.addContent(
-+ writer.getMarkerAnchor(enumConstant.name()));
-+ Content enumConstantsTree = writer.getMemberTreeHeader();
-+ Content heading = new HtmlTree(HtmlConstants.MEMBER_HEADING);
-+ heading.addContent(enumConstant.name());
-+ enumConstantsTree.addContent(heading);
-+ return enumConstantsTree;
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeEnumConstantHeader(FieldDoc enumConstant, boolean isFirst) {
-- if (! isFirst) {
-- writer.printMemberHeader();
-- writer.println("");
-+ public Content getSignature(FieldDoc enumConstant) {
-+ Content pre = new HtmlTree(HtmlTag.PRE);
-+ writer.addAnnotationInfo(enumConstant, pre);
-+ addModifiers(enumConstant, pre);
-+ Content enumConstantLink = new RawHtml(writer.getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER,
-+ enumConstant.type())));
-+ pre.addContent(enumConstantLink);
-+ pre.addContent(" ");
-+ if (configuration().linksource) {
-+ Content enumConstantName = new StringContent(enumConstant.name());
-+ writer.addSrcLink(enumConstant, enumConstantName, pre);
-+ } else {
-+ addName(enumConstant.name(), pre);
- }
-- writer.anchor(enumConstant.name());
-- writer.h3();
-- writer.print(enumConstant.name());
-- writer.h3End();
-+ return pre;
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeSignature(FieldDoc enumConstant) {
-- writer.pre();
-- writer.writeAnnotationInfo(enumConstant);
-- printModifiers(enumConstant);
-- writer.printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER,
-- enumConstant.type()));
-- print(' ');
-- if (configuration().linksource) {
-- writer.printSrcLink(enumConstant, enumConstant.name());
-- } else {
-- strong(enumConstant.name());
-- }
-- writer.preEnd();
-- assert !writer.getMemberDetailsListPrinted();
-+ public void addDeprecated(FieldDoc enumConstant, Content enumConstantsTree) {
-+ addDeprecatedInfo(enumConstant, enumConstantsTree);
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeDeprecated(FieldDoc enumConstant) {
-- printDeprecated(enumConstant);
-+ public void addComments(FieldDoc enumConstant, Content enumConstantsTree) {
-+ addComment(enumConstant, enumConstantsTree);
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeComments(FieldDoc enumConstant) {
-- printComment(enumConstant);
-+ public void addTags(FieldDoc enumConstant, Content enumConstantsTree) {
-+ writer.addTagsInfo(enumConstant, enumConstantsTree);
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeTags(FieldDoc enumConstant) {
-- writer.printTags(enumConstant);
-+ public Content getEnumConstantsDetails(Content enumConstantsDetailsTree) {
-+ return getMemberTree(enumConstantsDetailsTree);
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeEnumConstantFooter() {
-- printMemberFooter();
-- }
--
-- /**
-- * {@inheritDoc}
-- */
-- public void writeFooter(ClassDoc classDoc) {
-- //No footer to write for enum constant documentation
-+ public Content getEnumConstants(Content enumConstantsTree,
-+ boolean isLastContent) {
-+ return getMemberTree(enumConstantsTree, isLastContent);
- }
-
- /**
-@@ -195,75 +156,127 @@
- return VisibleMemberMap.ENUM_CONSTANTS;
- }
-
-- public void printSummaryLabel() {
-- writer.printText("doclet.Enum_Constant_Summary");
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addSummaryLabel(Content memberTree) {
-+ Content label = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING,
-+ writer.getResource("doclet.Enum_Constant_Summary"));
-+ memberTree.addContent(label);
- }
-
-- public void printTableSummary() {
-- writer.tableIndexSummary(configuration().getText("doclet.Member_Table_Summary",
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getTableSummary() {
-+ return configuration().getText("doclet.Member_Table_Summary",
- configuration().getText("doclet.Enum_Constant_Summary"),
-- configuration().getText("doclet.enum_constants")));
-+ configuration().getText("doclet.enum_constants"));
- }
-
-- public void printSummaryTableHeader(ProgramElementDoc member) {
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getCaption() {
-+ return configuration().getText("doclet.Enum_Constants");
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String[] getSummaryTableHeader(ProgramElementDoc member) {
- String[] header = new String[] {
- configuration().getText("doclet.0_and_1",
- configuration().getText("doclet.Enum_Constant"),
- configuration().getText("doclet.Description"))
- };
-- writer.summaryTableHeader(header, "col");
-+ return header;
- }
-
-- public void printSummaryAnchor(ClassDoc cd) {
-- writer.anchor("enum_constant_summary");
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
-+ memberTree.addContent(writer.getMarkerAnchor("enum_constant_summary"));
- }
-
-- public void printInheritedSummaryAnchor(ClassDoc cd) {
-- } // no such
--
-- public void printInheritedSummaryLabel(ClassDoc cd) {
-- // no such
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addInheritedSummaryAnchor(ClassDoc cd, Content inheritedTree) {
- }
-
-- protected void writeSummaryLink(int context, ClassDoc cd, ProgramElementDoc member) {
-- writer.strong();
-- writer.printDocLink(context, (MemberDoc) member, member.name(), false);
-- writer.strongEnd();
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addInheritedSummaryLabel(ClassDoc cd, Content inheritedTree) {
- }
-
-- protected void writeInheritedSummaryLink(ClassDoc cd,
-- ProgramElementDoc member) {
-- writer.printDocLink(LinkInfoImpl.CONTEXT_MEMBER, (MemberDoc)member,
-- member.name(), false);
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected void addSummaryLink(int context, ClassDoc cd, ProgramElementDoc member,
-+ Content tdSummary) {
-+ Content strong = HtmlTree.STRONG(new RawHtml(
-+ writer.getDocLink(context, (MemberDoc) member, member.name(), false)));
-+ Content code = HtmlTree.CODE(strong);
-+ tdSummary.addContent(code);
- }
-
-- protected void printSummaryType(ProgramElementDoc member) {
-+ /**
-+ * {@inheritDoc}
-+ */
-+ @Override
-+ public void setSummaryColumnStyle(HtmlTree tdTree) {
-+ tdTree.addStyle(HtmlStyle.colOne);
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected void addInheritedSummaryLink(ClassDoc cd,
-+ ProgramElementDoc member, Content linksTree) {
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected void addSummaryType(ProgramElementDoc member, Content tdSummaryType) {
- //Not applicable.
- }
-
-- protected void writeDeprecatedLink(ProgramElementDoc member) {
-- writer.printDocLink(LinkInfoImpl.CONTEXT_MEMBER,
-- (MemberDoc) member, ((FieldDoc)member).qualifiedName(), false);
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected Content getDeprecatedLink(ProgramElementDoc member) {
-+ return writer.getDocLink(LinkInfoImpl.CONTEXT_MEMBER,
-+ (MemberDoc) member, ((FieldDoc)member).qualifiedName());
- }
-
-- protected void printNavSummaryLink(ClassDoc cd, boolean link) {
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
- if (link) {
-- writer.printHyperLink("", (cd == null)?
-- "enum_constant_summary":
-- "enum_constants_inherited_from_class_" +
-- configuration().getClassName(cd),
-- configuration().getText("doclet.navEnum"));
-+ return writer.getHyperLink("", (cd == null)?
-+ "enum_constant_summary":
-+ "enum_constants_inherited_from_class_" +
-+ configuration().getClassName(cd),
-+ writer.getResource("doclet.navEnum"));
- } else {
-- writer.printText("doclet.navEnum");
-+ return writer.getResource("doclet.navEnum");
- }
- }
-
-- protected void printNavDetailLink(boolean link) {
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected void addNavDetailLink(boolean link, Content liNav) {
- if (link) {
-- writer.printHyperLink("", "enum_constant_detail",
-- configuration().getText("doclet.navEnum"));
-+ liNav.addContent(writer.getHyperLink("", "enum_constant_detail",
-+ writer.getResource("doclet.navEnum")));
- } else {
-- writer.printText("doclet.navEnum");
-+ liNav.addContent(writer.getResource("doclet.navEnum"));
- }
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java
-@@ -28,6 +28,7 @@
- import java.io.*;
-
- import com.sun.javadoc.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
-
-@@ -42,8 +43,6 @@
- public class FieldWriterImpl extends AbstractMemberWriter
- implements FieldWriter, MemberSummaryWriter {
-
-- private boolean printedSummaryHeader = false;
--
- public FieldWriterImpl(SubWriterHolderWriter writer, ClassDoc classdoc) {
- super(writer, classdoc);
- }
-@@ -53,177 +52,118 @@
- }
-
- /**
-- * Write the fields summary header for the given class.
-- *
-- * @param classDoc the class the summary belongs to.
-+ * {@inheritDoc}
- */
-- public void writeMemberSummaryHeader(ClassDoc classDoc) {
-- printedSummaryHeader = true;
-- writer.println("<!-- =========== FIELD SUMMARY =========== -->");
-- writer.println();
-- writer.printSummaryHeader(this, classDoc);
-- }
--
-- /**
-- * Write the fields summary footer for the given class.
-- *
-- * @param classDoc the class the summary belongs to.
-- */
-- public void writeMemberSummaryFooter(ClassDoc classDoc) {
-- writer.tableEnd();
-- writer.space();
-- }
--
-- /**
-- * Write the inherited fields summary header for the given class.
-- *
-- * @param classDoc the class the summary belongs to.
-- */
-- public void writeInheritedMemberSummaryHeader(ClassDoc classDoc) {
-- if(! printedSummaryHeader){
-- //We don't want inherited summary to not be under heading.
-- writeMemberSummaryHeader(classDoc);
-- writeMemberSummaryFooter(classDoc);
-- printedSummaryHeader = true;
-- }
-- writer.printInheritedSummaryHeader(this, classDoc);
-+ public Content getMemberSummaryHeader(ClassDoc classDoc,
-+ Content memberSummaryTree) {
-+ memberSummaryTree.addContent(HtmlConstants.START_OF_FIELD_SUMMARY);
-+ Content memberTree = writer.getMemberTreeHeader();
-+ writer.addSummaryHeader(this, classDoc, memberTree);
-+ return memberTree;
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeInheritedMemberSummary(ClassDoc classDoc,
-- ProgramElementDoc field, boolean isFirst, boolean isLast) {
-- writer.printInheritedSummaryMember(this, classDoc, field, isFirst);
-+ public Content getFieldDetailsTreeHeader(ClassDoc classDoc,
-+ Content memberDetailsTree) {
-+ memberDetailsTree.addContent(HtmlConstants.START_OF_FIELD_DETAILS);
-+ Content fieldDetailsTree = writer.getMemberTreeHeader();
-+ fieldDetailsTree.addContent(writer.getMarkerAnchor("field_detail"));
-+ Content heading = HtmlTree.HEADING(HtmlConstants.DETAILS_HEADING,
-+ writer.fieldDetailsLabel);
-+ fieldDetailsTree.addContent(heading);
-+ return fieldDetailsTree;
- }
-
- /**
-- * Write the inherited fields summary footer for the given class.
-- *
-- * @param classDoc the class the summary belongs to.
-+ * {@inheritDoc}
- */
-- public void writeInheritedMemberSummaryFooter(ClassDoc classDoc) {
-- writer.printInheritedSummaryFooter(this, classDoc);
-+ public Content getFieldDocTreeHeader(FieldDoc field,
-+ Content fieldDetailsTree) {
-+ fieldDetailsTree.addContent(
-+ writer.getMarkerAnchor(field.name()));
-+ Content fieldDocTree = writer.getMemberTreeHeader();
-+ Content heading = new HtmlTree(HtmlConstants.MEMBER_HEADING);
-+ heading.addContent(field.name());
-+ fieldDocTree.addContent(heading);
-+ return fieldDocTree;
- }
-
- /**
-- * Write the header for the field documentation.
-- *
-- * @param classDoc the class that the fields belong to.
-+ * {@inheritDoc}
- */
-- public void writeHeader(ClassDoc classDoc, String header) {
-- writer.println();
-- writer.println("<!-- ============ FIELD DETAIL =========== -->");
-- writer.println();
-- writer.anchor("field_detail");
-- writer.printTableHeadingBackground(header);
-- writer.println();
-+ public Content getSignature(FieldDoc field) {
-+ Content pre = new HtmlTree(HtmlTag.PRE);
-+ writer.addAnnotationInfo(field, pre);
-+ addModifiers(field, pre);
-+ Content fieldlink = new RawHtml(writer.getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER,
-+ field.type())));
-+ pre.addContent(fieldlink);
-+ pre.addContent(" ");
-+ if (configuration().linksource) {
-+ Content fieldName = new StringContent(field.name());
-+ writer.addSrcLink(field, fieldName, pre);
-+ } else {
-+ addName(field.name(), pre);
-+ }
-+ return pre;
- }
-
- /**
-- * Write the field header for the given field.
-- *
-- * @param field the field being documented.
-- * @param isFirst the flag to indicate whether or not the field is the
-- * first to be documented.
-+ * {@inheritDoc}
- */
-- public void writeFieldHeader(FieldDoc field, boolean isFirst) {
-- if (! isFirst) {
-- writer.printMemberHeader();
-- writer.println("");
-- }
-- writer.anchor(field.name());
-- writer.h3();
-- writer.print(field.name());
-- writer.h3End();
-+ public void addDeprecated(FieldDoc field, Content fieldDocTree) {
-+ addDeprecatedInfo(field, fieldDocTree);
- }
-
- /**
-- * Write the signature for the given field.
-- *
-- * @param field the field being documented.
-+ * {@inheritDoc}
- */
-- public void writeSignature(FieldDoc field) {
-- writer.pre();
-- writer.writeAnnotationInfo(field);
-- printModifiers(field);
-- writer.printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER,
-- field.type()));
-- print(' ');
-- if (configuration().linksource) {
-- writer.printSrcLink(field, field.name());
-- } else {
-- strong(field.name());
-- }
-- writer.preEnd();
-- assert !writer.getMemberDetailsListPrinted();
-- }
--
-- /**
-- * Write the deprecated output for the given field.
-- *
-- * @param field the field being documented.
-- */
-- public void writeDeprecated(FieldDoc field) {
-- printDeprecated(field);
-- }
--
-- /**
-- * Write the comments for the given field.
-- *
-- * @param field the field being documented.
-- */
-- public void writeComments(FieldDoc field) {
-+ public void addComments(FieldDoc field, Content fieldDocTree) {
- ClassDoc holder = field.containingClass();
- if (field.inlineTags().length > 0) {
-- writer.printMemberDetailsListStartTag();
- if (holder.equals(classdoc) ||
-- (! (holder.isPublic() || Util.isLinkable(holder, configuration())))) {
-- writer.dd();
-- writer.printInlineComment(field);
-- writer.ddEnd();
-+ (! (holder.isPublic() || Util.isLinkable(holder, configuration())))) {
-+ writer.addInlineComment(field, fieldDocTree);
- } else {
-- String classlink = writer.codeText(
-- writer.getDocLink(LinkInfoImpl.CONTEXT_FIELD_DOC_COPY,
-+ Content link = new RawHtml(
-+ writer.getDocLink(LinkInfoImpl.CONTEXT_FIELD_DOC_COPY,
- holder, field,
- holder.isIncluded() ?
- holder.typeName() : holder.qualifiedTypeName(),
-- false));
-- writer.dd();
-- writer.strong(configuration().getText(holder.isClass()?
-- "doclet.Description_From_Class" :
-- "doclet.Description_From_Interface", classlink));
-- writer.ddEnd();
-- writer.dd();
-- writer.printInlineComment(field);
-- writer.ddEnd();
-+ false));
-+ Content codeLink = HtmlTree.CODE(link);
-+ Content strong = HtmlTree.STRONG(holder.isClass()?
-+ writer.descfrmClassLabel : writer.descfrmInterfaceLabel);
-+ strong.addContent(writer.getSpace());
-+ strong.addContent(codeLink);
-+ fieldDocTree.addContent(HtmlTree.DIV(HtmlStyle.block, strong));
-+ writer.addInlineComment(field, fieldDocTree);
- }
- }
- }
-
- /**
-- * Write the tag output for the given field.
-- *
-- * @param field the field being documented.
-+ * {@inheritDoc}
- */
-- public void writeTags(FieldDoc field) {
-- writer.printTags(field);
-+ public void addTags(FieldDoc field, Content fieldDocTree) {
-+ writer.addTagsInfo(field, fieldDocTree);
- }
-
- /**
-- * Write the field footer.
-+ * {@inheritDoc}
- */
-- public void writeFieldFooter() {
-- printMemberFooter();
-+ public Content getFieldDetails(Content fieldDetailsTree) {
-+ return getMemberTree(fieldDetailsTree);
- }
-
- /**
-- * Write the footer for the field documentation.
-- *
-- * @param classDoc the class that the fields belong to.
-+ * {@inheritDoc}
- */
-- public void writeFooter(ClassDoc classDoc) {
-- //No footer to write for field documentation
-+ public Content getFieldDoc(Content fieldDocTree,
-+ boolean isLastContent) {
-+ return getMemberTree(fieldDocTree, isLastContent);
- }
-
- /**
-@@ -237,85 +177,136 @@
- return VisibleMemberMap.FIELDS;
- }
-
-- public void printSummaryLabel() {
-- writer.printText("doclet.Field_Summary");
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addSummaryLabel(Content memberTree) {
-+ Content label = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING,
-+ writer.getResource("doclet.Field_Summary"));
-+ memberTree.addContent(label);
- }
-
-- public void printTableSummary() {
-- writer.tableIndexSummary(configuration().getText("doclet.Member_Table_Summary",
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getTableSummary() {
-+ return configuration().getText("doclet.Member_Table_Summary",
- configuration().getText("doclet.Field_Summary"),
-- configuration().getText("doclet.fields")));
-+ configuration().getText("doclet.fields"));
- }
-
-- public void printSummaryTableHeader(ProgramElementDoc member) {
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getCaption() {
-+ return configuration().getText("doclet.Fields");
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String[] getSummaryTableHeader(ProgramElementDoc member) {
- String[] header = new String[] {
- writer.getModifierTypeHeader(),
- configuration().getText("doclet.0_and_1",
- configuration().getText("doclet.Field"),
- configuration().getText("doclet.Description"))
- };
-- writer.summaryTableHeader(header, "col");
-+ return header;
- }
-
-- public void printSummaryAnchor(ClassDoc cd) {
-- writer.anchor("field_summary");
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
-+ memberTree.addContent(writer.getMarkerAnchor("field_summary"));
- }
-
-- public void printInheritedSummaryAnchor(ClassDoc cd) {
-- writer.anchor("fields_inherited_from_class_" + configuration().getClassName(cd));
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addInheritedSummaryAnchor(ClassDoc cd, Content inheritedTree) {
-+ inheritedTree.addContent(writer.getMarkerAnchor(
-+ "fields_inherited_from_class_" + configuration().getClassName(cd)));
- }
-
-- public void printInheritedSummaryLabel(ClassDoc cd) {
-- String classlink = writer.getPreQualifiedClassLink(
-- LinkInfoImpl.CONTEXT_MEMBER, cd, false);
-- writer.strong();
-- String key = cd.isClass()?
-- "doclet.Fields_Inherited_From_Class" :
-- "doclet.Fields_Inherited_From_Interface";
-- writer.printText(key, classlink);
-- writer.strongEnd();
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addInheritedSummaryLabel(ClassDoc cd, Content inheritedTree) {
-+ Content classLink = new RawHtml(writer.getPreQualifiedClassLink(
-+ LinkInfoImpl.CONTEXT_MEMBER, cd, false));
-+ Content label = new StringContent(cd.isClass() ?
-+ configuration().getText("doclet.Fields_Inherited_From_Class") :
-+ configuration().getText("doclet.Fields_Inherited_From_Interface"));
-+ Content labelHeading = HtmlTree.HEADING(HtmlConstants.INHERITED_SUMMARY_HEADING,
-+ label);
-+ labelHeading.addContent(writer.getSpace());
-+ labelHeading.addContent(classLink);
-+ inheritedTree.addContent(labelHeading);
- }
-
-- protected void writeSummaryLink(int context, ClassDoc cd, ProgramElementDoc member) {
-- writer.strong();
-- writer.printDocLink(context, cd , (MemberDoc) member, member.name(), false);
-- writer.strongEnd();
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected void addSummaryLink(int context, ClassDoc cd, ProgramElementDoc member,
-+ Content tdSummary) {
-+ Content strong = HtmlTree.STRONG(new RawHtml(
-+ writer.getDocLink(context, cd , (MemberDoc) member, member.name(), false)));
-+ Content code = HtmlTree.CODE(strong);
-+ tdSummary.addContent(code);
- }
-
-- protected void writeInheritedSummaryLink(ClassDoc cd,
-- ProgramElementDoc member) {
-- writer.printDocLink(LinkInfoImpl.CONTEXT_MEMBER, cd, (MemberDoc)member,
-- member.name(), false);
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected void addInheritedSummaryLink(ClassDoc cd,
-+ ProgramElementDoc member, Content linksTree) {
-+ linksTree.addContent(new RawHtml(
-+ writer.getDocLink(LinkInfoImpl.CONTEXT_MEMBER, cd, (MemberDoc)member,
-+ member.name(), false)));
- }
-
-- protected void printSummaryType(ProgramElementDoc member) {
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected void addSummaryType(ProgramElementDoc member, Content tdSummaryType) {
- FieldDoc field = (FieldDoc)member;
-- printModifierAndType(field, field.type());
-+ addModifierAndType(field, field.type(), tdSummaryType);
- }
-
-- protected void writeDeprecatedLink(ProgramElementDoc member) {
-- writer.printDocLink(LinkInfoImpl.CONTEXT_MEMBER,
-- (MemberDoc) member, ((FieldDoc)member).qualifiedName(), false);
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected Content getDeprecatedLink(ProgramElementDoc member) {
-+ return writer.getDocLink(LinkInfoImpl.CONTEXT_MEMBER,
-+ (MemberDoc) member, ((FieldDoc)member).qualifiedName());
- }
-
-- protected void printNavSummaryLink(ClassDoc cd, boolean link) {
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
- if (link) {
-- writer.printHyperLink("", (cd == null)?
-- "field_summary":
-- "fields_inherited_from_class_" +
-- configuration().getClassName(cd),
-- configuration().getText("doclet.navField"));
-+ return writer.getHyperLink("", (cd == null)?
-+ "field_summary":
-+ "fields_inherited_from_class_" +
-+ configuration().getClassName(cd),
-+ writer.getResource("doclet.navField"));
- } else {
-- writer.printText("doclet.navField");
-+ return writer.getResource("doclet.navField");
- }
- }
-
-- protected void printNavDetailLink(boolean link) {
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected void addNavDetailLink(boolean link, Content liNav) {
- if (link) {
-- writer.printHyperLink("", "field_detail",
-- configuration().getText("doclet.navField"));
-+ liNav.addContent(writer.getHyperLink("", "field_detail",
-+ writer.getResource("doclet.navField")));
- } else {
-- writer.printText("doclet.navField");
-+ liNav.addContent(writer.getResource("doclet.navField"));
- }
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/FrameOutputWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/FrameOutputWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/FrameOutputWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/FrameOutputWriter.java
-@@ -25,8 +25,10 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.io.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
--import java.io.*;
-+import com.sun.tools.doclets.internal.toolkit.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-
- /**
- * Generate the documentation in the Html "frame" format in the browser. The
-@@ -47,6 +49,8 @@
- */
- int noOfPackages;
-
-+ private final String SCROLL_YES = "yes";
-+
- /**
- * Constructor to construct FrameOutputWriter object.
- *
-@@ -86,82 +90,93 @@
- * as well as warning if browser is not supporting the Html frames.
- */
- protected void generateFrameFile() {
-+ Content frameset = getFrameDetails();
- if (configuration.windowtitle.length() > 0) {
-- printFramesetHeader(configuration.windowtitle, configuration.notimestamp);
-+ printFramesetDocument(configuration.windowtitle, configuration.notimestamp,
-+ frameset);
- } else {
-- printFramesetHeader(configuration.getText("doclet.Generated_Docs_Untitled"),
-- configuration.notimestamp);
-+ printFramesetDocument(configuration.getText("doclet.Generated_Docs_Untitled"),
-+ configuration.notimestamp, frameset);
- }
-- printFrameDetails();
-- printFrameFooter();
- }
-
- /**
-- * Generate the code for issueing the warning for a non-frame capable web
-+ * Add the code for issueing the warning for a non-frame capable web
- * client. Also provide links to the non-frame version documentation.
-+ *
-+ * @param contentTree the content tree to which the non-frames information will be added
- */
-- protected void printFrameWarning() {
-- noFrames();
-- h2();
-- printText("doclet.Frame_Alert");
-- h2End();
-- p();
-- printText("doclet.Frame_Warning_Message");
-- br();
-- printText("doclet.Link_To");
-- printHyperLink(configuration.topFile,
-- configuration.getText("doclet.Non_Frame_Version"));
-- println("");
-- noFramesEnd();
-+ protected void addFrameWarning(Content contentTree) {
-+ Content noframes = new HtmlTree(HtmlTag.NOFRAMES);
-+ Content noScript = HtmlTree.NOSCRIPT(
-+ HtmlTree.DIV(getResource("doclet.No_Script_Message")));
-+ noframes.addContent(noScript);
-+ Content noframesHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
-+ getResource("doclet.Frame_Alert"));
-+ noframes.addContent(noframesHead);
-+ Content p = HtmlTree.P(getResource("doclet.Frame_Warning_Message"));
-+ noframes.addContent(p);
-+ noframes.addContent(new HtmlTree(HtmlTag.BR));
-+ noframes.addContent(getResource("doclet.Link_To"));
-+ Content link = getHyperLink(configuration.topFile,
-+ getResource("doclet.Non_Frame_Version"));
-+ noframes.addContent(link);
-+ contentTree.addContent(noframes);
- }
-
- /**
-- * Print the frame sizes and their contents.
-+ * Get the frame sizes and their contents.
-+ *
-+ * @return a content tree for the frame details
- */
-- protected void printFrameDetails() {
-- // title attribute intentionally made empty so
-- // 508 tests will not flag it as missing
-- frameSet("cols=\"20%,80%\" title=\"\" onLoad=\"top.loadFrames()\"");
-+ protected Content getFrameDetails() {
-+ HtmlTree frameset = HtmlTree.FRAMESET("20%,80%", null, "Documentation frame",
-+ "top.loadFrames()");
- if (noOfPackages <= 1) {
-- printAllClassesFrameTag();
-+ addAllClassesFrameTag(frameset);
- } else if (noOfPackages > 1) {
-- frameSet("rows=\"30%,70%\" title=\"\" onLoad=\"top.loadFrames()\"");
-- printAllPackagesFrameTag();
-- printAllClassesFrameTag();
-- frameSetEnd();
-+ HtmlTree leftFrameset = HtmlTree.FRAMESET(null, "30%,70%", "Left frames",
-+ "top.loadFrames()");
-+ addAllPackagesFrameTag(leftFrameset);
-+ addAllClassesFrameTag(leftFrameset);
-+ frameset.addContent(leftFrameset);
- }
-- printClassFrameTag();
-- printFrameWarning();
-- frameSetEnd();
-+ addClassFrameTag(frameset);
-+ addFrameWarning(frameset);
-+ return frameset;
- }
-
- /**
-- * Print the FRAME tag for the frame that lists all packages
-+ * Add the FRAME tag for the frame that lists all packages.
-+ *
-+ * @param contentTree the content tree to which the information will be added
- */
-- private void printAllPackagesFrameTag() {
-- frame("src=\"overview-frame.html\" name=\"packageListFrame\""
-- + " title=\"" + configuration.getText("doclet.All_Packages") + "\"");
-+ private void addAllPackagesFrameTag(Content contentTree) {
-+ HtmlTree frame = HtmlTree.FRAME("overview-frame.html", "packageListFrame",
-+ configuration.getText("doclet.All_Packages"));
-+ contentTree.addContent(frame);
- }
-
- /**
-- * Print the FRAME tag for the frame that lists all classes
-+ * Add the FRAME tag for the frame that lists all classes.
-+ *
-+ * @param contentTree the content tree to which the information will be added
- */
-- private void printAllClassesFrameTag() {
-- frame("src=\"" + "allclasses-frame.html" + "\""
-- + " name=\"packageFrame\""
-- + " title=\"" + configuration.getText("doclet.All_classes_and_interfaces")
-- + "\"");
-+ private void addAllClassesFrameTag(Content contentTree) {
-+ HtmlTree frame = HtmlTree.FRAME("allclasses-frame.html", "packageFrame",
-+ configuration.getText("doclet.All_classes_and_interfaces"));
-+ contentTree.addContent(frame);
- }
-
- /**
-- * Print the FRAME tag for the frame that describes the class in detail
-+ * Add the FRAME tag for the frame that describes the class in detail.
-+ *
-+ * @param contentTree the content tree to which the information will be added
- */
-- private void printClassFrameTag() {
-- frame("src=\"" + configuration.topFile + "\""
-- + " name=\"classFrame\""
-- + " title=\""
-- + configuration.getText("doclet.Package_class_and_interface_descriptions")
-- + "\" scrolling=\"yes\"");
-+ private void addClassFrameTag(Content contentTree) {
-+ HtmlTree frame = HtmlTree.FRAME(configuration.topFile, "classFrame",
-+ configuration.getText("doclet.Package_class_and_interface_descriptions"),
-+ SCROLL_YES);
-+ contentTree.addContent(frame);
- }
--
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/HelpWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/HelpWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/HelpWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/HelpWriter.java
-@@ -25,8 +25,10 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.io.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
--import java.io.*;
-+import com.sun.tools.doclets.internal.toolkit.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-
- /**
- * Generate the Help File for the generated API documentation. The help file
-@@ -72,159 +74,242 @@
- * Generate the help file contents.
- */
- protected void generateHelpFile() {
-- printHtmlHeader(configuration.getText("doclet.Window_Help_title"),
-- null, true);
-- printTop();
-- navLinks(true); hr();
--
-- printHelpFileContents();
--
-- navLinks(false);
-- printBottom();
-- printBodyHtmlEnd();
-+ String title = configuration.getText("doclet.Window_Help_title");
-+ Content body = getBody(true, getWindowTitle(title));
-+ addTop(body);
-+ addNavLinks(true, body);
-+ addHelpFileContents(body);
-+ addNavLinks(false, body);
-+ addBottom(body);
-+ printHtmlDocument(null, true, body);
- }
-
- /**
-- * Print the help file contents from the resource file. While generating the
-+ * Add the help file contents from the resource file to the content tree. While adding the
- * help file contents it also keeps track of user options. If "-notree"
-- * is used, then the "overview-tree.html" will not get generated and hence
-- * help information also will not get generated.
-+ * is used, then the "overview-tree.html" will not get added and hence
-+ * help information also will not get added.
-+ *
-+ * @param contentTree the content tree to which the help file contents will be added
- */
-- protected void printHelpFileContents() {
-- center(); h1(); printText("doclet.Help_line_1"); h1End(); centerEnd();
-- printText("doclet.Help_line_2");
-+ protected void addHelpFileContents(Content contentTree) {
-+ Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, false, HtmlStyle.title,
-+ getResource("doclet.Help_line_1"));
-+ Content div = HtmlTree.DIV(HtmlStyle.header, heading);
-+ Content line2 = HtmlTree.P(HtmlStyle.subTitle,
-+ getResource("doclet.Help_line_2"));
-+ div.addContent(line2);
-+ contentTree.addContent(div);
-+ HtmlTree ul = new HtmlTree(HtmlTag.UL);
-+ ul.addStyle(HtmlStyle.blockList);
- if (configuration.createoverview) {
-- h3(); printText("doclet.Overview"); h3End();
-- blockquote(); p();
-- printText("doclet.Help_line_3",
-- getHyperLink("overview-summary.html",
-- configuration.getText("doclet.Overview")));
-- blockquoteEnd();
-+ Content overviewHeading = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
-+ getResource("doclet.Overview"));
-+ Content liOverview = HtmlTree.LI(HtmlStyle.blockList, overviewHeading);
-+ Content line3 = getResource("doclet.Help_line_3",
-+ getHyperLinkString("overview-summary.html",
-+ configuration.getText("doclet.Overview")));
-+ Content overviewPara = HtmlTree.P(line3);
-+ liOverview.addContent(overviewPara);
-+ ul.addContent(liOverview);
- }
-- h3(); printText("doclet.Package"); h3End();
-- blockquote(); p(); printText("doclet.Help_line_4");
-- ul();
-- li(); printText("doclet.Interfaces_Italic");
-- li(); printText("doclet.Classes");
-- li(); printText("doclet.Enums");
-- li(); printText("doclet.Exceptions");
-- li(); printText("doclet.Errors");
-- li(); printText("doclet.AnnotationTypes");
-- ulEnd();
-- blockquoteEnd();
-- h3(); printText("doclet.Help_line_5"); h3End();
-- blockquote(); p(); printText("doclet.Help_line_6");
-- ul();
-- li(); printText("doclet.Help_line_7");
-- li(); printText("doclet.Help_line_8");
-- li(); printText("doclet.Help_line_9");
-- li(); printText("doclet.Help_line_10");
-- li(); printText("doclet.Help_line_11");
-- li(); printText("doclet.Help_line_12");
-- p();
-- li(); printText("doclet.Nested_Class_Summary");
-- li(); printText("doclet.Field_Summary");
-- li(); printText("doclet.Constructor_Summary");
-- li(); printText("doclet.Method_Summary");
-- p();
-- li(); printText("doclet.Field_Detail");
-- li(); printText("doclet.Constructor_Detail");
-- li(); printText("doclet.Method_Detail");
-- ulEnd();
-- printText("doclet.Help_line_13");
-- blockquoteEnd();
--
-+ Content packageHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
-+ getResource("doclet.Package"));
-+ Content liPackage = HtmlTree.LI(HtmlStyle.blockList, packageHead);
-+ Content line4 = getResource("doclet.Help_line_4");
-+ Content packagePara = HtmlTree.P(line4);
-+ liPackage.addContent(packagePara);
-+ HtmlTree ulPackage = new HtmlTree(HtmlTag.UL);
-+ ulPackage.addContent(HtmlTree.LI(
-+ getResource("doclet.Interfaces_Italic")));
-+ ulPackage.addContent(HtmlTree.LI(
-+ getResource("doclet.Classes")));
-+ ulPackage.addContent(HtmlTree.LI(
-+ getResource("doclet.Enums")));
-+ ulPackage.addContent(HtmlTree.LI(
-+ getResource("doclet.Exceptions")));
-+ ulPackage.addContent(HtmlTree.LI(
-+ getResource("doclet.Errors")));
-+ ulPackage.addContent(HtmlTree.LI(
-+ getResource("doclet.AnnotationTypes")));
-+ liPackage.addContent(ulPackage);
-+ ul.addContent(liPackage);
-+ Content classHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
-+ getResource("doclet.Help_line_5"));
-+ Content liClass = HtmlTree.LI(HtmlStyle.blockList, classHead);
-+ Content line6 = getResource("doclet.Help_line_6");
-+ Content classPara = HtmlTree.P(line6);
-+ liClass.addContent(classPara);
-+ HtmlTree ul1 = new HtmlTree(HtmlTag.UL);
-+ ul1.addContent(HtmlTree.LI(
-+ getResource("doclet.Help_line_7")));
-+ ul1.addContent(HtmlTree.LI(
-+ getResource("doclet.Help_line_8")));
-+ ul1.addContent(HtmlTree.LI(
-+ getResource("doclet.Help_line_9")));
-+ ul1.addContent(HtmlTree.LI(
-+ getResource("doclet.Help_line_10")));
-+ ul1.addContent(HtmlTree.LI(
-+ getResource("doclet.Help_line_11")));
-+ ul1.addContent(HtmlTree.LI(
-+ getResource("doclet.Help_line_12")));
-+ liClass.addContent(ul1);
-+ HtmlTree ul2 = new HtmlTree(HtmlTag.UL);
-+ ul2.addContent(HtmlTree.LI(
-+ getResource("doclet.Nested_Class_Summary")));
-+ ul2.addContent(HtmlTree.LI(
-+ getResource("doclet.Field_Summary")));
-+ ul2.addContent(HtmlTree.LI(
-+ getResource("doclet.Constructor_Summary")));
-+ ul2.addContent(HtmlTree.LI(
-+ getResource("doclet.Method_Summary")));
-+ liClass.addContent(ul2);
-+ HtmlTree ul3 = new HtmlTree(HtmlTag.UL);
-+ ul3.addContent(HtmlTree.LI(
-+ getResource("doclet.Field_Detail")));
-+ ul3.addContent(HtmlTree.LI(
-+ getResource("doclet.Constructor_Detail")));
-+ ul3.addContent(HtmlTree.LI(
-+ getResource("doclet.Method_Detail")));
-+ liClass.addContent(ul3);
-+ Content line13 = getResource("doclet.Help_line_13");
-+ Content para = HtmlTree.P(line13);
-+ liClass.addContent(para);
-+ ul.addContent(liClass);
- //Annotation Types
-- blockquoteEnd();
-- h3(); printText("doclet.AnnotationType"); h3End();
-- blockquote(); p(); printText("doclet.Help_annotation_type_line_1");
-- ul();
-- li(); printText("doclet.Help_annotation_type_line_2");
-- li(); printText("doclet.Help_annotation_type_line_3");
-- li(); printText("doclet.Annotation_Type_Required_Member_Summary");
-- li(); printText("doclet.Annotation_Type_Optional_Member_Summary");
-- li(); printText("doclet.Annotation_Type_Member_Detail");
-- ulEnd();
-- blockquoteEnd();
--
-+ Content aHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
-+ getResource("doclet.AnnotationType"));
-+ Content liAnnotation = HtmlTree.LI(HtmlStyle.blockList, aHead);
-+ Content aline1 = getResource("doclet.Help_annotation_type_line_1");
-+ Content aPara = HtmlTree.P(aline1);
-+ liAnnotation.addContent(aPara);
-+ HtmlTree aul = new HtmlTree(HtmlTag.UL);
-+ aul.addContent(HtmlTree.LI(
-+ getResource("doclet.Help_annotation_type_line_2")));
-+ aul.addContent(HtmlTree.LI(
-+ getResource("doclet.Help_annotation_type_line_3")));
-+ aul.addContent(HtmlTree.LI(
-+ getResource("doclet.Annotation_Type_Required_Member_Summary")));
-+ aul.addContent(HtmlTree.LI(
-+ getResource("doclet.Annotation_Type_Optional_Member_Summary")));
-+ aul.addContent(HtmlTree.LI(
-+ getResource("doclet.Annotation_Type_Member_Detail")));
-+ liAnnotation.addContent(aul);
-+ ul.addContent(liAnnotation);
- //Enums
-- blockquoteEnd();
-- h3(); printText("doclet.Enum"); h3End();
-- blockquote(); p(); printText("doclet.Help_enum_line_1");
-- ul();
-- li(); printText("doclet.Help_enum_line_2");
-- li(); printText("doclet.Help_enum_line_3");
-- li(); printText("doclet.Enum_Constant_Summary");
-- li(); printText("doclet.Enum_Constant_Detail");
-- ulEnd();
-- blockquoteEnd();
--
-+ Content enumHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
-+ getResource("doclet.Enum"));
-+ Content liEnum = HtmlTree.LI(HtmlStyle.blockList, enumHead);
-+ Content eline1 = getResource("doclet.Help_enum_line_1");
-+ Content enumPara = HtmlTree.P(eline1);
-+ liEnum.addContent(enumPara);
-+ HtmlTree eul = new HtmlTree(HtmlTag.UL);
-+ eul.addContent(HtmlTree.LI(
-+ getResource("doclet.Help_enum_line_2")));
-+ eul.addContent(HtmlTree.LI(
-+ getResource("doclet.Help_enum_line_3")));
-+ eul.addContent(HtmlTree.LI(
-+ getResource("doclet.Enum_Constant_Summary")));
-+ eul.addContent(HtmlTree.LI(
-+ getResource("doclet.Enum_Constant_Detail")));
-+ liEnum.addContent(eul);
-+ ul.addContent(liEnum);
- if (configuration.classuse) {
-- h3(); printText("doclet.Help_line_14"); h3End();
-- blockquote();
-- printText("doclet.Help_line_15");
-- blockquoteEnd();
-+ Content useHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
-+ getResource("doclet.Help_line_14"));
-+ Content liUse = HtmlTree.LI(HtmlStyle.blockList, useHead);
-+ Content line15 = getResource("doclet.Help_line_15");
-+ Content usePara = HtmlTree.P(line15);
-+ liUse.addContent(usePara);
-+ ul.addContent(liUse);
- }
- if (configuration.createtree) {
-- h3(); printText("doclet.Help_line_16"); h3End();
-- blockquote();
-- printText("doclet.Help_line_17_with_tree_link",
-- getHyperLink("overview-tree.html",
-- configuration.getText("doclet.Class_Hierarchy")));
-- ul();
-- li(); printText("doclet.Help_line_18");
-- li(); printText("doclet.Help_line_19");
-- ulEnd();
-- blockquoteEnd();
-+ Content treeHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
-+ getResource("doclet.Help_line_16"));
-+ Content liTree = HtmlTree.LI(HtmlStyle.blockList, treeHead);
-+ Content line17 = getResource("doclet.Help_line_17_with_tree_link",
-+ getHyperLinkString("overview-tree.html",
-+ configuration.getText("doclet.Class_Hierarchy")));
-+ Content treePara = HtmlTree.P(line17);
-+ liTree.addContent(treePara);
-+ HtmlTree tul = new HtmlTree(HtmlTag.UL);
-+ tul.addContent(HtmlTree.LI(
-+ getResource("doclet.Help_line_18")));
-+ tul.addContent(HtmlTree.LI(
-+ getResource("doclet.Help_line_19")));
-+ liTree.addContent(tul);
-+ ul.addContent(liTree);
- }
- if (!(configuration.nodeprecatedlist ||
- configuration.nodeprecated)) {
-- h3(); printText("doclet.Deprecated_API"); h3End();
-- blockquote();
-- printText("doclet.Help_line_20_with_deprecated_api_link",
-- getHyperLink("deprecated-list.html",
-- configuration.getText("doclet.Deprecated_API")));
-- blockquoteEnd();
-+ Content dHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
-+ getResource("doclet.Deprecated_API"));
-+ Content liDeprecated = HtmlTree.LI(HtmlStyle.blockList, dHead);
-+ Content line20 = getResource("doclet.Help_line_20_with_deprecated_api_link",
-+ getHyperLinkString("deprecated-list.html",
-+ configuration.getText("doclet.Deprecated_API")));
-+ Content dPara = HtmlTree.P(line20);
-+ liDeprecated.addContent(dPara);
-+ ul.addContent(liDeprecated);
- }
- if (configuration.createindex) {
- String indexlink;
- if (configuration.splitindex) {
-- indexlink = getHyperLink("index-files/index-1.html",
-- configuration.getText("doclet.Index"));
-+ indexlink = getHyperLinkString("index-files/index-1.html",
-+ configuration.getText("doclet.Index"));
- } else {
-- indexlink = getHyperLink("index-all.html",
-- configuration.getText("doclet.Index"));
-+ indexlink = getHyperLinkString("index-all.html",
-+ configuration.getText("doclet.Index"));
- }
-- h3(); printText("doclet.Help_line_21"); h3End();
-- blockquote();
-- printText("doclet.Help_line_22", indexlink);
-- blockquoteEnd();
-+ Content indexHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
-+ getResource("doclet.Help_line_21"));
-+ Content liIndex = HtmlTree.LI(HtmlStyle.blockList, indexHead);
-+ Content line22 = getResource("doclet.Help_line_22", indexlink);
-+ Content indexPara = HtmlTree.P(line22);
-+ liIndex.addContent(indexPara);
-+ ul.addContent(liIndex);
- }
-- h3(); printText("doclet.Help_line_23"); h3End();
-- printText("doclet.Help_line_24");
-- h3(); printText("doclet.Help_line_25"); h3End();
-- printText("doclet.Help_line_26"); p();
--
-- h3(); printText("doclet.Serialized_Form"); h3End();
-- printText("doclet.Help_line_27"); p();
--
-- h3(); printText("doclet.Constants_Summary"); h3End();
-- printText("doclet.Help_line_28"); p();
--
-- font("-1"); em();
-- printText("doclet.Help_line_29");
-- emEnd(); fontEnd(); br();
-- hr();
-+ Content prevHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
-+ getResource("doclet.Help_line_23"));
-+ Content liPrev = HtmlTree.LI(HtmlStyle.blockList, prevHead);
-+ Content line24 = getResource("doclet.Help_line_24");
-+ Content prevPara = HtmlTree.P(line24);
-+ liPrev.addContent(prevPara);
-+ ul.addContent(liPrev);
-+ Content frameHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
-+ getResource("doclet.Help_line_25"));
-+ Content liFrame = HtmlTree.LI(HtmlStyle.blockList, frameHead);
-+ Content line26 = getResource("doclet.Help_line_26");
-+ Content framePara = HtmlTree.P(line26);
-+ liFrame.addContent(framePara);
-+ ul.addContent(liFrame);
-+ Content sHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
-+ getResource("doclet.Serialized_Form"));
-+ Content liSerial = HtmlTree.LI(HtmlStyle.blockList, sHead);
-+ Content line27 = getResource("doclet.Help_line_27");
-+ Content serialPara = HtmlTree.P(line27);
-+ liSerial.addContent(serialPara);
-+ ul.addContent(liSerial);
-+ Content constHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
-+ getResource("doclet.Constants_Summary"));
-+ Content liConst = HtmlTree.LI(HtmlStyle.blockList, constHead);
-+ Content line28 = getResource("doclet.Help_line_28");
-+ Content constPara = HtmlTree.P(line28);
-+ liConst.addContent(constPara);
-+ ul.addContent(liConst);
-+ Content divContent = HtmlTree.DIV(HtmlStyle.contentContainer, ul);
-+ Content line29 = HtmlTree.EM(getResource("doclet.Help_line_29"));
-+ divContent.addContent(line29);
-+ contentTree.addContent(divContent);
- }
-
- /**
-- * Highlight the word "Help" in the navigation bar as this is the help file.
-+ * Get the help label.
-+ *
-+ * @return a content tree for the help label
- */
-- protected void navLinkHelp() {
-- navCellRevStart();
-- fontStyle("NavBarFont1Rev");
-- strongText("doclet.Help");
-- fontEnd();
-- navCellEnd();
-+ protected Content getNavLinkHelp() {
-+ Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, helpLabel);
-+ return li;
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDoclet.java b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDoclet.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDoclet.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDoclet.java
-@@ -144,8 +144,11 @@
- !configuration.nohelp) {
- HelpWriter.generate(configuration);
- }
-+ // If a stylesheet file is not specified, copy the default stylesheet.
- if (configuration.stylesheetfile.length() == 0) {
-- StylesheetWriter.generate(configuration);
-+ Util.copyFile(configuration, "stylesheet.css", Util.RESOURCESDIR,
-+ (configdestdir.isEmpty()) ?
-+ System.getProperty("user.dir") : configdestdir, false);
- }
- }
-
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java
-@@ -88,6 +88,11 @@
- public ConfigurationImpl configuration;
-
- /**
-+ * To check whether annotation heading is printed or not.
-+ */
-+ protected boolean printedAnnotationHeading = false;
-+
-+ /**
- * Constructor to construct the HtmlStandardWriter object.
- *
- * @param filename File to be generated.
-@@ -169,7 +174,7 @@
- // Append slash if next character is not a slash
- if (relativepathNoSlash.length() > 0 && previndex < htmlstr.length()
- && htmlstr.charAt(previndex) != '/') {
-- buf.append(DirectoryManager.URL_FILE_SEPERATOR);
-+ buf.append(DirectoryManager.URL_FILE_SEPARATOR);
- }
- }
- return buf.toString();
-@@ -192,17 +197,47 @@
- println(" <!--");
- println(" if(window==top) {");
- println(" document.writeln('"
-- + getHyperLink(link, where, label, strong, "", "", target) + "');");
-+ + getHyperLinkString(link, where, label, strong, "", "", target) + "');");
- println(" }");
- println(" //-->");
- scriptEnd();
- noScript();
-- println(" " + getHyperLink(link, where, label, strong, "", "", target));
-+ println(" " + getHyperLinkString(link, where, label, strong, "", "", target));
- noScriptEnd();
- println(DocletConstants.NL);
- }
-
-- private void printMethodInfo(MethodDoc method) {
-+ /**
-+ * Get the script to show or hide the All classes link.
-+ *
-+ * @param id id of the element to show or hide
-+ * @return a content tree for the script
-+ */
-+ public Content getAllClassesLinkScript(String id) {
-+ HtmlTree script = new HtmlTree(HtmlTag.SCRIPT);
-+ script.addAttr(HtmlAttr.TYPE, "text/javascript");
-+ String scriptCode = "<!--\n" +
-+ " allClassesLink = document.getElementById(\"" + id + "\");\n" +
-+ " if(window==top) {\n" +
-+ " allClassesLink.style.display = \"block\";\n" +
-+ " }\n" +
-+ " else {\n" +
-+ " allClassesLink.style.display = \"none\";\n" +
-+ " }\n" +
-+ " //-->\n";
-+ Content scriptContent = new RawHtml(scriptCode);
-+ script.addContent(scriptContent);
-+ Content div = HtmlTree.DIV(script);
-+ return div;
-+ }
-+
-+ /**
-+ * Add method information.
-+ *
-+ * @param method the method to be documented
-+ * @param dl the content tree to which the method information will be added
-+ */
-+ private void addMethodInfo(MethodDoc method, Content dl) {
- ClassDoc[] intfacs = method.containingClass().interfaces();
- MethodDoc overriddenMethod = method.overriddenMethod();
- // Check whether there is any implementation or overridden info to be
-@@ -211,44 +246,38 @@
- if ((intfacs.length > 0 &&
- new ImplementedMethods(method, this.configuration).build().length > 0) ||
- overriddenMethod != null) {
-- printMemberDetailsListStartTag();
-- dd();
-- printTagsInfoHeader();
-- MethodWriterImpl.printImplementsInfo(this, method);
-+ MethodWriterImpl.addImplementsInfo(this, method, dl);
- if (overriddenMethod != null) {
-- MethodWriterImpl.printOverridden(this,
-- method.overriddenType(), overriddenMethod);
-+ MethodWriterImpl.addOverridden(this,
-+ method.overriddenType(), overriddenMethod, dl);
- }
-- printTagsInfoFooter();
-- ddEnd();
- }
- }
-
-- protected void printTags(Doc doc) {
-- if(configuration.nocomment){
-+ /**
-+ * Adds the tags information.
-+ *
-+ * @param doc the doc for which the tags will be generated
-+ * @param htmltree the documentation tree to which the tags will be added
-+ */
-+ protected void addTagsInfo(Doc doc, Content htmltree) {
-+ if (configuration.nocomment) {
- return;
- }
-+ Content dl = new HtmlTree(HtmlTag.DL);
- if (doc instanceof MethodDoc) {
-- printMethodInfo((MethodDoc) doc);
-+ addMethodInfo((MethodDoc) doc, dl);
- }
- TagletOutputImpl output = new TagletOutputImpl("");
- TagletWriter.genTagOuput(configuration.tagletManager, doc,
- configuration.tagletManager.getCustomTags(doc),
- getTagletWriterInstance(false), output);
- String outputString = output.toString().trim();
-- // For RootDoc and ClassDoc, this section is not the definition description
-- // but the start of definition list.
- if (!outputString.isEmpty()) {
-- if (!(doc instanceof RootDoc || doc instanceof ClassDoc)) {
-- printMemberDetailsListStartTag();
-- dd();
-- }
-- printTagsInfoHeader();
-- print(outputString);
-- printTagsInfoFooter();
-- if (!(doc instanceof RootDoc || doc instanceof ClassDoc))
-- ddEnd();
-+ Content resultString = new RawHtml(outputString);
-+ dl.addContent(resultString);
- }
-+ htmltree.addContent(dl);
- }
-
- /**
-@@ -284,17 +313,16 @@
- }
-
- /**
-- * Print Package link, with target frame.
-+ * Get Package link, with target frame.
- *
-- * @param pd The link will be to the "package-summary.html" page for this
-- * package.
-- * @param target Name of the target frame.
-- * @param label Tag for the link.
-+ * @param pd The link will be to the "package-summary.html" page for this package
-+ * @param target name of the target frame
-+ * @param label tag for the link
-+ * @return a content for the target package link
- */
-- public void printTargetPackageLink(PackageDoc pd, String target,
-- String label) {
-- print(getHyperLink(pathString(pd, "package-summary.html"), "", label,
-- false, "", "", target));
-+ public Content getTargetPackageLink(PackageDoc pd, String target,
-+ Content label) {
-+ return getHyperLink(pathString(pd, "package-summary.html"), "", label, "", target);
- }
-
- /**
-@@ -358,6 +386,64 @@
- }
-
- /**
-+ * Generates the HTML document tree and prints it out.
-+ *
-+ * @param metakeywords Array of String keywords for META tag. Each element
-+ * of the array is assigned to a separate META tag.
-+ * Pass in null for no array
-+ * @param includeScript true if printing windowtitle script
-+ * false for files that appear in the left-hand frames
-+ * @param body the body htmltree to be included in the document
-+ */
-+ public void printHtmlDocument(String[] metakeywords, boolean includeScript,
-+ Content body) {
-+ Content htmlDocType = DocType.Transitional();
-+ Content htmlComment = new Comment(configuration.getText("doclet.New_Page"));
-+ Content head = new HtmlTree(HtmlTag.HEAD);
-+ if (!configuration.notimestamp) {
-+ Content headComment = new Comment("Generated by javadoc (version " +
-+ ConfigurationImpl.BUILD_DATE + ") on " + today());
-+ head.addContent(headComment);
-+ }
-+ if (configuration.charset.length() > 0) {
-+ Content meta = HtmlTree.META("Content-Type", "text/html",
-+ configuration.charset);
-+ head.addContent(meta);
-+ }
-+ head.addContent(getTitle());
-+ if (!configuration.notimestamp) {
-+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
-+ Content meta = HtmlTree.META("date", dateFormat.format(new Date()));
-+ head.addContent(meta);
-+ }
-+ if (metakeywords != null) {
-+ for (int i=0; i < metakeywords.length; i++) {
-+ Content meta = HtmlTree.META("keywords", metakeywords[i]);
-+ head.addContent(meta);
-+ }
-+ }
-+ head.addContent(getStyleSheetProperties());
-+ Content htmlTree = HtmlTree.HTML(configuration.getLocale().getLanguage(),
-+ head, body);
-+ Content htmlDocument = new HtmlDocument(htmlDocType,
-+ htmlComment, htmlTree);
-+ print(htmlDocument.toString());
-+ }
-+
-+ /**
-+ * Get the window title.
-+ *
-+ * @param title the title string to construct the complete window title
-+ * @return the window title string
-+ */
-+ public String getWindowTitle(String title) {
-+ if (configuration.windowtitle.length() > 0) {
-+ title += " (" + configuration.windowtitle + ")";
-+ }
-+ return title;
-+ }
-+
-+ /**
- * Print user specified header and the footer.
- *
- * @param header if true print the user provided header else print the
-@@ -378,6 +464,28 @@
- }
-
- /**
-+ * Get user specified header and the footer.
-+ *
-+ * @param header if true print the user provided header else print the
-+ * user provided footer.
-+ */
-+ public Content getUserHeaderFooter(boolean header) {
-+ String content;
-+ if (header) {
-+ content = replaceDocRootDir(configuration.header);
-+ } else {
-+ if (configuration.footer.length() != 0) {
-+ content = replaceDocRootDir(configuration.footer);
-+ } else {
-+ content = replaceDocRootDir(configuration.header);
-+ }
-+ }
-+ Content rawContent = new RawHtml(content);
-+ Content em = HtmlTree.EM(rawContent);
-+ return em;
-+ }
-+
-+ /**
- * Print the user specified top.
- */
- public void printTop() {
-@@ -386,6 +494,16 @@
- }
-
- /**
-+ * Adds the user specified top.
-+ *
-+ * @param body the content tree to which user specified top will be added
-+ */
-+ public void addTop(Content body) {
-+ Content top = new RawHtml(replaceDocRootDir(configuration.top));
-+ body.addContent(top);
-+ }
-+
-+ /**
- * Print the user specified bottom.
- */
- public void printBottom() {
-@@ -394,6 +512,18 @@
- }
-
- /**
-+ * Adds the user specified bottom.
-+ *
-+ * @param body the content tree to which user specified bottom will be added
-+ */
-+ public void addBottom(Content body) {
-+ Content bottom = new RawHtml(replaceDocRootDir(configuration.bottom));
-+ Content small = HtmlTree.SMALL(bottom);
-+ Content p = HtmlTree.P(HtmlStyle.legalCopy, small);
-+ body.addContent(p);
-+ }
-+
-+ /**
- * Print the navigation bar for the Html page at the top and and the bottom.
- *
- * @param header If true print navigation bar at the top of the page else
-@@ -406,13 +536,13 @@
- println(DocletConstants.NL + "<!-- ========= START OF TOP NAVBAR ======= -->");
- anchor("navbar_top");
- println();
-- print(getHyperLink("", "skip-navbar_top", "", false, "",
-+ print(getHyperLinkString("", "skip-navbar_top", "", false, "",
- configuration.getText("doclet.Skip_navigation_links"), ""));
- } else {
- println(DocletConstants.NL + "<!-- ======= START OF BOTTOM NAVBAR ====== -->");
- anchor("navbar_bottom");
- println();
-- print(getHyperLink("", "skip-navbar_bottom", "", false, "",
-+ print(getHyperLinkString("", "skip-navbar_bottom", "", false, "",
- configuration.getText("doclet.Skip_navigation_links"), ""));
- }
- table(0, "100%", 1, 0);
-@@ -516,6 +646,97 @@
- }
-
- /**
-+ * Adds the navigation bar for the Html page at the top and and the bottom.
-+ *
-+ * @param header If true print navigation bar at the top of the page else
-+ * @param body the HtmlTree to which the nav links will be added
-+ */
-+ protected void addNavLinks(boolean header, Content body) {
-+ if (!configuration.nonavbar) {
-+ String allClassesId = "allclasses_";
-+ HtmlTree navDiv = new HtmlTree(HtmlTag.DIV);
-+ if (header) {
-+ body.addContent(HtmlConstants.START_OF_TOP_NAVBAR);
-+ navDiv.addStyle(HtmlStyle.topNav);
-+ allClassesId += "navbar_top";
-+ Content a = getMarkerAnchor("navbar_top");
-+ navDiv.addContent(a);
-+ Content skipLinkContent = getHyperLink("",
-+ "skip-navbar_top", HtmlTree.EMPTY, configuration.getText(
-+ "doclet.Skip_navigation_links"), "");
-+ navDiv.addContent(skipLinkContent);
-+ } else {
-+ body.addContent(HtmlConstants.START_OF_BOTTOM_NAVBAR);
-+ navDiv.addStyle(HtmlStyle.bottomNav);
-+ allClassesId += "navbar_bottom";
-+ Content a = getMarkerAnchor("navbar_bottom");
-+ navDiv.addContent(a);
-+ Content skipLinkContent = getHyperLink("",
-+ "skip-navbar_bottom", HtmlTree.EMPTY, configuration.getText(
-+ "doclet.Skip_navigation_links"), "");
-+ navDiv.addContent(skipLinkContent);
-+ }
-+ if (header) {
-+ navDiv.addContent(getMarkerAnchor("navbar_top_firstrow"));
-+ } else {
-+ navDiv.addContent(getMarkerAnchor("navbar_bottom_firstrow"));
-+ }
-+ HtmlTree navList = new HtmlTree(HtmlTag.UL);
-+ navList.addStyle(HtmlStyle.navList);
-+ navList.addAttr(HtmlAttr.TITLE, "Navigation");
-+ if (configuration.createoverview) {
-+ navList.addContent(getNavLinkContents());
-+ }
-+ if (configuration.packages.length == 1) {
-+ navList.addContent(getNavLinkPackage(configuration.packages[0]));
-+ } else if (configuration.packages.length > 1) {
-+ navList.addContent(getNavLinkPackage());
-+ }
-+ navList.addContent(getNavLinkClass());
-+ if(configuration.classuse) {
-+ navList.addContent(getNavLinkClassUse());
-+ }
-+ if(configuration.createtree) {
-+ navList.addContent(getNavLinkTree());
-+ }
-+ if(!(configuration.nodeprecated ||
-+ configuration.nodeprecatedlist)) {
-+ navList.addContent(getNavLinkDeprecated());
-+ }
-+ if(configuration.createindex) {
-+ navList.addContent(getNavLinkIndex());
-+ }
-+ if (!configuration.nohelp) {
-+ navList.addContent(getNavLinkHelp());
-+ }
-+ navDiv.addContent(navList);
-+ Content aboutDiv = HtmlTree.DIV(HtmlStyle.aboutLanguage, getUserHeaderFooter(header));
-+ navDiv.addContent(aboutDiv);
-+ body.addContent(navDiv);
-+ Content ulNav = HtmlTree.UL(HtmlStyle.navList, getNavLinkPrevious());
-+ ulNav.addContent(getNavLinkNext());
-+ Content subDiv = HtmlTree.DIV(HtmlStyle.subNav, ulNav);
-+ Content ulFrames = HtmlTree.UL(HtmlStyle.navList, getNavShowLists());
-+ ulFrames.addContent(getNavHideLists(filename));
-+ subDiv.addContent(ulFrames);
-+ HtmlTree ulAllClasses = HtmlTree.UL(HtmlStyle.navList, getNavLinkClassIndex());
-+ ulAllClasses.addAttr(HtmlAttr.ID, allClassesId.toString());
-+ subDiv.addContent(ulAllClasses);
-+ subDiv.addContent(getAllClassesLinkScript(allClassesId.toString()));
-+ addSummaryDetailLinks(subDiv);
-+ if (header) {
-+ subDiv.addContent(getMarkerAnchor("skip-navbar_top"));
-+ body.addContent(subDiv);
-+ body.addContent(HtmlConstants.END_OF_TOP_NAVBAR);
-+ } else {
-+ subDiv.addContent(getMarkerAnchor("skip-navbar_bottom"));
-+ body.addContent(subDiv);
-+ body.addContent(HtmlConstants.END_OF_BOTTOM_NAVBAR);
-+ }
-+ }
-+ }
-+
-+ /**
- * Print the word "NEXT" to indicate that no link is available. Override
- * this method to customize next link.
- */
-@@ -524,6 +745,16 @@
- }
-
- /**
-+ * Get the word "NEXT" to indicate that no link is available. Override
-+ * this method to customize next link.
-+ *
-+ * @return a content tree for the link
-+ */
-+ protected Content getNavLinkNext() {
-+ return getNavLinkNext(null);
-+ }
-+
-+ /**
- * Print the word "PREV" to indicate that no link is available. Override
- * this method to customize prev link.
- */
-@@ -532,12 +763,28 @@
- }
-
- /**
-+ * Get the word "PREV" to indicate that no link is available. Override
-+ * this method to customize prev link.
-+ *
-+ * @return a content tree for the link
-+ */
-+ protected Content getNavLinkPrevious() {
-+ return getNavLinkPrevious(null);
-+ }
-+
-+ /**
- * Do nothing. This is the default method.
- */
- protected void printSummaryDetailLinks() {
- }
-
- /**
-+ * Do nothing. This is the default method.
-+ */
-+ protected void addSummaryDetailLinks(Content navDiv) {
-+ }
-+
-+ /**
- * Print link to the "overview-summary.html" page.
- */
- protected void navLinkContents() {
-@@ -548,6 +795,18 @@
- }
-
- /**
-+ * Get link to the "overview-summary.html" page.
-+ *
-+ * @return a content tree for the link
-+ */
-+ protected Content getNavLinkContents() {
-+ Content linkContent = getHyperLink(relativePath +
-+ "overview-summary.html", "", overviewLabel, "", "");
-+ Content li = HtmlTree.LI(linkContent);
-+ return li;
-+ }
-+
-+ /**
- * Description for a cell in the navigation bar.
- */
- protected void navCellStart() {
-@@ -588,6 +847,19 @@
- }
-
- /**
-+ * Get link to the "package-summary.html" page for the package passed.
-+ *
-+ * @param pkg Package to which link will be generated
-+ * @return a content tree for the link
-+ */
-+ protected Content getNavLinkPackage(PackageDoc pkg) {
-+ Content linkContent = getPackageLink(pkg,
-+ packageLabel);
-+ Content li = HtmlTree.LI(linkContent);
-+ return li;
-+ }
-+
-+ /**
- * Print the word "Package" in the navigation bar cell, to indicate that
- * link is not available here.
- */
-@@ -600,6 +872,16 @@
- }
-
- /**
-+ * Get the word "Package" , to indicate that link is not available here.
-+ *
-+ * @return a content tree for the link
-+ */
-+ protected Content getNavLinkPackage() {
-+ Content li = HtmlTree.LI(packageLabel);
-+ return li;
-+ }
-+
-+ /**
- * Print the word "Use" in the navigation bar cell, to indicate that link
- * is not available.
- */
-@@ -612,6 +894,16 @@
- }
-
- /**
-+ * Get the word "Use", to indicate that link is not available.
-+ *
-+ * @return a content tree for the link
-+ */
-+ protected Content getNavLinkClassUse() {
-+ Content li = HtmlTree.LI(useLabel);
-+ return li;
-+ }
-+
-+ /**
- * Print link for previous file.
- *
- * @param prev File name for the prev link.
-@@ -626,6 +918,22 @@
- }
-
- /**
-+ * Get link for previous file.
-+ *
-+ * @param prev File name for the prev link
-+ * @return a content tree for the link
-+ */
-+ public Content getNavLinkPrevious(String prev) {
-+ Content li;
-+ if (prev != null) {
-+ li = HtmlTree.LI(getHyperLink(prev, "", prevLabel, "", ""));
-+ }
-+ else
-+ li = HtmlTree.LI(prevLabel);
-+ return li;
-+ }
-+
-+ /**
- * Print link for next file. If next is null, just print the label
- * without linking it anywhere.
- *
-@@ -641,16 +949,46 @@
- }
-
- /**
-+ * Get link for next file. If next is null, just print the label
-+ * without linking it anywhere.
-+ *
-+ * @param next File name for the next link
-+ * @return a content tree for the link
-+ */
-+ public Content getNavLinkNext(String next) {
-+ Content li;
-+ if (next != null) {
-+ li = HtmlTree.LI(getHyperLink(next, "", nextLabel, "", ""));
-+ }
-+ else
-+ li = HtmlTree.LI(nextLabel);
-+ return li;
-+ }
-+
-+ /**
- * Print "FRAMES" link, to switch to the frame version of the output.
- *
- * @param link File to be linked, "index.html".
- */
- protected void navShowLists(String link) {
-- print(getHyperLink(link + "?" + path + filename, "",
-+ print(getHyperLinkString(link + "?" + path + filename, "",
- configuration.getText("doclet.FRAMES"), true, "", "", "_top"));
- }
-
- /**
-+ * Get "FRAMES" link, to switch to the frame version of the output.
-+ *
-+ * @param link File to be linked, "index.html"
-+ * @return a content tree for the link
-+ */
-+ protected Content getNavShowLists(String link) {
-+ Content framesContent = getHyperLink(link + "?" + path +
-+ filename, "", framesLabel, "", "_top");
-+ Content li = HtmlTree.LI(framesContent);
-+ return li;
-+ }
-+
-+ /**
- * Print "FRAMES" link, to switch to the frame version of the output.
- */
- protected void navShowLists() {
-@@ -658,16 +996,37 @@
- }
-
- /**
-+ * Get "FRAMES" link, to switch to the frame version of the output.
-+ *
-+ * @return a content tree for the link
-+ */
-+ protected Content getNavShowLists() {
-+ return getNavShowLists(relativePath + "index.html");
-+ }
-+
-+ /**
- * Print "NO FRAMES" link, to switch to the non-frame version of the output.
- *
- * @param link File to be linked.
- */
- protected void navHideLists(String link) {
-- print(getHyperLink(link, "", configuration.getText("doclet.NO_FRAMES"),
-+ print(getHyperLinkString(link, "", configuration.getText("doclet.NO_FRAMES"),
- true, "", "", "_top"));
- }
-
- /**
-+ * Get "NO FRAMES" link, to switch to the non-frame version of the output.
-+ *
-+ * @param link File to be linked
-+ * @return a content tree for the link
-+ */
-+ protected Content getNavHideLists(String link) {
-+ Content noFramesContent = getHyperLink(link, "", noframesLabel, "", "_top");
-+ Content li = HtmlTree.LI(noFramesContent);
-+ return li;
-+ }
-+
-+ /**
- * Print "Tree" link in the navigation bar. If there is only one package
- * specified on the command line, then the "Tree" link will be to the
- * only "package-tree.html" file otherwise it will be to the
-@@ -687,10 +1046,39 @@
- }
-
- /**
-- * Print "Tree" link to the "overview-tree.html" file.
-+ * Get "Tree" link in the navigation bar. If there is only one package
-+ * specified on the command line, then the "Tree" link will be to the
-+ * only "package-tree.html" file otherwise it will be to the
-+ * "overview-tree.html" file.
-+ *
-+ * @return a content tree for the link
- */
-- protected void navLinkMainTree(String label) {
-- printHyperLink(relativePath + "overview-tree.html", label);
-+ protected Content getNavLinkTree() {
-+ Content treeLinkContent;
-+ PackageDoc[] packages = configuration.root.specifiedPackages();
-+ if (packages.length == 1 && configuration.root.specifiedClasses().length == 0) {
-+ treeLinkContent = getHyperLink(pathString(packages[0],
-+ "package-tree.html"), "", treeLabel,
-+ "", "");
-+ } else {
-+ treeLinkContent = getHyperLink(relativePath + "overview-tree.html",
-+ "", treeLabel, "", "");
-+ }
-+ Content li = HtmlTree.LI(treeLinkContent);
-+ return li;
-+ }
-+
-+ /**
-+ * Get the overview tree link for the main tree.
-+ *
-+ * @param label the label for the link
-+ * @return a content tree for the link
-+ */
-+ protected Content getNavLinkMainTree(String label) {
-+ Content mainTreeContent = getHyperLink(relativePath + "overview-tree.html",
-+ new StringContent(label));
-+ Content li = HtmlTree.LI(mainTreeContent);
-+ return li;
- }
-
- /**
-@@ -706,6 +1094,16 @@
- }
-
- /**
-+ * Get the word "Class", to indicate that class link is not available.
-+ *
-+ * @return a content tree for the link
-+ */
-+ protected Content getNavLinkClass() {
-+ Content li = HtmlTree.LI(classLabel);
-+ return li;
-+ }
-+
-+ /**
- * Print "Deprecated" API link in the navigation bar.
- */
- protected void navLinkDeprecated() {
-@@ -716,6 +1114,18 @@
- }
-
- /**
-+ * Get "Deprecated" API link in the navigation bar.
-+ *
-+ * @return a content tree for the link
-+ */
-+ protected Content getNavLinkDeprecated() {
-+ Content linkContent = getHyperLink(relativePath +
-+ "deprecated-list.html", "", deprecatedLabel, "", "");
-+ Content li = HtmlTree.LI(linkContent);
-+ return li;
-+ }
-+
-+ /**
- * Print link for generated index. If the user has used "-splitindex"
- * command line option, then link to file "index-files/index-1.html" is
- * generated otherwise link to file "index-all.html" is generated.
-@@ -725,6 +1135,21 @@
- AllClassesFrameWriter.OUTPUT_FILE_NAME_NOFRAMES,
- "", "", configuration.getText("doclet.All_Classes"), true);
- }
-+
-+ /**
-+ * Get link for generated index. If the user has used "-splitindex"
-+ * command line option, then link to file "index-files/index-1.html" is
-+ * generated otherwise link to file "index-all.html" is generated.
-+ *
-+ * @return a content tree for the link
-+ */
-+ protected Content getNavLinkClassIndex() {
-+ Content allClassesContent = getHyperLink(relativePath +
-+ AllClassesFrameWriter.OUTPUT_FILE_NAME_NOFRAMES, "",
-+ allclassesLabel, "", "");
-+ Content li = HtmlTree.LI(allClassesContent);
-+ return li;
-+ }
- /**
- * Print link for generated class index.
- */
-@@ -741,6 +1166,20 @@
- }
-
- /**
-+ * Get link for generated class index.
-+ *
-+ * @return a content tree for the link
-+ */
-+ protected Content getNavLinkIndex() {
-+ Content linkContent = getHyperLink(relativePath +(configuration.splitindex?
-+ DirectoryManager.getPath("index-files") + fileseparator: "") +
-+ (configuration.splitindex?"index-1.html" : "index-all.html"), "",
-+ indexLabel, "", "");
-+ Content li = HtmlTree.LI(linkContent);
-+ return li;
-+ }
-+
-+ /**
- * Print help file link. If user has provided a help file, then generate a
- * link to the user given file, which is already copied to current or
- * destination directory.
-@@ -762,6 +1201,29 @@
- }
-
- /**
-+ * Get help file link. If user has provided a help file, then generate a
-+ * link to the user given file, which is already copied to current or
-+ * destination directory.
-+ *
-+ * @return a content tree for the link
-+ */
-+ protected Content getNavLinkHelp() {
-+ String helpfilenm = configuration.helpfile;
-+ if (helpfilenm.equals("")) {
-+ helpfilenm = "help-doc.html";
-+ } else {
-+ int lastsep;
-+ if ((lastsep = helpfilenm.lastIndexOf(File.separatorChar)) != -1) {
-+ helpfilenm = helpfilenm.substring(lastsep + 1);
-+ }
-+ }
-+ Content linkContent = getHyperLink(relativePath + helpfilenm, "",
-+ helpLabel, "", "");
-+ Content li = HtmlTree.LI(linkContent);
-+ return li;
-+ }
-+
-+ /**
- * Print the word "Detail" in the navigation bar. No link is available.
- */
- protected void navDetail() {
-@@ -843,6 +1305,96 @@
- }
-
- /**
-+ * Get summary table header.
-+ *
-+ * @param header the header for the table
-+ * @param scope the scope of the headers
-+ * @return a content tree for the header
-+ */
-+ public Content getSummaryTableHeader(String[] header, String scope) {
-+ Content tr = new HtmlTree(HtmlTag.TR);
-+ int size = header.length;
-+ Content tableHeader;
-+ if (size == 1) {
-+ tableHeader = new StringContent(header[0]);
-+ tr.addContent(HtmlTree.TH(HtmlStyle.colOne, scope, tableHeader));
-+ return tr;
-+ }
-+ for (int i = 0; i < size; i++) {
-+ tableHeader = new StringContent(header[i]);
-+ if(i == 0)
-+ tr.addContent(HtmlTree.TH(HtmlStyle.colFirst, scope, tableHeader));
-+ else if(i == (size - 1))
-+ tr.addContent(HtmlTree.TH(HtmlStyle.colLast, scope, tableHeader));
-+ else
-+ tr.addContent(HtmlTree.TH(scope, tableHeader));
-+ }
-+ return tr;
-+ }
-+
-+ /**
-+ * Get table caption.
-+ *
-+ * @param rawText the caption for the table which could be raw Html
-+ * @return a content tree for the caption
-+ */
-+ public Content getTableCaption(String rawText) {
-+ Content title = new RawHtml(rawText);
-+ Content captionSpan = HtmlTree.SPAN(title);
-+ Content space = getSpace();
-+ Content tabSpan = HtmlTree.SPAN(HtmlStyle.tabEnd, space);
-+ Content caption = HtmlTree.CAPTION(captionSpan);
-+ caption.addContent(tabSpan);
-+ return caption;
-+ }
-+
-+ /**
-+ * Get the marker anchor which will be added to the documentation tree.
-+ *
-+ * @param anchorName the anchor name attribute
-+ * @return a content tree for the marker anchor
-+ */
-+ public Content getMarkerAnchor(String anchorName) {
-+ return getMarkerAnchor(anchorName, null);
-+ }
-+
-+ /**
-+ * Get the marker anchor which will be added to the documentation tree.
-+ *
-+ * @param anchorName the anchor name attribute
-+ * @param anchorContent the content that should be added to the anchor
-+ * @return a content tree for the marker anchor
-+ */
-+ public Content getMarkerAnchor(String anchorName, Content anchorContent) {
-+ if (anchorContent == null)
-+ anchorContent = new Comment(" ");
-+ Content markerAnchor = HtmlTree.A_NAME(anchorName, anchorContent);
-+ return markerAnchor;
-+ }
-+
-+ /**
-+ * Returns a packagename content.
-+ *
-+ * @param packageDoc the package to check
-+ * @return package name content
-+ */
-+ public Content getPackageName(PackageDoc packageDoc) {
-+ return packageDoc == null || packageDoc.name().length() == 0 ?
-+ defaultPackageLabel :
-+ getPackageLabel(packageDoc.name());
-+ }
-+
-+ /**
-+ * Returns a package name label.
-+ *
-+ * @param parsedName the package name
-+ * @return the package name content
-+ */
-+ public Content getPackageLabel(String packageName) {
-+ return new StringContent(packageName);
-+ }
-+
-+ /**
- * Prine table header information about color, column span and the font.
- *
- * @param color Background color.
-@@ -1026,7 +1578,7 @@
- * @param isStrong true if the label should be strong.
- */
- public void printPackageLink(PackageDoc pkg, String label, boolean isStrong) {
-- print(getPackageLink(pkg, label, isStrong));
-+ print(getPackageLinkString(pkg, label, isStrong));
- }
-
- /**
-@@ -1039,7 +1591,7 @@
- */
- public void printPackageLink(PackageDoc pkg, String label, boolean isStrong,
- String style) {
-- print(getPackageLink(pkg, label, isStrong, style));
-+ print(getPackageLinkString(pkg, label, isStrong, style));
- }
-
- /**
-@@ -1050,9 +1602,9 @@
- * @param isStrong true if the label should be strong.
- * @return the link to the given package.
- */
-- public String getPackageLink(PackageDoc pkg, String label,
-+ public String getPackageLinkString(PackageDoc pkg, String label,
- boolean isStrong) {
-- return getPackageLink(pkg, label, isStrong, "");
-+ return getPackageLinkString(pkg, label, isStrong, "");
- }
-
- /**
-@@ -1064,7 +1616,7 @@
- * @param style the font of the package link label.
- * @return the link to the given package.
- */
-- public String getPackageLink(PackageDoc pkg, String label, boolean isStrong,
-+ public String getPackageLinkString(PackageDoc pkg, String label, boolean isStrong,
- String style) {
- boolean included = pkg != null && pkg.isIncluded();
- if (! included) {
-@@ -1077,12 +1629,43 @@
- }
- }
- if (included || pkg == null) {
-- return getHyperLink(pathString(pkg, "package-summary.html"),
-+ return getHyperLinkString(pathString(pkg, "package-summary.html"),
- "", label, isStrong, style);
- } else {
- String crossPkgLink = getCrossPackageLink(Util.getPackageName(pkg));
- if (crossPkgLink != null) {
-- return getHyperLink(crossPkgLink, "", label, isStrong, style);
-+ return getHyperLinkString(crossPkgLink, "", label, isStrong, style);
-+ } else {
-+ return label;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Return the link to the given package.
-+ *
-+ * @param pkg the package to link to.
-+ * @param label the label for the link.
-+ * @return a content tree for the package link.
-+ */
-+ public Content getPackageLink(PackageDoc pkg, Content label) {
-+ boolean included = pkg != null && pkg.isIncluded();
-+ if (! included) {
-+ PackageDoc[] packages = configuration.packages;
-+ for (int i = 0; i < packages.length; i++) {
-+ if (packages[i].equals(pkg)) {
-+ included = true;
-+ break;
-+ }
-+ }
-+ }
-+ if (included || pkg == null) {
-+ return getHyperLink(pathString(pkg, "package-summary.html"),
-+ "", label);
-+ } else {
-+ String crossPkgLink = getCrossPackageLink(Util.getPackageName(pkg));
-+ if (crossPkgLink != null) {
-+ return getHyperLink(crossPkgLink, "", label);
- } else {
- return label;
- }
-@@ -1110,6 +1693,29 @@
- }
-
- /**
-+ * Add the link to the content tree.
-+ *
-+ * @param doc program element doc for which the link will be added
-+ * @param label label for the link
-+ * @param htmltree the content tree to which the link will be added
-+ */
-+ public void addSrcLink(ProgramElementDoc doc, Content label, Content htmltree) {
-+ if (doc == null) {
-+ return;
-+ }
-+ ClassDoc cd = doc.containingClass();
-+ if (cd == null) {
-+ //d must be a class doc since in has no containing class.
-+ cd = (ClassDoc) doc;
-+ }
-+ String href = relativePath + DocletConstants.SOURCE_OUTPUT_DIR_NAME
-+ + DirectoryManager.getDirectoryPath(cd.containingPackage())
-+ + cd.name() + ".html#" + SourceToHTMLConverter.getAnchorName(doc);
-+ Content linkContent = getHyperLink(href, "", label, "", "");
-+ htmltree.addContent(linkContent);
-+ }
-+
-+ /**
- * Return the link to the given class.
- *
- * @param linkInfo the information about the link.
-@@ -1173,7 +1779,7 @@
- //the -link option. There are ways to determine if an external package
- //exists, but no way to determine if the external class exists. We just
- //have to assume that it does.
-- return getHyperLink(
-+ return getHyperLinkString(
- configuration.extern.getExternalLink(packageName, relativePath,
- className + ".html?is-external=true"),
- refMemName == null ? "" : refMemName,
-@@ -1198,17 +1804,27 @@
- "package-summary.html?is-external=true");
- }
-
-- public void printQualifiedClassLink(int context, ClassDoc cd) {
-- printLink(new LinkInfoImpl(context, cd,
-- configuration.getClassName(cd), ""));
-+ /**
-+ * Get the class link.
-+ *
-+ * @param context the id of the context where the link will be added
-+ * @param cd the class doc to link to
-+ * @return a content tree for the link
-+ */
-+ public Content getQualifiedClassLink(int context, ClassDoc cd) {
-+ return new RawHtml(getLink(new LinkInfoImpl(context, cd,
-+ configuration.getClassName(cd), "")));
- }
-
- /**
-- * Print Class link, with only class name as the link and prefixing
-- * plain package name.
-+ * Add the class link.
-+ *
-+ * @param context the id of the context where the link will be added
-+ * @param cd the class doc to link to
-+ * @param contentTree the content tree to which the link will be added
- */
-- public void printPreQualifiedClassLink(int context, ClassDoc cd) {
-- print(getPreQualifiedClassLink(context, cd, false));
-+ public void addPreQualifiedClassLink(int context, ClassDoc cd, Content contentTree) {
-+ addPreQualifiedClassLink(context, cd, false, contentTree);
- }
-
- /**
-@@ -1231,13 +1847,36 @@
- return classlink;
- }
-
-+ /**
-+ * Add the class link with the package portion of the label in
-+ * plain text. If the qualifier is excluded, it will not be included in the
-+ * link label.
-+ *
-+ * @param context the id of the context where the link will be added
-+ * @param cd the class to link to
-+ * @param isStrong true if the link should be strong
-+ * @param contentTree the content tree to which the link with be added
-+ */
-+ public void addPreQualifiedClassLink(int context,
-+ ClassDoc cd, boolean isStrong, Content contentTree) {
-+ PackageDoc pd = cd.containingPackage();
-+ if(pd != null && ! configuration.shouldExcludeQualifier(pd.name())) {
-+ contentTree.addContent(getPkgName(cd));
-+ }
-+ contentTree.addContent(new RawHtml(getLink(new LinkInfoImpl(
-+ context, cd, cd.name(), isStrong))));
-+ }
-
- /**
-- * Print Class link, with only class name as the strong link and prefixing
-+ * Add the class link, with only class name as the strong link and prefixing
- * plain package name.
-+ *
-+ * @param context the id of the context where the link will be added
-+ * @param cd the class to link to
-+ * @param contentTree the content tree to which the link with be added
- */
-- public void printPreQualifiedStrongClassLink(int context, ClassDoc cd) {
-- print(getPreQualifiedClassLink(context, cd, true));
-+ public void addPreQualifiedStrongClassLink(int context, ClassDoc cd, Content contentTree) {
-+ addPreQualifiedClassLink(context, cd, true, contentTree);
- }
-
- public void printText(String key) {
-@@ -1265,16 +1904,15 @@
- }
-
- /**
-- * Print the link for the given member.
-+ * Get the link for the given member.
- *
-- * @param context the id of the context where the link will be printed.
-- * @param doc the member being linked to.
-- * @param label the label for the link.
-- * @param strong true if the link should be strong.
-+ * @param context the id of the context where the link will be added
-+ * @param doc the member being linked to
-+ * @param label the label for the link
-+ * @return a content tree for the doc link
- */
-- public void printDocLink(int context, MemberDoc doc, String label,
-- boolean strong) {
-- print(getDocLink(context, doc, label, strong));
-+ public Content getDocLink(int context, MemberDoc doc, String label) {
-+ return getDocLink(context, doc.containingClass(), doc, label);
- }
-
- /**
-@@ -1336,6 +1974,34 @@
- }
- }
-
-+ /**
-+ * Return the link for the given member.
-+ *
-+ * @param context the id of the context where the link will be added
-+ * @param classDoc the classDoc that we should link to. This is not
-+ * necessarily equal to doc.containingClass(). We may be
-+ * inheriting comments
-+ * @param doc the member being linked to
-+ * @param label the label for the link
-+ * @return the link for the given member
-+ */
-+ public Content getDocLink(int context, ClassDoc classDoc, MemberDoc doc,
-+ String label) {
-+ if (! (doc.isIncluded() ||
-+ Util.isLinkable(classDoc, configuration()))) {
-+ return new StringContent(label);
-+ } else if (doc instanceof ExecutableMemberDoc) {
-+ ExecutableMemberDoc emd = (ExecutableMemberDoc)doc;
-+ return new RawHtml(getLink(new LinkInfoImpl(context, classDoc,
-+ getAnchor(emd), label, false)));
-+ } else if (doc instanceof MemberDoc) {
-+ return new RawHtml(getLink(new LinkInfoImpl(context, classDoc,
-+ doc.name(), label, false)));
-+ } else {
-+ return new StringContent(label);
-+ }
-+ }
-+
- public void anchor(ExecutableMemberDoc emd) {
- anchor(getAnchor(emd));
- }
-@@ -1390,14 +2056,14 @@
- //@see is referencing an included package
- String packageName = isplaintext ? refPackage.name() :
- getCode() + refPackage.name() + getCodeEnd();
-- result.append(getPackageLink(refPackage,
-+ result.append(getPackageLinkString(refPackage,
- label.length() == 0 ? packageName : label, false));
- } else {
- //@see is not referencing an included class or package. Check for cross links.
- String classCrossLink, packageCrossLink = getCrossPackageLink(refClassName);
- if (packageCrossLink != null) {
- //Package cross link found
-- result.append(getHyperLink(packageCrossLink, "",
-+ result.append(getHyperLinkString(packageCrossLink, "",
- (label.length() == 0)? text : label, false));
- } else if ((classCrossLink = getCrossClassLink(refClassName,
- refMemName, label, false, "", ! isplaintext)) != null) {
-@@ -1456,18 +2122,61 @@
- printCommentTags(doc, tag.inlineTags(), false, false);
- }
-
-+ /**
-+ * Add the inline comment.
-+ *
-+ * @param doc the doc for which the inline comment will be added
-+ * @param tag the inline tag to be added
-+ * @param htmltree the content tree to which the comment will be added
-+ */
-+ public void addInlineComment(Doc doc, Tag tag, Content htmltree) {
-+ addCommentTags(doc, tag.inlineTags(), false, false, htmltree);
-+ }
-+
- public void printInlineDeprecatedComment(Doc doc, Tag tag) {
- printCommentTags(doc, tag.inlineTags(), true, false);
- }
-
-+ /**
-+ * Add the inline deprecated comment.
-+ *
-+ * @param doc the doc for which the inline deprecated comment will be added
-+ * @param tag the inline tag to be added
-+ * @param htmltree the content tree to which the comment will be added
-+ */
-+ public void addInlineDeprecatedComment(Doc doc, Tag tag, Content htmltree) {
-+ addCommentTags(doc, tag.inlineTags(), true, false, htmltree);
-+ }
-+
- public void printSummaryComment(Doc doc) {
- printSummaryComment(doc, doc.firstSentenceTags());
- }
-
-+ /**
-+ * Adds the summary content.
-+ *
-+ * @param doc the doc for which the summary will be generated
-+ * @param htmltree the documentation tree to which the summary will be added
-+ */
-+ public void addSummaryComment(Doc doc, Content htmltree) {
-+ addSummaryComment(doc, doc.firstSentenceTags(), htmltree);
-+ }
-+
- public void printSummaryComment(Doc doc, Tag[] firstSentenceTags) {
- printCommentTags(doc, firstSentenceTags, false, true);
- }
-
-+ /**
-+ * Adds the summary content.
-+ *
-+ * @param doc the doc for which the summary will be generated
-+ * @param firstSentenceTags the first sentence tags for the doc
-+ * @param htmltree the documentation tree to which the summary will be added
-+ */
-+ public void addSummaryComment(Doc doc, Tag[] firstSentenceTags, Content htmltree) {
-+ addCommentTags(doc, firstSentenceTags, false, true, htmltree);
-+ }
-+
- public void printSummaryDeprecatedComment(Doc doc) {
- printCommentTags(doc, doc.firstSentenceTags(), true, true);
- }
-@@ -1476,11 +2185,25 @@
- printCommentTags(doc, tag.firstSentenceTags(), true, true);
- }
-
-+ public void addSummaryDeprecatedComment(Doc doc, Tag tag, Content htmltree) {
-+ addCommentTags(doc, tag.firstSentenceTags(), true, true, htmltree);
-+ }
-+
- public void printInlineComment(Doc doc) {
- printCommentTags(doc, doc.inlineTags(), false, false);
- p();
- }
-
-+ /**
-+ * Adds the inline comment.
-+ *
-+ * @param doc the doc for which the inline comments will be generated
-+ * @param htmltree the documentation tree to which the inline comments will be added
-+ */
-+ public void addInlineComment(Doc doc, Content htmltree) {
-+ addCommentTags(doc, doc.inlineTags(), false, false, htmltree);
-+ }
-+
- public void printInlineDeprecatedComment(Doc doc) {
- printCommentTags(doc, doc.inlineTags(), true, false);
- }
-@@ -1503,6 +2226,36 @@
- }
-
- /**
-+ * Adds the comment tags.
-+ *
-+ * @param doc the doc for which the comment tags will be generated
-+ * @param tags the first sentence tags for the doc
-+ * @param depr true if it is deprecated
-+ * @param first true if the first sentenge tags should be added
-+ * @param htmltree the documentation tree to which the comment tags will be added
-+ */
-+ private void addCommentTags(Doc doc, Tag[] tags, boolean depr,
-+ boolean first, Content htmltree) {
-+ if(configuration.nocomment){
-+ return;
-+ }
-+ Content div;
-+ Content result = new RawHtml(commentTagsToString(null, doc, tags, first));
-+ if (depr) {
-+ Content italic = HtmlTree.I(result);
-+ div = HtmlTree.DIV(HtmlStyle.block, italic);
-+ htmltree.addContent(div);
-+ }
-+ else {
-+ div = HtmlTree.DIV(HtmlStyle.block, result);
-+ htmltree.addContent(div);
-+ }
-+ if (tags.length == 0) {
-+ htmltree.addContent(getSpace());
-+ }
-+ }
-+
-+ /**
- * Converts inline tags and text to text strings, expanding the
- * inline tags along the way. Called wherever text can contain
- * an inline tag, such as in comments or in free-form text arguments
-@@ -1612,8 +2365,8 @@
- return text;
- }
-
-- if (! redirectPathFromRoot.endsWith(DirectoryManager.URL_FILE_SEPERATOR)) {
-- redirectPathFromRoot += DirectoryManager.URL_FILE_SEPERATOR;
-+ if (! redirectPathFromRoot.endsWith(DirectoryManager.URL_FILE_SEPARATOR)) {
-+ redirectPathFromRoot += DirectoryManager.URL_FILE_SEPARATOR;
- }
-
- //Redirect all relative links.
-@@ -1739,6 +2492,27 @@
- }
-
- /**
-+ * Returns a link to the stylesheet file.
-+ *
-+ * @return an HtmlTree for the lINK tag which provides the stylesheet location
-+ */
-+ public HtmlTree getStyleSheetProperties() {
-+ String filename = configuration.stylesheetfile;
-+ if (filename.length() > 0) {
-+ File stylefile = new File(filename);
-+ String parent = stylefile.getParent();
-+ filename = (parent == null)?
-+ filename:
-+ filename.substring(parent.length() + 1);
-+ } else {
-+ filename = "stylesheet.css";
-+ }
-+ filename = relativePath + filename;
-+ HtmlTree link = HtmlTree.LINK("stylesheet", "text/css", filename, "Style");
-+ return link;
-+ }
-+
-+ /**
- * According to the Java Language Specifications, all the outer classes
- * and static nested classes are core classes.
- */
-@@ -1765,6 +2539,16 @@
- }
-
- /**
-+ * Adds the annotatation types for the given doc.
-+ *
-+ * @param packageDoc the package to write annotations for
-+ * @param htmltree the content tree to which the annotation types will be added
-+ */
-+ public void addAnnotationInfo(ProgramElementDoc doc, Content htmltree) {
-+ addAnnotationInfo(doc, doc.annotations(), htmltree);
-+ }
-+
-+ /**
- * Write the annotatation types for the given doc and parameter.
- *
- * @param indent the number of spaced to indent the parameters.
-@@ -1776,6 +2560,30 @@
- }
-
- /**
-+ * Adds the annotatation types for the given packageDoc.
-+ *
-+ * @param packageDoc the package to write annotations for.
-+ * @param htmltree the documentation tree to which the annotation info will be
-+ * added
-+ */
-+ public void addAnnotationInfo(PackageDoc packageDoc, Content htmltree) {
-+ addAnnotationInfo(packageDoc, packageDoc.annotations(), htmltree);
-+ }
-+
-+ /**
-+ * Add the annotatation types for the given doc and parameter.
-+ *
-+ * @param indent the number of spaces to indent the parameters.
-+ * @param doc the doc to write annotations for.
-+ * @param param the parameter to write annotations for.
-+ * @param tree the content tree to which the annotation types will be added
-+ */
-+ public boolean addAnnotationInfo(int indent, Doc doc, Parameter param,
-+ Content tree) {
-+ return addAnnotationInfo(indent, doc, param.annotations(), false, tree);
-+ }
-+
-+ /**
- * Write the annotatation types for the given doc.
- *
- * @param doc the doc to write annotations for.
-@@ -1786,6 +2594,19 @@
- }
-
- /**
-+ * Adds the annotatation types for the given doc.
-+ *
-+ * @param doc the doc to write annotations for.
-+ * @param descList the array of {@link AnnotationDesc}.
-+ * @param htmltree the documentation tree to which the annotation info will be
-+ * added
-+ */
-+ private void addAnnotationInfo(Doc doc, AnnotationDesc[] descList,
-+ Content htmltree) {
-+ addAnnotationInfo(0, doc, descList, true, htmltree);
-+ }
-+
-+ /**
- * Write the annotatation types for the given doc.
- *
- * @param indent the number of extra spaces to indent the annotations.
-@@ -1806,6 +2627,29 @@
- }
-
- /**
-+ * Adds the annotatation types for the given doc.
-+ *
-+ * @param indent the number of extra spaces to indent the annotations.
-+ * @param doc the doc to write annotations for.
-+ * @param descList the array of {@link AnnotationDesc}.
-+ * @param htmltree the documentation tree to which the annotation info will be
-+ * added
-+ */
-+ private boolean addAnnotationInfo(int indent, Doc doc,
-+ AnnotationDesc[] descList, boolean lineBreak, Content htmltree) {
-+ List<String> annotations = getAnnotations(indent, descList, lineBreak);
-+ if (annotations.size() == 0) {
-+ return false;
-+ }
-+ Content annotationContent;
-+ for (Iterator<String> iter = annotations.iterator(); iter.hasNext();) {
-+ annotationContent = new RawHtml(iter.next());
-+ htmltree.addContent(annotationContent);
-+ }
-+ return true;
-+ }
-+
-+ /**
- * Return the string representations of the annotation types for
- * the given doc.
- *
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java
-@@ -31,6 +31,7 @@
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.taglets.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-
- /**
- * Generate serialized form for serializable fields.
-@@ -46,8 +47,6 @@
-
- private boolean printedOverallAnchor = false;
-
-- private boolean printedFirstMember = false;
--
- public HtmlSerialFieldWriter(SubWriterHolderWriter writer,
- ClassDoc classdoc) {
- super(writer, classdoc);
-@@ -69,109 +68,143 @@
- }
- }
-
-- public void writeHeader(String heading) {
-- if (! printedOverallAnchor) {
-- writer.anchor("serializedForm");
-- printedOverallAnchor = true;
-- writer.printTableHeadingBackground(heading);
-- writer.println();
-- if (heading.equals(
-- configuration().getText("doclet.Serialized_Form_class"))) {
-- assert !writer.getMemberDetailsListPrinted();
-- }
-- } else {
-- writer.printTableHeadingBackground(heading);
-- writer.println();
-- }
-- }
--
-- public void writeMemberHeader(ClassDoc fieldType, String fieldTypeStr,
-- String fieldDimensions, String fieldName) {
-- if (printedFirstMember) {
-- writer.printMemberHeader();
-- }
-- printedFirstMember = true;
-- writer.h3();
-- writer.print(fieldName);
-- writer.h3End();
-- writer.pre();
-- if (fieldType == null) {
-- writer.print(fieldTypeStr);
-- } else {
-- writer.printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_SERIAL_MEMBER,
-- fieldType));
-- }
-- print(fieldDimensions + ' ');
-- strong(fieldName);
-- writer.preEnd();
-- assert !writer.getMemberDetailsListPrinted();
-+ /**
-+ * Return the header for serializable fields section.
-+ *
-+ * @return a content tree for the header
-+ */
-+ public Content getSerializableFieldsHeader() {
-+ HtmlTree ul = new HtmlTree(HtmlTag.UL);
-+ ul.addStyle(HtmlStyle.blockList);
-+ return ul;
- }
-
- /**
-- * Write the deprecated information for this member.
-+ * Return the header for serializable fields content section.
- *
-- * @param field the field to document.
-+ * @param isLastContent true if the cotent being documented is the last content.
-+ * @return a content tree for the header
- */
-- public void writeMemberDeprecatedInfo(FieldDoc field) {
-- printDeprecated(field);
-+ public Content getFieldsContentHeader(boolean isLastContent) {
-+ HtmlTree li = new HtmlTree(HtmlTag.LI);
-+ if (isLastContent)
-+ li.addStyle(HtmlStyle.blockListLast);
-+ else
-+ li.addStyle(HtmlStyle.blockList);
-+ return li;
- }
-
- /**
-- * Write the description text for this member.
-+ * Add serializable fields.
-+ *
-+ * @param heading the heading for the section
-+ * @param serializableFieldsTree the tree to be added to the serializable fileds
-+ * content tree
-+ * @return a content tree for the serializable fields content
-+ */
-+ public Content getSerializableFields(String heading, Content serializableFieldsTree) {
-+ HtmlTree li = new HtmlTree(HtmlTag.LI);
-+ li.addStyle(HtmlStyle.blockList);
-+ if (serializableFieldsTree.isValid()) {
-+ if (!printedOverallAnchor) {
-+ li.addContent(writer.getMarkerAnchor("serializedForm"));
-+ printedOverallAnchor = true;
-+ }
-+ Content headingContent = new StringContent(heading);
-+ Content serialHeading = HtmlTree.HEADING(HtmlConstants.SERIALIZED_MEMBER_HEADING,
-+ headingContent);
-+ li.addContent(serialHeading);
-+ li.addContent(serializableFieldsTree);
-+ }
-+ return li;
-+ }
-+
-+ /**
-+ * Add the member header.
-+ *
-+ * @param fieldsType the class document to be listed
-+ * @param fieldTypeStr the string for the filed type to be documented
-+ * @param fieldDimensions the dimensions of the field string to be added
-+ * @param firldName name of the field to be added
-+ * @param contentTree the content tree to which the member header will be added
-+ */
-+ public void addMemberHeader(ClassDoc fieldType, String fieldTypeStr,
-+ String fieldDimensions, String fieldName, Content contentTree) {
-+ Content nameContent = new RawHtml(fieldName);
-+ Content heading = HtmlTree.HEADING(HtmlConstants.MEMBER_HEADING, nameContent);
-+ contentTree.addContent(heading);
-+ Content pre = new HtmlTree(HtmlTag.PRE);
-+ if (fieldType == null) {
-+ pre.addContent(fieldTypeStr);
-+ } else {
-+ Content fieldContent = new RawHtml(writer.getLink(new LinkInfoImpl(
-+ LinkInfoImpl.CONTEXT_SERIAL_MEMBER, fieldType)));
-+ pre.addContent(fieldContent);
-+ }
-+ pre.addContent(fieldDimensions + " ");
-+ pre.addContent(fieldName);
-+ contentTree.addContent(pre);
-+ }
-+
-+ /**
-+ * Add the deprecated information for this member.
- *
- * @param field the field to document.
-+ * @param contentTree the tree to which the deprecated info will be added
- */
-- public void writeMemberDescription(FieldDoc field) {
-+ public void addMemberDeprecatedInfo(FieldDoc field, Content contentTree) {
-+ addDeprecatedInfo(field, contentTree);
-+ }
-+
-+ /**
-+ * Add the description text for this member.
-+ *
-+ * @param field the field to document.
-+ * @param contentTree the tree to which the deprecated info will be added
-+ */
-+ public void addMemberDescription(FieldDoc field, Content contentTree) {
- if (field.inlineTags().length > 0) {
-- writer.printMemberDetailsListStartTag();
-- writer.dd();
-- writer.printInlineComment(field);
-- writer.ddEnd();
-+ writer.addInlineComment(field, contentTree);
- }
- Tag[] tags = field.tags("serial");
- if (tags.length > 0) {
-- writer.printMemberDetailsListStartTag();
-- writer.dd();
-- writer.printInlineComment(field, tags[0]);
-- writer.ddEnd();
-+ writer.addInlineComment(field, tags[0], contentTree);
- }
- }
-
- /**
-- * Write the description text for this member represented by the tag.
-+ * Add the description text for this member represented by the tag.
- *
-- * @param serialFieldTag the field to document (represented by tag).
-+ * @param serialFieldTag the field to document (represented by tag)
-+ * @param contentTree the tree to which the deprecated info will be added
- */
-- public void writeMemberDescription(SerialFieldTag serialFieldTag) {
-+ public void addMemberDescription(SerialFieldTag serialFieldTag, Content contentTree) {
- String serialFieldTagDesc = serialFieldTag.description().trim();
- if (!serialFieldTagDesc.isEmpty()) {
-- writer.dl();
-- writer.dd();
-- writer.print(serialFieldTagDesc);
-- writer.ddEnd();
-- writer.dlEnd();
-+ Content serialFieldContent = new RawHtml(serialFieldTagDesc);
-+ Content div = HtmlTree.DIV(HtmlStyle.block, serialFieldContent);
-+ contentTree.addContent(div);
- }
- }
-
- /**
-- * Write the tag information for this member.
-+ * Add the tag information for this member.
- *
- * @param field the field to document.
-+ * @param contentTree the tree to which the member tags info will be added
- */
-- public void writeMemberTags(FieldDoc field) {
-+ public void addMemberTags(FieldDoc field, Content contentTree) {
- TagletOutputImpl output = new TagletOutputImpl("");
- TagletWriter.genTagOuput(configuration().tagletManager, field,
-- configuration().tagletManager.getCustomTags(field),
-+ configuration().tagletManager.getCustomTags(field),
- writer.getTagletWriterInstance(false), output);
- String outputString = output.toString().trim();
-+ Content dlTags = new HtmlTree(HtmlTag.DL);
- if (!outputString.isEmpty()) {
-- writer.printMemberDetailsListStartTag();
-- writer.dd();
-- writer.dl();
-- print(outputString);
-- writer.dlEnd();
-- writer.ddEnd();
-+ Content tagContent = new RawHtml(outputString);
-+ dlTags.addContent(tagContent);
- }
-+ contentTree.addContent(dlTags);
- }
-
- /**
-@@ -192,24 +225,4 @@
- return true;
- return false;
- }
--
-- public void writeMemberFooter() {
-- printMemberFooter();
-- }
--
-- /**
-- * Write the footer information. If the serilization overview section was
-- * printed, check for definition list and close list tag.
-- *
-- * @param heading the heading that was written.
-- */
-- public void writeFooter(String heading) {
-- if (printedOverallAnchor) {
-- if (heading.equals(
-- configuration().getText("doclet.Serialized_Form_class"))) {
-- writer.printMemberDetailsListEndTag();
-- assert !writer.getMemberDetailsListPrinted();
-- }
-- }
-- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialMethodWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialMethodWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialMethodWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialMethodWriter.java
-@@ -28,57 +28,119 @@
- import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.taglets.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-
- /**
- * Generate serialized form for Serializable/Externalizable methods.
- * Documentation denoted by the <code>serialData</code> tag is processed.
- *
- * @author Joe Fialli
-+ * @author Bhavesh Patel (Modified)
- */
- public class HtmlSerialMethodWriter extends MethodWriterImpl implements
- SerializedFormWriter.SerialMethodWriter{
-
-- private boolean printedFirstMember = false;
--
- public HtmlSerialMethodWriter(SubWriterHolderWriter writer,
- ClassDoc classdoc) {
- super(writer, classdoc);
- }
-
-- public void writeHeader(String heading) {
-- writer.anchor("serialized_methods");
-- writer.printTableHeadingBackground(heading);
-- writer.p();
-+ /**
-+ * Return the header for serializable methods section.
-+ *
-+ * @return a content tree for the header
-+ */
-+ public Content getSerializableMethodsHeader() {
-+ HtmlTree ul = new HtmlTree(HtmlTag.UL);
-+ ul.addStyle(HtmlStyle.blockList);
-+ return ul;
- }
-
-- public void writeNoCustomizationMsg(String msg) {
-- writer.print(msg);
-- writer.p();
-+ /**
-+ * Return the header for serializable methods content section.
-+ *
-+ * @param isLastContent true if the cotent being documented is the last content.
-+ * @return a content tree for the header
-+ */
-+ public Content getMethodsContentHeader(boolean isLastContent) {
-+ HtmlTree li = new HtmlTree(HtmlTag.LI);
-+ if (isLastContent)
-+ li.addStyle(HtmlStyle.blockListLast);
-+ else
-+ li.addStyle(HtmlStyle.blockList);
-+ return li;
- }
-
-- public void writeMemberHeader(MethodDoc member) {
-- if (printedFirstMember) {
-- writer.printMemberHeader();
-- }
-- printedFirstMember = true;
-- writer.anchor(member);
-- printHead(member);
-- writeSignature(member);
-+ /**
-+ * Add serializable methods.
-+ *
-+ * @param heading the heading for the section
-+ * @param serializableMethodContent the tree to be added to the serializable methods
-+ * content tree
-+ * @return a content tree for the serializable methods content
-+ */
-+ public Content getSerializableMethods(String heading, Content serializableMethodContent) {
-+ Content li = HtmlTree.LI(HtmlStyle.blockList, writer.getMarkerAnchor(
-+ "serialized_methods"));
-+ Content headingContent = new StringContent(heading);
-+ Content serialHeading = HtmlTree.HEADING(HtmlConstants.SERIALIZED_MEMBER_HEADING,
-+ headingContent);
-+ li.addContent(serialHeading);
-+ li.addContent(serializableMethodContent);
-+ return li;
- }
-
-- public void writeMemberFooter() {
-- printMemberFooter();
-+ /**
-+ * Return the no customization message.
-+ *
-+ * @param msg the message to be displayed
-+ * @return no customization message content
-+ */
-+ public Content getNoCustomizationMsg(String msg) {
-+ Content noCustomizationMsg = new StringContent(msg);
-+ return noCustomizationMsg;
- }
-
-- public void writeDeprecatedMemberInfo(MethodDoc member) {
-- printDeprecated(member);
-+ /**
-+ * Add the member header.
-+ *
-+ * @param member the method document to be listed
-+ * @param methodsContentTree the content tree to which the member header will be added
-+ */
-+ public void addMemberHeader(MethodDoc member, Content methodsContentTree) {
-+ methodsContentTree.addContent(writer.getMarkerAnchor(
-+ writer.getAnchor(member)));
-+ methodsContentTree.addContent(getHead(member));
-+ methodsContentTree.addContent(getSignature(member));
- }
-
-- public void writeMemberDescription(MethodDoc member) {
-- printComment(member);
-+ /**
-+ * Add the deprecated information for this member.
-+ *
-+ * @param member the method to document.
-+ * @param methodsContentTree the tree to which the deprecated info will be added
-+ */
-+ public void addDeprecatedMemberInfo(MethodDoc member, Content methodsContentTree) {
-+ addDeprecatedInfo(member, methodsContentTree);
- }
-
-- public void writeMemberTags(MethodDoc member) {
-+ /**
-+ * Add the description text for this member.
-+ *
-+ * @param member the method to document.
-+ * @param methodsContentTree the tree to which the deprecated info will be added
-+ */
-+ public void addMemberDescription(MethodDoc member, Content methodsContentTree) {
-+ addComment(member, methodsContentTree);
-+ }
-+
-+ /**
-+ * Add the tag information for this member.
-+ *
-+ * @param member the method to document.
-+ * @param methodsContentTree the tree to which the member tags info will be added
-+ */
-+ public void addMemberTags(MethodDoc member, Content methodsContentTree) {
- TagletOutputImpl output = new TagletOutputImpl("");
- TagletManager tagletManager =
- ConfigurationImpl.getInstance().tagletManager;
-@@ -86,14 +148,12 @@
- tagletManager.getSerializedFormTags(),
- writer.getTagletWriterInstance(false), output);
- String outputString = output.toString().trim();
-+ Content dlTags = new HtmlTree(HtmlTag.DL);
- if (!outputString.isEmpty()) {
-- writer.printMemberDetailsListStartTag();
-- writer.dd();
-- writer.dl();
-- print(outputString);
-- writer.dlEnd();
-- writer.ddEnd();
-+ Content tagContent = new RawHtml(outputString);
-+ dlTags.addContent(tagContent);
- }
-+ methodsContentTree.addContent(dlTags);
- MethodDoc method = (MethodDoc)member;
- if (method.name().compareTo("writeExternal") == 0
- && method.tags("serialData").length == 0) {
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/LinkFactoryImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/LinkFactoryImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/LinkFactoryImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/LinkFactoryImpl.java
-@@ -79,7 +79,7 @@
- String filename = pathString(classLinkInfo);
- if (linkInfo.linkToSelf ||
- !(linkInfo.classDoc.name() + ".html").equals(m_writer.filename)) {
-- linkOutput.append(m_writer.getHyperLink(filename,
-+ linkOutput.append(m_writer.getHyperLinkString(filename,
- classLinkInfo.where, label.toString(),
- classLinkInfo.isStrong, classLinkInfo.styleName,
- title, classLinkInfo.target));
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java
-@@ -28,9 +28,9 @@
- import java.io.*;
-
- import com.sun.javadoc.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
--import com.sun.tools.doclets.internal.toolkit.taglets.*;
-
- /**
- * Writes method documentation in HTML format.
-@@ -43,8 +43,6 @@
- public class MethodWriterImpl extends AbstractExecutableMemberWriter
- implements MethodWriter, MemberSummaryWriter {
-
-- private boolean printedSummaryHeader = false;
--
- /**
- * Construct a new MethodWriterImpl.
- *
-@@ -65,184 +63,127 @@
- }
-
- /**
-- * Write the methods summary header for the given class.
-- *
-- * @param classDoc the class the summary belongs to.
-+ * {@inheritDoc}
- */
-- public void writeMemberSummaryHeader(ClassDoc classDoc) {
-- printedSummaryHeader = true;
-- writer.println();
-- writer.println("<!-- ========== METHOD SUMMARY =========== -->");
-- writer.println();
-- writer.printSummaryHeader(this, classDoc);
-- }
--
-- /**
-- * Write the methods summary footer for the given class.
-- *
-- * @param classDoc the class the summary belongs to.
-- */
-- public void writeMemberSummaryFooter(ClassDoc classDoc) {
-- writer.printSummaryFooter(this, classDoc);
-- }
--
-- /**
-- * Write the inherited methods summary header for the given class.
-- *
-- * @param classDoc the class the summary belongs to.
-- */
-- public void writeInheritedMemberSummaryHeader(ClassDoc classDoc) {
-- if(! printedSummaryHeader){
-- //We don't want inherited summary to not be under heading.
-- writeMemberSummaryHeader(classDoc);
-- writeMemberSummaryFooter(classDoc);
-- printedSummaryHeader = true;
-- }
-- writer.printInheritedSummaryHeader(this, classDoc);
-+ public Content getMemberSummaryHeader(ClassDoc classDoc,
-+ Content memberSummaryTree) {
-+ memberSummaryTree.addContent(HtmlConstants.START_OF_METHOD_SUMMARY);
-+ Content memberTree = writer.getMemberTreeHeader();
-+ writer.addSummaryHeader(this, classDoc, memberTree);
-+ return memberTree;
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writeInheritedMemberSummary(ClassDoc classDoc,
-- ProgramElementDoc method, boolean isFirst, boolean isLast) {
-- writer.printInheritedSummaryMember(this, classDoc, method, isFirst);
-+ public Content getMethodDetailsTreeHeader(ClassDoc classDoc,
-+ Content memberDetailsTree) {
-+ memberDetailsTree.addContent(HtmlConstants.START_OF_METHOD_DETAILS);
-+ Content methodDetailsTree = writer.getMemberTreeHeader();
-+ methodDetailsTree.addContent(writer.getMarkerAnchor("method_detail"));
-+ Content heading = HtmlTree.HEADING(HtmlConstants.DETAILS_HEADING,
-+ writer.methodDetailsLabel);
-+ methodDetailsTree.addContent(heading);
-+ return methodDetailsTree;
- }
-
- /**
-- * Write the inherited methods summary footer for the given class.
-- *
-- * @param classDoc the class the summary belongs to.
-+ * {@inheritDoc}
- */
-- public void writeInheritedMemberSummaryFooter(ClassDoc classDoc) {
-- writer.printInheritedSummaryFooter(this, classDoc); ;
-+ public Content getMethodDocTreeHeader(MethodDoc method,
-+ Content methodDetailsTree) {
-+ String erasureAnchor;
-+ if ((erasureAnchor = getErasureAnchor(method)) != null) {
-+ methodDetailsTree.addContent(writer.getMarkerAnchor((erasureAnchor)));
-+ }
-+ methodDetailsTree.addContent(
-+ writer.getMarkerAnchor(writer.getAnchor(method)));
-+ Content methodDocTree = writer.getMemberTreeHeader();
-+ Content heading = new HtmlTree(HtmlConstants.MEMBER_HEADING);
-+ heading.addContent(method.name());
-+ methodDocTree.addContent(heading);
-+ return methodDocTree;
- }
-
- /**
-- * Write the header for the method documentation.
-+ * Get the signature for the given method.
- *
-- * @param classDoc the class that the methods belong to.
-+ * @param method the method being documented.
-+ * @return a content object for the signature
- */
-- public void writeHeader(ClassDoc classDoc, String header) {
-- writer.println();
-- writer.println("<!-- ============ METHOD DETAIL ========== -->");
-- writer.println();
-- writer.anchor("method_detail");
-- writer.printTableHeadingBackground(header);
-+ public Content getSignature(MethodDoc method) {
-+ writer.displayLength = 0;
-+ Content pre = new HtmlTree(HtmlTag.PRE);
-+ writer.addAnnotationInfo(method, pre);
-+ addModifiers(method, pre);
-+ addTypeParameters(method, pre);
-+ addReturnType(method, pre);
-+ if (configuration().linksource) {
-+ Content methodName = new StringContent(method.name());
-+ writer.addSrcLink(method, methodName, pre);
-+ } else {
-+ addName(method.name(), pre);
-+ }
-+ addParameters(method, pre);
-+ addExceptions(method, pre);
-+ return pre;
- }
-
- /**
-- * Write the method header for the given method.
-- *
-- * @param method the method being documented.
-- * @param isFirst the flag to indicate whether or not the method is the
-- * first to be documented.
-+ * {@inheritDoc}
- */
-- public void writeMethodHeader(MethodDoc method, boolean isFirst) {
-- if (! isFirst) {
-- writer.printMemberHeader();
-- }
-- writer.println();
-- String erasureAnchor;
-- if ((erasureAnchor = getErasureAnchor(method)) != null) {
-- writer.anchor(erasureAnchor);
-- }
-- writer.anchor(method);
-- writer.h3();
-- writer.print(method.name());
-- writer.h3End();
-+ public void addDeprecated(MethodDoc method, Content methodDocTree) {
-+ addDeprecatedInfo(method, methodDocTree);
- }
-
- /**
-- * Write the signature for the given method.
-- *
-- * @param method the method being documented.
-+ * {@inheritDoc}
- */
-- public void writeSignature(MethodDoc method) {
-- writer.displayLength = 0;
-- writer.pre();
-- writer.writeAnnotationInfo(method);
-- printModifiers(method);
-- writeTypeParameters(method);
-- printReturnType(method);
-- if (configuration().linksource) {
-- writer.printSrcLink(method, method.name());
-- } else {
-- strong(method.name());
-- }
-- writeParameters(method);
-- writeExceptions(method);
-- writer.preEnd();
-- assert !writer.getMemberDetailsListPrinted();
-- }
--
-- /**
-- * Write the deprecated output for the given method.
-- *
-- * @param method the method being documented.
-- */
-- public void writeDeprecated(MethodDoc method) {
-- printDeprecated(method);
-- }
--
-- /**
-- * Write the comments for the given method.
-- *
-- * @param method the method being documented.
-- */
-- public void writeComments(Type holder, MethodDoc method) {
-+ public void addComments(Type holder, MethodDoc method, Content methodDocTree) {
- ClassDoc holderClassDoc = holder.asClassDoc();
- if (method.inlineTags().length > 0) {
-- writer.printMemberDetailsListStartTag();
- if (holder.asClassDoc().equals(classdoc) ||
-- (! (holderClassDoc.isPublic() ||
-+ (! (holderClassDoc.isPublic() ||
- Util.isLinkable(holderClassDoc, configuration())))) {
-- writer.dd();
-- writer.printInlineComment(method);
-- writer.ddEnd();
-+ writer.addInlineComment(method, methodDocTree);
- } else {
-- String classlink = writer.codeText(
-- writer.getDocLink(LinkInfoImpl.CONTEXT_METHOD_DOC_COPY,
-+ Content link = new RawHtml(
-+ writer.getDocLink(LinkInfoImpl.CONTEXT_METHOD_DOC_COPY,
- holder.asClassDoc(), method,
- holder.asClassDoc().isIncluded() ?
- holder.typeName() : holder.qualifiedTypeName(),
-- false));
-- writer.dd();
-- writer.strongText(holder.asClassDoc().isClass()?
-- "doclet.Description_From_Class":
-- "doclet.Description_From_Interface",
-- classlink);
-- writer.ddEnd();
-- writer.dd();
-- writer.printInlineComment(method);
-- writer.ddEnd();
-+ false));
-+ Content codelLink = HtmlTree.CODE(link);
-+ Content strong = HtmlTree.STRONG(holder.asClassDoc().isClass()?
-+ writer.descfrmClassLabel : writer.descfrmInterfaceLabel);
-+ strong.addContent(writer.getSpace());
-+ strong.addContent(codelLink);
-+ methodDocTree.addContent(HtmlTree.DIV(HtmlStyle.block, strong));
-+ writer.addInlineComment(method, methodDocTree);
- }
- }
- }
-
- /**
-- * Write the tag output for the given method.
-- *
-- * @param method the method being documented.
-+ * {@inheritDoc}
- */
-- public void writeTags(MethodDoc method) {
-- writer.printTags(method);
-+ public void addTags(MethodDoc method, Content methodDocTree) {
-+ writer.addTagsInfo(method, methodDocTree);
- }
-
- /**
-- * Write the method footer.
-+ * {@inheritDoc}
- */
-- public void writeMethodFooter() {
-- printMemberFooter();
-+ public Content getMethodDetails(Content methodDetailsTree) {
-+ return getMemberTree(methodDetailsTree);
- }
-
- /**
-- * Write the footer for the method documentation.
-- *
-- * @param classDoc the class that the methods belong to.
-+ * {@inheritDoc}
- */
-- public void writeFooter(ClassDoc classDoc) {
-- //No footer to write for method documentation
-+ public Content getMethodDoc(Content methodDocTree,
-+ boolean isLastContent) {
-+ return getMemberTree(methodDocTree, isLastContent);
- }
-
- /**
-@@ -256,53 +197,89 @@
- return VisibleMemberMap.METHODS;
- }
-
-- public void printSummaryLabel() {
-- writer.printText("doclet.Method_Summary");
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addSummaryLabel(Content memberTree) {
-+ Content label = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING,
-+ writer.getResource("doclet.Method_Summary"));
-+ memberTree.addContent(label);
- }
-
-- public void printTableSummary() {
-- writer.tableIndexSummary(configuration().getText("doclet.Member_Table_Summary",
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getTableSummary() {
-+ return configuration().getText("doclet.Member_Table_Summary",
- configuration().getText("doclet.Method_Summary"),
-- configuration().getText("doclet.methods")));
-+ configuration().getText("doclet.methods"));
- }
-
-- public void printSummaryTableHeader(ProgramElementDoc member) {
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getCaption() {
-+ return configuration().getText("doclet.Methods");
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String[] getSummaryTableHeader(ProgramElementDoc member) {
- String[] header = new String[] {
- writer.getModifierTypeHeader(),
- configuration().getText("doclet.0_and_1",
- configuration().getText("doclet.Method"),
- configuration().getText("doclet.Description"))
- };
-- writer.summaryTableHeader(header, "col");
-+ return header;
- }
-
-- public void printSummaryAnchor(ClassDoc cd) {
-- writer.anchor("method_summary");
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
-+ memberTree.addContent(writer.getMarkerAnchor("method_summary"));
- }
-
-- public void printInheritedSummaryAnchor(ClassDoc cd) {
-- writer.anchor("methods_inherited_from_class_" +
-- ConfigurationImpl.getInstance().getClassName(cd));
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addInheritedSummaryAnchor(ClassDoc cd, Content inheritedTree) {
-+ inheritedTree.addContent(writer.getMarkerAnchor(
-+ "methods_inherited_from_class_" +
-+ configuration().getClassName(cd)));
- }
-
-- public void printInheritedSummaryLabel(ClassDoc cd) {
-- String classlink = writer.getPreQualifiedClassLink(
-- LinkInfoImpl.CONTEXT_MEMBER, cd, false);
-- writer.strong();
-- String key = cd.isClass()?
-- "doclet.Methods_Inherited_From_Class" :
-- "doclet.Methods_Inherited_From_Interface";
-- writer.printText(key, classlink);
-- writer.strongEnd();
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addInheritedSummaryLabel(ClassDoc cd, Content inheritedTree) {
-+ Content classLink = new RawHtml(writer.getPreQualifiedClassLink(
-+ LinkInfoImpl.CONTEXT_MEMBER, cd, false));
-+ Content label = new StringContent(cd.isClass() ?
-+ configuration().getText("doclet.Methods_Inherited_From_Class") :
-+ configuration().getText("doclet.Methods_Inherited_From_Interface"));
-+ Content labelHeading = HtmlTree.HEADING(HtmlConstants.INHERITED_SUMMARY_HEADING,
-+ label);
-+ labelHeading.addContent(writer.getSpace());
-+ labelHeading.addContent(classLink);
-+ inheritedTree.addContent(labelHeading);
- }
-
-- protected void printSummaryType(ProgramElementDoc member) {
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected void addSummaryType(ProgramElementDoc member, Content tdSummaryType) {
- MethodDoc meth = (MethodDoc)member;
-- printModifierAndType(meth, meth.returnType());
-+ addModifierAndType(meth, meth.returnType(), tdSummaryType);
- }
-
-- protected static void printOverridden(HtmlDocletWriter writer,
-- Type overriddenType, MethodDoc method) {
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected static void addOverridden(HtmlDocletWriter writer,
-+ Type overriddenType, MethodDoc method, Content dl) {
- if(writer.configuration.nocomment){
- return;
- }
-@@ -317,31 +294,33 @@
- //is not visible so don't document this.
- return;
- }
-- String label = "doclet.Overrides";
-+ Content label = writer.overridesLabel;
- int context = LinkInfoImpl.CONTEXT_METHOD_OVERRIDES;
-
- if (method != null) {
- if(overriddenType.asClassDoc().isAbstract() && method.isAbstract()){
- //Abstract method is implemented from abstract class,
- //not overridden
-- label = "doclet.Specified_By";
-+ label = writer.specifiedByLabel;
- context = LinkInfoImpl.CONTEXT_METHOD_SPECIFIED_BY;
- }
-- String overriddenTypeLink = writer.codeText(
-- writer.getLink(new LinkInfoImpl(context, overriddenType)));
-+ Content dt = HtmlTree.DT(HtmlTree.STRONG(label));
-+ dl.addContent(dt);
-+ Content overriddenTypeLink = new RawHtml(
-+ writer.getLink(new LinkInfoImpl(context, overriddenType)));
-+ Content codeOverridenTypeLink = HtmlTree.CODE(overriddenTypeLink);
- String name = method.name();
-- writer.dt();
-- writer.strongText(label);
-- writer.dtEnd();
-- writer.dd();
-- String methLink = writer.codeText(
-- writer.getLink(
-+ Content methlink = new RawHtml(writer.getLink(
- new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER,
-- overriddenType.asClassDoc(),
-- writer.getAnchor(method), name, false)
-- ));
-- writer.printText("doclet.in_class", methLink, overriddenTypeLink);
-- writer.ddEnd();
-+ overriddenType.asClassDoc(),
-+ writer.getAnchor(method), name, false)));
-+ Content codeMethLink = HtmlTree.CODE(methlink);
-+ Content dd = HtmlTree.DD(codeMethLink);
-+ dd.addContent(writer.getSpace());
-+ dd.addContent(writer.getResource("doclet.in_class"));
-+ dd.addContent(writer.getSpace());
-+ dd.addContent(codeOverridenTypeLink);
-+ dl.addContent(dd);
- }
- }
-
-@@ -363,61 +342,78 @@
- }
- }
-
-- protected static void printImplementsInfo(HtmlDocletWriter writer,
-- MethodDoc method) {
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected static void addImplementsInfo(HtmlDocletWriter writer,
-+ MethodDoc method, Content dl) {
- if(writer.configuration.nocomment){
- return;
- }
- ImplementedMethods implementedMethodsFinder =
-- new ImplementedMethods(method, writer.configuration);
-+ new ImplementedMethods(method, writer.configuration);
- MethodDoc[] implementedMethods = implementedMethodsFinder.build();
- for (int i = 0; i < implementedMethods.length; i++) {
- MethodDoc implementedMeth = implementedMethods[i];
- Type intfac = implementedMethodsFinder.getMethodHolder(implementedMeth);
-- String methlink = "";
-- String intfaclink = writer.codeText(
-- writer.getLink(new LinkInfoImpl(
-+ Content intfaclink = new RawHtml(writer.getLink(new LinkInfoImpl(
- LinkInfoImpl.CONTEXT_METHOD_SPECIFIED_BY, intfac)));
-- writer.dt();
-- writer.strongText("doclet.Specified_By");
-- writer.dtEnd();
-- writer.dd();
-- methlink = writer.codeText(writer.getDocLink(
-- LinkInfoImpl.CONTEXT_MEMBER, implementedMeth,
-- implementedMeth.name(), false));
-- writer.printText("doclet.in_interface", methlink, intfaclink);
-- writer.ddEnd();
-- }
--
-- }
--
-- protected void printReturnType(MethodDoc method) {
-- Type type = method.returnType();
-- if (type != null) {
-- writer.printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_RETURN_TYPE,
-- type));
-- print(' ');
-+ Content codeIntfacLink = HtmlTree.CODE(intfaclink);
-+ Content dt = HtmlTree.DT(HtmlTree.STRONG(writer.specifiedByLabel));
-+ dl.addContent(dt);
-+ Content methlink = new RawHtml(writer.getDocLink(
-+ LinkInfoImpl.CONTEXT_MEMBER, implementedMeth,
-+ implementedMeth.name(), false));
-+ Content codeMethLink = HtmlTree.CODE(methlink);
-+ Content dd = HtmlTree.DD(codeMethLink);
-+ dd.addContent(writer.getSpace());
-+ dd.addContent(writer.getResource("doclet.in_interface"));
-+ dd.addContent(writer.getSpace());
-+ dd.addContent(codeIntfacLink);
-+ dl.addContent(dd);
- }
- }
-
-- protected void printNavSummaryLink(ClassDoc cd, boolean link) {
-- if (link) {
-- writer.printHyperLink("", (cd == null)?
-- "method_summary":
-- "methods_inherited_from_class_" +
-- ConfigurationImpl.getInstance().getClassName(cd),
-- ConfigurationImpl.getInstance().getText("doclet.navMethod"));
-- } else {
-- writer.printText("doclet.navMethod");
-+ /**
-+ * Add the return type.
-+ *
-+ * @param method the method being documented.
-+ * @param htmltree the content tree to which the return type will be added
-+ */
-+ protected void addReturnType(MethodDoc method, Content htmltree) {
-+ Type type = method.returnType();
-+ if (type != null) {
-+ Content linkContent = new RawHtml(writer.getLink(
-+ new LinkInfoImpl(LinkInfoImpl.CONTEXT_RETURN_TYPE, type)));
-+ htmltree.addContent(linkContent);
-+ htmltree.addContent(writer.getSpace());
- }
- }
-
-- protected void printNavDetailLink(boolean link) {
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
- if (link) {
-- writer.printHyperLink("", "method_detail",
-- ConfigurationImpl.getInstance().getText("doclet.navMethod"));
-+ return writer.getHyperLink("", (cd == null)?
-+ "method_summary":
-+ "methods_inherited_from_class_" +
-+ configuration().getClassName(cd),
-+ writer.getResource("doclet.navMethod"));
- } else {
-- writer.printText("doclet.navMethod");
-+ return writer.getResource("doclet.navMethod");
-+ }
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected void addNavDetailLink(boolean link, Content liNav) {
-+ if (link) {
-+ liNav.addContent(writer.getHyperLink("", "method_detail",
-+ writer.getResource("doclet.navMethod")));
-+ } else {
-+ liNav.addContent(writer.getResource("doclet.navMethod"));
- }
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java
-@@ -26,8 +26,10 @@
- package com.sun.tools.doclets.formats.html;
-
- import java.io.*;
-+import java.util.*;
-
- import com.sun.javadoc.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
-
-@@ -42,8 +44,6 @@
- public class NestedClassWriterImpl extends AbstractMemberWriter
- implements MemberSummaryWriter {
-
-- private boolean printedSummaryHeader = false;
--
- public NestedClassWriterImpl(SubWriterHolderWriter writer,
- ClassDoc classdoc) {
- super(writer, classdoc);
-@@ -54,90 +54,17 @@
- }
-
- /**
-- * Write the classes summary header for the given class.
-- *
-- * @param classDoc the class the summary belongs to.
-- */
-- public void writeMemberSummaryHeader(ClassDoc classDoc) {
-- printedSummaryHeader = true;
-- writer.println("<!-- ======== NESTED CLASS SUMMARY ======== -->");
-- writer.println();
-- writer.printSummaryHeader(this, classDoc);
-- }
--
-- /**
-- * Write the classes summary footer for the given class.
-- *
-- * @param classDoc the class the summary belongs to.
-- */
-- public void writeMemberSummaryFooter(ClassDoc classDoc) {
-- writer.printSummaryFooter(this, classDoc);
-- }
--
-- /**
-- * Write the inherited classes summary header for the given class.
-- *
-- * @param classDoc the class the summary belongs to.
-- */
-- public void writeInheritedMemberSummaryHeader(ClassDoc classDoc) {
-- if(! printedSummaryHeader){
-- //We don't want inherited summary to not be under heading.
-- writeMemberSummaryHeader(classDoc);
-- writeMemberSummaryFooter(classDoc);
-- printedSummaryHeader = true;
-- }
-- writer.printInheritedSummaryHeader(this, classDoc);
-- }
--
-- /**
- * {@inheritDoc}
- */
-- public void writeInheritedMemberSummary(ClassDoc classDoc,
-- ProgramElementDoc nestedClass, boolean isFirst, boolean isLast) {
-- writer.printInheritedSummaryMember(this, classDoc, nestedClass, isFirst);
-+ public Content getMemberSummaryHeader(ClassDoc classDoc,
-+ Content memberSummaryTree) {
-+ memberSummaryTree.addContent(HtmlConstants.START_OF_NESTED_CLASS_SUMMARY);
-+ Content memberTree = writer.getMemberTreeHeader();
-+ writer.addSummaryHeader(this, classDoc, memberTree);
-+ return memberTree;
- }
-
- /**
-- * Write the inherited classes summary footer for the given class.
-- *
-- * @param classDoc the class the summary belongs to.
-- */
-- public void writeInheritedMemberSummaryFooter(ClassDoc classDoc) {
-- writer.printInheritedSummaryFooter(this, classDoc);
-- writer.println();
-- }
--
-- /**
-- * Write the header for the nested class documentation.
-- *
-- * @param classDoc the class that the classes belong to.
-- */
-- public void writeHeader(ClassDoc classDoc, String header) {
-- writer.anchor("nested class_detail");
-- writer.printTableHeadingBackground(header);
-- }
--
-- /**
-- * Write the nested class header for the given nested class.
-- *
-- * @param nestedClass the nested class being documented.
-- * @param isFirst the flag to indicate whether or not the nested class is the
-- * first to be documented.
-- */
-- public void writeClassHeader(ClassDoc nestedClass, boolean isFirst) {
-- if (! isFirst) {
-- writer.printMemberHeader();
-- writer.println("");
-- }
-- writer.anchor(nestedClass.name());
-- writer.h3();
-- writer.print(nestedClass.name());
-- writer.h3End();
-- }
--
--
--
-- /**
- * Close the writer.
- */
- public void close() throws IOException {
-@@ -148,17 +75,35 @@
- return VisibleMemberMap.INNERCLASSES;
- }
-
-- public void printSummaryLabel() {
-- writer.printText("doclet.Nested_Class_Summary");
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addSummaryLabel(Content memberTree) {
-+ Content label = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING,
-+ writer.getResource("doclet.Nested_Class_Summary"));
-+ memberTree.addContent(label);
- }
-
-- public void printTableSummary() {
-- writer.tableIndexSummary(configuration().getText("doclet.Member_Table_Summary",
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getTableSummary() {
-+ return configuration().getText("doclet.Member_Table_Summary",
- configuration().getText("doclet.Nested_Class_Summary"),
-- configuration().getText("doclet.nested_classes")));
-+ configuration().getText("doclet.nested_classes"));
- }
-
-- public void printSummaryTableHeader(ProgramElementDoc member) {
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getCaption() {
-+ return configuration().getText("doclet.Nested_Classes");
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String[] getSummaryTableHeader(ProgramElementDoc member) {
- String[] header;
- if (member.isInterface()) {
- header = new String[] {
-@@ -176,92 +121,95 @@
- configuration().getText("doclet.Description"))
- };
- }
-- writer.summaryTableHeader(header, "col");
-+ return header;
- }
-
-- public void printSummaryAnchor(ClassDoc cd) {
-- writer.anchor("nested_class_summary");
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
-+ memberTree.addContent(writer.getMarkerAnchor("nested_class_summary"));
- }
-
-- public void printInheritedSummaryAnchor(ClassDoc cd) {
-- writer.anchor("nested_classes_inherited_from_class_" +
-- cd.qualifiedName());
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addInheritedSummaryAnchor(ClassDoc cd, Content inheritedTree) {
-+ inheritedTree.addContent(writer.getMarkerAnchor(
-+ "nested_classes_inherited_from_class_" + cd.qualifiedName()));
- }
-
-- public void printInheritedSummaryLabel(ClassDoc cd) {
-- String clslink = writer.getPreQualifiedClassLink(
-- LinkInfoImpl.CONTEXT_MEMBER, cd, false);
-- writer.strong();
-- writer.printText(cd.isInterface() ?
-- "doclet.Nested_Classes_Interface_Inherited_From_Interface" :
-- "doclet.Nested_Classes_Interfaces_Inherited_From_Class",
-- clslink);
-- writer.strongEnd();
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addInheritedSummaryLabel(ClassDoc cd, Content inheritedTree) {
-+ Content classLink = new RawHtml(writer.getPreQualifiedClassLink(
-+ LinkInfoImpl.CONTEXT_MEMBER, cd, false));
-+ Content label = new StringContent(cd.isInterface() ?
-+ configuration().getText("doclet.Nested_Classes_Interface_Inherited_From_Interface") :
-+ configuration().getText("doclet.Nested_Classes_Interfaces_Inherited_From_Class"));
-+ Content labelHeading = HtmlTree.HEADING(HtmlConstants.INHERITED_SUMMARY_HEADING,
-+ label);
-+ labelHeading.addContent(writer.getSpace());
-+ labelHeading.addContent(classLink);
-+ inheritedTree.addContent(labelHeading);
- }
-
-- protected void writeSummaryLink(int context, ClassDoc cd, ProgramElementDoc member) {
-- writer.strong();
-- writer.printLink(new LinkInfoImpl(context, (ClassDoc)member, false));
-- writer.strongEnd();
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected void addSummaryLink(int context, ClassDoc cd, ProgramElementDoc member,
-+ Content tdSummary) {
-+ Content strong = HtmlTree.STRONG(new RawHtml(
-+ writer.getLink(new LinkInfoImpl(context, (ClassDoc)member, false))));
-+ Content code = HtmlTree.CODE(strong);
-+ tdSummary.addContent(code);
- }
-
-- protected void writeInheritedSummaryLink(ClassDoc cd,
-- ProgramElementDoc member) {
-- writer.printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER,
-- (ClassDoc)member, false));
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected void addInheritedSummaryLink(ClassDoc cd,
-+ ProgramElementDoc member, Content linksTree) {
-+ linksTree.addContent(new RawHtml(
-+ writer.getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER,
-+ (ClassDoc)member, false))));
- }
-
-- protected void printSummaryType(ProgramElementDoc member) {
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected void addSummaryType(ProgramElementDoc member,
-+ Content tdSummaryType) {
- ClassDoc cd = (ClassDoc)member;
-- printModifierAndType(cd, null);
-+ addModifierAndType(cd, null, tdSummaryType);
- }
-
-- protected void printHeader(ClassDoc cd) {
-- // N.A.
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected Content getDeprecatedLink(ProgramElementDoc member) {
-+ return writer.getQualifiedClassLink(LinkInfoImpl.CONTEXT_MEMBER,
-+ (ClassDoc)member);
- }
-
-- protected void printBodyHtmlEnd(ClassDoc cd) {
-- // N.A.
-- }
--
-- protected void printMember(ProgramElementDoc member) {
-- // N.A.
-- }
--
-- protected void writeDeprecatedLink(ProgramElementDoc member) {
-- writer.printQualifiedClassLink(LinkInfoImpl.CONTEXT_MEMBER,
-- (ClassDoc)member);
-- }
--
-- protected void printNavSummaryLink(ClassDoc cd, boolean link) {
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
- if (link) {
-- writer.printHyperLink("", (cd == null) ? "nested_class_summary":
-- "nested_classes_inherited_from_class_" +
-+ return writer.getHyperLink("", (cd == null) ? "nested_class_summary":
-+ "nested_classes_inherited_from_class_" +
- cd.qualifiedName(),
-- ConfigurationImpl.getInstance().getText("doclet.navNested"));
-+ writer.getResource("doclet.navNested"));
- } else {
-- writer.printText("doclet.navNested");
-+ return writer.getResource("doclet.navNested");
- }
- }
-
-- protected void printNavDetailLink(boolean link) {
-- }
--
-- protected void printMemberLink(ProgramElementDoc member) {
-- }
--
-- protected void printMembersSummaryLink(ClassDoc cd, ClassDoc icd,
-- boolean link) {
-- if (link) {
-- writer.printHyperLink(cd.name() + ".html",
-- (cd == icd)?
-- "nested_class_summary":
-- "nested_classes_inherited_from_class_" +
-- icd.qualifiedName(),
-- ConfigurationImpl.getInstance().getText(
-- "doclet.Nested_Class_Summary"));
-- } else {
-- writer.printText("doclet.Nested_Class_Summary");
-- }
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected void addNavDetailLink(boolean link, Content liNav) {
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageFrameWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageFrameWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageFrameWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageFrameWriter.java
-@@ -25,18 +25,20 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.io.*;
-+import java.util.*;
-+import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
- import com.sun.tools.doclets.internal.toolkit.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-
--import com.sun.javadoc.*;
--import java.io.*;
--import java.util.*;
- /**
- * Class to generate file for each package contents in the left-hand bottom
- * frame. This will list all the Class Kinds in the package. A click on any
- * class-kind will update the right-hand frame with the clicked class-kind page.
- *
- * @author Atul M Dambalkar
-+ * @author Bhavesh Patel (Modified)
- */
- public class PackageFrameWriter extends HtmlDocletWriter {
-
-@@ -85,132 +87,107 @@
- * @param packageDoc The package for which "pacakge-frame.html" is to be generated.
- */
- public static void generate(ConfigurationImpl configuration,
-- PackageDoc packageDoc) {
-+ PackageDoc packageDoc) {
- PackageFrameWriter packgen;
- try {
- packgen = new PackageFrameWriter(configuration, packageDoc);
- String pkgName = Util.getPackageName(packageDoc);
-- packgen.printHtmlHeader(pkgName, configuration.metakeywords.getMetaKeywords(packageDoc), false);
-- packgen.printPackageHeader(pkgName);
-- packgen.generateClassListing();
-- packgen.printBodyHtmlEnd();
-+ Content body = packgen.getBody(false, packgen.getWindowTitle(pkgName));
-+ Content pkgNameContent = new StringContent(pkgName);
-+ Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, HtmlStyle.bar,
-+ packgen.getTargetPackageLink(packageDoc, "classFrame", pkgNameContent));
-+ body.addContent(heading);
-+ HtmlTree div = new HtmlTree(HtmlTag.DIV);
-+ div.addStyle(HtmlStyle.indexContainer);
-+ packgen.addClassListing(div);
-+ body.addContent(div);
-+ packgen.printHtmlDocument(
-+ configuration.metakeywords.getMetaKeywords(packageDoc), false, body);
- packgen.close();
- } catch (IOException exc) {
- configuration.standardmessage.error(
-- "doclet.exception_encountered",
-- exc.toString(), OUTPUT_FILE_NAME);
-+ "doclet.exception_encountered",
-+ exc.toString(), OUTPUT_FILE_NAME);
- throw new DocletAbortException();
- }
- }
-
- /**
-- * Generate class listing for all the classes in this package. Divide class
-+ * Add class listing for all the classes in this package. Divide class
- * listing as per the class kind and generate separate listing for
- * Classes, Interfaces, Exceptions and Errors.
-+ *
-+ * @param contentTree the content tree to which the listing will be added
- */
-- protected void generateClassListing() {
-+ protected void addClassListing(Content contentTree) {
- Configuration config = configuration();
- if (packageDoc.isIncluded()) {
-- generateClassKindListing(packageDoc.interfaces(),
-- configuration.getText("doclet.Interfaces"));
-- generateClassKindListing(packageDoc.ordinaryClasses(),
-- configuration.getText("doclet.Classes"));
-- generateClassKindListing(packageDoc.enums(),
-- configuration.getText("doclet.Enums"));
-- generateClassKindListing(packageDoc.exceptions(),
-- configuration.getText("doclet.Exceptions"));
-- generateClassKindListing(packageDoc.errors(),
-- configuration.getText("doclet.Errors"));
-- generateClassKindListing(packageDoc.annotationTypes(),
-- configuration.getText("doclet.AnnotationTypes"));
-+ addClassKindListing(packageDoc.interfaces(),
-+ getResource("doclet.Interfaces"), contentTree);
-+ addClassKindListing(packageDoc.ordinaryClasses(),
-+ getResource("doclet.Classes"), contentTree);
-+ addClassKindListing(packageDoc.enums(),
-+ getResource("doclet.Enums"), contentTree);
-+ addClassKindListing(packageDoc.exceptions(),
-+ getResource("doclet.Exceptions"), contentTree);
-+ addClassKindListing(packageDoc.errors(),
-+ getResource("doclet.Errors"), contentTree);
-+ addClassKindListing(packageDoc.annotationTypes(),
-+ getResource("doclet.AnnotationTypes"), contentTree);
- } else {
- String name = Util.getPackageName(packageDoc);
-- generateClassKindListing(config.classDocCatalog.interfaces(name),
-- configuration.getText("doclet.Interfaces"));
-- generateClassKindListing(config.classDocCatalog.ordinaryClasses(name),
-- configuration.getText("doclet.Classes"));
-- generateClassKindListing(config.classDocCatalog.enums(name),
-- configuration.getText("doclet.Enums"));
-- generateClassKindListing(config.classDocCatalog.exceptions(name),
-- configuration.getText("doclet.Exceptions"));
-- generateClassKindListing(config.classDocCatalog.errors(name),
-- configuration.getText("doclet.Errors"));
-- generateClassKindListing(config.classDocCatalog.annotationTypes(name),
-- configuration.getText("doclet.AnnotationTypes"));
-+ addClassKindListing(config.classDocCatalog.interfaces(name),
-+ getResource("doclet.Interfaces"), contentTree);
-+ addClassKindListing(config.classDocCatalog.ordinaryClasses(name),
-+ getResource("doclet.Classes"), contentTree);
-+ addClassKindListing(config.classDocCatalog.enums(name),
-+ getResource("doclet.Enums"), contentTree);
-+ addClassKindListing(config.classDocCatalog.exceptions(name),
-+ getResource("doclet.Exceptions"), contentTree);
-+ addClassKindListing(config.classDocCatalog.errors(name),
-+ getResource("doclet.Errors"), contentTree);
-+ addClassKindListing(config.classDocCatalog.annotationTypes(name),
-+ getResource("doclet.AnnotationTypes"), contentTree);
- }
- }
-
- /**
-- * Generate specific class kind listing. Also add label to the listing.
-+ * Add specific class kind listing. Also add label to the listing.
- *
-- * @param arr Array of specific class kinds, namely Class or Interface or
-- * Exception or Error.
-- * @param label Label for the listing
-+ * @param arr Array of specific class kinds, namely Class or Interface or Exception or Error
-+ * @param labelContent content tree of the label to be added
-+ * @param contentTree the content tree to which the class kind listing will be added
- */
-- protected void generateClassKindListing(ClassDoc[] arr, String label) {
-+ protected void addClassKindListing(ClassDoc[] arr, Content labelContent,
-+ Content contentTree) {
- if(arr.length > 0) {
- Arrays.sort(arr);
-- printPackageTableHeader();
-- fontSizeStyle("+1", "FrameHeadingFont");
- boolean printedHeader = false;
-+ HtmlTree ul = new HtmlTree(HtmlTag.UL);
-+ ul.addAttr(HtmlAttr.TITLE, labelContent.toString());
- for (int i = 0; i < arr.length; i++) {
- if (documentedClasses != null &&
-- !documentedClasses.contains(arr[i])) {
-+ !documentedClasses.contains(arr[i])) {
- continue;
- }
- if (!Util.isCoreClass(arr[i]) || !
-- configuration.isGeneratedDoc(arr[i])) {
-+ configuration.isGeneratedDoc(arr[i])) {
- continue;
- }
- if (!printedHeader) {
-- print(label);
-- fontEnd();
-- println("&nbsp;");
-- fontStyle("FrameItemFont");
-+ Content heading = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
-+ true, labelContent);
-+ contentTree.addContent(heading);
- printedHeader = true;
- }
-- br();
-- printLink(new LinkInfoImpl(
-- LinkInfoImpl.PACKAGE_FRAME,
-- arr[i],
-- (arr[i].isInterface() ?
-- italicsText(arr[i].name()) :
-- arr[i].name()),"classFrame")
-- );
-+ Content link = new RawHtml (getLink(new LinkInfoImpl(
-+ LinkInfoImpl.PACKAGE_FRAME, arr[i],
-+ (arr[i].isInterface() ? italicsText(arr[i].name()) :
-+ arr[i].name()),"classFrame")));
-+ Content li = HtmlTree.LI(link);
-+ ul.addContent(li);
- }
-- fontEnd();
-- printPackageTableFooter();
-- println();
-+ contentTree.addContent(ul);
- }
- }
--
-- /**
-- * Print the package link at the top of the class kind listing. Clicking
-- * this link, package-summary page will appear in the right hand frame.
-- *
-- * @param heading Top Heading to be used for the class kind listing.
-- */
-- protected void printPackageHeader(String heading) {
-- fontSizeStyle("+1", "FrameTitleFont");
-- printTargetPackageLink(packageDoc, "classFrame", heading);
-- fontEnd();
-- }
--
-- /**
-- * The table for the class kind listing.
-- */
-- protected void printPackageTableHeader() {
-- table();
-- tr();
-- tdNowrap();
-- }
--
-- /**
-- * Closing Html tags for table of class kind listing.
-- */
-- protected void printPackageTableFooter() {
-- tdEnd();
-- trEnd();
-- tableEnd();
-- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexFrameWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexFrameWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexFrameWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexFrameWriter.java
-@@ -25,10 +25,11 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.io.*;
-+import com.sun.javadoc.*;
-+import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
--
--import com.sun.javadoc.*;
--import java.io.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-
- /**
- * Generate the package index for the left-hand frame in the generated output.
-@@ -58,7 +59,7 @@
- String filename = "overview-frame.html";
- try {
- packgen = new PackageIndexFrameWriter(configuration, filename);
-- packgen.generatePackageIndexFile("doclet.Window_Overview", false);
-+ packgen.buildPackageIndexFile("doclet.Window_Overview", false);
- packgen.close();
- } catch (IOException exc) {
- configuration.standardmessage.error(
-@@ -69,114 +70,86 @@
- }
-
- /**
-- * Print each package name on separate rows.
-- *
-- * @param pd PackageDoc
-+ * {@inheritDoc}
- */
-- protected void printIndexRow(PackageDoc pd) {
-- fontStyle("FrameItemFont");
-- if (pd.name().length() > 0) {
-- print(getHyperLink(pathString(pd, "package-frame.html"), "",
-- pd.name(), false, "", "", "packageFrame"));
-- } else {
-- print(getHyperLink("package-frame.html", "", "&lt;unnamed package>",
-- false, "", "", "packageFrame"));
-+ protected void addPackagesList(PackageDoc[] packages, String text,
-+ String tableSummary, Content body) {
-+ Content heading = HtmlTree.HEADING(HtmlConstants.PACKAGE_HEADING, true,
-+ packagesLabel);
-+ Content div = HtmlTree.DIV(HtmlStyle.indexContainer, heading);
-+ HtmlTree ul = new HtmlTree(HtmlTag.UL);
-+ ul.addAttr(HtmlAttr.TITLE, packagesLabel.toString());
-+ for(int i = 0; i < packages.length; i++) {
-+ if (packages[i] != null) {
-+ ul.addContent(getPackage(packages[i]));
-+ }
- }
-- fontEnd();
-- br();
-+ div.addContent(ul);
-+ body.addContent(div);
- }
-
- /**
-- * Print the "-packagesheader" string in strong format, at top of the page,
-- * if it is not the empty string. Otherwise print the "-header" string.
-- * Despite the name, there is actually no navigation bar for this page.
-+ * Gets each package name as a separate link.
-+ *
-+ * @param pd PackageDoc
-+ * @return content for the package link
- */
-- protected void printNavigationBarHeader() {
-- printTableHeader(true);
-- fontSizeStyle("+1", "FrameTitleFont");
-+ protected Content getPackage(PackageDoc pd) {
-+ Content packageLinkContent;
-+ Content packageLabel;
-+ if (pd.name().length() > 0) {
-+ packageLabel = getPackageLabel(pd.name());
-+ packageLinkContent = getHyperLink(pathString(pd,
-+ "package-frame.html"), "", packageLabel, "",
-+ "packageFrame");
-+ } else {
-+ packageLabel = new RawHtml("&lt;unnamed package&gt;");
-+ packageLinkContent = getHyperLink("package-frame.html",
-+ "", packageLabel, "", "packageFrame");
-+ }
-+ Content li = HtmlTree.LI(packageLinkContent);
-+ return li;
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ protected void addNavigationBarHeader(Content body) {
-+ Content headerContent;
- if (configuration.packagesheader.length() > 0) {
-- strong(replaceDocRootDir(configuration.packagesheader));
-+ headerContent = new RawHtml(replaceDocRootDir(configuration.packagesheader));
- } else {
-- strong(replaceDocRootDir(configuration.header));
-+ headerContent = new RawHtml(replaceDocRootDir(configuration.header));
- }
-- fontEnd();
-- printTableFooter(true);
-+ Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, true,
-+ HtmlStyle.bar, headerContent);
-+ body.addContent(heading);
- }
-
- /**
- * Do nothing as there is no overview information in this page.
- */
-- protected void printOverviewHeader() {
-+ protected void addOverviewHeader(Content body) {
- }
-
- /**
-- * Print Html "table" tag for the package index format.
-+ * Adds "All Classes" link for the top of the left-hand frame page to the
-+ * documentation tree.
- *
-- * @param text Text string will not be used in this method.
-+ * @param body the Content object to which the all classes link should be added
- */
-- protected void printIndexHeader(String text, String tableSummary) {
-- printTableHeader(false);
-+ protected void addAllClassesLink(Content body) {
-+ Content linkContent = getHyperLink("allclasses-frame.html", "",
-+ allclassesLabel, "", "packageFrame");
-+ Content div = HtmlTree.DIV(HtmlStyle.indexHeader, linkContent);
-+ body.addContent(div);
- }
-
- /**
-- * Print Html closing "table" tag at the end of the package index.
-+ * {@inheritDoc}
- */
-- protected void printIndexFooter() {
-- printTableFooter(false);
-- }
--
-- /**
-- * Print "All Classes" link at the top of the left-hand frame page.
-- */
-- protected void printAllClassesPackagesLink() {
-- fontStyle("FrameItemFont");
-- print(getHyperLink("allclasses-frame.html", "",
-- configuration.getText("doclet.All_Classes"), false, "", "",
-- "packageFrame"));
-- fontEnd();
-- p();
-- fontSizeStyle("+1", "FrameHeadingFont");
-- printText("doclet.Packages");
-- fontEnd();
-- br();
-- }
--
-- /**
-- * Just print some space, since there is no navigation bar for this page.
-- */
-- protected void printNavigationBarFooter() {
-- p();
-- space();
-- }
--
-- /**
-- * Print Html closing tags for the table for package index.
-- *
-- * @param isHeading true if this is a table for a heading.
-- */
-- private void printTableFooter(boolean isHeading) {
-- if (isHeading) {
-- thEnd();
-- } else {
-- tdEnd();
-- }
-- trEnd();
-- tableEnd();
-- }
--
-- /**
-- * Print Html tags for the table for package index.
-- *
-- * @param isHeading true if this is a table for a heading.
-- */
-- private void printTableHeader(boolean isHeading) {
-- table();
-- tr();
-- if (isHeading) {
-- thAlignNowrap("left");
-- } else {
-- tdNowrap();
-- }
--
-+ protected void addNavigationBarFooter(Content body) {
-+ Content p = HtmlTree.P(getSpace());
-+ body.addContent(p);
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java
-@@ -25,10 +25,12 @@
-
- package com.sun.tools.doclets.formats.html;
-
--import com.sun.tools.doclets.internal.toolkit.util.*;
--import com.sun.javadoc.*;
- import java.io.*;
- import java.util.*;
-+import com.sun.javadoc.*;
-+import com.sun.tools.doclets.internal.toolkit.*;
-+import com.sun.tools.doclets.internal.toolkit.util.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-
- /**
- * Generate the package index page "overview-summary.html" for the right-hand
-@@ -83,7 +85,7 @@
- String filename = "overview-summary.html";
- try {
- packgen = new PackageIndexWriter(configuration, filename);
-- packgen.generatePackageIndexFile("doclet.Window_Overview_Summary", true);
-+ packgen.buildPackageIndexFile("doclet.Window_Overview_Summary", true);
- packgen.close();
- } catch (IOException exc) {
- configuration.standardmessage.error(
-@@ -94,125 +96,139 @@
- }
-
- /**
-- * Print each package in separate rows in the index table. Generate link
-- * to each package.
-+ * Depending upon the grouping information and their titles, add
-+ * separate table indices for each package group.
- *
-- * @param pkg Package to which link is to be generated.
-+ * @param body the documentation tree to which the index will be added
- */
-- protected void printIndexRow(PackageDoc pkg) {
-- if(pkg != null && pkg.name().length() > 0) {
-- trBgcolorStyle("white", "TableRowColor");
-- summaryRow(20);
-- strong();
-- printPackageLink(pkg, Util.getPackageName(pkg), false);
-- strongEnd();
-- summaryRowEnd();
-- summaryRow(0);
-- printSummaryComment(pkg);
-- summaryRowEnd();
-- trEnd();
-- }
-- }
--
-- /**
-- * Depending upon the grouping information and their titles, generate
-- * separate table indices for each package group.
-- */
-- protected void generateIndex() {
-+ protected void addIndex(Content body) {
- for (int i = 0; i < groupList.size(); i++) {
- String groupname = (String)groupList.get(i);
- List list = (List)groupPackageMap.get(groupname);
- if (list != null && list.size() > 0) {
-- printIndexContents((PackageDoc[])list.
-- toArray(new PackageDoc[list.size()]),
-- groupname,
-- configuration.getText("doclet.Member_Table_Summary",
-- groupname,
-- configuration.getText("doclet.packages")));
-+ addIndexContents(list.toArray(new PackageDoc[list.size()]),
-+ groupname, configuration.getText("doclet.Member_Table_Summary",
-+ groupname, configuration.getText("doclet.packages")), body);
- }
- }
- }
-
- /**
-- * Print the overview summary comment for this documentation. Print one line
-- * summary at the top of the page and generate a link to the description,
-- * which is generated at the end of this page.
-+ * {@inheritDoc}
- */
-- protected void printOverviewHeader() {
-- if (root.inlineTags().length > 0) {
-- printSummaryComment(root);
-- p();
-- strong(configuration.getText("doclet.See"));
-- br();
-- printNbsps();
-- printHyperLink("", "overview_description",
-- configuration.getText("doclet.Description"), true);
-- p();
-+ protected void addPackagesList(PackageDoc[] packages, String text,
-+ String tableSummary, Content body) {
-+ Content table = HtmlTree.TABLE(HtmlStyle.overviewSummary, 0, 3, 0, tableSummary,
-+ getTableCaption(text));
-+ table.addContent(getSummaryTableHeader(packageTableHeader, "col"));
-+ Content tbody = new HtmlTree(HtmlTag.TBODY);
-+ addPackagesList(packages, tbody);
-+ table.addContent(tbody);
-+ Content div = HtmlTree.DIV(HtmlStyle.contentContainer, table);
-+ body.addContent(div);
-+ }
-+
-+ /**
-+ * Adds list of packages in the index table. Generate link to each package.
-+ *
-+ * @param packages Packages to which link is to be generated
-+ * @param tbody the documentation tree to which the list will be added
-+ */
-+ protected void addPackagesList(PackageDoc[] packages, Content tbody) {
-+ for (int i = 0; i < packages.length; i++) {
-+ if (packages[i] != null && packages[i].name().length() > 0) {
-+ Content packageLinkContent = getPackageLink(packages[i],
-+ getPackageName(packages[i]));
-+ Content tdPackage = HtmlTree.TD(HtmlStyle.colFirst, packageLinkContent);
-+ HtmlTree tdSummary = new HtmlTree(HtmlTag.TD);
-+ tdSummary.addStyle(HtmlStyle.colLast);
-+ addSummaryComment(packages[i], tdSummary);
-+ HtmlTree tr = HtmlTree.TR(tdPackage);
-+ tr.addContent(tdSummary);
-+ if (i%2 == 0)
-+ tr.addStyle(HtmlStyle.altColor);
-+ else
-+ tr.addStyle(HtmlStyle.rowColor);
-+ tbody.addContent(tr);
-+ }
- }
- }
-
- /**
-- * Print Html tags for the table for this package index.
-+ * Adds the overview summary comment for this documentation. Add one line
-+ * summary at the top of the page and generate a link to the description,
-+ * which is added at the end of this page.
-+ *
-+ * @param body the documentation tree to which the overview header will be added
- */
-- protected void printIndexHeader(String text, String tableSummary) {
-- tableIndexSummary(tableSummary);
-- tableCaptionStart();
-- print(text);
-- tableCaptionEnd();
-- summaryTableHeader(packageTableHeader, "col");
-- }
--
-- /**
-- * Print Html closing tags for the table for this package index.
-- */
-- protected void printIndexFooter() {
-- tableEnd();
-- p();
-- space();
-- }
--
-- /**
-- * Print the overview comment as provided in the file specified by the
-- * "-overview" option on the command line.
-- */
-- protected void printOverviewComment() {
-+ protected void addOverviewHeader(Content body) {
- if (root.inlineTags().length > 0) {
-- anchor("overview_description");
-- p();
-- printInlineComment(root);
-- p();
-+ HtmlTree p = new HtmlTree(HtmlTag.P);
-+ p.addStyle(HtmlStyle.subTitle);
-+ addSummaryComment(root, p);
-+ Content div = HtmlTree.DIV(HtmlStyle.header, p);
-+ Content see = seeLabel;
-+ see.addContent(" ");
-+ Content descPara = HtmlTree.P(see);
-+ Content descLink = getHyperLink("", "overview_description",
-+ descriptionLabel, "", "");
-+ descPara.addContent(descLink);
-+ div.addContent(descPara);
-+ body.addContent(div);
- }
- }
-
- /**
-- * Call {@link #printOverviewComment()} and then genrate the tag information
-- * as provided in the file specified by the "-overview" option on the
-- * command line.
-+ * Adds the overview comment as provided in the file specified by the
-+ * "-overview" option on the command line.
-+ *
-+ * @param htmltree the documentation tree to which the overview comment will
-+ * be added
- */
-- protected void printOverview() throws IOException {
-- printOverviewComment();
-- printTags(root);
-+ protected void addOverviewComment(Content htmltree) {
-+ if (root.inlineTags().length > 0) {
-+ htmltree.addContent(getMarkerAnchor("overview_description"));
-+ HtmlTree p = new HtmlTree(HtmlTag.P);
-+ p.addStyle(HtmlStyle.subTitle);
-+ addInlineComment(root, p);
-+ htmltree.addContent(p);
-+ }
- }
-
- /**
-- * Print the top text (from the -top option), the upper
-- * navigation bar, and then the title (from the"-title"
-- * option), at the top of page.
-+ * Adds the tag information as provided in the file specified by the
-+ * "-overview" option on the command line.
-+ *
-+ * @param body the documentation tree to which the overview will be added
- */
-- protected void printNavigationBarHeader() {
-- printTop();
-- navLinks(true);
-- hr();
-- printConfigurationTitle();
-+ protected void addOverview(Content body) throws IOException {
-+ HtmlTree div = new HtmlTree(HtmlTag.DIV);
-+ div.addStyle(HtmlStyle.footer);
-+ addOverviewComment(div);
-+ addTagsInfo(root, div);
-+ body.addContent(div);
- }
-
- /**
-- * Print the lower navigation bar and the bottom text
-+ * Adds the top text (from the -top option), the upper
-+ * navigation bar, and then the title (from the"-title"
-+ * option), at the top of page.
-+ *
-+ * @body the documentation tree to which the navigation bar header will be added
-+ */
-+ protected void addNavigationBarHeader(Content body) {
-+ addTop(body);
-+ addNavLinks(true, body);
-+ addConfigurationTitle(body);
-+ }
-+
-+ /**
-+ * Adds the lower navigation bar and the bottom text
- * (from the -bottom option) at the bottom of page.
-- */
-- protected void printNavigationBarFooter() {
-- hr();
-- navLinks(false);
-- printBottom();
-+ *
-+ * @param the documentation tree to which the navigation bar footer will be a */
-+ protected void addNavigationBarFooter(Content body) {
-+ addNavLinks(false, body);
-+ addBottom(body);
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageTreeWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageTreeWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageTreeWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageTreeWriter.java
-@@ -29,12 +29,15 @@
-
- import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-+import com.sun.tools.doclets.internal.toolkit.*;
-
- /**
- * Class to generate Tree page for a package. The name of the file generated is
- * "package-tree.html" and it is generated in the respective package directory.
- *
- * @author Atul M Dambalkar
-+ * @author Bhavesh Patel (Modified)
- */
- public class PackageTreeWriter extends AbstractTreeWriter {
-
-@@ -107,94 +110,96 @@
- * Generate a separate tree file for each package.
- */
- protected void generatePackageTreeFile() throws IOException {
-- printHtmlHeader(packagedoc.name() + " "
-- + configuration.getText("doclet.Window_Class_Hierarchy"), null, true);
--
-- printPackageTreeHeader();
--
-+ Content body = getPackageTreeHeader();
-+ Content headContent = getResource("doclet.Hierarchy_For_Package",
-+ Util.getPackageName(packagedoc));
-+ Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, false,
-+ HtmlStyle.title, headContent);
-+ Content div = HtmlTree.DIV(HtmlStyle.header, heading);
- if (configuration.packages.length > 1) {
-- printLinkToMainTree();
-+ addLinkToMainTree(div);
- }
--
-- generateTree(classtree.baseclasses(), "doclet.Class_Hierarchy");
-- generateTree(classtree.baseinterfaces(), "doclet.Interface_Hierarchy");
-- generateTree(classtree.baseAnnotationTypes(), "doclet.Annotation_Type_Hierarchy");
-- generateTree(classtree.baseEnums(), "doclet.Enum_Hierarchy");
--
-- printPackageTreeFooter();
-- printBottom();
-- printBodyHtmlEnd();
-+ body.addContent(div);
-+ HtmlTree divTree = new HtmlTree(HtmlTag.DIV);
-+ divTree.addStyle(HtmlStyle.contentContainer);
-+ addTree(classtree.baseclasses(), "doclet.Class_Hierarchy", divTree);
-+ addTree(classtree.baseinterfaces(), "doclet.Interface_Hierarchy", divTree);
-+ addTree(classtree.baseAnnotationTypes(), "doclet.Annotation_Type_Hierarchy", divTree);
-+ addTree(classtree.baseEnums(), "doclet.Enum_Hierarchy", divTree);
-+ body.addContent(divTree);
-+ addNavLinks(false, body);
-+ addBottom(body);
-+ printHtmlDocument(null, true, body);
- }
-
- /**
-- * Print the navigation bar header for the package tree file.
-+ * Get the package tree header.
-+ *
-+ * @return a content tree for the header
- */
-- protected void printPackageTreeHeader() {
-- printTop();
-- navLinks(true);
-- hr();
-- center();
-- h2(configuration.getText("doclet.Hierarchy_For_Package",
-- Util.getPackageName(packagedoc)));
-- centerEnd();
-+ protected Content getPackageTreeHeader() {
-+ String title = packagedoc.name() + " " +
-+ configuration.getText("doclet.Window_Class_Hierarchy");
-+ Content bodyTree = getBody(true, getWindowTitle(title));
-+ addTop(bodyTree);
-+ addNavLinks(true, bodyTree);
-+ return bodyTree;
- }
-
- /**
-- * Generate a link to the tree for all the packages.
-+ * Add a link to the tree for all the packages.
-+ *
-+ * @param div the content tree to which the link will be added
- */
-- protected void printLinkToMainTree() {
-- dl();
-- dt();
-- strongText("doclet.Package_Hierarchies");
-- dtEnd();
-- dd();
-- navLinkMainTree(configuration.getText("doclet.All_Packages"));
-- ddEnd();
-- dlEnd();
-- hr();
-+ protected void addLinkToMainTree(Content div) {
-+ Content span = HtmlTree.SPAN(HtmlStyle.strong,
-+ getResource("doclet.Package_Hierarchies"));
-+ div.addContent(span);
-+ HtmlTree ul = new HtmlTree (HtmlTag.UL);
-+ ul.addStyle(HtmlStyle.horizontal);
-+ ul.addContent(getNavLinkMainTree(configuration.getText("doclet.All_Packages")));
-+ div.addContent(ul);
- }
-
- /**
-- * Print the navigation bar footer for the package tree file.
-+ * Get link for the previous package tree file.
-+ *
-+ * @return a content tree for the link
- */
-- protected void printPackageTreeFooter() {
-- hr();
-- navLinks(false);
-- }
--
-- /**
-- * Link for the previous package tree file.
-- */
-- protected void navLinkPrevious() {
-+ protected Content getNavLinkPrevious() {
- if (prev == null) {
-- navLinkPrevious(null);
-+ return getNavLinkPrevious(null);
- } else {
- String path = DirectoryManager.getRelativePath(packagedoc.name(),
-- prev.name());
-- navLinkPrevious(path + "package-tree.html");
-+ prev.name());
-+ return getNavLinkPrevious(path + "package-tree.html");
- }
- }
-
- /**
-- * Link for the next package tree file.
-+ * Get link for the next package tree file.
-+ *
-+ * @return a content tree for the link
- */
-- protected void navLinkNext() {
-+ protected Content getNavLinkNext() {
- if (next == null) {
-- navLinkNext(null);
-+ return getNavLinkNext(null);
- } else {
- String path = DirectoryManager.getRelativePath(packagedoc.name(),
-- next.name());
-- navLinkNext(path + "package-tree.html");
-+ next.name());
-+ return getNavLinkNext(path + "package-tree.html");
- }
- }
-
- /**
-- * Link to the package summary page for the package of this tree.
-+ * Get link to the package summary page for the package of this tree.
-+ *
-+ * @return a content tree for the package link
- */
-- protected void navLinkPackage() {
-- navCellStart();
-- printHyperLink("package-summary.html", "", configuration.getText("doclet.Package"),
-- true, "NavBarFont1");
-- navCellEnd();
-+ protected Content getNavLinkPackage() {
-+ Content linkContent = getHyperLink("package-summary.html", "",
-+ packageLabel);
-+ Content li = HtmlTree.LI(linkContent);
-+ return li;
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java
-@@ -25,10 +25,12 @@
-
- package com.sun.tools.doclets.formats.html;
-
--import com.sun.tools.doclets.internal.toolkit.util.*;
--import com.sun.javadoc.*;
- import java.io.*;
- import java.util.*;
-+import com.sun.javadoc.*;
-+import com.sun.tools.doclets.internal.toolkit.util.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-+import com.sun.tools.doclets.internal.toolkit.*;
-
- /**
- * Generate package usage information.
-@@ -106,49 +108,74 @@
-
-
- /**
-- * Print the class use list.
-+ * Generate the package use list.
- */
- protected void generatePackageUseFile() throws IOException {
-- printPackageUseHeader();
--
-+ Content body = getPackageUseHeader();
-+ HtmlTree div = new HtmlTree(HtmlTag.DIV);
-+ div.addStyle(HtmlStyle.contentContainer);
- if (usingPackageToUsedClasses.isEmpty()) {
-- printText("doclet.ClassUse_No.usage.of.0", pkgdoc.name());
-- p();
-+ div.addContent(getResource(
-+ "doclet.ClassUse_No.usage.of.0", pkgdoc.name()));
- } else {
-- generatePackageUse();
-+ addPackageUse(div);
- }
--
-- printPackageUseFooter();
-+ body.addContent(div);
-+ addNavLinks(false, body);
-+ addBottom(body);
-+ printHtmlDocument(null, true, body);
- }
-
- /**
-- * Print the class use list.
-+ * Add the package use information.
-+ *
-+ * @param contentTree the content tree to which the package use information will be added
- */
-- protected void generatePackageUse() throws IOException {
-+ protected void addPackageUse(Content contentTree) throws IOException {
-+ HtmlTree ul = new HtmlTree(HtmlTag.UL);
-+ ul.addStyle(HtmlStyle.blockList);
- if (configuration.packages.length > 1) {
-- generatePackageList();
-+ addPackageList(ul);
- }
-- generateClassList();
-+ addClassList(ul);
-+ contentTree.addContent(ul);
- }
-
-- protected void generatePackageList() throws IOException {
-- tableIndexSummary(useTableSummary);
-- tableCaptionStart();
-- printText("doclet.ClassUse_Packages.that.use.0",
-- getPackageLink(pkgdoc, Util.getPackageName(pkgdoc), false));
-- tableCaptionEnd();
-- summaryTableHeader(packageTableHeader, "col");
-+ /**
-+ * Add the list of packages that use the given package.
-+ *
-+ * @param contentTree the content tree to which the package list will be added
-+ */
-+ protected void addPackageList(Content contentTree) throws IOException {
-+ Content table = HtmlTree.TABLE(0, 3, 0, useTableSummary,
-+ getTableCaption(configuration().getText(
-+ "doclet.ClassUse_Packages.that.use.0",
-+ getPackageLinkString(pkgdoc, Util.getPackageName(pkgdoc), false))));
-+ table.addContent(getSummaryTableHeader(packageTableHeader, "col"));
-+ Content tbody = new HtmlTree(HtmlTag.TBODY);
- Iterator it = usingPackageToUsedClasses.keySet().iterator();
-- while (it.hasNext()) {
-+ for (int i = 0; it.hasNext(); i++) {
- PackageDoc pkg = configuration.root.packageNamed((String)it.next());
-- generatePackageUse(pkg);
-+ HtmlTree tr = new HtmlTree(HtmlTag.TR);
-+ if (i % 2 == 0) {
-+ tr.addStyle(HtmlStyle.altColor);
-+ } else {
-+ tr.addStyle(HtmlStyle.rowColor);
-+ }
-+ addPackageUse(pkg, tr);
-+ tbody.addContent(tr);
- }
-- tableEnd();
-- space();
-- p();
-+ table.addContent(tbody);
-+ Content li = HtmlTree.LI(HtmlStyle.blockList, table);
-+ contentTree.addContent(li);
- }
-
-- protected void generateClassList() throws IOException {
-+ /**
-+ * Add the list of classes that use the given package.
-+ *
-+ * @param contentTree the content tree to which the class list will be added
-+ */
-+ protected void addClassList(Content contentTree) throws IOException {
- String[] classTableHeader = new String[] {
- configuration.getText("doclet.0_and_1",
- configuration.getText("doclet.Class"),
-@@ -158,118 +185,127 @@
- while (itp.hasNext()) {
- String packageName = (String)itp.next();
- PackageDoc usingPackage = configuration.root.packageNamed(packageName);
-+ HtmlTree li = new HtmlTree(HtmlTag.LI);
-+ li.addStyle(HtmlStyle.blockList);
- if (usingPackage != null) {
-- anchor(usingPackage.name());
-+ li.addContent(getMarkerAnchor(usingPackage.name()));
- }
-- tableIndexSummary(configuration.getText("doclet.Use_Table_Summary",
-- configuration.getText("doclet.classes")));
-- tableCaptionStart();
-- printText("doclet.ClassUse_Classes.in.0.used.by.1",
-- getPackageLink(pkgdoc, Util.getPackageName(pkgdoc), false),
-- getPackageLink(usingPackage,Util.getPackageName(usingPackage), false));
-- tableCaptionEnd();
-- summaryTableHeader(classTableHeader, "col");
-+ String tableSummary = configuration.getText("doclet.Use_Table_Summary",
-+ configuration.getText("doclet.classes"));
-+ Content table = HtmlTree.TABLE(0, 3, 0, tableSummary,
-+ getTableCaption(configuration().getText(
-+ "doclet.ClassUse_Classes.in.0.used.by.1",
-+ getPackageLinkString(pkgdoc, Util.getPackageName(pkgdoc), false),
-+ getPackageLinkString(usingPackage,Util.getPackageName(usingPackage), false))));
-+ table.addContent(getSummaryTableHeader(classTableHeader, "col"));
-+ Content tbody = new HtmlTree(HtmlTag.TBODY);
- Iterator itc =
- ((Collection)usingPackageToUsedClasses.get(packageName))
- .iterator();
-- while (itc.hasNext()) {
-- printClassRow((ClassDoc)itc.next(), packageName);
-+ for (int i = 0; itc.hasNext(); i++) {
-+ HtmlTree tr = new HtmlTree(HtmlTag.TR);
-+ if (i % 2 == 0) {
-+ tr.addStyle(HtmlStyle.altColor);
-+ } else {
-+ tr.addStyle(HtmlStyle.rowColor);
-+ }
-+ addClassRow(itc.next(), packageName, tr);
-+ tbody.addContent(tr);
- }
-- tableEnd();
-- space();
-- p();
-+ table.addContent(tbody);
-+ li.addContent(table);
-+ contentTree.addContent(li);
- }
- }
-
-- protected void printClassRow(ClassDoc usedClass, String packageName) {
-+ /**
-+ * Add a row for the class that uses the given package.
-+ *
-+ * @param usedClass the class that uses the given package
-+ * @param packageName the name of the package to which the class belongs
-+ * @param contentTree the content tree to which the row will be added
-+ */
-+ protected void addClassRow(ClassDoc usedClass, String packageName,
-+ Content contentTree) {
- String path = pathString(usedClass,
-- "class-use/" + usedClass.name() + ".html");
--
-- trBgcolorStyle("white", "TableRowColor");
-- summaryRow(0);
-- strong();
-- printHyperLink(path, packageName, usedClass.name(), true);
-- strongEnd();
-- println(); br();
-- printNbsps();
-- printIndexComment(usedClass);
-- summaryRowEnd();
-- trEnd();
-+ "class-use/" + usedClass.name() + ".html");
-+ Content td = HtmlTree.TD(HtmlStyle.colOne,
-+ getHyperLink(path, packageName, new StringContent(usedClass.name())));
-+ addIndexComment(usedClass, td);
-+ contentTree.addContent(td);
- }
-
- /**
-- * Print the package use list.
-+ * Add the package use information.
-+ *
-+ * @param pkg the package that used the given package
-+ * @param contentTree the content tree to which the information will be added
- */
-- protected void generatePackageUse(PackageDoc pkg) throws IOException {
-- trBgcolorStyle("white", "TableRowColor");
-- summaryRow(0);
-- //Just want an anchor here.
-- printHyperLink("", pkg.name(), Util.getPackageName(pkg), true);
-- summaryRowEnd();
-- summaryRow(0);
-- if (pkg != null) {
-- printSummaryComment(pkg);
-- }
-- space();
-- summaryRowEnd();
-- trEnd();
-+ protected void addPackageUse(PackageDoc pkg, Content contentTree) throws IOException {
-+ Content tdFirst = HtmlTree.TD(HtmlStyle.colFirst,
-+ getHyperLink("", pkg.name(), new StringContent(Util.getPackageName(pkg))));
-+ contentTree.addContent(tdFirst);
-+ HtmlTree tdLast = new HtmlTree(HtmlTag.TD);
-+ tdLast.addStyle(HtmlStyle.colLast);
-+ if (pkg != null)
-+ addSummaryComment(pkg, tdLast);
-+ else
-+ tdLast.addContent(getSpace());
-+ contentTree.addContent(tdLast);
- }
-
- /**
-- * Print the header for the class use Listing.
-+ * Get the header for the package use listing.
-+ *
-+ * @return a content tree representing the package use header
- */
-- protected void printPackageUseHeader() {
-- String packageLabel = configuration.getText("doclet.Package");
-+ protected Content getPackageUseHeader() {
-+ String packageText = configuration.getText("doclet.Package");
- String name = pkgdoc.name();
-- printHtmlHeader(configuration.getText("doclet.Window_ClassUse_Header",
-- packageLabel, name), null, true);
-- printTop();
-- navLinks(true);
-- hr();
-- center();
-- h2();
-- strongText("doclet.ClassUse_Title", packageLabel, name);
-- h2End();
-- centerEnd();
-+ String title = configuration.getText("doclet.Window_ClassUse_Header",
-+ packageText, name);
-+ Content bodyTree = getBody(true, getWindowTitle(title));
-+ addTop(bodyTree);
-+ addNavLinks(true, bodyTree);
-+ Content headContent = getResource("doclet.ClassUse_Title", packageText, name);
-+ Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, true,
-+ HtmlStyle.title, headContent);
-+ Content div = HtmlTree.DIV(HtmlStyle.header, heading);
-+ bodyTree.addContent(div);
-+ return bodyTree;
- }
-
- /**
-- * Print the footer for the class use Listing.
-+ * Get this package link.
-+ *
-+ * @return a content tree for the package link
- */
-- protected void printPackageUseFooter() {
-- hr();
-- navLinks(false);
-- printBottom();
-- printBodyHtmlEnd();
-- }
--
--
-- /**
-- * Print this package link
-- */
-- protected void navLinkPackage() {
-- navCellStart();
-- printHyperLink("package-summary.html", "", configuration.getText("doclet.Package"),
-- true, "NavBarFont1");
-- navCellEnd();
-+ protected Content getNavLinkPackage() {
-+ Content linkContent = getHyperLink("package-summary.html", "",
-+ packageLabel);
-+ Content li = HtmlTree.LI(linkContent);
-+ return li;
- }
-
- /**
-- * Print class use link
-+ * Get the use link.
-+ *
-+ * @return a content tree for the use link
- */
-- protected void navLinkClassUse() {
-- navCellRevStart();
-- fontStyle("NavBarFont1Rev");
-- strongText("doclet.navClassUse");
-- fontEnd();
-- navCellEnd();
-+ protected Content getNavLinkClassUse() {
-+ Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, useLabel);
-+ return li;
- }
-
-- protected void navLinkTree() {
-- navCellStart();
-- printHyperLink("package-tree.html", "", configuration.getText("doclet.Tree"),
-- true, "NavBarFont1");
-- navCellEnd();
-+ /**
-+ * Get the tree link.
-+ *
-+ * @return a content tree for the tree link
-+ */
-+ protected Content getNavLinkTree() {
-+ Content linkContent = getHyperLink("package-tree.html", "",
-+ treeLabel);
-+ Content li = HtmlTree.LI(linkContent);
-+ return li;
- }
--
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java
-@@ -25,12 +25,12 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.io.*;
-+import java.util.*;
-+import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
--
--import com.sun.javadoc.*;
--import java.io.*;
--import java.util.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-
- /**
- * Class to generate file for each package contents in the right-hand
-@@ -98,189 +98,206 @@
- /**
- * {@inheritDoc}
- */
-- public void writeSummaryHeader() {}
--
-- /**
-- * {@inheritDoc}
-- */
-- public void writeSummaryFooter() {}
--
-- /**
-- * {@inheritDoc}
-- */
-- public void writeClassesSummary(ClassDoc[] classes, String label, String tableSummary, String[] tableHeader) {
-- if(classes.length > 0) {
-- Arrays.sort(classes);
-- tableIndexSummary(tableSummary);
-- boolean printedHeading = false;
-- for (int i = 0; i < classes.length; i++) {
-- if (!printedHeading) {
-- printTableCaption(label);
-- printFirstRow(tableHeader);
-- printedHeading = true;
-- }
-- if (!Util.isCoreClass(classes[i]) ||
-- !configuration.isGeneratedDoc(classes[i])) {
-- continue;
-- }
-- trBgcolorStyle("white", "TableRowColor");
-- summaryRow(15);
-- strong();
-- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_PACKAGE,
-- classes[i], false));
-- strongEnd();
-- summaryRowEnd();
-- summaryRow(0);
-- if (Util.isDeprecated(classes[i])) {
-- strongText("doclet.Deprecated");
-- if (classes[i].tags("deprecated").length > 0) {
-- space();
-- printSummaryDeprecatedComment(classes[i],
-- classes[i].tags("deprecated")[0]);
-- }
-- } else {
-- printSummaryComment(classes[i]);
-- }
-- summaryRowEnd();
-- trEnd();
-- }
-- tableEnd();
-- println("&nbsp;");
-- p();
-+ public Content getPackageHeader(String heading) {
-+ String pkgName = packageDoc.name();
-+ Content bodyTree = getBody(true, getWindowTitle(pkgName));
-+ addTop(bodyTree);
-+ addNavLinks(true, bodyTree);
-+ HtmlTree div = new HtmlTree(HtmlTag.DIV);
-+ div.addStyle(HtmlStyle.header);
-+ Content annotationContent = new HtmlTree(HtmlTag.P);
-+ addAnnotationInfo(packageDoc, annotationContent);
-+ div.addContent(annotationContent);
-+ Content tHeading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, true,
-+ HtmlStyle.title, packageLabel);
-+ tHeading.addContent(getSpace());
-+ Content packageHead = new RawHtml(heading);
-+ tHeading.addContent(packageHead);
-+ div.addContent(tHeading);
-+ if (packageDoc.inlineTags().length > 0 && ! configuration.nocomment) {
-+ HtmlTree p = new HtmlTree(HtmlTag.P);
-+ p.addStyle(HtmlStyle.subTitle);
-+ addSummaryComment(packageDoc, p);
-+ div.addContent(p);
-+ Content space = getSpace();
-+ Content descLink = getHyperLink("", "package_description",
-+ descriptionLabel, "", "");
-+ Content descPara = new HtmlTree(HtmlTag.P, seeLabel, space, descLink);
-+ div.addContent(descPara);
- }
-- }
--
-- /**
-- * Print the table caption for the class-listing.
-- *
-- * @param label label for the Class kind listing.
-- */
-- protected void printTableCaption(String label) {
-- tableCaptionStart();
-- print(label);
-- tableCaptionEnd();
-- }
--
-- /**
-- * Print the table heading for the class-listing.
-- *
-- * @param tableHeader table header string for the Class listing.
-- */
-- protected void printFirstRow(String[] tableHeader) {
-- summaryTableHeader(tableHeader, "col");
-+ bodyTree.addContent(div);
-+ return bodyTree;
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writePackageDescription() {
-- if (packageDoc.inlineTags().length > 0) {
-- anchor("package_description");
-- h2(configuration.getText("doclet.Package_Description", packageDoc.name()));
-- p();
-- printInlineComment(packageDoc);
-- p();
-+ public Content getContentHeader() {
-+ HtmlTree div = new HtmlTree(HtmlTag.DIV);
-+ div.addStyle(HtmlStyle.contentContainer);
-+ return div;
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public Content getSummaryHeader() {
-+ HtmlTree ul = new HtmlTree(HtmlTag.UL);
-+ ul.addStyle(HtmlStyle.blockList);
-+ return ul;
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void addClassesSummary(ClassDoc[] classes, String label,
-+ String tableSummary, String[] tableHeader, Content summaryContentTree) {
-+ if(classes.length > 0) {
-+ Arrays.sort(classes);
-+ Content caption = getTableCaption(label);
-+ Content table = HtmlTree.TABLE(HtmlStyle.packageSummary, 0, 3, 0,
-+ tableSummary, caption);
-+ table.addContent(getSummaryTableHeader(tableHeader, "col"));
-+ Content tbody = new HtmlTree(HtmlTag.TBODY);
-+ for (int i = 0; i < classes.length; i++) {
-+ if (!Util.isCoreClass(classes[i]) ||
-+ !configuration.isGeneratedDoc(classes[i])) {
-+ continue;
-+ }
-+ Content classContent = new RawHtml(getLink(new LinkInfoImpl(
-+ LinkInfoImpl.CONTEXT_PACKAGE, classes[i], false)));
-+ Content tdClass = HtmlTree.TD(HtmlStyle.colFirst, classContent);
-+ HtmlTree tr = HtmlTree.TR(tdClass);
-+ if (i%2 == 0)
-+ tr.addStyle(HtmlStyle.altColor);
-+ else
-+ tr.addStyle(HtmlStyle.rowColor);
-+ HtmlTree tdClassDescription = new HtmlTree(HtmlTag.TD);
-+ tdClassDescription.addStyle(HtmlStyle.colLast);
-+ if (Util.isDeprecated(classes[i])) {
-+ tdClassDescription.addContent(deprecatedLabel);
-+ if (classes[i].tags("deprecated").length > 0) {
-+ addSummaryDeprecatedComment(classes[i],
-+ classes[i].tags("deprecated")[0], tdClassDescription);
-+ }
-+ }
-+ else
-+ addSummaryComment(classes[i], tdClassDescription);
-+ tr.addContent(tdClassDescription);
-+ tbody.addContent(tr);
-+ }
-+ table.addContent(tbody);
-+ Content li = HtmlTree.LI(HtmlStyle.blockList, table);
-+ summaryContentTree.addContent(li);
- }
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writePackageTags() {
-- printTags(packageDoc);
-- }
--
-- /**
-- * {@inheritDoc}
-- */
-- public void writePackageHeader(String heading) {
-- String pkgName = packageDoc.name();
-- printHtmlHeader(pkgName,
-- configuration.metakeywords.getMetaKeywords(packageDoc), true);
-- printTop();
-- navLinks(true);
-- hr();
-- writeAnnotationInfo(packageDoc);
-- h2(configuration.getText("doclet.Package") + " " + heading);
-- if (packageDoc.inlineTags().length > 0 && ! configuration.nocomment) {
-- printSummaryComment(packageDoc);
-- p();
-- strong(configuration.getText("doclet.See"));
-- br();
-- printNbsps();
-- printHyperLink("", "package_description",
-- configuration.getText("doclet.Description"), true);
-- p();
-+ public void addPackageDescription(Content packageContentTree) {
-+ if (packageDoc.inlineTags().length > 0) {
-+ packageContentTree.addContent(getMarkerAnchor("package_description"));
-+ Content h2Content = new StringContent(
-+ configuration.getText("doclet.Package_Description",
-+ packageDoc.name()));
-+ packageContentTree.addContent(HtmlTree.HEADING(HtmlConstants.PACKAGE_HEADING,
-+ true, h2Content));
-+ addInlineComment(packageDoc, packageContentTree);
- }
- }
-
- /**
- * {@inheritDoc}
- */
-- public void writePackageFooter() {
-- hr();
-- navLinks(false);
-- printBottom();
-- printBodyHtmlEnd();
-+ public void addPackageTags(Content packageContentTree) {
-+ addTagsInfo(packageDoc, packageContentTree);
- }
-
- /**
-- * Print "Use" link for this pacakge in the navigation bar.
-+ * {@inheritDoc}
- */
-- protected void navLinkClassUse() {
-- navCellStart();
-- printHyperLink("package-use.html", "", configuration.getText("doclet.navClassUse"),
-- true, "NavBarFont1");
-- navCellEnd();
-+ public void addPackageFooter(Content contentTree) {
-+ addNavLinks(false, contentTree);
-+ addBottom(contentTree);
- }
-
- /**
-- * Print "PREV PACKAGE" link in the navigation bar.
-+ * {@inheritDoc}
- */
-- protected void navLinkPrevious() {
-+ public void printDocument(Content contentTree) {
-+ printHtmlDocument(configuration.metakeywords.getMetaKeywords(packageDoc),
-+ true, contentTree);
-+ }
-+
-+ /**
-+ * Get "Use" link for this pacakge in the navigation bar.
-+ *
-+ * @return a content tree for the class use link
-+ */
-+ protected Content getNavLinkClassUse() {
-+ Content useLink = getHyperLink("package-use.html", "",
-+ useLabel, "", "");
-+ Content li = HtmlTree.LI(useLink);
-+ return li;
-+ }
-+
-+ /**
-+ * Get "PREV PACKAGE" link in the navigation bar.
-+ *
-+ * @return a content tree for the previous link
-+ */
-+ public Content getNavLinkPrevious() {
-+ Content li;
- if (prev == null) {
-- printText("doclet.Prev_Package");
-+ li = HtmlTree.LI(prevpackageLabel);
- } else {
- String path = DirectoryManager.getRelativePath(packageDoc.name(),
- prev.name());
-- printHyperLink(path + "package-summary.html", "",
-- configuration.getText("doclet.Prev_Package"), true);
-+ li = HtmlTree.LI(getHyperLink(path + "package-summary.html", "",
-+ prevpackageLabel, "", ""));
- }
-+ return li;
- }
-
- /**
-- * Print "NEXT PACKAGE" link in the navigation bar.
-+ * Get "NEXT PACKAGE" link in the navigation bar.
-+ *
-+ * @return a content tree for the next link
- */
-- protected void navLinkNext() {
-+ public Content getNavLinkNext() {
-+ Content li;
- if (next == null) {
-- printText("doclet.Next_Package");
-+ li = HtmlTree.LI(nextpackageLabel);
- } else {
- String path = DirectoryManager.getRelativePath(packageDoc.name(),
- next.name());
-- printHyperLink(path + "package-summary.html", "",
-- configuration.getText("doclet.Next_Package"), true);
-+ li = HtmlTree.LI(getHyperLink(path + "package-summary.html", "",
-+ nextpackageLabel, "", ""));
- }
-+ return li;
- }
-
- /**
-- * Print "Tree" link in the navigation bar. This will be link to the package
-+ * Get "Tree" link in the navigation bar. This will be link to the package
- * tree file.
-+ *
-+ * @return a content tree for the tree link
- */
-- protected void navLinkTree() {
-- navCellStart();
-- printHyperLink("package-tree.html", "", configuration.getText("doclet.Tree"),
-- true, "NavBarFont1");
-- navCellEnd();
-+ protected Content getNavLinkTree() {
-+ Content useLink = getHyperLink("package-tree.html", "",
-+ treeLabel, "", "");
-+ Content li = HtmlTree.LI(useLink);
-+ return li;
- }
-
- /**
- * Highlight "Package" in the navigation bar, as this is the package page.
-+ *
-+ * @return a content tree for the package link
- */
-- protected void navLinkPackage() {
-- navCellRevStart();
-- fontStyle("NavBarFont1Rev");
-- strongText("doclet.Package");
-- fontEnd();
-- navCellEnd();
-+ protected Content getNavLinkPackage() {
-+ Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, packageLabel);
-+ return li;
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/SerializedFormWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/SerializedFormWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/SerializedFormWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/SerializedFormWriterImpl.java
-@@ -25,8 +25,10 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.io.*;
- import com.sun.javadoc.*;
--import java.io.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-+import com.sun.tools.doclets.internal.toolkit.*;
-
- /**
- * Generate the Serialized Form Information Page.
-@@ -64,76 +66,167 @@
- }
-
- /**
-- * Write the given package header.
-+ * Get the given header.
- *
-- * @param packageName the package header to write.
-+ * @param header the header to write
-+ * @return the body content tree
- */
-- public void writePackageHeader(String packageName) {
-- hr(4, "noshade");
-- tableHeader();
-- thAlign("center");
-- font("+2");
-- strongText("doclet.Package");
-- print(' ');
-- strong(packageName);
-- tableFooter();
-+ public Content getHeader(String header) {
-+ Content bodyTree = getBody(true, getWindowTitle(header));
-+ addTop(bodyTree);
-+ addNavLinks(true, bodyTree);
-+ Content h1Content = new StringContent(header);
-+ Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, true,
-+ HtmlStyle.title, h1Content);
-+ Content div = HtmlTree.DIV(HtmlStyle.header, heading);
-+ bodyTree.addContent(div);
-+ return bodyTree;
- }
-
- /**
-- * Write the serial UID info.
-+ * Get the serialized form summaries header.
- *
-- * @param header the header that will show up before the UID.
-- * @param serialUID the serial UID to print.
-+ * @return the serialized form summary header tree
- */
-- public void writeSerialUIDInfo(String header, String serialUID) {
-- strong(header + "&nbsp;");
-- println(serialUID);
-- p();
-+ public Content getSerializedSummariesHeader() {
-+ HtmlTree ul = new HtmlTree(HtmlTag.UL);
-+ ul.addStyle(HtmlStyle.blockList);
-+ return ul;
- }
-
- /**
-- * Write the footer.
-+ * Get the package serialized form header.
-+ *
-+ * @return the package serialized form header tree
- */
-- public void writeFooter() {
-- p();
-- hr();
-- navLinks(false);
-- printBottom();
-- printBodyHtmlEnd();
-+ public Content getPackageSerializedHeader() {
-+ HtmlTree li = new HtmlTree(HtmlTag.LI);
-+ li.addStyle(HtmlStyle.blockList);
-+ return li;
- }
-
-+ /**
-+ * Get the given package header.
-+ *
-+ * @param packageName the package header to write
-+ * @return a content tree for the package header
-+ */
-+ public Content getPackageHeader(String packageName) {
-+ Content heading = HtmlTree.HEADING(HtmlConstants.PACKAGE_HEADING, true,
-+ packageLabel);
-+ heading.addContent(getSpace());
-+ heading.addContent(packageName);
-+ return heading;
-+ }
-
- /**
-- * Write the serializable class heading.
-+ * Get the serialized class header.
- *
-- * @param classDoc the class being processed.
-+ * @return a content tree for the serialized class header
- */
-- public void writeClassHeader(ClassDoc classDoc) {
-+ public Content getClassSerializedHeader() {
-+ HtmlTree ul = new HtmlTree(HtmlTag.UL);
-+ ul.addStyle(HtmlStyle.blockList);
-+ return ul;
-+ }
-+
-+ /**
-+ * Get the serializable class heading.
-+ *
-+ * @param classDoc the class being processed
-+ * @return a content tree for the class header
-+ */
-+ public Content getClassHeader(ClassDoc classDoc) {
- String classLink = (classDoc.isPublic() || classDoc.isProtected())?
- getLink(new LinkInfoImpl(classDoc,
-- configuration.getClassName(classDoc))):
-+ configuration.getClassName(classDoc))):
- classDoc.qualifiedName();
-- p();
-- anchor(classDoc.qualifiedName());
-+ Content li = HtmlTree.LI(HtmlStyle.blockList, getMarkerAnchor(
-+ classDoc.qualifiedName()));
- String superClassLink =
- classDoc.superclassType() != null ?
- getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_SERIALIZED_FORM,
-- classDoc.superclassType())) :
-+ classDoc.superclassType())) :
- null;
-
- //Print the heading.
- String className = superClassLink == null ?
- configuration.getText(
-- "doclet.Class_0_implements_serializable", classLink) :
-+ "doclet.Class_0_implements_serializable", classLink) :
- configuration.getText(
-- "doclet.Class_0_extends_implements_serializable", classLink,
-- superClassLink);
-- tableHeader();
-- thAlignColspan("left", 2);
-- font("+2");
-- strong(className);
-- tableFooter();
-- p();
-+ "doclet.Class_0_extends_implements_serializable", classLink,
-+ superClassLink);
-+ Content classNameContent = new RawHtml(className);
-+ li.addContent(HtmlTree.HEADING(HtmlConstants.SERIALIZED_MEMBER_HEADING,
-+ classNameContent));
-+ return li;
-+ }
-+
-+ /**
-+ * Get the serial UID info header.
-+ *
-+ * @return a content tree for the serial uid info header
-+ */
-+ public Content getSerialUIDInfoHeader() {
-+ HtmlTree dl = new HtmlTree(HtmlTag.DL);
-+ dl.addStyle(HtmlStyle.nameValue);
-+ return dl;
-+ }
-+
-+ /**
-+ * Adds the serial UID info.
-+ *
-+ * @param header the header that will show up before the UID.
-+ * @param serialUID the serial UID to print.
-+ * @param serialUidTree the serial UID content tree to which the serial UID
-+ * content will be added
-+ */
-+ public void addSerialUIDInfo(String header, String serialUID,
-+ Content serialUidTree) {
-+ Content headerContent = new StringContent(header);
-+ serialUidTree.addContent(HtmlTree.DT(headerContent));
-+ Content serialContent = new StringContent(serialUID);
-+ serialUidTree.addContent(HtmlTree.DD(serialContent));
-+ }
-+
-+ /**
-+ * Get the class serialize content header.
-+ *
-+ * @return a content tree for the class serialize content header
-+ */
-+ public Content getClassContentHeader() {
-+ HtmlTree ul = new HtmlTree(HtmlTag.UL);
-+ ul.addStyle(HtmlStyle.blockList);
-+ return ul;
-+ }
-+
-+ /**
-+ * Get the serialized content tree section.
-+ *
-+ * @param serializedTreeContent the serialized content tree to be added
-+ * @return a div content tree
-+ */
-+ public Content getSerializedContent(Content serializedTreeContent) {
-+ Content divContent = HtmlTree.DIV(HtmlStyle.serializedFormContainer,
-+ serializedTreeContent);
-+ return divContent;
-+ }
-+
-+ /**
-+ * Add the footer.
-+ *
-+ * @param serializedTree the serialized tree to be added
-+ */
-+ public void addFooter(Content serializedTree) {
-+ addNavLinks(false, serializedTree);
-+ addBottom(serializedTree);
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void printDocument(Content serializedTree) {
-+ printHtmlDocument(null, true, serializedTree);
- }
-
- private void tableHeader() {
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/SingleIndexWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/SingleIndexWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/SingleIndexWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/SingleIndexWriter.java
-@@ -25,9 +25,10 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.io.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
--
--import java.io.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-+import com.sun.tools.doclets.internal.toolkit.*;
-
- /**
- * Generate only one index file for all the Member Names with Indexing in
-@@ -36,6 +37,7 @@
- *
- * @see java.lang.Character
- * @author Atul M Dambalkar
-+ * @author Bhavesh Patel (Modified)
- */
- public class SingleIndexWriter extends AbstractIndexWriter {
-
-@@ -82,34 +84,35 @@
- * Member Field, Method and Constructor Description.
- */
- protected void generateIndexFile() throws IOException {
-- printHtmlHeader(configuration.getText("doclet.Window_Single_Index"),
-- null, true);
-- printTop();
-- navLinks(true);
-- printLinksForIndexes();
--
-- hr();
--
-+ String title = configuration.getText("doclet.Window_Single_Index");
-+ Content body = getBody(true, getWindowTitle(title));
-+ addTop(body);
-+ addNavLinks(true, body);
-+ HtmlTree divTree = new HtmlTree(HtmlTag.DIV);
-+ divTree.addStyle(HtmlStyle.contentContainer);
-+ addLinksForIndexes(divTree);
- for (int i = 0; i < indexbuilder.elements().length; i++) {
- Character unicode = (Character)((indexbuilder.elements())[i]);
-- generateContents(unicode, indexbuilder.getMemberList(unicode));
-+ addContents(unicode, indexbuilder.getMemberList(unicode), divTree);
- }
--
-- printLinksForIndexes();
-- navLinks(false);
--
-- printBottom();
-- printBodyHtmlEnd();
-+ addLinksForIndexes(divTree);
-+ body.addContent(divTree);
-+ addNavLinks(false, body);
-+ addBottom(body);
-+ printHtmlDocument(null, true, body);
- }
-
- /**
-- * Print Links for all the Index Files per unicode character.
-+ * Add links for all the Index Files per unicode character.
-+ *
-+ * @param contentTree the content tree to which the links for indexes will be added
- */
-- protected void printLinksForIndexes() {
-+ protected void addLinksForIndexes(Content contentTree) {
- for (int i = 0; i < indexbuilder.elements().length; i++) {
- String unicode = (indexbuilder.elements())[i].toString();
-- printHyperLink("#_" + unicode + "_", unicode);
-- print(' ');
-+ contentTree.addContent(
-+ getHyperLink("#_" + unicode + "_", new StringContent(unicode)));
-+ contentTree.addContent(getSpace());
- }
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/SourceToHTMLConverter.java b/src/share/classes/com/sun/tools/doclets/formats/html/SourceToHTMLConverter.java
-# most patch programs can not handle renames
-# rename from src/share/classes/com/sun/tools/doclets/internal/toolkit/util/SourceToHTMLConverter.java
-# rename to src/share/classes/com/sun/tools/doclets/formats/html/SourceToHTMLConverter.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/SourceToHTMLConverter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/SourceToHTMLConverter.java
-@@ -23,14 +23,14 @@
- * questions.
- */
-
--package com.sun.tools.doclets.internal.toolkit.util;
-+package com.sun.tools.doclets.formats.html;
-
- import java.io.*;
--import java.util.*;
- import javax.tools.FileObject;
--
- import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.*;
-+import com.sun.tools.doclets.internal.toolkit.util.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-
- /**
- * Converts Java Source Code to HTML.
-@@ -40,27 +40,28 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.4
- */
- public class SourceToHTMLConverter {
-
- /**
-- * The background color.
-- */
-- protected static final String BGCOLOR = "white";
--
-- /**
-- * The line number color.
-- */
-- protected static final String LINE_NO_COLOR = "green";
--
-- /**
- * The number of trailing blank lines at the end of the page.
- * This is inserted so that anchors at the bottom of small pages
- * can be reached.
- */
-- protected static final int NUM_BLANK_LINES = 60;
-+ private static final int NUM_BLANK_LINES = 60;
-
-+ /**
-+ * New line to be added to the documentation.
-+ */
-+ private static final Content NEW_LINE = new RawHtml(DocletConstants.NL);
-+
-+ /**
-+ * Relative path from the documentation root to the file that is being
-+ * generated.
-+ */
-+ private static String relativePath = "";
-
- /**
- * Source is converted to HTML using static methods below.
-@@ -69,11 +70,13 @@
-
- /**
- * Convert the Classes in the given RootDoc to an HTML.
-+ *
- * @param configuration the configuration.
- * @param rd the RootDoc to convert.
- * @param outputdir the name of the directory to output to.
- */
-- public static void convertRoot(Configuration configuration, RootDoc rd, String outputdir) {
-+ public static void convertRoot(ConfigurationImpl configuration, RootDoc rd,
-+ String outputdir) {
- if (rd == null || outputdir == null) {
- return;
- }
-@@ -84,17 +87,19 @@
- ClassDoc[] cds = rd.specifiedClasses();
- for (int i = 0; i < cds.length; i++) {
- convertClass(configuration, cds[i],
-- getPackageOutputDir(outputdir, cds[i].containingPackage()));
-+ getPackageOutputDir(outputdir, cds[i].containingPackage()));
- }
- }
-
- /**
- * Convert the Classes in the given Package to an HTML.
-+ *
- * @param configuration the configuration.
- * @param pd the Package to convert.
- * @param outputdir the name of the directory to output to.
- */
-- public static void convertPackage(Configuration configuration, PackageDoc pd, String outputdir) {
-+ public static void convertPackage(ConfigurationImpl configuration, PackageDoc pd,
-+ String outputdir) {
- if (pd == null || outputdir == null) {
- return;
- }
-@@ -107,8 +112,10 @@
-
- /**
- * Return the directory write output to for the given package.
-+ *
- * @param outputDir the directory to output to.
- * @param pd the Package to generate output for.
-+ * @return the package output directory as a String.
- */
- private static String getPackageOutputDir(String outputDir, PackageDoc pd) {
- return outputDir + File.separator +
-@@ -117,11 +124,13 @@
-
- /**
- * Convert the given Class to an HTML.
-+ *
- * @param configuration the configuration.
- * @param cd the class to convert.
- * @param outputdir the name of the directory to output to.
- */
-- public static void convertClass(Configuration configuration, ClassDoc cd, String outputdir) {
-+ public static void convertClass(ConfigurationImpl configuration, ClassDoc cd,
-+ String outputdir) {
- if (cd == null || outputdir == null) {
- return;
- }
-@@ -145,19 +154,23 @@
- LineNumberReader reader = new LineNumberReader(r);
- int lineno = 1;
- String line;
-- StringBuffer output = new StringBuffer();
-+ relativePath = DirectoryManager.getRelativePath(DocletConstants.SOURCE_OUTPUT_DIR_NAME) +
-+ DirectoryManager.getRelativePath(cd.containingPackage());
-+ Content body = getHeader();
-+ Content pre = new HtmlTree(HtmlTag.PRE);
- try {
- while ((line = reader.readLine()) != null) {
-- output.append(formatLine(line, configuration.sourcetab, lineno));
-+ addLineNo(pre, lineno);
-+ addLine(pre, line, configuration.sourcetab, lineno);
- lineno++;
- }
- } finally {
- reader.close();
- }
-- output = addLineNumbers(output.toString());
-- output.insert(0, getHeader(configuration));
-- output.append(getFooter());
-- writeToFile(output.toString(), outputdir, cd.name(), configuration);
-+ addBlankLines(pre);
-+ Content div = HtmlTree.DIV(HtmlStyle.sourceContainer, pre);
-+ body.addContent(div);
-+ writeToFile(body, outputdir, cd.name(), configuration);
- } catch (Exception e){
- e.printStackTrace();
- }
-@@ -165,135 +178,117 @@
-
- /**
- * Write the output to the file.
-- * @param output the string to output.
-+ *
-+ * @param body the documentation content to be written to the file.
- * @param outputDir the directory to output to.
- * @param className the name of the class that I am converting to HTML.
- * @param configuration the Doclet configuration to pass notices to.
- */
-- private static void writeToFile(String output, String outputDir, String className, Configuration configuration) throws IOException {
-+ private static void writeToFile(Content body, String outputDir,
-+ String className, ConfigurationImpl configuration) throws IOException {
-+ Content htmlDocType = DocType.Transitional();
-+ Content head = new HtmlTree(HtmlTag.HEAD);
-+ head.addContent(HtmlTree.TITLE(new StringContent(
-+ configuration.getText("doclet.Window_Source_title"))));
-+ head.addContent(getStyleSheetProperties(configuration));
-+ Content htmlTree = HtmlTree.HTML(configuration.getLocale().getLanguage(),
-+ head, body);
-+ Content htmlDocument = new HtmlDocument(htmlDocType, htmlTree);
- File dir = new File(outputDir);
- dir.mkdirs();
- File newFile = new File(dir, className + ".html");
- configuration.message.notice("doclet.Generating_0", newFile.getPath());
- FileOutputStream fout = new FileOutputStream(newFile);
- BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fout));
-- bw.write(output);
-+ bw.write(htmlDocument.toString());
- bw.close();
- fout.close();
- }
-
- /**
-- * Given a <code>String</code>, add line numbers.
-- * @param s the text to add line numbers to.
-+ * Returns a link to the stylesheet file.
- *
-- * @return the string buffer with the line numbering for each line.
-+ * @param configuration the doclet configuration for the current run of javadoc
-+ * @return an HtmlTree for the lINK tag which provides the stylesheet location
- */
-- private static StringBuffer addLineNumbers(String s) {
-- StringBuffer sb = new StringBuffer();
-- StringTokenizer st = new StringTokenizer(s, "\n", true);
-- int lineno = 1;
-- String current;
-- while(st.hasMoreTokens()){
-- current = st.nextToken();
-- sb.append(current.equals("\n") ?
-- getHTMLLineNo(lineno) + current :
-- getHTMLLineNo(lineno) + current + st.nextToken());
-- lineno++;
-+ public static HtmlTree getStyleSheetProperties(ConfigurationImpl configuration) {
-+ String filename = configuration.stylesheetfile;
-+ if (filename.length() > 0) {
-+ File stylefile = new File(filename);
-+ String parent = stylefile.getParent();
-+ filename = (parent == null)?
-+ filename:
-+ filename.substring(parent.length() + 1);
-+ } else {
-+ filename = "stylesheet.css";
- }
-- return sb;
-+ filename = relativePath + filename;
-+ HtmlTree link = HtmlTree.LINK("stylesheet", "text/css", filename, "Style");
-+ return link;
- }
-
- /**
- * Get the header.
-- * @param configuration the Doclet configuration
-- * @return the header to the output file
-+ *
-+ * @return the header content for the HTML file
- */
-- protected static String getHeader(Configuration configuration) {
-- StringBuffer result = new StringBuffer("<HTML lang=\"" + configuration.getLocale().getLanguage() + "\">" + DocletConstants.NL);
-- result.append("<BODY BGCOLOR=\""+ BGCOLOR + "\">" + DocletConstants.NL);
-- result.append("<PRE>" + DocletConstants.NL);
-- return result.toString();
-+ private static Content getHeader() {
-+ return new HtmlTree(HtmlTag.BODY);
- }
-
- /**
-- * Get the footer
-- * @return the footer to the output file
-+ * Add the line numbers for the source code.
-+ *
-+ * @param pre the content tree to which the line number will be added
-+ * @param lineno The line number
- */
-- protected static String getFooter() {
-- StringBuffer footer = new StringBuffer();
-- for (int i = 0; i < NUM_BLANK_LINES; i++) {
-- footer.append(DocletConstants.NL);
-+ private static void addLineNo(Content pre, int lineno) {
-+ HtmlTree span = new HtmlTree(HtmlTag.SPAN);
-+ span.addStyle(HtmlStyle.sourceLineNo);
-+ if (lineno < 10) {
-+ span.addContent("00" + Integer.toString(lineno));
-+ } else if (lineno < 100) {
-+ span.addContent("0" + Integer.toString(lineno));
-+ } else {
-+ span.addContent(Integer.toString(lineno));
- }
-- footer.append("</PRE>" + DocletConstants.NL + "</BODY>" +
-- DocletConstants.NL + "</HTML>" + DocletConstants.NL);
-- return footer.toString();
-+ pre.addContent(span);
- }
-
- /**
-- * Get the HTML for the lines.
-- * @param lineno The line number
-- * @return the HTML code for the line
-- */
-- protected static String getHTMLLineNo(int lineno) {
-- StringBuffer result = new StringBuffer("<FONT color=\"" + LINE_NO_COLOR
-- + "\">");
-- if (lineno < 10) {
-- result.append("00" + ((new Integer(lineno)).toString()));
-- } else if (lineno < 100) {
-- result.append("0" + ((new Integer(lineno)).toString()));
-- } else {
-- result.append((new Integer(lineno)).toString());
-- }
-- result.append("</FONT> ");
-- return result.toString();
-- }
--
-- /**
-- * Format a given line of source. <br>
-- * Note: In the future, we will add special colors for constructs in the
-- * language.
-+ * Add a line from source to the HTML file that is generated.
-+ *
-+ * @param pre the content tree to which the line will be added.
- * @param line the string to format.
- * @param tabLength the number of spaces for each tab.
- * @param currentLineNo the current number.
- */
-- protected static String formatLine(String line, int tabLength, int currentLineNo) {
-- if (line == null) {
-- return null;
-- }
-- StringBuffer lineBuffer = new StringBuffer(Util.escapeHtmlChars(line));
-- //Insert an anchor for the line
-- lineBuffer.append("<a name=\"line." + Integer.toString(currentLineNo) + "\"></a>");
-- lineBuffer.append(DocletConstants.NL);
-- Util.replaceTabs(tabLength, lineBuffer);
-- return lineBuffer.toString();
-- }
--
-- /**
-- * Given an array of <code>Doc</code>s, add to the given <code>HashMap</code> the
-- * line numbers and anchors that should be inserted in the output at those lines.
-- * @param docs the array of <code>Doc</code>s to add anchors for.
-- * @param hash the <code>HashMap</code> to add to.
-- */
-- protected static void addToHash(Doc[] docs, HashMap<Integer,String> hash) {
-- if(docs == null) {
-- return;
-- }
-- for(int i = 0; i < docs.length; i++) {
-- hash.put(docs[i].position().line(), getAnchor(docs[i]));
-+ private static void addLine(Content pre, String line, int tabLength,
-+ int currentLineNo) {
-+ if (line != null) {
-+ StringBuffer lineBuffer = new StringBuffer(Util.escapeHtmlChars(line));
-+ Util.replaceTabs(tabLength, lineBuffer);
-+ pre.addContent(new RawHtml(lineBuffer.toString()));
-+ Content anchor = HtmlTree.A_NAME("line." + Integer.toString(currentLineNo));
-+ pre.addContent(anchor);
-+ pre.addContent(NEW_LINE);
- }
- }
-
- /**
-- * Given a <code>Doc</code>, return an anchor for it.
-- * @param d the <code>Doc</code> to check.
-- * @return an anchor of the form &lt;a name="my_name">&lt;/a>
-+ * Add trailing blank lines at the end of the page.
-+ *
-+ * @param pre the content tree to which the blank lines will be added.
- */
-- protected static String getAnchor(Doc d) {
-- return " <a name=\"" + getAnchorName(d) + "\"></a>";
-+ private static void addBlankLines(Content pre) {
-+ for (int i = 0; i < NUM_BLANK_LINES; i++) {
-+ pre.addContent(NEW_LINE);
-+ }
- }
-
- /**
- * Given a <code>Doc</code>, return an anchor name for it.
-+ *
- * @param d the <code>Doc</code> to check.
- * @return the name of the anchor.
- */
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/SplitIndexWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/SplitIndexWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/SplitIndexWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/SplitIndexWriter.java
-@@ -25,9 +25,10 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.io.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
--
--import java.io.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-+import com.sun.tools.doclets.internal.toolkit.*;
-
- /**
- * Generate Separate Index Files for all the member names with Indexing in
-@@ -36,6 +37,7 @@
- *
- * @see java.lang.Character
- * @author Atul M Dambalkar
-+ * @author Bhavesh Patel (Modified)
- */
- public class SplitIndexWriter extends AbstractIndexWriter {
-
-@@ -109,56 +111,68 @@
- * index.
- */
- protected void generateIndexFile(Character unicode) throws IOException {
-- printHtmlHeader(configuration.getText("doclet.Window_Split_Index",
-- unicode.toString()), null, true);
-- printTop();
-- navLinks(true);
-- printLinksForIndexes();
--
-- hr();
--
-- generateContents(unicode, indexbuilder.getMemberList(unicode));
--
-- navLinks(false);
-- printLinksForIndexes();
--
-- printBottom();
-- printBodyHtmlEnd();
-+ String title = configuration.getText("doclet.Window_Split_Index",
-+ unicode.toString());
-+ Content body = getBody(true, getWindowTitle(title));
-+ addTop(body);
-+ addNavLinks(true, body);
-+ HtmlTree divTree = new HtmlTree(HtmlTag.DIV);
-+ divTree.addStyle(HtmlStyle.contentContainer);
-+ addLinksForIndexes(divTree);
-+ addContents(unicode, indexbuilder.getMemberList(unicode), divTree);
-+ addLinksForIndexes(divTree);
-+ body.addContent(divTree);
-+ addNavLinks(false, body);
-+ addBottom(body);
-+ printHtmlDocument(null, true, body);
- }
-
- /**
-- * Print Links for all the Index Files per unicode character.
-+ * Add links for all the Index Files per unicode character.
-+ *
-+ * @param contentTree the content tree to which the links for indexes will be added
- */
-- protected void printLinksForIndexes() {
-- for (int i = 0; i < indexbuilder.elements().length; i++) {
-+ protected void addLinksForIndexes(Content contentTree) {
-+ Object[] unicodeChars = indexbuilder.elements();
-+ for (int i = 0; i < unicodeChars.length; i++) {
- int j = i + 1;
-- printHyperLink("index-" + j + ".html",
-- indexbuilder.elements()[i].toString());
-- print(' ');
-+ contentTree.addContent(getHyperLink("index-" + j + ".html",
-+ new StringContent(unicodeChars[i].toString())));
-+ contentTree.addContent(getSpace());
- }
- }
-
- /**
-- * Print the previous unicode character index link.
-+ * Get link to the previous unicode character.
-+ *
-+ * @return a content tree for the link
- */
-- protected void navLinkPrevious() {
-+ public Content getNavLinkPrevious() {
-+ Content prevletterLabel = getResource("doclet.Prev_Letter");
- if (prev == -1) {
-- printText("doclet.Prev_Letter");
-- } else {
-- printHyperLink("index-" + prev + ".html", "",
-- configuration.getText("doclet.Prev_Letter"), true);
-+ return HtmlTree.LI(prevletterLabel);
-+ }
-+ else {
-+ Content prevLink = getHyperLink("index-" + prev + ".html", "",
-+ prevletterLabel);
-+ return HtmlTree.LI(prevLink);
- }
- }
-
- /**
-- * Print the next unicode character index link.
-+ * Get link to the next unicode character.
-+ *
-+ * @return a content tree for the link
- */
-- protected void navLinkNext() {
-+ public Content getNavLinkNext() {
-+ Content nextletterLabel = getResource("doclet.Next_Letter");
- if (next == -1) {
-- printText("doclet.Next_Letter");
-- } else {
-- printHyperLink("index-" + next + ".html","",
-- configuration.getText("doclet.Next_Letter"), true);
-+ return HtmlTree.LI(nextletterLabel);
-+ }
-+ else {
-+ Content nextLink = getHyperLink("index-" + next + ".html","",
-+ nextletterLabel);
-+ return HtmlTree.LI(nextLink);
- }
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/StylesheetWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/StylesheetWriter.java
-deleted file mode 100644
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/StylesheetWriter.java
-+++ /dev/null
-@@ -1,130 +0,0 @@
--/*
-- * Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved.
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-- */
--
--package com.sun.tools.doclets.formats.html;
--
--import com.sun.tools.doclets.internal.toolkit.util.*;
--
--import java.io.*;
--
--/**
-- * Writes the style sheet for the doclet output.
-- *
-- * @author Atul M Dambalkar
-- * @author Bhavesh Patel (Modified)
-- */
--public class StylesheetWriter extends HtmlDocletWriter {
--
-- /**
-- * Constructor.
-- */
-- public StylesheetWriter(ConfigurationImpl configuration,
-- String filename) throws IOException {
-- super(configuration, filename);
-- }
--
-- /**
-- * Generate the style file contents.
-- * @throws DocletAbortException
-- */
-- public static void generate(ConfigurationImpl configuration) {
-- StylesheetWriter stylegen;
-- String filename = "";
-- try {
-- filename = "stylesheet.css";
-- stylegen = new StylesheetWriter(configuration, filename);
-- stylegen.generateStyleFile();
-- stylegen.close();
-- } catch (IOException exc) {
-- configuration.standardmessage.error(
-- "doclet.exception_encountered",
-- exc.toString(), filename);
-- throw new DocletAbortException();
-- }
-- }
--
-- /**
-- * Generate the style file contents.
-- */
-- protected void generateStyleFile() {
-- print("/* "); printText("doclet.Style_line_1"); println(" */");
-- println("");
--
-- print("/* "); printText("doclet.Style_line_2"); println(" */");
-- println("");
--
-- print("/* "); printText("doclet.Style_line_3"); println(" */");
-- println("body { background-color: #FFFFFF; color:#000000 }");
-- println("");
--
-- print("/* "); printText("doclet.Style_Headings"); println(" */");
-- println("h1 { font-size: 145% }");
-- println("");
--
-- print("/* "); printText("doclet.Style_line_4"); println(" */");
-- print(".TableHeadingColor { background: #CCCCFF; color:#000000 }");
-- print(" /* "); printText("doclet.Style_line_5"); println(" */");
-- print(".TableSubHeadingColor { background: #EEEEFF; color:#000000 }");
-- print(" /* "); printText("doclet.Style_line_6"); println(" */");
-- print(".TableRowColor { background: #FFFFFF; color:#000000 }");
-- print(" /* "); printText("doclet.Style_line_7"); println(" */");
-- println("");
--
-- print("/* "); printText("doclet.Style_line_8"); println(" */");
-- println(".FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif; color:#000000 }");
-- println(".FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }");
-- println(".FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }");
-- println("");
--
-- // Removed doclet.Style_line_9 as no longer needed
--
-- print("/* "); printText("doclet.Style_line_10"); println(" */");
-- print(".NavBarCell1 { background-color:#EEEEFF; color:#000000}");
-- print(" /* "); printText("doclet.Style_line_6"); println(" */");
-- print(".NavBarCell1Rev { background-color:#00008B; color:#FFFFFF}");
-- print(" /* "); printText("doclet.Style_line_11"); println(" */");
--
-- print(".NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;");
-- println("color:#000000;}");
-- print(".NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;");
-- println("color:#FFFFFF;}");
-- println("");
--
-- print(".NavBarCell2 { font-family: Arial, Helvetica, sans-serif; ");
-- println("background-color:#FFFFFF; color:#000000}");
-- print(".NavBarCell3 { font-family: Arial, Helvetica, sans-serif; ");
-- println("background-color:#FFFFFF; color:#000000}");
--
-- print("/* "); printText("doclet.Style_line_12"); println(" */");
-- print(".TableCaption { background: #CCCCFF; color:#000000; text-align: left; font-size: 150%; font-weight: bold; border-left: 2px ridge; border-right: 2px ridge; border-top: 2px ridge; padding-left: 5px; }");
-- print(" /* "); printText("doclet.Style_line_5"); println(" */");
-- print(".TableSubCaption { background: #EEEEFF; color:#000000; text-align: left; font-weight: bold; border-left: 2px ridge; border-right: 2px ridge; border-top: 2px ridge; padding-left: 5px; }");
-- print(" /* "); printText("doclet.Style_line_6"); println(" */");
-- print(".TableHeader { text-align: center; font-size: 80%; font-weight: bold; }");
-- println("");
--
-- }
--
--}
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java
-@@ -25,10 +25,11 @@
-
- package com.sun.tools.doclets.formats.html;
-
-+import java.io.*;
- import com.sun.javadoc.*;
-+import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
--
--import java.io.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-
- /**
- * This abstract class exists to provide functionality needed in the
-@@ -71,13 +72,31 @@
- tdEnd();
- }
-
-- public void printSummaryHeader(AbstractMemberWriter mw, ClassDoc cd) {
-- mw.printSummaryAnchor(cd);
-- mw.printTableSummary();
-- tableCaptionStart();
-- mw.printSummaryLabel();
-- tableCaptionEnd();
-- mw.printSummaryTableHeader(cd);
-+ /**
-+ * Add the summary header.
-+ *
-+ * @param mw the writer for the member being documented
-+ * @param cd the classdoc to be documented
-+ * @param memberTree the content tree to which the summary header will be added
-+ */
-+ public void addSummaryHeader(AbstractMemberWriter mw, ClassDoc cd,
-+ Content memberTree) {
-+ mw.addSummaryAnchor(cd, memberTree);
-+ mw.addSummaryLabel(memberTree);
-+ }
-+
-+ /**
-+ * Get the summary table.
-+ *
-+ * @param mw the writer for the member being documented
-+ * @param cd the classdoc to be documented
-+ * @return the content tree for the summary table
-+ */
-+ public Content getSummaryTableTree(AbstractMemberWriter mw, ClassDoc cd) {
-+ Content table = HtmlTree.TABLE(HtmlStyle.overviewSummary, 0, 3, 0,
-+ mw.getTableSummary(), getTableCaption(mw.getCaption()));
-+ table.addContent(getSummaryTableHeader(mw.getSummaryTableHeader(cd), "col"));
-+ return table;
- }
-
- public void printTableHeadingBackground(String str) {
-@@ -88,15 +107,17 @@
- tableEnd();
- }
-
-- public void printInheritedSummaryHeader(AbstractMemberWriter mw, ClassDoc cd) {
-- mw.printInheritedSummaryAnchor(cd);
-- tableIndexSummary();
-- tableInheritedHeaderStart("#EEEEFF");
-- mw.printInheritedSummaryLabel(cd);
-- tableInheritedHeaderEnd();
-- trBgcolorStyle("white", "TableRowColor");
-- summaryRow(0);
-- code();
-+ /**
-+ * Add the inherited summary header.
-+ *
-+ * @param mw the writer for the member being documented
-+ * @param cd the classdoc to be documented
-+ * @param inheritedTree the content tree to which the inherited summary header will be added
-+ */
-+ public void addInheritedSummaryHeader(AbstractMemberWriter mw, ClassDoc cd,
-+ Content inheritedTree) {
-+ mw.addInheritedSummaryAnchor(cd, inheritedTree);
-+ mw.addInheritedSummaryLabel(cd, inheritedTree);
- }
-
- public void printSummaryFooter(AbstractMemberWriter mw, ClassDoc cd) {
-@@ -112,8 +133,14 @@
- space();
- }
-
-- protected void printIndexComment(Doc member) {
-- printIndexComment(member, member.firstSentenceTags());
-+ /**
-+ * Add the index comment.
-+ *
-+ * @param member the member being documented
-+ * @param contentTree the content tree to which the comment will be added
-+ */
-+ protected void addIndexComment(Doc member, Content contentTree) {
-+ addIndexComment(member, member.firstSentenceTags(), contentTree);
- }
-
- protected void printIndexComment(Doc member, Tag[] firstSentenceTags) {
-@@ -134,17 +161,60 @@
- printSummaryComment(member, firstSentenceTags);
- }
-
-- public void printSummaryLinkType(AbstractMemberWriter mw,
-- ProgramElementDoc member) {
-- trBgcolorStyle("white", "TableRowColor");
-- mw.printSummaryType(member);
-- summaryRow(0);
-- code();
-+ /**
-+ * Add the index comment.
-+ *
-+ * @param member the member being documented
-+ * @param firstSentenceTags the first sentence tags for the member to be documented
-+ * @param tdSummary the content tree to which the comment will be added
-+ */
-+ protected void addIndexComment(Doc member, Tag[] firstSentenceTags,
-+ Content tdSummary) {
-+ Tag[] deprs = member.tags("deprecated");
-+ Content div;
-+ if (Util.isDeprecated((ProgramElementDoc) member)) {
-+ Content strong = HtmlTree.STRONG(deprecatedPhrase);
-+ div = HtmlTree.DIV(HtmlStyle.block, strong);
-+ div.addContent(getSpace());
-+ if (deprs.length > 0) {
-+ addInlineDeprecatedComment(member, deprs[0], div);
-+ }
-+ tdSummary.addContent(div);
-+ return;
-+ } else {
-+ ClassDoc cd = ((ProgramElementDoc)member).containingClass();
-+ if (cd != null && Util.isDeprecated(cd)) {
-+ Content strong = HtmlTree.STRONG(deprecatedPhrase);
-+ div = HtmlTree.DIV(HtmlStyle.block, strong);
-+ div.addContent(getSpace());
-+ tdSummary.addContent(div);
-+ }
-+ }
-+ addSummaryComment(member, firstSentenceTags, tdSummary);
- }
-
-- public void printSummaryLinkComment(AbstractMemberWriter mw,
-- ProgramElementDoc member) {
-- printSummaryLinkComment(mw, member, member.firstSentenceTags());
-+ /**
-+ * Add the summary type for the member.
-+ *
-+ * @param mw the writer for the member being documented
-+ * @param member the member to be documented
-+ * @param tdSummaryType the content tree to which the type will be added
-+ */
-+ public void addSummaryType(AbstractMemberWriter mw, ProgramElementDoc member,
-+ Content tdSummaryType) {
-+ mw.addSummaryType(member, tdSummaryType);
-+ }
-+
-+ /**
-+ * Add the summary link for the member.
-+ *
-+ * @param mw the writer for the member being documented
-+ * @param member the member to be documented
-+ * @param contentTree the content tree to which the link will be added
-+ */
-+ public void addSummaryLinkComment(AbstractMemberWriter mw,
-+ ProgramElementDoc member, Content contentTree) {
-+ addSummaryLinkComment(mw, member, member.firstSentenceTags(), contentTree);
- }
-
- public void printSummaryLinkComment(AbstractMemberWriter mw,
-@@ -159,12 +229,34 @@
- trEnd();
- }
-
-- public void printInheritedSummaryMember(AbstractMemberWriter mw, ClassDoc cd,
-- ProgramElementDoc member, boolean isFirst) {
-+ /**
-+ * Add the summary link comment.
-+ *
-+ * @param mw the writer for the member being documented
-+ * @param member the member being documented
-+ * @param firstSentenceTags the first sentence tags for the member to be documented
-+ * @param tdSummary the content tree to which the comment will be added
-+ */
-+ public void addSummaryLinkComment(AbstractMemberWriter mw,
-+ ProgramElementDoc member, Tag[] firstSentenceTags, Content tdSummary) {
-+ addIndexComment(member, firstSentenceTags, tdSummary);
-+ }
-+
-+ /**
-+ * Add the inherited member summary.
-+ *
-+ * @param mw the writer for the member being documented
-+ * @param cd the class being documented
-+ * @param member the member being documented
-+ * @param isFirst true if its the first link being documented
-+ * @param linksTree the content tree to which the summary will be added
-+ */
-+ public void addInheritedMemberSummary(AbstractMemberWriter mw, ClassDoc cd,
-+ ProgramElementDoc member, boolean isFirst, Content linksTree) {
- if (! isFirst) {
-- mw.print(", ");
-+ linksTree.addContent(", ");
- }
-- mw.writeInheritedSummaryLink(cd, member);
-+ mw.addInheritedSummaryLink(cd, member, linksTree);
- }
-
- public void printMemberHeader() {
-@@ -174,4 +266,67 @@
- public void printMemberFooter() {
- }
-
-+ /**
-+ * Get the document content header tree
-+ *
-+ * @return a content tree the document content header
-+ */
-+ public Content getContentHeader() {
-+ HtmlTree div = new HtmlTree(HtmlTag.DIV);
-+ div.addStyle(HtmlStyle.contentContainer);
-+ return div;
-+ }
-+
-+ /**
-+ * Get the member header tree
-+ *
-+ * @return a content tree the member header
-+ */
-+ public Content getMemberTreeHeader() {
-+ HtmlTree li = new HtmlTree(HtmlTag.LI);
-+ li.addStyle(HtmlStyle.blockList);
-+ return li;
-+ }
-+
-+ /**
-+ * Get the member tree
-+ *
-+ * @param contentTree the tree used to generate the complete member tree
-+ * @return a content tree for the member
-+ */
-+ public Content getMemberTree(Content contentTree) {
-+ Content ul = HtmlTree.UL(HtmlStyle.blockList, contentTree);
-+ return ul;
-+ }
-+
-+ /**
-+ * Get the member summary tree
-+ *
-+ * @param contentTree the tree used to generate the member summary tree
-+ * @return a content tree for the member summary
-+ */
-+ public Content getMemberSummaryTree(Content contentTree) {
-+ return getMemberTree(HtmlStyle.summary, contentTree);
-+ }
-+
-+ /**
-+ * Get the member details tree
-+ *
-+ * @param contentTree the tree used to generate the member details tree
-+ * @return a content tree for the member details
-+ */
-+ public Content getMemberDetailsTree(Content contentTree) {
-+ return getMemberTree(HtmlStyle.details, contentTree);
-+ }
-+
-+ /**
-+ * Get the member tree
-+ *
-+ * @param style the style class to be added to the content tree
-+ * @param contentTree the tree used to generate the complete member tree
-+ */
-+ public Content getMemberTree(HtmlStyle style, Content contentTree) {
-+ Content div = HtmlTree.DIV(style, getMemberTree(contentTree));
-+ return div;
-+ }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java
-@@ -70,9 +70,9 @@
- Tag[] deprs = doc.tags("deprecated");
- if (doc instanceof ClassDoc) {
- if (Util.isDeprecated((ProgramElementDoc) doc)) {
-- output.append("<STRONG>" +
-+ output.append("<span class=\"strong\">" +
- ConfigurationImpl.getInstance().
-- getText("doclet.Deprecated") + "</STRONG>&nbsp;");
-+ getText("doclet.Deprecated") + "</span>&nbsp;");
- if (deprs.length > 0) {
- Tag[] commentTags = deprs[0].inlineTags();
- if (commentTags.length > 0) {
-@@ -82,30 +82,24 @@
- );
- }
- }
-- output.append("<p>");
- }
- } else {
- MemberDoc member = (MemberDoc) doc;
- if (Util.isDeprecated((ProgramElementDoc) doc)) {
-- output.append("<DD><STRONG>" +
-+ output.append("<span class=\"strong\">" +
- ConfigurationImpl.getInstance().
-- getText("doclet.Deprecated") + "</STRONG>&nbsp;");
-+ getText("doclet.Deprecated") + "</span>&nbsp;");
- if (deprs.length > 0) {
-- output.append("<I>");
-+ output.append("<i>");
- output.append(commentTagsToOutput(null, doc,
- deprs[0].inlineTags(), false).toString());
-- output.append("</I>");
-+ output.append("</i>");
- }
-- if (member instanceof ExecutableMemberDoc) {
-- output.append(DocletConstants.NL + "<P>" +
-- DocletConstants.NL);
-- }
-- output.append("</DD>");
- } else {
- if (Util.isDeprecated(member.containingClass())) {
-- output.append("<DD><STRONG>" +
-+ output.append("<span class=\"strong\">" +
- ConfigurationImpl.getInstance().
-- getText("doclet.Deprecated") + "</STRONG>&nbsp;</DD>");
-+ getText("doclet.Deprecated") + "</span>&nbsp;");
- }
- }
- }
-@@ -124,8 +118,8 @@
- */
- public TagletOutput getParamHeader(String header) {
- StringBuffer result = new StringBuffer();
-- result.append("<DT>");
-- result.append("<STRONG>" + header + "</STRONG></DT>");
-+ result.append("<dt>");
-+ result.append("<span class=\"strong\">" + header + "</span></dt>");
- return new TagletOutputImpl(result.toString());
- }
-
-@@ -133,8 +127,8 @@
- * {@inheritDoc}
- */
- public TagletOutput paramTagOutput(ParamTag paramTag, String paramName) {
-- TagletOutput result = new TagletOutputImpl("<DD><CODE>" + paramName + "</CODE>"
-- + " - " + htmlWriter.commentTagsToString(paramTag, null, paramTag.inlineTags(), false) + "</DD>");
-+ TagletOutput result = new TagletOutputImpl("<dd><code>" + paramName + "</code>"
-+ + " - " + htmlWriter.commentTagsToString(paramTag, null, paramTag.inlineTags(), false) + "</dd>");
- return result;
- }
-
-@@ -142,11 +136,11 @@
- * {@inheritDoc}
- */
- public TagletOutput returnTagOutput(Tag returnTag) {
-- TagletOutput result = new TagletOutputImpl(DocletConstants.NL + "<DT>" +
-- "<STRONG>" + htmlWriter.configuration.getText("doclet.Returns") +
-- "</STRONG>" + "</DT>" + "<DD>" +
-+ TagletOutput result = new TagletOutputImpl(DocletConstants.NL + "<dt>" +
-+ "<span class=\"strong\">" + htmlWriter.configuration.getText("doclet.Returns") +
-+ "</span>" + "</dt>" + "<dd>" +
- htmlWriter.commentTagsToString(returnTag, null, returnTag.inlineTags(),
-- false) + "</DD>");
-+ false) + "</dd>");
- return result;
- }
-
-@@ -168,7 +162,7 @@
- htmlWriter instanceof ClassWriterImpl) {
- //Automatically add link to constant values page for constant fields.
- result = addSeeHeader(result);
-- result += htmlWriter.getHyperLink(htmlWriter.relativePath +
-+ result += htmlWriter.getHyperLinkString(htmlWriter.relativePath +
- ConfigurationImpl.CONSTANTS_FILE_NAME
- + "#" + ((ClassWriterImpl) htmlWriter).getClassDoc().qualifiedName()
- + "." + ((FieldDoc) holder).name(),
-@@ -179,18 +173,19 @@
- if ((SerializedFormBuilder.serialInclude(holder) &&
- SerializedFormBuilder.serialInclude(((ClassDoc)holder).containingPackage()))) {
- result = addSeeHeader(result);
-- result += htmlWriter.getHyperLink(htmlWriter.relativePath + "serialized-form.html",
-+ result += htmlWriter.getHyperLinkString(htmlWriter.relativePath + "serialized-form.html",
- ((ClassDoc)holder).qualifiedName(), htmlWriter.configuration.getText("doclet.Serialized_Form"), false);
- }
- }
-- return result.equals("") ? null : new TagletOutputImpl(result + "</DD>");
-+ return result.equals("") ? null : new TagletOutputImpl(result + "</dd>");
- }
-
- private String addSeeHeader(String result) {
- if (result != null && result.length() > 0) {
- return result + ", " + DocletConstants.NL;
- } else {
-- return "<DT><STRONG>" + htmlWriter.configuration().getText("doclet.See_Also") + "</STRONG></DT><DD>";
-+ return "<dt><span class=\"strong\">" +
-+ htmlWriter.configuration().getText("doclet.See_Also") + "</span></dt><dd>";
- }
- }
-
-@@ -198,15 +193,15 @@
- * {@inheritDoc}
- */
- public TagletOutput simpleTagOutput(Tag[] simpleTags, String header) {
-- String result = "<DT><STRONG>" + header + "</STRONG></DT>" + DocletConstants.NL +
-- " <DD>";
-+ String result = "<dt><span class=\"strong\">" + header + "</span></dt>" + DocletConstants.NL +
-+ " <dd>";
- for (int i = 0; i < simpleTags.length; i++) {
- if (i > 0) {
- result += ", ";
- }
- result += htmlWriter.commentTagsToString(simpleTags[i], null, simpleTags[i].inlineTags(), false);
- }
-- result += "</DD>" + DocletConstants.NL;
-+ result += "</dd>" + DocletConstants.NL;
- return new TagletOutputImpl(result);
- }
-
-@@ -214,24 +209,24 @@
- * {@inheritDoc}
- */
- public TagletOutput simpleTagOutput(Tag simpleTag, String header) {
-- return new TagletOutputImpl("<DT><STRONG>" + header + "</STRONG></DT>" + " <DD>"
-+ return new TagletOutputImpl("<dt><span class=\"strong\">" + header + "</span></dt>" + " <dd>"
- + htmlWriter.commentTagsToString(simpleTag, null, simpleTag.inlineTags(), false)
-- + "</DD>" + DocletConstants.NL);
-+ + "</dd>" + DocletConstants.NL);
- }
-
- /**
- * {@inheritDoc}
- */
- public TagletOutput getThrowsHeader() {
-- return new TagletOutputImpl(DocletConstants.NL + "<DT>" + "<STRONG>" +
-- htmlWriter.configuration().getText("doclet.Throws") + "</STRONG></DT>");
-+ return new TagletOutputImpl(DocletConstants.NL + "<dt>" + "<span class=\"strong\">" +
-+ htmlWriter.configuration().getText("doclet.Throws") + "</span></dt>");
- }
-
- /**
- * {@inheritDoc}
- */
- public TagletOutput throwsTagOutput(ThrowsTag throwsTag) {
-- String result = DocletConstants.NL + "<DD>";
-+ String result = DocletConstants.NL + "<dd>";
- result += throwsTag.exceptionType() == null ?
- htmlWriter.codeText(throwsTag.exceptionName()) :
- htmlWriter.codeText(
-@@ -243,7 +238,7 @@
- if (text != null && text.toString().length() > 0) {
- result += " - " + text;
- }
-- result += "</DD>";
-+ result += "</dd>";
- return new TagletOutputImpl(result);
- }
-
-@@ -251,9 +246,9 @@
- * {@inheritDoc}
- */
- public TagletOutput throwsTagOutput(Type throwsType) {
-- return new TagletOutputImpl(DocletConstants.NL + "<DD>" +
-+ return new TagletOutputImpl(DocletConstants.NL + "<dd>" +
- htmlWriter.codeText(htmlWriter.getLink(
-- new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER, throwsType))) + "</DD>");
-+ new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER, throwsType))) + "</dd>");
- }
-
- /**
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/TreeWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/TreeWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/TreeWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/TreeWriter.java
-@@ -29,6 +29,8 @@
-
- import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-+import com.sun.tools.doclets.internal.toolkit.*;
-
- /**
- * Generate Class Hierarchy page for all the Classes in this run. Use
-@@ -37,6 +39,7 @@
- * current or the destination directory.
- *
- * @author Atul M Dambalkar
-+ * @author Bhavesh Patel (Modified)
- */
- public class TreeWriter extends AbstractTreeWriter {
-
-@@ -90,86 +93,70 @@
- }
-
- /**
-- * Print the interface hierarchy and class hierarchy in the file.
-+ * Generate the interface hierarchy and class hierarchy.
- */
- public void generateTreeFile() throws IOException {
-- printHtmlHeader(configuration.getText("doclet.Window_Class_Hierarchy"),
-- null, true);
--
-- printTreeHeader();
--
-- printPageHeading();
--
-- printPackageTreeLinks();
--
-- generateTree(classtree.baseclasses(), "doclet.Class_Hierarchy");
-- generateTree(classtree.baseinterfaces(), "doclet.Interface_Hierarchy");
-- generateTree(classtree.baseAnnotationTypes(), "doclet.Annotation_Type_Hierarchy");
-- generateTree(classtree.baseEnums(), "doclet.Enum_Hierarchy");
--
-- printTreeFooter();
-+ Content body = getTreeHeader();
-+ Content headContent = getResource("doclet.Hierarchy_For_All_Packages");
-+ Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, false,
-+ HtmlStyle.title, headContent);
-+ Content div = HtmlTree.DIV(HtmlStyle.header, heading);
-+ addPackageTreeLinks(div);
-+ body.addContent(div);
-+ HtmlTree divTree = new HtmlTree(HtmlTag.DIV);
-+ divTree.addStyle(HtmlStyle.contentContainer);
-+ addTree(classtree.baseclasses(), "doclet.Class_Hierarchy", divTree);
-+ addTree(classtree.baseinterfaces(), "doclet.Interface_Hierarchy", divTree);
-+ addTree(classtree.baseAnnotationTypes(), "doclet.Annotation_Type_Hierarchy", divTree);
-+ addTree(classtree.baseEnums(), "doclet.Enum_Hierarchy", divTree);
-+ body.addContent(divTree);
-+ addNavLinks(false, body);
-+ addBottom(body);
-+ printHtmlDocument(null, true, body);
- }
-
- /**
-- * Generate the links to all the package tree files.
-+ * Add the links to all the package tree files.
-+ *
-+ * @param contentTree the content tree to which the links will be added
- */
-- protected void printPackageTreeLinks() {
-+ protected void addPackageTreeLinks(Content contentTree) {
- //Do nothing if only unnamed package is used
- if (packages.length == 1 && packages[0].name().length() == 0) {
- return;
- }
- if (!classesonly) {
-- dl();
-- dt();
-- strongText("doclet.Package_Hierarchies");
-- dtEnd();
-- dd();
-+ Content span = HtmlTree.SPAN(HtmlStyle.strong,
-+ getResource("doclet.Package_Hierarchies"));
-+ contentTree.addContent(span);
-+ HtmlTree ul = new HtmlTree(HtmlTag.UL);
-+ ul.addStyle(HtmlStyle.horizontal);
- for (int i = 0; i < packages.length; i++) {
- if (packages[i].name().length() == 0) {
- continue;
- }
-- String filename = pathString(packages[i], "package-tree.html");
-- printHyperLink(filename, "", packages[i].name());
-+ String link = pathString(packages[i], "package-tree.html");
-+ Content li = HtmlTree.LI(getHyperLink(
-+ link, "", new StringContent(packages[i].name())));
- if (i < packages.length - 1) {
-- print(", ");
-+ li.addContent(", ");
- }
-+ ul.addContent(li);
- }
-- ddEnd();
-- dlEnd();
-- hr();
-+ contentTree.addContent(ul);
- }
- }
-
- /**
-- * Print the top text (from the -top option) and
-- * navigation bar at the top of page.
-+ * Get the tree header.
-+ *
-+ * @return a content tree for the tree header
- */
-- protected void printTreeHeader() {
-- printTop();
-- navLinks(true);
-- hr();
-- }
--
-- /**
-- * Print the navigation bar and bottom text (from the -bottom option)
-- * at the bottom of page.
-- */
-- protected void printTreeFooter() {
-- hr();
-- navLinks(false);
-- printBottom();
-- printBodyHtmlEnd();
-- }
--
-- /**
-- * Print the page title "Hierarchy For All Packages" at the top of the tree
-- * page.
-- */
-- protected void printPageHeading() {
-- center();
-- h2();
-- printText("doclet.Hierarchy_For_All_Packages");
-- h2End();
-- centerEnd();
-+ protected Content getTreeHeader() {
-+ String title = configuration.getText("doclet.Window_Class_Hierarchy");
-+ Content bodyTree = getBody(true, getWindowTitle(title));
-+ addTop(bodyTree);
-+ addNavLinks(true, bodyTree);
-+ return bodyTree;
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/Comment.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/Comment.java
-new file mode 100644
---- /dev/null
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/Comment.java
-@@ -0,0 +1,90 @@
-+/*
-+ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+package com.sun.tools.doclets.formats.html.markup;
-+
-+import com.sun.tools.doclets.internal.toolkit.Content;
-+import com.sun.tools.doclets.internal.toolkit.util.*;
-+
-+/**
-+ * Class for generating a comment for HTML pages of javadoc output.
-+ *
-+ * @author Bhavesh Patel
-+ */
-+public class Comment extends Content{
-+
-+ private String commentText;
-+
-+ /**
-+ * Constructor to construct a Comment object.
-+ *
-+ * @param comment comment text for the comment
-+ */
-+ public Comment(String comment) {
-+ commentText = nullCheck(comment);
-+ }
-+
-+ /**
-+ * This method is not supported by the class.
-+ *
-+ * @param content content that needs to be added
-+ * @throws DocletAbortException this method will always throw a
-+ * DocletAbortException because it
-+ * is not supported.
-+ */
-+ public void addContent(Content content) {
-+ throw new DocletAbortException();
-+ }
-+
-+ /**
-+ * This method is not supported by the class.
-+ *
-+ * @param stringContent string content that needs to be added
-+ * @throws DocletAbortException this method will always throw a
-+ * DocletAbortException because it
-+ * is not supported.
-+ */
-+ public void addContent(String stringContent) {
-+ throw new DocletAbortException();
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public boolean isEmpty() {
-+ return commentText.isEmpty();
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void write(StringBuilder contentBuilder) {
-+ if (!endsWithNewLine(contentBuilder))
-+ contentBuilder.append("\n");
-+ contentBuilder.append("<!-- ");
-+ contentBuilder.append(commentText);
-+ contentBuilder.append(" -->\n");
-+ }
-+}
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/DocType.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/DocType.java
-new file mode 100644
---- /dev/null
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/DocType.java
-@@ -0,0 +1,113 @@
-+/*
-+ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+package com.sun.tools.doclets.formats.html.markup;
-+
-+import com.sun.tools.doclets.internal.toolkit.Content;
-+import com.sun.tools.doclets.internal.toolkit.util.*;
-+
-+/**
-+ * Class for generating document type for HTML pages of javadoc output.
-+ *
-+ * @author Bhavesh Patel
-+ */
-+public class DocType extends Content{
-+
-+ private String docType;
-+
-+ private static DocType transitional;
-+
-+ private static DocType frameset;
-+
-+ /**
-+ * Constructor to construct a DocType object.
-+ *
-+ * @param type the doctype to be added
-+ */
-+ private DocType(String type, String dtd) {
-+ docType = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 " + type +
-+ "//EN\" \"" + dtd + "\">\n";
-+ }
-+
-+ /**
-+ * Construct and return a HTML 4.01 transitional DocType content
-+ *
-+ * @return a content tree for transitional DocType
-+ */
-+ public static DocType Transitional() {
-+ if (transitional == null)
-+ transitional = new DocType("Transitional", "http://www.w3.org/TR/html4/loose.dtd");
-+ return transitional;
-+ }
-+
-+ /**
-+ * Construct and return a HTML 4.01 frameset DocType content
-+ *
-+ * @return a content tree for frameset DocType
-+ */
-+ public static DocType Frameset() {
-+ if (frameset == null)
-+ frameset = new DocType("Frameset", "http://www.w3.org/TR/html4/frameset.dtd");
-+ return frameset;
-+ }
-+
-+ /**
-+ * This method is not supported by the class.
-+ *
-+ * @param content content that needs to be added
-+ * @throws DocletAbortException this method will always throw a
-+ * DocletAbortException because it
-+ * is not supported.
-+ */
-+ public void addContent(Content content) {
-+ throw new DocletAbortException();
-+ }
-+
-+ /**
-+ * This method is not supported by the class.
-+ *
-+ * @param stringContent string content that needs to be added
-+ * @throws DocletAbortException this method will always throw a
-+ * DocletAbortException because it
-+ * is not supported.
-+ */
-+ public void addContent(String stringContent) {
-+ throw new DocletAbortException();
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public boolean isEmpty() {
-+ return (docType.length() == 0);
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void write(StringBuilder contentBuilder) {
-+ contentBuilder.append(docType);
-+ }
-+}
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlAttr.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlAttr.java
-new file mode 100644
---- /dev/null
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlAttr.java
-@@ -0,0 +1,73 @@
-+/*
-+ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+package com.sun.tools.doclets.formats.html.markup;
-+
-+/**
-+ * Enum representing HTML tag attributes.
-+ *
-+ * @author Bhavesh Patel
-+ */
-+public enum HtmlAttr {
-+ ALT,
-+ BORDER,
-+ CELLPADDING,
-+ CELLSPACING,
-+ CHARSET,
-+ CLASS,
-+ CLEAR,
-+ COLS,
-+ CONTENT,
-+ HREF,
-+ HTTP_EQUIV("http-equiv"),
-+ ID,
-+ LANG,
-+ NAME,
-+ ONLOAD,
-+ REL,
-+ ROWS,
-+ SCOPE,
-+ SCROLLING,
-+ SRC,
-+ SUMMARY,
-+ TARGET,
-+ TITLE,
-+ TYPE,
-+ WIDTH;
-+
-+ private final String value;
-+
-+ HtmlAttr() {
-+ this.value = name().toLowerCase();
-+ }
-+
-+ HtmlAttr(String name) {
-+ this.value = name;
-+ }
-+
-+ public String toString() {
-+ return value;
-+ }
-+}
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlConstants.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlConstants.java
-new file mode 100644
---- /dev/null
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlConstants.java
-@@ -0,0 +1,189 @@
-+/*
-+ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+package com.sun.tools.doclets.formats.html.markup;
-+
-+import com.sun.tools.doclets.internal.toolkit.Content;
-+
-+/**
-+ * Stores constants for Html Doclet.
-+ *
-+ * @author Bhavesh Patel
-+ */
-+public class HtmlConstants {
-+
-+ /**
-+ * Marker to identify start of top navigation bar.
-+ */
-+ public static final Content START_OF_TOP_NAVBAR =
-+ new Comment("========= START OF TOP NAVBAR =======");
-+
-+ /**
-+ * Marker to identify start of bottom navigation bar.
-+ */
-+ public static final Content START_OF_BOTTOM_NAVBAR =
-+ new Comment("======= START OF BOTTOM NAVBAR ======");
-+
-+ /**
-+ * Marker to identify end of top navigation bar.
-+ */
-+ public static final Content END_OF_TOP_NAVBAR =
-+ new Comment("========= END OF TOP NAVBAR =========");
-+
-+ /**
-+ * Marker to identify end of bottom navigation bar.
-+ */
-+ public static final Content END_OF_BOTTOM_NAVBAR =
-+ new Comment("======== END OF BOTTOM NAVBAR =======");
-+
-+ /**
-+ * Marker to identify start of class data.
-+ */
-+ public static final Content START_OF_CLASS_DATA =
-+ new Comment("======== START OF CLASS DATA ========");
-+
-+ /**
-+ * Marker to identify end of class data.
-+ */
-+ public static final Content END_OF_CLASS_DATA =
-+ new Comment("========= END OF CLASS DATA =========");
-+
-+ /**
-+ * Marker to identify start of nested class summary.
-+ */
-+ public static final Content START_OF_NESTED_CLASS_SUMMARY =
-+ new Comment("======== NESTED CLASS SUMMARY ========");
-+
-+ /**
-+ * Marker to identify start of annotation type optional member summary.
-+ */
-+ public static final Content START_OF_ANNOTATION_TYPE_OPTIONAL_MEMBER_SUMMARY =
-+ new Comment("=========== ANNOTATION TYPE OPTIONAL MEMBER SUMMARY ===========");
-+
-+ /**
-+ * Marker to identify start of annotation type required member summary.
-+ */
-+ public static final Content START_OF_ANNOTATION_TYPE_REQUIRED_MEMBER_SUMMARY =
-+ new Comment("=========== ANNOTATION TYPE REQUIRED MEMBER SUMMARY ===========");
-+
-+ /**
-+ * Marker to identify start of constructor summary.
-+ */
-+ public static final Content START_OF_CONSTRUCTOR_SUMMARY =
-+ new Comment("======== CONSTRUCTOR SUMMARY ========");
-+
-+ /**
-+ * Marker to identify start of enum constants summary.
-+ */
-+ public static final Content START_OF_ENUM_CONSTANT_SUMMARY =
-+ new Comment("=========== ENUM CONSTANT SUMMARY ===========");
-+
-+ /**
-+ * Marker to identify start of field summary.
-+ */
-+ public static final Content START_OF_FIELD_SUMMARY =
-+ new Comment("=========== FIELD SUMMARY ===========");
-+
-+ /**
-+ * Marker to identify start of method summary.
-+ */
-+ public static final Content START_OF_METHOD_SUMMARY =
-+ new Comment("========== METHOD SUMMARY ===========");
-+
-+ /**
-+ * Marker to identify start of annotation type details.
-+ */
-+ public static final Content START_OF_ANNOTATION_TYPE_DETAILS =
-+ new Comment("============ ANNOTATION TYPE MEMBER DETAIL ===========");
-+
-+ /**
-+ * Marker to identify start of method details.
-+ */
-+ public static final Content START_OF_METHOD_DETAILS =
-+ new Comment("============ METHOD DETAIL ==========");
-+
-+ /**
-+ * Marker to identify start of field details.
-+ */
-+ public static final Content START_OF_FIELD_DETAILS =
-+ new Comment("============ FIELD DETAIL ===========");
-+
-+ /**
-+ * Marker to identify start of constructor details.
-+ */
-+ public static final Content START_OF_CONSTRUCTOR_DETAILS =
-+ new Comment("========= CONSTRUCTOR DETAIL ========");
-+
-+ /**
-+ * Marker to identify start of enum constants details.
-+ */
-+ public static final Content START_OF_ENUM_CONSTANT_DETAILS =
-+ new Comment("============ ENUM CONSTANT DETAIL ===========");
-+
-+ /**
-+ * Html tag for the page title heading.
-+ */
-+ public static final HtmlTag TITLE_HEADING = HtmlTag.H1;
-+
-+ /**
-+ * Html tag for the class page title heading.
-+ */
-+ public static final HtmlTag CLASS_PAGE_HEADING = HtmlTag.H2;
-+
-+ /**
-+ * Html tag for the content heading.
-+ */
-+ public static final HtmlTag CONTENT_HEADING = HtmlTag.H2;
-+
-+ /**
-+ * Html tag for the package name heading.
-+ */
-+ public static final HtmlTag PACKAGE_HEADING = HtmlTag.H2;
-+
-+ /**
-+ * Html tag for the member summary heading.
-+ */
-+ public static final HtmlTag SUMMARY_HEADING = HtmlTag.H3;
-+
-+ /**
-+ * Html tag for the inherited member summary heading.
-+ */
-+ public static final HtmlTag INHERITED_SUMMARY_HEADING = HtmlTag.H3;
-+
-+ /**
-+ * Html tag for the member details heading.
-+ */
-+ public static final HtmlTag DETAILS_HEADING = HtmlTag.H3;
-+
-+ /**
-+ * Html tag for the serialized member heading.
-+ */
-+ public static final HtmlTag SERIALIZED_MEMBER_HEADING = HtmlTag.H3;
-+
-+ /**
-+ * Html tag for the member heading.
-+ */
-+ public static final HtmlTag MEMBER_HEADING = HtmlTag.H4;
-+}
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java
-@@ -87,7 +87,7 @@
- */
- public void printHyperLink(String link, String where,
- String label, boolean strong) {
-- print(getHyperLink(link, where, label, strong, "", "", ""));
-+ print(getHyperLinkString(link, where, label, strong, "", "", ""));
- }
-
- /**
-@@ -115,7 +115,7 @@
- public void printHyperLink(String link, String where,
- String label, boolean strong,
- String stylename) {
-- print(getHyperLink(link, where, label, strong, stylename, "", ""));
-+ print(getHyperLinkString(link, where, label, strong, stylename, "", ""));
- }
-
- /**
-@@ -128,9 +128,9 @@
- * @param strong Boolean that sets label to strong.
- * @return String Hyper Link.
- */
-- public String getHyperLink(String link, String where,
-+ public String getHyperLinkString(String link, String where,
- String label, boolean strong) {
-- return getHyperLink(link, where, label, strong, "", "", "");
-+ return getHyperLinkString(link, where, label, strong, "", "", "");
- }
-
- /**
-@@ -144,10 +144,24 @@
- * @param stylename String style of text defined in style sheet.
- * @return String Hyper Link.
- */
-- public String getHyperLink(String link, String where,
-+ public String getHyperLinkString(String link, String where,
- String label, boolean strong,
- String stylename) {
-- return getHyperLink(link, where, label, strong, stylename, "", "");
-+ return getHyperLinkString(link, where, label, strong, stylename, "", "");
-+ }
-+
-+ /**
-+ * Get Html Hyper Link string.
-+ *
-+ * @param link String name of the file.
-+ * @param where Position of the link in the file. Character '#' is not
-+ * needed.
-+ * @param label Tag for the link.
-+ * @return a content tree for the hyper link
-+ */
-+ public Content getHyperLink(String link, String where,
-+ Content label) {
-+ return getHyperLink(link, where, label, "", "");
- }
-
- /**
-@@ -163,11 +177,11 @@
- * @param target Target frame.
- * @return String Hyper Link.
- */
-- public String getHyperLink(String link, String where,
-+ public String getHyperLinkString(String link, String where,
- String label, boolean strong,
- String stylename, String title, String target) {
- StringBuffer retlink = new StringBuffer();
-- retlink.append("<A HREF=\"");
-+ retlink.append("<a href=\"");
- retlink.append(link);
- if (where != null && where.length() != 0) {
- retlink.append("#");
-@@ -187,27 +201,54 @@
- retlink.append("\">");
- }
- if (strong) {
-- retlink.append("<STRONG>");
-+ retlink.append("<span class=\"strong\">");
- }
- retlink.append(label);
- if (strong) {
-- retlink.append("</STRONG>");
-+ retlink.append("</span>");
- }
- if (stylename != null && stylename.length() != 0) {
- retlink.append("</FONT>");
- }
-- retlink.append("</A>");
-+ retlink.append("</a>");
- return retlink.toString();
- }
-
- /**
-- * Print link without positioning in the file.
-+ * Get Html Hyper Link.
- *
- * @param link String name of the file.
-+ * @param where Position of the link in the file. Character '#' is not
-+ * needed.
- * @param label Tag for the link.
-+ * @param title String that describes the link's content for accessibility.
-+ * @param target Target frame.
-+ * @return a content tree for the hyper link.
- */
-- public void printHyperLink(String link, String label) {
-- print(getHyperLink(link, "", label, false));
-+ public Content getHyperLink(String link, String where,
-+ Content label, String title, String target) {
-+ if (where != null && where.length() != 0) {
-+ link += "#" + where;
-+ }
-+ HtmlTree anchor = HtmlTree.A(link, label);
-+ if (title != null && title.length() != 0) {
-+ anchor.addAttr(HtmlAttr.TITLE, title);
-+ }
-+ if (target != null && target.length() != 0) {
-+ anchor.addAttr(HtmlAttr.TARGET, target);
-+ }
-+ return anchor;
-+ }
-+
-+ /**
-+ * Get a hyperlink to a file.
-+ *
-+ * @param link String name of the file
-+ * @param label Label for the link
-+ * @return a content for the hyperlink to the file
-+ */
-+ public Content getHyperLink(String link, Content label) {
-+ return getHyperLink(link, "", label);
- }
-
- /**
-@@ -217,8 +258,8 @@
- * @param label Tag for the link.
- * @return Strign Hyper link.
- */
-- public String getHyperLink(String link, String label) {
-- return getHyperLink(link, "", label, false);
-+ public String getHyperLinkString(String link, String label) {
-+ return getHyperLinkString(link, "", label, false);
- }
-
- /**
-@@ -273,54 +314,32 @@
- * Print the frameset version of the Html file header.
- * Called only when generating an HTML frameset file.
- *
-- * @param title Title of this HTML document.
-+ * @param title Title of this HTML document
-+ * @param noTimeStamp If true, don't print time stamp in header
-+ * @param frameset the frameset to be added to the HTML document
- */
-- public void printFramesetHeader(String title) {
-- printFramesetHeader(title, false);
-- }
--
-- /**
-- * Print the frameset version of the Html file header.
-- * Called only when generating an HTML frameset file.
-- *
-- * @param title Title of this HTML document.
-- * @param noTimeStamp If true, don't print time stamp in header.
-- */
-- public void printFramesetHeader(String title, boolean noTimeStamp) {
-- println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 " +
-- "Frameset//EN\" " +
-- "\"http://www.w3.org/TR/html4/frameset.dtd\">");
-- println("<!--NewPage-->");
-- html();
-- head();
-+ public void printFramesetDocument(String title, boolean noTimeStamp,
-+ Content frameset) {
-+ Content htmlDocType = DocType.Frameset();
-+ Content htmlComment = new Comment(configuration.getText("doclet.New_Page"));
-+ Content head = new HtmlTree(HtmlTag.HEAD);
- if (! noTimeStamp) {
-- print("<!-- Generated by javadoc on ");
-- print(today());
-- println("-->");
-+ Content headComment = new Comment("Generated by javadoc on " + today());
-+ head.addContent(headComment);
- }
- if (configuration.charset.length() > 0) {
-- println("<META http-equiv=\"Content-Type\" content=\"text/html; "
-- + "charset=" + configuration.charset + "\">");
-+ Content meta = HtmlTree.META("Content-Type", "text/html",
-+ configuration.charset);
-+ head.addContent(meta);
- }
-- title();
-- println(title);
-- titleEnd();
-- //Script to set the classFrame if necessary.
-- script();
-- println(" targetPage = \"\" + window.location.search;");
-- println(" if (targetPage != \"\" && targetPage != \"undefined\")");
-- println(" targetPage = targetPage.substring(1);");
-- println(" if (targetPage.indexOf(\":\") != -1)");
-- println(" targetPage = \"undefined\";");
--
-- println(" function loadFrames() {");
-- println(" if (targetPage != \"\" && targetPage != \"undefined\")");
-- println(" top.classFrame.location = top.targetPage;");
-- println(" }");
-- scriptEnd();
-- noScript();
-- noScriptEnd();
-- headEnd();
-+ Content windowTitle = HtmlTree.TITLE(new StringContent(title));
-+ head.addContent(windowTitle);
-+ head.addContent(getFramesetJavaScript());
-+ Content htmlTree = HtmlTree.HTML(configuration.getLocale().getLanguage(),
-+ head, frameset);
-+ Content htmlDocument = new HtmlDocument(htmlDocType,
-+ htmlComment, htmlTree);
-+ print(htmlDocument.toString());
- }
-
- /**
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocument.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocument.java
-new file mode 100644
---- /dev/null
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocument.java
-@@ -0,0 +1,103 @@
-+/*
-+ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+package com.sun.tools.doclets.formats.html.markup;
-+
-+import java.util.*;
-+import com.sun.tools.doclets.internal.toolkit.Content;
-+import com.sun.tools.doclets.internal.toolkit.util.*;
-+
-+/**
-+ * Class for generating an HTML document for javadoc output.
-+ *
-+ * @author Bhavesh Patel
-+ */
-+public class HtmlDocument extends Content {
-+
-+ private List<Content> docContent = Collections.<Content>emptyList();
-+
-+ /**
-+ * Constructor to construct an HTML document.
-+ *
-+ * @param docType document type for the HTML document
-+ * @param docComment comment for the document
-+ * @param htmlTree HTML tree of the document
-+ */
-+ public HtmlDocument(Content docType, Content docComment, Content htmlTree) {
-+ docContent = new ArrayList<Content>();
-+ addContent(nullCheck(docType));
-+ addContent(nullCheck(docComment));
-+ addContent(nullCheck(htmlTree));
-+ }
-+
-+ /**
-+ * Constructor to construct an HTML document.
-+ *
-+ * @param docType document type for the HTML document
-+ * @param htmlTree HTML tree of the document
-+ */
-+ public HtmlDocument(Content docType, Content htmlTree) {
-+ docContent = new ArrayList<Content>();
-+ addContent(nullCheck(docType));
-+ addContent(nullCheck(htmlTree));
-+ }
-+
-+ /**
-+ * Adds content for the HTML document.
-+ *
-+ * @param htmlContent html content to be added
-+ */
-+ public void addContent(Content htmlContent) {
-+ if (htmlContent.isValid())
-+ docContent.add(htmlContent);
-+ }
-+
-+ /**
-+ * This method is not supported by the class.
-+ *
-+ * @param stringContent string content that needs to be added
-+ * @throws DocletAbortException this method will always throw a
-+ * DocletAbortException because it
-+ * is not supported.
-+ */
-+ public void addContent(String stringContent) {
-+ throw new DocletAbortException();
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public boolean isEmpty() {
-+ return (docContent.isEmpty());
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void write(StringBuilder contentBuilder) {
-+ for (Content c : docContent)
-+ c.write(contentBuilder);
-+ }
-+}
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlStyle.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlStyle.java
-new file mode 100644
---- /dev/null
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlStyle.java
-@@ -0,0 +1,73 @@
-+/*
-+ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+package com.sun.tools.doclets.formats.html.markup;
-+
-+/**
-+ * Enum representing HTML styles. The name map to values in the CSS file.
-+ *
-+ * @author Bhavesh Patel
-+ */
-+public enum HtmlStyle {
-+ aboutLanguage,
-+ altColor,
-+ bar,
-+ block,
-+ blockList,
-+ blockListLast,
-+ bottomNav,
-+ classUseContainer,
-+ colFirst,
-+ colLast,
-+ colOne,
-+ constantValuesContainer,
-+ contentContainer,
-+ description,
-+ details,
-+ header,
-+ horizontal,
-+ footer,
-+ indexContainer,
-+ indexHeader,
-+ inheritance,
-+ legalCopy,
-+ nameValue,
-+ navBarCell1Rev,
-+ navList,
-+ overviewSummary,
-+ packageSummary,
-+ rowColor,
-+ serializedFormContainer,
-+ sourceContainer,
-+ sourceLineNo,
-+ strong,
-+ subNav,
-+ subNavList,
-+ subTitle,
-+ summary,
-+ tabEnd,
-+ title,
-+ topNav;
-+}
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTag.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTag.java
-new file mode 100644
---- /dev/null
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTag.java
-@@ -0,0 +1,126 @@
-+/*
-+ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+package com.sun.tools.doclets.formats.html.markup;
-+
-+/**
-+ * Enum representing HTML tags.
-+ *
-+ * @author Bhavesh Patel
-+ */
-+public enum HtmlTag {
-+ A(BlockType.INLINE, EndTag.END),
-+ BLOCKQUOTE,
-+ BODY(BlockType.OTHER, EndTag.END),
-+ BR(BlockType.INLINE, EndTag.NOEND),
-+ CAPTION,
-+ CENTER,
-+ CODE(BlockType.INLINE, EndTag.END),
-+ DD,
-+ DIV,
-+ DL,
-+ DT,
-+ EM(BlockType.INLINE, EndTag.END),
-+ FONT(BlockType.INLINE, EndTag.END),
-+ FRAME(BlockType.OTHER, EndTag.NOEND),
-+ FRAMESET(BlockType.OTHER, EndTag.END),
-+ H1,
-+ H2,
-+ H3,
-+ H4,
-+ H5,
-+ H6,
-+ HEAD(BlockType.OTHER, EndTag.END),
-+ HR(BlockType.BLOCK, EndTag.NOEND),
-+ HTML(BlockType.OTHER, EndTag.END),
-+ I(BlockType.INLINE, EndTag.END),
-+ IMG(BlockType.INLINE, EndTag.NOEND),
-+ LI,
-+ LINK(BlockType.OTHER, EndTag.NOEND),
-+ MENU,
-+ META(BlockType.OTHER, EndTag.NOEND),
-+ NOFRAMES(BlockType.OTHER, EndTag.END),
-+ NOSCRIPT(BlockType.OTHER, EndTag.END),
-+ OL,
-+ P,
-+ PRE,
-+ SCRIPT(BlockType.OTHER, EndTag.END),
-+ SMALL(BlockType.INLINE, EndTag.END),
-+ SPAN(BlockType.INLINE, EndTag.END),
-+ STRONG(BlockType.INLINE, EndTag.END),
-+ TABLE,
-+ TBODY,
-+ TD,
-+ TH,
-+ TITLE(BlockType.OTHER, EndTag.END),
-+ TR,
-+ TT(BlockType.INLINE, EndTag.END),
-+ UL;
-+
-+ protected final BlockType blockType;
-+ protected final EndTag endTag;
-+ private final String value;
-+
-+ /**
-+ * Enum representing the type of HTML element.
-+ */
-+ protected static enum BlockType {
-+ BLOCK,
-+ INLINE,
-+ OTHER;
-+ }
-+
-+ /**
-+ * Enum representing HTML end tag requirement.
-+ */
-+ protected static enum EndTag {
-+ END,
-+ NOEND;
-+ }
-+
-+ HtmlTag() {
-+ this(BlockType.BLOCK, EndTag.END);
-+ }
-+
-+ HtmlTag(BlockType blockType, EndTag endTag ) {
-+ this.blockType = blockType;
-+ this.endTag = endTag;
-+ this.value = name().toLowerCase();
-+ }
-+
-+ /**
-+ * Returns true if the end tag is required. This is specific to the standard
-+ * doclet and does not exactly resemble the W3C specifications.
-+ *
-+ * @return true if end tag needs to be displayed else return false
-+ */
-+ public boolean endTagRequired() {
-+ return (endTag == EndTag.END);
-+ }
-+
-+ public String toString() {
-+ return value;
-+ }
-+}
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java
-new file mode 100644
---- /dev/null
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java
-@@ -0,0 +1,777 @@
-+/*
-+ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+package com.sun.tools.doclets.formats.html.markup;
-+
-+import java.util.*;
-+import com.sun.tools.doclets.internal.toolkit.Content;
-+import com.sun.tools.doclets.internal.toolkit.util.*;
-+
-+/**
-+ * Class for generating HTML tree for javadoc output.
-+ *
-+ * @author Bhavesh Patel
-+ */
-+public class HtmlTree extends Content {
-+
-+ private HtmlTag htmlTag;
-+ private Map<HtmlAttr,String> attrs = Collections.<HtmlAttr,String>emptyMap();
-+ private List<Content> content = Collections.<Content>emptyList();
-+ public static final Content EMPTY = new StringContent("");
-+
-+ /**
-+ * Constructor to construct HtmlTree object.
-+ *
-+ * @param tag HTML tag for the HtmlTree object
-+ */
-+ public HtmlTree(HtmlTag tag) {
-+ htmlTag = nullCheck(tag);
-+ }
-+
-+ /**
-+ * Constructor to construct HtmlTree object.
-+ *
-+ * @param tag HTML tag for the HtmlTree object
-+ * @param contents contents to be added to the tree
-+ */
-+ public HtmlTree(HtmlTag tag, Content... contents) {
-+ this(tag);
-+ for (Content content: contents)
-+ addContent(content);
-+ }
-+
-+ /**
-+ * Adds an attribute for the HTML tag.
-+ *
-+ * @param attrName name of the attribute
-+ * @param attrValue value of the attribute
-+ */
-+ public void addAttr(HtmlAttr attrName, String attrValue) {
-+ if (attrs.isEmpty())
-+ attrs = new LinkedHashMap<HtmlAttr,String>();
-+ attrs.put(nullCheck(attrName), nullCheck(attrValue));
-+ }
-+
-+ /**
-+ * Adds a style for the HTML tag.
-+ *
-+ * @param style style to be added
-+ */
-+ public void addStyle(HtmlStyle style) {
-+ addAttr(HtmlAttr.CLASS, style.toString());
-+ }
-+
-+ /**
-+ * Adds content for the HTML tag.
-+ *
-+ * @param tagContent tag content to be added
-+ */
-+ public void addContent(Content tagContent) {
-+ if (tagContent == HtmlTree.EMPTY || tagContent.isValid()) {
-+ if (content.isEmpty())
-+ content = new ArrayList<Content>();
-+ content.add(tagContent);
-+ }
-+ }
-+
-+ /**
-+ * This method adds a string content to the htmltree. If the last content member
-+ * added is a StringContent, append the string to that StringContent or else
-+ * create a new StringContent and add it to the html tree.
-+ *
-+ * @param stringContent string content that needs to be added
-+ */
-+ public void addContent(String stringContent) {
-+ if (!content.isEmpty()) {
-+ Content lastContent = content.get(content.size() - 1);
-+ if (lastContent instanceof StringContent)
-+ lastContent.addContent(stringContent);
-+ else
-+ addContent(new StringContent(stringContent));
-+ }
-+ else
-+ addContent(new StringContent(stringContent));
-+ }
-+
-+ /**
-+ * Generates an HTML anchor tag.
-+ *
-+ * @param ref reference url for the anchor tag
-+ * @param body content for the anchor tag
-+ * @return an HtmlTree object
-+ */
-+ public static HtmlTree A(String ref, Content body) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.A, nullCheck(body));
-+ htmltree.addAttr(HtmlAttr.HREF, nullCheck(ref));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates an HTML anchor tag with name attribute and content.
-+ *
-+ * @param name name for the anchor tag
-+ * @param body content for the anchor tag
-+ * @return an HtmlTree object
-+ */
-+ public static HtmlTree A_NAME(String name, Content body) {
-+ HtmlTree htmltree = HtmlTree.A_NAME(name);
-+ htmltree.addContent(nullCheck(body));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates an HTML anchor tag with name attribute.
-+ *
-+ * @param name name for the anchor tag
-+ * @return an HtmlTree object
-+ */
-+ public static HtmlTree A_NAME(String name) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.A);
-+ htmltree.addAttr(HtmlAttr.NAME, nullCheck(name));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a CAPTION tag with some content.
-+ *
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the CAPTION tag
-+ */
-+ public static HtmlTree CAPTION(Content body) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.CAPTION, nullCheck(body));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a CODE tag with some content.
-+ *
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the CODE tag
-+ */
-+ public static HtmlTree CODE(Content body) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.CODE, nullCheck(body));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a DD tag with some content.
-+ *
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the DD tag
-+ */
-+ public static HtmlTree DD(Content body) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.DD, nullCheck(body));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a DL tag with some content.
-+ *
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the DL tag
-+ */
-+ public static HtmlTree DL(Content body) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.DL, nullCheck(body));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a DIV tag with the style class attributes. It also encloses
-+ * a content.
-+ *
-+ * @param styleClass stylesheet class for the tag
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the DIV tag
-+ */
-+ public static HtmlTree DIV(HtmlStyle styleClass, Content body) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.DIV, nullCheck(body));
-+ if (styleClass != null)
-+ htmltree.addStyle(styleClass);
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a DIV tag with some content.
-+ *
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the DIV tag
-+ */
-+ public static HtmlTree DIV(Content body) {
-+ return DIV(null, body);
-+ }
-+
-+ /**
-+ * Generates a DT tag with some content.
-+ *
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the DT tag
-+ */
-+ public static HtmlTree DT(Content body) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.DT, nullCheck(body));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a EM tag with some content.
-+ *
-+ * @param body content to be added to the tag
-+ * @return an HtmlTree object for the EM tag
-+ */
-+ public static HtmlTree EM(Content body) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.EM, nullCheck(body));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a FRAME tag.
-+ *
-+ * @param src the url of the document to be shown in the frame
-+ * @param name specifies the name of the frame
-+ * @param title the title for the frame
-+ * @param scrolling specifies whether to display scrollbars in the frame
-+ * @return an HtmlTree object for the FRAME tag
-+ */
-+ public static HtmlTree FRAME(String src, String name, String title, String scrolling) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.FRAME);
-+ htmltree.addAttr(HtmlAttr.SRC, nullCheck(src));
-+ htmltree.addAttr(HtmlAttr.NAME, nullCheck(name));
-+ htmltree.addAttr(HtmlAttr.TITLE, nullCheck(title));
-+ if (scrolling != null)
-+ htmltree.addAttr(HtmlAttr.SCROLLING, scrolling);
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a Frame tag.
-+ *
-+ * @param src the url of the document to be shown in the frame
-+ * @param name specifies the name of the frame
-+ * @param title the title for the frame
-+ * @return an HtmlTree object for the SPAN tag
-+ */
-+ public static HtmlTree FRAME(String src, String name, String title) {
-+ return FRAME(src, name, title, null);
-+ }
-+
-+ /**
-+ * Generates a FRAMESET tag.
-+ *
-+ * @param cols the size of columns in the frameset
-+ * @param rows the size of rows in the frameset
-+ * @param title the title for the frameset
-+ * @param onload the script to run when the document loads
-+ * @return an HtmlTree object for the FRAMESET tag
-+ */
-+ public static HtmlTree FRAMESET(String cols, String rows, String title, String onload) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.FRAMESET);
-+ if (cols != null)
-+ htmltree.addAttr(HtmlAttr.COLS, cols);
-+ if (rows != null)
-+ htmltree.addAttr(HtmlAttr.ROWS, rows);
-+ htmltree.addAttr(HtmlAttr.TITLE, nullCheck(title));
-+ htmltree.addAttr(HtmlAttr.ONLOAD, nullCheck(onload));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a heading tag (h1 to h6) with the title and style class attributes. It also encloses
-+ * a content.
-+ *
-+ * @param headingTag the heading tag to be generated
-+ * @param printTitle true if title for the tag needs to be printed else false
-+ * @param styleClass stylesheet class for the tag
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the tag
-+ */
-+ public static HtmlTree HEADING(HtmlTag headingTag, boolean printTitle,
-+ HtmlStyle styleClass, Content body) {
-+ HtmlTree htmltree = new HtmlTree(headingTag, nullCheck(body));
-+ if (printTitle)
-+ htmltree.addAttr(HtmlAttr.TITLE, Util.stripHtml(body.toString()));
-+ if (styleClass != null)
-+ htmltree.addStyle(styleClass);
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a heading tag (h1 to h6) with style class attribute. It also encloses
-+ * a content.
-+ *
-+ * @param headingTag the heading tag to be generated
-+ * @param styleClass stylesheet class for the tag
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the tag
-+ */
-+ public static HtmlTree HEADING(HtmlTag headingTag, HtmlStyle styleClass, Content body) {
-+ return HEADING(headingTag, false, styleClass, body);
-+ }
-+
-+ /**
-+ * Generates a heading tag (h1 to h6) with the title attribute. It also encloses
-+ * a content.
-+ *
-+ * @param headingTag the heading tag to be generated
-+ * @param printTitle true if the title for the tag needs to be printed else false
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the tag
-+ */
-+ public static HtmlTree HEADING(HtmlTag headingTag, boolean printTitle, Content body) {
-+ return HEADING(headingTag, printTitle, null, body);
-+ }
-+
-+ /**
-+ * Generates a heading tag (h1 to h6) with some content.
-+ *
-+ * @param headingTag the heading tag to be generated
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the tag
-+ */
-+ public static HtmlTree HEADING(HtmlTag headingTag, Content body) {
-+ return HEADING(headingTag, false, null, body);
-+ }
-+
-+ /**
-+ * Generates an HTML tag with lang attribute. It also adds head and body
-+ * content to the HTML tree.
-+ *
-+ * @param lang language for the HTML document
-+ * @param head head for the HTML tag
-+ * @param body body for the HTML tag
-+ * @return an HtmlTree object for the HTML tag
-+ */
-+ public static HtmlTree HTML(String lang, Content head, Content body) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.HTML, nullCheck(head), nullCheck(body));
-+ htmltree.addAttr(HtmlAttr.LANG, nullCheck(lang));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a I tag with some content.
-+ *
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the I tag
-+ */
-+ public static HtmlTree I(Content body) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.I, nullCheck(body));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a LI tag with some content.
-+ *
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the LI tag
-+ */
-+ public static HtmlTree LI(Content body) {
-+ return LI(null, body);
-+ }
-+
-+ /**
-+ * Generates a LI tag with some content.
-+ *
-+ * @param styleClass style for the tag
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the LI tag
-+ */
-+ public static HtmlTree LI(HtmlStyle styleClass, Content body) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.LI, nullCheck(body));
-+ if (styleClass != null)
-+ htmltree.addStyle(styleClass);
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a LINK tag with the rel, type, href and title attributes.
-+ *
-+ * @param rel relevance of the link
-+ * @param type type of link
-+ * @param href the path for the link
-+ * @param title title for the link
-+ * @return an HtmlTree object for the LINK tag
-+ */
-+ public static HtmlTree LINK(String rel, String type, String href, String title) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.LINK);
-+ htmltree.addAttr(HtmlAttr.REL, nullCheck(rel));
-+ htmltree.addAttr(HtmlAttr.TYPE, nullCheck(type));
-+ htmltree.addAttr(HtmlAttr.HREF, nullCheck(href));
-+ htmltree.addAttr(HtmlAttr.TITLE, nullCheck(title));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a META tag with the http-equiv, content and charset attributes.
-+ *
-+ * @param http-equiv http equiv attribute for the META tag
-+ * @param content type of content
-+ * @param charset character set used
-+ * @return an HtmlTree object for the META tag
-+ */
-+ public static HtmlTree META(String httpEquiv, String content, String charSet) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.META);
-+ htmltree.addAttr(HtmlAttr.HTTP_EQUIV, nullCheck(httpEquiv));
-+ htmltree.addAttr(HtmlAttr.CONTENT, nullCheck(content));
-+ htmltree.addAttr(HtmlAttr.CHARSET, nullCheck(charSet));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a META tag with the name and content attributes.
-+ *
-+ * @param name name attribute
-+ * @param content type of content
-+ * @return an HtmlTree object for the META tag
-+ */
-+ public static HtmlTree META(String name, String content) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.META);
-+ htmltree.addAttr(HtmlAttr.NAME, nullCheck(name));
-+ htmltree.addAttr(HtmlAttr.CONTENT, nullCheck(content));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a NOSCRIPT tag with some content.
-+ *
-+ * @param body content of the noscript tag
-+ * @return an HtmlTree object for the NOSCRIPT tag
-+ */
-+ public static HtmlTree NOSCRIPT(Content body) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.NOSCRIPT, nullCheck(body));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a P tag with some content.
-+ *
-+ * @param body content of the Paragraph tag
-+ * @return an HtmlTree object for the P tag
-+ */
-+ public static HtmlTree P(Content body) {
-+ return P(null, body);
-+ }
-+
-+ /**
-+ * Generates a P tag with some content.
-+ *
-+ * @param styleClass style of the Paragraph tag
-+ * @param body content of the Paragraph tag
-+ * @return an HtmlTree object for the P tag
-+ */
-+ public static HtmlTree P(HtmlStyle styleClass, Content body) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.P, nullCheck(body));
-+ if (styleClass != null)
-+ htmltree.addStyle(styleClass);
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a SMALL tag with some content.
-+ *
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the SMALL tag
-+ */
-+ public static HtmlTree SMALL(Content body) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.SMALL, nullCheck(body));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a STRONG tag with some content.
-+ *
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the STRONG tag
-+ */
-+ public static HtmlTree STRONG(Content body) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.STRONG, nullCheck(body));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a SPAN tag with some content.
-+ *
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the SPAN tag
-+ */
-+ public static HtmlTree SPAN(Content body) {
-+ return SPAN(null, body);
-+ }
-+
-+ /**
-+ * Generates a SPAN tag with style class attribute and some content.
-+ *
-+ * @param styleClass style class for the tag
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the SPAN tag
-+ */
-+ public static HtmlTree SPAN(HtmlStyle styleClass, Content body) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.SPAN, nullCheck(body));
-+ if (styleClass != null)
-+ htmltree.addStyle(styleClass);
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a Table tag with border, width and summary attributes and
-+ * some content.
-+ *
-+ * @param border border for the table
-+ * @param width width of the table
-+ * @param summary summary for the table
-+ * @param body content for the table
-+ * @return an HtmlTree object for the TABLE tag
-+ */
-+ public static HtmlTree TABLE(int border, int width, String summary,
-+ Content body) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.TABLE, nullCheck(body));
-+ htmltree.addAttr(HtmlAttr.BORDER, Integer.toString(border));
-+ htmltree.addAttr(HtmlAttr.WIDTH, Integer.toString(width));
-+ htmltree.addAttr(HtmlAttr.SUMMARY, nullCheck(summary));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a Table tag with style class, border, cell padding,
-+ * cellspacing and summary attributes and some content.
-+ *
-+ * @param styleClass style of the table
-+ * @param border border for the table
-+ * @param cellPadding cell padding for the table
-+ * @param cellSpacing cell spacing for the table
-+ * @param summary summary for the table
-+ * @param body content for the table
-+ * @return an HtmlTree object for the TABLE tag
-+ */
-+ public static HtmlTree TABLE(HtmlStyle styleClass, int border, int cellPadding,
-+ int cellSpacing, String summary, Content body) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.TABLE, nullCheck(body));
-+ if (styleClass != null)
-+ htmltree.addStyle(styleClass);
-+ htmltree.addAttr(HtmlAttr.BORDER, Integer.toString(border));
-+ htmltree.addAttr(HtmlAttr.CELLPADDING, Integer.toString(cellPadding));
-+ htmltree.addAttr(HtmlAttr.CELLSPACING, Integer.toString(cellSpacing));
-+ htmltree.addAttr(HtmlAttr.SUMMARY, nullCheck(summary));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a Table tag with border, cell padding,
-+ * cellspacing and summary attributes and some content.
-+ *
-+ * @param border border for the table
-+ * @param cellPadding cell padding for the table
-+ * @param cellSpacing cell spacing for the table
-+ * @param summary summary for the table
-+ * @param body content for the table
-+ * @return an HtmlTree object for the TABLE tag
-+ */
-+ public static HtmlTree TABLE(int border, int cellPadding,
-+ int cellSpacing, String summary, Content body) {
-+ return TABLE(null, border, cellPadding, cellSpacing, summary, body);
-+ }
-+
-+ /**
-+ * Generates a TD tag with style class attribute and some content.
-+ *
-+ * @param styleClass style for the tag
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the TD tag
-+ */
-+ public static HtmlTree TD(HtmlStyle styleClass, Content body) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.TD, nullCheck(body));
-+ if (styleClass != null)
-+ htmltree.addStyle(styleClass);
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a TD tag for an HTML table with some content.
-+ *
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the TD tag
-+ */
-+ public static HtmlTree TD(Content body) {
-+ return TD(null, body);
-+ }
-+
-+ /**
-+ * Generates a TH tag with style class and scope attributes and some content.
-+ *
-+ * @param styleClass style for the tag
-+ * @param scope scope of the tag
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the TH tag
-+ */
-+ public static HtmlTree TH(HtmlStyle styleClass, String scope, Content body) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.TH, nullCheck(body));
-+ if (styleClass != null)
-+ htmltree.addStyle(styleClass);
-+ htmltree.addAttr(HtmlAttr.SCOPE, nullCheck(scope));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a TH tag with scope attribute and some content.
-+ *
-+ * @param scope scope of the tag
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the TH tag
-+ */
-+ public static HtmlTree TH(String scope, Content body) {
-+ return TH(null, scope, body);
-+ }
-+
-+ /**
-+ * Generates a TITLE tag with some content.
-+ *
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the TITLE tag
-+ */
-+ public static HtmlTree TITLE(Content body) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.TITLE, nullCheck(body));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a TR tag for an HTML table with some content.
-+ *
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the TR tag
-+ */
-+ public static HtmlTree TR(Content body) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.TR, nullCheck(body));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * Generates a UL tag with the style class attribute and some content.
-+ *
-+ * @param styleClass style for the tag
-+ * @param body content for the tag
-+ * @return an HtmlTree object for the UL tag
-+ */
-+ public static HtmlTree UL(HtmlStyle styleClass, Content body) {
-+ HtmlTree htmltree = new HtmlTree(HtmlTag.UL, nullCheck(body));
-+ htmltree.addStyle(nullCheck(styleClass));
-+ return htmltree;
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public boolean isEmpty() {
-+ return (!hasContent() && !hasAttrs());
-+ }
-+
-+ /**
-+ * Returns true if the HTML tree has content.
-+ *
-+ * @return true if the HTML tree has content else return false
-+ */
-+ public boolean hasContent() {
-+ return (!content.isEmpty());
-+ }
-+
-+ /**
-+ * Returns true if the HTML tree has attributes.
-+ *
-+ * @return true if the HTML tree has attributes else return false
-+ */
-+ public boolean hasAttrs() {
-+ return (!attrs.isEmpty());
-+ }
-+
-+ /**
-+ * Returns true if the HTML tree has a specific attribute.
-+ *
-+ * @param attrName name of the attribute to check within the HTML tree
-+ * @return true if the HTML tree has the specified attribute else return false
-+ */
-+ public boolean hasAttr(HtmlAttr attrName) {
-+ return (attrs.containsKey(attrName));
-+ }
-+
-+ /**
-+ * Returns true if the HTML tree is valid. This check is more specific to
-+ * standard doclet and not exactly similar to W3C specifications. But it
-+ * ensures HTML validation.
-+ *
-+ * @return true if the HTML tree is valid
-+ */
-+ public boolean isValid() {
-+ switch (htmlTag) {
-+ case A :
-+ return (hasAttr(HtmlAttr.NAME) || (hasAttr(HtmlAttr.HREF) && hasContent()));
-+ case BR :
-+ return (!hasContent() && (!hasAttrs() || hasAttr(HtmlAttr.CLEAR)));
-+ case FRAME :
-+ return (hasAttr(HtmlAttr.SRC) && !hasContent());
-+ case HR :
-+ return (!hasContent());
-+ case IMG :
-+ return (hasAttr(HtmlAttr.SRC) && hasAttr(HtmlAttr.ALT) && !hasContent());
-+ case LINK :
-+ return (hasAttr(HtmlAttr.HREF) && !hasContent());
-+ case META :
-+ return (hasAttr(HtmlAttr.CONTENT) && !hasContent());
-+ default :
-+ return hasContent();
-+ }
-+ }
-+
-+ /**
-+ * Returns true if the element is an inline element.
-+ *
-+ * @return true if the HTML tag is an inline element
-+ */
-+ public boolean isInline() {
-+ return (htmlTag.blockType == HtmlTag.BlockType.INLINE);
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void write(StringBuilder contentBuilder) {
-+ if (!isInline() && !endsWithNewLine(contentBuilder))
-+ contentBuilder.append("\n");
-+ String tagString = htmlTag.toString();
-+ contentBuilder.append("<" + tagString);
-+ Iterator<HtmlAttr> iterator = attrs.keySet().iterator();
-+ HtmlAttr key;
-+ String value = "";
-+ while (iterator.hasNext()) {
-+ key = iterator.next();
-+ value = attrs.get(key);
-+ contentBuilder.append(" " + key.toString());
-+ if (!value.isEmpty())
-+ contentBuilder.append("=\"" + value + "\"");
-+ }
-+ contentBuilder.append(">");
-+ for (Content c : content)
-+ c.write(contentBuilder);
-+ if (htmlTag.endTagRequired())
-+ contentBuilder.append("</" + tagString + ">");
-+ if (!isInline())
-+ contentBuilder.append("\n");
-+ }
-+}
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java
-@@ -55,7 +55,7 @@
- * URL file separator string("/").
- */
- public static final String fileseparator =
-- DirectoryManager.URL_FILE_SEPERATOR;
-+ DirectoryManager.URL_FILE_SEPARATOR;
-
- /**
- * The configuration
-@@ -82,6 +82,72 @@
- */
- protected final String modifierTypeHeader;
-
-+ public final Content overviewLabel;
-+
-+ public final Content defaultPackageLabel;
-+
-+ public final Content packageLabel;
-+
-+ public final Content useLabel;
-+
-+ public final Content prevLabel;
-+
-+ public final Content nextLabel;
-+
-+ public final Content prevclassLabel;
-+
-+ public final Content nextclassLabel;
-+
-+ public final Content summaryLabel;
-+
-+ public final Content detailLabel;
-+
-+ public final Content framesLabel;
-+
-+ public final Content noframesLabel;
-+
-+ public final Content treeLabel;
-+
-+ public final Content classLabel;
-+
-+ public final Content deprecatedLabel;
-+
-+ public final Content deprecatedPhrase;
-+
-+ public final Content allclassesLabel;
-+
-+ public final Content indexLabel;
-+
-+ public final Content helpLabel;
-+
-+ public final Content seeLabel;
-+
-+ public final Content descriptionLabel;
-+
-+ public final Content prevpackageLabel;
-+
-+ public final Content nextpackageLabel;
-+
-+ public final Content packagesLabel;
-+
-+ public final Content methodDetailsLabel;
-+
-+ public final Content annotationTypeDetailsLabel;
-+
-+ public final Content fieldDetailsLabel;
-+
-+ public final Content constructorDetailsLabel;
-+
-+ public final Content enumConstantsDetailsLabel;
-+
-+ public final Content specifiedByLabel;
-+
-+ public final Content overridesLabel;
-+
-+ public final Content descfrmClassLabel;
-+
-+ public final Content descfrmInterfaceLabel;
-+
- /**
- * Constructor.
- *
-@@ -111,6 +177,73 @@
- modifierTypeHeader = configuration.getText("doclet.0_and_1",
- configuration.getText("doclet.Modifier"),
- configuration.getText("doclet.Type"));
-+ overviewLabel = getResource("doclet.Overview");
-+ defaultPackageLabel = new RawHtml(
-+ DocletConstants.DEFAULT_PACKAGE_NAME);
-+ packageLabel = getResource("doclet.Package");
-+ useLabel = getResource("doclet.navClassUse");
-+ prevLabel = getResource("doclet.Prev");
-+ nextLabel = getResource("doclet.Next");
-+ prevclassLabel = getResource("doclet.Prev_Class");
-+ nextclassLabel = getResource("doclet.Next_Class");
-+ summaryLabel = getResource("doclet.Summary");
-+ detailLabel = getResource("doclet.Detail");
-+ framesLabel = getResource("doclet.FRAMES");
-+ noframesLabel = getResource("doclet.NO_FRAMES");
-+ treeLabel = getResource("doclet.Tree");
-+ classLabel = getResource("doclet.Class");
-+ deprecatedLabel = getResource("doclet.navDeprecated");
-+ deprecatedPhrase = getResource("doclet.Deprecated");
-+ allclassesLabel = getResource("doclet.All_Classes");
-+ indexLabel = getResource("doclet.Index");
-+ helpLabel = getResource("doclet.Help");
-+ seeLabel = getResource("doclet.See");
-+ descriptionLabel = getResource("doclet.Description");
-+ prevpackageLabel = getResource("doclet.Prev_Package");
-+ nextpackageLabel = getResource("doclet.Next_Package");
-+ packagesLabel = getResource("doclet.Packages");
-+ methodDetailsLabel = getResource("doclet.Method_Detail");
-+ annotationTypeDetailsLabel = getResource("doclet.Annotation_Type_Member_Detail");
-+ fieldDetailsLabel = getResource("doclet.Field_Detail");
-+ constructorDetailsLabel = getResource("doclet.Constructor_Detail");
-+ enumConstantsDetailsLabel = getResource("doclet.Enum_Constant_Detail");
-+ specifiedByLabel = getResource("doclet.Specified_By");
-+ overridesLabel = getResource("doclet.Overrides");
-+ descfrmClassLabel = getResource("doclet.Description_From_Class");
-+ descfrmInterfaceLabel = getResource("doclet.Description_From_Interface");
-+ }
-+
-+ /**
-+ * Get the configuration string as a content.
-+ *
-+ * @param key the key to look for in the configuration file
-+ * @return a content tree for the text
-+ */
-+ public Content getResource(String key) {
-+ return new StringContent(configuration.getText(key));
-+ }
-+
-+ /**
-+ * Get the configuration string as a content.
-+ *
-+ * @param key the key to look for in the configuration file
-+ * @param a1 string argument added to configuration text
-+ * @return a content tree for the text
-+ */
-+ public Content getResource(String key, String a1) {
-+ return new RawHtml(configuration.getText(key, a1));
-+ }
-+
-+ /**
-+ * Get the configuration string as a content.
-+ *
-+ * @param key the key to look for in the configuration file
-+ * @param a1 string argument added to configuration text
-+ * @param a2 string argument added to configuration text
-+ * @return a content tree for the text
-+ */
-+ public Content getResource(String key, String a1, String a2) {
-+ return new RawHtml(configuration.getText(key, a1, a2));
- }
-
- /**
-@@ -146,6 +279,48 @@
- }
-
- /**
-+ * Returns an HtmlTree for the SCRIPT tag.
-+ *
-+ * @return an HtmlTree for the SCRIPT tag
-+ */
-+ protected HtmlTree getWinTitleScript(){
-+ HtmlTree script = new HtmlTree(HtmlTag.SCRIPT);
-+ if(winTitle != null && winTitle.length() > 0) {
-+ script.addAttr(HtmlAttr.TYPE, "text/javascript");
-+ String scriptCode = "<!--\n" +
-+ " if (location.href.indexOf('is-external=true') == -1) {\n" +
-+ " parent.document.title=\"" + winTitle + "\";\n" +
-+ " }\n" +
-+ "//-->\n";
-+ RawHtml scriptContent = new RawHtml(scriptCode);
-+ script.addContent(scriptContent);
-+ }
-+ return script;
-+ }
-+
-+ /**
-+ * Returns a content tree for the SCRIPT tag for the main page(index.html).
-+ *
-+ * @return a content for the SCRIPT tag
-+ */
-+ protected Content getFramesetJavaScript(){
-+ HtmlTree script = new HtmlTree(HtmlTag.SCRIPT);
-+ script.addAttr(HtmlAttr.TYPE, "text/javascript");
-+ String scriptCode = "\n targetPage = \"\" + window.location.search;\n" +
-+ " if (targetPage != \"\" && targetPage != \"undefined\")\n" +
-+ " targetPage = targetPage.substring(1);\n" +
-+ " if (targetPage.indexOf(\":\") != -1)\n" +
-+ " targetPage = \"undefined\";\n" +
-+ " function loadFrames() {\n" +
-+ " if (targetPage != \"\" && targetPage != \"undefined\")\n" +
-+ " top.classFrame.location = top.targetPage;\n" +
-+ " }\n";
-+ RawHtml scriptContent = new RawHtml(scriptCode);
-+ script.addContent(scriptContent);
-+ return script;
-+ }
-+
-+ /**
- * Print the Javascript &lt;SCRIPT&gt; start tag with its type
- * attribute.
- */
-@@ -204,6 +379,28 @@
- }
-
- /**
-+ * Returns an HtmlTree for the BODY tag.
-+ *
-+ * @param includeScript set true if printing windowtitle script
-+ * @param title title for the window
-+ * @return an HtmlTree for the BODY tag
-+ */
-+ public HtmlTree getBody(boolean includeScript, String title) {
-+ HtmlTree body = new HtmlTree(HtmlTag.BODY);
-+ // Set window title string which is later printed
-+ this.winTitle = title;
-+ // Don't print windowtitle script for overview-frame, allclasses-frame
-+ // and package-frame
-+ if (includeScript) {
-+ body.addContent(getWinTitleScript());
-+ Content noScript = HtmlTree.NOSCRIPT(
-+ HtmlTree.DIV(getResource("doclet.No_Script_Message")));
-+ body.addContent(noScript);
-+ }
-+ return body;
-+ }
-+
-+ /**
- * Print &lt;/BODY&gt; tag. Add a newline character at the end.
- */
- public void bodyEnd() {
-@@ -228,6 +425,15 @@
- title();
- }
-
-+ /**
-+ * Returns an HtmlTree for the TITLE tag.
-+ *
-+ * @return an HtmlTree for the TITLE tag
-+ */
-+ public HtmlTree getTitle() {
-+ HtmlTree title = HtmlTree.TITLE(new StringContent(winTitle));
-+ return title;
-+ }
-
- /**
- * Print &lt;/TITLE&gt; tag. Add a newline character at the end.
-@@ -519,17 +725,17 @@
- }
-
- /**
-- * Return, text passed, with Italics &lt;I&gt; and &lt;/I&gt; tags, surrounding it.
-- * So if the text passed is "Hi", then string returned will be "&lt;I&gt;Hi&lt;/I&gt;".
-+ * Return, text passed, with Italics &lt;i&gt; and &lt;/i&gt; tags, surrounding it.
-+ * So if the text passed is "Hi", then string returned will be "&lt;i&gt;Hi&lt;/i&gt;".
- *
- * @param text String to be printed in between &lt;I&gt; and &lt;/I&gt; tags.
- */
- public String italicsText(String text) {
-- return "<I>" + text + "</I>";
-+ return "<i>" + text + "</i>";
- }
-
- public String codeText(String text) {
-- return "<CODE>" + text + "</CODE>";
-+ return "<code>" + text + "</code>";
- }
-
- /**
-@@ -540,6 +746,13 @@
- }
-
- /**
-+ * Return "&#38;nbsp;", non-breaking space.
-+ */
-+ public Content getSpace() {
-+ return RawHtml.nbsp;
-+ }
-+
-+ /**
- * Print &lt;DL&gt; tag. Add a newline character at the end.
- */
- public void dl() {
-@@ -1182,21 +1395,21 @@
- }
-
- /**
-- * Get the "&lt;CODE&gt;" string.
-+ * Get the "&lt;code&gt;" string.
- *
-- * @return String Return String "&lt;CODE>";
-+ * @return String Return String "&lt;code&gt;";
- */
- public String getCode() {
-- return "<CODE>";
-+ return "<code>";
- }
-
- /**
-- * Get the "&lt;/CODE&gt;" string.
-+ * Get the "&lt;/code&gt;" string.
- *
-- * @return String Return String "&lt;/CODE&gt;";
-+ * @return String Return String "&lt;/code&gt;";
- */
- public String getCodeEnd() {
-- return "</CODE>";
-+ return "</code>";
- }
-
- /**
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/RawHtml.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/RawHtml.java
-new file mode 100644
---- /dev/null
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/RawHtml.java
-@@ -0,0 +1,88 @@
-+/*
-+ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+package com.sun.tools.doclets.formats.html.markup;
-+
-+import com.sun.tools.doclets.internal.toolkit.Content;
-+import com.sun.tools.doclets.internal.toolkit.util.*;
-+
-+/**
-+ * Class for generating raw HTML content to be added to HTML pages of javadoc output.
-+ *
-+ * @author Bhavesh Patel
-+ */
-+public class RawHtml extends Content{
-+
-+ private String rawHtmlContent;
-+
-+ public static final Content nbsp = new RawHtml("&nbsp;");
-+
-+ /**
-+ * Constructor to construct a RawHtml object.
-+ *
-+ * @param rawHtml raw HTML text to be added
-+ */
-+ public RawHtml(String rawHtml) {
-+ rawHtmlContent = nullCheck(rawHtml);
-+ }
-+
-+ /**
-+ * This method is not supported by the class.
-+ *
-+ * @param content content that needs to be added
-+ * @throws DocletAbortException this method will always throw a
-+ * DocletAbortException because it
-+ * is not supported.
-+ */
-+ public void addContent(Content content) {
-+ throw new DocletAbortException();
-+ }
-+
-+ /**
-+ * This method is not supported by the class.
-+ *
-+ * @param stringContent string content that needs to be added
-+ * @throws DocletAbortException this method will always throw a
-+ * DocletAbortException because it
-+ * is not supported.
-+ */
-+ public void addContent(String stringContent) {
-+ throw new DocletAbortException();
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public boolean isEmpty() {
-+ return rawHtmlContent.isEmpty();
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void write(StringBuilder contentBuilder) {
-+ contentBuilder.append(rawHtmlContent);
-+ }
-+}
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/StringContent.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/StringContent.java
-new file mode 100644
---- /dev/null
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/StringContent.java
-@@ -0,0 +1,99 @@
-+/*
-+ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+package com.sun.tools.doclets.formats.html.markup;
-+
-+import com.sun.tools.doclets.internal.toolkit.Content;
-+import com.sun.tools.doclets.internal.toolkit.util.*;
-+
-+/**
-+ * Class for generating string content for HTML tags of javadoc output.
-+ *
-+ * @author Bhavesh Patel
-+ */
-+public class StringContent extends Content{
-+
-+ private StringBuilder stringContent;
-+
-+ /**
-+ * Constructor to construct StringContent object.
-+ */
-+ public StringContent() {
-+ stringContent = new StringBuilder();
-+ }
-+
-+ /**
-+ * Constructor to construct StringContent object with some initial content.
-+ *
-+ * @param initialContent initial content for the object
-+ */
-+ public StringContent(String initialContent) {
-+ stringContent = new StringBuilder(
-+ Util.escapeHtmlChars(nullCheck(initialContent)));
-+ }
-+
-+ /**
-+ * This method is not supported by the class.
-+ *
-+ * @param content content that needs to be added
-+ * @throws DocletAbortException this method will always throw a
-+ * DocletAbortException because it
-+ * is not supported.
-+ */
-+ public void addContent(Content content) {
-+ throw new DocletAbortException();
-+ }
-+
-+ /**
-+ * Adds content for the StringContent object. The method escapes
-+ * HTML characters for the string content that is added.
-+ *
-+ * @param strContent string content to be added
-+ */
-+ public void addContent(String strContent) {
-+ stringContent.append(Util.escapeHtmlChars(nullCheck(strContent)));
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public boolean isEmpty() {
-+ return (stringContent.length() == 0);
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String toString() {
-+ return stringContent.toString();
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public void write(StringBuilder contentBuilder) {
-+ contentBuilder.append(stringContent);
-+ }
-+}
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard.properties b/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard.properties
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard.properties
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard.properties
-@@ -43,6 +43,7 @@
- doclet.Window_Split_Index={0}-Index
- doclet.Help=Help
- doclet.Skip_navigation_links=Skip navigation links
-+doclet.New_Page=NewPage
- doclet.None=None
- doclet.CLASSES=CLASSES
- doclet.MEMBERS=MEMBERS
-@@ -53,7 +54,7 @@
- doclet.Window_Deprecated_List=Deprecated List
- doclet.Note_0_is_deprecated=Note: {0} is deprecated.
- doclet.Overrides=Overrides:
--doclet.in_class={0} in class {1}
-+doclet.in_class=in class
- doclet.0_Fields_and_Methods=&quot;{0}&quot; Fields and Methods
- doclet.Index_of_Fields_and_Methods=Index of Fields and Methods
- doclet.Static_variable_in=Static variable in {0}
-@@ -102,7 +103,7 @@
- doclet.Package_Description=Package {0} Description
- doclet.Description=Description
- doclet.Specified_By=Specified by:
--doclet.in_interface={0} in interface {1}
-+doclet.in_interface=in interface
- doclet.Subclasses=Direct Known Subclasses:
- doclet.Subinterfaces=All Known Subinterfaces:
- doclet.Implementing_Classes=All Known Implementing Classes:
-@@ -120,18 +121,20 @@
- doclet.Frame_Alert=Frame Alert
- doclet.Overview-Member-Frame=Overview Member Frame
- doclet.Frame_Warning_Message=This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
-+doclet.No_Script_Message=JavaScript is disabled on your browser.
- doclet.Non_Frame_Version=Non-frame version.
- doclet.Frame_Version=Frame version
- doclet.Link_To=Link to
- doclet.Following_From_Class=Following copied from class: {0}
- doclet.Following_From_Interface=Following copied from interface: {0}
--doclet.Description_From_Interface=Description copied from interface: {0}
--doclet.Description_From_Class=Description copied from class: {0}
-+doclet.Description_From_Interface=Description copied from interface:
-+doclet.Description_From_Class=Description copied from class:
- doclet.Standard_doclet_invoked=Standard doclet invoked...
- doclet.No_Non_Deprecated_Classes_To_Document=No non-deprecated classes found to document.
- doclet.Interfaces_Italic=Interfaces (italic)
- doclet.Enclosing_Class=Enclosing class:
- doclet.Enclosing_Interface=Enclosing interface:
-+doclet.Window_Source_title=Source code
- doclet.Help_title=API Help
- doclet.Window_Help_title=API Help
- doclet.Help_line_1=How This API Document Is Organized
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeOptionalMemberWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeOptionalMemberWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeOptionalMemberWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeOptionalMemberWriter.java
-@@ -35,14 +35,18 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
-
- public interface AnnotationTypeOptionalMemberWriter extends
-- AnnotationTypeRequiredMemberWriter {
-+ AnnotationTypeRequiredMemberWriter {
-
- /**
-- * Write the default value documentation.
-+ * Add the the default value documentation.
-+ *
-+ * @param member the member being documented
-+ * @param annotationDocTree content tree to which the default value will be added
- */
-- public void writeDefaultValueInfo(MemberDoc member);
-+ public void addDefaultValueInfo(MemberDoc member, Content annotationDocTree);
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeRequiredMemberWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeRequiredMemberWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeRequiredMemberWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeRequiredMemberWriter.java
-@@ -36,67 +36,79 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
-
- public interface AnnotationTypeRequiredMemberWriter {
-
- /**
-- * Write the header for the member documentation.
-+ * Add the annotation type details tree header.
- *
-- * @param classDoc the annotation type that the members belong to.
-- * @param header the header to write.
-+ * @param classDoc the annotation type being documented
-+ * @param memberDetailsTree the content tree representing member details
- */
-- public void writeHeader(ClassDoc classDoc, String header);
-+ public void addAnnotationDetailsTreeHeader(ClassDoc classDoc,
-+ Content memberDetailsTree);
-
- /**
-- * Write the member header for the given member.
-+ * Get the annotation type documentation tree header.
- *
-- * @param member the member being documented.
-- * @param isFirst the flag to indicate whether or not the member is
-- * the first to be documented.
-+ * @param member the annotation type being documented
-+ * @param annotationDetailsTree the content tree representing annotation type details
-+ * @return content tree for the annotation type documentation header
- */
-- public void writeMemberHeader(MemberDoc member, boolean isFirst);
-+ public Content getAnnotationDocTreeHeader(MemberDoc member,
-+ Content annotationDetailsTree);
-
- /**
-- * Write the signature for the given member.
-+ * Get the annotation type details tree.
- *
-- * @param member the member being documented.
-+ * @param annotationDetailsTree the content tree representing annotation type details
-+ * @return content tree for the annotation type details
- */
-- public void writeSignature(MemberDoc member);
-+ public Content getAnnotationDetails(Content annotationDetailsTree);
-
- /**
-- * Write the deprecated output for the given member.
-+ * Get the annotation type documentation.
- *
-- * @param member the member being documented.
-+ * @param annotationDocTree the content tree representing annotation type documentation
-+ * @param isLastContent true if the content to be added is the last content
-+ * @return content tree for the annotation type documentation
- */
-- public void writeDeprecated(MemberDoc member);
-+ public Content getAnnotationDoc(Content annotationDocTree, boolean isLastContent);
-
- /**
-- * Write the comments for the given member.
-+ * Get the signature for the given member.
- *
-- * @param member the member being documented.
-+ * @param member the member being documented
-+ * @return content tree for the annotation type signature
- */
-- public void writeComments(MemberDoc member);
-+ public Content getSignature(MemberDoc member);
-
- /**
-- * Write the tag output for the given member.
-+ * Add the deprecated output for the given member.
- *
-- * @param member the member being documented.
-+ * @param member the member being documented
-+ * @param annotationDocTree content tree to which the deprecated information will be added
- */
-- public void writeTags(MemberDoc member);
-+ public void addDeprecated(MemberDoc member, Content annotationDocTree);
-
- /**
-- * Write the member footer.
-+ * Add the comments for the given member.
-+ *
-+ * @param member the member being documented
-+ * @param annotationDocTree the content tree to which the comments will be added
- */
-- public void writeMemberFooter();
-+ public void addComments(MemberDoc member, Content annotationDocTree);
-
- /**
-- * Write the footer for the member documentation.
-+ * Add the tags for the given member.
- *
-- * @param classDoc the class that the member belong to.
-+ * @param member the member being documented
-+ * @param annotationDocTree the content tree to which the tags will be added
- */
-- public void writeFooter(ClassDoc classDoc);
-+ public void addTags(MemberDoc member, Content annotationDocTree);
-
- /**
- * Close the writer.
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeWriter.java
-@@ -37,43 +37,122 @@
- * Do not use it as an API.
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
-
- public interface AnnotationTypeWriter {
-
- /**
-- * Write the header of the page.
-- * @param header the header to write.
-+ * Get the header of the page.
-+ *
-+ * @param header the header string to write
-+ * @return a content tree for the header documentation
- */
-- public void writeHeader(String header);
-+ public Content getHeader(String header);
-
- /**
-- * Write the signature of the current annotation type.
-+ * Get the annotation content header.
- *
-- * @param modifiers the modifiers for the signature.
-+ * @return annotation content header that needs to be added to the documentation
- */
-- public void writeAnnotationTypeSignature(String modifiers);
-+ public Content getAnnotationContentHeader();
-+
-+ /**
-+ * Get the annotation information tree header.
-+ *
-+ * @return annotation information tree header that needs to be added to the documentation
-+ */
-+ public Content getAnnotationInfoTreeHeader();
-+
-+ /**
-+ * Get the annotation information.
-+ *
-+ * @param annotationInfoTree content tree containing the annotation information
-+ * @return a content tree for the annotation
-+ */
-+ public Content getAnnotationInfo(Content annotationInfoTree);
-+
-+ /**
-+ * Add the signature of the current annotation type.
-+ *
-+ * @param modifiers the modifiers for the signature
-+ * @param annotationInfoTree the annotation content tree to which the signature will be added
-+ */
-+ public void addAnnotationTypeSignature(String modifiers, Content annotationInfoTree);
-
- /**
- * Build the annotation type description.
-+ *
-+ * @param annotationInfoTree content tree to which the description will be added
- */
-- public void writeAnnotationTypeDescription();
-+ public void addAnnotationTypeDescription(Content annotationInfoTree);
-
- /**
-- * Write the tag information for the current annotation type.
-+ * Add the tag information for the current annotation type.
-+ *
-+ * @param annotationInfoTree content tree to which the tag information will be added
- */
-- public void writeAnnotationTypeTagInfo();
-+ public void addAnnotationTypeTagInfo(Content annotationInfoTree);
-
- /**
-- * If this annotation type is deprecated, write the appropriate information.
-+ * If this annotation is deprecated, add the appropriate information.
-+ *
-+ * @param annotationInfoTree content tree to which the deprecated information will be added
- */
-- public void writeAnnotationTypeDeprecationInfo();
-+ public void addAnnotationTypeDeprecationInfo (Content annotationInfoTree);
-
- /**
-- * Write the footer of the page.
-+ * Add the annotation type details marker.
-+ *
-+ * @param memberDetails the content tree representing member details marker
- */
-- public void writeFooter();
-+ public void addAnnotationDetailsMarker(Content memberDetails);
-+
-+ /**
-+ * Get the member tree header for the annotation type.
-+ *
-+ * @return a content tree for the member tree header
-+ */
-+ public Content getMemberTreeHeader();
-+
-+ /**
-+ * Get the member tree.
-+ *
-+ * @param memberTree the content tree that will be modified and returned
-+ * @return a content tree for the member
-+ */
-+ public Content getMemberTree(Content memberTree);
-+
-+ /**
-+ * Get the member summary tree.
-+ *
-+ * @param memberTree the content tree that will be used to build the summary tree
-+ * @return a content tree for the member summary
-+ */
-+ public Content getMemberSummaryTree(Content memberTree);
-+
-+ /**
-+ * Get the member details tree.
-+ *
-+ * @param memberTree the content tree that will be used to build the details tree
-+ * @return a content tree for the member details
-+ */
-+ public Content getMemberDetailsTree(Content memberTree);
-+
-+ /**
-+ * Add the footer of the page.
-+ *
-+ * @param contentTree content tree to which the footer will be added
-+ */
-+ public void addFooter(Content contentTree);
-+
-+ /**
-+ * Print the document.
-+ *
-+ * @param contentTree content tree that will be printed as a document
-+ */
-+ public void printDocument(Content contentTree);
-
- /**
- * Close the writer.
-@@ -86,10 +165,4 @@
- * @return the AnnotationTypeDoc being documented.
- */
- public AnnotationTypeDoc getAnnotationTypeDoc();
--
-- /**
-- * Perform any operations that are necessary when the member summary
-- * finished building.
-- */
-- public void completeMemberSummaryBuild();
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/ClassWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/ClassWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/ClassWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/ClassWriter.java
-@@ -37,85 +37,149 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
-
- public interface ClassWriter {
-
- /**
-- * Write the header of the page.
-- * @param header the header to write.
-+ * Get the header of the page.
-+ *
-+ * @param header the header string to write
-+ * @return header content that needs to be added to the documentation
- */
-- public void writeHeader(String header);
-+ public Content getHeader(String header);
-
- /**
-- * Write the class tree documentation.
-+ * Get the class content header.
-+ *
-+ * @return class content header that needs to be added to the documentation
- */
-- public void writeClassTree();
-+ public Content getClassContentHeader();
-
- /**
-- * Write all implemented interfaces if this is a class.
-+ * Add the class tree documentation.
-+ *
-+ * @param classContentTree class content tree to which the documentation will be added
- */
-- public void writeImplementedInterfacesInfo();
-+ public void addClassTree(Content classContentTree);
-
- /**
-- * Write all super interfaces if this is an interface.
-+ * Get the class information tree header.
-+ *
-+ * @return class informaion tree header that needs to be added to the documentation
- */
-- public void writeSuperInterfacesInfo();
-+ public Content getClassInfoTreeHeader();
-
- /**
-- * Write the type parameter information.
-+ * Add the type parameter information.
-+ *
-+ * @param classInfoTree content tree to which the documentation will be added
- */
-- public void writeTypeParamInfo();
-+ public void addTypeParamInfo(Content classInfoTree);
-
- /**
-- * Write all the classes that extend this one.
-+ * Add all super interfaces if this is an interface.
-+ *
-+ * @param classInfoTree content tree to which the documentation will be added
- */
-- public void writeSubClassInfo();
-+ public void addSuperInterfacesInfo(Content classInfoTree);
-
- /**
-- * Write all the interfaces that extend this one.
-+ * Add all implemented interfaces if this is a class.
-+ *
-+ * @param classInfoTree content tree to which the documentation will be added
- */
-- public void writeSubInterfacesInfo();
-+ public void addImplementedInterfacesInfo(Content classInfoTree);
-
- /**
-- * If this is an interface, write all classes that implement this
-- * interface.
-+ * Add all the classes that extend this one.
-+ *
-+ * @param classInfoTree content tree to which the documentation will be added
- */
-- public void writeInterfaceUsageInfo ();
-+ public void addSubClassInfo(Content classInfoTree);
-
- /**
-- * If this is an inner class or interface, write the enclosing class or
-- * interface.
-+ * Add all the interfaces that extend this one.
-+ *
-+ * @param classInfoTree content tree to which the documentation will be added
- */
-- public void writeNestedClassInfo ();
-+ public void addSubInterfacesInfo(Content classInfoTree);
-
- /**
-- * If this class is deprecated, write the appropriate information.
-+ * If this is an interface, add all classes that implement this
-+ * interface.
-+ *
-+ * @param classInfoTree content tree to which the documentation will be added
- */
-- public void writeClassDeprecationInfo ();
-+ public void addInterfaceUsageInfo(Content classInfoTree);
-
- /**
-- * Write the signature of the current class.
-+ * If this is an inner class or interface, add the enclosing class or
-+ * interface.
- *
-- * @param modifiers the modifiers for the signature.
-+ * @param classInfoTree content tree to which the documentation will be added
- */
-- public void writeClassSignature(String modifiers);
-+ public void addNestedClassInfo (Content classInfoTree);
-+
-+ /**
-+ * Get the class information.
-+ *
-+ * @param classInfoTree content tree conatining the class information
-+ * @return a content tree for the class
-+ */
-+ public Content getClassInfo(Content classInfoTree);
-+
-+ /**
-+ * If this class is deprecated, add the appropriate information.
-+ *
-+ * @param classInfoTree content tree to which the documentation will be added
-+ */
-+ public void addClassDeprecationInfo (Content classInfoTree);
-+
-+ /**
-+ * Add the signature of the current class content tree.
-+ *
-+ * @param modifiers the modifiers for the signature
-+ * @param classInfoTree the class content tree to which the signature will be added
-+ */
-+ public void addClassSignature(String modifiers, Content classInfoTree);
-
- /**
- * Build the class description.
-+ *
-+ * @param classInfoTree content tree to which the documentation will be added
- */
-- public void writeClassDescription();
-+ public void addClassDescription(Content classInfoTree);
-
- /**
-- * Write the tag information for the current class.
-+ * Add the tag information for the current class.
-+ *
-+ * @param classInfoTree content tree to which the tag information will be added
- */
-- public void writeClassTagInfo();
-+ public void addClassTagInfo(Content classInfoTree);
-
- /**
-- * Write the footer of the page.
-+ * Get the member tree header for the class.
-+ *
-+ * @return a content tree for the member tree header
- */
-- public void writeFooter();
-+ public Content getMemberTreeHeader();
-+
-+ /**
-+ * Add the footer of the page.
-+ *
-+ * @param contentTree content tree to which the footer will be added
-+ */
-+ public void addFooter(Content contentTree);
-+
-+ /**
-+ * Print the document.
-+ *
-+ * @param contentTree content tree that will be printed as a document
-+ */
-+ public void printDocument(Content contentTree);
-
- /**
- * Close the writer.
-@@ -130,8 +194,18 @@
- public ClassDoc getClassDoc();
-
- /**
-- * Perform any operations that are necessary when the member summary
-- * finished building.
-+ * Get the member summary tree.
-+ *
-+ * @param memberTree the content tree used to build the summary tree
-+ * @return a content tree for the member summary
- */
-- public void completeMemberSummaryBuild();
-+ public Content getMemberSummaryTree(Content memberTree);
-+
-+ /**
-+ * Get the member details tree.
-+ *
-+ * @param memberTree the content tree used to build the details tree
-+ * @return a content tree for the member details
-+ */
-+ public Content getMemberDetailsTree(Content memberTree);
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstantsSummaryWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstantsSummaryWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstantsSummaryWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstantsSummaryWriter.java
-@@ -25,9 +25,9 @@
-
- package com.sun.tools.doclets.internal.toolkit;
-
--import com.sun.javadoc.*;
- import java.util.*;
- import java.io.*;
-+import com.sun.javadoc.*;
-
- /**
- * The interface for writing constants summary output.
-@@ -37,38 +37,34 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
-
- public interface ConstantsSummaryWriter {
-
- /**
-- * Write the header for the summary.
-- */
-- public abstract void writeHeader();
--
-- /**
-- * Write the footer for the summary.
-- */
-- public abstract void writeFooter();
--
-- /**
- * Close the writer.
- */
- public abstract void close() throws IOException;
-
- /**
-- * Write the header for the index.
-+ * Get the header for the constant summary documentation.
-+ *
-+ * @return header that needs to be added to the documentation
- */
-- public abstract void writeContentsHeader();
-+ public abstract Content getHeader();
-
- /**
-- * Write the footer for the index.
-+ * Get the header for the constant content list.
-+ *
-+ * @return content header that needs to be added to the documentation
- */
-- public abstract void writeContentsFooter();
-+ public abstract Content getContentsHeader();
-
- /**
-- * Add the given package name to the index.
-+ * Adds the given package name link to the constant content list tree.
-+ *
- * @param pkg the {@link PackageDoc} to index.
- * @param parsedPackageName the parsed package name. We only Write the
- * first 2 directory levels of the package
-@@ -77,38 +73,70 @@
- * @param WriteedPackageHeaders the set of package headers that have already
- * been indexed. We don't want to index
- * something more than once.
-+ * @param contentListTree the content tree to which the link will be added
- */
-- public abstract void writeLinkToPackageContent(PackageDoc pkg, String parsedPackageName,
-- Set WriteedPackageHeaders);
-+ public abstract void addLinkToPackageContent(PackageDoc pkg, String parsedPackageName,
-+ Set<String> WriteedPackageHeaders, Content contentListTree);
-
- /**
-- * Write the given package name.
-- * @param pkg the {@link PackageDoc} to index.
-- * @param parsedPackageName the parsed package name. We only Write the
-- * first 2 directory levels of the package
-- * name. For example, java.lang.ref would be
-- * indexed as java.lang.*.
-+ * Get the content list to be added to the documentation tree.
-+ *
-+ * @param contentListTree the content that will be added to the list
-+ * @return content list that will be added to the documentation tree
- */
-- public abstract void writePackageName(PackageDoc pkg,
-- String parsedPackageName);
-+ public abstract Content getContentsList(Content contentListTree);
-
- /**
-- * Write the heading for the current table of constants for a given class.
-- * @param cd the class whose constants are being documented.
-+ * Get the constant summaries for the document.
-+ *
-+ * @return constant summaries header to be added to the documentation tree
- */
-- public abstract void writeConstantMembersHeader(ClassDoc cd);
-+ public abstract Content getConstantSummaries();
-
- /**
-- * Document the given constants.
-+ * Adds the given package name.
-+ *
-+ * @param pkg the {@link PackageDoc} to index.
-+ * @param parsedPackageName the parsed package name. We only Write the
-+ * first 2 directory levels of the package
-+ * name. For example, java.lang.ref would be
-+ * indexed as java.lang.*.
-+ * @param summariesTree the documentation tree to which the package name will
-+ * be written
-+ */
-+ public abstract void addPackageName(PackageDoc pkg,
-+ String parsedPackageName, Content summariesTree);
-+
-+ /**
-+ * Get the class summary header for the constants summary.
-+ *
-+ * @return the header content for the class constants summary
-+ */
-+ public abstract Content getClassConstantHeader();
-+
-+ /**
-+ * Adds the constant member table to the documentation tree.
-+ *
- * @param cd the class whose constants are being documented.
- * @param fields the constants being documented.
-+ * @param classConstantTree the documentation tree to which theconstant member
-+ * table content will be added
- */
-- public abstract void writeConstantMembers(ClassDoc cd, List fields);
-+ public abstract void addConstantMembers(ClassDoc cd, List<FieldDoc> fields,
-+ Content classConstantTree);
-
- /**
-- * Document the given constants.
-- * @param cd the class whose constants are being documented.
-+ * Adds the footer for the summary documentation.
-+ *
-+ * @param contentTree content tree to which the footer will be added
- */
-- public abstract void writeConstantMembersFooter(ClassDoc cd);
-+ public abstract void addFooter(Content contentTree);
-+
-+ /**
-+ * Print the constants summary document.
-+ *
-+ * @param contentTree content tree which should be printed
-+ */
-+ public abstract void printDocument(Content contentTree);
-
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstructorWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstructorWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstructorWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstructorWriter.java
-@@ -36,67 +36,80 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
-
- public interface ConstructorWriter {
-
- /**
-- * Write the header for the constructor documentation.
-+ * Get the constructor details tree header.
- *
-- * @param classDoc the class that the constructors belong to.
-- * @param header the header to write.
-+ * @param classDoc the class being documented
-+ * @param memberDetailsTree the content tree representing member details
-+ * @return content tree for the constructor details header
- */
-- public void writeHeader(ClassDoc classDoc, String header);
-+ public Content getConstructorDetailsTreeHeader(ClassDoc classDoc,
-+ Content memberDetailsTree);
-
- /**
-- * Write the constructor header for the given constructor.
-+ * Get the constructor documentation tree header.
- *
-- * @param constructor the constructor being documented.
-- * @param isFirst the flag to indicate whether or not the constructor is the
-- * first to be documented.
-+ * @param constructor the constructor being documented
-+ * @param constructorDetailsTree the content tree representing constructor details
-+ * @return content tree for the constructor documentation header
- */
-- public void writeConstructorHeader(ConstructorDoc constructor, boolean isFirst);
-+ public Content getConstructorDocTreeHeader(ConstructorDoc constructor,
-+ Content constructorDetailsTree);
-
- /**
-- * Write the signature for the given constructor.
-+ * Get the signature for the given constructor.
- *
-- * @param constructor the constructor being documented.
-+ * @param constructor the constructor being documented
-+ * @return content tree for the constructor signature
- */
-- public void writeSignature(ConstructorDoc constructor);
-+ public Content getSignature(ConstructorDoc constructor);
-
- /**
-- * Write the deprecated output for the given constructor.
-+ * Add the deprecated output for the given constructor.
- *
-- * @param constructor the constructor being documented.
-+ * @param constructor the constructor being documented
-+ * @param constructorDocTree content tree to which the deprecated information will be added
- */
-- public void writeDeprecated(ConstructorDoc constructor);
-+ public void addDeprecated(ConstructorDoc constructor, Content constructorDocTree);
-
- /**
-- * Write the comments for the given constructor.
-+ * Add the comments for the given constructor.
- *
-- * @param constructor the constructor being documented.
-+ * @param constructor the constructor being documented
-+ * @param constructorDocTree the content tree to which the comments will be added
- */
-- public void writeComments(ConstructorDoc constructor);
-+ public void addComments(ConstructorDoc constructor, Content constructorDocTree);
-
- /**
-- * Write the tag output for the given constructor.
-+ * Add the tags for the given constructor.
- *
-- * @param constructor the constructor being documented.
-+ * @param constructor the constructor being documented
-+ * @param constructorDocTree the content tree to which the tags will be added
- */
-- public void writeTags(ConstructorDoc constructor);
-+ public void addTags(ConstructorDoc constructor, Content constructorDocTree);
-
- /**
-- * Write the constructor footer.
-+ * Get the constructor details tree.
-+ *
-+ * @param memberDetailsTree the content tree representing member details
-+ * @return content tree for the constructor details
- */
-- public void writeConstructorFooter();
-+ public Content getConstructorDetails(Content memberDetailsTree);
-
- /**
-- * Write the footer for the constructor documentation.
-+ * Get the constructor documentation.
- *
-- * @param classDoc the class that the constructors belong to.
-+ * @param constructorDocTree the content tree representing constructor documentation
-+ * @param isLastContent true if the content to be added is the last content
-+ * @return content tree for the constructor documentation
- */
-- public void writeFooter(ClassDoc classDoc);
-+ public Content getConstructorDoc(Content constructorDocTree, boolean isLastContent);
-
- /**
- * Let the writer know whether a non public constructor was found.
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/Content.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/Content.java
-new file mode 100644
---- /dev/null
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/Content.java
-@@ -0,0 +1,106 @@
-+/*
-+ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+package com.sun.tools.doclets.internal.toolkit;
-+
-+import com.sun.tools.doclets.internal.toolkit.util.*;
-+
-+/**
-+ * A class to create content for javadoc output pages.
-+ *
-+ * @author Bhavesh Patel
-+ */
-+public abstract class Content {
-+
-+ /**
-+ * Returns a string representation of the content.
-+ *
-+ * @return string representation of the content
-+ */
-+ public String toString() {
-+ StringBuilder contentBuilder = new StringBuilder();
-+ write(contentBuilder);
-+ return contentBuilder.toString();
-+ }
-+
-+ /**
-+ * Adds content to the existing content.
-+ *
-+ * @param content content that needs to be added
-+ */
-+ public abstract void addContent(Content content);
-+
-+ /**
-+ * Adds a string content to the existing content.
-+ *
-+ * @param stringContent the string content to be added
-+ */
-+ public abstract void addContent(String stringContent);
-+
-+ /**
-+ * Writes content to a StringBuilder.
-+ *
-+ */
-+ public abstract void write(StringBuilder contentBuilder);
-+
-+ /**
-+ * Returns true if the content is empty.
-+ *
-+ * @return true if no content to be displayed else return false
-+ */
-+ public abstract boolean isEmpty();
-+
-+ /**
-+ * Returns true if the content is valid.
-+ *
-+ * @return true if the content is valid else return false
-+ */
-+ public boolean isValid() {
-+ return !isEmpty();
-+ }
-+
-+ /**
-+ * Checks for null values.
-+ *
-+ * @param t reference type to check for null values
-+ * @return the reference type if not null or else throws a null pointer exception
-+ */
-+ protected static <T> T nullCheck(T t) {
-+ t.getClass();
-+ return t;
-+ }
-+
-+ /**
-+ * Returns true if the content ends with a newline character. Empty content
-+ * is considered as ending with new line.
-+ *
-+ * @param contentBuilder content to test for newline character at the end
-+ * @return true if the content ends with newline.
-+ */
-+ public boolean endsWithNewLine(StringBuilder contentBuilder) {
-+ return ((contentBuilder.length() == 0) ||
-+ (contentBuilder.substring(contentBuilder.length() - 1).equals("\n")));
-+ }
-+}
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/EnumConstantWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/EnumConstantWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/EnumConstantWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/EnumConstantWriter.java
-@@ -36,67 +36,80 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
-
- public interface EnumConstantWriter {
-
- /**
-- * Write the header for the enum constant documentation.
-+ * Get the enum constants details tree header.
- *
-- * @param classDoc the class that the enum constants belong to.
-- * @param header the header to write.
-+ * @param classDoc the class being documented
-+ * @param memberDetailsTree the content tree representing member details
-+ * @return content tree for the enum constants details header
- */
-- public void writeHeader(ClassDoc classDoc, String header);
-+ public Content getEnumConstantsDetailsTreeHeader(ClassDoc classDoc,
-+ Content memberDetailsTree);
-
- /**
-- * Write the enum constant header for the given enum constant.
-+ * Get the enum constants documentation tree header.
- *
-- * @param enumConstant the enum constant being documented.
-- * @param isFirst the flag to indicate whether or not the enum constant is
-- * the first to be documented.
-+ * @param enumConstant the enum constant being documented
-+ * @param enumConstantDetailsTree the content tree representing enum constant details
-+ * @return content tree for the enum constant documentation header
- */
-- public void writeEnumConstantHeader(FieldDoc enumConstant, boolean isFirst);
-+ public Content getEnumConstantsTreeHeader(FieldDoc enumConstant,
-+ Content enumConstantsDetailsTree);
-
- /**
-- * Write the signature for the given enum constant.
-+ * Get the signature for the given enum constant.
- *
-- * @param enumConstant the enum constant being documented.
-+ * @param enumConstant the enum constant being documented
-+ * @return content tree for the enum constant signature
- */
-- public void writeSignature(FieldDoc enumConstant);
-+ public Content getSignature(FieldDoc enumConstant);
-
- /**
-- * Write the deprecated output for the given enum constant.
-+ * Add the deprecated output for the given enum constant.
- *
-- * @param enumConstant the enum constant being documented.
-+ * @param enumConstant the enum constant being documented
-+ * @param enumConstantsTree content tree to which the deprecated information will be added
- */
-- public void writeDeprecated(FieldDoc enumConstant);
-+ public void addDeprecated(FieldDoc enumConstant, Content enumConstantsTree);
-
- /**
-- * Write the comments for the given enum constant.
-+ * Add the comments for the given enum constant.
- *
-- * @param enumConstant the enum constant being documented.
-+ * @param enumConstant the enum constant being documented
-+ * @param enumConstantsTree the content tree to which the comments will be added
- */
-- public void writeComments(FieldDoc enumConstant);
-+ public void addComments(FieldDoc enumConstant, Content enumConstantsTree);
-
- /**
-- * Write the tag output for the given enum constant.
-+ * Add the tags for the given enum constant.
- *
-- * @param enumConstant the enum constant being documented.
-+ * @param enumConstant the enum constant being documented
-+ * @param enumConstantsTree the content tree to which the tags will be added
- */
-- public void writeTags(FieldDoc enumConstant);
-+ public void addTags(FieldDoc enumConstant, Content enumConstantsTree);
-
- /**
-- * Write the enum constant footer.
-+ * Get the enum constants details tree.
-+ *
-+ * @param memberDetailsTree the content tree representing member details
-+ * @return content tree for the enum constant details
- */
-- public void writeEnumConstantFooter();
-+ public Content getEnumConstantsDetails(Content memberDetailsTree);
-
- /**
-- * Write the footer for the enum constant documentation.
-+ * Get the enum constants documentation.
- *
-- * @param classDoc the class that the enum constant belong to.
-+ * @param enumConstantsTree the content tree representing enum constants documentation
-+ * @param isLastContent true if the content to be added is the last content
-+ * @return content tree for the enum constants documentation
- */
-- public void writeFooter(ClassDoc classDoc);
-+ public Content getEnumConstants(Content enumConstantsTree, boolean isLastContent);
-
- /**
- * Close the writer.
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/FieldWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/FieldWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/FieldWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/FieldWriter.java
-@@ -36,67 +36,80 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
-
- public interface FieldWriter {
-
- /**
-- * Write the header for the field documentation.
-+ * Get the field details tree header.
- *
-- * @param classDoc the class that the fields belong to.
-- * @param header the header to write.
-+ * @param classDoc the class being documented
-+ * @param memberDetailsTree the content tree representing member details
-+ * @return content tree for the field details header
- */
-- public void writeHeader(ClassDoc classDoc, String header);
-+ public Content getFieldDetailsTreeHeader(ClassDoc classDoc,
-+ Content memberDetailsTree);
-
- /**
-- * Write the field header for the given field.
-+ * Get the field documentation tree header.
- *
-- * @param field the field being documented.
-- * @param isFirst the flag to indicate whether or not the field is the
-- * first to be documented.
-+ * @param field the constructor being documented
-+ * @param fieldDetailsTree the content tree representing field details
-+ * @return content tree for the field documentation header
- */
-- public void writeFieldHeader(FieldDoc field, boolean isFirst);
-+ public Content getFieldDocTreeHeader(FieldDoc field,
-+ Content fieldDetailsTree);
-
- /**
-- * Write the signature for the given field.
-+ * Get the signature for the given field.
- *
-- * @param field the field being documented.
-+ * @param field the field being documented
-+ * @return content tree for the field signature
- */
-- public void writeSignature(FieldDoc field);
-+ public Content getSignature(FieldDoc field);
-
- /**
-- * Write the deprecated output for the given field.
-+ * Add the deprecated output for the given field.
- *
-- * @param field the field being documented.
-+ * @param field the field being documented
-+ * @param fieldDocTree content tree to which the deprecated information will be added
- */
-- public void writeDeprecated(FieldDoc field);
-+ public void addDeprecated(FieldDoc field, Content fieldDocTree);
-
- /**
-- * Write the comments for the given field.
-+ * Add the comments for the given field.
- *
-- * @param field the field being documented.
-+ * @param field the field being documented
-+ * @param fieldDocTree the content tree to which the comments will be added
- */
-- public void writeComments(FieldDoc field);
-+ public void addComments(FieldDoc field, Content fieldDocTree);
-
- /**
-- * Write the tag output for the given field.
-+ * Add the tags for the given field.
- *
-- * @param field the field being documented.
-+ * @param field the field being documented
-+ * @param fieldDocTree the content tree to which the tags will be added
- */
-- public void writeTags(FieldDoc field);
-+ public void addTags(FieldDoc field, Content fieldDocTree);
-
- /**
-- * Write the field footer.
-+ * Get the field details tree.
-+ *
-+ * @param memberDetailsTree the content tree representing member details
-+ * @return content tree for the field details
- */
-- public void writeFieldFooter();
-+ public Content getFieldDetails(Content memberDetailsTree);
-
- /**
-- * Write the footer for the field documentation.
-+ * Get the field documentation.
- *
-- * @param classDoc the class that the fields belong to.
-+ * @param fieldDocTree the content tree representing field documentation
-+ * @param isLastContent true if the content to be added is the last content
-+ * @return content tree for the field documentation
- */
-- public void writeFooter(ClassDoc classDoc);
-+ public Content getFieldDoc(Content fieldDocTree, boolean isLastContent);
-
- /**
- * Close the writer.
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/MemberSummaryWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/MemberSummaryWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/MemberSummaryWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/MemberSummaryWriter.java
-@@ -26,6 +26,7 @@
- package com.sun.tools.doclets.internal.toolkit;
-
- import java.io.*;
-+import java.util.*;
- import com.sun.javadoc.*;
-
- /**
-@@ -36,61 +37,77 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
-
- public interface MemberSummaryWriter {
-
- /**
-- * Write the member summary header for the given class.
-+ * Get the member summary header for the given class.
- *
-- * @param classDoc the class the summary belongs to.
-+ * @param classDoc the class the summary belongs to
-+ * @param memberSummaryTree the content tree to which the member summary will be added
-+ * @return a content tree for the member summary header
- */
-- public void writeMemberSummaryHeader(ClassDoc classDoc);
-+ public Content getMemberSummaryHeader(ClassDoc classDoc,
-+ Content memberSummaryTree);
-
- /**
-- * Write the member summary for the given class and member.
-+ * Get the summary table for the given class.
- *
-- * @param classDoc the class the summary belongs to.
-- * @param member the member that I am summarizing.
-- * @param firstSentenceTags the tags for the sentence being documented.
-- * @param isFirst true if this is the first member in the list.
-- * @param isLast true if this the last member being documented.
-+ * @param classDoc the class the summary table belongs to
-+ * @return a content tree for the member summary table
- */
-- public void writeMemberSummary(ClassDoc classDoc, ProgramElementDoc member,
-- Tag[] firstSentenceTags, boolean isFirst, boolean isLast);
-+ public Content getSummaryTableTree(ClassDoc classDoc);
-
- /**
-- * Write the member summary footer for the given class.
-+ * Add the member summary for the given class and member.
- *
-- * @param classDoc the class the summary belongs to.
-+ * @param classDoc the class the summary belongs to
-+ * @param member the member that is documented
-+ * @param firstSentenceTags the tags for the sentence being documented
-+ * @param tableTree the content treeto which the information will be added
-+ * @param counter the counter for determing style for the table row
- */
-- public void writeMemberSummaryFooter(ClassDoc classDoc);
-+ public void addMemberSummary(ClassDoc classDoc, ProgramElementDoc member,
-+ Tag[] firstSentenceTags, Content tableTree, int counter);
-
- /**
-- * Write the inherited member summary header for the given class.
-+ * Get the inherited member summary header for the given class.
- *
-- * @param classDoc the class the summary belongs to.
-+ * @param classDoc the class the summary belongs to
-+ * @return a content tree containing the inherited summary header
- */
-- public void writeInheritedMemberSummaryHeader(ClassDoc classDoc);
-+ public Content getInheritedSummaryHeader(ClassDoc classDoc);
-
- /**
-- * Write the inherited member summary for the given class and member.
-+ * Add the inherited member summary for the given class and member.
- *
-- * @param classDoc the class the inherited member belongs to.
-- * @param member the inherited member that I am summarizing.
-- * @param isFirst true if this is the first member in the list.
-- * @param isLast true if this is the last member in the list.
-+ * @param classDoc the class the inherited member belongs to
-+ * @param member the inherited member that is being documented
-+ * @param isFirst true if this is the first member in the list
-+ * @param isLast true if this is the last member in the list
-+ * @param linksTree the content tree to which the links will be added
- */
-- public void writeInheritedMemberSummary(ClassDoc classDoc,
-- ProgramElementDoc member, boolean isFirst, boolean isLast);
-+ public void addInheritedMemberSummary(ClassDoc classDoc,
-+ ProgramElementDoc member, boolean isFirst, boolean isLast,
-+ Content linksTree);
-
- /**
-- * Write the inherited member summary footer for the given class.
-+ * Get inherited summary links.
- *
-- * @param classDoc the class the summary belongs to.
-+ * @return a content tree conatining the inherited summary links
- */
-- public void writeInheritedMemberSummaryFooter(ClassDoc classDoc);
-+ public Content getInheritedSummaryLinksTree();
-+
-+ /**
-+ * Get the member tree.
-+ *
-+ * @param memberTree the content tree representating the member
-+ * @return a content tree for the member
-+ */
-+ public Content getMemberTree(Content memberTree);
-
- /**
- * Close the writer.
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/MethodWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/MethodWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/MethodWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/MethodWriter.java
-@@ -36,68 +36,81 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
-
- public interface MethodWriter {
-
- /**
-- * Write the header for the method documentation.
-+ * Get the method details tree header.
- *
-- * @param classDoc the class that the methods belong to.
-- * @param header the header to write.
-+ * @param classDoc the class being documented
-+ * @param memberDetailsTree the content tree representing member details
-+ * @return content tree for the method details header
- */
-- public void writeHeader(ClassDoc classDoc, String header);
-+ public Content getMethodDetailsTreeHeader(ClassDoc classDoc,
-+ Content memberDetailsTree);
-
- /**
-- * Write the method header for the given method.
-+ * Get the method documentation tree header.
- *
-- * @param method the method being documented.
-- * @param isFirst the flag to indicate whether or not the method is the
-- * first to be documented.
-+ * @param method the method being documented
-+ * @param methodDetailsTree the content tree representing method details
-+ * @return content tree for the method documentation header
- */
-- public void writeMethodHeader(MethodDoc method, boolean isFirst);
-+ public Content getMethodDocTreeHeader(MethodDoc method,
-+ Content methodDetailsTree);
-
- /**
-- * Write the signature for the given method.
-+ * Get the signature for the given method.
- *
-- * @param method the method being documented.
-+ * @param method the method being documented
-+ * @return content tree for the method signature
- */
-- public void writeSignature(MethodDoc method);
-+ public Content getSignature(MethodDoc method);
-
- /**
-- * Write the deprecated output for the given method.
-+ * Add the deprecated output for the given method.
- *
-- * @param method the method being documented.
-+ * @param method the method being documented
-+ * @param methodDocTree content tree to which the deprecated information will be added
- */
-- public void writeDeprecated(MethodDoc method);
-+ public void addDeprecated(MethodDoc method, Content methodDocTree);
-
- /**
-- * Write the comments for the given method.
-+ * Add the comments for the given method.
- *
-- * @param holder the holder type (not erasure) of the method.
-- * @param method the method being documented.
-+ * @param holder the holder type (not erasure) of the method
-+ * @param method the method being documented
-+ * @param methodDocTree the content tree to which the comments will be added
- */
-- public void writeComments(Type holder, MethodDoc method);
-+ public void addComments(Type holder, MethodDoc method, Content methodDocTree);
-
- /**
-- * Write the tag output for the given method.
-+ * Add the tags for the given method.
- *
-- * @param method the method being documented.
-+ * @param method the method being documented
-+ * @param methodDocTree the content tree to which the tags will be added
- */
-- public void writeTags(MethodDoc method);
-+ public void addTags(MethodDoc method, Content methodDocTree);
-
- /**
-- * Write the method footer.
-+ * Get the method details tree.
-+ *
-+ * @param methodDetailsTree the content tree representing method details
-+ * @return content tree for the method details
- */
-- public void writeMethodFooter();
-+ public Content getMethodDetails(Content methodDetailsTree);
-
- /**
-- * Write the footer for the method documentation.
-+ * Get the method documentation.
- *
-- * @param classDoc the class that the methods belong to.
-+ * @param methodDocTree the content tree representing method documentation
-+ * @param isLastContent true if the content to be added is the last content
-+ * @return content tree for the method documentation
- */
-- public void writeFooter(ClassDoc classDoc);
-+ public Content getMethodDoc(Content methodDocTree, boolean isLastContent);
-
- /**
- * Close the writer.
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/NestedClassWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/NestedClassWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/NestedClassWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/NestedClassWriter.java
-@@ -26,7 +26,6 @@
- package com.sun.tools.doclets.internal.toolkit;
-
- import java.io.*;
--import com.sun.javadoc.*;
-
- /**
- * The interface for writing class output.
-@@ -36,59 +35,13 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
-
- public interface NestedClassWriter {
-
- /**
-- * Write the classes summary header for the given class.
-- *
-- * @param nestedClass the class the summary belongs to.
-- */
-- public void writeNestedClassSummaryHeader(ClassDoc nestedClass);
--
-- /**
-- * Write the class summary for the given class and class.
-- *
-- * @param classDoc the class the summary belongs to.
-- * @param nestedClass the nested class that I am summarizing.
-- */
-- public void writeNestedClassSummary(ClassDoc classDoc, ClassDoc nestedClass);
--
-- /**
-- * Write the classes summary footer for the given class.
-- *
-- * @param nestedClass the class the summary belongs to.
-- */
-- public void writeNestedClassSummaryFooter(ClassDoc nestedClass);
--
-- /**
-- * Write the inherited classes summary header for the given class.
-- *
-- * @param nestedClass the class the summary belongs to.
-- */
-- public void writeInheritedNestedClassSummaryHeader(ClassDoc nestedClass);
--
-- /**
-- * Write the inherited nested class summary for the given class and nested
-- * class.
-- *
-- * @param classDoc the class the inherited nested class belongs to.
-- * @param nestedClass the inherited nested class that I am summarizing.
-- * @param isFirst true if this is the first member in the list.
-- */
-- public void writeInheritedNestedClassSummary(ClassDoc classDoc,
-- ClassDoc nestedClass, boolean isFirst);
--
-- /**
-- * Write the inherited classes summary footer for the given class.
-- *
-- * @param nestedClass the class the summary belongs to.
-- */
-- public void writeInheritedNestedClassSummaryFooter(ClassDoc nestedClass);
--
-- /**
- * Close the writer.
- */
- public void close() throws IOException;
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/PackageSummaryWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/PackageSummaryWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/PackageSummaryWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/PackageSummaryWriter.java
-@@ -36,6 +36,7 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
-
-@@ -49,45 +50,70 @@
- public abstract String getOutputFileName();
-
- /**
-- * Write the header for the package summary.
-+ * Get the header for the summary.
-+ *
-+ * @param heading Package name.
-+ * @return the header to be added to the content tree
- */
-- public abstract void writeSummaryHeader();
-+ public abstract Content getPackageHeader(String heading);
-
- /**
-- * Write the footer for the package summary.
-+ * Get the header for the package content.
-+ *
-+ * @return a content tree for the package content header
- */
-- public abstract void writeSummaryFooter();
-+ public abstract Content getContentHeader();
-
- /**
-- * Write the table of classes in this package.
-+ * Get the header for the package summary.
-+ *
-+ * @return a content tree with the package summary header
-+ */
-+ public abstract Content getSummaryHeader();
-+
-+ /**
-+ * Adds the table of classes to the documentation tree.
- *
- * @param classes the array of classes to document.
- * @param label the label for this table.
-+ * @param tableSummary the summary string for the table
-+ * @param tableHeader array of table headers
-+ * @param summaryContentTree the content tree to which the summaries will be added
- */
-- public abstract void writeClassesSummary(ClassDoc[] classes, String label, String tableSummary, String[] tableHeader);
-+ public abstract void addClassesSummary(ClassDoc[] classes, String label,
-+ String tableSummary, String[] tableHeader, Content summaryContentTree);
-
- /**
-- * Write the header for the summary.
-+ * Adds the package description from the "packages.html" file to the documentation
-+ * tree.
- *
-- * @param heading Package name.
-+ * @param packageContentTree the content tree to which the package description
-+ * will be added
- */
-- public abstract void writePackageHeader(String heading);
-+ public abstract void addPackageDescription(Content packageContentTree);
-
- /**
-- * Print the package description from the "packages.html" file.
-+ * Adds the tag information from the "packages.html" file to the documentation
-+ * tree.
-+ *
-+ * @param packageContentTree the content tree to which the package tags will
-+ * be added
- */
-- public abstract void writePackageDescription();
-+ public abstract void addPackageTags(Content packageContentTree);
-
- /**
-- * Print the tag information from the "packages.html" file.
-+ * Adds the footer to the documentation tree.
-+ *
-+ * @param contentTree the tree to which the footer will be added
- */
-- public abstract void writePackageTags();
-+ public abstract void addPackageFooter(Content contentTree);
-
- /**
-- * Write the footer for the summary.
-+ * Print the package summary document.
- *
-+ * @param contentTree the content tree that will be printed
- */
-- public abstract void writePackageFooter();
-+ public abstract void printDocument(Content contentTree);
-
- /**
- * Close the writer.
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java
-@@ -43,33 +43,73 @@
- public interface SerializedFormWriter {
-
- /**
-- * Write the given header.
-+ * Get the header.
- *
- * @param header the header to write.
-+ * @return the header content tree
- */
-- public void writeHeader(String header);
-+ public Content getHeader(String header);
-
- /**
-- * Write the given package header.
-+ * Get the serialized form summaries header.
- *
-- * @param packageName the package header to write.
-+ * @return the serialized form summary header tree
- */
-- public void writePackageHeader(String packageName);
-+ public Content getSerializedSummariesHeader();
-
- /**
-- * Write the heading for the serializable class.
-+ * Get the package serialized form header.
- *
-- * @param classDoc the class being processed.
-+ * @return the package serialized form header tree
- */
-- public void writeClassHeader(ClassDoc classDoc);
-+ public Content getPackageSerializedHeader();
-
- /**
-- * Write the serial UID info.
-+ * Get the given package header.
-+ *
-+ * @param packageName the package header to write
-+ * @return a content tree for the package header
-+ */
-+ public Content getPackageHeader(String packageName);
-+
-+ /**
-+ * Get the serialized class header.
-+ *
-+ * @return a content tree for the serialized class header
-+ */
-+ public Content getClassSerializedHeader();
-+
-+ /**
-+ * Get the heading for the serializable class.
-+ *
-+ * @param classDoc the class being processed
-+ * @return a content tree for the class heading
-+ */
-+ public Content getClassHeader(ClassDoc classDoc);
-+
-+ /**
-+ * Get the serial UID info header.
-+ *
-+ * @return a content tree for the serial uid info header
-+ */
-+ public Content getSerialUIDInfoHeader();
-+
-+ /**
-+ * Adds the serial UID info.
- *
- * @param header the header that will show up before the UID.
- * @param serialUID the serial UID to print.
-+ * @param serialUidTree the serial UID tree to which the content will be added.
- */
-- public void writeSerialUIDInfo(String header, String serialUID);
-+ public void addSerialUIDInfo(String header, String serialUID,
-+ Content serialUidTree);
-+
-+ /**
-+ * Get the class serialize content header.
-+ *
-+ * @return a content tree for the class serialize content header
-+ */
-+ public Content getClassContentHeader();
-
- /**
- * Return an instance of a SerialFieldWriter.
-@@ -91,9 +131,26 @@
- public abstract void close() throws IOException;
-
- /**
-- * Write the footer.
-+ * Get the serialized content.
-+ *
-+ * @param serializedTreeContent content for serialized data
-+ * @return a content tree for serialized information
- */
-- public void writeFooter();
-+ public Content getSerializedContent(Content serializedTreeContent);
-+
-+ /**
-+ * Add the footer.
-+ *
-+ * @param serializedTree the serialized tree to be added
-+ */
-+ public void addFooter(Content serializedTree);
-+
-+ /**
-+ * Print the serialized form document.
-+ *
-+ * @param serializedTree the content tree that will be printed
-+ */
-+ public abstract void printDocument(Content serializedTree);
-
- /**
- * Write the serialized form for a given field.
-@@ -101,56 +158,73 @@
- public interface SerialFieldWriter {
-
- /**
-- * Write the given heading.
-+ * Get the serializable field header.
-+ *
-+ * @return serialized fields header content tree
-+ */
-+ public Content getSerializableFieldsHeader();
-+
-+ /**
-+ * Get the field content header.
-+ *
-+ * @param isLastContent true if this is the last content to be documented
-+ * @return fields header content tree
-+ */
-+ public Content getFieldsContentHeader(boolean isLastContent);
-+
-+ /**
-+ * Get the fields content.
- *
- * @param heading the heading to write.
-+ * @param contentTree content tree to which the heading will be added
-+ * @return serializable fields content tree
- */
-- public void writeHeader(String heading);
-+ public Content getSerializableFields(String heading, Content contentTree);
-
- /**
-- * Write the deprecated information for this member.
-+ * Adds the deprecated information for this member.
- *
- * @param field the field to document.
-+ * @param contentTree content tree to which the deprecated information will be added
- */
-- public void writeMemberDeprecatedInfo(FieldDoc field);
-+ public void addMemberDeprecatedInfo(FieldDoc field, Content contentTree);
-
- /**
-- * Write the description text for this member.
-+ * Adds the description text for this member.
- *
- * @param field the field to document.
-+ * @param contentTree content tree to which the member description will be added
- */
-- public void writeMemberDescription(FieldDoc field);
-+ public void addMemberDescription(FieldDoc field, Content contentTree);
-
- /**
-- * Write the description text for this member represented by the tag.
-+ * Adds the description text for this member represented by the tag.
- *
- * @param serialFieldTag the field to document (represented by tag).
-+ * @param contentTree content tree to which the member description will be added
- */
-- public void writeMemberDescription(SerialFieldTag serialFieldTag);
-+ public void addMemberDescription(SerialFieldTag serialFieldTag, Content contentTree);
-
- /**
-- * Write the tag information for this member.
-+ * Adds the tag information for this member.
- *
- * @param field the field to document.
-+ * @param contentTree content tree to which the member tags will be added
- */
-- public void writeMemberTags(FieldDoc field);
-+ public void addMemberTags(FieldDoc field, Content contentTree);
-
- /**
-- * Write the member header.
-+ * Adds the member header.
- *
- * @param fieldType the type of the field.
- * @param fieldTypeStr the type of the field in string format. We will
- * print this out if we can't link to the type.
- * @param fieldDimensions the dimensions of the field.
- * @param fieldName the name of the field.
-+ * @param contentTree content tree to which the member header will be added
- */
-- public void writeMemberHeader(ClassDoc fieldType, String fieldTypeStr,
-- String fieldDimensions, String fieldName);
--
-- /**
-- * Write the member footer.
-- */
-- public void writeMemberFooter();
-+ public void addMemberHeader(ClassDoc fieldType, String fieldTypeStr,
-+ String fieldDimensions, String fieldName, Content contentTree);
-
- /**
- * Check to see if overview details should be printed. If
-@@ -162,13 +236,6 @@
- * @return true if overview details need to be printed
- */
- public boolean shouldPrintOverview(FieldDoc field);
--
-- /**
-- * Write the footer.
-- *
-- * @param heading the heading that was written.
-- */
-- public void writeFooter (String heading);
- }
-
- /**
-@@ -177,44 +244,70 @@
- public interface SerialMethodWriter {
-
- /**
-+ * Get the serializable method header.
-+ *
-+ * @return serializable methods content tree
-+ */
-+ public Content getSerializableMethodsHeader();
-+
-+ /**
-+ * Get the method content header.
-+ *
-+ * @param isLastContent true if this is the last content to be documented
-+ * @return methods content tree
-+ */
-+ public Content getMethodsContentHeader(boolean isLastContent);
-+
-+ /**
- * Write the given heading.
- *
-- * @param heading the heading to write.
-+ * @param heading the heading to write
-+ * @param serializableMethodTree content tree which will be added
-+ * @return serializable methods content tree
- */
-- public void writeHeader(String heading);
-+ public Content getSerializableMethods(String heading, Content serializableMethodTree);
-
- /**
- * Write a warning that no serializable methods exist.
- *
-- * @param msg the warning to print.
-+ * @param msg the warning to print
-+ * @return no customization message tree
- */
-- public void writeNoCustomizationMsg(String msg);
-+ public Content getNoCustomizationMsg(String msg);
-
- /**
-- * Write the header.
-+ * Adds the header.
- *
-- * @param member the member to write the header for.
-+ * @param member the member to write the header for
-+ * @param methodsContentTree content tree to which the header will be added
- */
-- public void writeMemberHeader(MethodDoc member);
-+ public void addMemberHeader(MethodDoc member, Content methodsContentTree);
-
- /**
-- * Write the footer.
-+ * Adds the deprecated information for this member.
-+ *
-+ * @param member the member to write the deprecated information for
-+ * @param methodsContentTree content tree to which the deprecated
-+ * information will be added
- */
-- public void writeMemberFooter();
-+ public void addDeprecatedMemberInfo(MethodDoc member, Content methodsContentTree);
-
- /**
-- * Write the deprecated information for this member.
-+ * Adds the description for this member.
-+ *
-+ * @param member the member to write the information for
-+ * @param methodsContentTree content tree to which the member
-+ * information will be added
- */
-- public void writeDeprecatedMemberInfo(MethodDoc member);
-+ public void addMemberDescription(MethodDoc member, Content methodsContentTree);
-
- /**
-- * Write the description for this member.
-+ * Adds the tag information for this member.
-+ *
-+ * @param member the member to write the tags information for
-+ * @param methodsContentTree content tree to which the tags
-+ * information will be added
- */
-- public void writeMemberDescription(MethodDoc member);
--
-- /**
-- * Write the tag information for this member.
-- */
-- public void writeMemberTags(MethodDoc member);
-+ public void addMemberTags(MethodDoc member, Content methodsContentTree);
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractBuilder.java
-@@ -95,13 +95,14 @@
- * Build the documentation, as specified by the given XML element.
- *
- * @param node the XML element that specifies which component to document.
-+ * @param contentTree content tree to which the documentation will be added
- */
- protected void build(XMLNode node) {
- String component = node.name;
- try {
- invokeMethod("build" + component,
-- new Class<?>[] { XMLNode.class },
-- new Object[] { node });
-+ new Class<?>[]{XMLNode.class, Content.class},
-+ new Object[]{node, contentTree});
- } catch (NoSuchMethodException e) {
- e.printStackTrace();
- configuration.root.printError("Unknown element: " + component);
-@@ -111,8 +112,8 @@
- } catch (Exception e) {
- e.printStackTrace();
- configuration.root.printError("Exception " +
-- e.getClass().getName() +
-- " thrown while processing element: " + component);
-+ e.getClass().getName() +
-+ " thrown while processing element: " + component);
- throw new DocletAbortException();
- }
- }
-@@ -121,10 +122,11 @@
- * Build the documentation, as specified by the children of the given XML element.
- *
- * @param node the XML element that specifies which components to document.
-+ * @param contentTree content tree to which the documentation will be added
- */
-- protected void buildChildren(XMLNode node) {
-- for (XMLNode child: node.children)
-- build(child);
-+ protected void buildChildren(XMLNode node, Content contentTree) {
-+ for (XMLNode child : node.children)
-+ build(child, contentTree);
- }
-
- /**
-@@ -140,8 +142,7 @@
- Object[] params)
- throws Exception {
- if (DEBUG) {
-- configuration.root.printError("DEBUG: " + this.getClass().getName()
-- + "." + methodName);
-+ configuration.root.printError("DEBUG: " + this.getClass().getName() + "." + methodName);
- }
- Method method = this.getClass().getMethod(methodName, paramClasses);
- method.invoke(this, params);
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractMemberBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractMemberBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractMemberBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractMemberBuilder.java
-@@ -27,6 +27,7 @@
-
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
-+import java.util.*;
-
- /**
- * The superclass for all member builders. Member builders are only executed
-@@ -66,12 +67,13 @@
- /**
- * Build the sub component if there is anything to document.
- *
-- * @param elements {@inheritDoc}
-+ * @param node the XML element that specifies which components to document.
-+ * @param contentTree content tree to which the documentation will be added
- */
- @Override
-- public void build(XMLNode node) {
-+ public void build(XMLNode node, Content contentTree) {
- if (hasMembersToDocument()) {
-- super.build(node);
-+ super.build(node, contentTree);
- }
- }
-
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeBuilder.java
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
-@@ -25,11 +25,11 @@
-
- package com.sun.tools.doclets.internal.toolkit.builders;
-
-+import java.io.*;
-+import java.util.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.javadoc.*;
--import java.io.*;
--import java.util.*;
-
- /**
- * Builds the summary for a given annotation type.
-@@ -39,6 +39,7 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
- public class AnnotationTypeBuilder extends AbstractBuilder {
-@@ -59,6 +60,11 @@
- private AnnotationTypeWriter writer;
-
- /**
-+ * The content tree for the annotation documentation.
-+ */
-+ private Content contentTree;
-+
-+ /**
- * Construct a new ClassBuilder.
- *
- * @param configuration the current configuration of the
-@@ -83,7 +89,7 @@
- builder.annotationTypeDoc = annotationTypeDoc;
- builder.writer = writer;
- if(containingPackagesSeen == null) {
-- containingPackagesSeen = new HashSet();
-+ containingPackagesSeen = new HashSet<String>();
- }
- return builder;
- }
-@@ -92,7 +98,7 @@
- * {@inheritDoc}
- */
- public void build() throws IOException {
-- build(LayoutParser.getInstance(configuration).parseXML(ROOT));
-+ build(LayoutParser.getInstance(configuration).parseXML(ROOT), contentTree);
- }
-
- /**
-@@ -102,18 +108,24 @@
- return ROOT;
- }
-
-- /**
-- * Handles the &lt;AnnotationTypeDoc> tag.
-+ /**
-+ * Build the annotation type documentation.
- *
-- * @param elements the XML elements that specify how to document a class.
-+ * @param node the XML element that specifies which components to document
-+ * @param contentTree the content tree to which the documentation will be added
- */
-- public void buildAnnotationTypeDoc(XMLNode node) throws Exception {
-- buildChildren(node);
-- writer.close();
-- copyDocFiles();
-+ public void buildAnnotationTypeDoc(XMLNode node, Content contentTree) throws Exception {
-+ contentTree = writer.getHeader(configuration.getText("doclet.AnnotationType") +
-+ " " + annotationTypeDoc.name());
-+ Content annotationContentTree = writer.getAnnotationContentHeader();
-+ buildChildren(node, annotationContentTree);
-+ contentTree.addContent(annotationContentTree);
-+ writer.addFooter(contentTree);
-+ writer.printDocument(contentTree);
-+ writer.close();
-+ copyDocFiles();
- }
-
--
- /**
- * Copy the doc files for the current ClassDoc if necessary.
- */
-@@ -137,86 +149,112 @@
- }
-
- /**
-- * Build the header of the page.
-+ * Build the annotation information tree documentation.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param annotationContentTree the content tree to which the documentation will be added
- */
-- public void buildAnnotationTypeHeader(XMLNode node) {
-- writer.writeHeader(configuration.getText("doclet.AnnotationType") +
-- " " + annotationTypeDoc.name());
-+ public void buildAnnotationTypeInfo(XMLNode node, Content annotationContentTree) {
-+ Content annotationInfoTree = writer.getAnnotationInfoTreeHeader();
-+ buildChildren(node, annotationInfoTree);
-+ annotationContentTree.addContent(writer.getAnnotationInfo(annotationInfoTree));
- }
-
- /**
-- * If this class is deprecated, print the appropriate information.
-+ * If this annotation is deprecated, build the appropriate information.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param annotationInfoTree the content tree to which the documentation will be added
- */
-- public void buildDeprecationInfo (XMLNode node) {
-- writer.writeAnnotationTypeDeprecationInfo();
-+ public void buildDeprecationInfo (XMLNode node, Content annotationInfoTree) {
-+ writer.addAnnotationTypeDeprecationInfo(annotationInfoTree);
- }
-
- /**
- * Build the signature of the current annotation type.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param annotationInfoTree the content tree to which the documentation will be added
- */
-- public void buildAnnotationTypeSignature(XMLNode node) {
-+ public void buildAnnotationTypeSignature(XMLNode node, Content annotationInfoTree) {
- StringBuffer modifiers = new StringBuffer(
-- annotationTypeDoc.modifiers() + " ");
-- writer.writeAnnotationTypeSignature(
-- Util.replaceText(
-- modifiers.toString(), "interface", "@interface"));
-+ annotationTypeDoc.modifiers() + " ");
-+ writer.addAnnotationTypeSignature(Util.replaceText(
-+ modifiers.toString(), "interface", "@interface"), annotationInfoTree);
- }
-
- /**
-- * Build the class description.
-+ * Build the annotation type description.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param annotationInfoTree the content tree to which the documentation will be added
- */
-- public void buildAnnotationTypeDescription(XMLNode node) {
-- writer.writeAnnotationTypeDescription();
-+ public void buildAnnotationTypeDescription(XMLNode node, Content annotationInfoTree) {
-+ writer.addAnnotationTypeDescription(annotationInfoTree);
- }
-
- /**
-- * Build the tag information for the current class.
-+ * Build the tag information for the current annotation type.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param annotationInfoTree the content tree to which the documentation will be added
- */
-- public void buildAnnotationTypeTagInfo(XMLNode node) {
-- writer.writeAnnotationTypeTagInfo();
-+ public void buildAnnotationTypeTagInfo(XMLNode node, Content annotationInfoTree) {
-+ writer.addAnnotationTypeTagInfo(annotationInfoTree);
- }
-
- /**
-- * Build the contents of the page.
-+ * Build the member summary contents of the page.
- *
-- * @param elements the XML elements that specify how a member summary is
-- * documented.
-+ * @param node the XML element that specifies which components to document
-+ * @param annotationContentTree the content tree to which the documentation will be added
- */
-- public void buildMemberSummary(XMLNode node) throws Exception {
-+ public void buildMemberSummary(XMLNode node, Content annotationContentTree)
-+ throws Exception {
-+ Content memberSummaryTree = writer.getMemberTreeHeader();
- configuration.getBuilderFactory().
-- getMemberSummaryBuilder(writer).buildChildren(node);
-- writer.completeMemberSummaryBuild();
-+ getMemberSummaryBuilder(writer).buildChildren(node, memberSummaryTree);
-+ annotationContentTree.addContent(writer.getMemberSummaryTree(memberSummaryTree));
-+ }
-+
-+ /**
-+ * Build the member details contents of the page.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param annotationContentTree the content tree to which the documentation will be added
-+ */
-+ public void buildAnnotationTypeMemberDetails(XMLNode node, Content annotationContentTree) {
-+ Content memberDetailsTree = writer.getMemberTreeHeader();
-+ buildChildren(node, memberDetailsTree);
-+ if (memberDetailsTree.isValid()) {
-+ Content memberDetails = writer.getMemberTreeHeader();
-+ writer.addAnnotationDetailsMarker(memberDetails);
-+ memberDetails.addContent(writer.getMemberTree(memberDetailsTree));
-+ annotationContentTree.addContent(writer.getMemberDetailsTree(memberDetails));
-+ }
- }
-
- /**
- * Build the annotation type optional member documentation.
- *
-- * @param elements the XML elements that specify how a annotation type
-- * members are documented.
-+ * @param node the XML element that specifies which components to document
-+ * @param memberDetailsTree the content tree to which the documentation will be added
- */
-- public void buildAnnotationTypeOptionalMemberDetails(XMLNode node)
-- throws Exception {
-+ public void buildAnnotationTypeOptionalMemberDetails(XMLNode node, Content memberDetailsTree)
-+ throws Exception {
- configuration.getBuilderFactory().
-- getAnnotationTypeOptionalMemberBuilder(writer).buildChildren(node);
-+ getAnnotationTypeOptionalMemberBuilder(writer).buildChildren(node, memberDetailsTree);
- }
-
- /**
- * Build the annotation type required member documentation.
- *
-- * @param elements the XML elements that specify how a annotation type
-- * members are documented.
-+ * @param node the XML element that specifies which components to document
-+ * @param memberDetailsTree the content tree to which the documentation will be added
- */
-- public void buildAnnotationTypeRequiredMemberDetails(XMLNode node)
-- throws Exception {
-+ public void buildAnnotationTypeRequiredMemberDetails(XMLNode node, Content memberDetailsTree)
-+ throws Exception {
- configuration.getBuilderFactory().
-- getAnnotationTypeRequiredMemberBuilder(writer).buildChildren(node);
-- }
--
--
-- /**
-- * Build the footer of the page.
-- */
-- public void buildAnnotationTypeFooter(XMLNode node) {
-- writer.writeFooter();
-+ getAnnotationTypeRequiredMemberBuilder(writer).buildChildren(node, memberDetailsTree);
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeOptionalMemberBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeOptionalMemberBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeOptionalMemberBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeOptionalMemberBuilder.java
-@@ -25,11 +25,10 @@
-
- package com.sun.tools.doclets.internal.toolkit.builders;
-
--
-+import java.util.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.javadoc.*;
--import java.util.*;
-
- /**
- * Builds documentation for optional annotation type members.
-@@ -39,6 +38,7 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
- public class AnnotationTypeOptionalMemberBuilder extends
-@@ -90,27 +90,25 @@
- }
-
- /**
-- * Build the member documentation.
-+ * Build the annotation type optional member documentation.
- *
-- * @param elements the XML elements that specify how to construct this
-- * documentation.
-+ * @param node the XML element that specifies which components to document
-+ * @param memberDetailsTree the content tree to which the documentation will be added
- */
-- public void buildAnnotationTypeOptionalMember(XMLNode node) {
-- if (writer == null) {
-- return;
-- }
-- for (currentMemberIndex = 0; currentMemberIndex < members.size();
-- currentMemberIndex++) {
-- buildChildren(node);
-- }
-+ public void buildAnnotationTypeOptionalMember(XMLNode node, Content memberDetailsTree) {
-+ buildAnnotationTypeMember(node, memberDetailsTree);
- }
-
- /**
-- * Document the default value for this optional member.
-+ * Build the default value for this optional member.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param annotationDocTree the content tree to which the documentation will be added
- */
-- public void buildDefaultValueInfo(XMLNode node) {
-- ((AnnotationTypeOptionalMemberWriter) writer).writeDefaultValueInfo(
-- (MemberDoc) members.get(currentMemberIndex));
-+ public void buildDefaultValueInfo(XMLNode node, Content annotationDocTree) {
-+ ((AnnotationTypeOptionalMemberWriter) writer).addDefaultValueInfo(
-+ (MemberDoc) members.get(currentMemberIndex),
-+ annotationDocTree);
- }
-
- /**
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeRequiredMemberBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeRequiredMemberBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeRequiredMemberBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeRequiredMemberBuilder.java
-@@ -25,11 +25,10 @@
-
- package com.sun.tools.doclets.internal.toolkit.builders;
-
--
-+import java.util.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.javadoc.*;
--import java.util.*;
-
- /**
- * Builds documentation for required annotation type members.
-@@ -39,6 +38,7 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
- public class AnnotationTypeRequiredMemberBuilder extends AbstractMemberBuilder {
-@@ -141,81 +141,86 @@
- }
-
- /**
-+ * Build the annotation type required member documentation.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param memberDetailsTree the content tree to which the documentation will be added
-+ */
-+ public void buildAnnotationTypeRequiredMember(XMLNode node, Content memberDetailsTree) {
-+ buildAnnotationTypeMember(node, memberDetailsTree);
-+ }
-+
-+ /**
- * Build the member documentation.
- *
-- * @param elements the XML elements that specify how to construct this
-- * documentation.
-+ * @param node the XML element that specifies which components to document
-+ * @param memberDetailsTree the content tree to which the documentation will be added
- */
-- public void buildAnnotationTypeRequiredMember(XMLNode node) {
-+ public void buildAnnotationTypeMember(XMLNode node, Content memberDetailsTree) {
- if (writer == null) {
- return;
- }
-- for (currentMemberIndex = 0; currentMemberIndex < members.size();
-+ int size = members.size();
-+ if (size > 0) {
-+ writer.addAnnotationDetailsTreeHeader(
-+ classDoc, memberDetailsTree);
-+ for (currentMemberIndex = 0; currentMemberIndex < size;
- currentMemberIndex++) {
-- buildChildren(node);
-- }
-- }
--
-- /**
-- * Build the overall header.
-- */
-- public void buildHeader(XMLNode node) {
-- writer.writeHeader(classDoc,
-- configuration.getText("doclet.Annotation_Type_Member_Detail"));
-- }
--
-- /**
-- * Build the header for the individual members.
-- */
-- public void buildMemberHeader(XMLNode node) {
-- writer.writeMemberHeader((MemberDoc) members.get(
-- currentMemberIndex),
-- currentMemberIndex == 0);
-+ Content annotationDocTree = writer.getAnnotationDocTreeHeader(
-+ (MemberDoc) members.get(currentMemberIndex),
-+ memberDetailsTree);
-+ buildChildren(node, annotationDocTree);
-+ memberDetailsTree.addContent(writer.getAnnotationDoc(
-+ annotationDocTree, (currentMemberIndex == size - 1)));
-+ }
-+ }
- }
-
- /**
- * Build the signature.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param annotationDocTree the content tree to which the documentation will be added
- */
-- public void buildSignature(XMLNode node) {
-- writer.writeSignature((MemberDoc) members.get(currentMemberIndex));
-+ public void buildSignature(XMLNode node, Content annotationDocTree) {
-+ annotationDocTree.addContent(
-+ writer.getSignature((MemberDoc) members.get(currentMemberIndex)));
- }
-
- /**
- * Build the deprecation information.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param annotationDocTree the content tree to which the documentation will be added
- */
-- public void buildDeprecationInfo(XMLNode node) {
-- writer.writeDeprecated((MemberDoc) members.get(currentMemberIndex));
-+ public void buildDeprecationInfo(XMLNode node, Content annotationDocTree) {
-+ writer.addDeprecated((MemberDoc) members.get(currentMemberIndex),
-+ annotationDocTree);
- }
-
- /**
- * Build the comments for the member. Do nothing if
- * {@link Configuration#nocomment} is set to true.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param annotationDocTree the content tree to which the documentation will be added
- */
-- public void buildMemberComments(XMLNode node) {
-+ public void buildMemberComments(XMLNode node, Content annotationDocTree) {
- if(! configuration.nocomment){
-- writer.writeComments((MemberDoc) members.get(currentMemberIndex));
-+ writer.addComments((MemberDoc) members.get(currentMemberIndex),
-+ annotationDocTree);
- }
- }
-
- /**
- * Build the tag information.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param annotationDocTree the content tree to which the documentation will be added
- */
-- public void buildTagInfo(XMLNode node) {
-- writer.writeTags((MemberDoc) members.get(currentMemberIndex));
-- }
--
-- /**
-- * Build the footer for the individual member.
-- */
-- public void buildMemberFooter(XMLNode node) {
-- writer.writeMemberFooter();
-- }
--
-- /**
-- * Build the overall footer.
-- */
-- public void buildFooter(XMLNode node) {
-- writer.writeFooter(classDoc);
-+ public void buildTagInfo(XMLNode node, Content annotationDocTree) {
-+ writer.addTags((MemberDoc) members.get(currentMemberIndex),
-+ annotationDocTree);
- }
-
- /**
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ClassBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ClassBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ClassBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ClassBuilder.java
-@@ -25,11 +25,11 @@
-
- package com.sun.tools.doclets.internal.toolkit.builders;
-
-+import java.io.*;
-+import java.util.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.javadoc.*;
--import java.io.*;
--import java.util.*;
-
- /**
- * Builds the summary for a given class.
-@@ -39,6 +39,7 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
- public class ClassBuilder extends AbstractBuilder {
-@@ -69,6 +70,11 @@
- private boolean isEnum = false;
-
- /**
-+ * The content tree for the class documentation.
-+ */
-+ private Content contentTree;
-+
-+ /**
- * Construct a new ClassBuilder.
- *
- * @param configuration the current configuration of the
-@@ -108,7 +114,7 @@
- * {@inheritDoc}
- */
- public void build() throws IOException {
-- build(LayoutParser.getInstance(configuration).parseXML(ROOT));
-+ build(LayoutParser.getInstance(configuration).parseXML(ROOT), contentTree);
- }
-
- /**
-@@ -121,121 +127,159 @@
- /**
- * Handles the &lt;ClassDoc> tag.
- *
-- * @param elements the XML elements that specify how to document a class.
-+ * @param node the XML element that specifies which components to document
-+ * @param contentTree the content tree to which the documentation will be added
- */
-- public void buildClassDoc(XMLNode node) throws Exception {
-- buildChildren(node);
-- writer.close();
-- copyDocFiles();
-+ public void buildClassDoc(XMLNode node, Content contentTree) throws Exception {
-+ String key;
-+ if (isInterface) {
-+ key = "doclet.Interface";
-+ } else if (isEnum) {
-+ key = "doclet.Enum";
-+ } else {
-+ key = "doclet.Class";
-+ }
-+ contentTree = writer.getHeader(configuration.getText(key) + " " +
-+ classDoc.name());
-+ Content classContentTree = writer.getClassContentHeader();
-+ buildChildren(node, classContentTree);
-+ contentTree.addContent(classContentTree);
-+ writer.addFooter(contentTree);
-+ writer.printDocument(contentTree);
-+ writer.close();
-+ copyDocFiles();
- }
-
-+ /**
-+ * Build the class tree documentation.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param classContentTree the content tree to which the documentation will be added
-+ */
-+ public void buildClassTree(XMLNode node, Content classContentTree) {
-+ writer.addClassTree(classContentTree);
-+ }
-
-- /**
-- * Copy the doc files for the current ClassDoc if necessary.
-- */
-+ /**
-+ * Build the class information tree documentation.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param classContentTree the content tree to which the documentation will be added
-+ */
-+ public void buildClassInfo(XMLNode node, Content classContentTree) {
-+ Content classInfoTree = writer.getClassInfoTreeHeader();
-+ buildChildren(node, classInfoTree);
-+ classContentTree.addContent(writer.getClassInfo(classInfoTree));
-+ }
-+
-+ /**
-+ * Build the typeparameters of this class.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param classInfoTree the content tree to which the documentation will be added
-+ */
-+ public void buildTypeParamInfo(XMLNode node, Content classInfoTree) {
-+ writer.addTypeParamInfo(classInfoTree);
-+ }
-+
-+ /**
-+ * If this is an interface, list all super interfaces.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param classInfoTree the content tree to which the documentation will be added
-+ */
-+ public void buildSuperInterfacesInfo(XMLNode node, Content classInfoTree) {
-+ writer.addSuperInterfacesInfo(classInfoTree);
-+ }
-+
-+ /**
-+ * If this is a class, list all interfaces implemented by this class.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param classInfoTree the content tree to which the documentation will be added
-+ */
-+ public void buildImplementedInterfacesInfo(XMLNode node, Content classInfoTree) {
-+ writer.addImplementedInterfacesInfo(classInfoTree);
-+ }
-+
-+ /**
-+ * List all the classes extend this one.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param classInfoTree the content tree to which the documentation will be added
-+ */
-+ public void buildSubClassInfo(XMLNode node, Content classInfoTree) {
-+ writer.addSubClassInfo(classInfoTree);
-+ }
-+
-+ /**
-+ * List all the interfaces that extend this one.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param classInfoTree the content tree to which the documentation will be added
-+ */
-+ public void buildSubInterfacesInfo(XMLNode node, Content classInfoTree) {
-+ writer.addSubInterfacesInfo(classInfoTree);
-+ }
-+
-+ /**
-+ * If this is an interface, list all classes that implement this interface.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param classInfoTree the content tree to which the documentation will be added
-+ */
-+ public void buildInterfaceUsageInfo(XMLNode node, Content classInfoTree) {
-+ writer.addInterfaceUsageInfo(classInfoTree);
-+ }
-+
-+ /**
-+ * If this class is deprecated, build the appropriate information.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param classInfoTree the content tree to which the documentation will be added
-+ */
-+ public void buildDeprecationInfo (XMLNode node, Content classInfoTree) {
-+ writer.addClassDeprecationInfo(classInfoTree);
-+ }
-+
-+ /**
-+ * If this is an inner class or interface, list the enclosing class or interface.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param classInfoTree the content tree to which the documentation will be added
-+ */
-+ public void buildNestedClassInfo (XMLNode node, Content classInfoTree) {
-+ writer.addNestedClassInfo(classInfoTree);
-+ }
-+
-+ /**
-+ * Copy the doc files for the current ClassDoc if necessary.
-+ */
- private void copyDocFiles() {
- PackageDoc containingPackage = classDoc.containingPackage();
- if((configuration.packages == null ||
- Arrays.binarySearch(configuration.packages,
-- containingPackage) < 0) &&
-- ! containingPackagesSeen.contains(containingPackage.name())){
-+ containingPackage) < 0) &&
-+ ! containingPackagesSeen.contains(containingPackage.name())){
- //Only copy doc files dir if the containing package is not
- //documented AND if we have not documented a class from the same
- //package already. Otherwise, we are making duplicate copies.
- Util.copyDocFiles(configuration,
-- Util.getPackageSourcePath(configuration,
-+ Util.getPackageSourcePath(configuration,
- classDoc.containingPackage()) +
-- DirectoryManager.getDirectoryPath(classDoc.containingPackage())
-+ DirectoryManager.getDirectoryPath(classDoc.containingPackage())
- + File.separator, DocletConstants.DOC_FILES_DIR_NAME, true);
- containingPackagesSeen.add(containingPackage.name());
- }
- }
-
- /**
-- * Build the header of the page.
-+ * Build the signature of the current class.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param classInfoTree the content tree to which the documentation will be added
- */
-- public void buildClassHeader(XMLNode node) {
-- String key;
-- if (isInterface) {
-- key = "doclet.Interface";
-- } else if (isEnum) {
-- key = "doclet.Enum";
-- } else {
-- key = "doclet.Class";
-- }
--
-- writer.writeHeader(configuration.getText(key) + " " + classDoc.name());
-- }
--
-- /**
-- * Build the class tree documentation.
-- */
-- public void buildClassTree(XMLNode node) {
-- writer.writeClassTree();
-- }
--
-- /**
-- * If this is a class, list all interfaces
-- * implemented by this class.
-- */
-- public void buildImplementedInterfacesInfo(XMLNode node) {
-- writer.writeImplementedInterfacesInfo();
-- }
--
-- /**
-- * If this is an interface, list all super interfaces.
-- */
-- public void buildSuperInterfacesInfo(XMLNode node) {
-- writer.writeSuperInterfacesInfo();
-- }
--
-- /**
-- * List the parameters of this class.
-- */
-- public void buildTypeParamInfo(XMLNode node) {
-- writer.writeTypeParamInfo();
-- }
--
-- /**
-- * List all the classes extend this one.
-- */
-- public void buildSubClassInfo(XMLNode node) {
-- writer.writeSubClassInfo();
-- }
--
-- /**
-- * List all the interfaces that extend this one.
-- */
-- public void buildSubInterfacesInfo(XMLNode node) {
-- writer.writeSubInterfacesInfo();
-- }
--
-- /**
-- * If this is an interface, list all classes that implement this interface.
-- */
-- public void buildInterfaceUsageInfo (XMLNode node) {
-- writer.writeInterfaceUsageInfo();
-- }
--
-- /**
-- * If this is an inner class or interface, list the enclosing class or
-- * interface.
-- */
-- public void buildNestedClassInfo (XMLNode node) {
-- writer.writeNestedClassInfo();
-- }
--
-- /**
-- * If this class is deprecated, print the appropriate information.
-- */
-- public void buildDeprecationInfo (XMLNode node) {
-- writer.writeClassDeprecationInfo();
-- }
--
-- /**
-- * Build the signature of the current class.
-- */
-- public void buildClassSignature(XMLNode node) {
-+ public void buildClassSignature(XMLNode node, Content classInfoTree) {
- StringBuffer modifiers = new StringBuffer(classDoc.modifiers() + " ");
- if (isEnum) {
- modifiers.append("enum ");
-@@ -243,93 +287,111 @@
- if ((index = modifiers.indexOf("abstract")) >= 0) {
- modifiers.delete(index, index + (new String("abstract")).length());
- modifiers = new StringBuffer(
-- Util.replaceText(modifiers.toString(), " ", " "));
-+ Util.replaceText(modifiers.toString(), " ", " "));
- }
- if ((index = modifiers.indexOf("final")) >= 0) {
- modifiers.delete(index, index + (new String("final")).length());
- modifiers = new StringBuffer(
-- Util.replaceText(modifiers.toString(), " ", " "));
-+ Util.replaceText(modifiers.toString(), " ", " "));
- }
- //} else if (classDoc.isAnnotationType()) {
- //modifiers.append("@interface ");
- } else if (! isInterface) {
- modifiers.append("class ");
- }
-- writer.writeClassSignature(modifiers.toString());
-+ writer.addClassSignature(modifiers.toString(), classInfoTree);
- }
-
- /**
- * Build the class description.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param classInfoTree the content tree to which the documentation will be added
- */
-- public void buildClassDescription(XMLNode node) {
-- writer.writeClassDescription();
-+ public void buildClassDescription(XMLNode node, Content classInfoTree) {
-+ writer.addClassDescription(classInfoTree);
- }
-
- /**
- * Build the tag information for the current class.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param classInfoTree the content tree to which the documentation will be added
- */
-- public void buildClassTagInfo(XMLNode node) {
-- writer.writeClassTagInfo();
-+ public void buildClassTagInfo(XMLNode node, Content classInfoTree) {
-+ writer.addClassTagInfo(classInfoTree);
- }
-
- /**
-- * Build the contents of the page.
-+ * Build the member summary contents of the page.
- *
-- * @param elements the XML elements that specify how a member summary is
-- * documented.
-+ * @param node the XML element that specifies which components to document
-+ * @param classContentTree the content tree to which the documentation will be added
- */
-- public void buildMemberSummary(List elements) throws Exception {
-+ public void buildMemberSummary(XMLNode node, Content classContentTree) throws Exception {
-+ Content memberSummaryTree = writer.getMemberTreeHeader();
- configuration.getBuilderFactory().
-- getMemberSummaryBuilder(writer).buildChildren(node);
-- writer.completeMemberSummaryBuild();
-+ getMemberSummaryBuilder(writer).buildChildren(node, memberSummaryTree);
-+ classContentTree.addContent(writer.getMemberSummaryTree(memberSummaryTree));
-+ }
-+
-+ /**
-+ * Build the member details contents of the page.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param classContentTree the content tree to which the documentation will be added
-+ */
-+ public void buildMemberDetails(XMLNode node, Content classContentTree) {
-+ Content memberDetailsTree = writer.getMemberTreeHeader();
-+ buildChildren(node, memberDetailsTree);
-+ classContentTree.addContent(writer.getMemberDetailsTree(memberDetailsTree));
- }
-
- /**
- * Build the enum constants documentation.
- *
-- * @param elements the XML elements that specify how a enum constants are
-- * documented.
-+ * @param node the XML element that specifies which components to document
-+ * @param memberDetailsTree the content tree to which the documentation will be added
- */
-- public void buildEnumConstantsDetails(XMLNode node) throws Exception {
-+ public void buildEnumConstantsDetails(XMLNode node,
-+ Content memberDetailsTree) throws Exception {
- configuration.getBuilderFactory().
-- getEnumConstantsBuilder(writer).buildChildren(node);
-+ getEnumConstantsBuilder(writer).buildChildren(node, memberDetailsTree);
- }
-
- /**
- * Build the field documentation.
- *
-- * @param elements the XML elements that specify how a field is documented.
-+ * @param node the XML element that specifies which components to document
-+ * @param memberDetailsTree the content tree to which the documentation will be added
- */
-- public void buildFieldDetails(XMLNode node) throws Exception {
-+ public void buildFieldDetails(XMLNode node,
-+ Content memberDetailsTree) throws Exception {
- configuration.getBuilderFactory().
-- getFieldBuilder(writer).buildChildren(node);
-+ getFieldBuilder(writer).buildChildren(node, memberDetailsTree);
- }
-
- /**
- * Build the constructor documentation.
- *
-- * @param elements the XML elements that specify how to document a
-- * constructor.
-+ * @param node the XML element that specifies which components to document
-+ * @param memberDetailsTree the content tree to which the documentation will be added
- */
-- public void buildConstructorDetails(XMLNode node) throws Exception {
-+ public void buildConstructorDetails(XMLNode node,
-+ Content memberDetailsTree) throws Exception {
- configuration.getBuilderFactory().
-- getConstructorBuilder(writer).buildChildren(node);
-+ getConstructorBuilder(writer).buildChildren(node, memberDetailsTree);
- }
-
- /**
- * Build the method documentation.
- *
-- * @param elements the XML elements that specify how a method is documented.
-+ * @param node the XML element that specifies which components to document
-+ * @param memberDetailsTree the content tree to which the documentation will be added
- */
-- public void buildMethodDetails(XMLNode node) throws Exception {
-+ public void buildMethodDetails(XMLNode node,
-+ Content memberDetailsTree) throws Exception {
- configuration.getBuilderFactory().
-- getMethodBuilder(writer).buildChildren(node);
-- }
--
-- /**
-- * Build the footer of the page.
-- */
-- public void buildClassFooter(XMLNode node) {
-- writer.writeFooter();
-+ getMethodBuilder(writer).buildChildren(node, memberDetailsTree);
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstantsSummaryBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstantsSummaryBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstantsSummaryBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstantsSummaryBuilder.java
-@@ -25,11 +25,11 @@
-
- package com.sun.tools.doclets.internal.toolkit.builders;
-
-+import java.io.*;
-+import java.util.*;
-+import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
- import com.sun.tools.doclets.internal.toolkit.*;
--import com.sun.javadoc.*;
--import java.io.*;
--import java.util.*;
-
- /**
- * Builds the Constants Summary Page.
-@@ -39,6 +39,7 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
- public class ConstantsSummaryBuilder extends AbstractBuilder {
-@@ -80,6 +81,11 @@
- private ClassDoc currentClass;
-
- /**
-+ * The content tree for the constant summary documentation.
-+ */
-+ private Content contentTree;
-+
-+ /**
- * Construct a new ConstantsSummaryBuilder.
- *
- * @param configuration the current configuration of the
-@@ -113,7 +119,7 @@
- //Doclet does not support this output.
- return;
- }
-- build(LayoutParser.getInstance(configuration).parseXML(ROOT));
-+ build(LayoutParser.getInstance(configuration).parseXML(ROOT), contentTree);
- }
-
- /**
-@@ -126,85 +132,85 @@
- /**
- * Build the constant summary.
- *
-- * @param elements the list of elements describing constant summary
-- * documentation.
-+ * @param node the XML element that specifies which components to document
-+ * @param contentTree the content tree to which the documentation will be added
- */
-- public void buildConstantSummary(XMLNode node) throws Exception {
-- buildChildren(node);
-+ public void buildConstantSummary(XMLNode node, Content contentTree) throws Exception {
-+ contentTree = writer.getHeader();
-+ buildChildren(node, contentTree);
-+ writer.addFooter(contentTree);
-+ writer.printDocument(contentTree);
- writer.close();
- }
-
- /**
-- * Build the header.
-+ * Build the list of packages.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param contentTree the content tree to which the content list will be added
- */
-- public void buildHeader(XMLNode node) {
-- writer.writeHeader();
-- }
--
-- /**
-- * Build the footer.
-- */
-- public void buildFooter(XMLNode node) {
-- writer.writeFooter();
-- }
--
-- /**
-- * Build the table of contents.
-- */
-- public void buildContents(XMLNode node) {
-- writer.writeContentsHeader();
-+ public void buildContents(XMLNode node, Content contentTree) {
-+ Content contentListTree = writer.getContentsHeader();
- PackageDoc[] packages = configuration.packages;
- printedPackageHeaders = new HashSet();
- for (int i = 0; i < packages.length; i++) {
- if (hasConstantField(packages[i]) && ! hasPrintedPackageIndex(packages[i].name())) {
-- writer.writeLinkToPackageContent(packages[i],
-+ writer.addLinkToPackageContent(packages[i],
- parsePackageName(packages[i].name()),
-- printedPackageHeaders);
-+ printedPackageHeaders, contentListTree);
- }
- }
-- writer.writeContentsFooter();
-+ contentTree.addContent(writer.getContentsList(contentListTree));
- }
-
- /**
- * Build the summary for each documented package.
- *
-- * @param elements the XML elements that represent the components
-- * of documentation for each package.
-+ * @param node the XML element that specifies which components to document
-+ * @param contentTree the tree to which the summaries will be added
- */
-- public void buildConstantSummaries(XMLNode node) {
-+ public void buildConstantSummaries(XMLNode node, Content contentTree) {
- PackageDoc[] packages = configuration.packages;
- printedPackageHeaders = new HashSet();
-+ Content summariesTree = writer.getConstantSummaries();
- for (int i = 0; i < packages.length; i++) {
- if (hasConstantField(packages[i])) {
- currentPackage = packages[i];
- //Build the documentation for the current package.
-- buildChildren(node);
-+ buildChildren(node, summariesTree);
- }
- }
-+ contentTree.addContent(summariesTree);
- }
-
- /**
-- * Build the summary for the current package.
-+ * Build the header for the given package.
- *
-- * @param elements the list of XML elements that make up package
-- * documentation.
-+ * @param node the XML element that specifies which components to document
-+ * @param summariesTree the tree to which the package header will be added
- */
-- public void buildPackageConstantSummary(XMLNode node) {
-- buildChildren(node);
-+ public void buildPackageHeader(XMLNode node, Content summariesTree) {
-+ String parsedPackageName = parsePackageName(currentPackage.name());
-+ if (! printedPackageHeaders.contains(parsedPackageName)) {
-+ writer.addPackageName(currentPackage,
-+ parsePackageName(currentPackage.name()), summariesTree);
-+ printedPackageHeaders.add(parsedPackageName);
-+ }
- }
-
- /**
- * Build the summary for the current class.
- *
-- * @param elements the list of XML elements that make up the class
-- * constant summary.
-+ * @param node the XML element that specifies which components to document
-+ * @param summariesTree the tree to which the class constant summary will be added
- */
-- public void buildClassConstantSummary(XMLNode node) {
-+ public void buildClassConstantSummary(XMLNode node, Content summariesTree) {
- ClassDoc[] classes = currentPackage.name().length() > 0 ?
- currentPackage.allClasses() :
- configuration.classDocCatalog.allClasses(
- DocletConstants.DEFAULT_PACKAGE_NAME);
- Arrays.sort(classes);
-+ Content classConstantTree = writer.getClassConstantHeader();
- for (int i = 0; i < classes.length; i++) {
- if (! classDocsWithConstFields.contains(classes[i]) ||
- ! classes[i].isIncluded()) {
-@@ -212,42 +218,20 @@
- }
- currentClass = classes[i];
- //Build the documentation for the current class.
-- buildChildren(node);
-+ buildChildren(node, classConstantTree);
- }
-+ summariesTree.addContent(classConstantTree);
- }
-
- /**
-- * Build the header for the given class.
-+ * Build the summary of constant members in the class.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param classConstantTree the tree to which the constant members table
-+ * will be added
- */
-- public void buildPackageHeader(XMLNode node) {
-- String parsedPackageName = parsePackageName(currentPackage.name());
-- if (! printedPackageHeaders.contains(parsedPackageName)) {
-- writer.writePackageName(currentPackage,
-- parsePackageName(currentPackage.name()));
-- printedPackageHeaders.add(parsedPackageName);
-- }
-- }
--
-- /**
-- * Build the header for the given class.
-- */
-- public void buildClassHeader(XMLNode node) {
-- writer.writeConstantMembersHeader(currentClass);
-- }
--
-- /**
-- * Print summary of constant members in the
-- * class.
-- */
-- public void buildConstantMembers(XMLNode node) {
-- new ConstantFieldBuilder(currentClass).buildMembersSummary(node);
-- }
--
-- /**
-- * Build the footer for the given class.
-- */
-- public void buildClassFooter(XMLNode node) {
-- writer.writeConstantMembersFooter(currentClass);
-+ public void buildConstantMembers(XMLNode node, Content classConstantTree) {
-+ new ConstantFieldBuilder(currentClass).buildMembersSummary(node, classConstantTree);
- }
-
- /**
-@@ -346,12 +330,16 @@
-
- /**
- * Builds the table of constants for a given class.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param classConstantTree the tree to which the class constants table
-+ * will be added
- */
-- protected void buildMembersSummary(XMLNode node) {
-+ protected void buildMembersSummary(XMLNode node, Content classConstantTree) {
- List members = new ArrayList(members());
- if (members.size() > 0) {
- Collections.sort(members);
-- writer.writeConstantMembers(classdoc, members);
-+ writer.addConstantMembers(classdoc, members, classConstantTree);
- }
- }
-
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstructorBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstructorBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstructorBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstructorBuilder.java
-@@ -25,10 +25,10 @@
-
- package com.sun.tools.doclets.internal.toolkit.builders;
-
-+import java.util.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.javadoc.*;
--import java.util.*;
-
- /**
- * Builds documentation for a constructor.
-@@ -38,202 +38,195 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
- public class ConstructorBuilder extends AbstractMemberBuilder {
-
-- /**
-- * The name of this builder.
-- */
-- public static final String NAME = "ConstructorDetails";
-+ /**
-+ * The name of this builder.
-+ */
-+ public static final String NAME = "ConstructorDetails";
-
-- /**
-- * The index of the current field that is being documented at this point
-- * in time.
-- */
-- private int currentMethodIndex;
-+ /**
-+ * The index of the current field that is being documented at this point
-+ * in time.
-+ */
-+ private int currentConstructorIndex;
-
-- /**
-- * The class whose constructors are being documented.
-- */
-- private ClassDoc classDoc;
-+ /**
-+ * The class whose constructors are being documented.
-+ */
-+ private ClassDoc classDoc;
-
-- /**
-- * The visible constructors for the given class.
-- */
-- private VisibleMemberMap visibleMemberMap;
-+ /**
-+ * The visible constructors for the given class.
-+ */
-+ private VisibleMemberMap visibleMemberMap;
-
-- /**
-- * The writer to output the constructor documentation.
-- */
-- private ConstructorWriter writer;
-+ /**
-+ * The writer to output the constructor documentation.
-+ */
-+ private ConstructorWriter writer;
-
-- /**
-- * The constructors being documented.
-- */
-- private List constructors;
-+ /**
-+ * The constructors being documented.
-+ */
-+ private List<ProgramElementDoc> constructors;
-
-- /**
-- * Construct a new ConstructorBuilder.
-- *
-- * @param configuration the current configuration of the
-- * doclet.
-- */
-- private ConstructorBuilder(Configuration configuration) {
-- super(configuration);
-+ /**
-+ * Construct a new ConstructorBuilder.
-+ *
-+ * @param configuration the current configuration of the
-+ * doclet.
-+ */
-+ private ConstructorBuilder(Configuration configuration) {
-+ super(configuration);
-+ }
-+
-+ /**
-+ * Construct a new ConstructorBuilder.
-+ *
-+ * @param configuration the current configuration of the doclet.
-+ * @param classDoc the class whoses members are being documented.
-+ * @param writer the doclet specific writer.
-+ */
-+ public static ConstructorBuilder getInstance(
-+ Configuration configuration,
-+ ClassDoc classDoc,
-+ ConstructorWriter writer) {
-+ ConstructorBuilder builder = new ConstructorBuilder(configuration);
-+ builder.classDoc = classDoc;
-+ builder.writer = writer;
-+ builder.visibleMemberMap =
-+ new VisibleMemberMap(
-+ classDoc,
-+ VisibleMemberMap.CONSTRUCTORS,
-+ configuration.nodeprecated);
-+ builder.constructors =
-+ new ArrayList<ProgramElementDoc>(builder.visibleMemberMap.getMembersFor(classDoc));
-+ for (int i = 0; i < builder.constructors.size(); i++) {
-+ if (builder.constructors.get(i).isProtected()
-+ || builder.constructors.get(i).isPrivate()) {
-+ writer.setFoundNonPubConstructor(true);
-+ }
-+ }
-+ if (configuration.getMemberComparator() != null) {
-+ Collections.sort(
-+ builder.constructors,
-+ configuration.getMemberComparator());
- }
-+ return builder;
-+ }
-
-- /**
-- * Construct a new ConstructorBuilder.
-- *
-- * @param configuration the current configuration of the doclet.
-- * @param classDoc the class whoses members are being documented.
-- * @param writer the doclet specific writer.
-- */
-- public static ConstructorBuilder getInstance(
-- Configuration configuration,
-- ClassDoc classDoc,
-- ConstructorWriter writer) {
-- ConstructorBuilder builder = new ConstructorBuilder(configuration);
-- builder.classDoc = classDoc;
-- builder.writer = writer;
-- builder.visibleMemberMap =
-- new VisibleMemberMap(
-- classDoc,
-- VisibleMemberMap.CONSTRUCTORS,
-- configuration.nodeprecated);
-- builder.constructors =
-- new ArrayList(builder.visibleMemberMap.getMembersFor(classDoc));
-- for (int i = 0; i < builder.constructors.size(); i++) {
-- if (((ProgramElementDoc) (builder.constructors.get(i)))
-- .isProtected()
-- || ((ProgramElementDoc) (builder.constructors.get(i)))
-- .isPrivate()) {
-- writer.setFoundNonPubConstructor(true);
-- }
-- }
-- if (configuration.getMemberComparator() != null) {
-- Collections.sort(
-- builder.constructors,
-- configuration.getMemberComparator());
-- }
-- return builder;
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getName() {
-+ return NAME;
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public boolean hasMembersToDocument() {
-+ return constructors.size() > 0;
-+ }
-+
-+ /**
-+ * Returns a list of constructors that will be documented for the given class.
-+ * This information can be used for doclet specific documentation
-+ * generation.
-+ *
-+ * @return a list of constructors that will be documented.
-+ */
-+ public List<ProgramElementDoc> members(ClassDoc classDoc) {
-+ return visibleMemberMap.getMembersFor(classDoc);
-+ }
-+
-+ /**
-+ * Return the constructor writer for this builder.
-+ *
-+ * @return the constructor writer for this builder.
-+ */
-+ public ConstructorWriter getWriter() {
-+ return writer;
-+ }
-+
-+ /**
-+ * Build the constructor documentation.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param memberDetailsTree the content tree to which the documentation will be added
-+ */
-+ public void buildConstructorDoc(XMLNode node, Content memberDetailsTree) {
-+ if (writer == null) {
-+ return;
- }
-+ int size = constructors.size();
-+ if (size > 0) {
-+ Content constructorDetailsTree = writer.getConstructorDetailsTreeHeader(
-+ classDoc, memberDetailsTree);
-+ for (currentConstructorIndex = 0; currentConstructorIndex < size;
-+ currentConstructorIndex++) {
-+ Content constructorDocTree = writer.getConstructorDocTreeHeader(
-+ (ConstructorDoc) constructors.get(currentConstructorIndex),
-+ constructorDetailsTree);
-+ buildChildren(node, constructorDocTree);
-+ constructorDetailsTree.addContent(writer.getConstructorDoc(
-+ constructorDocTree, (currentConstructorIndex == size - 1)));
-+ }
-+ memberDetailsTree.addContent(
-+ writer.getConstructorDetails(constructorDetailsTree));
-+ }
-+ }
-
-- /**
-- * {@inheritDoc}
-- */
-- public String getName() {
-- return NAME;
-+ /**
-+ * Build the signature.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param constructorDocTree the content tree to which the documentation will be added
-+ */
-+ public void buildSignature(XMLNode node, Content constructorDocTree) {
-+ constructorDocTree.addContent(
-+ writer.getSignature(
-+ (ConstructorDoc) constructors.get(currentConstructorIndex)));
-+ }
-+
-+ /**
-+ * Build the deprecation information.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param constructorDocTree the content tree to which the documentation will be added
-+ */
-+ public void buildDeprecationInfo(XMLNode node, Content constructorDocTree) {
-+ writer.addDeprecated(
-+ (ConstructorDoc) constructors.get(currentConstructorIndex), constructorDocTree);
-+ }
-+
-+ /**
-+ * Build the comments for the constructor. Do nothing if
-+ * {@link Configuration#nocomment} is set to true.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param constructorDocTree the content tree to which the documentation will be added
-+ */
-+ public void buildConstructorComments(XMLNode node, Content constructorDocTree) {
-+ if (!configuration.nocomment) {
-+ writer.addComments(
-+ (ConstructorDoc) constructors.get(currentConstructorIndex),
-+ constructorDocTree);
- }
-+ }
-
-- /**
-- * {@inheritDoc}
-- */
-- public boolean hasMembersToDocument() {
-- return constructors.size() > 0;
-- }
--
-- /**
-- * Returns a list of constructors that will be documented for the given class.
-- * This information can be used for doclet specific documentation
-- * generation.
-- *
-- * @return a list of constructors that will be documented.
-- */
-- public List members(ClassDoc classDoc) {
-- return visibleMemberMap.getMembersFor(classDoc);
-- }
--
-- /**
-- * Return the constructor writer for this builder.
-- *
-- * @return the constructor writer for this builder.
-- */
-- public ConstructorWriter getWriter() {
-- return writer;
-- }
--
-- /**
-- * Build the constructor documentation.
-- *
-- * @param elements the XML elements that specify how to construct this
-- * documentation.
-- */
-- public void buildConstructorDoc(XMLNode node) {
-- if (writer == null) {
-- return;
-- }
-- for (currentMethodIndex = 0;
-- currentMethodIndex < constructors.size();
-- currentMethodIndex++) {
-- buildChildren(node);
-- }
-- }
--
-- /**
-- * Build the overall header.
-- */
-- public void buildHeader(XMLNode node) {
-- writer.writeHeader(
-- classDoc,
-- configuration.getText("doclet.Constructor_Detail"));
-- }
--
-- /**
-- * Build the header for the individual constructor.
-- */
-- public void buildConstructorHeader(XMLNode node) {
-- writer.writeConstructorHeader(
-- (ConstructorDoc) constructors.get(currentMethodIndex),
-- currentMethodIndex == 0);
-- }
--
-- /**
-- * Build the signature.
-- */
-- public void buildSignature(XMLNode node) {
-- writer.writeSignature(
-- (ConstructorDoc) constructors.get(currentMethodIndex));
-- }
--
-- /**
-- * Build the deprecation information.
-- */
-- public void buildDeprecationInfo(XMLNode node) {
-- writer.writeDeprecated(
-- (ConstructorDoc) constructors.get(currentMethodIndex));
-- }
--
-- /**
-- * Build the comments for the constructor. Do nothing if
-- * {@link Configuration#nocomment} is set to true.
-- */
-- public void buildConstructorComments(XMLNode node) {
-- if (!configuration.nocomment) {
-- writer.writeComments(
-- (ConstructorDoc) constructors.get(currentMethodIndex));
-- }
-- }
--
-- /**
-- * Build the tag information.
-- */
-- public void buildTagInfo(XMLNode node) {
-- writer.writeTags((ConstructorDoc) constructors.get(currentMethodIndex));
-- }
--
-- /**
-- * Build the footer for the individual constructor.
-- */
-- public void buildConstructorFooter(XMLNode node) {
-- writer.writeConstructorFooter();
-- }
--
-- /**
-- * Build the overall footer.
-- */
-- public void buildFooter(XMLNode node) {
-- writer.writeFooter(classDoc);
-- }
-+ /**
-+ * Build the tag information.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param constructorDocTree the content tree to which the documentation will be added
-+ */
-+ public void buildTagInfo(XMLNode node, Content constructorDocTree) {
-+ writer.addTags((ConstructorDoc) constructors.get(currentConstructorIndex),
-+ constructorDocTree);
-+ }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/EnumConstantBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/EnumConstantBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/EnumConstantBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/EnumConstantBuilder.java
-@@ -25,10 +25,10 @@
-
- package com.sun.tools.doclets.internal.toolkit.builders;
-
-+import java.util.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.javadoc.*;
--import java.util.*;
-
- /**
- * Builds documentation for a enum constants.
-@@ -38,200 +38,195 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
- public class EnumConstantBuilder extends AbstractMemberBuilder {
-
-- /**
-- * The class whose enum constants are being documented.
-- */
-- private ClassDoc classDoc;
-+ /**
-+ * The class whose enum constants are being documented.
-+ */
-+ private ClassDoc classDoc;
-
-- /**
-- * The visible enum constantss for the given class.
-- */
-- private VisibleMemberMap visibleMemberMap;
-+ /**
-+ * The visible enum constantss for the given class.
-+ */
-+ private VisibleMemberMap visibleMemberMap;
-
-- /**
-- * The writer to output the enum constants documentation.
-- */
-- private EnumConstantWriter writer;
-+ /**
-+ * The writer to output the enum constants documentation.
-+ */
-+ private EnumConstantWriter writer;
-
-- /**
-- * The list of enum constants being documented.
-- */
-- private List enumConstants;
-+ /**
-+ * The list of enum constants being documented.
-+ */
-+ private List<ProgramElementDoc> enumConstants;
-
-- /**
-- * The index of the current enum constant that is being documented at this point
-- * in time.
-- */
-- private int currentEnumConstantsIndex;
-+ /**
-+ * The index of the current enum constant that is being documented at this point
-+ * in time.
-+ */
-+ private int currentEnumConstantsIndex;
-
-- /**
-- * Construct a new EnumConstantsBuilder.
-- *
-- * @param configuration the current configuration of the
-- * doclet.
-- */
-- private EnumConstantBuilder(Configuration configuration) {
-- super(configuration);
-+ /**
-+ * Construct a new EnumConstantsBuilder.
-+ *
-+ * @param configuration the current configuration of the
-+ * doclet.
-+ */
-+ private EnumConstantBuilder(Configuration configuration) {
-+ super(configuration);
-+ }
-+
-+ /**
-+ * Construct a new EnumConstantsBuilder.
-+ *
-+ * @param configuration the current configuration of the doclet.
-+ * @param classDoc the class whoses members are being documented.
-+ * @param writer the doclet specific writer.
-+ */
-+ public static EnumConstantBuilder getInstance(
-+ Configuration configuration,
-+ ClassDoc classDoc,
-+ EnumConstantWriter writer) {
-+ EnumConstantBuilder builder = new EnumConstantBuilder(configuration);
-+ builder.classDoc = classDoc;
-+ builder.writer = writer;
-+ builder.visibleMemberMap =
-+ new VisibleMemberMap(
-+ classDoc,
-+ VisibleMemberMap.ENUM_CONSTANTS,
-+ configuration.nodeprecated);
-+ builder.enumConstants =
-+ new ArrayList<ProgramElementDoc>(builder.visibleMemberMap.getMembersFor(classDoc));
-+ if (configuration.getMemberComparator() != null) {
-+ Collections.sort(
-+ builder.enumConstants,
-+ configuration.getMemberComparator());
-+ }
-+ return builder;
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getName() {
-+ return "EnumConstantDetails";
-+ }
-+
-+ /**
-+ * Returns a list of enum constants that will be documented for the given class.
-+ * This information can be used for doclet specific documentation
-+ * generation.
-+ *
-+ * @param classDoc the {@link ClassDoc} we want to check.
-+ * @return a list of enum constants that will be documented.
-+ */
-+ public List<ProgramElementDoc> members(ClassDoc classDoc) {
-+ return visibleMemberMap.getMembersFor(classDoc);
-+ }
-+
-+ /**
-+ * Returns the visible member map for the enum constants of this class.
-+ *
-+ * @return the visible member map for the enum constants of this class.
-+ */
-+ public VisibleMemberMap getVisibleMemberMap() {
-+ return visibleMemberMap;
-+ }
-+
-+ /**
-+ * summaryOrder.size()
-+ */
-+ public boolean hasMembersToDocument() {
-+ return enumConstants.size() > 0;
-+ }
-+
-+ /**
-+ * Build the enum constant documentation.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param memberDetailsTree the content tree to which the documentation will be added
-+ */
-+ public void buildEnumConstant(XMLNode node, Content memberDetailsTree) {
-+ if (writer == null) {
-+ return;
- }
-+ int size = enumConstants.size();
-+ if (size > 0) {
-+ Content enumConstantsDetailsTree = writer.getEnumConstantsDetailsTreeHeader(
-+ classDoc, memberDetailsTree);
-+ for (currentEnumConstantsIndex = 0; currentEnumConstantsIndex < size;
-+ currentEnumConstantsIndex++) {
-+ Content enumConstantsTree = writer.getEnumConstantsTreeHeader(
-+ (FieldDoc) enumConstants.get(currentEnumConstantsIndex),
-+ enumConstantsDetailsTree);
-+ buildChildren(node, enumConstantsTree);
-+ enumConstantsDetailsTree.addContent(writer.getEnumConstants(
-+ enumConstantsTree, (currentEnumConstantsIndex == size - 1)));
-+ }
-+ memberDetailsTree.addContent(
-+ writer.getEnumConstantsDetails(enumConstantsDetailsTree));
-+ }
-+ }
-
-- /**
-- * Construct a new EnumConstantsBuilder.
-- *
-- * @param configuration the current configuration of the doclet.
-- * @param classDoc the class whoses members are being documented.
-- * @param writer the doclet specific writer.
-- */
-- public static EnumConstantBuilder getInstance(
-- Configuration configuration,
-- ClassDoc classDoc,
-- EnumConstantWriter writer) {
-- EnumConstantBuilder builder = new EnumConstantBuilder(configuration);
-- builder.classDoc = classDoc;
-- builder.writer = writer;
-- builder.visibleMemberMap =
-- new VisibleMemberMap(
-- classDoc,
-- VisibleMemberMap.ENUM_CONSTANTS,
-- configuration.nodeprecated);
-- builder.enumConstants =
-- new ArrayList(builder.visibleMemberMap.getMembersFor(classDoc));
-- if (configuration.getMemberComparator() != null) {
-- Collections.sort(
-- builder.enumConstants,
-- configuration.getMemberComparator());
-- }
-- return builder;
-+ /**
-+ * Build the signature.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param enumConstantsTree the content tree to which the documentation will be added
-+ */
-+ public void buildSignature(XMLNode node, Content enumConstantsTree) {
-+ enumConstantsTree.addContent(writer.getSignature(
-+ (FieldDoc) enumConstants.get(currentEnumConstantsIndex)));
-+ }
-+
-+ /**
-+ * Build the deprecation information.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param enumConstantsTree the content tree to which the documentation will be added
-+ */
-+ public void buildDeprecationInfo(XMLNode node, Content enumConstantsTree) {
-+ writer.addDeprecated(
-+ (FieldDoc) enumConstants.get(currentEnumConstantsIndex),
-+ enumConstantsTree);
-+ }
-+
-+ /**
-+ * Build the comments for the enum constant. Do nothing if
-+ * {@link Configuration#nocomment} is set to true.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param enumConstantsTree the content tree to which the documentation will be added
-+ */
-+ public void buildEnumConstantComments(XMLNode node, Content enumConstantsTree) {
-+ if (!configuration.nocomment) {
-+ writer.addComments(
-+ (FieldDoc) enumConstants.get(currentEnumConstantsIndex),
-+ enumConstantsTree);
- }
-+ }
-
-- /**
-- * {@inheritDoc}
-- */
-- public String getName() {
-- return "EnumConstantDetails";
-- }
-+ /**
-+ * Build the tag information.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param enumConstantsTree the content tree to which the documentation will be added
-+ */
-+ public void buildTagInfo(XMLNode node, Content enumConstantsTree) {
-+ writer.addTags(
-+ (FieldDoc) enumConstants.get(currentEnumConstantsIndex),
-+ enumConstantsTree);
-+ }
-
-- /**
-- * Returns a list of enum constants that will be documented for the given class.
-- * This information can be used for doclet specific documentation
-- * generation.
-- *
-- * @param classDoc the {@link ClassDoc} we want to check.
-- * @return a list of enum constants that will be documented.
-- */
-- public List members(ClassDoc classDoc) {
-- return visibleMemberMap.getMembersFor(classDoc);
-- }
--
-- /**
-- * Returns the visible member map for the enum constants of this class.
-- *
-- * @return the visible member map for the enum constants of this class.
-- */
-- public VisibleMemberMap getVisibleMemberMap() {
-- return visibleMemberMap;
-- }
--
-- /**
-- * summaryOrder.size()
-- */
-- public boolean hasMembersToDocument() {
-- return enumConstants.size() > 0;
-- }
--
-- /**
-- * Build the enum constant documentation.
-- *
-- * @param elements the XML elements that specify how to construct this
-- * documentation.
-- */
-- public void buildEnumConstant(XMLNode node) {
-- if (writer == null) {
-- return;
-- }
-- for (currentEnumConstantsIndex = 0;
-- currentEnumConstantsIndex < enumConstants.size();
-- currentEnumConstantsIndex++) {
-- buildChildren(node);
-- }
-- }
--
-- /**
-- * Build the overall header.
-- */
-- public void buildHeader(XMLNode node) {
-- writer.writeHeader(
-- classDoc,
-- configuration.getText("doclet.Enum_Constant_Detail"));
-- }
--
-- /**
-- * Build the header for the individual enum constants.
-- */
-- public void buildEnumConstantHeader(XMLNode node) {
-- writer.writeEnumConstantHeader(
-- (FieldDoc) enumConstants.get(currentEnumConstantsIndex),
-- currentEnumConstantsIndex == 0);
-- }
--
-- /**
-- * Build the signature.
-- */
-- public void buildSignature(XMLNode node) {
-- writer.writeSignature(
-- (FieldDoc) enumConstants.get(currentEnumConstantsIndex));
-- }
--
-- /**
-- * Build the deprecation information.
-- */
-- public void buildDeprecationInfo(XMLNode node) {
-- writer.writeDeprecated(
-- (FieldDoc) enumConstants.get(currentEnumConstantsIndex));
-- }
--
-- /**
-- * Build the comments for the enum constant. Do nothing if
-- * {@link Configuration#nocomment} is set to true.
-- */
-- public void buildEnumConstantComments(XMLNode node) {
-- if (!configuration.nocomment) {
-- writer.writeComments(
-- (FieldDoc) enumConstants.get(currentEnumConstantsIndex));
-- }
-- }
--
-- /**
-- * Build the tag information.
-- */
-- public void buildTagInfo(XMLNode node) {
-- writer.writeTags(
-- (FieldDoc) enumConstants.get(currentEnumConstantsIndex));
-- }
--
-- /**
-- * Build the footer for the individual enum constants.
-- */
-- public void buildEnumConstantFooter(XMLNode node) {
-- writer.writeEnumConstantFooter();
-- }
--
-- /**
-- * Build the overall footer.
-- */
-- public void buildFooter(XMLNode node) {
-- writer.writeFooter(classDoc);
-- }
--
-- /**
-- * Return the enum constant writer for this builder.
-- *
-- * @return the enum constant writer for this builder.
-- */
-- public EnumConstantWriter getWriter() {
-- return writer;
-- }
-+ /**
-+ * Return the enum constant writer for this builder.
-+ *
-+ * @return the enum constant writer for this builder.
-+ */
-+ public EnumConstantWriter getWriter() {
-+ return writer;
-+ }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/FieldBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/FieldBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/FieldBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/FieldBuilder.java
-@@ -25,10 +25,10 @@
-
- package com.sun.tools.doclets.internal.toolkit.builders;
-
-+import java.util.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.javadoc.*;
--import java.util.*;
-
- /**
- * Builds documentation for a field.
-@@ -38,197 +38,191 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
- public class FieldBuilder extends AbstractMemberBuilder {
-
-- /**
-- * The class whose fields are being documented.
-- */
-- private ClassDoc classDoc;
-+ /**
-+ * The class whose fields are being documented.
-+ */
-+ private ClassDoc classDoc;
-
-- /**
-- * The visible fields for the given class.
-- */
-- private VisibleMemberMap visibleMemberMap;
-+ /**
-+ * The visible fields for the given class.
-+ */
-+ private VisibleMemberMap visibleMemberMap;
-
-- /**
-- * The writer to output the field documentation.
-- */
-- private FieldWriter writer;
-+ /**
-+ * The writer to output the field documentation.
-+ */
-+ private FieldWriter writer;
-
-- /**
-- * The list of fields being documented.
-- */
-- private List fields;
-+ /**
-+ * The list of fields being documented.
-+ */
-+ private List<ProgramElementDoc> fields;
-
-- /**
-- * The index of the current field that is being documented at this point
-- * in time.
-- */
-- private int currentFieldIndex;
-+ /**
-+ * The index of the current field that is being documented at this point
-+ * in time.
-+ */
-+ private int currentFieldIndex;
-
-- /**
-- * Construct a new FieldBuilder.
-- *
-- * @param configuration the current configuration of the
-- * doclet.
-- */
-- private FieldBuilder(Configuration configuration) {
-- super(configuration);
-+ /**
-+ * Construct a new FieldBuilder.
-+ *
-+ * @param configuration the current configuration of the
-+ * doclet.
-+ */
-+ private FieldBuilder(Configuration configuration) {
-+ super(configuration);
-+ }
-+
-+ /**
-+ * Construct a new FieldBuilder.
-+ *
-+ * @param configuration the current configuration of the doclet.
-+ * @param classDoc the class whoses members are being documented.
-+ * @param writer the doclet specific writer.
-+ */
-+ public static FieldBuilder getInstance(
-+ Configuration configuration,
-+ ClassDoc classDoc,
-+ FieldWriter writer) {
-+ FieldBuilder builder = new FieldBuilder(configuration);
-+ builder.classDoc = classDoc;
-+ builder.writer = writer;
-+ builder.visibleMemberMap =
-+ new VisibleMemberMap(
-+ classDoc,
-+ VisibleMemberMap.FIELDS,
-+ configuration.nodeprecated);
-+ builder.fields =
-+ new ArrayList<ProgramElementDoc>(builder.visibleMemberMap.getLeafClassMembers(
-+ configuration));
-+ if (configuration.getMemberComparator() != null) {
-+ Collections.sort(
-+ builder.fields,
-+ configuration.getMemberComparator());
- }
-+ return builder;
-+ }
-
-- /**
-- * Construct a new FieldBuilder.
-- *
-- * @param configuration the current configuration of the doclet.
-- * @param classDoc the class whoses members are being documented.
-- * @param writer the doclet specific writer.
-- */
-- public static FieldBuilder getInstance(
-- Configuration configuration,
-- ClassDoc classDoc,
-- FieldWriter writer) {
-- FieldBuilder builder = new FieldBuilder(configuration);
-- builder.classDoc = classDoc;
-- builder.writer = writer;
-- builder.visibleMemberMap =
-- new VisibleMemberMap(
-- classDoc,
-- VisibleMemberMap.FIELDS,
-- configuration.nodeprecated);
-- builder.fields =
-- new ArrayList(builder.visibleMemberMap.getLeafClassMembers(
-- configuration));
-- if (configuration.getMemberComparator() != null) {
-- Collections.sort(
-- builder.fields,
-- configuration.getMemberComparator());
-- }
-- return builder;
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getName() {
-+ return "FieldDetails";
-+ }
-+
-+ /**
-+ * Returns a list of fields that will be documented for the given class.
-+ * This information can be used for doclet specific documentation
-+ * generation.
-+ *
-+ * @param classDoc the {@link ClassDoc} we want to check.
-+ * @return a list of fields that will be documented.
-+ */
-+ public List<ProgramElementDoc> members(ClassDoc classDoc) {
-+ return visibleMemberMap.getMembersFor(classDoc);
-+ }
-+
-+ /**
-+ * Returns the visible member map for the fields of this class.
-+ *
-+ * @return the visible member map for the fields of this class.
-+ */
-+ public VisibleMemberMap getVisibleMemberMap() {
-+ return visibleMemberMap;
-+ }
-+
-+ /**
-+ * summaryOrder.size()
-+ */
-+ public boolean hasMembersToDocument() {
-+ return fields.size() > 0;
-+ }
-+
-+ /**
-+ * Build the field documentation.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param memberDetailsTree the content tree to which the documentation will be added
-+ */
-+ public void buildFieldDoc(XMLNode node, Content memberDetailsTree) {
-+ if (writer == null) {
-+ return;
-+ }
-+ int size = fields.size();
-+ if (size > 0) {
-+ Content fieldDetailsTree = writer.getFieldDetailsTreeHeader(
-+ classDoc, memberDetailsTree);
-+ for (currentFieldIndex = 0; currentFieldIndex < size;
-+ currentFieldIndex++) {
-+ Content fieldDocTree = writer.getFieldDocTreeHeader(
-+ (FieldDoc) fields.get(currentFieldIndex),
-+ fieldDetailsTree);
-+ buildChildren(node, fieldDocTree);
-+ fieldDetailsTree.addContent(writer.getFieldDoc(
-+ fieldDocTree, (currentFieldIndex == size - 1)));
-+ }
-+ memberDetailsTree.addContent(
-+ writer.getFieldDetails(fieldDetailsTree));
- }
-+ }
-
-- /**
-- * {@inheritDoc}
-- */
-- public String getName() {
-- return "FieldDetails";
-+ /**
-+ * Build the signature.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param fieldDocTree the content tree to which the documentation will be added
-+ */
-+ public void buildSignature(XMLNode node, Content fieldDocTree) {
-+ fieldDocTree.addContent(
-+ writer.getSignature((FieldDoc) fields.get(currentFieldIndex)));
-+ }
-+
-+ /**
-+ * Build the deprecation information.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param fieldDocTree the content tree to which the documentation will be added
-+ */
-+ public void buildDeprecationInfo(XMLNode node, Content fieldDocTree) {
-+ writer.addDeprecated(
-+ (FieldDoc) fields.get(currentFieldIndex), fieldDocTree);
-+ }
-+
-+ /**
-+ * Build the comments for the field. Do nothing if
-+ * {@link Configuration#nocomment} is set to true.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param fieldDocTree the content tree to which the documentation will be added
-+ */
-+ public void buildFieldComments(XMLNode node, Content fieldDocTree) {
-+ if (!configuration.nocomment) {
-+ writer.addComments((FieldDoc) fields.get(currentFieldIndex), fieldDocTree);
- }
-+ }
-
-- /**
-- * Returns a list of fields that will be documented for the given class.
-- * This information can be used for doclet specific documentation
-- * generation.
-- *
-- * @param classDoc the {@link ClassDoc} we want to check.
-- * @return a list of fields that will be documented.
-- */
-- public List members(ClassDoc classDoc) {
-- return visibleMemberMap.getMembersFor(classDoc);
-- }
-+ /**
-+ * Build the tag information.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param fieldDocTree the content tree to which the documentation will be added
-+ */
-+ public void buildTagInfo(XMLNode node, Content fieldDocTree) {
-+ writer.addTags((FieldDoc) fields.get(currentFieldIndex), fieldDocTree);
-+ }
-
-- /**
-- * Returns the visible member map for the fields of this class.
-- *
-- * @return the visible member map for the fields of this class.
-- */
-- public VisibleMemberMap getVisibleMemberMap() {
-- return visibleMemberMap;
-- }
--
-- /**
-- * summaryOrder.size()
-- */
-- public boolean hasMembersToDocument() {
-- return fields.size() > 0;
-- }
--
-- /**
-- * Build the field documentation.
-- *
-- * @param elements the XML elements that specify how to construct this
-- * documentation.
-- */
-- public void buildFieldDoc(XMLNode node) {
-- if (writer == null) {
-- return;
-- }
-- for (currentFieldIndex = 0;
-- currentFieldIndex < fields.size();
-- currentFieldIndex++) {
-- buildChildren(node);
-- }
-- }
--
-- /**
-- * Build the overall header.
-- */
-- public void buildHeader(XMLNode node) {
-- writer.writeHeader(
-- classDoc,
-- configuration.getText("doclet.Field_Detail"));
-- }
--
-- /**
-- * Build the header for the individual field.
-- */
-- public void buildFieldHeader(XMLNode node) {
-- writer.writeFieldHeader(
-- (FieldDoc) fields.get(currentFieldIndex),
-- currentFieldIndex == 0);
-- }
--
-- /**
-- * Build the signature.
-- */
-- public void buildSignature(XMLNode node) {
-- writer.writeSignature((FieldDoc) fields.get(currentFieldIndex));
-- }
--
-- /**
-- * Build the deprecation information.
-- */
-- public void buildDeprecationInfo(XMLNode node) {
-- writer.writeDeprecated((FieldDoc) fields.get(currentFieldIndex));
-- }
--
-- /**
-- * Build the comments for the field. Do nothing if
-- * {@link Configuration#nocomment} is set to true.
-- */
-- public void buildFieldComments(XMLNode node) {
-- if (!configuration.nocomment) {
-- writer.writeComments((FieldDoc) fields.get(currentFieldIndex));
-- }
-- }
--
-- /**
-- * Build the tag information.
-- */
-- public void buildTagInfo(XMLNode node) {
-- writer.writeTags((FieldDoc) fields.get(currentFieldIndex));
-- }
--
-- /**
-- * Build the footer for the individual field.
-- */
-- public void buildFieldFooter(XMLNode node) {
-- writer.writeFieldFooter();
-- }
--
-- /**
-- * Build the overall footer.
-- */
-- public void buildFooter(XMLNode node) {
-- writer.writeFooter(classDoc);
-- }
--
-- /**
-- * Return the field writer for this builder.
-- *
-- * @return the field writer for this builder.
-- */
-- public FieldWriter getWriter() {
-- return writer;
-- }
-+ /**
-+ * Return the field writer for this builder.
-+ *
-+ * @return the field writer for this builder.
-+ */
-+ public FieldWriter getWriter() {
-+ return writer;
-+ }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/LayoutParser.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/LayoutParser.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/LayoutParser.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/LayoutParser.java
-@@ -76,7 +76,7 @@
- /**
- * Parse the XML specifying the layout of the documentation.
- *
-- * @return List the list of XML elements parsed.
-+ * @return the list of XML elements parsed.
- */
- public XMLNode parseXML(String root) {
- if (xmlElementsMap.containsKey(root)) {
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MemberSummaryBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MemberSummaryBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MemberSummaryBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MemberSummaryBuilder.java
-@@ -25,10 +25,10 @@
-
- package com.sun.tools.doclets.internal.toolkit.builders;
-
-+import java.util.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.javadoc.*;
--import java.util.*;
-
- /**
- * Builds the member summary.
-@@ -38,49 +38,50 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
- public class MemberSummaryBuilder extends AbstractMemberBuilder {
-
-- /**
-- * The XML root for this builder.
-- */
-- public static final String NAME = "MemberSummary";
-+ /**
-+ * The XML root for this builder.
-+ */
-+ public static final String NAME = "MemberSummary";
-
-- /**
-- * The visible members for the given class.
-- */
-- private VisibleMemberMap[] visibleMemberMaps;
-+ /**
-+ * The visible members for the given class.
-+ */
-+ private VisibleMemberMap[] visibleMemberMaps;
-
-- /**
-- * The member summary writers for the given class.
-- */
-- private MemberSummaryWriter[] memberSummaryWriters;
-+ /**
-+ * The member summary writers for the given class.
-+ */
-+ private MemberSummaryWriter[] memberSummaryWriters;
-
-- /**
-- * The type being documented.
-- */
-- private ClassDoc classDoc;
-+ /**
-+ * The type being documented.
-+ */
-+ private ClassDoc classDoc;
-
-- private MemberSummaryBuilder(Configuration configuration) {
-- super(configuration);
-- }
-+ private MemberSummaryBuilder(Configuration configuration) {
-+ super(configuration);
-+ }
-
-- /**
-- * Construct a new MemberSummaryBuilder.
-- *
-- * @param classWriter the writer for the class whose members are being
-- * summarized.
-- * @param configuration the current configuration of the doclet.
-- */
-- public static MemberSummaryBuilder getInstance(
-- ClassWriter classWriter, Configuration configuration)
-- throws Exception {
-- MemberSummaryBuilder builder = new MemberSummaryBuilder(configuration);
-- builder.classDoc = classWriter.getClassDoc();
-- builder.init(classWriter);
-- return builder;
-- }
-+ /**
-+ * Construct a new MemberSummaryBuilder.
-+ *
-+ * @param classWriter the writer for the class whose members are being
-+ * summarized.
-+ * @param configuration the current configuration of the doclet.
-+ */
-+ public static MemberSummaryBuilder getInstance(
-+ ClassWriter classWriter, Configuration configuration)
-+ throws Exception {
-+ MemberSummaryBuilder builder = new MemberSummaryBuilder(configuration);
-+ builder.classDoc = classWriter.getClassDoc();
-+ builder.init(classWriter);
-+ return builder;
-+ }
-
- /**
- * Construct a new MemberSummaryBuilder.
-@@ -90,8 +91,8 @@
- * @param configuration the current configuration of the doclet.
- */
- public static MemberSummaryBuilder getInstance(
-- AnnotationTypeWriter annotationTypeWriter, Configuration configuration)
-- throws Exception {
-+ AnnotationTypeWriter annotationTypeWriter, Configuration configuration)
-+ throws Exception {
- MemberSummaryBuilder builder = new MemberSummaryBuilder(configuration);
- builder.classDoc = annotationTypeWriter.getAnnotationTypeDoc();
- builder.init(annotationTypeWriter);
-@@ -100,200 +101,210 @@
-
- private void init(Object writer) throws Exception {
- visibleMemberMaps =
-- new VisibleMemberMap[VisibleMemberMap.NUM_MEMBER_TYPES];
-+ new VisibleMemberMap[VisibleMemberMap.NUM_MEMBER_TYPES];
- for (int i = 0; i < VisibleMemberMap.NUM_MEMBER_TYPES; i++) {
- visibleMemberMaps[i] =
-- new VisibleMemberMap(
-+ new VisibleMemberMap(
- classDoc,
- i,
- configuration.nodeprecated);
- }
- memberSummaryWriters =
-- new MemberSummaryWriter[VisibleMemberMap.NUM_MEMBER_TYPES];
-+ new MemberSummaryWriter[VisibleMemberMap.NUM_MEMBER_TYPES];
- for (int i = 0; i < VisibleMemberMap.NUM_MEMBER_TYPES; i++) {
- if (classDoc.isAnnotationType()) {
- memberSummaryWriters[i] =
- visibleMemberMaps[i].noVisibleMembers()?
- null :
- configuration.getWriterFactory().getMemberSummaryWriter(
-- (AnnotationTypeWriter) writer, i);
-+ (AnnotationTypeWriter) writer, i);
- } else {
- memberSummaryWriters[i] =
- visibleMemberMaps[i].noVisibleMembers()?
- null :
- configuration.getWriterFactory().getMemberSummaryWriter(
-- (ClassWriter) writer, i);
-+ (ClassWriter) writer, i);
- }
- }
-
- }
-
-- /**
-- * {@inheritDoc}
-- */
-- public String getName() {
-- return NAME;
-- }
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getName() {
-+ return NAME;
-+ }
-
-- /**
-- * Return the specified visible member map.
-- *
-- * @param type the type of visible member map to return.
-- * @return the specified visible member map.
-- * @throws ArrayIndexOutOfBoundsException when the type is invalid.
-- * @see VisibleMemberMap
-- */
-- public VisibleMemberMap getVisibleMemberMap(int type) {
-- return visibleMemberMaps[type];
-- }
-+ /**
-+ * Return the specified visible member map.
-+ *
-+ * @param type the type of visible member map to return.
-+ * @return the specified visible member map.
-+ * @throws ArrayIndexOutOfBoundsException when the type is invalid.
-+ * @see VisibleMemberMap
-+ */
-+ public VisibleMemberMap getVisibleMemberMap(int type) {
-+ return visibleMemberMaps[type];
-+ }
-
-- /**
-- * Return the specified member summary writer.
-- *
-- * @param type the type of member summary writer to return.
-- * @return the specified member summary writer.
-- * @throws ArrayIndexOutOfBoundsException when the type is invalid.
-- * @see VisibleMemberMap
-- */
-- public MemberSummaryWriter getMemberSummaryWriter(int type) {
-- return memberSummaryWriters[type];
-- }
-+ /**
-+ * Return the specified member summary writer.
-+ *
-+ * @param type the type of member summary writer to return.
-+ * @return the specified member summary writer.
-+ * @throws ArrayIndexOutOfBoundsException when the type is invalid.
-+ * @see VisibleMemberMap
-+ */
-+ public MemberSummaryWriter getMemberSummaryWriter(int type) {
-+ return memberSummaryWriters[type];
-+ }
-
-- /**
-- * Returns a list of methods that will be documented for the given class.
-- * This information can be used for doclet specific documentation
-- * generation.
-- *
-- * @param classDoc the {@link ClassDoc} we want to check.
-- * @param type the type of members to return.
-- * @return a list of methods that will be documented.
-- * @see VisibleMemberMap
-- */
-- public List members(int type) {
-- return visibleMemberMaps[type].getLeafClassMembers(configuration);
-- }
-+ /**
-+ * Returns a list of methods that will be documented for the given class.
-+ * This information can be used for doclet specific documentation
-+ * generation.
-+ *
-+ * @param classDoc the {@link ClassDoc} we want to check.
-+ * @param type the type of members to return.
-+ * @return a list of methods that will be documented.
-+ * @see VisibleMemberMap
-+ */
-+ public List<ProgramElementDoc> members(int type) {
-+ return visibleMemberMaps[type].getLeafClassMembers(configuration);
-+ }
-
-- /**
-- * Return true it there are any members to summarize.
-- *
-- * @return true if there are any members to summarize.
-- */
-- public boolean hasMembersToDocument() {
-+ /**
-+ * Return true it there are any members to summarize.
-+ *
-+ * @return true if there are any members to summarize.
-+ */
-+ public boolean hasMembersToDocument() {
- if (classDoc instanceof AnnotationTypeDoc) {
- return ((AnnotationTypeDoc) classDoc).elements().length > 0;
- }
-- for (int i = 0; i < VisibleMemberMap.NUM_MEMBER_TYPES; i++) {
-- VisibleMemberMap members = visibleMemberMaps[i];
-- if (!members.noVisibleMembers()) {
-- return true;
-- }
-- }
-- return false;
-+ for (int i = 0; i < VisibleMemberMap.NUM_MEMBER_TYPES; i++) {
-+ VisibleMemberMap members = visibleMemberMaps[i];
-+ if (!members.noVisibleMembers()) {
-+ return true;
-+ }
- }
-
-- /**
-- * Build the summary for the enum constants.
-- */
-- public void buildEnumConstantsSummary(XMLNode node) {
-- buildSummary(
-- memberSummaryWriters[VisibleMemberMap.ENUM_CONSTANTS],
-- visibleMemberMaps[VisibleMemberMap.ENUM_CONSTANTS]);
-- }
-+ return false;
-+ }
-
- /**
-- * Build the summary for the optional members.
-+ * Build the summary for the enum constants.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param memberSummaryTree the content tree to which the documentation will be added
- */
-- public void buildAnnotationTypeOptionalMemberSummary(XMLNode node) {
-- buildSummary(
-- memberSummaryWriters[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL],
-- visibleMemberMaps[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL]);
-+ public void buildEnumConstantsSummary(XMLNode node, Content memberSummaryTree) {
-+ MemberSummaryWriter writer =
-+ memberSummaryWriters[VisibleMemberMap.ENUM_CONSTANTS];
-+ VisibleMemberMap visibleMemberMap =
-+ visibleMemberMaps[VisibleMemberMap.ENUM_CONSTANTS];
-+ addSummary(writer, visibleMemberMap, false, memberSummaryTree);
- }
-
- /**
- * Build the summary for the optional members.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param memberSummaryTree the content tree to which the documentation will be added
- */
-- public void buildAnnotationTypeRequiredMemberSummary(XMLNode node) {
-- buildSummary(
-- memberSummaryWriters[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED],
-- visibleMemberMaps[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED]);
-+ public void buildAnnotationTypeOptionalMemberSummary(XMLNode node, Content memberSummaryTree) {
-+ MemberSummaryWriter writer =
-+ memberSummaryWriters[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL];
-+ VisibleMemberMap visibleMemberMap =
-+ visibleMemberMaps[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL];
-+ addSummary(writer, visibleMemberMap, false, memberSummaryTree);
- }
-
-- /**
-- * Build the summary for the fields.
-- */
-- public void buildFieldsSummary(XMLNode node) {
-- buildSummary(
-- memberSummaryWriters[VisibleMemberMap.FIELDS],
-- visibleMemberMaps[VisibleMemberMap.FIELDS]);
-- }
-+ /**
-+ * Build the summary for the optional members.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param memberSummaryTree the content tree to which the documentation will be added
-+ */
-+ public void buildAnnotationTypeRequiredMemberSummary(XMLNode node, Content memberSummaryTree) {
-+ MemberSummaryWriter writer =
-+ memberSummaryWriters[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED];
-+ VisibleMemberMap visibleMemberMap =
-+ visibleMemberMaps[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED];
-+ addSummary(writer, visibleMemberMap, false, memberSummaryTree);
-+ }
-
-- /**
-- * Build the inherited summary for the fields.
-- */
-- public void buildFieldsInheritedSummary(XMLNode node) {
-- buildInheritedSummary(
-- memberSummaryWriters[VisibleMemberMap.FIELDS],
-- visibleMemberMaps[VisibleMemberMap.FIELDS]);
-- }
-+ /**
-+ * Build the summary for the fields.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param memberSummaryTree the content tree to which the documentation will be added
-+ */
-+ public void buildFieldsSummary(XMLNode node, Content memberSummaryTree) {
-+ MemberSummaryWriter writer =
-+ memberSummaryWriters[VisibleMemberMap.FIELDS];
-+ VisibleMemberMap visibleMemberMap =
-+ visibleMemberMaps[VisibleMemberMap.FIELDS];
-+ addSummary(writer, visibleMemberMap, true, memberSummaryTree);
-+ }
-
-- /**
-- * Build the summary for the nested classes.
-- */
-- public void buildNestedClassesSummary(XMLNode node) {
-- buildSummary(
-- memberSummaryWriters[VisibleMemberMap.INNERCLASSES],
-- visibleMemberMaps[VisibleMemberMap.INNERCLASSES]);
-- }
-+ /**
-+ * Build the summary for the nested classes.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param memberSummaryTree the content tree to which the documentation will be added
-+ */
-+ public void buildNestedClassesSummary(XMLNode node, Content memberSummaryTree) {
-+ MemberSummaryWriter writer =
-+ memberSummaryWriters[VisibleMemberMap.INNERCLASSES];
-+ VisibleMemberMap visibleMemberMap =
-+ visibleMemberMaps[VisibleMemberMap.INNERCLASSES];
-+ addSummary(writer, visibleMemberMap, true, memberSummaryTree);
-+ }
-
-- /**
-- * Build the inherited summary for the nested classes.
-- */
-- public void buildNestedClassesInheritedSummary(XMLNode node) {
-- buildInheritedSummary(
-- memberSummaryWriters[VisibleMemberMap.INNERCLASSES],
-- visibleMemberMaps[VisibleMemberMap.INNERCLASSES]);
-- }
-+ /**
-+ * Build the method summary.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param memberSummaryTree the content tree to which the documentation will be added
-+ */
-+ public void buildMethodsSummary(XMLNode node, Content memberSummaryTree) {
-+ MemberSummaryWriter writer =
-+ memberSummaryWriters[VisibleMemberMap.METHODS];
-+ VisibleMemberMap visibleMemberMap =
-+ visibleMemberMaps[VisibleMemberMap.METHODS];
-+ addSummary(writer, visibleMemberMap, true, memberSummaryTree);
-+ }
-
-- /**
-- * Build the method summary.
-- */
-- public void buildMethodsSummary(XMLNode node) {
-- buildSummary(
-- memberSummaryWriters[VisibleMemberMap.METHODS],
-- visibleMemberMaps[VisibleMemberMap.METHODS]);
-- }
-+ /**
-+ * Build the constructor summary.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param memberSummaryTree the content tree to which the documentation will be added
-+ */
-+ public void buildConstructorsSummary(XMLNode node, Content memberSummaryTree) {
-+ MemberSummaryWriter writer =
-+ memberSummaryWriters[VisibleMemberMap.CONSTRUCTORS];
-+ VisibleMemberMap visibleMemberMap =
-+ visibleMemberMaps[VisibleMemberMap.CONSTRUCTORS];
-+ addSummary(writer, visibleMemberMap, false, memberSummaryTree);
-+ }
-
-- /**
-- * Build the inherited method summary.
-- */
-- public void buildMethodsInheritedSummary(XMLNode node) {
-- buildInheritedSummary(
-- memberSummaryWriters[VisibleMemberMap.METHODS],
-- visibleMemberMaps[VisibleMemberMap.METHODS]);
-- }
--
-- /**
-- * Build the constructor summary.
-- */
-- public void buildConstructorsSummary(XMLNode node) {
-- buildSummary(
-- memberSummaryWriters[VisibleMemberMap.CONSTRUCTORS],
-- visibleMemberMaps[VisibleMemberMap.CONSTRUCTORS]);
-- }
--
-- /**
-- * Build the member summary for the given members.
-- *
-- * @param writer the summary writer to write the output.
-- * @param visibleMemberMap the given members to summarize.
-- */
-- private void buildSummary(MemberSummaryWriter writer,
-- VisibleMemberMap visibleMemberMap) {
-- List members = new ArrayList(visibleMemberMap.getLeafClassMembers(
-- configuration));
-+ /**
-+ * Build the member summary for the given members.
-+ *
-+ * @param writer the summary writer to write the output.
-+ * @param visibleMemberMap the given members to summarize.
-+ * @param summaryTreeList list of content trees to which the documentation will be added
-+ */
-+ private void buildSummary(MemberSummaryWriter writer,
-+ VisibleMemberMap visibleMemberMap, LinkedList<Content> summaryTreeList) {
-+ List<ProgramElementDoc> members = new ArrayList(visibleMemberMap.getLeafClassMembers(
-+ configuration));
- if (members.size() > 0) {
- Collections.sort(members);
-- writer.writeMemberSummaryHeader(classDoc);
-+ Content tableTree = writer.getSummaryTableTree(classDoc);
- for (int i = 0; i < members.size(); i++) {
- ProgramElementDoc member = (ProgramElementDoc) members.get(i);
- Tag[] firstSentenceTags = member.firstSentenceTags();
-@@ -301,32 +312,32 @@
- //Inherit comments from overriden or implemented method if
- //necessary.
- DocFinder.Output inheritedDoc =
-- DocFinder.search(new DocFinder.Input((MethodDoc) member));
-+ DocFinder.search(new DocFinder.Input((MethodDoc) member));
- if (inheritedDoc.holder != null &&
- inheritedDoc.holder.firstSentenceTags().length > 0) {
- firstSentenceTags = inheritedDoc.holder.firstSentenceTags();
- }
- }
-- writer.writeMemberSummary(classDoc, member, firstSentenceTags,
-- i == 0, i == members.size() - 1);
-+ writer.addMemberSummary(classDoc, member, firstSentenceTags, tableTree, i);
- }
-- writer.writeMemberSummaryFooter(classDoc);
-+ summaryTreeList.add(tableTree);
- }
-- }
-+ }
-
- /**
- * Build the inherited member summary for the given methods.
- *
-- * @param writer the writer for this member summary.
-+ * @param writer the writer for this member summary.
- * @param visibleMemberMap the map for the members to document.
-+ * @param summaryTreeList list of content trees to which the documentation will be added
- */
-- private void buildInheritedSummary(MemberSummaryWriter writer,
-- VisibleMemberMap visibleMemberMap) {
-+ private void buildInheritedSummary(MemberSummaryWriter writer,
-+ VisibleMemberMap visibleMemberMap, LinkedList<Content> summaryTreeList) {
- for (Iterator iter = visibleMemberMap.getVisibleClassesList().iterator();
- iter.hasNext();) {
- ClassDoc inhclass = (ClassDoc) (iter.next());
- if (! (inhclass.isPublic() ||
-- Util.isLinkable(inhclass, configuration))) {
-+ Util.isLinkable(inhclass, configuration))) {
- continue;
- }
- if (inhclass == classDoc) {
-@@ -335,18 +346,45 @@
- List inhmembers = visibleMemberMap.getMembersFor(inhclass);
- if (inhmembers.size() > 0) {
- Collections.sort(inhmembers);
-- writer.writeInheritedMemberSummaryHeader(inhclass);
-+ Content inheritedTree = writer.getInheritedSummaryHeader(inhclass);
-+ Content linksTree = writer.getInheritedSummaryLinksTree();
- for (int j = 0; j < inhmembers.size(); ++j) {
-- writer.writeInheritedMemberSummary(
-- inhclass.isPackagePrivate() &&
-+ writer.addInheritedMemberSummary(
-+ inhclass.isPackagePrivate() &&
- ! Util.isLinkable(inhclass, configuration) ?
- classDoc : inhclass,
-- (ProgramElementDoc) inhmembers.get(j),
-- j == 0,
-- j == inhmembers.size() - 1);
-+ (ProgramElementDoc) inhmembers.get(j),
-+ j == 0,
-+ j == inhmembers.size() - 1, linksTree);
- }
-- writer.writeInheritedMemberSummaryFooter(inhclass);
-+ inheritedTree.addContent(linksTree);
-+ summaryTreeList.add(writer.getMemberTree(inheritedTree));
- }
- }
- }
-+
-+ /**
-+ * Add the summary for the documentation.
-+ *
-+ * @param writer the writer for this member summary.
-+ * @param visibleMemberMap the map for the members to document.
-+ * @param showInheritedSummary true if inherited summary should be documented
-+ * @param memberSummaryTree the content tree to which the documentation will be added
-+ */
-+ private void addSummary(MemberSummaryWriter writer,
-+ VisibleMemberMap visibleMemberMap, boolean showInheritedSummary,
-+ Content memberSummaryTree) {
-+ LinkedList<Content> summaryTreeList = new LinkedList<Content>();
-+ buildSummary(writer, visibleMemberMap, summaryTreeList);
-+ if (showInheritedSummary)
-+ buildInheritedSummary(writer, visibleMemberMap, summaryTreeList);
-+ if (!summaryTreeList.isEmpty()) {
-+ Content memberTree = writer.getMemberSummaryHeader(
-+ classDoc, memberSummaryTree);
-+ for (int i = 0; i < summaryTreeList.size(); i++) {
-+ memberTree.addContent(summaryTreeList.get(i));
-+ }
-+ memberSummaryTree.addContent(writer.getMemberTree(memberTree));
-+ }
-+ }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MethodBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MethodBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MethodBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MethodBuilder.java
-@@ -25,10 +25,10 @@
-
- package com.sun.tools.doclets.internal.toolkit.builders;
-
-+import java.util.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.javadoc.*;
--import java.util.*;
-
- /**
- * Builds documentation for a method.
-@@ -38,164 +38,170 @@
- * Do not use it as an API
- *
- * @author Jamie Ho
-+ * @author Bhavesh Patel (Modified)
- * @since 1.5
- */
- public class MethodBuilder extends AbstractMemberBuilder {
-
-- /**
-- * The index of the current field that is being documented at this point
-- * in time.
-- */
-- private int currentMethodIndex;
-+ /**
-+ * The index of the current field that is being documented at this point
-+ * in time.
-+ */
-+ private int currentMethodIndex;
-
-- /**
-- * The class whose methods are being documented.
-- */
-- private ClassDoc classDoc;
-+ /**
-+ * The class whose methods are being documented.
-+ */
-+ private ClassDoc classDoc;
-
-- /**
-- * The visible methods for the given class.
-- */
-- private VisibleMemberMap visibleMemberMap;
-+ /**
-+ * The visible methods for the given class.
-+ */
-+ private VisibleMemberMap visibleMemberMap;
-
-- /**
-- * The writer to output the method documentation.
-- */
-- private MethodWriter writer;
-+ /**
-+ * The writer to output the method documentation.
-+ */
-+ private MethodWriter writer;
-
-- /**
-- * The methods being documented.
-- */
-- private List methods;
-+ /**
-+ * The methods being documented.
-+ */
-+ private List<ProgramElementDoc> methods;
-
-- private MethodBuilder(Configuration configuration) {
-- super(configuration);
-+ private MethodBuilder(Configuration configuration) {
-+ super(configuration);
-+ }
-+
-+ /**
-+ * Construct a new MethodBuilder.
-+ *
-+ * @param configuration the current configuration of the doclet.
-+ * @param classDoc the class whoses members are being documented.
-+ * @param writer the doclet specific writer.
-+ *
-+ * @return an instance of a MethodBuilder.
-+ */
-+ public static MethodBuilder getInstance(
-+ Configuration configuration,
-+ ClassDoc classDoc,
-+ MethodWriter writer) {
-+ MethodBuilder builder = new MethodBuilder(configuration);
-+ builder.classDoc = classDoc;
-+ builder.writer = writer;
-+ builder.visibleMemberMap =
-+ new VisibleMemberMap(
-+ classDoc,
-+ VisibleMemberMap.METHODS,
-+ configuration.nodeprecated);
-+ builder.methods =
-+ new ArrayList<ProgramElementDoc>(builder.visibleMemberMap.getLeafClassMembers(
-+ configuration));
-+ if (configuration.getMemberComparator() != null) {
-+ Collections.sort(
-+ builder.methods,
-+ configuration.getMemberComparator());
- }
-
-- /**
-- * Construct a new MethodBuilder.
-- *
-- * @param configuration the current configuration of the doclet.
-- * @param classDoc the class whoses members are being documented.
-- * @param writer the doclet specific writer.
-- *
-- * @return an instance of a MethodBuilder.
-- */
-- public static MethodBuilder getInstance(
-- Configuration configuration,
-- ClassDoc classDoc,
-- MethodWriter writer) {
-- MethodBuilder builder = new MethodBuilder(configuration);
-- builder.classDoc = classDoc;
-- builder.writer = writer;
-- builder.visibleMemberMap =
-- new VisibleMemberMap(
-- classDoc,
-- VisibleMemberMap.METHODS,
-- configuration.nodeprecated);
-- builder.methods =
-- new ArrayList(builder.visibleMemberMap.getLeafClassMembers(
-- configuration));
-- if (configuration.getMemberComparator() != null) {
-- Collections.sort(
-- builder.methods,
-- configuration.getMemberComparator());
-- }
-- return builder;
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getName() {
-+ return "MethodDetails";
-+ }
-+
-+ /**
-+ * Returns a list of methods that will be documented for the given class.
-+ * This information can be used for doclet specific documentation
-+ * generation.
-+ *
-+ * @param classDoc the {@link ClassDoc} we want to check.
-+ * @return a list of methods that will be documented.
-+ */
-+ public List<ProgramElementDoc> members(ClassDoc classDoc) {
-+ return visibleMemberMap.getMembersFor(classDoc);
-+ }
-+
-+ /**
-+ * Returns the visible member map for the methods of this class.
-+ *
-+ * @return the visible member map for the methods of this class.
-+ */
-+ public VisibleMemberMap getVisibleMemberMap() {
-+ return visibleMemberMap;
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public boolean hasMembersToDocument() {
-+ return methods.size() > 0;
-+ }
-+
-+ /**
-+ * Build the method documentation.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param memberDetailsTree the content tree to which the documentation will be added
-+ */
-+ public void buildMethodDoc(XMLNode node, Content memberDetailsTree) {
-+ if (writer == null) {
-+ return;
- }
-+ int size = methods.size();
-+ if (size > 0) {
-+ Content methodDetailsTree = writer.getMethodDetailsTreeHeader(
-+ classDoc, memberDetailsTree);
-+ for (currentMethodIndex = 0; currentMethodIndex < size;
-+ currentMethodIndex++) {
-+ Content methodDocTree = writer.getMethodDocTreeHeader(
-+ (MethodDoc) methods.get(currentMethodIndex),
-+ methodDetailsTree);
-+ buildChildren(node, methodDocTree);
-+ methodDetailsTree.addContent(writer.getMethodDoc(
-+ methodDocTree, (currentMethodIndex == size - 1)));
-+ }
-+ memberDetailsTree.addContent(
-+ writer.getMethodDetails(methodDetailsTree));
-+ }
-+ }
-
-- /**
-- * {@inheritDoc}
-- */
-- public String getName() {
-- return "MethodDetails";
-- }
-+ /**
-+ * Build the signature.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param methodDocTree the content tree to which the documentation will be added
-+ */
-+ public void buildSignature(XMLNode node, Content methodDocTree) {
-+ methodDocTree.addContent(
-+ writer.getSignature((MethodDoc) methods.get(currentMethodIndex)));
-+ }
-
-- /**
-- * Returns a list of methods that will be documented for the given class.
-- * This information can be used for doclet specific documentation
-- * generation.
-- *
-- * @param classDoc the {@link ClassDoc} we want to check.
-- * @return a list of methods that will be documented.
-- */
-- public List members(ClassDoc classDoc) {
-- return visibleMemberMap.getMembersFor(classDoc);
-- }
-+ /**
-+ * Build the deprecation information.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param methodDocTree the content tree to which the documentation will be added
-+ */
-+ public void buildDeprecationInfo(XMLNode node, Content methodDocTree) {
-+ writer.addDeprecated(
-+ (MethodDoc) methods.get(currentMethodIndex), methodDocTree);
-+ }
-
-- /**
-- * Returns the visible member map for the methods of this class.
-- *
-- * @return the visible member map for the methods of this class.
-- */
-- public VisibleMemberMap getVisibleMemberMap() {
-- return visibleMemberMap;
-- }
--
-- /**
-- * {@inheritDoc}
-- */
-- public boolean hasMembersToDocument() {
-- return methods.size() > 0;
-- }
--
-- /**
-- * Build the method documentation.
-- */
-- public void buildMethodDoc(XMLNode node) {
-- if (writer == null) {
-- return;
-- }
-- for (currentMethodIndex = 0;
-- currentMethodIndex < methods.size();
-- currentMethodIndex++) {
-- buildChildren(node);
-- }
-- }
--
-- /**
-- * Build the overall header.
-- */
-- public void buildHeader(XMLNode node) {
-- writer.writeHeader(
-- classDoc,
-- configuration.getText("doclet.Method_Detail"));
-- }
--
-- /**
-- * Build the header for the individual method.
-- */
-- public void buildMethodHeader(XMLNode node) {
-- writer.writeMethodHeader(
-- (MethodDoc) methods.get(currentMethodIndex),
-- currentMethodIndex == 0);
-- }
--
-- /**
-- * Build the signature.
-- */
-- public void buildSignature(XMLNode node) {
-- writer.writeSignature((MethodDoc) methods.get(currentMethodIndex));
-- }
--
-- /**
-- * Build the deprecation information.
-- */
-- public void buildDeprecationInfo(XMLNode node) {
-- writer.writeDeprecated((MethodDoc) methods.get(currentMethodIndex));
-- }
--
-- /**
-- * Build the comments for the method. Do nothing if
-- * {@link Configuration#nocomment} is set to true. If this method
-- */
-- public void buildMethodComments(XMLNode node) {
-- if (!configuration.nocomment) {
-+ /**
-+ * Build the comments for the method. Do nothing if
-+ * {@link Configuration#nocomment} is set to true.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param methodDocTree the content tree to which the documentation will be added
-+ */
-+ public void buildMethodComments(XMLNode node, Content methodDocTree) {
-+ if (!configuration.nocomment) {
- MethodDoc method = (MethodDoc) methods.get(currentMethodIndex);
-
- if (method.inlineTags().length == 0) {
- DocFinder.Output docs = DocFinder.search(
-- new DocFinder.Input(method));
-+ new DocFinder.Input(method));
- method = docs.inlineTags != null && docs.inlineTags.length > 0 ?
- (MethodDoc) docs.holder : method;
-
-@@ -203,39 +209,27 @@
- //NOTE: When we fix the bug where ClassDoc.interfaceTypes() does
- // not pass all implemented interfaces, holder will be the
- // interface type. For now, it is really the erasure.
-- writer.writeComments(method.containingClass(), method);
-- }
-+ writer.addComments(method.containingClass(), method, methodDocTree);
- }
-+ }
-
-+ /**
-+ * Build the tag information.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param methodDocTree the content tree to which the documentation will be added
-+ */
-+ public void buildTagInfo(XMLNode node, Content methodDocTree) {
-+ writer.addTags((MethodDoc) methods.get(currentMethodIndex),
-+ methodDocTree);
-+ }
-
--
-- /**
-- * Build the tag information.
-- */
-- public void buildTagInfo(XMLNode node) {
-- writer.writeTags((MethodDoc) methods.get(currentMethodIndex));
-- }
--
-- /**
-- * Build the footer of the method.
-- */
-- public void buildMethodFooter(XMLNode node) {
-- writer.writeMethodFooter();
-- }
--
-- /**
-- * Build the overall footer.
-- */
-- public void buildFooter(XMLNode node) {
-- writer.writeFooter(classDoc);
-- }
--
-- /**
-- * Return the method writer for this builder.
-- *
-- * @return the method writer for this builder.
-- */
-- public MethodWriter getWriter() {
-- return writer;
-- }
-+ /**
-+ * Return the method writer for this builder.
-+ *
-+ * @return the method writer for this builder.
-+ */
-+ public MethodWriter getWriter() {
-+ return writer;
-+ }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/PackageSummaryBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/PackageSummaryBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/PackageSummaryBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/PackageSummaryBuilder.java
-@@ -25,10 +25,10 @@
-
- package com.sun.tools.doclets.internal.toolkit.builders;
-
-+import java.io.*;
-+import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
- import com.sun.tools.doclets.internal.toolkit.*;
--import com.sun.javadoc.*;
--import java.io.*;
-
- /**
- * Builds the summary for a given package.
-@@ -42,281 +42,315 @@
- * @since 1.5
- */
- public class PackageSummaryBuilder extends AbstractBuilder {
-+ /**
-+ * The root element of the package summary XML is {@value}.
-+ */
-+ public static final String ROOT = "PackageDoc";
-
-- /**
-- * The root element of the package summary XML is {@value}.
-- */
-- public static final String ROOT = "PackageDoc";
-+ /**
-+ * The package being documented.
-+ */
-+ private PackageDoc packageDoc;
-
-- /**
-- * The package being documented.
-- */
-- private PackageDoc packageDoc;
-+ /**
-+ * The doclet specific writer that will output the result.
-+ */
-+ private PackageSummaryWriter packageWriter;
-
-- /**
-- * The doclet specific writer that will output the result.
-- */
-- private PackageSummaryWriter packageWriter;
-+ /**
-+ * The content that will be added to the package summary documentation tree.
-+ */
-+ private Content contentTree;
-
-- private PackageSummaryBuilder(Configuration configuration) {
-- super(configuration);
-+ private PackageSummaryBuilder(Configuration configuration) {
-+ super(configuration);
-+ }
-+
-+ /**
-+ * Construct a new PackageSummaryBuilder.
-+ * @param configuration the current configuration of the doclet.
-+ * @param pkg the package being documented.
-+ * @param packageWriter the doclet specific writer that will output the
-+ * result.
-+ *
-+ * @return an instance of a PackageSummaryBuilder.
-+ */
-+ public static PackageSummaryBuilder getInstance(
-+ Configuration configuration,
-+ PackageDoc pkg,
-+ PackageSummaryWriter packageWriter) {
-+ PackageSummaryBuilder builder =
-+ new PackageSummaryBuilder(configuration);
-+ builder.packageDoc = pkg;
-+ builder.packageWriter = packageWriter;
-+ return builder;
-+ }
-+
-+ /**
-+ * Build the package summary.
-+ */
-+ public void build() throws IOException {
-+ if (packageWriter == null) {
-+ //Doclet does not support this output.
-+ return;
-+ }
-+ build(LayoutParser.getInstance(configuration).parseXML(ROOT), contentTree);
-+ }
-+
-+ /**
-+ * {@inheritDoc}
-+ */
-+ public String getName() {
-+ return ROOT;
-+ }
-+
-+ /**
-+ * Build the package documentation.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param contentTree the content tree to which the documentation will be added
-+ */
-+ public void buildPackageDoc(XMLNode node, Content contentTree) throws Exception {
-+ contentTree = packageWriter.getPackageHeader(
-+ Util.getPackageName(packageDoc));
-+ buildChildren(node, contentTree);
-+ packageWriter.addPackageFooter(contentTree);
-+ packageWriter.printDocument(contentTree);
-+ packageWriter.close();
-+ Util.copyDocFiles(
-+ configuration,
-+ Util.getPackageSourcePath(configuration, packageDoc),
-+ DirectoryManager.getDirectoryPath(packageDoc)
-+ + File.separator
-+ + DocletConstants.DOC_FILES_DIR_NAME,
-+ true);
-+ }
-+
-+ /**
-+ * Build the content for the package doc.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param contentTree the content tree to which the package contents
-+ * will be added
-+ */
-+ public void buildContent(XMLNode node, Content contentTree) {
-+ Content packageContentTree = packageWriter.getContentHeader();
-+ buildChildren(node, packageContentTree);
-+ contentTree.addContent(packageContentTree);
-+ }
-+
-+ /**
-+ * Build the package summary.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param packageContentTree the package content tree to which the summaries will
-+ * be added
-+ */
-+ public void buildSummary(XMLNode node, Content packageContentTree) {
-+ Content summaryContentTree = packageWriter.getSummaryHeader();
-+ buildChildren(node, summaryContentTree);
-+ packageContentTree.addContent(summaryContentTree);
-+ }
-+
-+ /**
-+ * Build the summary for the interfaces in this package.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param summaryContentTree the summary tree to which the interface summary
-+ * will be added
-+ */
-+ public void buildInterfaceSummary(XMLNode node, Content summaryContentTree) {
-+ String interfaceTableSummary =
-+ configuration.getText("doclet.Member_Table_Summary",
-+ configuration.getText("doclet.Interface_Summary"),
-+ configuration.getText("doclet.interfaces"));
-+ String[] interfaceTableHeader = new String[] {
-+ configuration.getText("doclet.Interface"),
-+ configuration.getText("doclet.Description")
-+ };
-+ ClassDoc[] interfaces =
-+ packageDoc.isIncluded()
-+ ? packageDoc.interfaces()
-+ : configuration.classDocCatalog.interfaces(
-+ Util.getPackageName(packageDoc));
-+ if (interfaces.length > 0) {
-+ packageWriter.addClassesSummary(
-+ interfaces,
-+ configuration.getText("doclet.Interface_Summary"),
-+ interfaceTableSummary, interfaceTableHeader, summaryContentTree);
- }
-
-- /**
-- * Construct a new PackageSummaryBuilder.
-- * @param configuration the current configuration of the doclet.
-- * @param pkg the package being documented.
-- * @param packageWriter the doclet specific writer that will output the
-- * result.
-- *
-- * @return an instance of a PackageSummaryBuilder.
-- */
-- public static PackageSummaryBuilder getInstance(
-- Configuration configuration,
-- PackageDoc pkg,
-- PackageSummaryWriter packageWriter) {
-- PackageSummaryBuilder builder =
-- new PackageSummaryBuilder(configuration);
-- builder.packageDoc = pkg;
-- builder.packageWriter = packageWriter;
-- return builder;
-+ /**
-+ * Build the summary for the classes in this package.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param summaryContentTree the summary tree to which the class summary will
-+ * be added
-+ */
-+ public void buildClassSummary(XMLNode node, Content summaryContentTree) {
-+ String classTableSummary =
-+ configuration.getText("doclet.Member_Table_Summary",
-+ configuration.getText("doclet.Class_Summary"),
-+ configuration.getText("doclet.classes"));
-+ String[] classTableHeader = new String[] {
-+ configuration.getText("doclet.Class"),
-+ configuration.getText("doclet.Description")
-+ };
-+ ClassDoc[] classes =
-+ packageDoc.isIncluded()
-+ ? packageDoc.ordinaryClasses()
-+ : configuration.classDocCatalog.ordinaryClasses(
-+ Util.getPackageName(packageDoc));
-+ if (classes.length > 0) {
-+ packageWriter.addClassesSummary(
-+ classes,
-+ configuration.getText("doclet.Class_Summary"),
-+ classTableSummary, classTableHeader, summaryContentTree);
-+ }
-+ }
-+
-+ /**
-+ * Build the summary for the enums in this package.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param summaryContentTree the summary tree to which the enum summary will
-+ * be added
-+ */
-+ public void buildEnumSummary(XMLNode node, Content summaryContentTree) {
-+ String enumTableSummary =
-+ configuration.getText("doclet.Member_Table_Summary",
-+ configuration.getText("doclet.Enum_Summary"),
-+ configuration.getText("doclet.enums"));
-+ String[] enumTableHeader = new String[] {
-+ configuration.getText("doclet.Enum"),
-+ configuration.getText("doclet.Description")
-+ };
-+ ClassDoc[] enums =
-+ packageDoc.isIncluded()
-+ ? packageDoc.enums()
-+ : configuration.classDocCatalog.enums(
-+ Util.getPackageName(packageDoc));
-+ if (enums.length > 0) {
-+ packageWriter.addClassesSummary(
-+ enums,
-+ configuration.getText("doclet.Enum_Summary"),
-+ enumTableSummary, enumTableHeader, summaryContentTree);
-+ }
-+ }
-+
-+ /**
-+ * Build the summary for the exceptions in this package.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param summaryContentTree the summary tree to which the exception summary will
-+ * be added
-+ */
-+ public void buildExceptionSummary(XMLNode node, Content summaryContentTree) {
-+ String exceptionTableSummary =
-+ configuration.getText("doclet.Member_Table_Summary",
-+ configuration.getText("doclet.Exception_Summary"),
-+ configuration.getText("doclet.exceptions"));
-+ String[] exceptionTableHeader = new String[] {
-+ configuration.getText("doclet.Exception"),
-+ configuration.getText("doclet.Description")
-+ };
-+ ClassDoc[] exceptions =
-+ packageDoc.isIncluded()
-+ ? packageDoc.exceptions()
-+ : configuration.classDocCatalog.exceptions(
-+ Util.getPackageName(packageDoc));
-+ if (exceptions.length > 0) {
-+ packageWriter.addClassesSummary(
-+ exceptions,
-+ configuration.getText("doclet.Exception_Summary"),
-+ exceptionTableSummary, exceptionTableHeader, summaryContentTree);
-+ }
-+ }
-+
-+ /**
-+ * Build the summary for the errors in this package.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param summaryContentTree the summary tree to which the error summary will
-+ * be added
-+ */
-+ public void buildErrorSummary(XMLNode node, Content summaryContentTree) {
-+ String errorTableSummary =
-+ configuration.getText("doclet.Member_Table_Summary",
-+ configuration.getText("doclet.Error_Summary"),
-+ configuration.getText("doclet.errors"));
-+ String[] errorTableHeader = new String[] {
-+ configuration.getText("doclet.Error"),
-+ configuration.getText("doclet.Description")
-+ };
-+ ClassDoc[] errors =
-+ packageDoc.isIncluded()
-+ ? packageDoc.errors()
-+ : configuration.classDocCatalog.errors(
-+ Util.getPackageName(packageDoc));
-+ if (errors.length > 0) {
-+ packageWriter.addClassesSummary(
-+ errors,
-+ configuration.getText("doclet.Error_Summary"),
-+ errorTableSummary, errorTableHeader, summaryContentTree);
-+ }
-+ }
-+
-+ /**
-+ * Build the summary for the annotation type in this package.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param summaryContentTree the summary tree to which the annotation type
-+ * summary will be added
-+ */
-+ public void buildAnnotationTypeSummary(XMLNode node, Content summaryContentTree) {
-+ String annotationtypeTableSummary =
-+ configuration.getText("doclet.Member_Table_Summary",
-+ configuration.getText("doclet.Annotation_Types_Summary"),
-+ configuration.getText("doclet.annotationtypes"));
-+ String[] annotationtypeTableHeader = new String[] {
-+ configuration.getText("doclet.AnnotationType"),
-+ configuration.getText("doclet.Description")
-+ };
-+ ClassDoc[] annotationTypes =
-+ packageDoc.isIncluded()
-+ ? packageDoc.annotationTypes()
-+ : configuration.classDocCatalog.annotationTypes(
-+ Util.getPackageName(packageDoc));
-+ if (annotationTypes.length > 0) {
-+ packageWriter.addClassesSummary(
-+ annotationTypes,
-+ configuration.getText("doclet.Annotation_Types_Summary"),
-+ annotationtypeTableSummary, annotationtypeTableHeader,
-+ summaryContentTree);
-+ }
-+ }
-+
-+ /**
-+ * Build the description of the summary.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param packageContentTree the tree to which the package description will
-+ * be added
-+ */
-+ public void buildPackageDescription(XMLNode node, Content packageContentTree) {
-+ if (configuration.nocomment) {
-+ return;
-+ }
-+ packageWriter.addPackageDescription(packageContentTree);
-+ }
-+
-+ /**
-+ * Build the tags of the summary.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param packageContentTree the tree to which the package tags will be added
-+ */
-+ public void buildPackageTags(XMLNode node, Content packageContentTree) {
-+ if (configuration.nocomment) {
-+ return;
- }
-
-- /**
-- * Build the package summary.
-- */
-- public void build() throws IOException {
-- if (packageWriter == null) {
-- //Doclet does not support this output.
-- return;
-- }
-- build(LayoutParser.getInstance(configuration).parseXML(ROOT));
-- }
--
-- /**
-- * {@inheritDoc}
-- */
-- public String getName() {
-- return ROOT;
-- }
--
-- /**
-- * Build the package documentation.
-- */
-- public void buildPackageDoc(XMLNode node) throws Exception {
-- buildChildren(node);
-- packageWriter.close();
-- Util.copyDocFiles(
-- configuration,
-- Util.getPackageSourcePath(configuration, packageDoc),
-- DirectoryManager.getDirectoryPath(packageDoc)
-- + File.separator
-- + DocletConstants.DOC_FILES_DIR_NAME,
-- true);
-- }
--
-- /**
-- * Build the header of the summary.
-- */
-- public void buildPackageHeader(XMLNode node) {
-- packageWriter.writePackageHeader(Util.getPackageName(packageDoc));
-- }
--
-- /**
-- * Build the description of the summary.
-- */
-- public void buildPackageDescription(XMLNode node) {
-- if (configuration.nocomment) {
-- return;
-- }
-- packageWriter.writePackageDescription();
-- }
--
-- /**
-- * Build the tags of the summary.
-- */
-- public void buildPackageTags(XMLNode node) {
-- if (configuration.nocomment) {
-- return;
-- }
-- packageWriter.writePackageTags();
-- }
--
-- /**
-- * Build the package summary.
-- */
-- public void buildSummary(XMLNode node) {
-- buildChildren(node);
-- }
--
-- /**
-- * Build the overall header.
-- */
-- public void buildSummaryHeader(XMLNode node) {
-- packageWriter.writeSummaryHeader();
-- }
--
-- /**
-- * Build the overall footer.
-- */
-- public void buildSummaryFooter(XMLNode node) {
-- packageWriter.writeSummaryFooter();
-- }
--
-- /**
-- * Build the summary for the classes in this package.
-- */
-- public void buildClassSummary(XMLNode node) {
-- String classTableSummary =
-- configuration.getText("doclet.Member_Table_Summary",
-- configuration.getText("doclet.Class_Summary"),
-- configuration.getText("doclet.classes"));
-- String[] classTableHeader = new String[] {
-- configuration.getText("doclet.Class"),
-- configuration.getText("doclet.Description")
-- };
-- ClassDoc[] classes =
-- packageDoc.isIncluded()
-- ? packageDoc.ordinaryClasses()
-- : configuration.classDocCatalog.ordinaryClasses(
-- Util.getPackageName(packageDoc));
-- if (classes.length > 0) {
-- packageWriter.writeClassesSummary(
-- classes,
-- configuration.getText("doclet.Class_Summary"),
-- classTableSummary, classTableHeader);
-- }
-- }
--
-- /**
-- * Build the summary for the interfaces in this package.
-- */
-- public void buildInterfaceSummary(XMLNode node) {
-- String interfaceTableSummary =
-- configuration.getText("doclet.Member_Table_Summary",
-- configuration.getText("doclet.Interface_Summary"),
-- configuration.getText("doclet.interfaces"));
-- String[] interfaceTableHeader = new String[] {
-- configuration.getText("doclet.Interface"),
-- configuration.getText("doclet.Description")
-- };
-- ClassDoc[] interfaces =
-- packageDoc.isIncluded()
-- ? packageDoc.interfaces()
-- : configuration.classDocCatalog.interfaces(
-- Util.getPackageName(packageDoc));
-- if (interfaces.length > 0) {
-- packageWriter.writeClassesSummary(
-- interfaces,
-- configuration.getText("doclet.Interface_Summary"),
-- interfaceTableSummary, interfaceTableHeader);
-- }
-- }
--
-- /**
-- * Build the summary for the enums in this package.
-- */
-- public void buildAnnotationTypeSummary(XMLNode node) {
-- String annotationtypeTableSummary =
-- configuration.getText("doclet.Member_Table_Summary",
-- configuration.getText("doclet.Annotation_Types_Summary"),
-- configuration.getText("doclet.annotationtypes"));
-- String[] annotationtypeTableHeader = new String[] {
-- configuration.getText("doclet.AnnotationType"),
-- configuration.getText("doclet.Description")
-- };
-- ClassDoc[] annotationTypes =
-- packageDoc.isIncluded()
-- ? packageDoc.annotationTypes()
-- : configuration.classDocCatalog.annotationTypes(
-- Util.getPackageName(packageDoc));
-- if (annotationTypes.length > 0) {
-- packageWriter.writeClassesSummary(
-- annotationTypes,
-- configuration.getText("doclet.Annotation_Types_Summary"),
-- annotationtypeTableSummary, annotationtypeTableHeader);
-- }
-- }
--
-- /**
-- * Build the summary for the enums in this package.
-- */
-- public void buildEnumSummary(XMLNode node) {
-- String enumTableSummary =
-- configuration.getText("doclet.Member_Table_Summary",
-- configuration.getText("doclet.Enum_Summary"),
-- configuration.getText("doclet.enums"));
-- String[] enumTableHeader = new String[] {
-- configuration.getText("doclet.Enum"),
-- configuration.getText("doclet.Description")
-- };
-- ClassDoc[] enums =
-- packageDoc.isIncluded()
-- ? packageDoc.enums()
-- : configuration.classDocCatalog.enums(
-- Util.getPackageName(packageDoc));
-- if (enums.length > 0) {
-- packageWriter.writeClassesSummary(
-- enums,
-- configuration.getText("doclet.Enum_Summary"),
-- enumTableSummary, enumTableHeader);
-- }
-- }
--
-- /**
-- * Build the summary for the exceptions in this package.
-- */
-- public void buildExceptionSummary(XMLNode node) {
-- String exceptionTableSummary =
-- configuration.getText("doclet.Member_Table_Summary",
-- configuration.getText("doclet.Exception_Summary"),
-- configuration.getText("doclet.exceptions"));
-- String[] exceptionTableHeader = new String[] {
-- configuration.getText("doclet.Exception"),
-- configuration.getText("doclet.Description")
-- };
-- ClassDoc[] exceptions =
-- packageDoc.isIncluded()
-- ? packageDoc.exceptions()
-- : configuration.classDocCatalog.exceptions(
-- Util.getPackageName(packageDoc));
-- if (exceptions.length > 0) {
-- packageWriter.writeClassesSummary(
-- exceptions,
-- configuration.getText("doclet.Exception_Summary"),
-- exceptionTableSummary, exceptionTableHeader);
-- }
-- }
--
-- /**
-- * Build the summary for the errors in this package.
-- */
-- public void buildErrorSummary(XMLNode node) {
-- String errorTableSummary =
-- configuration.getText("doclet.Member_Table_Summary",
-- configuration.getText("doclet.Error_Summary"),
-- configuration.getText("doclet.errors"));
-- String[] errorTableHeader = new String[] {
-- configuration.getText("doclet.Error"),
-- configuration.getText("doclet.Description")
-- };
-- ClassDoc[] errors =
-- packageDoc.isIncluded()
-- ? packageDoc.errors()
-- : configuration.classDocCatalog.errors(
-- Util.getPackageName(packageDoc));
-- if (errors.length > 0) {
-- packageWriter.writeClassesSummary(
-- errors,
-- configuration.getText("doclet.Error_Summary"),
-- errorTableSummary, errorTableHeader);
-- }
-- }
--
-- /**
-- * Build the footer of the summary.
-- */
-- public void buildPackageFooter(XMLNode node) {
-- packageWriter.writePackageFooter();
-- }
-+ packageWriter.addPackageTags(packageContentTree);
-+ }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java
-@@ -27,7 +27,6 @@
-
- import java.io.*;
- import java.util.*;
--
- import com.sun.javadoc.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
- import com.sun.tools.doclets.internal.toolkit.*;
-@@ -87,6 +86,11 @@
- */
- protected MemberDoc currentMember;
-
-+ /**
-+ * The content that will be added to the serialized form documentation tree.
-+ */
-+ private Content contentTree;
-+
- private SerializedFormBuilder(Configuration configuration) {
- super(configuration);
- }
-@@ -117,7 +121,7 @@
- } catch (Exception e) {
- throw new DocletAbortException();
- }
-- build(LayoutParser.getInstance(configuration).parseXML(NAME));
-+ build(LayoutParser.getInstance(configuration).parseXML(NAME), contentTree);
- writer.close();
- }
-
-@@ -130,34 +134,44 @@
-
- /**
- * Build the serialized form.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param serializedTree content tree to which the documentation will be added
- */
-- public void buildSerializedForm(XMLNode node) throws Exception {
-- buildChildren(node);
-+ public void buildSerializedForm(XMLNode node, Content serializedTree) throws Exception {
-+ serializedTree = writer.getHeader(configuration.getText(
-+ "doclet.Serialized_Form"));
-+ buildChildren(node, serializedTree);
-+ writer.addFooter(serializedTree);
-+ writer.printDocument(serializedTree);
- writer.close();
- }
-
- /**
-- * Build the header.
-+ * Build the serialized form summaries.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param serializedTree content tree to which the documentation will be added
- */
-- public void buildHeader(XMLNode node) {
-- writer.writeHeader(configuration.getText("doclet.Serialized_Form"));
-+ public void buildSerializedFormSummaries(XMLNode node, Content serializedTree) {
-+ Content serializedSummariesTree = writer.getSerializedSummariesHeader();
-+ PackageDoc[] packages = configuration.packages;
-+ for (int i = 0; i < packages.length; i++) {
-+ currentPackage = packages[i];
-+ buildChildren(node, serializedSummariesTree);
-+ }
-+ serializedTree.addContent(writer.getSerializedContent(
-+ serializedSummariesTree));
- }
-
- /**
-- * Build the contents.
-+ * Build the package serialized form for the current package being processed.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param serializedSummariesTree content tree to which the documentation will be added
- */
-- public void buildSerializedFormSummaries(XMLNode node) {
-- PackageDoc[] packages = configuration.packages;
-- for (int i = 0; i < packages.length; i++) {
-- currentPackage = packages[i];
-- buildChildren(node);
-- }
-- }
--
-- /**
-- * Build the package serialized for for the current package being processed.
-- */
-- public void buildPackageSerializedForm(XMLNode node) {
-+ public void buildPackageSerializedForm(XMLNode node, Content serializedSummariesTree) {
-+ Content packageSerializedTree = writer.getPackageSerializedHeader();
- String foo = currentPackage.name();
- ClassDoc[] classes = currentPackage.allClasses(false);
- if (classes == null || classes.length == 0) {
-@@ -169,14 +183,29 @@
- if (!serialClassFoundToDocument(classes)) {
- return;
- }
-- buildChildren(node);
-+ buildChildren(node, packageSerializedTree);
-+ serializedSummariesTree.addContent(packageSerializedTree);
- }
-
-- public void buildPackageHeader(XMLNode node) {
-- writer.writePackageHeader(Util.getPackageName(currentPackage));
-+ /**
-+ * Build the package header.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param packageSerializedTree content tree to which the documentation will be added
-+ */
-+ public void buildPackageHeader(XMLNode node, Content packageSerializedTree) {
-+ packageSerializedTree.addContent(writer.getPackageHeader(
-+ Util.getPackageName(currentPackage)));
- }
-
-- public void buildClassSerializedForm(XMLNode node) {
-+ /**
-+ * Build the class serialized form.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param packageSerializedTree content tree to which the documentation will be added
-+ */
-+ public void buildClassSerializedForm(XMLNode node, Content packageSerializedTree) {
-+ Content classSerializedTree = writer.getClassSerializedHeader();
- ClassDoc[] classes = currentPackage.allClasses(false);
- Arrays.sort(classes);
- for (int j = 0; j < classes.length; j++) {
-@@ -187,35 +216,293 @@
- if(!serialClassInclude(currentClass)) {
- continue;
- }
-- buildChildren(node);
-+ Content classTree = writer.getClassHeader(currentClass);
-+ buildChildren(node, classTree);
-+ classSerializedTree.addContent(classTree);
- }
- }
-- }
--
-- public void buildClassHeader(XMLNode node) {
-- writer.writeClassHeader(currentClass);
-+ packageSerializedTree.addContent(classSerializedTree);
- }
-
- /**
- * Build the serial UID information for the given class.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param classTree content tree to which the serial UID information will be added
- */
-- public void buildSerialUIDInfo(XMLNode node) {
-+ public void buildSerialUIDInfo(XMLNode node, Content classTree) {
-+ Content serialUidTree = writer.getSerialUIDInfoHeader();
- FieldDoc[] fields = currentClass.fields(false);
- for (int i = 0; i < fields.length; i++) {
- if (fields[i].name().equals("serialVersionUID") &&
- fields[i].constantValueExpression() != null) {
-- writer.writeSerialUIDInfo(SERIAL_VERSION_UID_HEADER,
-- fields[i].constantValueExpression());
-- return;
-+ writer.addSerialUIDInfo(SERIAL_VERSION_UID_HEADER,
-+ fields[i].constantValueExpression(), serialUidTree);
-+ break;
-+ }
-+ }
-+ classTree.addContent(serialUidTree);
-+ }
-+
-+ /**
-+ * Build the summaries for the methods and fields.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param classTree content tree to which the documentation will be added
-+ */
-+ public void buildClassContent(XMLNode node, Content classTree) {
-+ Content classContentTree = writer.getClassContentHeader();
-+ buildChildren(node, classContentTree);
-+ classTree.addContent(classContentTree);
-+ }
-+
-+ /**
-+ * Build the summaries for the methods that belong to the given
-+ * class.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param classContentTree content tree to which the documentation will be added
-+ */
-+ public void buildSerializableMethods(XMLNode node, Content classContentTree) {
-+ Content serializableMethodTree = methodWriter.getSerializableMethodsHeader();
-+ MemberDoc[] members = currentClass.serializationMethods();
-+ int membersLength = members.length;
-+ if (membersLength > 0) {
-+ for (int i = 0; i < membersLength; i++) {
-+ currentMember = members[i];
-+ Content methodsContentTree = methodWriter.getMethodsContentHeader(
-+ (i == membersLength - 1));
-+ buildChildren(node, methodsContentTree);
-+ serializableMethodTree.addContent(methodsContentTree);
-+ }
-+ }
-+ if (currentClass.serializationMethods().length > 0) {
-+ classContentTree.addContent(methodWriter.getSerializableMethods(
-+ configuration.getText("doclet.Serialized_Form_methods"),
-+ serializableMethodTree));
-+ if (currentClass.isSerializable() && !currentClass.isExternalizable()) {
-+ if (currentClass.serializationMethods().length == 0) {
-+ Content noCustomizationMsg = methodWriter.getNoCustomizationMsg(
-+ configuration.getText(
-+ "doclet.Serializable_no_customization"));
-+ classContentTree.addContent(methodWriter.getSerializableMethods(
-+ configuration.getText("doclet.Serialized_Form_methods"),
-+ noCustomizationMsg));
-+ }
- }
- }
- }
-
- /**
-- * Build the footer.
-+ * Build the method sub header.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param methodsContentTree content tree to which the documentation will be added
- */
-- public void buildFooter(XMLNode node) {
-- writer.writeFooter();
-+ public void buildMethodSubHeader(XMLNode node, Content methodsContentTree) {
-+ methodWriter.addMemberHeader((MethodDoc)currentMember, methodsContentTree);
-+ }
-+
-+ /**
-+ * Build the deprecated method description.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param methodsContentTree content tree to which the documentation will be added
-+ */
-+ public void buildDeprecatedMethodInfo(XMLNode node, Content methodsContentTree) {
-+ methodWriter.addDeprecatedMemberInfo((MethodDoc) currentMember, methodsContentTree);
-+ }
-+
-+ /**
-+ * Build the information for the method.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param methodsContentTree content tree to which the documentation will be added
-+ */
-+ public void buildMethodInfo(XMLNode node, Content methodsContentTree) {
-+ if(configuration.nocomment){
-+ return;
-+ }
-+ buildChildren(node, methodsContentTree);
-+ }
-+
-+ /**
-+ * Build method description.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param methodsContentTree content tree to which the documentation will be added
-+ */
-+ public void buildMethodDescription(XMLNode node, Content methodsContentTree) {
-+ methodWriter.addMemberDescription((MethodDoc) currentMember, methodsContentTree);
-+ }
-+
-+ /**
-+ * Build the method tags.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param methodsContentTree content tree to which the documentation will be added
-+ */
-+ public void buildMethodTags(XMLNode node, Content methodsContentTree) {
-+ methodWriter.addMemberTags((MethodDoc) currentMember, methodsContentTree);
-+ MethodDoc method = (MethodDoc)currentMember;
-+ if (method.name().compareTo("writeExternal") == 0
-+ && method.tags("serialData").length == 0) {
-+ if (configuration.serialwarn) {
-+ configuration.getDocletSpecificMsg().warning(
-+ currentMember.position(), "doclet.MissingSerialDataTag",
-+ method.containingClass().qualifiedName(), method.name());
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Build the field header.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param classContentTree content tree to which the documentation will be added
-+ */
-+ public void buildFieldHeader(XMLNode node, Content classContentTree) {
-+ if (currentClass.serializableFields().length > 0) {
-+ buildFieldSerializationOverview(currentClass, classContentTree);
-+ }
-+ }
-+
-+ /**
-+ * Build the serialization overview for the given class.
-+ *
-+ * @param classDoc the class to print the overview for.
-+ * @param classContentTree content tree to which the documentation will be added
-+ */
-+ public void buildFieldSerializationOverview(ClassDoc classDoc, Content classContentTree) {
-+ if (classDoc.definesSerializableFields()) {
-+ FieldDoc serialPersistentField =
-+ Util.asList(classDoc.serializableFields()).get(0);
-+ // Check to see if there are inline comments, tags or deprecation
-+ // information to be printed.
-+ if (fieldWriter.shouldPrintOverview(serialPersistentField)) {
-+ Content serializableFieldsTree = fieldWriter.getSerializableFieldsHeader();
-+ Content fieldsOverviewContentTree = fieldWriter.getFieldsContentHeader(true);
-+ fieldWriter.addMemberDeprecatedInfo(serialPersistentField,
-+ fieldsOverviewContentTree);
-+ if (!configuration.nocomment) {
-+ fieldWriter.addMemberDescription(serialPersistentField,
-+ fieldsOverviewContentTree);
-+ fieldWriter.addMemberTags(serialPersistentField,
-+ fieldsOverviewContentTree);
-+ }
-+ serializableFieldsTree.addContent(fieldsOverviewContentTree);
-+ classContentTree.addContent(fieldWriter.getSerializableFields(
-+ configuration.getText("doclet.Serialized_Form_class"),
-+ serializableFieldsTree));
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Build the summaries for the fields that belong to the given class.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param classContentTree content tree to which the documentation will be added
-+ */
-+ public void buildSerializableFields(XMLNode node, Content classContentTree) {
-+ MemberDoc[] members = currentClass.serializableFields();
-+ int membersLength = members.length;
-+ if (membersLength > 0) {
-+ Content serializableFieldsTree = fieldWriter.getSerializableFieldsHeader();
-+ for (int i = 0; i < membersLength; i++) {
-+ currentMember = members[i];
-+ if (!currentClass.definesSerializableFields()) {
-+ Content fieldsContentTree = fieldWriter.getFieldsContentHeader(
-+ (i == membersLength - 1));
-+ buildChildren(node, fieldsContentTree);
-+ serializableFieldsTree.addContent(fieldsContentTree);
-+ }
-+ else {
-+ buildSerialFieldTagsInfo(serializableFieldsTree);
-+ }
-+ }
-+ classContentTree.addContent(fieldWriter.getSerializableFields(
-+ configuration.getText("doclet.Serialized_Form_fields"),
-+ serializableFieldsTree));
-+ }
-+ }
-+
-+ /**
-+ * Build the field sub header.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param fieldsContentTree content tree to which the documentation will be added
-+ */
-+ public void buildFieldSubHeader(XMLNode node, Content fieldsContentTree) {
-+ if (!currentClass.definesSerializableFields()) {
-+ FieldDoc field = (FieldDoc) currentMember;
-+ fieldWriter.addMemberHeader(field.type().asClassDoc(),
-+ field.type().typeName(), field.type().dimension(), field.name(),
-+ fieldsContentTree);
-+ }
-+ }
-+
-+ /**
-+ * Build the field deprecation information.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param fieldsContentTree content tree to which the documentation will be added
-+ */
-+ public void buildFieldDeprecationInfo(XMLNode node, Content fieldsContentTree) {
-+ if (!currentClass.definesSerializableFields()) {
-+ FieldDoc field = (FieldDoc)currentMember;
-+ fieldWriter.addMemberDeprecatedInfo(field, fieldsContentTree);
-+ }
-+ }
-+
-+ /**
-+ * Build the serial field tags information.
-+ *
-+ * @param serializableFieldsTree content tree to which the documentation will be added
-+ */
-+ public void buildSerialFieldTagsInfo(Content serializableFieldsTree) {
-+ if(configuration.nocomment){
-+ return;
-+ }
-+ FieldDoc field = (FieldDoc)currentMember;
-+ // Process Serializable Fields specified as array of
-+ // ObjectStreamFields. Print a member for each serialField tag.
-+ // (There should be one serialField tag per ObjectStreamField
-+ // element.)
-+ SerialFieldTag[] tags = field.serialFieldTags();
-+ Arrays.sort(tags);
-+ int tagsLength = tags.length;
-+ for (int i = 0; i < tagsLength; i++) {
-+ Content fieldsContentTree = fieldWriter.getFieldsContentHeader(
-+ (i == tagsLength - 1));
-+ fieldWriter.addMemberHeader(tags[i].fieldTypeDoc(),
-+ tags[i].fieldType(), "", tags[i].fieldName(), fieldsContentTree);
-+ fieldWriter.addMemberDescription(tags[i], fieldsContentTree);
-+ serializableFieldsTree.addContent(fieldsContentTree);
-+ }
-+ }
-+
-+ /**
-+ * Build the field information.
-+ *
-+ * @param node the XML element that specifies which components to document
-+ * @param fieldsContentTree content tree to which the documentation will be added
-+ */
-+ public void buildFieldInfo(XMLNode node, Content fieldsContentTree) {
-+ if(configuration.nocomment){
-+ return;
-+ }
-+ FieldDoc field = (FieldDoc)currentMember;
-+ ClassDoc cd = field.containingClass();
-+ // Process default Serializable field.
-+ if ((field.tags("serial").length == 0) && ! field.isSynthetic()
-+ && configuration.serialwarn) {
-+ configuration.message.warning(field.position(),
-+ "doclet.MissingSerialTag", cd.qualifiedName(),
-+ field.name());
-+ }
-+ fieldWriter.addMemberDescription(field, fieldsContentTree);
-+ fieldWriter.addMemberTags(field, fieldsContentTree);
- }
-
- /**
-@@ -298,208 +585,4 @@
- return false;
- }
-
-- /**
-- * Build the method header.
-- */
-- public void buildMethodHeader(XMLNode node) {
-- if (currentClass.serializationMethods().length > 0) {
-- methodWriter.writeHeader(
-- configuration.getText("doclet.Serialized_Form_methods"));
-- if (currentClass.isSerializable() && !currentClass.isExternalizable()) {
-- if (currentClass.serializationMethods().length == 0) {
-- methodWriter.writeNoCustomizationMsg(
-- configuration.getText(
-- "doclet.Serializable_no_customization"));
-- }
-- }
-- }
-- }
--
-- /**
-- * Build the method sub header.
-- */
-- public void buildMethodSubHeader(XMLNode node) {
-- methodWriter.writeMemberHeader((MethodDoc) currentMember);
-- }
--
-- /**
-- * Build the deprecated method description.
-- */
-- public void buildDeprecatedMethodInfo(XMLNode node) {
-- methodWriter.writeDeprecatedMemberInfo((MethodDoc) currentMember);
-- }
--
-- /**
-- * Build method tags.
-- */
-- public void buildMethodDescription(XMLNode node) {
-- methodWriter.writeMemberDescription((MethodDoc) currentMember);
-- }
--
-- /**
-- * Build the method tags.
-- */
-- public void buildMethodTags(XMLNode node) {
-- methodWriter.writeMemberTags((MethodDoc) currentMember);
-- MethodDoc method = (MethodDoc)currentMember;
-- if (method.name().compareTo("writeExternal") == 0
-- && method.tags("serialData").length == 0) {
-- if (configuration.serialwarn) {
-- configuration.getDocletSpecificMsg().warning(
-- currentMember.position(), "doclet.MissingSerialDataTag",
-- method.containingClass().qualifiedName(), method.name());
-- }
-- }
-- }
--
-- /**
-- * build the information for the method.
-- */
-- public void buildMethodInfo(XMLNode node) {
-- if(configuration.nocomment){
-- return;
-- }
-- buildChildren(node);
-- }
--
-- /**
-- * Build the method footer.
-- */
-- public void buildMethodFooter(XMLNode node) {
-- methodWriter.writeMemberFooter();
-- }
--
-- /**
-- * Build the field header.
-- */
-- public void buildFieldHeader(XMLNode node) {
-- if (currentClass.serializableFields().length > 0) {
-- buildFieldSerializationOverview(currentClass);
-- fieldWriter.writeHeader(configuration.getText(
-- "doclet.Serialized_Form_fields"));
-- }
-- }
--
-- /**
-- * If possible, build the serialization overview for the given
-- * class.
-- *
-- * @param classDoc the class to print the overview for.
-- */
-- public void buildFieldSerializationOverview(ClassDoc classDoc) {
-- if (classDoc.definesSerializableFields()) {
-- FieldDoc serialPersistentField =
-- (FieldDoc)((Util.asList(classDoc.serializableFields()).get(0)));
-- // Check to see if there are inline comments, tags or deprecation
-- // information to be printed.
-- if (fieldWriter.shouldPrintMemberDetails(serialPersistentField)) {
-- fieldWriter.writeHeader(
-- configuration.getText("doclet.Serialized_Form_class"));
-- fieldWriter.writeMemberDeprecatedInfo(serialPersistentField);
-- if (!configuration.nocomment) {
-- fieldWriter.writeMemberDescription(serialPersistentField);
-- fieldWriter.writeMemberTags(serialPersistentField);
-- }
-- fieldWriter.writeMemberFooter(serialPersistentField);
-- // Footer required to close the definition list tag
-- // for serialization overview.
-- fieldWriter.writeFooter(
-- configuration.getText("doclet.Serialized_Form_class"));
-- }
-- }
-- }
--
-- /**
-- * Build the field sub header.
-- */
-- public void buildFieldSubHeader(XMLNode node) {
-- if (! currentClass.definesSerializableFields() ){
-- FieldDoc field = (FieldDoc) currentMember;
-- fieldWriter.writeMemberHeader(field.type().asClassDoc(),
-- field.type().typeName(), field.type().dimension(), field.name());
-- }
-- }
--
-- /**
-- * Build the field deprecation information.
-- */
-- public void buildFieldDeprecationInfo(XMLNode node) {
-- if (!currentClass.definesSerializableFields()) {
-- FieldDoc field = (FieldDoc)currentMember;
-- fieldWriter.writeMemberDeprecatedInfo(field);
-- }
-- }
--
-- /**
-- * Build the field information.
-- */
-- public void buildFieldInfo(XMLNode node) {
-- if(configuration.nocomment){
-- return;
-- }
-- FieldDoc field = (FieldDoc)currentMember;
-- ClassDoc cd = field.containingClass();
-- if (cd.definesSerializableFields()) {
-- // Process Serializable Fields specified as array of
-- // ObjectStreamFields. Print a member for each serialField tag.
-- // (There should be one serialField tag per ObjectStreamField
-- // element.)
-- SerialFieldTag[] tags = field.serialFieldTags();
-- Arrays.sort(tags);
-- for (int i = 0; i < tags.length; i++) {
-- fieldWriter.writeMemberHeader(tags[i].fieldTypeDoc(),
-- tags[i].fieldType(), "", tags[i].fieldName());
-- fieldWriter.writeMemberDescription(tags[i]);
--
-- }
-- } else {
--
-- // Process default Serializable field.
-- if ((field.tags("serial").length == 0) && ! field.isSynthetic()
-- && configuration.serialwarn) {
-- configuration.message.warning(field.position(),
-- "doclet.MissingSerialTag", cd.qualifiedName(),
-- field.name());
-- }
-- fieldWriter.writeMemberDescription(field);
-- fieldWriter.writeMemberTags(field);
-- }
-- }
--
-- /**
-- * Build the field sub footer.
-- */
-- public void buildFieldSubFooter(XMLNode node) {
-- if (! currentClass.definesSerializableFields()) {
-- fieldWriter.writeMemberFooter();
-- }
-- }
--
-- /**
-- * Build the summaries for the methods that belong to the given
-- * class.
-- */
-- public void buildSerializableMethods(XMLNode node) {
-- MemberDoc[] members = currentClass.serializationMethods();
-- if (members.length > 0) {
-- for (int i = 0; i < members.length; i++) {
-- currentMember = members[i];
-- buildChildren(node);
-- }
-- }
-- }
--
-- /**
-- * Build the summaries for the fields that belong to the given
-- * class.
-- */
-- public void buildSerializableFields(XMLNode node) {
-- MemberDoc[] members = currentClass.serializableFields();
-- if (members.length > 0) {
-- for (int i = 0; i < members.length; i++) {
-- currentMember = members[i];
-- buildChildren(node);
-- }
-- }
-- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclet.xml b/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclet.xml
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclet.xml
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclet.xml
-@@ -29,177 +29,145 @@
- <Doclet>
-
- <PackageDoc>
-- <PackageHeader/>
-- <Summary>
-- <SummaryHeader/>
-- <InterfaceSummary/>
-- <ClassSummary/>
-- <EnumSummary/>
-- <ExceptionSummary/>
-- <ErrorSummary/>
-- <AnnotationTypeSummary/>
-- <SummaryFooter/>
-- </Summary>
-- <PackageDescription/>
-- <PackageTags/>
-- <PackageFooter/>
-+ <Content>
-+ <Summary>
-+ <InterfaceSummary/>
-+ <ClassSummary/>
-+ <EnumSummary/>
-+ <ExceptionSummary/>
-+ <ErrorSummary/>
-+ <AnnotationTypeSummary/>
-+ </Summary>
-+ <PackageDescription/>
-+ <PackageTags/>
-+ </Content>
- </PackageDoc>
-
- <AnnotationTypeDoc>
-- <AnnotationTypeHeader/>
-- <DeprecationInfo/>
-- <AnnotationTypeSignature/>
-- <AnnotationTypeDescription/>
-- <AnnotationTypeTagInfo/>
-+ <AnnotationTypeInfo>
-+ <DeprecationInfo/>
-+ <AnnotationTypeSignature/>
-+ <AnnotationTypeDescription/>
-+ <AnnotationTypeTagInfo/>
-+ </AnnotationTypeInfo>
- <MemberSummary>
-- <AnnotationTypeRequiredMemberSummary/>
-+ <AnnotationTypeRequiredMemberSummary/>
- <AnnotationTypeOptionalMemberSummary/>
- </MemberSummary>
-- <AnnotationTypeRequiredMemberDetails>
-- <Header/>
-- <AnnotationTypeRequiredMember>
-- <MemberHeader/>
-- <Signature/>
-- <DeprecationInfo/>
-- <MemberComments/>
-- <TagInfo/>
-- <MemberFooter/>
-- </AnnotationTypeRequiredMember>
-- </AnnotationTypeRequiredMemberDetails>
-- <AnnotationTypeOptionalMemberDetails>
-- <AnnotationTypeOptionalMember>
-- <MemberHeader/>
-- <Signature/>
-- <DeprecationInfo/>
-- <MemberComments/>
-- <TagInfo/>
-- <DefaultValueInfo/>
-- <MemberFooter/>
-- </AnnotationTypeOptionalMember>
-- <Footer/>
-- </AnnotationTypeOptionalMemberDetails>
-- <AnnotationTypeFooter/>
-+ <AnnotationTypeMemberDetails>
-+ <AnnotationTypeRequiredMemberDetails>
-+ <AnnotationTypeRequiredMember>
-+ <Signature/>
-+ <DeprecationInfo/>
-+ <MemberComments/>
-+ <TagInfo/>
-+ </AnnotationTypeRequiredMember>
-+ </AnnotationTypeRequiredMemberDetails>
-+ <AnnotationTypeOptionalMemberDetails>
-+ <AnnotationTypeOptionalMember>
-+ <Signature/>
-+ <DeprecationInfo/>
-+ <MemberComments/>
-+ <TagInfo/>
-+ <DefaultValueInfo/>
-+ </AnnotationTypeOptionalMember>
-+ </AnnotationTypeOptionalMemberDetails>
-+ </AnnotationTypeMemberDetails>
- </AnnotationTypeDoc>
-
- <ClassDoc>
-- <ClassHeader/>
- <ClassTree/>
-- <TypeParamInfo/>
-- <SuperInterfacesInfo/>
-- <ImplementedInterfacesInfo/>
-- <SubClassInfo/>
-- <SubInterfacesInfo/>
-- <InterfaceUsageInfo/>
-- <NestedClassInfo/>
-- <DeprecationInfo/>
-- <ClassSignature/>
-- <ClassDescription/>
-- <ClassTagInfo/>
-+ <ClassInfo>
-+ <TypeParamInfo/>
-+ <SuperInterfacesInfo/>
-+ <ImplementedInterfacesInfo/>
-+ <SubClassInfo/>
-+ <SubInterfacesInfo/>
-+ <InterfaceUsageInfo/>
-+ <NestedClassInfo/>
-+ <DeprecationInfo/>
-+ <ClassSignature/>
-+ <ClassDescription/>
-+ <ClassTagInfo/>
-+ </ClassInfo>
- <MemberSummary>
- <NestedClassesSummary/>
-- <NestedClassesInheritedSummary/>
- <EnumConstantsSummary/>
- <FieldsSummary/>
-- <FieldsInheritedSummary/>
- <ConstructorsSummary/>
- <MethodsSummary/>
-- <MethodsInheritedSummary/>
- </MemberSummary>
-- <EnumConstantsDetails>
-- <Header/>
-- <EnumConstant>
-- <EnumConstantHeader/>
-- <Signature/>
-- <DeprecationInfo/>
-- <EnumConstantComments/>
-- <TagInfo/>
-- <EnumConstantFooter/>
-- </EnumConstant>
-- <Footer/>
-- </EnumConstantsDetails>
-- <FieldDetails>
-- <Header/>
-- <FieldDoc>
-- <FieldHeader/>
-- <Signature/>
-- <DeprecationInfo/>
-- <FieldComments/>
-- <TagInfo/>
-- <FieldFooter/>
-- </FieldDoc>
-- <Footer/>
-- </FieldDetails>
-- <ConstructorDetails>
-- <Header/>
-- <ConstructorDoc>
-- <ConstructorHeader/>
-- <Signature/>
-- <DeprecationInfo/>
-- <ConstructorComments/>
-- <TagInfo/>
-- <ConstructorFooter/>
-- </ConstructorDoc>
-- <Footer/>
-- </ConstructorDetails>
-- <MethodDetails>
-- <Header/>
-- <MethodDoc>
-- <MethodHeader/>
-- <Signature/>
-- <DeprecationInfo/>
-- <MethodComments/>
-- <TagInfo/>
-- <MethodFooter/>
-- </MethodDoc>
-- <Footer/>
-- </MethodDetails>
-- <ClassFooter/>
-+ <MemberDetails>
-+ <EnumConstantsDetails>
-+ <EnumConstant>
-+ <Signature/>
-+ <DeprecationInfo/>
-+ <EnumConstantComments/>
-+ <TagInfo/>
-+ </EnumConstant>
-+ </EnumConstantsDetails>
-+ <FieldDetails>
-+ <FieldDoc>
-+ <Signature/>
-+ <DeprecationInfo/>
-+ <FieldComments/>
-+ <TagInfo/>
-+ </FieldDoc>
-+ </FieldDetails>
-+ <ConstructorDetails>
-+ <ConstructorDoc>
-+ <Signature/>
-+ <DeprecationInfo/>
-+ <ConstructorComments/>
-+ <TagInfo/>
-+ </ConstructorDoc>
-+ </ConstructorDetails>
-+ <MethodDetails>
-+ <MethodDoc>
-+ <Signature/>
-+ <DeprecationInfo/>
-+ <MethodComments/>
-+ <TagInfo/>
-+ </MethodDoc>
-+ </MethodDetails>
-+ </MemberDetails>
- </ClassDoc>
-
- <ConstantSummary>
-- <Header/>
- <Contents/>
- <ConstantSummaries>
-- <PackageConstantSummary>
-- <PackageHeader/>
-- <ClassConstantSummary>
-- <ClassHeader/>
-- <ConstantMembers/>
-- <ClassFooter/>
-- </ClassConstantSummary>
-- </PackageConstantSummary>
-+ <PackageHeader/>
-+ <ClassConstantSummary>
-+ <ConstantMembers/>
-+ </ClassConstantSummary>
- </ConstantSummaries>
- <Footer/>
- </ConstantSummary>
-
- <SerializedForm>
-- <Header/>
- <SerializedFormSummaries>
- <PackageSerializedForm>
- <PackageHeader/>
- <ClassSerializedForm>
-- <ClassHeader/>
- <SerialUIDInfo/>
-- <MethodHeader/>
-- <SerializableMethods>
-- <MethodSubHeader/>
-- <DeprecatedMethodInfo/>
-- <MethodInfo>
-- <MethodDescription/>
-- <MethodTags/>
-- </MethodInfo>
-- <MethodFooter/>
-- </SerializableMethods>
-- <FieldHeader/>
-- <SerializableFields>
-- <FieldSubHeader/>
-- <FieldDeprecationInfo/>
-- <FieldInfo/>
-- <FieldSubFooter/>
-- </SerializableFields>
-+ <ClassContent>
-+ <SerializableMethods>
-+ <MethodSubHeader/>
-+ <DeprecatedMethodInfo/>
-+ <MethodInfo>
-+ <MethodDescription/>
-+ <MethodTags/>
-+ </MethodInfo>
-+ </SerializableMethods>
-+ <FieldHeader/>
-+ <SerializableFields>
-+ <FieldSubHeader/>
-+ <FieldDeprecationInfo/>
-+ <FieldInfo/>
-+ </SerializableFields>
-+ </ClassContent>
- </ClassSerializedForm>
- </PackageSerializedForm>
- </SerializedFormSummaries>
-- <Footer/>
- </SerializedForm>
- </Doclet>
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets.properties b/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets.properties
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets.properties
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets.properties
-@@ -111,12 +111,12 @@
- doclet.extends=extends
- doclet.Package_private=(package private)
- doclet.implements=implementsdoclet.Same_package_name_used=Package name format used twice: {0}
--doclet.Nested_Classes_Interfaces_Inherited_From_Class=Nested classes/interfaces inherited from class {0}
--doclet.Nested_Classes_Interface_Inherited_From_Interface=Nested classes/interfaces inherited from interface {0}
--doclet.Methods_Inherited_From_Class=Methods inherited from class {0}
--doclet.Methods_Inherited_From_Interface=Methods inherited from interface {0}
--doclet.Fields_Inherited_From_Class=Fields inherited from class {0}
--doclet.Fields_Inherited_From_Interface=Fields inherited from interface {0}
-+doclet.Nested_Classes_Interfaces_Inherited_From_Class=Nested classes/interfaces inherited from class
-+doclet.Nested_Classes_Interface_Inherited_From_Interface=Nested classes/interfaces inherited from interface
-+doclet.Methods_Inherited_From_Class=Methods inherited from class
-+doclet.Methods_Inherited_From_Interface=Methods inherited from interface
-+doclet.Fields_Inherited_From_Class=Fields inherited from class
-+doclet.Fields_Inherited_From_Interface=Fields inherited from interface
- doclet.Serializable=Serializable
- doclet.Externalizable=Externalizable
- doclet.Annotation_Type_Member_Detail=Element Detail
-@@ -136,12 +136,19 @@
- doclet.Constants_Table_Summary={0} table, listing constant fields, and values
- doclet.Member_Table_Summary={0} table, listing {1}, and an explanation
- doclet.fields=fields
-+doclet.Fields=Fields
- doclet.constructors=constructors
-+doclet.Constructors=Constructors
- doclet.methods=methods
-+doclet.Methods=Methods
- doclet.annotation_type_optional_members=optional elements
-+doclet.Annotation_Type_Optional_Members=Optional Elements
- doclet.annotation_type_required_members=required elements
-+doclet.Annotation_Type_Required_Members=Required Elements
- doclet.enum_constants=enum constants
-+doclet.Enum_Constants=Enum Constants
- doclet.nested_classes=nested classes
-+doclet.Nested_Classes=Nested Classes
- doclet.subclasses=subclasses
- doclet.subinterfaces=subinterfaces
- doclet.Modifier=Modifier
-@@ -173,7 +180,7 @@
-
- doclet.enum_valueof_doc=\n\
- Returns the enum constant of this type with the specified name.\n\
-- The string must match <I>exactly</I> an identifier used to declare an\n\
-+ The string must match <i>exactly</i> an identifier used to declare an\n\
- enum constant in this type. (Extraneous whitespace characters are \n\
- not permitted.)\n\
- \n\
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/stylesheet.css b/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/stylesheet.css
-new file mode 100644
---- /dev/null
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/stylesheet.css
-@@ -0,0 +1,439 @@
-+/* Javadoc style sheet */
-+/*
-+Overall document style
-+*/
-+* {
-+ margin:0;
-+ padding:0;
-+}
-+body {
-+ font-family:Helvetica, Arial, sans-serif;
-+ color:#000000;
-+}
-+p {
-+ margin:20px 0;
-+}
-+pre {
-+ font-size:1.0em;
-+}
-+h1 {
-+ font-size:1.4em;
-+}
-+h2 {
-+ font-size:1.35em;
-+}
-+h3 {
-+ font-size:1.3em;
-+}
-+h4 {
-+ font-size:1.25em;
-+}
-+ul {
-+ margin:10px 0 10px 20px;
-+}
-+li {
-+ list-style:disc;
-+}
-+dl dt {
-+ font-size:0.95em;
-+ font-weight:bold;
-+ margin:10px 0 0 0;
-+}
-+dl dd {
-+ margin:10px 0 10px 20px;
-+}
-+dl dd ul {
-+ margin-left:0;
-+}
-+dl dd ul li {
-+ list-style:none;
-+ margin:10px 0 10px 0;
-+}
-+caption {
-+ background: #CCCCFF;
-+ color:#000000;
-+ text-align: left;
-+ font-size: 150%;
-+ font-weight: bold;
-+ border-left: 2px ridge;
-+ border-right: 2px ridge;
-+ border-top: 2px ridge;
-+ padding-left: 5px;
-+ width:auto;
-+}
-+/*
-+Document title and Copyright styles
-+*/
-+.aboutLanguage {
-+ float:right;
-+ font-size:0.9em;
-+ color:#000000;
-+}
-+.legalCopy {
-+ margin:7px;
-+}
-+.bar {
-+ font-size:1em;
-+ margin:10px 0 0 10px;
-+}
-+.bar a {
-+ font-weight:normal;
-+}
-+/*
-+Navigation bar styles
-+*/
-+.topNav {
-+ border-top:2px solid #C0C0C0;
-+ margin:7px;
-+ padding:7px 0;
-+ height:2.8em;
-+ width:99%;
-+ min-width:600px;
-+}
-+.bottomNav {
-+ border-top:2px solid #C0C0C0;
-+ margin:7px;
-+ padding:7px 0;
-+ height:2.8em;
-+ width:99%;
-+}
-+.subNav {
-+ border-bottom:2px solid #C0C0C0;
-+ float:left;
-+ width:99%;
-+ margin:7px;
-+ min-width:600px;
-+}
-+.subNav div {
-+ clear:left;
-+ float:left;
-+ padding:0 0 5px 2px;
-+ width:100%;
-+}
-+.topNav a:link,.topNav a:active, .topNav a:visited, .topNav a:hover,
-+.bottomNav a:link,.bottomNav a:active, .bottomNav a:visited, .bottomNav a:hover {
-+ color:#000000;
-+ font-weight:bold;
-+ text-decoration:underline;
-+ font-size:1em;
-+}
-+/* Navigation bar list styles */
-+.topNav ul.navList, .bottomNav ul.navList {
-+ background-color:#EEEEFF;
-+ padding:7px 5px;
-+ margin:0;
-+ float:left;
-+ width:80%;
-+}
-+ul.navList li{
-+ list-style:none;
-+ float:left;
-+ padding:3px 4px;
-+ color:#000000;
-+ font-size:0.98em;
-+}
-+ul.navList li.navBarCell1Rev {
-+ background-color:#00008B;
-+ color:#FFFFFF;
-+ font-weight:bold;
-+ font-size:0.97em;
-+}
-+/* Sub-navigation bar list styles */
-+.subNav ul.navList {
-+ float:left;
-+ margin:0;
-+ font-size:0.7em;
-+ width:350px;
-+}
-+ul.subNavList {
-+ float:left;
-+ margin:0;
-+ font-size:0.7em;
-+ width:350px;
-+}
-+ul.subNavList li{
-+ list-style:none;
-+ float:left;
-+ font-size:90%;
-+}
-+/*
-+Page header and footer styles
-+*/
-+.header, .footer {
-+ clear:both;
-+ margin:0 7px;
-+}
-+.indexHeader {
-+ font-size:0.9em;
-+ margin:10px 0 7px 10px;
-+}
-+.header ul {
-+ padding-left:20px;
-+}
-+/* Header and footer title styles */
-+.header h1.title {
-+ font-size:1.4em;
-+ text-align:center;
-+ margin:0;
-+}
-+.header h2.title {
-+ font-size:1.35em;
-+ margin:0;
-+}
-+.subTitle {
-+ margin:0;
-+ padding-top:10px;
-+ font-size:0.75em;
-+ font-weight:bold;
-+}
-+/*
-+Page layout container styles
-+*/
-+.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer,
-+.constantValuesContainer {
-+ clear:both;
-+ padding:10px 10px;
-+ position:relative;
-+}
-+.indexContainer {
-+ padding:0 0 10px 10px;
-+ font-size:0.9em;
-+}
-+/*
-+Class inheritance information styles
-+*/
-+ul.inheritance {
-+ margin:0;
-+ padding:0;
-+}
-+ul.inheritance li {
-+ display:inline;
-+ list-style:none;
-+}
-+ul.inheritance li ul.inheritance {
-+ margin-left:15px;
-+ background-image:url(resources/inherit.gif);
-+ background-repeat:no-repeat;
-+ padding-left:15px;
-+ padding-top:1px;
-+}
-+/*
-+Heading styles
-+*/
-+.indexContainer h2 {
-+ font-weight:normal;
-+ font-size:1.0em;
-+ padding:10px 0 0 0;
-+}
-+.contentContainer h2 {
-+ margin:10px 0;
-+}
-+.constantValuesContainer h2 {
-+ background:#CCCCFF;
-+ border:2px ridge;
-+ padding:3px;
-+ margin:0 0 10px 0;
-+}
-+.serializedFormContainer ul.blockList li.blockList h2 {
-+ background:#EEEEFF;
-+ border:2px ridge;
-+ padding:3px;
-+ margin:0 0 15px 0;
-+ text-align:center;
-+}
-+.classUseContainer ul li ul li h3 {
-+ margin-bottom:30px;
-+ padding:3px;
-+}
-+.serializedFormContainer ul.blockList li.blockList ul.blockList li.blockList h3 {
-+ background:#EEEEFF;
-+ margin:0 0 15px 0;
-+ padding:3px;
-+}
-+.serializedFormContainer ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList h3 {
-+ background:#CCCCFF;
-+ margin:0 0 15px 0;
-+ padding:3px;
-+ border:2px ridge;
-+}
-+ul.blockList ul.blockList li.blockList h3, ul.blockList ul.blockList li.blockList h3 {
-+ background:#CCCCFF;
-+ border:2px ridge;
-+ padding-left:5px;
-+}
-+div.summary ul.blockList ul.blockList li.blockList h3 {
-+ background:#CCCCFF;
-+ border:0;
-+ border:2px ridge;
-+ padding-left:5px;
-+}
-+div.summary ul.blockList ul.blockList ul.blockList li.blockList h3 {
-+ background:#EEEEFF;
-+ border:0;
-+ border-bottom:2px ridge;
-+}
-+div.details ul.blockList ul.blockList ul.blockList li.blockList h4,
-+div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 {
-+ font-size:1.15em;
-+ font-weight:bold;
-+ padding:0 0 10px 0;
-+}
-+/*
-+Table styles
-+*/
-+.contentContainer table {
-+ border-collapse: collapse ;
-+ width:100%;
-+}
-+.contentContainer table td, .contentContainer table th {
-+ border:2px ridge;
-+ padding:3px;
-+}
-+/* Constant values page table styles */
-+.constantValuesContainer table {
-+ border-collapse: collapse ;
-+ margin:0 0 10px 0;
-+}
-+.constantValuesContainer table caption{
-+ font-size:0.95em;
-+ padding:3px;
-+ background:#EEEEFF;
-+}
-+.constantValuesContainer table td, .constantValuesContainer table th {
-+ border:2px ridge;
-+ padding:3px;
-+}
-+/* Class-use/Package-use page table styles */
-+.classUseContainer table {
-+ border-collapse: collapse ;
-+ width:100%;
-+ margin:0 0 15px 0;
-+}
-+.classUseContainer ul li ul li table {
-+ margin-bottom:30px;
-+}
-+.classUseContainer ul li ul li table caption{
-+ font-size:0.95em;
-+ padding:3px;
-+ background:#EEEEFF;
-+}
-+.classUseContainer table td, .classUseContainer table th {
-+ border:2px ridge;
-+ padding:3px;
-+}
-+/* Summary table styles */
-+ul.blockList li.blockList table.overviewSummary {
-+ margin:0;
-+ margin-bottom:15px;
-+}
-+ul.blockList li.blockList table caption {
-+ padding:3px;
-+}
-+ul.blockList li.blockList table.overviewSummary td.colFirst{
-+ text-align:right;
-+}
-+table.packageSummary td.colFirst, table.overviewSummary th.colFirst {
-+ width:15%;
-+}
-+div.summary ul.blockList ul.blockList li.blockList caption {
-+ display:none;
-+}
-+div.summary ul.blockList li.blockList ul.blockList li.blockList table.overviewSummary th {
-+ border-top:0;
-+}
-+/* Table column block styles */
-+ul.blockList li.blockList table.overviewSummary td.colLast div.block{
-+ padding:0;
-+ padding-left:40px;
-+}
-+ul.blockList li.blockList table.overviewSummary td.colOne div.block{
-+ padding:0;
-+ padding-left:40px;
-+}
-+.contentContainer ul.blockList li.blockList table .colOne div.block{
-+ padding-left:40px;
-+}
-+.classUseContainer ul li ul li table .colLast div.block,
-+.classUseContainer ul li ul li table .colOne div.block{
-+ padding-left:40px;
-+}
-+/*
-+List styles
-+*/
-+ul.horizontal li {
-+ display:inline;
-+ font-size:0.9em;
-+}
-+/* Container specific list styles */
-+.indexContainer ul {
-+ margin:0;
-+}
-+.indexContainer ul li {
-+ list-style:none;
-+}
-+.serializedFormContainer ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList {
-+ border:0;
-+}
-+.serializedFormContainer ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList {
-+ list-style:none;
-+ border:0;
-+ border-bottom:2px ridge;
-+}
-+.serializedFormContainer ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockListLast {
-+ list-style:none;
-+}
-+/* General list styles */
-+ul.blockList, ul.blockListLast {
-+ margin-left:0;
-+ padding-left:0;
-+}
-+ul.blockList li.blockList, ul.blockListLast li.blockList {
-+ list-style:none;
-+ margin-bottom:25px;
-+}
-+ul.blockList ul.blockList ul.blockList li.blockList {
-+ border:2px ridge;
-+}
-+div.details ul.blockList ul.blockList ul.blockList li.blockList {
-+ border:0;
-+ border-bottom:2px ridge;
-+}
-+/* Definition list styles */
-+ul.blockList li.blockList dl{
-+ margin-bottom:15px;
-+}
-+ul.blockList li.blockList dl dd{
-+ margin:0 0 0 30px;
-+}
-+ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList dl,
-+ul.blockList li.blockList ul.blockList li.blockList ul.blockListLast li.blockList dl{
-+ padding:0 0 10px 35px;
-+}
-+dl.nameValue dt, dl.nameValue dd{
-+ display:inline;
-+}
-+ul.blockList li.blockList pre{
-+ margin:0 0 15px 0;
-+}
-+/* List content styles */
-+ul.blockList li.blockList ul.blockList li.blockList pre{
-+ margin:10px 0 15px 0;
-+}
-+ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList pre,
-+ul.blockList li.blockList ul.blockList li.blockList ul.blockListLast li.blockList pre{
-+ padding:0 0 10px 0;
-+}
-+ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList div.block,
-+ul.blockList li.blockList ul.blockList li.blockList ul.blockListLast li.blockList div.block{
-+ padding:0 0 10px 35px;
-+}
-+/*
-+Formatting effect styles
-+*/
-+.strong {
-+ font-weight:bold;
-+}
-+.sourceLineNo {
-+ color:green;
-+ padding:0 30px 0 0;
-+}
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/DirectoryManager.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/DirectoryManager.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/DirectoryManager.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/DirectoryManager.java
-@@ -46,7 +46,7 @@
- /**
- * The file separator string, "/", used in the formation of the URL path.
- */
-- public static final String URL_FILE_SEPERATOR = "/";
-+ public static final String URL_FILE_SEPARATOR = "/";
-
- /**
- * Never instaniated.
-@@ -123,13 +123,13 @@
- for (int i = 0; i < packageName.length(); i++) {
- char ch = packageName.charAt(i);
- if (ch == '.') {
-- pathstr.append(URL_FILE_SEPERATOR);
-+ pathstr.append(URL_FILE_SEPARATOR);
- } else {
- pathstr.append(ch);
- }
- }
-- if (pathstr.length() > 0 && ! pathstr.toString().endsWith(URL_FILE_SEPERATOR)) {
-- pathstr.append(URL_FILE_SEPERATOR);
-+ if (pathstr.length() > 0 && ! pathstr.toString().endsWith(URL_FILE_SEPARATOR)) {
-+ pathstr.append(URL_FILE_SEPARATOR);
- }
- return pathstr.toString();
- }
-@@ -155,7 +155,7 @@
- for (int i = 0; i < name.length(); i++) {
- char ch = name.charAt(i);
- if (ch == '.') {
-- pathstr.append(URL_FILE_SEPERATOR);
-+ pathstr.append(URL_FILE_SEPARATOR);
- } else {
- pathstr.append(ch);
- }
-@@ -184,7 +184,7 @@
- StringBuffer pathstr = new StringBuffer();
- pathstr.append(getRelativePath(from));
- pathstr.append(getPath(to));
-- pathstr.append(URL_FILE_SEPERATOR);
-+ pathstr.append(URL_FILE_SEPARATOR);
- return pathstr.toString();
- }
-
-@@ -226,10 +226,10 @@
- for (int i = 0; i < from.length(); i++) {
- char ch = from.charAt(i);
- if (ch == '.') {
-- pathstr.append(".." + URL_FILE_SEPERATOR);
-+ pathstr.append(".." + URL_FILE_SEPARATOR);
- }
- }
-- pathstr.append(".." + URL_FILE_SEPERATOR);
-+ pathstr.append(".." + URL_FILE_SEPARATOR);
- return pathstr.toString();
- }
-
-@@ -297,7 +297,7 @@
- String pathstr = createPathString(pd);
- if (pathstr.length() > 0) {
- buf.append(pathstr);
-- buf.append(URL_FILE_SEPERATOR);
-+ buf.append(URL_FILE_SEPARATOR);
- }
- buf.append(filename);
- return buf.toString();
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java
-@@ -51,6 +51,11 @@
- {{"&", "&amp;"}, {"<", "&lt;"}, {">", "&gt;"}};
-
- /**
-+ * Name of the resource directory.
-+ */
-+ public static final String RESOURCESDIR = "resources";
-+
-+ /**
- * Return array of class members whose documentation is to be generated.
- * If the member is deprecated do not include such a member in the
- * returned array.
-@@ -236,8 +241,8 @@
- String destname = configuration.docFileDestDirName;
- File srcdir = new File(path + dir);
- if (destname.length() > 0 && !destname.endsWith(
-- DirectoryManager.URL_FILE_SEPERATOR)) {
-- destname += DirectoryManager.URL_FILE_SEPERATOR;
-+ DirectoryManager.URL_FILE_SEPARATOR)) {
-+ destname += DirectoryManager.URL_FILE_SEPARATOR;
- }
- String dest = destname + dir;
- try {
-@@ -263,7 +268,7 @@
- && ! configuration.shouldExcludeDocFileDir(
- srcfile.getName())){
- copyDocFiles(configuration, path, dir +
-- DirectoryManager.URL_FILE_SEPERATOR + srcfile.getName(),
-+ DirectoryManager.URL_FILE_SEPARATOR + srcfile.getName(),
- overwrite);
- }
- }
-@@ -322,25 +327,38 @@
- * it already exists.
- */
- public static void copyResourceFile(Configuration configuration,
-- String resourcefile,
-- boolean overwrite) {
-- String destdir = configuration.destDirName;
-- String destresourcesdir = destdir + "resources";
-- DirectoryManager.createDirectory(configuration, destresourcesdir);
-- File destfile = new File(destresourcesdir, resourcefile);
-+ String resourcefile, boolean overwrite) {
-+ String destresourcesdir = configuration.destDirName + RESOURCESDIR;
-+ copyFile(configuration, resourcefile, RESOURCESDIR, destresourcesdir,
-+ overwrite);
-+ }
-+
-+ /**
-+ * Copy a file from a source directory to a destination directory
-+ * (if it is not there already). If <code>overwrite</code> is true and
-+ * the destination file already exists, overwrite it.
-+ *
-+ * @param configuration Holds the error message
-+ * @param file The name of the file to copy
-+ * @param source The source directory
-+ * @param destination The destination directory where the file needs to be copied
-+ * @param overwrite A flag to indicate whether the file in the
-+ * destination directory will be overwritten if
-+ * it already exists.
-+ */
-+ public static void copyFile(Configuration configuration, String file, String source,
-+ String destination, boolean overwrite) {
-+ DirectoryManager.createDirectory(configuration, destination);
-+ File destfile = new File(destination, file);
- if(destfile.exists() && (! overwrite)) return;
- try {
--
- InputStream in = Configuration.class.getResourceAsStream(
-- "resources/" + resourcefile);
--
-+ source + DirectoryManager.URL_FILE_SEPARATOR + file);
- if(in==null) return;
--
- OutputStream out = new FileOutputStream(destfile);
- byte[] buf = new byte[2048];
- int n;
- while((n = in.read(buf))>0) out.write(buf,0,n);
--
- in.close();
- out.close();
- } catch(Throwable t) {}
-@@ -357,12 +375,12 @@
- try{
- String pkgPath = DirectoryManager.getDirectoryPath(pkgDoc);
- String completePath = new SourcePath(configuration.sourcepath).
-- getDirectory(pkgPath) + DirectoryManager.URL_FILE_SEPERATOR;
-+ getDirectory(pkgPath) + DirectoryManager.URL_FILE_SEPARATOR;
- //Make sure that both paths are using the same seperators.
- completePath = Util.replaceText(completePath, File.separator,
-- DirectoryManager.URL_FILE_SEPERATOR);
-+ DirectoryManager.URL_FILE_SEPARATOR);
- pkgPath = Util.replaceText(pkgPath, File.separator,
-- DirectoryManager.URL_FILE_SEPERATOR);
-+ DirectoryManager.URL_FILE_SEPARATOR);
- return completePath.substring(0, completePath.indexOf(pkgPath));
- } catch (Exception e){
- return "";
-@@ -572,6 +590,24 @@
- }
-
- /**
-+ * Given a string, strips all html characters and
-+ * return the result.
-+ *
-+ * @param rawString The string to check.
-+ * @return the original string with all of the HTML characters
-+ * stripped.
-+ *
-+ */
-+ public static String stripHtml(String rawString) {
-+ // remove HTML tags
-+ rawString = rawString.replaceAll("\\<.*?>", " ");
-+ // consolidate multiple spaces between a word to a single space
-+ rawString = rawString.replaceAll("\\b\\s{2,}\\b", " ");
-+ // remove extra whitespaces
-+ return rawString.trim();
-+ }
-+
-+ /**
- * Create the directory path for the file to be generated, construct
- * FileOutputStream and OutputStreamWriter depending upon docencoding.
- *
-diff --git a/test/com/sun/javadoc/AccessAsciiArt/AccessAsciiArt.java b/test/com/sun/javadoc/AccessAsciiArt/AccessAsciiArt.java
---- langtools/test/com/sun/javadoc/AccessAsciiArt/AccessAsciiArt.java
-+++ langtools/test/com/sun/javadoc/AccessAsciiArt/AccessAsciiArt.java
-@@ -84,17 +84,17 @@
-
- // Test the top line of the class tree
- {
--" <IMG SRC=\"../../resources/inherit.gif\" ALT=\"extended by \"><A HREF=\"../../p1/C.html\" title=\"class in p1\">p1.C</A>",
-+"<li><a href=\"../../p1/C.html\" title=\"class in p1\">p1.C</a></li>",
- TMPDEST_DIR1 + "p1" + FS + "subpkg" + FS + "SSC.html" },
-
- // Test the second line of the class tree
- {
--" <IMG SRC=\"../../resources/inherit.gif\" ALT=\"extended by \"><A HREF=\"../../p1/SC.html\" title=\"class in p1\">p1.SC</A>",
-+"<li><a href=\"../../p1/SC.html\" title=\"class in p1\">p1.SC</a></li>",
- TMPDEST_DIR1 + "p1" + FS + "subpkg" + FS + "SSC.html" },
-
- // Test the third line of the class tree
- {
--" <IMG SRC=\"../../resources/inherit.gif\" ALT=\"extended by \"><STRONG>p1.subpkg.SSC</STRONG>",
-+"<li>p1.subpkg.SSC</li>",
- TMPDEST_DIR1 + "p1" + FS + "subpkg" + FS +"SSC.html" },
-
- };
-diff --git a/test/com/sun/javadoc/AccessH1/AccessH1.java b/test/com/sun/javadoc/AccessH1/AccessH1.java
---- langtools/test/com/sun/javadoc/AccessH1/AccessH1.java
-+++ langtools/test/com/sun/javadoc/AccessH1/AccessH1.java
-@@ -83,18 +83,19 @@
- * NOTE: The standard doclet uses the same separator "\n" for all OS's
- */
- private static final String[][] testArray = {
--
-- // Test the style sheet
-- {
-- "h1 { font-size: 145% }",
-- TMPDEST_DIR1 + "stylesheet.css" },
--
-- // Test the doc title in the overview page
-- {
-- "<H1>" + LS + "Document Title" + LS + "</H1>",
-- TMPDEST_DIR1 + "overview-summary.html" }
--
-- };
-+ // Test the style sheet
-+ {
-+ ".header h1.title {" + LS + " font-size:1.4em;" + LS +
-+ " text-align:center;" + LS + " margin:0;" + LS +
-+ "}",
-+ TMPDEST_DIR1 + "stylesheet.css"
-+ },
-+ // Test the doc title in the overview page
-+ {
-+ "<h1 class=\"title\">Document Title</h1>",
-+ TMPDEST_DIR1 + "overview-summary.html"
-+ }
-+ };
-
- public static void runTestsOnHTML(String[][] testArray) {
-
-diff --git a/test/com/sun/javadoc/AccessSkipNav/AccessSkipNav.java b/test/com/sun/javadoc/AccessSkipNav/AccessSkipNav.java
---- langtools/test/com/sun/javadoc/AccessSkipNav/AccessSkipNav.java
-+++ langtools/test/com/sun/javadoc/AccessSkipNav/AccessSkipNav.java
-@@ -46,6 +46,7 @@
- private static final String BUGNAME = "AccessSkipNav";
- private static final String FS = System.getProperty("file.separator");
- private static final String PS = System.getProperty("path.separator");
-+ private static final String LS = System.getProperty("line.separator");
- private static final String TMPDEST_DIR1 = "." + FS + "docs1" + FS;
- private static final String TMPDEST_DIR2 = "." + FS + "docs2" + FS;
-
-@@ -84,20 +85,22 @@
-
- // Testing only for the presence of the <a href> and <a name>
-
-- // Top navbar <A HREF>
-- { "<A HREF=\"#skip-navbar_top\" title=\"Skip navigation links\"></A>",
-+ // Top navbar <a href>
-+ { "<a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a>",
- TMPDEST_DIR1 + "p1" + FS + "C1.html" },
-
-- // Top navbar <A NAME>
-- { "<A NAME=\"skip-navbar_top\"></A>",
-+ // Top navbar <a name>
-+ { "<a name=\"skip-navbar_top\">" + LS +
-+ "<!-- -->" + LS + "</a>",
- TMPDEST_DIR1 + "p1" + FS + "C1.html" },
-
-- // Bottom navbar <A HREF>
-- { "<A HREF=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></A>",
-+ // Bottom navbar <a href>
-+ { "<a href=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></a>",
- TMPDEST_DIR1 + "p1" + FS + "C1.html" },
-
-- // Bottom navbar <A NAME>
-- { "<A NAME=\"skip-navbar_bottom\"></A>",
-+ // Bottom navbar <a name>
-+ { "<a name=\"skip-navbar_bottom\">" + LS +
-+ "<!-- -->" + LS + "</a>",
- TMPDEST_DIR1 + "p1" + FS + "C1.html" }
- };
-
-diff --git a/test/com/sun/javadoc/AccessSummary/AccessSummary.java b/test/com/sun/javadoc/AccessSummary/AccessSummary.java
---- langtools/test/com/sun/javadoc/AccessSummary/AccessSummary.java
-+++ langtools/test/com/sun/javadoc/AccessSummary/AccessSummary.java
-@@ -24,7 +24,7 @@
- /*
- * @test @(#)AccessSummary.java
- * @bug 4637604 4775148
-- * @summary Test the tables for summary=""
-+ * @summary Test the tables for summary attribute
- * @author dkramer
- * @library ../lib/
- * @build JavadocTester
-@@ -44,15 +44,15 @@
-
- // Test that the summary attribute appears
- { OUTPUT_DIR1 + "overview-summary.html",
-- "SUMMARY=\"\"" },
-+ "summary=\"Packages table, listing packages, and an explanation\"" },
-
- // Test that the summary attribute appears
- { OUTPUT_DIR1 + "p1" + FS + "C1.html",
-- "SUMMARY=\"\"" },
-+ "summary=\"Constructor Summary table, listing constructors, and an explanation\"" },
-
- // Test that the summary attribute appears
- { OUTPUT_DIR1 + "constant-values.html",
-- "SUMMARY=\"\"" }
-+ "summary=\"Constant Field Values table, listing constant fields, and values\"" }
- };
-
- // First test with -header only
-diff --git a/test/com/sun/javadoc/AuthorDD/AuthorDD.java b/test/com/sun/javadoc/AuthorDD/AuthorDD.java
---- langtools/test/com/sun/javadoc/AuthorDD/AuthorDD.java
-+++ langtools/test/com/sun/javadoc/AuthorDD/AuthorDD.java
-@@ -86,12 +86,12 @@
-
- // Test single @since tag:
-
-- { "<DT><STRONG>Since:</STRONG></DT>"+NL+" <DD>JDK 1.0</DD>",
-+ { "<dt><span class=\"strong\">Since:</span></dt>"+NL+" <dd>JDK 1.0</dd>",
- BUGID + FS + "p1" + FS + "C1.html" },
-
- // Test multiple @author tags:
-
-- { "<DT><STRONG>Author:</STRONG></DT>"+NL+" <DD>Doug Kramer, Jamie, Neal</DD>",
-+ { "<dt><span class=\"strong\">Author:</span></dt>"+NL+" <dd>Doug Kramer, Jamie, Neal</dd>",
- BUGID + FS + "p1" + FS + "C1.html" },
-
- };
-diff --git a/test/com/sun/javadoc/JavascriptWinTitle/JavascriptWinTitle.java b/test/com/sun/javadoc/JavascriptWinTitle/JavascriptWinTitle.java
---- langtools/test/com/sun/javadoc/JavascriptWinTitle/JavascriptWinTitle.java
-+++ langtools/test/com/sun/javadoc/JavascriptWinTitle/JavascriptWinTitle.java
-@@ -90,44 +90,34 @@
- private static final String[][] testArray = {
-
- // Test the javascript "type" attribute is present:
-- { "<SCRIPT type=\"text/javascript\">",
-+ { "<script type=\"text/javascript\">",
-+ TMPDEST_DIR1 + "overview-summary.html" },
-+
-+ // Test onload is absent:
-+ { "<body>",
- TMPDEST_DIR1 + "overview-summary.html" },
-
- // Test onload is present:
-- { "onload=\"windowTitle();\"",
-- TMPDEST_DIR1 + "overview-summary.html" },
--
-- // Test onload is present:
-- { "onload=\"windowTitle();\"",
-+ { "<body>",
- TMPDEST_DIR1 + FS + "p1" + FS + "package-summary.html" },
-
-- // Test onload is present:
-- { "onload=\"windowTitle();\"",
-- TMPDEST_DIR1 + FS + "p1" + FS + "C.html" },
--
- // Test that "onload" is not present in BODY tag:
-- { "<BODY BGCOLOR=\"white\">",
-+ { "<body>",
- TMPDEST_DIR1 + "overview-frame.html" },
-
- // Test that "onload" is not present in BODY tag:
-- { "<BODY BGCOLOR=\"white\">",
-+ { "<body>",
- TMPDEST_DIR1 + "allclasses-frame.html" },
-
- // Test that "onload" is not present in BODY tag:
-- { "<BODY BGCOLOR=\"white\">",
-+ { "<body>",
- TMPDEST_DIR1 + FS + "p1" + FS + "package-frame.html" },
-
- // Test that win title javascript is followed by NOSCRIPT code.
-- {"<SCRIPT type=\"text/javascript\">" + LS +
-- "function windowTitle()" + LS +
-- "{" + LS +
-- " if (location.href.indexOf('is-external=true') == -1) {" + LS +
-- " parent.document.title=\"C (Window Title)\";" + LS +
-- " }" + LS +
-- "}" + LS +
-- "</SCRIPT>" + LS +
-- "<NOSCRIPT>" + LS +
-- "</NOSCRIPT>",
-+ {"<script type=\"text/javascript\"><!--" + LS +
-+ " if (location.href.indexOf('is-external=true') == -1) {" + LS +
-+ " parent.document.title=\"C (Window Title)\";" + LS +
-+ " }" + LS + "//-->" + LS + "</script>",
- TMPDEST_DIR1 + FS + "p1" + FS + "C.html"
- }
-
-diff --git a/test/com/sun/javadoc/MetaTag/MetaTag.java b/test/com/sun/javadoc/MetaTag/MetaTag.java
---- langtools/test/com/sun/javadoc/MetaTag/MetaTag.java
-+++ langtools/test/com/sun/javadoc/MetaTag/MetaTag.java
-@@ -67,31 +67,31 @@
- private static final String[][] TEST = {
-
- { OUTPUT_DIR + FS + "p1" + FS + "C1.html",
-- "<META NAME=\"keywords\" CONTENT=\"p1.C1 class\">" },
-+ "<meta name=\"keywords\" content=\"p1.C1 class\">" },
-
- { OUTPUT_DIR + FS + "p1" + FS + "C1.html",
-- "<META NAME=\"keywords\" CONTENT=\"field1\">" },
-+ "<meta name=\"keywords\" content=\"field1\">" },
-
- { OUTPUT_DIR + FS + "p1" + FS + "C1.html",
-- "<META NAME=\"keywords\" CONTENT=\"field2\">" },
-+ "<meta name=\"keywords\" content=\"field2\">" },
-
- { OUTPUT_DIR + FS + "p1" + FS + "C1.html",
-- "<META NAME=\"keywords\" CONTENT=\"method1()\">" },
-+ "<meta name=\"keywords\" content=\"method1()\">" },
-
- { OUTPUT_DIR + FS + "p1" + FS + "C1.html",
-- "<META NAME=\"keywords\" CONTENT=\"method2()\">" },
-+ "<meta name=\"keywords\" content=\"method2()\">" },
-
- { OUTPUT_DIR + FS + "p1" + FS + "package-summary.html",
-- "<META NAME=\"keywords\" CONTENT=\"p1 package\">" },
-+ "<meta name=\"keywords\" content=\"p1 package\">" },
-
- { OUTPUT_DIR + FS + "overview-summary.html",
-- "<META NAME=\"keywords\" CONTENT=\"Overview, Sample Packages\">" },
-+ "<meta name=\"keywords\" content=\"Overview, Sample Packages\">" },
-
- //NOTE: Hopefully, this regression test is not run at midnight. If the output
- //was generated yesterday and this test is run today, the test will fail.
- {OUTPUT_DIR + FS + "overview-summary.html",
-- "<META NAME=\"date\" "
-- + "CONTENT=\"" + m_dateFormat.format(new Date()) + "\">"},
-+ "<meta name=\"date\" "
-+ + "content=\"" + m_dateFormat.format(new Date()) + "\">"},
- };
-
- private static final String[][] NEGATED_TEST = NO_TEST;
-diff --git a/test/com/sun/javadoc/ValidHtml/ValidHtml.java b/test/com/sun/javadoc/ValidHtml/ValidHtml.java
---- langtools/test/com/sun/javadoc/ValidHtml/ValidHtml.java
-+++ langtools/test/com/sun/javadoc/ValidHtml/ValidHtml.java
-@@ -33,12 +33,10 @@
- * @run main ValidHtml
- */
-
--
- import com.sun.javadoc.*;
- import java.util.*;
- import java.io.*;
-
--
- /**
- * Runs javadoc and runs regression tests on the resulting HTML.
- * It reads each file, complete with newlines, into a string to easily
-@@ -66,13 +64,14 @@
- String srcdir = System.getProperty("test.src", ".");
-
- // Test for all cases except the split index page
-- runJavadoc(new String[] {"-d", TMPDEST_DIR1,
-- "-doctitle", "Document Title",
-- "-windowtitle", "Window Title",
-- "-use",
-- "-overview", (srcdir + FS + "overview.html"),
-- "-sourcepath", srcdir,
-- "p1", "p2"});
-+ runJavadoc(new String[]{"-d", TMPDEST_DIR1,
-+ "-doctitle", "Document Title",
-+ "-windowtitle", "Window Title",
-+ "-use",
-+ "-overview", (srcdir + FS + "overview.html"),
-+ "-sourcepath", srcdir,
-+ "p1", "p2"
-+ });
- runTestsOnHTML(testArray);
-
- printSummary();
-@@ -90,53 +89,52 @@
- * NOTE: The standard doclet uses the same separator "\n" for all OS's
- */
- private static final String[][] testArray = {
--
-- // Test the proper DOCTYPE element is present:
-- {
--"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\" \"http://www.w3.org/TR/html4/frameset.dtd\">",
-- TMPDEST_DIR1 + "index.html" },
--
-- // Test the proper DOCTYPE element is present:
-- {
--"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
-- TMPDEST_DIR1 + "overview-summary.html" },
--
-- // Test the proper DOCTYPE element is present:
-- {
--"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
-- TMPDEST_DIR1 + "p1" + FS + "package-summary.html" },
--
-- // Test the proper DOCTYPE element is present:
-- {
--"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
-- TMPDEST_DIR1 + "p1" + FS + "C.html" },
--
-- // Test the proper DOCTYPE element is present:
-- {
--"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
-- TMPDEST_DIR1 + "overview-frame.html" },
--
-- // Test the proper DOCTYPE element is present:
-- {
--"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
-- TMPDEST_DIR1 + "allclasses-frame.html" },
--
-- // Test the proper DOCTYPE element is present:
-- {
--"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
-- TMPDEST_DIR1 + "p1" + FS + "package-frame.html" },
--
-- // Test that <NOFRAMES> is inside <FRAMESET> element:
-- {
--"</NOFRAMES>" + LS + "</FRAMESET>",
-- TMPDEST_DIR1 + "index.html" },
--
-- // Test the table elements are in the correct order:
-- {
--"</FONT></TD>" + LS + "</TR>",
-- TMPDEST_DIR1 + FS + "p1" + FS + "package-use.html" }
--
-- };
-+ // Test the proper DOCTYPE element is present:
-+ {
-+ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\" \"http://www.w3.org/TR/html4/frameset.dtd\">",
-+ TMPDEST_DIR1 + "index.html"
-+ },
-+ // Test the proper DOCTYPE element is present:
-+ {
-+ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
-+ TMPDEST_DIR1 + "overview-summary.html"
-+ },
-+ // Test the proper DOCTYPE element is present:
-+ {
-+ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
-+ TMPDEST_DIR1 + "p1" + FS + "package-summary.html"
-+ },
-+ // Test the proper DOCTYPE element is present:
-+ {
-+ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
-+ TMPDEST_DIR1 + "p1" + FS + "C.html"
-+ },
-+ // Test the proper DOCTYPE element is present:
-+ {
-+ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
-+ TMPDEST_DIR1 + "overview-frame.html"
-+ },
-+ // Test the proper DOCTYPE element is present:
-+ {
-+ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
-+ TMPDEST_DIR1 + "allclasses-frame.html"
-+ },
-+ // Test the proper DOCTYPE element is present:
-+ {
-+ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
-+ TMPDEST_DIR1 + "p1" + FS + "package-frame.html"
-+ },
-+ // Test that <NOFRAMES> is inside <FRAMESET> element:
-+ {
-+ "</noframes>" + LS + "</frameset>",
-+ TMPDEST_DIR1 + "index.html"
-+ },
-+ // Test the table elements are in the correct order:
-+ {
-+ "</td>" + LS + "</tr>",
-+ TMPDEST_DIR1 + FS + "p1" + FS + "package-use.html"
-+ }
-+ };
-
- public static void runTestsOnHTML(String[][] testArray) {
-
-@@ -152,10 +150,7 @@
-
- // Find string in file's contents
- if (findString(fileString, stringToFind) == -1) {
-- System.out.println("\nSub-test " + (subtestNum)
-- + " for bug " + BUGID + " (" + BUGNAME + ") FAILED\n"
-- + "when searching for:\n"
-- + stringToFind);
-+ System.out.println("\nSub-test " + (subtestNum) + " for bug " + BUGID + " (" + BUGNAME + ") FAILED\n" + "when searching for:\n" + stringToFind);
- } else {
- numSubtestsPassed += 1;
- System.out.println("\nSub-test " + (subtestNum) + " passed:\n" + stringToFind);
-@@ -164,11 +159,10 @@
- }
-
- public static void printSummary() {
-- if ( numSubtestsPassed == subtestNum ) {
-+ if (numSubtestsPassed == subtestNum) {
- System.out.println("\nAll " + numSubtestsPassed + " subtests passed");
- } else {
-- throw new Error("\n" + (subtestNum - numSubtestsPassed) + " of " + (subtestNum)
-- + " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
-+ throw new Error("\n" + (subtestNum - numSubtestsPassed) + " of " + (subtestNum) + " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
- }
- }
-
-@@ -176,16 +170,16 @@
- public static String readFileToString(String filename) {
- try {
- File file = new File(filename);
-- if ( !file.exists() ) {
-+ if (!file.exists()) {
- System.out.println("\nFILE DOES NOT EXIST: " + filename);
- }
- BufferedReader in = new BufferedReader(new FileReader(file));
-
- // Create an array of characters the size of the file
-- char[] allChars = new char[(int)file.length()];
-+ char[] allChars = new char[(int) file.length()];
-
- // Read the characters into the allChars array
-- in.read(allChars, 0, (int)file.length());
-+ in.read(allChars, 0, (int) file.length());
- in.close();
-
- // Convert to a string
-diff --git a/test/com/sun/javadoc/VersionNumber/VersionNumber.java b/test/com/sun/javadoc/VersionNumber/VersionNumber.java
---- langtools/test/com/sun/javadoc/VersionNumber/VersionNumber.java
-+++ langtools/test/com/sun/javadoc/VersionNumber/VersionNumber.java
-@@ -84,7 +84,7 @@
-
- // Test the proper DOCTYPE element is present:
- {
-- "<!-- Generated by javadoc (build",
-+ "<!-- Generated by javadoc (version",
- TMPDEST_DIR1 + "p1" + FS + "C.html" },
-
- };
-diff --git a/test/com/sun/javadoc/WindowTitles/WindowTitles.java b/test/com/sun/javadoc/WindowTitles/WindowTitles.java
---- langtools/test/com/sun/javadoc/WindowTitles/WindowTitles.java
-+++ langtools/test/com/sun/javadoc/WindowTitles/WindowTitles.java
-@@ -94,52 +94,52 @@
- */
- private static final String[][] testArray = {
-
-- { "<TITLE>" + LS + "Overview" + LS + "</TITLE>",
-+ { "<title>Overview</title>",
- TMPDIR_STRING1 + "overview-summary.html" },
-
-- { "<TITLE>" + LS + "Class Hierarchy" + LS + "</TITLE>",
-+ { "<title>Class Hierarchy</title>",
- TMPDIR_STRING1 + "overview-tree.html" },
-
-- { "<TITLE>" + LS + "Overview List" + LS + "</TITLE>",
-+ { "<title>Overview List</title>",
- TMPDIR_STRING1 + "overview-frame.html" },
-
-- { "<TITLE>" + LS + "p1" + LS + "</TITLE>",
-+ { "<title>p1</title>",
- TMPDIR_STRING1 + "p1" + FS + "package-summary.html" },
-
-- { "<TITLE>" + LS + "p1" + LS + "</TITLE>",
-+ { "<title>p1</title>",
- TMPDIR_STRING1 + "p1" + FS + "package-frame.html" },
-
-- { "<TITLE>" + LS + "p1 Class Hierarchy" + LS + "</TITLE>",
-+ { "<title>p1 Class Hierarchy</title>",
- TMPDIR_STRING1 + "p1" + FS + "package-tree.html" },
-
-- { "<TITLE>" + LS + "Uses of Package p1" + LS + "</TITLE>",
-+ { "<title>Uses of Package p1</title>",
- TMPDIR_STRING1 + "p1" + FS + "package-use.html" },
-
-- { "<TITLE>" + LS + "C1" + LS + "</TITLE>",
-+ { "<title>C1</title>",
- TMPDIR_STRING1 + "p1" + FS + "C1.html" },
-
-- { "<TITLE>" + LS + "All Classes" + LS + "</TITLE>",
-+ { "<title>All Classes</title>",
- TMPDIR_STRING1 + "allclasses-frame.html" },
-
-- { "<TITLE>" + LS + "All Classes" + LS + "</TITLE>",
-+ { "<title>All Classes</title>",
- TMPDIR_STRING1 + "allclasses-noframe.html" },
-
-- { "<TITLE>" + LS + "Constant Field Values" + LS + "</TITLE>",
-+ { "<title>Constant Field Values</title>",
- TMPDIR_STRING1 + "constant-values.html" },
-
-- { "<TITLE>" + LS + "Deprecated List" + LS + "</TITLE>",
-+ { "<title>Deprecated List</title>",
- TMPDIR_STRING1 + "deprecated-list.html" },
-
-- { "<TITLE>" + LS + "Serialized Form" + LS + "</TITLE>",
-+ { "<title>Serialized Form</title>",
- TMPDIR_STRING1 + "serialized-form.html" },
-
-- { "<TITLE>" + LS + "API Help" + LS + "</TITLE>",
-+ { "<title>API Help</title>",
- TMPDIR_STRING1 + "help-doc.html" },
-
-- { "<TITLE>" + LS + "Index" + LS + "</TITLE>",
-+ { "<title>Index</title>",
- TMPDIR_STRING1 + "index-all.html" },
-
-- { "<TITLE>" + LS + "Uses of Class p1.C1" + LS + "</TITLE>",
-+ { "<title>Uses of Class p1.C1</title>",
- TMPDIR_STRING1 + "p1" + FS + "class-use" + FS + "C1.html" },
- };
-
-@@ -147,7 +147,7 @@
- * Assign value for [ stringToFind, filename ] for split index page
- */
- private static final String[][] testSplitIndexArray = {
-- { "<TITLE>" + LS + "C-Index" + LS + "</TITLE>",
-+ { "<title>C-Index</title>",
- TMPDIR_STRING2 + "index-files" + FS + "index-1.html" },
- };
-
-diff --git a/test/com/sun/javadoc/constantValues/TestConstantValuesDriver.java b/test/com/sun/javadoc/constantValues/TestConstantValuesDriver.java
---- langtools/test/com/sun/javadoc/constantValues/TestConstantValuesDriver.java
-+++ langtools/test/com/sun/javadoc/constantValues/TestConstantValuesDriver.java
-@@ -51,7 +51,7 @@
- tests[i][1] = "TEST"+(i+1)+"PASSES";
- }
- tests[tests.length-1][0] = BUG_ID + FS + "constant-values.html";
-- tests[tests.length-1][1] = "<CODE>\"&lt;Hello World&gt;\"</CODE>";
-+ tests[tests.length-1][1] = "<code>\"&lt;Hello World&gt;\"</code>";
- TestConstantValuesDriver tester = new TestConstantValuesDriver();
- run(tester, ARGS, tests, NO_TEST);
- tester.printSummary();
-diff --git a/test/com/sun/javadoc/testClassCrossReferences/TestClassCrossReferences.java b/test/com/sun/javadoc/testClassCrossReferences/TestClassCrossReferences.java
---- langtools/test/com/sun/javadoc/testClassCrossReferences/TestClassCrossReferences.java
-+++ langtools/test/com/sun/javadoc/testClassCrossReferences/TestClassCrossReferences.java
-@@ -37,18 +37,20 @@
- private static final String BUG_ID = "4652655-4857717";
- private static final String[][] TEST = {
- {BUG_ID + FS + "C.html",
-- "<A HREF=\"http://java.sun.com/j2se/1.4/docs/api/java/math/package-summary.html?is-external=true\"><CODE>Link to math package</CODE></A>"},
-+ "<a href=\"http://java.sun.com/j2se/1.4/docs/api/java/math/package-summary.html?is-external=true\"><code>Link to math package</code></a>"},
- {BUG_ID + FS + "C.html",
-- "<A HREF=\"http://java.sun.com/j2se/1.4/docs/api/javax/swing/text/AbstractDocument.AttributeContext.html?is-external=true\" " +
-- "title=\"class or interface in javax.swing.text\"><CODE>Link to AttributeContext innerclass</CODE></A>"},
-+ "<a href=\"http://java.sun.com/j2se/1.4/docs/api/javax/swing/text/AbstractDocument.AttributeContext.html?is-external=true\" " +
-+ "title=\"class or interface in javax.swing.text\"><code>Link to AttributeContext innerclass</code></a>"},
- {BUG_ID + FS + "C.html",
-- "<A HREF=\"http://java.sun.com/j2se/1.4/docs/api/java/math/BigDecimal.html?is-external=true\" " +
-- "title=\"class or interface in java.math\"><CODE>Link to external class BigDecimal</CODE></A>"},
-+ "<a href=\"http://java.sun.com/j2se/1.4/docs/api/java/math/BigDecimal.html?is-external=true\" " +
-+ "title=\"class or interface in java.math\"><code>Link to external class BigDecimal</code></a>"},
- {BUG_ID + FS + "C.html",
-- "<A HREF=\"http://java.sun.com/j2se/1.4/docs/api/java/math/BigInteger.html?is-external=true#gcd(java.math.BigInteger)\" " +
-- "title=\"class or interface in java.math\"><CODE>Link to external member gcd</CODE></A>"},
-+ "<a href=\"http://java.sun.com/j2se/1.4/docs/api/java/math/BigInteger.html?is-external=true#gcd(java.math.BigInteger)\" " +
-+ "title=\"class or interface in java.math\"><code>Link to external member gcd</code></a>"},
- {BUG_ID + FS + "C.html",
-- "<STRONG>Overrides:</STRONG></DT><DD><CODE>toString</CODE> in class <CODE>java.lang.Object</CODE>"}
-+ "<dl>" + NL + "<dt><strong>Overrides:</strong></dt>" + NL +
-+ "<dd><code>toString</code>&nbsp;in class&nbsp;<code>java.lang.Object</code></dd>" + NL +
-+ "</dl>"}
- };
- private static final String[][] NEGATED_TEST = NO_TEST;
- private static final String[] ARGS =
-diff --git a/test/com/sun/javadoc/testClassTree/TestClassTree.java b/test/com/sun/javadoc/testClassTree/TestClassTree.java
---- langtools/test/com/sun/javadoc/testClassTree/TestClassTree.java
-+++ langtools/test/com/sun/javadoc/testClassTree/TestClassTree.java
-@@ -48,32 +48,29 @@
- //Input for string search tests.
- private static final String[][] TEST = {
- {BUG_ID + FS + "pkg" + FS + "package-tree.html",
-- "<LI TYPE=\"circle\">pkg.<A HREF=\"../pkg/ParentClass.html\" " +
-- "title=\"class in pkg\"><STRONG>ParentClass</STRONG></A><UL>"},
-+ "<ul>" + NL + "<li type=\"circle\">pkg.<a href=\"../pkg/ParentClass.html\" " +
-+ "title=\"class in pkg\"><span class=\"strong\">ParentClass</span></a>"},
-
- {BUG_ID + FS + "pkg" + FS + "package-tree.html",
-- "Annotation Type Hierarchy" + NL + "</H2>" + NL + "<UL>" + NL +
-- "<LI TYPE=\"circle\">pkg.<A HREF=\"../pkg/AnnotationType.html\" " +
-- "title=\"annotation in pkg\"><STRONG>AnnotationType</STRONG></A> " +
-- "(implements java.lang.annotation.Annotation)" + NL + "</UL>"},
-+ "<h2 title=\"Annotation Type Hierarchy\">Annotation Type Hierarchy</h2>" + NL +
-+ "<ul>" + NL + "<li type=\"circle\">pkg.<a href=\"../pkg/AnnotationType.html\" " +
-+ "title=\"annotation in pkg\"><span class=\"strong\">AnnotationType</span></a> " +
-+ "(implements java.lang.annotation.Annotation)</li>" + NL + "</ul>"},
-
- {BUG_ID + FS + "pkg" + FS + "package-tree.html",
-- "<H2>" + NL +
-- "Enum Hierarchy" + NL +
-- "</H2>" + NL +
-- "<UL>" + NL +
-- "<LI TYPE=\"circle\">java.lang.Object<UL>" + NL +
-- "<LI TYPE=\"circle\">java.lang.Enum&lt;E&gt; (implements java.lang.Comparable&lt;T&gt;, java.io.Serializable)" + NL +
-- "<UL>" + NL +
-- "<LI TYPE=\"circle\">pkg.<A HREF=\"../pkg/Coin.html\" title=\"enum in pkg\"><STRONG>Coin</STRONG></A></UL>" + NL +
-- "</UL>" + NL +
-- "</UL>"
-+ "<h2 title=\"Enum Hierarchy\">Enum Hierarchy</h2>" + NL + "<ul>" + NL +
-+ "<li type=\"circle\">java.lang.Object" + NL + "<ul>" + NL +
-+ "<li type=\"circle\">java.lang.Enum&lt;E&gt; (implements java.lang." +
-+ "Comparable&lt;T&gt;, java.io.Serializable)" + NL + "<ul>" + NL +
-+ "<li type=\"circle\">pkg.<a href=\"../pkg/Coin.html\" " +
-+ "title=\"enum in pkg\"><span class=\"strong\">Coin</span></a></li>" + NL +
-+ "</ul>" + NL + "</li>" + NL + "</ul>" + NL + "</li>" + NL + "</ul>"
- },
- };
- private static final String[][] NEGATED_TEST = {
- {BUG_ID + FS + "pkg" + FS + "package-tree.html",
-- "<LI TYPE=\"circle\">class pkg.<A HREF=\"../pkg/ParentClass.html\" " +
-- "title=\"class in pkg\"><STRONG>ParentClass</STRONG></A><UL>"}
-+ "<li type=\"circle\">class pkg.<a href=\"../pkg/ParentClass.html\" " +
-+ "title=\"class in pkg\"><span class=\"strong\">ParentClass</span></a></li>"}
- };
-
- /**
-diff --git a/test/com/sun/javadoc/testConstructorIndent/TestConstructorIndent.java b/test/com/sun/javadoc/testConstructorIndent/TestConstructorIndent.java
---- langtools/test/com/sun/javadoc/testConstructorIndent/TestConstructorIndent.java
-+++ langtools/test/com/sun/javadoc/testConstructorIndent/TestConstructorIndent.java
-@@ -45,10 +45,10 @@
-
- //Input for string search tests.
- private static final String[][] TEST = {
-- {BUG_ID + FS + "C.html", "<DL>" + NL + "<DD>This is just a simple constructor." + NL +
-- "<P>" + NL + "</DD>" + NL + "<DD><DL>" + NL + "<DT><STRONG>Parameters:</STRONG>" +
-- "</DT><DD><CODE>i</CODE> - a param.</DD></DL>" + NL +
-- "</DD>" + NL + "</DL>"
-+ {BUG_ID + FS + "C.html", "<div class=\"block\">" +
-+ "This is just a simple constructor.</div>" + NL +
-+ "<dl><dt><span class=\"strong\">Parameters:</span></dt><dd>" +
-+ "<code>i</code> - a param.</dd></dl>"
- }
- };
- private static final String[][] NEGATED_TEST = NO_TEST;
-diff --git a/test/com/sun/javadoc/testDeprecatedDocs/TestDeprecatedDocs.java b/test/com/sun/javadoc/testDeprecatedDocs/TestDeprecatedDocs.java
---- langtools/test/com/sun/javadoc/testDeprecatedDocs/TestDeprecatedDocs.java
-+++ langtools/test/com/sun/javadoc/testDeprecatedDocs/TestDeprecatedDocs.java
-@@ -76,24 +76,21 @@
- {TARGET_FILE, "pkg.DeprecatedClassByAnnotation.method()"},
- {TARGET_FILE, "pkg.DeprecatedClassByAnnotation.field"},
-
-- {TARGET_FILE2, "<STRONG>Deprecated.</STRONG>" + NL +
-- "<P>" + NL +
-- "<PRE><FONT SIZE=\"-1\">@Deprecated" + NL +
-- "</FONT>public class <STRONG>DeprecatedClassByAnnotation</STRONG>"},
-+ {TARGET_FILE2, "<pre>@Deprecated" + NL +
-+ "public class <strong>DeprecatedClassByAnnotation</strong>" + NL +
-+ "extends java.lang.Object</pre>"},
-
-- {TARGET_FILE2, "public int <STRONG>field</STRONG></PRE>" + NL +
-- "<DL>" + NL +
-- "<DD><STRONG>Deprecated.</STRONG>&nbsp;</DD></DL>"},
-+ {TARGET_FILE2, "<pre>@Deprecated" + NL +
-+ "public&nbsp;int field</pre>" + NL +
-+ "<div class=\"block\"><span class=\"strong\">Deprecated.</span>&nbsp;</div>"},
-
-- {TARGET_FILE2, "<FONT SIZE=\"-1\">@Deprecated" + NL +
-- "</FONT>public <STRONG>DeprecatedClassByAnnotation</STRONG>()</PRE>" + NL +
-- "<DL>" + NL +
-- "<DD><STRONG>Deprecated.</STRONG>"},
-+ {TARGET_FILE2, "<pre>@Deprecated" + NL +
-+ "public&nbsp;DeprecatedClassByAnnotation()</pre>" + NL +
-+ "<div class=\"block\"><span class=\"strong\">Deprecated.</span>&nbsp;</div>"},
-
-- {TARGET_FILE2, "<FONT SIZE=\"-1\">@Deprecated" + NL +
-- "</FONT>public void <STRONG>method</STRONG>()</PRE>" + NL +
-- "<DL>" + NL +
-- "<DD><STRONG>Deprecated.</STRONG>"},
-+ {TARGET_FILE2, "<pre>@Deprecated" + NL +
-+ "public&nbsp;void&nbsp;method()</pre>" + NL +
-+ "<div class=\"block\"><span class=\"strong\">Deprecated.</span>&nbsp;</div>"},
- };
-
- private static final String[][] NEGATED_TEST = NO_TEST;
-diff --git a/test/com/sun/javadoc/testDocRootInlineTag/TestDocRootInlineTag.java b/test/com/sun/javadoc/testDocRootInlineTag/TestDocRootInlineTag.java
---- langtools/test/com/sun/javadoc/testDocRootInlineTag/TestDocRootInlineTag.java
-+++ langtools/test/com/sun/javadoc/testDocRootInlineTag/TestDocRootInlineTag.java
-@@ -39,13 +39,13 @@
- private static final String BUG_ID = "4369014-4851991";
- private static final String[][] TEST = {
- {BUG_ID + FS + "TestDocRootTag.html",
-- "<A HREF=\"http://www.java.sun.com/j2se/1.4/docs/api/java/io/File.html?is-external=true\" " +
-- "title=\"class or interface in java.io\"><CODE>File</CODE></A>"},
-+ "<a href=\"http://www.java.sun.com/j2se/1.4/docs/api/java/io/File.html?is-external=true\" " +
-+ "title=\"class or interface in java.io\"><code>File</code></a>"},
- {BUG_ID + FS + "TestDocRootTag.html",
- "<a href=\"./glossary.html\">glossary</a>"},
- {BUG_ID + FS + "TestDocRootTag.html",
-- "<A HREF=\"http://www.java.sun.com/j2se/1.4/docs/api/java/io/File.html?is-external=true\" " +
-- "title=\"class or interface in java.io\"><CODE>Second File Link</CODE></A>"},
-+ "<a href=\"http://www.java.sun.com/j2se/1.4/docs/api/java/io/File.html?is-external=true\" " +
-+ "title=\"class or interface in java.io\"><code>Second File Link</code></a>"},
- {BUG_ID + FS + "TestDocRootTag.html", "The value of @docRoot is \"./\""},
- {BUG_ID + FS + "index-all.html", "My package page is " +
- "<a href=\"./pkg/package-summary.html\">here</a>"}
-diff --git a/test/com/sun/javadoc/testExternalOverridenMethod/TestExternalOverridenMethod.java b/test/com/sun/javadoc/testExternalOverridenMethod/TestExternalOverridenMethod.java
---- langtools/test/com/sun/javadoc/testExternalOverridenMethod/TestExternalOverridenMethod.java
-+++ langtools/test/com/sun/javadoc/testExternalOverridenMethod/TestExternalOverridenMethod.java
-@@ -39,17 +39,17 @@
- private static final String BUG_ID = "4857717";
- private static final String[][] TEST = {
- {BUG_ID + FS + "pkg" + FS + "XReader.html",
-- "<STRONG>Overrides:</STRONG></DT><DD><CODE><A HREF=\"" +
-- "http://java.sun.com/j2se/1.4.1/docs/api/java/io/FilterReader.html?is-external=true#read()\"" +
-- " title=\"class or interface in java.io\">read</A></CODE> in class " +
-- "<CODE><A HREF=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/FilterReader.html?is-external=true\"" +
-- " title=\"class or interface in java.io\">FilterReader</A>"},
-+ "<dt><strong>Overrides:</strong></dt>" + NL +
-+ "<dd><code><a href=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/FilterReader.html?is-external=true#read()\" " +
-+ "title=\"class or interface in java.io\">read</a></code>&nbsp;in class&nbsp;<code>" +
-+ "<a href=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/FilterReader.html?is-external=true\" " +
-+ "title=\"class or interface in java.io\">FilterReader</a></code></dd>"},
- {BUG_ID + FS + "pkg" + FS + "XReader.html",
-- "<STRONG>Specified by:</STRONG></DT><DD><CODE><A HREF=\"" +
-- "http://java.sun.com/j2se/1.4.1/docs/api/java/io/DataInput.html?is-external=true#readInt()\"" +
-- " title=\"class or interface in java.io\">readInt</A></CODE> in interface " +
-- "<CODE><A HREF=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/DataInput.html?is-external=true\"" +
-- " title=\"class or interface in java.io\">DataInput</A>"}};
-+ "<dt><strong>Specified by:</strong></dt>" + NL +
-+ "<dd><code><a href=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/DataInput.html?is-external=true#readInt()\" " +
-+ "title=\"class or interface in java.io\">readInt</a></code>&nbsp;in interface&nbsp;<code>" +
-+ "<a href=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/DataInput.html?is-external=true\" " +
-+ "title=\"class or interface in java.io\">DataInput</a></code></dd>"}};
-
-
-
-diff --git a/test/com/sun/javadoc/testHeadings/TestHeadings.java b/test/com/sun/javadoc/testHeadings/TestHeadings.java
---- langtools/test/com/sun/javadoc/testHeadings/TestHeadings.java
-+++ langtools/test/com/sun/javadoc/testHeadings/TestHeadings.java
-@@ -47,80 +47,65 @@
- private static final String[][] TEST = {
- //Package summary
- {BUG_ID + FS + "pkg1" + FS + "package-summary.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Class</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Description</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">" +
-+ "Class</th>" + NL + "<th class=\"colLast\" scope=\"col\"" +
-+ ">Description</th>"
- },
-
- // Class documentation
- {BUG_ID + FS + "pkg1" + FS + "C1.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-- " SCOPE=\"col\" NOWRAP>Field and Description</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
-+ "<th class=\"colLast\" scope=\"col\">Field and Description</th>"
- },
- {BUG_ID + FS + "pkg1" + FS + "C1.html",
-- "<TH ALIGN=\"left\"><STRONG>Methods inherited from class " + "java.lang.Object</STRONG></TH>"
-+ "<h3>Methods inherited from class&nbsp;java.lang.Object</h3>"
- },
-
- // Class use documentation
- {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Package</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-- " SCOPE=\"col\" NOWRAP>Description</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">Package</th>" + NL +
-+ "<th class=\"colLast\" scope=\"col\">Description</th>"
- },
- {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\"><FONT SIZE=\"+2\">" + NL +
-- "Uses of <A HREF=\"../../pkg1/C1.html\" " + "title=\"class in pkg1\">C1</A> in " + "<A HREF=\"../../pkg2/package-summary.html\">pkg2</A></FONT></TH>"
-- },
-- {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-- " SCOPE=\"col\" NOWRAP>Field and Description</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
-+ "<th class=\"colLast\" scope=\"col\">Field and Description</th>"
- },
-
- // Deprecated
- {BUG_ID + FS + "deprecated-list.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Method and Description</TH>"
-+ "<th class=\"colOne\" scope=\"col\">Method and Description</th>"
- },
-
- // Constant values
- {BUG_ID + FS + "constant-values.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-- " SCOPE=\"col\" NOWRAP>Constant Field</TH>" + NL +
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>Value</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">" +
-+ "Modifier and Type</th>" + NL + "<th scope=\"col\">Constant Field</th>" + NL +
-+ "<th class=\"colLast\" scope=\"col\">Value</th>"
- },
-
- // Serialized Form
- {BUG_ID + FS + "serialized-form.html",
-- "<TH ALIGN=\"center\"><FONT SIZE=\"+2\">" + NL +
-- "<STRONG>Package</STRONG> <STRONG>pkg1</STRONG></FONT></TH>"
-+ "<h2 title=\"Package\">Package&nbsp;pkg1</h2>"
- },
- {BUG_ID + FS + "serialized-form.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"2\"><FONT SIZE=\"+2\">" + NL +
-- "<STRONG>Class <A HREF=\"pkg1/C1.html\" " + "title=\"class in pkg1\">pkg1.C1</A> extends java.lang.Object " + "implements Serializable</STRONG></FONT></TH>"
-+ "<h3>Class <a href=\"pkg1/C1.html\" title=\"class in pkg1\">" +
-+ "pkg1.C1</a> extends java.lang.Object implements Serializable</h3>"
- },
- {BUG_ID + FS + "serialized-form.html",
-- "<TH ALIGN=\"left\" COLSPAN=\"1\"><FONT SIZE=\"+2\">" + NL +
-- "<STRONG>Serialized Fields</STRONG></FONT></TH>"
-+ "<h3>Serialized Fields</h3>"
- },
-
- // Overview Frame
- {BUG_ID + FS + "overview-frame.html",
-- "<TH ALIGN=\"left\" NOWRAP><FONT size=\"+1\" " + "CLASS=\"FrameTitleFont\">" + NL + "<STRONG>Test Files</STRONG></FONT></TH>"
-+ "<h1 title=\"Test Files\" class=\"bar\">Test Files</h1>"
- },
- {BUG_ID + FS + "overview-frame.html",
-- "<TITLE>" + NL +
-- "Overview List" + NL +
-- "</TITLE>"
-+ "<title>Overview List</title>"
- },
-
- // Overview Summary
- {BUG_ID + FS + "overview-summary.html",
-- "<TITLE>" + NL +
-- "Overview" + NL +
-- "</TITLE>"
-+ "<title>Overview</title>"
- },
-
- };
-diff --git a/test/com/sun/javadoc/testHelpOption/TestHelpOption.java b/test/com/sun/javadoc/testHelpOption/TestHelpOption.java
---- langtools/test/com/sun/javadoc/testHelpOption/TestHelpOption.java
-+++ langtools/test/com/sun/javadoc/testHelpOption/TestHelpOption.java
-@@ -91,8 +91,7 @@
-
- private static final String[][] TEST2 = {
- {BUG_ID + FS + "TestHelpOption.html",
-- "<A HREF=\"help-doc.html\"><FONT CLASS=\"NavBarFont1\">" +
-- "<STRONG>Help</STRONG></FONT></A>"
-+ "<li><a href=\"help-doc.html\">Help</a></li>"
- },
- };
- private static final String[][] NEGATED_TEST2 = NO_TEST;
-diff --git a/test/com/sun/javadoc/testHref/TestHref.java b/test/com/sun/javadoc/testHref/TestHref.java
---- langtools/test/com/sun/javadoc/testHref/TestHref.java
-+++ langtools/test/com/sun/javadoc/testHref/TestHref.java
-@@ -47,37 +47,41 @@
- private static final String[][] TEST = {
- //External link.
- {BUG_ID + FS + "pkg" + FS + "C1.html",
-- "HREF=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true#wait(long, int)\""
-+ "href=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true#wait(long, int)\""
- },
- //Member summary table link.
- {BUG_ID + FS + "pkg" + FS + "C1.html",
-- "HREF=\"../pkg/C1.html#method(int, int, java.util.ArrayList)\""
-+ "href=\"../pkg/C1.html#method(int, int, java.util.ArrayList)\""
- },
- //Anchor test.
- {BUG_ID + FS + "pkg" + FS + "C1.html",
-- "<A NAME=\"method(int, int, java.util.ArrayList)\"><!-- --></A>"
-+ "<a name=\"method(int, int, java.util.ArrayList)\">" + NL +
-+ "<!-- -->" + NL +
-+ "</a>"
- },
- //Backward compatibility anchor test.
- {BUG_ID + FS + "pkg" + FS + "C1.html",
-- "<A NAME=\"method(int, int, java.util.ArrayList)\"><!-- --></A>"
-+ "<a name=\"method(int, int, java.util.ArrayList)\">" + NL +
-+ "<!-- -->" + NL +
-+ "</a>"
- },
- //{@link} test.
- {BUG_ID + FS + "pkg" + FS + "C2.html",
-- "Link: <A HREF=\"../pkg/C1.html#method(int, int, java.util.ArrayList)\">"
-+ "Link: <a href=\"../pkg/C1.html#method(int, int, java.util.ArrayList)\">"
- },
- //@see test.
- {BUG_ID + FS + "pkg" + FS + "C2.html",
-- "See Also:</STRONG></DT><DD><A HREF=\"../pkg/C1.html#method(int, int, java.util.ArrayList)\">"
-+ "See Also:</span></dt><dd><a href=\"../pkg/C1.html#method(int, int, java.util.ArrayList)\">"
- },
-
- //Header does not link to the page itself.
- {BUG_ID + FS + "pkg" + FS + "C4.html",
-- "Class C4&lt;E extends C4&lt;E&gt;&gt;</H2>"
-+ "Class C4&lt;E extends C4&lt;E&gt;&gt;</h2>"
- },
-
- //Signature does not link to the page itself.
- {BUG_ID + FS + "pkg" + FS + "C4.html",
-- "public abstract class <STRONG>C4&lt;E extends C4&lt;E&gt;&gt;</STRONG>"
-+ "public abstract class <strong>C4&lt;E extends C4&lt;E&gt;&gt;</strong>"
- },
- };
- private static final String[][] NEGATED_TEST =
-diff --git a/test/com/sun/javadoc/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java b/test/com/sun/javadoc/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java
---- langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java
-+++ langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java
-@@ -43,149 +43,77 @@
- // Optional Element should print properly nested definition list tags
- // for default value.
- private static final String[][] TEST_ALL = {
-- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<PRE>public class " +
-- "<STRONG>C1</STRONG>" + NL + "extends " +
-- "java.lang.Object" + NL + "implements " +
-- "java.io.Serializable</PRE>"},
-- {BUG_ID + FS + "pkg1" + FS + "C4.html", "<DL>" + NL + "<DD><DL>" + NL +
-- "<DT><STRONG>Default:</STRONG></DT><DD>true</DD>" + NL +
-- "</DL>" + NL + "</DD>" + NL + "</DL>"}};
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<pre>public class <strong>C1</strong>" + NL +
-+ "extends java.lang.Object" + NL + "implements java.io.Serializable</pre>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C4.html", "<dl>" + NL +
-+ "<dt>Default:</dt>" + NL + "<dd>true</dd>" + NL +
-+ "</dl>"}};
-
- // Test for normal run of javadoc in which various ClassDocs and
- // serialized form should have properly nested definition list tags
- // enclosing comments, tags and deprecated information.
- private static final String[][] TEST_CMNT_DEPR = {
-- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL +
-- "<DT><STRONG>Since:</STRONG></DT>" + NL +
-- " <DD>JDK1.0</DD>" + NL + "<DT><STRONG>See Also:</STRONG></DT><DD>" +
-- "<A HREF=\"../pkg1/C2.html\" title=\"class in pkg1\">" +
-- "<CODE>C2</CODE></A>, " + NL +
-- "<A HREF=\"../serialized-form.html#pkg1.C1\">" +
-- "Serialized Form</A></DD></DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL +
-- "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
-- " 1.5, replaced by" + NL +
-- " <A HREF=\"../pkg1/C1.html#setUndecorated(boolean)\">" +
-- "<CODE>setUndecorated(boolean)</CODE></A>.</I></DD>" +
-- "<DD>This field indicates whether the C1 is undecorated." + NL +
-- "<P>" + NL + "</DD>" + NL + "<DD><DL>" + NL + "<DT><STRONG>" +
-- "Since:</STRONG></DT>" + NL + " <DD>1.4</DD>" + NL + "<DT>" +
-- "<STRONG>See Also:</STRONG></DT><DD>" +
-- "<A HREF=\"../pkg1/C1.html#setUndecorated(boolean)\"><CODE>" +
-- "setUndecorated(boolean)</CODE></A></DD></DL>" + NL +"</DD>" + NL +
-- "</DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL +
-- "<DD>Constructor." + NL + "<P>" + NL + "</DD>" + NL +
-- "<DD><DL>" + NL + "<DT><STRONG>Parameters:</STRONG></DT><DD>" +
-- "<CODE>title</CODE> - the title</DD><DD><CODE>test</CODE>" +
-- " - boolean value</DD>" + NL + "<DT><STRONG>Throws:</STRONG></DT>" + NL +
-- "<DD><CODE>java.lang.IllegalArgumentException</CODE>" +
-- " - if the <code>owner</code>'s" + NL + " <code>GraphicsConfiguration" +
-- "</code> is not from a screen device</DD>" + NL +"<DD><CODE>" +
-- "HeadlessException</CODE></DD></DL>" + NL + "</DD>" + NL +
-- "</DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL +
-- "<DD>Method comments." + NL + "<P>" + NL +
-- "</DD>" + NL + "<DD><DL>" + NL + "<DT><STRONG>Parameters:" +
-- "</STRONG></DT><DD><CODE>undecorated</CODE> - <code>true</code>" +
-- " if no decorations are" + NL + " to be enabled;" + NL +
-- " <code>false</code> if decorations are to be enabled." +
-- "</DD><DT><STRONG>Since:</STRONG></DT>" + NL +
-- " <DD>1.4</DD>" + NL + "<DT><STRONG>See Also:</STRONG></DT>" +
-- "<DD><A HREF=\"../pkg1/C1.html#readObject()\"><CODE>" +
-- "readObject()</CODE></A></DD></DL>" + NL + "</DD>" + NL +
-- "</DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL + "<DD><DL>" + NL +
-- "<DT><STRONG>Throws:</STRONG></DT>" + NL + "<DD><CODE>" +
-- "java.io.IOException</CODE></DD><DT><STRONG>See Also:" +
-- "</STRONG></DT><DD>" +
-- "<A HREF=\"../pkg1/C1.html#setUndecorated(boolean)\">" +
-- "<CODE>setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
-- "</DD>" + NL + "</DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C1.ModalExclusionType.html", "<DL>" + NL +
-- "<DD>No modal exclusion." + NL + "<P>" + NL +"</DD>" + NL +
-- "</DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C2.html", "<DL>" + NL + "<DD>Constructor." + NL +
-- "<P>" + NL +"</DD>" + NL + "</DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C2.html", "<DL>" + NL + "<DD><STRONG>" +
-- "Deprecated.</STRONG>&nbsp;<I>As of JDK version 1.5, replaced " +
-- "by" + NL + " <A HREF=\"../pkg1/C1.html#setUndecorated(boolean)\">" +
-- "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
-- "</DD><DD>Set visible." + NL + "<P>" + NL + "</DD>" +NL +
-- "<DD><DL>" + NL + "<DT><STRONG>Parameters:</STRONG></DT><DD>" +
-- "<CODE>set</CODE> - boolean</DD><DT><STRONG>Since:</STRONG></DT>" + NL +
-- " <DD>1.4</DD></DL>" + NL + "</DD>" + NL + "</DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C3.html", "<DL>" + NL + "<DD>Comment." + NL +
-- "<P>" + NL + "</DD>" + NL + "</DL>"},
-- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "<DD><DL>" + NL +
-- "<DT><STRONG>Throws:</STRONG></DT>" + NL + "<DD><CODE>" +
-- "java.io.IOException</CODE></DD><DT><STRONG>See Also:</STRONG>" +
-- "</DT><DD><A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-- "<CODE>C1.setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
-- "</DD>" + NL + "</DL>"},
-- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
-- "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version " +
-- "1.5, replaced by" + NL +
-- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-- "<CODE>setUndecorated(boolean)</CODE></A>.</I></DD>" +
-- "<DD>This field indicates whether the C1 is undecorated." + NL +
-- "<P>" + NL + "</DD>" + NL + "<DD>&nbsp;</DD>" + NL +
-- "<DD><DL>" + NL + "<DT><STRONG>Since:</STRONG></DT>" + NL +
-- " <DD>1.4</DD>" + NL + "<DT><STRONG>See Also:</STRONG>" +
-- "</DT><DD><A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-- "<CODE>C1.setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
-- "</DD>" + NL + "</DL>"},
-- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
-- "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
-- " 1.5, replaced by" + NL +
-- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-- "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
-- "</DD><DD>Reads the object stream." + NL + "<P>" + NL +
-- "</DD>" + NL + "<DD><DL>" + NL + "<DT><STRONG>Throws:" +
-- "</STRONG></DT>" + NL + "<DD><CODE><code>" +
-- "IOException</code></CODE></DD>" + NL +
-- "<DD><CODE>java.io.IOException</CODE></DD></DL>" + NL +
-- "</DD>" + NL + "</DL>"},
-- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
-- "<DD><STRONG>Deprecated.</STRONG>&nbsp;</DD><DD>" +
-- "The name for this class." + NL + "<P>" + NL + "</DD>" + NL +
-- "<DD>&nbsp;</DD>" + NL + "</DL>"}};
--
-- // Test with -nocomment option. The ClassDocs and serialized form should
-- // have properly nested definition list tags enclosing deprecated
-- // information and should not display definition lists for comments
-- // and tags.
-- private static final String[][] TEST_NOCMNT = {
-- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL + "<DD><STRONG>" +
-- "Deprecated.</STRONG>&nbsp;<I>As of JDK version 1.5, replaced by" + NL +
-- " <A HREF=\"../pkg1/C1.html#setUndecorated(boolean)\"><CODE>" +
-- "setUndecorated(boolean)</CODE></A>.</I></DD></DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C2.html", "<DL>" + NL +
-- "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
-- " 1.5, replaced by" + NL +
-- " <A HREF=\"../pkg1/C1.html#setUndecorated(boolean)\">" +
-- "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
-- "</DD></DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C5.html", "<PRE>" + NL +
-- "protected <STRONG>C5</STRONG>()</PRE>" + NL + "<DL>" + NL +
-- "<DD><STRONG>Deprecated.</STRONG>&nbsp;</DD></DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C5.html", "<PRE>" + NL +
-- "public void <STRONG>printInfo</STRONG>()</PRE>" + NL + "<DL>" + NL +
-- "<DD><STRONG>Deprecated.</STRONG>&nbsp;</DD></DL>"},
-- {BUG_ID + FS + "serialized-form.html", "<PRE>" + NL + "boolean <STRONG>" +
-- "undecorated</STRONG></PRE>" + NL + "<DL>" + NL + "<DD><STRONG>" +
-- "Deprecated.</STRONG>&nbsp;<I>As of JDK version 1.5, replaced by" + NL +
-- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\"><CODE>" +
-- "setUndecorated(boolean)</CODE></A>.</I></DD></DL>"},
-- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "<DD><STRONG>" +
-- "Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
-- " 1.5, replaced by" + NL +
-- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-- "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
-- "</DD></DL>"},
-- {BUG_ID + FS + "serialized-form.html", "<PRE>" + NL + "int <STRONG>" +
-- "publicKey</STRONG></PRE>" + NL + "<DL>" + NL + "<DD><STRONG>" +
-- "Deprecated.</STRONG>&nbsp;</DD></DL>"}};
-+ {BUG_ID + FS + "pkg1" + FS + "package-summary.html", "<dl>" +
-+ "<dt><span class=\"strong\">Since:</span></dt>" + NL +
-+ " <dd>JDK1.0</dd></dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<dl><dt><span class=\"strong\">Since:</span></dt>" + NL +
-+ " <dd>JDK1.0</dd>" + NL + "<dt><span class=\"strong\">See Also:</span></dt>" +
-+ "<dd><a href=\"../pkg1/C2.html\" title=\"class in pkg1\"><code>" +
-+ "C2</code></a>, " + NL + "<a href=\"../serialized-form.html#pkg1.C1\">" +
-+ "Serialized Form</a></dd></dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<dl><dt><span class=\"strong\">Since:</span></dt>" + NL +
-+ " <dd>1.4</dd>" + NL +
-+ "<dt><span class=\"strong\">See Also:</span></dt><dd>" +
-+ "<a href=\"../pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<code>setUndecorated(boolean)</code></a></dd></dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<dl><dt><span class=\"strong\">Parameters:</span></dt><dd><code>title" +
-+ "</code> - the title</dd><dd><code>test</code> - boolean value" +
-+ "</dd>" + NL + "<dt><span class=\"strong\">Throws:</span></dt>" + NL +
-+ "<dd><code>java.lang.IllegalArgumentException</code> - if the " +
-+ "<code>owner</code>'s" + NL +
-+ " <code>GraphicsConfiguration</code> is not from a screen " +
-+ "device</dd>" + NL + "<dd><code>HeadlessException</code></dd></dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<dl><dt><span class=\"strong\">Parameters:</span></dt><dd><code>undecorated" +
-+ "</code> - <code>true</code> if no decorations are" + NL +
-+ " to be enabled;" + NL + " <code>false</code> " +
-+ "if decorations are to be enabled.</dd><dt><span class=\"strong\">Since:" +
-+ "</span></dt>" + NL + " <dd>1.4</dd>" + NL +
-+ "<dt><span class=\"strong\">See Also:</span></dt><dd>" +
-+ "<a href=\"../pkg1/C1.html#readObject()\"><code>readObject()" +
-+ "</code></a></dd></dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<dl><dt><span class=\"strong\">Throws:</span></dt>" + NL +
-+ "<dd><code>java.io.IOException</code></dd><dt><span class=\"strong\">See Also:" +
-+ "</span></dt><dd><a href=\"../pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<code>setUndecorated(boolean)</code></a></dd></dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C2.html", "<dl><dt><span class=\"strong\">Parameters:" +
-+ "</span></dt><dd><code>set</code> - boolean</dd><dt><span class=\"strong\">" +
-+ "Since:</span></dt>" + NL + " <dd>1.4</dd></dl>"},
-+ {BUG_ID + FS + "serialized-form.html", "<dl><dt><span class=\"strong\">Throws:</span>" +
-+ "</dt>" + NL + "<dd><code>" +
-+ "java.io.IOException</code></dd><dt><span class=\"strong\">See Also:</span>" +
-+ "</dt><dd><a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<code>C1.setUndecorated(boolean)</code></a></dd></dl>"},
-+ {BUG_ID + FS + "serialized-form.html", "<span class=\"strong\">Deprecated.</span>" +
-+ "&nbsp;<i>As of JDK version 1.5, replaced by" + NL +
-+ " <a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<code>setUndecorated(boolean)</code></a>.</i></div>" + NL +
-+ "<div class=\"block\">This field indicates whether the C1 is " +
-+ "undecorated.</div>" + NL + "&nbsp;" + NL + "<dl><dt><span class=\"strong\">Since:</span></dt>" + NL +
-+ " <dd>1.4</dd>" + NL + "<dt><span class=\"strong\">See Also:</span>" +
-+ "</dt><dd><a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<code>C1.setUndecorated(boolean)</code></a></dd></dl>"},
-+ {BUG_ID + FS + "serialized-form.html", "<span class=\"strong\">Deprecated.</span>" +
-+ "&nbsp;<i>As of JDK version 1.5, replaced by" + NL +
-+ " <a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<code>setUndecorated(boolean)</code></a>.</i></div>" + NL +
-+ "<div class=\"block\">Reads the object stream.</div>" + NL +
-+ "<dl><dt><span class=\"strong\">Throws:" +
-+ "</span></dt>" + NL + "<dd><code><code>" +
-+ "IOException</code></code></dd>" + NL +
-+ "<dd><code>java.io.IOException</code></dd></dl>"},
-+ {BUG_ID + FS + "serialized-form.html", "<span class=\"strong\">Deprecated.</span>" +
-+ "&nbsp;</div>" + NL +
-+ "<div class=\"block\">The name for this class.</div>"}};
-
- // Test with -nodeprecated option. The ClassDocs should have properly nested
- // definition list tags enclosing comments and tags. The ClassDocs should not
-@@ -193,133 +121,104 @@
- // should display properly nested definition list tags for comments, tags
- // and deprecated information.
- private static final String[][] TEST_NODEPR = {
-- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL +
-- "<DT><STRONG>Since:</STRONG></DT>" + NL +
-- " <DD>JDK1.0</DD>" + NL + "<DT><STRONG>See Also:</STRONG></DT><DD>" +
-- "<A HREF=\"../pkg1/C2.html\" title=\"class in pkg1\">" +
-- "<CODE>C2</CODE></A>, " + NL +
-- "<A HREF=\"../serialized-form.html#pkg1.C1\">" +
-- "Serialized Form</A></DD></DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL +
-- "<DD>Constructor." + NL + "<P>" + NL + "</DD>" + NL +
-- "<DD><DL>" + NL + "<DT><STRONG>Parameters:</STRONG></DT><DD>" +
-- "<CODE>title</CODE> - the title</DD><DD><CODE>test</CODE>" +
-- " - boolean value</DD>" + NL + "<DT><STRONG>Throws:</STRONG></DT>" + NL +
-- "<DD><CODE>java.lang.IllegalArgumentException</CODE>" +
-- " - if the <code>owner</code>'s" + NL + " <code>GraphicsConfiguration" +
-- "</code> is not from a screen device</DD>" + NL +"<DD><CODE>" +
-- "HeadlessException</CODE></DD></DL>" + NL + "</DD>" + NL +
-- "</DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL +
-- "<DD>Method comments." + NL + "<P>" + NL +
-- "</DD>" + NL + "<DD><DL>" + NL + "<DT><STRONG>Parameters:" +
-- "</STRONG></DT><DD><CODE>undecorated</CODE> - <code>true</code>" +
-+ {BUG_ID + FS + "pkg1" + FS + "package-summary.html", "<dl>" +
-+ "<dt><span class=\"strong\">Since:</span></dt>" + NL +
-+ " <dd>JDK1.0</dd></dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<dl><dt><span class=\"strong\">Since:</span>" +
-+ "</dt>" + NL + " <dd>JDK1.0</dd>" + NL + "<dt><span class=\"strong\">See Also:" +
-+ "</span></dt><dd><a href=\"../pkg1/C2.html\" title=\"class in pkg1\">" +
-+ "<code>C2</code></a>, " + NL + "<a href=\"../serialized-form.html#pkg1.C1\">" +
-+ "Serialized Form</a></dd></dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<dl><dt><span class=\"strong\">Parameters:" +
-+ "</span></dt><dd><code>title</code> - the title</dd><dd><code>" +
-+ "test</code> - boolean value</dd>" + NL + "<dt><span class=\"strong\">Throws:" +
-+ "</span></dt>" + NL + "<dd><code>java.lang.IllegalArgumentException" +
-+ "</code> - if the <code>owner</code>'s" + NL + " <code>GraphicsConfiguration" +
-+ "</code> is not from a screen device</dd>" + NL + "<dd><code>" +
-+ "HeadlessException</code></dd></dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<dl><dt><span class=\"strong\">Parameters:" +
-+ "</span></dt><dd><code>undecorated</code> - <code>true</code>" +
- " if no decorations are" + NL + " to be enabled;" + NL +
- " <code>false</code> if decorations are to be enabled." +
-- "</DD><DT><STRONG>Since:</STRONG></DT>" + NL +
-- " <DD>1.4</DD>" + NL + "<DT><STRONG>See Also:</STRONG></DT>" +
-- "<DD><A HREF=\"../pkg1/C1.html#readObject()\"><CODE>" +
-- "readObject()</CODE></A></DD></DL>" + NL + "</DD>" + NL +
-- "</DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL + "<DD><DL>" + NL +
-- "<DT><STRONG>Throws:</STRONG></DT>" + NL + "<DD><CODE>" +
-- "java.io.IOException</CODE></DD><DT><STRONG>See Also:" +
-- "</STRONG></DT><DD>" +
-- "<A HREF=\"../pkg1/C1.html#setUndecorated(boolean)\">" +
-- "<CODE>setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
-- "</DD>" + NL + "</DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C1.ModalExclusionType.html", "<DL>" + NL +
-- "<DD>No modal exclusion." + NL + "<P>" + NL +"</DD>" + NL +
-- "</DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C2.html", "<DL>" + NL + "<DD>Constructor." + NL +
-- "<P>" + NL +"</DD>" + NL + "</DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C3.html", "<DL>" + NL + "<DD>Comment." + NL +
-- "<P>" + NL + "</DD>" + NL + "</DL>"},
-- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "<DD><DL>" + NL +
-- "<DT><STRONG>Throws:</STRONG></DT>" + NL + "<DD><CODE>" +
-- "java.io.IOException</CODE></DD><DT><STRONG>See Also:</STRONG>" +
-- "</DT><DD><A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-- "<CODE>C1.setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
-- "</DD>" + NL + "</DL>"},
-- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
-- "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version " +
-- "1.5, replaced by" + NL +
-- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-- "<CODE>setUndecorated(boolean)</CODE></A>.</I></DD>" +
-- "<DD>This field indicates whether the C1 is undecorated." + NL +
-- "<P>" + NL + "</DD>" + NL + "<DD>&nbsp;</DD>" + NL +
-- "<DD><DL>" + NL + "<DT><STRONG>Since:</STRONG></DT>" + NL +
-- " <DD>1.4</DD>" + NL + "<DT><STRONG>See Also:</STRONG>" +
-- "</DT><DD><A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-- "<CODE>C1.setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
-- "</DD>" + NL + "</DL>"},
-- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
-- "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
-- " 1.5, replaced by" + NL +
-- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-- "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
-- "</DD><DD>Reads the object stream." + NL + "<P>" + NL +
-- "</DD>" + NL + "<DD><DL>" + NL + "<DT><STRONG>Throws:" +
-- "</STRONG></DT>" + NL + "<DD><CODE><code>" +
-- "IOException</code></CODE></DD>" + NL +
-- "<DD><CODE>java.io.IOException</CODE></DD></DL>" + NL +
-- "</DD>" + NL + "</DL>"},
-- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
-- "<DD><STRONG>Deprecated.</STRONG>&nbsp;</DD><DD>" +
-- "The name for this class." + NL + "<P>" + NL + "</DD>" + NL +
-- "<DD>&nbsp;</DD>" + NL + "</DL>"}};
-+ "</dd><dt><span class=\"strong\">Since:</span></dt>" + NL + " <dd>1.4</dd>" + NL +
-+ "<dt><span class=\"strong\">See Also:</span></dt><dd><a href=\"../pkg1/C1.html#readObject()\">" +
-+ "<code>readObject()</code></a></dd></dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<dl><dt><span class=\"strong\">Throws:</span>" +
-+ "</dt>" + NL + "<dd><code>java.io.IOException</code></dd><dt>" +
-+ "<span class=\"strong\">See Also:</span></dt><dd><a href=\"../pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<code>setUndecorated(boolean)</code></a></dd></dl>"},
-+ {BUG_ID + FS + "serialized-form.html", "<dl><dt><span class=\"strong\">Throws:</span>" +
-+ "</dt>" + NL + "<dd><code>" +
-+ "java.io.IOException</code></dd><dt><span class=\"strong\">See Also:</span>" +
-+ "</dt><dd><a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<code>C1.setUndecorated(boolean)</code></a></dd></dl>"},
-+ {BUG_ID + FS + "serialized-form.html", "<span class=\"strong\">Deprecated.</span>" +
-+ "&nbsp;<i>As of JDK version 1.5, replaced by" + NL +
-+ " <a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<code>setUndecorated(boolean)</code></a>.</i></div>" + NL +
-+ "<div class=\"block\">This field indicates whether the C1 is " +
-+ "undecorated.</div>" + NL + "&nbsp;" + NL + "<dl><dt><span class=\"strong\">Since:</span></dt>" + NL +
-+ " <dd>1.4</dd>" + NL + "<dt><span class=\"strong\">See Also:</span>" +
-+ "</dt><dd><a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<code>C1.setUndecorated(boolean)</code></a></dd></dl>"},
-+ {BUG_ID + FS + "serialized-form.html", "<span class=\"strong\">Deprecated.</span>" +
-+ "&nbsp;<i>As of JDK version 1.5, replaced by" + NL +
-+ " <a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<code>setUndecorated(boolean)</code></a>.</i></div>" + NL +
-+ "<div class=\"block\">Reads the object stream.</div>" + NL +
-+ "<dl><dt><span class=\"strong\">Throws:" +
-+ "</span></dt>" + NL + "<dd><code><code>" +
-+ "IOException</code></code></dd>" + NL +
-+ "<dd><code>java.io.IOException</code></dd></dl>"},
-+ {BUG_ID + FS + "serialized-form.html", "<span class=\"strong\">Deprecated.</span>" +
-+ "&nbsp;</div>" + NL + "<div class=\"block\">" +
-+ "The name for this class.</div>"}};
-
- // Test with -nocomment and -nodeprecated options. The ClassDocs whould
-- // not display definition lists for any member details. The serialized
-- // form should display properly nested definition list tags for
-- // deprecated information only.
-+ // not display definition lists for any member details.
- private static final String[][] TEST_NOCMNT_NODEPR = {
-- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<PRE>" + NL + "public void " +
-- "<STRONG>readObject</STRONG>()" + NL + " throws" +
-- " java.io.IOException</PRE>" + NL + "<HR>"},
-- {BUG_ID + FS + "pkg1" + FS + "C2.html", "<PRE>" +NL + "public <STRONG>" +
-- "C2</STRONG>()</PRE>" + NL + "<HR>"},
-- {BUG_ID + FS + "pkg1" + FS + "C1.ModalExclusionType.html", "<PRE>" + NL +
-- "public static final " +
-- "<A HREF=\"../pkg1/C1.ModalExclusionType.html\" " +
-- "title=\"enum in pkg1\">C1.ModalExclusionType</A> <STRONG>" +
-- "APPLICATION_EXCLUDE</STRONG></PRE>" + NL + "<HR>"},
-- {BUG_ID + FS + "serialized-form.html", "<PRE>" + NL + "boolean <STRONG>" +
-- "undecorated</STRONG></PRE>" + NL + "<DL>" + NL + "<DD><STRONG>" +
-- "Deprecated.</STRONG>&nbsp;<I>As of JDK version 1.5, replaced by" + NL +
-- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\"><CODE>" +
-- "setUndecorated(boolean)</CODE></A>.</I></DD></DL>"},
-- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "<DD><STRONG>" +
-- "Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<pre>public&nbsp;void&nbsp;readObject()" + NL +
-+ " throws java.io.IOException</pre>" + NL + "</li>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C2.html", "<pre>public&nbsp;C2()</pre>" + NL +
-+ "</li>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.ModalExclusionType.html", "<pre>public " +
-+ "static final&nbsp;<a href=\"../pkg1/C1.ModalExclusionType.html\" " +
-+ "title=\"enum in pkg1\">C1.ModalExclusionType</a> " +
-+ "APPLICATION_EXCLUDE</pre>" + NL + "</li>"},
-+ {BUG_ID + FS + "serialized-form.html", "<pre>boolean " +
-+ "undecorated</pre>" + NL + "<div class=\"block\"><span class=\"strong\">" +
-+ "Deprecated.</span>&nbsp;<i>As of JDK version 1.5, replaced by" + NL +
-+ " <a href=\"pkg1/C1.html#setUndecorated(boolean)\"><code>" +
-+ "setUndecorated(boolean)</code></a>.</i></div>" + NL + "</li>"},
-+ {BUG_ID + FS + "serialized-form.html", "<span class=\"strong\">" +
-+ "Deprecated.</span>&nbsp;<i>As of JDK version" +
- " 1.5, replaced by" + NL +
-- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-- "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
-- "</DD></DL>"},
-- {BUG_ID + FS + "serialized-form.html", "<PRE>" + NL + "int <STRONG>" +
-- "publicKey</STRONG></PRE>" + NL + "<DL>" + NL + "<DD><STRONG>" +
-- "Deprecated.</STRONG>&nbsp;</DD></DL>"}};
-+ " <a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<code>setUndecorated(boolean)</code></a>.</i></div>" + NL + "</li>"}};
-
- // Test for valid HTML generation which should not comprise of empty
- // definition list tags.
- private static final String[][] NEGATED_TEST = {
-- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL></DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL + "</DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C1.ModalExclusionType.html", "<DL></DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C1.ModalExclusionType.html", "<DL>" + NL + "</DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C2.html", "<DL></DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C2.html", "<DL>" + NL + "</DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C2.ModalType.html", "<DL></DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C2.ModalType.html", "<DL>" + NL + "</DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C3.html", "<DL></DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C3.html", "<DL>" + NL + "</DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C4.html", "<DL></DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C4.html", "<DL>" + NL + "</DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C5.html", "<DL></DL>"},
-- {BUG_ID + FS + "pkg1" + FS + "C5.html", "<DL>" + NL + "</DL>"},
-- {BUG_ID + FS + "overview-tree.html", "<DL></DL>"},
-- {BUG_ID + FS + "overview-tree.html", "<DL>" + NL + "</DL>"},
-- {BUG_ID + FS + "serialized-form.html", "<DL></DL>"},
-- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "</DL>"}};
-+ {BUG_ID + FS + "pkg1" + FS + "package-summary.html", "<dl></dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "package-summary.html", "<dl>" + NL + "</dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<dl></dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<dl>" + NL + "</dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.ModalExclusionType.html", "<dl></dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C1.ModalExclusionType.html", "<dl>" + NL + "</dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C2.html", "<dl></dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C2.html", "<dl>" + NL + "</dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C2.ModalType.html", "<dl></dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C2.ModalType.html", "<dl>" + NL + "</dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C3.html", "<dl></dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C3.html", "<dl>" + NL + "</dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C4.html", "<dl></dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C4.html", "<dl>" + NL + "</dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C5.html", "<dl></dl>"},
-+ {BUG_ID + FS + "pkg1" + FS + "C5.html", "<dl>" + NL + "</dl>"},
-+ {BUG_ID + FS + "overview-tree.html", "<dl></dl>"},
-+ {BUG_ID + FS + "overview-tree.html", "<dl>" + NL + "</dl>"},
-+ {BUG_ID + FS + "serialized-form.html", "<dl></dl>"},
-+ {BUG_ID + FS + "serialized-form.html", "<dl>" + NL + "</dl>"}};
-
- private static final String[] ARGS1 =
- new String[] {
-@@ -346,7 +245,7 @@
- run(tester, ARGS1, TEST_ALL, NEGATED_TEST);
- run(tester, ARGS1, TEST_CMNT_DEPR, NEGATED_TEST);
- run(tester, ARGS2, TEST_ALL, NEGATED_TEST);
-- run(tester, ARGS2, TEST_NOCMNT, TEST_CMNT_DEPR);
-+ run(tester, ARGS2, NO_TEST, TEST_CMNT_DEPR);
- run(tester, ARGS3, TEST_ALL, NEGATED_TEST);
- run(tester, ARGS3, TEST_NODEPR, TEST_NOCMNT_NODEPR);
- run(tester, ARGS4, TEST_ALL, NEGATED_TEST);
-diff --git a/test/com/sun/javadoc/testHtmlDocument/TestHtmlDocument.java b/test/com/sun/javadoc/testHtmlDocument/TestHtmlDocument.java
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testHtmlDocument/TestHtmlDocument.java
-@@ -0,0 +1,155 @@
-+/*
-+ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 6851834
-+ * @summary This test verifies the HTML document generation for javadoc output.
-+ * @author Bhavesh Patel
-+ * @build TestHtmlDocument
-+ * @run main TestHtmlDocument
-+ */
-+
-+import java.io.*;
-+import com.sun.tools.doclets.formats.html.markup.*;
-+
-+/**
-+ * The class reads each file, complete with newlines, into a string to easily
-+ * compare the existing markup with the generated markup.
-+ */
-+public class TestHtmlDocument {
-+
-+ private static final String BUGID = "6851834";
-+ private static final String BUGNAME = "TestHtmlDocument";
-+ private static final String FS = System.getProperty("file.separator");
-+ private static String srcdir = System.getProperty("test.src", ".");
-+
-+ // Entry point
-+ public static void main(String[] args) throws IOException {
-+ // Check whether the generated markup is same as the existing markup.
-+ if (generateHtmlTree().equals(readFileToString(srcdir + FS + "testMarkup.html"))) {
-+ System.out.println("\nTest passed for bug " + BUGID + " (" + BUGNAME + ")\n");
-+ } else {
-+ throw new Error("\nTest failed for bug " + BUGID + " (" + BUGNAME + ")\n");
-+ }
-+ }
-+
-+ // Generate the HTML output using the HTML document generation within doclet.
-+ public static String generateHtmlTree() {
-+ // Document type for the HTML document
-+ DocType htmlDocType = DocType.Transitional();
-+ HtmlTree html = new HtmlTree(HtmlTag.HTML);
-+ HtmlTree head = new HtmlTree(HtmlTag.HEAD);
-+ HtmlTree title = new HtmlTree(HtmlTag.TITLE);
-+ // String content within the document
-+ StringContent titleContent = new StringContent("Markup test");
-+ title.addContent(titleContent);
-+ head.addContent(title);
-+ // Test META tag
-+ HtmlTree meta = new HtmlTree(HtmlTag.META);
-+ meta.addAttr(HtmlAttr.NAME, "keywords");
-+ meta.addAttr(HtmlAttr.CONTENT, "testContent");
-+ head.addContent(meta);
-+ // Test invalid META tag
-+ HtmlTree invmeta = new HtmlTree(HtmlTag.META);
-+ head.addContent(invmeta);
-+ // Test LINK tag
-+ HtmlTree link = new HtmlTree(HtmlTag.LINK);
-+ link.addAttr(HtmlAttr.REL, "testRel");
-+ link.addAttr(HtmlAttr.HREF, "testLink.html");
-+ head.addContent(link);
-+ // Test invalid LINK tag
-+ HtmlTree invlink = new HtmlTree(HtmlTag.LINK);
-+ head.addContent(invlink);
-+ html.addContent(head);
-+ // Comment within the document
-+ Comment bodyMarker = new Comment("======== START OF BODY ========");
-+ html.addContent(bodyMarker);
-+ HtmlTree body = new HtmlTree(HtmlTag.BODY);
-+ Comment pMarker = new Comment("======== START OF PARAGRAPH ========");
-+ body.addContent(pMarker);
-+ HtmlTree p = new HtmlTree(HtmlTag.P);
-+ StringContent bodyContent = new StringContent(
-+ "This document is generated from sample source code and HTML " +
-+ "files with examples of a wide variety of Java language constructs: packages, " +
-+ "subclasses, subinterfaces, nested classes, nested interfaces," +
-+ "inheriting from other packages, constructors, fields," +
-+ "methods, and so forth. ");
-+ p.addContent(bodyContent);
-+ StringContent anchorContent = new StringContent("Click Here");
-+ p.addContent(HtmlTree.A("testLink.html", anchorContent));
-+ StringContent pContent = new StringContent(" to <test> out a link.");
-+ p.addContent(pContent);
-+ body.addContent(p);
-+ HtmlTree p1 = new HtmlTree(HtmlTag.P);
-+ // Test another version of A tag.
-+ HtmlTree anchor = new HtmlTree(HtmlTag.A);
-+ anchor.addAttr(HtmlAttr.HREF, "testLink.html");
-+ anchor.addAttr(HtmlAttr.NAME, "Another version of a tag");
-+ p1.addContent(anchor);
-+ body.addContent(p1);
-+ // Test for empty tags.
-+ HtmlTree dl = new HtmlTree(HtmlTag.DL);
-+ html.addContent(dl);
-+ // Test for empty nested tags.
-+ HtmlTree dlTree = new HtmlTree(HtmlTag.DL);
-+ dlTree.addContent(new HtmlTree(HtmlTag.DT));
-+ dlTree.addContent(new HtmlTree (HtmlTag.DD));
-+ html.addContent(dlTree);
-+ HtmlTree dlDisplay = new HtmlTree(HtmlTag.DL);
-+ dlDisplay.addContent(new HtmlTree(HtmlTag.DT));
-+ HtmlTree dd = new HtmlTree (HtmlTag.DD);
-+ StringContent ddContent = new StringContent("Test DD");
-+ dd.addContent(ddContent);
-+ dlDisplay.addContent(dd);
-+ body.addContent(dlDisplay);
-+ StringContent emptyString = new StringContent("");
-+ body.addContent(emptyString);
-+ Comment emptyComment = new Comment("");
-+ body.addContent(emptyComment);
-+ HtmlTree hr = new HtmlTree(HtmlTag.HR);
-+ body.addContent(hr);
-+ html.addContent(body);
-+ HtmlDocument htmlDoc = new HtmlDocument(htmlDocType, html);
-+ return htmlDoc.toString();
-+ }
-+
-+ // Read the file into a String
-+ public static String readFileToString(String filename) throws IOException {
-+ File file = new File(filename);
-+ if ( !file.exists() ) {
-+ System.out.println("\nFILE DOES NOT EXIST: " + filename);
-+ }
-+ BufferedReader in = new BufferedReader(new FileReader(file));
-+ // Create an array of characters the size of the file
-+ char[] allChars = new char[(int)file.length()];
-+ // Read the characters into the allChars array
-+ in.read(allChars, 0, (int)file.length());
-+ in.close();
-+ // Convert to a string
-+ String allCharsString = new String(allChars);
-+ return allCharsString;
-+ }
-+}
-diff --git a/test/com/sun/javadoc/testHtmlDocument/testLink.html b/test/com/sun/javadoc/testHtmlDocument/testLink.html
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testHtmlDocument/testLink.html
-@@ -0,0 +1,9 @@
-+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-+<html>
-+<head>
-+<title>Markup test</title>
-+</head>
-+<body>
-+This is a test for link.
-+</body>
-+</html>
-diff --git a/test/com/sun/javadoc/testHtmlDocument/testMarkup.html b/test/com/sun/javadoc/testHtmlDocument/testMarkup.html
-new file mode 100644
---- /dev/null
-+++ langtools/test/com/sun/javadoc/testHtmlDocument/testMarkup.html
-@@ -0,0 +1,18 @@
-+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-+<html>
-+<head>
-+<title>Markup test</title>
-+<meta name="keywords" content="testContent">
-+<link rel="testRel" href="testLink.html">
-+</head>
-+<!-- ======== START OF BODY ======== -->
-+<body>
-+<!-- ======== START OF PARAGRAPH ======== -->
-+<p>This document is generated from sample source code and HTML files with examples of a wide variety of Java language constructs: packages, subclasses, subinterfaces, nested classes, nested interfaces,inheriting from other packages, constructors, fields,methods, and so forth. <a href="testLink.html">Click Here</a> to &lt;test&gt; out a link.</p>
-+<p><a href="testLink.html" name="Another version of a tag"></a></p>
-+<dl>
-+<dd>Test DD</dd>
-+</dl>
-+<hr>
-+</body>
-+</html>
-diff --git a/test/com/sun/javadoc/testHtmlStrongTag/TestHtmlStrongTag.java b/test/com/sun/javadoc/testHtmlStrongTag/TestHtmlStrongTag.java
---- langtools/test/com/sun/javadoc/testHtmlStrongTag/TestHtmlStrongTag.java
-+++ langtools/test/com/sun/javadoc/testHtmlStrongTag/TestHtmlStrongTag.java
-@@ -38,7 +38,7 @@
-
- private static final String BUG_ID = "6786028";
- private static final String[][] TEST1 = {
-- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<STRONG>See Also:</STRONG>"}};
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<span class=\"strong\">See Also:</span>"}};
- private static final String[][] NEGATED_TEST1 = {
- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<STRONG>Method Summary</STRONG>"},
- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<B>"},
-diff --git a/test/com/sun/javadoc/testHtmlTableTags/TestHtmlTableTags.java b/test/com/sun/javadoc/testHtmlTableTags/TestHtmlTableTags.java
---- langtools/test/com/sun/javadoc/testHtmlTableTags/TestHtmlTableTags.java
-+++ langtools/test/com/sun/javadoc/testHtmlTableTags/TestHtmlTableTags.java
-@@ -50,139 +50,128 @@
-
- //Package summary
- {BUG_ID + FS + "pkg1" + FS + "package-summary.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Class Summary table, " +
-+ "<table class=\"packageSummary\" border=\"0\" cellpadding=\"3\"" +
-+ " cellspacing=\"0\" summary=\"Class Summary table, " +
- "listing classes, and an explanation\">"
- },
- {BUG_ID + FS + "pkg1" + FS + "package-summary.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Interface Summary table, " +
-+ "<table class=\"packageSummary\" border=\"0\" cellpadding=\"3\"" +
-+ " cellspacing=\"0\" summary=\"Interface Summary table, " +
- "listing interfaces, and an explanation\">"
- },
- {BUG_ID + FS + "pkg2" + FS + "package-summary.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Enum Summary table, " +
-+ "<table class=\"packageSummary\" border=\"0\" cellpadding=\"3\"" +
-+ " cellspacing=\"0\" summary=\"Enum Summary table, " +
- "listing enums, and an explanation\">"
- },
- {BUG_ID + FS + "pkg2" + FS + "package-summary.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Annotation Types Summary table, " +
-+ "<table class=\"packageSummary\" border=\"0\" cellpadding=\"3\"" +
-+ " cellspacing=\"0\" summary=\"Annotation Types Summary table, " +
- "listing annotation types, and an explanation\">"
- },
- // Class documentation
- {BUG_ID + FS + "pkg1" + FS + "C1.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Field Summary table, " +
-- "listing fields, and an explanation\">"
-+ "<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" " +
-+ "cellspacing=\"0\" summary=\"Field Summary table, listing fields, " +
-+ "and an explanation\">"
- },
- {BUG_ID + FS + "pkg1" + FS + "C1.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Method Summary table, " +
-- "listing methods, and an explanation\">"
-+ "<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" " +
-+ "cellspacing=\"0\" summary=\"Method Summary table, listing methods, " +
-+ "and an explanation\">"
- },
- {BUG_ID + FS + "pkg2" + FS + "C2.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Nested Class Summary table, " +
-- "listing nested classes, and an explanation\">"
-+ "<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" " +
-+ "cellspacing=\"0\" summary=\"Nested Class Summary table, listing " +
-+ "nested classes, and an explanation\">"
- },
- {BUG_ID + FS + "pkg2" + FS + "C2.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Constructor Summary table, " +
-- "listing constructors, and an explanation\">"
-+ "<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" " +
-+ "cellspacing=\"0\" summary=\"Constructor Summary table, listing " +
-+ "constructors, and an explanation\">"
- },
- {BUG_ID + FS + "pkg2" + FS + "C2.ModalExclusionType.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Enum Constant Summary table, " +
-- "listing enum constants, and an explanation\">"
-+ "<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" " +
-+ "cellspacing=\"0\" summary=\"Enum Constant Summary table, listing " +
-+ "enum constants, and an explanation\">"
- },
- {BUG_ID + FS + "pkg2" + FS + "C3.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Required Element Summary table, " +
-+ "<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" " +
-+ "cellspacing=\"0\" summary=\"Required Element Summary table, " +
- "listing required elements, and an explanation\">"
- },
- {BUG_ID + FS + "pkg2" + FS + "C4.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Optional Element Summary table, " +
-+ "<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" " +
-+ "cellspacing=\"0\" summary=\"Optional Element Summary table, " +
- "listing optional elements, and an explanation\">"
- },
- // Class use documentation
- {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "I1.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
-- "listing packages, and an explanation\">"
-+ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
-+ "table, listing packages, and an explanation\">"
- },
- {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
-- "listing fields, and an explanation\">"
-+ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
-+ "table, listing fields, and an explanation\">"
- },
- {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
-- "listing methods, and an explanation\">"
-+ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
-+ "table, listing methods, and an explanation\">"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
-- "listing fields, and an explanation\">"
-+ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
-+ "table, listing fields, and an explanation\">"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
-- "listing methods, and an explanation\">"
-+ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
-+ "table, listing methods, and an explanation\">"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.ModalExclusionType.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
-- "listing packages, and an explanation\">"
-+ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
-+ "table, listing packages, and an explanation\">"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.ModalExclusionType.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
-- "listing methods, and an explanation\">"
-+ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
-+ "table, listing methods, and an explanation\">"
- },
- // Package use documentation
- {BUG_ID + FS + "pkg1" + FS + "package-use.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
-- "listing packages, and an explanation\">"
-+ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
-+ "table, listing packages, and an explanation\">"
- },
- {BUG_ID + FS + "pkg1" + FS + "package-use.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
-- "listing classes, and an explanation\">"
-+ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
-+ "table, listing classes, and an explanation\">"
- },
- {BUG_ID + FS + "pkg2" + FS + "package-use.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
-- "listing packages, and an explanation\">"
-+ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
-+ "table, listing packages, and an explanation\">"
- },
- {BUG_ID + FS + "pkg2" + FS + "package-use.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
-- "listing classes, and an explanation\">"
-+ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
-+ "table, listing classes, and an explanation\">"
- },
- // Deprecated
- {BUG_ID + FS + "deprecated-list.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Deprecated Fields table, " +
-- "listing deprecated fields, and an explanation\">"
-+ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" " +
-+ "summary=\"Deprecated Fields table, listing deprecated fields, " +
-+ "and an explanation\">"
- },
- {BUG_ID + FS + "deprecated-list.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Deprecated Methods table, " +
-- "listing deprecated methods, and an explanation\">"
-+ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" " +
-+ "summary=\"Deprecated Methods table, listing deprecated methods, " +
-+ "and an explanation\">"
- },
- // Constant values
- {BUG_ID + FS + "constant-values.html",
-- "<TABLE BORDER=\"1\" CELLPADDING=\"3\" CELLSPACING=\"0\" " +
-- "SUMMARY=\"Constant Field Values table, listing " +
-+ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" " +
-+ "summary=\"Constant Field Values table, listing " +
- "constant fields, and values\">"
- },
- // Overview Summary
- {BUG_ID + FS + "overview-summary.html",
-- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
-- "CELLSPACING=\"0\" SUMMARY=\"Packages table, " +
-+ "<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" " +
-+ "cellspacing=\"0\" summary=\"Packages table, " +
- "listing packages, and an explanation\">"
- },
-
-@@ -192,125 +181,117 @@
-
- //Package summary
- {BUG_ID + FS + "pkg1" + FS + "package-summary.html",
-- "<CAPTION CLASS=\"TableCaption\">" + NL +
-- "Class Summary</CAPTION>"
-+ "<caption><span>Class Summary</span><span class=\"tabEnd\">" +
-+ "&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg1" + FS + "package-summary.html",
-- "<CAPTION CLASS=\"TableCaption\">" + NL +
-- "Interface Summary</CAPTION>"
-+ "<caption><span>Interface Summary</span><span class=\"tabEnd\">" +
-+ "&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "package-summary.html",
-- "<CAPTION CLASS=\"TableCaption\">" + NL +
-- "Enum Summary</CAPTION>"
-+ "<caption><span>Enum Summary</span><span class=\"tabEnd\">" +
-+ "&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "package-summary.html",
-- "<CAPTION CLASS=\"TableCaption\">" + NL +
-- "Annotation Types Summary</CAPTION>"
-+ "<caption><span>Annotation Types Summary</span><span class=\"tabEnd\">" +
-+ "&nbsp;</span></caption>"
- },
- // Class documentation
- {BUG_ID + FS + "pkg1" + FS + "C1.html",
-- "<CAPTION CLASS=\"TableCaption\">" + NL +
-- "Field Summary</CAPTION>"
-+ "<caption><span>Fields</span><span class=\"tabEnd\">&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg1" + FS + "C1.html",
-- "<CAPTION CLASS=\"TableCaption\">" + NL +
-- "Method Summary</CAPTION>"
-+ "<caption><span>Methods</span><span class=\"tabEnd\">&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "C2.html",
-- "<CAPTION CLASS=\"TableCaption\">" + NL +
-- "Nested Class Summary</CAPTION>"
-+ "<caption><span>Nested Classes</span><span class=\"tabEnd\">&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "C2.html",
-- "<CAPTION CLASS=\"TableCaption\">" + NL +
-- "Constructor Summary</CAPTION>"
-+ "<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "C2.ModalExclusionType.html",
-- "<CAPTION CLASS=\"TableCaption\">" + NL +
-- "Enum Constant Summary</CAPTION>"
-+ "<caption><span>Enum Constants</span><span class=\"tabEnd\">&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "C3.html",
-- "<CAPTION CLASS=\"TableCaption\">" + NL +
-- "Required Element Summary</CAPTION>"
-+ "<caption><span>Required Elements</span><span class=\"tabEnd\">&nbsp;" +
-+ "</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "C4.html",
-- "<CAPTION CLASS=\"TableCaption\">" + NL +
-- "Optional Element Summary</CAPTION>"
-+ "<caption><span>Optional Elements</span><span class=\"tabEnd\">&nbsp;" +
-+ "</span></caption>"
- },
- // Class use documentation
- {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "I1.html",
-- "<CAPTION CLASS=\"TableCaption\">" + NL +
-- "Packages that use <A HREF=\"../../pkg1/I1.html\" " +
-- "title=\"interface in pkg1\">I1</A></CAPTION>"
-+ "<caption><span>Packages that use <a href=\"../../pkg1/I1.html\" " +
-+ "title=\"interface in pkg1\">I1</a></span><span class=\"tabEnd\">" +
-+ "&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Fields in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> " +
-- "declared as <A HREF=\"../../pkg1/C1.html\" title=\"class in pkg1\">" +
-- "C1</A></CAPTION>"
-+ "<caption><span>Fields in <a href=\"../../pkg2/package-summary.html\">" +
-+ "pkg2</a> declared as <a href=\"../../pkg1/C1.html\" " +
-+ "title=\"class in pkg1\">C1</a></span><span class=\"tabEnd\">&nbsp;" +
-+ "</span></caption>"
- },
- {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> " +
-- "with parameters of type <A HREF=\"../../pkg1/C1.html\" " +
-- "title=\"class in pkg1\">C1</A></CAPTION>"
-+ "<caption><span>Methods in <a href=\"../../pkg2/package-summary.html\">" +
-+ "pkg2</a> that return <a href=\"../../pkg1/C1.html\" " +
-+ "title=\"class in pkg1\">C1</a></span><span class=\"tabEnd\">" +
-+ "&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Fields in <A HREF=\"../../pkg1/package-summary.html\">pkg1</A> " +
-- "declared as <A HREF=\"../../pkg2/C2.html\" title=\"class in pkg2\">" +
-- "C2</A></CAPTION>"
-+ "<caption><span>Fields in <a href=\"../../pkg1/package-summary.html\">" +
-+ "pkg1</a> declared as <a href=\"../../pkg2/C2.html\" " +
-+ "title=\"class in pkg2\">C2</a></span><span class=\"tabEnd\">" +
-+ "&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Methods in <A HREF=\"../../pkg1/package-summary.html\">pkg1</A> " +
-- "with parameters of type <A HREF=\"../../pkg2/C2.html\" " +
-- "title=\"class in pkg2\">C2</A></CAPTION>"
-+ "<caption><span>Methods in <a href=\"../../pkg1/package-summary.html\">" +
-+ "pkg1</a> that return <a href=\"../../pkg2/C2.html\" " +
-+ "title=\"class in pkg2\">C2</a></span><span class=\"tabEnd\">" +
-+ "&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.ModalExclusionType.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> " +
-- "that return <A HREF=\"../../pkg2/C2.ModalExclusionType.html\" " +
-- "title=\"enum in pkg2\">C2.ModalExclusionType</A></CAPTION>"
-+ "<caption><span>Methods in <a href=\"../../pkg2/package-summary.html\">" +
-+ "pkg2</a> that return <a href=\"../../pkg2/C2.ModalExclusionType.html\" " +
-+ "title=\"enum in pkg2\">C2.ModalExclusionType</a></span>" +
-+ "<span class=\"tabEnd\">&nbsp;</span></caption>"
- },
- // Package use documentation
- {BUG_ID + FS + "pkg1" + FS + "package-use.html",
-- "<CAPTION CLASS=\"TableCaption\">" + NL +
-- "Packages that use <A HREF=\"../pkg1/package-summary.html\">" +
-- "pkg1</A></CAPTION>"
-+ "<caption><span>Packages that use <a href=\"../pkg1/package-summary.html\">" +
-+ "pkg1</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg1" + FS + "package-use.html",
-- "<CAPTION CLASS=\"TableCaption\">" + NL +
-- "Classes in <A HREF=\"../pkg1/package-summary.html\">pkg1</A> " +
-- "used by <A HREF=\"../pkg1/package-summary.html\">pkg1</A></CAPTION>"
-+ "<caption><span>Classes in <a href=\"../pkg1/package-summary.html\">" +
-+ "pkg1</a> used by <a href=\"../pkg1/package-summary.html\">pkg1</a>" +
-+ "</span><span class=\"tabEnd\">&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "package-use.html",
-- "<CAPTION CLASS=\"TableCaption\">" + NL +
-- "Packages that use <A HREF=\"../pkg2/package-summary.html\">" +
-- "pkg2</A></CAPTION>"
-+ "<caption><span>Packages that use <a href=\"../pkg2/package-summary.html\">" +
-+ "pkg2</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "package-use.html",
-- "<CAPTION CLASS=\"TableCaption\">" + NL +
-- "Classes in <A HREF=\"../pkg2/package-summary.html\">pkg2</A> " +
-- "used by <A HREF=\"../pkg1/package-summary.html\">pkg1</A></CAPTION>"
-+ "<caption><span>Classes in <a href=\"../pkg2/package-summary.html\">" +
-+ "pkg2</a> used by <a href=\"../pkg1/package-summary.html\">pkg1</a>" +
-+ "</span><span class=\"tabEnd\">&nbsp;</span></caption>"
- },
- // Deprecated
- {BUG_ID + FS + "deprecated-list.html",
-- "<CAPTION CLASS=\"TableCaption\">" + NL +
-- "Deprecated Fields</CAPTION>"
-+ "<caption><span>Deprecated Fields</span><span class=\"tabEnd\">" +
-+ "&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "deprecated-list.html",
-- "<CAPTION CLASS=\"TableCaption\">" + NL +
-- "Deprecated Methods</CAPTION>"
-+ "<caption><span>Deprecated Methods</span><span class=\"tabEnd\">" +
-+ "&nbsp;</span></caption>"
- },
- // Constant values
- {BUG_ID + FS + "constant-values.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "pkg1.<A HREF=\"pkg1/C1.html\" title=\"class in pkg1\">C1</A></CAPTION>"
-+ "<caption><span>pkg1.<a href=\"pkg1/C1.html\" title=\"class in pkg1\">" +
-+ "C1</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
- },
- // Overview Summary
- {BUG_ID + FS + "overview-summary.html",
-- "<CAPTION CLASS=\"TableCaption\">" + NL +
-- "Packages</CAPTION>"
-+ "<caption><span>Packages</span><span class=\"tabEnd\">&nbsp;</span></caption>"
- },
-
- /*
-@@ -319,135 +300,115 @@
-
- //Package summary
- {BUG_ID + FS + "pkg1" + FS + "package-summary.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Class</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Description</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">" +
-+ "Class</th>" + NL + "<th class=\"colLast\" scope=\"col\"" +
-+ ">Description</th>"
- },
- {BUG_ID + FS + "pkg1" + FS + "package-summary.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Interface</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Description</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">" +
-+ "Interface</th>" + NL + "<th class=\"colLast\" scope=\"col\"" +
-+ ">Description</th>"
- },
- {BUG_ID + FS + "pkg2" + FS + "package-summary.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Enum</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Description</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">" +
-+ "Enum</th>" + NL + "<th class=\"colLast\" scope=\"col\"" +
-+ ">Description</th>"
- },
- {BUG_ID + FS + "pkg2" + FS + "package-summary.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Annotation Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-- " SCOPE=\"col\" NOWRAP>Description</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">" +
-+ "Annotation Type</th>" + NL + "<th class=\"colLast\"" +
-+ " scope=\"col\">Description</th>"
- },
- // Class documentation
- {BUG_ID + FS + "pkg1" + FS + "C1.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-- " SCOPE=\"col\" NOWRAP>Field and Description</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
-+ "<th class=\"colLast\" scope=\"col\">Field and Description</th>"
- },
- {BUG_ID + FS + "pkg1" + FS + "C1.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-- " SCOPE=\"col\" NOWRAP>Method and Description</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
-+ "<th class=\"colLast\" scope=\"col\">Method and Description</th>"
- },
- {BUG_ID + FS + "pkg2" + FS + "C2.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-- " SCOPE=\"col\" NOWRAP>Class and Description</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
-+ "<th class=\"colLast\" scope=\"col\">Class and Description</th>"
- },
- {BUG_ID + FS + "pkg2" + FS + "C2.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Constructor and Description</TH>"
-+ "<th class=\"colOne\" scope=\"col\">Constructor and Description</th>"
- },
- {BUG_ID + FS + "pkg2" + FS + "C2.ModalExclusionType.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Enum Constant and Description</TH>"
-+ "<th class=\"colOne\" scope=\"col\">Enum Constant and Description</th>"
- },
- {BUG_ID + FS + "pkg2" + FS + "C3.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-- " SCOPE=\"col\" NOWRAP>Required Element and Description</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
-+ "<th class=\"colLast\" scope=\"col\">Required Element and Description</th>"
- },
- {BUG_ID + FS + "pkg2" + FS + "C4.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-- " SCOPE=\"col\" NOWRAP>Optional Element and Description</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
-+ "<th class=\"colLast\" scope=\"col\">Optional Element and Description</th>"
- },
- // Class use documentation
- {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "I1.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Package</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Description</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">Package</th>" + NL +
-+ "<th class=\"colLast\" scope=\"col\">Description</th>"
- },
- {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-- " SCOPE=\"col\" NOWRAP>Field and Description</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
-+ "<th class=\"colLast\" scope=\"col\">Field and Description</th>"
- },
- {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-- " SCOPE=\"col\" NOWRAP>Method and Description</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
-+ "<th class=\"colLast\" scope=\"col\">Method and Description</th>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-- " SCOPE=\"col\" NOWRAP>Field and Description</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
-+ "<th class=\"colLast\" scope=\"col\">Field and Description</th>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-- " SCOPE=\"col\" NOWRAP>Method and Description</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
-+ "<th class=\"colLast\" scope=\"col\">Method and Description</th>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.ModalExclusionType.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Package</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Description</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">Package</th>" + NL +
-+ "<th class=\"colLast\" scope=\"col\">Description</th>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.ModalExclusionType.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-- " SCOPE=\"col\" NOWRAP>Method and Description</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
-+ "<th class=\"colLast\" scope=\"col\">Method and Description</th>"
- },
- // Package use documentation
- {BUG_ID + FS + "pkg1" + FS + "package-use.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Package</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Description</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">Package</th>" + NL +
-+ "<th class=\"colLast\" scope=\"col\">Description</th>"
- },
- {BUG_ID + FS + "pkg1" + FS + "package-use.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Class and Description</TH>"
-+ "<th class=\"colOne\" scope=\"col\">Class and Description</th>"
- },
- {BUG_ID + FS + "pkg2" + FS + "package-use.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Package</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Description</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">Package</th>" + NL +
-+ "<th class=\"colLast\" scope=\"col\">Description</th>"
- },
- {BUG_ID + FS + "pkg2" + FS + "package-use.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Class and Description</TH>"
-+ "<th class=\"colOne\" scope=\"col\">Class and Description</th>"
- },
- // Deprecated
- {BUG_ID + FS + "deprecated-list.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Field and Description</TH>"
-+ "<th class=\"colOne\" scope=\"col\">Field and Description</th>"
- },
- {BUG_ID + FS + "deprecated-list.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Method and Description</TH>"
-+ "<th class=\"colOne\" scope=\"col\">Method and Description</th>"
- },
- // Constant values
- {BUG_ID + FS + "constant-values.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
-- " SCOPE=\"col\" NOWRAP>Constant Field</TH>" + NL +
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>Value</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">" +
-+ "Modifier and Type</th>" + NL + "<th" +
-+ " scope=\"col\">Constant Field</th>" + NL +
-+ "<th class=\"colLast\" scope=\"col\">Value</th>"
- },
- // Overview Summary
- {BUG_ID + FS + "overview-summary.html",
-- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
-- "Package</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Description</TH>"
-+ "<th class=\"colFirst\" scope=\"col\">" +
-+ "Package</th>" + NL + "<th class=\"colLast\" scope=\"col\"" +
-+ ">Description</th>"
- }
- };
- private static final String[][] NEGATED_TEST = NO_TEST;
-diff --git a/test/com/sun/javadoc/testHtmlTag/TestHtmlTag.java b/test/com/sun/javadoc/testHtmlTag/TestHtmlTag.java
---- langtools/test/com/sun/javadoc/testHtmlTag/TestHtmlTag.java
-+++ langtools/test/com/sun/javadoc/testHtmlTag/TestHtmlTag.java
-@@ -40,20 +40,20 @@
-
- private static final String BUG_ID = "6786682";
- private static final String[][] TEST1 = {
-- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<HTML lang=\"" + Locale.getDefault().getLanguage() + "\">"},
-- {BUG_ID + FS + "pkg1" + FS + "package-summary.html", "<HTML lang=\"" + Locale.getDefault().getLanguage() + "\">"}};
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<html lang=\"" + Locale.getDefault().getLanguage() + "\">"},
-+ {BUG_ID + FS + "pkg1" + FS + "package-summary.html", "<html lang=\"" + Locale.getDefault().getLanguage() + "\">"}};
- private static final String[][] NEGATED_TEST1 = {
-- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<HTML>"}};
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<html>"}};
- private static final String[][] TEST2 = {
-- {BUG_ID + FS + "pkg2" + FS + "C2.html", "<HTML lang=\"ja\">"},
-- {BUG_ID + FS + "pkg2" + FS + "package-summary.html", "<HTML lang=\"ja\">"}};
-+ {BUG_ID + FS + "pkg2" + FS + "C2.html", "<html lang=\"ja\">"},
-+ {BUG_ID + FS + "pkg2" + FS + "package-summary.html", "<html lang=\"ja\">"}};
- private static final String[][] NEGATED_TEST2 = {
-- {BUG_ID + FS + "pkg2" + FS + "C2.html", "<HTML>"}};
-+ {BUG_ID + FS + "pkg2" + FS + "C2.html", "<html>"}};
- private static final String[][] TEST3 = {
-- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<HTML lang=\"en\">"},
-- {BUG_ID + FS + "pkg1" + FS + "package-summary.html", "<HTML lang=\"en\">"}};
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<html lang=\"en\">"},
-+ {BUG_ID + FS + "pkg1" + FS + "package-summary.html", "<html lang=\"en\">"}};
- private static final String[][] NEGATED_TEST3 = {
-- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<HTML>"}};
-+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<html>"}};
-
- private static final String[] ARGS1 =
- new String[] {
-diff --git a/test/com/sun/javadoc/testIndex/TestIndex.java b/test/com/sun/javadoc/testIndex/TestIndex.java
---- langtools/test/com/sun/javadoc/testIndex/TestIndex.java
-+++ langtools/test/com/sun/javadoc/testIndex/TestIndex.java
-@@ -48,35 +48,34 @@
- private static final String[][] TEST = {
- //Make sure the horizontal scroll bar does not appear in class frame.
- {BUG_ID + FS + "index.html",
-- "<FRAME src=\"overview-summary.html\" name=\"classFrame\" " +
-- "title=\"Package, class and interface descriptions\" " +
-- "scrolling=\"yes\">"},
-+ "<frame src=\"overview-summary.html\" name=\"classFrame\" title=\"" +
-+ "Package, class and interface descriptions\" scrolling=\"yes\">"},
-
- //Test index-all.html
- {BUG_ID + FS + "index-all.html",
-- "<A HREF=\"./pkg/C.html\" title=\"class in pkg\"><STRONG>C</STRONG></A>" +
-- " - Class in <A HREF=\"./pkg/package-summary.html\">pkg</A>"},
-+ "<a href=\"./pkg/C.html\" title=\"class in pkg\"><span class=\"strong\">C</span></a>" +
-+ " - Class in <a href=\"./pkg/package-summary.html\">pkg</a>"},
- {BUG_ID + FS + "index-all.html",
-- "<A HREF=\"./pkg/Interface.html\" title=\"interface in pkg\">" +
-- "<STRONG>Interface</STRONG></A> - Interface in " +
-- "<A HREF=\"./pkg/package-summary.html\">pkg</A>"},
-+ "<a href=\"./pkg/Interface.html\" title=\"interface in pkg\">" +
-+ "<span class=\"strong\">Interface</span></a> - Interface in " +
-+ "<a href=\"./pkg/package-summary.html\">pkg</a>"},
- {BUG_ID + FS + "index-all.html",
-- "<A HREF=\"./pkg/AnnotationType.html\" title=\"annotation in pkg\">" +
-- "<STRONG>AnnotationType</STRONG></A> - Annotation Type in " +
-- "<A HREF=\"./pkg/package-summary.html\">pkg</A>"},
-+ "<a href=\"./pkg/AnnotationType.html\" title=\"annotation in pkg\">" +
-+ "<span class=\"strong\">AnnotationType</span></a> - Annotation Type in " +
-+ "<a href=\"./pkg/package-summary.html\">pkg</a>"},
- {BUG_ID + FS + "index-all.html",
-- "<A HREF=\"./pkg/Coin.html\" title=\"enum in pkg\">" +
-- "<STRONG>Coin</STRONG></A> - Enum in " +
-- "<A HREF=\"./pkg/package-summary.html\">pkg</A>"},
-+ "<a href=\"./pkg/Coin.html\" title=\"enum in pkg\">" +
-+ "<span class=\"strong\">Coin</span></a> - Enum in " +
-+ "<a href=\"./pkg/package-summary.html\">pkg</a>"},
- {BUG_ID + FS + "index-all.html",
-- "Class in <A HREF=\"./package-summary.html\">&lt;Unnamed&gt;</A>"},
-+ "Class in <a href=\"./package-summary.html\">&lt;Unnamed&gt;</a>"},
- {BUG_ID + FS + "index-all.html",
-- "<DT><A HREF=\"./pkg/C.html#Java\"><STRONG>Java</STRONG></A> - " + NL +
-- "Static variable in class pkg.<A HREF=\"./pkg/C.html\" title=\"class in pkg\">C</A>" + NL +
-- "</DT><DD>&nbsp;</DD>" + NL + NL +
-- "<DT><A HREF=\"./pkg/C.html#JDK\"><STRONG>JDK</STRONG></A> - " + NL +
-- "Static variable in class pkg.<A HREF=\"./pkg/C.html\" title=\"class in pkg\">C</A>" + NL +
-- "</DT><DD>&nbsp;</DD>"},
-+ "<dl>" + NL + "<dt><span class=\"strong\"><a href=\"./pkg/C.html#Java\">" +
-+ "Java</a></span> - Static variable in class pkg.<a href=\"./pkg/C.html\" " +
-+ "title=\"class in pkg\">C</a></dt>" + NL + "<dd>&nbsp;</dd>" + NL +
-+ "<dt><span class=\"strong\"><a href=\"./pkg/C.html#JDK\">JDK</a></span> " +
-+ "- Static variable in class pkg.<a href=\"./pkg/C.html\" title=\"class in pkg\">" +
-+ "C</a></dt>" + NL + "<dd>&nbsp;</dd>" + NL + "</dl>"},
- };
- private static final String[][] NEGATED_TEST = NO_TEST;
-
-diff --git a/test/com/sun/javadoc/testInlineLinkLabel/TestInlineLinkLabel.java b/test/com/sun/javadoc/testInlineLinkLabel/TestInlineLinkLabel.java
---- langtools/test/com/sun/javadoc/testInlineLinkLabel/TestInlineLinkLabel.java
-+++ langtools/test/com/sun/javadoc/testInlineLinkLabel/TestInlineLinkLabel.java
-@@ -37,10 +37,10 @@
- private static final String BUG_ID = "4524136";
- private static final String[][] TEST = {
- //Search for the label to the package link.
-- {BUG_ID + FS + "pkg" + FS + "C1.html" , "<A HREF=\"../pkg/package-summary.html\"><CODE>Here is a link to a package</CODE></A>"},
-+ {BUG_ID + FS + "pkg" + FS + "C1.html" , "<a href=\"../pkg/package-summary.html\"><code>Here is a link to a package</code></a>"},
-
- //Search for the label to the class link
-- {BUG_ID + FS + "pkg" + FS + "C1.html" , "<A HREF=\"../pkg/C2.html\" title=\"class in pkg\"><CODE>Here is a link to a class</CODE></A>"}
-+ {BUG_ID + FS + "pkg" + FS + "C1.html" , "<a href=\"../pkg/C2.html\" title=\"class in pkg\"><code>Here is a link to a class</code></a>"}
- };
- private static final String[][] NEGATED_TEST = NO_TEST;
- private static final String[] ARGS =
-diff --git a/test/com/sun/javadoc/testInterface/TestInterface.java b/test/com/sun/javadoc/testInterface/TestInterface.java
---- langtools/test/com/sun/javadoc/testInterface/TestInterface.java
-+++ langtools/test/com/sun/javadoc/testInterface/TestInterface.java
-@@ -48,51 +48,62 @@
- //Input for string search tests.
- private static final String[][] TEST = {
- {BUG_ID + FS + "pkg" + FS + "Interface.html",
-- "int <STRONG>method</STRONG>()"},
-+ "<pre>int&nbsp;method()</pre>"},
- {BUG_ID + FS + "pkg" + FS + "Interface.html",
-- "static final int <STRONG>field</STRONG>"},
-+ "<pre>static final&nbsp;int field</pre>"},
-
-
- // Make sure known implementing class list is correct and omits type parameters.
- {BUG_ID + FS + "pkg" + FS + "Interface.html",
-- "<DT><STRONG>All Known Implementing Classes:</STRONG></DT> " +
-- "<DD><A HREF=\"../pkg/Child.html\" " +
-- "title=\"class in pkg\">Child</A>, " +
-- "<A HREF=\"../pkg/Parent.html\" title=\"class in pkg\">" +
-- "Parent</A></DD>"},
-+ "<dl>" + NL + "<dt>All Known Implementing Classes:</dt>" + NL +
-+ "<dd><a href=\"../pkg/Child.html\" title=\"class in pkg\">Child" +
-+ "</a>, <a href=\"../pkg/Parent.html\" title=\"class in pkg\">Parent" +
-+ "</a></dd>" + NL + "</dl>"},
-
- // Make sure "All Implemented Interfaces": has substituted type parameters
- {BUG_ID + FS + "pkg" + FS + "Child.html",
-- "<STRONG>All Implemented Interfaces:</STRONG></DT> <DD>" +
-- "<A HREF=\"../pkg/Interface.html\" title=\"interface in pkg\">" +
-- "Interface</A>&lt;T&gt;"
-+ "<dl>" + NL + "<dt>All Implemented Interfaces:</dt>" + NL +
-+ "<dd><a href=\"../pkg/Interface.html\" title=\"interface in pkg\">" +
-+ "Interface</a>&lt;T&gt;</dd>" + NL + "</dl>"
- },
- //Make sure Class Tree has substituted type parameters.
- {BUG_ID + FS + "pkg" + FS + "Child.html",
-- "<PRE>" + NL +
-- "java.lang.Object" + NL +
-- " <IMG SRC=\"../resources/inherit.gif\" ALT=\"extended by \"><A HREF=\"../pkg/Parent.html\" title=\"class in pkg\">pkg.Parent</A>&lt;T&gt;" + NL +
-- " <IMG SRC=\"../resources/inherit.gif\" ALT=\"extended by \"><STRONG>pkg.Child&lt;T&gt;</STRONG>" + NL +
-- "</PRE>"
-+ "<ul class=\"inheritance\">" + NL + "<li>java.lang.Object</li>" + NL +
-+ "<li>" + NL + "<ul class=\"inheritance\">" + NL +
-+ "<li><a href=\"../pkg/Parent.html\" title=\"class in pkg\">" +
-+ "pkg.Parent</a>&lt;T&gt;</li>" + NL + "<li>" + NL +
-+ "<ul class=\"inheritance\">" + NL + "<li>pkg.Child&lt;T&gt;</li>" + NL +
-+ "</ul>" + NL + "</li>" + NL + "</ul>" + NL + "</li>" + NL + "</ul>"
- },
- //Make sure "Direct Know Subclasses" omits type parameters
- {BUG_ID + FS + "pkg" + FS + "Parent.html",
-- "<STRONG>Direct Known Subclasses:</STRONG></DT> <DD><A HREF=\"../pkg/Child.html\" title=\"class in pkg\">Child</A>"
-+ "<dl>" + NL + "<dt>Direct Known Subclasses:</dt>" + NL +
-+ "<dd><a href=\"../pkg/Child.html\" title=\"class in pkg\">Child" +
-+ "</a></dd>" + NL + "</dl>"
- },
- //Make sure "Specified By" has substituted type parameters.
- {BUG_ID + FS + "pkg" + FS + "Child.html",
-- "<STRONG>Specified by:</STRONG></DT><DD><CODE><A HREF=\"../pkg/Interface.html#method()\">method</A></CODE> in interface <CODE><A HREF=\"../pkg/Interface.html\" title=\"interface in pkg\">Interface</A>&lt;<A HREF=\"../pkg/Child.html\" title=\"type parameter in Child\">T</A>&gt;</CODE>"
-+ "<dt><strong>Specified by:</strong></dt>" + NL +
-+ "<dd><code><a href=\"../pkg/Interface.html#method()\">method</a>" +
-+ "</code>&nbsp;in interface&nbsp;<code>" +
-+ "<a href=\"../pkg/Interface.html\" title=\"interface in pkg\">" +
-+ "Interface</a>&lt;<a href=\"../pkg/Child.html\" title=\"type parameter in Child\">" +
-+ "T</a>&gt;</code></dd>"
- },
- //Make sure "Overrides" has substituted type parameters.
- {BUG_ID + FS + "pkg" + FS + "Child.html",
-- "<STRONG>Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg/Parent.html#method()\">method</A></CODE> in class <CODE><A HREF=\"../pkg/Parent.html\" title=\"class in pkg\">Parent</A>&lt;<A HREF=\"../pkg/Child.html\" title=\"type parameter in Child\">T</A>&gt;</CODE>"
-+ "<dt><strong>Overrides:</strong></dt>" + NL +
-+ "<dd><code><a href=\"../pkg/Parent.html#method()\">method</a>" +
-+ "</code>&nbsp;in class&nbsp;<code><a href=\"../pkg/Parent.html\" " +
-+ "title=\"class in pkg\">Parent</a>&lt;<a href=\"../pkg/Child.html\" " +
-+ "title=\"type parameter in Child\">T</a>&gt;</code></dd>"
- },
- };
- private static final String[][] NEGATED_TEST = {
- {BUG_ID + FS + "pkg" + FS + "Interface.html",
-- "public int <STRONG>method</STRONG>()"},
-+ "public int&nbsp;method()"},
- {BUG_ID + FS + "pkg" + FS + "Interface.html",
-- "public static final int <STRONG>field</STRONG>"},
-+ "public static final&nbsp;int field"},
- };
-
- /**
-diff --git a/test/com/sun/javadoc/testJavascript/TestJavascript.java b/test/com/sun/javadoc/testJavascript/TestJavascript.java
---- langtools/test/com/sun/javadoc/testJavascript/TestJavascript.java
-+++ langtools/test/com/sun/javadoc/testJavascript/TestJavascript.java
-@@ -45,11 +45,11 @@
- //Input for string search tests.
- private static final String[][] TEST = {
- {BUG_ID + FS + "pkg" + FS + "C.html",
-- "<A HREF=\"../index.html?pkg/C.html\" target=\"_top\"><STRONG>FRAMES</STRONG></A>"},
-+ "<a href=\"../index.html?pkg/C.html\" target=\"_top\">FRAMES</a>"},
- {BUG_ID + FS + "TestJavascript.html",
-- "<A HREF=\"index.html?TestJavascript.html\" target=\"_top\"><STRONG>FRAMES</STRONG></A>"},
-+ "<a href=\"index.html?TestJavascript.html\" target=\"_top\">FRAMES</a>"},
- {BUG_ID + FS + "index.html",
-- "<SCRIPT type=\"text/javascript\">" + NL +
-+ "<script type=\"text/javascript\">" + NL +
- " targetPage = \"\" + window.location.search;" + NL +
- " if (targetPage != \"\" && targetPage != \"undefined\")" + NL +
- " targetPage = targetPage.substring(1);" + NL +
-@@ -59,7 +59,7 @@
- " if (targetPage != \"\" && targetPage != \"undefined\")" + NL +
- " top.classFrame.location = top.targetPage;" + NL +
- " }" + NL +
-- "</SCRIPT>"},
-+ "</script>"},
-
- //Make sure title javascript only runs if is-external is not true
- {BUG_ID + FS + "pkg" + FS + "C.html",
-diff --git a/test/com/sun/javadoc/testLinkOption/TestLinkOption.java b/test/com/sun/javadoc/testLinkOption/TestLinkOption.java
---- langtools/test/com/sun/javadoc/testLinkOption/TestLinkOption.java
-+++ langtools/test/com/sun/javadoc/testLinkOption/TestLinkOption.java
-@@ -46,25 +46,25 @@
-
- private static final String[][] TEST1 = {
- {BUG_ID + "-1" + FS + "pkg" + FS + "C.html",
-- "<A HREF=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/String.html?is-external=true\" " +
-- "title=\"class or interface in java.lang\"><CODE>Link to String Class</CODE></A>"
-+ "<a href=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/String.html?is-external=true\" " +
-+ "title=\"class or interface in java.lang\"><code>Link to String Class</code></a>"
- },
- //Make sure the parameters are indented properly when the -link option is used.
- {BUG_ID + "-1" + FS + "pkg" + FS + "C.html",
- "(int&nbsp;p1," + NL +
-- " int&nbsp;p2," + NL +
-- " int&nbsp;p3)"
-+ " int&nbsp;p2," + NL +
-+ " int&nbsp;p3)"
- },
- {BUG_ID + "-1" + FS + "pkg" + FS + "C.html",
- "(int&nbsp;p1," + NL +
-- " int&nbsp;p2," + NL +
-- " " +
-- "<A HREF=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true\" " +
-- "title=\"class or interface in java.lang\">Object</A>&nbsp;p3)"
-+ " int&nbsp;p2," + NL +
-+ " <a href=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true\" title=\"class or interface in java.lang\">" +
-+ "Object</a>&nbsp;p3)"
- },
- {BUG_ID + "-1" + FS + "java" + FS + "lang" + FS + "StringBuilderChild.html",
-- "public abstract class <STRONG>StringBuilderChild</STRONG>" + NL +
-- "extends <A HREF=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true\" title=\"class or interface in java.lang\">Object</A>"
-+ "<pre>public abstract class <strong>StringBuilderChild</strong>" + NL +
-+ "extends <a href=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true\" " +
-+ "title=\"class or interface in java.lang\">Object</a></pre>"
- },
-
- };
-@@ -79,8 +79,8 @@
-
- private static final String[][] TEST2 = {
- {BUG_ID + "-2" + FS + "pkg2" + FS + "C2.html",
-- "This is a link to <A HREF=\"../../" + BUG_ID + "-1/pkg/C.html?is-external=true\" " +
-- "title=\"class or interface in pkg\"><CODE>Class C</CODE></A>."
-+ "This is a link to <a href=\"../../" + BUG_ID + "-1/pkg/C.html?is-external=true\" " +
-+ "title=\"class or interface in pkg\"><code>Class C</code></a>."
- }
- };
- private static final String[][] NEGATED_TEST2 = NO_TEST;
-diff --git a/test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java b/test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java
---- langtools/test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java
-+++ langtools/test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java
-@@ -46,20 +46,22 @@
- //Input for string search tests.
- private static final String[][] TEST = {
- {BUG_ID + FS + "pkg" + FS + "C.html",
-- "Qualified Link: <A HREF=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><CODE>C.InnerC</CODE></A>.<br/>\n" +
-- " Unqualified Link1: <A HREF=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><CODE>C.InnerC</CODE></A>.<br/>\n" +
-- " Unqualified Link2: <A HREF=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><CODE>C.InnerC</CODE></A>.<br/>\n" +
-- " Qualified Link: <A HREF=\"../pkg/C.html#method(pkg.C.InnerC, pkg.C.InnerC2)\"><CODE>method(pkg.C.InnerC, pkg.C.InnerC2)</CODE></A>.<br/>\n" +
-- " Unqualified Link: <A HREF=\"../pkg/C.html#method(pkg.C.InnerC, pkg.C.InnerC2)\"><CODE>method(C.InnerC, C.InnerC2)</CODE></A>.<br/>\n" +
-- " Unqualified Link: <A HREF=\"../pkg/C.html#method(pkg.C.InnerC, pkg.C.InnerC2)\"><CODE>method(InnerC, InnerC2)</CODE></A>.<br/>"
-+ "Qualified Link: <a href=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n" +
-+ " Unqualified Link1: <a href=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n" +
-+ " Unqualified Link2: <a href=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n" +
-+ " Qualified Link: <a href=\"../pkg/C.html#method(pkg.C.InnerC, pkg.C.InnerC2)\"><code>method(pkg.C.InnerC, pkg.C.InnerC2)</code></a>.<br/>\n" +
-+ " Unqualified Link: <a href=\"../pkg/C.html#method(pkg.C.InnerC, pkg.C.InnerC2)\"><code>method(C.InnerC, C.InnerC2)</code></a>.<br/>\n" +
-+ " Unqualified Link: <a href=\"../pkg/C.html#method(pkg.C.InnerC, pkg.C.InnerC2)\"><code>method(InnerC, InnerC2)</code></a>.<br/>"
- },
- {BUG_ID + FS + "pkg" + FS + "C.InnerC.html",
-- "Link to member in outer class: <A HREF=\"../pkg/C.html#MEMBER\"><CODE>C.MEMBER</CODE></A> <br/>\n" +
-- " Link to member in inner class: <A HREF=\"../pkg/C.InnerC2.html#MEMBER2\"><CODE>C.InnerC2.MEMBER2</CODE></A> <br/>\n" +
-- " Link to another inner class: <A HREF=\"../pkg/C.InnerC2.html\" title=\"class in pkg\"><CODE>C.InnerC2</CODE></A>"
-+ "Link to member in outer class: <a href=\"../pkg/C.html#MEMBER\"><code>C.MEMBER</code></a> <br/>\n" +
-+ " Link to member in inner class: <a href=\"../pkg/C.InnerC2.html#MEMBER2\"><code>C.InnerC2.MEMBER2</code></a> <br/>\n" +
-+ " Link to another inner class: <a href=\"../pkg/C.InnerC2.html\" title=\"class in pkg\"><code>C.InnerC2</code></a>"
- },
- {BUG_ID + FS + "pkg" + FS + "C.InnerC2.html",
-- "Enclosing class:</STRONG></DT><DD><A HREF=\"../pkg/C.html\" title=\"class in pkg\">C</A>"
-+ "<dl>" + NL + "<dt>Enclosing class:</dt>" + NL +
-+ "<dd><a href=\"../pkg/C.html\" title=\"class in pkg\">C</a></dd>" + NL +
-+ "</dl>"
- },
- };
- private static final String[][] NEGATED_TEST = {
-diff --git a/test/com/sun/javadoc/testLinkToSerialForm/TestLinkToSerialForm.java b/test/com/sun/javadoc/testLinkToSerialForm/TestLinkToSerialForm.java
---- langtools/test/com/sun/javadoc/testLinkToSerialForm/TestLinkToSerialForm.java
-+++ langtools/test/com/sun/javadoc/testLinkToSerialForm/TestLinkToSerialForm.java
-@@ -37,8 +37,8 @@
-
- private static final String BUG_ID = "4521661";
- private static final String[][] TEST = {
-- {BUG_ID + FS + "serialized-form.html", "<A NAME=\"pkg.C\">"},
-- {BUG_ID + FS + "pkg" + FS + "C.html", "<A HREF=\"../serialized-form.html#pkg.C\">"}
-+ {BUG_ID + FS + "serialized-form.html", "<a name=\"pkg.C\">"},
-+ {BUG_ID + FS + "pkg" + FS + "C.html", "<a href=\"../serialized-form.html#pkg.C\">"}
- };
- private static final String[][] NEGATED_TEST = NO_TEST;
- private static final String[] ARGS =
-diff --git a/test/com/sun/javadoc/testMemberInheritence/TestMemberInheritence.java b/test/com/sun/javadoc/testMemberInheritence/TestMemberInheritence.java
---- langtools/test/com/sun/javadoc/testMemberInheritence/TestMemberInheritence.java
-+++ langtools/test/com/sun/javadoc/testMemberInheritence/TestMemberInheritence.java
-@@ -40,55 +40,57 @@
- private static final String[][] TEST = {
- //Public field should be inherited
- {BUG_ID + FS + "pkg" + FS + "SubClass.html",
-- "<A HREF=\"../pkg/BaseClass.html#pubField\">"},
-+ "<a href=\"../pkg/BaseClass.html#pubField\">"},
-
- //Public method should be inherited
- {BUG_ID + FS + "pkg" + FS + "SubClass.html",
-- "<A HREF=\"../pkg/BaseClass.html#pubMethod()\">"},
-+ "<a href=\"../pkg/BaseClass.html#pubMethod()\">"},
-
- //Public inner class should be inherited.
- {BUG_ID + FS + "pkg" + FS + "SubClass.html",
-- "<A HREF=\"../pkg/BaseClass.pubInnerClass.html\" title=\"class in pkg\">"},
-+ "<a href=\"../pkg/BaseClass.pubInnerClass.html\" title=\"class in pkg\">"},
-
- //Protected field should be inherited
- {BUG_ID + FS + "pkg" + FS + "SubClass.html",
-- "<A HREF=\"../pkg/BaseClass.html#proField\">"},
-+ "<a href=\"../pkg/BaseClass.html#proField\">"},
-
- //Protected method should be inherited
- {BUG_ID + FS + "pkg" + FS + "SubClass.html",
-- "<A HREF=\"../pkg/BaseClass.html#proMethod()\">"},
-+ "<a href=\"../pkg/BaseClass.html#proMethod()\">"},
-
- //Protected inner class should be inherited.
- {BUG_ID + FS + "pkg" + FS + "SubClass.html",
-- "<A HREF=\"../pkg/BaseClass.proInnerClass.html\" title=\"class in pkg\">"},
-+ "<a href=\"../pkg/BaseClass.proInnerClass.html\" title=\"class in pkg\">"},
-
- // New labels as of 1.5.0
- {BUG_ID + FS + "pkg" + FS + "SubClass.html",
-- "<STRONG>Nested classes/interfaces inherited from class pkg." +
-- "<A HREF=\"../pkg/BaseClass.html\" title=\"class in pkg\">" +
-- "BaseClass</A></STRONG>"},
-+ "Nested classes/interfaces inherited from class&nbsp;pkg." +
-+ "<a href=\"../pkg/BaseClass.html\" title=\"class in pkg\">BaseClass</a>"},
- {BUG_ID + FS + "pkg" + FS + "SubClass.html",
-- "<STRONG>Nested classes/interfaces inherited from interface pkg." +
-- "<A HREF=\"../pkg/BaseInterface.html\" title=\"interface in pkg\">" +
-- "BaseInterface</A></STRONG>"},
-+ "Nested classes/interfaces inherited from interface&nbsp;pkg." +
-+ "<a href=\"../pkg/BaseInterface.html\" title=\"interface in pkg\">BaseInterface</a>"},
-
- // Test overriding/implementing methods with generic parameters.
- {BUG_ID + FS + "pkg" + FS + "BaseClass.html",
-- "<DT><STRONG>Specified by:</STRONG></DT><DD><CODE><A HREF=\"../pkg/BaseInterface.html#getAnnotation(java.lang.Class)\">getAnnotation</A></CODE> in interface <CODE><A HREF=\"../pkg/BaseInterface.html\" title=\"interface in pkg\">BaseInterface</A></CODE></DD>"+NL+"</DL>"},
-+ "<dl>" + NL + "<dt><strong>Specified by:</strong></dt>" + NL +
-+ "<dd><code><a href=\"../pkg/BaseInterface.html#getAnnotation(java.lang.Class)\">" +
-+ "getAnnotation</a></code>&nbsp;in interface&nbsp;<code>" +
-+ "<a href=\"../pkg/BaseInterface.html\" title=\"interface in pkg\">" +
-+ "BaseInterface</a></code></dd>" + NL + "</dl>"},
-
- // Test diamond inheritence member summary (6256068)
- {BUG_ID + FS + "diamond" + FS + "Z.html",
-- "<TD><CODE><A HREF=\"../diamond/A.html#aMethod()\">aMethod</A></CODE></TD>"},
-+ "<code><a href=\"../diamond/A.html#aMethod()\">aMethod</a></code>"},
-
- // Test that doc is inherited from closed parent (6270645)
- {BUG_ID + FS + "inheritDist" + FS + "C.html",
-- "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m1-B</TD>"},
-+ "<div class=\"block\">m1-B</div>"},
-
- };
-
- private static final String[][] NEGATED_TEST = {
- {BUG_ID + FS + "pkg" + FS + "SubClass.html",
-- "<A HREF=\"../pkg/BaseClass.html#staticMethod()\">staticMethod</A></CODE>"},
-+ "<a href=\"../pkg/BaseClass.html#staticMethod()\">staticMethod</a></code>"},
- };
- private static final String[] ARGS =
- new String[] {
-diff --git a/test/com/sun/javadoc/testMemberSummary/TestMemberSummary.java b/test/com/sun/javadoc/testMemberSummary/TestMemberSummary.java
---- langtools/test/com/sun/javadoc/testMemberSummary/TestMemberSummary.java
-+++ langtools/test/com/sun/javadoc/testMemberSummary/TestMemberSummary.java
-@@ -48,21 +48,23 @@
- private static final String[][] TEST = {
- // Check return type in member summary.
- {BUG_ID + FS + "pkg" + FS + "PublicChild.html",
-- "<CODE>&nbsp;<A HREF=\"../pkg/PublicChild.html\" " +
-- "title=\"class in pkg\">PublicChild</A></CODE></FONT></TD>" + NL +
-- "<TD><CODE><STRONG><A HREF=\"../pkg/PublicChild.html#" +
-- "returnTypeTest()\">returnTypeTest</A></STRONG>()</CODE>"
-+ "<code><a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">PublicChild</a></code></td>" + NL +
-+ "<td class=\"colLast\"><code><strong><a href=\"../pkg/PublicChild.html#returnTypeTest()\">" +
-+ "returnTypeTest</a></strong>()</code>"
- },
- // Check return type in member detail.
- {BUG_ID + FS + "pkg" + FS + "PublicChild.html",
-- "public <A HREF=\"../pkg/PublicChild.html\" " +
-- "title=\"class in pkg\">PublicChild</A> " +
-- "<STRONG>returnTypeTest</STRONG>()"
-+ "<pre>public&nbsp;<a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">" +
-+ "PublicChild</a>&nbsp;returnTypeTest()</pre>"
- },
-
- // Legacy anchor dimensions (6290760)
- {BUG_ID + FS + "pkg2" + FS + "A.html",
-- "<A NAME=\"f(java.lang.Object[])\"><!-- --></A><A NAME=\"f(T[])\"><!-- --></A>"
-+ "<a name=\"f(java.lang.Object[])\">" + NL +
-+ "<!-- -->" + NL +
-+ "</a><a name=\"f(T[])\">" + NL +
-+ "<!-- -->" + NL +
-+ "</a>"
- },
- };
- private static final String[][] NEGATED_TEST = NO_TEST;
-diff --git a/test/com/sun/javadoc/testNavagation/TestNavagation.java b/test/com/sun/javadoc/testNavagation/TestNavagation.java
---- langtools/test/com/sun/javadoc/testNavagation/TestNavagation.java
-+++ langtools/test/com/sun/javadoc/testNavagation/TestNavagation.java
-@@ -45,24 +45,24 @@
-
- //Input for string search tests.
- private static final String[][] TEST = {
-- {BUG_ID + FS + "pkg" + FS + "A.html", "&nbsp;PREV CLASS&nbsp;"},
-+ {BUG_ID + FS + "pkg" + FS + "A.html", "<li>PREV CLASS</li>"},
- {BUG_ID + FS + "pkg" + FS + "A.html",
-- "<A HREF=\"../pkg/C.html\" title=\"class in pkg\"><STRONG>NEXT CLASS</STRONG></A>"},
-+ "<a href=\"../pkg/C.html\" title=\"class in pkg\"><span class=\"strong\">NEXT CLASS</span></a>"},
- {BUG_ID + FS + "pkg" + FS + "C.html",
-- "<A HREF=\"../pkg/A.html\" title=\"annotation in pkg\"><STRONG>PREV CLASS</STRONG></A>"},
-+ "<a href=\"../pkg/A.html\" title=\"annotation in pkg\"><span class=\"strong\">PREV CLASS</span></a>"},
- {BUG_ID + FS + "pkg" + FS + "C.html",
-- "<A HREF=\"../pkg/E.html\" title=\"enum in pkg\"><STRONG>NEXT CLASS</STRONG></A>"},
-+ "<a href=\"../pkg/E.html\" title=\"enum in pkg\"><span class=\"strong\">NEXT CLASS</span></a>"},
- {BUG_ID + FS + "pkg" + FS + "E.html",
-- "<A HREF=\"../pkg/C.html\" title=\"class in pkg\"><STRONG>PREV CLASS</STRONG></A>"},
-+ "<a href=\"../pkg/C.html\" title=\"class in pkg\"><span class=\"strong\">PREV CLASS</span></a>"},
- {BUG_ID + FS + "pkg" + FS + "E.html",
-- "<A HREF=\"../pkg/I.html\" title=\"interface in pkg\"><STRONG>NEXT CLASS</STRONG></A>"},
-+ "<a href=\"../pkg/I.html\" title=\"interface in pkg\"><span class=\"strong\">NEXT CLASS</span></a>"},
- {BUG_ID + FS + "pkg" + FS + "I.html",
-- "<A HREF=\"../pkg/E.html\" title=\"enum in pkg\"><STRONG>PREV CLASS</STRONG></A>"},
-- {BUG_ID + FS + "pkg" + FS + "I.html", "&nbsp;NEXT CLASS"},
-+ "<a href=\"../pkg/E.html\" title=\"enum in pkg\"><span class=\"strong\">PREV CLASS</span></a>"},
-+ {BUG_ID + FS + "pkg" + FS + "I.html", "<li>NEXT CLASS</li>"},
- // Test for 4664607
- {BUG_ID + FS + "pkg" + FS + "I.html",
-- "<TD COLSPAN=2 BGCOLOR=\"#EEEEFF\" CLASS=\"NavBarCell1\">" + NL +
-- "<A NAME=\"navbar_top_firstrow\"><!-- --></A>"}
-+ "<a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a><a name=\"navbar_top_firstrow\">" + NL +
-+ "<!-- -->" + NL + "</a>"}
- };
- private static final String[][] NEGATED_TEST = NO_TEST;
-
-diff --git a/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java b/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java
---- langtools/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java
-+++ langtools/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java
-@@ -51,18 +51,18 @@
- // ENUM TESTING
- //=================================
- //Make sure enum header is correct.
-- {BUG_ID + FS + "pkg" + FS + "Coin.html", "Enum Coin</H2>"},
-+ {BUG_ID + FS + "pkg" + FS + "Coin.html", "Enum Coin</h2>"},
- //Make sure enum signature is correct.
-- {BUG_ID + FS + "pkg" + FS + "Coin.html", "public enum "+
-- "<STRONG>Coin</STRONG>" + NL + "extends java.lang.Enum&lt;" +
-- "<A HREF=\"../pkg/Coin.html\" title=\"enum in pkg\">Coin</A>&gt;"
-+ {BUG_ID + FS + "pkg" + FS + "Coin.html", "<pre>public enum <strong>Coin</strong>" + NL +
-+ "extends java.lang.Enum&lt;<a href=\"../pkg/Coin.html\" " +
-+ "title=\"enum in pkg\">Coin</a>&gt;</pre>"
- },
- //Check for enum constant section
-- {BUG_ID + FS + "pkg" + FS + "Coin.html", "<CAPTION CLASS=\"TableCaption\">" + NL +
-- "Enum Constant Summary</CAPTION>"},
-+ {BUG_ID + FS + "pkg" + FS + "Coin.html", "<caption><span>Enum Constants" +
-+ "</span><span class=\"tabEnd\">&nbsp;</span></caption>"},
- //Detail for enum constant
- {BUG_ID + FS + "pkg" + FS + "Coin.html",
-- "<STRONG><A HREF=\"../pkg/Coin.html#Dime\">Dime</A></STRONG>"},
-+ "<strong><a href=\"../pkg/Coin.html#Dime\">Dime</a></strong>"},
- //Automatically insert documentation for values() and valueOf().
- {BUG_ID + FS + "pkg" + FS + "Coin.html",
- "Returns an array containing the constants of this enum type,"},
-@@ -77,38 +77,39 @@
- //=================================
- //Make sure the header is correct.
- {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
-- "Class TypeParameters&lt;E&gt;</H2>"},
-+ "Class TypeParameters&lt;E&gt;</h2>"},
- //Check class type parameters section.
- {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
-- "<DT><STRONG>Type Parameters:</STRONG></DT><DD><CODE>E</CODE> - " +
-+ "<dt><span class=\"strong\">Type Parameters:</span></dt><dd><code>E</code> - " +
- "the type parameter for this class."},
- //Type parameters in @see/@link
- {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
-- "<DT><STRONG>See Also:</STRONG></DT><DD><A HREF=\"../pkg/TypeParameters.html\" " +
-- "title=\"class in pkg\"><CODE>TypeParameters</CODE></A></DD></DL>"},
-+ "<dl><dt><span class=\"strong\">See Also:</span></dt><dd>" +
-+ "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
-+ "<code>TypeParameters</code></a></dd></dl>"},
- //Method that uses class type parameter.
- {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
-- "(<A HREF=\"../pkg/TypeParameters.html\" title=\"type " +
-- "parameter in TypeParameters\">E</A>&nbsp;param)"},
-+ "(<a href=\"../pkg/TypeParameters.html\" title=\"type " +
-+ "parameter in TypeParameters\">E</a>&nbsp;param)"},
- //Method type parameter section.
- {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
-- "<STRONG>Type Parameters:</STRONG></DT><DD><CODE>T</CODE> - This is the first " +
-- "type parameter.</DD><DD><CODE>V</CODE> - This is the second type " +
-+ "<span class=\"strong\">Type Parameters:</span></dt><dd><code>T</code> - This is the first " +
-+ "type parameter.</dd><dd><code>V</code> - This is the second type " +
- "parameter."},
- //Signature of method with type parameters
- {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
-- "public &lt;T extends java.util.List,V&gt; " +
-- "java.lang.String[] <STRONG>methodThatHasTypeParameters</STRONG>"},
-+ "public&nbsp;&lt;T extends java.util.List,V&gt;&nbsp;" +
-+ "java.lang.String[]&nbsp;methodThatHasTypeParameters"},
- //Wildcard testing.
- {BUG_ID + FS + "pkg" + FS + "Wildcards.html",
-- "<A HREF=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
-- "TypeParameters</A>&lt;? super java.lang.String&gt;&nbsp;a"},
-+ "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
-+ "TypeParameters</a>&lt;? super java.lang.String&gt;&nbsp;a"},
- {BUG_ID + FS + "pkg" + FS + "Wildcards.html",
-- "<A HREF=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
-- "TypeParameters</A>&lt;? extends java.lang.StringBuffer&gt;&nbsp;b"},
-+ "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
-+ "TypeParameters</a>&lt;? extends java.lang.StringBuffer&gt;&nbsp;b"},
- {BUG_ID + FS + "pkg" + FS + "Wildcards.html",
-- "<A HREF=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
-- "TypeParameters</A>&nbsp;c"},
-+ "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
-+ "TypeParameters</a>&nbsp;c"},
- //Bad type parameter warnings.
- {WARNING_OUTPUT, "warning - @param argument " +
- "\"<BadClassTypeParam>\" is not a type parameter name."},
-@@ -117,18 +118,27 @@
-
- //Signature of subclass that has type parameters.
- {BUG_ID + FS + "pkg" + FS + "TypeParameterSubClass.html",
-- "public class <STRONG>TypeParameterSubClass&lt;T extends java.lang.String&gt;" +
-- "</STRONG>" + NL + "extends <A HREF=\"../pkg/TypeParameterSuperClass.html\" " +
-- "title=\"class in pkg\">TypeParameterSuperClass</A>&lt;T&gt;"},
-+ "<pre>public class <strong>TypeParameterSubClass&lt;T extends " +
-+ "java.lang.String&gt;</strong>" + NL + "extends " +
-+ "<a href=\"../pkg/TypeParameterSuperClass.html\" title=\"class in pkg\">" +
-+ "TypeParameterSuperClass</a>&lt;T&gt;</pre>"},
-
- //Interface generic parameter substitution
- //Signature of subclass that has type parameters.
- {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
-- "<STRONG>All Implemented Interfaces:</STRONG></DT> <DD><A HREF=\"../pkg/SubInterface.html\" title=\"interface in pkg\">SubInterface</A>&lt;E&gt;, <A HREF=\"../pkg/SuperInterface.html\" title=\"interface in pkg\">SuperInterface</A>&lt;E&gt;</DD>"},
-+ "<dl>" + NL + "<dt>All Implemented Interfaces:</dt>" + NL +
-+ "<dd><a href=\"../pkg/SubInterface.html\" title=\"interface in pkg\">" +
-+ "SubInterface</a>&lt;E&gt;, <a href=\"../pkg/SuperInterface.html\" " +
-+ "title=\"interface in pkg\">SuperInterface</a>&lt;E&gt;</dd>" + NL +
-+ "</dl>"},
- {BUG_ID + FS + "pkg" + FS + "SuperInterface.html",
-- "<STRONG>All Known Subinterfaces:</STRONG></DT> <DD><A HREF=\"../pkg/SubInterface.html\" title=\"interface in pkg\">SubInterface</A>&lt;V&gt;</DD>"},
-+ "<dl>" + NL + "<dt>All Known Subinterfaces:</dt>" + NL +
-+ "<dd><a href=\"../pkg/SubInterface.html\" title=\"interface in pkg\">" +
-+ "SubInterface</a>&lt;V&gt;</dd>" + NL + "</dl>"},
- {BUG_ID + FS + "pkg" + FS + "SubInterface.html",
-- "<STRONG>All Superinterfaces:</STRONG></DT> <DD><A HREF=\"../pkg/SuperInterface.html\" title=\"interface in pkg\">SuperInterface</A>&lt;V&gt;</DD>"},
-+ "<dl>" + NL + "<dt>All Superinterfaces:</dt>" + NL +
-+ "<dd><a href=\"../pkg/SuperInterface.html\" title=\"interface in pkg\">" +
-+ "SuperInterface</a>&lt;V&gt;</dd>" + NL + "</dl>"},
-
- //=================================
- // VAR ARG TESTING
-@@ -137,39 +147,40 @@
- {BUG_ID + FS + "pkg" + FS + "VarArgs.html", "(int[][]...&nbsp;i)"},
- {BUG_ID + FS + "pkg" + FS + "VarArgs.html", "(int[]...)"},
- {BUG_ID + FS + "pkg" + FS + "VarArgs.html",
-- "<A HREF=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
-- "TypeParameters</A>...&nbsp;t"},
-+ "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
-+ "TypeParameters</a>...&nbsp;t"},
-
- //=================================
- // ANNOTATION TYPE TESTING
- //=================================
- //Make sure the summary links are correct.
- {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
-- "SUMMARY:&nbsp;<A HREF=\"#annotation_type_required_element_summary\">" +
-- "REQUIRED</A>&nbsp;|&nbsp;<A HREF=\"#annotation_type_optional_element_summary\">" +
-- "OPTIONAL</A>"},
-+ "<li>SUMMARY:&nbsp;</li>" + NL +
-+ "<li><a href=\"#annotation_type_required_element_summary\">" +
-+ "REQUIRED</a>&nbsp;|&nbsp;</li>" + NL + "<li>" +
-+ "<a href=\"#annotation_type_optional_element_summary\">OPTIONAL</a></li>"},
- //Make sure the detail links are correct.
- {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
-- "DETAIL:&nbsp;<A HREF=\"#annotation_type_element_detail\">ELEMENT</A>"},
-+ "<li>DETAIL:&nbsp;</li>" + NL +
-+ "<li><a href=\"#annotation_type_element_detail\">ELEMENT</a></li>"},
- //Make sure the heading is correct.
- {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
-- "Annotation Type AnnotationType</H2>"},
-+ "Annotation Type AnnotationType</h2>"},
- //Make sure the signature is correct.
- {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
-- "public @interface <STRONG>AnnotationType</STRONG>"},
-+ "public @interface <strong>AnnotationType</strong>"},
- //Make sure member summary headings are correct.
- {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
-- "<CAPTION CLASS=\"TableCaption\">" + NL +
-- "Required Element Summary</CAPTION>"},
-+ "<h3>Required Element Summary</h3>"},
- {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
-- "<CAPTION CLASS=\"TableCaption\">" + NL +
-- "Optional Element Summary</CAPTION>"},
-+ "<h3>Optional Element Summary</h3>"},
- //Make sure element detail heading is correct
- {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
- "Element Detail"},
- //Make sure default annotation type value is printed when necessary.
- {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
-- "<STRONG>Default:</STRONG></DT><DD>\"unknown\"</DD>"},
-+ "<dl>" + NL + "<dt>Default:</dt>" + NL + "<dd>\"unknown\"</dd>" + NL +
-+ "</dl>"},
-
- //=================================
- // ANNOTATION TYPE USAGE TESTING
-@@ -177,51 +188,65 @@
-
- //PACKAGE
- {BUG_ID + FS + "pkg" + FS + "package-summary.html",
-- "<A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Package Annotation\"," + NL +
-- " <A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)"},
-+ "<a href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional()\">optional</a>=\"Package Annotation\"," + NL +
-+ " <a href=\"../pkg/AnnotationType.html#required()\">required</a>=1994)"},
-
- //CLASS
- {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
-- "<FONT SIZE=\"-1\">" +
-- "<A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Class Annotation\","+NL +
-- " <A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)"+NL +
-- "</FONT>public class <STRONG>AnnotationTypeUsage</STRONG>" + NL +
-- "extends java.lang.Object"},
-+ "<pre><a href=\"../pkg/AnnotationType.html\" " +
-+ "title=\"annotation in pkg\">@AnnotationType</a>(" +
-+ "<a href=\"../pkg/AnnotationType.html#optional()\">optional</a>" +
-+ "=\"Class Annotation\"," + NL +
-+ " <a href=\"../pkg/AnnotationType.html#required()\">" +
-+ "required</a>=1994)" + NL + "public class <strong>" +
-+ "AnnotationTypeUsage</strong>" + NL + "extends java.lang.Object</pre>"},
-
- //FIELD
- {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
-- "<FONT SIZE=\"-1\">" +
-- "<A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Field Annotation\","+NL +
-- " <A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)"+NL +
-- "</FONT>public int <STRONG>field</STRONG>"},
-+ "<pre><a href=\"../pkg/AnnotationType.html\" " +
-+ "title=\"annotation in pkg\">@AnnotationType</a>(" +
-+ "<a href=\"../pkg/AnnotationType.html#optional()\">optional</a>" +
-+ "=\"Field Annotation\"," + NL +
-+ " <a href=\"../pkg/AnnotationType.html#required()\">" +
-+ "required</a>=1994)" + NL + "public&nbsp;int field</pre>"},
-
- //CONSTRUCTOR
- {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
-- "<FONT SIZE=\"-1\">" +
-- "<A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Constructor Annotation\","+NL +
-- " <A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)"+NL +
-- "</FONT>public <STRONG>AnnotationTypeUsage</STRONG>()"},
-+ "<pre><a href=\"../pkg/AnnotationType.html\" " +
-+ "title=\"annotation in pkg\">@AnnotationType</a>(" +
-+ "<a href=\"../pkg/AnnotationType.html#optional()\">optional</a>" +
-+ "=\"Constructor Annotation\"," + NL +
-+ " <a href=\"../pkg/AnnotationType.html#required()\">" +
-+ "required</a>=1994)" + NL + "public&nbsp;AnnotationTypeUsage()</pre>"},
-
- //METHOD
- {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
-- "<FONT SIZE=\"-1\">" +
-- "<A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Method Annotation\","+NL +
-- " <A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)"+NL +
-- "</FONT>public void <STRONG>method</STRONG>()"},
-+ "<pre><a href=\"../pkg/AnnotationType.html\" " +
-+ "title=\"annotation in pkg\">@AnnotationType</a>(" +
-+ "<a href=\"../pkg/AnnotationType.html#optional()\">optional</a>" +
-+ "=\"Method Annotation\"," + NL +
-+ " <a href=\"../pkg/AnnotationType.html#required()\">" +
-+ "required</a>=1994)" + NL + "public&nbsp;void&nbsp;method()</pre>"},
-
- //METHOD PARAMS
- {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
-- "<PRE>" + NL +
-- "public void <STRONG>methodWithParams</STRONG>(<FONT SIZE=\"-1\"><A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Parameter Annotation\",<A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)</FONT>" + NL +
-- " int&nbsp;documented," + NL +
-- " int&nbsp;undocmented)</PRE>"},
-+ "<pre>public&nbsp;void&nbsp;methodWithParams(" +
-+ "<a href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">" +
-+ "@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional()\">" +
-+ "optional</a>=\"Parameter Annotation\",<a " +
-+ "href=\"../pkg/AnnotationType.html#required()\">required</a>=1994)" + NL +
-+ " int&nbsp;documented," + NL +
-+ " int&nbsp;undocmented)</pre>"},
-
- //CONSTRUCTOR PARAMS
- {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
-- "<PRE>" + NL +
-- "public <STRONG>AnnotationTypeUsage</STRONG>(<FONT SIZE=\"-1\"><A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Constructor Param Annotation\",<A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)</FONT>" + NL +
-- " int&nbsp;documented," + NL +
-- " int&nbsp;undocmented)</PRE>"},
-+ "<pre>public&nbsp;AnnotationTypeUsage(<a " +
-+ "href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">" +
-+ "@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional()\">" +
-+ "optional</a>=\"Constructor Param Annotation\",<a " +
-+ "href=\"../pkg/AnnotationType.html#required()\">required</a>=1994)" + NL +
-+ " int&nbsp;documented," + NL +
-+ " int&nbsp;undocmented)</pre>"},
-
- //=================================
- // ANNOTATION TYPE USAGE TESTING (All Different Types).
-@@ -229,59 +254,59 @@
-
- //Integer
- {BUG_ID + FS + "pkg1" + FS + "B.html",
-- "<A HREF=\"../pkg1/A.html#d()\">d</A>=3.14,"},
-+ "<a href=\"../pkg1/A.html#d()\">d</a>=3.14,"},
-
- //Double
- {BUG_ID + FS + "pkg1" + FS + "B.html",
-- "<A HREF=\"../pkg1/A.html#d()\">d</A>=3.14,"},
-+ "<a href=\"../pkg1/A.html#d()\">d</a>=3.14,"},
-
- //Boolean
- {BUG_ID + FS + "pkg1" + FS + "B.html",
-- "<A HREF=\"../pkg1/A.html#b()\">b</A>=true,"},
-+ "<a href=\"../pkg1/A.html#b()\">b</a>=true,"},
-
- //String
- {BUG_ID + FS + "pkg1" + FS + "B.html",
-- "<A HREF=\"../pkg1/A.html#s()\">s</A>=\"sigh\","},
-+ "<a href=\"../pkg1/A.html#s()\">s</a>=\"sigh\","},
-
- //Class
- {BUG_ID + FS + "pkg1" + FS + "B.html",
-- "<A HREF=\"../pkg1/A.html#c()\">c</A>=<A HREF=\"../pkg2/Foo.html\" title=\"class in pkg2\">Foo.class</A>,"},
-+ "<a href=\"../pkg1/A.html#c()\">c</a>=<a href=\"../pkg2/Foo.html\" title=\"class in pkg2\">Foo.class</a>,"},
-
- //Bounded Class
- {BUG_ID + FS + "pkg1" + FS + "B.html",
-- "<A HREF=\"../pkg1/A.html#w()\">w</A>=<A HREF=\"../pkg/TypeParameterSubClass.html\" title=\"class in pkg\">TypeParameterSubClass.class</A>,"},
-+ "<a href=\"../pkg1/A.html#w()\">w</a>=<a href=\"../pkg/TypeParameterSubClass.html\" title=\"class in pkg\">TypeParameterSubClass.class</a>,"},
-
- //Enum
- {BUG_ID + FS + "pkg1" + FS + "B.html",
-- "<A HREF=\"../pkg1/A.html#e()\">e</A>=<A HREF=\"../pkg/Coin.html#Penny\">Penny</A>,"},
-+ "<a href=\"../pkg1/A.html#e()\">e</a>=<a href=\"../pkg/Coin.html#Penny\">Penny</a>,"},
-
- //Annotation Type
- {BUG_ID + FS + "pkg1" + FS + "B.html",
-- "<A HREF=\"../pkg1/A.html#a()\">a</A>=<A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"foo\",<A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994),"},
-+ "<a href=\"../pkg1/A.html#a()\">a</a>=<a href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional()\">optional</a>=\"foo\",<a href=\"../pkg/AnnotationType.html#required()\">required</a>=1994),"},
-
- //String Array
- {BUG_ID + FS + "pkg1" + FS + "B.html",
-- "<A HREF=\"../pkg1/A.html#sa()\">sa</A>={\"up\",\"down\"},"},
-+ "<a href=\"../pkg1/A.html#sa()\">sa</a>={\"up\",\"down\"},"},
-
- //Primitive
- {BUG_ID + FS + "pkg1" + FS + "B.html",
-- "<A HREF=\"../pkg1/A.html#primitiveClassTest()\">primitiveClassTest</A>=boolean.class,"},
-+ "<a href=\"../pkg1/A.html#primitiveClassTest()\">primitiveClassTest</a>=boolean.class,"},
-
- //XXX: Add array test case after this if fixed:
- //5020899: Incorrect internal representation of class-valued annotation elements
-
- //Make sure that annotations are surrounded by <pre> and </pre>
- {BUG_ID + FS + "pkg1" + FS + "B.html",
-- "<PRE><FONT SIZE=\"-1\"><A HREF=\"../pkg1/A.html\" title=\"annotation in pkg1\">@A</A>"},
-+ "<pre><a href=\"../pkg1/A.html\" title=\"annotation in pkg1\">@A</a>"},
- {BUG_ID + FS + "pkg1" + FS + "B.html",
-- "</FONT>public interface <STRONG>B</STRONG></PRE>"},
-+ "public interface <strong>B</strong></pre>"},
-
-
- //==============================================================
- // Handle multiple bounds.
- //==============================================================
- {BUG_ID + FS + "pkg" + FS + "MultiTypeParameters.html",
-- "public &lt;T extends java.lang.Number & java.lang.Runnable&gt; T <STRONG>foo</STRONG>(T&nbsp;t)"},
-+ "public&nbsp;&lt;T extends java.lang.Number & java.lang.Runnable&gt;&nbsp;T&nbsp;foo(T&nbsp;t)"},
-
- //==============================================================
- // Test Class-Use Documenation for Type Parameters.
-@@ -289,347 +314,356 @@
-
- //ClassUseTest1: <T extends Foo & Foo2>
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-- "</A> with type parameters of type <A HREF=\"../../pkg2/Foo.html\" " +
-- "title=\"class in pkg2\">Foo</A></CAPTION>"
-+ "<caption><span>Classes in <a href=\"../../pkg2/" +
-+ "package-summary.html\">pkg2</a> with type parameters of " +
-+ "type <a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">" +
-+ "Foo</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html",
-- "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest1.html\" title=\"class in pkg2\">ClassUseTest1&lt;T extends Foo & Foo2&gt;</A></STRONG></CODE>"
-+ "<td class=\"colLast\"><code><strong><a href=\"../../pkg2/" +
-+ "ClassUseTest1.html\" title=\"class in pkg2\">ClassUseTest1" +
-+ "&lt;T extends Foo & Foo2&gt;</a></strong></code>&nbsp;</td>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-- "</A> with type parameters of type <A HREF=\"../../pkg2/Foo.html\" " +
-- "title=\"class in pkg2\">Foo</A></CAPTION>"
-+ "<caption><span>Methods in <a href=\"../../pkg2/" +
-+ "package-summary.html\">pkg2</a> with type parameters of " +
-+ "type <a href=\"../../pkg2/Foo.html\" title=\"class in " +
-+ "pkg2\">Foo</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html",
-- "<TD><CODE><STRONG>ClassUseTest1.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest1.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
-+ "<td class=\"colLast\"><span class=\"strong\">ClassUseTest1." +
-+ "</span><code><strong><a href=\"../../pkg2/" +
-+ "ClassUseTest1.html#method(T)\">method</a></strong>" +
-+ "(T&nbsp;t)</code>&nbsp;</td>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Fields in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-- "</A> with type parameters of type <A HREF=\"../../pkg2/Foo.html\" " +
-- "title=\"class in pkg2\">Foo</A></CAPTION>"
-+ "<caption><span>Fields in <a href=\"../../pkg2/" +
-+ "package-summary.html\">pkg2</a> with type parameters of " +
-+ "type <a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">" +
-+ "Foo</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html",
-- "<A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A>&lt;<A HREF=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</A>&gt;</CODE></FONT></TD>"
-+ "td class=\"colFirst\"><code><a href=\"../../pkg2/" +
-+ "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>" +
-+ "&lt;<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\"" +
-+ ">Foo</a>&gt;</code></td>"
- },
-
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Fields in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-- "</A> declared as <A HREF=\"../../pkg2/ParamTest.html\" " +
-- "title=\"class in pkg2\">ParamTest</A></CAPTION>"
-+ "<caption><span>Fields in <a href=\"../../pkg2/" +
-+ "package-summary.html\">pkg2</a> declared as <a href=\"../" +
-+ "../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest" +
-+ "</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
-- "<A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A>&lt;<A HREF=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</A>&gt;</CODE></FONT></TD>"
-+ "<td class=\"colFirst\"><code><a href=\"../../pkg2/" +
-+ "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>&lt;<a " +
-+ "href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</a" +
-+ ">&gt;</code></td>"
- },
-
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo2.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-- "</A> with type parameters of type <A HREF=\"../../pkg2/Foo2.html\" " +
-- "title=\"interface in pkg2\">Foo2</A></CAPTION>"
-+ "<caption><span>Classes in <a href=\"../../pkg2/" +
-+ "package-summary.html\">pkg2</a> with type parameters of " +
-+ "type <a href=\"../../pkg2/Foo2.html\" title=\"interface " +
-+ "in pkg2\">Foo2</a></span><span class=\"tabEnd\">&nbsp;" +
-+ "</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo2.html",
-- "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest1.html\" title=\"class in pkg2\">ClassUseTest1&lt;T extends Foo & Foo2&gt;</A></STRONG></CODE>"
-+ "<td class=\"colLast\"><code><strong><a href=\"../../pkg2/" +
-+ "ClassUseTest1.html\" title=\"class in pkg2\">" +
-+ "ClassUseTest1&lt;T extends Foo & Foo2&gt;</a></strong>" +
-+ "</code>&nbsp;</td>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo2.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-- "</A> with type parameters of type <A HREF=\"../../pkg2/Foo2.html\" " +
-- "title=\"interface in pkg2\">Foo2</A></CAPTION>"
-+ "<caption><span>Methods in <a href=\"../../pkg2/" +
-+ "package-summary.html\">pkg2</a> with type parameters of " +
-+ "type <a href=\"../../pkg2/Foo2.html\" title=\"interface " +
-+ "in pkg2\">Foo2</a></span><span class=\"tabEnd\">&nbsp;" +
-+ "</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo2.html",
-- "<TD><CODE><STRONG>ClassUseTest1.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest1.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
-+ "<td class=\"colLast\"><span class=\"strong\">" +
-+ "ClassUseTest1.</span><code><strong><a href=\"../../" +
-+ "pkg2/ClassUseTest1.html#method(T)\">method</a></strong>" +
-+ "(T&nbsp;t)</code>&nbsp;</td>"
- },
-
- //ClassUseTest2: <T extends ParamTest<Foo3>>
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-- "</A> with type parameters of type <A HREF=\"../../pkg2/ParamTest.html\" " +
-- "title=\"class in pkg2\">ParamTest</A></CAPTION>"
-+ "<caption><span>Classes in <a href=\"../../pkg2/" +
-+ "package-summary.html\">pkg2</a> with type parameters of " +
-+ "type <a href=\"../../pkg2/ParamTest.html\" title=\"class " +
-+ "in pkg2\">ParamTest</a></span><span class=\"tabEnd\">" +
-+ "&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
-- "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest2.html\" title=\"class in pkg2\">ClassUseTest2&lt;T extends ParamTest&lt;<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A>&gt;&gt;</A></STRONG></CODE>"
-+ "<td class=\"colLast\"><code><strong><a href=\"../../pkg2/" +
-+ "ClassUseTest2.html\" title=\"class in pkg2\">ClassUseTest2&lt;T " +
-+ "extends ParamTest&lt;<a href=\"../../pkg2/Foo3.html\" title=\"class " +
-+ "in pkg2\">Foo3</a>&gt;&gt;</a></strong></code>&nbsp;</td>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-- "</A> with type parameters of type <A HREF=\"../../pkg2/ParamTest.html\" " +
-- "title=\"class in pkg2\">ParamTest</A></CAPTION>"
-+ "<caption><span>Methods in <a href=\"../../pkg2/" +
-+ "package-summary.html\">pkg2</a> with type parameters of " +
-+ "type <a href=\"../../pkg2/ParamTest.html\" title=\"class " +
-+ "in pkg2\">ParamTest</a></span><span class=\"tabEnd\">" +
-+ "&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
-- "<TD><CODE><STRONG>ClassUseTest2.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest2.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
-+ "<td class=\"colLast\"><span class=\"strong\">ClassUseTest2." +
-+ "</span><code><strong><a href=\"../../pkg2/" +
-+ "ClassUseTest2.html#method(T)\">method</a></strong>" +
-+ "(T&nbsp;t)</code>&nbsp;</td>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Fields in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-- "</A> declared as <A HREF=\"../../pkg2/ParamTest.html\" " +
-- "title=\"class in pkg2\">ParamTest</A></CAPTION>"
-+ "<caption><span>Fields in <a href=\"../../pkg2/" +
-+ "package-summary.html\">pkg2</a> declared as <a href=\"../" +
-+ "../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest" +
-+ "</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
-- "<A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A>&lt;<A HREF=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</A>&gt;</CODE></FONT></TD>"
-+ "<td class=\"colFirst\"><code><a href=\"../../pkg2/" +
-+ "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>" +
-+ "&lt;<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">" +
-+ "Foo</a>&gt;</code></td>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-- "</A> with type parameters of type <A HREF=\"../../pkg2/ParamTest.html\" " +
-- "title=\"class in pkg2\">ParamTest</A></CAPTION>"
-+ "<caption><span>Methods in <a href=\"../../pkg2/" +
-+ "package-summary.html\">pkg2</a> with type parameters of " +
-+ "type <a href=\"../../pkg2/ParamTest.html\" title=\"class " +
-+ "in pkg2\">ParamTest</a></span><span class=\"tabEnd\">" +
-+ "&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
-- "&lt;T extends <A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A>&lt;<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A>&gt;&gt;"
-+ "<td class=\"colFirst\"><code>&lt;T extends <a href=\"../" +
-+ "../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest" +
-+ "</a>&lt;<a href=\"../../pkg2/Foo3.html\" title=\"class in " +
-+ "pkg2\">Foo3</a>&gt;&gt;&nbsp;<br><a href=\"../../pkg2/" +
-+ "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>" +
-+ "&lt;<a href=\"../../pkg2/Foo3.html\" title=\"class in " +
-+ "pkg2\">Foo3</a>&gt;</code></td>"
- },
-
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-- "</A> with type parameters of type <A HREF=\"../../pkg2/Foo3.html\" " +
-- "title=\"class in pkg2\">Foo3</A></CAPTION>"
-+ "<caption><span>Classes in <a href=\"../../pkg2/" +
-+ "package-summary.html\">pkg2</a> with type parameters of " +
-+ "type <a href=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">" +
-+ "Foo3</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html",
-- "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest2.html\" title=\"class in pkg2\">ClassUseTest2&lt;T extends ParamTest&lt;<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A>&gt;&gt;</A></STRONG></CODE>"
-+ "<td class=\"colLast\"><code><strong><a href=\"../../" +
-+ "pkg2/ClassUseTest2.html\" title=\"class in pkg2\">" +
-+ "ClassUseTest2&lt;T extends ParamTest&lt;<a href=\"../../" +
-+ "pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</a>&gt;&gt;" +
-+ "</a></strong></code>&nbsp;</td>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-- "</A> with type parameters of type <A HREF=\"../../pkg2/Foo3.html\" " +
-- "title=\"class in pkg2\">Foo3</A></CAPTION>"
-+ "<caption><span>Methods in <a href=\"../../pkg2/" +
-+ "package-summary.html\">pkg2</a> with type parameters of " +
-+ "type <a href=\"../../pkg2/Foo3.html\" title=\"class in " +
-+ "pkg2\">Foo3</a></span><span class=\"tabEnd\">&nbsp;" +
-+ "</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html",
-- "<TD><CODE><STRONG>ClassUseTest2.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest2.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
-+ "<td class=\"colLast\"><span class=\"strong\">ClassUseTest2." +
-+ "</span><code><strong><a href=\"../../pkg2/" +
-+ "ClassUseTest2.html#method(T)\">method</a></strong>" +
-+ "(T&nbsp;t)</code>&nbsp;</td>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-- "</A> that return types with arguments of type " +
-- "<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">" +
-- "Foo3</A></CAPTION>"
-+ "<caption><span>Methods in <a href=\"../../pkg2/" +
-+ "package-summary.html\">pkg2</a> that return types with " +
-+ "arguments of type <a href=\"../../pkg2/Foo3.html\" title" +
-+ "=\"class in pkg2\">Foo3</a></span><span class=\"tabEnd\">" +
-+ "&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html",
-- "&lt;T extends <A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A>&lt;<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A>&gt;&gt;"
-+ "<td class=\"colFirst\"><code>&lt;T extends <a href=\"../../" +
-+ "pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</a>&lt;" +
-+ "<a href=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3" +
-+ "</a>&gt;&gt;&nbsp;<br><a href=\"../../pkg2/ParamTest.html\" " +
-+ "title=\"class in pkg2\">ParamTest</a>&lt;<a href=\"../../pkg2/" +
-+ "Foo3.html\" title=\"class in pkg2\">Foo3</a>&gt;</code></td>"
- },
-
- //ClassUseTest3: <T extends ParamTest2<List<? extends Foo4>>>
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-- "</A> with type parameters of type " +
-- "<A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">" +
-- "ParamTest2</A></CAPTION>"
-+ "<caption><span>Classes in <a href=\"../../pkg2/" +
-+ "package-summary.html\">pkg2</a> with type parameters of " +
-+ "type <a href=\"../../pkg2/ParamTest2.html\" title=\"class " +
-+ "in pkg2\">ParamTest2</a></span><span class=\"tabEnd\">" +
-+ "&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html",
-- "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html\" title=\"class in pkg2\">ClassUseTest3&lt;T extends ParamTest2&lt;java.util.List&lt;? extends Foo4&gt;&gt;&gt;</A></STRONG></CODE>"
-+ "<td class=\"colLast\"><code><strong><a href=\"../../pkg2/" +
-+ "ClassUseTest3.html\" title=\"class in pkg2\">" +
-+ "ClassUseTest3&lt;T extends ParamTest2&lt;java.util.List" +
-+ "&lt;? extends Foo4&gt;&gt;&gt;</a></strong></code>&nbsp;</td>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-- "</A> with type parameters of type " +
-- "<A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">" +
-- "ParamTest2</A></CAPTION>"
-+ "<caption><span>Methods in <a href=\"../../pkg2/" +
-+ "package-summary.html\">pkg2</a> with type parameters of " +
-+ "type <a href=\"../../pkg2/ParamTest2.html\" title=\"class " +
-+ "in pkg2\">ParamTest2</a></span><span class=\"tabEnd\">" +
-+ "&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html",
-- "<TD><CODE><STRONG>ClassUseTest3.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
-+ "<td class=\"colLast\"><span class=\"strong\">ClassUseTest3" +
-+ ".</span><code><strong><a href=\"../../pkg2/ClassUseTest3." +
-+ "html#method(T)\">method</a></strong>(T&nbsp;t)</code>&nbsp;</td>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-- "</A> with type parameters of type " +
-- "<A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">" +
-- "ParamTest2</A></CAPTION>"
-- },
-- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html",
-- "&lt;T extends <A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">ParamTest2</A>&lt;java.util.List&lt;? extends <A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</A>&gt;&gt;&gt;"
-+ "<td class=\"colFirst\"><code>&lt;T extends <a href=\"../" +
-+ "../pkg2/ParamTest2.html\" title=\"class in pkg2\">" +
-+ "ParamTest2</a>&lt;java.util.List&lt;? extends <a href=\".." +
-+ "/../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</a>&gt;" +
-+ "&gt;&gt;&nbsp;<br><a href=\"../../pkg2/ParamTest2.html\" " +
-+ "title=\"class in pkg2\">ParamTest2</a>&lt;java.util.List" +
-+ "&lt;? extends <a href=\"../../pkg2/Foo4.html\" title=\"" +
-+ "class in pkg2\">Foo4</a>&gt;&gt;</code></td>"
- },
-
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-- "</A> with type parameters of type " +
-- "<A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">" +
-- "Foo4</A></CAPTION>"
-+ "<caption><span>Classes in <a href=\"../../pkg2/" +
-+ "package-summary.html\">pkg2</a> with type parameters of " +
-+ "type <a href=\"../../pkg2/Foo4.html\" title=\"class in " +
-+ "pkg2\">Foo4</a></span><span class=\"tabEnd\">&nbsp;" +
-+ "</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
-- "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html\" title=\"class in pkg2\">ClassUseTest3&lt;T extends ParamTest2&lt;java.util.List&lt;? extends Foo4&gt;&gt;&gt;</A></STRONG></CODE>"
-+ "<td class=\"colLast\"><code><strong><a href=\"../../" +
-+ "pkg2/ClassUseTest3.html\" title=\"class in pkg2\">" +
-+ "ClassUseTest3&lt;T extends ParamTest2&lt;java.util.List" +
-+ "&lt;? extends Foo4&gt;&gt;&gt;</a></strong></code>&nbsp;</td>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-- "</A> with type parameters of type <A HREF=\"../../pkg2/Foo4.html\" " +
-- "title=\"class in pkg2\">Foo4</A></CAPTION>"
-+ "<caption><span>Methods in <a href=\"../../pkg2/" +
-+ "package-summary.html\">pkg2</a> with type parameters of " +
-+ "type <a href=\"../../pkg2/Foo4.html\" title=\"class in " +
-+ "pkg2\">Foo4</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
-- "<TD><CODE><STRONG>ClassUseTest3.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
-+ "<td class=\"colLast\"><span class=\"strong\">ClassUseTest3." +
-+ "</span><code><strong><a href=\"../../pkg2/ClassUseTest3." +
-+ "html#method(T)\">method</a></strong>(T&nbsp;t)</code>" +
-+ "&nbsp;</td>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-- "</A> that return types with arguments of type " +
-- "<A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">" +
-- "Foo4</A></CAPTION>"
-+ "<caption><span>Methods in <a href=\"../../pkg2/" +
-+ "package-summary.html\">pkg2</a> that return types with " +
-+ "arguments of type <a href=\"../../pkg2/Foo4.html\" " +
-+ "title=\"class in pkg2\">Foo4</a></span><span class=\"" +
-+ "tabEnd\">&nbsp;</span></caption>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
-- "&lt;T extends <A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">ParamTest2</A>&lt;java.util.List&lt;? extends <A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</A>&gt;&gt;&gt;"
-+ "<td class=\"colFirst\"><code>&lt;T extends <a href=\"../" +
-+ "../pkg2/ParamTest2.html\" title=\"class in pkg2\">" +
-+ "ParamTest2</a>&lt;java.util.List&lt;? extends <a href=\".." +
-+ "/../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</a>&gt;" +
-+ "&gt;&gt;&nbsp;<br><a href=\"../../pkg2/ParamTest2.html\" " +
-+ "title=\"class in pkg2\">ParamTest2</a>&lt;java.util.List" +
-+ "&lt;? extends <a href=\"../../pkg2/Foo4.html\" title=\"" +
-+ "class in pkg2\">Foo4</a>&gt;&gt;</code></td>"
- },
-
- //Type parameters in constructor and method args
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Method parameters in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
-- "</A> with type arguments of type <A HREF=\"../../pkg2/Foo4.html\" " +
-- "title=\"class in pkg2\">Foo4</A></CAPTION>" + NL +
-- "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Modifier and Type" +
-- "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Method and Description</TH>" + NL +
-- "</TR>" + NL +
-- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-- "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
-- "<CODE>&nbsp;void</CODE></FONT></TD>" + NL +
-- "<TD><CODE><STRONG>ClassUseTest3.</STRONG><STRONG>" +
-- "<A HREF=\"../../pkg2/ClassUseTest3.html#method(java.util.Set)\">" +
-- "method</A></STRONG>(java.util.Set&lt;<A HREF=\"../../pkg2/Foo4.html\" " +
-- "title=\"class in pkg2\">Foo4</A>&gt;&nbsp;p)</CODE>"
-+ "<caption><span>Method parameters in <a href=\"../../pkg2/" +
-+ "package-summary.html\">pkg2</a> with type arguments of " +
-+ "type <a href=\"../../pkg2/Foo4.html\" title=\"class in " +
-+ "pkg2\">Foo4</a></span><span class=\"tabEnd\">&nbsp;" +
-+ "</span></caption>" + NL + "<tr>" + NL +
-+ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
-+ "<th class=\"colLast\" scope=\"col\">Method and Description</th>" + NL +
-+ "</tr>" + NL + "<tbody>" + NL + "<tr class=\"altColor\">" + NL +
-+ "<td class=\"colFirst\"><code>void</code></td>" + NL +
-+ "<td class=\"colLast\"><span class=\"strong\">ClassUseTest3." +
-+ "</span><code><strong><a href=\"../../pkg2/ClassUseTest3." +
-+ "html#method(java.util.Set)\">method</a></strong>(java." +
-+ "util.Set&lt;<a href=\"../../pkg2/Foo4.html\" title=\"" +
-+ "class in pkg2\">Foo4</a>&gt;&nbsp;p)</code>&nbsp;</td>" + NL +
-+ "</tr>" + NL + "</tbody>"
- },
- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
-- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
-- "Constructor parameters in <A HREF=\"../../pkg2/package-summary.html\">" +
-- "pkg2</A> with type arguments of type <A HREF=\"../../pkg2/Foo4.html\" " +
-- "title=\"class in pkg2\">Foo4</A></CAPTION>" + NL +
-- "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Constructor and Description" +
-- "</TH>" + NL + "</TR>" + NL +
-- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-- "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html#ClassUseTest3" +
-- "(java.util.Set)\">ClassUseTest3</A></STRONG>(java.util.Set&lt;" +
-- "<A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">" +
-- "Foo4</A>&gt;&nbsp;p)</CODE>"
-+ "<caption><span>Constructor parameters in <a href=\"../../" +
-+ "pkg2/package-summary.html\">pkg2</a> with type arguments " +
-+ "of type <a href=\"../../pkg2/Foo4.html\" title=\"class in " +
-+ "pkg2\">Foo4</a></span><span class=\"tabEnd\">&nbsp;" +
-+ "</span></caption>"
- },
-
- //=================================
- // Annotatation Type Usage
- //=================================
- {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
-- "Packages with annotations of type " +
-- "<A HREF=\"../../pkg/AnnotationType.html\" " +
-- "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL +
-- "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Package" +
-- "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Description</TH>" + NL + "</TR>" + NL +
-- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-- "<TD><A HREF=\"../../pkg/package-summary.html\"><STRONG>pkg" +
-- "</STRONG></A></TD>"
-+ "<caption><span>Packages with annotations of type <a href=\"" +
-+ "../../pkg/AnnotationType.html\" title=\"annotation in pkg\">" +
-+ "AnnotationType</a></span><span class=\"tabEnd\">&nbsp;" +
-+ "</span></caption>"
- },
-
- {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
-- "Classes in <A HREF=\"../../pkg/package-summary.html\">pkg" +
-- "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " +
-- "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL +
-- "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Modifier and Type" +
-- "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Class and Description</TH>" + NL +
-- "</TR>" + NL +
-- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-- "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
-- "<CODE>&nbsp;class</CODE></FONT></TD>" + NL +
-- "<TD><CODE><STRONG><A HREF=\"../../pkg/AnnotationTypeUsage.html\" " +
-- "title=\"class in pkg\">AnnotationTypeUsage</A></STRONG></CODE>"
-+ "<caption><span>Classes in <a href=\"../../pkg/" +
-+ "package-summary.html\">pkg</a> with annotations of type " +
-+ "<a href=\"../../pkg/AnnotationType.html\" title=\"" +
-+ "annotation in pkg\">AnnotationType</a></span><span class" +
-+ "=\"tabEnd\">&nbsp;</span></caption>"
- },
-
- {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
-- "Fields in <A HREF=\"../../pkg/package-summary.html\">pkg" +
-- "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " +
-- "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL +
-- "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Modifier and Type" +
-- "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Field and Description</TH>" + NL +
-- "</TR>" + NL +
-- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-- "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
-- "<CODE>&nbsp;int</CODE></FONT></TD>" + NL +
-- "<TD><CODE><STRONG>AnnotationTypeUsage.</STRONG><STRONG>" +
-- "<A HREF=\"../../pkg/AnnotationTypeUsage.html#field\">field" +
-- "</A></STRONG></CODE>"
-+ "<caption><span>Fields in <a href=\"../../pkg/" +
-+ "package-summary.html\">pkg</a> with annotations of type " +
-+ "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation " +
-+ "in pkg\">AnnotationType</a></span><span class=\"tabEnd\">" +
-+ "&nbsp;</span></caption>"
- },
-
- {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
-- "Methods in <A HREF=\"../../pkg/package-summary.html\">pkg" +
-- "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " +
-- "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL +
-- "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Modifier and Type" +
-- "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Method and Description</TH>" + NL +
-- "</TR>" + NL +
-- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-- "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
-- "<CODE>&nbsp;void</CODE></FONT></TD>" + NL +
-- "<TD><CODE><STRONG>AnnotationTypeUsage.</STRONG><STRONG>" +
-- "<A HREF=\"../../pkg/AnnotationTypeUsage.html#method()\">" +
-- "method</A></STRONG>()</CODE>"
-+ "<caption><span>Methods in <a href=\"../../pkg/" +
-+ "package-summary.html\">pkg</a> with annotations of type " +
-+ "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation " +
-+ "in pkg\">AnnotationType</a></span><span class=\"tabEnd\">" +
-+ "&nbsp;</span></caption>"
- },
-
- {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
-- "Method parameters in <A HREF=\"../../pkg/package-summary.html\">pkg" +
-- "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " +
-- "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL +
-- "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Modifier and Type" +
-- "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Method and Description</TH>" + NL +
-- "</TR>" + NL +
-- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-- "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
-- "<CODE>&nbsp;void</CODE></FONT></TD>" + NL +
-- "<TD><CODE><STRONG>AnnotationTypeUsage.</STRONG><STRONG>" +
-- "<A HREF=\"../../pkg/AnnotationTypeUsage.html#methodWithParams" +
-- "(int, int)\">methodWithParams</A></STRONG>(int&nbsp;documented," + NL +
-- " int&nbsp;undocmented)</CODE>"
-+ "<caption><span>Method parameters in <a href=\"../../pkg/" +
-+ "package-summary.html\">pkg</a> with annotations of type " +
-+ "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation " +
-+ "in pkg\">AnnotationType</a></span><span class=\"tabEnd\">" +
-+ "&nbsp;</span></caption>"
- },
-
- {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
-- "Constructors in <A HREF=\"../../pkg/package-summary.html\">pkg" +
-- "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " +
-- "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL +
-- "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Constructor and Description" +
-- "</TH>" + NL + "</TR>" + NL +
-- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-- "<TD><CODE><STRONG><A HREF=\"../../pkg/" +
-- "AnnotationTypeUsage.html#AnnotationTypeUsage()\">" +
-- "AnnotationTypeUsage</A></STRONG>()</CODE>"
-+ "<caption><span>Constructors in <a href=\"../../pkg/" +
-+ "package-summary.html\">pkg</a> with annotations of type " +
-+ "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation " +
-+ "in pkg\">AnnotationType</a></span><span class=\"tabEnd\">" +
-+ "&nbsp;</span></caption>"
- },
-
- {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
-- "Constructor parameters in <A HREF=\"../../pkg/package-summary.html\">pkg" +
-- "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " +
-- "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL +
-- "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
-- " NOWRAP>Constructor and Description" +
-- "</TH>" + NL + "</TR>" + NL +
-- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
-- "<TD><CODE><STRONG><A HREF=\"../../pkg/" +
-- "AnnotationTypeUsage.html#AnnotationTypeUsage(int, int)\">" +
-- "AnnotationTypeUsage</A></STRONG>(int&nbsp;documented," + NL +
-- " int&nbsp;undocmented)</CODE>"
-+ "<caption><span>Constructor parameters in <a href=\"../../" +
-+ "pkg/package-summary.html\">pkg</a> with annotations of " +
-+ "type <a href=\"../../pkg/AnnotationType.html\" title=\"" +
-+ "annotation in pkg\">AnnotationType</a></span><span class=\"" +
-+ "tabEnd\">&nbsp;</span></caption>"
- },
-
- //=================================
- // TYPE PARAMETER IN INDEX
- //=================================
- {BUG_ID + FS + "index-all.html",
-- "<A HREF=\"./pkg2/Foo.html#method(java.util.Vector)\"><STRONG>method(Vector&lt;Object&gt;)</STRONG></A>"
-+ "<span class=\"strong\"><a href=\"./pkg2/Foo.html#method(java.util.Vector)\">" +
-+ "method(Vector&lt;Object&gt;)</a></span>"
- },
- //=================================
- // TYPE PARAMETER IN INDEX
- //=================================
- {BUG_ID + FS + "index-all.html",
-- "<A HREF=\"./pkg2/Foo.html#method(java.util.Vector)\"><STRONG>method(Vector&lt;Object&gt;)</STRONG></A>"
-+ "<span class=\"strong\"><a href=\"./pkg2/Foo.html#method(java.util.Vector)\">" +
-+ "method(Vector&lt;Object&gt;)</a></span>"
- },
- };
- private static final String[][] NEGATED_TEST = {
-@@ -637,15 +671,15 @@
- // ENUM TESTING
- //=================================
- //NO constructor section
-- {BUG_ID + FS + "pkg" + FS + "Coin.html", "<STRONG>Constructor Summary</STRONG>"},
-+ {BUG_ID + FS + "pkg" + FS + "Coin.html", "<span class=\"strong\">Constructor Summary</span>"},
- //=================================
- // TYPE PARAMETER TESTING
- //=================================
- //No type parameters in class frame.
- {BUG_ID + FS + "allclasses-frame.html",
-- "<A HREF=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
-- "TypeParameters</A>&lt;<A HREF=\"../pkg/TypeParameters.html\" " +
-- "title=\"type parameter in TypeParameters\">E</A>&gt;"
-+ "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
-+ "TypeParameters</a>&lt;<a href=\"../pkg/TypeParameters.html\" " +
-+ "title=\"type parameter in TypeParameters\">E</a>&gt;"
- },
-
- //==============================================================
-@@ -654,31 +688,27 @@
-
- //CLASS
- {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
-- "<FONT SIZE=\"-1\">" + NL +
-- "<A HREF=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</A>(<A HREF=\"../pkg/AnnotationType.html#optional\">optional</A>=\"Class Annotation\"," + NL +
-- " <A HREF=\"../pkg/AnnotationType.html#required\">required</A>=1994)" + NL +
-- "</FONT>public class <STRONG>AnnotationTypeUsage</STRONG></DT><DT>extends java.lang.Object</DT></DL>"},
-+ "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Class Annotation\"," + NL +
-+ " <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)" + NL +
-+ "public class <strong>AnnotationTypeUsage</strong></dt><dt>extends java.lang.Object</dt>"},
-
- //FIELD
- {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
-- "<FONT SIZE=\"-1\">" + NL +
-- "<A HREF=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</A>(<A HREF=\"../pkg/AnnotationType.html#optional\">optional</A>=\"Field Annotation\"," + NL +
-- " <A HREF=\"../pkg/AnnotationType.html#required\">required</A>=1994)" + NL +
-- "</FONT>public int <STRONG>field</STRONG>"},
-+ "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Field Annotation\"," + NL +
-+ " <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)" + NL +
-+ "public int <strong>field</strong>"},
-
- //CONSTRUCTOR
- {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
-- "<FONT SIZE=\"-1\">" + NL +
-- "<A HREF=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</A>(<A HREF=\"../pkg/AnnotationType.html#optional\">optional</A>=\"Constructor Annotation\"," + NL +
-- " <A HREF=\"../pkg/AnnotationType.html#required\">required</A>=1994)" + NL +
-- "</FONT>public <STRONG>AnnotationTypeUsage</STRONG>()"},
-+ "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Constructor Annotation\"," + NL +
-+ " <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)" + NL +
-+ "public <strong>AnnotationTypeUsage</strong>()"},
-
- //METHOD
- {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
-- "<FONT SIZE=\"-1\">" + NL +
-- "<A HREF=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</A>(<A HREF=\"../pkg/AnnotationType.html#optional\">optional</A>=\"Method Annotation\"," + NL +
-- " <A HREF=\"../pkg/AnnotationType.html#required\">required</A>=1994)" + NL +
-- "</FONT>public void <STRONG>method</STRONG>()"},
-+ "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Method Annotation\"," + NL +
-+ " <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)" + NL +
-+ "public void <strong>method</strong>()"},
-
- //=================================
- // Make sure annotation types do not
-diff --git a/test/com/sun/javadoc/testOverridenMethods/TestMultiInheritence.java b/test/com/sun/javadoc/testOverridenMethods/TestMultiInheritence.java
---- langtools/test/com/sun/javadoc/testOverridenMethods/TestMultiInheritence.java
-+++ langtools/test/com/sun/javadoc/testOverridenMethods/TestMultiInheritence.java
-@@ -46,27 +46,34 @@
- //Method foo() is inherited from BOTH I2 and I3
- private static final String[][] TEST = {
- {BUG_ID + FS + "pkg3" + FS + "I1.html",
-- "Methods inherited from interface pkg3." + "<A HREF=\"../pkg3/I2.html\" title=\"interface in pkg3\">I2</A>"},
-+ "Methods inherited from interface&nbsp;pkg3." +
-+ "<a href=\"../pkg3/I2.html\" title=\"interface in pkg3\">" +
-+ "I2</a>"},
- {BUG_ID + FS + "pkg3" + FS +"I1.html",
-- "Methods inherited from interface pkg3." +
-- "<A HREF=\"../pkg3/I3.html\" title=\"interface in pkg3\">I3</A>"},
-+ "Methods inherited from interface&nbsp;pkg3." +
-+ "<a href=\"../pkg3/I3.html\" title=\"interface in pkg3\">" +
-+ "I3</a>"},
- {BUG_ID + FS + "pkg3" + FS + "I0.html",
-- "Methods inherited from interface pkg3." +
-- "<A HREF=\"../pkg3/I2.html\" title=\"interface in pkg3\">I2</A>"},
-+ "Methods inherited from interface&nbsp;pkg3." +
-+ "<a href=\"../pkg3/I2.html\" title=\"interface in pkg3\">" +
-+ "I2</a>"},
- {BUG_ID + FS + "pkg3" + FS +"I0.html",
-- "Methods inherited from interface pkg3." +
-- "<A HREF=\"../pkg3/I3.html\" title=\"interface in pkg3\">I3</A>"},
-+ "Methods inherited from interface&nbsp;pkg3." +
-+ "<a href=\"../pkg3/I3.html\" title=\"interface in pkg3\">" +
-+ "I3</a>"},
- };
-
- //Method foo() is NOT inherited from I4 because it is overriden by
- //I3.
- private static final String[][] NEGATED_TEST = {
- {BUG_ID + FS + "pkg3" + FS + "I1.html",
-- "Methods inherited from interface pkg3." +
-- "<A HREF=\"../pkg3/I4.html\" title=\"interface in pkg3\">I4</A>"},
-+ "Methods inherited from interface&nbsp;pkg3." +
-+ "<a href=\"../pkg3/I4.html\" title=\"interface in pkg3\">" +
-+ "I4</a>"},
- {BUG_ID + FS + "pkg3" + FS + "I0.html",
-- "Methods inherited from interface pkg3." +
-- "<A HREF=\"../pkg3/I4.html\" title=\"interface in pkg3\">I4</A>"},
-+ "Methods inherited from interface&nbsp;pkg3." +
-+ "<a href=\"../pkg3/I4.html\" title=\"interface in pkg3\">" +
-+ "I4</a>"},
- };
-
- /**
-diff --git a/test/com/sun/javadoc/testOverridenMethods/TestOverridenMethodDocCopy.java b/test/com/sun/javadoc/testOverridenMethods/TestOverridenMethodDocCopy.java
---- langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenMethodDocCopy.java
-+++ langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenMethodDocCopy.java
-@@ -46,9 +46,9 @@
- //Input for string search tests.
- private static final String[][] TEST = {
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "<STRONG>Description copied from class: <CODE>" +
-- "<A HREF=\"../pkg1/BaseClass.html#overridenMethodWithDocsToCopy()\">" +
-- "BaseClass</A></CODE></STRONG>"
-+ "<strong>Description copied from class:&nbsp;<code>" +
-+ "<a href=\"../pkg1/BaseClass.html#overridenMethodWithDocsToCopy()\">" +
-+ "BaseClass</a></code></strong>"
- }
- };
- private static final String[][] NEGATED_TEST = NO_TEST;
-diff --git a/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethods.java b/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethods.java
---- langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethods.java
-+++ langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethods.java
-@@ -40,11 +40,13 @@
- private static final String[][] TEST = {
- //The public method should be overriden
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
-+ "<dt><strong>Overrides:</strong></dt>" + NL +
-+ "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod"},
-
- //The public method in different package should be overriden
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"}
-+ "<dt><strong>Overrides:</strong></dt>" + NL +
-+ "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod"}
- };
-
- private static final String[][] NEGATED_TEST = {
-@@ -52,20 +54,23 @@
- //The package private method should be overriden since the base and sub class are in the same
- //package. However, the link should not show up because the package private methods are not documented.
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"},
-+ "<dt><strong>Overrides:</strong></dt>" + NL +
-+ "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod"},
-
- //The private method in should not be overriden
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-+ "<dt><strong>Overrides:</strong></dt>" + NL +
-+ "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod"},
-
- //The private method in different package should not be overriden
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-+ "<dt><strong>Overrides:</strong></dt>" + NL +
-+ "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod"},
-
- //The package private method should not be overriden since the base and sub class are in
- //different packages.
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"}
-+ "Overrides:</strong></dt><dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod"}
- };
-
- private static final String[] ARGS =
-diff --git a/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPackageFlag.java b/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPackageFlag.java
---- langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPackageFlag.java
-+++ langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPackageFlag.java
-@@ -40,32 +40,44 @@
- private static final String[][] TEST = {
- //The public method should be overriden
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
-+ "<dt><strong>Overrides:</strong></dt>" + NL +
-+ "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod()\">" +
-+ "publicMethod</a></code>&nbsp;in class&nbsp;<code>" +
-+ "<a href=\"../pkg1/BaseClass.html\" title=\"class in pkg1\">BaseClass</a></code></dd>"},
-
- //The public method in different package should be overriden
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
-+ "<dt><strong>Overrides:</strong></dt>" + NL +
-+ "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod()\">" +
-+ "publicMethod</a></code>&nbsp;in class&nbsp;<code>" +
-+ "<a href=\"../pkg1/BaseClass.html\" title=\"class in pkg1\">BaseClass</a></code></dd>"},
-
- //The package private method should be overriden since the base and sub class are in the same
- //package.
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"}
-+ "<dt><strong>Overrides:</strong></dt>" + NL +
-+ "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod()\">" +
-+ "packagePrivateMethod</a></code>&nbsp;in class&nbsp;<code>" +
-+ "<a href=\"../pkg1/BaseClass.html\" title=\"class in pkg1\">BaseClass</a></code></dd>"}
- };
-
- private static final String[][] NEGATED_TEST = {
-
- //The private method in should not be overriden
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-+ "<dt><strong>Overrides:</strong></dt>" + NL +
-+ "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod()\">"},
-
- //The private method in different package should not be overriden
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-+ "<dt><strong>Overrides:</strong></dt>" + NL +
-+ "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod()\">"},
-
- //The package private method should not be overriden since the base and sub class are in
- //different packages.
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"},
-+ "<dt><strong>Overrides:</strong></dt>" + NL +
-+ "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod()\">"},
- };
-
- private static final String[] ARGS =
-diff --git a/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPrivateFlag.java b/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPrivateFlag.java
---- langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPrivateFlag.java
-+++ langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPrivateFlag.java
-@@ -40,32 +40,38 @@
- private static final String[][] TEST = {
- //The public method should be overriden
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
-+ "<dt><strong>Overrides:</strong></dt>" + NL +
-+ "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod"},
-
- //The package private method should be overriden since the base and sub class are in the same
- //package.
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"},
-+ "<dt><strong>Overrides:</strong></dt>" + NL +
-+ "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod"},
-
- //The public method in different package should be overriden
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
-+ "<dt><strong>Overrides:</strong></dt>" + NL +
-+ "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod"},
- };
-
- private static final String[][] NEGATED_TEST = {
-
- //The private method in should not be overriden
- {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
-- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-+ "<dt><strong>Overrides:</strong></dt>" + NL +
-+ "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod"},
-
- //The private method in different package should not be overriden
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
-+ "<dt><strong>Overrides:</strong></dt>" + NL +
-+ "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod"},
-
- //The package private method should not be overriden since the base and sub class are in
- //different packages.
- {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
-- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"}
-+ "<dt><strong>Overrides:</strong></dt>" + NL +
-+ "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod"}
-
-
- };
-diff --git a/test/com/sun/javadoc/testPackagePage/TestPackagePage.java b/test/com/sun/javadoc/testPackagePage/TestPackagePage.java
---- langtools/test/com/sun/javadoc/testPackagePage/TestPackagePage.java
-+++ langtools/test/com/sun/javadoc/testPackagePage/TestPackagePage.java
-@@ -43,37 +43,32 @@
- },
- //With just one package, all general pages link to the single package page.
- {BUG_ID + "-1" + FS + "com" + FS + "pkg" + FS + "C.html",
-- "<A HREF=\"../../com/pkg/package-summary.html\">" +
-- "<FONT CLASS=\"NavBarFont1\"><STRONG>Package</STRONG></FONT></A>"
-+ "<a href=\"../../com/pkg/package-summary.html\">Package</a>"
- },
- {BUG_ID + "-1" + FS + "com" + FS + "pkg" + FS + "package-tree.html",
-- "<A HREF=\"../../com/pkg/package-summary.html\">" +
-- "<FONT CLASS=\"NavBarFont1\"><STRONG>Package</STRONG></FONT></A>"
-+ "<li><a href=\"../../com/pkg/package-summary.html\">Package</a></li>"
- },
- {BUG_ID + "-1" + FS + "deprecated-list.html",
-- "<A HREF=\"com/pkg/package-summary.html\">" +
-- "<FONT CLASS=\"NavBarFont1\"><STRONG>Package</STRONG></FONT></A>"
-+ "<li><a href=\"com/pkg/package-summary.html\">Package</a></li>"
- },
- {BUG_ID + "-1" + FS + "index-all.html",
-- "<A HREF=\"./com/pkg/package-summary.html\">" +
-- "<FONT CLASS=\"NavBarFont1\"><STRONG>Package</STRONG></FONT></A>"
-+ "<li><a href=\"./com/pkg/package-summary.html\">Package</a></li>"
- },
- {BUG_ID + "-1" + FS + "help-doc.html",
-- "<A HREF=\"com/pkg/package-summary.html\">" +
-- "<FONT CLASS=\"NavBarFont1\"><STRONG>Package</STRONG></FONT></A>"
-+ "<li><a href=\"com/pkg/package-summary.html\">Package</a></li>"
- },
- };
-
- private static final String[][] TEST2 = {
- //With multiple packages, there is no package link in general pages.
- {BUG_ID + "-2" + FS + "deprecated-list.html",
-- " <FONT CLASS=\"NavBarFont1\">Package</FONT>&nbsp;"
-+ "<li>Package</li>"
- },
- {BUG_ID + "-2" + FS + "index-all.html",
-- " <FONT CLASS=\"NavBarFont1\">Package</FONT>&nbsp;"
-+ "<li>Package</li>"
- },
- {BUG_ID + "-2" + FS + "help-doc.html",
-- " <FONT CLASS=\"NavBarFont1\">Package</FONT>&nbsp;"
-+ "<li>Package</li>"
- },
- };
-
-diff --git a/test/com/sun/javadoc/testParamTaglet/TestParamTaglet.java b/test/com/sun/javadoc/testParamTaglet/TestParamTaglet.java
---- langtools/test/com/sun/javadoc/testParamTaglet/TestParamTaglet.java
-+++ langtools/test/com/sun/javadoc/testParamTaglet/TestParamTaglet.java
-@@ -48,20 +48,20 @@
- private static final String[][] TEST = {
- //Regular param tags.
- {BUG_ID + FS + "pkg" + FS + "C.html",
-- "<STRONG>Parameters:</STRONG></DT><DD><CODE>param1</CODE> - testing 1 2 3.</DD>" +
-- "<DD><CODE>param2</CODE> - testing 1 2 3."
-+ "<span class=\"strong\">Parameters:</span></dt><dd><code>param1</code> - testing 1 2 3.</dd>" +
-+ "<dd><code>param2</code> - testing 1 2 3."
- },
- //Param tags that don't match with any real parameters.
- {BUG_ID + FS + "pkg" + FS + "C.html",
-- "<STRONG>Parameters:</STRONG></DT><DD><CODE><I>p1</I></CODE> - testing 1 2 3.</DD>" +
-- "<DD><CODE><I>p2</I></CODE> - testing 1 2 3."
-+ "<span class=\"strong\">Parameters:</span></dt><dd><code><I>p1</I></code> - testing 1 2 3.</dd>" +
-+ "<dd><code><I>p2</I></code> - testing 1 2 3."
- },
- //{@inherit} doc misuse does not cause doclet to throw exception.
- // Param is printed with nothing inherited.
- //XXX: in the future when Configuration is available during doc inheritence,
- //print a warning for this mistake.
- {BUG_ID + FS + "pkg" + FS + "C.html",
-- "<CODE><I>inheritBug</I></CODE> -"
-+ "<code><I>inheritBug</I></code> -"
- },
-
- };
-diff --git a/test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java b/test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java
---- langtools/test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java
-+++ langtools/test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java
-@@ -58,50 +58,50 @@
- private static final String[][] TEST1 = {
- // Field inheritence from non-public superclass.
- {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
-- "<A HREF=\"../pkg/PublicChild.html#fieldInheritedFromParent\">" +
-- "fieldInheritedFromParent</A>"
-+ "<a href=\"../pkg/PublicChild.html#fieldInheritedFromParent\">" +
-+ "fieldInheritedFromParent</a>"
- },
-
- // Method inheritence from non-public superclass.
- {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
-- "<A HREF=\"../pkg/PublicChild.html#methodInheritedFromParent(int)\">" +
-- "methodInheritedFromParent</A>"
-+ "<a href=\"../pkg/PublicChild.html#methodInheritedFromParent(int)\">" +
-+ "methodInheritedFromParent</a>"
- },
-
- // Field inheritence from non-public superinterface.
- {BUG_ID + "-1" + FS + "pkg" + FS + "PublicInterface.html",
-- "<A HREF=\"../pkg/PublicInterface.html#fieldInheritedFromInterface\">" +
-- "fieldInheritedFromInterface</A>"
-+ "<a href=\"../pkg/PublicInterface.html#fieldInheritedFromInterface\">" +
-+ "fieldInheritedFromInterface</a>"
- },
-
- // Method inheritence from non-public superinterface.
- {BUG_ID + "-1" + FS + "pkg" + FS + "PublicInterface.html",
-- "<A HREF=\"../pkg/PublicInterface.html#methodInterface(int)\">" +
-- "methodInterface</A>"
-+ "<a href=\"../pkg/PublicInterface.html#methodInterface(int)\">" +
-+ "methodInterface</a>"
- },
-
- // private class does not show up in tree
- {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
-- "<PRE>" + NL +
-- "java.lang.Object" + NL +
-- " <IMG SRC=\"../resources/inherit.gif\" " +
-- "ALT=\"extended by \"><STRONG>pkg.PublicChild</STRONG>" + NL +
-- "</PRE>"
-+ "<ul class=\"inheritance\">" + NL + "<li>java.lang.Object</li>" + NL +
-+ "<li>" + NL + "<ul class=\"inheritance\">" + NL + "<li>pkg.PublicChild</li>" + NL +
-+ "</ul>" + NL + "</li>" + NL + "</ul>"
- },
-
- // Method is documented as though it is declared in the inheriting method.
- {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
-- "public void <STRONG>methodInheritedFromParent</STRONG>(int&nbsp;p1)"
-+ "<pre>public&nbsp;void&nbsp;methodInheritedFromParent(int&nbsp;p1)"
- },
-
- //Make sure implemented interfaces from private superclass are inherited
- {BUG_ID + "-1" + FS + "pkg" + FS + "PublicInterface.html",
-- "<STRONG>All Known Implementing Classes:</STRONG></DT> <DD><A HREF=\"../pkg/PublicChild.html\" " +
-- "title=\"class in pkg\">PublicChild</A>"},
-+ "<dl>" + NL + "<dt>All Known Implementing Classes:</dt>" + NL +
-+ "<dd><a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">" +
-+ "PublicChild</a></dd>" + NL + "</dl>"},
-
- {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
-- "<STRONG>All Implemented Interfaces:</STRONG></DT> <DD><A HREF=\"../pkg/PublicInterface.html\" " +
-- "title=\"interface in pkg\">PublicInterface</A>"},
-+ "<dl>" + NL + "<dt>All Implemented Interfaces:</dt>" + NL +
-+ "<dd><a href=\"../pkg/PublicInterface.html\" title=\"interface in pkg\">" +
-+ "PublicInterface</a></dd>" + NL + "</dl>"},
-
- //Generic interface method test.
- {BUG_ID + "-1" + FS + "pkg2" + FS + "C.html",
-@@ -110,12 +110,12 @@
- private static final String[][] NEGATED_TEST1 = {
- // Should not document that a method overrides method from private class.
- {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
-- "<STRONG>Overrides:</STRONG>"},
-+ "<strong>Overrides:</strong>"},
- // Should not document that a method specified by private interface.
- {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
-- "<STRONG>Specified by:</STRONG>"},
-+ "<strong>Specified by:</strong>"},
- {BUG_ID + "-1" + FS + "pkg" + FS + "PublicInterface.html",
-- "<STRONG>Specified by:</STRONG>"},
-+ "<strong>Specified by:</strong>"},
- // Should not mention that any documentation was copied.
- {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
- "Description copied from"},
-@@ -137,64 +137,64 @@
- //Do not inherit private interface method with generic parameters.
- //This method has been implemented.
- {BUG_ID + "-1" + FS + "pkg2" + FS + "C.html",
-- "<STRONG><A HREF=\"../pkg2/I.html#hello(T)\">hello</A></STRONG>"},
-+ "<strong><a href=\"../pkg2/I.html#hello(T)\">hello</a></strong>"},
- };
-
- // Test output when -private flag is used.
- private static final String[][] TEST2 = {
- // Field inheritence from non-public superclass.
- {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
-- "Fields inherited from class " +
-- "pkg.<A HREF=\"../pkg/PrivateParent.html\" " +
-- "title=\"class in pkg\">PrivateParent</A>"
-+ "Fields inherited from class&nbsp;pkg." +
-+ "<a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" +
-+ "PrivateParent</a>"
- },
- {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
-- "<A HREF=\"../pkg/PrivateParent.html#fieldInheritedFromParent\">" +
-- "fieldInheritedFromParent</A>"
-+ "<a href=\"../pkg/PrivateParent.html#fieldInheritedFromParent\">" +
-+ "fieldInheritedFromParent</a>"
- },
- // Field inheritence from non-public superinterface.
- {BUG_ID + "-2" + FS + "pkg" + FS + "PublicInterface.html",
-- "Fields inherited from interface " +
-- "pkg.<A HREF=\"../pkg/PrivateInterface.html\" " +
-- "title=\"interface in pkg\">PrivateInterface</A>"
-+ "Fields inherited from interface&nbsp;pkg." +
-+ "<a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" +
-+ "PrivateInterface</a>"
- },
- {BUG_ID + "-2" + FS + "pkg" + FS + "PublicInterface.html",
-- "<A HREF=\"../pkg/PrivateInterface.html#fieldInheritedFromInterface\">" +
-- "fieldInheritedFromInterface</A>"
-+ "<a href=\"../pkg/PrivateInterface.html#fieldInheritedFromInterface\">" +
-+ "fieldInheritedFromInterface</a>"
- },
- // Method inheritence from non-public superclass.
- {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
-- "Methods inherited from class " +
-- "pkg.<A HREF=\"../pkg/PrivateParent.html\" " +
-- "title=\"class in pkg\">PrivateParent</A>"
-+ "Methods inherited from class&nbsp;pkg." +
-+ "<a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" +
-+ "PrivateParent</a>"
- },
- {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
-- "<A HREF=\"../pkg/PrivateParent.html#methodInheritedFromParent(int)\">" +
-- "methodInheritedFromParent</A>"
-+ "<a href=\"../pkg/PrivateParent.html#methodInheritedFromParent(int)\">" +
-+ "methodInheritedFromParent</a>"
- },
- // Should document that a method overrides method from private class.
- {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
-- "<STRONG>Overrides:</STRONG></DT><DD><CODE>" +
-- "<A HREF=\"../pkg/PrivateParent.html#methodOverridenFromParent(char[], int, T, V, java.util.List)\">" +
-- "methodOverridenFromParent</A></CODE> in class <CODE>" +
-- "<A HREF=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" +
-- "PrivateParent</A></CODE></DD>" + NL + "</DL>"},
-+ "<dt><strong>Overrides:</strong></dt>" + NL +
-+ "<dd><code><a href=\"../pkg/PrivateParent.html#methodOverridenFromParent(char[], int, T, V, java.util.List)\">" +
-+ "methodOverridenFromParent</a></code>&nbsp;in class&nbsp;<code>" +
-+ "<a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" +
-+ "PrivateParent</a></code></dd>"},
- // Should document that a method is specified by private interface.
- {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
-- "<STRONG>Specified by:</STRONG></DT><DD><CODE>" +
-- "<A HREF=\"../pkg/PrivateInterface.html#methodInterface(int)\">" +
-- "methodInterface</A></CODE> in interface <CODE>" +
-- "<A HREF=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" +
-- "PrivateInterface</A></CODE></DD>" + NL + "</DL>" + NL + "</DD>"},
-+ "<dt><strong>Specified by:</strong></dt>" + NL +
-+ "<dd><code><a href=\"../pkg/PrivateInterface.html#methodInterface(int)\">" +
-+ "methodInterface</a></code>&nbsp;in interface&nbsp;<code>" +
-+ "<a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" +
-+ "PrivateInterface</a></code></dd>"},
- // Method inheritence from non-public superinterface.
- {BUG_ID + "-2" + FS + "pkg" + FS + "PublicInterface.html",
-- "Methods inherited from interface " +
-- "pkg.<A HREF=\"../pkg/PrivateInterface.html\" " +
-- "title=\"interface in pkg\">PrivateInterface</A>"
-+ "Methods inherited from interface&nbsp;pkg." +
-+ "<a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" +
-+ "PrivateInterface</a>"
- },
- {BUG_ID + "-2" + FS + "pkg" + FS + "PrivateInterface.html",
-- "<A HREF=\"../pkg/PrivateInterface.html#methodInterface(int)\">" +
-- "methodInterface</A>"
-+ "<a href=\"../pkg/PrivateInterface.html#methodInterface(int)\">" +
-+ "methodInterface</a>"
- },
- // Should mention that any documentation was copied.
- {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
-@@ -209,26 +209,31 @@
-
- //Make sure implemented interfaces from private superclass are inherited
- {BUG_ID + "-2" + FS + "pkg" + FS + "PublicInterface.html",
-- "<STRONG>All Known Implementing Classes:</STRONG></DT> <DD><A HREF=\"../pkg/PrivateParent.html\" " +
-- "title=\"class in pkg\">PrivateParent</A>, " +
-- "<A HREF=\"../pkg/PublicChild.html\" title=\"class in pkg\">PublicChild</A>"},
-+ "<dl>" + NL + "<dt>All Known Implementing Classes:</dt>" + NL +
-+ "<dd><a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" +
-+ "PrivateParent</a>, " +
-+ "<a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">PublicChild" +
-+ "</a></dd>" + NL + "</dl>"},
-
- {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
-- "<STRONG>All Implemented Interfaces:</STRONG></DT> <DD><A HREF=\"../pkg/PrivateInterface.html\" " +
-- "title=\"interface in pkg\">PrivateInterface</A>, " +
-- "<A HREF=\"../pkg/PublicInterface.html\" title=\"interface in pkg\">" +
-- "PublicInterface</A>"},
-+ "<dl>" + NL + "<dt>All Implemented Interfaces:</dt>" + NL +
-+ "<dd><a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" +
-+ "PrivateInterface</a>, " +
-+ "<a href=\"../pkg/PublicInterface.html\" title=\"interface in pkg\">" +
-+ "PublicInterface</a></dd>" + NL + "</dl>"},
-
- //Since private flag is used, we can document that private interface method
- //with generic parameters has been implemented.
- {BUG_ID + "-2" + FS + "pkg2" + FS + "C.html",
-- "<STRONG>Description copied from interface: " +
-- "<CODE><A HREF=\"../pkg2/I.html#hello(T)\">I</A></CODE></STRONG>"},
-+ "<strong>Description copied from interface:&nbsp;<code>" +
-+ "<a href=\"../pkg2/I.html#hello(T)\">I</a></code></strong>"},
-
- {BUG_ID + "-2" + FS + "pkg2" + FS + "C.html",
-- "<STRONG>Specified by:</STRONG></DT><DD><CODE><A HREF=\"../pkg2/I.html#hello(T)\">" +
-- "hello</A></CODE> in interface <CODE><A HREF=\"../pkg2/I.html\" " +
-- "title=\"interface in pkg2\">I</A>"},
-+ "<dt><strong>Specified by:</strong></dt>" + NL +
-+ "<dd><code><a href=\"../pkg2/I.html#hello(T)\">hello</a></code>" +
-+ "&nbsp;in interface&nbsp;<code>" +
-+ "<a href=\"../pkg2/I.html\" title=\"interface in pkg2\">I</a>" +
-+ "&lt;java.lang.String&gt;</code></dd>"},
- };
- private static final String[][] NEGATED_TEST2 = NO_TEST;
-
-diff --git a/test/com/sun/javadoc/testSerializedForm/TestSerializedForm.java b/test/com/sun/javadoc/testSerializedForm/TestSerializedForm.java
---- langtools/test/com/sun/javadoc/testSerializedForm/TestSerializedForm.java
-+++ langtools/test/com/sun/javadoc/testSerializedForm/TestSerializedForm.java
-@@ -47,11 +47,11 @@
-
- private static final String[][] TEST = {
- {BUG_ID + FS + "serialized-form.html",
-- "protected java.lang.Object <STRONG>readResolve</STRONG>()"},
-+ "protected&nbsp;java.lang.Object&nbsp;readResolve()"},
- {BUG_ID + FS + "serialized-form.html",
-- "protected java.lang.Object <STRONG>writeReplace</STRONG>()"},
-+ "protected&nbsp;java.lang.Object&nbsp;writeReplace()"},
- {BUG_ID + FS + "serialized-form.html",
-- "protected java.lang.Object <STRONG>readObjectNoData</STRONG>()"},
-+ "protected&nbsp;java.lang.Object&nbsp;readObjectNoData()"},
- {BUG_ID + FS + "serialized-form.html",
- "See Also"},
- };
-diff --git a/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java b/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java
---- langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java
-+++ langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java
-@@ -41,58 +41,47 @@
- // Test for normal run of javadoc. The serialized-form.html should
- // display the inline comments, tags and deprecation information if any.
- private static final String[][] TEST_CMNT_DEPR = {
-- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "<DD><DL>" + NL +
-- "<DT><STRONG>Throws:</STRONG></DT>" + NL + "<DD><CODE>" +
-- "java.io.IOException</CODE></DD><DT><STRONG>See Also:</STRONG>" +
-- "</DT><DD><A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-- "<CODE>C1.setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
-- "</DD>" + NL + "</DL>"},
-- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
-- "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version " +
-- "1.5, replaced by" + NL +
-- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-- "<CODE>setUndecorated(boolean)</CODE></A>.</I></DD>" +
-- "<DD>This field indicates whether the C1 is undecorated." + NL +
-- "<P>" + NL + "</DD>" + NL + "<DD>&nbsp;</DD>" + NL +
-- "<DD><DL>" + NL + "<DT><STRONG>Since:</STRONG></DT>" + NL +
-- " <DD>1.4</DD>" + NL + "<DT><STRONG>See Also:</STRONG>" +
-- "</DT><DD><A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-- "<CODE>C1.setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
-- "</DD>" + NL + "</DL>"},
-- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
-- "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
-- " 1.5, replaced by" + NL +
-- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-- "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
-- "</DD><DD>Reads the object stream." + NL + "<P>" + NL +
-- "</DD>" + NL + "<DD><DL>" + NL + "<DT><STRONG>Throws:" +
-- "</STRONG></DT>" + NL + "<DD><CODE><code>" +
-- "IOException</code></CODE></DD>" + NL +
-- "<DD><CODE>java.io.IOException</CODE></DD></DL>" + NL +
-- "</DD>" + NL + "</DL>"},
-- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
-- "<DD><STRONG>Deprecated.</STRONG>&nbsp;</DD><DD>" +
-- "The name for this class." + NL + "<P>" + NL + "</DD>" + NL +
-- "<DD>&nbsp;</DD>" + NL + "</DL>"}};
-+ {BUG_ID + FS + "serialized-form.html", "<dl>" +
-+ "<dt><span class=\"strong\">Throws:</span></dt>" + NL + "<dd><code>" +
-+ "java.io.IOException</code></dd><dt><span class=\"strong\">See Also:</span>" +
-+ "</dt><dd><a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<code>C1.setUndecorated(boolean)</code></a></dd></dl>"},
-+ {BUG_ID + FS + "serialized-form.html", "<span class=\"strong\">Deprecated.</span>" +
-+ "&nbsp;<i>As of JDK version 1.5, replaced by" + NL +
-+ " <a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<code>setUndecorated(boolean)</code></a>.</i></div>" + NL +
-+ "<div class=\"block\">This field indicates whether the C1 " +
-+ "is undecorated.</div>" + NL + "&nbsp;" + NL +
-+ "<dl><dt><span class=\"strong\">Since:</span></dt>" + NL +
-+ " <dd>1.4</dd>" + NL + "<dt><span class=\"strong\">See Also:</span>" +
-+ "</dt><dd><a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<code>C1.setUndecorated(boolean)</code></a></dd></dl>"},
-+ {BUG_ID + FS + "serialized-form.html", "<span class=\"strong\">Deprecated.</span>" +
-+ "&nbsp;<i>As of JDK version 1.5, replaced by" + NL +
-+ " <a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<code>setUndecorated(boolean)</code></a>.</i></div>" + NL +
-+ "<div class=\"block\">Reads the object stream.</div>" + NL +
-+ "<dl><dt><span class=\"strong\">Throws:</span></dt>" + NL + "<dd><code><code>" +
-+ "IOException</code></code></dd>" + NL +
-+ "<dd><code>java.io.IOException</code></dd></dl>"},
-+ {BUG_ID + FS + "serialized-form.html", "<span class=\"strong\">Deprecated.</span>" +
-+ "&nbsp;</div>" + NL + "<div class=\"block\">" +
-+ "The name for this class.</div>"}};
-
- // Test with -nocomment option. The serialized-form.html should
- // not display the inline comments and tags but should display deprecation
- // information if any.
- private static final String[][] TEST_NOCMNT = {
-- {BUG_ID + FS + "serialized-form.html", "<PRE>" + NL + "boolean <STRONG>" +
-- "undecorated</STRONG></PRE>" + NL + "<DL>" + NL + "<DD><STRONG>" +
-- "Deprecated.</STRONG>&nbsp;<I>As of JDK version 1.5, replaced by" + NL +
-- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\"><CODE>" +
-- "setUndecorated(boolean)</CODE></A>.</I></DD></DL>"},
-- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "<DD><STRONG>" +
-- "Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
-+ {BUG_ID + FS + "serialized-form.html", "<pre>boolean undecorated</pre>" + NL +
-+ "<div class=\"block\"><span class=\"strong\">Deprecated.</span>&nbsp;<i>" +
-+ "As of JDK version 1.5, replaced by" + NL +
-+ " <a href=\"pkg1/C1.html#setUndecorated(boolean)\"><code>" +
-+ "setUndecorated(boolean)</code></a>.</i></div>" + NL + "</li>"},
-+ {BUG_ID + FS + "serialized-form.html", "<span class=\"strong\">" +
-+ "Deprecated.</span>&nbsp;<i>As of JDK version" +
- " 1.5, replaced by" + NL +
-- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-- "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
-- "</DD></DL>"},
-- {BUG_ID + FS + "serialized-form.html", "<PRE>" + NL + "int <STRONG>" +
-- "publicKey</STRONG></PRE>" + NL + "<DL>" + NL + "<DD><STRONG>" +
-- "Deprecated.</STRONG>&nbsp;</DD></DL>"}};
-+ " <a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
-+ "<code>setUndecorated(boolean)</code></a>.</i></div>" + NL + "</li>"}};
-
- // Test with -nodeprecated option. The serialized-form.html should
- // ignore the -nodeprecated tag and display the deprecation info. This
-diff --git a/test/com/sun/javadoc/testSimpleTag/TestSimpleTag.java b/test/com/sun/javadoc/testSimpleTag/TestSimpleTag.java
---- langtools/test/com/sun/javadoc/testSimpleTag/TestSimpleTag.java
-+++ langtools/test/com/sun/javadoc/testSimpleTag/TestSimpleTag.java
-@@ -42,13 +42,13 @@
- private static final String[][] TEST =
- new String[][] {
- {"./" + BUG_ID + "/C.html",
-- "<STRONG>Todo:</STRONG>"},
-+ "<span class=\"strong\">Todo:</span>"},
- {"./" + BUG_ID + "/C.html",
-- "<STRONG>EJB Beans:</STRONG>"},
-+ "<span class=\"strong\">EJB Beans:</span>"},
- {"./" + BUG_ID + "/C.html",
-- "<STRONG>Regular Tag:</STRONG>"},
-+ "<span class=\"strong\">Regular Tag:</span>"},
- {"./" + BUG_ID + "/C.html",
-- "<STRONG>Back-Slash-Tag:</STRONG>"},
-+ "<span class=\"strong\">Back-Slash-Tag:</span>"},
- };
-
- private static final String[] ARGS = new String[] {
-diff --git a/test/com/sun/javadoc/testStylesheet/TestStylesheet.java b/test/com/sun/javadoc/testStylesheet/TestStylesheet.java
---- langtools/test/com/sun/javadoc/testStylesheet/TestStylesheet.java
-+++ langtools/test/com/sun/javadoc/testStylesheet/TestStylesheet.java
-@@ -45,32 +45,24 @@
- //Input for string search tests.
- private static final String[][] TEST = {
- {BUG_ID + FS + "stylesheet.css",
-- "body { background-color: #FFFFFF; color:#000000 }"},
-+ "/* Javadoc style sheet */"},
- {BUG_ID + FS + "stylesheet.css",
-- ".TableHeadingColor { background: #CCCCFF; color:#000000 }"},
-+ "/*" + NL + "Overall document style" + NL + "*/"},
- {BUG_ID + FS + "stylesheet.css",
-- ".TableSubHeadingColor { background: #EEEEFF; color:#000000 }"},
-+ "/*" + NL + "Heading styles" + NL + "*/"},
- {BUG_ID + FS + "stylesheet.css",
-- ".TableRowColor { background: #FFFFFF; color:#000000 }"},
-+ "/*" + NL + "Navigation bar styles" + NL + "*/"},
- {BUG_ID + FS + "stylesheet.css",
-- ".FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif; color:#000000 }"},
-+ "body {" + NL + " font-family:Helvetica, Arial, sans-serif;" + NL +
-+ " color:#000000;" + NL + "}"},
- {BUG_ID + FS + "stylesheet.css",
-- ".FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }"},
-- {BUG_ID + FS + "stylesheet.css",
-- ".FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }"},
-- {BUG_ID + FS + "stylesheet.css",
-- ".NavBarCell1 { background-color:#EEEEFF; color:#000000}"},
-- {BUG_ID + FS + "stylesheet.css",
-- ".NavBarCell1Rev { background-color:#00008B; color:#FFFFFF}"},
-- {BUG_ID + FS + "stylesheet.css",
-- ".NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;color:#000000;}"},
-- {BUG_ID + FS + "stylesheet.css",
-- ".NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;color:#FFFFFF;}"},
-- {BUG_ID + FS + "stylesheet.css",
-- ".NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}"},
-- {BUG_ID + FS + "stylesheet.css",
-- ".NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}"},
--
-+ "dl dd ul li {" + NL + " list-style:none;" + NL +
-+ " margin:10px 0 10px 0;" + NL + "}"},
-+ // Test whether a link to the stylesheet file is inserted properly
-+ // in the class documentation.
-+ {BUG_ID + FS + "pkg" + FS + "A.html",
-+ "<link rel=\"stylesheet\" type=\"text/css\" " +
-+ "href=\"../stylesheet.css\" title=\"Style\">"}
- };
- private static final String[][] NEGATED_TEST = NO_TEST;
-
-diff --git a/test/com/sun/javadoc/testSummaryHeading/TestSummaryHeading.java b/test/com/sun/javadoc/testSummaryHeading/TestSummaryHeading.java
---- langtools/test/com/sun/javadoc/testSummaryHeading/TestSummaryHeading.java
-+++ langtools/test/com/sun/javadoc/testSummaryHeading/TestSummaryHeading.java
-@@ -46,8 +46,7 @@
-
- //Input for string search tests.
- private static final String[][] TEST = {
-- {BUG_ID + FS + "C.html", "<CAPTION CLASS=\"TableCaption\">" + NL +
-- "Method Summary</CAPTION>"}
-+ {BUG_ID + FS + "C.html", "<h3>Method Summary</h3>"}
- };
- private static final String[][] NEGATED_TEST = NO_TEST;
-
-diff --git a/test/com/sun/javadoc/testSuperclassInSerialForm/TestSuperClassInSerialForm.java b/test/com/sun/javadoc/testSuperclassInSerialForm/TestSuperClassInSerialForm.java
---- langtools/test/com/sun/javadoc/testSuperclassInSerialForm/TestSuperClassInSerialForm.java
-+++ langtools/test/com/sun/javadoc/testSuperclassInSerialForm/TestSuperClassInSerialForm.java
-@@ -39,7 +39,7 @@
-
- private static final String[][] TEST = {
- {BUG_ID + FS + "serialized-form.html",
-- "<A HREF=\"pkg/SubClass.html\" title=\"class in pkg\">pkg.SubClass</A> extends <A HREF=\"pkg/SuperClass.html\" title=\"class in pkg\">SuperClass</A>"}
-+ "<a href=\"pkg/SubClass.html\" title=\"class in pkg\">pkg.SubClass</a> extends <a href=\"pkg/SuperClass.html\" title=\"class in pkg\">SuperClass</a>"}
- };
-
- private static final String[][] NEGATED_TEST = NO_TEST;
-diff --git a/test/com/sun/javadoc/testTagInheritence/TestTagInheritence.java b/test/com/sun/javadoc/testTagInheritence/TestTagInheritence.java
---- langtools/test/com/sun/javadoc/testTagInheritence/TestTagInheritence.java
-+++ langtools/test/com/sun/javadoc/testTagInheritence/TestTagInheritence.java
-@@ -59,12 +59,12 @@
- //First sentence test (6253614)
- tests[tests.length - 2][0] =BUG_ID + FS + "firstSentence" + FS +
- "B.html";
-- tests[tests.length - 2][1] = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;First sentence.</TD>";
-+ tests[tests.length - 2][1] = "<div class=\"block\">First sentence.</div>";
-
- //Another first sentence test (6253604)
- tests[tests.length - 1][0] =BUG_ID + FS + "firstSentence2" + FS +
- "C.html";
-- tests[tests.length - 1][1] = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;First sentence.</TD>";
-+ tests[tests.length - 1][1] = "<div class=\"block\">First sentence.</div>";
-
- TestTagInheritence tester = new TestTagInheritence();
- run(tester, ARGS, tests, NO_TEST);
-diff --git a/test/com/sun/javadoc/testTaglets/TestTaglets.java b/test/com/sun/javadoc/testTaglets/TestTaglets.java
---- langtools/test/com/sun/javadoc/testTaglets/TestTaglets.java
-+++ langtools/test/com/sun/javadoc/testTaglets/TestTaglets.java
-@@ -55,13 +55,15 @@
-
- //Input for string search tests.
- private static final String[][] TEST_4654308 = new String[][] {
-- {"4654308" + FS + "C.html", "<B>Foo:</B><DD>my only method is " + "<A HREF=\"C.html#method()\"><CODE>here</CODE></A>"}
-+ {"4654308" + FS + "C.html", "<span class=\"strong\">Foo:</span></dt>" +
-+ "<dd>my only method is <a href=\"C.html#method()\"><code>here" +
-+ "</code></a></dd></dl>"}
- };
- private static final String[][] NEGATED_TEST_4654308 = NO_TEST;
-
- private static final String[][] TEST_4767038 = new String[][] {
- {"4767038" + FS + "Child.html",
-- "&nbsp;This is the first sentence.</TD>"}
-+ "This is the first sentence."}
- };
- private static final String[][] NEGATED_TEST_4767038 = NO_TEST;
-
-diff --git a/test/com/sun/javadoc/testTaglets/taglets/Foo.java b/test/com/sun/javadoc/testTaglets/taglets/Foo.java
---- langtools/test/com/sun/javadoc/testTaglets/taglets/Foo.java
-+++ langtools/test/com/sun/javadoc/testTaglets/taglets/Foo.java
-@@ -50,9 +50,9 @@
- */
- public TagletOutput getTagletOutput(Tag tag, TagletWriter writer) {
- ArrayList inlineTags = new ArrayList();
-- inlineTags.add(new TextTag(tag.holder(), "<DT><B>Foo:</B><DD>"));
-+ inlineTags.add(new TextTag(tag.holder(), "<dt><span class=\"strong\">Foo:</span></dt><dd>"));
- inlineTags.addAll(Arrays.asList(tag.inlineTags()));
-- inlineTags.add(new TextTag(tag.holder(), "</DD>"));
-+ inlineTags.add(new TextTag(tag.holder(), "</dd>"));
- return writer.commentTagsToOutput(tag,
- (Tag[]) inlineTags.toArray(new Tag[] {}));
- }
-diff --git a/test/com/sun/javadoc/testThrowsHead/TestThrowsHead.java b/test/com/sun/javadoc/testThrowsHead/TestThrowsHead.java
---- langtools/test/com/sun/javadoc/testThrowsHead/TestThrowsHead.java
-+++ langtools/test/com/sun/javadoc/testThrowsHead/TestThrowsHead.java
-@@ -38,7 +38,7 @@
-
- private static final String BUG_ID = "4530727";
- private static final String[][] TEST = {
-- {BUG_ID + FS + "C.html", "<DT><STRONG>Throws:</STRONG>"}
-+ {BUG_ID + FS + "C.html", "<dt><span class=\"strong\">Throws:</span>"}
- };
- private static final String[][] NEGATED_TEST = NO_TEST;
- private static final String[] ARGS = new String[] {
-diff --git a/test/com/sun/javadoc/testThrowsTag/TestThrowsTag.java b/test/com/sun/javadoc/testThrowsTag/TestThrowsTag.java
---- langtools/test/com/sun/javadoc/testThrowsTag/TestThrowsTag.java
-+++ langtools/test/com/sun/javadoc/testThrowsTag/TestThrowsTag.java
-@@ -46,14 +46,14 @@
- //Input for string search tests.
- private static final String[][] TEST = {
- {BUG_ID + FS + "pkg" + FS + "C.html",
-- "<DD><CODE><A HREF=\"../pkg/T1.html\" title=\"class in pkg\">T1</A></CODE> - the first throws tag.</DD>" + NL +
-- "<DD><CODE><A HREF=\"../pkg/T2.html\" title=\"class in pkg\">T2</A></CODE> - the second throws tag.</DD>" + NL +
-- "<DD><CODE><A HREF=\"../pkg/T3.html\" title=\"class in pkg\">T3</A></CODE> - the third throws tag.</DD>" + NL +
-- "<DD><CODE><A HREF=\"../pkg/T4.html\" title=\"class in pkg\">T4</A></CODE> - the fourth throws tag.</DD>" + NL +
-- "<DD><CODE><A HREF=\"../pkg/T5.html\" title=\"class in pkg\">T5</A></CODE> - the first inherited throws tag.</DD>" + NL +
-- "<DD><CODE><A HREF=\"../pkg/T6.html\" title=\"class in pkg\">T6</A></CODE> - the second inherited throws tag.</DD>" + NL +
-- "<DD><CODE><A HREF=\"../pkg/T7.html\" title=\"class in pkg\">T7</A></CODE> - the third inherited throws tag.</DD>" + NL +
-- "<DD><CODE><A HREF=\"../pkg/T8.html\" title=\"class in pkg\">T8</A></CODE> - the fourth inherited throws tag.</DD>"
-+ "<dd><code><a href=\"../pkg/T1.html\" title=\"class in pkg\">T1</a></code> - the first throws tag.</dd>" + NL +
-+ "<dd><code><a href=\"../pkg/T2.html\" title=\"class in pkg\">T2</a></code> - the second throws tag.</dd>" + NL +
-+ "<dd><code><a href=\"../pkg/T3.html\" title=\"class in pkg\">T3</a></code> - the third throws tag.</dd>" + NL +
-+ "<dd><code><a href=\"../pkg/T4.html\" title=\"class in pkg\">T4</a></code> - the fourth throws tag.</dd>" + NL +
-+ "<dd><code><a href=\"../pkg/T5.html\" title=\"class in pkg\">T5</a></code> - the first inherited throws tag.</dd>" + NL +
-+ "<dd><code><a href=\"../pkg/T6.html\" title=\"class in pkg\">T6</a></code> - the second inherited throws tag.</dd>" + NL +
-+ "<dd><code><a href=\"../pkg/T7.html\" title=\"class in pkg\">T7</a></code> - the third inherited throws tag.</dd>" + NL +
-+ "<dd><code><a href=\"../pkg/T8.html\" title=\"class in pkg\">T8</a></code> - the fourth inherited throws tag.</dd>"
- },
- };
- private static final String[][] NEGATED_TEST = NO_TEST;
-diff --git a/test/com/sun/javadoc/testTitleInHref/TestTitleInHref.java b/test/com/sun/javadoc/testTitleInHref/TestTitleInHref.java
---- langtools/test/com/sun/javadoc/testTitleInHref/TestTitleInHref.java
-+++ langtools/test/com/sun/javadoc/testTitleInHref/TestTitleInHref.java
-@@ -38,13 +38,13 @@
-
- private static final String[][] TEST = {
- //Test to make sure that the title shows up in a class link.
-- {BUG_ID + FS + "pkg" + FS + "Links.html", "<A HREF=\"../pkg/Class.html\" title=\"class in pkg\">"},
-+ {BUG_ID + FS + "pkg" + FS + "Links.html", "<a href=\"../pkg/Class.html\" title=\"class in pkg\">"},
-
- //Test to make sure that the title shows up in an interface link.
-- {BUG_ID + FS + "pkg" + FS + "Links.html", "<A HREF=\"../pkg/Interface.html\" title=\"interface in pkg\">"},
-+ {BUG_ID + FS + "pkg" + FS + "Links.html", "<a href=\"../pkg/Interface.html\" title=\"interface in pkg\">"},
-
- //Test to make sure that the title shows up in cross link shows up
-- {BUG_ID + FS + "pkg" + FS + "Links.html", "<A HREF=\"http://java.sun.com/j2se/1.4/docs/api/java/io/File.html?is-external=true\" title=\"class or interface in java.io\"><CODE>This is a cross link to class File</CODE></A>"},
-+ {BUG_ID + FS + "pkg" + FS + "Links.html", "<a href=\"http://java.sun.com/j2se/1.4/docs/api/java/io/File.html?is-external=true\" title=\"class or interface in java.io\"><code>This is a cross link to class File</code></a>"},
-
- };
-
-diff --git a/test/com/sun/javadoc/testTypeParams/TestTypeParameters.java b/test/com/sun/javadoc/testTypeParams/TestTypeParameters.java
---- langtools/test/com/sun/javadoc/testTypeParams/TestTypeParameters.java
-+++ langtools/test/com/sun/javadoc/testTypeParams/TestTypeParameters.java
-@@ -49,16 +49,17 @@
- private static final String[][] TEST =
- {
- {BUG_ID + FS + "pkg" + FS + "C.html",
-- "<CODE>&lt;W extends java.lang.String,V extends java.util.List&gt; " + NL +
-- "<BR>" + NL +
-- "java.lang.Object</CODE>"},
-+ "<td class=\"colFirst\"><code>&lt;W extends java.lang.String,V extends " +
-+ "java.util.List&gt;&nbsp;<br>java.lang.Object</code></td>"},
- {BUG_ID + FS + "pkg" + FS + "C.html",
-- "<CODE>&lt;T&gt; java.lang.Object</CODE>"},
-+ "<code>&lt;T&gt;&nbsp;java.lang.Object</code>"},
- {BUG_ID + FS + "pkg" + FS + "package-summary.html",
- "C&lt;E extends Parent&gt;"},
- //Nested type parameters
- {BUG_ID + FS + "pkg" + FS + "C.html",
-- "<A NAME=\"formatDetails(java.util.Collection, java.util.Collection)\"><!-- --></A>"},
-+ "<a name=\"formatDetails(java.util.Collection, java.util.Collection)\">" + NL +
-+ "<!-- -->" + NL +
-+ "</a>"},
-
- };
- private static final String[][] NEGATED_TEST = NO_TEST;
-diff --git a/test/com/sun/javadoc/testUnnamedPackage/TestUnnamedPackage.java b/test/com/sun/javadoc/testUnnamedPackage/TestUnnamedPackage.java
---- langtools/test/com/sun/javadoc/testUnnamedPackage/TestUnnamedPackage.java
-+++ langtools/test/com/sun/javadoc/testUnnamedPackage/TestUnnamedPackage.java
-@@ -46,7 +46,7 @@
- //Input for string search tests.
- private static final String[][] TEST = {
- {BUG_ID + FS + "package-summary.html",
-- "<H2>"+NL+"Package &lt;Unnamed&gt;"+NL+"</H2>"
-+ "<h1 title=\"Package\" class=\"title\">Package&nbsp;&lt;Unnamed&gt;</h1>"
- },
- {BUG_ID + FS + "package-summary.html",
- "This is a package comment for the unnamed package."
-@@ -55,12 +55,12 @@
- "This is a class in the unnamed package."
- },
- {BUG_ID + FS + "package-tree.html",
-- "<H2>"+NL+"Hierarchy For Package &lt;Unnamed&gt;"+NL+"</H2>"
-+ "<h1 class=\"title\">Hierarchy For Package &lt;Unnamed&gt;</h1>"
- },
- {BUG_ID + FS + "index-all.html",
- "title=\"class in &lt;Unnamed&gt;\""
- },
-- {BUG_ID + FS + "C.html", "<A HREF=\"package-summary.html\">"}
-+ {BUG_ID + FS + "C.html", "<a href=\"package-summary.html\">"}
- };
- private static final String[][] NEGATED_TEST = {
- {ERROR_OUTPUT, "BadSource"},
-diff --git a/test/com/sun/javadoc/testValueTag/TestValueTag.java b/test/com/sun/javadoc/testValueTag/TestValueTag.java
---- langtools/test/com/sun/javadoc/testValueTag/TestValueTag.java
-+++ langtools/test/com/sun/javadoc/testValueTag/TestValueTag.java
-@@ -52,44 +52,44 @@
- "Result: \"Test 1 passes\""},
- //Retrieve value of constant in same class.
- {BUG_ID + FS + "pkg1" + FS + "Class1.html",
-- "Result: <A HREF=\"../pkg1/Class1.html#TEST_2_PASSES\">\"Test 2 passes\"</A>"},
-+ "Result: <a href=\"../pkg1/Class1.html#TEST_2_PASSES\">\"Test 2 passes\"</a>"},
- {BUG_ID + FS + "pkg1" + FS + "Class1.html",
-- "Result: <A HREF=\"../pkg1/Class1.html#TEST_3_PASSES\">\"Test 3 passes\"</A>"},
-+ "Result: <a href=\"../pkg1/Class1.html#TEST_3_PASSES\">\"Test 3 passes\"</a>"},
- {BUG_ID + FS + "pkg1" + FS + "Class1.html",
-- "Result: <A HREF=\"../pkg1/Class1.html#TEST_4_PASSES\">\"Test 4 passes\"</A>"},
-+ "Result: <a href=\"../pkg1/Class1.html#TEST_4_PASSES\">\"Test 4 passes\"</a>"},
- {BUG_ID + FS + "pkg1" + FS + "Class1.html",
-- "Result: <A HREF=\"../pkg1/Class1.html#TEST_5_PASSES\">\"Test 5 passes\"</A>"},
-+ "Result: <a href=\"../pkg1/Class1.html#TEST_5_PASSES\">\"Test 5 passes\"</a>"},
- {BUG_ID + FS + "pkg1" + FS + "Class1.html",
-- "Result: <A HREF=\"../pkg1/Class1.html#TEST_6_PASSES\">\"Test 6 passes\"</A>"},
-+ "Result: <a href=\"../pkg1/Class1.html#TEST_6_PASSES\">\"Test 6 passes\"</a>"},
- //Retrieve value of constant in different class.
- {BUG_ID + FS + "pkg1" + FS + "Class2.html",
-- "Result: <A HREF=\"../pkg1/Class1.html#TEST_7_PASSES\">\"Test 7 passes\"</A>"},
-+ "Result: <a href=\"../pkg1/Class1.html#TEST_7_PASSES\">\"Test 7 passes\"</a>"},
- {BUG_ID + FS + "pkg1" + FS + "Class2.html",
-- "Result: <A HREF=\"../pkg1/Class1.html#TEST_8_PASSES\">\"Test 8 passes\"</A>"},
-+ "Result: <a href=\"../pkg1/Class1.html#TEST_8_PASSES\">\"Test 8 passes\"</a>"},
- {BUG_ID + FS + "pkg1" + FS + "Class2.html",
-- "Result: <A HREF=\"../pkg1/Class1.html#TEST_9_PASSES\">\"Test 9 passes\"</A>"},
-+ "Result: <a href=\"../pkg1/Class1.html#TEST_9_PASSES\">\"Test 9 passes\"</a>"},
- {BUG_ID + FS + "pkg1" + FS + "Class2.html",
-- "Result: <A HREF=\"../pkg1/Class1.html#TEST_10_PASSES\">\"Test 10 passes\"</A>"},
-+ "Result: <a href=\"../pkg1/Class1.html#TEST_10_PASSES\">\"Test 10 passes\"</a>"},
- {BUG_ID + FS + "pkg1" + FS + "Class2.html",
-- "Result: <A HREF=\"../pkg1/Class1.html#TEST_11_PASSES\">\"Test 11 passes\"</A>"},
-+ "Result: <a href=\"../pkg1/Class1.html#TEST_11_PASSES\">\"Test 11 passes\"</a>"},
- //Retrieve value of constant in different package
- {BUG_ID + FS + "pkg1" + FS + "Class2.html",
-- "Result: <A HREF=\"../pkg2/Class3.html#TEST_12_PASSES\">\"Test 12 passes\"</A>"},
-+ "Result: <a href=\"../pkg2/Class3.html#TEST_12_PASSES\">\"Test 12 passes\"</a>"},
- {BUG_ID + FS + "pkg1" + FS + "Class2.html",
-- "Result: <A HREF=\"../pkg2/Class3.html#TEST_13_PASSES\">\"Test 13 passes\"</A>"},
-+ "Result: <a href=\"../pkg2/Class3.html#TEST_13_PASSES\">\"Test 13 passes\"</a>"},
- {BUG_ID + FS + "pkg1" + FS + "Class2.html",
-- "Result: <A HREF=\"../pkg2/Class3.html#TEST_14_PASSES\">\"Test 14 passes\"</A>"},
-+ "Result: <a href=\"../pkg2/Class3.html#TEST_14_PASSES\">\"Test 14 passes\"</a>"},
- {BUG_ID + FS + "pkg1" + FS + "Class2.html",
-- "Result: <A HREF=\"../pkg2/Class3.html#TEST_15_PASSES\">\"Test 15 passes\"</A>"},
-+ "Result: <a href=\"../pkg2/Class3.html#TEST_15_PASSES\">\"Test 15 passes\"</a>"},
- {BUG_ID + FS + "pkg1" + FS + "Class2.html",
-- "Result: <A HREF=\"../pkg2/Class3.html#TEST_16_PASSES\">\"Test 16 passes\"</A>"},
-+ "Result: <a href=\"../pkg2/Class3.html#TEST_16_PASSES\">\"Test 16 passes\"</a>"},
- //Retrieve value of constant from a package page
- {BUG_ID + FS + "pkg2" + FS + "package-summary.html",
-- "Result: <A HREF=\"../pkg2/Class3.html#TEST_17_PASSES\">\"Test 17 passes\"</A>"},
-+ "Result: <a href=\"../pkg2/Class3.html#TEST_17_PASSES\">\"Test 17 passes\"</a>"},
- //Test @value tag used with custom tag.
- {BUG_ID + FS + "pkg1" + FS + "CustomTagUsage.html",
-- "<DT><STRONG>Todo:</STRONG></DT>" + NL +
-- " <DD>the value of this constant is 55.</DD>"},
-+ "<dt><span class=\"strong\">Todo:</span></dt>" + NL +
-+ " <dd>the value of this constant is 55.</dd>"},
- //Test @value warning printed when used with non-constant.
- {WARNING_OUTPUT,"warning - @value tag (which references nonConstant) " +
- "can only be used in constants."
-diff --git a/test/com/sun/javadoc/testWarnings/TestWarnings.java b/test/com/sun/javadoc/testWarnings/TestWarnings.java
---- langtools/test/com/sun/javadoc/testWarnings/TestWarnings.java
-+++ langtools/test/com/sun/javadoc/testWarnings/TestWarnings.java
-@@ -65,9 +65,9 @@
- };
-
- private static final String[][] TEST2 = {
-- {BUG_ID + FS + "pkg" + FS + "X.html", "<A HREF=\"../pkg/X.html#m()\"><CODE>m()</CODE></A><br/>"},
-- {BUG_ID + FS + "pkg" + FS + "X.html", "<A HREF=\"../pkg/X.html#X()\"><CODE>X()</CODE></A><br/>"},
-- {BUG_ID + FS + "pkg" + FS + "X.html", "<A HREF=\"../pkg/X.html#f\"><CODE>f</CODE></A><br/>"},
-+ {BUG_ID + FS + "pkg" + FS + "X.html", "<a href=\"../pkg/X.html#m()\"><code>m()</code></a><br/>"},
-+ {BUG_ID + FS + "pkg" + FS + "X.html", "<a href=\"../pkg/X.html#X()\"><code>X()</code></a><br/>"},
-+ {BUG_ID + FS + "pkg" + FS + "X.html", "<a href=\"../pkg/X.html#f\"><code>f</code></a><br/>"},
- };
-
- private static final String[][] NEGATED_TEST2 = NO_TEST;
diff --git a/java/openjdk6/files/icedtea/openjdk/6886358-layout_update.patch b/java/openjdk6/files/icedtea/openjdk/6886358-layout_update.patch
deleted file mode 100644
index ac485c96d1ba..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/6886358-layout_update.patch
+++ /dev/null
@@ -1,13847 +0,0 @@
-# HG changeset patch
-# User andrew
-# Date 1365742546 -3600
-# Node ID ec8a935f0737e033e4ffd401c4d554cd73739c39
-# Parent e8ed86062291305172267be90dcec2acef7c15a8
-6886358: layout code update
-Reviewed-by: igor, prr
-
-diff --git a/make/sun/font/FILES_c.gmk b/make/sun/font/FILES_c.gmk
---- jdk/make/sun/font/FILES_c.gmk
-+++ jdk/make/sun/font/FILES_c.gmk
-@@ -72,8 +72,7 @@
- GlyphPositioningTables.cpp \
- GlyphSubstLookupProc.cpp \
- GlyphSubstitutionTables.cpp \
-- HebrewLigatureData.cpp \
-- HebrewShaping.cpp \
-+ HangulLayoutEngine.cpp \
- IndicClassTables.cpp \
- IndicReordering.cpp \
- KernTable.cpp \
-@@ -99,6 +98,8 @@
- SubstitutionLookups.cpp \
- ThaiShaping.cpp \
- ThaiStateTables.cpp \
-+ TibetanLayoutEngine.cpp \
-+ TibetanReordering.cpp \
- ValueRecords.cpp \
- ArabicLayoutEngine.cpp \
- ArabicShaping.cpp \
-diff --git a/src/share/classes/sun/font/FontManager.java b/src/share/classes/sun/font/FontManager.java
---- jdk/src/share/classes/sun/font/FontManager.java
-+++ jdk/src/share/classes/sun/font/FontManager.java
-@@ -3598,6 +3598,18 @@
- // 0E00 - 0E7F if Thai, assume shaping for vowel, tone marks
- return true;
- }
-+ else if (code < 0x0f00) {
-+ return false;
-+ }
-+ else if (code <= 0x0fff) { // U+0F00 - U+0FFF Tibetan
-+ return true;
-+ }
-+ else if (code < 0x1100) {
-+ return false;
-+ }
-+ else if (code < 0x11ff) { // U+1100 - U+11FF Old Hangul
-+ return true;
-+ }
- else if (code < 0x1780) {
- return false;
- }
-diff --git a/src/share/native/sun/font/layout/ArabicLayoutEngine.cpp b/src/share/native/sun/font/layout/ArabicLayoutEngine.cpp
---- jdk/src/share/native/sun/font/layout/ArabicLayoutEngine.cpp
-+++ jdk/src/share/native/sun/font/layout/ArabicLayoutEngine.cpp
-@@ -59,16 +59,16 @@
- UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ArabicOpenTypeLayoutEngine)
-
- ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-- le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable)
-- : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable)
-+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success)
-+ : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success)
- {
- fFeatureMap = ArabicShaping::getFeatureMap(fFeatureMapCount);
- fFeatureOrder = TRUE;
- }
-
- ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-- le_int32 typoFlags)
-- : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags)
-+ le_int32 typoFlags, LEErrorCode &success)
-+ : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success)
- {
- fFeatureMap = ArabicShaping::getFeatureMap(fFeatureMapCount);
-
-@@ -151,8 +151,8 @@
- }
- }
-
--UnicodeArabicOpenTypeLayoutEngine::UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags)
-- : ArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags | LE_CHAR_FILTER_FEATURE_FLAG)
-+UnicodeArabicOpenTypeLayoutEngine::UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags, LEErrorCode &success)
-+ : ArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags | LE_CHAR_FILTER_FEATURE_FLAG, success)
- {
- fGSUBTable = (const GlyphSubstitutionTableHeader *) CanonShaping::glyphSubstitutionTable;
- fGDEFTable = (const GlyphDefinitionTableHeader *) CanonShaping::glyphDefinitionTable;
-diff --git a/src/share/native/sun/font/layout/ArabicLayoutEngine.h b/src/share/native/sun/font/layout/ArabicLayoutEngine.h
---- jdk/src/share/native/sun/font/layout/ArabicLayoutEngine.h
-+++ jdk/src/share/native/sun/font/layout/ArabicLayoutEngine.h
-@@ -66,6 +66,7 @@
- * @param scriptCode - the script
- * @param langaugeCode - the language
- * @param gsubTable - the GSUB table
-+ * @param success - set to an error code if the operation fails
- *
- * @see LayoutEngine::layoutEngineFactory
- * @see OpenTypeLayoutEngine
-@@ -74,7 +75,7 @@
- * @internal
- */
- ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-- le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable);
-+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success);
-
- /**
- * This constructor is used when the font requires a "canned" GSUB table which can't be known
-@@ -83,6 +84,7 @@
- * @param fontInstance - the font
- * @param scriptCode - the script
- * @param langaugeCode - the language
-+ * @param success - set to an error code if the operation fails
- *
- * @see OpenTypeLayoutEngine
- * @see ScriptAndLanguageTags.h for script and language codes
-@@ -90,7 +92,7 @@
- * @internal
- */
- ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-- le_int32 typoFlags);
-+ le_int32 typoFlags, LEErrorCode &success);
-
- /**
- * The destructor, virtual for correct polymorphic invocation.
-@@ -184,6 +186,7 @@
- * @param fontInstance - the font
- * @param scriptCode - the script
- * @param languageCode - the language
-+ * @param success - set to an error code if the operation fails
- *
- * @see LEFontInstance
- * @see ScriptAndLanguageTags.h for script and language codes
-@@ -191,7 +194,7 @@
- * @internal
- */
- UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-- le_int32 typoFlags);
-+ le_int32 typoFlags, LEErrorCode &success);
-
- /**
- * The destructor, virtual for correct polymorphic invocation.
-diff --git a/src/share/native/sun/font/layout/ArabicShaping.cpp b/src/share/native/sun/font/layout/ArabicShaping.cpp
---- jdk/src/share/native/sun/font/layout/ArabicShaping.cpp
-+++ jdk/src/share/native/sun/font/layout/ArabicShaping.cpp
-@@ -104,6 +104,7 @@
- #define markFeatureMask 0x00040000UL
- #define mkmkFeatureMask 0x00020000UL
-
-+#define NO_FEATURES 0
- #define ISOL_FEATURES (isolFeatureMask | ligaFeatureMask | msetFeatureMask | markFeatureMask | ccmpFeatureMask | rligFeatureMask | caltFeatureMask | dligFeatureMask | cswhFeatureMask | cursFeatureMask | kernFeatureMask | mkmkFeatureMask)
-
- #define SHAPE_MASK 0xF0000000UL
-@@ -198,7 +199,11 @@
- LEUnicode c = chars[in];
- ShapeType t = getShapeType(c);
-
-+ if (t == ST_NOSHAPE_NONE) {
-+ glyphStorage.setAuxData(out, NO_FEATURES, success);
-+ } else {
- glyphStorage.setAuxData(out, ISOL_FEATURES, success);
-+ }
-
- if ((t & MASK_TRANSPARENT) != 0) {
- continue;
-diff --git a/src/share/native/sun/font/layout/CanonData.cpp b/src/share/native/sun/font/layout/CanonData.cpp
---- jdk/src/share/native/sun/font/layout/CanonData.cpp
-+++ jdk/src/share/native/sun/font/layout/CanonData.cpp
-@@ -30,7 +30,7 @@
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
- *
-- * Generated on: 03/31/2005 08:15:27 AM HST
-+ * Generated on: 03/12/2008 03:14:34 PM HST
- */
-
- #include "LETypes.h"
-@@ -39,36 +39,33 @@
- U_NAMESPACE_BEGIN
-
- const le_uint8 CanonShaping::glyphSubstitutionTable[] = {
-- 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x01, 0x58, 0x02, 0x86, 0x00, 0x12, 0x61, 0x72, 0x61, 0x62,
-- 0x00, 0x6E, 0x62, 0x65, 0x6E, 0x67, 0x00, 0x82, 0x63, 0x79, 0x72, 0x6C, 0x00, 0x8E, 0x64, 0x65,
-- 0x76, 0x61, 0x00, 0x9A, 0x67, 0x72, 0x65, 0x6B, 0x00, 0xA6, 0x67, 0x75, 0x72, 0x75, 0x00, 0xB2,
-- 0x68, 0x65, 0x62, 0x72, 0x00, 0xBE, 0x68, 0x69, 0x72, 0x61, 0x00, 0xCA, 0x6B, 0x61, 0x6E, 0x61,
-- 0x00, 0xD6, 0x6B, 0x6E, 0x64, 0x61, 0x00, 0xE2, 0x6C, 0x61, 0x74, 0x6E, 0x00, 0xEE, 0x6D, 0x6C,
-- 0x79, 0x6D, 0x00, 0xFA, 0x6D, 0x79, 0x6D, 0x72, 0x01, 0x06, 0x6F, 0x72, 0x79, 0x61, 0x01, 0x12,
-- 0x73, 0x69, 0x6E, 0x68, 0x01, 0x1E, 0x74, 0x61, 0x6D, 0x6C, 0x01, 0x2A, 0x74, 0x65, 0x6C, 0x75,
-- 0x01, 0x36, 0x74, 0x69, 0x62, 0x74, 0x01, 0x42, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
-- 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x00, 0x15, 0x00, 0x12, 0x00, 0x14, 0x00, 0x04, 0x00, 0x00,
-+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x01, 0x34, 0x02, 0x46, 0x00, 0x10, 0x61, 0x72, 0x61, 0x62,
-+ 0x00, 0x62, 0x62, 0x61, 0x6C, 0x69, 0x00, 0x76, 0x62, 0x65, 0x6E, 0x67, 0x00, 0x82, 0x63, 0x79,
-+ 0x72, 0x6C, 0x00, 0x8E, 0x64, 0x65, 0x76, 0x61, 0x00, 0x9A, 0x67, 0x72, 0x65, 0x6B, 0x00, 0xA6,
-+ 0x68, 0x69, 0x72, 0x61, 0x00, 0xB2, 0x6B, 0x61, 0x6E, 0x61, 0x00, 0xBE, 0x6B, 0x6E, 0x64, 0x61,
-+ 0x00, 0xCA, 0x6C, 0x61, 0x74, 0x6E, 0x00, 0xD6, 0x6D, 0x6C, 0x79, 0x6D, 0x00, 0xE2, 0x6D, 0x79,
-+ 0x6D, 0x72, 0x00, 0xEE, 0x6F, 0x72, 0x79, 0x61, 0x00, 0xFA, 0x73, 0x69, 0x6E, 0x68, 0x01, 0x06,
-+ 0x74, 0x61, 0x6D, 0x6C, 0x01, 0x12, 0x74, 0x65, 0x6C, 0x75, 0x01, 0x1E, 0x00, 0x04, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x05, 0x00, 0x00, 0x00, 0x11, 0x00, 0x13, 0x00, 0x10, 0x00, 0x12,
-+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x0F, 0x00, 0x04, 0x00, 0x00,
- 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
- 0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x03,
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00,
- 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x05, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
-- 0x00, 0x01, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x07,
-- 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x09, 0x00, 0x04, 0x00, 0x00,
-- 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
-+ 0x00, 0x01, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x06,
-+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
- 0x00, 0x01, 0x00, 0x0A, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x0B,
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x0C, 0x00, 0x04, 0x00, 0x00,
- 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x0D, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
-- 0x00, 0x01, 0x00, 0x0E, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x0F,
-- 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00,
-- 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x11, 0x00, 0x16, 0x63, 0x63, 0x6D, 0x70, 0x00, 0x86,
-- 0x63, 0x63, 0x6D, 0x70, 0x00, 0x8E, 0x63, 0x63, 0x6D, 0x70, 0x00, 0x96, 0x63, 0x63, 0x6D, 0x70,
-- 0x00, 0x9E, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xA6, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xAE, 0x63, 0x63,
-- 0x6D, 0x70, 0x00, 0xB6, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xBE, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xC6,
-- 0x63, 0x63, 0x6D, 0x70, 0x00, 0xCE, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xD6, 0x63, 0x63, 0x6D, 0x70,
-- 0x00, 0xDE, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xE6, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xEE, 0x63, 0x63,
-- 0x6D, 0x70, 0x00, 0xF6, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xFE, 0x63, 0x63, 0x6D, 0x70, 0x01, 0x06,
-- 0x63, 0x63, 0x6D, 0x70, 0x01, 0x0E, 0x66, 0x69, 0x6E, 0x61, 0x01, 0x16, 0x69, 0x6E, 0x69, 0x74,
-- 0x01, 0x1C, 0x6C, 0x69, 0x67, 0x61, 0x01, 0x22, 0x6D, 0x65, 0x64, 0x69, 0x01, 0x28, 0x00, 0x00,
-+ 0x00, 0x01, 0x00, 0x0E, 0x00, 0x14, 0x63, 0x63, 0x6D, 0x70, 0x00, 0x7A, 0x63, 0x63, 0x6D, 0x70,
-+ 0x00, 0x82, 0x63, 0x63, 0x6D, 0x70, 0x00, 0x8A, 0x63, 0x63, 0x6D, 0x70, 0x00, 0x92, 0x63, 0x63,
-+ 0x6D, 0x70, 0x00, 0x9A, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xA2, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xAA,
-+ 0x63, 0x63, 0x6D, 0x70, 0x00, 0xB2, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xBA, 0x63, 0x63, 0x6D, 0x70,
-+ 0x00, 0xC2, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xCA, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xD2, 0x63, 0x63,
-+ 0x6D, 0x70, 0x00, 0xDA, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xE2, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xEA,
-+ 0x63, 0x63, 0x6D, 0x70, 0x00, 0xF2, 0x66, 0x69, 0x6E, 0x61, 0x00, 0xFA, 0x69, 0x6E, 0x69, 0x74,
-+ 0x01, 0x00, 0x6C, 0x69, 0x67, 0x61, 0x01, 0x06, 0x6D, 0x65, 0x64, 0x69, 0x01, 0x0C, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x08, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x0B, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x0C, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x00,
-@@ -77,355 +74,349 @@
- 0x00, 0x02, 0x00, 0x18, 0x00, 0x19, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1A, 0x00, 0x1B, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x1C, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1E, 0x00, 0x1F, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x20, 0x00, 0x21, 0x00, 0x00, 0x00, 0x02, 0x00, 0x22, 0x00, 0x23, 0x00, 0x00,
-- 0x00, 0x02, 0x00, 0x24, 0x00, 0x25, 0x00, 0x00, 0x00, 0x02, 0x00, 0x26, 0x00, 0x27, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x05,
-- 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x28, 0x00, 0x52, 0x00, 0xC8, 0x01, 0x2A, 0x01, 0xF4,
-- 0x02, 0xBE, 0x03, 0xF8, 0x15, 0x06, 0x15, 0x58, 0x15, 0x9C, 0x18, 0x4E, 0x1A, 0xC4, 0x1B, 0x70,
-- 0x1B, 0xF0, 0x4F, 0xEA, 0x8E, 0xAE, 0x8F, 0x14, 0x8F, 0x62, 0x91, 0x58, 0x93, 0x26, 0x94, 0x94,
-- 0x95, 0xB4, 0x96, 0x0A, 0x96, 0x66, 0x98, 0x0C, 0x99, 0x54, 0xB9, 0x0C, 0xDC, 0x92, 0xDC, 0xC8,
-- 0xDC, 0xF8, 0xDD, 0x18, 0xDD, 0x34, 0xDD, 0x80, 0xDD, 0xC4, 0xDE, 0x0C, 0xDE, 0x5E, 0xDE, 0xA2,
-- 0xDE, 0xDC, 0xDE, 0xFC, 0xDF, 0x18, 0xE0, 0x36, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08,
-- 0x00, 0x01, 0x00, 0x5E, 0x00, 0x06, 0x00, 0x12, 0x00, 0x2C, 0x00, 0x36, 0x00, 0x40, 0x00, 0x4A,
-- 0x00, 0x54, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x06, 0x22, 0x00, 0x02, 0x06, 0x53,
-- 0x06, 0x23, 0x00, 0x02, 0x06, 0x54, 0x06, 0x25, 0x00, 0x02, 0x06, 0x55, 0x00, 0x01, 0x00, 0x04,
-- 0x06, 0x24, 0x00, 0x02, 0x06, 0x54, 0x00, 0x01, 0x00, 0x04, 0x06, 0x26, 0x00, 0x02, 0x06, 0x54,
-- 0x00, 0x01, 0x00, 0x04, 0x06, 0xC2, 0x00, 0x02, 0x06, 0x54, 0x00, 0x01, 0x00, 0x04, 0x06, 0xD3,
-- 0x00, 0x02, 0x06, 0x54, 0x00, 0x01, 0x00, 0x04, 0x06, 0xC0, 0x00, 0x02, 0x06, 0x54, 0x00, 0x01,
-- 0x00, 0x06, 0x06, 0x27, 0x06, 0x48, 0x06, 0x4A, 0x06, 0xC1, 0x06, 0xD2, 0x06, 0xD5, 0x00, 0x02,
-- 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x46, 0x00, 0x08, 0x00, 0x16, 0x00, 0x1C,
-- 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x00, 0x3A, 0x00, 0x40, 0x00, 0x02, 0x06, 0x27,
-- 0x06, 0x53, 0x00, 0x02, 0x06, 0x27, 0x06, 0x54, 0x00, 0x02, 0x06, 0x48, 0x06, 0x54, 0x00, 0x02,
-- 0x06, 0x27, 0x06, 0x55, 0x00, 0x02, 0x06, 0x4A, 0x06, 0x54, 0x00, 0x02, 0x06, 0xD5, 0x06, 0x54,
-- 0x00, 0x02, 0x06, 0xC1, 0x06, 0x54, 0x00, 0x02, 0x06, 0xD2, 0x06, 0x54, 0x00, 0x01, 0x00, 0x08,
-- 0x06, 0x22, 0x06, 0x23, 0x06, 0x24, 0x06, 0x25, 0x06, 0x26, 0x06, 0xC0, 0x06, 0xC2, 0x06, 0xD3,
-- 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x02, 0x00, 0x62, 0x00, 0x2E, 0xFE, 0x8B,
-- 0xFE, 0x91, 0xFE, 0x97, 0xFE, 0x9B, 0xFE, 0x9F, 0xFE, 0xA3, 0xFE, 0xA7, 0xFE, 0xB3, 0xFE, 0xB7,
-- 0xFE, 0xBB, 0xFE, 0xBF, 0xFE, 0xC3, 0xFE, 0xC7, 0xFE, 0xCB, 0xFE, 0xCF, 0xFE, 0xD3, 0xFE, 0xD7,
-- 0xFE, 0xDB, 0xFE, 0xDF, 0xFE, 0xE3, 0xFE, 0xE7, 0xFE, 0xEB, 0xFB, 0xE8, 0xFE, 0xF3, 0xFB, 0x68,
-- 0xFB, 0x60, 0xFB, 0x54, 0xFB, 0x58, 0xFB, 0x64, 0xFB, 0x5C, 0xFB, 0x78, 0xFB, 0x74, 0xFB, 0x7C,
-- 0xFB, 0x80, 0xFB, 0x6C, 0xFB, 0x70, 0xFB, 0x90, 0xFB, 0xD5, 0xFB, 0x94, 0xFB, 0x9C, 0xFB, 0x98,
-- 0xFB, 0xA2, 0xFB, 0xAC, 0xFB, 0xA8, 0xFB, 0xFE, 0xFB, 0xE6, 0x00, 0x01, 0x00, 0x2E, 0x06, 0x26,
-- 0x06, 0x28, 0x06, 0x2A, 0x06, 0x2B, 0x06, 0x2C, 0x06, 0x2D, 0x06, 0x2E, 0x06, 0x33, 0x06, 0x34,
-- 0x06, 0x35, 0x06, 0x36, 0x06, 0x37, 0x06, 0x38, 0x06, 0x39, 0x06, 0x3A, 0x06, 0x41, 0x06, 0x42,
-- 0x06, 0x43, 0x06, 0x44, 0x06, 0x45, 0x06, 0x46, 0x06, 0x47, 0x06, 0x49, 0x06, 0x4A, 0x06, 0x79,
-- 0x06, 0x7A, 0x06, 0x7B, 0x06, 0x7E, 0x06, 0x7F, 0x06, 0x80, 0x06, 0x83, 0x06, 0x84, 0x06, 0x86,
-- 0x06, 0x87, 0x06, 0xA4, 0x06, 0xA6, 0x06, 0xA9, 0x06, 0xAD, 0x06, 0xAF, 0x06, 0xB1, 0x06, 0xB3,
-- 0x06, 0xBB, 0x06, 0xBE, 0x06, 0xC1, 0x06, 0xCC, 0x06, 0xD0, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
-- 0x00, 0x08, 0x00, 0x02, 0x00, 0x62, 0x00, 0x2E, 0xFE, 0x8C, 0xFE, 0x92, 0xFE, 0x98, 0xFE, 0x9C,
-- 0xFE, 0xA0, 0xFE, 0xA4, 0xFE, 0xA8, 0xFE, 0xB4, 0xFE, 0xB8, 0xFE, 0xBC, 0xFE, 0xC0, 0xFE, 0xC4,
-- 0xFE, 0xC8, 0xFE, 0xCC, 0xFE, 0xD0, 0xFE, 0xD4, 0xFE, 0xD8, 0xFE, 0xDC, 0xFE, 0xE0, 0xFE, 0xE4,
-- 0xFE, 0xE8, 0xFE, 0xEC, 0xFB, 0xE9, 0xFE, 0xF4, 0xFB, 0x69, 0xFB, 0x61, 0xFB, 0x55, 0xFB, 0x59,
-- 0xFB, 0x65, 0xFB, 0x5D, 0xFB, 0x79, 0xFB, 0x75, 0xFB, 0x7D, 0xFB, 0x81, 0xFB, 0x6D, 0xFB, 0x71,
-- 0xFB, 0x91, 0xFB, 0xD6, 0xFB, 0x95, 0xFB, 0x9D, 0xFB, 0x99, 0xFB, 0xA3, 0xFB, 0xAD, 0xFB, 0xA9,
-- 0xFB, 0xFF, 0xFB, 0xE7, 0x00, 0x01, 0x00, 0x2E, 0x06, 0x26, 0x06, 0x28, 0x06, 0x2A, 0x06, 0x2B,
-- 0x06, 0x2C, 0x06, 0x2D, 0x06, 0x2E, 0x06, 0x33, 0x06, 0x34, 0x06, 0x35, 0x06, 0x36, 0x06, 0x37,
-- 0x06, 0x38, 0x06, 0x39, 0x06, 0x3A, 0x06, 0x41, 0x06, 0x42, 0x06, 0x43, 0x06, 0x44, 0x06, 0x45,
-- 0x06, 0x46, 0x06, 0x47, 0x06, 0x49, 0x06, 0x4A, 0x06, 0x79, 0x06, 0x7A, 0x06, 0x7B, 0x06, 0x7E,
-- 0x06, 0x7F, 0x06, 0x80, 0x06, 0x83, 0x06, 0x84, 0x06, 0x86, 0x06, 0x87, 0x06, 0xA4, 0x06, 0xA6,
-- 0x06, 0xA9, 0x06, 0xAD, 0x06, 0xAF, 0x06, 0xB1, 0x06, 0xB3, 0x06, 0xBB, 0x06, 0xBE, 0x06, 0xC1,
-- 0x06, 0xCC, 0x06, 0xD0, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x02, 0x00, 0x9A,
-- 0x00, 0x4A, 0xFE, 0x82, 0xFE, 0x84, 0xFE, 0x86, 0xFE, 0x88, 0xFE, 0x8A, 0xFE, 0x8E, 0xFE, 0x90,
-- 0xFE, 0x94, 0xFE, 0x96, 0xFE, 0x9A, 0xFE, 0x9E, 0xFE, 0xA2, 0xFE, 0xA6, 0xFE, 0xAA, 0xFE, 0xAC,
-- 0xFE, 0xAE, 0xFE, 0xB0, 0xFE, 0xB2, 0xFE, 0xB6, 0xFE, 0xBA, 0xFE, 0xBE, 0xFE, 0xC2, 0xFE, 0xC6,
-- 0xFE, 0xCA, 0xFE, 0xCE, 0xFE, 0xD2, 0xFE, 0xD6, 0xFE, 0xDA, 0xFE, 0xDE, 0xFE, 0xE2, 0xFE, 0xE6,
-- 0xFE, 0xEA, 0xFE, 0xEE, 0xFE, 0xF0, 0xFE, 0xF2, 0xFB, 0x51, 0xFB, 0x67, 0xFB, 0x5F, 0xFB, 0x53,
-- 0xFB, 0x57, 0xFB, 0x63, 0xFB, 0x5B, 0xFB, 0x77, 0xFB, 0x73, 0xFB, 0x7B, 0xFB, 0x7F, 0xFB, 0x89,
-- 0xFB, 0x85, 0xFB, 0x83, 0xFB, 0x87, 0xFB, 0x8D, 0xFB, 0x8B, 0xFB, 0x6B, 0xFB, 0x6F, 0xFB, 0x8F,
-- 0xFB, 0xD4, 0xFB, 0x93, 0xFB, 0x9B, 0xFB, 0x97, 0xFB, 0x9F, 0xFB, 0xA1, 0xFB, 0xAB, 0xFB, 0xA5,
-- 0xFB, 0xA7, 0xFB, 0xE1, 0xFB, 0xDA, 0xFB, 0xD8, 0xFB, 0xDC, 0xFB, 0xE3, 0xFB, 0xDF, 0xFB, 0xFD,
-- 0xFB, 0xE5, 0xFB, 0xAF, 0xFB, 0xB1, 0x00, 0x01, 0x00, 0x4A, 0x06, 0x22, 0x06, 0x23, 0x06, 0x24,
-- 0x06, 0x25, 0x06, 0x26, 0x06, 0x27, 0x06, 0x28, 0x06, 0x29, 0x06, 0x2A, 0x06, 0x2B, 0x06, 0x2C,
-- 0x06, 0x2D, 0x06, 0x2E, 0x06, 0x2F, 0x06, 0x30, 0x06, 0x31, 0x06, 0x32, 0x06, 0x33, 0x06, 0x34,
-- 0x06, 0x35, 0x06, 0x36, 0x06, 0x37, 0x06, 0x38, 0x06, 0x39, 0x06, 0x3A, 0x06, 0x41, 0x06, 0x42,
-- 0x06, 0x43, 0x06, 0x44, 0x06, 0x45, 0x06, 0x46, 0x06, 0x47, 0x06, 0x48, 0x06, 0x49, 0x06, 0x4A,
-- 0x06, 0x71, 0x06, 0x79, 0x06, 0x7A, 0x06, 0x7B, 0x06, 0x7E, 0x06, 0x7F, 0x06, 0x80, 0x06, 0x83,
-- 0x06, 0x84, 0x06, 0x86, 0x06, 0x87, 0x06, 0x88, 0x06, 0x8C, 0x06, 0x8D, 0x06, 0x8E, 0x06, 0x91,
-- 0x06, 0x98, 0x06, 0xA4, 0x06, 0xA6, 0x06, 0xA9, 0x06, 0xAD, 0x06, 0xAF, 0x06, 0xB1, 0x06, 0xB3,
-- 0x06, 0xBA, 0x06, 0xBB, 0x06, 0xBE, 0x06, 0xC0, 0x06, 0xC1, 0x06, 0xC5, 0x06, 0xC6, 0x06, 0xC7,
-- 0x06, 0xC8, 0x06, 0xC9, 0x06, 0xCB, 0x06, 0xCC, 0x06, 0xD0, 0x06, 0xD2, 0x06, 0xD3, 0x00, 0x04,
-- 0x00, 0x08, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x10, 0x98, 0x00, 0x35, 0x00, 0x70, 0x00, 0x7A,
-- 0x01, 0x0C, 0x01, 0x86, 0x01, 0xA8, 0x01, 0xB2, 0x02, 0x0C, 0x02, 0x62, 0x03, 0x02, 0x03, 0x8A,
-- 0x03, 0xB4, 0x03, 0xF6, 0x04, 0x46, 0x04, 0x8A, 0x04, 0xBC, 0x04, 0xEC, 0x05, 0x26, 0x05, 0x38,
-- 0x05, 0x42, 0x05, 0x64, 0x05, 0xF8, 0x06, 0x6C, 0x06, 0xEC, 0x07, 0x80, 0x08, 0x1E, 0x08, 0x56,
-- 0x08, 0xBA, 0x08, 0xF2, 0x09, 0x38, 0x09, 0x66, 0x09, 0x78, 0x09, 0x82, 0x09, 0xD4, 0x0A, 0x0E,
-- 0x0A, 0x40, 0x0A, 0x70, 0x0A, 0xCC, 0x0A, 0xF2, 0x0B, 0x38, 0x0B, 0x68, 0x0B, 0xDC, 0x0C, 0x2A,
-- 0x0C, 0xD6, 0x0D, 0x72, 0x0E, 0x16, 0x0E, 0x50, 0x0E, 0xC8, 0x0F, 0x5A, 0x0F, 0xA8, 0x0F, 0xB6,
-- 0x0F, 0xC0, 0x0F, 0xCA, 0x10, 0x2E, 0x00, 0x01, 0x00, 0x04, 0xFB, 0xDD, 0x00, 0x02, 0x06, 0x74,
-- 0x00, 0x12, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x44, 0x00, 0x4A,
-- 0x00, 0x50, 0x00, 0x56, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x68, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x7A,
-- 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0xFB, 0xEC, 0x00, 0x02, 0x00, 0x01, 0xFB, 0xF0, 0x00, 0x02,
-- 0xFB, 0xD8, 0xFB, 0xF2, 0x00, 0x02, 0xFB, 0xDA, 0xFB, 0xF4, 0x00, 0x02, 0xFB, 0xDC, 0xFB, 0xF6,
-- 0x00, 0x02, 0xFB, 0xE5, 0xFB, 0xF8, 0x00, 0x02, 0xFB, 0xE7, 0xFB, 0xEA, 0x00, 0x02, 0xFE, 0x8E,
-- 0xFC, 0x00, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0x97, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x01, 0x00, 0x02,
-- 0xFE, 0xA2, 0xFC, 0x98, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x99, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x02,
-- 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0x9A, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x9B, 0x00, 0x02, 0xFE, 0xEC,
-- 0xFB, 0xEE, 0x00, 0x02, 0xFE, 0xEE, 0xFB, 0xF9, 0x00, 0x02, 0xFE, 0xF0, 0xFB, 0xFB, 0x00, 0x02,
-- 0xFE, 0xF2, 0x00, 0x0F, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E,
-- 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x56, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x68, 0x00, 0x6E,
-- 0x00, 0x74, 0xFB, 0xED, 0x00, 0x02, 0x00, 0x01, 0xFB, 0xF1, 0x00, 0x02, 0xFB, 0xD8, 0xFB, 0xF3,
-- 0x00, 0x02, 0xFB, 0xDA, 0xFB, 0xF5, 0x00, 0x02, 0xFB, 0xDC, 0xFB, 0xF7, 0x00, 0x02, 0xFB, 0xE5,
-- 0xFB, 0xEB, 0x00, 0x02, 0xFE, 0x8E, 0xFC, 0x64, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x65, 0x00, 0x02,
-- 0xFE, 0xB0, 0xFC, 0x66, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xDF, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x67,
-- 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xE0, 0x00, 0x02, 0xFE, 0xEC, 0xFB, 0xEF, 0x00, 0x02, 0xFE, 0xEE,
-- 0xFB, 0xFA, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x69, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x03, 0x00, 0x08,
-- 0x00, 0x0E, 0x00, 0x18, 0xFD, 0x3D, 0x00, 0x02, 0x06, 0x4B, 0xFD, 0xF3, 0x00, 0x04, 0xFE, 0xDB,
-- 0xFE, 0x92, 0xFE, 0xAE, 0xFD, 0xF2, 0x00, 0x04, 0xFE, 0xDF, 0xFE, 0xE0, 0xFE, 0xEA, 0x00, 0x01,
-- 0x00, 0x04, 0xFD, 0x3C, 0x00, 0x02, 0x06, 0x4B, 0x00, 0x0B, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24,
-- 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54,
-- 0xFC, 0x05, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0x9C, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x06, 0x00, 0x02,
-- 0xFE, 0xA2, 0xFC, 0x9D, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x07, 0x00, 0x02, 0xFE, 0xA6, 0xFC, 0x9E,
-- 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x08, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0x9F, 0x00, 0x02, 0xFE, 0xE4,
-- 0xFC, 0xA0, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x09, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x0A, 0x00, 0x02,
-- 0xFE, 0xF2, 0x00, 0x0A, 0x00, 0x16, 0x00, 0x1E, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38,
-- 0x00, 0x3E, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0xFD, 0xC2, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2,
-- 0xFD, 0x9E, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF2, 0xFC, 0x6A, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x6B,
-- 0x00, 0x02, 0xFE, 0xB0, 0xFC, 0x6C, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xE1, 0x00, 0x02, 0xFE, 0xE4,
-- 0xFC, 0x6D, 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xE2, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x6E, 0x00, 0x02,
-- 0xFE, 0xF0, 0xFC, 0x6F, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x12, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x34,
-- 0x00, 0x3A, 0x00, 0x40, 0x00, 0x48, 0x00, 0x50, 0x00, 0x56, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6A,
-- 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x8E, 0x00, 0x94, 0x00, 0x9A, 0xFC, 0x0B,
-- 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0x50, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE4, 0xFC, 0xA1, 0x00, 0x02,
-- 0xFE, 0xA0, 0xFC, 0x0C, 0x00, 0x02, 0xFE, 0xA2, 0xFD, 0x52, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xA0,
-- 0xFD, 0x53, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE4, 0xFC, 0xA2, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x0D,
-- 0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x54, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xA3, 0x00, 0x02,
-- 0xFE, 0xA8, 0xFC, 0x0E, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x55, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA0,
-- 0xFD, 0x56, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA4, 0xFD, 0x57, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA8,
-- 0xFC, 0xA4, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xA5, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x0F, 0x00, 0x02,
-- 0xFE, 0xF0, 0xFC, 0x10, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0F, 0x00, 0x20, 0x00, 0x28, 0x00, 0x30,
-- 0x00, 0x38, 0x00, 0x40, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A,
-- 0x00, 0x70, 0x00, 0x76, 0x00, 0x7C, 0x00, 0x82, 0xFD, 0xA0, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF0,
-- 0xFD, 0x9F, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0x51, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0x9E,
-- 0xFD, 0xA2, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF0, 0xFD, 0xA1, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF2,
-- 0xFC, 0x70, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x71, 0x00, 0x02, 0xFE, 0xB0, 0xFC, 0x72, 0x00, 0x02,
-- 0xFE, 0xE2, 0xFD, 0xA4, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF0, 0xFD, 0xA3, 0x00, 0x03, 0xFE, 0xE4,
-- 0xFE, 0xF2, 0xFC, 0xE3, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x73, 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xE4,
-- 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x74, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x75, 0x00, 0x02, 0xFE, 0xF2,
-- 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0xFC, 0x11, 0x00, 0x02,
-- 0xFE, 0x9E, 0xFC, 0x12, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xA6, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x13,
-- 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x14, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18,
-- 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0xFC, 0x76, 0x00, 0x02,
-- 0xFE, 0xAE, 0xFC, 0x77, 0x00, 0x02, 0xFE, 0xB0, 0xFC, 0x78, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xE5,
-- 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x79, 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xE6, 0x00, 0x02, 0xFE, 0xEC,
-- 0xFC, 0x7A, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x7B, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x08, 0x00, 0x12,
-- 0x00, 0x18, 0x00, 0x1E, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3E, 0x00, 0x44, 0x00, 0x4A, 0xFC, 0x15,
-- 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xA7, 0x00, 0x02, 0xFE, 0xA4, 0xFD, 0xFB, 0x00, 0x08, 0xFE, 0xDE,
-- 0x00, 0x20, 0xFE, 0x9F, 0xFE, 0xE0, 0xFE, 0x8E, 0xFE, 0xDF, 0xFE, 0xEA, 0xFC, 0x16, 0x00, 0x02,
-- 0xFE, 0xE2, 0xFD, 0x59, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA4, 0xFC, 0xA8, 0x00, 0x02, 0xFE, 0xE4,
-- 0xFD, 0x01, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x02, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x07, 0x00, 0x10,
-- 0x00, 0x18, 0x00, 0x20, 0x00, 0x28, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0xFD, 0xA6, 0x00, 0x03,
-- 0xFE, 0xA4, 0xFE, 0xF0, 0xFD, 0xBE, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0x58, 0x00, 0x03,
-- 0xFE, 0xE4, 0xFE, 0xA2, 0xFD, 0xA7, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF0, 0xFD, 0xA5, 0x00, 0x03,
-- 0xFE, 0xE4, 0xFE, 0xF2, 0xFD, 0x1D, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x1E, 0x00, 0x02, 0xFE, 0xF2,
-- 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0xFC, 0x17,
-- 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xA9, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x18, 0x00, 0x02, 0xFE, 0xE2,
-- 0xFC, 0xAA, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xFF, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x00, 0x00, 0x02,
-- 0xFE, 0xF2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x14, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0xFD, 0xBF,
-- 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0x5B, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF0, 0xFD, 0x5A,
-- 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFD, 0x1B, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x1C, 0x00, 0x02,
-- 0xFE, 0xF2, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E,
-- 0x00, 0x34, 0xFC, 0x19, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xAB, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x1A,
-- 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0x1B, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xAC, 0x00, 0x02, 0xFE, 0xE4,
-- 0xFD, 0x03, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x04, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x02, 0x00, 0x06,
-- 0x00, 0x0C, 0xFD, 0x1F, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x20, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x01,
-- 0x00, 0x04, 0xFC, 0x5B, 0x00, 0x02, 0x06, 0x70, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x18,
-- 0xFC, 0x5C, 0x00, 0x02, 0x06, 0x70, 0xFD, 0xFC, 0x00, 0x04, 0xFB, 0xFE, 0xFE, 0x8E, 0xFE, 0xDD,
-- 0xFD, 0xF6, 0x00, 0x04, 0xFE, 0xB3, 0xFE, 0xEE, 0xFE, 0xDD, 0x00, 0x11, 0x00, 0x24, 0x00, 0x2A,
-- 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x00, 0x5E,
-- 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7C, 0x00, 0x82, 0x00, 0x88, 0x00, 0x8E, 0xFC, 0x1C,
-- 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0x5D, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xA4, 0xFC, 0xAD, 0x00, 0x02,
-- 0xFE, 0xA0, 0xFC, 0x1D, 0x00, 0x02, 0xFE, 0xA2, 0xFD, 0x5C, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xA0,
-- 0xFC, 0xAE, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x1E, 0x00, 0x02, 0xFE, 0xA6, 0xFC, 0xAF, 0x00, 0x02,
-- 0xFE, 0xA8, 0xFD, 0x0E, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x1F, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x61,
-- 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA0, 0xFD, 0x60, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA4, 0xFD, 0x63,
-- 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xB0, 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x31, 0x00, 0x02,
-- 0xFE, 0xEC, 0xFC, 0xFB, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0xFC, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0D,
-- 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C,
-- 0x00, 0x54, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x68, 0x00, 0x6E, 0xFD, 0x5E, 0x00, 0x03, 0xFE, 0xA0,
-- 0xFE, 0xF0, 0xFD, 0x34, 0x00, 0x02, 0xFE, 0xA0, 0xFD, 0x35, 0x00, 0x02, 0xFE, 0xA4, 0xFD, 0xA8,
-- 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF0, 0xFD, 0xC6, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF2, 0xFD, 0x36,
-- 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x2A, 0x00, 0x02, 0xFE, 0xAE, 0xFD, 0x5F, 0x00, 0x03, 0xFE, 0xE4,
-- 0xFE, 0xA2, 0xFD, 0x62, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2, 0xFC, 0xE7, 0x00, 0x02, 0xFE, 0xE4,
-- 0xFC, 0xE8, 0x00, 0x02, 0xFE, 0xEC, 0xFD, 0x17, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x18, 0x00, 0x02,
-- 0xFE, 0xF2, 0x00, 0x0F, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32, 0x00, 0x3A, 0x00, 0x40,
-- 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x00, 0x60, 0x00, 0x68, 0x00, 0x6E, 0x00, 0x74,
-- 0x00, 0x7A, 0xFD, 0x09, 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0x2D, 0x00, 0x02, 0xFE, 0xA0, 0xFD, 0x0A,
-- 0x00, 0x02, 0xFE, 0xA2, 0xFD, 0x68, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE4, 0xFD, 0x2E, 0x00, 0x02,
-- 0xFE, 0xA4, 0xFD, 0x0B, 0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x2F, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x0D,
-- 0x00, 0x02, 0xFE, 0xAE, 0xFD, 0x0C, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x6B, 0x00, 0x03, 0xFE, 0xE4,
-- 0xFE, 0xA8, 0xFD, 0x6D, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE4, 0xFD, 0x30, 0x00, 0x02, 0xFE, 0xE4,
-- 0xFD, 0x32, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0xFD, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0xFE, 0x00, 0x02,
-- 0xFE, 0xF2, 0x00, 0x11, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46,
-- 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x60, 0x00, 0x66, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7C,
-- 0x00, 0x82, 0x00, 0x88, 0x00, 0x8E, 0xFD, 0x25, 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0x69, 0x00, 0x03,
-- 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0x37, 0x00, 0x02, 0xFE, 0xA0, 0xFD, 0x26, 0x00, 0x02, 0xFE, 0xA2,
-- 0xFD, 0x67, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE2, 0xFD, 0xAA, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2,
-- 0xFD, 0x38, 0x00, 0x02, 0xFE, 0xA4, 0xFD, 0x27, 0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x39, 0x00, 0x02,
-- 0xFE, 0xA8, 0xFD, 0x29, 0x00, 0x02, 0xFE, 0xAE, 0xFD, 0x28, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x6A,
-- 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA6, 0xFD, 0x6C, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2, 0xFC, 0xE9,
-- 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xEA, 0x00, 0x02, 0xFE, 0xEC, 0xFD, 0x19, 0x00, 0x02, 0xFE, 0xF0,
-- 0xFD, 0x1A, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0E, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2C, 0x00, 0x32,
-- 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x50, 0x00, 0x76, 0x00, 0x7E, 0x00, 0x84, 0x00, 0x8C,
-- 0x00, 0x92, 0x00, 0x98, 0xFC, 0x20, 0x00, 0x02, 0xFE, 0xA2, 0xFD, 0x65, 0x00, 0x03, 0xFE, 0xA4,
-- 0xFE, 0xA4, 0xFC, 0xB1, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0xB2, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x0F,
-- 0x00, 0x02, 0xFE, 0xAE, 0xFD, 0xF0, 0x00, 0x03, 0xFE, 0xE0, 0xFB, 0xAF, 0xFD, 0xF5, 0x00, 0x04,
-- 0xFE, 0xE0, 0xFE, 0xCC, 0xFE, 0xE2, 0xFD, 0xFA, 0x00, 0x12, 0xFE, 0xE0, 0xFE, 0xF0, 0x00, 0x20,
-- 0xFE, 0x8D, 0xFE, 0xDF, 0xFE, 0xE0, 0xFE, 0xEA, 0x00, 0x20, 0xFE, 0xCB, 0xFE, 0xE0, 0xFE, 0xF4,
-- 0xFE, 0xEA, 0x00, 0x20, 0xFE, 0xED, 0xFE, 0xB3, 0xFE, 0xE0, 0xFE, 0xE2, 0xFD, 0xF9, 0x00, 0x03,
-- 0xFE, 0xE0, 0xFE, 0xF0, 0xFC, 0x21, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0xC5, 0x00, 0x03, 0xFE, 0xE4,
-- 0xFE, 0xE4, 0xFC, 0xB3, 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x05, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x06,
-- 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x16, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2C,
-- 0x00, 0x32, 0xFD, 0x64, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xA2, 0xFD, 0xA9, 0x00, 0x03, 0xFE, 0xA4,
-- 0xFE, 0xF2, 0xFD, 0x2B, 0x00, 0x02, 0xFE, 0xAE, 0xFD, 0x66, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2,
-- 0xFD, 0x21, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x22, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0C, 0x00, 0x1A,
-- 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C,
-- 0x00, 0x52, 0x00, 0x58, 0x00, 0x5E, 0xFC, 0x22, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xB4, 0x00, 0x02,
-- 0xFE, 0xA0, 0xFC, 0x23, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xB5, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x24,
-- 0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x70, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xB6, 0x00, 0x02,
-- 0xFE, 0xA8, 0xFD, 0x10, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x25, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xB7,
-- 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x07, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x08, 0x00, 0x02, 0xFE, 0xF2,
-- 0x00, 0x06, 0x00, 0x0E, 0x00, 0x16, 0x00, 0x1E, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32, 0xFD, 0x6E,
-- 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF0, 0xFD, 0xAB, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0x6F,
-- 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE2, 0xFD, 0x2C, 0x00, 0x02, 0xFE, 0xAE, 0xFD, 0x23, 0x00, 0x02,
-- 0xFE, 0xF0, 0xFD, 0x24, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
-- 0x00, 0x24, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3A, 0x00, 0x40, 0xFC, 0x26, 0x00, 0x02, 0xFE, 0xA2,
-- 0xFC, 0xB8, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x27, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x72, 0x00, 0x03,
-- 0xFE, 0xE4, 0xFE, 0xA4, 0xFD, 0x73, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE4, 0xFD, 0x33, 0x00, 0x02,
-- 0xFE, 0xE4, 0xFC, 0xF5, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0xF6, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x05,
-- 0x00, 0x0C, 0x00, 0x14, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0xFD, 0x71, 0x00, 0x03, 0xFE, 0xE4,
-- 0xFE, 0xA2, 0xFD, 0x74, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFD, 0x3A, 0x00, 0x02, 0xFE, 0xE4,
-- 0xFD, 0x11, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x12, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x02, 0x00, 0x06,
-- 0x00, 0x0C, 0xFC, 0x28, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xB9, 0x00, 0x02, 0xFE, 0xE4, 0x00, 0x01,
-- 0x00, 0x04, 0xFD, 0x3B, 0x00, 0x02, 0xFE, 0xE4, 0x00, 0x09, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x22,
-- 0x00, 0x28, 0x00, 0x32, 0x00, 0x38, 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0xFC, 0x29, 0x00, 0x02,
-- 0xFE, 0x9E, 0xFD, 0xC4, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE4, 0xFC, 0xBA, 0x00, 0x02, 0xFE, 0xA0,
-- 0xFD, 0xF7, 0x00, 0x04, 0xFE, 0xE0, 0xFE, 0xF4, 0xFE, 0xEA, 0xFC, 0x2A, 0x00, 0x02, 0xFE, 0xE2,
-- 0xFD, 0x77, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xBB, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xF7,
-- 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0xF8, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x16,
-- 0x00, 0x1E, 0x00, 0x26, 0x00, 0x2E, 0x00, 0x34, 0xFD, 0x75, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE2,
-- 0xFD, 0x76, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2, 0xFD, 0x78, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF0,
-- 0xFD, 0xB6, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFD, 0x13, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x14,
-- 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26,
-- 0x00, 0x2C, 0xFC, 0x2B, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xBC, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x2C,
-- 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xBD, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xF9, 0x00, 0x02, 0xFE, 0xF0,
-- 0xFC, 0xFA, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x14, 0x00, 0x1C, 0x00, 0x24,
-- 0x00, 0x2A, 0xFD, 0x79, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2, 0xFD, 0x7B, 0x00, 0x03, 0xFE, 0xE4,
-- 0xFE, 0xF0, 0xFD, 0x7A, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFD, 0x15, 0x00, 0x02, 0xFE, 0xF0,
-- 0xFD, 0x16, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0B, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A,
-- 0x00, 0x30, 0x00, 0x36, 0x00, 0x3E, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x56, 0xFC, 0x2D,
-- 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xBE, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x2E, 0x00, 0x02, 0xFE, 0xA2,
-- 0xFC, 0xBF, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x2F, 0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x7D, 0x00, 0x03,
-- 0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xC0, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x30, 0x00, 0x02, 0xFE, 0xE2,
-- 0xFC, 0xC1, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x31, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x32, 0x00, 0x02,
-- 0xFE, 0xF2, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x12, 0x00, 0x1A, 0x00, 0x20, 0xFD, 0x7C, 0x00, 0x03,
-- 0xFE, 0xA8, 0xFE, 0xE2, 0xFD, 0xC1, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0x7C, 0x00, 0x02,
-- 0xFE, 0xF0, 0xFC, 0x7D, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
-- 0x00, 0x26, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3A, 0x00, 0x40, 0xFC, 0x33, 0x00, 0x02, 0xFE, 0xA2,
-- 0xFC, 0xC2, 0x00, 0x02, 0xFE, 0xA4, 0xFD, 0xF1, 0x00, 0x03, 0xFE, 0xE0, 0xFB, 0xAF, 0xFC, 0x34,
-- 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0xB4, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA4, 0xFC, 0xC3, 0x00, 0x02,
-- 0xFE, 0xE4, 0xFC, 0x35, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x36, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x05,
-- 0x00, 0x0C, 0x00, 0x14, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0xFD, 0x7E, 0x00, 0x03, 0xFE, 0xE4,
-- 0xFE, 0xA2, 0xFD, 0x7F, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2, 0xFD, 0xB2, 0x00, 0x03, 0xFE, 0xE4,
-- 0xFE, 0xF2, 0xFC, 0x7E, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x7F, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0E,
-- 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48,
-- 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68, 0x00, 0x6E, 0xFC, 0x37, 0x00, 0x02,
-- 0xFE, 0x8E, 0xFC, 0x38, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xC4, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x39,
-- 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xC5, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x3A, 0x00, 0x02, 0xFE, 0xA6,
-- 0xFC, 0xC6, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x3B, 0x00, 0x02, 0xFE, 0xDE, 0xFC, 0xC7, 0x00, 0x02,
-- 0xFE, 0xE0, 0xFC, 0x3C, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0xC3, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE4,
-- 0xFC, 0xC8, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x3D, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x3E, 0x00, 0x02,
-- 0xFE, 0xF2, 0x00, 0x09, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x34,
-- 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0xFC, 0x80, 0x00, 0x02, 0xFE, 0x8E, 0xFC, 0x81, 0x00, 0x02,
-- 0xFE, 0xDE, 0xFC, 0xEB, 0x00, 0x02, 0xFE, 0xE0, 0xFC, 0x82, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0xBB,
-- 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2, 0xFD, 0xB7, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0xEC,
-- 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x83, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x84, 0x00, 0x02, 0xFE, 0xF2,
-- 0x00, 0x14, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0x00, 0x50,
-- 0x00, 0x58, 0x00, 0x5E, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x72, 0x00, 0x78, 0x00, 0x80, 0x00, 0x86,
-- 0x00, 0x8C, 0x00, 0x94, 0x00, 0x9A, 0x00, 0xA0, 0x00, 0xA6, 0xFE, 0xF5, 0x00, 0x02, 0xFE, 0x82,
-- 0xFE, 0xF7, 0x00, 0x02, 0xFE, 0x84, 0xFE, 0xF9, 0x00, 0x02, 0xFE, 0x88, 0xFE, 0xFB, 0x00, 0x02,
-- 0xFE, 0x8E, 0xFC, 0x3F, 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0x83, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xA0,
-- 0xFD, 0xBA, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE4, 0xFC, 0xC9, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x40,
-- 0x00, 0x02, 0xFE, 0xA2, 0xFD, 0xB5, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE4, 0xFC, 0xCA, 0x00, 0x02,
-- 0xFE, 0xA4, 0xFC, 0x41, 0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x86, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE4,
-- 0xFC, 0xCB, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x42, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x88, 0x00, 0x03,
-- 0xFE, 0xE4, 0xFE, 0xA4, 0xFC, 0xCC, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xCD, 0x00, 0x02, 0xFE, 0xEC,
-- 0xFC, 0x43, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x44, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x11, 0x00, 0x24,
-- 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C,
-- 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7A, 0x00, 0x82, 0x00, 0x8A, 0x00, 0x90, 0x00, 0x96,
-- 0xFE, 0xF6, 0x00, 0x02, 0xFE, 0x82, 0xFE, 0xF8, 0x00, 0x02, 0xFE, 0x84, 0xFE, 0xFA, 0x00, 0x02,
-- 0xFE, 0x88, 0xFE, 0xFC, 0x00, 0x02, 0xFE, 0x8E, 0xFD, 0x84, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0x9E,
-- 0xFD, 0xBC, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE2, 0xFD, 0xAC, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2,
-- 0xFD, 0x80, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE2, 0xFD, 0x82, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF0,
-- 0xFD, 0x81, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0x85, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE2,
-- 0xFC, 0x85, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x87, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA2, 0xFD, 0xAD,
-- 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0xED, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x86, 0x00, 0x02,
-- 0xFE, 0xF0, 0xFC, 0x87, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x12, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x34,
-- 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x58, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x70,
-- 0x00, 0x76, 0x00, 0x7E, 0x00, 0x86, 0x00, 0x8C, 0x00, 0x92, 0x00, 0x98, 0x00, 0x9E, 0xFC, 0x45,
-- 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0x8C, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xA4, 0xFD, 0x92, 0x00, 0x03,
-- 0xFE, 0xA0, 0xFE, 0xA8, 0xFD, 0x8D, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE4, 0xFC, 0xCE, 0x00, 0x02,
-- 0xFE, 0xA0, 0xFC, 0x46, 0x00, 0x02, 0xFE, 0xA2, 0xFD, 0x89, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xA0,
-- 0xFD, 0xF4, 0x00, 0x04, 0xFE, 0xA4, 0xFE, 0xE4, 0xFE, 0xAA, 0xFD, 0x8A, 0x00, 0x03, 0xFE, 0xA4,
-- 0xFE, 0xE4, 0xFC, 0xCF, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x47, 0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x8E,
-- 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xA0, 0xFD, 0x8F, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xD0,
-- 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x48, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xD1, 0x00, 0x02, 0xFE, 0xE4,
-- 0xFC, 0x49, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x4A, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E,
-- 0x00, 0x14, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2C, 0x00, 0x32, 0xFC, 0x88, 0x00, 0x02, 0xFE, 0x8E,
-- 0xFD, 0xC0, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0x8B, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2,
-- 0xFD, 0xB9, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF2, 0xFC, 0x89, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0xB1,
-- 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0x00, 0x0E, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2C, 0x00, 0x34,
-- 0x00, 0x3A, 0x00, 0x40, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x60, 0x00, 0x66,
-- 0x00, 0x6C, 0x00, 0x72, 0xFC, 0x4B, 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0xB8, 0x00, 0x03, 0xFE, 0xA0,
-- 0xFE, 0xA4, 0xFD, 0x98, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE4, 0xFC, 0xD2, 0x00, 0x02, 0xFE, 0xA0,
-- 0xFC, 0x4C, 0x00, 0x02, 0xFE, 0xA2, 0xFD, 0x95, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE4, 0xFC, 0xD3,
-- 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x4D, 0x00, 0x02, 0xFE, 0xA6, 0xFC, 0xD4, 0x00, 0x02, 0xFE, 0xA8,
-- 0xFC, 0x4E, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xD5, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xD6, 0x00, 0x02,
-- 0xFE, 0xEC, 0xFC, 0x4F, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x50, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x10,
-- 0x00, 0x22, 0x00, 0x2A, 0x00, 0x32, 0x00, 0x3A, 0x00, 0x42, 0x00, 0x4A, 0x00, 0x52, 0x00, 0x58,
-- 0x00, 0x5E, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C,
-- 0xFD, 0xBD, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xA2, 0xFD, 0x97, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE2,
-- 0xFD, 0x99, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF0, 0xFD, 0xC7, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2,
-- 0xFD, 0x96, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF0, 0xFD, 0xB3, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2,
-- 0xFC, 0x8A, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x8B, 0x00, 0x02, 0xFE, 0xB0, 0xFC, 0x8C, 0x00, 0x02,
-- 0xFE, 0xE2, 0xFD, 0x9B, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF0, 0xFD, 0x9A, 0x00, 0x03, 0xFE, 0xE4,
-- 0xFE, 0xF2, 0xFC, 0xEE, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x8D, 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xEF,
-- 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x8E, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x8F, 0x00, 0x02, 0xFE, 0xF2,
-- 0x00, 0x09, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3C,
-- 0x00, 0x42, 0x00, 0x48, 0xFC, 0xD9, 0x00, 0x02, 0x06, 0x70, 0xFC, 0x51, 0x00, 0x02, 0xFE, 0x9E,
-- 0xFC, 0xD7, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x52, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x93, 0x00, 0x03,
-- 0xFE, 0xE4, 0xFE, 0xA0, 0xFD, 0x94, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xD8, 0x00, 0x02,
-- 0xFE, 0xE4, 0xFC, 0x53, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x54, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x01,
-- 0x00, 0x04, 0xFD, 0xF8, 0x00, 0x04, 0xFE, 0xB3, 0xFE, 0xE0, 0xFE, 0xE2, 0x00, 0x01, 0x00, 0x04,
-- 0xFC, 0x5D, 0x00, 0x02, 0x06, 0x70, 0x00, 0x01, 0x00, 0x04, 0xFC, 0x90, 0x00, 0x02, 0x06, 0x70,
-- 0x00, 0x0C, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E,
-- 0x00, 0x44, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x00, 0x5E, 0xFC, 0x55, 0x00, 0x02, 0xFE, 0x9E,
-- 0xFC, 0xDA, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x56, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xDB, 0x00, 0x02,
-- 0xFE, 0xA4, 0xFC, 0x57, 0x00, 0x02, 0xFE, 0xA6, 0xFC, 0xDC, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x58,
-- 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x9D, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xDD, 0x00, 0x02,
-- 0xFE, 0xE4, 0xFC, 0xDE, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x59, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x5A,
-- 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0C, 0x00, 0x1A, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36,
-- 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x00, 0x5E, 0x00, 0x64, 0xFD, 0xAF,
-- 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0xAE, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFC, 0x91,
-- 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x92, 0x00, 0x02, 0xFE, 0xB0, 0xFC, 0x93, 0x00, 0x02, 0xFE, 0xE2,
-- 0xFD, 0x9C, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2, 0xFD, 0xB0, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2,
-- 0xFC, 0xF0, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x94, 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xF1, 0x00, 0x02,
-- 0xFE, 0xEC, 0xFC, 0x95, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x96, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x01,
-- 0x00, 0x35, 0xFB, 0xD7, 0xFE, 0x8B, 0xFE, 0x8C, 0xFE, 0x8D, 0xFE, 0x8E, 0xFE, 0x91, 0xFE, 0x92,
-- 0xFE, 0x97, 0xFE, 0x98, 0xFE, 0x9B, 0xFE, 0x9C, 0xFE, 0x9F, 0xFE, 0xA0, 0xFE, 0xA3, 0xFE, 0xA4,
-- 0xFE, 0xA7, 0xFE, 0xA8, 0xFE, 0xAB, 0xFE, 0xAD, 0xFE, 0xB3, 0xFE, 0xB4, 0xFE, 0xB7, 0xFE, 0xB8,
-- 0xFE, 0xBB, 0xFE, 0xBC, 0xFE, 0xBF, 0xFE, 0xC0, 0xFE, 0xC3, 0xFE, 0xC4, 0xFE, 0xC7, 0xFE, 0xC8,
-- 0xFE, 0xCB, 0xFE, 0xCC, 0xFE, 0xCF, 0xFE, 0xD0, 0xFE, 0xD3, 0xFE, 0xD4, 0xFE, 0xD7, 0xFE, 0xD8,
-- 0xFE, 0xDB, 0xFE, 0xDC, 0xFE, 0xDF, 0xFE, 0xE0, 0xFE, 0xE3, 0xFE, 0xE4, 0xFE, 0xE7, 0xFE, 0xE8,
-- 0xFE, 0xEB, 0xFE, 0xED, 0xFE, 0xEF, 0xFE, 0xF0, 0xFE, 0xF3, 0xFE, 0xF4, 0x00, 0x04, 0x00, 0x00,
-- 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x3E, 0x00, 0x04, 0x00, 0x0E, 0x00, 0x18, 0x00, 0x22,
-- 0x00, 0x2C, 0x00, 0x01, 0x00, 0x04, 0x09, 0xDC, 0x00, 0x02, 0x09, 0xBC, 0x00, 0x01, 0x00, 0x04,
-- 0x09, 0xDD, 0x00, 0x02, 0x09, 0xBC, 0x00, 0x01, 0x00, 0x04, 0x09, 0xDF, 0x00, 0x02, 0x09, 0xBC,
-- 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x09, 0xCB, 0x00, 0x02, 0x09, 0xBE, 0x09, 0xCC, 0x00, 0x02,
-- 0x09, 0xD7, 0x00, 0x01, 0x00, 0x04, 0x09, 0xA1, 0x09, 0xA2, 0x09, 0xAF, 0x09, 0xC7, 0x00, 0x02,
-- 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x2E, 0x00, 0x05, 0x00, 0x10, 0x00, 0x16,
-- 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x02, 0x09, 0xC7, 0x09, 0xBE, 0x00, 0x02, 0x09, 0xC7,
-- 0x09, 0xD7, 0x00, 0x02, 0x09, 0xA1, 0x09, 0xBC, 0x00, 0x02, 0x09, 0xA2, 0x09, 0xBC, 0x00, 0x02,
-- 0x09, 0xAF, 0x09, 0xBC, 0x00, 0x01, 0x00, 0x05, 0x09, 0xCB, 0x09, 0xCC, 0x09, 0xDC, 0x09, 0xDD,
-- 0x09, 0xDF, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x02, 0x66, 0x00, 0x20,
-+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x24, 0x00, 0x4A, 0x00, 0xC0, 0x01, 0x22, 0x01, 0xEC,
-+ 0x02, 0xB6, 0x03, 0xF0, 0x14, 0xFE, 0x15, 0x26, 0x15, 0x4C, 0x17, 0xFE, 0x1A, 0x74, 0x1A, 0xB0,
-+ 0x1A, 0xE0, 0x4E, 0xDA, 0x8B, 0xBC, 0x8D, 0x2A, 0x8E, 0x4A, 0x8E, 0xA0, 0x8E, 0xFC, 0x90, 0xA2,
-+ 0x91, 0xEA, 0xB1, 0xA2, 0xD5, 0x1E, 0xD5, 0x54, 0xD5, 0x84, 0xD5, 0xA4, 0xD5, 0xC0, 0xD5, 0xF0,
-+ 0xD6, 0x20, 0xD6, 0x68, 0xD6, 0xBA, 0xD6, 0xFE, 0xD7, 0x38, 0xD7, 0x58, 0xD7, 0x74, 0xD8, 0x20,
-+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x5E, 0x00, 0x06, 0x00, 0x12,
-+ 0x00, 0x2C, 0x00, 0x36, 0x00, 0x40, 0x00, 0x4A, 0x00, 0x54, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E,
-+ 0x00, 0x14, 0x06, 0x22, 0x00, 0x02, 0x06, 0x53, 0x06, 0x23, 0x00, 0x02, 0x06, 0x54, 0x06, 0x25,
-+ 0x00, 0x02, 0x06, 0x55, 0x00, 0x01, 0x00, 0x04, 0x06, 0x24, 0x00, 0x02, 0x06, 0x54, 0x00, 0x01,
-+ 0x00, 0x04, 0x06, 0x26, 0x00, 0x02, 0x06, 0x54, 0x00, 0x01, 0x00, 0x04, 0x06, 0xC2, 0x00, 0x02,
-+ 0x06, 0x54, 0x00, 0x01, 0x00, 0x04, 0x06, 0xD3, 0x00, 0x02, 0x06, 0x54, 0x00, 0x01, 0x00, 0x04,
-+ 0x06, 0xC0, 0x00, 0x02, 0x06, 0x54, 0x00, 0x01, 0x00, 0x06, 0x06, 0x27, 0x06, 0x48, 0x06, 0x4A,
-+ 0x06, 0xC1, 0x06, 0xD2, 0x06, 0xD5, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-+ 0x00, 0x46, 0x00, 0x08, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34,
-+ 0x00, 0x3A, 0x00, 0x40, 0x00, 0x02, 0x06, 0x27, 0x06, 0x53, 0x00, 0x02, 0x06, 0x27, 0x06, 0x54,
-+ 0x00, 0x02, 0x06, 0x48, 0x06, 0x54, 0x00, 0x02, 0x06, 0x27, 0x06, 0x55, 0x00, 0x02, 0x06, 0x4A,
-+ 0x06, 0x54, 0x00, 0x02, 0x06, 0xD5, 0x06, 0x54, 0x00, 0x02, 0x06, 0xC1, 0x06, 0x54, 0x00, 0x02,
-+ 0x06, 0xD2, 0x06, 0x54, 0x00, 0x01, 0x00, 0x08, 0x06, 0x22, 0x06, 0x23, 0x06, 0x24, 0x06, 0x25,
-+ 0x06, 0x26, 0x06, 0xC0, 0x06, 0xC2, 0x06, 0xD3, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08,
-+ 0x00, 0x02, 0x00, 0x62, 0x00, 0x2E, 0xFE, 0x8B, 0xFE, 0x91, 0xFE, 0x97, 0xFE, 0x9B, 0xFE, 0x9F,
-+ 0xFE, 0xA3, 0xFE, 0xA7, 0xFE, 0xB3, 0xFE, 0xB7, 0xFE, 0xBB, 0xFE, 0xBF, 0xFE, 0xC3, 0xFE, 0xC7,
-+ 0xFE, 0xCB, 0xFE, 0xCF, 0xFE, 0xD3, 0xFE, 0xD7, 0xFE, 0xDB, 0xFE, 0xDF, 0xFE, 0xE3, 0xFE, 0xE7,
-+ 0xFE, 0xEB, 0xFB, 0xE8, 0xFE, 0xF3, 0xFB, 0x68, 0xFB, 0x60, 0xFB, 0x54, 0xFB, 0x58, 0xFB, 0x64,
-+ 0xFB, 0x5C, 0xFB, 0x78, 0xFB, 0x74, 0xFB, 0x7C, 0xFB, 0x80, 0xFB, 0x6C, 0xFB, 0x70, 0xFB, 0x90,
-+ 0xFB, 0xD5, 0xFB, 0x94, 0xFB, 0x9C, 0xFB, 0x98, 0xFB, 0xA2, 0xFB, 0xAC, 0xFB, 0xA8, 0xFB, 0xFE,
-+ 0xFB, 0xE6, 0x00, 0x01, 0x00, 0x2E, 0x06, 0x26, 0x06, 0x28, 0x06, 0x2A, 0x06, 0x2B, 0x06, 0x2C,
-+ 0x06, 0x2D, 0x06, 0x2E, 0x06, 0x33, 0x06, 0x34, 0x06, 0x35, 0x06, 0x36, 0x06, 0x37, 0x06, 0x38,
-+ 0x06, 0x39, 0x06, 0x3A, 0x06, 0x41, 0x06, 0x42, 0x06, 0x43, 0x06, 0x44, 0x06, 0x45, 0x06, 0x46,
-+ 0x06, 0x47, 0x06, 0x49, 0x06, 0x4A, 0x06, 0x79, 0x06, 0x7A, 0x06, 0x7B, 0x06, 0x7E, 0x06, 0x7F,
-+ 0x06, 0x80, 0x06, 0x83, 0x06, 0x84, 0x06, 0x86, 0x06, 0x87, 0x06, 0xA4, 0x06, 0xA6, 0x06, 0xA9,
-+ 0x06, 0xAD, 0x06, 0xAF, 0x06, 0xB1, 0x06, 0xB3, 0x06, 0xBB, 0x06, 0xBE, 0x06, 0xC1, 0x06, 0xCC,
-+ 0x06, 0xD0, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x02, 0x00, 0x62, 0x00, 0x2E,
-+ 0xFE, 0x8C, 0xFE, 0x92, 0xFE, 0x98, 0xFE, 0x9C, 0xFE, 0xA0, 0xFE, 0xA4, 0xFE, 0xA8, 0xFE, 0xB4,
-+ 0xFE, 0xB8, 0xFE, 0xBC, 0xFE, 0xC0, 0xFE, 0xC4, 0xFE, 0xC8, 0xFE, 0xCC, 0xFE, 0xD0, 0xFE, 0xD4,
-+ 0xFE, 0xD8, 0xFE, 0xDC, 0xFE, 0xE0, 0xFE, 0xE4, 0xFE, 0xE8, 0xFE, 0xEC, 0xFB, 0xE9, 0xFE, 0xF4,
-+ 0xFB, 0x69, 0xFB, 0x61, 0xFB, 0x55, 0xFB, 0x59, 0xFB, 0x65, 0xFB, 0x5D, 0xFB, 0x79, 0xFB, 0x75,
-+ 0xFB, 0x7D, 0xFB, 0x81, 0xFB, 0x6D, 0xFB, 0x71, 0xFB, 0x91, 0xFB, 0xD6, 0xFB, 0x95, 0xFB, 0x9D,
-+ 0xFB, 0x99, 0xFB, 0xA3, 0xFB, 0xAD, 0xFB, 0xA9, 0xFB, 0xFF, 0xFB, 0xE7, 0x00, 0x01, 0x00, 0x2E,
-+ 0x06, 0x26, 0x06, 0x28, 0x06, 0x2A, 0x06, 0x2B, 0x06, 0x2C, 0x06, 0x2D, 0x06, 0x2E, 0x06, 0x33,
-+ 0x06, 0x34, 0x06, 0x35, 0x06, 0x36, 0x06, 0x37, 0x06, 0x38, 0x06, 0x39, 0x06, 0x3A, 0x06, 0x41,
-+ 0x06, 0x42, 0x06, 0x43, 0x06, 0x44, 0x06, 0x45, 0x06, 0x46, 0x06, 0x47, 0x06, 0x49, 0x06, 0x4A,
-+ 0x06, 0x79, 0x06, 0x7A, 0x06, 0x7B, 0x06, 0x7E, 0x06, 0x7F, 0x06, 0x80, 0x06, 0x83, 0x06, 0x84,
-+ 0x06, 0x86, 0x06, 0x87, 0x06, 0xA4, 0x06, 0xA6, 0x06, 0xA9, 0x06, 0xAD, 0x06, 0xAF, 0x06, 0xB1,
-+ 0x06, 0xB3, 0x06, 0xBB, 0x06, 0xBE, 0x06, 0xC1, 0x06, 0xCC, 0x06, 0xD0, 0x00, 0x01, 0x00, 0x00,
-+ 0x00, 0x01, 0x00, 0x08, 0x00, 0x02, 0x00, 0x9A, 0x00, 0x4A, 0xFE, 0x82, 0xFE, 0x84, 0xFE, 0x86,
-+ 0xFE, 0x88, 0xFE, 0x8A, 0xFE, 0x8E, 0xFE, 0x90, 0xFE, 0x94, 0xFE, 0x96, 0xFE, 0x9A, 0xFE, 0x9E,
-+ 0xFE, 0xA2, 0xFE, 0xA6, 0xFE, 0xAA, 0xFE, 0xAC, 0xFE, 0xAE, 0xFE, 0xB0, 0xFE, 0xB2, 0xFE, 0xB6,
-+ 0xFE, 0xBA, 0xFE, 0xBE, 0xFE, 0xC2, 0xFE, 0xC6, 0xFE, 0xCA, 0xFE, 0xCE, 0xFE, 0xD2, 0xFE, 0xD6,
-+ 0xFE, 0xDA, 0xFE, 0xDE, 0xFE, 0xE2, 0xFE, 0xE6, 0xFE, 0xEA, 0xFE, 0xEE, 0xFE, 0xF0, 0xFE, 0xF2,
-+ 0xFB, 0x51, 0xFB, 0x67, 0xFB, 0x5F, 0xFB, 0x53, 0xFB, 0x57, 0xFB, 0x63, 0xFB, 0x5B, 0xFB, 0x77,
-+ 0xFB, 0x73, 0xFB, 0x7B, 0xFB, 0x7F, 0xFB, 0x89, 0xFB, 0x85, 0xFB, 0x83, 0xFB, 0x87, 0xFB, 0x8D,
-+ 0xFB, 0x8B, 0xFB, 0x6B, 0xFB, 0x6F, 0xFB, 0x8F, 0xFB, 0xD4, 0xFB, 0x93, 0xFB, 0x9B, 0xFB, 0x97,
-+ 0xFB, 0x9F, 0xFB, 0xA1, 0xFB, 0xAB, 0xFB, 0xA5, 0xFB, 0xA7, 0xFB, 0xE1, 0xFB, 0xDA, 0xFB, 0xD8,
-+ 0xFB, 0xDC, 0xFB, 0xE3, 0xFB, 0xDF, 0xFB, 0xFD, 0xFB, 0xE5, 0xFB, 0xAF, 0xFB, 0xB1, 0x00, 0x01,
-+ 0x00, 0x4A, 0x06, 0x22, 0x06, 0x23, 0x06, 0x24, 0x06, 0x25, 0x06, 0x26, 0x06, 0x27, 0x06, 0x28,
-+ 0x06, 0x29, 0x06, 0x2A, 0x06, 0x2B, 0x06, 0x2C, 0x06, 0x2D, 0x06, 0x2E, 0x06, 0x2F, 0x06, 0x30,
-+ 0x06, 0x31, 0x06, 0x32, 0x06, 0x33, 0x06, 0x34, 0x06, 0x35, 0x06, 0x36, 0x06, 0x37, 0x06, 0x38,
-+ 0x06, 0x39, 0x06, 0x3A, 0x06, 0x41, 0x06, 0x42, 0x06, 0x43, 0x06, 0x44, 0x06, 0x45, 0x06, 0x46,
-+ 0x06, 0x47, 0x06, 0x48, 0x06, 0x49, 0x06, 0x4A, 0x06, 0x71, 0x06, 0x79, 0x06, 0x7A, 0x06, 0x7B,
-+ 0x06, 0x7E, 0x06, 0x7F, 0x06, 0x80, 0x06, 0x83, 0x06, 0x84, 0x06, 0x86, 0x06, 0x87, 0x06, 0x88,
-+ 0x06, 0x8C, 0x06, 0x8D, 0x06, 0x8E, 0x06, 0x91, 0x06, 0x98, 0x06, 0xA4, 0x06, 0xA6, 0x06, 0xA9,
-+ 0x06, 0xAD, 0x06, 0xAF, 0x06, 0xB1, 0x06, 0xB3, 0x06, 0xBA, 0x06, 0xBB, 0x06, 0xBE, 0x06, 0xC0,
-+ 0x06, 0xC1, 0x06, 0xC5, 0x06, 0xC6, 0x06, 0xC7, 0x06, 0xC8, 0x06, 0xC9, 0x06, 0xCB, 0x06, 0xCC,
-+ 0x06, 0xD0, 0x06, 0xD2, 0x06, 0xD3, 0x00, 0x04, 0x00, 0x08, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-+ 0x10, 0x98, 0x00, 0x35, 0x00, 0x70, 0x00, 0x7A, 0x01, 0x0C, 0x01, 0x86, 0x01, 0xA8, 0x01, 0xB2,
-+ 0x02, 0x0C, 0x02, 0x62, 0x03, 0x02, 0x03, 0x8A, 0x03, 0xB4, 0x03, 0xF6, 0x04, 0x46, 0x04, 0x8A,
-+ 0x04, 0xBC, 0x04, 0xEC, 0x05, 0x26, 0x05, 0x38, 0x05, 0x42, 0x05, 0x64, 0x05, 0xF8, 0x06, 0x6C,
-+ 0x06, 0xEC, 0x07, 0x80, 0x08, 0x1E, 0x08, 0x56, 0x08, 0xBA, 0x08, 0xF2, 0x09, 0x38, 0x09, 0x66,
-+ 0x09, 0x78, 0x09, 0x82, 0x09, 0xD4, 0x0A, 0x0E, 0x0A, 0x40, 0x0A, 0x70, 0x0A, 0xCC, 0x0A, 0xF2,
-+ 0x0B, 0x38, 0x0B, 0x68, 0x0B, 0xDC, 0x0C, 0x2A, 0x0C, 0xD6, 0x0D, 0x72, 0x0E, 0x16, 0x0E, 0x50,
-+ 0x0E, 0xC8, 0x0F, 0x5A, 0x0F, 0xA8, 0x0F, 0xB6, 0x0F, 0xC0, 0x0F, 0xCA, 0x10, 0x2E, 0x00, 0x01,
-+ 0x00, 0x04, 0xFB, 0xDD, 0x00, 0x02, 0x06, 0x74, 0x00, 0x12, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32,
-+ 0x00, 0x38, 0x00, 0x3E, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x56, 0x00, 0x5C, 0x00, 0x62,
-+ 0x00, 0x68, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0xFB, 0xEC,
-+ 0x00, 0x02, 0x00, 0x01, 0xFB, 0xF0, 0x00, 0x02, 0xFB, 0xD8, 0xFB, 0xF2, 0x00, 0x02, 0xFB, 0xDA,
-+ 0xFB, 0xF4, 0x00, 0x02, 0xFB, 0xDC, 0xFB, 0xF6, 0x00, 0x02, 0xFB, 0xE5, 0xFB, 0xF8, 0x00, 0x02,
-+ 0xFB, 0xE7, 0xFB, 0xEA, 0x00, 0x02, 0xFE, 0x8E, 0xFC, 0x00, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0x97,
-+ 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x01, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0x98, 0x00, 0x02, 0xFE, 0xA4,
-+ 0xFC, 0x99, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x02, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0x9A, 0x00, 0x02,
-+ 0xFE, 0xE4, 0xFC, 0x9B, 0x00, 0x02, 0xFE, 0xEC, 0xFB, 0xEE, 0x00, 0x02, 0xFE, 0xEE, 0xFB, 0xF9,
-+ 0x00, 0x02, 0xFE, 0xF0, 0xFB, 0xFB, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0F, 0x00, 0x20, 0x00, 0x26,
-+ 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x56,
-+ 0x00, 0x5C, 0x00, 0x62, 0x00, 0x68, 0x00, 0x6E, 0x00, 0x74, 0xFB, 0xED, 0x00, 0x02, 0x00, 0x01,
-+ 0xFB, 0xF1, 0x00, 0x02, 0xFB, 0xD8, 0xFB, 0xF3, 0x00, 0x02, 0xFB, 0xDA, 0xFB, 0xF5, 0x00, 0x02,
-+ 0xFB, 0xDC, 0xFB, 0xF7, 0x00, 0x02, 0xFB, 0xE5, 0xFB, 0xEB, 0x00, 0x02, 0xFE, 0x8E, 0xFC, 0x64,
-+ 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x65, 0x00, 0x02, 0xFE, 0xB0, 0xFC, 0x66, 0x00, 0x02, 0xFE, 0xE2,
-+ 0xFC, 0xDF, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x67, 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xE0, 0x00, 0x02,
-+ 0xFE, 0xEC, 0xFB, 0xEF, 0x00, 0x02, 0xFE, 0xEE, 0xFB, 0xFA, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x69,
-+ 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x18, 0xFD, 0x3D, 0x00, 0x02,
-+ 0x06, 0x4B, 0xFD, 0xF3, 0x00, 0x04, 0xFE, 0xDB, 0xFE, 0x92, 0xFE, 0xAE, 0xFD, 0xF2, 0x00, 0x04,
-+ 0xFE, 0xDF, 0xFE, 0xE0, 0xFE, 0xEA, 0x00, 0x01, 0x00, 0x04, 0xFD, 0x3C, 0x00, 0x02, 0x06, 0x4B,
-+ 0x00, 0x0B, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C,
-+ 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0xFC, 0x05, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0x9C,
-+ 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x06, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0x9D, 0x00, 0x02, 0xFE, 0xA4,
-+ 0xFC, 0x07, 0x00, 0x02, 0xFE, 0xA6, 0xFC, 0x9E, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x08, 0x00, 0x02,
-+ 0xFE, 0xE2, 0xFC, 0x9F, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xA0, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x09,
-+ 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x0A, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0A, 0x00, 0x16, 0x00, 0x1E,
-+ 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50,
-+ 0xFD, 0xC2, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0x9E, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF2,
-+ 0xFC, 0x6A, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x6B, 0x00, 0x02, 0xFE, 0xB0, 0xFC, 0x6C, 0x00, 0x02,
-+ 0xFE, 0xE2, 0xFC, 0xE1, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x6D, 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xE2,
-+ 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x6E, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x6F, 0x00, 0x02, 0xFE, 0xF2,
-+ 0x00, 0x12, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3A, 0x00, 0x40, 0x00, 0x48, 0x00, 0x50,
-+ 0x00, 0x56, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6A, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88,
-+ 0x00, 0x8E, 0x00, 0x94, 0x00, 0x9A, 0xFC, 0x0B, 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0x50, 0x00, 0x03,
-+ 0xFE, 0xA0, 0xFE, 0xE4, 0xFC, 0xA1, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x0C, 0x00, 0x02, 0xFE, 0xA2,
-+ 0xFD, 0x52, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xA0, 0xFD, 0x53, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE4,
-+ 0xFC, 0xA2, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x0D, 0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x54, 0x00, 0x03,
-+ 0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xA3, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x0E, 0x00, 0x02, 0xFE, 0xE2,
-+ 0xFD, 0x55, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA0, 0xFD, 0x56, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA4,
-+ 0xFD, 0x57, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA8, 0xFC, 0xA4, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xA5,
-+ 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x0F, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x10, 0x00, 0x02, 0xFE, 0xF2,
-+ 0x00, 0x0F, 0x00, 0x20, 0x00, 0x28, 0x00, 0x30, 0x00, 0x38, 0x00, 0x40, 0x00, 0x48, 0x00, 0x4E,
-+ 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x70, 0x00, 0x76, 0x00, 0x7C, 0x00, 0x82,
-+ 0xFD, 0xA0, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF0, 0xFD, 0x9F, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2,
-+ 0xFD, 0x51, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0x9E, 0xFD, 0xA2, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF0,
-+ 0xFD, 0xA1, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF2, 0xFC, 0x70, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x71,
-+ 0x00, 0x02, 0xFE, 0xB0, 0xFC, 0x72, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0xA4, 0x00, 0x03, 0xFE, 0xE4,
-+ 0xFE, 0xF0, 0xFD, 0xA3, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0xE3, 0x00, 0x02, 0xFE, 0xE4,
-+ 0xFC, 0x73, 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xE4, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x74, 0x00, 0x02,
-+ 0xFE, 0xF0, 0xFC, 0x75, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18,
-+ 0x00, 0x1E, 0x00, 0x24, 0xFC, 0x11, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0x12, 0x00, 0x02, 0xFE, 0xE2,
-+ 0xFC, 0xA6, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x13, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x14, 0x00, 0x02,
-+ 0xFE, 0xF2, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30,
-+ 0x00, 0x36, 0x00, 0x3C, 0xFC, 0x76, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x77, 0x00, 0x02, 0xFE, 0xB0,
-+ 0xFC, 0x78, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xE5, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x79, 0x00, 0x02,
-+ 0xFE, 0xE6, 0xFC, 0xE6, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x7A, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x7B,
-+ 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x30, 0x00, 0x36,
-+ 0x00, 0x3E, 0x00, 0x44, 0x00, 0x4A, 0xFC, 0x15, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xA7, 0x00, 0x02,
-+ 0xFE, 0xA4, 0xFD, 0xFB, 0x00, 0x08, 0xFE, 0xDE, 0x00, 0x20, 0xFE, 0x9F, 0xFE, 0xE0, 0xFE, 0x8E,
-+ 0xFE, 0xDF, 0xFE, 0xEA, 0xFC, 0x16, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x59, 0x00, 0x03, 0xFE, 0xE4,
-+ 0xFE, 0xA4, 0xFC, 0xA8, 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x01, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x02,
-+ 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x07, 0x00, 0x10, 0x00, 0x18, 0x00, 0x20, 0x00, 0x28, 0x00, 0x30,
-+ 0x00, 0x38, 0x00, 0x3E, 0xFD, 0xA6, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF0, 0xFD, 0xBE, 0x00, 0x03,
-+ 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0x58, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA2, 0xFD, 0xA7, 0x00, 0x03,
-+ 0xFE, 0xE4, 0xFE, 0xF0, 0xFD, 0xA5, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFD, 0x1D, 0x00, 0x02,
-+ 0xFE, 0xF0, 0xFD, 0x1E, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A,
-+ 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0xFC, 0x17, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xA9, 0x00, 0x02,
-+ 0xFE, 0xA0, 0xFC, 0x18, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xAA, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xFF,
-+ 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x00, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x14,
-+ 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0xFD, 0xBF, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0x5B,
-+ 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF0, 0xFD, 0x5A, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFD, 0x1B,
-+ 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x1C, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16,
-+ 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0xFC, 0x19, 0x00, 0x02, 0xFE, 0x9E,
-+ 0xFC, 0xAB, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x1A, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0x1B, 0x00, 0x02,
-+ 0xFE, 0xE2, 0xFC, 0xAC, 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x03, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x04,
-+ 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0xFD, 0x1F, 0x00, 0x02, 0xFE, 0xF0,
-+ 0xFD, 0x20, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x01, 0x00, 0x04, 0xFC, 0x5B, 0x00, 0x02, 0x06, 0x70,
-+ 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x18, 0xFC, 0x5C, 0x00, 0x02, 0x06, 0x70, 0xFD, 0xFC,
-+ 0x00, 0x04, 0xFB, 0xFE, 0xFE, 0x8E, 0xFE, 0xDD, 0xFD, 0xF6, 0x00, 0x04, 0xFE, 0xB3, 0xFE, 0xEE,
-+ 0xFE, 0xDD, 0x00, 0x11, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46,
-+ 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x00, 0x5E, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7C,
-+ 0x00, 0x82, 0x00, 0x88, 0x00, 0x8E, 0xFC, 0x1C, 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0x5D, 0x00, 0x03,
-+ 0xFE, 0xA0, 0xFE, 0xA4, 0xFC, 0xAD, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x1D, 0x00, 0x02, 0xFE, 0xA2,
-+ 0xFD, 0x5C, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xA0, 0xFC, 0xAE, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x1E,
-+ 0x00, 0x02, 0xFE, 0xA6, 0xFC, 0xAF, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x0E, 0x00, 0x02, 0xFE, 0xAE,
-+ 0xFC, 0x1F, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x61, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA0, 0xFD, 0x60,
-+ 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA4, 0xFD, 0x63, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xB0,
-+ 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x31, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0xFB, 0x00, 0x02, 0xFE, 0xF0,
-+ 0xFC, 0xFC, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0D, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30,
-+ 0x00, 0x38, 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x68,
-+ 0x00, 0x6E, 0xFD, 0x5E, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF0, 0xFD, 0x34, 0x00, 0x02, 0xFE, 0xA0,
-+ 0xFD, 0x35, 0x00, 0x02, 0xFE, 0xA4, 0xFD, 0xA8, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF0, 0xFD, 0xC6,
-+ 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF2, 0xFD, 0x36, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x2A, 0x00, 0x02,
-+ 0xFE, 0xAE, 0xFD, 0x5F, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA2, 0xFD, 0x62, 0x00, 0x03, 0xFE, 0xE4,
-+ 0xFE, 0xE2, 0xFC, 0xE7, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xE8, 0x00, 0x02, 0xFE, 0xEC, 0xFD, 0x17,
-+ 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x18, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0F, 0x00, 0x20, 0x00, 0x26,
-+ 0x00, 0x2C, 0x00, 0x32, 0x00, 0x3A, 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58,
-+ 0x00, 0x60, 0x00, 0x68, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x7A, 0xFD, 0x09, 0x00, 0x02, 0xFE, 0x9E,
-+ 0xFD, 0x2D, 0x00, 0x02, 0xFE, 0xA0, 0xFD, 0x0A, 0x00, 0x02, 0xFE, 0xA2, 0xFD, 0x68, 0x00, 0x03,
-+ 0xFE, 0xA4, 0xFE, 0xE4, 0xFD, 0x2E, 0x00, 0x02, 0xFE, 0xA4, 0xFD, 0x0B, 0x00, 0x02, 0xFE, 0xA6,
-+ 0xFD, 0x2F, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x0D, 0x00, 0x02, 0xFE, 0xAE, 0xFD, 0x0C, 0x00, 0x02,
-+ 0xFE, 0xE2, 0xFD, 0x6B, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA8, 0xFD, 0x6D, 0x00, 0x03, 0xFE, 0xE4,
-+ 0xFE, 0xE4, 0xFD, 0x30, 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x32, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0xFD,
-+ 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0xFE, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x11, 0x00, 0x24, 0x00, 0x2A,
-+ 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x60,
-+ 0x00, 0x66, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7C, 0x00, 0x82, 0x00, 0x88, 0x00, 0x8E, 0xFD, 0x25,
-+ 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0x69, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0x37, 0x00, 0x02,
-+ 0xFE, 0xA0, 0xFD, 0x26, 0x00, 0x02, 0xFE, 0xA2, 0xFD, 0x67, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE2,
-+ 0xFD, 0xAA, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0x38, 0x00, 0x02, 0xFE, 0xA4, 0xFD, 0x27,
-+ 0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x39, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x29, 0x00, 0x02, 0xFE, 0xAE,
-+ 0xFD, 0x28, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x6A, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA6, 0xFD, 0x6C,
-+ 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2, 0xFC, 0xE9, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xEA, 0x00, 0x02,
-+ 0xFE, 0xEC, 0xFD, 0x19, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x1A, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0E,
-+ 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x50,
-+ 0x00, 0x76, 0x00, 0x7E, 0x00, 0x84, 0x00, 0x8C, 0x00, 0x92, 0x00, 0x98, 0xFC, 0x20, 0x00, 0x02,
-+ 0xFE, 0xA2, 0xFD, 0x65, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xA4, 0xFC, 0xB1, 0x00, 0x02, 0xFE, 0xA4,
-+ 0xFC, 0xB2, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x0F, 0x00, 0x02, 0xFE, 0xAE, 0xFD, 0xF0, 0x00, 0x03,
-+ 0xFE, 0xE0, 0xFB, 0xAF, 0xFD, 0xF5, 0x00, 0x04, 0xFE, 0xE0, 0xFE, 0xCC, 0xFE, 0xE2, 0xFD, 0xFA,
-+ 0x00, 0x12, 0xFE, 0xE0, 0xFE, 0xF0, 0x00, 0x20, 0xFE, 0x8D, 0xFE, 0xDF, 0xFE, 0xE0, 0xFE, 0xEA,
-+ 0x00, 0x20, 0xFE, 0xCB, 0xFE, 0xE0, 0xFE, 0xF4, 0xFE, 0xEA, 0x00, 0x20, 0xFE, 0xED, 0xFE, 0xB3,
-+ 0xFE, 0xE0, 0xFE, 0xE2, 0xFD, 0xF9, 0x00, 0x03, 0xFE, 0xE0, 0xFE, 0xF0, 0xFC, 0x21, 0x00, 0x02,
-+ 0xFE, 0xE2, 0xFD, 0xC5, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xB3, 0x00, 0x02, 0xFE, 0xE4,
-+ 0xFD, 0x05, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x06, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E,
-+ 0x00, 0x16, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2C, 0x00, 0x32, 0xFD, 0x64, 0x00, 0x03, 0xFE, 0xA4,
-+ 0xFE, 0xA2, 0xFD, 0xA9, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0x2B, 0x00, 0x02, 0xFE, 0xAE,
-+ 0xFD, 0x66, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2, 0xFD, 0x21, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x22,
-+ 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0C, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32,
-+ 0x00, 0x38, 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x00, 0x5E, 0xFC, 0x22,
-+ 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xB4, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x23, 0x00, 0x02, 0xFE, 0xA2,
-+ 0xFC, 0xB5, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x24, 0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x70, 0x00, 0x03,
-+ 0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xB6, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x10, 0x00, 0x02, 0xFE, 0xAE,
-+ 0xFC, 0x25, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xB7, 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x07, 0x00, 0x02,
-+ 0xFE, 0xF0, 0xFD, 0x08, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x16, 0x00, 0x1E,
-+ 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32, 0xFD, 0x6E, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF0, 0xFD, 0xAB,
-+ 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0x6F, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE2, 0xFD, 0x2C,
-+ 0x00, 0x02, 0xFE, 0xAE, 0xFD, 0x23, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x24, 0x00, 0x02, 0xFE, 0xF2,
-+ 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3A,
-+ 0x00, 0x40, 0xFC, 0x26, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xB8, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x27,
-+ 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x72, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA4, 0xFD, 0x73, 0x00, 0x03,
-+ 0xFE, 0xE4, 0xFE, 0xE4, 0xFD, 0x33, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xF5, 0x00, 0x02, 0xFE, 0xF0,
-+ 0xFC, 0xF6, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x14, 0x00, 0x1C, 0x00, 0x22,
-+ 0x00, 0x28, 0xFD, 0x71, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA2, 0xFD, 0x74, 0x00, 0x03, 0xFE, 0xE4,
-+ 0xFE, 0xF2, 0xFD, 0x3A, 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x11, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x12,
-+ 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0xFC, 0x28, 0x00, 0x02, 0xFE, 0xE2,
-+ 0xFC, 0xB9, 0x00, 0x02, 0xFE, 0xE4, 0x00, 0x01, 0x00, 0x04, 0xFD, 0x3B, 0x00, 0x02, 0xFE, 0xE4,
-+ 0x00, 0x09, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x22, 0x00, 0x28, 0x00, 0x32, 0x00, 0x38, 0x00, 0x40,
-+ 0x00, 0x46, 0x00, 0x4C, 0xFC, 0x29, 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0xC4, 0x00, 0x03, 0xFE, 0xA0,
-+ 0xFE, 0xE4, 0xFC, 0xBA, 0x00, 0x02, 0xFE, 0xA0, 0xFD, 0xF7, 0x00, 0x04, 0xFE, 0xE0, 0xFE, 0xF4,
-+ 0xFE, 0xEA, 0xFC, 0x2A, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x77, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE4,
-+ 0xFC, 0xBB, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xF7, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0xF8, 0x00, 0x02,
-+ 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x16, 0x00, 0x1E, 0x00, 0x26, 0x00, 0x2E, 0x00, 0x34,
-+ 0xFD, 0x75, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE2, 0xFD, 0x76, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2,
-+ 0xFD, 0x78, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF0, 0xFD, 0xB6, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2,
-+ 0xFD, 0x13, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x14, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E,
-+ 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0xFC, 0x2B, 0x00, 0x02, 0xFE, 0x9E,
-+ 0xFC, 0xBC, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x2C, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xBD, 0x00, 0x02,
-+ 0xFE, 0xE4, 0xFC, 0xF9, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0xFA, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x05,
-+ 0x00, 0x0C, 0x00, 0x14, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0xFD, 0x79, 0x00, 0x03, 0xFE, 0xE4,
-+ 0xFE, 0xE2, 0xFD, 0x7B, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF0, 0xFD, 0x7A, 0x00, 0x03, 0xFE, 0xE4,
-+ 0xFE, 0xF2, 0xFD, 0x15, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x16, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0B,
-+ 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3E, 0x00, 0x44,
-+ 0x00, 0x4A, 0x00, 0x50, 0x00, 0x56, 0xFC, 0x2D, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xBE, 0x00, 0x02,
-+ 0xFE, 0xA0, 0xFC, 0x2E, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xBF, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x2F,
-+ 0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x7D, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xC0, 0x00, 0x02,
-+ 0xFE, 0xA8, 0xFC, 0x30, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xC1, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x31,
-+ 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x32, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x12,
-+ 0x00, 0x1A, 0x00, 0x20, 0xFD, 0x7C, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE2, 0xFD, 0xC1, 0x00, 0x03,
-+ 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0x7C, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x7D, 0x00, 0x02, 0xFE, 0xF2,
-+ 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3A,
-+ 0x00, 0x40, 0xFC, 0x33, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xC2, 0x00, 0x02, 0xFE, 0xA4, 0xFD, 0xF1,
-+ 0x00, 0x03, 0xFE, 0xE0, 0xFB, 0xAF, 0xFC, 0x34, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0xB4, 0x00, 0x03,
-+ 0xFE, 0xE4, 0xFE, 0xA4, 0xFC, 0xC3, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x35, 0x00, 0x02, 0xFE, 0xF0,
-+ 0xFC, 0x36, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x14, 0x00, 0x1C, 0x00, 0x24,
-+ 0x00, 0x2A, 0xFD, 0x7E, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA2, 0xFD, 0x7F, 0x00, 0x03, 0xFE, 0xE4,
-+ 0xFE, 0xE2, 0xFD, 0xB2, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0x7E, 0x00, 0x02, 0xFE, 0xF0,
-+ 0xFC, 0x7F, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0E, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30,
-+ 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62,
-+ 0x00, 0x68, 0x00, 0x6E, 0xFC, 0x37, 0x00, 0x02, 0xFE, 0x8E, 0xFC, 0x38, 0x00, 0x02, 0xFE, 0x9E,
-+ 0xFC, 0xC4, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x39, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xC5, 0x00, 0x02,
-+ 0xFE, 0xA4, 0xFC, 0x3A, 0x00, 0x02, 0xFE, 0xA6, 0xFC, 0xC6, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x3B,
-+ 0x00, 0x02, 0xFE, 0xDE, 0xFC, 0xC7, 0x00, 0x02, 0xFE, 0xE0, 0xFC, 0x3C, 0x00, 0x02, 0xFE, 0xE2,
-+ 0xFD, 0xC3, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xC8, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x3D,
-+ 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x3E, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x09, 0x00, 0x14, 0x00, 0x1A,
-+ 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0xFC, 0x80,
-+ 0x00, 0x02, 0xFE, 0x8E, 0xFC, 0x81, 0x00, 0x02, 0xFE, 0xDE, 0xFC, 0xEB, 0x00, 0x02, 0xFE, 0xE0,
-+ 0xFC, 0x82, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0xBB, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2, 0xFD, 0xB7,
-+ 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0xEC, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x83, 0x00, 0x02,
-+ 0xFE, 0xF0, 0xFC, 0x84, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x14, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36,
-+ 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0x00, 0x50, 0x00, 0x58, 0x00, 0x5E, 0x00, 0x64, 0x00, 0x6C,
-+ 0x00, 0x72, 0x00, 0x78, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0x00, 0x94, 0x00, 0x9A, 0x00, 0xA0,
-+ 0x00, 0xA6, 0xFE, 0xF5, 0x00, 0x02, 0xFE, 0x82, 0xFE, 0xF7, 0x00, 0x02, 0xFE, 0x84, 0xFE, 0xF9,
-+ 0x00, 0x02, 0xFE, 0x88, 0xFE, 0xFB, 0x00, 0x02, 0xFE, 0x8E, 0xFC, 0x3F, 0x00, 0x02, 0xFE, 0x9E,
-+ 0xFD, 0x83, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xA0, 0xFD, 0xBA, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE4,
-+ 0xFC, 0xC9, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x40, 0x00, 0x02, 0xFE, 0xA2, 0xFD, 0xB5, 0x00, 0x03,
-+ 0xFE, 0xA4, 0xFE, 0xE4, 0xFC, 0xCA, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x41, 0x00, 0x02, 0xFE, 0xA6,
-+ 0xFD, 0x86, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xCB, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x42,
-+ 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x88, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA4, 0xFC, 0xCC, 0x00, 0x02,
-+ 0xFE, 0xE4, 0xFC, 0xCD, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x43, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x44,
-+ 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x11, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C,
-+ 0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7A,
-+ 0x00, 0x82, 0x00, 0x8A, 0x00, 0x90, 0x00, 0x96, 0xFE, 0xF6, 0x00, 0x02, 0xFE, 0x82, 0xFE, 0xF8,
-+ 0x00, 0x02, 0xFE, 0x84, 0xFE, 0xFA, 0x00, 0x02, 0xFE, 0x88, 0xFE, 0xFC, 0x00, 0x02, 0xFE, 0x8E,
-+ 0xFD, 0x84, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0x9E, 0xFD, 0xBC, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE2,
-+ 0xFD, 0xAC, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0x80, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE2,
-+ 0xFD, 0x82, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF0, 0xFD, 0x81, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2,
-+ 0xFD, 0x85, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE2, 0xFC, 0x85, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x87,
-+ 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA2, 0xFD, 0xAD, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0xED,
-+ 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x86, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x87, 0x00, 0x02, 0xFE, 0xF2,
-+ 0x00, 0x12, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50,
-+ 0x00, 0x58, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x70, 0x00, 0x76, 0x00, 0x7E, 0x00, 0x86, 0x00, 0x8C,
-+ 0x00, 0x92, 0x00, 0x98, 0x00, 0x9E, 0xFC, 0x45, 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0x8C, 0x00, 0x03,
-+ 0xFE, 0xA0, 0xFE, 0xA4, 0xFD, 0x92, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xA8, 0xFD, 0x8D, 0x00, 0x03,
-+ 0xFE, 0xA0, 0xFE, 0xE4, 0xFC, 0xCE, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x46, 0x00, 0x02, 0xFE, 0xA2,
-+ 0xFD, 0x89, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xA0, 0xFD, 0xF4, 0x00, 0x04, 0xFE, 0xA4, 0xFE, 0xE4,
-+ 0xFE, 0xAA, 0xFD, 0x8A, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE4, 0xFC, 0xCF, 0x00, 0x02, 0xFE, 0xA4,
-+ 0xFC, 0x47, 0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x8E, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xA0, 0xFD, 0x8F,
-+ 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xD0, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x48, 0x00, 0x02,
-+ 0xFE, 0xE2, 0xFC, 0xD1, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x49, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x4A,
-+ 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2C,
-+ 0x00, 0x32, 0xFC, 0x88, 0x00, 0x02, 0xFE, 0x8E, 0xFD, 0xC0, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2,
-+ 0xFD, 0x8B, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0xB9, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF2,
-+ 0xFC, 0x89, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0xB1, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0x00, 0x0E,
-+ 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3A, 0x00, 0x40, 0x00, 0x48, 0x00, 0x4E,
-+ 0x00, 0x54, 0x00, 0x5A, 0x00, 0x60, 0x00, 0x66, 0x00, 0x6C, 0x00, 0x72, 0xFC, 0x4B, 0x00, 0x02,
-+ 0xFE, 0x9E, 0xFD, 0xB8, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xA4, 0xFD, 0x98, 0x00, 0x03, 0xFE, 0xA0,
-+ 0xFE, 0xE4, 0xFC, 0xD2, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x4C, 0x00, 0x02, 0xFE, 0xA2, 0xFD, 0x95,
-+ 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE4, 0xFC, 0xD3, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x4D, 0x00, 0x02,
-+ 0xFE, 0xA6, 0xFC, 0xD4, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x4E, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xD5,
-+ 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xD6, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x4F, 0x00, 0x02, 0xFE, 0xF0,
-+ 0xFC, 0x50, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x32, 0x00, 0x3A,
-+ 0x00, 0x42, 0x00, 0x4A, 0x00, 0x52, 0x00, 0x58, 0x00, 0x5E, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74,
-+ 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0xFD, 0xBD, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xA2,
-+ 0xFD, 0x97, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE2, 0xFD, 0x99, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF0,
-+ 0xFD, 0xC7, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0x96, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF0,
-+ 0xFD, 0xB3, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFC, 0x8A, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x8B,
-+ 0x00, 0x02, 0xFE, 0xB0, 0xFC, 0x8C, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x9B, 0x00, 0x03, 0xFE, 0xE4,
-+ 0xFE, 0xF0, 0xFD, 0x9A, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0xEE, 0x00, 0x02, 0xFE, 0xE4,
-+ 0xFC, 0x8D, 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xEF, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x8E, 0x00, 0x02,
-+ 0xFE, 0xF0, 0xFC, 0x8F, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x09, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20,
-+ 0x00, 0x26, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0xFC, 0xD9, 0x00, 0x02,
-+ 0x06, 0x70, 0xFC, 0x51, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xD7, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x52,
-+ 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x93, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA0, 0xFD, 0x94, 0x00, 0x03,
-+ 0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xD8, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x53, 0x00, 0x02, 0xFE, 0xF0,
-+ 0xFC, 0x54, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x01, 0x00, 0x04, 0xFD, 0xF8, 0x00, 0x04, 0xFE, 0xB3,
-+ 0xFE, 0xE0, 0xFE, 0xE2, 0x00, 0x01, 0x00, 0x04, 0xFC, 0x5D, 0x00, 0x02, 0x06, 0x70, 0x00, 0x01,
-+ 0x00, 0x04, 0xFC, 0x90, 0x00, 0x02, 0x06, 0x70, 0x00, 0x0C, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26,
-+ 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58,
-+ 0x00, 0x5E, 0xFC, 0x55, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xDA, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x56,
-+ 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xDB, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x57, 0x00, 0x02, 0xFE, 0xA6,
-+ 0xFC, 0xDC, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x58, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x9D, 0x00, 0x03,
-+ 0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xDD, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xDE, 0x00, 0x02, 0xFE, 0xEC,
-+ 0xFC, 0x59, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x5A, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0C, 0x00, 0x1A,
-+ 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x52,
-+ 0x00, 0x58, 0x00, 0x5E, 0x00, 0x64, 0xFD, 0xAF, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0xAE,
-+ 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFC, 0x91, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x92, 0x00, 0x02,
-+ 0xFE, 0xB0, 0xFC, 0x93, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x9C, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2,
-+ 0xFD, 0xB0, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0xF0, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x94,
-+ 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xF1, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x95, 0x00, 0x02, 0xFE, 0xF0,
-+ 0xFC, 0x96, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x01, 0x00, 0x35, 0xFB, 0xD7, 0xFE, 0x8B, 0xFE, 0x8C,
-+ 0xFE, 0x8D, 0xFE, 0x8E, 0xFE, 0x91, 0xFE, 0x92, 0xFE, 0x97, 0xFE, 0x98, 0xFE, 0x9B, 0xFE, 0x9C,
-+ 0xFE, 0x9F, 0xFE, 0xA0, 0xFE, 0xA3, 0xFE, 0xA4, 0xFE, 0xA7, 0xFE, 0xA8, 0xFE, 0xAB, 0xFE, 0xAD,
-+ 0xFE, 0xB3, 0xFE, 0xB4, 0xFE, 0xB7, 0xFE, 0xB8, 0xFE, 0xBB, 0xFE, 0xBC, 0xFE, 0xBF, 0xFE, 0xC0,
-+ 0xFE, 0xC3, 0xFE, 0xC4, 0xFE, 0xC7, 0xFE, 0xC8, 0xFE, 0xCB, 0xFE, 0xCC, 0xFE, 0xCF, 0xFE, 0xD0,
-+ 0xFE, 0xD3, 0xFE, 0xD4, 0xFE, 0xD7, 0xFE, 0xD8, 0xFE, 0xDB, 0xFE, 0xDC, 0xFE, 0xDF, 0xFE, 0xE0,
-+ 0xFE, 0xE3, 0xFE, 0xE4, 0xFE, 0xE7, 0xFE, 0xE8, 0xFE, 0xEB, 0xFE, 0xED, 0xFE, 0xEF, 0xFE, 0xF0,
-+ 0xFE, 0xF3, 0xFE, 0xF4, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x1A,
-+ 0x00, 0x01, 0x00, 0x08, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x09, 0xCB, 0x00, 0x02, 0x09, 0xBE,
-+ 0x09, 0xCC, 0x00, 0x02, 0x09, 0xD7, 0x00, 0x01, 0x00, 0x01, 0x09, 0xC7, 0x00, 0x02, 0x00, 0x00,
-+ 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x16, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02,
-+ 0x09, 0xC7, 0x09, 0xBE, 0x00, 0x02, 0x09, 0xC7, 0x09, 0xD7, 0x00, 0x01, 0x00, 0x02, 0x09, 0xCB,
-+ 0x09, 0xCC, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x02, 0x66, 0x00, 0x20,
- 0x00, 0x46, 0x00, 0x50, 0x00, 0x62, 0x00, 0x74, 0x00, 0x96, 0x00, 0xA8, 0x00, 0xB2, 0x00, 0xDC,
- 0x00, 0xEE, 0x00, 0xF8, 0x01, 0x1A, 0x01, 0x24, 0x01, 0x2E, 0x01, 0x38, 0x01, 0x4A, 0x01, 0x5C,
- 0x01, 0x7E, 0x01, 0x90, 0x01, 0x9A, 0x01, 0xC4, 0x01, 0xD6, 0x01, 0xE0, 0x02, 0x02, 0x02, 0x0C,
-@@ -508,25 +499,13 @@
- 0x04, 0x35, 0x03, 0x40, 0x00, 0x02, 0x04, 0x33, 0x03, 0x41, 0x00, 0x02, 0x04, 0x3A, 0x03, 0x41,
- 0x00, 0x02, 0x04, 0x38, 0x03, 0x40, 0x00, 0x01, 0x00, 0x08, 0x04, 0x00, 0x04, 0x03, 0x04, 0x0C,
- 0x04, 0x0D, 0x04, 0x50, 0x04, 0x53, 0x04, 0x5C, 0x04, 0x5D, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
-- 0x00, 0x08, 0x00, 0x01, 0x00, 0x8A, 0x00, 0x0B, 0x00, 0x1C, 0x00, 0x26, 0x00, 0x30, 0x00, 0x3A,
-- 0x00, 0x44, 0x00, 0x4E, 0x00, 0x58, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x80, 0x00, 0x01,
-- 0x00, 0x04, 0x09, 0x58, 0x00, 0x02, 0x09, 0x3C, 0x00, 0x01, 0x00, 0x04, 0x09, 0x59, 0x00, 0x02,
-- 0x09, 0x3C, 0x00, 0x01, 0x00, 0x04, 0x09, 0x5A, 0x00, 0x02, 0x09, 0x3C, 0x00, 0x01, 0x00, 0x04,
-- 0x09, 0x5B, 0x00, 0x02, 0x09, 0x3C, 0x00, 0x01, 0x00, 0x04, 0x09, 0x5C, 0x00, 0x02, 0x09, 0x3C,
-- 0x00, 0x01, 0x00, 0x04, 0x09, 0x5D, 0x00, 0x02, 0x09, 0x3C, 0x00, 0x01, 0x00, 0x04, 0x09, 0x29,
-- 0x00, 0x02, 0x09, 0x3C, 0x00, 0x01, 0x00, 0x04, 0x09, 0x5E, 0x00, 0x02, 0x09, 0x3C, 0x00, 0x01,
-- 0x00, 0x04, 0x09, 0x5F, 0x00, 0x02, 0x09, 0x3C, 0x00, 0x01, 0x00, 0x04, 0x09, 0x31, 0x00, 0x02,
-- 0x09, 0x3C, 0x00, 0x01, 0x00, 0x04, 0x09, 0x34, 0x00, 0x02, 0x09, 0x3C, 0x00, 0x01, 0x00, 0x0B,
-- 0x09, 0x15, 0x09, 0x16, 0x09, 0x17, 0x09, 0x1C, 0x09, 0x21, 0x09, 0x22, 0x09, 0x28, 0x09, 0x2B,
-- 0x09, 0x2F, 0x09, 0x30, 0x09, 0x33, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-- 0x00, 0x5E, 0x00, 0x0B, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x00, 0x3A,
-- 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x00, 0x02, 0x09, 0x28, 0x09, 0x3C,
-- 0x00, 0x02, 0x09, 0x30, 0x09, 0x3C, 0x00, 0x02, 0x09, 0x33, 0x09, 0x3C, 0x00, 0x02, 0x09, 0x15,
-- 0x09, 0x3C, 0x00, 0x02, 0x09, 0x16, 0x09, 0x3C, 0x00, 0x02, 0x09, 0x17, 0x09, 0x3C, 0x00, 0x02,
-- 0x09, 0x1C, 0x09, 0x3C, 0x00, 0x02, 0x09, 0x21, 0x09, 0x3C, 0x00, 0x02, 0x09, 0x22, 0x09, 0x3C,
-- 0x00, 0x02, 0x09, 0x2B, 0x09, 0x3C, 0x00, 0x02, 0x09, 0x2F, 0x09, 0x3C, 0x00, 0x01, 0x00, 0x0B,
-- 0x09, 0x29, 0x09, 0x31, 0x09, 0x34, 0x09, 0x58, 0x09, 0x59, 0x09, 0x5A, 0x09, 0x5B, 0x09, 0x5C,
-- 0x09, 0x5D, 0x09, 0x5E, 0x09, 0x5F, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-+ 0x00, 0x08, 0x00, 0x01, 0x00, 0x2A, 0x00, 0x03, 0x00, 0x0C, 0x00, 0x16, 0x00, 0x20, 0x00, 0x01,
-+ 0x00, 0x04, 0x09, 0x29, 0x00, 0x02, 0x09, 0x3C, 0x00, 0x01, 0x00, 0x04, 0x09, 0x31, 0x00, 0x02,
-+ 0x09, 0x3C, 0x00, 0x01, 0x00, 0x04, 0x09, 0x34, 0x00, 0x02, 0x09, 0x3C, 0x00, 0x01, 0x00, 0x03,
-+ 0x09, 0x28, 0x09, 0x30, 0x09, 0x33, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-+ 0x00, 0x1E, 0x00, 0x03, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x02, 0x09, 0x28, 0x09, 0x3C,
-+ 0x00, 0x02, 0x09, 0x30, 0x09, 0x3C, 0x00, 0x02, 0x09, 0x33, 0x09, 0x3C, 0x00, 0x01, 0x00, 0x03,
-+ 0x09, 0x29, 0x09, 0x31, 0x09, 0x34, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
- 0x33, 0x04, 0x00, 0x75, 0x00, 0xF0, 0x01, 0x1A, 0x04, 0x5A, 0x05, 0x0C, 0x08, 0x3C, 0x09, 0x24,
- 0x09, 0xD6, 0x09, 0xE0, 0x0A, 0x54, 0x0D, 0x84, 0x0D, 0x8E, 0x0D, 0x98, 0x11, 0x44, 0x11, 0xF6,
- 0x15, 0x92, 0x16, 0xBC, 0x17, 0x6E, 0x17, 0x88, 0x18, 0xB2, 0x1C, 0x4E, 0x1C, 0x78, 0x1C, 0xA2,
-@@ -1358,569 +1337,541 @@
- 0x1F, 0x81, 0x1F, 0x88, 0x1F, 0x89, 0x1F, 0x90, 0x1F, 0x91, 0x1F, 0x98, 0x1F, 0x99, 0x1F, 0xA0,
- 0x1F, 0xA1, 0x1F, 0xA8, 0x1F, 0xA9, 0x1F, 0xB3, 0x1F, 0xB6, 0x1F, 0xBC, 0x1F, 0xBE, 0x1F, 0xBF,
- 0x1F, 0xC3, 0x1F, 0xC6, 0x1F, 0xCC, 0x1F, 0xF3, 0x1F, 0xF6, 0x1F, 0xFC, 0x1F, 0xFE, 0x21, 0x26,
-- 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x4C, 0x0A, 0x10, 0x12, 0x6E, 0x18, 0x84, 0x1E, 0x68,
-- 0x22, 0x7A, 0x26, 0x68, 0x29, 0x12, 0x2B, 0x5C, 0x2D, 0x24, 0x2F, 0x04, 0x30, 0xB4, 0x32, 0x62,
-- 0x33, 0xCA, 0x35, 0x32, 0x36, 0x9A, 0x37, 0x76, 0x38, 0x52, 0x39, 0x2E, 0x39, 0xFC, 0x3A, 0xCA,
-- 0x3B, 0x98, 0x3C, 0x4A, 0x3C, 0xFC, 0x3D, 0x22, 0x3D, 0x48, 0x3D, 0x6E, 0x3D, 0x94, 0x3D, 0xBA,
-- 0x3D, 0xE0, 0x3E, 0x06, 0x3E, 0x2C, 0x3E, 0x52, 0x3E, 0x78, 0x3E, 0x9E, 0x00, 0x01, 0x07, 0xCE,
-- 0x00, 0xF9, 0x01, 0xF8, 0x01, 0xFE, 0x02, 0x04, 0x02, 0x0A, 0x02, 0x10, 0x02, 0x16, 0x02, 0x1C,
-- 0x02, 0x22, 0x02, 0x28, 0x02, 0x2E, 0x02, 0x34, 0x02, 0x3A, 0x02, 0x40, 0x02, 0x46, 0x02, 0x4C,
-- 0x02, 0x52, 0x02, 0x58, 0x02, 0x5E, 0x02, 0x64, 0x02, 0x6A, 0x02, 0x70, 0x02, 0x76, 0x02, 0x7C,
-- 0x02, 0x82, 0x02, 0x88, 0x02, 0x8E, 0x02, 0x94, 0x02, 0x9A, 0x02, 0xA0, 0x02, 0xA6, 0x02, 0xAC,
-- 0x02, 0xB2, 0x02, 0xB8, 0x02, 0xBE, 0x02, 0xC4, 0x02, 0xCA, 0x02, 0xD0, 0x02, 0xD6, 0x02, 0xDC,
-- 0x02, 0xE2, 0x02, 0xE8, 0x02, 0xEE, 0x02, 0xF4, 0x02, 0xFA, 0x03, 0x00, 0x03, 0x06, 0x03, 0x0C,
-- 0x03, 0x12, 0x03, 0x18, 0x03, 0x1E, 0x03, 0x24, 0x03, 0x2A, 0x03, 0x30, 0x03, 0x36, 0x03, 0x3C,
-- 0x03, 0x42, 0x03, 0x48, 0x03, 0x4E, 0x03, 0x54, 0x03, 0x5A, 0x03, 0x60, 0x03, 0x66, 0x03, 0x6C,
-- 0x03, 0x72, 0x03, 0x78, 0x03, 0x7E, 0x03, 0x84, 0x03, 0x8A, 0x03, 0x90, 0x03, 0x96, 0x03, 0x9C,
-- 0x03, 0xA2, 0x03, 0xA8, 0x03, 0xAE, 0x03, 0xB4, 0x03, 0xBA, 0x03, 0xC0, 0x03, 0xC6, 0x03, 0xCC,
-- 0x03, 0xD2, 0x03, 0xD8, 0x03, 0xDE, 0x03, 0xE4, 0x03, 0xEA, 0x03, 0xF0, 0x03, 0xF6, 0x03, 0xFC,
-- 0x04, 0x02, 0x04, 0x08, 0x04, 0x0E, 0x04, 0x14, 0x04, 0x1A, 0x04, 0x20, 0x04, 0x26, 0x04, 0x2C,
-- 0x04, 0x32, 0x04, 0x38, 0x04, 0x3E, 0x04, 0x44, 0x04, 0x4A, 0x04, 0x50, 0x04, 0x56, 0x04, 0x5C,
-- 0x04, 0x62, 0x04, 0x68, 0x04, 0x6E, 0x04, 0x74, 0x04, 0x7A, 0x04, 0x80, 0x04, 0x86, 0x04, 0x8C,
-- 0x04, 0x92, 0x04, 0x98, 0x04, 0x9E, 0x04, 0xA4, 0x04, 0xAA, 0x04, 0xB0, 0x04, 0xB6, 0x04, 0xBC,
-- 0x04, 0xC2, 0x04, 0xC8, 0x04, 0xCE, 0x04, 0xD4, 0x04, 0xDA, 0x04, 0xE0, 0x04, 0xE6, 0x04, 0xEC,
-- 0x04, 0xF2, 0x04, 0xF8, 0x04, 0xFE, 0x05, 0x04, 0x05, 0x0A, 0x05, 0x10, 0x05, 0x16, 0x05, 0x1C,
-- 0x05, 0x22, 0x05, 0x28, 0x05, 0x2E, 0x05, 0x34, 0x05, 0x3A, 0x05, 0x40, 0x05, 0x46, 0x05, 0x4C,
-- 0x05, 0x52, 0x05, 0x58, 0x05, 0x5E, 0x05, 0x64, 0x05, 0x6A, 0x05, 0x70, 0x05, 0x76, 0x05, 0x7C,
-- 0x05, 0x82, 0x05, 0x88, 0x05, 0x8E, 0x05, 0x94, 0x05, 0x9A, 0x05, 0xA0, 0x05, 0xA6, 0x05, 0xAC,
-- 0x05, 0xB2, 0x05, 0xB8, 0x05, 0xBE, 0x05, 0xC4, 0x05, 0xCA, 0x05, 0xD0, 0x05, 0xD6, 0x05, 0xDC,
-- 0x05, 0xE2, 0x05, 0xE8, 0x05, 0xEE, 0x05, 0xF4, 0x05, 0xFA, 0x06, 0x00, 0x06, 0x06, 0x06, 0x0C,
-- 0x06, 0x12, 0x06, 0x18, 0x06, 0x1E, 0x06, 0x24, 0x06, 0x2A, 0x06, 0x30, 0x06, 0x36, 0x06, 0x3C,
-- 0x06, 0x42, 0x06, 0x48, 0x06, 0x4E, 0x06, 0x54, 0x06, 0x5A, 0x06, 0x60, 0x06, 0x66, 0x06, 0x6C,
-- 0x06, 0x72, 0x06, 0x78, 0x06, 0x7E, 0x06, 0x84, 0x06, 0x8A, 0x06, 0x90, 0x06, 0x96, 0x06, 0x9C,
-- 0x06, 0xA2, 0x06, 0xA8, 0x06, 0xAE, 0x06, 0xB4, 0x06, 0xBA, 0x06, 0xC0, 0x06, 0xC6, 0x06, 0xCC,
-- 0x06, 0xD2, 0x06, 0xD8, 0x06, 0xDE, 0x06, 0xE4, 0x06, 0xEA, 0x06, 0xF0, 0x06, 0xF6, 0x06, 0xFC,
-- 0x07, 0x02, 0x07, 0x08, 0x07, 0x0E, 0x07, 0x14, 0x07, 0x1A, 0x07, 0x20, 0x07, 0x26, 0x07, 0x2C,
-- 0x07, 0x32, 0x07, 0x38, 0x07, 0x3E, 0x07, 0x44, 0x07, 0x4A, 0x07, 0x50, 0x07, 0x56, 0x07, 0x5C,
-- 0x07, 0x62, 0x07, 0x68, 0x07, 0x6E, 0x07, 0x74, 0x07, 0x7A, 0x07, 0x80, 0x07, 0x86, 0x07, 0x8C,
-- 0x07, 0x92, 0x07, 0x98, 0x07, 0x9E, 0x07, 0xA4, 0x07, 0xAA, 0x07, 0xB0, 0x07, 0xB6, 0x07, 0xBC,
-- 0x07, 0xC2, 0x07, 0xC8, 0x00, 0x02, 0x00, 0xA8, 0x03, 0x01, 0x00, 0x02, 0x03, 0x91, 0x03, 0x01,
-- 0x00, 0x02, 0x03, 0x95, 0x03, 0x01, 0x00, 0x02, 0x03, 0x97, 0x03, 0x01, 0x00, 0x02, 0x03, 0x99,
-- 0x03, 0x01, 0x00, 0x02, 0x03, 0x9F, 0x03, 0x01, 0x00, 0x02, 0x03, 0xA5, 0x03, 0x01, 0x00, 0x02,
-- 0x03, 0xA9, 0x03, 0x01, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x44, 0x00, 0x02, 0x03, 0x99, 0x03, 0x08,
-- 0x00, 0x02, 0x03, 0xA5, 0x03, 0x08, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x01, 0x00, 0x02, 0x03, 0xB5,
-- 0x03, 0x01, 0x00, 0x02, 0x03, 0xB7, 0x03, 0x01, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x01, 0x00, 0x02,
-- 0x03, 0xC5, 0x03, 0x44, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x08, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x08,
-- 0x00, 0x02, 0x03, 0xBF, 0x03, 0x01, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x01, 0x00, 0x02, 0x03, 0xC9,
-- 0x03, 0x01, 0x00, 0x02, 0x03, 0xD2, 0x03, 0x01, 0x00, 0x02, 0x03, 0xD2, 0x03, 0x08, 0x00, 0x02,
-- 0x03, 0xB1, 0x03, 0x13, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x00, 0x03, 0x00,
-- 0x00, 0x02, 0x1F, 0x01, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x00, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x01,
-- 0x03, 0x01, 0x00, 0x02, 0x1F, 0x00, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x01, 0x03, 0x42, 0x00, 0x02,
-- 0x03, 0x91, 0x03, 0x13, 0x00, 0x02, 0x03, 0x91, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x08, 0x03, 0x00,
-- 0x00, 0x02, 0x1F, 0x09, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x08, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x09,
-- 0x03, 0x01, 0x00, 0x02, 0x1F, 0x08, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x09, 0x03, 0x42, 0x00, 0x02,
-- 0x03, 0xB5, 0x03, 0x13, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x10, 0x03, 0x00,
-- 0x00, 0x02, 0x1F, 0x11, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x10, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x11,
-- 0x03, 0x01, 0x00, 0x02, 0x03, 0x95, 0x03, 0x13, 0x00, 0x02, 0x03, 0x95, 0x03, 0x14, 0x00, 0x02,
-- 0x1F, 0x18, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x19, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x18, 0x03, 0x01,
-- 0x00, 0x02, 0x1F, 0x19, 0x03, 0x01, 0x00, 0x02, 0x03, 0xB7, 0x03, 0x13, 0x00, 0x02, 0x03, 0xB7,
-- 0x03, 0x14, 0x00, 0x02, 0x1F, 0x20, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x21, 0x03, 0x00, 0x00, 0x02,
-- 0x1F, 0x20, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x21, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x20, 0x03, 0x42,
-- 0x00, 0x02, 0x1F, 0x21, 0x03, 0x42, 0x00, 0x02, 0x03, 0x97, 0x03, 0x13, 0x00, 0x02, 0x03, 0x97,
-- 0x03, 0x14, 0x00, 0x02, 0x1F, 0x28, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x29, 0x03, 0x00, 0x00, 0x02,
-- 0x1F, 0x28, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x29, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x28, 0x03, 0x42,
-- 0x00, 0x02, 0x1F, 0x29, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x13, 0x00, 0x02, 0x03, 0xB9,
-- 0x03, 0x14, 0x00, 0x02, 0x1F, 0x30, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x31, 0x03, 0x00, 0x00, 0x02,
-- 0x1F, 0x30, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x31, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x30, 0x03, 0x42,
-- 0x00, 0x02, 0x1F, 0x31, 0x03, 0x42, 0x00, 0x02, 0x03, 0x99, 0x03, 0x13, 0x00, 0x02, 0x03, 0x99,
-- 0x03, 0x14, 0x00, 0x02, 0x1F, 0x38, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x39, 0x03, 0x00, 0x00, 0x02,
-- 0x1F, 0x38, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x39, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x38, 0x03, 0x42,
-- 0x00, 0x02, 0x1F, 0x39, 0x03, 0x42, 0x00, 0x02, 0x03, 0xBF, 0x03, 0x13, 0x00, 0x02, 0x03, 0xBF,
-- 0x03, 0x14, 0x00, 0x02, 0x1F, 0x40, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x41, 0x03, 0x00, 0x00, 0x02,
-- 0x1F, 0x40, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x41, 0x03, 0x01, 0x00, 0x02, 0x03, 0x9F, 0x03, 0x13,
-- 0x00, 0x02, 0x03, 0x9F, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x48, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x49,
-- 0x03, 0x00, 0x00, 0x02, 0x1F, 0x48, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x49, 0x03, 0x01, 0x00, 0x02,
-- 0x03, 0xC5, 0x03, 0x13, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x50, 0x03, 0x00,
-- 0x00, 0x02, 0x1F, 0x51, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x50, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x51,
-- 0x03, 0x01, 0x00, 0x02, 0x1F, 0x50, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x51, 0x03, 0x42, 0x00, 0x02,
-- 0x03, 0xA5, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x59, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x59, 0x03, 0x01,
-- 0x00, 0x02, 0x1F, 0x59, 0x03, 0x42, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x13, 0x00, 0x02, 0x03, 0xC9,
-- 0x03, 0x14, 0x00, 0x02, 0x1F, 0x60, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x61, 0x03, 0x00, 0x00, 0x02,
-- 0x1F, 0x60, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x61, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x60, 0x03, 0x42,
-- 0x00, 0x02, 0x1F, 0x61, 0x03, 0x42, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x13, 0x00, 0x02, 0x03, 0xA9,
-- 0x03, 0x14, 0x00, 0x02, 0x1F, 0x68, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x69, 0x03, 0x00, 0x00, 0x02,
-- 0x1F, 0x68, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x69, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x68, 0x03, 0x42,
-- 0x00, 0x02, 0x1F, 0x69, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x00, 0x00, 0x02, 0x03, 0xB1,
-- 0x03, 0x01, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x00, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x01, 0x00, 0x02,
-- 0x03, 0xB7, 0x03, 0x00, 0x00, 0x02, 0x03, 0xB7, 0x03, 0x01, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x00,
-- 0x00, 0x02, 0x03, 0xB9, 0x03, 0x01, 0x00, 0x02, 0x03, 0xBF, 0x03, 0x00, 0x00, 0x02, 0x03, 0xBF,
-- 0x03, 0x01, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x00, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x01, 0x00, 0x02,
-- 0x03, 0xC9, 0x03, 0x00, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x00, 0x03, 0x45,
-- 0x00, 0x02, 0x1F, 0x01, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x02, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x03,
-- 0x03, 0x45, 0x00, 0x02, 0x1F, 0x04, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x05, 0x03, 0x45, 0x00, 0x02,
-- 0x1F, 0x06, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x07, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x08, 0x03, 0x45,
-- 0x00, 0x02, 0x1F, 0x09, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x0A, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x0B,
-- 0x03, 0x45, 0x00, 0x02, 0x1F, 0x0C, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x0D, 0x03, 0x45, 0x00, 0x02,
-- 0x1F, 0x0E, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x0F, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x20, 0x03, 0x45,
-- 0x00, 0x02, 0x1F, 0x21, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x22, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x23,
-- 0x03, 0x45, 0x00, 0x02, 0x1F, 0x24, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x25, 0x03, 0x45, 0x00, 0x02,
-- 0x1F, 0x26, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x27, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x28, 0x03, 0x45,
-- 0x00, 0x02, 0x1F, 0x29, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x2A, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x2B,
-- 0x03, 0x45, 0x00, 0x02, 0x1F, 0x2C, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x2D, 0x03, 0x45, 0x00, 0x02,
-- 0x1F, 0x2E, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x2F, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x60, 0x03, 0x45,
-- 0x00, 0x02, 0x1F, 0x61, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x62, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x63,
-- 0x03, 0x45, 0x00, 0x02, 0x1F, 0x64, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x65, 0x03, 0x45, 0x00, 0x02,
-- 0x1F, 0x66, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x67, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x68, 0x03, 0x45,
-- 0x00, 0x02, 0x1F, 0x69, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x6A, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x6B,
-- 0x03, 0x45, 0x00, 0x02, 0x1F, 0x6C, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x6D, 0x03, 0x45, 0x00, 0x02,
-- 0x1F, 0x6E, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x6F, 0x03, 0x45, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x06,
-- 0x00, 0x02, 0x03, 0xB1, 0x03, 0x04, 0x00, 0x02, 0x1F, 0x70, 0x03, 0x45, 0x00, 0x02, 0x03, 0xB1,
-- 0x03, 0x45, 0x00, 0x02, 0x03, 0xAC, 0x03, 0x45, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x42, 0x00, 0x02,
-- 0x1F, 0xB3, 0x03, 0x42, 0x00, 0x02, 0x03, 0x91, 0x03, 0x06, 0x00, 0x02, 0x03, 0x91, 0x03, 0x04,
-- 0x00, 0x02, 0x03, 0x91, 0x03, 0x00, 0x00, 0x02, 0x03, 0x91, 0x03, 0x01, 0x00, 0x02, 0x03, 0x91,
-- 0x03, 0x45, 0x00, 0x02, 0x00, 0xA8, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x74, 0x03, 0x45, 0x00, 0x02,
-- 0x03, 0xB7, 0x03, 0x45, 0x00, 0x02, 0x03, 0xAE, 0x03, 0x45, 0x00, 0x02, 0x03, 0xB7, 0x03, 0x42,
-- 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x42, 0x00, 0x02, 0x03, 0x95, 0x03, 0x00, 0x00, 0x02, 0x03, 0x95,
-- 0x03, 0x01, 0x00, 0x02, 0x03, 0x97, 0x03, 0x00, 0x00, 0x02, 0x03, 0x97, 0x03, 0x01, 0x00, 0x02,
-- 0x03, 0x97, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xBF, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xBF, 0x03, 0x01,
-- 0x00, 0x02, 0x1F, 0xBF, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x06, 0x00, 0x02, 0x03, 0xB9,
-- 0x03, 0x04, 0x00, 0x02, 0x03, 0xCA, 0x03, 0x00, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x44, 0x00, 0x02,
-- 0x03, 0xB9, 0x03, 0x42, 0x00, 0x02, 0x03, 0xCA, 0x03, 0x42, 0x00, 0x02, 0x03, 0x99, 0x03, 0x06,
-- 0x00, 0x02, 0x03, 0x99, 0x03, 0x04, 0x00, 0x02, 0x03, 0x99, 0x03, 0x00, 0x00, 0x02, 0x03, 0x99,
-- 0x03, 0x01, 0x00, 0x02, 0x1F, 0xFE, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xFE, 0x03, 0x01, 0x00, 0x02,
-- 0x1F, 0xFE, 0x03, 0x42, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x06, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x04,
-- 0x00, 0x02, 0x03, 0xCB, 0x03, 0x00, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x44, 0x00, 0x02, 0x03, 0xC1,
-+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x4C, 0x09, 0x66, 0x11, 0x1A, 0x17, 0x08, 0x1C, 0xC2,
-+ 0x20, 0xBC, 0x24, 0x9E, 0x27, 0x3C, 0x29, 0x7A, 0x2B, 0x42, 0x2D, 0x22, 0x2E, 0xD2, 0x30, 0x80,
-+ 0x31, 0xE8, 0x33, 0x50, 0x34, 0xB8, 0x35, 0x94, 0x36, 0x70, 0x37, 0x4C, 0x38, 0x1A, 0x38, 0xE8,
-+ 0x39, 0xB6, 0x3A, 0x68, 0x3B, 0x1A, 0x3B, 0x40, 0x3B, 0x66, 0x3B, 0x8C, 0x3B, 0xB2, 0x3B, 0xD8,
-+ 0x3B, 0xFE, 0x3C, 0x24, 0x3C, 0x4A, 0x3C, 0x70, 0x3C, 0x96, 0x3C, 0xBC, 0x00, 0x01, 0x07, 0x46,
-+ 0x00, 0xE8, 0x01, 0xD6, 0x01, 0xDC, 0x01, 0xE2, 0x01, 0xE8, 0x01, 0xEE, 0x01, 0xF4, 0x01, 0xFA,
-+ 0x02, 0x00, 0x02, 0x06, 0x02, 0x0C, 0x02, 0x12, 0x02, 0x18, 0x02, 0x1E, 0x02, 0x24, 0x02, 0x2A,
-+ 0x02, 0x30, 0x02, 0x36, 0x02, 0x3C, 0x02, 0x42, 0x02, 0x48, 0x02, 0x4E, 0x02, 0x54, 0x02, 0x5A,
-+ 0x02, 0x60, 0x02, 0x66, 0x02, 0x6C, 0x02, 0x72, 0x02, 0x78, 0x02, 0x7E, 0x02, 0x84, 0x02, 0x8A,
-+ 0x02, 0x90, 0x02, 0x96, 0x02, 0x9C, 0x02, 0xA2, 0x02, 0xA8, 0x02, 0xAE, 0x02, 0xB4, 0x02, 0xBA,
-+ 0x02, 0xC0, 0x02, 0xC6, 0x02, 0xCC, 0x02, 0xD2, 0x02, 0xD8, 0x02, 0xDE, 0x02, 0xE4, 0x02, 0xEA,
-+ 0x02, 0xF0, 0x02, 0xF6, 0x02, 0xFC, 0x03, 0x02, 0x03, 0x08, 0x03, 0x0E, 0x03, 0x14, 0x03, 0x1A,
-+ 0x03, 0x20, 0x03, 0x26, 0x03, 0x2C, 0x03, 0x32, 0x03, 0x38, 0x03, 0x3E, 0x03, 0x44, 0x03, 0x4A,
-+ 0x03, 0x50, 0x03, 0x56, 0x03, 0x5C, 0x03, 0x62, 0x03, 0x68, 0x03, 0x6E, 0x03, 0x74, 0x03, 0x7A,
-+ 0x03, 0x80, 0x03, 0x86, 0x03, 0x8C, 0x03, 0x92, 0x03, 0x98, 0x03, 0x9E, 0x03, 0xA4, 0x03, 0xAA,
-+ 0x03, 0xB0, 0x03, 0xB6, 0x03, 0xBC, 0x03, 0xC2, 0x03, 0xC8, 0x03, 0xCE, 0x03, 0xD4, 0x03, 0xDA,
-+ 0x03, 0xE0, 0x03, 0xE6, 0x03, 0xEC, 0x03, 0xF2, 0x03, 0xF8, 0x03, 0xFE, 0x04, 0x04, 0x04, 0x0A,
-+ 0x04, 0x10, 0x04, 0x16, 0x04, 0x1C, 0x04, 0x22, 0x04, 0x28, 0x04, 0x2E, 0x04, 0x34, 0x04, 0x3A,
-+ 0x04, 0x40, 0x04, 0x46, 0x04, 0x4C, 0x04, 0x52, 0x04, 0x58, 0x04, 0x5E, 0x04, 0x64, 0x04, 0x6A,
-+ 0x04, 0x70, 0x04, 0x76, 0x04, 0x7C, 0x04, 0x82, 0x04, 0x88, 0x04, 0x8E, 0x04, 0x94, 0x04, 0x9A,
-+ 0x04, 0xA0, 0x04, 0xA6, 0x04, 0xAC, 0x04, 0xB2, 0x04, 0xB8, 0x04, 0xBE, 0x04, 0xC4, 0x04, 0xCA,
-+ 0x04, 0xD0, 0x04, 0xD6, 0x04, 0xDC, 0x04, 0xE2, 0x04, 0xE8, 0x04, 0xEE, 0x04, 0xF4, 0x04, 0xFA,
-+ 0x05, 0x00, 0x05, 0x06, 0x05, 0x0C, 0x05, 0x12, 0x05, 0x18, 0x05, 0x1E, 0x05, 0x24, 0x05, 0x2A,
-+ 0x05, 0x30, 0x05, 0x36, 0x05, 0x3C, 0x05, 0x42, 0x05, 0x48, 0x05, 0x4E, 0x05, 0x54, 0x05, 0x5A,
-+ 0x05, 0x60, 0x05, 0x66, 0x05, 0x6C, 0x05, 0x72, 0x05, 0x78, 0x05, 0x7E, 0x05, 0x84, 0x05, 0x8A,
-+ 0x05, 0x90, 0x05, 0x96, 0x05, 0x9C, 0x05, 0xA2, 0x05, 0xA8, 0x05, 0xAE, 0x05, 0xB4, 0x05, 0xBA,
-+ 0x05, 0xC0, 0x05, 0xC6, 0x05, 0xCC, 0x05, 0xD2, 0x05, 0xD8, 0x05, 0xDE, 0x05, 0xE4, 0x05, 0xEA,
-+ 0x05, 0xF0, 0x05, 0xF6, 0x05, 0xFC, 0x06, 0x02, 0x06, 0x08, 0x06, 0x0E, 0x06, 0x14, 0x06, 0x1A,
-+ 0x06, 0x20, 0x06, 0x26, 0x06, 0x2C, 0x06, 0x32, 0x06, 0x38, 0x06, 0x3E, 0x06, 0x44, 0x06, 0x4A,
-+ 0x06, 0x50, 0x06, 0x56, 0x06, 0x5C, 0x06, 0x62, 0x06, 0x68, 0x06, 0x6E, 0x06, 0x74, 0x06, 0x7A,
-+ 0x06, 0x80, 0x06, 0x86, 0x06, 0x8C, 0x06, 0x92, 0x06, 0x98, 0x06, 0x9E, 0x06, 0xA4, 0x06, 0xAA,
-+ 0x06, 0xB0, 0x06, 0xB6, 0x06, 0xBC, 0x06, 0xC2, 0x06, 0xC8, 0x06, 0xCE, 0x06, 0xD4, 0x06, 0xDA,
-+ 0x06, 0xE0, 0x06, 0xE6, 0x06, 0xEC, 0x06, 0xF2, 0x06, 0xF8, 0x06, 0xFE, 0x07, 0x04, 0x07, 0x0A,
-+ 0x07, 0x10, 0x07, 0x16, 0x07, 0x1C, 0x07, 0x22, 0x07, 0x28, 0x07, 0x2E, 0x07, 0x34, 0x07, 0x3A,
-+ 0x07, 0x40, 0x00, 0x02, 0x00, 0xA8, 0x03, 0x01, 0x00, 0x02, 0x03, 0x91, 0x03, 0x01, 0x00, 0x02,
-+ 0x03, 0x95, 0x03, 0x01, 0x00, 0x02, 0x03, 0x97, 0x03, 0x01, 0x00, 0x02, 0x03, 0x99, 0x03, 0x01,
-+ 0x00, 0x02, 0x03, 0x9F, 0x03, 0x01, 0x00, 0x02, 0x03, 0xA5, 0x03, 0x01, 0x00, 0x02, 0x03, 0xA9,
-+ 0x03, 0x01, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x44, 0x00, 0x02, 0x03, 0x99, 0x03, 0x08, 0x00, 0x02,
-+ 0x03, 0xA5, 0x03, 0x08, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x01, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x01,
-+ 0x00, 0x02, 0x03, 0xB7, 0x03, 0x01, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x01, 0x00, 0x02, 0x03, 0xC5,
-+ 0x03, 0x44, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x08, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x08, 0x00, 0x02,
-+ 0x03, 0xBF, 0x03, 0x01, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x01, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x01,
-+ 0x00, 0x02, 0x03, 0xD2, 0x03, 0x01, 0x00, 0x02, 0x03, 0xD2, 0x03, 0x08, 0x00, 0x02, 0x03, 0xB1,
-+ 0x03, 0x13, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x00, 0x03, 0x00, 0x00, 0x02,
-+ 0x1F, 0x01, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x00, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x01, 0x03, 0x01,
-+ 0x00, 0x02, 0x1F, 0x00, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x01, 0x03, 0x42, 0x00, 0x02, 0x03, 0x91,
-+ 0x03, 0x13, 0x00, 0x02, 0x03, 0x91, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x08, 0x03, 0x00, 0x00, 0x02,
-+ 0x1F, 0x09, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x08, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x09, 0x03, 0x01,
-+ 0x00, 0x02, 0x1F, 0x08, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x09, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB5,
-+ 0x03, 0x13, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x10, 0x03, 0x00, 0x00, 0x02,
-+ 0x1F, 0x11, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x10, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x11, 0x03, 0x01,
-+ 0x00, 0x02, 0x03, 0x95, 0x03, 0x13, 0x00, 0x02, 0x03, 0x95, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x18,
-+ 0x03, 0x00, 0x00, 0x02, 0x1F, 0x19, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x18, 0x03, 0x01, 0x00, 0x02,
-+ 0x1F, 0x19, 0x03, 0x01, 0x00, 0x02, 0x03, 0xB7, 0x03, 0x13, 0x00, 0x02, 0x03, 0xB7, 0x03, 0x14,
-+ 0x00, 0x02, 0x1F, 0x20, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x21, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x20,
-+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0x21, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x20, 0x03, 0x42, 0x00, 0x02,
-+ 0x1F, 0x21, 0x03, 0x42, 0x00, 0x02, 0x03, 0x97, 0x03, 0x13, 0x00, 0x02, 0x03, 0x97, 0x03, 0x14,
-+ 0x00, 0x02, 0x1F, 0x28, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x29, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x28,
-+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0x29, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x28, 0x03, 0x42, 0x00, 0x02,
-+ 0x1F, 0x29, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x13, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x14,
-+ 0x00, 0x02, 0x1F, 0x30, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x31, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x30,
-+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0x31, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x30, 0x03, 0x42, 0x00, 0x02,
-+ 0x1F, 0x31, 0x03, 0x42, 0x00, 0x02, 0x03, 0x99, 0x03, 0x13, 0x00, 0x02, 0x03, 0x99, 0x03, 0x14,
-+ 0x00, 0x02, 0x1F, 0x38, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x39, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x38,
-+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0x39, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x38, 0x03, 0x42, 0x00, 0x02,
-+ 0x1F, 0x39, 0x03, 0x42, 0x00, 0x02, 0x03, 0xBF, 0x03, 0x13, 0x00, 0x02, 0x03, 0xBF, 0x03, 0x14,
-+ 0x00, 0x02, 0x1F, 0x40, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x41, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x40,
-+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0x41, 0x03, 0x01, 0x00, 0x02, 0x03, 0x9F, 0x03, 0x13, 0x00, 0x02,
-+ 0x03, 0x9F, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x48, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x49, 0x03, 0x00,
-+ 0x00, 0x02, 0x1F, 0x48, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x49, 0x03, 0x01, 0x00, 0x02, 0x03, 0xC5,
-+ 0x03, 0x13, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x50, 0x03, 0x00, 0x00, 0x02,
-+ 0x1F, 0x51, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x50, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x51, 0x03, 0x01,
-+ 0x00, 0x02, 0x1F, 0x50, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x51, 0x03, 0x42, 0x00, 0x02, 0x03, 0xA5,
-+ 0x03, 0x14, 0x00, 0x02, 0x1F, 0x59, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x59, 0x03, 0x01, 0x00, 0x02,
-+ 0x1F, 0x59, 0x03, 0x42, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x13, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x14,
-+ 0x00, 0x02, 0x1F, 0x60, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x61, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x60,
-+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0x61, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x60, 0x03, 0x42, 0x00, 0x02,
-+ 0x1F, 0x61, 0x03, 0x42, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x13, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x14,
-+ 0x00, 0x02, 0x1F, 0x68, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x69, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x68,
-+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0x69, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x68, 0x03, 0x42, 0x00, 0x02,
-+ 0x1F, 0x69, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x00, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x00,
-+ 0x00, 0x02, 0x03, 0xB7, 0x03, 0x00, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x00, 0x00, 0x02, 0x03, 0xBF,
-+ 0x03, 0x00, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x00, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x00, 0x00, 0x02,
-+ 0x1F, 0x00, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x01, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x02, 0x03, 0x45,
-+ 0x00, 0x02, 0x1F, 0x03, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x04, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x05,
-+ 0x03, 0x45, 0x00, 0x02, 0x1F, 0x06, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x07, 0x03, 0x45, 0x00, 0x02,
-+ 0x1F, 0x08, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x09, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x0A, 0x03, 0x45,
-+ 0x00, 0x02, 0x1F, 0x0B, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x0C, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x0D,
-+ 0x03, 0x45, 0x00, 0x02, 0x1F, 0x0E, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x0F, 0x03, 0x45, 0x00, 0x02,
-+ 0x1F, 0x20, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x21, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x22, 0x03, 0x45,
-+ 0x00, 0x02, 0x1F, 0x23, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x24, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x25,
-+ 0x03, 0x45, 0x00, 0x02, 0x1F, 0x26, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x27, 0x03, 0x45, 0x00, 0x02,
-+ 0x1F, 0x28, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x29, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x2A, 0x03, 0x45,
-+ 0x00, 0x02, 0x1F, 0x2B, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x2C, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x2D,
-+ 0x03, 0x45, 0x00, 0x02, 0x1F, 0x2E, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x2F, 0x03, 0x45, 0x00, 0x02,
-+ 0x1F, 0x60, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x61, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x62, 0x03, 0x45,
-+ 0x00, 0x02, 0x1F, 0x63, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x64, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x65,
-+ 0x03, 0x45, 0x00, 0x02, 0x1F, 0x66, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x67, 0x03, 0x45, 0x00, 0x02,
-+ 0x1F, 0x68, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x69, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x6A, 0x03, 0x45,
-+ 0x00, 0x02, 0x1F, 0x6B, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x6C, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x6D,
-+ 0x03, 0x45, 0x00, 0x02, 0x1F, 0x6E, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x6F, 0x03, 0x45, 0x00, 0x02,
-+ 0x03, 0xB1, 0x03, 0x06, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x04, 0x00, 0x02, 0x1F, 0x70, 0x03, 0x45,
-+ 0x00, 0x02, 0x03, 0xB1, 0x03, 0x45, 0x00, 0x02, 0x03, 0xAC, 0x03, 0x45, 0x00, 0x02, 0x03, 0xB1,
-+ 0x03, 0x42, 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x42, 0x00, 0x02, 0x03, 0x91, 0x03, 0x06, 0x00, 0x02,
-+ 0x03, 0x91, 0x03, 0x04, 0x00, 0x02, 0x03, 0x91, 0x03, 0x00, 0x00, 0x02, 0x03, 0x91, 0x03, 0x45,
-+ 0x00, 0x02, 0x00, 0xA8, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x74, 0x03, 0x45, 0x00, 0x02, 0x03, 0xB7,
-+ 0x03, 0x45, 0x00, 0x02, 0x03, 0xAE, 0x03, 0x45, 0x00, 0x02, 0x03, 0xB7, 0x03, 0x42, 0x00, 0x02,
-+ 0x1F, 0xC3, 0x03, 0x42, 0x00, 0x02, 0x03, 0x95, 0x03, 0x00, 0x00, 0x02, 0x03, 0x97, 0x03, 0x00,
-+ 0x00, 0x02, 0x03, 0x97, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xBF, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xBF,
-+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0xBF, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x06, 0x00, 0x02,
-+ 0x03, 0xB9, 0x03, 0x04, 0x00, 0x02, 0x03, 0xCA, 0x03, 0x00, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x42,
-+ 0x00, 0x02, 0x03, 0xCA, 0x03, 0x42, 0x00, 0x02, 0x03, 0x99, 0x03, 0x06, 0x00, 0x02, 0x03, 0x99,
-+ 0x03, 0x04, 0x00, 0x02, 0x03, 0x99, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xFE, 0x03, 0x00, 0x00, 0x02,
-+ 0x1F, 0xFE, 0x03, 0x01, 0x00, 0x02, 0x1F, 0xFE, 0x03, 0x42, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x06,
-+ 0x00, 0x02, 0x03, 0xC5, 0x03, 0x04, 0x00, 0x02, 0x03, 0xCB, 0x03, 0x00, 0x00, 0x02, 0x03, 0xC1,
- 0x03, 0x13, 0x00, 0x02, 0x03, 0xC1, 0x03, 0x14, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x42, 0x00, 0x02,
- 0x03, 0xCB, 0x03, 0x42, 0x00, 0x02, 0x03, 0xA5, 0x03, 0x06, 0x00, 0x02, 0x03, 0xA5, 0x03, 0x04,
-- 0x00, 0x02, 0x03, 0xA5, 0x03, 0x00, 0x00, 0x02, 0x03, 0xA5, 0x03, 0x01, 0x00, 0x02, 0x03, 0xA1,
-- 0x03, 0x14, 0x00, 0x02, 0x00, 0xA8, 0x03, 0x00, 0x00, 0x02, 0x00, 0xA8, 0x03, 0x01, 0x00, 0x02,
-- 0x1F, 0x7C, 0x03, 0x45, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x45, 0x00, 0x02, 0x03, 0xCE, 0x03, 0x45,
-- 0x00, 0x02, 0x03, 0xC9, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x42, 0x00, 0x02, 0x03, 0x9F,
-- 0x03, 0x00, 0x00, 0x02, 0x03, 0x9F, 0x03, 0x01, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x00, 0x00, 0x02,
-- 0x03, 0xA9, 0x03, 0x01, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x45, 0x00, 0x01, 0x00, 0xF9, 0x03, 0x85,
-- 0x03, 0x86, 0x03, 0x88, 0x03, 0x89, 0x03, 0x8A, 0x03, 0x8C, 0x03, 0x8E, 0x03, 0x8F, 0x03, 0x90,
-- 0x03, 0xAA, 0x03, 0xAB, 0x03, 0xAC, 0x03, 0xAD, 0x03, 0xAE, 0x03, 0xAF, 0x03, 0xB0, 0x03, 0xCA,
-- 0x03, 0xCB, 0x03, 0xCC, 0x03, 0xCD, 0x03, 0xCE, 0x03, 0xD3, 0x03, 0xD4, 0x1F, 0x00, 0x1F, 0x01,
-- 0x1F, 0x02, 0x1F, 0x03, 0x1F, 0x04, 0x1F, 0x05, 0x1F, 0x06, 0x1F, 0x07, 0x1F, 0x08, 0x1F, 0x09,
-- 0x1F, 0x0A, 0x1F, 0x0B, 0x1F, 0x0C, 0x1F, 0x0D, 0x1F, 0x0E, 0x1F, 0x0F, 0x1F, 0x10, 0x1F, 0x11,
-- 0x1F, 0x12, 0x1F, 0x13, 0x1F, 0x14, 0x1F, 0x15, 0x1F, 0x18, 0x1F, 0x19, 0x1F, 0x1A, 0x1F, 0x1B,
-- 0x1F, 0x1C, 0x1F, 0x1D, 0x1F, 0x20, 0x1F, 0x21, 0x1F, 0x22, 0x1F, 0x23, 0x1F, 0x24, 0x1F, 0x25,
-- 0x1F, 0x26, 0x1F, 0x27, 0x1F, 0x28, 0x1F, 0x29, 0x1F, 0x2A, 0x1F, 0x2B, 0x1F, 0x2C, 0x1F, 0x2D,
-- 0x1F, 0x2E, 0x1F, 0x2F, 0x1F, 0x30, 0x1F, 0x31, 0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35,
-- 0x1F, 0x36, 0x1F, 0x37, 0x1F, 0x38, 0x1F, 0x39, 0x1F, 0x3A, 0x1F, 0x3B, 0x1F, 0x3C, 0x1F, 0x3D,
-- 0x1F, 0x3E, 0x1F, 0x3F, 0x1F, 0x40, 0x1F, 0x41, 0x1F, 0x42, 0x1F, 0x43, 0x1F, 0x44, 0x1F, 0x45,
-- 0x1F, 0x48, 0x1F, 0x49, 0x1F, 0x4A, 0x1F, 0x4B, 0x1F, 0x4C, 0x1F, 0x4D, 0x1F, 0x50, 0x1F, 0x51,
-- 0x1F, 0x52, 0x1F, 0x53, 0x1F, 0x54, 0x1F, 0x55, 0x1F, 0x56, 0x1F, 0x57, 0x1F, 0x59, 0x1F, 0x5B,
-- 0x1F, 0x5D, 0x1F, 0x5F, 0x1F, 0x60, 0x1F, 0x61, 0x1F, 0x62, 0x1F, 0x63, 0x1F, 0x64, 0x1F, 0x65,
-- 0x1F, 0x66, 0x1F, 0x67, 0x1F, 0x68, 0x1F, 0x69, 0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D,
-- 0x1F, 0x6E, 0x1F, 0x6F, 0x1F, 0x70, 0x1F, 0x71, 0x1F, 0x72, 0x1F, 0x73, 0x1F, 0x74, 0x1F, 0x75,
-- 0x1F, 0x76, 0x1F, 0x77, 0x1F, 0x78, 0x1F, 0x79, 0x1F, 0x7A, 0x1F, 0x7B, 0x1F, 0x7C, 0x1F, 0x7D,
-- 0x1F, 0x80, 0x1F, 0x81, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87,
-- 0x1F, 0x88, 0x1F, 0x89, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F,
-- 0x1F, 0x90, 0x1F, 0x91, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97,
-- 0x1F, 0x98, 0x1F, 0x99, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F,
-- 0x1F, 0xA0, 0x1F, 0xA1, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7,
-- 0x1F, 0xA8, 0x1F, 0xA9, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF,
-- 0x1F, 0xB0, 0x1F, 0xB1, 0x1F, 0xB2, 0x1F, 0xB3, 0x1F, 0xB4, 0x1F, 0xB6, 0x1F, 0xB7, 0x1F, 0xB8,
-- 0x1F, 0xB9, 0x1F, 0xBA, 0x1F, 0xBB, 0x1F, 0xBC, 0x1F, 0xC1, 0x1F, 0xC2, 0x1F, 0xC3, 0x1F, 0xC4,
-- 0x1F, 0xC6, 0x1F, 0xC7, 0x1F, 0xC8, 0x1F, 0xC9, 0x1F, 0xCA, 0x1F, 0xCB, 0x1F, 0xCC, 0x1F, 0xCD,
-- 0x1F, 0xCE, 0x1F, 0xCF, 0x1F, 0xD0, 0x1F, 0xD1, 0x1F, 0xD2, 0x1F, 0xD3, 0x1F, 0xD6, 0x1F, 0xD7,
-- 0x1F, 0xD8, 0x1F, 0xD9, 0x1F, 0xDA, 0x1F, 0xDB, 0x1F, 0xDD, 0x1F, 0xDE, 0x1F, 0xDF, 0x1F, 0xE0,
-- 0x1F, 0xE1, 0x1F, 0xE2, 0x1F, 0xE3, 0x1F, 0xE4, 0x1F, 0xE5, 0x1F, 0xE6, 0x1F, 0xE7, 0x1F, 0xE8,
-- 0x1F, 0xE9, 0x1F, 0xEA, 0x1F, 0xEB, 0x1F, 0xEC, 0x1F, 0xED, 0x1F, 0xEE, 0x1F, 0xF2, 0x1F, 0xF3,
-- 0x1F, 0xF4, 0x1F, 0xF6, 0x1F, 0xF7, 0x1F, 0xF8, 0x1F, 0xF9, 0x1F, 0xFA, 0x1F, 0xFB, 0x1F, 0xFC,
-- 0x00, 0x01, 0x06, 0xB8, 0x00, 0xD1, 0x01, 0xA8, 0x01, 0xAE, 0x01, 0xB4, 0x01, 0xBA, 0x01, 0xC0,
-- 0x01, 0xC6, 0x01, 0xCC, 0x01, 0xD2, 0x01, 0xD8, 0x01, 0xDE, 0x01, 0xE4, 0x01, 0xEA, 0x01, 0xF0,
-- 0x01, 0xF6, 0x01, 0xFC, 0x02, 0x02, 0x02, 0x08, 0x02, 0x0E, 0x02, 0x14, 0x02, 0x1A, 0x02, 0x20,
-- 0x02, 0x26, 0x02, 0x2C, 0x02, 0x32, 0x02, 0x38, 0x02, 0x40, 0x02, 0x48, 0x02, 0x4E, 0x02, 0x54,
-- 0x02, 0x5A, 0x02, 0x60, 0x02, 0x66, 0x02, 0x6E, 0x02, 0x76, 0x02, 0x7C, 0x02, 0x82, 0x02, 0x88,
-- 0x02, 0x8E, 0x02, 0x94, 0x02, 0x9A, 0x02, 0xA0, 0x02, 0xA6, 0x02, 0xAC, 0x02, 0xB2, 0x02, 0xB8,
-- 0x02, 0xBE, 0x02, 0xC4, 0x02, 0xCA, 0x02, 0xD0, 0x02, 0xD8, 0x02, 0xE0, 0x02, 0xE6, 0x02, 0xEC,
-- 0x02, 0xF2, 0x02, 0xF8, 0x02, 0xFE, 0x03, 0x06, 0x03, 0x0E, 0x03, 0x14, 0x03, 0x1A, 0x03, 0x20,
-- 0x03, 0x26, 0x03, 0x2C, 0x03, 0x32, 0x03, 0x3A, 0x03, 0x42, 0x03, 0x48, 0x03, 0x4E, 0x03, 0x54,
-- 0x03, 0x5A, 0x03, 0x60, 0x03, 0x68, 0x03, 0x70, 0x03, 0x76, 0x03, 0x7C, 0x03, 0x82, 0x03, 0x88,
-- 0x03, 0x8E, 0x03, 0x94, 0x03, 0x9A, 0x03, 0xA0, 0x03, 0xA6, 0x03, 0xAC, 0x03, 0xB2, 0x03, 0xB8,
-- 0x03, 0xBE, 0x03, 0xC4, 0x03, 0xCA, 0x03, 0xD2, 0x03, 0xDA, 0x03, 0xE0, 0x03, 0xE6, 0x03, 0xEE,
-- 0x03, 0xF4, 0x03, 0xFA, 0x04, 0x00, 0x04, 0x06, 0x04, 0x0C, 0x04, 0x14, 0x04, 0x1C, 0x04, 0x22,
-- 0x04, 0x28, 0x04, 0x2E, 0x04, 0x34, 0x04, 0x3A, 0x04, 0x40, 0x04, 0x48, 0x04, 0x50, 0x04, 0x56,
-- 0x04, 0x5C, 0x04, 0x62, 0x04, 0x68, 0x04, 0x6E, 0x04, 0x74, 0x04, 0x7A, 0x04, 0x80, 0x04, 0x86,
-- 0x04, 0x8C, 0x04, 0x92, 0x04, 0x98, 0x04, 0x9E, 0x04, 0xA4, 0x04, 0xAA, 0x04, 0xB0, 0x04, 0xB6,
-- 0x04, 0xBC, 0x04, 0xC2, 0x04, 0xC8, 0x04, 0xCE, 0x04, 0xD4, 0x04, 0xDA, 0x04, 0xE0, 0x04, 0xE6,
-- 0x04, 0xEC, 0x04, 0xF2, 0x04, 0xF8, 0x04, 0xFE, 0x05, 0x04, 0x05, 0x0A, 0x05, 0x10, 0x05, 0x16,
-- 0x05, 0x1C, 0x05, 0x22, 0x05, 0x28, 0x05, 0x2E, 0x05, 0x34, 0x05, 0x3A, 0x05, 0x40, 0x05, 0x46,
-- 0x05, 0x4C, 0x05, 0x52, 0x05, 0x58, 0x05, 0x5E, 0x05, 0x64, 0x05, 0x6A, 0x05, 0x70, 0x05, 0x76,
-- 0x05, 0x7C, 0x05, 0x82, 0x05, 0x88, 0x05, 0x8E, 0x05, 0x94, 0x05, 0x9A, 0x05, 0xA0, 0x05, 0xA6,
-- 0x05, 0xAC, 0x05, 0xB2, 0x05, 0xB8, 0x05, 0xBE, 0x05, 0xC4, 0x05, 0xCA, 0x05, 0xD0, 0x05, 0xD6,
-- 0x05, 0xDC, 0x05, 0xE2, 0x05, 0xE8, 0x05, 0xEE, 0x05, 0xF4, 0x05, 0xFA, 0x06, 0x00, 0x06, 0x06,
-- 0x06, 0x0C, 0x06, 0x12, 0x06, 0x18, 0x06, 0x1E, 0x06, 0x24, 0x06, 0x2A, 0x06, 0x30, 0x06, 0x36,
-- 0x06, 0x3E, 0x06, 0x44, 0x06, 0x4A, 0x06, 0x50, 0x06, 0x56, 0x06, 0x5C, 0x06, 0x62, 0x06, 0x68,
-- 0x06, 0x70, 0x06, 0x76, 0x06, 0x7C, 0x06, 0x82, 0x06, 0x88, 0x06, 0x8E, 0x06, 0x94, 0x06, 0x9A,
-- 0x06, 0xA0, 0x06, 0xA6, 0x06, 0xAC, 0x06, 0xB2, 0x00, 0x02, 0x00, 0xA8, 0x03, 0x41, 0x00, 0x02,
-- 0x03, 0x91, 0x03, 0x41, 0x00, 0x02, 0x03, 0x95, 0x03, 0x41, 0x00, 0x02, 0x03, 0x97, 0x03, 0x41,
-- 0x00, 0x02, 0x03, 0x99, 0x03, 0x41, 0x00, 0x02, 0x03, 0x9F, 0x03, 0x41, 0x00, 0x02, 0x03, 0xA5,
-- 0x03, 0x41, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x41, 0x00, 0x02, 0x03, 0xCA, 0x03, 0x01, 0x00, 0x02,
-- 0x03, 0xB1, 0x03, 0x41, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x41, 0x00, 0x02, 0x03, 0xB7, 0x03, 0x41,
-- 0x00, 0x02, 0x03, 0xB9, 0x03, 0x41, 0x00, 0x02, 0x03, 0xCB, 0x03, 0x01, 0x00, 0x02, 0x1F, 0xBE,
-- 0x03, 0x08, 0x00, 0x02, 0x03, 0xBF, 0x03, 0x41, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x41, 0x00, 0x02,
-- 0x03, 0xC9, 0x03, 0x41, 0x00, 0x02, 0x03, 0xD2, 0x03, 0x41, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x43,
-- 0x00, 0x02, 0x1F, 0x00, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x01, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x00,
-- 0x03, 0x41, 0x00, 0x02, 0x1F, 0x01, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x42,
-- 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0x91, 0x03, 0x43, 0x00, 0x02,
-- 0x1F, 0x08, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x09, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x08, 0x03, 0x41,
-- 0x00, 0x02, 0x1F, 0x09, 0x03, 0x41, 0x00, 0x03, 0x03, 0x91, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03,
-- 0x03, 0x91, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x10,
-- 0x03, 0x40, 0x00, 0x02, 0x1F, 0x11, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x10, 0x03, 0x41, 0x00, 0x02,
-- 0x1F, 0x11, 0x03, 0x41, 0x00, 0x02, 0x03, 0x95, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x18, 0x03, 0x40,
-- 0x00, 0x02, 0x1F, 0x19, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x18, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x19,
-- 0x03, 0x41, 0x00, 0x02, 0x03, 0xB7, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x20, 0x03, 0x40, 0x00, 0x02,
-- 0x1F, 0x21, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x20, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x21, 0x03, 0x41,
-- 0x00, 0x03, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x42,
-- 0x00, 0x02, 0x03, 0x97, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x28, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x29,
-- 0x03, 0x40, 0x00, 0x02, 0x1F, 0x28, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x29, 0x03, 0x41, 0x00, 0x03,
-- 0x03, 0x97, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02,
-- 0x03, 0xB9, 0x03, 0x43, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x30, 0x03, 0x40,
-- 0x00, 0x02, 0x1F, 0x31, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x30, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x31,
-- 0x03, 0x41, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x14,
-- 0x03, 0x42, 0x00, 0x02, 0x03, 0x99, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x38, 0x03, 0x40, 0x00, 0x02,
-- 0x1F, 0x39, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x38, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x39, 0x03, 0x41,
-- 0x00, 0x03, 0x03, 0x99, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0x99, 0x03, 0x14, 0x03, 0x42,
-- 0x00, 0x02, 0x03, 0xBF, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x40, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x41,
-- 0x03, 0x40, 0x00, 0x02, 0x1F, 0x40, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x41, 0x03, 0x41, 0x00, 0x02,
-- 0x03, 0x9F, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x48, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x49, 0x03, 0x40,
-- 0x00, 0x02, 0x1F, 0x48, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x49, 0x03, 0x41, 0x00, 0x02, 0x03, 0xC5,
-- 0x03, 0x43, 0x00, 0x02, 0x1F, 0x50, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x51, 0x03, 0x40, 0x00, 0x02,
-- 0x1F, 0x50, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x51, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x13,
-- 0x03, 0x42, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x59, 0x03, 0x40,
-- 0x00, 0x02, 0x1F, 0x59, 0x03, 0x41, 0x00, 0x03, 0x03, 0xA5, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02,
-- 0x03, 0xC9, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x60, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x61, 0x03, 0x40,
-- 0x00, 0x02, 0x1F, 0x60, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x61, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9,
-- 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0xA9,
-- 0x03, 0x43, 0x00, 0x02, 0x21, 0x26, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x68, 0x03, 0x40, 0x00, 0x02,
-- 0x1F, 0x69, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x68, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x69, 0x03, 0x41,
-- 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x42,
-- 0x00, 0x02, 0x03, 0xB1, 0x03, 0x40, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x41, 0x00, 0x02, 0x03, 0xB5,
-- 0x03, 0x40, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x41, 0x00, 0x02, 0x03, 0xB7, 0x03, 0x40, 0x00, 0x02,
-- 0x03, 0xB7, 0x03, 0x41, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x40, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x41,
-- 0x00, 0x02, 0x03, 0xBF, 0x03, 0x40, 0x00, 0x02, 0x03, 0xBF, 0x03, 0x41, 0x00, 0x02, 0x03, 0xC5,
-- 0x03, 0x40, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x41, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x40, 0x00, 0x02,
-- 0x03, 0xC9, 0x03, 0x41, 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x14,
-- 0x00, 0x02, 0x1F, 0x80, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x81, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x80,
-- 0x03, 0x01, 0x00, 0x02, 0x1F, 0x81, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x80, 0x03, 0x42, 0x00, 0x02,
-- 0x1F, 0x81, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xBC, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xBC, 0x03, 0x14,
-- 0x00, 0x02, 0x1F, 0x88, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x89, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x88,
-- 0x03, 0x01, 0x00, 0x02, 0x1F, 0x89, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x88, 0x03, 0x42, 0x00, 0x02,
-- 0x1F, 0x89, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x14,
-- 0x00, 0x02, 0x1F, 0x90, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x91, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x90,
-- 0x03, 0x01, 0x00, 0x02, 0x1F, 0x91, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x90, 0x03, 0x42, 0x00, 0x02,
-- 0x1F, 0x91, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xCC, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xCC, 0x03, 0x14,
-- 0x00, 0x02, 0x1F, 0x98, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x99, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x98,
-- 0x03, 0x01, 0x00, 0x02, 0x1F, 0x99, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x98, 0x03, 0x42, 0x00, 0x02,
-- 0x1F, 0x99, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x14,
-- 0x00, 0x02, 0x1F, 0xA0, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xA1, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xA0,
-- 0x03, 0x01, 0x00, 0x02, 0x1F, 0xA1, 0x03, 0x01, 0x00, 0x02, 0x1F, 0xA0, 0x03, 0x42, 0x00, 0x02,
-- 0x1F, 0xA1, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xFC, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xFC, 0x03, 0x14,
-- 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xA9, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xA8,
-- 0x03, 0x01, 0x00, 0x02, 0x1F, 0xA9, 0x03, 0x01, 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x42, 0x00, 0x02,
-- 0x1F, 0xA9, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x71, 0x03, 0x45,
-- 0x00, 0x02, 0x1F, 0xB6, 0x03, 0x45, 0x00, 0x02, 0x03, 0x91, 0x03, 0x40, 0x00, 0x02, 0x03, 0x91,
-- 0x03, 0x41, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x75, 0x03, 0x45, 0x00, 0x02,
-- 0x1F, 0xC6, 0x03, 0x45, 0x00, 0x02, 0x03, 0x95, 0x03, 0x40, 0x00, 0x02, 0x03, 0x95, 0x03, 0x41,
-- 0x00, 0x02, 0x03, 0x97, 0x03, 0x40, 0x00, 0x02, 0x03, 0x97, 0x03, 0x41, 0x00, 0x02, 0x1F, 0xBF,
-- 0x03, 0x40, 0x00, 0x02, 0x1F, 0xBF, 0x03, 0x41, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x06, 0x00, 0x02,
-- 0x1F, 0xBE, 0x03, 0x04, 0x00, 0x02, 0x03, 0xCA, 0x03, 0x40, 0x00, 0x02, 0x03, 0xCA, 0x03, 0x01,
-- 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x08, 0x03, 0x42, 0x00, 0x02,
-- 0x03, 0x99, 0x03, 0x40, 0x00, 0x02, 0x03, 0x99, 0x03, 0x41, 0x00, 0x02, 0x1F, 0xFE, 0x03, 0x40,
-- 0x00, 0x02, 0x1F, 0xFE, 0x03, 0x41, 0x00, 0x02, 0x03, 0xCB, 0x03, 0x40, 0x00, 0x02, 0x03, 0xCB,
-- 0x03, 0x01, 0x00, 0x02, 0x03, 0xC1, 0x03, 0x43, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x08, 0x03, 0x42,
-- 0x00, 0x02, 0x03, 0xA5, 0x03, 0x40, 0x00, 0x02, 0x03, 0xA5, 0x03, 0x41, 0x00, 0x02, 0x00, 0xA8,
-- 0x03, 0x40, 0x00, 0x02, 0x00, 0xA8, 0x03, 0x41, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x00, 0x00, 0x02,
-- 0x1F, 0x7D, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xF6, 0x03, 0x45, 0x00, 0x02, 0x03, 0x9F, 0x03, 0x40,
-- 0x00, 0x02, 0x03, 0x9F, 0x03, 0x41, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x40, 0x00, 0x02, 0x03, 0xA9,
-- 0x03, 0x41, 0x00, 0x02, 0x21, 0x26, 0x03, 0x45, 0x00, 0x01, 0x00, 0xD1, 0x03, 0x85, 0x03, 0x86,
-- 0x03, 0x88, 0x03, 0x89, 0x03, 0x8A, 0x03, 0x8C, 0x03, 0x8E, 0x03, 0x8F, 0x03, 0x90, 0x03, 0xAC,
-- 0x03, 0xAD, 0x03, 0xAE, 0x03, 0xAF, 0x03, 0xB0, 0x03, 0xCA, 0x03, 0xCC, 0x03, 0xCD, 0x03, 0xCE,
-- 0x03, 0xD3, 0x1F, 0x00, 0x1F, 0x02, 0x1F, 0x03, 0x1F, 0x04, 0x1F, 0x05, 0x1F, 0x06, 0x1F, 0x07,
-- 0x1F, 0x08, 0x1F, 0x0A, 0x1F, 0x0B, 0x1F, 0x0C, 0x1F, 0x0D, 0x1F, 0x0E, 0x1F, 0x0F, 0x1F, 0x10,
-- 0x1F, 0x12, 0x1F, 0x13, 0x1F, 0x14, 0x1F, 0x15, 0x1F, 0x18, 0x1F, 0x1A, 0x1F, 0x1B, 0x1F, 0x1C,
-- 0x1F, 0x1D, 0x1F, 0x20, 0x1F, 0x22, 0x1F, 0x23, 0x1F, 0x24, 0x1F, 0x25, 0x1F, 0x26, 0x1F, 0x27,
-- 0x1F, 0x28, 0x1F, 0x2A, 0x1F, 0x2B, 0x1F, 0x2C, 0x1F, 0x2D, 0x1F, 0x2E, 0x1F, 0x2F, 0x1F, 0x30,
-- 0x1F, 0x31, 0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x36, 0x1F, 0x37, 0x1F, 0x38,
-- 0x1F, 0x3A, 0x1F, 0x3B, 0x1F, 0x3C, 0x1F, 0x3D, 0x1F, 0x3E, 0x1F, 0x3F, 0x1F, 0x40, 0x1F, 0x42,
-- 0x1F, 0x43, 0x1F, 0x44, 0x1F, 0x45, 0x1F, 0x48, 0x1F, 0x4A, 0x1F, 0x4B, 0x1F, 0x4C, 0x1F, 0x4D,
-- 0x1F, 0x50, 0x1F, 0x52, 0x1F, 0x53, 0x1F, 0x54, 0x1F, 0x55, 0x1F, 0x56, 0x1F, 0x57, 0x1F, 0x5B,
-- 0x1F, 0x5D, 0x1F, 0x5F, 0x1F, 0x60, 0x1F, 0x62, 0x1F, 0x63, 0x1F, 0x64, 0x1F, 0x65, 0x1F, 0x66,
-- 0x1F, 0x67, 0x1F, 0x68, 0x1F, 0x69, 0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E,
-- 0x1F, 0x6F, 0x1F, 0x70, 0x1F, 0x71, 0x1F, 0x72, 0x1F, 0x73, 0x1F, 0x74, 0x1F, 0x75, 0x1F, 0x76,
-- 0x1F, 0x77, 0x1F, 0x78, 0x1F, 0x79, 0x1F, 0x7A, 0x1F, 0x7B, 0x1F, 0x7C, 0x1F, 0x7D, 0x1F, 0x80,
-+ 0x00, 0x02, 0x03, 0xA5, 0x03, 0x00, 0x00, 0x02, 0x03, 0xA1, 0x03, 0x14, 0x00, 0x02, 0x00, 0xA8,
-+ 0x03, 0x00, 0x00, 0x02, 0x1F, 0x7C, 0x03, 0x45, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x45, 0x00, 0x02,
-+ 0x03, 0xCE, 0x03, 0x45, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x42,
-+ 0x00, 0x02, 0x03, 0x9F, 0x03, 0x00, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x00, 0x00, 0x02, 0x03, 0xA9,
-+ 0x03, 0x45, 0x00, 0x01, 0x00, 0xE8, 0x03, 0x85, 0x03, 0x86, 0x03, 0x88, 0x03, 0x89, 0x03, 0x8A,
-+ 0x03, 0x8C, 0x03, 0x8E, 0x03, 0x8F, 0x03, 0x90, 0x03, 0xAA, 0x03, 0xAB, 0x03, 0xAC, 0x03, 0xAD,
-+ 0x03, 0xAE, 0x03, 0xAF, 0x03, 0xB0, 0x03, 0xCA, 0x03, 0xCB, 0x03, 0xCC, 0x03, 0xCD, 0x03, 0xCE,
-+ 0x03, 0xD3, 0x03, 0xD4, 0x1F, 0x00, 0x1F, 0x01, 0x1F, 0x02, 0x1F, 0x03, 0x1F, 0x04, 0x1F, 0x05,
-+ 0x1F, 0x06, 0x1F, 0x07, 0x1F, 0x08, 0x1F, 0x09, 0x1F, 0x0A, 0x1F, 0x0B, 0x1F, 0x0C, 0x1F, 0x0D,
-+ 0x1F, 0x0E, 0x1F, 0x0F, 0x1F, 0x10, 0x1F, 0x11, 0x1F, 0x12, 0x1F, 0x13, 0x1F, 0x14, 0x1F, 0x15,
-+ 0x1F, 0x18, 0x1F, 0x19, 0x1F, 0x1A, 0x1F, 0x1B, 0x1F, 0x1C, 0x1F, 0x1D, 0x1F, 0x20, 0x1F, 0x21,
-+ 0x1F, 0x22, 0x1F, 0x23, 0x1F, 0x24, 0x1F, 0x25, 0x1F, 0x26, 0x1F, 0x27, 0x1F, 0x28, 0x1F, 0x29,
-+ 0x1F, 0x2A, 0x1F, 0x2B, 0x1F, 0x2C, 0x1F, 0x2D, 0x1F, 0x2E, 0x1F, 0x2F, 0x1F, 0x30, 0x1F, 0x31,
-+ 0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x36, 0x1F, 0x37, 0x1F, 0x38, 0x1F, 0x39,
-+ 0x1F, 0x3A, 0x1F, 0x3B, 0x1F, 0x3C, 0x1F, 0x3D, 0x1F, 0x3E, 0x1F, 0x3F, 0x1F, 0x40, 0x1F, 0x41,
-+ 0x1F, 0x42, 0x1F, 0x43, 0x1F, 0x44, 0x1F, 0x45, 0x1F, 0x48, 0x1F, 0x49, 0x1F, 0x4A, 0x1F, 0x4B,
-+ 0x1F, 0x4C, 0x1F, 0x4D, 0x1F, 0x50, 0x1F, 0x51, 0x1F, 0x52, 0x1F, 0x53, 0x1F, 0x54, 0x1F, 0x55,
-+ 0x1F, 0x56, 0x1F, 0x57, 0x1F, 0x59, 0x1F, 0x5B, 0x1F, 0x5D, 0x1F, 0x5F, 0x1F, 0x60, 0x1F, 0x61,
-+ 0x1F, 0x62, 0x1F, 0x63, 0x1F, 0x64, 0x1F, 0x65, 0x1F, 0x66, 0x1F, 0x67, 0x1F, 0x68, 0x1F, 0x69,
-+ 0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x6F, 0x1F, 0x70, 0x1F, 0x72,
-+ 0x1F, 0x74, 0x1F, 0x76, 0x1F, 0x78, 0x1F, 0x7A, 0x1F, 0x7C, 0x1F, 0x80, 0x1F, 0x81, 0x1F, 0x82,
-+ 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88, 0x1F, 0x89, 0x1F, 0x8A,
-+ 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90, 0x1F, 0x91, 0x1F, 0x92,
-+ 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x99, 0x1F, 0x9A,
-+ 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0, 0x1F, 0xA1, 0x1F, 0xA2,
-+ 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8, 0x1F, 0xA9, 0x1F, 0xAA,
-+ 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB0, 0x1F, 0xB1, 0x1F, 0xB2,
-+ 0x1F, 0xB3, 0x1F, 0xB4, 0x1F, 0xB6, 0x1F, 0xB7, 0x1F, 0xB8, 0x1F, 0xB9, 0x1F, 0xBA, 0x1F, 0xBC,
-+ 0x1F, 0xC1, 0x1F, 0xC2, 0x1F, 0xC3, 0x1F, 0xC4, 0x1F, 0xC6, 0x1F, 0xC7, 0x1F, 0xC8, 0x1F, 0xCA,
-+ 0x1F, 0xCC, 0x1F, 0xCD, 0x1F, 0xCE, 0x1F, 0xCF, 0x1F, 0xD0, 0x1F, 0xD1, 0x1F, 0xD2, 0x1F, 0xD6,
-+ 0x1F, 0xD7, 0x1F, 0xD8, 0x1F, 0xD9, 0x1F, 0xDA, 0x1F, 0xDD, 0x1F, 0xDE, 0x1F, 0xDF, 0x1F, 0xE0,
-+ 0x1F, 0xE1, 0x1F, 0xE2, 0x1F, 0xE4, 0x1F, 0xE5, 0x1F, 0xE6, 0x1F, 0xE7, 0x1F, 0xE8, 0x1F, 0xE9,
-+ 0x1F, 0xEA, 0x1F, 0xEC, 0x1F, 0xED, 0x1F, 0xF2, 0x1F, 0xF3, 0x1F, 0xF4, 0x1F, 0xF6, 0x1F, 0xF7,
-+ 0x1F, 0xF8, 0x1F, 0xFA, 0x1F, 0xFC, 0x00, 0x01, 0x06, 0x30, 0x00, 0xC0, 0x01, 0x86, 0x01, 0x8C,
-+ 0x01, 0x92, 0x01, 0x98, 0x01, 0x9E, 0x01, 0xA4, 0x01, 0xAA, 0x01, 0xB0, 0x01, 0xB6, 0x01, 0xBC,
-+ 0x01, 0xC2, 0x01, 0xC8, 0x01, 0xCE, 0x01, 0xD4, 0x01, 0xDA, 0x01, 0xE0, 0x01, 0xE6, 0x01, 0xEC,
-+ 0x01, 0xF2, 0x01, 0xF8, 0x01, 0xFE, 0x02, 0x04, 0x02, 0x0A, 0x02, 0x10, 0x02, 0x16, 0x02, 0x1E,
-+ 0x02, 0x26, 0x02, 0x2C, 0x02, 0x32, 0x02, 0x38, 0x02, 0x3E, 0x02, 0x44, 0x02, 0x4C, 0x02, 0x54,
-+ 0x02, 0x5A, 0x02, 0x60, 0x02, 0x66, 0x02, 0x6C, 0x02, 0x72, 0x02, 0x78, 0x02, 0x7E, 0x02, 0x84,
-+ 0x02, 0x8A, 0x02, 0x90, 0x02, 0x96, 0x02, 0x9C, 0x02, 0xA2, 0x02, 0xA8, 0x02, 0xAE, 0x02, 0xB6,
-+ 0x02, 0xBE, 0x02, 0xC4, 0x02, 0xCA, 0x02, 0xD0, 0x02, 0xD6, 0x02, 0xDC, 0x02, 0xE4, 0x02, 0xEC,
-+ 0x02, 0xF2, 0x02, 0xF8, 0x02, 0xFE, 0x03, 0x04, 0x03, 0x0A, 0x03, 0x10, 0x03, 0x18, 0x03, 0x20,
-+ 0x03, 0x26, 0x03, 0x2C, 0x03, 0x32, 0x03, 0x38, 0x03, 0x3E, 0x03, 0x46, 0x03, 0x4E, 0x03, 0x54,
-+ 0x03, 0x5A, 0x03, 0x60, 0x03, 0x66, 0x03, 0x6C, 0x03, 0x72, 0x03, 0x78, 0x03, 0x7E, 0x03, 0x84,
-+ 0x03, 0x8A, 0x03, 0x90, 0x03, 0x96, 0x03, 0x9C, 0x03, 0xA2, 0x03, 0xA8, 0x03, 0xB0, 0x03, 0xB8,
-+ 0x03, 0xBE, 0x03, 0xC4, 0x03, 0xCC, 0x03, 0xD2, 0x03, 0xD8, 0x03, 0xDE, 0x03, 0xE4, 0x03, 0xEA,
-+ 0x03, 0xF2, 0x03, 0xFA, 0x04, 0x00, 0x04, 0x06, 0x04, 0x0C, 0x04, 0x12, 0x04, 0x18, 0x04, 0x1E,
-+ 0x04, 0x26, 0x04, 0x2E, 0x04, 0x34, 0x04, 0x3A, 0x04, 0x40, 0x04, 0x46, 0x04, 0x4C, 0x04, 0x52,
-+ 0x04, 0x58, 0x04, 0x5E, 0x04, 0x64, 0x04, 0x6A, 0x04, 0x70, 0x04, 0x76, 0x04, 0x7C, 0x04, 0x82,
-+ 0x04, 0x88, 0x04, 0x8E, 0x04, 0x94, 0x04, 0x9A, 0x04, 0xA0, 0x04, 0xA6, 0x04, 0xAC, 0x04, 0xB2,
-+ 0x04, 0xB8, 0x04, 0xBE, 0x04, 0xC4, 0x04, 0xCA, 0x04, 0xD0, 0x04, 0xD6, 0x04, 0xDC, 0x04, 0xE2,
-+ 0x04, 0xE8, 0x04, 0xEE, 0x04, 0xF4, 0x04, 0xFA, 0x05, 0x00, 0x05, 0x06, 0x05, 0x0C, 0x05, 0x12,
-+ 0x05, 0x18, 0x05, 0x1E, 0x05, 0x24, 0x05, 0x2A, 0x05, 0x30, 0x05, 0x36, 0x05, 0x3C, 0x05, 0x42,
-+ 0x05, 0x48, 0x05, 0x4E, 0x05, 0x54, 0x05, 0x5A, 0x05, 0x60, 0x05, 0x66, 0x05, 0x6C, 0x05, 0x72,
-+ 0x05, 0x78, 0x05, 0x7E, 0x05, 0x84, 0x05, 0x8A, 0x05, 0x90, 0x05, 0x96, 0x05, 0x9C, 0x05, 0xA2,
-+ 0x05, 0xA8, 0x05, 0xAE, 0x05, 0xB4, 0x05, 0xBA, 0x05, 0xC0, 0x05, 0xC6, 0x05, 0xCC, 0x05, 0xD2,
-+ 0x05, 0xDA, 0x05, 0xE0, 0x05, 0xE6, 0x05, 0xEC, 0x05, 0xF2, 0x05, 0xF8, 0x06, 0x00, 0x06, 0x06,
-+ 0x06, 0x0C, 0x06, 0x12, 0x06, 0x18, 0x06, 0x1E, 0x06, 0x24, 0x06, 0x2A, 0x00, 0x02, 0x00, 0xA8,
-+ 0x03, 0x41, 0x00, 0x02, 0x03, 0x91, 0x03, 0x41, 0x00, 0x02, 0x03, 0x95, 0x03, 0x41, 0x00, 0x02,
-+ 0x03, 0x97, 0x03, 0x41, 0x00, 0x02, 0x03, 0x99, 0x03, 0x41, 0x00, 0x02, 0x03, 0x9F, 0x03, 0x41,
-+ 0x00, 0x02, 0x03, 0xA5, 0x03, 0x41, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x41, 0x00, 0x02, 0x03, 0xCA,
-+ 0x03, 0x01, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x41, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x41, 0x00, 0x02,
-+ 0x03, 0xB7, 0x03, 0x41, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x41, 0x00, 0x02, 0x03, 0xCB, 0x03, 0x01,
-+ 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x08, 0x00, 0x02, 0x03, 0xBF, 0x03, 0x41, 0x00, 0x02, 0x03, 0xC5,
-+ 0x03, 0x41, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x41, 0x00, 0x02, 0x03, 0xD2, 0x03, 0x41, 0x00, 0x02,
-+ 0x03, 0xB1, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x00, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x01, 0x03, 0x40,
-+ 0x00, 0x02, 0x1F, 0x00, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x01, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB1,
-+ 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0x91,
-+ 0x03, 0x43, 0x00, 0x02, 0x1F, 0x08, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x09, 0x03, 0x40, 0x00, 0x02,
-+ 0x1F, 0x08, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x09, 0x03, 0x41, 0x00, 0x03, 0x03, 0x91, 0x03, 0x13,
-+ 0x03, 0x42, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x43,
-+ 0x00, 0x02, 0x1F, 0x10, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x11, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x10,
-+ 0x03, 0x41, 0x00, 0x02, 0x1F, 0x11, 0x03, 0x41, 0x00, 0x02, 0x03, 0x95, 0x03, 0x43, 0x00, 0x02,
-+ 0x1F, 0x18, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x19, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x18, 0x03, 0x41,
-+ 0x00, 0x02, 0x1F, 0x19, 0x03, 0x41, 0x00, 0x02, 0x03, 0xB7, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x20,
-+ 0x03, 0x40, 0x00, 0x02, 0x1F, 0x21, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x20, 0x03, 0x41, 0x00, 0x02,
-+ 0x1F, 0x21, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB7,
-+ 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0x97, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x28, 0x03, 0x40,
-+ 0x00, 0x02, 0x1F, 0x29, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x28, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x29,
-+ 0x03, 0x41, 0x00, 0x03, 0x03, 0x97, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14,
-+ 0x03, 0x42, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x43, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x14, 0x00, 0x02,
-+ 0x1F, 0x30, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x31, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x30, 0x03, 0x41,
-+ 0x00, 0x02, 0x1F, 0x31, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03,
-+ 0x03, 0xB9, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0x99, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x38,
-+ 0x03, 0x40, 0x00, 0x02, 0x1F, 0x39, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x38, 0x03, 0x41, 0x00, 0x02,
-+ 0x1F, 0x39, 0x03, 0x41, 0x00, 0x03, 0x03, 0x99, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0x99,
-+ 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0xBF, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x40, 0x03, 0x40,
-+ 0x00, 0x02, 0x1F, 0x41, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x40, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x41,
-+ 0x03, 0x41, 0x00, 0x02, 0x03, 0x9F, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x48, 0x03, 0x40, 0x00, 0x02,
-+ 0x1F, 0x49, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x48, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x49, 0x03, 0x41,
-+ 0x00, 0x02, 0x03, 0xC5, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x50, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x51,
-+ 0x03, 0x40, 0x00, 0x02, 0x1F, 0x50, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x51, 0x03, 0x41, 0x00, 0x03,
-+ 0x03, 0xC5, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02,
-+ 0x1F, 0x59, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x59, 0x03, 0x41, 0x00, 0x03, 0x03, 0xA5, 0x03, 0x14,
-+ 0x03, 0x42, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x60, 0x03, 0x40, 0x00, 0x02,
-+ 0x1F, 0x61, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x60, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x61, 0x03, 0x41,
-+ 0x00, 0x03, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x42,
-+ 0x00, 0x02, 0x03, 0xA9, 0x03, 0x43, 0x00, 0x02, 0x21, 0x26, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x68,
-+ 0x03, 0x40, 0x00, 0x02, 0x1F, 0x69, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x68, 0x03, 0x41, 0x00, 0x02,
-+ 0x1F, 0x69, 0x03, 0x41, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xA9,
-+ 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x40, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x40,
-+ 0x00, 0x02, 0x03, 0xB7, 0x03, 0x40, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x40, 0x00, 0x02, 0x03, 0xBF,
-+ 0x03, 0x40, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x40, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x40, 0x00, 0x02,
-+ 0x1F, 0xB3, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x80, 0x03, 0x00,
-+ 0x00, 0x02, 0x1F, 0x81, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x80, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x81,
-+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0x80, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x81, 0x03, 0x42, 0x00, 0x02,
-+ 0x1F, 0xBC, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xBC, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x88, 0x03, 0x00,
-+ 0x00, 0x02, 0x1F, 0x89, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x88, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x89,
-+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0x88, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x89, 0x03, 0x42, 0x00, 0x02,
-+ 0x1F, 0xC3, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x90, 0x03, 0x00,
-+ 0x00, 0x02, 0x1F, 0x91, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x90, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x91,
-+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0x90, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x91, 0x03, 0x42, 0x00, 0x02,
-+ 0x1F, 0xCC, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xCC, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x98, 0x03, 0x00,
-+ 0x00, 0x02, 0x1F, 0x99, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x98, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x99,
-+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0x98, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x99, 0x03, 0x42, 0x00, 0x02,
-+ 0x1F, 0xF3, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x14, 0x00, 0x02, 0x1F, 0xA0, 0x03, 0x00,
-+ 0x00, 0x02, 0x1F, 0xA1, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xA0, 0x03, 0x01, 0x00, 0x02, 0x1F, 0xA1,
-+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0xA0, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xA1, 0x03, 0x42, 0x00, 0x02,
-+ 0x1F, 0xFC, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xFC, 0x03, 0x14, 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x00,
-+ 0x00, 0x02, 0x1F, 0xA9, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x01, 0x00, 0x02, 0x1F, 0xA9,
-+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xA9, 0x03, 0x42, 0x00, 0x02,
-+ 0x1F, 0xB3, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x71, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xB6, 0x03, 0x45,
-+ 0x00, 0x02, 0x03, 0x91, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x75,
-+ 0x03, 0x45, 0x00, 0x02, 0x1F, 0xC6, 0x03, 0x45, 0x00, 0x02, 0x03, 0x95, 0x03, 0x40, 0x00, 0x02,
-+ 0x03, 0x97, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xBF, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xBF, 0x03, 0x41,
-+ 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x06, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x04, 0x00, 0x02, 0x03, 0xCA,
-+ 0x03, 0x40, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x08, 0x03, 0x42,
-+ 0x00, 0x02, 0x03, 0x99, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xFE, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xFE,
-+ 0x03, 0x41, 0x00, 0x02, 0x03, 0xCB, 0x03, 0x40, 0x00, 0x02, 0x03, 0xC1, 0x03, 0x43, 0x00, 0x03,
-+ 0x03, 0xC5, 0x03, 0x08, 0x03, 0x42, 0x00, 0x02, 0x03, 0xA5, 0x03, 0x40, 0x00, 0x02, 0x00, 0xA8,
-+ 0x03, 0x40, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x7D, 0x03, 0x45, 0x00, 0x02,
-+ 0x1F, 0xF6, 0x03, 0x45, 0x00, 0x02, 0x03, 0x9F, 0x03, 0x40, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x40,
-+ 0x00, 0x02, 0x21, 0x26, 0x03, 0x45, 0x00, 0x01, 0x00, 0xC0, 0x03, 0x85, 0x03, 0x86, 0x03, 0x88,
-+ 0x03, 0x89, 0x03, 0x8A, 0x03, 0x8C, 0x03, 0x8E, 0x03, 0x8F, 0x03, 0x90, 0x03, 0xAC, 0x03, 0xAD,
-+ 0x03, 0xAE, 0x03, 0xAF, 0x03, 0xB0, 0x03, 0xCA, 0x03, 0xCC, 0x03, 0xCD, 0x03, 0xCE, 0x03, 0xD3,
-+ 0x1F, 0x00, 0x1F, 0x02, 0x1F, 0x03, 0x1F, 0x04, 0x1F, 0x05, 0x1F, 0x06, 0x1F, 0x07, 0x1F, 0x08,
-+ 0x1F, 0x0A, 0x1F, 0x0B, 0x1F, 0x0C, 0x1F, 0x0D, 0x1F, 0x0E, 0x1F, 0x0F, 0x1F, 0x10, 0x1F, 0x12,
-+ 0x1F, 0x13, 0x1F, 0x14, 0x1F, 0x15, 0x1F, 0x18, 0x1F, 0x1A, 0x1F, 0x1B, 0x1F, 0x1C, 0x1F, 0x1D,
-+ 0x1F, 0x20, 0x1F, 0x22, 0x1F, 0x23, 0x1F, 0x24, 0x1F, 0x25, 0x1F, 0x26, 0x1F, 0x27, 0x1F, 0x28,
-+ 0x1F, 0x2A, 0x1F, 0x2B, 0x1F, 0x2C, 0x1F, 0x2D, 0x1F, 0x2E, 0x1F, 0x2F, 0x1F, 0x30, 0x1F, 0x31,
-+ 0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x36, 0x1F, 0x37, 0x1F, 0x38, 0x1F, 0x3A,
-+ 0x1F, 0x3B, 0x1F, 0x3C, 0x1F, 0x3D, 0x1F, 0x3E, 0x1F, 0x3F, 0x1F, 0x40, 0x1F, 0x42, 0x1F, 0x43,
-+ 0x1F, 0x44, 0x1F, 0x45, 0x1F, 0x48, 0x1F, 0x4A, 0x1F, 0x4B, 0x1F, 0x4C, 0x1F, 0x4D, 0x1F, 0x50,
-+ 0x1F, 0x52, 0x1F, 0x53, 0x1F, 0x54, 0x1F, 0x55, 0x1F, 0x56, 0x1F, 0x57, 0x1F, 0x5B, 0x1F, 0x5D,
-+ 0x1F, 0x5F, 0x1F, 0x60, 0x1F, 0x62, 0x1F, 0x63, 0x1F, 0x64, 0x1F, 0x65, 0x1F, 0x66, 0x1F, 0x67,
-+ 0x1F, 0x68, 0x1F, 0x69, 0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x6F,
-+ 0x1F, 0x70, 0x1F, 0x72, 0x1F, 0x74, 0x1F, 0x76, 0x1F, 0x78, 0x1F, 0x7A, 0x1F, 0x7C, 0x1F, 0x80,
- 0x1F, 0x81, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88,
- 0x1F, 0x89, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90,
- 0x1F, 0x91, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98,
- 0x1F, 0x99, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0,
- 0x1F, 0xA1, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8,
- 0x1F, 0xA9, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB2,
-- 0x1F, 0xB4, 0x1F, 0xB7, 0x1F, 0xBA, 0x1F, 0xBB, 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xC7, 0x1F, 0xC8,
-- 0x1F, 0xC9, 0x1F, 0xCA, 0x1F, 0xCB, 0x1F, 0xCD, 0x1F, 0xCE, 0x1F, 0xD0, 0x1F, 0xD1, 0x1F, 0xD2,
-- 0x1F, 0xD3, 0x1F, 0xD6, 0x1F, 0xD7, 0x1F, 0xDA, 0x1F, 0xDB, 0x1F, 0xDD, 0x1F, 0xDE, 0x1F, 0xE2,
-- 0x1F, 0xE3, 0x1F, 0xE4, 0x1F, 0xE7, 0x1F, 0xEA, 0x1F, 0xEB, 0x1F, 0xED, 0x1F, 0xEE, 0x1F, 0xF2,
-- 0x1F, 0xF4, 0x1F, 0xF7, 0x1F, 0xF8, 0x1F, 0xF9, 0x1F, 0xFA, 0x1F, 0xFB, 0x1F, 0xFC, 0x00, 0x01,
-- 0x05, 0x00, 0x00, 0x89, 0x01, 0x18, 0x01, 0x1E, 0x01, 0x24, 0x01, 0x2A, 0x01, 0x30, 0x01, 0x38,
-- 0x01, 0x40, 0x01, 0x48, 0x01, 0x50, 0x01, 0x58, 0x01, 0x60, 0x01, 0x68, 0x01, 0x70, 0x01, 0x78,
-- 0x01, 0x80, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA0, 0x01, 0xA8, 0x01, 0xB0, 0x01, 0xB8,
-- 0x01, 0xC0, 0x01, 0xC8, 0x01, 0xD0, 0x01, 0xD8, 0x01, 0xE0, 0x01, 0xE8, 0x01, 0xF0, 0x01, 0xF8,
-- 0x02, 0x00, 0x02, 0x08, 0x02, 0x10, 0x02, 0x16, 0x02, 0x1E, 0x02, 0x26, 0x02, 0x2E, 0x02, 0x36,
-- 0x02, 0x3E, 0x02, 0x46, 0x02, 0x4E, 0x02, 0x56, 0x02, 0x5E, 0x02, 0x66, 0x02, 0x6E, 0x02, 0x76,
-- 0x02, 0x7E, 0x02, 0x86, 0x02, 0x8E, 0x02, 0x96, 0x02, 0x9E, 0x02, 0xA6, 0x02, 0xAE, 0x02, 0xB6,
-- 0x02, 0xBE, 0x02, 0xC6, 0x02, 0xCE, 0x02, 0xD6, 0x02, 0xDE, 0x02, 0xE6, 0x02, 0xEE, 0x02, 0xF6,
-- 0x02, 0xFE, 0x03, 0x06, 0x03, 0x0E, 0x03, 0x14, 0x03, 0x1C, 0x03, 0x24, 0x03, 0x2C, 0x03, 0x34,
-- 0x03, 0x3C, 0x03, 0x44, 0x03, 0x4A, 0x03, 0x50, 0x03, 0x56, 0x03, 0x5E, 0x03, 0x64, 0x03, 0x6A,
-- 0x03, 0x70, 0x03, 0x76, 0x03, 0x7E, 0x03, 0x86, 0x03, 0x8C, 0x03, 0x94, 0x03, 0x9A, 0x03, 0xA0,
-- 0x03, 0xA6, 0x03, 0xAC, 0x03, 0xB4, 0x03, 0xBC, 0x03, 0xC2, 0x03, 0xCA, 0x03, 0xD0, 0x03, 0xD6,
-- 0x03, 0xDC, 0x03, 0xE2, 0x03, 0xEA, 0x03, 0xF2, 0x03, 0xF8, 0x04, 0x00, 0x04, 0x06, 0x04, 0x0C,
-- 0x04, 0x12, 0x04, 0x18, 0x04, 0x20, 0x04, 0x28, 0x04, 0x2E, 0x04, 0x36, 0x04, 0x3C, 0x04, 0x42,
-- 0x04, 0x48, 0x04, 0x4E, 0x04, 0x56, 0x04, 0x5E, 0x04, 0x64, 0x04, 0x6C, 0x04, 0x72, 0x04, 0x78,
-- 0x04, 0x7E, 0x04, 0x84, 0x04, 0x8C, 0x04, 0x94, 0x04, 0x9A, 0x04, 0xA0, 0x04, 0xA8, 0x04, 0xAE,
-- 0x04, 0xB4, 0x04, 0xBC, 0x04, 0xC4, 0x04, 0xCA, 0x04, 0xD2, 0x04, 0xDA, 0x04, 0xE0, 0x04, 0xE6,
-- 0x04, 0xEC, 0x04, 0xF4, 0x04, 0xFA, 0x00, 0x02, 0x21, 0x26, 0x03, 0x01, 0x00, 0x02, 0x03, 0xCA,
-- 0x03, 0x41, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x01, 0x00, 0x02, 0x03, 0xCB, 0x03, 0x41, 0x00, 0x03,
-- 0x03, 0xB1, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03,
-- 0x03, 0xB1, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03,
-- 0x03, 0xB1, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03, 0x03, 0x91, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03,
-- 0x03, 0x91, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0x91, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03,
-- 0x03, 0x91, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0x91, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03,
-- 0x03, 0xB5, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03,
-- 0x03, 0xB5, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03,
-- 0x03, 0x95, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0x95, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03,
-- 0x03, 0x95, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0x95, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03,
-- 0x03, 0xB7, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03,
-- 0x03, 0xB7, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03,
-- 0x03, 0xB7, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03, 0x03, 0x97, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03,
-- 0x03, 0x97, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0x97, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03,
-- 0x03, 0x97, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0x97, 0x03, 0x43, 0x03, 0x42, 0x00, 0x02,
-- 0x1F, 0xBE, 0x03, 0x13, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB9,
-- 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB9,
-- 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xBE,
-- 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0x99, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0x99,
-- 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0x99, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0x99,
-- 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0x99, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03, 0x03, 0xBF,
-- 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0xBF,
-- 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0x9F,
-- 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0x9F,
-- 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC5,
-- 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0xC5,
-- 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC5,
-- 0x03, 0x43, 0x03, 0x42, 0x00, 0x03, 0x03, 0xA5, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0xA5,
-- 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xC9,
-- 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC9,
-- 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x42, 0x00, 0x02, 0x21, 0x26,
-- 0x03, 0x13, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x14,
-- 0x03, 0x00, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x14,
-- 0x03, 0x01, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03, 0x21, 0x26, 0x03, 0x14,
-- 0x03, 0x42, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x01, 0x00, 0x02,
-- 0x1F, 0xB3, 0x03, 0x43, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x80,
-- 0x03, 0x40, 0x00, 0x02, 0x1F, 0x81, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x80, 0x03, 0x41, 0x00, 0x02,
-- 0x1F, 0x81, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x01,
-- 0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xBC, 0x03, 0x43, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14,
-- 0x03, 0x45, 0x00, 0x02, 0x1F, 0x88, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x89, 0x03, 0x40, 0x00, 0x02,
-- 0x1F, 0x88, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x89, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x08, 0x03, 0x42,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x43,
-- 0x00, 0x03, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x90, 0x03, 0x40, 0x00, 0x02,
-- 0x1F, 0x91, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x90, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x91, 0x03, 0x41,
-- 0x00, 0x03, 0x1F, 0x20, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x42, 0x03, 0x45,
-- 0x00, 0x02, 0x1F, 0xCC, 0x03, 0x43, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14, 0x03, 0x45, 0x00, 0x02,
-- 0x1F, 0x98, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x99, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x98, 0x03, 0x41,
-- 0x00, 0x02, 0x1F, 0x99, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03,
-- 0x1F, 0x29, 0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x43, 0x00, 0x03, 0x03, 0xC9,
-- 0x03, 0x14, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xA0, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xA1, 0x03, 0x40,
-- 0x00, 0x02, 0x1F, 0xA0, 0x03, 0x41, 0x00, 0x02, 0x1F, 0xA1, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x60,
-- 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xFC,
-- 0x03, 0x43, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x40,
-- 0x00, 0x02, 0x1F, 0xA9, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x41, 0x00, 0x02, 0x1F, 0xA9,
-- 0x03, 0x41, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x42,
-- 0x03, 0x45, 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x01, 0x00, 0x03,
-- 0x03, 0xB1, 0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xC3,
-- 0x03, 0x01, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x08,
-- 0x03, 0x00, 0x00, 0x02, 0x03, 0xCA, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x08, 0x03, 0x42,
-- 0x00, 0x03, 0x03, 0xC5, 0x03, 0x08, 0x03, 0x00, 0x00, 0x02, 0x03, 0xCB, 0x03, 0x41, 0x00, 0x02,
-- 0x1F, 0xF3, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x42,
-- 0x03, 0x45, 0x00, 0x02, 0x21, 0x26, 0x03, 0x00, 0x00, 0x02, 0x21, 0x26, 0x03, 0x01, 0x00, 0x01,
-- 0x00, 0x89, 0x03, 0x8F, 0x03, 0x90, 0x03, 0xAF, 0x03, 0xB0, 0x1F, 0x02, 0x1F, 0x03, 0x1F, 0x04,
-- 0x1F, 0x05, 0x1F, 0x06, 0x1F, 0x0A, 0x1F, 0x0B, 0x1F, 0x0C, 0x1F, 0x0D, 0x1F, 0x0E, 0x1F, 0x12,
-- 0x1F, 0x13, 0x1F, 0x14, 0x1F, 0x15, 0x1F, 0x1A, 0x1F, 0x1B, 0x1F, 0x1C, 0x1F, 0x1D, 0x1F, 0x22,
-- 0x1F, 0x23, 0x1F, 0x24, 0x1F, 0x25, 0x1F, 0x26, 0x1F, 0x2A, 0x1F, 0x2B, 0x1F, 0x2C, 0x1F, 0x2D,
-- 0x1F, 0x2E, 0x1F, 0x30, 0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x36, 0x1F, 0x37,
-- 0x1F, 0x3A, 0x1F, 0x3B, 0x1F, 0x3C, 0x1F, 0x3D, 0x1F, 0x3E, 0x1F, 0x42, 0x1F, 0x43, 0x1F, 0x44,
-- 0x1F, 0x45, 0x1F, 0x4A, 0x1F, 0x4B, 0x1F, 0x4C, 0x1F, 0x4D, 0x1F, 0x52, 0x1F, 0x53, 0x1F, 0x54,
-- 0x1F, 0x55, 0x1F, 0x56, 0x1F, 0x5B, 0x1F, 0x5D, 0x1F, 0x62, 0x1F, 0x63, 0x1F, 0x64, 0x1F, 0x65,
-- 0x1F, 0x66, 0x1F, 0x68, 0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x6F,
-- 0x1F, 0x76, 0x1F, 0x77, 0x1F, 0x80, 0x1F, 0x81, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85,
-- 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88, 0x1F, 0x89, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D,
-- 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90, 0x1F, 0x91, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95,
-- 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x99, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D,
-- 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0, 0x1F, 0xA1, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5,
-- 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8, 0x1F, 0xA9, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD,
-- 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB2, 0x1F, 0xB4, 0x1F, 0xB7, 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xC7,
-- 0x1F, 0xD2, 0x1F, 0xD3, 0x1F, 0xD7, 0x1F, 0xE2, 0x1F, 0xE3, 0x1F, 0xF2, 0x1F, 0xF4, 0x1F, 0xF7,
-- 0x1F, 0xFA, 0x1F, 0xFB, 0x00, 0x01, 0x04, 0xE2, 0x00, 0x7F, 0x01, 0x04, 0x01, 0x0A, 0x01, 0x10,
-- 0x01, 0x16, 0x01, 0x1E, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x36, 0x01, 0x3E, 0x01, 0x46, 0x01, 0x4E,
-- 0x01, 0x56, 0x01, 0x5E, 0x01, 0x66, 0x01, 0x6E, 0x01, 0x76, 0x01, 0x7E, 0x01, 0x86, 0x01, 0x8E,
-- 0x01, 0x96, 0x01, 0x9E, 0x01, 0xA6, 0x01, 0xAE, 0x01, 0xB6, 0x01, 0xBE, 0x01, 0xC6, 0x01, 0xCE,
-- 0x01, 0xD6, 0x01, 0xDE, 0x01, 0xE4, 0x01, 0xEC, 0x01, 0xF4, 0x01, 0xFC, 0x02, 0x04, 0x02, 0x0C,
-- 0x02, 0x14, 0x02, 0x1C, 0x02, 0x24, 0x02, 0x2C, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x44, 0x02, 0x4C,
-- 0x02, 0x54, 0x02, 0x5C, 0x02, 0x64, 0x02, 0x6C, 0x02, 0x74, 0x02, 0x7C, 0x02, 0x84, 0x02, 0x8C,
-- 0x02, 0x94, 0x02, 0x9C, 0x02, 0xA4, 0x02, 0xAC, 0x02, 0xB4, 0x02, 0xBC, 0x02, 0xC2, 0x02, 0xCA,
-- 0x02, 0xD2, 0x02, 0xDA, 0x02, 0xE2, 0x02, 0xEA, 0x02, 0xF0, 0x02, 0xF6, 0x02, 0xFE, 0x03, 0x06,
-- 0x03, 0x0E, 0x03, 0x16, 0x03, 0x1E, 0x03, 0x26, 0x03, 0x2E, 0x03, 0x36, 0x03, 0x3E, 0x03, 0x46,
-- 0x03, 0x4E, 0x03, 0x56, 0x03, 0x5E, 0x03, 0x66, 0x03, 0x6E, 0x03, 0x76, 0x03, 0x7E, 0x03, 0x86,
-- 0x03, 0x8E, 0x03, 0x96, 0x03, 0x9E, 0x03, 0xA6, 0x03, 0xAE, 0x03, 0xB6, 0x03, 0xBE, 0x03, 0xC6,
-- 0x03, 0xCE, 0x03, 0xD6, 0x03, 0xDE, 0x03, 0xE6, 0x03, 0xEE, 0x03, 0xF6, 0x03, 0xFE, 0x04, 0x06,
-- 0x04, 0x0E, 0x04, 0x16, 0x04, 0x1E, 0x04, 0x26, 0x04, 0x2E, 0x04, 0x36, 0x04, 0x3E, 0x04, 0x46,
-- 0x04, 0x4E, 0x04, 0x56, 0x04, 0x5E, 0x04, 0x66, 0x04, 0x6E, 0x04, 0x76, 0x04, 0x7E, 0x04, 0x84,
-- 0x04, 0x8C, 0x04, 0x94, 0x04, 0x9A, 0x04, 0xA2, 0x04, 0xAA, 0x04, 0xB0, 0x04, 0xB8, 0x04, 0xC0,
-- 0x04, 0xC8, 0x04, 0xCE, 0x04, 0xD6, 0x04, 0xDC, 0x00, 0x02, 0x21, 0x26, 0x03, 0x41, 0x00, 0x02,
-- 0x1F, 0xBE, 0x03, 0x44, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x08,
-- 0x03, 0x01, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14,
-- 0x03, 0x40, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14,
-- 0x03, 0x41, 0x00, 0x03, 0x03, 0x91, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14,
-- 0x03, 0x40, 0x00, 0x03, 0x03, 0x91, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14,
-- 0x03, 0x41, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x14,
-- 0x03, 0x40, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x14,
-- 0x03, 0x41, 0x00, 0x03, 0x03, 0x95, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x95, 0x03, 0x14,
-- 0x03, 0x40, 0x00, 0x03, 0x03, 0x95, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x95, 0x03, 0x14,
-- 0x03, 0x41, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x14,
-- 0x03, 0x40, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x14,
-- 0x03, 0x41, 0x00, 0x03, 0x03, 0x97, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14,
-- 0x03, 0x40, 0x00, 0x03, 0x03, 0x97, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14,
-- 0x03, 0x41, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x43, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x40,
-- 0x00, 0x03, 0x03, 0xB9, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x41,
-- 0x00, 0x03, 0x03, 0xB9, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x13, 0x03, 0x42,
-- 0x00, 0x03, 0x03, 0x99, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x99, 0x03, 0x14, 0x03, 0x40,
-- 0x00, 0x03, 0x03, 0x99, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x99, 0x03, 0x14, 0x03, 0x41,
-- 0x00, 0x03, 0x03, 0xBF, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x14, 0x03, 0x40,
-- 0x00, 0x03, 0x03, 0xBF, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x14, 0x03, 0x41,
-- 0x00, 0x03, 0x03, 0x9F, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x14, 0x03, 0x40,
-- 0x00, 0x03, 0x03, 0x9F, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x14, 0x03, 0x41,
-- 0x00, 0x03, 0x03, 0xC5, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x40,
-- 0x00, 0x03, 0x03, 0xC5, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x41,
-- 0x00, 0x03, 0x03, 0xA5, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xA5, 0x03, 0x14, 0x03, 0x41,
-- 0x00, 0x03, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x40,
-- 0x00, 0x03, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x41,
-- 0x00, 0x02, 0x21, 0x26, 0x03, 0x43, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03,
-- 0x03, 0xA9, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03,
-- 0x03, 0xA9, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x21, 0x26, 0x03, 0x13, 0x03, 0x42, 0x00, 0x02,
-- 0x1F, 0xBE, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x13,
-- 0x03, 0x45, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x14, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x00,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x01,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x45,
-- 0x03, 0x42, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0x91, 0x03, 0x13,
-- 0x03, 0x45, 0x00, 0x03, 0x03, 0x91, 0x03, 0x45, 0x03, 0x14, 0x00, 0x03, 0x1F, 0x08, 0x03, 0x00,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x08, 0x03, 0x01,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x08, 0x03, 0x45,
-- 0x03, 0x42, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x13,
-- 0x03, 0x45, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x14, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x00,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x01,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x45,
-- 0x03, 0x42, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0x97, 0x03, 0x13,
-- 0x03, 0x45, 0x00, 0x03, 0x03, 0x97, 0x03, 0x45, 0x03, 0x14, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x00,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x01,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x45,
-- 0x03, 0x42, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x13,
-- 0x03, 0x45, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x14, 0x00, 0x03, 0x1F, 0x60, 0x03, 0x00,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x60, 0x03, 0x01,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x60, 0x03, 0x45,
-- 0x03, 0x42, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13,
-- 0x03, 0x45, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x14, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x00,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x01,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x45,
-- 0x03, 0x42, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x00,
-- 0x03, 0x45, 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x42,
-- 0x00, 0x03, 0x03, 0xB7, 0x03, 0x00, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x41, 0x00, 0x03,
-- 0x03, 0xB7, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x08, 0x03, 0x40, 0x00, 0x02,
-- 0x1F, 0xBE, 0x03, 0x44, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x08, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC5,
-- 0x03, 0x08, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x00, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xF3,
-- 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x42, 0x00, 0x02, 0x21, 0x26, 0x03, 0x40,
-- 0x00, 0x02, 0x21, 0x26, 0x03, 0x41, 0x00, 0x01, 0x00, 0x7F, 0x03, 0x8F, 0x03, 0x90, 0x03, 0xAF,
-- 0x03, 0xB0, 0x1F, 0x02, 0x1F, 0x03, 0x1F, 0x04, 0x1F, 0x05, 0x1F, 0x0A, 0x1F, 0x0B, 0x1F, 0x0C,
-- 0x1F, 0x0D, 0x1F, 0x12, 0x1F, 0x13, 0x1F, 0x14, 0x1F, 0x15, 0x1F, 0x1A, 0x1F, 0x1B, 0x1F, 0x1C,
-- 0x1F, 0x1D, 0x1F, 0x22, 0x1F, 0x23, 0x1F, 0x24, 0x1F, 0x25, 0x1F, 0x2A, 0x1F, 0x2B, 0x1F, 0x2C,
-- 0x1F, 0x2D, 0x1F, 0x30, 0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x36, 0x1F, 0x3A,
-- 0x1F, 0x3B, 0x1F, 0x3C, 0x1F, 0x3D, 0x1F, 0x42, 0x1F, 0x43, 0x1F, 0x44, 0x1F, 0x45, 0x1F, 0x4A,
-- 0x1F, 0x4B, 0x1F, 0x4C, 0x1F, 0x4D, 0x1F, 0x52, 0x1F, 0x53, 0x1F, 0x54, 0x1F, 0x55, 0x1F, 0x5B,
-- 0x1F, 0x5D, 0x1F, 0x62, 0x1F, 0x63, 0x1F, 0x64, 0x1F, 0x65, 0x1F, 0x68, 0x1F, 0x6A, 0x1F, 0x6B,
-- 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x76, 0x1F, 0x77, 0x1F, 0x80, 0x1F, 0x81, 0x1F, 0x82,
-+ 0x1F, 0xB4, 0x1F, 0xB7, 0x1F, 0xBA, 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xC7, 0x1F, 0xC8, 0x1F, 0xCA,
-+ 0x1F, 0xCD, 0x1F, 0xCE, 0x1F, 0xD0, 0x1F, 0xD1, 0x1F, 0xD2, 0x1F, 0xD6, 0x1F, 0xD7, 0x1F, 0xDA,
-+ 0x1F, 0xDD, 0x1F, 0xDE, 0x1F, 0xE2, 0x1F, 0xE4, 0x1F, 0xE7, 0x1F, 0xEA, 0x1F, 0xED, 0x1F, 0xF2,
-+ 0x1F, 0xF4, 0x1F, 0xF7, 0x1F, 0xF8, 0x1F, 0xFA, 0x1F, 0xFC, 0x00, 0x01, 0x04, 0xE0, 0x00, 0x85,
-+ 0x01, 0x10, 0x01, 0x16, 0x01, 0x1C, 0x01, 0x22, 0x01, 0x28, 0x01, 0x30, 0x01, 0x38, 0x01, 0x40,
-+ 0x01, 0x48, 0x01, 0x50, 0x01, 0x58, 0x01, 0x60, 0x01, 0x68, 0x01, 0x70, 0x01, 0x78, 0x01, 0x80,
-+ 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA0, 0x01, 0xA8, 0x01, 0xB0, 0x01, 0xB8, 0x01, 0xC0,
-+ 0x01, 0xC8, 0x01, 0xD0, 0x01, 0xD8, 0x01, 0xE0, 0x01, 0xE8, 0x01, 0xF0, 0x01, 0xF8, 0x02, 0x00,
-+ 0x02, 0x08, 0x02, 0x0E, 0x02, 0x16, 0x02, 0x1E, 0x02, 0x26, 0x02, 0x2E, 0x02, 0x36, 0x02, 0x3E,
-+ 0x02, 0x46, 0x02, 0x4E, 0x02, 0x56, 0x02, 0x5E, 0x02, 0x66, 0x02, 0x6E, 0x02, 0x76, 0x02, 0x7E,
-+ 0x02, 0x86, 0x02, 0x8E, 0x02, 0x96, 0x02, 0x9E, 0x02, 0xA6, 0x02, 0xAE, 0x02, 0xB6, 0x02, 0xBE,
-+ 0x02, 0xC6, 0x02, 0xCE, 0x02, 0xD6, 0x02, 0xDE, 0x02, 0xE6, 0x02, 0xEE, 0x02, 0xF6, 0x02, 0xFE,
-+ 0x03, 0x06, 0x03, 0x0C, 0x03, 0x14, 0x03, 0x1C, 0x03, 0x24, 0x03, 0x2C, 0x03, 0x34, 0x03, 0x3C,
-+ 0x03, 0x42, 0x03, 0x48, 0x03, 0x50, 0x03, 0x56, 0x03, 0x5C, 0x03, 0x62, 0x03, 0x68, 0x03, 0x70,
-+ 0x03, 0x78, 0x03, 0x7E, 0x03, 0x86, 0x03, 0x8C, 0x03, 0x92, 0x03, 0x98, 0x03, 0x9E, 0x03, 0xA6,
-+ 0x03, 0xAE, 0x03, 0xB4, 0x03, 0xBC, 0x03, 0xC2, 0x03, 0xC8, 0x03, 0xCE, 0x03, 0xD4, 0x03, 0xDC,
-+ 0x03, 0xE4, 0x03, 0xEA, 0x03, 0xF2, 0x03, 0xF8, 0x03, 0xFE, 0x04, 0x04, 0x04, 0x0A, 0x04, 0x12,
-+ 0x04, 0x1A, 0x04, 0x20, 0x04, 0x28, 0x04, 0x2E, 0x04, 0x34, 0x04, 0x3A, 0x04, 0x40, 0x04, 0x48,
-+ 0x04, 0x50, 0x04, 0x56, 0x04, 0x5E, 0x04, 0x64, 0x04, 0x6A, 0x04, 0x70, 0x04, 0x76, 0x04, 0x7E,
-+ 0x04, 0x86, 0x04, 0x8C, 0x04, 0x92, 0x04, 0x9A, 0x04, 0xA0, 0x04, 0xA6, 0x04, 0xAE, 0x04, 0xB6,
-+ 0x04, 0xBE, 0x04, 0xC6, 0x04, 0xCC, 0x04, 0xD2, 0x04, 0xDA, 0x00, 0x02, 0x21, 0x26, 0x03, 0x01,
-+ 0x00, 0x02, 0x03, 0xCA, 0x03, 0x41, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x01, 0x00, 0x02, 0x03, 0xCB,
-+ 0x03, 0x41, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14,
-+ 0x03, 0x00, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14,
-+ 0x03, 0x01, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03, 0x03, 0x91, 0x03, 0x13,
-+ 0x03, 0x00, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0x91, 0x03, 0x13,
-+ 0x03, 0x01, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0x91, 0x03, 0x43,
-+ 0x03, 0x42, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x14,
-+ 0x03, 0x00, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x14,
-+ 0x03, 0x01, 0x00, 0x03, 0x03, 0x95, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0x95, 0x03, 0x14,
-+ 0x03, 0x00, 0x00, 0x03, 0x03, 0x95, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0x95, 0x03, 0x14,
-+ 0x03, 0x01, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x14,
-+ 0x03, 0x00, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x14,
-+ 0x03, 0x01, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03, 0x03, 0x97, 0x03, 0x13,
-+ 0x03, 0x00, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0x97, 0x03, 0x13,
-+ 0x03, 0x01, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0x97, 0x03, 0x43,
-+ 0x03, 0x42, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x13, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x00,
-+ 0x00, 0x03, 0x03, 0xB9, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x01,
-+ 0x00, 0x03, 0x03, 0xB9, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x43, 0x03, 0x42,
-+ 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0x99, 0x03, 0x13, 0x03, 0x00,
-+ 0x00, 0x03, 0x03, 0x99, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0x99, 0x03, 0x13, 0x03, 0x01,
-+ 0x00, 0x03, 0x03, 0x99, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0x99, 0x03, 0x43, 0x03, 0x42,
-+ 0x00, 0x03, 0x03, 0xBF, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x14, 0x03, 0x00,
-+ 0x00, 0x03, 0x03, 0xBF, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x14, 0x03, 0x01,
-+ 0x00, 0x03, 0x03, 0x9F, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x14, 0x03, 0x00,
-+ 0x00, 0x03, 0x03, 0x9F, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x14, 0x03, 0x01,
-+ 0x00, 0x03, 0x03, 0xC5, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x00,
-+ 0x00, 0x03, 0x03, 0xC5, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x01,
-+ 0x00, 0x03, 0x03, 0xC5, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03, 0x03, 0xA5, 0x03, 0x14, 0x03, 0x00,
-+ 0x00, 0x03, 0x03, 0xA5, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x00,
-+ 0x00, 0x03, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x01,
-+ 0x00, 0x03, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x42,
-+ 0x00, 0x02, 0x21, 0x26, 0x03, 0x13, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03,
-+ 0x03, 0xA9, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03,
-+ 0x03, 0xA9, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03,
-+ 0x21, 0x26, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xB3,
-+ 0x03, 0x43, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x80, 0x03, 0x40,
-+ 0x00, 0x02, 0x1F, 0x81, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x80, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x81,
-+ 0x03, 0x41, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x42,
-+ 0x03, 0x45, 0x00, 0x02, 0x1F, 0xBC, 0x03, 0x43, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x45,
-+ 0x00, 0x02, 0x1F, 0x88, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x89, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x88,
-+ 0x03, 0x41, 0x00, 0x02, 0x1F, 0x89, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x08, 0x03, 0x42, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x09, 0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x43, 0x00, 0x03,
-+ 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x90, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x91,
-+ 0x03, 0x40, 0x00, 0x02, 0x1F, 0x90, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x91, 0x03, 0x41, 0x00, 0x03,
-+ 0x1F, 0x20, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x42, 0x03, 0x45, 0x00, 0x02,
-+ 0x1F, 0xCC, 0x03, 0x43, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x98,
-+ 0x03, 0x40, 0x00, 0x02, 0x1F, 0x99, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x98, 0x03, 0x41, 0x00, 0x02,
-+ 0x1F, 0x99, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29,
-+ 0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x43, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x14,
-+ 0x03, 0x45, 0x00, 0x02, 0x1F, 0xA0, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xA1, 0x03, 0x40, 0x00, 0x02,
-+ 0x1F, 0xA0, 0x03, 0x41, 0x00, 0x02, 0x1F, 0xA1, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x60, 0x03, 0x42,
-+ 0x03, 0x45, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xFC, 0x03, 0x43,
-+ 0x00, 0x03, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x40, 0x00, 0x02,
-+ 0x1F, 0xA9, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x41, 0x00, 0x02, 0x1F, 0xA9, 0x03, 0x41,
-+ 0x00, 0x03, 0x1F, 0x68, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x42, 0x03, 0x45,
-+ 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB1,
-+ 0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x01,
-+ 0x00, 0x03, 0x03, 0xB7, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x08, 0x03, 0x00,
-+ 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x08, 0x03, 0x42, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x08, 0x03, 0x00,
-+ 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC9,
-+ 0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x21, 0x26, 0x03, 0x00, 0x00, 0x01, 0x00, 0x85, 0x03, 0x8F,
-+ 0x03, 0x90, 0x03, 0xAF, 0x03, 0xB0, 0x1F, 0x02, 0x1F, 0x03, 0x1F, 0x04, 0x1F, 0x05, 0x1F, 0x06,
-+ 0x1F, 0x0A, 0x1F, 0x0B, 0x1F, 0x0C, 0x1F, 0x0D, 0x1F, 0x0E, 0x1F, 0x12, 0x1F, 0x13, 0x1F, 0x14,
-+ 0x1F, 0x15, 0x1F, 0x1A, 0x1F, 0x1B, 0x1F, 0x1C, 0x1F, 0x1D, 0x1F, 0x22, 0x1F, 0x23, 0x1F, 0x24,
-+ 0x1F, 0x25, 0x1F, 0x26, 0x1F, 0x2A, 0x1F, 0x2B, 0x1F, 0x2C, 0x1F, 0x2D, 0x1F, 0x2E, 0x1F, 0x30,
-+ 0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x36, 0x1F, 0x37, 0x1F, 0x3A, 0x1F, 0x3B,
-+ 0x1F, 0x3C, 0x1F, 0x3D, 0x1F, 0x3E, 0x1F, 0x42, 0x1F, 0x43, 0x1F, 0x44, 0x1F, 0x45, 0x1F, 0x4A,
-+ 0x1F, 0x4B, 0x1F, 0x4C, 0x1F, 0x4D, 0x1F, 0x52, 0x1F, 0x53, 0x1F, 0x54, 0x1F, 0x55, 0x1F, 0x56,
-+ 0x1F, 0x5B, 0x1F, 0x5D, 0x1F, 0x62, 0x1F, 0x63, 0x1F, 0x64, 0x1F, 0x65, 0x1F, 0x66, 0x1F, 0x68,
-+ 0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x6F, 0x1F, 0x76, 0x1F, 0x80,
-+ 0x1F, 0x81, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88,
-+ 0x1F, 0x89, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90,
-+ 0x1F, 0x91, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98,
-+ 0x1F, 0x99, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0,
-+ 0x1F, 0xA1, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8,
-+ 0x1F, 0xA9, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB2,
-+ 0x1F, 0xB4, 0x1F, 0xB7, 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xC7, 0x1F, 0xD2, 0x1F, 0xD7, 0x1F, 0xE2,
-+ 0x1F, 0xF2, 0x1F, 0xF4, 0x1F, 0xF7, 0x1F, 0xFA, 0x00, 0x01, 0x04, 0xC0, 0x00, 0x7B, 0x00, 0xFC,
-+ 0x01, 0x02, 0x01, 0x08, 0x01, 0x0E, 0x01, 0x16, 0x01, 0x1E, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x36,
-+ 0x01, 0x3E, 0x01, 0x46, 0x01, 0x4E, 0x01, 0x56, 0x01, 0x5E, 0x01, 0x66, 0x01, 0x6E, 0x01, 0x76,
-+ 0x01, 0x7E, 0x01, 0x86, 0x01, 0x8E, 0x01, 0x96, 0x01, 0x9E, 0x01, 0xA6, 0x01, 0xAE, 0x01, 0xB6,
-+ 0x01, 0xBE, 0x01, 0xC6, 0x01, 0xCE, 0x01, 0xD6, 0x01, 0xDC, 0x01, 0xE4, 0x01, 0xEC, 0x01, 0xF4,
-+ 0x01, 0xFC, 0x02, 0x04, 0x02, 0x0C, 0x02, 0x14, 0x02, 0x1C, 0x02, 0x24, 0x02, 0x2C, 0x02, 0x34,
-+ 0x02, 0x3C, 0x02, 0x44, 0x02, 0x4C, 0x02, 0x54, 0x02, 0x5C, 0x02, 0x64, 0x02, 0x6C, 0x02, 0x74,
-+ 0x02, 0x7C, 0x02, 0x84, 0x02, 0x8C, 0x02, 0x94, 0x02, 0x9C, 0x02, 0xA4, 0x02, 0xAC, 0x02, 0xB4,
-+ 0x02, 0xBA, 0x02, 0xC2, 0x02, 0xCA, 0x02, 0xD2, 0x02, 0xDA, 0x02, 0xE2, 0x02, 0xE8, 0x02, 0xF0,
-+ 0x02, 0xF8, 0x03, 0x00, 0x03, 0x08, 0x03, 0x10, 0x03, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x30,
-+ 0x03, 0x38, 0x03, 0x40, 0x03, 0x48, 0x03, 0x50, 0x03, 0x58, 0x03, 0x60, 0x03, 0x68, 0x03, 0x70,
-+ 0x03, 0x78, 0x03, 0x80, 0x03, 0x88, 0x03, 0x90, 0x03, 0x98, 0x03, 0xA0, 0x03, 0xA8, 0x03, 0xB0,
-+ 0x03, 0xB8, 0x03, 0xC0, 0x03, 0xC8, 0x03, 0xD0, 0x03, 0xD8, 0x03, 0xE0, 0x03, 0xE8, 0x03, 0xF0,
-+ 0x03, 0xF8, 0x04, 0x00, 0x04, 0x08, 0x04, 0x10, 0x04, 0x18, 0x04, 0x20, 0x04, 0x28, 0x04, 0x30,
-+ 0x04, 0x38, 0x04, 0x40, 0x04, 0x48, 0x04, 0x50, 0x04, 0x58, 0x04, 0x60, 0x04, 0x68, 0x04, 0x70,
-+ 0x04, 0x76, 0x04, 0x7E, 0x04, 0x86, 0x04, 0x8C, 0x04, 0x94, 0x04, 0x9C, 0x04, 0xA4, 0x04, 0xAC,
-+ 0x04, 0xB2, 0x04, 0xBA, 0x00, 0x02, 0x21, 0x26, 0x03, 0x41, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x44,
-+ 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x08, 0x03, 0x01, 0x00, 0x03,
-+ 0x03, 0xB1, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
-+ 0x03, 0xB1, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03,
-+ 0x03, 0x91, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
-+ 0x03, 0x91, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03,
-+ 0x03, 0xB5, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
-+ 0x03, 0xB5, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03,
-+ 0x03, 0x95, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x95, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
-+ 0x03, 0x95, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x95, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03,
-+ 0x03, 0xB7, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
-+ 0x03, 0xB7, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03,
-+ 0x03, 0x97, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
-+ 0x03, 0x97, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14, 0x03, 0x41, 0x00, 0x02,
-+ 0x1F, 0xBE, 0x03, 0x43, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB9,
-+ 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB9,
-+ 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0x99,
-+ 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x99, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0x99,
-+ 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x99, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0xBF,
-+ 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xBF,
-+ 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0x9F,
-+ 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0x9F,
-+ 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC5,
-+ 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC5,
-+ 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0xA5,
-+ 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xA5, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9,
-+ 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9,
-+ 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x41, 0x00, 0x02, 0x21, 0x26,
-+ 0x03, 0x43, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x14,
-+ 0x03, 0x40, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x14,
-+ 0x03, 0x41, 0x00, 0x03, 0x21, 0x26, 0x03, 0x13, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x40,
-+ 0x00, 0x03, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x14,
-+ 0x00, 0x03, 0x1F, 0x00, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x00, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x00, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x01, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x00, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x45, 0x03, 0x42,
-+ 0x00, 0x03, 0x03, 0x91, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0x91, 0x03, 0x45, 0x03, 0x14,
-+ 0x00, 0x03, 0x1F, 0x08, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x00, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x08, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x01, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x08, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x45, 0x03, 0x42,
-+ 0x00, 0x03, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x14,
-+ 0x00, 0x03, 0x1F, 0x20, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x00, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x20, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x01, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x20, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x45, 0x03, 0x42,
-+ 0x00, 0x03, 0x03, 0x97, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0x97, 0x03, 0x45, 0x03, 0x14,
-+ 0x00, 0x03, 0x1F, 0x28, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x00, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x28, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x01, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x28, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x45, 0x03, 0x42,
-+ 0x00, 0x03, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x14,
-+ 0x00, 0x03, 0x1F, 0x60, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x00, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x60, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x01, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x60, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x45, 0x03, 0x42,
-+ 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x14,
-+ 0x00, 0x03, 0x1F, 0x68, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x00, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x68, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x01, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x68, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x45, 0x03, 0x42,
-+ 0x00, 0x03, 0x03, 0xB1, 0x03, 0x00, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x41, 0x00, 0x03,
-+ 0x03, 0xB1, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x00, 0x03, 0x45, 0x00, 0x02,
-+ 0x1F, 0xC3, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB9,
-+ 0x03, 0x08, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x08, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9,
-+ 0x03, 0x00, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45,
-+ 0x03, 0x42, 0x00, 0x02, 0x21, 0x26, 0x03, 0x40, 0x00, 0x01, 0x00, 0x7B, 0x03, 0x8F, 0x03, 0x90,
-+ 0x03, 0xAF, 0x03, 0xB0, 0x1F, 0x02, 0x1F, 0x03, 0x1F, 0x04, 0x1F, 0x05, 0x1F, 0x0A, 0x1F, 0x0B,
-+ 0x1F, 0x0C, 0x1F, 0x0D, 0x1F, 0x12, 0x1F, 0x13, 0x1F, 0x14, 0x1F, 0x15, 0x1F, 0x1A, 0x1F, 0x1B,
-+ 0x1F, 0x1C, 0x1F, 0x1D, 0x1F, 0x22, 0x1F, 0x23, 0x1F, 0x24, 0x1F, 0x25, 0x1F, 0x2A, 0x1F, 0x2B,
-+ 0x1F, 0x2C, 0x1F, 0x2D, 0x1F, 0x30, 0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x36,
-+ 0x1F, 0x3A, 0x1F, 0x3B, 0x1F, 0x3C, 0x1F, 0x3D, 0x1F, 0x42, 0x1F, 0x43, 0x1F, 0x44, 0x1F, 0x45,
-+ 0x1F, 0x4A, 0x1F, 0x4B, 0x1F, 0x4C, 0x1F, 0x4D, 0x1F, 0x52, 0x1F, 0x53, 0x1F, 0x54, 0x1F, 0x55,
-+ 0x1F, 0x5B, 0x1F, 0x5D, 0x1F, 0x62, 0x1F, 0x63, 0x1F, 0x64, 0x1F, 0x65, 0x1F, 0x68, 0x1F, 0x6A,
-+ 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x76, 0x1F, 0x80, 0x1F, 0x81, 0x1F, 0x82,
- 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88, 0x1F, 0x89, 0x1F, 0x8A,
- 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90, 0x1F, 0x91, 0x1F, 0x92,
- 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x99, 0x1F, 0x9A,
- 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0, 0x1F, 0xA1, 0x1F, 0xA2,
- 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8, 0x1F, 0xA9, 0x1F, 0xAA,
- 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB2, 0x1F, 0xB4, 0x1F, 0xB7,
-- 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xC7, 0x1F, 0xD2, 0x1F, 0xD3, 0x1F, 0xE2, 0x1F, 0xE3, 0x1F, 0xF2,
-- 0x1F, 0xF4, 0x1F, 0xF7, 0x1F, 0xFA, 0x1F, 0xFB, 0x00, 0x01, 0x03, 0x62, 0x00, 0x56, 0x00, 0xB2,
-- 0x00, 0xBA, 0x00, 0xC2, 0x00, 0xCA, 0x00, 0xD2, 0x00, 0xDA, 0x00, 0xE2, 0x00, 0xEA, 0x00, 0xF2,
-- 0x00, 0xFA, 0x01, 0x02, 0x01, 0x0A, 0x01, 0x12, 0x01, 0x1A, 0x01, 0x22, 0x01, 0x2A, 0x01, 0x32,
-- 0x01, 0x3A, 0x01, 0x42, 0x01, 0x4A, 0x01, 0x52, 0x01, 0x5A, 0x01, 0x62, 0x01, 0x6A, 0x01, 0x72,
-- 0x01, 0x7A, 0x01, 0x82, 0x01, 0x8A, 0x01, 0x92, 0x01, 0x9A, 0x01, 0xA2, 0x01, 0xAA, 0x01, 0xB2,
-- 0x01, 0xBA, 0x01, 0xC2, 0x01, 0xCA, 0x01, 0xD2, 0x01, 0xDA, 0x01, 0xE2, 0x01, 0xEA, 0x01, 0xF2,
-- 0x01, 0xFA, 0x02, 0x02, 0x02, 0x0A, 0x02, 0x12, 0x02, 0x1A, 0x02, 0x22, 0x02, 0x2A, 0x02, 0x32,
-- 0x02, 0x3A, 0x02, 0x42, 0x02, 0x4A, 0x02, 0x52, 0x02, 0x5A, 0x02, 0x62, 0x02, 0x6A, 0x02, 0x72,
-- 0x02, 0x7A, 0x02, 0x82, 0x02, 0x8A, 0x02, 0x92, 0x02, 0x9A, 0x02, 0xA2, 0x02, 0xAA, 0x02, 0xB2,
-- 0x02, 0xBA, 0x02, 0xC2, 0x02, 0xCA, 0x02, 0xD2, 0x02, 0xDA, 0x02, 0xE2, 0x02, 0xEA, 0x02, 0xF2,
-- 0x02, 0xFA, 0x03, 0x02, 0x03, 0x0A, 0x03, 0x12, 0x03, 0x1A, 0x03, 0x22, 0x03, 0x2A, 0x03, 0x32,
-- 0x03, 0x3A, 0x03, 0x42, 0x03, 0x4A, 0x03, 0x52, 0x03, 0x5A, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x08,
-- 0x03, 0x01, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x08, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x43,
-- 0x03, 0x00, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0x91, 0x03, 0x43,
-- 0x03, 0x00, 0x00, 0x03, 0x03, 0x91, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x43,
-- 0x03, 0x00, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0x95, 0x03, 0x43,
-- 0x03, 0x00, 0x00, 0x03, 0x03, 0x95, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x43,
-- 0x03, 0x00, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0x97, 0x03, 0x43,
-- 0x03, 0x00, 0x00, 0x03, 0x03, 0x97, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x43,
-- 0x03, 0x00, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x43,
-- 0x03, 0x01, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43,
-- 0x03, 0x42, 0x00, 0x03, 0x03, 0x99, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0x99, 0x03, 0x43,
-- 0x03, 0x01, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x43,
-- 0x03, 0x01, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x43,
-- 0x03, 0x01, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x43,
-- 0x03, 0x01, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x43,
-- 0x03, 0x01, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x21, 0x26, 0x03, 0x14,
-- 0x03, 0x00, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x21, 0x26, 0x03, 0x14,
-- 0x03, 0x01, 0x00, 0x03, 0x21, 0x26, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x43,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x40,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x41,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x14,
-- 0x03, 0x42, 0x00, 0x03, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x08, 0x03, 0x40,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x08, 0x03, 0x41,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13,
-- 0x03, 0x42, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x43,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x40,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x41,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x14,
-- 0x03, 0x42, 0x00, 0x03, 0x03, 0x97, 0x03, 0x43, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x40,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x41,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13,
-- 0x03, 0x42, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x43,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x60, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x40,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x60, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x41,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x14,
-- 0x03, 0x42, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45, 0x00, 0x03, 0x21, 0x26, 0x03, 0x14,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x40,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x41,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x14,
-- 0x03, 0x42, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x01,
-- 0x03, 0x45, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x01,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x08, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x08,
-- 0x03, 0x01, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x08, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x40,
-- 0x03, 0x45, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x01, 0x03, 0x45, 0x00, 0x01, 0x00, 0x56, 0x03, 0x90,
-- 0x03, 0xB0, 0x1F, 0x02, 0x1F, 0x04, 0x1F, 0x0A, 0x1F, 0x0C, 0x1F, 0x12, 0x1F, 0x14, 0x1F, 0x1A,
-- 0x1F, 0x1C, 0x1F, 0x22, 0x1F, 0x24, 0x1F, 0x2A, 0x1F, 0x2C, 0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34,
-- 0x1F, 0x35, 0x1F, 0x36, 0x1F, 0x3A, 0x1F, 0x3C, 0x1F, 0x42, 0x1F, 0x44, 0x1F, 0x4A, 0x1F, 0x4C,
-- 0x1F, 0x52, 0x1F, 0x54, 0x1F, 0x62, 0x1F, 0x64, 0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D,
-- 0x1F, 0x6E, 0x1F, 0x80, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87,
-- 0x1F, 0x88, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90,
-- 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x9A,
-- 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0, 0x1F, 0xA2, 0x1F, 0xA3,
-- 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8, 0x1F, 0xA9, 0x1F, 0xAA, 0x1F, 0xAB,
-- 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB2, 0x1F, 0xB4, 0x1F, 0xC2, 0x1F, 0xC4,
-- 0x1F, 0xD2, 0x1F, 0xD3, 0x1F, 0xE3, 0x1F, 0xF2, 0x1F, 0xF4, 0x00, 0x01, 0x03, 0x46, 0x00, 0x52,
-- 0x00, 0xAA, 0x00, 0xB2, 0x00, 0xBA, 0x00, 0xC2, 0x00, 0xCA, 0x00, 0xD2, 0x00, 0xDA, 0x00, 0xE2,
-- 0x00, 0xEA, 0x00, 0xF2, 0x00, 0xFA, 0x01, 0x02, 0x01, 0x0A, 0x01, 0x12, 0x01, 0x1A, 0x01, 0x22,
-- 0x01, 0x2A, 0x01, 0x32, 0x01, 0x3A, 0x01, 0x42, 0x01, 0x4A, 0x01, 0x52, 0x01, 0x5A, 0x01, 0x62,
-- 0x01, 0x6A, 0x01, 0x72, 0x01, 0x7A, 0x01, 0x82, 0x01, 0x8A, 0x01, 0x92, 0x01, 0x9A, 0x01, 0xA2,
-- 0x01, 0xAA, 0x01, 0xB2, 0x01, 0xBA, 0x01, 0xC2, 0x01, 0xCA, 0x01, 0xD2, 0x01, 0xDC, 0x01, 0xE4,
-- 0x01, 0xEC, 0x01, 0xF4, 0x01, 0xFC, 0x02, 0x04, 0x02, 0x0C, 0x02, 0x16, 0x02, 0x1E, 0x02, 0x26,
-- 0x02, 0x2E, 0x02, 0x36, 0x02, 0x3E, 0x02, 0x46, 0x02, 0x50, 0x02, 0x58, 0x02, 0x60, 0x02, 0x68,
-- 0x02, 0x70, 0x02, 0x78, 0x02, 0x80, 0x02, 0x8A, 0x02, 0x92, 0x02, 0x9A, 0x02, 0xA2, 0x02, 0xAA,
-- 0x02, 0xB2, 0x02, 0xBA, 0x02, 0xC4, 0x02, 0xCC, 0x02, 0xD4, 0x02, 0xDC, 0x02, 0xE4, 0x02, 0xEC,
-- 0x02, 0xF4, 0x02, 0xFC, 0x03, 0x06, 0x03, 0x0E, 0x03, 0x16, 0x03, 0x1E, 0x03, 0x26, 0x03, 0x2E,
-- 0x03, 0x36, 0x03, 0x3E, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x08, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB1,
-+ 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xC7, 0x1F, 0xD2, 0x1F, 0xE2, 0x1F, 0xF2, 0x1F, 0xF4, 0x1F, 0xF7,
-+ 0x1F, 0xFA, 0x00, 0x01, 0x03, 0x4E, 0x00, 0x54, 0x00, 0xAE, 0x00, 0xB6, 0x00, 0xBE, 0x00, 0xC6,
-+ 0x00, 0xCE, 0x00, 0xD6, 0x00, 0xDE, 0x00, 0xE6, 0x00, 0xEE, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x06,
-+ 0x01, 0x0E, 0x01, 0x16, 0x01, 0x1E, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x36, 0x01, 0x3E, 0x01, 0x46,
-+ 0x01, 0x4E, 0x01, 0x56, 0x01, 0x5E, 0x01, 0x66, 0x01, 0x6E, 0x01, 0x76, 0x01, 0x7E, 0x01, 0x86,
-+ 0x01, 0x8E, 0x01, 0x96, 0x01, 0x9E, 0x01, 0xA6, 0x01, 0xAE, 0x01, 0xB6, 0x01, 0xBE, 0x01, 0xC6,
-+ 0x01, 0xCE, 0x01, 0xD6, 0x01, 0xDE, 0x01, 0xE6, 0x01, 0xEE, 0x01, 0xF6, 0x01, 0xFE, 0x02, 0x06,
-+ 0x02, 0x0E, 0x02, 0x16, 0x02, 0x1E, 0x02, 0x26, 0x02, 0x2E, 0x02, 0x36, 0x02, 0x3E, 0x02, 0x46,
-+ 0x02, 0x4E, 0x02, 0x56, 0x02, 0x5E, 0x02, 0x66, 0x02, 0x6E, 0x02, 0x76, 0x02, 0x7E, 0x02, 0x86,
-+ 0x02, 0x8E, 0x02, 0x96, 0x02, 0x9E, 0x02, 0xA6, 0x02, 0xAE, 0x02, 0xB6, 0x02, 0xBE, 0x02, 0xC6,
-+ 0x02, 0xCE, 0x02, 0xD6, 0x02, 0xDE, 0x02, 0xE6, 0x02, 0xEE, 0x02, 0xF6, 0x02, 0xFE, 0x03, 0x06,
-+ 0x03, 0x0E, 0x03, 0x16, 0x03, 0x1E, 0x03, 0x26, 0x03, 0x2E, 0x03, 0x36, 0x03, 0x3E, 0x03, 0x46,
-+ 0x00, 0x03, 0x03, 0xB9, 0x03, 0x08, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x08, 0x03, 0x41,
-+ 0x00, 0x03, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x01,
-+ 0x00, 0x03, 0x03, 0x91, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0x91, 0x03, 0x43, 0x03, 0x01,
-+ 0x00, 0x03, 0x03, 0xB5, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x43, 0x03, 0x01,
-+ 0x00, 0x03, 0x03, 0x95, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0x95, 0x03, 0x43, 0x03, 0x01,
-+ 0x00, 0x03, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x01,
-+ 0x00, 0x03, 0x03, 0x97, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0x97, 0x03, 0x43, 0x03, 0x01,
-+ 0x00, 0x03, 0x03, 0xB9, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x14, 0x03, 0x00,
-+ 0x00, 0x03, 0x03, 0xB9, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x14, 0x03, 0x01,
-+ 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03, 0x03, 0x99, 0x03, 0x43, 0x03, 0x00,
-+ 0x00, 0x03, 0x03, 0x99, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x43, 0x03, 0x00,
-+ 0x00, 0x03, 0x03, 0xBF, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x43, 0x03, 0x00,
-+ 0x00, 0x03, 0x03, 0x9F, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x43, 0x03, 0x00,
-+ 0x00, 0x03, 0x03, 0xC5, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x00,
-+ 0x00, 0x03, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x00,
-+ 0x00, 0x03, 0x21, 0x26, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x01,
-+ 0x00, 0x03, 0x21, 0x26, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x21, 0x26, 0x03, 0x43, 0x03, 0x42,
-+ 0x00, 0x03, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x40, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x01, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x41, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x01, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x13, 0x03, 0x42,
-+ 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x08, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x40, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x08, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x41, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x14, 0x03, 0x42,
-+ 0x00, 0x03, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x40, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x21, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x41, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x21, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x13, 0x03, 0x42,
-+ 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0x97, 0x03, 0x43, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x28, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x40, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x28, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x41, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x14, 0x03, 0x42,
-+ 0x00, 0x03, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x60, 0x03, 0x40, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x61, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x60, 0x03, 0x41, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x61, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x13, 0x03, 0x42,
-+ 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45,
-+ 0x00, 0x03, 0x21, 0x26, 0x03, 0x14, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x40, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x69, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x41, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0x69, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x42,
-+ 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x40, 0x03, 0x45,
-+ 0x00, 0x03, 0x03, 0xB1, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x40, 0x03, 0x45,
-+ 0x00, 0x03, 0x03, 0xB7, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x08, 0x03, 0x00,
-+ 0x00, 0x03, 0x03, 0xC9, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x01, 0x03, 0x45,
-+ 0x00, 0x01, 0x00, 0x54, 0x03, 0x90, 0x03, 0xB0, 0x1F, 0x02, 0x1F, 0x04, 0x1F, 0x0A, 0x1F, 0x0C,
-+ 0x1F, 0x12, 0x1F, 0x14, 0x1F, 0x1A, 0x1F, 0x1C, 0x1F, 0x22, 0x1F, 0x24, 0x1F, 0x2A, 0x1F, 0x2C,
-+ 0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x36, 0x1F, 0x3A, 0x1F, 0x3C, 0x1F, 0x42,
-+ 0x1F, 0x44, 0x1F, 0x4A, 0x1F, 0x4C, 0x1F, 0x52, 0x1F, 0x54, 0x1F, 0x62, 0x1F, 0x64, 0x1F, 0x6A,
-+ 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x80, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84,
-+ 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D,
-+ 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96,
-+ 0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F,
-+ 0x1F, 0xA0, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8,
-+ 0x1F, 0xA9, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB2,
-+ 0x1F, 0xB4, 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xD2, 0x1F, 0xF2, 0x1F, 0xF4, 0x00, 0x01, 0x03, 0x3C,
-+ 0x00, 0x51, 0x00, 0xA8, 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xC8, 0x00, 0xD0, 0x00, 0xD8,
-+ 0x00, 0xE0, 0x00, 0xE8, 0x00, 0xF0, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x08, 0x01, 0x10, 0x01, 0x18,
-+ 0x01, 0x20, 0x01, 0x28, 0x01, 0x30, 0x01, 0x38, 0x01, 0x40, 0x01, 0x48, 0x01, 0x50, 0x01, 0x58,
-+ 0x01, 0x60, 0x01, 0x68, 0x01, 0x70, 0x01, 0x78, 0x01, 0x80, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98,
-+ 0x01, 0xA0, 0x01, 0xA8, 0x01, 0xB0, 0x01, 0xB8, 0x01, 0xC0, 0x01, 0xC8, 0x01, 0xD0, 0x01, 0xDA,
-+ 0x01, 0xE2, 0x01, 0xEA, 0x01, 0xF2, 0x01, 0xFA, 0x02, 0x02, 0x02, 0x0A, 0x02, 0x14, 0x02, 0x1C,
-+ 0x02, 0x24, 0x02, 0x2C, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x44, 0x02, 0x4E, 0x02, 0x56, 0x02, 0x5E,
-+ 0x02, 0x66, 0x02, 0x6E, 0x02, 0x76, 0x02, 0x7E, 0x02, 0x88, 0x02, 0x90, 0x02, 0x98, 0x02, 0xA0,
-+ 0x02, 0xA8, 0x02, 0xB0, 0x02, 0xB8, 0x02, 0xC2, 0x02, 0xCA, 0x02, 0xD2, 0x02, 0xDA, 0x02, 0xE2,
-+ 0x02, 0xEA, 0x02, 0xF2, 0x02, 0xFA, 0x03, 0x04, 0x03, 0x0C, 0x03, 0x14, 0x03, 0x1C, 0x03, 0x24,
-+ 0x03, 0x2C, 0x03, 0x34, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x08, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB1,
- 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0x91,
- 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0x91, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB5,
- 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0x95,
-@@ -1960,1728 +1911,1637 @@
- 0x1F, 0xFC, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45,
- 0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x41, 0x03, 0x45,
- 0x00, 0x03, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x41, 0x03, 0x45,
-- 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x08, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x08, 0x03, 0x41,
-- 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x41, 0x03, 0x45,
-- 0x00, 0x01, 0x00, 0x52, 0x03, 0x90, 0x1F, 0x02, 0x1F, 0x04, 0x1F, 0x0A, 0x1F, 0x0C, 0x1F, 0x12,
-- 0x1F, 0x14, 0x1F, 0x1A, 0x1F, 0x1C, 0x1F, 0x22, 0x1F, 0x24, 0x1F, 0x2A, 0x1F, 0x2C, 0x1F, 0x32,
-- 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x3A, 0x1F, 0x3C, 0x1F, 0x42, 0x1F, 0x44, 0x1F, 0x4A,
-- 0x1F, 0x4C, 0x1F, 0x52, 0x1F, 0x54, 0x1F, 0x62, 0x1F, 0x64, 0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C,
-- 0x1F, 0x6D, 0x1F, 0x80, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87,
-- 0x1F, 0x88, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90,
-- 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x9A,
-- 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0, 0x1F, 0xA2, 0x1F, 0xA3,
-- 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8, 0x1F, 0xA9, 0x1F, 0xAA, 0x1F, 0xAB,
-- 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB2, 0x1F, 0xB4, 0x1F, 0xC2, 0x1F, 0xC4,
-- 0x1F, 0xD2, 0x1F, 0xD3, 0x1F, 0xF2, 0x1F, 0xF4, 0x00, 0x01, 0x02, 0x3A, 0x00, 0x36, 0x00, 0x72,
-- 0x00, 0x7A, 0x00, 0x82, 0x00, 0x8A, 0x00, 0x92, 0x00, 0x9A, 0x00, 0xA2, 0x00, 0xAA, 0x00, 0xB2,
-- 0x00, 0xBA, 0x00, 0xC2, 0x00, 0xCC, 0x00, 0xD6, 0x00, 0xDE, 0x00, 0xE6, 0x00, 0xEE, 0x00, 0xF6,
-- 0x00, 0xFE, 0x01, 0x08, 0x01, 0x12, 0x01, 0x1A, 0x01, 0x22, 0x01, 0x2A, 0x01, 0x32, 0x01, 0x3A,
-- 0x01, 0x44, 0x01, 0x4E, 0x01, 0x56, 0x01, 0x5E, 0x01, 0x66, 0x01, 0x6E, 0x01, 0x76, 0x01, 0x80,
-- 0x01, 0x8A, 0x01, 0x92, 0x01, 0x9A, 0x01, 0xA2, 0x01, 0xAA, 0x01, 0xB2, 0x01, 0xBC, 0x01, 0xC6,
-- 0x01, 0xCE, 0x01, 0xD6, 0x01, 0xDE, 0x01, 0xE6, 0x01, 0xEE, 0x01, 0xF8, 0x02, 0x02, 0x02, 0x0A,
-- 0x02, 0x12, 0x02, 0x1A, 0x02, 0x22, 0x02, 0x2A, 0x02, 0x32, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x08,
-- 0x03, 0x01, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x13,
-- 0x03, 0x01, 0x00, 0x03, 0x21, 0x26, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x21, 0x26, 0x03, 0x13,
-- 0x03, 0x01, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x45,
-- 0x03, 0x40, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x45,
-- 0x03, 0x41, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13,
-- 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03,
-- 0x03, 0x91, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03, 0x1F, 0x08, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03,
-- 0x1F, 0x09, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x08, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03,
-- 0x1F, 0x09, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45,
-- 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x45,
-- 0x03, 0x43, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x45,
-- 0x03, 0x40, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x45,
-- 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7,
-- 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0x97, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03,
-- 0x1F, 0x28, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03,
-- 0x1F, 0x28, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
-- 0x03, 0x97, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14, 0x03, 0x45,
-- 0x03, 0x42, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03, 0x1F, 0x60, 0x03, 0x45,
-- 0x03, 0x40, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x60, 0x03, 0x45,
-- 0x03, 0x41, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13,
-- 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03,
-- 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03,
-- 0x1F, 0x69, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03,
-- 0x1F, 0x69, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45,
-- 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x45,
-- 0x03, 0x40, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x45,
-- 0x03, 0x40, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x08,
-- 0x03, 0x01, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45,
-- 0x03, 0x01, 0x00, 0x01, 0x00, 0x36, 0x03, 0x90, 0x1F, 0x32, 0x1F, 0x34, 0x1F, 0x6A, 0x1F, 0x6C,
-- 0x1F, 0x80, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88,
-- 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90, 0x1F, 0x92,
-- 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x9A, 0x1F, 0x9B,
-- 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4,
-- 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD,
-- 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB2, 0x1F, 0xB4, 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xD3, 0x1F, 0xF2,
-- 0x1F, 0xF4, 0x00, 0x01, 0x01, 0xEA, 0x00, 0x2E, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A,
-- 0x00, 0x82, 0x00, 0x8A, 0x00, 0x92, 0x00, 0x9A, 0x00, 0xA2, 0x00, 0xAA, 0x00, 0xB4, 0x00, 0xBE,
-- 0x00, 0xC6, 0x00, 0xCE, 0x00, 0xD6, 0x00, 0xDE, 0x00, 0xE8, 0x00, 0xF2, 0x00, 0xFA, 0x01, 0x02,
-- 0x01, 0x0A, 0x01, 0x12, 0x01, 0x1C, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x36, 0x01, 0x3E, 0x01, 0x46,
-- 0x01, 0x50, 0x01, 0x5A, 0x01, 0x62, 0x01, 0x6A, 0x01, 0x72, 0x01, 0x7A, 0x01, 0x84, 0x01, 0x8E,
-- 0x01, 0x96, 0x01, 0x9E, 0x01, 0xA6, 0x01, 0xAE, 0x01, 0xB6, 0x01, 0xC0, 0x01, 0xCA, 0x01, 0xD2,
-- 0x01, 0xDA, 0x01, 0xE2, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x08, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xBE,
-- 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x21, 0x26,
-- 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x21, 0x26, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xB3,
-- 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xB3,
-- 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB1,
-- 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42,
-- 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x14, 0x03, 0x00,
-- 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x14, 0x03, 0x01,
-- 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45,
-- 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xC3,
-- 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xC3,
-- 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04,
-- 0x03, 0xB7, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x00,
-- 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x01,
-- 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x45,
-- 0x03, 0x42, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xF3,
-- 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xF3,
-- 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9,
-- 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42,
-- 0x00, 0x03, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x00,
-- 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x01,
-- 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45,
-- 0x03, 0x42, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB1,
-- 0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xBE,
-- 0x03, 0x08, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x41, 0x00, 0x01, 0x00, 0x2E,
-+ 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x08, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x00,
-+ 0x00, 0x03, 0x03, 0xC9, 0x03, 0x41, 0x03, 0x45, 0x00, 0x01, 0x00, 0x51, 0x03, 0x90, 0x1F, 0x02,
-+ 0x1F, 0x04, 0x1F, 0x0A, 0x1F, 0x0C, 0x1F, 0x12, 0x1F, 0x14, 0x1F, 0x1A, 0x1F, 0x1C, 0x1F, 0x22,
-+ 0x1F, 0x24, 0x1F, 0x2A, 0x1F, 0x2C, 0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x3A,
-+ 0x1F, 0x3C, 0x1F, 0x42, 0x1F, 0x44, 0x1F, 0x4A, 0x1F, 0x4C, 0x1F, 0x52, 0x1F, 0x54, 0x1F, 0x62,
-+ 0x1F, 0x64, 0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x80, 0x1F, 0x82, 0x1F, 0x83,
-+ 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C,
-+ 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95,
-+ 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E,
-+ 0x1F, 0x9F, 0x1F, 0xA0, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7,
-+ 0x1F, 0xA8, 0x1F, 0xA9, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF,
-+ 0x1F, 0xB2, 0x1F, 0xB4, 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xD2, 0x1F, 0xF2, 0x1F, 0xF4, 0x00, 0x01,
-+ 0x02, 0x30, 0x00, 0x35, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x00, 0x98,
-+ 0x00, 0xA0, 0x00, 0xA8, 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xCA, 0x00, 0xD4, 0x00, 0xDC,
-+ 0x00, 0xE4, 0x00, 0xEC, 0x00, 0xF4, 0x00, 0xFC, 0x01, 0x06, 0x01, 0x10, 0x01, 0x18, 0x01, 0x20,
-+ 0x01, 0x28, 0x01, 0x30, 0x01, 0x38, 0x01, 0x42, 0x01, 0x4C, 0x01, 0x54, 0x01, 0x5C, 0x01, 0x64,
-+ 0x01, 0x6C, 0x01, 0x74, 0x01, 0x7E, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA0, 0x01, 0xA8,
-+ 0x01, 0xB0, 0x01, 0xBA, 0x01, 0xC4, 0x01, 0xCC, 0x01, 0xD4, 0x01, 0xDC, 0x01, 0xE4, 0x01, 0xEC,
-+ 0x01, 0xF6, 0x02, 0x00, 0x02, 0x08, 0x02, 0x10, 0x02, 0x18, 0x02, 0x20, 0x02, 0x28, 0x00, 0x03,
-+ 0x1F, 0xBE, 0x03, 0x08, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03,
-+ 0x1F, 0xBE, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x21, 0x26, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03,
-+ 0x21, 0x26, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03,
-+ 0x1F, 0x00, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03,
-+ 0x1F, 0x00, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
-+ 0x03, 0xB1, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45,
-+ 0x03, 0x42, 0x00, 0x03, 0x03, 0x91, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03, 0x1F, 0x08, 0x03, 0x45,
-+ 0x03, 0x40, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x08, 0x03, 0x45,
-+ 0x03, 0x41, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13,
-+ 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03,
-+ 0x03, 0xB7, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03,
-+ 0x1F, 0x21, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03,
-+ 0x1F, 0x21, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45,
-+ 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0x97, 0x03, 0x45,
-+ 0x03, 0x43, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x45,
-+ 0x03, 0x40, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x45,
-+ 0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97,
-+ 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03,
-+ 0x1F, 0x60, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03,
-+ 0x1F, 0x60, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
-+ 0x03, 0xC9, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x45,
-+ 0x03, 0x42, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x45,
-+ 0x03, 0x40, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x45,
-+ 0x03, 0x41, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13,
-+ 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03,
-+ 0x03, 0xB1, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03,
-+ 0x03, 0xB7, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03,
-+ 0x03, 0xC9, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x01, 0x00, 0x01,
-+ 0x00, 0x35, 0x03, 0x90, 0x1F, 0x32, 0x1F, 0x34, 0x1F, 0x6A, 0x1F, 0x6C, 0x1F, 0x80, 0x1F, 0x82,
-+ 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88, 0x1F, 0x8A, 0x1F, 0x8B,
-+ 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94,
-+ 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D,
-+ 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6,
-+ 0x1F, 0xA7, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF,
-+ 0x1F, 0xB2, 0x1F, 0xB4, 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xF2, 0x1F, 0xF4, 0x00, 0x01, 0x01, 0xE0,
-+ 0x00, 0x2D, 0x00, 0x60, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90,
-+ 0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8, 0x00, 0xB2, 0x00, 0xBC, 0x00, 0xC4, 0x00, 0xCC, 0x00, 0xD4,
-+ 0x00, 0xDC, 0x00, 0xE6, 0x00, 0xF0, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x08, 0x01, 0x10, 0x01, 0x1A,
-+ 0x01, 0x24, 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x44, 0x01, 0x4E, 0x01, 0x58, 0x01, 0x60,
-+ 0x01, 0x68, 0x01, 0x70, 0x01, 0x78, 0x01, 0x82, 0x01, 0x8C, 0x01, 0x94, 0x01, 0x9C, 0x01, 0xA4,
-+ 0x01, 0xAC, 0x01, 0xB4, 0x01, 0xBE, 0x01, 0xC8, 0x01, 0xD0, 0x01, 0xD8, 0x00, 0x03, 0x1F, 0xBE,
-+ 0x03, 0x08, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xBE,
-+ 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x21, 0x26, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x21, 0x26,
-+ 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xB3,
-+ 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xB3,
-+ 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04,
-+ 0x03, 0xB1, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x00,
-+ 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x01,
-+ 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x45,
-+ 0x03, 0x42, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xC3,
-+ 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xC3,
-+ 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7,
-+ 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42,
-+ 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x14, 0x03, 0x00,
-+ 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x14, 0x03, 0x01,
-+ 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45,
-+ 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xF3,
-+ 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xF3,
-+ 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04,
-+ 0x03, 0xC9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x14, 0x03, 0x00,
-+ 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x14, 0x03, 0x01,
-+ 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45,
-+ 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB7,
-+ 0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x41, 0x00, 0x01, 0x00, 0x2D,
- 0x03, 0x90, 0x1F, 0x32, 0x1F, 0x34, 0x1F, 0x6A, 0x1F, 0x6C, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84,
- 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E,
- 0x1F, 0x8F, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x9A,
- 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4,
- 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD,
-- 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB4, 0x1F, 0xC4, 0x1F, 0xD3, 0x1F, 0xF4, 0x00, 0x01, 0x01, 0x7C,
-- 0x00, 0x24, 0x00, 0x4E, 0x00, 0x56, 0x00, 0x5E, 0x00, 0x66, 0x00, 0x6E, 0x00, 0x76, 0x00, 0x7E,
-- 0x00, 0x86, 0x00, 0x8E, 0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8, 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC2,
-- 0x00, 0xCA, 0x00, 0xD2, 0x00, 0xDA, 0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF4, 0x00, 0xFC, 0x01, 0x04,
-- 0x01, 0x0C, 0x01, 0x16, 0x01, 0x1E, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x36, 0x01, 0x40, 0x01, 0x48,
-- 0x01, 0x50, 0x01, 0x58, 0x01, 0x60, 0x01, 0x68, 0x01, 0x72, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43,
-- 0x03, 0x00, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x21, 0x26, 0x03, 0x43,
-- 0x03, 0x00, 0x00, 0x03, 0x21, 0x26, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x13,
-- 0x03, 0x40, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x13,
-- 0x03, 0x41, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43,
-- 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xBC,
-- 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xBC,
-- 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03,
-- 0x1F, 0xC3, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
-- 0x1F, 0xC3, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04,
-- 0x03, 0xB7, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x40,
-- 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x41,
-- 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x42,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x14,
-- 0x03, 0x40, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x14,
-- 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x21, 0x26,
-- 0x03, 0x43, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xFC,
-- 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xFC,
-- 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x00, 0x04,
-- 0x21, 0x26, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x00, 0x01, 0x00, 0x24, 0x1F, 0x32, 0x1F, 0x34,
-- 0x1F, 0x6A, 0x1F, 0x6C, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x8A,
-+ 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB4, 0x1F, 0xC4, 0x1F, 0xF4, 0x00, 0x01, 0x01, 0x7C, 0x00, 0x24,
-+ 0x00, 0x4E, 0x00, 0x56, 0x00, 0x5E, 0x00, 0x66, 0x00, 0x6E, 0x00, 0x76, 0x00, 0x7E, 0x00, 0x86,
-+ 0x00, 0x8E, 0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8, 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC2, 0x00, 0xCA,
-+ 0x00, 0xD2, 0x00, 0xDA, 0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF4, 0x00, 0xFC, 0x01, 0x04, 0x01, 0x0C,
-+ 0x01, 0x16, 0x01, 0x1E, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x36, 0x01, 0x40, 0x01, 0x48, 0x01, 0x50,
-+ 0x01, 0x58, 0x01, 0x60, 0x01, 0x68, 0x01, 0x72, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43, 0x03, 0x00,
-+ 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x21, 0x26, 0x03, 0x43, 0x03, 0x00,
-+ 0x00, 0x03, 0x21, 0x26, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x13, 0x03, 0x40,
-+ 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x13, 0x03, 0x41,
-+ 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x42,
-+ 0x03, 0x45, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x14,
-+ 0x03, 0x40, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x14,
-+ 0x03, 0x41, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xC3,
-+ 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xC3,
-+ 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7,
-+ 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03,
-+ 0x1F, 0xCC, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03,
-+ 0x1F, 0xCC, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x14, 0x03, 0x40,
-+ 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x14, 0x03, 0x41,
-+ 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x21, 0x26, 0x03, 0x43,
-+ 0x03, 0x45, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x14,
-+ 0x03, 0x40, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x14,
-+ 0x03, 0x41, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26,
-+ 0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x00, 0x01, 0x00, 0x24, 0x1F, 0x32, 0x1F, 0x34, 0x1F, 0x6A,
-+ 0x1F, 0x6C, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x8A, 0x1F, 0x8B,
-+ 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96,
-+ 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4,
-+ 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
-+ 0x1F, 0xAF, 0x00, 0x01, 0x01, 0x94, 0x00, 0x24, 0x00, 0x4E, 0x00, 0x56, 0x00, 0x5E, 0x00, 0x66,
-+ 0x00, 0x6E, 0x00, 0x76, 0x00, 0x80, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAE,
-+ 0x00, 0xB6, 0x00, 0xC0, 0x00, 0xCA, 0x00, 0xD2, 0x00, 0xDC, 0x00, 0xE4, 0x00, 0xEE, 0x00, 0xF8,
-+ 0x01, 0x00, 0x01, 0x0A, 0x01, 0x12, 0x01, 0x1C, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x38, 0x01, 0x40,
-+ 0x01, 0x4A, 0x01, 0x54, 0x01, 0x5C, 0x01, 0x64, 0x01, 0x6E, 0x01, 0x76, 0x01, 0x80, 0x01, 0x8A,
-+ 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43, 0x03, 0x41,
-+ 0x00, 0x03, 0x21, 0x26, 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x21, 0x26, 0x03, 0x43, 0x03, 0x41,
-+ 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x00,
-+ 0x03, 0x45, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14,
-+ 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03,
-+ 0x1F, 0xBC, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x01,
-+ 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xC3,
-+ 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03,
-+ 0x1F, 0xC3, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45,
-+ 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x43,
-+ 0x03, 0x00, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xCC,
-+ 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04,
-+ 0x03, 0x97, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x43, 0x03, 0x00,
-+ 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x43,
-+ 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9,
-+ 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x00, 0x03,
-+ 0x1F, 0xFC, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45,
-+ 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x01,
-+ 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04, 0x21, 0x26,
-+ 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x01, 0x00, 0x24, 0x1F, 0x32, 0x1F, 0x34, 0x1F, 0x6A,
-+ 0x1F, 0x6C, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x8A, 0x1F, 0x8B,
-+ 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96,
-+ 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4,
-+ 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
-+ 0x1F, 0xAF, 0x00, 0x01, 0x01, 0x6C, 0x00, 0x20, 0x00, 0x46, 0x00, 0x4E, 0x00, 0x58, 0x00, 0x60,
-+ 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7C, 0x00, 0x86, 0x00, 0x8E, 0x00, 0x98, 0x00, 0xA2, 0x00, 0xAA,
-+ 0x00, 0xB4, 0x00, 0xBC, 0x00, 0xC6, 0x00, 0xD0, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEA, 0x00, 0xF4,
-+ 0x00, 0xFE, 0x01, 0x06, 0x01, 0x10, 0x01, 0x18, 0x01, 0x22, 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C,
-+ 0x01, 0x46, 0x01, 0x4E, 0x01, 0x58, 0x01, 0x62, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x43, 0x03, 0x40,
-+ 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x43,
-+ 0x03, 0x41, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1,
-+ 0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04,
-+ 0x03, 0x91, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x43, 0x03, 0x41,
-+ 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45,
-+ 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7,
-+ 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04,
-+ 0x03, 0xB7, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x13,
-+ 0x03, 0x42, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14,
-+ 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0x97,
-+ 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42,
-+ 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x40,
-+ 0x03, 0x45, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14,
-+ 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03,
-+ 0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04,
-+ 0x03, 0xA9, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x43, 0x03, 0x41,
-+ 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45,
-+ 0x03, 0x13, 0x03, 0x42, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x00, 0x01,
-+ 0x00, 0x20, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x8A, 0x1F, 0x8B,
-+ 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96,
-+ 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4,
-+ 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
-+ 0x1F, 0xAF, 0x00, 0x01, 0x01, 0x6E, 0x00, 0x1E, 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60,
-+ 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0,
-+ 0x00, 0xBA, 0x00, 0xC4, 0x00, 0xCE, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF6, 0x01, 0x00,
-+ 0x01, 0x0A, 0x01, 0x14, 0x01, 0x1E, 0x01, 0x28, 0x01, 0x32, 0x01, 0x3C, 0x01, 0x46, 0x01, 0x50,
-+ 0x01, 0x5A, 0x01, 0x64, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04,
-+ 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x01,
-+ 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB1,
-+ 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45,
-+ 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13,
-+ 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04,
-+ 0x03, 0x91, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x00,
-+ 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7,
-+ 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01,
-+ 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13,
-+ 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04,
-+ 0x03, 0x97, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14, 0x03, 0x45,
-+ 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0xC9,
-+ 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00,
-+ 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14,
-+ 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04,
-+ 0x03, 0xA9, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x45,
-+ 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9,
-+ 0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42,
-+ 0x00, 0x01, 0x00, 0x1E, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x8A,
- 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95,
- 0x1F, 0x96, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0xA2, 0x1F, 0xA3,
-- 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD,
-- 0x1F, 0xAE, 0x1F, 0xAF, 0x00, 0x01, 0x01, 0x94, 0x00, 0x24, 0x00, 0x4E, 0x00, 0x56, 0x00, 0x5E,
-- 0x00, 0x66, 0x00, 0x6E, 0x00, 0x76, 0x00, 0x80, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA4,
-- 0x00, 0xAE, 0x00, 0xB6, 0x00, 0xC0, 0x00, 0xCA, 0x00, 0xD2, 0x00, 0xDC, 0x00, 0xE4, 0x00, 0xEE,
-- 0x00, 0xF8, 0x01, 0x00, 0x01, 0x0A, 0x01, 0x12, 0x01, 0x1C, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x38,
-- 0x01, 0x40, 0x01, 0x4A, 0x01, 0x54, 0x01, 0x5C, 0x01, 0x64, 0x01, 0x6E, 0x01, 0x76, 0x01, 0x80,
-- 0x01, 0x8A, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43,
-- 0x03, 0x41, 0x00, 0x03, 0x21, 0x26, 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x21, 0x26, 0x03, 0x43,
-- 0x03, 0x41, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14,
-- 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB1,
-- 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42,
-- 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x00,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14,
-- 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03,
-- 0x1F, 0xC3, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45,
-- 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x01,
-- 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xCC,
-- 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03,
-- 0x1F, 0xCC, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45,
-- 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x43,
-- 0x03, 0x00, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xF3,
-- 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04,
-- 0x03, 0xC9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x21, 0x26, 0x03, 0x45, 0x03, 0x13,
-- 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x00,
-- 0x03, 0x45, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14,
-- 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04,
-- 0x21, 0x26, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x01, 0x00, 0x24, 0x1F, 0x32, 0x1F, 0x34,
-- 0x1F, 0x6A, 0x1F, 0x6C, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x8A,
-- 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95,
-- 0x1F, 0x96, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0xA2, 0x1F, 0xA3,
-- 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD,
-- 0x1F, 0xAE, 0x1F, 0xAF, 0x00, 0x01, 0x01, 0x6C, 0x00, 0x20, 0x00, 0x46, 0x00, 0x4E, 0x00, 0x58,
-- 0x00, 0x60, 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7C, 0x00, 0x86, 0x00, 0x8E, 0x00, 0x98, 0x00, 0xA2,
-- 0x00, 0xAA, 0x00, 0xB4, 0x00, 0xBC, 0x00, 0xC6, 0x00, 0xD0, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEA,
-- 0x00, 0xF4, 0x00, 0xFE, 0x01, 0x06, 0x01, 0x10, 0x01, 0x18, 0x01, 0x22, 0x01, 0x2C, 0x01, 0x34,
-- 0x01, 0x3C, 0x01, 0x46, 0x01, 0x4E, 0x01, 0x58, 0x01, 0x62, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x43,
-- 0x03, 0x40, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xB3,
-- 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04,
-- 0x03, 0xB1, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x43, 0x03, 0x40,
-- 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x43,
-- 0x03, 0x41, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91,
-- 0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04,
-- 0x03, 0xB7, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x43, 0x03, 0x41,
-- 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45,
-- 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97,
-- 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04,
-- 0x03, 0x97, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13,
-- 0x03, 0x42, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14,
-- 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9,
-- 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42,
-- 0x00, 0x03, 0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x43, 0x03, 0x40,
-- 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x43,
-- 0x03, 0x41, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9,
-- 0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42,
-- 0x00, 0x01, 0x00, 0x20, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x8A,
-- 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95,
-- 0x1F, 0x96, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0xA2, 0x1F, 0xA3,
-- 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD,
-- 0x1F, 0xAE, 0x1F, 0xAF, 0x00, 0x01, 0x01, 0x6E, 0x00, 0x1E, 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56,
-- 0x00, 0x60, 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6,
-- 0x00, 0xB0, 0x00, 0xBA, 0x00, 0xC4, 0x00, 0xCE, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF6,
-- 0x01, 0x00, 0x01, 0x0A, 0x01, 0x14, 0x01, 0x1E, 0x01, 0x28, 0x01, 0x32, 0x01, 0x3C, 0x01, 0x46,
-- 0x01, 0x50, 0x01, 0x5A, 0x01, 0x64, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45,
-- 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13,
-- 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04,
-- 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x00,
-- 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0x91,
-- 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01,
-- 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13,
-- 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04,
-- 0x03, 0xB7, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45,
-- 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0x97,
-- 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00,
-- 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14,
-- 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04,
-- 0x03, 0xC9, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x45,
-- 0x03, 0x00, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9,
-- 0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42,
-- 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14,
-- 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04,
-- 0x03, 0xA9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43,
-- 0x03, 0x42, 0x00, 0x01, 0x00, 0x1E, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86,
-- 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94,
-- 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0xA2,
-- 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD,
-- 0x1F, 0xAE, 0x00, 0x01, 0x01, 0x32, 0x00, 0x19, 0x00, 0x38, 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56,
-- 0x00, 0x60, 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6,
-- 0x00, 0xB0, 0x00, 0xBA, 0x00, 0xC4, 0x00, 0xCE, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF6,
-- 0x01, 0x00, 0x01, 0x0A, 0x01, 0x14, 0x01, 0x1E, 0x01, 0x28, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13,
-- 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04,
-- 0x03, 0xB1, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45,
-- 0x03, 0x41, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91,
-- 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45,
-- 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13,
-- 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04,
-- 0x03, 0xB7, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45,
-- 0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97,
-- 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45,
-- 0x00, 0x04, 0x03, 0x97, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13,
-- 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04,
-- 0x03, 0xC9, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x45,
-- 0x03, 0x41, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9,
-- 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45,
-- 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13,
-- 0x03, 0x42, 0x03, 0x45, 0x00, 0x01, 0x00, 0x19, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85,
-- 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95,
-- 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5,
-- 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x00, 0x01, 0x01, 0x32, 0x00, 0x19,
-- 0x00, 0x38, 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60, 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E,
-- 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0, 0x00, 0xBA, 0x00, 0xC4, 0x00, 0xCE,
-- 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF6, 0x01, 0x00, 0x01, 0x0A, 0x01, 0x14, 0x01, 0x1E,
-- 0x01, 0x28, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1,
-- 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01,
-- 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13,
-- 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x00, 0x04,
-- 0x03, 0x91, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x14,
-- 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7,
-- 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01,
-- 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13,
-- 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x00, 0x04,
-- 0x03, 0x97, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x14,
-- 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xC9,
-- 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01,
-- 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13,
-- 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x00, 0x04,
-- 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x14,
-- 0x03, 0x01, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x01, 0x00, 0x19,
-- 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D,
-- 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D,
-- 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD,
-- 0x1F, 0xAE, 0x00, 0x01, 0x01, 0x32, 0x00, 0x19, 0x00, 0x38, 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56,
-- 0x00, 0x60, 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6,
-- 0x00, 0xB0, 0x00, 0xBA, 0x00, 0xC4, 0x00, 0xCE, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF6,
-- 0x01, 0x00, 0x01, 0x0A, 0x01, 0x14, 0x01, 0x1E, 0x01, 0x28, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13,
-- 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x00, 0x04,
-- 0x03, 0xB1, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x14,
-- 0x03, 0x41, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91,
-- 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41,
-- 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13,
-- 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x00, 0x04,
-- 0x03, 0xB7, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x14,
-- 0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97,
-- 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41,
-- 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13,
-- 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x00, 0x04,
-- 0x03, 0xC9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x14,
-- 0x03, 0x41, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9,
-- 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41,
-- 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43,
-- 0x03, 0x42, 0x03, 0x45, 0x00, 0x01, 0x00, 0x19, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85,
-- 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95,
-- 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5,
-- 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x00, 0x01, 0x00, 0xBA, 0x00, 0x0F,
-- 0x00, 0x24, 0x00, 0x2E, 0x00, 0x38, 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60, 0x00, 0x6A,
-- 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0, 0x00, 0x04,
-- 0x03, 0xB1, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x01,
-- 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91,
-- 0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45,
-- 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43,
-- 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04,
-- 0x03, 0xC9, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x01,
-- 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26,
-- 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45,
-- 0x00, 0x04, 0x21, 0x26, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43,
-- 0x03, 0x45, 0x03, 0x42, 0x00, 0x01, 0x00, 0x0F, 0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C,
-- 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAB,
-- 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x00, 0x01, 0x00, 0xBA, 0x00, 0x0F, 0x00, 0x24, 0x00, 0x2E,
-- 0x00, 0x38, 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60, 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E,
-- 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43,
-- 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04,
-- 0x03, 0x91, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x41,
-- 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7,
-- 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45,
-- 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43,
-- 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04,
-- 0x03, 0xA9, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14, 0x03, 0x40,
-- 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26,
-- 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42,
-- 0x00, 0x01, 0x00, 0x0F, 0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94,
-- 0x1F, 0x9A, 0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD,
-- 0x1F, 0xAE, 0x00, 0x01, 0x00, 0xBA, 0x00, 0x0F, 0x00, 0x24, 0x00, 0x2E, 0x00, 0x38, 0x00, 0x42,
-- 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60, 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88, 0x00, 0x92,
-- 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00,
-- 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43,
-- 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04,
-- 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45,
-- 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0x97,
-- 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00,
-- 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43,
-- 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04,
-- 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14, 0x03, 0x45,
-- 0x03, 0x01, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x01, 0x00, 0x0F,
-- 0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C,
-- 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x00, 0x01,
-- 0x00, 0xAE, 0x00, 0x0E, 0x00, 0x22, 0x00, 0x2C, 0x00, 0x36, 0x00, 0x40, 0x00, 0x4A, 0x00, 0x54,
-- 0x00, 0x5E, 0x00, 0x68, 0x00, 0x72, 0x00, 0x7C, 0x00, 0x86, 0x00, 0x90, 0x00, 0x9A, 0x00, 0xA4,
-- 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43,
-- 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04,
-- 0x03, 0x91, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45,
-- 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0x97,
-- 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41,
-- 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43,
-- 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04,
-- 0x21, 0x26, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45,
-- 0x03, 0x41, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x00, 0x01, 0x00, 0x0E,
-- 0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C,
-- 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x00, 0x01, 0x00, 0xAE,
-+ 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
-+ 0x00, 0x01, 0x01, 0x32, 0x00, 0x19, 0x00, 0x38, 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60,
-+ 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0,
-+ 0x00, 0xBA, 0x00, 0xC4, 0x00, 0xCE, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF6, 0x01, 0x00,
-+ 0x01, 0x0A, 0x01, 0x14, 0x01, 0x1E, 0x01, 0x28, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x40,
-+ 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB1,
-+ 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41,
-+ 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14,
-+ 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04,
-+ 0x03, 0x91, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x40,
-+ 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7,
-+ 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41,
-+ 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14,
-+ 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04,
-+ 0x03, 0x97, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x40,
-+ 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9,
-+ 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41,
-+ 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14,
-+ 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04,
-+ 0x03, 0xA9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x42,
-+ 0x03, 0x45, 0x00, 0x01, 0x00, 0x19, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x8A,
-+ 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x9A,
-+ 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xAA,
-+ 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x00, 0x01, 0x01, 0x32, 0x00, 0x19, 0x00, 0x38,
-+ 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60, 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88,
-+ 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0, 0x00, 0xBA, 0x00, 0xC4, 0x00, 0xCE, 0x00, 0xD8,
-+ 0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF6, 0x01, 0x00, 0x01, 0x0A, 0x01, 0x14, 0x01, 0x1E, 0x01, 0x28,
-+ 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45,
-+ 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04,
-+ 0x03, 0xB1, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x45,
-+ 0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0x91,
-+ 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01,
-+ 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45,
-+ 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04,
-+ 0x03, 0xB7, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x45,
-+ 0x03, 0x00, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0x97,
-+ 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01,
-+ 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45,
-+ 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04,
-+ 0x03, 0xC9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45,
-+ 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9,
-+ 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01,
-+ 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x01, 0x00, 0x19, 0x1F, 0x82,
-+ 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x92,
-+ 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0xA2,
-+ 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
-+ 0x00, 0x01, 0x01, 0x32, 0x00, 0x19, 0x00, 0x38, 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60,
-+ 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0,
-+ 0x00, 0xBA, 0x00, 0xC4, 0x00, 0xCE, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF6, 0x01, 0x00,
-+ 0x01, 0x0A, 0x01, 0x14, 0x01, 0x1E, 0x01, 0x28, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x45,
-+ 0x03, 0x40, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB1,
-+ 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41,
-+ 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45,
-+ 0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
-+ 0x03, 0x91, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x45,
-+ 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7,
-+ 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41,
-+ 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45,
-+ 0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
-+ 0x03, 0x97, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x45,
-+ 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9,
-+ 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41,
-+ 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45,
-+ 0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
-+ 0x03, 0xA9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x42,
-+ 0x03, 0x45, 0x00, 0x01, 0x00, 0x19, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x8A,
-+ 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x9A,
-+ 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xAA,
-+ 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x00, 0x01, 0x00, 0xBA, 0x00, 0x0F, 0x00, 0x24,
-+ 0x00, 0x2E, 0x00, 0x38, 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60, 0x00, 0x6A, 0x00, 0x74,
-+ 0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0, 0x00, 0x04, 0x03, 0xB1,
-+ 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45,
-+ 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43,
-+ 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04,
-+ 0x03, 0xB7, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x00,
-+ 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9,
-+ 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45,
-+ 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14,
-+ 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04,
-+ 0x21, 0x26, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x45,
-+ 0x03, 0x42, 0x00, 0x01, 0x00, 0x0F, 0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92,
-+ 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC,
-+ 0x1F, 0xAD, 0x1F, 0xAE, 0x00, 0x01, 0x00, 0xBA, 0x00, 0x0F, 0x00, 0x24, 0x00, 0x2E, 0x00, 0x38,
-+ 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60, 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88,
-+ 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x40,
-+ 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91,
-+ 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45,
-+ 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43,
-+ 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04,
-+ 0x03, 0x97, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x40,
-+ 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9,
-+ 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45,
-+ 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14,
-+ 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x00, 0x01,
-+ 0x00, 0x0F, 0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A,
-+ 0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
-+ 0x00, 0x01, 0x00, 0xBA, 0x00, 0x0F, 0x00, 0x24, 0x00, 0x2E, 0x00, 0x38, 0x00, 0x42, 0x00, 0x4C,
-+ 0x00, 0x56, 0x00, 0x60, 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C,
-+ 0x00, 0xA6, 0x00, 0xB0, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04,
-+ 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45,
-+ 0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7,
-+ 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01,
-+ 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43,
-+ 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04,
-+ 0x03, 0xC9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45,
-+ 0x03, 0x00, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9,
-+ 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01,
-+ 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x01, 0x00, 0x0F, 0x1F, 0x82,
-+ 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C, 0x1F, 0xA2,
-+ 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x00, 0x01, 0x00, 0xAE,
- 0x00, 0x0E, 0x00, 0x22, 0x00, 0x2C, 0x00, 0x36, 0x00, 0x40, 0x00, 0x4A, 0x00, 0x54, 0x00, 0x5E,
- 0x00, 0x68, 0x00, 0x72, 0x00, 0x7C, 0x00, 0x86, 0x00, 0x90, 0x00, 0x9A, 0x00, 0xA4, 0x00, 0x04,
-- 0x03, 0xB1, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x13,
-- 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04, 0x03, 0x91,
-- 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00,
-- 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45,
-- 0x03, 0x13, 0x03, 0x00, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x00, 0x04,
-- 0x03, 0xC9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x13,
-- 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04, 0x21, 0x26,
-- 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01,
-- 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x00, 0x01, 0x00, 0x0E, 0x1F, 0x82,
-+ 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45,
-+ 0x03, 0x41, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91,
-+ 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40,
-+ 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43,
-+ 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
-+ 0x03, 0xC9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x45,
-+ 0x03, 0x41, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x21, 0x26,
-+ 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41,
-+ 0x00, 0x04, 0x21, 0x26, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x00, 0x01, 0x00, 0x0E, 0x1F, 0x82,
- 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C, 0x1F, 0xA2,
- 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x00, 0x01, 0x00, 0xAE, 0x00, 0x0E,
- 0x00, 0x22, 0x00, 0x2C, 0x00, 0x36, 0x00, 0x40, 0x00, 0x4A, 0x00, 0x54, 0x00, 0x5E, 0x00, 0x68,
- 0x00, 0x72, 0x00, 0x7C, 0x00, 0x86, 0x00, 0x90, 0x00, 0x9A, 0x00, 0xA4, 0x00, 0x04, 0x03, 0xB1,
-- 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41,
-- 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45,
-- 0x03, 0x13, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x00, 0x04,
-- 0x03, 0xB7, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13,
-- 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9,
-- 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41,
-- 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45,
-- 0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x04,
-- 0x21, 0x26, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x00, 0x01, 0x00, 0x0E, 0x1F, 0x82, 0x1F, 0x84,
-+ 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01,
-+ 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45,
-+ 0x03, 0x13, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04,
-+ 0x03, 0xB7, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13,
-+ 0x03, 0x00, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9,
-+ 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01,
-+ 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45,
-+ 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x00, 0x04,
-+ 0x21, 0x26, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x00, 0x01, 0x00, 0x0E, 0x1F, 0x82, 0x1F, 0x84,
- 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4,
-- 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x00, 0x01, 0x00, 0x96, 0x00, 0x0C, 0x00, 0x1E,
-+ 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x00, 0x01, 0x00, 0xAE, 0x00, 0x0E, 0x00, 0x22,
-+ 0x00, 0x2C, 0x00, 0x36, 0x00, 0x40, 0x00, 0x4A, 0x00, 0x54, 0x00, 0x5E, 0x00, 0x68, 0x00, 0x72,
-+ 0x00, 0x7C, 0x00, 0x86, 0x00, 0x90, 0x00, 0x9A, 0x00, 0xA4, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45,
-+ 0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x04,
-+ 0x03, 0x91, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x13,
-+ 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7,
-+ 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40,
-+ 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45,
-+ 0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x04,
-+ 0x03, 0xA9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x14,
-+ 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x04, 0x21, 0x26,
-+ 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x00, 0x01, 0x00, 0x0E, 0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A,
-+ 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA,
-+ 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x00, 0x01, 0x00, 0x96, 0x00, 0x0C, 0x00, 0x1E, 0x00, 0x28,
-+ 0x00, 0x32, 0x00, 0x3C, 0x00, 0x46, 0x00, 0x50, 0x00, 0x5A, 0x00, 0x64, 0x00, 0x6E, 0x00, 0x78,
-+ 0x00, 0x82, 0x00, 0x8C, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04,
-+ 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x43,
-+ 0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7,
-+ 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01,
-+ 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45,
-+ 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04,
-+ 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43,
-+ 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x00, 0x01, 0x00, 0x0C,
-+ 0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C,
-+ 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x96, 0x00, 0x0C, 0x00, 0x1E,
- 0x00, 0x28, 0x00, 0x32, 0x00, 0x3C, 0x00, 0x46, 0x00, 0x50, 0x00, 0x5A, 0x00, 0x64, 0x00, 0x6E,
-- 0x00, 0x78, 0x00, 0x82, 0x00, 0x8C, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00,
-- 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45,
-- 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04,
-- 0x03, 0xB7, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x43,
-- 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0x97,
-- 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00,
-- 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45,
-- 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x00, 0x01,
-+ 0x00, 0x78, 0x00, 0x82, 0x00, 0x8C, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40,
-+ 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45,
-+ 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04,
-+ 0x03, 0xB7, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x43,
-+ 0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97,
-+ 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40,
-+ 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45,
-+ 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x01,
- 0x00, 0x0C, 0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A,
-- 0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x96, 0x00, 0x0C,
-- 0x00, 0x1E, 0x00, 0x28, 0x00, 0x32, 0x00, 0x3C, 0x00, 0x46, 0x00, 0x50, 0x00, 0x5A, 0x00, 0x64,
-- 0x00, 0x6E, 0x00, 0x78, 0x00, 0x82, 0x00, 0x8C, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43,
-- 0x03, 0x40, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0x91,
-- 0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41,
-- 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45,
-- 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04,
-- 0x03, 0x97, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43,
-- 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0xA9,
-- 0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41,
-- 0x00, 0x01, 0x00, 0x0C, 0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94,
-- 0x1F, 0x9A, 0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E,
-- 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45,
-- 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA,
-+ 0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02,
-+ 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04,
-+ 0x21, 0x26, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC,
-+ 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13,
-+ 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x01,
-+ 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14,
-+ 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13,
-+ 0x03, 0x45, 0x03, 0x01, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E,
-+ 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40,
-+ 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA,
- 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26,
-- 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45,
-+ 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45,
- 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A,
-- 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x21, 0x26,
-- 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01,
-- 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45,
-- 0x03, 0x40, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x01, 0x00, 0x02,
-+ 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26,
-+ 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01,
-+ 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x45,
-+ 0x03, 0x00, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x01, 0x00, 0x02,
- 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04,
-- 0x21, 0x26, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x01,
-- 0x03, 0x45, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02,
-- 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04,
-- 0x21, 0x26, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC,
-- 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43,
-- 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x01,
-+ 0x21, 0x26, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x45,
-+ 0x03, 0x41, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02,
-+ 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04,
-+ 0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC,
-+ 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45,
-+ 0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x01,
- 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14,
-- 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43,
-- 0x03, 0x45, 0x03, 0x41, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E,
-- 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00,
-- 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA,
-- 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26,
-- 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41,
-- 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A,
-- 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x21, 0x26,
-- 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01,
-- 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x43,
-- 0x03, 0x40, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x01, 0x00, 0x02,
-- 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x4E,
-- 0x00, 0x06, 0x00, 0x12, 0x00, 0x1C, 0x00, 0x26, 0x00, 0x30, 0x00, 0x3A, 0x00, 0x44, 0x00, 0x01,
-- 0x00, 0x04, 0x0A, 0x59, 0x00, 0x02, 0x0A, 0x3C, 0x00, 0x01, 0x00, 0x04, 0x0A, 0x5A, 0x00, 0x02,
-- 0x0A, 0x3C, 0x00, 0x01, 0x00, 0x04, 0x0A, 0x5B, 0x00, 0x02, 0x0A, 0x3C, 0x00, 0x01, 0x00, 0x04,
-- 0x0A, 0x5E, 0x00, 0x02, 0x0A, 0x3C, 0x00, 0x01, 0x00, 0x04, 0x0A, 0x33, 0x00, 0x02, 0x0A, 0x3C,
-- 0x00, 0x01, 0x00, 0x04, 0x0A, 0x36, 0x00, 0x02, 0x0A, 0x3C, 0x00, 0x01, 0x00, 0x06, 0x0A, 0x16,
-- 0x0A, 0x17, 0x0A, 0x1C, 0x0A, 0x2B, 0x0A, 0x32, 0x0A, 0x38, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01,
-- 0x00, 0x08, 0x00, 0x01, 0x00, 0x36, 0x00, 0x06, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24,
-- 0x00, 0x2A, 0x00, 0x30, 0x00, 0x02, 0x0A, 0x32, 0x0A, 0x3C, 0x00, 0x02, 0x0A, 0x38, 0x0A, 0x3C,
-- 0x00, 0x02, 0x0A, 0x16, 0x0A, 0x3C, 0x00, 0x02, 0x0A, 0x17, 0x0A, 0x3C, 0x00, 0x02, 0x0A, 0x1C,
-- 0x0A, 0x3C, 0x00, 0x02, 0x0A, 0x2B, 0x0A, 0x3C, 0x00, 0x01, 0x00, 0x06, 0x0A, 0x33, 0x0A, 0x36,
-- 0x0A, 0x59, 0x0A, 0x5A, 0x0A, 0x5B, 0x0A, 0x5E, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08,
-- 0x00, 0x01, 0x01, 0xB6, 0x00, 0x1A, 0x00, 0x3A, 0x00, 0x54, 0x00, 0x66, 0x00, 0x70, 0x00, 0x7A,
-- 0x00, 0x84, 0x00, 0x96, 0x00, 0xA0, 0x00, 0xAA, 0x00, 0xBC, 0x00, 0xC6, 0x00, 0xD8, 0x00, 0xE2,
-- 0x00, 0xEC, 0x00, 0xF6, 0x01, 0x00, 0x01, 0x0A, 0x01, 0x1C, 0x01, 0x26, 0x01, 0x30, 0x01, 0x3A,
-- 0x01, 0x7C, 0x01, 0x86, 0x01, 0x90, 0x01, 0x9A, 0x01, 0xA4, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E,
-- 0x00, 0x14, 0xFB, 0x2E, 0x00, 0x02, 0x05, 0xB7, 0xFB, 0x2F, 0x00, 0x02, 0x05, 0xB8, 0xFB, 0x30,
-- 0x00, 0x02, 0x05, 0xBC, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0xFB, 0x31, 0x00, 0x02, 0x05, 0xBC,
-- 0xFB, 0x4C, 0x00, 0x02, 0x05, 0xBF, 0x00, 0x01, 0x00, 0x04, 0xFB, 0x32, 0x00, 0x02, 0x05, 0xBC,
-- 0x00, 0x01, 0x00, 0x04, 0xFB, 0x33, 0x00, 0x02, 0x05, 0xBC, 0x00, 0x01, 0x00, 0x04, 0xFB, 0x34,
-- 0x00, 0x02, 0x05, 0xBC, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0xFB, 0x4B, 0x00, 0x02, 0x05, 0xB9,
-- 0xFB, 0x35, 0x00, 0x02, 0x05, 0xBC, 0x00, 0x01, 0x00, 0x04, 0xFB, 0x36, 0x00, 0x02, 0x05, 0xBC,
-- 0x00, 0x01, 0x00, 0x04, 0xFB, 0x38, 0x00, 0x02, 0x05, 0xBC, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C,
-- 0xFB, 0x1D, 0x00, 0x02, 0x05, 0xB4, 0xFB, 0x39, 0x00, 0x02, 0x05, 0xBC, 0x00, 0x01, 0x00, 0x04,
-- 0xFB, 0x3A, 0x00, 0x02, 0x05, 0xBC, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0xFB, 0x3B, 0x00, 0x02,
-- 0x05, 0xBC, 0xFB, 0x4D, 0x00, 0x02, 0x05, 0xBF, 0x00, 0x01, 0x00, 0x04, 0xFB, 0x3C, 0x00, 0x02,
-- 0x05, 0xBC, 0x00, 0x01, 0x00, 0x04, 0xFB, 0x3E, 0x00, 0x02, 0x05, 0xBC, 0x00, 0x01, 0x00, 0x04,
-- 0xFB, 0x40, 0x00, 0x02, 0x05, 0xBC, 0x00, 0x01, 0x00, 0x04, 0xFB, 0x41, 0x00, 0x02, 0x05, 0xBC,
-- 0x00, 0x01, 0x00, 0x04, 0xFB, 0x43, 0x00, 0x02, 0x05, 0xBC, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C,
-- 0xFB, 0x44, 0x00, 0x02, 0x05, 0xBC, 0xFB, 0x4E, 0x00, 0x02, 0x05, 0xBF, 0x00, 0x01, 0x00, 0x04,
-- 0xFB, 0x46, 0x00, 0x02, 0x05, 0xBC, 0x00, 0x01, 0x00, 0x04, 0xFB, 0x47, 0x00, 0x02, 0x05, 0xBC,
-- 0x00, 0x01, 0x00, 0x04, 0xFB, 0x48, 0x00, 0x02, 0x05, 0xBC, 0x00, 0x07, 0x00, 0x10, 0x00, 0x18,
-- 0x00, 0x20, 0x00, 0x26, 0x00, 0x2E, 0x00, 0x34, 0x00, 0x3C, 0xFB, 0x2C, 0x00, 0x03, 0x05, 0xBC,
-- 0x05, 0xC1, 0xFB, 0x2D, 0x00, 0x03, 0x05, 0xBC, 0x05, 0xC2, 0xFB, 0x49, 0x00, 0x02, 0x05, 0xBC,
-- 0xFB, 0x2C, 0x00, 0x03, 0x05, 0xC1, 0x05, 0xBC, 0xFB, 0x2A, 0x00, 0x02, 0x05, 0xC1, 0xFB, 0x2D,
-- 0x00, 0x03, 0x05, 0xC2, 0x05, 0xBC, 0xFB, 0x2B, 0x00, 0x02, 0x05, 0xC2, 0x00, 0x01, 0x00, 0x04,
-- 0xFB, 0x4A, 0x00, 0x02, 0x05, 0xBC, 0x00, 0x01, 0x00, 0x04, 0xFB, 0x1F, 0x00, 0x02, 0x05, 0xB7,
-- 0x00, 0x01, 0x00, 0x04, 0xFB, 0x2C, 0x00, 0x02, 0x05, 0xBC, 0x00, 0x01, 0x00, 0x04, 0xFB, 0x2D,
-- 0x00, 0x02, 0x05, 0xBC, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0xFB, 0x2C, 0x00, 0x02, 0x05, 0xC1,
-- 0xFB, 0x2D, 0x00, 0x02, 0x05, 0xC2, 0x00, 0x01, 0x00, 0x1A, 0x05, 0xD0, 0x05, 0xD1, 0x05, 0xD2,
-- 0x05, 0xD3, 0x05, 0xD4, 0x05, 0xD5, 0x05, 0xD6, 0x05, 0xD8, 0x05, 0xD9, 0x05, 0xDA, 0x05, 0xDB,
-- 0x05, 0xDC, 0x05, 0xDE, 0x05, 0xE0, 0x05, 0xE1, 0x05, 0xE3, 0x05, 0xE4, 0x05, 0xE6, 0x05, 0xE7,
-- 0x05, 0xE8, 0x05, 0xE9, 0x05, 0xEA, 0x05, 0xF2, 0xFB, 0x2A, 0xFB, 0x2B, 0xFB, 0x49, 0x00, 0x02,
-- 0x00, 0x00, 0x00, 0x04, 0x00, 0x0E, 0x01, 0x6C, 0x01, 0x8A, 0x01, 0xAC, 0x00, 0x01, 0x01, 0x16,
-- 0x00, 0x22, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x56, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x68, 0x00, 0x6E,
-- 0x00, 0x74, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0x00, 0x92, 0x00, 0x98, 0x00, 0x9E,
-- 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB0, 0x00, 0xB6, 0x00, 0xBC, 0x00, 0xC2, 0x00, 0xC8, 0x00, 0xCE,
-- 0x00, 0xD4, 0x00, 0xDA, 0x00, 0xE0, 0x00, 0xE6, 0x00, 0xEC, 0x00, 0xF2, 0x00, 0xF8, 0x00, 0xFE,
-- 0x01, 0x04, 0x01, 0x0A, 0x01, 0x10, 0x00, 0x02, 0x05, 0xD9, 0x05, 0xB4, 0x00, 0x02, 0x05, 0xF2,
-- 0x05, 0xB7, 0x00, 0x02, 0x05, 0xE9, 0x05, 0xC1, 0x00, 0x02, 0x05, 0xE9, 0x05, 0xC2, 0x00, 0x02,
-- 0xFB, 0x2A, 0x05, 0xBC, 0x00, 0x02, 0xFB, 0x2B, 0x05, 0xBC, 0x00, 0x02, 0x05, 0xD0, 0x05, 0xB7,
-- 0x00, 0x02, 0x05, 0xD0, 0x05, 0xB8, 0x00, 0x02, 0x05, 0xD0, 0x05, 0xBC, 0x00, 0x02, 0x05, 0xD1,
-- 0x05, 0xBC, 0x00, 0x02, 0x05, 0xD2, 0x05, 0xBC, 0x00, 0x02, 0x05, 0xD3, 0x05, 0xBC, 0x00, 0x02,
-- 0x05, 0xD4, 0x05, 0xBC, 0x00, 0x02, 0x05, 0xD5, 0x05, 0xBC, 0x00, 0x02, 0x05, 0xD6, 0x05, 0xBC,
-- 0x00, 0x02, 0x05, 0xD8, 0x05, 0xBC, 0x00, 0x02, 0x05, 0xD9, 0x05, 0xBC, 0x00, 0x02, 0x05, 0xDA,
-- 0x05, 0xBC, 0x00, 0x02, 0x05, 0xDB, 0x05, 0xBC, 0x00, 0x02, 0x05, 0xDC, 0x05, 0xBC, 0x00, 0x02,
-- 0x05, 0xDE, 0x05, 0xBC, 0x00, 0x02, 0x05, 0xE0, 0x05, 0xBC, 0x00, 0x02, 0x05, 0xE1, 0x05, 0xBC,
-- 0x00, 0x02, 0x05, 0xE3, 0x05, 0xBC, 0x00, 0x02, 0x05, 0xE4, 0x05, 0xBC, 0x00, 0x02, 0x05, 0xE6,
-- 0x05, 0xBC, 0x00, 0x02, 0x05, 0xE7, 0x05, 0xBC, 0x00, 0x02, 0x05, 0xE8, 0x05, 0xBC, 0x00, 0x02,
-- 0x05, 0xE9, 0x05, 0xBC, 0x00, 0x02, 0x05, 0xEA, 0x05, 0xBC, 0x00, 0x02, 0x05, 0xD5, 0x05, 0xB9,
-- 0x00, 0x02, 0x05, 0xD1, 0x05, 0xBF, 0x00, 0x02, 0x05, 0xDB, 0x05, 0xBF, 0x00, 0x02, 0x05, 0xE4,
-- 0x05, 0xBF, 0x00, 0x01, 0x00, 0x22, 0xFB, 0x1D, 0xFB, 0x1F, 0xFB, 0x2A, 0xFB, 0x2B, 0xFB, 0x2C,
-- 0xFB, 0x2D, 0xFB, 0x2E, 0xFB, 0x2F, 0xFB, 0x30, 0xFB, 0x31, 0xFB, 0x32, 0xFB, 0x33, 0xFB, 0x34,
-- 0xFB, 0x35, 0xFB, 0x36, 0xFB, 0x38, 0xFB, 0x39, 0xFB, 0x3A, 0xFB, 0x3B, 0xFB, 0x3C, 0xFB, 0x3E,
-- 0xFB, 0x40, 0xFB, 0x41, 0xFB, 0x43, 0xFB, 0x44, 0xFB, 0x46, 0xFB, 0x47, 0xFB, 0x48, 0xFB, 0x49,
-- 0xFB, 0x4A, 0xFB, 0x4B, 0xFB, 0x4C, 0xFB, 0x4D, 0xFB, 0x4E, 0x00, 0x01, 0x00, 0x16, 0x00, 0x02,
-- 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0xFB, 0x49, 0x05, 0xC1, 0x00, 0x02, 0xFB, 0x49, 0x05, 0xC2,
-- 0x00, 0x01, 0x00, 0x02, 0xFB, 0x2C, 0xFB, 0x2D, 0x00, 0x01, 0x00, 0x1A, 0x00, 0x02, 0x00, 0x0A,
-- 0x00, 0x12, 0x00, 0x03, 0x05, 0xE9, 0x05, 0xBC, 0x05, 0xC1, 0x00, 0x03, 0x05, 0xE9, 0x05, 0xBC,
-- 0x05, 0xC2, 0x00, 0x01, 0x00, 0x02, 0xFB, 0x2C, 0xFB, 0x2D, 0x00, 0x01, 0x00, 0x1A, 0x00, 0x02,
-- 0x00, 0x0A, 0x00, 0x12, 0x00, 0x03, 0x05, 0xE9, 0x05, 0xC1, 0x05, 0xBC, 0x00, 0x03, 0x05, 0xE9,
-- 0x05, 0xC2, 0x05, 0xBC, 0x00, 0x01, 0x00, 0x02, 0xFB, 0x2C, 0xFB, 0x2D, 0x00, 0x04, 0x00, 0x00,
-- 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x01, 0x36, 0x00, 0x16, 0x00, 0x32, 0x00, 0x3C, 0x00, 0x46,
-- 0x00, 0x50, 0x00, 0x5A, 0x00, 0x64, 0x00, 0x6E, 0x00, 0x78, 0x00, 0x82, 0x00, 0x8C, 0x00, 0x96,
-- 0x00, 0xA0, 0x00, 0xAA, 0x00, 0xB4, 0x00, 0xBE, 0x00, 0xC8, 0x00, 0xD2, 0x00, 0xE4, 0x00, 0xF6,
-- 0x01, 0x08, 0x01, 0x1A, 0x01, 0x2C, 0x00, 0x01, 0x00, 0x04, 0x30, 0x94, 0x00, 0x02, 0x30, 0x99,
-- 0x00, 0x01, 0x00, 0x04, 0x30, 0x4C, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x4E,
-- 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x50, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01,
-- 0x00, 0x04, 0x30, 0x52, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x54, 0x00, 0x02,
-- 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x56, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04,
-- 0x30, 0x58, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x5A, 0x00, 0x02, 0x30, 0x99,
-- 0x00, 0x01, 0x00, 0x04, 0x30, 0x5C, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x5E,
-- 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x60, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01,
-- 0x00, 0x04, 0x30, 0x62, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x65, 0x00, 0x02,
-- 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x67, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04,
-- 0x30, 0x69, 0x00, 0x02, 0x30, 0x99, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0x70, 0x00, 0x02,
-- 0x30, 0x99, 0x30, 0x71, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0x73,
-- 0x00, 0x02, 0x30, 0x99, 0x30, 0x74, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C,
-- 0x30, 0x76, 0x00, 0x02, 0x30, 0x99, 0x30, 0x77, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06,
-- 0x00, 0x0C, 0x30, 0x79, 0x00, 0x02, 0x30, 0x99, 0x30, 0x7A, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02,
-- 0x00, 0x06, 0x00, 0x0C, 0x30, 0x7C, 0x00, 0x02, 0x30, 0x99, 0x30, 0x7D, 0x00, 0x02, 0x30, 0x9A,
-- 0x00, 0x01, 0x00, 0x04, 0x30, 0x9E, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x16, 0x30, 0x46,
-- 0x30, 0x4B, 0x30, 0x4D, 0x30, 0x4F, 0x30, 0x51, 0x30, 0x53, 0x30, 0x55, 0x30, 0x57, 0x30, 0x59,
-- 0x30, 0x5B, 0x30, 0x5D, 0x30, 0x5F, 0x30, 0x61, 0x30, 0x64, 0x30, 0x66, 0x30, 0x68, 0x30, 0x6F,
-- 0x30, 0x72, 0x30, 0x75, 0x30, 0x78, 0x30, 0x7B, 0x30, 0x9D, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01,
-- 0x00, 0x08, 0x00, 0x01, 0x00, 0xDE, 0x00, 0x1B, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E,
-- 0x00, 0x54, 0x00, 0x5A, 0x00, 0x60, 0x00, 0x66, 0x00, 0x6C, 0x00, 0x72, 0x00, 0x78, 0x00, 0x7E,
-- 0x00, 0x84, 0x00, 0x8A, 0x00, 0x90, 0x00, 0x96, 0x00, 0x9C, 0x00, 0xA2, 0x00, 0xA8, 0x00, 0xAE,
-- 0x00, 0xB4, 0x00, 0xBA, 0x00, 0xC0, 0x00, 0xC6, 0x00, 0xCC, 0x00, 0xD2, 0x00, 0xD8, 0x00, 0x02,
-- 0x30, 0x4B, 0x30, 0x99, 0x00, 0x02, 0x30, 0x4D, 0x30, 0x99, 0x00, 0x02, 0x30, 0x4F, 0x30, 0x99,
-- 0x00, 0x02, 0x30, 0x51, 0x30, 0x99, 0x00, 0x02, 0x30, 0x53, 0x30, 0x99, 0x00, 0x02, 0x30, 0x55,
-- 0x30, 0x99, 0x00, 0x02, 0x30, 0x57, 0x30, 0x99, 0x00, 0x02, 0x30, 0x59, 0x30, 0x99, 0x00, 0x02,
-- 0x30, 0x5B, 0x30, 0x99, 0x00, 0x02, 0x30, 0x5D, 0x30, 0x99, 0x00, 0x02, 0x30, 0x5F, 0x30, 0x99,
-- 0x00, 0x02, 0x30, 0x61, 0x30, 0x99, 0x00, 0x02, 0x30, 0x64, 0x30, 0x99, 0x00, 0x02, 0x30, 0x66,
-- 0x30, 0x99, 0x00, 0x02, 0x30, 0x68, 0x30, 0x99, 0x00, 0x02, 0x30, 0x6F, 0x30, 0x99, 0x00, 0x02,
-- 0x30, 0x6F, 0x30, 0x9A, 0x00, 0x02, 0x30, 0x72, 0x30, 0x99, 0x00, 0x02, 0x30, 0x72, 0x30, 0x9A,
-- 0x00, 0x02, 0x30, 0x75, 0x30, 0x99, 0x00, 0x02, 0x30, 0x75, 0x30, 0x9A, 0x00, 0x02, 0x30, 0x78,
-- 0x30, 0x99, 0x00, 0x02, 0x30, 0x78, 0x30, 0x9A, 0x00, 0x02, 0x30, 0x7B, 0x30, 0x99, 0x00, 0x02,
-- 0x30, 0x7B, 0x30, 0x9A, 0x00, 0x02, 0x30, 0x46, 0x30, 0x99, 0x00, 0x02, 0x30, 0x9D, 0x30, 0x99,
-- 0x00, 0x01, 0x00, 0x1B, 0x30, 0x4C, 0x30, 0x4E, 0x30, 0x50, 0x30, 0x52, 0x30, 0x54, 0x30, 0x56,
-- 0x30, 0x58, 0x30, 0x5A, 0x30, 0x5C, 0x30, 0x5E, 0x30, 0x60, 0x30, 0x62, 0x30, 0x65, 0x30, 0x67,
-- 0x30, 0x69, 0x30, 0x70, 0x30, 0x71, 0x30, 0x73, 0x30, 0x74, 0x30, 0x76, 0x30, 0x77, 0x30, 0x79,
-- 0x30, 0x7A, 0x30, 0x7C, 0x30, 0x7D, 0x30, 0x94, 0x30, 0x9E, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
-- 0x00, 0x08, 0x00, 0x01, 0x00, 0x44, 0x00, 0x03, 0x00, 0x0C, 0x00, 0x16, 0x00, 0x3A, 0x00, 0x01,
-- 0x00, 0x04, 0x0C, 0xC0, 0x00, 0x02, 0x0C, 0xD5, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x12, 0x00, 0x18,
-- 0x00, 0x1E, 0x0C, 0xCB, 0x00, 0x03, 0x0C, 0xC2, 0x0C, 0xD5, 0x0C, 0xCA, 0x00, 0x02, 0x0C, 0xC2,
-- 0x0C, 0xC7, 0x00, 0x02, 0x0C, 0xD5, 0x0C, 0xC8, 0x00, 0x02, 0x0C, 0xD6, 0x00, 0x01, 0x00, 0x04,
-- 0x0C, 0xCB, 0x00, 0x02, 0x0C, 0xD5, 0x00, 0x01, 0x00, 0x03, 0x0C, 0xBF, 0x0C, 0xC6, 0x0C, 0xCA,
-- 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x46, 0x00, 0x01, 0x00, 0x2E, 0x00, 0x05,
-- 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x02, 0x0C, 0xBF, 0x0C, 0xD5,
-- 0x00, 0x02, 0x0C, 0xC6, 0x0C, 0xD5, 0x00, 0x02, 0x0C, 0xC6, 0x0C, 0xD6, 0x00, 0x02, 0x0C, 0xC6,
-- 0x0C, 0xC2, 0x00, 0x02, 0x0C, 0xCA, 0x0C, 0xD5, 0x00, 0x01, 0x00, 0x05, 0x0C, 0xC0, 0x0C, 0xC7,
-- 0x0C, 0xC8, 0x0C, 0xCA, 0x0C, 0xCB, 0x00, 0x01, 0x00, 0x10, 0x00, 0x01, 0x00, 0x08, 0x00, 0x03,
-- 0x0C, 0xC6, 0x0C, 0xC2, 0x0C, 0xD5, 0x00, 0x01, 0x00, 0x01, 0x0C, 0xCB, 0x00, 0x04, 0x00, 0x00,
-- 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x01, 0x66, 0x00, 0x1A, 0x00, 0x3A, 0x00, 0x44, 0x00, 0x4E,
-- 0x00, 0x58, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x80, 0x00, 0x8A, 0x00, 0x94, 0x00, 0x9E,
-- 0x00, 0xA8, 0x00, 0xB2, 0x00, 0xBC, 0x00, 0xC6, 0x00, 0xD0, 0x00, 0xDA, 0x00, 0xEC, 0x00, 0xFE,
-- 0x01, 0x10, 0x01, 0x22, 0x01, 0x34, 0x01, 0x3E, 0x01, 0x48, 0x01, 0x52, 0x01, 0x5C, 0x00, 0x01,
-- 0x00, 0x04, 0x30, 0xF4, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xAC, 0x00, 0x02,
-- 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xAE, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04,
-- 0x30, 0xB0, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xB2, 0x00, 0x02, 0x30, 0x99,
-- 0x00, 0x01, 0x00, 0x04, 0x30, 0xB4, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xB6,
-- 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xB8, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01,
-- 0x00, 0x04, 0x30, 0xBA, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xBC, 0x00, 0x02,
-- 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xBE, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04,
-- 0x30, 0xC0, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xC2, 0x00, 0x02, 0x30, 0x99,
-- 0x00, 0x01, 0x00, 0x04, 0x30, 0xC5, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xC7,
-- 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xC9, 0x00, 0x02, 0x30, 0x99, 0x00, 0x02,
-- 0x00, 0x06, 0x00, 0x0C, 0x30, 0xD0, 0x00, 0x02, 0x30, 0x99, 0x30, 0xD1, 0x00, 0x02, 0x30, 0x9A,
-- 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0xD3, 0x00, 0x02, 0x30, 0x99, 0x30, 0xD4, 0x00, 0x02,
-- 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0xD6, 0x00, 0x02, 0x30, 0x99, 0x30, 0xD7,
-- 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0xD9, 0x00, 0x02, 0x30, 0x99,
-- 0x30, 0xDA, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0xDC, 0x00, 0x02,
-- 0x30, 0x99, 0x30, 0xDD, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x01, 0x00, 0x04, 0x30, 0xF7, 0x00, 0x02,
-- 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xF8, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04,
-- 0x30, 0xF9, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xFA, 0x00, 0x02, 0x30, 0x99,
-- 0x00, 0x01, 0x00, 0x04, 0x30, 0xFE, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x1A, 0x30, 0xA6,
-- 0x30, 0xAB, 0x30, 0xAD, 0x30, 0xAF, 0x30, 0xB1, 0x30, 0xB3, 0x30, 0xB5, 0x30, 0xB7, 0x30, 0xB9,
-- 0x30, 0xBB, 0x30, 0xBD, 0x30, 0xBF, 0x30, 0xC1, 0x30, 0xC4, 0x30, 0xC6, 0x30, 0xC8, 0x30, 0xCF,
-- 0x30, 0xD2, 0x30, 0xD5, 0x30, 0xD8, 0x30, 0xDB, 0x30, 0xEF, 0x30, 0xF0, 0x30, 0xF1, 0x30, 0xF2,
-- 0x30, 0xFD, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0xFE, 0x00, 0x1F,
-- 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x56, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x68, 0x00, 0x6E,
-- 0x00, 0x74, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0x00, 0x92, 0x00, 0x98, 0x00, 0x9E,
-- 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB0, 0x00, 0xB6, 0x00, 0xBC, 0x00, 0xC2, 0x00, 0xC8, 0x00, 0xCE,
-- 0x00, 0xD4, 0x00, 0xDA, 0x00, 0xE0, 0x00, 0xE6, 0x00, 0xEC, 0x00, 0xF2, 0x00, 0xF8, 0x00, 0x02,
-- 0x30, 0xAB, 0x30, 0x99, 0x00, 0x02, 0x30, 0xAD, 0x30, 0x99, 0x00, 0x02, 0x30, 0xAF, 0x30, 0x99,
-- 0x00, 0x02, 0x30, 0xB1, 0x30, 0x99, 0x00, 0x02, 0x30, 0xB3, 0x30, 0x99, 0x00, 0x02, 0x30, 0xB5,
-- 0x30, 0x99, 0x00, 0x02, 0x30, 0xB7, 0x30, 0x99, 0x00, 0x02, 0x30, 0xB9, 0x30, 0x99, 0x00, 0x02,
-- 0x30, 0xBB, 0x30, 0x99, 0x00, 0x02, 0x30, 0xBD, 0x30, 0x99, 0x00, 0x02, 0x30, 0xBF, 0x30, 0x99,
-- 0x00, 0x02, 0x30, 0xC1, 0x30, 0x99, 0x00, 0x02, 0x30, 0xC4, 0x30, 0x99, 0x00, 0x02, 0x30, 0xC6,
-- 0x30, 0x99, 0x00, 0x02, 0x30, 0xC8, 0x30, 0x99, 0x00, 0x02, 0x30, 0xCF, 0x30, 0x99, 0x00, 0x02,
-- 0x30, 0xCF, 0x30, 0x9A, 0x00, 0x02, 0x30, 0xD2, 0x30, 0x99, 0x00, 0x02, 0x30, 0xD2, 0x30, 0x9A,
-- 0x00, 0x02, 0x30, 0xD5, 0x30, 0x99, 0x00, 0x02, 0x30, 0xD5, 0x30, 0x9A, 0x00, 0x02, 0x30, 0xD8,
-- 0x30, 0x99, 0x00, 0x02, 0x30, 0xD8, 0x30, 0x9A, 0x00, 0x02, 0x30, 0xDB, 0x30, 0x99, 0x00, 0x02,
-- 0x30, 0xDB, 0x30, 0x9A, 0x00, 0x02, 0x30, 0xA6, 0x30, 0x99, 0x00, 0x02, 0x30, 0xEF, 0x30, 0x99,
-- 0x00, 0x02, 0x30, 0xF0, 0x30, 0x99, 0x00, 0x02, 0x30, 0xF1, 0x30, 0x99, 0x00, 0x02, 0x30, 0xF2,
-- 0x30, 0x99, 0x00, 0x02, 0x30, 0xFD, 0x30, 0x99, 0x00, 0x01, 0x00, 0x1F, 0x30, 0xAC, 0x30, 0xAE,
-- 0x30, 0xB0, 0x30, 0xB2, 0x30, 0xB4, 0x30, 0xB6, 0x30, 0xB8, 0x30, 0xBA, 0x30, 0xBC, 0x30, 0xBE,
-- 0x30, 0xC0, 0x30, 0xC2, 0x30, 0xC5, 0x30, 0xC7, 0x30, 0xC9, 0x30, 0xD0, 0x30, 0xD1, 0x30, 0xD3,
-- 0x30, 0xD4, 0x30, 0xD6, 0x30, 0xD7, 0x30, 0xD9, 0x30, 0xDA, 0x30, 0xDC, 0x30, 0xDD, 0x30, 0xF4,
-- 0x30, 0xF7, 0x30, 0xF8, 0x30, 0xF9, 0x30, 0xFA, 0x30, 0xFE, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
-- 0x00, 0x08, 0x00, 0x01, 0x1E, 0x9A, 0x00, 0x89, 0x01, 0x18, 0x02, 0x72, 0x02, 0x8C, 0x02, 0xE6,
-- 0x03, 0x18, 0x04, 0x3E, 0x04, 0x48, 0x04, 0x8A, 0x04, 0xC4, 0x05, 0x6A, 0x05, 0x74, 0x05, 0xA6,
-- 0x05, 0xF4, 0x06, 0x16, 0x06, 0x70, 0x08, 0x56, 0x08, 0x70, 0x08, 0xCE, 0x09, 0x42, 0x09, 0x7C,
-- 0x0B, 0x14, 0x0B, 0x26, 0x0B, 0x68, 0x0B, 0x7A, 0x0B, 0xD4, 0x0C, 0x0E, 0x0D, 0x68, 0x0D, 0x82,
-- 0x0D, 0xDC, 0x0E, 0x0E, 0x0F, 0x34, 0x0F, 0x3E, 0x0F, 0x80, 0x0F, 0xC2, 0x10, 0x60, 0x10, 0x72,
-- 0x10, 0xA4, 0x10, 0xF2, 0x11, 0x14, 0x11, 0x6E, 0x13, 0x54, 0x13, 0x6E, 0x13, 0xCC, 0x14, 0x40,
-- 0x14, 0x82, 0x16, 0x1A, 0x16, 0x2C, 0x16, 0x76, 0x16, 0x88, 0x16, 0xEA, 0x17, 0x24, 0x17, 0x5E,
-- 0x17, 0x68, 0x17, 0x7A, 0x17, 0x94, 0x17, 0xA6, 0x17, 0xE0, 0x17, 0xF2, 0x17, 0xFC, 0x18, 0x06,
-- 0x18, 0x40, 0x18, 0x6A, 0x18, 0x74, 0x18, 0x86, 0x18, 0x90, 0x18, 0x9A, 0x18, 0xCC, 0x19, 0x06,
-- 0x19, 0x10, 0x19, 0x22, 0x19, 0x3C, 0x19, 0x4E, 0x19, 0x88, 0x19, 0x9A, 0x19, 0xA4, 0x19, 0xAE,
-- 0x19, 0xE8, 0x1A, 0x12, 0x1A, 0x1C, 0x1A, 0x2E, 0x1A, 0x38, 0x1A, 0x42, 0x1A, 0x74, 0x1A, 0xAE,
-- 0x1A, 0xE8, 0x1A, 0xF2, 0x1A, 0xFC, 0x1B, 0x1E, 0x1B, 0x40, 0x1B, 0x4A, 0x1B, 0x54, 0x1B, 0x7E,
-- 0x1B, 0xA8, 0x1B, 0xB2, 0x1B, 0xBC, 0x1B, 0xC6, 0x1B, 0xD0, 0x1B, 0xEA, 0x1C, 0x04, 0x1C, 0x0E,
-- 0x1C, 0x18, 0x1C, 0x22, 0x1C, 0x5C, 0x1C, 0x96, 0x1C, 0xD0, 0x1D, 0x0A, 0x1D, 0x14, 0x1D, 0x1E,
-- 0x1D, 0x28, 0x1D, 0x32, 0x1D, 0x3C, 0x1D, 0x46, 0x1D, 0x50, 0x1D, 0x5A, 0x1D, 0x64, 0x1D, 0x6E,
-- 0x1D, 0x78, 0x1D, 0x82, 0x1D, 0x8C, 0x1D, 0x96, 0x1D, 0xA0, 0x1D, 0xAA, 0x1D, 0xB4, 0x1D, 0xBE,
-- 0x1D, 0xD0, 0x1D, 0xE2, 0x1D, 0xEC, 0x1D, 0xF6, 0x1E, 0x08, 0x1E, 0x1A, 0x1E, 0x24, 0x1E, 0x2E,
-- 0x1E, 0x38, 0x1E, 0x42, 0x1E, 0x4C, 0x1E, 0x56, 0x1E, 0x88, 0x00, 0x26, 0x00, 0x4E, 0x00, 0x54,
-- 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A, 0x00, 0x82, 0x00, 0x8A, 0x00, 0x92,
-- 0x00, 0x98, 0x00, 0x9E, 0x00, 0xA4, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBC, 0x00, 0xC4, 0x00, 0xCC,
-- 0x00, 0xD4, 0x00, 0xDC, 0x00, 0xE2, 0x00, 0xEA, 0x00, 0xF0, 0x00, 0xF8, 0x00, 0xFE, 0x01, 0x04,
-- 0x01, 0x0C, 0x01, 0x14, 0x01, 0x1A, 0x01, 0x20, 0x01, 0x26, 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C,
-- 0x01, 0x42, 0x01, 0x48, 0x01, 0x4E, 0x01, 0x54, 0x00, 0xC0, 0x00, 0x02, 0x03, 0x00, 0x00, 0xC1,
-- 0x00, 0x02, 0x03, 0x01, 0x1E, 0xA6, 0x00, 0x03, 0x03, 0x02, 0x03, 0x00, 0x1E, 0xA4, 0x00, 0x03,
-- 0x03, 0x02, 0x03, 0x01, 0x1E, 0xAA, 0x00, 0x03, 0x03, 0x02, 0x03, 0x03, 0x1E, 0xA8, 0x00, 0x03,
-- 0x03, 0x02, 0x03, 0x09, 0x1E, 0xAC, 0x00, 0x03, 0x03, 0x02, 0x03, 0x23, 0x1E, 0xA6, 0x00, 0x03,
-- 0x03, 0x02, 0x03, 0x40, 0x1E, 0xA4, 0x00, 0x03, 0x03, 0x02, 0x03, 0x41, 0x00, 0xC2, 0x00, 0x02,
-- 0x03, 0x02, 0x00, 0xC3, 0x00, 0x02, 0x03, 0x03, 0x01, 0x00, 0x00, 0x02, 0x03, 0x04, 0x1E, 0xB0,
-- 0x00, 0x03, 0x03, 0x06, 0x03, 0x00, 0x1E, 0xAE, 0x00, 0x03, 0x03, 0x06, 0x03, 0x01, 0x1E, 0xB4,
-- 0x00, 0x03, 0x03, 0x06, 0x03, 0x03, 0x1E, 0xB2, 0x00, 0x03, 0x03, 0x06, 0x03, 0x09, 0x1E, 0xB6,
-- 0x00, 0x03, 0x03, 0x06, 0x03, 0x23, 0x1E, 0xB0, 0x00, 0x03, 0x03, 0x06, 0x03, 0x40, 0x1E, 0xAE,
-- 0x00, 0x03, 0x03, 0x06, 0x03, 0x41, 0x01, 0x02, 0x00, 0x02, 0x03, 0x06, 0x01, 0xE0, 0x00, 0x03,
-- 0x03, 0x07, 0x03, 0x04, 0x02, 0x26, 0x00, 0x02, 0x03, 0x07, 0x01, 0xDE, 0x00, 0x03, 0x03, 0x08,
-- 0x03, 0x04, 0x00, 0xC4, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xA2, 0x00, 0x02, 0x03, 0x09, 0x01, 0xFA,
-- 0x00, 0x03, 0x03, 0x0A, 0x03, 0x01, 0x01, 0xFA, 0x00, 0x03, 0x03, 0x0A, 0x03, 0x41, 0x00, 0xC5,
-- 0x00, 0x02, 0x03, 0x0A, 0x01, 0xCD, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x00, 0x00, 0x02, 0x03, 0x0F,
-- 0x02, 0x02, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xAC, 0x00, 0x03, 0x03, 0x23, 0x03, 0x02, 0x1E, 0xB6,
-- 0x00, 0x03, 0x03, 0x23, 0x03, 0x06, 0x1E, 0xA0, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x00, 0x00, 0x02,
-- 0x03, 0x25, 0x01, 0x04, 0x00, 0x02, 0x03, 0x28, 0x00, 0xC0, 0x00, 0x02, 0x03, 0x40, 0x00, 0xC1,
-- 0x00, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x1E, 0x02, 0x00, 0x02,
-- 0x03, 0x07, 0x1E, 0x04, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x06, 0x00, 0x02, 0x03, 0x31, 0x00, 0x0A,
-- 0x00, 0x16, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3E, 0x00, 0x46,
-- 0x00, 0x4C, 0x00, 0x54, 0x1E, 0x08, 0x00, 0x03, 0x03, 0x01, 0x03, 0x27, 0x01, 0x06, 0x00, 0x02,
-- 0x03, 0x01, 0x01, 0x08, 0x00, 0x02, 0x03, 0x02, 0x01, 0x0A, 0x00, 0x02, 0x03, 0x07, 0x01, 0x0C,
-- 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x08, 0x00, 0x03, 0x03, 0x27, 0x03, 0x01, 0x1E, 0x08, 0x00, 0x03,
-- 0x03, 0x27, 0x03, 0x41, 0x00, 0xC7, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x08, 0x00, 0x03, 0x03, 0x41,
-- 0x03, 0x27, 0x01, 0x06, 0x00, 0x02, 0x03, 0x41, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A,
-- 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x1E, 0x0A, 0x00, 0x02, 0x03, 0x07, 0x01, 0x0E, 0x00, 0x02,
-- 0x03, 0x0C, 0x1E, 0x0C, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x10, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x12,
-- 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x0E, 0x00, 0x02, 0x03, 0x31, 0x00, 0x21, 0x00, 0x44, 0x00, 0x4A,
-- 0x00, 0x50, 0x00, 0x58, 0x00, 0x60, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88,
-- 0x00, 0x8E, 0x00, 0x94, 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBA, 0x00, 0xC2,
-- 0x00, 0xC8, 0x00, 0xCE, 0x00, 0xD4, 0x00, 0xDA, 0x00, 0xE0, 0x00, 0xE6, 0x00, 0xEC, 0x00, 0xF4,
-- 0x00, 0xFA, 0x01, 0x02, 0x01, 0x08, 0x01, 0x0E, 0x01, 0x14, 0x01, 0x1A, 0x01, 0x20, 0x00, 0xC8,
-- 0x00, 0x02, 0x03, 0x00, 0x00, 0xC9, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xC0, 0x00, 0x03, 0x03, 0x02,
-- 0x03, 0x00, 0x1E, 0xBE, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01, 0x1E, 0xC4, 0x00, 0x03, 0x03, 0x02,
-- 0x03, 0x03, 0x1E, 0xC2, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09, 0x1E, 0xC6, 0x00, 0x03, 0x03, 0x02,
-- 0x03, 0x23, 0x1E, 0xC0, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40, 0x1E, 0xBE, 0x00, 0x03, 0x03, 0x02,
-- 0x03, 0x41, 0x00, 0xCA, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xBC, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x14,
-- 0x00, 0x03, 0x03, 0x04, 0x03, 0x00, 0x1E, 0x16, 0x00, 0x03, 0x03, 0x04, 0x03, 0x01, 0x1E, 0x14,
-- 0x00, 0x03, 0x03, 0x04, 0x03, 0x40, 0x1E, 0x16, 0x00, 0x03, 0x03, 0x04, 0x03, 0x41, 0x01, 0x12,
-- 0x00, 0x02, 0x03, 0x04, 0x1E, 0x1C, 0x00, 0x03, 0x03, 0x06, 0x03, 0x27, 0x01, 0x14, 0x00, 0x02,
-- 0x03, 0x06, 0x01, 0x16, 0x00, 0x02, 0x03, 0x07, 0x00, 0xCB, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xBA,
-- 0x00, 0x02, 0x03, 0x09, 0x01, 0x1A, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x04, 0x00, 0x02, 0x03, 0x0F,
-- 0x02, 0x06, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xC6, 0x00, 0x03, 0x03, 0x23, 0x03, 0x02, 0x1E, 0xB8,
-- 0x00, 0x02, 0x03, 0x23, 0x1E, 0x1C, 0x00, 0x03, 0x03, 0x27, 0x03, 0x06, 0x02, 0x28, 0x00, 0x02,
-- 0x03, 0x27, 0x01, 0x18, 0x00, 0x02, 0x03, 0x28, 0x1E, 0x18, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x1A,
-- 0x00, 0x02, 0x03, 0x30, 0x00, 0xC8, 0x00, 0x02, 0x03, 0x40, 0x00, 0xC9, 0x00, 0x02, 0x03, 0x41,
-- 0x00, 0x01, 0x00, 0x04, 0x1E, 0x1E, 0x00, 0x02, 0x03, 0x07, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18,
-- 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x01, 0xF4, 0x00, 0x02,
-- 0x03, 0x01, 0x01, 0x1C, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x20, 0x00, 0x02, 0x03, 0x04, 0x01, 0x1E,
-- 0x00, 0x02, 0x03, 0x06, 0x01, 0x20, 0x00, 0x02, 0x03, 0x07, 0x01, 0xE6, 0x00, 0x02, 0x03, 0x0C,
-- 0x01, 0x22, 0x00, 0x02, 0x03, 0x27, 0x01, 0xF4, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10,
-- 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x01, 0x24, 0x00, 0x02,
-- 0x03, 0x02, 0x1E, 0x22, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x26, 0x00, 0x02, 0x03, 0x08, 0x02, 0x1E,
-- 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x24, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x28, 0x00, 0x02, 0x03, 0x27,
-- 0x1E, 0x2A, 0x00, 0x02, 0x03, 0x2E, 0x00, 0x14, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C,
-- 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6A, 0x00, 0x70,
-- 0x00, 0x76, 0x00, 0x7C, 0x00, 0x82, 0x00, 0x88, 0x00, 0x8E, 0x00, 0x94, 0x00, 0x9A, 0x00, 0xA0,
-- 0x00, 0xCC, 0x00, 0x02, 0x03, 0x00, 0x00, 0xCD, 0x00, 0x02, 0x03, 0x01, 0x00, 0xCE, 0x00, 0x02,
-- 0x03, 0x02, 0x01, 0x28, 0x00, 0x02, 0x03, 0x03, 0x01, 0x2A, 0x00, 0x02, 0x03, 0x04, 0x01, 0x2C,
-- 0x00, 0x02, 0x03, 0x06, 0x01, 0x30, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x2E, 0x00, 0x03, 0x03, 0x08,
-- 0x03, 0x01, 0x1E, 0x2E, 0x00, 0x03, 0x03, 0x08, 0x03, 0x41, 0x00, 0xCF, 0x00, 0x02, 0x03, 0x08,
-- 0x1E, 0xC8, 0x00, 0x02, 0x03, 0x09, 0x01, 0xCF, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x08, 0x00, 0x02,
-- 0x03, 0x0F, 0x02, 0x0A, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xCA, 0x00, 0x02, 0x03, 0x23, 0x01, 0x2E,
-- 0x00, 0x02, 0x03, 0x28, 0x1E, 0x2C, 0x00, 0x02, 0x03, 0x30, 0x00, 0xCC, 0x00, 0x02, 0x03, 0x40,
-- 0x00, 0xCD, 0x00, 0x02, 0x03, 0x41, 0x1E, 0x2E, 0x00, 0x02, 0x03, 0x44, 0x00, 0x01, 0x00, 0x04,
-- 0x01, 0x34, 0x00, 0x02, 0x03, 0x02, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20,
-- 0x00, 0x26, 0x00, 0x2C, 0x1E, 0x30, 0x00, 0x02, 0x03, 0x01, 0x01, 0xE8, 0x00, 0x02, 0x03, 0x0C,
-- 0x1E, 0x32, 0x00, 0x02, 0x03, 0x23, 0x01, 0x36, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x34, 0x00, 0x02,
-- 0x03, 0x31, 0x1E, 0x30, 0x00, 0x02, 0x03, 0x41, 0x00, 0x09, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x22,
-- 0x00, 0x28, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0x01, 0x39, 0x00, 0x02,
-- 0x03, 0x01, 0x1E, 0x38, 0x00, 0x03, 0x03, 0x04, 0x03, 0x23, 0x01, 0x3D, 0x00, 0x02, 0x03, 0x0C,
-- 0x1E, 0x38, 0x00, 0x03, 0x03, 0x23, 0x03, 0x04, 0x1E, 0x36, 0x00, 0x02, 0x03, 0x23, 0x01, 0x3B,
-- 0x00, 0x02, 0x03, 0x27, 0x1E, 0x3C, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x3A, 0x00, 0x02, 0x03, 0x31,
-- 0x01, 0x39, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C,
-- 0x1E, 0x3E, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x40, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x42, 0x00, 0x02,
-- 0x03, 0x23, 0x1E, 0x3E, 0x00, 0x02, 0x03, 0x41, 0x00, 0x0B, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24,
-- 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54,
-- 0x01, 0xF8, 0x00, 0x02, 0x03, 0x00, 0x01, 0x43, 0x00, 0x02, 0x03, 0x01, 0x00, 0xD1, 0x00, 0x02,
-- 0x03, 0x03, 0x1E, 0x44, 0x00, 0x02, 0x03, 0x07, 0x01, 0x47, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x46,
-- 0x00, 0x02, 0x03, 0x23, 0x01, 0x45, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x4A, 0x00, 0x02, 0x03, 0x2D,
-- 0x1E, 0x48, 0x00, 0x02, 0x03, 0x31, 0x01, 0xF8, 0x00, 0x02, 0x03, 0x40, 0x01, 0x43, 0x00, 0x02,
-- 0x03, 0x41, 0x00, 0x34, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x78, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8E,
-- 0x00, 0x96, 0x00, 0x9E, 0x00, 0xA6, 0x00, 0xAE, 0x00, 0xB6, 0x00, 0xBE, 0x00, 0xC4, 0x00, 0xCC,
-- 0x00, 0xD4, 0x00, 0xDC, 0x00, 0xE4, 0x00, 0xEC, 0x00, 0xF2, 0x00, 0xFA, 0x01, 0x02, 0x01, 0x0A,
-- 0x01, 0x12, 0x01, 0x1A, 0x01, 0x20, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x42,
-- 0x01, 0x4A, 0x01, 0x50, 0x01, 0x56, 0x01, 0x5C, 0x01, 0x62, 0x01, 0x68, 0x01, 0x70, 0x01, 0x78,
-- 0x01, 0x80, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA0, 0x01, 0xA6, 0x01, 0xAE, 0x01, 0xB6,
-- 0x01, 0xBC, 0x01, 0xC4, 0x01, 0xCA, 0x01, 0xD2, 0x01, 0xD8, 0x01, 0xE0, 0x1E, 0xDC, 0x00, 0x03,
-- 0x03, 0x00, 0x03, 0x1B, 0x00, 0xD2, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xDA, 0x00, 0x03, 0x03, 0x01,
-- 0x03, 0x1B, 0x00, 0xD3, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xD2, 0x00, 0x03, 0x03, 0x02, 0x03, 0x00,
-- 0x1E, 0xD0, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01, 0x1E, 0xD6, 0x00, 0x03, 0x03, 0x02, 0x03, 0x03,
-- 0x1E, 0xD4, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09, 0x1E, 0xD8, 0x00, 0x03, 0x03, 0x02, 0x03, 0x23,
-- 0x1E, 0xD2, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40, 0x1E, 0xD0, 0x00, 0x03, 0x03, 0x02, 0x03, 0x41,
-- 0x00, 0xD4, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x4C, 0x00, 0x03, 0x03, 0x03, 0x03, 0x01, 0x02, 0x2C,
-- 0x00, 0x03, 0x03, 0x03, 0x03, 0x04, 0x1E, 0x4E, 0x00, 0x03, 0x03, 0x03, 0x03, 0x08, 0x1E, 0xE0,
-- 0x00, 0x03, 0x03, 0x03, 0x03, 0x1B, 0x1E, 0x4C, 0x00, 0x03, 0x03, 0x03, 0x03, 0x41, 0x00, 0xD5,
-- 0x00, 0x02, 0x03, 0x03, 0x1E, 0x50, 0x00, 0x03, 0x03, 0x04, 0x03, 0x00, 0x1E, 0x52, 0x00, 0x03,
-- 0x03, 0x04, 0x03, 0x01, 0x01, 0xEC, 0x00, 0x03, 0x03, 0x04, 0x03, 0x28, 0x1E, 0x50, 0x00, 0x03,
-- 0x03, 0x04, 0x03, 0x40, 0x1E, 0x52, 0x00, 0x03, 0x03, 0x04, 0x03, 0x41, 0x01, 0x4C, 0x00, 0x02,
-- 0x03, 0x04, 0x01, 0x4E, 0x00, 0x02, 0x03, 0x06, 0x02, 0x30, 0x00, 0x03, 0x03, 0x07, 0x03, 0x04,
-- 0x02, 0x2E, 0x00, 0x02, 0x03, 0x07, 0x02, 0x2A, 0x00, 0x03, 0x03, 0x08, 0x03, 0x04, 0x00, 0xD6,
-- 0x00, 0x02, 0x03, 0x08, 0x1E, 0xDE, 0x00, 0x03, 0x03, 0x09, 0x03, 0x1B, 0x1E, 0xCE, 0x00, 0x02,
-- 0x03, 0x09, 0x01, 0x50, 0x00, 0x02, 0x03, 0x0B, 0x01, 0xD1, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x0C,
-- 0x00, 0x02, 0x03, 0x0F, 0x02, 0x0E, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xDC, 0x00, 0x03, 0x03, 0x1B,
-- 0x03, 0x00, 0x1E, 0xDA, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x01, 0x1E, 0xE0, 0x00, 0x03, 0x03, 0x1B,
-- 0x03, 0x03, 0x1E, 0xDE, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x09, 0x1E, 0xE2, 0x00, 0x03, 0x03, 0x1B,
-- 0x03, 0x23, 0x1E, 0xDC, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x40, 0x1E, 0xDA, 0x00, 0x03, 0x03, 0x1B,
-- 0x03, 0x41, 0x01, 0xA0, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0xD8, 0x00, 0x03, 0x03, 0x23, 0x03, 0x02,
-- 0x1E, 0xE2, 0x00, 0x03, 0x03, 0x23, 0x03, 0x1B, 0x1E, 0xCC, 0x00, 0x02, 0x03, 0x23, 0x01, 0xEC,
-- 0x00, 0x03, 0x03, 0x28, 0x03, 0x04, 0x01, 0xEA, 0x00, 0x02, 0x03, 0x28, 0x1E, 0xDC, 0x00, 0x03,
-- 0x03, 0x40, 0x03, 0x1B, 0x00, 0xD2, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xDA, 0x00, 0x03, 0x03, 0x41,
-- 0x03, 0x1B, 0x00, 0xD3, 0x00, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14,
-- 0x1E, 0x54, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x56, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x54, 0x00, 0x02,
-- 0x03, 0x41, 0x00, 0x0B, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38,
-- 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x01, 0x54, 0x00, 0x02, 0x03, 0x01,
-- 0x1E, 0x5C, 0x00, 0x03, 0x03, 0x04, 0x03, 0x23, 0x1E, 0x58, 0x00, 0x02, 0x03, 0x07, 0x01, 0x58,
-- 0x00, 0x02, 0x03, 0x0C, 0x02, 0x10, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x12, 0x00, 0x02, 0x03, 0x11,
-- 0x1E, 0x5C, 0x00, 0x03, 0x03, 0x23, 0x03, 0x04, 0x1E, 0x5A, 0x00, 0x02, 0x03, 0x23, 0x01, 0x56,
-- 0x00, 0x02, 0x03, 0x27, 0x1E, 0x5E, 0x00, 0x02, 0x03, 0x31, 0x01, 0x54, 0x00, 0x02, 0x03, 0x41,
-- 0x00, 0x0D, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46,
-- 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x60, 0x00, 0x66, 0x00, 0x6E, 0x1E, 0x64, 0x00, 0x03,
-- 0x03, 0x01, 0x03, 0x07, 0x01, 0x5A, 0x00, 0x02, 0x03, 0x01, 0x01, 0x5C, 0x00, 0x02, 0x03, 0x02,
-- 0x1E, 0x68, 0x00, 0x03, 0x03, 0x07, 0x03, 0x23, 0x1E, 0x60, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x66,
-- 0x00, 0x03, 0x03, 0x0C, 0x03, 0x07, 0x01, 0x60, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x68, 0x00, 0x03,
-- 0x03, 0x23, 0x03, 0x07, 0x1E, 0x62, 0x00, 0x02, 0x03, 0x23, 0x02, 0x18, 0x00, 0x02, 0x03, 0x26,
-- 0x01, 0x5E, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x64, 0x00, 0x03, 0x03, 0x41, 0x03, 0x07, 0x01, 0x5A,
-- 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28,
-- 0x00, 0x2E, 0x00, 0x34, 0x1E, 0x6A, 0x00, 0x02, 0x03, 0x07, 0x01, 0x64, 0x00, 0x02, 0x03, 0x0C,
-- 0x1E, 0x6C, 0x00, 0x02, 0x03, 0x23, 0x02, 0x1A, 0x00, 0x02, 0x03, 0x26, 0x01, 0x62, 0x00, 0x02,
-- 0x03, 0x27, 0x1E, 0x70, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x6E, 0x00, 0x02, 0x03, 0x31, 0x00, 0x2D,
-- 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x78, 0x00, 0x7E, 0x00, 0x86, 0x00, 0x8E,
-- 0x00, 0x96, 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xC8,
-- 0x00, 0xD0, 0x00, 0xD8, 0x00, 0xE0, 0x00, 0xE6, 0x00, 0xEE, 0x00, 0xF4, 0x00, 0xFA, 0x01, 0x00,
-- 0x01, 0x06, 0x01, 0x0C, 0x01, 0x12, 0x01, 0x1A, 0x01, 0x22, 0x01, 0x2A, 0x01, 0x32, 0x01, 0x3A,
-- 0x01, 0x42, 0x01, 0x4A, 0x01, 0x50, 0x01, 0x58, 0x01, 0x5E, 0x01, 0x64, 0x01, 0x6A, 0x01, 0x70,
-- 0x01, 0x76, 0x01, 0x7E, 0x01, 0x84, 0x01, 0x8C, 0x01, 0x92, 0x1E, 0xEA, 0x00, 0x03, 0x03, 0x00,
-- 0x03, 0x1B, 0x00, 0xD9, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xE8, 0x00, 0x03, 0x03, 0x01, 0x03, 0x1B,
-- 0x00, 0xDA, 0x00, 0x02, 0x03, 0x01, 0x00, 0xDB, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x78, 0x00, 0x03,
-- 0x03, 0x03, 0x03, 0x01, 0x1E, 0xEE, 0x00, 0x03, 0x03, 0x03, 0x03, 0x1B, 0x1E, 0x78, 0x00, 0x03,
-- 0x03, 0x03, 0x03, 0x41, 0x01, 0x68, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x7A, 0x00, 0x03, 0x03, 0x04,
-- 0x03, 0x08, 0x01, 0x6A, 0x00, 0x02, 0x03, 0x04, 0x01, 0x6C, 0x00, 0x02, 0x03, 0x06, 0x01, 0xDB,
-- 0x00, 0x03, 0x03, 0x08, 0x03, 0x00, 0x01, 0xD7, 0x00, 0x03, 0x03, 0x08, 0x03, 0x01, 0x01, 0xD5,
-- 0x00, 0x03, 0x03, 0x08, 0x03, 0x04, 0x01, 0xD9, 0x00, 0x03, 0x03, 0x08, 0x03, 0x0C, 0x01, 0xDB,
-- 0x00, 0x03, 0x03, 0x08, 0x03, 0x40, 0x01, 0xD7, 0x00, 0x03, 0x03, 0x08, 0x03, 0x41, 0x00, 0xDC,
-- 0x00, 0x02, 0x03, 0x08, 0x1E, 0xEC, 0x00, 0x03, 0x03, 0x09, 0x03, 0x1B, 0x1E, 0xE6, 0x00, 0x02,
-- 0x03, 0x09, 0x01, 0x6E, 0x00, 0x02, 0x03, 0x0A, 0x01, 0x70, 0x00, 0x02, 0x03, 0x0B, 0x01, 0xD3,
-- 0x00, 0x02, 0x03, 0x0C, 0x02, 0x14, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x16, 0x00, 0x02, 0x03, 0x11,
-- 0x1E, 0xEA, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x00, 0x1E, 0xE8, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x01,
-- 0x1E, 0xEE, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x03, 0x1E, 0xEC, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x09,
-- 0x1E, 0xF0, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x23, 0x1E, 0xEA, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x40,
-- 0x1E, 0xE8, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x41, 0x01, 0xAF, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0xF0,
-- 0x00, 0x03, 0x03, 0x23, 0x03, 0x1B, 0x1E, 0xE4, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x72, 0x00, 0x02,
-- 0x03, 0x24, 0x01, 0x72, 0x00, 0x02, 0x03, 0x28, 0x1E, 0x76, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x74,
-- 0x00, 0x02, 0x03, 0x30, 0x1E, 0xEA, 0x00, 0x03, 0x03, 0x40, 0x03, 0x1B, 0x00, 0xD9, 0x00, 0x02,
-- 0x03, 0x40, 0x1E, 0xE8, 0x00, 0x03, 0x03, 0x41, 0x03, 0x1B, 0x00, 0xDA, 0x00, 0x02, 0x03, 0x41,
-- 0x01, 0xD7, 0x00, 0x02, 0x03, 0x44, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x7C, 0x00, 0x02,
-- 0x03, 0x03, 0x1E, 0x7E, 0x00, 0x02, 0x03, 0x23, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
-- 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x1E, 0x80, 0x00, 0x02, 0x03, 0x00,
-- 0x1E, 0x82, 0x00, 0x02, 0x03, 0x01, 0x01, 0x74, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x86, 0x00, 0x02,
-- 0x03, 0x07, 0x1E, 0x84, 0x00, 0x02, 0x03, 0x08, 0x1E, 0x88, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x80,
-- 0x00, 0x02, 0x03, 0x40, 0x1E, 0x82, 0x00, 0x02, 0x03, 0x41, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C,
-- 0x1E, 0x8A, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x8C, 0x00, 0x02, 0x03, 0x08, 0x00, 0x0B, 0x00, 0x18,
-- 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48,
-- 0x00, 0x4E, 0x00, 0x54, 0x1E, 0xF2, 0x00, 0x02, 0x03, 0x00, 0x00, 0xDD, 0x00, 0x02, 0x03, 0x01,
-- 0x01, 0x76, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xF8, 0x00, 0x02, 0x03, 0x03, 0x02, 0x32, 0x00, 0x02,
-- 0x03, 0x04, 0x1E, 0x8E, 0x00, 0x02, 0x03, 0x07, 0x01, 0x78, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xF6,
-- 0x00, 0x02, 0x03, 0x09, 0x1E, 0xF4, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xF2, 0x00, 0x02, 0x03, 0x40,
-- 0x00, 0xDD, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22,
-- 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x01, 0x79, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x90, 0x00, 0x02,
-- 0x03, 0x02, 0x01, 0x7B, 0x00, 0x02, 0x03, 0x07, 0x01, 0x7D, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x92,
-- 0x00, 0x02, 0x03, 0x23, 0x1E, 0x94, 0x00, 0x02, 0x03, 0x31, 0x01, 0x79, 0x00, 0x02, 0x03, 0x41,
-+ 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45,
-+ 0x03, 0x43, 0x03, 0x01, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E,
-+ 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40,
-+ 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA,
-+ 0x1F, 0xAC, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x01, 0x36, 0x00, 0x16,
-+ 0x00, 0x32, 0x00, 0x3C, 0x00, 0x46, 0x00, 0x50, 0x00, 0x5A, 0x00, 0x64, 0x00, 0x6E, 0x00, 0x78,
-+ 0x00, 0x82, 0x00, 0x8C, 0x00, 0x96, 0x00, 0xA0, 0x00, 0xAA, 0x00, 0xB4, 0x00, 0xBE, 0x00, 0xC8,
-+ 0x00, 0xD2, 0x00, 0xE4, 0x00, 0xF6, 0x01, 0x08, 0x01, 0x1A, 0x01, 0x2C, 0x00, 0x01, 0x00, 0x04,
-+ 0x30, 0x94, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x4C, 0x00, 0x02, 0x30, 0x99,
-+ 0x00, 0x01, 0x00, 0x04, 0x30, 0x4E, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x50,
-+ 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x52, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01,
-+ 0x00, 0x04, 0x30, 0x54, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x56, 0x00, 0x02,
-+ 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x58, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04,
-+ 0x30, 0x5A, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x5C, 0x00, 0x02, 0x30, 0x99,
-+ 0x00, 0x01, 0x00, 0x04, 0x30, 0x5E, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x60,
-+ 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x62, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01,
-+ 0x00, 0x04, 0x30, 0x65, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x67, 0x00, 0x02,
-+ 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x69, 0x00, 0x02, 0x30, 0x99, 0x00, 0x02, 0x00, 0x06,
-+ 0x00, 0x0C, 0x30, 0x70, 0x00, 0x02, 0x30, 0x99, 0x30, 0x71, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02,
-+ 0x00, 0x06, 0x00, 0x0C, 0x30, 0x73, 0x00, 0x02, 0x30, 0x99, 0x30, 0x74, 0x00, 0x02, 0x30, 0x9A,
-+ 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0x76, 0x00, 0x02, 0x30, 0x99, 0x30, 0x77, 0x00, 0x02,
-+ 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0x79, 0x00, 0x02, 0x30, 0x99, 0x30, 0x7A,
-+ 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0x7C, 0x00, 0x02, 0x30, 0x99,
-+ 0x30, 0x7D, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x01, 0x00, 0x04, 0x30, 0x9E, 0x00, 0x02, 0x30, 0x99,
-+ 0x00, 0x01, 0x00, 0x16, 0x30, 0x46, 0x30, 0x4B, 0x30, 0x4D, 0x30, 0x4F, 0x30, 0x51, 0x30, 0x53,
-+ 0x30, 0x55, 0x30, 0x57, 0x30, 0x59, 0x30, 0x5B, 0x30, 0x5D, 0x30, 0x5F, 0x30, 0x61, 0x30, 0x64,
-+ 0x30, 0x66, 0x30, 0x68, 0x30, 0x6F, 0x30, 0x72, 0x30, 0x75, 0x30, 0x78, 0x30, 0x7B, 0x30, 0x9D,
-+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0xDE, 0x00, 0x1B, 0x00, 0x3C,
-+ 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x60, 0x00, 0x66, 0x00, 0x6C,
-+ 0x00, 0x72, 0x00, 0x78, 0x00, 0x7E, 0x00, 0x84, 0x00, 0x8A, 0x00, 0x90, 0x00, 0x96, 0x00, 0x9C,
-+ 0x00, 0xA2, 0x00, 0xA8, 0x00, 0xAE, 0x00, 0xB4, 0x00, 0xBA, 0x00, 0xC0, 0x00, 0xC6, 0x00, 0xCC,
-+ 0x00, 0xD2, 0x00, 0xD8, 0x00, 0x02, 0x30, 0x4B, 0x30, 0x99, 0x00, 0x02, 0x30, 0x4D, 0x30, 0x99,
-+ 0x00, 0x02, 0x30, 0x4F, 0x30, 0x99, 0x00, 0x02, 0x30, 0x51, 0x30, 0x99, 0x00, 0x02, 0x30, 0x53,
-+ 0x30, 0x99, 0x00, 0x02, 0x30, 0x55, 0x30, 0x99, 0x00, 0x02, 0x30, 0x57, 0x30, 0x99, 0x00, 0x02,
-+ 0x30, 0x59, 0x30, 0x99, 0x00, 0x02, 0x30, 0x5B, 0x30, 0x99, 0x00, 0x02, 0x30, 0x5D, 0x30, 0x99,
-+ 0x00, 0x02, 0x30, 0x5F, 0x30, 0x99, 0x00, 0x02, 0x30, 0x61, 0x30, 0x99, 0x00, 0x02, 0x30, 0x64,
-+ 0x30, 0x99, 0x00, 0x02, 0x30, 0x66, 0x30, 0x99, 0x00, 0x02, 0x30, 0x68, 0x30, 0x99, 0x00, 0x02,
-+ 0x30, 0x6F, 0x30, 0x99, 0x00, 0x02, 0x30, 0x6F, 0x30, 0x9A, 0x00, 0x02, 0x30, 0x72, 0x30, 0x99,
-+ 0x00, 0x02, 0x30, 0x72, 0x30, 0x9A, 0x00, 0x02, 0x30, 0x75, 0x30, 0x99, 0x00, 0x02, 0x30, 0x75,
-+ 0x30, 0x9A, 0x00, 0x02, 0x30, 0x78, 0x30, 0x99, 0x00, 0x02, 0x30, 0x78, 0x30, 0x9A, 0x00, 0x02,
-+ 0x30, 0x7B, 0x30, 0x99, 0x00, 0x02, 0x30, 0x7B, 0x30, 0x9A, 0x00, 0x02, 0x30, 0x46, 0x30, 0x99,
-+ 0x00, 0x02, 0x30, 0x9D, 0x30, 0x99, 0x00, 0x01, 0x00, 0x1B, 0x30, 0x4C, 0x30, 0x4E, 0x30, 0x50,
-+ 0x30, 0x52, 0x30, 0x54, 0x30, 0x56, 0x30, 0x58, 0x30, 0x5A, 0x30, 0x5C, 0x30, 0x5E, 0x30, 0x60,
-+ 0x30, 0x62, 0x30, 0x65, 0x30, 0x67, 0x30, 0x69, 0x30, 0x70, 0x30, 0x71, 0x30, 0x73, 0x30, 0x74,
-+ 0x30, 0x76, 0x30, 0x77, 0x30, 0x79, 0x30, 0x7A, 0x30, 0x7C, 0x30, 0x7D, 0x30, 0x94, 0x30, 0x9E,
-+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x44, 0x00, 0x03, 0x00, 0x0C,
-+ 0x00, 0x16, 0x00, 0x3A, 0x00, 0x01, 0x00, 0x04, 0x0C, 0xC0, 0x00, 0x02, 0x0C, 0xD5, 0x00, 0x04,
-+ 0x00, 0x0A, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x0C, 0xCB, 0x00, 0x03, 0x0C, 0xC2, 0x0C, 0xD5,
-+ 0x0C, 0xCA, 0x00, 0x02, 0x0C, 0xC2, 0x0C, 0xC7, 0x00, 0x02, 0x0C, 0xD5, 0x0C, 0xC8, 0x00, 0x02,
-+ 0x0C, 0xD6, 0x00, 0x01, 0x00, 0x04, 0x0C, 0xCB, 0x00, 0x02, 0x0C, 0xD5, 0x00, 0x01, 0x00, 0x03,
-+ 0x0C, 0xBF, 0x0C, 0xC6, 0x0C, 0xCA, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x46,
-+ 0x00, 0x01, 0x00, 0x2E, 0x00, 0x05, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28,
-+ 0x00, 0x02, 0x0C, 0xBF, 0x0C, 0xD5, 0x00, 0x02, 0x0C, 0xC6, 0x0C, 0xD5, 0x00, 0x02, 0x0C, 0xC6,
-+ 0x0C, 0xD6, 0x00, 0x02, 0x0C, 0xC6, 0x0C, 0xC2, 0x00, 0x02, 0x0C, 0xCA, 0x0C, 0xD5, 0x00, 0x01,
-+ 0x00, 0x05, 0x0C, 0xC0, 0x0C, 0xC7, 0x0C, 0xC8, 0x0C, 0xCA, 0x0C, 0xCB, 0x00, 0x01, 0x00, 0x10,
-+ 0x00, 0x01, 0x00, 0x08, 0x00, 0x03, 0x0C, 0xC6, 0x0C, 0xC2, 0x0C, 0xD5, 0x00, 0x01, 0x00, 0x01,
-+ 0x0C, 0xCB, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x01, 0x66, 0x00, 0x1A,
-+ 0x00, 0x3A, 0x00, 0x44, 0x00, 0x4E, 0x00, 0x58, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x80,
-+ 0x00, 0x8A, 0x00, 0x94, 0x00, 0x9E, 0x00, 0xA8, 0x00, 0xB2, 0x00, 0xBC, 0x00, 0xC6, 0x00, 0xD0,
-+ 0x00, 0xDA, 0x00, 0xEC, 0x00, 0xFE, 0x01, 0x10, 0x01, 0x22, 0x01, 0x34, 0x01, 0x3E, 0x01, 0x48,
-+ 0x01, 0x52, 0x01, 0x5C, 0x00, 0x01, 0x00, 0x04, 0x30, 0xF4, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01,
-+ 0x00, 0x04, 0x30, 0xAC, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xAE, 0x00, 0x02,
-+ 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xB0, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04,
-+ 0x30, 0xB2, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xB4, 0x00, 0x02, 0x30, 0x99,
-+ 0x00, 0x01, 0x00, 0x04, 0x30, 0xB6, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xB8,
-+ 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xBA, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01,
-+ 0x00, 0x04, 0x30, 0xBC, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xBE, 0x00, 0x02,
-+ 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xC0, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04,
-+ 0x30, 0xC2, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xC5, 0x00, 0x02, 0x30, 0x99,
-+ 0x00, 0x01, 0x00, 0x04, 0x30, 0xC7, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xC9,
-+ 0x00, 0x02, 0x30, 0x99, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0xD0, 0x00, 0x02, 0x30, 0x99,
-+ 0x30, 0xD1, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0xD3, 0x00, 0x02,
-+ 0x30, 0x99, 0x30, 0xD4, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0xD6,
-+ 0x00, 0x02, 0x30, 0x99, 0x30, 0xD7, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C,
-+ 0x30, 0xD9, 0x00, 0x02, 0x30, 0x99, 0x30, 0xDA, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06,
-+ 0x00, 0x0C, 0x30, 0xDC, 0x00, 0x02, 0x30, 0x99, 0x30, 0xDD, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x01,
-+ 0x00, 0x04, 0x30, 0xF7, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xF8, 0x00, 0x02,
-+ 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xF9, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04,
-+ 0x30, 0xFA, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xFE, 0x00, 0x02, 0x30, 0x99,
-+ 0x00, 0x01, 0x00, 0x1A, 0x30, 0xA6, 0x30, 0xAB, 0x30, 0xAD, 0x30, 0xAF, 0x30, 0xB1, 0x30, 0xB3,
-+ 0x30, 0xB5, 0x30, 0xB7, 0x30, 0xB9, 0x30, 0xBB, 0x30, 0xBD, 0x30, 0xBF, 0x30, 0xC1, 0x30, 0xC4,
-+ 0x30, 0xC6, 0x30, 0xC8, 0x30, 0xCF, 0x30, 0xD2, 0x30, 0xD5, 0x30, 0xD8, 0x30, 0xDB, 0x30, 0xEF,
-+ 0x30, 0xF0, 0x30, 0xF1, 0x30, 0xF2, 0x30, 0xFD, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08,
-+ 0x00, 0x01, 0x00, 0xFE, 0x00, 0x1F, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x56, 0x00, 0x5C,
-+ 0x00, 0x62, 0x00, 0x68, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C,
-+ 0x00, 0x92, 0x00, 0x98, 0x00, 0x9E, 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB0, 0x00, 0xB6, 0x00, 0xBC,
-+ 0x00, 0xC2, 0x00, 0xC8, 0x00, 0xCE, 0x00, 0xD4, 0x00, 0xDA, 0x00, 0xE0, 0x00, 0xE6, 0x00, 0xEC,
-+ 0x00, 0xF2, 0x00, 0xF8, 0x00, 0x02, 0x30, 0xAB, 0x30, 0x99, 0x00, 0x02, 0x30, 0xAD, 0x30, 0x99,
-+ 0x00, 0x02, 0x30, 0xAF, 0x30, 0x99, 0x00, 0x02, 0x30, 0xB1, 0x30, 0x99, 0x00, 0x02, 0x30, 0xB3,
-+ 0x30, 0x99, 0x00, 0x02, 0x30, 0xB5, 0x30, 0x99, 0x00, 0x02, 0x30, 0xB7, 0x30, 0x99, 0x00, 0x02,
-+ 0x30, 0xB9, 0x30, 0x99, 0x00, 0x02, 0x30, 0xBB, 0x30, 0x99, 0x00, 0x02, 0x30, 0xBD, 0x30, 0x99,
-+ 0x00, 0x02, 0x30, 0xBF, 0x30, 0x99, 0x00, 0x02, 0x30, 0xC1, 0x30, 0x99, 0x00, 0x02, 0x30, 0xC4,
-+ 0x30, 0x99, 0x00, 0x02, 0x30, 0xC6, 0x30, 0x99, 0x00, 0x02, 0x30, 0xC8, 0x30, 0x99, 0x00, 0x02,
-+ 0x30, 0xCF, 0x30, 0x99, 0x00, 0x02, 0x30, 0xCF, 0x30, 0x9A, 0x00, 0x02, 0x30, 0xD2, 0x30, 0x99,
-+ 0x00, 0x02, 0x30, 0xD2, 0x30, 0x9A, 0x00, 0x02, 0x30, 0xD5, 0x30, 0x99, 0x00, 0x02, 0x30, 0xD5,
-+ 0x30, 0x9A, 0x00, 0x02, 0x30, 0xD8, 0x30, 0x99, 0x00, 0x02, 0x30, 0xD8, 0x30, 0x9A, 0x00, 0x02,
-+ 0x30, 0xDB, 0x30, 0x99, 0x00, 0x02, 0x30, 0xDB, 0x30, 0x9A, 0x00, 0x02, 0x30, 0xA6, 0x30, 0x99,
-+ 0x00, 0x02, 0x30, 0xEF, 0x30, 0x99, 0x00, 0x02, 0x30, 0xF0, 0x30, 0x99, 0x00, 0x02, 0x30, 0xF1,
-+ 0x30, 0x99, 0x00, 0x02, 0x30, 0xF2, 0x30, 0x99, 0x00, 0x02, 0x30, 0xFD, 0x30, 0x99, 0x00, 0x01,
-+ 0x00, 0x1F, 0x30, 0xAC, 0x30, 0xAE, 0x30, 0xB0, 0x30, 0xB2, 0x30, 0xB4, 0x30, 0xB6, 0x30, 0xB8,
-+ 0x30, 0xBA, 0x30, 0xBC, 0x30, 0xBE, 0x30, 0xC0, 0x30, 0xC2, 0x30, 0xC5, 0x30, 0xC7, 0x30, 0xC9,
-+ 0x30, 0xD0, 0x30, 0xD1, 0x30, 0xD3, 0x30, 0xD4, 0x30, 0xD6, 0x30, 0xD7, 0x30, 0xD9, 0x30, 0xDA,
-+ 0x30, 0xDC, 0x30, 0xDD, 0x30, 0xF4, 0x30, 0xF7, 0x30, 0xF8, 0x30, 0xF9, 0x30, 0xFA, 0x30, 0xFE,
-+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x1E, 0x9A, 0x00, 0x89, 0x01, 0x18,
-+ 0x02, 0x72, 0x02, 0x8C, 0x02, 0xE6, 0x03, 0x18, 0x04, 0x3E, 0x04, 0x48, 0x04, 0x8A, 0x04, 0xC4,
-+ 0x05, 0x6A, 0x05, 0x74, 0x05, 0xA6, 0x05, 0xF4, 0x06, 0x16, 0x06, 0x70, 0x08, 0x56, 0x08, 0x70,
-+ 0x08, 0xCE, 0x09, 0x42, 0x09, 0x7C, 0x0B, 0x14, 0x0B, 0x26, 0x0B, 0x68, 0x0B, 0x7A, 0x0B, 0xD4,
-+ 0x0C, 0x0E, 0x0D, 0x68, 0x0D, 0x82, 0x0D, 0xDC, 0x0E, 0x0E, 0x0F, 0x34, 0x0F, 0x3E, 0x0F, 0x80,
-+ 0x0F, 0xC2, 0x10, 0x60, 0x10, 0x72, 0x10, 0xA4, 0x10, 0xF2, 0x11, 0x14, 0x11, 0x6E, 0x13, 0x54,
-+ 0x13, 0x6E, 0x13, 0xCC, 0x14, 0x40, 0x14, 0x82, 0x16, 0x1A, 0x16, 0x2C, 0x16, 0x76, 0x16, 0x88,
-+ 0x16, 0xEA, 0x17, 0x24, 0x17, 0x5E, 0x17, 0x68, 0x17, 0x7A, 0x17, 0x94, 0x17, 0xA6, 0x17, 0xE0,
-+ 0x17, 0xF2, 0x17, 0xFC, 0x18, 0x06, 0x18, 0x40, 0x18, 0x6A, 0x18, 0x74, 0x18, 0x86, 0x18, 0x90,
-+ 0x18, 0x9A, 0x18, 0xCC, 0x19, 0x06, 0x19, 0x10, 0x19, 0x22, 0x19, 0x3C, 0x19, 0x4E, 0x19, 0x88,
-+ 0x19, 0x9A, 0x19, 0xA4, 0x19, 0xAE, 0x19, 0xE8, 0x1A, 0x12, 0x1A, 0x1C, 0x1A, 0x2E, 0x1A, 0x38,
-+ 0x1A, 0x42, 0x1A, 0x74, 0x1A, 0xAE, 0x1A, 0xE8, 0x1A, 0xF2, 0x1A, 0xFC, 0x1B, 0x1E, 0x1B, 0x40,
-+ 0x1B, 0x4A, 0x1B, 0x54, 0x1B, 0x7E, 0x1B, 0xA8, 0x1B, 0xB2, 0x1B, 0xBC, 0x1B, 0xC6, 0x1B, 0xD0,
-+ 0x1B, 0xEA, 0x1C, 0x04, 0x1C, 0x0E, 0x1C, 0x18, 0x1C, 0x22, 0x1C, 0x5C, 0x1C, 0x96, 0x1C, 0xD0,
-+ 0x1D, 0x0A, 0x1D, 0x14, 0x1D, 0x1E, 0x1D, 0x28, 0x1D, 0x32, 0x1D, 0x3C, 0x1D, 0x46, 0x1D, 0x50,
-+ 0x1D, 0x5A, 0x1D, 0x64, 0x1D, 0x6E, 0x1D, 0x78, 0x1D, 0x82, 0x1D, 0x8C, 0x1D, 0x96, 0x1D, 0xA0,
-+ 0x1D, 0xAA, 0x1D, 0xB4, 0x1D, 0xBE, 0x1D, 0xD0, 0x1D, 0xE2, 0x1D, 0xEC, 0x1D, 0xF6, 0x1E, 0x08,
-+ 0x1E, 0x1A, 0x1E, 0x24, 0x1E, 0x2E, 0x1E, 0x38, 0x1E, 0x42, 0x1E, 0x4C, 0x1E, 0x56, 0x1E, 0x88,
- 0x00, 0x26, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A,
- 0x00, 0x82, 0x00, 0x8A, 0x00, 0x92, 0x00, 0x98, 0x00, 0x9E, 0x00, 0xA4, 0x00, 0xAC, 0x00, 0xB4,
- 0x00, 0xBC, 0x00, 0xC4, 0x00, 0xCC, 0x00, 0xD4, 0x00, 0xDC, 0x00, 0xE2, 0x00, 0xEA, 0x00, 0xF0,
- 0x00, 0xF8, 0x00, 0xFE, 0x01, 0x04, 0x01, 0x0C, 0x01, 0x14, 0x01, 0x1A, 0x01, 0x20, 0x01, 0x26,
-- 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x42, 0x01, 0x48, 0x01, 0x4E, 0x01, 0x54, 0x00, 0xE0,
-- 0x00, 0x02, 0x03, 0x00, 0x00, 0xE1, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xA7, 0x00, 0x03, 0x03, 0x02,
-- 0x03, 0x00, 0x1E, 0xA5, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01, 0x1E, 0xAB, 0x00, 0x03, 0x03, 0x02,
-- 0x03, 0x03, 0x1E, 0xA9, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09, 0x1E, 0xAD, 0x00, 0x03, 0x03, 0x02,
-- 0x03, 0x23, 0x1E, 0xA7, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40, 0x1E, 0xA5, 0x00, 0x03, 0x03, 0x02,
-- 0x03, 0x41, 0x00, 0xE2, 0x00, 0x02, 0x03, 0x02, 0x00, 0xE3, 0x00, 0x02, 0x03, 0x03, 0x01, 0x01,
-- 0x00, 0x02, 0x03, 0x04, 0x1E, 0xB1, 0x00, 0x03, 0x03, 0x06, 0x03, 0x00, 0x1E, 0xAF, 0x00, 0x03,
-- 0x03, 0x06, 0x03, 0x01, 0x1E, 0xB5, 0x00, 0x03, 0x03, 0x06, 0x03, 0x03, 0x1E, 0xB3, 0x00, 0x03,
-- 0x03, 0x06, 0x03, 0x09, 0x1E, 0xB7, 0x00, 0x03, 0x03, 0x06, 0x03, 0x23, 0x1E, 0xB1, 0x00, 0x03,
-- 0x03, 0x06, 0x03, 0x40, 0x1E, 0xAF, 0x00, 0x03, 0x03, 0x06, 0x03, 0x41, 0x01, 0x03, 0x00, 0x02,
-- 0x03, 0x06, 0x01, 0xE1, 0x00, 0x03, 0x03, 0x07, 0x03, 0x04, 0x02, 0x27, 0x00, 0x02, 0x03, 0x07,
-- 0x01, 0xDF, 0x00, 0x03, 0x03, 0x08, 0x03, 0x04, 0x00, 0xE4, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xA3,
-- 0x00, 0x02, 0x03, 0x09, 0x01, 0xFB, 0x00, 0x03, 0x03, 0x0A, 0x03, 0x01, 0x01, 0xFB, 0x00, 0x03,
-- 0x03, 0x0A, 0x03, 0x41, 0x00, 0xE5, 0x00, 0x02, 0x03, 0x0A, 0x01, 0xCE, 0x00, 0x02, 0x03, 0x0C,
-- 0x02, 0x01, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x03, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xAD, 0x00, 0x03,
-- 0x03, 0x23, 0x03, 0x02, 0x1E, 0xB7, 0x00, 0x03, 0x03, 0x23, 0x03, 0x06, 0x1E, 0xA1, 0x00, 0x02,
-- 0x03, 0x23, 0x1E, 0x01, 0x00, 0x02, 0x03, 0x25, 0x01, 0x05, 0x00, 0x02, 0x03, 0x28, 0x00, 0xE0,
-- 0x00, 0x02, 0x03, 0x40, 0x00, 0xE1, 0x00, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E,
-- 0x00, 0x14, 0x1E, 0x03, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x05, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x07,
-+ 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x42, 0x01, 0x48, 0x01, 0x4E, 0x01, 0x54, 0x00, 0xC0,
-+ 0x00, 0x02, 0x03, 0x00, 0x00, 0xC1, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xA6, 0x00, 0x03, 0x03, 0x02,
-+ 0x03, 0x00, 0x1E, 0xA4, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01, 0x1E, 0xAA, 0x00, 0x03, 0x03, 0x02,
-+ 0x03, 0x03, 0x1E, 0xA8, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09, 0x1E, 0xAC, 0x00, 0x03, 0x03, 0x02,
-+ 0x03, 0x23, 0x1E, 0xA6, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40, 0x1E, 0xA4, 0x00, 0x03, 0x03, 0x02,
-+ 0x03, 0x41, 0x00, 0xC2, 0x00, 0x02, 0x03, 0x02, 0x00, 0xC3, 0x00, 0x02, 0x03, 0x03, 0x01, 0x00,
-+ 0x00, 0x02, 0x03, 0x04, 0x1E, 0xB0, 0x00, 0x03, 0x03, 0x06, 0x03, 0x00, 0x1E, 0xAE, 0x00, 0x03,
-+ 0x03, 0x06, 0x03, 0x01, 0x1E, 0xB4, 0x00, 0x03, 0x03, 0x06, 0x03, 0x03, 0x1E, 0xB2, 0x00, 0x03,
-+ 0x03, 0x06, 0x03, 0x09, 0x1E, 0xB6, 0x00, 0x03, 0x03, 0x06, 0x03, 0x23, 0x1E, 0xB0, 0x00, 0x03,
-+ 0x03, 0x06, 0x03, 0x40, 0x1E, 0xAE, 0x00, 0x03, 0x03, 0x06, 0x03, 0x41, 0x01, 0x02, 0x00, 0x02,
-+ 0x03, 0x06, 0x01, 0xE0, 0x00, 0x03, 0x03, 0x07, 0x03, 0x04, 0x02, 0x26, 0x00, 0x02, 0x03, 0x07,
-+ 0x01, 0xDE, 0x00, 0x03, 0x03, 0x08, 0x03, 0x04, 0x00, 0xC4, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xA2,
-+ 0x00, 0x02, 0x03, 0x09, 0x01, 0xFA, 0x00, 0x03, 0x03, 0x0A, 0x03, 0x01, 0x01, 0xFA, 0x00, 0x03,
-+ 0x03, 0x0A, 0x03, 0x41, 0x00, 0xC5, 0x00, 0x02, 0x03, 0x0A, 0x01, 0xCD, 0x00, 0x02, 0x03, 0x0C,
-+ 0x02, 0x00, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x02, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xAC, 0x00, 0x03,
-+ 0x03, 0x23, 0x03, 0x02, 0x1E, 0xB6, 0x00, 0x03, 0x03, 0x23, 0x03, 0x06, 0x1E, 0xA0, 0x00, 0x02,
-+ 0x03, 0x23, 0x1E, 0x00, 0x00, 0x02, 0x03, 0x25, 0x01, 0x04, 0x00, 0x02, 0x03, 0x28, 0x00, 0xC0,
-+ 0x00, 0x02, 0x03, 0x40, 0x00, 0xC1, 0x00, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E,
-+ 0x00, 0x14, 0x1E, 0x02, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x04, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x06,
- 0x00, 0x02, 0x03, 0x31, 0x00, 0x0A, 0x00, 0x16, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30,
-- 0x00, 0x36, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x1E, 0x09, 0x00, 0x03, 0x03, 0x01,
-- 0x03, 0x27, 0x01, 0x07, 0x00, 0x02, 0x03, 0x01, 0x01, 0x09, 0x00, 0x02, 0x03, 0x02, 0x01, 0x0B,
-- 0x00, 0x02, 0x03, 0x07, 0x01, 0x0D, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x09, 0x00, 0x03, 0x03, 0x27,
-- 0x03, 0x01, 0x1E, 0x09, 0x00, 0x03, 0x03, 0x27, 0x03, 0x41, 0x00, 0xE7, 0x00, 0x02, 0x03, 0x27,
-- 0x1E, 0x09, 0x00, 0x03, 0x03, 0x41, 0x03, 0x27, 0x01, 0x07, 0x00, 0x02, 0x03, 0x41, 0x00, 0x06,
-- 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x1E, 0x0B, 0x00, 0x02,
-- 0x03, 0x07, 0x01, 0x0F, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x0D, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x11,
-- 0x00, 0x02, 0x03, 0x27, 0x1E, 0x13, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x0F, 0x00, 0x02, 0x03, 0x31,
-+ 0x00, 0x36, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x1E, 0x08, 0x00, 0x03, 0x03, 0x01,
-+ 0x03, 0x27, 0x01, 0x06, 0x00, 0x02, 0x03, 0x01, 0x01, 0x08, 0x00, 0x02, 0x03, 0x02, 0x01, 0x0A,
-+ 0x00, 0x02, 0x03, 0x07, 0x01, 0x0C, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x08, 0x00, 0x03, 0x03, 0x27,
-+ 0x03, 0x01, 0x1E, 0x08, 0x00, 0x03, 0x03, 0x27, 0x03, 0x41, 0x00, 0xC7, 0x00, 0x02, 0x03, 0x27,
-+ 0x1E, 0x08, 0x00, 0x03, 0x03, 0x41, 0x03, 0x27, 0x01, 0x06, 0x00, 0x02, 0x03, 0x41, 0x00, 0x06,
-+ 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x1E, 0x0A, 0x00, 0x02,
-+ 0x03, 0x07, 0x01, 0x0E, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x0C, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x10,
-+ 0x00, 0x02, 0x03, 0x27, 0x1E, 0x12, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x0E, 0x00, 0x02, 0x03, 0x31,
- 0x00, 0x21, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x58, 0x00, 0x60, 0x00, 0x68, 0x00, 0x70,
- 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x8E, 0x00, 0x94, 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAC,
- 0x00, 0xB4, 0x00, 0xBA, 0x00, 0xC2, 0x00, 0xC8, 0x00, 0xCE, 0x00, 0xD4, 0x00, 0xDA, 0x00, 0xE0,
- 0x00, 0xE6, 0x00, 0xEC, 0x00, 0xF4, 0x00, 0xFA, 0x01, 0x02, 0x01, 0x08, 0x01, 0x0E, 0x01, 0x14,
-- 0x01, 0x1A, 0x01, 0x20, 0x00, 0xE8, 0x00, 0x02, 0x03, 0x00, 0x00, 0xE9, 0x00, 0x02, 0x03, 0x01,
-- 0x1E, 0xC1, 0x00, 0x03, 0x03, 0x02, 0x03, 0x00, 0x1E, 0xBF, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01,
-- 0x1E, 0xC5, 0x00, 0x03, 0x03, 0x02, 0x03, 0x03, 0x1E, 0xC3, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09,
-- 0x1E, 0xC7, 0x00, 0x03, 0x03, 0x02, 0x03, 0x23, 0x1E, 0xC1, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40,
-- 0x1E, 0xBF, 0x00, 0x03, 0x03, 0x02, 0x03, 0x41, 0x00, 0xEA, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xBD,
-- 0x00, 0x02, 0x03, 0x03, 0x1E, 0x15, 0x00, 0x03, 0x03, 0x04, 0x03, 0x00, 0x1E, 0x17, 0x00, 0x03,
-- 0x03, 0x04, 0x03, 0x01, 0x1E, 0x15, 0x00, 0x03, 0x03, 0x04, 0x03, 0x40, 0x1E, 0x17, 0x00, 0x03,
-- 0x03, 0x04, 0x03, 0x41, 0x01, 0x13, 0x00, 0x02, 0x03, 0x04, 0x1E, 0x1D, 0x00, 0x03, 0x03, 0x06,
-- 0x03, 0x27, 0x01, 0x15, 0x00, 0x02, 0x03, 0x06, 0x01, 0x17, 0x00, 0x02, 0x03, 0x07, 0x00, 0xEB,
-- 0x00, 0x02, 0x03, 0x08, 0x1E, 0xBB, 0x00, 0x02, 0x03, 0x09, 0x01, 0x1B, 0x00, 0x02, 0x03, 0x0C,
-- 0x02, 0x05, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x07, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xC7, 0x00, 0x03,
-- 0x03, 0x23, 0x03, 0x02, 0x1E, 0xB9, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x1D, 0x00, 0x03, 0x03, 0x27,
-- 0x03, 0x06, 0x02, 0x29, 0x00, 0x02, 0x03, 0x27, 0x01, 0x19, 0x00, 0x02, 0x03, 0x28, 0x1E, 0x19,
-- 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x1B, 0x00, 0x02, 0x03, 0x30, 0x00, 0xE8, 0x00, 0x02, 0x03, 0x40,
-- 0x00, 0xE9, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x1F, 0x00, 0x02, 0x03, 0x07,
-+ 0x01, 0x1A, 0x01, 0x20, 0x00, 0xC8, 0x00, 0x02, 0x03, 0x00, 0x00, 0xC9, 0x00, 0x02, 0x03, 0x01,
-+ 0x1E, 0xC0, 0x00, 0x03, 0x03, 0x02, 0x03, 0x00, 0x1E, 0xBE, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01,
-+ 0x1E, 0xC4, 0x00, 0x03, 0x03, 0x02, 0x03, 0x03, 0x1E, 0xC2, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09,
-+ 0x1E, 0xC6, 0x00, 0x03, 0x03, 0x02, 0x03, 0x23, 0x1E, 0xC0, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40,
-+ 0x1E, 0xBE, 0x00, 0x03, 0x03, 0x02, 0x03, 0x41, 0x00, 0xCA, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xBC,
-+ 0x00, 0x02, 0x03, 0x03, 0x1E, 0x14, 0x00, 0x03, 0x03, 0x04, 0x03, 0x00, 0x1E, 0x16, 0x00, 0x03,
-+ 0x03, 0x04, 0x03, 0x01, 0x1E, 0x14, 0x00, 0x03, 0x03, 0x04, 0x03, 0x40, 0x1E, 0x16, 0x00, 0x03,
-+ 0x03, 0x04, 0x03, 0x41, 0x01, 0x12, 0x00, 0x02, 0x03, 0x04, 0x1E, 0x1C, 0x00, 0x03, 0x03, 0x06,
-+ 0x03, 0x27, 0x01, 0x14, 0x00, 0x02, 0x03, 0x06, 0x01, 0x16, 0x00, 0x02, 0x03, 0x07, 0x00, 0xCB,
-+ 0x00, 0x02, 0x03, 0x08, 0x1E, 0xBA, 0x00, 0x02, 0x03, 0x09, 0x01, 0x1A, 0x00, 0x02, 0x03, 0x0C,
-+ 0x02, 0x04, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x06, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xC6, 0x00, 0x03,
-+ 0x03, 0x23, 0x03, 0x02, 0x1E, 0xB8, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x1C, 0x00, 0x03, 0x03, 0x27,
-+ 0x03, 0x06, 0x02, 0x28, 0x00, 0x02, 0x03, 0x27, 0x01, 0x18, 0x00, 0x02, 0x03, 0x28, 0x1E, 0x18,
-+ 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x1A, 0x00, 0x02, 0x03, 0x30, 0x00, 0xC8, 0x00, 0x02, 0x03, 0x40,
-+ 0x00, 0xC9, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x1E, 0x00, 0x02, 0x03, 0x07,
- 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36,
-- 0x00, 0x3C, 0x01, 0xF5, 0x00, 0x02, 0x03, 0x01, 0x01, 0x1D, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x21,
-- 0x00, 0x02, 0x03, 0x04, 0x01, 0x1F, 0x00, 0x02, 0x03, 0x06, 0x01, 0x21, 0x00, 0x02, 0x03, 0x07,
-- 0x01, 0xE7, 0x00, 0x02, 0x03, 0x0C, 0x01, 0x23, 0x00, 0x02, 0x03, 0x27, 0x01, 0xF5, 0x00, 0x02,
-- 0x03, 0x41, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30,
-- 0x00, 0x36, 0x00, 0x3C, 0x01, 0x25, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x23, 0x00, 0x02, 0x03, 0x07,
-- 0x1E, 0x27, 0x00, 0x02, 0x03, 0x08, 0x02, 0x1F, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x25, 0x00, 0x02,
-- 0x03, 0x23, 0x1E, 0x29, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x2B, 0x00, 0x02, 0x03, 0x2E, 0x1E, 0x96,
-- 0x00, 0x02, 0x03, 0x31, 0x00, 0x13, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x00, 0x3A, 0x00, 0x40,
-- 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x68, 0x00, 0x6E, 0x00, 0x74,
-- 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0x00, 0x92, 0x00, 0x98, 0x00, 0xEC, 0x00, 0x02,
-- 0x03, 0x00, 0x00, 0xED, 0x00, 0x02, 0x03, 0x01, 0x00, 0xEE, 0x00, 0x02, 0x03, 0x02, 0x01, 0x29,
-- 0x00, 0x02, 0x03, 0x03, 0x01, 0x2B, 0x00, 0x02, 0x03, 0x04, 0x01, 0x2D, 0x00, 0x02, 0x03, 0x06,
-- 0x1E, 0x2F, 0x00, 0x03, 0x03, 0x08, 0x03, 0x01, 0x1E, 0x2F, 0x00, 0x03, 0x03, 0x08, 0x03, 0x41,
-- 0x00, 0xEF, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xC9, 0x00, 0x02, 0x03, 0x09, 0x01, 0xD0, 0x00, 0x02,
-- 0x03, 0x0C, 0x02, 0x09, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x0B, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xCB,
-- 0x00, 0x02, 0x03, 0x23, 0x01, 0x2F, 0x00, 0x02, 0x03, 0x28, 0x1E, 0x2D, 0x00, 0x02, 0x03, 0x30,
-- 0x00, 0xEC, 0x00, 0x02, 0x03, 0x40, 0x00, 0xED, 0x00, 0x02, 0x03, 0x41, 0x1E, 0x2F, 0x00, 0x02,
-- 0x03, 0x44, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x01, 0x35, 0x00, 0x02, 0x03, 0x02, 0x01, 0xF0,
-- 0x00, 0x02, 0x03, 0x0C, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26,
-- 0x00, 0x2C, 0x1E, 0x31, 0x00, 0x02, 0x03, 0x01, 0x01, 0xE9, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x33,
-- 0x00, 0x02, 0x03, 0x23, 0x01, 0x37, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x35, 0x00, 0x02, 0x03, 0x31,
-- 0x1E, 0x31, 0x00, 0x02, 0x03, 0x41, 0x00, 0x09, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x22, 0x00, 0x28,
-- 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0x01, 0x3A, 0x00, 0x02, 0x03, 0x01,
-- 0x1E, 0x39, 0x00, 0x03, 0x03, 0x04, 0x03, 0x23, 0x01, 0x3E, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x39,
-- 0x00, 0x03, 0x03, 0x23, 0x03, 0x04, 0x1E, 0x37, 0x00, 0x02, 0x03, 0x23, 0x01, 0x3C, 0x00, 0x02,
-- 0x03, 0x27, 0x1E, 0x3D, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x3B, 0x00, 0x02, 0x03, 0x31, 0x01, 0x3A,
-- 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x1E, 0x3F,
-- 0x00, 0x02, 0x03, 0x01, 0x1E, 0x41, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x43, 0x00, 0x02, 0x03, 0x23,
-- 0x1E, 0x3F, 0x00, 0x02, 0x03, 0x41, 0x00, 0x0B, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A,
-- 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x01, 0xF9,
-- 0x00, 0x02, 0x03, 0x00, 0x01, 0x44, 0x00, 0x02, 0x03, 0x01, 0x00, 0xF1, 0x00, 0x02, 0x03, 0x03,
-- 0x1E, 0x45, 0x00, 0x02, 0x03, 0x07, 0x01, 0x48, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x47, 0x00, 0x02,
-- 0x03, 0x23, 0x01, 0x46, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x4B, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x49,
-- 0x00, 0x02, 0x03, 0x31, 0x01, 0xF9, 0x00, 0x02, 0x03, 0x40, 0x01, 0x44, 0x00, 0x02, 0x03, 0x41,
-- 0x00, 0x34, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x78, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8E, 0x00, 0x96,
-- 0x00, 0x9E, 0x00, 0xA6, 0x00, 0xAE, 0x00, 0xB6, 0x00, 0xBE, 0x00, 0xC4, 0x00, 0xCC, 0x00, 0xD4,
-- 0x00, 0xDC, 0x00, 0xE4, 0x00, 0xEC, 0x00, 0xF2, 0x00, 0xFA, 0x01, 0x02, 0x01, 0x0A, 0x01, 0x12,
-- 0x01, 0x1A, 0x01, 0x20, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x42, 0x01, 0x4A,
-- 0x01, 0x50, 0x01, 0x56, 0x01, 0x5C, 0x01, 0x62, 0x01, 0x68, 0x01, 0x70, 0x01, 0x78, 0x01, 0x80,
-- 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA0, 0x01, 0xA6, 0x01, 0xAE, 0x01, 0xB6, 0x01, 0xBC,
-- 0x01, 0xC4, 0x01, 0xCA, 0x01, 0xD2, 0x01, 0xD8, 0x01, 0xE0, 0x1E, 0xDD, 0x00, 0x03, 0x03, 0x00,
-- 0x03, 0x1B, 0x00, 0xF2, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xDB, 0x00, 0x03, 0x03, 0x01, 0x03, 0x1B,
-- 0x00, 0xF3, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xD3, 0x00, 0x03, 0x03, 0x02, 0x03, 0x00, 0x1E, 0xD1,
-- 0x00, 0x03, 0x03, 0x02, 0x03, 0x01, 0x1E, 0xD7, 0x00, 0x03, 0x03, 0x02, 0x03, 0x03, 0x1E, 0xD5,
-- 0x00, 0x03, 0x03, 0x02, 0x03, 0x09, 0x1E, 0xD9, 0x00, 0x03, 0x03, 0x02, 0x03, 0x23, 0x1E, 0xD3,
-- 0x00, 0x03, 0x03, 0x02, 0x03, 0x40, 0x1E, 0xD1, 0x00, 0x03, 0x03, 0x02, 0x03, 0x41, 0x00, 0xF4,
-- 0x00, 0x02, 0x03, 0x02, 0x1E, 0x4D, 0x00, 0x03, 0x03, 0x03, 0x03, 0x01, 0x02, 0x2D, 0x00, 0x03,
-- 0x03, 0x03, 0x03, 0x04, 0x1E, 0x4F, 0x00, 0x03, 0x03, 0x03, 0x03, 0x08, 0x1E, 0xE1, 0x00, 0x03,
-- 0x03, 0x03, 0x03, 0x1B, 0x1E, 0x4D, 0x00, 0x03, 0x03, 0x03, 0x03, 0x41, 0x00, 0xF5, 0x00, 0x02,
-- 0x03, 0x03, 0x1E, 0x51, 0x00, 0x03, 0x03, 0x04, 0x03, 0x00, 0x1E, 0x53, 0x00, 0x03, 0x03, 0x04,
-- 0x03, 0x01, 0x01, 0xED, 0x00, 0x03, 0x03, 0x04, 0x03, 0x28, 0x1E, 0x51, 0x00, 0x03, 0x03, 0x04,
-- 0x03, 0x40, 0x1E, 0x53, 0x00, 0x03, 0x03, 0x04, 0x03, 0x41, 0x01, 0x4D, 0x00, 0x02, 0x03, 0x04,
-- 0x01, 0x4F, 0x00, 0x02, 0x03, 0x06, 0x02, 0x31, 0x00, 0x03, 0x03, 0x07, 0x03, 0x04, 0x02, 0x2F,
-- 0x00, 0x02, 0x03, 0x07, 0x02, 0x2B, 0x00, 0x03, 0x03, 0x08, 0x03, 0x04, 0x00, 0xF6, 0x00, 0x02,
-- 0x03, 0x08, 0x1E, 0xDF, 0x00, 0x03, 0x03, 0x09, 0x03, 0x1B, 0x1E, 0xCF, 0x00, 0x02, 0x03, 0x09,
-- 0x01, 0x51, 0x00, 0x02, 0x03, 0x0B, 0x01, 0xD2, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x0D, 0x00, 0x02,
-- 0x03, 0x0F, 0x02, 0x0F, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xDD, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x00,
-- 0x1E, 0xDB, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x01, 0x1E, 0xE1, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x03,
-- 0x1E, 0xDF, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x09, 0x1E, 0xE3, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x23,
-- 0x1E, 0xDD, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x40, 0x1E, 0xDB, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x41,
-- 0x01, 0xA1, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0xD9, 0x00, 0x03, 0x03, 0x23, 0x03, 0x02, 0x1E, 0xE3,
-- 0x00, 0x03, 0x03, 0x23, 0x03, 0x1B, 0x1E, 0xCD, 0x00, 0x02, 0x03, 0x23, 0x01, 0xED, 0x00, 0x03,
-- 0x03, 0x28, 0x03, 0x04, 0x01, 0xEB, 0x00, 0x02, 0x03, 0x28, 0x1E, 0xDD, 0x00, 0x03, 0x03, 0x40,
-- 0x03, 0x1B, 0x00, 0xF2, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xDB, 0x00, 0x03, 0x03, 0x41, 0x03, 0x1B,
-- 0x00, 0xF3, 0x00, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x1E, 0x55,
-- 0x00, 0x02, 0x03, 0x01, 0x1E, 0x57, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x55, 0x00, 0x02, 0x03, 0x41,
-- 0x00, 0x0B, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E,
-- 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x01, 0x55, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x5D,
-- 0x00, 0x03, 0x03, 0x04, 0x03, 0x23, 0x1E, 0x59, 0x00, 0x02, 0x03, 0x07, 0x01, 0x59, 0x00, 0x02,
-- 0x03, 0x0C, 0x02, 0x11, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x13, 0x00, 0x02, 0x03, 0x11, 0x1E, 0x5D,
-- 0x00, 0x03, 0x03, 0x23, 0x03, 0x04, 0x1E, 0x5B, 0x00, 0x02, 0x03, 0x23, 0x01, 0x57, 0x00, 0x02,
-- 0x03, 0x27, 0x1E, 0x5F, 0x00, 0x02, 0x03, 0x31, 0x01, 0x55, 0x00, 0x02, 0x03, 0x41, 0x00, 0x0D,
-- 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C,
-- 0x00, 0x54, 0x00, 0x5A, 0x00, 0x60, 0x00, 0x66, 0x00, 0x6E, 0x1E, 0x65, 0x00, 0x03, 0x03, 0x01,
-- 0x03, 0x07, 0x01, 0x5B, 0x00, 0x02, 0x03, 0x01, 0x01, 0x5D, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x69,
-- 0x00, 0x03, 0x03, 0x07, 0x03, 0x23, 0x1E, 0x61, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x67, 0x00, 0x03,
-- 0x03, 0x0C, 0x03, 0x07, 0x01, 0x61, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x69, 0x00, 0x03, 0x03, 0x23,
-- 0x03, 0x07, 0x1E, 0x63, 0x00, 0x02, 0x03, 0x23, 0x02, 0x19, 0x00, 0x02, 0x03, 0x26, 0x01, 0x5F,
-- 0x00, 0x02, 0x03, 0x27, 0x1E, 0x65, 0x00, 0x03, 0x03, 0x41, 0x03, 0x07, 0x01, 0x5B, 0x00, 0x02,
-- 0x03, 0x41, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30,
-- 0x00, 0x36, 0x00, 0x3C, 0x1E, 0x6B, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x97, 0x00, 0x02, 0x03, 0x08,
-- 0x01, 0x65, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x6D, 0x00, 0x02, 0x03, 0x23, 0x02, 0x1B, 0x00, 0x02,
-- 0x03, 0x26, 0x01, 0x63, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x71, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x6F,
-+ 0x00, 0x3C, 0x01, 0xF4, 0x00, 0x02, 0x03, 0x01, 0x01, 0x1C, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x20,
-+ 0x00, 0x02, 0x03, 0x04, 0x01, 0x1E, 0x00, 0x02, 0x03, 0x06, 0x01, 0x20, 0x00, 0x02, 0x03, 0x07,
-+ 0x01, 0xE6, 0x00, 0x02, 0x03, 0x0C, 0x01, 0x22, 0x00, 0x02, 0x03, 0x27, 0x01, 0xF4, 0x00, 0x02,
-+ 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E,
-+ 0x00, 0x34, 0x01, 0x24, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x22, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x26,
-+ 0x00, 0x02, 0x03, 0x08, 0x02, 0x1E, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x24, 0x00, 0x02, 0x03, 0x23,
-+ 0x1E, 0x28, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x2A, 0x00, 0x02, 0x03, 0x2E, 0x00, 0x14, 0x00, 0x2A,
-+ 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5C,
-+ 0x00, 0x64, 0x00, 0x6A, 0x00, 0x70, 0x00, 0x76, 0x00, 0x7C, 0x00, 0x82, 0x00, 0x88, 0x00, 0x8E,
-+ 0x00, 0x94, 0x00, 0x9A, 0x00, 0xA0, 0x00, 0xCC, 0x00, 0x02, 0x03, 0x00, 0x00, 0xCD, 0x00, 0x02,
-+ 0x03, 0x01, 0x00, 0xCE, 0x00, 0x02, 0x03, 0x02, 0x01, 0x28, 0x00, 0x02, 0x03, 0x03, 0x01, 0x2A,
-+ 0x00, 0x02, 0x03, 0x04, 0x01, 0x2C, 0x00, 0x02, 0x03, 0x06, 0x01, 0x30, 0x00, 0x02, 0x03, 0x07,
-+ 0x1E, 0x2E, 0x00, 0x03, 0x03, 0x08, 0x03, 0x01, 0x1E, 0x2E, 0x00, 0x03, 0x03, 0x08, 0x03, 0x41,
-+ 0x00, 0xCF, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xC8, 0x00, 0x02, 0x03, 0x09, 0x01, 0xCF, 0x00, 0x02,
-+ 0x03, 0x0C, 0x02, 0x08, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x0A, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xCA,
-+ 0x00, 0x02, 0x03, 0x23, 0x01, 0x2E, 0x00, 0x02, 0x03, 0x28, 0x1E, 0x2C, 0x00, 0x02, 0x03, 0x30,
-+ 0x00, 0xCC, 0x00, 0x02, 0x03, 0x40, 0x00, 0xCD, 0x00, 0x02, 0x03, 0x41, 0x1E, 0x2E, 0x00, 0x02,
-+ 0x03, 0x44, 0x00, 0x01, 0x00, 0x04, 0x01, 0x34, 0x00, 0x02, 0x03, 0x02, 0x00, 0x06, 0x00, 0x0E,
-+ 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x1E, 0x30, 0x00, 0x02, 0x03, 0x01,
-+ 0x01, 0xE8, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x32, 0x00, 0x02, 0x03, 0x23, 0x01, 0x36, 0x00, 0x02,
-+ 0x03, 0x27, 0x1E, 0x34, 0x00, 0x02, 0x03, 0x31, 0x1E, 0x30, 0x00, 0x02, 0x03, 0x41, 0x00, 0x09,
-+ 0x00, 0x14, 0x00, 0x1A, 0x00, 0x22, 0x00, 0x28, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42,
-+ 0x00, 0x48, 0x01, 0x39, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x38, 0x00, 0x03, 0x03, 0x04, 0x03, 0x23,
-+ 0x01, 0x3D, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x38, 0x00, 0x03, 0x03, 0x23, 0x03, 0x04, 0x1E, 0x36,
-+ 0x00, 0x02, 0x03, 0x23, 0x01, 0x3B, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x3C, 0x00, 0x02, 0x03, 0x2D,
-+ 0x1E, 0x3A, 0x00, 0x02, 0x03, 0x31, 0x01, 0x39, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A,
-+ 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x1E, 0x3E, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x40, 0x00, 0x02,
-+ 0x03, 0x07, 0x1E, 0x42, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x3E, 0x00, 0x02, 0x03, 0x41, 0x00, 0x0B,
-+ 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42,
-+ 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x01, 0xF8, 0x00, 0x02, 0x03, 0x00, 0x01, 0x43, 0x00, 0x02,
-+ 0x03, 0x01, 0x00, 0xD1, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x44, 0x00, 0x02, 0x03, 0x07, 0x01, 0x47,
-+ 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x46, 0x00, 0x02, 0x03, 0x23, 0x01, 0x45, 0x00, 0x02, 0x03, 0x27,
-+ 0x1E, 0x4A, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x48, 0x00, 0x02, 0x03, 0x31, 0x01, 0xF8, 0x00, 0x02,
-+ 0x03, 0x40, 0x01, 0x43, 0x00, 0x02, 0x03, 0x41, 0x00, 0x34, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x78,
-+ 0x00, 0x80, 0x00, 0x86, 0x00, 0x8E, 0x00, 0x96, 0x00, 0x9E, 0x00, 0xA6, 0x00, 0xAE, 0x00, 0xB6,
-+ 0x00, 0xBE, 0x00, 0xC4, 0x00, 0xCC, 0x00, 0xD4, 0x00, 0xDC, 0x00, 0xE4, 0x00, 0xEC, 0x00, 0xF2,
-+ 0x00, 0xFA, 0x01, 0x02, 0x01, 0x0A, 0x01, 0x12, 0x01, 0x1A, 0x01, 0x20, 0x01, 0x26, 0x01, 0x2E,
-+ 0x01, 0x34, 0x01, 0x3C, 0x01, 0x42, 0x01, 0x4A, 0x01, 0x50, 0x01, 0x56, 0x01, 0x5C, 0x01, 0x62,
-+ 0x01, 0x68, 0x01, 0x70, 0x01, 0x78, 0x01, 0x80, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA0,
-+ 0x01, 0xA6, 0x01, 0xAE, 0x01, 0xB6, 0x01, 0xBC, 0x01, 0xC4, 0x01, 0xCA, 0x01, 0xD2, 0x01, 0xD8,
-+ 0x01, 0xE0, 0x1E, 0xDC, 0x00, 0x03, 0x03, 0x00, 0x03, 0x1B, 0x00, 0xD2, 0x00, 0x02, 0x03, 0x00,
-+ 0x1E, 0xDA, 0x00, 0x03, 0x03, 0x01, 0x03, 0x1B, 0x00, 0xD3, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xD2,
-+ 0x00, 0x03, 0x03, 0x02, 0x03, 0x00, 0x1E, 0xD0, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01, 0x1E, 0xD6,
-+ 0x00, 0x03, 0x03, 0x02, 0x03, 0x03, 0x1E, 0xD4, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09, 0x1E, 0xD8,
-+ 0x00, 0x03, 0x03, 0x02, 0x03, 0x23, 0x1E, 0xD2, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40, 0x1E, 0xD0,
-+ 0x00, 0x03, 0x03, 0x02, 0x03, 0x41, 0x00, 0xD4, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x4C, 0x00, 0x03,
-+ 0x03, 0x03, 0x03, 0x01, 0x02, 0x2C, 0x00, 0x03, 0x03, 0x03, 0x03, 0x04, 0x1E, 0x4E, 0x00, 0x03,
-+ 0x03, 0x03, 0x03, 0x08, 0x1E, 0xE0, 0x00, 0x03, 0x03, 0x03, 0x03, 0x1B, 0x1E, 0x4C, 0x00, 0x03,
-+ 0x03, 0x03, 0x03, 0x41, 0x00, 0xD5, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x50, 0x00, 0x03, 0x03, 0x04,
-+ 0x03, 0x00, 0x1E, 0x52, 0x00, 0x03, 0x03, 0x04, 0x03, 0x01, 0x01, 0xEC, 0x00, 0x03, 0x03, 0x04,
-+ 0x03, 0x28, 0x1E, 0x50, 0x00, 0x03, 0x03, 0x04, 0x03, 0x40, 0x1E, 0x52, 0x00, 0x03, 0x03, 0x04,
-+ 0x03, 0x41, 0x01, 0x4C, 0x00, 0x02, 0x03, 0x04, 0x01, 0x4E, 0x00, 0x02, 0x03, 0x06, 0x02, 0x30,
-+ 0x00, 0x03, 0x03, 0x07, 0x03, 0x04, 0x02, 0x2E, 0x00, 0x02, 0x03, 0x07, 0x02, 0x2A, 0x00, 0x03,
-+ 0x03, 0x08, 0x03, 0x04, 0x00, 0xD6, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xDE, 0x00, 0x03, 0x03, 0x09,
-+ 0x03, 0x1B, 0x1E, 0xCE, 0x00, 0x02, 0x03, 0x09, 0x01, 0x50, 0x00, 0x02, 0x03, 0x0B, 0x01, 0xD1,
-+ 0x00, 0x02, 0x03, 0x0C, 0x02, 0x0C, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x0E, 0x00, 0x02, 0x03, 0x11,
-+ 0x1E, 0xDC, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x00, 0x1E, 0xDA, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x01,
-+ 0x1E, 0xE0, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x03, 0x1E, 0xDE, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x09,
-+ 0x1E, 0xE2, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x23, 0x1E, 0xDC, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x40,
-+ 0x1E, 0xDA, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x41, 0x01, 0xA0, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0xD8,
-+ 0x00, 0x03, 0x03, 0x23, 0x03, 0x02, 0x1E, 0xE2, 0x00, 0x03, 0x03, 0x23, 0x03, 0x1B, 0x1E, 0xCC,
-+ 0x00, 0x02, 0x03, 0x23, 0x01, 0xEC, 0x00, 0x03, 0x03, 0x28, 0x03, 0x04, 0x01, 0xEA, 0x00, 0x02,
-+ 0x03, 0x28, 0x1E, 0xDC, 0x00, 0x03, 0x03, 0x40, 0x03, 0x1B, 0x00, 0xD2, 0x00, 0x02, 0x03, 0x40,
-+ 0x1E, 0xDA, 0x00, 0x03, 0x03, 0x41, 0x03, 0x1B, 0x00, 0xD3, 0x00, 0x02, 0x03, 0x41, 0x00, 0x03,
-+ 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x1E, 0x54, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x56, 0x00, 0x02,
-+ 0x03, 0x07, 0x1E, 0x54, 0x00, 0x02, 0x03, 0x41, 0x00, 0x0B, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x26,
-+ 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58,
-+ 0x01, 0x54, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x5C, 0x00, 0x03, 0x03, 0x04, 0x03, 0x23, 0x1E, 0x58,
-+ 0x00, 0x02, 0x03, 0x07, 0x01, 0x58, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x10, 0x00, 0x02, 0x03, 0x0F,
-+ 0x02, 0x12, 0x00, 0x02, 0x03, 0x11, 0x1E, 0x5C, 0x00, 0x03, 0x03, 0x23, 0x03, 0x04, 0x1E, 0x5A,
-+ 0x00, 0x02, 0x03, 0x23, 0x01, 0x56, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x5E, 0x00, 0x02, 0x03, 0x31,
-+ 0x01, 0x54, 0x00, 0x02, 0x03, 0x41, 0x00, 0x0D, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30,
-+ 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x60, 0x00, 0x66,
-+ 0x00, 0x6E, 0x1E, 0x64, 0x00, 0x03, 0x03, 0x01, 0x03, 0x07, 0x01, 0x5A, 0x00, 0x02, 0x03, 0x01,
-+ 0x01, 0x5C, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x68, 0x00, 0x03, 0x03, 0x07, 0x03, 0x23, 0x1E, 0x60,
-+ 0x00, 0x02, 0x03, 0x07, 0x1E, 0x66, 0x00, 0x03, 0x03, 0x0C, 0x03, 0x07, 0x01, 0x60, 0x00, 0x02,
-+ 0x03, 0x0C, 0x1E, 0x68, 0x00, 0x03, 0x03, 0x23, 0x03, 0x07, 0x1E, 0x62, 0x00, 0x02, 0x03, 0x23,
-+ 0x02, 0x18, 0x00, 0x02, 0x03, 0x26, 0x01, 0x5E, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x64, 0x00, 0x03,
-+ 0x03, 0x41, 0x03, 0x07, 0x01, 0x5A, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16,
-+ 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0x6A, 0x00, 0x02, 0x03, 0x07,
-+ 0x01, 0x64, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x6C, 0x00, 0x02, 0x03, 0x23, 0x02, 0x1A, 0x00, 0x02,
-+ 0x03, 0x26, 0x01, 0x62, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x70, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x6E,
- 0x00, 0x02, 0x03, 0x31, 0x00, 0x2D, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x78,
- 0x00, 0x7E, 0x00, 0x86, 0x00, 0x8E, 0x00, 0x96, 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB0,
- 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xC8, 0x00, 0xD0, 0x00, 0xD8, 0x00, 0xE0, 0x00, 0xE6, 0x00, 0xEE,
- 0x00, 0xF4, 0x00, 0xFA, 0x01, 0x00, 0x01, 0x06, 0x01, 0x0C, 0x01, 0x12, 0x01, 0x1A, 0x01, 0x22,
- 0x01, 0x2A, 0x01, 0x32, 0x01, 0x3A, 0x01, 0x42, 0x01, 0x4A, 0x01, 0x50, 0x01, 0x58, 0x01, 0x5E,
- 0x01, 0x64, 0x01, 0x6A, 0x01, 0x70, 0x01, 0x76, 0x01, 0x7E, 0x01, 0x84, 0x01, 0x8C, 0x01, 0x92,
-- 0x1E, 0xEB, 0x00, 0x03, 0x03, 0x00, 0x03, 0x1B, 0x00, 0xF9, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xE9,
-- 0x00, 0x03, 0x03, 0x01, 0x03, 0x1B, 0x00, 0xFA, 0x00, 0x02, 0x03, 0x01, 0x00, 0xFB, 0x00, 0x02,
-- 0x03, 0x02, 0x1E, 0x79, 0x00, 0x03, 0x03, 0x03, 0x03, 0x01, 0x1E, 0xEF, 0x00, 0x03, 0x03, 0x03,
-- 0x03, 0x1B, 0x1E, 0x79, 0x00, 0x03, 0x03, 0x03, 0x03, 0x41, 0x01, 0x69, 0x00, 0x02, 0x03, 0x03,
-- 0x1E, 0x7B, 0x00, 0x03, 0x03, 0x04, 0x03, 0x08, 0x01, 0x6B, 0x00, 0x02, 0x03, 0x04, 0x01, 0x6D,
-- 0x00, 0x02, 0x03, 0x06, 0x01, 0xDC, 0x00, 0x03, 0x03, 0x08, 0x03, 0x00, 0x01, 0xD8, 0x00, 0x03,
-- 0x03, 0x08, 0x03, 0x01, 0x01, 0xD6, 0x00, 0x03, 0x03, 0x08, 0x03, 0x04, 0x01, 0xDA, 0x00, 0x03,
-- 0x03, 0x08, 0x03, 0x0C, 0x01, 0xDC, 0x00, 0x03, 0x03, 0x08, 0x03, 0x40, 0x01, 0xD8, 0x00, 0x03,
-- 0x03, 0x08, 0x03, 0x41, 0x00, 0xFC, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xED, 0x00, 0x03, 0x03, 0x09,
-- 0x03, 0x1B, 0x1E, 0xE7, 0x00, 0x02, 0x03, 0x09, 0x01, 0x6F, 0x00, 0x02, 0x03, 0x0A, 0x01, 0x71,
-- 0x00, 0x02, 0x03, 0x0B, 0x01, 0xD4, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x15, 0x00, 0x02, 0x03, 0x0F,
-- 0x02, 0x17, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xEB, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x00, 0x1E, 0xE9,
-- 0x00, 0x03, 0x03, 0x1B, 0x03, 0x01, 0x1E, 0xEF, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x03, 0x1E, 0xED,
-- 0x00, 0x03, 0x03, 0x1B, 0x03, 0x09, 0x1E, 0xF1, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x23, 0x1E, 0xEB,
-- 0x00, 0x03, 0x03, 0x1B, 0x03, 0x40, 0x1E, 0xE9, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x41, 0x01, 0xB0,
-- 0x00, 0x02, 0x03, 0x1B, 0x1E, 0xF1, 0x00, 0x03, 0x03, 0x23, 0x03, 0x1B, 0x1E, 0xE5, 0x00, 0x02,
-- 0x03, 0x23, 0x1E, 0x73, 0x00, 0x02, 0x03, 0x24, 0x01, 0x73, 0x00, 0x02, 0x03, 0x28, 0x1E, 0x77,
-- 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x75, 0x00, 0x02, 0x03, 0x30, 0x1E, 0xEB, 0x00, 0x03, 0x03, 0x40,
-- 0x03, 0x1B, 0x00, 0xF9, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xE9, 0x00, 0x03, 0x03, 0x41, 0x03, 0x1B,
-- 0x00, 0xFA, 0x00, 0x02, 0x03, 0x41, 0x01, 0xD8, 0x00, 0x02, 0x03, 0x44, 0x00, 0x02, 0x00, 0x06,
-- 0x00, 0x0C, 0x1E, 0x7D, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x7F, 0x00, 0x02, 0x03, 0x23, 0x00, 0x09,
-- 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E,
-- 0x00, 0x44, 0x1E, 0x81, 0x00, 0x02, 0x03, 0x00, 0x1E, 0x83, 0x00, 0x02, 0x03, 0x01, 0x01, 0x75,
-- 0x00, 0x02, 0x03, 0x02, 0x1E, 0x87, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x85, 0x00, 0x02, 0x03, 0x08,
-- 0x1E, 0x98, 0x00, 0x02, 0x03, 0x0A, 0x1E, 0x89, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x81, 0x00, 0x02,
-- 0x03, 0x40, 0x1E, 0x83, 0x00, 0x02, 0x03, 0x41, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x8B,
-- 0x00, 0x02, 0x03, 0x07, 0x1E, 0x8D, 0x00, 0x02, 0x03, 0x08, 0x00, 0x0C, 0x00, 0x1A, 0x00, 0x20,
-- 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50,
-- 0x00, 0x56, 0x00, 0x5C, 0x1E, 0xF3, 0x00, 0x02, 0x03, 0x00, 0x00, 0xFD, 0x00, 0x02, 0x03, 0x01,
-- 0x01, 0x77, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xF9, 0x00, 0x02, 0x03, 0x03, 0x02, 0x33, 0x00, 0x02,
-- 0x03, 0x04, 0x1E, 0x8F, 0x00, 0x02, 0x03, 0x07, 0x00, 0xFF, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xF7,
-- 0x00, 0x02, 0x03, 0x09, 0x1E, 0x99, 0x00, 0x02, 0x03, 0x0A, 0x1E, 0xF5, 0x00, 0x02, 0x03, 0x23,
-- 0x1E, 0xF3, 0x00, 0x02, 0x03, 0x40, 0x00, 0xFD, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10,
-- 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x01, 0x7A, 0x00, 0x02,
-- 0x03, 0x01, 0x1E, 0x91, 0x00, 0x02, 0x03, 0x02, 0x01, 0x7C, 0x00, 0x02, 0x03, 0x07, 0x01, 0x7E,
-- 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x93, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x95, 0x00, 0x02, 0x03, 0x31,
-- 0x01, 0x7A, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22,
-- 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xA6, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xA4, 0x00, 0x02,
-- 0x03, 0x01, 0x1E, 0xAA, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xA8, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xAC,
-- 0x00, 0x02, 0x03, 0x23, 0x1E, 0xA6, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xA4, 0x00, 0x02, 0x03, 0x41,
-- 0x00, 0x01, 0x00, 0x04, 0x01, 0xDE, 0x00, 0x02, 0x03, 0x04, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C,
-- 0x01, 0xFA, 0x00, 0x02, 0x03, 0x01, 0x01, 0xFA, 0x00, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x08,
-- 0x00, 0x0E, 0x00, 0x14, 0x01, 0xFC, 0x00, 0x02, 0x03, 0x01, 0x01, 0xE2, 0x00, 0x02, 0x03, 0x04,
-- 0x01, 0xFC, 0x00, 0x02, 0x03, 0x41, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x08, 0x00, 0x02,
-- 0x03, 0x01, 0x1E, 0x08, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C,
-- 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xC0, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xBE,
-- 0x00, 0x02, 0x03, 0x01, 0x1E, 0xC4, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xC2, 0x00, 0x02, 0x03, 0x09,
-- 0x1E, 0xC6, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xC0, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xBE, 0x00, 0x02,
-- 0x03, 0x41, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x2E, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x2E,
-- 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xDC, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01,
-- 0x00, 0x04, 0x1E, 0xDA, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C,
-- 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xD2, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xD0,
-- 0x00, 0x02, 0x03, 0x01, 0x1E, 0xD6, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xD4, 0x00, 0x02, 0x03, 0x09,
-- 0x1E, 0xD8, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xD2, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xD0, 0x00, 0x02,
-- 0x03, 0x41, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1E, 0x4C,
-- 0x00, 0x02, 0x03, 0x01, 0x02, 0x2C, 0x00, 0x02, 0x03, 0x04, 0x1E, 0x4E, 0x00, 0x02, 0x03, 0x08,
-- 0x1E, 0xE0, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0x4C, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04,
-- 0x02, 0x2A, 0x00, 0x02, 0x03, 0x04, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x01, 0xFE, 0x00, 0x02,
-- 0x03, 0x01, 0x01, 0xFE, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xEA, 0x00, 0x02,
-- 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xE8, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x06, 0x00, 0x0E,
-- 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x01, 0xDB, 0x00, 0x02, 0x03, 0x00,
-- 0x01, 0xD7, 0x00, 0x02, 0x03, 0x01, 0x01, 0xD5, 0x00, 0x02, 0x03, 0x04, 0x01, 0xD9, 0x00, 0x02,
-- 0x03, 0x0C, 0x01, 0xDB, 0x00, 0x02, 0x03, 0x40, 0x01, 0xD7, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07,
-- 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xA7,
-- 0x00, 0x02, 0x03, 0x00, 0x1E, 0xA5, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xAB, 0x00, 0x02, 0x03, 0x03,
-- 0x1E, 0xA9, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xAD, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xA7, 0x00, 0x02,
-- 0x03, 0x40, 0x1E, 0xA5, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x01, 0xDF, 0x00, 0x02,
-- 0x03, 0x04, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x01, 0xFB, 0x00, 0x02, 0x03, 0x01, 0x01, 0xFB,
-- 0x00, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x01, 0xFD, 0x00, 0x02,
-- 0x03, 0x01, 0x01, 0xE3, 0x00, 0x02, 0x03, 0x04, 0x01, 0xFD, 0x00, 0x02, 0x03, 0x41, 0x00, 0x02,
-- 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x09, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x09, 0x00, 0x02, 0x03, 0x41,
-- 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34,
-- 0x1E, 0xC1, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xBF, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xC5, 0x00, 0x02,
-- 0x03, 0x03, 0x1E, 0xC3, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xC7, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xC1,
-- 0x00, 0x02, 0x03, 0x40, 0x1E, 0xBF, 0x00, 0x02, 0x03, 0x41, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C,
-- 0x1E, 0x2F, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x2F, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04,
-- 0x1E, 0xDD, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xDB, 0x00, 0x02, 0x03, 0x1B,
-- 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34,
-- 0x1E, 0xD3, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xD1, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xD7, 0x00, 0x02,
-- 0x03, 0x03, 0x1E, 0xD5, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xD9, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xD3,
-- 0x00, 0x02, 0x03, 0x40, 0x1E, 0xD1, 0x00, 0x02, 0x03, 0x41, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12,
-- 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1E, 0x4D, 0x00, 0x02, 0x03, 0x01, 0x02, 0x2D, 0x00, 0x02,
-- 0x03, 0x04, 0x1E, 0x4F, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xE1, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0x4D,
-- 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x02, 0x2B, 0x00, 0x02, 0x03, 0x04, 0x00, 0x02,
-- 0x00, 0x06, 0x00, 0x0C, 0x01, 0xFF, 0x00, 0x02, 0x03, 0x01, 0x01, 0xFF, 0x00, 0x02, 0x03, 0x41,
-- 0x00, 0x01, 0x00, 0x04, 0x1E, 0xEB, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xE9,
-- 0x00, 0x02, 0x03, 0x1B, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26,
-- 0x00, 0x2C, 0x01, 0xDC, 0x00, 0x02, 0x03, 0x00, 0x01, 0xD8, 0x00, 0x02, 0x03, 0x01, 0x01, 0xD6,
-- 0x00, 0x02, 0x03, 0x04, 0x01, 0xDA, 0x00, 0x02, 0x03, 0x0C, 0x01, 0xDC, 0x00, 0x02, 0x03, 0x40,
-- 0x01, 0xD8, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22,
-- 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xB0, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xAE, 0x00, 0x02,
-- 0x03, 0x01, 0x1E, 0xB4, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xB2, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xB6,
-- 0x00, 0x02, 0x03, 0x23, 0x1E, 0xB0, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xAE, 0x00, 0x02, 0x03, 0x41,
-- 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34,
-- 0x1E, 0xB1, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xAF, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xB5, 0x00, 0x02,
-- 0x03, 0x03, 0x1E, 0xB3, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xB7, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xB1,
-- 0x00, 0x02, 0x03, 0x40, 0x1E, 0xAF, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x08,
-- 0x00, 0x02, 0x03, 0x27, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x09, 0x00, 0x02, 0x03, 0x27, 0x00, 0x04,
-- 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x1E, 0x14, 0x00, 0x02, 0x03, 0x00, 0x1E, 0x16,
-- 0x00, 0x02, 0x03, 0x01, 0x1E, 0x14, 0x00, 0x02, 0x03, 0x40, 0x1E, 0x16, 0x00, 0x02, 0x03, 0x41,
-- 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x1E, 0x15, 0x00, 0x02, 0x03, 0x00,
-- 0x1E, 0x17, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x15, 0x00, 0x02, 0x03, 0x40, 0x1E, 0x17, 0x00, 0x02,
-- 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x1C, 0x00, 0x02, 0x03, 0x27, 0x00, 0x01, 0x00, 0x04,
-- 0x1E, 0x1D, 0x00, 0x02, 0x03, 0x27, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
-- 0x00, 0x24, 0x1E, 0x50, 0x00, 0x02, 0x03, 0x00, 0x1E, 0x52, 0x00, 0x02, 0x03, 0x01, 0x01, 0xEC,
-- 0x00, 0x02, 0x03, 0x28, 0x1E, 0x50, 0x00, 0x02, 0x03, 0x40, 0x1E, 0x52, 0x00, 0x02, 0x03, 0x41,
-- 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1E, 0x51, 0x00, 0x02,
-- 0x03, 0x00, 0x1E, 0x53, 0x00, 0x02, 0x03, 0x01, 0x01, 0xED, 0x00, 0x02, 0x03, 0x28, 0x1E, 0x51,
-- 0x00, 0x02, 0x03, 0x40, 0x1E, 0x53, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x64,
-- 0x00, 0x02, 0x03, 0x07, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x65, 0x00, 0x02, 0x03, 0x07, 0x00, 0x01,
-- 0x00, 0x04, 0x1E, 0x66, 0x00, 0x02, 0x03, 0x07, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x67, 0x00, 0x02,
-- 0x03, 0x07, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x1E, 0x78, 0x00, 0x02, 0x03, 0x01,
-- 0x1E, 0xEE, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0x78, 0x00, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x08,
-- 0x00, 0x0E, 0x00, 0x14, 0x1E, 0x79, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xEF, 0x00, 0x02, 0x03, 0x1B,
-- 0x1E, 0x79, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x7A, 0x00, 0x02, 0x03, 0x08,
-- 0x00, 0x01, 0x00, 0x04, 0x1E, 0x7B, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x9B,
-- 0x00, 0x02, 0x03, 0x07, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28,
-- 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xDC, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xDA, 0x00, 0x02, 0x03, 0x01,
-- 0x1E, 0xE0, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xDE, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xE2, 0x00, 0x02,
-- 0x03, 0x23, 0x1E, 0xDC, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xDA, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07,
-- 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xDD,
-- 0x00, 0x02, 0x03, 0x00, 0x1E, 0xDB, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xE1, 0x00, 0x02, 0x03, 0x03,
-- 0x1E, 0xDF, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xE3, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xDD, 0x00, 0x02,
-- 0x03, 0x40, 0x1E, 0xDB, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C,
-- 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xEA, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xE8,
-- 0x00, 0x02, 0x03, 0x01, 0x1E, 0xEE, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xEC, 0x00, 0x02, 0x03, 0x09,
-- 0x1E, 0xF0, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xEA, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xE8, 0x00, 0x02,
-+ 0x1E, 0xEA, 0x00, 0x03, 0x03, 0x00, 0x03, 0x1B, 0x00, 0xD9, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xE8,
-+ 0x00, 0x03, 0x03, 0x01, 0x03, 0x1B, 0x00, 0xDA, 0x00, 0x02, 0x03, 0x01, 0x00, 0xDB, 0x00, 0x02,
-+ 0x03, 0x02, 0x1E, 0x78, 0x00, 0x03, 0x03, 0x03, 0x03, 0x01, 0x1E, 0xEE, 0x00, 0x03, 0x03, 0x03,
-+ 0x03, 0x1B, 0x1E, 0x78, 0x00, 0x03, 0x03, 0x03, 0x03, 0x41, 0x01, 0x68, 0x00, 0x02, 0x03, 0x03,
-+ 0x1E, 0x7A, 0x00, 0x03, 0x03, 0x04, 0x03, 0x08, 0x01, 0x6A, 0x00, 0x02, 0x03, 0x04, 0x01, 0x6C,
-+ 0x00, 0x02, 0x03, 0x06, 0x01, 0xDB, 0x00, 0x03, 0x03, 0x08, 0x03, 0x00, 0x01, 0xD7, 0x00, 0x03,
-+ 0x03, 0x08, 0x03, 0x01, 0x01, 0xD5, 0x00, 0x03, 0x03, 0x08, 0x03, 0x04, 0x01, 0xD9, 0x00, 0x03,
-+ 0x03, 0x08, 0x03, 0x0C, 0x01, 0xDB, 0x00, 0x03, 0x03, 0x08, 0x03, 0x40, 0x01, 0xD7, 0x00, 0x03,
-+ 0x03, 0x08, 0x03, 0x41, 0x00, 0xDC, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xEC, 0x00, 0x03, 0x03, 0x09,
-+ 0x03, 0x1B, 0x1E, 0xE6, 0x00, 0x02, 0x03, 0x09, 0x01, 0x6E, 0x00, 0x02, 0x03, 0x0A, 0x01, 0x70,
-+ 0x00, 0x02, 0x03, 0x0B, 0x01, 0xD3, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x14, 0x00, 0x02, 0x03, 0x0F,
-+ 0x02, 0x16, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xEA, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x00, 0x1E, 0xE8,
-+ 0x00, 0x03, 0x03, 0x1B, 0x03, 0x01, 0x1E, 0xEE, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x03, 0x1E, 0xEC,
-+ 0x00, 0x03, 0x03, 0x1B, 0x03, 0x09, 0x1E, 0xF0, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x23, 0x1E, 0xEA,
-+ 0x00, 0x03, 0x03, 0x1B, 0x03, 0x40, 0x1E, 0xE8, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x41, 0x01, 0xAF,
-+ 0x00, 0x02, 0x03, 0x1B, 0x1E, 0xF0, 0x00, 0x03, 0x03, 0x23, 0x03, 0x1B, 0x1E, 0xE4, 0x00, 0x02,
-+ 0x03, 0x23, 0x1E, 0x72, 0x00, 0x02, 0x03, 0x24, 0x01, 0x72, 0x00, 0x02, 0x03, 0x28, 0x1E, 0x76,
-+ 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x74, 0x00, 0x02, 0x03, 0x30, 0x1E, 0xEA, 0x00, 0x03, 0x03, 0x40,
-+ 0x03, 0x1B, 0x00, 0xD9, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xE8, 0x00, 0x03, 0x03, 0x41, 0x03, 0x1B,
-+ 0x00, 0xDA, 0x00, 0x02, 0x03, 0x41, 0x01, 0xD7, 0x00, 0x02, 0x03, 0x44, 0x00, 0x02, 0x00, 0x06,
-+ 0x00, 0x0C, 0x1E, 0x7C, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x7E, 0x00, 0x02, 0x03, 0x23, 0x00, 0x08,
-+ 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C,
-+ 0x1E, 0x80, 0x00, 0x02, 0x03, 0x00, 0x1E, 0x82, 0x00, 0x02, 0x03, 0x01, 0x01, 0x74, 0x00, 0x02,
-+ 0x03, 0x02, 0x1E, 0x86, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x84, 0x00, 0x02, 0x03, 0x08, 0x1E, 0x88,
-+ 0x00, 0x02, 0x03, 0x23, 0x1E, 0x80, 0x00, 0x02, 0x03, 0x40, 0x1E, 0x82, 0x00, 0x02, 0x03, 0x41,
-+ 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x8A, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x8C, 0x00, 0x02,
-+ 0x03, 0x08, 0x00, 0x0B, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36,
-+ 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x1E, 0xF2, 0x00, 0x02, 0x03, 0x00,
-+ 0x00, 0xDD, 0x00, 0x02, 0x03, 0x01, 0x01, 0x76, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xF8, 0x00, 0x02,
-+ 0x03, 0x03, 0x02, 0x32, 0x00, 0x02, 0x03, 0x04, 0x1E, 0x8E, 0x00, 0x02, 0x03, 0x07, 0x01, 0x78,
-+ 0x00, 0x02, 0x03, 0x08, 0x1E, 0xF6, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xF4, 0x00, 0x02, 0x03, 0x23,
-+ 0x1E, 0xF2, 0x00, 0x02, 0x03, 0x40, 0x00, 0xDD, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10,
-+ 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x01, 0x79, 0x00, 0x02,
-+ 0x03, 0x01, 0x1E, 0x90, 0x00, 0x02, 0x03, 0x02, 0x01, 0x7B, 0x00, 0x02, 0x03, 0x07, 0x01, 0x7D,
-+ 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x92, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x94, 0x00, 0x02, 0x03, 0x31,
-+ 0x01, 0x79, 0x00, 0x02, 0x03, 0x41, 0x00, 0x26, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62,
-+ 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A, 0x00, 0x82, 0x00, 0x8A, 0x00, 0x92, 0x00, 0x98, 0x00, 0x9E,
-+ 0x00, 0xA4, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBC, 0x00, 0xC4, 0x00, 0xCC, 0x00, 0xD4, 0x00, 0xDC,
-+ 0x00, 0xE2, 0x00, 0xEA, 0x00, 0xF0, 0x00, 0xF8, 0x00, 0xFE, 0x01, 0x04, 0x01, 0x0C, 0x01, 0x14,
-+ 0x01, 0x1A, 0x01, 0x20, 0x01, 0x26, 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x42, 0x01, 0x48,
-+ 0x01, 0x4E, 0x01, 0x54, 0x00, 0xE0, 0x00, 0x02, 0x03, 0x00, 0x00, 0xE1, 0x00, 0x02, 0x03, 0x01,
-+ 0x1E, 0xA7, 0x00, 0x03, 0x03, 0x02, 0x03, 0x00, 0x1E, 0xA5, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01,
-+ 0x1E, 0xAB, 0x00, 0x03, 0x03, 0x02, 0x03, 0x03, 0x1E, 0xA9, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09,
-+ 0x1E, 0xAD, 0x00, 0x03, 0x03, 0x02, 0x03, 0x23, 0x1E, 0xA7, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40,
-+ 0x1E, 0xA5, 0x00, 0x03, 0x03, 0x02, 0x03, 0x41, 0x00, 0xE2, 0x00, 0x02, 0x03, 0x02, 0x00, 0xE3,
-+ 0x00, 0x02, 0x03, 0x03, 0x01, 0x01, 0x00, 0x02, 0x03, 0x04, 0x1E, 0xB1, 0x00, 0x03, 0x03, 0x06,
-+ 0x03, 0x00, 0x1E, 0xAF, 0x00, 0x03, 0x03, 0x06, 0x03, 0x01, 0x1E, 0xB5, 0x00, 0x03, 0x03, 0x06,
-+ 0x03, 0x03, 0x1E, 0xB3, 0x00, 0x03, 0x03, 0x06, 0x03, 0x09, 0x1E, 0xB7, 0x00, 0x03, 0x03, 0x06,
-+ 0x03, 0x23, 0x1E, 0xB1, 0x00, 0x03, 0x03, 0x06, 0x03, 0x40, 0x1E, 0xAF, 0x00, 0x03, 0x03, 0x06,
-+ 0x03, 0x41, 0x01, 0x03, 0x00, 0x02, 0x03, 0x06, 0x01, 0xE1, 0x00, 0x03, 0x03, 0x07, 0x03, 0x04,
-+ 0x02, 0x27, 0x00, 0x02, 0x03, 0x07, 0x01, 0xDF, 0x00, 0x03, 0x03, 0x08, 0x03, 0x04, 0x00, 0xE4,
-+ 0x00, 0x02, 0x03, 0x08, 0x1E, 0xA3, 0x00, 0x02, 0x03, 0x09, 0x01, 0xFB, 0x00, 0x03, 0x03, 0x0A,
-+ 0x03, 0x01, 0x01, 0xFB, 0x00, 0x03, 0x03, 0x0A, 0x03, 0x41, 0x00, 0xE5, 0x00, 0x02, 0x03, 0x0A,
-+ 0x01, 0xCE, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x01, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x03, 0x00, 0x02,
-+ 0x03, 0x11, 0x1E, 0xAD, 0x00, 0x03, 0x03, 0x23, 0x03, 0x02, 0x1E, 0xB7, 0x00, 0x03, 0x03, 0x23,
-+ 0x03, 0x06, 0x1E, 0xA1, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x01, 0x00, 0x02, 0x03, 0x25, 0x01, 0x05,
-+ 0x00, 0x02, 0x03, 0x28, 0x00, 0xE0, 0x00, 0x02, 0x03, 0x40, 0x00, 0xE1, 0x00, 0x02, 0x03, 0x41,
-+ 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x1E, 0x03, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x05,
-+ 0x00, 0x02, 0x03, 0x23, 0x1E, 0x07, 0x00, 0x02, 0x03, 0x31, 0x00, 0x0A, 0x00, 0x16, 0x00, 0x1E,
-+ 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54,
-+ 0x1E, 0x09, 0x00, 0x03, 0x03, 0x01, 0x03, 0x27, 0x01, 0x07, 0x00, 0x02, 0x03, 0x01, 0x01, 0x09,
-+ 0x00, 0x02, 0x03, 0x02, 0x01, 0x0B, 0x00, 0x02, 0x03, 0x07, 0x01, 0x0D, 0x00, 0x02, 0x03, 0x0C,
-+ 0x1E, 0x09, 0x00, 0x03, 0x03, 0x27, 0x03, 0x01, 0x1E, 0x09, 0x00, 0x03, 0x03, 0x27, 0x03, 0x41,
-+ 0x00, 0xE7, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x09, 0x00, 0x03, 0x03, 0x41, 0x03, 0x27, 0x01, 0x07,
-+ 0x00, 0x02, 0x03, 0x41, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26,
-+ 0x00, 0x2C, 0x1E, 0x0B, 0x00, 0x02, 0x03, 0x07, 0x01, 0x0F, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x0D,
-+ 0x00, 0x02, 0x03, 0x23, 0x1E, 0x11, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x13, 0x00, 0x02, 0x03, 0x2D,
-+ 0x1E, 0x0F, 0x00, 0x02, 0x03, 0x31, 0x00, 0x21, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x58,
-+ 0x00, 0x60, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x8E, 0x00, 0x94,
-+ 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBA, 0x00, 0xC2, 0x00, 0xC8, 0x00, 0xCE,
-+ 0x00, 0xD4, 0x00, 0xDA, 0x00, 0xE0, 0x00, 0xE6, 0x00, 0xEC, 0x00, 0xF4, 0x00, 0xFA, 0x01, 0x02,
-+ 0x01, 0x08, 0x01, 0x0E, 0x01, 0x14, 0x01, 0x1A, 0x01, 0x20, 0x00, 0xE8, 0x00, 0x02, 0x03, 0x00,
-+ 0x00, 0xE9, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xC1, 0x00, 0x03, 0x03, 0x02, 0x03, 0x00, 0x1E, 0xBF,
-+ 0x00, 0x03, 0x03, 0x02, 0x03, 0x01, 0x1E, 0xC5, 0x00, 0x03, 0x03, 0x02, 0x03, 0x03, 0x1E, 0xC3,
-+ 0x00, 0x03, 0x03, 0x02, 0x03, 0x09, 0x1E, 0xC7, 0x00, 0x03, 0x03, 0x02, 0x03, 0x23, 0x1E, 0xC1,
-+ 0x00, 0x03, 0x03, 0x02, 0x03, 0x40, 0x1E, 0xBF, 0x00, 0x03, 0x03, 0x02, 0x03, 0x41, 0x00, 0xEA,
-+ 0x00, 0x02, 0x03, 0x02, 0x1E, 0xBD, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x15, 0x00, 0x03, 0x03, 0x04,
-+ 0x03, 0x00, 0x1E, 0x17, 0x00, 0x03, 0x03, 0x04, 0x03, 0x01, 0x1E, 0x15, 0x00, 0x03, 0x03, 0x04,
-+ 0x03, 0x40, 0x1E, 0x17, 0x00, 0x03, 0x03, 0x04, 0x03, 0x41, 0x01, 0x13, 0x00, 0x02, 0x03, 0x04,
-+ 0x1E, 0x1D, 0x00, 0x03, 0x03, 0x06, 0x03, 0x27, 0x01, 0x15, 0x00, 0x02, 0x03, 0x06, 0x01, 0x17,
-+ 0x00, 0x02, 0x03, 0x07, 0x00, 0xEB, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xBB, 0x00, 0x02, 0x03, 0x09,
-+ 0x01, 0x1B, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x05, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x07, 0x00, 0x02,
-+ 0x03, 0x11, 0x1E, 0xC7, 0x00, 0x03, 0x03, 0x23, 0x03, 0x02, 0x1E, 0xB9, 0x00, 0x02, 0x03, 0x23,
-+ 0x1E, 0x1D, 0x00, 0x03, 0x03, 0x27, 0x03, 0x06, 0x02, 0x29, 0x00, 0x02, 0x03, 0x27, 0x01, 0x19,
-+ 0x00, 0x02, 0x03, 0x28, 0x1E, 0x19, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x1B, 0x00, 0x02, 0x03, 0x30,
-+ 0x00, 0xE8, 0x00, 0x02, 0x03, 0x40, 0x00, 0xE9, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04,
-+ 0x1E, 0x1F, 0x00, 0x02, 0x03, 0x07, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24,
-+ 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x01, 0xF5, 0x00, 0x02, 0x03, 0x01, 0x01, 0x1D,
-+ 0x00, 0x02, 0x03, 0x02, 0x1E, 0x21, 0x00, 0x02, 0x03, 0x04, 0x01, 0x1F, 0x00, 0x02, 0x03, 0x06,
-+ 0x01, 0x21, 0x00, 0x02, 0x03, 0x07, 0x01, 0xE7, 0x00, 0x02, 0x03, 0x0C, 0x01, 0x23, 0x00, 0x02,
-+ 0x03, 0x27, 0x01, 0xF5, 0x00, 0x02, 0x03, 0x41, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
-+ 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x01, 0x25, 0x00, 0x02, 0x03, 0x02,
-+ 0x1E, 0x23, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x27, 0x00, 0x02, 0x03, 0x08, 0x02, 0x1F, 0x00, 0x02,
-+ 0x03, 0x0C, 0x1E, 0x25, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x29, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x2B,
-+ 0x00, 0x02, 0x03, 0x2E, 0x1E, 0x96, 0x00, 0x02, 0x03, 0x31, 0x00, 0x13, 0x00, 0x28, 0x00, 0x2E,
-+ 0x00, 0x34, 0x00, 0x3A, 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x62,
-+ 0x00, 0x68, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0x00, 0x92,
-+ 0x00, 0x98, 0x00, 0xEC, 0x00, 0x02, 0x03, 0x00, 0x00, 0xED, 0x00, 0x02, 0x03, 0x01, 0x00, 0xEE,
-+ 0x00, 0x02, 0x03, 0x02, 0x01, 0x29, 0x00, 0x02, 0x03, 0x03, 0x01, 0x2B, 0x00, 0x02, 0x03, 0x04,
-+ 0x01, 0x2D, 0x00, 0x02, 0x03, 0x06, 0x1E, 0x2F, 0x00, 0x03, 0x03, 0x08, 0x03, 0x01, 0x1E, 0x2F,
-+ 0x00, 0x03, 0x03, 0x08, 0x03, 0x41, 0x00, 0xEF, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xC9, 0x00, 0x02,
-+ 0x03, 0x09, 0x01, 0xD0, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x09, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x0B,
-+ 0x00, 0x02, 0x03, 0x11, 0x1E, 0xCB, 0x00, 0x02, 0x03, 0x23, 0x01, 0x2F, 0x00, 0x02, 0x03, 0x28,
-+ 0x1E, 0x2D, 0x00, 0x02, 0x03, 0x30, 0x00, 0xEC, 0x00, 0x02, 0x03, 0x40, 0x00, 0xED, 0x00, 0x02,
-+ 0x03, 0x41, 0x1E, 0x2F, 0x00, 0x02, 0x03, 0x44, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x01, 0x35,
-+ 0x00, 0x02, 0x03, 0x02, 0x01, 0xF0, 0x00, 0x02, 0x03, 0x0C, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14,
-+ 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x1E, 0x31, 0x00, 0x02, 0x03, 0x01, 0x01, 0xE9,
-+ 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x33, 0x00, 0x02, 0x03, 0x23, 0x01, 0x37, 0x00, 0x02, 0x03, 0x27,
-+ 0x1E, 0x35, 0x00, 0x02, 0x03, 0x31, 0x1E, 0x31, 0x00, 0x02, 0x03, 0x41, 0x00, 0x09, 0x00, 0x14,
-+ 0x00, 0x1A, 0x00, 0x22, 0x00, 0x28, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48,
-+ 0x01, 0x3A, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x39, 0x00, 0x03, 0x03, 0x04, 0x03, 0x23, 0x01, 0x3E,
-+ 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x39, 0x00, 0x03, 0x03, 0x23, 0x03, 0x04, 0x1E, 0x37, 0x00, 0x02,
-+ 0x03, 0x23, 0x01, 0x3C, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x3D, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x3B,
-+ 0x00, 0x02, 0x03, 0x31, 0x01, 0x3A, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10,
-+ 0x00, 0x16, 0x00, 0x1C, 0x1E, 0x3F, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x41, 0x00, 0x02, 0x03, 0x07,
-+ 0x1E, 0x43, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x3F, 0x00, 0x02, 0x03, 0x41, 0x00, 0x0B, 0x00, 0x18,
-+ 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48,
-+ 0x00, 0x4E, 0x00, 0x54, 0x01, 0xF9, 0x00, 0x02, 0x03, 0x00, 0x01, 0x44, 0x00, 0x02, 0x03, 0x01,
-+ 0x00, 0xF1, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x45, 0x00, 0x02, 0x03, 0x07, 0x01, 0x48, 0x00, 0x02,
-+ 0x03, 0x0C, 0x1E, 0x47, 0x00, 0x02, 0x03, 0x23, 0x01, 0x46, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x4B,
-+ 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x49, 0x00, 0x02, 0x03, 0x31, 0x01, 0xF9, 0x00, 0x02, 0x03, 0x40,
-+ 0x01, 0x44, 0x00, 0x02, 0x03, 0x41, 0x00, 0x34, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x78, 0x00, 0x80,
-+ 0x00, 0x86, 0x00, 0x8E, 0x00, 0x96, 0x00, 0x9E, 0x00, 0xA6, 0x00, 0xAE, 0x00, 0xB6, 0x00, 0xBE,
-+ 0x00, 0xC4, 0x00, 0xCC, 0x00, 0xD4, 0x00, 0xDC, 0x00, 0xE4, 0x00, 0xEC, 0x00, 0xF2, 0x00, 0xFA,
-+ 0x01, 0x02, 0x01, 0x0A, 0x01, 0x12, 0x01, 0x1A, 0x01, 0x20, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x34,
-+ 0x01, 0x3C, 0x01, 0x42, 0x01, 0x4A, 0x01, 0x50, 0x01, 0x56, 0x01, 0x5C, 0x01, 0x62, 0x01, 0x68,
-+ 0x01, 0x70, 0x01, 0x78, 0x01, 0x80, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA0, 0x01, 0xA6,
-+ 0x01, 0xAE, 0x01, 0xB6, 0x01, 0xBC, 0x01, 0xC4, 0x01, 0xCA, 0x01, 0xD2, 0x01, 0xD8, 0x01, 0xE0,
-+ 0x1E, 0xDD, 0x00, 0x03, 0x03, 0x00, 0x03, 0x1B, 0x00, 0xF2, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xDB,
-+ 0x00, 0x03, 0x03, 0x01, 0x03, 0x1B, 0x00, 0xF3, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xD3, 0x00, 0x03,
-+ 0x03, 0x02, 0x03, 0x00, 0x1E, 0xD1, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01, 0x1E, 0xD7, 0x00, 0x03,
-+ 0x03, 0x02, 0x03, 0x03, 0x1E, 0xD5, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09, 0x1E, 0xD9, 0x00, 0x03,
-+ 0x03, 0x02, 0x03, 0x23, 0x1E, 0xD3, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40, 0x1E, 0xD1, 0x00, 0x03,
-+ 0x03, 0x02, 0x03, 0x41, 0x00, 0xF4, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x4D, 0x00, 0x03, 0x03, 0x03,
-+ 0x03, 0x01, 0x02, 0x2D, 0x00, 0x03, 0x03, 0x03, 0x03, 0x04, 0x1E, 0x4F, 0x00, 0x03, 0x03, 0x03,
-+ 0x03, 0x08, 0x1E, 0xE1, 0x00, 0x03, 0x03, 0x03, 0x03, 0x1B, 0x1E, 0x4D, 0x00, 0x03, 0x03, 0x03,
-+ 0x03, 0x41, 0x00, 0xF5, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x51, 0x00, 0x03, 0x03, 0x04, 0x03, 0x00,
-+ 0x1E, 0x53, 0x00, 0x03, 0x03, 0x04, 0x03, 0x01, 0x01, 0xED, 0x00, 0x03, 0x03, 0x04, 0x03, 0x28,
-+ 0x1E, 0x51, 0x00, 0x03, 0x03, 0x04, 0x03, 0x40, 0x1E, 0x53, 0x00, 0x03, 0x03, 0x04, 0x03, 0x41,
-+ 0x01, 0x4D, 0x00, 0x02, 0x03, 0x04, 0x01, 0x4F, 0x00, 0x02, 0x03, 0x06, 0x02, 0x31, 0x00, 0x03,
-+ 0x03, 0x07, 0x03, 0x04, 0x02, 0x2F, 0x00, 0x02, 0x03, 0x07, 0x02, 0x2B, 0x00, 0x03, 0x03, 0x08,
-+ 0x03, 0x04, 0x00, 0xF6, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xDF, 0x00, 0x03, 0x03, 0x09, 0x03, 0x1B,
-+ 0x1E, 0xCF, 0x00, 0x02, 0x03, 0x09, 0x01, 0x51, 0x00, 0x02, 0x03, 0x0B, 0x01, 0xD2, 0x00, 0x02,
-+ 0x03, 0x0C, 0x02, 0x0D, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x0F, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xDD,
-+ 0x00, 0x03, 0x03, 0x1B, 0x03, 0x00, 0x1E, 0xDB, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x01, 0x1E, 0xE1,
-+ 0x00, 0x03, 0x03, 0x1B, 0x03, 0x03, 0x1E, 0xDF, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x09, 0x1E, 0xE3,
-+ 0x00, 0x03, 0x03, 0x1B, 0x03, 0x23, 0x1E, 0xDD, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x40, 0x1E, 0xDB,
-+ 0x00, 0x03, 0x03, 0x1B, 0x03, 0x41, 0x01, 0xA1, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0xD9, 0x00, 0x03,
-+ 0x03, 0x23, 0x03, 0x02, 0x1E, 0xE3, 0x00, 0x03, 0x03, 0x23, 0x03, 0x1B, 0x1E, 0xCD, 0x00, 0x02,
-+ 0x03, 0x23, 0x01, 0xED, 0x00, 0x03, 0x03, 0x28, 0x03, 0x04, 0x01, 0xEB, 0x00, 0x02, 0x03, 0x28,
-+ 0x1E, 0xDD, 0x00, 0x03, 0x03, 0x40, 0x03, 0x1B, 0x00, 0xF2, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xDB,
-+ 0x00, 0x03, 0x03, 0x41, 0x03, 0x1B, 0x00, 0xF3, 0x00, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x08,
-+ 0x00, 0x0E, 0x00, 0x14, 0x1E, 0x55, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x57, 0x00, 0x02, 0x03, 0x07,
-+ 0x1E, 0x55, 0x00, 0x02, 0x03, 0x41, 0x00, 0x0B, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x26, 0x00, 0x2C,
-+ 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x01, 0x55,
-+ 0x00, 0x02, 0x03, 0x01, 0x1E, 0x5D, 0x00, 0x03, 0x03, 0x04, 0x03, 0x23, 0x1E, 0x59, 0x00, 0x02,
-+ 0x03, 0x07, 0x01, 0x59, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x11, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x13,
-+ 0x00, 0x02, 0x03, 0x11, 0x1E, 0x5D, 0x00, 0x03, 0x03, 0x23, 0x03, 0x04, 0x1E, 0x5B, 0x00, 0x02,
-+ 0x03, 0x23, 0x01, 0x57, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x5F, 0x00, 0x02, 0x03, 0x31, 0x01, 0x55,
-+ 0x00, 0x02, 0x03, 0x41, 0x00, 0x0D, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38,
-+ 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x60, 0x00, 0x66, 0x00, 0x6E,
-+ 0x1E, 0x65, 0x00, 0x03, 0x03, 0x01, 0x03, 0x07, 0x01, 0x5B, 0x00, 0x02, 0x03, 0x01, 0x01, 0x5D,
-+ 0x00, 0x02, 0x03, 0x02, 0x1E, 0x69, 0x00, 0x03, 0x03, 0x07, 0x03, 0x23, 0x1E, 0x61, 0x00, 0x02,
-+ 0x03, 0x07, 0x1E, 0x67, 0x00, 0x03, 0x03, 0x0C, 0x03, 0x07, 0x01, 0x61, 0x00, 0x02, 0x03, 0x0C,
-+ 0x1E, 0x69, 0x00, 0x03, 0x03, 0x23, 0x03, 0x07, 0x1E, 0x63, 0x00, 0x02, 0x03, 0x23, 0x02, 0x19,
-+ 0x00, 0x02, 0x03, 0x26, 0x01, 0x5F, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x65, 0x00, 0x03, 0x03, 0x41,
-+ 0x03, 0x07, 0x01, 0x5B, 0x00, 0x02, 0x03, 0x41, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
-+ 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x1E, 0x6B, 0x00, 0x02, 0x03, 0x07,
-+ 0x1E, 0x97, 0x00, 0x02, 0x03, 0x08, 0x01, 0x65, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x6D, 0x00, 0x02,
-+ 0x03, 0x23, 0x02, 0x1B, 0x00, 0x02, 0x03, 0x26, 0x01, 0x63, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x71,
-+ 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x6F, 0x00, 0x02, 0x03, 0x31, 0x00, 0x2D, 0x00, 0x5C, 0x00, 0x64,
-+ 0x00, 0x6A, 0x00, 0x72, 0x00, 0x78, 0x00, 0x7E, 0x00, 0x86, 0x00, 0x8E, 0x00, 0x96, 0x00, 0x9C,
-+ 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xC8, 0x00, 0xD0, 0x00, 0xD8,
-+ 0x00, 0xE0, 0x00, 0xE6, 0x00, 0xEE, 0x00, 0xF4, 0x00, 0xFA, 0x01, 0x00, 0x01, 0x06, 0x01, 0x0C,
-+ 0x01, 0x12, 0x01, 0x1A, 0x01, 0x22, 0x01, 0x2A, 0x01, 0x32, 0x01, 0x3A, 0x01, 0x42, 0x01, 0x4A,
-+ 0x01, 0x50, 0x01, 0x58, 0x01, 0x5E, 0x01, 0x64, 0x01, 0x6A, 0x01, 0x70, 0x01, 0x76, 0x01, 0x7E,
-+ 0x01, 0x84, 0x01, 0x8C, 0x01, 0x92, 0x1E, 0xEB, 0x00, 0x03, 0x03, 0x00, 0x03, 0x1B, 0x00, 0xF9,
-+ 0x00, 0x02, 0x03, 0x00, 0x1E, 0xE9, 0x00, 0x03, 0x03, 0x01, 0x03, 0x1B, 0x00, 0xFA, 0x00, 0x02,
-+ 0x03, 0x01, 0x00, 0xFB, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x79, 0x00, 0x03, 0x03, 0x03, 0x03, 0x01,
-+ 0x1E, 0xEF, 0x00, 0x03, 0x03, 0x03, 0x03, 0x1B, 0x1E, 0x79, 0x00, 0x03, 0x03, 0x03, 0x03, 0x41,
-+ 0x01, 0x69, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x7B, 0x00, 0x03, 0x03, 0x04, 0x03, 0x08, 0x01, 0x6B,
-+ 0x00, 0x02, 0x03, 0x04, 0x01, 0x6D, 0x00, 0x02, 0x03, 0x06, 0x01, 0xDC, 0x00, 0x03, 0x03, 0x08,
-+ 0x03, 0x00, 0x01, 0xD8, 0x00, 0x03, 0x03, 0x08, 0x03, 0x01, 0x01, 0xD6, 0x00, 0x03, 0x03, 0x08,
-+ 0x03, 0x04, 0x01, 0xDA, 0x00, 0x03, 0x03, 0x08, 0x03, 0x0C, 0x01, 0xDC, 0x00, 0x03, 0x03, 0x08,
-+ 0x03, 0x40, 0x01, 0xD8, 0x00, 0x03, 0x03, 0x08, 0x03, 0x41, 0x00, 0xFC, 0x00, 0x02, 0x03, 0x08,
-+ 0x1E, 0xED, 0x00, 0x03, 0x03, 0x09, 0x03, 0x1B, 0x1E, 0xE7, 0x00, 0x02, 0x03, 0x09, 0x01, 0x6F,
-+ 0x00, 0x02, 0x03, 0x0A, 0x01, 0x71, 0x00, 0x02, 0x03, 0x0B, 0x01, 0xD4, 0x00, 0x02, 0x03, 0x0C,
-+ 0x02, 0x15, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x17, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xEB, 0x00, 0x03,
-+ 0x03, 0x1B, 0x03, 0x00, 0x1E, 0xE9, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x01, 0x1E, 0xEF, 0x00, 0x03,
-+ 0x03, 0x1B, 0x03, 0x03, 0x1E, 0xED, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x09, 0x1E, 0xF1, 0x00, 0x03,
-+ 0x03, 0x1B, 0x03, 0x23, 0x1E, 0xEB, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x40, 0x1E, 0xE9, 0x00, 0x03,
-+ 0x03, 0x1B, 0x03, 0x41, 0x01, 0xB0, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0xF1, 0x00, 0x03, 0x03, 0x23,
-+ 0x03, 0x1B, 0x1E, 0xE5, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x73, 0x00, 0x02, 0x03, 0x24, 0x01, 0x73,
-+ 0x00, 0x02, 0x03, 0x28, 0x1E, 0x77, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x75, 0x00, 0x02, 0x03, 0x30,
-+ 0x1E, 0xEB, 0x00, 0x03, 0x03, 0x40, 0x03, 0x1B, 0x00, 0xF9, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xE9,
-+ 0x00, 0x03, 0x03, 0x41, 0x03, 0x1B, 0x00, 0xFA, 0x00, 0x02, 0x03, 0x41, 0x01, 0xD8, 0x00, 0x02,
-+ 0x03, 0x44, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x7D, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x7F,
-+ 0x00, 0x02, 0x03, 0x23, 0x00, 0x09, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C,
-+ 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x44, 0x1E, 0x81, 0x00, 0x02, 0x03, 0x00, 0x1E, 0x83,
-+ 0x00, 0x02, 0x03, 0x01, 0x01, 0x75, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x87, 0x00, 0x02, 0x03, 0x07,
-+ 0x1E, 0x85, 0x00, 0x02, 0x03, 0x08, 0x1E, 0x98, 0x00, 0x02, 0x03, 0x0A, 0x1E, 0x89, 0x00, 0x02,
-+ 0x03, 0x23, 0x1E, 0x81, 0x00, 0x02, 0x03, 0x40, 0x1E, 0x83, 0x00, 0x02, 0x03, 0x41, 0x00, 0x02,
-+ 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x8B, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x8D, 0x00, 0x02, 0x03, 0x08,
-+ 0x00, 0x0C, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E,
-+ 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x56, 0x00, 0x5C, 0x1E, 0xF3, 0x00, 0x02, 0x03, 0x00,
-+ 0x00, 0xFD, 0x00, 0x02, 0x03, 0x01, 0x01, 0x77, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xF9, 0x00, 0x02,
-+ 0x03, 0x03, 0x02, 0x33, 0x00, 0x02, 0x03, 0x04, 0x1E, 0x8F, 0x00, 0x02, 0x03, 0x07, 0x00, 0xFF,
-+ 0x00, 0x02, 0x03, 0x08, 0x1E, 0xF7, 0x00, 0x02, 0x03, 0x09, 0x1E, 0x99, 0x00, 0x02, 0x03, 0x0A,
-+ 0x1E, 0xF5, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xF3, 0x00, 0x02, 0x03, 0x40, 0x00, 0xFD, 0x00, 0x02,
- 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E,
-- 0x00, 0x34, 0x1E, 0xEB, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xE9, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xEF,
-- 0x00, 0x02, 0x03, 0x03, 0x1E, 0xED, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xF1, 0x00, 0x02, 0x03, 0x23,
-- 0x1E, 0xEB, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xE9, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04,
-- 0x01, 0xEE, 0x00, 0x02, 0x03, 0x0C, 0x00, 0x01, 0x00, 0x04, 0x01, 0xEC, 0x00, 0x02, 0x03, 0x04,
-- 0x00, 0x01, 0x00, 0x04, 0x01, 0xED, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x01, 0xE0,
-- 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x01, 0xE1, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01,
-- 0x00, 0x04, 0x1E, 0x1C, 0x00, 0x02, 0x03, 0x06, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x1D, 0x00, 0x02,
-- 0x03, 0x06, 0x00, 0x01, 0x00, 0x04, 0x02, 0x30, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04,
-- 0x02, 0x31, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x01, 0xEF, 0x00, 0x02, 0x03, 0x0C,
-- 0x00, 0x01, 0x00, 0x04, 0x1E, 0x38, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x39,
-- 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x5C, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01,
-- 0x00, 0x04, 0x1E, 0x5D, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x68, 0x00, 0x02,
-- 0x03, 0x23, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x69, 0x00, 0x02, 0x03, 0x23, 0x00, 0x01, 0x00, 0x04,
-- 0x1E, 0x68, 0x00, 0x02, 0x03, 0x07, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x69, 0x00, 0x02, 0x03, 0x07,
-- 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0xAC, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xB6, 0x00, 0x02,
-- 0x03, 0x06, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0xAD, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xB7,
-- 0x00, 0x02, 0x03, 0x06, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xC6, 0x00, 0x02, 0x03, 0x02, 0x00, 0x01,
-- 0x00, 0x04, 0x1E, 0xC7, 0x00, 0x02, 0x03, 0x02, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0xD8,
-- 0x00, 0x02, 0x03, 0x02, 0x1E, 0xE2, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C,
-- 0x1E, 0xD9, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xE3, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04,
-- 0x1E, 0xDE, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xDF, 0x00, 0x02, 0x03, 0x1B,
-- 0x00, 0x01, 0x00, 0x04, 0x1E, 0xF0, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xF1,
-- 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xEC, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01,
-- 0x00, 0x04, 0x1E, 0xED, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A,
-- 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x1E, 0x30, 0x00, 0x02, 0x03, 0x01, 0x01, 0xE8, 0x00, 0x02,
-- 0x03, 0x0C, 0x1E, 0x32, 0x00, 0x02, 0x03, 0x23, 0x01, 0x36, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x34,
-- 0x00, 0x02, 0x03, 0x31, 0x1E, 0x30, 0x00, 0x02, 0x03, 0x41, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C,
-- 0x01, 0xFA, 0x00, 0x02, 0x03, 0x01, 0x01, 0xFA, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x89,
-- 0x00, 0x41, 0x00, 0x42, 0x00, 0x43, 0x00, 0x44, 0x00, 0x45, 0x00, 0x46, 0x00, 0x47, 0x00, 0x48,
-- 0x00, 0x49, 0x00, 0x4A, 0x00, 0x4B, 0x00, 0x4C, 0x00, 0x4D, 0x00, 0x4E, 0x00, 0x4F, 0x00, 0x50,
-- 0x00, 0x52, 0x00, 0x53, 0x00, 0x54, 0x00, 0x55, 0x00, 0x56, 0x00, 0x57, 0x00, 0x58, 0x00, 0x59,
-- 0x00, 0x5A, 0x00, 0x61, 0x00, 0x62, 0x00, 0x63, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x67,
-- 0x00, 0x68, 0x00, 0x69, 0x00, 0x6A, 0x00, 0x6B, 0x00, 0x6C, 0x00, 0x6D, 0x00, 0x6E, 0x00, 0x6F,
-- 0x00, 0x70, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, 0x00, 0x75, 0x00, 0x76, 0x00, 0x77, 0x00, 0x78,
-- 0x00, 0x79, 0x00, 0x7A, 0x00, 0xC2, 0x00, 0xC4, 0x00, 0xC5, 0x00, 0xC6, 0x00, 0xC7, 0x00, 0xCA,
-- 0x00, 0xCF, 0x00, 0xD2, 0x00, 0xD3, 0x00, 0xD4, 0x00, 0xD5, 0x00, 0xD6, 0x00, 0xD8, 0x00, 0xD9,
-- 0x00, 0xDA, 0x00, 0xDC, 0x00, 0xE2, 0x00, 0xE4, 0x00, 0xE5, 0x00, 0xE6, 0x00, 0xE7, 0x00, 0xEA,
-- 0x00, 0xEF, 0x00, 0xF2, 0x00, 0xF3, 0x00, 0xF4, 0x00, 0xF5, 0x00, 0xF6, 0x00, 0xF8, 0x00, 0xF9,
-- 0x00, 0xFA, 0x00, 0xFC, 0x01, 0x02, 0x01, 0x03, 0x01, 0x06, 0x01, 0x07, 0x01, 0x12, 0x01, 0x13,
-- 0x01, 0x14, 0x01, 0x15, 0x01, 0x4C, 0x01, 0x4D, 0x01, 0x5A, 0x01, 0x5B, 0x01, 0x60, 0x01, 0x61,
-- 0x01, 0x68, 0x01, 0x69, 0x01, 0x6A, 0x01, 0x6B, 0x01, 0x7F, 0x01, 0xA0, 0x01, 0xA1, 0x01, 0xAF,
-- 0x01, 0xB0, 0x01, 0xB7, 0x01, 0xEA, 0x01, 0xEB, 0x02, 0x26, 0x02, 0x27, 0x02, 0x28, 0x02, 0x29,
-- 0x02, 0x2E, 0x02, 0x2F, 0x02, 0x92, 0x1E, 0x36, 0x1E, 0x37, 0x1E, 0x5A, 0x1E, 0x5B, 0x1E, 0x60,
-- 0x1E, 0x61, 0x1E, 0x62, 0x1E, 0x63, 0x1E, 0xA0, 0x1E, 0xA1, 0x1E, 0xB8, 0x1E, 0xB9, 0x1E, 0xCC,
-- 0x1E, 0xCD, 0x1E, 0xCE, 0x1E, 0xCF, 0x1E, 0xE4, 0x1E, 0xE5, 0x1E, 0xE6, 0x1E, 0xE7, 0x21, 0x2A,
-- 0x21, 0x2B, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x14, 0x13, 0x92, 0x1A, 0xA8, 0x1E, 0x46,
-- 0x21, 0xB8, 0x22, 0x76, 0x23, 0x04, 0x00, 0x01, 0x0F, 0x96, 0x01, 0xF2, 0x03, 0xEA, 0x03, 0xF0,
-- 0x03, 0xF6, 0x03, 0xFC, 0x04, 0x02, 0x04, 0x08, 0x04, 0x0E, 0x04, 0x14, 0x04, 0x1A, 0x04, 0x20,
-- 0x04, 0x26, 0x04, 0x2C, 0x04, 0x32, 0x04, 0x38, 0x04, 0x3E, 0x04, 0x44, 0x04, 0x4A, 0x04, 0x50,
-- 0x04, 0x56, 0x04, 0x5C, 0x04, 0x62, 0x04, 0x68, 0x04, 0x6E, 0x04, 0x74, 0x04, 0x7A, 0x04, 0x80,
-- 0x04, 0x86, 0x04, 0x8C, 0x04, 0x92, 0x04, 0x98, 0x04, 0x9E, 0x04, 0xA4, 0x04, 0xAA, 0x04, 0xB0,
-- 0x04, 0xB6, 0x04, 0xBC, 0x04, 0xC2, 0x04, 0xC8, 0x04, 0xCE, 0x04, 0xD4, 0x04, 0xDA, 0x04, 0xE0,
-- 0x04, 0xE6, 0x04, 0xEC, 0x04, 0xF2, 0x04, 0xF8, 0x04, 0xFE, 0x05, 0x04, 0x05, 0x0A, 0x05, 0x10,
-- 0x05, 0x16, 0x05, 0x1C, 0x05, 0x22, 0x05, 0x28, 0x05, 0x2E, 0x05, 0x34, 0x05, 0x3A, 0x05, 0x40,
-- 0x05, 0x46, 0x05, 0x4C, 0x05, 0x52, 0x05, 0x58, 0x05, 0x5E, 0x05, 0x64, 0x05, 0x6A, 0x05, 0x70,
-- 0x05, 0x76, 0x05, 0x7C, 0x05, 0x82, 0x05, 0x88, 0x05, 0x8E, 0x05, 0x94, 0x05, 0x9A, 0x05, 0xA0,
-- 0x05, 0xA6, 0x05, 0xAC, 0x05, 0xB2, 0x05, 0xB8, 0x05, 0xBE, 0x05, 0xC4, 0x05, 0xCA, 0x05, 0xD0,
-- 0x05, 0xD6, 0x05, 0xDC, 0x05, 0xE2, 0x05, 0xE8, 0x05, 0xEE, 0x05, 0xF4, 0x05, 0xFA, 0x06, 0x00,
-- 0x06, 0x06, 0x06, 0x0C, 0x06, 0x12, 0x06, 0x18, 0x06, 0x1E, 0x06, 0x24, 0x06, 0x2A, 0x06, 0x30,
-- 0x06, 0x36, 0x06, 0x3C, 0x06, 0x42, 0x06, 0x48, 0x06, 0x4E, 0x06, 0x54, 0x06, 0x5A, 0x06, 0x60,
-- 0x06, 0x66, 0x06, 0x6C, 0x06, 0x72, 0x06, 0x78, 0x06, 0x7E, 0x06, 0x84, 0x06, 0x8A, 0x06, 0x90,
-- 0x06, 0x96, 0x06, 0x9C, 0x06, 0xA2, 0x06, 0xA8, 0x06, 0xAE, 0x06, 0xB4, 0x06, 0xBA, 0x06, 0xC0,
-- 0x06, 0xC6, 0x06, 0xCC, 0x06, 0xD2, 0x06, 0xD8, 0x06, 0xDE, 0x06, 0xE4, 0x06, 0xEA, 0x06, 0xF0,
-- 0x06, 0xF6, 0x06, 0xFC, 0x07, 0x02, 0x07, 0x08, 0x07, 0x0E, 0x07, 0x14, 0x07, 0x1A, 0x07, 0x20,
-- 0x07, 0x26, 0x07, 0x2C, 0x07, 0x32, 0x07, 0x38, 0x07, 0x3E, 0x07, 0x44, 0x07, 0x4A, 0x07, 0x50,
-- 0x07, 0x56, 0x07, 0x5C, 0x07, 0x62, 0x07, 0x68, 0x07, 0x6E, 0x07, 0x74, 0x07, 0x7A, 0x07, 0x80,
-- 0x07, 0x86, 0x07, 0x8C, 0x07, 0x92, 0x07, 0x98, 0x07, 0x9E, 0x07, 0xA4, 0x07, 0xAA, 0x07, 0xB0,
-- 0x07, 0xB6, 0x07, 0xBC, 0x07, 0xC2, 0x07, 0xC8, 0x07, 0xCE, 0x07, 0xD4, 0x07, 0xDA, 0x07, 0xE0,
-- 0x07, 0xE6, 0x07, 0xEC, 0x07, 0xF2, 0x07, 0xF8, 0x07, 0xFE, 0x08, 0x04, 0x08, 0x0A, 0x08, 0x10,
-- 0x08, 0x16, 0x08, 0x1C, 0x08, 0x22, 0x08, 0x28, 0x08, 0x2E, 0x08, 0x34, 0x08, 0x3A, 0x08, 0x40,
-- 0x08, 0x46, 0x08, 0x4C, 0x08, 0x52, 0x08, 0x58, 0x08, 0x5E, 0x08, 0x64, 0x08, 0x6A, 0x08, 0x70,
-- 0x08, 0x76, 0x08, 0x7C, 0x08, 0x82, 0x08, 0x88, 0x08, 0x8E, 0x08, 0x94, 0x08, 0x9A, 0x08, 0xA0,
-- 0x08, 0xA6, 0x08, 0xAC, 0x08, 0xB2, 0x08, 0xB8, 0x08, 0xBE, 0x08, 0xC4, 0x08, 0xCA, 0x08, 0xD0,
-- 0x08, 0xD6, 0x08, 0xDC, 0x08, 0xE2, 0x08, 0xE8, 0x08, 0xEE, 0x08, 0xF4, 0x08, 0xFA, 0x09, 0x00,
-- 0x09, 0x06, 0x09, 0x0C, 0x09, 0x12, 0x09, 0x18, 0x09, 0x1E, 0x09, 0x24, 0x09, 0x2A, 0x09, 0x30,
-- 0x09, 0x36, 0x09, 0x3C, 0x09, 0x42, 0x09, 0x48, 0x09, 0x4E, 0x09, 0x54, 0x09, 0x5A, 0x09, 0x60,
-- 0x09, 0x66, 0x09, 0x6C, 0x09, 0x72, 0x09, 0x78, 0x09, 0x7E, 0x09, 0x84, 0x09, 0x8A, 0x09, 0x90,
-- 0x09, 0x96, 0x09, 0x9C, 0x09, 0xA2, 0x09, 0xA8, 0x09, 0xAE, 0x09, 0xB4, 0x09, 0xBA, 0x09, 0xC0,
-- 0x09, 0xC6, 0x09, 0xCC, 0x09, 0xD2, 0x09, 0xD8, 0x09, 0xDE, 0x09, 0xE4, 0x09, 0xEA, 0x09, 0xF0,
-- 0x09, 0xF6, 0x09, 0xFC, 0x0A, 0x02, 0x0A, 0x08, 0x0A, 0x0E, 0x0A, 0x14, 0x0A, 0x1A, 0x0A, 0x20,
-- 0x0A, 0x26, 0x0A, 0x2C, 0x0A, 0x32, 0x0A, 0x38, 0x0A, 0x3E, 0x0A, 0x44, 0x0A, 0x4A, 0x0A, 0x50,
-- 0x0A, 0x56, 0x0A, 0x5C, 0x0A, 0x62, 0x0A, 0x68, 0x0A, 0x6E, 0x0A, 0x74, 0x0A, 0x7A, 0x0A, 0x80,
-- 0x0A, 0x86, 0x0A, 0x8C, 0x0A, 0x92, 0x0A, 0x98, 0x0A, 0x9E, 0x0A, 0xA4, 0x0A, 0xAA, 0x0A, 0xB0,
-- 0x0A, 0xB6, 0x0A, 0xBC, 0x0A, 0xC2, 0x0A, 0xC8, 0x0A, 0xCE, 0x0A, 0xD4, 0x0A, 0xDA, 0x0A, 0xE0,
-- 0x0A, 0xE6, 0x0A, 0xEC, 0x0A, 0xF2, 0x0A, 0xF8, 0x0A, 0xFE, 0x0B, 0x04, 0x0B, 0x0A, 0x0B, 0x10,
-- 0x0B, 0x16, 0x0B, 0x1C, 0x0B, 0x22, 0x0B, 0x28, 0x0B, 0x2E, 0x0B, 0x34, 0x0B, 0x3A, 0x0B, 0x40,
-- 0x0B, 0x46, 0x0B, 0x4C, 0x0B, 0x52, 0x0B, 0x58, 0x0B, 0x5E, 0x0B, 0x64, 0x0B, 0x6A, 0x0B, 0x70,
-- 0x0B, 0x76, 0x0B, 0x7C, 0x0B, 0x82, 0x0B, 0x88, 0x0B, 0x8E, 0x0B, 0x94, 0x0B, 0x9A, 0x0B, 0xA0,
-- 0x0B, 0xA6, 0x0B, 0xAC, 0x0B, 0xB2, 0x0B, 0xB8, 0x0B, 0xBE, 0x0B, 0xC4, 0x0B, 0xCA, 0x0B, 0xD0,
-- 0x0B, 0xD6, 0x0B, 0xDC, 0x0B, 0xE2, 0x0B, 0xE8, 0x0B, 0xEE, 0x0B, 0xF4, 0x0B, 0xFA, 0x0C, 0x00,
-- 0x0C, 0x06, 0x0C, 0x0C, 0x0C, 0x12, 0x0C, 0x18, 0x0C, 0x1E, 0x0C, 0x24, 0x0C, 0x2A, 0x0C, 0x30,
-- 0x0C, 0x36, 0x0C, 0x3C, 0x0C, 0x42, 0x0C, 0x48, 0x0C, 0x4E, 0x0C, 0x54, 0x0C, 0x5A, 0x0C, 0x60,
-- 0x0C, 0x66, 0x0C, 0x6C, 0x0C, 0x72, 0x0C, 0x78, 0x0C, 0x7E, 0x0C, 0x84, 0x0C, 0x8A, 0x0C, 0x90,
-- 0x0C, 0x96, 0x0C, 0x9C, 0x0C, 0xA2, 0x0C, 0xA8, 0x0C, 0xAE, 0x0C, 0xB4, 0x0C, 0xBA, 0x0C, 0xC0,
-- 0x0C, 0xC6, 0x0C, 0xCC, 0x0C, 0xD2, 0x0C, 0xD8, 0x0C, 0xDE, 0x0C, 0xE4, 0x0C, 0xEA, 0x0C, 0xF0,
-- 0x0C, 0xF6, 0x0C, 0xFC, 0x0D, 0x02, 0x0D, 0x08, 0x0D, 0x0E, 0x0D, 0x14, 0x0D, 0x1A, 0x0D, 0x20,
-- 0x0D, 0x26, 0x0D, 0x2C, 0x0D, 0x32, 0x0D, 0x38, 0x0D, 0x3E, 0x0D, 0x44, 0x0D, 0x4A, 0x0D, 0x50,
-- 0x0D, 0x56, 0x0D, 0x5C, 0x0D, 0x62, 0x0D, 0x68, 0x0D, 0x6E, 0x0D, 0x74, 0x0D, 0x7A, 0x0D, 0x80,
-- 0x0D, 0x86, 0x0D, 0x8C, 0x0D, 0x92, 0x0D, 0x98, 0x0D, 0x9E, 0x0D, 0xA4, 0x0D, 0xAA, 0x0D, 0xB0,
-- 0x0D, 0xB6, 0x0D, 0xBC, 0x0D, 0xC2, 0x0D, 0xC8, 0x0D, 0xCE, 0x0D, 0xD4, 0x0D, 0xDA, 0x0D, 0xE0,
-- 0x0D, 0xE6, 0x0D, 0xEC, 0x0D, 0xF2, 0x0D, 0xF8, 0x0D, 0xFE, 0x0E, 0x04, 0x0E, 0x0A, 0x0E, 0x10,
-- 0x0E, 0x16, 0x0E, 0x1C, 0x0E, 0x22, 0x0E, 0x28, 0x0E, 0x2E, 0x0E, 0x34, 0x0E, 0x3A, 0x0E, 0x40,
-- 0x0E, 0x46, 0x0E, 0x4C, 0x0E, 0x52, 0x0E, 0x58, 0x0E, 0x5E, 0x0E, 0x64, 0x0E, 0x6A, 0x0E, 0x70,
-- 0x0E, 0x76, 0x0E, 0x7C, 0x0E, 0x82, 0x0E, 0x88, 0x0E, 0x8E, 0x0E, 0x94, 0x0E, 0x9A, 0x0E, 0xA0,
-- 0x0E, 0xA6, 0x0E, 0xAC, 0x0E, 0xB2, 0x0E, 0xB8, 0x0E, 0xBE, 0x0E, 0xC4, 0x0E, 0xCA, 0x0E, 0xD0,
-- 0x0E, 0xD6, 0x0E, 0xDC, 0x0E, 0xE2, 0x0E, 0xE8, 0x0E, 0xEE, 0x0E, 0xF4, 0x0E, 0xFA, 0x0F, 0x00,
-- 0x0F, 0x06, 0x0F, 0x0C, 0x0F, 0x12, 0x0F, 0x18, 0x0F, 0x1E, 0x0F, 0x24, 0x0F, 0x2A, 0x0F, 0x30,
-- 0x0F, 0x36, 0x0F, 0x3C, 0x0F, 0x42, 0x0F, 0x48, 0x0F, 0x4E, 0x0F, 0x54, 0x0F, 0x5A, 0x0F, 0x60,
-- 0x0F, 0x66, 0x0F, 0x6C, 0x0F, 0x72, 0x0F, 0x78, 0x0F, 0x7E, 0x0F, 0x84, 0x0F, 0x8A, 0x0F, 0x90,
-- 0x00, 0x02, 0x00, 0x41, 0x03, 0x00, 0x00, 0x02, 0x00, 0x41, 0x03, 0x01, 0x00, 0x02, 0x00, 0x41,
-- 0x03, 0x02, 0x00, 0x02, 0x00, 0x41, 0x03, 0x03, 0x00, 0x02, 0x00, 0x41, 0x03, 0x08, 0x00, 0x02,
-- 0x00, 0x41, 0x03, 0x0A, 0x00, 0x02, 0x00, 0x43, 0x03, 0x27, 0x00, 0x02, 0x00, 0x45, 0x03, 0x00,
-- 0x00, 0x02, 0x00, 0x45, 0x03, 0x01, 0x00, 0x02, 0x00, 0x45, 0x03, 0x02, 0x00, 0x02, 0x00, 0x45,
-- 0x03, 0x08, 0x00, 0x02, 0x00, 0x49, 0x03, 0x00, 0x00, 0x02, 0x00, 0x49, 0x03, 0x01, 0x00, 0x02,
-- 0x00, 0x49, 0x03, 0x02, 0x00, 0x02, 0x00, 0x49, 0x03, 0x08, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x03,
-- 0x00, 0x02, 0x00, 0x4F, 0x03, 0x00, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4F,
-- 0x03, 0x02, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x03, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x08, 0x00, 0x02,
-- 0x00, 0x55, 0x03, 0x00, 0x00, 0x02, 0x00, 0x55, 0x03, 0x01, 0x00, 0x02, 0x00, 0x55, 0x03, 0x02,
-- 0x00, 0x02, 0x00, 0x55, 0x03, 0x08, 0x00, 0x02, 0x00, 0x59, 0x03, 0x01, 0x00, 0x02, 0x00, 0x61,
-- 0x03, 0x00, 0x00, 0x02, 0x00, 0x61, 0x03, 0x01, 0x00, 0x02, 0x00, 0x61, 0x03, 0x02, 0x00, 0x02,
-- 0x00, 0x61, 0x03, 0x03, 0x00, 0x02, 0x00, 0x61, 0x03, 0x08, 0x00, 0x02, 0x00, 0x61, 0x03, 0x0A,
-- 0x00, 0x02, 0x00, 0x63, 0x03, 0x27, 0x00, 0x02, 0x00, 0x65, 0x03, 0x00, 0x00, 0x02, 0x00, 0x65,
-- 0x03, 0x01, 0x00, 0x02, 0x00, 0x65, 0x03, 0x02, 0x00, 0x02, 0x00, 0x65, 0x03, 0x08, 0x00, 0x02,
-- 0x00, 0x69, 0x03, 0x00, 0x00, 0x02, 0x00, 0x69, 0x03, 0x01, 0x00, 0x02, 0x00, 0x69, 0x03, 0x02,
-- 0x00, 0x02, 0x00, 0x69, 0x03, 0x08, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x03, 0x00, 0x02, 0x00, 0x6F,
-- 0x03, 0x00, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x01, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x02, 0x00, 0x02,
-- 0x00, 0x6F, 0x03, 0x03, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x08, 0x00, 0x02, 0x00, 0x75, 0x03, 0x00,
-- 0x00, 0x02, 0x00, 0x75, 0x03, 0x01, 0x00, 0x02, 0x00, 0x75, 0x03, 0x02, 0x00, 0x02, 0x00, 0x75,
-- 0x03, 0x08, 0x00, 0x02, 0x00, 0x79, 0x03, 0x01, 0x00, 0x02, 0x00, 0x79, 0x03, 0x08, 0x00, 0x02,
-- 0x00, 0x41, 0x03, 0x04, 0x00, 0x02, 0x00, 0x61, 0x03, 0x04, 0x00, 0x02, 0x00, 0x41, 0x03, 0x06,
-- 0x00, 0x02, 0x00, 0x61, 0x03, 0x06, 0x00, 0x02, 0x00, 0x41, 0x03, 0x28, 0x00, 0x02, 0x00, 0x61,
-- 0x03, 0x28, 0x00, 0x02, 0x00, 0x43, 0x03, 0x01, 0x00, 0x02, 0x00, 0x63, 0x03, 0x01, 0x00, 0x02,
-- 0x00, 0x43, 0x03, 0x02, 0x00, 0x02, 0x00, 0x63, 0x03, 0x02, 0x00, 0x02, 0x00, 0x43, 0x03, 0x07,
-- 0x00, 0x02, 0x00, 0x63, 0x03, 0x07, 0x00, 0x02, 0x00, 0x43, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x63,
-- 0x03, 0x0C, 0x00, 0x02, 0x00, 0x44, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x64, 0x03, 0x0C, 0x00, 0x02,
-- 0x00, 0x45, 0x03, 0x04, 0x00, 0x02, 0x00, 0x65, 0x03, 0x04, 0x00, 0x02, 0x00, 0x45, 0x03, 0x06,
-- 0x00, 0x02, 0x00, 0x65, 0x03, 0x06, 0x00, 0x02, 0x00, 0x45, 0x03, 0x07, 0x00, 0x02, 0x00, 0x65,
-- 0x03, 0x07, 0x00, 0x02, 0x00, 0x45, 0x03, 0x28, 0x00, 0x02, 0x00, 0x65, 0x03, 0x28, 0x00, 0x02,
-- 0x00, 0x45, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x65, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x47, 0x03, 0x02,
-- 0x00, 0x02, 0x00, 0x67, 0x03, 0x02, 0x00, 0x02, 0x00, 0x47, 0x03, 0x06, 0x00, 0x02, 0x00, 0x67,
-- 0x03, 0x06, 0x00, 0x02, 0x00, 0x47, 0x03, 0x07, 0x00, 0x02, 0x00, 0x67, 0x03, 0x07, 0x00, 0x02,
-- 0x00, 0x47, 0x03, 0x27, 0x00, 0x02, 0x00, 0x67, 0x03, 0x27, 0x00, 0x02, 0x00, 0x48, 0x03, 0x02,
-- 0x00, 0x02, 0x00, 0x68, 0x03, 0x02, 0x00, 0x02, 0x00, 0x49, 0x03, 0x03, 0x00, 0x02, 0x00, 0x69,
-- 0x03, 0x03, 0x00, 0x02, 0x00, 0x49, 0x03, 0x04, 0x00, 0x02, 0x00, 0x69, 0x03, 0x04, 0x00, 0x02,
-- 0x00, 0x49, 0x03, 0x06, 0x00, 0x02, 0x00, 0x69, 0x03, 0x06, 0x00, 0x02, 0x00, 0x49, 0x03, 0x28,
-- 0x00, 0x02, 0x00, 0x69, 0x03, 0x28, 0x00, 0x02, 0x00, 0x49, 0x03, 0x07, 0x00, 0x02, 0x00, 0x4A,
-- 0x03, 0x02, 0x00, 0x02, 0x00, 0x6A, 0x03, 0x02, 0x00, 0x02, 0x00, 0x4B, 0x03, 0x27, 0x00, 0x02,
-- 0x00, 0x6B, 0x03, 0x27, 0x00, 0x02, 0x00, 0x4C, 0x03, 0x01, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x01,
-- 0x00, 0x02, 0x00, 0x4C, 0x03, 0x27, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x27, 0x00, 0x02, 0x00, 0x4C,
-- 0x03, 0x0C, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x01, 0x00, 0x02,
-- 0x00, 0x6E, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x27, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x27,
-- 0x00, 0x02, 0x00, 0x4E, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x4F,
-- 0x03, 0x04, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x04, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x06, 0x00, 0x02,
-- 0x00, 0x6F, 0x03, 0x06, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x0B, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x0B,
-- 0x00, 0x02, 0x00, 0x52, 0x03, 0x01, 0x00, 0x02, 0x00, 0x72, 0x03, 0x01, 0x00, 0x02, 0x00, 0x52,
-- 0x03, 0x27, 0x00, 0x02, 0x00, 0x72, 0x03, 0x27, 0x00, 0x02, 0x00, 0x52, 0x03, 0x0C, 0x00, 0x02,
-- 0x00, 0x72, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x53, 0x03, 0x01, 0x00, 0x02, 0x00, 0x73, 0x03, 0x01,
-- 0x00, 0x02, 0x00, 0x53, 0x03, 0x02, 0x00, 0x02, 0x00, 0x73, 0x03, 0x02, 0x00, 0x02, 0x00, 0x53,
-- 0x03, 0x27, 0x00, 0x02, 0x00, 0x73, 0x03, 0x27, 0x00, 0x02, 0x00, 0x53, 0x03, 0x0C, 0x00, 0x02,
-- 0x00, 0x73, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x54, 0x03, 0x27, 0x00, 0x02, 0x00, 0x74, 0x03, 0x27,
-- 0x00, 0x02, 0x00, 0x54, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x74, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x55,
-- 0x03, 0x03, 0x00, 0x02, 0x00, 0x75, 0x03, 0x03, 0x00, 0x02, 0x00, 0x55, 0x03, 0x04, 0x00, 0x02,
-- 0x00, 0x75, 0x03, 0x04, 0x00, 0x02, 0x00, 0x55, 0x03, 0x06, 0x00, 0x02, 0x00, 0x75, 0x03, 0x06,
-- 0x00, 0x02, 0x00, 0x55, 0x03, 0x0A, 0x00, 0x02, 0x00, 0x75, 0x03, 0x0A, 0x00, 0x02, 0x00, 0x55,
-- 0x03, 0x0B, 0x00, 0x02, 0x00, 0x75, 0x03, 0x0B, 0x00, 0x02, 0x00, 0x55, 0x03, 0x28, 0x00, 0x02,
-- 0x00, 0x75, 0x03, 0x28, 0x00, 0x02, 0x00, 0x57, 0x03, 0x02, 0x00, 0x02, 0x00, 0x77, 0x03, 0x02,
-- 0x00, 0x02, 0x00, 0x59, 0x03, 0x02, 0x00, 0x02, 0x00, 0x79, 0x03, 0x02, 0x00, 0x02, 0x00, 0x59,
-- 0x03, 0x08, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x01, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x01, 0x00, 0x02,
-- 0x00, 0x5A, 0x03, 0x07, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x07, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x0C,
-- 0x00, 0x02, 0x00, 0x7A, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x1B, 0x00, 0x02, 0x00, 0x6F,
-- 0x03, 0x1B, 0x00, 0x02, 0x00, 0x55, 0x03, 0x1B, 0x00, 0x02, 0x00, 0x75, 0x03, 0x1B, 0x00, 0x02,
-- 0x00, 0x41, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x61, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x49, 0x03, 0x0C,
-- 0x00, 0x02, 0x00, 0x69, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x6F,
-- 0x03, 0x0C, 0x00, 0x02, 0x00, 0x55, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x75, 0x03, 0x0C, 0x00, 0x02,
-- 0x00, 0xDC, 0x03, 0x04, 0x00, 0x02, 0x00, 0xFC, 0x03, 0x04, 0x00, 0x02, 0x00, 0x55, 0x03, 0x44,
-- 0x00, 0x02, 0x00, 0x75, 0x03, 0x44, 0x00, 0x02, 0x00, 0xDC, 0x03, 0x0C, 0x00, 0x02, 0x00, 0xFC,
-- 0x03, 0x0C, 0x00, 0x02, 0x00, 0xDC, 0x03, 0x00, 0x00, 0x02, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x02,
-- 0x00, 0xC4, 0x03, 0x04, 0x00, 0x02, 0x00, 0xE4, 0x03, 0x04, 0x00, 0x02, 0x02, 0x26, 0x03, 0x04,
-- 0x00, 0x02, 0x02, 0x27, 0x03, 0x04, 0x00, 0x02, 0x00, 0xC6, 0x03, 0x04, 0x00, 0x02, 0x00, 0xE6,
-- 0x03, 0x04, 0x00, 0x02, 0x00, 0x47, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x67, 0x03, 0x0C, 0x00, 0x02,
-- 0x00, 0x4B, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x6B, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x28,
-- 0x00, 0x02, 0x00, 0x6F, 0x03, 0x28, 0x00, 0x02, 0x01, 0x4C, 0x03, 0x28, 0x00, 0x02, 0x01, 0x4D,
-- 0x03, 0x28, 0x00, 0x02, 0x01, 0xB7, 0x03, 0x0C, 0x00, 0x02, 0x02, 0x92, 0x03, 0x0C, 0x00, 0x02,
-- 0x00, 0x6A, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x47, 0x03, 0x01, 0x00, 0x02, 0x00, 0x67, 0x03, 0x01,
-- 0x00, 0x02, 0x00, 0x4E, 0x03, 0x00, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x00, 0x00, 0x02, 0x00, 0xC5,
-- 0x03, 0x01, 0x00, 0x02, 0x00, 0xE5, 0x03, 0x01, 0x00, 0x02, 0x00, 0xC6, 0x03, 0x01, 0x00, 0x02,
-- 0x00, 0xE6, 0x03, 0x01, 0x00, 0x02, 0x00, 0xD8, 0x03, 0x01, 0x00, 0x02, 0x00, 0xF8, 0x03, 0x01,
-- 0x00, 0x02, 0x00, 0x41, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x61, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x41,
-- 0x03, 0x11, 0x00, 0x02, 0x00, 0x61, 0x03, 0x11, 0x00, 0x02, 0x00, 0x45, 0x03, 0x0F, 0x00, 0x02,
-- 0x00, 0x65, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x45, 0x03, 0x11, 0x00, 0x02, 0x00, 0x65, 0x03, 0x11,
-- 0x00, 0x02, 0x00, 0x49, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x69, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x49,
-- 0x03, 0x11, 0x00, 0x02, 0x00, 0x69, 0x03, 0x11, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x0F, 0x00, 0x02,
-- 0x00, 0x6F, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x11, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x11,
-- 0x00, 0x02, 0x00, 0x52, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x72, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x52,
-- 0x03, 0x11, 0x00, 0x02, 0x00, 0x72, 0x03, 0x11, 0x00, 0x02, 0x00, 0x55, 0x03, 0x0F, 0x00, 0x02,
-- 0x00, 0x75, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x55, 0x03, 0x11, 0x00, 0x02, 0x00, 0x75, 0x03, 0x11,
-- 0x00, 0x02, 0x00, 0x53, 0x03, 0x26, 0x00, 0x02, 0x00, 0x73, 0x03, 0x26, 0x00, 0x02, 0x00, 0x54,
-- 0x03, 0x26, 0x00, 0x02, 0x00, 0x74, 0x03, 0x26, 0x00, 0x02, 0x00, 0x48, 0x03, 0x0C, 0x00, 0x02,
-- 0x00, 0x68, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x41, 0x03, 0x07, 0x00, 0x02, 0x00, 0x61, 0x03, 0x07,
-- 0x00, 0x02, 0x00, 0x45, 0x03, 0x27, 0x00, 0x02, 0x00, 0x65, 0x03, 0x27, 0x00, 0x02, 0x00, 0xD6,
-- 0x03, 0x04, 0x00, 0x02, 0x00, 0xF6, 0x03, 0x04, 0x00, 0x02, 0x00, 0xD5, 0x03, 0x04, 0x00, 0x02,
-- 0x00, 0xF5, 0x03, 0x04, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x07, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x07,
-- 0x00, 0x02, 0x02, 0x2E, 0x03, 0x04, 0x00, 0x02, 0x02, 0x2F, 0x03, 0x04, 0x00, 0x02, 0x00, 0x59,
-- 0x03, 0x04, 0x00, 0x02, 0x00, 0x79, 0x03, 0x04, 0x00, 0x02, 0x00, 0x41, 0x03, 0x25, 0x00, 0x02,
-- 0x00, 0x61, 0x03, 0x25, 0x00, 0x02, 0x00, 0x42, 0x03, 0x07, 0x00, 0x02, 0x00, 0x62, 0x03, 0x07,
-- 0x00, 0x02, 0x00, 0x42, 0x03, 0x23, 0x00, 0x02, 0x00, 0x62, 0x03, 0x23, 0x00, 0x02, 0x00, 0x42,
-- 0x03, 0x31, 0x00, 0x02, 0x00, 0x62, 0x03, 0x31, 0x00, 0x02, 0x00, 0xC7, 0x03, 0x01, 0x00, 0x02,
-- 0x00, 0xE7, 0x03, 0x01, 0x00, 0x02, 0x00, 0x44, 0x03, 0x07, 0x00, 0x02, 0x00, 0x64, 0x03, 0x07,
-- 0x00, 0x02, 0x00, 0x44, 0x03, 0x23, 0x00, 0x02, 0x00, 0x64, 0x03, 0x23, 0x00, 0x02, 0x00, 0x44,
-- 0x03, 0x31, 0x00, 0x02, 0x00, 0x64, 0x03, 0x31, 0x00, 0x02, 0x00, 0x44, 0x03, 0x27, 0x00, 0x02,
-- 0x00, 0x64, 0x03, 0x27, 0x00, 0x02, 0x00, 0x44, 0x03, 0x2D, 0x00, 0x02, 0x00, 0x64, 0x03, 0x2D,
-- 0x00, 0x02, 0x01, 0x12, 0x03, 0x00, 0x00, 0x02, 0x01, 0x13, 0x03, 0x00, 0x00, 0x02, 0x01, 0x12,
-- 0x03, 0x01, 0x00, 0x02, 0x01, 0x13, 0x03, 0x01, 0x00, 0x02, 0x00, 0x45, 0x03, 0x2D, 0x00, 0x02,
-- 0x00, 0x65, 0x03, 0x2D, 0x00, 0x02, 0x00, 0x45, 0x03, 0x30, 0x00, 0x02, 0x00, 0x65, 0x03, 0x30,
-- 0x00, 0x02, 0x01, 0x14, 0x03, 0x27, 0x00, 0x02, 0x01, 0x15, 0x03, 0x27, 0x00, 0x02, 0x00, 0x46,
-- 0x03, 0x07, 0x00, 0x02, 0x00, 0x66, 0x03, 0x07, 0x00, 0x02, 0x00, 0x47, 0x03, 0x04, 0x00, 0x02,
-- 0x00, 0x67, 0x03, 0x04, 0x00, 0x02, 0x00, 0x48, 0x03, 0x07, 0x00, 0x02, 0x00, 0x68, 0x03, 0x07,
-- 0x00, 0x02, 0x00, 0x48, 0x03, 0x23, 0x00, 0x02, 0x00, 0x68, 0x03, 0x23, 0x00, 0x02, 0x00, 0x48,
-- 0x03, 0x08, 0x00, 0x02, 0x00, 0x68, 0x03, 0x08, 0x00, 0x02, 0x00, 0x48, 0x03, 0x27, 0x00, 0x02,
-- 0x00, 0x68, 0x03, 0x27, 0x00, 0x02, 0x00, 0x48, 0x03, 0x2E, 0x00, 0x02, 0x00, 0x68, 0x03, 0x2E,
-- 0x00, 0x02, 0x00, 0x49, 0x03, 0x30, 0x00, 0x02, 0x00, 0x69, 0x03, 0x30, 0x00, 0x02, 0x00, 0x49,
-- 0x03, 0x44, 0x00, 0x02, 0x00, 0x69, 0x03, 0x44, 0x00, 0x02, 0x00, 0x4B, 0x03, 0x01, 0x00, 0x02,
-- 0x00, 0x6B, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4B, 0x03, 0x23, 0x00, 0x02, 0x00, 0x6B, 0x03, 0x23,
-- 0x00, 0x02, 0x00, 0x4B, 0x03, 0x31, 0x00, 0x02, 0x00, 0x6B, 0x03, 0x31, 0x00, 0x02, 0x00, 0x4C,
-- 0x03, 0x23, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x23, 0x00, 0x02, 0x1E, 0x36, 0x03, 0x04, 0x00, 0x02,
-- 0x1E, 0x37, 0x03, 0x04, 0x00, 0x02, 0x00, 0x4C, 0x03, 0x31, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x31,
-- 0x00, 0x02, 0x00, 0x4C, 0x03, 0x2D, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x2D, 0x00, 0x02, 0x00, 0x4D,
-- 0x03, 0x01, 0x00, 0x02, 0x00, 0x6D, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4D, 0x03, 0x07, 0x00, 0x02,
-- 0x00, 0x6D, 0x03, 0x07, 0x00, 0x02, 0x00, 0x4D, 0x03, 0x23, 0x00, 0x02, 0x00, 0x6D, 0x03, 0x23,
-- 0x00, 0x02, 0x00, 0x4E, 0x03, 0x07, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x07, 0x00, 0x02, 0x00, 0x4E,
-- 0x03, 0x23, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x23, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x31, 0x00, 0x02,
-- 0x00, 0x6E, 0x03, 0x31, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x2D, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x2D,
-- 0x00, 0x02, 0x00, 0xD5, 0x03, 0x01, 0x00, 0x02, 0x00, 0xF5, 0x03, 0x01, 0x00, 0x02, 0x00, 0xD5,
-- 0x03, 0x08, 0x00, 0x02, 0x00, 0xF5, 0x03, 0x08, 0x00, 0x02, 0x01, 0x4C, 0x03, 0x00, 0x00, 0x02,
-- 0x01, 0x4D, 0x03, 0x00, 0x00, 0x02, 0x01, 0x4C, 0x03, 0x01, 0x00, 0x02, 0x01, 0x4D, 0x03, 0x01,
-- 0x00, 0x02, 0x00, 0x50, 0x03, 0x01, 0x00, 0x02, 0x00, 0x70, 0x03, 0x01, 0x00, 0x02, 0x00, 0x50,
-- 0x03, 0x07, 0x00, 0x02, 0x00, 0x70, 0x03, 0x07, 0x00, 0x02, 0x00, 0x52, 0x03, 0x07, 0x00, 0x02,
-- 0x00, 0x72, 0x03, 0x07, 0x00, 0x02, 0x00, 0x52, 0x03, 0x23, 0x00, 0x02, 0x00, 0x72, 0x03, 0x23,
-- 0x00, 0x02, 0x1E, 0x5A, 0x03, 0x04, 0x00, 0x02, 0x1E, 0x5B, 0x03, 0x04, 0x00, 0x02, 0x00, 0x52,
-- 0x03, 0x31, 0x00, 0x02, 0x00, 0x72, 0x03, 0x31, 0x00, 0x02, 0x00, 0x53, 0x03, 0x07, 0x00, 0x02,
-- 0x00, 0x73, 0x03, 0x07, 0x00, 0x02, 0x00, 0x53, 0x03, 0x23, 0x00, 0x02, 0x00, 0x73, 0x03, 0x23,
-- 0x00, 0x02, 0x01, 0x5A, 0x03, 0x07, 0x00, 0x02, 0x01, 0x5B, 0x03, 0x07, 0x00, 0x02, 0x01, 0x60,
-- 0x03, 0x07, 0x00, 0x02, 0x01, 0x61, 0x03, 0x07, 0x00, 0x02, 0x1E, 0x60, 0x03, 0x23, 0x00, 0x02,
-- 0x1E, 0x61, 0x03, 0x23, 0x00, 0x02, 0x00, 0x54, 0x03, 0x07, 0x00, 0x02, 0x00, 0x74, 0x03, 0x07,
-- 0x00, 0x02, 0x00, 0x54, 0x03, 0x23, 0x00, 0x02, 0x00, 0x74, 0x03, 0x23, 0x00, 0x02, 0x00, 0x54,
-- 0x03, 0x31, 0x00, 0x02, 0x00, 0x74, 0x03, 0x31, 0x00, 0x02, 0x00, 0x54, 0x03, 0x2D, 0x00, 0x02,
-- 0x00, 0x74, 0x03, 0x2D, 0x00, 0x02, 0x00, 0x55, 0x03, 0x24, 0x00, 0x02, 0x00, 0x75, 0x03, 0x24,
-- 0x00, 0x02, 0x00, 0x55, 0x03, 0x30, 0x00, 0x02, 0x00, 0x75, 0x03, 0x30, 0x00, 0x02, 0x00, 0x55,
-- 0x03, 0x2D, 0x00, 0x02, 0x00, 0x75, 0x03, 0x2D, 0x00, 0x02, 0x01, 0x68, 0x03, 0x01, 0x00, 0x02,
-- 0x01, 0x69, 0x03, 0x01, 0x00, 0x02, 0x01, 0x6A, 0x03, 0x08, 0x00, 0x02, 0x01, 0x6B, 0x03, 0x08,
-- 0x00, 0x02, 0x00, 0x56, 0x03, 0x03, 0x00, 0x02, 0x00, 0x76, 0x03, 0x03, 0x00, 0x02, 0x00, 0x56,
-- 0x03, 0x23, 0x00, 0x02, 0x00, 0x76, 0x03, 0x23, 0x00, 0x02, 0x00, 0x57, 0x03, 0x00, 0x00, 0x02,
-- 0x00, 0x77, 0x03, 0x00, 0x00, 0x02, 0x00, 0x57, 0x03, 0x01, 0x00, 0x02, 0x00, 0x77, 0x03, 0x01,
-- 0x00, 0x02, 0x00, 0x57, 0x03, 0x08, 0x00, 0x02, 0x00, 0x77, 0x03, 0x08, 0x00, 0x02, 0x00, 0x57,
-- 0x03, 0x07, 0x00, 0x02, 0x00, 0x77, 0x03, 0x07, 0x00, 0x02, 0x00, 0x57, 0x03, 0x23, 0x00, 0x02,
-- 0x00, 0x77, 0x03, 0x23, 0x00, 0x02, 0x00, 0x58, 0x03, 0x07, 0x00, 0x02, 0x00, 0x78, 0x03, 0x07,
-- 0x00, 0x02, 0x00, 0x58, 0x03, 0x08, 0x00, 0x02, 0x00, 0x78, 0x03, 0x08, 0x00, 0x02, 0x00, 0x59,
-- 0x03, 0x07, 0x00, 0x02, 0x00, 0x79, 0x03, 0x07, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x02, 0x00, 0x02,
-- 0x00, 0x7A, 0x03, 0x02, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x23, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x23,
-- 0x00, 0x02, 0x00, 0x5A, 0x03, 0x31, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x31, 0x00, 0x02, 0x00, 0x68,
-- 0x03, 0x31, 0x00, 0x02, 0x00, 0x74, 0x03, 0x08, 0x00, 0x02, 0x00, 0x77, 0x03, 0x0A, 0x00, 0x02,
-- 0x00, 0x79, 0x03, 0x0A, 0x00, 0x02, 0x01, 0x7F, 0x03, 0x07, 0x00, 0x02, 0x00, 0x41, 0x03, 0x23,
-- 0x00, 0x02, 0x00, 0x61, 0x03, 0x23, 0x00, 0x02, 0x00, 0x41, 0x03, 0x09, 0x00, 0x02, 0x00, 0x61,
-- 0x03, 0x09, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x01, 0x00, 0x02, 0x00, 0xE2, 0x03, 0x01, 0x00, 0x02,
-- 0x00, 0xC2, 0x03, 0x00, 0x00, 0x02, 0x00, 0xE2, 0x03, 0x00, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x09,
-- 0x00, 0x02, 0x00, 0xE2, 0x03, 0x09, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x03, 0x00, 0x02, 0x00, 0xE2,
-- 0x03, 0x03, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x23, 0x00, 0x02, 0x00, 0xE2, 0x03, 0x23, 0x00, 0x02,
-- 0x01, 0x02, 0x03, 0x01, 0x00, 0x02, 0x01, 0x03, 0x03, 0x01, 0x00, 0x02, 0x01, 0x02, 0x03, 0x00,
-- 0x00, 0x02, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x01, 0x02, 0x03, 0x09, 0x00, 0x02, 0x01, 0x03,
-- 0x03, 0x09, 0x00, 0x02, 0x01, 0x02, 0x03, 0x03, 0x00, 0x02, 0x01, 0x03, 0x03, 0x03, 0x00, 0x02,
-- 0x01, 0x02, 0x03, 0x23, 0x00, 0x02, 0x01, 0x03, 0x03, 0x23, 0x00, 0x02, 0x00, 0x45, 0x03, 0x23,
-- 0x00, 0x02, 0x00, 0x65, 0x03, 0x23, 0x00, 0x02, 0x00, 0x45, 0x03, 0x09, 0x00, 0x02, 0x00, 0x65,
-- 0x03, 0x09, 0x00, 0x02, 0x00, 0x45, 0x03, 0x03, 0x00, 0x02, 0x00, 0x65, 0x03, 0x03, 0x00, 0x02,
-- 0x00, 0xCA, 0x03, 0x01, 0x00, 0x02, 0x00, 0xEA, 0x03, 0x01, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x00,
-- 0x00, 0x02, 0x00, 0xEA, 0x03, 0x00, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x09, 0x00, 0x02, 0x00, 0xEA,
-- 0x03, 0x09, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x03, 0x00, 0x02, 0x00, 0xEA, 0x03, 0x03, 0x00, 0x02,
-- 0x00, 0xCA, 0x03, 0x23, 0x00, 0x02, 0x00, 0xEA, 0x03, 0x23, 0x00, 0x02, 0x00, 0x49, 0x03, 0x09,
-- 0x00, 0x02, 0x00, 0x69, 0x03, 0x09, 0x00, 0x02, 0x00, 0x49, 0x03, 0x23, 0x00, 0x02, 0x00, 0x69,
-- 0x03, 0x23, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x23, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x23, 0x00, 0x02,
-- 0x00, 0x4F, 0x03, 0x09, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x09, 0x00, 0x02, 0x00, 0xD4, 0x03, 0x01,
-- 0x00, 0x02, 0x00, 0xF4, 0x03, 0x01, 0x00, 0x02, 0x00, 0xD4, 0x03, 0x00, 0x00, 0x02, 0x00, 0xF4,
-- 0x03, 0x00, 0x00, 0x02, 0x00, 0xD4, 0x03, 0x09, 0x00, 0x02, 0x00, 0xF4, 0x03, 0x09, 0x00, 0x02,
-- 0x00, 0xD4, 0x03, 0x03, 0x00, 0x02, 0x00, 0xF4, 0x03, 0x03, 0x00, 0x02, 0x00, 0xD4, 0x03, 0x23,
-- 0x00, 0x02, 0x00, 0xF4, 0x03, 0x23, 0x00, 0x02, 0x00, 0xD3, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xF3,
-- 0x03, 0x1B, 0x00, 0x02, 0x00, 0xD2, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xF2, 0x03, 0x1B, 0x00, 0x02,
-- 0x01, 0xA0, 0x03, 0x09, 0x00, 0x02, 0x01, 0xA1, 0x03, 0x09, 0x00, 0x02, 0x00, 0xD5, 0x03, 0x1B,
-- 0x00, 0x02, 0x00, 0xF5, 0x03, 0x1B, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x23, 0x00, 0x02, 0x01, 0xA1,
-- 0x03, 0x23, 0x00, 0x02, 0x00, 0x55, 0x03, 0x23, 0x00, 0x02, 0x00, 0x75, 0x03, 0x23, 0x00, 0x02,
-- 0x00, 0x55, 0x03, 0x09, 0x00, 0x02, 0x00, 0x75, 0x03, 0x09, 0x00, 0x02, 0x00, 0xDA, 0x03, 0x1B,
-- 0x00, 0x02, 0x00, 0xFA, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xD9, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xF9,
-- 0x03, 0x1B, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x09, 0x00, 0x02, 0x01, 0xB0, 0x03, 0x09, 0x00, 0x02,
-- 0x01, 0x68, 0x03, 0x1B, 0x00, 0x02, 0x01, 0x69, 0x03, 0x1B, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x23,
-- 0x00, 0x02, 0x01, 0xB0, 0x03, 0x23, 0x00, 0x02, 0x00, 0x59, 0x03, 0x00, 0x00, 0x02, 0x00, 0x79,
-- 0x03, 0x00, 0x00, 0x02, 0x00, 0x59, 0x03, 0x23, 0x00, 0x02, 0x00, 0x79, 0x03, 0x23, 0x00, 0x02,
-- 0x00, 0x59, 0x03, 0x09, 0x00, 0x02, 0x00, 0x79, 0x03, 0x09, 0x00, 0x02, 0x00, 0x59, 0x03, 0x03,
-- 0x00, 0x02, 0x00, 0x79, 0x03, 0x03, 0x00, 0x02, 0x00, 0x41, 0x03, 0x0A, 0x00, 0x01, 0x01, 0xF2,
-- 0x00, 0xC0, 0x00, 0xC1, 0x00, 0xC2, 0x00, 0xC3, 0x00, 0xC4, 0x00, 0xC5, 0x00, 0xC7, 0x00, 0xC8,
-- 0x00, 0xC9, 0x00, 0xCA, 0x00, 0xCB, 0x00, 0xCC, 0x00, 0xCD, 0x00, 0xCE, 0x00, 0xCF, 0x00, 0xD1,
-- 0x00, 0xD2, 0x00, 0xD3, 0x00, 0xD4, 0x00, 0xD5, 0x00, 0xD6, 0x00, 0xD9, 0x00, 0xDA, 0x00, 0xDB,
-- 0x00, 0xDC, 0x00, 0xDD, 0x00, 0xE0, 0x00, 0xE1, 0x00, 0xE2, 0x00, 0xE3, 0x00, 0xE4, 0x00, 0xE5,
-- 0x00, 0xE7, 0x00, 0xE8, 0x00, 0xE9, 0x00, 0xEA, 0x00, 0xEB, 0x00, 0xEC, 0x00, 0xED, 0x00, 0xEE,
-- 0x00, 0xEF, 0x00, 0xF1, 0x00, 0xF2, 0x00, 0xF3, 0x00, 0xF4, 0x00, 0xF5, 0x00, 0xF6, 0x00, 0xF9,
-- 0x00, 0xFA, 0x00, 0xFB, 0x00, 0xFC, 0x00, 0xFD, 0x00, 0xFF, 0x01, 0x00, 0x01, 0x01, 0x01, 0x02,
-- 0x01, 0x03, 0x01, 0x04, 0x01, 0x05, 0x01, 0x06, 0x01, 0x07, 0x01, 0x08, 0x01, 0x09, 0x01, 0x0A,
-- 0x01, 0x0B, 0x01, 0x0C, 0x01, 0x0D, 0x01, 0x0E, 0x01, 0x0F, 0x01, 0x12, 0x01, 0x13, 0x01, 0x14,
-- 0x01, 0x15, 0x01, 0x16, 0x01, 0x17, 0x01, 0x18, 0x01, 0x19, 0x01, 0x1A, 0x01, 0x1B, 0x01, 0x1C,
-- 0x01, 0x1D, 0x01, 0x1E, 0x01, 0x1F, 0x01, 0x20, 0x01, 0x21, 0x01, 0x22, 0x01, 0x23, 0x01, 0x24,
-- 0x01, 0x25, 0x01, 0x28, 0x01, 0x29, 0x01, 0x2A, 0x01, 0x2B, 0x01, 0x2C, 0x01, 0x2D, 0x01, 0x2E,
-- 0x01, 0x2F, 0x01, 0x30, 0x01, 0x34, 0x01, 0x35, 0x01, 0x36, 0x01, 0x37, 0x01, 0x39, 0x01, 0x3A,
-- 0x01, 0x3B, 0x01, 0x3C, 0x01, 0x3D, 0x01, 0x3E, 0x01, 0x43, 0x01, 0x44, 0x01, 0x45, 0x01, 0x46,
-- 0x01, 0x47, 0x01, 0x48, 0x01, 0x4C, 0x01, 0x4D, 0x01, 0x4E, 0x01, 0x4F, 0x01, 0x50, 0x01, 0x51,
-- 0x01, 0x54, 0x01, 0x55, 0x01, 0x56, 0x01, 0x57, 0x01, 0x58, 0x01, 0x59, 0x01, 0x5A, 0x01, 0x5B,
-- 0x01, 0x5C, 0x01, 0x5D, 0x01, 0x5E, 0x01, 0x5F, 0x01, 0x60, 0x01, 0x61, 0x01, 0x62, 0x01, 0x63,
-- 0x01, 0x64, 0x01, 0x65, 0x01, 0x68, 0x01, 0x69, 0x01, 0x6A, 0x01, 0x6B, 0x01, 0x6C, 0x01, 0x6D,
-- 0x01, 0x6E, 0x01, 0x6F, 0x01, 0x70, 0x01, 0x71, 0x01, 0x72, 0x01, 0x73, 0x01, 0x74, 0x01, 0x75,
-- 0x01, 0x76, 0x01, 0x77, 0x01, 0x78, 0x01, 0x79, 0x01, 0x7A, 0x01, 0x7B, 0x01, 0x7C, 0x01, 0x7D,
-- 0x01, 0x7E, 0x01, 0xA0, 0x01, 0xA1, 0x01, 0xAF, 0x01, 0xB0, 0x01, 0xCD, 0x01, 0xCE, 0x01, 0xCF,
-- 0x01, 0xD0, 0x01, 0xD1, 0x01, 0xD2, 0x01, 0xD3, 0x01, 0xD4, 0x01, 0xD5, 0x01, 0xD6, 0x01, 0xD7,
-- 0x01, 0xD8, 0x01, 0xD9, 0x01, 0xDA, 0x01, 0xDB, 0x01, 0xDC, 0x01, 0xDE, 0x01, 0xDF, 0x01, 0xE0,
-- 0x01, 0xE1, 0x01, 0xE2, 0x01, 0xE3, 0x01, 0xE6, 0x01, 0xE7, 0x01, 0xE8, 0x01, 0xE9, 0x01, 0xEA,
-- 0x01, 0xEB, 0x01, 0xEC, 0x01, 0xED, 0x01, 0xEE, 0x01, 0xEF, 0x01, 0xF0, 0x01, 0xF4, 0x01, 0xF5,
-- 0x01, 0xF8, 0x01, 0xF9, 0x01, 0xFA, 0x01, 0xFB, 0x01, 0xFC, 0x01, 0xFD, 0x01, 0xFE, 0x01, 0xFF,
-- 0x02, 0x00, 0x02, 0x01, 0x02, 0x02, 0x02, 0x03, 0x02, 0x04, 0x02, 0x05, 0x02, 0x06, 0x02, 0x07,
-- 0x02, 0x08, 0x02, 0x09, 0x02, 0x0A, 0x02, 0x0B, 0x02, 0x0C, 0x02, 0x0D, 0x02, 0x0E, 0x02, 0x0F,
-- 0x02, 0x10, 0x02, 0x11, 0x02, 0x12, 0x02, 0x13, 0x02, 0x14, 0x02, 0x15, 0x02, 0x16, 0x02, 0x17,
-- 0x02, 0x18, 0x02, 0x19, 0x02, 0x1A, 0x02, 0x1B, 0x02, 0x1E, 0x02, 0x1F, 0x02, 0x26, 0x02, 0x27,
-- 0x02, 0x28, 0x02, 0x29, 0x02, 0x2A, 0x02, 0x2B, 0x02, 0x2C, 0x02, 0x2D, 0x02, 0x2E, 0x02, 0x2F,
-- 0x02, 0x30, 0x02, 0x31, 0x02, 0x32, 0x02, 0x33, 0x1E, 0x00, 0x1E, 0x01, 0x1E, 0x02, 0x1E, 0x03,
-- 0x1E, 0x04, 0x1E, 0x05, 0x1E, 0x06, 0x1E, 0x07, 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0x0A, 0x1E, 0x0B,
-- 0x1E, 0x0C, 0x1E, 0x0D, 0x1E, 0x0E, 0x1E, 0x0F, 0x1E, 0x10, 0x1E, 0x11, 0x1E, 0x12, 0x1E, 0x13,
-- 0x1E, 0x14, 0x1E, 0x15, 0x1E, 0x16, 0x1E, 0x17, 0x1E, 0x18, 0x1E, 0x19, 0x1E, 0x1A, 0x1E, 0x1B,
-- 0x1E, 0x1C, 0x1E, 0x1D, 0x1E, 0x1E, 0x1E, 0x1F, 0x1E, 0x20, 0x1E, 0x21, 0x1E, 0x22, 0x1E, 0x23,
-- 0x1E, 0x24, 0x1E, 0x25, 0x1E, 0x26, 0x1E, 0x27, 0x1E, 0x28, 0x1E, 0x29, 0x1E, 0x2A, 0x1E, 0x2B,
-- 0x1E, 0x2C, 0x1E, 0x2D, 0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0x30, 0x1E, 0x31, 0x1E, 0x32, 0x1E, 0x33,
-- 0x1E, 0x34, 0x1E, 0x35, 0x1E, 0x36, 0x1E, 0x37, 0x1E, 0x38, 0x1E, 0x39, 0x1E, 0x3A, 0x1E, 0x3B,
-- 0x1E, 0x3C, 0x1E, 0x3D, 0x1E, 0x3E, 0x1E, 0x3F, 0x1E, 0x40, 0x1E, 0x41, 0x1E, 0x42, 0x1E, 0x43,
-- 0x1E, 0x44, 0x1E, 0x45, 0x1E, 0x46, 0x1E, 0x47, 0x1E, 0x48, 0x1E, 0x49, 0x1E, 0x4A, 0x1E, 0x4B,
-- 0x1E, 0x4C, 0x1E, 0x4D, 0x1E, 0x4E, 0x1E, 0x4F, 0x1E, 0x50, 0x1E, 0x51, 0x1E, 0x52, 0x1E, 0x53,
-- 0x1E, 0x54, 0x1E, 0x55, 0x1E, 0x56, 0x1E, 0x57, 0x1E, 0x58, 0x1E, 0x59, 0x1E, 0x5A, 0x1E, 0x5B,
-- 0x1E, 0x5C, 0x1E, 0x5D, 0x1E, 0x5E, 0x1E, 0x5F, 0x1E, 0x60, 0x1E, 0x61, 0x1E, 0x62, 0x1E, 0x63,
-- 0x1E, 0x64, 0x1E, 0x65, 0x1E, 0x66, 0x1E, 0x67, 0x1E, 0x68, 0x1E, 0x69, 0x1E, 0x6A, 0x1E, 0x6B,
-- 0x1E, 0x6C, 0x1E, 0x6D, 0x1E, 0x6E, 0x1E, 0x6F, 0x1E, 0x70, 0x1E, 0x71, 0x1E, 0x72, 0x1E, 0x73,
-- 0x1E, 0x74, 0x1E, 0x75, 0x1E, 0x76, 0x1E, 0x77, 0x1E, 0x78, 0x1E, 0x79, 0x1E, 0x7A, 0x1E, 0x7B,
-- 0x1E, 0x7C, 0x1E, 0x7D, 0x1E, 0x7E, 0x1E, 0x7F, 0x1E, 0x80, 0x1E, 0x81, 0x1E, 0x82, 0x1E, 0x83,
-- 0x1E, 0x84, 0x1E, 0x85, 0x1E, 0x86, 0x1E, 0x87, 0x1E, 0x88, 0x1E, 0x89, 0x1E, 0x8A, 0x1E, 0x8B,
-- 0x1E, 0x8C, 0x1E, 0x8D, 0x1E, 0x8E, 0x1E, 0x8F, 0x1E, 0x90, 0x1E, 0x91, 0x1E, 0x92, 0x1E, 0x93,
-- 0x1E, 0x94, 0x1E, 0x95, 0x1E, 0x96, 0x1E, 0x97, 0x1E, 0x98, 0x1E, 0x99, 0x1E, 0x9B, 0x1E, 0xA0,
-- 0x1E, 0xA1, 0x1E, 0xA2, 0x1E, 0xA3, 0x1E, 0xA4, 0x1E, 0xA5, 0x1E, 0xA6, 0x1E, 0xA7, 0x1E, 0xA8,
-- 0x1E, 0xA9, 0x1E, 0xAA, 0x1E, 0xAB, 0x1E, 0xAC, 0x1E, 0xAD, 0x1E, 0xAE, 0x1E, 0xAF, 0x1E, 0xB0,
-- 0x1E, 0xB1, 0x1E, 0xB2, 0x1E, 0xB3, 0x1E, 0xB4, 0x1E, 0xB5, 0x1E, 0xB6, 0x1E, 0xB7, 0x1E, 0xB8,
-- 0x1E, 0xB9, 0x1E, 0xBA, 0x1E, 0xBB, 0x1E, 0xBC, 0x1E, 0xBD, 0x1E, 0xBE, 0x1E, 0xBF, 0x1E, 0xC0,
-- 0x1E, 0xC1, 0x1E, 0xC2, 0x1E, 0xC3, 0x1E, 0xC4, 0x1E, 0xC5, 0x1E, 0xC6, 0x1E, 0xC7, 0x1E, 0xC8,
-- 0x1E, 0xC9, 0x1E, 0xCA, 0x1E, 0xCB, 0x1E, 0xCC, 0x1E, 0xCD, 0x1E, 0xCE, 0x1E, 0xCF, 0x1E, 0xD0,
-- 0x1E, 0xD1, 0x1E, 0xD2, 0x1E, 0xD3, 0x1E, 0xD4, 0x1E, 0xD5, 0x1E, 0xD6, 0x1E, 0xD7, 0x1E, 0xD8,
-- 0x1E, 0xD9, 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xDE, 0x1E, 0xDF, 0x1E, 0xE0,
-- 0x1E, 0xE1, 0x1E, 0xE2, 0x1E, 0xE3, 0x1E, 0xE4, 0x1E, 0xE5, 0x1E, 0xE6, 0x1E, 0xE7, 0x1E, 0xE8,
-+ 0x00, 0x34, 0x01, 0x7A, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x91, 0x00, 0x02, 0x03, 0x02, 0x01, 0x7C,
-+ 0x00, 0x02, 0x03, 0x07, 0x01, 0x7E, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x93, 0x00, 0x02, 0x03, 0x23,
-+ 0x1E, 0x95, 0x00, 0x02, 0x03, 0x31, 0x01, 0x7A, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10,
-+ 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xA6, 0x00, 0x02,
-+ 0x03, 0x00, 0x1E, 0xA4, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xAA, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xA8,
-+ 0x00, 0x02, 0x03, 0x09, 0x1E, 0xAC, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xA6, 0x00, 0x02, 0x03, 0x40,
-+ 0x1E, 0xA4, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x01, 0xDE, 0x00, 0x02, 0x03, 0x04,
-+ 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x01, 0xFA, 0x00, 0x02, 0x03, 0x01, 0x01, 0xFA, 0x00, 0x02,
-+ 0x03, 0x41, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x01, 0xFC, 0x00, 0x02, 0x03, 0x01,
-+ 0x01, 0xE2, 0x00, 0x02, 0x03, 0x04, 0x01, 0xFC, 0x00, 0x02, 0x03, 0x41, 0x00, 0x02, 0x00, 0x06,
-+ 0x00, 0x0C, 0x1E, 0x08, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x08, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07,
-+ 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xC0,
-+ 0x00, 0x02, 0x03, 0x00, 0x1E, 0xBE, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xC4, 0x00, 0x02, 0x03, 0x03,
-+ 0x1E, 0xC2, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xC6, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xC0, 0x00, 0x02,
-+ 0x03, 0x40, 0x1E, 0xBE, 0x00, 0x02, 0x03, 0x41, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x2E,
-+ 0x00, 0x02, 0x03, 0x01, 0x1E, 0x2E, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xDC,
-+ 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xDA, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x07,
-+ 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xD2,
-+ 0x00, 0x02, 0x03, 0x00, 0x1E, 0xD0, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xD6, 0x00, 0x02, 0x03, 0x03,
-+ 0x1E, 0xD4, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xD8, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xD2, 0x00, 0x02,
-+ 0x03, 0x40, 0x1E, 0xD0, 0x00, 0x02, 0x03, 0x41, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18,
-+ 0x00, 0x1E, 0x00, 0x24, 0x1E, 0x4C, 0x00, 0x02, 0x03, 0x01, 0x02, 0x2C, 0x00, 0x02, 0x03, 0x04,
-+ 0x1E, 0x4E, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xE0, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0x4C, 0x00, 0x02,
-+ 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x02, 0x2A, 0x00, 0x02, 0x03, 0x04, 0x00, 0x02, 0x00, 0x06,
-+ 0x00, 0x0C, 0x01, 0xFE, 0x00, 0x02, 0x03, 0x01, 0x01, 0xFE, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01,
-+ 0x00, 0x04, 0x1E, 0xEA, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xE8, 0x00, 0x02,
-+ 0x03, 0x1B, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C,
-+ 0x01, 0xDB, 0x00, 0x02, 0x03, 0x00, 0x01, 0xD7, 0x00, 0x02, 0x03, 0x01, 0x01, 0xD5, 0x00, 0x02,
-+ 0x03, 0x04, 0x01, 0xD9, 0x00, 0x02, 0x03, 0x0C, 0x01, 0xDB, 0x00, 0x02, 0x03, 0x40, 0x01, 0xD7,
-+ 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28,
-+ 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xA7, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xA5, 0x00, 0x02, 0x03, 0x01,
-+ 0x1E, 0xAB, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xA9, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xAD, 0x00, 0x02,
-+ 0x03, 0x23, 0x1E, 0xA7, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xA5, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01,
-+ 0x00, 0x04, 0x01, 0xDF, 0x00, 0x02, 0x03, 0x04, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x01, 0xFB,
-+ 0x00, 0x02, 0x03, 0x01, 0x01, 0xFB, 0x00, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E,
-+ 0x00, 0x14, 0x01, 0xFD, 0x00, 0x02, 0x03, 0x01, 0x01, 0xE3, 0x00, 0x02, 0x03, 0x04, 0x01, 0xFD,
-+ 0x00, 0x02, 0x03, 0x41, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x09, 0x00, 0x02, 0x03, 0x01,
-+ 0x1E, 0x09, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22,
-+ 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xC1, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xBF, 0x00, 0x02,
-+ 0x03, 0x01, 0x1E, 0xC5, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xC3, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xC7,
-+ 0x00, 0x02, 0x03, 0x23, 0x1E, 0xC1, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xBF, 0x00, 0x02, 0x03, 0x41,
-+ 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x2F, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x2F, 0x00, 0x02,
-+ 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xDD, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04,
-+ 0x1E, 0xDB, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22,
-+ 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xD3, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xD1, 0x00, 0x02,
-+ 0x03, 0x01, 0x1E, 0xD7, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xD5, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xD9,
-+ 0x00, 0x02, 0x03, 0x23, 0x1E, 0xD3, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xD1, 0x00, 0x02, 0x03, 0x41,
-+ 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1E, 0x4D, 0x00, 0x02,
-+ 0x03, 0x01, 0x02, 0x2D, 0x00, 0x02, 0x03, 0x04, 0x1E, 0x4F, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xE1,
-+ 0x00, 0x02, 0x03, 0x1B, 0x1E, 0x4D, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x02, 0x2B,
-+ 0x00, 0x02, 0x03, 0x04, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x01, 0xFF, 0x00, 0x02, 0x03, 0x01,
-+ 0x01, 0xFF, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xEB, 0x00, 0x02, 0x03, 0x1B,
-+ 0x00, 0x01, 0x00, 0x04, 0x1E, 0xE9, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14,
-+ 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x01, 0xDC, 0x00, 0x02, 0x03, 0x00, 0x01, 0xD8,
-+ 0x00, 0x02, 0x03, 0x01, 0x01, 0xD6, 0x00, 0x02, 0x03, 0x04, 0x01, 0xDA, 0x00, 0x02, 0x03, 0x0C,
-+ 0x01, 0xDC, 0x00, 0x02, 0x03, 0x40, 0x01, 0xD8, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10,
-+ 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xB0, 0x00, 0x02,
-+ 0x03, 0x00, 0x1E, 0xAE, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xB4, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xB2,
-+ 0x00, 0x02, 0x03, 0x09, 0x1E, 0xB6, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xB0, 0x00, 0x02, 0x03, 0x40,
-+ 0x1E, 0xAE, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22,
-+ 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xB1, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xAF, 0x00, 0x02,
-+ 0x03, 0x01, 0x1E, 0xB5, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xB3, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xB7,
-+ 0x00, 0x02, 0x03, 0x23, 0x1E, 0xB1, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xAF, 0x00, 0x02, 0x03, 0x41,
-+ 0x00, 0x01, 0x00, 0x04, 0x1E, 0x08, 0x00, 0x02, 0x03, 0x27, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x09,
-+ 0x00, 0x02, 0x03, 0x27, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x1E, 0x14,
-+ 0x00, 0x02, 0x03, 0x00, 0x1E, 0x16, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x14, 0x00, 0x02, 0x03, 0x40,
-+ 0x1E, 0x16, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C,
-+ 0x1E, 0x15, 0x00, 0x02, 0x03, 0x00, 0x1E, 0x17, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x15, 0x00, 0x02,
-+ 0x03, 0x40, 0x1E, 0x17, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x1C, 0x00, 0x02,
-+ 0x03, 0x27, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x1D, 0x00, 0x02, 0x03, 0x27, 0x00, 0x05, 0x00, 0x0C,
-+ 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1E, 0x50, 0x00, 0x02, 0x03, 0x00, 0x1E, 0x52,
-+ 0x00, 0x02, 0x03, 0x01, 0x01, 0xEC, 0x00, 0x02, 0x03, 0x28, 0x1E, 0x50, 0x00, 0x02, 0x03, 0x40,
-+ 0x1E, 0x52, 0x00, 0x02, 0x03, 0x41, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
-+ 0x00, 0x24, 0x1E, 0x51, 0x00, 0x02, 0x03, 0x00, 0x1E, 0x53, 0x00, 0x02, 0x03, 0x01, 0x01, 0xED,
-+ 0x00, 0x02, 0x03, 0x28, 0x1E, 0x51, 0x00, 0x02, 0x03, 0x40, 0x1E, 0x53, 0x00, 0x02, 0x03, 0x41,
-+ 0x00, 0x01, 0x00, 0x04, 0x1E, 0x64, 0x00, 0x02, 0x03, 0x07, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x65,
-+ 0x00, 0x02, 0x03, 0x07, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x66, 0x00, 0x02, 0x03, 0x07, 0x00, 0x01,
-+ 0x00, 0x04, 0x1E, 0x67, 0x00, 0x02, 0x03, 0x07, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14,
-+ 0x1E, 0x78, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xEE, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0x78, 0x00, 0x02,
-+ 0x03, 0x41, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x1E, 0x79, 0x00, 0x02, 0x03, 0x01,
-+ 0x1E, 0xEF, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0x79, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04,
-+ 0x1E, 0x7A, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x7B, 0x00, 0x02, 0x03, 0x08,
-+ 0x00, 0x01, 0x00, 0x04, 0x1E, 0x9B, 0x00, 0x02, 0x03, 0x07, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16,
-+ 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xDC, 0x00, 0x02, 0x03, 0x00,
-+ 0x1E, 0xDA, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xE0, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xDE, 0x00, 0x02,
-+ 0x03, 0x09, 0x1E, 0xE2, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xDC, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xDA,
-+ 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28,
-+ 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xDD, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xDB, 0x00, 0x02, 0x03, 0x01,
-+ 0x1E, 0xE1, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xDF, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xE3, 0x00, 0x02,
-+ 0x03, 0x23, 0x1E, 0xDD, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xDB, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07,
-+ 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xEA,
-+ 0x00, 0x02, 0x03, 0x00, 0x1E, 0xE8, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xEE, 0x00, 0x02, 0x03, 0x03,
-+ 0x1E, 0xEC, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xF0, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xEA, 0x00, 0x02,
-+ 0x03, 0x40, 0x1E, 0xE8, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C,
-+ 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xEB, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xE9,
-+ 0x00, 0x02, 0x03, 0x01, 0x1E, 0xEF, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xED, 0x00, 0x02, 0x03, 0x09,
-+ 0x1E, 0xF1, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xEB, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xE9, 0x00, 0x02,
-+ 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x01, 0xEE, 0x00, 0x02, 0x03, 0x0C, 0x00, 0x01, 0x00, 0x04,
-+ 0x01, 0xEC, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x01, 0xED, 0x00, 0x02, 0x03, 0x04,
-+ 0x00, 0x01, 0x00, 0x04, 0x01, 0xE0, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x01, 0xE1,
-+ 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x1C, 0x00, 0x02, 0x03, 0x06, 0x00, 0x01,
-+ 0x00, 0x04, 0x1E, 0x1D, 0x00, 0x02, 0x03, 0x06, 0x00, 0x01, 0x00, 0x04, 0x02, 0x30, 0x00, 0x02,
-+ 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x02, 0x31, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04,
-+ 0x01, 0xEF, 0x00, 0x02, 0x03, 0x0C, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x38, 0x00, 0x02, 0x03, 0x04,
-+ 0x00, 0x01, 0x00, 0x04, 0x1E, 0x39, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x5C,
-+ 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x5D, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01,
-+ 0x00, 0x04, 0x1E, 0x68, 0x00, 0x02, 0x03, 0x23, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x69, 0x00, 0x02,
-+ 0x03, 0x23, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x68, 0x00, 0x02, 0x03, 0x07, 0x00, 0x01, 0x00, 0x04,
-+ 0x1E, 0x69, 0x00, 0x02, 0x03, 0x07, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0xAC, 0x00, 0x02,
-+ 0x03, 0x02, 0x1E, 0xB6, 0x00, 0x02, 0x03, 0x06, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0xAD,
-+ 0x00, 0x02, 0x03, 0x02, 0x1E, 0xB7, 0x00, 0x02, 0x03, 0x06, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xC6,
-+ 0x00, 0x02, 0x03, 0x02, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xC7, 0x00, 0x02, 0x03, 0x02, 0x00, 0x02,
-+ 0x00, 0x06, 0x00, 0x0C, 0x1E, 0xD8, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xE2, 0x00, 0x02, 0x03, 0x1B,
-+ 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0xD9, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xE3, 0x00, 0x02,
-+ 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xDE, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04,
-+ 0x1E, 0xDF, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xF0, 0x00, 0x02, 0x03, 0x1B,
-+ 0x00, 0x01, 0x00, 0x04, 0x1E, 0xF1, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xEC,
-+ 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xED, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x06,
-+ 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x1E, 0x30, 0x00, 0x02,
-+ 0x03, 0x01, 0x01, 0xE8, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x32, 0x00, 0x02, 0x03, 0x23, 0x01, 0x36,
-+ 0x00, 0x02, 0x03, 0x27, 0x1E, 0x34, 0x00, 0x02, 0x03, 0x31, 0x1E, 0x30, 0x00, 0x02, 0x03, 0x41,
-+ 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x01, 0xFA, 0x00, 0x02, 0x03, 0x01, 0x01, 0xFA, 0x00, 0x02,
-+ 0x03, 0x41, 0x00, 0x01, 0x00, 0x89, 0x00, 0x41, 0x00, 0x42, 0x00, 0x43, 0x00, 0x44, 0x00, 0x45,
-+ 0x00, 0x46, 0x00, 0x47, 0x00, 0x48, 0x00, 0x49, 0x00, 0x4A, 0x00, 0x4B, 0x00, 0x4C, 0x00, 0x4D,
-+ 0x00, 0x4E, 0x00, 0x4F, 0x00, 0x50, 0x00, 0x52, 0x00, 0x53, 0x00, 0x54, 0x00, 0x55, 0x00, 0x56,
-+ 0x00, 0x57, 0x00, 0x58, 0x00, 0x59, 0x00, 0x5A, 0x00, 0x61, 0x00, 0x62, 0x00, 0x63, 0x00, 0x64,
-+ 0x00, 0x65, 0x00, 0x66, 0x00, 0x67, 0x00, 0x68, 0x00, 0x69, 0x00, 0x6A, 0x00, 0x6B, 0x00, 0x6C,
-+ 0x00, 0x6D, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, 0x00, 0x75,
-+ 0x00, 0x76, 0x00, 0x77, 0x00, 0x78, 0x00, 0x79, 0x00, 0x7A, 0x00, 0xC2, 0x00, 0xC4, 0x00, 0xC5,
-+ 0x00, 0xC6, 0x00, 0xC7, 0x00, 0xCA, 0x00, 0xCF, 0x00, 0xD2, 0x00, 0xD3, 0x00, 0xD4, 0x00, 0xD5,
-+ 0x00, 0xD6, 0x00, 0xD8, 0x00, 0xD9, 0x00, 0xDA, 0x00, 0xDC, 0x00, 0xE2, 0x00, 0xE4, 0x00, 0xE5,
-+ 0x00, 0xE6, 0x00, 0xE7, 0x00, 0xEA, 0x00, 0xEF, 0x00, 0xF2, 0x00, 0xF3, 0x00, 0xF4, 0x00, 0xF5,
-+ 0x00, 0xF6, 0x00, 0xF8, 0x00, 0xF9, 0x00, 0xFA, 0x00, 0xFC, 0x01, 0x02, 0x01, 0x03, 0x01, 0x06,
-+ 0x01, 0x07, 0x01, 0x12, 0x01, 0x13, 0x01, 0x14, 0x01, 0x15, 0x01, 0x4C, 0x01, 0x4D, 0x01, 0x5A,
-+ 0x01, 0x5B, 0x01, 0x60, 0x01, 0x61, 0x01, 0x68, 0x01, 0x69, 0x01, 0x6A, 0x01, 0x6B, 0x01, 0x7F,
-+ 0x01, 0xA0, 0x01, 0xA1, 0x01, 0xAF, 0x01, 0xB0, 0x01, 0xB7, 0x01, 0xEA, 0x01, 0xEB, 0x02, 0x26,
-+ 0x02, 0x27, 0x02, 0x28, 0x02, 0x29, 0x02, 0x2E, 0x02, 0x2F, 0x02, 0x92, 0x1E, 0x36, 0x1E, 0x37,
-+ 0x1E, 0x5A, 0x1E, 0x5B, 0x1E, 0x60, 0x1E, 0x61, 0x1E, 0x62, 0x1E, 0x63, 0x1E, 0xA0, 0x1E, 0xA1,
-+ 0x1E, 0xB8, 0x1E, 0xB9, 0x1E, 0xCC, 0x1E, 0xCD, 0x1E, 0xCE, 0x1E, 0xCF, 0x1E, 0xE4, 0x1E, 0xE5,
-+ 0x1E, 0xE6, 0x1E, 0xE7, 0x21, 0x2A, 0x21, 0x2B, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x14,
-+ 0x13, 0x88, 0x1A, 0x9E, 0x1E, 0x3C, 0x21, 0xAE, 0x22, 0x6C, 0x22, 0xFA, 0x00, 0x01, 0x0F, 0x8E,
-+ 0x01, 0xF1, 0x03, 0xE8, 0x03, 0xEE, 0x03, 0xF4, 0x03, 0xFA, 0x04, 0x00, 0x04, 0x06, 0x04, 0x0C,
-+ 0x04, 0x12, 0x04, 0x18, 0x04, 0x1E, 0x04, 0x24, 0x04, 0x2A, 0x04, 0x30, 0x04, 0x36, 0x04, 0x3C,
-+ 0x04, 0x42, 0x04, 0x48, 0x04, 0x4E, 0x04, 0x54, 0x04, 0x5A, 0x04, 0x60, 0x04, 0x66, 0x04, 0x6C,
-+ 0x04, 0x72, 0x04, 0x78, 0x04, 0x7E, 0x04, 0x84, 0x04, 0x8A, 0x04, 0x90, 0x04, 0x96, 0x04, 0x9C,
-+ 0x04, 0xA2, 0x04, 0xA8, 0x04, 0xAE, 0x04, 0xB4, 0x04, 0xBA, 0x04, 0xC0, 0x04, 0xC6, 0x04, 0xCC,
-+ 0x04, 0xD2, 0x04, 0xD8, 0x04, 0xDE, 0x04, 0xE4, 0x04, 0xEA, 0x04, 0xF0, 0x04, 0xF6, 0x04, 0xFC,
-+ 0x05, 0x02, 0x05, 0x08, 0x05, 0x0E, 0x05, 0x14, 0x05, 0x1A, 0x05, 0x20, 0x05, 0x26, 0x05, 0x2C,
-+ 0x05, 0x32, 0x05, 0x38, 0x05, 0x3E, 0x05, 0x44, 0x05, 0x4A, 0x05, 0x50, 0x05, 0x56, 0x05, 0x5C,
-+ 0x05, 0x62, 0x05, 0x68, 0x05, 0x6E, 0x05, 0x74, 0x05, 0x7A, 0x05, 0x80, 0x05, 0x86, 0x05, 0x8C,
-+ 0x05, 0x92, 0x05, 0x98, 0x05, 0x9E, 0x05, 0xA4, 0x05, 0xAA, 0x05, 0xB0, 0x05, 0xB6, 0x05, 0xBC,
-+ 0x05, 0xC2, 0x05, 0xC8, 0x05, 0xCE, 0x05, 0xD4, 0x05, 0xDA, 0x05, 0xE0, 0x05, 0xE6, 0x05, 0xEC,
-+ 0x05, 0xF2, 0x05, 0xF8, 0x05, 0xFE, 0x06, 0x04, 0x06, 0x0A, 0x06, 0x10, 0x06, 0x16, 0x06, 0x1C,
-+ 0x06, 0x22, 0x06, 0x28, 0x06, 0x2E, 0x06, 0x34, 0x06, 0x3A, 0x06, 0x40, 0x06, 0x46, 0x06, 0x4C,
-+ 0x06, 0x52, 0x06, 0x58, 0x06, 0x5E, 0x06, 0x64, 0x06, 0x6A, 0x06, 0x70, 0x06, 0x76, 0x06, 0x7C,
-+ 0x06, 0x82, 0x06, 0x88, 0x06, 0x8E, 0x06, 0x94, 0x06, 0x9A, 0x06, 0xA0, 0x06, 0xA6, 0x06, 0xAC,
-+ 0x06, 0xB2, 0x06, 0xB8, 0x06, 0xBE, 0x06, 0xC4, 0x06, 0xCA, 0x06, 0xD0, 0x06, 0xD6, 0x06, 0xDC,
-+ 0x06, 0xE2, 0x06, 0xE8, 0x06, 0xEE, 0x06, 0xF4, 0x06, 0xFA, 0x07, 0x00, 0x07, 0x06, 0x07, 0x0C,
-+ 0x07, 0x12, 0x07, 0x18, 0x07, 0x1E, 0x07, 0x24, 0x07, 0x2A, 0x07, 0x30, 0x07, 0x36, 0x07, 0x3C,
-+ 0x07, 0x42, 0x07, 0x48, 0x07, 0x4E, 0x07, 0x54, 0x07, 0x5A, 0x07, 0x60, 0x07, 0x66, 0x07, 0x6C,
-+ 0x07, 0x72, 0x07, 0x78, 0x07, 0x7E, 0x07, 0x84, 0x07, 0x8A, 0x07, 0x90, 0x07, 0x96, 0x07, 0x9C,
-+ 0x07, 0xA2, 0x07, 0xA8, 0x07, 0xAE, 0x07, 0xB4, 0x07, 0xBA, 0x07, 0xC0, 0x07, 0xC6, 0x07, 0xCC,
-+ 0x07, 0xD2, 0x07, 0xD8, 0x07, 0xDE, 0x07, 0xE4, 0x07, 0xEA, 0x07, 0xF0, 0x07, 0xF6, 0x07, 0xFC,
-+ 0x08, 0x02, 0x08, 0x08, 0x08, 0x0E, 0x08, 0x14, 0x08, 0x1A, 0x08, 0x20, 0x08, 0x26, 0x08, 0x2C,
-+ 0x08, 0x32, 0x08, 0x38, 0x08, 0x3E, 0x08, 0x44, 0x08, 0x4A, 0x08, 0x50, 0x08, 0x56, 0x08, 0x5C,
-+ 0x08, 0x62, 0x08, 0x68, 0x08, 0x6E, 0x08, 0x74, 0x08, 0x7A, 0x08, 0x80, 0x08, 0x86, 0x08, 0x8C,
-+ 0x08, 0x92, 0x08, 0x98, 0x08, 0x9E, 0x08, 0xA4, 0x08, 0xAA, 0x08, 0xB0, 0x08, 0xB6, 0x08, 0xBC,
-+ 0x08, 0xC2, 0x08, 0xC8, 0x08, 0xCE, 0x08, 0xD4, 0x08, 0xDA, 0x08, 0xE0, 0x08, 0xE6, 0x08, 0xEC,
-+ 0x08, 0xF2, 0x08, 0xF8, 0x08, 0xFE, 0x09, 0x04, 0x09, 0x0A, 0x09, 0x10, 0x09, 0x16, 0x09, 0x1C,
-+ 0x09, 0x22, 0x09, 0x28, 0x09, 0x2E, 0x09, 0x34, 0x09, 0x3A, 0x09, 0x40, 0x09, 0x46, 0x09, 0x4C,
-+ 0x09, 0x52, 0x09, 0x58, 0x09, 0x5E, 0x09, 0x64, 0x09, 0x6A, 0x09, 0x70, 0x09, 0x76, 0x09, 0x7C,
-+ 0x09, 0x82, 0x09, 0x88, 0x09, 0x8E, 0x09, 0x94, 0x09, 0x9A, 0x09, 0xA0, 0x09, 0xA6, 0x09, 0xAC,
-+ 0x09, 0xB2, 0x09, 0xB8, 0x09, 0xBE, 0x09, 0xC4, 0x09, 0xCA, 0x09, 0xD0, 0x09, 0xD6, 0x09, 0xDC,
-+ 0x09, 0xE2, 0x09, 0xE8, 0x09, 0xEE, 0x09, 0xF4, 0x09, 0xFA, 0x0A, 0x00, 0x0A, 0x06, 0x0A, 0x0C,
-+ 0x0A, 0x12, 0x0A, 0x18, 0x0A, 0x1E, 0x0A, 0x24, 0x0A, 0x2A, 0x0A, 0x30, 0x0A, 0x36, 0x0A, 0x3C,
-+ 0x0A, 0x42, 0x0A, 0x48, 0x0A, 0x4E, 0x0A, 0x54, 0x0A, 0x5A, 0x0A, 0x60, 0x0A, 0x66, 0x0A, 0x6C,
-+ 0x0A, 0x72, 0x0A, 0x78, 0x0A, 0x7E, 0x0A, 0x84, 0x0A, 0x8A, 0x0A, 0x90, 0x0A, 0x96, 0x0A, 0x9C,
-+ 0x0A, 0xA2, 0x0A, 0xA8, 0x0A, 0xAE, 0x0A, 0xB4, 0x0A, 0xBA, 0x0A, 0xC0, 0x0A, 0xC6, 0x0A, 0xCC,
-+ 0x0A, 0xD2, 0x0A, 0xD8, 0x0A, 0xDE, 0x0A, 0xE4, 0x0A, 0xEA, 0x0A, 0xF0, 0x0A, 0xF6, 0x0A, 0xFC,
-+ 0x0B, 0x02, 0x0B, 0x08, 0x0B, 0x0E, 0x0B, 0x14, 0x0B, 0x1A, 0x0B, 0x20, 0x0B, 0x26, 0x0B, 0x2C,
-+ 0x0B, 0x32, 0x0B, 0x38, 0x0B, 0x3E, 0x0B, 0x44, 0x0B, 0x4A, 0x0B, 0x50, 0x0B, 0x56, 0x0B, 0x5C,
-+ 0x0B, 0x62, 0x0B, 0x68, 0x0B, 0x6E, 0x0B, 0x74, 0x0B, 0x7A, 0x0B, 0x80, 0x0B, 0x86, 0x0B, 0x8C,
-+ 0x0B, 0x92, 0x0B, 0x98, 0x0B, 0x9E, 0x0B, 0xA4, 0x0B, 0xAA, 0x0B, 0xB0, 0x0B, 0xB6, 0x0B, 0xBC,
-+ 0x0B, 0xC2, 0x0B, 0xC8, 0x0B, 0xCE, 0x0B, 0xD4, 0x0B, 0xDA, 0x0B, 0xE0, 0x0B, 0xE6, 0x0B, 0xEC,
-+ 0x0B, 0xF2, 0x0B, 0xF8, 0x0B, 0xFE, 0x0C, 0x04, 0x0C, 0x0A, 0x0C, 0x10, 0x0C, 0x16, 0x0C, 0x1C,
-+ 0x0C, 0x22, 0x0C, 0x28, 0x0C, 0x2E, 0x0C, 0x34, 0x0C, 0x3A, 0x0C, 0x40, 0x0C, 0x46, 0x0C, 0x4C,
-+ 0x0C, 0x52, 0x0C, 0x58, 0x0C, 0x5E, 0x0C, 0x64, 0x0C, 0x6A, 0x0C, 0x70, 0x0C, 0x76, 0x0C, 0x7C,
-+ 0x0C, 0x82, 0x0C, 0x88, 0x0C, 0x8E, 0x0C, 0x94, 0x0C, 0x9A, 0x0C, 0xA0, 0x0C, 0xA6, 0x0C, 0xAC,
-+ 0x0C, 0xB2, 0x0C, 0xB8, 0x0C, 0xBE, 0x0C, 0xC4, 0x0C, 0xCA, 0x0C, 0xD0, 0x0C, 0xD6, 0x0C, 0xDC,
-+ 0x0C, 0xE2, 0x0C, 0xE8, 0x0C, 0xEE, 0x0C, 0xF4, 0x0C, 0xFA, 0x0D, 0x00, 0x0D, 0x06, 0x0D, 0x0C,
-+ 0x0D, 0x12, 0x0D, 0x18, 0x0D, 0x1E, 0x0D, 0x24, 0x0D, 0x2A, 0x0D, 0x30, 0x0D, 0x36, 0x0D, 0x3C,
-+ 0x0D, 0x42, 0x0D, 0x48, 0x0D, 0x4E, 0x0D, 0x54, 0x0D, 0x5A, 0x0D, 0x60, 0x0D, 0x66, 0x0D, 0x6C,
-+ 0x0D, 0x72, 0x0D, 0x78, 0x0D, 0x7E, 0x0D, 0x84, 0x0D, 0x8A, 0x0D, 0x90, 0x0D, 0x96, 0x0D, 0x9C,
-+ 0x0D, 0xA2, 0x0D, 0xA8, 0x0D, 0xAE, 0x0D, 0xB4, 0x0D, 0xBA, 0x0D, 0xC0, 0x0D, 0xC6, 0x0D, 0xCC,
-+ 0x0D, 0xD2, 0x0D, 0xD8, 0x0D, 0xDE, 0x0D, 0xE4, 0x0D, 0xEA, 0x0D, 0xF0, 0x0D, 0xF6, 0x0D, 0xFC,
-+ 0x0E, 0x02, 0x0E, 0x08, 0x0E, 0x0E, 0x0E, 0x14, 0x0E, 0x1A, 0x0E, 0x20, 0x0E, 0x26, 0x0E, 0x2C,
-+ 0x0E, 0x32, 0x0E, 0x38, 0x0E, 0x3E, 0x0E, 0x44, 0x0E, 0x4A, 0x0E, 0x50, 0x0E, 0x56, 0x0E, 0x5C,
-+ 0x0E, 0x62, 0x0E, 0x68, 0x0E, 0x6E, 0x0E, 0x74, 0x0E, 0x7A, 0x0E, 0x80, 0x0E, 0x86, 0x0E, 0x8C,
-+ 0x0E, 0x92, 0x0E, 0x98, 0x0E, 0x9E, 0x0E, 0xA4, 0x0E, 0xAA, 0x0E, 0xB0, 0x0E, 0xB6, 0x0E, 0xBC,
-+ 0x0E, 0xC2, 0x0E, 0xC8, 0x0E, 0xCE, 0x0E, 0xD4, 0x0E, 0xDA, 0x0E, 0xE0, 0x0E, 0xE6, 0x0E, 0xEC,
-+ 0x0E, 0xF2, 0x0E, 0xF8, 0x0E, 0xFE, 0x0F, 0x04, 0x0F, 0x0A, 0x0F, 0x10, 0x0F, 0x16, 0x0F, 0x1C,
-+ 0x0F, 0x22, 0x0F, 0x28, 0x0F, 0x2E, 0x0F, 0x34, 0x0F, 0x3A, 0x0F, 0x40, 0x0F, 0x46, 0x0F, 0x4C,
-+ 0x0F, 0x52, 0x0F, 0x58, 0x0F, 0x5E, 0x0F, 0x64, 0x0F, 0x6A, 0x0F, 0x70, 0x0F, 0x76, 0x0F, 0x7C,
-+ 0x0F, 0x82, 0x0F, 0x88, 0x00, 0x02, 0x00, 0x41, 0x03, 0x00, 0x00, 0x02, 0x00, 0x41, 0x03, 0x01,
-+ 0x00, 0x02, 0x00, 0x41, 0x03, 0x02, 0x00, 0x02, 0x00, 0x41, 0x03, 0x03, 0x00, 0x02, 0x00, 0x41,
-+ 0x03, 0x08, 0x00, 0x02, 0x00, 0x41, 0x03, 0x0A, 0x00, 0x02, 0x00, 0x43, 0x03, 0x27, 0x00, 0x02,
-+ 0x00, 0x45, 0x03, 0x00, 0x00, 0x02, 0x00, 0x45, 0x03, 0x01, 0x00, 0x02, 0x00, 0x45, 0x03, 0x02,
-+ 0x00, 0x02, 0x00, 0x45, 0x03, 0x08, 0x00, 0x02, 0x00, 0x49, 0x03, 0x00, 0x00, 0x02, 0x00, 0x49,
-+ 0x03, 0x01, 0x00, 0x02, 0x00, 0x49, 0x03, 0x02, 0x00, 0x02, 0x00, 0x49, 0x03, 0x08, 0x00, 0x02,
-+ 0x00, 0x4E, 0x03, 0x03, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x00, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x01,
-+ 0x00, 0x02, 0x00, 0x4F, 0x03, 0x02, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x03, 0x00, 0x02, 0x00, 0x4F,
-+ 0x03, 0x08, 0x00, 0x02, 0x00, 0x55, 0x03, 0x00, 0x00, 0x02, 0x00, 0x55, 0x03, 0x01, 0x00, 0x02,
-+ 0x00, 0x55, 0x03, 0x02, 0x00, 0x02, 0x00, 0x55, 0x03, 0x08, 0x00, 0x02, 0x00, 0x59, 0x03, 0x01,
-+ 0x00, 0x02, 0x00, 0x61, 0x03, 0x00, 0x00, 0x02, 0x00, 0x61, 0x03, 0x01, 0x00, 0x02, 0x00, 0x61,
-+ 0x03, 0x02, 0x00, 0x02, 0x00, 0x61, 0x03, 0x03, 0x00, 0x02, 0x00, 0x61, 0x03, 0x08, 0x00, 0x02,
-+ 0x00, 0x61, 0x03, 0x0A, 0x00, 0x02, 0x00, 0x63, 0x03, 0x27, 0x00, 0x02, 0x00, 0x65, 0x03, 0x00,
-+ 0x00, 0x02, 0x00, 0x65, 0x03, 0x01, 0x00, 0x02, 0x00, 0x65, 0x03, 0x02, 0x00, 0x02, 0x00, 0x65,
-+ 0x03, 0x08, 0x00, 0x02, 0x00, 0x69, 0x03, 0x00, 0x00, 0x02, 0x00, 0x69, 0x03, 0x01, 0x00, 0x02,
-+ 0x00, 0x69, 0x03, 0x02, 0x00, 0x02, 0x00, 0x69, 0x03, 0x08, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x03,
-+ 0x00, 0x02, 0x00, 0x6F, 0x03, 0x00, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x01, 0x00, 0x02, 0x00, 0x6F,
-+ 0x03, 0x02, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x03, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x08, 0x00, 0x02,
-+ 0x00, 0x75, 0x03, 0x00, 0x00, 0x02, 0x00, 0x75, 0x03, 0x01, 0x00, 0x02, 0x00, 0x75, 0x03, 0x02,
-+ 0x00, 0x02, 0x00, 0x75, 0x03, 0x08, 0x00, 0x02, 0x00, 0x79, 0x03, 0x01, 0x00, 0x02, 0x00, 0x79,
-+ 0x03, 0x08, 0x00, 0x02, 0x00, 0x41, 0x03, 0x04, 0x00, 0x02, 0x00, 0x61, 0x03, 0x04, 0x00, 0x02,
-+ 0x00, 0x41, 0x03, 0x06, 0x00, 0x02, 0x00, 0x61, 0x03, 0x06, 0x00, 0x02, 0x00, 0x41, 0x03, 0x28,
-+ 0x00, 0x02, 0x00, 0x61, 0x03, 0x28, 0x00, 0x02, 0x00, 0x43, 0x03, 0x01, 0x00, 0x02, 0x00, 0x63,
-+ 0x03, 0x01, 0x00, 0x02, 0x00, 0x43, 0x03, 0x02, 0x00, 0x02, 0x00, 0x63, 0x03, 0x02, 0x00, 0x02,
-+ 0x00, 0x43, 0x03, 0x07, 0x00, 0x02, 0x00, 0x63, 0x03, 0x07, 0x00, 0x02, 0x00, 0x43, 0x03, 0x0C,
-+ 0x00, 0x02, 0x00, 0x63, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x44, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x64,
-+ 0x03, 0x0C, 0x00, 0x02, 0x00, 0x45, 0x03, 0x04, 0x00, 0x02, 0x00, 0x65, 0x03, 0x04, 0x00, 0x02,
-+ 0x00, 0x45, 0x03, 0x06, 0x00, 0x02, 0x00, 0x65, 0x03, 0x06, 0x00, 0x02, 0x00, 0x45, 0x03, 0x07,
-+ 0x00, 0x02, 0x00, 0x65, 0x03, 0x07, 0x00, 0x02, 0x00, 0x45, 0x03, 0x28, 0x00, 0x02, 0x00, 0x65,
-+ 0x03, 0x28, 0x00, 0x02, 0x00, 0x45, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x65, 0x03, 0x0C, 0x00, 0x02,
-+ 0x00, 0x47, 0x03, 0x02, 0x00, 0x02, 0x00, 0x67, 0x03, 0x02, 0x00, 0x02, 0x00, 0x47, 0x03, 0x06,
-+ 0x00, 0x02, 0x00, 0x67, 0x03, 0x06, 0x00, 0x02, 0x00, 0x47, 0x03, 0x07, 0x00, 0x02, 0x00, 0x67,
-+ 0x03, 0x07, 0x00, 0x02, 0x00, 0x47, 0x03, 0x27, 0x00, 0x02, 0x00, 0x67, 0x03, 0x27, 0x00, 0x02,
-+ 0x00, 0x48, 0x03, 0x02, 0x00, 0x02, 0x00, 0x68, 0x03, 0x02, 0x00, 0x02, 0x00, 0x49, 0x03, 0x03,
-+ 0x00, 0x02, 0x00, 0x69, 0x03, 0x03, 0x00, 0x02, 0x00, 0x49, 0x03, 0x04, 0x00, 0x02, 0x00, 0x69,
-+ 0x03, 0x04, 0x00, 0x02, 0x00, 0x49, 0x03, 0x06, 0x00, 0x02, 0x00, 0x69, 0x03, 0x06, 0x00, 0x02,
-+ 0x00, 0x49, 0x03, 0x28, 0x00, 0x02, 0x00, 0x69, 0x03, 0x28, 0x00, 0x02, 0x00, 0x49, 0x03, 0x07,
-+ 0x00, 0x02, 0x00, 0x4A, 0x03, 0x02, 0x00, 0x02, 0x00, 0x6A, 0x03, 0x02, 0x00, 0x02, 0x00, 0x4B,
-+ 0x03, 0x27, 0x00, 0x02, 0x00, 0x6B, 0x03, 0x27, 0x00, 0x02, 0x00, 0x4C, 0x03, 0x01, 0x00, 0x02,
-+ 0x00, 0x6C, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4C, 0x03, 0x27, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x27,
-+ 0x00, 0x02, 0x00, 0x4C, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x4E,
-+ 0x03, 0x01, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x27, 0x00, 0x02,
-+ 0x00, 0x6E, 0x03, 0x27, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x0C,
-+ 0x00, 0x02, 0x00, 0x4F, 0x03, 0x04, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x04, 0x00, 0x02, 0x00, 0x4F,
-+ 0x03, 0x06, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x06, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x0B, 0x00, 0x02,
-+ 0x00, 0x6F, 0x03, 0x0B, 0x00, 0x02, 0x00, 0x52, 0x03, 0x01, 0x00, 0x02, 0x00, 0x72, 0x03, 0x01,
-+ 0x00, 0x02, 0x00, 0x52, 0x03, 0x27, 0x00, 0x02, 0x00, 0x72, 0x03, 0x27, 0x00, 0x02, 0x00, 0x52,
-+ 0x03, 0x0C, 0x00, 0x02, 0x00, 0x72, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x53, 0x03, 0x01, 0x00, 0x02,
-+ 0x00, 0x73, 0x03, 0x01, 0x00, 0x02, 0x00, 0x53, 0x03, 0x02, 0x00, 0x02, 0x00, 0x73, 0x03, 0x02,
-+ 0x00, 0x02, 0x00, 0x53, 0x03, 0x27, 0x00, 0x02, 0x00, 0x73, 0x03, 0x27, 0x00, 0x02, 0x00, 0x53,
-+ 0x03, 0x0C, 0x00, 0x02, 0x00, 0x73, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x54, 0x03, 0x27, 0x00, 0x02,
-+ 0x00, 0x74, 0x03, 0x27, 0x00, 0x02, 0x00, 0x54, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x74, 0x03, 0x0C,
-+ 0x00, 0x02, 0x00, 0x55, 0x03, 0x03, 0x00, 0x02, 0x00, 0x75, 0x03, 0x03, 0x00, 0x02, 0x00, 0x55,
-+ 0x03, 0x04, 0x00, 0x02, 0x00, 0x75, 0x03, 0x04, 0x00, 0x02, 0x00, 0x55, 0x03, 0x06, 0x00, 0x02,
-+ 0x00, 0x75, 0x03, 0x06, 0x00, 0x02, 0x00, 0x55, 0x03, 0x0A, 0x00, 0x02, 0x00, 0x75, 0x03, 0x0A,
-+ 0x00, 0x02, 0x00, 0x55, 0x03, 0x0B, 0x00, 0x02, 0x00, 0x75, 0x03, 0x0B, 0x00, 0x02, 0x00, 0x55,
-+ 0x03, 0x28, 0x00, 0x02, 0x00, 0x75, 0x03, 0x28, 0x00, 0x02, 0x00, 0x57, 0x03, 0x02, 0x00, 0x02,
-+ 0x00, 0x77, 0x03, 0x02, 0x00, 0x02, 0x00, 0x59, 0x03, 0x02, 0x00, 0x02, 0x00, 0x79, 0x03, 0x02,
-+ 0x00, 0x02, 0x00, 0x59, 0x03, 0x08, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x01, 0x00, 0x02, 0x00, 0x7A,
-+ 0x03, 0x01, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x07, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x07, 0x00, 0x02,
-+ 0x00, 0x5A, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x1B,
-+ 0x00, 0x02, 0x00, 0x6F, 0x03, 0x1B, 0x00, 0x02, 0x00, 0x55, 0x03, 0x1B, 0x00, 0x02, 0x00, 0x75,
-+ 0x03, 0x1B, 0x00, 0x02, 0x00, 0x41, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x61, 0x03, 0x0C, 0x00, 0x02,
-+ 0x00, 0x49, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x69, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x0C,
-+ 0x00, 0x02, 0x00, 0x6F, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x55, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x75,
-+ 0x03, 0x0C, 0x00, 0x02, 0x00, 0xDC, 0x03, 0x04, 0x00, 0x02, 0x00, 0xFC, 0x03, 0x04, 0x00, 0x02,
-+ 0x00, 0x55, 0x03, 0x44, 0x00, 0x02, 0x00, 0x75, 0x03, 0x44, 0x00, 0x02, 0x00, 0xDC, 0x03, 0x0C,
-+ 0x00, 0x02, 0x00, 0xFC, 0x03, 0x0C, 0x00, 0x02, 0x00, 0xDC, 0x03, 0x00, 0x00, 0x02, 0x00, 0xFC,
-+ 0x03, 0x00, 0x00, 0x02, 0x00, 0xC4, 0x03, 0x04, 0x00, 0x02, 0x00, 0xE4, 0x03, 0x04, 0x00, 0x02,
-+ 0x02, 0x26, 0x03, 0x04, 0x00, 0x02, 0x02, 0x27, 0x03, 0x04, 0x00, 0x02, 0x00, 0xC6, 0x03, 0x04,
-+ 0x00, 0x02, 0x00, 0xE6, 0x03, 0x04, 0x00, 0x02, 0x00, 0x47, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x67,
-+ 0x03, 0x0C, 0x00, 0x02, 0x00, 0x4B, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x6B, 0x03, 0x0C, 0x00, 0x02,
-+ 0x00, 0x4F, 0x03, 0x28, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x28, 0x00, 0x02, 0x01, 0x4C, 0x03, 0x28,
-+ 0x00, 0x02, 0x01, 0x4D, 0x03, 0x28, 0x00, 0x02, 0x01, 0xB7, 0x03, 0x0C, 0x00, 0x02, 0x02, 0x92,
-+ 0x03, 0x0C, 0x00, 0x02, 0x00, 0x6A, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x47, 0x03, 0x01, 0x00, 0x02,
-+ 0x00, 0x67, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x00, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x00,
-+ 0x00, 0x02, 0x00, 0xC5, 0x03, 0x01, 0x00, 0x02, 0x00, 0xE5, 0x03, 0x01, 0x00, 0x02, 0x00, 0xC6,
-+ 0x03, 0x01, 0x00, 0x02, 0x00, 0xE6, 0x03, 0x01, 0x00, 0x02, 0x00, 0xD8, 0x03, 0x01, 0x00, 0x02,
-+ 0x00, 0xF8, 0x03, 0x01, 0x00, 0x02, 0x00, 0x41, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x61, 0x03, 0x0F,
-+ 0x00, 0x02, 0x00, 0x41, 0x03, 0x11, 0x00, 0x02, 0x00, 0x61, 0x03, 0x11, 0x00, 0x02, 0x00, 0x45,
-+ 0x03, 0x0F, 0x00, 0x02, 0x00, 0x65, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x45, 0x03, 0x11, 0x00, 0x02,
-+ 0x00, 0x65, 0x03, 0x11, 0x00, 0x02, 0x00, 0x49, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x69, 0x03, 0x0F,
-+ 0x00, 0x02, 0x00, 0x49, 0x03, 0x11, 0x00, 0x02, 0x00, 0x69, 0x03, 0x11, 0x00, 0x02, 0x00, 0x4F,
-+ 0x03, 0x0F, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x11, 0x00, 0x02,
-+ 0x00, 0x6F, 0x03, 0x11, 0x00, 0x02, 0x00, 0x52, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x72, 0x03, 0x0F,
-+ 0x00, 0x02, 0x00, 0x52, 0x03, 0x11, 0x00, 0x02, 0x00, 0x72, 0x03, 0x11, 0x00, 0x02, 0x00, 0x55,
-+ 0x03, 0x0F, 0x00, 0x02, 0x00, 0x75, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x55, 0x03, 0x11, 0x00, 0x02,
-+ 0x00, 0x75, 0x03, 0x11, 0x00, 0x02, 0x00, 0x53, 0x03, 0x26, 0x00, 0x02, 0x00, 0x73, 0x03, 0x26,
-+ 0x00, 0x02, 0x00, 0x54, 0x03, 0x26, 0x00, 0x02, 0x00, 0x74, 0x03, 0x26, 0x00, 0x02, 0x00, 0x48,
-+ 0x03, 0x0C, 0x00, 0x02, 0x00, 0x68, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x41, 0x03, 0x07, 0x00, 0x02,
-+ 0x00, 0x61, 0x03, 0x07, 0x00, 0x02, 0x00, 0x45, 0x03, 0x27, 0x00, 0x02, 0x00, 0x65, 0x03, 0x27,
-+ 0x00, 0x02, 0x00, 0xD6, 0x03, 0x04, 0x00, 0x02, 0x00, 0xF6, 0x03, 0x04, 0x00, 0x02, 0x00, 0xD5,
-+ 0x03, 0x04, 0x00, 0x02, 0x00, 0xF5, 0x03, 0x04, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x07, 0x00, 0x02,
-+ 0x00, 0x6F, 0x03, 0x07, 0x00, 0x02, 0x02, 0x2E, 0x03, 0x04, 0x00, 0x02, 0x02, 0x2F, 0x03, 0x04,
-+ 0x00, 0x02, 0x00, 0x59, 0x03, 0x04, 0x00, 0x02, 0x00, 0x79, 0x03, 0x04, 0x00, 0x02, 0x00, 0x41,
-+ 0x03, 0x25, 0x00, 0x02, 0x00, 0x61, 0x03, 0x25, 0x00, 0x02, 0x00, 0x42, 0x03, 0x07, 0x00, 0x02,
-+ 0x00, 0x62, 0x03, 0x07, 0x00, 0x02, 0x00, 0x42, 0x03, 0x23, 0x00, 0x02, 0x00, 0x62, 0x03, 0x23,
-+ 0x00, 0x02, 0x00, 0x42, 0x03, 0x31, 0x00, 0x02, 0x00, 0x62, 0x03, 0x31, 0x00, 0x02, 0x00, 0xC7,
-+ 0x03, 0x01, 0x00, 0x02, 0x00, 0xE7, 0x03, 0x01, 0x00, 0x02, 0x00, 0x44, 0x03, 0x07, 0x00, 0x02,
-+ 0x00, 0x64, 0x03, 0x07, 0x00, 0x02, 0x00, 0x44, 0x03, 0x23, 0x00, 0x02, 0x00, 0x64, 0x03, 0x23,
-+ 0x00, 0x02, 0x00, 0x44, 0x03, 0x31, 0x00, 0x02, 0x00, 0x64, 0x03, 0x31, 0x00, 0x02, 0x00, 0x44,
-+ 0x03, 0x27, 0x00, 0x02, 0x00, 0x64, 0x03, 0x27, 0x00, 0x02, 0x00, 0x44, 0x03, 0x2D, 0x00, 0x02,
-+ 0x00, 0x64, 0x03, 0x2D, 0x00, 0x02, 0x01, 0x12, 0x03, 0x00, 0x00, 0x02, 0x01, 0x13, 0x03, 0x00,
-+ 0x00, 0x02, 0x01, 0x12, 0x03, 0x01, 0x00, 0x02, 0x01, 0x13, 0x03, 0x01, 0x00, 0x02, 0x00, 0x45,
-+ 0x03, 0x2D, 0x00, 0x02, 0x00, 0x65, 0x03, 0x2D, 0x00, 0x02, 0x00, 0x45, 0x03, 0x30, 0x00, 0x02,
-+ 0x00, 0x65, 0x03, 0x30, 0x00, 0x02, 0x01, 0x14, 0x03, 0x27, 0x00, 0x02, 0x01, 0x15, 0x03, 0x27,
-+ 0x00, 0x02, 0x00, 0x46, 0x03, 0x07, 0x00, 0x02, 0x00, 0x66, 0x03, 0x07, 0x00, 0x02, 0x00, 0x47,
-+ 0x03, 0x04, 0x00, 0x02, 0x00, 0x67, 0x03, 0x04, 0x00, 0x02, 0x00, 0x48, 0x03, 0x07, 0x00, 0x02,
-+ 0x00, 0x68, 0x03, 0x07, 0x00, 0x02, 0x00, 0x48, 0x03, 0x23, 0x00, 0x02, 0x00, 0x68, 0x03, 0x23,
-+ 0x00, 0x02, 0x00, 0x48, 0x03, 0x08, 0x00, 0x02, 0x00, 0x68, 0x03, 0x08, 0x00, 0x02, 0x00, 0x48,
-+ 0x03, 0x27, 0x00, 0x02, 0x00, 0x68, 0x03, 0x27, 0x00, 0x02, 0x00, 0x48, 0x03, 0x2E, 0x00, 0x02,
-+ 0x00, 0x68, 0x03, 0x2E, 0x00, 0x02, 0x00, 0x49, 0x03, 0x30, 0x00, 0x02, 0x00, 0x69, 0x03, 0x30,
-+ 0x00, 0x02, 0x00, 0x49, 0x03, 0x44, 0x00, 0x02, 0x00, 0x69, 0x03, 0x44, 0x00, 0x02, 0x00, 0x4B,
-+ 0x03, 0x01, 0x00, 0x02, 0x00, 0x6B, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4B, 0x03, 0x23, 0x00, 0x02,
-+ 0x00, 0x6B, 0x03, 0x23, 0x00, 0x02, 0x00, 0x4B, 0x03, 0x31, 0x00, 0x02, 0x00, 0x6B, 0x03, 0x31,
-+ 0x00, 0x02, 0x00, 0x4C, 0x03, 0x23, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x23, 0x00, 0x02, 0x1E, 0x36,
-+ 0x03, 0x04, 0x00, 0x02, 0x1E, 0x37, 0x03, 0x04, 0x00, 0x02, 0x00, 0x4C, 0x03, 0x31, 0x00, 0x02,
-+ 0x00, 0x6C, 0x03, 0x31, 0x00, 0x02, 0x00, 0x4C, 0x03, 0x2D, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x2D,
-+ 0x00, 0x02, 0x00, 0x4D, 0x03, 0x01, 0x00, 0x02, 0x00, 0x6D, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4D,
-+ 0x03, 0x07, 0x00, 0x02, 0x00, 0x6D, 0x03, 0x07, 0x00, 0x02, 0x00, 0x4D, 0x03, 0x23, 0x00, 0x02,
-+ 0x00, 0x6D, 0x03, 0x23, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x07, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x07,
-+ 0x00, 0x02, 0x00, 0x4E, 0x03, 0x23, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x23, 0x00, 0x02, 0x00, 0x4E,
-+ 0x03, 0x31, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x31, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x2D, 0x00, 0x02,
-+ 0x00, 0x6E, 0x03, 0x2D, 0x00, 0x02, 0x00, 0xD5, 0x03, 0x01, 0x00, 0x02, 0x00, 0xF5, 0x03, 0x01,
-+ 0x00, 0x02, 0x00, 0xD5, 0x03, 0x08, 0x00, 0x02, 0x00, 0xF5, 0x03, 0x08, 0x00, 0x02, 0x01, 0x4C,
-+ 0x03, 0x00, 0x00, 0x02, 0x01, 0x4D, 0x03, 0x00, 0x00, 0x02, 0x01, 0x4C, 0x03, 0x01, 0x00, 0x02,
-+ 0x01, 0x4D, 0x03, 0x01, 0x00, 0x02, 0x00, 0x50, 0x03, 0x01, 0x00, 0x02, 0x00, 0x70, 0x03, 0x01,
-+ 0x00, 0x02, 0x00, 0x50, 0x03, 0x07, 0x00, 0x02, 0x00, 0x70, 0x03, 0x07, 0x00, 0x02, 0x00, 0x52,
-+ 0x03, 0x07, 0x00, 0x02, 0x00, 0x72, 0x03, 0x07, 0x00, 0x02, 0x00, 0x52, 0x03, 0x23, 0x00, 0x02,
-+ 0x00, 0x72, 0x03, 0x23, 0x00, 0x02, 0x1E, 0x5A, 0x03, 0x04, 0x00, 0x02, 0x1E, 0x5B, 0x03, 0x04,
-+ 0x00, 0x02, 0x00, 0x52, 0x03, 0x31, 0x00, 0x02, 0x00, 0x72, 0x03, 0x31, 0x00, 0x02, 0x00, 0x53,
-+ 0x03, 0x07, 0x00, 0x02, 0x00, 0x73, 0x03, 0x07, 0x00, 0x02, 0x00, 0x53, 0x03, 0x23, 0x00, 0x02,
-+ 0x00, 0x73, 0x03, 0x23, 0x00, 0x02, 0x01, 0x5A, 0x03, 0x07, 0x00, 0x02, 0x01, 0x5B, 0x03, 0x07,
-+ 0x00, 0x02, 0x01, 0x60, 0x03, 0x07, 0x00, 0x02, 0x01, 0x61, 0x03, 0x07, 0x00, 0x02, 0x1E, 0x60,
-+ 0x03, 0x23, 0x00, 0x02, 0x1E, 0x61, 0x03, 0x23, 0x00, 0x02, 0x00, 0x54, 0x03, 0x07, 0x00, 0x02,
-+ 0x00, 0x74, 0x03, 0x07, 0x00, 0x02, 0x00, 0x54, 0x03, 0x23, 0x00, 0x02, 0x00, 0x74, 0x03, 0x23,
-+ 0x00, 0x02, 0x00, 0x54, 0x03, 0x31, 0x00, 0x02, 0x00, 0x74, 0x03, 0x31, 0x00, 0x02, 0x00, 0x54,
-+ 0x03, 0x2D, 0x00, 0x02, 0x00, 0x74, 0x03, 0x2D, 0x00, 0x02, 0x00, 0x55, 0x03, 0x24, 0x00, 0x02,
-+ 0x00, 0x75, 0x03, 0x24, 0x00, 0x02, 0x00, 0x55, 0x03, 0x30, 0x00, 0x02, 0x00, 0x75, 0x03, 0x30,
-+ 0x00, 0x02, 0x00, 0x55, 0x03, 0x2D, 0x00, 0x02, 0x00, 0x75, 0x03, 0x2D, 0x00, 0x02, 0x01, 0x68,
-+ 0x03, 0x01, 0x00, 0x02, 0x01, 0x69, 0x03, 0x01, 0x00, 0x02, 0x01, 0x6A, 0x03, 0x08, 0x00, 0x02,
-+ 0x01, 0x6B, 0x03, 0x08, 0x00, 0x02, 0x00, 0x56, 0x03, 0x03, 0x00, 0x02, 0x00, 0x76, 0x03, 0x03,
-+ 0x00, 0x02, 0x00, 0x56, 0x03, 0x23, 0x00, 0x02, 0x00, 0x76, 0x03, 0x23, 0x00, 0x02, 0x00, 0x57,
-+ 0x03, 0x00, 0x00, 0x02, 0x00, 0x77, 0x03, 0x00, 0x00, 0x02, 0x00, 0x57, 0x03, 0x01, 0x00, 0x02,
-+ 0x00, 0x77, 0x03, 0x01, 0x00, 0x02, 0x00, 0x57, 0x03, 0x08, 0x00, 0x02, 0x00, 0x77, 0x03, 0x08,
-+ 0x00, 0x02, 0x00, 0x57, 0x03, 0x07, 0x00, 0x02, 0x00, 0x77, 0x03, 0x07, 0x00, 0x02, 0x00, 0x57,
-+ 0x03, 0x23, 0x00, 0x02, 0x00, 0x77, 0x03, 0x23, 0x00, 0x02, 0x00, 0x58, 0x03, 0x07, 0x00, 0x02,
-+ 0x00, 0x78, 0x03, 0x07, 0x00, 0x02, 0x00, 0x58, 0x03, 0x08, 0x00, 0x02, 0x00, 0x78, 0x03, 0x08,
-+ 0x00, 0x02, 0x00, 0x59, 0x03, 0x07, 0x00, 0x02, 0x00, 0x79, 0x03, 0x07, 0x00, 0x02, 0x00, 0x5A,
-+ 0x03, 0x02, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x02, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x23, 0x00, 0x02,
-+ 0x00, 0x7A, 0x03, 0x23, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x31, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x31,
-+ 0x00, 0x02, 0x00, 0x68, 0x03, 0x31, 0x00, 0x02, 0x00, 0x74, 0x03, 0x08, 0x00, 0x02, 0x00, 0x77,
-+ 0x03, 0x0A, 0x00, 0x02, 0x00, 0x79, 0x03, 0x0A, 0x00, 0x02, 0x01, 0x7F, 0x03, 0x07, 0x00, 0x02,
-+ 0x00, 0x41, 0x03, 0x23, 0x00, 0x02, 0x00, 0x61, 0x03, 0x23, 0x00, 0x02, 0x00, 0x41, 0x03, 0x09,
-+ 0x00, 0x02, 0x00, 0x61, 0x03, 0x09, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x01, 0x00, 0x02, 0x00, 0xE2,
-+ 0x03, 0x01, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x00, 0x00, 0x02, 0x00, 0xE2, 0x03, 0x00, 0x00, 0x02,
-+ 0x00, 0xC2, 0x03, 0x09, 0x00, 0x02, 0x00, 0xE2, 0x03, 0x09, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x03,
-+ 0x00, 0x02, 0x00, 0xE2, 0x03, 0x03, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x23, 0x00, 0x02, 0x00, 0xE2,
-+ 0x03, 0x23, 0x00, 0x02, 0x01, 0x02, 0x03, 0x01, 0x00, 0x02, 0x01, 0x03, 0x03, 0x01, 0x00, 0x02,
-+ 0x01, 0x02, 0x03, 0x00, 0x00, 0x02, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x01, 0x02, 0x03, 0x09,
-+ 0x00, 0x02, 0x01, 0x03, 0x03, 0x09, 0x00, 0x02, 0x01, 0x02, 0x03, 0x03, 0x00, 0x02, 0x01, 0x03,
-+ 0x03, 0x03, 0x00, 0x02, 0x01, 0x02, 0x03, 0x23, 0x00, 0x02, 0x01, 0x03, 0x03, 0x23, 0x00, 0x02,
-+ 0x00, 0x45, 0x03, 0x23, 0x00, 0x02, 0x00, 0x65, 0x03, 0x23, 0x00, 0x02, 0x00, 0x45, 0x03, 0x09,
-+ 0x00, 0x02, 0x00, 0x65, 0x03, 0x09, 0x00, 0x02, 0x00, 0x45, 0x03, 0x03, 0x00, 0x02, 0x00, 0x65,
-+ 0x03, 0x03, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x01, 0x00, 0x02, 0x00, 0xEA, 0x03, 0x01, 0x00, 0x02,
-+ 0x00, 0xCA, 0x03, 0x00, 0x00, 0x02, 0x00, 0xEA, 0x03, 0x00, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x09,
-+ 0x00, 0x02, 0x00, 0xEA, 0x03, 0x09, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x03, 0x00, 0x02, 0x00, 0xEA,
-+ 0x03, 0x03, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x23, 0x00, 0x02, 0x00, 0xEA, 0x03, 0x23, 0x00, 0x02,
-+ 0x00, 0x49, 0x03, 0x09, 0x00, 0x02, 0x00, 0x69, 0x03, 0x09, 0x00, 0x02, 0x00, 0x49, 0x03, 0x23,
-+ 0x00, 0x02, 0x00, 0x69, 0x03, 0x23, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x23, 0x00, 0x02, 0x00, 0x6F,
-+ 0x03, 0x23, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x09, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x09, 0x00, 0x02,
-+ 0x00, 0xD4, 0x03, 0x01, 0x00, 0x02, 0x00, 0xF4, 0x03, 0x01, 0x00, 0x02, 0x00, 0xD4, 0x03, 0x00,
-+ 0x00, 0x02, 0x00, 0xF4, 0x03, 0x00, 0x00, 0x02, 0x00, 0xD4, 0x03, 0x09, 0x00, 0x02, 0x00, 0xF4,
-+ 0x03, 0x09, 0x00, 0x02, 0x00, 0xD4, 0x03, 0x03, 0x00, 0x02, 0x00, 0xF4, 0x03, 0x03, 0x00, 0x02,
-+ 0x00, 0xD4, 0x03, 0x23, 0x00, 0x02, 0x00, 0xF4, 0x03, 0x23, 0x00, 0x02, 0x00, 0xD3, 0x03, 0x1B,
-+ 0x00, 0x02, 0x00, 0xF3, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xD2, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xF2,
-+ 0x03, 0x1B, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x09, 0x00, 0x02, 0x01, 0xA1, 0x03, 0x09, 0x00, 0x02,
-+ 0x00, 0xD5, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xF5, 0x03, 0x1B, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x23,
-+ 0x00, 0x02, 0x01, 0xA1, 0x03, 0x23, 0x00, 0x02, 0x00, 0x55, 0x03, 0x23, 0x00, 0x02, 0x00, 0x75,
-+ 0x03, 0x23, 0x00, 0x02, 0x00, 0x55, 0x03, 0x09, 0x00, 0x02, 0x00, 0x75, 0x03, 0x09, 0x00, 0x02,
-+ 0x00, 0xDA, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xFA, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xD9, 0x03, 0x1B,
-+ 0x00, 0x02, 0x00, 0xF9, 0x03, 0x1B, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x09, 0x00, 0x02, 0x01, 0xB0,
-+ 0x03, 0x09, 0x00, 0x02, 0x01, 0x68, 0x03, 0x1B, 0x00, 0x02, 0x01, 0x69, 0x03, 0x1B, 0x00, 0x02,
-+ 0x01, 0xAF, 0x03, 0x23, 0x00, 0x02, 0x01, 0xB0, 0x03, 0x23, 0x00, 0x02, 0x00, 0x59, 0x03, 0x00,
-+ 0x00, 0x02, 0x00, 0x79, 0x03, 0x00, 0x00, 0x02, 0x00, 0x59, 0x03, 0x23, 0x00, 0x02, 0x00, 0x79,
-+ 0x03, 0x23, 0x00, 0x02, 0x00, 0x59, 0x03, 0x09, 0x00, 0x02, 0x00, 0x79, 0x03, 0x09, 0x00, 0x02,
-+ 0x00, 0x59, 0x03, 0x03, 0x00, 0x02, 0x00, 0x79, 0x03, 0x03, 0x00, 0x01, 0x01, 0xF1, 0x00, 0xC0,
-+ 0x00, 0xC1, 0x00, 0xC2, 0x00, 0xC3, 0x00, 0xC4, 0x00, 0xC5, 0x00, 0xC7, 0x00, 0xC8, 0x00, 0xC9,
-+ 0x00, 0xCA, 0x00, 0xCB, 0x00, 0xCC, 0x00, 0xCD, 0x00, 0xCE, 0x00, 0xCF, 0x00, 0xD1, 0x00, 0xD2,
-+ 0x00, 0xD3, 0x00, 0xD4, 0x00, 0xD5, 0x00, 0xD6, 0x00, 0xD9, 0x00, 0xDA, 0x00, 0xDB, 0x00, 0xDC,
-+ 0x00, 0xDD, 0x00, 0xE0, 0x00, 0xE1, 0x00, 0xE2, 0x00, 0xE3, 0x00, 0xE4, 0x00, 0xE5, 0x00, 0xE7,
-+ 0x00, 0xE8, 0x00, 0xE9, 0x00, 0xEA, 0x00, 0xEB, 0x00, 0xEC, 0x00, 0xED, 0x00, 0xEE, 0x00, 0xEF,
-+ 0x00, 0xF1, 0x00, 0xF2, 0x00, 0xF3, 0x00, 0xF4, 0x00, 0xF5, 0x00, 0xF6, 0x00, 0xF9, 0x00, 0xFA,
-+ 0x00, 0xFB, 0x00, 0xFC, 0x00, 0xFD, 0x00, 0xFF, 0x01, 0x00, 0x01, 0x01, 0x01, 0x02, 0x01, 0x03,
-+ 0x01, 0x04, 0x01, 0x05, 0x01, 0x06, 0x01, 0x07, 0x01, 0x08, 0x01, 0x09, 0x01, 0x0A, 0x01, 0x0B,
-+ 0x01, 0x0C, 0x01, 0x0D, 0x01, 0x0E, 0x01, 0x0F, 0x01, 0x12, 0x01, 0x13, 0x01, 0x14, 0x01, 0x15,
-+ 0x01, 0x16, 0x01, 0x17, 0x01, 0x18, 0x01, 0x19, 0x01, 0x1A, 0x01, 0x1B, 0x01, 0x1C, 0x01, 0x1D,
-+ 0x01, 0x1E, 0x01, 0x1F, 0x01, 0x20, 0x01, 0x21, 0x01, 0x22, 0x01, 0x23, 0x01, 0x24, 0x01, 0x25,
-+ 0x01, 0x28, 0x01, 0x29, 0x01, 0x2A, 0x01, 0x2B, 0x01, 0x2C, 0x01, 0x2D, 0x01, 0x2E, 0x01, 0x2F,
-+ 0x01, 0x30, 0x01, 0x34, 0x01, 0x35, 0x01, 0x36, 0x01, 0x37, 0x01, 0x39, 0x01, 0x3A, 0x01, 0x3B,
-+ 0x01, 0x3C, 0x01, 0x3D, 0x01, 0x3E, 0x01, 0x43, 0x01, 0x44, 0x01, 0x45, 0x01, 0x46, 0x01, 0x47,
-+ 0x01, 0x48, 0x01, 0x4C, 0x01, 0x4D, 0x01, 0x4E, 0x01, 0x4F, 0x01, 0x50, 0x01, 0x51, 0x01, 0x54,
-+ 0x01, 0x55, 0x01, 0x56, 0x01, 0x57, 0x01, 0x58, 0x01, 0x59, 0x01, 0x5A, 0x01, 0x5B, 0x01, 0x5C,
-+ 0x01, 0x5D, 0x01, 0x5E, 0x01, 0x5F, 0x01, 0x60, 0x01, 0x61, 0x01, 0x62, 0x01, 0x63, 0x01, 0x64,
-+ 0x01, 0x65, 0x01, 0x68, 0x01, 0x69, 0x01, 0x6A, 0x01, 0x6B, 0x01, 0x6C, 0x01, 0x6D, 0x01, 0x6E,
-+ 0x01, 0x6F, 0x01, 0x70, 0x01, 0x71, 0x01, 0x72, 0x01, 0x73, 0x01, 0x74, 0x01, 0x75, 0x01, 0x76,
-+ 0x01, 0x77, 0x01, 0x78, 0x01, 0x79, 0x01, 0x7A, 0x01, 0x7B, 0x01, 0x7C, 0x01, 0x7D, 0x01, 0x7E,
-+ 0x01, 0xA0, 0x01, 0xA1, 0x01, 0xAF, 0x01, 0xB0, 0x01, 0xCD, 0x01, 0xCE, 0x01, 0xCF, 0x01, 0xD0,
-+ 0x01, 0xD1, 0x01, 0xD2, 0x01, 0xD3, 0x01, 0xD4, 0x01, 0xD5, 0x01, 0xD6, 0x01, 0xD7, 0x01, 0xD8,
-+ 0x01, 0xD9, 0x01, 0xDA, 0x01, 0xDB, 0x01, 0xDC, 0x01, 0xDE, 0x01, 0xDF, 0x01, 0xE0, 0x01, 0xE1,
-+ 0x01, 0xE2, 0x01, 0xE3, 0x01, 0xE6, 0x01, 0xE7, 0x01, 0xE8, 0x01, 0xE9, 0x01, 0xEA, 0x01, 0xEB,
-+ 0x01, 0xEC, 0x01, 0xED, 0x01, 0xEE, 0x01, 0xEF, 0x01, 0xF0, 0x01, 0xF4, 0x01, 0xF5, 0x01, 0xF8,
-+ 0x01, 0xF9, 0x01, 0xFA, 0x01, 0xFB, 0x01, 0xFC, 0x01, 0xFD, 0x01, 0xFE, 0x01, 0xFF, 0x02, 0x00,
-+ 0x02, 0x01, 0x02, 0x02, 0x02, 0x03, 0x02, 0x04, 0x02, 0x05, 0x02, 0x06, 0x02, 0x07, 0x02, 0x08,
-+ 0x02, 0x09, 0x02, 0x0A, 0x02, 0x0B, 0x02, 0x0C, 0x02, 0x0D, 0x02, 0x0E, 0x02, 0x0F, 0x02, 0x10,
-+ 0x02, 0x11, 0x02, 0x12, 0x02, 0x13, 0x02, 0x14, 0x02, 0x15, 0x02, 0x16, 0x02, 0x17, 0x02, 0x18,
-+ 0x02, 0x19, 0x02, 0x1A, 0x02, 0x1B, 0x02, 0x1E, 0x02, 0x1F, 0x02, 0x26, 0x02, 0x27, 0x02, 0x28,
-+ 0x02, 0x29, 0x02, 0x2A, 0x02, 0x2B, 0x02, 0x2C, 0x02, 0x2D, 0x02, 0x2E, 0x02, 0x2F, 0x02, 0x30,
-+ 0x02, 0x31, 0x02, 0x32, 0x02, 0x33, 0x1E, 0x00, 0x1E, 0x01, 0x1E, 0x02, 0x1E, 0x03, 0x1E, 0x04,
-+ 0x1E, 0x05, 0x1E, 0x06, 0x1E, 0x07, 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0x0A, 0x1E, 0x0B, 0x1E, 0x0C,
-+ 0x1E, 0x0D, 0x1E, 0x0E, 0x1E, 0x0F, 0x1E, 0x10, 0x1E, 0x11, 0x1E, 0x12, 0x1E, 0x13, 0x1E, 0x14,
-+ 0x1E, 0x15, 0x1E, 0x16, 0x1E, 0x17, 0x1E, 0x18, 0x1E, 0x19, 0x1E, 0x1A, 0x1E, 0x1B, 0x1E, 0x1C,
-+ 0x1E, 0x1D, 0x1E, 0x1E, 0x1E, 0x1F, 0x1E, 0x20, 0x1E, 0x21, 0x1E, 0x22, 0x1E, 0x23, 0x1E, 0x24,
-+ 0x1E, 0x25, 0x1E, 0x26, 0x1E, 0x27, 0x1E, 0x28, 0x1E, 0x29, 0x1E, 0x2A, 0x1E, 0x2B, 0x1E, 0x2C,
-+ 0x1E, 0x2D, 0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0x30, 0x1E, 0x31, 0x1E, 0x32, 0x1E, 0x33, 0x1E, 0x34,
-+ 0x1E, 0x35, 0x1E, 0x36, 0x1E, 0x37, 0x1E, 0x38, 0x1E, 0x39, 0x1E, 0x3A, 0x1E, 0x3B, 0x1E, 0x3C,
-+ 0x1E, 0x3D, 0x1E, 0x3E, 0x1E, 0x3F, 0x1E, 0x40, 0x1E, 0x41, 0x1E, 0x42, 0x1E, 0x43, 0x1E, 0x44,
-+ 0x1E, 0x45, 0x1E, 0x46, 0x1E, 0x47, 0x1E, 0x48, 0x1E, 0x49, 0x1E, 0x4A, 0x1E, 0x4B, 0x1E, 0x4C,
-+ 0x1E, 0x4D, 0x1E, 0x4E, 0x1E, 0x4F, 0x1E, 0x50, 0x1E, 0x51, 0x1E, 0x52, 0x1E, 0x53, 0x1E, 0x54,
-+ 0x1E, 0x55, 0x1E, 0x56, 0x1E, 0x57, 0x1E, 0x58, 0x1E, 0x59, 0x1E, 0x5A, 0x1E, 0x5B, 0x1E, 0x5C,
-+ 0x1E, 0x5D, 0x1E, 0x5E, 0x1E, 0x5F, 0x1E, 0x60, 0x1E, 0x61, 0x1E, 0x62, 0x1E, 0x63, 0x1E, 0x64,
-+ 0x1E, 0x65, 0x1E, 0x66, 0x1E, 0x67, 0x1E, 0x68, 0x1E, 0x69, 0x1E, 0x6A, 0x1E, 0x6B, 0x1E, 0x6C,
-+ 0x1E, 0x6D, 0x1E, 0x6E, 0x1E, 0x6F, 0x1E, 0x70, 0x1E, 0x71, 0x1E, 0x72, 0x1E, 0x73, 0x1E, 0x74,
-+ 0x1E, 0x75, 0x1E, 0x76, 0x1E, 0x77, 0x1E, 0x78, 0x1E, 0x79, 0x1E, 0x7A, 0x1E, 0x7B, 0x1E, 0x7C,
-+ 0x1E, 0x7D, 0x1E, 0x7E, 0x1E, 0x7F, 0x1E, 0x80, 0x1E, 0x81, 0x1E, 0x82, 0x1E, 0x83, 0x1E, 0x84,
-+ 0x1E, 0x85, 0x1E, 0x86, 0x1E, 0x87, 0x1E, 0x88, 0x1E, 0x89, 0x1E, 0x8A, 0x1E, 0x8B, 0x1E, 0x8C,
-+ 0x1E, 0x8D, 0x1E, 0x8E, 0x1E, 0x8F, 0x1E, 0x90, 0x1E, 0x91, 0x1E, 0x92, 0x1E, 0x93, 0x1E, 0x94,
-+ 0x1E, 0x95, 0x1E, 0x96, 0x1E, 0x97, 0x1E, 0x98, 0x1E, 0x99, 0x1E, 0x9B, 0x1E, 0xA0, 0x1E, 0xA1,
-+ 0x1E, 0xA2, 0x1E, 0xA3, 0x1E, 0xA4, 0x1E, 0xA5, 0x1E, 0xA6, 0x1E, 0xA7, 0x1E, 0xA8, 0x1E, 0xA9,
-+ 0x1E, 0xAA, 0x1E, 0xAB, 0x1E, 0xAC, 0x1E, 0xAD, 0x1E, 0xAE, 0x1E, 0xAF, 0x1E, 0xB0, 0x1E, 0xB1,
-+ 0x1E, 0xB2, 0x1E, 0xB3, 0x1E, 0xB4, 0x1E, 0xB5, 0x1E, 0xB6, 0x1E, 0xB7, 0x1E, 0xB8, 0x1E, 0xB9,
-+ 0x1E, 0xBA, 0x1E, 0xBB, 0x1E, 0xBC, 0x1E, 0xBD, 0x1E, 0xBE, 0x1E, 0xBF, 0x1E, 0xC0, 0x1E, 0xC1,
-+ 0x1E, 0xC2, 0x1E, 0xC3, 0x1E, 0xC4, 0x1E, 0xC5, 0x1E, 0xC6, 0x1E, 0xC7, 0x1E, 0xC8, 0x1E, 0xC9,
-+ 0x1E, 0xCA, 0x1E, 0xCB, 0x1E, 0xCC, 0x1E, 0xCD, 0x1E, 0xCE, 0x1E, 0xCF, 0x1E, 0xD0, 0x1E, 0xD1,
-+ 0x1E, 0xD2, 0x1E, 0xD3, 0x1E, 0xD4, 0x1E, 0xD5, 0x1E, 0xD6, 0x1E, 0xD7, 0x1E, 0xD8, 0x1E, 0xD9,
-+ 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xDE, 0x1E, 0xDF, 0x1E, 0xE0, 0x1E, 0xE1,
-+ 0x1E, 0xE2, 0x1E, 0xE3, 0x1E, 0xE4, 0x1E, 0xE5, 0x1E, 0xE6, 0x1E, 0xE7, 0x1E, 0xE8, 0x1E, 0xE9,
-+ 0x1E, 0xEA, 0x1E, 0xEB, 0x1E, 0xEC, 0x1E, 0xED, 0x1E, 0xEE, 0x1E, 0xEF, 0x1E, 0xF0, 0x1E, 0xF1,
-+ 0x1E, 0xF2, 0x1E, 0xF3, 0x1E, 0xF4, 0x1E, 0xF5, 0x1E, 0xF6, 0x1E, 0xF7, 0x1E, 0xF8, 0x1E, 0xF9,
-+ 0x00, 0x01, 0x05, 0xBA, 0x00, 0xAC, 0x01, 0x5E, 0x01, 0x64, 0x01, 0x6A, 0x01, 0x70, 0x01, 0x76,
-+ 0x01, 0x7C, 0x01, 0x82, 0x01, 0x88, 0x01, 0x8E, 0x01, 0x94, 0x01, 0x9A, 0x01, 0xA0, 0x01, 0xA6,
-+ 0x01, 0xAC, 0x01, 0xB2, 0x01, 0xB8, 0x01, 0xBE, 0x01, 0xC4, 0x01, 0xCA, 0x01, 0xD0, 0x01, 0xD6,
-+ 0x01, 0xDC, 0x01, 0xE2, 0x01, 0xE8, 0x01, 0xEE, 0x01, 0xF4, 0x01, 0xFA, 0x02, 0x00, 0x02, 0x06,
-+ 0x02, 0x0C, 0x02, 0x12, 0x02, 0x18, 0x02, 0x1E, 0x02, 0x24, 0x02, 0x2A, 0x02, 0x30, 0x02, 0x38,
-+ 0x02, 0x40, 0x02, 0x46, 0x02, 0x4C, 0x02, 0x54, 0x02, 0x5C, 0x02, 0x62, 0x02, 0x68, 0x02, 0x70,
-+ 0x02, 0x78, 0x02, 0x80, 0x02, 0x88, 0x02, 0x8E, 0x02, 0x94, 0x02, 0x9A, 0x02, 0xA0, 0x02, 0xA6,
-+ 0x02, 0xAC, 0x02, 0xB2, 0x02, 0xB8, 0x02, 0xBE, 0x02, 0xC4, 0x02, 0xCA, 0x02, 0xD0, 0x02, 0xD6,
-+ 0x02, 0xDE, 0x02, 0xE6, 0x02, 0xEE, 0x02, 0xF6, 0x02, 0xFE, 0x03, 0x06, 0x03, 0x0C, 0x03, 0x12,
-+ 0x03, 0x18, 0x03, 0x1E, 0x03, 0x24, 0x03, 0x2A, 0x03, 0x30, 0x03, 0x36, 0x03, 0x3C, 0x03, 0x42,
-+ 0x03, 0x48, 0x03, 0x4E, 0x03, 0x54, 0x03, 0x5A, 0x03, 0x62, 0x03, 0x6A, 0x03, 0x70, 0x03, 0x76,
-+ 0x03, 0x7C, 0x03, 0x82, 0x03, 0x8A, 0x03, 0x92, 0x03, 0x98, 0x03, 0x9E, 0x03, 0xA4, 0x03, 0xAA,
-+ 0x03, 0xB0, 0x03, 0xB6, 0x03, 0xBE, 0x03, 0xC6, 0x03, 0xCE, 0x03, 0xD6, 0x03, 0xDE, 0x03, 0xE6,
-+ 0x03, 0xEC, 0x03, 0xF2, 0x03, 0xF8, 0x03, 0xFE, 0x04, 0x06, 0x04, 0x0E, 0x04, 0x14, 0x04, 0x1A,
-+ 0x04, 0x20, 0x04, 0x26, 0x04, 0x2C, 0x04, 0x32, 0x04, 0x38, 0x04, 0x3E, 0x04, 0x46, 0x04, 0x4E,
-+ 0x04, 0x56, 0x04, 0x5E, 0x04, 0x64, 0x04, 0x6A, 0x04, 0x70, 0x04, 0x76, 0x04, 0x7C, 0x04, 0x82,
-+ 0x04, 0x8A, 0x04, 0x92, 0x04, 0x9A, 0x04, 0xA2, 0x04, 0xA8, 0x04, 0xAE, 0x04, 0xB4, 0x04, 0xBA,
-+ 0x04, 0xC0, 0x04, 0xC6, 0x04, 0xCE, 0x04, 0xD6, 0x04, 0xDE, 0x04, 0xE6, 0x04, 0xEC, 0x04, 0xF2,
-+ 0x04, 0xF8, 0x04, 0xFE, 0x05, 0x04, 0x05, 0x0A, 0x05, 0x12, 0x05, 0x1A, 0x05, 0x22, 0x05, 0x2A,
-+ 0x05, 0x30, 0x05, 0x36, 0x05, 0x3C, 0x05, 0x42, 0x05, 0x48, 0x05, 0x4E, 0x05, 0x54, 0x05, 0x5A,
-+ 0x05, 0x60, 0x05, 0x66, 0x05, 0x6C, 0x05, 0x72, 0x05, 0x78, 0x05, 0x7E, 0x05, 0x84, 0x05, 0x8A,
-+ 0x05, 0x90, 0x05, 0x96, 0x05, 0x9C, 0x05, 0xA2, 0x05, 0xA8, 0x05, 0xAE, 0x05, 0xB4, 0x00, 0x02,
-+ 0x00, 0x41, 0x03, 0x40, 0x00, 0x02, 0x00, 0x41, 0x03, 0x41, 0x00, 0x02, 0x00, 0x45, 0x03, 0x40,
-+ 0x00, 0x02, 0x00, 0x45, 0x03, 0x41, 0x00, 0x02, 0x00, 0x49, 0x03, 0x40, 0x00, 0x02, 0x00, 0x49,
-+ 0x03, 0x41, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x40, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x41, 0x00, 0x02,
-+ 0x00, 0x55, 0x03, 0x40, 0x00, 0x02, 0x00, 0x55, 0x03, 0x41, 0x00, 0x02, 0x00, 0x59, 0x03, 0x41,
-+ 0x00, 0x02, 0x00, 0x61, 0x03, 0x40, 0x00, 0x02, 0x00, 0x61, 0x03, 0x41, 0x00, 0x02, 0x00, 0x65,
-+ 0x03, 0x40, 0x00, 0x02, 0x00, 0x65, 0x03, 0x41, 0x00, 0x02, 0x00, 0x69, 0x03, 0x40, 0x00, 0x02,
-+ 0x00, 0x69, 0x03, 0x41, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x40, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x41,
-+ 0x00, 0x02, 0x00, 0x75, 0x03, 0x40, 0x00, 0x02, 0x00, 0x75, 0x03, 0x41, 0x00, 0x02, 0x00, 0x79,
-+ 0x03, 0x41, 0x00, 0x02, 0x00, 0x43, 0x03, 0x41, 0x00, 0x02, 0x00, 0x63, 0x03, 0x41, 0x00, 0x02,
-+ 0x21, 0x2A, 0x03, 0x27, 0x00, 0x02, 0x00, 0x4C, 0x03, 0x41, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x41,
-+ 0x00, 0x02, 0x00, 0x4E, 0x03, 0x41, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x41, 0x00, 0x02, 0x00, 0x52,
-+ 0x03, 0x41, 0x00, 0x02, 0x00, 0x72, 0x03, 0x41, 0x00, 0x02, 0x00, 0x53, 0x03, 0x41, 0x00, 0x02,
-+ 0x00, 0x73, 0x03, 0x41, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x41, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x41,
-+ 0x00, 0x03, 0x00, 0x55, 0x03, 0x08, 0x03, 0x04, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x04,
-+ 0x00, 0x02, 0x00, 0xDC, 0x03, 0x01, 0x00, 0x02, 0x00, 0xFC, 0x03, 0x01, 0x00, 0x03, 0x00, 0x55,
-+ 0x03, 0x08, 0x03, 0x0C, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x0C, 0x00, 0x02, 0x00, 0xDC,
-+ 0x03, 0x40, 0x00, 0x02, 0x00, 0xFC, 0x03, 0x40, 0x00, 0x03, 0x00, 0x41, 0x03, 0x08, 0x03, 0x04,
-+ 0x00, 0x03, 0x00, 0x61, 0x03, 0x08, 0x03, 0x04, 0x00, 0x03, 0x00, 0x41, 0x03, 0x07, 0x03, 0x04,
-+ 0x00, 0x03, 0x00, 0x61, 0x03, 0x07, 0x03, 0x04, 0x00, 0x02, 0x21, 0x2A, 0x03, 0x0C, 0x00, 0x02,
-+ 0x01, 0xEA, 0x03, 0x04, 0x00, 0x02, 0x01, 0xEB, 0x03, 0x04, 0x00, 0x02, 0x00, 0x47, 0x03, 0x41,
-+ 0x00, 0x02, 0x00, 0x67, 0x03, 0x41, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x40, 0x00, 0x02, 0x00, 0x6E,
-+ 0x03, 0x40, 0x00, 0x02, 0x00, 0xC5, 0x03, 0x41, 0x00, 0x02, 0x00, 0xE5, 0x03, 0x41, 0x00, 0x02,
-+ 0x00, 0xC6, 0x03, 0x41, 0x00, 0x02, 0x00, 0xE6, 0x03, 0x41, 0x00, 0x02, 0x00, 0xD8, 0x03, 0x41,
-+ 0x00, 0x02, 0x00, 0xF8, 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x08, 0x03, 0x04, 0x00, 0x03,
-+ 0x00, 0x6F, 0x03, 0x08, 0x03, 0x04, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x03, 0x03, 0x04, 0x00, 0x03,
-+ 0x00, 0x6F, 0x03, 0x03, 0x03, 0x04, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x07, 0x03, 0x04, 0x00, 0x03,
-+ 0x00, 0x6F, 0x03, 0x07, 0x03, 0x04, 0x00, 0x02, 0x00, 0xC7, 0x03, 0x41, 0x00, 0x02, 0x00, 0xE7,
-+ 0x03, 0x41, 0x00, 0x02, 0x01, 0x12, 0x03, 0x40, 0x00, 0x02, 0x01, 0x13, 0x03, 0x40, 0x00, 0x02,
-+ 0x01, 0x12, 0x03, 0x41, 0x00, 0x02, 0x01, 0x13, 0x03, 0x41, 0x00, 0x02, 0x02, 0x28, 0x03, 0x06,
-+ 0x00, 0x02, 0x02, 0x29, 0x03, 0x06, 0x00, 0x02, 0x00, 0xCF, 0x03, 0x01, 0x00, 0x02, 0x00, 0xEF,
-+ 0x03, 0x01, 0x00, 0x02, 0x00, 0x4B, 0x03, 0x41, 0x00, 0x02, 0x00, 0x6B, 0x03, 0x41, 0x00, 0x02,
-+ 0x21, 0x2A, 0x03, 0x23, 0x00, 0x02, 0x21, 0x2A, 0x03, 0x31, 0x00, 0x03, 0x00, 0x4C, 0x03, 0x04,
-+ 0x03, 0x23, 0x00, 0x03, 0x00, 0x6C, 0x03, 0x04, 0x03, 0x23, 0x00, 0x02, 0x00, 0x4D, 0x03, 0x41,
-+ 0x00, 0x02, 0x00, 0x6D, 0x03, 0x41, 0x00, 0x02, 0x00, 0xD5, 0x03, 0x41, 0x00, 0x02, 0x00, 0xF5,
-+ 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x03, 0x03, 0x08, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x03,
-+ 0x03, 0x08, 0x00, 0x02, 0x01, 0x4C, 0x03, 0x40, 0x00, 0x02, 0x01, 0x4D, 0x03, 0x40, 0x00, 0x02,
-+ 0x01, 0x4C, 0x03, 0x41, 0x00, 0x02, 0x01, 0x4D, 0x03, 0x41, 0x00, 0x02, 0x00, 0x50, 0x03, 0x41,
-+ 0x00, 0x02, 0x00, 0x70, 0x03, 0x41, 0x00, 0x03, 0x00, 0x52, 0x03, 0x04, 0x03, 0x23, 0x00, 0x03,
-+ 0x00, 0x72, 0x03, 0x04, 0x03, 0x23, 0x00, 0x03, 0x00, 0x53, 0x03, 0x01, 0x03, 0x07, 0x00, 0x03,
-+ 0x00, 0x73, 0x03, 0x01, 0x03, 0x07, 0x00, 0x03, 0x00, 0x53, 0x03, 0x0C, 0x03, 0x07, 0x00, 0x03,
-+ 0x00, 0x73, 0x03, 0x0C, 0x03, 0x07, 0x00, 0x02, 0x1E, 0x62, 0x03, 0x07, 0x00, 0x02, 0x1E, 0x63,
-+ 0x03, 0x07, 0x00, 0x02, 0x01, 0x68, 0x03, 0x41, 0x00, 0x02, 0x01, 0x69, 0x03, 0x41, 0x00, 0x03,
-+ 0x00, 0x55, 0x03, 0x04, 0x03, 0x08, 0x00, 0x03, 0x00, 0x75, 0x03, 0x04, 0x03, 0x08, 0x00, 0x02,
-+ 0x00, 0x57, 0x03, 0x40, 0x00, 0x02, 0x00, 0x77, 0x03, 0x40, 0x00, 0x02, 0x00, 0x57, 0x03, 0x41,
-+ 0x00, 0x02, 0x00, 0x77, 0x03, 0x41, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x41, 0x00, 0x02, 0x00, 0xE2,
-+ 0x03, 0x41, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x40, 0x00, 0x02, 0x00, 0xE2, 0x03, 0x40, 0x00, 0x03,
-+ 0x00, 0x41, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03,
-+ 0x00, 0x41, 0x03, 0x02, 0x03, 0x03, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02, 0x03, 0x03, 0x00, 0x02,
-+ 0x1E, 0xA0, 0x03, 0x02, 0x00, 0x02, 0x1E, 0xA1, 0x03, 0x02, 0x00, 0x02, 0x01, 0x02, 0x03, 0x41,
-+ 0x00, 0x02, 0x01, 0x03, 0x03, 0x41, 0x00, 0x02, 0x01, 0x02, 0x03, 0x40, 0x00, 0x02, 0x01, 0x03,
-+ 0x03, 0x40, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x09, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06,
-+ 0x03, 0x09, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x03, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06,
-+ 0x03, 0x03, 0x00, 0x02, 0x1E, 0xA0, 0x03, 0x06, 0x00, 0x02, 0x1E, 0xA1, 0x03, 0x06, 0x00, 0x02,
-+ 0x00, 0xCA, 0x03, 0x41, 0x00, 0x02, 0x00, 0xEA, 0x03, 0x41, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x40,
-+ 0x00, 0x02, 0x00, 0xEA, 0x03, 0x40, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03,
-+ 0x00, 0x65, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x03, 0x00, 0x03,
-+ 0x00, 0x65, 0x03, 0x02, 0x03, 0x03, 0x00, 0x02, 0x1E, 0xB8, 0x03, 0x02, 0x00, 0x02, 0x1E, 0xB9,
-+ 0x03, 0x02, 0x00, 0x02, 0x00, 0xD4, 0x03, 0x41, 0x00, 0x02, 0x00, 0xF4, 0x03, 0x41, 0x00, 0x02,
-+ 0x00, 0xD4, 0x03, 0x40, 0x00, 0x02, 0x00, 0xF4, 0x03, 0x40, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02,
-+ 0x03, 0x09, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02,
-+ 0x03, 0x03, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02, 0x03, 0x03, 0x00, 0x02, 0x1E, 0xCC, 0x03, 0x02,
-+ 0x00, 0x02, 0x1E, 0xCD, 0x03, 0x02, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x01, 0x00, 0x02, 0x01, 0xA1,
-+ 0x03, 0x01, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x00, 0x00, 0x02, 0x01, 0xA1, 0x03, 0x00, 0x00, 0x02,
-+ 0x1E, 0xCE, 0x03, 0x1B, 0x00, 0x02, 0x1E, 0xCF, 0x03, 0x1B, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x03,
-+ 0x00, 0x02, 0x01, 0xA1, 0x03, 0x03, 0x00, 0x02, 0x1E, 0xCC, 0x03, 0x1B, 0x00, 0x02, 0x1E, 0xCD,
-+ 0x03, 0x1B, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x01, 0x00, 0x02, 0x01, 0xB0, 0x03, 0x01, 0x00, 0x02,
-+ 0x01, 0xAF, 0x03, 0x00, 0x00, 0x02, 0x01, 0xB0, 0x03, 0x00, 0x00, 0x02, 0x1E, 0xE6, 0x03, 0x1B,
-+ 0x00, 0x02, 0x1E, 0xE7, 0x03, 0x1B, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x03, 0x00, 0x02, 0x01, 0xB0,
-+ 0x03, 0x03, 0x00, 0x02, 0x1E, 0xE4, 0x03, 0x1B, 0x00, 0x02, 0x1E, 0xE5, 0x03, 0x1B, 0x00, 0x02,
-+ 0x00, 0x59, 0x03, 0x40, 0x00, 0x02, 0x00, 0x79, 0x03, 0x40, 0x00, 0x01, 0x00, 0xAC, 0x00, 0xC0,
-+ 0x00, 0xC1, 0x00, 0xC8, 0x00, 0xC9, 0x00, 0xCC, 0x00, 0xCD, 0x00, 0xD2, 0x00, 0xD3, 0x00, 0xD9,
-+ 0x00, 0xDA, 0x00, 0xDD, 0x00, 0xE0, 0x00, 0xE1, 0x00, 0xE8, 0x00, 0xE9, 0x00, 0xEC, 0x00, 0xED,
-+ 0x00, 0xF2, 0x00, 0xF3, 0x00, 0xF9, 0x00, 0xFA, 0x00, 0xFD, 0x01, 0x06, 0x01, 0x07, 0x01, 0x36,
-+ 0x01, 0x39, 0x01, 0x3A, 0x01, 0x43, 0x01, 0x44, 0x01, 0x54, 0x01, 0x55, 0x01, 0x5A, 0x01, 0x5B,
-+ 0x01, 0x79, 0x01, 0x7A, 0x01, 0xD5, 0x01, 0xD6, 0x01, 0xD7, 0x01, 0xD8, 0x01, 0xD9, 0x01, 0xDA,
-+ 0x01, 0xDB, 0x01, 0xDC, 0x01, 0xDE, 0x01, 0xDF, 0x01, 0xE0, 0x01, 0xE1, 0x01, 0xE8, 0x01, 0xEC,
-+ 0x01, 0xED, 0x01, 0xF4, 0x01, 0xF5, 0x01, 0xF8, 0x01, 0xF9, 0x01, 0xFA, 0x01, 0xFB, 0x01, 0xFC,
-+ 0x01, 0xFD, 0x01, 0xFE, 0x01, 0xFF, 0x02, 0x2A, 0x02, 0x2B, 0x02, 0x2C, 0x02, 0x2D, 0x02, 0x30,
-+ 0x02, 0x31, 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0x14, 0x1E, 0x15, 0x1E, 0x16, 0x1E, 0x17, 0x1E, 0x1C,
-+ 0x1E, 0x1D, 0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0x30, 0x1E, 0x31, 0x1E, 0x32, 0x1E, 0x34, 0x1E, 0x38,
-+ 0x1E, 0x39, 0x1E, 0x3E, 0x1E, 0x3F, 0x1E, 0x4C, 0x1E, 0x4D, 0x1E, 0x4E, 0x1E, 0x4F, 0x1E, 0x50,
-+ 0x1E, 0x51, 0x1E, 0x52, 0x1E, 0x53, 0x1E, 0x54, 0x1E, 0x55, 0x1E, 0x5C, 0x1E, 0x5D, 0x1E, 0x64,
-+ 0x1E, 0x65, 0x1E, 0x66, 0x1E, 0x67, 0x1E, 0x68, 0x1E, 0x69, 0x1E, 0x78, 0x1E, 0x79, 0x1E, 0x7A,
-+ 0x1E, 0x7B, 0x1E, 0x80, 0x1E, 0x81, 0x1E, 0x82, 0x1E, 0x83, 0x1E, 0xA4, 0x1E, 0xA5, 0x1E, 0xA6,
-+ 0x1E, 0xA7, 0x1E, 0xA8, 0x1E, 0xA9, 0x1E, 0xAA, 0x1E, 0xAB, 0x1E, 0xAC, 0x1E, 0xAD, 0x1E, 0xAE,
-+ 0x1E, 0xAF, 0x1E, 0xB0, 0x1E, 0xB1, 0x1E, 0xB2, 0x1E, 0xB3, 0x1E, 0xB4, 0x1E, 0xB5, 0x1E, 0xB6,
-+ 0x1E, 0xB7, 0x1E, 0xBE, 0x1E, 0xBF, 0x1E, 0xC0, 0x1E, 0xC1, 0x1E, 0xC2, 0x1E, 0xC3, 0x1E, 0xC4,
-+ 0x1E, 0xC5, 0x1E, 0xC6, 0x1E, 0xC7, 0x1E, 0xD0, 0x1E, 0xD1, 0x1E, 0xD2, 0x1E, 0xD3, 0x1E, 0xD4,
-+ 0x1E, 0xD5, 0x1E, 0xD6, 0x1E, 0xD7, 0x1E, 0xD8, 0x1E, 0xD9, 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC,
-+ 0x1E, 0xDD, 0x1E, 0xDE, 0x1E, 0xDF, 0x1E, 0xE0, 0x1E, 0xE1, 0x1E, 0xE2, 0x1E, 0xE3, 0x1E, 0xE8,
- 0x1E, 0xE9, 0x1E, 0xEA, 0x1E, 0xEB, 0x1E, 0xEC, 0x1E, 0xED, 0x1E, 0xEE, 0x1E, 0xEF, 0x1E, 0xF0,
-- 0x1E, 0xF1, 0x1E, 0xF2, 0x1E, 0xF3, 0x1E, 0xF4, 0x1E, 0xF5, 0x1E, 0xF6, 0x1E, 0xF7, 0x1E, 0xF8,
-- 0x1E, 0xF9, 0x21, 0x2B, 0x00, 0x01, 0x05, 0xBA, 0x00, 0xAC, 0x01, 0x5E, 0x01, 0x64, 0x01, 0x6A,
-- 0x01, 0x70, 0x01, 0x76, 0x01, 0x7C, 0x01, 0x82, 0x01, 0x88, 0x01, 0x8E, 0x01, 0x94, 0x01, 0x9A,
-- 0x01, 0xA0, 0x01, 0xA6, 0x01, 0xAC, 0x01, 0xB2, 0x01, 0xB8, 0x01, 0xBE, 0x01, 0xC4, 0x01, 0xCA,
-- 0x01, 0xD0, 0x01, 0xD6, 0x01, 0xDC, 0x01, 0xE2, 0x01, 0xE8, 0x01, 0xEE, 0x01, 0xF4, 0x01, 0xFA,
-- 0x02, 0x00, 0x02, 0x06, 0x02, 0x0C, 0x02, 0x12, 0x02, 0x18, 0x02, 0x1E, 0x02, 0x24, 0x02, 0x2A,
-- 0x02, 0x30, 0x02, 0x38, 0x02, 0x40, 0x02, 0x46, 0x02, 0x4C, 0x02, 0x54, 0x02, 0x5C, 0x02, 0x62,
-- 0x02, 0x68, 0x02, 0x70, 0x02, 0x78, 0x02, 0x80, 0x02, 0x88, 0x02, 0x8E, 0x02, 0x94, 0x02, 0x9A,
-- 0x02, 0xA0, 0x02, 0xA6, 0x02, 0xAC, 0x02, 0xB2, 0x02, 0xB8, 0x02, 0xBE, 0x02, 0xC4, 0x02, 0xCA,
-- 0x02, 0xD0, 0x02, 0xD6, 0x02, 0xDE, 0x02, 0xE6, 0x02, 0xEE, 0x02, 0xF6, 0x02, 0xFE, 0x03, 0x06,
-- 0x03, 0x0C, 0x03, 0x12, 0x03, 0x18, 0x03, 0x1E, 0x03, 0x24, 0x03, 0x2A, 0x03, 0x30, 0x03, 0x36,
-- 0x03, 0x3C, 0x03, 0x42, 0x03, 0x48, 0x03, 0x4E, 0x03, 0x54, 0x03, 0x5A, 0x03, 0x62, 0x03, 0x6A,
-- 0x03, 0x70, 0x03, 0x76, 0x03, 0x7C, 0x03, 0x82, 0x03, 0x8A, 0x03, 0x92, 0x03, 0x98, 0x03, 0x9E,
-- 0x03, 0xA4, 0x03, 0xAA, 0x03, 0xB0, 0x03, 0xB6, 0x03, 0xBE, 0x03, 0xC6, 0x03, 0xCE, 0x03, 0xD6,
-- 0x03, 0xDE, 0x03, 0xE6, 0x03, 0xEC, 0x03, 0xF2, 0x03, 0xF8, 0x03, 0xFE, 0x04, 0x06, 0x04, 0x0E,
-- 0x04, 0x14, 0x04, 0x1A, 0x04, 0x20, 0x04, 0x26, 0x04, 0x2C, 0x04, 0x32, 0x04, 0x38, 0x04, 0x3E,
-- 0x04, 0x46, 0x04, 0x4E, 0x04, 0x56, 0x04, 0x5E, 0x04, 0x64, 0x04, 0x6A, 0x04, 0x70, 0x04, 0x76,
-- 0x04, 0x7C, 0x04, 0x82, 0x04, 0x8A, 0x04, 0x92, 0x04, 0x9A, 0x04, 0xA2, 0x04, 0xA8, 0x04, 0xAE,
-- 0x04, 0xB4, 0x04, 0xBA, 0x04, 0xC0, 0x04, 0xC6, 0x04, 0xCE, 0x04, 0xD6, 0x04, 0xDE, 0x04, 0xE6,
-- 0x04, 0xEC, 0x04, 0xF2, 0x04, 0xF8, 0x04, 0xFE, 0x05, 0x04, 0x05, 0x0A, 0x05, 0x12, 0x05, 0x1A,
-- 0x05, 0x22, 0x05, 0x2A, 0x05, 0x30, 0x05, 0x36, 0x05, 0x3C, 0x05, 0x42, 0x05, 0x48, 0x05, 0x4E,
-- 0x05, 0x54, 0x05, 0x5A, 0x05, 0x60, 0x05, 0x66, 0x05, 0x6C, 0x05, 0x72, 0x05, 0x78, 0x05, 0x7E,
-- 0x05, 0x84, 0x05, 0x8A, 0x05, 0x90, 0x05, 0x96, 0x05, 0x9C, 0x05, 0xA2, 0x05, 0xA8, 0x05, 0xAE,
-- 0x05, 0xB4, 0x00, 0x02, 0x00, 0x41, 0x03, 0x40, 0x00, 0x02, 0x00, 0x41, 0x03, 0x41, 0x00, 0x02,
-- 0x00, 0x45, 0x03, 0x40, 0x00, 0x02, 0x00, 0x45, 0x03, 0x41, 0x00, 0x02, 0x00, 0x49, 0x03, 0x40,
-- 0x00, 0x02, 0x00, 0x49, 0x03, 0x41, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x40, 0x00, 0x02, 0x00, 0x4F,
-- 0x03, 0x41, 0x00, 0x02, 0x00, 0x55, 0x03, 0x40, 0x00, 0x02, 0x00, 0x55, 0x03, 0x41, 0x00, 0x02,
-- 0x00, 0x59, 0x03, 0x41, 0x00, 0x02, 0x00, 0x61, 0x03, 0x40, 0x00, 0x02, 0x00, 0x61, 0x03, 0x41,
-- 0x00, 0x02, 0x00, 0x65, 0x03, 0x40, 0x00, 0x02, 0x00, 0x65, 0x03, 0x41, 0x00, 0x02, 0x00, 0x69,
-- 0x03, 0x40, 0x00, 0x02, 0x00, 0x69, 0x03, 0x41, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x40, 0x00, 0x02,
-- 0x00, 0x6F, 0x03, 0x41, 0x00, 0x02, 0x00, 0x75, 0x03, 0x40, 0x00, 0x02, 0x00, 0x75, 0x03, 0x41,
-- 0x00, 0x02, 0x00, 0x79, 0x03, 0x41, 0x00, 0x02, 0x00, 0x43, 0x03, 0x41, 0x00, 0x02, 0x00, 0x63,
-- 0x03, 0x41, 0x00, 0x02, 0x21, 0x2A, 0x03, 0x27, 0x00, 0x02, 0x00, 0x4C, 0x03, 0x41, 0x00, 0x02,
-- 0x00, 0x6C, 0x03, 0x41, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x41, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x41,
-- 0x00, 0x02, 0x00, 0x52, 0x03, 0x41, 0x00, 0x02, 0x00, 0x72, 0x03, 0x41, 0x00, 0x02, 0x00, 0x53,
-- 0x03, 0x41, 0x00, 0x02, 0x00, 0x73, 0x03, 0x41, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x41, 0x00, 0x02,
-- 0x00, 0x7A, 0x03, 0x41, 0x00, 0x03, 0x00, 0x55, 0x03, 0x08, 0x03, 0x04, 0x00, 0x03, 0x00, 0x75,
-- 0x03, 0x08, 0x03, 0x04, 0x00, 0x02, 0x00, 0xDC, 0x03, 0x01, 0x00, 0x02, 0x00, 0xFC, 0x03, 0x01,
-- 0x00, 0x03, 0x00, 0x55, 0x03, 0x08, 0x03, 0x0C, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x0C,
-- 0x00, 0x02, 0x00, 0xDC, 0x03, 0x40, 0x00, 0x02, 0x00, 0xFC, 0x03, 0x40, 0x00, 0x03, 0x00, 0x41,
-- 0x03, 0x08, 0x03, 0x04, 0x00, 0x03, 0x00, 0x61, 0x03, 0x08, 0x03, 0x04, 0x00, 0x03, 0x00, 0x41,
-- 0x03, 0x07, 0x03, 0x04, 0x00, 0x03, 0x00, 0x61, 0x03, 0x07, 0x03, 0x04, 0x00, 0x02, 0x21, 0x2A,
-- 0x03, 0x0C, 0x00, 0x02, 0x01, 0xEA, 0x03, 0x04, 0x00, 0x02, 0x01, 0xEB, 0x03, 0x04, 0x00, 0x02,
-- 0x00, 0x47, 0x03, 0x41, 0x00, 0x02, 0x00, 0x67, 0x03, 0x41, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x40,
-- 0x00, 0x02, 0x00, 0x6E, 0x03, 0x40, 0x00, 0x02, 0x00, 0xC5, 0x03, 0x41, 0x00, 0x02, 0x00, 0xE5,
-- 0x03, 0x41, 0x00, 0x02, 0x00, 0xC6, 0x03, 0x41, 0x00, 0x02, 0x00, 0xE6, 0x03, 0x41, 0x00, 0x02,
-- 0x00, 0xD8, 0x03, 0x41, 0x00, 0x02, 0x00, 0xF8, 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x08,
-- 0x03, 0x04, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x08, 0x03, 0x04, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x03,
-- 0x03, 0x04, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x03, 0x03, 0x04, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x07,
-- 0x03, 0x04, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x07, 0x03, 0x04, 0x00, 0x02, 0x00, 0xC7, 0x03, 0x41,
-- 0x00, 0x02, 0x00, 0xE7, 0x03, 0x41, 0x00, 0x02, 0x01, 0x12, 0x03, 0x40, 0x00, 0x02, 0x01, 0x13,
-- 0x03, 0x40, 0x00, 0x02, 0x01, 0x12, 0x03, 0x41, 0x00, 0x02, 0x01, 0x13, 0x03, 0x41, 0x00, 0x02,
-- 0x02, 0x28, 0x03, 0x06, 0x00, 0x02, 0x02, 0x29, 0x03, 0x06, 0x00, 0x02, 0x00, 0xCF, 0x03, 0x01,
-- 0x00, 0x02, 0x00, 0xEF, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4B, 0x03, 0x41, 0x00, 0x02, 0x00, 0x6B,
-- 0x03, 0x41, 0x00, 0x02, 0x21, 0x2A, 0x03, 0x23, 0x00, 0x02, 0x21, 0x2A, 0x03, 0x31, 0x00, 0x03,
-- 0x00, 0x4C, 0x03, 0x04, 0x03, 0x23, 0x00, 0x03, 0x00, 0x6C, 0x03, 0x04, 0x03, 0x23, 0x00, 0x02,
-- 0x00, 0x4D, 0x03, 0x41, 0x00, 0x02, 0x00, 0x6D, 0x03, 0x41, 0x00, 0x02, 0x00, 0xD5, 0x03, 0x41,
-- 0x00, 0x02, 0x00, 0xF5, 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x03, 0x03, 0x08, 0x00, 0x03,
-- 0x00, 0x6F, 0x03, 0x03, 0x03, 0x08, 0x00, 0x02, 0x01, 0x4C, 0x03, 0x40, 0x00, 0x02, 0x01, 0x4D,
-- 0x03, 0x40, 0x00, 0x02, 0x01, 0x4C, 0x03, 0x41, 0x00, 0x02, 0x01, 0x4D, 0x03, 0x41, 0x00, 0x02,
-- 0x00, 0x50, 0x03, 0x41, 0x00, 0x02, 0x00, 0x70, 0x03, 0x41, 0x00, 0x03, 0x00, 0x52, 0x03, 0x04,
-- 0x03, 0x23, 0x00, 0x03, 0x00, 0x72, 0x03, 0x04, 0x03, 0x23, 0x00, 0x03, 0x00, 0x53, 0x03, 0x01,
-- 0x03, 0x07, 0x00, 0x03, 0x00, 0x73, 0x03, 0x01, 0x03, 0x07, 0x00, 0x03, 0x00, 0x53, 0x03, 0x0C,
-- 0x03, 0x07, 0x00, 0x03, 0x00, 0x73, 0x03, 0x0C, 0x03, 0x07, 0x00, 0x02, 0x1E, 0x62, 0x03, 0x07,
-- 0x00, 0x02, 0x1E, 0x63, 0x03, 0x07, 0x00, 0x02, 0x01, 0x68, 0x03, 0x41, 0x00, 0x02, 0x01, 0x69,
-- 0x03, 0x41, 0x00, 0x03, 0x00, 0x55, 0x03, 0x04, 0x03, 0x08, 0x00, 0x03, 0x00, 0x75, 0x03, 0x04,
-- 0x03, 0x08, 0x00, 0x02, 0x00, 0x57, 0x03, 0x40, 0x00, 0x02, 0x00, 0x77, 0x03, 0x40, 0x00, 0x02,
-- 0x00, 0x57, 0x03, 0x41, 0x00, 0x02, 0x00, 0x77, 0x03, 0x41, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x41,
-- 0x00, 0x02, 0x00, 0xE2, 0x03, 0x41, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x40, 0x00, 0x02, 0x00, 0xE2,
-- 0x03, 0x40, 0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02,
-- 0x03, 0x09, 0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x03, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02,
-- 0x03, 0x03, 0x00, 0x02, 0x1E, 0xA0, 0x03, 0x02, 0x00, 0x02, 0x1E, 0xA1, 0x03, 0x02, 0x00, 0x02,
-- 0x01, 0x02, 0x03, 0x41, 0x00, 0x02, 0x01, 0x03, 0x03, 0x41, 0x00, 0x02, 0x01, 0x02, 0x03, 0x40,
-- 0x00, 0x02, 0x01, 0x03, 0x03, 0x40, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x09, 0x00, 0x03,
-- 0x00, 0x61, 0x03, 0x06, 0x03, 0x09, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x03, 0x00, 0x03,
-- 0x00, 0x61, 0x03, 0x06, 0x03, 0x03, 0x00, 0x02, 0x1E, 0xA0, 0x03, 0x06, 0x00, 0x02, 0x1E, 0xA1,
-- 0x03, 0x06, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x41, 0x00, 0x02, 0x00, 0xEA, 0x03, 0x41, 0x00, 0x02,
-- 0x00, 0xCA, 0x03, 0x40, 0x00, 0x02, 0x00, 0xEA, 0x03, 0x40, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02,
-- 0x03, 0x09, 0x00, 0x03, 0x00, 0x65, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02,
-- 0x03, 0x03, 0x00, 0x03, 0x00, 0x65, 0x03, 0x02, 0x03, 0x03, 0x00, 0x02, 0x1E, 0xB8, 0x03, 0x02,
-- 0x00, 0x02, 0x1E, 0xB9, 0x03, 0x02, 0x00, 0x02, 0x00, 0xD4, 0x03, 0x41, 0x00, 0x02, 0x00, 0xF4,
-- 0x03, 0x41, 0x00, 0x02, 0x00, 0xD4, 0x03, 0x40, 0x00, 0x02, 0x00, 0xF4, 0x03, 0x40, 0x00, 0x03,
-- 0x00, 0x4F, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03,
-- 0x00, 0x4F, 0x03, 0x02, 0x03, 0x03, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02, 0x03, 0x03, 0x00, 0x02,
-- 0x1E, 0xCC, 0x03, 0x02, 0x00, 0x02, 0x1E, 0xCD, 0x03, 0x02, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x01,
-- 0x00, 0x02, 0x01, 0xA1, 0x03, 0x01, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x00, 0x00, 0x02, 0x01, 0xA1,
-- 0x03, 0x00, 0x00, 0x02, 0x1E, 0xCE, 0x03, 0x1B, 0x00, 0x02, 0x1E, 0xCF, 0x03, 0x1B, 0x00, 0x02,
-- 0x01, 0xA0, 0x03, 0x03, 0x00, 0x02, 0x01, 0xA1, 0x03, 0x03, 0x00, 0x02, 0x1E, 0xCC, 0x03, 0x1B,
-- 0x00, 0x02, 0x1E, 0xCD, 0x03, 0x1B, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x01, 0x00, 0x02, 0x01, 0xB0,
-- 0x03, 0x01, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x00, 0x00, 0x02, 0x01, 0xB0, 0x03, 0x00, 0x00, 0x02,
-- 0x1E, 0xE6, 0x03, 0x1B, 0x00, 0x02, 0x1E, 0xE7, 0x03, 0x1B, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x03,
-- 0x00, 0x02, 0x01, 0xB0, 0x03, 0x03, 0x00, 0x02, 0x1E, 0xE4, 0x03, 0x1B, 0x00, 0x02, 0x1E, 0xE5,
-- 0x03, 0x1B, 0x00, 0x02, 0x00, 0x59, 0x03, 0x40, 0x00, 0x02, 0x00, 0x79, 0x03, 0x40, 0x00, 0x01,
-- 0x00, 0xAC, 0x00, 0xC0, 0x00, 0xC1, 0x00, 0xC8, 0x00, 0xC9, 0x00, 0xCC, 0x00, 0xCD, 0x00, 0xD2,
-- 0x00, 0xD3, 0x00, 0xD9, 0x00, 0xDA, 0x00, 0xDD, 0x00, 0xE0, 0x00, 0xE1, 0x00, 0xE8, 0x00, 0xE9,
-- 0x00, 0xEC, 0x00, 0xED, 0x00, 0xF2, 0x00, 0xF3, 0x00, 0xF9, 0x00, 0xFA, 0x00, 0xFD, 0x01, 0x06,
-- 0x01, 0x07, 0x01, 0x36, 0x01, 0x39, 0x01, 0x3A, 0x01, 0x43, 0x01, 0x44, 0x01, 0x54, 0x01, 0x55,
-- 0x01, 0x5A, 0x01, 0x5B, 0x01, 0x79, 0x01, 0x7A, 0x01, 0xD5, 0x01, 0xD6, 0x01, 0xD7, 0x01, 0xD8,
-- 0x01, 0xD9, 0x01, 0xDA, 0x01, 0xDB, 0x01, 0xDC, 0x01, 0xDE, 0x01, 0xDF, 0x01, 0xE0, 0x01, 0xE1,
-- 0x01, 0xE8, 0x01, 0xEC, 0x01, 0xED, 0x01, 0xF4, 0x01, 0xF5, 0x01, 0xF8, 0x01, 0xF9, 0x01, 0xFA,
-- 0x01, 0xFB, 0x01, 0xFC, 0x01, 0xFD, 0x01, 0xFE, 0x01, 0xFF, 0x02, 0x2A, 0x02, 0x2B, 0x02, 0x2C,
-- 0x02, 0x2D, 0x02, 0x30, 0x02, 0x31, 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0x14, 0x1E, 0x15, 0x1E, 0x16,
-- 0x1E, 0x17, 0x1E, 0x1C, 0x1E, 0x1D, 0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0x30, 0x1E, 0x31, 0x1E, 0x32,
-- 0x1E, 0x34, 0x1E, 0x38, 0x1E, 0x39, 0x1E, 0x3E, 0x1E, 0x3F, 0x1E, 0x4C, 0x1E, 0x4D, 0x1E, 0x4E,
-- 0x1E, 0x4F, 0x1E, 0x50, 0x1E, 0x51, 0x1E, 0x52, 0x1E, 0x53, 0x1E, 0x54, 0x1E, 0x55, 0x1E, 0x5C,
-- 0x1E, 0x5D, 0x1E, 0x64, 0x1E, 0x65, 0x1E, 0x66, 0x1E, 0x67, 0x1E, 0x68, 0x1E, 0x69, 0x1E, 0x78,
-- 0x1E, 0x79, 0x1E, 0x7A, 0x1E, 0x7B, 0x1E, 0x80, 0x1E, 0x81, 0x1E, 0x82, 0x1E, 0x83, 0x1E, 0xA4,
-- 0x1E, 0xA5, 0x1E, 0xA6, 0x1E, 0xA7, 0x1E, 0xA8, 0x1E, 0xA9, 0x1E, 0xAA, 0x1E, 0xAB, 0x1E, 0xAC,
-- 0x1E, 0xAD, 0x1E, 0xAE, 0x1E, 0xAF, 0x1E, 0xB0, 0x1E, 0xB1, 0x1E, 0xB2, 0x1E, 0xB3, 0x1E, 0xB4,
-- 0x1E, 0xB5, 0x1E, 0xB6, 0x1E, 0xB7, 0x1E, 0xBE, 0x1E, 0xBF, 0x1E, 0xC0, 0x1E, 0xC1, 0x1E, 0xC2,
-- 0x1E, 0xC3, 0x1E, 0xC4, 0x1E, 0xC5, 0x1E, 0xC6, 0x1E, 0xC7, 0x1E, 0xD0, 0x1E, 0xD1, 0x1E, 0xD2,
-- 0x1E, 0xD3, 0x1E, 0xD4, 0x1E, 0xD5, 0x1E, 0xD6, 0x1E, 0xD7, 0x1E, 0xD8, 0x1E, 0xD9, 0x1E, 0xDA,
-+ 0x1E, 0xF1, 0x1E, 0xF2, 0x1E, 0xF3, 0x00, 0x01, 0x02, 0xFC, 0x00, 0x4F, 0x00, 0xA4, 0x00, 0xAA,
-+ 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xC8, 0x00, 0xD0, 0x00, 0xD6, 0x00, 0xDE, 0x00, 0xE4,
-+ 0x00, 0xEA, 0x00, 0xF2, 0x00, 0xFA, 0x01, 0x02, 0x01, 0x0A, 0x01, 0x12, 0x01, 0x1A, 0x01, 0x20,
-+ 0x01, 0x26, 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x44, 0x01, 0x4C, 0x01, 0x54, 0x01, 0x5C,
-+ 0x01, 0x64, 0x01, 0x6C, 0x01, 0x74, 0x01, 0x7C, 0x01, 0x84, 0x01, 0x8C, 0x01, 0x94, 0x01, 0x9C,
-+ 0x01, 0xA4, 0x01, 0xAC, 0x01, 0xB4, 0x01, 0xBC, 0x01, 0xC4, 0x01, 0xCC, 0x01, 0xD4, 0x01, 0xDC,
-+ 0x01, 0xE4, 0x01, 0xEC, 0x01, 0xF4, 0x01, 0xFC, 0x02, 0x04, 0x02, 0x0C, 0x02, 0x14, 0x02, 0x1C,
-+ 0x02, 0x24, 0x02, 0x2C, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x44, 0x02, 0x4C, 0x02, 0x54, 0x02, 0x5C,
-+ 0x02, 0x64, 0x02, 0x6C, 0x02, 0x72, 0x02, 0x78, 0x02, 0x7E, 0x02, 0x84, 0x02, 0x8C, 0x02, 0x94,
-+ 0x02, 0x9C, 0x02, 0xA4, 0x02, 0xAC, 0x02, 0xB4, 0x02, 0xBA, 0x02, 0xC0, 0x02, 0xC6, 0x02, 0xCC,
-+ 0x02, 0xD4, 0x02, 0xDC, 0x02, 0xE4, 0x02, 0xEC, 0x02, 0xF4, 0x00, 0x02, 0x00, 0xDC, 0x03, 0x41,
-+ 0x00, 0x02, 0x00, 0xFC, 0x03, 0x41, 0x00, 0x03, 0x00, 0x55, 0x03, 0x08, 0x03, 0x00, 0x00, 0x03,
-+ 0x00, 0x75, 0x03, 0x08, 0x03, 0x00, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x28, 0x00, 0x03,
-+ 0x00, 0x6F, 0x03, 0x04, 0x03, 0x28, 0x00, 0x02, 0x21, 0x2B, 0x03, 0x01, 0x00, 0x03, 0x00, 0x61,
-+ 0x03, 0x0A, 0x03, 0x01, 0x00, 0x02, 0x01, 0x06, 0x03, 0x27, 0x00, 0x02, 0x01, 0x07, 0x03, 0x27,
-+ 0x00, 0x03, 0x00, 0x45, 0x03, 0x04, 0x03, 0x00, 0x00, 0x03, 0x00, 0x65, 0x03, 0x04, 0x03, 0x00,
-+ 0x00, 0x03, 0x00, 0x45, 0x03, 0x04, 0x03, 0x01, 0x00, 0x03, 0x00, 0x65, 0x03, 0x04, 0x03, 0x01,
-+ 0x00, 0x03, 0x00, 0x45, 0x03, 0x06, 0x03, 0x27, 0x00, 0x03, 0x00, 0x65, 0x03, 0x06, 0x03, 0x27,
-+ 0x00, 0x02, 0x00, 0xCF, 0x03, 0x41, 0x00, 0x02, 0x00, 0xEF, 0x03, 0x41, 0x00, 0x02, 0x21, 0x2A,
-+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x4C, 0x03, 0x23, 0x03, 0x04, 0x00, 0x03, 0x00, 0x6C, 0x03, 0x23,
-+ 0x03, 0x04, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x03, 0x03, 0x01, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x03,
-+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x00, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x04,
-+ 0x03, 0x00, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x01, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x04,
-+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x52, 0x03, 0x23, 0x03, 0x04, 0x00, 0x03, 0x00, 0x72, 0x03, 0x23,
-+ 0x03, 0x04, 0x00, 0x03, 0x00, 0x53, 0x03, 0x41, 0x03, 0x07, 0x00, 0x03, 0x00, 0x73, 0x03, 0x41,
-+ 0x03, 0x07, 0x00, 0x03, 0x00, 0x53, 0x03, 0x07, 0x03, 0x23, 0x00, 0x03, 0x00, 0x73, 0x03, 0x07,
-+ 0x03, 0x23, 0x00, 0x03, 0x00, 0x55, 0x03, 0x03, 0x03, 0x01, 0x00, 0x03, 0x00, 0x75, 0x03, 0x03,
-+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x01, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02,
-+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x00, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02,
-+ 0x03, 0x00, 0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x23, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02,
-+ 0x03, 0x23, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x01, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06,
-+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x00, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06,
-+ 0x03, 0x00, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x23, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06,
-+ 0x03, 0x23, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x01, 0x00, 0x03, 0x00, 0x65, 0x03, 0x02,
-+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x00, 0x00, 0x03, 0x00, 0x65, 0x03, 0x02,
-+ 0x03, 0x00, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x23, 0x00, 0x03, 0x00, 0x65, 0x03, 0x02,
-+ 0x03, 0x23, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x01, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02,
-+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x00, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02,
-+ 0x03, 0x00, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x23, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02,
-+ 0x03, 0x23, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x41, 0x00, 0x02, 0x01, 0xA1, 0x03, 0x41, 0x00, 0x02,
-+ 0x01, 0xA0, 0x03, 0x40, 0x00, 0x02, 0x01, 0xA1, 0x03, 0x40, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x09,
-+ 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x09, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x03,
-+ 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x03, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B,
-+ 0x03, 0x23, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x23, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x41,
-+ 0x00, 0x02, 0x01, 0xB0, 0x03, 0x41, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x40, 0x00, 0x02, 0x01, 0xB0,
-+ 0x03, 0x40, 0x00, 0x03, 0x00, 0x55, 0x03, 0x09, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x09,
-+ 0x03, 0x1B, 0x00, 0x03, 0x00, 0x55, 0x03, 0x03, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x03,
-+ 0x03, 0x1B, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x23, 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B,
-+ 0x03, 0x23, 0x00, 0x01, 0x00, 0x4F, 0x01, 0xD7, 0x01, 0xD8, 0x01, 0xDB, 0x01, 0xDC, 0x01, 0xEC,
-+ 0x01, 0xED, 0x01, 0xFA, 0x01, 0xFB, 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0x14, 0x1E, 0x15, 0x1E, 0x16,
-+ 0x1E, 0x17, 0x1E, 0x1C, 0x1E, 0x1D, 0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0x30, 0x1E, 0x38, 0x1E, 0x39,
-+ 0x1E, 0x4C, 0x1E, 0x4D, 0x1E, 0x50, 0x1E, 0x51, 0x1E, 0x52, 0x1E, 0x53, 0x1E, 0x5C, 0x1E, 0x5D,
-+ 0x1E, 0x64, 0x1E, 0x65, 0x1E, 0x68, 0x1E, 0x69, 0x1E, 0x78, 0x1E, 0x79, 0x1E, 0xA4, 0x1E, 0xA5,
-+ 0x1E, 0xA6, 0x1E, 0xA7, 0x1E, 0xAC, 0x1E, 0xAD, 0x1E, 0xAE, 0x1E, 0xAF, 0x1E, 0xB0, 0x1E, 0xB1,
-+ 0x1E, 0xB6, 0x1E, 0xB7, 0x1E, 0xBE, 0x1E, 0xBF, 0x1E, 0xC0, 0x1E, 0xC1, 0x1E, 0xC6, 0x1E, 0xC7,
-+ 0x1E, 0xD0, 0x1E, 0xD1, 0x1E, 0xD2, 0x1E, 0xD3, 0x1E, 0xD8, 0x1E, 0xD9, 0x1E, 0xDA, 0x1E, 0xDB,
-+ 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xDE, 0x1E, 0xDF, 0x1E, 0xE0, 0x1E, 0xE1, 0x1E, 0xE2, 0x1E, 0xE3,
-+ 0x1E, 0xE8, 0x1E, 0xE9, 0x1E, 0xEA, 0x1E, 0xEB, 0x1E, 0xEC, 0x1E, 0xED, 0x1E, 0xEE, 0x1E, 0xEF,
-+ 0x1E, 0xF0, 0x1E, 0xF1, 0x00, 0x01, 0x02, 0xDC, 0x00, 0x49, 0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8,
-+ 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xC8, 0x00, 0xCE, 0x00, 0xD6, 0x00, 0xDE, 0x00, 0xE6,
-+ 0x00, 0xEE, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x06, 0x01, 0x0E, 0x01, 0x16, 0x01, 0x1E, 0x01, 0x26,
-+ 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x44, 0x01, 0x4C, 0x01, 0x54, 0x01, 0x5C, 0x01, 0x64,
-+ 0x01, 0x6C, 0x01, 0x74, 0x01, 0x7C, 0x01, 0x84, 0x01, 0x8C, 0x01, 0x94, 0x01, 0x9C, 0x01, 0xA4,
-+ 0x01, 0xAC, 0x01, 0xB4, 0x01, 0xBC, 0x01, 0xC4, 0x01, 0xCC, 0x01, 0xD4, 0x01, 0xDC, 0x01, 0xE4,
-+ 0x01, 0xEC, 0x01, 0xF4, 0x01, 0xFC, 0x02, 0x04, 0x02, 0x0C, 0x02, 0x14, 0x02, 0x1C, 0x02, 0x24,
-+ 0x02, 0x2C, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x44, 0x02, 0x4C, 0x02, 0x54, 0x02, 0x5C, 0x02, 0x64,
-+ 0x02, 0x6C, 0x02, 0x74, 0x02, 0x7C, 0x02, 0x84, 0x02, 0x8C, 0x02, 0x94, 0x02, 0x9C, 0x02, 0xA4,
-+ 0x02, 0xAC, 0x02, 0xB4, 0x02, 0xBC, 0x02, 0xC4, 0x02, 0xCC, 0x02, 0xD4, 0x00, 0x03, 0x00, 0x55,
-+ 0x03, 0x08, 0x03, 0x01, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x01, 0x00, 0x03, 0x00, 0x55,
-+ 0x03, 0x08, 0x03, 0x40, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x40, 0x00, 0x03, 0x00, 0x4F,
-+ 0x03, 0x28, 0x03, 0x04, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x28, 0x03, 0x04, 0x00, 0x02, 0x21, 0x2B,
-+ 0x03, 0x41, 0x00, 0x03, 0x00, 0x61, 0x03, 0x0A, 0x03, 0x41, 0x00, 0x03, 0x00, 0x43, 0x03, 0x01,
-+ 0x03, 0x27, 0x00, 0x03, 0x00, 0x63, 0x03, 0x01, 0x03, 0x27, 0x00, 0x03, 0x00, 0x45, 0x03, 0x04,
-+ 0x03, 0x40, 0x00, 0x03, 0x00, 0x65, 0x03, 0x04, 0x03, 0x40, 0x00, 0x03, 0x00, 0x45, 0x03, 0x04,
-+ 0x03, 0x41, 0x00, 0x03, 0x00, 0x65, 0x03, 0x04, 0x03, 0x41, 0x00, 0x03, 0x00, 0x45, 0x03, 0x27,
-+ 0x03, 0x06, 0x00, 0x03, 0x00, 0x65, 0x03, 0x27, 0x03, 0x06, 0x00, 0x03, 0x00, 0x49, 0x03, 0x08,
-+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x69, 0x03, 0x08, 0x03, 0x01, 0x00, 0x02, 0x21, 0x2A, 0x03, 0x41,
-+ 0x00, 0x03, 0x00, 0x4F, 0x03, 0x03, 0x03, 0x41, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x03, 0x03, 0x41,
-+ 0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x40, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x04, 0x03, 0x40,
-+ 0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x41, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x04, 0x03, 0x41,
-+ 0x00, 0x03, 0x00, 0x53, 0x03, 0x23, 0x03, 0x07, 0x00, 0x03, 0x00, 0x73, 0x03, 0x23, 0x03, 0x07,
-+ 0x00, 0x03, 0x00, 0x55, 0x03, 0x03, 0x03, 0x41, 0x00, 0x03, 0x00, 0x75, 0x03, 0x03, 0x03, 0x41,
-+ 0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02, 0x03, 0x41,
-+ 0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x40, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02, 0x03, 0x40,
-+ 0x00, 0x03, 0x00, 0x41, 0x03, 0x23, 0x03, 0x02, 0x00, 0x03, 0x00, 0x61, 0x03, 0x23, 0x03, 0x02,
-+ 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x41, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06, 0x03, 0x41,
-+ 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x40, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06, 0x03, 0x40,
-+ 0x00, 0x03, 0x00, 0x41, 0x03, 0x23, 0x03, 0x06, 0x00, 0x03, 0x00, 0x61, 0x03, 0x23, 0x03, 0x06,
-+ 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x65, 0x03, 0x02, 0x03, 0x41,
-+ 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x40, 0x00, 0x03, 0x00, 0x65, 0x03, 0x02, 0x03, 0x40,
-+ 0x00, 0x03, 0x00, 0x45, 0x03, 0x23, 0x03, 0x02, 0x00, 0x03, 0x00, 0x65, 0x03, 0x23, 0x03, 0x02,
-+ 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02, 0x03, 0x41,
-+ 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x40, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02, 0x03, 0x40,
-+ 0x00, 0x03, 0x00, 0x4F, 0x03, 0x23, 0x03, 0x02, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x23, 0x03, 0x02,
-+ 0x00, 0x03, 0x00, 0x4F, 0x03, 0x01, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x01, 0x03, 0x1B,
-+ 0x00, 0x03, 0x00, 0x4F, 0x03, 0x00, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x00, 0x03, 0x1B,
-+ 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x09, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x09,
-+ 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x03, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x03,
-+ 0x00, 0x03, 0x00, 0x4F, 0x03, 0x23, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x23, 0x03, 0x1B,
-+ 0x00, 0x03, 0x00, 0x55, 0x03, 0x01, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x01, 0x03, 0x1B,
-+ 0x00, 0x03, 0x00, 0x55, 0x03, 0x00, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x00, 0x03, 0x1B,
-+ 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x09, 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B, 0x03, 0x09,
-+ 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x03, 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B, 0x03, 0x03,
-+ 0x00, 0x03, 0x00, 0x55, 0x03, 0x23, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x23, 0x03, 0x1B,
-+ 0x00, 0x01, 0x00, 0x49, 0x01, 0xD7, 0x01, 0xD8, 0x01, 0xDB, 0x01, 0xDC, 0x01, 0xEC, 0x01, 0xED,
-+ 0x01, 0xFA, 0x01, 0xFB, 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0x14, 0x1E, 0x15, 0x1E, 0x16, 0x1E, 0x17,
-+ 0x1E, 0x1C, 0x1E, 0x1D, 0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0x30, 0x1E, 0x4C, 0x1E, 0x4D, 0x1E, 0x50,
-+ 0x1E, 0x51, 0x1E, 0x52, 0x1E, 0x53, 0x1E, 0x68, 0x1E, 0x69, 0x1E, 0x78, 0x1E, 0x79, 0x1E, 0xA4,
-+ 0x1E, 0xA5, 0x1E, 0xA6, 0x1E, 0xA7, 0x1E, 0xAC, 0x1E, 0xAD, 0x1E, 0xAE, 0x1E, 0xAF, 0x1E, 0xB0,
-+ 0x1E, 0xB1, 0x1E, 0xB6, 0x1E, 0xB7, 0x1E, 0xBE, 0x1E, 0xBF, 0x1E, 0xC0, 0x1E, 0xC1, 0x1E, 0xC6,
-+ 0x1E, 0xC7, 0x1E, 0xD0, 0x1E, 0xD1, 0x1E, 0xD2, 0x1E, 0xD3, 0x1E, 0xD8, 0x1E, 0xD9, 0x1E, 0xDA,
- 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xDE, 0x1E, 0xDF, 0x1E, 0xE0, 0x1E, 0xE1, 0x1E, 0xE2,
- 0x1E, 0xE3, 0x1E, 0xE8, 0x1E, 0xE9, 0x1E, 0xEA, 0x1E, 0xEB, 0x1E, 0xEC, 0x1E, 0xED, 0x1E, 0xEE,
-- 0x1E, 0xEF, 0x1E, 0xF0, 0x1E, 0xF1, 0x1E, 0xF2, 0x1E, 0xF3, 0x00, 0x01, 0x02, 0xFC, 0x00, 0x4F,
-- 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xC8, 0x00, 0xD0, 0x00, 0xD6,
-- 0x00, 0xDE, 0x00, 0xE4, 0x00, 0xEA, 0x00, 0xF2, 0x00, 0xFA, 0x01, 0x02, 0x01, 0x0A, 0x01, 0x12,
-- 0x01, 0x1A, 0x01, 0x20, 0x01, 0x26, 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x44, 0x01, 0x4C,
-- 0x01, 0x54, 0x01, 0x5C, 0x01, 0x64, 0x01, 0x6C, 0x01, 0x74, 0x01, 0x7C, 0x01, 0x84, 0x01, 0x8C,
-- 0x01, 0x94, 0x01, 0x9C, 0x01, 0xA4, 0x01, 0xAC, 0x01, 0xB4, 0x01, 0xBC, 0x01, 0xC4, 0x01, 0xCC,
-- 0x01, 0xD4, 0x01, 0xDC, 0x01, 0xE4, 0x01, 0xEC, 0x01, 0xF4, 0x01, 0xFC, 0x02, 0x04, 0x02, 0x0C,
-- 0x02, 0x14, 0x02, 0x1C, 0x02, 0x24, 0x02, 0x2C, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x44, 0x02, 0x4C,
-- 0x02, 0x54, 0x02, 0x5C, 0x02, 0x64, 0x02, 0x6C, 0x02, 0x72, 0x02, 0x78, 0x02, 0x7E, 0x02, 0x84,
-- 0x02, 0x8C, 0x02, 0x94, 0x02, 0x9C, 0x02, 0xA4, 0x02, 0xAC, 0x02, 0xB4, 0x02, 0xBA, 0x02, 0xC0,
-- 0x02, 0xC6, 0x02, 0xCC, 0x02, 0xD4, 0x02, 0xDC, 0x02, 0xE4, 0x02, 0xEC, 0x02, 0xF4, 0x00, 0x02,
-- 0x00, 0xDC, 0x03, 0x41, 0x00, 0x02, 0x00, 0xFC, 0x03, 0x41, 0x00, 0x03, 0x00, 0x55, 0x03, 0x08,
-- 0x03, 0x00, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x00, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x04,
-- 0x03, 0x28, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x04, 0x03, 0x28, 0x00, 0x02, 0x21, 0x2B, 0x03, 0x01,
-- 0x00, 0x03, 0x00, 0x61, 0x03, 0x0A, 0x03, 0x01, 0x00, 0x02, 0x01, 0x06, 0x03, 0x27, 0x00, 0x02,
-- 0x01, 0x07, 0x03, 0x27, 0x00, 0x03, 0x00, 0x45, 0x03, 0x04, 0x03, 0x00, 0x00, 0x03, 0x00, 0x65,
-- 0x03, 0x04, 0x03, 0x00, 0x00, 0x03, 0x00, 0x45, 0x03, 0x04, 0x03, 0x01, 0x00, 0x03, 0x00, 0x65,
-- 0x03, 0x04, 0x03, 0x01, 0x00, 0x03, 0x00, 0x45, 0x03, 0x06, 0x03, 0x27, 0x00, 0x03, 0x00, 0x65,
-- 0x03, 0x06, 0x03, 0x27, 0x00, 0x02, 0x00, 0xCF, 0x03, 0x41, 0x00, 0x02, 0x00, 0xEF, 0x03, 0x41,
-- 0x00, 0x02, 0x21, 0x2A, 0x03, 0x01, 0x00, 0x03, 0x00, 0x4C, 0x03, 0x23, 0x03, 0x04, 0x00, 0x03,
-- 0x00, 0x6C, 0x03, 0x23, 0x03, 0x04, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x03, 0x03, 0x01, 0x00, 0x03,
-- 0x00, 0x6F, 0x03, 0x03, 0x03, 0x01, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x00, 0x00, 0x03,
-- 0x00, 0x6F, 0x03, 0x04, 0x03, 0x00, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x01, 0x00, 0x03,
-- 0x00, 0x6F, 0x03, 0x04, 0x03, 0x01, 0x00, 0x03, 0x00, 0x52, 0x03, 0x23, 0x03, 0x04, 0x00, 0x03,
-- 0x00, 0x72, 0x03, 0x23, 0x03, 0x04, 0x00, 0x03, 0x00, 0x53, 0x03, 0x41, 0x03, 0x07, 0x00, 0x03,
-- 0x00, 0x73, 0x03, 0x41, 0x03, 0x07, 0x00, 0x03, 0x00, 0x53, 0x03, 0x07, 0x03, 0x23, 0x00, 0x03,
-- 0x00, 0x73, 0x03, 0x07, 0x03, 0x23, 0x00, 0x03, 0x00, 0x55, 0x03, 0x03, 0x03, 0x01, 0x00, 0x03,
-- 0x00, 0x75, 0x03, 0x03, 0x03, 0x01, 0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x01, 0x00, 0x03,
-- 0x00, 0x61, 0x03, 0x02, 0x03, 0x01, 0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x00, 0x00, 0x03,
-- 0x00, 0x61, 0x03, 0x02, 0x03, 0x00, 0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x23, 0x00, 0x03,
-- 0x00, 0x61, 0x03, 0x02, 0x03, 0x23, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x01, 0x00, 0x03,
-- 0x00, 0x61, 0x03, 0x06, 0x03, 0x01, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x00, 0x00, 0x03,
-- 0x00, 0x61, 0x03, 0x06, 0x03, 0x00, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x23, 0x00, 0x03,
-- 0x00, 0x61, 0x03, 0x06, 0x03, 0x23, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x01, 0x00, 0x03,
-- 0x00, 0x65, 0x03, 0x02, 0x03, 0x01, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x00, 0x00, 0x03,
-- 0x00, 0x65, 0x03, 0x02, 0x03, 0x00, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x23, 0x00, 0x03,
-- 0x00, 0x65, 0x03, 0x02, 0x03, 0x23, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x01, 0x00, 0x03,
-- 0x00, 0x6F, 0x03, 0x02, 0x03, 0x01, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x00, 0x00, 0x03,
-- 0x00, 0x6F, 0x03, 0x02, 0x03, 0x00, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x23, 0x00, 0x03,
-- 0x00, 0x6F, 0x03, 0x02, 0x03, 0x23, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x41, 0x00, 0x02, 0x01, 0xA1,
-- 0x03, 0x41, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x40, 0x00, 0x02, 0x01, 0xA1, 0x03, 0x40, 0x00, 0x03,
-- 0x00, 0x4F, 0x03, 0x09, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x09, 0x03, 0x1B, 0x00, 0x03,
-- 0x00, 0x4F, 0x03, 0x03, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x03, 0x03, 0x1B, 0x00, 0x03,
-- 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x23, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x23, 0x00, 0x02,
-- 0x01, 0xAF, 0x03, 0x41, 0x00, 0x02, 0x01, 0xB0, 0x03, 0x41, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x40,
-- 0x00, 0x02, 0x01, 0xB0, 0x03, 0x40, 0x00, 0x03, 0x00, 0x55, 0x03, 0x09, 0x03, 0x1B, 0x00, 0x03,
-- 0x00, 0x75, 0x03, 0x09, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x55, 0x03, 0x03, 0x03, 0x1B, 0x00, 0x03,
-- 0x00, 0x75, 0x03, 0x03, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x23, 0x00, 0x03,
-- 0x00, 0x75, 0x03, 0x1B, 0x03, 0x23, 0x00, 0x01, 0x00, 0x4F, 0x01, 0xD7, 0x01, 0xD8, 0x01, 0xDB,
-- 0x01, 0xDC, 0x01, 0xEC, 0x01, 0xED, 0x01, 0xFA, 0x01, 0xFB, 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0x14,
-- 0x1E, 0x15, 0x1E, 0x16, 0x1E, 0x17, 0x1E, 0x1C, 0x1E, 0x1D, 0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0x30,
-- 0x1E, 0x38, 0x1E, 0x39, 0x1E, 0x4C, 0x1E, 0x4D, 0x1E, 0x50, 0x1E, 0x51, 0x1E, 0x52, 0x1E, 0x53,
-- 0x1E, 0x5C, 0x1E, 0x5D, 0x1E, 0x64, 0x1E, 0x65, 0x1E, 0x68, 0x1E, 0x69, 0x1E, 0x78, 0x1E, 0x79,
-- 0x1E, 0xA4, 0x1E, 0xA5, 0x1E, 0xA6, 0x1E, 0xA7, 0x1E, 0xAC, 0x1E, 0xAD, 0x1E, 0xAE, 0x1E, 0xAF,
-- 0x1E, 0xB0, 0x1E, 0xB1, 0x1E, 0xB6, 0x1E, 0xB7, 0x1E, 0xBE, 0x1E, 0xBF, 0x1E, 0xC0, 0x1E, 0xC1,
-- 0x1E, 0xC6, 0x1E, 0xC7, 0x1E, 0xD0, 0x1E, 0xD1, 0x1E, 0xD2, 0x1E, 0xD3, 0x1E, 0xD8, 0x1E, 0xD9,
-- 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xDE, 0x1E, 0xDF, 0x1E, 0xE0, 0x1E, 0xE1,
-- 0x1E, 0xE2, 0x1E, 0xE3, 0x1E, 0xE8, 0x1E, 0xE9, 0x1E, 0xEA, 0x1E, 0xEB, 0x1E, 0xEC, 0x1E, 0xED,
-- 0x1E, 0xEE, 0x1E, 0xEF, 0x1E, 0xF0, 0x1E, 0xF1, 0x00, 0x01, 0x02, 0xDC, 0x00, 0x49, 0x00, 0x98,
-- 0x00, 0xA0, 0x00, 0xA8, 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xC8, 0x00, 0xCE, 0x00, 0xD6,
-- 0x00, 0xDE, 0x00, 0xE6, 0x00, 0xEE, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x06, 0x01, 0x0E, 0x01, 0x16,
-- 0x01, 0x1E, 0x01, 0x26, 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x44, 0x01, 0x4C, 0x01, 0x54,
-- 0x01, 0x5C, 0x01, 0x64, 0x01, 0x6C, 0x01, 0x74, 0x01, 0x7C, 0x01, 0x84, 0x01, 0x8C, 0x01, 0x94,
-- 0x01, 0x9C, 0x01, 0xA4, 0x01, 0xAC, 0x01, 0xB4, 0x01, 0xBC, 0x01, 0xC4, 0x01, 0xCC, 0x01, 0xD4,
-- 0x01, 0xDC, 0x01, 0xE4, 0x01, 0xEC, 0x01, 0xF4, 0x01, 0xFC, 0x02, 0x04, 0x02, 0x0C, 0x02, 0x14,
-- 0x02, 0x1C, 0x02, 0x24, 0x02, 0x2C, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x44, 0x02, 0x4C, 0x02, 0x54,
-- 0x02, 0x5C, 0x02, 0x64, 0x02, 0x6C, 0x02, 0x74, 0x02, 0x7C, 0x02, 0x84, 0x02, 0x8C, 0x02, 0x94,
-- 0x02, 0x9C, 0x02, 0xA4, 0x02, 0xAC, 0x02, 0xB4, 0x02, 0xBC, 0x02, 0xC4, 0x02, 0xCC, 0x02, 0xD4,
-- 0x00, 0x03, 0x00, 0x55, 0x03, 0x08, 0x03, 0x01, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x01,
-- 0x00, 0x03, 0x00, 0x55, 0x03, 0x08, 0x03, 0x40, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x40,
-- 0x00, 0x03, 0x00, 0x4F, 0x03, 0x28, 0x03, 0x04, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x28, 0x03, 0x04,
-- 0x00, 0x02, 0x21, 0x2B, 0x03, 0x41, 0x00, 0x03, 0x00, 0x61, 0x03, 0x0A, 0x03, 0x41, 0x00, 0x03,
-- 0x00, 0x43, 0x03, 0x01, 0x03, 0x27, 0x00, 0x03, 0x00, 0x63, 0x03, 0x01, 0x03, 0x27, 0x00, 0x03,
-- 0x00, 0x45, 0x03, 0x04, 0x03, 0x40, 0x00, 0x03, 0x00, 0x65, 0x03, 0x04, 0x03, 0x40, 0x00, 0x03,
-- 0x00, 0x45, 0x03, 0x04, 0x03, 0x41, 0x00, 0x03, 0x00, 0x65, 0x03, 0x04, 0x03, 0x41, 0x00, 0x03,
-- 0x00, 0x45, 0x03, 0x27, 0x03, 0x06, 0x00, 0x03, 0x00, 0x65, 0x03, 0x27, 0x03, 0x06, 0x00, 0x03,
-- 0x00, 0x49, 0x03, 0x08, 0x03, 0x01, 0x00, 0x03, 0x00, 0x69, 0x03, 0x08, 0x03, 0x01, 0x00, 0x02,
-- 0x21, 0x2A, 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x03, 0x03, 0x41, 0x00, 0x03, 0x00, 0x6F,
-- 0x03, 0x03, 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x40, 0x00, 0x03, 0x00, 0x6F,
-- 0x03, 0x04, 0x03, 0x40, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x41, 0x00, 0x03, 0x00, 0x6F,
-- 0x03, 0x04, 0x03, 0x41, 0x00, 0x03, 0x00, 0x53, 0x03, 0x23, 0x03, 0x07, 0x00, 0x03, 0x00, 0x73,
-- 0x03, 0x23, 0x03, 0x07, 0x00, 0x03, 0x00, 0x55, 0x03, 0x03, 0x03, 0x41, 0x00, 0x03, 0x00, 0x75,
-- 0x03, 0x03, 0x03, 0x41, 0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x61,
-- 0x03, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x40, 0x00, 0x03, 0x00, 0x61,
-- 0x03, 0x02, 0x03, 0x40, 0x00, 0x03, 0x00, 0x41, 0x03, 0x23, 0x03, 0x02, 0x00, 0x03, 0x00, 0x61,
-- 0x03, 0x23, 0x03, 0x02, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x41, 0x00, 0x03, 0x00, 0x61,
-- 0x03, 0x06, 0x03, 0x41, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x40, 0x00, 0x03, 0x00, 0x61,
-- 0x03, 0x06, 0x03, 0x40, 0x00, 0x03, 0x00, 0x41, 0x03, 0x23, 0x03, 0x06, 0x00, 0x03, 0x00, 0x61,
-- 0x03, 0x23, 0x03, 0x06, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x65,
-- 0x03, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x40, 0x00, 0x03, 0x00, 0x65,
-- 0x03, 0x02, 0x03, 0x40, 0x00, 0x03, 0x00, 0x45, 0x03, 0x23, 0x03, 0x02, 0x00, 0x03, 0x00, 0x65,
-- 0x03, 0x23, 0x03, 0x02, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x6F,
-- 0x03, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x40, 0x00, 0x03, 0x00, 0x6F,
-- 0x03, 0x02, 0x03, 0x40, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x23, 0x03, 0x02, 0x00, 0x03, 0x00, 0x6F,
-- 0x03, 0x23, 0x03, 0x02, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x01, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F,
-- 0x03, 0x01, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x00, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F,
-- 0x03, 0x00, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x09, 0x00, 0x03, 0x00, 0x6F,
-- 0x03, 0x1B, 0x03, 0x09, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x03, 0x00, 0x03, 0x00, 0x6F,
-- 0x03, 0x1B, 0x03, 0x03, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x23, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F,
-- 0x03, 0x23, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x55, 0x03, 0x01, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75,
-- 0x03, 0x01, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x55, 0x03, 0x00, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75,
-- 0x03, 0x00, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x09, 0x00, 0x03, 0x00, 0x75,
-- 0x03, 0x1B, 0x03, 0x09, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x03, 0x00, 0x03, 0x00, 0x75,
-- 0x03, 0x1B, 0x03, 0x03, 0x00, 0x03, 0x00, 0x55, 0x03, 0x23, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75,
-- 0x03, 0x23, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x49, 0x01, 0xD7, 0x01, 0xD8, 0x01, 0xDB, 0x01, 0xDC,
-- 0x01, 0xEC, 0x01, 0xED, 0x01, 0xFA, 0x01, 0xFB, 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0x14, 0x1E, 0x15,
-- 0x1E, 0x16, 0x1E, 0x17, 0x1E, 0x1C, 0x1E, 0x1D, 0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0x30, 0x1E, 0x4C,
-- 0x1E, 0x4D, 0x1E, 0x50, 0x1E, 0x51, 0x1E, 0x52, 0x1E, 0x53, 0x1E, 0x68, 0x1E, 0x69, 0x1E, 0x78,
-- 0x1E, 0x79, 0x1E, 0xA4, 0x1E, 0xA5, 0x1E, 0xA6, 0x1E, 0xA7, 0x1E, 0xAC, 0x1E, 0xAD, 0x1E, 0xAE,
-- 0x1E, 0xAF, 0x1E, 0xB0, 0x1E, 0xB1, 0x1E, 0xB6, 0x1E, 0xB7, 0x1E, 0xBE, 0x1E, 0xBF, 0x1E, 0xC0,
-- 0x1E, 0xC1, 0x1E, 0xC6, 0x1E, 0xC7, 0x1E, 0xD0, 0x1E, 0xD1, 0x1E, 0xD2, 0x1E, 0xD3, 0x1E, 0xD8,
-- 0x1E, 0xD9, 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xDE, 0x1E, 0xDF, 0x1E, 0xE0,
-- 0x1E, 0xE1, 0x1E, 0xE2, 0x1E, 0xE3, 0x1E, 0xE8, 0x1E, 0xE9, 0x1E, 0xEA, 0x1E, 0xEB, 0x1E, 0xEC,
-- 0x1E, 0xED, 0x1E, 0xEE, 0x1E, 0xEF, 0x1E, 0xF0, 0x1E, 0xF1, 0x00, 0x01, 0x00, 0x9C, 0x00, 0x0F,
-- 0x00, 0x24, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C,
-- 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7C, 0x00, 0x84, 0x00, 0x8C, 0x00, 0x94, 0x00, 0x03,
-- 0x00, 0x55, 0x03, 0x08, 0x03, 0x41, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x41, 0x00, 0x03,
-- 0x00, 0x41, 0x03, 0x0A, 0x03, 0x01, 0x00, 0x03, 0x00, 0x43, 0x03, 0x27, 0x03, 0x01, 0x00, 0x03,
-- 0x00, 0x63, 0x03, 0x27, 0x03, 0x01, 0x00, 0x03, 0x00, 0x49, 0x03, 0x08, 0x03, 0x41, 0x00, 0x03,
-- 0x00, 0x69, 0x03, 0x08, 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x01, 0x00, 0x03,
-- 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x01, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x00, 0x00, 0x03,
-- 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x00, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x01, 0x00, 0x03,
-- 0x00, 0x75, 0x03, 0x1B, 0x03, 0x01, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x00, 0x00, 0x03,
-- 0x00, 0x75, 0x03, 0x1B, 0x03, 0x00, 0x00, 0x01, 0x00, 0x0F, 0x01, 0xD7, 0x01, 0xD8, 0x01, 0xFA,
-- 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD,
-- 0x1E, 0xE8, 0x1E, 0xE9, 0x1E, 0xEA, 0x1E, 0xEB, 0x00, 0x01, 0x00, 0x74, 0x00, 0x0B, 0x00, 0x1C,
-- 0x00, 0x24, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C,
-- 0x00, 0x64, 0x00, 0x6C, 0x00, 0x03, 0x00, 0x41, 0x03, 0x0A, 0x03, 0x41, 0x00, 0x03, 0x00, 0x43,
-- 0x03, 0x27, 0x03, 0x41, 0x00, 0x03, 0x00, 0x63, 0x03, 0x27, 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F,
-- 0x03, 0x1B, 0x03, 0x41, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F,
-- 0x03, 0x1B, 0x03, 0x40, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x40, 0x00, 0x03, 0x00, 0x55,
-- 0x03, 0x1B, 0x03, 0x41, 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B, 0x03, 0x41, 0x00, 0x03, 0x00, 0x55,
-- 0x03, 0x1B, 0x03, 0x40, 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B, 0x03, 0x40, 0x00, 0x01, 0x00, 0x0B,
-- 0x01, 0xFA, 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xE8,
-- 0x1E, 0xE9, 0x1E, 0xEA, 0x1E, 0xEB, 0x00, 0x01, 0x00, 0x6A, 0x00, 0x0A, 0x00, 0x1A, 0x00, 0x22,
-- 0x00, 0x2A, 0x00, 0x32, 0x00, 0x3A, 0x00, 0x42, 0x00, 0x4A, 0x00, 0x52, 0x00, 0x5A, 0x00, 0x62,
-- 0x00, 0x03, 0x00, 0x43, 0x03, 0x41, 0x03, 0x27, 0x00, 0x03, 0x00, 0x63, 0x03, 0x41, 0x03, 0x27,
-- 0x00, 0x03, 0x00, 0x4F, 0x03, 0x41, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x41, 0x03, 0x1B,
-- 0x00, 0x03, 0x00, 0x4F, 0x03, 0x40, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x40, 0x03, 0x1B,
-- 0x00, 0x03, 0x00, 0x55, 0x03, 0x41, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x41, 0x03, 0x1B,
-- 0x00, 0x03, 0x00, 0x55, 0x03, 0x40, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x40, 0x03, 0x1B,
-- 0x00, 0x01, 0x00, 0x0A, 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD,
-- 0x1E, 0xE8, 0x1E, 0xE9, 0x1E, 0xEA, 0x1E, 0xEB, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08,
-- 0x00, 0x01, 0x00, 0x26, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x1C, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C,
-- 0x0D, 0x4A, 0x00, 0x02, 0x0D, 0x3E, 0x0D, 0x4C, 0x00, 0x02, 0x0D, 0x57, 0x00, 0x01, 0x00, 0x04,
-- 0x0D, 0x4B, 0x00, 0x02, 0x0D, 0x3E, 0x00, 0x01, 0x00, 0x02, 0x0D, 0x46, 0x0D, 0x47, 0x00, 0x02,
-- 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x03, 0x00, 0x0C, 0x00, 0x12,
-- 0x00, 0x18, 0x00, 0x02, 0x0D, 0x46, 0x0D, 0x3E, 0x00, 0x02, 0x0D, 0x47, 0x0D, 0x3E, 0x00, 0x02,
-- 0x0D, 0x46, 0x0D, 0x57, 0x00, 0x01, 0x00, 0x03, 0x0D, 0x4A, 0x0D, 0x4B, 0x0D, 0x4C, 0x00, 0x04,
-+ 0x1E, 0xEF, 0x1E, 0xF0, 0x1E, 0xF1, 0x00, 0x01, 0x00, 0x9C, 0x00, 0x0F, 0x00, 0x24, 0x00, 0x2C,
-+ 0x00, 0x34, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6C,
-+ 0x00, 0x74, 0x00, 0x7C, 0x00, 0x84, 0x00, 0x8C, 0x00, 0x94, 0x00, 0x03, 0x00, 0x55, 0x03, 0x08,
-+ 0x03, 0x41, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x41, 0x00, 0x03, 0x00, 0x41, 0x03, 0x0A,
-+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x43, 0x03, 0x27, 0x03, 0x01, 0x00, 0x03, 0x00, 0x63, 0x03, 0x27,
-+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x49, 0x03, 0x08, 0x03, 0x41, 0x00, 0x03, 0x00, 0x69, 0x03, 0x08,
-+ 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x01, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B,
-+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x00, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B,
-+ 0x03, 0x00, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x01, 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B,
-+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x00, 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B,
-+ 0x03, 0x00, 0x00, 0x01, 0x00, 0x0F, 0x01, 0xD7, 0x01, 0xD8, 0x01, 0xFA, 0x1E, 0x08, 0x1E, 0x09,
-+ 0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xE8, 0x1E, 0xE9,
-+ 0x1E, 0xEA, 0x1E, 0xEB, 0x00, 0x01, 0x00, 0x74, 0x00, 0x0B, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2C,
-+ 0x00, 0x34, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6C,
-+ 0x00, 0x03, 0x00, 0x41, 0x03, 0x0A, 0x03, 0x41, 0x00, 0x03, 0x00, 0x43, 0x03, 0x27, 0x03, 0x41,
-+ 0x00, 0x03, 0x00, 0x63, 0x03, 0x27, 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x41,
-+ 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x40,
-+ 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x40, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x41,
-+ 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B, 0x03, 0x41, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x40,
-+ 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B, 0x03, 0x40, 0x00, 0x01, 0x00, 0x0B, 0x01, 0xFA, 0x1E, 0x08,
-+ 0x1E, 0x09, 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xE8, 0x1E, 0xE9, 0x1E, 0xEA,
-+ 0x1E, 0xEB, 0x00, 0x01, 0x00, 0x6A, 0x00, 0x0A, 0x00, 0x1A, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x32,
-+ 0x00, 0x3A, 0x00, 0x42, 0x00, 0x4A, 0x00, 0x52, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x03, 0x00, 0x43,
-+ 0x03, 0x41, 0x03, 0x27, 0x00, 0x03, 0x00, 0x63, 0x03, 0x41, 0x03, 0x27, 0x00, 0x03, 0x00, 0x4F,
-+ 0x03, 0x41, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x41, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x4F,
-+ 0x03, 0x40, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x40, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x55,
-+ 0x03, 0x41, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x41, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x55,
-+ 0x03, 0x40, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x40, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x0A,
-+ 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xE8, 0x1E, 0xE9,
-+ 0x1E, 0xEA, 0x1E, 0xEB, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x26,
-+ 0x00, 0x02, 0x00, 0x0A, 0x00, 0x1C, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x0D, 0x4A, 0x00, 0x02,
-+ 0x0D, 0x3E, 0x0D, 0x4C, 0x00, 0x02, 0x0D, 0x57, 0x00, 0x01, 0x00, 0x04, 0x0D, 0x4B, 0x00, 0x02,
-+ 0x0D, 0x3E, 0x00, 0x01, 0x00, 0x02, 0x0D, 0x46, 0x0D, 0x47, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01,
-+ 0x00, 0x08, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x03, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x02,
-+ 0x0D, 0x46, 0x0D, 0x3E, 0x00, 0x02, 0x0D, 0x47, 0x0D, 0x3E, 0x00, 0x02, 0x0D, 0x46, 0x0D, 0x57,
-+ 0x00, 0x01, 0x00, 0x03, 0x0D, 0x4A, 0x0D, 0x4B, 0x0D, 0x4C, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
-+ 0x00, 0x08, 0x00, 0x01, 0x00, 0x12, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x04, 0x10, 0x26,
-+ 0x00, 0x02, 0x10, 0x2E, 0x00, 0x01, 0x00, 0x01, 0x10, 0x25, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01,
-+ 0x00, 0x08, 0x00, 0x01, 0x00, 0x0E, 0x00, 0x01, 0x00, 0x08, 0x00, 0x02, 0x10, 0x25, 0x10, 0x2E,
-+ 0x00, 0x01, 0x00, 0x01, 0x10, 0x26, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-+ 0x00, 0x22, 0x00, 0x01, 0x00, 0x08, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x0B, 0x4B,
-+ 0x00, 0x02, 0x0B, 0x3E, 0x0B, 0x48, 0x00, 0x02, 0x0B, 0x56, 0x0B, 0x4C, 0x00, 0x02, 0x0B, 0x57,
-+ 0x00, 0x01, 0x00, 0x01, 0x0B, 0x47, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-+ 0x00, 0x1E, 0x00, 0x03, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x02, 0x0B, 0x47, 0x0B, 0x56,
-+ 0x00, 0x02, 0x0B, 0x47, 0x0B, 0x3E, 0x00, 0x02, 0x0B, 0x47, 0x0B, 0x57, 0x00, 0x01, 0x00, 0x03,
-+ 0x0B, 0x48, 0x0B, 0x4B, 0x0B, 0x4C, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-+ 0x00, 0x38, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x2E, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x18,
-+ 0x00, 0x1E, 0x0D, 0xDA, 0x00, 0x02, 0x0D, 0xCA, 0x0D, 0xDD, 0x00, 0x03, 0x0D, 0xCF, 0x0D, 0xCA,
-+ 0x0D, 0xDC, 0x00, 0x02, 0x0D, 0xCF, 0x0D, 0xDE, 0x00, 0x02, 0x0D, 0xDF, 0x00, 0x01, 0x00, 0x04,
-+ 0x0D, 0xDD, 0x00, 0x02, 0x0D, 0xCA, 0x00, 0x01, 0x00, 0x02, 0x0D, 0xD9, 0x0D, 0xDC, 0x00, 0x02,
-+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x3C, 0x00, 0x01, 0x00, 0x26, 0x00, 0x04, 0x00, 0x0E,
-+ 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x02, 0x0D, 0xD9, 0x0D, 0xCA, 0x00, 0x02, 0x0D, 0xD9,
-+ 0x0D, 0xCF, 0x00, 0x02, 0x0D, 0xDC, 0x0D, 0xCA, 0x00, 0x02, 0x0D, 0xD9, 0x0D, 0xDF, 0x00, 0x01,
-+ 0x00, 0x04, 0x0D, 0xDA, 0x0D, 0xDC, 0x0D, 0xDD, 0x0D, 0xDE, 0x00, 0x01, 0x00, 0x10, 0x00, 0x01,
-+ 0x00, 0x08, 0x00, 0x03, 0x0D, 0xD9, 0x0D, 0xCF, 0x0D, 0xCA, 0x00, 0x01, 0x00, 0x01, 0x0D, 0xDD,
-+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x32, 0x00, 0x03, 0x00, 0x0C,
-+ 0x00, 0x16, 0x00, 0x28, 0x00, 0x01, 0x00, 0x04, 0x0B, 0x94, 0x00, 0x02, 0x0B, 0xD7, 0x00, 0x02,
-+ 0x00, 0x06, 0x00, 0x0C, 0x0B, 0xCA, 0x00, 0x02, 0x0B, 0xBE, 0x0B, 0xCC, 0x00, 0x02, 0x0B, 0xD7,
-+ 0x00, 0x01, 0x00, 0x04, 0x0B, 0xCB, 0x00, 0x02, 0x0B, 0xBE, 0x00, 0x01, 0x00, 0x03, 0x0B, 0x92,
-+ 0x0B, 0xC6, 0x0B, 0xC7, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x26,
-+ 0x00, 0x04, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x02, 0x0B, 0x92, 0x0B, 0xD7,
-+ 0x00, 0x02, 0x0B, 0xC6, 0x0B, 0xBE, 0x00, 0x02, 0x0B, 0xC7, 0x0B, 0xBE, 0x00, 0x02, 0x0B, 0xC6,
-+ 0x0B, 0xD7, 0x00, 0x01, 0x00, 0x04, 0x0B, 0x94, 0x0B, 0xCA, 0x0B, 0xCB, 0x0B, 0xCC, 0x00, 0x04,
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x12, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-- 0x00, 0x04, 0x10, 0x26, 0x00, 0x02, 0x10, 0x2E, 0x00, 0x01, 0x00, 0x01, 0x10, 0x25, 0x00, 0x02,
-+ 0x00, 0x04, 0x0C, 0x48, 0x00, 0x02, 0x0C, 0x56, 0x00, 0x01, 0x00, 0x01, 0x0C, 0x46, 0x00, 0x02,
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x0E, 0x00, 0x01, 0x00, 0x08, 0x00, 0x02,
-- 0x10, 0x25, 0x10, 0x2E, 0x00, 0x01, 0x00, 0x01, 0x10, 0x26, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
-- 0x00, 0x08, 0x00, 0x01, 0x00, 0x3A, 0x00, 0x03, 0x00, 0x0C, 0x00, 0x16, 0x00, 0x20, 0x00, 0x01,
-- 0x00, 0x04, 0x0B, 0x5C, 0x00, 0x02, 0x0B, 0x3C, 0x00, 0x01, 0x00, 0x04, 0x0B, 0x5D, 0x00, 0x02,
-- 0x0B, 0x3C, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x0B, 0x4B, 0x00, 0x02, 0x0B, 0x3E,
-- 0x0B, 0x48, 0x00, 0x02, 0x0B, 0x56, 0x0B, 0x4C, 0x00, 0x02, 0x0B, 0x57, 0x00, 0x01, 0x00, 0x03,
-- 0x0B, 0x21, 0x0B, 0x22, 0x0B, 0x47, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-- 0x00, 0x2E, 0x00, 0x05, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x02,
-- 0x0B, 0x47, 0x0B, 0x56, 0x00, 0x02, 0x0B, 0x47, 0x0B, 0x3E, 0x00, 0x02, 0x0B, 0x47, 0x0B, 0x57,
-- 0x00, 0x02, 0x0B, 0x21, 0x0B, 0x3C, 0x00, 0x02, 0x0B, 0x22, 0x0B, 0x3C, 0x00, 0x01, 0x00, 0x05,
-- 0x0B, 0x48, 0x0B, 0x4B, 0x0B, 0x4C, 0x0B, 0x5C, 0x0B, 0x5D, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
-- 0x00, 0x08, 0x00, 0x01, 0x00, 0x38, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x2E, 0x00, 0x04, 0x00, 0x0A,
-- 0x00, 0x10, 0x00, 0x18, 0x00, 0x1E, 0x0D, 0xDA, 0x00, 0x02, 0x0D, 0xCA, 0x0D, 0xDD, 0x00, 0x03,
-- 0x0D, 0xCF, 0x0D, 0xCA, 0x0D, 0xDC, 0x00, 0x02, 0x0D, 0xCF, 0x0D, 0xDE, 0x00, 0x02, 0x0D, 0xDF,
-- 0x00, 0x01, 0x00, 0x04, 0x0D, 0xDD, 0x00, 0x02, 0x0D, 0xCA, 0x00, 0x01, 0x00, 0x02, 0x0D, 0xD9,
-- 0x0D, 0xDC, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x3C, 0x00, 0x01, 0x00, 0x26,
-- 0x00, 0x04, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x02, 0x0D, 0xD9, 0x0D, 0xCA,
-- 0x00, 0x02, 0x0D, 0xD9, 0x0D, 0xCF, 0x00, 0x02, 0x0D, 0xDC, 0x0D, 0xCA, 0x00, 0x02, 0x0D, 0xD9,
-- 0x0D, 0xDF, 0x00, 0x01, 0x00, 0x04, 0x0D, 0xDA, 0x0D, 0xDC, 0x0D, 0xDD, 0x0D, 0xDE, 0x00, 0x01,
-- 0x00, 0x10, 0x00, 0x01, 0x00, 0x08, 0x00, 0x03, 0x0D, 0xD9, 0x0D, 0xCF, 0x0D, 0xCA, 0x00, 0x01,
-- 0x00, 0x01, 0x0D, 0xDD, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x32,
-- 0x00, 0x03, 0x00, 0x0C, 0x00, 0x16, 0x00, 0x28, 0x00, 0x01, 0x00, 0x04, 0x0B, 0x94, 0x00, 0x02,
-- 0x0B, 0xD7, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x0B, 0xCA, 0x00, 0x02, 0x0B, 0xBE, 0x0B, 0xCC,
-- 0x00, 0x02, 0x0B, 0xD7, 0x00, 0x01, 0x00, 0x04, 0x0B, 0xCB, 0x00, 0x02, 0x0B, 0xBE, 0x00, 0x01,
-- 0x00, 0x03, 0x0B, 0x92, 0x0B, 0xC6, 0x0B, 0xC7, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08,
-- 0x00, 0x01, 0x00, 0x26, 0x00, 0x04, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x02,
-- 0x0B, 0x92, 0x0B, 0xD7, 0x00, 0x02, 0x0B, 0xC6, 0x0B, 0xBE, 0x00, 0x02, 0x0B, 0xC7, 0x0B, 0xBE,
-- 0x00, 0x02, 0x0B, 0xC6, 0x0B, 0xD7, 0x00, 0x01, 0x00, 0x04, 0x0B, 0x94, 0x0B, 0xCA, 0x0B, 0xCB,
-- 0x0B, 0xCC, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x12, 0x00, 0x01,
-- 0x00, 0x08, 0x00, 0x01, 0x00, 0x04, 0x0C, 0x48, 0x00, 0x02, 0x0C, 0x56, 0x00, 0x01, 0x00, 0x01,
-- 0x0C, 0x46, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x0E, 0x00, 0x01,
-- 0x00, 0x08, 0x00, 0x02, 0x0C, 0x46, 0x0C, 0x56, 0x00, 0x01, 0x00, 0x01, 0x0C, 0x48, 0x00, 0x04,
-- 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0xEE, 0x00, 0x12, 0x00, 0x2A, 0x00, 0x34,
-- 0x00, 0x3E, 0x00, 0x48, 0x00, 0x52, 0x00, 0x5C, 0x00, 0x66, 0x00, 0x80, 0x00, 0x8A, 0x00, 0x94,
-- 0x00, 0x9E, 0x00, 0xA8, 0x00, 0xB2, 0x00, 0xBC, 0x00, 0xC6, 0x00, 0xD0, 0x00, 0xDA, 0x00, 0xE4,
-- 0x00, 0x01, 0x00, 0x04, 0x0F, 0x69, 0x00, 0x02, 0x0F, 0xB5, 0x00, 0x01, 0x00, 0x04, 0x0F, 0x43,
-- 0x00, 0x02, 0x0F, 0xB7, 0x00, 0x01, 0x00, 0x04, 0x0F, 0x4D, 0x00, 0x02, 0x0F, 0xB7, 0x00, 0x01,
-- 0x00, 0x04, 0x0F, 0x52, 0x00, 0x02, 0x0F, 0xB7, 0x00, 0x01, 0x00, 0x04, 0x0F, 0x57, 0x00, 0x02,
-- 0x0F, 0xB7, 0x00, 0x01, 0x00, 0x04, 0x0F, 0x5C, 0x00, 0x02, 0x0F, 0xB7, 0x00, 0x03, 0x00, 0x08,
-- 0x00, 0x0E, 0x00, 0x14, 0x0F, 0x73, 0x00, 0x02, 0x0F, 0x72, 0x0F, 0x75, 0x00, 0x02, 0x0F, 0x74,
-- 0x0F, 0x81, 0x00, 0x02, 0x0F, 0x80, 0x00, 0x01, 0x00, 0x04, 0x0F, 0x73, 0x00, 0x02, 0x0F, 0x71,
-- 0x00, 0x01, 0x00, 0x04, 0x0F, 0x75, 0x00, 0x02, 0x0F, 0x71, 0x00, 0x01, 0x00, 0x04, 0x0F, 0x81,
-- 0x00, 0x02, 0x0F, 0x71, 0x00, 0x01, 0x00, 0x04, 0x0F, 0xB9, 0x00, 0x02, 0x0F, 0xB5, 0x00, 0x01,
-- 0x00, 0x04, 0x0F, 0x93, 0x00, 0x02, 0x0F, 0xB7, 0x00, 0x01, 0x00, 0x04, 0x0F, 0x9D, 0x00, 0x02,
-- 0x0F, 0xB7, 0x00, 0x01, 0x00, 0x04, 0x0F, 0xA2, 0x00, 0x02, 0x0F, 0xB7, 0x00, 0x01, 0x00, 0x04,
-- 0x0F, 0xA7, 0x00, 0x02, 0x0F, 0xB7, 0x00, 0x01, 0x00, 0x04, 0x0F, 0xAC, 0x00, 0x02, 0x0F, 0xB7,
-- 0x00, 0x01, 0x00, 0x04, 0x0F, 0x76, 0x00, 0x02, 0x0F, 0x80, 0x00, 0x01, 0x00, 0x04, 0x0F, 0x78,
-- 0x00, 0x02, 0x0F, 0x80, 0x00, 0x01, 0x00, 0x12, 0x0F, 0x40, 0x0F, 0x42, 0x0F, 0x4C, 0x0F, 0x51,
-- 0x0F, 0x56, 0x0F, 0x5B, 0x0F, 0x71, 0x0F, 0x72, 0x0F, 0x74, 0x0F, 0x80, 0x0F, 0x90, 0x0F, 0x92,
-- 0x0F, 0x9C, 0x0F, 0xA1, 0x0F, 0xA6, 0x0F, 0xAB, 0x0F, 0xB2, 0x0F, 0xB3, 0x00, 0x02, 0x00, 0x00,
-- 0x00, 0x02, 0x00, 0x0A, 0x00, 0xBE, 0x00, 0x01, 0x00, 0x8E, 0x00, 0x11, 0x00, 0x28, 0x00, 0x2E,
-- 0x00, 0x34, 0x00, 0x3A, 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x00, 0x5E,
-- 0x00, 0x64, 0x00, 0x6A, 0x00, 0x70, 0x00, 0x76, 0x00, 0x7C, 0x00, 0x82, 0x00, 0x88, 0x00, 0x02,
-- 0x0F, 0x42, 0x0F, 0xB7, 0x00, 0x02, 0x0F, 0x4C, 0x0F, 0xB7, 0x00, 0x02, 0x0F, 0x51, 0x0F, 0xB7,
-- 0x00, 0x02, 0x0F, 0x56, 0x0F, 0xB7, 0x00, 0x02, 0x0F, 0x5B, 0x0F, 0xB7, 0x00, 0x02, 0x0F, 0x40,
-- 0x0F, 0xB5, 0x00, 0x02, 0x0F, 0x71, 0x0F, 0x72, 0x00, 0x02, 0x0F, 0x71, 0x0F, 0x74, 0x00, 0x02,
-- 0x0F, 0xB2, 0x0F, 0x80, 0x00, 0x02, 0x0F, 0xB3, 0x0F, 0x80, 0x00, 0x02, 0x0F, 0x71, 0x0F, 0x80,
-- 0x00, 0x02, 0x0F, 0x92, 0x0F, 0xB7, 0x00, 0x02, 0x0F, 0x9C, 0x0F, 0xB7, 0x00, 0x02, 0x0F, 0xA1,
-- 0x0F, 0xB7, 0x00, 0x02, 0x0F, 0xA6, 0x0F, 0xB7, 0x00, 0x02, 0x0F, 0xAB, 0x0F, 0xB7, 0x00, 0x02,
-- 0x0F, 0x90, 0x0F, 0xB5, 0x00, 0x01, 0x00, 0x11, 0x0F, 0x43, 0x0F, 0x4D, 0x0F, 0x52, 0x0F, 0x57,
-- 0x0F, 0x5C, 0x0F, 0x69, 0x0F, 0x73, 0x0F, 0x75, 0x0F, 0x76, 0x0F, 0x78, 0x0F, 0x81, 0x0F, 0x93,
-- 0x0F, 0x9D, 0x0F, 0xA2, 0x0F, 0xA7, 0x0F, 0xAC, 0x0F, 0xB9, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x03,
-- 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x02, 0x0F, 0x72, 0x0F, 0x71, 0x00, 0x02, 0x0F, 0x74,
-- 0x0F, 0x71, 0x00, 0x02, 0x0F, 0x80, 0x0F, 0x71, 0x00, 0x01, 0x00, 0x03, 0x0F, 0x73, 0x0F, 0x75,
-- 0x0F, 0x81
-+ 0x0C, 0x46, 0x0C, 0x56, 0x00, 0x01, 0x00, 0x01, 0x0C, 0x48, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
-+ 0x00, 0x08, 0x00, 0x01, 0x00, 0x8A, 0x00, 0x0B, 0x00, 0x1C, 0x00, 0x26, 0x00, 0x30, 0x00, 0x3A,
-+ 0x00, 0x44, 0x00, 0x4E, 0x00, 0x58, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x80, 0x00, 0x01,
-+ 0x00, 0x04, 0x1B, 0x06, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x08, 0x00, 0x02,
-+ 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x0A, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04,
-+ 0x1B, 0x0C, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x0E, 0x00, 0x02, 0x1B, 0x35,
-+ 0x00, 0x01, 0x00, 0x04, 0x1B, 0x12, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x3B,
-+ 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x3D, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01,
-+ 0x00, 0x04, 0x1B, 0x40, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x41, 0x00, 0x02,
-+ 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x43, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x0B,
-+ 0x1B, 0x05, 0x1B, 0x07, 0x1B, 0x09, 0x1B, 0x0B, 0x1B, 0x0D, 0x1B, 0x11, 0x1B, 0x3A, 0x1B, 0x3C,
-+ 0x1B, 0x3E, 0x1B, 0x3F, 0x1B, 0x42, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-+ 0x00, 0x5E, 0x00, 0x0B, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x00, 0x3A,
-+ 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x00, 0x02, 0x1B, 0x05, 0x1B, 0x35,
-+ 0x00, 0x02, 0x1B, 0x07, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x09, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x0B,
-+ 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x0D, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x11, 0x1B, 0x35, 0x00, 0x02,
-+ 0x1B, 0x3A, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x3C, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x3E, 0x1B, 0x35,
-+ 0x00, 0x02, 0x1B, 0x3F, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x42, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x0B,
-+ 0x1B, 0x06, 0x1B, 0x08, 0x1B, 0x0A, 0x1B, 0x0C, 0x1B, 0x0E, 0x1B, 0x12, 0x1B, 0x3B, 0x1B, 0x3D,
-+ 0x1B, 0x40, 0x1B, 0x41, 0x1B, 0x43
- };
-
- const le_uint8 CanonShaping::glyphDefinitionTable[] = {
-@@ -3701,7 +3561,7 @@
- 0xFC, 0x00, 0xFC, 0x5D, 0x00, 0x02, 0xFC, 0x64, 0xFC, 0xF1, 0x00, 0x02, 0xFC, 0xF5, 0xFD, 0x3D,
- 0x00, 0x02, 0xFD, 0x50, 0xFD, 0x8F, 0x00, 0x02, 0xFD, 0x92, 0xFD, 0xC7, 0x00, 0x02, 0xFD, 0xF0,
- 0xFD, 0xFC, 0x00, 0x02, 0xFE, 0x80, 0xFE, 0xF4, 0x00, 0x01, 0xFE, 0xF5, 0xFE, 0xFC, 0x00, 0x02,
-- 0x00, 0x02, 0x00, 0xC1, 0x03, 0x00, 0x03, 0x14, 0x00, 0xE6, 0x03, 0x15, 0x03, 0x15, 0x00, 0xE8,
-+ 0x00, 0x02, 0x00, 0xCE, 0x03, 0x00, 0x03, 0x14, 0x00, 0xE6, 0x03, 0x15, 0x03, 0x15, 0x00, 0xE8,
- 0x03, 0x16, 0x03, 0x19, 0x00, 0xDC, 0x03, 0x1A, 0x03, 0x1A, 0x00, 0xE8, 0x03, 0x1B, 0x03, 0x1B,
- 0x00, 0xD8, 0x03, 0x1C, 0x03, 0x20, 0x00, 0xDC, 0x03, 0x21, 0x03, 0x22, 0x00, 0xCA, 0x03, 0x23,
- 0x03, 0x26, 0x00, 0xDC, 0x03, 0x27, 0x03, 0x28, 0x00, 0xCA, 0x03, 0x29, 0x03, 0x33, 0x00, 0xDC,
-@@ -3719,61 +3579,66 @@
- 0x05, 0xA7, 0x00, 0xDC, 0x05, 0xA8, 0x05, 0xA8, 0x00, 0xE6, 0x05, 0xA9, 0x05, 0xA9, 0x00, 0xE8,
- 0x05, 0xAA, 0x05, 0xAA, 0x00, 0xDC, 0x05, 0xAB, 0x05, 0xAC, 0x00, 0xE6, 0x05, 0xAD, 0x05, 0xAD,
- 0x00, 0xDE, 0x05, 0xAE, 0x05, 0xAE, 0x00, 0xE8, 0x05, 0xAF, 0x05, 0xAF, 0x00, 0xE6, 0x05, 0xB0,
-- 0x05, 0xB8, 0x00, 0xDC, 0x05, 0xB9, 0x05, 0xB9, 0x00, 0x1B, 0x05, 0xBB, 0x05, 0xBB, 0x00, 0xDC,
-- 0x05, 0xBC, 0x05, 0xBC, 0x00, 0x15, 0x05, 0xBD, 0x05, 0xBD, 0x00, 0xDC, 0x05, 0xBF, 0x05, 0xBF,
-- 0x00, 0x17, 0x05, 0xC1, 0x05, 0xC1, 0x00, 0x0A, 0x05, 0xC2, 0x05, 0xC2, 0x00, 0x0B, 0x05, 0xC4,
-- 0x05, 0xC4, 0x00, 0xE6, 0x05, 0xC5, 0x05, 0xC5, 0x00, 0xDC, 0x05, 0xC7, 0x05, 0xC7, 0x00, 0x12,
-- 0x06, 0x10, 0x06, 0x15, 0x00, 0xE6, 0x06, 0x4B, 0x06, 0x4C, 0x00, 0x1F, 0x06, 0x4D, 0x06, 0x4D,
-- 0x00, 0x1E, 0x06, 0x4E, 0x06, 0x4F, 0x00, 0x1F, 0x06, 0x50, 0x06, 0x50, 0x00, 0x1E, 0x06, 0x51,
-- 0x06, 0x51, 0x00, 0x1C, 0x06, 0x52, 0x06, 0x52, 0x00, 0x1F, 0x06, 0x53, 0x06, 0x53, 0x00, 0x20,
-- 0x06, 0x54, 0x06, 0x55, 0x00, 0x1B, 0x06, 0x56, 0x06, 0x56, 0x00, 0x1D, 0x06, 0x57, 0x06, 0x58,
-- 0x00, 0x1F, 0x06, 0x59, 0x06, 0x5B, 0x00, 0xE6, 0x06, 0x5C, 0x06, 0x5C, 0x00, 0xDC, 0x06, 0x5D,
-- 0x06, 0x5E, 0x00, 0xE6, 0x06, 0x70, 0x06, 0x70, 0x00, 0x1D, 0x06, 0xD6, 0x06, 0xDC, 0x00, 0xE6,
-- 0x06, 0xDF, 0x06, 0xE0, 0x00, 0xE6, 0x06, 0xE1, 0x06, 0xE1, 0x00, 0x1F, 0x06, 0xE2, 0x06, 0xE2,
-- 0x00, 0xE6, 0x06, 0xE3, 0x06, 0xE3, 0x00, 0xDC, 0x06, 0xE4, 0x06, 0xE4, 0x00, 0xE6, 0x06, 0xE7,
-- 0x06, 0xE8, 0x00, 0xE6, 0x06, 0xEA, 0x06, 0xEA, 0x00, 0xDC, 0x06, 0xEB, 0x06, 0xEC, 0x00, 0xE6,
-- 0x06, 0xED, 0x06, 0xED, 0x00, 0xDC, 0x07, 0x11, 0x07, 0x11, 0x00, 0x24, 0x07, 0x30, 0x07, 0x30,
-- 0x00, 0xE6, 0x07, 0x31, 0x07, 0x31, 0x00, 0xDC, 0x07, 0x32, 0x07, 0x33, 0x00, 0xE6, 0x07, 0x34,
-- 0x07, 0x34, 0x00, 0xDC, 0x07, 0x35, 0x07, 0x36, 0x00, 0xE6, 0x07, 0x37, 0x07, 0x39, 0x00, 0xDC,
-- 0x07, 0x3A, 0x07, 0x3A, 0x00, 0xE6, 0x07, 0x3B, 0x07, 0x3C, 0x00, 0xDC, 0x07, 0x3D, 0x07, 0x3D,
-- 0x00, 0xE6, 0x07, 0x3E, 0x07, 0x3E, 0x00, 0xDC, 0x07, 0x3F, 0x07, 0x41, 0x00, 0xE6, 0x07, 0x42,
-- 0x07, 0x42, 0x00, 0xDC, 0x07, 0x43, 0x07, 0x43, 0x00, 0xE6, 0x07, 0x44, 0x07, 0x44, 0x00, 0xDC,
-- 0x07, 0x45, 0x07, 0x45, 0x00, 0xE6, 0x07, 0x46, 0x07, 0x46, 0x00, 0xDC, 0x07, 0x47, 0x07, 0x47,
-- 0x00, 0xE6, 0x07, 0x48, 0x07, 0x48, 0x00, 0xDC, 0x07, 0x49, 0x07, 0x4A, 0x00, 0xE6, 0x09, 0x3C,
-- 0x09, 0x3C, 0x00, 0x07, 0x09, 0x4D, 0x09, 0x4D, 0x00, 0x09, 0x09, 0x51, 0x09, 0x51, 0x00, 0xE6,
-- 0x09, 0x52, 0x09, 0x52, 0x00, 0xDC, 0x09, 0x53, 0x09, 0x54, 0x00, 0xE6, 0x09, 0xBC, 0x09, 0xBC,
-- 0x00, 0x07, 0x09, 0xCD, 0x09, 0xCD, 0x00, 0x09, 0x0A, 0x3C, 0x0A, 0x3C, 0x00, 0x07, 0x0A, 0x4D,
-- 0x0A, 0x4D, 0x00, 0x09, 0x0A, 0xBC, 0x0A, 0xBC, 0x00, 0x07, 0x0A, 0xCD, 0x0A, 0xCD, 0x00, 0x09,
-- 0x0B, 0x3C, 0x0B, 0x3C, 0x00, 0x07, 0x0B, 0x4D, 0x0B, 0x4D, 0x00, 0x09, 0x0B, 0xCD, 0x0B, 0xCD,
-- 0x00, 0x09, 0x0C, 0x4D, 0x0C, 0x4D, 0x00, 0x09, 0x0C, 0x55, 0x0C, 0x55, 0x00, 0x54, 0x0C, 0x56,
-- 0x0C, 0x56, 0x00, 0x5B, 0x0C, 0xBC, 0x0C, 0xBC, 0x00, 0x07, 0x0C, 0xCD, 0x0C, 0xCD, 0x00, 0x09,
-- 0x0D, 0x4D, 0x0D, 0x4D, 0x00, 0x09, 0x0D, 0xCA, 0x0D, 0xCA, 0x00, 0x09, 0x0E, 0x38, 0x0E, 0x39,
-- 0x00, 0x67, 0x0E, 0x3A, 0x0E, 0x3A, 0x00, 0x09, 0x0E, 0x48, 0x0E, 0x4B, 0x00, 0x6B, 0x0E, 0xB8,
-- 0x0E, 0xB9, 0x00, 0x76, 0x0E, 0xC8, 0x0E, 0xCB, 0x00, 0x7A, 0x0F, 0x18, 0x0F, 0x19, 0x00, 0xDC,
-- 0x0F, 0x35, 0x0F, 0x35, 0x00, 0xDC, 0x0F, 0x37, 0x0F, 0x37, 0x00, 0xDC, 0x0F, 0x39, 0x0F, 0x39,
-- 0x00, 0xD8, 0x0F, 0x71, 0x0F, 0x71, 0x00, 0x81, 0x0F, 0x72, 0x0F, 0x72, 0x00, 0x82, 0x0F, 0x74,
-- 0x0F, 0x74, 0x00, 0x84, 0x0F, 0x7A, 0x0F, 0x7D, 0x00, 0x82, 0x0F, 0x80, 0x0F, 0x80, 0x00, 0x82,
-- 0x0F, 0x82, 0x0F, 0x83, 0x00, 0xE6, 0x0F, 0x84, 0x0F, 0x84, 0x00, 0x09, 0x0F, 0x86, 0x0F, 0x87,
-- 0x00, 0xE6, 0x0F, 0xC6, 0x0F, 0xC6, 0x00, 0xDC, 0x10, 0x37, 0x10, 0x37, 0x00, 0x07, 0x10, 0x39,
-- 0x10, 0x39, 0x00, 0x09, 0x13, 0x5F, 0x13, 0x5F, 0x00, 0xE6, 0x17, 0x14, 0x17, 0x14, 0x00, 0x09,
-- 0x17, 0x34, 0x17, 0x34, 0x00, 0x09, 0x17, 0xD2, 0x17, 0xD2, 0x00, 0x09, 0x17, 0xDD, 0x17, 0xDD,
-- 0x00, 0xE6, 0x18, 0xA9, 0x18, 0xA9, 0x00, 0xE4, 0x19, 0x39, 0x19, 0x39, 0x00, 0xDE, 0x19, 0x3A,
-- 0x19, 0x3A, 0x00, 0xE6, 0x19, 0x3B, 0x19, 0x3B, 0x00, 0xDC, 0x1A, 0x17, 0x1A, 0x17, 0x00, 0xE6,
-- 0x1A, 0x18, 0x1A, 0x18, 0x00, 0xDC, 0x1D, 0xC0, 0x1D, 0xC1, 0x00, 0xE6, 0x1D, 0xC2, 0x1D, 0xC2,
-- 0x00, 0xDC, 0x1D, 0xC3, 0x1D, 0xC3, 0x00, 0xE6, 0x20, 0xD0, 0x20, 0xD1, 0x00, 0xE6, 0x20, 0xD2,
-- 0x20, 0xD3, 0x00, 0x01, 0x20, 0xD4, 0x20, 0xD7, 0x00, 0xE6, 0x20, 0xD8, 0x20, 0xDA, 0x00, 0x01,
-- 0x20, 0xDB, 0x20, 0xDC, 0x00, 0xE6, 0x20, 0xE1, 0x20, 0xE1, 0x00, 0xE6, 0x20, 0xE5, 0x20, 0xE6,
-- 0x00, 0x01, 0x20, 0xE7, 0x20, 0xE7, 0x00, 0xE6, 0x20, 0xE8, 0x20, 0xE8, 0x00, 0xDC, 0x20, 0xE9,
-- 0x20, 0xE9, 0x00, 0xE6, 0x20, 0xEA, 0x20, 0xEB, 0x00, 0x01, 0x30, 0x2A, 0x30, 0x2A, 0x00, 0xDA,
-- 0x30, 0x2B, 0x30, 0x2B, 0x00, 0xE4, 0x30, 0x2C, 0x30, 0x2C, 0x00, 0xE8, 0x30, 0x2D, 0x30, 0x2D,
-- 0x00, 0xDE, 0x30, 0x2E, 0x30, 0x2F, 0x00, 0xE0, 0x30, 0x99, 0x30, 0x9A, 0x00, 0x08, 0xA8, 0x06,
-- 0xA8, 0x06, 0x00, 0x09, 0xFB, 0x1E, 0xFB, 0x1E, 0x00, 0x1A, 0xFE, 0x20, 0xFE, 0x23, 0x00, 0xE6,
-- 0x0A, 0x0D, 0x0A, 0x0D, 0x00, 0xDC, 0x0A, 0x0F, 0x0A, 0x0F, 0x00, 0xE6, 0x0A, 0x38, 0x0A, 0x38,
-- 0x00, 0xE6, 0x0A, 0x39, 0x0A, 0x39, 0x00, 0x01, 0x0A, 0x3A, 0x0A, 0x3A, 0x00, 0xDC, 0x0A, 0x3F,
-- 0x0A, 0x3F, 0x00, 0x09, 0xD1, 0x65, 0xD1, 0x66, 0x00, 0xD8, 0xD1, 0x67, 0xD1, 0x69, 0x00, 0x01,
-- 0xD1, 0x6D, 0xD1, 0x6D, 0x00, 0xE2, 0xD1, 0x6E, 0xD1, 0x72, 0x00, 0xD8, 0xD1, 0x7B, 0xD1, 0x82,
-- 0x00, 0xDC, 0xD1, 0x85, 0xD1, 0x89, 0x00, 0xE6, 0xD1, 0x8A, 0xD1, 0x8B, 0x00, 0xDC, 0xD1, 0xAA,
-- 0xD1, 0xAD, 0x00, 0xE6, 0xD2, 0x42, 0xD2, 0x44, 0x00, 0xE6
-+ 0x05, 0xB8, 0x00, 0xDC, 0x05, 0xB9, 0x05, 0xB9, 0x00, 0x1B, 0x05, 0xBA, 0x05, 0xBA, 0x00, 0x13,
-+ 0x05, 0xBB, 0x05, 0xBB, 0x00, 0xDC, 0x05, 0xBC, 0x05, 0xBC, 0x00, 0x15, 0x05, 0xBD, 0x05, 0xBD,
-+ 0x00, 0xDC, 0x05, 0xBF, 0x05, 0xBF, 0x00, 0x17, 0x05, 0xC1, 0x05, 0xC1, 0x00, 0x0A, 0x05, 0xC2,
-+ 0x05, 0xC2, 0x00, 0x0B, 0x05, 0xC4, 0x05, 0xC4, 0x00, 0xE6, 0x05, 0xC5, 0x05, 0xC5, 0x00, 0xDC,
-+ 0x05, 0xC7, 0x05, 0xC7, 0x00, 0x12, 0x06, 0x10, 0x06, 0x15, 0x00, 0xE6, 0x06, 0x4B, 0x06, 0x4C,
-+ 0x00, 0x1F, 0x06, 0x4D, 0x06, 0x4D, 0x00, 0x1E, 0x06, 0x4E, 0x06, 0x4F, 0x00, 0x1F, 0x06, 0x50,
-+ 0x06, 0x50, 0x00, 0x1E, 0x06, 0x51, 0x06, 0x51, 0x00, 0x1C, 0x06, 0x52, 0x06, 0x52, 0x00, 0x1F,
-+ 0x06, 0x53, 0x06, 0x53, 0x00, 0x20, 0x06, 0x54, 0x06, 0x55, 0x00, 0x1B, 0x06, 0x56, 0x06, 0x56,
-+ 0x00, 0x1D, 0x06, 0x57, 0x06, 0x58, 0x00, 0x1F, 0x06, 0x59, 0x06, 0x5B, 0x00, 0xE6, 0x06, 0x5C,
-+ 0x06, 0x5C, 0x00, 0xDC, 0x06, 0x5D, 0x06, 0x5E, 0x00, 0xE6, 0x06, 0x70, 0x06, 0x70, 0x00, 0x1D,
-+ 0x06, 0xD6, 0x06, 0xDC, 0x00, 0xE6, 0x06, 0xDF, 0x06, 0xE0, 0x00, 0xE6, 0x06, 0xE1, 0x06, 0xE1,
-+ 0x00, 0x1F, 0x06, 0xE2, 0x06, 0xE2, 0x00, 0xE6, 0x06, 0xE3, 0x06, 0xE3, 0x00, 0xDC, 0x06, 0xE4,
-+ 0x06, 0xE4, 0x00, 0xE6, 0x06, 0xE7, 0x06, 0xE8, 0x00, 0xE6, 0x06, 0xEA, 0x06, 0xEA, 0x00, 0xDC,
-+ 0x06, 0xEB, 0x06, 0xEC, 0x00, 0xE6, 0x06, 0xED, 0x06, 0xED, 0x00, 0xDC, 0x07, 0x11, 0x07, 0x11,
-+ 0x00, 0x24, 0x07, 0x30, 0x07, 0x30, 0x00, 0xE6, 0x07, 0x31, 0x07, 0x31, 0x00, 0xDC, 0x07, 0x32,
-+ 0x07, 0x33, 0x00, 0xE6, 0x07, 0x34, 0x07, 0x34, 0x00, 0xDC, 0x07, 0x35, 0x07, 0x36, 0x00, 0xE6,
-+ 0x07, 0x37, 0x07, 0x39, 0x00, 0xDC, 0x07, 0x3A, 0x07, 0x3A, 0x00, 0xE6, 0x07, 0x3B, 0x07, 0x3C,
-+ 0x00, 0xDC, 0x07, 0x3D, 0x07, 0x3D, 0x00, 0xE6, 0x07, 0x3E, 0x07, 0x3E, 0x00, 0xDC, 0x07, 0x3F,
-+ 0x07, 0x41, 0x00, 0xE6, 0x07, 0x42, 0x07, 0x42, 0x00, 0xDC, 0x07, 0x43, 0x07, 0x43, 0x00, 0xE6,
-+ 0x07, 0x44, 0x07, 0x44, 0x00, 0xDC, 0x07, 0x45, 0x07, 0x45, 0x00, 0xE6, 0x07, 0x46, 0x07, 0x46,
-+ 0x00, 0xDC, 0x07, 0x47, 0x07, 0x47, 0x00, 0xE6, 0x07, 0x48, 0x07, 0x48, 0x00, 0xDC, 0x07, 0x49,
-+ 0x07, 0x4A, 0x00, 0xE6, 0x07, 0xEB, 0x07, 0xF1, 0x00, 0xE6, 0x07, 0xF2, 0x07, 0xF2, 0x00, 0xDC,
-+ 0x07, 0xF3, 0x07, 0xF3, 0x00, 0xE6, 0x09, 0x3C, 0x09, 0x3C, 0x00, 0x07, 0x09, 0x4D, 0x09, 0x4D,
-+ 0x00, 0x09, 0x09, 0x51, 0x09, 0x51, 0x00, 0xE6, 0x09, 0x52, 0x09, 0x52, 0x00, 0xDC, 0x09, 0x53,
-+ 0x09, 0x54, 0x00, 0xE6, 0x09, 0xBC, 0x09, 0xBC, 0x00, 0x07, 0x09, 0xCD, 0x09, 0xCD, 0x00, 0x09,
-+ 0x0A, 0x3C, 0x0A, 0x3C, 0x00, 0x07, 0x0A, 0x4D, 0x0A, 0x4D, 0x00, 0x09, 0x0A, 0xBC, 0x0A, 0xBC,
-+ 0x00, 0x07, 0x0A, 0xCD, 0x0A, 0xCD, 0x00, 0x09, 0x0B, 0x3C, 0x0B, 0x3C, 0x00, 0x07, 0x0B, 0x4D,
-+ 0x0B, 0x4D, 0x00, 0x09, 0x0B, 0xCD, 0x0B, 0xCD, 0x00, 0x09, 0x0C, 0x4D, 0x0C, 0x4D, 0x00, 0x09,
-+ 0x0C, 0x55, 0x0C, 0x55, 0x00, 0x54, 0x0C, 0x56, 0x0C, 0x56, 0x00, 0x5B, 0x0C, 0xBC, 0x0C, 0xBC,
-+ 0x00, 0x07, 0x0C, 0xCD, 0x0C, 0xCD, 0x00, 0x09, 0x0D, 0x4D, 0x0D, 0x4D, 0x00, 0x09, 0x0D, 0xCA,
-+ 0x0D, 0xCA, 0x00, 0x09, 0x0E, 0x38, 0x0E, 0x39, 0x00, 0x67, 0x0E, 0x3A, 0x0E, 0x3A, 0x00, 0x09,
-+ 0x0E, 0x48, 0x0E, 0x4B, 0x00, 0x6B, 0x0E, 0xB8, 0x0E, 0xB9, 0x00, 0x76, 0x0E, 0xC8, 0x0E, 0xCB,
-+ 0x00, 0x7A, 0x0F, 0x18, 0x0F, 0x19, 0x00, 0xDC, 0x0F, 0x35, 0x0F, 0x35, 0x00, 0xDC, 0x0F, 0x37,
-+ 0x0F, 0x37, 0x00, 0xDC, 0x0F, 0x39, 0x0F, 0x39, 0x00, 0xD8, 0x0F, 0x71, 0x0F, 0x71, 0x00, 0x81,
-+ 0x0F, 0x72, 0x0F, 0x72, 0x00, 0x82, 0x0F, 0x74, 0x0F, 0x74, 0x00, 0x84, 0x0F, 0x7A, 0x0F, 0x7D,
-+ 0x00, 0x82, 0x0F, 0x80, 0x0F, 0x80, 0x00, 0x82, 0x0F, 0x82, 0x0F, 0x83, 0x00, 0xE6, 0x0F, 0x84,
-+ 0x0F, 0x84, 0x00, 0x09, 0x0F, 0x86, 0x0F, 0x87, 0x00, 0xE6, 0x0F, 0xC6, 0x0F, 0xC6, 0x00, 0xDC,
-+ 0x10, 0x37, 0x10, 0x37, 0x00, 0x07, 0x10, 0x39, 0x10, 0x39, 0x00, 0x09, 0x13, 0x5F, 0x13, 0x5F,
-+ 0x00, 0xE6, 0x17, 0x14, 0x17, 0x14, 0x00, 0x09, 0x17, 0x34, 0x17, 0x34, 0x00, 0x09, 0x17, 0xD2,
-+ 0x17, 0xD2, 0x00, 0x09, 0x17, 0xDD, 0x17, 0xDD, 0x00, 0xE6, 0x18, 0xA9, 0x18, 0xA9, 0x00, 0xE4,
-+ 0x19, 0x39, 0x19, 0x39, 0x00, 0xDE, 0x19, 0x3A, 0x19, 0x3A, 0x00, 0xE6, 0x19, 0x3B, 0x19, 0x3B,
-+ 0x00, 0xDC, 0x1A, 0x17, 0x1A, 0x17, 0x00, 0xE6, 0x1A, 0x18, 0x1A, 0x18, 0x00, 0xDC, 0x1B, 0x34,
-+ 0x1B, 0x34, 0x00, 0x07, 0x1B, 0x44, 0x1B, 0x44, 0x00, 0x09, 0x1B, 0x6B, 0x1B, 0x6B, 0x00, 0xE6,
-+ 0x1B, 0x6C, 0x1B, 0x6C, 0x00, 0xDC, 0x1B, 0x6D, 0x1B, 0x73, 0x00, 0xE6, 0x1D, 0xC0, 0x1D, 0xC1,
-+ 0x00, 0xE6, 0x1D, 0xC2, 0x1D, 0xC2, 0x00, 0xDC, 0x1D, 0xC3, 0x1D, 0xC9, 0x00, 0xE6, 0x1D, 0xCA,
-+ 0x1D, 0xCA, 0x00, 0xDC, 0x1D, 0xFE, 0x1D, 0xFE, 0x00, 0xE6, 0x1D, 0xFF, 0x1D, 0xFF, 0x00, 0xDC,
-+ 0x20, 0xD0, 0x20, 0xD1, 0x00, 0xE6, 0x20, 0xD2, 0x20, 0xD3, 0x00, 0x01, 0x20, 0xD4, 0x20, 0xD7,
-+ 0x00, 0xE6, 0x20, 0xD8, 0x20, 0xDA, 0x00, 0x01, 0x20, 0xDB, 0x20, 0xDC, 0x00, 0xE6, 0x20, 0xE1,
-+ 0x20, 0xE1, 0x00, 0xE6, 0x20, 0xE5, 0x20, 0xE6, 0x00, 0x01, 0x20, 0xE7, 0x20, 0xE7, 0x00, 0xE6,
-+ 0x20, 0xE8, 0x20, 0xE8, 0x00, 0xDC, 0x20, 0xE9, 0x20, 0xE9, 0x00, 0xE6, 0x20, 0xEA, 0x20, 0xEB,
-+ 0x00, 0x01, 0x20, 0xEC, 0x20, 0xEF, 0x00, 0xDC, 0x30, 0x2A, 0x30, 0x2A, 0x00, 0xDA, 0x30, 0x2B,
-+ 0x30, 0x2B, 0x00, 0xE4, 0x30, 0x2C, 0x30, 0x2C, 0x00, 0xE8, 0x30, 0x2D, 0x30, 0x2D, 0x00, 0xDE,
-+ 0x30, 0x2E, 0x30, 0x2F, 0x00, 0xE0, 0x30, 0x99, 0x30, 0x9A, 0x00, 0x08, 0xA8, 0x06, 0xA8, 0x06,
-+ 0x00, 0x09, 0xFB, 0x1E, 0xFB, 0x1E, 0x00, 0x1A, 0xFE, 0x20, 0xFE, 0x23, 0x00, 0xE6, 0x0A, 0x0D,
-+ 0x0A, 0x0D, 0x00, 0xDC, 0x0A, 0x0F, 0x0A, 0x0F, 0x00, 0xE6, 0x0A, 0x38, 0x0A, 0x38, 0x00, 0xE6,
-+ 0x0A, 0x39, 0x0A, 0x39, 0x00, 0x01, 0x0A, 0x3A, 0x0A, 0x3A, 0x00, 0xDC, 0x0A, 0x3F, 0x0A, 0x3F,
-+ 0x00, 0x09, 0xD1, 0x65, 0xD1, 0x66, 0x00, 0xD8, 0xD1, 0x67, 0xD1, 0x69, 0x00, 0x01, 0xD1, 0x6D,
-+ 0xD1, 0x6D, 0x00, 0xE2, 0xD1, 0x6E, 0xD1, 0x72, 0x00, 0xD8, 0xD1, 0x7B, 0xD1, 0x82, 0x00, 0xDC,
-+ 0xD1, 0x85, 0xD1, 0x89, 0x00, 0xE6, 0xD1, 0x8A, 0xD1, 0x8B, 0x00, 0xDC, 0xD1, 0xAA, 0xD1, 0xAD,
-+ 0x00, 0xE6, 0xD2, 0x42, 0xD2, 0x44, 0x00, 0xE6
- };
-
- U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/CanonShaping.h b/src/share/native/sun/font/layout/CanonShaping.h
---- jdk/src/share/native/sun/font/layout/CanonShaping.h
-+++ jdk/src/share/native/sun/font/layout/CanonShaping.h
-@@ -38,7 +38,7 @@
-
- class LEGlyphStorage;
-
--class CanonShaping /* not : public UObject because all members are static */
-+class U_LAYOUT_API CanonShaping /* not : public UObject because all members are static */
- {
- public:
- static const le_uint8 glyphSubstitutionTable[];
-diff --git a/src/share/native/sun/font/layout/ClassDefinitionTables.cpp b/src/share/native/sun/font/layout/ClassDefinitionTables.cpp
---- jdk/src/share/native/sun/font/layout/ClassDefinitionTables.cpp
-+++ jdk/src/share/native/sun/font/layout/ClassDefinitionTables.cpp
-@@ -93,7 +93,7 @@
- TTGlyphID firstGlyph = SWAPW(startGlyph);
- TTGlyphID lastGlyph = firstGlyph + SWAPW(glyphCount);
-
-- if (ttGlyphID > firstGlyph && ttGlyphID < lastGlyph) {
-+ if (ttGlyphID >= firstGlyph && ttGlyphID < lastGlyph) {
- return SWAPW(classValueArray[ttGlyphID - firstGlyph]);
- }
-
-diff --git a/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp b/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp
---- jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp
-+++ jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp
-@@ -52,18 +52,23 @@
- le_uint16 substCount,
- GlyphIterator *glyphIterator,
- const LEFontInstance *fontInstance,
-- le_int32 position)
-+ le_int32 position,
-+ LEErrorCode& success)
- {
-+ if (LE_FAILURE(success)) {
-+ return;
-+ }
-+
- GlyphIterator tempIterator(*glyphIterator);
-
-- for (le_int16 subst = 0; subst < substCount; subst += 1) {
-+ for (le_int16 subst = 0; subst < substCount && LE_SUCCESS(success); subst += 1) {
- le_uint16 sequenceIndex = SWAPW(substLookupRecordArray[subst].sequenceIndex);
- le_uint16 lookupListIndex = SWAPW(substLookupRecordArray[subst].lookupListIndex);
-
- tempIterator.setCurrStreamPosition(position);
- tempIterator.next(sequenceIndex);
-
-- lookupProcessor->applySingleLookup(lookupListIndex, &tempIterator, fontInstance);
-+ lookupProcessor->applySingleLookup(lookupListIndex, &tempIterator, fontInstance, success);
- }
- }
-
-@@ -165,9 +170,15 @@
- return TRUE;
- }
-
--le_uint32 ContextualSubstitutionSubtable::process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
-- const LEFontInstance *fontInstance) const
-+le_uint32 ContextualSubstitutionSubtable::process(const LookupProcessor *lookupProcessor,
-+ GlyphIterator *glyphIterator,
-+ const LEFontInstance *fontInstance,
-+ LEErrorCode& success) const
- {
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-+
- switch(SWAPW(subtableFormat))
- {
- case 0:
-@@ -176,22 +187,19 @@
- case 1:
- {
- const ContextualSubstitutionFormat1Subtable *subtable = (const ContextualSubstitutionFormat1Subtable *) this;
--
-- return subtable->process(lookupProcessor, glyphIterator, fontInstance);
-+ return subtable->process(lookupProcessor, glyphIterator, fontInstance, success);
- }
-
- case 2:
- {
- const ContextualSubstitutionFormat2Subtable *subtable = (const ContextualSubstitutionFormat2Subtable *) this;
--
-- return subtable->process(lookupProcessor, glyphIterator, fontInstance);
-+ return subtable->process(lookupProcessor, glyphIterator, fontInstance, success);
- }
-
- case 3:
- {
- const ContextualSubstitutionFormat3Subtable *subtable = (const ContextualSubstitutionFormat3Subtable *) this;
--
-- return subtable->process(lookupProcessor, glyphIterator, fontInstance);
-+ return subtable->process(lookupProcessor, glyphIterator, fontInstance, success);
- }
-
- default:
-@@ -199,9 +207,15 @@
- }
- }
-
--le_uint32 ContextualSubstitutionFormat1Subtable::process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
-- const LEFontInstance *fontInstance) const
-+le_uint32 ContextualSubstitutionFormat1Subtable::process(const LookupProcessor *lookupProcessor,
-+ GlyphIterator *glyphIterator,
-+ const LEFontInstance *fontInstance,
-+ LEErrorCode& success) const
- {
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-+
- LEGlyphID glyph = glyphIterator->getCurrGlyphID();
- le_int32 coverageIndex = getGlyphCoverage(glyph);
-
-@@ -227,7 +241,7 @@
- const SubstitutionLookupRecord *substLookupRecordArray =
- (const SubstitutionLookupRecord *) &subRuleTable->inputGlyphArray[matchCount];
-
-- applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position);
-+ applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position, success);
-
- return matchCount + 1;
- }
-@@ -242,9 +256,15 @@
- return 0;
- }
-
--le_uint32 ContextualSubstitutionFormat2Subtable::process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
-- const LEFontInstance *fontInstance) const
-+le_uint32 ContextualSubstitutionFormat2Subtable::process(const LookupProcessor *lookupProcessor,
-+ GlyphIterator *glyphIterator,
-+ const LEFontInstance *fontInstance,
-+ LEErrorCode& success) const
- {
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-+
- LEGlyphID glyph = glyphIterator->getCurrGlyphID();
- le_int32 coverageIndex = getGlyphCoverage(glyph);
-
-@@ -273,7 +293,7 @@
- const SubstitutionLookupRecord *substLookupRecordArray =
- (const SubstitutionLookupRecord *) &subClassRuleTable->classArray[matchCount];
-
-- applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position);
-+ applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position, success);
-
- return matchCount + 1;
- }
-@@ -288,9 +308,15 @@
- return 0;
- }
-
--le_uint32 ContextualSubstitutionFormat3Subtable::process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
-- const LEFontInstance *fontInstance)const
-+le_uint32 ContextualSubstitutionFormat3Subtable::process(const LookupProcessor *lookupProcessor,
-+ GlyphIterator *glyphIterator,
-+ const LEFontInstance *fontInstance,
-+ LEErrorCode& success)const
- {
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-+
- le_uint16 gCount = SWAPW(glyphCount);
- le_uint16 subCount = SWAPW(substCount);
- le_int32 position = glyphIterator->getCurrStreamPosition();
-@@ -305,7 +331,7 @@
- const SubstitutionLookupRecord *substLookupRecordArray =
- (const SubstitutionLookupRecord *) &coverageTableOffsetArray[gCount];
-
-- ContextualSubstitutionBase::applySubstitutionLookups(lookupProcessor, substLookupRecordArray, subCount, glyphIterator, fontInstance, position);
-+ ContextualSubstitutionBase::applySubstitutionLookups(lookupProcessor, substLookupRecordArray, subCount, glyphIterator, fontInstance, position, success);
-
- return gCount + 1;
- }
-@@ -315,9 +341,15 @@
- return 0;
- }
-
--le_uint32 ChainingContextualSubstitutionSubtable::process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
-- const LEFontInstance *fontInstance) const
-+le_uint32 ChainingContextualSubstitutionSubtable::process(const LookupProcessor *lookupProcessor,
-+ GlyphIterator *glyphIterator,
-+ const LEFontInstance *fontInstance,
-+ LEErrorCode& success) const
- {
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-+
- switch(SWAPW(subtableFormat))
- {
- case 0:
-@@ -326,22 +358,19 @@
- case 1:
- {
- const ChainingContextualSubstitutionFormat1Subtable *subtable = (const ChainingContextualSubstitutionFormat1Subtable *) this;
--
-- return subtable->process(lookupProcessor, glyphIterator, fontInstance);
-+ return subtable->process(lookupProcessor, glyphIterator, fontInstance, success);
- }
-
- case 2:
- {
- const ChainingContextualSubstitutionFormat2Subtable *subtable = (const ChainingContextualSubstitutionFormat2Subtable *) this;
--
-- return subtable->process(lookupProcessor, glyphIterator, fontInstance);
-+ return subtable->process(lookupProcessor, glyphIterator, fontInstance, success);
- }
-
- case 3:
- {
- const ChainingContextualSubstitutionFormat3Subtable *subtable = (const ChainingContextualSubstitutionFormat3Subtable *) this;
--
-- return subtable->process(lookupProcessor, glyphIterator, fontInstance);
-+ return subtable->process(lookupProcessor, glyphIterator, fontInstance, success);
- }
-
- default:
-@@ -355,9 +384,15 @@
- // emptyFeatureList matches an le_uint32 or an le_uint16...
- static const FeatureMask emptyFeatureList = 0x00000000UL;
-
--le_uint32 ChainingContextualSubstitutionFormat1Subtable::process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
-- const LEFontInstance *fontInstance) const
-+le_uint32 ChainingContextualSubstitutionFormat1Subtable::process(const LookupProcessor *lookupProcessor,
-+ GlyphIterator *glyphIterator,
-+ const LEFontInstance *fontInstance,
-+ LEErrorCode& success) const
- {
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-+
- LEGlyphID glyph = glyphIterator->getCurrGlyphID();
- le_int32 coverageIndex = getGlyphCoverage(glyph);
-
-@@ -405,7 +440,7 @@
- const SubstitutionLookupRecord *substLookupRecordArray =
- (const SubstitutionLookupRecord *) &lookaheadGlyphArray[lookaheadGlyphCount + 1];
-
-- applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position);
-+ applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position, success);
-
- return inputGlyphCount + 1;
- }
-@@ -420,9 +455,15 @@
- return 0;
- }
-
--le_uint32 ChainingContextualSubstitutionFormat2Subtable::process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
-- const LEFontInstance *fontInstance) const
-+le_uint32 ChainingContextualSubstitutionFormat2Subtable::process(const LookupProcessor *lookupProcessor,
-+ GlyphIterator *glyphIterator,
-+ const LEFontInstance *fontInstance,
-+ LEErrorCode& success) const
- {
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-+
- LEGlyphID glyph = glyphIterator->getCurrGlyphID();
- le_int32 coverageIndex = getGlyphCoverage(glyph);
-
-@@ -479,7 +520,7 @@
- const SubstitutionLookupRecord *substLookupRecordArray =
- (const SubstitutionLookupRecord *) &lookaheadClassArray[lookaheadGlyphCount + 1];
-
-- applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position);
-+ applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position, success);
-
- return inputGlyphCount + 1;
- }
-@@ -494,9 +535,15 @@
- return 0;
- }
-
--le_uint32 ChainingContextualSubstitutionFormat3Subtable::process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
-- const LEFontInstance *fontInstance) const
-+le_uint32 ChainingContextualSubstitutionFormat3Subtable::process(const LookupProcessor *lookupProcessor,
-+ GlyphIterator *glyphIterator,
-+ const LEFontInstance *fontInstance,
-+ LEErrorCode & success) const
- {
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-+
- le_uint16 backtrkGlyphCount = SWAPW(backtrackGlyphCount);
- le_uint16 inputGlyphCount = (le_uint16) SWAPW(backtrackCoverageTableOffsetArray[backtrkGlyphCount]);
- const Offset *inputCoverageTableOffsetArray = &backtrackCoverageTableOffsetArray[backtrkGlyphCount + 1];
-@@ -534,7 +581,7 @@
- const SubstitutionLookupRecord *substLookupRecordArray =
- (const SubstitutionLookupRecord *) &lookaheadCoverageTableOffsetArray[lookaheadGlyphCount + 1];
-
-- ContextualSubstitutionBase::applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position);
-+ ContextualSubstitutionBase::applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position, success);
-
- return inputGlyphCount;
- }
-diff --git a/src/share/native/sun/font/layout/ContextualSubstSubtables.h b/src/share/native/sun/font/layout/ContextualSubstSubtables.h
---- jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.h
-+++ jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.h
-@@ -72,12 +72,13 @@
- le_uint16 substCount,
- GlyphIterator *glyphIterator,
- const LEFontInstance *fontInstance,
-- le_int32 position);
-+ le_int32 position,
-+ LEErrorCode& success);
- };
-
- struct ContextualSubstitutionSubtable : ContextualSubstitutionBase
- {
-- le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
-+ le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
- };
-
- struct ContextualSubstitutionFormat1Subtable : ContextualSubstitutionSubtable
-@@ -85,7 +86,7 @@
- le_uint16 subRuleSetCount;
- Offset subRuleSetTableOffsetArray[ANY_NUMBER];
-
-- le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
-+ le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
- };
-
- struct SubRuleSetTable
-@@ -110,7 +111,7 @@
- le_uint16 subClassSetCount;
- Offset subClassSetTableOffsetArray[ANY_NUMBER];
-
-- le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
-+ le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
- };
-
- struct SubClassSetTable
-@@ -140,12 +141,12 @@
- Offset coverageTableOffsetArray[ANY_NUMBER];
- //SubstitutionLookupRecord substLookupRecord[ANY_NUMBER];
-
-- le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
-+ le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
- };
-
- struct ChainingContextualSubstitutionSubtable : ContextualSubstitutionBase
- {
-- le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
-+ le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
- };
-
- struct ChainingContextualSubstitutionFormat1Subtable : ChainingContextualSubstitutionSubtable
-@@ -153,7 +154,7 @@
- le_uint16 chainSubRuleSetCount;
- Offset chainSubRuleSetTableOffsetArray[ANY_NUMBER];
-
-- le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
-+ le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
- };
-
- struct ChainSubRuleSetTable
-@@ -184,7 +185,7 @@
- le_uint16 chainSubClassSetCount;
- Offset chainSubClassSetTableOffsetArray[ANY_NUMBER];
-
-- le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
-+ le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
- };
-
- struct ChainSubClassSetTable
-@@ -222,7 +223,7 @@
- //le_uint16 substCount;
- //SubstitutionLookupRecord substLookupRecord[ANY_NUMBER];
-
-- le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
-+ le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
- };
-
- U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/CoverageTables.cpp b/src/share/native/sun/font/layout/CoverageTables.cpp
---- jdk/src/share/native/sun/font/layout/CoverageTables.cpp
-+++ jdk/src/share/native/sun/font/layout/CoverageTables.cpp
-@@ -73,6 +73,10 @@
- le_uint16 probe = power;
- le_uint16 index = 0;
-
-+ if (count == 0) {
-+ return -1;
-+ }
-+
- if (SWAPW(glyphArray[extra]) <= ttGlyphID) {
- index = extra;
- }
-diff --git a/src/share/native/sun/font/layout/CursiveAttachmentSubtables.cpp b/src/share/native/sun/font/layout/CursiveAttachmentSubtables.cpp
---- jdk/src/share/native/sun/font/layout/CursiveAttachmentSubtables.cpp
-+++ jdk/src/share/native/sun/font/layout/CursiveAttachmentSubtables.cpp
-@@ -59,6 +59,8 @@
-
- entryAnchorTable->getAnchor(glyphID, fontInstance, entryAnchor);
- glyphIterator->setCursiveEntryPoint(entryAnchor);
-+ } else {
-+ //glyphIterator->clearCursiveEntryPoint();
- }
-
- if (exitOffset != 0) {
-@@ -66,6 +68,8 @@
-
- exitAnchorTable->getAnchor(glyphID, fontInstance, exitAnchor);
- glyphIterator->setCursiveExitPoint(exitAnchor);
-+ } else {
-+ //glyphIterator->clearCursiveExitPoint();
- }
-
- return 1;
-diff --git a/src/share/native/sun/font/layout/DeviceTables.cpp b/src/share/native/sun/font/layout/DeviceTables.cpp
---- jdk/src/share/native/sun/font/layout/DeviceTables.cpp
-+++ jdk/src/share/native/sun/font/layout/DeviceTables.cpp
-@@ -41,13 +41,15 @@
- const le_uint16 DeviceTable::fieldSignBits[] = {0x0002, 0x0008, 0x0080};
- const le_uint16 DeviceTable::fieldBits[] = { 2, 4, 8};
-
-+#define FORMAT_COUNT LE_ARRAY_SIZE(fieldBits)
-+
- le_int16 DeviceTable::getAdjustment(le_uint16 ppem) const
- {
- le_uint16 start = SWAPW(startSize);
- le_uint16 format = SWAPW(deltaFormat) - 1;
- le_int16 result = 0;
-
-- if (ppem >= start && ppem <= SWAPW(endSize)) {
-+ if (ppem >= start && ppem <= SWAPW(endSize) && format < FORMAT_COUNT) {
- le_uint16 sizeIndex = ppem - start;
- le_uint16 bits = fieldBits[format];
- le_uint16 count = 16 / bits;
-diff --git a/src/share/native/sun/font/layout/ExtensionSubtables.cpp b/src/share/native/sun/font/layout/ExtensionSubtables.cpp
---- jdk/src/share/native/sun/font/layout/ExtensionSubtables.cpp
-+++ jdk/src/share/native/sun/font/layout/ExtensionSubtables.cpp
-@@ -40,18 +40,24 @@
-
- U_NAMESPACE_BEGIN
-
-+// read a 32-bit value that might only be 16-bit-aligned in memory
-+#define READ_LONG(code) (le_uint32)((SWAPW(*(le_uint16*)&code) << 16) + SWAPW(*(((le_uint16*)&code) + 1)))
-
- // FIXME: should look at the format too... maybe have a sub-class for it?
- le_uint32 ExtensionSubtable::process(const LookupProcessor *lookupProcessor, le_uint16 lookupType,
-- GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const
-+ GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const
- {
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-+
- le_uint16 elt = SWAPW(extensionLookupType);
-
- if (elt != lookupType) {
-- le_uint32 extOffset = SWAPL(extensionOffset);
-+ le_uint32 extOffset = READ_LONG(extensionOffset);
- LookupSubtable *subtable = (LookupSubtable *) ((char *) this + extOffset);
-
-- return lookupProcessor->applySubtable(subtable, elt, glyphIterator, fontInstance);
-+ return lookupProcessor->applySubtable(subtable, elt, glyphIterator, fontInstance, success);
- }
-
- return 0;
-diff --git a/src/share/native/sun/font/layout/ExtensionSubtables.h b/src/share/native/sun/font/layout/ExtensionSubtables.h
---- jdk/src/share/native/sun/font/layout/ExtensionSubtables.h
-+++ jdk/src/share/native/sun/font/layout/ExtensionSubtables.h
-@@ -53,7 +53,7 @@
- le_uint32 extensionOffset;
-
- le_uint32 process(const LookupProcessor *lookupProcessor, le_uint16 lookupType,
-- GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
-+ GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
- };
-
- U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/Features.cpp b/src/share/native/sun/font/layout/Features.cpp
---- jdk/src/share/native/sun/font/layout/Features.cpp
-+++ jdk/src/share/native/sun/font/layout/Features.cpp
-@@ -33,7 +33,7 @@
- #include "LETypes.h"
- #include "OpenTypeUtilities.h"
- #include "OpenTypeTables.h"
--#include "Features.h"
-+#include "ICUFeatures.h"
- #include "LESwaps.h"
-
- U_NAMESPACE_BEGIN
-diff --git a/src/share/native/sun/font/layout/GXLayoutEngine.cpp b/src/share/native/sun/font/layout/GXLayoutEngine.cpp
---- jdk/src/share/native/sun/font/layout/GXLayoutEngine.cpp
-+++ jdk/src/share/native/sun/font/layout/GXLayoutEngine.cpp
-@@ -41,8 +41,8 @@
-
- UOBJECT_DEFINE_RTTI_IMPLEMENTATION(GXLayoutEngine)
-
--GXLayoutEngine::GXLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, const MorphTableHeader *morphTable)
-- : LayoutEngine(fontInstance, scriptCode, languageCode, 0), fMorphTable(morphTable)
-+GXLayoutEngine::GXLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, const MorphTableHeader *morphTable, LEErrorCode &success)
-+ : LayoutEngine(fontInstance, scriptCode, languageCode, 0, success), fMorphTable(morphTable)
- {
- // nothing else to do?
- }
-diff --git a/src/share/native/sun/font/layout/GXLayoutEngine.h b/src/share/native/sun/font/layout/GXLayoutEngine.h
---- jdk/src/share/native/sun/font/layout/GXLayoutEngine.h
-+++ jdk/src/share/native/sun/font/layout/GXLayoutEngine.h
-@@ -67,13 +67,14 @@
- * @param scriptCode - the script
- * @param langaugeCode - the language
- * @param morphTable - the 'mort' table
-+ * @param success - set to an error code if the operation fails
- *
- * @see LayoutEngine::layoutEngineFactory
- * @see ScriptAndLangaugeTags.h for script and language codes
- *
- * @internal
- */
-- GXLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, const MorphTableHeader *morphTable);
-+ GXLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, const MorphTableHeader *morphTable, LEErrorCode &success);
-
- /**
- * The destructor, virtual for correct polymorphic invocation.
-diff --git a/src/share/native/sun/font/layout/GlyphIterator.cpp b/src/share/native/sun/font/layout/GlyphIterator.cpp
---- jdk/src/share/native/sun/font/layout/GlyphIterator.cpp
-+++ jdk/src/share/native/sun/font/layout/GlyphIterator.cpp
-@@ -44,7 +44,7 @@
- FeatureMask theFeatureMask, const GlyphDefinitionTableHeader *theGlyphDefinitionTableHeader)
- : direction(1), position(-1), nextLimit(-1), prevLimit(-1),
- glyphStorage(theGlyphStorage), glyphPositionAdjustments(theGlyphPositionAdjustments),
-- srcIndex(-1), destIndex(-1), lookupFlags(theLookupFlags), featureMask(theFeatureMask),
-+ srcIndex(-1), destIndex(-1), lookupFlags(theLookupFlags), featureMask(theFeatureMask), glyphGroup(0),
- glyphClassDefinitionTable(NULL), markAttachClassDefinitionTable(NULL)
-
- {
-@@ -78,6 +78,7 @@
- destIndex = that.destIndex;
- lookupFlags = that.lookupFlags;
- featureMask = that.featureMask;
-+ glyphGroup = that.glyphGroup;
- glyphClassDefinitionTable = that.glyphClassDefinitionTable;
- markAttachClassDefinitionTable = that.markAttachClassDefinitionTable;
- }
-@@ -95,6 +96,7 @@
- destIndex = that.destIndex;
- lookupFlags = that.lookupFlags;
- featureMask = newFeatureMask;
-+ glyphGroup = 0;
- glyphClassDefinitionTable = that.glyphClassDefinitionTable;
- markAttachClassDefinitionTable = that.markAttachClassDefinitionTable;
- }
-@@ -112,6 +114,7 @@
- destIndex = that.destIndex;
- lookupFlags = newLookupFlags;
- featureMask = that.featureMask;
-+ glyphGroup = that.glyphGroup;
- glyphClassDefinitionTable = that.glyphClassDefinitionTable;
- markAttachClassDefinitionTable = that.markAttachClassDefinitionTable;
- }
-@@ -125,12 +128,13 @@
- {
- position = prevLimit;
- featureMask = newFeatureMask;
-+ glyphGroup = 0;
- lookupFlags = newLookupFlags;
- }
-
--LEGlyphID *GlyphIterator::insertGlyphs(le_int32 count)
-+LEGlyphID *GlyphIterator::insertGlyphs(le_int32 count, LEErrorCode& success)
- {
-- return glyphStorage.insertGlyphs(position, count);
-+ return glyphStorage.insertGlyphs(position, count, success);
- }
-
- le_int32 GlyphIterator::applyInsertions()
-@@ -299,6 +303,36 @@
- glyphPositionAdjustments->setYAdvance(position, yAdvanceAdjust);
- }
-
-+void GlyphIterator::clearCursiveEntryPoint()
-+{
-+ if (direction < 0) {
-+ if (position <= nextLimit || position >= prevLimit) {
-+ return;
-+ }
-+ } else {
-+ if (position <= prevLimit || position >= nextLimit) {
-+ return;
-+ }
-+ }
-+
-+ glyphPositionAdjustments->clearEntryPoint(position);
-+}
-+
-+void GlyphIterator::clearCursiveExitPoint()
-+{
-+ if (direction < 0) {
-+ if (position <= nextLimit || position >= prevLimit) {
-+ return;
-+ }
-+ } else {
-+ if (position <= prevLimit || position >= nextLimit) {
-+ return;
-+ }
-+ }
-+
-+ glyphPositionAdjustments->clearExitPoint(position);
-+}
-+
- void GlyphIterator::setCursiveEntryPoint(LEPoint &entryPoint)
- {
- if (direction < 0) {
-@@ -391,7 +425,7 @@
- }
- }
-
--le_bool GlyphIterator::hasFeatureTag() const
-+le_bool GlyphIterator::hasFeatureTag(le_bool matchGroup) const
- {
- if (featureMask == 0) {
- return TRUE;
-@@ -400,14 +434,18 @@
- LEErrorCode success = LE_NO_ERROR;
- FeatureMask fm = glyphStorage.getAuxData(position, success);
-
-- return (fm & featureMask) != 0;
-+ return ((fm & featureMask) == featureMask) && (!matchGroup || (le_int32)(fm & LE_GLYPH_GROUP_MASK) == glyphGroup);
- }
-
- le_bool GlyphIterator::findFeatureTag()
- {
-+ //glyphGroup = 0;
-+
- while (nextInternal()) {
-- if (hasFeatureTag()) {
-- prevInternal();
-+ if (hasFeatureTag(FALSE)) {
-+ LEErrorCode success = LE_NO_ERROR;
-+
-+ glyphGroup = (glyphStorage.getAuxData(position, success) & LE_GLYPH_GROUP_MASK);
- return TRUE;
- }
- }
-@@ -435,7 +473,7 @@
-
- le_bool GlyphIterator::next(le_uint32 delta)
- {
-- return nextInternal(delta) && hasFeatureTag();
-+ return nextInternal(delta) && hasFeatureTag(TRUE);
- }
-
- le_bool GlyphIterator::prevInternal(le_uint32 delta)
-@@ -457,7 +495,7 @@
-
- le_bool GlyphIterator::prev(le_uint32 delta)
- {
-- return prevInternal(delta) && hasFeatureTag();
-+ return prevInternal(delta) && hasFeatureTag(TRUE);
- }
-
- le_int32 GlyphIterator::getMarkComponent(le_int32 markPosition) const
-diff --git a/src/share/native/sun/font/layout/GlyphIterator.h b/src/share/native/sun/font/layout/GlyphIterator.h
---- jdk/src/share/native/sun/font/layout/GlyphIterator.h
-+++ jdk/src/share/native/sun/font/layout/GlyphIterator.h
-@@ -88,16 +88,18 @@
- void setCurrGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust,
- float xAdvanceAdjust, float yAdvanceAdjust);
-
-+ void clearCursiveEntryPoint();
-+ void clearCursiveExitPoint();
- void setCursiveEntryPoint(LEPoint &entryPoint);
- void setCursiveExitPoint(LEPoint &exitPoint);
- void setCursiveGlyph();
-
-- LEGlyphID *insertGlyphs(le_int32 count);
-+ LEGlyphID *insertGlyphs(le_int32 count, LEErrorCode& success);
- le_int32 applyInsertions();
-
- private:
- le_bool filterGlyph(le_uint32 index) const;
-- le_bool hasFeatureTag() const;
-+ le_bool hasFeatureTag(le_bool matchGroup) const;
- le_bool nextInternal(le_uint32 delta = 1);
- le_bool prevInternal(le_uint32 delta = 1);
-
-@@ -113,6 +115,7 @@
- le_int32 destIndex;
- le_uint16 lookupFlags;
- FeatureMask featureMask;
-+ le_int32 glyphGroup;
-
- const GlyphClassDefinitionTable *glyphClassDefinitionTable;
- const MarkAttachClassDefinitionTable *markAttachClassDefinitionTable;
-diff --git a/src/share/native/sun/font/layout/GlyphPositionAdjustments.cpp b/src/share/native/sun/font/layout/GlyphPositionAdjustments.cpp
---- jdk/src/share/native/sun/font/layout/GlyphPositionAdjustments.cpp
-+++ jdk/src/share/native/sun/font/layout/GlyphPositionAdjustments.cpp
-@@ -71,6 +71,20 @@
- return fEntryExitPoints[index].getExitPoint(exitPoint);
- }
-
-+void GlyphPositionAdjustments::clearEntryPoint(le_int32 index)
-+{
-+ CHECK_ALLOCATE_ARRAY(fEntryExitPoints, EntryExitPoint, fGlyphCount);
-+
-+ fEntryExitPoints[index].clearEntryPoint();
-+}
-+
-+void GlyphPositionAdjustments::clearExitPoint(le_int32 index)
-+{
-+ CHECK_ALLOCATE_ARRAY(fEntryExitPoints, EntryExitPoint, fGlyphCount);
-+
-+ fEntryExitPoints[index].clearExitPoint();
-+}
-+
- void GlyphPositionAdjustments::setEntryPoint(le_int32 index, LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd)
- {
- CHECK_ALLOCATE_ARRAY(fEntryExitPoints, EntryExitPoint, fGlyphCount);
-@@ -152,7 +166,12 @@
- lastExitGlyphID = glyphID;
- } else {
- if (baselineIsLogicalEnd(i) && firstExitPoint >= 0 && lastExitPoint >= 0) {
-- le_int32 limit = lastExitPoint + dir;
-+ le_int32 limit = lastExitPoint /*+ dir*/;
-+ LEPoint dummyAnchor;
-+
-+ if (getEntryPoint(i, dummyAnchor) != NULL) {
-+ limit += dir;
-+ }
-
- for (le_int32 j = firstExitPoint; j != limit; j += dir) {
- if (isCursiveGlyph(j)) {
-diff --git a/src/share/native/sun/font/layout/GlyphPositionAdjustments.h b/src/share/native/sun/font/layout/GlyphPositionAdjustments.h
---- jdk/src/share/native/sun/font/layout/GlyphPositionAdjustments.h
-+++ jdk/src/share/native/sun/font/layout/GlyphPositionAdjustments.h
-@@ -97,6 +97,8 @@
- LEPoint *getEntryPoint(LEPoint &entryPoint) const;
- LEPoint *getExitPoint(LEPoint &exitPoint) const;
-
-+ inline void clearEntryPoint();
-+ inline void clearExitPoint();
- inline void setEntryPoint(LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd);
- inline void setExitPoint(LEPoint &newExitPoint, le_bool baselineIsLogicalEnd);
- inline void setCursiveGlyph(le_bool baselineIsLogicalEnd);
-@@ -151,6 +153,8 @@
- inline void adjustXAdvance(le_int32 index, float xAdjustment);
- inline void adjustYAdvance(le_int32 index, float yAdjustment);
-
-+ void clearEntryPoint(le_int32 index);
-+ void clearExitPoint(le_int32 index);
- void setEntryPoint(le_int32 index, LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd);
- void setExitPoint(le_int32 index, LEPoint &newExitPoint, le_bool baselineIsLogicalEnd);
- void setCursiveGlyph(le_int32 index, le_bool baselineIsLogicalEnd);
-@@ -266,6 +270,16 @@
- return (fFlags & EEF_BASELINE_IS_LOGICAL_END) != 0;
- }
-
-+inline void GlyphPositionAdjustments::EntryExitPoint::clearEntryPoint()
-+{
-+ fFlags &= ~EEF_HAS_ENTRY_POINT;
-+}
-+
-+inline void GlyphPositionAdjustments::EntryExitPoint::clearExitPoint()
-+{
-+ fFlags &= ~EEF_HAS_EXIT_POINT;
-+}
-+
- inline void GlyphPositionAdjustments::EntryExitPoint::setEntryPoint(LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd)
- {
- if (baselineIsLogicalEnd) {
-diff --git a/src/share/native/sun/font/layout/GlyphPositioningTables.cpp b/src/share/native/sun/font/layout/GlyphPositioningTables.cpp
---- jdk/src/share/native/sun/font/layout/GlyphPositioningTables.cpp
-+++ jdk/src/share/native/sun/font/layout/GlyphPositioningTables.cpp
-@@ -43,12 +43,19 @@
-
- void GlyphPositioningTableHeader::process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments, le_bool rightToLeft,
- LETag scriptTag, LETag languageTag,
-- const GlyphDefinitionTableHeader *glyphDefinitionTableHeader,
-+ const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, LEErrorCode &success,
- const LEFontInstance *fontInstance, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) const
- {
-- GlyphPositioningLookupProcessor processor(this, scriptTag, languageTag, featureMap, featureMapCount, featureOrder);
-+ if (LE_FAILURE(success)) {
-+ return;
-+ }
-
-- processor.process(glyphStorage, glyphPositionAdjustments, rightToLeft, glyphDefinitionTableHeader, fontInstance);
-+ GlyphPositioningLookupProcessor processor(this, scriptTag, languageTag, featureMap, featureMapCount, featureOrder, success);
-+ if (LE_FAILURE(success)) {
-+ return;
-+ }
-+
-+ processor.process(glyphStorage, glyphPositionAdjustments, rightToLeft, glyphDefinitionTableHeader, fontInstance, success);
-
- glyphPositionAdjustments->applyCursiveAdjustments(glyphStorage, rightToLeft, fontInstance);
- }
-diff --git a/src/share/native/sun/font/layout/GlyphPositioningTables.h b/src/share/native/sun/font/layout/GlyphPositioningTables.h
---- jdk/src/share/native/sun/font/layout/GlyphPositioningTables.h
-+++ jdk/src/share/native/sun/font/layout/GlyphPositioningTables.h
-@@ -53,7 +53,7 @@
- {
- void process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments,
- le_bool rightToLeft, LETag scriptTag, LETag languageTag,
-- const GlyphDefinitionTableHeader *glyphDefinitionTableHeader,
-+ const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, LEErrorCode &success,
- const LEFontInstance *fontInstance, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) const;
- };
-
-diff --git a/src/share/native/sun/font/layout/GlyphPosnLookupProc.cpp b/src/share/native/sun/font/layout/GlyphPosnLookupProc.cpp
---- jdk/src/share/native/sun/font/layout/GlyphPosnLookupProc.cpp
-+++ jdk/src/share/native/sun/font/layout/GlyphPosnLookupProc.cpp
-@@ -31,7 +31,7 @@
- #include "LETypes.h"
- #include "LEFontInstance.h"
- #include "OpenTypeTables.h"
--#include "Features.h"
-+#include "ICUFeatures.h"
- #include "Lookups.h"
- #include "ScriptAndLanguage.h"
- #include "GlyphDefinitionTables.h"
-@@ -58,13 +58,24 @@
-
- GlyphPositioningLookupProcessor::GlyphPositioningLookupProcessor(
- const GlyphPositioningTableHeader *glyphPositioningTableHeader,
-- LETag scriptTag, LETag languageTag, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder)
-+ LETag scriptTag,
-+ LETag languageTag,
-+ const FeatureMap *featureMap,
-+ le_int32 featureMapCount,
-+ le_bool featureOrder,
-+ LEErrorCode& success)
- : LookupProcessor(
- (char *) glyphPositioningTableHeader,
- SWAPW(glyphPositioningTableHeader->scriptListOffset),
- SWAPW(glyphPositioningTableHeader->featureListOffset),
- SWAPW(glyphPositioningTableHeader->lookupListOffset),
-- scriptTag, languageTag, featureMap, featureMapCount, featureOrder)
-+ scriptTag,
-+ languageTag,
-+ featureMap,
-+ featureMapCount,
-+ featureOrder,
-+ success
-+ )
- {
- // anything?
- }
-@@ -75,8 +86,13 @@
-
- le_uint32 GlyphPositioningLookupProcessor::applySubtable(const LookupSubtable *lookupSubtable, le_uint16 lookupType,
- GlyphIterator *glyphIterator,
-- const LEFontInstance *fontInstance) const
-+ const LEFontInstance *fontInstance,
-+ LEErrorCode& success) const
- {
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-+
- le_uint32 delta = 0;
-
- switch(lookupType)
-@@ -136,7 +152,7 @@
- {
- const ContextualPositioningSubtable *subtable = (const ContextualPositioningSubtable *) lookupSubtable;
-
-- delta = subtable->process(this, glyphIterator, fontInstance);
-+ delta = subtable->process(this, glyphIterator, fontInstance, success);
- break;
- }
-
-@@ -144,7 +160,7 @@
- {
- const ChainingContextualPositioningSubtable *subtable = (const ChainingContextualPositioningSubtable *) lookupSubtable;
-
-- delta = subtable->process(this, glyphIterator, fontInstance);
-+ delta = subtable->process(this, glyphIterator, fontInstance, success);
- break;
- }
-
-@@ -152,7 +168,7 @@
- {
- const ExtensionSubtable *subtable = (const ExtensionSubtable *) lookupSubtable;
-
-- delta = subtable->process(this, lookupType, glyphIterator, fontInstance);
-+ delta = subtable->process(this, lookupType, glyphIterator, fontInstance, success);
- break;
- }
-
-diff --git a/src/share/native/sun/font/layout/GlyphPosnLookupProc.h b/src/share/native/sun/font/layout/GlyphPosnLookupProc.h
---- jdk/src/share/native/sun/font/layout/GlyphPosnLookupProc.h
-+++ jdk/src/share/native/sun/font/layout/GlyphPosnLookupProc.h
-@@ -40,7 +40,7 @@
- #include "LEFontInstance.h"
- #include "OpenTypeTables.h"
- #include "Lookups.h"
--#include "Features.h"
-+#include "ICUFeatures.h"
- #include "GlyphDefinitionTables.h"
- #include "GlyphPositioningTables.h"
- #include "GlyphIterator.h"
-@@ -52,12 +52,17 @@
- {
- public:
- GlyphPositioningLookupProcessor(const GlyphPositioningTableHeader *glyphPositioningTableHeader,
-- LETag scriptTag, LETag languageTag, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder);
-+ LETag scriptTag,
-+ LETag languageTag,
-+ const FeatureMap *featureMap,
-+ le_int32 featureMapCount,
-+ le_bool featureOrder,
-+ LEErrorCode& success);
-
- virtual ~GlyphPositioningLookupProcessor();
-
- virtual le_uint32 applySubtable(const LookupSubtable *lookupSubtable, le_uint16 lookupType, GlyphIterator *glyphIterator,
-- const LEFontInstance *fontInstance) const;
-+ const LEFontInstance *fontInstance, LEErrorCode& success) const;
-
- protected:
- GlyphPositioningLookupProcessor();
-diff --git a/src/share/native/sun/font/layout/GlyphSubstLookupProc.cpp b/src/share/native/sun/font/layout/GlyphSubstLookupProc.cpp
---- jdk/src/share/native/sun/font/layout/GlyphSubstLookupProc.cpp
-+++ jdk/src/share/native/sun/font/layout/GlyphSubstLookupProc.cpp
-@@ -33,7 +33,7 @@
- #include "LEGlyphFilter.h"
- #include "LEFontInstance.h"
- #include "OpenTypeTables.h"
--#include "Features.h"
-+#include "ICUFeatures.h"
- #include "Lookups.h"
- #include "ScriptAndLanguage.h"
- #include "GlyphDefinitionTables.h"
-@@ -52,13 +52,19 @@
-
- GlyphSubstitutionLookupProcessor::GlyphSubstitutionLookupProcessor(
- const GlyphSubstitutionTableHeader *glyphSubstitutionTableHeader,
-- LETag scriptTag, LETag languageTag, const LEGlyphFilter *filter, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder)
-+ LETag scriptTag,
-+ LETag languageTag,
-+ const LEGlyphFilter *filter,
-+ const FeatureMap *featureMap,
-+ le_int32 featureMapCount,
-+ le_bool featureOrder,
-+ LEErrorCode& success)
- : LookupProcessor(
- (char *) glyphSubstitutionTableHeader,
- SWAPW(glyphSubstitutionTableHeader->scriptListOffset),
- SWAPW(glyphSubstitutionTableHeader->featureListOffset),
- SWAPW(glyphSubstitutionTableHeader->lookupListOffset),
-- scriptTag, languageTag, featureMap, featureMapCount, featureOrder), fFilter(filter)
-+ scriptTag, languageTag, featureMap, featureMapCount, featureOrder, success), fFilter(filter)
- {
- // anything?
- }
-@@ -68,8 +74,12 @@
- }
-
- le_uint32 GlyphSubstitutionLookupProcessor::applySubtable(const LookupSubtable *lookupSubtable, le_uint16 lookupType,
-- GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const
-+ GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const
- {
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-+
- le_uint32 delta = 0;
-
- switch(lookupType)
-@@ -89,7 +99,7 @@
- {
- const MultipleSubstitutionSubtable *subtable = (const MultipleSubstitutionSubtable *) lookupSubtable;
-
-- delta = subtable->process(glyphIterator, fFilter);
-+ delta = subtable->process(glyphIterator, success, fFilter);
- break;
- }
-
-@@ -113,7 +123,7 @@
- {
- const ContextualSubstitutionSubtable *subtable = (const ContextualSubstitutionSubtable *) lookupSubtable;
-
-- delta = subtable->process(this, glyphIterator, fontInstance);
-+ delta = subtable->process(this, glyphIterator, fontInstance, success);
- break;
- }
-
-@@ -121,7 +131,7 @@
- {
- const ChainingContextualSubstitutionSubtable *subtable = (const ChainingContextualSubstitutionSubtable *) lookupSubtable;
-
-- delta = subtable->process(this, glyphIterator, fontInstance);
-+ delta = subtable->process(this, glyphIterator, fontInstance, success);
- break;
- }
-
-@@ -129,7 +139,7 @@
- {
- const ExtensionSubtable *subtable = (const ExtensionSubtable *) lookupSubtable;
-
-- delta = subtable->process(this, lookupType, glyphIterator, fontInstance);
-+ delta = subtable->process(this, lookupType, glyphIterator, fontInstance, success);
- break;
- }
-
-diff --git a/src/share/native/sun/font/layout/GlyphSubstLookupProc.h b/src/share/native/sun/font/layout/GlyphSubstLookupProc.h
---- jdk/src/share/native/sun/font/layout/GlyphSubstLookupProc.h
-+++ jdk/src/share/native/sun/font/layout/GlyphSubstLookupProc.h
-@@ -41,7 +41,7 @@
- #include "LEFontInstance.h"
- #include "OpenTypeTables.h"
- #include "Lookups.h"
--#include "Features.h"
-+#include "ICUFeatures.h"
- #include "GlyphDefinitionTables.h"
- #include "GlyphSubstitutionTables.h"
- #include "GlyphIterator.h"
-@@ -53,12 +53,18 @@
- {
- public:
- GlyphSubstitutionLookupProcessor(const GlyphSubstitutionTableHeader *glyphSubstitutionTableHeader,
-- LETag scriptTag, LETag languageTag, const LEGlyphFilter *filter, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder);
-+ LETag scriptTag,
-+ LETag languageTag,
-+ const LEGlyphFilter *filter,
-+ const FeatureMap *featureMap,
-+ le_int32 featureMapCount,
-+ le_bool featureOrder,
-+ LEErrorCode& success);
-
- virtual ~GlyphSubstitutionLookupProcessor();
-
- virtual le_uint32 applySubtable(const LookupSubtable *lookupSubtable, le_uint16 lookupType, GlyphIterator *glyphIterator,
-- const LEFontInstance *fontInstance) const;
-+ const LEFontInstance *fontInstance, LEErrorCode& success) const;
-
- protected:
- GlyphSubstitutionLookupProcessor();
-diff --git a/src/share/native/sun/font/layout/GlyphSubstitutionTables.cpp b/src/share/native/sun/font/layout/GlyphSubstitutionTables.cpp
---- jdk/src/share/native/sun/font/layout/GlyphSubstitutionTables.cpp
-+++ jdk/src/share/native/sun/font/layout/GlyphSubstitutionTables.cpp
-@@ -42,13 +42,23 @@
-
- U_NAMESPACE_BEGIN
-
--le_int32 GlyphSubstitutionTableHeader::process(LEGlyphStorage &glyphStorage, le_bool rightToLeft, LETag scriptTag, LETag languageTag,
-+le_int32 GlyphSubstitutionTableHeader::process(LEGlyphStorage &glyphStorage,
-+ le_bool rightToLeft,
-+ LETag scriptTag,
-+ LETag languageTag,
- const GlyphDefinitionTableHeader *glyphDefinitionTableHeader,
-- const LEGlyphFilter *filter, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) const
-+ const LEGlyphFilter *filter,
-+ const FeatureMap *featureMap,
-+ le_int32 featureMapCount,
-+ le_bool featureOrder,
-+ LEErrorCode &success) const
- {
-- GlyphSubstitutionLookupProcessor processor(this, scriptTag, languageTag, filter, featureMap, featureMapCount, featureOrder);
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-
-- return processor.process(glyphStorage, NULL, rightToLeft, glyphDefinitionTableHeader, NULL);
-+ GlyphSubstitutionLookupProcessor processor(this, scriptTag, languageTag, filter, featureMap, featureMapCount, featureOrder, success);
-+ return processor.process(glyphStorage, NULL, rightToLeft, glyphDefinitionTableHeader, NULL, success);
- }
-
- U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/GlyphSubstitutionTables.h b/src/share/native/sun/font/layout/GlyphSubstitutionTables.h
---- jdk/src/share/native/sun/font/layout/GlyphSubstitutionTables.h
-+++ jdk/src/share/native/sun/font/layout/GlyphSubstitutionTables.h
-@@ -50,9 +50,16 @@
-
- struct GlyphSubstitutionTableHeader : public GlyphLookupTableHeader
- {
-- le_int32 process(LEGlyphStorage &glyphStorage, le_bool rightToLeft, LETag scriptTag, LETag languageTag,
-- const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, const LEGlyphFilter *filter,
-- const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) const;
-+ le_int32 process(LEGlyphStorage &glyphStorage,
-+ le_bool rightToLeft,
-+ LETag scriptTag,
-+ LETag languageTag,
-+ const GlyphDefinitionTableHeader *glyphDefinitionTableHeader,
-+ const LEGlyphFilter *filter,
-+ const FeatureMap *featureMap,
-+ le_int32 featureMapCount,
-+ le_bool featureOrder,
-+ LEErrorCode &success) const;
- };
-
- enum GlyphSubstitutionSubtableTypes
-diff --git a/src/share/native/sun/font/layout/HanLayoutEngine.cpp b/src/share/native/sun/font/layout/HanLayoutEngine.cpp
---- jdk/src/share/native/sun/font/layout/HanLayoutEngine.cpp
-+++ jdk/src/share/native/sun/font/layout/HanLayoutEngine.cpp
-@@ -26,7 +26,7 @@
- /*
- * HanLayoutEngine.cpp: OpenType processing for Han fonts.
- *
-- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved.
-+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved.
- */
-
- #include "LETypes.h"
-@@ -64,8 +64,8 @@
- #define features (loclFeatureMask)
-
- HanOpenTypeLayoutEngine::HanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-- le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable)
-- : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable)
-+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success)
-+ : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success)
- {
- fFeatureMap = featureMap;
- fFeatureMapCount = featureMapCount;
-diff --git a/src/share/native/sun/font/layout/HanLayoutEngine.h b/src/share/native/sun/font/layout/HanLayoutEngine.h
---- jdk/src/share/native/sun/font/layout/HanLayoutEngine.h
-+++ jdk/src/share/native/sun/font/layout/HanLayoutEngine.h
-@@ -27,7 +27,7 @@
- /*
- * HanLayoutEngine.h: OpenType processing for Han fonts.
- *
-- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved.
-+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved.
- */
-
- #ifndef __HANLAYOUTENGINE_H
-@@ -64,6 +64,7 @@
- * @param scriptCode - the script
- * @param langaugeCode - the language
- * @param gsubTable - the GSUB table
-+ * @param success - set to an error code if the operation fails
- *
- * @see LayoutEngine::layoutEngineFactory
- * @see OpenTypeLayoutEngine
-@@ -72,7 +73,7 @@
- * @internal
- */
- HanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-- le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable);
-+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTablem, LEErrorCode &success);
-
-
- /**
-diff --git a/src/share/native/sun/font/layout/HangulLayoutEngine.cpp b/src/share/native/sun/font/layout/HangulLayoutEngine.cpp
-new file mode 100644
---- /dev/null
-+++ jdk/src/share/native/sun/font/layout/HangulLayoutEngine.cpp
-@@ -0,0 +1,363 @@
-+/*
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ *
-+ */
-+
-+/*
-+ * HangulLayoutEngine.cpp: OpenType processing for Han fonts.
-+ *
-+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved.
-+ */
-+
-+#include "LETypes.h"
-+#include "LEScripts.h"
-+#include "LELanguages.h"
-+
-+#include "LayoutEngine.h"
-+#include "OpenTypeLayoutEngine.h"
-+#include "HangulLayoutEngine.h"
-+#include "ScriptAndLanguageTags.h"
-+#include "LEGlyphStorage.h"
-+#include "OpenTypeTables.h"
-+
-+U_NAMESPACE_BEGIN
-+
-+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(HangulOpenTypeLayoutEngine)
-+
-+
-+#define FEATURE_MAP(name) {name ## FeatureTag, name ## FeatureMask}
-+
-+#define LJMO_FIRST 0x1100
-+#define LJMO_LAST 0x1159
-+#define LJMO_FILL 0x115F
-+#define LJMO_COUNT 19
-+
-+#define VJMO_FIRST 0x1161
-+#define VJMO_LAST 0x11A2
-+#define VJMO_FILL 0x1160
-+#define VJMO_COUNT 21
-+
-+#define TJMO_FIRST 0x11A7
-+#define TJMO_LAST 0x11F9
-+#define TJMO_COUNT 28
-+
-+#define HSYL_FIRST 0xAC00
-+#define HSYL_COUNT 11172
-+#define HSYL_LVCNT (VJMO_COUNT * TJMO_COUNT)
-+
-+// Character classes
-+enum
-+{
-+ CC_L = 0,
-+ CC_V,
-+ CC_T,
-+ CC_LV,
-+ CC_LVT,
-+ CC_X,
-+ CC_COUNT
-+};
-+
-+// Action flags
-+#define AF_L 1
-+#define AF_V 2
-+#define AF_T 4
-+
-+// Actions
-+#define a_N 0
-+#define a_L (AF_L)
-+#define a_V (AF_V)
-+#define a_T (AF_T)
-+#define a_VT (AF_V | AF_T)
-+#define a_LV (AF_L | AF_V)
-+#define a_LVT (AF_L | AF_V | AF_T)
-+
-+typedef struct
-+{
-+ le_int32 newState;
-+ le_int32 actionFlags;
-+} StateTransition;
-+
-+static const StateTransition stateTable[][CC_COUNT] =
-+{
-+// L V T LV LVT X
-+ { {1, a_L}, {2, a_LV}, {3, a_LVT}, {2, a_LV}, {3, a_LVT}, {4, a_T}}, // 0 - start
-+ { {1, a_L}, {2, a_V}, {3, a_VT}, {2, a_LV}, {3, a_LVT}, {-1, a_V}}, // 1 - L+
-+ {{-1, a_N}, {2, a_V}, {3, a_T}, {-1, a_N}, {-1, a_N}, {-1, a_N}}, // 2 - L+V+
-+ {{-1, a_N}, {-1, a_N}, {3, a_T}, {-1, a_N}, {-1, a_N}, {-1, a_N}}, // 3 - L+V+T*
-+ {{-1, a_N}, {-1, a_N}, {-1, a_N}, {-1, a_N}, {-1, a_N}, {4, a_T}} // 4 - X+
-+};
-+
-+
-+#define ccmpFeatureTag LE_CCMP_FEATURE_TAG
-+#define ljmoFeatureTag LE_LJMO_FEATURE_TAG
-+#define vjmoFeatureTag LE_VJMO_FEATURE_TAG
-+#define tjmoFeatureTag LE_TJMO_FEATURE_TAG
-+
-+#define ccmpFeatureMask 0x80000000UL
-+#define ljmoFeatureMask 0x40000000UL
-+#define vjmoFeatureMask 0x20000000UL
-+#define tjmoFeatureMask 0x10000000UL
-+
-+static const FeatureMap featureMap[] =
-+{
-+ {ccmpFeatureTag, ccmpFeatureMask},
-+ {ljmoFeatureTag, ljmoFeatureMask},
-+ {vjmoFeatureTag, vjmoFeatureMask},
-+ {tjmoFeatureTag, tjmoFeatureMask}
-+};
-+
-+static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap);
-+
-+#define nullFeatures 0
-+#define ljmoFeatures (ccmpFeatureMask | ljmoFeatureMask)
-+#define vjmoFeatures (ccmpFeatureMask | vjmoFeatureMask | ljmoFeatureMask | tjmoFeatureMask)
-+#define tjmoFeatures (ccmpFeatureMask | tjmoFeatureMask | ljmoFeatureMask | vjmoFeatureMask)
-+
-+static le_int32 compose(LEUnicode lead, LEUnicode vowel, LEUnicode trail, LEUnicode &syllable)
-+{
-+ le_int32 lIndex = lead - LJMO_FIRST;
-+ le_int32 vIndex = vowel - VJMO_FIRST;
-+ le_int32 tIndex = trail - TJMO_FIRST;
-+ le_int32 result = 3;
-+
-+ if ((lIndex < 0 || lIndex >= LJMO_COUNT ) || (vIndex < 0 || vIndex >= VJMO_COUNT)) {
-+ return 0;
-+ }
-+
-+ if (tIndex <= 0 || tIndex >= TJMO_COUNT) {
-+ tIndex = 0;
-+ result = 2;
-+ }
-+
-+ syllable = (LEUnicode) ((lIndex * VJMO_COUNT + vIndex) * TJMO_COUNT + tIndex + HSYL_FIRST);
-+
-+ return result;
-+}
-+
-+static le_int32 decompose(LEUnicode syllable, LEUnicode &lead, LEUnicode &vowel, LEUnicode &trail)
-+{
-+ le_int32 sIndex = syllable - HSYL_FIRST;
-+
-+ if (sIndex < 0 || sIndex >= HSYL_COUNT) {
-+ return 0;
-+ }
-+
-+ lead = LJMO_FIRST + (sIndex / HSYL_LVCNT);
-+ vowel = VJMO_FIRST + (sIndex % HSYL_LVCNT) / TJMO_COUNT;
-+ trail = TJMO_FIRST + (sIndex % TJMO_COUNT);
-+
-+ if (trail == TJMO_FIRST) {
-+ return 2;
-+ }
-+
-+ return 3;
-+}
-+
-+static le_int32 getCharClass(LEUnicode ch, LEUnicode &lead, LEUnicode &vowel, LEUnicode &trail)
-+{
-+ lead = LJMO_FILL;
-+ vowel = VJMO_FILL;
-+ trail = TJMO_FIRST;
-+
-+ if (ch >= LJMO_FIRST && ch <= LJMO_LAST) {
-+ lead = ch;
-+ return CC_L;
-+ }
-+
-+ if (ch >= VJMO_FIRST && ch <= VJMO_LAST) {
-+ vowel = ch;
-+ return CC_V;
-+ }
-+
-+ if (ch > TJMO_FIRST && ch <= TJMO_LAST) {
-+ trail = ch;
-+ return CC_T;
-+ }
-+
-+ le_int32 c = decompose(ch, lead, vowel, trail);
-+
-+ if (c == 2) {
-+ return CC_LV;
-+ }
-+
-+ if (c == 3) {
-+ return CC_LVT;
-+ }
-+
-+ trail = ch;
-+ return CC_X;
-+}
-+
-+HangulOpenTypeLayoutEngine::HangulOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 /*languageCode*/,
-+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success)
-+ : OpenTypeLayoutEngine(fontInstance, scriptCode, korLanguageCode, typoFlags, gsubTable, success)
-+{
-+ fFeatureMap = featureMap;
-+ fFeatureMapCount = featureMapCount;
-+ fFeatureOrder = TRUE;
-+}
-+
-+HangulOpenTypeLayoutEngine::HangulOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 /*languageCode*/,
-+ le_int32 typoFlags, LEErrorCode &success)
-+ : OpenTypeLayoutEngine(fontInstance, scriptCode, korLanguageCode, typoFlags, success)
-+{
-+ fFeatureMap = featureMap;
-+ fFeatureMapCount = featureMapCount;
-+ fFeatureOrder = TRUE;
-+}
-+
-+HangulOpenTypeLayoutEngine::~HangulOpenTypeLayoutEngine()
-+{
-+ // nothing to do
-+}
-+
-+le_int32 HangulOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-+{
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-+
-+ if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-+ success = LE_ILLEGAL_ARGUMENT_ERROR;
-+ return 0;
-+ }
-+
-+ le_int32 worstCase = count * 3;
-+
-+ outChars = LE_NEW_ARRAY(LEUnicode, worstCase);
-+
-+ if (outChars == NULL) {
-+ success = LE_MEMORY_ALLOCATION_ERROR;
-+ return 0;
-+ }
-+
-+ glyphStorage.allocateGlyphArray(worstCase, rightToLeft, success);
-+ glyphStorage.allocateAuxData(success);
-+
-+ if (LE_FAILURE(success)) {
-+ LE_DELETE_ARRAY(outChars);
-+ return 0;
-+ }
-+
-+ le_int32 outCharCount = 0;
-+ le_int32 limit = offset + count;
-+ le_int32 i = offset;
-+
-+ while (i < limit) {
-+ le_int32 state = 0;
-+ le_int32 inStart = i;
-+ le_int32 outStart = outCharCount;
-+
-+ while( i < limit) {
-+ LEUnicode lead = 0;
-+ LEUnicode vowel = 0;
-+ LEUnicode trail = 0;
-+ le_int32 chClass = getCharClass(chars[i], lead, vowel, trail);
-+ const StateTransition transition = stateTable[state][chClass];
-+
-+ if (chClass == CC_X) {
-+ /* Any character of type X will be stored as a trail jamo */
-+ if ((transition.actionFlags & AF_T) != 0) {
-+ outChars[outCharCount] = trail;
-+ glyphStorage.setCharIndex(outCharCount, i-offset, success);
-+ glyphStorage.setAuxData(outCharCount++, nullFeatures, success);
-+ }
-+ } else {
-+ /* Any Hangul will be fully decomposed. Output the decomposed characters. */
-+ if ((transition.actionFlags & AF_L) != 0) {
-+ outChars[outCharCount] = lead;
-+ glyphStorage.setCharIndex(outCharCount, i-offset, success);
-+ glyphStorage.setAuxData(outCharCount++, ljmoFeatures, success);
-+ }
-+
-+ if ((transition.actionFlags & AF_V) != 0) {
-+ outChars[outCharCount] = vowel;
-+ glyphStorage.setCharIndex(outCharCount, i-offset, success);
-+ glyphStorage.setAuxData(outCharCount++, vjmoFeatures, success);
-+ }
-+
-+ if ((transition.actionFlags & AF_T) != 0) {
-+ outChars[outCharCount] = trail;
-+ glyphStorage.setCharIndex(outCharCount, i-offset, success);
-+ glyphStorage.setAuxData(outCharCount++, tjmoFeatures, success);
-+ }
-+ }
-+
-+ state = transition.newState;
-+
-+ /* Negative next state means stop. */
-+ if (state < 0) {
-+ break;
-+ }
-+
-+ i += 1;
-+ }
-+
-+ le_int32 inLength = i - inStart;
-+ le_int32 outLength = outCharCount - outStart;
-+
-+ /*
-+ * See if the syllable can be composed into a single character. There are 5
-+ * possible cases:
-+ *
-+ * Input Decomposed to Compose to
-+ * LV L, V LV
-+ * LVT L, V, T LVT
-+ * L, V L, V LV, DEL
-+ * LV, T L, V, T LVT, DEL
-+ * L, V, T L, V, T LVT, DEL, DEL
-+ */
-+ if ((inLength >= 1 && inLength <= 3) && (outLength == 2 || outLength == 3)) {
-+ LEUnicode syllable = 0x0000;
-+ LEUnicode lead = outChars[outStart];
-+ LEUnicode vowel = outChars[outStart + 1];
-+ LEUnicode trail = outLength == 3? outChars[outStart + 2] : TJMO_FIRST;
-+
-+ /*
-+ * If the composition consumes the whole decomposed syllable,
-+ * we can use it.
-+ */
-+ if (compose(lead, vowel, trail, syllable) == outLength) {
-+ outCharCount = outStart;
-+ outChars[outCharCount] = syllable;
-+ glyphStorage.setCharIndex(outCharCount, inStart-offset, success);
-+ glyphStorage.setAuxData(outCharCount++, nullFeatures, success);
-+
-+ /*
-+ * Replace the rest of the input characters with DEL.
-+ */
-+ for(le_int32 d = inStart + 1; d < i; d += 1) {
-+ outChars[outCharCount] = 0xFFFF;
-+ glyphStorage.setCharIndex(outCharCount, d - offset, success);
-+ glyphStorage.setAuxData(outCharCount++, nullFeatures, success);
-+ }
-+ }
-+ }
-+ }
-+
-+ glyphStorage.adoptGlyphCount(outCharCount);
-+ return outCharCount;
-+}
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/HangulLayoutEngine.h b/src/share/native/sun/font/layout/HangulLayoutEngine.h
-new file mode 100644
---- /dev/null
-+++ jdk/src/share/native/sun/font/layout/HangulLayoutEngine.h
-@@ -0,0 +1,151 @@
-+/*
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ *
-+ */
-+
-+/*
-+ *
-+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
-+ *
-+ */
-+
-+#ifndef __HANGULAYOUTENGINE_H
-+#define __HANGULAYOUTENGINE_H
-+
-+#include "LETypes.h"
-+#include "LEFontInstance.h"
-+#include "LEGlyphFilter.h"
-+#include "LayoutEngine.h"
-+#include "OpenTypeLayoutEngine.h"
-+
-+#include "GlyphSubstitutionTables.h"
-+#include "GlyphDefinitionTables.h"
-+#include "GlyphPositioningTables.h"
-+
-+U_NAMESPACE_BEGIN
-+
-+class MPreFixups;
-+class LEGlyphStorage;
-+
-+/**
-+ * This class implements OpenType layout for Old Hangul OpenType fonts, as
-+ * specified by Microsoft in "Creating and Supporting OpenType Fonts for
-+ * The Korean Hangul Script" (http://www.microsoft.com/typography/otfntdev/hangulot/default.htm)
-+ *
-+ * This class overrides the characterProcessing method to do Hangul character processing.
-+ * (See the MS spec. for more details)
-+ *
-+ * @internal
-+ */
-+class HangulOpenTypeLayoutEngine : public OpenTypeLayoutEngine
-+{
-+public:
-+ /**
-+ * This is the main constructor. It constructs an instance of HangulOpenTypeLayoutEngine for
-+ * a particular font, script and language. It takes the GSUB table as a parameter since
-+ * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an
-+ * Hangul OpenType font.
-+ *
-+ * @param fontInstance - the font
-+ * @param scriptCode - the script
-+ * @param langaugeCode - the language
-+ * @param gsubTable - the GSUB table
-+ * @param success - set to an error code if the operation fails
-+ *
-+ * @see LayoutEngine::layoutEngineFactory
-+ * @see OpenTypeLayoutEngine
-+ * @see ScriptAndLangaugeTags.h for script and language codes
-+ *
-+ * @internal
-+ */
-+ HangulOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success);
-+
-+ /**
-+ * This constructor is used when the font requires a "canned" GSUB table which can't be known
-+ * until after this constructor has been invoked.
-+ *
-+ * @param fontInstance - the font
-+ * @param scriptCode - the script
-+ * @param langaugeCode - the language
-+ * @param success - set to an error code if the operation fails
-+ *
-+ * @see OpenTypeLayoutEngine
-+ * @see ScriptAndLangaugeTags.h for script and language codes
-+ *
-+ * @internal
-+ */
-+ HangulOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-+ le_int32 typoFlags, LEErrorCode &success);
-+
-+ /**
-+ * The destructor, virtual for correct polymorphic invocation.
-+ *
-+ * @internal
-+ */
-+ virtual ~HangulOpenTypeLayoutEngine();
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ virtual UClassID getDynamicClassID() const;
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for this class.
-+ *
-+ * @stable ICU 2.8
-+ */
-+ static UClassID getStaticClassID();
-+
-+protected:
-+
-+ /**
-+ * This method does Hangul OpenType character processing. It assigns the OpenType feature
-+ * tags to the characters, and may compose a character sequence into a modern Hangul syllable,
-+ * or decompose a modern Hangul syllable if it forms part of an old Hangul syllable.
-+ *
-+ * Input parameters:
-+ * @param chars - the input character context
-+ * @param offset - the index of the first character to process
-+ * @param count - the number of characters to process
-+ * @param max - the number of characters in the input context
-+ * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
-+ * @param glyphStorage - the glyph storage object. The glyph and character index arrays will be set.
-+ * the auxillary data array will be set to the feature tags.
-+ *
-+ * Output parameters:
-+ * @param success - set to an error code if the operation fails
-+ *
-+ * @return the output character count
-+ *
-+ * @internal
-+ */
-+ virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+};
-+
-+U_NAMESPACE_END
-+#endif
-+
-diff --git a/src/share/native/sun/font/layout/HebrewLigatureData.cpp b/src/share/native/sun/font/layout/HebrewLigatureData.cpp
-deleted file mode 100644
---- jdk/src/share/native/sun/font/layout/HebrewLigatureData.cpp
-+++ /dev/null
-@@ -1,80 +0,0 @@
--/*
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-- *
-- */
--
--/*
-- *
-- * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved
-- *
-- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
-- * YOU REALLY KNOW WHAT YOU'RE DOING.
-- *
-- */
--
--#include "LETypes.h"
--#include "HebrewShaping.h"
--
--const le_uint8 HebrewShaping::glyphSubstitutionTable[] = {
-- 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x1E, 0x00, 0x2C, 0x00, 0x01, 0x68, 0x65, 0x62, 0x72,
-- 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
-- 0x6C, 0x69, 0x67, 0x61, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04,
-- 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x01, 0x62, 0x00, 0x16, 0x00, 0x32,
-- 0x00, 0x4C, 0x00, 0x5E, 0x00, 0x68, 0x00, 0x72, 0x00, 0x7C, 0x00, 0x8E, 0x00, 0x98, 0x00, 0xA2,
-- 0x00, 0xAC, 0x00, 0xB6, 0x00, 0xC8, 0x00, 0xD2, 0x00, 0xDC, 0x00, 0xE6, 0x00, 0xF0, 0x00, 0xFA,
-- 0x01, 0x0C, 0x01, 0x16, 0x01, 0x20, 0x01, 0x2A, 0x01, 0x58, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E,
-- 0x00, 0x14, 0xFB, 0x2E, 0x00, 0x02, 0x05, 0xB7, 0xFB, 0x2F, 0x00, 0x02, 0x05, 0xB8, 0xFB, 0x30,
-- 0x00, 0x02, 0x05, 0xBC, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0xFB, 0x31, 0x00, 0x02, 0x05, 0xBC,
-- 0xFB, 0x4C, 0x00, 0x02, 0x05, 0xBF, 0x00, 0x01, 0x00, 0x04, 0xFB, 0x32, 0x00, 0x02, 0x05, 0xBC,
-- 0x00, 0x01, 0x00, 0x04, 0xFB, 0x33, 0x00, 0x02, 0x05, 0xBC, 0x00, 0x01, 0x00, 0x04, 0xFB, 0x34,
-- 0x00, 0x02, 0x05, 0xBC, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0xFB, 0x4B, 0x00, 0x02, 0x05, 0xB9,
-- 0xFB, 0x35, 0x00, 0x02, 0x05, 0xBC, 0x00, 0x01, 0x00, 0x04, 0xFB, 0x36, 0x00, 0x02, 0x05, 0xBC,
-- 0x00, 0x01, 0x00, 0x04, 0xFB, 0x38, 0x00, 0x02, 0x05, 0xBC, 0x00, 0x01, 0x00, 0x04, 0xFB, 0x39,
-- 0x00, 0x02, 0x05, 0xBC, 0x00, 0x01, 0x00, 0x04, 0xFB, 0x3A, 0x00, 0x02, 0x05, 0xBC, 0x00, 0x02,
-- 0x00, 0x06, 0x00, 0x0C, 0xFB, 0x3B, 0x00, 0x02, 0x05, 0xBC, 0xFB, 0x4D, 0x00, 0x02, 0x05, 0xBF,
-- 0x00, 0x01, 0x00, 0x04, 0xFB, 0x3C, 0x00, 0x02, 0x05, 0xBC, 0x00, 0x01, 0x00, 0x04, 0xFB, 0x3E,
-- 0x00, 0x02, 0x05, 0xBC, 0x00, 0x01, 0x00, 0x04, 0xFB, 0x40, 0x00, 0x02, 0x05, 0xBC, 0x00, 0x01,
-- 0x00, 0x04, 0xFB, 0x41, 0x00, 0x02, 0x05, 0xBC, 0x00, 0x01, 0x00, 0x04, 0xFB, 0x43, 0x00, 0x02,
-- 0x05, 0xBC, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0xFB, 0x44, 0x00, 0x02, 0x05, 0xBC, 0xFB, 0x4E,
-- 0x00, 0x02, 0x05, 0xBF, 0x00, 0x01, 0x00, 0x04, 0xFB, 0x46, 0x00, 0x02, 0x05, 0xBC, 0x00, 0x01,
-- 0x00, 0x04, 0xFB, 0x47, 0x00, 0x02, 0x05, 0xBC, 0x00, 0x01, 0x00, 0x04, 0xFB, 0x48, 0x00, 0x02,
-- 0x05, 0xBC, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x14, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0xFB, 0x2C,
-- 0x00, 0x03, 0x05, 0xBC, 0x05, 0xC1, 0xFB, 0x2D, 0x00, 0x03, 0x05, 0xBC, 0x05, 0xC2, 0xFB, 0x49,
-- 0x00, 0x02, 0x05, 0xBC, 0xFB, 0x2A, 0x00, 0x02, 0x05, 0xC1, 0xFB, 0x2B, 0x00, 0x02, 0x05, 0xC2,
-- 0x00, 0x01, 0x00, 0x04, 0xFB, 0x4A, 0x00, 0x02, 0x05, 0xBC, 0x00, 0x01, 0x00, 0x16, 0x05, 0xD0,
-- 0x05, 0xD1, 0x05, 0xD2, 0x05, 0xD3, 0x05, 0xD4, 0x05, 0xD5, 0x05, 0xD6, 0x05, 0xD8, 0x05, 0xD9,
-- 0x05, 0xDA, 0x05, 0xDB, 0x05, 0xDC, 0x05, 0xDE, 0x05, 0xE0, 0x05, 0xE1, 0x05, 0xE3, 0x05, 0xE4,
-- 0x05, 0xE6, 0x05, 0xE7, 0x05, 0xE8, 0x05, 0xE9, 0x05, 0xEA
--};
--
--const le_uint8 HebrewShaping::glyphDefinitionTable[] = {
-- 0x00, 0x01, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x15,
-- 0x05, 0x91, 0x05, 0xA1, 0x00, 0x03, 0x05, 0xA3, 0x05, 0xB9, 0x00, 0x03, 0x05, 0xBB, 0x05, 0xBD,
-- 0x00, 0x03, 0x05, 0xBE, 0x05, 0xBE, 0x00, 0x01, 0x05, 0xBF, 0x05, 0xBF, 0x00, 0x03, 0x05, 0xC0,
-- 0x05, 0xC0, 0x00, 0x01, 0x05, 0xC1, 0x05, 0xC2, 0x00, 0x03, 0x05, 0xC3, 0x05, 0xC3, 0x00, 0x01,
-- 0x05, 0xC4, 0x05, 0xC4, 0x00, 0x03, 0x05, 0xD0, 0x05, 0xEA, 0x00, 0x01, 0x05, 0xF0, 0x05, 0xF2,
-- 0x00, 0x02, 0x05, 0xF3, 0x05, 0xF4, 0x00, 0x01, 0xFB, 0x1E, 0xFB, 0x1E, 0x00, 0x03, 0xFB, 0x1F,
-- 0xFB, 0x1F, 0x00, 0x02, 0xFB, 0x20, 0xFB, 0x36, 0x00, 0x01, 0xFB, 0x38, 0xFB, 0x3C, 0x00, 0x01,
-- 0xFB, 0x3E, 0xFB, 0x3E, 0x00, 0x01, 0xFB, 0x40, 0xFB, 0x41, 0x00, 0x01, 0xFB, 0x43, 0xFB, 0x44,
-- 0x00, 0x01, 0xFB, 0x46, 0xFB, 0x4E, 0x00, 0x01, 0xFB, 0x4F, 0xFB, 0x4F, 0x00, 0x02
--};
-diff --git a/src/share/native/sun/font/layout/HebrewShaping.cpp b/src/share/native/sun/font/layout/HebrewShaping.cpp
-deleted file mode 100644
---- jdk/src/share/native/sun/font/layout/HebrewShaping.cpp
-+++ /dev/null
-@@ -1,58 +0,0 @@
--/*
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-- *
-- */
--
--/*
-- *
-- * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved
-- *
-- */
--
--#include "LETypes.h"
--#include "OpenTypeTables.h"
--#include "HebrewShaping.h"
--
--const LETag ligaFeatureTag = 0x6C696761; // 'liga'
--const LETag emptyTag = 0x00000000; // ''
--
--const LETag hebrewTags[] =
--{
-- ligaFeatureTag, emptyTag
--};
--
--void HebrewShaping::shape(const LEUnicode * /*chars*/, le_int32 /*offset*/, le_int32 charCount, le_int32 /*charMax*/,
-- le_bool rightToLeft, const LETag **tags)
--{
--
-- le_int32 count, out = 0, dir = 1;
--
-- if (rightToLeft) {
-- out = charCount - 1;
-- dir = -1;
-- }
--
-- for (count = 0; count < charCount; count += 1, out += dir) {
-- tags[out] = hebrewTags;
-- }
--}
-diff --git a/src/share/native/sun/font/layout/HebrewShaping.h b/src/share/native/sun/font/layout/HebrewShaping.h
-deleted file mode 100644
---- jdk/src/share/native/sun/font/layout/HebrewShaping.h
-+++ /dev/null
-@@ -1,52 +0,0 @@
--/*
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This code is free software; you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-- *
-- */
--
--/*
-- *
-- * (C) Copyright IBM Corp. 1998, 1999, 2000 - All Rights Reserved
-- *
-- */
--
--#ifndef __HEBREWSHAPING_H
--#define __HEBREWSHAPING_H
--
--#include "LETypes.h"
--#include "OpenTypeTables.h"
--
--class HebrewShaping
--{
--public:
-- static void shape(const LEUnicode *chars, le_int32 offset, le_int32 charCount, le_int32 charMax,
-- le_bool rightToLeft, const LETag **tags);
--
-- static const le_uint8 glyphSubstitutionTable[];
-- static const le_uint8 glyphDefinitionTable[];
--
--private:
-- // forbid instantiation
-- HebrewShaping();
--};
--
--#endif
-diff --git a/src/share/native/sun/font/layout/ICUFeatures.h b/src/share/native/sun/font/layout/ICUFeatures.h
-new file mode 100644
---- /dev/null
-+++ jdk/src/share/native/sun/font/layout/ICUFeatures.h
-@@ -0,0 +1,69 @@
-+/*
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ *
-+ */
-+
-+/*
-+ *
-+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
-+ *
-+ */
-+
-+#ifndef __ICUFEATURES_H
-+#define __ICUFEATURES_H
-+
-+/**
-+ * \file
-+ * \internal
-+ */
-+
-+#include "LETypes.h"
-+#include "OpenTypeTables.h"
-+
-+U_NAMESPACE_BEGIN
-+
-+struct FeatureRecord
-+{
-+ ATag featureTag;
-+ Offset featureTableOffset;
-+};
-+
-+struct FeatureTable
-+{
-+ Offset featureParamsOffset;
-+ le_uint16 lookupCount;
-+ le_uint16 lookupListIndexArray[ANY_NUMBER];
-+};
-+
-+struct FeatureListTable
-+{
-+ le_uint16 featureCount;
-+ FeatureRecord featureRecordArray[ANY_NUMBER];
-+
-+ const FeatureTable *getFeatureTable(le_uint16 featureIndex, LETag *featureTag) const;
-+
-+ const FeatureTable *getFeatureTable(LETag featureTag) const;
-+};
-+
-+U_NAMESPACE_END
-+#endif
-diff --git a/src/share/native/sun/font/layout/IndicClassTables.cpp b/src/share/native/sun/font/layout/IndicClassTables.cpp
---- jdk/src/share/native/sun/font/layout/IndicClassTables.cpp
-+++ jdk/src/share/native/sun/font/layout/IndicClassTables.cpp
-@@ -25,7 +25,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-@@ -73,6 +73,7 @@
- #define _m2 (CC_SPLIT_VOWEL_PIECE_2 | CF_LENGTH_MARK)
- #define _m3 (CC_SPLIT_VOWEL_PIECE_3 | CF_LENGTH_MARK)
- #define _vr (CC_VIRAMA)
-+#define _al (CC_AL_LAKUNA)
-
- // split matras
- #define _s1 (_dv | _x1)
-@@ -90,6 +91,7 @@
- // special forms... (Bengali RA?)
- #define _bb (_ct | CF_BELOW_BASE)
- #define _pb (_ct | CF_POST_BASE)
-+#define _fb (_ct | CF_PRE_BASE)
- #define _vt (_bb | CF_VATTU)
- #define _rv (_vt | CF_REPH)
- #define _rp (_pb | CF_REPH)
-@@ -119,7 +121,7 @@
- _dr, _db, _db, _db, _db, _xx, _xx, _l1, _dl, _xx, _xx, _s1, _s2, _vr, _xx, _xx, // 09C0 - 09CF
- _xx, _xx, _xx, _xx, _xx, _xx, _xx, _m2, _xx, _xx, _xx, _xx, _cn, _cn, _xx, _cn, // 09D0 - 09DF
- _iv, _iv, _dv, _dv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 09E0 - 09EF
-- _ct, _ct, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 09F0 - 09FA
-+ _rv, _ct, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 09F0 - 09FA
- };
-
- static const IndicClassTable::CharClass punjCharClasses[] =
-@@ -142,9 +144,22 @@
- _rv, _xx, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _nu, _xx, _dr, _dl, // 0AB0 - 0ABF
- _dr, _db, _db, _db, _db, _da, _xx, _da, _da, _dr, _xx, _dr, _dr, _vr, _xx, _xx, // 0AC0 - 0ACF
- _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0AD0 - 0ADF
-- _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 0AE0 - 0AEF
-+ _iv, _iv, _db, _db, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 0AE0 - 0AEF
- };
-
-+#if 1
-+static const IndicClassTable::CharClass oryaCharClasses[] =
-+{
-+ _xx, _ma, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _iv, /* 0B00 - 0B0F */
-+ _iv, _xx, _xx, _iv, _iv, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _ct, _bb, /* 0B10 - 0B1F */
-+ _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _pb, /* 0B20 - 0B2F */
-+ _rb, _xx, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _xx, _xx, _nu, _xx, _dr, _da, /* 0B30 - 0B3F */
-+ _dr, _db, _db, _db, _xx, _xx, _xx, _dl, _s1, _xx, _xx, _s2, _s3, _vr, _xx, _xx, /* 0B40 - 0B4F */
-+ _xx, _xx, _xx, _xx, _xx, _xx, _da, _dr, _xx, _xx, _xx, _xx, _cn, _cn, _xx, _pb, /* 0B50 - 0B5F */
-+ _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0B60 - 0B6F */
-+ _xx, _bb /* 0B70 - 0B71 */
-+};
-+#else
- static const IndicClassTable::CharClass oryaCharClasses[] =
- {
- _xx, _ma, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _iv, // 0B00 - 0B0F
-@@ -156,13 +171,14 @@
- _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0B60 - 0B6F
- _xx, _ct // 0B70 - 0B71
- };
-+#endif
-
- static const IndicClassTable::CharClass tamlCharClasses[] =
- {
-- _xx, _xx, _ma, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _xx, _iv, _iv, // 0B80 - 0B8F
-+ _xx, _xx, _ma, _xx, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _xx, _iv, _iv, // 0B80 - 0B8F
- _iv, _xx, _iv, _iv, _iv, _ct, _xx, _xx, _xx, _ct, _ct, _xx, _ct, _xx, _ct, _ct, // 0B90 - 0B9F
- _xx, _xx, _xx, _ct, _ct, _xx, _xx, _xx, _ct, _ct, _ct, _xx, _xx, _xx, _ct, _ct, // 0BA0 - 0BAF
-- _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _ct, _ct, _xx, _xx, _xx, _xx, _r2, _dr, // 0BB0 - 0BBF
-+ _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _xx, _xx, _r2, _dr, // 0BB0 - 0BBF
- _da, _dr, _dr, _xx, _xx, _xx, _l1, _l1, _dl, _xx, _s1, _s2, _s3, _vr, _xx, _xx, // 0BC0 - 0BCF
- _xx, _xx, _xx, _xx, _xx, _xx, _xx, _m2, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0BD0 - 0BDF
- _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0BE0 - 0BEF
-@@ -175,7 +191,7 @@
- _xx, _mp, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _iv, // 0C00 - 0C0F
- _iv, _xx, _iv, _iv, _iv, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, // 0C10 - 0C1F
- _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _bb, // 0C20 - 0C2F
-- _bb, _ct, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _xx, _xx, _xx, _xx, _da, _da, // 0C30 - 0C3F
-+ _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _xx, _xx, _xx, _xx, _da, _da, // 0C30 - 0C3F
- _da, _dr, _dr, _dr, _dr, _xx, _a1, _da, _s1, _xx, _da, _da, _da, _vr, _xx, _xx, // 0C40 - 0C4F
- _xx, _xx, _xx, _xx, _xx, _da, _m2, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0C50 - 0C5F
- _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 0C60 - 0C6F
-@@ -189,7 +205,7 @@
- // http://brahmi.sourceforge.net/docs/KannadaComputing.html
- static const IndicClassTable::CharClass kndaCharClasses[] =
- {
-- _xx, _xx, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, // 0C80 - 0C8F
-+ _xx, _xx, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _iv, // 0C80 - 0C8F
- _iv, _xx, _iv, _iv, _iv, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, // 0C90 - 0C9F
- _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _bb, // 0CA0 - 0CAF
- _rb, _ct, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _xx, _xx, _xx, _xx, _dr, _da, // 0CB0 - 0CBF
-@@ -203,9 +219,9 @@
- static const IndicClassTable::CharClass mlymCharClasses[] =
- {
- _xx, _xx, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _iv, // 0D00 - 0D0F
-- _iv, _xx, _iv, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _bb, // 0D10 - 0D1F
-- _ct, _ct, _ct, _bb, _ct, _bb, _bb, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _pb, // 0D20 - 0D2F
-- _pb, _cn, _bb, _ct, _ct, _pb, _ct, _ct, _ct, _ct, _xx, _xx, _xx, _xx, _r2, _dr, // 0D30 - 0D3F
-+ _iv, _xx, _iv, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0D10 - 0D1F
-+ _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _pb, // 0D20 - 0D2F
-+ _fb, _fb, _bb, _ct, _ct, _pb, _ct, _ct, _ct, _ct, _xx, _xx, _xx, _xx, _r2, _dr, // 0D30 - 0D3F
- _dr, _dr, _dr, _dr, _xx, _xx, _l1, _l1, _dl, _xx, _s1, _s2, _s3, _vr, _xx, _xx, // 0D40 - 0D4F
- _xx, _xx, _xx, _xx, _xx, _xx, _xx, _m2, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0D50 - 0D5F
- _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 0D60 - 0D6F
-@@ -217,7 +233,7 @@
- _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _xx, _ct, _ct, _ct, _ct, _ct, _ct, // 0D90 - 0D9F
- _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0DA0 - 0DAF
- _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _xx, _xx, // 0DB0 - 0DBF
-- _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _xx, _vr, _xx, _xx, _xx, _xx, _dr, // 0DC0 - 0DCF
-+ _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _xx, _al, _xx, _xx, _xx, _xx, _dr, // 0DC0 - 0DCF
- _dr, _dr, _da, _da, _db, _xx, _db, _xx, _dr, _dl, _s1, _dl, _s2, _s3, _s4, _dr, // 0DD0 - 0DDF
- _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0DE0 - 0DEF
- _xx, _xx, _dr, _dr, _xx // 0DF0 - 0DF4
-@@ -248,17 +264,18 @@
-
- // FIXME: post 'GSUB' reordering of MATRA_PRE's for Malayalam and Tamil
- // FIXME: reformed Malayalam needs to reorder VATTU to before base glyph...
-+// FIXME: not sure passing ZWJ/ZWNJ is best way to render Malayalam Cillu...
- // FIXME: eyelash RA only for Devanagari??
--#define DEVA_SCRIPT_FLAGS (SF_EYELASH_RA | SF_NO_POST_BASE_LIMIT)
--#define BENG_SCRIPT_FLAGS (SF_REPH_AFTER_BELOW | SF_NO_POST_BASE_LIMIT)
--#define PUNJ_SCRIPT_FLAGS (SF_NO_POST_BASE_LIMIT)
--#define GUJR_SCRIPT_FLAGS (SF_NO_POST_BASE_LIMIT)
--#define ORYA_SCRIPT_FLAGS (SF_REPH_AFTER_BELOW | SF_NO_POST_BASE_LIMIT)
--#define TAML_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT)
--#define TELU_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | 3)
--#define KNDA_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | 3)
--#define MLYM_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT)
--#define SINH_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT)
-+#define DEVA_SCRIPT_FLAGS (SF_EYELASH_RA | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
-+#define BENG_SCRIPT_FLAGS (SF_REPH_AFTER_BELOW | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
-+#define PUNJ_SCRIPT_FLAGS (SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
-+#define GUJR_SCRIPT_FLAGS (SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
-+#define ORYA_SCRIPT_FLAGS (SF_REPH_AFTER_BELOW | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
-+#define TAML_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
-+#define TELU_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | SF_FILTER_ZERO_WIDTH | 3)
-+#define KNDA_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | SF_FILTER_ZERO_WIDTH | 3)
-+#define MLYM_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT /*| SF_FILTER_ZERO_WIDTH*/)
-+#define SINH_SCRIPT_FLAGS (SF_NO_POST_BASE_LIMIT)
-
- //
- // Indic Class Tables
-@@ -286,7 +303,7 @@
- //
- // IndicClassTable addresses
- //
--static const IndicClassTable * const indicClassTables[] = {
-+static const IndicClassTable * const indicClassTables[scriptCodeCount] = {
- NULL, /* 'zyyy' (COMMON) */
- NULL, /* 'qaai' (INHERITED) */
- NULL, /* 'arab' (ARABIC) */
-@@ -348,7 +365,79 @@
- NULL, /* 'sylo' (SYLOTI_NAGRI) */
- NULL, /* 'talu' (NEW_TAI_LUE) */
- NULL, /* 'tfng' (TIFINAGH) */
-- NULL /* 'xpeo' (OLD_PERSIAN) */
-+ NULL, /* 'xpeo' (OLD_PERSIAN) */
-+ NULL, /* 'bali' (BALINESE) */
-+ NULL, /* 'batk' (BATK) */
-+ NULL, /* 'blis' (BLIS) */
-+ NULL, /* 'brah' (BRAH) */
-+ NULL, /* 'cham' (CHAM) */
-+ NULL, /* 'cirt' (CIRT) */
-+ NULL, /* 'cyrs' (CYRS) */
-+ NULL, /* 'egyd' (EGYD) */
-+ NULL, /* 'egyh' (EGYH) */
-+ NULL, /* 'egyp' (EGYP) */
-+ NULL, /* 'geok' (GEOK) */
-+ NULL, /* 'hans' (HANS) */
-+ NULL, /* 'hant' (HANT) */
-+ NULL, /* 'hmng' (HMNG) */
-+ NULL, /* 'hung' (HUNG) */
-+ NULL, /* 'inds' (INDS) */
-+ NULL, /* 'java' (JAVA) */
-+ NULL, /* 'kali' (KALI) */
-+ NULL, /* 'latf' (LATF) */
-+ NULL, /* 'latg' (LATG) */
-+ NULL, /* 'lepc' (LEPC) */
-+ NULL, /* 'lina' (LINA) */
-+ NULL, /* 'mand' (MAND) */
-+ NULL, /* 'maya' (MAYA) */
-+ NULL, /* 'mero' (MERO) */
-+ NULL, /* 'nko ' (NKO) */
-+ NULL, /* 'orkh' (ORKH) */
-+ NULL, /* 'perm' (PERM) */
-+ NULL, /* 'phag' (PHAGS_PA) */
-+ NULL, /* 'phnx' (PHOENICIAN) */
-+ NULL, /* 'plrd' (PLRD) */
-+ NULL, /* 'roro' (RORO) */
-+ NULL, /* 'sara' (SARA) */
-+ NULL, /* 'syre' (SYRE) */
-+ NULL, /* 'syrj' (SYRJ) */
-+ NULL, /* 'syrn' (SYRN) */
-+ NULL, /* 'teng' (TENG) */
-+ NULL, /* 'vai ' (VAII) */
-+ NULL, /* 'visp' (VISP) */
-+ NULL, /* 'xsux' (CUNEIFORM) */
-+ NULL, /* 'zxxx' (ZXXX) */
-+ NULL, /* 'zzzz' (UNKNOWN) */
-+ NULL, /* 'cari' (CARI) */
-+ NULL, /* 'jpan' (JPAN) */
-+ NULL, /* 'lana' (LANA) */
-+ NULL, /* 'lyci' (LYCI) */
-+ NULL, /* 'lydi' (LYDI) */
-+ NULL, /* 'olck' (OLCK) */
-+ NULL, /* 'rjng' (RJNG) */
-+ NULL, /* 'saur' (SAUR) */
-+ NULL, /* 'sgnw' (SGNW) */
-+ NULL, /* 'sund' (SUND) */
-+ NULL, /* 'moon' (MOON) */
-+ NULL, /* 'mtei' (MTEI) */
-+ NULL, /* 'armi' (ARMI) */
-+ NULL, /* 'avst' (AVST) */
-+ NULL, /* 'cakm' (CAKM) */
-+ NULL, /* 'kore' (KORE) */
-+ NULL, /* 'kthi' (KTHI) */
-+ NULL, /* 'mani' (MANI) */
-+ NULL, /* 'phli' (PHLI) */
-+ NULL, /* 'phlp' (PHLP) */
-+ NULL, /* 'phlv' (PHLV) */
-+ NULL, /* 'prti' (PRTI) */
-+ NULL, /* 'samr' (SAMR) */
-+ NULL, /* 'tavt' (TAVT) */
-+ NULL, /* 'zmth' (ZMTH) */
-+ NULL, /* 'zsym' (ZSYM) */
-+ NULL, /* 'bamu' (BAMUM) */
-+ NULL, /* 'lisu' (LISU) */
-+ NULL, /* 'nkgb' (NKGB) */
-+ NULL /* 'sarb' (OLD_SOUTH_ARABIAN) */
- };
-
- IndicClassTable::CharClass IndicClassTable::getCharClass(LEUnicode ch) const
-@@ -388,4 +477,15 @@
- return classTable->getWorstCaseExpansion();
- }
-
-+le_bool IndicReordering::getFilterZeroWidth(le_int32 scriptCode)
-+{
-+ const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(scriptCode);
-+
-+ if (classTable == NULL) {
-+ return TRUE;
-+ }
-+
-+ return classTable->getFilterZeroWidth();
-+}
-+
- U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/IndicLayoutEngine.cpp b/src/share/native/sun/font/layout/IndicLayoutEngine.cpp
---- jdk/src/share/native/sun/font/layout/IndicLayoutEngine.cpp
-+++ jdk/src/share/native/sun/font/layout/IndicLayoutEngine.cpp
-@@ -26,7 +26,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2009 - All Rights Reserved
- *
- */
-
-@@ -44,24 +44,31 @@
- #include "LEGlyphStorage.h"
-
- #include "IndicReordering.h"
--
-+#include <stdio.h>
- U_NAMESPACE_BEGIN
-
- UOBJECT_DEFINE_RTTI_IMPLEMENTATION(IndicOpenTypeLayoutEngine)
-
- IndicOpenTypeLayoutEngine::IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-- le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable)
-- : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable), fMPreFixups(NULL)
-+ le_int32 typoFlags, le_bool version2, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success)
-+ : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success), fMPreFixups(NULL)
-+{
-+ if ( version2 ) {
-+ fFeatureMap = IndicReordering::getv2FeatureMap(fFeatureMapCount);
-+ } else {
-+ fFeatureMap = IndicReordering::getFeatureMap(fFeatureMapCount);
-+ }
-+ fFeatureOrder = TRUE;
-+ fVersion2 = version2;
-+ fFilterZeroWidth = IndicReordering::getFilterZeroWidth(fScriptCode);
-+}
-+
-+IndicOpenTypeLayoutEngine::IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags, LEErrorCode &success)
-+ : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success), fMPreFixups(NULL)
- {
- fFeatureMap = IndicReordering::getFeatureMap(fFeatureMapCount);
- fFeatureOrder = TRUE;
--}
--
--IndicOpenTypeLayoutEngine::IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags)
-- : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags), fMPreFixups(NULL)
--{
-- fFeatureMap = IndicReordering::getFeatureMap(fFeatureMapCount);
-- fFeatureOrder = TRUE;
-+ fVersion2 = FALSE;
- }
-
- IndicOpenTypeLayoutEngine::~IndicOpenTypeLayoutEngine()
-@@ -89,8 +96,13 @@
- return 0;
- }
-
-- IndicReordering::adjustMPres(fMPreFixups, glyphStorage);
--
-+ if (fVersion2) {
-+ IndicReordering::finalReordering(glyphStorage,retCount);
-+ IndicReordering::applyPresentationForms(glyphStorage,retCount);
-+ OpenTypeLayoutEngine::glyphSubstitution(count,max, rightToLeft, glyphStorage, success);
-+ } else {
-+ IndicReordering::adjustMPres(fMPreFixups, glyphStorage, success);
-+ }
- return retCount;
- }
-
-@@ -128,7 +140,18 @@
-
- // NOTE: assumes this allocates featureTags...
- // (probably better than doing the worst case stuff here...)
-- le_int32 outCharCount = IndicReordering::reorder(&chars[offset], count, fScriptCode, outChars, glyphStorage, &fMPreFixups);
-+
-+ le_int32 outCharCount;
-+ if (fVersion2) {
-+ outCharCount = IndicReordering::v2process(&chars[offset], count, fScriptCode, outChars, glyphStorage);
-+ } else {
-+ outCharCount = IndicReordering::reorder(&chars[offset], count, fScriptCode, outChars, glyphStorage, &fMPreFixups, success);
-+ }
-+
-+ if (LE_FAILURE(success)) {
-+ LE_DELETE_ARRAY(outChars);
-+ return 0;
-+ }
-
- glyphStorage.adoptGlyphCount(outCharCount);
- return outCharCount;
-diff --git a/src/share/native/sun/font/layout/IndicLayoutEngine.h b/src/share/native/sun/font/layout/IndicLayoutEngine.h
---- jdk/src/share/native/sun/font/layout/IndicLayoutEngine.h
-+++ jdk/src/share/native/sun/font/layout/IndicLayoutEngine.h
-@@ -26,7 +26,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2009 - All Rights Reserved
- *
- */
-
-@@ -72,6 +72,7 @@
- * @param scriptCode - the script
- * @param langaugeCode - the language
- * @param gsubTable - the GSUB table
-+ * @param success - set to an error code if the operation fails
- *
- * @see LayoutEngine::layoutEngineFactory
- * @see OpenTypeLayoutEngine
-@@ -80,7 +81,7 @@
- * @internal
- */
- IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-- le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable);
-+ le_int32 typoFlags, le_bool version2, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success);
-
- /**
- * This constructor is used when the font requires a "canned" GSUB table which can't be known
-@@ -89,6 +90,7 @@
- * @param fontInstance - the font
- * @param scriptCode - the script
- * @param langaugeCode - the language
-+ * @param success - set to an error code if the operation fails
- *
- * @see OpenTypeLayoutEngine
- * @see ScriptAndLangaugeTags.h for script and language codes
-@@ -96,7 +98,7 @@
- * @internal
- */
- IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-- le_int32 typoFlags);
-+ le_int32 typoFlags, LEErrorCode &success);
-
- /**
- * The destructor, virtual for correct polymorphic invocation.
-@@ -177,9 +179,12 @@
- virtual le_int32 glyphProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
- LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-+ le_bool fVersion2;
-+
- private:
-
- MPreFixups *fMPreFixups;
-+
- };
-
- U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/IndicReordering.cpp b/src/share/native/sun/font/layout/IndicReordering.cpp
---- jdk/src/share/native/sun/font/layout/IndicReordering.cpp
-+++ jdk/src/share/native/sun/font/layout/IndicReordering.cpp
-@@ -25,7 +25,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2009 - All Rights Reserved
- *
- */
-
-@@ -38,10 +38,12 @@
-
- U_NAMESPACE_BEGIN
-
-+#define loclFeatureTag LE_LOCL_FEATURE_TAG
- #define initFeatureTag LE_INIT_FEATURE_TAG
- #define nuktFeatureTag LE_NUKT_FEATURE_TAG
- #define akhnFeatureTag LE_AKHN_FEATURE_TAG
- #define rphfFeatureTag LE_RPHF_FEATURE_TAG
-+#define rkrfFeatureTag LE_RKRF_FEATURE_TAG
- #define blwfFeatureTag LE_BLWF_FEATURE_TAG
- #define halfFeatureTag LE_HALF_FEATURE_TAG
- #define pstfFeatureTag LE_PSTF_FEATURE_TAG
-@@ -51,30 +53,69 @@
- #define abvsFeatureTag LE_ABVS_FEATURE_TAG
- #define pstsFeatureTag LE_PSTS_FEATURE_TAG
- #define halnFeatureTag LE_HALN_FEATURE_TAG
--
-+#define cjctFeatureTag LE_CJCT_FEATURE_TAG
- #define blwmFeatureTag LE_BLWM_FEATURE_TAG
- #define abvmFeatureTag LE_ABVM_FEATURE_TAG
- #define distFeatureTag LE_DIST_FEATURE_TAG
-+#define caltFeatureTag LE_CALT_FEATURE_TAG
-+#define kernFeatureTag LE_KERN_FEATURE_TAG
-
--#define rphfFeatureMask 0x80000000UL
--#define blwfFeatureMask 0x40000000UL
--#define halfFeatureMask 0x20000000UL
--#define pstfFeatureMask 0x10000000UL
--#define nuktFeatureMask 0x08000000UL
--#define akhnFeatureMask 0x04000000UL
--#define vatuFeatureMask 0x02000000UL
--#define presFeatureMask 0x01000000UL
--#define blwsFeatureMask 0x00800000UL
--#define abvsFeatureMask 0x00400000UL
--#define pstsFeatureMask 0x00200000UL
--#define halnFeatureMask 0x00100000UL
--#define blwmFeatureMask 0x00080000UL
--#define abvmFeatureMask 0x00040000UL
--#define distFeatureMask 0x00020000UL
--#define initFeatureMask 0x00010000UL
-+#define loclFeatureMask 0x80000000UL
-+#define rphfFeatureMask 0x40000000UL
-+#define blwfFeatureMask 0x20000000UL
-+#define halfFeatureMask 0x10000000UL
-+#define pstfFeatureMask 0x08000000UL
-+#define nuktFeatureMask 0x04000000UL
-+#define akhnFeatureMask 0x02000000UL
-+#define vatuFeatureMask 0x01000000UL
-+#define presFeatureMask 0x00800000UL
-+#define blwsFeatureMask 0x00400000UL
-+#define abvsFeatureMask 0x00200000UL
-+#define pstsFeatureMask 0x00100000UL
-+#define halnFeatureMask 0x00080000UL
-+#define blwmFeatureMask 0x00040000UL
-+#define abvmFeatureMask 0x00020000UL
-+#define distFeatureMask 0x00010000UL
-+#define initFeatureMask 0x00008000UL
-+#define cjctFeatureMask 0x00004000UL
-+#define rkrfFeatureMask 0x00002000UL
-+#define caltFeatureMask 0x00001000UL
-+#define kernFeatureMask 0x00000800UL
-
--class ReorderingOutput : public UMemory {
-+// Syllable structure bits
-+#define baseConsonantMask 0x00000400UL
-+#define consonantMask 0x00000200UL
-+#define halfConsonantMask 0x00000100UL
-+#define rephConsonantMask 0x00000080UL
-+#define matraMask 0x00000040UL
-+#define vowelModifierMask 0x00000020UL
-+#define markPositionMask 0x00000018UL
-+
-+#define postBasePosition 0x00000000UL
-+#define preBasePosition 0x00000008UL
-+#define aboveBasePosition 0x00000010UL
-+#define belowBasePosition 0x00000018UL
-+
-+#define repositionedGlyphMask 0x00000002UL
-+
-+#define basicShapingFormsMask ( loclFeatureMask | nuktFeatureMask | akhnFeatureMask | rkrfFeatureMask | blwfFeatureMask | halfFeatureMask | vatuFeatureMask | cjctFeatureMask )
-+#define positioningFormsMask ( kernFeatureMask | distFeatureMask | abvmFeatureMask | blwmFeatureMask )
-+#define presentationFormsMask ( presFeatureMask | abvsFeatureMask | blwsFeatureMask | pstsFeatureMask | halnFeatureMask | caltFeatureMask )
-+
-+
-+#define C_MALAYALAM_VOWEL_SIGN_U 0x0D41
-+#define C_DOTTED_CIRCLE 0x25CC
-+#define NO_GLYPH 0xFFFF
-+
-+// Some level of debate as to the proper value for MAX_CONSONANTS_PER_SYLLABLE. Ticket 5588 states that 4
-+// is the magic number according to ISCII, but 5 seems to be the more consistent with XP.
-+#define MAX_CONSONANTS_PER_SYLLABLE 5
-+
-+#define INDIC_BLOCK_SIZE 0x7F
-+
-+class IndicReorderingOutput : public UMemory {
- private:
-+ le_int32 fSyllableCount;
- le_int32 fOutIndex;
- LEUnicode *fOutChars;
-
-@@ -95,8 +136,8 @@
- LEUnicode fLengthMark;
- le_int32 fLengthMarkIndex;
-
-- LEUnicode fVirama;
-- le_int32 fViramaIndex;
-+ LEUnicode fAlLakuna;
-+ le_int32 fAlLakunaIndex;
-
- FeatureMask fMatraFeatures;
-
-@@ -113,15 +154,20 @@
- le_int32 fSMIndex;
- FeatureMask fSMFeatures;
-
-+ LEUnicode fPreBaseConsonant;
-+ LEUnicode fPreBaseVirama;
-+ le_int32 fPBCIndex;
-+ FeatureMask fPBCFeatures;
-+
- void saveMatra(LEUnicode matra, le_int32 matraIndex, IndicClassTable::CharClass matraClass)
- {
- // FIXME: check if already set, or if not a matra...
- if (IndicClassTable::isLengthMark(matraClass)) {
- fLengthMark = matra;
- fLengthMarkIndex = matraIndex;
-- } else if (IndicClassTable::isVirama(matraClass)) {
-- fVirama = matra;
-- fViramaIndex = matraIndex;
-+ } else if (IndicClassTable::isAlLakuna(matraClass)) {
-+ fAlLakuna = matra;
-+ fAlLakunaIndex = matraIndex;
- } else {
- switch (matraClass & CF_POS_MASK) {
- case CF_POS_BEFORE:
-@@ -152,29 +198,34 @@
- }
-
- public:
-- ReorderingOutput(LEUnicode *outChars, LEGlyphStorage &glyphStorage, MPreFixups *mpreFixups)
-- : fOutIndex(0), fOutChars(outChars), fGlyphStorage(glyphStorage),
-+ IndicReorderingOutput(LEUnicode *outChars, LEGlyphStorage &glyphStorage, MPreFixups *mpreFixups)
-+ : fSyllableCount(0), fOutIndex(0), fOutChars(outChars), fGlyphStorage(glyphStorage),
- fMpre(0), fMpreIndex(0), fMbelow(0), fMbelowIndex(0), fMabove(0), fMaboveIndex(0),
-- fMpost(0), fMpostIndex(0), fLengthMark(0), fLengthMarkIndex(0), fVirama(0), fViramaIndex(0),
-+ fMpost(0), fMpostIndex(0), fLengthMark(0), fLengthMarkIndex(0), fAlLakuna(0), fAlLakunaIndex(0),
- fMatraFeatures(0), fMPreOutIndex(-1), fMPreFixups(mpreFixups),
- fVMabove(0), fVMpost(0), fVMIndex(0), fVMFeatures(0),
-- fSMabove(0), fSMbelow(0), fSMIndex(0), fSMFeatures(0)
-+ fSMabove(0), fSMbelow(0), fSMIndex(0), fSMFeatures(0),
-+ fPreBaseConsonant(0), fPreBaseVirama(0), fPBCIndex(0), fPBCFeatures(0)
- {
- // nothing else to do...
- }
-
-- ~ReorderingOutput()
-+ ~IndicReorderingOutput()
- {
- // nothing to do here...
- }
-
- void reset()
- {
-- fMpre = fMbelow = fMabove = fMpost = fLengthMark = fVirama = 0;
-+ fSyllableCount += 1;
-+
-+ fMpre = fMbelow = fMabove = fMpost = fLengthMark = fAlLakuna = 0;
- fMPreOutIndex = -1;
-
- fVMabove = fVMpost = 0;
- fSMabove = fSMbelow = 0;
-+
-+ fPreBaseConsonant = fPreBaseVirama = 0;
- }
-
- void writeChar(LEUnicode ch, le_uint32 charIndex, FeatureMask charFeatures)
-@@ -184,11 +235,113 @@
- fOutChars[fOutIndex] = ch;
-
- fGlyphStorage.setCharIndex(fOutIndex, charIndex, success);
-- fGlyphStorage.setAuxData(fOutIndex, charFeatures, success);
-+ fGlyphStorage.setAuxData(fOutIndex, charFeatures | (fSyllableCount & LE_GLYPH_GROUP_MASK), success);
-
- fOutIndex += 1;
- }
-
-+ void setFeatures ( le_uint32 charIndex, FeatureMask charFeatures)
-+ {
-+ LEErrorCode success = LE_NO_ERROR;
-+
-+ fGlyphStorage.setAuxData( charIndex, charFeatures, success );
-+
-+ }
-+
-+ FeatureMask getFeatures ( le_uint32 charIndex )
-+ {
-+ LEErrorCode success = LE_NO_ERROR;
-+ return fGlyphStorage.getAuxData(charIndex,success);
-+ }
-+
-+ void decomposeReorderMatras ( const IndicClassTable *classTable, le_int32 beginSyllable, le_int32 nextSyllable, le_int32 inv_count ) {
-+ le_int32 i;
-+ LEErrorCode success = LE_NO_ERROR;
-+
-+ for ( i = beginSyllable ; i < nextSyllable ; i++ ) {
-+ if ( classTable->isMatra(fOutChars[i+inv_count])) {
-+ IndicClassTable::CharClass matraClass = classTable->getCharClass(fOutChars[i+inv_count]);
-+ if ( classTable->isSplitMatra(matraClass)) {
-+ le_int32 saveIndex = fGlyphStorage.getCharIndex(i+inv_count,success);
-+ le_uint32 saveAuxData = fGlyphStorage.getAuxData(i+inv_count,success);
-+ const SplitMatra *splitMatra = classTable->getSplitMatra(matraClass);
-+ int j;
-+ for (j = 0 ; *(splitMatra)[j] != 0 ; j++) {
-+ LEUnicode piece = (*splitMatra)[j];
-+ if ( j == 0 ) {
-+ fOutChars[i+inv_count] = piece;
-+ matraClass = classTable->getCharClass(piece);
-+ } else {
-+ insertCharacter(piece,i+1+inv_count,saveIndex,saveAuxData);
-+ nextSyllable++;
-+ }
-+ }
-+ }
-+
-+ if ((matraClass & CF_POS_MASK) == CF_POS_BEFORE) {
-+ moveCharacter(i+inv_count,beginSyllable+inv_count);
-+ }
-+ }
-+ }
-+ }
-+
-+ void moveCharacter( le_int32 fromPosition, le_int32 toPosition ) {
-+ le_int32 i,saveIndex;
-+ le_uint32 saveAuxData;
-+ LEUnicode saveChar = fOutChars[fromPosition];
-+ LEErrorCode success = LE_NO_ERROR;
-+ LEErrorCode success2 = LE_NO_ERROR;
-+ saveIndex = fGlyphStorage.getCharIndex(fromPosition,success);
-+ saveAuxData = fGlyphStorage.getAuxData(fromPosition,success);
-+
-+ if ( fromPosition > toPosition ) {
-+ for ( i = fromPosition ; i > toPosition ; i-- ) {
-+ fOutChars[i] = fOutChars[i-1];
-+ fGlyphStorage.setCharIndex(i,fGlyphStorage.getCharIndex(i-1,success2),success);
-+ fGlyphStorage.setAuxData(i,fGlyphStorage.getAuxData(i-1,success2), success);
-+
-+ }
-+ } else {
-+ for ( i = fromPosition ; i < toPosition ; i++ ) {
-+ fOutChars[i] = fOutChars[i+1];
-+ fGlyphStorage.setCharIndex(i,fGlyphStorage.getCharIndex(i+1,success2),success);
-+ fGlyphStorage.setAuxData(i,fGlyphStorage.getAuxData(i+1,success2), success);
-+ }
-+
-+ }
-+ fOutChars[toPosition] = saveChar;
-+ fGlyphStorage.setCharIndex(toPosition,saveIndex,success);
-+ fGlyphStorage.setAuxData(toPosition,saveAuxData,success);
-+
-+ }
-+ void insertCharacter( LEUnicode ch, le_int32 toPosition, le_int32 charIndex, le_uint32 auxData ) {
-+ LEErrorCode success = LE_NO_ERROR;
-+ le_int32 i;
-+ fOutIndex += 1;
-+
-+ for ( i = fOutIndex ; i > toPosition ; i--) {
-+ fOutChars[i] = fOutChars[i-1];
-+ fGlyphStorage.setCharIndex(i,fGlyphStorage.getCharIndex(i-1,success),success);
-+ fGlyphStorage.setAuxData(i,fGlyphStorage.getAuxData(i-1,success), success);
-+ }
-+
-+ fOutChars[toPosition] = ch;
-+ fGlyphStorage.setCharIndex(toPosition,charIndex,success);
-+ fGlyphStorage.setAuxData(toPosition,auxData,success);
-+
-+ }
-+ void removeCharacter( le_int32 fromPosition ) {
-+ LEErrorCode success = LE_NO_ERROR;
-+ le_int32 i;
-+ fOutIndex -= 1;
-+
-+ for ( i = fromPosition ; i < fOutIndex ; i--) {
-+ fOutChars[i] = fOutChars[i+1];
-+ fGlyphStorage.setCharIndex(i,fGlyphStorage.getCharIndex(i+1,success),success);
-+ fGlyphStorage.setAuxData(i,fGlyphStorage.getAuxData(i+1,success), success);
-+ }
-+ }
-+
- le_bool noteMatra(const IndicClassTable *classTable, LEUnicode matra, le_uint32 matraIndex, FeatureMask matraFeatures, le_bool wordStart)
- {
- IndicClassTable::CharClass matraClass = classTable->getCharClass(matra);
-@@ -268,6 +421,14 @@
- }
- }
-
-+ void notePreBaseConsonant(le_uint32 index,LEUnicode PBConsonant, LEUnicode PBVirama, FeatureMask features)
-+ {
-+ fPBCIndex = index;
-+ fPreBaseConsonant = PBConsonant;
-+ fPreBaseVirama = PBVirama;
-+ fPBCFeatures = features;
-+ }
-+
- void noteBaseConsonant()
- {
- if (fMPreFixups != NULL && fMPreOutIndex >= 0) {
-@@ -275,11 +436,11 @@
- }
- }
-
-- // Handles virama in Sinhala split vowels.
-- void writeVirama()
-+ // Handles Al-Lakuna in Sinhala split vowels.
-+ void writeAlLakuna()
- {
-- if (fVirama != 0) {
-- writeChar(fVirama, fViramaIndex, fMatraFeatures);
-+ if (fAlLakuna != 0) {
-+ writeChar(fAlLakuna, fAlLakunaIndex, fMatraFeatures);
- }
- }
-
-@@ -347,26 +508,39 @@
- }
- }
-
-+ void writePreBaseConsonant()
-+ {
-+ // The TDIL spec says that consonant + virama + RRA should produce a rakar in Malayalam. However,
-+ // it seems that almost none of the fonts for Malayalam are set up to handle this.
-+ // So, we're going to force the issue here by using the rakar as defined with RA in most fonts.
-+
-+ if (fPreBaseConsonant == 0x0d31) { // RRA
-+ fPreBaseConsonant = 0x0d30; // RA
-+ }
-+
-+ if (fPreBaseConsonant != 0) {
-+ writeChar(fPreBaseConsonant, fPBCIndex, fPBCFeatures);
-+ writeChar(fPreBaseVirama,fPBCIndex-1,fPBCFeatures);
-+ }
-+ }
-+
- le_int32 getOutputIndex()
- {
- return fOutIndex;
- }
- };
-
--enum
--{
-- C_DOTTED_CIRCLE = 0x25CC
--};
-+
-
- // TODO: Find better names for these!
--#define tagArray4 (nuktFeatureMask | akhnFeatureMask | vatuFeatureMask | presFeatureMask | blwsFeatureMask | abvsFeatureMask | pstsFeatureMask | halnFeatureMask | blwmFeatureMask | abvmFeatureMask | distFeatureMask)
-+#define tagArray4 (loclFeatureMask | nuktFeatureMask | akhnFeatureMask | vatuFeatureMask | presFeatureMask | blwsFeatureMask | abvsFeatureMask | pstsFeatureMask | halnFeatureMask | blwmFeatureMask | abvmFeatureMask | distFeatureMask)
- #define tagArray3 (pstfFeatureMask | tagArray4)
- #define tagArray2 (halfFeatureMask | tagArray3)
- #define tagArray1 (blwfFeatureMask | tagArray2)
- #define tagArray0 (rphfFeatureMask | tagArray1)
-
--static const FeatureMap featureMap[] =
--{
-+static const FeatureMap featureMap[] = {
-+ {loclFeatureTag, loclFeatureMask},
- {initFeatureTag, initFeatureMask},
- {nuktFeatureTag, nuktFeatureMask},
- {akhnFeatureTag, akhnFeatureMask},
-@@ -387,21 +561,47 @@
-
- static const le_int32 featureCount = LE_ARRAY_SIZE(featureMap);
-
-+static const FeatureMap v2FeatureMap[] = {
-+ {loclFeatureTag, loclFeatureMask},
-+ {nuktFeatureTag, nuktFeatureMask},
-+ {akhnFeatureTag, akhnFeatureMask},
-+ {rphfFeatureTag, rphfFeatureMask},
-+ {rkrfFeatureTag, rkrfFeatureMask},
-+ {blwfFeatureTag, blwfFeatureMask},
-+ {halfFeatureTag, halfFeatureMask},
-+ {vatuFeatureTag, vatuFeatureMask},
-+ {cjctFeatureTag, cjctFeatureMask},
-+ {presFeatureTag, presFeatureMask},
-+ {abvsFeatureTag, abvsFeatureMask},
-+ {blwsFeatureTag, blwsFeatureMask},
-+ {pstsFeatureTag, pstsFeatureMask},
-+ {halnFeatureTag, halnFeatureMask},
-+ {caltFeatureTag, caltFeatureMask},
-+ {kernFeatureTag, kernFeatureMask},
-+ {distFeatureTag, distFeatureMask},
-+ {abvmFeatureTag, abvmFeatureMask},
-+ {blwmFeatureTag, blwmFeatureMask}
-+};
-+
-+static const le_int32 v2FeatureMapCount = LE_ARRAY_SIZE(v2FeatureMap);
-+
- static const le_int8 stateTable[][CC_COUNT] =
- {
--// xx vm sm iv i2 i3 ct cn nu dv s1 s2 s3 vr zw
-- { 1, 1, 1, 5, 8, 11, 3, 2, 1, 5, 9, 5, 1, 1, 1}, // 0 - ground state
-- {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 1 - exit state
-- {-1, 6, 1, -1, -1, -1, -1, -1, -1, 5, 9, 5, 5, 4, -1}, // 2 - consonant with nukta
-- {-1, 6, 1, -1, -1, -1, -1, -1, 2, 5, 9, 5, 5, 4, -1}, // 3 - consonant
-- {-1, -1, -1, -1, -1, -1, 3, 2, -1, -1, -1, -1, -1, -1, 7}, // 4 - consonant virama
-- {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 5 - dependent vowels
-- {-1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 6 - vowel mark
-- {-1, -1, -1, -1, -1, -1, 3, 2, -1, -1, -1, -1, -1, -1, -1}, // 7 - ZWJ, ZWNJ
-- {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, -1}, // 8 - independent vowels that can take a virama
-- {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, 10, 5, -1, -1}, // 9 - first part of split vowel
-- {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, -1}, // 10 - second part of split vowel
-- {-1, 6, 1, -1, -1, -1, -1, -1, -1, 5, 9, 5, 5, 4, -1} // 11 - independent vowels that can take an iv
-+// xx vm sm iv i2 i3 ct cn nu dv s1 s2 s3 vr zw al
-+ { 1, 6, 1, 5, 8, 11, 3, 2, 1, 5, 9, 5, 5, 1, 1, 1}, // 0 - ground state
-+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 1 - exit state
-+ {-1, 6, 1, -1, -1, -1, -1, -1, -1, 5, 9, 5, 5, 4, 12, -1}, // 2 - consonant with nukta
-+ {-1, 6, 1, -1, -1, -1, -1, -1, 2, 5, 9, 5, 5, 4, 12, 13}, // 3 - consonant
-+ {-1, -1, -1, -1, -1, -1, 3, 2, -1, -1, -1, -1, -1, -1, 7, -1}, // 4 - consonant virama
-+ {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 5 - dependent vowels
-+ {-1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 6 - vowel mark
-+ {-1, -1, -1, -1, -1, -1, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1}, // 7 - consonant virama ZWJ, consonant ZWJ virama
-+ {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, -1, -1}, // 8 - independent vowels that can take a virama
-+ {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, 10, 5, -1, -1, -1}, // 9 - first part of split vowel
-+ {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, -1, -1}, // 10 - second part of split vowel
-+ {-1, 6, 1, -1, -1, -1, -1, -1, -1, 5, 9, 5, 5, 4, -1, -1}, // 11 - independent vowels that can take an iv
-+ {-1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, -1, 7}, // 12 - consonant ZWJ (TODO: Take everything else that can be after a consonant?)
-+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, -1} // 13 - consonant al-lakuna ZWJ consonant
- };
-
-
-@@ -412,14 +612,29 @@
- return featureMap;
- }
-
-+const FeatureMap *IndicReordering::getv2FeatureMap(le_int32 &count)
-+{
-+ count = v2FeatureMapCount;
-+
-+ return v2FeatureMap;
-+}
-+
- le_int32 IndicReordering::findSyllable(const IndicClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount)
- {
- le_int32 cursor = prev;
- le_int8 state = 0;
-+ le_int8 consonant_count = 0;
-
- while (cursor < charCount) {
- IndicClassTable::CharClass charClass = classTable->getCharClass(chars[cursor]);
-
-+ if ( IndicClassTable::isConsonant(charClass) ) {
-+ consonant_count++;
-+ if ( consonant_count > MAX_CONSONANTS_PER_SYLLABLE ) {
-+ break;
-+ }
-+ }
-+
- state = stateTable[state][charClass & CF_CLASS_MASK];
-
- if (state < 0) {
-@@ -434,16 +649,24 @@
-
- le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le_int32 scriptCode,
- LEUnicode *outChars, LEGlyphStorage &glyphStorage,
-- MPreFixups **outMPreFixups)
-+ MPreFixups **outMPreFixups, LEErrorCode& success)
- {
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-+
- MPreFixups *mpreFixups = NULL;
- const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(scriptCode);
-
- if (classTable->scriptFlags & SF_MPRE_FIXUP) {
- mpreFixups = new MPreFixups(charCount);
-+ if (mpreFixups == NULL) {
-+ success = LE_MEMORY_ALLOCATION_ERROR;
-+ return 0;
-+ }
- }
-
-- ReorderingOutput output(outChars, glyphStorage, mpreFixups);
-+ IndicReorderingOutput output(outChars, glyphStorage, mpreFixups);
- le_int32 i, prev = 0;
- le_bool lastInWord = FALSE;
-
-@@ -458,7 +681,7 @@
- output.noteStressMark(classTable, chars[markStart], markStart, tagArray1);
- }
-
-- if (classTable->isVowelModifier(chars[markStart - 1])) {
-+ if (markStart != prev && classTable->isVowelModifier(chars[markStart - 1])) {
- markStart -= 1;
- output.noteVowelModifier(classTable, chars[markStart], markStart, tagArray1);
- }
-@@ -484,9 +707,20 @@
-
- break;
-
-+ case CC_AL_LAKUNA:
- case CC_NUKTA:
-+ output.writeChar(C_DOTTED_CIRCLE, prev, tagArray1);
-+ output.writeChar(chars[prev], prev, tagArray1);
-+ break;
-+
- case CC_VIRAMA:
-+ // A lone virama is illegal unless it follows a
-+ // MALAYALAM_VOWEL_SIGN_U. Such a usage is called
-+ // "samvruthokaram".
-+ if (chars[prev - 1] != C_MALAYALAM_VOWEL_SIGN_U) {
- output.writeChar(C_DOTTED_CIRCLE, prev, tagArray1);
-+ }
-+
- output.writeChar(chars[prev], prev, tagArray1);
- break;
-
-@@ -518,7 +752,7 @@
- }
-
- output.writeLengthMark();
-- output.writeVirama();
-+ output.writeAlLakuna();
-
- if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) == 0) {
- output.writeVMabove();
-@@ -538,7 +772,7 @@
- le_int32 baseLimit = prev;
-
- // Check for REPH at front of syllable
-- if (length > 2 && classTable->isReph(chars[prev]) && classTable->isVirama(chars[prev + 1])) {
-+ if (length > 2 && classTable->isReph(chars[prev]) && classTable->isVirama(chars[prev + 1]) && chars[prev + 2] != C_SIGN_ZWNJ) {
- baseLimit += 2;
-
- // Check for eyelash RA, if the script supports it
-@@ -556,35 +790,59 @@
- lastConsonant -= 1;
- }
-
-+
-+ IndicClassTable::CharClass charClass = CC_RESERVED;
-+ IndicClassTable::CharClass nextClass = CC_RESERVED;
- le_int32 baseConsonant = lastConsonant;
- le_int32 postBase = lastConsonant + 1;
- le_int32 postBaseLimit = classTable->scriptFlags & SF_POST_BASE_LIMIT_MASK;
- le_bool seenVattu = FALSE;
- le_bool seenBelowBaseForm = FALSE;
-+ le_bool seenPreBaseForm = FALSE;
-+ le_bool hasNukta = FALSE;
-+ le_bool hasBelowBaseForm = FALSE;
-+ le_bool hasPostBaseForm = FALSE;
-+ le_bool hasPreBaseForm = FALSE;
-
- if (postBase < markStart && classTable->isNukta(chars[postBase])) {
-+ charClass = CC_NUKTA;
- postBase += 1;
- }
-
- while (baseConsonant > baseLimit) {
-- IndicClassTable::CharClass charClass = classTable->getCharClass(chars[baseConsonant]);
-+ nextClass = charClass;
-+ hasNukta = IndicClassTable::isNukta(nextClass);
-+ charClass = classTable->getCharClass(chars[baseConsonant]);
-+
-+ hasBelowBaseForm = IndicClassTable::hasBelowBaseForm(charClass) && !hasNukta;
-+ hasPostBaseForm = IndicClassTable::hasPostBaseForm(charClass) && !hasNukta;
-+ hasPreBaseForm = IndicClassTable::hasPreBaseForm(charClass) && !hasNukta;
-
- if (IndicClassTable::isConsonant(charClass)) {
- if (postBaseLimit == 0 || seenVattu ||
- (baseConsonant > baseLimit && !classTable->isVirama(chars[baseConsonant - 1])) ||
-- !IndicClassTable::hasPostOrBelowBaseForm(charClass)) {
-+ !(hasBelowBaseForm || hasPostBaseForm || hasPreBaseForm)) {
- break;
- }
-
-- seenVattu = IndicClassTable::isVattu(charClass);
-+ // Note any pre-base consonants
-+ if ( baseConsonant == lastConsonant && lastConsonant > 0 &&
-+ hasPreBaseForm && classTable->isVirama(chars[baseConsonant - 1])) {
-+ output.notePreBaseConsonant(lastConsonant,chars[lastConsonant],chars[lastConsonant-1],tagArray2);
-+ seenPreBaseForm = TRUE;
-
-- if (IndicClassTable::hasPostBaseForm(charClass)) {
-+ }
-+ // consonants with nuktas are never vattus
-+ seenVattu = IndicClassTable::isVattu(charClass) && !hasNukta;
-+
-+ // consonants with nuktas never have below- or post-base forms
-+ if (hasPostBaseForm) {
- if (seenBelowBaseForm) {
- break;
- }
-
- postBase = baseConsonant;
-- } else if (IndicClassTable::hasBelowBaseForm(charClass)) {
-+ } else if (hasBelowBaseForm) {
- seenBelowBaseForm = TRUE;
- }
-
-@@ -606,20 +864,25 @@
- }
-
- // write any pre-base consonants
-+ output.writePreBaseConsonant();
-+
- le_bool supressVattu = TRUE;
-
- for (i = baseLimit; i < baseConsonant; i += 1) {
- LEUnicode ch = chars[i];
-- // Don't put 'blwf' on first consonant.
-- FeatureMask features = (i == baseLimit? tagArray2 : tagArray1);
-- IndicClassTable::CharClass charClass = classTable->getCharClass(ch);
-+ // Don't put 'pstf' or 'blwf' on anything before the base consonant.
-+ FeatureMask features = tagArray1 & ~( pstfFeatureMask | blwfFeatureMask );
-+
-+ charClass = classTable->getCharClass(ch);
-+ nextClass = classTable->getCharClass(chars[i + 1]);
-+ hasNukta = IndicClassTable::isNukta(nextClass);
-
- if (IndicClassTable::isConsonant(charClass)) {
-- if (IndicClassTable::isVattu(charClass) && supressVattu) {
-+ if (IndicClassTable::isVattu(charClass) && !hasNukta && supressVattu) {
- features = tagArray4;
- }
-
-- supressVattu = IndicClassTable::isVattu(charClass);
-+ supressVattu = IndicClassTable::isVattu(charClass) && !hasNukta;
- } else if (IndicClassTable::isVirama(charClass) && chars[i + 1] == C_SIGN_ZWNJ)
- {
- features = tagArray4;
-@@ -634,7 +897,8 @@
- bcSpan += 1;
- }
-
-- if (baseConsonant == lastConsonant && bcSpan < markStart && classTable->isVirama(chars[bcSpan])) {
-+ if (baseConsonant == lastConsonant && bcSpan < markStart &&
-+ (classTable->isVirama(chars[bcSpan]) || classTable->isAlLakuna(chars[bcSpan]))) {
- bcSpan += 1;
-
- if (bcSpan < markStart && chars[bcSpan] == C_SIGN_ZWNJ) {
-@@ -658,7 +922,7 @@
- }
-
- // write below-base consonants
-- if (baseConsonant != lastConsonant) {
-+ if (baseConsonant != lastConsonant && !seenPreBaseForm) {
- for (i = bcSpan + 1; i < postBase; i += 1) {
- output.writeChar(chars[i], i, tagArray1);
- }
-@@ -688,7 +952,7 @@
-
- // write post-base consonants
- // FIXME: does this put the right tags on post-base consonants?
-- if (baseConsonant != lastConsonant) {
-+ if (baseConsonant != lastConsonant && !seenPreBaseForm) {
- if (postBase <= lastConsonant) {
- for (i = postBase; i <= lastConsonant; i += 1) {
- output.writeChar(chars[i], i, tagArray3);
-@@ -710,7 +974,7 @@
- }
-
- output.writeLengthMark();
-- output.writeVirama();
-+ output.writeAlLakuna();
-
- // write reph
- if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) == 0) {
-@@ -740,13 +1004,250 @@
- return output.getOutputIndex();
- }
-
--void IndicReordering::adjustMPres(MPreFixups *mpreFixups, LEGlyphStorage &glyphStorage)
-+void IndicReordering::adjustMPres(MPreFixups *mpreFixups, LEGlyphStorage &glyphStorage, LEErrorCode& success)
- {
- if (mpreFixups != NULL) {
-- mpreFixups->apply(glyphStorage);
-+ mpreFixups->apply(glyphStorage, success);
-
- delete mpreFixups;
- }
- }
-
-+void IndicReordering::applyPresentationForms(LEGlyphStorage &glyphStorage, le_int32 count)
-+{
-+ LEErrorCode success = LE_NO_ERROR;
-+
-+// This sets us up for 2nd pass of glyph substitution as well as setting the feature masks for the
-+// GPOS table lookups
-+
-+ for ( le_int32 i = 0 ; i < count ; i++ ) {
-+ glyphStorage.setAuxData(i, ( presentationFormsMask | positioningFormsMask ), success);
-+ }
-+
-+}
-+void IndicReordering::finalReordering(LEGlyphStorage &glyphStorage, le_int32 count)
-+{
-+ LEErrorCode success = LE_NO_ERROR;
-+
-+ // Reposition REPH as appropriate
-+
-+ for ( le_int32 i = 0 ; i < count ; i++ ) {
-+
-+ le_int32 tmpAuxData = glyphStorage.getAuxData(i,success);
-+ LEGlyphID tmpGlyph = glyphStorage.getGlyphID(i,success);
-+
-+ if ( ( tmpGlyph != NO_GLYPH ) && (tmpAuxData & rephConsonantMask) && !(tmpAuxData & repositionedGlyphMask)) {
-+
-+ le_bool targetPositionFound = false;
-+ le_int32 targetPosition = i+1;
-+ le_int32 baseConsonantData;
-+
-+ while (!targetPositionFound) {
-+ tmpGlyph = glyphStorage.getGlyphID(targetPosition,success);
-+ tmpAuxData = glyphStorage.getAuxData(targetPosition,success);
-+
-+ if ( tmpAuxData & baseConsonantMask ) {
-+ baseConsonantData = tmpAuxData;
-+ targetPositionFound = true;
-+ } else {
-+ targetPosition++;
-+ }
-+ }
-+
-+ // Make sure we are not putting the reph into an empty hole
-+
-+ le_bool targetPositionHasGlyph = false;
-+ while (!targetPositionHasGlyph) {
-+ tmpGlyph = glyphStorage.getGlyphID(targetPosition,success);
-+ if ( tmpGlyph != NO_GLYPH ) {
-+ targetPositionHasGlyph = true;
-+ } else {
-+ targetPosition--;
-+ }
-+ }
-+
-+ // Make sure that REPH is positioned after any above base or post base matras
-+ //
-+ le_bool checkMatraDone = false;
-+ le_int32 checkMatraPosition = targetPosition+1;
-+ while ( !checkMatraDone ) {
-+ tmpAuxData = glyphStorage.getAuxData(checkMatraPosition,success);
-+ if ( checkMatraPosition >= count || ( (tmpAuxData ^ baseConsonantData) & LE_GLYPH_GROUP_MASK)) {
-+ checkMatraDone = true;
-+ continue;
-+ }
-+ if ( (tmpAuxData & matraMask) &&
-+ (((tmpAuxData & markPositionMask) == aboveBasePosition) ||
-+ ((tmpAuxData & markPositionMask) == postBasePosition))) {
-+ targetPosition = checkMatraPosition;
-+ }
-+ checkMatraPosition++;
-+ }
-+
-+ glyphStorage.moveGlyph(i,targetPosition,repositionedGlyphMask);
-+ }
-+ }
-+}
-+
-+
-+le_int32 IndicReordering::v2process(const LEUnicode *chars, le_int32 charCount, le_int32 scriptCode,
-+ LEUnicode *outChars, LEGlyphStorage &glyphStorage)
-+{
-+ const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(scriptCode);
-+
-+ DynamicProperties dynProps[INDIC_BLOCK_SIZE];
-+ IndicReordering::getDynamicProperties(dynProps,classTable);
-+
-+ IndicReorderingOutput output(outChars, glyphStorage, NULL);
-+ le_int32 i, firstConsonant, baseConsonant, secondConsonant, inv_count = 0, beginSyllable = 0;
-+ //le_bool lastInWord = FALSE;
-+
-+ while (beginSyllable < charCount) {
-+ le_int32 nextSyllable = findSyllable(classTable, chars, beginSyllable, charCount);
-+
-+ output.reset();
-+
-+ // Find the First Consonant
-+ for ( firstConsonant = beginSyllable ; firstConsonant < nextSyllable ; firstConsonant++ ) {
-+ if ( classTable->isConsonant(chars[firstConsonant]) ) {
-+ break;
-+ }
-+ }
-+
-+ // Find the base consonant
-+
-+ baseConsonant = nextSyllable - 1;
-+ secondConsonant = firstConsonant;
-+
-+ // TODO: Use Dynamic Properties for hasBelowBaseForm and hasPostBaseForm()
-+
-+ while ( baseConsonant > firstConsonant ) {
-+ if ( classTable->isConsonant(chars[baseConsonant]) &&
-+ !classTable->hasBelowBaseForm(chars[baseConsonant]) &&
-+ !classTable->hasPostBaseForm(chars[baseConsonant]) ) {
-+ break;
-+ }
-+ else {
-+ if ( classTable->isConsonant(chars[baseConsonant]) ) {
-+ secondConsonant = baseConsonant;
-+ }
-+ baseConsonant--;
-+ }
-+ }
-+
-+ // If the syllable starts with Ra + Halant ( in a script that has Reph ) and has more than one
-+ // consonant, Ra is excluced from candidates for base consonants
-+
-+ if ( classTable->isReph(chars[beginSyllable]) &&
-+ beginSyllable+1 < nextSyllable && classTable->isVirama(chars[beginSyllable+1]) &&
-+ secondConsonant != firstConsonant) {
-+ baseConsonant = secondConsonant;
-+ }
-+
-+ // Populate the output
-+ for ( i = beginSyllable ; i < nextSyllable ; i++ ) {
-+
-+ // Handle invalid combinartions
-+
-+ if ( classTable->isVirama(chars[beginSyllable]) ||
-+ classTable->isMatra(chars[beginSyllable]) ||
-+ classTable->isVowelModifier(chars[beginSyllable]) ||
-+ classTable->isNukta(chars[beginSyllable]) ) {
-+ output.writeChar(C_DOTTED_CIRCLE,beginSyllable,basicShapingFormsMask);
-+ inv_count++;
-+ }
-+ output.writeChar(chars[i],i, basicShapingFormsMask);
-+
-+ }
-+
-+ // Adjust features and set syllable structure bits
-+
-+ for ( i = beginSyllable ; i < nextSyllable ; i++ ) {
-+
-+ FeatureMask outMask = output.getFeatures(i+inv_count);
-+ FeatureMask saveMask = outMask;
-+
-+ // Since reph can only validly occur at the beginning of a syllable
-+ // We only apply it to the first 2 characters in the syllable, to keep it from
-+ // conflicting with other features ( i.e. rkrf )
-+
-+ // TODO : Use the dynamic property for determining isREPH
-+ if ( i == beginSyllable && i < baseConsonant && classTable->isReph(chars[i]) &&
-+ i+1 < nextSyllable && classTable->isVirama(chars[i+1])) {
-+ outMask |= rphfFeatureMask;
-+ outMask |= rephConsonantMask;
-+ output.setFeatures(i+1+inv_count,outMask);
-+
-+ }
-+
-+ if ( i == baseConsonant ) {
-+ outMask |= baseConsonantMask;
-+ }
-+
-+ if ( classTable->isMatra(chars[i])) {
-+ outMask |= matraMask;
-+ if ( classTable->hasAboveBaseForm(chars[i])) {
-+ outMask |= aboveBasePosition;
-+ } else if ( classTable->hasBelowBaseForm(chars[i])) {
-+ outMask |= belowBasePosition;
-+ }
-+ }
-+
-+ // Don't apply half form to virama that stands alone at the end of a syllable
-+ // to prevent half forms from forming when syllable ends with virama
-+
-+ if ( classTable->isVirama(chars[i]) && (i+1 == nextSyllable) ) {
-+ outMask ^= halfFeatureMask;
-+ if ( classTable->isConsonant(chars[i-1]) ) {
-+ FeatureMask tmp = output.getFeatures(i-1+inv_count);
-+ tmp ^= halfFeatureMask;
-+ output.setFeatures(i-1+inv_count,tmp);
-+ }
-+ }
-+
-+ if ( outMask != saveMask ) {
-+ output.setFeatures(i+inv_count,outMask);
-+ }
-+ }
-+
-+ output.decomposeReorderMatras(classTable,beginSyllable,nextSyllable,inv_count);
-+
-+ beginSyllable = nextSyllable;
-+ }
-+
-+
-+ return output.getOutputIndex();
-+}
-+
-+
-+void IndicReordering::getDynamicProperties( DynamicProperties *, const IndicClassTable *classTable ) {
-+
-+
-+ LEUnicode currentChar;
-+ LEUnicode virama;
-+ LEUnicode workChars[2];
-+ LEGlyphStorage workGlyphs;
-+
-+ IndicReorderingOutput workOutput(workChars, workGlyphs, NULL);
-+
-+ //le_int32 offset = 0;
-+
-+ // First find the relevant virama for the script we are dealing with
-+
-+ for ( currentChar = classTable->firstChar ; currentChar <= classTable->lastChar ; currentChar++ ) {
-+ if ( classTable->isVirama(currentChar)) {
-+ virama = currentChar;
-+ break;
-+ }
-+ }
-+
-+ for ( currentChar = classTable->firstChar ; currentChar <= classTable->lastChar ; currentChar++ ) {
-+ if ( classTable->isConsonant(currentChar)) {
-+ workOutput.reset();
-+ }
-+ }
-+
-+
-+}
-+
- U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/IndicReordering.h b/src/share/native/sun/font/layout/IndicReordering.h
---- jdk/src/share/native/sun/font/layout/IndicReordering.h
-+++ jdk/src/share/native/sun/font/layout/IndicReordering.h
-@@ -25,7 +25,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2009 - All Rights Reserved
- *
- */
-
-@@ -62,7 +62,8 @@
- #define CC_SPLIT_VOWEL_PIECE_3 12U
- #define CC_VIRAMA 13U
- #define CC_ZERO_WIDTH_MARK 14U
--#define CC_COUNT 15U
-+#define CC_AL_LAKUNA 15U
-+#define CC_COUNT 16U
-
- // Character class flags
- #define CF_CLASS_MASK 0x0000FFFFU
-@@ -74,6 +75,7 @@
- #define CF_BELOW_BASE 0x10000000U
- #define CF_POST_BASE 0x08000000U
- #define CF_LENGTH_MARK 0x04000000U
-+#define CF_PRE_BASE 0x02000000U
-
- #define CF_POS_BEFORE 0x00300000U
- #define CF_POS_BELOW 0x00200000U
-@@ -89,6 +91,7 @@
- #define SF_REPH_AFTER_BELOW 0x40000000U
- #define SF_EYELASH_RA 0x20000000U
- #define SF_MPRE_FIXUP 0x10000000U
-+#define SF_FILTER_ZERO_WIDTH 0x08000000U
-
- #define SF_POST_BASE_LIMIT_MASK 0x0000FFFFU
- #define SF_NO_POST_BASE_LIMIT 0x00007FFFU
-@@ -98,6 +101,15 @@
- class MPreFixups;
- class LEGlyphStorage;
-
-+// Dynamic Properties ( v2 fonts only )
-+typedef le_uint32 DynamicProperties;
-+
-+#define DP_REPH 0x80000000U
-+#define DP_HALF 0x40000000U
-+#define DP_PREF 0x20000000U
-+#define DP_BLWF 0x10000000U
-+#define DP_PSTF 0x08000000U
-+
- struct IndicClassTable
- {
- typedef le_uint32 CharClass;
-@@ -111,6 +123,7 @@
- const SplitMatra *splitMatraTable;
-
- inline le_int32 getWorstCaseExpansion() const;
-+ inline le_bool getFilterZeroWidth() const;
-
- CharClass getCharClass(LEUnicode ch) const;
-
-@@ -121,6 +134,7 @@
- inline le_bool isConsonant(LEUnicode ch) const;
- inline le_bool isReph(LEUnicode ch) const;
- inline le_bool isVirama(LEUnicode ch) const;
-+ inline le_bool isAlLakuna(LEUnicode ch) const;
- inline le_bool isNukta(LEUnicode ch) const;
- inline le_bool isVattu(LEUnicode ch) const;
- inline le_bool isMatra(LEUnicode ch) const;
-@@ -129,12 +143,15 @@
- inline le_bool hasPostOrBelowBaseForm(LEUnicode ch) const;
- inline le_bool hasPostBaseForm(LEUnicode ch) const;
- inline le_bool hasBelowBaseForm(LEUnicode ch) const;
-+ inline le_bool hasAboveBaseForm(LEUnicode ch) const;
-+ inline le_bool hasPreBaseForm(LEUnicode ch) const;
-
- inline static le_bool isVowelModifier(CharClass charClass);
- inline static le_bool isStressMark(CharClass charClass);
- inline static le_bool isConsonant(CharClass charClass);
- inline static le_bool isReph(CharClass charClass);
- inline static le_bool isVirama(CharClass charClass);
-+ inline static le_bool isAlLakuna(CharClass charClass);
- inline static le_bool isNukta(CharClass charClass);
- inline static le_bool isVattu(CharClass charClass);
- inline static le_bool isMatra(CharClass charClass);
-@@ -143,6 +160,8 @@
- inline static le_bool hasPostOrBelowBaseForm(CharClass charClass);
- inline static le_bool hasPostBaseForm(CharClass charClass);
- inline static le_bool hasBelowBaseForm(CharClass charClass);
-+ inline static le_bool hasAboveBaseForm(CharClass charClass);
-+ inline static le_bool hasPreBaseForm(CharClass charClass);
-
- static const IndicClassTable *getScriptClassTable(le_int32 scriptCode);
- };
-@@ -151,14 +170,27 @@
- public:
- static le_int32 getWorstCaseExpansion(le_int32 scriptCode);
-
-+ static le_bool getFilterZeroWidth(le_int32 scriptCode);
-+
- static le_int32 reorder(const LEUnicode *theChars, le_int32 charCount, le_int32 scriptCode,
- LEUnicode *outChars, LEGlyphStorage &glyphStorage,
-- MPreFixups **outMPreFixups);
-+ MPreFixups **outMPreFixups, LEErrorCode& success);
-
-- static void adjustMPres(MPreFixups *mpreFixups, LEGlyphStorage &glyphStorage);
-+ static void adjustMPres(MPreFixups *mpreFixups, LEGlyphStorage &glyphStorage, LEErrorCode& success);
-+
-+ static le_int32 v2process(const LEUnicode *theChars, le_int32 charCount, le_int32 scriptCode,
-+ LEUnicode *outChars, LEGlyphStorage &glyphStorage);
-
- static const FeatureMap *getFeatureMap(le_int32 &count);
-
-+ static const FeatureMap *getv2FeatureMap(le_int32 &count);
-+
-+ static void applyPresentationForms(LEGlyphStorage &glyphStorage, le_int32 count);
-+
-+ static void finalReordering(LEGlyphStorage &glyphStorage, le_int32 count);
-+
-+ static void getDynamicProperties(DynamicProperties *dProps, const IndicClassTable *classTable);
-+
- private:
- // do not instantiate
- IndicReordering();
-@@ -172,6 +204,11 @@
- return worstCaseExpansion;
- }
-
-+inline le_bool IndicClassTable::getFilterZeroWidth() const
-+{
-+ return (scriptFlags & SF_FILTER_ZERO_WIDTH) != 0;
-+}
-+
- inline const SplitMatra *IndicClassTable::getSplitMatra(CharClass charClass) const
- {
- le_int32 index = (charClass & CF_INDEX_MASK) >> CF_INDEX_SHIFT;
-@@ -209,6 +246,11 @@
- return (charClass & CF_CLASS_MASK) == CC_VIRAMA;
- }
-
-+inline le_bool IndicClassTable::isAlLakuna(CharClass charClass)
-+{
-+ return (charClass & CF_CLASS_MASK) == CC_AL_LAKUNA;
-+}
-+
- inline le_bool IndicClassTable::isVattu(CharClass charClass)
- {
- return (charClass & CF_VATTU) != 0;
-@@ -241,11 +283,21 @@
- return (charClass & CF_POST_BASE) != 0;
- }
-
-+inline le_bool IndicClassTable::hasPreBaseForm(CharClass charClass)
-+{
-+ return (charClass & CF_PRE_BASE) != 0;
-+}
-+
- inline le_bool IndicClassTable::hasBelowBaseForm(CharClass charClass)
- {
- return (charClass & CF_BELOW_BASE) != 0;
- }
-
-+inline le_bool IndicClassTable::hasAboveBaseForm(CharClass charClass)
-+{
-+ return ((charClass & CF_POS_MASK) == CF_POS_ABOVE);
-+}
-+
- inline le_bool IndicClassTable::isVowelModifier(LEUnicode ch) const
- {
- return isVowelModifier(getCharClass(ch));
-@@ -271,6 +323,11 @@
- return isVirama(getCharClass(ch));
- }
-
-+inline le_bool IndicClassTable::isAlLakuna(LEUnicode ch) const
-+{
-+ return isAlLakuna(getCharClass(ch));
-+}
-+
- inline le_bool IndicClassTable::isNukta(LEUnicode ch) const
- {
- return isNukta(getCharClass(ch));
-@@ -311,5 +368,14 @@
- return hasBelowBaseForm(getCharClass(ch));
- }
-
-+inline le_bool IndicClassTable::hasPreBaseForm(LEUnicode ch) const
-+{
-+ return hasPreBaseForm(getCharClass(ch));
-+}
-+
-+inline le_bool IndicClassTable::hasAboveBaseForm(LEUnicode ch) const
-+{
-+ return hasAboveBaseForm(getCharClass(ch));
-+}
- U_NAMESPACE_END
- #endif
-diff --git a/src/share/native/sun/font/layout/KernTable.cpp b/src/share/native/sun/font/layout/KernTable.cpp
---- jdk/src/share/native/sun/font/layout/KernTable.cpp
-+++ jdk/src/share/native/sun/font/layout/KernTable.cpp
-@@ -26,7 +26,7 @@
- /*
- *
- *
-- * (C) Copyright IBM Corp. 2004-2005 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 2004-2010 - All Rights Reserved
- *
- */
-
-@@ -35,6 +35,7 @@
- #include "LEGlyphStorage.h"
-
- #include "LESwaps.h"
-+#include "OpenTypeUtilities.h"
-
- #include <stdio.h>
-
-@@ -91,8 +92,8 @@
- * TODO: support multiple subtables
- * TODO: respect header flags
- */
--KernTable::KernTable(const LEFontInstance* font, const void* tableData)
-- : pairs(0), font(font)
-+KernTable::KernTable(const LEFontInstance* font_, const void* tableData)
-+ : pairs(0), font(font_)
- {
- const KernTableHeader* header = (const KernTableHeader*)tableData;
- if (header == 0) {
-@@ -120,10 +121,18 @@
- coverage = SWAPW(subhead->coverage);
- if (coverage & COVERAGE_HORIZONTAL) { // only handle horizontal kerning
- const Subtable_0* table = (const Subtable_0*)((char*)subhead + KERN_SUBTABLE_HEADER_SIZE);
-- nPairs = SWAPW(table->nPairs);
-- searchRange = SWAPW(table->searchRange) / KERN_PAIRINFO_SIZE ;
-+
-+ nPairs = SWAPW(table->nPairs);
-+
-+#if 0 // some old fonts have bad values here...
-+ searchRange = SWAPW(table->searchRange);
- entrySelector = SWAPW(table->entrySelector);
-- rangeShift = SWAPW(table->rangeShift) / KERN_PAIRINFO_SIZE;
-+ rangeShift = SWAPW(table->rangeShift);
-+#else
-+ entrySelector = OpenTypeUtilities::highBit(nPairs);
-+ searchRange = (1 << entrySelector) * KERN_PAIRINFO_SIZE;
-+ rangeShift = (nPairs * KERN_PAIRINFO_SIZE) - searchRange;
-+#endif
-
- pairs = (PairInfo*)font->getKernPairs();
- if (pairs == NULL) {
-diff --git a/src/share/native/sun/font/layout/KhmerLayoutEngine.cpp b/src/share/native/sun/font/layout/KhmerLayoutEngine.cpp
---- jdk/src/share/native/sun/font/layout/KhmerLayoutEngine.cpp
-+++ jdk/src/share/native/sun/font/layout/KhmerLayoutEngine.cpp
-@@ -25,7 +25,7 @@
-
-
- /*
-- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
- *
- * This file is a modification of the ICU file IndicLayoutEngine.cpp
- * by Jens Herden and Javier Sola for Khmer language
-@@ -43,16 +43,16 @@
- UOBJECT_DEFINE_RTTI_IMPLEMENTATION(KhmerOpenTypeLayoutEngine)
-
- KhmerOpenTypeLayoutEngine::KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-- le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable)
-- : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable)
-+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success)
-+ : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success)
- {
- fFeatureMap = KhmerReordering::getFeatureMap(fFeatureMapCount);
- fFeatureOrder = TRUE;
- }
-
- KhmerOpenTypeLayoutEngine::KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-- le_int32 typoFlags)
-- : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags)
-+ le_int32 typoFlags, LEErrorCode &success)
-+ : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success)
- {
- fFeatureMap = KhmerReordering::getFeatureMap(fFeatureMapCount);
- fFeatureOrder = TRUE;
-diff --git a/src/share/native/sun/font/layout/KhmerLayoutEngine.h b/src/share/native/sun/font/layout/KhmerLayoutEngine.h
---- jdk/src/share/native/sun/font/layout/KhmerLayoutEngine.h
-+++ jdk/src/share/native/sun/font/layout/KhmerLayoutEngine.h
-@@ -26,7 +26,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
- *
- * This file is a modification of the ICU file IndicLayoutEngine.h
- * by Jens Herden and Javier Sola for Khmer language
-@@ -72,8 +72,9 @@
- *
- * @param fontInstance - the font
- * @param scriptCode - the script
-- * @param languageCode - the language
-+ * @param langaugeCode - the language
- * @param gsubTable - the GSUB table
-+ * @param success - set to an error code if the operation fails
- *
- * @see LayoutEngine::layoutEngineFactory
- * @see OpenTypeLayoutEngine
-@@ -82,7 +83,7 @@
- * @internal
- */
- KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-- le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable);
-+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success);
-
- /**
- * This constructor is used when the font requires a "canned" GSUB table which can't be known
-@@ -91,6 +92,7 @@
- * @param fontInstance - the font
- * @param scriptCode - the script
- * @param langaugeCode - the language
-+ * @param success - set to an error code if the operation fails
- *
- * @see OpenTypeLayoutEngine
- * @see ScriptAndLangaugeTags.h for script and language codes
-@@ -98,7 +100,7 @@
- * @internal
- */
- KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-- le_int32 typoFlags);
-+ le_int32 typoFlags, LEErrorCode &success);
-
- /**
- * The destructor, virtual for correct polymorphic invocation.
-diff --git a/src/share/native/sun/font/layout/KhmerReordering.cpp b/src/share/native/sun/font/layout/KhmerReordering.cpp
---- jdk/src/share/native/sun/font/layout/KhmerReordering.cpp
-+++ jdk/src/share/native/sun/font/layout/KhmerReordering.cpp
-@@ -25,7 +25,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
- *
- * This file is a modification of the ICU file IndicReordering.cpp
- * by Jens Herden and Javier Sola for Khmer language
-@@ -149,8 +149,9 @@
-
-
-
--class ReorderingOutput : public UMemory {
-+class KhmerReorderingOutput : public UMemory {
- private:
-+ le_int32 fSyllableCount;
- le_int32 fOutIndex;
- LEUnicode *fOutChars;
-
-@@ -158,17 +159,22 @@
-
-
- public:
-- ReorderingOutput(LEUnicode *outChars, LEGlyphStorage &glyphStorage)
-- : fOutIndex(0), fOutChars(outChars), fGlyphStorage(glyphStorage)
-+ KhmerReorderingOutput(LEUnicode *outChars, LEGlyphStorage &glyphStorage)
-+ : fSyllableCount(0), fOutIndex(0), fOutChars(outChars), fGlyphStorage(glyphStorage)
- {
- // nothing else to do...
- }
-
-- ~ReorderingOutput()
-+ ~KhmerReorderingOutput()
- {
- // nothing to do here...
- }
-
-+ void reset()
-+ {
-+ fSyllableCount += 1;
-+ }
-+
- void writeChar(LEUnicode ch, le_uint32 charIndex, FeatureMask charFeatures)
- {
- LEErrorCode success = LE_NO_ERROR;
-@@ -176,7 +182,7 @@
- fOutChars[fOutIndex] = ch;
-
- fGlyphStorage.setCharIndex(fOutIndex, charIndex, success);
-- fGlyphStorage.setAuxData(fOutIndex, charFeatures, success);
-+ fGlyphStorage.setAuxData(fOutIndex, charFeatures | (fSyllableCount & LE_GLYPH_GROUP_MASK), success);
-
- fOutIndex += 1;
- }
-@@ -328,12 +334,12 @@
- {-1, -1, -1, -1, 12, 13, -1, 10, 16, 17, 1, 14}, // 9 - First consonant or type 3 after ceong
- {-1, 11, 11, 11, -1, -1, -1, -1, -1, -1, -1, -1}, // 10 - Second Coeng (no register shifter before)
- {-1, -1, -1, -1, 15, -1, -1, -1, 16, 17, 1, 14}, // 11 - Second coeng consonant (or ind. vowel) no register shifter before
-- {-1, -1, 1, -1, -1, 13, -1, -1, 16, -1, -1, -1}, // 12 - Second ZWNJ before a register shifter
-+ {-1, -1, -1, -1, -1, 13, -1, -1, 16, -1, -1, -1}, // 12 - Second ZWNJ before a register shifter
- {-1, -1, -1, -1, 15, -1, -1, -1, 16, 17, 1, 14}, // 13 - Second register shifter
- {-1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1}, // 14 - ZWJ before vowel
- {-1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1}, // 15 - ZWNJ before vowel
- {-1, -1, -1, -1, -1, -1, -1, -1, -1, 17, 1, 18}, // 16 - dependent vowel
-- {-1, -1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 18}, // 17 - sign above
-+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 18}, // 17 - sign above
- {-1, -1, -1, -1, -1, -1, -1, 19, -1, -1, -1, -1}, // 18 - ZWJ after vowel
- {-1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, // 19 - Third coeng
- {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1}, // 20 - dependent vowel after a Robat
-@@ -380,7 +386,7 @@
- {
- const KhmerClassTable *classTable = KhmerClassTable::getKhmerClassTable();
-
-- ReorderingOutput output(outChars, glyphStorage);
-+ KhmerReorderingOutput output(outChars, glyphStorage);
- KhmerClassTable::CharClass charClass;
- le_int32 i, prev = 0, coengRo;
-
-@@ -390,6 +396,8 @@
- while (prev < charCount) {
- le_int32 syllable = findSyllable(classTable, chars, prev, charCount);
-
-+ output.reset();
-+
- // write a pre vowel or the pre part of a split vowel first
- // and look out for coeng + ro. RO is the only vowel of type 2, and
- // therefore the only one that requires saving space before the base.
-diff --git a/src/share/native/sun/font/layout/LEFontInstance.cpp b/src/share/native/sun/font/layout/LEFontInstance.cpp
---- jdk/src/share/native/sun/font/layout/LEFontInstance.cpp
-+++ jdk/src/share/native/sun/font/layout/LEFontInstance.cpp
-@@ -26,7 +26,7 @@
- /*
- *******************************************************************************
- *
-- * Copyright (C) 1999-2005, International Business Machines
-+ * Copyright (C) 1999-2007, International Business Machines
- * Corporation and others. All Rights Reserved.
- *
- *******************************************************************************
-@@ -45,6 +45,16 @@
-
- UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LEFontInstance)
-
-+LECharMapper::~LECharMapper()
-+{
-+ // nothing to do.
-+}
-+
-+LEFontInstance::~LEFontInstance()
-+{
-+ // nothing to do
-+}
-+
- const LEFontInstance *LEFontInstance::getSubFont(const LEUnicode chars[], le_int32 *offset, le_int32 limit,
- le_int32 script, LEErrorCode &success) const
- {
-@@ -62,7 +72,7 @@
- }
-
- void LEFontInstance::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count,
-- le_bool reverse, const LECharMapper *mapper, LEGlyphStorage &glyphStorage) const
-+ le_bool reverse, const LECharMapper *mapper, le_bool filterZeroWidth, LEGlyphStorage &glyphStorage) const
- {
- le_int32 i, out = 0, dir = 1;
-
-@@ -83,7 +93,7 @@
- }
- }
-
-- glyphStorage[out] = mapCharToGlyph(code, mapper);
-+ glyphStorage[out] = mapCharToGlyph(code, mapper, filterZeroWidth);
-
- if (code >= 0x10000) {
- i += 1;
-@@ -94,14 +104,71 @@
-
- LEGlyphID LEFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const
- {
-+ return mapCharToGlyph(ch, mapper, TRUE);
-+}
-+
-+LEGlyphID LEFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper, le_bool filterZeroWidth) const
-+{
- LEUnicode32 mappedChar = mapper->mapChar(ch);
-
-- if (mappedChar == 0xFFFE || mappedChar == 0xFFFF ||
-- mappedChar == 0x200C || mappedChar == 0x200D) {
-+ if (mappedChar == 0xFFFE || mappedChar == 0xFFFF) {
- return 0xFFFF;
- }
-
-+ if (filterZeroWidth && (mappedChar == 0x200C || mappedChar == 0x200D)) {
-+ return canDisplay(mappedChar)? 0x0001 : 0xFFFF;
-+ }
-+
- return mapCharToGlyph(mappedChar);
- }
-+
-+le_bool LEFontInstance::canDisplay(LEUnicode32 ch) const
-+{
-+ return LE_GET_GLYPH(mapCharToGlyph(ch)) != 0;
-+}
-+
-+float LEFontInstance::xUnitsToPoints(float xUnits) const
-+{
-+ return (xUnits * getXPixelsPerEm()) / (float) getUnitsPerEM();
-+}
-+
-+float LEFontInstance::yUnitsToPoints(float yUnits) const
-+{
-+ return (yUnits * getYPixelsPerEm()) / (float) getUnitsPerEM();
-+}
-+
-+void LEFontInstance::unitsToPoints(LEPoint &units, LEPoint &points) const
-+{
-+ points.fX = xUnitsToPoints(units.fX);
-+ points.fY = yUnitsToPoints(units.fY);
-+}
-+
-+float LEFontInstance::xPixelsToUnits(float xPixels) const
-+{
-+ return (xPixels * getUnitsPerEM()) / (float) getXPixelsPerEm();
-+}
-+
-+float LEFontInstance::yPixelsToUnits(float yPixels) const
-+{
-+ return (yPixels * getUnitsPerEM()) / (float) getYPixelsPerEm();
-+}
-+
-+void LEFontInstance::pixelsToUnits(LEPoint &pixels, LEPoint &units) const
-+{
-+ units.fX = xPixelsToUnits(pixels.fX);
-+ units.fY = yPixelsToUnits(pixels.fY);
-+}
-+
-+void LEFontInstance::transformFunits(float xFunits, float yFunits, LEPoint &pixels) const
-+{
-+ pixels.fX = xUnitsToPoints(xFunits) * getScaleFactorX();
-+ pixels.fY = yUnitsToPoints(yFunits) * getScaleFactorY();
-+}
-+
-+le_int32 LEFontInstance::getLineHeight() const
-+{
-+ return getAscent() + getDescent() + getLeading();
-+}
-+
- U_NAMESPACE_END
-
-diff --git a/src/share/native/sun/font/layout/LEFontInstance.h b/src/share/native/sun/font/layout/LEFontInstance.h
---- jdk/src/share/native/sun/font/layout/LEFontInstance.h
-+++ jdk/src/share/native/sun/font/layout/LEFontInstance.h
-@@ -26,7 +26,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
- *
- */
-
-@@ -57,7 +57,7 @@
- * Destructor.
- * @stable ICU 3.2
- */
-- virtual inline ~LECharMapper() {};
-+ virtual ~LECharMapper();
-
- /**
- * This method does the adjustments.
-@@ -75,7 +75,7 @@
- * This is a forward reference to the class which holds the per-glyph
- * storage.
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- class LEGlyphStorage;
-
-@@ -101,7 +101,7 @@
- * methods with some default behavior such as returning constant values, or using the
- * values from the first subfont.
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- class U_LAYOUT_API LEFontInstance : public UObject
- {
-@@ -113,7 +113,7 @@
- *
- * @stable ICU 2.8
- */
-- virtual inline ~LEFontInstance() {};
-+ virtual ~LEFontInstance();
-
- /**
- * Get a physical font which can render the given text. For composite fonts,
-@@ -209,7 +209,7 @@
- *
- * @stable ICU 3.2
- */
-- virtual inline le_bool canDisplay(LEUnicode32 ch) const;
-+ virtual le_bool canDisplay(LEUnicode32 ch) const;
-
- /**
- * This method returns the number of design units in
-@@ -237,13 +237,31 @@
- * @param count - the number of characters
- * @param reverse - if <code>TRUE</code>, store the glyph indices in reverse order.
- * @param mapper - the character mapper.
-+ * @param filterZeroWidth - <code>TRUE</code> if ZWJ / ZWNJ characters should map to a glyph w/ no contours.
- * @param glyphStorage - the object which contains the output glyph array
- *
- * @see LECharMapper
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.6
- */
-- virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, const LECharMapper *mapper, LEGlyphStorage &glyphStorage) const;
-+ virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, const LECharMapper *mapper, le_bool filterZeroWidth, LEGlyphStorage &glyphStorage) const;
-+
-+ /**
-+ * This method maps a single character to a glyph index, using the
-+ * font's character to glyph map. The default implementation of this
-+ * method calls the mapper, and then calls <code>mapCharToGlyph(mappedCh)</code>.
-+ *
-+ * @param ch - the character
-+ * @param mapper - the character mapper
-+ * @param filterZeroWidth - <code>TRUE</code> if ZWJ / ZWNJ characters should map to a glyph w/ no contours.
-+ *
-+ * @return the glyph index
-+ *
-+ * @see LECharMapper
-+ *
-+ * @stable ICU 3.6
-+ */
-+ virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper, le_bool filterZeroWidth) const;
-
- /**
- * This method maps a single character to a glyph index, using the
-@@ -335,7 +353,7 @@
- *
- * @stable ICU 3.2
- */
-- virtual inline float xUnitsToPoints(float xUnits) const;
-+ virtual float xUnitsToPoints(float xUnits) const;
-
- /**
- * This method converts font design units in the
-@@ -347,7 +365,7 @@
- *
- * @stable ICU 3.2
- */
-- virtual inline float yUnitsToPoints(float yUnits) const;
-+ virtual float yUnitsToPoints(float yUnits) const;
-
- /**
- * This method converts font design units to points.
-@@ -357,7 +375,7 @@
- *
- * @stable ICU 3.2
- */
-- virtual inline void unitsToPoints(LEPoint &units, LEPoint &points) const;
-+ virtual void unitsToPoints(LEPoint &units, LEPoint &points) const;
-
- /**
- * This method converts pixels in the
-@@ -369,7 +387,7 @@
- *
- * @stable ICU 3.2
- */
-- virtual inline float xPixelsToUnits(float xPixels) const;
-+ virtual float xPixelsToUnits(float xPixels) const;
-
- /**
- * This method converts pixels in the
-@@ -381,7 +399,7 @@
- *
- * @stable ICU 3.2
- */
-- virtual inline float yPixelsToUnits(float yPixels) const;
-+ virtual float yPixelsToUnits(float yPixels) const;
-
- /**
- * This method converts pixels to font design units.
-@@ -391,7 +409,7 @@
- *
- * @stable ICU 3.2
- */
-- virtual inline void pixelsToUnits(LEPoint &pixels, LEPoint &units) const;
-+ virtual void pixelsToUnits(LEPoint &pixels, LEPoint &units) const;
-
- /**
- * Get the X scale factor from the font's transform. The default
-@@ -433,7 +451,7 @@
- *
- * @stable ICU 3.2
- */
-- virtual inline void transformFunits(float xFunits, float yFunits, LEPoint &pixels) const;
-+ virtual void transformFunits(float xFunits, float yFunits, LEPoint &pixels) const;
-
- /**
- * This is a convenience method used to convert
-@@ -523,49 +541,6 @@
-
- };
-
--inline le_bool LEFontInstance::canDisplay(LEUnicode32 ch) const
--{
-- return LE_GET_GLYPH(mapCharToGlyph(ch)) != 0;
--}
--
--inline float LEFontInstance::xUnitsToPoints(float xUnits) const
--{
-- return (xUnits * getXPixelsPerEm()) / (float) getUnitsPerEM();
--}
--
--inline float LEFontInstance::yUnitsToPoints(float yUnits) const
--{
-- return (yUnits * getYPixelsPerEm()) / (float) getUnitsPerEM();
--}
--
--inline void LEFontInstance::unitsToPoints(LEPoint &units, LEPoint &points) const
--{
-- points.fX = xUnitsToPoints(units.fX);
-- points.fY = yUnitsToPoints(units.fY);
--}
--
--inline float LEFontInstance::xPixelsToUnits(float xPixels) const
--{
-- return (xPixels * getUnitsPerEM()) / (float) getXPixelsPerEm();
--}
--
--inline float LEFontInstance::yPixelsToUnits(float yPixels) const
--{
-- return (yPixels * getUnitsPerEM()) / (float) getYPixelsPerEm();
--}
--
--inline void LEFontInstance::pixelsToUnits(LEPoint &pixels, LEPoint &units) const
--{
-- units.fX = xPixelsToUnits(pixels.fX);
-- units.fY = yPixelsToUnits(pixels.fY);
--}
--
--inline void LEFontInstance::transformFunits(float xFunits, float yFunits, LEPoint &pixels) const
--{
-- pixels.fX = xUnitsToPoints(xFunits) * getScaleFactorX();
-- pixels.fY = yUnitsToPoints(yFunits) * getScaleFactorY();
--}
--
- inline float LEFontInstance::fixedToFloat(le_int32 fixed)
- {
- return (float) (fixed / 65536.0);
-@@ -576,11 +551,6 @@
- return (le_int32) (theFloat * 65536.0);
- }
-
--inline le_int32 LEFontInstance::getLineHeight() const
--{
-- return getAscent() + getDescent() + getLeading();
--}
--
- U_NAMESPACE_END
- #endif
-
-diff --git a/src/share/native/sun/font/layout/LEGlyphStorage.cpp b/src/share/native/sun/font/layout/LEGlyphStorage.cpp
---- jdk/src/share/native/sun/font/layout/LEGlyphStorage.cpp
-+++ jdk/src/share/native/sun/font/layout/LEGlyphStorage.cpp
-@@ -25,7 +25,7 @@
-
- /*
- **********************************************************************
-- * Copyright (C) 1998-2005, International Business Machines
-+ * Copyright (C) 1998-2009, International Business Machines
- * Corporation and others. All Rights Reserved.
- **********************************************************************
- */
-@@ -38,6 +38,11 @@
-
- UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LEGlyphStorage)
-
-+LEInsertionCallback::~LEInsertionCallback()
-+{
-+ // nothing to do...
-+}
-+
- LEGlyphStorage::LEGlyphStorage()
- : fGlyphCount(0), fGlyphs(NULL), fCharIndices(NULL), fPositions(NULL),
- fAuxData(NULL), fInsertionList(NULL), fSrcIndex(0), fDestIndex(0)
-@@ -129,8 +134,18 @@
- if (fInsertionList == NULL) {
- // FIXME: check this for failure?
- fInsertionList = new LEInsertionList(rightToLeft);
-+ if (fInsertionList == NULL) {
-+ LE_DELETE_ARRAY(fCharIndices);
-+ fCharIndices = NULL;
-+
-+ LE_DELETE_ARRAY(fGlyphs);
-+ fGlyphs = NULL;
-+
-+ success = LE_MEMORY_ALLOCATION_ERROR;
-+ return;
- }
- }
-+}
-
- // FIXME: do we want to initialize the positions to [0, 0]?
- le_int32 LEGlyphStorage::allocatePositions(LEErrorCode &success)
-@@ -139,6 +154,11 @@
- return -1;
- }
-
-+ if (fPositions != NULL) {
-+ success = LE_INTERNAL_ERROR;
-+ return -1;
-+ }
-+
- fPositions = LE_NEW_ARRAY(float, 2 * (fGlyphCount + 1));
-
- if (fPositions == NULL) {
-@@ -156,6 +176,11 @@
- return -1;
- }
-
-+ if (fAuxData != NULL) {
-+ success = LE_INTERNAL_ERROR;
-+ return -1;
-+ }
-+
- fAuxData = LE_NEW_ARRAY(le_uint32, fGlyphCount);
-
- if (fAuxData == NULL) {
-@@ -510,10 +535,49 @@
- fGlyphCount = newGlyphCount;
- }
-
--// FIXME: add error checking?
-+// Move a glyph to a different position in the LEGlyphStorage ( used for Indic v2 processing )
-+
-+void LEGlyphStorage::moveGlyph(le_int32 fromPosition, le_int32 toPosition, le_uint32 marker )
-+{
-+
-+ LEErrorCode success = LE_NO_ERROR;
-+
-+ LEGlyphID holdGlyph = getGlyphID(fromPosition,success);
-+ le_int32 holdCharIndex = getCharIndex(fromPosition,success);
-+ le_uint32 holdAuxData = getAuxData(fromPosition,success);
-+
-+ if ( fromPosition < toPosition ) {
-+ for ( le_int32 i = fromPosition ; i < toPosition ; i++ ) {
-+ setGlyphID(i,getGlyphID(i+1,success),success);
-+ setCharIndex(i,getCharIndex(i+1,success),success);
-+ setAuxData(i,getAuxData(i+1,success),success);
-+ }
-+ } else {
-+ for ( le_int32 i = toPosition ; i > fromPosition ; i-- ) {
-+ setGlyphID(i,getGlyphID(i-1,success),success);
-+ setCharIndex(i,getCharIndex(i-1,success),success);
-+ setAuxData(i,getAuxData(i-1,success),success);
-+
-+ }
-+ }
-+
-+ setGlyphID(toPosition,holdGlyph,success);
-+ setCharIndex(toPosition,holdCharIndex,success);
-+ setAuxData(toPosition,holdAuxData | marker,success);
-+
-+}
-+
-+// Glue code for existing stable API
- LEGlyphID *LEGlyphStorage::insertGlyphs(le_int32 atIndex, le_int32 insertCount)
- {
-- return fInsertionList->insert(atIndex, insertCount);
-+ LEErrorCode ignored = LE_NO_LAYOUT_ERROR;
-+ return insertGlyphs(atIndex, insertCount, ignored);
-+}
-+
-+// FIXME: add error checking?
-+LEGlyphID *LEGlyphStorage::insertGlyphs(le_int32 atIndex, le_int32 insertCount, LEErrorCode& success)
-+{
-+ return fInsertionList->insert(atIndex, insertCount, success);
- }
-
- le_int32 LEGlyphStorage::applyInsertions()
-@@ -526,11 +590,27 @@
-
- le_int32 newGlyphCount = fGlyphCount + growAmount;
-
-- fGlyphs = (LEGlyphID *) LE_GROW_ARRAY(fGlyphs, newGlyphCount);
-- fCharIndices = (le_int32 *) LE_GROW_ARRAY(fCharIndices, newGlyphCount);
-+ LEGlyphID *newGlyphs = (LEGlyphID *) LE_GROW_ARRAY(fGlyphs, newGlyphCount);
-+ if (newGlyphs == NULL) {
-+ // Could not grow the glyph array
-+ return fGlyphCount;
-+ }
-+ fGlyphs = newGlyphs;
-+
-+ le_int32 *newCharIndices = (le_int32 *) LE_GROW_ARRAY(fCharIndices, newGlyphCount);
-+ if (newCharIndices == NULL) {
-+ // Could not grow the glyph array
-+ return fGlyphCount;
-+ }
-+ fCharIndices = newCharIndices;
-
- if (fAuxData != NULL) {
-- fAuxData = (le_uint32 *) LE_GROW_ARRAY(fAuxData, newGlyphCount);
-+ le_uint32 *newAuxData = (le_uint32 *) LE_GROW_ARRAY(fAuxData, newGlyphCount);
-+ if (newAuxData == NULL) {
-+ // could not grow the aux data array
-+ return fGlyphCount;
-+ }
-+ fAuxData = (le_uint32 *)newAuxData;
- }
-
- fSrcIndex = fGlyphCount - 1;
-diff --git a/src/share/native/sun/font/layout/LEGlyphStorage.h b/src/share/native/sun/font/layout/LEGlyphStorage.h
---- jdk/src/share/native/sun/font/layout/LEGlyphStorage.h
-+++ jdk/src/share/native/sun/font/layout/LEGlyphStorage.h
-@@ -25,7 +25,7 @@
-
- /*
- **********************************************************************
-- * Copyright (C) 1998-2005, International Business Machines
-+ * Copyright (C) 1998-2010, International Business Machines
- * Corporation and others. All Rights Reserved.
- **********************************************************************
- */
-@@ -54,7 +54,7 @@
- *
- * @see LEInsertionList.h
- *
-- * @draft ICU 3.6
-+ * @stable ICU 3.6
- */
- class U_LAYOUT_API LEGlyphStorage : public UObject, protected LEInsertionCallback
- {
-@@ -130,7 +130,7 @@
- *
- * @see LEInsertionList.h
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- virtual le_bool applyInsertion(le_int32 atPosition, le_int32 count, LEGlyphID newGlyphs[]);
-
-@@ -141,14 +141,14 @@
- * <code>allocateGlyphArray, allocatePositions and allocateAuxData</code>
- * to allocate the data.
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- LEGlyphStorage();
-
- /**
- * The destructor. This will deallocate all of the arrays.
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- ~LEGlyphStorage();
-
-@@ -157,7 +157,7 @@
- *
- * @return the number of glyphs in the glyph array
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- inline le_int32 getGlyphCount() const;
-
-@@ -169,7 +169,7 @@
- * @param glyphs - the destiniation glyph array
- * @param success - set to an error code if the operation fails
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- void getGlyphs(LEGlyphID glyphs[], LEErrorCode &success) const;
-
-@@ -183,7 +183,7 @@
- * @param extraBits - this value will be ORed with each glyph index
- * @param success - set to an error code if the operation fails
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- void getGlyphs(le_uint32 glyphs[], le_uint32 extraBits, LEErrorCode &success) const;
-
-@@ -195,7 +195,7 @@
- * @param charIndices - the destiniation character index array
- * @param success - set to an error code if the operation fails
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- void getCharIndices(le_int32 charIndices[], LEErrorCode &success) const;
-
-@@ -208,7 +208,7 @@
- * @param indexBase - an offset which will be added to each index
- * @param success - set to an error code if the operation fails
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- void getCharIndices(le_int32 charIndices[], le_int32 indexBase, LEErrorCode &success) const;
-
-@@ -221,7 +221,7 @@
- * @param positions - the destiniation position array
- * @param success - set to an error code if the operation fails
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- void getGlyphPositions(float positions[], LEErrorCode &success) const;
-
-@@ -237,7 +237,7 @@
- * @param y - the glyph's Y position
- * @param success - set to an error code if the operation fails
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- void getGlyphPosition(le_int32 glyphIndex, float &x, float &y, LEErrorCode &success) const;
-
-@@ -251,7 +251,7 @@
- * @param success set to an error code if the storage cannot be allocated of if the initial
- * glyph count is not positive.
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- void allocateGlyphArray(le_int32 initialGlyphCount, le_bool rightToLeft, LEErrorCode &success);
-
-@@ -263,7 +263,7 @@
- *
- * @return the number of X, Y position pairs allocated.
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- le_int32 allocatePositions(LEErrorCode &success);
-
-@@ -274,7 +274,7 @@
- *
- * @return the size of the auxillary data array.
- *
-- * @draft ICU 3.6
-+ * @stable ICU 3.6
- */
- le_int32 allocateAuxData(LEErrorCode &success);
-
-@@ -284,7 +284,7 @@
- * @param auxData the auxillary data array will be copied to this address
- * @param success set to an error code if the data cannot be copied
- *
-- * @draft ICU 3.6
-+ * @stable ICU 3.6
- */
- void getAuxData(le_uint32 auxData[], LEErrorCode &success) const;
-
-@@ -296,7 +296,7 @@
- *
- * @return the glyph ID
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- LEGlyphID getGlyphID(le_int32 glyphIndex, LEErrorCode &success) const;
-
-@@ -308,7 +308,7 @@
- *
- * @return the character index
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- le_int32 getCharIndex(le_int32 glyphIndex, LEErrorCode &success) const;
-
-@@ -321,7 +321,7 @@
- *
- * @return the auxillary data
- *
-- * @draft ICU 3.6
-+ * @stable ICU 3.6
- */
- le_uint32 getAuxData(le_int32 glyphIndex, LEErrorCode &success) const;
-
-@@ -333,7 +333,7 @@
- *
- * @return a reference to the given location in the glyph array
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- inline LEGlyphID &operator[](le_int32 glyphIndex) const;
-
-@@ -346,16 +346,52 @@
- *
- * @param atIndex the index of the glyph to be replaced
- * @param insertCount the number of glyphs to replace it with
-+ * @param success set to an error code if the auxillary data cannot be retrieved.
- *
- * @return the address at which to store the replacement glyphs.
- *
-- * @see LEInsetionList.h
-+ * @see LEInsertionList.h
- *
-- * @draft ICU 3.0
-+ * @stable ICU 4.2
-+ */
-+ LEGlyphID *insertGlyphs(le_int32 atIndex, le_int32 insertCount, LEErrorCode& success);
-+
-+ /**
-+ * Call this method to replace a single glyph in the glyph array
-+ * with multiple glyphs. This method uses the <code>LEInsertionList</code>
-+ * to do the insertion. It returns the address of storage where the new
-+ * glyph IDs can be stored. They will not actually be inserted into the
-+ * glyph array until <code>applyInsertions</code> is called.
-+ *
-+ * Note: Don't use this version, use the other version of this function which has an error code.
-+ *
-+ * @param atIndex the index of the glyph to be replaced
-+ * @param insertCount the number of glyphs to replace it with
-+ *
-+ * @return the address at which to store the replacement glyphs.
-+ *
-+ * @see LEInsertionList.h
-+ *
-+ * @stable ICU 3.0
- */
- LEGlyphID *insertGlyphs(le_int32 atIndex, le_int32 insertCount);
-
- /**
-+ * This method is used to reposition glyphs during Indic v2 processing. It moves
-+ * all of the relevant glyph information ( glyph, indices, positions, and auxData ),
-+ * from the source position to the target position, and also allows for a marker bit
-+ * to be set in the target glyph's auxData so that it won't be reprocessed later in the
-+ * cycle.
-+ *
-+ * @param fromPosition - position of the glyph to be moved
-+ * @param toPosition - target position of the glyph
-+ * @param marker marker bit
-+ *
-+ * @stable ICU 4.2
-+ */
-+ void moveGlyph(le_int32 fromPosition, le_int32 toPosition, le_uint32 marker);
-+
-+ /**
- * This method causes all of the glyph insertions recorded by
- * <code>insertGlyphs</code> to be applied to the glyph array. The
- * new slots in the char indices and the auxillary data arrays
-@@ -365,7 +401,7 @@
- *
- * @see LEInsertionList.h
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- le_int32 applyInsertions();
-
-@@ -376,7 +412,7 @@
- * @param glyphID the new glyph ID
- * @param success will be set to an error code if the glyph ID cannot be set.
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- void setGlyphID(le_int32 glyphIndex, LEGlyphID glyphID, LEErrorCode &success);
-
-@@ -387,7 +423,7 @@
- * @param charIndex the new char index
- * @param success will be set to an error code if the char index cannot be set.
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- void setCharIndex(le_int32 glyphIndex, le_int32 charIndex, LEErrorCode &success);
-
-@@ -399,7 +435,7 @@
- * @param y the new Y position
- * @param success will be set to an error code if the position cannot be set.
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- void setPosition(le_int32 glyphIndex, float x, float y, LEErrorCode &success);
-
-@@ -411,7 +447,7 @@
- * @param yAdjust the adjustment to the glyph's Y position
- * @param success will be set to an error code if the glyph's position cannot be adjusted.
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- void adjustPosition(le_int32 glyphIndex, float xAdjust, float yAdjust, LEErrorCode &success);
-
-@@ -422,7 +458,7 @@
- * @param auxData the new auxillary data
- * @param success will be set to an error code if the auxillary data cannot be set.
- *
-- * @draft ICU 3.6
-+ * @stable ICU 3.6
- */
- void setAuxData(le_int32 glyphIndex, le_uint32 auxData, LEErrorCode &success);
-
-@@ -434,7 +470,7 @@
- * @param from the <code>LEGlyphStorage</code> object from which
- * to get the new glyph array.
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- void adoptGlyphArray(LEGlyphStorage &from);
-
-@@ -446,7 +482,7 @@
- * @param from the <code>LEGlyphStorage</code> object from which
- * to get the new char indices array.
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- void adoptCharIndicesArray(LEGlyphStorage &from);
-
-@@ -458,7 +494,7 @@
- * @param from the <code>LEGlyphStorage</code> object from which
- * to get the new position array.
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- void adoptPositionArray(LEGlyphStorage &from);
-
-@@ -470,7 +506,7 @@
- * @param from the <code>LEGlyphStorage</code> object from which
- * to get the new auxillary data array.
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- void adoptAuxDataArray(LEGlyphStorage &from);
-
-@@ -481,7 +517,7 @@
- * @param from the <code>LEGlyphStorage</code> object from which
- * to get the new glyph count.
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- void adoptGlyphCount(LEGlyphStorage &from);
-
-@@ -490,7 +526,7 @@
- *
- * @param newGlyphCount the new glyph count.
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- void adoptGlyphCount(le_int32 newGlyphCount);
-
-@@ -500,21 +536,21 @@
- * to layout a different characer array. (This method is also called
- * by the destructor)
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- void reset();
-
- /**
- * ICU "poor man's RTTI", returns a UClassID for the actual class.
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- virtual UClassID getDynamicClassID() const;
-
- /**
- * ICU "poor man's RTTI", returns a UClassID for this class.
- *
-- * @draft ICU 3.0
-+ * @stable ICU 3.0
- */
- static UClassID getStaticClassID();
- };
-diff --git a/src/share/native/sun/font/layout/LEInsertionList.cpp b/src/share/native/sun/font/layout/LEInsertionList.cpp
---- jdk/src/share/native/sun/font/layout/LEInsertionList.cpp
-+++ jdk/src/share/native/sun/font/layout/LEInsertionList.cpp
-@@ -25,7 +25,7 @@
-
- /*
- **********************************************************************
-- * Copyright (C) 1998-2004, International Business Machines
-+ * Copyright (C) 1998-2008, International Business Machines
- * Corporation and others. All Rights Reserved.
- **********************************************************************
- */
-@@ -76,9 +76,17 @@
- return growAmount;
- }
-
--LEGlyphID *LEInsertionList::insert(le_int32 position, le_int32 count)
-+LEGlyphID *LEInsertionList::insert(le_int32 position, le_int32 count, LEErrorCode &success)
- {
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-+
- InsertionRecord *insertion = (InsertionRecord *) LE_NEW_ARRAY(char, sizeof(InsertionRecord) + (count - ANY_NUMBER) * sizeof (LEGlyphID));
-+ if (insertion == NULL) {
-+ success = LE_MEMORY_ALLOCATION_ERROR;
-+ return 0;
-+ }
-
- insertion->position = position;
- insertion->count = count;
-diff --git a/src/share/native/sun/font/layout/LEInsertionList.h b/src/share/native/sun/font/layout/LEInsertionList.h
---- jdk/src/share/native/sun/font/layout/LEInsertionList.h
-+++ jdk/src/share/native/sun/font/layout/LEInsertionList.h
-@@ -25,7 +25,7 @@
-
- /*
- **********************************************************************
-- * Copyright (C) 1998-2004, International Business Machines
-+ * Copyright (C) 1998-2008, International Business Machines
- * Corporation and others. All Rights Reserved.
- **********************************************************************
- */
-@@ -45,7 +45,7 @@
- *
- * @internal
- */
--class LEInsertionCallback
-+class U_LAYOUT_API LEInsertionCallback
- {
- public:
- /**
-@@ -62,6 +62,11 @@
- * @internal
- */
- virtual le_bool applyInsertion(le_int32 atPosition, le_int32 count, LEGlyphID newGlyphs[]) = 0;
-+
-+ /**
-+ * The destructor
-+ */
-+ virtual ~LEInsertionCallback();
- };
-
- /**
-@@ -103,13 +108,14 @@
- * @param position the glyph at this position in the array will be
- * replaced by the new glyphs.
- * @param count the number of new glyphs
-+ * @param success set to an error code if the auxillary data cannot be retrieved.
- *
- * @return the address of an array in which to store the new glyphs. This will
- * <em>not</em> be in the glyph array.
- *
- * @internal
- */
-- LEGlyphID *insert(le_int32 position, le_int32 count);
-+ LEGlyphID *insert(le_int32 position, le_int32 count, LEErrorCode &success);
-
- /**
- * Return the number of new glyphs that have been inserted.
-diff --git a/src/share/native/sun/font/layout/LELanguages.h b/src/share/native/sun/font/layout/LELanguages.h
---- jdk/src/share/native/sun/font/layout/LELanguages.h
-+++ jdk/src/share/native/sun/font/layout/LELanguages.h
-@@ -25,12 +25,12 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2005. All Rights Reserved.
-+ * (C) Copyright IBM Corp. 1998-2010. All Rights Reserved.
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
- *
-- * Generated on: 07/19/2005 01:01:08 PM PDT
-+ * Generated on: 10/26/2010 02:53:33 PM PDT
- */
-
- #ifndef __LELANGUAGES_H
-@@ -50,7 +50,7 @@
- * this is just a list of languages which the LayoutEngine
- * supports.
- *
-- * @draft ICU 3.4
-+ * @stable ICU 2.6
- */
-
- enum LanguageCodes {
-@@ -85,7 +85,51 @@
- zhsLanguageCode = 28,
- zhtLanguageCode = 29,
-
-- languageCodeCount = 30
-+ /** New language codes added 03/13/2008 @stable ICU 4.0 */
-+ afkLanguageCode = 30,
-+ belLanguageCode = 31,
-+ bgrLanguageCode = 32,
-+ catLanguageCode = 33,
-+ cheLanguageCode = 34,
-+ copLanguageCode = 35,
-+ csyLanguageCode = 36,
-+ danLanguageCode = 37,
-+ deuLanguageCode = 38,
-+ dznLanguageCode = 39,
-+ ellLanguageCode = 40,
-+ engLanguageCode = 41,
-+ espLanguageCode = 42,
-+ etiLanguageCode = 43,
-+ euqLanguageCode = 44,
-+ finLanguageCode = 45,
-+ fraLanguageCode = 46,
-+ gaeLanguageCode = 47,
-+ hauLanguageCode = 48,
-+ hrvLanguageCode = 49,
-+ hunLanguageCode = 50,
-+ hyeLanguageCode = 51,
-+ indLanguageCode = 52,
-+ itaLanguageCode = 53,
-+ khmLanguageCode = 54,
-+ mngLanguageCode = 55,
-+ mtsLanguageCode = 56,
-+ nepLanguageCode = 57,
-+ nldLanguageCode = 58,
-+ pasLanguageCode = 59,
-+ plkLanguageCode = 60,
-+ ptgLanguageCode = 61,
-+ romLanguageCode = 62,
-+ rusLanguageCode = 63,
-+ skyLanguageCode = 64,
-+ slvLanguageCode = 65,
-+ sqiLanguageCode = 66,
-+ srbLanguageCode = 67,
-+ sveLanguageCode = 68,
-+ tibLanguageCode = 69,
-+ trkLanguageCode = 70,
-+ welLanguageCode = 71,
-+
-+ languageCodeCount = 72
- };
-
- U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/LEScripts.h b/src/share/native/sun/font/layout/LEScripts.h
---- jdk/src/share/native/sun/font/layout/LEScripts.h
-+++ jdk/src/share/native/sun/font/layout/LEScripts.h
-@@ -25,40 +25,43 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2005. All Rights Reserved.
-+ * (C) Copyright IBM Corp. 1998-2010. All Rights Reserved.
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
-+ *
-+ * Generated on: 10/26/2010 02:53:33 PM PDT
- */
-
- #ifndef __LESCRIPTS_H
- #define __LESCRIPTS_H
-
- #include "LETypes.h"
-+
- /**
- * \file
- * \brief C++ API: Constants for Unicode script values
- */
-
--
- U_NAMESPACE_BEGIN
-
- /**
- * Constants for Unicode script values, generated using
- * ICU4J's <code>UScript</code> class.
- *
-- * @draft ICU 3.0
-+ * @stable ICU 2.2
- */
-
- enum ScriptCodes {
- zyyyScriptCode = 0,
-- qaaiScriptCode = 1,
-+ zinhScriptCode = 1,
-+ qaaiScriptCode = zinhScriptCode, /* manually added alias, for API stability */
- arabScriptCode = 2,
- armnScriptCode = 3,
- bengScriptCode = 4,
- bopoScriptCode = 5,
- cherScriptCode = 6,
-- qaacScriptCode = 7,
-+ coptScriptCode = 7,
- cyrlScriptCode = 8,
- dsrtScriptCode = 9,
- devaScriptCode = 10,
-@@ -91,12 +94,24 @@
- thaaScriptCode = 37,
- thaiScriptCode = 38,
- tibtScriptCode = 39,
-+/**
-+ * @stable ICU 2.6
-+ */
-+
- cansScriptCode = 40,
-+/**
-+ * @stable ICU 2.2
-+ */
-+
- yiiiScriptCode = 41,
- tglgScriptCode = 42,
- hanoScriptCode = 43,
- buhdScriptCode = 44,
- tagbScriptCode = 45,
-+/**
-+ * @stable ICU 2.6
-+ */
-+
- braiScriptCode = 46,
- cprtScriptCode = 47,
- limbScriptCode = 48,
-@@ -105,9 +120,129 @@
- shawScriptCode = 51,
- taleScriptCode = 52,
- ugarScriptCode = 53,
-+/**
-+ * @stable ICU 3.0
-+ */
-+
- hrktScriptCode = 54,
-+/**
-+ * @stable ICU 3.4
-+ */
-
-- scriptCodeCount = 55
-+ bugiScriptCode = 55,
-+ glagScriptCode = 56,
-+ kharScriptCode = 57,
-+ syloScriptCode = 58,
-+ taluScriptCode = 59,
-+ tfngScriptCode = 60,
-+ xpeoScriptCode = 61,
-+/**
-+ * @stable ICU 3.6
-+ */
-+
-+ baliScriptCode = 62,
-+ batkScriptCode = 63,
-+ blisScriptCode = 64,
-+ brahScriptCode = 65,
-+ chamScriptCode = 66,
-+ cirtScriptCode = 67,
-+ cyrsScriptCode = 68,
-+ egydScriptCode = 69,
-+ egyhScriptCode = 70,
-+ egypScriptCode = 71,
-+ geokScriptCode = 72,
-+ hansScriptCode = 73,
-+ hantScriptCode = 74,
-+ hmngScriptCode = 75,
-+ hungScriptCode = 76,
-+ indsScriptCode = 77,
-+ javaScriptCode = 78,
-+ kaliScriptCode = 79,
-+ latfScriptCode = 80,
-+ latgScriptCode = 81,
-+ lepcScriptCode = 82,
-+ linaScriptCode = 83,
-+ mandScriptCode = 84,
-+ mayaScriptCode = 85,
-+ meroScriptCode = 86,
-+ nkooScriptCode = 87,
-+ orkhScriptCode = 88,
-+ permScriptCode = 89,
-+ phagScriptCode = 90,
-+ phnxScriptCode = 91,
-+ plrdScriptCode = 92,
-+ roroScriptCode = 93,
-+ saraScriptCode = 94,
-+ syreScriptCode = 95,
-+ syrjScriptCode = 96,
-+ syrnScriptCode = 97,
-+ tengScriptCode = 98,
-+ vaiiScriptCode = 99,
-+ vispScriptCode = 100,
-+ xsuxScriptCode = 101,
-+ zxxxScriptCode = 102,
-+ zzzzScriptCode = 103,
-+/**
-+ * @stable ICU 3.8
-+ */
-+
-+ cariScriptCode = 104,
-+ jpanScriptCode = 105,
-+ lanaScriptCode = 106,
-+ lyciScriptCode = 107,
-+ lydiScriptCode = 108,
-+ olckScriptCode = 109,
-+ rjngScriptCode = 110,
-+ saurScriptCode = 111,
-+ sgnwScriptCode = 112,
-+ sundScriptCode = 113,
-+ moonScriptCode = 114,
-+ mteiScriptCode = 115,
-+/**
-+ * @stable ICU 4.0
-+ */
-+
-+ armiScriptCode = 116,
-+ avstScriptCode = 117,
-+ cakmScriptCode = 118,
-+ koreScriptCode = 119,
-+ kthiScriptCode = 120,
-+ maniScriptCode = 121,
-+ phliScriptCode = 122,
-+ phlpScriptCode = 123,
-+ phlvScriptCode = 124,
-+ prtiScriptCode = 125,
-+ samrScriptCode = 126,
-+ tavtScriptCode = 127,
-+ zmthScriptCode = 128,
-+ zsymScriptCode = 129,
-+/**
-+ * @stable ICU 4.4
-+ */
-+
-+ bamuScriptCode = 130,
-+ lisuScriptCode = 131,
-+ nkgbScriptCode = 132,
-+ sarbScriptCode = 133,
-+/**
-+ * @stable ICU 4.6
-+ */
-+
-+ bassScriptCode = 134,
-+ duplScriptCode = 135,
-+ elbaScriptCode = 136,
-+ granScriptCode = 137,
-+ kpelScriptCode = 138,
-+ lomaScriptCode = 139,
-+ mendScriptCode = 140,
-+ mercScriptCode = 141,
-+ narbScriptCode = 142,
-+ nbatScriptCode = 143,
-+ palmScriptCode = 144,
-+ sindScriptCode = 145,
-+ waraScriptCode = 146,
-+
-+ scriptCodeCount = 147
- };
-
- U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/LEStandalone.h b/src/share/native/sun/font/layout/LEStandalone.h
---- jdk/src/share/native/sun/font/layout/LEStandalone.h
-+++ jdk/src/share/native/sun/font/layout/LEStandalone.h
-@@ -26,6 +26,15 @@
- #ifndef __LESTANDALONE
- #define __LESTANDALONE
-
-+#ifndef U_COPYRIGHT_STRING
-+#define U_COPYRIGHT_STRING " (C) Copyright IBM Corp and Others. 1998-2010 - All Rights Reserved"
-+#endif
-+
-+/* ICU Version number */
-+#ifndef U_ICU_VERSION
-+#define U_ICU_VERSION "4.6"
-+#endif
-+
- /* Definitions to make Layout Engine work away from ICU. */
- #ifndef U_NAMESPACE_BEGIN
- #define U_NAMESPACE_BEGIN
-diff --git a/src/share/native/sun/font/layout/LESwaps.h b/src/share/native/sun/font/layout/LESwaps.h
---- jdk/src/share/native/sun/font/layout/LESwaps.h
-+++ jdk/src/share/native/sun/font/layout/LESwaps.h
-@@ -26,7 +26,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-diff --git a/src/share/native/sun/font/layout/LETypes.h b/src/share/native/sun/font/layout/LETypes.h
---- jdk/src/share/native/sun/font/layout/LETypes.h
-+++ jdk/src/share/native/sun/font/layout/LETypes.h
-@@ -25,7 +25,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-@@ -500,6 +500,7 @@
- LE_CALT_FEATURE_TAG = 0x63616C74UL, /**< 'calt' */
- LE_CASE_FEATURE_TAG = 0x63617365UL, /**< 'case' */
- LE_CCMP_FEATURE_TAG = 0x63636D70UL, /**< 'ccmp' */
-+ LE_CJCT_FEATURE_TAG = 0x636A6374UL, /**< 'cjct' */
- LE_CLIG_FEATURE_TAG = 0x636C6967UL, /**< 'clig' */
- LE_CPSP_FEATURE_TAG = 0x63707370UL, /**< 'cpsp' */
- LE_CSWH_FEATURE_TAG = 0x63737768UL, /**< 'cswh' */
-@@ -563,6 +564,7 @@
- LE_RAND_FEATURE_TAG = 0x72616E64UL, /**< 'rand' */
- LE_RLIG_FEATURE_TAG = 0x726C6967UL, /**< 'rlig' */
- LE_RPHF_FEATURE_TAG = 0x72706866UL, /**< 'rphf' */
-+ LE_RKRF_FEATURE_TAG = 0x726B7266UL, /**< 'rkrf' */
- LE_RTBD_FEATURE_TAG = 0x72746264UL, /**< 'rtbd' */
- LE_RTLA_FEATURE_TAG = 0x72746C61UL, /**< 'rtla' */
- LE_RUBY_FEATURE_TAG = 0x72756279UL, /**< 'ruby' */
-diff --git a/src/share/native/sun/font/layout/LayoutEngine.cpp b/src/share/native/sun/font/layout/LayoutEngine.cpp
---- jdk/src/share/native/sun/font/layout/LayoutEngine.cpp
-+++ jdk/src/share/native/sun/font/layout/LayoutEngine.cpp
-@@ -39,10 +39,11 @@
- #include "ArabicLayoutEngine.h"
- #include "CanonShaping.h"
- #include "HanLayoutEngine.h"
-+#include "HangulLayoutEngine.h"
- #include "IndicLayoutEngine.h"
- #include "KhmerLayoutEngine.h"
- #include "ThaiLayoutEngine.h"
--//#include "TibetanLayoutEngine.h"
-+#include "TibetanLayoutEngine.h"
- #include "GXLayoutEngine.h"
- #include "ScriptAndLanguageTags.h"
- #include "CharSubstitutionFilter.h"
-@@ -60,6 +61,9 @@
-
- U_NAMESPACE_BEGIN
-
-+/* Leave this copyright notice here! It needs to go somewhere in this library. */
-+static const char copyright[] = U_COPYRIGHT_STRING;
-+
- const LEUnicode32 DefaultCharMapper::controlChars[] = {
- 0x0009, 0x000A, 0x000D,
- /*0x200C, 0x200D,*/ 0x200E, 0x200F,
-@@ -97,9 +101,8 @@
- }
-
- if (fFilterControls) {
-- le_int32 index = OpenTypeUtilities::search((le_uint32)ch,
-- (le_uint32 *)controlChars,
-- controlCharsCount);
-+ le_int32 index = OpenTypeUtilities::search((le_uint32)ch, (le_uint32 *)controlChars, controlCharsCount);
-+
- if (controlChars[index] == ch) {
- return 0xFFFF;
- }
-@@ -135,56 +138,7 @@
- // nothing to do
- }
-
--
--UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LayoutEngine)
--
--#define ccmpFeatureTag LE_CCMP_FEATURE_TAG
--
--#define ccmpFeatureMask 0x80000000UL
--
--#define canonFeatures (ccmpFeatureMask)
--
--static const FeatureMap canonFeatureMap[] =
--{
-- {ccmpFeatureTag, ccmpFeatureMask}
--};
--
--static const le_int32 canonFeatureMapCount = LE_ARRAY_SIZE(canonFeatureMap);
--
--LayoutEngine::LayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags)
-- : fGlyphStorage(NULL), fFontInstance(fontInstance), fScriptCode(scriptCode), fLanguageCode(languageCode),
-- fTypoFlags(typoFlags)
--{
-- fGlyphStorage = new LEGlyphStorage();
--}
--
--le_int32 LayoutEngine::getGlyphCount() const
--{
-- return fGlyphStorage->getGlyphCount();
--}
--
--void LayoutEngine::getCharIndices(le_int32 charIndices[], le_int32 indexBase, LEErrorCode &success) const
--{
-- fGlyphStorage->getCharIndices(charIndices, indexBase, success);
--}
--
--void LayoutEngine::getCharIndices(le_int32 charIndices[], LEErrorCode &success) const
--{
-- fGlyphStorage->getCharIndices(charIndices, success);
--}
--
--// Copy the glyphs into caller's (32-bit) glyph array, OR in extraBits
--void LayoutEngine::getGlyphs(le_uint32 glyphs[], le_uint32 extraBits, LEErrorCode &success) const
--{
-- fGlyphStorage->getGlyphs(glyphs, extraBits, success);
--}
--
--void LayoutEngine::getGlyphs(LEGlyphID glyphs[], LEErrorCode &success) const
--{
-- fGlyphStorage->getGlyphs(glyphs, success);
--}
--
--class CanonMarkFilter : public LEGlyphFilter
-+class CanonMarkFilter : public UMemory, public LEGlyphFilter
- {
- private:
- const GlyphClassDefinitionTable *classDefTable;
-@@ -216,6 +170,66 @@
- return glyphClass != 0;
- }
-
-+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LayoutEngine)
-+
-+#define ccmpFeatureTag LE_CCMP_FEATURE_TAG
-+
-+#define ccmpFeatureMask 0x80000000UL
-+
-+#define canonFeatures (ccmpFeatureMask)
-+
-+static const FeatureMap canonFeatureMap[] =
-+{
-+ {ccmpFeatureTag, ccmpFeatureMask}
-+};
-+
-+static const le_int32 canonFeatureMapCount = LE_ARRAY_SIZE(canonFeatureMap);
-+
-+LayoutEngine::LayoutEngine(const LEFontInstance *fontInstance,
-+ le_int32 scriptCode,
-+ le_int32 languageCode,
-+ le_int32 typoFlags,
-+ LEErrorCode &success)
-+ : fGlyphStorage(NULL), fFontInstance(fontInstance), fScriptCode(scriptCode), fLanguageCode(languageCode),
-+ fTypoFlags(typoFlags), fFilterZeroWidth(TRUE)
-+{
-+ if (LE_FAILURE(success)) {
-+ return;
-+ }
-+
-+ fGlyphStorage = new LEGlyphStorage();
-+ if (fGlyphStorage == NULL) {
-+ success = LE_MEMORY_ALLOCATION_ERROR;
-+}
-+}
-+
-+le_int32 LayoutEngine::getGlyphCount() const
-+{
-+ return fGlyphStorage->getGlyphCount();
-+}
-+
-+void LayoutEngine::getCharIndices(le_int32 charIndices[], le_int32 indexBase, LEErrorCode &success) const
-+{
-+ fGlyphStorage->getCharIndices(charIndices, indexBase, success);
-+}
-+
-+void LayoutEngine::getCharIndices(le_int32 charIndices[], LEErrorCode &success) const
-+{
-+ fGlyphStorage->getCharIndices(charIndices, success);
-+}
-+
-+// Copy the glyphs into caller's (32-bit) glyph array, OR in extraBits
-+void LayoutEngine::getGlyphs(le_uint32 glyphs[], le_uint32 extraBits, LEErrorCode &success) const
-+{
-+ fGlyphStorage->getGlyphs(glyphs, extraBits, success);
-+}
-+
-+void LayoutEngine::getGlyphs(LEGlyphID glyphs[], LEErrorCode &success) const
-+{
-+ fGlyphStorage->getGlyphs(glyphs, success);
-+}
-+
-+
- void LayoutEngine::getGlyphPositions(float positions[], LEErrorCode &success) const
- {
- fGlyphStorage->getGlyphPositions(positions, success);
-@@ -245,8 +259,21 @@
-
- if (canonGSUBTable->coversScript(scriptTag)) {
- CharSubstitutionFilter *substitutionFilter = new CharSubstitutionFilter(fFontInstance);
-+ if (substitutionFilter == NULL) {
-+ success = LE_MEMORY_ALLOCATION_ERROR;
-+ return 0;
-+ }
-+
- const LEUnicode *inChars = &chars[offset];
- LEUnicode *reordered = NULL;
-+ LEGlyphStorage fakeGlyphStorage;
-+
-+ fakeGlyphStorage.allocateGlyphArray(count, rightToLeft, success);
-+
-+ if (LE_FAILURE(success)) {
-+ delete substitutionFilter;
-+ return 0;
-+ }
-
- // This is the cheapest way to get mark reordering only for Hebrew.
- // We could just do the mark reordering for all scripts, but most
-@@ -255,18 +282,19 @@
- reordered = LE_NEW_ARRAY(LEUnicode, count);
-
- if (reordered == NULL) {
-+ delete substitutionFilter;
- success = LE_MEMORY_ALLOCATION_ERROR;
- return 0;
- }
-
-- CanonShaping::reorderMarks(&chars[offset], count, rightToLeft, reordered, glyphStorage);
-+ CanonShaping::reorderMarks(&chars[offset], count, rightToLeft, reordered, fakeGlyphStorage);
- inChars = reordered;
- }
-
-- glyphStorage.allocateGlyphArray(count, rightToLeft, success);
-- glyphStorage.allocateAuxData(success);
-+ fakeGlyphStorage.allocateAuxData(success);
-
- if (LE_FAILURE(success)) {
-+ delete substitutionFilter;
- return 0;
- }
-
-@@ -276,21 +304,41 @@
- }
-
- for (i = 0; i < count; i += 1, out += dir) {
-- glyphStorage[out] = (LEGlyphID) inChars[i];
-- glyphStorage.setAuxData(out, canonFeatures, success);
-+ fakeGlyphStorage[out] = (LEGlyphID) inChars[i];
-+ fakeGlyphStorage.setAuxData(out, canonFeatures, success);
- }
-
- if (reordered != NULL) {
- LE_DELETE_ARRAY(reordered);
- }
-
-- outCharCount = canonGSUBTable->process(glyphStorage, rightToLeft, scriptTag, langSysTag, NULL, substitutionFilter, canonFeatureMap, canonFeatureMapCount, FALSE);
-+ outCharCount = canonGSUBTable->process(fakeGlyphStorage, rightToLeft, scriptTag, langSysTag, NULL, substitutionFilter, canonFeatureMap, canonFeatureMapCount, FALSE, success);
-+
-+ if (LE_FAILURE(success)) {
-+ delete substitutionFilter;
-+ return 0;
-+ }
-
- out = (rightToLeft? outCharCount - 1 : 0);
-
-+ /*
-+ * The char indices array in fakeGlyphStorage has the correct mapping
-+ * back to the original input characters. Save it in glyphStorage. The
-+ * subsequent call to glyphStoratge.allocateGlyphArray will keep this
-+ * array rather than allocating and initializing a new one.
-+ */
-+ glyphStorage.adoptCharIndicesArray(fakeGlyphStorage);
-+
- outChars = LE_NEW_ARRAY(LEUnicode, outCharCount);
-+
-+ if (outChars == NULL) {
-+ delete substitutionFilter;
-+ success = LE_MEMORY_ALLOCATION_ERROR;
-+ return 0;
-+ }
-+
- for (i = 0; i < outCharCount; i += 1, out += dir) {
-- outChars[out] = (LEUnicode) LE_GET_GLYPH(glyphStorage[i]);
-+ outChars[out] = (LEUnicode) LE_GET_GLYPH(fakeGlyphStorage[i]);
- }
-
- delete substitutionFilter;
-@@ -475,7 +523,7 @@
-
- DefaultCharMapper charMapper(TRUE, mirror);
-
-- fFontInstance->mapCharsToGlyphs(chars, offset, count, reverse, &charMapper, glyphStorage);
-+ fFontInstance->mapCharsToGlyphs(chars, offset, count, reverse, &charMapper, fFilterZeroWidth, glyphStorage);
- }
-
- // Input: characters, font?
-@@ -495,6 +543,10 @@
-
- le_int32 glyphCount;
-
-+ if (fGlyphStorage->getGlyphCount() > 0) {
-+ fGlyphStorage->reset();
-+ }
-+
- glyphCount = computeGlyphs(chars, offset, count, max, rightToLeft, *fGlyphStorage, success);
- positionGlyphs(*fGlyphStorage, x, y, success);
- adjustGlyphPositions(chars, offset, count, rightToLeft, *fGlyphStorage, success);
-@@ -526,8 +578,15 @@
- LayoutEngine *result = NULL;
- LETag scriptTag = 0x00000000;
- LETag languageTag = 0x00000000;
-+ LETag v2ScriptTag = OpenTypeLayoutEngine::getV2ScriptTag(scriptCode);
-
-- if (gsubTable != NULL && gsubTable->coversScript(scriptTag = OpenTypeLayoutEngine::getScriptTag(scriptCode))) {
-+ // Right now, only invoke V2 processing for Devanagari. TODO: Allow more V2 scripts as they are
-+ // properly tested.
-+
-+ if ( v2ScriptTag == dev2ScriptTag && gsubTable != NULL && gsubTable->coversScript( v2ScriptTag )) {
-+ result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, TRUE, gsubTable, success);
-+ }
-+ else if (gsubTable != NULL && gsubTable->coversScript(scriptTag = OpenTypeLayoutEngine::getScriptTag(scriptCode))) {
- switch (scriptCode) {
- case bengScriptCode:
- case devaScriptCode:
-@@ -539,11 +598,15 @@
- case tamlScriptCode:
- case teluScriptCode:
- case sinhScriptCode:
-- result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable);
-+ result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, FALSE, gsubTable, success);
- break;
-
- case arabScriptCode:
-- result = new ArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable);
-+ result = new ArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
-+ break;
-+
-+ case hangScriptCode:
-+ result = new HangulOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
- break;
-
- case haniScriptCode:
-@@ -555,36 +618,35 @@
- case zhtLanguageCode:
- case zhsLanguageCode:
- if (gsubTable->coversScriptAndLanguage(scriptTag, languageTag, TRUE)) {
-- result = new HanOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable);
-+ result = new HanOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
- break;
- }
-
- // note: falling through to default case.
- default:
-- result = new OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable);
-+ result = new OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
- break;
- }
-
- break;
--#if 0
-+
- case tibtScriptCode:
-- result = new TibetanOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable);
-+ result = new TibetanOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
- break;
--#endif
-
- case khmrScriptCode:
-- result = new KhmerOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable);
-+ result = new KhmerOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
- break;
-
- default:
-- result = new OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable);
-+ result = new OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
- break;
- }
- } else {
- const MorphTableHeader *morphTable = (MorphTableHeader *) fontInstance->getFontTable(mortTableTag);
-
- if (morphTable != NULL && SWAPL(morphTable->version)==0x00010000) {
-- result = new GXLayoutEngine(fontInstance, scriptCode, languageCode, morphTable);
-+ result = new GXLayoutEngine(fontInstance, scriptCode, languageCode, morphTable, success);
- } else {
- switch (scriptCode) {
- case bengScriptCode:
-@@ -598,29 +660,38 @@
- case teluScriptCode:
- case sinhScriptCode:
- {
-- result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags);
-+ result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success);
- break;
- }
-
- case arabScriptCode:
- //case hebrScriptCode:
-- result = new UnicodeArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags);
-+ result = new UnicodeArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success);
- break;
-
- //case hebrScriptCode:
- // return new HebrewOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags);
-
- case thaiScriptCode:
-- result = new ThaiLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags);
-+ result = new ThaiLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success);
-+ break;
-+
-+ case hangScriptCode:
-+ result = new HangulOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success);
- break;
-
- default:
-- result = new LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags);
-+ result = new LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success);
- break;
- }
- }
- }
-
-+ if (result && LE_FAILURE(success)) {
-+ delete result;
-+ result = NULL;
-+ }
-+
- if (result == NULL) {
- success = LE_MEMORY_ALLOCATION_ERROR;
- }
-diff --git a/src/share/native/sun/font/layout/LayoutEngine.h b/src/share/native/sun/font/layout/LayoutEngine.h
---- jdk/src/share/native/sun/font/layout/LayoutEngine.h
-+++ jdk/src/share/native/sun/font/layout/LayoutEngine.h
-@@ -26,7 +26,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
- *
- */
-
-@@ -133,6 +133,14 @@
- le_int32 fTypoFlags;
-
- /**
-+ * <code>TRUE</code> if <code>mapCharsToGlyphs</code> should replace ZWJ / ZWNJ with a glyph
-+ * with no contours.
-+ *
-+ * @internal
-+ */
-+ le_bool fFilterZeroWidth;
-+
-+ /**
- * This constructs an instance for a given font, script and language. Subclass constructors
- * must call this constructor.
- *
-@@ -141,13 +149,18 @@
- * @param languageCode - the language for the text
- * @param typoFlags - the typographic control flags for the text. Set bit 1 if kerning
- * is desired, set bit 2 if ligature formation is desired. Others are reserved.
-+ * @param success - set to an error code if the operation fails
- *
- * @see LEFontInstance
- * @see ScriptAndLanguageTags.h
- *
- * @internal
- */
-- LayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags);
-+ LayoutEngine(const LEFontInstance *fontInstance,
-+ le_int32 scriptCode,
-+ le_int32 languageCode,
-+ le_int32 typoFlags,
-+ LEErrorCode &success);
-
- /**
- * This overrides the default no argument constructor to make it
-@@ -338,7 +351,7 @@
-
- /**
- * This method will invoke the layout steps in their correct order by calling
-- * the computeGlyphs, positionGlyphs and adjustGlyphPosition methods.. It will
-+ * the computeGlyphs, positionGlyphs and adjustGlyphPosition methods. It will
- * compute the glyph, character index and position arrays.
- *
- * @param chars - the input character context
-@@ -352,8 +365,12 @@
- *
- * @return the number of glyphs in the glyph array
- *
-- * Note; the glyph, character index and position array can be accessed
-- * using the getter method below.
-+ * Note: The glyph, character index and position array can be accessed
-+ * using the getter methods below.
-+ *
-+ * Note: If you call this method more than once, you must call the reset()
-+ * method first to free the glyph, character index and position arrays
-+ * allocated by the previous call.
- *
- * @stable ICU 2.8
- */
-@@ -479,7 +496,7 @@
-
- /**
- * Override of existing call that provides flags to control typography.
-- * @draft ICU 3.4
-+ * @stable ICU 3.4
- */
- static LayoutEngine *layoutEngineFactory(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typo_flags, LEErrorCode &success);
-
-diff --git a/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp b/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp
---- jdk/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp
-+++ jdk/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp
-@@ -26,7 +26,7 @@
- /*
- *
- *
-- * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2006 - All Rights Reserved
- *
- */
-
-@@ -58,10 +58,6 @@
- TTGlyphID ligGlyph = SWAPW(ligTable->ligGlyph);
- le_uint16 comp;
-
-- if (filter != NULL && ! filter->accept(LE_SET_GLYPH(glyph, ligGlyph))) {
-- continue;
-- }
--
- for (comp = 0; comp < compCount; comp += 1) {
- if (! glyphIterator->next()) {
- break;
-@@ -72,7 +68,7 @@
- }
- }
-
-- if (comp == compCount) {
-+ if (comp == compCount && (filter == NULL || filter->accept(LE_SET_GLYPH(glyph, ligGlyph)))) {
- GlyphIterator tempIterator(*glyphIterator);
- TTGlyphID deletedGlyph = tempIterator.ignoresMarks()? 0xFFFE : 0xFFFF;
-
-diff --git a/src/share/native/sun/font/layout/LookupProcessor.cpp b/src/share/native/sun/font/layout/LookupProcessor.cpp
---- jdk/src/share/native/sun/font/layout/LookupProcessor.cpp
-+++ jdk/src/share/native/sun/font/layout/LookupProcessor.cpp
-@@ -25,7 +25,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-@@ -33,7 +33,7 @@
- #include "OpenTypeUtilities.h"
- #include "LEFontInstance.h"
- #include "OpenTypeTables.h"
--#include "Features.h"
-+#include "ICUFeatures.h"
- #include "Lookups.h"
- #include "ScriptAndLanguage.h"
- #include "GlyphDefinitionTables.h"
-@@ -45,8 +45,12 @@
- U_NAMESPACE_BEGIN
-
- le_uint32 LookupProcessor::applyLookupTable(const LookupTable *lookupTable, GlyphIterator *glyphIterator,
-- const LEFontInstance *fontInstance) const
-+ const LEFontInstance *fontInstance, LEErrorCode& success) const
- {
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-+
- le_uint16 lookupType = SWAPW(lookupTable->lookupType);
- le_uint16 subtableCount = SWAPW(lookupTable->subTableCount);
- le_int32 startPosition = glyphIterator->getCurrStreamPosition();
-@@ -55,9 +59,9 @@
- for (le_uint16 subtable = 0; subtable < subtableCount; subtable += 1) {
- const LookupSubtable *lookupSubtable = lookupTable->getLookupSubtable(subtable);
-
-- delta = applySubtable(lookupSubtable, lookupType, glyphIterator, fontInstance);
-+ delta = applySubtable(lookupSubtable, lookupType, glyphIterator, fontInstance, success);
-
-- if (delta > 0) {
-+ if (delta > 0 && LE_FAILURE(success)) {
- return 1;
- }
-
-@@ -69,8 +73,12 @@
-
- le_int32 LookupProcessor::process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments,
- le_bool rightToLeft, const GlyphDefinitionTableHeader *glyphDefinitionTableHeader,
-- const LEFontInstance *fontInstance) const
-+ const LEFontInstance *fontInstance, LEErrorCode& success) const
- {
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-+
- le_int32 glyphCount = glyphStorage.getGlyphCount();
-
- if (lookupSelectArray == NULL) {
-@@ -96,10 +104,9 @@
- glyphIterator.reset(lookupFlags, selectMask);
-
- while (glyphIterator.findFeatureTag()) {
-- le_uint32 delta = 1;
--
-- while (glyphIterator.next(delta)) {
-- delta = applyLookupTable(lookupTable, &glyphIterator, fontInstance);
-+ applyLookupTable(lookupTable, &glyphIterator, fontInstance, success);
-+ if (LE_FAILURE(success)) {
-+ return 0;
- }
- }
-
-@@ -111,12 +118,16 @@
- }
-
- le_uint32 LookupProcessor::applySingleLookup(le_uint16 lookupTableIndex, GlyphIterator *glyphIterator,
-- const LEFontInstance *fontInstance) const
-+ const LEFontInstance *fontInstance, LEErrorCode& success) const
- {
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-+
- const LookupTable *lookupTable = lookupListTable->getLookupTable(lookupTableIndex);
- le_uint16 lookupFlags = SWAPW(lookupTable->lookupFlags);
- GlyphIterator tempIterator(*glyphIterator, lookupFlags);
-- le_uint32 delta = applyLookupTable(lookupTable, &tempIterator, fontInstance);
-+ le_uint32 delta = applyLookupTable(lookupTable, &tempIterator, fontInstance, success);
-
- return delta;
- }
-@@ -141,7 +152,8 @@
-
- LookupProcessor::LookupProcessor(const char *baseAddress,
- Offset scriptListOffset, Offset featureListOffset, Offset lookupListOffset,
-- LETag scriptTag, LETag languageTag, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool orderFeatures)
-+ LETag scriptTag, LETag languageTag, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool orderFeatures,
-+ LEErrorCode& success)
- : lookupListTable(NULL), featureListTable(NULL), lookupSelectArray(NULL), lookupSelectCount(0),
- lookupOrderArray(NULL), lookupOrderCount(0)
- {
-@@ -151,6 +163,10 @@
- le_uint16 lookupListCount = 0;
- le_uint16 requiredFeatureIndex;
-
-+ if (LE_FAILURE(success)) {
-+ return;
-+ }
-+
- if (scriptListOffset != 0) {
- scriptListTable = (const ScriptListTable *) (baseAddress + scriptListOffset);
- langSysTable = scriptListTable->findLanguage(scriptTag, languageTag);
-@@ -177,6 +193,10 @@
- requiredFeatureIndex = SWAPW(langSysTable->reqFeatureIndex);
-
- lookupSelectArray = LE_NEW_ARRAY(FeatureMask, lookupListCount);
-+ if (lookupSelectArray == NULL) {
-+ success = LE_MEMORY_ALLOCATION_ERROR;
-+ return;
-+ }
-
- for (int i = 0; i < lookupListCount; i += 1) {
- lookupSelectArray[i] = 0;
-@@ -213,6 +233,10 @@
- }
-
- lookupOrderArray = LE_NEW_ARRAY(le_uint16, featureReferences);
-+ if (lookupOrderArray == NULL) {
-+ success = LE_MEMORY_ALLOCATION_ERROR;
-+ return;
-+ }
-
- for (le_int32 f = 0; f < featureMapCount; f += 1) {
- FeatureMap fm = featureMap[f];
-@@ -302,6 +326,8 @@
-
- LookupProcessor::LookupProcessor()
- {
-+ lookupOrderArray = NULL;
-+ lookupSelectArray = NULL;
- }
-
- LookupProcessor::~LookupProcessor()
-diff --git a/src/share/native/sun/font/layout/LookupProcessor.h b/src/share/native/sun/font/layout/LookupProcessor.h
---- jdk/src/share/native/sun/font/layout/LookupProcessor.h
-+++ jdk/src/share/native/sun/font/layout/LookupProcessor.h
-@@ -26,7 +26,7 @@
- /*
- *
- *
-- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
- *
- */
-
-@@ -59,21 +59,28 @@
- class LookupProcessor : public UMemory {
- public:
- le_int32 process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments,
-- le_bool rightToLeft, const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, const LEFontInstance *fontInstance) const;
-+ le_bool rightToLeft, const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, const LEFontInstance *fontInstance, LEErrorCode& success) const;
-
-- le_uint32 applyLookupTable(const LookupTable *lookupTable, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
-+ le_uint32 applyLookupTable(const LookupTable *lookupTable, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
-
-- le_uint32 applySingleLookup(le_uint16 lookupTableIndex, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
-+ le_uint32 applySingleLookup(le_uint16 lookupTableIndex, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
-
- virtual le_uint32 applySubtable(const LookupSubtable *lookupSubtable, le_uint16 subtableType,
-- GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const = 0;
-+ GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const = 0;
-
- virtual ~LookupProcessor();
-
- protected:
- LookupProcessor(const char *baseAddress,
-- Offset scriptListOffset, Offset featureListOffset, Offset lookupListOffset,
-- LETag scriptTag, LETag languageTag, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool orderFeatures);
-+ Offset scriptListOffset,
-+ Offset featureListOffset,
-+ Offset lookupListOffset,
-+ LETag scriptTag,
-+ LETag languageTag,
-+ const FeatureMap *featureMap,
-+ le_int32 featureMapCount,
-+ le_bool orderFeatures,
-+ LEErrorCode& success);
-
- LookupProcessor();
-
-diff --git a/src/share/native/sun/font/layout/MPreFixups.cpp b/src/share/native/sun/font/layout/MPreFixups.cpp
---- jdk/src/share/native/sun/font/layout/MPreFixups.cpp
-+++ jdk/src/share/native/sun/font/layout/MPreFixups.cpp
-@@ -25,7 +25,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 2002-2004 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 2002-2008 - All Rights Reserved
- *
- */
-
-@@ -65,8 +65,12 @@
- }
- }
-
--void MPreFixups::apply(LEGlyphStorage &glyphStorage)
-+void MPreFixups::apply(LEGlyphStorage &glyphStorage, LEErrorCode& success)
- {
-+ if (LE_FAILURE(success)) {
-+ return;
-+ }
-+
- for (le_int32 fixup = 0; fixup < fFixupCount; fixup += 1) {
- le_int32 baseIndex = fFixupData[fixup].fBaseIndex;
- le_int32 mpreIndex = fFixupData[fixup].fMPreIndex;
-@@ -90,6 +94,14 @@
- le_int32 mpreDest = baseIndex - mpreCount;
- LEGlyphID *mpreSave = LE_NEW_ARRAY(LEGlyphID, mpreCount);
- le_int32 *indexSave = LE_NEW_ARRAY(le_int32, mpreCount);
-+
-+ if (mpreSave == NULL || indexSave == NULL) {
-+ LE_DELETE_ARRAY(mpreSave);
-+ LE_DELETE_ARRAY(indexSave);
-+ success = LE_MEMORY_ALLOCATION_ERROR;
-+ return;
-+ }
-+
- le_int32 i;
-
- for (i = 0; i < mpreCount; i += 1) {
-diff --git a/src/share/native/sun/font/layout/MPreFixups.h b/src/share/native/sun/font/layout/MPreFixups.h
---- jdk/src/share/native/sun/font/layout/MPreFixups.h
-+++ jdk/src/share/native/sun/font/layout/MPreFixups.h
-@@ -25,7 +25,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 2002-2004 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 2002-2008 - All Rights Reserved
- *
- */
-
-@@ -54,7 +54,7 @@
-
- void add(le_int32 baseIndex, le_int32 mpreIndex);
-
-- void apply(LEGlyphStorage &glyphStorage);
-+ void apply(LEGlyphStorage &glyphStorage, LEErrorCode& success);
-
- private:
- FixupData *fFixupData;
-diff --git a/src/share/native/sun/font/layout/MarkToBasePosnSubtables.cpp b/src/share/native/sun/font/layout/MarkToBasePosnSubtables.cpp
---- jdk/src/share/native/sun/font/layout/MarkToBasePosnSubtables.cpp
-+++ jdk/src/share/native/sun/font/layout/MarkToBasePosnSubtables.cpp
-@@ -25,7 +25,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-@@ -108,11 +108,27 @@
- glyphIterator->setCurrGlyphBaseOffset(baseIterator.getCurrStreamPosition());
-
- if (glyphIterator->isRightToLeft()) {
-+ // FIXME: need similar patch to below; also in MarkToLigature and MarkToMark
-+ // (is there a better way to approach this for all the cases?)
- glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX, anchorDiffY, -markAdvance.fX, -markAdvance.fY);
- } else {
- LEPoint baseAdvance;
-
- fontInstance->getGlyphAdvance(baseGlyph, pixels);
-+
-+ //JK: adjustment needs to account for non-zero advance of any marks between base glyph and current mark
-+ GlyphIterator gi(baseIterator, (le_uint16)0); // copy of baseIterator that won't ignore marks
-+ gi.next(); // point beyond the base glyph
-+ while (gi.getCurrStreamPosition() < glyphIterator->getCurrStreamPosition()) { // for all intervening glyphs (marks)...
-+ LEGlyphID otherMark = gi.getCurrGlyphID();
-+ LEPoint px;
-+ fontInstance->getGlyphAdvance(otherMark, px); // get advance, in case it's non-zero
-+ pixels.fX += px.fX; // and add that to the base glyph's advance
-+ pixels.fY += px.fY;
-+ gi.next();
-+ }
-+ // end of JK patch
-+
- fontInstance->pixelsToUnits(pixels, baseAdvance);
-
- glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX - baseAdvance.fX, anchorDiffY - baseAdvance.fY, -markAdvance.fX, -markAdvance.fY);
-diff --git a/src/share/native/sun/font/layout/MultipleSubstSubtables.cpp b/src/share/native/sun/font/layout/MultipleSubstSubtables.cpp
---- jdk/src/share/native/sun/font/layout/MultipleSubstSubtables.cpp
-+++ jdk/src/share/native/sun/font/layout/MultipleSubstSubtables.cpp
-@@ -25,7 +25,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
- *
- */
-
-@@ -39,8 +39,12 @@
-
- U_NAMESPACE_BEGIN
-
--le_uint32 MultipleSubstitutionSubtable::process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter) const
-+le_uint32 MultipleSubstitutionSubtable::process(GlyphIterator *glyphIterator, LEErrorCode& success, const LEGlyphFilter *filter) const
- {
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-+
- LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-
- // If there's a filter, we only want to do the
-@@ -87,7 +91,11 @@
- }
- }
-
-- LEGlyphID *newGlyphs = glyphIterator->insertGlyphs(glyphCount);
-+ LEGlyphID *newGlyphs = glyphIterator->insertGlyphs(glyphCount, success);
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-+
- le_int32 insert = 0, direction = 1;
-
- if (glyphIterator->isRightToLeft()) {
-diff --git a/src/share/native/sun/font/layout/MultipleSubstSubtables.h b/src/share/native/sun/font/layout/MultipleSubstSubtables.h
---- jdk/src/share/native/sun/font/layout/MultipleSubstSubtables.h
-+++ jdk/src/share/native/sun/font/layout/MultipleSubstSubtables.h
-@@ -25,7 +25,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
- *
- */
-
-@@ -56,7 +56,7 @@
- le_uint16 sequenceCount;
- Offset sequenceTableOffsetArray[ANY_NUMBER];
-
-- le_uint32 process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter = NULL) const;
-+ le_uint32 process(GlyphIterator *glyphIterator, LEErrorCode& success, const LEGlyphFilter *filter = NULL) const;
- };
-
- U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/OpenTypeLayoutEngine.cpp b/src/share/native/sun/font/layout/OpenTypeLayoutEngine.cpp
---- jdk/src/share/native/sun/font/layout/OpenTypeLayoutEngine.cpp
-+++ jdk/src/share/native/sun/font/layout/OpenTypeLayoutEngine.cpp
-@@ -26,7 +26,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-@@ -35,8 +35,10 @@
- #include "LELanguages.h"
-
- #include "LayoutEngine.h"
-+#include "CanonShaping.h"
- #include "OpenTypeLayoutEngine.h"
- #include "ScriptAndLanguageTags.h"
-+#include "CharSubstitutionFilter.h"
-
- #include "GlyphSubstitutionTables.h"
- #include "GlyphDefinitionTables.h"
-@@ -47,6 +49,8 @@
-
- #include "GDEFMarkFilter.h"
-
-+#include "KernTable.h"
-+
- U_NAMESPACE_BEGIN
-
- UOBJECT_DEFINE_RTTI_IMPLEMENTATION(OpenTypeLayoutEngine)
-@@ -57,6 +61,8 @@
- #define kernFeatureTag LE_KERN_FEATURE_TAG
- #define markFeatureTag LE_MARK_FEATURE_TAG
- #define mkmkFeatureTag LE_MKMK_FEATURE_TAG
-+#define loclFeatureTag LE_LOCL_FEATURE_TAG
-+#define caltFeatureTag LE_CALT_FEATURE_TAG
-
- // 'dlig' not used at the moment
- #define dligFeatureTag 0x646C6967
-@@ -71,8 +77,10 @@
- #define paltFeatureMask 0x08000000UL
- #define markFeatureMask 0x04000000UL
- #define mkmkFeatureMask 0x02000000UL
-+#define loclFeatureMask 0x01000000UL
-+#define caltFeatureMask 0x00800000UL
-
--#define minimalFeatures (ccmpFeatureMask | markFeatureMask | mkmkFeatureMask)
-+#define minimalFeatures (ccmpFeatureMask | markFeatureMask | mkmkFeatureMask | loclFeatureMask | caltFeatureMask)
- #define ligaFeatures (ligaFeatureMask | cligFeatureMask | minimalFeatures)
- #define kernFeatures (kernFeatureMask | paltFeatureMask | minimalFeatures)
- #define kernAndLigaFeatures (ligaFeatures | kernFeatures)
-@@ -85,14 +93,16 @@
- {kernFeatureTag, kernFeatureMask},
- {paltFeatureTag, paltFeatureMask},
- {markFeatureTag, markFeatureMask},
-- {mkmkFeatureTag, mkmkFeatureMask}
-+ {mkmkFeatureTag, mkmkFeatureMask},
-+ {loclFeatureTag, loclFeatureMask},
-+ {caltFeatureTag, caltFeatureMask}
- };
-
- static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap);
-
- OpenTypeLayoutEngine::OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-- le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable)
-- : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags), fFeatureMask(minimalFeatures),
-+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success)
-+ : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success), fFeatureMask(minimalFeatures),
- fFeatureMap(featureMap), fFeatureMapCount(featureMapCount), fFeatureOrder(FALSE),
- fGSUBTable(gsubTable), fGDEFTable(NULL), fGPOSTable(NULL), fSubstitutionFilter(NULL)
- {
-@@ -102,6 +112,15 @@
-
- applyTypoFlags();
-
-+ setScriptAndLanguageTags();
-+
-+ fGDEFTable = (const GlyphDefinitionTableHeader *) getFontTable(gdefTableTag);
-+
-+// JK patch, 2008-05-30 - see Sinhala bug report and LKLUG font
-+// if (gposTable != NULL && gposTable->coversScriptAndLanguage(fScriptTag, fLangSysTag)) {
-+ if (gposTable != NULL && gposTable->coversScript(fScriptTag)) {
-+ fGPOSTable = gposTable;
-+ }
- }
-
- void OpenTypeLayoutEngine::applyTypoFlags() {
-@@ -109,7 +128,7 @@
- const LEFontInstance *fontInstance = fFontInstance;
-
- // todo: switch to more flags and bitfield rather than list of feature tags?
-- switch (typoFlags) {
-+ switch (typoFlags & ~0x80000000L) {
- case 0: break; // default
- case 1: fFeatureMask = kernFeatures; break;
- case 2: fFeatureMask = ligaFeatures; break;
-@@ -117,6 +136,10 @@
- default: break;
- }
-
-+ if (typoFlags & LE_CHAR_FILTER_FEATURE_FLAG) {
-+ fSubstitutionFilter = new CharSubstitutionFilter(fontInstance);
-+ }
-+
- }
-
- void OpenTypeLayoutEngine::reset()
-@@ -129,8 +152,8 @@
- }
-
- OpenTypeLayoutEngine::OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-- le_int32 typoFlags)
-- : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags), fFeatureOrder(FALSE),
-+ le_int32 typoFlags, LEErrorCode &success)
-+ : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success), fFeatureOrder(FALSE),
- fGSUBTable(NULL), fGDEFTable(NULL), fGPOSTable(NULL), fSubstitutionFilter(NULL)
- {
- applyTypoFlags();
-@@ -151,8 +174,23 @@
- if (scriptCode < 0 || scriptCode >= scriptCodeCount) {
- return 0xFFFFFFFF;
- }
-+ return scriptTags[scriptCode];
-+}
-
-- return scriptTags[scriptCode];
-+LETag OpenTypeLayoutEngine::getV2ScriptTag(le_int32 scriptCode)
-+{
-+ switch (scriptCode) {
-+ case bengScriptCode : return bng2ScriptTag;
-+ case devaScriptCode : return dev2ScriptTag;
-+ case gujrScriptCode : return gjr2ScriptTag;
-+ case guruScriptCode : return gur2ScriptTag;
-+ case kndaScriptCode : return knd2ScriptTag;
-+ case mlymScriptCode : return mlm2ScriptTag;
-+ case oryaScriptCode : return ory2ScriptTag;
-+ case tamlScriptCode : return tml2ScriptTag;
-+ case teluScriptCode : return tel2ScriptTag;
-+ default: return nullScriptTag;
-+ }
- }
-
- LETag OpenTypeLayoutEngine::getLangSysTag(le_int32 languageCode)
-@@ -167,6 +205,7 @@
- void OpenTypeLayoutEngine::setScriptAndLanguageTags()
- {
- fScriptTag = getScriptTag(fScriptCode);
-+ fScriptTagV2 = getV2ScriptTag(fScriptCode);
- fLangSysTag = getLangSysTag(fLanguageCode);
- }
-
-@@ -182,20 +221,39 @@
- return 0;
- }
-
-- le_int32 outCharCount = LayoutEngine::characterProcessing(chars, offset, count, max, rightToLeft, outChars, glyphStorage, success);
-+ // This is the cheapest way to get mark reordering only for Hebrew.
-+ // We could just do the mark reordering for all scripts, but most
-+ // of them probably don't need it... Another option would be to
-+ // add a HebrewOpenTypeLayoutEngine subclass, but the only thing it
-+ // would need to do is mark reordering, so that seems like overkill.
-+ if (fScriptCode == hebrScriptCode) {
-+ outChars = LE_NEW_ARRAY(LEUnicode, count);
-+
-+ if (outChars == NULL) {
-+ success = LE_MEMORY_ALLOCATION_ERROR;
-+ return 0;
-+ }
-+
-+ if (LE_FAILURE(success)) {
-+ LE_DELETE_ARRAY(outChars);
-+ return 0;
-+ }
-+
-+ CanonShaping::reorderMarks(&chars[offset], count, rightToLeft, outChars, glyphStorage);
-+ }
-
- if (LE_FAILURE(success)) {
- return 0;
- }
-
-- glyphStorage.allocateGlyphArray(outCharCount, rightToLeft, success);
-+ glyphStorage.allocateGlyphArray(count, rightToLeft, success);
- glyphStorage.allocateAuxData(success);
-
-- for (le_int32 i = 0; i < outCharCount; i += 1) {
-+ for (le_int32 i = 0; i < count; i += 1) {
- glyphStorage.setAuxData(i, fFeatureMask, success);
- }
-
-- return outCharCount;
-+ return count;
- }
-
- // Input: characters, tags
-@@ -219,13 +277,45 @@
- }
-
- if (fGSUBTable != NULL) {
-+ if (fScriptTagV2 != nullScriptTag && fGSUBTable->coversScriptAndLanguage(fScriptTagV2,fLangSysTag)) {
-+ count = fGSUBTable->process(glyphStorage, rightToLeft, fScriptTagV2, fLangSysTag, fGDEFTable, fSubstitutionFilter,
-+ fFeatureMap, fFeatureMapCount, fFeatureOrder, success);
-+
-+ } else {
- count = fGSUBTable->process(glyphStorage, rightToLeft, fScriptTag, fLangSysTag, fGDEFTable, fSubstitutionFilter,
-- fFeatureMap, fFeatureMapCount, fFeatureOrder);
-+ fFeatureMap, fFeatureMapCount, fFeatureOrder, success);
-+ }
- }
-
- return count;
- }
-+// Input: characters, tags
-+// Output: glyphs, char indices
-+le_int32 OpenTypeLayoutEngine::glyphSubstitution(le_int32 count, le_int32 max, le_bool rightToLeft,
-+ LEGlyphStorage &glyphStorage, LEErrorCode &success)
-+{
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-
-+ if ( count < 0 || max < 0 ) {
-+ success = LE_ILLEGAL_ARGUMENT_ERROR;
-+ return 0;
-+ }
-+
-+ if (fGSUBTable != NULL) {
-+ if (fScriptTagV2 != nullScriptTag && fGSUBTable->coversScriptAndLanguage(fScriptTagV2,fLangSysTag)) {
-+ count = fGSUBTable->process(glyphStorage, rightToLeft, fScriptTagV2, fLangSysTag, fGDEFTable, fSubstitutionFilter,
-+ fFeatureMap, fFeatureMapCount, fFeatureOrder, success);
-+
-+ } else {
-+ count = fGSUBTable->process(glyphStorage, rightToLeft, fScriptTag, fLangSysTag, fGDEFTable, fSubstitutionFilter,
-+ fFeatureMap, fFeatureMapCount, fFeatureOrder, success);
-+ }
-+ }
-+
-+ return count;
-+}
- le_int32 OpenTypeLayoutEngine::glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success)
- {
- if (LE_FAILURE(success)) {
-@@ -257,6 +347,10 @@
-
- outCharCount = characterProcessing(chars, offset, count, max, rightToLeft, outChars, fakeGlyphStorage, success);
-
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-+
- if (outChars != NULL) {
- fakeGlyphCount = glyphProcessing(outChars, 0, outCharCount, outCharCount, rightToLeft, fakeGlyphStorage, success);
- LE_DELETE_ARRAY(outChars); // FIXME: a subclass may have allocated this, in which case this delete might not work...
-@@ -266,6 +360,10 @@
- //adjustGlyphs(chars, offset, count, rightToLeft, fakeGlyphs, fakeGlyphCount);
- }
-
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-+
- outGlyphCount = glyphPostProcessing(fakeGlyphStorage, glyphStorage, success);
-
- return outGlyphCount;
-@@ -285,8 +383,11 @@
- }
-
- le_int32 glyphCount = glyphStorage.getGlyphCount();
-+ if (glyphCount == 0) {
-+ return;
-+ }
-
-- if (glyphCount > 0 && fGPOSTable != NULL) {
-+ if (fGPOSTable != NULL) {
- GlyphPositionAdjustments *adjustments = new GlyphPositionAdjustments(glyphCount);
- le_int32 i;
-
-@@ -309,9 +410,21 @@
- }
- #endif
-
-- fGPOSTable->process(glyphStorage, adjustments, reverse, fScriptTag, fLangSysTag, fGDEFTable, fFontInstance,
-+ if (fGPOSTable != NULL) {
-+ if (fScriptTagV2 != nullScriptTag && fGPOSTable->coversScriptAndLanguage(fScriptTagV2,fLangSysTag)) {
-+ fGPOSTable->process(glyphStorage, adjustments, reverse, fScriptTagV2, fLangSysTag, fGDEFTable, success, fFontInstance,
- fFeatureMap, fFeatureMapCount, fFeatureOrder);
-
-+ } else {
-+ fGPOSTable->process(glyphStorage, adjustments, reverse, fScriptTag, fLangSysTag, fGDEFTable, success, fFontInstance,
-+ fFeatureMap, fFeatureMapCount, fFeatureOrder);
-+ }
-+ } else if ( fTypoFlags & 0x1 ) {
-+ static const le_uint32 kernTableTag = LE_KERN_TABLE_TAG;
-+ KernTable kt(fFontInstance, getFontTable(kernTableTag));
-+ kt.process(glyphStorage);
-+ }
-+
- float xAdjust = 0, yAdjust = 0;
-
- for (i = 0; i < glyphCount; i += 1) {
-@@ -344,6 +457,21 @@
- glyphStorage.adjustPosition(glyphCount, xAdjust, -yAdjust, success);
-
- delete adjustments;
-+ } else {
-+ // if there was no GPOS table, maybe there's non-OpenType kerning we can use
-+ LayoutEngine::adjustGlyphPositions(chars, offset, count, reverse, glyphStorage, success);
-+ }
-+
-+ LEGlyphID zwnj = fFontInstance->mapCharToGlyph(0x200C);
-+
-+ if (zwnj != 0x0000) {
-+ for (le_int32 g = 0; g < glyphCount; g += 1) {
-+ LEGlyphID glyph = glyphStorage[g];
-+
-+ if (glyph == zwnj) {
-+ glyphStorage[g] = LE_SET_GLYPH(glyph, 0xFFFF);
-+ }
-+ }
- }
-
- #if 0
-diff --git a/src/share/native/sun/font/layout/OpenTypeLayoutEngine.h b/src/share/native/sun/font/layout/OpenTypeLayoutEngine.h
---- jdk/src/share/native/sun/font/layout/OpenTypeLayoutEngine.h
-+++ jdk/src/share/native/sun/font/layout/OpenTypeLayoutEngine.h
-@@ -24,7 +24,7 @@
- */
-
- /*
-- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-@@ -67,7 +67,7 @@
- *
- * @internal
- */
--class OpenTypeLayoutEngine : public LayoutEngine
-+class U_LAYOUT_API OpenTypeLayoutEngine : public LayoutEngine
- {
- public:
- /**
-@@ -80,6 +80,7 @@
- * @param scriptCode - the script
- * @param langaugeCode - the language
- * @param gsubTable - the GSUB table
-+ * @param success - set to an error code if the operation fails
- *
- * @see LayoutEngine::layoutEngineFactory
- * @see ScriptAndLangaugeTags.h for script and language codes
-@@ -87,7 +88,7 @@
- * @internal
- */
- OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-- le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable);
-+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success);
-
- /**
- * This constructor is used when the font requires a "canned" GSUB table which can't be known
-@@ -96,11 +97,12 @@
- * @param fontInstance - the font
- * @param scriptCode - the script
- * @param langaugeCode - the language
-+ * @param success - set to an error code if the operation fails
- *
- * @internal
- */
- OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-- le_int32 typoFlags);
-+ le_int32 typoFlags, LEErrorCode &success);
-
- /**
- * The destructor, virtual for correct polymorphic invocation.
-@@ -112,6 +114,8 @@
- /**
- * A convenience method used to convert the script code into
- * the four byte script tag required by OpenType.
-+ * For Indic languages where multiple script tags exist,
-+ * the version 1 (old style) tag is returned.
- *
- * @param scriptCode - the script code
- *
-@@ -120,6 +124,19 @@
- * @internal
- */
- static LETag getScriptTag(le_int32 scriptCode);
-+ /**
-+ * A convenience method used to convert the script code into
-+ * the four byte script tag required by OpenType.
-+ * For Indic languages where multiple script tags exist,
-+ * the version 2 tag is returned.
-+ *
-+ * @param scriptCode - the script code
-+ *
-+ * @return the four byte script tag
-+ *
-+ * @internal
-+ */
-+ static LETag getV2ScriptTag(le_int32 scriptCode);
-
- /**
- * A convenience method used to convert the langauge code into
-@@ -147,6 +164,13 @@
- */
- static UClassID getStaticClassID();
-
-+ /**
-+ * The array of language tags, indexed by language code.
-+ *
-+ * @internal
-+ */
-+ static const LETag languageTags[];
-+
- private:
-
- /**
-@@ -161,11 +185,6 @@
- static const LETag scriptTags[];
-
- /**
-- * The array of language tags, indexed by language code.
-- */
-- static const LETag languageTags[];
--
-- /**
- * apply the typoflags. Only called by the c'tors.
- */
- void applyTypoFlags();
-@@ -243,6 +262,13 @@
- LETag fScriptTag;
-
- /**
-+ * The four byte script tag for V2 fonts.
-+ *
-+ * @internal
-+ */
-+ LETag fScriptTagV2;
-+
-+ /**
- * The four byte language tag
- *
- * @internal
-@@ -309,6 +335,8 @@
- virtual le_int32 glyphProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
- LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-+ virtual le_int32 glyphSubstitution(le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+
- /**
- * This method does any processing necessary to convert "fake"
- * glyph indices used by the glyphProcessing method into "real" glyph
-diff --git a/src/share/native/sun/font/layout/OpenTypeTables.h b/src/share/native/sun/font/layout/OpenTypeTables.h
---- jdk/src/share/native/sun/font/layout/OpenTypeTables.h
-+++ jdk/src/share/native/sun/font/layout/OpenTypeTables.h
-@@ -25,7 +25,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-@@ -46,6 +46,8 @@
- typedef le_uint16 Offset;
- typedef le_uint8 ATag[4];
- typedef le_uint32 fixed32;
-+
-+#define LE_GLYPH_GROUP_MASK 0x00000001UL
- typedef le_uint32 FeatureMask;
-
- #define SWAPT(atag) ((LETag) ((atag[0] << 24) + (atag[1] << 16) + (atag[2] << 8) + atag[3]))
-diff --git a/src/share/native/sun/font/layout/OpenTypeUtilities.cpp b/src/share/native/sun/font/layout/OpenTypeUtilities.cpp
---- jdk/src/share/native/sun/font/layout/OpenTypeUtilities.cpp
-+++ jdk/src/share/native/sun/font/layout/OpenTypeUtilities.cpp
-@@ -25,7 +25,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-@@ -111,6 +111,10 @@
- le_int32 probe = power;
- le_int32 range = 0;
-
-+ if (recordCount == 0) {
-+ return -1;
-+ }
-+
- if (SWAPW(records[extra].firstGlyph) <= glyphID) {
- range = extra;
- }
-diff --git a/src/share/native/sun/font/layout/PairPositioningSubtables.cpp b/src/share/native/sun/font/layout/PairPositioningSubtables.cpp
---- jdk/src/share/native/sun/font/layout/PairPositioningSubtables.cpp
-+++ jdk/src/share/native/sun/font/layout/PairPositioningSubtables.cpp
-@@ -101,7 +101,10 @@
- valueRecord2->adjustPosition(SWAPW(valueFormat2), (char *) this, *glyphIterator, fontInstance);
- }
-
-- return 2;
-+ // back up glyphIterator so second glyph can be
-+ // first glyph in the next pair
-+ glyphIterator->prev();
-+ return 1;
- }
-
- return 0;
-@@ -137,7 +140,10 @@
- valueRecord2->adjustPosition(SWAPW(valueFormat2), (const char *) this, *glyphIterator, fontInstance);
- }
-
-- return 2;
-+ // back up glyphIterator so second glyph can be
-+ // first glyph in the next pair
-+ glyphIterator->prev();
-+ return 1;
- }
-
- return 0;
-@@ -145,6 +151,20 @@
-
- const PairValueRecord *PairPositioningFormat1Subtable::findPairValueRecord(TTGlyphID glyphID, const PairValueRecord *records, le_uint16 recordCount, le_uint16 recordSize) const
- {
-+#if 1
-+ // The OpenType spec. says that the ValueRecord table is
-+ // sorted by secondGlyph. Unfortunately, there are fonts
-+ // around that have an unsorted ValueRecord table.
-+ const PairValueRecord *record = records;
-+
-+ for(le_int32 r = 0; r < recordCount; r += 1) {
-+ if (SWAPW(record->secondGlyph) == glyphID) {
-+ return record;
-+ }
-+
-+ record = (const PairValueRecord *) ((char *) record + recordSize);
-+ }
-+#else
- le_uint8 bit = OpenTypeUtilities::highBit(recordCount);
- le_uint16 power = 1 << bit;
- le_uint16 extra = (recordCount - power) * recordSize;
-@@ -168,6 +188,7 @@
- if (SWAPW(record->secondGlyph) == glyphID) {
- return record;
- }
-+#endif
-
- return NULL;
- }
-diff --git a/src/share/native/sun/font/layout/ScriptAndLanguage.cpp b/src/share/native/sun/font/layout/ScriptAndLanguage.cpp
---- jdk/src/share/native/sun/font/layout/ScriptAndLanguage.cpp
-+++ jdk/src/share/native/sun/font/layout/ScriptAndLanguage.cpp
-@@ -26,7 +26,7 @@
- /*
- *
- *
-- * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-@@ -56,20 +56,45 @@
- return (const LangSysTable *) ((char *)this + langSysTableOffset);
- }
-
-- return 0;
-+ return NULL;
- }
-
- const ScriptTable *ScriptListTable::findScript(LETag scriptTag) const
- {
-+ /*
-+ * There are some fonts that have a large, bogus value for scriptCount. To try
-+ * and protect against this, we use the offset in the first scriptRecord,
-+ * which we know has to be past the end of the scriptRecordArray, to compute
-+ * a value which is greater than or equal to the actual script count.
-+ *
-+ * Note: normally, the first offset will point to just after the scriptRecordArray,
-+ * but there's no guarantee of this, only that it's *after* the scriptRecordArray.
-+ * Because of this, a binary serach isn't safe, because the new count may include
-+ * data that's not actually in the scriptRecordArray and hence the array will appear
-+ * to be unsorted.
-+ */
- le_uint16 count = SWAPW(scriptCount);
-- Offset scriptTableOffset =
-- OpenTypeUtilities::getTagOffset(scriptTag, scriptRecordArray, count);
-+ le_uint16 limit = ((SWAPW(scriptRecordArray[0].offset) - sizeof(ScriptListTable)) / sizeof(scriptRecordArray)) + ANY_NUMBER;
-+ Offset scriptTableOffset = 0;
-+
-+ if (count > limit) {
-+ // the scriptCount value is bogus; do a linear search
-+ // because limit may still be too large.
-+ for(le_int32 s = 0; s < limit; s += 1) {
-+ if (SWAPT(scriptRecordArray[s].tag) == scriptTag) {
-+ scriptTableOffset = SWAPW(scriptRecordArray[s].offset);
-+ break;
-+ }
-+ }
-+ } else {
-+ scriptTableOffset = OpenTypeUtilities::getTagOffset(scriptTag, scriptRecordArray, count);
-+ }
-
- if (scriptTableOffset != 0) {
- return (const ScriptTable *) ((char *)this + scriptTableOffset);
- }
-
-- return 0;
-+ return NULL;
- }
-
- const LangSysTable *ScriptListTable::findLanguage(LETag scriptTag, LETag languageTag, le_bool exactMatch) const
-@@ -77,7 +102,7 @@
- const ScriptTable *scriptTable = findScript(scriptTag);
-
- if (scriptTable == 0) {
-- return 0;
-+ return NULL;
- }
-
- return scriptTable->findLanguage(languageTag, exactMatch);
-diff --git a/src/share/native/sun/font/layout/ScriptAndLanguageTags.cpp b/src/share/native/sun/font/layout/ScriptAndLanguageTags.cpp
---- jdk/src/share/native/sun/font/layout/ScriptAndLanguageTags.cpp
-+++ jdk/src/share/native/sun/font/layout/ScriptAndLanguageTags.cpp
-@@ -25,10 +25,12 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2004. All Rights Reserved.
-+ * (C) Copyright IBM Corp. 1998-2010. All Rights Reserved.
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
-+ *
-+ * Generated on: 10/26/2010 02:53:33 PM PDT
- */
-
- #include "LETypes.h"
-@@ -39,13 +41,13 @@
-
- const LETag OpenTypeLayoutEngine::scriptTags[] = {
- zyyyScriptTag, /* 'zyyy' (COMMON) */
-- qaaiScriptTag, /* 'qaai' (INHERITED) */
-+ zinhScriptTag, /* 'zinh' (INHERITED) */
- arabScriptTag, /* 'arab' (ARABIC) */
- armnScriptTag, /* 'armn' (ARMENIAN) */
- bengScriptTag, /* 'beng' (BENGALI) */
- bopoScriptTag, /* 'bopo' (BOPOMOFO) */
- cherScriptTag, /* 'cher' (CHEROKEE) */
-- qaacScriptTag, /* 'qaac' (COPTIC) */
-+ coptScriptTag, /* 'copt' (COPTIC) */
- cyrlScriptTag, /* 'cyrl' (CYRILLIC) */
- dsrtScriptTag, /* 'dsrt' (DESERET) */
- devaScriptTag, /* 'deva' (DEVANAGARI) */
-@@ -62,7 +64,7 @@
- kndaScriptTag, /* 'knda' (KANNADA) */
- kanaScriptTag, /* 'kana' (KATAKANA) */
- khmrScriptTag, /* 'khmr' (KHMER) */
-- laooScriptTag, /* 'laoo' (LAO) */
-+ laooScriptTag, /* 'lao ' (LAO) */
- latnScriptTag, /* 'latn' (LATIN) */
- mlymScriptTag, /* 'mlym' (MALAYALAM) */
- mongScriptTag, /* 'mong' (MONGOLIAN) */
-@@ -79,7 +81,7 @@
- thaiScriptTag, /* 'thai' (THAI) */
- tibtScriptTag, /* 'tibt' (TIBETAN) */
- cansScriptTag, /* 'cans' (CANADIAN_ABORIGINAL) */
-- yiiiScriptTag, /* 'yiii' (YI) */
-+ yiiiScriptTag, /* 'yi ' (YI) */
- tglgScriptTag, /* 'tglg' (TAGALOG) */
- hanoScriptTag, /* 'hano' (HANUNOO) */
- buhdScriptTag, /* 'buhd' (BUHID) */
-@@ -92,7 +94,99 @@
- shawScriptTag, /* 'shaw' (SHAVIAN) */
- taleScriptTag, /* 'tale' (TAI_LE) */
- ugarScriptTag, /* 'ugar' (UGARITIC) */
-- hrktScriptTag /* 'hrkt' (KATAKANA_OR_HIRAGANA) */
-+ hrktScriptTag, /* 'hrkt' (KATAKANA_OR_HIRAGANA) */
-+ bugiScriptTag, /* 'bugi' (BUGINESE) */
-+ glagScriptTag, /* 'glag' (GLAGOLITIC) */
-+ kharScriptTag, /* 'khar' (KHAROSHTHI) */
-+ syloScriptTag, /* 'sylo' (SYLOTI_NAGRI) */
-+ taluScriptTag, /* 'talu' (NEW_TAI_LUE) */
-+ tfngScriptTag, /* 'tfng' (TIFINAGH) */
-+ xpeoScriptTag, /* 'xpeo' (OLD_PERSIAN) */
-+ baliScriptTag, /* 'bali' (BALINESE) */
-+ batkScriptTag, /* 'batk' (BATAK) */
-+ blisScriptTag, /* 'blis' (BLIS) */
-+ brahScriptTag, /* 'brah' (BRAHMI) */
-+ chamScriptTag, /* 'cham' (CHAM) */
-+ cirtScriptTag, /* 'cirt' (CIRT) */
-+ cyrsScriptTag, /* 'cyrs' (CYRS) */
-+ egydScriptTag, /* 'egyd' (EGYD) */
-+ egyhScriptTag, /* 'egyh' (EGYH) */
-+ egypScriptTag, /* 'egyp' (EGYPTIAN_HIEROGLYPHS) */
-+ geokScriptTag, /* 'geok' (GEOK) */
-+ hansScriptTag, /* 'hans' (HANS) */
-+ hantScriptTag, /* 'hant' (HANT) */
-+ hmngScriptTag, /* 'hmng' (HMNG) */
-+ hungScriptTag, /* 'hung' (HUNG) */
-+ indsScriptTag, /* 'inds' (INDS) */
-+ javaScriptTag, /* 'java' (JAVANESE) */
-+ kaliScriptTag, /* 'kali' (KAYAH_LI) */
-+ latfScriptTag, /* 'latf' (LATF) */
-+ latgScriptTag, /* 'latg' (LATG) */
-+ lepcScriptTag, /* 'lepc' (LEPCHA) */
-+ linaScriptTag, /* 'lina' (LINA) */
-+ mandScriptTag, /* 'mand' (MANDAIC) */
-+ mayaScriptTag, /* 'maya' (MAYA) */
-+ meroScriptTag, /* 'mero' (MERO) */
-+ nkooScriptTag, /* 'nko ' (NKO) */
-+ orkhScriptTag, /* 'orkh' (OLD_TURKIC) */
-+ permScriptTag, /* 'perm' (PERM) */
-+ phagScriptTag, /* 'phag' (PHAGS_PA) */
-+ phnxScriptTag, /* 'phnx' (PHOENICIAN) */
-+ plrdScriptTag, /* 'plrd' (PLRD) */
-+ roroScriptTag, /* 'roro' (RORO) */
-+ saraScriptTag, /* 'sara' (SARA) */
-+ syreScriptTag, /* 'syre' (SYRE) */
-+ syrjScriptTag, /* 'syrj' (SYRJ) */
-+ syrnScriptTag, /* 'syrn' (SYRN) */
-+ tengScriptTag, /* 'teng' (TENG) */
-+ vaiiScriptTag, /* 'vai ' (VAI) */
-+ vispScriptTag, /* 'visp' (VISP) */
-+ xsuxScriptTag, /* 'xsux' (CUNEIFORM) */
-+ zxxxScriptTag, /* 'zxxx' (ZXXX) */
-+ zzzzScriptTag, /* 'zzzz' (UNKNOWN) */
-+ cariScriptTag, /* 'cari' (CARIAN) */
-+ jpanScriptTag, /* 'jpan' (JPAN) */
-+ lanaScriptTag, /* 'lana' (TAI_THAM) */
-+ lyciScriptTag, /* 'lyci' (LYCIAN) */
-+ lydiScriptTag, /* 'lydi' (LYDIAN) */
-+ olckScriptTag, /* 'olck' (OL_CHIKI) */
-+ rjngScriptTag, /* 'rjng' (REJANG) */
-+ saurScriptTag, /* 'saur' (SAURASHTRA) */
-+ sgnwScriptTag, /* 'sgnw' (SGNW) */
-+ sundScriptTag, /* 'sund' (SUNDANESE) */
-+ moonScriptTag, /* 'moon' (MOON) */
-+ mteiScriptTag, /* 'mtei' (MEETEI_MAYEK) */
-+ armiScriptTag, /* 'armi' (IMPERIAL_ARAMAIC) */
-+ avstScriptTag, /* 'avst' (AVESTAN) */
-+ cakmScriptTag, /* 'cakm' (CAKM) */
-+ koreScriptTag, /* 'kore' (KORE) */
-+ kthiScriptTag, /* 'kthi' (KAITHI) */
-+ maniScriptTag, /* 'mani' (MANI) */
-+ phliScriptTag, /* 'phli' (INSCRIPTIONAL_PAHLAVI) */
-+ phlpScriptTag, /* 'phlp' (PHLP) */
-+ phlvScriptTag, /* 'phlv' (PHLV) */
-+ prtiScriptTag, /* 'prti' (INSCRIPTIONAL_PARTHIAN) */
-+ samrScriptTag, /* 'samr' (SAMARITAN) */
-+ tavtScriptTag, /* 'tavt' (TAI_VIET) */
-+ zmthScriptTag, /* 'zmth' (ZMTH) */
-+ zsymScriptTag, /* 'zsym' (ZSYM) */
-+ bamuScriptTag, /* 'bamu' (BAMUM) */
-+ lisuScriptTag, /* 'lisu' (LISU) */
-+ nkgbScriptTag, /* 'nkgb' (NKGB) */
-+ sarbScriptTag, /* 'sarb' (OLD_SOUTH_ARABIAN) */
-+ bassScriptTag, /* 'bass' (BASS) */
-+ duplScriptTag, /* 'dupl' (DUPL) */
-+ elbaScriptTag, /* 'elba' (ELBA) */
-+ granScriptTag, /* 'gran' (GRAN) */
-+ kpelScriptTag, /* 'kpel' (KPEL) */
-+ lomaScriptTag, /* 'loma' (LOMA) */
-+ mendScriptTag, /* 'mend' (MEND) */
-+ mercScriptTag, /* 'merc' (MERC) */
-+ narbScriptTag, /* 'narb' (NARB) */
-+ nbatScriptTag, /* 'nbat' (NBAT) */
-+ palmScriptTag, /* 'palm' (PALM) */
-+ sindScriptTag, /* 'sind' (SIND) */
-+ waraScriptTag /* 'wara' (WARA) */
- };
-
- const LETag OpenTypeLayoutEngine::languageTags[] = {
-@@ -125,7 +219,49 @@
- urdLanguageTag, /* 'URD' (Urdu) */
- zhpLanguageTag, /* 'ZHP' (Chinese (Phonetic)) */
- zhsLanguageTag, /* 'ZHS' (Chinese (Simplified)) */
-- zhtLanguageTag /* 'ZHT' (Chinese (Traditional)) */
-+ zhtLanguageTag, /* 'ZHT' (Chinese (Traditional)) */
-+ afkLanguageTag, /* 'AFK' (Afrikaans) */
-+ belLanguageTag, /* 'BEL' (Belarussian) */
-+ bgrLanguageTag, /* 'BGR' (Bulgarian) */
-+ catLanguageTag, /* 'CAT' (Catalan) */
-+ cheLanguageTag, /* 'CHE' (Chechen) */
-+ copLanguageTag, /* 'COP' (Coptic) */
-+ csyLanguageTag, /* 'CSY' (Czech) */
-+ danLanguageTag, /* 'DAN' (Danish) */
-+ deuLanguageTag, /* 'DEU' (German) */
-+ dznLanguageTag, /* 'DZN' (Dzongkha) */
-+ ellLanguageTag, /* 'ELL' (Greek) */
-+ engLanguageTag, /* 'ENG' (English) */
-+ espLanguageTag, /* 'ESP' (Spanish) */
-+ etiLanguageTag, /* 'ETI' (Estonian) */
-+ euqLanguageTag, /* 'EUQ' (Basque) */
-+ finLanguageTag, /* 'FIN' (Finnish) */
-+ fraLanguageTag, /* 'FRA' (French) */
-+ gaeLanguageTag, /* 'GAE' (Gaelic) */
-+ hauLanguageTag, /* 'HAU' (Hausa) */
-+ hrvLanguageTag, /* 'HRV' (Croation) */
-+ hunLanguageTag, /* 'HUN' (Hungarian) */
-+ hyeLanguageTag, /* 'HYE' (Armenian) */
-+ indLanguageTag, /* 'IND' (Indonesian) */
-+ itaLanguageTag, /* 'ITA' (Italian) */
-+ khmLanguageTag, /* 'KHM' (Khmer) */
-+ mngLanguageTag, /* 'MNG' (Mongolian) */
-+ mtsLanguageTag, /* 'MTS' (Maltese) */
-+ nepLanguageTag, /* 'NEP' (Nepali) */
-+ nldLanguageTag, /* 'NLD' (Dutch) */
-+ pasLanguageTag, /* 'PAS' (Pashto) */
-+ plkLanguageTag, /* 'PLK' (Polish) */
-+ ptgLanguageTag, /* 'PTG' (Portuguese) */
-+ romLanguageTag, /* 'ROM' (Romanian) */
-+ rusLanguageTag, /* 'RUS' (Russian) */
-+ skyLanguageTag, /* 'SKY' (Slovak) */
-+ slvLanguageTag, /* 'SLV' (Slovenian) */
-+ sqiLanguageTag, /* 'SQI' (Albanian) */
-+ srbLanguageTag, /* 'SRB' (Serbian) */
-+ sveLanguageTag, /* 'SVE' (Swedish) */
-+ tibLanguageTag, /* 'TIB' (Tibetan) */
-+ trkLanguageTag, /* 'TRK' (Turkish) */
-+ welLanguageTag /* 'WEL' (Welsh) */
- };
-
- U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/ScriptAndLanguageTags.h b/src/share/native/sun/font/layout/ScriptAndLanguageTags.h
---- jdk/src/share/native/sun/font/layout/ScriptAndLanguageTags.h
-+++ jdk/src/share/native/sun/font/layout/ScriptAndLanguageTags.h
-@@ -25,10 +25,12 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2004. All Rights Reserved.
-+ * (C) Copyright IBM Corp. 1998-2010. All Rights Reserved.
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
-+ *
-+ * Generated on: 10/26/2010 02:53:33 PM PDT
- */
-
- #ifndef __SCRIPTANDLANGUAGES_H
-@@ -36,55 +38,64 @@
-
- #include "LETypes.h"
-
--U_NAMESPACE_BEGIN
--
- /**
- * \file
- * \internal
- */
-
-+U_NAMESPACE_BEGIN
-+
- const LETag zyyyScriptTag = 0x7A797979; /* 'zyyy' (COMMON) */
--const LETag qaaiScriptTag = 0x71616169; /* 'qaai' (INHERITED) */
-+const LETag zinhScriptTag = 0x7A696E68; /* 'zinh' (INHERITED) */
- const LETag arabScriptTag = 0x61726162; /* 'arab' (ARABIC) */
- const LETag armnScriptTag = 0x61726D6E; /* 'armn' (ARMENIAN) */
- const LETag bengScriptTag = 0x62656E67; /* 'beng' (BENGALI) */
-+const LETag bng2ScriptTag = 0x626E6732; /* 'bng2' (BENGALI v.2) (manually added) */
- const LETag bopoScriptTag = 0x626F706F; /* 'bopo' (BOPOMOFO) */
- const LETag cherScriptTag = 0x63686572; /* 'cher' (CHEROKEE) */
--const LETag qaacScriptTag = 0x71616163; /* 'qaac' (COPTIC) */
-+const LETag coptScriptTag = 0x636F7074; /* 'copt' (COPTIC) */
- const LETag cyrlScriptTag = 0x6379726C; /* 'cyrl' (CYRILLIC) */
- const LETag dsrtScriptTag = 0x64737274; /* 'dsrt' (DESERET) */
- const LETag devaScriptTag = 0x64657661; /* 'deva' (DEVANAGARI) */
-+const LETag dev2ScriptTag = 0x64657632; /* 'dev2' (DEVANAGARI v.2) (manually added) */
- const LETag ethiScriptTag = 0x65746869; /* 'ethi' (ETHIOPIC) */
- const LETag georScriptTag = 0x67656F72; /* 'geor' (GEORGIAN) */
- const LETag gothScriptTag = 0x676F7468; /* 'goth' (GOTHIC) */
- const LETag grekScriptTag = 0x6772656B; /* 'grek' (GREEK) */
- const LETag gujrScriptTag = 0x67756A72; /* 'gujr' (GUJARATI) */
-+const LETag gjr2ScriptTag = 0x676A7232; /* 'gjr2' (GUJARATI v.2) (manually added) */
- const LETag guruScriptTag = 0x67757275; /* 'guru' (GURMUKHI) */
-+const LETag gur2ScriptTag = 0x67757232; /* 'gur2' (GURMUKHI v.2) (manually added) */
- const LETag haniScriptTag = 0x68616E69; /* 'hani' (HAN) */
- const LETag hangScriptTag = 0x68616E67; /* 'hang' (HANGUL) */
- const LETag hebrScriptTag = 0x68656272; /* 'hebr' (HEBREW) */
- const LETag hiraScriptTag = 0x68697261; /* 'hira' (HIRAGANA) */
- const LETag kndaScriptTag = 0x6B6E6461; /* 'knda' (KANNADA) */
-+const LETag knd2ScriptTag = 0x6B6E6432; /* 'knd2' (KANNADA v.2) (manually added) */
- const LETag kanaScriptTag = 0x6B616E61; /* 'kana' (KATAKANA) */
- const LETag khmrScriptTag = 0x6B686D72; /* 'khmr' (KHMER) */
--const LETag laooScriptTag = 0x6C616F6F; /* 'laoo' (LAO) */
-+const LETag laooScriptTag = 0x6C616F20; /* 'lao ' (LAO) */
- const LETag latnScriptTag = 0x6C61746E; /* 'latn' (LATIN) */
- const LETag mlymScriptTag = 0x6D6C796D; /* 'mlym' (MALAYALAM) */
-+const LETag mlm2ScriptTag = 0x6D6C6D32; /* 'mlm2' (MALAYALAM v.2) (manually added) */
- const LETag mongScriptTag = 0x6D6F6E67; /* 'mong' (MONGOLIAN) */
- const LETag mymrScriptTag = 0x6D796D72; /* 'mymr' (MYANMAR) */
- const LETag ogamScriptTag = 0x6F67616D; /* 'ogam' (OGHAM) */
- const LETag italScriptTag = 0x6974616C; /* 'ital' (OLD_ITALIC) */
- const LETag oryaScriptTag = 0x6F727961; /* 'orya' (ORIYA) */
-+const LETag ory2ScriptTag = 0x6F727932; /* 'ory2' (ORIYA v.2) (manually added) */
- const LETag runrScriptTag = 0x72756E72; /* 'runr' (RUNIC) */
- const LETag sinhScriptTag = 0x73696E68; /* 'sinh' (SINHALA) */
- const LETag syrcScriptTag = 0x73797263; /* 'syrc' (SYRIAC) */
- const LETag tamlScriptTag = 0x74616D6C; /* 'taml' (TAMIL) */
-+const LETag tml2ScriptTag = 0x746D6C32; /* 'tml2' (TAMIL v.2) (manually added) */
- const LETag teluScriptTag = 0x74656C75; /* 'telu' (TELUGU) */
-+const LETag tel2ScriptTag = 0x74656C32; /* 'tel2' (TELUGU v.2) (manually added) */
- const LETag thaaScriptTag = 0x74686161; /* 'thaa' (THAANA) */
- const LETag thaiScriptTag = 0x74686169; /* 'thai' (THAI) */
- const LETag tibtScriptTag = 0x74696274; /* 'tibt' (TIBETAN) */
- const LETag cansScriptTag = 0x63616E73; /* 'cans' (CANADIAN_ABORIGINAL) */
--const LETag yiiiScriptTag = 0x79696969; /* 'yiii' (YI) */
-+const LETag yiiiScriptTag = 0x79692020; /* 'yi ' (YI) */
- const LETag tglgScriptTag = 0x74676C67; /* 'tglg' (TAGALOG) */
- const LETag hanoScriptTag = 0x68616E6F; /* 'hano' (HANUNOO) */
- const LETag buhdScriptTag = 0x62756864; /* 'buhd' (BUHID) */
-@@ -98,6 +109,98 @@
- const LETag taleScriptTag = 0x74616C65; /* 'tale' (TAI_LE) */
- const LETag ugarScriptTag = 0x75676172; /* 'ugar' (UGARITIC) */
- const LETag hrktScriptTag = 0x68726B74; /* 'hrkt' (KATAKANA_OR_HIRAGANA) */
-+const LETag bugiScriptTag = 0x62756769; /* 'bugi' (BUGINESE) */
-+const LETag glagScriptTag = 0x676C6167; /* 'glag' (GLAGOLITIC) */
-+const LETag kharScriptTag = 0x6B686172; /* 'khar' (KHAROSHTHI) */
-+const LETag syloScriptTag = 0x73796C6F; /* 'sylo' (SYLOTI_NAGRI) */
-+const LETag taluScriptTag = 0x74616C75; /* 'talu' (NEW_TAI_LUE) */
-+const LETag tfngScriptTag = 0x74666E67; /* 'tfng' (TIFINAGH) */
-+const LETag xpeoScriptTag = 0x7870656F; /* 'xpeo' (OLD_PERSIAN) */
-+const LETag baliScriptTag = 0x62616C69; /* 'bali' (BALINESE) */
-+const LETag batkScriptTag = 0x6261746B; /* 'batk' (BATAK) */
-+const LETag blisScriptTag = 0x626C6973; /* 'blis' (BLIS) */
-+const LETag brahScriptTag = 0x62726168; /* 'brah' (BRAHMI) */
-+const LETag chamScriptTag = 0x6368616D; /* 'cham' (CHAM) */
-+const LETag cirtScriptTag = 0x63697274; /* 'cirt' (CIRT) */
-+const LETag cyrsScriptTag = 0x63797273; /* 'cyrs' (CYRS) */
-+const LETag egydScriptTag = 0x65677964; /* 'egyd' (EGYD) */
-+const LETag egyhScriptTag = 0x65677968; /* 'egyh' (EGYH) */
-+const LETag egypScriptTag = 0x65677970; /* 'egyp' (EGYPTIAN_HIEROGLYPHS) */
-+const LETag geokScriptTag = 0x67656F6B; /* 'geok' (GEOK) */
-+const LETag hansScriptTag = 0x68616E73; /* 'hans' (HANS) */
-+const LETag hantScriptTag = 0x68616E74; /* 'hant' (HANT) */
-+const LETag hmngScriptTag = 0x686D6E67; /* 'hmng' (HMNG) */
-+const LETag hungScriptTag = 0x68756E67; /* 'hung' (HUNG) */
-+const LETag indsScriptTag = 0x696E6473; /* 'inds' (INDS) */
-+const LETag javaScriptTag = 0x6A617661; /* 'java' (JAVANESE) */
-+const LETag kaliScriptTag = 0x6B616C69; /* 'kali' (KAYAH_LI) */
-+const LETag latfScriptTag = 0x6C617466; /* 'latf' (LATF) */
-+const LETag latgScriptTag = 0x6C617467; /* 'latg' (LATG) */
-+const LETag lepcScriptTag = 0x6C657063; /* 'lepc' (LEPCHA) */
-+const LETag linaScriptTag = 0x6C696E61; /* 'lina' (LINA) */
-+const LETag mandScriptTag = 0x6D616E64; /* 'mand' (MANDAIC) */
-+const LETag mayaScriptTag = 0x6D617961; /* 'maya' (MAYA) */
-+const LETag meroScriptTag = 0x6D65726F; /* 'mero' (MERO) */
-+const LETag nkooScriptTag = 0x6E6B6F20; /* 'nko ' (NKO) */
-+const LETag orkhScriptTag = 0x6F726B68; /* 'orkh' (OLD_TURKIC) */
-+const LETag permScriptTag = 0x7065726D; /* 'perm' (PERM) */
-+const LETag phagScriptTag = 0x70686167; /* 'phag' (PHAGS_PA) */
-+const LETag phnxScriptTag = 0x70686E78; /* 'phnx' (PHOENICIAN) */
-+const LETag plrdScriptTag = 0x706C7264; /* 'plrd' (PLRD) */
-+const LETag roroScriptTag = 0x726F726F; /* 'roro' (RORO) */
-+const LETag saraScriptTag = 0x73617261; /* 'sara' (SARA) */
-+const LETag syreScriptTag = 0x73797265; /* 'syre' (SYRE) */
-+const LETag syrjScriptTag = 0x7379726A; /* 'syrj' (SYRJ) */
-+const LETag syrnScriptTag = 0x7379726E; /* 'syrn' (SYRN) */
-+const LETag tengScriptTag = 0x74656E67; /* 'teng' (TENG) */
-+const LETag vaiiScriptTag = 0x76616920; /* 'vai ' (VAI) */
-+const LETag vispScriptTag = 0x76697370; /* 'visp' (VISP) */
-+const LETag xsuxScriptTag = 0x78737578; /* 'xsux' (CUNEIFORM) */
-+const LETag zxxxScriptTag = 0x7A787878; /* 'zxxx' (ZXXX) */
-+const LETag zzzzScriptTag = 0x7A7A7A7A; /* 'zzzz' (UNKNOWN) */
-+const LETag cariScriptTag = 0x63617269; /* 'cari' (CARIAN) */
-+const LETag jpanScriptTag = 0x6A70616E; /* 'jpan' (JPAN) */
-+const LETag lanaScriptTag = 0x6C616E61; /* 'lana' (TAI_THAM) */
-+const LETag lyciScriptTag = 0x6C796369; /* 'lyci' (LYCIAN) */
-+const LETag lydiScriptTag = 0x6C796469; /* 'lydi' (LYDIAN) */
-+const LETag olckScriptTag = 0x6F6C636B; /* 'olck' (OL_CHIKI) */
-+const LETag rjngScriptTag = 0x726A6E67; /* 'rjng' (REJANG) */
-+const LETag saurScriptTag = 0x73617572; /* 'saur' (SAURASHTRA) */
-+const LETag sgnwScriptTag = 0x73676E77; /* 'sgnw' (SGNW) */
-+const LETag sundScriptTag = 0x73756E64; /* 'sund' (SUNDANESE) */
-+const LETag moonScriptTag = 0x6D6F6F6E; /* 'moon' (MOON) */
-+const LETag mteiScriptTag = 0x6D746569; /* 'mtei' (MEETEI_MAYEK) */
-+const LETag armiScriptTag = 0x61726D69; /* 'armi' (IMPERIAL_ARAMAIC) */
-+const LETag avstScriptTag = 0x61767374; /* 'avst' (AVESTAN) */
-+const LETag cakmScriptTag = 0x63616B6D; /* 'cakm' (CAKM) */
-+const LETag koreScriptTag = 0x6B6F7265; /* 'kore' (KORE) */
-+const LETag kthiScriptTag = 0x6B746869; /* 'kthi' (KAITHI) */
-+const LETag maniScriptTag = 0x6D616E69; /* 'mani' (MANI) */
-+const LETag phliScriptTag = 0x70686C69; /* 'phli' (INSCRIPTIONAL_PAHLAVI) */
-+const LETag phlpScriptTag = 0x70686C70; /* 'phlp' (PHLP) */
-+const LETag phlvScriptTag = 0x70686C76; /* 'phlv' (PHLV) */
-+const LETag prtiScriptTag = 0x70727469; /* 'prti' (INSCRIPTIONAL_PARTHIAN) */
-+const LETag samrScriptTag = 0x73616D72; /* 'samr' (SAMARITAN) */
-+const LETag tavtScriptTag = 0x74617674; /* 'tavt' (TAI_VIET) */
-+const LETag zmthScriptTag = 0x7A6D7468; /* 'zmth' (ZMTH) */
-+const LETag zsymScriptTag = 0x7A73796D; /* 'zsym' (ZSYM) */
-+const LETag bamuScriptTag = 0x62616D75; /* 'bamu' (BAMUM) */
-+const LETag lisuScriptTag = 0x6C697375; /* 'lisu' (LISU) */
-+const LETag nkgbScriptTag = 0x6E6B6762; /* 'nkgb' (NKGB) */
-+const LETag sarbScriptTag = 0x73617262; /* 'sarb' (OLD_SOUTH_ARABIAN) */
-+const LETag bassScriptTag = 0x62617373; /* 'bass' (BASS) */
-+const LETag duplScriptTag = 0x6475706C; /* 'dupl' (DUPL) */
-+const LETag elbaScriptTag = 0x656C6261; /* 'elba' (ELBA) */
-+const LETag granScriptTag = 0x6772616E; /* 'gran' (GRAN) */
-+const LETag kpelScriptTag = 0x6B70656C; /* 'kpel' (KPEL) */
-+const LETag lomaScriptTag = 0x6C6F6D61; /* 'loma' (LOMA) */
-+const LETag mendScriptTag = 0x6D656E64; /* 'mend' (MEND) */
-+const LETag mercScriptTag = 0x6D657263; /* 'merc' (MERC) */
-+const LETag narbScriptTag = 0x6E617262; /* 'narb' (NARB) */
-+const LETag nbatScriptTag = 0x6E626174; /* 'nbat' (NBAT) */
-+const LETag palmScriptTag = 0x70616C6D; /* 'palm' (PALM) */
-+const LETag sindScriptTag = 0x73696E64; /* 'sind' (SIND) */
-+const LETag waraScriptTag = 0x77617261; /* 'wara' (WARA) */
-
- const LETag nullScriptTag = 0x00000000; /* '' (NULL) */
-
-@@ -132,6 +235,48 @@
- const LETag zhpLanguageTag = 0x5A485020; /* 'ZHP' (Chinese (Phonetic)) */
- const LETag zhsLanguageTag = 0x5A485320; /* 'ZHS' (Chinese (Simplified)) */
- const LETag zhtLanguageTag = 0x5A485420; /* 'ZHT' (Chinese (Traditional)) */
-+const LETag afkLanguageTag = 0x41464B20; /* 'AFK' (Afrikaans) */
-+const LETag belLanguageTag = 0x42454C20; /* 'BEL' (Belarussian) */
-+const LETag bgrLanguageTag = 0x42475220; /* 'BGR' (Bulgarian) */
-+const LETag catLanguageTag = 0x43415420; /* 'CAT' (Catalan) */
-+const LETag cheLanguageTag = 0x43484520; /* 'CHE' (Chechen) */
-+const LETag copLanguageTag = 0x434F5020; /* 'COP' (Coptic) */
-+const LETag csyLanguageTag = 0x43535920; /* 'CSY' (Czech) */
-+const LETag danLanguageTag = 0x44414E20; /* 'DAN' (Danish) */
-+const LETag deuLanguageTag = 0x44455520; /* 'DEU' (German) */
-+const LETag dznLanguageTag = 0x445A4E20; /* 'DZN' (Dzongkha) */
-+const LETag ellLanguageTag = 0x454C4C20; /* 'ELL' (Greek) */
-+const LETag engLanguageTag = 0x454E4720; /* 'ENG' (English) */
-+const LETag espLanguageTag = 0x45535020; /* 'ESP' (Spanish) */
-+const LETag etiLanguageTag = 0x45544920; /* 'ETI' (Estonian) */
-+const LETag euqLanguageTag = 0x45555120; /* 'EUQ' (Basque) */
-+const LETag finLanguageTag = 0x46494E20; /* 'FIN' (Finnish) */
-+const LETag fraLanguageTag = 0x46524120; /* 'FRA' (French) */
-+const LETag gaeLanguageTag = 0x47414520; /* 'GAE' (Gaelic) */
-+const LETag hauLanguageTag = 0x48415520; /* 'HAU' (Hausa) */
-+const LETag hrvLanguageTag = 0x48525620; /* 'HRV' (Croation) */
-+const LETag hunLanguageTag = 0x48554E20; /* 'HUN' (Hungarian) */
-+const LETag hyeLanguageTag = 0x48594520; /* 'HYE' (Armenian) */
-+const LETag indLanguageTag = 0x494E4420; /* 'IND' (Indonesian) */
-+const LETag itaLanguageTag = 0x49544120; /* 'ITA' (Italian) */
-+const LETag khmLanguageTag = 0x4B484D20; /* 'KHM' (Khmer) */
-+const LETag mngLanguageTag = 0x4D4E4720; /* 'MNG' (Mongolian) */
-+const LETag mtsLanguageTag = 0x4D545320; /* 'MTS' (Maltese) */
-+const LETag nepLanguageTag = 0x4E455020; /* 'NEP' (Nepali) */
-+const LETag nldLanguageTag = 0x4E4C4420; /* 'NLD' (Dutch) */
-+const LETag pasLanguageTag = 0x50415320; /* 'PAS' (Pashto) */
-+const LETag plkLanguageTag = 0x504C4B20; /* 'PLK' (Polish) */
-+const LETag ptgLanguageTag = 0x50544720; /* 'PTG' (Portuguese) */
-+const LETag romLanguageTag = 0x524F4D20; /* 'ROM' (Romanian) */
-+const LETag rusLanguageTag = 0x52555320; /* 'RUS' (Russian) */
-+const LETag skyLanguageTag = 0x534B5920; /* 'SKY' (Slovak) */
-+const LETag slvLanguageTag = 0x534C5620; /* 'SLV' (Slovenian) */
-+const LETag sqiLanguageTag = 0x53514920; /* 'SQI' (Albanian) */
-+const LETag srbLanguageTag = 0x53524220; /* 'SRB' (Serbian) */
-+const LETag sveLanguageTag = 0x53564520; /* 'SVE' (Swedish) */
-+const LETag tibLanguageTag = 0x54494220; /* 'TIB' (Tibetan) */
-+const LETag trkLanguageTag = 0x54524B20; /* 'TRK' (Turkish) */
-+const LETag welLanguageTag = 0x57454C20; /* 'WEL' (Welsh) */
-
-
- U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/SegmentArrayProcessor.cpp b/src/share/native/sun/font/layout/SegmentArrayProcessor.cpp
---- jdk/src/share/native/sun/font/layout/SegmentArrayProcessor.cpp
-+++ jdk/src/share/native/sun/font/layout/SegmentArrayProcessor.cpp
-@@ -74,7 +74,7 @@
-
- if (offset != 0) {
- TTGlyphID *glyphArray = (TTGlyphID *) ((char *) subtableHeader + offset);
-- TTGlyphID newGlyph = (TTGlyphID)SWAPW(glyphArray[LE_GET_GLYPH(thisGlyph) - firstGlyph]);
-+ TTGlyphID newGlyph = SWAPW(glyphArray[LE_GET_GLYPH(thisGlyph) - firstGlyph]);
-
- glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
- }
-diff --git a/src/share/native/sun/font/layout/ShapingTypeData.cpp b/src/share/native/sun/font/layout/ShapingTypeData.cpp
---- jdk/src/share/native/sun/font/layout/ShapingTypeData.cpp
-+++ jdk/src/share/native/sun/font/layout/ShapingTypeData.cpp
-@@ -25,7 +25,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2005. All Rights Reserved.
-+ * (C) Copyright IBM Corp. 1998-2010. All Rights Reserved.
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
-@@ -39,72 +39,87 @@
- U_NAMESPACE_BEGIN
-
- const le_uint8 ArabicShaping::shapingTypeTable[] = {
-- 0x00, 0x02, 0x00, 0xAD, 0x00, 0xAD, 0x00, 0xAD, 0x00, 0x05, 0x03, 0x00, 0x03, 0x6F, 0x00, 0x05,
-- 0x04, 0x83, 0x04, 0x86, 0x00, 0x05, 0x04, 0x88, 0x04, 0x89, 0x00, 0x05, 0x05, 0x91, 0x05, 0xB9,
-- 0x00, 0x05, 0x05, 0xBB, 0x05, 0xBD, 0x00, 0x05, 0x05, 0xBF, 0x05, 0xBF, 0x00, 0x05, 0x05, 0xC1,
-- 0x05, 0xC2, 0x00, 0x05, 0x05, 0xC4, 0x05, 0xC5, 0x00, 0x05, 0x05, 0xC7, 0x05, 0xC7, 0x00, 0x05,
-- 0x06, 0x10, 0x06, 0x15, 0x00, 0x05, 0x06, 0x22, 0x06, 0x25, 0x00, 0x04, 0x06, 0x26, 0x06, 0x26,
-- 0x00, 0x02, 0x06, 0x27, 0x06, 0x27, 0x00, 0x04, 0x06, 0x28, 0x06, 0x28, 0x00, 0x02, 0x06, 0x29,
-- 0x06, 0x29, 0x00, 0x04, 0x06, 0x2A, 0x06, 0x2E, 0x00, 0x02, 0x06, 0x2F, 0x06, 0x32, 0x00, 0x04,
-- 0x06, 0x33, 0x06, 0x3A, 0x00, 0x02, 0x06, 0x40, 0x06, 0x40, 0x00, 0x01, 0x06, 0x41, 0x06, 0x47,
-- 0x00, 0x02, 0x06, 0x48, 0x06, 0x48, 0x00, 0x04, 0x06, 0x49, 0x06, 0x4A, 0x00, 0x02, 0x06, 0x4B,
-- 0x06, 0x5E, 0x00, 0x05, 0x06, 0x6E, 0x06, 0x6F, 0x00, 0x02, 0x06, 0x70, 0x06, 0x70, 0x00, 0x05,
-- 0x06, 0x71, 0x06, 0x73, 0x00, 0x04, 0x06, 0x75, 0x06, 0x77, 0x00, 0x04, 0x06, 0x78, 0x06, 0x87,
-- 0x00, 0x02, 0x06, 0x88, 0x06, 0x99, 0x00, 0x04, 0x06, 0x9A, 0x06, 0xBF, 0x00, 0x02, 0x06, 0xC0,
-- 0x06, 0xC0, 0x00, 0x04, 0x06, 0xC1, 0x06, 0xC2, 0x00, 0x02, 0x06, 0xC3, 0x06, 0xCB, 0x00, 0x04,
-- 0x06, 0xCC, 0x06, 0xCC, 0x00, 0x02, 0x06, 0xCD, 0x06, 0xCD, 0x00, 0x04, 0x06, 0xCE, 0x06, 0xCE,
-- 0x00, 0x02, 0x06, 0xCF, 0x06, 0xCF, 0x00, 0x04, 0x06, 0xD0, 0x06, 0xD1, 0x00, 0x02, 0x06, 0xD2,
-- 0x06, 0xD3, 0x00, 0x04, 0x06, 0xD5, 0x06, 0xD5, 0x00, 0x04, 0x06, 0xD6, 0x06, 0xDC, 0x00, 0x05,
-- 0x06, 0xDE, 0x06, 0xE4, 0x00, 0x05, 0x06, 0xE7, 0x06, 0xE8, 0x00, 0x05, 0x06, 0xEA, 0x06, 0xED,
-- 0x00, 0x05, 0x06, 0xEE, 0x06, 0xEF, 0x00, 0x04, 0x06, 0xFA, 0x06, 0xFC, 0x00, 0x02, 0x06, 0xFF,
-- 0x06, 0xFF, 0x00, 0x02, 0x07, 0x0F, 0x07, 0x0F, 0x00, 0x05, 0x07, 0x10, 0x07, 0x10, 0x00, 0x04,
-- 0x07, 0x11, 0x07, 0x11, 0x00, 0x05, 0x07, 0x12, 0x07, 0x14, 0x00, 0x02, 0x07, 0x15, 0x07, 0x19,
-- 0x00, 0x04, 0x07, 0x1A, 0x07, 0x1D, 0x00, 0x02, 0x07, 0x1E, 0x07, 0x1E, 0x00, 0x04, 0x07, 0x1F,
-- 0x07, 0x27, 0x00, 0x02, 0x07, 0x28, 0x07, 0x28, 0x00, 0x04, 0x07, 0x29, 0x07, 0x29, 0x00, 0x02,
-- 0x07, 0x2A, 0x07, 0x2A, 0x00, 0x04, 0x07, 0x2B, 0x07, 0x2B, 0x00, 0x02, 0x07, 0x2C, 0x07, 0x2C,
-- 0x00, 0x04, 0x07, 0x2D, 0x07, 0x2E, 0x00, 0x02, 0x07, 0x2F, 0x07, 0x2F, 0x00, 0x04, 0x07, 0x30,
-- 0x07, 0x4A, 0x00, 0x05, 0x07, 0x4D, 0x07, 0x4D, 0x00, 0x04, 0x07, 0x4E, 0x07, 0x58, 0x00, 0x02,
-- 0x07, 0x59, 0x07, 0x5B, 0x00, 0x04, 0x07, 0x5C, 0x07, 0x6A, 0x00, 0x02, 0x07, 0x6B, 0x07, 0x6C,
-- 0x00, 0x04, 0x07, 0x6D, 0x07, 0x6D, 0x00, 0x02, 0x07, 0xA6, 0x07, 0xB0, 0x00, 0x05, 0x09, 0x01,
-- 0x09, 0x02, 0x00, 0x05, 0x09, 0x3C, 0x09, 0x3C, 0x00, 0x05, 0x09, 0x41, 0x09, 0x48, 0x00, 0x05,
-- 0x09, 0x4D, 0x09, 0x4D, 0x00, 0x05, 0x09, 0x51, 0x09, 0x54, 0x00, 0x05, 0x09, 0x62, 0x09, 0x63,
-- 0x00, 0x05, 0x09, 0x81, 0x09, 0x81, 0x00, 0x05, 0x09, 0xBC, 0x09, 0xBC, 0x00, 0x05, 0x09, 0xC1,
-- 0x09, 0xC4, 0x00, 0x05, 0x09, 0xCD, 0x09, 0xCD, 0x00, 0x05, 0x09, 0xE2, 0x09, 0xE3, 0x00, 0x05,
-- 0x0A, 0x01, 0x0A, 0x02, 0x00, 0x05, 0x0A, 0x3C, 0x0A, 0x3C, 0x00, 0x05, 0x0A, 0x41, 0x0A, 0x42,
-- 0x00, 0x05, 0x0A, 0x47, 0x0A, 0x48, 0x00, 0x05, 0x0A, 0x4B, 0x0A, 0x4D, 0x00, 0x05, 0x0A, 0x70,
-- 0x0A, 0x71, 0x00, 0x05, 0x0A, 0x81, 0x0A, 0x82, 0x00, 0x05, 0x0A, 0xBC, 0x0A, 0xBC, 0x00, 0x05,
-- 0x0A, 0xC1, 0x0A, 0xC5, 0x00, 0x05, 0x0A, 0xC7, 0x0A, 0xC8, 0x00, 0x05, 0x0A, 0xCD, 0x0A, 0xCD,
-- 0x00, 0x05, 0x0A, 0xE2, 0x0A, 0xE3, 0x00, 0x05, 0x0B, 0x01, 0x0B, 0x01, 0x00, 0x05, 0x0B, 0x3C,
-- 0x0B, 0x3C, 0x00, 0x05, 0x0B, 0x3F, 0x0B, 0x3F, 0x00, 0x05, 0x0B, 0x41, 0x0B, 0x43, 0x00, 0x05,
-- 0x0B, 0x4D, 0x0B, 0x4D, 0x00, 0x05, 0x0B, 0x56, 0x0B, 0x56, 0x00, 0x05, 0x0B, 0x82, 0x0B, 0x82,
-- 0x00, 0x05, 0x0B, 0xC0, 0x0B, 0xC0, 0x00, 0x05, 0x0B, 0xCD, 0x0B, 0xCD, 0x00, 0x05, 0x0C, 0x3E,
-- 0x0C, 0x40, 0x00, 0x05, 0x0C, 0x46, 0x0C, 0x48, 0x00, 0x05, 0x0C, 0x4A, 0x0C, 0x4D, 0x00, 0x05,
-- 0x0C, 0x55, 0x0C, 0x56, 0x00, 0x05, 0x0C, 0xBC, 0x0C, 0xBC, 0x00, 0x05, 0x0C, 0xBF, 0x0C, 0xBF,
-- 0x00, 0x05, 0x0C, 0xC6, 0x0C, 0xC6, 0x00, 0x05, 0x0C, 0xCC, 0x0C, 0xCD, 0x00, 0x05, 0x0D, 0x41,
-- 0x0D, 0x43, 0x00, 0x05, 0x0D, 0x4D, 0x0D, 0x4D, 0x00, 0x05, 0x0D, 0xCA, 0x0D, 0xCA, 0x00, 0x05,
-- 0x0D, 0xD2, 0x0D, 0xD4, 0x00, 0x05, 0x0D, 0xD6, 0x0D, 0xD6, 0x00, 0x05, 0x0E, 0x31, 0x0E, 0x31,
-- 0x00, 0x05, 0x0E, 0x34, 0x0E, 0x3A, 0x00, 0x05, 0x0E, 0x47, 0x0E, 0x4E, 0x00, 0x05, 0x0E, 0xB1,
-- 0x0E, 0xB1, 0x00, 0x05, 0x0E, 0xB4, 0x0E, 0xB9, 0x00, 0x05, 0x0E, 0xBB, 0x0E, 0xBC, 0x00, 0x05,
-- 0x0E, 0xC8, 0x0E, 0xCD, 0x00, 0x05, 0x0F, 0x18, 0x0F, 0x19, 0x00, 0x05, 0x0F, 0x35, 0x0F, 0x35,
-- 0x00, 0x05, 0x0F, 0x37, 0x0F, 0x37, 0x00, 0x05, 0x0F, 0x39, 0x0F, 0x39, 0x00, 0x05, 0x0F, 0x71,
-- 0x0F, 0x7E, 0x00, 0x05, 0x0F, 0x80, 0x0F, 0x84, 0x00, 0x05, 0x0F, 0x86, 0x0F, 0x87, 0x00, 0x05,
-- 0x0F, 0x90, 0x0F, 0x97, 0x00, 0x05, 0x0F, 0x99, 0x0F, 0xBC, 0x00, 0x05, 0x0F, 0xC6, 0x0F, 0xC6,
-- 0x00, 0x05, 0x10, 0x2D, 0x10, 0x30, 0x00, 0x05, 0x10, 0x32, 0x10, 0x32, 0x00, 0x05, 0x10, 0x36,
-- 0x10, 0x37, 0x00, 0x05, 0x10, 0x39, 0x10, 0x39, 0x00, 0x05, 0x10, 0x58, 0x10, 0x59, 0x00, 0x05,
-- 0x13, 0x5F, 0x13, 0x5F, 0x00, 0x05, 0x17, 0x12, 0x17, 0x14, 0x00, 0x05, 0x17, 0x32, 0x17, 0x34,
-- 0x00, 0x05, 0x17, 0x52, 0x17, 0x53, 0x00, 0x05, 0x17, 0x72, 0x17, 0x73, 0x00, 0x05, 0x17, 0xB4,
-- 0x17, 0xB5, 0x00, 0x05, 0x17, 0xB7, 0x17, 0xBD, 0x00, 0x05, 0x17, 0xC6, 0x17, 0xC6, 0x00, 0x05,
-- 0x17, 0xC9, 0x17, 0xD3, 0x00, 0x05, 0x17, 0xDD, 0x17, 0xDD, 0x00, 0x05, 0x18, 0x0B, 0x18, 0x0D,
-- 0x00, 0x05, 0x18, 0xA9, 0x18, 0xA9, 0x00, 0x05, 0x19, 0x20, 0x19, 0x22, 0x00, 0x05, 0x19, 0x27,
-- 0x19, 0x28, 0x00, 0x05, 0x19, 0x32, 0x19, 0x32, 0x00, 0x05, 0x19, 0x39, 0x19, 0x3B, 0x00, 0x05,
-- 0x1A, 0x17, 0x1A, 0x18, 0x00, 0x05, 0x1D, 0xC0, 0x1D, 0xC3, 0x00, 0x05, 0x20, 0x0B, 0x20, 0x0B,
-- 0x00, 0x05, 0x20, 0x0D, 0x20, 0x0D, 0x00, 0x01, 0x20, 0x0E, 0x20, 0x0F, 0x00, 0x05, 0x20, 0x2A,
-- 0x20, 0x2E, 0x00, 0x05, 0x20, 0x60, 0x20, 0x63, 0x00, 0x05, 0x20, 0x6A, 0x20, 0x6F, 0x00, 0x05,
-- 0x20, 0xD0, 0x20, 0xEB, 0x00, 0x05, 0x30, 0x2A, 0x30, 0x2F, 0x00, 0x05, 0x30, 0x99, 0x30, 0x9A,
-- 0x00, 0x05, 0xA8, 0x06, 0xA8, 0x06, 0x00, 0x05, 0xA8, 0x0B, 0xA8, 0x0B, 0x00, 0x05, 0xA8, 0x25,
-- 0xA8, 0x26, 0x00, 0x05, 0xFB, 0x1E, 0xFB, 0x1E, 0x00, 0x05, 0xFE, 0x00, 0xFE, 0x0F, 0x00, 0x05,
-- 0xFE, 0x20, 0xFE, 0x23, 0x00, 0x05, 0xFE, 0xFF, 0xFE, 0xFF, 0x00, 0x05, 0xFF, 0xF9, 0xFF, 0xFB,
-- 0x00, 0x05
-+ 0x00, 0x02, 0x00, 0xD7, 0x00, 0xAD, 0x00, 0xAD, 0x00, 0x05, 0x03, 0x00, 0x03, 0x6F, 0x00, 0x05,
-+ 0x04, 0x83, 0x04, 0x89, 0x00, 0x05, 0x05, 0x91, 0x05, 0xBD, 0x00, 0x05, 0x05, 0xBF, 0x05, 0xBF,
-+ 0x00, 0x05, 0x05, 0xC1, 0x05, 0xC2, 0x00, 0x05, 0x05, 0xC4, 0x05, 0xC5, 0x00, 0x05, 0x05, 0xC7,
-+ 0x05, 0xC7, 0x00, 0x05, 0x06, 0x10, 0x06, 0x1A, 0x00, 0x05, 0x06, 0x22, 0x06, 0x25, 0x00, 0x04,
-+ 0x06, 0x26, 0x06, 0x26, 0x00, 0x02, 0x06, 0x27, 0x06, 0x27, 0x00, 0x04, 0x06, 0x28, 0x06, 0x28,
-+ 0x00, 0x02, 0x06, 0x29, 0x06, 0x29, 0x00, 0x04, 0x06, 0x2A, 0x06, 0x2E, 0x00, 0x02, 0x06, 0x2F,
-+ 0x06, 0x32, 0x00, 0x04, 0x06, 0x33, 0x06, 0x3F, 0x00, 0x02, 0x06, 0x40, 0x06, 0x40, 0x00, 0x01,
-+ 0x06, 0x41, 0x06, 0x47, 0x00, 0x02, 0x06, 0x48, 0x06, 0x48, 0x00, 0x04, 0x06, 0x49, 0x06, 0x4A,
-+ 0x00, 0x02, 0x06, 0x4B, 0x06, 0x5E, 0x00, 0x05, 0x06, 0x6E, 0x06, 0x6F, 0x00, 0x02, 0x06, 0x70,
-+ 0x06, 0x70, 0x00, 0x05, 0x06, 0x71, 0x06, 0x73, 0x00, 0x04, 0x06, 0x75, 0x06, 0x77, 0x00, 0x04,
-+ 0x06, 0x78, 0x06, 0x87, 0x00, 0x02, 0x06, 0x88, 0x06, 0x99, 0x00, 0x04, 0x06, 0x9A, 0x06, 0xBF,
-+ 0x00, 0x02, 0x06, 0xC0, 0x06, 0xC0, 0x00, 0x04, 0x06, 0xC1, 0x06, 0xC2, 0x00, 0x02, 0x06, 0xC3,
-+ 0x06, 0xCB, 0x00, 0x04, 0x06, 0xCC, 0x06, 0xCC, 0x00, 0x02, 0x06, 0xCD, 0x06, 0xCD, 0x00, 0x04,
-+ 0x06, 0xCE, 0x06, 0xCE, 0x00, 0x02, 0x06, 0xCF, 0x06, 0xCF, 0x00, 0x04, 0x06, 0xD0, 0x06, 0xD1,
-+ 0x00, 0x02, 0x06, 0xD2, 0x06, 0xD3, 0x00, 0x04, 0x06, 0xD5, 0x06, 0xD5, 0x00, 0x04, 0x06, 0xD6,
-+ 0x06, 0xDC, 0x00, 0x05, 0x06, 0xDE, 0x06, 0xE4, 0x00, 0x05, 0x06, 0xE7, 0x06, 0xE8, 0x00, 0x05,
-+ 0x06, 0xEA, 0x06, 0xED, 0x00, 0x05, 0x06, 0xEE, 0x06, 0xEF, 0x00, 0x04, 0x06, 0xFA, 0x06, 0xFC,
-+ 0x00, 0x02, 0x06, 0xFF, 0x06, 0xFF, 0x00, 0x02, 0x07, 0x0F, 0x07, 0x0F, 0x00, 0x05, 0x07, 0x10,
-+ 0x07, 0x10, 0x00, 0x04, 0x07, 0x11, 0x07, 0x11, 0x00, 0x05, 0x07, 0x12, 0x07, 0x14, 0x00, 0x02,
-+ 0x07, 0x15, 0x07, 0x19, 0x00, 0x04, 0x07, 0x1A, 0x07, 0x1D, 0x00, 0x02, 0x07, 0x1E, 0x07, 0x1E,
-+ 0x00, 0x04, 0x07, 0x1F, 0x07, 0x27, 0x00, 0x02, 0x07, 0x28, 0x07, 0x28, 0x00, 0x04, 0x07, 0x29,
-+ 0x07, 0x29, 0x00, 0x02, 0x07, 0x2A, 0x07, 0x2A, 0x00, 0x04, 0x07, 0x2B, 0x07, 0x2B, 0x00, 0x02,
-+ 0x07, 0x2C, 0x07, 0x2C, 0x00, 0x04, 0x07, 0x2D, 0x07, 0x2E, 0x00, 0x02, 0x07, 0x2F, 0x07, 0x2F,
-+ 0x00, 0x04, 0x07, 0x30, 0x07, 0x4A, 0x00, 0x05, 0x07, 0x4D, 0x07, 0x4D, 0x00, 0x04, 0x07, 0x4E,
-+ 0x07, 0x58, 0x00, 0x02, 0x07, 0x59, 0x07, 0x5B, 0x00, 0x04, 0x07, 0x5C, 0x07, 0x6A, 0x00, 0x02,
-+ 0x07, 0x6B, 0x07, 0x6C, 0x00, 0x04, 0x07, 0x6D, 0x07, 0x70, 0x00, 0x02, 0x07, 0x71, 0x07, 0x71,
-+ 0x00, 0x04, 0x07, 0x72, 0x07, 0x72, 0x00, 0x02, 0x07, 0x73, 0x07, 0x74, 0x00, 0x04, 0x07, 0x75,
-+ 0x07, 0x77, 0x00, 0x02, 0x07, 0x78, 0x07, 0x79, 0x00, 0x04, 0x07, 0x7A, 0x07, 0x7F, 0x00, 0x02,
-+ 0x07, 0xA6, 0x07, 0xB0, 0x00, 0x05, 0x07, 0xCA, 0x07, 0xEA, 0x00, 0x02, 0x07, 0xEB, 0x07, 0xF3,
-+ 0x00, 0x05, 0x07, 0xFA, 0x07, 0xFA, 0x00, 0x01, 0x09, 0x01, 0x09, 0x02, 0x00, 0x05, 0x09, 0x3C,
-+ 0x09, 0x3C, 0x00, 0x05, 0x09, 0x41, 0x09, 0x48, 0x00, 0x05, 0x09, 0x4D, 0x09, 0x4D, 0x00, 0x05,
-+ 0x09, 0x51, 0x09, 0x54, 0x00, 0x05, 0x09, 0x62, 0x09, 0x63, 0x00, 0x05, 0x09, 0x81, 0x09, 0x81,
-+ 0x00, 0x05, 0x09, 0xBC, 0x09, 0xBC, 0x00, 0x05, 0x09, 0xC1, 0x09, 0xC4, 0x00, 0x05, 0x09, 0xCD,
-+ 0x09, 0xCD, 0x00, 0x05, 0x09, 0xE2, 0x09, 0xE3, 0x00, 0x05, 0x0A, 0x01, 0x0A, 0x02, 0x00, 0x05,
-+ 0x0A, 0x3C, 0x0A, 0x3C, 0x00, 0x05, 0x0A, 0x41, 0x0A, 0x42, 0x00, 0x05, 0x0A, 0x47, 0x0A, 0x48,
-+ 0x00, 0x05, 0x0A, 0x4B, 0x0A, 0x4D, 0x00, 0x05, 0x0A, 0x51, 0x0A, 0x51, 0x00, 0x05, 0x0A, 0x70,
-+ 0x0A, 0x71, 0x00, 0x05, 0x0A, 0x75, 0x0A, 0x75, 0x00, 0x05, 0x0A, 0x81, 0x0A, 0x82, 0x00, 0x05,
-+ 0x0A, 0xBC, 0x0A, 0xBC, 0x00, 0x05, 0x0A, 0xC1, 0x0A, 0xC5, 0x00, 0x05, 0x0A, 0xC7, 0x0A, 0xC8,
-+ 0x00, 0x05, 0x0A, 0xCD, 0x0A, 0xCD, 0x00, 0x05, 0x0A, 0xE2, 0x0A, 0xE3, 0x00, 0x05, 0x0B, 0x01,
-+ 0x0B, 0x01, 0x00, 0x05, 0x0B, 0x3C, 0x0B, 0x3C, 0x00, 0x05, 0x0B, 0x3F, 0x0B, 0x3F, 0x00, 0x05,
-+ 0x0B, 0x41, 0x0B, 0x44, 0x00, 0x05, 0x0B, 0x4D, 0x0B, 0x4D, 0x00, 0x05, 0x0B, 0x56, 0x0B, 0x56,
-+ 0x00, 0x05, 0x0B, 0x62, 0x0B, 0x63, 0x00, 0x05, 0x0B, 0x82, 0x0B, 0x82, 0x00, 0x05, 0x0B, 0xC0,
-+ 0x0B, 0xC0, 0x00, 0x05, 0x0B, 0xCD, 0x0B, 0xCD, 0x00, 0x05, 0x0C, 0x3E, 0x0C, 0x40, 0x00, 0x05,
-+ 0x0C, 0x46, 0x0C, 0x48, 0x00, 0x05, 0x0C, 0x4A, 0x0C, 0x4D, 0x00, 0x05, 0x0C, 0x55, 0x0C, 0x56,
-+ 0x00, 0x05, 0x0C, 0x62, 0x0C, 0x63, 0x00, 0x05, 0x0C, 0xBC, 0x0C, 0xBC, 0x00, 0x05, 0x0C, 0xBF,
-+ 0x0C, 0xBF, 0x00, 0x05, 0x0C, 0xC6, 0x0C, 0xC6, 0x00, 0x05, 0x0C, 0xCC, 0x0C, 0xCD, 0x00, 0x05,
-+ 0x0C, 0xE2, 0x0C, 0xE3, 0x00, 0x05, 0x0D, 0x41, 0x0D, 0x44, 0x00, 0x05, 0x0D, 0x4D, 0x0D, 0x4D,
-+ 0x00, 0x05, 0x0D, 0x62, 0x0D, 0x63, 0x00, 0x05, 0x0D, 0xCA, 0x0D, 0xCA, 0x00, 0x05, 0x0D, 0xD2,
-+ 0x0D, 0xD4, 0x00, 0x05, 0x0D, 0xD6, 0x0D, 0xD6, 0x00, 0x05, 0x0E, 0x31, 0x0E, 0x31, 0x00, 0x05,
-+ 0x0E, 0x34, 0x0E, 0x3A, 0x00, 0x05, 0x0E, 0x47, 0x0E, 0x4E, 0x00, 0x05, 0x0E, 0xB1, 0x0E, 0xB1,
-+ 0x00, 0x05, 0x0E, 0xB4, 0x0E, 0xB9, 0x00, 0x05, 0x0E, 0xBB, 0x0E, 0xBC, 0x00, 0x05, 0x0E, 0xC8,
-+ 0x0E, 0xCD, 0x00, 0x05, 0x0F, 0x18, 0x0F, 0x19, 0x00, 0x05, 0x0F, 0x35, 0x0F, 0x35, 0x00, 0x05,
-+ 0x0F, 0x37, 0x0F, 0x37, 0x00, 0x05, 0x0F, 0x39, 0x0F, 0x39, 0x00, 0x05, 0x0F, 0x71, 0x0F, 0x7E,
-+ 0x00, 0x05, 0x0F, 0x80, 0x0F, 0x84, 0x00, 0x05, 0x0F, 0x86, 0x0F, 0x87, 0x00, 0x05, 0x0F, 0x90,
-+ 0x0F, 0x97, 0x00, 0x05, 0x0F, 0x99, 0x0F, 0xBC, 0x00, 0x05, 0x0F, 0xC6, 0x0F, 0xC6, 0x00, 0x05,
-+ 0x10, 0x2D, 0x10, 0x30, 0x00, 0x05, 0x10, 0x32, 0x10, 0x37, 0x00, 0x05, 0x10, 0x39, 0x10, 0x3A,
-+ 0x00, 0x05, 0x10, 0x3D, 0x10, 0x3E, 0x00, 0x05, 0x10, 0x58, 0x10, 0x59, 0x00, 0x05, 0x10, 0x5E,
-+ 0x10, 0x60, 0x00, 0x05, 0x10, 0x71, 0x10, 0x74, 0x00, 0x05, 0x10, 0x82, 0x10, 0x82, 0x00, 0x05,
-+ 0x10, 0x85, 0x10, 0x86, 0x00, 0x05, 0x10, 0x8D, 0x10, 0x8D, 0x00, 0x05, 0x13, 0x5F, 0x13, 0x5F,
-+ 0x00, 0x05, 0x17, 0x12, 0x17, 0x14, 0x00, 0x05, 0x17, 0x32, 0x17, 0x34, 0x00, 0x05, 0x17, 0x52,
-+ 0x17, 0x53, 0x00, 0x05, 0x17, 0x72, 0x17, 0x73, 0x00, 0x05, 0x17, 0xB4, 0x17, 0xB5, 0x00, 0x05,
-+ 0x17, 0xB7, 0x17, 0xBD, 0x00, 0x05, 0x17, 0xC6, 0x17, 0xC6, 0x00, 0x05, 0x17, 0xC9, 0x17, 0xD3,
-+ 0x00, 0x05, 0x17, 0xDD, 0x17, 0xDD, 0x00, 0x05, 0x18, 0x0B, 0x18, 0x0D, 0x00, 0x05, 0x18, 0xA9,
-+ 0x18, 0xA9, 0x00, 0x05, 0x19, 0x20, 0x19, 0x22, 0x00, 0x05, 0x19, 0x27, 0x19, 0x28, 0x00, 0x05,
-+ 0x19, 0x32, 0x19, 0x32, 0x00, 0x05, 0x19, 0x39, 0x19, 0x3B, 0x00, 0x05, 0x1A, 0x17, 0x1A, 0x18,
-+ 0x00, 0x05, 0x1B, 0x00, 0x1B, 0x03, 0x00, 0x05, 0x1B, 0x34, 0x1B, 0x34, 0x00, 0x05, 0x1B, 0x36,
-+ 0x1B, 0x3A, 0x00, 0x05, 0x1B, 0x3C, 0x1B, 0x3C, 0x00, 0x05, 0x1B, 0x42, 0x1B, 0x42, 0x00, 0x05,
-+ 0x1B, 0x6B, 0x1B, 0x73, 0x00, 0x05, 0x1B, 0x80, 0x1B, 0x81, 0x00, 0x05, 0x1B, 0xA2, 0x1B, 0xA5,
-+ 0x00, 0x05, 0x1B, 0xA8, 0x1B, 0xA9, 0x00, 0x05, 0x1C, 0x2C, 0x1C, 0x33, 0x00, 0x05, 0x1C, 0x36,
-+ 0x1C, 0x37, 0x00, 0x05, 0x1D, 0xC0, 0x1D, 0xE6, 0x00, 0x05, 0x1D, 0xFE, 0x1D, 0xFF, 0x00, 0x05,
-+ 0x20, 0x0B, 0x20, 0x0B, 0x00, 0x05, 0x20, 0x0D, 0x20, 0x0D, 0x00, 0x01, 0x20, 0x0E, 0x20, 0x0F,
-+ 0x00, 0x05, 0x20, 0x2A, 0x20, 0x2E, 0x00, 0x05, 0x20, 0x60, 0x20, 0x64, 0x00, 0x05, 0x20, 0x6A,
-+ 0x20, 0x6F, 0x00, 0x05, 0x20, 0xD0, 0x20, 0xF0, 0x00, 0x05, 0x2D, 0xE0, 0x2D, 0xFF, 0x00, 0x05,
-+ 0x30, 0x2A, 0x30, 0x2F, 0x00, 0x05, 0x30, 0x99, 0x30, 0x9A, 0x00, 0x05, 0xA6, 0x6F, 0xA6, 0x72,
-+ 0x00, 0x05, 0xA6, 0x7C, 0xA6, 0x7D, 0x00, 0x05, 0xA8, 0x02, 0xA8, 0x02, 0x00, 0x05, 0xA8, 0x06,
-+ 0xA8, 0x06, 0x00, 0x05, 0xA8, 0x0B, 0xA8, 0x0B, 0x00, 0x05, 0xA8, 0x25, 0xA8, 0x26, 0x00, 0x05,
-+ 0xA8, 0xC4, 0xA8, 0xC4, 0x00, 0x05, 0xA9, 0x26, 0xA9, 0x2D, 0x00, 0x05, 0xA9, 0x47, 0xA9, 0x51,
-+ 0x00, 0x05, 0xAA, 0x29, 0xAA, 0x2E, 0x00, 0x05, 0xAA, 0x31, 0xAA, 0x32, 0x00, 0x05, 0xAA, 0x35,
-+ 0xAA, 0x36, 0x00, 0x05, 0xAA, 0x43, 0xAA, 0x43, 0x00, 0x05, 0xAA, 0x4C, 0xAA, 0x4C, 0x00, 0x05,
-+ 0xFB, 0x1E, 0xFB, 0x1E, 0x00, 0x05, 0xFE, 0x00, 0xFE, 0x0F, 0x00, 0x05, 0xFE, 0x20, 0xFE, 0x26,
-+ 0x00, 0x05, 0xFE, 0xFF, 0xFE, 0xFF, 0x00, 0x05, 0xFF, 0xF9, 0xFF, 0xFB, 0x00, 0x05
- };
-
- U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/SubstitutionLookups.cpp b/src/share/native/sun/font/layout/SubstitutionLookups.cpp
---- jdk/src/share/native/sun/font/layout/SubstitutionLookups.cpp
-+++ jdk/src/share/native/sun/font/layout/SubstitutionLookups.cpp
-@@ -25,7 +25,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-@@ -53,18 +53,23 @@
- le_uint16 substCount,
- GlyphIterator *glyphIterator,
- const LEFontInstance *fontInstance,
-- le_int32 position)
-+ le_int32 position,
-+ LEErrorCode& success)
- {
-+ if (LE_FAILURE(success)) {
-+ return;
-+ }
-+
- GlyphIterator tempIterator(*glyphIterator);
-
-- for (le_uint16 subst = 0; subst < substCount; subst += 1) {
-+ for (le_uint16 subst = 0; subst < substCount && LE_SUCCESS(success); subst += 1) {
- le_uint16 sequenceIndex = SWAPW(substLookupRecordArray[subst].sequenceIndex);
- le_uint16 lookupListIndex = SWAPW(substLookupRecordArray[subst].lookupListIndex);
-
- tempIterator.setCurrStreamPosition(position);
- tempIterator.next(sequenceIndex);
-
-- lookupProcessor->applySingleLookup(lookupListIndex, &tempIterator, fontInstance);
-+ lookupProcessor->applySingleLookup(lookupListIndex, &tempIterator, fontInstance, success);
- }
- }
-
-diff --git a/src/share/native/sun/font/layout/SubstitutionLookups.h b/src/share/native/sun/font/layout/SubstitutionLookups.h
---- jdk/src/share/native/sun/font/layout/SubstitutionLookups.h
-+++ jdk/src/share/native/sun/font/layout/SubstitutionLookups.h
-@@ -25,7 +25,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-@@ -60,7 +60,8 @@
- le_uint16 substCount,
- GlyphIterator *glyphIterator,
- const LEFontInstance *fontInstance,
-- le_int32 position);
-+ le_int32 position,
-+ LEErrorCode& success);
- };
-
- U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/ThaiLayoutEngine.cpp b/src/share/native/sun/font/layout/ThaiLayoutEngine.cpp
---- jdk/src/share/native/sun/font/layout/ThaiLayoutEngine.cpp
-+++ jdk/src/share/native/sun/font/layout/ThaiLayoutEngine.cpp
-@@ -26,7 +26,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-@@ -36,19 +36,24 @@
- #include "ScriptAndLanguageTags.h"
- #include "LEGlyphStorage.h"
-
-+#include "KernTable.h"
-+
- #include "ThaiShaping.h"
-
- U_NAMESPACE_BEGIN
-
- UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ThaiLayoutEngine)
-
--ThaiLayoutEngine::ThaiLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags)
-- : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags)
-+ThaiLayoutEngine::ThaiLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags, LEErrorCode &success)
-+ : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success)
- {
- fErrorChar = 0x25CC;
-
- // Figure out which presentation forms the font uses
-- if (fontInstance->canDisplay(0x0E64)) {
-+ if (! fontInstance->canDisplay(0x0E01)) {
-+ // No Thai in font; don't use presentation forms.
-+ fGlyphSet = 3;
-+ } else if (fontInstance->canDisplay(0x0E64)) {
- // WorldType uses reserved space in Thai block
- fGlyphSet = 0;
- } else if (fontInstance->canDisplay(0xF701)) {
-@@ -116,4 +121,28 @@
- return glyphCount;
- }
-
-+// This is the same as LayoutEngline::adjustGlyphPositions() except that it doesn't call adjustMarkGlyphs
-+void ThaiLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool /*reverse*/,
-+ LEGlyphStorage &glyphStorage, LEErrorCode &success)
-+{
-+ if (LE_FAILURE(success)) {
-+ return;
-+ }
-+
-+ if (chars == NULL || offset < 0 || count < 0) {
-+ success = LE_ILLEGAL_ARGUMENT_ERROR;
-+ return;
-+ }
-+
-+ if (fTypoFlags & 0x1) { /* kerning enabled */
-+ static const le_uint32 kernTableTag = LE_KERN_TABLE_TAG;
-+
-+ KernTable kt(fFontInstance, getFontTable(kernTableTag));
-+ kt.process(glyphStorage);
-+ }
-+
-+ // default is no adjustments
-+ return;
-+}
-+
- U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/ThaiLayoutEngine.h b/src/share/native/sun/font/layout/ThaiLayoutEngine.h
---- jdk/src/share/native/sun/font/layout/ThaiLayoutEngine.h
-+++ jdk/src/share/native/sun/font/layout/ThaiLayoutEngine.h
-@@ -26,7 +26,7 @@
-
- /*
- *
-- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
- *
- */
-
-@@ -62,13 +62,14 @@
- * @param fontInstance - the font
- * @param scriptCode - the script
- * @param languageCode - the language
-+ * @param success - set to an error code if the operation fails
- *
- * @see LEFontInstance
- * @see ScriptAndLanguageTags.h for script and language codes
- *
- * @internal
- */
-- ThaiLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags);
-+ ThaiLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags, LEErrorCode &success);
-
- /**
- * The destructor, virtual for correct polymorphic invocation.
-@@ -139,6 +140,28 @@
- virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
- LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-+ /**
-+ * This method does positioning adjustments like accent positioning and
-+ * kerning. The default implementation does nothing. Subclasses needing
-+ * position adjustments must override this method.
-+ *
-+ * Note that this method has both characters and glyphs as input so that
-+ * it can use the character codes to determine glyph types if that information
-+ * isn't directly available. (e.g. Some Arabic OpenType fonts don't have a GDEF
-+ * table)
-+ *
-+ * @param chars - the input character context
-+ * @param offset - the offset of the first character to process
-+ * @param count - the number of characters to process
-+ * @param reverse - <code>TRUE</code> if the glyphs in the glyph array have been reordered
-+ * @param glyphStorage - the object which holds the per-glyph storage. The glyph positions will be
-+ * adjusted as needed.
-+ * @param success - output parameter set to an error code if the operation fails
-+ *
-+ * @internal
-+ */
-+ virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+
- };
-
- U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/TibetanLayoutEngine.cpp b/src/share/native/sun/font/layout/TibetanLayoutEngine.cpp
-new file mode 100644
---- /dev/null
-+++ jdk/src/share/native/sun/font/layout/TibetanLayoutEngine.cpp
-@@ -0,0 +1,112 @@
-+/*
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ *
-+ */
-+
-+/*
-+ *
-+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
-+ *
-+ * Developed at DIT - Government of Bhutan
-+ *
-+ * Contact person: Pema Geyleg - <pema_geyleg@druknet.bt>
-+ *
-+ * This file is a modification of the ICU file KhmerReordering.cpp
-+ * by Jens Herden and Javier Sola who have given all their possible rights to IBM and the Governement of Bhutan
-+ * A first module for Dzongkha was developed by Karunakar under Panlocalisation funding.
-+ * Assistance for this module has been received from Namgay Thinley, Christopher Fynn and Javier Sola
-+ *
-+ */
-+
-+
-+#include "OpenTypeLayoutEngine.h"
-+#include "TibetanLayoutEngine.h"
-+#include "LEGlyphStorage.h"
-+#include "TibetanReordering.h"
-+
-+U_NAMESPACE_BEGIN
-+
-+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(TibetanOpenTypeLayoutEngine)
-+
-+TibetanOpenTypeLayoutEngine::TibetanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success)
-+ : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success)
-+{
-+ fFeatureMap = TibetanReordering::getFeatureMap(fFeatureMapCount);
-+ fFeatureOrder = TRUE;
-+}
-+
-+TibetanOpenTypeLayoutEngine::TibetanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-+ le_int32 typoFlags, LEErrorCode &success)
-+ : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success)
-+{
-+ fFeatureMap = TibetanReordering::getFeatureMap(fFeatureMapCount);
-+ fFeatureOrder = TRUE;
-+}
-+
-+TibetanOpenTypeLayoutEngine::~TibetanOpenTypeLayoutEngine()
-+{
-+ // nothing to do
-+}
-+
-+// Input: characters
-+// Output: characters, char indices, tags
-+// Returns: output character count
-+le_int32 TibetanOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-+{
-+ if (LE_FAILURE(success)) {
-+ return 0;
-+ }
-+
-+ if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-+ success = LE_ILLEGAL_ARGUMENT_ERROR;
-+ return 0;
-+ }
-+
-+ le_int32 worstCase = count * 3; // worst case is 3 for Khmer TODO check if 2 is enough
-+
-+ outChars = LE_NEW_ARRAY(LEUnicode, worstCase);
-+
-+ if (outChars == NULL) {
-+ success = LE_MEMORY_ALLOCATION_ERROR;
-+ return 0;
-+ }
-+
-+ glyphStorage.allocateGlyphArray(worstCase, rightToLeft, success);
-+ glyphStorage.allocateAuxData(success);
-+
-+ if (LE_FAILURE(success)) {
-+ LE_DELETE_ARRAY(outChars);
-+ return 0;
-+ }
-+
-+ // NOTE: assumes this allocates featureTags...
-+ // (probably better than doing the worst case stuff here...)
-+ le_int32 outCharCount = TibetanReordering::reorder(&chars[offset], count, fScriptCode, outChars, glyphStorage);
-+
-+ glyphStorage.adoptGlyphCount(outCharCount);
-+ return outCharCount;
-+}
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/TibetanLayoutEngine.h b/src/share/native/sun/font/layout/TibetanLayoutEngine.h
-new file mode 100644
---- /dev/null
-+++ jdk/src/share/native/sun/font/layout/TibetanLayoutEngine.h
-@@ -0,0 +1,156 @@
-+/*
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ *
-+ */
-+
-+/*
-+ *
-+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
-+ *
-+ * Developed at DIT - Government of Bhutan
-+ *
-+ * Contact person: Pema Geyleg - <pema_geyleg@druknet.bt>
-+ *
-+ * This file is a modification of the ICU file KhmerReordering.cpp
-+ * by Jens Herden and Javier Sola who have given all their possible rights to IBM and the Governement of Bhutan
-+ * A first module for Dzongkha was developed by Karunakar under Panlocalisation funding.
-+ * Assistance for this module has been received from Namgay Thinley, Christopher Fynn and Javier Sola
-+ *
-+ */
-+
-+#ifndef __TIBETANLAYOUTENGINE_H
-+#define __TIBETANLAYOUTENGINE_H
-+
-+// #include "LETypes.h"
-+// #include "LEFontInstance.h"
-+// #include "LEGlyphFilter.h"
-+// #include "LayoutEngine.h"
-+// #include "OpenTypeLayoutEngine.h"
-+
-+// #include "GlyphSubstitutionTables.h"
-+// #include "GlyphDefinitionTables.h"
-+// #include "GlyphPositioningTables.h"
-+
-+U_NAMESPACE_BEGIN
-+
-+// class MPreFixups;
-+// class LEGlyphStorage;
-+
-+/**
-+ * This class implements OpenType layout for Dzongkha and Tibetan OpenType fonts
-+ *
-+ * @internal
-+ */
-+class TibetanOpenTypeLayoutEngine : public OpenTypeLayoutEngine
-+{
-+public:
-+ /**
-+ * This is the main constructor. It constructs an instance of TibetanOpenTypeLayoutEngine for
-+ * a particular font, script and language. It takes the GSUB table as a parameter since
-+ * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an
-+ * Tibetan OpenType font.
-+ *
-+ * @param fontInstance - the font
-+ * @param scriptCode - the script
-+ * @param langaugeCode - the language
-+ * @param gsubTable - the GSUB table
-+ * @param success - set to an error code if the operation fails
-+ *
-+ * @see LayoutEngine::layoutEngineFactory
-+ * @see OpenTypeLayoutEngine
-+ * @see ScriptAndLangaugeTags.h for script and language codes
-+ *
-+ * @internal
-+ */
-+ TibetanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success);
-+
-+ /**
-+ * This constructor is used when the font requires a "canned" GSUB table which can't be known
-+ * until after this constructor has been invoked.
-+ *
-+ * @param fontInstance - the font
-+ * @param scriptCode - the script
-+ * @param langaugeCode - the language
-+ * @param success - set to an error code if the operation fails
-+ *
-+ * @see OpenTypeLayoutEngine
-+ * @see ScriptAndLangaugeTags.h for script and language codes
-+ *
-+ * @internal
-+ */
-+ TibetanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-+ le_int32 typoFlags, LEErrorCode &success);
-+
-+ /**
-+ * The destructor, virtual for correct polymorphic invocation.
-+ *
-+ * @internal
-+ */
-+ virtual ~TibetanOpenTypeLayoutEngine();
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
-+ *
-+ * @internal ICU 3.6
-+ */
-+ virtual UClassID getDynamicClassID() const;
-+
-+ /**
-+ * ICU "poor man's RTTI", returns a UClassID for this class.
-+ *
-+ * @internal ICU 3.6
-+ */
-+ static UClassID getStaticClassID();
-+
-+protected:
-+
-+ /**
-+ * This method does Tibetan OpenType character processing. It assigns the OpenType feature
-+ * tags to the characters, and may generate output characters which have been reordered.
-+ * It may also split some vowels, resulting in more output characters than input characters.
-+ *
-+ * Input parameters:
-+ * @param chars - the input character context
-+ * @param offset - the index of the first character to process
-+ * @param count - the number of characters to process
-+ * @param max - the number of characters in the input context
-+ * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
-+ * @param glyphStorage - the glyph storage object. The glyph and character index arrays will be set.
-+ * the auxillary data array will be set to the feature tags.
-+ *
-+ * Output parameters:
-+ * @param success - set to an error code if the operation fails
-+ *
-+ * @return the output character count
-+ *
-+ * @internal
-+ */
-+ virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-+
-+};
-+
-+U_NAMESPACE_END
-+#endif
-+
-diff --git a/src/share/native/sun/font/layout/TibetanReordering.cpp b/src/share/native/sun/font/layout/TibetanReordering.cpp
-new file mode 100644
---- /dev/null
-+++ jdk/src/share/native/sun/font/layout/TibetanReordering.cpp
-@@ -0,0 +1,414 @@
-+/*
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ *
-+ */
-+
-+/*
-+ *
-+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
-+ *
-+ * Developed at DIT - Government of Bhutan
-+ *
-+ * Contact person: Pema Geyleg - <pema_geyleg@druknet.bt>
-+ *
-+ * This file is a modification of the ICU file KhmerReordering.cpp
-+ * by Jens Herden and Javier Sola who have given all their possible rights to IBM and the Governement of Bhutan
-+ * A first module for Dzongkha was developed by Karunakar under Panlocalisation funding.
-+ * Assistance for this module has been received from Namgay Thinley, Christopher Fynn and Javier Sola
-+ *
-+ */
-+
-+//#include <stdio.h>
-+#include "LETypes.h"
-+#include "OpenTypeTables.h"
-+#include "TibetanReordering.h"
-+#include "LEGlyphStorage.h"
-+
-+
-+U_NAMESPACE_BEGIN
-+
-+// Characters that get refered to by name...
-+enum
-+{
-+ C_DOTTED_CIRCLE = 0x25CC,
-+ C_PRE_NUMBER_MARK = 0x0F3F
-+ };
-+
-+
-+enum
-+{
-+ // simple classes, they are used in the statetable (in this file) to control the length of a syllable
-+ // they are also used to know where a character should be placed (location in reference to the base character)
-+ // and also to know if a character, when independtly displayed, should be displayed with a dotted-circle to
-+ // indicate error in syllable construction
-+ _xx = TibetanClassTable::CC_RESERVED,
-+ _ba = TibetanClassTable::CC_BASE,
-+ _sj = TibetanClassTable::CC_SUBJOINED | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW,
-+ _tp = TibetanClassTable::CC_TSA_PHRU | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE,
-+ _ac = TibetanClassTable::CC_A_CHUNG | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW,
-+ _cs = TibetanClassTable::CC_COMP_SANSKRIT | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW,
-+ _ha = TibetanClassTable::CC_HALANTA | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW,
-+ _bv = TibetanClassTable::CC_BELOW_VOWEL | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW,
-+ _av = TibetanClassTable::CC_ABOVE_VOWEL | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE,
-+ _an = TibetanClassTable::CC_ANUSVARA | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE,
-+ _cb = TibetanClassTable::CC_CANDRABINDU | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE,
-+ _vs = TibetanClassTable::CC_VISARGA | TibetanClassTable::CF_DOTTED_CIRCLE| TibetanClassTable::CF_POS_AFTER,
-+ _as = TibetanClassTable::CC_ABOVE_S_MARK | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE,
-+ _bs = TibetanClassTable::CC_BELOW_S_MARK | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW,
-+ _di = TibetanClassTable::CC_DIGIT | TibetanClassTable::CF_DIGIT,
-+ _pd = TibetanClassTable::CC_PRE_DIGIT_MARK | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_PREDIGIT | TibetanClassTable::CF_POS_BEFORE ,
-+ _bd = TibetanClassTable::CC_POST_BELOW_DIGIT_M | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_AFTER
-+};
-+
-+
-+// Character class tables
-+//_xx Non Combining characters
-+//_ba Base Consonants
-+//_sj Subjoined consonants
-+//_tp Tsa - phru
-+//_ac A-chung, Vowel Lengthening mark
-+//_cs Precomposed Sanskrit vowel + subjoined consonants
-+//_ha Halanta/Virama
-+//_bv Below vowel
-+//_av above vowel
-+//_an Anusvara
-+//_cb Candrabindu
-+//_vs Visaraga/Post mark
-+//_as Upper Stress marks
-+//_bs Lower Stress marks
-+//_di Digit
-+//_pd Number pre combining, Needs reordering
-+//_bd Other number combining marks
-+
-+static const TibetanClassTable::CharClass tibetanCharClasses[] =
-+{
-+ // 0 1 2 3 4 5 6 7 8 9 a b c d e f
-+ _xx, _ba, _xx, _xx, _ba, _ba, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0F00 - 0F0F 0
-+ _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _bd, _bd, _xx, _xx, _xx, _xx, _xx, _xx, // 0F10 - 0F1F 1
-+ _di, _di, _di, _di, _di, _di, _di, _di, _di, _di, _xx, _xx, _xx, _xx, _xx, _xx, // 0F20 - 0F2F 2
-+ _xx, _xx, _xx, _xx, _xx, _bs, _xx, _bs, _xx, _tp, _xx, _xx, _xx, _xx, _bd, _pd, // 0F30 - 0F3F 3
-+ _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _xx, _ba, _ba, _ba, _ba, _ba, _ba, _ba, // 0F40 - 0F4F 4
-+ _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, // 0F50 - 0F5F 5
-+ _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _xx, _xx, _xx, _xx, _xx, // 0F60 - 0F6F 6
-+ _xx, _ac, _av, _cs, _bv, _bv, _cs, _cs, _cs, _cs, _av, _av, _av, _av, _an, _vs, // 0F70 - 0F7F 7
-+ _av, _cs, _cb, _cb, _ha, _xx, _as, _as, _ba, _ba, _ba, _ba, _xx, _xx, _xx, _xx, // 0F80 - 0F8F 8
-+ _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _xx, _sj, _sj, _sj, _sj, _sj, _sj, _sj, // 0F90 - 0F9F 9
-+ _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, // 0FA0 - 0FAF a
-+ _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _xx, _sj, _sj, // 0FB0 - 0FBF b
-+ _xx, _xx, _xx, _xx, _xx, _xx, _bs, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0FC0 - 0FCF c
-+ _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx,// 0FD0 - 0FDF d
-+ _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0FE0 - 0FEF e
-+ _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0FF0 - 0FFF f
-+};
-+
-+
-+//
-+// Tibetan Class Tables
-+//
-+
-+//
-+// The range of characters defined in the above table is defined here. For Tibetan 0F00 to 0FFF
-+// Even if the Tibetan range is bigger, most of the characters are not combinable, and therefore treated
-+// as _xx
-+static const TibetanClassTable tibetanClassTable = {0x0F00, 0x0FFF, tibetanCharClasses};
-+
-+
-+// Below we define how a character in the input string is either in the tibetanCharClasses table
-+// (in which case we get its type back), or an unknown object in which case we get _xx (CC_RESERVED) back
-+TibetanClassTable::CharClass TibetanClassTable::getCharClass(LEUnicode ch) const
-+{
-+ if (ch < firstChar || ch > lastChar) {
-+ return CC_RESERVED;
-+ }
-+
-+ return classTable[ch - firstChar];
-+}
-+
-+const TibetanClassTable *TibetanClassTable::getTibetanClassTable()
-+{
-+ return &tibetanClassTable;
-+}
-+
-+
-+
-+class TibetanReorderingOutput : public UMemory {
-+private:
-+ le_int32 fSyllableCount;
-+ le_int32 fOutIndex;
-+ LEUnicode *fOutChars;
-+
-+ LEGlyphStorage &fGlyphStorage;
-+
-+
-+public:
-+ TibetanReorderingOutput(LEUnicode *outChars, LEGlyphStorage &glyphStorage)
-+ : fSyllableCount(0), fOutIndex(0), fOutChars(outChars), fGlyphStorage(glyphStorage)
-+ {
-+ // nothing else to do...
-+ }
-+
-+ ~TibetanReorderingOutput()
-+ {
-+ // nothing to do here...
-+ }
-+
-+ void reset()
-+ {
-+ fSyllableCount += 1;
-+ }
-+
-+ void writeChar(LEUnicode ch, le_uint32 charIndex, FeatureMask featureMask)
-+ {
-+ LEErrorCode success = LE_NO_ERROR;
-+
-+ fOutChars[fOutIndex] = ch;
-+
-+ fGlyphStorage.setCharIndex(fOutIndex, charIndex, success);
-+ fGlyphStorage.setAuxData(fOutIndex, featureMask, success);
-+
-+ fOutIndex += 1;
-+ }
-+
-+ le_int32 getOutputIndex()
-+ {
-+ return fOutIndex;
-+ }
-+};
-+
-+
-+//TODO remove unused flags
-+#define ccmpFeatureTag LE_CCMP_FEATURE_TAG
-+#define blwfFeatureTag LE_BLWF_FEATURE_TAG
-+#define pstfFeatureTag LE_PSTF_FEATURE_TAG
-+#define presFeatureTag LE_PRES_FEATURE_TAG
-+#define blwsFeatureTag LE_BLWS_FEATURE_TAG
-+#define abvsFeatureTag LE_ABVS_FEATURE_TAG
-+#define pstsFeatureTag LE_PSTS_FEATURE_TAG
-+
-+#define blwmFeatureTag LE_BLWM_FEATURE_TAG
-+#define abvmFeatureTag LE_ABVM_FEATURE_TAG
-+#define distFeatureTag LE_DIST_FEATURE_TAG
-+
-+#define prefFeatureTag LE_PREF_FEATURE_TAG
-+#define abvfFeatureTag LE_ABVF_FEATURE_TAG
-+#define cligFeatureTag LE_CLIG_FEATURE_TAG
-+#define mkmkFeatureTag LE_MKMK_FEATURE_TAG
-+
-+// Shaping features
-+#define prefFeatureMask 0x80000000UL
-+#define blwfFeatureMask 0x40000000UL
-+#define abvfFeatureMask 0x20000000UL
-+#define pstfFeatureMask 0x10000000UL
-+#define presFeatureMask 0x08000000UL
-+#define blwsFeatureMask 0x04000000UL
-+#define abvsFeatureMask 0x02000000UL
-+#define pstsFeatureMask 0x01000000UL
-+#define cligFeatureMask 0x00800000UL
-+#define ccmpFeatureMask 0x00040000UL
-+
-+// Positioning features
-+#define distFeatureMask 0x00400000UL
-+#define blwmFeatureMask 0x00200000UL
-+#define abvmFeatureMask 0x00100000UL
-+#define mkmkFeatureMask 0x00080000UL
-+
-+#define tagPref (ccmpFeatureMask | prefFeatureMask | presFeatureMask | cligFeatureMask | distFeatureMask)
-+#define tagAbvf (ccmpFeatureMask | abvfFeatureMask | abvsFeatureMask | cligFeatureMask | distFeatureMask | abvmFeatureMask | mkmkFeatureMask)
-+#define tagPstf (ccmpFeatureMask | blwfFeatureMask | blwsFeatureMask | prefFeatureMask | presFeatureMask | pstfFeatureMask | pstsFeatureMask | cligFeatureMask | distFeatureMask | blwmFeatureMask)
-+#define tagBlwf (ccmpFeatureMask | blwfFeatureMask | blwsFeatureMask | cligFeatureMask | distFeatureMask | blwmFeatureMask | mkmkFeatureMask)
-+#define tagDefault (ccmpFeatureMask | prefFeatureMask | blwfFeatureMask | presFeatureMask | blwsFeatureMask | cligFeatureMask | distFeatureMask | abvmFeatureMask | blwmFeatureMask | mkmkFeatureMask)
-+
-+
-+
-+// These are in the order in which the features need to be applied
-+// for correct processing
-+static const FeatureMap featureMap[] =
-+{
-+ // Shaping features
-+ {ccmpFeatureTag, ccmpFeatureMask},
-+ {prefFeatureTag, prefFeatureMask},
-+ {blwfFeatureTag, blwfFeatureMask},
-+ {abvfFeatureTag, abvfFeatureMask},
-+ {pstfFeatureTag, pstfFeatureMask},
-+ {presFeatureTag, presFeatureMask},
-+ {blwsFeatureTag, blwsFeatureMask},
-+ {abvsFeatureTag, abvsFeatureMask},
-+ {pstsFeatureTag, pstsFeatureMask},
-+ {cligFeatureTag, cligFeatureMask},
-+
-+ // Positioning features
-+ {distFeatureTag, distFeatureMask},
-+ {blwmFeatureTag, blwmFeatureMask},
-+ {abvmFeatureTag, abvmFeatureMask},
-+ {mkmkFeatureTag, mkmkFeatureMask},
-+};
-+
-+static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap);
-+
-+// The stateTable is used to calculate the end (the length) of a well
-+// formed Tibetan Syllable.
-+//
-+// Each horizontal line is ordered exactly the same way as the values in TibetanClassTable
-+// CharClassValues in TibetanReordering.h This coincidence of values allows the
-+// follow up of the table.
-+//
-+// Each line corresponds to a state, which does not necessarily need to be a type
-+// of component... for example, state 2 is a base, with is always a first character
-+// in the syllable, but the state could be produced a consonant of any type when
-+// it is the first character that is analysed (in ground state).
-+//
-+static const le_int8 tibetanStateTable[][TibetanClassTable::CC_COUNT] =
-+{
-+
-+
-+ //Dzongkha state table
-+ //xx ba sj tp ac cs ha bv av an cb vs as bs di pd bd
-+ { 1, 2, 4, 3, 8, 7, 9, 10, 14, 13, 17, 18, 19, 19, 20, 21, 21,}, // 0 - ground state
-+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,}, // 1 - exit state (or sign to the right of the syllable)
-+ {-1, -1, 4, 3, 8, 7, 9, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 2 - Base consonant
-+ {-1, -1, 5, -1, 8, 7, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 3 - Tsa phru after base
-+ {-1, -1, 4, 6, 8, 7, 9, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 4 - Subjoined consonant after base
-+ {-1, -1, 5, -1, 8, 7, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 5 - Subjoined consonant after tsa phru
-+ {-1, -1, -1, -1, 8, 7, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 6 - Tsa phru after subjoined consonant
-+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19, 19, -1, -1, -1,}, // 7 - Pre Composed Sanskrit
-+ {-1, -1, -1, -1, -1, -1, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 8 - A-chung
-+ {-1, -1, -1, -1, -1, -1, -1, -1, 14, 13, 17, -1, 19, 19, -1, -1, -1,}, // 9 - Halanta
-+ {-1, -1, -1, -1, -1, -1, -1, 11, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 10 - below vowel 1
-+ {-1, -1, -1, -1, -1, -1, -1, 12, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 11 - below vowel 2
-+ {-1, -1, -1, -1, -1, -1, -1, -1, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 12 - below vowel 3
-+ {-1, -1, -1, -1, -1, -1, -1, -1, 14, 17, 17, 18, 19, 19, -1, -1, -1,}, // 13 - Anusvara before vowel
-+ {-1, -1, -1, -1, -1, -1, -1, -1, 15, 17, 17, 18, 19, 19, -1, -1, -1,}, // 14 - above vowel 1
-+ {-1, -1, -1, -1, -1, -1, -1, -1, 16, 17, 17, 18, 19, 19, -1, -1, -1,}, // 15 - above vowel 2
-+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, 17, 17, 18, 19, 19, -1, -1, -1,}, // 16 - above vowel 3
-+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18, 19, 19, -1, -1, -1,}, // 17 - Anusvara or Candrabindu after vowel
-+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19, 19, -1, -1, -1,}, // 18 - Visarga
-+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,}, // 19 - strss mark
-+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 21, 21,}, // 20 - digit
-+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,}, // 21 - digit mark
-+
-+
-+};
-+
-+
-+const FeatureMap *TibetanReordering::getFeatureMap(le_int32 &count)
-+{
-+ count = featureMapCount;
-+
-+ return featureMap;
-+}
-+
-+
-+// Given an input string of characters and a location in which to start looking
-+// calculate, using the state table, which one is the last character of the syllable
-+// that starts in the starting position.
-+le_int32 TibetanReordering::findSyllable(const TibetanClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount)
-+{
-+ le_int32 cursor = prev;
-+ le_int8 state = 0;
-+
-+ while (cursor < charCount) {
-+ TibetanClassTable::CharClass charClass = (classTable->getCharClass(chars[cursor]) & TibetanClassTable::CF_CLASS_MASK);
-+
-+ state = tibetanStateTable[state][charClass];
-+
-+ if (state < 0) {
-+ break;
-+ }
-+
-+ cursor += 1;
-+ }
-+
-+ return cursor;
-+}
-+
-+
-+// This is the real reordering function as applied to the Tibetan language
-+
-+le_int32 TibetanReordering::reorder(const LEUnicode *chars, le_int32 charCount, le_int32,
-+ LEUnicode *outChars, LEGlyphStorage &glyphStorage)
-+{
-+ const TibetanClassTable *classTable = TibetanClassTable::getTibetanClassTable();
-+
-+ TibetanReorderingOutput output(outChars, glyphStorage);
-+ TibetanClassTable::CharClass charClass;
-+ le_int32 i, prev = 0;
-+
-+ // This loop only exits when we reach the end of a run, which may contain
-+ // several syllables.
-+ while (prev < charCount) {
-+ le_int32 syllable = findSyllable(classTable, chars, prev, charCount);
-+
-+ output.reset();
-+
-+ // shall we add a dotted circle?
-+ // If in the position in which the base should be (first char in the string) there is
-+ // a character that has the Dotted circle flag (a character that cannot be a base)
-+ // then write a dotted circle
-+ if (classTable->getCharClass(chars[prev]) & TibetanClassTable::CF_DOTTED_CIRCLE) {
-+ output.writeChar(C_DOTTED_CIRCLE, prev, tagDefault);
-+ }
-+
-+ // copy the rest to output, inverting the pre-number mark if present after a digit.
-+ for (i = prev; i < syllable; i += 1) {
-+ charClass = classTable->getCharClass(chars[i]);
-+
-+ if ((TibetanClassTable::CF_DIGIT & charClass)
-+ && ( classTable->getCharClass(chars[i+1]) & TibetanClassTable::CF_PREDIGIT))
-+ {
-+ output.writeChar(C_PRE_NUMBER_MARK, i, tagPref);
-+ output.writeChar(chars[i], i+1 , tagPref);
-+ i += 1;
-+ } else {
-+ switch (charClass & TibetanClassTable::CF_POS_MASK) {
-+
-+ // If the present character is a number, and the next character is a pre-number combining mark
-+ // then the two characters are reordered
-+
-+ case TibetanClassTable::CF_POS_ABOVE :
-+ output.writeChar(chars[i], i, tagAbvf);
-+ break;
-+
-+ case TibetanClassTable::CF_POS_AFTER :
-+ output.writeChar(chars[i], i, tagPstf);
-+ break;
-+
-+ case TibetanClassTable::CF_POS_BELOW :
-+ output.writeChar(chars[i], i, tagBlwf);
-+ break;
-+
-+ default:
-+ // default - any other characters
-+ output.writeChar(chars[i], i, tagDefault);
-+ break;
-+ } // switch
-+ } // if
-+ } // for
-+
-+ prev = syllable; // move the pointer to the start of next syllable
-+ }
-+
-+ return output.getOutputIndex();
-+}
-+
-+
-+U_NAMESPACE_END
-diff --git a/src/share/native/sun/font/layout/TibetanReordering.h b/src/share/native/sun/font/layout/TibetanReordering.h
-new file mode 100644
---- /dev/null
-+++ jdk/src/share/native/sun/font/layout/TibetanReordering.h
-@@ -0,0 +1,176 @@
-+/*
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ *
-+ */
-+
-+/*
-+ *
-+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
-+ *
-+ * Developed at DIT - Government of Bhutan
-+ *
-+ * Contact person: Pema Geyleg - <pema_geyleg@druknet.bt>
-+ *
-+ * This file is a modification of the ICU file KhmerReordering.h
-+ * by Jens Herden and Javier Sola who have given all their possible rights to IBM and the Governement of Bhutan
-+ * A first module for Dzongkha was developed by Karunakar under Panlocalisation funding.
-+ * Assistance for this module has been received from Namgay Thinley, Christopher Fynn and Javier Sola
-+ *
-+ */
-+
-+#ifndef __TIBETANREORDERING_H
-+#define __TIBETANORDERING_H
-+
-+/**
-+ * \file
-+ * \internal
-+ */
-+
-+// #include "LETypes.h"
-+// #include "OpenTypeTables.h"
-+
-+U_NAMESPACE_BEGIN
-+
-+class LEGlyphStorage;
-+
-+// Vocabulary
-+// Base -> A consonant in its full (not subscript) form. It is the
-+// center of the syllable, it can be souranded by subjoined consonants, vowels,
-+// signs... but there is only one base in a stack, it has to be coded as
-+// the first character of the syllable.Included here are also groups of base + subjoined
-+// which are represented by one single code point in unicode (e.g. 0F43) Also other characters that might take
-+// subjoined consonants or other combining characters.
-+// Subjoined -> Subjoined consonants and groups of subjoined consonants which have a single code-point
-+// to repersent the group (even if each subjoined consonant is represented independently
-+// by anothe code-point
-+// Tsa Phru --> Tsa Phru character, Bhutanese people will always place it right after the base, but sometimes, due to
-+// "normalization"
-+// is placed after all the subjoined consonants, and it is also permitted there.
-+// A Chung Vowel lengthening mark --> . 0F71 It is placed after the base and any subjoined consonants but before any vowels
-+// Precomposed Sanskrit vowels --> The are combinations of subjoined consonants + vowels that have been assigned
-+// a given code-point (in spite of each single part of them having also a code-point
-+// They are avoided, and users are encouraged to use the combination of code-points that
-+// represents the same sound instead of using this combined characters. This is included here
-+// for compatibility with possible texts that use them (they are not in the Dzongkha keyboard).
-+// Halanta -> The Halanta or Virama character 0F84 indicates that a consonant should not use its inheernt vowel,
-+// in spite of not having other vowels present. It is usually placed immediatly after a base consonant,
-+// but in some special cases it can also be placed after a subjoined consonant, so this is also
-+// permitted in this algorithm. (Halanta is always displayed in Tibetan not used as a connecting char)
-+//
-+// Subjoined vowels -> Dependent vowels (matras) placed below the base and below all subjoined consonants. There
-+// might be as much as three subjoined vowels in a given stack (only one in general text, but up
-+// to three for abreviations, they have to be permitted).
-+// Superscript vowels -> There are three superscript vowels, and they can be repeated or combined (up to three
-+// times. They can combine with subjoined vowels, and are always coded after these.
-+// Anusvara --> Nasalisation sign. Traditioinally placed in absence of vowels, but also after vowels. In some
-+// special cases it can be placed before a vowel, so this is also permitted
-+// Candrabindu -> Forms of the Anusvara with different glyphs (and different in identity) which can be placed
-+// without vowel or after the vowel, but never before. Cannot combine with Anusvara.
-+// Stress marks -> Marks placed above or below a syllable, affecting the whole syllable. They are combining
-+// marks, so they have to be attached to a specific stack. The are using to emphasise a syllable.
-+//
-+// Digits -> Digits are not considered as non-combining characters because there are a few characters which
-+// combine with them, so they have to be considered independently.
-+// Digit combining marks -> dependent marks that combine with digits.
-+//
-+// TODO
-+// There are a number of characters in the CJK block that are used in Tibetan script, two of these are symbols
-+// are used as bases for combining glyphs, and have not been encoded in Tibetan. As these characters are outside
-+// of the tibetan block, they have not been treated in this program.
-+
-+
-+struct TibetanClassTable // This list must include all types of components that can be used inside a syllable
-+{
-+ enum CharClassValues // order is important here! This order must be the same that is found in each horizontal
-+ // line in the statetable for Tibetan (file TibetanReordering.cpp). It assigns one number
-+ // to each type of character that has to be considered when analysing the order in which
-+ // characters can be placed
-+ {
-+ CC_RESERVED = 0, //Non Combining Characters
-+ CC_BASE = 1, // Base Consonants, Base Consonants with Subjoined attached in code point, Sanskrit base marks
-+ CC_SUBJOINED = 2, // Subjoined Consonats, combination of more than Subjoined Consonants in the code point
-+ CC_TSA_PHRU = 3, // Tsa-Phru character 0F39
-+ CC_A_CHUNG = 4, // Vowel Lenthening a-chung mark 0F71
-+ CC_COMP_SANSKRIT = 5, // Precomposed Sanskrit vowels including Subjoined characters and vowels
-+ CC_HALANTA = 6, // Halanta Character 0F84
-+ CC_BELOW_VOWEL = 7, // Subjoined vowels
-+ CC_ABOVE_VOWEL = 8, // Superscript vowels
-+ CC_ANUSVARA = 9, // Tibetan sign Rjes Su Nga Ro 0F7E
-+ CC_CANDRABINDU = 10, // Tibetan sign Sna Ldan and Nyi Zla Naa Da 0F82, 0F83
-+ CC_VISARGA = 11, // Tibetan sign Rnam Bcad (0F7F)
-+ CC_ABOVE_S_MARK = 12, // Stress Marks placed above the text
-+ CC_BELOW_S_MARK = 13, // Stress Marks placed below the text
-+ CC_DIGIT = 14, // Dzongkha Digits
-+ CC_PRE_DIGIT_MARK = 15, // Mark placed before the digit
-+ CC_POST_BELOW_DIGIT_M = 16, // Mark placed below or after the digit
-+ CC_COUNT = 17 // This is the number of character classes
-+ };
-+
-+ enum CharClassFlags
-+ {
-+ CF_CLASS_MASK = 0x0000FFFF,
-+
-+ CF_DOTTED_CIRCLE = 0x04000000, // add a dotted circle if a character with this flag is the first in a syllable
-+ CF_DIGIT = 0x01000000, // flag to speed up comparaisson
-+ CF_PREDIGIT = 0x02000000, // flag to detect pre-digit marks for reordering
-+
-+ // position flags
-+ CF_POS_BEFORE = 0x00080000,
-+ CF_POS_BELOW = 0x00040000,
-+ CF_POS_ABOVE = 0x00020000,
-+ CF_POS_AFTER = 0x00010000,
-+ CF_POS_MASK = 0x000f0000
-+ };
-+
-+ typedef le_uint32 CharClass;
-+
-+ typedef le_int32 ScriptFlags;
-+
-+ LEUnicode firstChar; // for Tibetan this will become xOF00
-+ LEUnicode lastChar; // and this x0FFF
-+ const CharClass *classTable;
-+
-+ CharClass getCharClass(LEUnicode ch) const;
-+
-+ static const TibetanClassTable *getTibetanClassTable();
-+};
-+
-+
-+class TibetanReordering /* not : public UObject because all methods are static */ {
-+public:
-+ static le_int32 reorder(const LEUnicode *theChars, le_int32 charCount, le_int32 scriptCode,
-+ LEUnicode *outChars, LEGlyphStorage &glyphStorage);
-+
-+ static const FeatureMap *getFeatureMap(le_int32 &count);
-+
-+private:
-+ // do not instantiate
-+ TibetanReordering();
-+
-+ static le_int32 findSyllable(const TibetanClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount);
-+
-+};
-+
-+
-+U_NAMESPACE_END
-+#endif
-diff --git a/test/java/awt/font/TextLayout/TestOldHangul.java b/test/java/awt/font/TextLayout/TestOldHangul.java
-new file mode 100644
---- /dev/null
-+++ jdk/test/java/awt/font/TextLayout/TestOldHangul.java
-@@ -0,0 +1,83 @@
-+/*
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ *
-+ */
-+
-+/* @test @(#)TestOldHangul.java
-+ * @summary Verify Old Hangul display
-+ * @bug 6886358
-+ * @ignore Requires a special font installed.
-+ */
-+
-+import javax.swing.*;
-+import javax.swing.border.LineBorder;
-+import java.awt.*;
-+import java.awt.event.ActionEvent;
-+
-+public class TestOldHangul {
-+ public static void main(String[] args) {
-+ SwingUtilities.invokeLater(new Runnable() {
-+ public void run() {
-+ new TestOldHangul().run();
-+ }
-+ });
-+ }
-+ public static boolean AUTOMATIC_TEST=true; // true; run test automatically, else manually at button push
-+
-+ private void run() {
-+ Font ourFont = null;
-+ final String fontName = "UnBatangOdal.ttf"; // download from http://chem.skku.ac.kr/~wkpark/project/font/GSUB/UnbatangOdal/ and place in {user.home}/fonts/
-+ try {
-+ ourFont = Font.createFont(Font.TRUETYPE_FONT, new java.io.File(new java.io.File(System.getProperty("user.home"),"fonts"), fontName));
-+ ourFont = ourFont.deriveFont((float)48.0);
-+ } catch(Throwable t) {
-+ t.printStackTrace();
-+ System.err.println("Fail: " + t);
-+ return;
-+ }
-+ JFrame frame = new JFrame(System.getProperty("java.version"));
-+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-+ JPanel panel = new JPanel();
-+ final JTextArea label = new JTextArea("(empty)");
-+ label.setSize(400, 300);
-+ label.setBorder(new LineBorder(Color.black));
-+ label.setFont(ourFont);
-+ final String str = "\u110A\u119E\u11B7\u0020\u1112\u119E\u11AB\uAE00\u0020\u1100\u119E\u11F9\u0020\u112B\u119E\u11BC\n";
-+
-+ if(AUTOMATIC_TEST) { /* run the test automatically (else, manually) */
-+ label.setText(str);
-+ } else {
-+ JButton button = new JButton("Old Hangul");
-+ button.addActionListener(new AbstractAction() {
-+ public void actionPerformed(ActionEvent actionEvent) {
-+ label.setText(str);
-+ }
-+ });
-+ panel.add(button);
-+ }
-+ panel.add(label);
-+
-+ frame.getContentPane().add(panel);
-+ frame.pack();
-+ frame.setVisible(true);
-+ }
-+}
-+
-diff --git a/test/java/awt/font/TextLayout/TestTibetan.java b/test/java/awt/font/TextLayout/TestTibetan.java
-new file mode 100644
---- /dev/null
-+++ jdk/test/java/awt/font/TextLayout/TestTibetan.java
-@@ -0,0 +1,87 @@
-+/*
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ *
-+ */
-+
-+/* @test @(#)TestTibetan.java
-+ * @summary verify tibetan output
-+ * @bug 6886358
-+ * @ignore Requires a special font installed
-+ */
-+
-+import javax.swing.*;
-+import javax.swing.border.LineBorder;
-+import java.awt.*;
-+import java.awt.event.ActionEvent;
-+
-+public class TestTibetan {
-+ public static void main(String[] args) {
-+ SwingUtilities.invokeLater(new Runnable() {
-+ public void run() {
-+ new TestTibetan().run();
-+ }
-+ });
-+ }
-+ public static boolean AUTOMATIC_TEST=true; // true; run test automatically, else manually at button push
-+
-+ private void run() {
-+ Font ourFont = null;
-+ try {
-+ //For best results: Font from: http://download.savannah.gnu.org/releases/free-tibetan/jomolhari/
-+ // place in $(user.home)/fonts/
-+ ourFont = Font.createFont(Font.TRUETYPE_FONT, new java.io.File(new java.io.File(System.getProperty("user.home"),"fonts"), "Jomolhari-alpha3c-0605331.ttf"));
-+
-+ //ourFont = new Font("serif",Font.PLAIN, 24);
-+ ourFont = ourFont.deriveFont((float)24.0);
-+ } catch(Throwable t) {
-+ t.printStackTrace();
-+ System.err.println("Fail: " + t);
-+ return;
-+ }
-+ JFrame frame = new JFrame(System.getProperty("java.version"));
-+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-+ JPanel panel = new JPanel();
-+ final JTextArea label = new JTextArea("(empty)");
-+ label.setSize(400, 300);
-+ label.setBorder(new LineBorder(Color.black));
-+ label.setFont(ourFont);
-+
-+ final String str = "\u0F04\u0F05\u0F0D\u0F0D\u0020\u0F4F\u0F72\u0F53\u0F0B\u0F4F\u0F72\u0F53\u0F0B\u0F42\u0FB1\u0F72\u0F0B\u0F51\u0F54\u0F60\u0F0B\u0F62\u0FA9\u0F63"; // TinTin.
-+
-+ if(AUTOMATIC_TEST) { /* run the test automatically (else, manually) */
-+ label.setText(str);
-+ } else {
-+ JButton button = new JButton("Set Char x0DDD");
-+ button.addActionListener(new AbstractAction() {
-+ public void actionPerformed(ActionEvent actionEvent) {
-+ label.setText(str);
-+ }
-+ });
-+ panel.add(button);
-+ }
-+ panel.add(label);
-+
-+ frame.getContentPane().add(panel);
-+ frame.pack();
-+ frame.setVisible(true);
-+ }
-+}
-+
diff --git a/java/openjdk6/files/icedtea/openjdk/6888167-medialib_memory_leaks.patch b/java/openjdk6/files/icedtea/openjdk/6888167-medialib_memory_leaks.patch
deleted file mode 100644
index 0d34b1ae4100..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/6888167-medialib_memory_leaks.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-# HG changeset patch
-# User bae
-# Date 1256300510 -14400
-# Node ID 0f5e355fe68c0ff29e28a962199185e4bd3d7e04
-# Parent 55257a533c9553d99e90e7b82affab14d5d6b056
-6888167: memory leaks in the medialib glue code
-Reviewed-by: igor, prr
-
-diff --git a/src/share/native/sun/awt/medialib/awt_ImagingLib.c b/src/share/native/sun/awt/medialib/awt_ImagingLib.c
---- jdk/src/share/native/sun/awt/medialib/awt_ImagingLib.c
-+++ jdk/src/share/native/sun/awt/medialib/awt_ImagingLib.c
-@@ -961,21 +961,15 @@
- mlib_filter filter;
- unsigned int *dP;
-
-- if ((srcRasterP = (RasterS_t *) calloc(1, sizeof(RasterS_t))) == NULL) {
-- JNU_ThrowOutOfMemoryError(env, "Out of memory");
-- return -1;
-- }
--
-- if ((dstRasterP = (RasterS_t *) calloc(1, sizeof(RasterS_t))) == NULL) {
-- JNU_ThrowOutOfMemoryError(env, "Out of memory");
-- free(srcRasterP);
-- return -1;
-- }
--
- /* This function requires a lot of local refs ??? Is 64 enough ??? */
- if ((*env)->EnsureLocalCapacity(env, 64) < 0)
- return 0;
-
-+ if (s_nomlib) return 0;
-+ if (s_timeIt) {
-+ (*start_timer)(3600);
-+ }
-+
- switch(interpType) {
- case java_awt_image_AffineTransformOp_TYPE_BILINEAR:
- filter = MLIB_BILINEAR;
-@@ -991,9 +985,15 @@
- return -1;
- }
-
-- if (s_nomlib) return 0;
-- if (s_timeIt) {
-- (*start_timer)(3600);
-+ if ((srcRasterP = (RasterS_t *) calloc(1, sizeof(RasterS_t))) == NULL) {
-+ JNU_ThrowOutOfMemoryError(env, "Out of memory");
-+ return -1;
-+ }
-+
-+ if ((dstRasterP = (RasterS_t *) calloc(1, sizeof(RasterS_t))) == NULL) {
-+ JNU_ThrowOutOfMemoryError(env, "Out of memory");
-+ free(srcRasterP);
-+ return -1;
- }
-
- if ((*env)->GetArrayLength(env, jmatrix) < 6) {
-@@ -1216,6 +1216,9 @@
- }
-
- if (tbl == NULL || table == NULL || jtable == NULL) {
-+ if (tbl != NULL) free(tbl);
-+ if (table != NULL) free(table);
-+ if (jtable != NULL) free(jtable);
- awt_freeParsedImage(srcImageP, TRUE);
- awt_freeParsedImage(dstImageP, TRUE);
- JNU_ThrowNullPointerException(env, "NULL LUT");
-@@ -1225,6 +1228,11 @@
- for (i=0; i < jlen; i++) {
- jtable[i] = (*env)->GetObjectArrayElement(env, jtableArrays, i);
- if (jtable[i] == NULL) {
-+ free(tbl);
-+ free(table);
-+ free(jtable);
-+ awt_freeParsedImage(srcImageP, TRUE);
-+ awt_freeParsedImage(dstImageP, TRUE);
- return 0;
- }
- }
-@@ -1233,6 +1241,9 @@
- FALSE, &hint);
- if (nbands < 1) {
- /* Can't handle any custom images */
-+ free(tbl);
-+ free(table);
-+ free(jtable);
- awt_freeParsedImage(srcImageP, TRUE);
- awt_freeParsedImage(dstImageP, TRUE);
- return 0;
-@@ -1241,12 +1252,18 @@
- /* Allocate the arrays */
- if (allocateArray(env, srcImageP, &src, &sdata, TRUE, FALSE, FALSE) < 0) {
- /* Must be some problem */
-+ free(tbl);
-+ free(table);
-+ free(jtable);
- awt_freeParsedImage(srcImageP, TRUE);
- awt_freeParsedImage(dstImageP, TRUE);
- return 0;
- }
- if (allocateArray(env, dstImageP, &dst, &ddata, FALSE, FALSE, FALSE) < 0) {
- /* Must be some problem */
-+ free(tbl);
-+ free(table);
-+ free(jtable);
- freeArray(env, srcImageP, src, sdata, NULL, NULL, NULL);
- awt_freeParsedImage(srcImageP, TRUE);
- awt_freeParsedImage(dstImageP, TRUE);
-@@ -1285,6 +1302,9 @@
- (jbyte *) table[j],
- JNI_ABORT);
- }
-+ free(tbl);
-+ free(table);
-+ free(jtable);
- freeArray(env, srcImageP, src, sdata, NULL, NULL, NULL);
- awt_freeParsedImage(srcImageP, TRUE);
- awt_freeParsedImage(dstImageP, TRUE);
-@@ -1414,12 +1434,15 @@
-
- /* Parse the source raster - reject custom images */
- if ((status = awt_parseRaster(env, jsrc, srcRasterP)) <= 0) {
-+ free(srcRasterP);
-+ free(dstRasterP);
- return 0;
- }
-
- /* Parse the destination image - reject custom images */
- if ((status = awt_parseRaster(env, jdst, dstRasterP)) <= 0) {
- awt_freeParsedRaster(srcRasterP, TRUE);
-+ free(dstRasterP);
- return 0;
- }
-
diff --git a/java/openjdk6/files/icedtea/openjdk/6961178-doclet_xml.patch b/java/openjdk6/files/icedtea/openjdk/6961178-doclet_xml.patch
deleted file mode 100644
index dccc894c9ddb..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/6961178-doclet_xml.patch
+++ /dev/null
@@ -1,1989 +0,0 @@
-# HG changeset patch
-# User andrew
-# Date 1371665441 18000
-# Node ID c9c59391b86f45e4af2a89d95e1ba83ffdaf1d66
-# Parent 694e895f2b866d36ed7f8d4ea08ec64677d3fba1
-6961178: Allow doclet.xml to contain XML attributes
-Reviewed-by: bpatel
-
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractBuilder.java
-@@ -92,44 +92,42 @@
- public abstract void build() throws IOException;
-
- /**
-- * Build the documentation, as specified by the given XML elements.
-+ * Build the documentation, as specified by the given XML element.
- *
-- * @param elements the XML elements that specify which components to
-- * document.
-+ * @param node the XML element that specifies which component to document.
- */
-- protected void build(List elements) {
-- for (int i = 0; i < elements.size(); i++ ) {
-- Object element = elements.get(i);
-- String component = (String)
-- ((element instanceof String) ?
-- element :
-- ((List) element).get(0));
-- try {
-- invokeMethod("build" + component,
-- element instanceof String ?
-- new Class[] {} :
-- new Class[] {List.class},
-- element instanceof String ?
-- new Object[] {} :
-- new Object[] {((List) element).subList(1,
-- ((List) element).size())});
-- } catch (NoSuchMethodException e) {
-- e.printStackTrace();
-- configuration.root.printError("Unknown element: " + component);
-- throw new DocletAbortException();
-- } catch (InvocationTargetException e) {
-- e.getCause().printStackTrace();
-- } catch (Exception e) {
-- e.printStackTrace();
-- configuration.root.printError("Exception " +
-- e.getClass().getName() +
-- " thrown while processing element: " + component);
-- throw new DocletAbortException();
-- }
-+ protected void build(XMLNode node) {
-+ String component = node.name;
-+ try {
-+ invokeMethod("build" + component,
-+ new Class<?>[] { XMLNode.class },
-+ new Object[] { node });
-+ } catch (NoSuchMethodException e) {
-+ e.printStackTrace();
-+ configuration.root.printError("Unknown element: " + component);
-+ throw new DocletAbortException();
-+ } catch (InvocationTargetException e) {
-+ e.getCause().printStackTrace();
-+ } catch (Exception e) {
-+ e.printStackTrace();
-+ configuration.root.printError("Exception " +
-+ e.getClass().getName() +
-+ " thrown while processing element: " + component);
-+ throw new DocletAbortException();
- }
- }
-
- /**
-+ * Build the documentation, as specified by the children of the given XML element.
-+ *
-+ * @param node the XML element that specifies which components to document.
-+ */
-+ protected void buildChildren(XMLNode node) {
-+ for (XMLNode child: node.children)
-+ build(child);
-+ }
-+
-+ /**
- * Given the name and parameters, invoke the method in the builder. This
- * method is required to invoke the appropriate build method as instructed
- * by the builder XML file.
-@@ -138,7 +136,14 @@
- * @param paramClasses the types for each parameter.
- * @param params the parameters of the method.
- */
-- protected abstract void invokeMethod(String methodName, Class[] paramClasses,
-- Object[] params)
-- throws Exception;
-+ protected void invokeMethod(String methodName, Class<?>[] paramClasses,
-+ Object[] params)
-+ throws Exception {
-+ if (DEBUG) {
-+ configuration.root.printError("DEBUG: " + this.getClass().getName()
-+ + "." + methodName);
-+ }
-+ Method method = this.getClass().getMethod(methodName, paramClasses);
-+ method.invoke(this, params);
-+ }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractMemberBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractMemberBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractMemberBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractMemberBuilder.java
-@@ -27,7 +27,6 @@
-
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.tools.doclets.internal.toolkit.util.*;
--import java.util.*;
-
- /**
- * The superclass for all member builders. Member builders are only executed
-@@ -69,9 +68,10 @@
- *
- * @param elements {@inheritDoc}
- */
-- public void build(List elements) {
-+ @Override
-+ public void build(XMLNode node) {
- if (hasMembersToDocument()) {
-- super.build(elements);
-+ super.build(node);
- }
- }
-
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeBuilder.java
-@@ -30,7 +30,6 @@
- import com.sun.javadoc.*;
- import java.io.*;
- import java.util.*;
--import java.lang.reflect.*;
-
- /**
- * Builds the summary for a given annotation type.
-@@ -92,20 +91,6 @@
- /**
- * {@inheritDoc}
- */
-- public void invokeMethod(String methodName, Class[] paramClasses,
-- Object[] params)
-- throws Exception {
-- if (DEBUG) {
-- configuration.root.printError("DEBUG: " + this.getClass().getName()
-- + "." + methodName);
-- }
-- Method method = this.getClass().getMethod(methodName, paramClasses);
-- method.invoke(this, params);
-- }
--
-- /**
-- * {@inheritDoc}
-- */
- public void build() throws IOException {
- build(LayoutParser.getInstance(configuration).parseXML(ROOT));
- }
-@@ -122,8 +107,8 @@
- *
- * @param elements the XML elements that specify how to document a class.
- */
-- public void buildAnnotationTypeDoc(List elements) throws Exception {
-- build(elements);
-+ public void buildAnnotationTypeDoc(XMLNode node) throws Exception {
-+ buildChildren(node);
- writer.close();
- copyDocFiles();
- }
-@@ -154,7 +139,7 @@
- /**
- * Build the header of the page.
- */
-- public void buildAnnotationTypeHeader() {
-+ public void buildAnnotationTypeHeader(XMLNode node) {
- writer.writeHeader(configuration.getText("doclet.AnnotationType") +
- " " + annotationTypeDoc.name());
- }
-@@ -162,14 +147,14 @@
- /**
- * If this class is deprecated, print the appropriate information.
- */
-- public void buildDeprecationInfo () {
-+ public void buildDeprecationInfo (XMLNode node) {
- writer.writeAnnotationTypeDeprecationInfo();
- }
-
- /**
- * Build the signature of the current annotation type.
- */
-- public void buildAnnotationTypeSignature() {
-+ public void buildAnnotationTypeSignature(XMLNode node) {
- StringBuffer modifiers = new StringBuffer(
- annotationTypeDoc.modifiers() + " ");
- writer.writeAnnotationTypeSignature(
-@@ -180,14 +165,14 @@
- /**
- * Build the class description.
- */
-- public void buildAnnotationTypeDescription() {
-+ public void buildAnnotationTypeDescription(XMLNode node) {
- writer.writeAnnotationTypeDescription();
- }
-
- /**
- * Build the tag information for the current class.
- */
-- public void buildAnnotationTypeTagInfo() {
-+ public void buildAnnotationTypeTagInfo(XMLNode node) {
- writer.writeAnnotationTypeTagInfo();
- }
-
-@@ -197,9 +182,9 @@
- * @param elements the XML elements that specify how a member summary is
- * documented.
- */
-- public void buildMemberSummary(List elements) throws Exception {
-+ public void buildMemberSummary(XMLNode node) throws Exception {
- configuration.getBuilderFactory().
-- getMemberSummaryBuilder(writer).build(elements);
-+ getMemberSummaryBuilder(writer).buildChildren(node);
- writer.completeMemberSummaryBuild();
- }
-
-@@ -209,10 +194,10 @@
- * @param elements the XML elements that specify how a annotation type
- * members are documented.
- */
-- public void buildAnnotationTypeOptionalMemberDetails(List elements)
-+ public void buildAnnotationTypeOptionalMemberDetails(XMLNode node)
- throws Exception {
- configuration.getBuilderFactory().
-- getAnnotationTypeOptionalMemberBuilder(writer).build(elements);
-+ getAnnotationTypeOptionalMemberBuilder(writer).buildChildren(node);
- }
-
- /**
-@@ -221,17 +206,17 @@
- * @param elements the XML elements that specify how a annotation type
- * members are documented.
- */
-- public void buildAnnotationTypeRequiredMemberDetails(List elements)
-+ public void buildAnnotationTypeRequiredMemberDetails(XMLNode node)
- throws Exception {
- configuration.getBuilderFactory().
-- getAnnotationTypeRequiredMemberBuilder(writer).build(elements);
-+ getAnnotationTypeRequiredMemberBuilder(writer).buildChildren(node);
- }
-
-
- /**
- * Build the footer of the page.
- */
-- public void buildAnnotationTypeFooter() {
-+ public void buildAnnotationTypeFooter(XMLNode node) {
- writer.writeFooter();
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeOptionalMemberBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeOptionalMemberBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeOptionalMemberBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeOptionalMemberBuilder.java
-@@ -30,7 +30,6 @@
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.javadoc.*;
- import java.util.*;
--import java.lang.reflect.*;
-
- /**
- * Builds documentation for optional annotation type members.
-@@ -85,6 +84,7 @@
- /**
- * {@inheritDoc}
- */
-+ @Override
- public String getName() {
- return "AnnotationTypeOptionalMemberDetails";
- }
-@@ -95,34 +95,20 @@
- * @param elements the XML elements that specify how to construct this
- * documentation.
- */
-- public void buildAnnotationTypeOptionalMember(List elements) {
-+ public void buildAnnotationTypeOptionalMember(XMLNode node) {
- if (writer == null) {
- return;
- }
- for (currentMemberIndex = 0; currentMemberIndex < members.size();
- currentMemberIndex++) {
-- build(elements);
-+ buildChildren(node);
- }
- }
-
- /**
-- * {@inheritDoc}
-- */
-- public void invokeMethod(String methodName, Class[] paramClasses,
-- Object[] params)
-- throws Exception {
-- if (DEBUG) {
-- configuration.root.printError("DEBUG: " + this.getClass().getName()
-- + "." + methodName);
-- }
-- Method method = this.getClass().getMethod(methodName, paramClasses);
-- method.invoke(this, params);
-- }
--
-- /**
- * Document the default value for this optional member.
- */
-- public void buildDefaultValueInfo() {
-+ public void buildDefaultValueInfo(XMLNode node) {
- ((AnnotationTypeOptionalMemberWriter) writer).writeDefaultValueInfo(
- (MemberDoc) members.get(currentMemberIndex));
- }
-@@ -130,6 +116,7 @@
- /**
- * {@inheritDoc}
- */
-+ @Override
- public AnnotationTypeRequiredMemberWriter getWriter() {
- return writer;
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeRequiredMemberBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeRequiredMemberBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeRequiredMemberBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeRequiredMemberBuilder.java
-@@ -30,7 +30,6 @@
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.javadoc.*;
- import java.util.*;
--import java.lang.reflect.*;
-
- /**
- * Builds documentation for required annotation type members.
-@@ -114,20 +113,6 @@
- }
-
- /**
-- * {@inheritDoc}
-- */
-- public void invokeMethod(String methodName, Class[] paramClasses,
-- Object[] params)
-- throws Exception {
-- if (DEBUG) {
-- configuration.root.printError("DEBUG: " + this.getClass().getName()
-- + "." + methodName);
-- }
-- Method method = this.getClass().getMethod(methodName, paramClasses);
-- method.invoke(this, params);
-- }
--
-- /**
- * Returns a list of members that will be documented for the given class.
- * This information can be used for doclet specific documentation
- * generation.
-@@ -161,20 +146,20 @@
- * @param elements the XML elements that specify how to construct this
- * documentation.
- */
-- public void buildAnnotationTypeRequiredMember(List elements) {
-+ public void buildAnnotationTypeRequiredMember(XMLNode node) {
- if (writer == null) {
- return;
- }
- for (currentMemberIndex = 0; currentMemberIndex < members.size();
- currentMemberIndex++) {
-- build(elements);
-+ buildChildren(node);
- }
- }
-
- /**
- * Build the overall header.
- */
-- public void buildHeader() {
-+ public void buildHeader(XMLNode node) {
- writer.writeHeader(classDoc,
- configuration.getText("doclet.Annotation_Type_Member_Detail"));
- }
-@@ -182,7 +167,7 @@
- /**
- * Build the header for the individual members.
- */
-- public void buildMemberHeader() {
-+ public void buildMemberHeader(XMLNode node) {
- writer.writeMemberHeader((MemberDoc) members.get(
- currentMemberIndex),
- currentMemberIndex == 0);
-@@ -191,14 +176,14 @@
- /**
- * Build the signature.
- */
-- public void buildSignature() {
-+ public void buildSignature(XMLNode node) {
- writer.writeSignature((MemberDoc) members.get(currentMemberIndex));
- }
-
- /**
- * Build the deprecation information.
- */
-- public void buildDeprecationInfo() {
-+ public void buildDeprecationInfo(XMLNode node) {
- writer.writeDeprecated((MemberDoc) members.get(currentMemberIndex));
- }
-
-@@ -206,7 +191,7 @@
- * Build the comments for the member. Do nothing if
- * {@link Configuration#nocomment} is set to true.
- */
-- public void buildMemberComments() {
-+ public void buildMemberComments(XMLNode node) {
- if(! configuration.nocomment){
- writer.writeComments((MemberDoc) members.get(currentMemberIndex));
- }
-@@ -215,21 +200,21 @@
- /**
- * Build the tag information.
- */
-- public void buildTagInfo() {
-+ public void buildTagInfo(XMLNode node) {
- writer.writeTags((MemberDoc) members.get(currentMemberIndex));
- }
-
- /**
- * Build the footer for the individual member.
- */
-- public void buildMemberFooter() {
-+ public void buildMemberFooter(XMLNode node) {
- writer.writeMemberFooter();
- }
-
- /**
- * Build the overall footer.
- */
-- public void buildFooter() {
-+ public void buildFooter(XMLNode node) {
- writer.writeFooter(classDoc);
- }
-
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ClassBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ClassBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ClassBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ClassBuilder.java
-@@ -30,7 +30,6 @@
- import com.sun.javadoc.*;
- import java.io.*;
- import java.util.*;
--import java.lang.reflect.*;
-
- /**
- * Builds the summary for a given class.
-@@ -108,20 +107,6 @@
- /**
- * {@inheritDoc}
- */
-- public void invokeMethod(String methodName, Class[] paramClasses,
-- Object[] params)
-- throws Exception {
-- if (DEBUG) {
-- configuration.root.printError("DEBUG: " + this.getClass().getName()
-- + "." + methodName);
-- }
-- Method method = this.getClass().getMethod(methodName, paramClasses);
-- method.invoke(this, params);
-- }
--
-- /**
-- * {@inheritDoc}
-- */
- public void build() throws IOException {
- build(LayoutParser.getInstance(configuration).parseXML(ROOT));
- }
-@@ -138,8 +123,8 @@
- *
- * @param elements the XML elements that specify how to document a class.
- */
-- public void buildClassDoc(List elements) throws Exception {
-- build(elements);
-+ public void buildClassDoc(XMLNode node) throws Exception {
-+ buildChildren(node);
- writer.close();
- copyDocFiles();
- }
-@@ -169,7 +154,7 @@
- /**
- * Build the header of the page.
- */
-- public void buildClassHeader() {
-+ public void buildClassHeader(XMLNode node) {
- String key;
- if (isInterface) {
- key = "doclet.Interface";
-@@ -185,7 +170,7 @@
- /**
- * Build the class tree documentation.
- */
-- public void buildClassTree() {
-+ public void buildClassTree(XMLNode node) {
- writer.writeClassTree();
- }
-
-@@ -193,42 +178,42 @@
- * If this is a class, list all interfaces
- * implemented by this class.
- */
-- public void buildImplementedInterfacesInfo() {
-+ public void buildImplementedInterfacesInfo(XMLNode node) {
- writer.writeImplementedInterfacesInfo();
- }
-
- /**
- * If this is an interface, list all super interfaces.
- */
-- public void buildSuperInterfacesInfo() {
-+ public void buildSuperInterfacesInfo(XMLNode node) {
- writer.writeSuperInterfacesInfo();
- }
-
- /**
- * List the parameters of this class.
- */
-- public void buildTypeParamInfo() {
-+ public void buildTypeParamInfo(XMLNode node) {
- writer.writeTypeParamInfo();
- }
-
- /**
- * List all the classes extend this one.
- */
-- public void buildSubClassInfo() {
-+ public void buildSubClassInfo(XMLNode node) {
- writer.writeSubClassInfo();
- }
-
- /**
- * List all the interfaces that extend this one.
- */
-- public void buildSubInterfacesInfo() {
-+ public void buildSubInterfacesInfo(XMLNode node) {
- writer.writeSubInterfacesInfo();
- }
-
- /**
- * If this is an interface, list all classes that implement this interface.
- */
-- public void buildInterfaceUsageInfo () {
-+ public void buildInterfaceUsageInfo (XMLNode node) {
- writer.writeInterfaceUsageInfo();
- }
-
-@@ -236,21 +221,21 @@
- * If this is an inner class or interface, list the enclosing class or
- * interface.
- */
-- public void buildNestedClassInfo () {
-+ public void buildNestedClassInfo (XMLNode node) {
- writer.writeNestedClassInfo();
- }
-
- /**
- * If this class is deprecated, print the appropriate information.
- */
-- public void buildDeprecationInfo () {
-+ public void buildDeprecationInfo (XMLNode node) {
- writer.writeClassDeprecationInfo();
- }
-
- /**
- * Build the signature of the current class.
- */
-- public void buildClassSignature() {
-+ public void buildClassSignature(XMLNode node) {
- StringBuffer modifiers = new StringBuffer(classDoc.modifiers() + " ");
- if (isEnum) {
- modifiers.append("enum ");
-@@ -276,14 +261,14 @@
- /**
- * Build the class description.
- */
-- public void buildClassDescription() {
-+ public void buildClassDescription(XMLNode node) {
- writer.writeClassDescription();
- }
-
- /**
- * Build the tag information for the current class.
- */
-- public void buildClassTagInfo() {
-+ public void buildClassTagInfo(XMLNode node) {
- writer.writeClassTagInfo();
- }
-
-@@ -295,7 +280,7 @@
- */
- public void buildMemberSummary(List elements) throws Exception {
- configuration.getBuilderFactory().
-- getMemberSummaryBuilder(writer).build(elements);
-+ getMemberSummaryBuilder(writer).buildChildren(node);
- writer.completeMemberSummaryBuild();
- }
-
-@@ -305,9 +290,9 @@
- * @param elements the XML elements that specify how a enum constants are
- * documented.
- */
-- public void buildEnumConstantsDetails(List elements) throws Exception {
-+ public void buildEnumConstantsDetails(XMLNode node) throws Exception {
- configuration.getBuilderFactory().
-- getEnumConstantsBuilder(writer).build(elements);
-+ getEnumConstantsBuilder(writer).buildChildren(node);
- }
-
- /**
-@@ -315,9 +300,9 @@
- *
- * @param elements the XML elements that specify how a field is documented.
- */
-- public void buildFieldDetails(List elements) throws Exception {
-+ public void buildFieldDetails(XMLNode node) throws Exception {
- configuration.getBuilderFactory().
-- getFieldBuilder(writer).build(elements);
-+ getFieldBuilder(writer).buildChildren(node);
- }
-
- /**
-@@ -326,9 +311,9 @@
- * @param elements the XML elements that specify how to document a
- * constructor.
- */
-- public void buildConstructorDetails(List elements) throws Exception {
-+ public void buildConstructorDetails(XMLNode node) throws Exception {
- configuration.getBuilderFactory().
-- getConstructorBuilder(writer).build(elements);
-+ getConstructorBuilder(writer).buildChildren(node);
- }
-
- /**
-@@ -336,15 +321,15 @@
- *
- * @param elements the XML elements that specify how a method is documented.
- */
-- public void buildMethodDetails(List elements) throws Exception {
-+ public void buildMethodDetails(XMLNode node) throws Exception {
- configuration.getBuilderFactory().
-- getMethodBuilder(writer).build(elements);
-+ getMethodBuilder(writer).buildChildren(node);
- }
-
- /**
- * Build the footer of the page.
- */
-- public void buildClassFooter() {
-+ public void buildClassFooter(XMLNode node) {
- writer.writeFooter();
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstantsSummaryBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstantsSummaryBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstantsSummaryBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstantsSummaryBuilder.java
-@@ -30,7 +30,6 @@
- import com.sun.javadoc.*;
- import java.io.*;
- import java.util.*;
--import java.lang.reflect.*;
-
- /**
- * Builds the Constants Summary Page.
-@@ -109,20 +108,6 @@
- /**
- * {@inheritDoc}
- */
-- public void invokeMethod(String methodName, Class[] paramClasses,
-- Object[] params)
-- throws Exception {
-- if (DEBUG) {
-- configuration.root.printError("DEBUG: " + this.getClass().getName()
-- + "." + methodName);
-- }
-- Method method = this.getClass().getMethod(methodName, paramClasses);
-- method.invoke(this, params);
-- }
--
-- /**
-- * {@inheritDoc}
-- */
- public void build() throws IOException {
- if (writer == null) {
- //Doclet does not support this output.
-@@ -144,29 +129,29 @@
- * @param elements the list of elements describing constant summary
- * documentation.
- */
-- public void buildConstantSummary(List elements) throws Exception {
-- build(elements);
-+ public void buildConstantSummary(XMLNode node) throws Exception {
-+ buildChildren(node);
- writer.close();
- }
-
- /**
- * Build the header.
- */
-- public void buildHeader() {
-+ public void buildHeader(XMLNode node) {
- writer.writeHeader();
- }
-
- /**
- * Build the footer.
- */
-- public void buildFooter() {
-+ public void buildFooter(XMLNode node) {
- writer.writeFooter();
- }
-
- /**
- * Build the table of contents.
- */
-- public void buildContents() {
-+ public void buildContents(XMLNode node) {
- writer.writeContentsHeader();
- PackageDoc[] packages = configuration.packages;
- printedPackageHeaders = new HashSet();
-@@ -186,14 +171,14 @@
- * @param elements the XML elements that represent the components
- * of documentation for each package.
- */
-- public void buildConstantSummaries(List elements) {
-+ public void buildConstantSummaries(XMLNode node) {
- PackageDoc[] packages = configuration.packages;
- printedPackageHeaders = new HashSet();
- for (int i = 0; i < packages.length; i++) {
- if (hasConstantField(packages[i])) {
- currentPackage = packages[i];
- //Build the documentation for the current package.
-- build(elements);
-+ buildChildren(node);
- }
- }
- }
-@@ -204,8 +189,8 @@
- * @param elements the list of XML elements that make up package
- * documentation.
- */
-- public void buildPackageConstantSummary(List elements) {
-- build(elements);
-+ public void buildPackageConstantSummary(XMLNode node) {
-+ buildChildren(node);
- }
-
- /**
-@@ -214,7 +199,7 @@
- * @param elements the list of XML elements that make up the class
- * constant summary.
- */
-- public void buildClassConstantSummary(List elements) {
-+ public void buildClassConstantSummary(XMLNode node) {
- ClassDoc[] classes = currentPackage.name().length() > 0 ?
- currentPackage.allClasses() :
- configuration.classDocCatalog.allClasses(
-@@ -227,14 +212,14 @@
- }
- currentClass = classes[i];
- //Build the documentation for the current class.
-- build(elements);
-+ buildChildren(node);
- }
- }
-
- /**
- * Build the header for the given class.
- */
-- public void buildPackageHeader() {
-+ public void buildPackageHeader(XMLNode node) {
- String parsedPackageName = parsePackageName(currentPackage.name());
- if (! printedPackageHeaders.contains(parsedPackageName)) {
- writer.writePackageName(currentPackage,
-@@ -246,7 +231,7 @@
- /**
- * Build the header for the given class.
- */
-- public void buildClassHeader() {
-+ public void buildClassHeader(XMLNode node) {
- writer.writeConstantMembersHeader(currentClass);
- }
-
-@@ -254,14 +239,14 @@
- * Print summary of constant members in the
- * class.
- */
-- public void buildConstantMembers() {
-- new ConstantFieldBuilder(currentClass).buildMembersSummary();
-+ public void buildConstantMembers(XMLNode node) {
-+ new ConstantFieldBuilder(currentClass).buildMembersSummary(node);
- }
-
- /**
- * Build the footer for the given class.
- */
-- public void buildClassFooter() {
-+ public void buildClassFooter(XMLNode node) {
- writer.writeConstantMembersFooter(currentClass);
- }
-
-@@ -362,7 +347,7 @@
- /**
- * Builds the table of constants for a given class.
- */
-- protected void buildMembersSummary() {
-+ protected void buildMembersSummary(XMLNode node) {
- List members = new ArrayList(members());
- if (members.size() > 0) {
- Collections.sort(members);
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstructorBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstructorBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstructorBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstructorBuilder.java
-@@ -28,7 +28,6 @@
- import com.sun.tools.doclets.internal.toolkit.util.*;
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.javadoc.*;
--import java.lang.reflect.*;
- import java.util.*;
-
- /**
-@@ -136,22 +135,6 @@
- }
-
- /**
-- * {@inheritDoc}
-- */
-- public void invokeMethod(
-- String methodName,
-- Class[] paramClasses,
-- Object[] params)
-- throws Exception {
-- if (DEBUG) {
-- configuration.root.printError(
-- "DEBUG: " + this.getClass().getName() + "." + methodName);
-- }
-- Method method = this.getClass().getMethod(methodName, paramClasses);
-- method.invoke(this, params);
-- }
--
-- /**
- * Returns a list of constructors that will be documented for the given class.
- * This information can be used for doclet specific documentation
- * generation.
-@@ -177,21 +160,21 @@
- * @param elements the XML elements that specify how to construct this
- * documentation.
- */
-- public void buildConstructorDoc(List elements) {
-+ public void buildConstructorDoc(XMLNode node) {
- if (writer == null) {
- return;
- }
- for (currentMethodIndex = 0;
- currentMethodIndex < constructors.size();
- currentMethodIndex++) {
-- build(elements);
-+ buildChildren(node);
- }
- }
-
- /**
- * Build the overall header.
- */
-- public void buildHeader() {
-+ public void buildHeader(XMLNode node) {
- writer.writeHeader(
- classDoc,
- configuration.getText("doclet.Constructor_Detail"));
-@@ -200,7 +183,7 @@
- /**
- * Build the header for the individual constructor.
- */
-- public void buildConstructorHeader() {
-+ public void buildConstructorHeader(XMLNode node) {
- writer.writeConstructorHeader(
- (ConstructorDoc) constructors.get(currentMethodIndex),
- currentMethodIndex == 0);
-@@ -209,7 +192,7 @@
- /**
- * Build the signature.
- */
-- public void buildSignature() {
-+ public void buildSignature(XMLNode node) {
- writer.writeSignature(
- (ConstructorDoc) constructors.get(currentMethodIndex));
- }
-@@ -217,7 +200,7 @@
- /**
- * Build the deprecation information.
- */
-- public void buildDeprecationInfo() {
-+ public void buildDeprecationInfo(XMLNode node) {
- writer.writeDeprecated(
- (ConstructorDoc) constructors.get(currentMethodIndex));
- }
-@@ -226,7 +209,7 @@
- * Build the comments for the constructor. Do nothing if
- * {@link Configuration#nocomment} is set to true.
- */
-- public void buildConstructorComments() {
-+ public void buildConstructorComments(XMLNode node) {
- if (!configuration.nocomment) {
- writer.writeComments(
- (ConstructorDoc) constructors.get(currentMethodIndex));
-@@ -236,21 +219,21 @@
- /**
- * Build the tag information.
- */
-- public void buildTagInfo() {
-+ public void buildTagInfo(XMLNode node) {
- writer.writeTags((ConstructorDoc) constructors.get(currentMethodIndex));
- }
-
- /**
- * Build the footer for the individual constructor.
- */
-- public void buildConstructorFooter() {
-+ public void buildConstructorFooter(XMLNode node) {
- writer.writeConstructorFooter();
- }
-
- /**
- * Build the overall footer.
- */
-- public void buildFooter() {
-+ public void buildFooter(XMLNode node) {
- writer.writeFooter(classDoc);
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/EnumConstantBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/EnumConstantBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/EnumConstantBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/EnumConstantBuilder.java
-@@ -29,7 +29,6 @@
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.javadoc.*;
- import java.util.*;
--import java.lang.reflect.*;
-
- /**
- * Builds documentation for a enum constants.
-@@ -116,22 +115,6 @@
- }
-
- /**
-- * {@inheritDoc}
-- */
-- public void invokeMethod(
-- String methodName,
-- Class[] paramClasses,
-- Object[] params)
-- throws Exception {
-- if (DEBUG) {
-- configuration.root.printError(
-- "DEBUG: " + this.getClass().getName() + "." + methodName);
-- }
-- Method method = this.getClass().getMethod(methodName, paramClasses);
-- method.invoke(this, params);
-- }
--
-- /**
- * Returns a list of enum constants that will be documented for the given class.
- * This information can be used for doclet specific documentation
- * generation.
-@@ -165,21 +148,21 @@
- * @param elements the XML elements that specify how to construct this
- * documentation.
- */
-- public void buildEnumConstant(List elements) {
-+ public void buildEnumConstant(XMLNode node) {
- if (writer == null) {
- return;
- }
- for (currentEnumConstantsIndex = 0;
- currentEnumConstantsIndex < enumConstants.size();
- currentEnumConstantsIndex++) {
-- build(elements);
-+ buildChildren(node);
- }
- }
-
- /**
- * Build the overall header.
- */
-- public void buildHeader() {
-+ public void buildHeader(XMLNode node) {
- writer.writeHeader(
- classDoc,
- configuration.getText("doclet.Enum_Constant_Detail"));
-@@ -188,7 +171,7 @@
- /**
- * Build the header for the individual enum constants.
- */
-- public void buildEnumConstantHeader() {
-+ public void buildEnumConstantHeader(XMLNode node) {
- writer.writeEnumConstantHeader(
- (FieldDoc) enumConstants.get(currentEnumConstantsIndex),
- currentEnumConstantsIndex == 0);
-@@ -197,7 +180,7 @@
- /**
- * Build the signature.
- */
-- public void buildSignature() {
-+ public void buildSignature(XMLNode node) {
- writer.writeSignature(
- (FieldDoc) enumConstants.get(currentEnumConstantsIndex));
- }
-@@ -205,7 +188,7 @@
- /**
- * Build the deprecation information.
- */
-- public void buildDeprecationInfo() {
-+ public void buildDeprecationInfo(XMLNode node) {
- writer.writeDeprecated(
- (FieldDoc) enumConstants.get(currentEnumConstantsIndex));
- }
-@@ -214,7 +197,7 @@
- * Build the comments for the enum constant. Do nothing if
- * {@link Configuration#nocomment} is set to true.
- */
-- public void buildEnumConstantComments() {
-+ public void buildEnumConstantComments(XMLNode node) {
- if (!configuration.nocomment) {
- writer.writeComments(
- (FieldDoc) enumConstants.get(currentEnumConstantsIndex));
-@@ -224,7 +207,7 @@
- /**
- * Build the tag information.
- */
-- public void buildTagInfo() {
-+ public void buildTagInfo(XMLNode node) {
- writer.writeTags(
- (FieldDoc) enumConstants.get(currentEnumConstantsIndex));
- }
-@@ -232,14 +215,14 @@
- /**
- * Build the footer for the individual enum constants.
- */
-- public void buildEnumConstantFooter() {
-+ public void buildEnumConstantFooter(XMLNode node) {
- writer.writeEnumConstantFooter();
- }
-
- /**
- * Build the overall footer.
- */
-- public void buildFooter() {
-+ public void buildFooter(XMLNode node) {
- writer.writeFooter(classDoc);
- }
-
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/FieldBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/FieldBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/FieldBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/FieldBuilder.java
-@@ -29,7 +29,6 @@
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.javadoc.*;
- import java.util.*;
--import java.lang.reflect.*;
-
- /**
- * Builds documentation for a field.
-@@ -117,22 +116,6 @@
- }
-
- /**
-- * {@inheritDoc}
-- */
-- public void invokeMethod(
-- String methodName,
-- Class[] paramClasses,
-- Object[] params)
-- throws Exception {
-- if (DEBUG) {
-- configuration.root.printError(
-- "DEBUG: " + this.getClass().getName() + "." + methodName);
-- }
-- Method method = this.getClass().getMethod(methodName, paramClasses);
-- method.invoke(this, params);
-- }
--
-- /**
- * Returns a list of fields that will be documented for the given class.
- * This information can be used for doclet specific documentation
- * generation.
-@@ -166,21 +149,21 @@
- * @param elements the XML elements that specify how to construct this
- * documentation.
- */
-- public void buildFieldDoc(List elements) {
-+ public void buildFieldDoc(XMLNode node) {
- if (writer == null) {
- return;
- }
- for (currentFieldIndex = 0;
- currentFieldIndex < fields.size();
- currentFieldIndex++) {
-- build(elements);
-+ buildChildren(node);
- }
- }
-
- /**
- * Build the overall header.
- */
-- public void buildHeader() {
-+ public void buildHeader(XMLNode node) {
- writer.writeHeader(
- classDoc,
- configuration.getText("doclet.Field_Detail"));
-@@ -189,7 +172,7 @@
- /**
- * Build the header for the individual field.
- */
-- public void buildFieldHeader() {
-+ public void buildFieldHeader(XMLNode node) {
- writer.writeFieldHeader(
- (FieldDoc) fields.get(currentFieldIndex),
- currentFieldIndex == 0);
-@@ -198,14 +181,14 @@
- /**
- * Build the signature.
- */
-- public void buildSignature() {
-+ public void buildSignature(XMLNode node) {
- writer.writeSignature((FieldDoc) fields.get(currentFieldIndex));
- }
-
- /**
- * Build the deprecation information.
- */
-- public void buildDeprecationInfo() {
-+ public void buildDeprecationInfo(XMLNode node) {
- writer.writeDeprecated((FieldDoc) fields.get(currentFieldIndex));
- }
-
-@@ -213,7 +196,7 @@
- * Build the comments for the field. Do nothing if
- * {@link Configuration#nocomment} is set to true.
- */
-- public void buildFieldComments() {
-+ public void buildFieldComments(XMLNode node) {
- if (!configuration.nocomment) {
- writer.writeComments((FieldDoc) fields.get(currentFieldIndex));
- }
-@@ -222,21 +205,21 @@
- /**
- * Build the tag information.
- */
-- public void buildTagInfo() {
-+ public void buildTagInfo(XMLNode node) {
- writer.writeTags((FieldDoc) fields.get(currentFieldIndex));
- }
-
- /**
- * Build the footer for the individual field.
- */
-- public void buildFieldFooter() {
-+ public void buildFieldFooter(XMLNode node) {
- writer.writeFieldFooter();
- }
-
- /**
- * Build the overall footer.
- */
-- public void buildFooter() {
-+ public void buildFooter(XMLNode node) {
- writer.writeFooter(classDoc);
- }
-
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/LayoutParser.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/LayoutParser.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/LayoutParser.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/LayoutParser.java
-@@ -45,8 +45,8 @@
- /**
- * The map of XML elements that have been parsed.
- */
-- private Map xmlElementsMap;
--
-+ private Map<String,XMLNode> xmlElementsMap;
-+ private XMLNode currentNode;
- private Configuration configuration;
- private static LayoutParser instance;
- private String currentRoot;
-@@ -56,7 +56,7 @@
- * This class is a singleton.
- */
- private LayoutParser(Configuration configuration) {
-- xmlElementsMap = new HashMap();
-+ xmlElementsMap = new HashMap<String,XMLNode>();
- this.configuration = configuration;
- }
-
-@@ -78,20 +78,18 @@
- *
- * @return List the list of XML elements parsed.
- */
-- public List parseXML(String root) {
-+ public XMLNode parseXML(String root) {
- if (xmlElementsMap.containsKey(root)) {
- return (List) xmlElementsMap.get(root);
- }
- try {
-- List xmlElements = new ArrayList();
-- xmlElementsMap.put(root, xmlElements);
- currentRoot = root;
- isParsing = false;
- SAXParserFactory factory = SAXParserFactory.newInstance();
- SAXParser saxParser = factory.newSAXParser();
- InputStream in = configuration.getBuilderXML();
- saxParser.parse(in, this);
-- return xmlElements;
-+ return xmlElementsMap.get(root);
- } catch (Throwable t) {
- t.printStackTrace();
- throw new DocletAbortException();
-@@ -106,8 +104,11 @@
- throws SAXException {
- if (isParsing || qName.equals(currentRoot)) {
- isParsing = true;
-- List xmlElements = (List) xmlElementsMap.get(currentRoot);
-- xmlElements.add(qName);
-+ currentNode = new XMLNode(currentNode, qName);
-+ for (int i = 0; i < attrs.getLength(); i++)
-+ currentNode.attrs.put(attrs.getLocalName(i), attrs.getValue(i));
-+ if (qName.equals(currentRoot))
-+ xmlElementsMap.put(qName, currentNode);
- }
- }
-
-@@ -117,23 +118,9 @@
- public void endElement(String namespaceURI, String sName, String qName)
- throws SAXException {
- if (! isParsing) {
-- isParsing = false;
- return;
- }
-- List xmlElements = (List) xmlElementsMap.get(currentRoot);
-- if (xmlElements.get(xmlElements.size()-1).equals(qName)) {
-- return;
-- } else {
-- List subElements = new ArrayList();
-- int targetIndex = xmlElements.indexOf(qName);
-- int size = xmlElements.size();
-- for (int i = targetIndex; i < size; i++) {
-- subElements.add(xmlElements.get(targetIndex));
-- xmlElements.remove(targetIndex);
-- }
-- //Save the sub elements as a list.
-- xmlElements.add(subElements);
-- }
-+ currentNode = currentNode.parent;
- isParsing = ! qName.equals(currentRoot);
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MemberSummaryBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MemberSummaryBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MemberSummaryBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MemberSummaryBuilder.java
-@@ -29,7 +29,6 @@
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.javadoc.*;
- import java.util.*;
--import java.lang.reflect.*;
-
- /**
- * Builds the member summary.
-@@ -175,22 +174,6 @@
- }
-
- /**
-- * {@inheritDoc}
-- */
-- public void invokeMethod(
-- String methodName,
-- Class[] paramClasses,
-- Object[] params)
-- throws Exception {
-- if (DEBUG) {
-- configuration.root.printError(
-- "DEBUG: " + this.getClass().getName() + "." + methodName);
-- }
-- Method method = this.getClass().getMethod(methodName, paramClasses);
-- method.invoke(this, params);
-- }
--
-- /**
- * Return true it there are any members to summarize.
- *
- * @return true if there are any members to summarize.
-@@ -211,7 +194,7 @@
- /**
- * Build the summary for the enum constants.
- */
-- public void buildEnumConstantsSummary() {
-+ public void buildEnumConstantsSummary(XMLNode node) {
- buildSummary(
- memberSummaryWriters[VisibleMemberMap.ENUM_CONSTANTS],
- visibleMemberMaps[VisibleMemberMap.ENUM_CONSTANTS]);
-@@ -220,7 +203,7 @@
- /**
- * Build the summary for the optional members.
- */
-- public void buildAnnotationTypeOptionalMemberSummary() {
-+ public void buildAnnotationTypeOptionalMemberSummary(XMLNode node) {
- buildSummary(
- memberSummaryWriters[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL],
- visibleMemberMaps[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL]);
-@@ -229,7 +212,7 @@
- /**
- * Build the summary for the optional members.
- */
-- public void buildAnnotationTypeRequiredMemberSummary() {
-+ public void buildAnnotationTypeRequiredMemberSummary(XMLNode node) {
- buildSummary(
- memberSummaryWriters[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED],
- visibleMemberMaps[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED]);
-@@ -238,7 +221,7 @@
- /**
- * Build the summary for the fields.
- */
-- public void buildFieldsSummary() {
-+ public void buildFieldsSummary(XMLNode node) {
- buildSummary(
- memberSummaryWriters[VisibleMemberMap.FIELDS],
- visibleMemberMaps[VisibleMemberMap.FIELDS]);
-@@ -247,7 +230,7 @@
- /**
- * Build the inherited summary for the fields.
- */
-- public void buildFieldsInheritedSummary() {
-+ public void buildFieldsInheritedSummary(XMLNode node) {
- buildInheritedSummary(
- memberSummaryWriters[VisibleMemberMap.FIELDS],
- visibleMemberMaps[VisibleMemberMap.FIELDS]);
-@@ -256,7 +239,7 @@
- /**
- * Build the summary for the nested classes.
- */
-- public void buildNestedClassesSummary() {
-+ public void buildNestedClassesSummary(XMLNode node) {
- buildSummary(
- memberSummaryWriters[VisibleMemberMap.INNERCLASSES],
- visibleMemberMaps[VisibleMemberMap.INNERCLASSES]);
-@@ -265,7 +248,7 @@
- /**
- * Build the inherited summary for the nested classes.
- */
-- public void buildNestedClassesInheritedSummary() {
-+ public void buildNestedClassesInheritedSummary(XMLNode node) {
- buildInheritedSummary(
- memberSummaryWriters[VisibleMemberMap.INNERCLASSES],
- visibleMemberMaps[VisibleMemberMap.INNERCLASSES]);
-@@ -274,7 +257,7 @@
- /**
- * Build the method summary.
- */
-- public void buildMethodsSummary() {
-+ public void buildMethodsSummary(XMLNode node) {
- buildSummary(
- memberSummaryWriters[VisibleMemberMap.METHODS],
- visibleMemberMaps[VisibleMemberMap.METHODS]);
-@@ -283,7 +266,7 @@
- /**
- * Build the inherited method summary.
- */
-- public void buildMethodsInheritedSummary() {
-+ public void buildMethodsInheritedSummary(XMLNode node) {
- buildInheritedSummary(
- memberSummaryWriters[VisibleMemberMap.METHODS],
- visibleMemberMaps[VisibleMemberMap.METHODS]);
-@@ -292,7 +275,7 @@
- /**
- * Build the constructor summary.
- */
-- public void buildConstructorsSummary() {
-+ public void buildConstructorsSummary(XMLNode node) {
- buildSummary(
- memberSummaryWriters[VisibleMemberMap.CONSTRUCTORS],
- visibleMemberMaps[VisibleMemberMap.CONSTRUCTORS]);
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MethodBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MethodBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MethodBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MethodBuilder.java
-@@ -29,7 +29,7 @@
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.javadoc.*;
- import java.util.*;
--import java.lang.reflect.*;
-+
- /**
- * Builds documentation for a method.
- *
-@@ -112,22 +112,6 @@
- }
-
- /**
-- * {@inheritDoc}
-- */
-- public void invokeMethod(
-- String methodName,
-- Class[] paramClasses,
-- Object[] params)
-- throws Exception {
-- if (DEBUG) {
-- configuration.root.printError(
-- "DEBUG: " + this.getClass().getName() + "." + methodName);
-- }
-- Method method = this.getClass().getMethod(methodName, paramClasses);
-- method.invoke(this, params);
-- }
--
-- /**
- * Returns a list of methods that will be documented for the given class.
- * This information can be used for doclet specific documentation
- * generation.
-@@ -158,21 +142,21 @@
- /**
- * Build the method documentation.
- */
-- public void buildMethodDoc(List elements) {
-+ public void buildMethodDoc(XMLNode node) {
- if (writer == null) {
- return;
- }
- for (currentMethodIndex = 0;
- currentMethodIndex < methods.size();
- currentMethodIndex++) {
-- build(elements);
-+ buildChildren(node);
- }
- }
-
- /**
- * Build the overall header.
- */
-- public void buildHeader() {
-+ public void buildHeader(XMLNode node) {
- writer.writeHeader(
- classDoc,
- configuration.getText("doclet.Method_Detail"));
-@@ -181,7 +165,7 @@
- /**
- * Build the header for the individual method.
- */
-- public void buildMethodHeader() {
-+ public void buildMethodHeader(XMLNode node) {
- writer.writeMethodHeader(
- (MethodDoc) methods.get(currentMethodIndex),
- currentMethodIndex == 0);
-@@ -190,14 +174,14 @@
- /**
- * Build the signature.
- */
-- public void buildSignature() {
-+ public void buildSignature(XMLNode node) {
- writer.writeSignature((MethodDoc) methods.get(currentMethodIndex));
- }
-
- /**
- * Build the deprecation information.
- */
-- public void buildDeprecationInfo() {
-+ public void buildDeprecationInfo(XMLNode node) {
- writer.writeDeprecated((MethodDoc) methods.get(currentMethodIndex));
- }
-
-@@ -205,7 +189,7 @@
- * Build the comments for the method. Do nothing if
- * {@link Configuration#nocomment} is set to true. If this method
- */
-- public void buildMethodComments() {
-+ public void buildMethodComments(XMLNode node) {
- if (!configuration.nocomment) {
- MethodDoc method = (MethodDoc) methods.get(currentMethodIndex);
-
-@@ -228,21 +212,21 @@
- /**
- * Build the tag information.
- */
-- public void buildTagInfo() {
-+ public void buildTagInfo(XMLNode node) {
- writer.writeTags((MethodDoc) methods.get(currentMethodIndex));
- }
-
- /**
- * Build the footer of the method.
- */
-- public void buildMethodFooter() {
-+ public void buildMethodFooter(XMLNode node) {
- writer.writeMethodFooter();
- }
-
- /**
- * Build the overall footer.
- */
-- public void buildFooter() {
-+ public void buildFooter(XMLNode node) {
- writer.writeFooter(classDoc);
- }
-
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/PackageSummaryBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/PackageSummaryBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/PackageSummaryBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/PackageSummaryBuilder.java
-@@ -29,8 +29,6 @@
- import com.sun.tools.doclets.internal.toolkit.*;
- import com.sun.javadoc.*;
- import java.io.*;
--import java.util.*;
--import java.lang.reflect.*;
-
- /**
- * Builds the summary for a given package.
-@@ -85,22 +83,6 @@
- }
-
- /**
-- * {@inheritDoc}
-- */
-- public void invokeMethod(
-- String methodName,
-- Class[] paramClasses,
-- Object[] params)
-- throws Exception {
-- if (DEBUG) {
-- configuration.root.printError(
-- "DEBUG: " + this.getClass().getName() + "." + methodName);
-- }
-- Method method = this.getClass().getMethod(methodName, paramClasses);
-- method.invoke(this, params);
-- }
--
-- /**
- * Build the package summary.
- */
- public void build() throws IOException {
-@@ -121,8 +103,8 @@
- /**
- * Build the package documentation.
- */
-- public void buildPackageDoc(List elements) throws Exception {
-- build(elements);
-+ public void buildPackageDoc(XMLNode node) throws Exception {
-+ buildChildren(node);
- packageWriter.close();
- Util.copyDocFiles(
- configuration,
-@@ -136,14 +118,14 @@
- /**
- * Build the header of the summary.
- */
-- public void buildPackageHeader() {
-+ public void buildPackageHeader(XMLNode node) {
- packageWriter.writePackageHeader(Util.getPackageName(packageDoc));
- }
-
- /**
- * Build the description of the summary.
- */
-- public void buildPackageDescription() {
-+ public void buildPackageDescription(XMLNode node) {
- if (configuration.nocomment) {
- return;
- }
-@@ -153,7 +135,7 @@
- /**
- * Build the tags of the summary.
- */
-- public void buildPackageTags() {
-+ public void buildPackageTags(XMLNode node) {
- if (configuration.nocomment) {
- return;
- }
-@@ -163,28 +145,28 @@
- /**
- * Build the package summary.
- */
-- public void buildSummary(List elements) {
-- build(elements);
-+ public void buildSummary(XMLNode node) {
-+ buildChildren(node);
- }
-
- /**
- * Build the overall header.
- */
-- public void buildSummaryHeader() {
-+ public void buildSummaryHeader(XMLNode node) {
- packageWriter.writeSummaryHeader();
- }
-
- /**
- * Build the overall footer.
- */
-- public void buildSummaryFooter() {
-+ public void buildSummaryFooter(XMLNode node) {
- packageWriter.writeSummaryFooter();
- }
-
- /**
- * Build the summary for the classes in this package.
- */
-- public void buildClassSummary() {
-+ public void buildClassSummary(XMLNode node) {
- String classTableSummary =
- configuration.getText("doclet.Member_Table_Summary",
- configuration.getText("doclet.Class_Summary"),
-@@ -209,7 +191,7 @@
- /**
- * Build the summary for the interfaces in this package.
- */
-- public void buildInterfaceSummary() {
-+ public void buildInterfaceSummary(XMLNode node) {
- String interfaceTableSummary =
- configuration.getText("doclet.Member_Table_Summary",
- configuration.getText("doclet.Interface_Summary"),
-@@ -234,7 +216,7 @@
- /**
- * Build the summary for the enums in this package.
- */
-- public void buildAnnotationTypeSummary() {
-+ public void buildAnnotationTypeSummary(XMLNode node) {
- String annotationtypeTableSummary =
- configuration.getText("doclet.Member_Table_Summary",
- configuration.getText("doclet.Annotation_Types_Summary"),
-@@ -259,7 +241,7 @@
- /**
- * Build the summary for the enums in this package.
- */
-- public void buildEnumSummary() {
-+ public void buildEnumSummary(XMLNode node) {
- String enumTableSummary =
- configuration.getText("doclet.Member_Table_Summary",
- configuration.getText("doclet.Enum_Summary"),
-@@ -284,7 +266,7 @@
- /**
- * Build the summary for the exceptions in this package.
- */
-- public void buildExceptionSummary() {
-+ public void buildExceptionSummary(XMLNode node) {
- String exceptionTableSummary =
- configuration.getText("doclet.Member_Table_Summary",
- configuration.getText("doclet.Exception_Summary"),
-@@ -309,7 +291,7 @@
- /**
- * Build the summary for the errors in this package.
- */
-- public void buildErrorSummary() {
-+ public void buildErrorSummary(XMLNode node) {
- String errorTableSummary =
- configuration.getText("doclet.Member_Table_Summary",
- configuration.getText("doclet.Error_Summary"),
-@@ -334,7 +316,7 @@
- /**
- * Build the footer of the summary.
- */
-- public void buildPackageFooter() {
-+ public void buildPackageFooter(XMLNode node) {
- packageWriter.writePackageFooter();
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java
-@@ -26,7 +26,6 @@
- package com.sun.tools.doclets.internal.toolkit.builders;
-
- import java.io.*;
--import java.lang.reflect.*;
- import java.util.*;
-
- import com.sun.javadoc.*;
-@@ -132,47 +131,33 @@
- /**
- * Build the serialized form.
- */
-- public void buildSerializedForm(List elements) throws Exception {
-- build(elements);
-+ public void buildSerializedForm(XMLNode node) throws Exception {
-+ buildChildren(node);
- writer.close();
- }
-
- /**
-- * {@inheritDoc}
-- */
-- public void invokeMethod(String methodName, Class[] paramClasses,
-- Object[] params)
-- throws Exception {
-- if (DEBUG) {
-- configuration.root.printError("DEBUG: " + this.getClass().getName()
-- + "." + methodName);
-- }
-- Method method = this.getClass().getMethod(methodName, paramClasses);
-- method.invoke(this, params);
-- }
--
-- /**
- * Build the header.
- */
-- public void buildHeader() {
-+ public void buildHeader(XMLNode node) {
- writer.writeHeader(configuration.getText("doclet.Serialized_Form"));
- }
-
- /**
- * Build the contents.
- */
-- public void buildSerializedFormSummaries(List elements) {
-+ public void buildSerializedFormSummaries(XMLNode node) {
- PackageDoc[] packages = configuration.packages;
- for (int i = 0; i < packages.length; i++) {
- currentPackage = packages[i];
-- build(elements);
-+ buildChildren(node);
- }
- }
-
- /**
- * Build the package serialized for for the current package being processed.
- */
-- public void buildPackageSerializedForm(List elements) {
-+ public void buildPackageSerializedForm(XMLNode node) {
- String foo = currentPackage.name();
- ClassDoc[] classes = currentPackage.allClasses(false);
- if (classes == null || classes.length == 0) {
-@@ -184,14 +169,14 @@
- if (!serialClassFoundToDocument(classes)) {
- return;
- }
-- build(elements);
-+ buildChildren(node);
- }
-
-- public void buildPackageHeader() {
-+ public void buildPackageHeader(XMLNode node) {
- writer.writePackageHeader(Util.getPackageName(currentPackage));
- }
-
-- public void buildClassSerializedForm(List elements) {
-+ public void buildClassSerializedForm(XMLNode node) {
- ClassDoc[] classes = currentPackage.allClasses(false);
- Arrays.sort(classes);
- for (int j = 0; j < classes.length; j++) {
-@@ -202,19 +187,19 @@
- if(!serialClassInclude(currentClass)) {
- continue;
- }
-- build(elements);
-+ buildChildren(node);
- }
- }
- }
-
-- public void buildClassHeader() {
-+ public void buildClassHeader(XMLNode node) {
- writer.writeClassHeader(currentClass);
- }
-
- /**
- * Build the serial UID information for the given class.
- */
-- public void buildSerialUIDInfo() {
-+ public void buildSerialUIDInfo(XMLNode node) {
- FieldDoc[] fields = currentClass.fields(false);
- for (int i = 0; i < fields.length; i++) {
- if (fields[i].name().equals("serialVersionUID") &&
-@@ -229,7 +214,7 @@
- /**
- * Build the footer.
- */
-- public void buildFooter() {
-+ public void buildFooter(XMLNode node) {
- writer.writeFooter();
- }
-
-@@ -316,7 +301,7 @@
- /**
- * Build the method header.
- */
-- public void buildMethodHeader() {
-+ public void buildMethodHeader(XMLNode node) {
- if (currentClass.serializationMethods().length > 0) {
- methodWriter.writeHeader(
- configuration.getText("doclet.Serialized_Form_methods"));
-@@ -333,28 +318,28 @@
- /**
- * Build the method sub header.
- */
-- public void buildMethodSubHeader() {
-+ public void buildMethodSubHeader(XMLNode node) {
- methodWriter.writeMemberHeader((MethodDoc) currentMember);
- }
-
- /**
- * Build the deprecated method description.
- */
-- public void buildDeprecatedMethodInfo() {
-+ public void buildDeprecatedMethodInfo(XMLNode node) {
- methodWriter.writeDeprecatedMemberInfo((MethodDoc) currentMember);
- }
-
- /**
- * Build method tags.
- */
-- public void buildMethodDescription() {
-+ public void buildMethodDescription(XMLNode node) {
- methodWriter.writeMemberDescription((MethodDoc) currentMember);
- }
-
- /**
- * Build the method tags.
- */
-- public void buildMethodTags() {
-+ public void buildMethodTags(XMLNode node) {
- methodWriter.writeMemberTags((MethodDoc) currentMember);
- MethodDoc method = (MethodDoc)currentMember;
- if (method.name().compareTo("writeExternal") == 0
-@@ -370,24 +355,24 @@
- /**
- * build the information for the method.
- */
-- public void buildMethodInfo(List elements) {
-+ public void buildMethodInfo(XMLNode node) {
- if(configuration.nocomment){
- return;
- }
-- build(elements);
-+ buildChildren(node);
- }
-
- /**
- * Build the method footer.
- */
-- public void buildMethodFooter() {
-+ public void buildMethodFooter(XMLNode node) {
- methodWriter.writeMemberFooter();
- }
-
- /**
- * Build the field header.
- */
-- public void buildFieldHeader() {
-+ public void buildFieldHeader(XMLNode node) {
- if (currentClass.serializableFields().length > 0) {
- buildFieldSerializationOverview(currentClass);
- fieldWriter.writeHeader(configuration.getText(
-@@ -427,7 +412,7 @@
- /**
- * Build the field sub header.
- */
-- public void buildFieldSubHeader() {
-+ public void buildFieldSubHeader(XMLNode node) {
- if (! currentClass.definesSerializableFields() ){
- FieldDoc field = (FieldDoc) currentMember;
- fieldWriter.writeMemberHeader(field.type().asClassDoc(),
-@@ -438,7 +423,7 @@
- /**
- * Build the field deprecation information.
- */
-- public void buildFieldDeprecationInfo() {
-+ public void buildFieldDeprecationInfo(XMLNode node) {
- if (!currentClass.definesSerializableFields()) {
- FieldDoc field = (FieldDoc)currentMember;
- fieldWriter.writeMemberDeprecatedInfo(field);
-@@ -448,7 +433,7 @@
- /**
- * Build the field information.
- */
-- public void buildFieldInfo() {
-+ public void buildFieldInfo(XMLNode node) {
- if(configuration.nocomment){
- return;
- }
-@@ -484,7 +469,7 @@
- /**
- * Build the field sub footer.
- */
-- public void buildFieldSubFooter() {
-+ public void buildFieldSubFooter(XMLNode node) {
- if (! currentClass.definesSerializableFields()) {
- fieldWriter.writeMemberFooter();
- }
-@@ -494,12 +479,12 @@
- * Build the summaries for the methods that belong to the given
- * class.
- */
-- public void buildSerializableMethods(List elements) {
-+ public void buildSerializableMethods(XMLNode node) {
- MemberDoc[] members = currentClass.serializationMethods();
- if (members.length > 0) {
- for (int i = 0; i < members.length; i++) {
- currentMember = members[i];
-- build(elements);
-+ buildChildren(node);
- }
- }
- }
-@@ -508,12 +493,12 @@
- * Build the summaries for the fields that belong to the given
- * class.
- */
-- public void buildSerializableFields(List elements) {
-+ public void buildSerializableFields(XMLNode node) {
- MemberDoc[] members = currentClass.serializableFields();
- if (members.length > 0) {
- for (int i = 0; i < members.length; i++) {
- currentMember = members[i];
-- build(elements);
-+ buildChildren(node);
- }
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/XMLNode.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/XMLNode.java
-new file mode 100644
---- /dev/null
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/XMLNode.java
-@@ -0,0 +1,69 @@
-+/*
-+ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+package com.sun.tools.doclets.internal.toolkit.builders;
-+
-+import java.util.ArrayList;
-+import java.util.HashMap;
-+import java.util.List;
-+import java.util.Map;
-+
-+/**
-+ * Simple class to represent the attribute and elements of an XML node.
-+ */
-+public class XMLNode {
-+ XMLNode(XMLNode parent, String qname) {
-+ this.parent = parent;
-+ name = qname;
-+ attrs = new HashMap<String,String>();
-+ children = new ArrayList<XMLNode>();
-+
-+ if (parent != null)
-+ parent.children.add(this);
-+ }
-+
-+ @Override
-+ public String toString() {
-+ StringBuilder sb = new StringBuilder();
-+ sb.append("<");
-+ sb.append(name);
-+ for (Map.Entry<String,String> e: attrs.entrySet())
-+ sb.append(" " + e.getKey() + "=\"" + e.getValue() + "\"");
-+ if (children.size() == 0)
-+ sb.append("/>");
-+ else {
-+ sb.append(">");
-+ for (XMLNode c: children)
-+ sb.append(c.toString());
-+ sb.append("</" + name + ">");
-+ }
-+ return sb.toString();
-+ }
-+
-+ final XMLNode parent;
-+ final String name;
-+ final Map<String,String> attrs;
-+ final List<XMLNode> children;
-+}
diff --git a/java/openjdk6/files/icedtea/openjdk/6963811-deadlock_fix.patch b/java/openjdk6/files/icedtea/openjdk/6963811-deadlock_fix.patch
deleted file mode 100644
index 50e4c6d7d67a..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/6963811-deadlock_fix.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-# HG changeset patch
-# User andrew
-# Date 1365711839 -3600
-# Node ID df591e0dfd349dc5986cc17949939c588d5a9690
-# Parent 06255d9f82761abc74c30f31fda00968ffef4bc3
-6963811: Deadlock-prone locking changes in Introspector
-Reviewed-by: peterz, rupashka
-
-diff --git a/src/share/classes/java/beans/Introspector.java b/src/share/classes/java/beans/Introspector.java
---- jdk/src/share/classes/java/beans/Introspector.java
-+++ jdk/src/share/classes/java/beans/Introspector.java
-@@ -170,21 +170,24 @@
- if (!ReflectUtil.isPackageAccessible(beanClass)) {
- return (new Introspector(beanClass, null, USE_ALL_BEANINFO)).getBeanInfo();
- }
-+ WeakCache<Class<?>, BeanInfo> beanInfoCache;
-+ BeanInfo beanInfo;
- synchronized (BEANINFO_CACHE) {
-- WeakCache<Class<?>, BeanInfo> beanInfoCache =
-- (WeakCache<Class<?>, BeanInfo>) AppContext.getAppContext().get(BEANINFO_CACHE);
-+ beanInfoCache = (WeakCache<Class<?>, BeanInfo>) AppContext.getAppContext().get(BEANINFO_CACHE);
-
- if (beanInfoCache == null) {
- beanInfoCache = new WeakCache<Class<?>, BeanInfo>();
- AppContext.getAppContext().put(BEANINFO_CACHE, beanInfoCache);
- }
-- BeanInfo beanInfo = beanInfoCache.get(beanClass);
-- if (beanInfo == null) {
-- beanInfo = (new Introspector(beanClass, null, USE_ALL_BEANINFO)).getBeanInfo();
-+ beanInfo = beanInfoCache.get(beanClass);
-+ }
-+ if (beanInfo == null) {
-+ beanInfo = (new Introspector(beanClass, null, USE_ALL_BEANINFO)).getBeanInfo();
-+ synchronized (BEANINFO_CACHE) {
- beanInfoCache.put(beanClass, beanInfo);
- }
-- return beanInfo;
- }
-+ return beanInfo;
- }
-
- /**
diff --git a/java/openjdk6/files/icedtea/openjdk/7006270-regressions.patch b/java/openjdk6/files/icedtea/openjdk/7006270-regressions.patch
deleted file mode 100644
index 1a71b415bdee..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/7006270-regressions.patch
+++ /dev/null
@@ -1,299 +0,0 @@
-# HG changeset patch
-# User bpatel
-# Date 1292276687 28800
-# Node ID 445134ee98c84b6d139fab0f9a9d8718c686c63b
-# Parent 5761891cfee48bc9382dd68e5e1bf164cff9bfbf
-7006270: Several javadoc regression tests are failing on windows
-Reviewed-by: jjg
-
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java
-@@ -239,7 +239,7 @@
- Type superclass = Util.getFirstVisibleSuperClass(classDoc,
- configuration());
- if (superclass != null) {
-- pre.addContent("\n");
-+ pre.addContent(DocletConstants.NL);
- pre.addContent("extends ");
- Content link = new RawHtml(getLink(new LinkInfoImpl(
- LinkInfoImpl.CONTEXT_CLASS_SIGNATURE_PARENT_NAME,
-@@ -257,7 +257,7 @@
- continue;
- }
- if (counter == 0) {
-- pre.addContent("\n");
-+ pre.addContent(DocletConstants.NL);
- pre.addContent(isInterface? "extends " : "implements ");
- } else {
- pre.addContent(", ");
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDoclet.java b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDoclet.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDoclet.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDoclet.java
-@@ -144,11 +144,12 @@
- !configuration.nohelp) {
- HelpWriter.generate(configuration);
- }
-- // If a stylesheet file is not specified, copy the default stylesheet.
-+ // If a stylesheet file is not specified, copy the default stylesheet
-+ // and replace newline with platform-specific newline.
- if (configuration.stylesheetfile.length() == 0) {
- Util.copyFile(configuration, "stylesheet.css", Util.RESOURCESDIR,
- (configdestdir.isEmpty()) ?
-- System.getProperty("user.dir") : configdestdir, false);
-+ System.getProperty("user.dir") : configdestdir, false, true);
- }
- }
-
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java
-@@ -216,15 +216,15 @@
- public Content getAllClassesLinkScript(String id) {
- HtmlTree script = new HtmlTree(HtmlTag.SCRIPT);
- script.addAttr(HtmlAttr.TYPE, "text/javascript");
-- String scriptCode = "<!--\n" +
-- " allClassesLink = document.getElementById(\"" + id + "\");\n" +
-- " if(window==top) {\n" +
-- " allClassesLink.style.display = \"block\";\n" +
-- " }\n" +
-- " else {\n" +
-- " allClassesLink.style.display = \"none\";\n" +
-- " }\n" +
-- " //-->\n";
-+ String scriptCode = "<!--" + DocletConstants.NL +
-+ " allClassesLink = document.getElementById(\"" + id + "\");" + DocletConstants.NL +
-+ " if(window==top) {" + DocletConstants.NL +
-+ " allClassesLink.style.display = \"block\";" + DocletConstants.NL +
-+ " }" + DocletConstants.NL +
-+ " else {" + DocletConstants.NL +
-+ " allClassesLink.style.display = \"none\";" + DocletConstants.NL +
-+ " }" + DocletConstants.NL +
-+ " //-->" + DocletConstants.NL;
- Content scriptContent = new RawHtml(scriptCode);
- script.addContent(scriptContent);
- Content div = HtmlTree.DIV(script);
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/Comment.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/Comment.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/Comment.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/Comment.java
-@@ -82,9 +82,9 @@
- */
- public void write(StringBuilder contentBuilder) {
- if (!endsWithNewLine(contentBuilder))
-- contentBuilder.append("\n");
-+ contentBuilder.append(DocletConstants.NL);
- contentBuilder.append("<!-- ");
- contentBuilder.append(commentText);
-- contentBuilder.append(" -->\n");
-+ contentBuilder.append(" -->" + DocletConstants.NL);
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/DocType.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/DocType.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/DocType.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/DocType.java
-@@ -48,7 +48,7 @@
- */
- private DocType(String type, String dtd) {
- docType = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 " + type +
-- "//EN\" \"" + dtd + "\">\n";
-+ "//EN\" \"" + dtd + "\">" + DocletConstants.NL;
- }
-
- /**
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java
-@@ -753,7 +753,7 @@
- */
- public void write(StringBuilder contentBuilder) {
- if (!isInline() && !endsWithNewLine(contentBuilder))
-- contentBuilder.append("\n");
-+ contentBuilder.append(DocletConstants.NL);
- String tagString = htmlTag.toString();
- contentBuilder.append("<" + tagString);
- Iterator<HtmlAttr> iterator = attrs.keySet().iterator();
-@@ -772,6 +772,6 @@
- if (htmlTag.endTagRequired())
- contentBuilder.append("</" + tagString + ">");
- if (!isInline())
-- contentBuilder.append("\n");
-+ contentBuilder.append(DocletConstants.NL);
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java
---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java
-@@ -287,11 +287,11 @@
- HtmlTree script = new HtmlTree(HtmlTag.SCRIPT);
- if(winTitle != null && winTitle.length() > 0) {
- script.addAttr(HtmlAttr.TYPE, "text/javascript");
-- String scriptCode = "<!--\n" +
-- " if (location.href.indexOf('is-external=true') == -1) {\n" +
-- " parent.document.title=\"" + winTitle + "\";\n" +
-- " }\n" +
-- "//-->\n";
-+ String scriptCode = "<!--" + DocletConstants.NL +
-+ " if (location.href.indexOf('is-external=true') == -1) {" + DocletConstants.NL +
-+ " parent.document.title=\"" + winTitle + "\";" + DocletConstants.NL +
-+ " }" + DocletConstants.NL +
-+ "//-->" + DocletConstants.NL;
- RawHtml scriptContent = new RawHtml(scriptCode);
- script.addContent(scriptContent);
- }
-@@ -306,15 +306,15 @@
- protected Content getFramesetJavaScript(){
- HtmlTree script = new HtmlTree(HtmlTag.SCRIPT);
- script.addAttr(HtmlAttr.TYPE, "text/javascript");
-- String scriptCode = "\n targetPage = \"\" + window.location.search;\n" +
-- " if (targetPage != \"\" && targetPage != \"undefined\")\n" +
-- " targetPage = targetPage.substring(1);\n" +
-- " if (targetPage.indexOf(\":\") != -1)\n" +
-- " targetPage = \"undefined\";\n" +
-- " function loadFrames() {\n" +
-- " if (targetPage != \"\" && targetPage != \"undefined\")\n" +
-- " top.classFrame.location = top.targetPage;\n" +
-- " }\n";
-+ String scriptCode = DocletConstants.NL + " targetPage = \"\" + window.location.search;" + DocletConstants.NL +
-+ " if (targetPage != \"\" && targetPage != \"undefined\")" + DocletConstants.NL +
-+ " targetPage = targetPage.substring(1);" + DocletConstants.NL +
-+ " if (targetPage.indexOf(\":\") != -1)" + DocletConstants.NL +
-+ " targetPage = \"undefined\";" + DocletConstants.NL +
-+ " function loadFrames() {" + DocletConstants.NL +
-+ " if (targetPage != \"\" && targetPage != \"undefined\")" + DocletConstants.NL +
-+ " top.classFrame.location = top.targetPage;" + DocletConstants.NL +
-+ " }" + DocletConstants.NL;
- RawHtml scriptContent = new RawHtml(scriptCode);
- script.addContent(scriptContent);
- return script;
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/Content.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/Content.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/Content.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/Content.java
-@@ -101,6 +101,6 @@
- */
- public boolean endsWithNewLine(StringBuilder contentBuilder) {
- return ((contentBuilder.length() == 0) ||
-- (contentBuilder.substring(contentBuilder.length() - 1).equals("\n")));
-+ (contentBuilder.toString().endsWith(DocletConstants.NL)));
- }
- }
-diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java
---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java
-+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java
-@@ -211,14 +211,14 @@
- try {
- while ((len = input.read(bytearr)) != -1) {
- output.write(bytearr, 0, len);
-- }
-+ }
- } catch (FileNotFoundException exc) {
- } catch (SecurityException exc) {
-- } finally {
-+ } finally {
- input.close();
- output.close();
-+ }
- }
-- }
-
- /**
- * Copy the given directory contents from the source package directory
-@@ -330,7 +330,7 @@
- String resourcefile, boolean overwrite) {
- String destresourcesdir = configuration.destDirName + RESOURCESDIR;
- copyFile(configuration, resourcefile, RESOURCESDIR, destresourcesdir,
-- overwrite);
-+ overwrite, false);
- }
-
- /**
-@@ -345,23 +345,46 @@
- * @param overwrite A flag to indicate whether the file in the
- * destination directory will be overwritten if
- * it already exists.
-+ * @param replaceNewLine true if the newline needs to be replaced with platform-
-+ * specific newline.
- */
- public static void copyFile(Configuration configuration, String file, String source,
-- String destination, boolean overwrite) {
-+ String destination, boolean overwrite, boolean replaceNewLine) {
- DirectoryManager.createDirectory(configuration, destination);
- File destfile = new File(destination, file);
- if(destfile.exists() && (! overwrite)) return;
- try {
- InputStream in = Configuration.class.getResourceAsStream(
-- source + DirectoryManager.URL_FILE_SEPARATOR + file);
-+ source + DirectoryManager.URL_FILE_SEPARATOR + file);
- if(in==null) return;
- OutputStream out = new FileOutputStream(destfile);
-- byte[] buf = new byte[2048];
-- int n;
-- while((n = in.read(buf))>0) out.write(buf,0,n);
-- in.close();
-- out.close();
-- } catch(Throwable t) {}
-+ try {
-+ if (!replaceNewLine) {
-+ byte[] buf = new byte[2048];
-+ int n;
-+ while((n = in.read(buf))>0) out.write(buf,0,n);
-+ } else {
-+ BufferedReader reader = new BufferedReader(new InputStreamReader(in));
-+ BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
-+ try {
-+ String line;
-+ while ((line = reader.readLine()) != null) {
-+ writer.write(line);
-+ writer.write(DocletConstants.NL);
-+ }
-+ } finally {
-+ reader.close();
-+ writer.close();
-+ }
-+ }
-+ } finally {
-+ in.close();
-+ out.close();
-+ }
-+ } catch (IOException ie) {
-+ ie.printStackTrace();
-+ throw new DocletAbortException();
-+ }
- }
-
- /**
-diff --git a/test/com/sun/javadoc/testHtmlDocument/TestHtmlDocument.java b/test/com/sun/javadoc/testHtmlDocument/TestHtmlDocument.java
---- langtools/test/com/sun/javadoc/testHtmlDocument/TestHtmlDocument.java
-+++ langtools/test/com/sun/javadoc/testHtmlDocument/TestHtmlDocument.java
-@@ -44,6 +44,7 @@
- private static final String BUGID = "6851834";
- private static final String BUGNAME = "TestHtmlDocument";
- private static final String FS = System.getProperty("file.separator");
-+ private static final String LS = System.getProperty("line.separator");
- private static String srcdir = System.getProperty("test.src", ".");
-
- // Entry point
-@@ -143,13 +144,17 @@
- System.out.println("\nFILE DOES NOT EXIST: " + filename);
- }
- BufferedReader in = new BufferedReader(new FileReader(file));
-+ StringBuilder fileString = new StringBuilder();
- // Create an array of characters the size of the file
-- char[] allChars = new char[(int)file.length()];
-- // Read the characters into the allChars array
-- in.read(allChars, 0, (int)file.length());
-- in.close();
-- // Convert to a string
-- String allCharsString = new String(allChars);
-- return allCharsString;
-+ try {
-+ String line;
-+ while ((line = in.readLine()) != null) {
-+ fileString.append(line);
-+ fileString.append(LS);
-+ }
-+ } finally {
-+ in.close();
-+ }
-+ return fileString.toString();
- }
- }
diff --git a/java/openjdk6/files/icedtea/openjdk/7017324-kerning_crash.patch b/java/openjdk6/files/icedtea/openjdk/7017324-kerning_crash.patch
deleted file mode 100644
index 1794154c83e3..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/7017324-kerning_crash.patch
+++ /dev/null
@@ -1,101 +0,0 @@
-# HG changeset patch
-# User andrew
-# Date 1365745184 -3600
-# Node ID 5ed9acc1f6be298713f10ad71c33564d48f46555
-# Parent d79bfc0c6371d1174209585a8d2bf08e3f3625f9
-7017324: Kerning crash in JDK 7 since ICU layout update
-Reviewed-by: igor, prr
-
-diff --git a/src/share/native/sun/font/layout/KernTable.cpp b/src/share/native/sun/font/layout/KernTable.cpp
---- jdk/src/share/native/sun/font/layout/KernTable.cpp
-+++ jdk/src/share/native/sun/font/layout/KernTable.cpp
-@@ -217,7 +217,7 @@
- // all the elements ahead of time and store them in the font
-
- const PairInfo* p = pairsSwapped;
-- const PairInfo* tp = (const PairInfo*)(p + rangeShift);
-+ const PairInfo* tp = (const PairInfo*)(p + (rangeShift/KERN_PAIRINFO_SIZE)); /* rangeshift is in original table bytes */
- if (key > tp->key) {
- p = tp;
- }
-@@ -229,7 +229,7 @@
- le_uint32 probe = searchRange;
- while (probe > 1) {
- probe >>= 1;
-- tp = (const PairInfo*)(p + probe);
-+ tp = (const PairInfo*)(p + (probe/KERN_PAIRINFO_SIZE));
- le_uint32 tkey = tp->key;
- #if DEBUG
- fprintf(stdout, " %.3d (%0.8x)\n", (tp - pairsSwapped), tkey);
-diff --git a/test/java/awt/font/TextLayout/KernCrash.java b/test/java/awt/font/TextLayout/KernCrash.java
-new file mode 100644
---- /dev/null
-+++ jdk/test/java/awt/font/TextLayout/KernCrash.java
-@@ -0,0 +1,67 @@
-+/*
-+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+import java.io.*;
-+import java.awt.*;
-+import java.awt.font.*;
-+import java.util.*;
-+
-+/**
-+ * Shows (top) with kerning, (middle) without, (bottom) also without.
-+ *
-+ * @bug 7017324
-+ */
-+public class KernCrash extends Frame {
-+ private static Font font0;
-+ private static Font font1;
-+ private static Font font2;
-+
-+ public static void main(String[] args) throws Exception {
-+ HashMap attrs = new HashMap();
-+ font0 = Font.createFont(Font.TRUETYPE_FONT, new File("Vera.ttf"));
-+ System.out.println("using " + font0);
-+ attrs.put(TextAttribute.SIZE, new Float(58f));
-+ font1 = font0.deriveFont(attrs);
-+ attrs.put(TextAttribute.KERNING, TextAttribute.KERNING_ON);
-+ font2 = font0.deriveFont(attrs);
-+
-+ KernCrash f = new KernCrash();
-+ f.setTitle("Kerning Crash");
-+ f.setSize(600, 300);
-+ f.setForeground(Color.black);
-+ f.show();
-+ }
-+
-+ public void paint(Graphics g) {
-+ Graphics2D g2 = (Graphics2D)g;
-+ FontRenderContext frc = g2.getFontRenderContext();
-+ TextLayout layout = new TextLayout("text", font2, frc);
-+ layout.draw(g2, 10, 150);
-+
-+ String s = "WAVATastic";
-+ TextLayout layout2 = new TextLayout(s, font1, frc);
-+ layout2.draw(g2, 10, 200);
-+ TextLayout layout3 = new TextLayout(s, font2, frc);
-+ layout3.draw(g2, 10, 100);
-+ }
-+}
diff --git a/java/openjdk6/files/icedtea/openjdk/7032388-work_without_cmov_instruction.patch b/java/openjdk6/files/icedtea/openjdk/7032388-work_without_cmov_instruction.patch
deleted file mode 100644
index 532ad68b9565..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/7032388-work_without_cmov_instruction.patch
+++ /dev/null
@@ -1,178 +0,0 @@
---- hotspot/src/cpu/x86/vm/assembler_x86.cpp 2011-03-30 11:31:16.408872134 -0700
-+++ hotspot/src/cpu/x86/vm/assembler_x86.cpp 2011-03-30 11:31:16.084614406 -0700
-@@ -7769,6 +7769,28 @@
- }
- }
-
-+void MacroAssembler::cmov32(Condition cc, Register dst, Address src) {
-+ if (VM_Version::supports_cmov()) {
-+ cmovl(cc, dst, src);
-+ } else {
-+ Label L;
-+ jccb(negate_condition(cc), L);
-+ movl(dst, src);
-+ bind(L);
-+ }
-+}
-+
-+void MacroAssembler::cmov32(Condition cc, Register dst, Register src) {
-+ if (VM_Version::supports_cmov()) {
-+ cmovl(cc, dst, src);
-+ } else {
-+ Label L;
-+ jccb(negate_condition(cc), L);
-+ movl(dst, src);
-+ bind(L);
-+ }
-+}
-+
- void MacroAssembler::verify_oop(Register reg, const char* s) {
- if (!VerifyOops) return;
-
-@@ -9019,14 +9041,7 @@
- movl(result, cnt1);
- subl(cnt1, cnt2);
- push(cnt1);
-- if (VM_Version::supports_cmov()) {
-- cmovl(Assembler::lessEqual, cnt2, result);
-- } else {
-- Label GT_LABEL;
-- jccb(Assembler::greater, GT_LABEL);
-- movl(cnt2, result);
-- bind(GT_LABEL);
-- }
-+ cmov32(Assembler::lessEqual, cnt2, result);
-
- // Is the minimum length zero?
- testl(cnt2, cnt2);
---- hotspot/src/cpu/x86/vm/assembler_x86.hpp 2011-03-30 11:31:17.757655562 -0700
-+++ hotspot/src/cpu/x86/vm/assembler_x86.hpp 2011-03-30 11:31:17.553920606 -0700
-@@ -2244,10 +2244,13 @@
-
- // Data
-
-- void cmov(Condition cc, Register dst, Register src) { LP64_ONLY(cmovq(cc, dst, src)) NOT_LP64(cmovl(cc, dst, src)); }
-+ void cmov32( Condition cc, Register dst, Address src);
-+ void cmov32( Condition cc, Register dst, Register src);
-
-- void cmovptr(Condition cc, Register dst, Address src) { LP64_ONLY(cmovq(cc, dst, src)) NOT_LP64(cmovl(cc, dst, src)); }
-- void cmovptr(Condition cc, Register dst, Register src) { LP64_ONLY(cmovq(cc, dst, src)) NOT_LP64(cmovl(cc, dst, src)); }
-+ void cmov( Condition cc, Register dst, Register src) { cmovptr(cc, dst, src); }
-+
-+ void cmovptr(Condition cc, Register dst, Address src) { LP64_ONLY(cmovq(cc, dst, src)) NOT_LP64(cmov32(cc, dst, src)); }
-+ void cmovptr(Condition cc, Register dst, Register src) { LP64_ONLY(cmovq(cc, dst, src)) NOT_LP64(cmov32(cc, dst, src)); }
-
- void movoop(Register dst, jobject obj);
- void movoop(Address dst, jobject obj);
---- hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp 2011-03-30 11:31:18.743456717 -0700
-+++ hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp 2011-03-30 11:31:18.541656202 -0700
-@@ -23,6 +23,7 @@
- */
-
- #include "precompiled.hpp"
-+#include "asm/assembler.hpp"
- #include "c1/c1_Compilation.hpp"
- #include "c1/c1_LIRAssembler.hpp"
- #include "c1/c1_MacroAssembler.hpp"
-@@ -569,24 +570,13 @@
- __ lea (rdi, Address(rdi, rcx, Address::times_2, arrayOopDesc::base_offset_in_bytes(T_CHAR)));
-
- // compute minimum length (in rax) and difference of lengths (on top of stack)
-- if (VM_Version::supports_cmov()) {
-- __ movl (rbx, Address(rbx, java_lang_String::count_offset_in_bytes()));
-- __ movl (rax, Address(rax, java_lang_String::count_offset_in_bytes()));
-- __ mov (rcx, rbx);
-- __ subptr (rbx, rax); // subtract lengths
-- __ push (rbx); // result
-- __ cmov (Assembler::lessEqual, rax, rcx);
-- } else {
-- Label L;
-- __ movl (rbx, Address(rbx, java_lang_String::count_offset_in_bytes()));
-- __ movl (rcx, Address(rax, java_lang_String::count_offset_in_bytes()));
-- __ mov (rax, rbx);
-- __ subptr (rbx, rcx);
-- __ push (rbx);
-- __ jcc (Assembler::lessEqual, L);
-- __ mov (rax, rcx);
-- __ bind (L);
-- }
-+ __ movl (rbx, Address(rbx, java_lang_String::count_offset_in_bytes()));
-+ __ movl (rax, Address(rax, java_lang_String::count_offset_in_bytes()));
-+ __ mov (rcx, rbx);
-+ __ subptr(rbx, rax); // subtract lengths
-+ __ push (rbx); // result
-+ __ cmov (Assembler::lessEqual, rax, rcx);
-+
- // is minimum length 0?
- Label noLoop, haveResult;
- __ testptr (rax, rax);
---- hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp 2011-03-30 11:31:19.824124145 -0700
-+++ hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp 2011-03-30 11:31:19.606167752 -0700
-@@ -23,6 +23,7 @@
- */
-
- #include "precompiled.hpp"
-+#include "asm/assembler.hpp"
- #include "c1/c1_Defs.hpp"
- #include "c1/c1_MacroAssembler.hpp"
- #include "c1/c1_Runtime1.hpp"
---- hotspot/src/cpu/x86/vm/templateTable_x86_32.cpp 2011-03-30 11:31:20.910918826 -0700
-+++ hotspot/src/cpu/x86/vm/templateTable_x86_32.cpp 2011-03-30 11:31:20.703693030 -0700
-@@ -23,6 +23,7 @@
- */
-
- #include "precompiled.hpp"
-+#include "asm/assembler.hpp"
- #include "interpreter/interpreter.hpp"
- #include "interpreter/interpreterRuntime.hpp"
- #include "interpreter/templateTable.hpp"
-@@ -1939,18 +1940,10 @@
- __ movl(temp, Address(array, h, Address::times_8, 0*wordSize));
- __ bswapl(temp);
- __ cmpl(key, temp);
-- if (VM_Version::supports_cmov()) {
-- __ cmovl(Assembler::less , j, h); // j = h if (key < array[h].fast_match())
-- __ cmovl(Assembler::greaterEqual, i, h); // i = h if (key >= array[h].fast_match())
-- } else {
-- Label set_i, end_of_if;
-- __ jccb(Assembler::greaterEqual, set_i); // {
-- __ mov(j, h); // j = h;
-- __ jmp(end_of_if); // }
-- __ bind(set_i); // else {
-- __ mov(i, h); // i = h;
-- __ bind(end_of_if); // }
-- }
-+ // j = h if (key < array[h].fast_match())
-+ __ cmov32(Assembler::less , j, h);
-+ // i = h if (key >= array[h].fast_match())
-+ __ cmov32(Assembler::greaterEqual, i, h);
- // while (i+1 < j)
- __ bind(entry);
- __ leal(h, Address(i, 1)); // i+1
-@@ -3478,22 +3471,14 @@
-
- // find a free slot in the monitor block (result in rdx)
- { Label entry, loop, exit;
-- __ movptr(rcx, monitor_block_top); // points to current entry, starting with top-most entry
-- __ lea(rbx, monitor_block_bot); // points to word before bottom of monitor block
-+ __ movptr(rcx, monitor_block_top); // points to current entry, starting with top-most entry
-+
-+ __ lea(rbx, monitor_block_bot); // points to word before bottom of monitor block
- __ jmpb(entry);
-
- __ bind(loop);
- __ cmpptr(Address(rcx, BasicObjectLock::obj_offset_in_bytes()), (int32_t)NULL_WORD); // check if current entry is used
--
--// TODO - need new func here - kbt
-- if (VM_Version::supports_cmov()) {
-- __ cmov(Assembler::equal, rdx, rcx); // if not used then remember entry in rdx
-- } else {
-- Label L;
-- __ jccb(Assembler::notEqual, L);
-- __ mov(rdx, rcx); // if not used then remember entry in rdx
-- __ bind(L);
-- }
-+ __ cmovptr(Assembler::equal, rdx, rcx); // if not used then remember entry in rdx
- __ cmpptr(rax, Address(rcx, BasicObjectLock::obj_offset_in_bytes())); // check if current entry is for same object
- __ jccb(Assembler::equal, exit); // if same object then stop searching
- __ addptr(rcx, entry_size); // otherwise advance to next entry
diff --git a/java/openjdk6/files/icedtea/openjdk/7036559-concurrenthashmap_improvements.patch b/java/openjdk6/files/icedtea/openjdk/7036559-concurrenthashmap_improvements.patch
deleted file mode 100644
index f710737912ef..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/7036559-concurrenthashmap_improvements.patch
+++ /dev/null
@@ -1,1436 +0,0 @@
-# HG changeset patch
-# User dl
-# Date 1303139440 -3600
-# Node ID 005c0c85b0decf18a90ff6c9601d1b9a2c0a3fa4
-# Parent 603e70836e74e5c18fc32279f7e4df5b4c63e0b6
-7036559: ConcurrentHashMap footprint and contention improvements
-Reviewed-by: chegar
-
-diff --git a/src/share/classes/java/util/concurrent/ConcurrentHashMap.java b/src/share/classes/java/util/concurrent/ConcurrentHashMap.java
---- jdk/src/share/classes/java/util/concurrent/ConcurrentHashMap.java
-+++ jdk/src/share/classes/java/util/concurrent/ConcurrentHashMap.java
-@@ -105,7 +105,25 @@
-
- /*
- * The basic strategy is to subdivide the table among Segments,
-- * each of which itself is a concurrently readable hash table.
-+ * each of which itself is a concurrently readable hash table. To
-+ * reduce footprint, all but one segments are constructed only
-+ * when first needed (see ensureSegment). To maintain visibility
-+ * in the presence of lazy construction, accesses to segments as
-+ * well as elements of segment's table must use volatile access,
-+ * which is done via Unsafe within methods segmentAt etc
-+ * below. These provide the functionality of AtomicReferenceArrays
-+ * but reduce the levels of indirection. Additionally,
-+ * volatile-writes of table elements and entry "next" fields
-+ * within locked operations use the cheaper "lazySet" forms of
-+ * writes (via putOrderedObject) because these writes are always
-+ * followed by lock releases that maintain sequential consistency
-+ * of table updates.
-+ *
-+ * Historical note: The previous version of this class relied
-+ * heavily on "final" fields, which avoided some volatile reads at
-+ * the expense of a large initial footprint. Some remnants of
-+ * that design (including forced construction of segment 0) exist
-+ * to ensure serialization compatibility.
- */
-
- /* ---------------- Constants -------------- */
-@@ -137,8 +155,15 @@
- static final int MAXIMUM_CAPACITY = 1 << 30;
-
- /**
-+ * The minimum capacity for per-segment tables. Must be a power
-+ * of two, at least two to avoid immediate resizing on next use
-+ * after lazy construction.
-+ */
-+ static final int MIN_SEGMENT_TABLE_CAPACITY = 2;
-+
-+ /**
- * The maximum number of segments to allow; used to bound
-- * constructor arguments.
-+ * constructor arguments. Must be power of two less than 1 << 24.
- */
- static final int MAX_SEGMENTS = 1 << 16; // slightly conservative
-
-@@ -164,7 +189,7 @@
- final int segmentShift;
-
- /**
-- * The segments, each of which is a specialized hash table
-+ * The segments, each of which is a specialized hash table.
- */
- final Segment<K,V>[] segments;
-
-@@ -172,7 +197,65 @@
- transient Set<Map.Entry<K,V>> entrySet;
- transient Collection<V> values;
-
-- /* ---------------- Small Utilities -------------- */
-+ /**
-+ * ConcurrentHashMap list entry. Note that this is never exported
-+ * out as a user-visible Map.Entry.
-+ */
-+ static final class HashEntry<K,V> {
-+ final int hash;
-+ final K key;
-+ volatile V value;
-+ volatile HashEntry<K,V> next;
-+
-+ HashEntry(int hash, K key, V value, HashEntry<K,V> next) {
-+ this.hash = hash;
-+ this.key = key;
-+ this.value = value;
-+ this.next = next;
-+ }
-+
-+ /**
-+ * Sets next field with volatile write semantics. (See above
-+ * about use of putOrderedObject.)
-+ */
-+ final void setNext(HashEntry<K,V> n) {
-+ UNSAFE.putOrderedObject(this, nextOffset, n);
-+ }
-+
-+ // Unsafe mechanics
-+ static final sun.misc.Unsafe UNSAFE;
-+ static final long nextOffset;
-+ static {
-+ try {
-+ UNSAFE = sun.misc.Unsafe.getUnsafe();
-+ Class k = HashEntry.class;
-+ nextOffset = UNSAFE.objectFieldOffset
-+ (k.getDeclaredField("next"));
-+ } catch (Exception e) {
-+ throw new Error(e);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Gets the ith element of given table (if nonnull) with volatile
-+ * read semantics.
-+ */
-+ @SuppressWarnings("unchecked")
-+ static final <K,V> HashEntry<K,V> entryAt(HashEntry<K,V>[] tab, int i) {
-+ return (tab == null) ? null :
-+ (HashEntry<K,V>) UNSAFE.getObjectVolatile
-+ (tab, ((long)i << TSHIFT) + TBASE);
-+ }
-+
-+ /**
-+ * Sets the ith element of given table, with volatile write
-+ * semantics. (See above about use of putOrderedObject.)
-+ */
-+ static final <K,V> void setEntryAt(HashEntry<K,V>[] tab, int i,
-+ HashEntry<K,V> e) {
-+ UNSAFE.putOrderedObject(tab, ((long)i << TSHIFT) + TBASE, e);
-+ }
-
- /**
- * Applies a supplemental hash function to a given hashCode, which
-@@ -193,104 +276,67 @@
- }
-
- /**
-- * Returns the segment that should be used for key with given hash
-- * @param hash the hash code for the key
-- * @return the segment
-- */
-- final Segment<K,V> segmentFor(int hash) {
-- return segments[(hash >>> segmentShift) & segmentMask];
-- }
--
-- /* ---------------- Inner Classes -------------- */
--
-- /**
-- * ConcurrentHashMap list entry. Note that this is never exported
-- * out as a user-visible Map.Entry.
-- *
-- * Because the value field is volatile, not final, it is legal wrt
-- * the Java Memory Model for an unsynchronized reader to see null
-- * instead of initial value when read via a data race. Although a
-- * reordering leading to this is not likely to ever actually
-- * occur, the Segment.readValueUnderLock method is used as a
-- * backup in case a null (pre-initialized) value is ever seen in
-- * an unsynchronized access method.
-- */
-- static final class HashEntry<K,V> {
-- final K key;
-- final int hash;
-- volatile V value;
-- final HashEntry<K,V> next;
--
-- HashEntry(K key, int hash, HashEntry<K,V> next, V value) {
-- this.key = key;
-- this.hash = hash;
-- this.next = next;
-- this.value = value;
-- }
--
-- @SuppressWarnings("unchecked")
-- static final <K,V> HashEntry<K,V>[] newArray(int i) {
-- return new HashEntry[i];
-- }
-- }
--
-- /**
- * Segments are specialized versions of hash tables. This
- * subclasses from ReentrantLock opportunistically, just to
- * simplify some locking and avoid separate construction.
- */
- static final class Segment<K,V> extends ReentrantLock implements Serializable {
- /*
-- * Segments maintain a table of entry lists that are ALWAYS
-- * kept in a consistent state, so can be read without locking.
-- * Next fields of nodes are immutable (final). All list
-- * additions are performed at the front of each bin. This
-- * makes it easy to check changes, and also fast to traverse.
-- * When nodes would otherwise be changed, new nodes are
-- * created to replace them. This works well for hash tables
-- * since the bin lists tend to be short. (The average length
-- * is less than two for the default load factor threshold.)
-+ * Segments maintain a table of entry lists that are always
-+ * kept in a consistent state, so can be read (via volatile
-+ * reads of segments and tables) without locking. This
-+ * requires replicating nodes when necessary during table
-+ * resizing, so the old lists can be traversed by readers
-+ * still using old version of table.
- *
-- * Read operations can thus proceed without locking, but rely
-- * on selected uses of volatiles to ensure that completed
-- * write operations performed by other threads are
-- * noticed. For most purposes, the "count" field, tracking the
-- * number of elements, serves as that volatile variable
-- * ensuring visibility. This is convenient because this field
-- * needs to be read in many read operations anyway:
-- *
-- * - All (unsynchronized) read operations must first read the
-- * "count" field, and should not look at table entries if
-- * it is 0.
-- *
-- * - All (synchronized) write operations should write to
-- * the "count" field after structurally changing any bin.
-- * The operations must not take any action that could even
-- * momentarily cause a concurrent read operation to see
-- * inconsistent data. This is made easier by the nature of
-- * the read operations in Map. For example, no operation
-- * can reveal that the table has grown but the threshold
-- * has not yet been updated, so there are no atomicity
-- * requirements for this with respect to reads.
-- *
-- * As a guide, all critical volatile reads and writes to the
-- * count field are marked in code comments.
-+ * This class defines only mutative methods requiring locking.
-+ * Except as noted, the methods of this class perform the
-+ * per-segment versions of ConcurrentHashMap methods. (Other
-+ * methods are integrated directly into ConcurrentHashMap
-+ * methods.) These mutative methods use a form of controlled
-+ * spinning on contention via methods scanAndLock and
-+ * scanAndLockForPut. These intersperse tryLocks with
-+ * traversals to locate nodes. The main benefit is to absorb
-+ * cache misses (which are very common for hash tables) while
-+ * obtaining locks so that traversal is faster once
-+ * acquired. We do not actually use the found nodes since they
-+ * must be re-acquired under lock anyway to ensure sequential
-+ * consistency of updates (and in any case may be undetectably
-+ * stale), but they will normally be much faster to re-locate.
-+ * Also, scanAndLockForPut speculatively creates a fresh node
-+ * to use in put if no node is found.
- */
-
- private static final long serialVersionUID = 2249069246763182397L;
-
- /**
-- * The number of elements in this segment's region.
-+ * The maximum number of times to tryLock in a prescan before
-+ * possibly blocking on acquire in preparation for a locked
-+ * segment operation. On multiprocessors, using a bounded
-+ * number of retries maintains cache acquired while locating
-+ * nodes.
- */
-- transient volatile int count;
-+ static final int MAX_SCAN_RETRIES =
-+ Runtime.getRuntime().availableProcessors() > 1 ? 64 : 1;
-
- /**
-- * Number of updates that alter the size of the table. This is
-- * used during bulk-read methods to make sure they see a
-- * consistent snapshot: If modCounts change during a traversal
-- * of segments computing size or checking containsValue, then
-- * we might have an inconsistent view of state so (usually)
-- * must retry.
-+ * The per-segment table. Elements are accessed via
-+ * entryAt/setEntryAt providing volatile semantics.
-+ */
-+ transient volatile HashEntry<K,V>[] table;
-+
-+ /**
-+ * The number of elements. Accessed only either within locks
-+ * or among other volatile reads that maintain visibility.
-+ */
-+ transient int count;
-+
-+ /**
-+ * The total number of mutative operations in this segment.
-+ * Even though this may overflows 32 bits, it provides
-+ * sufficient accuracy for stability checks in CHM isEmpty()
-+ * and size() methods. Accessed only either within locks or
-+ * among other volatile reads that maintain visibility.
- */
- transient int modCount;
-
-@@ -302,11 +348,6 @@
- transient int threshold;
-
- /**
-- * The per-segment table.
-- */
-- transient volatile HashEntry<K,V>[] table;
--
-- /**
- * The load factor for the hash table. Even though this value
- * is same for all segments, it is replicated to avoid needing
- * links to outer object.
-@@ -314,202 +355,94 @@
- */
- final float loadFactor;
-
-- Segment(int initialCapacity, float lf) {
-- loadFactor = lf;
-- setTable(HashEntry.<K,V>newArray(initialCapacity));
-+ Segment(float lf, int threshold, HashEntry<K,V>[] tab) {
-+ this.loadFactor = lf;
-+ this.threshold = threshold;
-+ this.table = tab;
- }
-
-- @SuppressWarnings("unchecked")
-- static final <K,V> Segment<K,V>[] newArray(int i) {
-- return new Segment[i];
-+ final V put(K key, int hash, V value, boolean onlyIfAbsent) {
-+ HashEntry<K,V> node = tryLock() ? null :
-+ scanAndLockForPut(key, hash, value);
-+ V oldValue;
-+ try {
-+ HashEntry<K,V>[] tab = table;
-+ int index = (tab.length - 1) & hash;
-+ HashEntry<K,V> first = entryAt(tab, index);
-+ for (HashEntry<K,V> e = first;;) {
-+ if (e != null) {
-+ K k;
-+ if ((k = e.key) == key ||
-+ (e.hash == hash && key.equals(k))) {
-+ oldValue = e.value;
-+ if (!onlyIfAbsent) {
-+ e.value = value;
-+ ++modCount;
-+ }
-+ break;
-+ }
-+ e = e.next;
-+ }
-+ else {
-+ if (node != null)
-+ node.setNext(first);
-+ else
-+ node = new HashEntry<K,V>(hash, key, value, first);
-+ int c = count + 1;
-+ if (c > threshold && first != null &&
-+ tab.length < MAXIMUM_CAPACITY)
-+ rehash(node);
-+ else
-+ setEntryAt(tab, index, node);
-+ ++modCount;
-+ count = c;
-+ oldValue = null;
-+ break;
-+ }
-+ }
-+ } finally {
-+ unlock();
-+ }
-+ return oldValue;
- }
-
- /**
-- * Sets table to new HashEntry array.
-- * Call only while holding lock or in constructor.
-+ * Doubles size of table and repacks entries, also adding the
-+ * given node to new table
- */
-- void setTable(HashEntry<K,V>[] newTable) {
-- threshold = (int)(newTable.length * loadFactor);
-- table = newTable;
-- }
--
-- /**
-- * Returns properly casted first entry of bin for given hash.
-- */
-- HashEntry<K,V> getFirst(int hash) {
-- HashEntry<K,V>[] tab = table;
-- return tab[hash & (tab.length - 1)];
-- }
--
-- /**
-- * Reads value field of an entry under lock. Called if value
-- * field ever appears to be null. This is possible only if a
-- * compiler happens to reorder a HashEntry initialization with
-- * its table assignment, which is legal under memory model
-- * but is not known to ever occur.
-- */
-- V readValueUnderLock(HashEntry<K,V> e) {
-- lock();
-- try {
-- return e.value;
-- } finally {
-- unlock();
-- }
-- }
--
-- /* Specialized implementations of map methods */
--
-- V get(Object key, int hash) {
-- if (count != 0) { // read-volatile
-- HashEntry<K,V> e = getFirst(hash);
-- while (e != null) {
-- if (e.hash == hash && key.equals(e.key)) {
-- V v = e.value;
-- if (v != null)
-- return v;
-- return readValueUnderLock(e); // recheck
-- }
-- e = e.next;
-- }
-- }
-- return null;
-- }
--
-- boolean containsKey(Object key, int hash) {
-- if (count != 0) { // read-volatile
-- HashEntry<K,V> e = getFirst(hash);
-- while (e != null) {
-- if (e.hash == hash && key.equals(e.key))
-- return true;
-- e = e.next;
-- }
-- }
-- return false;
-- }
--
-- boolean containsValue(Object value) {
-- if (count != 0) { // read-volatile
-- HashEntry<K,V>[] tab = table;
-- int len = tab.length;
-- for (int i = 0 ; i < len; i++) {
-- for (HashEntry<K,V> e = tab[i]; e != null; e = e.next) {
-- V v = e.value;
-- if (v == null) // recheck
-- v = readValueUnderLock(e);
-- if (value.equals(v))
-- return true;
-- }
-- }
-- }
-- return false;
-- }
--
-- boolean replace(K key, int hash, V oldValue, V newValue) {
-- lock();
-- try {
-- HashEntry<K,V> e = getFirst(hash);
-- while (e != null && (e.hash != hash || !key.equals(e.key)))
-- e = e.next;
--
-- boolean replaced = false;
-- if (e != null && oldValue.equals(e.value)) {
-- replaced = true;
-- e.value = newValue;
-- }
-- return replaced;
-- } finally {
-- unlock();
-- }
-- }
--
-- V replace(K key, int hash, V newValue) {
-- lock();
-- try {
-- HashEntry<K,V> e = getFirst(hash);
-- while (e != null && (e.hash != hash || !key.equals(e.key)))
-- e = e.next;
--
-- V oldValue = null;
-- if (e != null) {
-- oldValue = e.value;
-- e.value = newValue;
-- }
-- return oldValue;
-- } finally {
-- unlock();
-- }
-- }
--
--
-- V put(K key, int hash, V value, boolean onlyIfAbsent) {
-- lock();
-- try {
-- int c = count;
-- if (c++ > threshold) // ensure capacity
-- rehash();
-- HashEntry<K,V>[] tab = table;
-- int index = hash & (tab.length - 1);
-- HashEntry<K,V> first = tab[index];
-- HashEntry<K,V> e = first;
-- while (e != null && (e.hash != hash || !key.equals(e.key)))
-- e = e.next;
--
-- V oldValue;
-- if (e != null) {
-- oldValue = e.value;
-- if (!onlyIfAbsent)
-- e.value = value;
-- }
-- else {
-- oldValue = null;
-- ++modCount;
-- tab[index] = new HashEntry<K,V>(key, hash, first, value);
-- count = c; // write-volatile
-- }
-- return oldValue;
-- } finally {
-- unlock();
-- }
-- }
--
-- void rehash() {
-+ @SuppressWarnings("unchecked")
-+ private void rehash(HashEntry<K,V> node) {
-+ /*
-+ * Reclassify nodes in each list to new table. Because we
-+ * are using power-of-two expansion, the elements from
-+ * each bin must either stay at same index, or move with a
-+ * power of two offset. We eliminate unnecessary node
-+ * creation by catching cases where old nodes can be
-+ * reused because their next fields won't change.
-+ * Statistically, at the default threshold, only about
-+ * one-sixth of them need cloning when a table
-+ * doubles. The nodes they replace will be garbage
-+ * collectable as soon as they are no longer referenced by
-+ * any reader thread that may be in the midst of
-+ * concurrently traversing table. Entry accesses use plain
-+ * array indexing because they are followed by volatile
-+ * table write.
-+ */
- HashEntry<K,V>[] oldTable = table;
- int oldCapacity = oldTable.length;
-- if (oldCapacity >= MAXIMUM_CAPACITY)
-- return;
--
-- /*
-- * Reclassify nodes in each list to new Map. Because we are
-- * using power-of-two expansion, the elements from each bin
-- * must either stay at same index, or move with a power of two
-- * offset. We eliminate unnecessary node creation by catching
-- * cases where old nodes can be reused because their next
-- * fields won't change. Statistically, at the default
-- * threshold, only about one-sixth of them need cloning when
-- * a table doubles. The nodes they replace will be garbage
-- * collectable as soon as they are no longer referenced by any
-- * reader thread that may be in the midst of traversing table
-- * right now.
-- */
--
-- HashEntry<K,V>[] newTable = HashEntry.newArray(oldCapacity<<1);
-- threshold = (int)(newTable.length * loadFactor);
-- int sizeMask = newTable.length - 1;
-+ int newCapacity = oldCapacity << 1;
-+ threshold = (int)(newCapacity * loadFactor);
-+ HashEntry<K,V>[] newTable =
-+ (HashEntry<K,V>[]) new HashEntry[newCapacity];
-+ int sizeMask = newCapacity - 1;
- for (int i = 0; i < oldCapacity ; i++) {
-- // We need to guarantee that any existing reads of old Map can
-- // proceed. So we cannot yet null out each bin.
- HashEntry<K,V> e = oldTable[i];
--
- if (e != null) {
- HashEntry<K,V> next = e.next;
- int idx = e.hash & sizeMask;
--
-- // Single node on list
-- if (next == null)
-+ if (next == null) // Single node on list
- newTable[idx] = e;
--
-- else {
-- // Reuse trailing consecutive sequence at same slot
-+ else { // Reuse consecutive sequence at same slot
- HashEntry<K,V> lastRun = e;
- int lastIdx = idx;
- for (HashEntry<K,V> last = next;
-@@ -522,74 +455,259 @@
- }
- }
- newTable[lastIdx] = lastRun;
--
-- // Clone all remaining nodes
-+ // Clone remaining nodes
- for (HashEntry<K,V> p = e; p != lastRun; p = p.next) {
-- int k = p.hash & sizeMask;
-+ V v = p.value;
-+ int h = p.hash;
-+ int k = h & sizeMask;
- HashEntry<K,V> n = newTable[k];
-- newTable[k] = new HashEntry<K,V>(p.key, p.hash,
-- n, p.value);
-+ newTable[k] = new HashEntry<K,V>(h, p.key, v, n);
- }
- }
- }
- }
-+ int nodeIndex = node.hash & sizeMask; // add the new node
-+ node.setNext(newTable[nodeIndex]);
-+ newTable[nodeIndex] = node;
- table = newTable;
- }
-
- /**
-+ * Scans for a node containing given key while trying to
-+ * acquire lock, creating and returning one if not found. Upon
-+ * return, guarantees that lock is held. UNlike in most
-+ * methods, calls to method equals are not screened: Since
-+ * traversal speed doesn't matter, we might as well help warm
-+ * up the associated code and accesses as well.
-+ *
-+ * @return a new node if key not found, else null
-+ */
-+ private HashEntry<K,V> scanAndLockForPut(K key, int hash, V value) {
-+ HashEntry<K,V> first = entryForHash(this, hash);
-+ HashEntry<K,V> e = first;
-+ HashEntry<K,V> node = null;
-+ int retries = -1; // negative while locating node
-+ while (!tryLock()) {
-+ HashEntry<K,V> f; // to recheck first below
-+ if (retries < 0) {
-+ if (e == null) {
-+ if (node == null) // speculatively create node
-+ node = new HashEntry<K,V>(hash, key, value, null);
-+ retries = 0;
-+ }
-+ else if (key.equals(e.key))
-+ retries = 0;
-+ else
-+ e = e.next;
-+ }
-+ else if (++retries > MAX_SCAN_RETRIES) {
-+ lock();
-+ break;
-+ }
-+ else if ((retries & 1) == 0 &&
-+ (f = entryForHash(this, hash)) != first) {
-+ e = first = f; // re-traverse if entry changed
-+ retries = -1;
-+ }
-+ }
-+ return node;
-+ }
-+
-+ /**
-+ * Scans for a node containing the given key while trying to
-+ * acquire lock for a remove or replace operation. Upon
-+ * return, guarantees that lock is held. Note that we must
-+ * lock even if the key is not found, to ensure sequential
-+ * consistency of updates.
-+ */
-+ private void scanAndLock(Object key, int hash) {
-+ // similar to but simpler than scanAndLockForPut
-+ HashEntry<K,V> first = entryForHash(this, hash);
-+ HashEntry<K,V> e = first;
-+ int retries = -1;
-+ while (!tryLock()) {
-+ HashEntry<K,V> f;
-+ if (retries < 0) {
-+ if (e == null || key.equals(e.key))
-+ retries = 0;
-+ else
-+ e = e.next;
-+ }
-+ else if (++retries > MAX_SCAN_RETRIES) {
-+ lock();
-+ break;
-+ }
-+ else if ((retries & 1) == 0 &&
-+ (f = entryForHash(this, hash)) != first) {
-+ e = first = f;
-+ retries = -1;
-+ }
-+ }
-+ }
-+
-+ /**
- * Remove; match on key only if value null, else match both.
- */
-- V remove(Object key, int hash, Object value) {
-+ final V remove(Object key, int hash, Object value) {
-+ if (!tryLock())
-+ scanAndLock(key, hash);
-+ V oldValue = null;
-+ try {
-+ HashEntry<K,V>[] tab = table;
-+ int index = (tab.length - 1) & hash;
-+ HashEntry<K,V> e = entryAt(tab, index);
-+ HashEntry<K,V> pred = null;
-+ while (e != null) {
-+ K k;
-+ HashEntry<K,V> next = e.next;
-+ if ((k = e.key) == key ||
-+ (e.hash == hash && key.equals(k))) {
-+ V v = e.value;
-+ if (value == null || value == v || value.equals(v)) {
-+ if (pred == null)
-+ setEntryAt(tab, index, next);
-+ else
-+ pred.setNext(next);
-+ ++modCount;
-+ --count;
-+ oldValue = v;
-+ }
-+ break;
-+ }
-+ pred = e;
-+ e = next;
-+ }
-+ } finally {
-+ unlock();
-+ }
-+ return oldValue;
-+ }
-+
-+ final boolean replace(K key, int hash, V oldValue, V newValue) {
-+ if (!tryLock())
-+ scanAndLock(key, hash);
-+ boolean replaced = false;
-+ try {
-+ HashEntry<K,V> e;
-+ for (e = entryForHash(this, hash); e != null; e = e.next) {
-+ K k;
-+ if ((k = e.key) == key ||
-+ (e.hash == hash && key.equals(k))) {
-+ if (oldValue.equals(e.value)) {
-+ e.value = newValue;
-+ ++modCount;
-+ replaced = true;
-+ }
-+ break;
-+ }
-+ }
-+ } finally {
-+ unlock();
-+ }
-+ return replaced;
-+ }
-+
-+ final V replace(K key, int hash, V value) {
-+ if (!tryLock())
-+ scanAndLock(key, hash);
-+ V oldValue = null;
-+ try {
-+ HashEntry<K,V> e;
-+ for (e = entryForHash(this, hash); e != null; e = e.next) {
-+ K k;
-+ if ((k = e.key) == key ||
-+ (e.hash == hash && key.equals(k))) {
-+ oldValue = e.value;
-+ e.value = value;
-+ ++modCount;
-+ break;
-+ }
-+ }
-+ } finally {
-+ unlock();
-+ }
-+ return oldValue;
-+ }
-+
-+ final void clear() {
- lock();
- try {
-- int c = count - 1;
- HashEntry<K,V>[] tab = table;
-- int index = hash & (tab.length - 1);
-- HashEntry<K,V> first = tab[index];
-- HashEntry<K,V> e = first;
-- while (e != null && (e.hash != hash || !key.equals(e.key)))
-- e = e.next;
--
-- V oldValue = null;
-- if (e != null) {
-- V v = e.value;
-- if (value == null || value.equals(v)) {
-- oldValue = v;
-- // All entries following removed node can stay
-- // in list, but all preceding ones need to be
-- // cloned.
-- ++modCount;
-- HashEntry<K,V> newFirst = e.next;
-- for (HashEntry<K,V> p = first; p != e; p = p.next)
-- newFirst = new HashEntry<K,V>(p.key, p.hash,
-- newFirst, p.value);
-- tab[index] = newFirst;
-- count = c; // write-volatile
-- }
-- }
-- return oldValue;
-+ for (int i = 0; i < tab.length ; i++)
-+ setEntryAt(tab, i, null);
-+ ++modCount;
-+ count = 0;
- } finally {
- unlock();
- }
- }
-+ }
-
-- void clear() {
-- if (count != 0) {
-- lock();
-- try {
-- HashEntry<K,V>[] tab = table;
-- for (int i = 0; i < tab.length ; i++)
-- tab[i] = null;
-- ++modCount;
-- count = 0; // write-volatile
-- } finally {
-- unlock();
-+ // Accessing segments
-+
-+ /**
-+ * Gets the jth element of given segment array (if nonnull) with
-+ * volatile element access semantics via Unsafe.
-+ */
-+ @SuppressWarnings("unchecked")
-+ static final <K,V> Segment<K,V> segmentAt(Segment<K,V>[] ss, int j) {
-+ long u = (j << SSHIFT) + SBASE;
-+ return ss == null ? null :
-+ (Segment<K,V>) UNSAFE.getObjectVolatile(ss, u);
-+ }
-+
-+ /**
-+ * Returns the segment for the given index, creating it and
-+ * recording in segment table (via CAS) if not already present.
-+ *
-+ * @param k the index
-+ * @return the segment
-+ */
-+ @SuppressWarnings("unchecked")
-+ private Segment<K,V> ensureSegment(int k) {
-+ final Segment<K,V>[] ss = this.segments;
-+ long u = (k << SSHIFT) + SBASE; // raw offset
-+ Segment<K,V> seg;
-+ if ((seg = (Segment<K,V>)UNSAFE.getObjectVolatile(ss, u)) == null) {
-+ Segment<K,V> proto = ss[0]; // use segment 0 as prototype
-+ int cap = proto.table.length;
-+ float lf = proto.loadFactor;
-+ int threshold = (int)(cap * lf);
-+ HashEntry<K,V>[] tab = (HashEntry<K,V>[])new HashEntry[cap];
-+ if ((seg = (Segment<K,V>)UNSAFE.getObjectVolatile(ss, u))
-+ == null) { // recheck
-+ Segment<K,V> s = new Segment<K,V>(lf, threshold, tab);
-+ while ((seg = (Segment<K,V>)UNSAFE.getObjectVolatile(ss, u))
-+ == null) {
-+ if (UNSAFE.compareAndSwapObject(ss, u, null, seg = s))
-+ break;
- }
- }
- }
-+ return seg;
- }
-
-+ // Hash-based segment and entry accesses
-
-+ /**
-+ * Get the segment for the given hash
-+ */
-+ @SuppressWarnings("unchecked")
-+ private Segment<K,V> segmentForHash(int h) {
-+ long u = (((h >>> segmentShift) & segmentMask) << SSHIFT) + SBASE;
-+ return (Segment<K,V>) UNSAFE.getObjectVolatile(segments, u);
-+ }
-+
-+ /**
-+ * Gets the table entry for the given segment and hash
-+ */
-+ @SuppressWarnings("unchecked")
-+ static final <K,V> HashEntry<K,V> entryForHash(Segment<K,V> seg, int h) {
-+ HashEntry<K,V>[] tab;
-+ return (seg == null || (tab = seg.table) == null) ? null :
-+ (HashEntry<K,V>) UNSAFE.getObjectVolatile
-+ (tab, ((long)(((tab.length - 1) & h)) << TSHIFT) + TBASE);
-+ }
-
- /* ---------------- Public operations -------------- */
-
-@@ -609,14 +727,13 @@
- * negative or the load factor or concurrencyLevel are
- * nonpositive.
- */
-+ @SuppressWarnings("unchecked")
- public ConcurrentHashMap(int initialCapacity,
- float loadFactor, int concurrencyLevel) {
- if (!(loadFactor > 0) || initialCapacity < 0 || concurrencyLevel <= 0)
- throw new IllegalArgumentException();
--
- if (concurrencyLevel > MAX_SEGMENTS)
- concurrencyLevel = MAX_SEGMENTS;
--
- // Find power-of-two sizes best matching arguments
- int sshift = 0;
- int ssize = 1;
-@@ -624,21 +741,23 @@
- ++sshift;
- ssize <<= 1;
- }
-- segmentShift = 32 - sshift;
-- segmentMask = ssize - 1;
-- this.segments = Segment.newArray(ssize);
--
-+ this.segmentShift = 32 - sshift;
-+ this.segmentMask = ssize - 1;
- if (initialCapacity > MAXIMUM_CAPACITY)
- initialCapacity = MAXIMUM_CAPACITY;
- int c = initialCapacity / ssize;
- if (c * ssize < initialCapacity)
- ++c;
-- int cap = 1;
-+ int cap = MIN_SEGMENT_TABLE_CAPACITY;
- while (cap < c)
- cap <<= 1;
--
-- for (int i = 0; i < this.segments.length; ++i)
-- this.segments[i] = new Segment<K,V>(cap, loadFactor);
-+ // create segments and segments[0]
-+ Segment<K,V> s0 =
-+ new Segment<K,V>(loadFactor, (int)(cap * loadFactor),
-+ (HashEntry<K,V>[])new HashEntry[cap]);
-+ Segment<K,V>[] ss = (Segment<K,V>[])new Segment[ssize];
-+ UNSAFE.putOrderedObject(ss, SBASE, s0); // ordered write of segments[0]
-+ this.segments = ss;
- }
-
- /**
-@@ -701,33 +820,36 @@
- * @return <tt>true</tt> if this map contains no key-value mappings
- */
- public boolean isEmpty() {
-+ /*
-+ * Sum per-segment modCounts to avoid mis-reporting when
-+ * elements are concurrently added and removed in one segment
-+ * while checking another, in which case the table was never
-+ * actually empty at any point. (The sum ensures accuracy up
-+ * through at least 1<<31 per-segment modifications before
-+ * recheck.) Methods size() and containsValue() use similar
-+ * constructions for stability checks.
-+ */
-+ long sum = 0L;
- final Segment<K,V>[] segments = this.segments;
-- /*
-- * We keep track of per-segment modCounts to avoid ABA
-- * problems in which an element in one segment was added and
-- * in another removed during traversal, in which case the
-- * table was never actually empty at any point. Note the
-- * similar use of modCounts in the size() and containsValue()
-- * methods, which are the only other methods also susceptible
-- * to ABA problems.
-- */
-- int[] mc = new int[segments.length];
-- int mcsum = 0;
-- for (int i = 0; i < segments.length; ++i) {
-- if (segments[i].count != 0)
-+ for (int j = 0; j < segments.length; ++j) {
-+ Segment<K,V> seg = segmentAt(segments, j);
-+ if (seg != null) {
-+ if (seg.count != 0)
-+ return false;
-+ sum += seg.modCount;
-+ }
-+ }
-+ if (sum != 0L) { // recheck unless no modifications
-+ for (int j = 0; j < segments.length; ++j) {
-+ Segment<K,V> seg = segmentAt(segments, j);
-+ if (seg != null) {
-+ if (seg.count != 0)
-+ return false;
-+ sum -= seg.modCount;
-+ }
-+ }
-+ if (sum != 0L)
- return false;
-- else
-- mcsum += mc[i] = segments[i].modCount;
-- }
-- // If mcsum happens to be zero, then we know we got a snapshot
-- // before any modifications at all were made. This is
-- // probably common enough to bother tracking.
-- if (mcsum != 0) {
-- for (int i = 0; i < segments.length; ++i) {
-- if (segments[i].count != 0 ||
-- mc[i] != segments[i].modCount)
-- return false;
-- }
- }
- return true;
- }
-@@ -740,45 +862,43 @@
- * @return the number of key-value mappings in this map
- */
- public int size() {
-- final Segment<K,V>[] segments = this.segments;
-- long sum = 0;
-- long check = 0;
-- int[] mc = new int[segments.length];
- // Try a few times to get accurate count. On failure due to
- // continuous async changes in table, resort to locking.
-- for (int k = 0; k < RETRIES_BEFORE_LOCK; ++k) {
-- check = 0;
-- sum = 0;
-- int mcsum = 0;
-- for (int i = 0; i < segments.length; ++i) {
-- sum += segments[i].count;
-- mcsum += mc[i] = segments[i].modCount;
-- }
-- if (mcsum != 0) {
-- for (int i = 0; i < segments.length; ++i) {
-- check += segments[i].count;
-- if (mc[i] != segments[i].modCount) {
-- check = -1; // force retry
-- break;
-+ final Segment<K,V>[] segments = this.segments;
-+ int size;
-+ boolean overflow; // true if size overflows 32 bits
-+ long sum; // sum of modCounts
-+ long last = 0L; // previous sum
-+ int retries = -1; // first iteration isn't retry
-+ try {
-+ for (;;) {
-+ if (retries++ == RETRIES_BEFORE_LOCK) {
-+ for (int j = 0; j < segments.length; ++j)
-+ ensureSegment(j).lock(); // force creation
-+ }
-+ sum = 0L;
-+ size = 0;
-+ overflow = false;
-+ for (int j = 0; j < segments.length; ++j) {
-+ Segment<K,V> seg = segmentAt(segments, j);
-+ if (seg != null) {
-+ sum += seg.modCount;
-+ int c = seg.count;
-+ if (c < 0 || (size += c) < 0)
-+ overflow = true;
- }
- }
-+ if (sum == last)
-+ break;
-+ last = sum;
- }
-- if (check == sum)
-- break;
-+ } finally {
-+ if (retries > RETRIES_BEFORE_LOCK) {
-+ for (int j = 0; j < segments.length; ++j)
-+ segmentAt(segments, j).unlock();
-+ }
- }
-- if (check != sum) { // Resort to locking all segments
-- sum = 0;
-- for (int i = 0; i < segments.length; ++i)
-- segments[i].lock();
-- for (int i = 0; i < segments.length; ++i)
-- sum += segments[i].count;
-- for (int i = 0; i < segments.length; ++i)
-- segments[i].unlock();
-- }
-- if (sum > Integer.MAX_VALUE)
-- return Integer.MAX_VALUE;
-- else
-- return (int)sum;
-+ return overflow ? Integer.MAX_VALUE : size;
- }
-
- /**
-@@ -794,7 +914,13 @@
- */
- public V get(Object key) {
- int hash = hash(key.hashCode());
-- return segmentFor(hash).get(key, hash);
-+ for (HashEntry<K,V> e = entryForHash(segmentForHash(hash), hash);
-+ e != null; e = e.next) {
-+ K k;
-+ if ((k = e.key) == key || (e.hash == hash && key.equals(k)))
-+ return e.value;
-+ }
-+ return null;
- }
-
- /**
-@@ -808,7 +934,13 @@
- */
- public boolean containsKey(Object key) {
- int hash = hash(key.hashCode());
-- return segmentFor(hash).containsKey(key, hash);
-+ for (HashEntry<K,V> e = entryForHash(segmentForHash(hash), hash);
-+ e != null; e = e.next) {
-+ K k;
-+ if ((k = e.key) == key || (e.hash == hash && key.equals(k)))
-+ return true;
-+ }
-+ return false;
- }
-
- /**
-@@ -823,51 +955,47 @@
- * @throws NullPointerException if the specified value is null
- */
- public boolean containsValue(Object value) {
-+ // Same idea as size()
- if (value == null)
- throw new NullPointerException();
--
-- // See explanation of modCount use above
--
- final Segment<K,V>[] segments = this.segments;
-- int[] mc = new int[segments.length];
--
-- // Try a few times without locking
-- for (int k = 0; k < RETRIES_BEFORE_LOCK; ++k) {
-- int sum = 0;
-- int mcsum = 0;
-- for (int i = 0; i < segments.length; ++i) {
-- int c = segments[i].count;
-- mcsum += mc[i] = segments[i].modCount;
-- if (segments[i].containsValue(value))
-- return true;
-- }
-- boolean cleanSweep = true;
-- if (mcsum != 0) {
-- for (int i = 0; i < segments.length; ++i) {
-- int c = segments[i].count;
-- if (mc[i] != segments[i].modCount) {
-- cleanSweep = false;
-- break;
-+ boolean found = false;
-+ long last = 0;
-+ int retries = -1;
-+ try {
-+ outer: for (;;) {
-+ if (retries++ == RETRIES_BEFORE_LOCK) {
-+ for (int j = 0; j < segments.length; ++j)
-+ ensureSegment(j).lock(); // force creation
-+ }
-+ long hashSum = 0L;
-+ int sum = 0;
-+ for (int j = 0; j < segments.length; ++j) {
-+ HashEntry<K,V>[] tab;
-+ Segment<K,V> seg = segmentAt(segments, j);
-+ if (seg != null && (tab = seg.table) != null) {
-+ for (int i = 0 ; i < tab.length; i++) {
-+ HashEntry<K,V> e;
-+ for (e = entryAt(tab, i); e != null; e = e.next) {
-+ V v = e.value;
-+ if (v != null && value.equals(v)) {
-+ found = true;
-+ break outer;
-+ }
-+ }
-+ }
-+ sum += seg.modCount;
- }
- }
-- }
-- if (cleanSweep)
-- return false;
-- }
-- // Resort to locking all segments
-- for (int i = 0; i < segments.length; ++i)
-- segments[i].lock();
-- boolean found = false;
-- try {
-- for (int i = 0; i < segments.length; ++i) {
-- if (segments[i].containsValue(value)) {
-- found = true;
-+ if (retries > 0 && sum == last)
- break;
-- }
-+ last = sum;
- }
- } finally {
-- for (int i = 0; i < segments.length; ++i)
-- segments[i].unlock();
-+ if (retries > RETRIES_BEFORE_LOCK) {
-+ for (int j = 0; j < segments.length; ++j)
-+ segmentAt(segments, j).unlock();
-+ }
- }
- return found;
- }
-@@ -908,7 +1036,11 @@
- if (value == null)
- throw new NullPointerException();
- int hash = hash(key.hashCode());
-- return segmentFor(hash).put(key, hash, value, false);
-+ int j = (hash >>> segmentShift) & segmentMask;
-+ Segment<K,V> s = segmentAt(segments, j);
-+ if (s == null)
-+ s = ensureSegment(j);
-+ return s.put(key, hash, value, false);
- }
-
- /**
-@@ -922,7 +1054,11 @@
- if (value == null)
- throw new NullPointerException();
- int hash = hash(key.hashCode());
-- return segmentFor(hash).put(key, hash, value, true);
-+ int j = (hash >>> segmentShift) & segmentMask;
-+ Segment<K,V> s = segmentAt(segments, j);
-+ if (s == null)
-+ s = ensureSegment(j);
-+ return s.put(key, hash, value, true);
- }
-
- /**
-@@ -948,7 +1084,8 @@
- */
- public V remove(Object key) {
- int hash = hash(key.hashCode());
-- return segmentFor(hash).remove(key, hash, null);
-+ Segment<K,V> s = segmentForHash(hash);
-+ return s == null ? null : s.remove(key, hash, null);
- }
-
- /**
-@@ -958,9 +1095,9 @@
- */
- public boolean remove(Object key, Object value) {
- int hash = hash(key.hashCode());
-- if (value == null)
-- return false;
-- return segmentFor(hash).remove(key, hash, value) != null;
-+ Segment<K,V> s;
-+ return value != null && (s = segmentForHash(hash)) != null &&
-+ s.remove(key, hash, value) != null;
- }
-
- /**
-@@ -969,10 +1106,11 @@
- * @throws NullPointerException if any of the arguments are null
- */
- public boolean replace(K key, V oldValue, V newValue) {
-+ int hash = hash(key.hashCode());
- if (oldValue == null || newValue == null)
- throw new NullPointerException();
-- int hash = hash(key.hashCode());
-- return segmentFor(hash).replace(key, hash, oldValue, newValue);
-+ Segment<K,V> s = segmentForHash(hash);
-+ return s != null && s.replace(key, hash, oldValue, newValue);
- }
-
- /**
-@@ -983,18 +1121,23 @@
- * @throws NullPointerException if the specified key or value is null
- */
- public V replace(K key, V value) {
-+ int hash = hash(key.hashCode());
- if (value == null)
- throw new NullPointerException();
-- int hash = hash(key.hashCode());
-- return segmentFor(hash).replace(key, hash, value);
-+ Segment<K,V> s = segmentForHash(hash);
-+ return s == null ? null : s.replace(key, hash, value);
- }
-
- /**
- * Removes all of the mappings from this map.
- */
- public void clear() {
-- for (int i = 0; i < segments.length; ++i)
-- segments[i].clear();
-+ final Segment<K,V>[] segments = this.segments;
-+ for (int j = 0; j < segments.length; ++j) {
-+ Segment<K,V> s = segmentAt(segments, j);
-+ if (s != null)
-+ s.clear();
-+ }
- }
-
- /**
-@@ -1095,42 +1238,41 @@
- advance();
- }
-
-- public boolean hasMoreElements() { return hasNext(); }
--
-+ /**
-+ * Set nextEntry to first node of next non-empty table
-+ * (in backwards order, to simplify checks).
-+ */
- final void advance() {
-- if (nextEntry != null && (nextEntry = nextEntry.next) != null)
-- return;
--
-- while (nextTableIndex >= 0) {
-- if ( (nextEntry = currentTable[nextTableIndex--]) != null)
-- return;
-- }
--
-- while (nextSegmentIndex >= 0) {
-- Segment<K,V> seg = segments[nextSegmentIndex--];
-- if (seg.count != 0) {
-- currentTable = seg.table;
-- for (int j = currentTable.length - 1; j >= 0; --j) {
-- if ( (nextEntry = currentTable[j]) != null) {
-- nextTableIndex = j - 1;
-- return;
-- }
-- }
-+ for (;;) {
-+ if (nextTableIndex >= 0) {
-+ if ((nextEntry = entryAt(currentTable,
-+ nextTableIndex--)) != null)
-+ break;
- }
-+ else if (nextSegmentIndex >= 0) {
-+ Segment<K,V> seg = segmentAt(segments, nextSegmentIndex--);
-+ if (seg != null && (currentTable = seg.table) != null)
-+ nextTableIndex = currentTable.length - 1;
-+ }
-+ else
-+ break;
- }
- }
-
-- public boolean hasNext() { return nextEntry != null; }
--
-- HashEntry<K,V> nextEntry() {
-- if (nextEntry == null)
-+ final HashEntry<K,V> nextEntry() {
-+ HashEntry<K,V> e = nextEntry;
-+ if (e == null)
- throw new NoSuchElementException();
-- lastReturned = nextEntry;
-- advance();
-- return lastReturned;
-+ lastReturned = e; // cannot assign until after null check
-+ if ((nextEntry = e.next) == null)
-+ advance();
-+ return e;
- }
-
-- public void remove() {
-+ public final boolean hasNext() { return nextEntry != null; }
-+ public final boolean hasMoreElements() { return nextEntry != null; }
-+
-+ public final void remove() {
- if (lastReturned == null)
- throw new IllegalStateException();
- ConcurrentHashMap.this.remove(lastReturned.key);
-@@ -1142,16 +1284,16 @@
- extends HashIterator
- implements Iterator<K>, Enumeration<K>
- {
-- public K next() { return super.nextEntry().key; }
-- public K nextElement() { return super.nextEntry().key; }
-+ public final K next() { return super.nextEntry().key; }
-+ public final K nextElement() { return super.nextEntry().key; }
- }
-
- final class ValueIterator
- extends HashIterator
- implements Iterator<V>, Enumeration<V>
- {
-- public V next() { return super.nextEntry().value; }
-- public V nextElement() { return super.nextEntry().value; }
-+ public final V next() { return super.nextEntry().value; }
-+ public final V nextElement() { return super.nextEntry().value; }
- }
-
- /**
-@@ -1271,15 +1413,20 @@
- * The key-value mappings are emitted in no particular order.
- */
- private void writeObject(java.io.ObjectOutputStream s) throws IOException {
-+ // force all segments for serialization compatibility
-+ for (int k = 0; k < segments.length; ++k)
-+ ensureSegment(k);
- s.defaultWriteObject();
-
-+ final Segment<K,V>[] segments = this.segments;
- for (int k = 0; k < segments.length; ++k) {
-- Segment<K,V> seg = segments[k];
-+ Segment<K,V> seg = segmentAt(segments, k);
- seg.lock();
- try {
- HashEntry<K,V>[] tab = seg.table;
- for (int i = 0; i < tab.length; ++i) {
-- for (HashEntry<K,V> e = tab[i]; e != null; e = e.next) {
-+ HashEntry<K,V> e;
-+ for (e = entryAt(tab, i); e != null; e = e.next) {
- s.writeObject(e.key);
- s.writeObject(e.value);
- }
-@@ -1297,13 +1444,20 @@
- * stream (i.e., deserialize it).
- * @param s the stream
- */
-+ @SuppressWarnings("unchecked")
- private void readObject(java.io.ObjectInputStream s)
- throws IOException, ClassNotFoundException {
- s.defaultReadObject();
-
-- // Initialize each segment to be minimally sized, and let grow.
-- for (int i = 0; i < segments.length; ++i) {
-- segments[i].setTable(new HashEntry[1]);
-+ // Re-initialize segments to be minimally sized, and let grow.
-+ int cap = MIN_SEGMENT_TABLE_CAPACITY;
-+ final Segment<K,V>[] segments = this.segments;
-+ for (int k = 0; k < segments.length; ++k) {
-+ Segment<K,V> seg = segments[k];
-+ if (seg != null) {
-+ seg.threshold = (int)(cap * seg.loadFactor);
-+ seg.table = (HashEntry<K,V>[]) new HashEntry[cap];
-+ }
- }
-
- // Read the keys and values, and put the mappings in the table
-@@ -1315,4 +1469,31 @@
- put(key, value);
- }
- }
-+
-+ // Unsafe mechanics
-+ private static final sun.misc.Unsafe UNSAFE;
-+ private static final long SBASE;
-+ private static final int SSHIFT;
-+ private static final long TBASE;
-+ private static final int TSHIFT;
-+
-+ static {
-+ int ss, ts;
-+ try {
-+ UNSAFE = sun.misc.Unsafe.getUnsafe();
-+ Class tc = HashEntry[].class;
-+ Class sc = Segment[].class;
-+ TBASE = UNSAFE.arrayBaseOffset(tc);
-+ SBASE = UNSAFE.arrayBaseOffset(sc);
-+ ts = UNSAFE.arrayIndexScale(tc);
-+ ss = UNSAFE.arrayIndexScale(sc);
-+ } catch (Exception e) {
-+ throw new Error(e);
-+ }
-+ if ((ss & (ss-1)) != 0 || (ts & (ts-1)) != 0)
-+ throw new Error("data type scale not a power of two");
-+ SSHIFT = 31 - Integer.numberOfLeadingZeros(ss);
-+ TSHIFT = 31 - Integer.numberOfLeadingZeros(ts);
-+ }
-+
- }
diff --git a/java/openjdk6/files/icedtea/openjdk/7064279-fixup.patch b/java/openjdk6/files/icedtea/openjdk/7064279-fixup.patch
deleted file mode 100644
index 9c90bae5ed0b..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/7064279-fixup.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-diff -Nru openjdk.orig/jdk/src/share/classes/java/beans/Introspector.java openjdk/jdk/src/share/classes/java/beans/Introspector.java
---- jdk/src/share/classes/java/beans/Introspector.java 2013-04-16 14:35:31.707279166 +0100
-+++ jdk/src/share/classes/java/beans/Introspector.java 2013-04-16 14:39:23.715018865 +0100
-@@ -102,7 +102,7 @@
- public final static int IGNORE_ALL_BEANINFO = 3;
-
- // Static Caches to speed up introspection.
-- private static final WeakCache<Class<?>, Method[]> declaredMethodCache = new WeakCache<>();
-+ private static final WeakCache<Class<?>, Method[]> declaredMethodCache = new WeakCache<Class<?>, Method[]>();
-
- private Class beanClass;
- private BeanInfo explicitBeanInfo;
-diff -Nru openjdk.orig/jdk/src/share/classes/java/beans/ThreadGroupContext.java openjdk/jdk/src/share/classes/java/beans/ThreadGroupContext.java
---- jdk/src/share/classes/java/beans/ThreadGroupContext.java 2013-04-16 14:35:31.707279166 +0100
-+++ jdk/src/share/classes/java/beans/ThreadGroupContext.java 2013-04-16 14:40:01.243623831 +0100
-@@ -25,9 +25,6 @@
-
- package java.beans;
-
--import com.sun.beans.finder.BeanInfoFinder;
--import com.sun.beans.finder.PropertyEditorFinder;
--
- import java.awt.GraphicsEnvironment;
- import java.util.HashMap;
- import java.util.Map;
-@@ -42,7 +39,7 @@
- */
- final class ThreadGroupContext {
-
-- private static final Map<ThreadGroup, ThreadGroupContext> contexts = new WeakHashMap<>();
-+ private static final Map<ThreadGroup, ThreadGroupContext> contexts = new WeakHashMap<ThreadGroup, ThreadGroupContext>();
-
- /**
- * Returns the appropriate {@code AppContext} for the caller,
-@@ -66,8 +63,6 @@
- private volatile Boolean isGuiAvailable;
-
- private Map<Class<?>, BeanInfo> beanInfoCache;
-- private BeanInfoFinder beanInfoFinder;
-- private PropertyEditorFinder propertyEditorFinder;
-
-
- boolean isDesignTime() {
-@@ -99,7 +94,7 @@
-
- BeanInfo putBeanInfo(Class<?> type, BeanInfo info) {
- if (this.beanInfoCache == null) {
-- this.beanInfoCache = new WeakHashMap<>();
-+ this.beanInfoCache = new WeakHashMap<Class<?>, BeanInfo>();
- }
- return this.beanInfoCache.put(type, info);
- }
-@@ -116,18 +111,4 @@
- }
- }
-
--
-- synchronized BeanInfoFinder getBeanInfoFinder() {
-- if (this.beanInfoFinder == null) {
-- this.beanInfoFinder = new BeanInfoFinder();
-- }
-- return this.beanInfoFinder;
-- }
--
-- synchronized PropertyEditorFinder getPropertyEditorFinder() {
-- if (this.propertyEditorFinder == null) {
-- this.propertyEditorFinder = new PropertyEditorFinder();
-- }
-- return this.propertyEditorFinder;
-- }
- }
diff --git a/java/openjdk6/files/icedtea/openjdk/7064279-resource_release.patch b/java/openjdk6/files/icedtea/openjdk/7064279-resource_release.patch
deleted file mode 100644
index 22d0e2caecd4..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/7064279-resource_release.patch
+++ /dev/null
@@ -1,436 +0,0 @@
-# HG changeset patch
-# User andrew
-# Date 1365712268 -3600
-# Node ID 4d66f7ebcf99c1b322f47ff0aa6adadcd995f8f4
-# Parent df591e0dfd349dc5986cc17949939c588d5a9690
-7064279: Introspector.getBeanInfo() should release some resources in timely manner
-Reviewed-by: art, alexp
-
-diff --git a/src/share/classes/java/beans/Beans.java b/src/share/classes/java/beans/Beans.java
---- jdk/src/share/classes/java/beans/Beans.java
-+++ jdk/src/share/classes/java/beans/Beans.java
-@@ -32,7 +32,6 @@
- import java.applet.AppletStub;
- import java.applet.AudioClip;
-
--import java.awt.GraphicsEnvironment;
- import java.awt.Image;
-
- import java.beans.beancontext.BeanContext;
-@@ -53,15 +52,11 @@
- import java.util.Iterator;
- import java.util.Vector;
-
--import sun.awt.AppContext;
--
- /**
- * This class provides some general purpose beans control methods.
- */
-
- public class Beans {
-- private static final Object DESIGN_TIME = new Object();
-- private static final Object GUI_AVAILABLE = new Object();
-
- /**
- * <p>
-@@ -395,8 +390,7 @@
- * @see DesignMode
- */
- public static boolean isDesignTime() {
-- Object value = AppContext.getAppContext().get(DESIGN_TIME);
-- return (value instanceof Boolean) && (Boolean) value;
-+ return ThreadGroupContext.getContext().isDesignTime();
- }
-
- /**
-@@ -413,8 +407,7 @@
- *
- */
- public static boolean isGuiAvailable() {
-- Object value = AppContext.getAppContext().get(GUI_AVAILABLE);
-- return (value instanceof Boolean) ? (Boolean) value : !GraphicsEnvironment.isHeadless();
-+ return ThreadGroupContext.getContext().isGuiAvailable();
- }
-
- /**
-@@ -440,7 +433,7 @@
- if (sm != null) {
- sm.checkPropertiesAccess();
- }
-- AppContext.getAppContext().put(DESIGN_TIME, Boolean.valueOf(isDesignTime));
-+ ThreadGroupContext.getContext().setDesignTime(isDesignTime);
- }
-
- /**
-@@ -466,7 +459,7 @@
- if (sm != null) {
- sm.checkPropertiesAccess();
- }
-- AppContext.getAppContext().put(GUI_AVAILABLE, Boolean.valueOf(isGuiAvailable));
-+ ThreadGroupContext.getContext().setGuiAvailable(isGuiAvailable);
- }
- }
-
-diff --git a/src/share/classes/java/beans/Introspector.java b/src/share/classes/java/beans/Introspector.java
---- jdk/src/share/classes/java/beans/Introspector.java
-+++ jdk/src/share/classes/java/beans/Introspector.java
-@@ -38,7 +38,6 @@
- import java.util.EventListener;
- import java.util.List;
- import java.util.TreeMap;
--import sun.awt.AppContext;
- import sun.reflect.misc.ReflectUtil;
-
- /**
-@@ -103,10 +102,7 @@
- public final static int IGNORE_ALL_BEANINFO = 3;
-
- // Static Caches to speed up introspection.
-- private static WeakCache<Class<?>, Method[]> declaredMethodCache =
-- new WeakCache<Class<?>, Method[]>();
--
-- private static final Object BEANINFO_CACHE = new Object();
-+ private static final WeakCache<Class<?>, Method[]> declaredMethodCache = new WeakCache<>();
-
- private Class beanClass;
- private BeanInfo explicitBeanInfo;
-@@ -170,21 +166,15 @@
- if (!ReflectUtil.isPackageAccessible(beanClass)) {
- return (new Introspector(beanClass, null, USE_ALL_BEANINFO)).getBeanInfo();
- }
-- WeakCache<Class<?>, BeanInfo> beanInfoCache;
-+ ThreadGroupContext context = ThreadGroupContext.getContext();
- BeanInfo beanInfo;
-- synchronized (BEANINFO_CACHE) {
-- beanInfoCache = (WeakCache<Class<?>, BeanInfo>) AppContext.getAppContext().get(BEANINFO_CACHE);
--
-- if (beanInfoCache == null) {
-- beanInfoCache = new WeakCache<Class<?>, BeanInfo>();
-- AppContext.getAppContext().put(BEANINFO_CACHE, beanInfoCache);
-- }
-- beanInfo = beanInfoCache.get(beanClass);
-+ synchronized (declaredMethodCache) {
-+ beanInfo = context.getBeanInfo(beanClass);
- }
- if (beanInfo == null) {
- beanInfo = (new Introspector(beanClass, null, USE_ALL_BEANINFO)).getBeanInfo();
-- synchronized (BEANINFO_CACHE) {
-- beanInfoCache.put(beanClass, beanInfo);
-+ synchronized (declaredMethodCache) {
-+ context.putBeanInfo(beanClass, beanInfo);
- }
- }
- return beanInfo;
-@@ -334,11 +324,8 @@
- */
-
- public static void flushCaches() {
-- synchronized (BEANINFO_CACHE) {
-- WeakCache beanInfoCache = (WeakCache) AppContext.getAppContext().get(BEANINFO_CACHE);
-- if (beanInfoCache != null) {
-- beanInfoCache.clear();
-- }
-+ synchronized (declaredMethodCache) {
-+ ThreadGroupContext.getContext().clearBeanInfoCache();
- declaredMethodCache.clear();
- }
- }
-@@ -362,11 +349,8 @@
- if (clz == null) {
- throw new NullPointerException();
- }
-- synchronized (BEANINFO_CACHE) {
-- WeakCache beanInfoCache = (WeakCache) AppContext.getAppContext().get(BEANINFO_CACHE);
-- if (beanInfoCache != null) {
-- beanInfoCache.put(clz, null);
-- }
-+ synchronized (declaredMethodCache) {
-+ ThreadGroupContext.getContext().removeBeanInfo(clz);
- declaredMethodCache.put(clz, null);
- }
- }
-@@ -1313,7 +1297,7 @@
- if (!ReflectUtil.isPackageAccessible(clz)) {
- return new Method[0];
- }
-- synchronized (BEANINFO_CACHE) {
-+ synchronized (declaredMethodCache) {
- Method[] result = declaredMethodCache.get(clz);
- if (result == null) {
- result = clz.getMethods();
-diff --git a/src/share/classes/java/beans/ThreadGroupContext.java b/src/share/classes/java/beans/ThreadGroupContext.java
-new file mode 100644
---- /dev/null
-+++ jdk/src/share/classes/java/beans/ThreadGroupContext.java
-@@ -0,0 +1,133 @@
-+/*
-+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+package java.beans;
-+
-+import com.sun.beans.finder.BeanInfoFinder;
-+import com.sun.beans.finder.PropertyEditorFinder;
-+
-+import java.awt.GraphicsEnvironment;
-+import java.util.HashMap;
-+import java.util.Map;
-+import java.util.WeakHashMap;
-+
-+/**
-+ * The {@code ThreadGroupContext} is an application-dependent
-+ * context referenced by the specific {@link ThreadGroup}.
-+ * This is a replacement for the {@link sun.awt.AppContext}.
-+ *
-+ * @author Sergey Malenkov
-+ */
-+final class ThreadGroupContext {
-+
-+ private static final Map<ThreadGroup, ThreadGroupContext> contexts = new WeakHashMap<>();
-+
-+ /**
-+ * Returns the appropriate {@code AppContext} for the caller,
-+ * as determined by its {@code ThreadGroup}.
-+ *
-+ * @return the application-dependent context
-+ */
-+ static ThreadGroupContext getContext() {
-+ ThreadGroup group = Thread.currentThread().getThreadGroup();
-+ synchronized (contexts) {
-+ ThreadGroupContext context = contexts.get(group);
-+ if (context == null) {
-+ context = new ThreadGroupContext();
-+ contexts.put(group, context);
-+ }
-+ return context;
-+ }
-+ }
-+
-+ private volatile boolean isDesignTime;
-+ private volatile Boolean isGuiAvailable;
-+
-+ private Map<Class<?>, BeanInfo> beanInfoCache;
-+ private BeanInfoFinder beanInfoFinder;
-+ private PropertyEditorFinder propertyEditorFinder;
-+
-+
-+ boolean isDesignTime() {
-+ return this.isDesignTime;
-+ }
-+
-+ void setDesignTime(boolean isDesignTime) {
-+ this.isDesignTime = isDesignTime;
-+ }
-+
-+
-+ boolean isGuiAvailable() {
-+ Boolean isGuiAvailable = this.isGuiAvailable;
-+ return (isGuiAvailable != null)
-+ ? isGuiAvailable.booleanValue()
-+ : !GraphicsEnvironment.isHeadless();
-+ }
-+
-+ void setGuiAvailable(boolean isGuiAvailable) {
-+ this.isGuiAvailable = Boolean.valueOf(isGuiAvailable);
-+ }
-+
-+
-+ BeanInfo getBeanInfo(Class<?> type) {
-+ return (this.beanInfoCache != null)
-+ ? this.beanInfoCache.get(type)
-+ : null;
-+ }
-+
-+ BeanInfo putBeanInfo(Class<?> type, BeanInfo info) {
-+ if (this.beanInfoCache == null) {
-+ this.beanInfoCache = new WeakHashMap<>();
-+ }
-+ return this.beanInfoCache.put(type, info);
-+ }
-+
-+ void removeBeanInfo(Class<?> type) {
-+ if (this.beanInfoCache != null) {
-+ this.beanInfoCache.remove(type);
-+ }
-+ }
-+
-+ void clearBeanInfoCache() {
-+ if (this.beanInfoCache != null) {
-+ this.beanInfoCache.clear();
-+ }
-+ }
-+
-+
-+ synchronized BeanInfoFinder getBeanInfoFinder() {
-+ if (this.beanInfoFinder == null) {
-+ this.beanInfoFinder = new BeanInfoFinder();
-+ }
-+ return this.beanInfoFinder;
-+ }
-+
-+ synchronized PropertyEditorFinder getPropertyEditorFinder() {
-+ if (this.propertyEditorFinder == null) {
-+ this.propertyEditorFinder = new PropertyEditorFinder();
-+ }
-+ return this.propertyEditorFinder;
-+ }
-+}
-diff --git a/test/java/beans/Beans/6669869/TestDesignTime.java b/test/java/beans/Beans/6669869/TestDesignTime.java
---- jdk/test/java/beans/Beans/6669869/TestDesignTime.java
-+++ jdk/test/java/beans/Beans/6669869/TestDesignTime.java
-@@ -29,7 +29,6 @@
- */
-
- import java.beans.Beans;
--import sun.awt.SunToolkit;
-
- public class TestDesignTime implements Runnable {
- public static void main(String[] args) throws InterruptedException {
-@@ -44,7 +43,6 @@
- }
-
- public void run() {
-- SunToolkit.createNewAppContext();
- if (Beans.isDesignTime()) {
- throw new Error("shared DesignTime property");
- }
-diff --git a/test/java/beans/Beans/6669869/TestGuiAvailable.java b/test/java/beans/Beans/6669869/TestGuiAvailable.java
---- jdk/test/java/beans/Beans/6669869/TestGuiAvailable.java
-+++ jdk/test/java/beans/Beans/6669869/TestGuiAvailable.java
-@@ -30,7 +30,6 @@
-
- import java.awt.GraphicsEnvironment;
- import java.beans.Beans;
--import sun.awt.SunToolkit;
-
- public class TestGuiAvailable implements Runnable {
- public static void main(String[] args) throws InterruptedException {
-@@ -45,7 +44,6 @@
- }
-
- public void run() {
-- SunToolkit.createNewAppContext();
- if (Beans.isGuiAvailable() == GraphicsEnvironment.isHeadless()) {
- throw new Error("shared GuiAvailable property");
- }
-diff --git a/test/java/beans/Introspector/7064279/Test7064279.java b/test/java/beans/Introspector/7064279/Test7064279.java
-new file mode 100644
---- /dev/null
-+++ jdk/test/java/beans/Introspector/7064279/Test7064279.java
-@@ -0,0 +1,75 @@
-+/*
-+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 7064279
-+ * @summary Tests that Introspector does not have strong references to context class loader
-+ * @author Sergey Malenkov
-+ */
-+
-+import java.beans.Introspector;
-+import java.io.File;
-+import java.lang.ref.WeakReference;
-+import java.net.URL;
-+import java.net.URLClassLoader;
-+
-+public class Test7064279 {
-+
-+ public static void main(String[] args) throws Exception {
-+ WeakReference ref = new WeakReference(test("test.jar", "test.Test"));
-+ try {
-+ int[] array = new int[1024];
-+ while (true) {
-+ array = new int[array.length << 1];
-+ }
-+ }
-+ catch (OutOfMemoryError error) {
-+ System.gc();
-+ }
-+ if (null != ref.get()) {
-+ throw new Error("ClassLoader is not released");
-+ }
-+ }
-+
-+ private static Object test(String jarName, String className) throws Exception {
-+ StringBuilder sb = new StringBuilder(256);
-+ sb.append("file:");
-+ sb.append(System.getProperty("test.src", "."));
-+ sb.append(File.separatorChar);
-+ sb.append(jarName);
-+
-+ ClassLoader newLoader = new URLClassLoader(new URL[] { new URL(sb.toString()) });
-+ ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
-+
-+ Thread.currentThread().setContextClassLoader(newLoader);
-+ test(newLoader.loadClass(className));
-+ Thread.currentThread().setContextClassLoader(oldLoader);
-+
-+ return newLoader;
-+ }
-+
-+ private static void test(Class type) throws Exception {
-+ Introspector.getBeanInfo(type);
-+ }
-+}
-diff --git a/test/java/beans/Introspector/Test6660539.java b/test/java/beans/Introspector/Test6660539.java
---- jdk/test/java/beans/Introspector/Test6660539.java
-+++ jdk/test/java/beans/Introspector/Test6660539.java
-@@ -28,8 +28,6 @@
- * @author Sergey Malenkov
- */
-
--import sun.awt.SunToolkit;
--
- import java.beans.BeanInfo;
- import java.beans.IntrospectionException;
- import java.beans.Introspector;
-@@ -49,7 +47,6 @@
- }
-
- public void run() {
-- SunToolkit.createNewAppContext();
- for (PropertyDescriptor pd : getPropertyDescriptors()) {
- if (pd.getDisplayName().equals(NAME))
- throw new Error("shared BeanInfo cache");
diff --git a/java/openjdk6/files/icedtea/openjdk/7133220-factory_finder_parser_transform_useBSClassLoader.patch b/java/openjdk6/files/icedtea/openjdk/7133220-factory_finder_parser_transform_useBSClassLoader.patch
deleted file mode 100644
index 9b61dd6a6d73..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/7133220-factory_finder_parser_transform_useBSClassLoader.patch
+++ /dev/null
@@ -1,299 +0,0 @@
---- /dev/null 2013-04-25 14:11:00.000000000 -0400
-+++ jaxp/patches/jaxp_src/7133220-factory_finder_parser_transform_useBSClassLoader.patch 2013-04-25 14:19:44.000000000 -0400
-@@ -0,0 +1,296 @@
-+--- src/javax/xml/parsers/FactoryFinder.java 2013-04-22 12:37:39.305820912 -0400
-++++ src/javax/xml/parsers/FactoryFinder.java 2013-04-22 12:28:52.947388255 -0400
-+@@ -25,15 +25,12 @@
-+
-+ package javax.xml.parsers;
-+
-+-import java.io.File;
-+-import java.io.FileInputStream;
-+-
-+-import java.util.Properties;
-+ import java.io.BufferedReader;
-++import java.io.File;
-+ import java.io.IOException;
-+ import java.io.InputStream;
-+ import java.io.InputStreamReader;
-+-import java.net.URL;
-++import java.util.Properties;
-+
-+ /**
-+ * <p>Implements pluggable Datatypes.</p>
-+@@ -42,6 +39,7 @@
-+ * sync. It is package private for secure class loading.</p>
-+ *
-+ * @author Santiago.PericasGeertsen@sun.com
-++ * @author Huizhe.Wang@oracle.com
-+ */
-+ class FactoryFinder {
-+
-+@@ -95,18 +93,24 @@
-+ * If the class loader supplied is <code>null</code>, first try using the
-+ * context class loader followed by the current (i.e. bootstrap) class
-+ * loader.
-++ *
-++ * Use bootstrap classLoader if cl = null and useBSClsLoader is true
-+ */
-+ static private Class getProviderClass(String className, ClassLoader cl,
-+- boolean doFallback) throws ClassNotFoundException
-++ boolean doFallback, boolean useBSClsLoader) throws ClassNotFoundException
-+ {
-+ try {
-+ if (cl == null) {
-+- cl = ss.getContextClassLoader();
-+- if (cl == null) {
-+- throw new ClassNotFoundException();
-+- }
-+- else {
-+- return cl.loadClass(className);
-++ if (useBSClsLoader) {
-++ return Class.forName(className, true, FactoryFinder.class.getClassLoader());
-++ } else {
-++ cl = ss.getContextClassLoader();
-++ if (cl == null) {
-++ throw new ClassNotFoundException();
-++ }
-++ else {
-++ return cl.loadClass(className);
-++ }
-+ }
-+ }
-+ else {
-+@@ -131,8 +135,8 @@
-+ * @param className Name of the concrete class corresponding to the
-+ * service provider
-+ *
-+- * @param cl ClassLoader to use to load the class, null means to use
-+- * the bootstrap ClassLoader
-++ * @param cl <code>ClassLoader</code> used to load the factory class. If <code>null</code>
-++ * current <code>Thread</code>'s context classLoader is used to load the factory class.
-+ *
-+ * @param doFallback True if the current ClassLoader should be tried as
-+ * a fallback if the class is not found using cl
-+@@ -140,8 +144,30 @@
-+ static Object newInstance(String className, ClassLoader cl, boolean doFallback)
-+ throws ConfigurationError
-+ {
-++ return newInstance(className, cl, doFallback, false);
-++ }
-++
-++ /**
-++ * Create an instance of a class. Delegates to method
-++ * <code>getProviderClass()</code> in order to load the class.
-++ *
-++ * @param className Name of the concrete class corresponding to the
-++ * service provider
-++ *
-++ * @param cl <code>ClassLoader</code> used to load the factory class. If <code>null</code>
-++ * current <code>Thread</code>'s context classLoader is used to load the factory class.
-++ *
-++ * @param doFallback True if the current ClassLoader should be tried as
-++ * a fallback if the class is not found using cl
-++ *
-++ * @param useBSClsLoader True if cl=null actually meant bootstrap classLoader. This parameter
-++ * is needed since DocumentBuilderFactory/SAXParserFactory defined null as context classLoader.
-++ */
-++ static Object newInstance(String className, ClassLoader cl, boolean doFallback, boolean useBSClsLoader)
-++ throws ConfigurationError
-++ {
-+ try {
-+- Class providerClass = getProviderClass(className, cl, doFallback);
-++ Class providerClass = getProviderClass(className, cl, doFallback, useBSClsLoader);
-+ Object instance = providerClass.newInstance();
-+ if (debug) { // Extra check to avoid computing cl strings
-+ dPrint("created new instance of " + providerClass +
-+@@ -244,6 +270,7 @@
-+
-+ // First try the Context ClassLoader
-+ ClassLoader cl = ss.getContextClassLoader();
-++ boolean useBSClsLoader = false;
-+ if (cl != null) {
-+ is = ss.getResourceAsStream(cl, serviceId);
-+
-+@@ -251,11 +278,13 @@
-+ if (is == null) {
-+ cl = FactoryFinder.class.getClassLoader();
-+ is = ss.getResourceAsStream(cl, serviceId);
-++ useBSClsLoader = true;
-+ }
-+ } else {
-+ // No Context ClassLoader, try the current ClassLoader
-+ cl = FactoryFinder.class.getClassLoader();
-+ is = ss.getResourceAsStream(cl, serviceId);
-++ useBSClsLoader = true;
-+ }
-+
-+ if (is == null) {
-+@@ -293,7 +322,7 @@
-+ // ClassLoader because we want to avoid the case where the
-+ // resource file was found using one ClassLoader and the
-+ // provider class was instantiated using a different one.
-+- return newInstance(factoryClassName, cl, false);
-++ return newInstance(factoryClassName, cl, false, useBSClsLoader);
-+ }
-+
-+ // No provider found
-+--- src/javax/xml/transform/FactoryFinder.java 2013-04-22 12:37:39.312820966 -0400
-++++ src/javax/xml/transform/FactoryFinder.java 2013-04-22 12:35:08.715478293 -0400
-+@@ -25,15 +25,12 @@
-+
-+ package javax.xml.transform;
-+
-+-import java.io.File;
-+-import java.io.FileInputStream;
-+-
-+-import java.util.Properties;
-+ import java.io.BufferedReader;
-++import java.io.File;
-+ import java.io.IOException;
-+ import java.io.InputStream;
-+ import java.io.InputStreamReader;
-+-import java.net.URL;
-++import java.util.Properties;
-+
-+ /**
-+ * <p>Implements pluggable Datatypes.</p>
-+@@ -42,6 +39,7 @@
-+ * sync. It is package private for secure class loading.</p>
-+ *
-+ * @author Santiago.PericasGeertsen@sun.com
-++ * @author Huizhe.Wang@oracle.com
-+ */
-+ class FactoryFinder {
-+
-+@@ -95,18 +93,24 @@
-+ * If the class loader supplied is <code>null</code>, first try using the
-+ * context class loader followed by the current (i.e. bootstrap) class
-+ * loader.
-++ *
-++ * Use bootstrap classLoader if cl = null and useBSClsLoader is true
-+ */
-+ static private Class getProviderClass(String className, ClassLoader cl,
-+- boolean doFallback) throws ClassNotFoundException
-++ boolean doFallback, boolean useBSClsLoader) throws ClassNotFoundException
-+ {
-+ try {
-+ if (cl == null) {
-+- cl = ss.getContextClassLoader();
-+- if (cl == null) {
-+- throw new ClassNotFoundException();
-+- }
-+- else {
-+- return cl.loadClass(className);
-++ if (useBSClsLoader) {
-++ return Class.forName(className, true, FactoryFinder.class.getClassLoader());
-++ } else {
-++ cl = ss.getContextClassLoader();
-++ if (cl == null) {
-++ throw new ClassNotFoundException();
-++ }
-++ else {
-++ return cl.loadClass(className);
-++ }
-+ }
-+ }
-+ else {
-+@@ -131,8 +135,8 @@
-+ * @param className Name of the concrete class corresponding to the
-+ * service provider
-+ *
-+- * @param cl ClassLoader to use to load the class, null means to use
-+- * the bootstrap ClassLoader
-++ * @param cl <code>ClassLoader</code> used to load the factory class. If <code>null</code>
-++ * current <code>Thread</code>'s context classLoader is used to load the factory class.
-+ *
-+ * @param doFallback True if the current ClassLoader should be tried as
-+ * a fallback if the class is not found using cl
-+@@ -140,8 +144,30 @@
-+ static Object newInstance(String className, ClassLoader cl, boolean doFallback)
-+ throws ConfigurationError
-+ {
-++ return newInstance(className, cl, doFallback, false);
-++ }
-++
-++ /**
-++ * Create an instance of a class. Delegates to method
-++ * <code>getProviderClass()</code> in order to load the class.
-++ *
-++ * @param className Name of the concrete class corresponding to the
-++ * service provider
-++ *
-++ * @param cl <code>ClassLoader</code> used to load the factory class. If <code>null</code>
-++ * current <code>Thread</code>'s context classLoader is used to load the factory class.
-++ *
-++ * @param doFallback True if the current ClassLoader should be tried as
-++ * a fallback if the class is not found using cl
-++ *
-++ * @param useBSClsLoader True if cl=null actually meant bootstrap classLoader. This parameter
-++ * is needed since DocumentBuilderFactory/SAXParserFactory defined null as context classLoader.
-++ */
-++ static Object newInstance(String className, ClassLoader cl, boolean doFallback, boolean useBSClsLoader)
-++ throws ConfigurationError
-++ {
-+ try {
-+- Class providerClass = getProviderClass(className, cl, doFallback);
-++ Class providerClass = getProviderClass(className, cl, doFallback, useBSClsLoader);
-+ Object instance = providerClass.newInstance();
-+ if (debug) { // Extra check to avoid computing cl strings
-+ dPrint("created new instance of " + providerClass +
-+@@ -182,7 +208,7 @@
-+ String systemProp = ss.getSystemProperty(factoryId);
-+ if (systemProp != null) {
-+ dPrint("found system property, value=" + systemProp);
-+- return newInstance(systemProp, null, true);
-++ return newInstance(systemProp, null, true, false);
-+ }
-+ }
-+ catch (SecurityException se) {
-+@@ -210,7 +236,7 @@
-+
-+ if (factoryClassName != null) {
-+ dPrint("found in $java.home/jaxp.properties, value=" + factoryClassName);
-+- return newInstance(factoryClassName, null, true);
-++ return newInstance(factoryClassName, null, true, false);
-+ }
-+ }
-+ catch (Exception ex) {
-+@@ -228,7 +254,7 @@
-+ }
-+
-+ dPrint("loaded from fallback value: " + fallbackClassName);
-+- return newInstance(fallbackClassName, null, true);
-++ return newInstance(fallbackClassName, null, true, false);
-+ }
-+
-+ /*
-+@@ -244,6 +270,7 @@
-+
-+ // First try the Context ClassLoader
-+ ClassLoader cl = ss.getContextClassLoader();
-++ boolean useBSClsLoader = false;
-+ if (cl != null) {
-+ is = ss.getResourceAsStream(cl, serviceId);
-+
-+@@ -251,11 +278,13 @@
-+ if (is == null) {
-+ cl = FactoryFinder.class.getClassLoader();
-+ is = ss.getResourceAsStream(cl, serviceId);
-+- }
-++ useBSClsLoader = true;
-++ }
-+ } else {
-+ // No Context ClassLoader, try the current ClassLoader
-+ cl = FactoryFinder.class.getClassLoader();
-+ is = ss.getResourceAsStream(cl, serviceId);
-++ useBSClsLoader = true;
-+ }
-+
-+ if (is == null) {
-+@@ -293,7 +322,7 @@
-+ // ClassLoader because we want to avoid the case where the
-+ // resource file was found using one ClassLoader and the
-+ // provider class was instantiated using a different one.
-+- return newInstance(factoryClassName, cl, false);
-++ return newInstance(factoryClassName, cl, false, useBSClsLoader);
-+ }
-+
-+ // No provider found
diff --git a/java/openjdk6/files/icedtea/openjdk/7195301-no_instanceof_node.patch b/java/openjdk6/files/icedtea/openjdk/7195301-no_instanceof_node.patch
deleted file mode 100644
index fe6d8acae545..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/7195301-no_instanceof_node.patch
+++ /dev/null
@@ -1,86 +0,0 @@
-# HG changeset patch
-# User andrew
-# Date 1371053674 -3600
-# Node ID 2ae6d8da293f30c94c9478a6634c7a480328c5c5
-# Parent 18416c18dc35344d89a3a997420a65c996e5e906
-7195301: XML Signature DOM implementation should not use instanceof to determine type of Node
-Reviewed-by: mullan
-
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/Init.java b/src/share/classes/com/sun/org/apache/xml/internal/security/Init.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/Init.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/Init.java
-@@ -158,7 +158,7 @@
- }
- }
- for (Node el=config.getFirstChild();el!=null;el=el.getNextSibling()) {
-- if (!(el instanceof Element)) {
-+ if (el.getNodeType() != Node.ELEMENT_NODE) {
- continue;
- }
- String tag=el.getLocalName();
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerBase.java b/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerBase.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerBase.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerBase.java
-@@ -187,7 +187,7 @@
- this._excludeNode = excludeNode;
- try {
- NameSpaceSymbTable ns=new NameSpaceSymbTable();
-- if (rootNode instanceof Element) {
-+ if (rootNode != null && rootNode.getNodeType() == Node.ELEMENT_NODE) {
- //Fills the nssymbtable with the definitions of the parent of the root subnode
- getParentNameSpaces((Element)rootNode,ns);
- }
-@@ -306,7 +306,7 @@
- return;
- sibling=parentNode.getNextSibling();
- parentNode=parentNode.getParentNode();
-- if (!(parentNode instanceof Element)) {
-+ if (parentNode !=null && parentNode.getNodeType() != Node.ELEMENT_NODE) {
- parentNode=null;
- }
- }
-@@ -509,7 +509,7 @@
- return;
- sibling=parentNode.getNextSibling();
- parentNode=parentNode.getParentNode();
-- if (!(parentNode instanceof Element)) {
-+ if (parentNode != null && parentNode.getNodeType() != Node.ELEMENT_NODE) {
- parentNode=null;
- }
- }
-@@ -541,18 +541,14 @@
- final static void getParentNameSpaces(Element el,NameSpaceSymbTable ns) {
- List parents=new ArrayList();
- Node n1=el.getParentNode();
-- if (!(n1 instanceof Element)) {
-+ if (n1 == null || n1.getNodeType() != Node.ELEMENT_NODE) {
- return;
- }
- //Obtain all the parents of the elemnt
-- Element parent=(Element) el.getParentNode();
-- while (parent!=null) {
-- parents.add(parent);
-- Node n=parent.getParentNode();
-- if (!(n instanceof Element )) {
-- break;
-- }
-- parent=(Element)n;
-+ Node parent = n1;
-+ while (parent!=null && parent.getNodeType() == Node.ELEMENT_NODE) {
-+ parents.add((Element)parent);
-+ parent = parent.getParentNode();
- }
- //Visit them in reverse order.
- ListIterator it=parents.listIterator(parents.size());
-diff --git a/src/share/classes/com/sun/org/apache/xml/internal/security/encryption/XMLCipher.java b/src/share/classes/com/sun/org/apache/xml/internal/security/encryption/XMLCipher.java
---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/encryption/XMLCipher.java
-+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/encryption/XMLCipher.java
-@@ -1523,7 +1523,7 @@
- // The de-serialiser returns a fragment whose children we need to
- // take on.
-
-- if (sourceParent instanceof Document) {
-+ if (sourceParent != null && sourceParent.getNodeType() == Node.DOCUMENT_NODE) {
-
- // If this is a content decryption, this may have problems
-
diff --git a/java/openjdk6/files/icedtea/openjdk/7197906-handle_32_bit_shifts.patch b/java/openjdk6/files/icedtea/openjdk/7197906-handle_32_bit_shifts.patch
deleted file mode 100644
index 07304d60aeba..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/7197906-handle_32_bit_shifts.patch
+++ /dev/null
@@ -1,33 +0,0 @@
---- hotspot/src/share/vm/memory/blockOffsetTable.hpp 2012-09-13 21:22:37.897456500 +0200
-+++ hotspot/src/share/vm/memory/blockOffsetTable.hpp 2012-09-13 21:22:34.345253300 +0200
-@@ -285,7 +285,7 @@
- };
-
- static size_t power_to_cards_back(uint i) {
-- return (size_t)(1 << (LogBase * i));
-+ return (size_t)1 << (LogBase * i);
- }
- static size_t power_to_words_back(uint i) {
- return power_to_cards_back(i) * N_words;
---- hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp 2012-09-13 21:22:37.901456800 +0200
-+++ hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp 2012-09-13 21:22:34.354253900 +0200
-@@ -110,7 +110,7 @@
- #ifndef PRODUCT
- bool CMBitMapRO::covers(ReservedSpace rs) const {
- // assert(_bm.map() == _virtual_space.low(), "map inconsistency");
-- assert(((size_t)_bm.size() * (size_t)(1 << _shifter)) == _bmWordSize,
-+ assert(((size_t)_bm.size() * ((size_t)1 << _shifter)) == _bmWordSize,
- "size inconsistency");
- return _bmStartWord == (HeapWord*)(rs.base()) &&
- _bmWordSize == rs.size()>>LogHeapWordSize;
---- hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp 2012-09-13 21:22:37.898456600 +0200
-+++ hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp 2012-09-13 21:22:34.346253400 +0200
-@@ -273,7 +273,7 @@
- if (_max_fine_entries == 0) {
- assert(_mod_max_fine_entries_mask == 0, "Both or none.");
- size_t max_entries_log = (size_t)log2_long((jlong)G1RSetRegionEntries);
-- _max_fine_entries = (size_t)(1 << max_entries_log);
-+ _max_fine_entries = (size_t)1 << max_entries_log;
- _mod_max_fine_entries_mask = _max_fine_entries - 1;
-
- assert(_fine_eviction_sample_size == 0
diff --git a/java/openjdk6/files/icedtea/openjdk/8004302-soap_test_failure.patch b/java/openjdk6/files/icedtea/openjdk/8004302-soap_test_failure.patch
deleted file mode 100644
index 9102d48d1cad..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/8004302-soap_test_failure.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-diff -Nru openjdk.orig/jdk/src/share/lib/security/java.security openjdk/jdk/src/share/lib/security/java.security
---- jdk/src/share/lib/security/java.security 2013-04-16 14:23:48.623949921 +0100
-+++ jdk/src/share/lib/security/java.security 2013-04-16 14:26:07.318184299 +0100
-@@ -128,7 +128,9 @@
- # corresponding RuntimePermission ("accessClassInPackage."+package) has
- # been granted.
- package.access=sun.,\
-- com.sun.xml.internal.,\
-+ com.sun.xml.internal.bind.,\
-+ com.sun.xml.internal.org.jvnet.staxex.,\
-+ com.sun.xml.internal.ws.,\
- com.sun.imageio.,\
- com.sun.istack.internal.,\
- com.sun.jmx.
-@@ -144,7 +146,9 @@
- # checkPackageDefinition.
- #
- package.definition=sun.,\
-- com.sun.xml.internal.,\
-+ com.sun.xml.internal.bind.,\
-+ com.sun.xml.internal.org.jvnet.staxex.,\
-+ com.sun.xml.internal.ws.,\
- com.sun.imageio.,\
- com.sun.istack.internal.,\
- com.sun.jmx.
-diff -Nru openjdk.orig/jdk/src/share/lib/security/java.security-solaris openjdk/jdk/src/share/lib/security/java.security-solaris
---- jdk/src/share/lib/security/java.security-solaris 2013-04-16 14:23:48.623949921 +0100
-+++ jdk/src/share/lib/security/java.security-solaris 2013-04-16 14:26:30.082551058 +0100
-@@ -129,7 +129,9 @@
- # corresponding RuntimePermission ("accessClassInPackage."+package) has
- # been granted.
- package.access=sun.,\
-- com.sun.xml.internal.,\
-+ com.sun.xml.internal.bind.,\
-+ com.sun.xml.internal.org.jvnet.staxex.,\
-+ com.sun.xml.internal.ws.,\
- com.sun.imageio.
- com.sun.istack.internal.,\
- com.sun.jmx.
-@@ -145,7 +147,9 @@
- # checkPackageDefinition.
- #
- package.definition=sun.,\
-- com.sun.xml.internal.,\
-+ com.sun.xml.internal.bind.,\
-+ com.sun.xml.internal.org.jvnet.staxex.,\
-+ com.sun.xml.internal.ws.,\
- com.sun.imageio.
- com.sun.istack.internal.,\
- com.sun.jmx.
-diff -Nru openjdk.orig/jdk/src/share/lib/security/java.security-windows openjdk/jdk/src/share/lib/security/java.security-windows
---- jdk/src/share/lib/security/java.security-windows 2013-04-16 14:23:48.623949921 +0100
-+++ jdk/src/share/lib/security/java.security-windows 2013-04-16 14:26:51.170890824 +0100
-@@ -129,7 +129,9 @@
- # corresponding RuntimePermission ("accessClassInPackage."+package) has
- # been granted.
- package.access=sun.,\
-- com.sun.xml.internal.,\
-+ com.sun.xml.internal.bind.,\
-+ com.sun.xml.internal.org.jvnet.staxex.,\
-+ com.sun.xml.internal.ws.,\
- com.sun.imageio.
- com.sun.istack.internal.,\
- com.sun.jmx.
-@@ -145,7 +147,9 @@
- # checkPackageDefinition.
- #
- package.definition=sun.,\
-- com.sun.xml.internal.,\
-+ com.sun.xml.internal.bind.,\
-+ com.sun.xml.internal.org.jvnet.staxex.,\
-+ com.sun.xml.internal.ws.,\
- com.sun.imageio.
- com.sun.istack.internal.,\
- com.sun.jmx.
diff --git a/java/openjdk6/files/icedtea/openjdk/8004341-jck_dialog_failure-02.patch b/java/openjdk6/files/icedtea/openjdk/8004341-jck_dialog_failure-02.patch
deleted file mode 100644
index 586c0a97a943..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/8004341-jck_dialog_failure-02.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-# HG changeset patch
-# User andrew
-# Date 1360590852 0
-# Node ID 892e940d9996b09c01796de27fd57225faf8be0a
-# Parent c6058fa2a9824f71e06ca214aa8ec54400b56cc4
-8004341: Two JCK tests fails with 7u11 b06
-
-diff --git a/src/share/classes/java/awt/Dialog.java b/src/share/classes/java/awt/Dialog.java
---- jdk/src/share/classes/java/awt/Dialog.java
-+++ jdk/src/share/classes/java/awt/Dialog.java
-@@ -1643,7 +1643,6 @@
- this.resizable = fields.get("resizable", true);
- this.undecorated = fields.get("undecorated", false);
- this.title = (String)fields.get("title", "");
-- this.modalityType = localModalityType;
-
- blockedWindows = new IdentityArrayList();
-
diff --git a/java/openjdk6/files/icedtea/openjdk/8004341-jck_dialog_failure.patch b/java/openjdk6/files/icedtea/openjdk/8004341-jck_dialog_failure.patch
deleted file mode 100644
index 7606e3976b7c..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/8004341-jck_dialog_failure.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-# HG changeset patch
-# User andrew
-# Date 1360323180 0
-# Node ID ca6ee539c5f4f4dd9d5fb9b0604d94c5806c3e28
-# Parent 635d562a25becae602dc5988dae8bce84b199eb4
-8004341: Two JCK tests fails with 7u11 b06
-
-diff --git a/src/share/classes/java/awt/Dialog.java b/src/share/classes/java/awt/Dialog.java
---- jdk/src/share/classes/java/awt/Dialog.java
-+++ jdk/src/share/classes/java/awt/Dialog.java
-@@ -1636,6 +1636,8 @@
- if (localModalityType == null) {
- this.modal = fields.get("modal", false);
- setModal(modal);
-+ } else {
-+ this.modalityType = localModalityType;
- }
-
- this.resizable = fields.get("resizable", true);
diff --git a/java/openjdk6/files/icedtea/openjdk/8005615-failure_to_load_logger_implementation.patch b/java/openjdk6/files/icedtea/openjdk/8005615-failure_to_load_logger_implementation.patch
deleted file mode 100644
index c9d6607a0ba9..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/8005615-failure_to_load_logger_implementation.patch
+++ /dev/null
@@ -1,542 +0,0 @@
-# HG changeset patch
-# User coffeys
-# Date 1360107230 0
-# Node ID cff0241d217f7b463d58ddcd0add8d41de9eb280
-# Parent dabed5898de907431b524952aade46f0b6b960aa
-8005615: Java Logger fails to load tomcat logger implementation (JULI)
-Reviewed-by: mchung
-
-diff --git a/src/share/classes/java/util/logging/LogManager.java b/src/share/classes/java/util/logging/LogManager.java
---- jdk/src/share/classes/java/util/logging/LogManager.java
-+++ jdk/src/share/classes/java/util/logging/LogManager.java
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
-@@ -159,7 +159,7 @@
-
- // LoggerContext for system loggers and user loggers
- private final LoggerContext systemContext = new SystemLoggerContext();
-- private final LoggerContext userContext = new UserLoggerContext();
-+ private final LoggerContext userContext = new LoggerContext();
- private Logger rootLogger;
-
- // Have we done the primordial reading of the configuration file?
-@@ -197,13 +197,13 @@
-
- // Create and retain Logger for the root of the namespace.
- manager.rootLogger = manager.new RootLogger();
-- manager.systemContext.addLogger(manager.rootLogger);
-- manager.userContext.addLogger(manager.rootLogger);
-+ manager.addLogger(manager.rootLogger);
-+ manager.systemContext.addLocalLogger(manager.rootLogger);
-
- // Adding the global Logger. Doing so in the Logger.<clinit>
- // would deadlock with the LogManager.<clinit>.
- Logger.global.setLogManager(manager);
-- manager.systemContext.addLogger(Logger.global);
-+ manager.addLogger(Logger.global);
-
- // We don't call readConfiguration() here, as we may be running
- // very early in the JVM startup sequence. Instead readConfiguration
-@@ -329,7 +329,7 @@
-
- // Returns the LoggerContext for the user code (i.e. application or AppContext).
- // Loggers are isolated from each AppContext.
-- LoggerContext getUserContext() {
-+ private LoggerContext getUserContext() {
- LoggerContext context = null;
-
- SecurityManager sm = System.getSecurityManager();
-@@ -350,8 +350,8 @@
- if (javaAwtAccess.isMainAppContext()) {
- context = userContext;
- } else {
-- context = new UserLoggerContext();
-- context.addLogger(manager.rootLogger);
-+ context = new LoggerContext();
-+ context.addLocalLogger(manager.rootLogger);
- }
- javaAwtAccess.put(ecx, LoggerContext.class, context);
- }
-@@ -362,10 +362,6 @@
- return context;
- }
-
-- LoggerContext getSystemContext() {
-- return systemContext;
-- }
--
- private List<LoggerContext> contexts() {
- List<LoggerContext> cxs = new ArrayList<LoggerContext>();
- cxs.add(systemContext);
-@@ -373,6 +369,58 @@
- return cxs;
- }
-
-+ // Find or create a specified logger instance. If a logger has
-+ // already been created with the given name it is returned.
-+ // Otherwise a new logger instance is created and registered
-+ // in the LogManager global namespace.
-+ // This method will always return a non-null Logger object.
-+ // Synchronization is not required here. All synchronization for
-+ // adding a new Logger object is handled by addLogger().
-+ //
-+ // This method must delegate to the LogManager implementation to
-+ // add a new Logger or return the one that has been added previously
-+ // as a LogManager subclass may override the addLogger, getLogger,
-+ // readConfiguration, and other methods.
-+ Logger demandLogger(String name, String resourceBundleName) {
-+ Logger result = getLogger(name);
-+ if (result == null) {
-+ // only allocate the new logger once
-+ Logger newLogger = new Logger(name, resourceBundleName);
-+ do {
-+ if (addLogger(newLogger)) {
-+ // We successfully added the new Logger that we
-+ // created above so return it without refetching.
-+ return newLogger;
-+ }
-+
-+ // We didn't add the new Logger that we created above
-+ // because another thread added a Logger with the same
-+ // name after our null check above and before our call
-+ // to addLogger(). We have to refetch the Logger because
-+ // addLogger() returns a boolean instead of the Logger
-+ // reference itself. However, if the thread that created
-+ // the other Logger is not holding a strong reference to
-+ // the other Logger, then it is possible for the other
-+ // Logger to be GC'ed after we saw it in addLogger() and
-+ // before we can refetch it. If it has been GC'ed then
-+ // we'll just loop around and try again.
-+ result = getLogger(name);
-+ } while (result == null);
-+ }
-+ return result;
-+ }
-+
-+ Logger demandSystemLogger(String name, String resourceBundleName) {
-+ return systemContext.demandLogger(name, resourceBundleName);
-+ }
-+
-+ // LoggerContext maintains the logger namespace per context.
-+ // The default LogManager implementation has one system context and user
-+ // context. The system context is used to maintain the namespace for
-+ // all system loggers and is queried by the system code. If a system logger
-+ // doesn't exist in the user context, it'll also be added to the user context.
-+ // The user context is queried by the user code and all other loggers are
-+ // added in the user context.
- static class LoggerContext {
- // Table of named Loggers that maps names to Loggers.
-
-@@ -385,6 +433,12 @@
- this.root = new LogNode(null, this);
- }
-
-+ Logger demandLogger(String name, String resourceBundleName) {
-+ // a LogManager subclass may have its own implementation to add and
-+ // get a Logger. So delegate to the LogManager to do the work.
-+ return manager.demandLogger(name, resourceBundleName);
-+ }
-+
- synchronized Logger findLogger(String name) {
- LoggerWeakRef ref = namedLoggers.get(name);
- if (ref == null) {
-@@ -399,7 +453,9 @@
- return logger;
- }
-
-- synchronized boolean addLogger(Logger logger) {
-+ // Add a logger to this context. This method will only set its level
-+ // and process parent loggers. It doesn't set its handlers.
-+ synchronized boolean addLocalLogger(Logger logger) {
- final String name = logger.getName();
- if (name == null) {
- throw new NullPointerException();
-@@ -432,9 +488,6 @@
- doSetLevel(logger, level);
- }
-
-- // Do we have a per logger handler too?
-- // Note: this will add a 200ms penalty
-- manager.loadLoggerHandlers(logger, name, name + ".handlers");
- processParentHandlers(logger, name);
-
- // Find the new node and its parent.
-@@ -471,49 +524,21 @@
- return namedLoggers.keys();
- }
-
-- Logger demandLogger(String name) {
-- return demandLogger(name, null);
-- }
--
-- // Find or create a specified logger instance. If a logger has
-- // already been created with the given name it is returned.
-- // Otherwise a new logger instance is created and registered
-- // in the LogManager global namespace.
-- // This method will always return a non-null Logger object.
-- // Synchronization is not required here. All synchronization for
-- // adding a new Logger object is handled by addLogger().
-- Logger demandLogger(String name, String resourceBundleName) {
-- Logger result = findLogger(name);
-- if (result == null) {
-- // only allocate the new logger once
-- Logger newLogger = new Logger(name, resourceBundleName);
-- do {
-- if (addLogger(newLogger)) {
-- // We successfully added the new Logger that we
-- // created above so return it without refetching.
-- return newLogger;
-- }
--
-- // We didn't add the new Logger that we created above
-- // because another thread added a Logger with the same
-- // name after our null check above and before our call
-- // to addLogger(). We have to refetch the Logger because
-- // addLogger() returns a boolean instead of the Logger
-- // reference itself. However, if the thread that created
-- // the other Logger is not holding a strong reference to
-- // the other Logger, then it is possible for the other
-- // Logger to be GC'ed after we saw it in addLogger() and
-- // before we can refetch it. If it has been GC'ed then
-- // we'll just loop around and try again.
-- result = findLogger(name);
-- } while (result == null);
-- }
-- return result;
-- }
--
- // If logger.getUseParentHandlers() returns 'true' and any of the logger's
- // parents have levels or handlers defined, make sure they are instantiated.
-- private void processParentHandlers(Logger logger, String name) {
-+ private void processParentHandlers(final Logger logger, final String name) {
-+ AccessController.doPrivileged(new PrivilegedAction<Void>() {
-+ public Void run() {
-+ if (logger != manager.rootLogger) {
-+ boolean useParent = manager.getBooleanProperty(name + ".useParentHandlers", true);
-+ if (!useParent) {
-+ logger.setUseParentHandlers(false);
-+ }
-+ }
-+ return null;
-+ }
-+ });
-+
- int ix = 1;
- for (;;) {
- int ix2 = name.indexOf(".", ix);
-@@ -526,12 +551,12 @@
- || manager.getProperty(pname + ".handlers") != null) {
- // This pname has a level/handlers definition.
- // Make sure it exists.
-- demandLogger(pname);
-+ demandLogger(pname, null);
- }
- ix = ix2 + 1;
- }
- }
--
-+
- // Gets a node in our tree of logger nodes.
- // If necessary, create it.
- LogNode getNode(String name) {
-@@ -564,74 +589,55 @@
- }
-
- static class SystemLoggerContext extends LoggerContext {
-- // Default resource bundle for all system loggers
--
-- Logger demandLogger(String name) {
-- // default to use the system logger's resource bundle
-- return super.demandLogger(name, Logger.SYSTEM_LOGGER_RB_NAME);
-- }
-- }
--
-- static class UserLoggerContext extends LoggerContext {
--
-- /**
-- * Returns a Logger of the given name if there is one registered
-- * in this context. Otherwise, it will return the one registered
-- * in the system context if there is one. The returned Logger
-- * instance may be initialized with a different resourceBundleName.
-- * If no such logger exists, a new Logger instance will be created
-- * and registered in this context.
-- */
-+ // Add a system logger in the system context's namespace as well as
-+ // in the LogManager's namespace if not exist so that there is only
-+ // one single logger of the given name. System loggers are visible
-+ // to applications unless a logger of the same name has been added.
- Logger demandLogger(String name, String resourceBundleName) {
- Logger result = findLogger(name);
- if (result == null) {
-- // use the system logger if exists; or allocate a new logger.
-- // The system logger is added to the app logger context so that
-- // any child logger created in the app logger context can have
-- // a system logger as its parent if already exist.
-- Logger logger = manager.systemContext.findLogger(name);
-- Logger newLogger =
-- logger != null ? logger : new Logger(name, resourceBundleName);
-+ // only allocate the new system logger once
-+ Logger newLogger = new Logger(name, resourceBundleName);
- do {
-- if (addLogger(newLogger)) {
-+ if (addLocalLogger(newLogger)) {
- // We successfully added the new Logger that we
- // created above so return it without refetching.
-- return newLogger;
-+ result = newLogger;
-+ } else {
-+ // We didn't add the new Logger that we created above
-+ // because another thread added a Logger with the same
-+ // name after our null check above and before our call
-+ // to addLogger(). We have to refetch the Logger because
-+ // addLogger() returns a boolean instead of the Logger
-+ // reference itself. However, if the thread that created
-+ // the other Logger is not holding a strong reference to
-+ // the other Logger, then it is possible for the other
-+ // Logger to be GC'ed after we saw it in addLogger() and
-+ // before we can refetch it. If it has been GC'ed then
-+ // we'll just loop around and try again.
-+ result = findLogger(name);
- }
--
-- // We didn't add the new Logger that we created above
-- // because another thread added a Logger with the same
-- // name after our null check above and before our call
-- // to addLogger(). We have to refetch the Logger because
-- // addLogger() returns a boolean instead of the Logger
-- // reference itself. However, if the thread that created
-- // the other Logger is not holding a strong reference to
-- // the other Logger, then it is possible for the other
-- // Logger to be GC'ed after we saw it in addLogger() and
-- // before we can refetch it. If it has been GC'ed then
-- // we'll just loop around and try again.
-- result = findLogger(name);
- } while (result == null);
- }
-- return result;
-+ // Add the system logger to the LogManager's namespace if not exists
-+ // The LogManager will set its handlers via the LogManager.addLogger method.
-+ if (!manager.addLogger(result) && result.getHandlers().length == 0) {
-+ // if logger already exists but handlers not set
-+ final Logger l = manager.getLogger(name);
-+ final Logger logger = result;
-+ AccessController.doPrivileged(new PrivilegedAction<Void>() {
-+ public Void run() {
-+ for (Handler hdl : l.getHandlers()) {
-+ logger.addHandler(hdl);
-+ }
-+ return null;
-+ }
-+ });
-+ }
-+ return result;
- }
- }
-
-- // Package-level method.
-- // Find or create a specified logger instance. If a logger has
-- // already been created with the given name it is returned.
-- // Otherwise a new logger instance is created and registered
-- // in the LogManager global namespace.
-- synchronized Logger demandLogger(String name) {
-- Logger result = getLogger(name);
-- if (result == null) {
-- result = new Logger(name, null);
-- addLogger(result);
-- result = getLogger(name);
-- }
-- return result;
-- }
--
- // Add new per logger handlers.
- // We need to raise privilege here. All our decisions will
- // be made based on the logging configuration, which can
-@@ -640,12 +646,6 @@
- final String handlersPropertyName) {
- AccessController.doPrivileged(new PrivilegedAction<Object>() {
- public Object run() {
-- if (logger != rootLogger) {
-- boolean useParent = getBooleanProperty(name + ".useParentHandlers", true);
-- if (!useParent) {
-- logger.setUseParentHandlers(false);
-- }
-- }
-
- String names[] = parseClassNames(handlersPropertyName);
- for (int i = 0; i < names.length; i++) {
-@@ -674,10 +674,10 @@
- }
- }
- return null;
-- }});
-+ }
-+ });
- }
-
--
- // loggerRefQueue holds LoggerWeakRef objects for Logger objects
- // that have been GC'ed.
- private final ReferenceQueue<Logger> loggerRefQueue
-@@ -815,10 +815,15 @@
- if (name == null) {
- throw new NullPointerException();
- }
-- if (systemContext.findLogger(name) != null) {
-+ LoggerContext cx = getUserContext();
-+ if (cx.addLocalLogger(logger)) {
-+ // Do we have a per logger handler too?
-+ // Note: this will add a 200ms penalty
-+ loadLoggerHandlers(logger, name, name + ".handlers");
-+ return true;
-+ } else {
- return false;
- }
-- return getUserContext().addLogger(logger);
- }
-
- // Private method to set a level on a logger.
-@@ -839,8 +844,6 @@
- }});
- }
-
--
--
- // Private method to set a parent on a logger.
- // If necessary, we raise privilege before doing the setParent call.
- private static void doSetParent(final Logger logger, final Logger parent) {
-@@ -875,15 +878,7 @@
- * @return matching logger or null if none is found
- */
- public Logger getLogger(String name) {
-- // return the first logger added
-- //
-- // once a system logger is added in the system context, no one can
-- // adds a logger with the same name in the global context
-- // (see LogManager.addLogger). So if there is a logger in the global
-- // context with the same name as one in the system context, it must be
-- // added before the system logger was created.
-- Logger logger = getUserContext().findLogger(name);
-- return logger != null ? logger : systemContext.findLogger(name);
-+ return getUserContext().findLogger(name);
- }
-
- /**
-@@ -903,11 +898,7 @@
- * @return enumeration of logger name strings
- */
- public Enumeration<String> getLoggerNames() {
-- // only return unique names
-- Set<String> names =
-- new HashSet<String>(Collections.list(systemContext.getLoggerNames()));
-- names.addAll(Collections.list(getUserContext().getLoggerNames()));
-- return Collections.enumeration(names);
-+ return getUserContext().getLoggerNames();
- }
-
- /**
-@@ -1229,7 +1220,6 @@
- loadLoggerHandlers(rootLogger, null, "handlers");
- }
-
--
- private final Permission controlPermission = new LoggingPermission("control", null);
-
- void checkPermission() {
-@@ -1288,7 +1278,6 @@
- // that we only instantiate the global handlers when they
- // are first needed.
- private class RootLogger extends Logger {
--
- private RootLogger() {
- super("", null);
- setLevel(defaultLevel);
-diff --git a/src/share/classes/java/util/logging/Logger.java b/src/share/classes/java/util/logging/Logger.java
---- jdk/src/share/classes/java/util/logging/Logger.java
-+++ jdk/src/share/classes/java/util/logging/Logger.java
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
-@@ -29,7 +29,6 @@
- import java.util.*;
- import java.security.*;
- import java.lang.ref.WeakReference;
--import java.util.logging.LogManager.LoggerContext;
-
- /**
- * A Logger object is used to log messages for a specific
-@@ -283,18 +282,32 @@
- //
- // As an interim solution, if the immediate caller whose caller loader is
- // null, we assume it's a system logger and add it to the system context.
-- private static LoggerContext getLoggerContext() {
-+ // These system loggers only set the resource bundle to the given
-+ // resource bundle name (rather than the default system resource bundle).
-+ private static class SystemLoggerHelper {
-+ static boolean disableCallerCheck = getBooleanProperty("sun.util.logging.disableCallerCheck");
-+ private static boolean getBooleanProperty(final String key) {
-+ String s = AccessController.doPrivileged(new PrivilegedAction<String>() {
-+ public String run() {
-+ return System.getProperty(key);
-+ }
-+ });
-+ return Boolean.valueOf(s);
-+ }
-+ }
-+
-+ private static Logger demandLogger(String name, String resourceBundleName) {
- LogManager manager = LogManager.getLogManager();
- SecurityManager sm = System.getSecurityManager();
-- if (sm != null) {
-+ if (sm != null && !SystemLoggerHelper.disableCallerCheck) {
- // 0: Reflection 1: Logger.getLoggerContext 2: Logger.getLogger 3: caller
- final int SKIP_FRAMES = 3;
- Class<?> caller = sun.reflect.Reflection.getCallerClass(SKIP_FRAMES);
- if (caller.getClassLoader() == null) {
-- return manager.getSystemContext();
-+ return manager.demandSystemLogger(name, resourceBundleName);
- }
- }
-- return manager.getUserContext();
-+ return manager.demandLogger(name, resourceBundleName);
- }
-
- /**
-@@ -325,8 +338,7 @@
- * @throws NullPointerException if the name is null.
- */
- public static synchronized Logger getLogger(String name) {
-- LoggerContext context = getLoggerContext();
-- return context.demandLogger(name);
-+ return demandLogger(name, null);
- }
-
- /**
-@@ -369,8 +381,7 @@
- * @throws NullPointerException if the name is null.
- */
- public static synchronized Logger getLogger(String name, String resourceBundleName) {
-- LoggerContext context = getLoggerContext();
-- Logger result = context.demandLogger(name, resourceBundleName);
-+ Logger result = demandLogger(name, resourceBundleName);
- if (result.resourceBundleName == null) {
- // Note: we may get a MissingResourceException here.
- result.setupResourceInfo(resourceBundleName);
-@@ -1300,7 +1311,8 @@
- public ResourceBundle run() {
- try {
- return ResourceBundle.getBundle(SYSTEM_LOGGER_RB_NAME,
-- locale);
-+ locale,
-+ ClassLoader.getSystemClassLoader());
- } catch (MissingResourceException e) {
- throw new InternalError(e.toString());
- }
diff --git a/java/openjdk6/files/icedtea/openjdk/8007393.patch b/java/openjdk6/files/icedtea/openjdk/8007393.patch
deleted file mode 100644
index 632fe1b1cf9a..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/8007393.patch
+++ /dev/null
@@ -1,78 +0,0 @@
-
-# HG changeset patch
-# User coffeys
-# Date 1360860659 0
-# Node ID 828b93329939ec20530ed98f42b2966b2ea53048
-# Parent cff0241d217f7b463d58ddcd0add8d41de9eb280
-8007393: Possible race condition after JDK-6664509
-Reviewed-by: mchung
-
---- jdk/src/share/classes/java/util/logging/LogManager.java Tue Feb 05 23:33:50 2013 +0000
-+++ jdk/src/share/classes/java/util/logging/LogManager.java Thu Feb 14 16:50:59 2013 +0000
-@@ -411,7 +411,40 @@ public class LogManager {
- }
-
- Logger demandSystemLogger(String name, String resourceBundleName) {
-- return systemContext.demandLogger(name, resourceBundleName);
-+ // Add a system logger in the system context's namespace
-+ final Logger sysLogger = systemContext.demandLogger(name, resourceBundleName);
-+
-+ // Add the system logger to the LogManager's namespace if not exist
-+ // so that there is only one single logger of the given name.
-+ // System loggers are visible to applications unless a logger of
-+ // the same name has been added.
-+ Logger logger;
-+ do {
-+ // First attempt to call addLogger instead of getLogger
-+ // This would avoid potential bug in custom LogManager.getLogger
-+ // implementation that adds a logger if not exists
-+ if (addLogger(sysLogger)) {
-+ // successfully added the new system logger
-+ logger = sysLogger;
-+ } else {
-+ logger = getLogger(name);
-+ }
-+ } while (logger == null);
-+
-+ // LogManager will set the sysLogger's handlers via LogManager.addLogger method.
-+ if (logger != sysLogger && sysLogger.getHandlers().length == 0) {
-+ // if logger already exists but handlers not set
-+ final Logger l = logger;
-+ AccessController.doPrivileged(new PrivilegedAction<Void>() {
-+ public Void run() {
-+ for (Handler hdl : l.getHandlers()) {
-+ sysLogger.addHandler(hdl);
-+ }
-+ return null;
-+ }
-+ });
-+ }
-+ return sysLogger;
- }
-
- // LoggerContext maintains the logger namespace per context.
-@@ -619,22 +652,7 @@ public class LogManager {
- }
- } while (result == null);
- }
-- // Add the system logger to the LogManager's namespace if not exists
-- // The LogManager will set its handlers via the LogManager.addLogger method.
-- if (!manager.addLogger(result) && result.getHandlers().length == 0) {
-- // if logger already exists but handlers not set
-- final Logger l = manager.getLogger(name);
-- final Logger logger = result;
-- AccessController.doPrivileged(new PrivilegedAction<Void>() {
-- public Void run() {
-- for (Handler hdl : l.getHandlers()) {
-- logger.addHandler(hdl);
-- }
-- return null;
-- }
-- });
-- }
-- return result;
-+ return result;
- }
- }
-
-
diff --git a/java/openjdk6/files/icedtea/openjdk/8007611.patch b/java/openjdk6/files/icedtea/openjdk/8007611.patch
deleted file mode 100644
index e67b9c75b499..000000000000
--- a/java/openjdk6/files/icedtea/openjdk/8007611.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-
-# HG changeset patch
-# User coffeys
-# Date 1360861865 0
-# Node ID 25e83b78298b71abb46eb5a337ed7bddef418ca4
-# Parent 828b93329939ec20530ed98f42b2966b2ea53048
-8007611: logging behavior in applet changed
-Reviewed-by: mchung
-
---- jdk/src/share/classes/java/util/logging/LogManager.java Thu Feb 14 16:50:59 2013 +0000
-+++ jdk/src/share/classes/java/util/logging/LogManager.java Thu Feb 14 17:11:05 2013 +0000
-@@ -351,7 +351,10 @@ public class LogManager {
- context = userContext;
- } else {
- context = new LoggerContext();
-- context.addLocalLogger(manager.rootLogger);
-+ // during initialization, rootLogger is null when
-+ // instantiating itself RootLogger
-+ if (manager.rootLogger != null)
-+ context.addLocalLogger(manager.rootLogger);
- }
- javaAwtAccess.put(ecx, LoggerContext.class, context);
- }
-