Open Source Repository

Home /xom/xom-1.1 | Repository Home



nu/xom/UnicodeUtil.java
/* Copyright 2005 Elliotte Rusty Harold
   
   This library is free software; you can redistribute it and/or modify
   it under the terms of version 2.1 of the GNU Lesser General Public 
   License as published by the Free Software Foundation.
   
   This library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
   GNU Lesser General Public License for more details.
   
   You should have received a copy of the GNU Lesser General Public
   License along with this library; if not, write to the 
   Free Software Foundation, Inc., 59 Temple Place, Suite 330, 
   Boston, MA 02111-1307  USA
   
   You can contact Elliotte Rusty Harold by sending e-mail to
   [email protected]. Please include the word "XOM" in the
   subject line. The XOM home page is located at http://www.xom.nu/
*/

package nu.xom;

import java.io.InputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.util.Map;
import java.util.HashMap;

/**
 <p>
 *   
 </p>
 
 @author Elliotte Rusty Harold
 @version 1.1b1
 *
 */
final class UnicodeUtil {
    
    
    private static final int CANONICAL_COMBINING_CLASS_NOT_REORDERED = 0;
    private static final int CANONICAL_COMBINING_CLASS_OVERLAY = 1;
    private static final int CANONICAL_COMBINING_CLASS_NUKTA = 7;
    private static final int CANONICAL_COMBINING_CLASS_KANA_VOICING = 8;
    private final static int CANONICAL_COMBINING_CLASS_VIRAMA = 9;
    private final static int CANONICAL_COMBINING_CLASS_10 = 10;
    private final static int CANONICAL_COMBINING_CLASS_11 = 11;
    private final static int CANONICAL_COMBINING_CLASS_12 = 12;
    private final static int CANONICAL_COMBINING_CLASS_13 = 13;
    private final static int CANONICAL_COMBINING_CLASS_14 = 14;
    private final static int CANONICAL_COMBINING_CLASS_15 = 15;
    private final static int CANONICAL_COMBINING_CLASS_16 = 16;
    private final static int CANONICAL_COMBINING_CLASS_17 = 17;
    private final static int CANONICAL_COMBINING_CLASS_18 = 18;
    private final static int CANONICAL_COMBINING_CLASS_19 = 19;
    private final static int CANONICAL_COMBINING_CLASS_20 = 20;
    private final static int CANONICAL_COMBINING_CLASS_21 = 21;
    private final static int CANONICAL_COMBINING_CLASS_22 = 22;
    private final static int CANONICAL_COMBINING_CLASS_23 = 23;
    private final static int CANONICAL_COMBINING_CLASS_24 = 24;
    private final static int CANONICAL_COMBINING_CLASS_25 = 25;
    private final static int CANONICAL_COMBINING_CLASS_26 = 26;
    private final static int CANONICAL_COMBINING_CLASS_27 = 27;
    private final static int CANONICAL_COMBINING_CLASS_28 = 28;
    private final static int CANONICAL_COMBINING_CLASS_29 = 29;
    private final static int CANONICAL_COMBINING_CLASS_30 = 30;
    private final static int CANONICAL_COMBINING_CLASS_31 = 31;
    private final static int CANONICAL_COMBINING_CLASS_32 = 32;
    private final static int CANONICAL_COMBINING_CLASS_33 = 33;
    private final static int CANONICAL_COMBINING_CLASS_34 = 34;
    private final static int CANONICAL_COMBINING_CLASS_35 = 35;
    private final static int CANONICAL_COMBINING_CLASS_36 = 36;
    private final static int CANONICAL_COMBINING_CLASS_84 = 84;
    private final static int CANONICAL_COMBINING_CLASS_91 = 91;
    private final static int CANONICAL_COMBINING_CLASS_103 = 103;
    private final static int CANONICAL_COMBINING_CLASS_107 = 107;
    private final static int CANONICAL_COMBINING_CLASS_118 = 118;
    private final static int CANONICAL_COMBINING_CLASS_122 = 122;
    private final static int CANONICAL_COMBINING_CLASS_129 = 129;
    private final static int CANONICAL_COMBINING_CLASS_130 = 130;
    private final static int CANONICAL_COMBINING_CLASS_132 = 132;
    private final static int CANONICAL_COMBINING_CLASS_ATTACHED_BELOW = 202;
    private final static int CANONICAL_COMBINING_CLASS_BELOW_LEFT = 218;


    private static boolean isHighSurrogate(char c) {
        return c >= HI_SURROGATE_START && c <= HI_SURROGATE_END;
    }
    private final static int CANONICAL_COMBINING_CLASS_BELOW = 220;
    private final static int CANONICAL_COMBINING_CLASS_BELOW_RIGHT = 222;
    private final static int CANONICAL_COMBINING_CLASS_LEFT = 224;
    private final static int CANONICAL_COMBINING_CLASS_RIGHT = 226;
    private final static int CANONICAL_COMBINING_CLASS_ABOVE_LEFT = 228;
    private final static int CANONICAL_COMBINING_CLASS_ABOVE = 230;
    private final static int CANONICAL_COMBINING_CLASS_ABOVE_RIGHT = 232;
    private static final int CANONICAL_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT = 216;
    private final static int CANONICAL_COMBINING_CLASS_DOUBLE_BELOW = 233;
    private final static int CANONICAL_COMBINING_CLASS_DOUBLE_ABOVE = 234;
    private final static int CANONICAL_COMBINING_CLASS_IOTA_SUBSCRIPT = 240;
    
    private static int HI_SURROGATE_START  = 0xD800;
    private static int HI_SURROGATE_END    = 0xDBFF;
    private static int LOW_SURROGATE_START = 0xDC00;
    
    
    private static Map compositions;
    
