home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 November / Chip_1998-11_cd.bin / tema / Cafe / main.bin / Character.java < prev    next >
Text File  |  1997-05-20  |  113KB  |  2,314 lines

  1. /* @(#)Character.java    1.42 97/01/30
  2.  * 
  3.  * Copyright (c) 1995, 1996 Sun Microsystems, Inc. All Rights Reserved.
  4.  * 
  5.  * This software is the confidential and proprietary information of Sun
  6.  * Microsystems, Inc. ("Confidential Information").  You shall not
  7.  * disclose such Confidential Information and shall use it only in
  8.  * accordance with the terms of the license agreement you entered into
  9.  * with Sun.
  10.  * 
  11.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  12.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  13.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  14.  * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
  15.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
  16.  * THIS SOFTWARE OR ITS DERIVATIVES.
  17.  * 
  18.  * CopyrightVersion 1.1_beta
  19.  *  */
  20.  
  21. package java.lang;
  22.  
  23. /**
  24.  * The Character class wraps a value of the primitive type <code>char</code> 
  25.  * in an object. An object of type <code>Character</code> contains a 
  26.  * single field whose type is <code>char</code>. 
  27.  * <p>
  28.  * In addition, this class provides several methods for determining 
  29.  * the type of a character and converting characters from uppercase 
  30.  * to lowercase and vice versa. 
  31.  * <p>
  32.  * Many of the methods of class <code>Character</code> are defined 
  33.  * in terms of a "Unicode attribute table" that specifies 
  34.  * a name for every defined Unicode code point. The table also 
  35.  * includes other attributes, such as a decimal value, an uppercase 
  36.  * equivalent, a lowercase equivalent, and/or a titlecase equivalent. 
  37.  * The Unicode attribute table is available on the World Wide Web as 
  38.  * the file:
  39.  * <ul><code>
  40.  *   ftp://unicode.org/pub/MappingTables/UnicodeData1.1.5.txt
  41.  * </code></ul>
  42.  * <p>
  43.  * For a more detailed specification of the <code>Character</code> 
  44.  * class, one that encompasses the exact behavior of methods such as 
  45.  * <code>isDigit</code>, <code>isLetter</code>, 
  46.  * <code>isLowerCase</code>, and <code>isUpperCase</code> over the 
  47.  * full range of Unicode values, see Gosling, Joy, and Steele, <i>The 
  48.  * Java Language Specification</i>. 
  49.  *
  50.  * @author  Lee Boynton
  51.  * @author  Guy Steele
  52.  * @author  Akira Tanaka
  53.  * @version 1.42 01/30/97
  54.  * @since   JDK1.0
  55.  */
  56. public final
  57. class Character extends Object implements java.io.Serializable {
  58.     /**
  59.      * The minimum radix available for conversion to and from Strings.  
  60.      * The constant value of this field is the smallest value permitted 
  61.      * for the radix argument in radix-conversion methods such as the 
  62.      * <code>digit</code> method, the <code>forDigit</code>
  63.      * method, and the <code>toString</code> method of class 
  64.      * <code>Integer</code>. 
  65.      *
  66.      * @see     java.lang.Character#digit(char, int)
  67.      * @see     java.lang.Character#forDigit(int, int)
  68.      * @see     java.lang.Integer#toString(int, int)
  69.      * @see     java.lang.Integer#valueOf(java.lang.String)
  70.      * @since   JDK1.0
  71.      */
  72.     public static final int MIN_RADIX = 2;
  73.  
  74.     /**
  75.      * The maximum radix available for conversion to and from Strings.
  76.      * The constant value of this field is the largest value permitted 
  77.      * for the radix argument in radix-conversion methods such as the 
  78.      * <code>digit</code> method, the <code>forDigit</code>
  79.      * method, and the <code>toString</code> method of class 
  80.      * <code>Integer</code>. 
  81.      *
  82.      * @see     java.lang.Character#digit(char, int)
  83.      * @see     java.lang.Character#forDigit(int, int)
  84.      * @see     java.lang.Integer#toString(int, int)
  85.      * @see     java.lang.Integer#valueOf(java.lang.String)
  86.      * @since   JDK1.0
  87.      */
  88.     public static final int MAX_RADIX = 36;
  89.  
  90.     /**
  91.      * The constant value of this field is the smallest value of type 
  92.      * <code>char</code>.
  93.      *
  94.      * @since   JDK1.0.2
  95.      */
  96.     public static final char   MIN_VALUE = '\u0000';
  97.  
  98.     /**
  99.      * The constant value of this field is the largest value of type 
  100.      * <code>char</code>.
  101.      *
  102.      * @since   JDK1.0.2
  103.      */
  104.     public static final char   MAX_VALUE = '\uffff';
  105.     
  106.     /**
  107.      * The Class object representing the primitive type char.
  108.      *
  109.      * @since   JDK1.1
  110.      */
  111.     public static final Class    TYPE = Class.getPrimitiveClass("char");
  112.     
  113.     /*
  114.      * Public data for enumerated Unicode general category types
  115.      *
  116.      * @since   JDK1.1
  117.      */
  118.     public static final byte
  119.     UNASSIGNED        = 0,
  120.     UPPERCASE_LETTER    = 1,
  121.     LOWERCASE_LETTER    = 2,
  122.     TITLECASE_LETTER    = 3,
  123.     MODIFIER_LETTER        = 4,
  124.     OTHER_LETTER        = 5,
  125.     NON_SPACING_MARK    = 6,
  126.     ENCLOSING_MARK        = 7,
  127.     COMBINING_SPACING_MARK    = 8,
  128.     DECIMAL_DIGIT_NUMBER    = 9,
  129.     LETTER_NUMBER        = 10,
  130.     OTHER_NUMBER        = 11,
  131.     SPACE_SEPARATOR        = 12,
  132.     LINE_SEPARATOR        = 13,
  133.     PARAGRAPH_SEPARATOR    = 14,
  134.     CONTROL            = 15,
  135.     FORMAT            = 16,
  136.     PRIVATE_USE        = 18,
  137.     SURROGATE        = 19,
  138.     DASH_PUNCTUATION    = 20,
  139.     START_PUNCTUATION    = 21,
  140.     END_PUNCTUATION        = 22,
  141.     CONNECTOR_PUNCTUATION    = 23,
  142.     OTHER_PUNCTUATION    = 24,
  143.     MATH_SYMBOL        = 25,
  144.     CURRENCY_SYMBOL        = 26,
  145.     MODIFIER_SYMBOL        = 27,
  146.     OTHER_SYMBOL        = 28;
  147.  
  148.     /**
  149.      * The value of the Character.
  150.      */
  151.     private char value;
  152.  
  153.     /** use serialVersionUID from JDK 1.0.2 for interoperability */
  154.     private static final long serialVersionUID = 3786198910865385080L;
  155.  
  156.     /**
  157.      * Constructs a <code>Character</code> object and initializes it so 
  158.      * that it represents the primitive <code>value</code> argument. 
  159.      *
  160.      * @param  value   value for the new <code>Character</code> object.
  161.      * @since   JDK1.0
  162.      */
  163.     public Character(char value) {
  164.     this.value = value;
  165.     }
  166.  
  167.     /**
  168.      * Returns the value of this Character object.
  169.      * @return  the primitive <code>char</code> value represented by
  170.      *          this object.
  171.      * @since   JDK1.0
  172.      */
  173.     public char charValue() {
  174.     return value;
  175.     }
  176.  
  177.     /**
  178.      * Returns a hash code for this Character.
  179.      * @return  a hash code value for this object. 
  180.      * @since   JDK1.0
  181.      */
  182.     public int hashCode() {
  183.     return (int)value;
  184.     }
  185.  
  186.     /**
  187.      * Compares this object against the specified object.
  188.      * The result is <code>true</code> if and only if the argument is not 
  189.      * <code>null</code> and is a <code>Character</code> object that 
  190.      * represents the same <code>char</code> value as this object. 
  191.      *
  192.      * @param   obj   the object to compare with.
  193.      * @return  <code>true</code> if the objects are the same;
  194.      *          <code>false</code> otherwise.
  195.      * @since   JDK1.0
  196.      */
  197.     public boolean equals(Object obj) {
  198.     if ((obj != null) && (obj instanceof Character)) {
  199.         return value == ((Character)obj).charValue();
  200.     } 
  201.     return false;
  202.     }
  203.  
  204.     /**
  205.      * Returns a String object representing this character's value.
  206.      * Converts this <code>Character</code> object to a string. The 
  207.      * result is a string whose length is <code>1</code>. The string's 
  208.      * sole component is the primitive <code>char</code> value represented 
  209.      * by this object. 
  210.      *
  211.      * @return  a string representation of this object.
  212.      * @since   JDK1.0
  213.      */
  214.     public String toString() {
  215.     char buf[] = {value};
  216.     return String.valueOf(buf);
  217.     }
  218.  
  219.    /**
  220.      * Determines if the specified character is a lowercase character. 
  221.      * A character is lowercase if it is not in the range 
  222.      * <code>'\u2000'</code> through <code>'\u2FFF'</code>, the Unicode 
  223.      * attribute table does not specify a mapping to lowercase for the 
  224.      * character, and at least one of the following is true: 
  225.      * <ul>
  226.      * <li>The attribute table specifies a mapping to uppercase for the 
  227.      *     character. 
  228.      * <li>The name for the character contains the words "<code>SMALL 
  229.      *     LETTER</code>". 
  230.      * <li>The name for the character contains the words "<code>SMALL 
  231.      *     LIGATURE</code>". 
  232.      * </ul>
  233.      * <p> A character is considered to be lowercase if and only if
  234.      * it is specified to be lowercase by the Unicode 2.0 standard
  235.      * (category "Ll" in the Unicode specification data file).
  236.      * <p>
  237.      * Of the ISO-LATIN-1 characters (character codes 0x0000 through 0x00FF),
  238.      * the following are lowercase:
  239.      * <p><blockquote><pre>
  240.      * a b c d e f g h i j k l m n o p q r s t u v w x y z
  241.      * \u00DF \u00E0 \u00E1 \u00E2 \u00E3 \u00E4 \u00E5 \u00E6 \u00E7
  242.      * \u00E8 \u00E9 \u00EA \u00EB \u00EC \u00ED \u00EE \u00EF \u00F0
  243.      * \u00F1 \u00F2 \u00F3 \u00F4 \u00F5 \u00F6 \u00F8 \u00F9 \u00FA
  244.      * \u00FB \u00FC \u00FD \u00FE \u00FF
  245.      * </pre></blockquote>
  246.      * <p> Many other Unicode characters are lowercase, too.
  247.      *
  248.      * @param   ch   the character to be tested.
  249.      * @return  <code>true</code> if the character is lowercase;
  250.      *          <code>false</code> otherwise.
  251.      * @see     java.lang.Character#isLowerCase(char)
  252.      * @see     java.lang.Character#isTitleCase(char)
  253.      * @see     java.lang.Character#toLowerCase(char)
  254.      * @since   JDK1.0
  255.      */
  256.     public static boolean isLowerCase(char ch) {
  257.     return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x1F) == LOWERCASE_LETTER;
  258.     }
  259.  
  260.    /**
  261.      * Determines if the specified character is an uppercase character. 
  262.      * A character is uppercase if it is not in the range 
  263.      * <code>'\u2000'</code> through <code>'\u2FFF'</code>, the Unicode 
  264.      * attribute table does not specify a mapping to uppercase for the 
  265.      * character, and at least one of the following is true: 
  266.      * <ul>
  267.      * <li>The attribute table specifies a mapping to lowercase for the
  268.      *     character. 
  269.      * <li>The name for the character contains the words 
  270.      *     "<code>CAPITAL LETTER</code>".
  271.      * <li>The name for the character contains the words
  272.      *     "<code>CAPITAL LIGATURE</code>".
  273.      * </ul>
  274.      * <p>
  275.      * Of the ISO-LATIN-1 characters (character codes 0x0000 through 0x00FF),
  276.      * the following are uppercase:
  277.      * <p><blockquote><pre>
  278.      * A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
  279.      * \u00C0 \u00C1 \u00C2 \u00C3 \u00C4 \u00C5 \u00C6 \u00C7
  280.      * \u00C8 \u00C9 \u00CA \u00CB \u00CC \u00CD \u00CE \u00CF \u00D0
  281.      * \u00D1 \u00D2 \u00D3 \u00D4 \u00D5 \u00D6 \u00D8 \u00D9 \u00DA
  282.      * \u00DB \u00DC \u00DD \u00DE
  283.      * </pre></blockquote>
  284.      * <p> Many other Unicode characters are uppercase, too.
  285.      *
  286.      * @param   ch   the character to be tested.
  287.      * @return  <code>true</code> if the character is uppercase;
  288.      *          <code>false</code> otherwise.
  289.      * @see     java.lang.Character#isLowerCase(char)
  290.      * @see     java.lang.Character#isTitleCase(char)
  291.      * @see     java.lang.Character#toUpperCase(char)
  292.      * @since   1.0
  293.      */
  294.     public static boolean isUpperCase(char ch) {
  295.     return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x1F) == UPPERCASE_LETTER;
  296.     }
  297.  
  298.     /**
  299.      * Determines if the specified character is a titlecase character.
  300.      * A character is considered to be titlecase if and only if
  301.      * it is specified to be titlecase by the Unicode 2.0 standard
  302.      * (category "Lt" in the Unicode specification data file).
  303.      * <p>
  304.      * The printed representations of four Unicode characters look like 
  305.      * pairs of Latin letters. For example, there is an uppercase letter 
  306.      * that looks like "LJ" and has a corresponding lowercase letter that 
  307.      * looks like "lj". A third form, which looks like "Lj", 
  308.      * is the appropriate form to use when rendering a word in lowercase 
  309.      * with initial capitals, as for a book title.
  310.      * <p>
  311.      * These are the Unicode characters for which this method returns 
  312.      * <code>true</code>: 
  313.      * <ul>
  314.      * <li><code>LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON</code> 
  315.      * <li><code>LATIN CAPITAL LETTER L WITH SMALL LETTER J</code> 
  316.      * <li><code>LATIN CAPITAL LETTER N WITH SMALL LETTER J</code> 
  317.      * <li><code>LATIN CAPITAL LETTER D WITH SMALL LETTER Z</code> 
  318.      * </ul>
  319.      *
  320.      * @param   ch   the character to be tested.
  321.      * @return  <code>true</code> if the character is titlecase;
  322.      *          <code>false</code> otherwise.
  323.      * @see     java.lang.Character#isLowerCase(char)
  324.      * @see     java.lang.Character#isUpperCase(char)
  325.      * @see     java.lang.Character#toTitleCase(char)
  326.      * @since   JDK1.0.2
  327.      */
  328.     public static boolean isTitleCase(char ch) {
  329.     return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x1F) == TITLECASE_LETTER;
  330.     }
  331.  
  332.     /**
  333.      * Determines if the specified character is a digit.
  334.      * A character is considered to be a digit if it is not in the range 
  335.      * <code>'\u2000' <= ch <= '\u2FFF'</code>
  336.      * and its Unicode name contains the word 
  337.      * "<code>DIGIT</code>". For a more complete 
  338.      * specification that encompasses all Unicode characters that are 
  339.      * defined as digits, see Gosling, Joy, and Steele, <i>The Java 
  340.      * Language Specification</i>.
  341.      * <p>
  342.      * These are the ranges of Unicode characters that are considered digits:
  343.      * <table>
  344.      * <tr><td>0x0030 through 0x0039</td>
  345.      *                        <td>ISO-LATIN-1 digits ('0' through '9')</td></tr>
  346.      * <tr><td>0x0660 through 0x0669</td>  <td>Arabic-Indic digits</td></tr>
  347.      * <tr><td>0x06F0 through 0x06F9</td>
  348.      *                                <td>Extended Arabic-Indic digits</td></tr>
  349.      * <tr><td>0x0966 through 0x096F</td>  <td>Devanagari digits</td></tr>
  350.      * <tr><td>0x09E6 through 0x09EF</td>  <td>Bengali digits</td></tr>
  351.      * <tr><td>0x0A66 through 0x0A6F</td>  <td>Gurmukhi digits</td></tr>
  352.      * <tr><td>0x0AE6 through 0x0AEF</td>  <td>Gujarati digits</td></tr>
  353.      * <tr><td>0x0B66 through 0x0B6F</td>  <td>Oriya digits</td></tr>
  354.      * <tr><td>0x0BE7 through 0x0BEF</td>  <td>Tamil digits</td></tr>
  355.      * <tr><td>0x0C66 through 0x0C6F</td>  <td>Telugu digits</td></tr>
  356.      * <tr><td>0x0CE6 through 0x0CEF</td>  <td>Kannada digits</td></tr>
  357.      * <tr><td>0x0D66 through 0x0D6F</td>  <td>Malayalam digits</td></tr>
  358.      * <tr><td>0x0E50 through 0x0E59</td>  <td>Thai digits</td></tr>
  359.      * <tr><td>0x0ED0 through 0x0ED9</td>  <td>Lao digits</td></tr>
  360.      * <tr><td>0x0F20 through 0x0F29</td>  <td>Tibetan digits</td></tr>
  361.      * <tr><td>0xFF10 through 0xFF19</td>  <td>Fullwidth digits</td></tr>
  362.      * </table>
  363.      *
  364.      * @param   ch   the character to be tested.
  365.      * @return  <code>true</code> if the character is a digit;
  366.      *          <code>false</code> otherwise.
  367.      * @see     java.lang.Character#digit(char, int)
  368.      * @see     java.lang.Character#forDigit(int, int)
  369.      * @since   JDK1.0
  370.      */
  371.     public static boolean isDigit(char ch) {
  372.     return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x1F) == DECIMAL_DIGIT_NUMBER;
  373.     }
  374.  
  375.     /**
  376.      * Determines if a character has a defined meaning in Unicode.
  377.      * A character is defined if at least one of the following is true: 
  378.      * <ul>
  379.      * <li>It has an entry in the Unicode attribute table. 
  380.      * <li>Its value is in the range 
  381.      *     <code>
  382.      *     '\u3040' <= ch <= '\u9FA5'</code>. 
  383.      * <li>Its value is in the range 
  384.      *     <code>
  385.      *     '\uF900' <= ch <= '\uFA2D'</code>. 
  386.      * </ul>
  387.      * 
  388.      * @param   ch   the character to be tested
  389.      * @return  <code>true</code> if the character has a defined meaning
  390.      *          in Unicode; <code>false</code> otherwise.
  391.      * @see     java.lang.Character#isDigit(char)
  392.      * @see     java.lang.Character#isLetter(char)
  393.      * @see     java.lang.Character#isLetterOrDigit(char)
  394.      * @see     java.lang.Character#isLowerCase(char)
  395.      * @see     java.lang.Character#isTitleCase(char)
  396.      * @see     java.lang.Character#isUpperCase(char)
  397.      * @since   JDK1.0.2
  398.      */
  399.     public static boolean isDefined(char ch) {
  400.     return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x1F) != UNASSIGNED;
  401.     }
  402.  
  403.     /**
  404.      * Determines if the specified character is a letter. For a 
  405.      * more complete specification that encompasses all Unicode 
  406.      * characters, see Gosling, Joy, and Steele, <i>The Java Language 
  407.      * Specification</i>. 
  408.      *
  409.      * <p> A character is considered to be a letter if and only if
  410.      * it is specified to be a letter by the Unicode 2.0 standard
  411.      * (category "Lu", "Ll", "Lt", "Lm", or "Lo" in the Unicode
  412.      * specification data file).
  413.      *
  414.      * <p> Note that most ideographic characters are considered
  415.      * to be letters (category "Lo") for this purpose.
  416.      *
  417.      * <p> Note also that not all letters have case: many Unicode characters are
  418.      * letters but are neither uppercase nor lowercase nor titlecase.
  419.      * 
  420.      * @param   ch   the character to be tested.
  421.      * @return  <code>true</code> if the character is a letter;
  422.      *          <code>false</code> otherwise.
  423.      * @see     java.lang.Character#isDigit(char)
  424.      * @see     java.lang.Character#isJavaIdentifierStart(char)
  425.      * @see     java.lang.Character#isJavaLetter(char)
  426.      * @see     java.lang.Character#isJavaLetterOrDigit(char)
  427.      * @see     java.lang.Character#isLetterOrDigit(char)
  428.      * @see     java.lang.Character#isLowerCase(char)
  429.      * @see     java.lang.Character#isTitleCase(char)
  430.      * @see     java.lang.Character#isUnicodeIdentifierStart(char)
  431.      * @see     java.lang.Character#isUpperCase(char)
  432.      * @since   JDK1.0
  433.      */
  434.     public static boolean isLetter(char ch) {
  435.     return (((((1 << UPPERCASE_LETTER) |
  436.            (1 << LOWERCASE_LETTER) |
  437.            (1 << TITLECASE_LETTER) |
  438.            (1 << MODIFIER_LETTER) |
  439.            (1 << OTHER_LETTER))
  440.           >> (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x1F)) & 1) != 0);
  441.     }
  442.  
  443.     /**
  444.      * Determines if the specified character is a letter or digit. 
  445.      * For a more complete specification that encompasses all Unicode 
  446.      * characters, see Gosling, Joy, and Steele, <i>The Java Language 
  447.      * Specification</i>. 
  448.      *
  449.      * <p> A character is considered to be a letter if and only if
  450.      * it is specified to be a letter or a digit by the Unicode 2.0 standard
  451.      * (category "Lu", "Ll", "Lt", "Lm", "Lo", or "Nd" in the Unicode
  452.      * specification data file).  In other words, isLetterOrDigit is true
  453.      * of a character if and only if either isLetter is true of the character
  454.      * or isDigit is true of the character.
  455.      * 
  456.      * @param   ch   the character to be tested.
  457.      * @return  <code>true</code> if the character is a letter or digit;
  458.      *          <code>false</code> otherwise.
  459.      * @see     java.lang.Character#isDigit(char)
  460.      * @see     java.lang.Character#isJavaIdentifierPart(char)
  461.      * @see     java.lang.Character#isJavaLetter(char)
  462.      * @see     java.lang.Character#isJavaLetterOrDigit(char)
  463.      * @see     java.lang.Character#isLetter(char)
  464.      * @see     java.lang.Character#isUnicodeIdentifierPart(char)
  465.      * @since   JDK1.0.2
  466.      */
  467.     public static boolean isLetterOrDigit(char ch) {
  468.     return (((((1 << UPPERCASE_LETTER) |
  469.            (1 << LOWERCASE_LETTER) |
  470.            (1 << TITLECASE_LETTER) |
  471.            (1 << MODIFIER_LETTER) |
  472.            (1 << OTHER_LETTER) |
  473.            (1 << DECIMAL_DIGIT_NUMBER))
  474.           >> (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x1F)) & 1) != 0);
  475.     }
  476.  
  477.     /**
  478.      * Determines if the specified character is a 
  479.      * "Java" letter, that is, the character is permissible 
  480.      * as the first character in an identifier in the Java language. 
  481.      * <p>
  482.      * A character is considered to be a Java letter if and only if it 
  483.      * is a letter, the ASCII dollar sign character <code>'$'</code>, or 
  484.      * the underscore character <code>'_'</code>. 
  485.      *
  486.      * @param      ch   the character to be tested.
  487.      * @return     <code>true</code> if the character is a Java letter;
  488.      *             <code>false</code> otherwise.
  489.      * @see        java.lang.Character#isJavaIdentifierStart(char)
  490.      * @see        java.lang.Character#isJavaLetterOrDigit(char)
  491.      * @see        java.lang.Character#isLetter(char)
  492.      * @see        java.lang.Character#isLetterOrDigit(char)
  493.      * @see        java.lang.Character#isUnicodeIdentifierStart(char)
  494.      * @since      JDK1.0.2
  495.      * @deprecated Replaced by isJavaIdentifierStart(char).
  496.      */
  497.     public static boolean isJavaLetter(char ch) {
  498.       return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x00070000) >= 0x00050000;
  499.     }
  500.  
  501.     /**
  502.      * Determines if the specified character is a 
  503.      * "Java" letter or digit, that is, the character is 
  504.      * permissible as a non-initial character in an identifier in the 
  505.      * Java language. 
  506.      * <p>
  507.      * A character is considered to be a Java letter or digit if and 
  508.      * only if it is a letter, a digit, the ASCII dollar sign character 
  509.      * <code>'$'</code>, or the underscore character <code>'_'</code>. 
  510.      *
  511.      * @param      ch   the character to be tested.
  512.      * @return     <code>true</code> if the character is a Java letter or digit;
  513.      *             <code>false</code> otherwise.
  514.      * @see        java.lang.Character#isJavaIdentifierPart(char)
  515.      * @see        java.lang.Character#isJavaLetter(char)
  516.      * @see        java.lang.Character#isLetter(char)
  517.      * @see        java.lang.Character#isLetterOrDigit(char)
  518.      * @see        java.lang.Character#isUnicodeIdentifierPart(char)
  519.      * @since      JDK1.0.2
  520.      * @deprecated Replaced by isJavaIdentifierPart(char).
  521.      */
  522.     public static boolean isJavaLetterOrDigit(char ch) {
  523.       return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x00030000) != 0;
  524.     }
  525.  
  526.     /**
  527.      * Determines if the specified character is
  528.      * permissible as the first character in a Java identifier.
  529.      * A character may start a Java identifier if and only if
  530.      * it is one of the following:
  531.      * <ul>
  532.      * <li>  a letter
  533.      * <li>  a currency symbol (such as "$")
  534.      * <li>  a connecting punctuation character (such as "_").
  535.      * </ul>
  536.      *
  537.      * @param   ch    the character to be tested.
  538.      * @return  true if the character may start a Java identifier;
  539.      *          false otherwise.
  540.      * @see     java.lang.Character#isJavaIdentifierPart(char)
  541.      * @see     java.lang.Character#isLetter(char)
  542.      * @see     java.lang.Character#isUnicodeIdentifierStart(char)
  543.      * @since   JDK1.1
  544.      */
  545.     public static boolean isJavaIdentifierStart(char ch) {
  546.       return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x00070000) >= 0x00050000;
  547.     }
  548.  
  549.     /**
  550.      * Determines if the specified character may be part of a Java
  551.      * identifier as other than the first character.
  552.      * A character may be part of a Java identifier if and only if
  553.      * it is one of the following:
  554.      * <ul>
  555.      * <li>  a letter
  556.      * <li>  a currency symbol (such as "$")
  557.      * <li>  a connecting punctuation character (such as "_").
  558.      * <li>  a digit
  559.      * <li>  a numeric letter (such as a Roman numeral character)
  560.      * <li>  a combining mark
  561.      * <li>  a non-spacing mark
  562.      * <li>  an ignorable control character
  563.      * </ul>
  564.      * 
  565.      * @param   ch    the character to be tested.
  566.      * @return  true if the character may be part of a Unicode identifier; 
  567.      *          false otherwise.
  568.      * @see     java.lang.Character#isIdentifierIgnorable(char)
  569.      * @see     java.lang.Character#isJavaIdentifierStart(char)
  570.      * @see     java.lang.Character#isLetterOrDigit(char)
  571.      * @see     java.lang.Character#isUnicodeIdentifierPart(char)
  572.      * @since   JDK1.1
  573.      */
  574.     public static boolean isJavaIdentifierPart(char ch) {
  575.       return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x00030000) != 0;
  576.     }
  577.  
  578.     /**
  579.      * Determines if the specified character is
  580.      * permissible as the first character in a Unicode identifier.
  581.      * A character may start a Unicode identifier if and only if
  582.      * it is a letter.
  583.      *
  584.      * @param   ch    the character to be tested.
  585.      * @return  true if the character may start a Unicode identifier;
  586.      *          false otherwise.
  587.      * @see     java.lang.Character#isJavaIdentifierStart(char)
  588.      * @see     java.lang.Character#isLetter(char)
  589.      * @see     java.lang.Character#isUnicodeIdentifierPart(char)
  590.      * @since   JDK1.1
  591.      */
  592.     public static boolean isUnicodeIdentifierStart(char ch) {
  593.       return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x00070000) == 0x00070000;
  594.     }
  595.  
  596.     /**
  597.      * Determines if the specified character may be part of a Unicode
  598.      * identifier as other than the first character.
  599.      * A character may be part of a Unicode identifier if and only if
  600.      * it is one of the following:
  601.      * <ul>
  602.      * <li>  a letter
  603.      * <li>  a connecting punctuation character (such as "_").
  604.      * <li>  a digit
  605.      * <li>  a numeric letter (such as a Roman numeral character)
  606.      * <li>  a combining mark
  607.      * <li>  a non-spacing mark
  608.      * <li>  an ignorable control character
  609.      * </ul>
  610.      * 
  611.      * @param   ch    the character to be tested.
  612.      * @return  true if the character may be part of a Unicode identifier;
  613.      *          false otherwise.
  614.      * @see     java.lang.Character#isIdentifierIgnorable(char)
  615.      * @see     java.lang.Character#isJavaIdentifierPart(char)
  616.      * @see     java.lang.Character#isLetterOrDigit(char)
  617.      * @see     java.lang.Character#isUnicodeIdentifierStart(char)
  618.      * @since   JDK1.1
  619.      */
  620.     public static boolean isUnicodeIdentifierPart(char ch) {
  621.       return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x00010000) != 0;
  622.     }
  623.  
  624.     /**
  625.      * Determines if the specified character should be regarded as
  626.      * an ignorable character in a Java identifier or a Unicode identifier.
  627.      * The following Unicode characters are ignorable in a Java identifier
  628.      * or a Unicode identifier:
  629.      * <table>
  630.      * <tr><td>0x0000 through 0x0008,</td>
  631.      *                                 <td>ISO control characters that</td></tr>
  632.      * <tr><td>0x000E through 0x001B,</td> <td>are not whitespace</td></tr>
  633.      * <tr><td>and 0x007F through 0x009F</td></tr>
  634.      * <tr><td>0x200C through 0x200F</td>  <td>join controls</td></tr>
  635.      * <tr><td>0x200A through 0x200E</td>  <td>bidirectional controls</td></tr>
  636.      * <tr><td>0x206A through 0x206F</td>  <td>format controls</td></tr>
  637.      * <tr><td>0xFEFF</td>               <td>zero-width no-break space</td></tr>
  638.      * </table>
  639.      * 
  640.      * @param   ch    the character to be tested.
  641.      * @return     true if the character may be part of a Unicode identifier;
  642.      *          false otherwise.
  643.      * @see     java.lang.Character#isJavaIdentifierPart(char)
  644.      * @see     java.lang.Character#isUnicodeIdentifierPart(char)
  645.      * @since   JDK1.1
  646.      */
  647.     public static boolean isIdentifierIgnorable(char ch) {
  648.       return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x00070000) == 0x00010000;
  649.     }
  650.  
  651.     /**
  652.      * The given character is mapped to its lowercase equivalent; if the 
  653.      * character has no lowercase equivalent, the character itself is 
  654.      * returned. 
  655.      * <p>
  656.      * A character has a lowercase equivalent if and only if a lowercase 
  657.      * mapping is specified for the character in the Unicode attribute 
  658.      * table. 
  659.      * <p>
  660.      * Note that some Unicode characters in the range 
  661.      * <code>'\u2000'</code> to <code>'\u2FFF'</code> have lowercase 
  662.      * mappings; this method does map such characters to their lowercase 
  663.      * equivalents even though the method <code>isUpperCase</code> does 
  664.      * not return <code>true</code> for such characters. 
  665.      *
  666.      * @param   ch   the character to be converted.
  667.      * @return  the lowercase equivalent of the character, if any;
  668.      *          otherwise the character itself.
  669.      * @see     java.lang.Character#isLowerCase(char)
  670.      * @see     java.lang.Character#isUpperCase(char)
  671.      * @see     java.lang.Character#toTitleCase(char)
  672.      * @see     java.lang.Character#toUpperCase(char)
  673.      * @since   JDK1.0
  674.      */
  675.     public static char toLowerCase(char ch) {
  676.     int val = A[Y[(X[ch>>6]<<6)|(ch&0x3F)]];
  677.     if ((val & 0x00200000) != 0)
  678.       return (char)(ch + (val >> 22));
  679.     else
  680.       return ch;
  681.     }
  682.  
  683.     /**
  684.      * Converts the character argument to uppercase. A character has an 
  685.      * uppercase equivalent if and only if an uppercase mapping is 
  686.      * specified for the character in the Unicode attribute table. 
  687.      * <p>
  688.      * Note that some Unicode characters in the range 
  689.      * <code>'\u2000'</code> to <code>'\u2000FFF'</code> have uppercase 
  690.      * mappings; this method does map such characters to their titlecase 
  691.      * equivalents even though the method <code>isLowerCase</code> does 
  692.      * not return <code>true</code> for such characters. 
  693.      *
  694.      * @param   ch   the character to be converted.
  695.      * @return  the uppercase equivalent of the character, if any;
  696.      *          otherwise the character itself.
  697.      * @see     java.lang.Character#isLowerCase(char)
  698.      * @see     java.lang.Character#isUpperCase(char)
  699.      * @see     java.lang.Character#toLowerCase(char)
  700.      * @see     java.lang.Character#toTitleCase(char)
  701.      * @since   JDK1.0
  702.      */
  703.     public static char toUpperCase(char ch) {
  704.     int val = A[Y[(X[ch>>6]<<6)|(ch&0x3F)]];
  705.     if ((val & 0x00100000) != 0)
  706.       return (char)(ch - (val >> 22));
  707.     else
  708.       return ch;
  709.     }
  710.  
  711.     /**
  712.      * Converts the character argument to titlecase. A character has a 
  713.      * titlecase equivalent if and only if a titlecase mapping is 
  714.      * specified for the character in the Unicode attribute table. 
  715.      * <p>
  716.      * Note that some Unicode characters in the range 
  717.      * <code>'\u2000'</code> through <code>'\u2FFF'</code> have titlecase 
  718.      * mappings; this method does map such characters to their titlecase 
  719.      * equivalents even though the method <code>isTitleCase</code> does 
  720.      * not return <code>true</code> for such characters.
  721.      * <p>
  722.      * There are only four Unicode characters that are truly titlecase forms
  723.      * that are distinct from uppercase forms.  As a rule, if a character has no
  724.      * true titlecase equivalent but does have an uppercase mapping, then the
  725.      * Unicode 2.0 attribute table specifies a titlecase mapping that is the
  726.      * same as the uppercase mapping.
  727.      *
  728.      * @param   ch   the character to be converted.
  729.      * @return  the titlecase equivalent of the character, if any;
  730.      *          otherwise the character itself.
  731.      * @see     java.lang.Character#isTitleCase(char)
  732.      * @see     java.lang.Character#toLowerCase(char)
  733.      * @see     java.lang.Character#toUpperCase(char)
  734.      * @since   JDK1.0.2
  735.      */
  736.     public static char toTitleCase(char ch) {
  737.     int val = A[Y[(X[ch>>6]<<6)|(ch&0x3F)]];
  738.     if ((val & 0x00080000) != 0) {
  739.       // There is a titlecase equivalent.  Perform further checks:
  740.       if ((val & 0x00100000) == 0) {
  741.         // The character does not have an uppercase equivalent, so it must
  742.         // already be uppercase; so add 1 to get the titlecase form.
  743.         return (char)(ch + 1);
  744.       }
  745.       else if ((val & 0x00200000) == 0) {
  746.         // The character does not have a lowercase equivalent, so it must
  747.         // already be lowercase; so subtract 1 to get the titlecase form.
  748.         return (char)(ch - 1);
  749.       }
  750.       else {
  751.         // The character has both an uppercase equivalent and a lowercase
  752.         // equivalent, so it must itself be a titlecase form; return it.
  753.         return ch;
  754.       }
  755.     }
  756.     else if ((val & 0x00100000) != 0) {
  757.       // This character has no titlecase equivalent but it does have an
  758.       // uppercase equivalent, so use that (subtract the signed case offset).
  759.       return (char)(ch - (val >> 22));
  760.     }
  761.     else
  762.       return ch;
  763.     }
  764.  
  765.     /**
  766.      * Returns the numeric value of the character <code>ch</code> in the 
  767.      * specified radix. 
  768.      * <p>
  769.      * If the radix is not in the range <code>MIN_RADIX</code> <= 
  770.      * <code>radix</code> <= <code>MAX_RADIX</code> or if the 
  771.      * value of <code>ch</code> is not a valid digit in the specified 
  772.      * radix, <code>-1</code> is returned. A character is a valid digit 
  773.      * if at least one of the following is true:
  774.      * <ul>
  775.      * <li>The method <code>isDigit</code> is true of the character 
  776.      *     and the Unicode decimal digit value of the character (or its 
  777.      *     single-character decomposition) is less than the specified radix. 
  778.      *     In this case the decimal digit value is returned. 
  779.      * <li>The character is one of the uppercase Latin letters 
  780.      *     <code>'A'</code> through <code>'Z'</code> and its code is less than
  781.      *     <code>radix + 'A' - 10</code>. 
  782.      *     In this case, <code>ch - 'A' + 10</code> 
  783.      *     is returned. 
  784.      * <li>The character is one of the lowercase Latin letters 
  785.      *     <code>'a'</code> through <code>'z'</code> and its code is less than
  786.      *     <code>radix + 'a' - 10</code>. 
  787.      *     In this case, <code>ch - 'a' + 10</code> 
  788.      *     is returned. 
  789.      * </ul>
  790.      *
  791.      * @param   ch      the character to be converted.
  792.      * @param   radix   the radix.
  793.      * @return  the numeric value represented by the character in the
  794.      *          specified radix.
  795.      * @see     java.lang.Character#forDigit(int, int)
  796.      * @see     java.lang.Character#isDigit(char)
  797.      * @since   JDK1.0
  798.      */
  799.     public static int digit(char ch, int radix) {
  800.         int value = -1;
  801.     if (radix >= Character.MIN_RADIX && radix <= Character.MAX_RADIX) {
  802.       int val = A[Y[(X[ch>>6]<<6)|(ch&0x3F)]];
  803.       int kind = val & 0x1F;
  804.       if (kind == DECIMAL_DIGIT_NUMBER) {
  805.         value = ((ch + (val >> 9)) & 0x1F);
  806.       }
  807.       else if ((val & 0x0000C000) == 0x0000C000) {
  808.         // Java supradecimal digit
  809.         value = ((ch + (val >> 9)) & 0x1F) + 10;
  810.       }
  811.     }
  812.     return (value < radix) ? value : -1;
  813.     }
  814.  
  815.     /**
  816.      * Returns the Unicode numeric value of the character as a
  817.      * nonnegative integer.
  818.      * If the character does not have a numeric value, then -1 is returned.
  819.      * If the character has a numeric value that cannot be represented as a
  820.      * nonnegative integer (for example, a fractional value), then -2
  821.      * is returned.
  822.      *
  823.      * @param   ch    the character to be converted.
  824.      * @param   radix     the radix.
  825.      * @return  the numeric value of the character, as a nonnegative int value;
  826.      *          -2 if the character has a numeric value that is not a
  827.      *          nonnegative integer; -1 if the character has no numeric value.
  828.      * @see     java.lang.Character#forDigit(char)
  829.      * @see     java.lang.Character#isDigit(char)
  830.      * @since   JDK1.1
  831.      */
  832.     public static int getNumericValue(char ch) {
  833.     int val = A[Y[(X[ch>>6]<<6)|(ch&0x3F)]];
  834.     switch ((val >> 14) & 0x3) {
  835.     default: // cannot occur
  836.     case (0x00000000 >> 14):        // not numeric
  837.         return -1;
  838.     case (0x00004000 >> 14):        // simple numeric
  839.         return (ch + (val >> 9)) & 0x1F;
  840.     case (0x00008000 >> 14)    :    // "strange" numeric
  841.         switch (ch) {
  842.         case '\u0BF1': return 100;        // TAMIL NUMBER ONE HUNDRED
  843.         case '\u0BF2': return 1000;        // TAMIL NUMBER ONE THOUSAND
  844.         case '\u216C': return 50;        // ROMAN NUMERAL FIFTY
  845.         case '\u216D': return 100;        // ROMAN NUMERAL ONE HUNDRED
  846.         case '\u216E': return 500;        // ROMAN NUMERAL FIVE HUNDRED
  847.         case '\u216F': return 1000;        // ROMAN NUMERAL ONE THOUSAND
  848.         case '\u217C': return 50;        // SMALL ROMAN NUMERAL FIFTY
  849.         case '\u217D': return 100;        // SMALL ROMAN NUMERAL ONE HUNDRED
  850.         case '\u217E': return 500;        // SMALL ROMAN NUMERAL FIVE HUNDRED
  851.         case '\u217F': return 1000;        // SMALL ROMAN NUMERAL ONE THOUSAND
  852.         case '\u2180': return 1000;        // ROMAN NUMERAL ONE THOUSAND C D
  853.         case '\u2181': return 5000;        // ROMAN NUMERAL FIVE THOUSAND
  854.         case '\u2182': return 10000;    // ROMAN NUMERAL TEN THOUSAND
  855.         default:       return -2;
  856.         }
  857.     case (0x0000C000 >> 14):        // Java supradecimal
  858.         return ((ch + (val >> 9)) & 0x1F) + 10;
  859.     }
  860.     }
  861.  
  862.     /**
  863.      * Determines if the specified character is ISO-LATIN-1 white space. 
  864.      * This method returns <code>true</code> for the following five 
  865.      * characters only: 
  866.      * <table><code>
  867.      * <tr><td>'\t'</td>  <td>\u0009</td>  <td>HORIZONTAL TABULATION</td></tr>
  868.      * <tr><td>'\n'</td>  <td>\u000A</td>  <td>NEW LINE</td></tr>
  869.      * <tr><td>'\f'</td>  <td>\u000C</td>  <td>FORM FEED</td></tr>
  870.      * <tr><td>'\r'</td>  <td>\u000D</td>  <td>CARRIAGE RETURN</td></tr>
  871.      * <tr><td>'  '</td>
  872.      *                    <td>\u0020</td>  <td>SPACE</td></tr>
  873.      * </code></table>
  874.      *
  875.      * @param      ch   the character to be tested.
  876.      * @return     <code>true</code> if the character is ISO-LATIN-1 white
  877.      *             space; <code>false</code> otherwise.
  878.      * @see        java.lang.Character#isSpaceChar(char)
  879.      * @see        java.lang.Character#isWhitespace(char)
  880.      * @since      JDK1.0
  881.      * @deprecated Replaced by isWhitespace(char).
  882.      */
  883.     public static boolean isSpace(char ch) {
  884.       return (ch <= 0x0020) &&
  885.          (((((1L << 0x0009) |
  886.          (1L << 0x000A) |
  887.          (1L << 0x000C) |
  888.          (1L << 0x000D) |
  889.          (1L << 0x0020)) >> ch) & 1L) != 0);
  890.     }
  891.  
  892.     /**
  893.      * Determines if the specified character is a Unicode space character.
  894.      * A character is considered to be a space character if and only if
  895.      * it is specified to be a space character by the Unicode 2.0 standard
  896.      * (category "Zs", "Zl, or "Zp" in the Unicode specification data file).
  897.      * 
  898.      * @param   ch    the character to be tested.
  899.      * @return     true if the character is a space character; false otherwise.
  900.      * @see     java.lang.Character#isWhitespace(char)
  901.      * @since   JDK1.1
  902.      */
  903.     public static boolean isSpaceChar(char ch) {
  904.     return (((((1 << SPACE_SEPARATOR) |
  905.            (1 << LINE_SEPARATOR) |
  906.            (1 << PARAGRAPH_SEPARATOR))
  907.           >> (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x1F)) & 1) != 0);
  908.     }
  909.  
  910.     /**
  911.      * Determines if the specified character is white space according to Java.
  912.      * A character is considered to be a Java whitespace character if and only
  913.      * if it satisfies one of the following criteria:
  914.      * <ul>
  915.      * <li> It is a Unicode space separator (category "Zs"), but is not
  916.      *      a no-break space (\u00A0 or \uFEFF).
  917.      * <li> It is a Unicode line separator (category "Zl").
  918.      * <li> It is a Unicode paragraph separator (category "Zp").
  919.      * <li> It is \u0009, HORIZONTAL TABULATION.
  920.      * <li> It is \u000A, LINE FEED.
  921.      * <li> It is \u000B, VERTICAL TABULATION.
  922.      * <li> It is \u000C, FORM FEED.
  923.      * <li> It is \u000D, CARRIAGE RETURN.
  924.      * <li> It is \u001C, FILE SEPARATOR.
  925.      * <li> It is \u001D, GROUP SEPARATOR.
  926.      * <li> It is \u001E, RECORD SEPARATOR.
  927.      * <li> It is \u001F, UNIT SEPARATOR.
  928.      * </ul>
  929.      *
  930.      * @param   ch    the character to be tested.
  931.      * @return  true if the character is a Java whitespace character;
  932.      *          false otherwise.
  933.      * @see     java.lang.Character#isSpaceChar(char)
  934.      * @since   JDK1.1
  935.      */
  936.     public static boolean isWhitespace(char ch) {
  937.       return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x00070000) == 0x00040000;
  938.     }
  939.  
  940.     /**
  941.      * Determines if the specified character is an ISO control character.
  942.      * A character is considered to be an ISO control character if its
  943.      * code is in the range \u0000 through \u001F or in the range
  944.      * \u007F through \u009F.
  945.      *
  946.      * @param   ch    the character to be tested.
  947.      * @return  true if the character is an ISO control character;
  948.      *          false otherwise.
  949.      *
  950.      * @see     java.lang.Character#isSpaceChar(char)
  951.      * @see     java.lang.Character#isWhitespace(char)
  952.      * @since   JDK1.1
  953.      */
  954.     public static boolean isISOControl(char ch) {
  955.       return (ch <= 0x009F) && ((ch <= 0x001F) || (ch >= 0x007F));
  956.     }
  957.  
  958.     /**
  959.      * Returns a value indicating a character category.
  960.      *
  961.      * @param   ch      the character to be tested.
  962.      * @return  a value of type int, the character category.
  963.      * @see     java.lang.Character#COMBINING_SPACING_MARK
  964.      * @see     java.lang.Character#CONNECTOR_PUNCTUATION
  965.      * @see     java.lang.Character#CONTROL
  966.      * @see     java.lang.Character#CURRENCY_SYMBOL
  967.      * @see     java.lang.Character#DASH_PUNCTUATION
  968.      * @see     java.lang.Character#DECIMAL_DIGIT_NUMBER
  969.      * @see     java.lang.Character#ENCLOSING_MARK
  970.      * @see     java.lang.Character#END_PUNCTUATION
  971.      * @see     java.lang.Character#FORMAT
  972.      * @see     java.lang.Character#LETTER_NUMBER
  973.      * @see     java.lang.Character#LINE_SEPARATOR
  974.      * @see     java.lang.Character#LOWERCASE_LETTER
  975.      * @see     java.lang.Character#MATH_SYMBOL
  976.      * @see     java.lang.Character#MODIFIER_LETTER
  977.      * @see     java.lang.Character#MODIFIER_SYMBOL
  978.      * @see     java.lang.Character#NON_SPACING_MARK
  979.      * @see     java.lang.Character#OTHER_LETTER
  980.      * @see     java.lang.Character#OTHER_NUMBER
  981.      * @see     java.lang.Character#OTHER_PUNCTUATION
  982.      * @see     java.lang.Character#OTHER_SYMBOL
  983.      * @see     java.lang.Character#PARAGRAPH_SEPARATOR
  984.      * @see     java.lang.Character#PRIVATE_USE
  985.      * @see     java.lang.Character#SPACE_SEPARATOR
  986.      * @see     java.lang.Character#START_PUNCTUATION
  987.      * @see     java.lang.Character#SURROGATE
  988.      * @see     java.lang.Character#TITLECASE_LETTER
  989.      * @see     java.lang.Character#UNASSIGNED
  990.      * @see     java.lang.Character#UPPERCASE_LETTER
  991.      * @since   JDK1.1
  992.      */
  993.     public static int getType(char ch) {
  994.         return A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x1F;
  995.     }
  996.  
  997.     /**
  998.      * Determines the character representation for a specific digit in 
  999.      * the specified radix. If the value of <code>radix</code> is not a 
  1000.      * valid radix, or the value of <code>digit</code> is not a valid 
  1001.      * digit in the specified radix, the null character 
  1002.      * (<code>'\u0000'</code>) is returned. 
  1003.      * <p>
  1004.      * The <code>radix</code> argument is valid if it is greater than or 
  1005.      * equal to <code>MIN_RADIX</code> and less than or equal to 
  1006.      * <code>MAX_RADIX</code>. The <code>digit</code> argument is valid if
  1007.      * <code>0 <= digit <= radix</code>. 
  1008.      * <p>
  1009.      * If the digit is less than 10, then 
  1010.      * <code>'0' + digit</code> is returned. Otherwise, the value 
  1011.      * <code>'a' + digit - 10</code> is returned. 
  1012.      *
  1013.      * @param   digit   the number to convert to a character.
  1014.      * @param   radix   the radix.
  1015.      * @return  the <code>char</code> representation of the specified digit
  1016.      *          in the specified radix. 
  1017.      * @see     java.lang.Character#MIN_RADIX
  1018.      * @see     java.lang.Character#MAX_RADIX
  1019.      * @see     java.lang.Character#digit(char, int)
  1020.      * @since   JDK1.0
  1021.      */
  1022.     public static char forDigit(int digit, int radix) {
  1023.     if ((digit >= radix) || (digit < 0)) {
  1024.         return '\0';
  1025.     }
  1026.     if ((radix < MIN_RADIX) || (radix > MAX_RADIX)) {
  1027.         return '\0';
  1028.     }
  1029.     if (digit < 10) {
  1030.         return (char)('0' + digit);
  1031.     } 
  1032.     return (char)('a' - 10 + digit);
  1033.     }
  1034.  
  1035.     /* The character properties are currently encoded into 32 bits in the following manner:
  1036.        10 bits    signed offset used for converting case
  1037.     1 bit    if 1, adding the signed offset converts the character to lowercase
  1038.     1 bit    if 1, subtracting the signed offset converts the character to uppercase
  1039.     1 bit   if 1, this character has a titlecase equivalent (possibly itself)
  1040.     3 bits    0  may not be part of an identifier
  1041.         1  ignorable control; may continue a Unicode identifier or Java identifier
  1042.         2  may continue a Java identifier but not a Unicode identifier (unused)
  1043.         3  may continue a Unicode identifier or Java identifier
  1044.         4  is a Java whitespace character
  1045.         5  may start or continue a Java identifier;
  1046.            may continue but not start a Unicode identifier (underscores)
  1047.         6  may start or continue a Java identifier but not a Unicode identifier ($)
  1048.         7  may start or continue a Unicode identifier or Java identifier
  1049.         Thus:
  1050.            5, 6, 7 may start a Java identifier
  1051.            1, 2, 3, 5, 6, 7 may continue a Java identifier
  1052.            7 may start a Unicode identifier
  1053.            1, 3, 5, 7 may continue a Unicode identifier
  1054.            1 is ignorable within an identifier
  1055.            4 is Java whitespace
  1056.     2 bits    0  this character has no numeric property
  1057.         1  adding the digit offset to the character code and then
  1058.            masking with 0x1F will produce the desired numeric value
  1059.         2  this character has a "strange" numeric value
  1060.         3  a Java supradecimal digit: adding the digit offset to the
  1061.            character code, then masking with 0x1F, then adding 10
  1062.            will produce the desired numeric value
  1063.     5 bits  digit offset
  1064.     4 bits    reserved for future use
  1065.     5 bits    character type
  1066.      */
  1067.  
  1068.     // The X table has 1024 entries for a total of 1024 bytes.
  1069.  
  1070.   private static final byte X[] = {
  1071.       0,   1,   2,   3,   4,   5,   6,   7,  // 0x0000
  1072.       8,   9,  10,  11,  12,  13,  14,  15,  // 0x0200
  1073.      16,  17,  18,  19,  20,  21,  22,  23,  // 0x0400
  1074.      24,  25,  26,  27,  28,  28,  28,  28,  // 0x0600
  1075.      28,  28,  28,  28,  29,  30,  31,  32,  // 0x0800
  1076.      33,  34,  35,  36,  37,  38,  39,  40,  // 0x0A00
  1077.      41,  42,  43,  44,  45,  46,  28,  28,  // 0x0C00
  1078.      47,  48,  49,  50,  51,  52,  53,  28,  // 0x0E00
  1079.      28,  28,  54,  55,  56,  57,  58,  59,  // 0x1000
  1080.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x1200
  1081.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x1400
  1082.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x1600
  1083.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x1800
  1084.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x1A00
  1085.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x1C00
  1086.      60,  60,  61,  62,  63,  64,  65,  66,  // 0x1E00
  1087.      67,  68,  69,  70,  71,  72,  73,  74,  // 0x2000
  1088.      75,  75,  75,  76,  77,  78,  28,  28,  // 0x2200
  1089.      79,  80,  81,  82,  83,  83,  84,  85,  // 0x2400
  1090.      86,  85,  28,  28,  87,  88,  89,  28,  // 0x2600
  1091.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x2800
  1092.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x2A00
  1093.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x2C00
  1094.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x2E00
  1095.      90,  91,  92,  93,  94,  56,  95,  28,  // 0x3000
  1096.      96,  97,  98,  99,  83, 100,  83, 101,  // 0x3200
  1097.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x3400
  1098.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x3600
  1099.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x3800
  1100.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x3A00
  1101.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x3C00
  1102.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x3E00
  1103.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x4000
  1104.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x4200
  1105.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x4400
  1106.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x4600
  1107.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x4800
  1108.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x4A00
  1109.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x4C00
  1110.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x4E00
  1111.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x5000
  1112.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x5200
  1113.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x5400
  1114.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x5600
  1115.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x5800
  1116.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x5A00
  1117.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x5C00
  1118.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x5E00
  1119.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x6000
  1120.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x6200
  1121.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x6400
  1122.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x6600
  1123.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x6800
  1124.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x6A00
  1125.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x6C00
  1126.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x6E00
  1127.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x7000
  1128.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x7200
  1129.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x7400
  1130.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x7600
  1131.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x7800
  1132.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x7A00
  1133.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x7C00
  1134.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x7E00
  1135.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x8000
  1136.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x8200
  1137.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x8400
  1138.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x8600
  1139.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x8800
  1140.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x8A00
  1141.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x8C00
  1142.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x8E00
  1143.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x9000
  1144.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x9200
  1145.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x9400
  1146.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x9600
  1147.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x9800
  1148.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x9A00
  1149.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x9C00
  1150.      56,  56,  56,  56,  56,  56, 102,  28,  // 0x9E00
  1151.      28,  28,  28,  28,  28,  28,  28,  28,  // 0xA000
  1152.      28,  28,  28,  28,  28,  28,  28,  28,  // 0xA200
  1153.      28,  28,  28,  28,  28,  28,  28,  28,  // 0xA400
  1154.      28,  28,  28,  28,  28,  28,  28,  28,  // 0xA600
  1155.      28,  28,  28,  28,  28,  28,  28,  28,  // 0xA800
  1156.      28,  28,  28,  28,  28,  28,  28,  28,  // 0xAA00
  1157.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xAC00
  1158.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xAE00
  1159.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xB000
  1160.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xB200
  1161.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xB400
  1162.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xB600
  1163.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xB800
  1164.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xBA00
  1165.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xBC00
  1166.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xBE00
  1167.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xC000
  1168.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xC200
  1169.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xC400
  1170.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xC600
  1171.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xC800
  1172.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xCA00
  1173.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xCC00
  1174.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xCE00
  1175.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xD000
  1176.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xD200
  1177.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xD400
  1178.      56,  56,  56,  56,  56,  56, 103,  28,  // 0xD600
  1179.     104, 104, 104, 104, 104, 104, 104, 104,  // 0xD800
  1180.     104, 104, 104, 104, 104, 104, 104, 104,  // 0xDA00
  1181.     104, 104, 104, 104, 104, 104, 104, 104,  // 0xDC00
  1182.     104, 104, 104, 104, 104, 104, 104, 104,  // 0xDE00
  1183.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xE000
  1184.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xE200
  1185.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xE400
  1186.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xE600
  1187.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xE800
  1188.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xEA00
  1189.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xEC00
  1190.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xEE00
  1191.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xF000
  1192.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xF200
  1193.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xF400
  1194.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xF600
  1195.     105, 105, 105, 105,  56,  56,  56,  56,  // 0xF800
  1196.     106,  28,  28,  28, 107, 108, 109, 110,  // 0xFA00
  1197.      56,  56,  56,  56, 111, 112, 113, 114,  // 0xFC00
  1198.     115, 116,  56, 117, 118, 119, 120, 121   // 0xFE00
  1199.   };
  1200.  
  1201.   // The Y table has 7808 entries for a total of 7808 bytes.
  1202.  
  1203.   private static final byte Y[] = {
  1204.       0,   0,   0,   0,   0,   0,   0,   0,  //   0
  1205.       0,   1,   1,   1,   1,   1,   0,   0,  //   0
  1206.       0,   0,   0,   0,   0,   0,   0,   0,  //   0
  1207.       0,   0,   0,   0,   1,   1,   1,   1,  //   0
  1208.       2,   3,   3,   3,   4,   3,   3,   3,  //   0
  1209.       5,   6,   3,   7,   3,   8,   3,   3,  //   0
  1210.       9,   9,   9,   9,   9,   9,   9,   9,  //   0
  1211.       9,   9,   3,   3,   7,   7,   7,   3,  //   0
  1212.       3,  10,  10,  10,  10,  10,  10,  10,  //   1
  1213.      10,  10,  10,  10,  10,  10,  10,  10,  //   1
  1214.      10,  10,  10,  10,  10,  10,  10,  10,  //   1
  1215.      10,  10,  10,   5,   3,   6,  11,  12,  //   1
  1216.      11,  13,  13,  13,  13,  13,  13,  13,  //   1
  1217.      13,  13,  13,  13,  13,  13,  13,  13,  //   1
  1218.      13,  13,  13,  13,  13,  13,  13,  13,  //   1
  1219.      13,  13,  13,   5,   7,   6,   7,   0,  //   1
  1220.       0,   0,   0,   0,   0,   0,   0,   0,  //   2
  1221.       0,   0,   0,   0,   0,   0,   0,   0,  //   2
  1222.       0,   0,   0,   0,   0,   0,   0,   0,  //   2
  1223.       0,   0,   0,   0,   0,   0,   0,   0,  //   2
  1224.      14,   3,   4,   4,   4,   4,  15,  15,  //   2
  1225.      11,  15,  16,   5,   7,   8,  15,  11,  //   2
  1226.      15,   7,  17,  17,  11,  16,  15,   3,  //   2
  1227.      11,  18,  16,   6,  19,  19,  19,   3,  //   2
  1228.      20,  20,  20,  20,  20,  20,  20,  20,  //   3
  1229.      20,  20,  20,  20,  20,  20,  20,  20,  //   3
  1230.      20,  20,  20,  20,  20,  20,  20,   7,  //   3
  1231.      20,  20,  20,  20,  20,  20,  20,  16,  //   3
  1232.      21,  21,  21,  21,  21,  21,  21,  21,  //   3
  1233.      21,  21,  21,  21,  21,  21,  21,  21,  //   3
  1234.      21,  21,  21,  21,  21,  21,  21,   7,  //   3
  1235.      21,  21,  21,  21,  21,  21,  21,  22,  //   3
  1236.      23,  24,  23,  24,  23,  24,  23,  24,  //   4
  1237.      23,  24,  23,  24,  23,  24,  23,  24,  //   4
  1238.      23,  24,  23,  24,  23,  24,  23,  24,  //   4
  1239.      23,  24,  23,  24,  23,  24,  23,  24,  //   4
  1240.      23,  24,  23,  24,  23,  24,  23,  24,  //   4
  1241.      23,  24,  23,  24,  23,  24,  23,  24,  //   4
  1242.      25,  26,  23,  24,  23,  24,  23,  24,  //   4
  1243.      16,  23,  24,  23,  24,  23,  24,  23,  //   4
  1244.      24,  23,  24,  23,  24,  23,  24,  23,  //   5
  1245.      24,  16,  23,  24,  23,  24,  23,  24,  //   5
  1246.      23,  24,  23,  24,  23,  24,  23,  24,  //   5
  1247.      23,  24,  23,  24,  23,  24,  23,  24,  //   5
  1248.      23,  24,  23,  24,  23,  24,  23,  24,  //   5
  1249.      23,  24,  23,  24,  23,  24,  23,  24,  //   5
  1250.      23,  24,  23,  24,  23,  24,  23,  24,  //   5
  1251.      27,  23,  24,  23,  24,  23,  24,  28,  //   5
  1252.      16,  29,  23,  24,  23,  24,  30,  23,  //   6
  1253.      24,  31,  31,  23,  24,  16,  32,  32,  //   6
  1254.      33,  23,  24,  31,  34,  16,  35,  36,  //   6
  1255.      23,  24,  16,  16,  35,  37,  16,  38,  //   6
  1256.      23,  24,  23,  24,  23,  24,  38,  23,  //   6
  1257.      24,  39,  40,  16,  23,  24,  39,  23,  //   6
  1258.      24,  41,  41,  23,  24,  23,  24,  42,  //   6
  1259.      23,  24,  16,  40,  23,  24,  40,  40,  //   6
  1260.      40,  40,  40,  40,  43,  44,  45,  43,  //   7
  1261.      44,  45,  43,  44,  45,  23,  24,  23,  //   7
  1262.      24,  23,  24,  23,  24,  23,  24,  23,  //   7
  1263.      24,  23,  24,  23,  24,  16,  23,  24,  //   7
  1264.      23,  24,  23,  24,  23,  24,  23,  24,  //   7
  1265.      23,  24,  23,  24,  23,  24,  23,  24,  //   7
  1266.      16,  43,  44,  45,  23,  24,  46,  46,  //   7
  1267.      46,  46,  23,  24,  23,  24,  23,  24,  //   7
  1268.      23,  24,  23,  24,  23,  24,  23,  24,  //   8
  1269.      23,  24,  23,  24,  23,  24,  23,  24,  //   8
  1270.      23,  24,  23,  24,  23,  24,  23,  24,  //   8
  1271.      46,  46,  46,  46,  46,  46,  46,  46,  //   8
  1272.      46,  46,  46,  46,  46,  46,  46,  46,  //   8
  1273.      46,  46,  46,  46,  46,  46,  46,  46,  //   8
  1274.      46,  46,  46,  46,  46,  46,  46,  46,  //   8
  1275.      46,  46,  46,  46,  46,  46,  46,  46,  //   8
  1276.      46,  46,  46,  46,  46,  46,  46,  46,  //   9
  1277.      46,  46,  46,  46,  46,  46,  46,  46,  //   9
  1278.      16,  16,  16,  47,  48,  16,  49,  49,  //   9
  1279.      50,  50,  16,  51,  16,  16,  16,  16,  //   9
  1280.      49,  16,  16,  52,  16,  16,  16,  16,  //   9
  1281.      53,  54,  16,  16,  16,  16,  16,  54,  //   9
  1282.      16,  16,  55,  16,  16,  16,  16,  16,  //   9
  1283.      16,  16,  16,  16,  16,  16,  16,  16,  //   9
  1284.      16,  16,  16,  56,  16,  16,  16,  16,  //  10
  1285.      56,  16,  57,  57,  16,  16,  16,  16,  //  10
  1286.      16,  16,  58,  16,  16,  16,  16,  16,  //  10
  1287.      16,  16,  16,  16,  16,  16,  16,  16,  //  10
  1288.      16,  16,  16,  16,  16,  16,  16,  16,  //  10
  1289.      16,  46,  46,  46,  46,  46,  46,  46,  //  10
  1290.      59,  59,  59,  59,  59,  59,  59,  59,  //  10
  1291.      59,  11,  11,  59,  59,  59,  59,  59,  //  10
  1292.      59,  59,  11,  11,  11,  11,  11,  11,  //  11
  1293.      11,  11,  11,  11,  11,  11,  11,  11,  //  11
  1294.      59,  59,  11,  11,  11,  11,  11,  11,  //  11
  1295.      11,  11,  11,  11,  11,  11,  11,  46,  //  11
  1296.      59,  59,  59,  59,  59,  11,  11,  11,  //  11
  1297.      11,  11,  46,  46,  46,  46,  46,  46,  //  11
  1298.      46,  46,  46,  46,  46,  46,  46,  46,  //  11
  1299.      46,  46,  46,  46,  46,  46,  46,  46,  //  11
  1300.      60,  60,  60,  60,  60,  60,  60,  60,  //  12
  1301.      60,  60,  60,  60,  60,  60,  60,  60,  //  12
  1302.      60,  60,  60,  60,  60,  60,  60,  60,  //  12
  1303.      60,  60,  60,  60,  60,  60,  60,  60,  //  12
  1304.      60,  60,  60,  60,  60,  60,  60,  60,  //  12
  1305.      60,  60,  60,  60,  60,  60,  60,  60,  //  12
  1306.      60,  60,  60,  60,  60,  60,  60,  60,  //  12
  1307.      60,  60,  60,  60,  60,  60,  60,  60,  //  12
  1308.      60,  60,  60,  60,  60,  60,  46,  46,  //  13
  1309.      46,  46,  46,  46,  46,  46,  46,  46,  //  13
  1310.      46,  46,  46,  46,  46,  46,  46,  46,  //  13
  1311.      46,  46,  46,  46,  46,  46,  46,  46,  //  13
  1312.      60,  60,  46,  46,  46,  46,  46,  46,  //  13
  1313.      46,  46,  46,  46,  46,  46,  46,  46,  //  13
  1314.      46,  46,  46,  46,   3,   3,  46,  46,  //  13
  1315.      46,  46,  59,  46,  46,  46,   3,  46,  //  13
  1316.      46,  46,  46,  46,  11,  11,  61,   3,  //  14
  1317.      62,  62,  62,  46,  63,  46,  64,  64,  //  14
  1318.      16,  20,  20,  20,  20,  20,  20,  20,  //  14
  1319.      20,  20,  20,  20,  20,  20,  20,  20,  //  14
  1320.      20,  20,  46,  20,  20,  20,  20,  20,  //  14
  1321.      20,  20,  20,  20,  65,  66,  66,  66,  //  14
  1322.      16,  21,  21,  21,  21,  21,  21,  21,  //  14
  1323.      21,  21,  21,  21,  21,  21,  21,  21,  //  14
  1324.      21,  21,  16,  21,  21,  21,  21,  21,  //  15
  1325.      21,  21,  21,  21,  67,  68,  68,  46,  //  15
  1326.      69,  70,  38,  38,  38,  71,  72,  46,  //  15
  1327.      46,  46,  38,  46,  38,  46,  38,  46,  //  15
  1328.      38,  46,  23,  24,  23,  24,  23,  24,  //  15
  1329.      23,  24,  23,  24,  23,  24,  23,  24,  //  15
  1330.      73,  74,  16,  40,  46,  46,  46,  46,  //  15
  1331.      46,  46,  46,  46,  46,  46,  46,  46,  //  15
  1332.      46,  75,  75,  75,  75,  75,  75,  75,  //  16
  1333.      75,  75,  75,  75,  75,  46,  75,  75,  //  16
  1334.      20,  20,  20,  20,  20,  20,  20,  20,  //  16
  1335.      20,  20,  20,  20,  20,  20,  20,  20,  //  16
  1336.      20,  20,  20,  20,  20,  20,  20,  20,  //  16
  1337.      20,  20,  20,  20,  20,  20,  20,  20,  //  16
  1338.      21,  21,  21,  21,  21,  21,  21,  21,  //  16
  1339.      21,  21,  21,  21,  21,  21,  21,  21,  //  16
  1340.      21,  21,  21,  21,  21,  21,  21,  21,  //  17
  1341.      21,  21,  21,  21,  21,  21,  21,  21,  //  17
  1342.      46,  74,  74,  74,  74,  74,  74,  74,  //  17
  1343.      74,  74,  74,  74,  74,  46,  74,  74,  //  17
  1344.      23,  24,  23,  24,  23,  24,  23,  24,  //  17
  1345.      23,  24,  23,  24,  23,  24,  23,  24,  //  17
  1346.      23,  24,  23,  24,  23,  24,  23,  24,  //  17
  1347.      23,  24,  23,  24,  23,  24,  23,  24,  //  17
  1348.      23,  24,  15,  60,  60,  60,  60,  46,  //  18
  1349.      46,  46,  46,  46,  46,  46,  46,  46,  //  18
  1350.      23,  24,  23,  24,  23,  24,  23,  24,  //  18
  1351.      23,  24,  23,  24,  23,  24,  23,  24,  //  18
  1352.      23,  24,  23,  24,  23,  24,  23,  24,  //  18
  1353.      23,  24,  23,  24,  23,  24,  23,  24,  //  18
  1354.      23,  24,  23,  24,  23,  24,  23,  24,  //  18
  1355.      23,  24,  23,  24,  23,  24,  23,  24,  //  18
  1356.      40,  23,  24,  23,  24,  46,  46,  23,  //  19
  1357.      24,  46,  46,  23,  24,  46,  46,  46,  //  19
  1358.      23,  24,  23,  24,  23,  24,  23,  24,  //  19
  1359.      23,  24,  23,  24,  23,  24,  23,  24,  //  19
  1360.      23,  24,  23,  24,  23,  24,  23,  24,  //  19
  1361.      23,  24,  23,  24,  46,  46,  23,  24,  //  19
  1362.      23,  24,  23,  24,  23,  24,  46,  46,  //  19
  1363.      23,  24,  46,  46,  46,  46,  46,  46,  //  19
  1364.      46,  46,  46,  46,  46,  46,  46,  46,  //  20
  1365.      46,  46,  46,  46,  46,  46,  46,  46,  //  20
  1366.      46,  46,  46,  46,  46,  46,  46,  46,  //  20
  1367.      46,  46,  46,  46,  46,  46,  46,  46,  //  20
  1368.      46,  46,  46,  46,  46,  46,  46,  46,  //  20
  1369.      46,  46,  46,  46,  46,  46,  46,  46,  //  20
  1370.      46,  76,  76,  76,  76,  76,  76,  76,  //  20
  1371.      76,  76,  76,  76,  76,  76,  76,  76,  //  20
  1372.      76,  76,  76,  76,  76,  76,  76,  76,  //  21
  1373.      76,  76,  76,  76,  76,  76,  76,  76,  //  21
  1374.      76,  76,  76,  76,  76,  76,  76,  46,  //  21
  1375.      46,  59,   3,   3,   3,   3,   3,   3,  //  21
  1376.      46,  77,  77,  77,  77,  77,  77,  77,  //  21
  1377.      77,  77,  77,  77,  77,  77,  77,  77,  //  21
  1378.      77,  77,  77,  77,  77,  77,  77,  77,  //  21
  1379.      77,  77,  77,  77,  77,  77,  77,  77,  //  21
  1380.      77,  77,  77,  77,  77,  77,  77,  16,  //  22
  1381.      46,   3,  46,  46,  46,  46,  46,  46,  //  22
  1382.      46,  60,  60,  60,  60,  60,  60,  60,  //  22
  1383.      60,  60,  60,  60,  60,  60,  60,  60,  //  22
  1384.      60,  60,  46,  60,  60,  60,  60,  60,  //  22
  1385.      60,  60,  60,  60,  60,  60,  60,  60,  //  22
  1386.      60,  60,  60,  60,  60,  60,  60,  60,  //  22
  1387.      60,  60,  46,  60,  60,  60,   3,  60,  //  22
  1388.       3,  60,  60,   3,  60,  46,  46,  46,  //  23
  1389.      46,  46,  46,  46,  46,  46,  46,  46,  //  23
  1390.      40,  40,  40,  40,  40,  40,  40,  40,  //  23
  1391.      40,  40,  40,  40,  40,  40,  40,  40,  //  23
  1392.      40,  40,  40,  40,  40,  40,  40,  40,  //  23
  1393.      40,  40,  40,  46,  46,  46,  46,  46,  //  23
  1394.      40,  40,  40,   3,   3,  46,  46,  46,  //  23
  1395.      46,  46,  46,  46,  46,  46,  46,  46,  //  23
  1396.      46,  46,  46,  46,  46,  46,  46,  46,  //  24
  1397.      46,  46,  46,  46,   3,  46,  46,  46,  //  24
  1398.      46,  46,  46,  46,  46,  46,  46,  46,  //  24
  1399.      46,  46,  46,   3,  46,  46,  46,   3,  //  24
  1400.      46,  40,  40,  40,  40,  40,  40,  40,  //  24
  1401.      40,  40,  40,  40,  40,  40,  40,  40,  //  24
  1402.      40,  40,  40,  40,  40,  40,  40,  40,  //  24
  1403.      40,  40,  40,  46,  46,  46,  46,  46,  //  24
  1404.      59,  40,  40,  40,  40,  40,  40,  40,  //  25
  1405.      40,  40,  40,  60,  60,  60,  60,  60,  //  25
  1406.      60,  60,  60,  46,  46,  46,  46,  46,  //  25
  1407.      46,  46,  46,  46,  46,  46,  46,  46,  //  25
  1408.      78,  78,  78,  78,  78,  78,  78,  78,  //  25
  1409.      78,  78,   3,   3,   3,   3,  46,  46,  //  25
  1410.      60,  40,  40,  40,  40,  40,  40,  40,  //  25
  1411.      40,  40,  40,  40,  40,  40,  40,  40,  //  25
  1412.      40,  40,  40,  40,  40,  40,  40,  40,  //  26
  1413.      40,  40,  40,  40,  40,  40,  40,  40,  //  26
  1414.      40,  40,  40,  40,  40,  40,  40,  40,  //  26
  1415.      40,  40,  40,  40,  40,  40,  40,  40,  //  26
  1416.      40,  40,  40,  40,  40,  40,  40,  40,  //  26
  1417.      40,  40,  40,  40,  40,  40,  40,  40,  //  26
  1418.      40,  40,  40,  40,  40,  40,  40,  40,  //  26
  1419.      46,  46,  40,  40,  40,  40,  40,  46,  //  26
  1420.      40,  40,  40,  40,  40,  40,  40,  40,  //  27
  1421.      40,  40,  40,  40,  40,  40,  40,  46,  //  27
  1422.      40,  40,  40,  40,   3,  40,  60,  60,  //  27
  1423.      60,  60,  60,  60,  60,  79,  79,  60,  //  27
  1424.      60,  60,  60,  60,  60,  59,  59,  60,  //  27
  1425.      60,  15,  60,  60,  60,  60,  46,  46,  //  27
  1426.       9,   9,   9,   9,   9,   9,   9,   9,  //  27
  1427.       9,   9,  46,  46,  46,  46,  46,  46,  //  27
  1428.      46,  46,  46,  46,  46,  46,  46,  46,  //  28
  1429.      46,  46,  46,  46,  46,  46,  46,  46,  //  28
  1430.      46,  46,  46,  46,  46,  46,  46,  46,  //  28
  1431.      46,  46,  46,  46,  46,  46,  46,  46,  //  28
  1432.      46,  46,  46,  46,  46,  46,  46,  46,  //  28
  1433.      46,  46,  46,  46,  46,  46,  46,  46,  //  28
  1434.      46,  46,  46,  46,  46,  46,  46,  46,  //  28
  1435.      46,  46,  46,  46,  46,  46,  46,  46,  //  28
  1436.      46,  60,  60,  80,  46,  40,  40,  40,  //  29
  1437.      40,  40,  40,  40,  40,  40,  40,  40,  //  29
  1438.      40,  40,  40,  40,  40,  40,  40,  40,  //  29
  1439.      40,  40,  40,  40,  40,  40,  40,  40,  //  29
  1440.      40,  40,  40,  40,  40,  40,  40,  40,  //  29
  1441.      40,  40,  40,  40,  40,  40,  40,  40,  //  29
  1442.      40,  40,  40,  40,  40,  40,  40,  40,  //  29
  1443.      40,  40,  46,  46,  60,  40,  80,  80,  //  29
  1444.      80,  60,  60,  60,  60,  60,  60,  60,  //  30
  1445.      60,  80,  80,  80,  80,  60,  46,  46,  //  30
  1446.      15,  60,  60,  60,  60,  46,  46,  46,  //  30
  1447.      40,  40,  40,  40,  40,  40,  40,  40,  //  30
  1448.      40,  40,  60,  60,   3,   3,  81,  81,  //  30
  1449.      81,  81,  81,  81,  81,  81,  81,  81,  //  30
  1450.       3,  46,  46,  46,  46,  46,  46,  46,  //  30
  1451.      46,  46,  46,  46,  46,  46,  46,  46,  //  30
  1452.      46,  60,  80,  80,  46,  40,  40,  40,  //  31
  1453.      40,  40,  40,  40,  40,  46,  46,  40,  //  31
  1454.      40,  46,  46,  40,  40,  40,  40,  40,  //  31
  1455.      40,  40,  40,  40,  40,  40,  40,  40,  //  31
  1456.      40,  40,  40,  40,  40,  40,  40,  40,  //  31
  1457.      40,  46,  40,  40,  40,  40,  40,  40,  //  31
  1458.      40,  46,  40,  46,  46,  46,  40,  40,  //  31
  1459.      40,  40,  46,  46,  60,  46,  80,  80,  //  31
  1460.      80,  60,  60,  60,  60,  46,  46,  80,  //  32
  1461.      80,  46,  46,  80,  80,  60,  46,  46,  //  32
  1462.      46,  46,  46,  46,  46,  46,  46,  80,  //  32
  1463.      46,  46,  46,  46,  40,  40,  46,  40,  //  32
  1464.      40,  40,  60,  60,  46,  46,  81,  81,  //  32
  1465.      81,  81,  81,  81,  81,  81,  81,  81,  //  32
  1466.      40,  40,   4,   4,  82,  82,  82,  82,  //  32
  1467.      19,  83,  15,  46,  46,  46,  46,  46,  //  32
  1468.      46,  46,  60,  46,  46,  40,  40,  40,  //  33
  1469.      40,  40,  40,  46,  46,  46,  46,  40,  //  33
  1470.      40,  46,  46,  40,  40,  40,  40,  40,  //  33
  1471.      40,  40,  40,  40,  40,  40,  40,  40,  //  33
  1472.      40,  40,  40,  40,  40,  40,  40,  40,  //  33
  1473.      40,  46,  40,  40,  40,  40,  40,  40,  //  33
  1474.      40,  46,  40,  40,  46,  40,  40,  46,  //  33
  1475.      40,  40,  46,  46,  60,  46,  80,  80,  //  33
  1476.      80,  60,  60,  46,  46,  46,  46,  60,  //  34
  1477.      60,  46,  46,  60,  60,  60,  46,  46,  //  34
  1478.      46,  46,  46,  46,  46,  46,  46,  46,  //  34
  1479.      46,  40,  40,  40,  40,  46,  40,  46,  //  34
  1480.      46,  46,  46,  46,  46,  46,  81,  81,  //  34
  1481.      81,  81,  81,  81,  81,  81,  81,  81,  //  34
  1482.      60,  60,  40,  40,  40,  46,  46,  46,  //  34
  1483.      46,  46,  46,  46,  46,  46,  46,  46,  //  34
  1484.      46,  60,  60,  80,  46,  40,  40,  40,  //  35
  1485.      40,  40,  40,  40,  46,  40,  46,  40,  //  35
  1486.      40,  40,  46,  40,  40,  40,  40,  40,  //  35
  1487.      40,  40,  40,  40,  40,  40,  40,  40,  //  35
  1488.      40,  40,  40,  40,  40,  40,  40,  40,  //  35
  1489.      40,  46,  40,  40,  40,  40,  40,  40,  //  35
  1490.      40,  46,  40,  40,  46,  40,  40,  40,  //  35
  1491.      40,  40,  46,  46,  60,  40,  80,  80,  //  35
  1492.      80,  60,  60,  60,  60,  60,  46,  60,  //  36
  1493.      60,  80,  46,  80,  80,  60,  46,  46,  //  36
  1494.      15,  46,  46,  46,  46,  46,  46,  46,  //  36
  1495.      46,  46,  46,  46,  46,  46,  46,  46,  //  36
  1496.      40,  46,  46,  46,  46,  46,  81,  81,  //  36
  1497.      81,  81,  81,  81,  81,  81,  81,  81,  //  36
  1498.      46,  46,  46,  46,  46,  46,  46,  46,  //  36
  1499.      46,  46,  46,  46,  46,  46,  46,  46,  //  36
  1500.      46,  60,  80,  80,  46,  40,  40,  40,  //  37
  1501.      40,  40,  40,  40,  40,  46,  46,  40,  //  37
  1502.      40,  46,  46,  40,  40,  40,  40,  40,  //  37
  1503.      40,  40,  40,  40,  40,  40,  40,  40,  //  37
  1504.      40,  40,  40,  40,  40,  40,  40,  40,  //  37
  1505.      40,  46,  40,  40,  40,  40,  40,  40,  //  37
  1506.      40,  46,  40,  40,  46,  46,  40,  40,  //  37
  1507.      40,  40,  46,  46,  60,  40,  80,  60,  //  37
  1508.      80,  60,  60,  60,  46,  46,  46,  80,  //  38
  1509.      80,  46,  46,  80,  80,  60,  46,  46,  //  38
  1510.      46,  46,  46,  46,  46,  46,  60,  80,  //  38
  1511.      46,  46,  46,  46,  40,  40,  46,  40,  //  38
  1512.      40,  40,  46,  46,  46,  46,  81,  81,  //  38
  1513.      81,  81,  81,  81,  81,  81,  81,  81,  //  38
  1514.      15,  46,  46,  46,  46,  46,  46,  46,  //  38
  1515.      46,  46,  46,  46,  46,  46,  46,  46,  //  38
  1516.      46,  46,  60,  80,  46,  40,  40,  40,  //  39
  1517.      40,  40,  40,  46,  46,  46,  40,  40,  //  39
  1518.      40,  46,  40,  40,  40,  40,  46,  46,  //  39
  1519.      46,  40,  40,  46,  40,  46,  40,  40,  //  39
  1520.      46,  46,  46,  40,  40,  46,  46,  46,  //  39
  1521.      40,  40,  40,  46,  46,  46,  40,  40,  //  39
  1522.      40,  40,  40,  40,  40,  40,  46,  40,  //  39
  1523.      40,  40,  46,  46,  46,  46,  80,  80,  //  39
  1524.      60,  80,  80,  46,  46,  46,  80,  80,  //  40
  1525.      80,  46,  80,  80,  80,  60,  46,  46,  //  40
  1526.      46,  46,  46,  46,  46,  46,  46,  80,  //  40
  1527.      46,  46,  46,  46,  46,  46,  46,  46,  //  40
  1528.      46,  46,  46,  46,  46,  46,  46,  81,  //  40
  1529.      81,  81,  81,  81,  81,  81,  81,  81,  //  40
  1530.      84,  19,  19,  46,  46,  46,  46,  46,  //  40
  1531.      46,  46,  46,  46,  46,  46,  46,  46,  //  40
  1532.      46,  80,  80,  80,  46,  40,  40,  40,  //  41
  1533.      40,  40,  40,  40,  40,  46,  40,  40,  //  41
  1534.      40,  46,  40,  40,  40,  40,  40,  40,  //  41
  1535.      40,  40,  40,  40,  40,  40,  40,  40,  //  41
  1536.      40,  40,  40,  40,  40,  40,  40,  40,  //  41
  1537.      40,  46,  40,  40,  40,  40,  40,  40,  //  41
  1538.      40,  40,  40,  40,  46,  40,  40,  40,  //  41
  1539.      40,  40,  46,  46,  46,  46,  60,  60,  //  41
  1540.      60,  80,  80,  80,  80,  46,  60,  60,  //  42
  1541.      60,  46,  60,  60,  60,  60,  46,  46,  //  42
  1542.      46,  46,  46,  46,  46,  60,  60,  46,  //  42
  1543.      46,  46,  46,  46,  46,  46,  46,  46,  //  42
  1544.      40,  40,  46,  46,  46,  46,  81,  81,  //  42
  1545.      81,  81,  81,  81,  81,  81,  81,  81,  //  42
  1546.      46,  46,  46,  46,  46,  46,  46,  46,  //  42
  1547.      46,  46,  46,  46,  46,  46,  46,  46,  //  42
  1548.      46,  46,  80,  80,  46,  40,  40,  40,  //  43
  1549.      40,  40,  40,  40,  40,  46,  40,  40,  //  43
  1550.      40,  46,  40,  40,  40,  40,  40,  40,  //  43
  1551.      40,  40,  40,  40,  40,  40,  40,  40,  //  43
  1552.      40,  40,  40,  40,  40,  40,  40,  40,  //  43
  1553.      40,  46,  40,  40,  40,  40,  40,  40,  //  43
  1554.      40,  40,  40,  40,  46,  40,  40,  40,  //  43
  1555.      40,  40,  46,  46,  46,  46,  80,  60,  //  43
  1556.      80,  80,  80,  80,  80,  46,  60,  80,  //  44
  1557.      80,  46,  80,  80,  60,  60,  46,  46,  //  44
  1558.      46,  46,  46,  46,  46,  80,  80,  46,  //  44
  1559.      46,  46,  46,  46,  46,  46,  40,  46,  //  44
  1560.      40,  40,  46,  46,  46,  46,  81,  81,  //  44
  1561.      81,  81,  81,  81,  81,  81,  81,  81,  //  44
  1562.      46,  46,  46,  46,  46,  46,  46,  46,  //  44
  1563.      46,  46,  46,  46,  46,  46,  46,  46,  //  44
  1564.      46,  46,  80,  80,  46,  40,  40,  40,  //  45
  1565.      40,  40,  40,  40,  40,  46,  40,  40,  //  45
  1566.      40,  46,  40,  40,  40,  40,  40,  40,  //  45
  1567.      40,  40,  40,  40,  40,  40,  40,  40,  //  45
  1568.      40,  40,  40,  40,  40,  40,  40,  40,  //  45
  1569.      40,  46,  40,  40,  40,  40,  40,  40,  //  45
  1570.      40,  40,  40,  40,  40,  40,  40,  40,  //  45
  1571.      40,  40,  46,  46,  46,  46,  80,  80,  //  45
  1572.      80,  60,  60,  60,  46,  46,  80,  80,  //  46
  1573.      80,  46,  80,  80,  80,  60,  46,  46,  //  46
  1574.      46,  46,  46,  46,  46,  46,  46,  80,  //  46
  1575.      46,  46,  46,  46,  46,  46,  46,  46,  //  46
  1576.      40,  40,  46,  46,  46,  46,  81,  81,  //  46
  1577.      81,  81,  81,  81,  81,  81,  81,  81,  //  46
  1578.      46,  46,  46,  46,  46,  46,  46,  46,  //  46
  1579.      46,  46,  46,  46,  46,  46,  46,  46,  //  46
  1580.      46,  40,  40,  40,  40,  40,  40,  40,  //  47
  1581.      40,  40,  40,  40,  40,  40,  40,  40,  //  47
  1582.      40,  40,  40,  40,  40,  40,  40,  40,  //  47
  1583.      40,  40,  40,  40,  40,  40,  40,  40,  //  47
  1584.      40,  40,  40,  40,  40,  40,  40,  40,  //  47
  1585.      40,  40,  40,  40,  40,  40,  40,   3,  //  47
  1586.      40,  60,  40,  40,  60,  60,  60,  60,  //  47
  1587.      60,  60,  60,  46,  46,  46,  46,   4,  //  47
  1588.      40,  40,  40,  40,  40,  40,  59,  60,  //  48
  1589.      60,  60,  60,  60,  60,  60,  60,  15,  //  48
  1590.       9,   9,   9,   9,   9,   9,   9,   9,  //  48
  1591.       9,   9,   3,   3,  46,  46,  46,  46,  //  48
  1592.      46,  46,  46,  46,  46,  46,  46,  46,  //  48
  1593.      46,  46,  46,  46,  46,  46,  46,  46,  //  48
  1594.      46,  46,  46,  46,  46,  46,  46,  46,  //  48
  1595.      46,  46,  46,  46,  46,  46,  46,  46,  //  48
  1596.      46,  40,  40,  46,  40,  46,  46,  40,  //  49
  1597.      40,  46,  40,  46,  46,  40,  46,  46,  //  49
  1598.      46,  46,  46,  46,  40,  40,  40,  40,  //  49
  1599.      46,  40,  40,  40,  40,  40,  40,  40,  //  49
  1600.      46,  40,  40,  40,  46,  40,  46,  40,  //  49
  1601.      46,  46,  40,  40,  46,  40,  40,   3,  //  49
  1602.      40,  60,  40,  40,  60,  60,  60,  60,  //  49
  1603.      60,  60,  46,  60,  60,  40,  46,  46,  //  49
  1604.      40,  40,  40,  40,  40,  46,  59,  46,  //  50
  1605.      60,  60,  60,  60,  60,  60,  46,  46,  //  50
  1606.       9,   9,   9,   9,   9,   9,   9,   9,  //  50
  1607.       9,   9,  46,  46,  40,  40,  46,  46,  //  50
  1608.      46,  46,  46,  46,  46,  46,  46,  46,  //  50
  1609.      46,  46,  46,  46,  46,  46,  46,  46,  //  50
  1610.      46,  46,  46,  46,  46,  46,  46,  46,  //  50
  1611.      46,  46,  46,  46,  46,  46,  46,  46,  //  50
  1612.      15,  15,  15,  15,   3,   3,   3,   3,  //  51
  1613.       3,   3,   3,   3,   3,   3,   3,   3,  //  51
  1614.       3,   3,   3,  15,  15,  15,  15,  15,  //  51
  1615.      60,  60,  15,  15,  15,  15,  15,  15,  //  51
  1616.      78,  78,  78,  78,  78,  78,  78,  78,  //  51
  1617.      78,  78,  85,  85,  85,  85,  85,  85,  //  51
  1618.      85,  85,  85,  85,  15,  60,  15,  60,  //  51
  1619.      15,  60,   5,   6,   5,   6,  80,  80,  //  51
  1620.      40,  40,  40,  40,  40,  40,  40,  40,  //  52
  1621.      46,  40,  40,  40,  40,  40,  40,  40,  //  52
  1622.      40,  40,  40,  40,  40,  40,  40,  40,  //  52
  1623.      40,  40,  40,  40,  40,  40,  40,  40,  //  52
  1624.      40,  40,  40,  40,  40,  40,  40,  40,  //  52
  1625.      40,  40,  46,  46,  46,  46,  46,  46,  //  52
  1626.      46,  60,  60,  60,  60,  60,  60,  60,  //  52
  1627.      60,  60,  60,  60,  60,  60,  60,  80,  //  52
  1628.      60,  60,  60,  60,  60,   3,  60,  60,  //  53
  1629.      60,  60,  60,  60,  46,  46,  46,  46,  //  53
  1630.      60,  60,  60,  60,  60,  60,  46,  60,  //  53
  1631.      46,  60,  60,  60,  60,  60,  60,  60,  //  53
  1632.      60,  60,  60,  60,  60,  60,  60,  60,  //  53
  1633.      60,  60,  60,  60,  60,  60,  46,  46,  //  53
  1634.      46,  60,  60,  60,  60,  60,  60,  60,  //  53
  1635.      46,  60,  46,  46,  46,  46,  46,  46,  //  53
  1636.      46,  46,  46,  46,  46,  46,  46,  46,  //  54
  1637.      46,  46,  46,  46,  46,  46,  46,  46,  //  54
  1638.      46,  46,  46,  46,  46,  46,  46,  46,  //  54
  1639.      46,  46,  46,  46,  46,  46,  46,  46,  //  54
  1640.      76,  76,  76,  76,  76,  76,  76,  76,  //  54
  1641.      76,  76,  76,  76,  76,  76,  76,  76,  //  54
  1642.      76,  76,  76,  76,  76,  76,  76,  76,  //  54
  1643.      76,  76,  76,  76,  76,  76,  76,  76,  //  54
  1644.      76,  76,  76,  76,  76,  76,  46,  46,  //  55
  1645.      46,  46,  46,  46,  46,  46,  46,  46,  //  55
  1646.      16,  16,  16,  16,  16,  16,  16,  16,  //  55
  1647.      16,  16,  16,  16,  16,  16,  16,  16,  //  55
  1648.      16,  16,  16,  16,  16,  16,  16,  16,  //  55
  1649.      16,  16,  16,  16,  16,  16,  16,  16,  //  55
  1650.      16,  16,  16,  16,  16,  16,  16,  46,  //  55
  1651.      46,  46,  46,   3,  46,  46,  46,  46,  //  55
  1652.      40,  40,  40,  40,  40,  40,  40,  40,  //  56
  1653.      40,  40,  40,  40,  40,  40,  40,  40,  //  56
  1654.      40,  40,  40,  40,  40,  40,  40,  40,  //  56
  1655.      40,  40,  40,  40,  40,  40,  40,  40,  //  56
  1656.      40,  40,  40,  40,  40,  40,  40,  40,  //  56
  1657.      40,  40,  40,  40,  40,  40,  40,  40,  //  56
  1658.      40,  40,  40,  40,  40,  40,  40,  40,  //  56
  1659.      40,  40,  40,  40,  40,  40,  40,  40,  //  56
  1660.      40,  40,  40,  40,  40,  40,  40,  40,  //  57
  1661.      40,  40,  40,  40,  40,  40,  40,  40,  //  57
  1662.      40,  40,  40,  40,  40,  40,  40,  40,  //  57
  1663.      40,  40,  46,  46,  46,  46,  46,  40,  //  57
  1664.      40,  40,  40,  40,  40,  40,  40,  40,  //  57
  1665.      40,  40,  40,  40,  40,  40,  40,  40,  //  57
  1666.      40,  40,  40,  40,  40,  40,  40,  40,  //  57
  1667.      40,  40,  40,  40,  40,  40,  40,  40,  //  57
  1668.      40,  40,  40,  40,  40,  40,  40,  40,  //  58
  1669.      40,  40,  40,  40,  40,  40,  40,  40,  //  58
  1670.      40,  40,  40,  40,  40,  40,  40,  40,  //  58
  1671.      40,  40,  40,  40,  40,  40,  40,  40,  //  58
  1672.      40,  40,  40,  46,  46,  46,  46,  46,  //  58
  1673.      40,  40,  40,  40,  40,  40,  40,  40,  //  58
  1674.      40,  40,  40,  40,  40,  40,  40,  40,  //  58
  1675.      40,  40,  40,  40,  40,  40,  40,  40,  //  58
  1676.      40,  40,  40,  40,  40,  40,  40,  40,  //  59
  1677.      40,  40,  40,  40,  40,  40,  40,  40,  //  59
  1678.      40,  40,  40,  40,  40,  40,  40,  40,  //  59
  1679.      40,  40,  40,  40,  40,  40,  40,  40,  //  59
  1680.      40,  40,  40,  40,  40,  40,  40,  40,  //  59
  1681.      40,  40,  40,  40,  40,  40,  40,  40,  //  59
  1682.      40,  40,  40,  40,  40,  40,  40,  40,  //  59
  1683.      40,  40,  46,  46,  46,  46,  46,  46,  //  59
  1684.      23,  24,  23,  24,  23,  24,  23,  24,  //  60
  1685.      23,  24,  23,  24,  23,  24,  23,  24,  //  60
  1686.      23,  24,  23,  24,  23,  24,  23,  24,  //  60
  1687.      23,  24,  23,  24,  23,  24,  23,  24,  //  60
  1688.      23,  24,  23,  24,  23,  24,  23,  24,  //  60
  1689.      23,  24,  23,  24,  23,  24,  23,  24,  //  60
  1690.      23,  24,  23,  24,  23,  24,  23,  24,  //  60
  1691.      23,  24,  23,  24,  23,  24,  23,  24,  //  60
  1692.      23,  24,  23,  24,  23,  24,  23,  24,  //  61
  1693.      23,  24,  23,  24,  23,  24,  23,  24,  //  61
  1694.      23,  24,  23,  24,  23,  24,  16,  16,  //  61
  1695.      16,  16,  16,  16,  46,  46,  46,  46,  //  61
  1696.      23,  24,  23,  24,  23,  24,  23,  24,  //  61
  1697.      23,  24,  23,  24,  23,  24,  23,  24,  //  61
  1698.      23,  24,  23,  24,  23,  24,  23,  24,  //  61
  1699.      23,  24,  23,  24,  23,  24,  23,  24,  //  61
  1700.      23,  24,  23,  24,  23,  24,  23,  24,  //  62
  1701.      23,  24,  23,  24,  23,  24,  23,  24,  //  62
  1702.      23,  24,  23,  24,  23,  24,  23,  24,  //  62
  1703.      23,  24,  23,  24,  23,  24,  23,  24,  //  62
  1704.      23,  24,  23,  24,  23,  24,  23,  24,  //  62
  1705.      23,  24,  23,  24,  23,  24,  23,  24,  //  62
  1706.      23,  24,  23,  24,  23,  24,  23,  24,  //  62
  1707.      23,  24,  46,  46,  46,  46,  46,  46,  //  62
  1708.      86,  86,  86,  86,  86,  86,  86,  86,  //  63
  1709.      87,  87,  87,  87,  87,  87,  87,  87,  //  63
  1710.      86,  86,  86,  86,  86,  86,  46,  46,  //  63
  1711.      87,  87,  87,  87,  87,  87,  46,  46,  //  63
  1712.      86,  86,  86,  86,  86,  86,  86,  86,  //  63
  1713.      87,  87,  87,  87,  87,  87,  87,  87,  //  63
  1714.      86,  86,  86,  86,  86,  86,  86,  86,  //  63
  1715.      87,  87,  87,  87,  87,  87,  87,  87,  //  63
  1716.      86,  86,  86,  86,  86,  86,  46,  46,  //  64
  1717.      87,  87,  87,  87,  87,  87,  46,  46,  //  64
  1718.      16,  86,  16,  86,  16,  86,  16,  86,  //  64
  1719.      46,  87,  46,  87,  46,  87,  46,  87,  //  64
  1720.      86,  86,  86,  86,  86,  86,  86,  86,  //  64
  1721.      87,  87,  87,  87,  87,  87,  87,  87,  //  64
  1722.      88,  88,  89,  89,  89,  89,  90,  90,  //  64
  1723.      91,  91,  92,  92,  93,  93,  46,  46,  //  64
  1724.      86,  86,  86,  86,  86,  86,  86,  86,  //  65
  1725.      87,  87,  87,  87,  87,  87,  87,  87,  //  65
  1726.      86,  86,  86,  86,  86,  86,  86,  86,  //  65
  1727.      87,  87,  87,  87,  87,  87,  87,  87,  //  65
  1728.      86,  86,  86,  86,  86,  86,  86,  86,  //  65
  1729.      87,  87,  87,  87,  87,  87,  87,  87,  //  65
  1730.      86,  86,  16,  94,  16,  46,  16,  16,  //  65
  1731.      87,  87,  95,  95,  96,  11,  38,  11,  //  65
  1732.      11,  11,  16,  94,  16,  46,  16,  16,  //  66
  1733.      97,  97,  97,  97,  96,  11,  11,  11,  //  66
  1734.      86,  86,  16,  16,  46,  46,  16,  16,  //  66
  1735.      87,  87,  98,  98,  46,  11,  11,  11,  //  66
  1736.      86,  86,  16,  16,  16,  99,  16,  16,  //  66
  1737.      87,  87, 100, 100, 101,  11,  11,  11,  //  66
  1738.      46,  46,  16,  94,  16,  46,  16,  16,  //  66
  1739.     102, 102, 103, 103,  96,  11,  11,  46,  //  66
  1740.       2,   2,   2,   2,   2,   2,   2,   2,  //  67
  1741.       2,   2,   2,   2, 104, 104, 104, 104,  //  67
  1742.       8,   8,   8,   8,   8,   8,   3,   3,  //  67
  1743.       5,   6,   5,   5,   5,   6,   5,   5,  //  67
  1744.       3,   3,   3,   3,   3,   3,   3,   3,  //  67
  1745.     105, 106, 104, 104, 104, 104, 104,  46,  //  67
  1746.       3,   3,   3,   3,   3,   3,   3,   3,  //  67
  1747.       3,   5,   6,   3,   3,   3,   3,  12,  //  67
  1748.      12,   3,   3,   3,   7,   5,   6,  46,  //  68
  1749.      46,  46,  46,  46,  46,  46,  46,  46,  //  68
  1750.      46,  46,  46,  46,  46,  46,  46,  46,  //  68
  1751.      46,  46,  46,  46,  46,  46,  46,  46,  //  68
  1752.      46,  46,  46,  46,  46,  46,  46,  46,  //  68
  1753.      46,  46, 104, 104, 104, 104, 104, 104,  //  68
  1754.      17,  46,  46,  46,  17,  17,  17,  17,  //  68
  1755.      17,  17,   7,   7,   7,   5,   6,  16,  //  68
  1756.     107, 107, 107, 107, 107, 107, 107, 107,  //  69
  1757.     107, 107,   7,   7,   7,   5,   6,  46,  //  69
  1758.      46,  46,  46,  46,  46,  46,  46,  46,  //  69
  1759.      46,  46,  46,  46,  46,  46,  46,  46,  //  69
  1760.       4,   4,   4,   4,   4,   4,   4,   4,  //  69
  1761.       4,   4,   4,   4,  46,  46,  46,  46,  //  69
  1762.      46,  46,  46,  46,  46,  46,  46,  46,  //  69
  1763.      46,  46,  46,  46,  46,  46,  46,  46,  //  69
  1764.      46,  46,  46,  46,  46,  46,  46,  46,  //  70
  1765.      46,  46,  46,  46,  46,  46,  46,  46,  //  70
  1766.      60,  60,  60,  60,  60,  60,  60,  60,  //  70
  1767.      60,  60,  60,  60,  60,  79,  79,  79,  //  70
  1768.      79,  60,  46,  46,  46,  46,  46,  46,  //  70
  1769.      46,  46,  46,  46,  46,  46,  46,  46,  //  70
  1770.      46,  46,  46,  46,  46,  46,  46,  46,  //  70
  1771.      46,  46,  46,  46,  46,  46,  46,  46,  //  70
  1772.      15,  15,  38,  15,  15,  15,  15,  38,  //  71
  1773.      15,  15,  16,  38,  38,  38,  16,  16,  //  71
  1774.      38,  38,  38,  16,  15,  38,  15,  15,  //  71
  1775.      38,  38,  38,  38,  38,  38,  15,  15,  //  71
  1776.      15,  15,  15,  15,  38,  15,  38,  15,  //  71
  1777.      38,  15,  38,  38,  38,  38,  16,  16,  //  71
  1778.      38,  38,  15,  38,  16,  40,  40,  40,  //  71
  1779.      40,  46,  46,  46,  46,  46,  46,  46,  //  71
  1780.      46,  46,  46,  46,  46,  46,  46,  46,  //  72
  1781.      46,  46,  46,  46,  46,  46,  46,  46,  //  72
  1782.      46,  46,  46,  19,  19,  19,  19,  19,  //  72
  1783.      19,  19,  19,  19,  19,  19,  19, 108,  //  72
  1784.     109, 109, 109, 109, 109, 109, 109, 109,  //  72
  1785.     109, 109, 109, 109, 110, 110, 110, 110,  //  72
  1786.     111, 111, 111, 111, 111, 111, 111, 111,  //  72
  1787.     111, 111, 111, 111, 112, 112, 112, 112,  //  72
  1788.     113, 113, 113,  46,  46,  46,  46,  46,  //  73
  1789.      46,  46,  46,  46,  46,  46,  46,  46,  //  73
  1790.       7,   7,   7,   7,   7,  15,  15,  15,  //  73
  1791.      15,  15,  15,  15,  15,  15,  15,  15,  //  73
  1792.      15,  15,  15,  15,  15,  15,  15,  15,  //  73
  1793.      15,  15,  15,  15,  15,  15,  15,  15,  //  73
  1794.      15,  15,  15,  15,  15,  15,  15,  15,  //  73
  1795.      15,  15,  15,  15,  15,  15,  15,  15,  //  73
  1796.      15,  15,  15,  15,  15,  15,  15,  15,  //  74
  1797.      15,  15,  15,  15,  15,  15,  15,  15,  //  74
  1798.      15,  15,   7,  15,   7,  15,  15,  15,  //  74
  1799.      15,  15,  15,  15,  15,  15,  15,  15,  //  74
  1800.      15,  15,  15,  15,  15,  15,  15,  15,  //  74
  1801.      15,  15,  15,  46,  46,  46,  46,  46,  //  74
  1802.      46,  46,  46,  46,  46,  46,  46,  46,  //  74
  1803.      46,  46,  46,  46,  46,  46,  46,  46,  //  74
  1804.       7,   7,   7,   7,   7,   7,   7,   7,  //  75
  1805.       7,   7,   7,   7,   7,   7,   7,   7,  //  75
  1806.       7,   7,   7,   7,   7,   7,   7,   7,  //  75
  1807.       7,   7,   7,   7,   7,   7,   7,   7,  //  75
  1808.       7,   7,   7,   7,   7,   7,   7,   7,  //  75
  1809.       7,   7,   7,   7,   7,   7,   7,   7,  //  75
  1810.       7,   7,   7,   7,   7,   7,   7,   7,  //  75
  1811.       7,   7,   7,   7,   7,   7,   7,   7,  //  75
  1812.       7,   7,   7,   7,   7,   7,   7,   7,  //  76
  1813.       7,   7,   7,   7,   7,   7,   7,   7,  //  76
  1814.       7,   7,   7,   7,   7,   7,   7,   7,  //  76
  1815.       7,   7,   7,   7,   7,   7,   7,   7,  //  76
  1816.       7,   7,   7,   7,   7,   7,   7,   7,  //  76
  1817.       7,   7,   7,   7,   7,   7,   7,   7,  //  76
  1818.       7,   7,  46,  46,  46,  46,  46,  46,  //  76
  1819.      46,  46,  46,  46,  46,  46,  46,  46,  //  76
  1820.      15,  46,  15,  15,  15,  15,  15,  15,  //  77
  1821.       7,   7,   7,   7,  15,  15,  15,  15,  //  77
  1822.      15,  15,  15,  15,  15,  15,  15,  15,  //  77
  1823.      15,  15,  15,  15,  15,  15,  15,  15,  //  77
  1824.       7,   7,  15,  15,  15,  15,  15,  15,  //  77
  1825.      15,   5,   6,  15,  15,  15,  15,  15,  //  77
  1826.      15,  15,  15,  15,  15,  15,  15,  15,  //  77
  1827.      15,  15,  15,  15,  15,  15,  15,  15,  //  77
  1828.      15,  15,  15,  15,  15,  15,  15,  15,  //  78
  1829.      15,  15,  15,  15,  15,  15,  15,  15,  //  78
  1830.      15,  15,  15,  15,  15,  15,  15,  15,  //  78
  1831.      15,  15,  15,  15,  15,  15,  15,  15,  //  78
  1832.      15,  15,  15,  15,  15,  15,  15,  15,  //  78
  1833.      15,  15,  15,  15,  15,  15,  15,  15,  //  78
  1834.      15,  15,  15,  15,  15,  15,  15,  15,  //  78
  1835.      15,  15,  15,  46,  46,  46,  46,  46,  //  78
  1836.      15,  15,  15,  15,  15,  15,  15,  15,  //  79
  1837.      15,  15,  15,  15,  15,  15,  15,  15,  //  79
  1838.      15,  15,  15,  15,  15,  15,  15,  15,  //  79
  1839.      15,  15,  15,  15,  15,  15,  15,  15,  //  79
  1840.      15,  15,  15,  15,  15,  46,  46,  46,  //  79
  1841.      46,  46,  46,  46,  46,  46,  46,  46,  //  79
  1842.      46,  46,  46,  46,  46,  46,  46,  46,  //  79
  1843.      46,  46,  46,  46,  46,  46,  46,  46,  //  79
  1844.      15,  15,  15,  15,  15,  15,  15,  15,  //  80
  1845.      15,  15,  15,  46,  46,  46,  46,  46,  //  80
  1846.      46,  46,  46,  46,  46,  46,  46,  46,  //  80
  1847.      46,  46,  46,  46,  46,  46,  46,  46,  //  80
  1848.     114, 114, 114, 114, 114, 114, 114, 114,  //  80
  1849.     114, 114, 114, 114, 114, 114, 114, 114,  //  80
  1850.     114, 114, 114, 114,  82,  82,  82,  82,  //  80
  1851.      82,  82,  82,  82,  82,  82,  82,  82,  //  80
  1852.      82,  82,  82,  82,  82,  82,  82,  82,  //  81
  1853.     115, 115, 115, 115, 115, 115, 115, 115,  //  81
  1854.     115, 115, 115, 115, 115, 115, 115, 115,  //  81
  1855.     115, 115, 115, 115,  15,  15,  15,  15,  //  81
  1856.      15,  15,  15,  15,  15,  15,  15,  15,  //  81
  1857.      15,  15,  15,  15,  15,  15,  15,  15,  //  81
  1858.      15,  15,  15,  15,  15,  15, 116, 116,  //  81
  1859.     116, 116, 116, 116, 116, 116, 116, 116,  //  81
  1860.     116, 116, 116, 116, 116, 116, 116, 116,  //  82
  1861.     116, 116, 116, 116, 116, 116, 116, 116,  //  82
  1862.     117, 117, 117, 117, 117, 117, 117, 117,  //  82
  1863.     117, 117, 117, 117, 117, 117, 117, 117,  //  82
  1864.     117, 117, 117, 117, 117, 117, 117, 117,  //  82
  1865.     117, 117, 118,  46,  46,  46,  46,  46,  //  82
  1866.      46,  46,  46,  46,  46,  46,  46,  46,  //  82
  1867.      46,  46,  46,  46,  46,  46,  46,  46,  //  82
  1868.      15,  15,  15,  15,  15,  15,  15,  15,  //  83
  1869.      15,  15,  15,  15,  15,  15,  15,  15,  //  83
  1870.      15,  15,  15,  15,  15,  15,  15,  15,  //  83
  1871.      15,  15,  15,  15,  15,  15,  15,  15,  //  83
  1872.      15,  15,  15,  15,  15,  15,  15,  15,  //  83
  1873.      15,  15,  15,  15,  15,  15,  15,  15,  //  83
  1874.      15,  15,  15,  15,  15,  15,  15,  15,  //  83
  1875.      15,  15,  15,  15,  15,  15,  15,  15,  //  83
  1876.      15,  15,  15,  15,  15,  15,  15,  15,  //  84
  1877.      15,  15,  15,  15,  15,  15,  15,  15,  //  84
  1878.      15,  15,  15,  15,  15,  15,  46,  46,  //  84
  1879.      46,  46,  46,  46,  46,  46,  46,  46,  //  84
  1880.      15,  15,  15,  15,  15,  15,  15,  15,  //  84
  1881.      15,  15,  15,  15,  15,  15,  15,  15,  //  84
  1882.      15,  15,  15,  15,  15,  15,  15,  15,  //  84
  1883.      15,  15,  15,  15,  15,  15,  15,  15,  //  84
  1884.      15,  15,  15,  15,  15,  15,  15,  15,  //  85
  1885.      15,  15,  15,  15,  15,  15,  15,  15,  //  85
  1886.      15,  15,  15,  15,  15,  15,  15,  15,  //  85
  1887.      15,  15,  15,  15,  15,  15,  15,  15,  //  85
  1888.      15,  15,  15,  15,  15,  15,  15,  15,  //  85
  1889.      15,  15,  15,  15,  15,  15,  15,  15,  //  85
  1890.      46,  46,  46,  46,  46,  46,  46,  46,  //  85
  1891.      46,  46,  46,  46,  46,  46,  46,  46,  //  85
  1892.      15,  15,  15,  15,  15,  15,  15,  15,  //  86
  1893.      15,  15,  15,  15,  15,  15,  15,  15,  //  86
  1894.      15,  15,  15,  15,  46,  46,  46,  46,  //  86
  1895.      46,  46,  15,  15,  15,  15,  15,  15,  //  86
  1896.      15,  15,  15,  15,  15,  15,  15,  15,  //  86
  1897.      15,  15,  15,  15,  15,  15,  15,  15,  //  86
  1898.      15,  15,  15,  15,  15,  15,  15,  15,  //  86
  1899.      15,  15,  15,  15,  15,  15,  15,  15,  //  86
  1900.      46,  15,  15,  15,  15,  46,  15,  15,  //  87
  1901.      15,  15,  46,  46,  15,  15,  15,  15,  //  87
  1902.      15,  15,  15,  15,  15,  15,  15,  15,  //  87
  1903.      15,  15,  15,  15,  15,  15,  15,  15,  //  87
  1904.      15,  15,  15,  15,  15,  15,  15,  15,  //  87
  1905.      46,  15,  15,  15,  15,  15,  15,  15,  //  87
  1906.      15,  15,  15,  15,  15,  15,  15,  15,  //  87
  1907.      15,  15,  15,  15,  15,  15,  15,  15,  //  87
  1908.      15,  15,  15,  15,  15,  15,  15,  15,  //  88
  1909.      15,  15,  15,  15,  46,  15,  46,  15,  //  88
  1910.      15,  15,  15,  46,  46,  46,  15,  46,  //  88
  1911.      15,  15,  15,  15,  15,  15,  15,  46,  //  88
  1912.      46,  15,  15,  15,  15,  15,  15,  15,  //  88
  1913.      46,  46,  46,  46,  46,  46,  46,  46,  //  88
  1914.      46,  46,  46,  46,  46,  46, 119, 119,  //  88
  1915.     119, 119, 119, 119, 119, 119, 119, 119,  //  88
  1916.     114, 114, 114, 114, 114, 114, 114, 114,  //  89
  1917.     114, 114,  83,  83,  83,  83,  83,  83,  //  89
  1918.      83,  83,  83,  83,  15,  46,  46,  46,  //  89
  1919.      15,  15,  15,  15,  15,  15,  15,  15,  //  89
  1920.      15,  15,  15,  15,  15,  15,  15,  15,  //  89
  1921.      15,  15,  15,  15,  15,  15,  15,  15,  //  89
  1922.      46,  15,  15,  15,  15,  15,  15,  15,  //  89
  1923.      15,  15,  15,  15,  15,  15,  15,  46,  //  89
  1924.       2,   3,   3,   3,  15,  59,   3, 120,  //  90
  1925.       5,   6,   5,   6,   5,   6,   5,   6,  //  90
  1926.       5,   6,  15,  15,   5,   6,   5,   6,  //  90
  1927.       5,   6,   5,   6,   8,   5,   6,   5,  //  90
  1928.      15, 121, 121, 121, 121, 121, 121, 121,  //  90
  1929.     121, 121,  60,  60,  60,  60,  60,  60,  //  90
  1930.       8,  59,  59,  59,  59,  59,  15,  15,  //  90
  1931.      46,  46,  46,  46,  46,  46,  46,  15,  //  90
  1932.      46,  40,  40,  40,  40,  40,  40,  40,  //  91
  1933.      40,  40,  40,  40,  40,  40,  40,  40,  //  91
  1934.      40,  40,  40,  40,  40,  40,  40,  40,  //  91
  1935.      40,  40,  40,  40,  40,  40,  40,  40,  //  91
  1936.      40,  40,  40,  40,  40,  40,  40,  40,  //  91
  1937.      40,  40,  40,  40,  40,  40,  40,  40,  //  91
  1938.      40,  40,  40,  40,  40,  40,  40,  40,  //  91
  1939.      40,  40,  40,  40,  40,  40,  40,  40,  //  91
  1940.      40,  40,  40,  40,  40,  40,  40,  40,  //  92
  1941.      40,  40,  40,  40,  40,  40,  40,  40,  //  92
  1942.      40,  40,  40,  40,  40,  46,  46,  46,  //  92
  1943.      46,  60,  60,  59,  59,  59,  59,  46,  //  92
  1944.      46,  40,  40,  40,  40,  40,  40,  40,  //  92
  1945.      40,  40,  40,  40,  40,  40,  40,  40,  //  92
  1946.      40,  40,  40,  40,  40,  40,  40,  40,  //  92
  1947.      40,  40,  40,  40,  40,  40,  40,  40,  //  92
  1948.      40,  40,  40,  40,  40,  40,  40,  40,  //  93
  1949.      40,  40,  40,  40,  40,  40,  40,  40,  //  93
  1950.      40,  40,  40,  40,  40,  40,  40,  40,  //  93
  1951.      40,  40,  40,  40,  40,  40,  40,  40,  //  93
  1952.      40,  40,  40,  40,  40,  40,  40,  40,  //  93
  1953.      40,  40,  40,  40,  40,  40,  40,  40,  //  93
  1954.      40,  40,  40,  40,  40,  40,  40,  40,  //  93
  1955.      40,  40,  40,   3,  59,  59,  59,  46,  //  93
  1956.      46,  46,  46,  46,  46,  40,  40,  40,  //  94
  1957.      40,  40,  40,  40,  40,  40,  40,  40,  //  94
  1958.      40,  40,  40,  40,  40,  40,  40,  40,  //  94
  1959.      40,  40,  40,  40,  40,  40,  40,  40,  //  94
  1960.      40,  40,  40,  40,  40,  40,  40,  40,  //  94
  1961.      40,  40,  40,  40,  40,  46,  46,  46,  //  94
  1962.      46,  40,  40,  40,  40,  40,  40,  40,  //  94
  1963.      40,  40,  40,  40,  40,  40,  40,  40,  //  94
  1964.      40,  40,  40,  40,  40,  40,  40,  40,  //  95
  1965.      40,  40,  40,  40,  40,  40,  40,  46,  //  95
  1966.      15,  15,  85,  85,  85,  85,  15,  15,  //  95
  1967.      15,  15,  15,  15,  15,  15,  15,  15,  //  95
  1968.      46,  46,  46,  46,  46,  46,  46,  46,  //  95
  1969.      46,  46,  46,  46,  46,  46,  46,  46,  //  95
  1970.      46,  46,  46,  46,  46,  46,  46,  46,  //  95
  1971.      46,  46,  46,  46,  46,  46,  46,  46,  //  95
  1972.      15,  15,  15,  15,  15,  15,  15,  15,  //  96
  1973.      15,  15,  15,  15,  15,  15,  15,  15,  //  96
  1974.      15,  15,  15,  15,  15,  15,  15,  15,  //  96
  1975.      15,  15,  15,  15,  15,  46,  46,  46,  //  96
  1976.      85,  85,  85,  85,  85,  85,  85,  85,  //  96
  1977.      85,  85,  15,  15,  15,  15,  15,  15,  //  96
  1978.      15,  15,  15,  15,  15,  15,  15,  15,  //  96
  1979.      15,  15,  15,  15,  15,  15,  15,  15,  //  96
  1980.      15,  15,  15,  15,  46,  46,  46,  46,  //  97
  1981.      46,  46,  46,  46,  46,  46,  46,  46,  //  97
  1982.      46,  46,  46,  46,  46,  46,  46,  46,  //  97
  1983.      46,  46,  46,  46,  46,  46,  46,  46,  //  97
  1984.      15,  15,  15,  15,  15,  15,  15,  15,  //  97
  1985.      15,  15,  15,  15,  15,  15,  15,  15,  //  97
  1986.      15,  15,  15,  15,  15,  15,  15,  15,  //  97
  1987.      15,  15,  15,  15,  46,  46,  46,  15,  //  97
  1988.     114, 114, 114, 114, 114, 114, 114, 114,  //  98
  1989.     114, 114,  15,  15,  15,  15,  15,  15,  //  98
  1990.      15,  15,  15,  15,  15,  15,  15,  15,  //  98
  1991.      15,  15,  15,  15,  15,  15,  15,  15,  //  98
  1992.      15,  15,  15,  15,  15,  15,  15,  15,  //  98
  1993.      15,  15,  15,  15,  15,  15,  15,  15,  //  98
  1994.      15,  46,  46,  46,  46,  46,  46,  46,  //  98
  1995.      46,  46,  46,  46,  46,  46,  46,  46,  //  98
  1996.      15,  15,  15,  15,  15,  15,  15,  15,  //  99
  1997.      15,  15,  15,  15,  46,  46,  46,  46,  //  99
  1998.      15,  15,  15,  15,  15,  15,  15,  15,  //  99
  1999.      15,  15,  15,  15,  15,  15,  15,  15,  //  99
  2000.      15,  15,  15,  15,  15,  15,  15,  15,  //  99
  2001.      15,  15,  15,  15,  15,  15,  15,  15,  //  99
  2002.      15,  15,  15,  15,  15,  15,  15,  15,  //  99
  2003.      15,  15,  15,  15,  15,  15,  15,  46,  //  99
  2004.      15,  15,  15,  15,  15,  15,  15,  15,  // 100
  2005.      15,  15,  15,  15,  15,  15,  15,  15,  // 100
  2006.      15,  15,  15,  15,  15,  15,  15,  15,  // 100
  2007.      15,  15,  15,  15,  15,  15,  15,  15,  // 100
  2008.      15,  15,  15,  15,  15,  15,  15,  15,  // 100
  2009.      15,  15,  15,  15,  15,  15,  15,  15,  // 100
  2010.      15,  15,  15,  15,  15,  15,  15,  46,  // 100
  2011.      46,  46,  46,  15,  15,  15,  15,  15,  // 100
  2012.      15,  15,  15,  15,  15,  15,  15,  15,  // 101
  2013.      15,  15,  15,  15,  15,  15,  15,  15,  // 101
  2014.      15,  15,  15,  15,  15,  15,  15,  15,  // 101
  2015.      15,  15,  15,  15,  15,  15,  46,  46,  // 101
  2016.      15,  15,  15,  15,  15,  15,  15,  15,  // 101
  2017.      15,  15,  15,  15,  15,  15,  15,  15,  // 101
  2018.      15,  15,  15,  15,  15,  15,  15,  15,  // 101
  2019.      15,  15,  15,  15,  15,  15,  15,  46,  // 101
  2020.      40,  40,  40,  40,  40,  40,  40,  40,  // 102
  2021.      40,  40,  40,  40,  40,  40,  40,  40,  // 102
  2022.      40,  40,  40,  40,  40,  40,  40,  40,  // 102
  2023.      40,  40,  40,  40,  40,  40,  40,  40,  // 102
  2024.      40,  40,  40,  40,  40,  40,  46,  46,  // 102
  2025.      46,  46,  46,  46,  46,  46,  46,  46,  // 102
  2026.      46,  46,  46,  46,  46,  46,  46,  46,  // 102
  2027.      46,  46,  46,  46,  46,  46,  46,  46,  // 102
  2028.      40,  40,  40,  40,  40,  40,  40,  40,  // 103
  2029.      40,  40,  40,  40,  40,  40,  40,  40,  // 103
  2030.      40,  40,  40,  40,  40,  40,  40,  40,  // 103
  2031.      40,  40,  40,  40,  40,  40,  40,  40,  // 103
  2032.      40,  40,  40,  40,  46,  46,  46,  46,  // 103
  2033.      46,  46,  46,  46,  46,  46,  46,  46,  // 103
  2034.      46,  46,  46,  46,  46,  46,  46,  46,  // 103
  2035.      46,  46,  46,  46,  46,  46,  46,  46,  // 103
  2036.     122, 122, 122, 122, 122, 122, 122, 122,  // 104
  2037.     122, 122, 122, 122, 122, 122, 122, 122,  // 104
  2038.     122, 122, 122, 122, 122, 122, 122, 122,  // 104
  2039.     122, 122, 122, 122, 122, 122, 122, 122,  // 104
  2040.     122, 122, 122, 122, 122, 122, 122, 122,  // 104
  2041.     122, 122, 122, 122, 122, 122, 122, 122,  // 104
  2042.     122, 122, 122, 122, 122, 122, 122, 122,  // 104
  2043.     122, 122, 122, 122, 122, 122, 122, 122,  // 104
  2044.     123, 123, 123, 123, 123, 123, 123, 123,  // 105
  2045.     123, 123, 123, 123, 123, 123, 123, 123,  // 105
  2046.     123, 123, 123, 123, 123, 123, 123, 123,  // 105
  2047.     123, 123, 123, 123, 123, 123, 123, 123,  // 105
  2048.     123, 123, 123, 123, 123, 123, 123, 123,  // 105
  2049.     123, 123, 123, 123, 123, 123, 123, 123,  // 105
  2050.     123, 123, 123, 123, 123, 123, 123, 123,  // 105
  2051.     123, 123, 123, 123, 123, 123, 123, 123,  // 105
  2052.      40,  40,  40,  40,  40,  40,  40,  40,  // 106
  2053.      40,  40,  40,  40,  40,  40,  40,  40,  // 106
  2054.      40,  40,  40,  40,  40,  40,  40,  40,  // 106
  2055.      40,  40,  40,  40,  40,  40,  40,  40,  // 106
  2056.      40,  40,  40,  40,  40,  40,  40,  40,  // 106
  2057.      40,  40,  40,  40,  40,  40,  46,  46,  // 106
  2058.      46,  46,  46,  46,  46,  46,  46,  46,  // 106
  2059.      46,  46,  46,  46,  46,  46,  46,  46,  // 106
  2060.      16,  16,  16,  16,  16,  16,  16,  46,  // 107
  2061.      46,  46,  46,  46,  46,  46,  46,  46,  // 107
  2062.      46,  46,  46,  16,  16,  16,  16,  16,  // 107
  2063.      46,  46,  46,  46,  46,  46,  60,  40,  // 107
  2064.      40,  40,  40,  40,  40,  40,  40,  40,  // 107
  2065.      40,   7,  40,  40,  40,  40,  40,  40,  // 107
  2066.      40,  40,  40,  40,  40,  40,  40,  46,  // 107
  2067.      40,  40,  40,  40,  40,  46,  40,  46,  // 107
  2068.      40,  40,  46,  40,  40,  46,  40,  40,  // 108
  2069.      40,  40,  40,  40,  40,  40,  40,  40,  // 108
  2070.      40,  40,  40,  40,  40,  40,  40,  40,  // 108
  2071.      40,  40,  40,  40,  40,  40,  40,  40,  // 108
  2072.      40,  40,  40,  40,  40,  40,  40,  40,  // 108
  2073.      40,  40,  40,  40,  40,  40,  40,  40,  // 108
  2074.      40,  40,  40,  40,  40,  40,  40,  40,  // 108
  2075.      40,  40,  40,  40,  40,  40,  40,  40,  // 108
  2076.      40,  40,  40,  40,  40,  40,  40,  40,  // 109
  2077.      40,  40,  40,  40,  40,  40,  40,  40,  // 109
  2078.      40,  40,  40,  40,  40,  40,  40,  40,  // 109
  2079.      40,  40,  40,  40,  40,  40,  40,  40,  // 109
  2080.      40,  40,  40,  40,  40,  40,  40,  40,  // 109
  2081.      40,  40,  40,  40,  40,  40,  40,  40,  // 109
  2082.      40,  40,  46,  46,  46,  46,  46,  46,  // 109
  2083.      46,  46,  46,  46,  46,  46,  46,  46,  // 109
  2084.      46,  46,  46,  46,  46,  46,  46,  46,  // 110
  2085.      46,  46,  46,  46,  46,  46,  46,  46,  // 110
  2086.      46,  46,  46,  40,  40,  40,  40,  40,  // 110
  2087.      40,  40,  40,  40,  40,  40,  40,  40,  // 110
  2088.      40,  40,  40,  40,  40,  40,  40,  40,  // 110
  2089.      40,  40,  40,  40,  40,  40,  40,  40,  // 110
  2090.      40,  40,  40,  40,  40,  40,  40,  40,  // 110
  2091.      40,  40,  40,  40,  40,  40,  40,  40,  // 110
  2092.      40,  40,  40,  40,  40,  40,  40,  40,  // 111
  2093.      40,  40,  40,  40,  40,  40,  40,  40,  // 111
  2094.      40,  40,  40,  40,  40,  40,  40,  40,  // 111
  2095.      40,  40,  40,  40,  40,  40,  40,  40,  // 111
  2096.      40,  40,  40,  40,  40,  40,  40,  40,  // 111
  2097.      40,  40,  40,  40,  40,  40,  40,  40,  // 111
  2098.      40,  40,  40,  40,  40,  40,  40,  40,  // 111
  2099.      40,  40,  40,  40,  40,  40,   5,   6,  // 111
  2100.      46,  46,  46,  46,  46,  46,  46,  46,  // 112
  2101.      46,  46,  46,  46,  46,  46,  46,  46,  // 112
  2102.      40,  40,  40,  40,  40,  40,  40,  40,  // 112
  2103.      40,  40,  40,  40,  40,  40,  40,  40,  // 112
  2104.      40,  40,  40,  40,  40,  40,  40,  40,  // 112
  2105.      40,  40,  40,  40,  40,  40,  40,  40,  // 112
  2106.      40,  40,  40,  40,  40,  40,  40,  40,  // 112
  2107.      40,  40,  40,  40,  40,  40,  40,  40,  // 112
  2108.      40,  40,  40,  40,  40,  40,  40,  40,  // 113
  2109.      40,  40,  40,  40,  40,  40,  40,  40,  // 113
  2110.      46,  46,  40,  40,  40,  40,  40,  40,  // 113
  2111.      40,  40,  40,  40,  40,  40,  40,  40,  // 113
  2112.      40,  40,  40,  40,  40,  40,  40,  40,  // 113
  2113.      40,  40,  40,  40,  40,  40,  40,  40,  // 113
  2114.      40,  40,  40,  40,  40,  40,  40,  40,  // 113
  2115.      40,  40,  40,  40,  40,  40,  40,  40,  // 113
  2116.      40,  40,  40,  40,  40,  40,  40,  40,  // 114
  2117.      46,  46,  46,  46,  46,  46,  46,  46,  // 114
  2118.      46,  46,  46,  46,  46,  46,  46,  46,  // 114
  2119.      46,  46,  46,  46,  46,  46,  46,  46,  // 114
  2120.      46,  46,  46,  46,  46,  46,  46,  46,  // 114
  2121.      46,  46,  46,  46,  46,  46,  46,  46,  // 114
  2122.      40,  40,  40,  40,  40,  40,  40,  40,  // 114
  2123.      40,  40,  40,  40,  46,  46,  46,  46,  // 114
  2124.      46,  46,  46,  46,  46,  46,  46,  46,  // 115
  2125.      46,  46,  46,  46,  46,  46,  46,  46,  // 115
  2126.      46,  46,  46,  46,  46,  46,  46,  46,  // 115
  2127.      46,  46,  46,  46,  46,  46,  46,  46,  // 115
  2128.      60,  60,  60,  60,  46,  46,  46,  46,  // 115
  2129.      46,  46,  46,  46,  46,  46,  46,  46,  // 115
  2130.       3,   8,   8,  12,  12,   5,   6,   5,  // 115
  2131.       6,   5,   6,   5,   6,   5,   6,   5,  // 115
  2132.       6,   5,   6,   5,   6,  46,  46,  46,  // 116
  2133.      46,   3,   3,   3,   3,  12,  12,  12,  // 116
  2134.       3,   3,   3,  46,   3,   3,   3,   3,  // 116
  2135.       8,   5,   6,   5,   6,   5,   6,   3,  // 116
  2136.       3,   3,   7,   8,   7,   7,   7,  46,  // 116
  2137.       3,   4,   3,   3,  46,  46,  46,  46,  // 116
  2138.      40,  40,  40,  46,  40,  46,  40,  40,  // 116
  2139.      40,  40,  40,  40,  40,  40,  40,  40,  // 116
  2140.      40,  40,  40,  40,  40,  40,  40,  40,  // 117
  2141.      40,  40,  40,  40,  40,  40,  40,  40,  // 117
  2142.      40,  40,  40,  40,  40,  40,  40,  40,  // 117
  2143.      40,  40,  40,  40,  40,  40,  40,  40,  // 117
  2144.      40,  40,  40,  40,  40,  40,  40,  40,  // 117
  2145.      40,  40,  40,  40,  40,  40,  40,  40,  // 117
  2146.      40,  40,  40,  40,  40,  40,  40,  40,  // 117
  2147.      40,  40,  40,  40,  40,  46,  46, 104,  // 117
  2148.      46,   3,   3,   3,   4,   3,   3,   3,  // 118
  2149.       5,   6,   3,   7,   3,   8,   3,   3,  // 118
  2150.       9,   9,   9,   9,   9,   9,   9,   9,  // 118
  2151.       9,   9,   3,   3,   7,   7,   7,   3,  // 118
  2152.       3,  10,  10,  10,  10,  10,  10,  10,  // 118
  2153.      10,  10,  10,  10,  10,  10,  10,  10,  // 118
  2154.      10,  10,  10,  10,  10,  10,  10,  10,  // 118
  2155.      10,  10,  10,   5,   3,   6,  11,  12,  // 118
  2156.      11,  13,  13,  13,  13,  13,  13,  13,  // 119
  2157.      13,  13,  13,  13,  13,  13,  13,  13,  // 119
  2158.      13,  13,  13,  13,  13,  13,  13,  13,  // 119
  2159.      13,  13,  13,   5,   7,   6,   7,  46,  // 119
  2160.      46,   3,   5,   6,   3,   3,  40,  40,  // 119
  2161.      40,  40,  40,  40,  40,  40,  40,  40,  // 119
  2162.      59,  40,  40,  40,  40,  40,  40,  40,  // 119
  2163.      40,  40,  40,  40,  40,  40,  40,  40,  // 119
  2164.      40,  40,  40,  40,  40,  40,  40,  40,  // 120
  2165.      40,  40,  40,  40,  40,  40,  40,  40,  // 120
  2166.      40,  40,  40,  40,  40,  40,  40,  40,  // 120
  2167.      40,  40,  40,  40,  40,  40,  59,  59,  // 120
  2168.      40,  40,  40,  40,  40,  40,  40,  40,  // 120
  2169.      40,  40,  40,  40,  40,  40,  40,  40,  // 120
  2170.      40,  40,  40,  40,  40,  40,  40,  40,  // 120
  2171.      40,  40,  40,  40,  40,  40,  40,  46,  // 120
  2172.      46,  46,  40,  40,  40,  40,  40,  40,  // 121
  2173.      46,  46,  40,  40,  40,  40,  40,  40,  // 121
  2174.      46,  46,  40,  40,  40,  40,  40,  40,  // 121
  2175.      46,  46,  40,  40,  40,  46,  46,  46,  // 121
  2176.       4,   4,   7,  11,  15,   4,   4,  46,  // 121
  2177.       7,   7,   7,   7,   7,  15,  15,  46,  // 121
  2178.      46,  46,  46,  46,  46,  46,  46,  46,  // 121
  2179.      46,  46,  46,  46,  46,  15,  46,  46   // 121
  2180.   };
  2181.  
  2182.   // The A table has 124 entries for a total of 496 bytes.
  2183.  
  2184.   private static final int A[] = {
  2185.     0x0001000F,  //   0   Cc, ignorable
  2186.     0x0004000F,  //   1   Cc, whitespace
  2187.     0x0004000C,  //   2   Zs, whitespace
  2188.     0x00000018,  //   3   Po
  2189.     0x0006001A,  //   4   Sc, currency
  2190.     0x00000015,  //   5   Ps
  2191.     0x00000016,  //   6   Pe
  2192.     0x00000019,  //   7   Sm
  2193.     0x00000014,  //   8   Pd
  2194.     0x00036009,  //   9   Nd, identifier part, decimal 16
  2195.     0x0827FE01,  //  10   Lu, hasLower (add 32), identifier start, supradecimal 31
  2196.     0x0000001B,  //  11   Sk
  2197.     0x00050017,  //  12   Pc, underscore
  2198.     0x0817FE02,  //  13   Ll, hasUpper (subtract 32), identifier start, supradecimal 31
  2199.     0x0000000C,  //  14   Zs
  2200.     0x0000001C,  //  15   So
  2201.     0x00070002,  //  16   Ll, identifier start
  2202.     0x0000600B,  //  17   No, decimal 16
  2203.     0x0000500B,  //  18   No, decimal 8
  2204.     0x0000800B,  //  19   No, strange
  2205.     0x08270001,  //  20   Lu, hasLower (add 32), identifier start
  2206.     0x08170002,  //  21   Ll, hasUpper (subtract 32), identifier start
  2207.     0xE1D70002,  //  22   Ll, hasUpper (subtract -121), identifier start
  2208.     0x00670001,  //  23   Lu, hasLower (add 1), identifier start
  2209.     0x00570002,  //  24   Ll, hasUpper (subtract 1), identifier start
  2210.     0xCE670001,  //  25   Lu, hasLower (add -199), identifier start
  2211.     0x3A170002,  //  26   Ll, hasUpper (subtract 232), identifier start
  2212.     0xE1E70001,  //  27   Lu, hasLower (add -121), identifier start
  2213.     0x4B170002,  //  28   Ll, hasUpper (subtract 300), identifier start
  2214.     0x34A70001,  //  29   Lu, hasLower (add 210), identifier start
  2215.     0x33A70001,  //  30   Lu, hasLower (add 206), identifier start
  2216.     0x33670001,  //  31   Lu, hasLower (add 205), identifier start
  2217.     0x32A70001,  //  32   Lu, hasLower (add 202), identifier start
  2218.     0x32E70001,  //  33   Lu, hasLower (add 203), identifier start
  2219.     0x33E70001,  //  34   Lu, hasLower (add 207), identifier start
  2220.     0x34E70001,  //  35   Lu, hasLower (add 211), identifier start
  2221.     0x34670001,  //  36   Lu, hasLower (add 209), identifier start
  2222.     0x35670001,  //  37   Lu, hasLower (add 213), identifier start
  2223.     0x00070001,  //  38   Lu, identifier start
  2224.     0x36A70001,  //  39   Lu, hasLower (add 218), identifier start
  2225.     0x00070005,  //  40   Lo, identifier start
  2226.     0x36670001,  //  41   Lu, hasLower (add 217), identifier start
  2227.     0x36E70001,  //  42   Lu, hasLower (add 219), identifier start
  2228.     0x00AF0001,  //  43   Lu, hasLower (add 2), hasTitle, identifier start
  2229.     0x007F0003,  //  44   Lt, hasUpper (subtract 1), hasLower (add 1), hasTitle, identifier start
  2230.     0x009F0002,  //  45   Ll, hasUpper (subtract 2), hasTitle, identifier start
  2231.     0x00000000,  //  46   unassigned
  2232.     0x34970002,  //  47   Ll, hasUpper (subtract 210), identifier start
  2233.     0x33970002,  //  48   Ll, hasUpper (subtract 206), identifier start
  2234.     0x33570002,  //  49   Ll, hasUpper (subtract 205), identifier start
  2235.     0x32970002,  //  50   Ll, hasUpper (subtract 202), identifier start
  2236.     0x32D70002,  //  51   Ll, hasUpper (subtract 203), identifier start
  2237.     0x33D70002,  //  52   Ll, hasUpper (subtract 207), identifier start
  2238.     0x34570002,  //  53   Ll, hasUpper (subtract 209), identifier start
  2239.     0x34D70002,  //  54   Ll, hasUpper (subtract 211), identifier start
  2240.     0x35570002,  //  55   Ll, hasUpper (subtract 213), identifier start
  2241.     0x36970002,  //  56   Ll, hasUpper (subtract 218), identifier start
  2242.     0x36570002,  //  57   Ll, hasUpper (subtract 217), identifier start
  2243.     0x36D70002,  //  58   Ll, hasUpper (subtract 219), identifier start
  2244.     0x00070004,  //  59   Lm, identifier start
  2245.     0x00030006,  //  60   Mn, identifier part
  2246.     0x09A70001,  //  61   Lu, hasLower (add 38), identifier start
  2247.     0x09670001,  //  62   Lu, hasLower (add 37), identifier start
  2248.     0x10270001,  //  63   Lu, hasLower (add 64), identifier start
  2249.     0x0FE70001,  //  64   Lu, hasLower (add 63), identifier start
  2250.     0x09970002,  //  65   Ll, hasUpper (subtract 38), identifier start
  2251.     0x09570002,  //  66   Ll, hasUpper (subtract 37), identifier start
  2252.     0x10170002,  //  67   Ll, hasUpper (subtract 64), identifier start
  2253.     0x0FD70002,  //  68   Ll, hasUpper (subtract 63), identifier start
  2254.     0x0F970002,  //  69   Ll, hasUpper (subtract 62), identifier start
  2255.     0x0E570002,  //  70   Ll, hasUpper (subtract 57), identifier start
  2256.     0x0BD70002,  //  71   Ll, hasUpper (subtract 47), identifier start
  2257.     0x0D970002,  //  72   Ll, hasUpper (subtract 54), identifier start
  2258.     0x15970002,  //  73   Ll, hasUpper (subtract 86), identifier start
  2259.     0x14170002,  //  74   Ll, hasUpper (subtract 80), identifier start
  2260.     0x14270001,  //  75   Lu, hasLower (add 80), identifier start
  2261.     0x0C270001,  //  76   Lu, hasLower (add 48), identifier start
  2262.     0x0C170002,  //  77   Ll, hasUpper (subtract 48), identifier start
  2263.     0x00034009,  //  78   Nd, identifier part, decimal 0
  2264.     0x00000007,  //  79   Me
  2265.     0x00030008,  //  80   Mc, identifier part
  2266.     0x00037409,  //  81   Nd, identifier part, decimal 26
  2267.     0x00005A0B,  //  82   No, decimal 13
  2268.     0x00006E0B,  //  83   No, decimal 23
  2269.     0x0000740B,  //  84   No, decimal 26
  2270.     0x0000000B,  //  85   No
  2271.     0xFE170002,  //  86   Ll, hasUpper (subtract -8), identifier start
  2272.     0xFE270001,  //  87   Lu, hasLower (add -8), identifier start
  2273.     0xED970002,  //  88   Ll, hasUpper (subtract -74), identifier start
  2274.     0xEA970002,  //  89   Ll, hasUpper (subtract -86), identifier start
  2275.     0xE7170002,  //  90   Ll, hasUpper (subtract -100), identifier start
  2276.     0xE0170002,  //  91   Ll, hasUpper (subtract -128), identifier start
  2277.     0xE4170002,  //  92   Ll, hasUpper (subtract -112), identifier start
  2278.     0xE0970002,  //  93   Ll, hasUpper (subtract -126), identifier start
  2279.     0xFDD70002,  //  94   Ll, hasUpper (subtract -9), identifier start
  2280.     0xEDA70001,  //  95   Lu, hasLower (add -74), identifier start
  2281.     0xFDE70001,  //  96   Lu, hasLower (add -9), identifier start
  2282.     0xEAA70001,  //  97   Lu, hasLower (add -86), identifier start
  2283.     0xE7270001,  //  98   Lu, hasLower (add -100), identifier start
  2284.     0xFE570002,  //  99   Ll, hasUpper (subtract -7), identifier start
  2285.     0xE4270001,  // 100   Lu, hasLower (add -112), identifier start
  2286.     0xFE670001,  // 101   Lu, hasLower (add -7), identifier start
  2287.     0xE0270001,  // 102   Lu, hasLower (add -128), identifier start
  2288.     0xE0A70001,  // 103   Lu, hasLower (add -126), identifier start
  2289.     0x00010010,  // 104   Cf, ignorable
  2290.     0x0004000D,  // 105   Zl, whitespace
  2291.     0x0004000E,  // 106   Zp, whitespace
  2292.     0x0000400B,  // 107   No, decimal 0
  2293.     0x0000440B,  // 108   No, decimal 2
  2294.     0x0427420A,  // 109   Nl, hasLower (add 16), identifier start, decimal 1
  2295.     0x0427800A,  // 110   Nl, hasLower (add 16), identifier start, strange
  2296.     0x0417620A,  // 111   Nl, hasUpper (subtract 16), identifier start, decimal 17
  2297.     0x0417800A,  // 112   Nl, hasUpper (subtract 16), identifier start, strange
  2298.     0x0007800A,  // 113   Nl, identifier start, strange
  2299.     0x0000420B,  // 114   No, decimal 1
  2300.     0x0000720B,  // 115   No, decimal 25
  2301.     0x06A0001C,  // 116   So, hasLower (add 26)
  2302.     0x0690001C,  // 117   So, hasUpper (subtract 26)
  2303.     0x00006C0B,  // 118   No, decimal 22
  2304.     0x0000560B,  // 119   No, decimal 11
  2305.     0x0007720A,  // 120   Nl, identifier start, decimal 25
  2306.     0x0007400A,  // 121   Nl, identifier start, decimal 0
  2307.     0x00000013,  // 122   Cs
  2308.     0x00000012   // 123   Co
  2309.   };
  2310.  
  2311.   // In all, the character property tables require 9328 bytes.
  2312.  
  2313. }
  2314.