--- a/jdk/make/docs/CORE_PKGS.gmk Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/make/docs/CORE_PKGS.gmk Tue Apr 21 21:26:21 2009 -0700
@@ -233,6 +233,7 @@
javax.xml.ws.http \
javax.xml.ws.soap \
javax.xml.ws.spi \
+ javax.xml.ws.wsaddressing \
javax.xml.transform \
javax.xml.transform.sax \
javax.xml.transform.dom \
--- a/jdk/make/java/zip/FILES_c.gmk Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/make/java/zip/FILES_c.gmk Tue Apr 21 21:26:21 2009 -0700
@@ -29,7 +29,6 @@
Deflater.c \
Inflater.c \
ZipFile.c \
- ZipEntry.c \
zadler32.c \
zcrc32.c \
deflate.c \
--- a/jdk/make/java/zip/mapfile-vers Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/make/java/zip/mapfile-vers Tue Apr 21 21:26:21 2009 -0700
@@ -50,15 +50,17 @@
Java_java_util_zip_Inflater_initIDs;
Java_java_util_zip_Inflater_reset;
Java_java_util_zip_Inflater_setDictionary;
- Java_java_util_zip_ZipEntry_initFields;
- Java_java_util_zip_ZipEntry_initIDs;
Java_java_util_zip_ZipFile_close;
Java_java_util_zip_ZipFile_freeEntry;
- Java_java_util_zip_ZipFile_getCSize;
Java_java_util_zip_ZipFile_getEntry;
- Java_java_util_zip_ZipFile_getMethod;
+ Java_java_util_zip_ZipFile_getEntryBytes;
+ Java_java_util_zip_ZipFile_getEntryCrc;
+ Java_java_util_zip_ZipFile_getEntryCSize;
+ Java_java_util_zip_ZipFile_getEntryFlag;
+ Java_java_util_zip_ZipFile_getEntryMethod;
+ Java_java_util_zip_ZipFile_getEntrySize;
+ Java_java_util_zip_ZipFile_getEntryTime;
Java_java_util_zip_ZipFile_getNextEntry;
- Java_java_util_zip_ZipFile_getSize;
Java_java_util_zip_ZipFile_getZipMessage;
Java_java_util_zip_ZipFile_getTotal;
Java_java_util_zip_ZipFile_initIDs;
--- a/jdk/make/java/zip/reorder-i586 Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/make/java/zip/reorder-i586 Tue Apr 21 21:26:21 2009 -0700
@@ -20,12 +20,14 @@
text: .text%Java_java_util_zip_ZipFile_open;
text: .text%Java_java_util_zip_ZipFile_getTotal;
text: .text%Java_java_util_zip_ZipFile_getEntry;
-text: .text%Java_java_util_zip_ZipEntry_initIDs;
-text: .text%Java_java_util_zip_ZipEntry_initFields;
text: .text%Java_java_util_zip_ZipFile_freeEntry;
-text: .text%Java_java_util_zip_ZipFile_getCSize;
-text: .text%Java_java_util_zip_ZipFile_getSize;
-text: .text%Java_java_util_zip_ZipFile_getMethod;
+text: .text%Java_java_util_zip_ZipFile_getEntryTime;
+text: .text%Java_java_util_zip_ZipFile_getEntryCrc;
+text: .text%Java_java_util_zip_ZipFile_getEntryCSize;
+text: .text%Java_java_util_zip_ZipFile_getEntrySize;
+text: .text%Java_java_util_zip_ZipFile_getEntryFlag;
+text: .text%Java_java_util_zip_ZipFile_getEntryMethod;
+text: .text%Java_java_util_zip_ZipFile_getEntryBytes;
text: .text%Java_java_util_zip_Inflater_initIDs;
text: .text%Java_java_util_zip_Inflater_init;
text: .text%inflateInit2_;
--- a/jdk/make/java/zip/reorder-sparc Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/make/java/zip/reorder-sparc Tue Apr 21 21:26:21 2009 -0700
@@ -19,12 +19,14 @@
text: .text%Java_java_util_zip_ZipFile_open;
text: .text%Java_java_util_zip_ZipFile_getTotal;
text: .text%Java_java_util_zip_ZipFile_getEntry;
-text: .text%Java_java_util_zip_ZipEntry_initIDs;
-text: .text%Java_java_util_zip_ZipEntry_initFields;
text: .text%Java_java_util_zip_ZipFile_freeEntry;
-text: .text%Java_java_util_zip_ZipFile_getCSize;
-text: .text%Java_java_util_zip_ZipFile_getSize;
-text: .text%Java_java_util_zip_ZipFile_getMethod;
+text: .text%Java_java_util_zip_ZipFile_getEntryTime;
+text: .text%Java_java_util_zip_ZipFile_getEntryCrc;
+text: .text%Java_java_util_zip_ZipFile_getEntryCSize;
+text: .text%Java_java_util_zip_ZipFile_getEntrySize;
+text: .text%Java_java_util_zip_ZipFile_getEntryFlag;
+text: .text%Java_java_util_zip_ZipFile_getEntryMethod;
+text: .text%Java_java_util_zip_ZipFile_getEntryBytes;
text: .text%Java_java_util_zip_Inflater_initIDs;
text: .text%Java_java_util_zip_Inflater_init;
text: .text%inflateInit2_;
--- a/jdk/make/java/zip/reorder-sparcv9 Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/make/java/zip/reorder-sparcv9 Tue Apr 21 21:26:21 2009 -0700
@@ -20,12 +20,14 @@
text: .text%Java_java_util_zip_ZipFile_open;
text: .text%Java_java_util_zip_ZipFile_getTotal;
text: .text%Java_java_util_zip_ZipFile_getEntry;
-text: .text%Java_java_util_zip_ZipEntry_initIDs;
-text: .text%Java_java_util_zip_ZipEntry_initFields;
text: .text%Java_java_util_zip_ZipFile_freeEntry;
-text: .text%Java_java_util_zip_ZipFile_getCSize;
-text: .text%Java_java_util_zip_ZipFile_getSize;
-text: .text%Java_java_util_zip_ZipFile_getMethod;
+text: .text%Java_java_util_zip_ZipFile_getEntryTime;
+text: .text%Java_java_util_zip_ZipFile_getEntryCrc;
+text: .text%Java_java_util_zip_ZipFile_getEntryCSize;
+text: .text%Java_java_util_zip_ZipFile_getEntrySize;
+text: .text%Java_java_util_zip_ZipFile_getEntryFlag;
+text: .text%Java_java_util_zip_ZipFile_getEntryMethod;
+text: .text%Java_java_util_zip_ZipFile_getEntryBytes;
text: .text%Java_java_util_zip_Inflater_initIDs;
text: .text%Java_java_util_zip_Inflater_init;
text: .text%inflateInit2_;
--- a/jdk/src/share/bin/emessages.h Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/bin/emessages.h Tue Apr 21 21:26:21 2009 -0700
@@ -50,6 +50,12 @@
#define JAR_ERROR2 "Error: Unable to access jarfile %s"
#define JAR_ERROR3 "Error: Invalid or corrupt jarfile %s"
+#define CLS_ERROR1 "Error: Could not find the main class %s.\n" JNI_ERROR
+#define CLS_ERROR2 "Error: Failed to load Main Class: %s\n%s"
+#define CLS_ERROR3 "Error: No main method found in specified class.\n" GEN_ERROR
+#define CLS_ERROR4 "Error: Main method not public\n" GEN_ERROR
+#define CLS_ERROR5 "Error: main-class: attribute exceeds system limits of %d bytes\n" GEN_ERROR
+
#define CFG_WARN1 "Warning: %s VM not supported; %s VM will be used"
#define CFG_WARN2 "Warning: No leading - on line %d of `%s'"
#define CFG_WARN3 "Warning: Missing VM type on line %d of `%s'"
--- a/jdk/src/share/bin/java.c Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/bin/java.c Tue Apr 21 21:26:21 2009 -0700
@@ -915,8 +915,14 @@
* to avoid locating, expanding and parsing the manifest extra
* times.
*/
- if (info.main_class != NULL)
- (void)JLI_StrCat(env_entry, info.main_class);
+ if (info.main_class != NULL) {
+ if (JLI_StrLen(info.main_class) <= MAXNAMELEN) {
+ (void)JLI_StrCat(env_entry, info.main_class);
+ } else {
+ JLI_ReportErrorMessage(CLS_ERROR5, MAXNAMELEN);
+ exit(1);
+ }
+ }
(void)putenv(env_entry);
ExecJRE(jre, new_argv);
JLI_FreeManifest();
--- a/jdk/src/share/classes/com/sun/jmx/remote/internal/ClientNotifForwarder.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/com/sun/jmx/remote/internal/ClientNotifForwarder.java Tue Apr 21 21:26:21 2009 -0700
@@ -22,7 +22,6 @@
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
-
package com.sun.jmx.remote.internal;
import java.io.IOException;
@@ -34,6 +33,7 @@
import java.util.Map;
import java.util.concurrent.Executor;
+import java.security.AccessControlContext;
import java.security.AccessController;
import java.security.PrivilegedAction;
import javax.security.auth.Subject;
@@ -54,7 +54,10 @@
public abstract class ClientNotifForwarder {
- public ClientNotifForwarder(Map<String, ?> env) {
+
+ private final AccessControlContext acc;
+
+ public ClientNotifForwarder(Map env) {
this(null, env);
}
@@ -87,6 +90,8 @@
this.command = command;
if (thread == null) {
thread = new Thread() {
+
+ @Override
public void run() {
while (true) {
Runnable r;
@@ -130,6 +135,7 @@
this.defaultClassLoader = defaultClassLoader;
this.executor = ex;
+ this.acc = AccessController.getContext();
}
/**
@@ -380,28 +386,85 @@
setState(TERMINATED);
}
-// -------------------------------------------------
-// private classes
-// -------------------------------------------------
+
+ // -------------------------------------------------
+ // private classes
+ // -------------------------------------------------
//
+
private class NotifFetcher implements Runnable {
+
+ private volatile boolean alreadyLogged = false;
+
+ private void logOnce(String msg, SecurityException x) {
+ if (alreadyLogged) return;
+ // Log only once.
+ logger.config("setContextClassLoader",msg);
+ if (x != null) logger.fine("setContextClassLoader", x);
+ alreadyLogged = true;
+ }
+
+ // Set new context class loader, returns previous one.
+ private final ClassLoader setContextClassLoader(final ClassLoader loader) {
+ final AccessControlContext ctxt = ClientNotifForwarder.this.acc;
+ // if ctxt is null, log a config message and throw a
+ // SecurityException.
+ if (ctxt == null) {
+ logOnce("AccessControlContext must not be null.",null);
+ throw new SecurityException("AccessControlContext must not be null");
+ }
+ return AccessController.doPrivileged(
+ new PrivilegedAction<ClassLoader>() {
+ public ClassLoader run() {
+ try {
+ // get context class loader - may throw
+ // SecurityException - though unlikely.
+ final ClassLoader previous =
+ Thread.currentThread().getContextClassLoader();
+
+ // if nothing needs to be done, break here...
+ if (loader == previous) return previous;
+
+ // reset context class loader - may throw
+ // SecurityException
+ Thread.currentThread().setContextClassLoader(loader);
+ return previous;
+ } catch (SecurityException x) {
+ logOnce("Permission to set ContextClassLoader missing. " +
+ "Notifications will not be dispatched. " +
+ "Please check your Java policy configuration: " +
+ x, x);
+ throw x;
+ }
+ }
+ }, ctxt);
+ }
+
public void run() {
+ final ClassLoader previous;
+ if (defaultClassLoader != null) {
+ previous = setContextClassLoader(defaultClassLoader);
+ } else {
+ previous = null;
+ }
+ try {
+ doRun();
+ } finally {
+ if (defaultClassLoader != null) {
+ setContextClassLoader(previous);
+ }
+ }
+ }
+
+ private void doRun() {
synchronized (ClientNotifForwarder.this) {
currentFetchThread = Thread.currentThread();
- if (state == STARTING)
+ if (state == STARTING) {
setState(STARTED);
+ }
}
- if (defaultClassLoader != null) {
- AccessController.doPrivileged(new PrivilegedAction<Void>() {
- public Void run() {
- Thread.currentThread().
- setContextClassLoader(defaultClassLoader);
- return null;
- }
- });
- }
NotificationResult nr = null;
if (!shouldStop() && (nr = fetchNotifs()) != null) {
@@ -434,8 +497,9 @@
// check if an mbean unregistration notif
if (!listenerID.equals(mbeanRemovedNotifID)) {
final ClientListenerInfo li = infoList.get(listenerID);
- if (li != null)
- listeners.put(listenerID,li);
+ if (li != null) {
+ listeners.put(listenerID, li);
+ }
continue;
}
final Notification notif = tn.getNotification();
@@ -799,9 +863,7 @@
private long clientSequenceNumber = -1;
private final int maxNotifications;
private final long timeout;
-
private Integer mbeanRemovedNotifID = null;
-
private Thread currentFetchThread;
// state
--- a/jdk/src/share/classes/com/sun/jmx/remote/security/MBeanServerAccessController.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/com/sun/jmx/remote/security/MBeanServerAccessController.java Tue Apr 21 21:26:21 2009 -0700
@@ -111,6 +111,22 @@
*/
protected abstract void checkWrite();
+ /**
+ * Check if the caller can create the named class. The default
+ * implementation of this method calls {@link #checkWrite()}.
+ */
+ protected void checkCreate(String className) {
+ checkWrite();
+ }
+
+ /**
+ * Check if the caller can unregister the named MBean. The default
+ * implementation of this method calls {@link #checkWrite()}.
+ */
+ protected void checkUnregister(ObjectName name) {
+ checkWrite();
+ }
+
//--------------------------------------------
//--------------------------------------------
//
@@ -148,7 +164,7 @@
}
/**
- * Call <code>checkWrite()</code>, then forward this method to the
+ * Call <code>checkCreate(className)</code>, then forward this method to the
* wrapped object.
*/
public ObjectInstance createMBean(String className, ObjectName name)
@@ -158,7 +174,7 @@
MBeanRegistrationException,
MBeanException,
NotCompliantMBeanException {
- checkWrite();
+ checkCreate(className);
SecurityManager sm = System.getSecurityManager();
if (sm == null) {
Object object = getMBeanServer().instantiate(className);
@@ -170,7 +186,7 @@
}
/**
- * Call <code>checkWrite()</code>, then forward this method to the
+ * Call <code>checkCreate(className)</code>, then forward this method to the
* wrapped object.
*/
public ObjectInstance createMBean(String className, ObjectName name,
@@ -181,7 +197,7 @@
MBeanRegistrationException,
MBeanException,
NotCompliantMBeanException {
- checkWrite();
+ checkCreate(className);
SecurityManager sm = System.getSecurityManager();
if (sm == null) {
Object object = getMBeanServer().instantiate(className,
@@ -196,7 +212,7 @@
}
/**
- * Call <code>checkWrite()</code>, then forward this method to the
+ * Call <code>checkCreate(className)</code>, then forward this method to the
* wrapped object.
*/
public ObjectInstance createMBean(String className,
@@ -209,7 +225,7 @@
MBeanException,
NotCompliantMBeanException,
InstanceNotFoundException {
- checkWrite();
+ checkCreate(className);
SecurityManager sm = System.getSecurityManager();
if (sm == null) {
Object object = getMBeanServer().instantiate(className,
@@ -222,7 +238,7 @@
}
/**
- * Call <code>checkWrite()</code>, then forward this method to the
+ * Call <code>checkCreate(className)</code>, then forward this method to the
* wrapped object.
*/
public ObjectInstance createMBean(String className,
@@ -237,7 +253,7 @@
MBeanException,
NotCompliantMBeanException,
InstanceNotFoundException {
- checkWrite();
+ checkCreate(className);
SecurityManager sm = System.getSecurityManager();
if (sm == null) {
Object object = getMBeanServer().instantiate(className,
@@ -394,45 +410,45 @@
}
/**
- * Call <code>checkWrite()</code>, then forward this method to the
+ * Call <code>checkCreate(className)</code>, then forward this method to the
* wrapped object.
*/
public Object instantiate(String className)
throws ReflectionException, MBeanException {
- checkWrite();
+ checkCreate(className);
return getMBeanServer().instantiate(className);
}
/**
- * Call <code>checkWrite()</code>, then forward this method to the
+ * Call <code>checkCreate(className)</code>, then forward this method to the
* wrapped object.
*/
public Object instantiate(String className,
Object params[],
String signature[])
throws ReflectionException, MBeanException {
- checkWrite();
+ checkCreate(className);
return getMBeanServer().instantiate(className, params, signature);
}
/**
- * Call <code>checkWrite()</code>, then forward this method to the
+ * Call <code>checkCreate(className)</code>, then forward this method to the
* wrapped object.
*/
public Object instantiate(String className, ObjectName loaderName)
throws ReflectionException, MBeanException, InstanceNotFoundException {
- checkWrite();
+ checkCreate(className);
return getMBeanServer().instantiate(className, loaderName);
}
/**
- * Call <code>checkWrite()</code>, then forward this method to the
+ * Call <code>checkCreate(className)</code>, then forward this method to the
* wrapped object.
*/
public Object instantiate(String className, ObjectName loaderName,
Object params[], String signature[])
throws ReflectionException, MBeanException, InstanceNotFoundException {
- checkWrite();
+ checkCreate(className);
return getMBeanServer().instantiate(className, loaderName,
params, signature);
}
@@ -579,12 +595,12 @@
}
/**
- * Call <code>checkWrite()</code>, then forward this method to the
+ * Call <code>checkUnregister()</code>, then forward this method to the
* wrapped object.
*/
public void unregisterMBean(ObjectName name)
throws InstanceNotFoundException, MBeanRegistrationException {
- checkWrite();
+ checkUnregister(name);
getMBeanServer().unregisterMBean(name);
}
--- a/jdk/src/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java Tue Apr 21 21:26:21 2009 -0700
@@ -31,11 +31,17 @@
import java.security.AccessController;
import java.security.Principal;
import java.security.PrivilegedAction;
-import java.util.Collection;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
import java.util.Properties;
import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.regex.Pattern;
import javax.management.MBeanServer;
+import javax.management.ObjectName;
import javax.security.auth.Subject;
/**
@@ -46,7 +52,8 @@
* not allowed; in this case the request is not forwarded to the
* wrapped object.</p>
*
- * <p>This class implements the {@link #checkRead()} and {@link #checkWrite()}
+ * <p>This class implements the {@link #checkRead()}, {@link #checkWrite()},
+ * {@link #checkCreate(String)}, and {@link #checkUnregister(ObjectName)}
* methods based on an access level properties file containing username/access
* level pairs. The set of username/access level pairs is passed either as a
* filename which denotes a properties file on disk, or directly as an instance
@@ -56,14 +63,50 @@
* has exactly one access level. The same access level can be shared by several
* usernames.</p>
*
- * <p>The supported access level values are <i>readonly</i> and
- * <i>readwrite</i>.</p>
+ * <p>The supported access level values are {@code readonly} and
+ * {@code readwrite}. The {@code readwrite} access level can be
+ * qualified by one or more <i>clauses</i>, where each clause looks
+ * like <code>create <i>classNamePattern</i></code> or {@code
+ * unregister}. For example:</p>
+ *
+ * <pre>
+ * monitorRole readonly
+ * controlRole readwrite \
+ * create javax.management.timer.*,javax.management.monitor.* \
+ * unregister
+ * </pre>
+ *
+ * <p>(The continuation lines with {@code \} come from the parser for
+ * Properties files.)</p>
*/
public class MBeanServerFileAccessController
extends MBeanServerAccessController {
- public static final String READONLY = "readonly";
- public static final String READWRITE = "readwrite";
+ static final String READONLY = "readonly";
+ static final String READWRITE = "readwrite";
+
+ static final String CREATE = "create";
+ static final String UNREGISTER = "unregister";
+
+ private enum AccessType {READ, WRITE, CREATE, UNREGISTER};
+
+ private static class Access {
+ final boolean write;
+ final String[] createPatterns;
+ private boolean unregister;
+
+ Access(boolean write, boolean unregister, List<String> createPatternList) {
+ this.write = write;
+ int npats = (createPatternList == null) ? 0 : createPatternList.size();
+ if (npats == 0)
+ this.createPatterns = NO_STRINGS;
+ else
+ this.createPatterns = createPatternList.toArray(new String[npats]);
+ this.unregister = unregister;
+ }
+
+ private final String[] NO_STRINGS = new String[0];
+ }
/**
* <p>Create a new MBeanServerAccessController that forwards all the
@@ -87,8 +130,8 @@
throws IOException {
super();
this.accessFileName = accessFileName;
- props = propertiesFromFile(accessFileName);
- checkValues(props);
+ Properties props = propertiesFromFile(accessFileName);
+ parseProperties(props);
}
/**
@@ -123,14 +166,14 @@
* #setMBeanServer} method after doing access checks based on read and
* write permissions.</p>
*
- * <p>This instance is initialized from the specified properties instance.
- * This constructor makes a copy of the properties instance using its
- * <code>clone</code> method and it is the copy that is consulted to check
- * the username and access level of an incoming connection. The original
- * properties object can be modified without affecting the copy. If the
- * {@link #refresh} method is then called, the
- * <code>MBeanServerFileAccessController</code> will make a new copy of the
- * properties object at that time.</p>
+ * <p>This instance is initialized from the specified properties
+ * instance. This constructor makes a copy of the properties
+ * instance and it is the copy that is consulted to check the
+ * username and access level of an incoming connection. The
+ * original properties object can be modified without affecting
+ * the copy. If the {@link #refresh} method is then called, the
+ * <code>MBeanServerFileAccessController</code> will make a new
+ * copy of the properties object at that time.</p>
*
* @param accessFileProps properties list containing the username/access
* level entries.
@@ -145,8 +188,7 @@
if (accessFileProps == null)
throw new IllegalArgumentException("Null properties");
originalProps = accessFileProps;
- props = (Properties) accessFileProps.clone();
- checkValues(props);
+ parseProperties(accessFileProps);
}
/**
@@ -155,14 +197,14 @@
* #setMBeanServer} method after doing access checks based on read and
* write permissions.</p>
*
- * <p>This instance is initialized from the specified properties instance.
- * This constructor makes a copy of the properties instance using its
- * <code>clone</code> method and it is the copy that is consulted to check
- * the username and access level of an incoming connection. The original
- * properties object can be modified without affecting the copy. If the
- * {@link #refresh} method is then called, the
- * <code>MBeanServerFileAccessController</code> will make a new copy of the
- * properties object at that time.</p>
+ * <p>This instance is initialized from the specified properties
+ * instance. This constructor makes a copy of the properties
+ * instance and it is the copy that is consulted to check the
+ * username and access level of an incoming connection. The
+ * original properties object can be modified without affecting
+ * the copy. If the {@link #refresh} method is then called, the
+ * <code>MBeanServerFileAccessController</code> will make a new
+ * copy of the properties object at that time.</p>
*
* @param accessFileProps properties list containing the username/access
* level entries.
@@ -184,16 +226,36 @@
* Check if the caller can do read operations. This method does
* nothing if so, otherwise throws SecurityException.
*/
+ @Override
public void checkRead() {
- checkAccessLevel(READONLY);
+ checkAccess(AccessType.READ, null);
}
/**
* Check if the caller can do write operations. This method does
* nothing if so, otherwise throws SecurityException.
*/
+ @Override
public void checkWrite() {
- checkAccessLevel(READWRITE);
+ checkAccess(AccessType.WRITE, null);
+ }
+
+ /**
+ * Check if the caller can create MBeans or instances of the given class.
+ * This method does nothing if so, otherwise throws SecurityException.
+ */
+ @Override
+ public void checkCreate(String className) {
+ checkAccess(AccessType.CREATE, className);
+ }
+
+ /**
+ * Check if the caller can do unregister operations. This method does
+ * nothing if so, otherwise throws SecurityException.
+ */
+ @Override
+ public void checkUnregister(ObjectName name) {
+ checkAccess(AccessType.UNREGISTER, null);
}
/**
@@ -218,14 +280,13 @@
* @exception IllegalArgumentException if any of the supplied access
* level values differs from "readonly" or "readwrite".
*/
- public void refresh() throws IOException {
- synchronized (props) {
- if (accessFileName == null)
- props = (Properties) originalProps.clone();
- else
- props = propertiesFromFile(accessFileName);
- checkValues(props);
- }
+ public synchronized void refresh() throws IOException {
+ Properties props;
+ if (accessFileName == null)
+ props = (Properties) originalProps;
+ else
+ props = propertiesFromFile(accessFileName);
+ parseProperties(props);
}
private static Properties propertiesFromFile(String fname)
@@ -240,7 +301,7 @@
}
}
- private void checkAccessLevel(String accessLevel) {
+ private synchronized void checkAccess(AccessType requiredAccess, String arg) {
final AccessControlContext acc = AccessController.getContext();
final Subject s =
AccessController.doPrivileged(new PrivilegedAction<Subject>() {
@@ -249,39 +310,235 @@
}
});
if (s == null) return; /* security has not been enabled */
- final Set<Principal> principals = s.getPrincipals();
- for (Principal p : principals) {
- String grantedAccessLevel;
- synchronized (props) {
- grantedAccessLevel = props.getProperty(p.getName());
- }
- if (grantedAccessLevel != null) {
- if (accessLevel.equals(READONLY) &&
- (grantedAccessLevel.equals(READONLY) ||
- grantedAccessLevel.equals(READWRITE)))
- return;
- if (accessLevel.equals(READWRITE) &&
- grantedAccessLevel.equals(READWRITE))
+ final Set principals = s.getPrincipals();
+ String newPropertyValue = null;
+ for (Iterator i = principals.iterator(); i.hasNext(); ) {
+ final Principal p = (Principal) i.next();
+ Access access = accessMap.get(p.getName());
+ if (access != null) {
+ boolean ok;
+ switch (requiredAccess) {
+ case READ:
+ ok = true; // all access entries imply read
+ break;
+ case WRITE:
+ ok = access.write;
+ break;
+ case UNREGISTER:
+ ok = access.unregister;
+ if (!ok && access.write)
+ newPropertyValue = "unregister";
+ break;
+ case CREATE:
+ ok = checkCreateAccess(access, arg);
+ if (!ok && access.write)
+ newPropertyValue = "create " + arg;
+ break;
+ default:
+ throw new AssertionError();
+ }
+ if (ok)
return;
}
}
- throw new SecurityException("Access denied! Invalid access level for " +
- "requested MBeanServer operation.");
+ SecurityException se = new SecurityException("Access denied! Invalid " +
+ "access level for requested MBeanServer operation.");
+ // Add some more information to help people with deployments that
+ // worked before we required explicit create clauses. We're not giving
+ // any information to the bad guys, other than that the access control
+ // is based on a file, which they could have worked out from the stack
+ // trace anyway.
+ if (newPropertyValue != null) {
+ SecurityException se2 = new SecurityException("Access property " +
+ "for this identity should be similar to: " + READWRITE +
+ " " + newPropertyValue);
+ se.initCause(se2);
+ }
+ throw se;
+ }
+
+ private static boolean checkCreateAccess(Access access, String className) {
+ for (String classNamePattern : access.createPatterns) {
+ if (classNameMatch(classNamePattern, className))
+ return true;
+ }
+ return false;
}
- private void checkValues(Properties props) {
- Collection<?> c = props.values();
- for (Iterator<?> i = c.iterator(); i.hasNext(); ) {
- final String accessLevel = (String) i.next();
- if (!accessLevel.equals(READONLY) &&
- !accessLevel.equals(READWRITE)) {
- throw new IllegalArgumentException(
- "Syntax error in access level entry [" + accessLevel + "]");
- }
+ private static boolean classNameMatch(String pattern, String className) {
+ // We studiously avoided regexes when parsing the properties file,
+ // because that is done whenever the VM is started with the
+ // appropriate -Dcom.sun.management options, even if nobody ever
+ // creates an MBean. We don't want to incur the overhead of loading
+ // all the regex code whenever those options are specified, but if we
+ // get as far as here then the VM is already running and somebody is
+ // doing the very unusual operation of remotely creating an MBean.
+ // Because that operation is so unusual, we don't try to optimize
+ // by hand-matching or by caching compiled Pattern objects.
+ StringBuilder sb = new StringBuilder();
+ StringTokenizer stok = new StringTokenizer(pattern, "*", true);
+ while (stok.hasMoreTokens()) {
+ String tok = stok.nextToken();
+ if (tok.equals("*"))
+ sb.append("[^.]*");
+ else
+ sb.append(Pattern.quote(tok));
+ }
+ return className.matches(sb.toString());
+ }
+
+ private void parseProperties(Properties props) {
+ this.accessMap = new HashMap<String, Access>();
+ for (Map.Entry<Object, Object> entry : props.entrySet()) {
+ String identity = (String) entry.getKey();
+ String accessString = (String) entry.getValue();
+ Access access = Parser.parseAccess(identity, accessString);
+ accessMap.put(identity, access);
}
}
- private Properties props;
+ private static class Parser {
+ private final static int EOS = -1; // pseudo-codepoint "end of string"
+ static {
+ assert !Character.isWhitespace(EOS);
+ }
+
+ private final String identity; // just for better error messages
+ private final String s; // the string we're parsing
+ private final int len; // s.length()
+ private int i;
+ private int c;
+ // At any point, either c is s.codePointAt(i), or i == len and
+ // c is EOS. We use int rather than char because it is conceivable
+ // (if unlikely) that a classname in a create clause might contain
+ // "supplementary characters", the ones that don't fit in the original
+ // 16 bits for Unicode.
+
+ private Parser(String identity, String s) {
+ this.identity = identity;
+ this.s = s;
+ this.len = s.length();
+ this.i = 0;
+ if (i < len)
+ this.c = s.codePointAt(i);
+ else
+ this.c = EOS;
+ }
+
+ static Access parseAccess(String identity, String s) {
+ return new Parser(identity, s).parseAccess();
+ }
+
+ private Access parseAccess() {
+ skipSpace();
+ String type = parseWord();
+ Access access;
+ if (type.equals(READONLY))
+ access = new Access(false, false, null);
+ else if (type.equals(READWRITE))
+ access = parseReadWrite();
+ else {
+ throw syntax("Expected " + READONLY + " or " + READWRITE +
+ ": " + type);
+ }
+ if (c != EOS)
+ throw syntax("Extra text at end of line");
+ return access;
+ }
+
+ private Access parseReadWrite() {
+ List<String> createClasses = new ArrayList<String>();
+ boolean unregister = false;
+ while (true) {
+ skipSpace();
+ if (c == EOS)
+ break;
+ String type = parseWord();
+ if (type.equals(UNREGISTER))
+ unregister = true;
+ else if (type.equals(CREATE))
+ parseCreate(createClasses);
+ else
+ throw syntax("Unrecognized keyword " + type);
+ }
+ return new Access(true, unregister, createClasses);
+ }
+
+ private void parseCreate(List<String> createClasses) {
+ while (true) {
+ skipSpace();
+ createClasses.add(parseClassName());
+ skipSpace();
+ if (c == ',')
+ next();
+ else
+ break;
+ }
+ }
+
+ private String parseClassName() {
+ // We don't check that classname components begin with suitable
+ // characters (so we accept 1.2.3 for example). This means that
+ // there are only two states, which we can call dotOK and !dotOK
+ // according as a dot (.) is legal or not. Initially we're in
+ // !dotOK since a classname can't start with a dot; after a dot
+ // we're in !dotOK again; and after any other characters we're in
+ // dotOK. The classname is only accepted if we end in dotOK,
+ // so we reject an empty name or a name that ends with a dot.
+ final int start = i;
+ boolean dotOK = false;
+ while (true) {
+ if (c == '.') {
+ if (!dotOK)
+ throw syntax("Bad . in class name");
+ dotOK = false;
+ } else if (c == '*' || Character.isJavaIdentifierPart(c))
+ dotOK = true;
+ else
+ break;
+ next();
+ }
+ String className = s.substring(start, i);
+ if (!dotOK)
+ throw syntax("Bad class name " + className);
+ return className;
+ }
+
+ // Advance c and i to the next character, unless already at EOS.
+ private void next() {
+ if (c != EOS) {
+ i += Character.charCount(c);
+ if (i < len)
+ c = s.codePointAt(i);
+ else
+ c = EOS;
+ }
+ }
+
+ private void skipSpace() {
+ while (Character.isWhitespace(c))
+ next();
+ }
+
+ private String parseWord() {
+ skipSpace();
+ if (c == EOS)
+ throw syntax("Expected word at end of line");
+ final int start = i;
+ while (c != EOS && !Character.isWhitespace(c))
+ next();
+ String word = s.substring(start, i);
+ skipSpace();
+ return word;
+ }
+
+ private IllegalArgumentException syntax(String msg) {
+ return new IllegalArgumentException(
+ msg + " [" + identity + " " + s + "]");
+ }
+ }
+
+ private Map<String, Access> accessMap;
private Properties originalProps;
private String accessFileName;
}
--- a/jdk/src/share/classes/com/sun/jndi/ldap/LdapCtx.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/com/sun/jndi/ldap/LdapCtx.java Tue Apr 21 21:26:21 2009 -0700
@@ -302,7 +302,16 @@
schemaTrees = new Hashtable(11, 0.75f);
initEnv();
- connect(false);
+ try {
+ connect(false);
+ } catch (NamingException e) {
+ try {
+ close();
+ } catch (Exception e2) {
+ // Nothing
+ }
+ throw e;
+ }
}
LdapCtx(LdapCtx existing, String newDN) throws NamingException {
--- a/jdk/src/share/classes/com/sun/jndi/ldap/VersionHelper12.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/com/sun/jndi/ldap/VersionHelper12.java Tue Apr 21 21:26:21 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1999 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1999-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
@@ -33,12 +33,33 @@
final class VersionHelper12 extends VersionHelper {
+ // System property to control whether classes may be loaded from an
+ // arbitrary URL code base.
+ private static final String TRUST_URL_CODEBASE_PROPERTY =
+ "com.sun.jndi.ldap.object.trustURLCodebase";
+
+ // Determine whether classes may be loaded from an arbitrary URL code base.
+ private static final String trustURLCodebase =
+ AccessController.doPrivileged(
+ new PrivilegedAction<String>() {
+ public String run() {
+ return System.getProperty(TRUST_URL_CODEBASE_PROPERTY,
+ "false");
+ }
+ }
+ );
+
VersionHelper12() {} // Disallow external from creating one of these.
ClassLoader getURLClassLoader(String[] url)
throws MalformedURLException {
ClassLoader parent = getContextClassLoader();
- if (url != null) {
+ /*
+ * Classes may only be loaded from an arbitrary URL code base when
+ * the system property com.sun.jndi.ldap.object.trustURLCodebase
+ * has been set to "true".
+ */
+ if (url != null && "true".equalsIgnoreCase(trustURLCodebase)) {
return URLClassLoader.newInstance(getUrlArray(url), parent);
} else {
return parent;
--- a/jdk/src/share/classes/java/awt/Font.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/awt/Font.java Tue Apr 21 21:26:21 2009 -0700
@@ -37,6 +37,8 @@
import java.awt.peer.FontPeer;
import java.io.*;
import java.lang.ref.SoftReference;
+import java.security.AccessController;
+import java.security.PrivilegedExceptionAction;
import java.text.AttributedCharacterIterator.Attribute;
import java.text.CharacterIterator;
import java.text.StringCharacterIterator;
@@ -51,6 +53,7 @@
import sun.font.AttributeValues;
import sun.font.EAttribute;
import sun.font.CompositeFont;
+import sun.font.CreatedFontTracker;
import sun.font.Font2D;
import sun.font.Font2DHandle;
import sun.font.FontManager;
@@ -575,14 +578,16 @@
}
/* used to implement Font.createFont */
- private Font(File fontFile, int fontFormat, boolean isCopy)
+ private Font(File fontFile, int fontFormat,
+ boolean isCopy, CreatedFontTracker tracker)
throws FontFormatException {
this.createdFont = true;
/* Font2D instances created by this method track their font file
* so that when the Font2D is GC'd it can also remove the file.
*/
this.font2DHandle =
- FontManager.createFont2D(fontFile, fontFormat, isCopy).handle;
+ FontManager.createFont2D(fontFile, fontFormat,
+ isCopy, tracker).handle;
this.name = this.font2DHandle.font2D.getFontName(Locale.getDefault());
this.style = Font.PLAIN;
this.size = 1;
@@ -788,6 +793,29 @@
}
/**
+ * Used with the byte count tracker for fonts created from streams.
+ * If a thread can create temp files anyway, no point in counting
+ * font bytes.
+ */
+ private static boolean hasTempPermission() {
+
+ if (System.getSecurityManager() == null) {
+ return true;
+ }
+ File f = null;
+ boolean hasPerm = false;
+ try {
+ f = File.createTempFile("+~JT", ".tmp", null);
+ f.delete();
+ f = null;
+ hasPerm = true;
+ } catch (Throwable t) {
+ /* inc. any kind of SecurityException */
+ }
+ return hasPerm;
+ }
+
+ /**
* Returns a new <code>Font</code> using the specified font type
* and input data. The new <code>Font</code> is
* created with a point size of 1 and style {@link #PLAIN PLAIN}.
@@ -822,58 +850,96 @@
fontFormat != Font.TYPE1_FONT) {
throw new IllegalArgumentException ("font format not recognized");
}
- final InputStream fStream = fontStream;
- Object ret = java.security.AccessController.doPrivileged(
- new java.security.PrivilegedAction() {
- public Object run() {
- File tFile = null;
- FileOutputStream outStream = null;
- try {
- tFile = File.createTempFile("+~JF", ".tmp", null);
- /* Temp file deleted by font shutdown hook */
- BufferedInputStream inStream =
- new BufferedInputStream(fStream);
- outStream = new FileOutputStream(tFile);
- int bytesRead = 0;
- int bufSize = 8192;
- byte [] buf = new byte[bufSize];
- while (bytesRead != -1) {
- try {
- bytesRead = inStream.read(buf, 0, bufSize);
- } catch (Throwable t) {
- throw new IOException();
- }
- if (bytesRead != -1) {
- outStream.write(buf, 0, bytesRead);
- }
- }
- /* don't close the input stream */
- outStream.close();
- } catch (IOException e) {
- if (outStream != null) {
- try {
- outStream.close();
- } catch (Exception e1) {
- }
- }
- if (tFile != null) {
- try {
- tFile.delete();
- } catch (Exception e2) {
- }
- }
- return e;
- }
- return tFile;
- }
- });
+ boolean copiedFontData = false;
+
+ try {
+ final File tFile = AccessController.doPrivileged(
+ new PrivilegedExceptionAction<File>() {
+ public File run() throws IOException {
+ return File.createTempFile("+~JF", ".tmp", null);
+ }
+ }
+ );
- if (ret instanceof File) {
- return new Font((File)ret, fontFormat, true);
- } else if (ret instanceof IOException) {
- throw (IOException)ret;
- } else {
- throw new FontFormatException("Couldn't access font stream");
+ int totalSize = 0;
+ CreatedFontTracker tracker = null;
+ try {
+ final OutputStream outStream =
+ AccessController.doPrivileged(
+ new PrivilegedExceptionAction<OutputStream>() {
+ public OutputStream run() throws IOException {
+ return new FileOutputStream(tFile);
+ }
+ }
+ );
+ if (!hasTempPermission()) {
+ tracker = CreatedFontTracker.getTracker();
+ }
+ try {
+ byte[] buf = new byte[8192];
+ for (;;) {
+ int bytesRead = fontStream.read(buf);
+ if (bytesRead < 0) {
+ break;
+ }
+ if (tracker != null) {
+ if (totalSize+bytesRead > tracker.MAX_FILE_SIZE) {
+ throw new IOException("File too big.");
+ }
+ if (totalSize+tracker.getNumBytes() >
+ tracker.MAX_TOTAL_BYTES)
+ {
+ throw new IOException("Total files too big.");
+ }
+ totalSize += bytesRead;
+ tracker.addBytes(bytesRead);
+ }
+ outStream.write(buf, 0, bytesRead);
+ }
+ /* don't close the input stream */
+ } finally {
+ outStream.close();
+ }
+ /* After all references to a Font2D are dropped, the file
+ * will be removed. To support long-lived AppContexts,
+ * we need to then decrement the byte count by the size
+ * of the file.
+ * If the data isn't a valid font, the implementation will
+ * delete the tmp file and decrement the byte count
+ * in the tracker object before returning from the
+ * constructor, so we can set 'copiedFontData' to true here
+ * without waiting for the results of that constructor.
+ */
+ copiedFontData = true;
+ Font font = new Font(tFile, fontFormat, true, tracker);
+ return font;
+ } finally {
+ if (!copiedFontData) {
+ if (tracker != null) {
+ tracker.subBytes(totalSize);
+ }
+ AccessController.doPrivileged(
+ new PrivilegedExceptionAction<Void>() {
+ public Void run() {
+ tFile.delete();
+ return null;
+ }
+ }
+ );
+ }
+ }
+ } catch (Throwable t) {
+ if (t instanceof FontFormatException) {
+ throw (FontFormatException)t;
+ }
+ if (t instanceof IOException) {
+ throw (IOException)t;
+ }
+ Throwable cause = t.getCause();
+ if (cause instanceof FontFormatException) {
+ throw (FontFormatException)cause;
+ }
+ throw new IOException("Problem reading font data.");
}
}
@@ -913,6 +979,9 @@
*/
public static Font createFont(int fontFormat, File fontFile)
throws java.awt.FontFormatException, java.io.IOException {
+
+ fontFile = new File(fontFile.getPath());
+
if (fontFormat != Font.TRUETYPE_FONT &&
fontFormat != Font.TYPE1_FONT) {
throw new IllegalArgumentException ("font format not recognized");
@@ -926,7 +995,7 @@
if (!fontFile.canRead()) {
throw new IOException("Can't read " + fontFile);
}
- return new Font(fontFile, fontFormat, false);
+ return new Font(fontFile, fontFormat, false, null);
}
/**
--- a/jdk/src/share/classes/java/lang/NoSuchFieldError.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/lang/NoSuchFieldError.java Tue Apr 21 21:26:21 2009 -0700
@@ -41,14 +41,14 @@
private static final long serialVersionUID = -3456430195886129035L;
/**
- * Constructs a <code>NoSuchFieldException</code> with no detail message.
+ * Constructs a <code>NoSuchFieldError</code> with no detail message.
*/
public NoSuchFieldError() {
super();
}
/**
- * Constructs a <code>NoSuchFieldException</code> with the specified
+ * Constructs a <code>NoSuchFieldError</code> with the specified
* detail message.
*
* @param s the detail message.
--- a/jdk/src/share/classes/java/nio/ByteBufferAs-X-Buffer.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/nio/ByteBufferAs-X-Buffer.java Tue Apr 21 21:26:21 2009 -0700
@@ -196,10 +196,12 @@
if ((start < 0) || (end > len) || (start > end))
throw new IndexOutOfBoundsException();
- int sublen = end - start;
- int off = offset + ((pos + start) << $LG_BYTES_PER_VALUE$);
- assert (off >= 0);
- return new ByteBufferAsCharBuffer$RW$$BO$(bb, -1, 0, sublen, sublen, off);
+ return new ByteBufferAsCharBuffer$RW$$BO$(bb,
+ -1,
+ pos + start,
+ pos + end,
+ capacity(),
+ offset);
}
#end[char]
--- a/jdk/src/share/classes/java/nio/Direct-X-Buffer.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/nio/Direct-X-Buffer.java Tue Apr 21 21:26:21 2009 -0700
@@ -412,10 +412,12 @@
if ((start < 0) || (end > len) || (start > end))
throw new IndexOutOfBoundsException();
- int sublen = end - start;
- int off = (pos + start) << $LG_BYTES_PER_VALUE$;
- assert (off >= 0);
- return new DirectCharBuffer$RW$$BO$(this, -1, 0, sublen, sublen, off);
+ return new DirectCharBuffer$RW$$BO$(this,
+ -1,
+ pos + start,
+ pos + end,
+ capacity(),
+ offset);
}
#end[char]
--- a/jdk/src/share/classes/java/nio/Heap-X-Buffer.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/nio/Heap-X-Buffer.java Tue Apr 21 21:26:21 2009 -0700
@@ -572,10 +572,13 @@
|| (end > length())
|| (start > end))
throw new IndexOutOfBoundsException();
- int len = end - start;
+ int pos = position();
return new HeapCharBuffer$RW$(hb,
- -1, 0, len, len,
- offset + position() + start);
+ -1,
+ pos + start,
+ pos + end,
+ capacity(),
+ offset);
}
#end[char]
--- a/jdk/src/share/classes/java/nio/StringCharBuffer.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/nio/StringCharBuffer.java Tue Apr 21 21:26:21 2009 -0700
@@ -102,10 +102,12 @@
public final CharBuffer subSequence(int start, int end) {
try {
int pos = position();
- return new StringCharBuffer(str, -1,
+ return new StringCharBuffer(str,
+ -1,
pos + checkIndex(start, pos),
pos + checkIndex(end, pos),
- remaining(), offset);
+ capacity(),
+ offset);
} catch (IllegalArgumentException x) {
throw new IndexOutOfBoundsException();
}
--- a/jdk/src/share/classes/java/nio/channels/AsynchronousDatagramChannel.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/nio/channels/AsynchronousDatagramChannel.java Tue Apr 21 21:26:21 2009 -0700
@@ -443,7 +443,7 @@
* at least care must be taken to ensure that the buffer is not accessed
* while the channel remains open.
*
- * <p> If there is a security manager installed and the the channel is not
+ * <p> If there is a security manager installed and the channel is not
* connected then this method verifies that the target address and port number
* are permitted by the security manager's {@link SecurityManager#checkConnect
* checkConnect} method. The overhead of this security check can be avoided
--- a/jdk/src/share/classes/java/nio/file/Path.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/nio/file/Path.java Tue Apr 21 21:26:21 2009 -0700
@@ -494,7 +494,7 @@
* @throws IOException
* if an I/O error occurs
* @throws SecurityException
- * In the case of the the default provider, and a security manager
+ * In the case of the default provider, and a security manager
* is installed, it denies {@link LinkPermission}<tt>("symbolic")</tt>
* or its {@link SecurityManager#checkWrite(String) checkWrite}
* method denies write access to the path of the symbolic link.
@@ -531,7 +531,7 @@
* @throws IOException
* if an I/O error occurs
* @throws SecurityException
- * In the case of the the default provider, and a security manager
+ * In the case of the default provider, and a security manager
* is installed, it denies {@link LinkPermission}<tt>("hard")</tt>
* or its {@link SecurityManager#checkWrite(String) checkWrite}
* method denies write access to both this path and the path of the
@@ -560,7 +560,7 @@
* @throws IOException
* if an I/O error occurs
* @throws SecurityException
- * In the case of the the default provider, and a security manager
+ * In the case of the default provider, and a security manager
* is installed, it checks that {@code FilePermission} has been
* granted with the "{@code readlink}" action to read the link.
*/
@@ -615,7 +615,7 @@
* obtained
*
* @throws SecurityException
- * In the case of the the default provider, and a security manager
+ * In the case of the default provider, and a security manager
* is installed, the {@link #toAbsolutePath toAbsolutePath} method
* throws a security exception.
*/
@@ -636,7 +636,7 @@
* @throws IOError
* if an I/O error occurs
* @throws SecurityException
- * In the case of the the default provider, and a security manager
+ * In the case of the default provider, and a security manager
* is installed, its {@link SecurityManager#checkPropertyAccess(String)
* checkPropertyAccess} method is invoked to check access to the
* system property {@code user.dir}
@@ -677,7 +677,7 @@
* @throws IOException
* if the file does not exist or an I/O error occurs
* @throws SecurityException
- * In the case of the the default provider, and a security manager
+ * In the case of the default provider, and a security manager
* is installed, its {@link SecurityManager#checkRead(String) checkRead}
* method is invoked to check read access to the file, and where
* this path is not absolute, its {@link SecurityManager#checkPropertyAccess(String)
--- a/jdk/src/share/classes/java/nio/file/SecureDirectoryStream.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/nio/file/SecureDirectoryStream.java Tue Apr 21 21:26:21 2009 -0700
@@ -208,7 +208,7 @@
* @throws ClosedDirectoryStreamException
* if the directory stream is closed
* @throws NoSuchFileException
- * if the the directory does not exist <i>(optional specific exception)</i>
+ * if the directory does not exist <i>(optional specific exception)</i>
* @throws DirectoryNotEmptyException
* if the directory could not otherwise be deleted because it is
* not empty <i>(optional specific exception)</i>
--- a/jdk/src/share/classes/java/security/AccessController.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/security/AccessController.java Tue Apr 21 21:26:21 2009 -0700
@@ -425,7 +425,7 @@
* Performs the specified <code>PrivilegedExceptionAction</code> with
* privileges enabled and restricted by the specified
* <code>AccessControlContext</code>. The action is performed with the
- * intersection of the the permissions possessed by the caller's
+ * intersection of the permissions possessed by the caller's
* protection domain, and those possessed by the domains represented by the
* specified <code>AccessControlContext</code>.
* <p>
--- a/jdk/src/share/classes/java/security/AlgorithmParametersSpi.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/security/AlgorithmParametersSpi.java Tue Apr 21 21:26:21 2009 -0700
@@ -102,7 +102,7 @@
* parameters should be returned in an instance of the
* <code>DSAParameterSpec</code> class.
*
- * @param paramSpec the the specification class in which
+ * @param paramSpec the specification class in which
* the parameters should be returned.
*
* @return the parameter specification.
--- a/jdk/src/share/classes/java/security/PrivilegedActionException.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/security/PrivilegedActionException.java Tue Apr 21 21:26:21 2009 -0700
@@ -87,7 +87,7 @@
}
/**
- * Returns the the cause of this exception (the exception thrown by
+ * Returns the cause of this exception (the exception thrown by
* the privileged computation that resulted in this
* <code>PrivilegedActionException</code>).
*
--- a/jdk/src/share/classes/java/security/Security.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/security/Security.java Tue Apr 21 21:26:21 2009 -0700
@@ -501,7 +501,7 @@
* <li> <i><crypto_service>.<algorithm_or_type>
* <attribute_name>:< attribute_value></i>
* <p> The cryptographic service name must not contain any dots. There
- * must be one or more space charaters between the the
+ * must be one or more space charaters between the
* <i><algorithm_or_type></i> and the <i><attribute_name></i>.
* <p> A provider satisfies this selection criterion iff the
* provider implements the specified algorithm or type for the specified
--- a/jdk/src/share/classes/java/security/SecurityPermission.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/security/SecurityPermission.java Tue Apr 21 21:26:21 2009 -0700
@@ -118,7 +118,7 @@
* <td>setProperty.{key}</td>
* <td>Setting of the security property with the specified key</td>
* <td>This could include setting a security provider or defining
- * the location of the the system-wide security policy. Malicious
+ * the location of the system-wide security policy. Malicious
* code that has permission to set a new security provider may
* set a rogue provider that steals confidential information such
* as cryptographic private keys. In addition, malicious code with
--- a/jdk/src/share/classes/java/security/SignatureSpi.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/security/SignatureSpi.java Tue Apr 21 21:26:21 2009 -0700
@@ -316,7 +316,7 @@
* overridden by a provider
*
* @exception InvalidAlgorithmParameterException if this method is
- * overridden by a provider and the the given parameters
+ * overridden by a provider and the given parameters
* are inappropriate for this signature engine
*/
protected void engineSetParameter(AlgorithmParameterSpec params)
--- a/jdk/src/share/classes/java/security/cert/CertificateFactory.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/security/cert/CertificateFactory.java Tue Apr 21 21:26:21 2009 -0700
@@ -460,7 +460,7 @@
* {@link java.io.InputStream#reset() reset}, this method will
* consume the entire input stream. Otherwise, each call to this
* method consumes one CRL and the read position of the input stream
- * is positioned to the next available byte after the the inherent
+ * is positioned to the next available byte after the inherent
* end-of-CRL marker. If the data in the
* input stream does not contain an inherent end-of-CRL marker (other
* than EOF) and there is trailing data after the CRL is parsed, a
--- a/jdk/src/share/classes/java/security/cert/CertificateFactorySpi.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/security/cert/CertificateFactorySpi.java Tue Apr 21 21:26:21 2009 -0700
@@ -88,7 +88,7 @@
* {@link java.io.InputStream#reset() reset}, this method will
* consume the entire input stream. Otherwise, each call to this
* method consumes one certificate and the read position of the input stream
- * is positioned to the next available byte after the the inherent
+ * is positioned to the next available byte after the inherent
* end-of-certificate marker. If the data in the
* input stream does not contain an inherent end-of-certificate marker (other
* than EOF) and there is trailing data after the certificate is parsed, a
@@ -261,7 +261,7 @@
* {@link java.io.InputStream#reset() reset}, this method will
* consume the entire input stream. Otherwise, each call to this
* method consumes one CRL and the read position of the input stream
- * is positioned to the next available byte after the the inherent
+ * is positioned to the next available byte after the inherent
* end-of-CRL marker. If the data in the
* input stream does not contain an inherent end-of-CRL marker (other
* than EOF) and there is trailing data after the CRL is parsed, a
--- a/jdk/src/share/classes/java/util/Calendar.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/util/Calendar.java Tue Apr 21 21:26:21 2009 -0700
@@ -41,9 +41,14 @@
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
+import java.io.OptionalDataException;
import java.io.Serializable;
+import java.security.AccessControlContext;
import java.security.AccessController;
+import java.security.PermissionCollection;
+import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
+import java.security.ProtectionDomain;
import java.text.DateFormat;
import java.text.DateFormatSymbols;
import sun.util.BuddhistCalendar;
@@ -2628,6 +2633,18 @@
}
}
+ private static class CalendarAccessControlContext {
+ private static final AccessControlContext INSTANCE;
+ static {
+ RuntimePermission perm = new RuntimePermission("accessClassInPackage.sun.util.calendar");
+ PermissionCollection perms = perm.newPermissionCollection();
+ perms.add(perm);
+ INSTANCE = new AccessControlContext(new ProtectionDomain[] {
+ new ProtectionDomain(null, perms)
+ });
+ }
+ }
+
/**
* Reconstitutes this object from a stream (i.e., deserialize it).
*/
@@ -2657,17 +2674,30 @@
serialVersionOnStream = currentSerialVersion;
// If there's a ZoneInfo object, use it for zone.
+ ZoneInfo zi = null;
try {
- ZoneInfo zi = (ZoneInfo) AccessController.doPrivileged(
- new PrivilegedExceptionAction() {
- public Object run() throws Exception {
- return input.readObject();
- }
- });
- if (zi != null) {
- zone = zi;
+ zi = AccessController.doPrivileged(
+ new PrivilegedExceptionAction<ZoneInfo>() {
+ public ZoneInfo run() throws Exception {
+ return (ZoneInfo) input.readObject();
+ }
+ },
+ CalendarAccessControlContext.INSTANCE);
+ } catch (PrivilegedActionException pae) {
+ Exception e = pae.getException();
+ if (!(e instanceof OptionalDataException)) {
+ if (e instanceof RuntimeException) {
+ throw (RuntimeException) e;
+ } else if (e instanceof IOException) {
+ throw (IOException) e;
+ } else if (e instanceof ClassNotFoundException) {
+ throw (ClassNotFoundException) e;
+ }
+ throw new RuntimeException(e);
}
- } catch (Exception e) {
+ }
+ if (zi != null) {
+ zone = zi;
}
// If the deserialized object has a SimpleTimeZone, try to
@@ -2676,9 +2706,9 @@
// implementation as much as possible.
if (zone instanceof SimpleTimeZone) {
String id = zone.getID();
- TimeZone zi = TimeZone.getTimeZone(id);
- if (zi != null && zi.hasSameRules(zone) && zi.getID().equals(id)) {
- zone = zi;
+ TimeZone tz = TimeZone.getTimeZone(id);
+ if (tz != null && tz.hasSameRules(zone) && tz.getID().equals(id)) {
+ zone = tz;
}
}
}
--- a/jdk/src/share/classes/java/util/logging/LogRecord.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/util/logging/LogRecord.java Tue Apr 21 21:26:21 2009 -0700
@@ -25,6 +25,8 @@
package java.util.logging;
import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
import java.io.*;
/**
@@ -64,9 +66,24 @@
*/
public class LogRecord implements java.io.Serializable {
- private static long globalSequenceNumber;
- private static int nextThreadId=10;
- private static ThreadLocal<Integer> threadIds = new ThreadLocal<Integer>();
+ private static final AtomicLong globalSequenceNumber
+ = new AtomicLong(0);
+
+ /**
+ * The default value of threadID will be the current thread's
+ * thread id, for ease of correlation, unless it is greater than
+ * MIN_SEQUENTIAL_THREAD_ID, in which case we try harder to keep
+ * our promise to keep threadIDs unique by avoiding collisions due
+ * to 32-bit wraparound. Unfortunately, LogRecord.getThreadID()
+ * returns int, while Thread.getId() returns long.
+ */
+ private static final int MIN_SEQUENTIAL_THREAD_ID = Integer.MAX_VALUE / 2;
+
+ private static final AtomicInteger nextThreadId
+ = new AtomicInteger(MIN_SEQUENTIAL_THREAD_ID);
+
+ private static final ThreadLocal<Integer> threadIds
+ = new ThreadLocal<Integer>();
/**
* @serial Logging message level
@@ -123,6 +140,23 @@
private transient ResourceBundle resourceBundle;
/**
+ * Returns the default value for a new LogRecord's threadID.
+ */
+ private int defaultThreadID() {
+ long tid = Thread.currentThread().getId();
+ if (tid < MIN_SEQUENTIAL_THREAD_ID) {
+ return (int) tid;
+ } else {
+ Integer id = threadIds.get();
+ if (id == null) {
+ id = nextThreadId.getAndIncrement();
+ threadIds.set(id);
+ }
+ return id;
+ }
+ }
+
+ /**
* Construct a LogRecord with the given level and message values.
* <p>
* The sequence property will be initialized with a new unique value.
@@ -144,15 +178,8 @@
this.level = level;
message = msg;
// Assign a thread ID and a unique sequence number.
- synchronized (LogRecord.class) {
- sequenceNumber = globalSequenceNumber++;
- Integer id = threadIds.get();
- if (id == null) {
- id = new Integer(nextThreadId++);
- threadIds.set(id);
- }
- threadID = id.intValue();
- }
+ sequenceNumber = globalSequenceNumber.getAndIncrement();
+ threadID = defaultThreadID();
millis = System.currentTimeMillis();
needToInferCaller = true;
}
--- a/jdk/src/share/classes/java/util/logging/Logger.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/util/logging/Logger.java Tue Apr 21 21:26:21 2009 -0700
@@ -477,7 +477,7 @@
Logger logger = this;
while (logger != null) {
- for (Handler handler : logger.handlers) {
+ for (Handler handler : logger.getHandlers()) {
handler.publish(record);
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/java/util/zip/ZipCoder.java Tue Apr 21 21:26:21 2009 -0700
@@ -0,0 +1,139 @@
+/*
+ * 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 java.util.zip;
+
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetDecoder;
+import java.nio.charset.CharsetEncoder;
+import java.nio.charset.CoderResult;
+import java.nio.charset.CodingErrorAction;
+import java.util.Arrays;
+
+/**
+ * Utility class for zipfile name and comment decoding and encoding
+ */
+
+final class ZipCoder {
+
+ String toString(byte[] ba, int length) {
+ CharsetDecoder cd = decoder().reset();
+ int len = (int)(length * cd.maxCharsPerByte());
+ char[] ca = new char[len];
+ if (len == 0)
+ return new String(ca);
+ ByteBuffer bb = ByteBuffer.wrap(ba, 0, length);
+ CharBuffer cb = CharBuffer.wrap(ca);
+ CoderResult cr = cd.decode(bb, cb, true);
+ if (!cr.isUnderflow())
+ throw new IllegalArgumentException(cr.toString());
+ cr = cd.flush(cb);
+ if (!cr.isUnderflow())
+ throw new IllegalArgumentException(cr.toString());
+ return new String(ca, 0, cb.position());
+ }
+
+ String toString(byte[] ba) {
+ return toString(ba, ba.length);
+ }
+
+ byte[] getBytes(String s) {
+ CharsetEncoder ce = encoder().reset();
+ char[] ca = s.toCharArray();
+ int len = (int)(ca.length * ce.maxBytesPerChar());
+ byte[] ba = new byte[len];
+ if (len == 0)
+ return ba;
+ ByteBuffer bb = ByteBuffer.wrap(ba);
+ CharBuffer cb = CharBuffer.wrap(ca);
+ CoderResult cr = ce.encode(cb, bb, true);
+ if (!cr.isUnderflow())
+ throw new IllegalArgumentException(cr.toString());
+ cr = ce.flush(bb);
+ if (!cr.isUnderflow())
+ throw new IllegalArgumentException(cr.toString());
+ if (bb.position() == ba.length) // defensive copy?
+ return ba;
+ else
+ return Arrays.copyOf(ba, bb.position());
+ }
+
+ // assume invoked only if "this" is not utf8
+ byte[] getBytesUTF8(String s) {
+ if (isutf8)
+ return getBytes(s);
+ if (utf8 == null)
+ utf8 = new ZipCoder(Charset.forName("UTF-8"));
+ return utf8.getBytes(s);
+ }
+
+
+ String toStringUTF8(byte[] ba, int len) {
+ if (isutf8)
+ return toString(ba, len);
+ if (utf8 == null)
+ utf8 = new ZipCoder(Charset.forName("UTF-8"));
+ return utf8.toString(ba, len);
+ }
+
+ boolean isUTF8() {
+ return isutf8;
+ }
+
+ private Charset cs;
+ private CharsetDecoder dec;
+ private CharsetEncoder enc;
+ private boolean isutf8;
+ private ZipCoder utf8;
+
+ private ZipCoder(Charset cs) {
+ this.cs = cs;
+ this.isutf8 = cs.name().equals("UTF-8");
+ }
+
+ static ZipCoder get(Charset charset) {
+ return new ZipCoder(charset);
+ }
+
+ private CharsetDecoder decoder() {
+ if (dec == null) {
+ dec = cs.newDecoder()
+ .onMalformedInput(CodingErrorAction.REPORT)
+ .onUnmappableCharacter(CodingErrorAction.REPORT);
+ }
+ return dec;
+ }
+
+ private CharsetEncoder encoder() {
+ if (enc == null) {
+ enc = cs.newEncoder()
+ .onMalformedInput(CodingErrorAction.REPORT)
+ .onUnmappableCharacter(CodingErrorAction.REPORT);
+ }
+ return enc;
+ }
+}
--- a/jdk/src/share/classes/java/util/zip/ZipConstants64.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/util/zip/ZipConstants64.java Tue Apr 21 21:26:21 2009 -0700
@@ -73,5 +73,12 @@
static final int ZIP64_EXTSIZ = 8; // compressed size, 8-byte
static final int ZIP64_EXTLEN = 16; // uncompressed size, 8-byte
+ /*
+ * Language encoding flag EFS
+ */
+ static final int EFS = 0x800; // If this bit is set the filename and
+ // comment fields for this file must be
+ // encoded using UTF-8.
+
private ZipConstants64() {}
}
--- a/jdk/src/share/classes/java/util/zip/ZipEntry.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/util/zip/ZipEntry.java Tue Apr 21 21:26:21 2009 -0700
@@ -40,6 +40,7 @@
long size = -1; // uncompressed size of entry data
long csize = -1; // compressed size of entry data
int method = -1; // compression method
+ int flag = 0; // general purpose flag
byte[] extra; // optional extra field data for entry
String comment; // optional comment string for entry
@@ -53,13 +54,6 @@
*/
public static final int DEFLATED = 8;
- static {
- /* Zip library is loaded from System.initializeSystemClass */
- initIDs();
- }
-
- private static native void initIDs();
-
/**
* Creates a new zip entry with the specified name.
*
@@ -90,28 +84,15 @@
size = e.size;
csize = e.csize;
method = e.method;
+ flag = e.flag;
extra = e.extra;
comment = e.comment;
}
/*
- * Creates a new zip entry for the given name with fields initialized
- * from the specified jzentry data.
+ * Creates a new un-initialized zip entry
*/
- ZipEntry(String name, long jzentry) {
- this.name = name;
- initFields(jzentry);
- }
-
- private native void initFields(long jzentry);
-
- /*
- * Creates a new zip entry with fields initialized from the specified
- * jzentry data.
- */
- ZipEntry(long jzentry) {
- initFields(jzentry);
- }
+ ZipEntry() {}
/**
* Returns the name of the entry.
@@ -258,16 +239,16 @@
/**
* Sets the optional comment string for the entry.
+ *
+ * <p>ZIP entry comments have maximum length of 0xffff. If the length of the
+ * specified comment string is greater than 0xFFFF bytes after encoding, only
+ * the first 0xFFFF bytes are output to the ZIP file entry.
+ *
* @param comment the comment string
- * @exception IllegalArgumentException if the length of the specified
- * comment string is greater than 0xFFFF bytes
+ *
* @see #getComment()
*/
public void setComment(String comment) {
- if (comment != null && comment.length() > 0xffff/3
- && ZipOutputStream.getUTF8Length(comment) > 0xffff) {
- throw new IllegalArgumentException("invalid entry comment length");
- }
this.comment = comment;
}
--- a/jdk/src/share/classes/java/util/zip/ZipFile.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/util/zip/ZipFile.java Tue Apr 21 21:26:21 2009 -0700
@@ -29,9 +29,11 @@
import java.io.IOException;
import java.io.EOFException;
import java.io.File;
+import java.nio.charset.Charset;
import java.util.Vector;
import java.util.Enumeration;
import java.util.NoSuchElementException;
+import static java.util.zip.ZipConstants64.*;
/**
* This class is used to read entries from a zip file.
@@ -76,16 +78,19 @@
/**
* Opens a zip file for reading.
*
- * <p>First, if there is a security
- * manager, its <code>checkRead</code> method
- * is called with the <code>name</code> argument
- * as its argument to ensure the read is allowed.
+ * <p>First, if there is a security manager, its <code>checkRead</code>
+ * method is called with the <code>name</code> argument as its argument
+ * to ensure the read is allowed.
+ *
+ * <p>The UTF-8 {@link java.nio.charset.Charset charset} is used to
+ * decode the entry names and comments.
*
* @param name the name of the zip file
* @throws ZipException if a ZIP format error has occurred
* @throws IOException if an I/O error has occurred
* @throws SecurityException if a security manager exists and its
* <code>checkRead</code> method doesn't allow read access to the file.
+ *
* @see SecurityManager#checkRead(java.lang.String)
*/
public ZipFile(String name) throws IOException {
@@ -101,6 +106,9 @@
* method is called with the <code>name</code> argument as its argument to
* ensure the read is allowed.
*
+ * <p>The UTF-8 {@link java.nio.charset.Charset charset} is used to
+ * decode the entry names and comments
+ *
* @param file the ZIP file to be opened for reading
* @param mode the mode in which the file is to be opened
* @throws ZipException if a ZIP format error has occurred
@@ -115,6 +123,59 @@
* @since 1.3
*/
public ZipFile(File file, int mode) throws IOException {
+ this(file, mode, Charset.forName("UTF-8"));
+ }
+
+ /**
+ * Opens a ZIP file for reading given the specified File object.
+ *
+ * <p>The UTF-8 {@link java.nio.charset.Charset charset} is used to
+ * decode the entry names and comments.
+ *
+ * @param file the ZIP file to be opened for reading
+ * @throws ZipException if a ZIP format error has occurred
+ * @throws IOException if an I/O error has occurred
+ */
+ public ZipFile(File file) throws ZipException, IOException {
+ this(file, OPEN_READ);
+ }
+
+ private ZipCoder zc;
+
+ /**
+ * Opens a new <code>ZipFile</code> to read from the specified
+ * <code>File</code> object in the specified mode. The mode argument
+ * must be either <tt>OPEN_READ</tt> or <tt>OPEN_READ | OPEN_DELETE</tt>.
+ *
+ * <p>First, if there is a security manager, its <code>checkRead</code>
+ * method is called with the <code>name</code> argument as its argument to
+ * ensure the read is allowed.
+ *
+ * @param file the ZIP file to be opened for reading
+ * @param mode the mode in which the file is to be opened
+ * @param charset
+ * the {@link java.nio.charset.Charset {@code charset}} to
+ * be used to decode the ZIP entry name and comment that are not
+ * encoded by using UTF-8 encoding (indicated by entry's general
+ * purpose flag).
+ *
+ * @throws ZipException if a ZIP format error has occurred
+ * @throws IOException if an I/O error has occurred
+ *
+ * @throws SecurityException
+ * if a security manager exists and its <code>checkRead</code>
+ * method doesn't allow read access to the file,or its
+ * <code>checkDelete</code> method doesn't allow deleting the
+ * file when the <tt>OPEN_DELETE</tt> flag is set
+ *
+ * @throws IllegalArgumentException if the <tt>mode</tt> argument is invalid
+ *
+ * @see SecurityManager#checkRead(java.lang.String)
+ *
+ * @since 1.7
+ */
+ public ZipFile(File file, int mode, Charset charset) throws IOException
+ {
if (((mode & OPEN_READ) == 0) ||
((mode & ~(OPEN_READ | OPEN_DELETE)) != 0)) {
throw new IllegalArgumentException("Illegal mode: 0x"+
@@ -128,24 +189,61 @@
sm.checkDelete(name);
}
}
+ if (charset == null)
+ throw new NullPointerException("charset is null");
+ this.zc = ZipCoder.get(charset);
jzfile = open(name, mode, file.lastModified());
-
this.name = name;
this.total = getTotal(jzfile);
}
- private static native long open(String name, int mode, long lastModified);
- private static native int getTotal(long jzfile);
-
+ /**
+ * Opens a zip file for reading.
+ *
+ * <p>First, if there is a security manager, its <code>checkRead</code>
+ * method is called with the <code>name</code> argument as its argument
+ * to ensure the read is allowed.
+ *
+ * @param name the name of the zip file
+ * @param charset
+ * the {@link java.nio.charset.Charset {@code charset}} to
+ * be used to decode the ZIP entry name and comment that are not
+ * encoded by using UTF-8 encoding (indicated by entry's general
+ * purpose flag).
+ *
+ * @throws ZipException if a ZIP format error has occurred
+ * @throws IOException if an I/O error has occurred
+ * @throws SecurityException
+ * if a security manager exists and its <code>checkRead</code>
+ * method doesn't allow read access to the file
+ *
+ * @see SecurityManager#checkRead(java.lang.String)
+ *
+ * @since 1.7
+ */
+ public ZipFile(String name, Charset charset) throws IOException
+ {
+ this(new File(name), OPEN_READ, charset);
+ }
/**
* Opens a ZIP file for reading given the specified File object.
* @param file the ZIP file to be opened for reading
- * @throws ZipException if a ZIP error has occurred
+ * @param charset
+ * The {@link java.nio.charset.Charset {@code charset}} to be
+ * used to decode the ZIP entry name and comment (ignored if
+ * the <a href="package-summary.html#lang_encoding"> language
+ * encoding bit</a> of the ZIP entry's general purpose bit
+ * flag is set).
+ *
+ * @throws ZipException if a ZIP format error has occurred
* @throws IOException if an I/O error has occurred
+ *
+ * @since 1.7
*/
- public ZipFile(File file) throws ZipException, IOException {
- this(file, OPEN_READ);
+ public ZipFile(File file, Charset charset) throws IOException
+ {
+ this(file, OPEN_READ, charset);
}
/**
@@ -163,9 +261,9 @@
long jzentry = 0;
synchronized (this) {
ensureOpen();
- jzentry = getEntry(jzfile, name, true);
+ jzentry = getEntry(jzfile, zc.getBytes(name), true);
if (jzentry != 0) {
- ZipEntry ze = new ZipEntry(name, jzentry);
+ ZipEntry ze = getZipEntry(name, jzentry);
freeEntry(jzfile, jzentry);
return ze;
}
@@ -173,7 +271,7 @@
return null;
}
- private static native long getEntry(long jzfile, String name,
+ private static native long getEntry(long jzfile, byte[] name,
boolean addSlash);
// freeEntry releases the C jzentry struct.
@@ -194,36 +292,30 @@
* @throws IllegalStateException if the zip file has been closed
*/
public InputStream getInputStream(ZipEntry entry) throws IOException {
- return getInputStream(entry.name);
- }
-
- /**
- * Returns an input stream for reading the contents of the specified
- * entry, or null if the entry was not found.
- */
- private InputStream getInputStream(String name) throws IOException {
- if (name == null) {
- throw new NullPointerException("name");
+ if (entry == null) {
+ throw new NullPointerException("entry");
}
long jzentry = 0;
ZipFileInputStream in = null;
synchronized (this) {
ensureOpen();
- jzentry = getEntry(jzfile, name, false);
+ if (!zc.isUTF8() && (entry.flag & EFS) != 0) {
+ jzentry = getEntry(jzfile, zc.getBytesUTF8(entry.name), false);
+ } else {
+ jzentry = getEntry(jzfile, zc.getBytes(entry.name), false);
+ }
if (jzentry == 0) {
return null;
}
-
in = new ZipFileInputStream(jzentry);
-
}
final ZipFileInputStream zfin = in;
- switch (getMethod(jzentry)) {
+ switch (getEntryMethod(jzentry)) {
case STORED:
return zfin;
case DEFLATED:
// MORE: Compute good size for inflater stream:
- long size = getSize(jzentry) + 2; // Inflater likes a bit of slack
+ long size = getEntrySize(jzentry) + 2; // Inflater likes a bit of slack
if (size > 65536) size = 8192;
if (size <= 0) size = 4096;
return new InflaterInputStream(zfin, getInflater(), (int)size) {
@@ -267,8 +359,6 @@
}
}
- private static native int getMethod(long jzentry);
-
/*
* Gets an inflater from the list of available inflaters or allocates
* a new one.
@@ -343,7 +433,7 @@
",\n message = " + message
);
}
- ZipEntry ze = new ZipEntry(jzentry);
+ ZipEntry ze = getZipEntry(null, jzentry);
freeEntry(jzfile, jzentry);
return ze;
}
@@ -351,6 +441,38 @@
};
}
+ private ZipEntry getZipEntry(String name, long jzentry) {
+ ZipEntry e = new ZipEntry();
+ e.flag = getEntryFlag(jzentry); // get the flag first
+ if (name != null) {
+ e.name = name;
+ } else {
+ byte[] bname = getEntryBytes(jzentry, JZENTRY_NAME);
+ if (!zc.isUTF8() && (e.flag & EFS) != 0) {
+ e.name = zc.toStringUTF8(bname, bname.length);
+ } else {
+ e.name = zc.toString(bname, bname.length);
+ }
+ }
+ e.time = getEntryTime(jzentry);
+ e.crc = getEntryCrc(jzentry);
+ e.size = getEntrySize(jzentry);
+ e. csize = getEntryCSize(jzentry);
+ e.method = getEntryMethod(jzentry);
+ e.extra = getEntryBytes(jzentry, JZENTRY_EXTRA);
+ byte[] bcomm = getEntryBytes(jzentry, JZENTRY_COMMENT);
+ if (bcomm == null) {
+ e.comment = null;
+ } else {
+ if (!zc.isUTF8() && (e.flag & EFS) != 0) {
+ e.comment = zc.toStringUTF8(bcomm, bcomm.length);
+ } else {
+ e.comment = zc.toString(bcomm, bcomm.length);
+ }
+ }
+ return e;
+ }
+
private static native long getNextEntry(long jzfile, int i);
/**
@@ -443,8 +565,8 @@
ZipFileInputStream(long jzentry) {
pos = 0;
- rem = getCSize(jzentry);
- size = getSize(jzentry);
+ rem = getEntryCSize(jzentry);
+ size = getEntrySize(jzentry);
this.jzentry = jzentry;
}
@@ -514,13 +636,25 @@
}
+
+ private static native long open(String name, int mode, long lastModified)
+ throws IOException;
+ private static native int getTotal(long jzfile);
private static native int read(long jzfile, long jzentry,
long pos, byte[] b, int off, int len);
- private static native long getCSize(long jzentry);
+ // access to the native zentry object
+ private static native long getEntryTime(long jzentry);
+ private static native long getEntryCrc(long jzentry);
+ private static native long getEntryCSize(long jzentry);
+ private static native long getEntrySize(long jzentry);
+ private static native int getEntryMethod(long jzentry);
+ private static native int getEntryFlag(long jzentry);
- private static native long getSize(long jzentry);
+ private static final int JZENTRY_NAME = 0;
+ private static final int JZENTRY_EXTRA = 1;
+ private static final int JZENTRY_COMMENT = 2;
+ private static native byte[] getEntryBytes(long jzentry, int type);
- // Temporary add on for bug troubleshooting
private static native String getZipMessage(long jzfile);
}
--- a/jdk/src/share/classes/java/util/zip/ZipInputStream.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/util/zip/ZipInputStream.java Tue Apr 21 21:26:21 2009 -0700
@@ -29,6 +29,7 @@
import java.io.IOException;
import java.io.EOFException;
import java.io.PushbackInputStream;
+import java.nio.charset.Charset;
import static java.util.zip.ZipConstants64.*;
/**
@@ -54,6 +55,8 @@
// one entry
private boolean entryEOF = false;
+ private ZipCoder zc;
+
/**
* Check to make sure that this stream has not been closed
*/
@@ -65,14 +68,39 @@
/**
* Creates a new ZIP input stream.
+ *
+ * <p>The UTF-8 {@link java.nio.charset.Charset charset} is used to
+ * decode the entry names.
+ *
* @param in the actual input stream
*/
public ZipInputStream(InputStream in) {
+ this(in, Charset.forName("UTF-8"));
+ }
+
+ /**
+ * Creates a new ZIP input stream.
+ *
+ * @param in the actual input stream
+ *
+ * @param charset
+ * The {@link java.nio.charset.Charset {@code charset}} to be
+ * used to decode the ZIP entry name (ignored if the
+ * <a href="package-summary.html#lang_encoding"> language
+ * encoding bit</a> of the ZIP entry's general purpose bit
+ * flag is set).
+ *
+ * @since 1.7
+ */
+ public ZipInputStream(InputStream in, Charset charset) {
super(new PushbackInputStream(in, 512), new Inflater(true), 512);
usesDefaultInflater = true;
if(in == null) {
throw new NullPointerException("in is null");
}
+ if (charset == null)
+ throw new NullPointerException("charset is null");
+ this.zc = ZipCoder.get(charset);
}
/**
@@ -141,8 +169,8 @@
* @param len the maximum number of bytes read
* @return the actual number of bytes read, or -1 if the end of the
* entry is reached
- * @exception NullPointerException If <code>b</code> is <code>null</code>.
- * @exception IndexOutOfBoundsException If <code>off</code> is negative,
+ * @exception NullPointerException if <code>b</code> is <code>null</code>.
+ * @exception IndexOutOfBoundsException if <code>off</code> is negative,
* <code>len</code> is negative, or <code>len</code> is greater than
* <code>b.length - off</code>
* @exception ZipException if a ZIP file error has occurred
@@ -252,6 +280,8 @@
if (get32(tmpbuf, 0) != LOCSIG) {
return null;
}
+ // get flag first, we need check EFS.
+ flag = get16(tmpbuf, LOCFLG);
// get the entry name and create the ZipEntry first
int len = get16(tmpbuf, LOCNAM);
int blen = b.length;
@@ -262,9 +292,11 @@
b = new byte[blen];
}
readFully(b, 0, len);
- ZipEntry e = createZipEntry(getUTF8String(b, 0, len));
+ // Force to use UTF-8 if the EFS bit is ON, even the cs is NOT UTF-8
+ ZipEntry e = createZipEntry(((flag & EFS) != 0)
+ ? zc.toStringUTF8(b, len)
+ : zc.toString(b, len));
// now get the remaining fields for the entry
- flag = get16(tmpbuf, LOCFLG);
if ((flag & 1) == 1) {
throw new ZipException("encrypted ZIP entry not supported");
}
@@ -313,71 +345,6 @@
return e;
}
- /*
- * Fetches a UTF8-encoded String from the specified byte array.
- */
- private static String getUTF8String(byte[] b, int off, int len) {
- // First, count the number of characters in the sequence
- int count = 0;
- int max = off + len;
- int i = off;
- while (i < max) {
- int c = b[i++] & 0xff;
- switch (c >> 4) {
- case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
- // 0xxxxxxx
- count++;
- break;
- case 12: case 13:
- // 110xxxxx 10xxxxxx
- if ((b[i++] & 0xc0) != 0x80) {
- throw new IllegalArgumentException();
- }
- count++;
- break;
- case 14:
- // 1110xxxx 10xxxxxx 10xxxxxx
- if (((b[i++] & 0xc0) != 0x80) ||
- ((b[i++] & 0xc0) != 0x80)) {
- throw new IllegalArgumentException();
- }
- count++;
- break;
- default:
- // 10xxxxxx, 1111xxxx
- throw new IllegalArgumentException();
- }
- }
- if (i != max) {
- throw new IllegalArgumentException();
- }
- // Now decode the characters...
- char[] cs = new char[count];
- i = 0;
- while (off < max) {
- int c = b[off++] & 0xff;
- switch (c >> 4) {
- case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
- // 0xxxxxxx
- cs[i++] = (char)c;
- break;
- case 12: case 13:
- // 110xxxxx 10xxxxxx
- cs[i++] = (char)(((c & 0x1f) << 6) | (b[off++] & 0x3f));
- break;
- case 14:
- // 1110xxxx 10xxxxxx 10xxxxxx
- int t = (b[off++] & 0x3f) << 6;
- cs[i++] = (char)(((c & 0x0f) << 12) | t | (b[off++] & 0x3f));
- break;
- default:
- // 10xxxxxx, 1111xxxx
- throw new IllegalArgumentException();
- }
- }
- return new String(cs, 0, count);
- }
-
/**
* Creates a new <code>ZipEntry</code> object for the specified
* entry name.
--- a/jdk/src/share/classes/java/util/zip/ZipOutputStream.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/util/zip/ZipOutputStream.java Tue Apr 21 21:26:21 2009 -0700
@@ -27,6 +27,7 @@
import java.io.OutputStream;
import java.io.IOException;
+import java.nio.charset.Charset;
import java.util.Vector;
import java.util.HashSet;
import static java.util.zip.ZipConstants64.*;
@@ -44,19 +45,9 @@
private static class XEntry {
public final ZipEntry entry;
public final long offset;
- public final int flag;
public XEntry(ZipEntry entry, long offset) {
this.entry = entry;
this.offset = offset;
- this.flag = (entry.method == DEFLATED &&
- (entry.size == -1 ||
- entry.csize == -1 ||
- entry.crc == -1))
- // store size, compressed size, and crc-32 in data descriptor
- // immediately following the compressed entry data
- ? 8
- // store size, compressed size, and crc-32 in LOC header
- : 0;
}
}
@@ -66,12 +57,14 @@
private CRC32 crc = new CRC32();
private long written = 0;
private long locoff = 0;
- private String comment;
+ private byte[] comment;
private int method = DEFLATED;
private boolean finished;
private boolean closed = false;
+ private final ZipCoder zc;
+
private static int version(ZipEntry e) throws ZipException {
switch (e.method) {
case DEFLATED: return 20;
@@ -100,10 +93,31 @@
/**
* Creates a new ZIP output stream.
+ *
+ * <p>The UTF-8 {@link java.nio.charset.Charset charset} is used
+ * to encode the entry names and comments.
+ *
* @param out the actual output stream
*/
public ZipOutputStream(OutputStream out) {
+ this(out, Charset.forName("UTF-8"));
+ }
+
+ /**
+ * Creates a new ZIP output stream.
+ *
+ * @param out the actual output stream
+ *
+ * @param charset the {@link java.nio.charset.Charset </code>charset<code>}
+ * to be used to encode the entry names and comments
+ *
+ * @since 1.7
+ */
+ public ZipOutputStream(OutputStream out, Charset charset) {
super(out, new Deflater(Deflater.DEFAULT_COMPRESSION, true));
+ if (charset == null)
+ throw new NullPointerException("charset is null");
+ this.zc = ZipCoder.get(charset);
usesDefaultDeflater = true;
}
@@ -114,11 +128,11 @@
* ZIP file comment is greater than 0xFFFF bytes
*/
public void setComment(String comment) {
- if (comment != null && comment.length() > 0xffff/3
- && getUTF8Length(comment) > 0xffff) {
- throw new IllegalArgumentException("ZIP file comment too long.");
+ if (comment != null) {
+ this.comment = zc.getBytes(comment);
+ if (this.comment.length > 0xffff)
+ throw new IllegalArgumentException("ZIP file comment too long.");
}
- this.comment = comment;
}
/**
@@ -167,8 +181,15 @@
if (e.method == -1) {
e.method = method; // use default method
}
+ // store size, compressed size, and crc-32 in LOC header
+ e.flag = 0;
switch (e.method) {
case DEFLATED:
+ // store size, compressed size, and crc-32 in data descriptor
+ // immediately following the compressed entry data
+ if (e.size == -1 || e.csize == -1 || e.crc == -1)
+ e.flag = 8;
+
break;
case STORED:
// compressed size, uncompressed size, and crc-32 must all be
@@ -192,6 +213,8 @@
if (! names.add(e.name)) {
throw new ZipException("duplicate entry: " + e.name);
}
+ if (zc.isUTF8())
+ e.flag |= EFS;
current = new XEntry(e, written);
xentries.add(current);
writeLOC(current);
@@ -213,7 +236,7 @@
while (!def.finished()) {
deflate();
}
- if ((current.flag & 8) == 0) {
+ if ((e.flag & 8) == 0) {
// verify size, compressed size, and crc-32 settings
if (e.size != def.getBytesRead()) {
throw new ZipException(
@@ -343,11 +366,11 @@
*/
private void writeLOC(XEntry xentry) throws IOException {
ZipEntry e = xentry.entry;
- int flag = xentry.flag;
+ int flag = e.flag;
int elen = (e.extra != null) ? e.extra.length : 0;
boolean hasZip64 = false;
- writeInt(LOCSIG); // LOC header signature
+ writeInt(LOCSIG); // LOC header signature
if ((flag & 8) == 8) {
writeShort(version(e)); // version needed to extract
@@ -380,7 +403,7 @@
writeInt(e.size); // uncompressed size
}
}
- byte[] nameBytes = getUTF8Bytes(e.name);
+ byte[] nameBytes = zc.getBytes(e.name);
writeShort(nameBytes.length);
writeShort(elen);
writeBytes(nameBytes, 0, nameBytes.length);
@@ -417,7 +440,7 @@
*/
private void writeCEN(XEntry xentry) throws IOException {
ZipEntry e = xentry.entry;
- int flag = xentry.flag;
+ int flag = e.flag;
int version = version(e);
long csize = e.csize;
@@ -454,7 +477,7 @@
writeInt(e.crc); // crc-32
writeInt(csize); // compressed size
writeInt(size); // uncompressed size
- byte[] nameBytes = getUTF8Bytes(e.name);
+ byte[] nameBytes = zc.getBytes(e.name);
writeShort(nameBytes.length);
if (hasZip64) {
// + headid(2) + datasize(2)
@@ -464,8 +487,8 @@
}
byte[] commentBytes;
if (e.comment != null) {
- commentBytes = getUTF8Bytes(e.comment);
- writeShort(commentBytes.length);
+ commentBytes = zc.getBytes(e.comment);
+ writeShort(Math.min(commentBytes.length, 0xffff));
} else {
commentBytes = null;
writeShort(0);
@@ -489,7 +512,7 @@
writeBytes(e.extra, 0, e.extra.length);
}
if (commentBytes != null) {
- writeBytes(commentBytes, 0, commentBytes.length);
+ writeBytes(commentBytes, 0, Math.min(commentBytes.length, 0xffff));
}
}
@@ -541,9 +564,8 @@
writeInt(xlen); // length of central directory
writeInt(xoff); // offset of central directory
if (comment != null) { // zip file comment
- byte[] b = getUTF8Bytes(comment);
- writeShort(b.length);
- writeBytes(b, 0, b.length);
+ writeShort(comment.length);
+ writeBytes(comment, 0, comment.length);
} else {
writeShort(0);
}
@@ -594,60 +616,4 @@
super.out.write(b, off, len);
written += len;
}
-
- /*
- * Returns the length of String's UTF8 encoding.
- */
- static int getUTF8Length(String s) {
- int count = 0;
- for (int i = 0; i < s.length(); i++) {
- char ch = s.charAt(i);
- if (ch <= 0x7f) {
- count++;
- } else if (ch <= 0x7ff) {
- count += 2;
- } else {
- count += 3;
- }
- }
- return count;
- }
-
- /*
- * Returns an array of bytes representing the UTF8 encoding
- * of the specified String.
- */
- private static byte[] getUTF8Bytes(String s) {
- char[] c = s.toCharArray();
- int len = c.length;
- // Count the number of encoded bytes...
- int count = 0;
- for (int i = 0; i < len; i++) {
- int ch = c[i];
- if (ch <= 0x7f) {
- count++;
- } else if (ch <= 0x7ff) {
- count += 2;
- } else {
- count += 3;
- }
- }
- // Now return the encoded bytes...
- byte[] b = new byte[count];
- int off = 0;
- for (int i = 0; i < len; i++) {
- int ch = c[i];
- if (ch <= 0x7f) {
- b[off++] = (byte)ch;
- } else if (ch <= 0x7ff) {
- b[off++] = (byte)((ch >> 6) | 0xc0);
- b[off++] = (byte)((ch & 0x3f) | 0x80);
- } else {
- b[off++] = (byte)((ch >> 12) | 0xe0);
- b[off++] = (byte)(((ch >> 6) & 0x3f) | 0x80);
- b[off++] = (byte)((ch & 0x3f) | 0x80);
- }
- }
- return b;
- }
}
--- a/jdk/src/share/classes/java/util/zip/package.html Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/java/util/zip/package.html Tue Apr 21 21:26:21 2009 -0700
@@ -53,6 +53,11 @@
PKWARE ZIP File Format Specification</a>. The ZIP64(tm) format extensions
are used to overcome the size limitations of the original ZIP format.
<p>
+ <a name="lang_encoding">
+ <li>APPENDIX D of <a href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">
+ PKWARE ZIP File Format Specification</a> - Language Encoding Flag (EFS) to
+ encode ZIP entry filename and comment fields using UTF-8.
+<p>
<li><a href="http://www.isi.edu/in-notes/rfc1950.txt">
ZLIB Compressed Data Format Specification version 3.3</a>
--- a/jdk/src/share/classes/javax/management/monitor/CounterMonitor.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/javax/management/monitor/CounterMonitor.java Tue Apr 21 21:26:21 2009 -0700
@@ -599,7 +599,7 @@
*/
@Override
public MBeanNotificationInfo[] getNotificationInfo() {
- return notifsInfo;
+ return notifsInfo.clone();
}
/*
--- a/jdk/src/share/classes/javax/management/monitor/GaugeMonitor.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/javax/management/monitor/GaugeMonitor.java Tue Apr 21 21:26:21 2009 -0700
@@ -481,7 +481,7 @@
*/
@Override
public MBeanNotificationInfo[] getNotificationInfo() {
- return notifsInfo;
+ return notifsInfo.clone();
}
/*
--- a/jdk/src/share/classes/javax/management/monitor/Monitor.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/javax/management/monitor/Monitor.java Tue Apr 21 21:26:21 2009 -0700
@@ -32,7 +32,10 @@
import java.security.AccessControlContext;
import java.security.AccessController;
import java.security.PrivilegedAction;
+import java.security.ProtectionDomain;
import java.util.List;
+import java.util.Map;
+import java.util.WeakHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
@@ -163,7 +166,10 @@
/**
* AccessControlContext of the Monitor.start() caller.
*/
- private AccessControlContext acc;
+ private static final AccessControlContext noPermissionsACC =
+ new AccessControlContext(
+ new ProtectionDomain[] {new ProtectionDomain(null, null)});
+ private volatile AccessControlContext acc = noPermissionsACC;
/**
* Scheduler Service.
@@ -173,14 +179,20 @@
new DaemonThreadFactory("Scheduler"));
/**
+ * Map containing the thread pool executor per thread group.
+ */
+ private static final Map<ThreadPoolExecutor, Void> executors =
+ new WeakHashMap<ThreadPoolExecutor, Void>();
+
+ /**
+ * Lock for executors map.
+ */
+ private static final Object executorsLock = new Object();
+
+ /**
* Maximum Pool Size
*/
private static final int maximumPoolSize;
-
- /**
- * Executor Service.
- */
- private static final ThreadPoolExecutor executor;
static {
final String maximumPoolSizeSysProp = "jmx.x.monitor.maximum.pool.size";
final String maximumPoolSizeStr = AccessController.doPrivileged(
@@ -210,22 +222,9 @@
maximumPoolSize = maximumPoolSizeTmp;
}
}
- executor = new ThreadPoolExecutor(
- maximumPoolSize,
- maximumPoolSize,
- 60L,
- TimeUnit.SECONDS,
- new LinkedBlockingQueue<Runnable>(),
- new DaemonThreadFactory("Executor"));
- executor.allowCoreThreadTimeOut(true);
}
/**
- * Monitor task to be executed by the Executor Service.
- */
- private final MonitorTask monitorTask = new MonitorTask();
-
- /**
* Future associated to the current monitor task.
*/
private Future<?> monitorFuture;
@@ -233,7 +232,7 @@
/**
* Scheduler task to be executed by the Scheduler Service.
*/
- private final SchedulerTask schedulerTask = new SchedulerTask(monitorTask);
+ private final SchedulerTask schedulerTask = new SchedulerTask();
/**
* ScheduledFuture associated to the current scheduler task.
@@ -719,6 +718,7 @@
// Start the scheduler.
//
cleanupFutures();
+ schedulerTask.setMonitorTask(new MonitorTask());
schedulerFuture = scheduler.schedule(schedulerTask,
getGranularityPeriod(),
TimeUnit.MILLISECONDS);
@@ -748,7 +748,7 @@
// Reset the AccessControlContext.
//
- acc = null;
+ acc = noPermissionsACC;
// Reset the complex type attribute information
// such that it is recalculated again.
@@ -1467,7 +1467,7 @@
*/
private class SchedulerTask implements Runnable {
- private Runnable task = null;
+ private MonitorTask task;
/*
* ------------------------------------------
@@ -1475,7 +1475,16 @@
* ------------------------------------------
*/
- public SchedulerTask(Runnable task) {
+ public SchedulerTask() {
+ }
+
+ /*
+ * ------------------------------------------
+ * GETTERS/SETTERS
+ * ------------------------------------------
+ */
+
+ public void setMonitorTask(MonitorTask task) {
this.task = task;
}
@@ -1487,7 +1496,7 @@
public void run() {
synchronized (Monitor.this) {
- Monitor.this.monitorFuture = executor.submit(task);
+ Monitor.this.monitorFuture = task.submit();
}
}
}
@@ -1500,6 +1509,8 @@
*/
private class MonitorTask implements Runnable {
+ private ThreadPoolExecutor executor;
+
/*
* ------------------------------------------
* CONSTRUCTORS
@@ -1507,6 +1518,38 @@
*/
public MonitorTask() {
+ // Find out if there's already an existing executor for the calling
+ // thread and reuse it. Otherwise, create a new one and store it in
+ // the executors map. If there is a SecurityManager, the group of
+ // System.getSecurityManager() is used, else the group of the thread
+ // instantiating this MonitorTask, i.e. the group of the thread that
+ // calls "Monitor.start()".
+ SecurityManager s = System.getSecurityManager();
+ ThreadGroup group = (s != null) ? s.getThreadGroup() :
+ Thread.currentThread().getThreadGroup();
+ synchronized (executorsLock) {
+ for (ThreadPoolExecutor e : executors.keySet()) {
+ DaemonThreadFactory tf =
+ (DaemonThreadFactory) e.getThreadFactory();
+ ThreadGroup tg = tf.getThreadGroup();
+ if (tg == group) {
+ executor = e;
+ break;
+ }
+ }
+ if (executor == null) {
+ executor = new ThreadPoolExecutor(
+ maximumPoolSize,
+ maximumPoolSize,
+ 60L,
+ TimeUnit.SECONDS,
+ new LinkedBlockingQueue<Runnable>(),
+ new DaemonThreadFactory("ThreadGroup<" +
+ group.getName() + "> Executor", group));
+ executor.allowCoreThreadTimeOut(true);
+ executors.put(executor, null);
+ }
+ }
}
/*
@@ -1515,12 +1558,18 @@
* ------------------------------------------
*/
+ public Future<?> submit() {
+ return executor.submit(this);
+ }
+
public void run() {
final ScheduledFuture<?> sf;
+ final AccessControlContext ac;
synchronized (Monitor.this) {
sf = Monitor.this.schedulerFuture;
+ ac = Monitor.this.acc;
}
- AccessController.doPrivileged(new PrivilegedAction<Void>() {
+ PrivilegedAction<Void> action = new PrivilegedAction<Void>() {
public Void run() {
if (Monitor.this.isActive()) {
final int an[] = alreadyNotifieds;
@@ -1533,7 +1582,11 @@
}
return null;
}
- }, Monitor.this.acc);
+ };
+ if (ac == null) {
+ throw new SecurityException("AccessControlContext cannot be null");
+ }
+ AccessController.doPrivileged(action, ac);
synchronized (Monitor.this) {
if (Monitor.this.isActive() &&
Monitor.this.schedulerFuture == sf) {
@@ -1573,6 +1626,15 @@
namePrefix = "JMX Monitor " + poolName + " Pool [Thread-";
}
+ public DaemonThreadFactory(String poolName, ThreadGroup threadGroup) {
+ group = threadGroup;
+ namePrefix = "JMX Monitor " + poolName + " Pool [Thread-";
+ }
+
+ public ThreadGroup getThreadGroup() {
+ return group;
+ }
+
public Thread newThread(Runnable r) {
Thread t = new Thread(group,
r,
--- a/jdk/src/share/classes/javax/management/monitor/StringMonitor.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/javax/management/monitor/StringMonitor.java Tue Apr 21 21:26:21 2009 -0700
@@ -184,6 +184,7 @@
* @return The derived gauge of the specified object.
*
*/
+ @Override
public synchronized String getDerivedGauge(ObjectName object) {
return (String) super.getDerivedGauge(object);
}
@@ -199,6 +200,7 @@
* @return The derived gauge timestamp of the specified object.
*
*/
+ @Override
public synchronized long getDerivedGaugeTimeStamp(ObjectName object) {
return super.getDerivedGaugeTimeStamp(object);
}
@@ -341,8 +343,9 @@
* the Java class of the notification and the notification types sent by
* the string monitor.
*/
+ @Override
public MBeanNotificationInfo[] getNotificationInfo() {
- return notifsInfo;
+ return notifsInfo.clone();
}
/*
--- a/jdk/src/share/classes/javax/print/attribute/standard/MediaSize.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/javax/print/attribute/standard/MediaSize.java Tue Apr 21 21:26:21 2009 -0700
@@ -123,8 +123,10 @@
if (x > y) {
throw new IllegalArgumentException("X dimension > Y dimension");
}
- mediaName = media;
- mediaMap.put(mediaName, this);
+ if (media != null && mediaMap.get(media) == null) {
+ mediaName = media;
+ mediaMap.put(mediaName, this);
+ }
sizeVector.add(this);
}
@@ -147,8 +149,10 @@
if (x > y) {
throw new IllegalArgumentException("X dimension > Y dimension");
}
- mediaName = media;
- mediaMap.put(mediaName, this);
+ if (media != null && mediaMap.get(media) == null) {
+ mediaName = media;
+ mediaMap.put(mediaName, this);
+ }
sizeVector.add(this);
}
--- a/jdk/src/share/classes/sun/awt/image/GifImageDecoder.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/awt/image/GifImageDecoder.java Tue Apr 21 21:26:21 2009 -0700
@@ -585,9 +585,16 @@
System.out.print("Reading a " + width + " by " + height + " " +
(interlace ? "" : "non-") + "interlaced image...");
}
-
+ int initCodeSize = ExtractByte(block, 9);
+ if (initCodeSize >= 12) {
+ if (verbose) {
+ System.out.println("Invalid initial code size: " +
+ initCodeSize);
+ }
+ return false;
+ }
boolean ret = parseImage(x, y, width, height,
- interlace, ExtractByte(block, 9),
+ interlace, initCodeSize,
block, rasline, model);
if (!ret) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/sun/font/CreatedFontTracker.java Tue Apr 21 21:26:21 2009 -0700
@@ -0,0 +1,54 @@
+/*
+ * 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 sun.font;
+
+public class CreatedFontTracker {
+
+ public static final int MAX_FILE_SIZE = 32 * 1024 * 1024;
+ public static final int MAX_TOTAL_BYTES = 10 * MAX_FILE_SIZE;
+
+ static int numBytes;
+ static CreatedFontTracker tracker;
+
+ public static synchronized CreatedFontTracker getTracker() {
+ if (tracker == null) {
+ tracker = new CreatedFontTracker();
+ }
+ return tracker;
+ }
+
+ public synchronized int getNumBytes() {
+ return numBytes;
+ }
+
+ public synchronized void addBytes(int sz) {
+ numBytes += sz;
+ }
+
+ public synchronized void subBytes(int sz) {
+ numBytes -= sz;
+ }
+}
--- a/jdk/src/share/classes/sun/font/FileFont.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/font/FileFont.java Tue Apr 21 21:26:21 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2006 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-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
@@ -125,9 +125,9 @@
return true;
}
- void setFileToRemove(File file) {
+ void setFileToRemove(File file, CreatedFontTracker tracker) {
Disposer.addObjectRecord(this,
- new CreatedFontFileDisposerRecord(file));
+ new CreatedFontFileDisposerRecord(file, tracker));
}
/* This is called when a font scaler is determined to
@@ -246,12 +246,16 @@
return getScaler().getUnitsPerEm();
}
- private static class CreatedFontFileDisposerRecord implements DisposerRecord {
+ private static class CreatedFontFileDisposerRecord
+ implements DisposerRecord {
File fontFile = null;
+ CreatedFontTracker tracker;
- private CreatedFontFileDisposerRecord(File file) {
+ private CreatedFontFileDisposerRecord(File file,
+ CreatedFontTracker tracker) {
fontFile = file;
+ this.tracker = tracker;
}
public void dispose() {
@@ -260,6 +264,9 @@
public Object run() {
if (fontFile != null) {
try {
+ if (tracker != null) {
+ tracker.subBytes((int)fontFile.length());
+ }
/* REMIND: is it possible that the file is
* still open? It will be closed when the
* font2D is disposed but could this code
--- a/jdk/src/share/classes/sun/font/FontManager.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/font/FontManager.java Tue Apr 21 21:26:21 2009 -0700
@@ -2357,19 +2357,21 @@
static Vector<File> tmpFontFiles = null;
public static Font2D createFont2D(File fontFile, int fontFormat,
- boolean isCopy)
+ boolean isCopy,
+ CreatedFontTracker tracker)
throws FontFormatException {
String fontFilePath = fontFile.getPath();
FileFont font2D = null;
final File fFile = fontFile;
+ final CreatedFontTracker _tracker = tracker;
try {
switch (fontFormat) {
case Font.TRUETYPE_FONT:
font2D = new TrueTypeFont(fontFilePath, null, 0, true);
break;
case Font.TYPE1_FONT:
- font2D = new Type1Font(fontFilePath, null);
+ font2D = new Type1Font(fontFilePath, null, isCopy);
break;
default:
throw new FontFormatException("Unrecognised Font Format");
@@ -2379,6 +2381,9 @@
java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction() {
public Object run() {
+ if (_tracker != null) {
+ _tracker.subBytes((int)fFile.length());
+ }
fFile.delete();
return null;
}
@@ -2387,7 +2392,7 @@
throw(e);
}
if (isCopy) {
- font2D.setFileToRemove(fontFile);
+ font2D.setFileToRemove(fontFile, tracker);
synchronized (FontManager.class) {
if (tmpFontFiles == null) {
--- a/jdk/src/share/classes/sun/font/TrueTypeFont.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/font/TrueTypeFont.java Tue Apr 21 21:26:21 2009 -0700
@@ -175,8 +175,17 @@
super(platname, nativeNames);
useJavaRasterizer = javaRasterizer;
fontRank = Font2D.TTF_RANK;
- verify();
- init(fIndex);
+ try {
+ verify();
+ init(fIndex);
+ } catch (Throwable t) {
+ close();
+ if (t instanceof FontFormatException) {
+ throw (FontFormatException)t;
+ } else {
+ throw new FontFormatException("Unexpected runtime exception.");
+ }
+ }
Disposer.addObjectRecord(this, disposerRecord);
}
--- a/jdk/src/share/classes/sun/font/Type1Font.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/font/Type1Font.java Tue Apr 21 21:26:21 2009 -0700
@@ -39,6 +39,7 @@
import java.nio.channels.ClosedChannelException;
import java.nio.channels.FileChannel;
import sun.java2d.Disposer;
+import sun.java2d.DisposerRecord;
import java.util.HashSet;
import java.util.HashMap;
import java.awt.Font;
@@ -76,6 +77,27 @@
*/
public class Type1Font extends FileFont {
+ private static class T1DisposerRecord implements DisposerRecord {
+ String fileName = null;
+
+ T1DisposerRecord(String name) {
+ fileName = name;
+ }
+
+ public synchronized void dispose() {
+ java.security.AccessController.doPrivileged(
+ new java.security.PrivilegedAction() {
+ public Object run() {
+
+ if (fileName != null) {
+ (new java.io.File(fileName)).delete();
+ }
+ return null;
+ }
+ });
+ }
+ }
+
WeakReference bufferRef = new WeakReference(null);
private String psName = null;
@@ -125,18 +147,42 @@
/**
+ * Constructs a Type1 Font.
+ * @param platname - Platform identifier of the font. Typically file name.
+ * @param nativeNames - Native names - typically XLFDs on Unix.
+ */
+ public Type1Font(String platname, Object nativeNames)
+ throws FontFormatException {
+
+ this(platname, nativeNames, false);
+ }
+
+ /**
* - does basic verification of the file
* - reads the names (full, family).
* - determines the style of the font.
* @throws FontFormatException - if the font can't be opened
* or fails verification, or there's no usable cmap
*/
- public Type1Font(String platname, Object nativeNames)
+ public Type1Font(String platname, Object nativeNames, boolean createdCopy)
throws FontFormatException {
super(platname, nativeNames);
fontRank = Font2D.TYPE1_RANK;
checkedNatives = true;
- verify();
+ try {
+ verify();
+ } catch (Throwable t) {
+ if (createdCopy) {
+ T1DisposerRecord ref = new T1DisposerRecord(platname);
+ Disposer.addObjectRecord(bufferRef, ref);
+ bufferRef = null;
+ }
+ if (t instanceof FontFormatException) {
+ throw (FontFormatException)t;
+ } else {
+ throw new FontFormatException("Unexpected runtime exception.");
+ }
+ }
}
private synchronized ByteBuffer getBuffer() throws FontFormatException {
--- a/jdk/src/share/classes/sun/io/ByteToCharBig5.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/io/ByteToCharBig5.java Tue Apr 21 21:26:21 2009 -0700
@@ -26,6 +26,8 @@
package sun.io;
+import sun.nio.cs.ext.Big5;
+
/**
* Tables and data to convert Big5 to Unicode
*
@@ -34,2179 +36,16 @@
public class ByteToCharBig5 extends ByteToCharDoubleByte {
+ private final static Big5 nioCoder = new Big5();
+
public String getCharacterEncoding() {
return "Big5";
}
public ByteToCharBig5() {
- super.index1 = index1;
- super.index2 = index2;
+ super.index1 = nioCoder.getDecoderIndex1();
+ super.index2 = nioCoder.getDecoderIndex2();
start = 0x40;
end = 0xFE;
}
-
- private final static String innerIndex0=
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u3000"+
- "\uFF0C\u3001\u3002\uFF0E\u2022\uFF1B\uFF1A\uFF1F"+
- "\uFF01\uFE30\u2026\u2025\uFE50\uFF64\uFE52\u00B7"+
- "\uFE54\uFE55\uFE56\uFE57\uFF5C\u2013\uFE31\u2014"+
- "\uFE33\uFF3F\uFE34\uFE4F\uFF08\uFF09\uFE35\uFE36"+
- "\uFF5B\uFF5D\uFE37\uFE38\u3014\u3015\uFE39\uFE3A"+
- "\u3010\u3011\uFE3B\uFE3C\u300A\u300B\uFE3D\uFE3E"+
- "\u3008\u3009\uFE3F\uFE40\u300C\u300D\uFE41\uFE42"+
- "\u300E\u300F\uFE43\uFE44\uFE59\uFE5A\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFE5B\uFE5C\uFE5D\uFE5E\u2018\u2019\u201C\u201D"+
- "\u301D\u301E\u2035\u2032\uFF03\uFF06\uFF0A\u203B"+
- "\u00A7\u3003\u25CB\u25CF\u25B3\u25B2\u25CE\u2606"+
- "\u2605\u25C7\u25C6\u25A1\u25A0\u25BD\u25BC\u32A3"+
- "\u2105\u203E\uFFFD\uFF3F\uFFFD\uFE49\uFE4A\uFE4D"+
- "\uFE4E\uFE4B\uFE4C\uFE5F\uFE60\uFE61\uFF0B\uFF0D"+
- "\u00D7\u00F7\u00B1\u221A\uFF1C\uFF1E\uFF1D\u2266"+
- "\u2267\u2260\u221E\u2252\u2261\uFE62\uFE63\uFE64"+
- "\uFE65\uFE66\u223C\u2229\u222A\u22A5\u2220\u221F"+
- "\u22BF\u33D2\u33D1\u222B\u222E\u2235\u2234\u2640"+
- "\u2642\u2641\u2609\u2191\u2193\u2190\u2192\u2196"+
- "\u2197\u2199\u2198\u2225\u2223\u2571\u2572\uFF0F"+
- "\uFF3C\uFF04\u00A5\u3012\u00A2\u00A3\uFF05\uFF20"+
- "\u2103\u2109\uFE69\uFE6A\uFE6B\u33D5\u339C\u339D"+
- "\u339E\u33CE\u33A1\u338E\u338F\u33C4\u00B0\u5159"+
- "\u515B\u515E\u515D\u5161\u5163\u55E7\u74E9\u7CCE"+
- "\u2581\u2582\u2583\u2584\u2585\u2586\u2587\u2588"+
- "\u258F\u258E\u258D\u258C\u258B\u258A\u2589\u253C"+
- "\u2534\u252C\u2524\u251C\u2594\u2500\u2502\u2595"+
- "\u250C\u2510\u2514\u2518\u256D\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u256E"+
- "\u2570\u256F\u2550\u255E\u256A\u2561\u25E2\u25E3"+
- "\u25E5\u25E4\u2571\u2572\u2573\uFF10\uFF11\uFF12"+
- "\uFF13\uFF14\uFF15\uFF16\uFF17\uFF18\uFF19\u2160"+
- "\u2161\u2162\u2163\u2164\u2165\u2166\u2167\u2168"+
- "\u2169\u3021\u3022\u3023\u3024\u3025\u3026\u3027"+
- "\u3028\u3029\u5341\u5344\u5345\uFF21\uFF22\uFF23"+
- "\uFF24\uFF25\uFF26\uFF27\uFF28\uFF29\uFF2A\uFF2B"+
- "\uFF2C\uFF2D\uFF2E\uFF2F\uFF30\uFF31\uFF32\uFF33"+
- "\uFF34\uFF35\uFF36\uFF37\uFF38\uFF39\uFF3A\uFF41"+
- "\uFF42\uFF43\uFF44\uFF45\uFF46\uFF47\uFF48\uFF49"+
- "\uFF4A\uFF4B\uFF4C\uFF4D\uFF4E\uFF4F\uFF50\uFF51"+
- "\uFF52\uFF53\uFF54\uFF55\uFF56\uFF57\uFF58\uFF59"+
- "\uFF5A\u0391\u0392\u0393\u0394\u0395\u0396\u0397"+
- "\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F"+
- "\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8"+
- "\u03A9\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7"+
- "\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF"+
- "\u03C0\u03C1\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8"+
- "\u03C9\u3105\u3106\u3107\u3108\u3109\u310A\u310B"+
- "\u310C\u310D\u310E\u310F\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u3110\u3111"+
- "\u3112\u3113\u3114\u3115\u3116\u3117\u3118\u3119"+
- "\u311A\u311B\u311C\u311D\u311E\u311F\u3120\u3121"+
- "\u3122\u3123\u3124\u3125\u3126\u3127\u3128\u3129"+
- "\u02D9\u02C9\u02CA\u02C7\u02CB\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\u4E00\u4E59\u4E01\u4E03"+
- "\u4E43\u4E5D\u4E86\u4E8C\u4EBA\u513F\u5165\u516B"+
- "\u51E0\u5200\u5201\u529B\u5315\u5341\u535C\u53C8"+
- "\u4E09\u4E0B\u4E08\u4E0A\u4E2B\u4E38\u51E1\u4E45"+
- "\u4E48\u4E5F\u4E5E\u4E8E\u4EA1\u5140\u5203\u52FA"+
- "\u5343\u53C9\u53E3\u571F\u58EB\u5915\u5927\u5973"+
- "\u5B50\u5B51\u5B53\u5BF8\u5C0F\u5C22\u5C38\u5C71"+
- "\u5DDD\u5DE5\u5DF1\u5DF2\u5DF3\u5DFE\u5E72\u5EFE"+
- "\u5F0B\u5F13\u624D\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u4E11\u4E10\u4E0D"+
- "\u4E2D\u4E30\u4E39\u4E4B\u5C39\u4E88\u4E91\u4E95"+
- "\u4E92\u4E94\u4EA2\u4EC1\u4EC0\u4EC3\u4EC6\u4EC7"+
- "\u4ECD\u4ECA\u4ECB\u4EC4\u5143\u5141\u5167\u516D"+
- "\u516E\u516C\u5197\u51F6\u5206\u5207\u5208\u52FB"+
- "\u52FE\u52FF\u5316\u5339\u5348\u5347\u5345\u535E"+
- "\u5384\u53CB\u53CA\u53CD\u58EC\u5929\u592B\u592A"+
- "\u592D\u5B54\u5C11\u5C24\u5C3A\u5C6F\u5DF4\u5E7B"+
- "\u5EFF\u5F14\u5F15\u5FC3\u6208\u6236\u624B\u624E"+
- "\u652F\u6587\u6597\u65A4\u65B9\u65E5\u66F0\u6708"+
- "\u6728\u6B20\u6B62\u6B79\u6BCB\u6BD4\u6BDB\u6C0F"+
- "\u6C34\u706B\u722A\u7236\u723B\u7247\u7259\u725B"+
- "\u72AC\u738B\u4E19\u4E16\u4E15\u4E14\u4E18\u4E3B"+
- "\u4E4D\u4E4F\u4E4E\u4EE5\u4ED8\u4ED4\u4ED5\u4ED6"+
- "\u4ED7\u4EE3\u4EE4\u4ED9\u4EDE\u5145\u5144\u5189"+
- "\u518A\u51AC\u51F9\u51FA\u51F8\u520A\u52A0\u529F"+
- "\u5305\u5306\u5317\u531D\u4EDF\u534A\u5349\u5361"+
- "\u5360\u536F\u536E\u53BB\u53EF\u53E4\u53F3\u53EC"+
- "\u53EE\u53E9\u53E8\u53FC\u53F8\u53F5\u53EB\u53E6"+
- "\u53EA\u53F2\u53F1\u53F0\u53E5\u53ED\u53FB\u56DB"+
- "\u56DA\u5916\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\u592E\u5931\u5974\u5976"+
- "\u5B55\u5B83\u5C3C\u5DE8\u5DE7\u5DE6\u5E02\u5E03"+
- "\u5E73\u5E7C\u5F01\u5F18\u5F17\u5FC5\u620A\u6253"+
- "\u6254\u6252\u6251\u65A5\u65E6\u672E\u672C\u672A"+
- "\u672B\u672D\u6B63\u6BCD\u6C11\u6C10\u6C38\u6C41"+
- "\u6C40\u6C3E\u72AF\u7384\u7389\u74DC\u74E6\u7518"+
- "\u751F\u7528\u7529\u7530\u7531\u7532\u7533\u758B"+
- "\u767D\u76AE\u76BF\u76EE\u77DB\u77E2\u77F3\u793A"+
- "\u79BE\u7A74\u7ACB\u4E1E\u4E1F\u4E52\u4E53\u4E69"+
- "\u4E99\u4EA4\u4EA6\u4EA5\u4EFF\u4F09\u4F19\u4F0A"+
- "\u4F15\u4F0D\u4F10\u4F11\u4F0F\u4EF2\u4EF6\u4EFB"+
- "\u4EF0\u4EF3\u4EFD\u4F01\u4F0B\u5149\u5147\u5146"+
- "\u5148\u5168\u5171\u518D\u51B0\u5217\u5211\u5212"+
- "\u520E\u5216\u52A3\u5308\u5321\u5320\u5370\u5371"+
- "\u5409\u540F\u540C\u540A\u5410\u5401\u540B\u5404"+
- "\u5411\u540D\u5408\u5403\u540E\u5406\u5412\u56E0"+
- "\u56DE\u56DD\u5733\u5730\u5728\u572D\u572C\u572F"+
- "\u5729\u5919\u591A\u5937\u5938\u5984\u5978\u5983"+
- "\u597D\u5979\u5982\u5981\u5B57\u5B58\u5B87\u5B88"+
- "\u5B85\u5B89\u5BFA\u5C16\u5C79\u5DDE\u5E06\u5E76"+
- "\u5E74\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\u5F0F\u5F1B\u5FD9\u5FD6\u620E"+
- "\u620C\u620D\u6210\u6263\u625B\u6258\u6536\u65E9"+
- "\u65E8\u65EC\u65ED\u66F2\u66F3\u6709\u673D\u6734"+
- "\u6731\u6735\u6B21\u6B64\u6B7B\u6C16\u6C5D\u6C57"+
- "\u6C59\u6C5F\u6C60\u6C50\u6C55\u6C61\u6C5B\u6C4D"+
- "\u6C4E\u7070\u725F\u725D\u767E\u7AF9\u7C73\u7CF8"+
- "\u7F36\u7F8A\u7FBD\u8001\u8003\u800C\u8012\u8033"+
- "\u807F\u8089\u808B\u808C\u81E3\u81EA\u81F3\u81FC"+
- "\u820C\u821B\u821F\u826E\u8272\u827E\u866B\u8840"+
- "\u884C\u8863\u897F\u9621\u4E32\u4EA8\u4F4D\u4F4F"+
- "\u4F47\u4F57\u4F5E\u4F34\u4F5B\u4F55\u4F30\u4F50"+
- "\u4F51\u4F3D\u4F3A\u4F38\u4F43\u4F54\u4F3C\u4F46"+
- "\u4F63\u4F5C\u4F60\u4F2F\u4F4E\u4F36\u4F59\u4F5D"+
- "\u4F48\u4F5A\u514C\u514B\u514D\u5175\u51B6\u51B7"+
- "\u5225\u5224\u5229\u522A\u5228\u52AB\u52A9\u52AA"+
- "\u52AC\u5323\u5373\u5375\u541D\u542D\u541E\u543E"+
- "\u5426\u544E\u5427\u5446\u5443\u5433\u5448\u5442"+
- "\u541B\u5429\u544A\u5439\u543B\u5438\u542E\u5435"+
- "\u5436\u5420\u543C\u5440\u5431\u542B\u541F\u542C"+
- "\u56EA\u56F0\u56E4\u56EB\u574A\u5751\u5740\u574D"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\u5747\u574E\u573E\u5750\u574F\u573B"+
- "\u58EF\u593E\u599D\u5992\u59A8\u599E\u59A3\u5999"+
- "\u5996\u598D\u59A4\u5993\u598A\u59A5\u5B5D\u5B5C"+
- "\u5B5A\u5B5B\u5B8C\u5B8B\u5B8F\u5C2C\u5C40\u5C41"+
- "\u5C3F\u5C3E\u5C90\u5C91\u5C94\u5C8C\u5DEB\u5E0C"+
- "\u5E8F\u5E87\u5E8A\u5EF7\u5F04\u5F1F\u5F64\u5F62"+
- "\u5F77\u5F79\u5FD8\u5FCC\u5FD7\u5FCD\u5FF1\u5FEB"+
- "\u5FF8\u5FEA\u6212\u6211\u6284\u6297\u6296\u6280"+
- "\u6276\u6289\u626D\u628A\u627C\u627E\u6279\u6273"+
- "\u6292\u626F\u6298\u626E\u6295\u6293\u6291\u6286"+
- "\u6539\u653B\u6538\u65F1\u66F4\u675F\u674E\u674F"+
- "\u6750\u6751\u675C\u6756\u675E\u6749\u6746\u6760"+
- "\u6753\u6757\u6B65\u6BCF\u6C42\u6C5E\u6C99\u6C81"+
- "\u6C88\u6C89\u6C85\u6C9B\u6C6A\u6C7A\u6C90\u6C70"+
- "\u6C8C\u6C68\u6C96\u6C92\u6C7D\u6C83\u6C72\u6C7E"+
- "\u6C74\u6C86\u6C76\u6C8D\u6C94\u6C98\u6C82\u7076"+
- "\u707C\u707D\u7078\u7262\u7261\u7260\u72C4\u72C2"+
- "\u7396\u752C\u752B\u7537\u7538\u7682\u76EF\u77E3"+
- "\u79C1\u79C0\u79BF\u7A76\u7CFB\u7F55\u8096\u8093"+
- "\u809D\u8098\u809B\u809A\u80B2\u826F\u8292\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\u828B\u828D\u898B\u89D2\u8A00\u8C37\u8C46"+
- "\u8C55\u8C9D\u8D64\u8D70\u8DB3\u8EAB\u8ECA\u8F9B"+
- "\u8FB0\u8FC2\u8FC6\u8FC5\u8FC4\u5DE1\u9091\u90A2"+
- "\u90AA\u90A6\u90A3\u9149\u91C6\u91CC\u9632\u962E"+
- "\u9631\u962A\u962C\u4E26\u4E56\u4E73\u4E8B\u4E9B"+
- "\u4E9E\u4EAB\u4EAC\u4F6F\u4F9D\u4F8D\u4F73\u4F7F"+
- "\u4F6C\u4F9B\u4F8B\u4F86\u4F83\u4F70\u4F75\u4F88"+
- "\u4F69\u4F7B\u4F96\u4F7E\u4F8F\u4F91\u4F7A\u5154"+
- "\u5152\u5155\u5169\u5177\u5176\u5178\u51BD\u51FD"+
- "\u523B\u5238\u5237\u523A\u5230\u522E\u5236\u5241"+
- "\u52BE\u52BB\u5352\u5354\u5353\u5351\u5366\u5377"+
- "\u5378\u5379\u53D6\u53D4\u53D7\u5473\u5475\u5496"+
- "\u5478\u5495\u5480\u547B\u5477\u5484\u5492\u5486"+
- "\u547C\u5490\u5471\u5476\u548C\u549A\u5462\u5468"+
- "\u548B\u547D\u548E\u56FA\u5783\u5777\u576A\u5769"+
- "\u5761\u5766\u5764\u577C\u591C\u5949\u5947\u5948"+
- "\u5944\u5954\u59BE\u59BB\u59D4\u59B9\u59AE\u59D1"+
- "\u59C6\u59D0\u59CD\u59CB\u59D3\u59CA\u59AF\u59B3"+
- "\u59D2\u59C5\u5B5F\u5B64\u5B63\u5B97\u5B9A\u5B98"+
- "\u5B9C\u5B99\u5B9B\u5C1A\u5C48\u5C45\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\u5C46\u5CB7\u5CA1\u5CB8\u5CA9\u5CAB\u5CB1\u5CB3"+
- "\u5E18\u5E1A\u5E16\u5E15\u5E1B\u5E11\u5E78\u5E9A"+
- "\u5E97\u5E9C\u5E95\u5E96\u5EF6\u5F26\u5F27\u5F29"+
- "\u5F80\u5F81\u5F7F\u5F7C\u5FDD\u5FE0\u5FFD\u5FF5"+
- "\u5FFF\u600F\u6014\u602F\u6035\u6016\u602A\u6015"+
- "\u6021\u6027\u6029\u602B\u601B\u6216\u6215\u623F"+
- "\u623E\u6240\u627F\u62C9\u62CC\u62C4\u62BF\u62C2"+
- "\u62B9\u62D2\u62DB\u62AB\u62D3\u62D4\u62CB\u62C8"+
- "\u62A8\u62BD\u62BC\u62D0\u62D9\u62C7\u62CD\u62B5"+
- "\u62DA\u62B1\u62D8\u62D6\u62D7\u62C6\u62AC\u62CE"+
- "\u653E\u65A7\u65BC\u65FA\u6614\u6613\u660C\u6606"+
- "\u6602\u660E\u6600\u660F\u6615\u660A\u6607\u670D"+
- "\u670B\u676D\u678B\u6795\u6771\u679C\u6773\u6777"+
- "\u6787\u679D\u6797\u676F\u6770\u677F\u6789\u677E"+
- "\u6790\u6775\u679A\u6793\u677C\u676A\u6772\u6B23"+
- "\u6B66\u6B67\u6B7F\u6C13\u6C1B\u6CE3\u6CE8\u6CF3"+
- "\u6CB1\u6CCC\u6CE5\u6CB3\u6CBD\u6CBE\u6CBC\u6CE2"+
- "\u6CAB\u6CD5\u6CD3\u6CB8\u6CC4\u6CB9\u6CC1\u6CAE"+
- "\u6CD7\u6CC5\u6CF1\u6CBF\u6CBB\u6CE1\u6CDB\u6CCA"+
- "\u6CAC\u6CEF\u6CDC\u6CD6\u6CE0\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7095"+
- "\u708E\u7092\u708A\u7099\u722C\u722D\u7238\u7248"+
- "\u7267\u7269\u72C0\u72CE\u72D9\u72D7\u72D0\u73A9"+
- "\u73A8\u739F\u73AB\u73A5\u753D\u759D\u7599\u759A"+
- "\u7684\u76C2\u76F2\u76F4\u77E5\u77FD\u793E\u7940"+
- "\u7941\u79C9\u79C8\u7A7A\u7A79\u7AFA\u7CFE\u7F54"+
- "\u7F8C\u7F8B\u8005\u80BA\u80A5\u80A2\u80B1\u80A1"+
- "\u80AB\u80A9\u80B4\u80AA\u80AF\u81E5\u81FE\u820D"+
- "\u82B3\u829D\u8299\u82AD\u82BD\u829F\u82B9\u82B1"+
- "\u82AC\u82A5\u82AF\u82B8\u82A3\u82B0\u82BE\u82B7"+
- "\u864E\u8671\u521D\u8868\u8ECB\u8FCE\u8FD4\u8FD1"+
- "\u90B5\u90B8\u90B1\u90B6\u91C7\u91D1\u9577\u9580"+
- "\u961C\u9640\u963F\u963B\u9644\u9642\u96B9\u96E8"+
- "\u9752\u975E\u4E9F\u4EAD\u4EAE\u4FE1\u4FB5\u4FAF"+
- "\u4FBF\u4FE0\u4FD1\u4FCF\u4FDD\u4FC3\u4FB6\u4FD8"+
- "\u4FDF\u4FCA\u4FD7\u4FAE\u4FD0\u4FC4\u4FC2\u4FDA"+
- "\u4FCE\u4FDE\u4FB7\u5157\u5192\u5191\u51A0\u524E"+
- "\u5243\u524A\u524D\u524C\u524B\u5247\u52C7\u52C9"+
- "\u52C3\u52C1\u530D\u5357\u537B\u539A\u53DB\u54AC"+
- "\u54C0\u54A8\u54CE\u54C9\u54B8\u54A6\u54B3\u54C7"+
- "\u54C2\u54BD\u54AA\u54C1\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u54C4\u54C8"+
- "\u54AF\u54AB\u54B1\u54BB\u54A9\u54A7\u54BF\u56FF"+
- "\u5782\u578B\u57A0\u57A3\u57A2\u57CE\u57AE\u5793"+
- "\u5955\u5951\u594F\u594E\u5950\u59DC\u59D8\u59FF"+
- "\u59E3\u59E8\u5A03\u59E5\u59EA\u59DA\u59E6\u5A01"+
- "\u59FB\u5B69\u5BA3\u5BA6\u5BA4\u5BA2\u5BA5\u5C01"+
- "\u5C4E\u5C4F\u5C4D\u5C4B\u5CD9\u5CD2\u5DF7\u5E1D"+
- "\u5E25\u5E1F\u5E7D\u5EA0\u5EA6\u5EFA\u5F08\u5F2D"+
- "\u5F65\u5F88\u5F85\u5F8A\u5F8B\u5F87\u5F8C\u5F89"+
- "\u6012\u601D\u6020\u6025\u600E\u6028\u604D\u6070"+
- "\u6068\u6062\u6046\u6043\u606C\u606B\u606A\u6064"+
- "\u6241\u62DC\u6316\u6309\u62FC\u62ED\u6301\u62EE"+
- "\u62FD\u6307\u62F1\u62F7\u62EF\u62EC\u62FE\u62F4"+
- "\u6311\u6302\u653F\u6545\u65AB\u65BD\u65E2\u6625"+
- "\u662D\u6620\u6627\u662F\u661F\u6628\u6631\u6624"+
- "\u66F7\u67FF\u67D3\u67F1\u67D4\u67D0\u67EC\u67B6"+
- "\u67AF\u67F5\u67E9\u67EF\u67C4\u67D1\u67B4\u67DA"+
- "\u67E5\u67B8\u67CF\u67DE\u67F3\u67B0\u67D9\u67E2"+
- "\u67DD\u67D2\u6B6A\u6B83\u6B86\u6BB5\u6BD2\u6BD7"+
- "\u6C1F\u6CC9\u6D0B\u6D32\u6D2A\u6D41\u6D25\u6D0C"+
- "\u6D31\u6D1E\u6D17\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6D3B\u6D3D\u6D3E"+
- "\u6D36\u6D1B\u6CF5\u6D39\u6D27\u6D38\u6D29\u6D2E"+
- "\u6D35\u6D0E\u6D2B\u70AB\u70BA\u70B3\u70AC\u70AF"+
- "\u70AD\u70B8\u70AE\u70A4\u7230\u7272\u726F\u7274"+
- "\u72E9\u72E0\u72E1\u73B7\u73CA\u73BB\u73B2\u73CD"+
- "\u73C0\u73B3\u751A\u752D\u754F\u754C\u754E\u754B"+
- "\u75AB\u75A4\u75A5\u75A2\u75A3\u7678\u7686\u7687"+
- "\u7688\u76C8\u76C6\u76C3\u76C5\u7701\u76F9\u76F8"+
- "\u7709\u770B\u76FE\u76FC\u7707\u77DC\u7802\u7814"+
- "\u780C\u780D\u7946\u7949\u7948\u7947\u79B9\u79BA"+
- "\u79D1\u79D2\u79CB\u7A7F\u7A81\u7AFF\u7AFD\u7C7D"+
- "\u7D02\u7D05\u7D00\u7D09\u7D07\u7D04\u7D06\u7F38"+
- "\u7F8E\u7FBF\u8004\u8010\u800D\u8011\u8036\u80D6"+
- "\u80E5\u80DA\u80C3\u80C4\u80CC\u80E1\u80DB\u80CE"+
- "\u80DE\u80E4\u80DD\u81F4\u8222\u82E7\u8303\u8305"+
- "\u82E3\u82DB\u82E6\u8304\u82E5\u8302\u8309\u82D2"+
- "\u82D7\u82F1\u8301\u82DC\u82D4\u82D1\u82DE\u82D3"+
- "\u82DF\u82EF\u8306\u8650\u8679\u867B\u867A\u884D"+
- "\u886B\u8981\u89D4\u8A08\u8A02\u8A03\u8C9E\u8CA0"+
- "\u8D74\u8D73\u8DB4\u8ECD\u8ECC\u8FF0\u8FE6\u8FE2"+
- "\u8FEA\u8FE5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\u8FED\u8FEB\u8FE4\u8FE8"+
- "\u90CA\u90CE\u90C1\u90C3\u914B\u914A\u91CD\u9582"+
- "\u9650\u964B\u964C\u964D\u9762\u9769\u97CB\u97ED"+
- "\u97F3\u9801\u98A8\u98DB\u98DF\u9996\u9999\u4E58"+
- "\u4EB3\u500C\u500D\u5023\u4FEF\u5026\u5025\u4FF8"+
- "\u5029\u5016\u5006\u503C\u501F\u501A\u5012\u5011"+
- "\u4FFA\u5000\u5014\u5028\u4FF1\u5021\u500B\u5019"+
- "\u5018\u4FF3\u4FEE\u502D\u502A\u4FFE\u502B\u5009"+
- "\u517C\u51A4\u51A5\u51A2\u51CD\u51CC\u51C6\u51CB"+
- "\u5256\u525C\u5254\u525B\u525D\u532A\u537F\u539F"+
- "\u539D\u53DF\u54E8\u5510\u5501\u5537\u54FC\u54E5"+
- "\u54F2\u5506\u54FA\u5514\u54E9\u54ED\u54E1\u5509"+
- "\u54EE\u54EA\u54E6\u5527\u5507\u54FD\u550F\u5703"+
- "\u5704\u57C2\u57D4\u57CB\u57C3\u5809\u590F\u5957"+
- "\u5958\u595A\u5A11\u5A18\u5A1C\u5A1F\u5A1B\u5A13"+
- "\u59EC\u5A20\u5A23\u5A29\u5A25\u5A0C\u5A09\u5B6B"+
- "\u5C58\u5BB0\u5BB3\u5BB6\u5BB4\u5BAE\u5BB5\u5BB9"+
- "\u5BB8\u5C04\u5C51\u5C55\u5C50\u5CED\u5CFD\u5CFB"+
- "\u5CEA\u5CE8\u5CF0\u5CF6\u5D01\u5CF4\u5DEE\u5E2D"+
- "\u5E2B\u5EAB\u5EAD\u5EA7\u5F31\u5F92\u5F91\u5F90"+
- "\u6059\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\u6063\u6065\u6050\u6055\u606D"+
- "\u6069\u606F\u6084\u609F\u609A\u608D\u6094\u608C"+
- "\u6085\u6096\u6247\u62F3\u6308\u62FF\u634E\u633E"+
- "\u632F\u6355\u6342\u6346\u634F\u6349\u633A\u6350"+
- "\u633D\u632A\u632B\u6328\u634D\u634C\u6548\u6549"+
- "\u6599\u65C1\u65C5\u6642\u6649\u664F\u6643\u6652"+
- "\u664C\u6645\u6641\u66F8\u6714\u6715\u6717\u6821"+
- "\u6838\u6848\u6846\u6853\u6839\u6842\u6854\u6829"+
- "\u68B3\u6817\u684C\u6851\u683D\u67F4\u6850\u6840"+
- "\u683C\u6843\u682A\u6845\u6813\u6818\u6841\u6B8A"+
- "\u6B89\u6BB7\u6C23\u6C27\u6C28\u6C26\u6C24\u6CF0"+
- "\u6D6A\u6D95\u6D88\u6D87\u6D66\u6D78\u6D77\u6D59"+
- "\u6D93\u6D6C\u6D89\u6D6E\u6D5A\u6D74\u6D69\u6D8C"+
- "\u6D8A\u6D79\u6D85\u6D65\u6D94\u70CA\u70D8\u70E4"+
- "\u70D9\u70C8\u70CF\u7239\u7279\u72FC\u72F9\u72FD"+
- "\u72F8\u72F7\u7386\u73ED\u7409\u73EE\u73E0\u73EA"+
- "\u73DE\u7554\u755D\u755C\u755A\u7559\u75BE\u75C5"+
- "\u75C7\u75B2\u75B3\u75BD\u75BC\u75B9\u75C2\u75B8"+
- "\u768B\u76B0\u76CA\u76CD\u76CE\u7729\u771F\u7720"+
- "\u7728\u77E9\u7830\u7827\u7838\u781D\u7834\u7837"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\u7825\u782D\u7820\u781F\u7832\u7955"+
- "\u7950\u7960\u795F\u7956\u795E\u795D\u7957\u795A"+
- "\u79E4\u79E3\u79E7\u79DF\u79E6\u79E9\u79D8\u7A84"+
- "\u7A88\u7AD9\u7B06\u7B11\u7C89\u7D21\u7D17\u7D0B"+
- "\u7D0A\u7D20\u7D22\u7D14\u7D10\u7D15\u7D1A\u7D1C"+
- "\u7D0D\u7D19\u7D1B\u7F3A\u7F5F\u7F94\u7FC5\u7FC1"+
- "\u8006\u8018\u8015\u8019\u8017\u803D\u803F\u80F1"+
- "\u8102\u80F0\u8105\u80ED\u80F4\u8106\u80F8\u80F3"+
- "\u8108\u80FD\u810A\u80FC\u80EF\u81ED\u81EC\u8200"+
- "\u8210\u822A\u822B\u8228\u822C\u82BB\u832B\u8352"+
- "\u8354\u834A\u8338\u8350\u8349\u8335\u8334\u834F"+
- "\u8332\u8339\u8336\u8317\u8340\u8331\u8328\u8343";
-
- private final static String innerIndex1=
- "\u8654\u868A\u86AA\u8693\u86A4\u86A9\u868C\u86A3"+
- "\u869C\u8870\u8877\u8881\u8882\u887D\u8879\u8A18"+
- "\u8A10\u8A0E\u8A0C\u8A15\u8A0A\u8A17\u8A13\u8A16"+
- "\u8A0F\u8A11\u8C48\u8C7A\u8C79\u8CA1\u8CA2\u8D77"+
- "\u8EAC\u8ED2\u8ED4\u8ECF\u8FB1\u9001\u9006\u8FF7"+
- "\u9000\u8FFA\u8FF4\u9003\u8FFD\u9005\u8FF8\u9095"+
- "\u90E1\u90DD\u90E2\u9152\u914D\u914C\u91D8\u91DD"+
- "\u91D7\u91DC\u91D9\u9583\u9662\u9663\u9661\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\u965B\u965D\u9664\u9658\u965E\u96BB\u98E2"+
- "\u99AC\u9AA8\u9AD8\u9B25\u9B32\u9B3C\u4E7E\u507A"+
- "\u507D\u505C\u5047\u5043\u504C\u505A\u5049\u5065"+
- "\u5076\u504E\u5055\u5075\u5074\u5077\u504F\u500F"+
- "\u506F\u506D\u515C\u5195\u51F0\u526A\u526F\u52D2"+
- "\u52D9\u52D8\u52D5\u5310\u530F\u5319\u533F\u5340"+
- "\u533E\u53C3\u66FC\u5546\u556A\u5566\u5544\u555E"+
- "\u5561\u5543\u554A\u5531\u5556\u554F\u5555\u552F"+
- "\u5564\u5538\u552E\u555C\u552C\u5563\u5533\u5541"+
- "\u5557\u5708\u570B\u5709\u57DF\u5805\u580A\u5806"+
- "\u57E0\u57E4\u57FA\u5802\u5835\u57F7\u57F9\u5920"+
- "\u5962\u5A36\u5A41\u5A49\u5A66\u5A6A\u5A40\u5A3C"+
- "\u5A62\u5A5A\u5A46\u5A4A\u5B70\u5BC7\u5BC5\u5BC4"+
- "\u5BC2\u5BBF\u5BC6\u5C09\u5C08\u5C07\u5C60\u5C5C"+
- "\u5C5D\u5D07\u5D06\u5D0E\u5D1B\u5D16\u5D22\u5D11"+
- "\u5D29\u5D14\u5D19\u5D24\u5D27\u5D17\u5DE2\u5E38"+
- "\u5E36\u5E33\u5E37\u5EB7\u5EB8\u5EB6\u5EB5\u5EBE"+
- "\u5F35\u5F37\u5F57\u5F6C\u5F69\u5F6B\u5F97\u5F99"+
- "\u5F9E\u5F98\u5FA1\u5FA0\u5F9C\u607F\u60A3\u6089"+
- "\u60A0\u60A8\u60CB\u60B4\u60E6\u60BD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\u60C5\u60BB\u60B5\u60DC\u60BC\u60D8\u60D5\u60C6"+
- "\u60DF\u60B8\u60DA\u60C7\u621A\u621B\u6248\u63A0"+
- "\u63A7\u6372\u6396\u63A2\u63A5\u6377\u6367\u6398"+
- "\u63AA\u6371\u63A9\u6389\u6383\u639B\u636B\u63A8"+
- "\u6384\u6388\u6399\u63A1\u63AC\u6392\u638F\u6380"+
- "\u637B\u6369\u6368\u637A\u655D\u6556\u6551\u6559"+
- "\u6557\u555F\u654F\u6558\u6555\u6554\u659C\u659B"+
- "\u65AC\u65CF\u65CB\u65CC\u65CE\u665D\u665A\u6664"+
- "\u6668\u6666\u665E\u66F9\u52D7\u671B\u6881\u68AF"+
- "\u68A2\u6893\u68B5\u687F\u6876\u68B1\u68A7\u6897"+
- "\u68B0\u6883\u68C4\u68AD\u6886\u6885\u6894\u689D"+
- "\u68A8\u689F\u68A1\u6882\u6B32\u6BBA\u6BEB\u6BEC"+
- "\u6C2B\u6D8E\u6DBC\u6DF3\u6DD9\u6DB2\u6DE1\u6DCC"+
- "\u6DE4\u6DFB\u6DFA\u6E05\u6DC7\u6DCB\u6DAF\u6DD1"+
- "\u6DAE\u6DDE\u6DF9\u6DB8\u6DF7\u6DF5\u6DC5\u6DD2"+
- "\u6E1A\u6DB5\u6DDA\u6DEB\u6DD8\u6DEA\u6DF1\u6DEE"+
- "\u6DE8\u6DC6\u6DC4\u6DAA\u6DEC\u6DBF\u6DE6\u70F9"+
- "\u7109\u710A\u70FD\u70EF\u723D\u727D\u7281\u731C"+
- "\u731B\u7316\u7313\u7319\u7387\u7405\u740A\u7403"+
- "\u7406\u73FE\u740D\u74E0\u74F6\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u74F7"+
- "\u751C\u7522\u7565\u7566\u7562\u7570\u758F\u75D4"+
- "\u75D5\u75B5\u75CA\u75CD\u768E\u76D4\u76D2\u76DB"+
- "\u7737\u773E\u773C\u7736\u7738\u773A\u786B\u7843"+
- "\u784E\u7965\u7968\u796D\u79FB\u7A92\u7A95\u7B20"+
- "\u7B28\u7B1B\u7B2C\u7B26\u7B19\u7B1E\u7B2E\u7C92"+
- "\u7C97\u7C95\u7D46\u7D43\u7D71\u7D2E\u7D39\u7D3C"+
- "\u7D40\u7D30\u7D33\u7D44\u7D2F\u7D42\u7D32\u7D31"+
- "\u7F3D\u7F9E\u7F9A\u7FCC\u7FCE\u7FD2\u801C\u804A"+
- "\u8046\u812F\u8116\u8123\u812B\u8129\u8130\u8124"+
- "\u8202\u8235\u8237\u8236\u8239\u838E\u839E\u8398"+
- "\u8378\u83A2\u8396\u83BD\u83AB\u8392\u838A\u8393"+
- "\u8389\u83A0\u8377\u837B\u837C\u8386\u83A7\u8655"+
- "\u5F6A\u86C7\u86C0\u86B6\u86C4\u86B5\u86C6\u86CB"+
- "\u86B1\u86AF\u86C9\u8853\u889E\u8888\u88AB\u8892"+
- "\u8896\u888D\u888B\u8993\u898F\u8A2A\u8A1D\u8A23"+
- "\u8A25\u8A31\u8A2D\u8A1F\u8A1B\u8A22\u8C49\u8C5A"+
- "\u8CA9\u8CAC\u8CAB\u8CA8\u8CAA\u8CA7\u8D67\u8D66"+
- "\u8DBE\u8DBA\u8EDB\u8EDF\u9019\u900D\u901A\u9017"+
- "\u9023\u901F\u901D\u9010\u9015\u901E\u9020\u900F"+
- "\u9022\u9016\u901B\u9014\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u90E8\u90ED"+
- "\u90FD\u9157\u91CE\u91F5\u91E6\u91E3\u91E7\u91ED"+
- "\u91E9\u9589\u966A\u9675\u9673\u9678\u9670\u9674"+
- "\u9676\u9677\u966C\u96C0\u96EA\u96E9\u7AE0\u7ADF"+
- "\u9802\u9803\u9B5A\u9CE5\u9E75\u9E7F\u9EA5\u9EBB"+
- "\u50A2\u508D\u5085\u5099\u5091\u5080\u5096\u5098"+
- "\u509A\u6700\u51F1\u5272\u5274\u5275\u5269\u52DE"+
- "\u52DD\u52DB\u535A\u53A5\u557B\u5580\u55A7\u557C"+
- "\u558A\u559D\u5598\u5582\u559C\u55AA\u5594\u5587"+
- "\u558B\u5583\u55B3\u55AE\u559F\u553E\u55B2\u559A"+
- "\u55BB\u55AC\u55B1\u557E\u5589\u55AB\u5599\u570D"+
- "\u582F\u582A\u5834\u5824\u5830\u5831\u5821\u581D"+
- "\u5820\u58F9\u58FA\u5960\u5A77\u5A9A\u5A7F\u5A92"+
- "\u5A9B\u5AA7\u5B73\u5B71\u5BD2\u5BCC\u5BD3\u5BD0"+
- "\u5C0A\u5C0B\u5C31\u5D4C\u5D50\u5D34\u5D47\u5DFD"+
- "\u5E45\u5E3D\u5E40\u5E43\u5E7E\u5ECA\u5EC1\u5EC2"+
- "\u5EC4\u5F3C\u5F6D\u5FA9\u5FAA\u5FA8\u60D1\u60E1"+
- "\u60B2\u60B6\u60E0\u611C\u6123\u60FA\u6115\u60F0"+
- "\u60FB\u60F4\u6168\u60F1\u610E\u60F6\u6109\u6100"+
- "\u6112\u621F\u6249\u63A3\u638C\u63CF\u63C0\u63E9"+
- "\u63C9\u63C6\u63CD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u63D2\u63E3\u63D0"+
- "\u63E1\u63D6\u63ED\u63EE\u6376\u63F4\u63EA\u63DB"+
- "\u6452\u63DA\u63F9\u655E\u6566\u6562\u6563\u6591"+
- "\u6590\u65AF\u666E\u6670\u6674\u6676\u666F\u6691"+
- "\u667A\u667E\u6677\u66FE\u66FF\u671F\u671D\u68FA"+
- "\u68D5\u68E0\u68D8\u68D7\u6905\u68DF\u68F5\u68EE"+
- "\u68E7\u68F9\u68D2\u68F2\u68E3\u68CB\u68CD\u690D"+
- "\u6912\u690E\u68C9\u68DA\u696E\u68FB\u6B3E\u6B3A"+
- "\u6B3D\u6B98\u6B96\u6BBC\u6BEF\u6C2E\u6C2F\u6C2C"+
- "\u6E2F\u6E38\u6E54\u6E21\u6E32\u6E67\u6E4A\u6E20"+
- "\u6E25\u6E23\u6E1B\u6E5B\u6E58\u6E24\u6E56\u6E6E"+
- "\u6E2D\u6E26\u6E6F\u6E34\u6E4D\u6E3A\u6E2C\u6E43"+
- "\u6E1D\u6E3E\u6ECB\u6E89\u6E19\u6E4E\u6E63\u6E44"+
- "\u6E72\u6E69\u6E5F\u7119\u711A\u7126\u7130\u7121"+
- "\u7136\u716E\u711C\u724C\u7284\u7280\u7336\u7325"+
- "\u7334\u7329\u743A\u742A\u7433\u7422\u7425\u7435"+
- "\u7436\u7434\u742F\u741B\u7426\u7428\u7525\u7526"+
- "\u756B\u756A\u75E2\u75DB\u75E3\u75D9\u75D8\u75DE"+
- "\u75E0\u767B\u767C\u7696\u7693\u76B4\u76DC\u774F"+
- "\u77ED\u785D\u786C\u786F\u7A0D\u7A08\u7A0B\u7A05"+
- "\u7A00\u7A98\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\u7A97\u7A96\u7AE5\u7AE3"+
- "\u7B49\u7B56\u7B46\u7B50\u7B52\u7B54\u7B4D\u7B4B"+
- "\u7B4F\u7B51\u7C9F\u7CA5\u7D5E\u7D50\u7D68\u7D55"+
- "\u7D2B\u7D6E\u7D72\u7D61\u7D66\u7D62\u7D70\u7D73"+
- "\u5584\u7FD4\u7FD5\u800B\u8052\u8085\u8155\u8154"+
- "\u814B\u8151\u814E\u8139\u8146\u813E\u814C\u8153"+
- "\u8174\u8212\u821C\u83E9\u8403\u83F8\u840D\u83E0"+
- "\u83C5\u840B\u83C1\u83EF\u83F1\u83F4\u8457\u840A"+
- "\u83F0\u840C\u83CC\u83FD\u83F2\u83CA\u8438\u840E"+
- "\u8404\u83DC\u8407\u83D4\u83DF\u865B\u86DF\u86D9"+
- "\u86ED\u86D4\u86DB\u86E4\u86D0\u86DE\u8857\u88C1"+
- "\u88C2\u88B1\u8983\u8996\u8A3B\u8A60\u8A55\u8A5E"+
- "\u8A3C\u8A41\u8A54\u8A5B\u8A50\u8A46\u8A34\u8A3A"+
- "\u8A36\u8A56\u8C61\u8C82\u8CAF\u8CBC\u8CB3\u8CBD"+
- "\u8CC1\u8CBB\u8CC0\u8CB4\u8CB7\u8CB6\u8CBF\u8CB8"+
- "\u8D8A\u8D85\u8D81\u8DCE\u8DDD\u8DCB\u8DDA\u8DD1"+
- "\u8DCC\u8DDB\u8DC6\u8EFB\u8EF8\u8EFC\u8F9C\u902E"+
- "\u9035\u9031\u9038\u9032\u9036\u9102\u90F5\u9109"+
- "\u90FE\u9163\u9165\u91CF\u9214\u9215\u9223\u9209"+
- "\u921E\u920D\u9210\u9207\u9211\u9594\u958F\u958B"+
- "\u9591\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\u9593\u9592\u958E\u968A\u968E"+
- "\u968B\u967D\u9685\u9686\u968D\u9672\u9684\u96C1"+
- "\u96C5\u96C4\u96C6\u96C7\u96EF\u96F2\u97CC\u9805"+
- "\u9806\u9808\u98E7\u98EA\u98EF\u98E9\u98F2\u98ED"+
- "\u99AE\u99AD\u9EC3\u9ECD\u9ED1\u4E82\u50AD\u50B5"+
- "\u50B2\u50B3\u50C5\u50BE\u50AC\u50B7\u50BB\u50AF"+
- "\u50C7\u527F\u5277\u527D\u52DF\u52E6\u52E4\u52E2"+
- "\u52E3\u532F\u55DF\u55E8\u55D3\u55E6\u55CE\u55DC"+
- "\u55C7\u55D1\u55E3\u55E4\u55EF\u55DA\u55E1\u55C5"+
- "\u55C6\u55E5\u55C9\u5712\u5713\u585E\u5851\u5858"+
- "\u5857\u585A\u5854\u586B\u584C\u586D\u584A\u5862"+
- "\u5852\u584B\u5967\u5AC1\u5AC9\u5ACC\u5ABE\u5ABD"+
- "\u5ABC\u5AB3\u5AC2\u5AB2\u5D69\u5D6F\u5E4C\u5E79"+
- "\u5EC9\u5EC8\u5F12\u5F59\u5FAC\u5FAE\u611A\u610F"+
- "\u6148\u611F\u60F3\u611B\u60F9\u6101\u6108\u614E"+
- "\u614C\u6144\u614D\u613E\u6134\u6127\u610D\u6106"+
- "\u6137\u6221\u6222\u6413\u643E\u641E\u642A\u642D"+
- "\u643D\u642C\u640F\u641C\u6414\u640D\u6436\u6416"+
- "\u6417\u6406\u656C\u659F\u65B0\u6697\u6689\u6687"+
- "\u6688\u6696\u6684\u6698\u668D\u6703\u6994\u696D"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\u695A\u6977\u6960\u6954\u6975\u6930"+
- "\u6982\u694A\u6968\u696B\u695E\u6953\u6979\u6986"+
- "\u695D\u6963\u695B\u6B47\u6B72\u6BC0\u6BBF\u6BD3"+
- "\u6BFD\u6EA2\u6EAF\u6ED3\u6EB6\u6EC2\u6E90\u6E9D"+
- "\u6EC7\u6EC5\u6EA5\u6E98\u6EBC\u6EBA\u6EAB\u6ED1"+
- "\u6E96\u6E9C\u6EC4\u6ED4\u6EAA\u6EA7\u6EB4\u714E"+
- "\u7159\u7169\u7164\u7149\u7167\u715C\u716C\u7166"+
- "\u714C\u7165\u715E\u7146\u7168\u7156\u723A\u7252"+
- "\u7337\u7345\u733F\u733E\u746F\u745A\u7455\u745F"+
- "\u745E\u7441\u743F\u7459\u745B\u745C\u7576\u7578"+
- "\u7600\u75F0\u7601\u75F2\u75F1\u75FA\u75FF\u75F4"+
- "\u75F3\u76DE\u76DF\u775B\u776B\u7766\u775E\u7763"+
- "\u7779\u776A\u776C\u775C\u7765\u7768\u7762\u77EE"+
- "\u788E\u78B0\u7897\u7898\u788C\u7889\u787C\u7891"+
- "\u7893\u787F\u797A\u797F\u7981\u842C\u79BD\u7A1C"+
- "\u7A1A\u7A20\u7A14\u7A1F\u7A1E\u7A9F\u7AA0\u7B77"+
- "\u7BC0\u7B60\u7B6E\u7B67\u7CB1\u7CB3\u7CB5\u7D93"+
- "\u7D79\u7D91\u7D81\u7D8F\u7D5B\u7F6E\u7F69\u7F6A"+
- "\u7F72\u7FA9\u7FA8\u7FA4\u8056\u8058\u8086\u8084"+
- "\u8171\u8170\u8178\u8165\u816E\u8173\u816B\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\u8179\u817A\u8166\u8205\u8247\u8482\u8477"+
- "\u843D\u8431\u8475\u8466\u846B\u8449\u846C\u845B"+
- "\u843C\u8435\u8461\u8463\u8469\u846D\u8446\u865E"+
- "\u865C\u865F\u86F9\u8713\u8708\u8707\u8700\u86FE"+
- "\u86FB\u8702\u8703\u8706\u870A\u8859\u88DF\u88D4"+
- "\u88D9\u88DC\u88D8\u88DD\u88E1\u88CA\u88D5\u88D2"+
- "\u899C\u89E3\u8A6B\u8A72\u8A73\u8A66\u8A69\u8A70"+
- "\u8A87\u8A7C\u8A63\u8AA0\u8A71\u8A85\u8A6D\u8A62"+
- "\u8A6E\u8A6C\u8A79\u8A7B\u8A3E\u8A68\u8C62\u8C8A"+
- "\u8C89\u8CCA\u8CC7\u8CC8\u8CC4\u8CB2\u8CC3\u8CC2"+
- "\u8CC5\u8DE1\u8DDF\u8DE8\u8DEF\u8DF3\u8DFA\u8DEA"+
- "\u8DE4\u8DE6\u8EB2\u8F03\u8F09\u8EFE\u8F0A\u8F9F"+
- "\u8FB2\u904B\u904A\u9053\u9042\u9054\u903C\u9055"+
- "\u9050\u9047\u904F\u904E\u904D\u9051\u903E\u9041"+
- "\u9112\u9117\u916C\u916A\u9169\u91C9\u9237\u9257"+
- "\u9238\u923D\u9240\u923E\u925B\u924B\u9264\u9251"+
- "\u9234\u9249\u924D\u9245\u9239\u923F\u925A\u9598"+
- "\u9698\u9694\u9695\u96CD\u96CB\u96C9\u96CA\u96F7"+
- "\u96FB\u96F9\u96F6\u9756\u9774\u9776\u9810\u9811"+
- "\u9813\u980A\u9812\u980C\u98FC\u98F4\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\u98FD\u98FE\u99B3\u99B1\u99B4\u9AE1\u9CE9\u9E82"+
- "\u9F0E\u9F13\u9F20\u50E7\u50EE\u50E5\u50D6\u50ED"+
- "\u50DA\u50D5\u50CF\u50D1\u50F1\u50CE\u50E9\u5162"+
- "\u51F3\u5283\u5282\u5331\u53AD\u55FE\u5600\u561B"+
- "\u5617\u55FD\u5614\u5606\u5609\u560D\u560E\u55F7"+
- "\u5616\u561F\u5608\u5610\u55F6\u5718\u5716\u5875"+
- "\u587E\u5883\u5893\u588A\u5879\u5885\u587D\u58FD"+
- "\u5925\u5922\u5924\u596A\u5969\u5AE1\u5AE6\u5AE9"+
- "\u5AD7\u5AD6\u5AD8\u5AE3\u5B75\u5BDE\u5BE7\u5BE1"+
- "\u5BE5\u5BE6\u5BE8\u5BE2\u5BE4\u5BDF\u5C0D\u5C62"+
- "\u5D84\u5D87\u5E5B\u5E63\u5E55\u5E57\u5E54\u5ED3"+
- "\u5ED6\u5F0A\u5F46\u5F70\u5FB9\u6147\u613F\u614B"+
- "\u6177\u6162\u6163\u615F\u615A\u6158\u6175\u622A"+
- "\u6487\u6458\u6454\u64A4\u6478\u645F\u647A\u6451"+
- "\u6467\u6434\u646D\u647B\u6572\u65A1\u65D7\u65D6"+
- "\u66A2\u66A8\u669D\u699C\u69A8\u6995\u69C1\u69AE"+
- "\u69D3\u69CB\u699B\u69B7\u69BB\u69AB\u69B4\u69D0"+
- "\u69CD\u69AD\u69CC\u69A6\u69C3\u69A3\u6B49\u6B4C"+
- "\u6C33\u6F33\u6F14\u6EFE\u6F13\u6EF4\u6F29\u6F3E"+
- "\u6F20\u6F2C\u6F0F\u6F02\u6F22\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6EFF"+
- "\u6EEF\u6F06\u6F31\u6F38\u6F32\u6F23\u6F15\u6F2B"+
- "\u6F2F\u6F88\u6F2A\u6EEC\u6F01\u6EF2\u6ECC\u6EF7"+
- "\u7194\u7199\u717D\u718A\u7184\u7192\u723E\u7292"+
- "\u7296\u7344\u7350\u7464\u7463\u746A\u7470\u746D"+
- "\u7504\u7591\u7627\u760D\u760B\u7609\u7613\u76E1"+
- "\u76E3\u7784\u777D\u777F\u7761\u78C1\u789F\u78A7"+
- "\u78B3\u78A9\u78A3\u798E\u798F\u798D\u7A2E\u7A31"+
- "\u7AAA\u7AA9\u7AED\u7AEF\u7BA1\u7B95\u7B8B\u7B75"+
- "\u7B97\u7B9D\u7B94\u7B8F\u7BB8\u7B87\u7B84\u7CB9"+
- "\u7CBD\u7CBE\u7DBB\u7DB0\u7D9C\u7DBD\u7DBE\u7DA0"+
- "\u7DCA\u7DB4\u7DB2\u7DB1\u7DBA\u7DA2\u7DBF\u7DB5"+
- "\u7DB8\u7DAD\u7DD2\u7DC7\u7DAC\u7F70\u7FE0\u7FE1"+
- "\u7FDF\u805E\u805A\u8087\u8150\u8180\u818F\u8188"+
- "\u818A\u817F\u8182\u81E7\u81FA\u8207\u8214\u821E"+
- "\u824B\u84C9\u84BF\u84C6\u84C4\u8499\u849E\u84B2"+
- "\u849C\u84CB\u84B8\u84C0\u84D3\u8490\u84BC\u84D1"+
- "\u84CA\u873F\u871C\u873B\u8722\u8725\u8734\u8718"+
- "\u8755\u8737\u8729\u88F3\u8902\u88F4\u88F9\u88F8"+
- "\u88FD\u88E8\u891A\u88EF\u8AA6\u8A8C\u8A9E\u8AA3"+
- "\u8A8D\u8AA1\u8A93\u8AA4\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8AAA\u8AA5"+
- "\u8AA8\u8A98\u8A91\u8A9A\u8AA7\u8C6A\u8C8D\u8C8C"+
- "\u8CD3\u8CD1\u8CD2\u8D6B\u8D99\u8D95\u8DFC\u8F14"+
- "\u8F12\u8F15\u8F13\u8FA3\u9060\u9058\u905C\u9063"+
- "\u9059\u905E\u9062\u905D\u905B\u9119\u9118\u911E"+
- "\u9175\u9178\u9177\u9174\u9278\u9280\u9285\u9298"+
- "\u9296\u927B\u9293\u929C\u92A8\u927C\u9291\u95A1"+
- "\u95A8\u95A9\u95A3\u95A5\u95A4\u9699\u969C\u969B"+
- "\u96CC\u96D2\u9700\u977C\u9785\u97F6\u9817\u9818"+
- "\u98AF\u98B1\u9903\u9905\u990C\u9909\u99C1\u9AAF"+
- "\u9AB0\u9AE6\u9B41\u9B42\u9CF4\u9CF6\u9CF3\u9EBC"+
- "\u9F3B\u9F4A\u5104\u5100\u50FB\u50F5\u50F9\u5102"+
- "\u5108\u5109\u5105\u51DC\u5287\u5288\u5289\u528D"+
- "\u528A\u52F0\u53B2\u562E\u563B\u5639\u5632\u563F"+
- "\u5634\u5629\u5653\u564E\u5657\u5674\u5636\u562F"+
- "\u5630\u5880\u589F\u589E\u58B3\u589C\u58AE\u58A9"+
- "\u58A6\u596D\u5B09\u5AFB\u5B0B\u5AF5\u5B0C\u5B08"+
- "\u5BEE\u5BEC\u5BE9\u5BEB\u5C64\u5C65\u5D9D\u5D94"+
- "\u5E62\u5E5F\u5E61\u5EE2\u5EDA\u5EDF\u5EDD\u5EE3"+
- "\u5EE0\u5F48\u5F71\u5FB7\u5FB5\u6176\u6167\u616E"+
- "\u615D\u6155\u6182\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u617C\u6170\u616B"+
- "\u617E\u61A7\u6190\u61AB\u618E\u61AC\u619A\u61A4"+
- "\u6194\u61AE\u622E\u6469\u646F\u6479\u649E\u64B2"+
- "\u6488\u6490\u64B0\u64A5\u6493\u6495\u64A9\u6492"+
- "\u64AE\u64AD\u64AB\u649A\u64AC\u6499\u64A2\u64B3"+
- "\u6575\u6577\u6578\u66AE\u66AB\u66B4\u66B1\u6A23"+
- "\u6A1F\u69E8\u6A01\u6A1E\u6A19\u69FD\u6A21\u6A13"+
- "\u6A0A\u69F3\u6A02\u6A05\u69ED\u6A11\u6B50\u6B4E"+
- "\u6BA4\u6BC5\u6BC6\u6F3F\u6F7C\u6F84\u6F51\u6F66"+
- "\u6F54\u6F86\u6F6D\u6F5B\u6F78\u6F6E\u6F8E\u6F7A"+
- "\u6F70\u6F64\u6F97\u6F58\u6ED5\u6F6F\u6F60\u6F5F"+
- "\u719F\u71AC\u71B1\u71A8\u7256\u729B\u734E\u7357"+
- "\u7469\u748B\u7483\u747E\u7480\u757F\u7620\u7629"+
- "\u761F\u7624\u7626\u7621\u7622\u769A\u76BA\u76E4"+
- "\u778E\u7787\u778C\u7791\u778B\u78CB\u78C5\u78BA"+
- "\u78CA\u78BE\u78D5\u78BC\u78D0\u7A3F\u7A3C\u7A40"+
- "\u7A3D\u7A37\u7A3B\u7AAF\u7AAE\u7BAD\u7BB1\u7BC4"+
- "\u7BB4\u7BC6\u7BC7\u7BC1\u7BA0\u7BCC\u7CCA\u7DE0"+
- "\u7DF4\u7DEF\u7DFB\u7DD8\u7DEC\u7DDD\u7DE8\u7DE3"+
- "\u7DDA\u7DDE\u7DE9\u7D9E\u7DD9\u7DF2\u7DF9\u7F75"+
- "\u7F77\u7FAF\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\u7FE9\u8026\u819B\u819C"+
- "\u819D\u81A0\u819A\u8198\u8517\u853D\u851A\u84EE"+
- "\u852C\u852D\u8513\u8511\u8523\u8521\u8514\u84EC"+
- "\u8525\u84FF\u8506\u8782\u8774\u8776\u8760\u8766"+
- "\u8778\u8768\u8759\u8757\u874C\u8753\u885B\u885D"+
- "\u8910\u8907\u8912\u8913\u8915\u890A\u8ABC\u8AD2"+
- "\u8AC7\u8AC4\u8A95\u8ACB\u8AF8\u8AB2\u8AC9\u8AC2"+
- "\u8ABF\u8AB0\u8AD6\u8ACD\u8AB6\u8AB9\u8ADB\u8C4C"+
- "\u8C4E\u8C6C\u8CE0\u8CDE\u8CE6\u8CE4\u8CEC\u8CED"+
- "\u8CE2\u8CE3\u8CDC\u8CEA\u8CE1\u8D6D\u8D9F\u8DA3"+
- "\u8E2B\u8E10\u8E1D\u8E22\u8E0F\u8E29\u8E1F\u8E21"+
- "\u8E1E\u8EBA\u8F1D\u8F1B\u8F1F\u8F29\u8F26\u8F2A"+
- "\u8F1C\u8F1E\u8F25\u9069\u906E\u9068\u906D\u9077"+
- "\u9130\u912D\u9127\u9131\u9187\u9189\u918B\u9183"+
- "\u92C5\u92BB\u92B7\u92EA\u92AC\u92E4\u92C1\u92B3"+
- "\u92BC\u92D2\u92C7\u92F0\u92B2\u95AD\u95B1\u9704"+
- "\u9706\u9707\u9709\u9760\u978D\u978B\u978F\u9821"+
- "\u982B\u981C\u98B3\u990A\u9913\u9912\u9918\u99DD"+
- "\u99D0\u99DF\u99DB\u99D1\u99D5\u99D2\u99D9\u9AB7"+
- "\u9AEE\u9AEF\u9B27\u9B45\u9B44\u9B77\u9B6F\u9D06"+
- "\u9D09\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\u9D03\u9EA9\u9EBE\u9ECE\u58A8"+
- "\u9F52\u5112\u5118\u5114\u5110\u5115\u5180\u51AA"+
- "\u51DD\u5291\u5293\u52F3\u5659\u566B\u5679\u5669"+
- "\u5664\u5678\u566A\u5668\u5665\u5671\u566F\u566C"+
- "\u5662\u5676\u58C1\u58BE\u58C7\u58C5\u596E\u5B1D"+
- "\u5B34\u5B78\u5BF0\u5C0E\u5F4A\u61B2\u6191\u61A9"+
- "\u618A\u61CD\u61B6\u61BE\u61CA\u61C8\u6230\u64C5"+
- "\u64C1\u64CB\u64BB\u64BC\u64DA\u64C4\u64C7\u64C2"+
- "\u64CD\u64BF\u64D2\u64D4\u64BE\u6574\u66C6\u66C9"+
- "\u66B9\u66C4\u66C7\u66B8\u6A3D\u6A38\u6A3A\u6A59"+
- "\u6A6B\u6A58\u6A39\u6A44\u6A62\u6A61\u6A4B\u6A47"+
- "\u6A35\u6A5F\u6A48\u6B59\u6B77\u6C05\u6FC2\u6FB1"+
- "\u6FA1\u6FC3\u6FA4\u6FC1\u6FA7\u6FB3\u6FC0\u6FB9"+
- "\u6FB6\u6FA6\u6FA0\u6FB4\u71BE\u71C9\u71D0\u71D2"+
- "\u71C8\u71D5\u71B9\u71CE\u71D9\u71DC\u71C3\u71C4"+
- "\u7368\u749C\u74A3\u7498\u749F\u749E\u74E2\u750C"+
- "\u750D\u7634\u7638\u763A\u76E7\u76E5\u77A0\u779E"+
- "\u779F\u77A5\u78E8\u78DA\u78EC\u78E7\u79A6\u7A4D"+
- "\u7A4E\u7A46\u7A4C\u7A4B\u7ABA\u7BD9\u7C11\u7BC9"+
- "\u7BE4\u7BDB\u7BE1\u7BE9\u7BE6\u7CD5\u7CD6\u7E0A"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\u7E11\u7E08\u7E1B\u7E23\u7E1E\u7E1D"+
- "\u7E09\u7E10\u7F79\u7FB2\u7FF0\u7FF1\u7FEE\u8028"+
- "\u81B3\u81A9\u81A8\u81FB\u8208\u8258\u8259\u854A"+
- "\u8559\u8548\u8568\u8569\u8543\u8549\u856D\u856A"+
- "\u855E\u8783\u879F\u879E\u87A2\u878D\u8861\u892A"+
- "\u8932\u8925\u892B\u8921\u89AA\u89A6\u8AE6\u8AFA"+
- "\u8AEB\u8AF1\u8B00\u8ADC\u8AE7\u8AEE\u8AFE\u8B01"+
- "\u8B02\u8AF7\u8AED\u8AF3\u8AF6\u8AFC\u8C6B\u8C6D"+
- "\u8C93\u8CF4\u8E44\u8E31\u8E34\u8E42\u8E39\u8E35"+
- "\u8F3B\u8F2F\u8F38\u8F33\u8FA8\u8FA6\u9075\u9074"+
- "\u9078\u9072\u907C\u907A\u9134\u9192\u9320\u9336"+
- "\u92F8\u9333\u932F\u9322\u92FC\u932B\u9304\u931A";
-
- private final static String innerIndex2=
- "\u9310\u9326\u9321\u9315\u932E\u9319\u95BB\u96A7"+
- "\u96A8\u96AA\u96D5\u970E\u9711\u9716\u970D\u9713"+
- "\u970F\u975B\u975C\u9766\u9798\u9830\u9838\u983B"+
- "\u9837\u982D\u9839\u9824\u9910\u9928\u991E\u991B"+
- "\u9921\u991A\u99ED\u99E2\u99F1\u9AB8\u9ABC\u9AFB"+
- "\u9AED\u9B28\u9B91\u9D15\u9D23\u9D26\u9D28\u9D12"+
- "\u9D1B\u9ED8\u9ED4\u9F8D\u9F9C\u512A\u511F\u5121"+
- "\u5132\u52F5\u568E\u5680\u5690\u5685\u5687\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\u568F\u58D5\u58D3\u58D1\u58CE\u5B30\u5B2A"+
- "\u5B24\u5B7A\u5C37\u5C68\u5DBC\u5DBA\u5DBD\u5DB8"+
- "\u5E6B\u5F4C\u5FBD\u61C9\u61C2\u61C7\u61E6\u61CB"+
- "\u6232\u6234\u64CE\u64CA\u64D8\u64E0\u64F0\u64E6"+
- "\u64EC\u64F1\u64E2\u64ED\u6582\u6583\u66D9\u66D6"+
- "\u6A80\u6A94\u6A84\u6AA2\u6A9C\u6ADB\u6AA3\u6A7E"+
- "\u6A97\u6A90\u6AA0\u6B5C\u6BAE\u6BDA\u6C08\u6FD8"+
- "\u6FF1\u6FDF\u6FE0\u6FDB\u6FE4\u6FEB\u6FEF\u6F80"+
- "\u6FEC\u6FE1\u6FE9\u6FD5\u6FEE\u6FF0\u71E7\u71DF"+
- "\u71EE\u71E6\u71E5\u71ED\u71EC\u71F4\u71E0\u7235"+
- "\u7246\u7370\u7372\u74A9\u74B0\u74A6\u74A8\u7646"+
- "\u7642\u764C\u76EA\u77B3\u77AA\u77B0\u77AC\u77A7"+
- "\u77AD\u77EF\u78F7\u78FA\u78F4\u78EF\u7901\u79A7"+
- "\u79AA\u7A57\u7ABF\u7C07\u7C0D\u7BFE\u7BF7\u7C0C"+
- "\u7BE0\u7CE0\u7CDC\u7CDE\u7CE2\u7CDF\u7CD9\u7CDD"+
- "\u7E2E\u7E3E\u7E46\u7E37\u7E32\u7E43\u7E2B\u7E3D"+
- "\u7E31\u7E45\u7E41\u7E34\u7E39\u7E48\u7E35\u7E3F"+
- "\u7E2F\u7F44\u7FF3\u7FFC\u8071\u8072\u8070\u806F"+
- "\u8073\u81C6\u81C3\u81BA\u81C2\u81C0\u81BF\u81BD"+
- "\u81C9\u81BE\u81E8\u8209\u8271\u85AA\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\u8584\u857E\u859C\u8591\u8594\u85AF\u859B\u8587"+
- "\u85A8\u858A\u8667\u87C0\u87D1\u87B3\u87D2\u87C6"+
- "\u87AB\u87BB\u87BA\u87C8\u87CB\u893B\u8936\u8944"+
- "\u8938\u893D\u89AC\u8B0E\u8B17\u8B19\u8B1B\u8B0A"+
- "\u8B20\u8B1D\u8B04\u8B10\u8C41\u8C3F\u8C73\u8CFA"+
- "\u8CFD\u8CFC\u8CF8\u8CFB\u8DA8\u8E49\u8E4B\u8E48"+
- "\u8E4A\u8F44\u8F3E\u8F42\u8F45\u8F3F\u907F\u907D"+
- "\u9084\u9081\u9082\u9080\u9139\u91A3\u919E\u919C"+
- "\u934D\u9382\u9328\u9375\u934A\u9365\u934B\u9318"+
- "\u937E\u936C\u935B\u9370\u935A\u9354\u95CA\u95CB"+
- "\u95CC\u95C8\u95C6\u96B1\u96B8\u96D6\u971C\u971E"+
- "\u97A0\u97D3\u9846\u98B6\u9935\u9A01\u99FF\u9BAE"+
- "\u9BAB\u9BAA\u9BAD\u9D3B\u9D3F\u9E8B\u9ECF\u9EDE"+
- "\u9EDC\u9EDD\u9EDB\u9F3E\u9F4B\u53E2\u5695\u56AE"+
- "\u58D9\u58D8\u5B38\u5F5D\u61E3\u6233\u64F4\u64F2"+
- "\u64FE\u6506\u64FA\u64FB\u64F7\u65B7\u66DC\u6726"+
- "\u6AB3\u6AAC\u6AC3\u6ABB\u6AB8\u6AC2\u6AAE\u6AAF"+
- "\u6B5F\u6B78\u6BAF\u7009\u700B\u6FFE\u7006\u6FFA"+
- "\u7011\u700F\u71FB\u71FC\u71FE\u71F8\u7377\u7375"+
- "\u74A7\u74BF\u7515\u7656\u7658\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7652"+
- "\u77BD\u77BF\u77BB\u77BC\u790E\u79AE\u7A61\u7A62"+
- "\u7A60\u7AC4\u7AC5\u7C2B\u7C27\u7C2A\u7C1E\u7C23"+
- "\u7C21\u7CE7\u7E54\u7E55\u7E5E\u7E5A\u7E61\u7E52"+
- "\u7E59\u7F48\u7FF9\u7FFB\u8077\u8076\u81CD\u81CF"+
- "\u820A\u85CF\u85A9\u85CD\u85D0\u85C9\u85B0\u85BA"+
- "\u85B9\u85A6\u87EF\u87EC\u87F2\u87E0\u8986\u89B2"+
- "\u89F4\u8B28\u8B39\u8B2C\u8B2B\u8C50\u8D05\u8E59"+
- "\u8E63\u8E66\u8E64\u8E5F\u8E55\u8EC0\u8F49\u8F4D"+
- "\u9087\u9083\u9088\u91AB\u91AC\u91D0\u9394\u938A"+
- "\u9396\u93A2\u93B3\u93AE\u93AC\u93B0\u9398\u939A"+
- "\u9397\u95D4\u95D6\u95D0\u95D5\u96E2\u96DC\u96D9"+
- "\u96DB\u96DE\u9724\u97A3\u97A6\u97AD\u97F9\u984D"+
- "\u984F\u984C\u984E\u9853\u98BA\u993E\u993F\u993D"+
- "\u992E\u99A5\u9A0E\u9AC1\u9B03\u9B06\u9B4F\u9B4E"+
- "\u9B4D\u9BCA\u9BC9\u9BFD\u9BC8\u9BC0\u9D51\u9D5D"+
- "\u9D60\u9EE0\u9F15\u9F2C\u5133\u56A5\u58DE\u58DF"+
- "\u58E2\u5BF5\u9F90\u5EEC\u61F2\u61F7\u61F6\u61F5"+
- "\u6500\u650F\u66E0\u66DD\u6AE5\u6ADD\u6ADA\u6AD3"+
- "\u701B\u701F\u7028\u701A\u701D\u7015\u7018\u7206"+
- "\u720D\u7258\u72A2\u7378\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u737A\u74BD"+
- "\u74CA\u74E3\u7587\u7586\u765F\u7661\u77C7\u7919"+
- "\u79B1\u7A6B\u7A69\u7C3E\u7C3F\u7C38\u7C3D\u7C37"+
- "\u7C40\u7E6B\u7E6D\u7E79\u7E69\u7E6A\u7F85\u7E73"+
- "\u7FB6\u7FB9\u7FB8\u81D8\u85E9\u85DD\u85EA\u85D5"+
- "\u85E4\u85E5\u85F7\u87FB\u8805\u880D\u87F9\u87FE"+
- "\u8960\u895F\u8956\u895E\u8B41\u8B5C\u8B58\u8B49"+
- "\u8B5A\u8B4E\u8B4F\u8B46\u8B59\u8D08\u8D0A\u8E7C"+
- "\u8E72\u8E87\u8E76\u8E6C\u8E7A\u8E74\u8F54\u8F4E"+
- "\u8FAD\u908A\u908B\u91B1\u91AE\u93E1\u93D1\u93DF"+
- "\u93C3\u93C8\u93DC\u93DD\u93D6\u93E2\u93CD\u93D8"+
- "\u93E4\u93D7\u93E8\u95DC\u96B4\u96E3\u972A\u9727"+
- "\u9761\u97DC\u97FB\u985E\u9858\u985B\u98BC\u9945"+
- "\u9949\u9A16\u9A19\u9B0D\u9BE8\u9BE7\u9BD6\u9BDB"+
- "\u9D89\u9D61\u9D72\u9D6A\u9D6C\u9E92\u9E97\u9E93"+
- "\u9EB4\u52F8\u56A8\u56B7\u56B6\u56B4\u56BC\u58E4"+
- "\u5B40\u5B43\u5B7D\u5BF6\u5DC9\u61F8\u61FA\u6518"+
- "\u6514\u6519\u66E6\u6727\u6AEC\u703E\u7030\u7032"+
- "\u7210\u737B\u74CF\u7662\u7665\u7926\u792A\u792C"+
- "\u792B\u7AC7\u7AF6\u7C4C\u7C43\u7C4D\u7CEF\u7CF0"+
- "\u8FAE\u7E7D\u7E7C\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7E82\u7F4C\u8000"+
- "\u81DA\u8266\u85FB\u85F9\u8611\u85FA\u8606\u860B"+
- "\u8607\u860A\u8814\u8815\u8964\u89BA\u89F8\u8B70"+
- "\u8B6C\u8B66\u8B6F\u8B5F\u8B6B\u8D0F\u8D0D\u8E89"+
- "\u8E81\u8E85\u8E82\u91B4\u91CB\u9418\u9403\u93FD"+
- "\u95E1\u9730\u98C4\u9952\u9951\u99A8\u9A2B\u9A30"+
- "\u9A37\u9A35\u9C13\u9C0D\u9E79\u9EB5\u9EE8\u9F2F"+
- "\u9F5F\u9F63\u9F61\u5137\u5138\u56C1\u56C0\u56C2"+
- "\u5914\u5C6C\u5DCD\u61FC\u61FE\u651D\u651C\u6595"+
- "\u66E9\u6AFB\u6B04\u6AFA\u6BB2\u704C\u721B\u72A7"+
- "\u74D6\u74D4\u7669\u77D3\u7C50\u7E8F\u7E8C\u7FBC"+
- "\u8617\u862D\u861A\u8823\u8822\u8821\u881F\u896A"+
- "\u896C\u89BD\u8B74\u8B77\u8B7D\u8D13\u8E8A\u8E8D"+
- "\u8E8B\u8F5F\u8FAF\u91BA\u942E\u9433\u9435\u943A"+
- "\u9438\u9432\u942B\u95E2\u9738\u9739\u9732\u97FF"+
- "\u9867\u9865\u9957\u9A45\u9A43\u9A40\u9A3E\u9ACF"+
- "\u9B54\u9B51\u9C2D\u9C25\u9DAF\u9DB4\u9DC2\u9DB8"+
- "\u9E9D\u9EEF\u9F19\u9F5C\u9F66\u9F67\u513C\u513B"+
- "\u56C8\u56CA\u56C9\u5B7F\u5DD4\u5DD2\u5F4E\u61FF"+
- "\u6524\u6B0A\u6B61\u7051\u7058\u7380\u74E4\u758A"+
- "\u766E\u766C\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\u79B3\u7C60\u7C5F\u807E"+
- "\u807D\u81DF\u8972\u896F\u89FC\u8B80\u8D16\u8D17"+
- "\u8E91\u8E93\u8F61\u9148\u9444\u9451\u9452\u973D"+
- "\u973E\u97C3\u97C1\u986B\u9955\u9A55\u9A4D\u9AD2"+
- "\u9B1A\u9C49\u9C31\u9C3E\u9C3B\u9DD3\u9DD7\u9F34"+
- "\u9F6C\u9F6A\u9F94\u56CC\u5DD6\u6200\u6523\u652B"+
- "\u652A\u66EC\u6B10\u74DA\u7ACA\u7C64\u7C63\u7C65"+
- "\u7E93\u7E96\u7E94\u81E2\u8638\u863F\u8831\u8B8A"+
- "\u9090\u908F\u9463\u9460\u9464\u9768\u986F\u995C"+
- "\u9A5A\u9A5B\u9A57\u9AD3\u9AD4\u9AD1\u9C54\u9C57"+
- "\u9C56\u9DE5\u9E9F\u9EF4\u56D1\u58E9\u652C\u705E"+
- "\u7671\u7672\u77D7\u7F50\u7F88\u8836\u8839\u8862"+
- "\u8B93\u8B92\u8B96\u8277\u8D1B\u91C0\u946A\u9742"+
- "\u9748\u9744\u97C6\u9870\u9A5F\u9B22\u9B58\u9C5F"+
- "\u9DF9\u9DFA\u9E7C\u9E7D\u9F07\u9F77\u9F72\u5EF3"+
- "\u6B16\u7063\u7C6C\u7C6E\u883B\u89C0\u8EA1\u91C1"+
- "\u9472\u9470\u9871\u995E\u9AD6\u9B23\u9ECC\u7064"+
- "\u77DA\u8B9A\u9477\u97C9\u9A62\u9A65\u7E9C\u8B9C"+
- "\u8EAA\u91C5\u947D\u947E\u947C\u9C77\u9C78\u9EF7"+
- "\u8C54\u947F\u9E1A\u7228\u9A6A\u9B31\u9E1B\u9E1E"+
- "\u7C72\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\u30FE\u309D\u309E\u3005\u3041"+
- "\u3042\u3043\u3044\u3045\u3046\u3047\u3048\u3049"+
- "\u304A\u304B\u304C\u304D\u304E\u304F\u3050\u3051"+
- "\u3052\u3053\u3054\u3055\u3056\u3057\u3058\u3059"+
- "\u305A\u305B\u305C\u305D\u305E\u305F\u3060\u3061"+
- "\u3062\u3063\u3064\u3065\u3066\u3067\u3068\u3069"+
- "\u306A\u306B\u306C\u306D\u306E\u306F\u3070\u3071"+
- "\u3072\u3073\u3074\u3075\u3076\u3077\u3078\u3079"+
- "\u307A\u307B\u307C\u307D\u307E\u307F\u3080\u3081"+
- "\u3082\u3083\u3084\u3085\u3086\u3087\u3088\u3089"+
- "\u308A\u308B\u308C\u308D\u308E\u308F\u3090\u3091"+
- "\u3092\u3093\u30A1\u30A2\u30A3\u30A4\u30A5\u30A6"+
- "\u30A7\u30A8\u30A9\u30AA\u30AB\u30AC\u30AD\u30AE"+
- "\u30AF\u30B0\u30B1\u30B2\u30B3\u30B4\u30B5\u30B6"+
- "\u30B7\u30B8\u30B9\u30BA\u30BB\u30BC\u30BD\u30BE"+
- "\u30BF\u30C0\u30C1\u30C2\u30C3\u30C4\u30C5\u30C6"+
- "\u30C7\u30C8\u30C9\u30CA\u30CB\u30CC\u30CD\u30CE"+
- "\u30CF\u30D0\u30D1\u30D2\u30D3\u30D4\u30D5\u30D6"+
- "\u30D7\u30D8\u30D9\u30DA\u30DB\u30DC\u30DD\u30DE"+
- "\u30DF\u30E0\u30E1\u30E2\u30E3\u30E4\u30E5\u30E6"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\u30E7\u30E8\u30E9\u30EA\u30EB\u30EC"+
- "\u30ED\u30EE\u30EF\u30F0\u30F1\u30F2\u30F3\u30F4"+
- "\u30F5\u30F6\u0414\u0415\u0401\u0416\u0417\u0418"+
- "\u0419\u041A\u041B\u041C\u0423\u0424\u0425\u0426"+
- "\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E"+
- "\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0451"+
- "\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D"+
- "\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445"+
- "\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D"+
- "\u044E\u044F\u2460\u2461\u2462\u2463\u2464\u2465"+
- "\u2466\u2467\u2468\u2469\u2474\u2475\u2476\u2477"+
- "\u2478\u2479\u247A\u247B\u247C\u247D\uFFFD\uFFFD"+
- "\u4E42\u4E5C\u51F5\u531A\u5382\u4E07\u4E0C\u4E47"+
- "\u4E8D\u56D7\uFA0C\u5C6E\u5F73\u4E0F\u5187\u4E0E"+
- "\u4E2E\u4E93\u4EC2\u4EC9\u4EC8\u5198\u52FC\u536C"+
- "\u53B9\u5720\u5903\u592C\u5C10\u5DFF\u65E1\u6BB3"+
- "\u6BCC\u6C14\u723F\u4E31\u4E3C\u4EE8\u4EDC\u4EE9"+
- "\u4EE1\u4EDD\u4EDA\u520C\u531C\u534C\u5722\u5723"+
- "\u5917\u592F\u5B81\u5B84\u5C12\u5C3B\u5C74\u5C73"+
- "\u5E04\u5E80\u5E82\u5FC9\u6209\u6250\u6C15\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\u6C36\u6C43\u6C3F\u6C3B\u72AE\u72B0\u738A"+
- "\u79B8\u808A\u961E\u4F0E\u4F18\u4F2C\u4EF5\u4F14"+
- "\u4EF1\u4F00\u4EF7\u4F08\u4F1D\u4F02\u4F05\u4F22"+
- "\u4F13\u4F04\u4EF4\u4F12\u51B1\u5213\u5209\u5210"+
- "\u52A6\u5322\u531F\u534D\u538A\u5407\u56E1\u56DF"+
- "\u572E\u572A\u5734\u593C\u5980\u597C\u5985\u597B"+
- "\u597E\u5977\u597F\u5B56\u5C15\u5C25\u5C7C\u5C7A"+
- "\u5C7B\u5C7E\u5DDF\u5E75\u5E84\u5F02\u5F1A\u5F74"+
- "\u5FD5\u5FD4\u5FCF\u625C\u625E\u6264\u6261\u6266"+
- "\u6262\u6259\u6260\u625A\u6265\u65EF\u65EE\u673E"+
- "\u6739\u6738\u673B\u673A\u673F\u673C\u6733\u6C18"+
- "\u6C46\u6C52\u6C5C\u6C4F\u6C4A\u6C54\u6C4B\u6C4C"+
- "\u7071\u725E\u72B4\u72B5\u738E\u752A\u767F\u7A75"+
- "\u7F51\u8278\u827C\u8280\u827D\u827F\u864D\u897E"+
- "\u9099\u9097\u9098\u909B\u9094\u9622\u9624\u9620"+
- "\u9623\u4F56\u4F3B\u4F62\u4F49\u4F53\u4F64\u4F3E"+
- "\u4F67\u4F52\u4F5F\u4F41\u4F58\u4F2D\u4F33\u4F3F"+
- "\u4F61\u518F\u51B9\u521C\u521E\u5221\u52AD\u52AE"+
- "\u5309\u5363\u5372\u538E\u538F\u5430\u5437\u542A"+
- "\u5454\u5445\u5419\u541C\u5425\u5418\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\u543D\u544F\u5441\u5428\u5424\u5447\u56EE\u56E7"+
- "\u56E5\u5741\u5745\u574C\u5749\u574B\u5752\u5906"+
- "\u5940\u59A6\u5998\u59A0\u5997\u598E\u59A2\u5990"+
- "\u598F\u59A7\u59A1\u5B8E\u5B92\u5C28\u5C2A\u5C8D"+
- "\u5C8F\u5C88\u5C8B\u5C89\u5C92\u5C8A\u5C86\u5C93"+
- "\u5C95\u5DE0\u5E0A\u5E0E\u5E8B\u5E89\u5E8C\u5E88"+
- "\u5E8D\u5F05\u5F1D\u5F78\u5F76\u5FD2\u5FD1\u5FD0"+
- "\u5FED\u5FE8\u5FEE\u5FF3\u5FE1\u5FE4\u5FE3\u5FFA"+
- "\u5FEF\u5FF7\u5FFB\u6000\u5FF4\u623A\u6283\u628C"+
- "\u628E\u628F\u6294\u6287\u6271\u627B\u627A\u6270"+
- "\u6281\u6288\u6277\u627D\u6272\u6274\u6537\u65F0"+
- "\u65F4\u65F3\u65F2\u65F5\u6745\u6747\u6759\u6755"+
- "\u674C\u6748\u675D\u674D\u675A\u674B\u6BD0\u6C19"+
- "\u6C1A\u6C78\u6C67\u6C6B\u6C84\u6C8B\u6C8F\u6C71"+
- "\u6C6F\u6C69\u6C9A\u6C6D\u6C87\u6C95\u6C9C\u6C66"+
- "\u6C73\u6C65\u6C7B\u6C8E\u7074\u707A\u7263\u72BF"+
- "\u72BD\u72C3\u72C6\u72C1\u72BA\u72C5\u7395\u7397"+
- "\u7393\u7394\u7392\u753A\u7539\u7594\u7595\u7681"+
- "\u793D\u8034\u8095\u8099\u8090\u8092\u809C\u8290"+
- "\u828F\u8285\u828E\u8291\u8293\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u828A"+
- "\u8283\u8284\u8C78\u8FC9\u8FBF\u909F\u90A1\u90A5"+
- "\u909E\u90A7\u90A0\u9630\u9628\u962F\u962D\u4E33"+
- "\u4F98\u4F7C\u4F85\u4F7D\u4F80\u4F87\u4F76\u4F74"+
- "\u4F89\u4F84\u4F77\u4F4C\u4F97\u4F6A\u4F9A\u4F79"+
- "\u4F81\u4F78\u4F90\u4F9C\u4F94\u4F9E\u4F92\u4F82"+
- "\u4F95\u4F6B\u4F6E\u519E\u51BC\u51BE\u5235\u5232"+
- "\u5233\u5246\u5231\u52BC\u530A\u530B\u533C\u5392"+
- "\u5394\u5487\u547F\u5481\u5491\u5482\u5488\u546B"+
- "\u547A\u547E\u5465\u546C\u5474\u5466\u548D\u546F"+
- "\u5461\u5460\u5498\u5463\u5467\u5464\u56F7\u56F9"+
- "\u576F\u5772\u576D\u576B\u5771\u5770\u5776\u5780"+
- "\u5775\u577B\u5773\u5774\u5762\u5768\u577D\u590C"+
- "\u5945\u59B5\u59BA\u59CF\u59CE\u59B2\u59CC\u59C1"+
- "\u59B6\u59BC\u59C3\u59D6\u59B1\u59BD\u59C0\u59C8"+
- "\u59B4\u59C7\u5B62\u5B65\u5B93\u5B95\u5C44\u5C47"+
- "\u5CAE\u5CA4\u5CA0\u5CB5\u5CAF\u5CA8\u5CAC\u5C9F"+
- "\u5CA3\u5CAD\u5CA2\u5CAA\u5CA7\u5C9D\u5CA5\u5CB6"+
- "\u5CB0\u5CA6\u5E17\u5E14\u5E19\u5F28\u5F22\u5F23"+
- "\u5F24\u5F54\u5F82\u5F7E\u5F7D\u5FDE\u5FE5\u602D"+
- "\u6026\u6019\u6032\u600B\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6034\u600A"+
- "\u6017\u6033\u601A\u601E\u602C\u6022\u600D\u6010"+
- "\u602E\u6013\u6011\u600C\u6009\u601C\u6214\u623D"+
- "\u62AD\u62B4\u62D1\u62BE\u62AA\u62B6\u62CA\u62AE"+
- "\u62B3\u62AF\u62BB\u62A9\u62B0\u62B8\u653D\u65A8"+
- "\u65BB\u6609\u65FC\u6604\u6612\u6608\u65FB\u6603"+
- "\u660B\u660D\u6605\u65FD\u6611\u6610\u66F6\u670A"+
- "\u6785\u676C\u678E\u6792\u6776\u677B\u6798\u6786"+
- "\u6784\u6774\u678D\u678C\u677A\u679F\u6791\u6799"+
- "\u6783\u677D\u6781\u6778\u6779\u6794\u6B25\u6B80"+
- "\u6B7E\u6BDE\u6C1D\u6C93\u6CEC\u6CEB\u6CEE\u6CD9"+
- "\u6CB6\u6CD4\u6CAD\u6CE7\u6CB7\u6CD0\u6CC2\u6CBA"+
- "\u6CC3\u6CC6\u6CED\u6CF2\u6CD2\u6CDD\u6CB4\u6C8A"+
- "\u6C9D\u6C80\u6CDE\u6CC0\u6D30\u6CCD\u6CC7\u6CB0"+
- "\u6CF9\u6CCF\u6CE9\u6CD1\u7094\u7098\u7085\u7093"+
- "\u7086\u7084\u7091\u7096\u7082\u709A\u7083\u726A"+
- "\u72D6\u72CB\u72D8\u72C9\u72DC\u72D2\u72D4\u72DA"+
- "\u72CC\u72D1\u73A4\u73A1\u73AD\u73A6\u73A2\u73A0"+
- "\u73AC\u739D\u74DD\u74E8\u753F\u7540\u753E\u758C"+
- "\u7598\u76AF\u76F3\u76F1\u76F0\u76F5\u77F8\u77FC"+
- "\u77F9\u77FB\u77FA\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u77F7\u7942\u793F"+
- "\u79C5\u7A78\u7A7B\u7AFB\u7C75\u7CFD\u8035\u808F"+
- "\u80AE\u80A3\u80B8\u80B5\u80AD\u8220\u82A0\u82C0"+
- "\u82AB\u829A\u8298\u829B\u82B5\u82A7\u82AE\u82BC"+
- "\u829E\u82BA\u82B4\u82A8\u82A1\u82A9\u82C2\u82A4"+
- "\u82C3\u82B6\u82A2\u8670\u866F\u866D\u866E\u8C56"+
- "\u8FD2\u8FCB\u8FD3\u8FCD\u8FD6\u8FD5\u8FD7\u90B2"+
- "\u90B4\u90AF\u90B3\u90B0\u9639\u963D\u963C\u963A"+
- "\u9643\u4FCD\u4FC5\u4FD3\u4FB2\u4FC9\u4FCB\u4FC1"+
- "\u4FD4\u4FDC\u4FD9\u4FBB\u4FB3\u4FDB\u4FC7\u4FD6"+
- "\u4FBA\u4FC0\u4FB9\u4FEC\u5244\u5249\u52C0\u52C2"+
- "\u533D\u537C\u5397\u5396\u5399\u5398\u54BA\u54A1"+
- "\u54AD\u54A5\u54CF\u54C3\u830D\u54B7\u54AE\u54D6"+
- "\u54B6\u54C5\u54C6\u54A0\u5470\u54BC\u54A2\u54BE"+
- "\u5472\u54DE\u54B0\u57B5\u579E\u579F\u57A4\u578C"+
- "\u5797\u579D\u579B\u5794\u5798\u578F\u5799\u57A5"+
- "\u579A\u5795\u58F4\u590D\u5953\u59E1\u59DE\u59EE"+
- "\u5A00\u59F1\u59DD\u59FA\u59FD\u59FC\u59F6\u59E4"+
- "\u59F2\u59F7\u59DB\u59E9\u59F3\u59F5\u59E0\u59FE"+
- "\u59F4\u59ED\u5BA8\u5C4C\u5CD0\u5CD8\u5CCC\u5CD7"+
- "\u5CCB\u5CDB\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\u5CDE\u5CDA\u5CC9\u5CC7"+
- "\u5CCA\u5CD6\u5CD3\u5CD4\u5CCF\u5CC8\u5CC6\u5CCE"+
- "\u5CDF\u5CF8\u5DF9\u5E21\u5E22\u5E23\u5E20\u5E24"+
- "\u5EB0\u5EA4\u5EA2\u5E9B\u5EA3\u5EA5\u5F07\u5F2E"+
- "\u5F56\u5F86\u6037\u6039\u6054\u6072\u605E\u6045"+
- "\u6053\u6047\u6049\u605B\u604C\u6040\u6042\u605F"+
- "\u6024\u6044\u6058\u6066\u606E\u6242\u6243\u62CF"+
- "\u630D\u630B\u62F5\u630E\u6303\u62EB\u62F9\u630F"+
- "\u630C\u62F8\u62F6\u6300\u6313\u6314\u62FA\u6315"+
- "\u62FB\u62F0\u6541\u6543\u65AA\u65BF\u6636\u6621"+
- "\u6632\u6635\u661C\u6626\u6622\u6633\u662B\u663A"+
- "\u661D\u6634\u6639\u662E\u670F\u6710\u67C1\u67F2"+
- "\u67C8\u67BA\u67DC\u67BB\u67F8\u67D8\u67C0\u67B7"+
- "\u67C5\u67EB\u67E4\u67DF\u67B5\u67CD\u67B3\u67F7"+
- "\u67F6\u67EE\u67E3\u67C2\u67B9\u67CE\u67E7\u67F0"+
- "\u67B2\u67FC\u67C6\u67ED\u67CC\u67AE\u67E6\u67DB"+
- "\u67FA\u67C9\u67CA\u67C3\u67EA\u67CB\u6B28\u6B82"+
- "\u6B84\u6BB6\u6BD6\u6BD8\u6BE0\u6C20\u6C21\u6D28"+
- "\u6D34\u6D2D\u6D1F\u6D3C\u6D3F\u6D12\u6D0A\u6CDA"+
- "\u6D33\u6D04\u6D19\u6D3A\u6D1A\u6D11\u6D00\u6D1D"+
- "\u6D42\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\u6D01\u6D18\u6D37\u6D03\u6D0F"+
- "\u6D40\u6D07\u6D20\u6D2C\u6D08\u6D22\u6D09\u6D10"+
- "\u70B7\u709F\u70BE\u70B1\u70B0\u70A1\u70B4\u70B5"+
- "\u70A9\u7241\u7249\u724A\u726C\u7270\u7273\u726E"+
- "\u72CA\u72E4\u72E8\u72EB\u72DF\u72EA\u72E6\u72E3"+
- "\u7385\u73CC\u73C2\u73C8\u73C5\u73B9\u73B6\u73B5"+
- "\u73B4\u73EB\u73BF\u73C7\u73BE\u73C3\u73C6\u73B8"+
- "\u73CB\u74EC\u74EE\u752E\u7547\u7548\u75A7\u75AA"+
- "\u7679\u76C4\u7708\u7703\u7704\u7705\u770A\u76F7"+
- "\u76FB\u76FA\u77E7\u77E8\u7806\u7811\u7812\u7805"+
- "\u7810\u780F\u780E\u7809\u7803\u7813\u794A\u794C"+
- "\u794B\u7945\u7944\u79D5\u79CD\u79CF\u79D6\u79CE"+
- "\u7A80\u7A7E\u7AD1\u7B00\u7B01\u7C7A\u7C78\u7C79"+
- "\u7C7F\u7C80\u7C81\u7D03\u7D08\u7D01\u7F58\u7F91"+
- "\u7F8D\u7FBE\u8007\u800E\u800F\u8014\u8037\u80D8"+
- "\u80C7\u80E0\u80D1\u80C8\u80C2\u80D0\u80C5\u80E3"+
- "\u80D9\u80DC\u80CA\u80D5\u80C9\u80CF\u80D7\u80E6"+
- "\u80CD\u81FF\u8221\u8294\u82D9\u82FE\u82F9\u8307"+
- "\u82E8\u8300\u82D5\u833A\u82EB\u82D6\u82F4\u82EC"+
- "\u82E1\u82F2\u82F5\u830C\u82FB\u82F6\u82F0\u82EA"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\u82E4\u82E0\u82FA\u82F3\u82ED\u8677"+
- "\u8674\u867C\u8673\u8841\u884E\u8867\u886A\u8869"+
- "\u89D3\u8A04\u8A07\u8D72\u8FE3\u8FE1\u8FEE\u8FE0"+
- "\u90F1\u90BD\u90BF\u90D5\u90C5\u90BE\u90C7\u90CB"+
- "\u90C8\u91D4\u91D3\u9654\u964F\u9651\u9653\u964A"+
- "\u964E\u501E\u5005\u5007\u5013\u5022\u5030\u501B"+
- "\u4FF5\u4FF4\u5033\u5037\u502C\u4FF6\u4FF7\u5017"+
- "\u501C\u5020\u5027\u5035\u502F\u5031\u500E\u515A"+
- "\u5194\u5193\u51CA\u51C4\u51C5\u51C8\u51CE\u5261"+
- "\u525A\u5252\u525E\u525F\u5255\u5262\u52CD\u530E"+
- "\u539E\u5526\u54E2\u5517\u5512\u54E7\u54F3\u54E4"+
- "\u551A\u54FF\u5504\u5508\u54EB\u5511\u5505\u54F1";
-
- private final static String innerIndex3=
- "\u550A\u54FB\u54F7\u54F8\u54E0\u550E\u5503\u550B"+
- "\u5701\u5702\u57CC\u5832\u57D5\u57D2\u57BA\u57C6"+
- "\u57BD\u57BC\u57B8\u57B6\u57BF\u57C7\u57D0\u57B9"+
- "\u57C1\u590E\u594A\u5A19\u5A16\u5A2D\u5A2E\u5A15"+
- "\u5A0F\u5A17\u5A0A\u5A1E\u5A33\u5B6C\u5BA7\u5BAD"+
- "\u5BAC\u5C03\u5C56\u5C54\u5CEC\u5CFF\u5CEE\u5CF1"+
- "\u5CF7\u5D00\u5CF9\u5E29\u5E28\u5EA8\u5EAE\u5EAA"+
- "\u5EAC\u5F33\u5F30\u5F67\u605D\u605A\u6067\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\u6041\u60A2\u6088\u6080\u6092\u6081\u609D"+
- "\u6083\u6095\u609B\u6097\u6087\u609C\u608E\u6219"+
- "\u6246\u62F2\u6310\u6356\u632C\u6344\u6345\u6336"+
- "\u6343\u63E4\u6339\u634B\u634A\u633C\u6329\u6341"+
- "\u6334\u6358\u6354\u6359\u632D\u6347\u6333\u635A"+
- "\u6351\u6338\u6357\u6340\u6348\u654A\u6546\u65C6"+
- "\u65C3\u65C4\u65C2\u664A\u665F\u6647\u6651\u6712"+
- "\u6713\u681F\u681A\u6849\u6832\u6833\u683B\u684B"+
- "\u684F\u6816\u6831\u681C\u6835\u682B\u682D\u682F"+
- "\u684E\u6844\u6834\u681D\u6812\u6814\u6826\u6828"+
- "\u682E\u684D\u683A\u6825\u6820\u6B2C\u6B2F\u6B2D"+
- "\u6B31\u6B34\u6B6D\u8082\u6B88\u6BE6\u6BE4\u6BE8"+
- "\u6BE3\u6BE2\u6BE7\u6C25\u6D7A\u6D63\u6D64\u6D76"+
- "\u6D0D\u6D61\u6D92\u6D58\u6D62\u6D6D\u6D6F\u6D91"+
- "\u6D8D\u6DEF\u6D7F\u6D86\u6D5E\u6D67\u6D60\u6D97"+
- "\u6D70\u6D7C\u6D5F\u6D82\u6D98\u6D2F\u6D68\u6D8B"+
- "\u6D7E\u6D80\u6D84\u6D16\u6D83\u6D7B\u6D7D\u6D75"+
- "\u6D90\u70DC\u70D3\u70D1\u70DD\u70CB\u7F39\u70E2"+
- "\u70D7\u70D2\u70DE\u70E0\u70D4\u70CD\u70C5\u70C6"+
- "\u70C7\u70DA\u70CE\u70E1\u7242\u7278\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\u7277\u7276\u7300\u72FA\u72F4\u72FE\u72F6\u72F3"+
- "\u72FB\u7301\u73D3\u73D9\u73E5\u73D6\u73BC\u73E7"+
- "\u73E3\u73E9\u73DC\u73D2\u73DB\u73D4\u73DD\u73DA"+
- "\u73D7\u73D8\u73E8\u74DE\u74DF\u74F4\u74F5\u7521"+
- "\u755B\u755F\u75B0\u75C1\u75BB\u75C4\u75C0\u75BF"+
- "\u75B6\u75BA\u768A\u76C9\u771D\u771B\u7710\u7713"+
- "\u7712\u7723\u7711\u7715\u7719\u771A\u7722\u7727"+
- "\u7823\u782C\u7822\u7835\u782F\u7828\u782E\u782B"+
- "\u7821\u7829\u7833\u782A\u7831\u7954\u795B\u794F"+
- "\u795C\u7953\u7952\u7951\u79EB\u79EC\u79E0\u79EE"+
- "\u79ED\u79EA\u79DC\u79DE\u79DD\u7A86\u7A89\u7A85"+
- "\u7A8B\u7A8C\u7A8A\u7A87\u7AD8\u7B10\u7B04\u7B13"+
- "\u7B05\u7B0F\u7B08\u7B0A\u7B0E\u7B09\u7B12\u7C84"+
- "\u7C91\u7C8A\u7C8C\u7C88\u7C8D\u7C85\u7D1E\u7D1D"+
- "\u7D11\u7D0E\u7D18\u7D16\u7D13\u7D1F\u7D12\u7D0F"+
- "\u7D0C\u7F5C\u7F61\u7F5E\u7F60\u7F5D\u7F5B\u7F96"+
- "\u7F92\u7FC3\u7FC2\u7FC0\u8016\u803E\u8039\u80FA"+
- "\u80F2\u80F9\u80F5\u8101\u80FB\u8100\u8201\u822F"+
- "\u8225\u8333\u832D\u8344\u8319\u8351\u8325\u8356"+
- "\u833F\u8341\u8326\u831C\u8322\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8342"+
- "\u834E\u831B\u832A\u8308\u833C\u834D\u8316\u8324"+
- "\u8320\u8337\u832F\u8329\u8347\u8345\u834C\u8353"+
- "\u831E\u832C\u834B\u8327\u8348\u8653\u8652\u86A2"+
- "\u86A8\u8696\u868D\u8691\u869E\u8687\u8697\u8686"+
- "\u868B\u869A\u8685\u86A5\u8699\u86A1\u86A7\u8695"+
- "\u8698\u868E\u869D\u8690\u8694\u8843\u8844\u886D"+
- "\u8875\u8876\u8872\u8880\u8871\u887F\u886F\u8883"+
- "\u887E\u8874\u887C\u8A12\u8C47\u8C57\u8C7B\u8CA4"+
- "\u8CA3\u8D76\u8D78\u8DB5\u8DB7\u8DB6\u8ED1\u8ED3"+
- "\u8FFE\u8FF5\u9002\u8FFF\u8FFB\u9004\u8FFC\u8FF6"+
- "\u90D6\u90E0\u90D9\u90DA\u90E3\u90DF\u90E5\u90D8"+
- "\u90DB\u90D7\u90DC\u90E4\u9150\u914E\u914F\u91D5"+
- "\u91E2\u91DA\u965C\u965F\u96BC\u98E3\u9ADF\u9B2F"+
- "\u4E7F\u5070\u506A\u5061\u505E\u5060\u5053\u504B"+
- "\u505D\u5072\u5048\u504D\u5041\u505B\u504A\u5062"+
- "\u5015\u5045\u505F\u5069\u506B\u5063\u5064\u5046"+
- "\u5040\u506E\u5073\u5057\u5051\u51D0\u526B\u526D"+
- "\u526C\u526E\u52D6\u52D3\u532D\u539C\u5575\u5576"+
- "\u553C\u554D\u5550\u5534\u552A\u5551\u5562\u5536"+
- "\u5535\u5530\u5552\u5545\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u550C\u5532"+
- "\u5565\u554E\u5539\u5548\u552D\u553B\u5540\u554B"+
- "\u570A\u5707\u57FB\u5814\u57E2\u57F6\u57DC\u57F4"+
- "\u5800\u57ED\u57FD\u5808\u57F8\u580B\u57F3\u57CF"+
- "\u5807\u57EE\u57E3\u57F2\u57E5\u57EC\u57E1\u580E"+
- "\u57FC\u5810\u57E7\u5801\u580C\u57F1\u57E9\u57F0"+
- "\u580D\u5804\u595C\u5A60\u5A58\u5A55\u5A67\u5A5E"+
- "\u5A38\u5A35\u5A6D\u5A50\u5A5F\u5A65\u5A6C\u5A53"+
- "\u5A64\u5A57\u5A43\u5A5D\u5A52\u5A44\u5A5B\u5A48"+
- "\u5A8E\u5A3E\u5A4D\u5A39\u5A4C\u5A70\u5A69\u5A47"+
- "\u5A51\u5A56\u5A42\u5A5C\u5B72\u5B6E\u5BC1\u5BC0"+
- "\u5C59\u5D1E\u5D0B\u5D1D\u5D1A\u5D20\u5D0C\u5D28"+
- "\u5D0D\u5D26\u5D25\u5D0F\u5D30\u5D12\u5D23\u5D1F"+
- "\u5D2E\u5E3E\u5E34\u5EB1\u5EB4\u5EB9\u5EB2\u5EB3"+
- "\u5F36\u5F38\u5F9B\u5F96\u5F9F\u608A\u6090\u6086"+
- "\u60BE\u60B0\u60BA\u60D3\u60D4\u60CF\u60E4\u60D9"+
- "\u60DD\u60C8\u60B1\u60DB\u60B7\u60CA\u60BF\u60C3"+
- "\u60CD\u60C0\u6332\u6365\u638A\u6382\u637D\u63BD"+
- "\u639E\u63AD\u639D\u6397\u63AB\u638E\u636F\u6387"+
- "\u6390\u636E\u63AF\u6375\u639C\u636D\u63AE\u637C"+
- "\u63A4\u633B\u639F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6378\u6385\u6381"+
- "\u6391\u638D\u6370\u6553\u65CD\u6665\u6661\u665B"+
- "\u6659\u665C\u6662\u6718\u6879\u6887\u6890\u689C"+
- "\u686D\u686E\u68AE\u68AB\u6956\u686F\u68A3\u68AC"+
- "\u68A9\u6875\u6874\u68B2\u688F\u6877\u6892\u687C"+
- "\u686B\u6872\u68AA\u6880\u6871\u687E\u689B\u6896"+
- "\u688B\u68A0\u6889\u68A4\u6878\u687B\u6891\u688C"+
- "\u688A\u687D\u6B36\u6B33\u6B37\u6B38\u6B91\u6B8F"+
- "\u6B8D\u6B8E\u6B8C\u6C2A\u6DC0\u6DAB\u6DB4\u6DB3"+
- "\u6E74\u6DAC\u6DE9\u6DE2\u6DB7\u6DF6\u6DD4\u6E00"+
- "\u6DC8\u6DE0\u6DDF\u6DD6\u6DBE\u6DE5\u6DDC\u6DDD"+
- "\u6DDB\u6DF4\u6DCA\u6DBD\u6DED\u6DF0\u6DBA\u6DD5"+
- "\u6DC2\u6DCF\u6DC9\u6DD0\u6DF2\u6DD3\u6DFD\u6DD7"+
- "\u6DCD\u6DE3\u6DBB\u70FA\u710D\u70F7\u7117\u70F4"+
- "\u710C\u70F0\u7104\u70F3\u7110\u70FC\u70FF\u7106"+
- "\u7113\u7100\u70F8\u70F6\u710B\u7102\u710E\u727E"+
- "\u727B\u727C\u727F\u731D\u7317\u7307\u7311\u7318"+
- "\u730A\u7308\u72FF\u730F\u731E\u7388\u73F6\u73F8"+
- "\u73F5\u7404\u7401\u73FD\u7407\u7400\u73FA\u73FC"+
- "\u73FF\u740C\u740B\u73F4\u7408\u7564\u7563\u75CE"+
- "\u75D2\u75CF\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\u75CB\u75CC\u75D1\u75D0"+
- "\u768F\u7689\u76D3\u7739\u772F\u772D\u7731\u7732"+
- "\u7734\u7733\u773D\u7725\u773B\u7735\u7848\u7852"+
- "\u7849\u784D\u784A\u784C\u7826\u7845\u7850\u7964"+
- "\u7967\u7969\u796A\u7963\u796B\u7961\u79BB\u79FA"+
- "\u79F8\u79F6\u79F7\u7A8F\u7A94\u7A90\u7B35\u7B47"+
- "\u7B34\u7B25\u7B30\u7B22\u7B24\u7B33\u7B18\u7B2A"+
- "\u7B1D\u7B31\u7B2B\u7B2D\u7B2F\u7B32\u7B38\u7B1A"+
- "\u7B23\u7C94\u7C98\u7C96\u7CA3\u7D35\u7D3D\u7D38"+
- "\u7D36\u7D3A\u7D45\u7D2C\u7D29\u7D41\u7D47\u7D3E"+
- "\u7D3F\u7D4A\u7D3B\u7D28\u7F63\u7F95\u7F9C\u7F9D"+
- "\u7F9B\u7FCA\u7FCB\u7FCD\u7FD0\u7FD1\u7FC7\u7FCF"+
- "\u7FC9\u801F\u801E\u801B\u8047\u8043\u8048\u8118"+
- "\u8125\u8119\u811B\u812D\u811F\u812C\u811E\u8121"+
- "\u8115\u8127\u811D\u8122\u8211\u8238\u8233\u823A"+
- "\u8234\u8232\u8274\u8390\u83A3\u83A8\u838D\u837A"+
- "\u8373\u83A4\u8374\u838F\u8381\u8395\u8399\u8375"+
- "\u8394\u83A9\u837D\u8383\u838C\u839D\u839B\u83AA"+
- "\u838B\u837E\u83A5\u83AF\u8388\u8397\u83B0\u837F"+
- "\u83A6\u8387\u83AE\u8376\u839A\u8659\u8656\u86BF"+
- "\u86B7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\u86C2\u86C1\u86C5\u86BA\u86B0"+
- "\u86C8\u86B9\u86B3\u86B8\u86CC\u86B4\u86BB\u86BC"+
- "\u86C3\u86BD\u86BE\u8852\u8889\u8895\u88A8\u88A2"+
- "\u88AA\u889A\u8891\u88A1\u889F\u8898\u88A7\u8899"+
- "\u889B\u8897\u88A4\u88AC\u888C\u8893\u888E\u8982"+
- "\u89D6\u89D9\u89D5\u8A30\u8A27\u8A2C\u8A1E\u8C39"+
- "\u8C3B\u8C5C\u8C5D\u8C7D\u8CA5\u8D7D\u8D7B\u8D79"+
- "\u8DBC\u8DC2\u8DB9\u8DBF\u8DC1\u8ED8\u8EDE\u8EDD"+
- "\u8EDC\u8ED7\u8EE0\u8EE1\u9024\u900B\u9011\u901C"+
- "\u900C\u9021\u90EF\u90EA\u90F0\u90F4\u90F2\u90F3"+
- "\u90D4\u90EB\u90EC\u90E9\u9156\u9158\u915A\u9153"+
- "\u9155\u91EC\u91F4\u91F1\u91F3\u91F8\u91E4\u91F9"+
- "\u91EA\u91EB\u91F7\u91E8\u91EE\u957A\u9586\u9588"+
- "\u967C\u966D\u966B\u9671\u966F\u96BF\u976A\u9804"+
- "\u98E5\u9997\u509B\u5095\u5094\u509E\u508B\u50A3"+
- "\u5083\u508C\u508E\u509D\u5068\u509C\u5092\u5082"+
- "\u5087\u515F\u51D4\u5312\u5311\u53A4\u53A7\u5591"+
- "\u55A8\u55A5\u55AD\u5577\u5645\u55A2\u5593\u5588"+
- "\u558F\u55B5\u5581\u55A3\u5592\u55A4\u557D\u558C"+
- "\u55A6\u557F\u5595\u55A1\u558E\u570C\u5829\u5837"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\u5819\u581E\u5827\u5823\u5828\u57F5"+
- "\u5848\u5825\u581C\u581B\u5833\u583F\u5836\u582E"+
- "\u5839\u5838\u582D\u582C\u583B\u5961\u5AAF\u5A94"+
- "\u5A9F\u5A7A\u5AA2\u5A9E\u5A78\u5AA6\u5A7C\u5AA5"+
- "\u5AAC\u5A95\u5AAE\u5A37\u5A84\u5A8A\u5A97\u5A83"+
- "\u5A8B\u5AA9\u5A7B\u5A7D\u5A8C\u5A9C\u5A8F\u5A93"+
- "\u5A9D\u5BEA\u5BCD\u5BCB\u5BD4\u5BD1\u5BCA\u5BCE"+
- "\u5C0C\u5C30\u5D37\u5D43\u5D6B\u5D41\u5D4B\u5D3F"+
- "\u5D35\u5D51\u5D4E\u5D55\u5D33\u5D3A\u5D52\u5D3D"+
- "\u5D31\u5D59\u5D42\u5D39\u5D49\u5D38\u5D3C\u5D32"+
- "\u5D36\u5D40\u5D45\u5E44\u5E41\u5F58\u5FA6\u5FA5"+
- "\u5FAB\u60C9\u60B9\u60CC\u60E2\u60CE\u60C4\u6114"+
- "\u60F2\u610A\u6116\u6105\u60F5\u6113\u60F8\u60FC"+
- "\u60FE\u60C1\u6103\u6118\u611D\u6110\u60FF\u6104"+
- "\u610B\u624A\u6394\u63B1\u63B0\u63CE\u63E5\u63E8"+
- "\u63EF\u63C3\u649D\u63F3\u63CA\u63E0\u63F6\u63D5"+
- "\u63F2\u63F5\u6461\u63DF\u63BE\u63DD\u63DC\u63C4"+
- "\u63D8\u63D3\u63C2\u63C7\u63CC\u63CB\u63C8\u63F0"+
- "\u63D7\u63D9\u6532\u6567\u656A\u6564\u655C\u6568"+
- "\u6565\u658C\u659D\u659E\u65AE\u65D0\u65D2\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\u667C\u666C\u667B\u6680\u6671\u6679\u666A"+
- "\u6672\u6701\u690C\u68D3\u6904\u68DC\u692A\u68EC"+
- "\u68EA\u68F1\u690F\u68D6\u68F7\u68EB\u68E4\u68F6"+
- "\u6913\u6910\u68F3\u68E1\u6907\u68CC\u6908\u6970"+
- "\u68B4\u6911\u68EF\u68C6\u6914\u68F8\u68D0\u68FD"+
- "\u68FC\u68E8\u690B\u690A\u6917\u68CE\u68C8\u68DD"+
- "\u68DE\u68E6\u68F4\u68D1\u6906\u68D4\u68E9\u6915"+
- "\u6925\u68C7\u6B39\u6B3B\u6B3F\u6B3C\u6B94\u6B97"+
- "\u6B99\u6B95\u6BBD\u6BF0\u6BF2\u6BF3\u6C30\u6DFC"+
- "\u6E46\u6E47\u6E1F\u6E49\u6E88\u6E3C\u6E3D\u6E45"+
- "\u6E62\u6E2B\u6E3F\u6E41\u6E5D\u6E73\u6E1C\u6E33"+
- "\u6E4B\u6E40\u6E51\u6E3B\u6E03\u6E2E\u6E5E\u6E68"+
- "\u6E5C\u6E61\u6E31\u6E28\u6E60\u6E71\u6E6B\u6E39"+
- "\u6E22\u6E30\u6E53\u6E65\u6E27\u6E78\u6E64\u6E77"+
- "\u6E55\u6E79\u6E52\u6E66\u6E35\u6E36\u6E5A\u7120"+
- "\u711E\u712F\u70FB\u712E\u7131\u7123\u7125\u7122"+
- "\u7132\u711F\u7128\u713A\u711B\u724B\u725A\u7288"+
- "\u7289\u7286\u7285\u728B\u7312\u730B\u7330\u7322"+
- "\u7331\u7333\u7327\u7332\u732D\u7326\u7323\u7335"+
- "\u730C\u742E\u742C\u7430\u742B\u7416\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\u741A\u7421\u742D\u7431\u7424\u7423\u741D\u7429"+
- "\u7420\u7432\u74FB\u752F\u756F\u756C\u75E7\u75DA"+
- "\u75E1\u75E6\u75DD\u75DF\u75E4\u75D7\u7695\u7692"+
- "\u76DA\u7746\u7747\u7744\u774D\u7745\u774A\u774E"+
- "\u774B\u774C\u77DE\u77EC\u7860\u7864\u7865\u785C"+
- "\u786D\u7871\u786A\u786E\u7870\u7869\u7868\u785E"+
- "\u7862\u7974\u7973\u7972\u7970\u7A02\u7A0A\u7A03"+
- "\u7A0C\u7A04\u7A99\u7AE6\u7AE4\u7B4A\u7B3B\u7B44"+
- "\u7B48\u7B4C\u7B4E\u7B40\u7B58\u7B45\u7CA2\u7C9E"+
- "\u7CA8\u7CA1\u7D58\u7D6F\u7D63\u7D53\u7D56\u7D67"+
- "\u7D6A\u7D4F\u7D6D\u7D5C\u7D6B\u7D52\u7D54\u7D69"+
- "\u7D51\u7D5F\u7D4E\u7F3E\u7F3F\u7F65\u7F66\u7FA2"+
- "\u7FA0\u7FA1\u7FD7\u8051\u804F\u8050\u80FE\u80D4"+
- "\u8143\u814A\u8152\u814F\u8147\u813D\u814D\u813A"+
- "\u81E6\u81EE\u81F7\u81F8\u81F9\u8204\u823C\u823D"+
- "\u823F\u8275\u833B\u83CF\u83F9\u8423\u83C0\u83E8"+
- "\u8412\u83E7\u83E4\u83FC\u83F6\u8410\u83C6\u83C8"+
- "\u83EB\u83E3\u83BF\u8401\u83DD\u83E5\u83D8\u83FF"+
- "\u83E1\u83CB\u83CE\u83D6\u83F5\u83C9\u8409\u840F"+
- "\u83DE\u8411\u8406\u83C2\u83F3\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u83D5"+
- "\u83FA\u83C7\u83D1\u83EA\u8413\u83C3\u83EC\u83EE"+
- "\u83C4\u83FB\u83D7\u83E2\u841B\u83DB\u83FE\u86D8"+
- "\u86E2\u86E6\u86D3\u86E3\u86DA\u86EA\u86DD\u86EB"+
- "\u86DC\u86EC\u86E9\u86D7\u86E8\u86D1\u8848\u8856"+
- "\u8855\u88BA\u88D7\u88B9\u88B8\u88C0\u88BE\u88B6"+
- "\u88BC\u88B7\u88BD\u88B2\u8901\u88C9\u8995\u8998"+
- "\u8997\u89DD\u89DA\u89DB\u8A4E\u8A4D\u8A39\u8A59"+
- "\u8A40\u8A57\u8A58\u8A44\u8A45\u8A52\u8A48\u8A51"+
- "\u8A4A\u8A4C\u8A4F\u8C5F\u8C81\u8C80\u8CBA\u8CBE"+
- "\u8CB0\u8CB9\u8CB5\u8D84\u8D80\u8D89\u8DD8\u8DD3"+
- "\u8DCD\u8DC7\u8DD6\u8DDC\u8DCF\u8DD5\u8DD9\u8DC8"+
- "\u8DD7\u8DC5\u8EEF\u8EF7\u8EFA\u8EF9\u8EE6\u8EEE"+
- "\u8EE5\u8EF5\u8EE7\u8EE8\u8EF6\u8EEB\u8EF1\u8EEC"+
- "\u8EF4\u8EE9\u902D\u9034\u902F\u9106\u912C\u9104"+
- "\u90FF\u90FC\u9108\u90F9\u90FB\u9101\u9100\u9107"+
- "\u9105\u9103\u9161\u9164\u915F\u9162\u9160\u9201"+
- "\u920A\u9225\u9203\u921A\u9226\u920F\u920C\u9200"+
- "\u9212\u91FF\u91FD\u9206\u9204\u9227\u9202\u921C"+
- "\u9224\u9219\u9217\u9205\u9216\u957B\u958D\u958C"+
- "\u9590\u9687\u967E\u9688\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9689\u9683"+
- "\u9680\u96C2\u96C8\u96C3\u96F1\u96F0\u976C\u9770"+
- "\u976E\u9807\u98A9\u98EB\u9CE6\u9EF9\u4E83\u4E84"+
- "\u4EB6\u50BD\u50BF\u50C6\u50AE\u50C4\u50CA\u50B4"+
- "\u50C8\u50C2\u50B0\u50C1\u50BA\u50B1\u50CB\u50C9"+
- "\u50B6\u50B8\u51D7\u527A\u5278\u527B\u527C\u55C3"+
- "\u55DB\u55CC\u55D0\u55CB\u55CA\u55DD\u55C0\u55D4"+
- "\u55C4\u55E9\u55BF\u55D2\u558D\u55CF\u55D5\u55E2"+
- "\u55D6\u55C8\u55F2\u55CD\u55D9\u55C2\u5714\u5853"+
- "\u5868\u5864\u584F\u584D\u5849\u586F\u5855\u584E"+
- "\u585D\u5859\u5865\u585B\u583D\u5863\u5871\u58FC"+
- "\u5AC7\u5AC4\u5ACB\u5ABA\u5AB8\u5AB1\u5AB5\u5AB0"+
- "\u5ABF\u5AC8\u5ABB\u5AC6\u5AB7\u5AC0\u5ACA\u5AB4"+
- "\u5AB6\u5ACD\u5AB9\u5A90\u5BD6\u5BD8\u5BD9\u5C1F"+
- "\u5C33\u5D71\u5D63\u5D4A\u5D65\u5D72\u5D6C\u5D5E"+
- "\u5D68\u5D67\u5D62\u5DF0\u5E4F\u5E4E\u5E4A\u5E4D"+
- "\u5E4B\u5EC5\u5ECC\u5EC6\u5ECB\u5EC7\u5F40\u5FAF"+
- "\u5FAD\u60F7\u6149\u614A\u612B\u6145\u6136\u6132"+
- "\u612E\u6146\u612F\u614F\u6129\u6140\u6220\u9168"+
- "\u6223\u6225\u6224\u63C5\u63F1\u63EB\u6410\u6412"+
- "\u6409\u6420\u6424\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6433\u6443\u641F"+
- "\u6415\u6418\u6439\u6437\u6422\u6423\u640C\u6426"+
- "\u6430\u6428\u6441\u6435\u642F\u640A\u641A\u6440"+
- "\u6425\u6427\u640B\u63E7\u641B\u642E\u6421\u640E"+
- "\u656F\u6592\u65D3\u6686\u668C\u6695\u6690\u668B"+
- "\u668A\u6699\u6694\u6678\u6720\u6966\u695F\u6938"+
- "\u694E\u6962\u6971\u693F\u6945\u696A\u6939\u6942"+
- "\u6957\u6959\u697A\u6948\u6949\u6935\u696C\u6933"+
- "\u693D\u6965\u68F0\u6978\u6934\u6969\u6940\u696F"+
- "\u6944\u6976\u6958\u6941\u6974\u694C\u693B\u694B"+
- "\u6937\u695C\u694F\u6951\u6932\u6952\u692F\u697B"+
- "\u693C\u6B46\u6B45\u6B43\u6B42\u6B48\u6B41\u6B9B"+
- "\uFA0D\u6BFB\u6BFC\u6BF9\u6BF7\u6BF8\u6E9B\u6ED6"+
- "\u6EC8\u6E8F\u6EC0\u6E9F\u6E93\u6E94\u6EA0\u6EB1"+
- "\u6EB9\u6EC6\u6ED2\u6EBD\u6EC1\u6E9E\u6EC9\u6EB7"+
- "\u6EB0\u6ECD\u6EA6\u6ECF\u6EB2\u6EBE\u6EC3\u6EDC"+
- "\u6ED8\u6E99\u6E92\u6E8E\u6E8D\u6EA4\u6EA1\u6EBF"+
- "\u6EB3\u6ED0\u6ECA\u6E97\u6EAE\u6EA3\u7147\u7154"+
- "\u7152\u7163\u7160\u7141\u715D\u7162\u7172\u7178"+
- "\u716A\u7161\u7142\u7158\u7143\u714B\u7170\u715F"+
- "\u7150\u7153\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\u7144\u714D\u715A\u724F"+
- "\u728D\u728C\u7291\u7290\u728E\u733C\u7342\u733B"+
- "\u733A\u7340\u734A\u7349\u7444\u744A\u744B\u7452"+
- "\u7451\u7457\u7440\u744F\u7450\u744E\u7442\u7446"+
- "\u744D\u7454\u74E1\u74FF\u74FE\u74FD\u751D\u7579"+
- "\u7577\u6983\u75EF\u760F\u7603\u75F7\u75FE\u75FC"+
- "\u75F9\u75F8\u7610\u75FB\u75F6\u75ED\u75F5\u75FD"+
- "\u7699\u76B5\u76DD\u7755\u775F\u7760\u7752\u7756"+
- "\u775A\u7769\u7767\u7754\u7759\u776D\u77E0\u7887"+
- "\u789A\u7894\u788F\u7884\u7895\u7885\u7886\u78A1"+
- "\u7883\u7879\u7899\u7880\u7896\u787B\u797C\u7982"+
- "\u797D\u7979\u7A11\u7A18\u7A19\u7A12\u7A17\u7A15"+
- "\u7A22\u7A13\u7A1B\u7A10\u7AA3\u7AA2\u7A9E\u7AEB"+
- "\u7B66\u7B64\u7B6D\u7B74\u7B69\u7B72\u7B65\u7B73"+
- "\u7B71\u7B70\u7B61\u7B78\u7B76\u7B63\u7CB2\u7CB4"+
- "\u7CAF\u7D88\u7D86\u7D80\u7D8D\u7D7F\u7D85\u7D7A"+
- "\u7D8E\u7D7B\u7D83\u7D7C\u7D8C\u7D94\u7D84\u7D7D"+
- "\u7D92\u7F6D\u7F6B\u7F67\u7F68\u7F6C\u7FA6\u7FA5"+
- "\u7FA7\u7FDB\u7FDC\u8021\u8164\u8160\u8177\u815C"+
- "\u8169\u815B\u8162\u8172\u6721\u815E\u8176\u8167"+
- "\u816F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\u8144\u8161\u821D\u8249\u8244"+
- "\u8240\u8242\u8245\u84F1\u843F\u8456\u8476\u8479"+
- "\u848F\u848D\u8465\u8451\u8440\u8486\u8467\u8430"+
- "\u844D\u847D\u845A\u8459\u8474\u8473\u845D\u8507"+
- "\u845E\u8437\u843A\u8434\u847A\u8443\u8478\u8432"+
- "\u8445\u8429\u83D9\u844B\u842F\u8442\u842D\u845F"+
- "\u8470\u8439\u844E\u844C\u8452\u846F\u84C5\u848E"+
- "\u843B\u8447\u8436\u8433\u8468\u847E\u8444\u842B"+
- "\u8460\u8454\u846E\u8450\u870B\u8704\u86F7\u870C"+
- "\u86FA\u86D6\u86F5\u874D\u86F8\u870E\u8709\u8701"+
- "\u86F6\u870D\u8705\u88D6\u88CB\u88CD\u88CE\u88DE"+
- "\u88DB\u88DA\u88CC\u88D0\u8985\u899B\u89DF\u89E5"+
- "\u89E4\u89E1\u89E0\u89E2\u89DC\u89E6\u8A76\u8A86"+
- "\u8A7F\u8A61\u8A3F\u8A77\u8A82\u8A84\u8A75\u8A83"+
- "\u8A81\u8A74\u8A7A\u8C3C\u8C4B\u8C4A\u8C65\u8C64"+
- "\u8C66\u8C86\u8C84\u8C85\u8CCC\u8D68\u8D69\u8D91"+
- "\u8D8C\u8D8E\u8D8F\u8D8D\u8D93\u8D94\u8D90\u8D92"+
- "\u8DF0\u8DE0\u8DEC\u8DF1\u8DEE\u8DD0\u8DE9\u8DE3"+
- "\u8DE2\u8DE7\u8DF2\u8DEB\u8DF4\u8F06\u8EFF\u8F01"+
- "\u8F00\u8F05\u8F07\u8F08\u8F02\u8F0B\u9052\u903F"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\u9044\u9049\u903D\u9110\u910D\u910F"+
- "\u9111\u9116\u9114\u910B\u910E\u916E\u916F\u9248"+
- "\u9252\u9230\u923A\u9266\u9233\u9265\u925E\u9283"+
- "\u922E\u924A\u9246\u926D\u926C\u924F\u9260\u9267"+
- "\u926F\u9236\u9261\u9270\u9231\u9254\u9263\u9250"+
- "\u9272\u924E\u9253\u924C\u9256\u9232\u959F\u959C"+
- "\u959E\u959B\u9692\u9693\u9691\u9697\u96CE\u96FA"+
- "\u96FD\u96F8\u96F5\u9773\u9777\u9778\u9772\u980F"+
- "\u980D\u980E\u98AC\u98F6\u98F9\u99AF\u99B2\u99B0"+
- "\u99B5\u9AAD\u9AAB\u9B5B\u9CEA\u9CED\u9CE7\u9E80"+
- "\u9EFD\u50E6\u50D4\u50D7\u50E8\u50F3\u50DB\u50EA"+
- "\u50DD\u50E4\u50D3\u50EC\u50F0\u50EF\u50E3\u50E0";
-
- private final static String innerIndex4=
- "\u51D8\u5280\u5281\u52E9\u52EB\u5330\u53AC\u5627"+
- "\u5615\u560C\u5612\u55FC\u560F\u561C\u5601\u5613"+
- "\u5602\u55FA\u561D\u5604\u55FF\u55F9\u5889\u587C"+
- "\u5890\u5898\u5886\u5881\u587F\u5874\u588B\u587A"+
- "\u5887\u5891\u588E\u5876\u5882\u5888\u587B\u5894"+
- "\u588F\u58FE\u596B\u5ADC\u5AEE\u5AE5\u5AD5\u5AEA"+
- "\u5ADA\u5AED\u5AEB\u5AF3\u5AE2\u5AE0\u5ADB\u5AEC"+
- "\u5ADE\u5ADD\u5AD9\u5AE8\u5ADF\u5B77\u5BE0\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\u5BE3\u5C63\u5D82\u5D80\u5D7D\u5D86\u5D7A"+
- "\u5D81\u5D77\u5D8A\u5D89\u5D88\u5D7E\u5D7C\u5D8D"+
- "\u5D79\u5D7F\u5E58\u5E59\u5E53\u5ED8\u5ED1\u5ED7"+
- "\u5ECE\u5EDC\u5ED5\u5ED9\u5ED2\u5ED4\u5F44\u5F43"+
- "\u5F6F\u5FB6\u612C\u6128\u6141\u615E\u6171\u6173"+
- "\u6152\u6153\u6172\u616C\u6180\u6174\u6154\u617A"+
- "\u615B\u6165\u613B\u616A\u6161\u6156\u6229\u6227"+
- "\u622B\u642B\u644D\u645B\u645D\u6474\u6476\u6472"+
- "\u6473\u647D\u6475\u6466\u64A6\u644E\u6482\u645E"+
- "\u645C\u644B\u6453\u6460\u6450\u647F\u643F\u646C"+
- "\u646B\u6459\u6465\u6477\u6573\u65A0\u66A1\u66A0"+
- "\u669F\u6705\u6704\u6722\u69B1\u69B6\u69C9\u69A0"+
- "\u69CE\u6996\u69B0\u69AC\u69BC\u6991\u6999\u698E"+
- "\u69A7\u698D\u69A9\u69BE\u69AF\u69BF\u69C4\u69BD"+
- "\u69A4\u69D4\u69B9\u69CA\u699A\u69CF\u69B3\u6993"+
- "\u69AA\u69A1\u699E\u69D9\u6997\u6990\u69C2\u69B5"+
- "\u69A5\u69C6\u6B4A\u6B4D\u6B4B\u6B9E\u6B9F\u6BA0"+
- "\u6BC3\u6BC4\u6BFE\u6ECE\u6EF5\u6EF1\u6F03\u6F25"+
- "\u6EF8\u6F37\u6EFB\u6F2E\u6F09\u6F4E\u6F19\u6F1A"+
- "\u6F27\u6F18\u6F3B\u6F12\u6EED\u6F0A\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\u6F36\u6F73\u6EF9\u6EEE\u6F2D\u6F40\u6F30\u6F3C"+
- "\u6F35\u6EEB\u6F07\u6F0E\u6F43\u6F05\u6EFD\u6EF6"+
- "\u6F39\u6F1C\u6EFC\u6F3A\u6F1F\u6F0D\u6F1E\u6F08"+
- "\u6F21\u7187\u7190\u7189\u7180\u7185\u7182\u718F"+
- "\u717B\u7186\u7181\u7197\u7244\u7253\u7297\u7295"+
- "\u7293\u7343\u734D\u7351\u734C\u7462\u7473\u7471"+
- "\u7475\u7472\u7467\u746E\u7500\u7502\u7503\u757D"+
- "\u7590\u7616\u7608\u760C\u7615\u7611\u760A\u7614"+
- "\u76B8\u7781\u777C\u7785\u7782\u776E\u7780\u776F"+
- "\u777E\u7783\u78B2\u78AA\u78B4\u78AD\u78A8\u787E"+
- "\u78AB\u789E\u78A5\u78A0\u78AC\u78A2\u78A4\u7998"+
- "\u798A\u798B\u7996\u7995\u7994\u7993\u7997\u7988"+
- "\u7992\u7990\u7A2B\u7A4A\u7A30\u7A2F\u7A28\u7A26"+
- "\u7AA8\u7AAB\u7AAC\u7AEE\u7B88\u7B9C\u7B8A\u7B91"+
- "\u7B90\u7B96\u7B8D\u7B8C\u7B9B\u7B8E\u7B85\u7B98"+
- "\u5284\u7B99\u7BA4\u7B82\u7CBB\u7CBF\u7CBC\u7CBA"+
- "\u7DA7\u7DB7\u7DC2\u7DA3\u7DAA\u7DC1\u7DC0\u7DC5"+
- "\u7D9D\u7DCE\u7DC4\u7DC6\u7DCB\u7DCC\u7DAF\u7DB9"+
- "\u7D96\u7DBC\u7D9F\u7DA6\u7DAE\u7DA9\u7DA1\u7DC9"+
- "\u7F73\u7FE2\u7FE3\u7FE5\u7FDE\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8024"+
- "\u805D\u805C\u8189\u8186\u8183\u8187\u818D\u818C"+
- "\u818B\u8215\u8497\u84A4\u84A1\u849F\u84BA\u84CE"+
- "\u84C2\u84AC\u84AE\u84AB\u84B9\u84B4\u84C1\u84CD"+
- "\u84AA\u849A\u84B1\u84D0\u849D\u84A7\u84BB\u84A2"+
- "\u8494\u84C7\u84CC\u849B\u84A9\u84AF\u84A8\u84D6"+
- "\u8498\u84B6\u84CF\u84A0\u84D7\u84D4\u84D2\u84DB"+
- "\u84B0\u8491\u8661\u8733\u8723\u8728\u876B\u8740"+
- "\u872E\u871E\u8721\u8719\u871B\u8743\u872C\u8741"+
- "\u873E\u8746\u8720\u8732\u872A\u872D\u873C\u8712"+
- "\u873A\u8731\u8735\u8742\u8726\u8727\u8738\u8724"+
- "\u871A\u8730\u8711\u88F7\u88E7\u88F1\u88F2\u88FA"+
- "\u88FE\u88EE\u88FC\u88F6\u88FB\u88F0\u88EC\u88EB"+
- "\u899D\u89A1\u899F\u899E\u89E9\u89EB\u89E8\u8AAB"+
- "\u8A99\u8A8B\u8A92\u8A8F\u8A96\u8C3D\u8C68\u8C69"+
- "\u8CD5\u8CCF\u8CD7\u8D96\u8E09\u8E02\u8DFF\u8E0D"+
- "\u8DFD\u8E0A\u8E03\u8E07\u8E06\u8E05\u8DFE\u8E00"+
- "\u8E04\u8F10\u8F11\u8F0E\u8F0D\u9123\u911C\u9120"+
- "\u9122\u911F\u911D\u911A\u9124\u9121\u911B\u917A"+
- "\u9172\u9179\u9173\u92A5\u92A4\u9276\u929B\u927A"+
- "\u92A0\u9294\u92AA\u928D\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u92A6\u929A"+
- "\u92AB\u9279\u9297\u927F\u92A3\u92EE\u928E\u9282"+
- "\u9295\u92A2\u927D\u9288\u92A1\u928A\u9286\u928C"+
- "\u9299\u92A7\u927E\u9287\u92A9\u929D\u928B\u922D"+
- "\u969E\u96A1\u96FF\u9758\u977D\u977A\u977E\u9783"+
- "\u9780\u9782\u977B\u9784\u9781\u977F\u97CE\u97CD"+
- "\u9816\u98AD\u98AE\u9902\u9900\u9907\u999D\u999C"+
- "\u99C3\u99B9\u99BB\u99BA\u99C2\u99BD\u99C7\u9AB1"+
- "\u9AE3\u9AE7\u9B3E\u9B3F\u9B60\u9B61\u9B5F\u9CF1"+
- "\u9CF2\u9CF5\u9EA7\u50FF\u5103\u5130\u50F8\u5106"+
- "\u5107\u50F6\u50FE\u510B\u510C\u50FD\u510A\u528B"+
- "\u528C\u52F1\u52EF\u5648\u5642\u564C\u5635\u5641"+
- "\u564A\u5649\u5646\u5658\u565A\u5640\u5633\u563D"+
- "\u562C\u563E\u5638\u562A\u563A\u571A\u58AB\u589D"+
- "\u58B1\u58A0\u58A3\u58AF\u58AC\u58A5\u58A1\u58FF"+
- "\u5AFF\u5AF4\u5AFD\u5AF7\u5AF6\u5B03\u5AF8\u5B02"+
- "\u5AF9\u5B01\u5B07\u5B05\u5B0F\u5C67\u5D99\u5D97"+
- "\u5D9F\u5D92\u5DA2\u5D93\u5D95\u5DA0\u5D9C\u5DA1"+
- "\u5D9A\u5D9E\u5E69\u5E5D\u5E60\u5E5C\u7DF3\u5EDB"+
- "\u5EDE\u5EE1\u5F49\u5FB2\u618B\u6183\u6179\u61B1"+
- "\u61B0\u61A2\u6189\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u619B\u6193\u61AF"+
- "\u61AD\u619F\u6192\u61AA\u61A1\u618D\u6166\u61B3"+
- "\u622D\u646E\u6470\u6496\u64A0\u6485\u6497\u649C"+
- "\u648F\u648B\u648A\u648C\u64A3\u649F\u6468\u64B1"+
- "\u6498\u6576\u657A\u6579\u657B\u65B2\u65B3\u66B5"+
- "\u66B0\u66A9\u66B2\u66B7\u66AA\u66AF\u6A00\u6A06"+
- "\u6A17\u69E5\u69F8\u6A15\u69F1\u69E4\u6A20\u69FF"+
- "\u69EC\u69E2\u6A1B\u6A1D\u69FE\u6A27\u69F2\u69EE"+
- "\u6A14\u69F7\u69E7\u6A40\u6A08\u69E6\u69FB\u6A0D"+
- "\u69FC\u69EB\u6A09\u6A04\u6A18\u6A25\u6A0F\u69F6"+
- "\u6A26\u6A07\u69F4\u6A16\u6B51\u6BA5\u6BA3\u6BA2"+
- "\u6BA6\u6C01\u6C00\u6BFF\u6C02\u6F41\u6F26\u6F7E"+
- "\u6F87\u6FC6\u6F92\u6F8D\u6F89\u6F8C\u6F62\u6F4F"+
- "\u6F85\u6F5A\u6F96\u6F76\u6F6C\u6F82\u6F55\u6F72"+
- "\u6F52\u6F50\u6F57\u6F94\u6F93\u6F5D\u6F00\u6F61"+
- "\u6F6B\u6F7D\u6F67\u6F90\u6F53\u6F8B\u6F69\u6F7F"+
- "\u6F95\u6F63\u6F77\u6F6A\u6F7B\u71B2\u71AF\u719B"+
- "\u71B0\u71A0\u719A\u71A9\u71B5\u719D\u71A5\u719E"+
- "\u71A4\u71A1\u71AA\u719C\u71A7\u71B3\u7298\u729A"+
- "\u7358\u7352\u735E\u735F\u7360\u735D\u735B\u7361"+
- "\u735A\u7359\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\u7362\u7487\u7489\u748A"+
- "\u7486\u7481\u747D\u7485\u7488\u747C\u7479\u7508"+
- "\u7507\u757E\u7625\u761E\u7619\u761D\u761C\u7623"+
- "\u761A\u7628\u761B\u769C\u769D\u769E\u769B\u778D"+
- "\u778F\u7789\u7788\u78CD\u78BB\u78CF\u78CC\u78D1"+
- "\u78CE\u78D4\u78C8\u78C3\u78C4\u78C9\u799A\u79A1"+
- "\u79A0\u799C\u79A2\u799B\u6B76\u7A39\u7AB2\u7AB4"+
- "\u7AB3\u7BB7\u7BCB\u7BBE\u7BAC\u7BCE\u7BAF\u7BB9"+
- "\u7BCA\u7BB5\u7CC5\u7CC8\u7CCC\u7CCB\u7DF7\u7DDB"+
- "\u7DEA\u7DE7\u7DD7\u7DE1\u7E03\u7DFA\u7DE6\u7DF6"+
- "\u7DF1\u7DF0\u7DEE\u7DDF\u7F76\u7FAC\u7FB0\u7FAD"+
- "\u7FED\u7FEB\u7FEA\u7FEC\u7FE6\u7FE8\u8064\u8067"+
- "\u81A3\u819F\u819E\u8195\u81A2\u8199\u8197\u8216"+
- "\u824F\u8253\u8252\u8250\u824E\u8251\u8524\u853B"+
- "\u850F\u8500\u8529\u850E\u8509\u850D\u851F\u850A"+
- "\u8527\u851C\u84FB\u852B\u84FA\u8508\u850C\u84F4"+
- "\u852A\u84F2\u8515\u84F7\u84EB\u84F3\u84FC\u8512"+
- "\u84EA\u84E9\u8516\u84FE\u8528\u851D\u852E\u8502"+
- "\u84FD\u851E\u84F6\u8531\u8526\u84E7\u84E8\u84F0"+
- "\u84EF\u84F9\u8518\u8520\u8530\u850B\u8519\u852F"+
- "\u8662\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\u8756\u8763\u8764\u8777\u87E1"+
- "\u8773\u8758\u8754\u875B\u8752\u8761\u875A\u8751"+
- "\u875E\u876D\u876A\u8750\u874E\u875F\u875D\u876F"+
- "\u876C\u877A\u876E\u875C\u8765\u874F\u877B\u8775"+
- "\u8762\u8767\u8769\u885A\u8905\u890C\u8914\u890B"+
- "\u8917\u8918\u8919\u8906\u8916\u8911\u890E\u8909"+
- "\u89A2\u89A4\u89A3\u89ED\u89F0\u89EC\u8ACF\u8AC6"+
- "\u8AB8\u8AD3\u8AD1\u8AD4\u8AD5\u8ABB\u8AD7\u8ABE"+
- "\u8AC0\u8AC5\u8AD8\u8AC3\u8ABA\u8ABD\u8AD9\u8C3E"+
- "\u8C4D\u8C8F\u8CE5\u8CDF\u8CD9\u8CE8\u8CDA\u8CDD"+
- "\u8CE7\u8DA0\u8D9C\u8DA1\u8D9B\u8E20\u8E23\u8E25"+
- "\u8E24\u8E2E\u8E15\u8E1B\u8E16\u8E11\u8E19\u8E26"+
- "\u8E27\u8E14\u8E12\u8E18\u8E13\u8E1C\u8E17\u8E1A"+
- "\u8F2C\u8F24\u8F18\u8F1A\u8F20\u8F23\u8F16\u8F17"+
- "\u9073\u9070\u906F\u9067\u906B\u912F\u912B\u9129"+
- "\u912A\u9132\u9126\u912E\u9185\u9186\u918A\u9181"+
- "\u9182\u9184\u9180\u92D0\u92C3\u92C4\u92C0\u92D9"+
- "\u92B6\u92CF\u92F1\u92DF\u92D8\u92E9\u92D7\u92DD"+
- "\u92CC\u92EF\u92C2\u92E8\u92CA\u92C8\u92CE\u92E6"+
- "\u92CD\u92D5\u92C9\u92E0\u92DE\u92E7\u92D1\u92D3"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\u92B5\u92E1\u92C6\u92B4\u957C\u95AC"+
- "\u95AB\u95AE\u95B0\u96A4\u96A2\u96D3\u9705\u9708"+
- "\u9702\u975A\u978A\u978E\u9788\u97D0\u97CF\u981E"+
- "\u981D\u9826\u9829\u9828\u9820\u981B\u9827\u98B2"+
- "\u9908\u98FA\u9911\u9914\u9916\u9917\u9915\u99DC"+
- "\u99CD\u99CF\u99D3\u99D4\u99CE\u99C9\u99D6\u99D8"+
- "\u99CB\u99D7\u99CC\u9AB3\u9AEC\u9AEB\u9AF3\u9AF2"+
- "\u9AF1\u9B46\u9B43\u9B67\u9B74\u9B71\u9B66\u9B76"+
- "\u9B75\u9B70\u9B68\u9B64\u9B6C\u9CFC\u9CFA\u9CFD"+
- "\u9CFF\u9CF7\u9D07\u9D00\u9CF9\u9CFB\u9D08\u9D05"+
- "\u9D04\u9E83\u9ED3\u9F0F\u9F10\u511C\u5113\u5117"+
- "\u511A\u5111\u51DE\u5334\u53E1\u5670\u5660\u566E"+
- "\u5673\u5666\u5663\u566D\u5672\u565E\u5677\u571C"+
- "\u571B\u58C8\u58BD\u58C9\u58BF\u58BA\u58C2\u58BC"+
- "\u58C6\u5B17\u5B19\u5B1B\u5B21\u5B14\u5B13\u5B10"+
- "\u5B16\u5B28\u5B1A\u5B20\u5B1E\u5BEF\u5DAC\u5DB1"+
- "\u5DA9\u5DA7\u5DB5\u5DB0\u5DAE\u5DAA\u5DA8\u5DB2"+
- "\u5DAD\u5DAF\u5DB4\u5E67\u5E68\u5E66\u5E6F\u5EE9"+
- "\u5EE7\u5EE6\u5EE8\u5EE5\u5F4B\u5FBC\u619D\u61A8"+
- "\u6196\u61C5\u61B4\u61C6\u61C1\u61CC\u61BA\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\u61BF\u61B8\u618C\u64D7\u64D6\u64D0\u64CF"+
- "\u64C9\u64BD\u6489\u64C3\u64DB\u64F3\u64D9\u6533"+
- "\u657F\u657C\u65A2\u66C8\u66BE\u66C0\u66CA\u66CB"+
- "\u66CF\u66BD\u66BB\u66BA\u66CC\u6723\u6A34\u6A66"+
- "\u6A49\u6A67\u6A32\u6A68\u6A3E\u6A5D\u6A6D\u6A76"+
- "\u6A5B\u6A51\u6A28\u6A5A\u6A3B\u6A3F\u6A41\u6A6A"+
- "\u6A64\u6A50\u6A4F\u6A54\u6A6F\u6A69\u6A60\u6A3C"+
- "\u6A5E\u6A56\u6A55\u6A4D\u6A4E\u6A46\u6B55\u6B54"+
- "\u6B56\u6BA7\u6BAA\u6BAB\u6BC8\u6BC7\u6C04\u6C03"+
- "\u6C06\u6FAD\u6FCB\u6FA3\u6FC7\u6FBC\u6FCE\u6FC8"+
- "\u6F5E\u6FC4\u6FBD\u6F9E\u6FCA\u6FA8\u7004\u6FA5"+
- "\u6FAE\u6FBA\u6FAC\u6FAA\u6FCF\u6FBF\u6FB8\u6FA2"+
- "\u6FC9\u6FAB\u6FCD\u6FAF\u6FB2\u6FB0\u71C5\u71C2"+
- "\u71BF\u71B8\u71D6\u71C0\u71C1\u71CB\u71D4\u71CA"+
- "\u71C7\u71CF\u71BD\u71D8\u71BC\u71C6\u71DA\u71DB"+
- "\u729D\u729E\u7369\u7366\u7367\u736C\u7365\u736B"+
- "\u736A\u747F\u749A\u74A0\u7494\u7492\u7495\u74A1"+
- "\u750B\u7580\u762F\u762D\u7631\u763D\u7633\u763C"+
- "\u7635\u7632\u7630\u76BB\u76E6\u779A\u779D\u77A1"+
- "\u779C\u779B\u77A2\u77A3\u7795\u7799\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\u7797\u78DD\u78E9\u78E5\u78EA\u78DE\u78E3\u78DB"+
- "\u78E1\u78E2\u78ED\u78DF\u78E0\u79A4\u7A44\u7A48"+
- "\u7A47\u7AB6\u7AB8\u7AB5\u7AB1\u7AB7\u7BDE\u7BE3"+
- "\u7BE7\u7BDD\u7BD5\u7BE5\u7BDA\u7BE8\u7BF9\u7BD4"+
- "\u7BEA\u7BE2\u7BDC\u7BEB\u7BD8\u7BDF\u7CD2\u7CD4"+
- "\u7CD7\u7CD0\u7CD1\u7E12\u7E21\u7E17\u7E0C\u7E1F"+
- "\u7E20\u7E13\u7E0E\u7E1C\u7E15\u7E1A\u7E22\u7E0B"+
- "\u7E0F\u7E16\u7E0D\u7E14\u7E25\u7E24\u7F43\u7F7B"+
- "\u7F7C\u7F7A\u7FB1\u7FEF\u802A\u8029\u806C\u81B1"+
- "\u81A6\u81AE\u81B9\u81B5\u81AB\u81B0\u81AC\u81B4"+
- "\u81B2\u81B7\u81A7\u81F2\u8255\u8256\u8257\u8556"+
- "\u8545\u856B\u854D\u8553\u8561\u8558\u8540\u8546"+
- "\u8564\u8541\u8562\u8544\u8551\u8547\u8563\u853E"+
- "\u855B\u8571\u854E\u856E\u8575\u8555\u8567\u8560"+
- "\u858C\u8566\u855D\u8554\u8565\u856C\u8663\u8665"+
- "\u8664\u879B\u878F\u8797\u8793\u8792\u8788\u8781"+
- "\u8796\u8798\u8779\u8787\u87A3\u8785\u8790\u8791"+
- "\u879D\u8784\u8794\u879C\u879A\u8789\u891E\u8926"+
- "\u8930\u892D\u892E\u8927\u8931\u8922\u8929\u8923"+
- "\u892F\u892C\u891F\u89F1\u8AE0\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8AE2"+
- "\u8AF2\u8AF4\u8AF5\u8ADD\u8B14\u8AE4\u8ADF\u8AF0"+
- "\u8AC8\u8ADE\u8AE1\u8AE8\u8AFF\u8AEF\u8AFB\u8C91"+
- "\u8C92\u8C90\u8CF5\u8CEE\u8CF1\u8CF0\u8CF3\u8D6C"+
- "\u8D6E\u8DA5\u8DA7\u8E33\u8E3E\u8E38\u8E40\u8E45"+
- "\u8E36\u8E3C\u8E3D\u8E41\u8E30\u8E3F\u8EBD\u8F36"+
- "\u8F2E\u8F35\u8F32\u8F39\u8F37\u8F34\u9076\u9079"+
- "\u907B\u9086\u90FA\u9133\u9135\u9136\u9193\u9190"+
- "\u9191\u918D\u918F\u9327\u931E\u9308\u931F\u9306"+
- "\u930F\u937A\u9338\u933C\u931B\u9323\u9312\u9301"+
- "\u9346\u932D\u930E\u930D\u92CB\u931D\u92FA\u9325"+
- "\u9313\u92F9\u92F7\u9334\u9302\u9324\u92FF\u9329"+
- "\u9339\u9335\u932A\u9314\u930C\u930B\u92FE\u9309"+
- "\u9300\u92FB\u9316\u95BC\u95CD\u95BE\u95B9\u95BA"+
- "\u95B6\u95BF\u95B5\u95BD\u96A9\u96D4\u970B\u9712"+
- "\u9710\u9799\u9797\u9794\u97F0\u97F8\u9835\u982F"+
- "\u9832\u9924\u991F\u9927\u9929\u999E\u99EE\u99EC"+
- "\u99E5\u99E4\u99F0\u99E3\u99EA\u99E9\u99E7\u9AB9"+
- "\u9ABF\u9AB4\u9ABB\u9AF6\u9AFA\u9AF9\u9AF7\u9B33"+
- "\u9B80\u9B85\u9B87\u9B7C\u9B7E\u9B7B\u9B82\u9B93"+
- "\u9B92\u9B90\u9B7A\u9B95\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9B7D\u9B88"+
- "\u9D25\u9D17\u9D20\u9D1E\u9D14\u9D29\u9D1D\u9D18"+
- "\u9D22\u9D10\u9D19\u9D1F\u9E88\u9E86\u9E87\u9EAE"+
- "\u9EAD\u9ED5\u9ED6\u9EFA\u9F12\u9F3D\u5126\u5125"+
- "\u5122\u5124\u5120\u5129\u52F4\u5693\u568C\u568D"+
- "\u5686\u5684\u5683\u567E\u5682\u567F\u5681\u58D6"+
- "\u58D4\u58CF\u58D2\u5B2D\u5B25\u5B32\u5B23\u5B2C"+
- "\u5B27\u5B26\u5B2F\u5B2E\u5B7B\u5BF1\u5BF2\u5DB7"+
- "\u5E6C\u5E6A\u5FBE\u5FBB\u61C3\u61B5\u61BC\u61E7"+
- "\u61E0\u61E5\u61E4\u61E8\u61DE\u64EF\u64E9\u64E3"+
- "\u64EB\u64E4\u64E8\u6581\u6580\u65B6\u65DA\u66D2"+
- "\u6A8D\u6A96\u6A81\u6AA5\u6A89\u6A9F\u6A9B\u6AA1"+
- "\u6A9E\u6A87\u6A93\u6A8E\u6A95\u6A83\u6AA8\u6AA4"+
- "\u6A91\u6A7F\u6AA6\u6A9A\u6A85\u6A8C\u6A92\u6B5B"+
- "\u6BAD\u6C09\u6FCC\u6FA9\u6FF4\u6FD4\u6FE3\u6FDC"+
- "\u6FED\u6FE7\u6FE6\u6FDE\u6FF2\u6FDD\u6FE2\u6FE8"+
- "\u71E1\u71F1\u71E8\u71F2\u71E4\u71F0\u71E2\u7373"+
- "\u736E\u736F\u7497\u74B2\u74AB\u7490\u74AA\u74AD"+
- "\u74B1\u74A5\u74AF\u7510\u7511\u7512\u750F\u7584"+
- "\u7643\u7648\u7649\u7647\u76A4\u76E9\u77B5\u77AB"+
- "\u77B2\u77B7\u77B6\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u77B4\u77B1\u77A8"+
- "\u77F0\u78F3\u78FD\u7902\u78FB\u78FC\u78F2\u7905"+
- "\u78F9\u78FE\u7904\u79AB\u79A8\u7A5C\u7A5B\u7A56"+
- "\u7A58\u7A54\u7A5A\u7ABE\u7AC0\u7AC1\u7C05\u7C0F"+
- "\u7BF2\u7C00\u7BFF\u7BFB\u7C0E\u7BF4\u7C0B\u7BF3"+
- "\u7C02\u7C09\u7C03\u7C01\u7BF8\u7BFD\u7C06\u7BF0"+
- "\u7BF1\u7C10\u7C0A\u7CE8\u7E2D\u7E3C\u7E42\u7E33"+
- "\u9848\u7E38\u7E2A\u7E49\u7E40\u7E47\u7E29\u7E4C"+
- "\u7E30\u7E3B\u7E36\u7E44\u7E3A\u7F45\u7F7F\u7F7E"+
- "\u7F7D\u7FF4\u7FF2\u802C\u81BB\u81C4\u81CC\u81CA"+
- "\u81C5\u81C7\u81BC\u81E9\u825B\u825A\u825C\u8583"+
- "\u8580\u858F\u85A7\u8595\u85A0\u858B\u85A3\u857B"+
- "\u85A4\u859A\u859E\u8577\u857C\u8589\u85A1\u857A"+
- "\u8578\u8557\u858E\u8596\u8586\u858D\u8599\u859D"+
- "\u8581\u85A2\u8582\u8588\u8585\u8579\u8576\u8598"+
- "\u8590\u859F\u8668\u87BE\u87AA\u87AD\u87C5\u87B0"+
- "\u87AC\u87B9\u87B5\u87BC\u87AE\u87C9\u87C3\u87C2"+
- "\u87CC\u87B7\u87AF\u87C4\u87CA\u87B4\u87B6\u87BF"+
- "\u87B8\u87BD\u87DE\u87B2\u8935\u8933\u893C\u893E"+
- "\u8941\u8952\u8937\u8942\u89AD\u89AF\u89AE\u89F2"+
- "\u89F3\u8B1E\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\u8B18\u8B16\u8B11\u8B05"+
- "\u8B0B\u8B22\u8B0F\u8B12\u8B15\u8B07\u8B0D\u8B08"+
- "\u8B06\u8B1C\u8B13\u8B1A\u8C4F\u8C70\u8C72\u8C71"+
- "\u8C6F\u8C95\u8C94\u8CF9\u8D6F\u8E4E\u8E4D\u8E53"+
- "\u8E50\u8E4C\u8E47\u8F43\u8F40\u9085\u907E\u9138"+
- "\u919A\u91A2\u919B\u9199\u919F\u91A1\u919D\u91A0"+
- "\u93A1\u9383\u93AF\u9364\u9356\u9347\u937C\u9358"+
- "\u935C\u9376\u9349\u9350\u9351\u9360\u936D\u938F"+
- "\u934C\u936A\u9379\u9357\u9355\u9352\u934F\u9371"+
- "\u9377\u937B\u9361\u935E\u9363\u9367\u9380\u934E"+
- "\u9359\u95C7\u95C0\u95C9\u95C3\u95C5\u95B7\u96AE"+
- "\u96B0\u96AC\u9720\u971F\u9718\u971D\u9719\u979A"+
- "\u97A1\u979C\u979E\u979D\u97D5\u97D4\u97F1\u9841"+
- "\u9844\u984A\u9849\u9845\u9843\u9925\u992B\u992C"+
- "\u992A\u9933\u9932\u992F\u992D\u9931\u9930\u9998"+
- "\u99A3\u99A1\u9A02\u99FA\u99F4\u99F7\u99F9\u99F8"+
- "\u99F6\u99FB\u99FD\u99FE\u99FC\u9A03\u9ABE\u9AFE"+
- "\u9AFD\u9B01\u9AFC\u9B48\u9B9A\u9BA8\u9B9E\u9B9B"+
- "\u9BA6\u9BA1\u9BA5\u9BA4\u9B86\u9BA2\u9BA0\u9BAF"+
- "\u9D33\u9D41\u9D67\u9D36\u9D2E\u9D2F\u9D31\u9D38"+
- "\u9D30\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\u9D45\u9D42\u9D43\u9D3E\u9D37"+
- "\u9D40\u9D3D\u7FF5\u9D2D\u9E8A\u9E89\u9E8D\u9EB0"+
- "\u9EC8\u9EDA\u9EFB\u9EFF\u9F24\u9F23\u9F22\u9F54"+
- "\u9FA0\u5131\u512D\u512E\u5698\u569C\u5697\u569A"+
- "\u569D\u5699\u5970\u5B3C\u5C69\u5C6A\u5DC0\u5E6D"+
- "\u5E6E\u61D8\u61DF\u61ED\u61EE\u61F1\u61EA\u61F0"+
- "\u61EB\u61D6\u61E9\u64FF\u6504\u64FD\u64F8\u6501"+
- "\u6503\u64FC\u6594\u65DB\u66DA\u66DB\u66D8\u6AC5"+
- "\u6AB9\u6ABD\u6AE1\u6AC6\u6ABA\u6AB6\u6AB7\u6AC7"+
- "\u6AB4\u6AAD\u6B5E\u6BC9\u6C0B\u7007\u700C\u700D"+
- "\u7001\u7005\u7014\u700E\u6FFF\u7000\u6FFB\u7026"+
- "\u6FFC\u6FF7\u700A\u7201\u71FF\u71F9\u7203\u71FD"+
- "\u7376\u74B8\u74C0\u74B5\u74C1\u74BE\u74B6\u74BB"+
- "\u74C2\u7514\u7513\u765C\u7664\u7659\u7650\u7653"+
- "\u7657\u765A\u76A6\u76BD\u76EC\u77C2\u77BA\u78FF"+
- "\u790C\u7913\u7914\u7909\u7910\u7912\u7911\u79AD"+
- "\u79AC\u7A5F\u7C1C\u7C29\u7C19\u7C20\u7C1F\u7C2D"+
- "\u7C1D\u7C26\u7C28\u7C22\u7C25\u7C30\u7E5C\u7E50"+
- "\u7E56\u7E63\u7E58\u7E62\u7E5F\u7E51\u7E60\u7E57"+
- "\u7E53\u7FB5\u7FB3\u7FF7\u7FF8\u8075\u81D1\u81D2"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\u81D0\u825F\u825E\u85B4\u85C6\u85C0"+
- "\u85C3\u85C2\u85B3\u85B5\u85BD\u85C7\u85C4\u85BF"+
- "\u85CB\u85CE\u85C8\u85C5\u85B1\u85B6\u85D2\u8624"+
- "\u85B8\u85B7\u85BE\u8669\u87E7\u87E6\u87E2\u87DB"+
- "\u87EB\u87EA\u87E5\u87DF\u87F3\u87E4\u87D4\u87DC"+
- "\u87D3\u87ED\u87D8\u87E3\u87A4\u87D7\u87D9\u8801"+
- "\u87F4\u87E8\u87DD\u8953\u894B\u894F\u894C\u8946"+
- "\u8950\u8951\u8949\u8B2A\u8B27\u8B23\u8B33\u8B30"+
- "\u8B35\u8B47\u8B2F\u8B3C\u8B3E\u8B31\u8B25\u8B37"+
- "\u8B26\u8B36\u8B2E\u8B24\u8B3B\u8B3D\u8B3A\u8C42"+
- "\u8C75\u8C99\u8C98\u8C97\u8CFE\u8D04\u8D02\u8D00"+
- "\u8E5C\u8E62\u8E60\u8E57\u8E56\u8E5E\u8E65\u8E67";
-
- private final static String innerIndex5=
- "\u8E5B\u8E5A\u8E61\u8E5D\u8E69\u8E54\u8F46\u8F47"+
- "\u8F48\u8F4B\u9128\u913A\u913B\u913E\u91A8\u91A5"+
- "\u91A7\u91AF\u91AA\u93B5\u938C\u9392\u93B7\u939B"+
- "\u939D\u9389\u93A7\u938E\u93AA\u939E\u93A6\u9395"+
- "\u9388\u9399\u939F\u938D\u93B1\u9391\u93B2\u93A4"+
- "\u93A8\u93B4\u93A3\u93A5\u95D2\u95D3\u95D1\u96B3"+
- "\u96D7\u96DA\u5DC2\u96DF\u96D8\u96DD\u9723\u9722"+
- "\u9725\u97AC\u97AE\u97A8\u97AB\u97A4\u97AA\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\u97A2\u97A5\u97D7\u97D9\u97D6\u97D8\u97FA"+
- "\u9850\u9851\u9852\u98B8\u9941\u993C\u993A\u9A0F"+
- "\u9A0B\u9A09\u9A0D\u9A04\u9A11\u9A0A\u9A05\u9A07"+
- "\u9A06\u9AC0\u9ADC\u9B08\u9B04\u9B05\u9B29\u9B35"+
- "\u9B4A\u9B4C\u9B4B\u9BC7\u9BC6\u9BC3\u9BBF\u9BC1"+
- "\u9BB5\u9BB8\u9BD3\u9BB6\u9BC4\u9BB9\u9BBD\u9D5C"+
- "\u9D53\u9D4F\u9D4A\u9D5B\u9D4B\u9D59\u9D56\u9D4C"+
- "\u9D57\u9D52\u9D54\u9D5F\u9D58\u9D5A\u9E8E\u9E8C"+
- "\u9EDF\u9F01\u9F00\u9F16\u9F25\u9F2B\u9F2A\u9F29"+
- "\u9F28\u9F4C\u9F55\u5134\u5135\u5296\u52F7\u53B4"+
- "\u56AB\u56AD\u56A6\u56A7\u56AA\u56AC\u58DA\u58DD"+
- "\u58DB\u5912\u5B3D\u5B3E\u5B3F\u5DC3\u5E70\u5FBF"+
- "\u61FB\u6507\u6510\u650D\u6509\u650C\u650E\u6584"+
- "\u65DE\u65DD\u66DE\u6AE7\u6AE0\u6ACC\u6AD1\u6AD9"+
- "\u6ACB\u6ADF\u6ADC\u6AD0\u6AEB\u6ACF\u6ACD\u6ADE"+
- "\u6B60\u6BB0\u6C0C\u7019\u7027\u7020\u7016\u702B"+
- "\u7021\u7022\u7023\u7029\u7017\u7024\u701C\u702A"+
- "\u720C\u720A\u7207\u7202\u7205\u72A5\u72A6\u72A4"+
- "\u72A3\u72A1\u74CB\u74C5\u74B7\u74C3\u7516\u7660"+
- "\u77C9\u77CA\u77C4\u77F1\u791D\u791B\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\u7921\u791C\u7917\u791E\u79B0\u7A67\u7A68\u7C33"+
- "\u7C3C\u7C39\u7C2C\u7C3B\u7CEC\u7CEA\u7E76\u7E75"+
- "\u7E78\u7E70\u7E77\u7E6F\u7E7A\u7E72\u7E74\u7E68"+
- "\u7F4B\u7F4A\u7F83\u7F86\u7FB7\u7FFD\u7FFE\u8078"+
- "\u81D7\u81D5\u8264\u8261\u8263\u85EB\u85F1\u85ED"+
- "\u85D9\u85E1\u85E8\u85DA\u85D7\u85EC\u85F2\u85F8"+
- "\u85D8\u85DF\u85E3\u85DC\u85D1\u85F0\u85E6\u85EF"+
- "\u85DE\u85E2\u8800\u87FA\u8803\u87F6\u87F7\u8809"+
- "\u880C\u880B\u8806\u87FC\u8808\u87FF\u880A\u8802"+
- "\u8962\u895A\u895B\u8957\u8961\u895C\u8958\u895D"+
- "\u8959\u8988\u89B7\u89B6\u89F6\u8B50\u8B48\u8B4A"+
- "\u8B40\u8B53\u8B56\u8B54\u8B4B\u8B55\u8B51\u8B42"+
- "\u8B52\u8B57\u8C43\u8C77\u8C76\u8C9A\u8D06\u8D07"+
- "\u8D09\u8DAC\u8DAA\u8DAD\u8DAB\u8E6D\u8E78\u8E73"+
- "\u8E6A\u8E6F\u8E7B\u8EC2\u8F52\u8F51\u8F4F\u8F50"+
- "\u8F53\u8FB4\u9140\u913F\u91B0\u91AD\u93DE\u93C7"+
- "\u93CF\u93C2\u93DA\u93D0\u93F9\u93EC\u93CC\u93D9"+
- "\u93A9\u93E6\u93CA\u93D4\u93EE\u93E3\u93D5\u93C4"+
- "\u93CE\u93C0\u93D2\u93E7\u957D\u95DA\u95DB\u96E1"+
- "\u9729\u972B\u972C\u9728\u9726\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u97B3"+
- "\u97B7\u97B6\u97DD\u97DE\u97DF\u985C\u9859\u985D"+
- "\u9857\u98BF\u98BD\u98BB\u98BE\u9948\u9947\u9943"+
- "\u99A6\u99A7\u9A1A\u9A15\u9A25\u9A1D\u9A24\u9A1B"+
- "\u9A22\u9A20\u9A27\u9A23\u9A1E\u9A1C\u9A14\u9AC2"+
- "\u9B0B\u9B0A\u9B0E\u9B0C\u9B37\u9BEA\u9BEB\u9BE0"+
- "\u9BDE\u9BE4\u9BE6\u9BE2\u9BF0\u9BD4\u9BD7\u9BEC"+
- "\u9BDC\u9BD9\u9BE5\u9BD5\u9BE1\u9BDA\u9D77\u9D81"+
- "\u9D8A\u9D84\u9D88\u9D71\u9D80\u9D78\u9D86\u9D8B"+
- "\u9D8C\u9D7D\u9D6B\u9D74\u9D75\u9D70\u9D69\u9D85"+
- "\u9D73\u9D7B\u9D82\u9D6F\u9D79\u9D7F\u9D87\u9D68"+
- "\u9E94\u9E91\u9EC0\u9EFC\u9F2D\u9F40\u9F41\u9F4D"+
- "\u9F56\u9F57\u9F58\u5337\u56B2\u56B5\u56B3\u58E3"+
- "\u5B45\u5DC6\u5DC7\u5EEE\u5EEF\u5FC0\u5FC1\u61F9"+
- "\u6517\u6516\u6515\u6513\u65DF\u66E8\u66E3\u66E4"+
- "\u6AF3\u6AF0\u6AEA\u6AE8\u6AF9\u6AF1\u6AEE\u6AEF"+
- "\u703C\u7035\u702F\u7037\u7034\u7031\u7042\u7038"+
- "\u703F\u703A\u7039\u7040\u703B\u7033\u7041\u7213"+
- "\u7214\u72A8\u737D\u737C\u74BA\u76AB\u76AA\u76BE"+
- "\u76ED\u77CC\u77CE\u77CF\u77CD\u77F2\u7925\u7923"+
- "\u7927\u7928\u7924\u7929\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u79B2\u7A6E"+
- "\u7A6C\u7A6D\u7AF7\u7C49\u7C48\u7C4A\u7C47\u7C45"+
- "\u7CEE\u7E7B\u7E7E\u7E81\u7E80\u7FBA\u7FFF\u8079"+
- "\u81DB\u81D9\u820B\u8268\u8269\u8622\u85FF\u8601"+
- "\u85FE\u861B\u8600\u85F6\u8604\u8609\u8605\u860C"+
- "\u85FD\u8819\u8810\u8811\u8817\u8813\u8816\u8963"+
- "\u8966\u89B9\u89F7\u8B60\u8B6A\u8B5D\u8B68\u8B63"+
- "\u8B65\u8B67\u8B6D\u8DAE\u8E86\u8E88\u8E84\u8F59"+
- "\u8F56\u8F57\u8F55\u8F58\u8F5A\u908D\u9143\u9141"+
- "\u91B7\u91B5\u91B2\u91B3\u940B\u9413\u93FB\u9420"+
- "\u940F\u9414\u93FE\u9415\u9410\u9428\u9419\u940D"+
- "\u93F5\u9400\u93F7\u9407\u940E\u9416\u9412\u93FA"+
- "\u9409\u93F8\u940A\u93FF\u93FC\u940C\u93F6\u9411"+
- "\u9406\u95DE\u95E0\u95DF\u972E\u972F\u97B9\u97BB"+
- "\u97FD\u97FE\u9860\u9862\u9863\u985F\u98C1\u98C2"+
- "\u9950\u994E\u9959\u994C\u994B\u9953\u9A32\u9A34"+
- "\u9A31\u9A2C\u9A2A\u9A36\u9A29\u9A2E\u9A38\u9A2D"+
- "\u9AC7\u9ACA\u9AC6\u9B10\u9B12\u9B11\u9C0B\u9C08"+
- "\u9BF7\u9C05\u9C12\u9BF8\u9C40\u9C07\u9C0E\u9C06"+
- "\u9C17\u9C14\u9C09\u9D9F\u9D99\u9DA4\u9D9D\u9D92"+
- "\u9D98\u9D90\u9D9B\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9DA0\u9D94\u9D9C"+
- "\u9DAA\u9D97\u9DA1\u9D9A\u9DA2\u9DA8\u9D9E\u9DA3"+
- "\u9DBF\u9DA9\u9D96\u9DA6\u9DA7\u9E99\u9E9B\u9E9A"+
- "\u9EE5\u9EE4\u9EE7\u9EE6\u9F30\u9F2E\u9F5B\u9F60"+
- "\u9F5E\u9F5D\u9F59\u9F91\u513A\u5139\u5298\u5297"+
- "\u56C3\u56BD\u56BE\u5B48\u5B47\u5DCB\u5DCF\u5EF1"+
- "\u61FD\u651B\u6B02\u6AFC\u6B03\u6AF8\u6B00\u7043"+
- "\u7044\u704A\u7048\u7049\u7045\u7046\u721D\u721A"+
- "\u7219\u737E\u7517\u766A\u77D0\u792D\u7931\u792F"+
- "\u7C54\u7C53\u7CF2\u7E8A\u7E87\u7E88\u7E8B\u7E86"+
- "\u7E8D\u7F4D\u7FBB\u8030\u81DD\u8618\u862A\u8626"+
- "\u861F\u8623\u861C\u8619\u8627\u862E\u8621\u8620"+
- "\u8629\u861E\u8625\u8829\u881D\u881B\u8820\u8824"+
- "\u881C\u882B\u884A\u896D\u8969\u896E\u896B\u89FA"+
- "\u8B79\u8B78\u8B45\u8B7A\u8B7B\u8D10\u8D14\u8DAF"+
- "\u8E8E\u8E8C\u8F5E\u8F5B\u8F5D\u9146\u9144\u9145"+
- "\u91B9\u943F\u943B\u9436\u9429\u943D\u943C\u9430"+
- "\u9439\u942A\u9437\u942C\u9440\u9431\u95E5\u95E4"+
- "\u95E3\u9735\u973A\u97BF\u97E1\u9864\u98C9\u98C6"+
- "\u98C0\u9958\u9956\u9A39\u9A3D\u9A46\u9A44\u9A42"+
- "\u9A41\u9A3A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\u9A3F\u9ACD\u9B15\u9B17"+
- "\u9B18\u9B16\u9B3A\u9B52\u9C2B\u9C1D\u9C1C\u9C2C"+
- "\u9C23\u9C28\u9C29\u9C24\u9C21\u9DB7\u9DB6\u9DBC"+
- "\u9DC1\u9DC7\u9DCA\u9DCF\u9DBE\u9DC5\u9DC3\u9DBB"+
- "\u9DB5\u9DCE\u9DB9\u9DBA\u9DAC\u9DC8\u9DB1\u9DAD"+
- "\u9DCC\u9DB3\u9DCD\u9DB2\u9E7A\u9E9C\u9EEB\u9EEE"+
- "\u9EED\u9F1B\u9F18\u9F1A\u9F31\u9F4E\u9F65\u9F64"+
- "\u9F92\u4EB9\u56C6\u56C5\u56CB\u5971\u5B4B\u5B4C"+
- "\u5DD5\u5DD1\u5EF2\u6521\u6520\u6526\u6522\u6B0B"+
- "\u6B08\u6B09\u6C0D\u7055\u7056\u7057\u7052\u721E"+
- "\u721F\u72A9\u737F\u74D8\u74D5\u74D9\u74D7\u766D"+
- "\u76AD\u7935\u79B4\u7A70\u7A71\u7C57\u7C5C\u7C59"+
- "\u7C5B\u7C5A\u7CF4\u7CF1\u7E91\u7F4F\u7F87\u81DE"+
- "\u826B\u8634\u8635\u8633\u862C\u8632\u8636\u882C"+
- "\u8828\u8826\u882A\u8825\u8971\u89BF\u89BE\u89FB"+
- "\u8B7E\u8B84\u8B82\u8B86\u8B85\u8B7F\u8D15\u8E95"+
- "\u8E94\u8E9A\u8E92\u8E90\u8E96\u8E97\u8F60\u8F62"+
- "\u9147\u944C\u9450\u944A\u944B\u944F\u9447\u9445"+
- "\u9448\u9449\u9446\u973F\u97E3\u986A\u9869\u98CB"+
- "\u9954\u995B\u9A4E\u9A53\u9A54\u9A4C\u9A4F\u9A48"+
- "\u9A4A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\u9A49\u9A52\u9A50\u9AD0\u9B19"+
- "\u9B2B\u9B3B\u9B56\u9B55\u9C46\u9C48\u9C3F\u9C44"+
- "\u9C39\u9C33\u9C41\u9C3C\u9C37\u9C34\u9C32\u9C3D"+
- "\u9C36\u9DDB\u9DD2\u9DDE\u9DDA\u9DCB\u9DD0\u9DDC"+
- "\u9DD1\u9DDF\u9DE9\u9DD9\u9DD8\u9DD6\u9DF5\u9DD5"+
- "\u9DDD\u9EB6\u9EF0\u9F35\u9F33\u9F32\u9F42\u9F6B"+
- "\u9F95\u9FA2\u513D\u5299\u58E8\u58E7\u5972\u5B4D"+
- "\u5DD8\u882F\u5F4F\u6201\u6203\u6204\u6529\u6525"+
- "\u6596\u66EB\u6B11\u6B12\u6B0F\u6BCA\u705B\u705A"+
- "\u7222\u7382\u7381\u7383\u7670\u77D4\u7C67\u7C66"+
- "\u7E95\u826C\u863A\u8640\u8639\u863C\u8631\u863B"+
- "\u863E\u8830\u8832\u882E\u8833\u8976\u8974\u8973"+
- "\u89FE\u8B8C\u8B8E\u8B8B\u8B88\u8C45\u8D19\u8E98"+
- "\u8F64\u8F63\u91BC\u9462\u9455\u945D\u9457\u945E"+
- "\u97C4\u97C5\u9800\u9A56\u9A59\u9B1E\u9B1F\u9B20"+
- "\u9C52\u9C58\u9C50\u9C4A\u9C4D\u9C4B\u9C55\u9C59"+
- "\u9C4C\u9C4E\u9DFB\u9DF7\u9DEF\u9DE3\u9DEB\u9DF8"+
- "\u9DE4\u9DF6\u9DE1\u9DEE\u9DE6\u9DF2\u9DF0\u9DE2"+
- "\u9DEC\u9DF4\u9DF3\u9DE8\u9DED\u9EC2\u9ED0\u9EF2"+
- "\u9EF3\u9F06\u9F1C\u9F38\u9F37\u9F36\u9F43\u9F4F"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\u9F71\u9F70\u9F6E\u9F6F\u56D3\u56CD"+
- "\u5B4E\u5C6D\u652D\u66ED\u66EE\u6B13\u705F\u7061"+
- "\u705D\u7060\u7223\u74DB\u74E5\u77D5\u7938\u79B7"+
- "\u79B6\u7C6A\u7E97\u7F89\u826D\u8643\u8838\u8837"+
- "\u8835\u884B\u8B94\u8B95\u8E9E\u8E9F\u8EA0\u8E9D"+
- "\u91BE\u91BD\u91C2\u946B\u9468\u9469\u96E5\u9746"+
- "\u9743\u9747\u97C7\u97E5\u9A5E\u9AD5\u9B59\u9C63"+
- "\u9C67\u9C66\u9C62\u9C5E\u9C60\u9E02\u9DFE\u9E07"+
- "\u9E03\u9E06\u9E05\u9E00\u9E01\u9E09\u9DFF\u9DFD"+
- "\u9E04\u9EA0\u9F1E\u9F46\u9F74\u9F75\u9F76\u56D4"+
- "\u652E\u65B8\u6B18\u6B19\u6B17\u6B1A\u7062\u7226"+
- "\u72AA\u77D8\u77D9\u7939\u7C69\u7C6B\u7CF6\u7E9A"+
- "\u7E98\u7E9B\u7E99\u81E0\u81E1\u8646\u8647\u8648"+
- "\u8979\u897A\u897C\u897B\u89FF\u8B98\u8B99\u8EA5"+
- "\u8EA4\u8EA3\u946E\u946D\u946F\u9471\u9473\u9749"+
- "\u9872\u995F\u9C68\u9C6E\u9C6D\u9E0B\u9E0D\u9E10"+
- "\u9E0F\u9E12\u9E11\u9EA1\u9EF5\u9F09\u9F47\u9F78"+
- "\u9F7B\u9F7A\u9F79\u571E\u7066\u7C6F\u883C\u8DB2"+
- "\u8EA6\u91C3\u9474\u9478\u9476\u9475\u9A60\u9C74"+
- "\u9C73\u9C71\u9C75\u9E14\u9E13\u9EF6\u9F0A\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\u9FA4\u7068\u7065\u7CF7\u866A\u883E\u883D"+
- "\u883F\u8B9E\u8C9C\u8EA9\u8EC9\u974B\u9873\u9874"+
- "\u98CC\u9961\u99AB\u9A64\u9A66\u9A67\u9B24\u9E15"+
- "\u9E17\u9F48\u6207\u6B1E\u7227\u864C\u8EA8\u9482"+
- "\u9480\u9481\u9A69\u9A68\u9B2E\u9E19\u7229\u864B"+
- "\u8B9F\u9483\u9C79\u9EB7\u7675\u9A6B\u9C7A\u9E1D"+
- "\u7069\u706A\u9EA4\u9F7E\u9F49\u9F98\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
- "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD";
-
- private final static short index1[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, 43, 44, 45, 46,
- 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 0, 0, 0, 0, 0, 0
- };
-
- String index2[] = {
- innerIndex0,
- innerIndex1,
- innerIndex2,
- innerIndex3,
- innerIndex4,
- innerIndex5
- };
}
--- a/jdk/src/share/classes/sun/io/CharToByteJohab.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/io/CharToByteJohab.java Tue Apr 21 21:26:21 2009 -0700
@@ -46,4728 +46,4 @@
super.index1 = nioCoder.getEncoderIndex1();
super.index2 = nioCoder.getEncoderIndex2();
}
-
- private final static String innerIndex0=
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0020\u0021\"\u0023\u0024\u0025\u0026\'"+
- "\u0028\u0029\u002A\u002B\u002C\u002D\u002E\u002F"+
- "\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037"+
- "\u0038\u0039\u003A\u003B\u003C\u003D\u003E\u003F"+
- "\u0040\u0041\u0042\u0043\u0044\u0045\u0046\u0047"+
- "\u0048\u0049\u004A\u004B\u004C\u004D\u004E\u004F"+
- "\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0057"+
- "\u0058\u0059\u005A\u005B\\\u005D\u005E\u005F"+
- "\u0060\u0061\u0062\u0063\u0064\u0065\u0066\u0067"+
- "\u0068\u0069\u006A\u006B\u006C\u006D\u006E\u006F"+
- "\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077"+
- "\u0078\u0079\u007A\u007B\u007C\u007D\u007E\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uD9AE\u0000\u0000\uD9B4\u0000\u0000\uD967"+
- "\uD937\u0000\uDCA3\u0000\u0000\uD939\u0000\u0000"+
- "\uD956\uD94E\uDD99\uDD9A\uD9A5\u0000\uD9D2\uD934"+
- "\uD9AC\uDD98\uDCAC\u0000\uDCF9\uDCF6\uDCFA\uD9AF"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uDCA1\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uDCA2\u0000\u0000\u0000\u0000\u0000\u0000\uD94F"+
- "\uDCAA\u0000\u0000\u0000\u0000\u0000\uDCAD\uDD3C"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uDD31\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uDD33\u0000\u0000\u0000\u0000\u0000\u0000\uD950"+
- "\uDD3A\u0000\u0000\u0000\u0000\u0000\uDD3D\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uDD32\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uDCA4\uDD34"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uDD35\uDCA6\uDD36\u0000\u0000\u0000\u0000"+
- "\uDD37\u0000\u0000\u0000\u0000\u0000\u0000\uDCA8"+
- "\uDD38\uDCA9\uDD39\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uDD40\uDCAF\uDD3F\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uDCAB\uDD3B\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uDCAE\uDD3E"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD9A7"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uD9B0\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uD9A8\uD9AB\uD9AA\uD9AD\u0000\uD9A9\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uDB51\uDB52\uDB53\uDB54\uDB55\uDB56\uDB57"+
- "\uDB58\uDB59\uDB5A\uDB5B\uDB5C\uDB5D\uDB5E\uDB5F"+
- "\uDB60\uDB61\u0000\uDB62\uDB63\uDB64\uDB65\uDB66"+
- "\uDB67\uDB68\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uDB71\uDB72\uDB73\uDB74\uDB75\uDB76\uDB77"+
- "\uDB78\uDB79\uDB7A\uDB7B\uDB7C\uDB7D\uDB7E\uDB91"+
- "\uDB92\uDB93\u0000\uDB94\uDB95\uDB96\uDB97\uDB98"+
- "\uDB99\uDB9A\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uDEA7\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uDEA1\uDEA2\uDEA3\uDEA4\uDEA5\uDEA6\uDEA8\uDEA9"+
- "\uDEAA\uDEAB\uDEAC\uDEAD\uDEAE\uDEAF\uDEB0\uDEB1"+
- "\uDEB2\uDEB3\uDEB4\uDEB5\uDEB6\uDEB7\uDEB8\uDEB9"+
- "\uDEBA\uDEBB\uDEBC\uDEBD\uDEBE\uDEBF\uDEC0\uDEC1"+
- "\uDED1\uDED2\uDED3\uDED4\uDED5\uDED6\uDED8\uDED9"+
- "\uDEDA\uDEDB\uDEDC\uDEDD\uDEDE\uDEDF\uDEE0\uDEE1"+
- "\uDEE2\uDEE3\uDEE4\uDEE5\uDEE6\uDEE7\uDEE8\uDEE9"+
- "\uDEEA\uDEEB\uDEEC\uDEED\uDEEE\uDEEF\uDEF0\uDEF1"+
- "\u0000\uDED7\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uD93A\u0000\u0000"+
- "\uD93E\uD93F\u0000\u0000\uD940\uD941\u0000\u0000"+
- "\uD9D3\uD9D4\u0000\u0000\u0000\uD935\uD936\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uD9B6\u0000\uD957\uD958\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uD968\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uDD9B\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDD9C"+
- "\u0000\uDD9D\uDD9E\uDD9F\uDDA0\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uD959\u0000\u0000\u0000\u0000"+
- "\u0000\uD9B5\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uDC34\u0000\u0000\uD9E0\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uD9E5\uD9E2\u0000\u0000\u0000\uDC69\u0000"+
- "\u0000\u0000\u0000\uD95A\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uDCF7\uDCF8\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uDCFB\uDCFC\uDCFD\uDCFE\u0000"+
- "\uDB40\uDB41\uDB42\uDB43\uDB44\uDB45\uDB46\uDB47"+
- "\uDB48\uDB49\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uDB31\uDB32\uDB33\uDB34\uDB35\uDB36\uDB37\uDB38"+
- "\uDB39\uDB3A\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uD977\uD978\uD976\uD979\uD97A\uD9D5\uD9D8\uD9D6"+
- "\uD9D9\uD9D7\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uD9A1\u0000\uD9A2\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uD9A3\u0000\uD963\uD9A4\u0000\u0000\u0000\uD964"+
- "\uD996\u0000\u0000\uD997\u0000\u0000\u0000\uD9B3"+
- "\u0000\uD9B2\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uD97E\u0000\u0000\uD992\uD954\u0000"+
- "\uD960\u0000\u0000\u0000\u0000\uD93B\u0000\uD99E"+
- "\uD99F\uD99D\uD99C\uD994\uD995\u0000\uD9B1\u0000"+
- "\u0000\u0000\u0000\u0000\uD955\uD993\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uD93D\uD991\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uD966\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uD951\uD965\u0000\u0000\uD952\uD953\u0000\u0000"+
- "\u0000\u0000\uD97C\uD97D\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uD99A\uD99B\u0000\u0000\uD998\uD999"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uD9C1\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uD961\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uD962\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uDCE7\uDCE8\uDCE9\uDCEA\uDCEB\uDCEC\uDCED\uDCEE"+
- "\uDCEF\uDCF0\uDCF1\uDCF2\uDCF3\uDCF4\uDCF5\u0000"+
- "\u0000\u0000\u0000\u0000\uDD77\uDD78\uDD79\uDD7A"+
- "\uDD7B\uDD7C\uDD7D\uDD7E\uDD91\uDD92\uDD93\uDD94"+
- "\uDD95\uDD96\uDD97\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uDD5D\uDD5E\uDD5F\uDD60"+
- "\uDD61\uDD62\uDD63\uDD64\uDD65\uDD66\uDD67\uDD68"+
- "\uDD69\uDD6A\uDD6B\uDD6C\uDD6D\uDD6E\uDD6F\uDD70"+
- "\uDD71\uDD72\uDD73\uDD74\uDD75\uDD76\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uDCCD\uDCCE\uDCCF\uDCD0\uDCD1\uDCD2\uDCD3\uDCD4"+
- "\uDCD5\uDCD6\uDCD7\uDCD8\uDCD9\uDCDA\uDCDB\uDCDC"+
- "\uDCDD\uDCDE\uDCDF\uDCE0\uDCE1\uDCE2\uDCE3\uDCE4"+
- "\uDCE5\uDCE6\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uDBA1\uDBAC\uDBA2\uDBAD\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uDBA3\uDBC8\uDBC7\uDBAE"+
- "\uDBA4\uDBC2\uDBC1\uDBAF\uDBA6\uDBC6\uDBC5\uDBB1"+
- "\uDBA5\uDBC4\uDBC3\uDBB0\uDBA7\uDBBC\uDBC9\uDBCA"+
- "\uDBB7\uDBCB\uDBCC\uDBB2\uDBA9\uDBBE\uDBCD\uDBCE"+
- "\uDBB9\uDBCF\uDBD0\uDBB4\uDBA8\uDBD1\uDBD2\uDBB8"+
- "\uDBBD\uDBD3\uDBD4\uDBB3\uDBAA\uDBD5\uDBD6\uDBBA"+
- "\uDBBF\uDBD7\uDBD8\uDBB5\uDBAB\uDBD9\uDBDA\uDBBB"+
- "\uDBDB\uDBDC\uDBC0\uDBDD\uDBDE\uDBDF\uDBE0\uDBE1"+
- "\uDBE2\uDBE3\uDBE4\uDBB6\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uD9C6\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uD971\uD970\u0000\uD9C3\uD9C7\uD9C8\uD9CB\uD9CA"+
- "\uD9C9\uD9CC\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uD973\uD972\u0000\u0000\uD9BA\uD9B9"+
- "\u0000\u0000\u0000\u0000\uD975\uD974\u0000\u0000"+
- "\uD9B8\uD9B7\u0000\u0000\u0000\u0000\uD96F\uD96E"+
- "\uD9C2\u0000\u0000\uD96B\u0000\u0000\uD96D\uD96C"+
- "\uD9C4\uD9C5\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uD96A\uD969\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uD9CF\uD9CE"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uD9D0\u0000\uD9D1\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uD95F\u0000\uD95E\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uD9BC\uD9BD\u0000\uD9C0\uD9BB\uD9BE\u0000\uD9BF"+
- "\uD9CD\uD9DB\uD9DC\u0000\uD9DD\uD9DA\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uD931\uD932\uD933\uD938\u0000\u0000\u0000\u0000"+
- "\uD944\uD945\uD946\uD947\uD948\uD949\uD94A\uD94B"+
- "\uD94C\uD94D\u0000\uD97B\uD942\uD943\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uDDA1\uDDA2\uDDA3\uDDA4\uDDA5\uDDA6\uDDA7"+
- "\uDDA8\uDDA9\uDDAA\uDDAB\uDDAC\uDDAD\uDDAE\uDDAF"+
- "\uDDB0\uDDB1\uDDB2\uDDB3\uDDB4\uDDB5\uDDB6\uDDB7"+
- "\uDDB8\uDDB9\uDDBA\uDDBB\uDDBC\uDDBD\uDDBE\uDDBF"+
- "\uDDC0\uDDC1\uDDC2\uDDC3\uDDC4\uDDC5\uDDC6\uDDC7"+
- "\uDDC8\uDDC9\uDDCA\uDDCB\uDDCC\uDDCD\uDDCE\uDDCF"+
- "\uDDD0\uDDD1\uDDD2\uDDD3\uDDD4\uDDD5\uDDD6\uDDD7"+
- "\uDDD8\uDDD9\uDDDA\uDDDB\uDDDC\uDDDD\uDDDE\uDDDF"+
- "\uDDE0\uDDE1\uDDE2\uDDE3\uDDE4\uDDE5\uDDE6\uDDE7"+
- "\uDDE8\uDDE9\uDDEA\uDDEB\uDDEC\uDDED\uDDEE\uDDEF"+
- "\uDDF0\uDDF1\uDDF2\uDDF3\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uDE31\uDE32\uDE33\uDE34\uDE35\uDE36\uDE37"+
- "\uDE38\uDE39\uDE3A\uDE3B\uDE3C\uDE3D\uDE3E\uDE3F"+
- "\uDE40\uDE41\uDE42\uDE43\uDE44\uDE45\uDE46\uDE47"+
- "\uDE48\uDE49\uDE4A\uDE4B\uDE4C\uDE4D\uDE4E\uDE4F"+
- "\uDE50\uDE51\uDE52\uDE53\uDE54\uDE55\uDE56\uDE57"+
- "\uDE58\uDE59\uDE5A\uDE5B\uDE5C\uDE5D\uDE5E\uDE5F"+
- "\uDE60\uDE61\uDE62\uDE63\uDE64\uDE65\uDE66\uDE67"+
- "\uDE68\uDE69\uDE6A\uDE6B\uDE6C\uDE6D\uDE6E\uDE6F"+
- "\uDE70\uDE71\uDE72\uDE73\uDE74\uDE75\uDE76\uDE77"+
- "\uDE78\uDE79\uDE7A\uDE7B\uDE7C\uDE7D\uDE7E\uDE91"+
- "\uDE92\uDE93\uDE94\uDE95\uDE96\uDE97\uDE98\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u8841\u8C41\u8444\u9041\u8446\u8447\u9441"+
- "\u9841\u9C41\u844A\u844B\u844C\u844D\u844E\u844F"+
- "\u8450\uA041\uA441\uA841\u8454\uAC41\uB041\uB441"+
- "\uB841\uBC41\uC041\uC441\uC841\uCC41\uD041\u8461"+
- "\u8481\u84A1\u84C1\u84E1\u8541\u8561\u8581\u85A1"+
- "\u85C1\u85E1\u8641\u8661\u8681\u86A1\u86C1\u86E1"+
- "\u8741\u8761\u8781\u87A1\uDAD4\uDAD5\uDAD6\uDAD7"+
- "\uDAD8\uDAD9\uDADA\uDADB\uDADC\uDADD\uDADE\uDADF"+
- "\uDAE0\uDAE1\uDAE2\uDAE3\uDAE4\uDAE5\uDAE6\uDAE7"+
- "\uDAE8\uDAE9\uDAEA\uDAEB\uDAEC\uDAED\uDAEE\uDAEF"+
- "\uDAF0\uDAF1\uDAF2\uDAF3\uDAF4\uDAF5\uDAF6\uDAF7"+
- "\uDAF8\uDAF9\uDAFA\uDAFB\uDAFC\uDAFD\uDAFE\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uDD41\uDD42\uDD43\uDD44\uDD45\uDD46\uDD47\uDD48"+
- "\uDD49\uDD4A\uDD4B\uDD4C\uDD4D\uDD4E\uDD4F\uDD50"+
- "\uDD51\uDD52\uDD53\uDD54\uDD55\uDD56\uDD57\uDD58"+
- "\uDD59\uDD5A\uDD5B\uDD5C\uD9DF\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uDCB1\uDCB2\uDCB3\uDCB4\uDCB5\uDCB6\uDCB7\uDCB8"+
- "\uDCB9\uDCBA\uDCBB\uDCBC\uDCBD\uDCBE\uDCBF\uDCC0"+
- "\uDCC1\uDCC2\uDCC3\uDCC4\uDCC5\uDCC6\uDCC7\uDCC8"+
- "\uDCC9\uDCCA\uDCCB\uDCCC\u0000\u0000\u0000\uD9DE"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
- private final static String innerIndex1=
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uDC59\uDC5A\uDC5B\uDC5C\uDC5D\u0000\u0000\u0000"+
- "\uDC4A\uDC4B\uDC6C\uDC6D\uDC6E\uDC46\uDC47\uDC48"+
- "\uDC64\uDC65\uDC66\uDC67\uDC68\uDC31\uDC32\uDC33"+
- "\uDC35\uDC3B\uDC3C\uDC3D\uDC3E\uDC3F\uDC40\uDC41"+
- "\uDC42\uDC43\uDC44\uDC37\uDC38\uDC39\uDC3A\uDC4D"+
- "\uDC4E\uDC75\uDC76\uDC77\uDC78\uDC71\uDC72\uDC73"+
- "\uDC4F\uDC50\uDC51\uDC52\uDC53\uDC54\uDC55\uDC56"+
- "\uDC57\uDC58\uDC5E\uDC5F\uDC60\uDC61\uDC62\uDC63"+
- "\uDC6A\uDC6B\uD9E3\uDC7C\uDC36\uDC70\uDC91\uD9E1"+
- "\uDC4C\uDC7D\uDC45\u0000\u0000\u0000\u0000\uDC49"+
- "\uDC7A\u0000\u0000\uDC7B\u0000\u0000\uDC6F\u0000"+
- "\uD9E4\u0000\u0000\uDC74\uDC7E\uDC79\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF179\uF2CB\u0000\uF662\u0000\u0000\u0000\uE742"+
- "\uF1DB\uEAB2\uEABE\uF7BB\u0000\uE996\u0000\u0000"+
- "\u0000\uF5E4\u0000\u0000\uF4A6\uE9E0\uEBA6\u0000"+
- "\uE29A\uE940\u0000\u0000\u0000\u0000\uECAA\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF3E9\u0000\u0000"+
- "\u0000\u0000\uE1FA\u0000\u0000\u0000\u0000\u0000"+
- "\uF93F\uE4A1\u0000\uF3AB\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEED1\uE43C\u0000\uE29B\u0000\u0000"+
- "\u0000\u0000\u0000\uF3FD\u0000\uEA4F\uF8BA\uF7B9"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE262\u0000"+
- "\uECAB\uF0E0\u0000\u0000\u0000\uE29C\uE0F7\uEDA5"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE071\u0000\uE55C\u0000\u0000"+
- "\u0000\u0000\u0000\uF071\u0000\u0000\uE973\uEAAD"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE0EB\u0000"+
- "\u0000\u0000\uE5AF\u0000\u0000\u0000\uE697\u0000"+
- "\uEDF8\u0000\u0000\uEA50\uF133\u0000\uEFCD\u0000"+
- "\uF037\uEFF6\uF8BB\u0000\uEEE9\uF2CC\u0000\u0000"+
- "\uE376\u0000\u0000\uEA51\u0000\u0000\uED3C\u0000"+
- "\u0000\uE75C\uF7F1\u0000\uE26F\uF834\uEE42\u0000"+
- "\uF89D\u0000\u0000\uF84D\uE158\uF2CD\uE5D5\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE4A2\u0000"+
- "\u0000\u0000\uF161\u0000\u0000\u0000\u0000\u0000"+
- "\uED37\uF162\u0000\u0000\uF641\u0000\u0000\uE29D"+
- "\u0000\u0000\uE361\uE0BF\u0000\uF1A4\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF1A8\uEA52\uF672\uF1DC"+
- "\uE997\uEB49\u0000\u0000\u0000\uE55E\u0000\uF545"+
- "\u0000\u0000\u0000\uE4DB\uE645\uF134\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uED76\u0000\uF3EA\u0000\u0000\u0000\uE0EC\uE0C0"+
- "\u0000\u0000\u0000\uF194\u0000\u0000\u0000\u0000"+
- "\u0000\uE37A\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF7F2\uF135\uE36F\u0000\uEEEA\uE37B\uE961"+
- "\uE8E9\uF9CC\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8D7"+
- "\u0000\u0000\u0000\u0000\uE871\u0000\uE646\u0000"+
- "\uECDF\u0000\uEA53\u0000\uEA54\uE031\u0000\u0000"+
- "\u0000\u0000\u0000\uF27C\u0000\u0000\uE4A3\uF247"+
- "\uF75F\u0000\u0000\u0000\u0000\uF058\uF248\uF3AC"+
- "\uF3A5\uEFCE\u0000\u0000\u0000\uF7BC\u0000\u0000"+
- "\u0000\uEDF9\uF17A\uE9D6\uF1C2\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF735\u0000\u0000\u0000\u0000\u0000\uEDBA"+
- "\uE8D8\u0000\u0000\uE032\u0000\u0000\uE3CD\u0000"+
- "\u0000\u0000\uF27D\u0000\u0000\u0000\uF17B\uEA55"+
- "\u0000\uECE0\u0000\uE059\uF479\u0000\uE5CE\u0000"+
- "\uF646\u0000\uE252\uE657\u0000\uECB4\u0000\uF3AD"+
- "\u0000\uF072\u0000\u0000\u0000\u0000\uE6C2\u0000"+
- "\uF4A7\u0000\u0000\uE1EA\u0000\uF0EE\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE7B2\uF9A5"+
- "\u0000\u0000\u0000\u0000\u0000\uF665\uE5E2\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF745"+
- "\u0000\u0000\uE197\uF5B5\uED3D\u0000\u0000\u0000"+
- "\u0000\uEEEB\uF3D5\u0000\u0000\u0000\uF34B\u0000"+
- "\u0000\uEFB5\u0000\uE159\uF865\u0000\u0000\uEBD4"+
- "\u0000\u0000\uE6D6\u0000\u0000\uE951\u0000\uEA56"+
- "\uF891\uECE1\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEBF3\uE998"+
- "\u0000\uE29E\u0000\uE8C4\u0000\uF793\u0000\u0000"+
- "\uE974\u0000\uEDEF\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE941\u0000\u0000\u0000\uE5D6\u0000"+
- "\u0000\uF4DA\u0000\uE0C1\u0000\uE8C3\u0000\u0000"+
- "\u0000\uE7FA\uE4EE\u0000\u0000\u0000\uF848\u0000"+
- "\u0000\uF9A6\uF0EF\u0000\uF536\u0000\uE15A\uF4A8"+
- "\u0000\uF4DB\u0000\uE8A7\uF647\u0000\uE2E6\uF394"+
- "\uE0DA\u0000\uEED2\uE6C3\uF692\uEF6E\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEDA6\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEDE7\u0000\u0000\u0000\uE033"+
- "\uE137\uF059\u0000\u0000\u0000\u0000\u0000\uF746"+
- "\u0000\u0000\u0000\u0000\u0000\uF835\u0000\u0000"+
- "\u0000\u0000\uF3AE\u0000\uF2CE\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE0ED\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF640\uF2CF\uEFCF\u0000"+
- "\uF6DE\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE263\u0000\u0000\u0000\u0000\uE999\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE8A8\u0000\u0000"+
- "\u0000\uE0F8\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEAA1\uE9E1\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF5CA\uEFB6\u0000\u0000"+
- "\u0000\u0000\uEEEC\uF27E\u0000\uF4F0\u0000\uEABF"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE15B\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE351\u0000\u0000"+
- "\u0000\uF562\uEB4A\u0000\u0000\u0000\u0000\uEAC0"+
- "\u0000\uE270\u0000\u0000\u0000\uE962\uF9EA\u0000"+
- "\u0000\u0000\uE698\u0000\u0000\u0000\uF05A\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEF79\u0000\uECAC"+
- "\u0000\u0000\u0000\u0000\u0000\uF4D0\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE034\u0000\uE8F8\u0000\u0000\u0000\uEA57"+
- "\uF0F0\uF3D6\u0000\u0000\uEDE2\u0000\uE15C\u0000"+
- "\u0000\uE0FB\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF073\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAC1"+
- "\u0000\uE67D\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEFD0\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF249\u0000\u0000\u0000\u0000\uE5E3"+
- "\u0000\u0000\uE3D3\u0000\uEDF0\u0000\u0000\u0000"+
- "\uEF44\uF0C3\u0000\uF03A\uF89E\uF5F6\uF34C\uF9D4"+
- "\uEB4B\uE253\u0000\uE34A\uF6BA\uE795\uF6CD\u0000"+
- "\u0000\u0000\uED3E\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE56F\u0000\u0000\u0000"+
- "\u0000\u0000\uE377\u0000\u0000\uF19F\u0000\uE43E"+
- "\uF291\uE5D7\uF074\uF732\uE1EB\uE6BF\uF8B1\u0000"+
- "\u0000\uE1EC\u0000\u0000\u0000\uE942\uE37C\uE29F"+
- "\uF292\u0000\u0000\u0000\uE152\u0000\u0000\u0000"+
- "\uE37D\u0000\u0000\u0000\u0000\u0000\uEDF7\u0000"+
- "\u0000\u0000\uF4FC\u0000\u0000\uF232\u0000\u0000"+
- "\u0000\u0000\uE7B3\u0000\u0000\uE796\u0000\uEFB7"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE23E\u0000\u0000\u0000\u0000\uE7A2\u0000\u0000"+
- "\u0000\u0000\uE793\u0000\uE55F\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEDA7\uE5D2"+
- "\u0000\u0000\u0000\u0000\u0000\uE639\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF532\u0000\uF3D7\u0000"+
- "\u0000\uE5D8\u0000\uF34D\uE6D0\uE560\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE6CF\uF0EA\uF9EB\u0000"+
- "\u0000\uE8ED\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF955\uE0C2\u0000\u0000\u0000\u0000\uF9D5\u0000"+
- "\uF558\uEF7A\uF5F3\u0000\u0000\uF7DE\u0000\u0000"+
- "\uE4EF\u0000\u0000\uF163\u0000\u0000\uE9C2\uF2B7"+
- "\uEED4\u0000\uE05A\u0000\u0000\u0000\uE7FB\u0000"+
- "\u0000\uF89F\u0000\u0000\u0000\u0000\u0000\uE63A"+
- "\u0000\u0000\u0000\u0000\u0000\uF59A\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF6F7\uE93C\u0000\u0000"+
- "\u0000\uE6D7\uEAA2\u0000\u0000\u0000\uE24E\u0000"+
- "\uE4F0\u0000\u0000\u0000\u0000\u0000\uF334\uEBEC"+
- "\uE2E7\uF4CB\uF1A9\uE04E\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF591\u0000\u0000\u0000\uF65E"+
- "\u0000\u0000\uEA9D\uE34B\uE5B7\uF293\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF538\u0000\uE99A\u0000"+
- "\u0000\u0000\u0000\uE0A7\u0000\uE85E\u0000\u0000"+
- "\u0000\uEB76\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF1A5\uF294\u0000\u0000\u0000\u0000\uE99B"+
- "\u0000\u0000\uF7DC\u0000\u0000\uF4DC\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF794\u0000\uF59B"+
- "\u0000\u0000\u0000\uF993\u0000\u0000\u0000\uE34C"+
- "\uE8F9\uE6B1\u0000\u0000\u0000\uE0FC\u0000\u0000"+
- "\u0000\uF335\uE0FD\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE5F4\u0000\u0000\u0000\uE1ED"+
- "\uE035\u0000\u0000\uE63B\uE352\u0000\u0000\u0000"+
- "\u0000\uF34E\uE44D\uE134\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF846\u0000"+
- "\u0000\uE15D\u0000\uE89C\u0000\uF65F\u0000\uEFB8"+
- "\u0000\uE797\u0000\u0000\u0000\uE15E\u0000\u0000"+
- "\u0000\u0000\uE6CD\u0000\u0000\uE561\uEFED\u0000"+
- "\uE07B\uE7E2\u0000\uF9B2\u0000\uECAD\uE65C\uE7B4"+
- "\u0000\u0000\uEBA7\uF263\uE353\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF9B3\u0000\uE5E4\u0000\u0000"+
- "\uE2E8\u0000\uF1C3\uE342\u0000\u0000\uE2A0\uE838"+
- "\u0000\u0000\u0000\u0000\u0000\uF760\u0000\u0000"+
- "\uF9D6\u0000\u0000\u0000\u0000\uF761\u0000\uF762"+
- "\uE963\u0000\u0000\u0000\u0000\uE9E2\uF8F9\uE9C1"+
- "\u0000\uECB5\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF1DD\uE254\u0000\uE0A1\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE9E3\u0000\u0000\u0000\u0000\uF96D"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF7AF\u0000\u0000\u0000\u0000\u0000\uE49D"+
- "\uE2A1\uED38\u0000\uF546\uF1A0\u0000\u0000\uECAE"+
- "\uEEED\uF9C1\uE872\u0000\u0000\uE743\u0000\u0000"+
- "\u0000\uE9E4\uF391\uF693\uF892\u0000\u0000\uE3F5"+
- "\u0000\u0000\uE85F\u0000\uE964\u0000\uE936\u0000"+
- "\uF2BF\u0000\u0000\u0000\u0000\u0000\uE25F\u0000"+
- "\uEB69\u0000\u0000\u0000\u0000\u0000\u0000\uE7D6"+
- "\uF164\uF05B\u0000\u0000\uE04F\uE5B0\u0000\uE2E9"+
- "\u0000\u0000\u0000\u0000\u0000\uF3ED\u0000\uE15F"+
- "\u0000\u0000\u0000\u0000\uED9A\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uED7D\u0000\u0000\u0000\u0000"+
- "\uE6D8\u0000\uF9A7\u0000\u0000\u0000\u0000\uF03B"+
- "\uF642\u0000\u0000\u0000\u0000\uE2F0\uF7BD\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEE96\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE0DB\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF4D1\u0000\u0000\u0000\u0000"+
- "\uEFD1\uF4A9\uE370\uEFD2\u0000\uE873\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEC62\u0000\uF632\uEBF4"+
- "\u0000\u0000\u0000\uE874\u0000\u0000\u0000\u0000"+
- "\u0000\uEED5\uF5BF\uE2A2\uE1AF\uE2A3\u0000\u0000"+
- "\u0000\uE1B0\uF3FE\uE333\uEBAF\uF733\u0000\uE036"+
- "\uF6BB\uF47A\uEA58\uEFD3\u0000\u0000\u0000\u0000"+
- "\uEA59\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF9DE\uE050\u0000\u0000\u0000"+
- "\uF7EA\uE3CE\uF264\u0000\uE562\uE7A3\uF9A8\uE6D9"+
- "\uF6CE\uF84E\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE2D6\u0000\uE6F0\u0000\uF0E1"+
- "\uF755\u0000\u0000\u0000\u0000\u0000\uE99C\u0000"+
- "\u0000\uE9C3\u0000\uF7DF\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEEEF\u0000\u0000\u0000\u0000"+
- "\uF9E5\uF633\u0000\uE7FC\uF9A9\u0000\uEEEE\u0000"+
- "\u0000\u0000\uE5E5\u0000\u0000\u0000\u0000\u0000"+
- "\uF2D0\u0000\uE1B1\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF6A2\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF3B2\u0000\uF3B1\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE1B2\u0000\uE83B\u0000\uE037\u0000\u0000"+
- "\u0000\u0000\u0000\uECE2\uF8BC\uE7A4\u0000\u0000"+
- "\uF24A\u0000\u0000\u0000\u0000\u0000\uF763\u0000"+
- "\u0000\u0000\u0000\u0000\uF8FA\u0000\uE2A4\u0000"+
- "\uE99D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF673\u0000\u0000\u0000"+
- "\uF1AA\u0000\u0000\uF431\uE271\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF836\u0000\u0000\u0000\u0000"+
- "\uF7E0\u0000\u0000\u0000\u0000\uF166\u0000\u0000"+
- "\uED7E\uF7A1\u0000\u0000\uF8EF\u0000\u0000\u0000"+
- "\uF7EB\uF233\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF03C\u0000\u0000\u0000\uE038\u0000\u0000"+
- "\uF59C\u0000\u0000\u0000\u0000\uE1D6\uF998\u0000"+
- "\u0000\u0000\uF559\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF764\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF736\u0000\uEA5A\uF456"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE6DA\u0000"+
- "\uE4D0\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE755\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF076"+
- "\u0000\uF4DD\u0000\u0000\u0000\uED6A\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF674\u0000"+
- "\u0000\u0000\u0000\u0000\uF694\u0000\uEAC2\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7FD"+
- "\u0000\u0000\u0000\uE198\u0000\u0000\uE4BA\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uED3F\u0000"+
- "\u0000\u0000\u0000\uF7E1\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF336\u0000\u0000\u0000"+
- "\uE0D3\u0000\u0000\u0000\uEB4C\u0000\uF55A\uE59C"+
- "\u0000\uF9AA\uF7E2\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF547\uF9C2\uF940\u0000\uF9EC\uE072\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9BD"+
- "\u0000\uF077\uEAC3\uE3D2\uE272\u0000\uE4A4\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF9AB\u0000\uEAE0"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF457\u0000\u0000\u0000"+
- "\u0000\u0000\uEEF0\u0000\uE37E\u0000\u0000\uF4AA"+
- "\u0000\u0000\u0000\uEA5B\uF648\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEBF5\uF3B3\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF6A3\u0000"+
- "\u0000\uE039\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE2A5\u0000\u0000\uEAC4"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEBB0"+
- "\u0000\u0000\uF34F\u0000\uF634\u0000\uECB6\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF856\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE391\u0000\u0000\uF9ED\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE9C4\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF999\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEE4F\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEA3D\u0000\uF84F\u0000"+
- "\u0000\u0000\u0000\u0000\uEDF1\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF1C4\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE435\u0000\u0000\uF9EE\u0000\u0000"+
- "\u0000\uF5B6\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEBF6\uEA5C\u0000\u0000\uF96E\u0000"+
- "\uF167\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE1DD\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE647\uE1B3\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF765\uEDD8\u0000\u0000\u0000"+
- "\uE2EA\u0000\u0000\uE2D0\u0000\uF05C\u0000\u0000"+
- "\u0000\u0000\uF03E\uF03D\u0000\u0000\uE4F1\u0000"+
- "\uE4A5\u0000\u0000\u0000\u0000\u0000\u0000\uF6CF"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF234\u0000\u0000\u0000\u0000\uE334\u0000\u0000"+
- "\uF432\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE392\u0000\u0000\u0000\u0000"+
- "\uF433\u0000\uF6F8\u0000\u0000\u0000\u0000\uE343"+
- "\u0000\u0000\uE8A9\u0000\u0000\uE4BB\uE07C\u0000"+
- "\uF3A6\uE0D5\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF6E7\u0000\u0000\uE1DE\u0000\uF6A4\u0000"+
- "\u0000\u0000\uF750\u0000\u0000\u0000\uE4DD\u0000"+
- "\uE160\u0000\u0000\u0000\u0000\uE2A6\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF695\u0000\u0000\u0000"+
- "\u0000\u0000\uEBF7\u0000\u0000\u0000\u0000\u0000"+
- "\uE4DC\u0000\u0000\uF8A0\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF837\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF0D9\u0000\uE2A7\uF03F\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uED91\u0000\u0000\u0000\uEFB9"+
- "\uF3D8\u0000\u0000\uE768\u0000\u0000\uEB94\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE44"+
- "\uE99E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF4F1\u0000\u0000\u0000\uECD0\u0000\u0000\uF49D"+
- "\u0000\uE8C6\uE393\u0000\uE394\u0000\u0000\u0000"+
- "\uE2DC\u0000\uE4D1\u0000\u0000\uE141\uF6D8\u0000"+
- "\uE0A8\uF0BC\uED4E\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF56C\u0000"+
- "\u0000\uE952\u0000\u0000\uF337\u0000\u0000\uEE50"+
- "\u0000\u0000\uE07D\u0000\u0000\u0000\u0000\uEF7B"+
- "\uEDE8\uE953\u0000\u0000\uF1DE\uE4F2\u0000\u0000"+
- "\u0000\u0000\uE199\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE264\uEEAB\u0000\u0000\u0000\uE0C3"+
- "\u0000\uEBB1\u0000\u0000\uF6B2\u0000\u0000\uE4F3"+
- "\uE4D2\u0000\uF5C0\u0000\u0000\u0000\uEADD\u0000"+
- "\u0000\uF295\uEEF1\u0000\uF9B4\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF458\u0000\u0000"+
- "\u0000\uF4D2\u0000\u0000\uF296\u0000\uEC63\u0000"+
- "\u0000\u0000\u0000\uE161\u0000\uEAEA\u0000\u0000"+
- "\u0000\uEFBA\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE7D7\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF5CD\u0000\uF3F2\uF857"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE7F8\uE552\u0000\u0000\u0000\u0000\uF675\u0000"+
- "\u0000\u0000\u0000\uE9C5\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEEF2\uF1DF\u0000\u0000\uE05B\u0000"+
- "\u0000\uE8FA\u0000\u0000\u0000\uEF45\u0000\uE4A6"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF9B5\u0000"+
- "\u0000\uF7C9\u0000\uED72\u0000\uF8BD\u0000\u0000"+
- "\uE6A4\uE255\u0000\u0000\u0000\u0000\uE265\uE676"+
- "\u0000\u0000\u0000\u0000\uEDBD\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEA5D\uF195\u0000\u0000\uF1E0"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF17C\uF8BE\uEAEB\u0000\uEBF8\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF7BE"+
- "\u0000\u0000\u0000\u0000\uE395\uEB3A\uEF72\u0000"+
- "\u0000\uEC64\uE49F\u0000\uEDA8\u0000\u0000\u0000"+
- "\u0000\u0000\uE7D3\u0000\u0000\u0000\u0000\uE4DE"+
- "\u0000\uF548\uF6BC\uE99F\u0000\uEF7C\uED77\u0000"+
- "\u0000\uECF7\u0000\u0000\u0000\u0000\u0000\uF138"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF893\u0000"+
- "\u0000\u0000\u0000\u0000\uEDF2\u0000\u0000\uE396"+
- "\uE43F\uE975\u0000\u0000\u0000\u0000\uE335\uF3B4"+
- "\uF941\uE19A\u0000\u0000\uE9C6\uF861\u0000\uF6DF"+
- "\u0000\u0000\uF838\u0000\u0000\u0000\u0000\u0000"+
- "\uF297\u0000\uEA5E\u0000\u0000\u0000\u0000\uEEF3"+
- "\u0000\u0000\uF6AC\uF0C4\uF1E1\uEB3B\uE9C7\u0000"+
- "\u0000\u0000\u0000\uE443\uE44F\u0000\u0000\u0000"+
- "\uE05C\u0000\u0000\u0000\u0000\uF8BF\u0000\u0000"+
- "\u0000\u0000\uEDFD\uE9E5\uE75D\u0000\u0000\u0000"+
- "\u0000\u0000\uF196\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE397\u0000\u0000\uEF7D\uE362"+
- "\u0000\uE7D8\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF676\u0000\u0000"+
- "\uE8AA\u0000\u0000\u0000\uF6E0\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE769\u0000\uF533\u0000\u0000\uF56D\u0000"+
- "\u0000\u0000\u0000\uF2D1\u0000\u0000\uE7B5\u0000"+
- "\u0000\uF1AB\u0000\uECB7\u0000\u0000\u0000\u0000"+
- "\uF24B\uE1B4\u0000\uEB95\uF05D\u0000\u0000\u0000"+
- "\u0000\uF197\uEF7E\u0000\uE0A9\uF3AF\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE05D\u0000"+
- "\uF139\u0000\uF47B\u0000\uF9EF\u0000\uF7F3\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEE51\u0000\u0000\uF168\u0000\u0000\u0000\uF1AC"+
- "\u0000\uF05E\u0000\uEF6F\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEA5F\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE436\u0000\u0000\uEEF4\uE3D6\u0000\u0000\uEE52"+
- "\uECE3\u0000\u0000\u0000\u0000\uED40\u0000\u0000"+
- "\u0000\uE744\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF635\u0000"+
- "\u0000\u0000\u0000\u0000\uF4DE\u0000\u0000\u0000"+
- "\u0000\uE6A5\u0000\u0000\u0000\u0000\uF6E8\u0000"+
- "\u0000\uEF56\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF8E6\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE9E6\u0000\u0000\u0000\uE9A0\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE76A\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE83C\uF040\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uECB8\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE03A\uEBF9\u0000\uF041\u0000\u0000\u0000"+
- "\u0000\uF47C\u0000\u0000\uF87E\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF265\u0000\u0000\u0000\u0000\uF7F4\u0000"+
- "\u0000\uE47C\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF8FB\u0000\u0000"+
- "\u0000\uF9F0\u0000\uEB4D\uE273\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF756\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEA3E\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEAC5\u0000\u0000\uEDBE\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF1AD\uF87A\u0000\u0000\uE1EE\uF1A6\u0000\uF1AE"+
- "\uF37D\u0000\uE9A1\u0000\uF1AF\uF99A\u0000\uE77B"+
- "\u0000\u0000\u0000\uE19B\uE1B5\u0000\u0000\u0000"+
- "\u0000\uF839\u0000\uEBDD\u0000\u0000\u0000\u0000"+
- "\uEC65\uF1CF\u0000\u0000\u0000\uE9A2\u0000\u0000"+
- "\uF7CA\u0000\uF078\u0000\uEDED\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE4EB\u0000\uEFD4"+
- "\uEBFA\uED5C\u0000\uEBE4\uEF57\u0000\u0000\uE26B"+
- "\u0000\u0000\u0000\uE965\u0000\uF6B5\uF995\uF395"+
- "\uE23F\uF3B5\uF2D2\uEF58\uF0F1\u0000\u0000\u0000"+
- "\u0000\u0000\uE0D4\uEB4E\uECF8\uF079\uF942\u0000"+
- "\u0000\u0000\u0000\u0000\uEB96\u0000\uE2E0\u0000"+
- "\uF235\u0000\u0000\uF83A\uEE53\uEBB2\uE03B\u0000"+
- "\uECE4\uEFBB\u0000\u0000\u0000\u0000\u0000\uEC66"+
- "\uF4F2\u0000\uF266\uF042\uE398\uF169\uE85B\uE2A8"+
- "\u0000\u0000\u0000\u0000\uE9A3\u0000\u0000\u0000"+
- "\uE76B\u0000\uF7CE\uEFD5\uECD1\u0000\u0000\uE44C"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE73C\uF4CC"+
- "\u0000\uE1FB\uF666\u0000\uEEF5\uEF91\uECF9\uE44B"+
- "\uF4F3\uECFB\u0000\uEA60\uE240\u0000\uE699\uF3D9"+
- "\u0000\u0000\u0000\u0000\u0000\uF5C1\uE954\u0000"+
- "\uF5BB\u0000\uEA61\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE976\u0000\u0000\uEA62\u0000\u0000\uF1E2"+
- "\uF298\uF05F\uF37E\uECFC\u0000\uE4DF\uE4F4\uEBB3"+
- "\u0000\uEBB4\u0000\u0000\u0000\u0000\uF563\u0000"+
- "\u0000\uEAC6\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEFD6\u0000\u0000\u0000"+
- "\uE8AB\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF636\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uECB9\uF0C5\uF539\uE1B6\uE49B\u0000\uE83D\uE473"+
- "\uE2D1\u0000\u0000\u0000\u0000\uE0DC\uE19C\u0000"+
- "\uE2DD\u0000\u0000\uEF39\u0000\uECBB\uECBA\u0000"+
- "\u0000\uEB6A\u0000\u0000\u0000\uF299\u0000\u0000"+
- "\u0000\u0000\u0000\uE943\u0000\u0000\u0000\u0000"+
- "\uE4F5\u0000\uE6A6\u0000\uF645\uE6DB\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEBD5\u0000\u0000\uE57A"+
- "\u0000\uEAA3\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF9DF\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE399\uF1D4\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE0AA\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uED6B\u0000\uEBFB\uE0A2\u0000\u0000\u0000"+
- "\u0000\uE4E0\u0000\uED4F\u0000\uF8C0\u0000\uE84E"+
- "\uED5D\u0000\uE649\u0000\u0000\u0000\uF2C0\u0000"+
- "\uEBFC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF649\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEAC7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uED41\u0000\u0000\u0000\u0000\u0000\u0000\uE977"+
- "\uE978\u0000\u0000\u0000\uF866\u0000\uE4F6\u0000"+
- "\u0000\u0000\u0000\uF3DA\u0000\uF894\u0000\u0000";
-
- private final static String innerIndex2=
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEC9F"+
- "\u0000\u0000\u0000\u0000\u0000\uE5CF\uE39A\u0000"+
- "\u0000\uE1DF\u0000\u0000\uF5CB\u0000\uED92\uE0AB"+
- "\u0000\uE6C4\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uECA0"+
- "\u0000\uE9DA\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE83E\uE07E\u0000\u0000\u0000"+
- "\uE5B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uECA1\u0000\u0000\uEF73\u0000\u0000\uF4AB"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2A9"+
- "\u0000\u0000\u0000\uE4F7\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE593\u0000\u0000"+
- "\uE274\u0000\uEF94\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEDF5\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEEAE\u0000\uE64A\u0000\uEAEC\uED50\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEF74\u0000\u0000"+
- "\u0000\u0000\uE745\u0000\u0000\u0000\uED6C\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF549\uF3B6\u0000"+
- "\u0000\uEC6E\uEBB5\u0000\u0000\uE1EF\uF3A7\uE275"+
- "\uE0DD\u0000\u0000\uE7E3\u0000\u0000\uF4AC\u0000"+
- "\u0000\uE39B\uF13B\uEA63\uF6E9\u0000\u0000\uF7F5"+
- "\u0000\u0000\u0000\u0000\u0000\uEBDE\uE0EE\u0000"+
- "\u0000\u0000\uECBC\uF766\u0000\u0000\uE8EE\u0000"+
- "\u0000\u0000\u0000\u0000\uF9F1\u0000\u0000\u0000"+
- "\u0000\uF6B6\u0000\u0000\u0000\u0000\uF56E\u0000"+
- "\u0000\uF47D\u0000\uE8D9\u0000\uF338\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEBFD\u0000\u0000"+
- "\u0000\u0000\u0000\uEA64\u0000\uEB3C\u0000\u0000"+
- "\u0000\u0000\u0000\uF1E3\u0000\u0000\uE4E1\u0000"+
- "\uEAC8\u0000\u0000\u0000\u0000\uE7B6\u0000\uF9AC"+
- "\uF2D3\u0000\u0000\u0000\uED51\uF77B\u0000\uE8AC"+
- "\u0000\u0000\u0000\u0000\uF956\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE73D\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF64A"+
- "\u0000\uE8DF\uE4D3\uF757\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE05E\uF751\uE444\u0000\u0000\uE944"+
- "\uF849\uE05F\u0000\uF943\uF07A\uF07B\uE39C\u0000"+
- "\u0000\u0000\u0000\u0000\uF1E4\u0000\u0000\uE9E7"+
- "\u0000\u0000\uEAC9\u0000\u0000\u0000\u0000\uEAED"+
- "\u0000\u0000\u0000\u0000\u0000\uF24C\u0000\uF2C1"+
- "\u0000\u0000\uE162\u0000\uE9A4\u0000\u0000\u0000"+
- "\uEACA\u0000\u0000\u0000\u0000\u0000\uE4F8\uF3A8"+
- "\u0000\u0000\u0000\uE1B7\u0000\uF2D4\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uED6D\uEAEE\uE0AC"+
- "\uEFBC\u0000\u0000\u0000\u0000\u0000\uF07C\u0000"+
- "\u0000\u0000\uEACB\u0000\u0000\u0000\u0000\u0000"+
- "\uF7BF\uE63F\uE5C6\u0000\u0000\u0000\u0000\u0000"+
- "\uE2AA\u0000\u0000\uE239\u0000\u0000\uE69A\u0000"+
- "\u0000\u0000\uF3B7\uF29A\u0000\u0000\u0000\uE7D9"+
- "\uF4DF\u0000\uF758\uE256\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE5E6\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF576\u0000\u0000\uEE55\uF2D5"+
- "\u0000\u0000\uE0EF\uF96F\u0000\u0000\u0000\u0000"+
- "\u0000\uE937\u0000\u0000\uE677\u0000\u0000\u0000"+
- "\u0000\u0000\uF759\u0000\u0000\u0000\u0000\uECD2"+
- "\u0000\uECBD\u0000\uE2E1\uF350\uF16A\u0000\uE9D7"+
- "\uF8F0\u0000\u0000\uF13C\u0000\u0000\u0000\uF339"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF867\uF8C1"+
- "\u0000\uE450\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEDB0\u0000\u0000\u0000\uF1E5\u0000\u0000"+
- "\u0000\u0000\uE0AD\u0000\uF7B0\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF6A5\u0000\uE0AE\u0000\uE83F\u0000\uE746\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE4A7\uF8B2"+
- "\u0000\uF9C4\u0000\uF13D\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF8A1\u0000\u0000\u0000\uEDE9\uEFEE"+
- "\u0000\uF4F4\uF795\uF351\uEA3F\uF740\u0000\u0000"+
- "\uF4E0\uEEAF\u0000\u0000\u0000\u0000\u0000\uE8AD"+
- "\u0000\uEE45\u0000\u0000\uF7A8\u0000\u0000\uE9D8"+
- "\uEF69\uF2D6\u0000\u0000\u0000\uE4E2\u0000\uEC6F"+
- "\u0000\u0000\uF970\uE6C8\uF9AD\u0000\u0000\u0000"+
- "\uEAEF\uE163\uE4F9\u0000\u0000\u0000\u0000\uE592"+
- "\uE8C7\uEA65\u0000\u0000\u0000\u0000\uF396\u0000"+
- "\uE5D0\uEDD9\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF957\uE966\uEC70\u0000\u0000\u0000\uE840\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF4A3\u0000\uE4EC"+
- "\u0000\uF55B\u0000\u0000\u0000\uF9C5\u0000\u0000"+
- "\u0000\u0000\u0000\uECFD\u0000\uF7B1\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE39D\uF16B\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF5BC\uF434"+
- "\uE75E\uE75F\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF5F7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF671\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE447\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF8EC\u0000\uE9C8"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED78"+
- "\u0000\u0000\uE451\u0000\u0000\u0000\uF767\u0000"+
- "\u0000\u0000\u0000\u0000\uE64B\uEA66\u0000\u0000"+
- "\uF6BD\uF13E\u0000\u0000\u0000\uE371\u0000\uEB97"+
- "\uF043\u0000\uE266\u0000\u0000\u0000\u0000\uE135"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF198\uEC71\uECBE\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF958\u0000\u0000"+
- "\uE1F0\u0000\uF7F6\u0000\u0000\uEAF0\u0000\u0000"+
- "\u0000\uEDBF\u0000\u0000\u0000\uE24F\u0000\u0000"+
- "\u0000\u0000\uF971\uF1B0\uF9D1\uF64B\u0000\u0000"+
- "\uF7CF\uF0DA\uE051\u0000\uE448\uE1F1\u0000\uECD3"+
- "\uF9E6\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEE7D\u0000\u0000"+
- "\u0000\uECFA\u0000\u0000\uF33A\uF7D0\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF972\u0000\uF737\u0000"+
- "\u0000\u0000\uEBE5\uF29B\u0000\u0000\u0000\uEEF6"+
- "\uF07D\u0000\u0000\uF944\uF5C2\u0000\u0000\uE6DC"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF397\u0000\uE9E8\uE4ED\uF5FC\u0000\uE84F\u0000"+
- "\uE19D\u0000\u0000\u0000\uE4FA\uF534\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF2D7\u0000\uE553"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF8E3\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF8ED\u0000\uEB3D\u0000\u0000\uF07E"+
- "\uF8B3\uED52\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF677\uE46D\u0000\uEACC\u0000\u0000\uF959\u0000"+
- "\u0000\uEDA9\uEB98\uF643\u0000\u0000\u0000\u0000"+
- "\u0000\uEBFE\u0000\u0000\u0000\u0000\uE0F0\u0000"+
- "\uF091\uF092\u0000\u0000\u0000\uE850\uF744\uF0F2"+
- "\u0000\u0000\u0000\u0000\u0000\uED53\u0000\u0000"+
- "\u0000\u0000\uEFD7\uED93\u0000\u0000\u0000\uE091"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE267"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF95A\u0000\u0000\u0000\uF4E1\u0000\u0000\uE0C4"+
- "\u0000\u0000\u0000\u0000\uECE5\u0000\uE0C5\uF044"+
- "\u0000\u0000\uEFBD\u0000\uE6C9\u0000\u0000\uF0DB"+
- "\uF1B1\u0000\uE153\uF6BE\uF95B\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF796\u0000\uE7B7\u0000\u0000"+
- "\uF4D3\uF4D4\u0000\u0000\u0000\uF6E4\u0000\uF6D1"+
- "\u0000\u0000\uE747\uE241\uE052\u0000\u0000\uF8B4"+
- "\uE0C6\u0000\u0000\uF398\u0000\u0000\uE5E7\u0000"+
- "\uF060\u0000\u0000\u0000\u0000\u0000\uE164\uE0AF"+
- "\u0000\u0000\u0000\u0000\u0000\uF53A\uEFAF\u0000"+
- "\u0000\uF5C3\uEFD8\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE9E9\u0000\u0000\u0000\uF3F3\u0000"+
- "\uE5FB\uEA4B\u0000\u0000\uF59D\u0000\u0000\u0000"+
- "\uF9F3\uF9F2\uF6A6\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE9C9\u0000\u0000\uE563"+
- "\u0000\uE138\u0000\uE851\uE165\u0000\uE7E4\u0000"+
- "\u0000\u0000\uF85A\u0000\u0000\u0000\uEDE3\u0000"+
- "\u0000\u0000\uE4BC\u0000\u0000\u0000\uE092\u0000"+
- "\u0000\u0000\u0000\uE354\u0000\u0000\u0000\uE060"+
- "\uF83B\uF0EB\uEEF8\uE7E5\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE3D7\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF4A4\u0000\u0000\u0000\uE59D\uF973"+
- "\uF868\u0000\uF4D5\u0000\uE2AB\u0000\u0000\uF0F3"+
- "\uE5FC\u0000\u0000\u0000\u0000\u0000\u0000\uE4D4"+
- "\uE1FC\u0000\uE7E6\u0000\uEC9B\uEC31\uF0D4\u0000"+
- "\uEB99\uED42\uE19E\u0000\u0000\u0000\uF8E4\u0000"+
- "\u0000\u0000\uF53B\u0000\u0000\u0000\u0000\uE34D"+
- "\u0000\uE093\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF2B8\u0000\u0000\u0000\uE6C0\u0000"+
- "\uF29C\uF9F4\u0000\u0000\uE4E3\u0000\uF8C2\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE5E8\uE8AE"+
- "\uEBB6\uF747\u0000\u0000\u0000\u0000\u0000\uEB4F"+
- "\uF8C3\uE9EA\u0000\uEC32\u0000\uF236\u0000\u0000"+
- "\u0000\u0000\u0000\uF678\u0000\u0000\u0000\u0000"+
- "\uF697\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE9CA\u0000"+
- "\u0000\uE372\u0000\u0000\u0000\u0000\uE9A6\u0000"+
- "\u0000\uE9EB\u0000\u0000\uED9B\u0000\u0000\uECAF"+
- "\uE39E\u0000\u0000\u0000\uF59E\u0000\u0000\u0000"+
- "\u0000\uE14C\uF6EA\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEDE4\uEAF1\u0000\u0000\uF6E1\u0000\uF7F7"+
- "\uF2B9\u0000\u0000\uF768\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF7A9\u0000\u0000\u0000\u0000"+
- "\u0000\uF769\u0000\u0000\u0000\uF24D\u0000\u0000"+
- "\u0000\uE756\u0000\u0000\uED73\uF5CE\u0000\u0000"+
- "\u0000\u0000\uE9D9\u0000\u0000\u0000\u0000\uE7E7"+
- "\uE449\uE5C3\u0000\u0000\uE875\uE860\u0000\uE3D9"+
- "\uE268\u0000\uE0DE\uF53C\uE89D\u0000\uF679\uEF95"+
- "\uE2AC\uF392\u0000\uF59F\uE8C8\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE250\uECD4\uE3CF\uF3F5"+
- "\u0000\uE1F2\u0000\uE2EB\u0000\u0000\u0000\uE1B8"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uECA6\uE3DA"+
- "\u0000\uF435\u0000\u0000\u0000\u0000\u0000\uF436"+
- "\u0000\uED5E\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE4FB\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF3A9\u0000\u0000\u0000\uF459"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF2D8\uEE59\u0000\uE748\uF895\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF4B5\u0000\u0000\uF734\u0000\u0000\uE3F3"+
- "\uEE58\u0000\u0000\u0000\u0000\uF76A\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE979"+
- "\uEA67\u0000\u0000\u0000\u0000\u0000\uE0DF\u0000"+
- "\u0000\u0000\uE2EC\u0000\u0000\u0000\u0000\uF56F"+
- "\u0000\u0000\uE3F4\uE44A\u0000\u0000\u0000\uEAF2"+
- "\u0000\u0000\u0000\uEBB7\u0000\u0000\u0000\u0000"+
- "\uEC33\uE4FC\u0000\u0000\uF1E6\u0000\u0000\u0000"+
- "\u0000\u0000\uE8C9\u0000\u0000\u0000\uED9C\u0000"+
- "\uE2DE\u0000\u0000\uE260\u0000\u0000\u0000\u0000"+
- "\uE5D3\uF4F5\uF6AE\u0000\u0000\uF2C8\u0000\uE1F3"+
- "\uF5CF\uEDF3\uF352\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE061\u0000\u0000\u0000\uF093\u0000\uE336\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7DA"+
- "\uF33B\u0000\u0000\u0000\u0000\u0000\uF0E7\u0000"+
- "\u0000\u0000\uEDC0\uF945\u0000\u0000\u0000\u0000"+
- "\u0000\uED54\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE139\uF9C6\u0000"+
- "\u0000\u0000\u0000\u0000\uF045\u0000\uEDAA\uEABA"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEBDF\u0000\uE861"+
- "\u0000\u0000\u0000\u0000\uEBB8\u0000\uEF96\uE4FD"+
- "\u0000\u0000\u0000\u0000\uEC34\u0000\u0000\u0000"+
- "\u0000\u0000\uF45A\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE876\uF6B3\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF9CD\u0000\u0000\u0000\uF4B6\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF267\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF5C4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE734\u0000\u0000\u0000\u0000\u0000\uF437"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE7B8\uE7B9\uF2C9\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE65E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF6CB\uEAAE\uEF97\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE445\u0000\u0000\u0000\uE4D5\u0000"+
- "\u0000\u0000\u0000\u0000\uF55C\uE89E\u0000\u0000"+
- "\u0000\u0000\u0000\uE7E8\u0000\uF6EB\uF5C9\u0000"+
- "\uF4BC\u0000\uE862\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE4B5\u0000\u0000\u0000\u0000"+
- "\u0000\uEF46\u0000\u0000\uE65F\uF54A\u0000\uF6C9"+
- "\u0000\u0000\uE13A\u0000\u0000\uF353\uE166\u0000"+
- "\u0000\u0000\uE363\u0000\uE4BD\u0000\u0000\u0000"+
- "\uE8FB\u0000\uE0E0\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE4E4\uF699\u0000\u0000\uE5BA\uF4CD\uE0E1"+
- "\u0000\u0000\u0000\u0000\uF0F4\u0000\u0000\u0000"+
- "\u0000\u0000\uF53D\u0000\uF93A\u0000\u0000\u0000"+
- "\u0000\u0000\uF6EC\u0000\u0000\u0000\uEF98\u0000"+
- "\uE877\u0000\u0000\u0000\uF6CC\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEDC1\u0000\u0000\u0000\u0000\uEB7E\u0000\u0000"+
- "\u0000\u0000\u0000\uE5FD\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE276\uF93B\uE5BB\u0000\u0000\uF438"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEC35\uE1B9"+
- "\uF094\uE0C7\u0000\uE1F4\u0000\u0000\uE8AF\uF2D9"+
- "\u0000\u0000\u0000\u0000\u0000\uE1BA\u0000\u0000"+
- "\uF99B\u0000\u0000\u0000\u0000\uEAF3\uE277\uE852"+
- "\u0000\uE2AD\u0000\u0000\u0000\u0000\uEEF9\uF738"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF4E2\u0000"+
- "\u0000\u0000\uE094\uEAA4\u0000\u0000\uE554\u0000"+
- "\u0000\u0000\u0000\u0000\uE167\uEDC2\u0000\u0000"+
- "\u0000\u0000\uE1BB\u0000\uF2DA\uF268\u0000\uE9A7"+
- "\uEC36\u0000\u0000\u0000\u0000\u0000\uEB50\u0000"+
- "\u0000\u0000\uE640\uF75A\u0000\uF99C\u0000\uE7FE"+
- "\u0000\u0000\u0000\u0000\uEA40\u0000\u0000\u0000"+
- "\uE9EC\uE878\u0000\u0000\u0000\u0000\u0000\uE570"+
- "\u0000\uE69B\u0000\uE1D7\uEA68\u0000\u0000\uF49A"+
- "\u0000\uED66\u0000\u0000\uE355\uF53E\u0000\uE9A8"+
- "\u0000\u0000\u0000\uF1C5\uF4D6\u0000\u0000\uEA69"+
- "\uECE6\u0000\u0000\u0000\u0000\u0000\u0000\uE4A8"+
- "\u0000\uE8B0\u0000\u0000\uEDDA\uECBF\u0000\u0000"+
- "\u0000\uE8B1\u0000\u0000\u0000\uE5E9\u0000\u0000"+
- "\u0000\u0000\u0000\uEB51\uF2DB\u0000\u0000\uF379"+
- "\u0000\u0000\uE6B2\u0000\u0000\u0000\u0000\uE39F"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE7E9\u0000\u0000\uE3A0\u0000\uF17D\uE4A9\u0000"+
- "\uF439\uF354\u0000\u0000\uEC72\uEFEF\u0000\u0000"+
- "\u0000\uF7D1\u0000\u0000\uEFD9\u0000\u0000\u0000"+
- "\u0000\u0000\uEF6A\uE853\uE854\uE555\u0000\uEEFA"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE1E0\uECB0"+
- "\u0000\uE8B2\uF8C4\u0000\uF4E3\u0000\uE7A5\uF8E7"+
- "\uE9CB\uE364\u0000\uEE46\uEB3E\uF9DA\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE945\uEB9A"+
- "\uEEB1\u0000\u0000\u0000\u0000\uF5F0\u0000\uE76C"+
- "\uF1C6\u0000\u0000\u0000\u0000\uEBB9\u0000\uECC0"+
- "\uF7C0\uEFF0\u0000\u0000\uE7DB\u0000\uF4E4\u0000"+
- "\u0000\u0000\uE946\uED79\u0000\u0000\u0000\u0000"+
- "\u0000\uF355\uECC1\uF95C\uF95D\u0000\u0000\u0000"+
- "\u0000\uF45B\u0000\uF45C\u0000\u0000\u0000\uED5F"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF3DB\u0000\uF869\u0000\uF3B8\uF9F5\uEB9B"+
- "\u0000\u0000\u0000\u0000\uEEFB\uF947\uF974\uF8C5"+
- "\uECE7\uE749\u0000\uF69A\u0000\u0000\uE955\uE168"+
- "\u0000\u0000\u0000\uEB3F\uF577\u0000\uF2DC\uE2FC"+
- "\uF2DD\u0000\uF43A\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF9BE\u0000\u0000\uE03C"+
- "\uF9BB\uF9C7\u0000\u0000\u0000\u0000\uEEB2\u0000"+
- "\uF061\uEAF4\u0000\u0000\u0000\u0000\uE3EC\uED6E"+
- "\uEDC3\u0000\u0000\u0000\u0000\uE7A6\u0000\u0000"+
- "\uE1BC\u0000\uF4E5\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF1D5\u0000\u0000\uE7BA\u0000"+
- "\u0000\u0000\uF1E7\uF8B5\uF77C\u0000\u0000\u0000"+
- "\u0000\uEB77\u0000\uE169\u0000\u0000\uE556\u0000"+
- "\u0000\u0000\u0000\u0000\uEEA5\u0000\uE5F5\uE4BE"+
- "\u0000\uF99D\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uED94\u0000"+
- "\u0000\uEAF5\u0000\u0000\uEF9A\uF77D\u0000\u0000"+
- "\uE257\u0000\u0000\u0000\u0000\u0000\uF9F6\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEF68\u0000\uE1D8\uEED6\uE16A\u0000\u0000\uE073"+
- "\uEAF6\uF357\uF356\u0000\uE74A\u0000\uF3F4\uF592"+
- "\uF5CC\u0000\u0000\uF975\u0000\u0000\u0000\u0000"+
- "\uF055\uF095\u0000\uE9DB\u0000\uE967\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEA9F\uF49B\u0000\uE5C7"+
- "\u0000\u0000\u0000\uE760\u0000\uF358\uE3A1\uE3A2"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE7D4\uE678"+
- "\uE7CA\u0000\uE841\uE757\uE972\uF4CE\uF5F4\u0000"+
- "\u0000\uF3B9\u0000\u0000\uE863\u0000\uF67A\u0000"+
- "\u0000\u0000\uE2F5\u0000\u0000\uF9AE\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE062\u0000"+
- "\u0000\uEAB4\u0000\u0000\u0000\u0000\uE6DD\uF84A"+
- "\uF237\uF5BD\u0000\uF797\u0000\u0000\uF1E8\u0000"+
- "\u0000\u0000\u0000\u0000\uE571\u0000\uE3A3\uEBD6"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF7F8\u0000\uE8CA"+
- "\uE0F9\uE564\u0000\uE7DC\u0000\uF24E\u0000\uF6ED"+
- "\u0000\u0000\u0000\uE47E\u0000\u0000\uEBE6\uF6F9"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE9ED"+
- "\u0000\uEF6B\u0000\uE8B3\u0000\u0000\u0000\uE3F7"+
- "\uEB40\u0000\u0000\uE572\u0000\uF667\u0000\uE6F9"+
- "\u0000\u0000\uE76D\u0000\uE1FD\uF43B\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1BD"+
- "\uF752\u0000\u0000\uF43C\u0000\u0000\uE03D\uE03E"+
- "\uE2AE\u0000\u0000\u0000\u0000\u0000\uECC2\u0000"+
- "\u0000\u0000\u0000\u0000\uE947\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8DA"+
- "\uE7BB\uE095\uF663\uEE9A\uF097\u0000\u0000\u0000"+
- "\u0000\u0000\uF098\u0000\u0000\uF69B\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE2AF\u0000\u0000\uE063\u0000\u0000\uE03F"+
- "\uE440\uF3BA\u0000\uE6B3\uECC3\uF4FD\uEA6A\u0000"+
- "\u0000\u0000\u0000\uEA6B\u0000\u0000\uF2DE\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEC73\uF29D\u0000\u0000\uEAF7\uE6CA"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE278\uE8DB\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF3BB\u0000\u0000\u0000\u0000\uEFF1"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF847\uE356\u0000\u0000\uE13B\uF238\u0000\u0000"+
- "\uE0FA\uF7F9\uE19F\uE4FE\u0000\u0000\u0000\u0000"+
- "\uED60\u0000\u0000\u0000\u0000\u0000\uF47E\u0000"+
- "\uE565\uEACD\u0000\uF948\uE3D0\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF45D\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF6D2\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE064"+
- "\u0000\uE5D9\u0000\u0000\u0000\uE76E\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1D9"+
- "\u0000\u0000\u0000\uF239\uF64C\u0000\u0000\uE16B"+
- "\u0000\u0000\u0000\u0000\u0000\uF359\u0000\uF99E"+
- "\u0000\uEF59\uF5A0\u0000\u0000\u0000\u0000\uEEFC"+
- "\uE6DE\u0000\u0000\u0000\u0000\uEA6C\u0000\uF33C"+
- "\uE1A0\uE1E1\u0000\uEBBA\u0000\uE8EF\uE842\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE3A5\uE948\u0000\u0000"+
- "\u0000\uE798\u0000\uE3A4\u0000\uE1E2\u0000\u0000"+
- "\u0000\u0000\uE97A\u0000\u0000\uF399\u0000\uF35A"+
- "\uE34E\u0000\uE9DC\u0000\u0000\u0000\u0000\uE566"+
- "\uE4D6\u0000\u0000\u0000\u0000\u0000\u0000\uF1D0"+
- "\uE1A1\u0000\u0000\u0000\u0000\u0000\uEAB5\u0000"+
- "\u0000\u0000\uEAF8\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE531\uE242\u0000\u0000\u0000\u0000\u0000"+
- "\uEF5A\u0000\u0000\u0000\u0000\uF0F5\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uECD5\uF5D0\u0000"+
- "\u0000\u0000\uF5A1\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7A7"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEDAB\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEE5B\u0000\uF5F1"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEDC5\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF7A3\uEB6B\uF67B\u0000\uE0F1"+
- "\u0000\uE7EA\uF5A2\u0000\u0000\u0000\uE6D1\u0000"+
- "\uE3F8\uF09A\uF09B\uE843\u0000\u0000\u0000\u0000"+
- "\uF2DF\u0000\u0000\uF3EF\u0000\uEDF6\uF24F\uEC74"+
- "\u0000\u0000\u0000\u0000\u0000\uE34F\u0000\uF83C"+
- "\uF5D1\uEEB3\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEFBE\u0000\u0000"+
- "\u0000\u0000\u0000\uF45E\uE8B4\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF95E\u0000\uE9EE"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEEB4\u0000"+
- "\u0000\u0000\u0000\u0000\uE6B4\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF6B4\u0000\u0000\u0000\u0000"+
- "\u0000\uE1BE\u0000\uE879\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE2B0\uF6D9\uF4E6\u0000\u0000"+
- "\uE269\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE23A\u0000\uE0C8\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE337\u0000\uF35B\u0000\uE357"+
- "\u0000\u0000\uED55\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE8E0\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE5DA\u0000\uE6A7\u0000\u0000\u0000\uF250"+
- "\u0000\uF798\u0000\u0000\u0000\u0000\uF5D2\uF1E9"+
- "\u0000\uE7BC\u0000\uEDC6\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF5A3\u0000\u0000"+
- "\uE864\uEC37\uF8FC\u0000\u0000\uF3DC\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE096\u0000\u0000\u0000"+
- "\uEF9C\u0000\u0000\uE279\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEFF8\uEC75\u0000\u0000\u0000\u0000"+
- "\uE349\uE594\u0000\u0000\u0000\u0000\u0000\uE3A6"+
- "\u0000\uEACE\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF996\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE4AA\u0000\u0000\u0000\uE13C\u0000\u0000\u0000"+
- "\u0000\uF2E0\u0000\u0000\u0000\uEDE5\uE365\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8FC"+
- "\u0000\u0000\u0000\u0000\uF976\u0000\u0000\u0000"+
- "\u0000\u0000\uE0FE\uF1EA\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEA41\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF7E3\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE532\uE2F6\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE660\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE5EA\uF3EE\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF85B\u0000"+
- "\u0000\u0000\u0000\uEDA1\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE5B1\u0000\u0000\u0000"+
- "\u0000\u0000\uE2ED\u0000\uF1EB\u0000\u0000\u0000"+
- "\u0000\u0000\uE5B2\u0000\u0000\u0000\uE5BC\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF9E2\uF4AD\u0000\uF9DB\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEFB0\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE3A7\u0000\u0000\uF9E3\uE243\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF9E4\uF85E"+
- "\u0000\u0000\u0000\u0000\uE040\u0000\uF6A7\u0000"+
- "\uE2B1\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE32"+
- "\u0000\uF946\uF43D\uF2E1\uF4AE\uE956\uE7EB\u0000"+
- "\u0000\u0000\uEF70\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEBA8\u0000\u0000\u0000\u0000\uE5F6"+
- "\uE2FD\u0000\u0000\uEA6D\u0000\u0000\u0000\uE7D1"+
- "\u0000\u0000\u0000\uED7A\uF45F\u0000\uF6BF\u0000"+
- "\u0000\uEC76\uEC38\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uECD6\u0000"+
- "\uF1D1\u0000\u0000\u0000\u0000\u0000\uEFF9\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE641\uEA42"+
- "\u0000\u0000\uEB78\u0000\u0000\uE4AB\u0000\uF0DC"+
- "\u0000\u0000\uEAAF\u0000\uE053\u0000\u0000\uF29E"+
- "\u0000\uF9C3\u0000\u0000\u0000\uF0F6\uE2B2\u0000"+
- "\u0000\u0000\u0000\uE7EC\u0000\uE7BD\u0000\uE76F"+
- "\u0000\u0000\uE548\uF0BE\uE9EF\u0000\uE9F0\uE9F1"+
- "\uE9F2\u0000\u0000\uE7BE\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF8C6\uE2B3\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF29F\u0000\u0000\u0000\u0000\u0000\u0000\uED3B"+
- "\u0000\uE855\u0000\uE77C\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE3A8\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEC39\u0000\u0000\uEA4C"+
- "\uEEB5\u0000\u0000\u0000\u0000\u0000\uE8F0\u0000"+
- "\uF2E2\uF3F0\uE2B4\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE8F1\u0000"+
- "\uEB41\u0000\u0000\u0000\u0000\uEAA5\u0000\uF7D2"+
- "\u0000\u0000\uEEFD\u0000\u0000\uEE33\uF8F1\uE0B0"+
- "\uF43E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE1E7\u0000\uEF6C\u0000\u0000\uEED7\u0000\u0000"+
- "\uF6C0\u0000\uE373\u0000\u0000\u0000\uE831\u0000"+
- "\u0000\u0000\uE14D\u0000\u0000\uE3A9\uE9CC\u0000"+
- "\u0000\uECFE\uE3AA\uEF3A\u0000\uF046\uF7FA\uEE5C"+
- "\uF668\u0000\u0000\u0000\uE557\u0000\u0000\u0000"+
- "\uE7CB\u0000\uE7D2\uE4CB\uE799\uE839\uF5F8\u0000"+
- "\u0000\uEA6E\uF43F\uF739\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE758\u0000\u0000\uF251\u0000"+
- "\u0000\u0000\u0000\uF7C1\u0000\u0000\u0000\u0000"+
- "\uE9F3\uF09C\u0000\uF64D\uEBBB\uE1BF\uF564\uEE5D"+
- "\u0000\uF95F\uF8A2\u0000\uEB6C\u0000\u0000\u0000"+
- "\u0000\uF54B\uE865\u0000\uF7B2\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF8F2\u0000\uE8F6\u0000\uEA6F"+
- "\u0000\u0000\u0000\uE8F2\u0000\u0000\u0000\u0000"+
- "\u0000\uF76C\uF6EE\uF0E8\u0000\uE49C\u0000\u0000"+
- "\uF3BC\u0000\u0000\uF86A\u0000\u0000\uE87A\uE856"+
- "\uF6C1\u0000\u0000\uEEB6\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
- private final static String innerIndex3=
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEDC7\uE63C\u0000\u0000\u0000"+
- "\u0000\uE957\u0000\u0000\u0000\u0000\u0000\uEBA9"+
- "\u0000\uEC3A\u0000\uE5A6\u0000\u0000\uE567\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF460\u0000\uF09D"+
- "\u0000\uEB6D\uF8F3\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF3BD\u0000\u0000\uEC77\uF9D7\u0000"+
- "\uE258\uF047\u0000\uF950\u0000\uF9E7\uF6EF\u0000"+
- "\u0000\uE6B5\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF2BA\uF3DD\u0000\uEA43\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEF5B\u0000\u0000\uF76D\u0000"+
- "\u0000\uF8C7\uE5C8\u0000\uE6DF\u0000\uE9A9\u0000"+
- "\u0000\u0000\u0000\u0000\uEFB1\u0000\u0000\uF83D"+
- "\uF669\uF896\u0000\u0000\u0000\u0000\u0000\uF73A"+
- "\u0000\u0000\u0000\u0000\u0000\uEE7E\u0000\uE16C"+
- "\uEBBC\uEB91\u0000\u0000\uEFBF\uF99F\uEE5E\u0000"+
- "\u0000\uEBD7\u0000\uEE5F\u0000\uF593\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED95"+
- "\u0000\u0000\uED9D\u0000\u0000\uF7E4\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF2E3\u0000\u0000\uE2EE\uF64E\uEB42\uF9A0\uE3AB"+
- "\u0000\u0000\u0000\uE6FA\u0000\u0000\u0000\uF8C8"+
- "\u0000\uEC67\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE533\uF39A\uE6A8\u0000\u0000\u0000\uEBE7\u0000"+
- "\u0000\uE4BF\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF2E4\u0000\uE6C5\uF0E2\u0000\u0000\uF977\u0000"+
- "\u0000\uED32\u0000\uEC78\u0000\uEE60\u0000\uF8E8"+
- "\uF578\uEDF4\uF54C\uF565\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAB6"+
- "\u0000\uF949\uF252\uE097\u0000\u0000\u0000\uF2E5"+
- "\uE0E2\uE534\u0000\uEA70\uE89F\uED56\uEF4E\u0000"+
- "\u0000\u0000\u0000\uEB6E\uF644\uF062\u0000\uF7FB"+
- "\u0000\u0000\uEB52\u0000\uE074\u0000\uEEB7\u0000"+
- "\uF09F\u0000\uE7DD\u0000\uE844\uF23A\uF8E9\u0000"+
- "\u0000\u0000\u0000\uE8CB\uE845\u0000\u0000\u0000"+
- "\u0000\u0000\uF3BE\u0000\u0000\uE4AC\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF8C9\u0000"+
- "\uEACF\u0000\u0000\uE4C0\uECD7\u0000\uF2E6\uF960"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEFC0"+
- "\u0000\u0000\u0000\uF5D3\u0000\u0000\uF16C\uF6B7"+
- "\u0000\u0000\uF048\uE3F9\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE958\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF049\u0000\u0000\u0000\u0000\u0000\uF3DE\u0000"+
- "\u0000\u0000\u0000\u0000\uE6B6\uE2B5\u0000\uE7A8"+
- "\u0000\u0000\uF17E\u0000\u0000\uE9AA\u0000\u0000"+
- "\u0000\u0000\uE1A2\uEF3E\u0000\u0000\u0000\uEBBD"+
- "\u0000\uF461\u0000\u0000\u0000\u0000\uEFC1\u0000"+
- "\u0000\u0000\uE49E\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE8B5\u0000\uF4E7\uE7A0\u0000\u0000"+
- "\u0000\uF961\u0000\uF1B2\uF53F\u0000\uF8A3\u0000"+
- "\u0000\uF951\u0000\uF23B\uE535\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF594"+
- "\u0000\u0000\u0000\u0000\uF269\u0000\u0000\u0000"+
- "\uF8CA\u0000\u0000\u0000\u0000\u0000\uE1E3\uE74B"+
- "\u0000\uEDDB\uF799\u0000\u0000\u0000\uF664\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6A9"+
- "\u0000\uE0C9\u0000\u0000\uEE61\uF35C\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE73E\u0000\uF7D3\uE5FE\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE74C\uF440\u0000\u0000\u0000"+
- "\u0000\uEC3B\uF4E8\u0000\u0000\u0000\u0000\u0000"+
- "\uF2C2\u0000\u0000\u0000\u0000\u0000\u0000\uF1EC"+
- "\u0000\uEEB8\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE8A0\u0000\u0000\uE14E\u0000\u0000\uF49E"+
- "\uE87B\u0000\uEC68\uF1D6\u0000\u0000\uE661\uEB43"+
- "\u0000\u0000\uF962\u0000\uF0C8\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE4C1\uF35D\u0000"+
- "\uE2F7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF1D2\u0000\uE568\uE959\uE6F1\u0000"+
- "\u0000\uEABB\u0000\u0000\uF4A5\u0000\u0000\u0000"+
- "\uF55D\u0000\u0000\u0000\u0000\uF3BF\uF741\u0000"+
- "\uEFFA\u0000\u0000\u0000\uF8CB\u0000\u0000\uE065"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF7D4\uF6CA\u0000\u0000\uE658"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF978\uF4BD"+
- "\u0000\uF2A0\u0000\uEEFE\u0000\u0000\u0000\u0000"+
- "\u0000\uE4C2\u0000\u0000\u0000\u0000\uE4B6\u0000"+
- "\uE13D\uF69C\uE642\uE468\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEED8\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uECA5\u0000\u0000"+
- "\u0000\u0000\uEEB9\u0000\u0000\u0000\u0000\uF33D"+
- "\uF8CC\uF0A1\u0000\u0000\uE536\u0000\u0000\u0000"+
- "\u0000\uF8CD\u0000\uE5BD\uF3DF\u0000\u0000\uF69D"+
- "\u0000\uEA44\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE5EB\u0000"+
- "\u0000\uEDC8\u0000\u0000\u0000\uF8A4\uE549\u0000"+
- "\u0000\uEA71\u0000\uED33\u0000\u0000\u0000\uE6B7"+
- "\u0000\uF77E\u0000\u0000\u0000\uEA45\u0000\u0000"+
- "\uE662\u0000\uF7D5\uEEBA\uF0D5\uE5F7\uF2E7\uEBBE"+
- "\u0000\u0000\u0000\uF83E\u0000\u0000\u0000\uE679"+
- "\uE67E\u0000\u0000\u0000\u0000\u0000\u0000\uEEBB"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF15B"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE5B3\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE244\u0000\u0000\u0000"+
- "\uF8A5\uEBEE\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF6A8\u0000\u0000\u0000\u0000\uF8CE\u0000\u0000"+
- "\u0000\u0000\u0000\uE74D\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF8FD\u0000\u0000\u0000\u0000"+
- "\uF979\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE2B6\u0000\u0000\u0000\uF1C7\uF23C\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE16D\u0000\u0000"+
- "\u0000\u0000\uF637\u0000\u0000\u0000\uEE9C\u0000"+
- "\u0000\u0000\uF5A4\u0000\u0000\u0000\u0000\u0000"+
- "\uF9DC\uF1B3\uE259\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF2E8\u0000\u0000\uEBBF\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF86B\uE0E3\uF6A9\u0000\uF8A6"+
- "\u0000\u0000\u0000\uE949\u0000\u0000\u0000\uF3C0"+
- "\uF1C8\uF2C3\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE63D\u0000\u0000\uF9CE\u0000\u0000\u0000\uEF31"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF8F4\uE5A7\u0000\u0000\u0000\uF3F6\u0000\uEE63"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE16E\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF742\u0000\u0000\u0000\uE97B\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF9B6\u0000\u0000\u0000"+
- "\u0000\uEDEA\u0000\u0000\uF3E0\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE8CC\uE9CD\u0000\u0000\u0000\uE558\u0000"+
- "\u0000\uE7ED\u0000\u0000\u0000\u0000\uF5A5\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEE9D\u0000\u0000\u0000\u0000\u0000\uEE64\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9C8"+
- "\u0000\uE631\uF9BF\u0000\uF963\u0000\uF2A1\u0000"+
- "\uEEBC\u0000\u0000\u0000\u0000\u0000\uE3EE\u0000"+
- "\u0000\uEE65\u0000\u0000\uEFF2\u0000\uEAB0\u0000"+
- "\u0000\u0000\u0000\u0000\uE770\uF94A\uF9AF\uF35E"+
- "\u0000\uE8E1\u0000\u0000\uEDC9\u0000\uF1B4\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEB53\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uECD8\u0000\u0000\u0000"+
- "\u0000\uEFFB\uF038\u0000\u0000\u0000\u0000\uF9B7"+
- "\u0000\u0000\uF8A7\u0000\uEFC2\u0000\u0000\u0000"+
- "\u0000\uF9F7\u0000\u0000\u0000\u0000\u0000\uEC69"+
- "\u0000\u0000\uE97C\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEF32\u0000\u0000\u0000"+
- "\u0000\uEE92\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF9F8\uF9F9\u0000\u0000\u0000\uF64F\u0000"+
- "\u0000\uEEA7\u0000\uEE67\u0000\u0000\u0000\u0000"+
- "\uE595\uE559\u0000\u0000\u0000\u0000\uE69C\u0000"+
- "\uE6F2\u0000\uEBC0\u0000\uE8E2\uEE68\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEEBD"+
- "\u0000\u0000\u0000\u0000\u0000\uF35F\uF4BE\uEC3C"+
- "\u0000\u0000\u0000\u0000\u0000\uF5B7\uEB92\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF9B8\uECE8\u0000\uE537\uEF9E"+
- "\uF862\u0000\u0000\u0000\u0000\u0000\uF791\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE663\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE5B4\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF360\u0000\uF6F0\uF243\u0000\u0000"+
- "\uF04A\u0000\uF063\u0000\u0000\uF1C9\uE9AB\u0000"+
- "\u0000\u0000\uEDAC\uF9A1\u0000\uEAD0\uF143\u0000"+
- "\uEAD1\u0000\u0000\u0000\u0000\u0000\uF1ED\uF748"+
- "\uF6FA\u0000\u0000\u0000\uF73B\u0000\u0000\u0000"+
- "\u0000\u0000\uF570\u0000\u0000\u0000\u0000\u0000"+
- "\uE54A\uED43\u0000\uEFDA\u0000\uEA46\u0000\uE7BF"+
- "\u0000\uE7C0\uE691\u0000\u0000\u0000\u0000\uE7CC"+
- "\u0000\uE83A\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEAE5\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF6E5\u0000\u0000\u0000\uE142\u0000\u0000"+
- "\uEAF9\uE6E0\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE54B\u0000\u0000\u0000\u0000\uF9FA"+
- "\u0000\u0000\u0000\u0000\uE143\u0000\u0000\uE8F3"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEAD2\u0000\uE25A\u0000\uF26A\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uED74\u0000"+
- "\uF8CF\u0000\u0000\u0000\u0000\u0000\u0000\uE2B7"+
- "\u0000\uF253\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE27A\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEC3D\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE6E1\uF897\u0000\u0000\uE5C9\uF73C\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEED9\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF4E9\u0000"+
- "\u0000\u0000\u0000\uE77D\uECC4\uF393\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEF75\u0000\u0000"+
- "\u0000\uEB9C\uF254\uE7DE\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF0A2\uF0A3"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF952\uF04B"+
- "\u0000\u0000\u0000\u0000\uEF3B\uEA72\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF1EF\u0000\uEF33\u0000\u0000\u0000\u0000\uE2F1"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE54C\u0000\uF97A\u0000\u0000\u0000\u0000\u0000"+
- "\uEEBE\u0000\uF994\u0000\u0000\uE644\u0000\u0000"+
- "\uEC3E\u0000\uE4B7\uF85C\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF86C\u0000\uF1B5\uEBE3"+
- "\u0000\uEF3C\u0000\uEF6D\u0000\u0000\uF2E9\u0000"+
- "\u0000\u0000\u0000\u0000\uF54D\u0000\uE2B8\uEFDB"+
- "\uE3AC\u0000\u0000\u0000\u0000\u0000\u0000\uE857"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0C9"+
- "\u0000\uEF5C\u0000\u0000\u0000\uEA47\u0000\u0000"+
- "\u0000\u0000\uE64C\uE4E5\u0000\u0000\u0000\u0000"+
- "\u0000\uF86D\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE866\u0000\uE041\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE858\uEAA6\u0000\uF7B3\uF462\u0000\uE054"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE25B\u0000"+
- "\u0000\uE1F5\u0000\u0000\u0000\uF9B0\uE5A8\u0000"+
- "\uF3C1\u0000\u0000\uEC79\uE95A\uF144\uF850\u0000"+
- "\u0000\uF8A8\uE338\u0000\u0000\uE87C\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7EE"+
- "\u0000\uEB9D\u0000\u0000\u0000\uF2EA\uF86E\u0000"+
- "\u0000\uEB54\u0000\uE2B9\u0000\uE5CA\uE6E2\uEC3F"+
- "\u0000\uE6B8\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEF5D\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF66A\u0000\u0000\u0000\u0000"+
- "\uF2A2\uEC6A\uF69E\u0000\u0000\uF8D0\uE3AD\u0000"+
- "\uE1E4\u0000\uE3AE\uE97D\uEF5E\u0000\uF39B\uE245"+
- "\uEE9E\u0000\u0000\uE6FB\uE366\uE9F5\uF6F1\u0000"+
- "\uF69F\u0000\uE8F7\u0000\u0000\u0000\u0000\uF8EA"+
- "\uEFDC\uE7C1\u0000\uF5F2\uEB55\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF064\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF7C2\u0000\uF04C"+
- "\u0000\uE455\uF8D1\uEEC0\uF0A5\u0000\uEAFA\uECA2"+
- "\uE6B9\u0000\uEFC3\u0000\uEF9F\uEF3F\u0000\u0000"+
- "\uF463\uF8A9\uE735\u0000\u0000\u0000\u0000\uE5CB"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE358\u0000"+
- "\u0000\u0000\uE3AF\uE6E3\u0000\u0000\u0000\uEB56"+
- "\u0000\uE632\u0000\uF1F0\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE6F3\u0000\u0000\u0000\uF964\u0000\uE867\uE16F"+
- "\u0000\uF464\u0000\uE3B0\u0000\uE170\u0000\uE8FD"+
- "\uF4BF\u0000\uF361\u0000\u0000\u0000\u0000\u0000"+
- "\uF94B\u0000\uEC40\u0000\u0000\uEE35\u0000\u0000"+
- "\u0000\uEC6B\u0000\u0000\u0000\uEADE\u0000\uEB57"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF491\u0000"+
- "\u0000\u0000\uE171\u0000\u0000\u0000\u0000\uE67A"+
- "\u0000\u0000\u0000\u0000\uEEC2\u0000\u0000\u0000"+
- "\uE246\u0000\uF4C0\u0000\uE1FE\u0000\u0000\u0000"+
- "\uF8D2\u0000\uF79A\uF6FB\u0000\u0000\uEF4F\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEF47\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1B6"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE94A\u0000\u0000\uE144\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF3F7\u0000\u0000\u0000\uEF48\u0000\u0000"+
- "\uE098\u0000\uED34\uF566\u0000\u0000\u0000\uEAE6"+
- "\u0000\u0000\u0000\uEAA7\u0000\uEAE7\uEBC1\u0000"+
- "\uEFC4\u0000\u0000\uE95B\uEFC5\u0000\u0000\u0000"+
- "\uF2A3\uF0A6\uE0A3\uECE9\u0000\u0000\u0000\uE3FB"+
- "\uF2A4\u0000\uF2EB\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE344"+
- "\u0000\u0000\u0000\u0000\uE1A3\u0000\u0000\uEF76"+
- "\u0000\uF2A5\u0000\uE4CC\uE87D\u0000\u0000\u0000"+
- "\u0000\uE6BA\u0000\uF465\uF5E5\uE7EF\u0000\u0000"+
- "\u0000\u0000\uF7B4\u0000\u0000\uE5D4\uF9CF\u0000"+
- "\u0000\u0000\uE8E3\u0000\u0000\u0000\u0000\uF3E1"+
- "\uF146\u0000\u0000\u0000\u0000\uF8FE\uE4D7\u0000"+
- "\uE3B1\u0000\uE0B1\u0000\u0000\u0000\u0000\uE3B2"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE0B2\uF3C2"+
- "\u0000\u0000\uF571\uF7B5\u0000\u0000\uEBC3\uEBC2"+
- "\u0000\uF0F7\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEAA8\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE0CA\u0000\u0000"+
- "\u0000\u0000\u0000\uEE49\u0000\u0000\u0000\u0000"+
- "\u0000\uF76E\uF7AA\uE099\u0000\uF1B7\u0000\u0000"+
- "\uE4B8\uF466\u0000\u0000\uE569\uF255\uF492\u0000"+
- "\u0000\u0000\uE042\u0000\u0000\uE94B\u0000\uF3F8"+
- "\u0000\u0000\u0000\u0000\u0000\uF147\u0000\u0000"+
- "\u0000\u0000\uEDCA\u0000\uF650\uF9DD\u0000\u0000"+
- "\uE573\uE172\u0000\uF6D4\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE6E5\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE4C3\u0000\uE736\u0000\uF651\u0000\u0000\u0000"+
- "\u0000\u0000\uE9F6\u0000\uE1C0\u0000\u0000\u0000"+
- "\uEDDC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEDCB\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEBC4\u0000\u0000\u0000\u0000\u0000\uEF40"+
- "\uF540\uF4EA\uE87E\u0000\uE6BB\u0000\uEC41\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE6AA\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE69D\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uED6F\u0000\uE066\u0000"+
- "\u0000\u0000\uF0A8\u0000\u0000\u0000\uE8FE\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF652\u0000\u0000\uF2BB\u0000\u0000\u0000"+
- "\u0000\uE59F\u0000\u0000\uEB58\u0000\u0000\u0000"+
- "\uEF49\u0000\uF2A6\u0000\u0000\u0000\u0000\u0000"+
- "\uE1A4\u0000\u0000\uE596\uE8A1\uE8DC\uE8DD\u0000"+
- "\u0000\u0000\u0000\u0000\uF26C\u0000\uE0CB\uF965"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE27B\u0000"+
- "\uE1C1\u0000\u0000\uF8D3\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF7AB\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF5D4\u0000\u0000\u0000\u0000\uE7A9"+
- "\u0000\u0000\uEFDD\uE8CD\u0000\u0000\uE9CE\u0000"+
- "\uEEC3\u0000\uF15C\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF7EC\u0000\u0000\u0000\uE0CC\u0000"+
- "\u0000\u0000\u0000\uEB9E\uE538\u0000\uF1D3\uE791"+
- "\u0000\uF467\u0000\uE09A\uE891\u0000\u0000\uE664"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE7CD\u0000"+
- "\u0000\u0000\uE77E\u0000\uF451\u0000\u0000\u0000"+
- "\uEAD3\u0000\u0000\u0000\uE892\u0000\uEC7A\u0000"+
- "\u0000\uEB9F\u0000\u0000\uE79A\u0000\u0000\u0000"+
- "\uF6AF\uE846\u0000\uE067\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF468\u0000"+
- "\uE79B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF86F\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2EF"+
- "\uE7C2\u0000\uF362\u0000\uED61\u0000\u0000\u0000"+
- "\uF4B7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF870\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF2EC\u0000\u0000\u0000\u0000"+
- "\u0000\uEC42\u0000\uE54D\u0000\u0000\uE7CE\u0000"+
- "\u0000\u0000\u0000\uF572\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE539\u0000\u0000\u0000\u0000\uE1C2\uEEDA"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF469\u0000\u0000\u0000\u0000"+
- "\u0000\uE7AA\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE74E\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE93D\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEC7B\uE69E\u0000\u0000"+
- "\uE09B\u0000\u0000\uE56A\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF567\uE131\u0000\u0000\uE2BA"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF5B8"+
- "\u0000\u0000\u0000\uE7C3\uE378\u0000\u0000\u0000"+
- "\u0000\u0000\uECC5\uF0F8\u0000\uF441\u0000\u0000"+
- "\u0000\uE2BB\u0000\u0000\u0000\uE4AD\uEF71\uE27C"+
- "\u0000\u0000\u0000\uEB44\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEA73\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE9F7\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF442\uF4F6\uF66B"+
- "\u0000\u0000\u0000\u0000\uE6FE\u0000\u0000\u0000"+
- "\u0000\u0000\uF76F\u0000\uF6F2\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE339\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE6A"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF5A6\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE6BC\uE173\u0000\u0000\uEE6B"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE9DD\u0000\u0000\u0000"+
- "\u0000\uE3B3\u0000\u0000\u0000\u0000\u0000\uF2ED"+
- "\u0000\u0000\u0000\u0000\uE66E\uED96\uEBEF\u0000"+
- "\u0000\uE9F8\u0000\u0000\u0000\u0000\u0000\uEF5F"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE075\u0000\u0000\u0000\uE931"+
- "\u0000\uEB45\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF93C\uF93D\uE737\u0000\u0000\u0000"+
- "\u0000\uF1B8\u0000\u0000\u0000\uE8B6\u0000\u0000"+
- "\u0000\u0000\uE692\uF4AF\u0000\u0000\uE1A5\u0000"+
- "\uE893\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE738\u0000\u0000\u0000\uE174\u0000\u0000\uE3B4"+
- "\u0000\u0000\u0000\u0000\u0000\uE068\u0000\u0000"+
- "\u0000\u0000\u0000\uE894\u0000\u0000\u0000\u0000"+
- "\u0000\uF5A7\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF5A8\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEE36\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE5EC\uE5F8\uE895\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uECC6\u0000\u0000\u0000\uEA74\u0000"+
- "\uEA75\uE3B5\u0000\u0000\u0000\u0000\u0000\uE3B6"+
- "\uE3B7\uF443\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEFDE\u0000\u0000\u0000\u0000\u0000\uF363\uF444"+
- "\u0000\u0000\uF364\uE0E4\uF8D4\uF5E6\uECEA\u0000"+
- "\uEA76\u0000\u0000\u0000\u0000\uEAD4\u0000\u0000"+
- "\uF79B\u0000\u0000\u0000\u0000\uF33E\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE3B8\u0000\u0000\u0000\u0000\uE66F"+
- "\u0000\uE367\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF931\uF2EE\uE968"+
- "\u0000\uEFDF\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEDDD\uF9FB"+
- "\u0000\u0000\uEB59\u0000\u0000\u0000\uE659\u0000"+
- "\u0000\uE53A\u0000\uEDCC\u0000\u0000\u0000\u0000"+
- "\u0000\uEFE0\u0000\u0000\u0000\uE368\uF932\uE54E"+
- "\uEC43\uEA77\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE94C\uE446\uF5D5\u0000\u0000\u0000\u0000"+
- "\u0000\uE231\uF5A9\u0000\u0000\uE9F9\u0000\u0000"+
- "\uE9FA\u0000\u0000\u0000\u0000\u0000\u0000\uF365"+
- "\u0000\u0000\u0000\u0000\uF66F\u0000\uF46A\uED7B"+
- "\u0000\uF493\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF149\u0000\u0000\u0000\u0000"+
- "\uF9FC\u0000\u0000\u0000\u0000\uEBAA\u0000\u0000"+
- "\uE069\u0000\u0000\uF2EF\u0000\uF5AA\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF19B\u0000\u0000\uF73D"+
- "\u0000\uF452\uF653\u0000\uE6D2\u0000\u0000\uF7A2"+
- "\uF366\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF39C\u0000"+
- "\u0000\uF670\u0000\u0000\u0000\u0000\uEFF3\uF453"+
- "\u0000\u0000\u0000\uE53B\uE043\uE1A6\u0000\uE1C3"+
- "\uE1DA\u0000\u0000\u0000\u0000\u0000\uE7CF\u0000"+
- "\u0000\uF654\u0000\u0000\u0000\uF26D\uEEC4\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEC44"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEAE2\uEEDB\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEF41\u0000\uF93E\u0000\u0000\u0000\u0000"+
- "\uEDCD\u0000\u0000\u0000\uF87B\u0000\uE2BC\u0000"+
- "\u0000\uE2E2\uE1F6\u0000\u0000\uF2F0\u0000\uF54E"+
- "\u0000\uE55D\u0000\u0000\uF4B8\u0000\u0000\u0000"+
- "\uEFA1\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF494\uF4EB\u0000\uF367\u0000\u0000"+
- "\uE2D7\u0000\u0000\u0000\u0000\u0000\u0000\uE2DF"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEF50\uEF51\u0000\u0000\u0000\uE2E3\uEFA2"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE33A\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF4C1\uE33B\u0000\uE574"+
- "\u0000\u0000\uF2BC\uE731\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7DF"+
- "\u0000\uF4D7\u0000\u0000\u0000\uE94D\u0000\uE175"+
- "\uF1F1\u0000\u0000\uF3E2\u0000\uE56B\u0000\u0000"+
- "\u0000\u0000\uEC45\u0000\u0000\uE076\u0000\uE4AE"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE176\u0000"+
- "\u0000\uF3D3\uF5E7\u0000\u0000\u0000\u0000\uE06A"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF8EE"+
- "\u0000\uEBC5\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEAE9\u0000\uF26E\u0000\u0000\uF6C2\u0000"+
- "\uE732\u0000\u0000\u0000\u0000\u0000\uE9AC\u0000"+
- "\u0000\u0000\u0000\u0000\uF33F\uE64D\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEBAB\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF7B6\u0000"+
- "\u0000\uE597\u0000\uE359\uF2A7\uEC7C\u0000\uE8EA"+
- "\uE25C\uF5E8\uF6D5\u0000\uE4CD\u0000\uF4FE\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE345\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEBA0\u0000\uEAFB\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEE6D\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEF34\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0CD"+
- "\u0000\u0000\u0000\uF2A8\u0000\u0000\u0000\uF244"+
- "\u0000\u0000\u0000\u0000\uE868\uE3B9\u0000\uEAA9"+
- "\u0000\u0000\uF4B0\u0000\u0000\uE154\u0000\u0000"+
- "\u0000\uE247\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF2A9\u0000\u0000"+
- "\u0000\uEAD5\u0000\u0000\uF1D7\u0000\u0000\u0000"+
- "\uF256\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF2BD\uF966\u0000\u0000\uE8F4\u0000\uF2AA\uF749"+
- "\u0000\uF5E9\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uECD9\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEBC6\u0000\u0000\u0000\uE54F\u0000\u0000\u0000"+
- "\u0000\uEA78\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF37A"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF4C2\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE4AF\u0000"+
- "\u0000\uE06B\u0000\u0000\u0000\u0000\u0000\uF967"+
- "\u0000\u0000\uF1D8\uEBC7\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF568\uE643\uE9AD"+
- "\u0000\u0000\u0000\uE5BE\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF3C3\uF26F\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE67B\u0000\u0000\u0000\uF569\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE6E6\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE847\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE9FB\u0000\u0000\u0000\u0000"+
- "\u0000\uE9CF\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE733\u0000\u0000\uE869\u0000\uF368"+
- "\uF2C4\u0000\u0000\u0000\u0000\u0000\u0000\uEBD8"+
- "\u0000\u0000\u0000\u0000\u0000\uF3D4\u0000\uF1F2"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE5DB\u0000"+
- "\u0000\uE5DC\uF4C4\uE0D7\u0000\u0000\u0000\u0000"+
- "\u0000\uEC46\u0000\u0000\u0000\u0000\uF2F1\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF8D5\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE4D8\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE9D0\uF369"+
- "\uE0B3\u0000\u0000\u0000\u0000\u0000\u0000\uE5DD"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE1A7\u0000\u0000\uE33C\u0000";
-
- private final static String innerIndex4=
- "\uE3BA\u0000\uF3C4\u0000\uEDB3\uF8F5\uEFE1\uF9E0"+
- "\uF94C\u0000\uE832\uE833\u0000\uE431\u0000\u0000"+
- "\uE491\u0000\u0000\u0000\uEC7D\u0000\u0000\uEA79"+
- "\uE26C\uF445\uE374\uE9D1\u0000\u0000\u0000\u0000"+
- "\uEBC8\uE8B7\uEAE3\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF1B9\uF3C5\u0000\uF4CF\uE6AB"+
- "\uEBAC\u0000\u0000\uECEB\u0000\uF257\u0000\u0000"+
- "\u0000\uEBC9\uE09C\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF39D\uF871\uF36A\uE177\uE896\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE14F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE27D\u0000"+
- "\u0000\uE5A9\uF872\u0000\u0000\u0000\uE375\u0000"+
- "\uF0D6\u0000\uF16F\u0000\u0000\u0000\uEAFC\u0000"+
- "\u0000\uF6D6\uEA7A\uE0B4\u0000\u0000\uF2BE\u0000"+
- "\u0000\uE145\u0000\u0000\u0000\u0000\u0000\uE2BD"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF2F2\uEC47"+
- "\u0000\u0000\u0000\uE178\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF39E\u0000\u0000\u0000"+
- "\uE670\u0000\uF3C6\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEC48\uF0AB\u0000\u0000"+
- "\u0000\uE0B5\uE761\u0000\uF55E\uF4F7\u0000\u0000"+
- "\uE6C6\u0000\uE3BB\uF6AA\u0000\uF1CA\uE6D3\uE79C"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF655"+
- "\u0000\u0000\uE3CC\uE9FC\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEAFD\u0000"+
- "\uF7E5\u0000\uEB5A\u0000\u0000\uF49F\uE4B0\u0000"+
- "\uF595\uE859\u0000\uEE6E\u0000\u0000\u0000\u0000"+
- "\uF74A\uEF60\u0000\u0000\uE79D\u0000\u0000\uF065"+
- "\u0000\u0000\u0000\u0000\uE633\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF656\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF46B\uED9E\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEF42\u0000\u0000"+
- "\u0000\u0000\u0000\uE86A\u0000\uF46C\uF8D6\uEFB2"+
- "\u0000\uF23D\u0000\uF873\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE97E\u0000\u0000\uF5EA\uEE70"+
- "\u0000\uF39F\u0000\u0000\u0000\u0000\u0000\uE6AC"+
- "\u0000\u0000\u0000\u0000\u0000\uF5C5\uF270\u0000"+
- "\u0000\uE8E5\u0000\uE9DE\u0000\u0000\uE7F0\uEFA3"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF3F9\u0000\uF454\uEB5B\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEFA4\u0000"+
- "\u0000\uEC49\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uECB1\uF97B\uE1A8\u0000\uE146\u0000\u0000"+
- "\uF36B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEE4A\u0000\u0000\uE1A9\u0000\u0000\u0000"+
- "\u0000\u0000\uF4C3\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEBD9\u0000\u0000\uF2AB"+
- "\u0000\u0000\u0000\uEEC5\u0000\u0000\uEB79\u0000"+
- "\uF4C5\u0000\u0000\uE550\uE5BF\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE9AE\u0000"+
- "\uF7FC\u0000\uE150\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEDA2\u0000\u0000\u0000"+
- "\uE248\u0000\u0000\u0000\uE762\uF7D6\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF3AA\uE261\u0000\u0000\uF657\u0000"+
- "\uE8EB\u0000\uEAFE\u0000\u0000\uE771\u0000\uF6F3"+
- "\u0000\uE6E7\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE5A0\u0000\u0000"+
- "\uE3BC\u0000\uEDCF\u0000\uE0B6\u0000\uE848\u0000"+
- "\u0000\u0000\u0000\u0000\uE1C4\u0000\u0000\u0000"+
- "\u0000\u0000\uE64E\u0000\u0000\u0000\uEC4A\u0000"+
- "\u0000\u0000\u0000\u0000\uE2D8\u0000\u0000\u0000"+
- "\uEB5C\uF0F9\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF9FD\u0000\u0000\u0000\u0000\u0000"+
- "\uE6E8\uE0D8\u0000\u0000\u0000\uEFE2\u0000\u0000"+
- "\u0000\uEF4A\u0000\u0000\u0000\uECC7\u0000\u0000"+
- "\u0000\u0000\uF15D\u0000\uF15E\u0000\uE64F\u0000"+
- "\u0000\u0000\uECA7\u0000\uEAD6\uF9E8\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF271"+
- "\uF638\uE9FD\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF74B\u0000\uEF61\u0000\u0000\u0000\u0000"+
- "\uF7D7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE27E\u0000\u0000\uF15F\u0000\u0000\u0000"+
- "\uEFA5\uE665\u0000\uE1C5\u0000\uF1BA\uE3BD\u0000"+
- "\u0000\uE2BE\u0000\u0000\uF14B\u0000\u0000\u0000"+
- "\uE441\u0000\u0000\u0000\u0000\uE179\u0000\uE7C4"+
- "\uEFFC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE3BE\u0000\u0000"+
- "\u0000\u0000\u0000\uF14C\u0000\u0000\uEDAD\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF6B0\u0000\uE17A"+
- "\u0000\u0000\u0000\uE4C4\u0000\u0000\uE650\u0000"+
- "\u0000\u0000\uE69F\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEBA1\u0000"+
- "\uEA4D\u0000\uF639\u0000\u0000\u0000\uE834\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE634"+
- "\uF5C6\u0000\uEBA2\uEFC6\u0000\u0000\u0000\uF455"+
- "\u0000\u0000\u0000\u0000\u0000\uF579\uE67C\uF0D3"+
- "\u0000\u0000\u0000\u0000\uF14D\uEC6C\uEA7B\uF36C"+
- "\u0000\uF0BF\u0000\uE6CE\uE3BF\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF5AB\u0000"+
- "\u0000\u0000\u0000\uF7FD\u0000\uE06C\u0000\u0000"+
- "\u0000\uE1C6\uF446\u0000\u0000\uE9FE\u0000\u0000"+
- "\u0000\uE147\uE8B8\u0000\u0000\u0000\u0000\uE379"+
- "\u0000\uE26D\uF0C0\u0000\uF9A2\u0000\u0000\u0000"+
- "\u0000\u0000\uF75B\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF066\uF3B0\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE8CE\u0000\uF6C3\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE8CF\uE0A4\u0000\u0000\uF770\u0000"+
- "\u0000\uF8D7\u0000\u0000\uF0CA\uEB31\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE25D\u0000\u0000\uE56C\u0000\u0000\u0000"+
- "\uF9D8\u0000\u0000\u0000\u0000\uE498\u0000\u0000"+
- "\u0000\u0000\uF447\u0000\u0000\uF898\uF63A\uF899"+
- "\uE776\u0000\uF541\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEF62\u0000\uE055\uE17B\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEC7E\u0000\u0000\u0000\u0000"+
- "\u0000\uEC4B\u0000\uF6AD\u0000\u0000\u0000\uF771"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF4EC\u0000\u0000\u0000\u0000\uEA31\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uED9F\u0000\u0000\uECEC\u0000"+
- "\uE9AF\uE9B0\u0000\u0000\uE0B7\uEF63\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEBA3\uE470\u0000"+
- "\u0000\u0000\u0000\uF3A0\u0000\u0000\u0000\u0000"+
- "\uEFA6\uE0F2\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF1F3\uE969\uEB5D\u0000\u0000\u0000\u0000\uF6DA"+
- "\uE8B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE13E\u0000\uE86B\u0000\u0000\u0000\u0000\uE1C7"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE9B1\u0000\uE73F\uECA3\u0000\u0000"+
- "\uE291\u0000\u0000\uF495\u0000\u0000\u0000\u0000"+
- "\uF743\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEB5E\u0000\uF5FD\u0000\u0000"+
- "\u0000\u0000\uF0EC\u0000\u0000\uE4C5\uF97C\uE46B"+
- "\uE57B\u0000\uEA32\u0000\u0000\u0000\uEDE6\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF340\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE5C4\u0000\u0000\u0000\u0000\u0000\u0000\uF1F4"+
- "\u0000\u0000\u0000\uECED\u0000\uEF52\u0000\uF1F5"+
- "\uE6FC\u0000\uF1BB\u0000\u0000\uF63B\u0000\u0000"+
- "\u0000\u0000\u0000\uF448\uF658\u0000\u0000\u0000"+
- "\u0000\u0000\uE4E6\uF46D\uE2BF\u0000\uF0AC\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE2C0\u0000\uEE38"+
- "\uF9E9\u0000\uE2C1\u0000\uEB6F\uEA7C\u0000\u0000"+
- "\u0000\u0000\uEB32\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF54F\uEC91\u0000\uE7F1\uF3C7"+
- "\u0000\uE0B8\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF7FE\uE8BA\uE897\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF67C\uE86C\uF874"+
- "\u0000\uEB5F\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE9B2\u0000\u0000\u0000\u0000\uEE39\u0000\uF2F3"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF4ED\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF0FA\u0000\uF7E6\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE06D\uE5DE"+
- "\u0000\uE06E\uEAE4\u0000\u0000\u0000\uEE9F\u0000"+
- "\uF5AC\u0000\u0000\u0000\u0000\u0000\uED97\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEFE3\u0000\uF1CB\uE2E4\u0000"+
- "\u0000\u0000\uE763\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE9B3\uE57C\u0000\u0000\uF449\u0000\uEAB7"+
- "\u0000\u0000\u0000\u0000\u0000\uE0CE\uF8D8\u0000"+
- "\u0000\uE369\u0000\u0000\uE9D2\uF6F4\uEEDC\uED35"+
- "\u0000\uF933\u0000\uE8BB\u0000\u0000\u0000\uF44A"+
- "\uEFFD\uE35A\u0000\uF5D6\uE7C5\uED44\u0000\uF1A7"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF04D\uEEA0\u0000\uF6C4\uF5AD\u0000\uE7E0"+
- "\u0000\u0000\u0000\uE044\u0000\u0000\uF772\uE2C2"+
- "\u0000\uF14E\u0000\u0000\u0000\uEDB4\uE1C8\uF258"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEEC8\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE1C9\uF7B7\u0000"+
- "\u0000\uF3E8\uE7F2\uE8F5\uE045\uE7C6\u0000\u0000"+
- "\u0000\uE759\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7AB"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF1BC\u0000\u0000\uE764\u0000\u0000\u0000\uE96A"+
- "\u0000\uEC4C\u0000\u0000\uF97D\uF170\uE4A0\u0000"+
- "\uEFC7\uEE3A\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEC92\u0000\u0000\u0000\u0000\u0000\u0000\uF84B"+
- "\u0000\uF5AE\uF8AA\u0000\u0000\u0000\u0000\uF19D"+
- "\u0000\uF14F\uF968\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE575\u0000\u0000\u0000\uF7C3"+
- "\u0000\u0000\u0000\uF272\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE6E9\uF1F6\u0000\u0000\u0000\uEA7D\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE17C\u0000"+
- "\uECEE\u0000\u0000\u0000\u0000\u0000\uEF64\u0000"+
- "\u0000\u0000\uF89A\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE9B4\uED45\uE740\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE765\u0000\u0000"+
- "\u0000\uF57A\u0000\u0000\u0000\uE249\u0000\u0000"+
- "\u0000\uE671\uE2D2\u0000\uE346\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE232\u0000\u0000\uF4EE\u0000"+
- "\u0000\u0000\u0000\u0000\uF4F8\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE95C\u0000\uE35B\u0000\u0000\u0000\uF934"+
- "\uE1CA\uE6D4\uEA33\u0000\uED70\u0000\u0000\u0000"+
- "\u0000\uF259\u0000\u0000\u0000\uEC6D\u0000\u0000"+
- "\u0000\u0000\u0000\uF5FE\uE53C\u0000\u0000\u0000"+
- "\u0000\u0000\uE5D1\u0000\uE792\uF753\uF067\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF5D7\u0000\u0000\uE74F\u0000\u0000\u0000"+
- "\u0000\uF9C0\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF0AD\u0000\u0000\u0000\u0000\uE5AA\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEEA8\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF25A"+
- "\u0000\u0000\u0000\uE077\u0000\u0000\u0000\u0000"+
- "\u0000\uF773\u0000\uE56D\u0000\u0000\uF068\u0000"+
- "\u0000\u0000\u0000\uF8D9\uF1F7\u0000\u0000\uEDB5"+
- "\u0000\u0000\u0000\u0000\u0000\uE33D\u0000\u0000"+
- "\u0000\u0000\uF3F1\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEC4D\u0000\u0000\u0000\uECC8\u0000\u0000\u0000"+
- "\u0000\uE7D5\u0000\u0000\uEAAA\u0000\u0000\u0000"+
- "\u0000\uE8BC\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF774\u0000\u0000\u0000\u0000\u0000"+
- "\uF3FA\u0000\u0000\uEDB6\uF4EF\u0000\u0000\uF8DA"+
- "\uEBE0\u0000\uE7AC\u0000\uF5EB\u0000\uEB46\u0000"+
- "\u0000\uEFC8\u0000\uE0CF\u0000\uECC9\u0000\u0000"+
- "\u0000\uEA7E\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEC4E\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE991\u0000\uE635\u0000"+
- "\u0000\u0000\u0000\u0000\uEC93\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE6A0\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE7A1\u0000\uE750\uE96B\u0000\u0000\uF1BD"+
- "\uEAB8\u0000\uF035\u0000\u0000\u0000\uE6AD\u0000"+
- "\u0000\uF4F9\u0000\uF1F8\u0000\uF5C7\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEBCA\uF0E3\u0000\uF46E"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF75C\u0000\uF069"+
- "\u0000\uE4C6\u0000\uE8E6\u0000\u0000\u0000\u0000"+
- "\u0000\uF5AF\u0000\u0000\u0000\u0000\uE292\u0000"+
- "\u0000\u0000\u0000\uEFFE\u0000\u0000\u0000\u0000"+
- "\u0000\uF8B6\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEC94\u0000\u0000\u0000\u0000"+
- "\uE2F2\uF6B9\uE7F3\u0000\u0000\uEBCB\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE86D\u0000\u0000\uE849"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0FB"+
- "\u0000\uE0B9\u0000\u0000\uF1F9\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEB70\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF550\u0000"+
- "\uF9BC\uEAB1\uECEF\u0000\u0000\u0000\u0000\uEB33"+
- "\uF9B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF341\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE1CB\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF1BE\u0000\u0000\u0000\uE5C0\uECF0\uF1FA"+
- "\u0000\u0000\u0000\u0000\u0000\uEFE4\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE5ED\uEEDD\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE598\uEDB7\u0000\u0000"+
- "\u0000\uE8E7\uEC4F\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF25B"+
- "\u0000\u0000\uE6F4\uF36D\u0000\u0000\u0000\uE23B"+
- "\u0000\u0000\uEEDE\u0000\u0000\u0000\uE666\uEBCC"+
- "\u0000\u0000\uEF43\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEDEE\uE932"+
- "\u0000\u0000\uEB60\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE5B5\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5A1"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF8DB\u0000"+
- "\uF7CB\u0000\u0000\u0000\uE0F3\uF535\u0000\u0000"+
- "\u0000\u0000\u0000\uF858\uE667\u0000\uEFE5\uF8DC"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9D0"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF8F6\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE835\u0000\uE8BD\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF172\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE1F7\uF36E\u0000\u0000\u0000"+
- "\u0000\uF659\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEA91"+
- "\u0000\u0000\u0000\uE4B1\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF97E\u0000\u0000\u0000"+
- "\u0000\uEF53\u0000\uF3C8\u0000\u0000\u0000\uE293"+
- "\u0000\u0000\u0000\u0000\uF7ED\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF496\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uED46\u0000"+
- "\uF5B9\u0000\uE992\uECF1\u0000\u0000\u0000\u0000"+
- "\uEF35\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF44B\u0000\uEA34\u0000\uE85C\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE079\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uECDA\u0000\uF969"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF06A"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF7C4\u0000"+
- "\uECA4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF8DD\u0000\uF2CA\u0000"+
- "\uEF54\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE5CC\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF0D7\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7AD"+
- "\u0000\u0000\uF8AB\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE4D9\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE5A2\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF66E\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE898\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEB61\u0000\u0000\uEFA8"+
- "\u0000\u0000\uF5F9\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF83F\u0000\uF0FC\u0000\u0000\uEB7A\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uECB2\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5C5"+
- "\u0000\u0000\uF3E3\uE5EE\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE1CC\u0000\u0000\u0000\u0000\uF1D9\u0000"+
- "\u0000\u0000\u0000\uE751\u0000\u0000\u0000\u0000"+
- "\uF87C\u0000\u0000\u0000\u0000\u0000\uF3EB\u0000"+
- "\u0000\u0000\u0000\u0000\uF84C\uEE72\u0000\u0000"+
- "\u0000\u0000\uF875\uEC9C\u0000\u0000\u0000\uE046"+
- "\u0000\uED47\u0000\uF06B\u0000\uF5FA\u0000\u0000"+
- "\u0000\uF8AC\uE2C3\uF0FD\u0000\u0000\u0000\u0000"+
- "\uF79C\u0000\u0000\uEAB9\u0000\u0000\u0000\u0000"+
- "\uEBF1\u0000\uE434\u0000\u0000\u0000\u0000\uF5FB"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE36A\uE36B"+
- "\u0000\uF04E\uE7B1\u0000\u0000\u0000\u0000\u0000"+
- "\uE047\u0000\u0000\uE4E7\u0000\uF775\u0000\u0000"+
- "\u0000\u0000\uE4B2\u0000\u0000\u0000\uEC50\uF46F"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE1E5\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF7AC\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE1CD\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF23E\uE63E\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6EA"+
- "\u0000\u0000\u0000\u0000\uEEE0\uF0AE\u0000\u0000"+
- "\u0000\uE2D9\u0000\u0000\uE95D\uF1FB\u0000\uEA92"+
- "\u0000\uE6EB\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEA35\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEAD7\uE8D0\uE8D1\u0000\u0000"+
- "\uE5A3\u0000\u0000\u0000\u0000\uF342\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE96C"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE078\u0000\uF776\uE95E\u0000\u0000\u0000\u0000"+
- "\uF06C\uE8D2\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEFB3\u0000\u0000"+
- "\u0000\u0000\uF6DB\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uECA8\u0000"+
- "\uE6AE\u0000\u0000\uEB71\u0000\u0000\u0000\u0000"+
- "\u0000\uE0BA\u0000\u0000\uEDD1\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE36C"+
- "\u0000\u0000\u0000\u0000\uE5C1\u0000\u0000\u0000"+
- "\u0000\u0000\uE75A\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uECA9\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEB34"+
- "\u0000\uEFA9\u0000\uE4C7\u0000\u0000\uE96D\uF73E"+
- "\u0000\u0000\u0000\uE148\u0000\u0000\u0000\uE33E"+
- "\u0000\u0000\u0000\uE794\u0000\u0000\uECCA\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE13F\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE53D\uF661\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE35C\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE056\u0000\u0000\uE5C2\u0000\u0000"+
- "\uE24A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE057\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF840\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEAD8\u0000\u0000\u0000"+
- "\uF5BA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEDEB\u0000\uF2F4\uE9B5\u0000\u0000\u0000\u0000"+
- "\uE1AA\u0000\uECF2\u0000\uF8F7\u0000\uF6D0\u0000"+
- "\u0000\u0000\u0000\uF9BA\u0000\u0000\uF9E1\uF6A0"+
- "\uE3C0\u0000\u0000\uEF55\u0000\uED48\u0000\uEBE8"+
- "\u0000\u0000\u0000\uE151\u0000\uE47D\u0000\u0000"+
- "\u0000\u0000\uE8BE\u0000\u0000\uEB72\u0000\u0000"+
- "\u0000\uF859\u0000\u0000\uEBCD\u0000\uE048\u0000"+
- "\u0000\u0000\uF470\uF3C9\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEA93\u0000\u0000\u0000\uF36F\uF754\u0000\u0000"+
- "\u0000\u0000\u0000\uF25C\u0000\u0000\uEA94\u0000"+
- "\uEEC9\u0000\uEC95\uEEE1\u0000\u0000\uECCB\u0000"+
- "\u0000\uECCC\u0000\u0000\u0000\uE2F8\uF2AC\u0000"+
- "\uF9FE\uF935\uF841\uEAD9\u0000\uEB62\u0000\u0000"+
- "\u0000\uF56A\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF3CA\u0000\uE233"+
- "\u0000\u0000\u0000\u0000\uF44C\uF173\u0000\u0000"+
- "\u0000\u0000\u0000\uEB35\u0000\uF6AB\u0000\u0000"+
- "\uF0AF\u0000\u0000\u0000\u0000\u0000\uEDDE\u0000"+
- "\uEBA4\uE1AB\u0000\uE7F4\uEF36\uE1CE\uEBE9\u0000"+
- "\uF991\u0000\uEB73\u0000\u0000\u0000\u0000\u0000"+
- "\uEC51\u0000\uE234\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEA36\u0000\u0000\uF0FE\u0000\uF0DD\uF370"+
- "\u0000\u0000\uF56B\u0000\uEC96\u0000\u0000\uE4C8"+
- "\u0000\u0000\u0000\uF57B\u0000\uF245\u0000\uF5D8"+
- "\u0000\u0000\uE5DF\u0000\u0000\u0000\uE675\u0000"+
- "\u0000\u0000\u0000\uF0B0\uF573\u0000\u0000\u0000"+
- "\u0000\uECCD\u0000\u0000\u0000\u0000\uF596\uF842"+
- "\u0000\u0000\uF2F5\uE06F\u0000\uF0B1\uF1BF\u0000"+
- "\u0000\uF9C9\u0000\u0000\u0000\u0000\uED36\uF7A4"+
- "\uF343\u0000\uEDEC\u0000\u0000\u0000\uE3E7\u0000"+
- "\uE7C7\uED67\uF06D\u0000\uE599\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE84A\u0000"+
- "\uE85D\u0000\u0000\u0000\uF7CC\u0000\uEBDA\uE8BF"+
- "\u0000\uE155\uF160\uE0BB\u0000\uEA95\u0000\u0000"+
- "\uEFAA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE7C8\u0000\u0000\uF273\uE6BD\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE2C4\u0000\u0000\u0000\u0000"+
- "\u0000\uE35D\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF936\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF3FB\u0000\u0000\u0000\u0000\uF9D2\uE3C1"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uECDB\u0000\uE4C9\u0000\uE95F\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE17D\u0000"+
- "\u0000\u0000\u0000\u0000\uEA37\u0000\u0000\uEE4B"+
- "\uF131\u0000\u0000\u0000\uE149\u0000\u0000\uF8DE"+
- "\u0000\u0000\u0000\u0000\u0000\uEEE2\u0000\u0000"+
- "\uE551\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE938\u0000\u0000\u0000\u0000\u0000"+
- "\uEC52\u0000\uF4D8\uEDD3\u0000\u0000\uF4D9\u0000"+
- "\u0000\u0000\uF4C6\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1DB"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1AC"+
- "\u0000\uF953\u0000\u0000\u0000\u0000\uE577\u0000"+
- "\uE3C2\u0000\uF7A5\u0000\uEF65\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uECCE\u0000\u0000"+
- "\u0000\u0000\uE55A\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEADA\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF8DF\uEEE3\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF79D\uECCF\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF5B0\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE777\u0000\uE7C9\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF73F\uF2F6\u0000"+
- "\uE9B6\uF23F\uE1F8\u0000\u0000\u0000\u0000\uEA48"+
- "\uF937\uF6FC\uF6B1\uE24B\uF531\u0000\u0000\uF25D"+
- "\uEBAE\u0000\u0000\uF153\uE2FE\u0000\uF74F\uE772"+
- "\uE4E8\u0000\u0000\uEA38\uF574\uF152\u0000\uE7F5"+
- "\uF7C5\uE9D3\uE693\uF19E\uF992\u0000\u0000\uF1C0"+
- "\uE049\u0000\uF274\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF471\u0000\uEA49\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE694\u0000\uEA96\u0000\uEADB\u0000"+
- "\uE8D3\u0000\uF877\uE773\uF551\u0000\uE9B7\u0000"+
- "\u0000\u0000\uF497\u0000\u0000\uE53E\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE695\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE9B8\uE2C5\uEADF\u0000\u0000";
-
- private final static String innerIndex5=
- "\u0000\u0000\u0000\u0000\uF44E\uF631\u0000\uF0CB"+
- "\uF3FC\u0000\uF4C7\u0000\u0000\uEB7B\u0000\u0000"+
- "\u0000\u0000\u0000\uF1FC\u0000\u0000\uEBDB\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF275\u0000\uEA97\u0000"+
- "\u0000\u0000\u0000\uF863\u0000\u0000\u0000\u0000"+
- "\uF3CB\u0000\u0000\uE33F\uE9B9\u0000\u0000\uE3C3"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF5B1\u0000\u0000"+
- "\u0000\u0000\uF056\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF371\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF63C\u0000\u0000\u0000\u0000"+
- "\uF5D9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF37B\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE9BA\u0000\u0000\u0000\uF44F\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF6C5\u0000"+
- "\u0000\u0000\u0000\uE8A2\uF498\u0000\u0000\uE04A"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF6F5\u0000\uE0E5\u0000\u0000"+
- "\u0000\uF276\u0000\uEB63\u0000\u0000\u0000\u0000"+
- "\uE235\u0000\u0000\u0000\u0000\u0000\u0000\uE668"+
- "\u0000\u0000\u0000\uE53F\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEFC9\u0000\u0000\u0000\u0000\uE4CE"+
- "\uF552\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE0E6\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF3A1\u0000\u0000\u0000\u0000\u0000"+
- "\uF0B2\u0000\u0000\u0000\u0000\uF3A2\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF0B3\u0000\uF344\u0000\u0000\uE0F4"+
- "\uE540\uF4B2\uF8B7\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF5EC\u0000\u0000\u0000\u0000\u0000\uF277"+
- "\uF542\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF5ED\u0000\uE2F3\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF372\u0000\u0000\u0000\u0000\u0000\uF25E"+
- "\u0000\u0000\uF3CC\u0000\u0000\uEDB8\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE6F5\uECF3\uE2E5\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE2C6\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF4B3\uED68\uE2F9\uE2DA\u0000\u0000"+
- "\u0000\u0000\uF85D\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE73"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF472\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF5EE\u0000\u0000\uE04B\u0000\u0000\uECDC\u0000"+
- "\u0000\u0000\u0000\uE294\u0000\uE669\u0000\u0000"+
- "\u0000\uF240\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF575\uE752\uE960\uE17E\u0000\u0000"+
- "\u0000\u0000\u0000\uE5E0\uF65A\uF9CA\uE766\uF55F"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE636\uE94E"+
- "\u0000\uE8D4\uE6C7\u0000\u0000\u0000\u0000\uF4A0"+
- "\u0000\u0000\u0000\uF3CD\u0000\u0000\u0000\u0000"+
- "\uEC53\uE96E\u0000\uE96F\u0000\u0000\uF2AD\uEE3B"+
- "\u0000\u0000\u0000\u0000\uF7DD\uF04F\u0000\u0000"+
- "\u0000\uF2AE\u0000\u0000\u0000\uF560\uE295\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEE3C\u0000\uE26E"+
- "\u0000\u0000\uE5F9\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uECF4\uE1D0\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE5B8\u0000\u0000\uF6FD\u0000"+
- "\uE939\u0000\u0000\u0000\u0000\uEA98\u0000\uE93A"+
- "\uF473\uEFB4\uE46C\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEFE6\u0000\u0000\uECF6\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEECA\u0000"+
- "\u0000\uE35E\u0000\u0000\uE899\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE04C\u0000"+
- "\u0000\u0000\uF278\uE86E\u0000\uF499\u0000\u0000"+
- "\uEC9D\u0000\uE136\u0000\u0000\u0000\u0000\uE84B"+
- "\u0000\uF279\u0000\u0000\u0000\uF5DA\u0000\u0000"+
- "\uF6DC\uEBEA\uE251\uE541\u0000\uF9B1\uEE4D\u0000"+
- "\uF8AD\u0000\u0000\uF777\u0000\uEBCE\u0000\uF6E2"+
- "\uF5EF\uE2C7\u0000\u0000\uE542\uE191\u0000\uE578"+
- "\u0000\uF25F\uF6D7\u0000\u0000\uEB36\uE651\uEBDC"+
- "\uF373\uF3E4\uE993\uE637\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF597\u0000"+
- "\u0000\uF3CE\uF474\u0000\u0000\uE340\u0000\u0000"+
- "\uF191\u0000\u0000\u0000\uF7BA\u0000\uF0B5\u0000"+
- "\u0000\uE57D\uEC54\u0000\u0000\u0000\u0000\uEFE7"+
- "\u0000\u0000\uF0B4\uF031\u0000\uF74C\uE236\u0000"+
- "\uF7C6\uF96A\u0000\uE543\uE4B9\uF06E\u0000\u0000"+
- "\u0000\uEFAB\u0000\u0000\uEBE1\uE4CF\uF598\u0000"+
- "\uF050\uEBCF\u0000\uE14A\u0000\u0000\u0000\u0000"+
- "\u0000\uF27A\u0000\u0000\u0000\uF374\uF4B4\uE57E"+
- "\u0000\u0000\uF450\u0000\u0000\uF3E5\u0000\uF553"+
- "\uEB64\u0000\uF0B6\u0000\uE6A1\uE0E8\u0000\uF7AD"+
- "\uEFAD\uE774\uF843\uEC55\uF94D\u0000\u0000\uF154"+
- "\uE741\u0000\uE93B\u0000\u0000\u0000\u0000\uE5A4"+
- "\u0000\uF0E9\u0000\u0000\u0000\uEF4B\u0000\u0000"+
- "\u0000\uE767\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF8AE\uE3E1\u0000\u0000\uE8C0\u0000"+
- "\uF5BE\u0000\uEA99\u0000\u0000\u0000\u0000\uE09D"+
- "\uF6C6\uE2C8\u0000\u0000\u0000\uEBD0\u0000\u0000"+
- "\uF260\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEFF4\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE296\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE5CD\u0000"+
- "\u0000\uE2DB\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE9BB\u0000\u0000\u0000\u0000\uE23C\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEFE8\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE544\u0000\u0000"+
- "\u0000\u0000\uED57\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF5DB\u0000\u0000\uF851\u0000\u0000"+
- "\u0000\uEA39\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE59A"+
- "\u0000\u0000\u0000\u0000\u0000\uF2F7\u0000\u0000"+
- "\u0000\u0000\uE4B3\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF0B7\uF2F8\uF5DC\uF1CC\uE8D5\uF3CF\u0000"+
- "\u0000\u0000\uF3D0\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF5B2\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE7AE\uE5AC\u0000\uEC56\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF9A3\u0000\uF8E5"+
- "\uEAAB\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEC97"+
- "\u0000\uF63D\u0000\uF5B3\u0000\uF345\u0000\u0000"+
- "\u0000\u0000\uEBA5\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF5DD\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF132\uF1FD\u0000\uF5B4\uF8B8"+
- "\u0000\uE8A3\u0000\u0000\uE65A\uE0D9\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEDD4\u0000\u0000\u0000\u0000\u0000\u0000\uF4FA"+
- "\u0000\uF0B8\u0000\uEB47\uE6EC\uF3EC\uEDAF\uE5E1"+
- "\uE6ED\uE3D1\u0000\u0000\u0000\u0000\u0000\uEBF2"+
- "\uF2F9\u0000\u0000\u0000\uE9BC\uF66C\u0000\u0000"+
- "\u0000\u0000\u0000\uF375\u0000\u0000\u0000\uF554"+
- "\u0000\u0000\uEFE9\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF4FB\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE591\u0000\u0000"+
- "\uE132\uF6FE\uEABC\u0000\u0000\u0000\u0000\uF0CD"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE347\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE652\u0000\u0000\u0000"+
- "\u0000\u0000\uEF3D\u0000\u0000\u0000\u0000\uF2AF"+
- "\uE0A5\u0000\u0000\u0000\u0000\uE0E9\u0000\u0000"+
- "\u0000\uF878\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE156"+
- "\u0000\u0000\u0000\uEE77\u0000\u0000\uF057\u0000"+
- "\u0000\u0000\uE8A4\u0000\uE2C9\uEC9E\uF2FA\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF0DE\u0000\u0000\uF5C8\u0000\uE56E\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEB65\u0000\uF2B0\u0000\u0000\uEC57\u0000"+
- "\uE7AF\u0000\u0000\u0000\uF7E7\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEEE5\u0000\u0000\uE2CA\uEBD1"+
- "\u0000\uEC58\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF2FB\u0000\u0000\uF89B"+
- "\u0000\u0000\uE994\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEB37\u0000\u0000\u0000"+
- "\u0000\u0000\uF778\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE0EA\u0000\u0000\u0000\uE0BC\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE672\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF5DE\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF5DF\u0000\uF246\u0000\u0000\u0000\uEC98\uE4CA"+
- "\uF2FC\uE3C4\uF2B1\u0000\uE3C5\u0000\uE36E\u0000"+
- "\uE7E1\u0000\u0000\uEB48\u0000\u0000\uE1D1\uF4B9"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEECC\u0000\uE638\uE237\u0000\uE545\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uED58\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE4B4\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF0B9\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE0F5\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF66D\u0000\uF3A3\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE157\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEFCA\u0000\uEBF0\u0000"+
- "\u0000\u0000\uF5E0\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF8AF\u0000\u0000\u0000\uE0D1"+
- "\u0000\u0000\u0000\u0000\uF8E0\uF475\u0000\u0000"+
- "\uF192\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF37C\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF27B\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEFCB\u0000"+
- "\u0000\uE192\u0000\u0000\uE6AF\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF4A1\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF997\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF3A4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEB66\u0000\u0000"+
- "\u0000\u0000\u0000\uF2B2\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF561\u0000\u0000"+
- "\uF6A1\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF3D1\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE09E\uE09F\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE25E\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF4C8\u0000\uF4BA"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1FE"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE836\u0000\u0000\uEB7C\u0000\u0000\u0000\u0000"+
- "\u0000\uF75D\u0000\uE0D2\u0000\u0000\u0000\uF0CE"+
- "\u0000\uF7D8\uF7D9\uE070\uE85A\u0000\u0000\u0000"+
- "\uE0A6\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE058\uF7EE\uE8EC\u0000\u0000"+
- "\uE341\u0000\u0000\u0000\u0000\uE5EF\u0000\u0000"+
- "\u0000\uEE95\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEEA2\uED69\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED71"+
- "\u0000\u0000\uF954\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF7EF\uE2F4\uF6E6\u0000"+
- "\u0000\u0000\u0000\u0000\uE24C\u0000\u0000\u0000"+
- "\u0000\uF555\uE933\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE9BD\u0000\u0000\u0000"+
- "\u0000\uF556\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF731\u0000\u0000\u0000\uEF66\u0000"+
- "\u0000\u0000\uE8C1\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF376\u0000\u0000\u0000\uED49"+
- "\uF67D\u0000\uF7AE\u0000\uE9BE\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE6B0\uE778\uE0BD\u0000\u0000"+
- "\uF7DA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF75E\uF7F0\uEB7D\uECB3\uF543"+
- "\u0000\u0000\uF052\uF476\uF346\u0000\u0000\u0000"+
- "\u0000\u0000\uE8D6\u0000\u0000\u0000\u0000\u0000"+
- "\uF0E4\u0000\u0000\uF477\u0000\uE6D5\uE546\uF7E8"+
- "\uE6C1\u0000\u0000\u0000\u0000\uEDD5\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEFEA\uE6CC\u0000"+
- "\u0000\u0000\uE4E9\uEC59\u0000\uF96B\uE1AD\u0000"+
- "\u0000\u0000\u0000\u0000\uE140\uF032\u0000\u0000"+
- "\uED98\uE350\u0000\uF347\uF231\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE6F6\u0000\u0000\u0000\uEC5A"+
- "\uEC5B\u0000\uF85F\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF0DF\u0000\u0000\u0000\u0000\u0000\uE65B"+
- "\u0000\u0000\u0000\uF544\u0000\u0000\u0000\u0000"+
- "\uF1CD\uED62\u0000\u0000\uF039\uED4A\uF4A2\uE1D2"+
- "\u0000\uF65B\u0000\uF3E6\uF1C1\uEF4C\uF261\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF377\uEC5C\u0000"+
- "\u0000\uED3A\u0000\uF5E1\uF1DA\u0000\u0000\u0000"+
- "\u0000\u0000\uE6EE\uE3F1\u0000\u0000\u0000\u0000"+
- "\uEFEB\uEFEC\uEB74\u0000\u0000\u0000\u0000\uE837"+
- "\uE9D4\u0000\uF033\u0000\u0000\u0000\uE653\uE696"+
- "\u0000\uE86F\u0000\uF2B3\u0000\u0000\u0000\u0000"+
- "\uEC5D\u0000\u0000\u0000\u0000\u0000\uF2FD\uF478"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF2C5\u0000\uEEE7\u0000\u0000\uE6FD\u0000"+
- "\u0000\uEECE\u0000\u0000\uEADC\u0000\uF7C7\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7F6"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEAAC\u0000\uE66A\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE934\u0000\u0000\u0000\uF348\u0000\u0000"+
- "\u0000\u0000\uE5FA\u0000\uED99\u0000\u0000\u0000"+
- "\uE654\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF57C\u0000\u0000\u0000\u0000\uF2FE\u0000"+
- "\u0000\u0000\u0000\u0000\uF331\u0000\uEA3A\u0000"+
- "\u0000\uE84C\uE79E\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF864\u0000\u0000\u0000\uF175\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF938\u0000\u0000\uF176"+
- "\u0000\u0000\uE75B\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF8B9\u0000\uED63\u0000\uE1F9"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE2D3\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE07A\u0000\u0000\uE2D4\u0000\uF74D\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF557\u0000"+
- "\u0000\u0000\u0000\uF06F\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF7DB\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE547\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF0E5\u0000\u0000\uEBD2\u0000"+
- "\u0000\u0000\u0000\uF034\u0000\u0000\u0000\uF852"+
- "\uF8E1\uF87D\uF332\uE193\u0000\uF833\uEC99\u0000"+
- "\uEC5E\u0000\uEFF5\u0000\uEBEB\u0000\u0000\u0000"+
- "\uEEE8\uEF67\uE89A\uE55B\u0000\u0000\u0000\uF6F6"+
- "\uE655\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE579\u0000\u0000"+
- "\uF89C\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE194\uF6DD\u0000\uEA4A\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE238\u0000"+
- "\u0000\u0000\u0000\u0000\uF349\uEDA0\uED59\u0000"+
- "\u0000\u0000\u0000\u0000\uED64\u0000\u0000\u0000"+
- "\uF053\u0000\uF2B4\u0000\u0000\u0000\uE6BE\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF8E2\u0000\uE1D3"+
- "\u0000\u0000\u0000\uF2B5\u0000\u0000\u0000\uF879"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF7A6\u0000\u0000\u0000\u0000\u0000\u0000\uEABD"+
- "\u0000\uF6C7\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF79F\u0000\u0000\uF79E"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEA3B\uE8E8\u0000\u0000\uECDD"+
- "\u0000\uEBE2\uE3C6\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF660\uF0E6\uE89B"+
- "\u0000\u0000\u0000\u0000\uF157\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEA9A\uF779\uECDE\u0000"+
- "\u0000\u0000\u0000\uE297\u0000\u0000\u0000\u0000"+
- "\u0000\uF853\uEDD7\u0000\uF158\u0000\u0000\u0000"+
- "\uF4C9\u0000\u0000\uED4B\u0000\u0000\u0000\u0000"+
- "\uEE3E\u0000\u0000\u0000\u0000\u0000\uF2B6\u0000"+
- "\uE94F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE24D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE753\u0000\u0000"+
- "\u0000\uE35F\u0000\uE2FA\uF4CA\uEB67\u0000\u0000"+
- "\u0000\uE3C7\uEFAE\u0000\uEF4D\u0000\u0000\uF854"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEC5F\u0000"+
- "\u0000\uF855\u0000\u0000\u0000\uF7B8\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE970\u0000\u0000"+
- "\uF8B0\u0000\u0000\u0000\uE739\uEDDF\uF7A7\u0000"+
- "\u0000\uF67E\u0000\uF65C\uEC9A\u0000\u0000\u0000"+
- "\u0000\uF193\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE870\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF3D2\uE45C\uE2CB\u0000\u0000\uE04D\u0000\u0000"+
- "\u0000\uE9BF\u0000\u0000\u0000\uF691\u0000\uEA9B"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF844\u0000\u0000"+
- "\u0000\uE5AD\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3E7"+
- "\u0000\uEA4E\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE950\u0000\u0000\u0000\u0000\u0000\uE3C8\uE3C9"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF74E\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE0F6\u0000\u0000\u0000\u0000"+
- "\uE59B\u0000\u0000\u0000\u0000\u0000\uF5E2\uEBD3"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE779\u0000\u0000\uF7A0\u0000\uE2CC\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF9A4\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE298\u0000\uF860"+
- "\u0000\u0000\uE195\uEE4E\u0000\u0000\u0000\uF63E"+
- "\u0000\u0000\uE5F0\u0000\u0000\uE3CA\u0000\u0000"+
- "\u0000\uF94E\uE5F1\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE1E9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF845\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEC60\uF599\u0000\u0000\u0000"+
- "\uE1D4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEEA3\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE8A5\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEC61\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6A2"+
- "\u0000\u0000\uF6E3\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF036\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE331\u0000\u0000\u0000"+
- "\u0000\uE26A\uF8EB\uE8A6\uE8DE\uE775\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF070"+
- "\u0000\u0000\u0000\u0000\uE73A\u0000\u0000\u0000"+
- "\u0000\u0000\uEDE0\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE66B"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF2C6\u0000"+
- "\u0000\uF77A\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED65"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE299\u0000\u0000\uEB68\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE6EF\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF57D\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE1E6\u0000\u0000\u0000"+
- "\uE196\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF5E3\u0000\u0000"+
- "\uED5A\u0000\uE971\u0000\u0000\uF7C8\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF94F\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEF37\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE754\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0BE"+
- "\u0000\uE93E\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6F7"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF378\u0000\uE9C0"+
- "\u0000\uE2CD\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE995\uE7B0\u0000\uEE79\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
- private final static String innerIndex6=
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uED4C\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF054\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uED7C\u0000"+
- "\uED75\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF8F8\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE14B\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uED4D\u0000\u0000"+
- "\uE1DC\uE7F7\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE9DF\u0000\u0000\u0000"+
- "\u0000\u0000\uF1CE\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE7D0\u0000\u0000\u0000\u0000\u0000\uEDA3"+
- "\u0000\u0000\u0000\u0000\uF7CD\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE1AE\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2CE"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF63F\u0000\u0000\u0000\u0000\u0000"+
- "\uF9D3\uF0ED\uE66C\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEDA4\u0000\u0000\u0000\uE5B6\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE66D\u0000\u0000"+
- "\u0000\uF7E9\u0000\u0000\u0000\uEEA4\u0000\uE673"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE3CB\uE674\u0000\u0000\u0000\uE5F2"+
- "\u0000\u0000\u0000\u0000\u0000\uEA9C\u0000\uE6F8"+
- "\u0000\u0000\u0000\u0000\u0000\uE77A\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE2D5\uE79F\u0000\u0000"+
- "\u0000\u0000\u0000\uE73B\u0000\u0000\uF9CB\u0000"+
- "\u0000\u0000\u0000\uF96C\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEB38\uE5F3\u0000"+
- "\u0000\uF9D9\u0000\u0000\uE133\u0000\u0000\u0000"+
- "\uE7F9\u0000\u0000\uE4EA\uF5F5\u0000\uF2C7\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE4DA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE84D\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEF38"+
- "\uE93F\u0000\u0000\u0000\u0000\u0000\uF333\u0000"+
- "\u0000\u0000\u0000\uE1D5\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEB39\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEA3C\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF34A\uF241\u0000\u0000\uF242\u0000"+
- "\u0000\u0000\uF65D\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF262"+
- "\u0000\uE656\u0000\u0000\u0000\u0000\u0000\uEB75"+
- "\u0000\u0000\uF4BB\u0000\uEDE1\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED5B"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE6A3\u0000\u0000"+
- "\uE8C2\u0000\u0000\u0000\u0000\uE0A0\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE2CF\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u8861\u8862\u8863\u8864\u8865\u8866\u8867\u8868"+
- "\u8869\u886A\u886B\u886C\u886D\u886E\u886F\u8870"+
- "\u8871\u8873\u8874\u8875\u8876\u8877\u8878\u8879"+
- "\u887A\u887B\u887C\u887D\u8881\u8882\u8883\u8884"+
- "\u8885\u8886\u8887\u8888\u8889\u888A\u888B\u888C"+
- "\u888D\u888E\u888F\u8890\u8891\u8893\u8894\u8895"+
- "\u8896\u8897\u8898\u8899\u889A\u889B\u889C\u889D"+
- "\u88A1\u88A2\u88A3\u88A4\u88A5\u88A6\u88A7\u88A8"+
- "\u88A9\u88AA\u88AB\u88AC\u88AD\u88AE\u88AF\u88B0"+
- "\u88B1\u88B3\u88B4\u88B5\u88B6\u88B7\u88B8\u88B9"+
- "\u88BA\u88BB\u88BC\u88BD\u88C1\u88C2\u88C3\u88C4"+
- "\u88C5\u88C6\u88C7\u88C8\u88C9\u88CA\u88CB\u88CC"+
- "\u88CD\u88CE\u88CF\u88D0\u88D1\u88D3\u88D4\u88D5"+
- "\u88D6\u88D7\u88D8\u88D9\u88DA\u88DB\u88DC\u88DD"+
- "\u88E1\u88E2\u88E3\u88E4\u88E5\u88E6\u88E7\u88E8"+
- "\u88E9\u88EA\u88EB\u88EC\u88ED\u88EE\u88EF\u88F0"+
- "\u88F1\u88F3\u88F4\u88F5\u88F6\u88F7\u88F8\u88F9"+
- "\u88FA\u88FB\u88FC\u88FD\u8941\u8942\u8943\u8944"+
- "\u8945\u8946\u8947\u8948\u8949\u894A\u894B\u894C"+
- "\u894D\u894E\u894F\u8950\u8951\u8953\u8954\u8955"+
- "\u8956\u8957\u8958\u8959\u895A\u895B\u895C\u895D"+
- "\u8961\u8962\u8963\u8964\u8965\u8966\u8967\u8968"+
- "\u8969\u896A\u896B\u896C\u896D\u896E\u896F\u8970"+
- "\u8971\u8973\u8974\u8975\u8976\u8977\u8978\u8979"+
- "\u897A\u897B\u897C\u897D\u8981\u8982\u8983\u8984"+
- "\u8985\u8986\u8987\u8988\u8989\u898A\u898B\u898C"+
- "\u898D\u898E\u898F\u8990\u8991\u8993\u8994\u8995"+
- "\u8996\u8997\u8998\u8999\u899A\u899B\u899C\u899D"+
- "\u89A1\u89A2\u89A3\u89A4\u89A5\u89A6\u89A7\u89A8"+
- "\u89A9\u89AA\u89AB\u89AC\u89AD\u89AE\u89AF\u89B0"+
- "\u89B1\u89B3\u89B4\u89B5\u89B6\u89B7\u89B8\u89B9"+
- "\u89BA\u89BB\u89BC\u89BD\u89C1\u89C2\u89C3\u89C4"+
- "\u89C5\u89C6\u89C7\u89C8\u89C9\u89CA\u89CB\u89CC"+
- "\u89CD\u89CE\u89CF\u89D0\u89D1\u89D3\u89D4\u89D5"+
- "\u89D6\u89D7\u89D8\u89D9\u89DA\u89DB\u89DC\u89DD"+
- "\u89E1\u89E2\u89E3\u89E4\u89E5\u89E6\u89E7\u89E8"+
- "\u89E9\u89EA\u89EB\u89EC\u89ED\u89EE\u89EF\u89F0"+
- "\u89F1\u89F3\u89F4\u89F5\u89F6\u89F7\u89F8\u89F9"+
- "\u89FA\u89FB\u89FC\u89FD\u8A41\u8A42\u8A43\u8A44"+
- "\u8A45\u8A46\u8A47\u8A48\u8A49\u8A4A\u8A4B\u8A4C"+
- "\u8A4D\u8A4E\u8A4F\u8A50\u8A51\u8A53\u8A54\u8A55"+
- "\u8A56\u8A57\u8A58\u8A59\u8A5A\u8A5B\u8A5C\u8A5D"+
- "\u8A61\u8A62\u8A63\u8A64\u8A65\u8A66\u8A67\u8A68"+
- "\u8A69\u8A6A\u8A6B\u8A6C\u8A6D\u8A6E\u8A6F\u8A70"+
- "\u8A71\u8A73\u8A74\u8A75\u8A76\u8A77\u8A78\u8A79"+
- "\u8A7A\u8A7B\u8A7C\u8A7D\u8A81\u8A82\u8A83\u8A84"+
- "\u8A85\u8A86\u8A87\u8A88\u8A89\u8A8A\u8A8B\u8A8C"+
- "\u8A8D\u8A8E\u8A8F\u8A90\u8A91\u8A93\u8A94\u8A95"+
- "\u8A96\u8A97\u8A98\u8A99\u8A9A\u8A9B\u8A9C\u8A9D"+
- "\u8AA1\u8AA2\u8AA3\u8AA4\u8AA5\u8AA6\u8AA7\u8AA8"+
- "\u8AA9\u8AAA\u8AAB\u8AAC\u8AAD\u8AAE\u8AAF\u8AB0"+
- "\u8AB1\u8AB3\u8AB4\u8AB5\u8AB6\u8AB7\u8AB8\u8AB9"+
- "\u8ABA\u8ABB\u8ABC\u8ABD\u8AC1\u8AC2\u8AC3\u8AC4"+
- "\u8AC5\u8AC6\u8AC7\u8AC8\u8AC9\u8ACA\u8ACB\u8ACC"+
- "\u8ACD\u8ACE\u8ACF\u8AD0\u8AD1\u8AD3\u8AD4\u8AD5"+
- "\u8AD6\u8AD7\u8AD8\u8AD9\u8ADA\u8ADB\u8ADC\u8ADD"+
- "\u8AE1\u8AE2\u8AE3\u8AE4\u8AE5\u8AE6\u8AE7\u8AE8"+
- "\u8AE9\u8AEA\u8AEB\u8AEC\u8AED\u8AEE\u8AEF\u8AF0"+
- "\u8AF1\u8AF3\u8AF4\u8AF5\u8AF6\u8AF7\u8AF8\u8AF9"+
- "\u8AFA\u8AFB\u8AFC\u8AFD\u8B41\u8B42\u8B43\u8B44"+
- "\u8B45\u8B46\u8B47\u8B48\u8B49\u8B4A\u8B4B\u8B4C"+
- "\u8B4D\u8B4E\u8B4F\u8B50\u8B51\u8B53\u8B54\u8B55"+
- "\u8B56\u8B57\u8B58\u8B59\u8B5A\u8B5B\u8B5C\u8B5D"+
- "\u8B61\u8B62\u8B63\u8B64\u8B65\u8B66\u8B67\u8B68"+
- "\u8B69\u8B6A\u8B6B\u8B6C\u8B6D\u8B6E\u8B6F\u8B70"+
- "\u8B71\u8B73\u8B74\u8B75\u8B76\u8B77\u8B78\u8B79"+
- "\u8B7A\u8B7B\u8B7C\u8B7D\u8B81\u8B82\u8B83\u8B84"+
- "\u8B85\u8B86\u8B87\u8B88\u8B89\u8B8A\u8B8B\u8B8C"+
- "\u8B8D\u8B8E\u8B8F\u8B90\u8B91\u8B93\u8B94\u8B95"+
- "\u8B96\u8B97\u8B98\u8B99\u8B9A\u8B9B\u8B9C\u8B9D"+
- "\u8BA1\u8BA2\u8BA3\u8BA4\u8BA5\u8BA6\u8BA7\u8BA8"+
- "\u8BA9\u8BAA\u8BAB\u8BAC\u8BAD\u8BAE\u8BAF\u8BB0"+
- "\u8BB1\u8BB3\u8BB4\u8BB5\u8BB6\u8BB7\u8BB8\u8BB9"+
- "\u8BBA\u8BBB\u8BBC\u8BBD\u8C61\u8C62\u8C63\u8C64"+
- "\u8C65\u8C66\u8C67\u8C68\u8C69\u8C6A\u8C6B\u8C6C"+
- "\u8C6D\u8C6E\u8C6F\u8C70\u8C71\u8C73\u8C74\u8C75"+
- "\u8C76\u8C77\u8C78\u8C79\u8C7A\u8C7B\u8C7C\u8C7D"+
- "\u8C81\u8C82\u8C83\u8C84\u8C85\u8C86\u8C87\u8C88"+
- "\u8C89\u8C8A\u8C8B\u8C8C\u8C8D\u8C8E\u8C8F\u8C90"+
- "\u8C91\u8C93\u8C94\u8C95\u8C96\u8C97\u8C98\u8C99"+
- "\u8C9A\u8C9B\u8C9C\u8C9D\u8CA1\u8CA2\u8CA3\u8CA4"+
- "\u8CA5\u8CA6\u8CA7\u8CA8\u8CA9\u8CAA\u8CAB\u8CAC"+
- "\u8CAD\u8CAE\u8CAF\u8CB0\u8CB1\u8CB3\u8CB4\u8CB5"+
- "\u8CB6\u8CB7\u8CB8\u8CB9\u8CBA\u8CBB\u8CBC\u8CBD"+
- "\u8CC1\u8CC2\u8CC3\u8CC4\u8CC5\u8CC6\u8CC7\u8CC8"+
- "\u8CC9\u8CCA\u8CCB\u8CCC\u8CCD\u8CCE\u8CCF\u8CD0"+
- "\u8CD1\u8CD3\u8CD4\u8CD5\u8CD6\u8CD7\u8CD8\u8CD9"+
- "\u8CDA\u8CDB\u8CDC\u8CDD\u8CE1\u8CE2\u8CE3\u8CE4"+
- "\u8CE5\u8CE6\u8CE7\u8CE8\u8CE9\u8CEA\u8CEB\u8CEC"+
- "\u8CED\u8CEE\u8CEF\u8CF0\u8CF1\u8CF3\u8CF4\u8CF5"+
- "\u8CF6\u8CF7\u8CF8\u8CF9\u8CFA\u8CFB\u8CFC\u8CFD"+
- "\u8D41\u8D42\u8D43\u8D44\u8D45\u8D46\u8D47\u8D48"+
- "\u8D49\u8D4A\u8D4B\u8D4C\u8D4D\u8D4E\u8D4F\u8D50"+
- "\u8D51\u8D53\u8D54\u8D55\u8D56\u8D57\u8D58\u8D59"+
- "\u8D5A\u8D5B\u8D5C\u8D5D\u8D61\u8D62\u8D63\u8D64"+
- "\u8D65\u8D66\u8D67\u8D68\u8D69\u8D6A\u8D6B\u8D6C"+
- "\u8D6D\u8D6E\u8D6F\u8D70\u8D71\u8D73\u8D74\u8D75"+
- "\u8D76\u8D77\u8D78\u8D79\u8D7A\u8D7B\u8D7C\u8D7D"+
- "\u8D81\u8D82\u8D83\u8D84\u8D85\u8D86\u8D87\u8D88"+
- "\u8D89\u8D8A\u8D8B\u8D8C\u8D8D\u8D8E\u8D8F\u8D90"+
- "\u8D91\u8D93\u8D94\u8D95\u8D96\u8D97\u8D98\u8D99"+
- "\u8D9A\u8D9B\u8D9C\u8D9D\u8DA1\u8DA2\u8DA3\u8DA4"+
- "\u8DA5\u8DA6\u8DA7\u8DA8\u8DA9\u8DAA\u8DAB\u8DAC"+
- "\u8DAD\u8DAE\u8DAF\u8DB0\u8DB1\u8DB3\u8DB4\u8DB5"+
- "\u8DB6\u8DB7\u8DB8\u8DB9\u8DBA\u8DBB\u8DBC\u8DBD"+
- "\u8DC1\u8DC2\u8DC3\u8DC4\u8DC5\u8DC6\u8DC7\u8DC8"+
- "\u8DC9\u8DCA\u8DCB\u8DCC\u8DCD\u8DCE\u8DCF\u8DD0"+
- "\u8DD1\u8DD3\u8DD4\u8DD5\u8DD6\u8DD7\u8DD8\u8DD9"+
- "\u8DDA\u8DDB\u8DDC\u8DDD\u8DE1\u8DE2\u8DE3\u8DE4"+
- "\u8DE5\u8DE6\u8DE7\u8DE8\u8DE9\u8DEA\u8DEB\u8DEC"+
- "\u8DED\u8DEE\u8DEF\u8DF0\u8DF1\u8DF3\u8DF4\u8DF5"+
- "\u8DF6\u8DF7\u8DF8\u8DF9\u8DFA\u8DFB\u8DFC\u8DFD"+
- "\u8E41\u8E42\u8E43\u8E44\u8E45\u8E46\u8E47\u8E48"+
- "\u8E49\u8E4A\u8E4B\u8E4C\u8E4D\u8E4E\u8E4F\u8E50"+
- "\u8E51\u8E53\u8E54\u8E55\u8E56\u8E57\u8E58\u8E59"+
- "\u8E5A\u8E5B\u8E5C\u8E5D\u8E61\u8E62\u8E63\u8E64"+
- "\u8E65\u8E66\u8E67\u8E68\u8E69\u8E6A\u8E6B\u8E6C"+
- "\u8E6D\u8E6E\u8E6F\u8E70\u8E71\u8E73\u8E74\u8E75"+
- "\u8E76\u8E77\u8E78\u8E79\u8E7A\u8E7B\u8E7C\u8E7D"+
- "\u8E81\u8E82\u8E83\u8E84\u8E85\u8E86\u8E87\u8E88"+
- "\u8E89\u8E8A\u8E8B\u8E8C\u8E8D\u8E8E\u8E8F\u8E90"+
- "\u8E91\u8E93\u8E94\u8E95\u8E96\u8E97\u8E98\u8E99"+
- "\u8E9A\u8E9B\u8E9C\u8E9D\u8EA1\u8EA2\u8EA3\u8EA4"+
- "\u8EA5\u8EA6\u8EA7\u8EA8\u8EA9\u8EAA\u8EAB\u8EAC"+
- "\u8EAD\u8EAE\u8EAF\u8EB0\u8EB1\u8EB3\u8EB4\u8EB5"+
- "\u8EB6\u8EB7\u8EB8\u8EB9\u8EBA\u8EBB\u8EBC\u8EBD"+
- "\u8EC1\u8EC2\u8EC3\u8EC4\u8EC5\u8EC6\u8EC7\u8EC8"+
- "\u8EC9\u8ECA\u8ECB\u8ECC\u8ECD\u8ECE\u8ECF\u8ED0"+
- "\u8ED1\u8ED3\u8ED4\u8ED5\u8ED6\u8ED7\u8ED8\u8ED9"+
- "\u8EDA\u8EDB\u8EDC\u8EDD\u8EE1\u8EE2\u8EE3\u8EE4"+
- "\u8EE5\u8EE6\u8EE7\u8EE8\u8EE9\u8EEA\u8EEB\u8EEC"+
- "\u8EED\u8EEE\u8EEF\u8EF0\u8EF1\u8EF3\u8EF4\u8EF5"+
- "\u8EF6\u8EF7\u8EF8\u8EF9\u8EFA\u8EFB\u8EFC\u8EFD"+
- "\u8F41\u8F42\u8F43\u8F44\u8F45\u8F46\u8F47\u8F48"+
- "\u8F49\u8F4A\u8F4B\u8F4C\u8F4D\u8F4E\u8F4F\u8F50"+
- "\u8F51\u8F53\u8F54\u8F55\u8F56\u8F57\u8F58\u8F59"+
- "\u8F5A\u8F5B\u8F5C\u8F5D\u8F61\u8F62\u8F63\u8F64"+
- "\u8F65\u8F66\u8F67\u8F68\u8F69\u8F6A\u8F6B\u8F6C"+
- "\u8F6D\u8F6E\u8F6F\u8F70\u8F71\u8F73\u8F74\u8F75"+
- "\u8F76\u8F77\u8F78\u8F79\u8F7A\u8F7B\u8F7C\u8F7D"+
- "\u8F81\u8F82\u8F83\u8F84\u8F85\u8F86\u8F87\u8F88"+
- "\u8F89\u8F8A\u8F8B\u8F8C\u8F8D\u8F8E\u8F8F\u8F90"+
- "\u8F91\u8F93\u8F94\u8F95\u8F96\u8F97\u8F98\u8F99"+
- "\u8F9A\u8F9B\u8F9C\u8F9D\u8FA1\u8FA2\u8FA3\u8FA4"+
- "\u8FA5\u8FA6\u8FA7\u8FA8\u8FA9\u8FAA\u8FAB\u8FAC"+
- "\u8FAD\u8FAE\u8FAF\u8FB0\u8FB1\u8FB3\u8FB4\u8FB5"+
- "\u8FB6\u8FB7\u8FB8\u8FB9\u8FBA\u8FBB\u8FBC\u8FBD"+
- "\u9061\u9062\u9063\u9064\u9065\u9066\u9067\u9068"+
- "\u9069\u906A\u906B\u906C\u906D\u906E\u906F\u9070"+
- "\u9071\u9073\u9074\u9075\u9076\u9077\u9078\u9079"+
- "\u907A\u907B\u907C\u907D\u9081\u9082\u9083\u9084"+
- "\u9085\u9086\u9087\u9088\u9089\u908A\u908B\u908C"+
- "\u908D\u908E\u908F\u9090\u9091\u9093\u9094\u9095"+
- "\u9096\u9097\u9098\u9099\u909A\u909B\u909C\u909D"+
- "\u90A1\u90A2\u90A3\u90A4\u90A5\u90A6\u90A7\u90A8"+
- "\u90A9\u90AA\u90AB\u90AC\u90AD\u90AE\u90AF\u90B0"+
- "\u90B1\u90B3\u90B4\u90B5\u90B6\u90B7\u90B8\u90B9"+
- "\u90BA\u90BB\u90BC\u90BD\u90C1\u90C2\u90C3\u90C4"+
- "\u90C5\u90C6\u90C7\u90C8\u90C9\u90CA\u90CB\u90CC"+
- "\u90CD\u90CE\u90CF\u90D0\u90D1\u90D3\u90D4\u90D5"+
- "\u90D6\u90D7\u90D8\u90D9\u90DA\u90DB\u90DC\u90DD"+
- "\u90E1\u90E2\u90E3\u90E4\u90E5\u90E6\u90E7\u90E8"+
- "\u90E9\u90EA\u90EB\u90EC\u90ED\u90EE\u90EF\u90F0"+
- "\u90F1\u90F3\u90F4\u90F5\u90F6\u90F7\u90F8\u90F9"+
- "\u90FA\u90FB\u90FC\u90FD\u9141\u9142\u9143\u9144"+
- "\u9145\u9146\u9147\u9148\u9149\u914A\u914B\u914C"+
- "\u914D\u914E\u914F\u9150\u9151\u9153\u9154\u9155"+
- "\u9156\u9157\u9158\u9159\u915A\u915B\u915C\u915D"+
- "\u9161\u9162\u9163\u9164\u9165\u9166\u9167\u9168"+
- "\u9169\u916A\u916B\u916C\u916D\u916E\u916F\u9170"+
- "\u9171\u9173\u9174\u9175\u9176\u9177\u9178\u9179"+
- "\u917A\u917B\u917C\u917D\u9181\u9182\u9183\u9184"+
- "\u9185\u9186\u9187\u9188\u9189\u918A\u918B\u918C"+
- "\u918D\u918E\u918F\u9190\u9191\u9193\u9194\u9195"+
- "\u9196\u9197\u9198\u9199\u919A\u919B\u919C\u919D"+
- "\u91A1\u91A2\u91A3\u91A4\u91A5\u91A6\u91A7\u91A8"+
- "\u91A9\u91AA\u91AB\u91AC\u91AD\u91AE\u91AF\u91B0"+
- "\u91B1\u91B3\u91B4\u91B5\u91B6\u91B7\u91B8\u91B9"+
- "\u91BA\u91BB\u91BC\u91BD\u91C1\u91C2\u91C3\u91C4"+
- "\u91C5\u91C6\u91C7\u91C8\u91C9\u91CA\u91CB\u91CC"+
- "\u91CD\u91CE\u91CF\u91D0\u91D1\u91D3\u91D4\u91D5"+
- "\u91D6\u91D7\u91D8\u91D9\u91DA\u91DB\u91DC\u91DD"+
- "\u91E1\u91E2\u91E3\u91E4\u91E5\u91E6\u91E7\u91E8"+
- "\u91E9\u91EA\u91EB\u91EC\u91ED\u91EE\u91EF\u91F0"+
- "\u91F1\u91F3\u91F4\u91F5\u91F6\u91F7\u91F8\u91F9"+
- "\u91FA\u91FB\u91FC\u91FD\u9241\u9242\u9243\u9244"+
- "\u9245\u9246\u9247\u9248\u9249\u924A\u924B\u924C"+
- "\u924D\u924E\u924F\u9250\u9251\u9253\u9254\u9255"+
- "\u9256\u9257\u9258\u9259\u925A\u925B\u925C\u925D"+
- "\u9261\u9262\u9263\u9264\u9265\u9266\u9267\u9268"+
- "\u9269\u926A\u926B\u926C\u926D\u926E\u926F\u9270"+
- "\u9271\u9273\u9274\u9275\u9276\u9277\u9278\u9279"+
- "\u927A\u927B\u927C\u927D\u9281\u9282\u9283\u9284"+
- "\u9285\u9286\u9287\u9288\u9289\u928A\u928B\u928C"+
- "\u928D\u928E\u928F\u9290\u9291\u9293\u9294\u9295"+
- "\u9296\u9297\u9298\u9299\u929A\u929B\u929C\u929D"+
- "\u92A1\u92A2\u92A3\u92A4\u92A5\u92A6\u92A7\u92A8"+
- "\u92A9\u92AA\u92AB\u92AC\u92AD\u92AE\u92AF\u92B0"+
- "\u92B1\u92B3\u92B4\u92B5\u92B6\u92B7\u92B8\u92B9"+
- "\u92BA\u92BB\u92BC\u92BD\u92C1\u92C2\u92C3\u92C4"+
- "\u92C5\u92C6\u92C7\u92C8\u92C9\u92CA\u92CB\u92CC"+
- "\u92CD\u92CE\u92CF\u92D0\u92D1\u92D3\u92D4\u92D5"+
- "\u92D6\u92D7\u92D8\u92D9\u92DA\u92DB\u92DC\u92DD"+
- "\u92E1\u92E2\u92E3\u92E4\u92E5\u92E6\u92E7\u92E8"+
- "\u92E9\u92EA\u92EB\u92EC\u92ED\u92EE\u92EF\u92F0"+
- "\u92F1\u92F3\u92F4\u92F5\u92F6\u92F7\u92F8\u92F9"+
- "\u92FA\u92FB\u92FC\u92FD\u9341\u9342\u9343\u9344"+
- "\u9345\u9346\u9347\u9348\u9349\u934A\u934B\u934C"+
- "\u934D\u934E\u934F\u9350\u9351\u9353\u9354\u9355"+
- "\u9356\u9357\u9358\u9359\u935A\u935B\u935C\u935D"+
- "\u9361\u9362\u9363\u9364\u9365\u9366\u9367\u9368"+
- "\u9369\u936A\u936B\u936C\u936D\u936E\u936F\u9370"+
- "\u9371\u9373\u9374\u9375\u9376\u9377\u9378\u9379"+
- "\u937A\u937B\u937C\u937D\u9381\u9382\u9383\u9384"+
- "\u9385\u9386\u9387\u9388\u9389\u938A\u938B\u938C"+
- "\u938D\u938E\u938F\u9390\u9391\u9393\u9394\u9395"+
- "\u9396\u9397\u9398\u9399\u939A\u939B\u939C\u939D"+
- "\u93A1\u93A2\u93A3\u93A4\u93A5\u93A6\u93A7\u93A8"+
- "\u93A9\u93AA\u93AB\u93AC\u93AD\u93AE\u93AF\u93B0"+
- "\u93B1\u93B3\u93B4\u93B5\u93B6\u93B7\u93B8\u93B9"+
- "\u93BA\u93BB\u93BC\u93BD\u9461\u9462\u9463\u9464"+
- "\u9465\u9466\u9467\u9468\u9469\u946A\u946B\u946C"+
- "\u946D\u946E\u946F\u9470\u9471\u9473\u9474\u9475"+
- "\u9476\u9477\u9478\u9479\u947A\u947B\u947C\u947D"+
- "\u9481\u9482\u9483\u9484\u9485\u9486\u9487\u9488"+
- "\u9489\u948A\u948B\u948C\u948D\u948E\u948F\u9490"+
- "\u9491\u9493\u9494\u9495\u9496\u9497\u9498\u9499"+
- "\u949A\u949B\u949C\u949D\u94A1\u94A2\u94A3\u94A4"+
- "\u94A5\u94A6\u94A7\u94A8\u94A9\u94AA\u94AB\u94AC"+
- "\u94AD\u94AE\u94AF\u94B0\u94B1\u94B3\u94B4\u94B5"+
- "\u94B6\u94B7\u94B8\u94B9\u94BA\u94BB\u94BC\u94BD"+
- "\u94C1\u94C2\u94C3\u94C4\u94C5\u94C6\u94C7\u94C8"+
- "\u94C9\u94CA\u94CB\u94CC\u94CD\u94CE\u94CF\u94D0"+
- "\u94D1\u94D3\u94D4\u94D5\u94D6\u94D7\u94D8\u94D9"+
- "\u94DA\u94DB\u94DC\u94DD\u94E1\u94E2\u94E3\u94E4"+
- "\u94E5\u94E6\u94E7\u94E8\u94E9\u94EA\u94EB\u94EC"+
- "\u94ED\u94EE\u94EF\u94F0\u94F1\u94F3\u94F4\u94F5"+
- "\u94F6\u94F7\u94F8\u94F9\u94FA\u94FB\u94FC\u94FD"+
- "\u9541\u9542\u9543\u9544\u9545\u9546\u9547\u9548"+
- "\u9549\u954A\u954B\u954C\u954D\u954E\u954F\u9550"+
- "\u9551\u9553\u9554\u9555\u9556\u9557\u9558\u9559"+
- "\u955A\u955B\u955C\u955D\u9561\u9562\u9563\u9564"+
- "\u9565\u9566\u9567\u9568\u9569\u956A\u956B\u956C"+
- "\u956D\u956E\u956F\u9570\u9571\u9573\u9574\u9575"+
- "\u9576\u9577\u9578\u9579\u957A\u957B\u957C\u957D"+
- "\u9581\u9582\u9583\u9584\u9585\u9586\u9587\u9588"+
- "\u9589\u958A\u958B\u958C\u958D\u958E\u958F\u9590"+
- "\u9591\u9593\u9594\u9595\u9596\u9597\u9598\u9599"+
- "\u959A\u959B\u959C\u959D\u95A1\u95A2\u95A3\u95A4"+
- "\u95A5\u95A6\u95A7\u95A8\u95A9\u95AA\u95AB\u95AC"+
- "\u95AD\u95AE\u95AF\u95B0\u95B1\u95B3\u95B4\u95B5"+
- "\u95B6\u95B7\u95B8\u95B9\u95BA\u95BB\u95BC\u95BD"+
- "\u95C1\u95C2\u95C3\u95C4\u95C5\u95C6\u95C7\u95C8"+
- "\u95C9\u95CA\u95CB\u95CC\u95CD\u95CE\u95CF\u95D0"+
- "\u95D1\u95D3\u95D4\u95D5\u95D6\u95D7\u95D8\u95D9"+
- "\u95DA\u95DB\u95DC\u95DD\u95E1\u95E2\u95E3\u95E4"+
- "\u95E5\u95E6\u95E7\u95E8\u95E9\u95EA\u95EB\u95EC"+
- "\u95ED\u95EE\u95EF\u95F0\u95F1\u95F3\u95F4\u95F5"+
- "\u95F6\u95F7\u95F8\u95F9\u95FA\u95FB\u95FC\u95FD"+
- "\u9641\u9642\u9643\u9644\u9645\u9646\u9647\u9648"+
- "\u9649\u964A\u964B\u964C\u964D\u964E\u964F\u9650"+
- "\u9651\u9653\u9654\u9655\u9656\u9657\u9658\u9659"+
- "\u965A\u965B\u965C\u965D\u9661\u9662\u9663\u9664"+
- "\u9665\u9666\u9667\u9668\u9669\u966A\u966B\u966C"+
- "\u966D\u966E\u966F\u9670\u9671\u9673\u9674\u9675"+
- "\u9676\u9677\u9678\u9679\u967A\u967B\u967C\u967D"+
- "\u9681\u9682\u9683\u9684\u9685\u9686\u9687\u9688"+
- "\u9689\u968A\u968B\u968C\u968D\u968E\u968F\u9690"+
- "\u9691\u9693\u9694\u9695\u9696\u9697\u9698\u9699"+
- "\u969A\u969B\u969C\u969D\u96A1\u96A2\u96A3\u96A4"+
- "\u96A5\u96A6\u96A7\u96A8\u96A9\u96AA\u96AB\u96AC"+
- "\u96AD\u96AE\u96AF\u96B0\u96B1\u96B3\u96B4\u96B5"+
- "\u96B6\u96B7\u96B8\u96B9\u96BA\u96BB\u96BC\u96BD"+
- "\u96C1\u96C2\u96C3\u96C4\u96C5\u96C6\u96C7\u96C8"+
- "\u96C9\u96CA\u96CB\u96CC\u96CD\u96CE\u96CF\u96D0"+
- "\u96D1\u96D3\u96D4\u96D5\u96D6\u96D7\u96D8\u96D9"+
- "\u96DA\u96DB\u96DC\u96DD\u96E1\u96E2\u96E3\u96E4"+
- "\u96E5\u96E6\u96E7\u96E8\u96E9\u96EA\u96EB\u96EC"+
- "\u96ED\u96EE\u96EF\u96F0\u96F1\u96F3\u96F4\u96F5"+
- "\u96F6\u96F7\u96F8\u96F9\u96FA\u96FB\u96FC\u96FD"+
- "\u9741\u9742\u9743\u9744\u9745\u9746\u9747\u9748"+
- "\u9749\u974A\u974B\u974C\u974D\u974E\u974F\u9750"+
- "\u9751\u9753\u9754\u9755\u9756\u9757\u9758\u9759"+
- "\u975A\u975B\u975C\u975D\u9761\u9762\u9763\u9764"+
- "\u9765\u9766\u9767\u9768\u9769\u976A\u976B\u976C"+
- "\u976D\u976E\u976F\u9770\u9771\u9773\u9774\u9775"+
- "\u9776\u9777\u9778\u9779\u977A\u977B\u977C\u977D"+
- "\u9781\u9782\u9783\u9784\u9785\u9786\u9787\u9788"+
- "\u9789\u978A\u978B\u978C\u978D\u978E\u978F\u9790"+
- "\u9791\u9793\u9794\u9795\u9796\u9797\u9798\u9799"+
- "\u979A\u979B\u979C\u979D\u97A1\u97A2\u97A3\u97A4"+
- "\u97A5\u97A6\u97A7\u97A8\u97A9\u97AA\u97AB\u97AC"+
- "\u97AD\u97AE\u97AF\u97B0\u97B1\u97B3\u97B4\u97B5"+
- "\u97B6\u97B7\u97B8\u97B9\u97BA\u97BB\u97BC\u97BD"+
- "\u9861\u9862\u9863\u9864\u9865\u9866\u9867\u9868"+
- "\u9869\u986A\u986B\u986C\u986D\u986E\u986F\u9870"+
- "\u9871\u9873\u9874\u9875\u9876\u9877\u9878\u9879"+
- "\u987A\u987B\u987C\u987D\u9881\u9882\u9883\u9884"+
- "\u9885\u9886\u9887\u9888\u9889\u988A\u988B\u988C"+
- "\u988D\u988E\u988F\u9890\u9891\u9893\u9894\u9895"+
- "\u9896\u9897\u9898\u9899\u989A\u989B\u989C\u989D"+
- "\u98A1\u98A2\u98A3\u98A4\u98A5\u98A6\u98A7\u98A8"+
- "\u98A9\u98AA\u98AB\u98AC\u98AD\u98AE\u98AF\u98B0"+
- "\u98B1\u98B3\u98B4\u98B5\u98B6\u98B7\u98B8\u98B9"+
- "\u98BA\u98BB\u98BC\u98BD\u98C1\u98C2\u98C3\u98C4"+
- "\u98C5\u98C6\u98C7\u98C8\u98C9\u98CA\u98CB\u98CC"+
- "\u98CD\u98CE\u98CF\u98D0\u98D1\u98D3\u98D4\u98D5"+
- "\u98D6\u98D7\u98D8\u98D9\u98DA\u98DB\u98DC\u98DD"+
- "\u98E1\u98E2\u98E3\u98E4\u98E5\u98E6\u98E7\u98E8"+
- "\u98E9\u98EA\u98EB\u98EC\u98ED\u98EE\u98EF\u98F0"+
- "\u98F1\u98F3\u98F4\u98F5\u98F6\u98F7\u98F8\u98F9"+
- "\u98FA\u98FB\u98FC\u98FD\u9941\u9942\u9943\u9944"+
- "\u9945\u9946\u9947\u9948\u9949\u994A\u994B\u994C"+
- "\u994D\u994E\u994F\u9950\u9951\u9953\u9954\u9955"+
- "\u9956\u9957\u9958\u9959\u995A\u995B\u995C\u995D"+
- "\u9961\u9962\u9963\u9964\u9965\u9966\u9967\u9968"+
- "\u9969\u996A\u996B\u996C\u996D\u996E\u996F\u9970"+
- "\u9971\u9973\u9974\u9975\u9976\u9977\u9978\u9979"+
- "\u997A\u997B\u997C\u997D\u9981\u9982\u9983\u9984"+
- "\u9985\u9986\u9987\u9988\u9989\u998A\u998B\u998C"+
- "\u998D\u998E\u998F\u9990\u9991\u9993\u9994\u9995"+
- "\u9996\u9997\u9998\u9999\u999A\u999B\u999C\u999D"+
- "\u99A1\u99A2\u99A3\u99A4\u99A5\u99A6\u99A7\u99A8"+
- "\u99A9\u99AA\u99AB\u99AC\u99AD\u99AE\u99AF\u99B0"+
- "\u99B1\u99B3\u99B4\u99B5\u99B6\u99B7\u99B8\u99B9"+
- "\u99BA\u99BB\u99BC\u99BD\u99C1\u99C2\u99C3\u99C4"+
- "\u99C5\u99C6\u99C7\u99C8\u99C9\u99CA\u99CB\u99CC"+
- "\u99CD\u99CE\u99CF\u99D0\u99D1\u99D3\u99D4\u99D5"+
- "\u99D6\u99D7\u99D8\u99D9\u99DA\u99DB\u99DC\u99DD"+
- "\u99E1\u99E2\u99E3\u99E4\u99E5\u99E6\u99E7\u99E8"+
- "\u99E9\u99EA\u99EB\u99EC\u99ED\u99EE\u99EF\u99F0"+
- "\u99F1\u99F3\u99F4\u99F5\u99F6\u99F7\u99F8\u99F9"+
- "\u99FA\u99FB\u99FC\u99FD\u9A41\u9A42\u9A43\u9A44"+
- "\u9A45\u9A46\u9A47\u9A48\u9A49\u9A4A\u9A4B\u9A4C"+
- "\u9A4D\u9A4E\u9A4F\u9A50\u9A51\u9A53\u9A54\u9A55"+
- "\u9A56\u9A57\u9A58\u9A59\u9A5A\u9A5B\u9A5C\u9A5D"+
- "\u9A61\u9A62\u9A63\u9A64\u9A65\u9A66\u9A67\u9A68"+
- "\u9A69\u9A6A\u9A6B\u9A6C\u9A6D\u9A6E\u9A6F\u9A70"+
- "\u9A71\u9A73\u9A74\u9A75\u9A76\u9A77\u9A78\u9A79"+
- "\u9A7A\u9A7B\u9A7C\u9A7D\u9A81\u9A82\u9A83\u9A84"+
- "\u9A85\u9A86\u9A87\u9A88\u9A89\u9A8A\u9A8B\u9A8C"+
- "\u9A8D\u9A8E\u9A8F\u9A90\u9A91\u9A93\u9A94\u9A95"+
- "\u9A96\u9A97\u9A98\u9A99\u9A9A\u9A9B\u9A9C\u9A9D"+
- "\u9AA1\u9AA2\u9AA3\u9AA4\u9AA5\u9AA6\u9AA7\u9AA8"+
- "\u9AA9\u9AAA\u9AAB\u9AAC\u9AAD\u9AAE\u9AAF\u9AB0"+
- "\u9AB1\u9AB3\u9AB4\u9AB5\u9AB6\u9AB7\u9AB8\u9AB9"+
- "\u9ABA\u9ABB\u9ABC\u9ABD\u9AC1\u9AC2\u9AC3\u9AC4"+
- "\u9AC5\u9AC6\u9AC7\u9AC8\u9AC9\u9ACA\u9ACB\u9ACC"+
- "\u9ACD\u9ACE\u9ACF\u9AD0\u9AD1\u9AD3\u9AD4\u9AD5"+
- "\u9AD6\u9AD7\u9AD8\u9AD9\u9ADA\u9ADB\u9ADC\u9ADD"+
- "\u9AE1\u9AE2\u9AE3\u9AE4\u9AE5\u9AE6\u9AE7\u9AE8"+
- "\u9AE9\u9AEA\u9AEB\u9AEC\u9AED\u9AEE\u9AEF\u9AF0"+
- "\u9AF1\u9AF3\u9AF4\u9AF5\u9AF6\u9AF7\u9AF8\u9AF9"+
- "\u9AFA\u9AFB\u9AFC\u9AFD\u9B41\u9B42\u9B43\u9B44"+
- "\u9B45\u9B46\u9B47\u9B48\u9B49\u9B4A\u9B4B\u9B4C"+
- "\u9B4D\u9B4E\u9B4F\u9B50\u9B51\u9B53\u9B54\u9B55"+
- "\u9B56\u9B57\u9B58\u9B59\u9B5A\u9B5B\u9B5C\u9B5D"+
- "\u9B61\u9B62\u9B63\u9B64\u9B65\u9B66\u9B67\u9B68"+
- "\u9B69\u9B6A\u9B6B\u9B6C\u9B6D\u9B6E\u9B6F\u9B70"+
- "\u9B71\u9B73\u9B74\u9B75\u9B76\u9B77\u9B78\u9B79"+
- "\u9B7A\u9B7B\u9B7C\u9B7D\u9B81\u9B82\u9B83\u9B84"+
- "\u9B85\u9B86\u9B87\u9B88\u9B89\u9B8A\u9B8B\u9B8C"+
- "\u9B8D\u9B8E\u9B8F\u9B90\u9B91\u9B93\u9B94\u9B95"+
- "\u9B96\u9B97\u9B98\u9B99\u9B9A\u9B9B\u9B9C\u9B9D"+
- "\u9BA1\u9BA2\u9BA3\u9BA4\u9BA5\u9BA6\u9BA7\u9BA8"+
- "\u9BA9\u9BAA\u9BAB\u9BAC\u9BAD\u9BAE\u9BAF\u9BB0"+
- "\u9BB1\u9BB3\u9BB4\u9BB5\u9BB6\u9BB7\u9BB8\u9BB9"+
- "\u9BBA\u9BBB\u9BBC\u9BBD\u9C61\u9C62\u9C63\u9C64"+
- "\u9C65\u9C66\u9C67\u9C68\u9C69\u9C6A\u9C6B\u9C6C"+
- "\u9C6D\u9C6E\u9C6F\u9C70\u9C71\u9C73\u9C74\u9C75"+
- "\u9C76\u9C77\u9C78\u9C79\u9C7A\u9C7B\u9C7C\u9C7D"+
- "\u9C81\u9C82\u9C83\u9C84\u9C85\u9C86\u9C87\u9C88"+
- "\u9C89\u9C8A\u9C8B\u9C8C\u9C8D\u9C8E\u9C8F\u9C90"+
- "\u9C91\u9C93\u9C94\u9C95\u9C96\u9C97\u9C98\u9C99"+
- "\u9C9A\u9C9B\u9C9C\u9C9D\u9CA1\u9CA2\u9CA3\u9CA4"+
- "\u9CA5\u9CA6\u9CA7\u9CA8\u9CA9\u9CAA\u9CAB\u9CAC"+
- "\u9CAD\u9CAE\u9CAF\u9CB0\u9CB1\u9CB3\u9CB4\u9CB5"+
- "\u9CB6\u9CB7\u9CB8\u9CB9\u9CBA\u9CBB\u9CBC\u9CBD"+
- "\u9CC1\u9CC2\u9CC3\u9CC4\u9CC5\u9CC6\u9CC7\u9CC8"+
- "\u9CC9\u9CCA\u9CCB\u9CCC\u9CCD\u9CCE\u9CCF\u9CD0"+
- "\u9CD1\u9CD3\u9CD4\u9CD5\u9CD6\u9CD7\u9CD8\u9CD9"+
- "\u9CDA\u9CDB\u9CDC\u9CDD\u9CE1\u9CE2\u9CE3\u9CE4"+
- "\u9CE5\u9CE6\u9CE7\u9CE8\u9CE9\u9CEA\u9CEB\u9CEC"+
- "\u9CED\u9CEE\u9CEF\u9CF0\u9CF1\u9CF3\u9CF4\u9CF5"+
- "\u9CF6\u9CF7\u9CF8\u9CF9\u9CFA\u9CFB\u9CFC\u9CFD"+
- "\u9D41\u9D42\u9D43\u9D44\u9D45\u9D46\u9D47\u9D48"+
- "\u9D49\u9D4A\u9D4B\u9D4C\u9D4D\u9D4E\u9D4F\u9D50"+
- "\u9D51\u9D53\u9D54\u9D55\u9D56\u9D57\u9D58\u9D59"+
- "\u9D5A\u9D5B\u9D5C\u9D5D\u9D61\u9D62\u9D63\u9D64"+
- "\u9D65\u9D66\u9D67\u9D68\u9D69\u9D6A\u9D6B\u9D6C"+
- "\u9D6D\u9D6E\u9D6F\u9D70\u9D71\u9D73\u9D74\u9D75"+
- "\u9D76\u9D77\u9D78\u9D79\u9D7A\u9D7B\u9D7C\u9D7D"+
- "\u9D81\u9D82\u9D83\u9D84\u9D85\u9D86\u9D87\u9D88"+
- "\u9D89\u9D8A\u9D8B\u9D8C\u9D8D\u9D8E\u9D8F\u9D90"+
- "\u9D91\u9D93\u9D94\u9D95\u9D96\u9D97\u9D98\u9D99"+
- "\u9D9A\u9D9B\u9D9C\u9D9D\u9DA1\u9DA2\u9DA3\u9DA4"+
- "\u9DA5\u9DA6\u9DA7\u9DA8\u9DA9\u9DAA\u9DAB\u9DAC"+
- "\u9DAD\u9DAE\u9DAF\u9DB0\u9DB1\u9DB3\u9DB4\u9DB5"+
- "\u9DB6\u9DB7\u9DB8\u9DB9\u9DBA\u9DBB\u9DBC\u9DBD"+
- "\u9DC1\u9DC2\u9DC3\u9DC4\u9DC5\u9DC6\u9DC7\u9DC8"+
- "\u9DC9\u9DCA\u9DCB\u9DCC\u9DCD\u9DCE\u9DCF\u9DD0"+
- "\u9DD1\u9DD3\u9DD4\u9DD5\u9DD6\u9DD7\u9DD8\u9DD9"+
- "\u9DDA\u9DDB\u9DDC\u9DDD\u9DE1\u9DE2\u9DE3\u9DE4"+
- "\u9DE5\u9DE6\u9DE7\u9DE8\u9DE9\u9DEA\u9DEB\u9DEC"+
- "\u9DED\u9DEE\u9DEF\u9DF0\u9DF1\u9DF3\u9DF4\u9DF5"+
- "\u9DF6\u9DF7\u9DF8\u9DF9\u9DFA\u9DFB\u9DFC\u9DFD"+
- "\u9E41\u9E42\u9E43\u9E44\u9E45\u9E46\u9E47\u9E48"+
- "\u9E49\u9E4A\u9E4B\u9E4C\u9E4D\u9E4E\u9E4F\u9E50"+
- "\u9E51\u9E53\u9E54\u9E55\u9E56\u9E57\u9E58\u9E59"+
- "\u9E5A\u9E5B\u9E5C\u9E5D\u9E61\u9E62\u9E63\u9E64"+
- "\u9E65\u9E66\u9E67\u9E68\u9E69\u9E6A\u9E6B\u9E6C"+
- "\u9E6D\u9E6E\u9E6F\u9E70\u9E71\u9E73\u9E74\u9E75"+
- "\u9E76\u9E77\u9E78\u9E79\u9E7A\u9E7B\u9E7C\u9E7D"+
- "\u9E81\u9E82\u9E83\u9E84\u9E85\u9E86\u9E87\u9E88"+
- "\u9E89\u9E8A\u9E8B\u9E8C\u9E8D\u9E8E\u9E8F\u9E90"+
- "\u9E91\u9E93\u9E94\u9E95\u9E96\u9E97\u9E98\u9E99";
-
- private final static String innerIndex7=
- "\u9E9A\u9E9B\u9E9C\u9E9D\u9EA1\u9EA2\u9EA3\u9EA4"+
- "\u9EA5\u9EA6\u9EA7\u9EA8\u9EA9\u9EAA\u9EAB\u9EAC"+
- "\u9EAD\u9EAE\u9EAF\u9EB0\u9EB1\u9EB3\u9EB4\u9EB5"+
- "\u9EB6\u9EB7\u9EB8\u9EB9\u9EBA\u9EBB\u9EBC\u9EBD"+
- "\u9EC1\u9EC2\u9EC3\u9EC4\u9EC5\u9EC6\u9EC7\u9EC8"+
- "\u9EC9\u9ECA\u9ECB\u9ECC\u9ECD\u9ECE\u9ECF\u9ED0"+
- "\u9ED1\u9ED3\u9ED4\u9ED5\u9ED6\u9ED7\u9ED8\u9ED9"+
- "\u9EDA\u9EDB\u9EDC\u9EDD\u9EE1\u9EE2\u9EE3\u9EE4"+
- "\u9EE5\u9EE6\u9EE7\u9EE8\u9EE9\u9EEA\u9EEB\u9EEC"+
- "\u9EED\u9EEE\u9EEF\u9EF0\u9EF1\u9EF3\u9EF4\u9EF5"+
- "\u9EF6\u9EF7\u9EF8\u9EF9\u9EFA\u9EFB\u9EFC\u9EFD"+
- "\u9F41\u9F42\u9F43\u9F44\u9F45\u9F46\u9F47\u9F48"+
- "\u9F49\u9F4A\u9F4B\u9F4C\u9F4D\u9F4E\u9F4F\u9F50"+
- "\u9F51\u9F53\u9F54\u9F55\u9F56\u9F57\u9F58\u9F59"+
- "\u9F5A\u9F5B\u9F5C\u9F5D\u9F61\u9F62\u9F63\u9F64"+
- "\u9F65\u9F66\u9F67\u9F68\u9F69\u9F6A\u9F6B\u9F6C"+
- "\u9F6D\u9F6E\u9F6F\u9F70\u9F71\u9F73\u9F74\u9F75"+
- "\u9F76\u9F77\u9F78\u9F79\u9F7A\u9F7B\u9F7C\u9F7D"+
- "\u9F81\u9F82\u9F83\u9F84\u9F85\u9F86\u9F87\u9F88"+
- "\u9F89\u9F8A\u9F8B\u9F8C\u9F8D\u9F8E\u9F8F\u9F90"+
- "\u9F91\u9F93\u9F94\u9F95\u9F96\u9F97\u9F98\u9F99"+
- "\u9F9A\u9F9B\u9F9C\u9F9D\u9FA1\u9FA2\u9FA3\u9FA4"+
- "\u9FA5\u9FA6\u9FA7\u9FA8\u9FA9\u9FAA\u9FAB\u9FAC"+
- "\u9FAD\u9FAE\u9FAF\u9FB0\u9FB1\u9FB3\u9FB4\u9FB5"+
- "\u9FB6\u9FB7\u9FB8\u9FB9\u9FBA\u9FBB\u9FBC\u9FBD"+
- "\uA061\uA062\uA063\uA064\uA065\uA066\uA067\uA068"+
- "\uA069\uA06A\uA06B\uA06C\uA06D\uA06E\uA06F\uA070"+
- "\uA071\uA073\uA074\uA075\uA076\uA077\uA078\uA079"+
- "\uA07A\uA07B\uA07C\uA07D\uA081\uA082\uA083\uA084"+
- "\uA085\uA086\uA087\uA088\uA089\uA08A\uA08B\uA08C"+
- "\uA08D\uA08E\uA08F\uA090\uA091\uA093\uA094\uA095"+
- "\uA096\uA097\uA098\uA099\uA09A\uA09B\uA09C\uA09D"+
- "\uA0A1\uA0A2\uA0A3\uA0A4\uA0A5\uA0A6\uA0A7\uA0A8"+
- "\uA0A9\uA0AA\uA0AB\uA0AC\uA0AD\uA0AE\uA0AF\uA0B0"+
- "\uA0B1\uA0B3\uA0B4\uA0B5\uA0B6\uA0B7\uA0B8\uA0B9"+
- "\uA0BA\uA0BB\uA0BC\uA0BD\uA0C1\uA0C2\uA0C3\uA0C4"+
- "\uA0C5\uA0C6\uA0C7\uA0C8\uA0C9\uA0CA\uA0CB\uA0CC"+
- "\uA0CD\uA0CE\uA0CF\uA0D0\uA0D1\uA0D3\uA0D4\uA0D5"+
- "\uA0D6\uA0D7\uA0D8\uA0D9\uA0DA\uA0DB\uA0DC\uA0DD"+
- "\uA0E1\uA0E2\uA0E3\uA0E4\uA0E5\uA0E6\uA0E7\uA0E8"+
- "\uA0E9\uA0EA\uA0EB\uA0EC\uA0ED\uA0EE\uA0EF\uA0F0"+
- "\uA0F1\uA0F3\uA0F4\uA0F5\uA0F6\uA0F7\uA0F8\uA0F9"+
- "\uA0FA\uA0FB\uA0FC\uA0FD\uA141\uA142\uA143\uA144"+
- "\uA145\uA146\uA147\uA148\uA149\uA14A\uA14B\uA14C"+
- "\uA14D\uA14E\uA14F\uA150\uA151\uA153\uA154\uA155"+
- "\uA156\uA157\uA158\uA159\uA15A\uA15B\uA15C\uA15D"+
- "\uA161\uA162\uA163\uA164\uA165\uA166\uA167\uA168"+
- "\uA169\uA16A\uA16B\uA16C\uA16D\uA16E\uA16F\uA170"+
- "\uA171\uA173\uA174\uA175\uA176\uA177\uA178\uA179"+
- "\uA17A\uA17B\uA17C\uA17D\uA181\uA182\uA183\uA184"+
- "\uA185\uA186\uA187\uA188\uA189\uA18A\uA18B\uA18C"+
- "\uA18D\uA18E\uA18F\uA190\uA191\uA193\uA194\uA195"+
- "\uA196\uA197\uA198\uA199\uA19A\uA19B\uA19C\uA19D"+
- "\uA1A1\uA1A2\uA1A3\uA1A4\uA1A5\uA1A6\uA1A7\uA1A8"+
- "\uA1A9\uA1AA\uA1AB\uA1AC\uA1AD\uA1AE\uA1AF\uA1B0"+
- "\uA1B1\uA1B3\uA1B4\uA1B5\uA1B6\uA1B7\uA1B8\uA1B9"+
- "\uA1BA\uA1BB\uA1BC\uA1BD\uA1C1\uA1C2\uA1C3\uA1C4"+
- "\uA1C5\uA1C6\uA1C7\uA1C8\uA1C9\uA1CA\uA1CB\uA1CC"+
- "\uA1CD\uA1CE\uA1CF\uA1D0\uA1D1\uA1D3\uA1D4\uA1D5"+
- "\uA1D6\uA1D7\uA1D8\uA1D9\uA1DA\uA1DB\uA1DC\uA1DD"+
- "\uA1E1\uA1E2\uA1E3\uA1E4\uA1E5\uA1E6\uA1E7\uA1E8"+
- "\uA1E9\uA1EA\uA1EB\uA1EC\uA1ED\uA1EE\uA1EF\uA1F0"+
- "\uA1F1\uA1F3\uA1F4\uA1F5\uA1F6\uA1F7\uA1F8\uA1F9"+
- "\uA1FA\uA1FB\uA1FC\uA1FD\uA241\uA242\uA243\uA244"+
- "\uA245\uA246\uA247\uA248\uA249\uA24A\uA24B\uA24C"+
- "\uA24D\uA24E\uA24F\uA250\uA251\uA253\uA254\uA255"+
- "\uA256\uA257\uA258\uA259\uA25A\uA25B\uA25C\uA25D"+
- "\uA261\uA262\uA263\uA264\uA265\uA266\uA267\uA268"+
- "\uA269\uA26A\uA26B\uA26C\uA26D\uA26E\uA26F\uA270"+
- "\uA271\uA273\uA274\uA275\uA276\uA277\uA278\uA279"+
- "\uA27A\uA27B\uA27C\uA27D\uA281\uA282\uA283\uA284"+
- "\uA285\uA286\uA287\uA288\uA289\uA28A\uA28B\uA28C"+
- "\uA28D\uA28E\uA28F\uA290\uA291\uA293\uA294\uA295"+
- "\uA296\uA297\uA298\uA299\uA29A\uA29B\uA29C\uA29D"+
- "\uA2A1\uA2A2\uA2A3\uA2A4\uA2A5\uA2A6\uA2A7\uA2A8"+
- "\uA2A9\uA2AA\uA2AB\uA2AC\uA2AD\uA2AE\uA2AF\uA2B0"+
- "\uA2B1\uA2B3\uA2B4\uA2B5\uA2B6\uA2B7\uA2B8\uA2B9"+
- "\uA2BA\uA2BB\uA2BC\uA2BD\uA2C1\uA2C2\uA2C3\uA2C4"+
- "\uA2C5\uA2C6\uA2C7\uA2C8\uA2C9\uA2CA\uA2CB\uA2CC"+
- "\uA2CD\uA2CE\uA2CF\uA2D0\uA2D1\uA2D3\uA2D4\uA2D5"+
- "\uA2D6\uA2D7\uA2D8\uA2D9\uA2DA\uA2DB\uA2DC\uA2DD"+
- "\uA2E1\uA2E2\uA2E3\uA2E4\uA2E5\uA2E6\uA2E7\uA2E8"+
- "\uA2E9\uA2EA\uA2EB\uA2EC\uA2ED\uA2EE\uA2EF\uA2F0"+
- "\uA2F1\uA2F3\uA2F4\uA2F5\uA2F6\uA2F7\uA2F8\uA2F9"+
- "\uA2FA\uA2FB\uA2FC\uA2FD\uA341\uA342\uA343\uA344"+
- "\uA345\uA346\uA347\uA348\uA349\uA34A\uA34B\uA34C"+
- "\uA34D\uA34E\uA34F\uA350\uA351\uA353\uA354\uA355"+
- "\uA356\uA357\uA358\uA359\uA35A\uA35B\uA35C\uA35D"+
- "\uA361\uA362\uA363\uA364\uA365\uA366\uA367\uA368"+
- "\uA369\uA36A\uA36B\uA36C\uA36D\uA36E\uA36F\uA370"+
- "\uA371\uA373\uA374\uA375\uA376\uA377\uA378\uA379"+
- "\uA37A\uA37B\uA37C\uA37D\uA381\uA382\uA383\uA384"+
- "\uA385\uA386\uA387\uA388\uA389\uA38A\uA38B\uA38C"+
- "\uA38D\uA38E\uA38F\uA390\uA391\uA393\uA394\uA395"+
- "\uA396\uA397\uA398\uA399\uA39A\uA39B\uA39C\uA39D"+
- "\uA3A1\uA3A2\uA3A3\uA3A4\uA3A5\uA3A6\uA3A7\uA3A8"+
- "\uA3A9\uA3AA\uA3AB\uA3AC\uA3AD\uA3AE\uA3AF\uA3B0"+
- "\uA3B1\uA3B3\uA3B4\uA3B5\uA3B6\uA3B7\uA3B8\uA3B9"+
- "\uA3BA\uA3BB\uA3BC\uA3BD\uA461\uA462\uA463\uA464"+
- "\uA465\uA466\uA467\uA468\uA469\uA46A\uA46B\uA46C"+
- "\uA46D\uA46E\uA46F\uA470\uA471\uA473\uA474\uA475"+
- "\uA476\uA477\uA478\uA479\uA47A\uA47B\uA47C\uA47D"+
- "\uA481\uA482\uA483\uA484\uA485\uA486\uA487\uA488"+
- "\uA489\uA48A\uA48B\uA48C\uA48D\uA48E\uA48F\uA490"+
- "\uA491\uA493\uA494\uA495\uA496\uA497\uA498\uA499"+
- "\uA49A\uA49B\uA49C\uA49D\uA4A1\uA4A2\uA4A3\uA4A4"+
- "\uA4A5\uA4A6\uA4A7\uA4A8\uA4A9\uA4AA\uA4AB\uA4AC"+
- "\uA4AD\uA4AE\uA4AF\uA4B0\uA4B1\uA4B3\uA4B4\uA4B5"+
- "\uA4B6\uA4B7\uA4B8\uA4B9\uA4BA\uA4BB\uA4BC\uA4BD"+
- "\uA4C1\uA4C2\uA4C3\uA4C4\uA4C5\uA4C6\uA4C7\uA4C8"+
- "\uA4C9\uA4CA\uA4CB\uA4CC\uA4CD\uA4CE\uA4CF\uA4D0"+
- "\uA4D1\uA4D3\uA4D4\uA4D5\uA4D6\uA4D7\uA4D8\uA4D9"+
- "\uA4DA\uA4DB\uA4DC\uA4DD\uA4E1\uA4E2\uA4E3\uA4E4"+
- "\uA4E5\uA4E6\uA4E7\uA4E8\uA4E9\uA4EA\uA4EB\uA4EC"+
- "\uA4ED\uA4EE\uA4EF\uA4F0\uA4F1\uA4F3\uA4F4\uA4F5"+
- "\uA4F6\uA4F7\uA4F8\uA4F9\uA4FA\uA4FB\uA4FC\uA4FD"+
- "\uA541\uA542\uA543\uA544\uA545\uA546\uA547\uA548"+
- "\uA549\uA54A\uA54B\uA54C\uA54D\uA54E\uA54F\uA550"+
- "\uA551\uA553\uA554\uA555\uA556\uA557\uA558\uA559"+
- "\uA55A\uA55B\uA55C\uA55D\uA561\uA562\uA563\uA564"+
- "\uA565\uA566\uA567\uA568\uA569\uA56A\uA56B\uA56C"+
- "\uA56D\uA56E\uA56F\uA570\uA571\uA573\uA574\uA575"+
- "\uA576\uA577\uA578\uA579\uA57A\uA57B\uA57C\uA57D"+
- "\uA581\uA582\uA583\uA584\uA585\uA586\uA587\uA588"+
- "\uA589\uA58A\uA58B\uA58C\uA58D\uA58E\uA58F\uA590"+
- "\uA591\uA593\uA594\uA595\uA596\uA597\uA598\uA599"+
- "\uA59A\uA59B\uA59C\uA59D\uA5A1\uA5A2\uA5A3\uA5A4"+
- "\uA5A5\uA5A6\uA5A7\uA5A8\uA5A9\uA5AA\uA5AB\uA5AC"+
- "\uA5AD\uA5AE\uA5AF\uA5B0\uA5B1\uA5B3\uA5B4\uA5B5"+
- "\uA5B6\uA5B7\uA5B8\uA5B9\uA5BA\uA5BB\uA5BC\uA5BD"+
- "\uA5C1\uA5C2\uA5C3\uA5C4\uA5C5\uA5C6\uA5C7\uA5C8"+
- "\uA5C9\uA5CA\uA5CB\uA5CC\uA5CD\uA5CE\uA5CF\uA5D0"+
- "\uA5D1\uA5D3\uA5D4\uA5D5\uA5D6\uA5D7\uA5D8\uA5D9"+
- "\uA5DA\uA5DB\uA5DC\uA5DD\uA5E1\uA5E2\uA5E3\uA5E4"+
- "\uA5E5\uA5E6\uA5E7\uA5E8\uA5E9\uA5EA\uA5EB\uA5EC"+
- "\uA5ED\uA5EE\uA5EF\uA5F0\uA5F1\uA5F3\uA5F4\uA5F5"+
- "\uA5F6\uA5F7\uA5F8\uA5F9\uA5FA\uA5FB\uA5FC\uA5FD"+
- "\uA641\uA642\uA643\uA644\uA645\uA646\uA647\uA648"+
- "\uA649\uA64A\uA64B\uA64C\uA64D\uA64E\uA64F\uA650"+
- "\uA651\uA653\uA654\uA655\uA656\uA657\uA658\uA659"+
- "\uA65A\uA65B\uA65C\uA65D\uA661\uA662\uA663\uA664"+
- "\uA665\uA666\uA667\uA668\uA669\uA66A\uA66B\uA66C"+
- "\uA66D\uA66E\uA66F\uA670\uA671\uA673\uA674\uA675"+
- "\uA676\uA677\uA678\uA679\uA67A\uA67B\uA67C\uA67D"+
- "\uA681\uA682\uA683\uA684\uA685\uA686\uA687\uA688"+
- "\uA689\uA68A\uA68B\uA68C\uA68D\uA68E\uA68F\uA690"+
- "\uA691\uA693\uA694\uA695\uA696\uA697\uA698\uA699"+
- "\uA69A\uA69B\uA69C\uA69D\uA6A1\uA6A2\uA6A3\uA6A4"+
- "\uA6A5\uA6A6\uA6A7\uA6A8\uA6A9\uA6AA\uA6AB\uA6AC"+
- "\uA6AD\uA6AE\uA6AF\uA6B0\uA6B1\uA6B3\uA6B4\uA6B5"+
- "\uA6B6\uA6B7\uA6B8\uA6B9\uA6BA\uA6BB\uA6BC\uA6BD"+
- "\uA6C1\uA6C2\uA6C3\uA6C4\uA6C5\uA6C6\uA6C7\uA6C8"+
- "\uA6C9\uA6CA\uA6CB\uA6CC\uA6CD\uA6CE\uA6CF\uA6D0"+
- "\uA6D1\uA6D3\uA6D4\uA6D5\uA6D6\uA6D7\uA6D8\uA6D9"+
- "\uA6DA\uA6DB\uA6DC\uA6DD\uA6E1\uA6E2\uA6E3\uA6E4"+
- "\uA6E5\uA6E6\uA6E7\uA6E8\uA6E9\uA6EA\uA6EB\uA6EC"+
- "\uA6ED\uA6EE\uA6EF\uA6F0\uA6F1\uA6F3\uA6F4\uA6F5"+
- "\uA6F6\uA6F7\uA6F8\uA6F9\uA6FA\uA6FB\uA6FC\uA6FD"+
- "\uA741\uA742\uA743\uA744\uA745\uA746\uA747\uA748"+
- "\uA749\uA74A\uA74B\uA74C\uA74D\uA74E\uA74F\uA750"+
- "\uA751\uA753\uA754\uA755\uA756\uA757\uA758\uA759"+
- "\uA75A\uA75B\uA75C\uA75D\uA761\uA762\uA763\uA764"+
- "\uA765\uA766\uA767\uA768\uA769\uA76A\uA76B\uA76C"+
- "\uA76D\uA76E\uA76F\uA770\uA771\uA773\uA774\uA775"+
- "\uA776\uA777\uA778\uA779\uA77A\uA77B\uA77C\uA77D"+
- "\uA781\uA782\uA783\uA784\uA785\uA786\uA787\uA788"+
- "\uA789\uA78A\uA78B\uA78C\uA78D\uA78E\uA78F\uA790"+
- "\uA791\uA793\uA794\uA795\uA796\uA797\uA798\uA799"+
- "\uA79A\uA79B\uA79C\uA79D\uA7A1\uA7A2\uA7A3\uA7A4"+
- "\uA7A5\uA7A6\uA7A7\uA7A8\uA7A9\uA7AA\uA7AB\uA7AC"+
- "\uA7AD\uA7AE\uA7AF\uA7B0\uA7B1\uA7B3\uA7B4\uA7B5"+
- "\uA7B6\uA7B7\uA7B8\uA7B9\uA7BA\uA7BB\uA7BC\uA7BD"+
- "\uA861\uA862\uA863\uA864\uA865\uA866\uA867\uA868"+
- "\uA869\uA86A\uA86B\uA86C\uA86D\uA86E\uA86F\uA870"+
- "\uA871\uA873\uA874\uA875\uA876\uA877\uA878\uA879"+
- "\uA87A\uA87B\uA87C\uA87D\uA881\uA882\uA883\uA884"+
- "\uA885\uA886\uA887\uA888\uA889\uA88A\uA88B\uA88C"+
- "\uA88D\uA88E\uA88F\uA890\uA891\uA893\uA894\uA895"+
- "\uA896\uA897\uA898\uA899\uA89A\uA89B\uA89C\uA89D"+
- "\uA8A1\uA8A2\uA8A3\uA8A4\uA8A5\uA8A6\uA8A7\uA8A8"+
- "\uA8A9\uA8AA\uA8AB\uA8AC\uA8AD\uA8AE\uA8AF\uA8B0"+
- "\uA8B1\uA8B3\uA8B4\uA8B5\uA8B6\uA8B7\uA8B8\uA8B9"+
- "\uA8BA\uA8BB\uA8BC\uA8BD\uA8C1\uA8C2\uA8C3\uA8C4"+
- "\uA8C5\uA8C6\uA8C7\uA8C8\uA8C9\uA8CA\uA8CB\uA8CC"+
- "\uA8CD\uA8CE\uA8CF\uA8D0\uA8D1\uA8D3\uA8D4\uA8D5"+
- "\uA8D6\uA8D7\uA8D8\uA8D9\uA8DA\uA8DB\uA8DC\uA8DD"+
- "\uA8E1\uA8E2\uA8E3\uA8E4\uA8E5\uA8E6\uA8E7\uA8E8"+
- "\uA8E9\uA8EA\uA8EB\uA8EC\uA8ED\uA8EE\uA8EF\uA8F0"+
- "\uA8F1\uA8F3\uA8F4\uA8F5\uA8F6\uA8F7\uA8F8\uA8F9"+
- "\uA8FA\uA8FB\uA8FC\uA8FD\uA941\uA942\uA943\uA944"+
- "\uA945\uA946\uA947\uA948\uA949\uA94A\uA94B\uA94C"+
- "\uA94D\uA94E\uA94F\uA950\uA951\uA953\uA954\uA955"+
- "\uA956\uA957\uA958\uA959\uA95A\uA95B\uA95C\uA95D"+
- "\uA961\uA962\uA963\uA964\uA965\uA966\uA967\uA968"+
- "\uA969\uA96A\uA96B\uA96C\uA96D\uA96E\uA96F\uA970"+
- "\uA971\uA973\uA974\uA975\uA976\uA977\uA978\uA979"+
- "\uA97A\uA97B\uA97C\uA97D\uA981\uA982\uA983\uA984"+
- "\uA985\uA986\uA987\uA988\uA989\uA98A\uA98B\uA98C"+
- "\uA98D\uA98E\uA98F\uA990\uA991\uA993\uA994\uA995"+
- "\uA996\uA997\uA998\uA999\uA99A\uA99B\uA99C\uA99D"+
- "\uA9A1\uA9A2\uA9A3\uA9A4\uA9A5\uA9A6\uA9A7\uA9A8"+
- "\uA9A9\uA9AA\uA9AB\uA9AC\uA9AD\uA9AE\uA9AF\uA9B0"+
- "\uA9B1\uA9B3\uA9B4\uA9B5\uA9B6\uA9B7\uA9B8\uA9B9"+
- "\uA9BA\uA9BB\uA9BC\uA9BD\uA9C1\uA9C2\uA9C3\uA9C4"+
- "\uA9C5\uA9C6\uA9C7\uA9C8\uA9C9\uA9CA\uA9CB\uA9CC"+
- "\uA9CD\uA9CE\uA9CF\uA9D0\uA9D1\uA9D3\uA9D4\uA9D5"+
- "\uA9D6\uA9D7\uA9D8\uA9D9\uA9DA\uA9DB\uA9DC\uA9DD"+
- "\uA9E1\uA9E2\uA9E3\uA9E4\uA9E5\uA9E6\uA9E7\uA9E8"+
- "\uA9E9\uA9EA\uA9EB\uA9EC\uA9ED\uA9EE\uA9EF\uA9F0"+
- "\uA9F1\uA9F3\uA9F4\uA9F5\uA9F6\uA9F7\uA9F8\uA9F9"+
- "\uA9FA\uA9FB\uA9FC\uA9FD\uAA41\uAA42\uAA43\uAA44"+
- "\uAA45\uAA46\uAA47\uAA48\uAA49\uAA4A\uAA4B\uAA4C"+
- "\uAA4D\uAA4E\uAA4F\uAA50\uAA51\uAA53\uAA54\uAA55"+
- "\uAA56\uAA57\uAA58\uAA59\uAA5A\uAA5B\uAA5C\uAA5D"+
- "\uAA61\uAA62\uAA63\uAA64\uAA65\uAA66\uAA67\uAA68"+
- "\uAA69\uAA6A\uAA6B\uAA6C\uAA6D\uAA6E\uAA6F\uAA70"+
- "\uAA71\uAA73\uAA74\uAA75\uAA76\uAA77\uAA78\uAA79"+
- "\uAA7A\uAA7B\uAA7C\uAA7D\uAA81\uAA82\uAA83\uAA84"+
- "\uAA85\uAA86\uAA87\uAA88\uAA89\uAA8A\uAA8B\uAA8C"+
- "\uAA8D\uAA8E\uAA8F\uAA90\uAA91\uAA93\uAA94\uAA95"+
- "\uAA96\uAA97\uAA98\uAA99\uAA9A\uAA9B\uAA9C\uAA9D"+
- "\uAAA1\uAAA2\uAAA3\uAAA4\uAAA5\uAAA6\uAAA7\uAAA8"+
- "\uAAA9\uAAAA\uAAAB\uAAAC\uAAAD\uAAAE\uAAAF\uAAB0"+
- "\uAAB1\uAAB3\uAAB4\uAAB5\uAAB6\uAAB7\uAAB8\uAAB9"+
- "\uAABA\uAABB\uAABC\uAABD\uAAC1\uAAC2\uAAC3\uAAC4"+
- "\uAAC5\uAAC6\uAAC7\uAAC8\uAAC9\uAACA\uAACB\uAACC"+
- "\uAACD\uAACE\uAACF\uAAD0\uAAD1\uAAD3\uAAD4\uAAD5"+
- "\uAAD6\uAAD7\uAAD8\uAAD9\uAADA\uAADB\uAADC\uAADD"+
- "\uAAE1\uAAE2\uAAE3\uAAE4\uAAE5\uAAE6\uAAE7\uAAE8"+
- "\uAAE9\uAAEA\uAAEB\uAAEC\uAAED\uAAEE\uAAEF\uAAF0"+
- "\uAAF1\uAAF3\uAAF4\uAAF5\uAAF6\uAAF7\uAAF8\uAAF9"+
- "\uAAFA\uAAFB\uAAFC\uAAFD\uAB41\uAB42\uAB43\uAB44"+
- "\uAB45\uAB46\uAB47\uAB48\uAB49\uAB4A\uAB4B\uAB4C"+
- "\uAB4D\uAB4E\uAB4F\uAB50\uAB51\uAB53\uAB54\uAB55"+
- "\uAB56\uAB57\uAB58\uAB59\uAB5A\uAB5B\uAB5C\uAB5D"+
- "\uAB61\uAB62\uAB63\uAB64\uAB65\uAB66\uAB67\uAB68"+
- "\uAB69\uAB6A\uAB6B\uAB6C\uAB6D\uAB6E\uAB6F\uAB70"+
- "\uAB71\uAB73\uAB74\uAB75\uAB76\uAB77\uAB78\uAB79"+
- "\uAB7A\uAB7B\uAB7C\uAB7D\uAB81\uAB82\uAB83\uAB84"+
- "\uAB85\uAB86\uAB87\uAB88\uAB89\uAB8A\uAB8B\uAB8C"+
- "\uAB8D\uAB8E\uAB8F\uAB90\uAB91\uAB93\uAB94\uAB95"+
- "\uAB96\uAB97\uAB98\uAB99\uAB9A\uAB9B\uAB9C\uAB9D"+
- "\uABA1\uABA2\uABA3\uABA4\uABA5\uABA6\uABA7\uABA8"+
- "\uABA9\uABAA\uABAB\uABAC\uABAD\uABAE\uABAF\uABB0"+
- "\uABB1\uABB3\uABB4\uABB5\uABB6\uABB7\uABB8\uABB9"+
- "\uABBA\uABBB\uABBC\uABBD\uAC61\uAC62\uAC63\uAC64"+
- "\uAC65\uAC66\uAC67\uAC68\uAC69\uAC6A\uAC6B\uAC6C"+
- "\uAC6D\uAC6E\uAC6F\uAC70\uAC71\uAC73\uAC74\uAC75"+
- "\uAC76\uAC77\uAC78\uAC79\uAC7A\uAC7B\uAC7C\uAC7D"+
- "\uAC81\uAC82\uAC83\uAC84\uAC85\uAC86\uAC87\uAC88"+
- "\uAC89\uAC8A\uAC8B\uAC8C\uAC8D\uAC8E\uAC8F\uAC90"+
- "\uAC91\uAC93\uAC94\uAC95\uAC96\uAC97\uAC98\uAC99"+
- "\uAC9A\uAC9B\uAC9C\uAC9D\uACA1\uACA2\uACA3\uACA4"+
- "\uACA5\uACA6\uACA7\uACA8\uACA9\uACAA\uACAB\uACAC"+
- "\uACAD\uACAE\uACAF\uACB0\uACB1\uACB3\uACB4\uACB5"+
- "\uACB6\uACB7\uACB8\uACB9\uACBA\uACBB\uACBC\uACBD"+
- "\uACC1\uACC2\uACC3\uACC4\uACC5\uACC6\uACC7\uACC8"+
- "\uACC9\uACCA\uACCB\uACCC\uACCD\uACCE\uACCF\uACD0"+
- "\uACD1\uACD3\uACD4\uACD5\uACD6\uACD7\uACD8\uACD9"+
- "\uACDA\uACDB\uACDC\uACDD\uACE1\uACE2\uACE3\uACE4"+
- "\uACE5\uACE6\uACE7\uACE8\uACE9\uACEA\uACEB\uACEC"+
- "\uACED\uACEE\uACEF\uACF0\uACF1\uACF3\uACF4\uACF5"+
- "\uACF6\uACF7\uACF8\uACF9\uACFA\uACFB\uACFC\uACFD"+
- "\uAD41\uAD42\uAD43\uAD44\uAD45\uAD46\uAD47\uAD48"+
- "\uAD49\uAD4A\uAD4B\uAD4C\uAD4D\uAD4E\uAD4F\uAD50"+
- "\uAD51\uAD53\uAD54\uAD55\uAD56\uAD57\uAD58\uAD59"+
- "\uAD5A\uAD5B\uAD5C\uAD5D\uAD61\uAD62\uAD63\uAD64"+
- "\uAD65\uAD66\uAD67\uAD68\uAD69\uAD6A\uAD6B\uAD6C"+
- "\uAD6D\uAD6E\uAD6F\uAD70\uAD71\uAD73\uAD74\uAD75"+
- "\uAD76\uAD77\uAD78\uAD79\uAD7A\uAD7B\uAD7C\uAD7D"+
- "\uAD81\uAD82\uAD83\uAD84\uAD85\uAD86\uAD87\uAD88"+
- "\uAD89\uAD8A\uAD8B\uAD8C\uAD8D\uAD8E\uAD8F\uAD90"+
- "\uAD91\uAD93\uAD94\uAD95\uAD96\uAD97\uAD98\uAD99"+
- "\uAD9A\uAD9B\uAD9C\uAD9D\uADA1\uADA2\uADA3\uADA4"+
- "\uADA5\uADA6\uADA7\uADA8\uADA9\uADAA\uADAB\uADAC"+
- "\uADAD\uADAE\uADAF\uADB0\uADB1\uADB3\uADB4\uADB5"+
- "\uADB6\uADB7\uADB8\uADB9\uADBA\uADBB\uADBC\uADBD"+
- "\uADC1\uADC2\uADC3\uADC4\uADC5\uADC6\uADC7\uADC8"+
- "\uADC9\uADCA\uADCB\uADCC\uADCD\uADCE\uADCF\uADD0"+
- "\uADD1\uADD3\uADD4\uADD5\uADD6\uADD7\uADD8\uADD9"+
- "\uADDA\uADDB\uADDC\uADDD\uADE1\uADE2\uADE3\uADE4"+
- "\uADE5\uADE6\uADE7\uADE8\uADE9\uADEA\uADEB\uADEC"+
- "\uADED\uADEE\uADEF\uADF0\uADF1\uADF3\uADF4\uADF5"+
- "\uADF6\uADF7\uADF8\uADF9\uADFA\uADFB\uADFC\uADFD"+
- "\uAE41\uAE42\uAE43\uAE44\uAE45\uAE46\uAE47\uAE48"+
- "\uAE49\uAE4A\uAE4B\uAE4C\uAE4D\uAE4E\uAE4F\uAE50"+
- "\uAE51\uAE53\uAE54\uAE55\uAE56\uAE57\uAE58\uAE59"+
- "\uAE5A\uAE5B\uAE5C\uAE5D\uAE61\uAE62\uAE63\uAE64"+
- "\uAE65\uAE66\uAE67\uAE68\uAE69\uAE6A\uAE6B\uAE6C"+
- "\uAE6D\uAE6E\uAE6F\uAE70\uAE71\uAE73\uAE74\uAE75"+
- "\uAE76\uAE77\uAE78\uAE79\uAE7A\uAE7B\uAE7C\uAE7D"+
- "\uAE81\uAE82\uAE83\uAE84\uAE85\uAE86\uAE87\uAE88"+
- "\uAE89\uAE8A\uAE8B\uAE8C\uAE8D\uAE8E\uAE8F\uAE90"+
- "\uAE91\uAE93\uAE94\uAE95\uAE96\uAE97\uAE98\uAE99"+
- "\uAE9A\uAE9B\uAE9C\uAE9D\uAEA1\uAEA2\uAEA3\uAEA4"+
- "\uAEA5\uAEA6\uAEA7\uAEA8\uAEA9\uAEAA\uAEAB\uAEAC"+
- "\uAEAD\uAEAE\uAEAF\uAEB0\uAEB1\uAEB3\uAEB4\uAEB5"+
- "\uAEB6\uAEB7\uAEB8\uAEB9\uAEBA\uAEBB\uAEBC\uAEBD"+
- "\uAEC1\uAEC2\uAEC3\uAEC4\uAEC5\uAEC6\uAEC7\uAEC8"+
- "\uAEC9\uAECA\uAECB\uAECC\uAECD\uAECE\uAECF\uAED0"+
- "\uAED1\uAED3\uAED4\uAED5\uAED6\uAED7\uAED8\uAED9"+
- "\uAEDA\uAEDB\uAEDC\uAEDD\uAEE1\uAEE2\uAEE3\uAEE4"+
- "\uAEE5\uAEE6\uAEE7\uAEE8\uAEE9\uAEEA\uAEEB\uAEEC"+
- "\uAEED\uAEEE\uAEEF\uAEF0\uAEF1\uAEF3\uAEF4\uAEF5"+
- "\uAEF6\uAEF7\uAEF8\uAEF9\uAEFA\uAEFB\uAEFC\uAEFD"+
- "\uAF41\uAF42\uAF43\uAF44\uAF45\uAF46\uAF47\uAF48"+
- "\uAF49\uAF4A\uAF4B\uAF4C\uAF4D\uAF4E\uAF4F\uAF50"+
- "\uAF51\uAF53\uAF54\uAF55\uAF56\uAF57\uAF58\uAF59"+
- "\uAF5A\uAF5B\uAF5C\uAF5D\uAF61\uAF62\uAF63\uAF64"+
- "\uAF65\uAF66\uAF67\uAF68\uAF69\uAF6A\uAF6B\uAF6C"+
- "\uAF6D\uAF6E\uAF6F\uAF70\uAF71\uAF73\uAF74\uAF75"+
- "\uAF76\uAF77\uAF78\uAF79\uAF7A\uAF7B\uAF7C\uAF7D"+
- "\uAF81\uAF82\uAF83\uAF84\uAF85\uAF86\uAF87\uAF88"+
- "\uAF89\uAF8A\uAF8B\uAF8C\uAF8D\uAF8E\uAF8F\uAF90"+
- "\uAF91\uAF93\uAF94\uAF95\uAF96\uAF97\uAF98\uAF99"+
- "\uAF9A\uAF9B\uAF9C\uAF9D\uAFA1\uAFA2\uAFA3\uAFA4"+
- "\uAFA5\uAFA6\uAFA7\uAFA8\uAFA9\uAFAA\uAFAB\uAFAC"+
- "\uAFAD\uAFAE\uAFAF\uAFB0\uAFB1\uAFB3\uAFB4\uAFB5"+
- "\uAFB6\uAFB7\uAFB8\uAFB9\uAFBA\uAFBB\uAFBC\uAFBD"+
- "\uB061\uB062\uB063\uB064\uB065\uB066\uB067\uB068"+
- "\uB069\uB06A\uB06B\uB06C\uB06D\uB06E\uB06F\uB070"+
- "\uB071\uB073\uB074\uB075\uB076\uB077\uB078\uB079"+
- "\uB07A\uB07B\uB07C\uB07D\uB081\uB082\uB083\uB084"+
- "\uB085\uB086\uB087\uB088\uB089\uB08A\uB08B\uB08C"+
- "\uB08D\uB08E\uB08F\uB090\uB091\uB093\uB094\uB095"+
- "\uB096\uB097\uB098\uB099\uB09A\uB09B\uB09C\uB09D"+
- "\uB0A1\uB0A2\uB0A3\uB0A4\uB0A5\uB0A6\uB0A7\uB0A8"+
- "\uB0A9\uB0AA\uB0AB\uB0AC\uB0AD\uB0AE\uB0AF\uB0B0"+
- "\uB0B1\uB0B3\uB0B4\uB0B5\uB0B6\uB0B7\uB0B8\uB0B9"+
- "\uB0BA\uB0BB\uB0BC\uB0BD\uB0C1\uB0C2\uB0C3\uB0C4"+
- "\uB0C5\uB0C6\uB0C7\uB0C8\uB0C9\uB0CA\uB0CB\uB0CC"+
- "\uB0CD\uB0CE\uB0CF\uB0D0\uB0D1\uB0D3\uB0D4\uB0D5"+
- "\uB0D6\uB0D7\uB0D8\uB0D9\uB0DA\uB0DB\uB0DC\uB0DD"+
- "\uB0E1\uB0E2\uB0E3\uB0E4\uB0E5\uB0E6\uB0E7\uB0E8"+
- "\uB0E9\uB0EA\uB0EB\uB0EC\uB0ED\uB0EE\uB0EF\uB0F0"+
- "\uB0F1\uB0F3\uB0F4\uB0F5\uB0F6\uB0F7\uB0F8\uB0F9"+
- "\uB0FA\uB0FB\uB0FC\uB0FD\uB141\uB142\uB143\uB144"+
- "\uB145\uB146\uB147\uB148\uB149\uB14A\uB14B\uB14C"+
- "\uB14D\uB14E\uB14F\uB150\uB151\uB153\uB154\uB155"+
- "\uB156\uB157\uB158\uB159\uB15A\uB15B\uB15C\uB15D"+
- "\uB161\uB162\uB163\uB164\uB165\uB166\uB167\uB168"+
- "\uB169\uB16A\uB16B\uB16C\uB16D\uB16E\uB16F\uB170"+
- "\uB171\uB173\uB174\uB175\uB176\uB177\uB178\uB179"+
- "\uB17A\uB17B\uB17C\uB17D\uB181\uB182\uB183\uB184"+
- "\uB185\uB186\uB187\uB188\uB189\uB18A\uB18B\uB18C"+
- "\uB18D\uB18E\uB18F\uB190\uB191\uB193\uB194\uB195"+
- "\uB196\uB197\uB198\uB199\uB19A\uB19B\uB19C\uB19D"+
- "\uB1A1\uB1A2\uB1A3\uB1A4\uB1A5\uB1A6\uB1A7\uB1A8"+
- "\uB1A9\uB1AA\uB1AB\uB1AC\uB1AD\uB1AE\uB1AF\uB1B0"+
- "\uB1B1\uB1B3\uB1B4\uB1B5\uB1B6\uB1B7\uB1B8\uB1B9"+
- "\uB1BA\uB1BB\uB1BC\uB1BD\uB1C1\uB1C2\uB1C3\uB1C4"+
- "\uB1C5\uB1C6\uB1C7\uB1C8\uB1C9\uB1CA\uB1CB\uB1CC"+
- "\uB1CD\uB1CE\uB1CF\uB1D0\uB1D1\uB1D3\uB1D4\uB1D5"+
- "\uB1D6\uB1D7\uB1D8\uB1D9\uB1DA\uB1DB\uB1DC\uB1DD"+
- "\uB1E1\uB1E2\uB1E3\uB1E4\uB1E5\uB1E6\uB1E7\uB1E8"+
- "\uB1E9\uB1EA\uB1EB\uB1EC\uB1ED\uB1EE\uB1EF\uB1F0"+
- "\uB1F1\uB1F3\uB1F4\uB1F5\uB1F6\uB1F7\uB1F8\uB1F9"+
- "\uB1FA\uB1FB\uB1FC\uB1FD\uB241\uB242\uB243\uB244"+
- "\uB245\uB246\uB247\uB248\uB249\uB24A\uB24B\uB24C"+
- "\uB24D\uB24E\uB24F\uB250\uB251\uB253\uB254\uB255"+
- "\uB256\uB257\uB258\uB259\uB25A\uB25B\uB25C\uB25D"+
- "\uB261\uB262\uB263\uB264\uB265\uB266\uB267\uB268"+
- "\uB269\uB26A\uB26B\uB26C\uB26D\uB26E\uB26F\uB270"+
- "\uB271\uB273\uB274\uB275\uB276\uB277\uB278\uB279"+
- "\uB27A\uB27B\uB27C\uB27D\uB281\uB282\uB283\uB284"+
- "\uB285\uB286\uB287\uB288\uB289\uB28A\uB28B\uB28C"+
- "\uB28D\uB28E\uB28F\uB290\uB291\uB293\uB294\uB295"+
- "\uB296\uB297\uB298\uB299\uB29A\uB29B\uB29C\uB29D"+
- "\uB2A1\uB2A2\uB2A3\uB2A4\uB2A5\uB2A6\uB2A7\uB2A8"+
- "\uB2A9\uB2AA\uB2AB\uB2AC\uB2AD\uB2AE\uB2AF\uB2B0"+
- "\uB2B1\uB2B3\uB2B4\uB2B5\uB2B6\uB2B7\uB2B8\uB2B9"+
- "\uB2BA\uB2BB\uB2BC\uB2BD\uB2C1\uB2C2\uB2C3\uB2C4"+
- "\uB2C5\uB2C6\uB2C7\uB2C8\uB2C9\uB2CA\uB2CB\uB2CC"+
- "\uB2CD\uB2CE\uB2CF\uB2D0\uB2D1\uB2D3\uB2D4\uB2D5"+
- "\uB2D6\uB2D7\uB2D8\uB2D9\uB2DA\uB2DB\uB2DC\uB2DD"+
- "\uB2E1\uB2E2\uB2E3\uB2E4\uB2E5\uB2E6\uB2E7\uB2E8"+
- "\uB2E9\uB2EA\uB2EB\uB2EC\uB2ED\uB2EE\uB2EF\uB2F0"+
- "\uB2F1\uB2F3\uB2F4\uB2F5\uB2F6\uB2F7\uB2F8\uB2F9"+
- "\uB2FA\uB2FB\uB2FC\uB2FD\uB341\uB342\uB343\uB344"+
- "\uB345\uB346\uB347\uB348\uB349\uB34A\uB34B\uB34C"+
- "\uB34D\uB34E\uB34F\uB350\uB351\uB353\uB354\uB355"+
- "\uB356\uB357\uB358\uB359\uB35A\uB35B\uB35C\uB35D"+
- "\uB361\uB362\uB363\uB364\uB365\uB366\uB367\uB368"+
- "\uB369\uB36A\uB36B\uB36C\uB36D\uB36E\uB36F\uB370"+
- "\uB371\uB373\uB374\uB375\uB376\uB377\uB378\uB379"+
- "\uB37A\uB37B\uB37C\uB37D\uB381\uB382\uB383\uB384"+
- "\uB385\uB386\uB387\uB388\uB389\uB38A\uB38B\uB38C"+
- "\uB38D\uB38E\uB38F\uB390\uB391\uB393\uB394\uB395"+
- "\uB396\uB397\uB398\uB399\uB39A\uB39B\uB39C\uB39D"+
- "\uB3A1\uB3A2\uB3A3\uB3A4\uB3A5\uB3A6\uB3A7\uB3A8"+
- "\uB3A9\uB3AA\uB3AB\uB3AC\uB3AD\uB3AE\uB3AF\uB3B0"+
- "\uB3B1\uB3B3\uB3B4\uB3B5\uB3B6\uB3B7\uB3B8\uB3B9"+
- "\uB3BA\uB3BB\uB3BC\uB3BD\uB461\uB462\uB463\uB464"+
- "\uB465\uB466\uB467\uB468\uB469\uB46A\uB46B\uB46C"+
- "\uB46D\uB46E\uB46F\uB470\uB471\uB473\uB474\uB475"+
- "\uB476\uB477\uB478\uB479\uB47A\uB47B\uB47C\uB47D"+
- "\uB481\uB482\uB483\uB484\uB485\uB486\uB487\uB488"+
- "\uB489\uB48A\uB48B\uB48C\uB48D\uB48E\uB48F\uB490"+
- "\uB491\uB493\uB494\uB495\uB496\uB497\uB498\uB499"+
- "\uB49A\uB49B\uB49C\uB49D\uB4A1\uB4A2\uB4A3\uB4A4"+
- "\uB4A5\uB4A6\uB4A7\uB4A8\uB4A9\uB4AA\uB4AB\uB4AC"+
- "\uB4AD\uB4AE\uB4AF\uB4B0\uB4B1\uB4B3\uB4B4\uB4B5"+
- "\uB4B6\uB4B7\uB4B8\uB4B9\uB4BA\uB4BB\uB4BC\uB4BD"+
- "\uB4C1\uB4C2\uB4C3\uB4C4\uB4C5\uB4C6\uB4C7\uB4C8"+
- "\uB4C9\uB4CA\uB4CB\uB4CC\uB4CD\uB4CE\uB4CF\uB4D0"+
- "\uB4D1\uB4D3\uB4D4\uB4D5\uB4D6\uB4D7\uB4D8\uB4D9"+
- "\uB4DA\uB4DB\uB4DC\uB4DD\uB4E1\uB4E2\uB4E3\uB4E4"+
- "\uB4E5\uB4E6\uB4E7\uB4E8\uB4E9\uB4EA\uB4EB\uB4EC"+
- "\uB4ED\uB4EE\uB4EF\uB4F0\uB4F1\uB4F3\uB4F4\uB4F5"+
- "\uB4F6\uB4F7\uB4F8\uB4F9\uB4FA\uB4FB\uB4FC\uB4FD"+
- "\uB541\uB542\uB543\uB544\uB545\uB546\uB547\uB548"+
- "\uB549\uB54A\uB54B\uB54C\uB54D\uB54E\uB54F\uB550"+
- "\uB551\uB553\uB554\uB555\uB556\uB557\uB558\uB559"+
- "\uB55A\uB55B\uB55C\uB55D\uB561\uB562\uB563\uB564"+
- "\uB565\uB566\uB567\uB568\uB569\uB56A\uB56B\uB56C"+
- "\uB56D\uB56E\uB56F\uB570\uB571\uB573\uB574\uB575"+
- "\uB576\uB577\uB578\uB579\uB57A\uB57B\uB57C\uB57D"+
- "\uB581\uB582\uB583\uB584\uB585\uB586\uB587\uB588"+
- "\uB589\uB58A\uB58B\uB58C\uB58D\uB58E\uB58F\uB590"+
- "\uB591\uB593\uB594\uB595\uB596\uB597\uB598\uB599"+
- "\uB59A\uB59B\uB59C\uB59D\uB5A1\uB5A2\uB5A3\uB5A4"+
- "\uB5A5\uB5A6\uB5A7\uB5A8\uB5A9\uB5AA\uB5AB\uB5AC"+
- "\uB5AD\uB5AE\uB5AF\uB5B0\uB5B1\uB5B3\uB5B4\uB5B5"+
- "\uB5B6\uB5B7\uB5B8\uB5B9\uB5BA\uB5BB\uB5BC\uB5BD"+
- "\uB5C1\uB5C2\uB5C3\uB5C4\uB5C5\uB5C6\uB5C7\uB5C8"+
- "\uB5C9\uB5CA\uB5CB\uB5CC\uB5CD\uB5CE\uB5CF\uB5D0"+
- "\uB5D1\uB5D3\uB5D4\uB5D5\uB5D6\uB5D7\uB5D8\uB5D9"+
- "\uB5DA\uB5DB\uB5DC\uB5DD\uB5E1\uB5E2\uB5E3\uB5E4"+
- "\uB5E5\uB5E6\uB5E7\uB5E8\uB5E9\uB5EA\uB5EB\uB5EC"+
- "\uB5ED\uB5EE\uB5EF\uB5F0\uB5F1\uB5F3\uB5F4\uB5F5"+
- "\uB5F6\uB5F7\uB5F8\uB5F9\uB5FA\uB5FB\uB5FC\uB5FD"+
- "\uB641\uB642\uB643\uB644\uB645\uB646\uB647\uB648"+
- "\uB649\uB64A\uB64B\uB64C\uB64D\uB64E\uB64F\uB650"+
- "\uB651\uB653\uB654\uB655\uB656\uB657\uB658\uB659"+
- "\uB65A\uB65B\uB65C\uB65D\uB661\uB662\uB663\uB664"+
- "\uB665\uB666\uB667\uB668\uB669\uB66A\uB66B\uB66C"+
- "\uB66D\uB66E\uB66F\uB670\uB671\uB673\uB674\uB675"+
- "\uB676\uB677\uB678\uB679\uB67A\uB67B\uB67C\uB67D"+
- "\uB681\uB682\uB683\uB684\uB685\uB686\uB687\uB688"+
- "\uB689\uB68A\uB68B\uB68C\uB68D\uB68E\uB68F\uB690"+
- "\uB691\uB693\uB694\uB695\uB696\uB697\uB698\uB699"+
- "\uB69A\uB69B\uB69C\uB69D\uB6A1\uB6A2\uB6A3\uB6A4"+
- "\uB6A5\uB6A6\uB6A7\uB6A8\uB6A9\uB6AA\uB6AB\uB6AC"+
- "\uB6AD\uB6AE\uB6AF\uB6B0\uB6B1\uB6B3\uB6B4\uB6B5"+
- "\uB6B6\uB6B7\uB6B8\uB6B9\uB6BA\uB6BB\uB6BC\uB6BD"+
- "\uB6C1\uB6C2\uB6C3\uB6C4\uB6C5\uB6C6\uB6C7\uB6C8"+
- "\uB6C9\uB6CA\uB6CB\uB6CC\uB6CD\uB6CE\uB6CF\uB6D0"+
- "\uB6D1\uB6D3\uB6D4\uB6D5\uB6D6\uB6D7\uB6D8\uB6D9"+
- "\uB6DA\uB6DB\uB6DC\uB6DD\uB6E1\uB6E2\uB6E3\uB6E4"+
- "\uB6E5\uB6E6\uB6E7\uB6E8\uB6E9\uB6EA\uB6EB\uB6EC"+
- "\uB6ED\uB6EE\uB6EF\uB6F0\uB6F1\uB6F3\uB6F4\uB6F5"+
- "\uB6F6\uB6F7\uB6F8\uB6F9\uB6FA\uB6FB\uB6FC\uB6FD"+
- "\uB741\uB742\uB743\uB744\uB745\uB746\uB747\uB748"+
- "\uB749\uB74A\uB74B\uB74C\uB74D\uB74E\uB74F\uB750"+
- "\uB751\uB753\uB754\uB755\uB756\uB757\uB758\uB759"+
- "\uB75A\uB75B\uB75C\uB75D\uB761\uB762\uB763\uB764"+
- "\uB765\uB766\uB767\uB768\uB769\uB76A\uB76B\uB76C"+
- "\uB76D\uB76E\uB76F\uB770\uB771\uB773\uB774\uB775"+
- "\uB776\uB777\uB778\uB779\uB77A\uB77B\uB77C\uB77D"+
- "\uB781\uB782\uB783\uB784\uB785\uB786\uB787\uB788"+
- "\uB789\uB78A\uB78B\uB78C\uB78D\uB78E\uB78F\uB790"+
- "\uB791\uB793\uB794\uB795\uB796\uB797\uB798\uB799"+
- "\uB79A\uB79B\uB79C\uB79D\uB7A1\uB7A2\uB7A3\uB7A4"+
- "\uB7A5\uB7A6\uB7A7\uB7A8\uB7A9\uB7AA\uB7AB\uB7AC"+
- "\uB7AD\uB7AE\uB7AF\uB7B0\uB7B1\uB7B3\uB7B4\uB7B5"+
- "\uB7B6\uB7B7\uB7B8\uB7B9\uB7BA\uB7BB\uB7BC\uB7BD"+
- "\uB861\uB862\uB863\uB864\uB865\uB866\uB867\uB868"+
- "\uB869\uB86A\uB86B\uB86C\uB86D\uB86E\uB86F\uB870"+
- "\uB871\uB873\uB874\uB875\uB876\uB877\uB878\uB879"+
- "\uB87A\uB87B\uB87C\uB87D\uB881\uB882\uB883\uB884"+
- "\uB885\uB886\uB887\uB888\uB889\uB88A\uB88B\uB88C"+
- "\uB88D\uB88E\uB88F\uB890\uB891\uB893\uB894\uB895"+
- "\uB896\uB897\uB898\uB899\uB89A\uB89B\uB89C\uB89D"+
- "\uB8A1\uB8A2\uB8A3\uB8A4\uB8A5\uB8A6\uB8A7\uB8A8"+
- "\uB8A9\uB8AA\uB8AB\uB8AC\uB8AD\uB8AE\uB8AF\uB8B0"+
- "\uB8B1\uB8B3\uB8B4\uB8B5\uB8B6\uB8B7\uB8B8\uB8B9"+
- "\uB8BA\uB8BB\uB8BC\uB8BD\uB8C1\uB8C2\uB8C3\uB8C4"+
- "\uB8C5\uB8C6\uB8C7\uB8C8\uB8C9\uB8CA\uB8CB\uB8CC"+
- "\uB8CD\uB8CE\uB8CF\uB8D0\uB8D1\uB8D3\uB8D4\uB8D5"+
- "\uB8D6\uB8D7\uB8D8\uB8D9\uB8DA\uB8DB\uB8DC\uB8DD"+
- "\uB8E1\uB8E2\uB8E3\uB8E4\uB8E5\uB8E6\uB8E7\uB8E8"+
- "\uB8E9\uB8EA\uB8EB\uB8EC\uB8ED\uB8EE\uB8EF\uB8F0"+
- "\uB8F1\uB8F3\uB8F4\uB8F5\uB8F6\uB8F7\uB8F8\uB8F9"+
- "\uB8FA\uB8FB\uB8FC\uB8FD\uB941\uB942\uB943\uB944"+
- "\uB945\uB946\uB947\uB948\uB949\uB94A\uB94B\uB94C"+
- "\uB94D\uB94E\uB94F\uB950\uB951\uB953\uB954\uB955"+
- "\uB956\uB957\uB958\uB959\uB95A\uB95B\uB95C\uB95D"+
- "\uB961\uB962\uB963\uB964\uB965\uB966\uB967\uB968"+
- "\uB969\uB96A\uB96B\uB96C\uB96D\uB96E\uB96F\uB970"+
- "\uB971\uB973\uB974\uB975\uB976\uB977\uB978\uB979"+
- "\uB97A\uB97B\uB97C\uB97D\uB981\uB982\uB983\uB984"+
- "\uB985\uB986\uB987\uB988\uB989\uB98A\uB98B\uB98C"+
- "\uB98D\uB98E\uB98F\uB990\uB991\uB993\uB994\uB995"+
- "\uB996\uB997\uB998\uB999\uB99A\uB99B\uB99C\uB99D"+
- "\uB9A1\uB9A2\uB9A3\uB9A4\uB9A5\uB9A6\uB9A7\uB9A8"+
- "\uB9A9\uB9AA\uB9AB\uB9AC\uB9AD\uB9AE\uB9AF\uB9B0"+
- "\uB9B1\uB9B3\uB9B4\uB9B5\uB9B6\uB9B7\uB9B8\uB9B9"+
- "\uB9BA\uB9BB\uB9BC\uB9BD\uB9C1\uB9C2\uB9C3\uB9C4"+
- "\uB9C5\uB9C6\uB9C7\uB9C8\uB9C9\uB9CA\uB9CB\uB9CC"+
- "\uB9CD\uB9CE\uB9CF\uB9D0\uB9D1\uB9D3\uB9D4\uB9D5"+
- "\uB9D6\uB9D7\uB9D8\uB9D9\uB9DA\uB9DB\uB9DC\uB9DD"+
- "\uB9E1\uB9E2\uB9E3\uB9E4\uB9E5\uB9E6\uB9E7\uB9E8"+
- "\uB9E9\uB9EA\uB9EB\uB9EC\uB9ED\uB9EE\uB9EF\uB9F0"+
- "\uB9F1\uB9F3\uB9F4\uB9F5\uB9F6\uB9F7\uB9F8\uB9F9"+
- "\uB9FA\uB9FB\uB9FC\uB9FD\uBA41\uBA42\uBA43\uBA44"+
- "\uBA45\uBA46\uBA47\uBA48\uBA49\uBA4A\uBA4B\uBA4C"+
- "\uBA4D\uBA4E\uBA4F\uBA50\uBA51\uBA53\uBA54\uBA55"+
- "\uBA56\uBA57\uBA58\uBA59\uBA5A\uBA5B\uBA5C\uBA5D"+
- "\uBA61\uBA62\uBA63\uBA64\uBA65\uBA66\uBA67\uBA68"+
- "\uBA69\uBA6A\uBA6B\uBA6C\uBA6D\uBA6E\uBA6F\uBA70"+
- "\uBA71\uBA73\uBA74\uBA75\uBA76\uBA77\uBA78\uBA79"+
- "\uBA7A\uBA7B\uBA7C\uBA7D\uBA81\uBA82\uBA83\uBA84";
-
- private final static String innerIndex8=
- "\uBA85\uBA86\uBA87\uBA88\uBA89\uBA8A\uBA8B\uBA8C"+
- "\uBA8D\uBA8E\uBA8F\uBA90\uBA91\uBA93\uBA94\uBA95"+
- "\uBA96\uBA97\uBA98\uBA99\uBA9A\uBA9B\uBA9C\uBA9D"+
- "\uBAA1\uBAA2\uBAA3\uBAA4\uBAA5\uBAA6\uBAA7\uBAA8"+
- "\uBAA9\uBAAA\uBAAB\uBAAC\uBAAD\uBAAE\uBAAF\uBAB0"+
- "\uBAB1\uBAB3\uBAB4\uBAB5\uBAB6\uBAB7\uBAB8\uBAB9"+
- "\uBABA\uBABB\uBABC\uBABD\uBAC1\uBAC2\uBAC3\uBAC4"+
- "\uBAC5\uBAC6\uBAC7\uBAC8\uBAC9\uBACA\uBACB\uBACC"+
- "\uBACD\uBACE\uBACF\uBAD0\uBAD1\uBAD3\uBAD4\uBAD5"+
- "\uBAD6\uBAD7\uBAD8\uBAD9\uBADA\uBADB\uBADC\uBADD"+
- "\uBAE1\uBAE2\uBAE3\uBAE4\uBAE5\uBAE6\uBAE7\uBAE8"+
- "\uBAE9\uBAEA\uBAEB\uBAEC\uBAED\uBAEE\uBAEF\uBAF0"+
- "\uBAF1\uBAF3\uBAF4\uBAF5\uBAF6\uBAF7\uBAF8\uBAF9"+
- "\uBAFA\uBAFB\uBAFC\uBAFD\uBB41\uBB42\uBB43\uBB44"+
- "\uBB45\uBB46\uBB47\uBB48\uBB49\uBB4A\uBB4B\uBB4C"+
- "\uBB4D\uBB4E\uBB4F\uBB50\uBB51\uBB53\uBB54\uBB55"+
- "\uBB56\uBB57\uBB58\uBB59\uBB5A\uBB5B\uBB5C\uBB5D"+
- "\uBB61\uBB62\uBB63\uBB64\uBB65\uBB66\uBB67\uBB68"+
- "\uBB69\uBB6A\uBB6B\uBB6C\uBB6D\uBB6E\uBB6F\uBB70"+
- "\uBB71\uBB73\uBB74\uBB75\uBB76\uBB77\uBB78\uBB79"+
- "\uBB7A\uBB7B\uBB7C\uBB7D\uBB81\uBB82\uBB83\uBB84"+
- "\uBB85\uBB86\uBB87\uBB88\uBB89\uBB8A\uBB8B\uBB8C"+
- "\uBB8D\uBB8E\uBB8F\uBB90\uBB91\uBB93\uBB94\uBB95"+
- "\uBB96\uBB97\uBB98\uBB99\uBB9A\uBB9B\uBB9C\uBB9D"+
- "\uBBA1\uBBA2\uBBA3\uBBA4\uBBA5\uBBA6\uBBA7\uBBA8"+
- "\uBBA9\uBBAA\uBBAB\uBBAC\uBBAD\uBBAE\uBBAF\uBBB0"+
- "\uBBB1\uBBB3\uBBB4\uBBB5\uBBB6\uBBB7\uBBB8\uBBB9"+
- "\uBBBA\uBBBB\uBBBC\uBBBD\uBC61\uBC62\uBC63\uBC64"+
- "\uBC65\uBC66\uBC67\uBC68\uBC69\uBC6A\uBC6B\uBC6C"+
- "\uBC6D\uBC6E\uBC6F\uBC70\uBC71\uBC73\uBC74\uBC75"+
- "\uBC76\uBC77\uBC78\uBC79\uBC7A\uBC7B\uBC7C\uBC7D"+
- "\uBC81\uBC82\uBC83\uBC84\uBC85\uBC86\uBC87\uBC88"+
- "\uBC89\uBC8A\uBC8B\uBC8C\uBC8D\uBC8E\uBC8F\uBC90"+
- "\uBC91\uBC93\uBC94\uBC95\uBC96\uBC97\uBC98\uBC99"+
- "\uBC9A\uBC9B\uBC9C\uBC9D\uBCA1\uBCA2\uBCA3\uBCA4"+
- "\uBCA5\uBCA6\uBCA7\uBCA8\uBCA9\uBCAA\uBCAB\uBCAC"+
- "\uBCAD\uBCAE\uBCAF\uBCB0\uBCB1\uBCB3\uBCB4\uBCB5"+
- "\uBCB6\uBCB7\uBCB8\uBCB9\uBCBA\uBCBB\uBCBC\uBCBD"+
- "\uBCC1\uBCC2\uBCC3\uBCC4\uBCC5\uBCC6\uBCC7\uBCC8"+
- "\uBCC9\uBCCA\uBCCB\uBCCC\uBCCD\uBCCE\uBCCF\uBCD0"+
- "\uBCD1\uBCD3\uBCD4\uBCD5\uBCD6\uBCD7\uBCD8\uBCD9"+
- "\uBCDA\uBCDB\uBCDC\uBCDD\uBCE1\uBCE2\uBCE3\uBCE4"+
- "\uBCE5\uBCE6\uBCE7\uBCE8\uBCE9\uBCEA\uBCEB\uBCEC"+
- "\uBCED\uBCEE\uBCEF\uBCF0\uBCF1\uBCF3\uBCF4\uBCF5"+
- "\uBCF6\uBCF7\uBCF8\uBCF9\uBCFA\uBCFB\uBCFC\uBCFD"+
- "\uBD41\uBD42\uBD43\uBD44\uBD45\uBD46\uBD47\uBD48"+
- "\uBD49\uBD4A\uBD4B\uBD4C\uBD4D\uBD4E\uBD4F\uBD50"+
- "\uBD51\uBD53\uBD54\uBD55\uBD56\uBD57\uBD58\uBD59"+
- "\uBD5A\uBD5B\uBD5C\uBD5D\uBD61\uBD62\uBD63\uBD64"+
- "\uBD65\uBD66\uBD67\uBD68\uBD69\uBD6A\uBD6B\uBD6C"+
- "\uBD6D\uBD6E\uBD6F\uBD70\uBD71\uBD73\uBD74\uBD75"+
- "\uBD76\uBD77\uBD78\uBD79\uBD7A\uBD7B\uBD7C\uBD7D"+
- "\uBD81\uBD82\uBD83\uBD84\uBD85\uBD86\uBD87\uBD88"+
- "\uBD89\uBD8A\uBD8B\uBD8C\uBD8D\uBD8E\uBD8F\uBD90"+
- "\uBD91\uBD93\uBD94\uBD95\uBD96\uBD97\uBD98\uBD99"+
- "\uBD9A\uBD9B\uBD9C\uBD9D\uBDA1\uBDA2\uBDA3\uBDA4"+
- "\uBDA5\uBDA6\uBDA7\uBDA8\uBDA9\uBDAA\uBDAB\uBDAC"+
- "\uBDAD\uBDAE\uBDAF\uBDB0\uBDB1\uBDB3\uBDB4\uBDB5"+
- "\uBDB6\uBDB7\uBDB8\uBDB9\uBDBA\uBDBB\uBDBC\uBDBD"+
- "\uBDC1\uBDC2\uBDC3\uBDC4\uBDC5\uBDC6\uBDC7\uBDC8"+
- "\uBDC9\uBDCA\uBDCB\uBDCC\uBDCD\uBDCE\uBDCF\uBDD0"+
- "\uBDD1\uBDD3\uBDD4\uBDD5\uBDD6\uBDD7\uBDD8\uBDD9"+
- "\uBDDA\uBDDB\uBDDC\uBDDD\uBDE1\uBDE2\uBDE3\uBDE4"+
- "\uBDE5\uBDE6\uBDE7\uBDE8\uBDE9\uBDEA\uBDEB\uBDEC"+
- "\uBDED\uBDEE\uBDEF\uBDF0\uBDF1\uBDF3\uBDF4\uBDF5"+
- "\uBDF6\uBDF7\uBDF8\uBDF9\uBDFA\uBDFB\uBDFC\uBDFD"+
- "\uBE41\uBE42\uBE43\uBE44\uBE45\uBE46\uBE47\uBE48"+
- "\uBE49\uBE4A\uBE4B\uBE4C\uBE4D\uBE4E\uBE4F\uBE50"+
- "\uBE51\uBE53\uBE54\uBE55\uBE56\uBE57\uBE58\uBE59"+
- "\uBE5A\uBE5B\uBE5C\uBE5D\uBE61\uBE62\uBE63\uBE64"+
- "\uBE65\uBE66\uBE67\uBE68\uBE69\uBE6A\uBE6B\uBE6C"+
- "\uBE6D\uBE6E\uBE6F\uBE70\uBE71\uBE73\uBE74\uBE75"+
- "\uBE76\uBE77\uBE78\uBE79\uBE7A\uBE7B\uBE7C\uBE7D"+
- "\uBE81\uBE82\uBE83\uBE84\uBE85\uBE86\uBE87\uBE88"+
- "\uBE89\uBE8A\uBE8B\uBE8C\uBE8D\uBE8E\uBE8F\uBE90"+
- "\uBE91\uBE93\uBE94\uBE95\uBE96\uBE97\uBE98\uBE99"+
- "\uBE9A\uBE9B\uBE9C\uBE9D\uBEA1\uBEA2\uBEA3\uBEA4"+
- "\uBEA5\uBEA6\uBEA7\uBEA8\uBEA9\uBEAA\uBEAB\uBEAC"+
- "\uBEAD\uBEAE\uBEAF\uBEB0\uBEB1\uBEB3\uBEB4\uBEB5"+
- "\uBEB6\uBEB7\uBEB8\uBEB9\uBEBA\uBEBB\uBEBC\uBEBD"+
- "\uBEC1\uBEC2\uBEC3\uBEC4\uBEC5\uBEC6\uBEC7\uBEC8"+
- "\uBEC9\uBECA\uBECB\uBECC\uBECD\uBECE\uBECF\uBED0"+
- "\uBED1\uBED3\uBED4\uBED5\uBED6\uBED7\uBED8\uBED9"+
- "\uBEDA\uBEDB\uBEDC\uBEDD\uBEE1\uBEE2\uBEE3\uBEE4"+
- "\uBEE5\uBEE6\uBEE7\uBEE8\uBEE9\uBEEA\uBEEB\uBEEC"+
- "\uBEED\uBEEE\uBEEF\uBEF0\uBEF1\uBEF3\uBEF4\uBEF5"+
- "\uBEF6\uBEF7\uBEF8\uBEF9\uBEFA\uBEFB\uBEFC\uBEFD"+
- "\uBF41\uBF42\uBF43\uBF44\uBF45\uBF46\uBF47\uBF48"+
- "\uBF49\uBF4A\uBF4B\uBF4C\uBF4D\uBF4E\uBF4F\uBF50"+
- "\uBF51\uBF53\uBF54\uBF55\uBF56\uBF57\uBF58\uBF59"+
- "\uBF5A\uBF5B\uBF5C\uBF5D\uBF61\uBF62\uBF63\uBF64"+
- "\uBF65\uBF66\uBF67\uBF68\uBF69\uBF6A\uBF6B\uBF6C"+
- "\uBF6D\uBF6E\uBF6F\uBF70\uBF71\uBF73\uBF74\uBF75"+
- "\uBF76\uBF77\uBF78\uBF79\uBF7A\uBF7B\uBF7C\uBF7D"+
- "\uBF81\uBF82\uBF83\uBF84\uBF85\uBF86\uBF87\uBF88"+
- "\uBF89\uBF8A\uBF8B\uBF8C\uBF8D\uBF8E\uBF8F\uBF90"+
- "\uBF91\uBF93\uBF94\uBF95\uBF96\uBF97\uBF98\uBF99"+
- "\uBF9A\uBF9B\uBF9C\uBF9D\uBFA1\uBFA2\uBFA3\uBFA4"+
- "\uBFA5\uBFA6\uBFA7\uBFA8\uBFA9\uBFAA\uBFAB\uBFAC"+
- "\uBFAD\uBFAE\uBFAF\uBFB0\uBFB1\uBFB3\uBFB4\uBFB5"+
- "\uBFB6\uBFB7\uBFB8\uBFB9\uBFBA\uBFBB\uBFBC\uBFBD"+
- "\uC061\uC062\uC063\uC064\uC065\uC066\uC067\uC068"+
- "\uC069\uC06A\uC06B\uC06C\uC06D\uC06E\uC06F\uC070"+
- "\uC071\uC073\uC074\uC075\uC076\uC077\uC078\uC079"+
- "\uC07A\uC07B\uC07C\uC07D\uC081\uC082\uC083\uC084"+
- "\uC085\uC086\uC087\uC088\uC089\uC08A\uC08B\uC08C"+
- "\uC08D\uC08E\uC08F\uC090\uC091\uC093\uC094\uC095"+
- "\uC096\uC097\uC098\uC099\uC09A\uC09B\uC09C\uC09D"+
- "\uC0A1\uC0A2\uC0A3\uC0A4\uC0A5\uC0A6\uC0A7\uC0A8"+
- "\uC0A9\uC0AA\uC0AB\uC0AC\uC0AD\uC0AE\uC0AF\uC0B0"+
- "\uC0B1\uC0B3\uC0B4\uC0B5\uC0B6\uC0B7\uC0B8\uC0B9"+
- "\uC0BA\uC0BB\uC0BC\uC0BD\uC0C1\uC0C2\uC0C3\uC0C4"+
- "\uC0C5\uC0C6\uC0C7\uC0C8\uC0C9\uC0CA\uC0CB\uC0CC"+
- "\uC0CD\uC0CE\uC0CF\uC0D0\uC0D1\uC0D3\uC0D4\uC0D5"+
- "\uC0D6\uC0D7\uC0D8\uC0D9\uC0DA\uC0DB\uC0DC\uC0DD"+
- "\uC0E1\uC0E2\uC0E3\uC0E4\uC0E5\uC0E6\uC0E7\uC0E8"+
- "\uC0E9\uC0EA\uC0EB\uC0EC\uC0ED\uC0EE\uC0EF\uC0F0"+
- "\uC0F1\uC0F3\uC0F4\uC0F5\uC0F6\uC0F7\uC0F8\uC0F9"+
- "\uC0FA\uC0FB\uC0FC\uC0FD\uC141\uC142\uC143\uC144"+
- "\uC145\uC146\uC147\uC148\uC149\uC14A\uC14B\uC14C"+
- "\uC14D\uC14E\uC14F\uC150\uC151\uC153\uC154\uC155"+
- "\uC156\uC157\uC158\uC159\uC15A\uC15B\uC15C\uC15D"+
- "\uC161\uC162\uC163\uC164\uC165\uC166\uC167\uC168"+
- "\uC169\uC16A\uC16B\uC16C\uC16D\uC16E\uC16F\uC170"+
- "\uC171\uC173\uC174\uC175\uC176\uC177\uC178\uC179"+
- "\uC17A\uC17B\uC17C\uC17D\uC181\uC182\uC183\uC184"+
- "\uC185\uC186\uC187\uC188\uC189\uC18A\uC18B\uC18C"+
- "\uC18D\uC18E\uC18F\uC190\uC191\uC193\uC194\uC195"+
- "\uC196\uC197\uC198\uC199\uC19A\uC19B\uC19C\uC19D"+
- "\uC1A1\uC1A2\uC1A3\uC1A4\uC1A5\uC1A6\uC1A7\uC1A8"+
- "\uC1A9\uC1AA\uC1AB\uC1AC\uC1AD\uC1AE\uC1AF\uC1B0"+
- "\uC1B1\uC1B3\uC1B4\uC1B5\uC1B6\uC1B7\uC1B8\uC1B9"+
- "\uC1BA\uC1BB\uC1BC\uC1BD\uC1C1\uC1C2\uC1C3\uC1C4"+
- "\uC1C5\uC1C6\uC1C7\uC1C8\uC1C9\uC1CA\uC1CB\uC1CC"+
- "\uC1CD\uC1CE\uC1CF\uC1D0\uC1D1\uC1D3\uC1D4\uC1D5"+
- "\uC1D6\uC1D7\uC1D8\uC1D9\uC1DA\uC1DB\uC1DC\uC1DD"+
- "\uC1E1\uC1E2\uC1E3\uC1E4\uC1E5\uC1E6\uC1E7\uC1E8"+
- "\uC1E9\uC1EA\uC1EB\uC1EC\uC1ED\uC1EE\uC1EF\uC1F0"+
- "\uC1F1\uC1F3\uC1F4\uC1F5\uC1F6\uC1F7\uC1F8\uC1F9"+
- "\uC1FA\uC1FB\uC1FC\uC1FD\uC241\uC242\uC243\uC244"+
- "\uC245\uC246\uC247\uC248\uC249\uC24A\uC24B\uC24C"+
- "\uC24D\uC24E\uC24F\uC250\uC251\uC253\uC254\uC255"+
- "\uC256\uC257\uC258\uC259\uC25A\uC25B\uC25C\uC25D"+
- "\uC261\uC262\uC263\uC264\uC265\uC266\uC267\uC268"+
- "\uC269\uC26A\uC26B\uC26C\uC26D\uC26E\uC26F\uC270"+
- "\uC271\uC273\uC274\uC275\uC276\uC277\uC278\uC279"+
- "\uC27A\uC27B\uC27C\uC27D\uC281\uC282\uC283\uC284"+
- "\uC285\uC286\uC287\uC288\uC289\uC28A\uC28B\uC28C"+
- "\uC28D\uC28E\uC28F\uC290\uC291\uC293\uC294\uC295"+
- "\uC296\uC297\uC298\uC299\uC29A\uC29B\uC29C\uC29D"+
- "\uC2A1\uC2A2\uC2A3\uC2A4\uC2A5\uC2A6\uC2A7\uC2A8"+
- "\uC2A9\uC2AA\uC2AB\uC2AC\uC2AD\uC2AE\uC2AF\uC2B0"+
- "\uC2B1\uC2B3\uC2B4\uC2B5\uC2B6\uC2B7\uC2B8\uC2B9"+
- "\uC2BA\uC2BB\uC2BC\uC2BD\uC2C1\uC2C2\uC2C3\uC2C4"+
- "\uC2C5\uC2C6\uC2C7\uC2C8\uC2C9\uC2CA\uC2CB\uC2CC"+
- "\uC2CD\uC2CE\uC2CF\uC2D0\uC2D1\uC2D3\uC2D4\uC2D5"+
- "\uC2D6\uC2D7\uC2D8\uC2D9\uC2DA\uC2DB\uC2DC\uC2DD"+
- "\uC2E1\uC2E2\uC2E3\uC2E4\uC2E5\uC2E6\uC2E7\uC2E8"+
- "\uC2E9\uC2EA\uC2EB\uC2EC\uC2ED\uC2EE\uC2EF\uC2F0"+
- "\uC2F1\uC2F3\uC2F4\uC2F5\uC2F6\uC2F7\uC2F8\uC2F9"+
- "\uC2FA\uC2FB\uC2FC\uC2FD\uC341\uC342\uC343\uC344"+
- "\uC345\uC346\uC347\uC348\uC349\uC34A\uC34B\uC34C"+
- "\uC34D\uC34E\uC34F\uC350\uC351\uC353\uC354\uC355"+
- "\uC356\uC357\uC358\uC359\uC35A\uC35B\uC35C\uC35D"+
- "\uC361\uC362\uC363\uC364\uC365\uC366\uC367\uC368"+
- "\uC369\uC36A\uC36B\uC36C\uC36D\uC36E\uC36F\uC370"+
- "\uC371\uC373\uC374\uC375\uC376\uC377\uC378\uC379"+
- "\uC37A\uC37B\uC37C\uC37D\uC381\uC382\uC383\uC384"+
- "\uC385\uC386\uC387\uC388\uC389\uC38A\uC38B\uC38C"+
- "\uC38D\uC38E\uC38F\uC390\uC391\uC393\uC394\uC395"+
- "\uC396\uC397\uC398\uC399\uC39A\uC39B\uC39C\uC39D"+
- "\uC3A1\uC3A2\uC3A3\uC3A4\uC3A5\uC3A6\uC3A7\uC3A8"+
- "\uC3A9\uC3AA\uC3AB\uC3AC\uC3AD\uC3AE\uC3AF\uC3B0"+
- "\uC3B1\uC3B3\uC3B4\uC3B5\uC3B6\uC3B7\uC3B8\uC3B9"+
- "\uC3BA\uC3BB\uC3BC\uC3BD\uC461\uC462\uC463\uC464"+
- "\uC465\uC466\uC467\uC468\uC469\uC46A\uC46B\uC46C"+
- "\uC46D\uC46E\uC46F\uC470\uC471\uC473\uC474\uC475"+
- "\uC476\uC477\uC478\uC479\uC47A\uC47B\uC47C\uC47D"+
- "\uC481\uC482\uC483\uC484\uC485\uC486\uC487\uC488"+
- "\uC489\uC48A\uC48B\uC48C\uC48D\uC48E\uC48F\uC490"+
- "\uC491\uC493\uC494\uC495\uC496\uC497\uC498\uC499"+
- "\uC49A\uC49B\uC49C\uC49D\uC4A1\uC4A2\uC4A3\uC4A4"+
- "\uC4A5\uC4A6\uC4A7\uC4A8\uC4A9\uC4AA\uC4AB\uC4AC"+
- "\uC4AD\uC4AE\uC4AF\uC4B0\uC4B1\uC4B3\uC4B4\uC4B5"+
- "\uC4B6\uC4B7\uC4B8\uC4B9\uC4BA\uC4BB\uC4BC\uC4BD"+
- "\uC4C1\uC4C2\uC4C3\uC4C4\uC4C5\uC4C6\uC4C7\uC4C8"+
- "\uC4C9\uC4CA\uC4CB\uC4CC\uC4CD\uC4CE\uC4CF\uC4D0"+
- "\uC4D1\uC4D3\uC4D4\uC4D5\uC4D6\uC4D7\uC4D8\uC4D9"+
- "\uC4DA\uC4DB\uC4DC\uC4DD\uC4E1\uC4E2\uC4E3\uC4E4"+
- "\uC4E5\uC4E6\uC4E7\uC4E8\uC4E9\uC4EA\uC4EB\uC4EC"+
- "\uC4ED\uC4EE\uC4EF\uC4F0\uC4F1\uC4F3\uC4F4\uC4F5"+
- "\uC4F6\uC4F7\uC4F8\uC4F9\uC4FA\uC4FB\uC4FC\uC4FD"+
- "\uC541\uC542\uC543\uC544\uC545\uC546\uC547\uC548"+
- "\uC549\uC54A\uC54B\uC54C\uC54D\uC54E\uC54F\uC550"+
- "\uC551\uC553\uC554\uC555\uC556\uC557\uC558\uC559"+
- "\uC55A\uC55B\uC55C\uC55D\uC561\uC562\uC563\uC564"+
- "\uC565\uC566\uC567\uC568\uC569\uC56A\uC56B\uC56C"+
- "\uC56D\uC56E\uC56F\uC570\uC571\uC573\uC574\uC575"+
- "\uC576\uC577\uC578\uC579\uC57A\uC57B\uC57C\uC57D"+
- "\uC581\uC582\uC583\uC584\uC585\uC586\uC587\uC588"+
- "\uC589\uC58A\uC58B\uC58C\uC58D\uC58E\uC58F\uC590"+
- "\uC591\uC593\uC594\uC595\uC596\uC597\uC598\uC599"+
- "\uC59A\uC59B\uC59C\uC59D\uC5A1\uC5A2\uC5A3\uC5A4"+
- "\uC5A5\uC5A6\uC5A7\uC5A8\uC5A9\uC5AA\uC5AB\uC5AC"+
- "\uC5AD\uC5AE\uC5AF\uC5B0\uC5B1\uC5B3\uC5B4\uC5B5"+
- "\uC5B6\uC5B7\uC5B8\uC5B9\uC5BA\uC5BB\uC5BC\uC5BD"+
- "\uC5C1\uC5C2\uC5C3\uC5C4\uC5C5\uC5C6\uC5C7\uC5C8"+
- "\uC5C9\uC5CA\uC5CB\uC5CC\uC5CD\uC5CE\uC5CF\uC5D0"+
- "\uC5D1\uC5D3\uC5D4\uC5D5\uC5D6\uC5D7\uC5D8\uC5D9"+
- "\uC5DA\uC5DB\uC5DC\uC5DD\uC5E1\uC5E2\uC5E3\uC5E4"+
- "\uC5E5\uC5E6\uC5E7\uC5E8\uC5E9\uC5EA\uC5EB\uC5EC"+
- "\uC5ED\uC5EE\uC5EF\uC5F0\uC5F1\uC5F3\uC5F4\uC5F5"+
- "\uC5F6\uC5F7\uC5F8\uC5F9\uC5FA\uC5FB\uC5FC\uC5FD"+
- "\uC641\uC642\uC643\uC644\uC645\uC646\uC647\uC648"+
- "\uC649\uC64A\uC64B\uC64C\uC64D\uC64E\uC64F\uC650"+
- "\uC651\uC653\uC654\uC655\uC656\uC657\uC658\uC659"+
- "\uC65A\uC65B\uC65C\uC65D\uC661\uC662\uC663\uC664"+
- "\uC665\uC666\uC667\uC668\uC669\uC66A\uC66B\uC66C"+
- "\uC66D\uC66E\uC66F\uC670\uC671\uC673\uC674\uC675"+
- "\uC676\uC677\uC678\uC679\uC67A\uC67B\uC67C\uC67D"+
- "\uC681\uC682\uC683\uC684\uC685\uC686\uC687\uC688"+
- "\uC689\uC68A\uC68B\uC68C\uC68D\uC68E\uC68F\uC690"+
- "\uC691\uC693\uC694\uC695\uC696\uC697\uC698\uC699"+
- "\uC69A\uC69B\uC69C\uC69D\uC6A1\uC6A2\uC6A3\uC6A4"+
- "\uC6A5\uC6A6\uC6A7\uC6A8\uC6A9\uC6AA\uC6AB\uC6AC"+
- "\uC6AD\uC6AE\uC6AF\uC6B0\uC6B1\uC6B3\uC6B4\uC6B5"+
- "\uC6B6\uC6B7\uC6B8\uC6B9\uC6BA\uC6BB\uC6BC\uC6BD"+
- "\uC6C1\uC6C2\uC6C3\uC6C4\uC6C5\uC6C6\uC6C7\uC6C8"+
- "\uC6C9\uC6CA\uC6CB\uC6CC\uC6CD\uC6CE\uC6CF\uC6D0"+
- "\uC6D1\uC6D3\uC6D4\uC6D5\uC6D6\uC6D7\uC6D8\uC6D9"+
- "\uC6DA\uC6DB\uC6DC\uC6DD\uC6E1\uC6E2\uC6E3\uC6E4"+
- "\uC6E5\uC6E6\uC6E7\uC6E8\uC6E9\uC6EA\uC6EB\uC6EC"+
- "\uC6ED\uC6EE\uC6EF\uC6F0\uC6F1\uC6F3\uC6F4\uC6F5"+
- "\uC6F6\uC6F7\uC6F8\uC6F9\uC6FA\uC6FB\uC6FC\uC6FD"+
- "\uC741\uC742\uC743\uC744\uC745\uC746\uC747\uC748"+
- "\uC749\uC74A\uC74B\uC74C\uC74D\uC74E\uC74F\uC750"+
- "\uC751\uC753\uC754\uC755\uC756\uC757\uC758\uC759"+
- "\uC75A\uC75B\uC75C\uC75D\uC761\uC762\uC763\uC764"+
- "\uC765\uC766\uC767\uC768\uC769\uC76A\uC76B\uC76C"+
- "\uC76D\uC76E\uC76F\uC770\uC771\uC773\uC774\uC775"+
- "\uC776\uC777\uC778\uC779\uC77A\uC77B\uC77C\uC77D"+
- "\uC781\uC782\uC783\uC784\uC785\uC786\uC787\uC788"+
- "\uC789\uC78A\uC78B\uC78C\uC78D\uC78E\uC78F\uC790"+
- "\uC791\uC793\uC794\uC795\uC796\uC797\uC798\uC799"+
- "\uC79A\uC79B\uC79C\uC79D\uC7A1\uC7A2\uC7A3\uC7A4"+
- "\uC7A5\uC7A6\uC7A7\uC7A8\uC7A9\uC7AA\uC7AB\uC7AC"+
- "\uC7AD\uC7AE\uC7AF\uC7B0\uC7B1\uC7B3\uC7B4\uC7B5"+
- "\uC7B6\uC7B7\uC7B8\uC7B9\uC7BA\uC7BB\uC7BC\uC7BD"+
- "\uC861\uC862\uC863\uC864\uC865\uC866\uC867\uC868"+
- "\uC869\uC86A\uC86B\uC86C\uC86D\uC86E\uC86F\uC870"+
- "\uC871\uC873\uC874\uC875\uC876\uC877\uC878\uC879"+
- "\uC87A\uC87B\uC87C\uC87D\uC881\uC882\uC883\uC884"+
- "\uC885\uC886\uC887\uC888\uC889\uC88A\uC88B\uC88C"+
- "\uC88D\uC88E\uC88F\uC890\uC891\uC893\uC894\uC895"+
- "\uC896\uC897\uC898\uC899\uC89A\uC89B\uC89C\uC89D"+
- "\uC8A1\uC8A2\uC8A3\uC8A4\uC8A5\uC8A6\uC8A7\uC8A8"+
- "\uC8A9\uC8AA\uC8AB\uC8AC\uC8AD\uC8AE\uC8AF\uC8B0"+
- "\uC8B1\uC8B3\uC8B4\uC8B5\uC8B6\uC8B7\uC8B8\uC8B9"+
- "\uC8BA\uC8BB\uC8BC\uC8BD\uC8C1\uC8C2\uC8C3\uC8C4"+
- "\uC8C5\uC8C6\uC8C7\uC8C8\uC8C9\uC8CA\uC8CB\uC8CC"+
- "\uC8CD\uC8CE\uC8CF\uC8D0\uC8D1\uC8D3\uC8D4\uC8D5"+
- "\uC8D6\uC8D7\uC8D8\uC8D9\uC8DA\uC8DB\uC8DC\uC8DD"+
- "\uC8E1\uC8E2\uC8E3\uC8E4\uC8E5\uC8E6\uC8E7\uC8E8"+
- "\uC8E9\uC8EA\uC8EB\uC8EC\uC8ED\uC8EE\uC8EF\uC8F0"+
- "\uC8F1\uC8F3\uC8F4\uC8F5\uC8F6\uC8F7\uC8F8\uC8F9"+
- "\uC8FA\uC8FB\uC8FC\uC8FD\uC941\uC942\uC943\uC944"+
- "\uC945\uC946\uC947\uC948\uC949\uC94A\uC94B\uC94C"+
- "\uC94D\uC94E\uC94F\uC950\uC951\uC953\uC954\uC955"+
- "\uC956\uC957\uC958\uC959\uC95A\uC95B\uC95C\uC95D"+
- "\uC961\uC962\uC963\uC964\uC965\uC966\uC967\uC968"+
- "\uC969\uC96A\uC96B\uC96C\uC96D\uC96E\uC96F\uC970"+
- "\uC971\uC973\uC974\uC975\uC976\uC977\uC978\uC979"+
- "\uC97A\uC97B\uC97C\uC97D\uC981\uC982\uC983\uC984"+
- "\uC985\uC986\uC987\uC988\uC989\uC98A\uC98B\uC98C"+
- "\uC98D\uC98E\uC98F\uC990\uC991\uC993\uC994\uC995"+
- "\uC996\uC997\uC998\uC999\uC99A\uC99B\uC99C\uC99D"+
- "\uC9A1\uC9A2\uC9A3\uC9A4\uC9A5\uC9A6\uC9A7\uC9A8"+
- "\uC9A9\uC9AA\uC9AB\uC9AC\uC9AD\uC9AE\uC9AF\uC9B0"+
- "\uC9B1\uC9B3\uC9B4\uC9B5\uC9B6\uC9B7\uC9B8\uC9B9"+
- "\uC9BA\uC9BB\uC9BC\uC9BD\uC9C1\uC9C2\uC9C3\uC9C4"+
- "\uC9C5\uC9C6\uC9C7\uC9C8\uC9C9\uC9CA\uC9CB\uC9CC"+
- "\uC9CD\uC9CE\uC9CF\uC9D0\uC9D1\uC9D3\uC9D4\uC9D5"+
- "\uC9D6\uC9D7\uC9D8\uC9D9\uC9DA\uC9DB\uC9DC\uC9DD"+
- "\uC9E1\uC9E2\uC9E3\uC9E4\uC9E5\uC9E6\uC9E7\uC9E8"+
- "\uC9E9\uC9EA\uC9EB\uC9EC\uC9ED\uC9EE\uC9EF\uC9F0"+
- "\uC9F1\uC9F3\uC9F4\uC9F5\uC9F6\uC9F7\uC9F8\uC9F9"+
- "\uC9FA\uC9FB\uC9FC\uC9FD\uCA41\uCA42\uCA43\uCA44"+
- "\uCA45\uCA46\uCA47\uCA48\uCA49\uCA4A\uCA4B\uCA4C"+
- "\uCA4D\uCA4E\uCA4F\uCA50\uCA51\uCA53\uCA54\uCA55"+
- "\uCA56\uCA57\uCA58\uCA59\uCA5A\uCA5B\uCA5C\uCA5D"+
- "\uCA61\uCA62\uCA63\uCA64\uCA65\uCA66\uCA67\uCA68"+
- "\uCA69\uCA6A\uCA6B\uCA6C\uCA6D\uCA6E\uCA6F\uCA70"+
- "\uCA71\uCA73\uCA74\uCA75\uCA76\uCA77\uCA78\uCA79"+
- "\uCA7A\uCA7B\uCA7C\uCA7D\uCA81\uCA82\uCA83\uCA84"+
- "\uCA85\uCA86\uCA87\uCA88\uCA89\uCA8A\uCA8B\uCA8C"+
- "\uCA8D\uCA8E\uCA8F\uCA90\uCA91\uCA93\uCA94\uCA95"+
- "\uCA96\uCA97\uCA98\uCA99\uCA9A\uCA9B\uCA9C\uCA9D"+
- "\uCAA1\uCAA2\uCAA3\uCAA4\uCAA5\uCAA6\uCAA7\uCAA8"+
- "\uCAA9\uCAAA\uCAAB\uCAAC\uCAAD\uCAAE\uCAAF\uCAB0"+
- "\uCAB1\uCAB3\uCAB4\uCAB5\uCAB6\uCAB7\uCAB8\uCAB9"+
- "\uCABA\uCABB\uCABC\uCABD\uCAC1\uCAC2\uCAC3\uCAC4"+
- "\uCAC5\uCAC6\uCAC7\uCAC8\uCAC9\uCACA\uCACB\uCACC"+
- "\uCACD\uCACE\uCACF\uCAD0\uCAD1\uCAD3\uCAD4\uCAD5"+
- "\uCAD6\uCAD7\uCAD8\uCAD9\uCADA\uCADB\uCADC\uCADD"+
- "\uCAE1\uCAE2\uCAE3\uCAE4\uCAE5\uCAE6\uCAE7\uCAE8"+
- "\uCAE9\uCAEA\uCAEB\uCAEC\uCAED\uCAEE\uCAEF\uCAF0"+
- "\uCAF1\uCAF3\uCAF4\uCAF5\uCAF6\uCAF7\uCAF8\uCAF9"+
- "\uCAFA\uCAFB\uCAFC\uCAFD\uCB41\uCB42\uCB43\uCB44"+
- "\uCB45\uCB46\uCB47\uCB48\uCB49\uCB4A\uCB4B\uCB4C"+
- "\uCB4D\uCB4E\uCB4F\uCB50\uCB51\uCB53\uCB54\uCB55"+
- "\uCB56\uCB57\uCB58\uCB59\uCB5A\uCB5B\uCB5C\uCB5D"+
- "\uCB61\uCB62\uCB63\uCB64\uCB65\uCB66\uCB67\uCB68"+
- "\uCB69\uCB6A\uCB6B\uCB6C\uCB6D\uCB6E\uCB6F\uCB70"+
- "\uCB71\uCB73\uCB74\uCB75\uCB76\uCB77\uCB78\uCB79"+
- "\uCB7A\uCB7B\uCB7C\uCB7D\uCB81\uCB82\uCB83\uCB84"+
- "\uCB85\uCB86\uCB87\uCB88\uCB89\uCB8A\uCB8B\uCB8C"+
- "\uCB8D\uCB8E\uCB8F\uCB90\uCB91\uCB93\uCB94\uCB95"+
- "\uCB96\uCB97\uCB98\uCB99\uCB9A\uCB9B\uCB9C\uCB9D"+
- "\uCBA1\uCBA2\uCBA3\uCBA4\uCBA5\uCBA6\uCBA7\uCBA8"+
- "\uCBA9\uCBAA\uCBAB\uCBAC\uCBAD\uCBAE\uCBAF\uCBB0"+
- "\uCBB1\uCBB3\uCBB4\uCBB5\uCBB6\uCBB7\uCBB8\uCBB9"+
- "\uCBBA\uCBBB\uCBBC\uCBBD\uCC61\uCC62\uCC63\uCC64"+
- "\uCC65\uCC66\uCC67\uCC68\uCC69\uCC6A\uCC6B\uCC6C"+
- "\uCC6D\uCC6E\uCC6F\uCC70\uCC71\uCC73\uCC74\uCC75"+
- "\uCC76\uCC77\uCC78\uCC79\uCC7A\uCC7B\uCC7C\uCC7D"+
- "\uCC81\uCC82\uCC83\uCC84\uCC85\uCC86\uCC87\uCC88"+
- "\uCC89\uCC8A\uCC8B\uCC8C\uCC8D\uCC8E\uCC8F\uCC90"+
- "\uCC91\uCC93\uCC94\uCC95\uCC96\uCC97\uCC98\uCC99"+
- "\uCC9A\uCC9B\uCC9C\uCC9D\uCCA1\uCCA2\uCCA3\uCCA4"+
- "\uCCA5\uCCA6\uCCA7\uCCA8\uCCA9\uCCAA\uCCAB\uCCAC"+
- "\uCCAD\uCCAE\uCCAF\uCCB0\uCCB1\uCCB3\uCCB4\uCCB5"+
- "\uCCB6\uCCB7\uCCB8\uCCB9\uCCBA\uCCBB\uCCBC\uCCBD"+
- "\uCCC1\uCCC2\uCCC3\uCCC4\uCCC5\uCCC6\uCCC7\uCCC8"+
- "\uCCC9\uCCCA\uCCCB\uCCCC\uCCCD\uCCCE\uCCCF\uCCD0"+
- "\uCCD1\uCCD3\uCCD4\uCCD5\uCCD6\uCCD7\uCCD8\uCCD9"+
- "\uCCDA\uCCDB\uCCDC\uCCDD\uCCE1\uCCE2\uCCE3\uCCE4"+
- "\uCCE5\uCCE6\uCCE7\uCCE8\uCCE9\uCCEA\uCCEB\uCCEC"+
- "\uCCED\uCCEE\uCCEF\uCCF0\uCCF1\uCCF3\uCCF4\uCCF5"+
- "\uCCF6\uCCF7\uCCF8\uCCF9\uCCFA\uCCFB\uCCFC\uCCFD"+
- "\uCD41\uCD42\uCD43\uCD44\uCD45\uCD46\uCD47\uCD48"+
- "\uCD49\uCD4A\uCD4B\uCD4C\uCD4D\uCD4E\uCD4F\uCD50"+
- "\uCD51\uCD53\uCD54\uCD55\uCD56\uCD57\uCD58\uCD59"+
- "\uCD5A\uCD5B\uCD5C\uCD5D\uCD61\uCD62\uCD63\uCD64"+
- "\uCD65\uCD66\uCD67\uCD68\uCD69\uCD6A\uCD6B\uCD6C"+
- "\uCD6D\uCD6E\uCD6F\uCD70\uCD71\uCD73\uCD74\uCD75"+
- "\uCD76\uCD77\uCD78\uCD79\uCD7A\uCD7B\uCD7C\uCD7D"+
- "\uCD81\uCD82\uCD83\uCD84\uCD85\uCD86\uCD87\uCD88"+
- "\uCD89\uCD8A\uCD8B\uCD8C\uCD8D\uCD8E\uCD8F\uCD90"+
- "\uCD91\uCD93\uCD94\uCD95\uCD96\uCD97\uCD98\uCD99"+
- "\uCD9A\uCD9B\uCD9C\uCD9D\uCDA1\uCDA2\uCDA3\uCDA4"+
- "\uCDA5\uCDA6\uCDA7\uCDA8\uCDA9\uCDAA\uCDAB\uCDAC"+
- "\uCDAD\uCDAE\uCDAF\uCDB0\uCDB1\uCDB3\uCDB4\uCDB5"+
- "\uCDB6\uCDB7\uCDB8\uCDB9\uCDBA\uCDBB\uCDBC\uCDBD"+
- "\uCDC1\uCDC2\uCDC3\uCDC4\uCDC5\uCDC6\uCDC7\uCDC8"+
- "\uCDC9\uCDCA\uCDCB\uCDCC\uCDCD\uCDCE\uCDCF\uCDD0"+
- "\uCDD1\uCDD3\uCDD4\uCDD5\uCDD6\uCDD7\uCDD8\uCDD9"+
- "\uCDDA\uCDDB\uCDDC\uCDDD\uCDE1\uCDE2\uCDE3\uCDE4"+
- "\uCDE5\uCDE6\uCDE7\uCDE8\uCDE9\uCDEA\uCDEB\uCDEC"+
- "\uCDED\uCDEE\uCDEF\uCDF0\uCDF1\uCDF3\uCDF4\uCDF5"+
- "\uCDF6\uCDF7\uCDF8\uCDF9\uCDFA\uCDFB\uCDFC\uCDFD"+
- "\uCE41\uCE42\uCE43\uCE44\uCE45\uCE46\uCE47\uCE48"+
- "\uCE49\uCE4A\uCE4B\uCE4C\uCE4D\uCE4E\uCE4F\uCE50"+
- "\uCE51\uCE53\uCE54\uCE55\uCE56\uCE57\uCE58\uCE59"+
- "\uCE5A\uCE5B\uCE5C\uCE5D\uCE61\uCE62\uCE63\uCE64"+
- "\uCE65\uCE66\uCE67\uCE68\uCE69\uCE6A\uCE6B\uCE6C"+
- "\uCE6D\uCE6E\uCE6F\uCE70\uCE71\uCE73\uCE74\uCE75"+
- "\uCE76\uCE77\uCE78\uCE79\uCE7A\uCE7B\uCE7C\uCE7D"+
- "\uCE81\uCE82\uCE83\uCE84\uCE85\uCE86\uCE87\uCE88"+
- "\uCE89\uCE8A\uCE8B\uCE8C\uCE8D\uCE8E\uCE8F\uCE90"+
- "\uCE91\uCE93\uCE94\uCE95\uCE96\uCE97\uCE98\uCE99"+
- "\uCE9A\uCE9B\uCE9C\uCE9D\uCEA1\uCEA2\uCEA3\uCEA4"+
- "\uCEA5\uCEA6\uCEA7\uCEA8\uCEA9\uCEAA\uCEAB\uCEAC"+
- "\uCEAD\uCEAE\uCEAF\uCEB0\uCEB1\uCEB3\uCEB4\uCEB5"+
- "\uCEB6\uCEB7\uCEB8\uCEB9\uCEBA\uCEBB\uCEBC\uCEBD"+
- "\uCEC1\uCEC2\uCEC3\uCEC4\uCEC5\uCEC6\uCEC7\uCEC8"+
- "\uCEC9\uCECA\uCECB\uCECC\uCECD\uCECE\uCECF\uCED0"+
- "\uCED1\uCED3\uCED4\uCED5\uCED6\uCED7\uCED8\uCED9"+
- "\uCEDA\uCEDB\uCEDC\uCEDD\uCEE1\uCEE2\uCEE3\uCEE4"+
- "\uCEE5\uCEE6\uCEE7\uCEE8\uCEE9\uCEEA\uCEEB\uCEEC"+
- "\uCEED\uCEEE\uCEEF\uCEF0\uCEF1\uCEF3\uCEF4\uCEF5"+
- "\uCEF6\uCEF7\uCEF8\uCEF9\uCEFA\uCEFB\uCEFC\uCEFD"+
- "\uCF41\uCF42\uCF43\uCF44\uCF45\uCF46\uCF47\uCF48"+
- "\uCF49\uCF4A\uCF4B\uCF4C\uCF4D\uCF4E\uCF4F\uCF50"+
- "\uCF51\uCF53\uCF54\uCF55\uCF56\uCF57\uCF58\uCF59"+
- "\uCF5A\uCF5B\uCF5C\uCF5D\uCF61\uCF62\uCF63\uCF64"+
- "\uCF65\uCF66\uCF67\uCF68\uCF69\uCF6A\uCF6B\uCF6C"+
- "\uCF6D\uCF6E\uCF6F\uCF70\uCF71\uCF73\uCF74\uCF75"+
- "\uCF76\uCF77\uCF78\uCF79\uCF7A\uCF7B\uCF7C\uCF7D"+
- "\uCF81\uCF82\uCF83\uCF84\uCF85\uCF86\uCF87\uCF88"+
- "\uCF89\uCF8A\uCF8B\uCF8C\uCF8D\uCF8E\uCF8F\uCF90"+
- "\uCF91\uCF93\uCF94\uCF95\uCF96\uCF97\uCF98\uCF99"+
- "\uCF9A\uCF9B\uCF9C\uCF9D\uCFA1\uCFA2\uCFA3\uCFA4"+
- "\uCFA5\uCFA6\uCFA7\uCFA8\uCFA9\uCFAA\uCFAB\uCFAC"+
- "\uCFAD\uCFAE\uCFAF\uCFB0\uCFB1\uCFB3\uCFB4\uCFB5"+
- "\uCFB6\uCFB7\uCFB8\uCFB9\uCFBA\uCFBB\uCFBC\uCFBD"+
- "\uD061\uD062\uD063\uD064\uD065\uD066\uD067\uD068"+
- "\uD069\uD06A\uD06B\uD06C\uD06D\uD06E\uD06F\uD070"+
- "\uD071\uD073\uD074\uD075\uD076\uD077\uD078\uD079"+
- "\uD07A\uD07B\uD07C\uD07D\uD081\uD082\uD083\uD084"+
- "\uD085\uD086\uD087\uD088\uD089\uD08A\uD08B\uD08C"+
- "\uD08D\uD08E\uD08F\uD090\uD091\uD093\uD094\uD095"+
- "\uD096\uD097\uD098\uD099\uD09A\uD09B\uD09C\uD09D"+
- "\uD0A1\uD0A2\uD0A3\uD0A4\uD0A5\uD0A6\uD0A7\uD0A8"+
- "\uD0A9\uD0AA\uD0AB\uD0AC\uD0AD\uD0AE\uD0AF\uD0B0"+
- "\uD0B1\uD0B3\uD0B4\uD0B5\uD0B6\uD0B7\uD0B8\uD0B9"+
- "\uD0BA\uD0BB\uD0BC\uD0BD\uD0C1\uD0C2\uD0C3\uD0C4"+
- "\uD0C5\uD0C6\uD0C7\uD0C8\uD0C9\uD0CA\uD0CB\uD0CC"+
- "\uD0CD\uD0CE\uD0CF\uD0D0\uD0D1\uD0D3\uD0D4\uD0D5"+
- "\uD0D6\uD0D7\uD0D8\uD0D9\uD0DA\uD0DB\uD0DC\uD0DD"+
- "\uD0E1\uD0E2\uD0E3\uD0E4\uD0E5\uD0E6\uD0E7\uD0E8"+
- "\uD0E9\uD0EA\uD0EB\uD0EC\uD0ED\uD0EE\uD0EF\uD0F0"+
- "\uD0F1\uD0F3\uD0F4\uD0F5\uD0F6\uD0F7\uD0F8\uD0F9"+
- "\uD0FA\uD0FB\uD0FC\uD0FD\uD141\uD142\uD143\uD144"+
- "\uD145\uD146\uD147\uD148\uD149\uD14A\uD14B\uD14C"+
- "\uD14D\uD14E\uD14F\uD150\uD151\uD153\uD154\uD155"+
- "\uD156\uD157\uD158\uD159\uD15A\uD15B\uD15C\uD15D"+
- "\uD161\uD162\uD163\uD164\uD165\uD166\uD167\uD168"+
- "\uD169\uD16A\uD16B\uD16C\uD16D\uD16E\uD16F\uD170"+
- "\uD171\uD173\uD174\uD175\uD176\uD177\uD178\uD179"+
- "\uD17A\uD17B\uD17C\uD17D\uD181\uD182\uD183\uD184"+
- "\uD185\uD186\uD187\uD188\uD189\uD18A\uD18B\uD18C"+
- "\uD18D\uD18E\uD18F\uD190\uD191\uD193\uD194\uD195"+
- "\uD196\uD197\uD198\uD199\uD19A\uD19B\uD19C\uD19D"+
- "\uD1A1\uD1A2\uD1A3\uD1A4\uD1A5\uD1A6\uD1A7\uD1A8"+
- "\uD1A9\uD1AA\uD1AB\uD1AC\uD1AD\uD1AE\uD1AF\uD1B0"+
- "\uD1B1\uD1B3\uD1B4\uD1B5\uD1B6\uD1B7\uD1B8\uD1B9"+
- "\uD1BA\uD1BB\uD1BC\uD1BD\uD1C1\uD1C2\uD1C3\uD1C4"+
- "\uD1C5\uD1C6\uD1C7\uD1C8\uD1C9\uD1CA\uD1CB\uD1CC"+
- "\uD1CD\uD1CE\uD1CF\uD1D0\uD1D1\uD1D3\uD1D4\uD1D5"+
- "\uD1D6\uD1D7\uD1D8\uD1D9\uD1DA\uD1DB\uD1DC\uD1DD"+
- "\uD1E1\uD1E2\uD1E3\uD1E4\uD1E5\uD1E6\uD1E7\uD1E8"+
- "\uD1E9\uD1EA\uD1EB\uD1EC\uD1ED\uD1EE\uD1EF\uD1F0"+
- "\uD1F1\uD1F3\uD1F4\uD1F5\uD1F6\uD1F7\uD1F8\uD1F9"+
- "\uD1FA\uD1FB\uD1FC\uD1FD\uD241\uD242\uD243\uD244"+
- "\uD245\uD246\uD247\uD248\uD249\uD24A\uD24B\uD24C"+
- "\uD24D\uD24E\uD24F\uD250\uD251\uD253\uD254\uD255"+
- "\uD256\uD257\uD258\uD259\uD25A\uD25B\uD25C\uD25D"+
- "\uD261\uD262\uD263\uD264\uD265\uD266\uD267\uD268"+
- "\uD269\uD26A\uD26B\uD26C\uD26D\uD26E\uD26F\uD270"+
- "\uD271\uD273\uD274\uD275\uD276\uD277\uD278\uD279"+
- "\uD27A\uD27B\uD27C\uD27D\uD281\uD282\uD283\uD284"+
- "\uD285\uD286\uD287\uD288\uD289\uD28A\uD28B\uD28C"+
- "\uD28D\uD28E\uD28F\uD290\uD291\uD293\uD294\uD295"+
- "\uD296\uD297\uD298\uD299\uD29A\uD29B\uD29C\uD29D"+
- "\uD2A1\uD2A2\uD2A3\uD2A4\uD2A5\uD2A6\uD2A7\uD2A8"+
- "\uD2A9\uD2AA\uD2AB\uD2AC\uD2AD\uD2AE\uD2AF\uD2B0"+
- "\uD2B1\uD2B3\uD2B4\uD2B5\uD2B6\uD2B7\uD2B8\uD2B9"+
- "\uD2BA\uD2BB\uD2BC\uD2BD\uD2C1\uD2C2\uD2C3\uD2C4"+
- "\uD2C5\uD2C6\uD2C7\uD2C8\uD2C9\uD2CA\uD2CB\uD2CC"+
- "\uD2CD\uD2CE\uD2CF\uD2D0\uD2D1\uD2D3\uD2D4\uD2D5"+
- "\uD2D6\uD2D7\uD2D8\uD2D9\uD2DA\uD2DB\uD2DC\uD2DD"+
- "\uD2E1\uD2E2\uD2E3\uD2E4\uD2E5\uD2E6\uD2E7\uD2E8"+
- "\uD2E9\uD2EA\uD2EB\uD2EC\uD2ED\uD2EE\uD2EF\uD2F0"+
- "\uD2F1\uD2F3\uD2F4\uD2F5\uD2F6\uD2F7\uD2F8\uD2F9"+
- "\uD2FA\uD2FB\uD2FC\uD2FD\uD341\uD342\uD343\uD344"+
- "\uD345\uD346\uD347\uD348\uD349\uD34A\uD34B\uD34C"+
- "\uD34D\uD34E\uD34F\uD350\uD351\uD353\uD354\uD355"+
- "\uD356\uD357\uD358\uD359\uD35A\uD35B\uD35C\uD35D"+
- "\uD361\uD362\uD363\uD364\uD365\uD366\uD367\uD368"+
- "\uD369\uD36A\uD36B\uD36C\uD36D\uD36E\uD36F\uD370"+
- "\uD371\uD373\uD374\uD375\uD376\uD377\uD378\uD379"+
- "\uD37A\uD37B\uD37C\uD37D\uD381\uD382\uD383\uD384"+
- "\uD385\uD386\uD387\uD388\uD389\uD38A\uD38B\uD38C"+
- "\uD38D\uD38E\uD38F\uD390\uD391\uD393\uD394\uD395"+
- "\uD396\uD397\uD398\uD399\uD39A\uD39B\uD39C\uD39D"+
- "\uD3A1\uD3A2\uD3A3\uD3A4\uD3A5\uD3A6\uD3A7\uD3A8"+
- "\uD3A9\uD3AA\uD3AB\uD3AC\uD3AD\uD3AE\uD3AF\uD3B0"+
- "\uD3B1\uD3B3\uD3B4\uD3B5\uD3B6\uD3B7\uD3B8\uD3B9"+
- "\uD3BA\uD3BB\uD3BC\uD3BD\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE0D0\uE0D6\uE0E7\uE1CF\uE1E8\uE23D\uE2FB\uE332"+
- "\uE348\uE360\uE36D\uE3D4\uE3D5\uE3D8\uE3DB\uE3DC"+
- "\uE3DD\uE3DE\uE3DF\uE3E0\uE3E2\uE3E3\uE3E4\uE3E5"+
- "\uE3E6\uE3E8\uE3E9\uE3EA\uE3EB\uE3ED\uE3EF\uE3F0"+
- "\uE3F2\uE3F6\uE3FA\uE3FC\uE3FD\uE3FE\uE432\uE433"+
- "\uE437\uE438\uE439\uE43A\uE43B\uE43D\uE442\uE44E"+
- "\uE452\uE453\uE454\uE456\uE457\uE458\uE459\uE45A"+
- "\uE45B\uE45D\uE45E\uE45F\uE460\uE461\uE462\uE463"+
- "\uE464\uE465\uE466\uE467\uE469\uE46A\uE46E\uE46F"+
- "\uE471\uE472\uE474\uE475\uE476\uE477\uE478\uE479"+
- "\uE47A\uE47B\uE492\uE493\uE494\uE495\uE496\uE497"+
- "\uE499\uE49A\uE576\uE59E\uE5A5\uE5AB\uE5AE\uE648"+
- "\uE65D\uE6CB\uE6E4\uE8C5\uE8E4\uE935\uE9A5\uE9D5"+
- "\uE9F4\uEA9E\uEAA0\uEAB3\uEAE1\uEAE8\uEB93\uEBAD"+
- "\uEBED\uECF5\uED31\uED39\uEDAE\uEDB1\uEDB2\uEDB9"+
- "\uEDBB\uEDBC\uEDC4\uEDCE\uEDD0\uEDD2\uEDD6\uEDFA"+
- "\uEDFB\uEDFC\uEDFE\uEE31\uEE34\uEE37\uEE3D\uEE3F"+
- "\uEE40\uEE41\uEE43\uEE47\uEE48\uEE4C\uEE54\uEE56"+
- "\uEE57\uEE5A\uEE62\uEE66\uEE69\uEE6C\uEE6F\uEE71"+
- "\uEE74\uEE75\uEE76\uEE78\uEE7A\uEE7B\uEE7C\uEE91"+
- "\uEE93\uEE94\uEE97\uEE98\uEE99\uEE9B\uEEA1\uEEA6"+
- "\uEEA9\uEEAA\uEEAC\uEEAD\uEEB0\uEEBF\uEEC1\uEEC6"+
- "\uEEC7\uEECB\uEECD\uEECF\uEED0\uEED3\uEEDF\uEEE4"+
- "\uEEE6\uEEF7\uEF77\uEF78\uEF92\uEF93\uEF99\uEF9B"+
- "\uEF9D\uEFA0\uEFA7\uEFAC\uEFCC\uEFF7\uF051\uF075"+
- "\uF096\uF099\uF09E\uF0A0\uF0A4\uF0A7\uF0A9\uF0AA"+
- "\uF0BA\uF0BB\uF0BD\uF0C1\uF0C2\uF0C6\uF0C7\uF0CC"+
- "\uF0CF\uF0D0\uF0D1\uF0D2\uF0D8\uF136\uF137\uF13A"+
- "\uF13F\uF140\uF141\uF142\uF145\uF148\uF14A\uF150"+
- "\uF151\uF155\uF156\uF159\uF15A\uF165\uF16D\uF16E"+
- "\uF171\uF174\uF177\uF178\uF199\uF19A\uF19C\uF1A1"+
- "\uF1A2\uF1A3\uF1EE\uF26B\uF44D\uF49C\uF4B1\uF537";
-
- private final static String innerIndex9=
- "\uF57E\uF696\uF698\uF6B8\uF6C8\uF6D3\uF76B\uF792"+
- "\uF831\uF832\uF876\uF939\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uDA31\uDA32\uDA33\uDA34\uDA35\uDA36\uDA37"+
- "\uDA38\uDA39\uDA3A\uDA3B\uDA3C\uDA3D\uDA3E\uDA3F"+
- "\uDA40\uDA41\uDA42\uDA43\uDA44\uDA45\uDA46\uDA47"+
- "\uDA48\uDA49\uDA4A\uDA4B\uDA4C\uDA4D\uDA4E\uDA4F"+
- "\uDA50\uDA51\uDA52\uDA53\uDA54\uDA55\uDA56\uDA57"+
- "\uDA58\uDA59\uDA5A\uDA5B\uDA5C\uDA5D\uDA5E\uDA5F"+
- "\uDA60\uDA61\uDA62\uDA63\uDA64\uDA65\uDA66\uDA67"+
- "\uDA68\uDA69\uDA6A\uDA6B\uD93C\uDA6D\uDA6E\uDA6F"+
- "\uDA70\uDA71\uDA72\uDA73\uDA74\uDA75\uDA76\uDA77"+
- "\uDA78\uDA79\uDA7A\uDA7B\uDA7C\uDA7D\uDA7E\uDA91"+
- "\uDA92\uDA93\uDA94\uDA95\uDA96\uDA97\uDA98\uDA99"+
- "\uDA9A\uDA9B\uDA9C\uDA9D\uDA9E\uDA9F\uD9A6\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uD95B\uD95C\uD9A0\uDAA0\u0000\uD95D\uDA6C\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
- private final static short index1[] = {
- 1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18,
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 100, 101, 102,
- 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
- 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
- 135, 136, 137, 138, 139, 140, 141, 142, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 144, 0, 0, 0, 0, 145
- };
-
- String index2[] = {
- innerIndex0,
- innerIndex1,
- innerIndex2,
- innerIndex3,
- innerIndex4,
- innerIndex5,
- innerIndex6,
- innerIndex7,
- innerIndex8,
- innerIndex9
- };
}
--- a/jdk/src/share/classes/sun/net/httpserver/Request.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/net/httpserver/Request.java Tue Apr 21 21:26:21 2009 -0700
@@ -52,6 +52,9 @@
os = rawout;
do {
startLine = readLine();
+ if (startLine == null) {
+ return;
+ }
/* skip blank lines */
} while (startLine == null ? false : startLine.equals (""));
}
--- a/jdk/src/share/classes/sun/net/httpserver/ServerImpl.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/net/httpserver/ServerImpl.java Tue Apr 21 21:26:21 2009 -0700
@@ -433,6 +433,7 @@
rawin = sslStreams.getInputStream();
rawout = sslStreams.getOutputStream();
engine = sslStreams.getSSLEngine();
+ connection.sslStreams = sslStreams;
} else {
rawin = new BufferedInputStream(
new Request.ReadStream (
@@ -442,6 +443,8 @@
ServerImpl.this, chan
);
}
+ connection.raw = rawin;
+ connection.rawout = rawout;
}
Request req = new Request (rawin, rawout);
requestLine = req.requestLine();
--- a/jdk/src/share/classes/sun/nio/ch/AsynchronousFileChannelImpl.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/nio/ch/AsynchronousFileChannelImpl.java Tue Apr 21 21:26:21 2009 -0700
@@ -113,16 +113,16 @@
}
}
- final void invalidateAllLocks() {
+ final void invalidateAllLocks() throws IOException {
if (fileLockTable != null) {
- try {
- fileLockTable.removeAll( new FileLockTable.Releaser() {
- public void release(FileLock fl) {
- ((FileLockImpl)fl).invalidate();
+ for (FileLock fl: fileLockTable.removeAll()) {
+ synchronized (fl) {
+ if (fl.isValid()) {
+ FileLockImpl fli = (FileLockImpl)fl;
+ implRelease(fli);
+ fli.invalidate();
}
- });
- } catch (IOException e) {
- throw new AssertionError(e);
+ }
}
}
}
@@ -158,7 +158,21 @@
}
/**
- * Invoked by FileLockImpl to release lock acquired by this channel.
+ * Releases the given file lock.
+ */
+ protected abstract void implRelease(FileLockImpl fli) throws IOException;
+
+ /**
+ * Invoked by FileLockImpl to release the given file lock and remove it
+ * from the lock table.
*/
- abstract void release(FileLockImpl fli) throws IOException;
+ final void release(FileLockImpl fli) throws IOException {
+ try {
+ begin();
+ implRelease(fli);
+ removeFromFileLockTable(fli);
+ } finally {
+ end();
+ }
+ }
}
--- a/jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java Tue Apr 21 21:26:21 2009 -0700
@@ -33,8 +33,6 @@
import java.nio.channels.*;
import java.util.ArrayList;
import java.util.List;
-import java.util.Iterator;
-import java.lang.reflect.Field;
import java.security.AccessController;
import javax.management.ObjectName;
import javax.management.MalformedObjectNameException;
@@ -95,14 +93,16 @@
// -- Standard channel operations --
protected void implCloseChannel() throws IOException {
- // Invalidate and release any locks that we still hold
+ // Release and invalidate any locks that we still hold
if (fileLockTable != null) {
- fileLockTable.removeAll( new FileLockTable.Releaser() {
- public void release(FileLock fl) throws IOException {
- ((FileLockImpl)fl).invalidate();
- nd.release(fd, fl.position(), fl.size());
+ for (FileLock fl: fileLockTable.removeAll()) {
+ synchronized (fl) {
+ if (fl.isValid()) {
+ nd.release(fd, fl.position(), fl.size());
+ ((FileLockImpl)fl).invalidate();
+ }
}
- });
+ }
}
nd.preClose(fd);
@@ -912,32 +912,33 @@
FileLockImpl fli = new FileLockImpl(this, position, size, shared);
FileLockTable flt = fileLockTable();
flt.add(fli);
- boolean i = true;
+ boolean completed = false;
int ti = -1;
try {
begin();
ti = threads.add();
if (!isOpen())
return null;
- int result = nd.lock(fd, true, position, size, shared);
- if (result == FileDispatcher.RET_EX_LOCK) {
- assert shared;
- FileLockImpl fli2 = new FileLockImpl(this, position, size,
- false);
- flt.replace(fli, fli2);
- return fli2;
+ int n;
+ do {
+ n = nd.lock(fd, true, position, size, shared);
+ } while ((n == FileDispatcher.INTERRUPTED) && isOpen());
+ if (isOpen()) {
+ if (n == FileDispatcher.RET_EX_LOCK) {
+ assert shared;
+ FileLockImpl fli2 = new FileLockImpl(this, position, size,
+ false);
+ flt.replace(fli, fli2);
+ fli = fli2;
+ }
+ completed = true;
}
- if (result == FileDispatcher.INTERRUPTED || result == FileDispatcher.NO_LOCK) {
+ } finally {
+ if (!completed)
flt.remove(fli);
- i = false;
- }
- } catch (IOException e) {
- flt.remove(fli);
- throw e;
- } finally {
threads.remove(ti);
try {
- end(i);
+ end(completed);
} catch (ClosedByInterruptException e) {
throw new FileLockInterruptionException();
}
@@ -985,7 +986,6 @@
}
void release(FileLockImpl fli) throws IOException {
- ensureOpen();
int ti = threads.add();
try {
ensureOpen();
@@ -1005,7 +1005,7 @@
*/
private static class SimpleFileLockTable extends FileLockTable {
// synchronize on list for access
- private List<FileLock> lockList = new ArrayList<FileLock>(2);
+ private final List<FileLock> lockList = new ArrayList<FileLock>(2);
public SimpleFileLockTable() {
}
@@ -1034,14 +1034,11 @@
}
}
- public void removeAll(Releaser releaser) throws IOException {
+ public List<FileLock> removeAll() {
synchronized(lockList) {
- Iterator<FileLock> i = lockList.iterator();
- while (i.hasNext()) {
- FileLock fl = i.next();
- releaser.release(fl);
- i.remove();
- }
+ List<FileLock> result = new ArrayList<FileLock>(lockList);
+ lockList.clear();
+ return result;
}
}
--- a/jdk/src/share/classes/sun/nio/ch/FileLockImpl.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/nio/ch/FileLockImpl.java Tue Apr 21 21:26:21 2009 -0700
@@ -31,25 +31,24 @@
public class FileLockImpl
extends FileLock
{
- boolean valid;
+ private volatile boolean valid = true;
FileLockImpl(FileChannel channel, long position, long size, boolean shared)
{
super(channel, position, size, shared);
- this.valid = true;
}
FileLockImpl(AsynchronousFileChannel channel, long position, long size, boolean shared)
{
super(channel, position, size, shared);
- this.valid = true;
}
- public synchronized boolean isValid() {
+ public boolean isValid() {
return valid;
}
- synchronized void invalidate() {
+ void invalidate() {
+ assert Thread.holdsLock(this);
valid = false;
}
@@ -66,5 +65,4 @@
valid = false;
}
}
-
}
--- a/jdk/src/share/classes/sun/nio/ch/FileLockTable.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/nio/ch/FileLockTable.java Tue Apr 21 21:26:21 2009 -0700
@@ -61,22 +61,11 @@
public abstract void remove(FileLock fl);
/**
- * An implementation of this interface releases a given file lock.
- * Used with removeAll.
+ * Removes all file locks from the table.
+ *
+ * @return The list of file locks removed
*/
- public abstract interface Releaser {
- void release(FileLock fl) throws IOException;
- }
-
- /**
- * Removes all file locks from the table.
- * <p>
- * The Releaser#release method is invoked for each file lock before
- * it is removed.
- *
- * @throws IOException if the release method throws IOException
- */
- public abstract void removeAll(Releaser r) throws IOException;
+ public abstract List<FileLock> removeAll();
/**
* Replaces an existing file lock in the table.
@@ -195,7 +184,7 @@
FileLockReference ref = list.get(index);
FileLock lock = ref.get();
if (lock == fl) {
- assert (lock != null) && (lock.channel() == channel);
+ assert (lock != null) && (lock.acquiredBy() == channel);
ref.clear();
list.remove(index);
break;
@@ -206,7 +195,8 @@
}
@Override
- public void removeAll(Releaser releaser) throws IOException {
+ public List<FileLock> removeAll() {
+ List<FileLock> result = new ArrayList<FileLock>();
List<FileLockReference> list = lockMap.get(fileKey);
if (list != null) {
synchronized (list) {
@@ -216,13 +206,13 @@
FileLock lock = ref.get();
// remove locks obtained by this channel
- if (lock != null && lock.channel() == channel) {
- // invoke the releaser to invalidate/release the lock
- releaser.release(lock);
-
+ if (lock != null && lock.acquiredBy() == channel) {
// remove the lock from the list
ref.clear();
list.remove(index);
+
+ // add to result
+ result.add(lock);
} else {
index++;
}
@@ -232,6 +222,7 @@
removeKeyIfEmpty(fileKey, list);
}
}
+ return result;
}
@Override
--- a/jdk/src/share/classes/sun/nio/ch/SimpleAsynchronousFileChannelImpl.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/nio/ch/SimpleAsynchronousFileChannelImpl.java Tue Apr 21 21:26:21 2009 -0700
@@ -97,6 +97,9 @@
// then it will throw ClosedChannelException
}
+ // Invalidate and release any locks that we still hold
+ invalidateAllLocks();
+
// signal any threads blocked on this channel
nd.preClose(fdObj);
threads.signalAndWait();
@@ -109,9 +112,6 @@
closeLock.writeLock().unlock();
}
- // Invalidate and release any locks that we still hold
- invalidateAllLocks();
-
// close file
nd.close(fdObj);
@@ -226,11 +226,9 @@
do {
n = nd.lock(fdObj, true, position, size, shared);
} while ((n == FileDispatcher.INTERRUPTED) && isOpen());
- if (n == FileDispatcher.LOCKED) {
+ if (n == FileDispatcher.LOCKED && isOpen()) {
result.setResult(fli);
} else {
- if (n != FileDispatcher.INTERRUPTED)
- throw new AssertionError();
throw new AsynchronousCloseException();
}
} catch (IOException x) {
@@ -279,16 +277,16 @@
do {
n = nd.lock(fdObj, false, position, size, shared);
} while ((n == FileDispatcher.INTERRUPTED) && isOpen());
- if (n != FileDispatcher.LOCKED) {
- if (n == FileDispatcher.NO_LOCK)
- return null; // locked by someone else
- if (n == FileDispatcher.INTERRUPTED)
- throw new AsynchronousCloseException();
- // should not get here
- throw new AssertionError();
+ if (n == FileDispatcher.LOCKED && isOpen()) {
+ gotLock = true;
+ return fli; // lock acquired
}
- gotLock = true;
- return fli;
+ if (n == FileDispatcher.NO_LOCK)
+ return null; // locked by someone else
+ if (n == FileDispatcher.INTERRUPTED)
+ throw new AsynchronousCloseException();
+ // should not get here
+ throw new AssertionError();
} finally {
if (!gotLock)
removeFromFileLockTable(fli);
@@ -298,14 +296,8 @@
}
@Override
- void release(FileLockImpl fli) throws IOException {
- try {
- begin();
- nd.release(fdObj, fli.position(), fli.size());
- removeFromFileLockTable(fli);
- } finally {
- end();
- }
+ protected void implRelease(FileLockImpl fli) throws IOException {
+ nd.release(fdObj, fli.position(), fli.size());
}
@Override
--- a/jdk/src/share/classes/sun/security/krb5/Config.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/security/krb5/Config.java Tue Apr 21 21:26:21 2009 -0700
@@ -736,6 +736,14 @@
return name;
}
+ private static String trimmed(String s) {
+ s = s.trim();
+ if (s.charAt(0) == '"' && s.charAt(s.length()-1) == '"' ||
+ s.charAt(0) == '\'' && s.charAt(s.length()-1) == '\'') {
+ s = s.substring(1, s.length()-1).trim();
+ }
+ return s;
+ }
/**
* Parses key-value pairs under a stanza name.
*/
@@ -747,7 +755,7 @@
for (int j = 0; j < line.length(); j++) {
if (line.charAt(j) == '=') {
String key = (line.substring(0, j)).trim();
- String value = (line.substring(j + 1)).trim();
+ String value = trimmed(line.substring(j + 1));
table.put(key, value);
break;
}
@@ -820,7 +828,7 @@
} else {
nameVector = table.get(key);
}
- nameVector.addElement((line.substring(j + 1)).trim());
+ nameVector.addElement(trimmed(line.substring(j + 1)));
table.put(key, nameVector);
break;
}
@@ -1263,4 +1271,32 @@
}
}
+ @Override
+ public String toString() {
+ StringBuffer sb = new StringBuffer();
+ toStringIndented("", stanzaTable, sb);
+ return sb.toString();
+ }
+ private static void toStringIndented(String prefix, Object obj,
+ StringBuffer sb) {
+ if (obj instanceof String) {
+ sb.append(prefix);
+ sb.append(obj);
+ sb.append('\n');
+ } else if (obj instanceof Hashtable) {
+ Hashtable tab = (Hashtable)obj;
+ for (Object o: tab.keySet()) {
+ sb.append(prefix);
+ sb.append(o);
+ sb.append(" = {\n");
+ toStringIndented(prefix + " ", tab.get(o), sb);
+ sb.append(prefix + "}\n");
+ }
+ } else if (obj instanceof Vector) {
+ Vector v = (Vector)obj;
+ for (Object o: v.toArray()) {
+ toStringIndented(prefix + " ", o, sb);
+ }
+ }
+ }
}
--- a/jdk/src/share/classes/sun/security/krb5/KrbKdcReq.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/security/krb5/KrbKdcReq.java Tue Apr 21 21:26:21 2009 -0700
@@ -274,27 +274,31 @@
+ ",Attempt =" + i
+ ", #bytes=" + obuf.length);
}
- /*
- * Send the data to the kdc.
- */
+ try {
+ /*
+ * Send the data to the kdc.
+ */
kdcClient.send(obuf);
- /*
- * And get a response.
- */
- try {
- ibuf = kdcClient.receive();
- break;
- } catch (SocketTimeoutException se) {
- if (DEBUG) {
- System.out.println ("SocketTimeOutException with " +
- "attempt: " + i);
+ /*
+ * And get a response.
+ */
+ try {
+ ibuf = kdcClient.receive();
+ break;
+ } catch (SocketTimeoutException se) {
+ if (DEBUG) {
+ System.out.println ("SocketTimeOutException with " +
+ "attempt: " + i);
+ }
+ if (i == DEFAULT_KDC_RETRY_LIMIT) {
+ ibuf = null;
+ throw se;
+ }
}
- if (i == DEFAULT_KDC_RETRY_LIMIT) {
- ibuf = null;
- throw se;
- }
+ } finally {
+ kdcClient.close();
}
}
}
--- a/jdk/src/share/classes/sun/security/krb5/internal/UDPClient.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/security/krb5/internal/UDPClient.java Tue Apr 21 21:26:21 2009 -0700
@@ -93,4 +93,7 @@
return data;
}
+ public void close() {
+ dgSocket.close();
+ }
}
--- a/jdk/src/share/classes/sun/security/pkcs11/P11KeyPairGenerator.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/security/pkcs11/P11KeyPairGenerator.java Tue Apr 21 21:26:21 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2006 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-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
@@ -38,6 +38,8 @@
import sun.security.pkcs11.wrapper.*;
import static sun.security.pkcs11.wrapper.PKCS11Constants.*;
+import sun.security.rsa.RSAKeyFactory;
+
/**
* KeyPairGenerator implementation class. This class currently supports
* RSA, DSA, DH, and EC.
@@ -66,7 +68,7 @@
private AlgorithmParameterSpec params;
// for RSA, selected or default value of public exponent, always valid
- private BigInteger rsaPublicExponent;
+ private BigInteger rsaPublicExponent = RSAKeyGenParameterSpec.F4;
// SecureRandom instance, if specified in init
private SecureRandom random;
@@ -88,19 +90,19 @@
public void initialize(int keySize, SecureRandom random) {
token.ensureValid();
try {
- checkKeySize(keySize);
+ checkKeySize(keySize, null);
} catch (InvalidAlgorithmParameterException e) {
throw new InvalidParameterException(e.getMessage());
}
this.keySize = keySize;
this.params = null;
this.random = random;
- this.rsaPublicExponent = RSAKeyGenParameterSpec.F4;
if (algorithm.equals("EC")) {
params = P11ECKeyFactory.getECParameterSpec(keySize);
if (params == null) {
- throw new InvalidParameterException
- ("No EC parameters available for key size " + keySize + " bits");
+ throw new InvalidParameterException(
+ "No EC parameters available for key size "
+ + keySize + " bits");
}
}
}
@@ -115,8 +117,10 @@
("DHParameterSpec required for Diffie-Hellman");
}
DHParameterSpec dhParams = (DHParameterSpec)params;
- this.keySize = dhParams.getP().bitLength();
- this.params = params;
+ int tmpKeySize = dhParams.getP().bitLength();
+ checkKeySize(tmpKeySize, dhParams);
+ this.keySize = tmpKeySize;
+ this.params = dhParams;
// XXX sanity check params
} else if (algorithm.equals("RSA")) {
if (params instanceof RSAKeyGenParameterSpec == false) {
@@ -124,7 +128,9 @@
("RSAKeyGenParameterSpec required for RSA");
}
RSAKeyGenParameterSpec rsaParams = (RSAKeyGenParameterSpec)params;
- this.keySize = rsaParams.getKeysize();
+ int tmpKeySize = rsaParams.getKeysize();
+ checkKeySize(tmpKeySize, rsaParams);
+ this.keySize = tmpKeySize;
this.params = null;
this.rsaPublicExponent = rsaParams.getPublicExponent();
// XXX sanity check params
@@ -134,13 +140,16 @@
("DSAParameterSpec required for DSA");
}
DSAParameterSpec dsaParams = (DSAParameterSpec)params;
- this.keySize = dsaParams.getP().bitLength();
- this.params = params;
+ int tmpKeySize = dsaParams.getP().bitLength();
+ checkKeySize(tmpKeySize, dsaParams);
+ this.keySize = tmpKeySize;
+ this.params = dsaParams;
// XXX sanity check params
} else if (algorithm.equals("EC")) {
ECParameterSpec ecParams;
if (params instanceof ECParameterSpec) {
- ecParams = P11ECKeyFactory.getECParameterSpec((ECParameterSpec)params);
+ ecParams = P11ECKeyFactory.getECParameterSpec(
+ (ECParameterSpec)params);
if (ecParams == null) {
throw new InvalidAlgorithmParameterException
("Unsupported curve: " + params);
@@ -156,16 +165,17 @@
throw new InvalidAlgorithmParameterException
("ECParameterSpec or ECGenParameterSpec required for EC");
}
- this.keySize = ecParams.getCurve().getField().getFieldSize();
+ int tmpKeySize = ecParams.getCurve().getField().getFieldSize();
+ checkKeySize(tmpKeySize, ecParams);
+ this.keySize = tmpKeySize;
this.params = ecParams;
} else {
throw new ProviderException("Unknown algorithm: " + algorithm);
}
this.random = random;
- checkKeySize(keySize);
}
- private void checkKeySize(int keySize)
+ private void checkKeySize(int keySize, AlgorithmParameterSpec params)
throws InvalidAlgorithmParameterException {
if (algorithm.equals("EC")) {
if (keySize < 112) {
@@ -178,13 +188,28 @@
("Key size must be at most 2048 bit");
}
return;
+ } else if (algorithm.equals("RSA")) {
+ BigInteger tmpExponent = rsaPublicExponent;
+ if (params != null) {
+ // Already tested for instanceof RSAKeyGenParameterSpec above
+ tmpExponent =
+ ((RSAKeyGenParameterSpec)params).getPublicExponent();
+ }
+ try {
+ // This provider supports 64K or less.
+ RSAKeyFactory.checkKeyLengths(keySize, tmpExponent,
+ 512, 64 * 1024);
+ } catch (InvalidKeyException e) {
+ throw new InvalidAlgorithmParameterException(e.getMessage());
+ }
+ return;
}
+
if (keySize < 512) {
throw new InvalidAlgorithmParameterException
("Key size must be at least 512 bit");
}
- if (algorithm.equals("RSA") ||
- (algorithm.equals("DH") && (params != null))) {
+ if (algorithm.equals("DH") && (params != null)) {
// sanity check, nobody really wants keys this large
if (keySize > 64 * 1024) {
throw new InvalidAlgorithmParameterException
--- a/jdk/src/share/classes/sun/security/pkcs11/P11KeyStore.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/security/pkcs11/P11KeyStore.java Tue Apr 21 21:26:21 2009 -0700
@@ -80,6 +80,8 @@
import sun.security.pkcs11.wrapper.*;
import static sun.security.pkcs11.wrapper.PKCS11Constants.*;
+import sun.security.rsa.RSAKeyFactory;
+
final class P11KeyStore extends KeyStoreSpi {
private static final CK_ATTRIBUTE ATTR_CLASS_CERT =
@@ -1328,6 +1330,15 @@
BigInteger modulus = attrs[0].getBigInteger();
keyLength = modulus.bitLength();
+ // This check will combine our "don't care" values here
+ // with the system-wide min/max values.
+ try {
+ RSAKeyFactory.checkKeyLengths(keyLength, null,
+ -1, Integer.MAX_VALUE);
+ } catch (InvalidKeyException e) {
+ throw new KeyStoreException(e.getMessage());
+ }
+
return P11Key.privateKey(session,
oHandle,
keyType,
--- a/jdk/src/share/classes/sun/security/pkcs11/P11RSAKeyFactory.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/security/pkcs11/P11RSAKeyFactory.java Tue Apr 21 21:26:21 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-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
@@ -35,6 +35,8 @@
import sun.security.pkcs11.wrapper.*;
import static sun.security.pkcs11.wrapper.PKCS11Constants.*;
+import sun.security.rsa.RSAKeyFactory;
+
/**
* RSA KeyFactory implemenation.
*
@@ -131,6 +133,9 @@
} catch (PKCS11Exception e) {
throw new InvalidKeySpecException
("Could not create RSA public key", e);
+ } catch (InvalidKeyException e) {
+ throw new InvalidKeySpecException
+ ("Could not create RSA public key", e);
}
}
@@ -175,11 +180,15 @@
} catch (PKCS11Exception e) {
throw new InvalidKeySpecException
("Could not create RSA private key", e);
+ } catch (InvalidKeyException e) {
+ throw new InvalidKeySpecException
+ ("Could not create RSA private key", e);
}
}
private PublicKey generatePublic(BigInteger n, BigInteger e)
- throws PKCS11Exception {
+ throws PKCS11Exception, InvalidKeyException {
+ RSAKeyFactory.checkKeyLengths(n.bitLength(), e, -1, 64 * 1024);
CK_ATTRIBUTE[] attributes = new CK_ATTRIBUTE[] {
new CK_ATTRIBUTE(CKA_CLASS, CKO_PUBLIC_KEY),
new CK_ATTRIBUTE(CKA_KEY_TYPE, CKK_RSA),
@@ -200,7 +209,8 @@
}
private PrivateKey generatePrivate(BigInteger n, BigInteger d)
- throws PKCS11Exception {
+ throws PKCS11Exception, InvalidKeyException {
+ RSAKeyFactory.checkKeyLengths(n.bitLength(), null, -1, 64 * 1024);
CK_ATTRIBUTE[] attributes = new CK_ATTRIBUTE[] {
new CK_ATTRIBUTE(CKA_CLASS, CKO_PRIVATE_KEY),
new CK_ATTRIBUTE(CKA_KEY_TYPE, CKK_RSA),
@@ -222,7 +232,9 @@
private PrivateKey generatePrivate(BigInteger n, BigInteger e,
BigInteger d, BigInteger p, BigInteger q, BigInteger pe,
- BigInteger qe, BigInteger coeff) throws PKCS11Exception {
+ BigInteger qe, BigInteger coeff) throws PKCS11Exception,
+ InvalidKeyException {
+ RSAKeyFactory.checkKeyLengths(n.bitLength(), e, -1, 64 * 1024);
CK_ATTRIBUTE[] attributes = new CK_ATTRIBUTE[] {
new CK_ATTRIBUTE(CKA_CLASS, CKO_PRIVATE_KEY),
new CK_ATTRIBUTE(CKA_KEY_TYPE, CKK_RSA),
--- a/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java Tue Apr 21 21:26:21 2009 -0700
@@ -120,11 +120,13 @@
}
/**
- * @deprecated use new SunPKCS11(String) or new SunPKCS11(InputStream) instead
+ * @deprecated use new SunPKCS11(String) or new SunPKCS11(InputStream)
+ * instead
*/
@Deprecated
public SunPKCS11(String configName, InputStream configStream) {
- super("SunPKCS11-" + Config.getConfig(configName, configStream).getName(),
+ super("SunPKCS11-" +
+ Config.getConfig(configName, configStream).getName(),
1.7d, Config.getConfig(configName, configStream).getDescription());
this.configName = configName;
this.config = Config.removeConfig(configName);
@@ -153,7 +155,8 @@
//
// If we are in Secmod mode and configured to use either the
// nssKeyStore or the nssTrustAnchors module, we automatically
- // switch to using the NSS trust attributes for trusted certs (KeyStore).
+ // switch to using the NSS trust attributes for trusted certs
+ // (KeyStore).
//
if (useSecmod) {
@@ -168,33 +171,40 @@
if (secmod.isInitialized()) {
if (nssSecmodDirectory != null) {
String s = secmod.getConfigDir();
- if ((s != null) && (s.equals(nssSecmodDirectory) == false)) {
+ if ((s != null) &&
+ (s.equals(nssSecmodDirectory) == false)) {
throw new ProviderException("Secmod directory "
+ nssSecmodDirectory
- + " invalid, NSS already initialized with " + s);
+ + " invalid, NSS already initialized with "
+ + s);
}
}
if (nssLibraryDirectory != null) {
String s = secmod.getLibDir();
- if ((s != null) && (s.equals(nssLibraryDirectory) == false)) {
+ if ((s != null) &&
+ (s.equals(nssLibraryDirectory) == false)) {
throw new ProviderException("NSS library directory "
+ nssLibraryDirectory
- + " invalid, NSS already initialized with " + s);
+ + " invalid, NSS already initialized with "
+ + s);
}
}
} else {
if (nssDbMode != DbMode.NO_DB) {
if (nssSecmodDirectory == null) {
- throw new ProviderException("Secmod not initialized and "
- + "nssSecmodDirectory not specified");
+ throw new ProviderException(
+ "Secmod not initialized and "
+ + "nssSecmodDirectory not specified");
}
} else {
if (nssSecmodDirectory != null) {
- throw new ProviderException
- ("nssSecmodDirectory must not be specified in noDb mode");
+ throw new ProviderException(
+ "nssSecmodDirectory must not be "
+ + "specified in noDb mode");
}
}
- secmod.initialize(nssDbMode, nssSecmodDirectory, nssLibraryDirectory);
+ secmod.initialize(nssDbMode, nssSecmodDirectory,
+ nssLibraryDirectory);
}
} catch (IOException e) {
// XXX which exception to throw
@@ -211,7 +221,8 @@
if (nssModule != null) {
moduleName = "fips";
} else {
- moduleName = (nssDbMode == DbMode.NO_DB) ? "crypto" : "keystore";
+ moduleName = (nssDbMode == DbMode.NO_DB) ?
+ "crypto" : "keystore";
}
}
if (moduleName.equals("fips")) {
@@ -253,10 +264,12 @@
+ ": only " + k + " external NSS modules available");
}
} else {
- throw new ProviderException("Unknown NSS module: " + moduleName);
+ throw new ProviderException(
+ "Unknown NSS module: " + moduleName);
}
if (nssModule == null) {
- throw new ProviderException("NSS module not available: " + moduleName);
+ throw new ProviderException(
+ "NSS module not available: " + moduleName);
}
if (nssModule.hasInitializedProvider()) {
throw new ProviderException("Secmod module already configured");
@@ -296,8 +309,9 @@
initArgs.flags = CKF_OS_LOCKING_OK;
PKCS11 tmpPKCS11;
try {
- tmpPKCS11 = PKCS11.getInstance
- (library, functionList, initArgs, config.getOmitInitialize());
+ tmpPKCS11 = PKCS11.getInstance(
+ library, functionList, initArgs,
+ config.getOmitInitialize());
} catch (PKCS11Exception e) {
if (debug != null) {
debug.println("Multi-threaded initialization failed: " + e);
@@ -312,8 +326,8 @@
} else {
initArgs.flags = 0;
}
- tmpPKCS11 = PKCS11.getInstance
- (library, functionList, initArgs, config.getOmitInitialize());
+ tmpPKCS11 = PKCS11.getInstance(library,
+ functionList, initArgs, config.getOmitInitialize());
}
p11 = tmpPKCS11;
@@ -336,8 +350,10 @@
System.out.println("Slots with tokens: " + toString(slots));
}
if (slotID < 0) {
- if ((slotListIndex < 0) || (slotListIndex >= slots.length)) {
- throw new ProviderException("slotListIndex is " + slotListIndex
+ if ((slotListIndex < 0)
+ || (slotListIndex >= slots.length)) {
+ throw new ProviderException("slotListIndex is "
+ + slotListIndex
+ " but token only has " + slots.length + " slots");
}
slotID = slots[slotListIndex];
@@ -575,12 +591,15 @@
d(KF, "DH", P11DHKeyFactory, s("DiffieHellman"),
m(CKM_DH_PKCS_KEY_PAIR_GEN, CKM_DH_PKCS_DERIVE));
d(KF, "EC", P11DHKeyFactory,
- m(CKM_EC_KEY_PAIR_GEN, CKM_ECDH1_DERIVE, CKM_ECDSA, CKM_ECDSA_SHA1));
+ m(CKM_EC_KEY_PAIR_GEN, CKM_ECDH1_DERIVE,
+ CKM_ECDSA, CKM_ECDSA_SHA1));
// AlgorithmParameters for EC.
// Only needed until we have an EC implementation in the SUN provider.
- d(AGP, "EC", "sun.security.ec.ECParameters", s("1.2.840.10045.2.1"),
- m(CKM_EC_KEY_PAIR_GEN, CKM_ECDH1_DERIVE, CKM_ECDSA, CKM_ECDSA_SHA1));
+ d(AGP, "EC", "sun.security.ec.ECParameters",
+ s("1.2.840.10045.2.1"),
+ m(CKM_EC_KEY_PAIR_GEN, CKM_ECDH1_DERIVE,
+ CKM_ECDSA, CKM_ECDSA_SHA1));
d(KA, "DH", P11KeyAgreement, s("DiffieHellman"),
m(CKM_DH_PKCS_DERIVE));
@@ -654,12 +673,16 @@
d(SIG, "SHA512withRSA", P11Signature,
m(CKM_SHA512_RSA_PKCS, CKM_RSA_PKCS, CKM_RSA_X_509));
- d(KG, "SunTlsRsaPremasterSecret", "sun.security.pkcs11.P11TlsRsaPremasterSecretGenerator",
+ d(KG, "SunTlsRsaPremasterSecret",
+ "sun.security.pkcs11.P11TlsRsaPremasterSecretGenerator",
m(CKM_SSL3_PRE_MASTER_KEY_GEN, CKM_TLS_PRE_MASTER_KEY_GEN));
- d(KG, "SunTlsMasterSecret", "sun.security.pkcs11.P11TlsMasterSecretGenerator",
+ d(KG, "SunTlsMasterSecret",
+ "sun.security.pkcs11.P11TlsMasterSecretGenerator",
m(CKM_SSL3_MASTER_KEY_DERIVE, CKM_TLS_MASTER_KEY_DERIVE,
- CKM_SSL3_MASTER_KEY_DERIVE_DH, CKM_TLS_MASTER_KEY_DERIVE_DH));
- d(KG, "SunTlsKeyMaterial", "sun.security.pkcs11.P11TlsKeyMaterialGenerator",
+ CKM_SSL3_MASTER_KEY_DERIVE_DH,
+ CKM_TLS_MASTER_KEY_DERIVE_DH));
+ d(KG, "SunTlsKeyMaterial",
+ "sun.security.pkcs11.P11TlsKeyMaterialGenerator",
m(CKM_SSL3_KEY_AND_MAC_DERIVE, CKM_TLS_KEY_AND_MAC_DERIVE));
d(KG, "SunTlsPrf", "sun.security.pkcs11.P11TlsPrfGenerator",
m(CKM_TLS_PRF, CKM_NSS_TLS_PRF_GENERAL));
@@ -773,6 +796,13 @@
System.out.println(token.tokenInfo);
}
long[] supportedMechanisms = p11.C_GetMechanismList(slotID);
+
+ // Create a map from the various Descriptors to the "most
+ // preferred" mechanism that was defined during the
+ // static initialization. For example, DES/CBC/PKCS5Padding
+ // could be mapped to CKM_DES_CBC_PAD or CKM_DES_CBC. Prefer
+ // the earliest entry. When asked for "DES/CBC/PKCS5Padding", we
+ // return a CKM_DES_CBC_PAD.
final Map<Descriptor,Integer> supportedAlgs =
new HashMap<Descriptor,Integer>();
for (int i = 0; i < supportedMechanisms.length; i++) {
@@ -807,6 +837,9 @@
supportedAlgs.put(d, integerMech);
continue;
}
+ // See if there is something "more preferred"
+ // than what we currently have in the supportedAlgs
+ // map.
int intOldMech = oldMech.intValue();
for (int j = 0; j < d.mechanisms.length; j++) {
int nextMech = d.mechanisms[j];
--- a/jdk/src/share/classes/sun/security/rsa/RSAKeyFactory.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/security/rsa/RSAKeyFactory.java Tue Apr 21 21:26:21 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2006 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-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
@@ -31,6 +31,8 @@
import java.security.interfaces.*;
import java.security.spec.*;
+import sun.security.action.GetPropertyAction;
+
/**
* KeyFactory for RSA keys. Keys must be instances of PublicKey or PrivateKey
* and getAlgorithm() must return "RSA". For such keys, it supports conversion
@@ -68,6 +70,24 @@
private final static Class<?> x509KeySpecClass = X509EncodedKeySpec.class;
private final static Class<?> pkcs8KeySpecClass = PKCS8EncodedKeySpec.class;
+ public final static int MIN_MODLEN = 512;
+ public final static int MAX_MODLEN = 16384;
+
+ /*
+ * If the modulus length is above this value, restrict the size of
+ * the exponent to something that can be reasonably computed. We
+ * could simply hardcode the exp len to something like 64 bits, but
+ * this approach allows flexibility in case impls would like to use
+ * larger module and exponent values.
+ */
+ public final static int MAX_MODLEN_RESTRICT_EXP = 3072;
+ public final static int MAX_RESTRICTED_EXPLEN = 64;
+
+ private static final boolean restrictExpLen =
+ "true".equalsIgnoreCase(AccessController.doPrivileged(
+ new GetPropertyAction(
+ "sun.security.rsa.restrictRSAExponent", "true")));
+
// instance used for static translateKey();
private final static RSAKeyFactory INSTANCE = new RSAKeyFactory();
@@ -76,74 +96,79 @@
}
/**
- * Static method to convert Key into a useable instance of
- * RSAPublicKey or RSAPrivate(Crt)Key. Check the key and convert it
- * to a SunRsaSign key if necessary. If the key is not an RSA key
- * or cannot be used, throw an InvalidKeyException.
- *
- * The difference between this method and engineTranslateKey() is that
- * we do not convert keys of other providers that are already an
- * instance of RSAPublicKey or RSAPrivate(Crt)Key.
+ * Static method to convert Key into an instance of RSAPublicKeyImpl
+ * or RSAPrivate(Crt)KeyImpl. If the key is not an RSA key or cannot be
+ * used, throw an InvalidKeyException.
*
* Used by RSASignature and RSACipher.
*/
public static RSAKey toRSAKey(Key key) throws InvalidKeyException {
- if (key instanceof RSAKey) {
- RSAKey rsaKey = (RSAKey)key;
- checkKey(rsaKey);
- return rsaKey;
+ if ((key instanceof RSAPrivateKeyImpl) ||
+ (key instanceof RSAPrivateCrtKeyImpl) ||
+ (key instanceof RSAPublicKeyImpl)) {
+ return (RSAKey)key;
} else {
return (RSAKey)INSTANCE.engineTranslateKey(key);
}
}
- /**
- * Check that the given RSA key is valid.
+ /*
+ * Single test entry point for all of the mechanisms in the SunRsaSign
+ * provider (RSA*KeyImpls). All of the tests are the same.
+ *
+ * For compatibility, we round up to the nearest byte here:
+ * some Key impls might pass in a value within a byte of the
+ * real value.
*/
- private static void checkKey(RSAKey key) throws InvalidKeyException {
- // check for subinterfaces, omit additional checks for our keys
- if (key instanceof RSAPublicKey) {
- if (key instanceof RSAPublicKeyImpl) {
- return;
- }
- } else if (key instanceof RSAPrivateKey) {
- if ((key instanceof RSAPrivateCrtKeyImpl)
- || (key instanceof RSAPrivateKeyImpl)) {
- return;
- }
- } else {
- throw new InvalidKeyException("Neither a public nor a private key");
- }
- // RSAKey does not extend Key, so we need to do a cast
- String keyAlg = ((Key)key).getAlgorithm();
- if (keyAlg.equals("RSA") == false) {
- throw new InvalidKeyException("Not an RSA key: " + keyAlg);
- }
- BigInteger modulus;
- // some providers implement RSAKey for keys where the values are
- // not accessible (although they should). Detect those here
- // for a more graceful failure.
- try {
- modulus = key.getModulus();
- if (modulus == null) {
- throw new InvalidKeyException("Modulus is missing");
- }
- } catch (RuntimeException e) {
- throw new InvalidKeyException(e);
- }
- checkKeyLength(modulus);
+ static void checkRSAProviderKeyLengths(int modulusLen, BigInteger exponent)
+ throws InvalidKeyException {
+ checkKeyLengths(((modulusLen + 7) & ~7), exponent,
+ RSAKeyFactory.MIN_MODLEN, Integer.MAX_VALUE);
}
/**
- * Check the length of the modulus of an RSA key. We only support keys
- * at least 505 bits long.
+ * Check the length of an RSA key modulus/exponent to make sure it
+ * is not too short or long. Some impls have their own min and
+ * max key sizes that may or may not match with a system defined value.
+ *
+ * @param modulusLen the bit length of the RSA modulus.
+ * @param exponent the RSA exponent
+ * @param minModulusLen if > 0, check to see if modulusLen is at
+ * least this long, otherwise unused.
+ * @param maxModulusLen caller will allow this max number of bits.
+ * Allow the smaller of the system-defined maximum and this param.
+ *
+ * @throws InvalidKeyException if any of the values are unacceptable.
*/
- static void checkKeyLength(BigInteger modulus) throws InvalidKeyException {
- if (modulus.bitLength() < 505) {
- // some providers may generate slightly shorter keys
- // accept them if the encoding is at least 64 bytes long
- throw new InvalidKeyException
- ("RSA keys must be at least 512 bits long");
+ public static void checkKeyLengths(int modulusLen, BigInteger exponent,
+ int minModulusLen, int maxModulusLen) throws InvalidKeyException {
+
+ if ((minModulusLen > 0) && (modulusLen < (minModulusLen))) {
+ throw new InvalidKeyException( "RSA keys must be at least " +
+ minModulusLen + " bits long");
+ }
+
+ // Even though our policy file may allow this, we don't want
+ // either value (mod/exp) to be too big.
+
+ int maxLen = Math.min(maxModulusLen, MAX_MODLEN);
+
+ // If a RSAPrivateKey/RSAPublicKey, make sure the
+ // modulus len isn't too big.
+ if (modulusLen > maxLen) {
+ throw new InvalidKeyException(
+ "RSA keys must be no longer than " + maxLen + " bits");
+ }
+
+ // If a RSAPublicKey, make sure the exponent isn't too big.
+ if (restrictExpLen && (exponent != null) &&
+ (modulusLen > MAX_MODLEN_RESTRICT_EXP) &&
+ (exponent.bitLength() > MAX_RESTRICTED_EXPLEN)) {
+ throw new InvalidKeyException(
+ "RSA exponents can be no longer than " +
+ MAX_RESTRICTED_EXPLEN + " bits " +
+ " if modulus is greater than " +
+ MAX_MODLEN_RESTRICT_EXP + " bits");
}
}
--- a/jdk/src/share/classes/sun/security/rsa/RSAKeyPairGenerator.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/security/rsa/RSAKeyPairGenerator.java Tue Apr 21 21:26:21 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2004 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-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
@@ -47,7 +47,7 @@
// public exponent to use
private BigInteger publicExponent;
- // size of the key to generate, >= 512
+ // size of the key to generate, >= RSAKeyFactory.MIN_MODLEN
private int keySize;
// PRNG to use
@@ -60,15 +60,16 @@
// initialize the generator. See JCA doc
public void initialize(int keySize, SecureRandom random) {
- if (keySize < 512) {
- throw new InvalidParameterException
- ("Key size must be at least 512 bits");
+
+ // do not allow unreasonably small or large key sizes,
+ // probably user error
+ try {
+ RSAKeyFactory.checkKeyLengths(keySize, RSAKeyGenParameterSpec.F4,
+ 512, 64 * 1024);
+ } catch (InvalidKeyException e) {
+ throw new InvalidParameterException(e.getMessage());
}
- if (keySize > 64 * 1024) {
- // do not allow unreasonably large key sizes, probably user error
- throw new InvalidParameterException
- ("Key size must be 65536 bits or less");
- }
+
this.keySize = keySize;
this.random = random;
this.publicExponent = RSAKeyGenParameterSpec.F4;
@@ -77,35 +78,41 @@
// second initialize method. See JCA doc.
public void initialize(AlgorithmParameterSpec params, SecureRandom random)
throws InvalidAlgorithmParameterException {
+
if (params instanceof RSAKeyGenParameterSpec == false) {
throw new InvalidAlgorithmParameterException
("Params must be instance of RSAKeyGenParameterSpec");
}
+
RSAKeyGenParameterSpec rsaSpec = (RSAKeyGenParameterSpec)params;
- keySize = rsaSpec.getKeysize();
- publicExponent = rsaSpec.getPublicExponent();
- this.random = random;
- if (keySize < 512) {
- throw new InvalidAlgorithmParameterException
- ("Key size must be at least 512 bits");
- }
- if (keySize > 64 * 1024) {
- // do not allow unreasonably large key sizes, probably user error
- throw new InvalidAlgorithmParameterException
- ("Key size must be 65536 bits or less");
- }
- if (publicExponent == null) {
- publicExponent = RSAKeyGenParameterSpec.F4;
+ int tmpKeySize = rsaSpec.getKeysize();
+ BigInteger tmpPublicExponent = rsaSpec.getPublicExponent();
+
+ if (tmpPublicExponent == null) {
+ tmpPublicExponent = RSAKeyGenParameterSpec.F4;
} else {
- if (publicExponent.compareTo(RSAKeyGenParameterSpec.F0) < 0) {
+ if (tmpPublicExponent.compareTo(RSAKeyGenParameterSpec.F0) < 0) {
throw new InvalidAlgorithmParameterException
("Public exponent must be 3 or larger");
}
- if (publicExponent.bitLength() > keySize) {
+ if (tmpPublicExponent.bitLength() > tmpKeySize) {
throw new InvalidAlgorithmParameterException
("Public exponent must be smaller than key size");
}
}
+
+ // do not allow unreasonably large key sizes, probably user error
+ try {
+ RSAKeyFactory.checkKeyLengths(tmpKeySize, tmpPublicExponent,
+ 512, 64 * 1024);
+ } catch (InvalidKeyException e) {
+ throw new InvalidAlgorithmParameterException(
+ "Invalid key sizes", e);
+ }
+
+ this.keySize = tmpKeySize;
+ this.publicExponent = tmpPublicExponent;
+ this.random = random;
}
// generate the keypair. See JCA doc
--- a/jdk/src/share/classes/sun/security/rsa/RSAPrivateCrtKeyImpl.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/security/rsa/RSAPrivateCrtKeyImpl.java Tue Apr 21 21:26:21 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-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
@@ -89,7 +89,7 @@
*/
RSAPrivateCrtKeyImpl(byte[] encoded) throws InvalidKeyException {
decode(encoded);
- RSAKeyFactory.checkKeyLength(n);
+ RSAKeyFactory.checkRSAProviderKeyLengths(n.bitLength(), e);
}
/**
@@ -107,7 +107,8 @@
this.pe = pe;
this.qe = qe;
this.coeff = coeff;
- RSAKeyFactory.checkKeyLength(n);
+ RSAKeyFactory.checkRSAProviderKeyLengths(n.bitLength(), e);
+
// generate the encoding
algid = rsaId;
try {
--- a/jdk/src/share/classes/sun/security/rsa/RSAPrivateKeyImpl.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/security/rsa/RSAPrivateKeyImpl.java Tue Apr 21 21:26:21 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-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
@@ -61,7 +61,7 @@
RSAPrivateKeyImpl(BigInteger n, BigInteger d) throws InvalidKeyException {
this.n = n;
this.d = d;
- RSAKeyFactory.checkKeyLength(n);
+ RSAKeyFactory.checkRSAProviderKeyLengths(n.bitLength(), null);
// generate the encoding
algid = RSAPrivateCrtKeyImpl.rsaId;
try {
--- a/jdk/src/share/classes/sun/security/rsa/RSAPublicKeyImpl.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/security/rsa/RSAPublicKeyImpl.java Tue Apr 21 21:26:21 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-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
@@ -56,10 +56,11 @@
* Construct a key from its components. Used by the
* RSAKeyFactory and the RSAKeyPairGenerator.
*/
- public RSAPublicKeyImpl(BigInteger n, BigInteger e) throws InvalidKeyException {
+ public RSAPublicKeyImpl(BigInteger n, BigInteger e)
+ throws InvalidKeyException {
this.n = n;
this.e = e;
- RSAKeyFactory.checkKeyLength(n);
+ RSAKeyFactory.checkRSAProviderKeyLengths(n.bitLength(), e);
// generate the encoding
algid = RSAPrivateCrtKeyImpl.rsaId;
try {
@@ -80,7 +81,7 @@
*/
public RSAPublicKeyImpl(byte[] encoded) throws InvalidKeyException {
decode(encoded);
- RSAKeyFactory.checkKeyLength(n);
+ RSAKeyFactory.checkRSAProviderKeyLengths(n.bitLength(), e);
}
// see JCA doc
--- a/jdk/src/share/classes/sun/security/util/ObjectIdentifier.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/classes/sun/security/util/ObjectIdentifier.java Tue Apr 21 21:26:21 2009 -0700
@@ -26,7 +26,8 @@
package sun.security.util;
import java.io.*;
-
+import java.math.BigInteger;
+import java.util.Arrays;
/**
* Represent an ISO Object Identifier.
@@ -44,105 +45,186 @@
* hierarchy, and other organizations can easily acquire the ability
* to assign such unique identifiers.
*
- *
* @author David Brownell
* @author Amit Kapoor
* @author Hemma Prafullchandra
*/
+
final public
class ObjectIdentifier implements Serializable
{
- /** use serialVersionUID from JDK 1.1. for interoperability */
+ /**
+ * We use the DER value (no tag, no length) as the internal format
+ * @serial
+ */
+ private byte[] encoding = null;
+
+ private transient volatile String stringForm;
+
+ /*
+ * IMPORTANT NOTES FOR CODE CHANGES (bug 4811968) IN JDK 1.7.0
+ * ===========================================================
+ *
+ * (Almost) serialization compatibility with old versions:
+ *
+ * serialVersionUID is unchanged. Old field "component" is changed to
+ * type Object so that "poison" (unknown object type for old versions)
+ * can be put inside if there are huge components that cannot be saved
+ * as integers.
+ *
+ * New version use the new filed "encoding" only.
+ *
+ * Below are all 4 cases in a serialization/deserialization process:
+ *
+ * 1. old -> old: Not covered here
+ * 2. old -> new: There's no "encoding" field, new readObject() reads
+ * "components" and "componentLen" instead and inits correctly.
+ * 3. new -> new: "encoding" field exists, new readObject() uses it
+ * (ignoring the other 2 fields) and inits correctly.
+ * 4. new -> old: old readObject() only recognizes "components" and
+ * "componentLen" fields. If no huge components are involved, they
+ * are serialized as legal values and old object can init correctly.
+ * Otherwise, old object cannot recognize the form (component not int[])
+ * and throw a ClassNotFoundException at deserialization time.
+ *
+ * Therfore, for the first 3 cases, exact compatibility is preserved. In
+ * the 4th case, non-huge OID is still supportable in old versions, while
+ * huge OID is not.
+ */
private static final long serialVersionUID = 8697030238860181294L;
- private static final int maxFirstComponent = 2;
- private static final int maxSecondComponent = 39;
/**
- * Constructs an object identifier from a string. This string
- * should be of the form 1.23.34.45.56 etc.
+ * Changed to Object
+ * @serial
+ */
+ private Object components = null; // path from root
+ /**
+ * @serial
+ */
+ private int componentLen = -1; // how much is used.
+
+ // Is the components field calculated?
+ transient private boolean componentsCalculated = false;
+
+ private void readObject(ObjectInputStream is)
+ throws IOException, ClassNotFoundException {
+ is.defaultReadObject();
+
+ if (encoding == null) { // from an old version
+ init((int[])components, componentLen);
+ }
+ }
+
+ private void writeObject(ObjectOutputStream os)
+ throws IOException {
+ if (!componentsCalculated) {
+ int[] comps = toIntArray();
+ if (comps != null) { // every one understands this
+ components = comps;
+ componentLen = comps.length;
+ } else {
+ components = HugeOidNotSupportedByOldJDK.theOne;
+ }
+ componentsCalculated = true;
+ }
+ os.defaultWriteObject();
+ }
+
+ static class HugeOidNotSupportedByOldJDK implements Serializable {
+ private static final long serialVersionUID = 1L;
+ static HugeOidNotSupportedByOldJDK theOne = new HugeOidNotSupportedByOldJDK();
+ }
+
+ /**
+ * Constructs, from a string. This string should be of the form 1.23.56.
+ * Validity check included.
*/
public ObjectIdentifier (String oid) throws IOException
{
int ch = '.';
- int start = 0;
+ int start = 0;
int end = 0;
- // Calculate length of oid
- componentLen = 0;
- while ((end = oid.indexOf(ch,start)) != -1) {
- start = end + 1;
- componentLen += 1;
- }
- componentLen += 1;
- components = new int[componentLen];
+ int pos = 0;
+ byte[] tmp = new byte[oid.length()];
+ int first = 0, second;
+ int count = 0;
+
+ try {
+ String comp = null;
+ do {
+ int length = 0; // length of one section
+ end = oid.indexOf(ch,start);
+ if (end == -1) {
+ comp = oid.substring(start);
+ length = oid.length() - start;
+ } else {
+ comp = oid.substring(start,end);
+ length = end - start;
+ }
- start = 0;
- int i = 0;
- String comp = null;
- try {
- while ((end = oid.indexOf(ch,start)) != -1) {
- comp = oid.substring(start,end);
- components[i++] = Integer.valueOf(comp).intValue();
+ if (length > 9) {
+ BigInteger bignum = new BigInteger(comp);
+ if (count == 0) {
+ checkFirstComponent(bignum);
+ first = bignum.intValue();
+ } else {
+ if (count == 1) {
+ checkSecondComponent(first, bignum);
+ bignum = bignum.add(BigInteger.valueOf(40*first));
+ } else {
+ checkOtherComponent(count, bignum);
+ }
+ pos += pack7Oid(bignum, tmp, pos);
+ }
+ } else {
+ int num = Integer.parseInt(comp);
+ if (count == 0) {
+ checkFirstComponent(num);
+ first = num;
+ } else {
+ if (count == 1) {
+ checkSecondComponent(first, num);
+ num += 40 * first;
+ } else {
+ checkOtherComponent(count, num);
+ }
+ pos += pack7Oid(num, tmp, pos);
+ }
+ }
start = end + 1;
- }
- comp = oid.substring(start);
- components[i] = Integer.valueOf(comp).intValue();
+ count++;
+ } while (end != -1);
+
+ checkCount(count);
+ encoding = new byte[pos];
+ System.arraycopy(tmp, 0, encoding, 0, pos);
+ this.stringForm = oid;
+ } catch (IOException ioe) { // already detected by checkXXX
+ throw ioe;
} catch (Exception e) {
throw new IOException("ObjectIdentifier() -- Invalid format: "
+ e.toString(), e);
}
- checkValidOid(components, componentLen);
- this.stringForm = oid;
}
/**
- * Check if the values make a legal OID. There must be at least 2
- * components and they must be all non-negative. The first component
- * should be 0,1 or 2. When the first component is 0 or 1, the
- * second component should be less than or equal to 39
- *
- * @param values the components that will make the OID
- * @param len the number of components to check. Note that the allocation
- * size of <code>values</code> may be longer than <code>len</code>.
- * In this case, only the first <code>len</code> items are checked.
- * @exception IOException if this is not a legal OID
- */
- private void checkValidOid(int[] values, int len) throws IOException {
- if (values == null || len < 2) {
- throw new IOException("ObjectIdentifier() -- " +
- "Must be at least two oid components ");
- }
-
- for (int i=0; i<len; i++) {
- if (values[i] < 0) {
- throw new IOException("ObjectIdentifier() -- " +
- "oid component #" + (i+1) + " must be non-negative ");
- }
- }
-
- if (values[0] > maxFirstComponent) {
- throw new IOException("ObjectIdentifier() -- " +
- "First oid component is invalid ");
- }
-
- if (values[0] < 2 && values[1] > maxSecondComponent) {
- throw new IOException("ObjectIdentifier() -- " +
- "Second oid component is invalid ");
- }
- }
- /**
- * Constructs an object ID from an array of integers. This
- * is used to construct constant object IDs.
+ * Constructor, from an array of integers.
+ * Validity check included.
*/
public ObjectIdentifier (int values []) throws IOException
{
- checkValidOid(values, values.length);
- components = values.clone();
- componentLen = values.length;
+ checkCount(values.length);
+ checkFirstComponent(values[0]);
+ checkSecondComponent(values[0], values[1]);
+ for (int i=2; i<values.length; i++)
+ checkOtherComponent(i, values[i]);
+ init(values, values.length);
}
/**
- * Constructs an object ID from an ASN.1 encoded input stream.
+ * Constructor, from an ASN.1 encoded input stream.
+ * Validity check NOT included.
* The encoding of the ID in the stream uses "DER", a BER/1 subset.
* In this case, that means a triple { typeId, length, data }.
*
@@ -152,8 +234,7 @@
* @param in DER-encoded data holding an object ID
* @exception IOException indicates a decoding error
*/
- public ObjectIdentifier (DerInputStream in)
- throws IOException
+ public ObjectIdentifier (DerInputStream in) throws IOException
{
byte type_id;
int bufferEnd;
@@ -174,215 +255,67 @@
+ " (tag = " + type_id + ")"
);
- bufferEnd = in.available () - in.getLength () - 1;
- if (bufferEnd < 0)
- throw new IOException (
- "ObjectIdentifier() -- not enough data");
-
- initFromEncoding (in, bufferEnd);
- }
-
- /*
- * Build the OID from the rest of a DER input buffer; the tag
- * and length have been removed/verified
- */
- ObjectIdentifier (DerInputBuffer buf) throws IOException
- {
- initFromEncoding (new DerInputStream (buf), 0);
- }
-
- /**
- * Private constructor for use by newInternal(). Dummy argument
- * to avoid clash with the public constructor.
- */
- private ObjectIdentifier(int[] components, boolean dummy) {
- this.components = components;
- this.componentLen = components.length;
- }
-
- /**
- * Create a new ObjectIdentifier for internal use. The values are
- * neither checked nor cloned.
- */
- public static ObjectIdentifier newInternal(int[] values) {
- return new ObjectIdentifier(values, true);
+ encoding = new byte[in.getLength()];
+ in.getBytes(encoding);
+ check(encoding);
}
/*
- * Helper function -- get the OID from a stream, after tag and
- * length are verified.
+ * Constructor, from the rest of a DER input buffer;
+ * the tag and length have been removed/verified
+ * Validity check NOT included.
*/
- private void initFromEncoding (DerInputStream in, int bufferEnd)
- throws IOException
+ ObjectIdentifier (DerInputBuffer buf) throws IOException
{
-
- /*
- * Now get the components ("sub IDs") one at a time. We fill a
- * temporary buffer, resizing it as needed.
- */
- int component;
- boolean first_subid = true;
-
- for (components = new int [allocationQuantum], componentLen = 0;
- in.available () > bufferEnd;
- ) {
- component = getComponent (in);
- if (component < 0) {
- throw new IOException(
- "ObjectIdentifier() -- " +
- "component values must be nonnegative");
- }
- if (first_subid) {
- int X, Y;
+ DerInputStream in = new DerInputStream(buf);
+ encoding = new byte[in.available()];
+ in.getBytes(encoding);
+ check(encoding);
+ }
- /*
- * NOTE: the allocation quantum is large enough that we know
- * we don't have to reallocate here!
- */
- if (component < 40)
- X = 0;
- else if (component < 80)
- X = 1;
- else
- X = 2;
- Y = component - ( X * 40);
- components [0] = X;
- components [1] = Y;
- componentLen = 2;
-
- first_subid = false;
+ private void init(int[] components, int length) {
+ int pos = 0;
+ byte[] tmp = new byte[length*5+1]; // +1 for empty input
- } else {
-
- /*
- * Other components are encoded less exotically. The only
- * potential trouble is the need to grow the array.
- */
- if (componentLen >= components.length) {
- int tmp_components [];
-
- tmp_components = new int [components.length
- + allocationQuantum];
- System.arraycopy (components, 0, tmp_components, 0,
- components.length);
- components = tmp_components;
- }
- components [componentLen++] = component;
- }
+ if (components[1] < Integer.MAX_VALUE - components[0]*40)
+ pos += pack7Oid(components[0]*40+components[1], tmp, pos);
+ else {
+ BigInteger big = BigInteger.valueOf(components[1]);
+ big = big.add(BigInteger.valueOf(components[0]*40));
+ pos += pack7Oid(big, tmp, pos);
}
- checkValidOid(components, componentLen);
+ for (int i=2; i<length; i++) {
+ pos += pack7Oid(components[i], tmp, pos);
+ }
+ encoding = new byte[pos];
+ System.arraycopy(tmp, 0, encoding, 0, pos);
+ }
- /*
- * Final sanity check -- if we didn't use exactly the number of bytes
- * specified, something's quite wrong.
- */
- if (in.available () != bufferEnd) {
- throw new IOException (
- "ObjectIdentifier() -- malformed input data");
+ /**
+ * This method is kept for compatibility reasons. The new implementation
+ * does the check and conversion. All around the JDK, the method is called
+ * in static blocks to initialize pre-defined ObjectIdentifieies. No
+ * obvious performance hurt will be made after this change.
+ *
+ * Old doc: Create a new ObjectIdentifier for internal use. The values are
+ * neither checked nor cloned.
+ */
+ public static ObjectIdentifier newInternal(int[] values) {
+ try {
+ return new ObjectIdentifier(values);
+ } catch (IOException ex) {
+ throw new RuntimeException(ex);
+ // Should not happen, internal calls always uses legal values.
}
}
-
/*
* n.b. the only public interface is DerOutputStream.putOID()
*/
void encode (DerOutputStream out) throws IOException
{
- DerOutputStream bytes = new DerOutputStream ();
- int i;
-
- // According to ISO X.660, when the 1st component is 0 or 1, the 2nd
- // component is restricted to be less than or equal to 39, thus make
- // it small enough to be encoded into one single byte.
- if (components[0] < 2) {
- bytes.write ((components [0] * 40) + components [1]);
- } else {
- putComponent(bytes, (components [0] * 40) + components [1]);
- }
- for (i = 2; i < componentLen; i++)
- putComponent (bytes, components [i]);
-
- /*
- * Now that we've constructed the component, encode
- * it in the stream we were given.
- */
- out.write (DerValue.tag_ObjectId, bytes);
- }
-
- /*
- * Tricky OID component parsing technique ... note that one bit
- * per octet is lost, this returns at most 28 bits of component.
- * Also, notice this parses in big-endian format.
- */
- private static int getComponent (DerInputStream in)
- throws IOException
- {
- int retval, i, tmp;
-
- for (i = 0, retval = 0; i < 4; i++) {
- retval <<= 7;
- tmp = in.getByte ();
- retval |= (tmp & 0x07f);
- if ((tmp & 0x080) == 0)
- return retval;
- }
-
- throw new IOException ("ObjectIdentifier() -- component value too big");
- }
-
- /*
- * Reverse of the above routine. Notice it needs to emit in
- * big-endian form, so it buffers the output until it's ready.
- * (Minimum length encoding is a DER requirement.)
- */
- private static void putComponent (DerOutputStream out, int val)
- throws IOException
- {
- int i;
- // TODO: val must be <128*128*128*128 here, otherwise, 4 bytes is not
- // enough to hold it. Will address this later.
- byte buf [] = new byte [4] ;
-
- for (i = 0; i < 4; i++) {
- buf [i] = (byte) (val & 0x07f);
- val >>>= 7;
- if (val == 0)
- break;
- }
- for ( ; i > 0; --i)
- out.write (buf [i] | 0x080);
- out.write (buf [0]);
- }
-
- // XXX this API should probably facilitate the JDK sort utility
-
- /**
- * Compares this identifier with another, for sorting purposes.
- * An identifier does not precede itself.
- *
- * @param other identifer that may precede this one.
- * @return true iff <em>other</em> precedes this one
- * in a particular sorting order.
- */
- public boolean precedes (ObjectIdentifier other)
- {
- int i;
-
- // shorter IDs go first
- if (other == this || componentLen < other.componentLen)
- return false;
- if (other.componentLen < componentLen)
- return true;
-
- // for each component, the lesser component goes first
- for (i = 0; i < componentLen; i++) {
- if (other.components [i] < components [i])
- return true;
- }
-
- // identical IDs don't precede each other
- return false;
+ out.write (DerValue.tag_ObjectId, encoding);
}
/**
@@ -398,6 +331,7 @@
*
* @return true iff the names are identical.
*/
+ @Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
@@ -406,23 +340,71 @@
return false;
}
ObjectIdentifier other = (ObjectIdentifier)obj;
- if (componentLen != other.componentLen) {
- return false;
- }
- for (int i = 0; i < componentLen; i++) {
- if (components[i] != other.components[i]) {
- return false;
+ return Arrays.equals(encoding, other.encoding);
+ }
+
+ @Override
+ public int hashCode() {
+ return Arrays.hashCode(encoding);
+ }
+
+ /**
+ * Private helper method for serialization. To be compatible with old
+ * versions of JDK.
+ * @return components in an int array, if all the components are less than
+ * Integer.MAX_VALUE. Otherwise, null.
+ */
+ private int[] toIntArray() {
+ int length = encoding.length;
+ int[] result = new int[20];
+ int which = 0;
+ int fromPos = 0;
+ for (int i = 0; i < length; i++) {
+ if ((encoding[i] & 0x80) == 0) {
+ // one section [fromPos..i]
+ if (i - fromPos + 1 > 4) {
+ BigInteger big = new BigInteger(pack(encoding, fromPos, i-fromPos+1, 7, 8));
+ if (fromPos == 0) {
+ result[which++] = 2;
+ BigInteger second = big.subtract(BigInteger.valueOf(80));
+ if (second.compareTo(BigInteger.valueOf(Integer.MAX_VALUE)) == 1) {
+ return null;
+ } else {
+ result[which++] = second.intValue();
+ }
+ } else {
+ if (big.compareTo(BigInteger.valueOf(Integer.MAX_VALUE)) == 1) {
+ return null;
+ } else {
+ result[which++] = big.intValue();
+ }
+ }
+ } else {
+ int retval = 0;
+ for (int j = fromPos; j <= i; j++) {
+ retval <<= 7;
+ byte tmp = encoding[j];
+ retval |= (tmp & 0x07f);
+ }
+ if (fromPos == 0) {
+ if (retval < 80) {
+ result[which++] = retval / 40;
+ result[which++] = retval % 40;
+ } else {
+ result[which++] = 2;
+ result[which++] = retval - 80;
+ }
+ } else {
+ result[which++] = retval;
+ }
+ }
+ fromPos = i+1;
+ }
+ if (which >= result.length) {
+ result = Arrays.copyOf(result, which + 10);
}
}
- return true;
- }
-
- public int hashCode() {
- int h = componentLen;
- for (int i = 0; i < componentLen; i++) {
- h += components[i] * 37;
- }
- return h;
+ return Arrays.copyOf(result, which);
}
/**
@@ -431,15 +413,52 @@
* user-friendly descriptive strings, since those strings
* will not be understood everywhere.
*/
+ @Override
public String toString() {
String s = stringForm;
if (s == null) {
- StringBuffer sb = new StringBuffer(componentLen * 4);
- for (int i = 0; i < componentLen; i++) {
- if (i != 0) {
- sb.append('.');
+ int length = encoding.length;
+ StringBuffer sb = new StringBuffer(length * 4);
+
+ int fromPos = 0;
+ for (int i = 0; i < length; i++) {
+ if ((encoding[i] & 0x80) == 0) {
+ // one section [fromPos..i]
+ if (fromPos != 0) { // not the first segment
+ sb.append('.');
+ }
+ if (i - fromPos + 1 > 4) { // maybe big integer
+ BigInteger big = new BigInteger(pack(encoding, fromPos, i-fromPos+1, 7, 8));
+ if (fromPos == 0) {
+ // first section encoded with more than 4 bytes,
+ // must be 2.something
+ sb.append("2.");
+ sb.append(big.subtract(BigInteger.valueOf(80)));
+ } else {
+ sb.append(big);
+ }
+ } else { // small integer
+ int retval = 0;
+ for (int j = fromPos; j <= i; j++) {
+ retval <<= 7;
+ byte tmp = encoding[j];
+ retval |= (tmp & 0x07f);
+ }
+ if (fromPos == 0) {
+ if (retval < 80) {
+ sb.append(retval/40);
+ sb.append('.');
+ sb.append(retval%40);
+ } else {
+ sb.append("2.");
+ sb.append(retval - 80);
+ }
+ } else {
+ sb.append(retval);
+ }
+ }
+ fromPos = i+1;
}
- sb.append(components[i]);
}
s = sb.toString();
stringForm = s;
@@ -447,15 +466,197 @@
return s;
}
- /*
- * To simplify, we assume no individual component of an object ID is
- * larger than 32 bits. Then we represent the path from the root as
- * an array that's (usually) only filled at the beginning.
+ /**
+ * Repack all bits from input to output. On the both sides, only a portion
+ * (from the least significant bit) of the 8 bits in a byte is used. This
+ * number is defined as the number of useful bits (NUB) for the array. All the
+ * used bits from the input byte array and repacked into the output in the
+ * exactly same order. The output bits are aligned so that the final bit of
+ * the input (the least significant bit in the last byte), when repacked as
+ * the final bit of the output, is still at the least significant position.
+ * Zeroes will be padded on the left side of the first output byte if
+ * necessary. All unused bits in the output are also zeroed.
+ *
+ * For example: if the input is 01001100 with NUB 8, the output which
+ * has a NUB 6 will look like:
+ * 00000001 00001100
+ * The first 2 bits of the output bytes are unused bits. The other bits
+ * turn out to be 000001 001100. While the 8 bits on the right are from
+ * the input, the left 4 zeroes are padded to fill the 6 bits space.
+ *
+ * @param in the input byte array
+ * @param ioffset start point inside <code>in</code>
+ * @param ilength number of bytes to repack
+ * @param iw NUB for input
+ * @param ow NUB for output
+ * @return the repacked bytes
+ */
+ private static byte[] pack(byte[] in, int ioffset, int ilength, int iw, int ow) {
+ assert (iw > 0 && iw <= 8): "input NUB must be between 1 and 8";
+ assert (ow > 0 && ow <= 8): "output NUB must be between 1 and 8";
+
+ if (iw == ow) {
+ return in.clone();
+ }
+
+ int bits = ilength * iw; // number of all used bits
+ byte[] out = new byte[(bits+ow-1)/ow];
+
+ // starting from the 0th bit in the input
+ int ipos = 0;
+
+ // the number of padding 0's needed in the output, skip them
+ int opos = (bits+ow-1)/ow*ow-bits;
+
+ while(ipos < bits) {
+ int count = iw - ipos%iw; // unpacked bits in current input byte
+ if (count > ow - opos%ow) { // free space available in output byte
+ count = ow - opos%ow; // choose the smaller number
+ }
+ // and move them!
+ out[opos/ow] |= // paste!
+ (((in[ioffset+ipos/iw]+256) // locate the byte (+256 so that it's never negative)
+ >> (iw-ipos%iw-count)) // move to the end of a byte
+ & ((1 << (count))-1)) // zero out all other bits
+ << (ow-opos%ow-count); // move to the output position
+ ipos += count; // advance
+ opos += count; // advance
+ }
+ return out;
+ }
+
+ /**
+ * Repack from NUB 8 to a NUB 7 OID sub-identifier, remove all
+ * unnecessary 0 headings, set the first bit of all non-tail
+ * output bytes to 1 (as ITU-T Rec. X.690 8.19.2 says), and
+ * paste it into an existing byte array.
+ * @param out the existing array to be pasted into
+ * @param ooffset the starting position to paste
+ * @return the number of bytes pasted
+ */
+ private static int pack7Oid(byte[] in, int ioffset, int ilength, byte[] out, int ooffset) {
+ byte[] pack = pack(in, ioffset, ilength, 8, 7);
+ int firstNonZero = pack.length-1; // paste at least one byte
+ for (int i=pack.length-2; i>=0; i--) {
+ if (pack[i] != 0) {
+ firstNonZero = i;
+ }
+ pack[i] |= 0x80;
+ }
+ System.arraycopy(pack, firstNonZero, out, ooffset, pack.length-firstNonZero);
+ return pack.length-firstNonZero;
+ }
+
+ /**
+ * Repack from NUB 7 to NUB 8, remove all unnecessary 0
+ * headings, and paste it into an existing byte array.
+ * @param out the existing array to be pasted into
+ * @param ooffset the starting position to paste
+ * @return the number of bytes pasted
*/
- private int components []; // path from root
- private int componentLen; // how much is used.
+ private static int pack8(byte[] in, int ioffset, int ilength, byte[] out, int ooffset) {
+ byte[] pack = pack(in, ioffset, ilength, 7, 8);
+ int firstNonZero = pack.length-1; // paste at least one byte
+ for (int i=pack.length-2; i>=0; i--) {
+ if (pack[i] != 0) {
+ firstNonZero = i;
+ }
+ }
+ System.arraycopy(pack, firstNonZero, out, ooffset, pack.length-firstNonZero);
+ return pack.length-firstNonZero;
+ }
+
+ /**
+ * Pack the int into a OID sub-identifier DER encoding
+ */
+ private static int pack7Oid(int input, byte[] out, int ooffset) {
+ byte[] b = new byte[4];
+ b[0] = (byte)(input >> 24);
+ b[1] = (byte)(input >> 16);
+ b[2] = (byte)(input >> 8);
+ b[3] = (byte)(input);
+ return pack7Oid(b, 0, 4, out, ooffset);
+ }
+
+ /**
+ * Pack the BigInteger into a OID subidentifier DER encoding
+ */
+ private static int pack7Oid(BigInteger input, byte[] out, int ooffset) {
+ byte[] b = input.toByteArray();
+ return pack7Oid(b, 0, b.length, out, ooffset);
+ }
+
+ /**
+ * Private methods to check validity of OID. They must be --
+ * 1. at least 2 components
+ * 2. all components must be non-negative
+ * 3. the first must be 0, 1 or 2
+ * 4. if the first is 0 or 1, the second must be <40
+ */
- private transient volatile String stringForm;
-
- private static final int allocationQuantum = 5; // >= 2
+ /**
+ * Check the DER encoding. Since DER encoding defines that the integer bits
+ * are unsigned, so there's no need to check the MSB.
+ */
+ private static void check(byte[] encoding) throws IOException {
+ int length = encoding.length;
+ if (length < 1 || // too short
+ (encoding[length - 1] & 0x80) != 0) { // not ended
+ throw new IOException("ObjectIdentifier() -- " +
+ "Invalid DER encoding, not ended");
+ }
+ for (int i=0; i<length; i++) {
+ // 0x80 at the beginning of a subidentifier
+ if (encoding[i] == (byte)0x80 &&
+ (i==0 || (encoding[i-1] & 0x80) == 0)) {
+ throw new IOException("ObjectIdentifier() -- " +
+ "Invalid DER encoding, useless extra octet detected");
+ }
+ }
+ }
+ private static void checkCount(int count) throws IOException {
+ if (count < 2) {
+ throw new IOException("ObjectIdentifier() -- " +
+ "Must be at least two oid components ");
+ }
+ }
+ private static void checkFirstComponent(int first) throws IOException {
+ if (first < 0 || first > 2) {
+ throw new IOException("ObjectIdentifier() -- " +
+ "First oid component is invalid ");
+ }
+ }
+ private static void checkFirstComponent(BigInteger first) throws IOException {
+ if (first.signum() == -1 ||
+ first.compareTo(BigInteger.valueOf(2)) == 1) {
+ throw new IOException("ObjectIdentifier() -- " +
+ "First oid component is invalid ");
+ }
+ }
+ private static void checkSecondComponent(int first, int second) throws IOException {
+ if (second < 0 || first != 2 && second > 39) {
+ throw new IOException("ObjectIdentifier() -- " +
+ "Second oid component is invalid ");
+ }
+ }
+ private static void checkSecondComponent(int first, BigInteger second) throws IOException {
+ if (second.signum() == -1 ||
+ first != 2 &&
+ second.compareTo(BigInteger.valueOf(39)) == 1) {
+ throw new IOException("ObjectIdentifier() -- " +
+ "Second oid component is invalid ");
+ }
+ }
+ private static void checkOtherComponent(int i, int num) throws IOException {
+ if (num < 0) {
+ throw new IOException("ObjectIdentifier() -- " +
+ "oid component #" + (i+1) + " must be non-negative ");
+ }
+ }
+ private static void checkOtherComponent(int i, BigInteger num) throws IOException {
+ if (num.signum() == -1) {
+ throw new IOException("ObjectIdentifier() -- " +
+ "oid component #" + (i+1) + " must be non-negative ");
+ }
+ }
}
--- a/jdk/src/share/lib/management/jmxremote.access Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/lib/management/jmxremote.access Tue Apr 21 21:26:21 2009 -0700
@@ -8,7 +8,7 @@
# passwords. To be functional, a role must have an entry in
# both the password and the access files.
#
-# Default location of this file is $JRE/lib/management/jmxremote.access
+# The default location of this file is $JRE/lib/management/jmxremote.access
# You can specify an alternate location by specifying a property in
# the management config file $JRE/lib/management/management.properties
# (See that file for details)
@@ -16,7 +16,7 @@
# The file format for password and access files is syntactically the same
# as the Properties file format. The syntax is described in the Javadoc
# for java.util.Properties.load.
-# Typical access file has multiple lines, where each line is blank,
+# A typical access file has multiple lines, where each line is blank,
# a comment (like this one), or an access control entry.
#
# An access control entry consists of a role name, and an
@@ -29,10 +29,38 @@
# role can read measurements but cannot perform any action
# that changes the environment of the running program.
# "readwrite" grants access to read and write attributes of MBeans,
-# to invoke operations on them, and to create or remove them.
-# This access should be granted to only trusted clients,
-# since they can potentially interfere with the smooth
-# operation of a running program
+# to invoke operations on them, and optionally
+# to create or remove them. This access should be granted
+# only to trusted clients, since they can potentially
+# interfere with the smooth operation of a running program.
+#
+# The "readwrite" access level can optionally be followed by the "create" and/or
+# "unregister" keywords. The "unregister" keyword grants access to unregister
+# (delete) MBeans. The "create" keyword grants access to create MBeans of a
+# particular class or of any class matching a particular pattern. Access
+# should only be granted to create MBeans of known and trusted classes.
+#
+# For example, the following entry would grant readwrite access
+# to "controlRole", as well as access to create MBeans of the class
+# javax.management.monitor.CounterMonitor and to unregister any MBean:
+# controlRole readwrite \
+# create javax.management.monitor.CounterMonitorMBean \
+# unregister
+# or equivalently:
+# controlRole readwrite unregister create javax.management.monitor.CounterMBean
+#
+# The following entry would grant readwrite access as well as access to create
+# MBeans of any class in the packages javax.management.monitor and
+# javax.management.timer:
+# controlRole readwrite \
+# create javax.management.monitor.*,javax.management.timer.* \
+# unregister
+#
+# The \ character is defined in the Properties file syntax to allow continuation
+# lines as shown here. A * in a class pattern matches a sequence of characters
+# other than dot (.), so javax.management.monitor.* matches
+# javax.management.monitor.CounterMonitor but not
+# javax.management.monitor.foo.Bar.
#
# A given role should have at most one entry in this file. If a role
# has no entry, it has no access.
@@ -42,7 +70,10 @@
#
# Default access control entries:
# o The "monitorRole" role has readonly access.
-# o The "controlRole" role has readwrite access.
+# o The "controlRole" role has readwrite access and can create the standard
+# Timer and Monitor MBeans defined by the JMX API.
monitorRole readonly
-controlRole readwrite
+controlRole readwrite \
+ create javax.management.monitor.*,javax.management.timer.* \
+ unregister
--- a/jdk/src/share/native/com/sun/java/util/jar/pack/bands.cpp Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/native/com/sun/java/util/jar/pack/bands.cpp Tue Apr 21 21:26:21 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2002-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
@@ -94,6 +94,7 @@
assert(!valc->isMalloc);
}
xvs.init(u->rp, u->rplimit, valc);
+ CHECK;
int X = xvs.getInt();
if (valc->S() != 0) {
assert(valc->min <= -256);
@@ -117,6 +118,7 @@
byte XB_byte = (byte) XB;
byte* XB_ptr = &XB_byte;
cm.init(u->rp, u->rplimit, XB_ptr, 0, defc, length, null);
+ CHECK;
} else {
NOT_PRODUCT(byte* meta_rp0 = u->meta_rp);
assert(u->meta_rp != null);
@@ -215,8 +217,19 @@
if (length == 0) return 0;
if (total_memo > 0) return total_memo-1;
int total = getInt();
+ // overflow checks require that none of the addends are <0,
+ // and that the partial sums never overflow (wrap negative)
+ if (total < 0) {
+ abort("overflow detected");
+ return 0;
+ }
for (int k = length-1; k > 0; k--) {
+ int prev_total = total;
total += vs[0].getInt();
+ if (total < prev_total) {
+ abort("overflow detected");
+ return 0;
+ }
}
rewind();
total_memo = total+1;
--- a/jdk/src/share/native/com/sun/java/util/jar/pack/bytes.cpp Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/native/com/sun/java/util/jar/pack/bytes.cpp Tue Apr 21 21:26:21 2009 -0700
@@ -56,7 +56,7 @@
return;
}
byte* oldptr = ptr;
- ptr = (byte*)::realloc(ptr, len_+1);
+ ptr = (len_ >= PSIZE_MAX) ? null : (byte*)::realloc(ptr, len_+1);
if (ptr != null) {
mtrace('r', oldptr, 0);
mtrace('m', ptr, len_+1);
@@ -128,7 +128,7 @@
// Make sure there are 'o' bytes beyond the fill pointer,
// advance the fill pointer, and return the old fill pointer.
byte* fillbytes::grow(size_t s) {
- size_t nlen = b.len+s;
+ size_t nlen = add_size(b.len, s);
if (nlen <= allocated) {
b.len = nlen;
return limit()-s;
--- a/jdk/src/share/native/com/sun/java/util/jar/pack/coding.cpp Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/native/com/sun/java/util/jar/pack/coding.cpp Tue Apr 21 21:26:21 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2002-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
@@ -814,6 +814,7 @@
}
band_rp = vs.rp;
}
+ CHECK;
// Get an accurate upper limit now.
vs0.rplimit = band_rp;
--- a/jdk/src/share/native/com/sun/java/util/jar/pack/defines.h Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/native/com/sun/java/util/jar/pack/defines.h Tue Apr 21 21:26:21 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2001-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2001-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
@@ -47,11 +47,13 @@
#define NOT_PRODUCT(xxx)
#define assert(p)
#define PRINTCR(args)
+#define VERSION_STRING "%s version %s\n"
#else
#define IF_PRODUCT(xxx)
#define NOT_PRODUCT(xxx) xxx
#define assert(p) ((p) || assert_failed(#p))
#define PRINTCR(args) u->verbose && u->printcr_if_verbose args
+#define VERSION_STRING "%s version non-product %s\n"
extern "C" void breakpoint();
extern int assert_failed(const char*);
#define BREAK (breakpoint())
@@ -79,9 +81,9 @@
#define lengthof(array) (sizeof(array)/sizeof(array[0]))
-#define NEW(T, n) (T*) must_malloc((int)(sizeof(T)*(n)))
-#define U_NEW(T, n) (T*) u->alloc(sizeof(T)*(n))
-#define T_NEW(T, n) (T*) u->temp_alloc(sizeof(T)*(n))
+#define NEW(T, n) (T*) must_malloc((int)(scale_size(n, sizeof(T))))
+#define U_NEW(T, n) (T*) u->alloc(scale_size(n, sizeof(T)))
+#define T_NEW(T, n) (T*) u->temp_alloc(scale_size(n, sizeof(T)))
// bytes and byte arrays
@@ -153,6 +155,8 @@
#define CHECK_NULL_(y,p) _CHECK_DO((p)==null, return y)
#define CHECK_NULL_0(p) _CHECK_DO((p)==null, return 0)
+#define CHECK_COUNT(t) if (t < 0){abort("bad value count");} CHECK
+
#define STR_TRUE "true"
#define STR_FALSE "false"
--- a/jdk/src/share/native/com/sun/java/util/jar/pack/main.cpp Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/native/com/sun/java/util/jar/pack/main.cpp Tue Apr 21 21:26:21 2009 -0700
@@ -299,7 +299,7 @@
case 'J': argp += 1; break; // skip ignored -Jxxx parameter
case 'V':
- fprintf(u.errstrm, "%s version %s\n", nbasename(argv[0]), sccsver);
+ fprintf(u.errstrm, VERSION_STRING, nbasename(argv[0]), sccsver);
exit(0);
case 'h':
--- a/jdk/src/share/native/com/sun/java/util/jar/pack/unpack.cpp Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/native/com/sun/java/util/jar/pack/unpack.cpp Tue Apr 21 21:26:21 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2001-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2001-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
@@ -523,15 +523,39 @@
enum {
MAGIC_BYTES = 4,
AH_LENGTH_0 = 3, //minver, majver, options are outside of archive_size
+ AH_LENGTH_0_MAX = AH_LENGTH_0 + 1, // options might have 2 bytes
AH_LENGTH = 26, //maximum archive header length (w/ all fields)
// Length contributions from optional header fields:
AH_FILE_HEADER_LEN = 5, // sizehi/lo/next/modtime/files
+ AH_ARCHIVE_SIZE_LEN = 2, // sizehi/lo only; part of AH_FILE_HEADER_LEN
AH_CP_NUMBER_LEN = 4, // int/float/long/double
AH_SPECIAL_FORMAT_LEN = 2, // layouts/band-headers
AH_LENGTH_MIN = AH_LENGTH
-(AH_FILE_HEADER_LEN+AH_SPECIAL_FORMAT_LEN+AH_CP_NUMBER_LEN),
+ ARCHIVE_SIZE_MIN = AH_LENGTH_MIN - (AH_LENGTH_0 + AH_ARCHIVE_SIZE_LEN),
FIRST_READ = MAGIC_BYTES + AH_LENGTH_MIN
};
+
+ assert(AH_LENGTH_MIN == 15); // # of UNSIGNED5 fields required after archive_magic
+ assert(ARCHIVE_SIZE_MIN == 10); // # of UNSIGNED5 fields required after archive_size
+ // An absolute minimum null archive is magic[4], {minver,majver,options}[3],
+ // archive_size[0], cp_counts[8], class_counts[4], for a total of 19 bytes.
+ // (Note that archive_size is optional; it may be 0..10 bytes in length.)
+ // The first read must capture everything up through the options field.
+ // This happens to work even if {minver,majver,options} is a pathological
+ // 15 bytes long. Legal pack files limit those three fields to 1+1+2 bytes.
+ assert(FIRST_READ >= MAGIC_BYTES + AH_LENGTH_0 * B_MAX);
+
+ // Up through archive_size, the largest possible archive header is
+ // magic[4], {minver,majver,options}[4], archive_size[10].
+ // (Note only the low 12 bits of options are allowed to be non-zero.)
+ // In order to parse archive_size, we need at least this many bytes
+ // in the first read. Of course, if archive_size_hi is more than
+ // a byte, we probably will fail to allocate the buffer, since it
+ // will be many gigabytes long. This is a practical, not an
+ // architectural limit to Pack200 archive sizes.
+ assert(FIRST_READ >= MAGIC_BYTES + AH_LENGTH_0_MAX + 2*B_MAX);
+
bool foreign_buf = (read_input_fn == null);
byte initbuf[(int)FIRST_READ + (int)C_SLOP + 200]; // 200 is for JAR I/O
if (foreign_buf) {
@@ -547,7 +571,7 @@
// There is no way to tell the caller that we used only part of them.
// Therefore, the caller must use only a bare minimum of read-ahead.
if (inbytes.len > FIRST_READ) {
- abort("too much pushback");
+ abort("too much read-ahead");
return;
}
input.set(initbuf, sizeof(initbuf));
@@ -557,7 +581,7 @@
rplimit += inbytes.len;
bytes_read += inbytes.len;
}
- // Read only 19 bytes, which is certain to contain #archive_size fields,
+ // Read only 19 bytes, which is certain to contain #archive_options fields,
// but is certain not to overflow past the archive_header.
input.b.len = FIRST_READ;
if (!ensure_input(FIRST_READ))
@@ -629,26 +653,25 @@
#undef ORBIT
if ((archive_options & ~OPTION_LIMIT) != 0) {
fprintf(errstrm, "Warning: Illegal archive options 0x%x\n",
- archive_options);
- // Do not abort. If the format really changes, version numbers will bump.
- //abort("illegal archive options");
+ archive_options);
+ abort("illegal archive options");
+ return;
}
if ((archive_options & AO_HAVE_FILE_HEADERS) != 0) {
uint hi = hdr.getInt();
uint lo = hdr.getInt();
- archive_size = band::makeLong(hi, lo);
+ julong x = band::makeLong(hi, lo);
+ archive_size = (size_t) x;
+ if (archive_size != x) {
+ // Silly size specified; force overflow.
+ archive_size = PSIZE_MAX+1;
+ }
hdrVals += 2;
} else {
hdrValsSkipped += 2;
}
- if (archive_size != (size_t)archive_size) {
- // Silly size specified.
- abort("archive too large");
- return;
- }
-
// Now we can size the whole archive.
// Read everything else into a mega-buffer.
rp = hdr.rp;
@@ -662,9 +685,18 @@
abort("EOF reading fixed input buffer");
return;
}
- } else if (archive_size > 0) {
- input.set(U_NEW(byte, (size_t)(header_size_0 + archive_size + C_SLOP)),
- (size_t) header_size_0 + (size_t)archive_size);
+ } else if (archive_size != 0) {
+ if (archive_size < ARCHIVE_SIZE_MIN) {
+ abort("impossible archive size"); // bad input data
+ return;
+ }
+ if (archive_size < header_size_1) {
+ abort("too much read-ahead"); // somehow we pre-fetched too much?
+ return;
+ }
+ input.set(U_NEW(byte, add_size(header_size_0, archive_size, C_SLOP)),
+ (size_t) header_size_0 + archive_size);
+ CHECK;
assert(input.limit()[0] == 0);
// Move all the bytes we read initially into the real buffer.
input.b.copyFrom(initbuf, header_size);
@@ -673,17 +705,17 @@
} else {
// It's more complicated and painful.
// A zero archive_size means that we must read until EOF.
- assert(archive_size == 0);
input.init(CHUNK*2);
CHECK;
input.b.len = input.allocated;
rp = rplimit = input.base();
// Set up input buffer as if we already read the header:
input.b.copyFrom(initbuf, header_size);
+ CHECK;
rplimit += header_size;
while (ensure_input(input.limit() - rp)) {
size_t dataSoFar = input_remaining();
- size_t nextSize = dataSoFar + CHUNK;
+ size_t nextSize = add_size(dataSoFar, CHUNK);
input.ensureSize(nextSize);
CHECK;
input.b.len = input.allocated;
@@ -715,8 +747,10 @@
if ((archive_options & AO_HAVE_FILE_HEADERS) != 0) {
archive_next_count = hdr.getInt();
+ CHECK_COUNT(archive_next_count);
archive_modtime = hdr.getInt();
file_count = hdr.getInt();
+ CHECK_COUNT(file_count);
hdrVals += 3;
} else {
hdrValsSkipped += 3;
@@ -724,7 +758,9 @@
if ((archive_options & AO_HAVE_SPECIAL_FORMATS) != 0) {
band_headers_size = hdr.getInt();
+ CHECK_COUNT(band_headers_size);
attr_definition_count = hdr.getInt();
+ CHECK_COUNT(attr_definition_count);
hdrVals += 2;
} else {
hdrValsSkipped += 2;
@@ -744,13 +780,16 @@
}
}
cp_counts[k] = hdr.getInt();
+ CHECK_COUNT(cp_counts[k]);
hdrVals += 1;
}
ic_count = hdr.getInt();
+ CHECK_COUNT(ic_count);
default_class_minver = hdr.getInt();
default_class_majver = hdr.getInt();
class_count = hdr.getInt();
+ CHECK_COUNT(class_count);
hdrVals += 4;
// done with archive_header
@@ -807,7 +846,6 @@
bytes::of(band_headers.limit(), C_SLOP).clear(_meta_error);
}
-
void unpacker::finish() {
if (verbose >= 1) {
fprintf(errstrm,
@@ -973,12 +1011,12 @@
// First band: Read lengths of shared prefixes.
if (len > PREFIX_SKIP_2)
cp_Utf8_prefix.readData(len - PREFIX_SKIP_2);
- NOT_PRODUCT(else cp_Utf8_prefix.readData(0)); // for asserts
+ NOT_PRODUCT(else cp_Utf8_prefix.readData(0)); // for asserts
// Second band: Read lengths of unshared suffixes:
if (len > SUFFIX_SKIP_1)
cp_Utf8_suffix.readData(len - SUFFIX_SKIP_1);
- NOT_PRODUCT(else cp_Utf8_suffix.readData(0)); // for asserts
+ NOT_PRODUCT(else cp_Utf8_suffix.readData(0)); // for asserts
bytes* allsuffixes = T_NEW(bytes, len);
CHECK;
@@ -2117,6 +2155,7 @@
field_descr.readData(field_count);
read_attrs(ATTR_CONTEXT_FIELD, field_count);
+ CHECK;
method_descr.readData(method_count);
read_attrs(ATTR_CONTEXT_METHOD, method_count);
@@ -2124,6 +2163,7 @@
CHECK;
read_attrs(ATTR_CONTEXT_CLASS, class_count);
+ CHECK;
read_code_headers();
@@ -2150,10 +2190,12 @@
assert(endsWith(xxx_flags_hi.name, "_flags_hi"));
if (haveLongFlags)
xxx_flags_hi.readData(obj_count);
+ CHECK;
band& xxx_flags_lo = ad.xxx_flags_lo();
assert(endsWith(xxx_flags_lo.name, "_flags_lo"));
xxx_flags_lo.readData(obj_count);
+ CHECK;
// pre-scan flags, counting occurrences of each index bit
julong indexMask = ad.flagIndexMask(); // which flag bits are index bits?
@@ -2176,11 +2218,13 @@
assert(endsWith(xxx_attr_count.name, "_attr_count"));
// There is one count element for each 1<<16 bit set in flags:
xxx_attr_count.readData(ad.predefCount(X_ATTR_OVERFLOW));
+ CHECK;
band& xxx_attr_indexes = ad.xxx_attr_indexes();
assert(endsWith(xxx_attr_indexes.name, "_attr_indexes"));
int overflowIndexCount = xxx_attr_count.getIntTotal();
xxx_attr_indexes.readData(overflowIndexCount);
+ CHECK;
// pre-scan attr indexes, counting occurrences of each value
for (i = 0; i < overflowIndexCount; i++) {
idx = xxx_attr_indexes.getInt();
@@ -2211,6 +2255,7 @@
}
}
ad.xxx_attr_calls().readData(backwardCounts);
+ CHECK;
// Read built-in bands.
// Mostly, these are hand-coded equivalents to readBandData().
@@ -2219,42 +2264,53 @@
count = ad.predefCount(CLASS_ATTR_SourceFile);
class_SourceFile_RUN.readData(count);
+ CHECK;
count = ad.predefCount(CLASS_ATTR_EnclosingMethod);
class_EnclosingMethod_RC.readData(count);
class_EnclosingMethod_RDN.readData(count);
+ CHECK;
count = ad.predefCount(X_ATTR_Signature);
class_Signature_RS.readData(count);
+ CHECK;
ad.readBandData(X_ATTR_RuntimeVisibleAnnotations);
ad.readBandData(X_ATTR_RuntimeInvisibleAnnotations);
count = ad.predefCount(CLASS_ATTR_InnerClasses);
class_InnerClasses_N.readData(count);
+ CHECK;
+
count = class_InnerClasses_N.getIntTotal();
class_InnerClasses_RC.readData(count);
class_InnerClasses_F.readData(count);
+ CHECK;
// Drop remaining columns wherever flags are zero:
count -= class_InnerClasses_F.getIntCount(0);
class_InnerClasses_outer_RCN.readData(count);
class_InnerClasses_name_RUN.readData(count);
+ CHECK;
count = ad.predefCount(CLASS_ATTR_ClassFile_version);
class_ClassFile_version_minor_H.readData(count);
class_ClassFile_version_major_H.readData(count);
+ CHECK;
break;
case ATTR_CONTEXT_FIELD:
count = ad.predefCount(FIELD_ATTR_ConstantValue);
field_ConstantValue_KQ.readData(count);
+ CHECK;
count = ad.predefCount(X_ATTR_Signature);
field_Signature_RS.readData(count);
+ CHECK;
ad.readBandData(X_ATTR_RuntimeVisibleAnnotations);
ad.readBandData(X_ATTR_RuntimeInvisibleAnnotations);
+ CHECK;
break;
case ATTR_CONTEXT_METHOD:
@@ -2266,15 +2322,18 @@
method_Exceptions_N.readData(count);
count = method_Exceptions_N.getIntTotal();
method_Exceptions_RC.readData(count);
+ CHECK;
count = ad.predefCount(X_ATTR_Signature);
method_Signature_RS.readData(count);
+ CHECK;
ad.readBandData(X_ATTR_RuntimeVisibleAnnotations);
ad.readBandData(X_ATTR_RuntimeInvisibleAnnotations);
ad.readBandData(METHOD_ATTR_RuntimeVisibleParameterAnnotations);
ad.readBandData(METHOD_ATTR_RuntimeInvisibleParameterAnnotations);
ad.readBandData(METHOD_ATTR_AnnotationDefault);
+ CHECK;
break;
case ATTR_CONTEXT_CODE:
@@ -2286,8 +2345,10 @@
return;
}
code_StackMapTable_N.readData(count);
+ CHECK;
count = code_StackMapTable_N.getIntTotal();
code_StackMapTable_frame_T.readData(count);
+ CHECK;
// the rest of it depends in a complicated way on frame tags
{
int fat_frame_count = 0;
@@ -2321,18 +2382,23 @@
// deal completely with fat frames:
offset_count += fat_frame_count;
code_StackMapTable_local_N.readData(fat_frame_count);
+ CHECK;
type_count += code_StackMapTable_local_N.getIntTotal();
code_StackMapTable_stack_N.readData(fat_frame_count);
type_count += code_StackMapTable_stack_N.getIntTotal();
+ CHECK;
// read the rest:
code_StackMapTable_offset.readData(offset_count);
code_StackMapTable_T.readData(type_count);
+ CHECK;
// (7) [RCH]
count = code_StackMapTable_T.getIntCount(7);
code_StackMapTable_RC.readData(count);
+ CHECK;
// (8) [PH]
count = code_StackMapTable_T.getIntCount(8);
code_StackMapTable_P.readData(count);
+ CHECK;
}
count = ad.predefCount(CODE_ATTR_LineNumberTable);
@@ -2654,6 +2720,7 @@
code_max_na_locals.readData();
code_handler_count.readData();
totalHandlerCount += code_handler_count.getIntTotal();
+ CHECK;
// Read handler specifications.
// Cf. PackageReader.readCodeHandlers.
@@ -2661,8 +2728,10 @@
code_handler_end_PO.readData(totalHandlerCount);
code_handler_catch_PO.readData(totalHandlerCount);
code_handler_class_RCN.readData(totalHandlerCount);
+ CHECK;
read_attrs(ATTR_CONTEXT_CODE, totalFlagsCount);
+ CHECK;
}
static inline bool is_in_range(uint n, uint min, uint max) {
--- a/jdk/src/share/native/com/sun/java/util/jar/pack/unpack.h Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/native/com/sun/java/util/jar/pack/unpack.h Tue Apr 21 21:26:21 2009 -0700
@@ -204,7 +204,7 @@
// archive header fields
int magic, minver, majver;
- julong archive_size;
+ size_t archive_size;
int archive_next_count, archive_options, archive_modtime;
int band_headers_size;
int file_count, attr_definition_count, ic_count, class_count;
--- a/jdk/src/share/native/com/sun/java/util/jar/pack/utils.cpp Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/native/com/sun/java/util/jar/pack/utils.cpp Tue Apr 21 21:26:21 2009 -0700
@@ -46,14 +46,13 @@
#include "unpack.h"
-void* must_malloc(int size) {
- int msize = size;
- assert(size >= 0);
+void* must_malloc(size_t size) {
+ size_t msize = size;
#ifdef USE_MTRACE
- if (msize < sizeof(int))
+ if (msize >= 0 && msize < sizeof(int))
msize = sizeof(int); // see 0xbaadf00d below
#endif
- void* ptr = malloc(msize);
+ void* ptr = (msize > PSIZE_MAX) ? null : malloc(msize);
if (ptr != null) {
memset(ptr, 0, size);
} else {
--- a/jdk/src/share/native/com/sun/java/util/jar/pack/utils.h Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/native/com/sun/java/util/jar/pack/utils.h Tue Apr 21 21:26:21 2009 -0700
@@ -25,13 +25,31 @@
//Definitions of our util functions
-void* must_malloc(int size);
+void* must_malloc(size_t size);
#ifndef USE_MTRACE
#define mtrace(c, ptr, size)
#else
void mtrace(char c, void* ptr, size_t size);
#endif
+// overflow management
+#define OVERFLOW ((size_t)-1)
+#define PSIZE_MAX (OVERFLOW/2) /* normal size limit */
+
+inline size_t scale_size(size_t size, size_t scale) {
+ return (size > PSIZE_MAX / scale) ? OVERFLOW : size * scale;
+}
+
+inline size_t add_size(size_t size1, size_t size2) {
+ return ((size1 | size2 | (size1 + size2)) > PSIZE_MAX)
+ ? OVERFLOW
+ : size1 + size2;
+}
+
+inline size_t add_size(size_t size1, size_t size2, int size3) {
+ return add_size(add_size(size1, size2), size3);
+}
+
// These may be expensive, because they have to go via Java TSD,
// if the optional u argument is missing.
struct unpacker;
--- a/jdk/src/share/native/java/util/zip/ZipEntry.c Wed Jul 05 16:51:35 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,105 +0,0 @@
-/*
- * Copyright 1998 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.
- */
-
-/*
- * Native method support for java.util.zip.ZipEntry
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "jlong.h"
-#include "jvm.h"
-#include "jni.h"
-#include "jni_util.h"
-#include "zip_util.h"
-
-#include "java_util_zip_ZipEntry.h"
-
-#define DEFLATED 8
-#define STORED 0
-
-static jfieldID nameID;
-static jfieldID timeID;
-static jfieldID crcID;
-static jfieldID sizeID;
-static jfieldID csizeID;
-static jfieldID methodID;
-static jfieldID extraID;
-static jfieldID commentID;
-
-JNIEXPORT void JNICALL
-Java_java_util_zip_ZipEntry_initIDs(JNIEnv *env, jclass cls)
-{
- nameID = (*env)->GetFieldID(env, cls, "name", "Ljava/lang/String;");
- timeID = (*env)->GetFieldID(env, cls, "time", "J");
- crcID = (*env)->GetFieldID(env, cls, "crc", "J");
- sizeID = (*env)->GetFieldID(env, cls, "size", "J");
- csizeID = (*env)->GetFieldID(env, cls, "csize", "J");
- methodID = (*env)->GetFieldID(env, cls, "method", "I");
- extraID = (*env)->GetFieldID(env, cls, "extra", "[B");
- commentID = (*env)->GetFieldID(env, cls, "comment", "Ljava/lang/String;");
-}
-
-JNIEXPORT void JNICALL
-Java_java_util_zip_ZipEntry_initFields(JNIEnv *env, jobject obj, jlong zentry)
-{
- jzentry *ze = jlong_to_ptr(zentry);
- jstring name = (*env)->GetObjectField(env, obj, nameID);
-
- if (name == 0) {
- name = (*env)->NewStringUTF(env, ze->name);
- if (name == 0) {
- return;
- }
- (*env)->SetObjectField(env, obj, nameID, name);
- }
- (*env)->SetLongField(env, obj, timeID, (jlong)ze->time & 0xffffffffUL);
- (*env)->SetLongField(env, obj, crcID, (jlong)ze->crc & 0xffffffffUL);
- (*env)->SetLongField(env, obj, sizeID, (jlong)ze->size);
- if (ze->csize == 0) {
- (*env)->SetLongField(env, obj, csizeID, (jlong)ze->size);
- (*env)->SetIntField(env, obj, methodID, STORED);
- } else {
- (*env)->SetLongField(env, obj, csizeID, (jlong)ze->csize);
- (*env)->SetIntField(env, obj, methodID, DEFLATED);
- }
- if (ze->extra != 0) {
- unsigned char *bp = (unsigned char *)&ze->extra[0];
- jsize len = (bp[0] | (bp[1] << 8));
- jbyteArray extra = (*env)->NewByteArray(env, len);
- if (extra == 0) {
- return;
- }
- (*env)->SetByteArrayRegion(env, extra, 0, len, &ze->extra[2]);
- (*env)->SetObjectField(env, obj, extraID, extra);
- }
- if (ze->comment != 0) {
- jstring comment = (*env)->NewStringUTF(env, ze->comment);
- if (comment == 0) {
- return;
- }
- (*env)->SetObjectField(env, obj, commentID, comment);
- }
-}
--- a/jdk/src/share/native/java/util/zip/ZipFile.c Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/native/java/util/zip/ZipFile.c Tue Apr 21 21:26:21 2009 -0700
@@ -141,12 +141,11 @@
JNIEXPORT jlong JNICALL
Java_java_util_zip_ZipFile_getEntry(JNIEnv *env, jclass cls, jlong zfile,
- jstring name, jboolean addSlash)
+ jbyteArray name, jboolean addSlash)
{
#define MAXNAME 1024
jzfile *zip = jlong_to_ptr(zfile);
- jsize slen = (*env)->GetStringLength(env, name);
- jsize ulen = (*env)->GetStringUTFLength(env, name);
+ jsize ulen = (*env)->GetArrayLength(env, name);
char buf[MAXNAME+2], *path;
jzentry *ze;
@@ -159,7 +158,7 @@
} else {
path = buf;
}
- (*env)->GetStringUTFRegion(env, name, 0, slen, path);
+ (*env)->GetByteArrayRegion(env, name, 0, ulen, (jbyte *)path);
path[ulen] = '\0';
if (addSlash == JNI_FALSE) {
ze = ZIP_GetEntry(zip, path, 0);
@@ -186,32 +185,85 @@
jint n)
{
jzentry *ze = ZIP_GetNextEntry(jlong_to_ptr(zfile), n);
-
return ptr_to_jlong(ze);
}
JNIEXPORT jint JNICALL
-Java_java_util_zip_ZipFile_getMethod(JNIEnv *env, jclass cls, jlong zentry)
+Java_java_util_zip_ZipFile_getEntryMethod(JNIEnv *env, jclass cls, jlong zentry)
{
jzentry *ze = jlong_to_ptr(zentry);
-
return ze->csize != 0 ? DEFLATED : STORED;
}
-JNIEXPORT jlong JNICALL
-Java_java_util_zip_ZipFile_getCSize(JNIEnv *env, jclass cls, jlong zentry)
+JNIEXPORT jint JNICALL
+Java_java_util_zip_ZipFile_getEntryFlag(JNIEnv *env, jclass cls, jlong zentry)
{
jzentry *ze = jlong_to_ptr(zentry);
+ return ze->flag;
+}
+JNIEXPORT jlong JNICALL
+Java_java_util_zip_ZipFile_getEntryCSize(JNIEnv *env, jclass cls, jlong zentry)
+{
+ jzentry *ze = jlong_to_ptr(zentry);
return ze->csize != 0 ? ze->csize : ze->size;
}
JNIEXPORT jlong JNICALL
-Java_java_util_zip_ZipFile_getSize(JNIEnv *env, jclass cls, jlong zentry)
+Java_java_util_zip_ZipFile_getEntrySize(JNIEnv *env, jclass cls, jlong zentry)
+{
+ jzentry *ze = jlong_to_ptr(zentry);
+ return ze->size;
+}
+
+JNIEXPORT jlong JNICALL
+Java_java_util_zip_ZipFile_getEntryTime(JNIEnv *env, jclass cls, jlong zentry)
+{
+ jzentry *ze = jlong_to_ptr(zentry);
+ return (jlong)ze->time & 0xffffffffUL;
+}
+
+JNIEXPORT jlong JNICALL
+Java_java_util_zip_ZipFile_getEntryCrc(JNIEnv *env, jclass cls, jlong zentry)
+{
+ jzentry *ze = jlong_to_ptr(zentry);
+ return (jlong)ze->crc & 0xffffffffUL;
+}
+
+JNIEXPORT jbyteArray JNICALL
+Java_java_util_zip_ZipFile_getEntryBytes(JNIEnv *env, jclass cls, jlong zentry, jint type)
{
jzentry *ze = jlong_to_ptr(zentry);
-
- return ze->size;
+ int len = 0;
+ jbyteArray jba = NULL;
+ switch (type) {
+ case java_util_zip_ZipFile_JZENTRY_NAME:
+ if (ze->name != 0) {
+ len = (int)strlen(ze->name);
+ if (len == 0 || (jba = (*env)->NewByteArray(env, len)) == NULL)
+ break;
+ (*env)->SetByteArrayRegion(env, jba, 0, len, (jbyte *)ze->name);
+ }
+ break;
+ case java_util_zip_ZipFile_JZENTRY_EXTRA:
+ if (ze->extra != 0) {
+ unsigned char *bp = (unsigned char *)&ze->extra[0];
+ len = (bp[0] | (bp[1] << 8));
+ if (len <= 0 || (jba = (*env)->NewByteArray(env, len)) == NULL)
+ break;
+ (*env)->SetByteArrayRegion(env, jba, 0, len, &ze->extra[2]);
+ }
+ break;
+ case java_util_zip_ZipFile_JZENTRY_COMMENT:
+ if (ze->comment != 0) {
+ len = (int)strlen(ze->comment);
+ if (len == 0 || (jba = (*env)->NewByteArray(env, len)) == NULL)
+ break;
+ (*env)->SetByteArrayRegion(env, jba, 0, len, (jbyte*)ze->comment);
+ }
+ break;
+ }
+ return jba;
}
JNIEXPORT jint JNICALL
--- a/jdk/src/share/native/java/util/zip/zip_util.c Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/native/java/util/zip/zip_util.c Tue Apr 21 21:26:21 2009 -0700
@@ -512,7 +512,6 @@
/* Clear previous zip error */
zip->msg = NULL;
-
/* Get position of END header */
if ((endpos = findEND(zip, endbuf)) == -1)
return -1; /* no END header or system error */
@@ -520,7 +519,6 @@
if (endpos == 0) return 0; /* only END header present */
freeCEN(zip);
-
/* Get position and length of central directory */
cenlen = ENDSIZ(endbuf);
cenoff = ENDOFF(endbuf);
@@ -935,6 +933,7 @@
ze->crc = CENCRC(cen);
locoff = CENOFF(cen);
ze->pos = -(zip->locpos + locoff);
+ ze->flag = CENFLG(cen);
if ((ze->name = malloc(nlen + 1)) == NULL) goto Catch;
memcpy(ze->name, cen + CENHDR, nlen);
--- a/jdk/src/share/native/java/util/zip/zip_util.h Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/native/java/util/zip/zip_util.h Tue Apr 21 21:26:21 2009 -0700
@@ -168,6 +168,7 @@
char *comment; /* optional zip file comment */
jbyte *extra; /* optional extra data */
jlong pos; /* position of LOC header or entry data */
+ jint flag; /* general purpose flag */
} jzentry;
/*
--- a/jdk/src/share/native/sun/awt/giflib/dgif_lib.c Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/native/sun/awt/giflib/dgif_lib.c Tue Apr 21 21:26:21 2009 -0700
@@ -722,6 +722,10 @@
GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
READ(GifFile, &CodeSize, 1); /* Read Code size from file. */
+ if (CodeSize >= 12) {
+ /* Invalid initial code size: report failure */
+ return GIF_ERROR;
+ }
BitsPerPixel = CodeSize;
Private->Buf[0] = 0; /* Input Buffer empty. */
@@ -964,10 +968,13 @@
/* If code cannot fit into RunningBits bits, must raise its size. Note
* however that codes above 4095 are used for special signaling. */
- if (++Private->RunningCode > Private->MaxCode1 &&
- Private->RunningBits < LZ_BITS) {
- Private->MaxCode1 <<= 1;
- Private->RunningBits++;
+ if (++Private->RunningCode > Private->MaxCode1) {
+ if (Private->RunningBits < LZ_BITS) {
+ Private->MaxCode1 <<= 1;
+ Private->RunningBits++;
+ } else {
+ Private->RunningCode = Private->MaxCode1;
+ }
}
return GIF_OK;
}
--- a/jdk/src/share/native/sun/awt/image/gif/gifdecoder.c Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/native/sun/awt/image/gif/gifdecoder.c Tue Apr 21 21:26:21 2009 -0700
@@ -191,6 +191,11 @@
int passht = passinc;
int len;
+ /* We have verified the initial code size on the java layer.
+ * Here we just check bounds for particular indexes. */
+ if (freeCode >= 4096 || maxCode >= 4096) {
+ return 0;
+ }
if (blockh == 0 || raslineh == 0
|| prefixh == 0 || suffixh == 0
|| outCodeh == 0)
--- a/jdk/src/share/native/sun/awt/medialib/awt_ImagingLib.c Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/native/sun/awt/medialib/awt_ImagingLib.c Tue Apr 21 21:26:21 2009 -0700
@@ -216,6 +216,16 @@
#endif /* ! DEBUG */
+static int
+getMlibEdgeHint(jint edgeHint) {
+ switch (edgeHint) {
+ case java_awt_image_ConvolveOp_EDGE_NO_OP:
+ return MLIB_EDGE_DST_COPY_SRC;
+ case java_awt_image_ConvolveOp_EDGE_ZERO_FILL:
+ default:
+ return MLIB_EDGE_DST_FILL_ZERO;
+ }
+}
/***************************************************************************
* External Functions *
@@ -400,22 +410,10 @@
}
}
- if (edgeHint == java_awt_image_ConvolveOp_EDGE_NO_OP) {
- int kw2 = kwidth>>1;
- int kh2 = kheight>>1;
- int bsize = mlib_ImageGetChannels(src)*
- (mlib_ImageGetType(src) == MLIB_BYTE ? 1 : 2);
-
- void *dstDataP = mlib_ImageGetData(dst);
- void *srcDataP = mlib_ImageGetData(src);
- /* REMIND: Copy a smaller area */
- memcpy(dstDataP, srcDataP, dst->width*dst->height*bsize);
- }
-
cmask = (1<<src->channels)-1;
status = (*sMlibFns[MLIB_CONVMxN].fptr)(dst, src, kdata, w, h,
(w-1)/2, (h-1)/2, scale, cmask,
- MLIB_EDGE_DST_NO_WRITE);
+ getMlibEdgeHint(edgeHint));
if (status != MLIB_SUCCESS) {
printMedialibError(status);
@@ -660,22 +658,10 @@
}
}
- if (edgeHint == java_awt_image_ConvolveOp_EDGE_NO_OP) {
- int kw2 = kwidth>>1;
- int kh2 = kheight>>1;
- int bsize = mlib_ImageGetChannels(src)*
- (mlib_ImageGetType(src) == MLIB_BYTE ? 1 : 2);
-
- void *dstDataP = mlib_ImageGetData(dst);
- void *srcDataP = mlib_ImageGetData(src);
- /* REMIND: Copy a smaller area */
- memcpy(dstDataP, srcDataP, dst->width*dst->height*bsize);
- }
-
cmask = (1<<src->channels)-1;
status = (*sMlibFns[MLIB_CONVMxN].fptr)(dst, src, kdata, w, h,
(w-1)/2, (h-1)/2, scale, cmask,
- MLIB_EDGE_DST_NO_WRITE);
+ getMlibEdgeHint(edgeHint));
if (status != MLIB_SUCCESS) {
printMedialibError(status);
--- a/jdk/src/share/native/sun/awt/splashscreen/splashscreen_gfx_impl.h Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/native/sun/awt/splashscreen/splashscreen_gfx_impl.h Tue Apr 21 21:26:21 2009 -0700
@@ -31,7 +31,7 @@
/* here come some very simple macros */
/* advance a pointer p by sizeof(type)*n bytes */
-#define INCPN(type,p,n) ((p) = (type*)(p)+n)
+#define INCPN(type,p,n) ((p) = (type*)(p)+(n))
/* advance a pointer by sizeof(type) */
#define INCP(type,p) INCPN(type,(p),1)
--- a/jdk/src/share/native/sun/awt/splashscreen/splashscreen_gif.c Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/native/sun/awt/splashscreen/splashscreen_gif.c Tue Apr 21 21:26:21 2009 -0700
@@ -62,6 +62,15 @@
return rc;
}
+/* These macro help to ensure that we only take part of frame that fits into
+ logical screen. */
+
+/* Ensure that p belongs to [pmin, pmax) interval. Returns fixed point (if fix is needed) */
+#define FIX_POINT(p, pmin, pmax) ( ((p) < (pmin)) ? (pmin) : (((p) > (pmax)) ? (pmax) : (p)))
+/* Ensures that line starting at point p does not exceed boundary pmax.
+ Returns fixed length (if fix is needed) */
+#define FIX_LENGTH(p, len, pmax) ( ((p) + (len)) > (pmax) ? ((pmax) - (p)) : (len))
+
int
SplashDecodeGif(Splash * splash, GifFileType * gif)
{
@@ -70,6 +79,7 @@
byte_t *pBitmapBits, *pOldBitmapBits;
int i, j;
int imageIndex;
+ int cx, cy, cw, ch; /* clamped coordinates */
const int interlacedOffset[] = { 0, 4, 2, 1, 0 }; /* The way Interlaced image should. */
const int interlacedJumps[] = { 8, 8, 4, 2, 1 }; /* be read - offsets and jumps... */
@@ -79,14 +89,31 @@
SplashCleanup(splash);
+ if (!SAFE_TO_ALLOC(gif->SWidth, splash->imageFormat.depthBytes)) {
+ return 0;
+ }
stride = gif->SWidth * splash->imageFormat.depthBytes;
if (splash->byteAlignment > 1)
stride =
(stride + splash->byteAlignment - 1) & ~(splash->byteAlignment - 1);
+ if (!SAFE_TO_ALLOC(gif->SHeight, stride)) {
+ return 0;
+ }
+
+ if (!SAFE_TO_ALLOC(gif->ImageCount, sizeof(SplashImage*))) {
+ return 0;
+ }
bufferSize = stride * gif->SHeight;
pBitmapBits = (byte_t *) malloc(bufferSize);
+ if (!pBitmapBits) {
+ return 0;
+ }
pOldBitmapBits = (byte_t *) malloc(bufferSize);
+ if (!pOldBitmapBits) {
+ free(pBitmapBits);
+ return 0;
+ }
memset(pBitmapBits, 0, bufferSize);
splash->width = gif->SWidth;
@@ -94,6 +121,11 @@
splash->frameCount = gif->ImageCount;
splash->frames = (SplashImage *)
malloc(sizeof(SplashImage) * gif->ImageCount);
+ if (!splash->frames) {
+ free(pBitmapBits);
+ free(pOldBitmapBits);
+ return 0;
+ }
memset(splash->frames, 0, sizeof(SplashImage) * gif->ImageCount);
splash->loopCount = 1;
@@ -109,6 +141,11 @@
int colorCount = 0;
rgbquad_t colorMapBuf[SPLASH_COLOR_MAP_SIZE];
+ cx = FIX_POINT(desc->Left, 0, gif->SWidth);
+ cy = FIX_POINT(desc->Top, 0, gif->SHeight);
+ cw = FIX_LENGTH(desc->Left, desc->Width, gif->SWidth);
+ ch = FIX_LENGTH(desc->Top, desc->Height, gif->SHeight);
+
if (colorMap) {
if (colorMap->ColorCount <= SPLASH_COLOR_MAP_SIZE) {
colorCount = colorMap->ColorCount;
@@ -195,13 +232,22 @@
for (; pass < npass; ++pass) {
int jump = interlacedJumps[pass];
int ofs = interlacedOffset[pass];
- int numLines = (desc->Height + jump - 1 - ofs) / jump;
+ /* Number of source lines for current pass */
+ int numPassLines = (desc->Height + jump - ofs - 1) / jump;
+ /* Number of lines that fits to dest buffer */
+ int numLines = (ch + jump - ofs - 1) / jump;
initRect(&srcRect, 0, 0, desc->Width, numLines, 1,
desc->Width, pSrc, &srcFormat);
- initRect(&dstRect, desc->Left, desc->Top + ofs, desc->Width,
- numLines, jump, stride, pBitmapBits, &splash->imageFormat);
- pSrc += convertRect(&srcRect, &dstRect, CVT_ALPHATEST);
+
+ if (numLines > 0) {
+ initRect(&dstRect, cx, cy + ofs, cw,
+ numLines , jump, stride, pBitmapBits, &splash->imageFormat);
+
+ pSrc += convertRect(&srcRect, &dstRect, CVT_ALPHATEST);
+ }
+ // skip extra source data
+ pSrc += (numPassLines - numLines) * srcRect.stride;
}
}
@@ -209,6 +255,12 @@
splash->frames[imageIndex].bitmapBits =
(rgbquad_t *) malloc(bufferSize);
+ if (!splash->frames[imageIndex].bitmapBits) {
+ free(pBitmapBits);
+ free(pOldBitmapBits);
+ /* Assuming that callee will take care of splash frames we have already allocated */
+ return 0;
+ }
memcpy(splash->frames[imageIndex].bitmapBits, pBitmapBits, bufferSize);
SplashInitFrameShape(splash, imageIndex);
@@ -224,27 +276,29 @@
{
ImageRect dstRect;
rgbquad_t fillColor = 0; // 0 is transparent
- if (transparentColor < 0) {
+
+ if (transparentColor > 0) {
fillColor= MAKE_QUAD_GIF(
colorMap->Colors[gif->SBackGroundColor], 0xff);
}
- initRect(&dstRect, desc->Left, desc->Top,
- desc->Width, desc->Height, 1, stride,
- pBitmapBits, &splash->imageFormat);
+ initRect(&dstRect,
+ cx, cy, cw, ch,
+ 1, stride,
+ pBitmapBits, &splash->imageFormat);
fillRect(fillColor, &dstRect);
}
break;
case GIF_DISPOSE_RESTORE:
{
-
- int lineSize = desc->Width * splash->imageFormat.depthBytes;
-
- for (j = 0; j < desc->Height; j++) {
- int lineIndex = stride * (j + desc->Top) +
- desc->Left * splash->imageFormat.depthBytes;
-
- memcpy(pBitmapBits + lineIndex, pOldBitmapBits + lineIndex,
- lineSize);
+ int lineSize = cw * splash->imageFormat.depthBytes;
+ if (lineSize > 0) {
+ int lineOffset = cx * splash->imageFormat.depthBytes;
+ int lineIndex = cy * stride + lineOffset;
+ for (j=0; j<ch; j++) {
+ memcpy(pBitmapBits + lineIndex, pOldBitmapBits + lineIndex,
+ lineSize);
+ lineIndex += stride;
+ }
}
}
break;
--- a/jdk/src/share/native/sun/awt/splashscreen/splashscreen_impl.h Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/native/sun/awt/splashscreen/splashscreen_impl.h Tue Apr 21 21:26:21 2009 -0700
@@ -155,6 +155,10 @@
void SplashInitFrameShape(Splash * splash, int imageIndex);
+#define SAFE_TO_ALLOC(c, sz) \
+ (((c) > 0) && ((sz) > 0) && \
+ ((0xffffffffu / ((unsigned int)(c))) > (unsigned int)(sz)))
+
#define dbgprintf printf
#endif
--- a/jdk/src/share/native/sun/awt/splashscreen/splashscreen_png.c Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/native/sun/awt/splashscreen/splashscreen_png.c Tue Apr 21 21:26:21 2009 -0700
@@ -103,9 +103,17 @@
rowbytes = png_get_rowbytes(png_ptr, info_ptr);
+ if (!SAFE_TO_ALLOC(rowbytes, height)) {
+ goto done;
+ }
+
if ((image_data = (unsigned char *) malloc(rowbytes * height)) == NULL) {
goto done;
}
+
+ if (!SAFE_TO_ALLOC(height, sizeof(png_bytep))) {
+ goto done;
+ }
if ((row_pointers = (png_bytepp) malloc(height * sizeof(png_bytep)))
== NULL) {
goto done;
@@ -121,13 +129,28 @@
splash->width = width;
splash->height = height;
+ if (!SAFE_TO_ALLOC(splash->width, splash->imageFormat.depthBytes)) {
+ goto done;
+ }
stride = splash->width * splash->imageFormat.depthBytes;
+ if (!SAFE_TO_ALLOC(splash->height, stride)) {
+ goto done;
+ }
splash->frameCount = 1;
splash->frames = (SplashImage *)
malloc(sizeof(SplashImage) * splash->frameCount);
+
+ if (splash->frames == NULL) {
+ goto done;
+ }
+
splash->loopCount = 1;
splash->frames[0].bitmapBits = malloc(stride * splash->height);
+ if (splash->frames[0].bitmapBits == NULL) {
+ free(splash->frames);
+ goto done;
+ }
splash->frames[0].delay = 0;
/* FIXME: sort out the real format */
--- a/jdk/src/share/sample/nio/file/Copy.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/share/sample/nio/file/Copy.java Tue Apr 21 21:26:21 2009 -0700
@@ -52,7 +52,7 @@
/**
* Copy source file to target location. If {@code prompt} is true then
- * prompted user to overwrite target if it exists. The {@code preserve}
+ * prompt user to overwrite target if it exists. The {@code preserve}
* parameter determines if file attributes should be copied/preserved.
*/
static void copyFile(Path source, Path target, boolean prompt, boolean preserve) {
@@ -63,7 +63,7 @@
try {
source.copyTo(target, options);
} catch (IOException x) {
- System.err.format("Unable to create: %s: %s%n", target, x);
+ System.err.format("Unable to copy: %s: %s%n", source, x);
}
}
}
@@ -124,13 +124,13 @@
public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
// fix up modification time of directory when done
if (exc == null && preserve) {
+ Path newdir = target.resolve(source.relativize(dir));
try {
BasicFileAttributes attrs = Attributes.readBasicFileAttributes(dir);
- Path newdir = target.resolve(source.relativize(dir));
Attributes.setLastModifiedTime(newdir,
attrs.lastModifiedTime(), attrs.resolution());
} catch (IOException x) {
- // ignore
+ System.err.format("Unable to copy all attributes to: %s: %s%n", newdir, x);
}
}
return CONTINUE;
@@ -191,6 +191,7 @@
try {
isDir = Attributes.readBasicFileAttributes(target).isDirectory();
} catch (IOException x) {
+ // ignore (probably target does not exist)
}
// copy each source file/directory to target
@@ -201,7 +202,7 @@
// follow links when copying files
EnumSet<FileVisitOption> opts = EnumSet.of(FileVisitOption.FOLLOW_LINKS);
TreeCopier tc = new TreeCopier(source[i], dest, prompt, preserve);
- Files.walkFileTree(source[i], opts, -1, tc);
+ Files.walkFileTree(source[i], opts, Integer.MAX_VALUE, tc);
} else {
// not recursive so source must not be a directory
try {
@@ -209,7 +210,9 @@
System.err.format("%s: is a directory%n", source[i]);
continue;
}
- } catch (IOException x) { }
+ } catch (IOException x) {
+ // assume not directory
+ }
copyFile(source[i], dest, prompt, preserve);
}
}
--- a/jdk/src/windows/classes/sun/nio/ch/WindowsAsynchronousFileChannelImpl.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/windows/classes/sun/nio/ch/WindowsAsynchronousFileChannelImpl.java Tue Apr 21 21:26:21 2009 -0700
@@ -354,16 +354,9 @@
}
}
- // invoke by FileFileImpl to release lock
@Override
- void release(FileLockImpl fli) throws IOException {
- try {
- begin();
- nd.release(fdObj, fli.position(), fli.size());
- removeFromFileLockTable(fli);
- } finally {
- end();
- }
+ protected void implRelease(FileLockImpl fli) throws IOException {
+ nd.release(fdObj, fli.position(), fli.size());
}
/**
--- a/jdk/src/windows/classes/sun/security/mscapi/RSAKeyPairGenerator.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/windows/classes/sun/security/mscapi/RSAKeyPairGenerator.java Tue Apr 21 21:26:21 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2005-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
@@ -31,6 +31,7 @@
import java.security.spec.RSAKeyGenParameterSpec;
import sun.security.jca.JCAUtil;
+import sun.security.rsa.RSAKeyFactory;
/**
* RSA keypair generator.
@@ -43,8 +44,8 @@
public final class RSAKeyPairGenerator extends KeyPairGeneratorSpi {
// Supported by Microsoft Base, Strong and Enhanced Cryptographic Providers
- private static final int KEY_SIZE_MIN = 512; // disallow MSCAPI min. of 384
- private static final int KEY_SIZE_MAX = 16384;
+ static final int KEY_SIZE_MIN = 512; // disallow MSCAPI min. of 384
+ static final int KEY_SIZE_MAX = 16384;
private static final int KEY_SIZE_DEFAULT = 1024;
// size of the key to generate, KEY_SIZE_MIN <= keySize <= KEY_SIZE_MAX
@@ -59,7 +60,14 @@
// random is always ignored
public void initialize(int keySize, SecureRandom random) {
- checkKeySize(keySize);
+ try {
+ RSAKeyFactory.checkKeyLengths(keySize, null,
+ KEY_SIZE_MIN, KEY_SIZE_MAX);
+ } catch (InvalidKeyException e) {
+ throw new InvalidParameterException(e.getMessage());
+ }
+
+ this.keySize = keySize;
}
// second initialize method. See JCA doc
@@ -67,21 +75,31 @@
public void initialize(AlgorithmParameterSpec params, SecureRandom random)
throws InvalidAlgorithmParameterException {
+ int tmpSize;
if (params == null) {
- checkKeySize(KEY_SIZE_DEFAULT);
-
+ tmpSize = KEY_SIZE_DEFAULT;
} else if (params instanceof RSAKeyGenParameterSpec) {
if (((RSAKeyGenParameterSpec) params).getPublicExponent() != null) {
throw new InvalidAlgorithmParameterException
("Exponent parameter is not supported");
}
- checkKeySize(((RSAKeyGenParameterSpec) params).getKeysize());
+ tmpSize = ((RSAKeyGenParameterSpec) params).getKeysize();
} else {
throw new InvalidAlgorithmParameterException
("Params must be an instance of RSAKeyGenParameterSpec");
}
+
+ try {
+ RSAKeyFactory.checkKeyLengths(tmpSize, null,
+ KEY_SIZE_MIN, KEY_SIZE_MAX);
+ } catch (InvalidKeyException e) {
+ throw new InvalidAlgorithmParameterException(
+ "Invalid Key sizes", e);
+ }
+
+ this.keySize = tmpSize;
}
// generate the keypair. See JCA doc
@@ -95,18 +113,6 @@
return new KeyPair(keys.getPublic(), keys.getPrivate());
}
- private void checkKeySize(int keySize) throws InvalidParameterException {
- if (keySize < KEY_SIZE_MIN) {
- throw new InvalidParameterException
- ("Key size must be at least " + KEY_SIZE_MIN + " bits");
- }
- if (keySize > KEY_SIZE_MAX) {
- throw new InvalidParameterException
- ("Key size must be " + KEY_SIZE_MAX + " bits or less");
- }
- this.keySize = keySize;
- }
-
private static native RSAKeyPair generateRSAKeyPair(int keySize,
String keyContainerName);
}
--- a/jdk/src/windows/classes/sun/security/mscapi/RSASignature.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/windows/classes/sun/security/mscapi/RSASignature.java Tue Apr 21 21:26:21 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2005-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
@@ -38,6 +38,9 @@
import java.security.Signature;
import java.security.SignatureSpi;
import java.security.SignatureException;
+import java.math.BigInteger;
+
+import sun.security.rsa.RSAKeyFactory;
/**
* RSA signature implementation. Supports RSA signing using PKCS#1 v1.5 padding.
@@ -124,7 +127,16 @@
// convert key to MSCAPI format
- byte[] modulusBytes = rsaKey.getModulus().toByteArray();
+ BigInteger modulus = rsaKey.getModulus();
+ BigInteger exponent = rsaKey.getPublicExponent();
+
+ // Check against the local and global values to make sure
+ // the sizes are ok. Round up to the nearest byte.
+ RSAKeyFactory.checkKeyLengths(((modulus.bitLength() + 7) & ~7),
+ exponent, -1, RSAKeyPairGenerator.KEY_SIZE_MAX);
+
+ byte[] modulusBytes = modulus.toByteArray();
+ byte[] exponentBytes = exponent.toByteArray();
// Adjust key length due to sign bit
int keyBitLength = (modulusBytes[0] == 0)
@@ -132,8 +144,7 @@
: modulusBytes.length * 8;
byte[] keyBlob = generatePublicKeyBlob(
- keyBitLength, modulusBytes,
- rsaKey.getPublicExponent().toByteArray());
+ keyBitLength, modulusBytes, exponentBytes);
publicKey = importPublicKey(keyBlob, keyBitLength);
@@ -166,12 +177,11 @@
}
privateKey = (sun.security.mscapi.RSAPrivateKey) key;
- // Determine byte length from bit length
- int keySize = (privateKey.bitLength() + 7) >> 3;
-
- if (keySize < 64)
- throw new InvalidKeyException(
- "RSA keys must be at least 512 bits long");
+ // Check against the local and global values to make sure
+ // the sizes are ok. Round up to nearest byte.
+ RSAKeyFactory.checkKeyLengths(((privateKey.bitLength() + 7) & ~7),
+ null, RSAKeyPairGenerator.KEY_SIZE_MIN,
+ RSAKeyPairGenerator.KEY_SIZE_MAX);
if (needsReset) {
messageDigest.reset();
--- a/jdk/src/windows/native/sun/nio/ch/FileDispatcherImpl.c Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/windows/native/sun/nio/ch/FileDispatcherImpl.c Tue Apr 21 21:26:21 2009 -0700
@@ -414,7 +414,7 @@
o.Offset = lowPos;
o.OffsetHigh = highPos;
result = UnlockFileEx(h, 0, lowNumBytes, highNumBytes, &o);
- if (result == 0) {
+ if (result == 0 && GetLastError() != ERROR_NOT_LOCKED) {
JNU_ThrowIOExceptionWithLastError(env, "Release failed");
}
}
--- a/jdk/src/windows/native/sun/security/krb5/NativeCreds.c Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/src/windows/native/sun/security/krb5/NativeCreds.c Tue Apr 21 21:26:21 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Portions Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Portions Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -73,6 +73,7 @@
* Function prototypes for internal routines
*
*/
+BOOL native_debug = 0;
BOOL PackageConnectLookup(PHANDLE,PULONG);
@@ -113,208 +114,221 @@
jclass cls;
JNIEnv *env;
+ jfieldID fldDEBUG;
if ((*jvm)->GetEnv(jvm, (void **)&env, JNI_VERSION_1_2)) {
return JNI_EVERSION; /* JNI version not supported */
}
+ cls = (*env)->FindClass(env,"sun/security/krb5/internal/Krb5");
+ if (cls == NULL) {
+ printf("LSA: Couldn't find Krb5\n");
+ return JNI_ERR;
+ }
+ fldDEBUG = (*env)->GetStaticFieldID(env, cls, "DEBUG", "Z");
+ if (fldDEBUG == NULL) {
+ printf("LSA: Krb5 has no DEBUG field\n");
+ return JNI_ERR;
+ }
+ native_debug = (*env)->GetStaticBooleanField(env, cls, fldDEBUG);
+
cls = (*env)->FindClass(env,"sun/security/krb5/internal/Ticket");
if (cls == NULL) {
- printf("Couldn't find Ticket\n");
+ printf("LSA: Couldn't find Ticket\n");
return JNI_ERR;
}
- #ifdef DEBUG
- printf("Found Ticket\n");
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: Found Ticket\n");
+ }
ticketClass = (*env)->NewWeakGlobalRef(env,cls);
if (ticketClass == NULL) {
return JNI_ERR;
}
- #ifdef DEBUG
- printf("Made NewWeakGlobalRef\n");
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: Made NewWeakGlobalRef\n");
+ }
cls = (*env)->FindClass(env, "sun/security/krb5/PrincipalName");
if (cls == NULL) {
- printf("Couldn't find PrincipalName\n");
+ printf("LSA: Couldn't find PrincipalName\n");
return JNI_ERR;
}
- #ifdef DEBUG
- printf("Found PrincipalName\n");
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: Found PrincipalName\n");
+ }
principalNameClass = (*env)->NewWeakGlobalRef(env,cls);
if (principalNameClass == NULL) {
return JNI_ERR;
}
- #ifdef DEBUG
- printf("Made NewWeakGlobalRef\n");
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: Made NewWeakGlobalRef\n");
+ }
cls = (*env)->FindClass(env,"sun/security/util/DerValue");
if (cls == NULL) {
- printf("Couldn't find DerValue\n");
+ printf("LSA: Couldn't find DerValue\n");
return JNI_ERR;
}
- #ifdef DEBUG
- printf("Found DerValue\n");
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: Found DerValue\n");
+ }
derValueClass = (*env)->NewWeakGlobalRef(env,cls);
if (derValueClass == NULL) {
return JNI_ERR;
}
- #ifdef DEBUG
- printf("Made NewWeakGlobalRef\n");
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: Made NewWeakGlobalRef\n");
+ }
cls = (*env)->FindClass(env,"sun/security/krb5/EncryptionKey");
if (cls == NULL) {
- printf("Couldn't find EncryptionKey\n");
+ printf("LSA: Couldn't find EncryptionKey\n");
return JNI_ERR;
}
- #ifdef DEBUG
- printf("Found EncryptionKey\n");
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: Found EncryptionKey\n");
+ }
encryptionKeyClass = (*env)->NewWeakGlobalRef(env,cls);
if (encryptionKeyClass == NULL) {
return JNI_ERR;
}
- #ifdef DEBUG
- printf("Made NewWeakGlobalRef\n");
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: Made NewWeakGlobalRef\n");
+ }
cls = (*env)->FindClass(env,"sun/security/krb5/internal/TicketFlags");
if (cls == NULL) {
- printf("Couldn't find TicketFlags\n");
+ printf("LSA: Couldn't find TicketFlags\n");
return JNI_ERR;
}
- #ifdef DEBUG
- printf("Found TicketFlags\n");
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: Found TicketFlags\n");
+ }
ticketFlagsClass = (*env)->NewWeakGlobalRef(env,cls);
if (ticketFlagsClass == NULL) {
return JNI_ERR;
}
- #ifdef DEBUG
- printf("Made NewWeakGlobalRef\n");
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: Made NewWeakGlobalRef\n");
+ }
cls = (*env)->FindClass(env,"sun/security/krb5/internal/KerberosTime");
if (cls == NULL) {
- printf("Couldn't find KerberosTime\n");
+ printf("LSA: Couldn't find KerberosTime\n");
return JNI_ERR;
}
- #ifdef DEBUG
- printf("Found KerberosTime\n");
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: Found KerberosTime\n");
+ }
kerberosTimeClass = (*env)->NewWeakGlobalRef(env,cls);
if (kerberosTimeClass == NULL) {
return JNI_ERR;
}
- #ifdef DEBUG
- printf("Made NewWeakGlobalRef\n");
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: Made NewWeakGlobalRef\n");
+ }
cls = (*env)->FindClass(env,"java/lang/String");
if (cls == NULL) {
- printf("Couldn't find String\n");
+ printf("LSA: Couldn't find String\n");
return JNI_ERR;
}
- #ifdef DEBUG
- printf("Found String\n");
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: Found String\n");
+ }
javaLangStringClass = (*env)->NewWeakGlobalRef(env,cls);
if (javaLangStringClass == NULL) {
return JNI_ERR;
}
- #ifdef DEBUG
- printf("Made NewWeakGlobalRef\n");
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: Made NewWeakGlobalRef\n");
+ }
derValueConstructor = (*env)->GetMethodID(env, derValueClass,
"<init>", "([B)V");
if (derValueConstructor == 0) {
- printf("Couldn't find DerValue constructor\n");
+ printf("LSA: Couldn't find DerValue constructor\n");
return JNI_ERR;
}
- #ifdef DEBUG
- printf("Found DerValue constructor\n");
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: Found DerValue constructor\n");
+ }
ticketConstructor = (*env)->GetMethodID(env, ticketClass,
"<init>", "(Lsun/security/util/DerValue;)V");
if (ticketConstructor == 0) {
- printf("Couldn't find Ticket constructor\n");
+ printf("LSA: Couldn't find Ticket constructor\n");
return JNI_ERR;
}
- #ifdef DEBUG
- printf("Found Ticket constructor\n");
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: Found Ticket constructor\n");
+ }
principalNameConstructor = (*env)->GetMethodID(env, principalNameClass,
"<init>", "([Ljava/lang/String;)V");
if (principalNameConstructor == 0) {
- printf("Couldn't find PrincipalName constructor\n");
+ printf("LSA: Couldn't find PrincipalName constructor\n");
return JNI_ERR;
}
- #ifdef DEBUG
- printf("Found PrincipalName constructor\n");
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: Found PrincipalName constructor\n");
+ }
encryptionKeyConstructor = (*env)->GetMethodID(env, encryptionKeyClass,
"<init>", "(I[B)V");
if (encryptionKeyConstructor == 0) {
- printf("Couldn't find EncryptionKey constructor\n");
+ printf("LSA: Couldn't find EncryptionKey constructor\n");
return JNI_ERR;
}
- #ifdef DEBUG
- printf("Found EncryptionKey constructor\n");
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: Found EncryptionKey constructor\n");
+ }
ticketFlagsConstructor = (*env)->GetMethodID(env, ticketFlagsClass,
"<init>", "(I[B)V");
if (ticketFlagsConstructor == 0) {
- printf("Couldn't find TicketFlags constructor\n");
+ printf("LSA: Couldn't find TicketFlags constructor\n");
return JNI_ERR;
}
- #ifdef DEBUG
- printf("Found TicketFlags constructor\n");
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: Found TicketFlags constructor\n");
+ }
kerberosTimeConstructor = (*env)->GetMethodID(env, kerberosTimeClass,
"<init>", "(Ljava/lang/String;)V");
if (kerberosTimeConstructor == 0) {
- printf("Couldn't find KerberosTime constructor\n");
+ printf("LSA: Couldn't find KerberosTime constructor\n");
return JNI_ERR;
}
- #ifdef DEBUG
- printf("Found KerberosTime constructor\n");
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: Found KerberosTime constructor\n");
+ }
// load the setRealm method in PrincipalName
setRealmMethod = (*env)->GetMethodID(env, principalNameClass,
"setRealm", "(Ljava/lang/String;)V");
if (setRealmMethod == 0) {
- printf("Couldn't find setRealm in PrincipalName\n");
+ printf("LSA: Couldn't find setRealm in PrincipalName\n");
return JNI_ERR;
}
- #ifdef DEBUG
- printf("Finished OnLoad processing\n");
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: Finished OnLoad processing\n");
+ }
return JNI_VERSION_1_2;
}
@@ -389,16 +403,25 @@
if (krbcredsConstructor == 0) {
krbcredsConstructor = (*env)->GetMethodID(env, krbcredsClass, "<init>",
- "(Lsun/security/krb5/internal/Ticket;Lsun/security/krb5/PrincipalName;Lsun/security/krb5/PrincipalName;Lsun/security/krb5/EncryptionKey;Lsun/security/krb5/internal/TicketFlags;Lsun/security/krb5/internal/KerberosTime;Lsun/security/krb5/internal/KerberosTime;Lsun/security/krb5/internal/KerberosTime;Lsun/security/krb5/internal/KerberosTime;Lsun/security/krb5/internal/HostAddresses;)V");
+ "(Lsun/security/krb5/internal/Ticket;"
+ "Lsun/security/krb5/PrincipalName;"
+ "Lsun/security/krb5/PrincipalName;"
+ "Lsun/security/krb5/EncryptionKey;"
+ "Lsun/security/krb5/internal/TicketFlags;"
+ "Lsun/security/krb5/internal/KerberosTime;"
+ "Lsun/security/krb5/internal/KerberosTime;"
+ "Lsun/security/krb5/internal/KerberosTime;"
+ "Lsun/security/krb5/internal/KerberosTime;"
+ "Lsun/security/krb5/internal/HostAddresses;)V");
if (krbcredsConstructor == 0) {
- printf("Couldn't find sun.security.krb5.Credentials constructor\n");
+ printf("LSA: Couldn't find sun.security.krb5.Credentials constructor\n");
break;
}
}
- #ifdef DEBUG
- printf("Found KrbCreds constructor\n");
- #endif
+ if (native_debug) {
+ printf("LSA: Found KrbCreds constructor\n");
+ }
//
// Get the logon handle and package ID from the
@@ -407,9 +430,9 @@
if (!PackageConnectLookup(&LogonHandle, &PackageId))
break;
- #ifdef DEBUG
- printf("Got handle to Kerberos package\n");
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: Got handle to Kerberos package\n");
+ }
// Get the MS TGT from cache
CacheRequest.MessageType = KerbRetrieveTicketMessage;
@@ -426,9 +449,9 @@
&SubStatus
);
- #ifdef DEBUG
- printf("Response size is %d\n", rspSize);
- #endif
+ if (native_debug) {
+ printf("LSA: Response size is %d\n", rspSize);
+ }
if (!LSA_SUCCESS(Status) || !LSA_SUCCESS(SubStatus)) {
if (!LSA_SUCCESS(Status)) {
@@ -467,9 +490,9 @@
}
if (ignore_cache) {
- #ifdef DEBUG
- printf("MS TGT in cache is invalid/not supported; request new ticket\n");
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: MS TGT in cache is invalid/not supported; request new ticket\n");
+ }
// use domain to request Ticket
Status = ConstructTicketRequest(msticket->TargetDomainName,
@@ -493,9 +516,9 @@
&SubStatus
);
- #ifdef DEBUG
- printf("Response size is %d\n", responseSize);
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: Response size is %d\n", responseSize);
+ }
if (!LSA_SUCCESS(Status) || !LSA_SUCCESS(SubStatus)) {
if (!LSA_SUCCESS(Status)) {
@@ -788,7 +811,9 @@
static WCHAR szMsgBuf[MAX_MSG_SIZE];
DWORD dwRes;
- printf("Error calling function %s: %lu\n", szAPI, dwError);
+ if (native_debug) {
+ printf("LSA: Error calling function %s: %lu\n", szAPI, dwError);
+ }
dwRes = FormatMessage (
FORMAT_MESSAGE_FROM_SYSTEM,
@@ -798,11 +823,13 @@
szMsgBuf,
MAX_MSG_SIZE,
NULL);
- if (0 == dwRes) {
- printf("FormatMessage failed with %d\n", GetLastError());
- // ExitProcess(EXIT_FAILURE);
- } else {
- printf("%S",szMsgBuf);
+ if (native_debug) {
+ if (0 == dwRes) {
+ printf("LSA: FormatMessage failed with %d\n", GetLastError());
+ // ExitProcess(EXIT_FAILURE);
+ } else {
+ printf("LSA: %S",szMsgBuf);
+ }
}
}
@@ -896,17 +923,19 @@
((domainName.Length)*sizeof(WCHAR) + sizeof(UNICODE_NULL)));
wcsncpy(realm, domainName.Buffer, domainName.Length/sizeof(WCHAR));
- #ifdef DEBUG
- printf("Principal domain is %S\n", realm);
- printf("Name type is %x\n", principalName->NameType);
- printf("Name count is %x\n", principalName->NameCount);
- #endif
+ if (native_debug) {
+ printf("LSA: Principal domain is %S\n", realm);
+ printf("LSA: Name type is %x\n", principalName->NameType);
+ printf("LSA: Name count is %x\n", principalName->NameCount);
+ }
nameCount = principalName->NameCount;
stringArray = (*env)->NewObjectArray(env, nameCount,
javaLangStringClass, NULL);
if (stringArray == NULL) {
- printf("Can't allocate String array for Principal\n");
+ if (native_debug) {
+ printf("LSA: Can't allocate String array for Principal\n");
+ }
LocalFree(realm);
return principal;
}
@@ -941,6 +970,17 @@
// First, need to build a byte array
jbyteArray ary;
jobject encryptionKey = NULL;
+ unsigned int i;
+
+ for (i=0; i<cryptoKey->Length; i++) {
+ if (cryptoKey->Value[i]) break;
+ }
+ if (i == cryptoKey->Length) {
+ if (native_debug) {
+ printf("LSA: Session key all zero. Stop.\n");
+ }
+ return NULL;
+ }
ary = (*env)->NewByteArray(env,cryptoKey->Length);
(*env)->SetByteArrayRegion(env, ary, (jsize) 0, cryptoKey->Length,
@@ -1005,9 +1045,9 @@
hour,
minute,
second );
- #ifdef DEBUG
- printf("%S\n", (wchar_t *)timeString);
- #endif /* DEBUG */
+ if (native_debug) {
+ printf("LSA: %S\n", (wchar_t *)timeString);
+ }
stringTime = (*env)->NewString(env, timeString,
(sizeof(timeString)/sizeof(WCHAR))-1);
if (stringTime != NULL) { // everything's OK so far
Binary file jdk/test/java/awt/FontClass/CreateFont/A.ttf has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/FontClass/CreateFont/BigFont.java Tue Apr 21 21:26:21 2009 -0700
@@ -0,0 +1,139 @@
+/*
+ * 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.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+import java.applet.*;
+import java.awt.*;
+import java.io.*;
+import java.net.*;
+
+public class BigFont extends Applet {
+
+ static private class SizedInputStream extends InputStream {
+
+ int size;
+ int cnt = 0;
+
+ SizedInputStream(int size) {
+ this.size = size;
+ }
+
+ public int read() {
+ if (cnt < size) {
+ cnt++;
+ return 0;
+ } else {
+ return -1;
+ }
+ }
+
+ public int getCurrentSize() {
+ return cnt;
+ }
+ }
+
+ String id;
+ String fileName;
+
+ public void init() {
+ id = getParameter("number");
+ fileName = getParameter("font");
+
+ System.out.println("Applet " + id + " "+
+ Thread.currentThread().getThreadGroup());
+ // Larger than size for a single font.
+ int fontSize = 64 * 1000 * 1000;
+ SizedInputStream sis = new SizedInputStream(fontSize);
+ try {
+ Font font = Font.createFont(Font.TRUETYPE_FONT, sis);
+ } catch (Throwable t) {
+ if (t instanceof FontFormatException ||
+ fontSize <= sis.getCurrentSize())
+ {
+ System.out.println(sis.getCurrentSize());
+ System.out.println(t);
+ throw new RuntimeException("Allowed file to be too large.");
+ }
+ }
+ // The following part of the test was verified manually but
+ // is impractical to enable because it requires a fairly large
+ // valid font to be part of the test, and we can't easily include
+ // that, nor dependably reference one from the applet environment.
+ /*
+ if (fileName == null) {
+ return;
+ }
+ int size = getFileSize(fileName);
+ if (size == 0) {
+ return;
+ }
+ int fontCnt = 1000 * 1000 * 1000 / size;
+ loadMany(size, fontCnt, fileName);
+ System.gc(); System.gc();
+ fontCnt = fontCnt / 2;
+ System.out.println("Applet " + id + " load more.");
+ loadMany(size, fontCnt, fileName);
+ */
+ System.out.println("Applet " + id + " finished.");
+ }
+
+ int getFileSize(String fileName) {
+ try {
+ URL url = new URL(getCodeBase(), fileName);
+ InputStream inStream = url.openStream();
+ BufferedInputStream fontStream = new BufferedInputStream(inStream);
+ int size = 0;
+ while (fontStream.read() != -1) {
+ size++;
+ }
+ fontStream.close();
+ return size;
+ } catch (IOException e) {
+ return 0;
+ }
+
+ }
+ void loadMany(int oneFont, int fontCnt, String fileName) {
+ System.out.println("fontcnt= " + fontCnt);
+ Font[] fonts = new Font[fontCnt];
+ int totalSize = 0;
+ boolean gotException = false;
+ for (int i=0; i<fontCnt; i++) {
+ try {
+ URL url = new URL(getCodeBase(), fileName);
+ InputStream inStream = url.openStream();
+ BufferedInputStream fontStream =
+ new BufferedInputStream(inStream);
+ fonts[i] = Font.createFont(Font.TRUETYPE_FONT, fontStream);
+ totalSize += oneFont;
+ fontStream.close();
+ } catch (Throwable t) {
+ gotException = true;
+ System.out.println("Applet " + id + " " + t);
+ }
+ }
+ if (!gotException) {
+ throw new RuntimeException("No expected exception");
+ }
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/FontClass/CreateFont/DeleteFont.java Tue Apr 21 21:26:21 2009 -0700
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2004-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.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+import java.io.*;
+import java.awt.*;
+
+public class DeleteFont {
+
+ public static void main(String args[]) throws Exception {
+
+ String font = "A.ttf";
+ String sep = System.getProperty("file.separator");
+ String testSrc = System.getenv("TESTSRC");
+ if (testSrc != null) {
+ font = testSrc + sep + font;
+ }
+ System.out.println("Using font file: " + font);
+ FileInputStream fis = new FileInputStream(font);
+ Font f = Font.createFont(Font.TRUETYPE_FONT, fis);
+ f.toString();
+ f.deriveFont(Font.BOLD);
+ f.canDisplay('X');
+
+ InputStream in = new InputStream() {
+ public int read() {
+ throw new RuntimeException();
+ }
+ };
+ boolean gotException = false;
+ try {
+ Font.createFont(java.awt.Font.TRUETYPE_FONT, in);
+ } catch (IOException e) {
+ gotException = true;
+ }
+ if (!gotException) {
+ throw new RuntimeException("No expected IOException");
+ }
+ badRead(-2, Font.TRUETYPE_FONT);
+ badRead(8193, Font.TRUETYPE_FONT);
+
+ badRead(-2, Font.TYPE1_FONT);
+ badRead(8193, Font.TYPE1_FONT);
+
+ // Make sure GC has a chance to clean up before we exit.
+ System.gc(); System.gc();
+ }
+
+ static void badRead(final int retval, int fontType) {
+ int num = 2;
+ byte[] buff = new byte[16*8192]; // Multiple of 8192 is important.
+ for (int ct=0; ct<num; ++ct) {
+ try {
+ Font.createFont(
+ fontType,
+ new ByteArrayInputStream(buff) {
+ @Override
+ public int read(byte[] buff, int off, int len) {
+ int read = super.read(buff, off, len);
+ return read<0 ? retval : read;
+ }
+ }
+ );
+ } catch (Throwable exc) {
+ //exc.printStackTrace();
+ }
+ }
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/FontClass/CreateFont/DeleteFont.sh Tue Apr 21 21:26:21 2009 -0700
@@ -0,0 +1,66 @@
+# Copyright 2004-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.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along 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 6189812 6380357 6632886
+# @summary Verify that temporary font files are deleted on exit.
+
+if [ -z "${TESTSRC}" ]; then
+ echo "TESTSRC undefined: defaulting to ."
+ TESTSRC=.
+fi
+
+if [ -z "${TESTCLASSES}" ]; then
+ echo "TESTCLASSES undefined: defaulting to ."
+ TESTCLASSES=.
+fi
+
+if [ -z "${TESTJAVA}" ]; then
+ echo "TESTJAVA undefined: can't continue."
+ exit 1
+fi
+
+echo "TESTJAVA=${TESTJAVA}"
+echo "TESTSRC=${TESTSRC}"
+echo "TESTCLASSES=${TESTCLASSES}"
+cd ${TESTSRC}
+${TESTJAVA}/bin/javac -d ${TESTCLASSES} DeleteFont.java
+
+cd ${TESTCLASSES}
+
+numfiles0=`ls ${TESTCLASSES} | wc -l`
+${TESTJAVA}/bin/java -Djava.io.tmpdir=${TESTCLASSES} DeleteFont
+
+if [ $? -ne 0 ]
+ then
+ echo "Test fails: exception thrown!"
+ exit 1
+fi
+
+numfiles1=`ls ${TESTCLASSES} | wc -l`
+
+if [ $numfiles0 -ne $numfiles1 ]
+ then
+ echo "Test fails: tmp file exists!"
+ ls ${TESTCLASSES}
+ exit 1
+fi
+exit 0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/FontClass/CreateFont/bigfont.html Tue Apr 21 21:26:21 2009 -0700
@@ -0,0 +1,48 @@
+<!--
+
+ 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.
+
+ This code is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ version 2 for more details (a copy is included in the LICENSE file that
+ accompanied this code).
+
+ You should have received a copy of the GNU General Public License version
+ 2 along 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 6522586
+ @run applet bigfont.html
+ @summary Enforce limits on font creation
+
+-->
+
+<html>
+ <head>
+ <title>Test Font Creation Limits</title>
+ </head>
+ <body>
+<hr>
+<APPLET CODE = BigFont.class WIDTH = 100 HEIGHT = 100 >
+<param name="number" value="1">
+<param name="font" value="A.ttf">
+</APPLET>
+<APPLET CODE = BigFont.class WIDTH = 100 HEIGHT = 100>
+<param name="number" value="2">
+<param name="font" value="A.ttf">
+</APPLET>
+<hr>
+ </body>
+</html>
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/FontClass/CreateFont/fileaccess/FontFile.java Tue Apr 21 21:26:21 2009 -0700
@@ -0,0 +1,83 @@
+/*
+ * 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.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along 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 6652929
+ * @summary verify handling of File.getPath()
+ */
+
+import java.awt.*;
+import java.io.*;
+
+public class FontFile {
+ public static void main(String[] args) throws Exception {
+ String sep = System.getProperty("file.separator");
+ String fname = ".." + sep + "A.ttf";
+ String dir = System.getProperty("test.src");
+ if (dir != null) {
+ fname = dir + sep + fname;
+ }
+ final String name = fname;
+ System.out.println("Will try to access " + name);
+ if (!(new File(name)).canRead()) {
+ System.out.println("File not available : can't run test");
+ return;
+ }
+ System.out.println("File is available. Verify no access under SM");
+
+ System.setSecurityManager(new SecurityManager());
+
+
+ // Check cannot read file.
+ try {
+ new FileInputStream(name);
+ throw new Error("Something wrong with test environment");
+ } catch (SecurityException exc) {
+ // Good.
+ }
+
+ try {
+ Font font = Font.createFont(Font.TRUETYPE_FONT,
+ new File("nosuchfile") {
+ private boolean read;
+ @Override public String getPath() {
+ if (read) {
+ return name;
+ } else {
+ read = true;
+ return "somefile";
+ }
+ }
+ @Override public boolean canRead() {
+ return true;
+ }
+ }
+ );
+ System.err.println(font.getFontName());
+ throw new RuntimeException("No expected exception");
+ } catch (IOException e) {
+ System.err.println("Test passed.");
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/image/ConvolveOp/EdgeNoOpCrash.java Tue Apr 21 21:26:21 2009 -0700
@@ -0,0 +1,95 @@
+/*
+ * 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.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along 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 6726779
+ * @summary Test verifies that ConvolveOp with the EDGE_NO_OP edge condition
+ * does not cause JVM crash if size of source raster elements is
+ * greather than size of the destination raster element.
+ *
+ * @run main EdgeNoOpCrash
+ */
+import java.awt.Point;
+import java.awt.image.ConvolveOp;
+import java.awt.image.DataBuffer;
+import java.awt.image.ImagingOpException;
+import java.awt.image.Kernel;
+import java.awt.image.Raster;
+import java.awt.image.WritableRaster;
+import java.util.Arrays;
+
+public class EdgeNoOpCrash {
+ private static final int w = 3000;
+ private static final int h = 200;
+
+ public static void main(String[] args) {
+ crashTest();
+ }
+
+ private static void crashTest() {
+ Raster src = createSrcRaster();
+ WritableRaster dst = createDstRaster();
+ ConvolveOp op = createConvolveOp(ConvolveOp.EDGE_NO_OP);
+ try {
+ op.filter(src, dst);
+ } catch (ImagingOpException e) {
+ /*
+ * The test pair of source and destination rasters
+ * may cause failure of the medialib convolution routine,
+ * so this exception is expected.
+ *
+ * The JVM crash is the only manifestation of this
+ * test failure.
+ */
+ }
+ System.out.println("Test PASSED.");
+ }
+
+ private static Raster createSrcRaster() {
+ WritableRaster r = Raster.createInterleavedRaster(DataBuffer.TYPE_USHORT,
+ w, h, 4, new Point(0, 0));
+
+ return r;
+ }
+
+ private static WritableRaster createDstRaster() {
+ WritableRaster r = Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE,
+ w, h, 4, new Point(0, 0));
+
+ return r;
+ }
+
+ private static ConvolveOp createConvolveOp(int edgeHint) {
+ final int kw = 3;
+ final int kh = 3;
+ float[] kdata = new float[kw * kh];
+ float v = 1f / kdata.length;
+ Arrays.fill(kdata, v);
+
+ Kernel k = new Kernel(kw, kh, kdata);
+ ConvolveOp op = new ConvolveOp(k, edgeHint, null);
+
+ return op;
+ }
+}
\ No newline at end of file
--- a/jdk/test/java/nio/Buffer/Basic-X.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/test/java/nio/Buffer/Basic-X.java Tue Apr 21 21:26:21 2009 -0700
@@ -365,8 +365,11 @@
b.position(2);
ck(b, b.charAt(1), 'd');
- CharBuffer c = (CharBuffer)b.subSequence(1, 4);
- ck(b, b.subSequence(1, 4).toString().equals("def"));
+ CharBuffer c = b.subSequence(1, 4);
+ ck(c, c.capacity(), b.capacity());
+ ck(c, c.position(), b.position()+1);
+ ck(c, c.limit(), b.position()+4);
+ ck(c, b.subSequence(1, 4).toString().equals("def"));
// 4938424
b.position(4);
@@ -722,6 +725,8 @@
ck(b, start, b.position());
ck(b, end, b.limit());
ck(b, s.length(), b.capacity());
+ b.position(6);
+ ck(b, b.subSequence(0,3).toString().equals("ghi"));
// The index, relative to the position, must be non-negative and
// smaller than remaining().
--- a/jdk/test/java/nio/Buffer/Basic.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/test/java/nio/Buffer/Basic.java Tue Apr 21 21:26:21 2009 -0700
@@ -25,7 +25,7 @@
* @summary Unit test for buffers
* @bug 4413135 4414911 4416536 4416562 4418782 4471053 4472779 4490253 4523725
* 4526177 4463011 4660660 4661219 4663521 4782970 4804304 4938424 6231529
- * 6221101 6234263 6535542 6591971 6593946
+ * 6221101 6234263 6535542 6591971 6593946 6795561
* @author Mark Reinhold
*/
--- a/jdk/test/java/nio/Buffer/BasicByte.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/test/java/nio/Buffer/BasicByte.java Tue Apr 21 21:26:21 2009 -0700
@@ -375,6 +375,9 @@
+
+
+
// Compact
relPut(b);
@@ -786,6 +789,8 @@
+
+
public static void test(final byte [] ba) {
int offset = 47;
int length = 900;
--- a/jdk/test/java/nio/Buffer/BasicChar.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/test/java/nio/Buffer/BasicChar.java Tue Apr 21 21:26:21 2009 -0700
@@ -365,8 +365,11 @@
b.position(2);
ck(b, b.charAt(1), 'd');
- CharBuffer c = (CharBuffer)b.subSequence(1, 4);
- ck(b, b.subSequence(1, 4).toString().equals("def"));
+ CharBuffer c = b.subSequence(1, 4);
+ ck(c, c.capacity(), b.capacity());
+ ck(c, c.position(), b.position()+1);
+ ck(c, c.limit(), b.position()+4);
+ ck(c, b.subSequence(1, 4).toString().equals("def"));
// 4938424
b.position(4);
@@ -722,6 +725,8 @@
ck(b, start, b.position());
ck(b, end, b.limit());
ck(b, s.length(), b.capacity());
+ b.position(6);
+ ck(b, b.subSequence(0,3).toString().equals("ghi"));
// The index, relative to the position, must be non-negative and
// smaller than remaining().
--- a/jdk/test/java/nio/Buffer/BasicDouble.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/test/java/nio/Buffer/BasicDouble.java Tue Apr 21 21:26:21 2009 -0700
@@ -375,6 +375,9 @@
+
+
+
// Compact
relPut(b);
@@ -786,6 +789,8 @@
+
+
public static void test(final double [] ba) {
int offset = 47;
int length = 900;
--- a/jdk/test/java/nio/Buffer/BasicFloat.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/test/java/nio/Buffer/BasicFloat.java Tue Apr 21 21:26:21 2009 -0700
@@ -375,6 +375,9 @@
+
+
+
// Compact
relPut(b);
@@ -786,6 +789,8 @@
+
+
public static void test(final float [] ba) {
int offset = 47;
int length = 900;
--- a/jdk/test/java/nio/Buffer/BasicInt.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/test/java/nio/Buffer/BasicInt.java Tue Apr 21 21:26:21 2009 -0700
@@ -375,6 +375,9 @@
+
+
+
// Compact
relPut(b);
@@ -786,6 +789,8 @@
+
+
public static void test(final int [] ba) {
int offset = 47;
int length = 900;
--- a/jdk/test/java/nio/Buffer/BasicLong.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/test/java/nio/Buffer/BasicLong.java Tue Apr 21 21:26:21 2009 -0700
@@ -375,6 +375,9 @@
+
+
+
// Compact
relPut(b);
@@ -786,6 +789,8 @@
+
+
public static void test(final long [] ba) {
int offset = 47;
int length = 900;
--- a/jdk/test/java/nio/Buffer/BasicShort.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/test/java/nio/Buffer/BasicShort.java Tue Apr 21 21:26:21 2009 -0700
@@ -375,6 +375,9 @@
+
+
+
// Compact
relPut(b);
@@ -786,6 +789,8 @@
+
+
public static void test(final short [] ba) {
int offset = 47;
int length = 900;
--- a/jdk/test/java/nio/channels/AsynchronousFileChannel/Basic.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/test/java/nio/channels/AsynchronousFileChannel/Basic.java Tue Apr 21 21:26:21 2009 -0700
@@ -22,7 +22,7 @@
*/
/* @test
- * @bug 4607272
+ * @bug 4607272 6822643 6830721
* @summary Unit test for AsynchronousFileChannel
*/
@@ -51,7 +51,6 @@
// run tests
testUsingCompletionHandlers(ch);
testUsingWaitOnResult(ch);
- testLocking(ch);
testInterruptHandlerThread(ch);
// close channel and invoke test that expects channel to be closed
@@ -59,6 +58,7 @@
testClosedChannel(ch);
// these tests open the file themselves
+ testLocking(blah.toPath());
testCustomThreadPool(blah.toPath());
testAsynchronousClose(blah.toPath());
testCancel(blah.toPath());
@@ -160,47 +160,54 @@
}
// exercise lock methods
- static void testLocking(AsynchronousFileChannel ch)
- throws IOException
- {
+ static void testLocking(Path file) throws IOException {
System.out.println("testLocking");
- // test 1 - acquire lock and check that tryLock throws
- // OverlappingFileLockException
+ AsynchronousFileChannel ch = AsynchronousFileChannel
+ .open(file, READ, WRITE);
FileLock fl;
try {
- fl = ch.lock().get();
- } catch (ExecutionException x) {
- throw new RuntimeException(x);
- } catch (InterruptedException x) {
- throw new RuntimeException("Should not be interrupted");
- }
- if (!fl.acquiredBy().equals(ch))
- throw new RuntimeException("FileLock#acquiredBy returned incorrect channel");
- try {
- ch.tryLock();
- throw new RuntimeException("OverlappingFileLockException expected");
- } catch (OverlappingFileLockException x) {
- }
- fl.release();
+ // test 1 - acquire lock and check that tryLock throws
+ // OverlappingFileLockException
+ try {
+ fl = ch.lock().get();
+ } catch (ExecutionException x) {
+ throw new RuntimeException(x);
+ } catch (InterruptedException x) {
+ throw new RuntimeException("Should not be interrupted");
+ }
+ if (!fl.acquiredBy().equals(ch))
+ throw new RuntimeException("FileLock#acquiredBy returned incorrect channel");
+ try {
+ ch.tryLock();
+ throw new RuntimeException("OverlappingFileLockException expected");
+ } catch (OverlappingFileLockException x) {
+ }
+ fl.release();
- // test 2 - acquire try and check that lock throws OverlappingFileLockException
- fl = ch.tryLock();
- if (fl == null)
- throw new RuntimeException("Unable to acquire lock");
- try {
- ch.lock(null, new CompletionHandler<FileLock,Void> () {
- public void completed(FileLock result, Void att) {
- }
- public void failed(Throwable exc, Void att) {
- }
- public void cancelled(Void att) {
- }
- });
- throw new RuntimeException("OverlappingFileLockException expected");
- } catch (OverlappingFileLockException x) {
+ // test 2 - acquire try and check that lock throws OverlappingFileLockException
+ fl = ch.tryLock();
+ if (fl == null)
+ throw new RuntimeException("Unable to acquire lock");
+ try {
+ ch.lock(null, new CompletionHandler<FileLock,Void> () {
+ public void completed(FileLock result, Void att) {
+ }
+ public void failed(Throwable exc, Void att) {
+ }
+ public void cancelled(Void att) {
+ }
+ });
+ throw new RuntimeException("OverlappingFileLockException expected");
+ } catch (OverlappingFileLockException x) {
+ }
+ } finally {
+ ch.close();
}
- fl.release();
+
+ // test 3 - channel is closed so FileLock should no longer be valid
+ if (fl.isValid())
+ throw new RuntimeException("FileLock expected to be invalid");
}
// interrupt should not close channel
@@ -424,10 +431,11 @@
throw new RuntimeException("isCancelled not consistent");
try {
res.get();
- if (!cancelled)
+ if (cancelled)
throw new RuntimeException("CancellationException expected");
} catch (CancellationException x) {
- // expected
+ if (!cancelled)
+ throw new RuntimeException("CancellationException not expected");
} catch (ExecutionException x) {
throw new RuntimeException(x);
} catch (InterruptedException x) {
@@ -435,9 +443,11 @@
}
try {
res.get(1, TimeUnit.SECONDS);
- throw new RuntimeException("CancellationException expected");
+ if (cancelled)
+ throw new RuntimeException("CancellationException expected");
} catch (CancellationException x) {
- // expected
+ if (!cancelled)
+ throw new RuntimeException("CancellationException not expected");
} catch (ExecutionException x) {
throw new RuntimeException(x);
} catch (TimeoutException x) {
--- a/jdk/test/java/nio/channels/AsynchronousFileChannel/Lock.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/test/java/nio/channels/AsynchronousFileChannel/Lock.java Tue Apr 21 21:26:21 2009 -0700
@@ -23,7 +23,7 @@
/* @test
- * @bug 4607272
+ * @bug 4607272 6814948
* @summary Unit test for AsynchronousFileChannel#lock method
*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/channels/FileChannel/ReleaseOnCloseDeadlock.java Tue Apr 21 21:26:21 2009 -0700
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 6543863
+ * @summary Try to cause a deadlock between (Asynchronous)FileChannel.close
+ * and FileLock.release
+ */
+
+import java.io.*;
+import java.nio.file.Path;
+import static java.nio.file.StandardOpenOption.*;
+import java.nio.channels.*;
+import java.util.concurrent.*;
+
+public class ReleaseOnCloseDeadlock {
+ private static final int LOCK_COUNT = 1024;
+
+ public static void main(String[] args) throws IOException {
+ File blah = File.createTempFile("blah", null);
+ blah.deleteOnExit();
+ for (int i=0; i<100; i++) {
+ test(blah.toPath());
+ }
+ }
+
+ static void test(Path file) throws IOException {
+ FileLock[] locks = new FileLock[LOCK_COUNT];
+
+ FileChannel fc = FileChannel.open(file, READ, WRITE);
+ for (int i=0; i<LOCK_COUNT; i++) {
+ locks[i] = fc.lock(i, 1, true);
+ }
+ tryToDeadlock(fc, locks);
+
+ AsynchronousFileChannel ch = AsynchronousFileChannel.open(file, READ, WRITE);
+ for (int i=0; i<LOCK_COUNT; i++) {
+ try {
+ locks[i] = ch.lock(i, 1, true, null, null).get();
+ } catch (InterruptedException x) {
+ throw new RuntimeException(x);
+ } catch (ExecutionException x) {
+ throw new RuntimeException(x);
+ }
+ }
+ tryToDeadlock(ch, locks);
+ }
+
+ static void tryToDeadlock(final Channel channel, FileLock[] locks)
+ throws IOException
+ {
+ // start thread to close the file (and invalidate the locks)
+ Thread closer = new Thread(
+ new Runnable() {
+ public void run() {
+ try {
+ channel.close();
+ } catch (IOException ignore) {
+ ignore.printStackTrace();
+ }
+ }});
+ closer.start();
+
+ // release the locks explicitly
+ for (int i=0; i<locks.length; i++) {
+ try {
+ locks[i].release();
+ } catch (ClosedChannelException ignore) { }
+ }
+
+ // we are done when closer has terminated
+ while (closer.isAlive()) {
+ try {
+ closer.join();
+ } catch (InterruptedException ignore) { }
+ }
+ }
+}
--- a/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.java Tue Apr 21 21:26:21 2009 -0700
@@ -56,7 +56,7 @@
e.printStackTrace();
}
}
- }
+ };
Thread thread1 = new Thread(readObjectRunnable, "Read Object");
Thread thread2 = new Thread(xmlRunnable, "XML");
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/logging/LoggerSubclass.java Tue Apr 21 21:26:21 2009 -0700
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2009 Google, Inc. All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 6830220 6278014
+ * @summary Test Logger subclasses
+ */
+
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.logging.LogRecord;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
+
+public class LoggerSubclass {
+ void test(String[] args) {
+ final String name = "myLogger";
+ final String message = "myMessage";
+ final AtomicInteger getHandlerCount = new AtomicInteger(0);
+ final AtomicLong lastSequenceNumber = new AtomicLong(-1L);
+ final AtomicInteger lastThreadID = new AtomicInteger(-1);
+ final Logger logger = new Logger(name, null) {
+ public Handler[] getHandlers() {
+ getHandlerCount.getAndIncrement();
+ return super.getHandlers();
+ }};
+ equal(logger.getName(), name);
+ equal(logger.getResourceBundle(), null);
+ equal(logger.getFilter(), null);
+ equal(logger.getLevel(), null);
+ check(logger.isLoggable(Level.WARNING));
+ logger.addHandler(new Handler() {
+ public void close() {}
+ public void flush() {}
+ public void publish(LogRecord l) {
+ equal(l.getLoggerName(), name);
+ equal(l.getMessage(), message);
+ equal(l.getResourceBundle(), null);
+ equal(l.getSourceClassName(), "LoggerSubclass");
+ equal(l.getSourceMethodName(), "test");
+ equal(l.getThrown(), null);
+ equal(l.getLevel(), Level.WARNING);
+
+ if (lastSequenceNumber.get() != -1) {
+ equal(lastSequenceNumber.get() + 1,
+ l.getSequenceNumber());
+ equal(lastThreadID.get(),
+ l.getThreadID());
+ equal((int) Thread.currentThread().getId(),
+ l.getThreadID());
+ }
+ lastSequenceNumber.set(l.getSequenceNumber());
+ lastThreadID.set(l.getThreadID());
+ }});
+ for (int i = 1; i < 4; i++) {
+ logger.warning(message); // Should invoke getHandlers()
+ equal(i, getHandlerCount.get());
+ }
+ }
+
+ //--------------------- Infrastructure ---------------------------
+ volatile int passed = 0, failed = 0;
+ void pass() {passed++;}
+ void fail() {failed++; Thread.dumpStack();}
+ void fail(String msg) {System.err.println(msg); fail();}
+ void unexpected(Throwable t) {failed++; t.printStackTrace();}
+ void check(boolean cond) {if (cond) pass(); else fail();}
+ void equal(Object x, Object y) {
+ if (x == null ? y == null : x.equals(y)) pass();
+ else fail(x + " not equal to " + y);}
+ public static void main(String[] args) throws Throwable {
+ try {new LoggerSubclass().instanceMain(args);}
+ catch (Throwable e) {throw e.getCause();}}
+ public void instanceMain(String[] args) throws Throwable {
+ try {test(args);} catch (Throwable t) {unexpected(t);}
+ System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed);
+ if (failed > 0) throw new AssertionError("Some tests failed");}
+}
--- a/jdk/test/java/util/logging/LoggingDeadlock2.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/test/java/util/logging/LoggingDeadlock2.java Tue Apr 21 21:26:21 2009 -0700
@@ -23,10 +23,9 @@
/*
* @test
- * @bug 6467152
- * @ignore until 6716076 is fixed
+ * @bug 6467152 6716076 6829503
* @summary deadlock occurs in LogManager initialization and JVM termination
- * @author Serguei Spitsyn / Hittachi
+ * @author Serguei Spitsyn / Hitachi / Martin Buchholz
*
* @build LoggingDeadlock2
* @run main/timeout=15 LoggingDeadlock2
@@ -47,43 +46,195 @@
* This is a regression test for this bug.
*/
+import java.util.Arrays;
+import java.util.List;
+import java.util.Random;
+import java.util.concurrent.CyclicBarrier;
+import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.LogManager;
+import java.io.File;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
-public class LoggingDeadlock2 implements Runnable {
- static final java.io.PrintStream out = System.out;
- static Object lock = new Object();
- static int c = 0;
- public static void main(String arg[]) {
- out.println("\nThis test checks that there is no deadlock.");
- out.println("If not crashed or timed-out then it is passed.");
+public class LoggingDeadlock2 {
+
+ public static void realMain(String arg[]) throws Throwable {
try {
- new Thread(new LoggingDeadlock2()).start();
- synchronized(lock) {
- c++;
- if (c == 2) lock.notify();
- else lock.wait();
+ System.out.println(javaChildArgs);
+ ProcessBuilder pb = new ProcessBuilder(javaChildArgs);
+ ProcessResults r = run(pb.start());
+ equal(r.exitValue(), 99);
+ equal(r.out(), "");
+ equal(r.err(), "");
+ } catch (Throwable t) { unexpected(t); }
+ }
+
+ public static class JavaChild {
+ public static void main(String args[]) throws Throwable {
+ final CyclicBarrier startingGate = new CyclicBarrier(2);
+ final Throwable[] thrown = new Throwable[1];
+
+ // Some random variation, to help tickle races.
+ final Random rnd = new Random();
+ final boolean dojoin = rnd.nextBoolean();
+ final int JITTER = 1024;
+ final int iters1 = rnd.nextInt(JITTER);
+ final int iters2 = JITTER - iters1;
+ final AtomicInteger counter = new AtomicInteger(0);
+
+ Thread exiter = new Thread() {
+ public void run() {
+ try {
+ startingGate.await();
+ for (int i = 0; i < iters1; i++)
+ counter.getAndIncrement();
+ System.exit(99);
+ } catch (Throwable t) {
+ t.printStackTrace();
+ System.exit(86);
+ }
+ }};
+ exiter.start();
+
+ startingGate.await();
+ for (int i = 0; i < iters2; i++)
+ counter.getAndIncrement();
+ // This may or may not result in a first call to
+ // Runtime.addShutdownHook after shutdown has already
+ // commenced.
+ LogManager log = LogManager.getLogManager();
+
+ if (dojoin) {
+ exiter.join();
+ if (thrown[0] != null)
+ throw new Error(thrown[0]);
+ check(counter.get() == JITTER);
}
- LogManager log = LogManager.getLogManager();
- out.println("Test passed");
- }
- catch(Exception e) {
- e.printStackTrace();
- out.println("Test FAILED"); // Not expected
}
}
- public void run() {
- try {
- synchronized(lock) {
- c++;
- if (c == 2) lock.notify();
- else lock.wait();
- }
- System.exit(1);
+ //----------------------------------------------------------------
+ // The rest of this test is copied from ProcessBuilder/Basic.java
+ //----------------------------------------------------------------
+ private static final String javaExe =
+ System.getProperty("java.home") +
+ File.separator + "bin" + File.separator + "java";
+
+ private static final String classpath =
+ System.getProperty("java.class.path");
+
+ private static final List<String> javaChildArgs =
+ Arrays.asList(new String[]
+ { javaExe, "-classpath", classpath,
+ "LoggingDeadlock2$JavaChild"});
+
+ private static class ProcessResults {
+ private final String out;
+ private final String err;
+ private final int exitValue;
+ private final Throwable throwable;
+
+ public ProcessResults(String out,
+ String err,
+ int exitValue,
+ Throwable throwable) {
+ this.out = out;
+ this.err = err;
+ this.exitValue = exitValue;
+ this.throwable = throwable;
}
- catch(Exception e) {
- e.printStackTrace();
- out.println("Test FAILED"); // Not expected
+
+ public String out() { return out; }
+ public String err() { return err; }
+ public int exitValue() { return exitValue; }
+ public Throwable throwable() { return throwable; }
+
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("<STDOUT>\n" + out() + "</STDOUT>\n")
+ .append("<STDERR>\n" + err() + "</STDERR>\n")
+ .append("exitValue = " + exitValue + "\n");
+ if (throwable != null)
+ sb.append(throwable.getStackTrace());
+ return sb.toString();
}
}
+
+ private static class StreamAccumulator extends Thread {
+ private final InputStream is;
+ private final StringBuilder sb = new StringBuilder();
+ private Throwable throwable = null;
+
+ public String result () throws Throwable {
+ if (throwable != null)
+ throw throwable;
+ return sb.toString();
+ }
+
+ StreamAccumulator (InputStream is) {
+ this.is = is;
+ }
+
+ public void run() {
+ try {
+ Reader r = new InputStreamReader(is);
+ char[] buf = new char[4096];
+ int n;
+ while ((n = r.read(buf)) > 0) {
+ sb.append(buf,0,n);
+ }
+ } catch (Throwable t) {
+ throwable = t;
+ } finally {
+ try { is.close(); }
+ catch (Throwable t) { throwable = t; }
+ }
+ }
+ }
+
+ private static ProcessResults run(Process p) {
+ Throwable throwable = null;
+ int exitValue = -1;
+ String out = "";
+ String err = "";
+
+ StreamAccumulator outAccumulator =
+ new StreamAccumulator(p.getInputStream());
+ StreamAccumulator errAccumulator =
+ new StreamAccumulator(p.getErrorStream());
+
+ try {
+ outAccumulator.start();
+ errAccumulator.start();
+
+ exitValue = p.waitFor();
+
+ outAccumulator.join();
+ errAccumulator.join();
+
+ out = outAccumulator.result();
+ err = errAccumulator.result();
+ } catch (Throwable t) {
+ throwable = t;
+ }
+
+ return new ProcessResults(out, err, exitValue, throwable);
+ }
+
+ //--------------------- Infrastructure ---------------------------
+ static volatile int passed = 0, failed = 0;
+ static void pass() {passed++;}
+ static void fail() {failed++; Thread.dumpStack();}
+ static void fail(String msg) {System.out.println(msg); fail();}
+ static void unexpected(Throwable t) {failed++; t.printStackTrace();}
+ static void check(boolean cond) {if (cond) pass(); else fail();}
+ static void check(boolean cond, String m) {if (cond) pass(); else fail(m);}
+ static void equal(Object x, Object y) {
+ if (x == null ? y == null : x.equals(y)) pass();
+ else fail(x + " not equal to " + y);}
+ public static void main(String[] args) throws Throwable {
+ try {realMain(args);} catch (Throwable t) {unexpected(t);}
+ System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed);
+ if (failed > 0) throw new AssertionError("Some tests failed");}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/zip/ZipCoding.java Tue Apr 21 21:26:21 2009 -0700
@@ -0,0 +1,133 @@
+/*
+ * 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 4244499 4532049 4700978 4820807 4980042
+ * @summary Test ZipInputStream, ZipOutputStream and ZipFile with non-UTF8 encoding
+ */
+
+import java.io.*;
+import java.nio.charset.*;
+import java.util.*;
+import java.util.zip.*;
+
+public class ZipCoding {
+
+ public static void main(String[] args) throws Exception {
+
+ test("MS932",
+ "\u4e00\u4e01", "\uff67\uff68\uff69\uff6a\uff6b\uff6c");
+
+ test("ibm437",
+ "\u00e4\u00fc", "German Umlaut \u00fc in comment");
+
+ test("utf-8",
+ "\u4e00\u4e01", "\uff67\uff68\uff69\uff6a\uff6b\uff6c");
+
+ test("utf-8",
+ "\u00e4\u00fc", "German Umlaut \u00fc in comment");
+
+ test("utf-8",
+ "Surrogate\ud801\udc01", "Surrogates \ud800\udc00 in comment");
+
+ }
+
+ static void testZipInputStream(InputStream is, Charset cs,
+ String name, String comment, byte[] bb)
+ throws Exception
+ {
+ ZipInputStream zis = new ZipInputStream(is, cs);
+ ZipEntry e = zis.getNextEntry();
+ if (e == null || ! name.equals(e.getName()))
+ throw new RuntimeException("ZipIS name doesn't match!");
+ byte[] bBuf = new byte[bb.length << 1];
+ int n = zis.read(bBuf, 0, bBuf.length);
+ if (n != bb.length ||
+ !Arrays.equals(bb, Arrays.copyOf(bBuf, n))) {
+ throw new RuntimeException("ZipIS content doesn't match!");
+ }
+ zis.close();
+ }
+
+ static void testZipFile(File f, Charset cs,
+ String name, String comment, byte[] bb)
+ throws Exception
+ {
+ ZipFile zf = new ZipFile(f, cs);
+ Enumeration<? extends ZipEntry> zes = zf.entries();
+ ZipEntry e = (ZipEntry)zes.nextElement();
+ if (! name.equals(e.getName()) ||
+ ! comment.equals(e.getComment()))
+ throw new RuntimeException("ZipFile: name/comment doesn't match!");
+ InputStream is = zf.getInputStream(e);
+ if (is == null)
+ throw new RuntimeException("ZipFile: getIS failed!");
+ byte[] bBuf = new byte[bb.length << 1];
+ int n = 0;
+ int nn =0;
+ while ((nn = is.read(bBuf, n, bBuf.length-n)) != -1) {
+ n += nn;
+ }
+ if (n != bb.length ||
+ !Arrays.equals(bb, Arrays.copyOf(bBuf, n))) {
+ throw new RuntimeException("ZipFile content doesn't match!");
+ }
+ zf.close();
+ }
+
+ static void test(String csn, String name, String comment)
+ throws Exception
+ {
+ byte[] bb = "This is the conent of the zipfile".getBytes("ISO-8859-1");
+ Charset cs = Charset.forName(csn);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ZipOutputStream zos = new ZipOutputStream(baos, cs);
+
+ ZipEntry e = new ZipEntry(name);
+ e.setComment(comment);
+ zos.putNextEntry(e);
+ zos.write(bb, 0, bb.length);
+ zos.closeEntry();
+ zos.close();
+ ByteArrayInputStream bis = new ByteArrayInputStream(baos.toByteArray());
+ testZipInputStream(bis, cs, name, comment, bb);
+
+ if ("utf-8".equals(csn)) {
+ // EFS should be set
+ bis.reset();
+ testZipInputStream(bis, Charset.forName("MS932"), name, comment, bb);
+ }
+
+ File f = new File(new File(System.getProperty("test.dir", ".")),
+ "zfcoding.zip");
+ FileOutputStream fos = new FileOutputStream(f);
+ baos.writeTo(fos);
+ fos.close();
+ testZipFile(f, cs, name, comment, bb);
+ if ("utf-8".equals(csn)) {
+ testZipFile(f, Charset.forName("MS932"), name, comment, bb);
+ }
+ f.delete();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/zip/zip.java Tue Apr 21 21:26:21 2009 -0700
@@ -0,0 +1,743 @@
+/*
+ * 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.
+ */
+
+import java.io.*;
+import java.nio.charset.Charset;
+import java.util.*;
+import java.util.zip.*;
+import java.text.MessageFormat;
+
+/**
+ * A stripped-down version of Jar tool with a "-encoding" option to
+ * support non-UTF8 encoidng for entry name and comment.
+ */
+public class zip {
+ String program;
+ PrintStream out, err;
+ String fname;
+ String zname = "";
+ String[] files;
+ Charset cs = Charset.forName("UTF-8");
+
+ Map<String, File> entryMap = new HashMap<String, File>();
+ Set<File> entries = new LinkedHashSet<File>();
+ List<String> paths = new ArrayList<String>();
+
+ CRC32 crc32 = new CRC32();
+ /*
+ * cflag: create
+ * uflag: update
+ * xflag: xtract
+ * tflag: table
+ * vflag: verbose
+ * flag0: no zip compression (store only)
+ */
+ boolean cflag, uflag, xflag, tflag, vflag, flag0;
+
+ private static ResourceBundle rsrc;
+ static {
+ try {
+ // just use the jar message
+ rsrc = ResourceBundle.getBundle("sun.tools.jar.resources.jar");
+ } catch (MissingResourceException e) {
+ throw new Error("Fatal: Resource for jar is missing");
+ }
+ }
+
+ public zip(PrintStream out, PrintStream err, String program) {
+ this.out = out;
+ this.err = err;
+ this.program = program;
+ }
+
+ private boolean ok;
+
+ public synchronized boolean run(String args[]) {
+ ok = true;
+ if (!parseArgs(args)) {
+ return false;
+ }
+ try {
+ if (cflag || uflag) {
+ if (fname != null) {
+ zname = fname.replace(File.separatorChar, '/');
+ if (zname.startsWith("./")) {
+ zname = zname.substring(2);
+ }
+ }
+ }
+ if (cflag) {
+ OutputStream out;
+ if (fname != null) {
+ out = new FileOutputStream(fname);
+ } else {
+ out = new FileOutputStream(FileDescriptor.out);
+ if (vflag) {
+ vflag = false;
+ }
+ }
+ expand(null, files, false);
+ create(new BufferedOutputStream(out, 4096));
+ out.close();
+ } else if (uflag) {
+ File inputFile = null, tmpFile = null;
+ FileInputStream in;
+ FileOutputStream out;
+ if (fname != null) {
+ inputFile = new File(fname);
+ String path = inputFile.getParent();
+ tmpFile = File.createTempFile("tmp", null,
+ new File((path == null) ? "." : path));
+ in = new FileInputStream(inputFile);
+ out = new FileOutputStream(tmpFile);
+ } else {
+ in = new FileInputStream(FileDescriptor.in);
+ out = new FileOutputStream(FileDescriptor.out);
+ vflag = false;
+ }
+ expand(null, files, true);
+ boolean updateOk = update(in, new BufferedOutputStream(out));
+ if (ok) {
+ ok = updateOk;
+ }
+ in.close();
+ out.close();
+ if (fname != null) {
+ inputFile.delete();
+ if (!tmpFile.renameTo(inputFile)) {
+ tmpFile.delete();
+ throw new IOException(getMsg("error.write.file"));
+ }
+ tmpFile.delete();
+ }
+ } else if (tflag) {
+ replaceFSC(files);
+ if (fname != null) {
+ list(fname, files);
+ } else {
+ InputStream in = new FileInputStream(FileDescriptor.in);
+ try{
+ list(new BufferedInputStream(in), files);
+ } finally {
+ in.close();
+ }
+ }
+ } else if (xflag) {
+ replaceFSC(files);
+ if (fname != null && files != null) {
+ extract(fname, files);
+ } else {
+ InputStream in = (fname == null)
+ ? new FileInputStream(FileDescriptor.in)
+ : new FileInputStream(fname);
+ try {
+ extract(new BufferedInputStream(in), files);
+ } finally {
+ in.close();
+ }
+ }
+ }
+ } catch (IOException e) {
+ fatalError(e);
+ ok = false;
+ } catch (Error ee) {
+ ee.printStackTrace();
+ ok = false;
+ } catch (Throwable t) {
+ t.printStackTrace();
+ ok = false;
+ }
+ out.flush();
+ err.flush();
+ return ok;
+ }
+
+
+ boolean parseArgs(String args[]) {
+ try {
+ args = parse(args);
+ } catch (FileNotFoundException e) {
+ fatalError(formatMsg("error.cant.open", e.getMessage()));
+ return false;
+ } catch (IOException e) {
+ fatalError(e);
+ return false;
+ }
+ int count = 1;
+ try {
+ String flags = args[0];
+ if (flags.startsWith("-")) {
+ flags = flags.substring(1);
+ }
+ for (int i = 0; i < flags.length(); i++) {
+ switch (flags.charAt(i)) {
+ case 'c':
+ if (xflag || tflag || uflag) {
+ usageError();
+ return false;
+ }
+ cflag = true;
+ break;
+ case 'u':
+ if (cflag || xflag || tflag) {
+ usageError();
+ return false;
+ }
+ uflag = true;
+ break;
+ case 'x':
+ if (cflag || uflag || tflag) {
+ usageError();
+ return false;
+ }
+ xflag = true;
+ break;
+ case 't':
+ if (cflag || uflag || xflag) {
+ usageError();
+ return false;
+ }
+ tflag = true;
+ break;
+ case 'v':
+ vflag = true;
+ break;
+ case 'f':
+ fname = args[count++];
+ break;
+ case '0':
+ flag0 = true;
+ break;
+ default:
+ error(formatMsg("error.illegal.option",
+ String.valueOf(flags.charAt(i))));
+ usageError();
+ return false;
+ }
+ }
+ } catch (ArrayIndexOutOfBoundsException e) {
+ usageError();
+ return false;
+ }
+ if (!cflag && !tflag && !xflag && !uflag) {
+ error(getMsg("error.bad.option"));
+ usageError();
+ return false;
+ }
+ /* parse file arguments */
+ int n = args.length - count;
+ if (n > 0) {
+ int k = 0;
+ String[] nameBuf = new String[n];
+ try {
+ for (int i = count; i < args.length; i++) {
+ if (args[i].equals("-encoding")) {
+ cs = Charset.forName(args[++i]);
+ } else if (args[i].equals("-C")) {
+ /* change the directory */
+ String dir = args[++i];
+ dir = (dir.endsWith(File.separator) ?
+ dir : (dir + File.separator));
+ dir = dir.replace(File.separatorChar, '/');
+ while (dir.indexOf("//") > -1) {
+ dir = dir.replace("//", "/");
+ }
+ paths.add(dir.replace(File.separatorChar, '/'));
+ nameBuf[k++] = dir + args[++i];
+ } else {
+ nameBuf[k++] = args[i];
+ }
+ }
+ } catch (ArrayIndexOutOfBoundsException e) {
+ e.printStackTrace();
+ usageError();
+ return false;
+ }
+ if (k != 0) {
+ files = new String[k];
+ System.arraycopy(nameBuf, 0, files, 0, k);
+ }
+ } else if (cflag || uflag) {
+ error(getMsg("error.bad.uflag"));
+ usageError();
+ return false;
+ }
+ return true;
+ }
+
+ void expand(File dir, String[] files, boolean isUpdate) {
+ if (files == null) {
+ return;
+ }
+ for (int i = 0; i < files.length; i++) {
+ File f;
+ if (dir == null) {
+ f = new File(files[i]);
+ } else {
+ f = new File(dir, files[i]);
+ }
+ if (f.isFile()) {
+ if (entries.add(f)) {
+ if (isUpdate)
+ entryMap.put(entryName(f.getPath()), f);
+ }
+ } else if (f.isDirectory()) {
+ if (entries.add(f)) {
+ if (isUpdate) {
+ String dirPath = f.getPath();
+ dirPath = (dirPath.endsWith(File.separator)) ? dirPath :
+ (dirPath + File.separator);
+ entryMap.put(entryName(dirPath), f);
+ }
+ expand(f, f.list(), isUpdate);
+ }
+ } else {
+ error(formatMsg("error.nosuch.fileordir", String.valueOf(f)));
+ ok = false;
+ }
+ }
+ }
+
+ void create(OutputStream out) throws IOException
+ {
+ ZipOutputStream zos = new ZipOutputStream(out, cs);
+ if (flag0) {
+ zos.setMethod(ZipOutputStream.STORED);
+ }
+ for (File file: entries) {
+ addFile(zos, file);
+ }
+ zos.close();
+ }
+
+ boolean update(InputStream in, OutputStream out) throws IOException
+ {
+ ZipInputStream zis = new ZipInputStream(in, cs);
+ ZipOutputStream zos = new ZipOutputStream(out, cs);
+ ZipEntry e = null;
+ byte[] buf = new byte[1024];
+ int n = 0;
+ boolean updateOk = true;
+
+ // put the old entries first, replace if necessary
+ while ((e = zis.getNextEntry()) != null) {
+ String name = e.getName();
+ if (!entryMap.containsKey(name)) { // copy the old stuff
+ // do our own compression
+ ZipEntry e2 = new ZipEntry(name);
+ e2.setMethod(e.getMethod());
+ e2.setTime(e.getTime());
+ e2.setComment(e.getComment());
+ e2.setExtra(e.getExtra());
+ if (e.getMethod() == ZipEntry.STORED) {
+ e2.setSize(e.getSize());
+ e2.setCrc(e.getCrc());
+ }
+ zos.putNextEntry(e2);
+ while ((n = zis.read(buf, 0, buf.length)) != -1) {
+ zos.write(buf, 0, n);
+ }
+ } else { // replace with the new files
+ File f = entryMap.get(name);
+ addFile(zos, f);
+ entryMap.remove(name);
+ entries.remove(f);
+ }
+ }
+
+ // add the remaining new files
+ for (File f: entries) {
+ addFile(zos, f);
+ }
+ zis.close();
+ zos.close();
+ return updateOk;
+ }
+
+ private String entryName(String name) {
+ name = name.replace(File.separatorChar, '/');
+ String matchPath = "";
+ for (String path : paths) {
+ if (name.startsWith(path) && (path.length() > matchPath.length())) {
+ matchPath = path;
+ }
+ }
+ name = name.substring(matchPath.length());
+
+ if (name.startsWith("/")) {
+ name = name.substring(1);
+ } else if (name.startsWith("./")) {
+ name = name.substring(2);
+ }
+ return name;
+ }
+
+ void addFile(ZipOutputStream zos, File file) throws IOException {
+ String name = file.getPath();
+ boolean isDir = file.isDirectory();
+ if (isDir) {
+ name = name.endsWith(File.separator) ? name :
+ (name + File.separator);
+ }
+ name = entryName(name);
+
+ if (name.equals("") || name.equals(".") || name.equals(zname)) {
+ return;
+ }
+
+ long size = isDir ? 0 : file.length();
+
+ if (vflag) {
+ out.print(formatMsg("out.adding", name));
+ }
+ ZipEntry e = new ZipEntry(name);
+ e.setTime(file.lastModified());
+ if (size == 0) {
+ e.setMethod(ZipEntry.STORED);
+ e.setSize(0);
+ e.setCrc(0);
+ } else if (flag0) {
+ e.setSize(size);
+ e.setMethod(ZipEntry.STORED);
+ crc32File(e, file);
+ }
+ zos.putNextEntry(e);
+ if (!isDir) {
+ byte[] buf = new byte[8192];
+ int len;
+ InputStream is = new BufferedInputStream(new FileInputStream(file));
+ while ((len = is.read(buf, 0, buf.length)) != -1) {
+ zos.write(buf, 0, len);
+ }
+ is.close();
+ }
+ zos.closeEntry();
+ /* report how much compression occurred. */
+ if (vflag) {
+ size = e.getSize();
+ long csize = e.getCompressedSize();
+ out.print(formatMsg2("out.size", String.valueOf(size),
+ String.valueOf(csize)));
+ if (e.getMethod() == ZipEntry.DEFLATED) {
+ long ratio = 0;
+ if (size != 0) {
+ ratio = ((size - csize) * 100) / size;
+ }
+ output(formatMsg("out.deflated", String.valueOf(ratio)));
+ } else {
+ output(getMsg("out.stored"));
+ }
+ }
+ }
+
+ private void crc32File(ZipEntry e, File f) throws IOException {
+ InputStream is = new BufferedInputStream(new FileInputStream(f));
+ byte[] buf = new byte[8192];
+ crc32.reset();
+ int r = 0;
+ int nread = 0;
+ long len = f.length();
+ while ((r = is.read(buf)) != -1) {
+ nread += r;
+ crc32.update(buf, 0, r);
+ }
+ is.close();
+ if (nread != (int) len) {
+ throw new ZipException(formatMsg(
+ "error.incorrect.length", f.getPath()));
+ }
+ e.setCrc(crc32.getValue());
+ }
+
+ void replaceFSC(String files[]) {
+ if (files != null) {
+ for (String file : files) {
+ file = file.replace(File.separatorChar, '/');
+ }
+ }
+ }
+
+ Set<ZipEntry> newDirSet() {
+ return new HashSet<ZipEntry>() {
+ public boolean add(ZipEntry e) {
+ return (e == null || super.add(e));
+ }};
+ }
+
+ void updateLastModifiedTime(Set<ZipEntry> zes) throws IOException {
+ for (ZipEntry ze : zes) {
+ long lastModified = ze.getTime();
+ if (lastModified != -1) {
+ File f = new File(ze.getName().replace('/', File.separatorChar));
+ f.setLastModified(lastModified);
+ }
+ }
+ }
+
+ void extract(InputStream in, String files[]) throws IOException {
+ ZipInputStream zis = new ZipInputStream(in, cs);
+ ZipEntry e;
+ Set<ZipEntry> dirs = newDirSet();
+ while ((e = zis.getNextEntry()) != null) {
+ if (files == null) {
+ dirs.add(extractFile(zis, e));
+ } else {
+ String name = e.getName();
+ for (String file : files) {
+ if (name.startsWith(file)) {
+ dirs.add(extractFile(zis, e));
+ break;
+ }
+ }
+ }
+ }
+ updateLastModifiedTime(dirs);
+ }
+
+ void extract(String fname, String files[]) throws IOException {
+ ZipFile zf = new ZipFile(fname, cs);
+ Set<ZipEntry> dirs = newDirSet();
+ Enumeration<? extends ZipEntry> zes = zf.entries();
+ while (zes.hasMoreElements()) {
+ ZipEntry e = zes.nextElement();
+ InputStream is;
+ if (files == null) {
+ dirs.add(extractFile(zf.getInputStream(e), e));
+ } else {
+ String name = e.getName();
+ for (String file : files) {
+ if (name.startsWith(file)) {
+ dirs.add(extractFile(zf.getInputStream(e), e));
+ break;
+ }
+ }
+ }
+ }
+ zf.close();
+ updateLastModifiedTime(dirs);
+ }
+
+ ZipEntry extractFile(InputStream is, ZipEntry e) throws IOException {
+ ZipEntry rc = null;
+ String name = e.getName();
+ File f = new File(e.getName().replace('/', File.separatorChar));
+ if (e.isDirectory()) {
+ if (f.exists()) {
+ if (!f.isDirectory()) {
+ throw new IOException(formatMsg("error.create.dir",
+ f.getPath()));
+ }
+ } else {
+ if (!f.mkdirs()) {
+ throw new IOException(formatMsg("error.create.dir",
+ f.getPath()));
+ } else {
+ rc = e;
+ }
+ }
+ if (vflag) {
+ output(formatMsg("out.create", name));
+ }
+ } else {
+ if (f.getParent() != null) {
+ File d = new File(f.getParent());
+ if (!d.exists() && !d.mkdirs() || !d.isDirectory()) {
+ throw new IOException(formatMsg(
+ "error.create.dir", d.getPath()));
+ }
+ }
+ OutputStream os = new FileOutputStream(f);
+ byte[] b = new byte[8192];
+ int len;
+ try {
+ while ((len = is.read(b, 0, b.length)) != -1) {
+ os.write(b, 0, len);
+ }
+ } finally {
+ if (is instanceof ZipInputStream)
+ ((ZipInputStream)is).closeEntry();
+ else
+ is.close();
+ os.close();
+ }
+ if (vflag) {
+ if (e.getMethod() == ZipEntry.DEFLATED) {
+ output(formatMsg("out.inflated", name));
+ } else {
+ output(formatMsg("out.extracted", name));
+ }
+ }
+ }
+ long lastModified = e.getTime();
+ if (lastModified != -1) {
+ f.setLastModified(lastModified);
+ }
+ return rc;
+ }
+
+ void list(InputStream in, String files[]) throws IOException {
+ ZipInputStream zis = new ZipInputStream(in, cs);
+ ZipEntry e;
+ while ((e = zis.getNextEntry()) != null) {
+ zis.closeEntry();
+ printEntry(e, files);
+ }
+ }
+
+ void list(String fname, String files[]) throws IOException {
+ ZipFile zf = new ZipFile(fname, cs);
+ Enumeration<? extends ZipEntry> zes = zf.entries();
+ while (zes.hasMoreElements()) {
+ printEntry(zes.nextElement(), files);
+ }
+ zf.close();
+ }
+
+ void printEntry(ZipEntry e, String[] files) throws IOException {
+ if (files == null) {
+ printEntry(e);
+ } else {
+ String name = e.getName();
+ for (String file : files) {
+ if (name.startsWith(file)) {
+ printEntry(e);
+ return;
+ }
+ }
+ }
+ }
+
+ void printEntry(ZipEntry e) throws IOException {
+ if (vflag) {
+ StringBuilder sb = new StringBuilder();
+ String s = Long.toString(e.getSize());
+ for (int i = 6 - s.length(); i > 0; --i) {
+ sb.append(' ');
+ }
+ sb.append(s).append(' ').append(new Date(e.getTime()).toString());
+ sb.append(' ').append(e.getName());
+ output(sb.toString());
+ } else {
+ output(e.getName());
+ }
+ }
+
+ void usageError() {
+ error(
+ "Usage: zip {ctxu}[vf0] [zip-file] [-encoding encname][-C dir] files ...\n" +
+ "Options:\n" +
+ " -c create new archive\n" +
+ " -t list table of contents for archive\n" +
+ " -x extract named (or all) files from archive\n" +
+ " -u update existing archive\n" +
+ " -v generate verbose output on standard output\n" +
+ " -f specify archive file name\n" +
+ " -0 store only; use no ZIP compression\n" +
+ " -C change to the specified directory and include the following file\n" +
+ "If any file is a directory then it is processed recursively.\n");
+ }
+
+ void fatalError(Exception e) {
+ e.printStackTrace();
+ }
+
+
+ void fatalError(String s) {
+ error(program + ": " + s);
+ }
+
+
+ protected void output(String s) {
+ out.println(s);
+ }
+
+ protected void error(String s) {
+ err.println(s);
+ }
+
+ private String getMsg(String key) {
+ try {
+ return (rsrc.getString(key));
+ } catch (MissingResourceException e) {
+ throw new Error("Error in message file");
+ }
+ }
+
+ private String formatMsg(String key, String arg) {
+ String msg = getMsg(key);
+ String[] args = new String[1];
+ args[0] = arg;
+ return MessageFormat.format(msg, (Object[]) args);
+ }
+
+ private String formatMsg2(String key, String arg, String arg1) {
+ String msg = getMsg(key);
+ String[] args = new String[2];
+ args[0] = arg;
+ args[1] = arg1;
+ return MessageFormat.format(msg, (Object[]) args);
+ }
+
+ public static String[] parse(String[] args) throws IOException
+ {
+ ArrayList<String> newArgs = new ArrayList<String>(args.length);
+ for (int i = 0; i < args.length; i++) {
+ String arg = args[i];
+ if (arg.length() > 1 && arg.charAt(0) == '@') {
+ arg = arg.substring(1);
+ if (arg.charAt(0) == '@') {
+ newArgs.add(arg);
+ } else {
+ loadCmdFile(arg, newArgs);
+ }
+ } else {
+ newArgs.add(arg);
+ }
+ }
+ return newArgs.toArray(new String[newArgs.size()]);
+ }
+
+ private static void loadCmdFile(String name, List<String> args) throws IOException
+ {
+ Reader r = new BufferedReader(new FileReader(name));
+ StreamTokenizer st = new StreamTokenizer(r);
+ st.resetSyntax();
+ st.wordChars(' ', 255);
+ st.whitespaceChars(0, ' ');
+ st.commentChar('#');
+ st.quoteChar('"');
+ st.quoteChar('\'');
+ while (st.nextToken() != st.TT_EOF) {
+ args.add(st.sval);
+ }
+ r.close();
+ }
+
+ public static void main(String args[]) {
+ zip z = new zip(System.out, System.err, "zip");
+ System.exit(z.run(args) ? 0 : 1);
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/print/attribute/MediaMappingsTest.java Tue Apr 21 21:26:21 2009 -0700
@@ -0,0 +1,48 @@
+/*
+ * 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.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along 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 6652463
+ * @summary Verify media size-> media mappings can't be altered
+ * @run main MediaMappingsTest
+*/
+
+import javax.print.attribute.standard.MediaSize;
+import javax.print.attribute.standard.MediaSizeName;
+
+public class MediaMappingsTest {
+
+ public static void main(String args[]) {
+ MediaSize sizeA = MediaSize.getMediaSizeForName(MediaSizeName.A);
+ new MediaSize(1.0f, 2.0f, MediaSize.MM, MediaSizeName.A);
+ if (!sizeA.equals(MediaSize.getMediaSizeForName(MediaSizeName.A))) {
+ throw new RuntimeException("mapping changed");
+ }
+ MediaSize sizeB = MediaSize.getMediaSizeForName(MediaSizeName.B);
+ new MediaSize(1, 2, MediaSize.MM, MediaSizeName.B);
+ if (!sizeB.equals(MediaSize.getMediaSizeForName(MediaSizeName.B))) {
+ throw new RuntimeException("mapping changed");
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/krb5/ConfigWithQuotations.java Tue Apr 21 21:26:21 2009 -0700
@@ -0,0 +1,47 @@
+/*
+ * 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 6714845
+ * @summary Quotes in Kerberos configuration file are included in the values
+ */
+
+import sun.security.krb5.Config;
+
+public class ConfigWithQuotations {
+ public static void main(String[] args) throws Exception {
+ // This config file is generated using Kerberos.app on a Mac
+ System.setProperty("java.security.krb5.conf",
+ System.getProperty("test.src", ".") +"/edu.mit.Kerberos");
+ Config config = Config.getInstance();
+
+ System.out.println(config);
+
+ if (!config.getDefaultRealm().equals("MAC.LOCAL")) {
+ throw new Exception("Realm error");
+ }
+ if (!config.getKDCList("MAC.LOCAL").equals("kdc.mac.local:88")) {
+ throw new Exception("KDC error");
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/krb5/edu.mit.Kerberos Tue Apr 21 21:26:21 2009 -0700
@@ -0,0 +1,15 @@
+[domain_realm]
+
+[libdefaults]
+ default_realm = "MAC.LOCAL"
+ dns_fallback = "no"
+
+[logging]
+ admin_server = "FILE:/var/log/krb5kdc/kadmin.log"
+ kdc = "FILE:/var/log/krb5kdc/kdc.log"
+
+[realms]
+ MAC.LOCAL = {
+ kdc = "kdc.mac.local:88"
+ }
+
--- a/jdk/test/sun/security/util/Oid/OidFormat.java Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/test/sun/security/util/Oid/OidFormat.java Tue Apr 21 21:26:21 2009 -0700
@@ -63,9 +63,22 @@
"1.2.3", "1.2.3445",
"1.3.6.1.4.1.42.2.17",
// 4811968: ASN.1 cannot handle huge OID components
- //"2.16.764.1.3101555394.1.0.100.2.1",
- //"1.2.2147483647.4",
- //"1.2.268435456.4",
+ "2.16.764.1.3101555394.1.0.100.2.1",
+ "2.2726957624935694386592435", // as huge as possible
+ "1.2.777777777777777777",
+ "1.2.888888888888888888.111111111111111.2222222222222.33333333333333333.44444444444444",
+ "1.2." +
+ "1111111111111111111111111111111111111111111111111111111111111." +
+ "2222222222222222222222222222222222222222222222222222222222222222." +
+ "333333333333333333333333333333333333333333333333333333333333333." +
+ "4444444444444444444444444444444444444444444444444444444." +
+ "55555555555555555555555555555555555555555555555555555555555555555555555." +
+ "666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666." +
+ "77777777777777777777777777777777777777777777777777777777777777777777777777." +
+ "8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888." +
+ "9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999",
+ "1.2.2147483647.4",
+ "1.2.268435456.4",
};
for (String s: goodOids) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/util/Oid/S11N.sh Tue Apr 21 21:26:21 2009 -0700
@@ -0,0 +1,164 @@
+#
+# Copyright 2004-2005 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 4811968
+# @summary Serialization compatibility with old versions
+# @author Weijun Wang
+#
+# set a few environment variables so that the shell-script can run stand-alone
+# in the source directory
+
+if [ "${TESTSRC}" = "" ] ; then
+ TESTSRC="."
+fi
+if [ "${TESTCLASSES}" = "" ] ; then
+ TESTCLASSES="."
+fi
+if [ "${TESTJAVA}" = "" ] ; then
+ echo "TESTJAVA not set. Test cannot execute."
+ echo "FAILED!!!"
+ exit 1
+fi
+
+# set platform-dependent variables
+PF=""
+
+OS=`uname -s`
+case "$OS" in
+ SunOS )
+ FS="/"
+ ARCH=`isainfo`
+ case "$ARCH" in
+ sparc* )
+ PF="solaris-sparc"
+ ;;
+ i[3-6]86 )
+ PF="solaris-i586"
+ ;;
+ amd64* )
+ PF="solaris-amd64"
+ ;;
+ * )
+ echo "Unsupported System: Solaris ${ARCH}"
+ exit 0;
+ ;;
+ esac
+ ;;
+ Linux )
+ ARCH=`uname -m`
+ FS="/"
+ case "$ARCH" in
+ i[3-6]86 )
+ PF="linux-i586"
+ ;;
+ amd64* )
+ PF="linux-amd64"
+ ;;
+ * )
+ echo "Unsupported System: Linux ${ARCH}"
+ exit 0;
+ ;;
+ esac
+ ;;
+ Windows* )
+ FS="\\"
+ PF="windows-i586"
+
+ # 'uname -m' does not give us enough information -
+ # should rely on $PROCESSOR_IDENTIFIER (as is done in Defs-windows.gmk),
+ # but JTREG does not pass this env variable when executing a shell script.
+ #
+ # execute test program - rely on it to exit if platform unsupported
+
+ ;;
+ * )
+ echo "Unsupported System: ${OS}"
+ exit 0;
+ ;;
+esac
+
+# the test code
+
+${TESTJAVA}${FS}bin${FS}javac -source 1.3 -target 1.3 -d . ${TESTSRC}${FS}SerialTest.java || exit 10
+
+OLDJAVA="
+ /java/re/j2se/1.6.0/latest/binaries/${PF}
+ /java/re/j2se/1.5.0/latest/binaries/${PF}
+ /java/re/j2se/1.4.2/latest/binaries/${PF}
+"
+
+SMALL="
+ 0.0
+ 1.1
+ 2.2
+ 1.2.3456
+ 1.2.2147483647.4
+ 1.2.268435456.4
+"
+
+HUGE="
+ 2.16.764.1.3101555394.1.0.100.2.1
+ 1.2.2147483648.4
+ 2.3.4444444444444444444444
+ 1.2.888888888888888888.111111111111111.2222222222222.33333333333333333.44444444444444
+"
+
+for oid in ${SMALL}; do
+ echo ${oid}
+ # new ->
+ ${TESTJAVA}${FS}bin${FS}java SerialTest out ${oid} > tmp.oid.serial || exit 1
+ # -> new
+ ${TESTJAVA}${FS}bin${FS}java SerialTest in ${oid} < tmp.oid.serial || exit 2
+ for oldj in ${OLDJAVA}; do
+ if [ -d ${oldj} ]; then
+ echo ${oldj}
+ # -> old
+ ${oldj}${FS}bin${FS}java SerialTest in ${oid} < tmp.oid.serial || exit 3
+ # old ->
+ ${oldj}${FS}bin${FS}java SerialTest out ${oid} > tmp.oid.serial.old || exit 4
+ # -> new
+ ${TESTJAVA}${FS}bin${FS}java SerialTest in ${oid} < tmp.oid.serial.old || exit 5
+ fi
+ done
+done
+
+for oid in ${HUGE}; do
+ echo ${oid}
+ # new ->
+ ${TESTJAVA}${FS}bin${FS}java SerialTest out ${oid} > tmp.oid.serial || exit 1
+ # -> new
+ ${TESTJAVA}${FS}bin${FS}java SerialTest in ${oid} < tmp.oid.serial || exit 2
+ for oldj in ${OLDJAVA}; do
+ if [ -d ${oldj} ]; then
+ echo ${oldj}
+ # -> old
+ ${oldj}${FS}bin${FS}java SerialTest badin < tmp.oid.serial || exit 3
+ fi
+ done
+done
+
+rm -f tmp.oid.serial
+rm -f tmp.oid.serial.old
+rm -f SerialTest.class
+
+exit 0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/util/Oid/SerialTest.java Tue Apr 21 21:26:21 2009 -0700
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2004 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.
+ */
+
+/*
+ * read S11.sh
+ */
+import java.io.*;
+import sun.security.util.*;
+
+/**
+ * Test OID serialization between versions
+ *
+ * java SerialTest out oid // write a OID into System.out
+ * java SerialTest in oid // read from System.in and compare it with oid
+ * java SerialTest badin // make sure *cannot* read from System.in
+ */
+class SerialTest {
+ public static void main(String[] args) throws Exception {
+ if (args[0].equals("out"))
+ out(args[1]);
+ else if (args[0].equals("in"))
+ in(args[1]);
+ else
+ badin();
+ }
+
+ static void in(String oid) throws Exception {
+ ObjectIdentifier o = (ObjectIdentifier) (new ObjectInputStream(System.in).readObject());
+ if (!o.toString().equals(oid))
+ throw new Exception("Read Fail " + o + ", not " + oid);
+ }
+
+ static void badin() throws Exception {
+ boolean pass = true;
+ try {
+ new ObjectInputStream(System.in).readObject();
+ } catch (Exception e) {
+ pass = false;
+ }
+ if (pass) throw new Exception("Should fail but not");
+ }
+
+ static void out(String oid) throws Exception {
+ new ObjectOutputStream(System.out).writeObject(new ObjectIdentifier(oid));
+ }
+}
--- a/jdk/test/tools/launcher/MultipleJRE.sh Wed Jul 05 16:51:35 2017 +0200
+++ b/jdk/test/tools/launcher/MultipleJRE.sh Tue Apr 21 21:26:21 2009 -0700
@@ -1,14 +1,14 @@
# @test MultipleJRE.sh
-# @bug 4811102 4953711 4955505 4956301 4991229 4998210 5018605 6387069
+# @bug 4811102 4953711 4955505 4956301 4991229 4998210 5018605 6387069 6733959
# @build PrintVersion
# @build UglyPrintVersion
+# @build ZipMeUp
# @run shell MultipleJRE.sh
# @summary Verify Multiple JRE version support
# @author Joseph E. Kowalski
-
#
-# Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved.
+# Copyright 2003-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
@@ -49,11 +49,26 @@
exit 1
fi
+JAVAEXE="$TESTJAVA/bin/java"
JAVA="$TESTJAVA/bin/java -classpath $TESTCLASSES"
JAR="$TESTJAVA/bin/jar"
OS=`uname -s`;
#
+# Tests whether we are on windows (true) or not.
+#
+IsWindows() {
+ case "$OS" in
+ Windows* | CYGWIN* )
+ printf "true"
+ ;;
+ * )
+ printf "false"
+ ;;
+ esac
+}
+
+#
# Shell routine to test for the proper rejection of syntactically incorrect
# version specifications.
#
@@ -139,7 +154,6 @@
$PACKAGE/UglyPrintVersion.class
}
-
#
# Constructs a jar file with a fair number of "zip directory" entries and
# the MANIFEST.MF entry at or near the end of that directory to validate
@@ -262,6 +276,29 @@
fi
}
+# Tests very long Main-Class attribute in the jar
+TestLongMainClass() {
+ JVER=$1
+ if [ "$JVER" = "mklink" ]; then
+ JVER=XX
+ JDKXX=jdk/j2re$JVER
+ rm -rf jdk
+ mkdir jdk
+ ln -s $TESTJAVA $JDKXX
+ JAVA_VERSION_PATH="`pwd`/jdk"
+ export JAVA_VERSION_PATH
+ fi
+ $JAVAEXE -cp $TESTCLASSES ZipMeUp UglyBetty.jar 4097
+ message="`$JAVAEXE -version:$JVER -jar UglyBetty.jar 2>&1`"
+ echo $message | grep "Error: main-class: attribute exceeds system limits" > /dev/null 2>&1
+ if [ $? -ne 0 ]; then
+ printf "Long manifest test did not get expected error"
+ exit 1
+ fi
+ unset JAVA_VERSION_PATH
+ rm -rf jdk
+}
+
#
# Main test sequence starts here
#
@@ -280,14 +317,11 @@
LaunchVM "" "${RELEASE}"
CreateJar "" "0"
LaunchVM "" "${RELEASE}"
-case "$OS" in
- Windows* | CYGWIN* )
- MAXIMUM_PATH=255;
- ;;
- *)
- MAXIMUM_PATH=1024;
- ;;
-esac
+if [ `IsWindows` = "true" ]; then
+ MAXIMUM_PATH=255;
+else
+ MAXIMUM_PATH=1024;
+fi
PATH_LENGTH=`printf "%s" "$UGLYCLASS" | wc -c`
if [ ${PATH_LENGTH} -lt ${MAXIMUM_PATH} ]; then
@@ -346,7 +380,6 @@
LaunchVM "" "${RELEASE}"
fi
-
#
# Throw some syntactically challenged (illegal) version specifiers at
# the interface. Failure (of the launcher) is success for the test.
@@ -357,15 +390,28 @@
TestSyntax "1.2+.3" # Embedded modifier
TestSyntax "1.2.4+&1.2*&1++" # Long and invalid
+# On windows we see if there is another jre installed, usually
+# there is, then we test using that, otherwise links are created
+# to get through to SelectVersion.
+if [ `IsWindows` = "false" ]; then
+ TestLongMainClass "mklink"
+else
+ $JAVAEXE -version:1.0+
+ if [ $? -eq 0 ]; then
+ TestLongMainClass "1.0+"
+ else
+ printf "Warning: TestLongMainClass skipped as there is no"
+ printf "viable MJRE installed.\n"
+ fi
+fi
+
#
# Because scribbling in the registry can be rather destructive, only a
# subset of the tests are run on Windows.
#
-case "$OS" in
- Windows* | CYGWIN* )
- exit 0;
- ;;
-esac
+if [ `IsWindows` = "true" ]; then
+ exit 0;
+fi
#
# Additional version specifiers containing spaces. (Sigh, unable to
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/launcher/ZipMeUp.java Tue Apr 21 21:26:21 2009 -0700
@@ -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.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/**
+ * A simple class to create our erring Jar with a very long Main-Class
+ * attribute in the manifest.
+ */
+import java.io.ByteArrayOutputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.zip.CRC32;
+import java.util.zip.CheckedOutputStream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+public class ZipMeUp {
+
+ static final CRC32 crc = new CRC32();
+
+ private static String SOME_KLASS = ".Some";
+
+ static byte[] getManifestAsBytes(int nchars) throws IOException {
+ crc.reset();
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ CheckedOutputStream cos = new CheckedOutputStream(baos, crc);
+ PrintStream ps = new PrintStream(cos);
+ ps.println("Manifest-Version: 1.0");
+ ps.print("Main-Class: ");
+ for (int i = 0 ; i < nchars - SOME_KLASS.length() ; i++) {
+ ps.print(i%10);
+ }
+ ps.println(SOME_KLASS);
+ cos.flush();
+ cos.close();
+ ps.close();
+ return baos.toByteArray();
+ }
+
+ /**
+ * The arguments are: filename_to_create length
+ * @param args
+ * @throws java.lang.Exception
+ */
+ public static void main(String...args) throws Exception {
+ FileOutputStream fos = new FileOutputStream(args[0]);
+ ZipOutputStream zos = new ZipOutputStream(fos);
+ byte[] manifest = getManifestAsBytes(Integer.parseInt(args[1]));
+ ZipEntry ze = new ZipEntry("META-INF/MANIFEST.MF");
+ ze.setMethod(ZipEntry.STORED);
+ ze.setSize(manifest.length);
+ ze.setCompressedSize(manifest.length);
+ ze.setCrc(crc.getValue());
+ ze.setTime(System.currentTimeMillis());
+ zos.putNextEntry(ze);
+ zos.write(manifest);
+ zos.flush();
+
+ // add a zero length class
+ ze = new ZipEntry(SOME_KLASS + ".class");
+ ze.setMethod(ZipEntry.STORED);
+ ze.setSize(0);
+ ze.setCompressedSize(0);
+ ze.setCrc(0);
+ ze.setTime(System.currentTimeMillis());
+ zos.putNextEntry(ze);
+ zos.flush();
+ zos.closeEntry();
+ zos.close();
+ System.exit(0);
+ }
+}