    private static void loadCompositions() {
    
        ClassLoader loader = Verifier.class.getClassLoader();
        if (loader != nullloadCompositions(loader);
        // If that didn't work, try a different ClassLoader
        if (compositions == null) {
            loader = Thread.currentThread().getContextClassLoader();
            loadCompositions(loader);
        }
        if (compositions == null) { 
            throw new RuntimeException("Broken XOM installation: "
              "could not load nu/xom/compositions.dat");
        }
        
    }
    
    
    private static void loadCompositions(ClassLoader loader) {
        
        DataInputStream in = null;
        try {
            InputStream source = loader.getResourceAsStream("nu/xom/compositions.dat");
            in = new DataInputStream(source);
            // ???? would it make sense to store a serialized HashMap instead????
            compositions = new HashMap();
            try {
                while (true) {
                    String composed = in.readUTF();
                    String decomposed = in.readUTF();
                    compositions.put(decomposed, composed);
                }
            }
            catch (java.io.EOFException ex) {
                // finished
            }
        }
        catch (IOException ex) {
            return;
        }
        finally {
            try {
                if (in != nullin.close();
            }
            catch (IOException ex) {
                // no big deal
            }
        }
        
    }
    

    private static boolean isStarter(int character) {
        return getCombiningClass(character== 0;
    }

    
    ///CLOVER:OFF
    private static int getCombiningClass(int c) {
        // ???? optimize
        
        if (c >= 0x0000 && c <= 0x001Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0020return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0021 && c <= 0x0023return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0024return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0025 && c <= 0x0027return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0028return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0029return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x002Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x002Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x002Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x002Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x002E && c <= 0x002Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0030 && c <= 0x0039return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x003A && c <= 0x003Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x003C && c <= 0x003Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x003F && c <= 0x0040return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0041 && c <= 0x005Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x005Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x005Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x005Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x005Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x005Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0060return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0061 && c <= 0x007Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x007Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x007Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x007Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x007Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x007F && c <= 0x009Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x00A0return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x00A1return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x00A2 && c <= 0x00A5return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x00A6 && c <= 0x00A7return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x00A8return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x00A9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x00AAreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x00ABreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x00ACreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x00ADreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x00AEreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x00AFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x00B0return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x00B1return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x00B2 && c <= 0x00B3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x00B4return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x00B5return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x00B6return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x00B7return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x00B8return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x00B9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x00BAreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x00BBreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x00BC && c <= 0x00BEreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x00BFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x00C0 && c <= 0x00D6return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x00D7return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x00D8 && c <= 0x00F6return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x00F7return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x00F8 && c <= 0x01BAreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x01BBreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x01BC && c <= 0x01BFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x01C0 && c <= 0x01C3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x01C4 && c <= 0x0236return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0250 && c <= 0x02AFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x02B0 && c <= 0x02C1return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x02C2 && c <= 0x02C5return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x02C6 && c <= 0x02D1return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x02D2 && c <= 0x02DFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x02E0 && c <= 0x02E4return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x02E5 && c <= 0x02EDreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x02EEreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x02EF && c <= 0x02FFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x034Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0374 && c <= 0x0375return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x037Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x037Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0384 && c <= 0x0385return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0386return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0387return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0388 && c <= 0x038Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x038Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x038E && c <= 0x03A1return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x03A3 && c <= 0x03CEreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x03D0 && c <= 0x03F5return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x03F6return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x03F7 && c <= 0x03FBreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0400 && c <= 0x0481return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0482return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0488 && c <= 0x0489return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x048A && c <= 0x04CEreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x04D0 && c <= 0x04F5return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x04F8 && c <= 0x04F9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0500 && c <= 0x050Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0531 && c <= 0x0556return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0559return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x055A && c <= 0x055Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0561 && c <= 0x0587return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0589return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x058Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x05BEreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x05C0return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x05C3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x05D0 && c <= 0x05EAreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x05F0 && c <= 0x05F2return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x05F3 && c <= 0x05F4return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0600 && c <= 0x0603return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x060C && c <= 0x060Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x060E && c <= 0x060Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x061Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x061Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0621 && c <= 0x063Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0640return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0641 && c <= 0x064Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0660 && c <= 0x0669return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x066A && c <= 0x066Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x066E && c <= 0x066Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0671 && c <= 0x06D3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x06D4return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x06D5return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x06DDreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x06DEreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x06E5 && c <= 0x06E6return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x06E9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x06EE && c <= 0x06EFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x06F0 && c <= 0x06F9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x06FA && c <= 0x06FCreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x06FD && c <= 0x06FEreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x06FFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0700 && c <= 0x070Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x070Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0710return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0712 && c <= 0x072Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x074D && c <= 0x074Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0780 && c <= 0x07A5return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x07A6 && c <= 0x07B0return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x07B1return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0901 && c <= 0x0902return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0903return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0904 && c <= 0x0939return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x093Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x093E && c <= 0x0940return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0941 && c <= 0x0948return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0949 && c <= 0x094Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0950return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0958 && c <= 0x0961return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0962 && c <= 0x0963return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0964 && c <= 0x0965return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0966 && c <= 0x096Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0970return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0981return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0982 && c <= 0x0983return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0985 && c <= 0x098Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x098F && c <= 0x0990return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0993 && c <= 0x09A8return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x09AA && c <= 0x09B0return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x09B2return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x09B6 && c <= 0x09B9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x09BDreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x09BE && c <= 0x09C0return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x09C1 && c <= 0x09C4return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x09C7 && c <= 0x09C8return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x09CB && c <= 0x09CCreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x09D7return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x09DC && c <= 0x09DDreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x09DF && c <= 0x09E1return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x09E2 && c <= 0x09E3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x09E6 && c <= 0x09EFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x09F0 && c <= 0x09F1return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x09F2 && c <= 0x09F3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x09F4 && c <= 0x09F9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x09FAreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0A01 && c <= 0x0A02return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0A03return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0A05 && c <= 0x0A0Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0A0F && c <= 0x0A10return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0A13 && c <= 0x0A28return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0A2A && c <= 0x0A30return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0A32 && c <= 0x0A33return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0A35 && c <= 0x0A36return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0A38 && c <= 0x0A39return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0A3E && c <= 0x0A40return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0A41 && c <= 0x0A42return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0A47 && c <= 0x0A48return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0A4B && c <= 0x0A4Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0A59 && c <= 0x0A5Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0A5Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0A66 && c <= 0x0A6Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0A70 && c <= 0x0A71return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0A72 && c <= 0x0A74return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0A81 && c <= 0x0A82return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0A83return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0A85 && c <= 0x0A8Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0A8F && c <= 0x0A91return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0A93 && c <= 0x0AA8return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0AAA && c <= 0x0AB0return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0AB2 && c <= 0x0AB3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0AB5 && c <= 0x0AB9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0ABDreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0ABE && c <= 0x0AC0return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0AC1 && c <= 0x0AC5return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0AC7 && c <= 0x0AC8return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0AC9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0ACB && c <= 0x0ACCreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0AD0return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0AE0 && c <= 0x0AE1return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0AE2 && c <= 0x0AE3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0AE6 && c <= 0x0AEFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0AF1return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0B01return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0B02 && c <= 0x0B03return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0B05 && c <= 0x0B0Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0B0F && c <= 0x0B10return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0B13 && c <= 0x0B28return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0B2A && c <= 0x0B30return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0B32 && c <= 0x0B33return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0B35 && c <= 0x0B39return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0B3Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0B3Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0B3Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0B40return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0B41 && c <= 0x0B43return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0B47 && c <= 0x0B48return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0B4B && c <= 0x0B4Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0B56return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0B57return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0B5C && c <= 0x0B5Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0B5F && c <= 0x0B61return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0B66 && c <= 0x0B6Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0B70return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0B71return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0B82return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0B83return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0B85 && c <= 0x0B8Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0B8E && c <= 0x0B90return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0B92 && c <= 0x0B95return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0B99 && c <= 0x0B9Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0B9Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0B9E && c <= 0x0B9Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0BA3 && c <= 0x0BA4return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0BA8 && c <= 0x0BAAreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0BAE && c <= 0x0BB5return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0BB7 && c <= 0x0BB9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0BBE && c <= 0x0BBFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0BC0return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0BC1 && c <= 0x0BC2return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0BC6 && c <= 0x0BC8return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0BCA && c <= 0x0BCCreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0BD7return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0BE7 && c <= 0x0BEFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0BF0 && c <= 0x0BF2return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0BF3 && c <= 0x0BF8return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0BF9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0BFAreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0C01 && c <= 0x0C03return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0C05 && c <= 0x0C0Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0C0E && c <= 0x0C10return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0C12 && c <= 0x0C28return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0C2A && c <= 0x0C33return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0C35 && c <= 0x0C39return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0C3E && c <= 0x0C40return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0C41 && c <= 0x0C44return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0C46 && c <= 0x0C48return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0C4A && c <= 0x0C4Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0C60 && c <= 0x0C61return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0C66 && c <= 0x0C6Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0C82 && c <= 0x0C83return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0C85 && c <= 0x0C8Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0C8E && c <= 0x0C90return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0C92 && c <= 0x0CA8return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0CAA && c <= 0x0CB3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0CB5 && c <= 0x0CB9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0CBDreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0CBEreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0CBFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0CC0 && c <= 0x0CC4return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0CC6return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0CC7 && c <= 0x0CC8return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0CCA && c <= 0x0CCBreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0CCCreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0CD5 && c <= 0x0CD6return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0CDEreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0CE0 && c <= 0x0CE1return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0CE6 && c <= 0x0CEFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0D02 && c <= 0x0D03return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0D05 && c <= 0x0D0Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0D0E && c <= 0x0D10return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0D12 && c <= 0x0D28return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0D2A && c <= 0x0D39return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0D3E && c <= 0x0D40return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0D41 && c <= 0x0D43return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0D46 && c <= 0x0D48return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0D4A && c <= 0x0D4Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0D57return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0D60 && c <= 0x0D61return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0D66 && c <= 0x0D6Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0D82 && c <= 0x0D83return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0D85 && c <= 0x0D96return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0D9A && c <= 0x0DB1return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0DB3 && c <= 0x0DBBreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0DBDreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0DC0 && c <= 0x0DC6return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0DCF && c <= 0x0DD1return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0DD2 && c <= 0x0DD4return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0DD6return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0DD8 && c <= 0x0DDFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0DF2 && c <= 0x0DF3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0DF4return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0E01 && c <= 0x0E30return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0E31return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0E32 && c <= 0x0E33return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0E34 && c <= 0x0E37return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0E3Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0E40 && c <= 0x0E45return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0E46return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0E47return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0E4C && c <= 0x0E4Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0E4Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0E50 && c <= 0x0E59return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0E5A && c <= 0x0E5Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0E81 && c <= 0x0E82return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0E84return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0E87 && c <= 0x0E88return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0E8Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0E8Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0E94 && c <= 0x0E97return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0E99 && c <= 0x0E9Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0EA1 && c <= 0x0EA3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0EA5return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0EA7return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0EAA && c <= 0x0EABreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0EAD && c <= 0x0EB0return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0EB1return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0EB2 && c <= 0x0EB3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0EB4 && c <= 0x0EB7return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0EBB && c <= 0x0EBCreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0EBDreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0EC0 && c <= 0x0EC4return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0EC6return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0ECC && c <= 0x0ECDreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0ED0 && c <= 0x0ED9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0EDC && c <= 0x0EDDreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0F00return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0F01 && c <= 0x0F03return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0F04 && c <= 0x0F12return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0F13 && c <= 0x0F17return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0F1A && c <= 0x0F1Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0F20 && c <= 0x0F29return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0F2A && c <= 0x0F33return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0F34return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0F36return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0F38return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0F3Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0F3Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0F3Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0F3Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0F3E && c <= 0x0F3Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0F40 && c <= 0x0F47return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0F49 && c <= 0x0F6Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0F73return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0F75 && c <= 0x0F79return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0F7Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0F7Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0F81return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0F85return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0F88 && c <= 0x0F8Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0F90 && c <= 0x0F97return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0F99 && c <= 0x0FBCreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0FBE && c <= 0x0FC5return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0FC7 && c <= 0x0FCCreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x0FCFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1000 && c <= 0x1021return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1023 && c <= 0x1027return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1029 && c <= 0x102Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x102Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x102D && c <= 0x1030return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x1031return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x1032return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x1036return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x1038return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1040 && c <= 0x1049return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x104A && c <= 0x104Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1050 && c <= 0x1055return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1056 && c <= 0x1057return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1058 && c <= 0x1059return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x10A0 && c <= 0x10C5return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x10D0 && c <= 0x10F8return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x10FBreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1100 && c <= 0x1159return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x115F && c <= 0x11A2return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x11A8 && c <= 0x11F9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1200 && c <= 0x1206return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1208 && c <= 0x1246return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x1248return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x124A && c <= 0x124Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1250 && c <= 0x1256return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x1258return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x125A && c <= 0x125Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1260 && c <= 0x1286return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x1288return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x128A && c <= 0x128Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1290 && c <= 0x12AEreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x12B0return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x12B2 && c <= 0x12B5return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x12B8 && c <= 0x12BEreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x12C0return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x12C2 && c <= 0x12C5return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x12C8 && c <= 0x12CEreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x12D0 && c <= 0x12D6return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x12D8 && c <= 0x12EEreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x12F0 && c <= 0x130Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x1310return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1312 && c <= 0x1315return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1318 && c <= 0x131Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1320 && c <= 0x1346return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1348 && c <= 0x135Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1361 && c <= 0x1368return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1369 && c <= 0x1371return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1372 && c <= 0x137Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x13A0 && c <= 0x13F4return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1401 && c <= 0x166Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x166D && c <= 0x166Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x166F && c <= 0x1676return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x1680return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1681 && c <= 0x169Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x169Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x169Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x16A0 && c <= 0x16EAreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x16EB && c <= 0x16EDreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x16EE && c <= 0x16F0return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1700 && c <= 0x170Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x170E && c <= 0x1711return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1712 && c <= 0x1713return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1720 && c <= 0x1731return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1732 && c <= 0x1733return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1735 && c <= 0x1736return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1740 && c <= 0x1751return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1752 && c <= 0x1753return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1760 && c <= 0x176Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x176E && c <= 0x1770return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1772 && c <= 0x1773return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1780 && c <= 0x17B3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x17B4 && c <= 0x17B5return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x17B6return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x17B7 && c <= 0x17BDreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x17BE && c <= 0x17C5return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x17C6return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x17C7 && c <= 0x17C8return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x17C9 && c <= 0x17D1return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x17D3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x17D4 && c <= 0x17D6return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x17D7return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x17D8 && c <= 0x17DAreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x17DBreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x17DCreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x17E0 && c <= 0x17E9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x17F0 && c <= 0x17F9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1800 && c <= 0x1805return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x1806return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1807 && c <= 0x180Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x180B && c <= 0x180Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x180Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1810 && c <= 0x1819return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1820 && c <= 0x1842return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x1843return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1844 && c <= 0x1877return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1880 && c <= 0x18A8return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1900 && c <= 0x191Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1920 && c <= 0x1922return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1923 && c <= 0x1926return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1927 && c <= 0x1928return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1929 && c <= 0x192Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1930 && c <= 0x1931return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x1932return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1933 && c <= 0x1938return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x1940return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1944 && c <= 0x1945return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1946 && c <= 0x194Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1950 && c <= 0x196Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1970 && c <= 0x1974return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x19E0 && c <= 0x19FFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D00 && c <= 0x1D2Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D2C && c <= 0x1D61return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D62 && c <= 0x1D6Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1E00 && c <= 0x1E9Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1EA0 && c <= 0x1EF9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1F00 && c <= 0x1F15return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1F18 && c <= 0x1F1Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1F20 && c <= 0x1F45return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1F48 && c <= 0x1F4Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1F50 && c <= 0x1F57return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x1F59return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x1F5Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x1F5Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1F5F && c <= 0x1F7Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1F80 && c <= 0x1FB4return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1FB6 && c <= 0x1FBCreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x1FBDreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x1FBEreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1FBF && c <= 0x1FC1return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1FC2 && c <= 0x1FC4return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1FC6 && c <= 0x1FCCreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1FCD && c <= 0x1FCFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1FD0 && c <= 0x1FD3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1FD6 && c <= 0x1FDBreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1FDD && c <= 0x1FDFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1FE0 && c <= 0x1FECreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1FED && c <= 0x1FEFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1FF2 && c <= 0x1FF4return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1FF6 && c <= 0x1FFCreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1FFD && c <= 0x1FFEreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2000 && c <= 0x200Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x200B && c <= 0x200Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2010 && c <= 0x2015return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2016 && c <= 0x2017return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2018return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2019return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x201Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x201B && c <= 0x201Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x201Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x201Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x201Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2020 && c <= 0x2027return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2028return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2029return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x202A && c <= 0x202Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x202Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2030 && c <= 0x2038return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2039return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x203Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x203B && c <= 0x203Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x203F && c <= 0x2040return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2041 && c <= 0x2043return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2044return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2045return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2046return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2047 && c <= 0x2051return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2052return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2053return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2054return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2057return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x205Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2060 && c <= 0x2063return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x206A && c <= 0x206Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2070return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2071return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2074 && c <= 0x2079return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x207A && c <= 0x207Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x207Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x207Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x207Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2080 && c <= 0x2089return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x208A && c <= 0x208Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x208Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x208Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x20A0 && c <= 0x20B1return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x20DD && c <= 0x20E0return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x20E2 && c <= 0x20E4return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2100 && c <= 0x2101return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2102return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2103 && c <= 0x2106return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2107return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2108 && c <= 0x2109return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x210A && c <= 0x2113return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2114return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2115return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2116 && c <= 0x2118return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2119 && c <= 0x211Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x211E && c <= 0x2123return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2124return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2125return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2126return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2127return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2128return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2129return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x212A && c <= 0x212Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x212Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x212F && c <= 0x2131return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2132return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2133 && c <= 0x2134return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2135 && c <= 0x2138return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2139return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x213A && c <= 0x213Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x213D && c <= 0x213Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2140 && c <= 0x2144return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2145 && c <= 0x2149return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x214Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x214Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2153 && c <= 0x215Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2160 && c <= 0x2183return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2190 && c <= 0x2194return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2195 && c <= 0x2199return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x219A && c <= 0x219Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x219C && c <= 0x219Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x21A0return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x21A1 && c <= 0x21A2return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x21A3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x21A4 && c <= 0x21A5return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x21A6return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x21A7 && c <= 0x21ADreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x21AEreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x21AF && c <= 0x21CDreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x21CE && c <= 0x21CFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x21D0 && c <= 0x21D1return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x21D2return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x21D3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x21D4return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x21D5 && c <= 0x21F3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x21F4 && c <= 0x22FFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2300 && c <= 0x2307return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2308 && c <= 0x230Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x230C && c <= 0x231Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2320 && c <= 0x2321return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2322 && c <= 0x2328return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2329return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x232Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x232B && c <= 0x237Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x237Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x237D && c <= 0x239Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x239B && c <= 0x23B3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x23B4return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x23B5return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x23B6return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x23B7 && c <= 0x23D0return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2400 && c <= 0x2426return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2440 && c <= 0x244Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2460 && c <= 0x249Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x249C && c <= 0x24E9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x24EA && c <= 0x24FFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2500 && c <= 0x25B6return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x25B7return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x25B8 && c <= 0x25C0return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x25C1return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x25C2 && c <= 0x25F7return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x25F8 && c <= 0x25FFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2600 && c <= 0x2617return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2619 && c <= 0x266Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x266Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2670 && c <= 0x267Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2680 && c <= 0x2691return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x26A0 && c <= 0x26A1return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2701 && c <= 0x2704return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2706 && c <= 0x2709return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x270C && c <= 0x2727return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2729 && c <= 0x274Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x274Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x274F && c <= 0x2752return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2756return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2758 && c <= 0x275Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2761 && c <= 0x2767return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2768return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2769return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x276Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x276Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x276Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x276Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x276Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x276Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2770return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2771return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2772return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2773return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2774return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2775return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2776 && c <= 0x2793return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2794return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2798 && c <= 0x27AFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x27B1 && c <= 0x27BEreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x27D0 && c <= 0x27E5return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x27E6return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x27E7return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x27E8return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x27E9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x27EAreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x27EBreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x27F0 && c <= 0x27FFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2800 && c <= 0x28FFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2900 && c <= 0x2982return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2983return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2984return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2985return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2986return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2987return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2988return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2989return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x298Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x298Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x298Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x298Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x298Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x298Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2990return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2991return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2992return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2993return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2994return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2995return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2996return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2997return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x2998return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2999 && c <= 0x29D7return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x29D8return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x29D9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x29DAreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x29DBreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x29DC && c <= 0x29FBreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x29FCreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x29FDreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x29FE && c <= 0x2AFFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2B00 && c <= 0x2B0Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2E80 && c <= 0x2E99return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2E9B && c <= 0x2EF3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2F00 && c <= 0x2FD5return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2FF0 && c <= 0x2FFBreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x3000return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x3001 && c <= 0x3003return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x3004return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x3005return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x3006return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x3007return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x3008return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x3009return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x300Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x300Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x300Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x300Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x300Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x300Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x3010return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x3011return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x3012 && c <= 0x3013return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x3014return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x3015return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x3016return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x3017return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x3018return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x3019return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x301Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x301Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x301Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x301Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x301E && c <= 0x301Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x3020return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x3021 && c <= 0x3029return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x3030return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x3031 && c <= 0x3035return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x3036 && c <= 0x3037return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x3038 && c <= 0x303Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x303Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x303Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x303Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x303E && c <= 0x303Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x3041 && c <= 0x3096return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x309B && c <= 0x309Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x309D && c <= 0x309Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x309Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x30A0return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x30A1 && c <= 0x30FAreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x30FBreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x30FC && c <= 0x30FEreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x30FFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x3105 && c <= 0x312Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x3131 && c <= 0x318Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x3190 && c <= 0x3191return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x3192 && c <= 0x3195return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x3196 && c <= 0x319Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x31A0 && c <= 0x31B7return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x31F0 && c <= 0x31FFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x3200 && c <= 0x321Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x3220 && c <= 0x3229return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x322A && c <= 0x3243return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x3250return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x3251 && c <= 0x325Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x3260 && c <= 0x327Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x327Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x3280 && c <= 0x3289return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x328A && c <= 0x32B0return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x32B1 && c <= 0x32BFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x32C0 && c <= 0x32FEreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x3300 && c <= 0x33FFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x3400 && c <= 0x4DB5return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x4DC0 && c <= 0x4DFFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x4E00 && c <= 0x9FA5return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xA000 && c <= 0xA48Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xA490 && c <= 0xA4C6return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xAC00 && c <= 0xD7A3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xE000 && c <= 0xF8FFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xF900 && c <= 0xFA2Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFA30 && c <= 0xFA6Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFB00 && c <= 0xFB06return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFB13 && c <= 0xFB17return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFB1Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFB1F && c <= 0xFB28return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFB29return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFB2A && c <= 0xFB36return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFB38 && c <= 0xFB3Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFB3Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFB40 && c <= 0xFB41return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFB43 && c <= 0xFB44return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFB46 && c <= 0xFBB1return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFBD3 && c <= 0xFD3Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFD3Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFD3Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFD50 && c <= 0xFD8Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFD92 && c <= 0xFDC7return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFDF0 && c <= 0xFDFBreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFDFCreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFDFDreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFE00 && c <= 0xFE0Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE30return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFE31 && c <= 0xFE32return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFE33 && c <= 0xFE34return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE35return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE36return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE37return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE38return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE39return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE3Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE3Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE3Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE3Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE3Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE3Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE40return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE41return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE42return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE43return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE44return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFE45 && c <= 0xFE46return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE47return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE48return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFE49 && c <= 0xFE4Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFE4D && c <= 0xFE4Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFE50 && c <= 0xFE52return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFE54 && c <= 0xFE57return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE58return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE59return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE5Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE5Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE5Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE5Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE5Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFE5F && c <= 0xFE61return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE62return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE63return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFE64 && c <= 0xFE66return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE68return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFE69return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFE6A && c <= 0xFE6Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFE70 && c <= 0xFE74return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFE76 && c <= 0xFEFCreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFEFFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFF01 && c <= 0xFF03return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF04return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFF05 && c <= 0xFF07return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF08return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF09return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF0Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF0Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF0Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF0Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFF0E && c <= 0xFF0Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFF10 && c <= 0xFF19return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFF1A && c <= 0xFF1Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFF1C && c <= 0xFF1Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFF1F && c <= 0xFF20return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFF21 && c <= 0xFF3Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF3Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF3Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF3Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF3Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF3Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF40return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFF41 && c <= 0xFF5Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF5Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF5Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF5Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF5Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF5Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF60return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF61return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF62return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF63return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF64return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF65return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFF66 && c <= 0xFF6Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFF70return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFF71 && c <= 0xFF9Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFF9E && c <= 0xFF9Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFFA0 && c <= 0xFFBEreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFFC2 && c <= 0xFFC7return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFFCA && c <= 0xFFCFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFFD2 && c <= 0xFFD7return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFFDA && c <= 0xFFDCreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFFE0 && c <= 0xFFE1return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFFE2return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFFE3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFFE4return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFFE5 && c <= 0xFFE6return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0xFFE8return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFFE9 && c <= 0xFFECreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFFED && c <= 0xFFEEreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFFF9 && c <= 0xFFFBreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xFFFC && c <= 0xFFFDreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x10000 && c <= 0x1000Breturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1000D && c <= 0x10026return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x10028 && c <= 0x1003Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1003C && c <= 0x1003Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1003F && c <= 0x1004Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x10050 && c <= 0x1005Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x10080 && c <= 0x100FAreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x10100 && c <= 0x10101return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x10107 && c <= 0x10133return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x10137 && c <= 0x1013Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x10300 && c <= 0x1031Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x10320 && c <= 0x10323return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x10330 && c <= 0x10349return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x10380 && c <= 0x1039Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x10400 && c <= 0x1044Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x10450 && c <= 0x1049Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x104A0 && c <= 0x104A9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x10800 && c <= 0x10805return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1080A && c <= 0x10835return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x10837 && c <= 0x10838return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D000 && c <= 0x1D0F5return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D100 && c <= 0x1D126return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D12A && c <= 0x1D164return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D16A && c <= 0x1D16Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c == 0x1D16Dreturn CANONICAL_COMBINING_CLASS_RIGHT;
        if (c >= 0x1D173 && c <= 0x1D17Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D183 && c <= 0x1D184return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D18C && c <= 0x1D1A9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D1AE && c <= 0x1D1DDreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D300 && c <= 0x1D356return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D400 && c <= 0x1D454return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D456 && c <= 0x1D49Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D49E && c <= 0x1D49Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D4A5 && c <= 0x1D4A6return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D4A9 && c <= 0x1D4ACreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D4AE && c <= 0x1D4B9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D4BD && c <= 0x1D4C3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D4C5 && c <= 0x1D505return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D507 && c <= 0x1D50Areturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D50D && c <= 0x1D514return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D516 && c <= 0x1D51Creturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D51E && c <= 0x1D539return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D53B && c <= 0x1D53Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D540 && c <= 0x1D544return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D54A && c <= 0x1D550return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D552 && c <= 0x1D6A3return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D6A8 && c <= 0x1D6C0return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D6C2 && c <= 0x1D6DAreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D6DC && c <= 0x1D6FAreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D6FC && c <= 0x1D714return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D716 && c <= 0x1D734return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D736 && c <= 0x1D74Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D750 && c <= 0x1D76Ereturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D770 && c <= 0x1D788return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D78A && c <= 0x1D7A8return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D7AA && c <= 0x1D7C2return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D7C4 && c <= 0x1D7C9return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x1D7CE && c <= 0x1D7FFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x20000 && c <= 0x2A6D6return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x2F800 && c <= 0x2FA1Dreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xE0020 && c <= 0xE007Freturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xE0100 && c <= 0xE01EFreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0xF0000 && c <= 0xFFFFDreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x100000 && c <= 0x10FFFDreturn CANONICAL_COMBINING_CLASS_NOT_REORDERED;
        if (c >= 0x0334 && c <= 0x0338return CANONICAL_COMBINING_CLASS_OVERLAY;
        if (c >= 0x20D2 && c <= 0x20D3return CANONICAL_COMBINING_CLASS_OVERLAY;
        if (c >= 0x20D8 && c <= 0x20DAreturn CANONICAL_COMBINING_CLASS_OVERLAY;
        if (c >= 0x20E5 && c <= 0x20E6return CANONICAL_COMBINING_CLASS_OVERLAY;
        if (c == 0x20EAreturn CANONICAL_COMBINING_CLASS_OVERLAY;
        if (c >= 0x1D167 && c <= 0x1D169return CANONICAL_COMBINING_CLASS_OVERLAY;
        if (c == 0x093Creturn CANONICAL_COMBINING_CLASS_NUKTA;
        if (c == 0x09BCreturn CANONICAL_COMBINING_CLASS_NUKTA;
        if (c == 0x0A3Creturn CANONICAL_COMBINING_CLASS_NUKTA;
        if (c == 0x0ABCreturn CANONICAL_COMBINING_CLASS_NUKTA;
        if (c == 0x0B3Creturn CANONICAL_COMBINING_CLASS_NUKTA;
        if (c == 0x0CBCreturn CANONICAL_COMBINING_CLASS_NUKTA;
        if (c == 0x1037return CANONICAL_COMBINING_CLASS_NUKTA;
        if (c >= 0x3099 && c <= 0x309Areturn CANONICAL_COMBINING_CLASS_KANA_VOICING;
        if (c == 0x094Dreturn CANONICAL_COMBINING_CLASS_VIRAMA;
        if (c == 0x09CDreturn CANONICAL_COMBINING_CLASS_VIRAMA;
        if (c == 0x0A4Dreturn CANONICAL_COMBINING_CLASS_VIRAMA;
        if (c == 0x0ACDreturn CANONICAL_COMBINING_CLASS_VIRAMA;
        if (c == 0x0B4Dreturn CANONICAL_COMBINING_CLASS_VIRAMA;
        if (c == 0x0BCDreturn CANONICAL_COMBINING_CLASS_VIRAMA;
        if (c == 0x0C4Dreturn CANONICAL_COMBINING_CLASS_VIRAMA;
        if (c == 0x0CCDreturn CANONICAL_COMBINING_CLASS_VIRAMA;
        if (c == 0x0D4Dreturn CANONICAL_COMBINING_CLASS_VIRAMA;
        if (c == 0x0DCAreturn CANONICAL_COMBINING_CLASS_VIRAMA;
        if (c == 0x0E3Areturn CANONICAL_COMBINING_CLASS_VIRAMA;
        if (c == 0x0F84return CANONICAL_COMBINING_CLASS_VIRAMA;
        if (c == 0x1039return CANONICAL_COMBINING_CLASS_VIRAMA;
        if (c == 0x1714return CANONICAL_COMBINING_CLASS_VIRAMA;
        if (c == 0x1734return CANONICAL_COMBINING_CLASS_VIRAMA;
        if (c == 0x17D2return CANONICAL_COMBINING_CLASS_VIRAMA;
        if (c == 0x05B0return CANONICAL_COMBINING_CLASS_10;
        if (c == 0x05B1return CANONICAL_COMBINING_CLASS_11;
        if (c == 0x05B2return CANONICAL_COMBINING_CLASS_12;
        if (c == 0x05B3return CANONICAL_COMBINING_CLASS_13;
        if (c == 0x05B4return CANONICAL_COMBINING_CLASS_14;
        if (c == 0x05B5return CANONICAL_COMBINING_CLASS_15;
        if (c == 0x05B6return CANONICAL_COMBINING_CLASS_16;
        if (c == 0x05B7return CANONICAL_COMBINING_CLASS_17;
        if (c == 0x05B8return CANONICAL_COMBINING_CLASS_18;
        if (c == 0x05B9return CANONICAL_COMBINING_CLASS_19;
        if (c == 0x05BBreturn CANONICAL_COMBINING_CLASS_20;
        if (c == 0x05BCreturn CANONICAL_COMBINING_CLASS_21;
        if (c == 0x05BDreturn CANONICAL_COMBINING_CLASS_22;
        if (c == 0x05BFreturn CANONICAL_COMBINING_CLASS_23;
        if (c == 0x05C1return CANONICAL_COMBINING_CLASS_24;
        if (c == 0x05C2return CANONICAL_COMBINING_CLASS_25;
        if (c == 0xFB1Ereturn CANONICAL_COMBINING_CLASS_26;
        if (c == 0x064Breturn CANONICAL_COMBINING_CLASS_27;
        if (c == 0x064Creturn CANONICAL_COMBINING_CLASS_28;
        if (c == 0x064Dreturn CANONICAL_COMBINING_CLASS_29;
        if (c == 0x064Ereturn CANONICAL_COMBINING_CLASS_30;
        if (c == 0x064Freturn CANONICAL_COMBINING_CLASS_31;
        if (c == 0x0650return CANONICAL_COMBINING_CLASS_32;
        if (c == 0x0651return CANONICAL_COMBINING_CLASS_33;
        if (c == 0x0652return CANONICAL_COMBINING_CLASS_34;
        if (c == 0x0670return CANONICAL_COMBINING_CLASS_35;
        if (c == 0x0711return CANONICAL_COMBINING_CLASS_36;
        if (c == 0x0C55return CANONICAL_COMBINING_CLASS_84;
        if (c == 0x0C56return CANONICAL_COMBINING_CLASS_91;
        if (c >= 0x0E38 && c <= 0x0E39return CANONICAL_COMBINING_CLASS_103;
        if (c >= 0x0E48 && c <= 0x0E4Breturn CANONICAL_COMBINING_CLASS_107;
        if (c >= 0x0EB8 && c <= 0x0EB9return CANONICAL_COMBINING_CLASS_118;
        if (c >= 0x0EC8 && c <= 0x0ECBreturn CANONICAL_COMBINING_CLASS_122;
        if (c == 0x0F71return CANONICAL_COMBINING_CLASS_129;
        if (c == 0x0F72return CANONICAL_COMBINING_CLASS_130;
        if (c >= 0x0F7A && c <= 0x0F7Dreturn CANONICAL_COMBINING_CLASS_130;
        if (c == 0x0F80return CANONICAL_COMBINING_CLASS_130;
        if (c == 0x0F74return CANONICAL_COMBINING_CLASS_132;
        if (c >= 0x0321 && c <= 0x0322return CANONICAL_COMBINING_CLASS_ATTACHED_BELOW;
        if (c >= 0x0327 && c <= 0x0328return CANONICAL_COMBINING_CLASS_ATTACHED_BELOW;
        if (c == 0x031Breturn CANONICAL_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT;
        if (c == 0x0F39return CANONICAL_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT;
        if (c >= 0x1D165 && c <= 0x1D166return CANONICAL_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT;
        if (c >= 0x1D16E && c <= 0x1D172return CANONICAL_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT;
        if (c == 0x302Areturn CANONICAL_COMBINING_CLASS_BELOW_LEFT;
        if (c >= 0x0316 && c <= 0x0319return CANONICAL_COMBINING_CLASS_BELOW;
        if (c >= 0x031C && c <= 0x0320return CANONICAL_COMBINING_CLASS_BELOW;
        if (c >= 0x0323 && c <= 0x0326return CANONICAL_COMBINING_CLASS_BELOW;
        if (c >= 0x0329 && c <= 0x0333return CANONICAL_COMBINING_CLASS_BELOW;
        if (c >= 0x0339 && c <= 0x033Creturn CANONICAL_COMBINING_CLASS_BELOW;
        if (c >= 0x0347 && c <= 0x0349return CANONICAL_COMBINING_CLASS_BELOW;
        if (c >= 0x034D && c <= 0x034Ereturn CANONICAL_COMBINING_CLASS_BELOW;
        if (c >= 0x0353 && c <= 0x0356return CANONICAL_COMBINING_CLASS_BELOW;
        if (c == 0x0591return CANONICAL_COMBINING_CLASS_BELOW;
        if (c == 0x0596return CANONICAL_COMBINING_CLASS_BELOW;
        if (c == 0x059Breturn CANONICAL_COMBINING_CLASS_BELOW;
        if (c >= 0x05A3 && c <= 0x05A7return CANONICAL_COMBINING_CLASS_BELOW;
        if (c == 0x05AAreturn CANONICAL_COMBINING_CLASS_BELOW;
        if (c >= 0x0655 && c <= 0x0656return CANONICAL_COMBINING_CLASS_BELOW;
        if (c == 0x06E3return CANONICAL_COMBINING_CLASS_BELOW;
        if (c == 0x06EAreturn CANONICAL_COMBINING_CLASS_BELOW;
        if (c == 0x06EDreturn CANONICAL_COMBINING_CLASS_BELOW;
        if (c == 0x0731return CANONICAL_COMBINING_CLASS_BELOW;
        if (c == 0x0734return CANONICAL_COMBINING_CLASS_BELOW;
        if (c >= 0x0737 && c <= 0x0739return CANONICAL_COMBINING_CLASS_BELOW;
        if (c >= 0x073B && c <= 0x073Creturn CANONICAL_COMBINING_CLASS_BELOW;
        if (c == 0x073Ereturn CANONICAL_COMBINING_CLASS_BELOW;
        if (c == 0x0742return CANONICAL_COMBINING_CLASS_BELOW;
        if (c == 0x0744return CANONICAL_COMBINING_CLASS_BELOW;
        if (c == 0x0746return CANONICAL_COMBINING_CLASS_BELOW;
        if (c == 0x0748return CANONICAL_COMBINING_CLASS_BELOW;
        if (c == 0x0952return CANONICAL_COMBINING_CLASS_BELOW;
        if (c >= 0x0F18 && c <= 0x0F19return CANONICAL_COMBINING_CLASS_BELOW;
        if (c == 0x0F35return CANONICAL_COMBINING_CLASS_BELOW;
        if (c == 0x0F37return CANONICAL_COMBINING_CLASS_BELOW;
        if (c == 0x0FC6return CANONICAL_COMBINING_CLASS_BELOW;
        if (c == 0x193Breturn CANONICAL_COMBINING_CLASS_BELOW;
        if (c == 0x20E8return CANONICAL_COMBINING_CLASS_BELOW;
        if (c >= 0x1D17B && c <= 0x1D182return CANONICAL_COMBINING_CLASS_BELOW;
        if (c >= 0x1D18A && c <= 0x1D18Breturn CANONICAL_COMBINING_CLASS_BELOW;
        if (c == 0x059Areturn CANONICAL_COMBINING_CLASS_BELOW_RIGHT;
        if (c == 0x05ADreturn CANONICAL_COMBINING_CLASS_BELOW_RIGHT;
        if (c == 0x1939return CANONICAL_COMBINING_CLASS_BELOW_RIGHT;
        if (c == 0x302Dreturn CANONICAL_COMBINING_CLASS_BELOW_RIGHT;
        if (c >= 0x302E && c <= 0x302Freturn CANONICAL_COMBINING_CLASS_LEFT;
        if (c == 0x05AEreturn CANONICAL_COMBINING_CLASS_ABOVE_LEFT;
        if (c == 0x18A9return CANONICAL_COMBINING_CLASS_ABOVE_LEFT;
        if (c == 0x302Breturn CANONICAL_COMBINING_CLASS_ABOVE_LEFT;
        if (c >= 0x0300 && c <= 0x0314return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x033D && c <= 0x0344return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c == 0x0346return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x034A && c <= 0x034Creturn CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x0350 && c <= 0x0352return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c == 0x0357return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x0363 && c <= 0x036Freturn CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x0483 && c <= 0x0486return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x0592 && c <= 0x0595return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x0597 && c <= 0x0599return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x059C && c <= 0x05A1return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x05A8 && c <= 0x05A9return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x05AB && c <= 0x05ACreturn CANONICAL_COMBINING_CLASS_ABOVE;
        if (c == 0x05AFreturn CANONICAL_COMBINING_CLASS_ABOVE;
        if (c == 0x05C4return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x0610 && c <= 0x0615return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x0653 && c <= 0x0654return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x0657 && c <= 0x0658return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x06D6 && c <= 0x06DCreturn CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x06DF && c <= 0x06E2return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c == 0x06E4return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x06E7 && c <= 0x06E8return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x06EB && c <= 0x06ECreturn CANONICAL_COMBINING_CLASS_ABOVE;
        if (c == 0x0730return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x0732 && c <= 0x0733return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x0735 && c <= 0x0736return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c == 0x073Areturn CANONICAL_COMBINING_CLASS_ABOVE;
        if (c == 0x073Dreturn CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x073F && c <= 0x0741return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c == 0x0743return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c == 0x0745return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c == 0x0747return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x0749 && c <= 0x074Areturn CANONICAL_COMBINING_CLASS_ABOVE;
        if (c == 0x0951return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x0953 && c <= 0x0954return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x0F82 && c <= 0x0F83return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x0F86 && c <= 0x0F87return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c == 0x17DDreturn CANONICAL_COMBINING_CLASS_ABOVE;
        if (c == 0x193Areturn CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x20D0 && c <= 0x20D1return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x20D4 && c <= 0x20D7return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x20DB && c <= 0x20DCreturn CANONICAL_COMBINING_CLASS_ABOVE;
        if (c == 0x20E1return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c == 0x20E7return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c == 0x20E9return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0xFE20 && c <= 0xFE23return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x1D185 && c <= 0x1D189return CANONICAL_COMBINING_CLASS_ABOVE;
        if (c >= 0x1D1AA && c <= 0x1D1ADreturn CANONICAL_COMBINING_CLASS_ABOVE;
        if (c == 0x0315return CANONICAL_COMBINING_CLASS_ABOVE_RIGHT;
        if (c == 0x031Areturn CANONICAL_COMBINING_CLASS_ABOVE_RIGHT;
        if (c == 0x302Creturn CANONICAL_COMBINING_CLASS_ABOVE_RIGHT;
        if (c == 0x035Freturn CANONICAL_COMBINING_CLASS_DOUBLE_BELOW;
        if (c == 0x0362return CANONICAL_COMBINING_CLASS_DOUBLE_BELOW;
        if (c >= 0x035D && c <= 0x035Ereturn CANONICAL_COMBINING_CLASS_DOUBLE_ABOVE;
        if (c >= 0x0360 && c <= 0x0361return CANONICAL_COMBINING_CLASS_DOUBLE_ABOVE;
        if (c == 0x0345return CANONICAL_COMBINING_CLASS_IOTA_SUBSCRIPT;    
        
        return CANONICAL_COMBINING_CLASS_NOT_REORDERED;
    }
    ///CLOVER:ON
    
    
    private final static int FIRST_HANGUL_SYLLABLE    = 0xAC00;
    // even if this is not right; why do tests still pass????
    // private final static int LAST_HANGUL_SYLLABLE     = 0xAC00; // FIXME 
    private final static int LAST_HANGUL_SYLLABLE = 0xD7A3;

    
    static int combineSurrogatePair(char highSurrogate, char lowSurrogate) {

        int high = highSurrogate & 0x7FF;
        int low  = lowSurrogate - 0xDC00;
        int highShifted = high << 10;
        int combined = highShifted | low; 
        int codePoint = combined + 0x10000;
        return codePoint;
        
    }

    private static String makeSurrogatePair(int codePoint) {

        StringBuffer s = new StringBuffer(2);
        if (codePoint <= 0xFFFFs.append((charcodePoint);
        else {
            char high = (char) (0xD800 (0x10000 >> 10(codePoint >> 10));
            char low = (char) (0xDC00 (codePoint & 0x3FF));
            s.append(high);
            s.append(low);
        }
        return s.toString();
        
    }

    private static char getHighSurrogate(int codepoint) {

        char x = (charcodepoint;
        int u = (codepoint >> 16((1<<51);
        char w = (char) (u - 1);
        return (char) (HI_SURROGATE_START | (w << 6| x >> 10);
        
    }


    private static char getLowSurrogate(int codepoint) {

        char x = (charcodepoint;
        return (char) (LOW_SURROGATE_START | x & ((1<<101));
        
    }
    

    static String normalize(String s) {

        boolean needsNormalizing = false;
            
        int length = s.length();
        for (int i = 0; i < length; i++) {
            char c = s.charAt(i);
            if (c > 255) {
                needsNormalizing = true;
                break;
            }
        
        
        if (needsNormalizing) {
            
            // ???? unnecessarily invoking this in many cases
            s = decomposeHangul(s);
            UnicodeString ustring = new UnicodeString(s);
            UnicodeString decomposed = ustring.decompose()
            UnicodeString recomposed = decomposed.compose();
            String result = recomposed.toString();
            // ???? unnecessarily invoking this in many cases
            result = composeHangul(result);
            return result;
        }
        
        return s;
        
    }

     
    private static String decomposeHangul(String s) {

        int length = s.length();
        StringBuffer sb = new StringBuffer(s.length());
        for (int i = 0; i < length; i++) {
            char c = s.charAt(i);
            if (c >= FIRST_HANGUL_SYLLABLE && c <= LAST_HANGUL_SYLLABLE) {
                sb.append(decomposeHangul(c));
            }
            else {
                sb.append(c);
            }
        }
        return sb.toString();
        
    }

    
    // return -1 if the character cannot be combined with the starter; 
    // otherwise return the composed character
    private static int composeCharacter(int starter, int c) {
        
        StringBuffer decomposed = new StringBuffer(4);
        
        if (starter > 0xFFFF) {
            decomposed.append(getHighSurrogate(starter));
            decomposed.append(getLowSurrogate(starter));
        }
        else decomposed.append((charstarter);
        
        if (c > 0xFFFF) {
            decomposed.append(getHighSurrogate(c));
            decomposed.append(getLowSurrogate(c));
        }
        else decomposed.append((charc);
        
        String recomposed = (Stringcompositions.get(decomposed.toString());
        if (recomposed == nullreturn -1;
        else if (recomposed.length() == 1return recomposed.charAt(0);
        else return combineSurrogatePair(recomposed.charAt(0), recomposed.charAt(1));

    }

    
    // FIXME must recurse this
    ///CLOVER:OFF
    private static String decompose(int character) {
        
        if (character < 0x00C0) {
            return String.valueOf((charcharacter);
        }
        else if (character >= FIRST_HANGUL_SYLLABLE && character <= LAST_HANGUL_SYLLABLE) {
            return decomposeHangul((charcharacter);
        }
        
        StringBuffer sb = new StringBuffer(2);
        if (character == 0x00C0) {
            sb.append((char0x0041);
            sb.append((char0x0300);
        }
        else if (character == 0x00C1) {
            sb.append((char0x0041);
            sb.append((char0x0301);
        }
        else if (character == 0x00C2) {
            sb.append((char0x0041);
            sb.append((char0x0302);
        }
        else if (character == 0x00C3) {
            sb.append((char0x0041);
            sb.append((char0x0303);
        }
        else if (character == 0x00C4) {
            sb.append((char0x0041);
            sb.append((char0x0308);
        }
        else if (character == 0x00C5) {
            sb.append((char0x0041);
            sb.append((char0x030A);
        }
        else if (character == 0x00C7) {
            sb.append((char0x0043);
            sb.append((char0x0327);
        }
        else if (character == 0x00C8) {
            sb.append((char0x0045);
            sb.append((char0x0300);
        }
        else if (character == 0x00C9) {
            sb.append((char0x0045);
            sb.append((char0x0301);
        }
        else if (character == 0x00CA) {
            sb.append((char0x0045);
            sb.append((char0x0302);
        }
        else if (character == 0x00CB) {
            sb.append((char0x0045);
            sb.append((char0x0308);
        }
        else if (character == 0x00CC) {
            sb.append((char0x0049);
            sb.append((char0x0300);
        }
        else if (character == 0x00CD) {
            sb.append((char0x0049);
            sb.append((char0x0301);
        }
        else if (character == 0x00CE) {
            sb.append((char0x0049);
            sb.append((char0x0302);
        }
        else if (character == 0x00CF) {
            sb.append((char0x0049);
            sb.append((char0x0308);
        }
        else if (character == 0x00D1) {
            sb.append((char0x004E);
            sb.append((char0x0303);
        }
        else if (character == 0x00D2) {
            sb.append((char0x004F);
            sb.append((char0x0300);
        }
        else if (character == 0x00D3) {
            sb.append((char0x004F);
            sb.append((char0x0301);
        }
        else if (character == 0x00D4) {
            sb.append((char0x004F);
            sb.append((char0x0302);
        }
        else if (character == 0x00D5) {
            sb.append((char0x004F);
            sb.append((char0x0303);
        }
        else if (character == 0x00D6) {
            sb.append((char0x004F);
            sb.append((char0x0308);
        }
        else if (character == 0x00D9) {
            sb.append((char0x0055);
            sb.append((char0x0300);
        }
        else if (character == 0x00DA) {
            sb.append((char0x0055);
            sb.append((char0x0301);
        }
        else if (character == 0x00DB) {
            sb.append((char0x0055);
            sb.append((char0x0302);
        }
        else if (character == 0x00DC) {
            sb.append((char0x0055);
            sb.append((char0x0308);
        }
        else if (character == 0x00DD) {
            sb.append((char0x0059);
            sb.append((char0x0301);
        }
        else if (character == 0x00E0) {
            sb.append((char0x0061);
            sb.append((char0x0300);
        }
        else if (character == 0x00E1) {
            sb.append((char0x0061);
            sb.append((char0x0301);
        }
        else if (character == 0x00E2) {
            sb.append((char0x0061);
            sb.append((char0x0302);
        }
        else if (character == 0x00E3) {
            sb.append((char0x0061);
            sb.append((char0x0303);
        }
        else if (character == 0x00E4) {
            sb.append((char0x0061);
            sb.append((char0x0308);
        }
        else if (character == 0x00E5) {
            sb.append((char0x0061);
            sb.append((char0x030A);
        }
        else if (character == 0x00E7) {
            sb.append((char0x0063);
            sb.append((char0x0327);
        }
        else if (character == 0x00E8) {
            sb.append((char0x0065);
            sb.append((char0x0300);
        }
        else if (character == 0x00E9) {
            sb.append((char0x0065);
            sb.append((char0x0301);
        }
        else if (character == 0x00EA) {
            sb.append((char0x0065);
            sb.append((char0x0302);
        }
        else if (character == 0x00EB) {
            sb.append((char0x0065);
            sb.append((char0x0308);
        }
        else if (character == 0x00EC) {
            sb.append((char0x0069);
            sb.append((char0x0300);
        }
        else if (character == 0x00ED) {
            sb.append((char0x0069);
            sb.append((char0x0301);
        }
        else if (character == 0x00EE) {
            sb.append((char0x0069);
            sb.append((char0x0302);
        }
        else if (character == 0x00EF) {
            sb.append((char0x0069);
            sb.append((char0x0308);
        }
        else if (character == 0x00F1) {
            sb.append((char0x006E);
            sb.append((char0x0303);
        }
        else if (character == 0x00F2) {
            sb.append((char0x006F);
            sb.append((char0x0300);
        }
        else if (character == 0x00F3) {
            sb.append((char0x006F);
            sb.append((char0x0301);
        }
        else if (character == 0x00F4) {
            sb.append((char0x006F);
            sb.append((char0x0302);
        }
        else if (character == 0x00F5) {
            sb.append((char0x006F);
            sb.append((char0x0303);
        }
        else if (character == 0x00F6) {
            sb.append((char0x006F);
            sb.append((char0x0308);
        }
        else if (character == 0x00F9) {
            sb.append((char0x0075);
            sb.append((char0x0300);
        }
        else if (character == 0x00FA) {
            sb.append((char0x0075);
            sb.append((char0x0301);
        }
        else if (character == 0x00FB) {
            sb.append((char0x0075);
            sb.append((char0x0302);
        }
        else if (character == 0x00FC) {
            sb.append((char0x0075);
            sb.append((char0x0308);
        }
        else if (character == 0x00FD) {
            sb.append((char0x0079);
            sb.append((char0x0301);
        }
        else if (character == 0x00FF) {
            sb.append((char0x0079);
            sb.append((char0x0308);
        }
        else if (character == 0x0100) {
            sb.append((char0x0041);
            sb.append((char0x0304);
        }
        else if (character == 0x0101) {
            sb.append((char0x0061);
            sb.append((char0x0304);
        }
        else if (character == 0x0102) {
            sb.append((char0x0041);
            sb.append((char0x0306);
        }
        else if (character == 0x0103) {
            sb.append((char0x0061);
            sb.append((char0x0306);
        }
        else if (character == 0x0104) {
            sb.append((char0x0041);
            sb.append((char0x0328);
        }
        else if (character == 0x0105) {
            sb.append((char0x0061);
            sb.append((char0x0328);
        }
        else if (character == 0x0106) {
            sb.append((char0x0043);
            sb.append((char0x0301);
        }
        else if (character == 0x0107) {
            sb.append((char0x0063);
            sb.append((char0x0301);
        }
        else if (character == 0x0108) {
            sb.append((char0x0043);
            sb.append((char0x0302);
        }
        else if (character == 0x0109) {
            sb.append((char0x0063);
            sb.append((char0x0302);
        }
        else if (character == 0x010A) {
            sb.append((char0x0043);
            sb.append((char0x0307);
        }
        else if (character == 0x010B) {
            sb.append((char0x0063);
            sb.append((char0x0307);
        }
        else if (character == 0x010C) {
            sb.append((char0x0043);
            sb.append((char0x030C);
        }
        else if (character == 0x010D) {
            sb.append((char0x0063);
            sb.append((char0x030C);
        }
        else if (character == 0x010E) {
            sb.append((char0x0044);
            sb.append((char0x030C);
        }
        else if (character == 0x010F) {
            sb.append((char0x0064);
            sb.append((char0x030C);
        }
        else if (character == 0x0112) {
            sb.append((char0x0045);
            sb.append((char0x0304);
        }
        else if (character == 0x0113) {
            sb.append((char0x0065);
            sb.append((char0x0304);
        }
        else if (character == 0x0114) {
            sb.append((char0x0045);
            sb.append((char0x0306);
        }
        else if (character == 0x0115) {
            sb.append((char0x0065);
            sb.append((char0x0306);
        }
        else if (character == 0x0116) {
            sb.append((char0x0045);
            sb.append((char0x0307);
        }
        else if (character == 0x0117) {
            sb.append((char0x0065);
            sb.append((char0x0307);
        }
        else if (character == 0x0118) {
            sb.append((char0x0045);
            sb.append((char0x0328);
        }
        else if (character == 0x0119) {
            sb.append((char0x0065);
            sb.append((char0x0328);
        }
        else if (character == 0x011A) {
            sb.append((char0x0045);
            sb.append((char0x030C);
        }
        else if (character == 0x011B) {
            sb.append((char0x0065);
            sb.append((char0x030C);
        }
        else if (character == 0x011C) {
            sb.append((char0x0047);
            sb.append((char0x0302);
        }
        else if (character == 0x011D) {
            sb.append((char0x0067);
            sb.append((char0x0302);
        }
        else if (character == 0x011E) {
            sb.append((char0x0047);
            sb.append((char0x0306);
        }
        else if (character == 0x011F) {
            sb.append((char0x0067);
            sb.append((char0x0306);
        }
        else if (character == 0x0120) {
            sb.append((char0x0047);
            sb.append((char0x0307);
        }
        else if (character == 0x0121) {
            sb.append((char0x0067);
            sb.append((char0x0307);
        }
        else if (character == 0x0122) {
            sb.append((char0x0047);
            sb.append((char0x0327);
        }
        else if (character == 0x0123) {
            sb.append((char0x0067);
            sb.append((char0x0327);
        }
        else if (character == 0x0124) {
            sb.append((char0x0048);
            sb.append((char0x0302);
        }
        else if (character == 0x0125) {
            sb.append((char0x0068);
            sb.append((char0x0302);
        }
        else if (character == 0x0128) {
            sb.append((char0x0049);
            sb.append((char0x0303);
        }
        else if (character == 0x0129) {
            sb.append((char0x0069);
            sb.append((char0x0303);
        }
        else if (character == 0x012A) {
            sb.append((char0x0049);
            sb.append((char0x0304);
        }
        else if (character == 0x012B) {
            sb.append((char0x0069);
            sb.append((char0x0304);
        }
        else if (character == 0x012C) {
            sb.append((char0x0049);
            sb.append((char0x0306);
        }
        else if (character == 0x012D) {
            sb.append((char0x0069);
            sb.append((char0x0306);
        }
        else if (character == 0x012E) {
            sb.append((char0x0049);
            sb.append((char0x0328);
        }
        else if (character == 0x012F) {
            sb.append((char0x0069);
            sb.append((char0x0328);
        }
        else if (character == 0x0130) {
            sb.append((char0x0049);
            sb.append((char0x0307);
        }
        else if (character == 0x0134) {
            sb.append((char0x004A);
            sb.append((char0x0302);
        }
        else if (character == 0x0135) {
            sb.append((char0x006A);
            sb.append((char0x0302);
        }
        else if (character == 0x0136) {
            sb.append((char0x004B);
            sb.append((char0x0327);
        }
        else if (character == 0x0137) {
            sb.append((char0x006B);
            sb.append((char0x0327);
        }
        else if (character == 0x0139) {
            sb.append((char0x004C);
            sb.append((char0x0301);
        }
        else if (character == 0x013A) {
            sb.append((char0x006C);
            sb.append((char0x0301);
        }
        else if (character == 0x013B) {
            sb.append((char0x004C);
            sb.append((char0x0327);
        }
        else if (character == 0x013C) {
            sb.append((char0x006C);
            sb.append((char0x0327);
        }
        else if (character == 0x013D) {
            sb.append((char0x004C);
            sb.append((char0x030C);
        }
        else if (character == 0x013E) {
            sb.append((char0x006C);
            sb.append((char0x030C);
        }
        else if (character == 0x0143) {
            sb.append((char0x004E);
            sb.append((char0x0301);
        }
        else if (character == 0x0144) {
            sb.append((char0x006E);
            sb.append((char0x0301);
        }
        else if (character == 0x0145) {
            sb.append((char0x004E);
            sb.append((char0x0327);
        }
        else if (character == 0x0146) {
            sb.append((char0x006E);
            sb.append((char0x0327);
        }
        else if (character == 0x0147) {
            sb.append((char0x004E);
            sb.append((char0x030C);
        }
        else if (character == 0x0148) {
            sb.append((char0x006E);
            sb.append((char0x030C);
        }
        else if (character == 0x014C) {
            sb.append((char0x004F);
            sb.append((char0x0304);
        }
        else if (character == 0x014D) {
            sb.append((char0x006F);
            sb.append((char0x0304);
        }
        else if (character == 0x014E) {
            sb.append((char0x004F);
            sb.append((char0x0306);
        }
        else if (character == 0x014F) {
            sb.append((char0x006F);
            sb.append((char0x0306);
        }
        else if (character == 0x0150) {
            sb.append((char0x004F);
            sb.append((char0x030B);
        }
        else if (character == 0x0151) {
            sb.append((char0x006F);
            sb.append((char0x030B);
        }
        else if (character == 0x0154) {
            sb.append((char0x0052);
            sb.append((char0x0301);
        }
        else if (character == 0x0155) {
            sb.append((char0x0072);
            sb.append((char0x0301);
        }
        else if (character == 0x0156) {
            sb.append((char0x0052);
            sb.append((char0x0327);
        }
        else if (character == 0x0157) {
            sb.append((char0x0072);
            sb.append((char0x0327);
        }
        else if (character == 0x0158) {
            sb.append((char0x0052);
            sb.append((char0x030C);
        }
        else if (character == 0x0159) {
            sb.append((char0x0072);
            sb.append((char0x030C);
        }
        else if (character == 0x015A) {
            sb.append((char0x0053);
            sb.append((char0x0301);
        }
        else if (character == 0x015B) {
            sb.append((char0x0073);
            sb.append((char0x0301);
        }
        else if (character == 0x015C) {
            sb.append((char0x0053);
            sb.append((char0x0302);
        }
        else if (character == 0x015D) {
            sb.append((char0x0073);
            sb.append((char0x0302);
        }
        else if (character == 0x015E) {
            sb.append((char0x0053);
            sb.append((char0x0327);
        }
        else if (character == 0x015F) {
            sb.append((char0x0073);
            sb.append((char0x0327);
        }
        else if (character == 0x0160) {
            sb.append((char0x0053);
            sb.append((char0x030C);
        }
        else if (character == 0x0161) {
            sb.append((char0x0073);
            sb.append((char0x030C);
        }
        else if (character == 0x0162) {
            sb.append((char0x0054);
            sb.append((char0x0327);
        }
        else if (character == 0x0163) {
            sb.append((char0x0074);
            sb.append((char0x0327);
        }
        else if (character == 0x0164) {
            sb.append((char0x0054);
            sb.append((char0x030C);
        }
        else if (character == 0x0165) {
            sb.append((char0x0074);
            sb.append((char0x030C);
        }
        else if (character == 0x0168) {
            sb.append((char0x0055);
            sb.append((char0x0303);
        }
        else if (character == 0x0169) {
            sb.append((char0x0075);
            sb.append((char0x0303);
        }
        else if (character == 0x016A) {
            sb.append((char0x0055);
            sb.append((char0x0304);
        }
        else if (character == 0x016B) {
            sb.append((char0x0075);
            sb.append((char0x0304);
        }
        else if (character == 0x016C) {
            sb.append((char0x0055);
            sb.append((char0x0306);
        }
        else if (character == 0x016D) {
            sb.append((char0x0075);
            sb.append((char0x0306);
        }
        else if (character == 0x016E) {
            sb.append((char0x0055);
            sb.append((char0x030A);
        }
        else if (character == 0x016F) {
            sb.append((char0x0075);
            sb.append((char0x030A);
        }
        else if (character == 0x0170) {
            sb.append((char0x0055);
            sb.append((char0x030B);
        }
        else if (character == 0x0171) {
            sb.append((char0x0075);
            sb.append((char0x030B);
        }
        else if (character == 0x0172) {
            sb.append((char0x0055);
            sb.append((char0x0328);
        }
        else if (character == 0x0173) {
            sb.append((char0x0075);
            sb.append((char0x0328);
        }
        else if (character == 0x0174) {
            sb.append((char0x0057);
            sb.append((char0x0302);
        }
        else if (character == 0x0175) {
            sb.append((char0x0077);
            sb.append((char0x0302);
        }
        else if (character == 0x0176) {
            sb.append((char0x0059);
            sb.append((char0x0302);
        }
        else if (character == 0x0177) {
            sb.append((char0x0079);
            sb.append((char0x0302);
        }
        else if (character == 0x0178) {
            sb.append((char0x0059);
            sb.append((char0x0308);
        }
        else if (character == 0x0179) {
            sb.append((char0x005A);
            sb.append((char0x0301);
        }
        else if (character == 0x017A) {
            sb.append((char0x007A);
            sb.append((char0x0301);
        }
        else if (character == 0x017B) {
            sb.append((char0x005A);
            sb.append((char0x0307);
        }
        else if (character == 0x017C) {
            sb.append((char0x007A);
            sb.append((char0x0307);
        }
        else if (character == 0x017D) {
            sb.append((char0x005A);
            sb.append((char0x030C);
        }
        else if (character == 0x017E) {
            sb.append((char0x007A);
            sb.append((char0x030C);
        }
        else if (character == 0x01A0) {
            sb.append((char0x004F);
            sb.append((char0x031B);
        }
        else if (character == 0x01A1) {
            sb.append((char0x006F);
            sb.append((char0x031B);
        }
        else if (character == 0x01AF) {
            sb.append((char0x0055);
            sb.append((char0x031B);
        }
        else if (character == 0x01B0) {
            sb.append((char0x0075);
            sb.append((char0x031B);
        }
        else if (character == 0x01CD) {
            sb.append((char0x0041);
            sb.append((char0x030C);
        }
        else if (character == 0x01CE) {
            sb.append((char0x0061);
            sb.append((char0x030C);
        }
        else if (character == 0x01CF) {
            sb.append((char0x0049);
            sb.append((char0x030C);
        }
        else if (character == 0x01D0) {
            sb.append((char0x0069);
            sb.append((char0x030C);
        }
        else if (character == 0x01D1) {
            sb.append((char0x004F);
            sb.append((char0x030C);
        }
        else if (character == 0x01D2) {
            sb.append((char0x006F);
            sb.append((char0x030C);
        }
        else if (character == 0x01D3) {
            sb.append((char0x0055);
            sb.append((char0x030C);
        }
        else if (character == 0x01D4) {
            sb.append((char0x0075);
            sb.append((char0x030C);
        }
        else if (character == 0x01D5) {
            sb.append((char0x00DC);
            sb.append((char0x0304);
        }
        else if (character == 0x01D6) {
            sb.append((char0x00FC);
            sb.append((char0x0304);
        }
        else if (character == 0x01D7) {
            sb.append((char0x00DC);
            sb.append((char0x0301);
        }
        else if (character == 0x01D8) {
            sb.append((char0x00FC);
            sb.append((char0x0301);
        }
        else if (character == 0x01D9) {
            sb.append((char0x00DC);
            sb.append((char0x030C);
        }
        else if (character == 0x01DA) {
            sb.append((char0x00FC);
            sb.append((char0x030C);
        }
        else if (character == 0x01DB) {
            sb.append((char0x00DC);
            sb.append((char0x0300);
        }
        else if (character == 0x01DC) {
            sb.append((char0x00FC);
            sb.append((char0x0300);
        }
        else if (character == 0x01DE) {
            sb.append((char0x00C4);
            sb.append((char0x0304);
        }
        else if (character == 0x01DF) {
            sb.append((char0x00E4);
            sb.append((char0x0304);
        }
        else if (character == 0x01E0) {
            sb.append((char0x0226);
            sb.append((char0x0304);
        }
        else if (character == 0x01E1) {
            sb.append((char0x0227);
            sb.append((char0x0304);
        }
        else if (character == 0x01E2) {
            sb.append((char0x00C6);
            sb.append((char0x0304);
        }
        else if (character == 0x01E3) {
            sb.append((char0x00E6);
            sb.append((char0x0304);
        }
        else if (character == 0x01E6) {
            sb.append((char0x0047);
            sb.append((char0x030C);
        }
        else if (character == 0x01E7) {
            sb.append((char0x0067);
            sb.append((char0x030C);
        }
        else if (character == 0x01E8) {
            sb.append((char0x004B);
            sb.append((char0x030C);
        }
        else if (character == 0x01E9) {
            sb.append((char0x006B);
            sb.append((char0x030C);
        }
        else if (character == 0x01EA) {
            sb.append((char0x004F);
            sb.append((char0x0328);
        }
        else if (character == 0x01EB) {
            sb.append((char0x006F);
            sb.append((char0x0328);
        }
        else if (character == 0x01EC) {
            sb.append((char0x01EA);
            sb.append((char0x0304);
        }
        else if (character == 0x01ED) {
            sb.append((char0x01EB);
            sb.append((char0x0304);
        }
        else if (character == 0x01EE) {
            sb.append((char0x01B7);
            sb.append((char0x030C);
        }
        else if (character == 0x01EF) {
            sb.append((char0x0292);
            sb.append((char0x030C);
        }
        else if (character == 0x01F0) {
            sb.append((char0x006A);
            sb.append((char0x030C);
        }
        else if (character == 0x01F4) {
            sb.append((char0x0047);
            sb.append((char0x0301);
        }
        else if (character == 0x01F5) {
            sb.append((char0x0067);
            sb.append((char0x0301);
        }
        else if (character == 0x01F8) {
            sb.append((char0x004E);
            sb.append((char0x0300);
        }
        else if (character == 0x01F9) {
            sb.append((char0x006E);
            sb.append((char0x0300);
        }
        else if (character == 0x01FA) {
            sb.append((char0x00C5);
            sb.append((char0x0301);
        }
        else if (character == 0x01FB) {
            sb.append((char0x00E5);
            sb.append((char0x0301);
        }
        else if (character == 0x01FC) {
            sb.append((char0x00C6);
            sb.append((char0x0301);
        }
        else if (character == 0x01FD) {
            sb.append((char0x00E6);
            sb.append((char0x0301);
        }
        else if (character == 0x01FE) {
            sb.append((char0x00D8);
            sb.append((char0x0301);
        }
        else if (character == 0x01FF) {
            sb.append((char0x00F8);
            sb.append((char0x0301);
        }
        else if (character == 0x0200) {
            sb.append((char0x0041);
            sb.append((char0x030F);
        }
        else if (character == 0x0201) {
            sb.append((char0x0061);
            sb.append((char0x030F);
        }
        else if (character == 0x0202) {
            sb.append((char0x0041);
            sb.append((char0x0311);
        }
        else if (character == 0x0203) {
            sb.append((char0x0061);
            sb.append((char0x0311);
        }
        else if (character == 0x0204) {
            sb.append((char0x0045);
            sb.append((char0x030F);
        }
        else if (character == 0x0205) {
            sb.append((char0x0065);
            sb.append((char0x030F);
        }
        else if (character == 0x0206) {
            sb.append((char0x0045);
            sb.append((char0x0311);
        }
        else if (character == 0x0207) {
            sb.append((char0x0065);
            sb.append((char0x0311);
        }
        else if (character == 0x0208) {
            sb.append((char0x0049);
            sb.append((char0x030F);
        }
        else if (character == 0x0209) {
            sb.append((char0x0069);
            sb.append((char0x030F);
        }
        else if (character == 0x020A) {
            sb.append((char0x0049);
            sb.append((char0x0311);
        }
        else if (character == 0x020B) {
            sb.append((char0x0069);
            sb.append((char0x0311);
        }
        else if (character == 0x020C) {
            sb.append((char0x004F);
            sb.append((char0x030F);
        }
        else if (character == 0x020D) {
            sb.append((char0x006F);
            sb.append((char0x030F);
        }
        else if (character == 0x020E) {
            sb.append((char0x004F);
            sb.append((char0x0311);
        }
        else if (character == 0x020F) {
            sb.append((char0x006F);
            sb.append((char0x0311);
        }
        else if (character == 0x0210) {
            sb.append((char0x0052);
            sb.append((char0x030F);
        }
        else if (character == 0x0211) {
            sb.append((char0x0072);
            sb.append((char0x030F);
        }
        else if (character == 0x0212) {
            sb.append((char0x0052);
            sb.append((char0x0311);
        }
        else if (character == 0x0213) {
            sb.append((char0x0072);
            sb.append((char0x0311);
        }
        else if (character == 0x0214) {
            sb.append((char0x0055);
            sb.append((char0x030F);
        }
        else if (character == 0x0215) {
            sb.append((char0x0075);
            sb.append((char0x030F);
        }
        else if (character == 0x0216) {
            sb.append((char0x0055);
            sb.append((char0x0311);
        }
        else if (character == 0x0217) {
            sb.append((char0x0075);
            sb.append((char0x0311);
        }
        else if (character == 0x0218) {
            sb.append((char0x0053);
            sb.append((char0x0326);
        }
        else if (character == 0x0219) {
            sb.append((char0x0073);
            sb.append((char0x0326);
        }
        else if (character == 0x021A) {
            sb.append((char0x0054);
            sb.append((char0x0326);
        }
        else if (character == 0x021B) {
            sb.append((char0x0074);
            sb.append((char0x0326);
        }
        else if (character == 0x021E) {
            sb.append((char0x0048);
            sb.append((char0x030C);
        }
        else if (character == 0x021F) {
            sb.append((char0x0068);
            sb.append((char0x030C);
        }
        else if (character == 0x0226) {
            sb.append((char0x0041);
            sb.append((char0x0307);
        }
        else if (character == 0x0227) {
            sb.append((char0x0061);
            sb.append((char0x0307);
        }
        else if (character == 0x0228) {
            sb.append((char0x0045);
            sb.append((char0x0327);
        }
        else if (character == 0x0229) {
            sb.append((char0x0065);
            sb.append((char0x0327);
        }
        else if (character == 0x022A) {
            sb.append((char0x00D6);
            sb.append((char0x0304);
        }
        else if (character == 0x022B) {
            sb.append((char0x00F6);
            sb.append((char0x0304);
        }
        else if (character == 0x022C) {
            sb.append((char0x00D5);
            sb.append((char0x0304);
        }
        else if (character == 0x022D) {
            sb.append((char0x00F5);
            sb.append((char0x0304);
        }
        else if (character == 0x022E) {
            sb.append((char0x004F);
            sb.append((char0x0307);
        }
        else if (character == 0x022F) {
            sb.append((char0x006F);
            sb.append((char0x0307);
        }
        else if (character == 0x0230) {
            sb.append((char0x022E);
            sb.append((char0x0304);
        }
        else if (character == 0x0231) {
            sb.append((char0x022F);
            sb.append((char0x0304);
        }
        else if (character == 0x0232) {
            sb.append((char0x0059);
            sb.append((char0x0304);
        }
        else if (character == 0x0233) {
            sb.append((char0x0079);
            sb.append((char0x0304);
        }
        else if (character == 0x0340) {
            sb.append((char0x0300);
        }
        else if (character == 0x0341) {
            sb.append((char0x0301);
        }
        else if (character == 0x0343) {
            sb.append((char0x0313);
        }
        else if (character == 0x0344) {
            sb.append((char0x0308);
            sb.append((char0x0301);
        }
        else if (character == 0x0374) {
            sb.append((char0x02B9);
        }
        else if (character == 0x037E) {
            sb.append((char0x003B);
        }
        else if (character == 0x0385) {
            sb.append((char0x00A8);
            sb.append((char0x0301);
        }
        else if (character == 0x0386) {
            sb.append((char0x0391);
            sb.append((char0x0301);
        }
        else if (character == 0x0387) {
            sb.append((char0x00B7);
        }
        else if (character == 0x0388) {
            sb.append((char0x0395);
            sb.append((char0x0301);
        }
        else if (character == 0x0389) {
            sb.append((char0x0397);
            sb.append((char0x0301);
        }
        else if (character == 0x038A) {
            sb.append((char0x0399);
            sb.append((char0x0301);
        }
        else if (character == 0x038C) {
            sb.append((char0x039F);
            sb.append((char0x0301);
        }
        else if (character == 0x038E) {
            sb.append((char0x03A5);
            sb.append((char0x0301);
        }
        else if (character == 0x038F) {
            sb.append((char0x03A9);
            sb.append((char0x0301);
        }
        else if (character == 0x0390) {
            sb.append((char0x03CA);
            sb.append((char0x0301);
        }
        else if (character == 0x03AA) {
            sb.append((char0x0399);
            sb.append((char0x0308);
        }
        else if (character == 0x03AB) {
            sb.append((char0x03A5);
            sb.append((char0x0308);
        }
        else if (character == 0x03AC) {
            sb.append((char0x03B1);
            sb.append((char0x0301);
        }
        else if (character == 0x03AD) {
            sb.append((char0x03B5);
            sb.append((char0x0301);
        }
        else if (character == 0x03AE) {
            sb.append((char0x03B7);
            sb.append((char0x0301);
        }
        else if (character == 0x03AF) {
            sb.append((char0x03B9);
            sb.append((char0x0301);
        }
        else if (character == 0x03B0) {
            sb.append((char0x03CB);
            sb.append((char0x0301);
        }
        else if (character == 0x03CA) {
            sb.append((char0x03B9);
            sb.append((char0x0308);
        }
        else if (character == 0x03CB) {
            sb.append((char0x03C5);
            sb.append((char0x0308);
        }
        else if (character == 0x03CC) {
            sb.append((char0x03BF);
            sb.append((char0x0301);
        }
        else if (character == 0x03CD) {
            sb.append((char0x03C5);
            sb.append((char0x0301);
        }
        else if (character == 0x03CE) {
            sb.append((char0x03C9);
            sb.append((char0x0301);
        }
        else if (character == 0x03D3) {
            sb.append((char0x03D2);
            sb.append((char0x0301);
        }
        else if (character == 0x03D4) {
            sb.append((char0x03D2);
            sb.append((char0x0308);
        }
        else if (character == 0x0400) {
            sb.append((char0x0415);
            sb.append((char0x0300);
        }
        else if (character == 0x0401) {
            sb.append((char0x0415);
            sb.append((char0x0308);
        }
        else if (character == 0x0403) {
            sb.append((char0x0413);
            sb.append((char0x0301);
        }
        else if (character == 0x0407) {
            sb.append((char0x0406);
            sb.append((char0x0308);
        }
        else if (character == 0x040C) {
            sb.append((char0x041A);
            sb.append((char0x0301);
        }
        else if (character == 0x040D) {
            sb.append((char0x0418);
            sb.append((char0x0300);
        }
        else if (character == 0x040E) {
            sb.append((char0x0423);
            sb.append((char0x0306);
        }
        else if (character == 0x0419) {
            sb.append((char0x0418);
            sb.append((char0x0306);
        }
        else if (character == 0x0439) {
            sb.append((char0x0438);
            sb.append((char0x0306);
        }
        else if (character == 0x0450) {
            sb.append((char0x0435);
            sb.append((char0x0300);
        }
        else if (character == 0x0451) {
            sb.append((char0x0435);
            sb.append((char0x0308);
        }
        else if (character == 0x0453) {
            sb.append((char0x0433);
            sb.append((char0x0301);
        }
        else if (character == 0x0457) {
            sb.append((char0x0456);
            sb.append((char0x0308);
        }
        else if (character == 0x045C) {
            sb.append((char0x043A);
            sb.append((char0x0301);
        }
        else if (character == 0x045D) {
            sb.append((char0x0438);
            sb.append((char0x0300);
        }
        else if (character == 0x045E) {
            sb.append((char0x0443);
            sb.append((char0x0306);
        }
        else if (character == 0x0476) {
            sb.append((char0x0474);
            sb.append((char0x030F);
        }
        else if (character == 0x0477) {
            sb.append((char0x0475);
            sb.append((char0x030F);
        }
        else if (character == 0x04C1) {
            sb.append((char0x0416);
            sb.append((char0x0306);
        }
        else if (character == 0x04C2) {
            sb.append((char0x0436);
            sb.append((char0x0306);
        }
        else if (character == 0x04D0) {
            sb.append((char0x0410);
            sb.append((char0x0306);
        }
        else if (character == 0x04D1) {
            sb.append((char0x0430);
            sb.append((char0x0306);
        }
        else if (character == 0x04D2) {
            sb.append((char0x0410);
            sb.append((char0x0308);
        }
        else if (character == 0x04D3) {
            sb.append((char0x0430);
            sb.append((char0x0308);
        }
        else if (character == 0x04D6) {
            sb.append((char0x0415);
            sb.append((char0x0306);
        }
        else if (character == 0x04D7) {
            sb.append((char0x0435);
            sb.append((char0x0306);
        }
        else if (character == 0x04DA) {
            sb.append((char0x04D8);
            sb.append((char0x0308);
        }
        else if (character == 0x04DB) {
            sb.append((char0x04D9);
            sb.append((char0x0308);
        }
        else if (character == 0x04DC) {
            sb.append((char0x0416);
            sb.append((char0x0308);
        }
        else if (character == 0x04DD) {
            sb.append((char0x0436);
            sb.append((char0x0308);
        }
        else if (character == 0x04DE) {
            sb.append((char0x0417);
            sb.append((char0x0308);
        }
        else if (character == 0x04DF) {
            sb.append((char0x0437);
            sb.append((char0x0308);
        }
        else if (character == 0x04E2) {
            sb.append((char0x0418);
            sb.append((char0x0304);
        }
        else if (character == 0x04E3) {
            sb.append((char0x0438);
            sb.append((char0x0304);
        }
        else if (character == 0x04E4) {
            sb.append((char0x0418);
            sb.append((char0x0308);
        }
        else if (character == 0x04E5) {
            sb.append((char0x0438);
            sb.append((char0x0308);
        }
        else if (character == 0x04E6) {
            sb.append((char0x041E);
            sb.append((char0x0308);
        }
        else if (character == 0x04E7) {
            sb.append((char0x043E);
            sb.append((char0x0308);
        }
        else if (character == 0x04EA) {
            sb.append((char0x04E8);
            sb.append((char0x0308);
        }
        else if (character == 0x04EB) {
            sb.append((char0x04E9);
            sb.append((char0x0308);
        }
        else if (character == 0x04EC) {
            sb.append((char0x042D);
            sb.append((char0x0308);
        }
        else if (character == 0x04ED) {
            sb.append((char0x044D);
            sb.append((char0x0308);
        }
        else if (character == 0x04EE) {
            sb.append((char0x0423);
            sb.append((char0x0304);
        }
        else if (character == 0x04EF) {
            sb.append((char0x0443);
            sb.append((char0x0304);
        }
        else if (character == 0x04F0) {
            sb.append((char0x0423);
            sb.append((char0x0308);
        }
        else if (character == 0x04F1) {
            sb.append((char0x0443);
            sb.append((char0x0308);
        }
        else if (character == 0x04F2) {
            sb.append((char0x0423);
            sb.append((char0x030B);
        }
        else if (character == 0x04F3) {
            sb.append((char0x0443);
            sb.append((char0x030B);
        }
        else if (character == 0x04F4) {
            sb.append((char0x0427);
            sb.append((char0x0308);
        }
        else if (character == 0x04F5) {
            sb.append((char0x0447);
            sb.append((char0x0308);
        }
        else if (character == 0x04F8) {
            sb.append((char0x042B);
            sb.append((char0x0308);
        }
        else if (character == 0x04F9) {
            sb.append((char0x044B);
            sb.append((char0x0308);
        }
        else if (character == 0x0622) {
            sb.append((char0x0627);
            sb.append((char0x0653);
        }
        else if (character == 0x0623) {
            sb.append((char0x0627);
            sb.append((char0x0654);
        }
        else if (character == 0x0624) {
            sb.append((char0x0648);
            sb.append((char0x0654);
        }
        else if (character == 0x0625) {
            sb.append((char0x0627);
            sb.append((char0x0655);
        }
        else if (character == 0x0626) {
            sb.append((char0x064A);
            sb.append((char0x0654);
        }
        else if (character == 0x06C0) {
            sb.append((char0x06D5);
            sb.append((char0x0654);
        }
        else if (character == 0x06C2) {
            sb.append((char0x06C1);
            sb.append((char0x0654);
        }
        else if (character == 0x06D3) {
            sb.append((char0x06D2);
            sb.append((char0x0654);
        }
        else if (character == 0x0929) {
            sb.append((char0x0928);
            sb.append((char0x093C);
        }
        else if (character == 0x0931) {
            sb.append((char0x0930);
            sb.append((char0x093C);
        }
        else if (character == 0x0934) {
            sb.append((char0x0933);
            sb.append((char0x093C);
        }
        else if (character == 0x0958) {
            sb.append((char0x0915);
            sb.append((char0x093C);
        }
        else if (character == 0x0959) {
            sb.append((char0x0916);
            sb.append((char0x093C);
        }
        else if (character == 0x095A) {
            sb.append((char0x0917);
            sb.append((char0x093C);
        }
        else if (character == 0x095B) {
            sb.append((char0x091C);
            sb.append((char0x093C);
        }
        else if (character == 0x095C) {
            sb.append((char0x0921);
            sb.append((char0x093C);
        }
        else if (character == 0x095D) {
            sb.append((char0x0922);
            sb.append((char0x093C);
        }
        else if (character == 0x095E) {
            sb.append((char0x092B);
            sb.append((char0x093C);
        }
        else if (character == 0x095F) {
            sb.append((char0x092F);
            sb.append((char0x093C);
        }
        else if (character == 0x09CB) {
            sb.append((char0x09C7);
            sb.append((char0x09BE);
        }
        else if (character == 0x09CC) {
            sb.append((char0x09C7);
            sb.append((char0x09D7);
        }
        else if (character == 0x09DC) {
            sb.append((char0x09A1);
            sb.append((char0x09BC);
        }
        else if (character == 0x09DD) {
            sb.append((char0x09A2);
            sb.append((char0x09BC);
        }
        else if (character == 0x09DF) {
            sb.append((char0x09AF);
            sb.append((char0x09BC);
        }
        else if (character == 0x0A33) {
            sb.append((char0x0A32);
            sb.append((char0x0A3C);
        }
        else if (character == 0x0A36) {
            sb.append((char0x0A38);
            sb.append((char0x0A3C);
        }
        else if (character == 0x0A59) {
            sb.append((char0x0A16);
            sb.append((char0x0A3C);
        }
        else if (character == 0x0A5A) {
            sb.append((char0x0A17);
            sb.append((char0x0A3C);
        }
        else if (character == 0x0A5B) {
            sb.append((char0x0A1C);
            sb.append((char0x0A3C);
        }
        else if (character == 0x0A5E) {
            sb.append((char0x0A2B);
            sb.append((char0x0A3C);
        }
        else if (character == 0x0B48) {
            sb.append((char0x0B47);
            sb.append((char0x0B56);
        }
        else if (character == 0x0B4B) {
            sb.append((char0x0B47);
            sb.append((char0x0B3E);
        }
        else if (character == 0x0B4C) {
            sb.append((char0x0B47);
            sb.append((char0x0B57);
        }
        else if (character == 0x0B5C) {
            sb.append((char0x0B21);
            sb.append((char0x0B3C);
        }
        else if (character == 0x0B5D) {
            sb.append((char0x0B22);
            sb.append((char0x0B3C);
        }
        else if (character == 0x0B94) {
            sb.append((char0x0B92);
            sb.append((char0x0BD7);
        }
        else if (character == 0x0BCA) {
            sb.append((char0x0BC6);
            sb.append((char0x0BBE);
        }
        else if (character == 0x0BCB) {
            sb.append((char0x0BC7);
            sb.append((char0x0BBE);
        }
        else if (character == 0x0BCC) {
            sb.append((char0x0BC6);
            sb.append((char0x0BD7);
        }
        else if (character == 0x0C48) {
            sb.append((char0x0C46);
            sb.append((char0x0C56);
        }
        else if (character == 0x0CC0) {
            sb.append((char0x0CBF);
            sb.append((char0x0CD5);
        }
        else if (character == 0x0CC7) {
            sb.append((char0x0CC6);
            sb.append((char0x0CD5);
        }
        else if (character == 0x0CC8) {
            sb.append((char0x0CC6);
            sb.append((char0x0CD6);
        }
        else if (character == 0x0CCA) {
            sb.append((char0x0CC6);
            sb.append((char0x0CC2);
        }
        else if (character == 0x0CCB) {
            sb.append((char0x0CCA);
            sb.append((char0x0CD5);
        }
        else if (character == 0x0D4A) {
            sb.append((char0x0D46);
            sb.append((char0x0D3E);
        }
        else if (character == 0x0D4B) {
            sb.append((char0x0D47);
            sb.append((char0x0D3E);
        }
        else if (character == 0x0D4C) {
            sb.append((char0x0D46);
            sb.append((char0x0D57);
        }
        else if (character == 0x0DDA) {
            sb.append((char0x0DD9);
            sb.append((char0x0DCA);
        }
        else if (character == 0x0DDC) {
            sb.append((char0x0DD9);
            sb.append((char0x0DCF);
        }
        else if (character == 0x0DDD) {
            sb.append((char0x0DDC);
            sb.append((char0x0DCA);
        }
        else if (character == 0x0DDE) {
            sb.append((char0x0DD9);
            sb.append((char0x0DDF);
        }
        else if (character == 0x0F43) {
            sb.append((char0x0F42);
            sb.append((char0x0FB7);
        }
        else if (character == 0x0F4D) {
            sb.append((char0x0F4C);
            sb.append((char0x0FB7);
        }
        else if (character == 0x0F52) {
            sb.append((char0x0F51);
            sb.append((char0x0FB7);
        }
        else if (character == 0x0F57) {
            sb.append((char0x0F56);
            sb.append((char0x0FB7);
        }
        else if (character == 0x0F5C) {
            sb.append((char0x0F5B);
            sb.append((char0x0FB7);
        }
        else if (character == 0x0F69) {
            sb.append((char0x0F40);
            sb.append((char0x0FB5);
        }
        else if (character == 0x0F73) {
            sb.append((char0x0F71);
            sb.append((char0x0F72);
        }
        else if (character == 0x0F75) {
            sb.append((char0x0F71);
            sb.append((char0x0F74);
        }
        else if (character == 0x0F76) {
            sb.append((char0x0FB2);
            sb.append((char0x0F80);
        }
        else if (character == 0x0F78) {
            sb.append((char0x0FB3);
            sb.append((char0x0F80);
        }
        else if (character == 0x0F81) {
            sb.append((char0x0F71);
            sb.append((char0x0F80);
        }
        else if (character == 0x0F93) {
            sb.append((char0x0F92);
            sb.append((char0x0FB7);
        }
        else if (character == 0x0F9D) {
            sb.append((char0x0F9C);
            sb.append((char0x0FB7);
        }
        else if (character == 0x0FA2) {
            sb.append((char0x0FA1);
            sb.append((char0x0FB7);
        }
        else if (character == 0x0FA7) {
            sb.append((char0x0FA6);
            sb.append((char0x0FB7);
        }
        else if (character == 0x0FAC) {
            sb.append((char0x0FAB);
            sb.append((char0x0FB7);
        }
        else if (character == 0x0FB9) {
            sb.append((char0x0F90);
            sb.append((char0x0FB5);
        }
        else if (character == 0x1026) {
            sb.append((char0x1025);
            sb.append((char0x102E);
        }
        else if (character == 0x1E00) {
            sb.append((char0x0041);
            sb.append((char0x0325);
        }
        else if (character == 0x1E01) {
            sb.append((char0x0061);
            sb.append((char0x0325);
        }
        else if (character == 0x1E02) {
            sb.append((char0x0042);
            sb.append((char0x0307);
        }
        else if (character == 0x1E03) {
            sb.append((char0x0062);
            sb.append((char0x0307);
        }
        else if (character == 0x1E04) {
            sb.append((char0x0042);
            sb.append((char0x0323);
        }
        else if (character == 0x1E05) {
            sb.append((char0x0062);
            sb.append((char0x0323);
        }
        else if (character == 0x1E06) {
            sb.append((char0x0042);
            sb.append((char0x0331);
        }
        else if (character == 0x1E07) {
            sb.append((char0x0062);
            sb.append((char0x0331);
        }
        else if (character == 0x1E08) {
            sb.append((char0x00C7);
            sb.append((char0x0301);
        }
        else if (character == 0x1E09) {
            sb.append((char0x00E7);
            sb.append((char0x0301);
        }
        else if (character == 0x1E0A) {
            sb.append((char0x0044);
            sb.append((char0x0307);
        }
        else if (character == 0x1E0B) {
            sb.append((char0x0064);
            sb.append((char0x0307);
        }
        else if (character == 0x1E0C) {
            sb.append((char0x0044);
            sb.append((char0x0323);
        }
        else if (character == 0x1E0D) {
            sb.append((char0x0064);
            sb.append((char0x0323);
        }
        else if (character == 0x1E0E) {
            sb.append((char0x0044);
            sb.append((char0x0331);
        }
        else if (character == 0x1E0F) {
            sb.append((char0x0064);
            sb.append((char0x0331);
        }
        else if (character == 0x1E10) {
            sb.append((char0x0044);
            sb.append((char0x0327);
        }
        else if (character == 0x1E11) {
            sb.append((char0x0064);
            sb.append((char0x0327);
        }
        else if (character == 0x1E12) {
            sb.append((char0x0044);
            sb.append((char0x032D);
        }
        else if (character == 0x1E13) {
            sb.append((char0x0064);
            sb.append((char0x032D);
        }
        else if