/*- * Copyright (C) 2006-2007 Erik Larsson * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.catacombae.hfs; import java.nio.CharBuffer; import java.util.Collection; import java.util.HashMap; import java.util.LinkedList; import java.util.Map; import org.catacombae.util.Util; /** * A class implementing a table for handling the decomposition of characters that's necessary when * creating Unicode filenames for an HFS+ file system. * Created from http://developer.apple.com/technotes/tn/tn1150table.html and verified against it. * Also including a Hangul decomposition algorithm from the Unicode Book. * * @author <a href="http://www.catacombae.org/" target="_top">Erik Larsson</a> */ public class UnicodeNormalizationToolkit { /** * The maximum number of decomposed UTF-16 code units for each composed * UTF-16 code unit. */ private static final int MAX_DECOMPOSED_LENGTH = 4; private static final UnicodeNormalizationToolkit defaultInstance = new UnicodeNormalizationToolkit(); private Map<Character, char[]> decompositionTable; private TrieNode compositionTrie; /** This class encapsulates code copied from http://unicode.org/reports/tr15/#Hangul in order to deal with Hangul decomposition algorithmically. No indication of any copyright issues. The same algorithm is presented in section 3.11 of the Unicode standard 3.0. */ private static class HangulDecomposition { static final int SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28, NCount = VCount * TCount, // 588 SCount = LCount * NCount; // 11172 public static String decomposeHangul(char c) { CharBuffer result = CharBuffer.allocate(3); decomposeHangul(c, result); return new String(result.array()); } public static void decomposeHangul(char c, CharBuffer result) { int SIndex = c - SBase; if (SIndex < 0 || SIndex >= SCount) { result.put(c); return; } int L = LBase + SIndex / NCount; int V = VBase + (SIndex % NCount) / TCount; int T = TBase + SIndex % TCount; result.put((char)L); result.put((char)V); if (T != TBase) result.put((char)T); } public static String composeHangul(String source) { int len = source.length(); if (len == 0) return ""; StringBuilder result = new StringBuilder(); char last = source.charAt(0); // copy first char result.append(last); for (int i = 1; i < len; ++i) { char ch = source.charAt(i); // 1. check to see if two current characters are L and V int LIndex = last - LBase; if (0 <= LIndex && LIndex < LCount) { int VIndex = ch - VBase; if (0 <= VIndex && VIndex < VCount) { // make syllable of form LV last = (char)(SBase + (LIndex * VCount + VIndex) * TCount); result.setCharAt(result.length()-1, last); // reset last continue; // discard ch } } // 2. check to see if two current characters are LV and T int SIndex = last - SBase; if (0 <= SIndex && SIndex < SCount && (SIndex % TCount) == 0) { int TIndex = ch - TBase; if (0 < TIndex && TIndex < TCount) { // make syllable of form LVT last += TIndex; result.setCharAt(result.length()-1, last); // reset last continue; // discard ch } } // if neither case was true, just add the character last = ch; result.append(ch); } return result.toString(); } } private static long nextID = 0; private static class TrieNode { private final HashMap<Character, TrieNode> childNodes = new HashMap<Character, TrieNode>(); private char[] replacementSequence = null; private char trig; private long id; public TrieNode(char trig) { this.trig = trig; this.id = nextID++; } public void addChild(char nextChar, TrieNode childNode) { childNodes.put(nextChar, childNode); } public TrieNode getChild(char nextChar) { return childNodes.get(nextChar); } public Collection<TrieNode> getChildren() { return childNodes.values(); } public void setReplacementSequence(char[] seq) { this.replacementSequence = seq; } public char[] getReplacementSequence() { return replacementSequence; } @Override public String toString() { return "{" + id + "} 0x" + Util.toHexStringBE(trig) + (replacementSequence == null?"":(" -> 0x" + Util.toHexStringBE(replacementSequence))); } } private UnicodeNormalizationToolkit() { this(new HashMap<Character, char[]>()); } /** This method can be used in order to tune which Map implementation is used (default is HashMap). */ private UnicodeNormalizationToolkit(Map<Character, char[]> decompositionTable) { this.decompositionTable = decompositionTable; buildDecompositionTable(decompositionTable); this.compositionTrie = buildCompositionTrie(decompositionTable); //checkTrie(compositionTrie); } public static UnicodeNormalizationToolkit getDefaultInstance() { return defaultInstance; } public static UnicodeNormalizationToolkit getCustomInstance(Map<Character, char[]> decompositionTable) { return new UnicodeNormalizationToolkit(decompositionTable); } /** * Breaks down composed UTF-16 code unit <code>c</code> into one or more * decomposed UTF-16 code units, putting the result in * <code>decomposedBuffer</code>. */ public void decompose(char c, CharBuffer decomposedBuffer) { int codepoint = c & 0xFFFF; if(codepoint >= 0xAC00 && codepoint <= 0xD7A3) { // We have a Hangul character HangulDecomposition.decomposeHangul(c, decomposedBuffer); } else { char[] subst = decompositionTable.get(c); if(subst == null) { decomposedBuffer.put(c); } else { for(char sc : subst) { decomposedBuffer.put(sc); } } } } /** * Breaks down composed UTF-16 code unit <code>c</code> into one or more * decomposed UTF-16 code units, returning the result as a * {@link java.lang.String}. */ public String decompose(char c) { final CharBuffer decomposedBuffer = CharBuffer.allocate(MAX_DECOMPOSED_LENGTH); decompose(c, decomposedBuffer); decomposedBuffer.limit(decomposedBuffer.position()); decomposedBuffer.rewind(); return decomposedBuffer.toString(); } /** * Breaks down each composed Unicode character in array * <code>composedArray</code> into one or more decomposed characters, * returning the result as a {@link java.lang.String}. */ public String decompose(char[] composedArray) { final CharBuffer decomposedBuffer = CharBuffer.allocate(composedArray.length * MAX_DECOMPOSED_LENGTH); for(char c : composedArray) { decompose(c, decomposedBuffer); } decomposedBuffer.limit(decomposedBuffer.position()); decomposedBuffer.rewind(); return decomposedBuffer.toString(); } /** * Breaks down each composed Unicode character in buffer * <code>composedBuffer</code> into one or more decomposed characters, * returning the result as a {@link java.lang.String}. */ public String decompose(CharBuffer composedBuffer) { final CharBuffer decomposedBuffer = CharBuffer.allocate(composedBuffer.length() * MAX_DECOMPOSED_LENGTH); while(composedBuffer.hasRemaining()) { decompose(composedBuffer.get(), decomposedBuffer); } decomposedBuffer.limit(decomposedBuffer.position()); decomposedBuffer.rewind(); return decomposedBuffer.toString(); } public String compose(String decomposedString) { //System.err.println("compose"); StringBuilder sb = new StringBuilder(); LinkedList<TrieNode> matchSequence = new LinkedList<TrieNode>(); for(int i = 0; i < decomposedString.length(); ++i) { //System.err.println("i = " + i); char[] replacementSequence = null; matchSequence.clear(); /* First, we loop through the characters, starting at i, and matches characters in the trie until no more match is found. We push each node in a stack for later processing. */ TrieNode tn = compositionTrie; int charsRead = 0; while(tn != null && i+charsRead < decomposedString.length()) { char current = decomposedString.charAt(i+charsRead); tn = tn.getChild(current); if(tn != null) { matchSequence.addFirst(tn); ++charsRead; } //System.err.print(" -> 0x" + Util.toHexStringBE(nextChar)); } //System.err.println(" <BREAK>"); /* To find the longest matching substring, we must loop from the back of the match sequence and find the first (last) TrieNode with a replacement sequence. We have conveniently arranged the match sequence in a LIFO manner, so we just have to loop. */ //System.err.print(" {read:" + charsRead + "}"); for(TrieNode cur : matchSequence) { //System.err.print(cur.toString() + " > "); if(cur.getReplacementSequence() != null) { //System.err.println("<REPLACEMENT FOUND: " + Util.toHexStringBE(cur.getReplacementSequence()) + ">{read:" + charsRead + "}"); replacementSequence = cur.getReplacementSequence(); break; } else --charsRead; } // if(replacementSequence == null) // System.err.println("<NOTHING FOUND>{read:" + charsRead + "}"); if(replacementSequence != null) { sb.append(replacementSequence); i += charsRead - 1; } else sb.append(decomposedString.charAt(i)); } return HangulDecomposition.composeHangul(sb.toString()); } public Map<Character, char[]> getDecompositionTable() { return decompositionTable; } /** Throws a RuntimeException if the trie contains non-leaf nodes with replacement sequences. */ private void checkTrie(TrieNode root) { checkTrie(root, " "); } private void checkTrie(TrieNode root, String prefix) { Collection<TrieNode> children = root.getChildren(); //if(children.size() > 0 && root.getReplacementSequence() != null) //throw new RuntimeException("Inconsistent trie."); if(root.getReplacementSequence() != null) { System.err.print(prefix + root.toString());// + " -> 0x" + Util.toHexStringBE(root.getReplacementSequence())); if(children.size() > 0) System.err.println(" <INCONSISTENCY!>"); else System.err.println(); } else System.err.println(prefix + root.toString()); for(TrieNode tn : children) checkTrie(tn, prefix + " "); } /** * Test main method that takes an output file as args[0], and prints the decomposition * table to that file, in the same form as doc/decomposition_ref.txt (a cut and paste * text file from the table at http://developer.apple.com/technotes/tn/tn1150table.html). * Use org.catacombae.hfsexplorer.testcode.LineCompare to compare the generated text * file to decomposition_ref.txt (ignores empty lines and different line endings). */ /* public static void main(String[] args) throws IOException { // Useage of TreeMap is essential to produce a sorted output. UnicodeNormalizationToolkit ud = new UnicodeNormalizationToolkit(new TreeMap<Character, char[]>()); PrintStream out = new PrintStream(new FileOutputStream(args[0]), true, "US-ASCII"); for(Map.Entry<Character, char[]> cur : ud.decompositionTable.entrySet()) { out.println("0x" + Util.toHexStringBE((short)cur.getKey().charValue()).toUpperCase()); char[] subst = cur.getValue(); out.print("0x" + Util.toHexStringBE((short)subst[0]).toUpperCase()); for(int i = 1; i < subst.length; ++i) { out.print(" 0x" + Util.toHexStringBE((short)subst[i]).toUpperCase()); } out.println(); } } */ private static TrieNode buildCompositionTrie(Map<Character, char[]> decompositionTable) { final TrieNode rootNode = new TrieNode('\0'); for(Map.Entry<Character, char[]> entry : decompositionTable.entrySet()) { char key = entry.getKey(); char[] value = entry.getValue(); TrieNode currentNode = rootNode; for(char c : value) { TrieNode nextNode = currentNode.getChild(c); if(nextNode == null) { nextNode = new TrieNode(c); currentNode.addChild(c, nextNode); } currentNode = nextNode; } currentNode.setReplacementSequence(new char[] { key }); } return rootNode; } private static void buildDecompositionTable(Map<Character, char[]> decompositionTable) { char key; char[] subst; key = (char)0x00C0; subst = new char[] { (char)0x0041, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x00C1; subst = new char[] { (char)0x0041, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x00C2; subst = new char[] { (char)0x0041, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x00C3; subst = new char[] { (char)0x0041, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x00C4; subst = new char[] { (char)0x0041, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x00C5; subst = new char[] { (char)0x0041, (char)0x030A }; decompositionTable.put(key, subst); key = (char)0x00C7; subst = new char[] { (char)0x0043, (char)0x0327 }; decompositionTable.put(key, subst); key = (char)0x00C8; subst = new char[] { (char)0x0045, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x00C9; subst = new char[] { (char)0x0045, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x00CA; subst = new char[] { (char)0x0045, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x00CB; subst = new char[] { (char)0x0045, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x00CC; subst = new char[] { (char)0x0049, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x00CD; subst = new char[] { (char)0x0049, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x00CE; subst = new char[] { (char)0x0049, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x00CF; subst = new char[] { (char)0x0049, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x00D1; subst = new char[] { (char)0x004E, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x00D2; subst = new char[] { (char)0x004F, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x00D3; subst = new char[] { (char)0x004F, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x00D4; subst = new char[] { (char)0x004F, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x00D5; subst = new char[] { (char)0x004F, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x00D6; subst = new char[] { (char)0x004F, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x00D9; subst = new char[] { (char)0x0055, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x00DA; subst = new char[] { (char)0x0055, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x00DB; subst = new char[] { (char)0x0055, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x00DC; subst = new char[] { (char)0x0055, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x00DD; subst = new char[] { (char)0x0059, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x00E0; subst = new char[] { (char)0x0061, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x00E1; subst = new char[] { (char)0x0061, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x00E2; subst = new char[] { (char)0x0061, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x00E3; subst = new char[] { (char)0x0061, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x00E4; subst = new char[] { (char)0x0061, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x00E5; subst = new char[] { (char)0x0061, (char)0x030A }; decompositionTable.put(key, subst); key = (char)0x00E7; subst = new char[] { (char)0x0063, (char)0x0327 }; decompositionTable.put(key, subst); key = (char)0x00E8; subst = new char[] { (char)0x0065, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x00E9; subst = new char[] { (char)0x0065, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x00EA; subst = new char[] { (char)0x0065, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x00EB; subst = new char[] { (char)0x0065, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x00EC; subst = new char[] { (char)0x0069, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x00ED; subst = new char[] { (char)0x0069, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x00EE; subst = new char[] { (char)0x0069, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x00EF; subst = new char[] { (char)0x0069, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x00F1; subst = new char[] { (char)0x006E, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x00F2; subst = new char[] { (char)0x006F, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x00F3; subst = new char[] { (char)0x006F, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x00F4; subst = new char[] { (char)0x006F, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x00F5; subst = new char[] { (char)0x006F, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x00F6; subst = new char[] { (char)0x006F, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x00F9; subst = new char[] { (char)0x0075, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x00FA; subst = new char[] { (char)0x0075, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x00FB; subst = new char[] { (char)0x0075, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x00FC; subst = new char[] { (char)0x0075, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x00FD; subst = new char[] { (char)0x0079, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x00FF; subst = new char[] { (char)0x0079, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x0100; subst = new char[] { (char)0x0041, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x0101; subst = new char[] { (char)0x0061, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x0102; subst = new char[] { (char)0x0041, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x0103; subst = new char[] { (char)0x0061, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x0104; subst = new char[] { (char)0x0041, (char)0x0328 }; decompositionTable.put(key, subst); key = (char)0x0105; subst = new char[] { (char)0x0061, (char)0x0328 }; decompositionTable.put(key, subst); key = (char)0x0106; subst = new char[] { (char)0x0043, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x0107; subst = new char[] { (char)0x0063, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x0108; subst = new char[] { (char)0x0043, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x0109; subst = new char[] { (char)0x0063, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x010A; subst = new char[] { (char)0x0043, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x010B; subst = new char[] { (char)0x0063, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x010C; subst = new char[] { (char)0x0043, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x010D; subst = new char[] { (char)0x0063, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x010E; subst = new char[] { (char)0x0044, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x010F; subst = new char[] { (char)0x0064, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x0112; subst = new char[] { (char)0x0045, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x0113; subst = new char[] { (char)0x0065, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x0114; subst = new char[] { (char)0x0045, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x0115; subst = new char[] { (char)0x0065, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x0116; subst = new char[] { (char)0x0045, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x0117; subst = new char[] { (char)0x0065, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x0118; subst = new char[] { (char)0x0045, (char)0x0328 }; decompositionTable.put(key, subst); key = (char)0x0119; subst = new char[] { (char)0x0065, (char)0x0328 }; decompositionTable.put(key, subst); key = (char)0x011A; subst = new char[] { (char)0x0045, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x011B; subst = new char[] { (char)0x0065, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x011C; subst = new char[] { (char)0x0047, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x011D; subst = new char[] { (char)0x0067, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x011E; subst = new char[] { (char)0x0047, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x011F; subst = new char[] { (char)0x0067, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x0120; subst = new char[] { (char)0x0047, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x0121; subst = new char[] { (char)0x0067, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x0122; subst = new char[] { (char)0x0047, (char)0x0327 }; decompositionTable.put(key, subst); key = (char)0x0123; subst = new char[] { (char)0x0067, (char)0x0327 }; decompositionTable.put(key, subst); key = (char)0x0124; subst = new char[] { (char)0x0048, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x0125; subst = new char[] { (char)0x0068, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x0128; subst = new char[] { (char)0x0049, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x0129; subst = new char[] { (char)0x0069, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x012A; subst = new char[] { (char)0x0049, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x012B; subst = new char[] { (char)0x0069, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x012C; subst = new char[] { (char)0x0049, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x012D; subst = new char[] { (char)0x0069, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x012E; subst = new char[] { (char)0x0049, (char)0x0328 }; decompositionTable.put(key, subst); key = (char)0x012F; subst = new char[] { (char)0x0069, (char)0x0328 }; decompositionTable.put(key, subst); key = (char)0x0130; subst = new char[] { (char)0x0049, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x0134; subst = new char[] { (char)0x004A, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x0135; subst = new char[] { (char)0x006A, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x0136; subst = new char[] { (char)0x004B, (char)0x0327 }; decompositionTable.put(key, subst); key = (char)0x0137; subst = new char[] { (char)0x006B, (char)0x0327 }; decompositionTable.put(key, subst); key = (char)0x0139; subst = new char[] { (char)0x004C, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x013A; subst = new char[] { (char)0x006C, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x013B; subst = new char[] { (char)0x004C, (char)0x0327 }; decompositionTable.put(key, subst); key = (char)0x013C; subst = new char[] { (char)0x006C, (char)0x0327 }; decompositionTable.put(key, subst); key = (char)0x013D; subst = new char[] { (char)0x004C, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x013E; subst = new char[] { (char)0x006C, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x0143; subst = new char[] { (char)0x004E, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x0144; subst = new char[] { (char)0x006E, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x0145; subst = new char[] { (char)0x004E, (char)0x0327 }; decompositionTable.put(key, subst); key = (char)0x0146; subst = new char[] { (char)0x006E, (char)0x0327 }; decompositionTable.put(key, subst); key = (char)0x0147; subst = new char[] { (char)0x004E, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x0148; subst = new char[] { (char)0x006E, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x014C; subst = new char[] { (char)0x004F, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x014D; subst = new char[] { (char)0x006F, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x014E; subst = new char[] { (char)0x004F, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x014F; subst = new char[] { (char)0x006F, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x0150; subst = new char[] { (char)0x004F, (char)0x030B }; decompositionTable.put(key, subst); key = (char)0x0151; subst = new char[] { (char)0x006F, (char)0x030B }; decompositionTable.put(key, subst); key = (char)0x0154; subst = new char[] { (char)0x0052, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x0155; subst = new char[] { (char)0x0072, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x0156; subst = new char[] { (char)0x0052, (char)0x0327 }; decompositionTable.put(key, subst); key = (char)0x0157; subst = new char[] { (char)0x0072, (char)0x0327 }; decompositionTable.put(key, subst); key = (char)0x0158; subst = new char[] { (char)0x0052, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x0159; subst = new char[] { (char)0x0072, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x015A; subst = new char[] { (char)0x0053, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x015B; subst = new char[] { (char)0x0073, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x015C; subst = new char[] { (char)0x0053, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x015D; subst = new char[] { (char)0x0073, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x015E; subst = new char[] { (char)0x0053, (char)0x0327 }; decompositionTable.put(key, subst); key = (char)0x015F; subst = new char[] { (char)0x0073, (char)0x0327 }; decompositionTable.put(key, subst); key = (char)0x0160; subst = new char[] { (char)0x0053, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x0161; subst = new char[] { (char)0x0073, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x0162; subst = new char[] { (char)0x0054, (char)0x0327 }; decompositionTable.put(key, subst); key = (char)0x0163; subst = new char[] { (char)0x0074, (char)0x0327 }; decompositionTable.put(key, subst); key = (char)0x0164; subst = new char[] { (char)0x0054, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x0165; subst = new char[] { (char)0x0074, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x0168; subst = new char[] { (char)0x0055, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x0169; subst = new char[] { (char)0x0075, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x016A; subst = new char[] { (char)0x0055, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x016B; subst = new char[] { (char)0x0075, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x016C; subst = new char[] { (char)0x0055, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x016D; subst = new char[] { (char)0x0075, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x016E; subst = new char[] { (char)0x0055, (char)0x030A }; decompositionTable.put(key, subst); key = (char)0x016F; subst = new char[] { (char)0x0075, (char)0x030A }; decompositionTable.put(key, subst); key = (char)0x0170; subst = new char[] { (char)0x0055, (char)0x030B }; decompositionTable.put(key, subst); key = (char)0x0171; subst = new char[] { (char)0x0075, (char)0x030B }; decompositionTable.put(key, subst); key = (char)0x0172; subst = new char[] { (char)0x0055, (char)0x0328 }; decompositionTable.put(key, subst); key = (char)0x0173; subst = new char[] { (char)0x0075, (char)0x0328 }; decompositionTable.put(key, subst); key = (char)0x0174; subst = new char[] { (char)0x0057, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x0175; subst = new char[] { (char)0x0077, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x0176; subst = new char[] { (char)0x0059, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x0177; subst = new char[] { (char)0x0079, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x0178; subst = new char[] { (char)0x0059, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x0179; subst = new char[] { (char)0x005A, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x017A; subst = new char[] { (char)0x007A, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x017B; subst = new char[] { (char)0x005A, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x017C; subst = new char[] { (char)0x007A, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x017D; subst = new char[] { (char)0x005A, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x017E; subst = new char[] { (char)0x007A, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x01A0; subst = new char[] { (char)0x004F, (char)0x031B }; decompositionTable.put(key, subst); key = (char)0x01A1; subst = new char[] { (char)0x006F, (char)0x031B }; decompositionTable.put(key, subst); key = (char)0x01AF; subst = new char[] { (char)0x0055, (char)0x031B }; decompositionTable.put(key, subst); key = (char)0x01B0; subst = new char[] { (char)0x0075, (char)0x031B }; decompositionTable.put(key, subst); key = (char)0x01CD; subst = new char[] { (char)0x0041, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x01CE; subst = new char[] { (char)0x0061, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x01CF; subst = new char[] { (char)0x0049, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x01D0; subst = new char[] { (char)0x0069, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x01D1; subst = new char[] { (char)0x004F, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x01D2; subst = new char[] { (char)0x006F, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x01D3; subst = new char[] { (char)0x0055, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x01D4; subst = new char[] { (char)0x0075, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x01D5; subst = new char[] { (char)0x0055, (char)0x0308, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x01D6; subst = new char[] { (char)0x0075, (char)0x0308, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x01D7; subst = new char[] { (char)0x0055, (char)0x0308, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x01D8; subst = new char[] { (char)0x0075, (char)0x0308, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x01D9; subst = new char[] { (char)0x0055, (char)0x0308, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x01DA; subst = new char[] { (char)0x0075, (char)0x0308, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x01DB; subst = new char[] { (char)0x0055, (char)0x0308, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x01DC; subst = new char[] { (char)0x0075, (char)0x0308, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x01DE; subst = new char[] { (char)0x0041, (char)0x0308, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x01DF; subst = new char[] { (char)0x0061, (char)0x0308, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x01E0; subst = new char[] { (char)0x0041, (char)0x0307, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x01E1; subst = new char[] { (char)0x0061, (char)0x0307, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x01E2; subst = new char[] { (char)0x00C6, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x01E3; subst = new char[] { (char)0x00E6, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x01E6; subst = new char[] { (char)0x0047, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x01E7; subst = new char[] { (char)0x0067, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x01E8; subst = new char[] { (char)0x004B, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x01E9; subst = new char[] { (char)0x006B, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x01EA; subst = new char[] { (char)0x004F, (char)0x0328 }; decompositionTable.put(key, subst); key = (char)0x01EB; subst = new char[] { (char)0x006F, (char)0x0328 }; decompositionTable.put(key, subst); key = (char)0x01EC; subst = new char[] { (char)0x004F, (char)0x0328, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x01ED; subst = new char[] { (char)0x006F, (char)0x0328, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x01EE; subst = new char[] { (char)0x01B7, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x01EF; subst = new char[] { (char)0x0292, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x01F0; subst = new char[] { (char)0x006A, (char)0x030C }; decompositionTable.put(key, subst); key = (char)0x01F4; subst = new char[] { (char)0x0047, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x01F5; subst = new char[] { (char)0x0067, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x01FA; subst = new char[] { (char)0x0041, (char)0x030A, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x01FB; subst = new char[] { (char)0x0061, (char)0x030A, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x01FC; subst = new char[] { (char)0x00C6, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x01FD; subst = new char[] { (char)0x00E6, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x01FE; subst = new char[] { (char)0x00D8, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x01FF; subst = new char[] { (char)0x00F8, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x0200; subst = new char[] { (char)0x0041, (char)0x030F }; decompositionTable.put(key, subst); key = (char)0x0201; subst = new char[] { (char)0x0061, (char)0x030F }; decompositionTable.put(key, subst); key = (char)0x0202; subst = new char[] { (char)0x0041, (char)0x0311 }; decompositionTable.put(key, subst); key = (char)0x0203; subst = new char[] { (char)0x0061, (char)0x0311 }; decompositionTable.put(key, subst); key = (char)0x0204; subst = new char[] { (char)0x0045, (char)0x030F }; decompositionTable.put(key, subst); key = (char)0x0205; subst = new char[] { (char)0x0065, (char)0x030F }; decompositionTable.put(key, subst); key = (char)0x0206; subst = new char[] { (char)0x0045, (char)0x0311 }; decompositionTable.put(key, subst); key = (char)0x0207; subst = new char[] { (char)0x0065, (char)0x0311 }; decompositionTable.put(key, subst); key = (char)0x0208; subst = new char[] { (char)0x0049, (char)0x030F }; decompositionTable.put(key, subst); key = (char)0x0209; subst = new char[] { (char)0x0069, (char)0x030F }; decompositionTable.put(key, subst); key = (char)0x020A; subst = new char[] { (char)0x0049, (char)0x0311 }; decompositionTable.put(key, subst); key = (char)0x020B; subst = new char[] { (char)0x0069, (char)0x0311 }; decompositionTable.put(key, subst); key = (char)0x020C; subst = new char[] { (char)0x004F, (char)0x030F }; decompositionTable.put(key, subst); key = (char)0x020D; subst = new char[] { (char)0x006F, (char)0x030F }; decompositionTable.put(key, subst); key = (char)0x020E; subst = new char[] { (char)0x004F, (char)0x0311 }; decompositionTable.put(key, subst); key = (char)0x020F; subst = new char[] { (char)0x006F, (char)0x0311 }; decompositionTable.put(key, subst); key = (char)0x0210; subst = new char[] { (char)0x0052, (char)0x030F }; decompositionTable.put(key, subst); key = (char)0x0211; subst = new char[] { (char)0x0072, (char)0x030F }; decompositionTable.put(key, subst); key = (char)0x0212; subst = new char[] { (char)0x0052, (char)0x0311 }; decompositionTable.put(key, subst); key = (char)0x0213; subst = new char[] { (char)0x0072, (char)0x0311 }; decompositionTable.put(key, subst); key = (char)0x0214; subst = new char[] { (char)0x0055, (char)0x030F }; decompositionTable.put(key, subst); key = (char)0x0215; subst = new char[] { (char)0x0075, (char)0x030F }; decompositionTable.put(key, subst); key = (char)0x0216; subst = new char[] { (char)0x0055, (char)0x0311 }; decompositionTable.put(key, subst); key = (char)0x0217; subst = new char[] { (char)0x0075, (char)0x0311 }; decompositionTable.put(key, subst); key = (char)0x0310; subst = new char[] { (char)0x0306, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x0340; subst = new char[] { (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x0341; subst = new char[] { (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x0343; subst = new char[] { (char)0x0313 }; decompositionTable.put(key, subst); key = (char)0x0344; subst = new char[] { (char)0x0308, (char)0x030D }; decompositionTable.put(key, subst); key = (char)0x0374; subst = new char[] { (char)0x02B9 }; decompositionTable.put(key, subst); key = (char)0x037E; subst = new char[] { (char)0x003B }; decompositionTable.put(key, subst); key = (char)0x0385; subst = new char[] { (char)0x00A8, (char)0x030D }; decompositionTable.put(key, subst); key = (char)0x0386; subst = new char[] { (char)0x0391, (char)0x030D }; decompositionTable.put(key, subst); key = (char)0x0387; subst = new char[] { (char)0x00B7 }; decompositionTable.put(key, subst); key = (char)0x0388; subst = new char[] { (char)0x0395, (char)0x030D }; decompositionTable.put(key, subst); key = (char)0x0389; subst = new char[] { (char)0x0397, (char)0x030D }; decompositionTable.put(key, subst); key = (char)0x038A; subst = new char[] { (char)0x0399, (char)0x030D }; decompositionTable.put(key, subst); key = (char)0x038C; subst = new char[] { (char)0x039F, (char)0x030D }; decompositionTable.put(key, subst); key = (char)0x038E; subst = new char[] { (char)0x03A5, (char)0x030D }; decompositionTable.put(key, subst); key = (char)0x038F; subst = new char[] { (char)0x03A9, (char)0x030D }; decompositionTable.put(key, subst); key = (char)0x0390; subst = new char[] { (char)0x03B9, (char)0x0308, (char)0x030D }; decompositionTable.put(key, subst); key = (char)0x03AA; subst = new char[] { (char)0x0399, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x03AB; subst = new char[] { (char)0x03A5, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x03AC; subst = new char[] { (char)0x03B1, (char)0x030D }; decompositionTable.put(key, subst); key = (char)0x03AD; subst = new char[] { (char)0x03B5, (char)0x030D }; decompositionTable.put(key, subst); key = (char)0x03AE; subst = new char[] { (char)0x03B7, (char)0x030D }; decompositionTable.put(key, subst); key = (char)0x03AF; subst = new char[] { (char)0x03B9, (char)0x030D }; decompositionTable.put(key, subst); key = (char)0x03B0; subst = new char[] { (char)0x03C5, (char)0x0308, (char)0x030D }; decompositionTable.put(key, subst); key = (char)0x03CA; subst = new char[] { (char)0x03B9, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x03CB; subst = new char[] { (char)0x03C5, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x03CC; subst = new char[] { (char)0x03BF, (char)0x030D }; decompositionTable.put(key, subst); key = (char)0x03CD; subst = new char[] { (char)0x03C5, (char)0x030D }; decompositionTable.put(key, subst); key = (char)0x03CE; subst = new char[] { (char)0x03C9, (char)0x030D }; decompositionTable.put(key, subst); key = (char)0x03D3; subst = new char[] { (char)0x03D2, (char)0x030D }; decompositionTable.put(key, subst); key = (char)0x03D4; subst = new char[] { (char)0x03D2, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x0401; subst = new char[] { (char)0x0415, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x0403; subst = new char[] { (char)0x0413, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x0407; subst = new char[] { (char)0x0406, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x040C; subst = new char[] { (char)0x041A, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x040E; subst = new char[] { (char)0x0423, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x0419; subst = new char[] { (char)0x0418, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x0439; subst = new char[] { (char)0x0438, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x0451; subst = new char[] { (char)0x0435, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x0453; subst = new char[] { (char)0x0433, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x0457; subst = new char[] { (char)0x0456, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x045C; subst = new char[] { (char)0x043A, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x045E; subst = new char[] { (char)0x0443, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x0476; subst = new char[] { (char)0x0474, (char)0x030F }; decompositionTable.put(key, subst); key = (char)0x0477; subst = new char[] { (char)0x0475, (char)0x030F }; decompositionTable.put(key, subst); key = (char)0x04C1; subst = new char[] { (char)0x0416, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x04C2; subst = new char[] { (char)0x0436, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x04D0; subst = new char[] { (char)0x0410, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x04D1; subst = new char[] { (char)0x0430, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x04D2; subst = new char[] { (char)0x0410, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x04D3; subst = new char[] { (char)0x0430, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x04D4; subst = new char[] { (char)0x00C6 }; decompositionTable.put(key, subst); key = (char)0x04D5; subst = new char[] { (char)0x00E6 }; decompositionTable.put(key, subst); key = (char)0x04D6; subst = new char[] { (char)0x0415, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x04D7; subst = new char[] { (char)0x0435, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x04D8; subst = new char[] { (char)0x018F }; decompositionTable.put(key, subst); key = (char)0x04D9; subst = new char[] { (char)0x0259 }; decompositionTable.put(key, subst); key = (char)0x04DA; subst = new char[] { (char)0x018F, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x04DB; subst = new char[] { (char)0x0259, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x04DC; subst = new char[] { (char)0x0416, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x04DD; subst = new char[] { (char)0x0436, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x04DE; subst = new char[] { (char)0x0417, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x04DF; subst = new char[] { (char)0x0437, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x04E0; subst = new char[] { (char)0x01B7 }; decompositionTable.put(key, subst); key = (char)0x04E1; subst = new char[] { (char)0x0292 }; decompositionTable.put(key, subst); key = (char)0x04E2; subst = new char[] { (char)0x0418, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x04E3; subst = new char[] { (char)0x0438, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x04E4; subst = new char[] { (char)0x0418, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x04E5; subst = new char[] { (char)0x0438, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x04E6; subst = new char[] { (char)0x041E, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x04E7; subst = new char[] { (char)0x043E, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x04E8; subst = new char[] { (char)0x019F }; decompositionTable.put(key, subst); key = (char)0x04E9; subst = new char[] { (char)0x0275 }; decompositionTable.put(key, subst); key = (char)0x04EA; subst = new char[] { (char)0x019F, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x04EB; subst = new char[] { (char)0x0275, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x04EE; subst = new char[] { (char)0x0423, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x04EF; subst = new char[] { (char)0x0443, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x04F0; subst = new char[] { (char)0x0423, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x04F1; subst = new char[] { (char)0x0443, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x04F2; subst = new char[] { (char)0x0423, (char)0x030B }; decompositionTable.put(key, subst); key = (char)0x04F3; subst = new char[] { (char)0x0443, (char)0x030B }; decompositionTable.put(key, subst); key = (char)0x04F4; subst = new char[] { (char)0x0427, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x04F5; subst = new char[] { (char)0x0447, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x04F8; subst = new char[] { (char)0x042B, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x04F9; subst = new char[] { (char)0x044B, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x0929; subst = new char[] { (char)0x0928, (char)0x093C }; decompositionTable.put(key, subst); key = (char)0x0931; subst = new char[] { (char)0x0930, (char)0x093C }; decompositionTable.put(key, subst); key = (char)0x0934; subst = new char[] { (char)0x0933, (char)0x093C }; decompositionTable.put(key, subst); key = (char)0x0958; subst = new char[] { (char)0x0915, (char)0x093C }; decompositionTable.put(key, subst); key = (char)0x0959; subst = new char[] { (char)0x0916, (char)0x093C }; decompositionTable.put(key, subst); key = (char)0x095A; subst = new char[] { (char)0x0917, (char)0x093C }; decompositionTable.put(key, subst); key = (char)0x095B; subst = new char[] { (char)0x091C, (char)0x093C }; decompositionTable.put(key, subst); key = (char)0x095C; subst = new char[] { (char)0x0921, (char)0x093C }; decompositionTable.put(key, subst); key = (char)0x095D; subst = new char[] { (char)0x0922, (char)0x093C }; decompositionTable.put(key, subst); key = (char)0x095E; subst = new char[] { (char)0x092B, (char)0x093C }; decompositionTable.put(key, subst); key = (char)0x095F; subst = new char[] { (char)0x092F, (char)0x093C }; decompositionTable.put(key, subst); key = (char)0x09B0; subst = new char[] { (char)0x09AC, (char)0x09BC }; decompositionTable.put(key, subst); key = (char)0x09CB; subst = new char[] { (char)0x09C7, (char)0x09BE }; decompositionTable.put(key, subst); key = (char)0x09CC; subst = new char[] { (char)0x09C7, (char)0x09D7 }; decompositionTable.put(key, subst); key = (char)0x09DC; subst = new char[] { (char)0x09A1, (char)0x09BC }; decompositionTable.put(key, subst); key = (char)0x09DD; subst = new char[] { (char)0x09A2, (char)0x09BC }; decompositionTable.put(key, subst); key = (char)0x09DF; subst = new char[] { (char)0x09AF, (char)0x09BC }; decompositionTable.put(key, subst); key = (char)0x0A59; subst = new char[] { (char)0x0A16, (char)0x0A3C }; decompositionTable.put(key, subst); key = (char)0x0A5A; subst = new char[] { (char)0x0A17, (char)0x0A3C }; decompositionTable.put(key, subst); key = (char)0x0A5B; subst = new char[] { (char)0x0A1C, (char)0x0A3C }; decompositionTable.put(key, subst); key = (char)0x0A5C; subst = new char[] { (char)0x0A21, (char)0x0A3C }; decompositionTable.put(key, subst); key = (char)0x0A5E; subst = new char[] { (char)0x0A2B, (char)0x0A3C }; decompositionTable.put(key, subst); key = (char)0x0B48; subst = new char[] { (char)0x0B47, (char)0x0B56 }; decompositionTable.put(key, subst); key = (char)0x0B4B; subst = new char[] { (char)0x0B47, (char)0x0B3E }; decompositionTable.put(key, subst); key = (char)0x0B4C; subst = new char[] { (char)0x0B47, (char)0x0B57 }; decompositionTable.put(key, subst); key = (char)0x0B5C; subst = new char[] { (char)0x0B21, (char)0x0B3C }; decompositionTable.put(key, subst); key = (char)0x0B5D; subst = new char[] { (char)0x0B22, (char)0x0B3C }; decompositionTable.put(key, subst); key = (char)0x0B5F; subst = new char[] { (char)0x0B2F, (char)0x0B3C }; decompositionTable.put(key, subst); key = (char)0x0B94; subst = new char[] { (char)0x0B92, (char)0x0BD7 }; decompositionTable.put(key, subst); key = (char)0x0BCA; subst = new char[] { (char)0x0BC6, (char)0x0BBE }; decompositionTable.put(key, subst); key = (char)0x0BCB; subst = new char[] { (char)0x0BC7, (char)0x0BBE }; decompositionTable.put(key, subst); key = (char)0x0BCC; subst = new char[] { (char)0x0BC6, (char)0x0BD7 }; decompositionTable.put(key, subst); key = (char)0x0C48; subst = new char[] { (char)0x0C46, (char)0x0C56 }; decompositionTable.put(key, subst); key = (char)0x0CC0; subst = new char[] { (char)0x0CBF, (char)0x0CD5 }; decompositionTable.put(key, subst); key = (char)0x0CC7; subst = new char[] { (char)0x0CC6, (char)0x0CD5 }; decompositionTable.put(key, subst); key = (char)0x0CC8; subst = new char[] { (char)0x0CC6, (char)0x0CD6 }; decompositionTable.put(key, subst); key = (char)0x0CCA; subst = new char[] { (char)0x0CC6, (char)0x0CC2 }; decompositionTable.put(key, subst); key = (char)0x0CCB; subst = new char[] { (char)0x0CC6, (char)0x0CC2, (char)0x0CD5 }; decompositionTable.put(key, subst); key = (char)0x0D4A; subst = new char[] { (char)0x0D46, (char)0x0D3E }; decompositionTable.put(key, subst); key = (char)0x0D4B; subst = new char[] { (char)0x0D47, (char)0x0D3E }; decompositionTable.put(key, subst); key = (char)0x0D4C; subst = new char[] { (char)0x0D46, (char)0x0D57 }; decompositionTable.put(key, subst); key = (char)0x0E33; subst = new char[] { (char)0x0E4D, (char)0x0E32 }; decompositionTable.put(key, subst); key = (char)0x0EB3; subst = new char[] { (char)0x0ECD, (char)0x0EB2 }; decompositionTable.put(key, subst); key = (char)0x0F43; subst = new char[] { (char)0x0F42, (char)0x0FB7 }; decompositionTable.put(key, subst); key = (char)0x0F4D; subst = new char[] { (char)0x0F4C, (char)0x0FB7 }; decompositionTable.put(key, subst); key = (char)0x0F52; subst = new char[] { (char)0x0F51, (char)0x0FB7 }; decompositionTable.put(key, subst); key = (char)0x0F57; subst = new char[] { (char)0x0F56, (char)0x0FB7 }; decompositionTable.put(key, subst); key = (char)0x0F5C; subst = new char[] { (char)0x0F5B, (char)0x0FB7 }; decompositionTable.put(key, subst); key = (char)0x0F69; subst = new char[] { (char)0x0F40, (char)0x0FB5 }; decompositionTable.put(key, subst); key = (char)0x0F73; subst = new char[] { (char)0x0F72, (char)0x0F71 }; decompositionTable.put(key, subst); key = (char)0x0F75; subst = new char[] { (char)0x0F74, (char)0x0F71 }; decompositionTable.put(key, subst); key = (char)0x0F76; subst = new char[] { (char)0x0FB2, (char)0x0F80 }; decompositionTable.put(key, subst); key = (char)0x0F77; subst = new char[] { (char)0x0FB2, (char)0x0F80, (char)0x0F71 }; decompositionTable.put(key, subst); key = (char)0x0F78; subst = new char[] { (char)0x0FB3, (char)0x0F80 }; decompositionTable.put(key, subst); key = (char)0x0F79; subst = new char[] { (char)0x0FB3, (char)0x0F80, (char)0x0F71 }; decompositionTable.put(key, subst); key = (char)0x0F81; subst = new char[] { (char)0x0F80, (char)0x0F71 }; decompositionTable.put(key, subst); key = (char)0x0F93; subst = new char[] { (char)0x0F92, (char)0x0FB7 }; decompositionTable.put(key, subst); key = (char)0x0F9D; subst = new char[] { (char)0x0F9C, (char)0x0FB7 }; decompositionTable.put(key, subst); key = (char)0x0FA2; subst = new char[] { (char)0x0FA1, (char)0x0FB7 }; decompositionTable.put(key, subst); key = (char)0x0FA7; subst = new char[] { (char)0x0FA6, (char)0x0FB7 }; decompositionTable.put(key, subst); key = (char)0x0FAC; subst = new char[] { (char)0x0FAB, (char)0x0FB7 }; decompositionTable.put(key, subst); key = (char)0x0FB9; subst = new char[] { (char)0x0F90, (char)0x0FB5 }; decompositionTable.put(key, subst); key = (char)0x1E00; subst = new char[] { (char)0x0041, (char)0x0325 }; decompositionTable.put(key, subst); key = (char)0x1E01; subst = new char[] { (char)0x0061, (char)0x0325 }; decompositionTable.put(key, subst); key = (char)0x1E02; subst = new char[] { (char)0x0042, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E03; subst = new char[] { (char)0x0062, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E04; subst = new char[] { (char)0x0042, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E05; subst = new char[] { (char)0x0062, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E06; subst = new char[] { (char)0x0042, (char)0x0331 }; decompositionTable.put(key, subst); key = (char)0x1E07; subst = new char[] { (char)0x0062, (char)0x0331 }; decompositionTable.put(key, subst); key = (char)0x1E08; subst = new char[] { (char)0x0043, (char)0x0327, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1E09; subst = new char[] { (char)0x0063, (char)0x0327, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1E0A; subst = new char[] { (char)0x0044, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E0B; subst = new char[] { (char)0x0064, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E0C; subst = new char[] { (char)0x0044, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E0D; subst = new char[] { (char)0x0064, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E0E; subst = new char[] { (char)0x0044, (char)0x0331 }; decompositionTable.put(key, subst); key = (char)0x1E0F; subst = new char[] { (char)0x0064, (char)0x0331 }; decompositionTable.put(key, subst); key = (char)0x1E10; subst = new char[] { (char)0x0044, (char)0x0327 }; decompositionTable.put(key, subst); key = (char)0x1E11; subst = new char[] { (char)0x0064, (char)0x0327 }; decompositionTable.put(key, subst); key = (char)0x1E12; subst = new char[] { (char)0x0044, (char)0x032D }; decompositionTable.put(key, subst); key = (char)0x1E13; subst = new char[] { (char)0x0064, (char)0x032D }; decompositionTable.put(key, subst); key = (char)0x1E14; subst = new char[] { (char)0x0045, (char)0x0304, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1E15; subst = new char[] { (char)0x0065, (char)0x0304, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1E16; subst = new char[] { (char)0x0045, (char)0x0304, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1E17; subst = new char[] { (char)0x0065, (char)0x0304, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1E18; subst = new char[] { (char)0x0045, (char)0x032D }; decompositionTable.put(key, subst); key = (char)0x1E19; subst = new char[] { (char)0x0065, (char)0x032D }; decompositionTable.put(key, subst); key = (char)0x1E1A; subst = new char[] { (char)0x0045, (char)0x0330 }; decompositionTable.put(key, subst); key = (char)0x1E1B; subst = new char[] { (char)0x0065, (char)0x0330 }; decompositionTable.put(key, subst); key = (char)0x1E1C; subst = new char[] { (char)0x0045, (char)0x0327, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x1E1D; subst = new char[] { (char)0x0065, (char)0x0327, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x1E1E; subst = new char[] { (char)0x0046, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E1F; subst = new char[] { (char)0x0066, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E20; subst = new char[] { (char)0x0047, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x1E21; subst = new char[] { (char)0x0067, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x1E22; subst = new char[] { (char)0x0048, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E23; subst = new char[] { (char)0x0068, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E24; subst = new char[] { (char)0x0048, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E25; subst = new char[] { (char)0x0068, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E26; subst = new char[] { (char)0x0048, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x1E27; subst = new char[] { (char)0x0068, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x1E28; subst = new char[] { (char)0x0048, (char)0x0327 }; decompositionTable.put(key, subst); key = (char)0x1E29; subst = new char[] { (char)0x0068, (char)0x0327 }; decompositionTable.put(key, subst); key = (char)0x1E2A; subst = new char[] { (char)0x0048, (char)0x032E }; decompositionTable.put(key, subst); key = (char)0x1E2B; subst = new char[] { (char)0x0068, (char)0x032E }; decompositionTable.put(key, subst); key = (char)0x1E2C; subst = new char[] { (char)0x0049, (char)0x0330 }; decompositionTable.put(key, subst); key = (char)0x1E2D; subst = new char[] { (char)0x0069, (char)0x0330 }; decompositionTable.put(key, subst); key = (char)0x1E2E; subst = new char[] { (char)0x0049, (char)0x0308, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1E2F; subst = new char[] { (char)0x0069, (char)0x0308, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1E30; subst = new char[] { (char)0x004B, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1E31; subst = new char[] { (char)0x006B, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1E32; subst = new char[] { (char)0x004B, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E33; subst = new char[] { (char)0x006B, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E34; subst = new char[] { (char)0x004B, (char)0x0331 }; decompositionTable.put(key, subst); key = (char)0x1E35; subst = new char[] { (char)0x006B, (char)0x0331 }; decompositionTable.put(key, subst); key = (char)0x1E36; subst = new char[] { (char)0x004C, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E37; subst = new char[] { (char)0x006C, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E38; subst = new char[] { (char)0x004C, (char)0x0323, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x1E39; subst = new char[] { (char)0x006C, (char)0x0323, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x1E3A; subst = new char[] { (char)0x004C, (char)0x0331 }; decompositionTable.put(key, subst); key = (char)0x1E3B; subst = new char[] { (char)0x006C, (char)0x0331 }; decompositionTable.put(key, subst); key = (char)0x1E3C; subst = new char[] { (char)0x004C, (char)0x032D }; decompositionTable.put(key, subst); key = (char)0x1E3D; subst = new char[] { (char)0x006C, (char)0x032D }; decompositionTable.put(key, subst); key = (char)0x1E3E; subst = new char[] { (char)0x004D, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1E3F; subst = new char[] { (char)0x006D, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1E40; subst = new char[] { (char)0x004D, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E41; subst = new char[] { (char)0x006D, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E42; subst = new char[] { (char)0x004D, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E43; subst = new char[] { (char)0x006D, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E44; subst = new char[] { (char)0x004E, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E45; subst = new char[] { (char)0x006E, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E46; subst = new char[] { (char)0x004E, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E47; subst = new char[] { (char)0x006E, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E48; subst = new char[] { (char)0x004E, (char)0x0331 }; decompositionTable.put(key, subst); key = (char)0x1E49; subst = new char[] { (char)0x006E, (char)0x0331 }; decompositionTable.put(key, subst); key = (char)0x1E4A; subst = new char[] { (char)0x004E, (char)0x032D }; decompositionTable.put(key, subst); key = (char)0x1E4B; subst = new char[] { (char)0x006E, (char)0x032D }; decompositionTable.put(key, subst); key = (char)0x1E4C; subst = new char[] { (char)0x004F, (char)0x0303, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1E4D; subst = new char[] { (char)0x006F, (char)0x0303, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1E4E; subst = new char[] { (char)0x004F, (char)0x0303, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x1E4F; subst = new char[] { (char)0x006F, (char)0x0303, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x1E50; subst = new char[] { (char)0x004F, (char)0x0304, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1E51; subst = new char[] { (char)0x006F, (char)0x0304, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1E52; subst = new char[] { (char)0x004F, (char)0x0304, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1E53; subst = new char[] { (char)0x006F, (char)0x0304, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1E54; subst = new char[] { (char)0x0050, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1E55; subst = new char[] { (char)0x0070, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1E56; subst = new char[] { (char)0x0050, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E57; subst = new char[] { (char)0x0070, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E58; subst = new char[] { (char)0x0052, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E59; subst = new char[] { (char)0x0072, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E5A; subst = new char[] { (char)0x0052, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E5B; subst = new char[] { (char)0x0072, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E5C; subst = new char[] { (char)0x0052, (char)0x0323, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x1E5D; subst = new char[] { (char)0x0072, (char)0x0323, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x1E5E; subst = new char[] { (char)0x0052, (char)0x0331 }; decompositionTable.put(key, subst); key = (char)0x1E5F; subst = new char[] { (char)0x0072, (char)0x0331 }; decompositionTable.put(key, subst); key = (char)0x1E60; subst = new char[] { (char)0x0053, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E61; subst = new char[] { (char)0x0073, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E62; subst = new char[] { (char)0x0053, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E63; subst = new char[] { (char)0x0073, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E64; subst = new char[] { (char)0x0053, (char)0x0301, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E65; subst = new char[] { (char)0x0073, (char)0x0301, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E66; subst = new char[] { (char)0x0053, (char)0x030C, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E67; subst = new char[] { (char)0x0073, (char)0x030C, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E68; subst = new char[] { (char)0x0053, (char)0x0323, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E69; subst = new char[] { (char)0x0073, (char)0x0323, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E6A; subst = new char[] { (char)0x0054, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E6B; subst = new char[] { (char)0x0074, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E6C; subst = new char[] { (char)0x0054, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E6D; subst = new char[] { (char)0x0074, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E6E; subst = new char[] { (char)0x0054, (char)0x0331 }; decompositionTable.put(key, subst); key = (char)0x1E6F; subst = new char[] { (char)0x0074, (char)0x0331 }; decompositionTable.put(key, subst); key = (char)0x1E70; subst = new char[] { (char)0x0054, (char)0x032D }; decompositionTable.put(key, subst); key = (char)0x1E71; subst = new char[] { (char)0x0074, (char)0x032D }; decompositionTable.put(key, subst); key = (char)0x1E72; subst = new char[] { (char)0x0055, (char)0x0324 }; decompositionTable.put(key, subst); key = (char)0x1E73; subst = new char[] { (char)0x0075, (char)0x0324 }; decompositionTable.put(key, subst); key = (char)0x1E74; subst = new char[] { (char)0x0055, (char)0x0330 }; decompositionTable.put(key, subst); key = (char)0x1E75; subst = new char[] { (char)0x0075, (char)0x0330 }; decompositionTable.put(key, subst); key = (char)0x1E76; subst = new char[] { (char)0x0055, (char)0x032D }; decompositionTable.put(key, subst); key = (char)0x1E77; subst = new char[] { (char)0x0075, (char)0x032D }; decompositionTable.put(key, subst); key = (char)0x1E78; subst = new char[] { (char)0x0055, (char)0x0303, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1E79; subst = new char[] { (char)0x0075, (char)0x0303, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1E7A; subst = new char[] { (char)0x0055, (char)0x0304, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x1E7B; subst = new char[] { (char)0x0075, (char)0x0304, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x1E7C; subst = new char[] { (char)0x0056, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x1E7D; subst = new char[] { (char)0x0076, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x1E7E; subst = new char[] { (char)0x0056, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E7F; subst = new char[] { (char)0x0076, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E80; subst = new char[] { (char)0x0057, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1E81; subst = new char[] { (char)0x0077, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1E82; subst = new char[] { (char)0x0057, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1E83; subst = new char[] { (char)0x0077, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1E84; subst = new char[] { (char)0x0057, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x1E85; subst = new char[] { (char)0x0077, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x1E86; subst = new char[] { (char)0x0057, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E87; subst = new char[] { (char)0x0077, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E88; subst = new char[] { (char)0x0057, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E89; subst = new char[] { (char)0x0077, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E8A; subst = new char[] { (char)0x0058, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E8B; subst = new char[] { (char)0x0078, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E8C; subst = new char[] { (char)0x0058, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x1E8D; subst = new char[] { (char)0x0078, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x1E8E; subst = new char[] { (char)0x0059, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E8F; subst = new char[] { (char)0x0079, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1E90; subst = new char[] { (char)0x005A, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x1E91; subst = new char[] { (char)0x007A, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x1E92; subst = new char[] { (char)0x005A, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E93; subst = new char[] { (char)0x007A, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1E94; subst = new char[] { (char)0x005A, (char)0x0331 }; decompositionTable.put(key, subst); key = (char)0x1E95; subst = new char[] { (char)0x007A, (char)0x0331 }; decompositionTable.put(key, subst); key = (char)0x1E96; subst = new char[] { (char)0x0068, (char)0x0331 }; decompositionTable.put(key, subst); key = (char)0x1E97; subst = new char[] { (char)0x0074, (char)0x0308 }; decompositionTable.put(key, subst); key = (char)0x1E98; subst = new char[] { (char)0x0077, (char)0x030A }; decompositionTable.put(key, subst); key = (char)0x1E99; subst = new char[] { (char)0x0079, (char)0x030A }; decompositionTable.put(key, subst); key = (char)0x1E9B; subst = new char[] { (char)0x017F, (char)0x0307 }; decompositionTable.put(key, subst); key = (char)0x1EA0; subst = new char[] { (char)0x0041, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1EA1; subst = new char[] { (char)0x0061, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1EA2; subst = new char[] { (char)0x0041, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1EA3; subst = new char[] { (char)0x0061, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1EA4; subst = new char[] { (char)0x0041, (char)0x0302, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1EA5; subst = new char[] { (char)0x0061, (char)0x0302, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1EA6; subst = new char[] { (char)0x0041, (char)0x0302, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1EA7; subst = new char[] { (char)0x0061, (char)0x0302, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1EA8; subst = new char[] { (char)0x0041, (char)0x0302, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1EA9; subst = new char[] { (char)0x0061, (char)0x0302, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1EAA; subst = new char[] { (char)0x0041, (char)0x0302, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x1EAB; subst = new char[] { (char)0x0061, (char)0x0302, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x1EAC; subst = new char[] { (char)0x0041, (char)0x0323, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x1EAD; subst = new char[] { (char)0x0061, (char)0x0323, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x1EAE; subst = new char[] { (char)0x0041, (char)0x0306, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1EAF; subst = new char[] { (char)0x0061, (char)0x0306, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1EB0; subst = new char[] { (char)0x0041, (char)0x0306, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1EB1; subst = new char[] { (char)0x0061, (char)0x0306, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1EB2; subst = new char[] { (char)0x0041, (char)0x0306, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1EB3; subst = new char[] { (char)0x0061, (char)0x0306, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1EB4; subst = new char[] { (char)0x0041, (char)0x0306, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x1EB5; subst = new char[] { (char)0x0061, (char)0x0306, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x1EB6; subst = new char[] { (char)0x0041, (char)0x0323, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x1EB7; subst = new char[] { (char)0x0061, (char)0x0323, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x1EB8; subst = new char[] { (char)0x0045, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1EB9; subst = new char[] { (char)0x0065, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1EBA; subst = new char[] { (char)0x0045, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1EBB; subst = new char[] { (char)0x0065, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1EBC; subst = new char[] { (char)0x0045, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x1EBD; subst = new char[] { (char)0x0065, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x1EBE; subst = new char[] { (char)0x0045, (char)0x0302, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1EBF; subst = new char[] { (char)0x0065, (char)0x0302, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1EC0; subst = new char[] { (char)0x0045, (char)0x0302, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1EC1; subst = new char[] { (char)0x0065, (char)0x0302, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1EC2; subst = new char[] { (char)0x0045, (char)0x0302, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1EC3; subst = new char[] { (char)0x0065, (char)0x0302, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1EC4; subst = new char[] { (char)0x0045, (char)0x0302, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x1EC5; subst = new char[] { (char)0x0065, (char)0x0302, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x1EC6; subst = new char[] { (char)0x0045, (char)0x0323, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x1EC7; subst = new char[] { (char)0x0065, (char)0x0323, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x1EC8; subst = new char[] { (char)0x0049, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1EC9; subst = new char[] { (char)0x0069, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1ECA; subst = new char[] { (char)0x0049, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1ECB; subst = new char[] { (char)0x0069, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1ECC; subst = new char[] { (char)0x004F, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1ECD; subst = new char[] { (char)0x006F, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1ECE; subst = new char[] { (char)0x004F, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1ECF; subst = new char[] { (char)0x006F, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1ED0; subst = new char[] { (char)0x004F, (char)0x0302, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1ED1; subst = new char[] { (char)0x006F, (char)0x0302, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1ED2; subst = new char[] { (char)0x004F, (char)0x0302, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1ED3; subst = new char[] { (char)0x006F, (char)0x0302, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1ED4; subst = new char[] { (char)0x004F, (char)0x0302, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1ED5; subst = new char[] { (char)0x006F, (char)0x0302, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1ED6; subst = new char[] { (char)0x004F, (char)0x0302, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x1ED7; subst = new char[] { (char)0x006F, (char)0x0302, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x1ED8; subst = new char[] { (char)0x004F, (char)0x0323, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x1ED9; subst = new char[] { (char)0x006F, (char)0x0323, (char)0x0302 }; decompositionTable.put(key, subst); key = (char)0x1EDA; subst = new char[] { (char)0x004F, (char)0x031B, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1EDB; subst = new char[] { (char)0x006F, (char)0x031B, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1EDC; subst = new char[] { (char)0x004F, (char)0x031B, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1EDD; subst = new char[] { (char)0x006F, (char)0x031B, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1EDE; subst = new char[] { (char)0x004F, (char)0x031B, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1EDF; subst = new char[] { (char)0x006F, (char)0x031B, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1EE0; subst = new char[] { (char)0x004F, (char)0x031B, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x1EE1; subst = new char[] { (char)0x006F, (char)0x031B, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x1EE2; subst = new char[] { (char)0x004F, (char)0x031B, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1EE3; subst = new char[] { (char)0x006F, (char)0x031B, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1EE4; subst = new char[] { (char)0x0055, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1EE5; subst = new char[] { (char)0x0075, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1EE6; subst = new char[] { (char)0x0055, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1EE7; subst = new char[] { (char)0x0075, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1EE8; subst = new char[] { (char)0x0055, (char)0x031B, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1EE9; subst = new char[] { (char)0x0075, (char)0x031B, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1EEA; subst = new char[] { (char)0x0055, (char)0x031B, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1EEB; subst = new char[] { (char)0x0075, (char)0x031B, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1EEC; subst = new char[] { (char)0x0055, (char)0x031B, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1EED; subst = new char[] { (char)0x0075, (char)0x031B, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1EEE; subst = new char[] { (char)0x0055, (char)0x031B, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x1EEF; subst = new char[] { (char)0x0075, (char)0x031B, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x1EF0; subst = new char[] { (char)0x0055, (char)0x031B, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1EF1; subst = new char[] { (char)0x0075, (char)0x031B, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1EF2; subst = new char[] { (char)0x0059, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1EF3; subst = new char[] { (char)0x0079, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1EF4; subst = new char[] { (char)0x0059, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1EF5; subst = new char[] { (char)0x0079, (char)0x0323 }; decompositionTable.put(key, subst); key = (char)0x1EF6; subst = new char[] { (char)0x0059, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1EF7; subst = new char[] { (char)0x0079, (char)0x0309 }; decompositionTable.put(key, subst); key = (char)0x1EF8; subst = new char[] { (char)0x0059, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x1EF9; subst = new char[] { (char)0x0079, (char)0x0303 }; decompositionTable.put(key, subst); key = (char)0x1F00; subst = new char[] { (char)0x03B1, (char)0x0313 }; decompositionTable.put(key, subst); key = (char)0x1F01; subst = new char[] { (char)0x03B1, (char)0x0314 }; decompositionTable.put(key, subst); key = (char)0x1F02; subst = new char[] { (char)0x03B1, (char)0x0313, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F03; subst = new char[] { (char)0x03B1, (char)0x0314, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F04; subst = new char[] { (char)0x03B1, (char)0x0313, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F05; subst = new char[] { (char)0x03B1, (char)0x0314, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F06; subst = new char[] { (char)0x03B1, (char)0x0313, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F07; subst = new char[] { (char)0x03B1, (char)0x0314, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F08; subst = new char[] { (char)0x0391, (char)0x0313 }; decompositionTable.put(key, subst); key = (char)0x1F09; subst = new char[] { (char)0x0391, (char)0x0314 }; decompositionTable.put(key, subst); key = (char)0x1F0A; subst = new char[] { (char)0x0391, (char)0x0313, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F0B; subst = new char[] { (char)0x0391, (char)0x0314, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F0C; subst = new char[] { (char)0x0391, (char)0x0313, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F0D; subst = new char[] { (char)0x0391, (char)0x0314, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F0E; subst = new char[] { (char)0x0391, (char)0x0313, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F0F; subst = new char[] { (char)0x0391, (char)0x0314, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F10; subst = new char[] { (char)0x03B5, (char)0x0313 }; decompositionTable.put(key, subst); key = (char)0x1F11; subst = new char[] { (char)0x03B5, (char)0x0314 }; decompositionTable.put(key, subst); key = (char)0x1F12; subst = new char[] { (char)0x03B5, (char)0x0313, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F13; subst = new char[] { (char)0x03B5, (char)0x0314, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F14; subst = new char[] { (char)0x03B5, (char)0x0313, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F15; subst = new char[] { (char)0x03B5, (char)0x0314, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F18; subst = new char[] { (char)0x0395, (char)0x0313 }; decompositionTable.put(key, subst); key = (char)0x1F19; subst = new char[] { (char)0x0395, (char)0x0314 }; decompositionTable.put(key, subst); key = (char)0x1F1A; subst = new char[] { (char)0x0395, (char)0x0313, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F1B; subst = new char[] { (char)0x0395, (char)0x0314, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F1C; subst = new char[] { (char)0x0395, (char)0x0313, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F1D; subst = new char[] { (char)0x0395, (char)0x0314, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F20; subst = new char[] { (char)0x03B7, (char)0x0313 }; decompositionTable.put(key, subst); key = (char)0x1F21; subst = new char[] { (char)0x03B7, (char)0x0314 }; decompositionTable.put(key, subst); key = (char)0x1F22; subst = new char[] { (char)0x03B7, (char)0x0313, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F23; subst = new char[] { (char)0x03B7, (char)0x0314, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F24; subst = new char[] { (char)0x03B7, (char)0x0313, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F25; subst = new char[] { (char)0x03B7, (char)0x0314, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F26; subst = new char[] { (char)0x03B7, (char)0x0313, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F27; subst = new char[] { (char)0x03B7, (char)0x0314, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F28; subst = new char[] { (char)0x0397, (char)0x0313 }; decompositionTable.put(key, subst); key = (char)0x1F29; subst = new char[] { (char)0x0397, (char)0x0314 }; decompositionTable.put(key, subst); key = (char)0x1F2A; subst = new char[] { (char)0x0397, (char)0x0313, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F2B; subst = new char[] { (char)0x0397, (char)0x0314, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F2C; subst = new char[] { (char)0x0397, (char)0x0313, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F2D; subst = new char[] { (char)0x0397, (char)0x0314, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F2E; subst = new char[] { (char)0x0397, (char)0x0313, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F2F; subst = new char[] { (char)0x0397, (char)0x0314, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F30; subst = new char[] { (char)0x03B9, (char)0x0313 }; decompositionTable.put(key, subst); key = (char)0x1F31; subst = new char[] { (char)0x03B9, (char)0x0314 }; decompositionTable.put(key, subst); key = (char)0x1F32; subst = new char[] { (char)0x03B9, (char)0x0313, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F33; subst = new char[] { (char)0x03B9, (char)0x0314, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F34; subst = new char[] { (char)0x03B9, (char)0x0313, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F35; subst = new char[] { (char)0x03B9, (char)0x0314, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F36; subst = new char[] { (char)0x03B9, (char)0x0313, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F37; subst = new char[] { (char)0x03B9, (char)0x0314, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F38; subst = new char[] { (char)0x0399, (char)0x0313 }; decompositionTable.put(key, subst); key = (char)0x1F39; subst = new char[] { (char)0x0399, (char)0x0314 }; decompositionTable.put(key, subst); key = (char)0x1F3A; subst = new char[] { (char)0x0399, (char)0x0313, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F3B; subst = new char[] { (char)0x0399, (char)0x0314, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F3C; subst = new char[] { (char)0x0399, (char)0x0313, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F3D; subst = new char[] { (char)0x0399, (char)0x0314, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F3E; subst = new char[] { (char)0x0399, (char)0x0313, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F3F; subst = new char[] { (char)0x0399, (char)0x0314, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F40; subst = new char[] { (char)0x03BF, (char)0x0313 }; decompositionTable.put(key, subst); key = (char)0x1F41; subst = new char[] { (char)0x03BF, (char)0x0314 }; decompositionTable.put(key, subst); key = (char)0x1F42; subst = new char[] { (char)0x03BF, (char)0x0313, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F43; subst = new char[] { (char)0x03BF, (char)0x0314, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F44; subst = new char[] { (char)0x03BF, (char)0x0313, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F45; subst = new char[] { (char)0x03BF, (char)0x0314, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F48; subst = new char[] { (char)0x039F, (char)0x0313 }; decompositionTable.put(key, subst); key = (char)0x1F49; subst = new char[] { (char)0x039F, (char)0x0314 }; decompositionTable.put(key, subst); key = (char)0x1F4A; subst = new char[] { (char)0x039F, (char)0x0313, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F4B; subst = new char[] { (char)0x039F, (char)0x0314, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F4C; subst = new char[] { (char)0x039F, (char)0x0313, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F4D; subst = new char[] { (char)0x039F, (char)0x0314, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F50; subst = new char[] { (char)0x03C5, (char)0x0313 }; decompositionTable.put(key, subst); key = (char)0x1F51; subst = new char[] { (char)0x03C5, (char)0x0314 }; decompositionTable.put(key, subst); key = (char)0x1F52; subst = new char[] { (char)0x03C5, (char)0x0313, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F53; subst = new char[] { (char)0x03C5, (char)0x0314, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F54; subst = new char[] { (char)0x03C5, (char)0x0313, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F55; subst = new char[] { (char)0x03C5, (char)0x0314, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F56; subst = new char[] { (char)0x03C5, (char)0x0313, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F57; subst = new char[] { (char)0x03C5, (char)0x0314, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F59; subst = new char[] { (char)0x03A5, (char)0x0314 }; decompositionTable.put(key, subst); key = (char)0x1F5B; subst = new char[] { (char)0x03A5, (char)0x0314, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F5D; subst = new char[] { (char)0x03A5, (char)0x0314, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F5F; subst = new char[] { (char)0x03A5, (char)0x0314, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F60; subst = new char[] { (char)0x03C9, (char)0x0313 }; decompositionTable.put(key, subst); key = (char)0x1F61; subst = new char[] { (char)0x03C9, (char)0x0314 }; decompositionTable.put(key, subst); key = (char)0x1F62; subst = new char[] { (char)0x03C9, (char)0x0313, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F63; subst = new char[] { (char)0x03C9, (char)0x0314, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F64; subst = new char[] { (char)0x03C9, (char)0x0313, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F65; subst = new char[] { (char)0x03C9, (char)0x0314, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F66; subst = new char[] { (char)0x03C9, (char)0x0313, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F67; subst = new char[] { (char)0x03C9, (char)0x0314, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F68; subst = new char[] { (char)0x03A9, (char)0x0313 }; decompositionTable.put(key, subst); key = (char)0x1F69; subst = new char[] { (char)0x03A9, (char)0x0314 }; decompositionTable.put(key, subst); key = (char)0x1F6A; subst = new char[] { (char)0x03A9, (char)0x0313, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F6B; subst = new char[] { (char)0x03A9, (char)0x0314, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F6C; subst = new char[] { (char)0x03A9, (char)0x0313, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F6D; subst = new char[] { (char)0x03A9, (char)0x0314, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F6E; subst = new char[] { (char)0x03A9, (char)0x0313, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F6F; subst = new char[] { (char)0x03A9, (char)0x0314, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F70; subst = new char[] { (char)0x03B1, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F71; subst = new char[] { (char)0x03B1, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F72; subst = new char[] { (char)0x03B5, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F73; subst = new char[] { (char)0x03B5, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F74; subst = new char[] { (char)0x03B7, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F75; subst = new char[] { (char)0x03B7, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F76; subst = new char[] { (char)0x03B9, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F77; subst = new char[] { (char)0x03B9, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F78; subst = new char[] { (char)0x03BF, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F79; subst = new char[] { (char)0x03BF, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F7A; subst = new char[] { (char)0x03C5, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F7B; subst = new char[] { (char)0x03C5, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F7C; subst = new char[] { (char)0x03C9, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F7D; subst = new char[] { (char)0x03C9, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F80; subst = new char[] { (char)0x03B1, (char)0x0345, (char)0x0313 }; decompositionTable.put(key, subst); key = (char)0x1F81; subst = new char[] { (char)0x03B1, (char)0x0345, (char)0x0314 }; decompositionTable.put(key, subst); key = (char)0x1F82; subst = new char[] { (char)0x03B1, (char)0x0345, (char)0x0313, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F83; subst = new char[] { (char)0x03B1, (char)0x0345, (char)0x0314, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F84; subst = new char[] { (char)0x03B1, (char)0x0345, (char)0x0313, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F85; subst = new char[] { (char)0x03B1, (char)0x0345, (char)0x0314, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F86; subst = new char[] { (char)0x03B1, (char)0x0345, (char)0x0313, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F87; subst = new char[] { (char)0x03B1, (char)0x0345, (char)0x0314, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F88; subst = new char[] { (char)0x0391, (char)0x0345, (char)0x0313 }; decompositionTable.put(key, subst); key = (char)0x1F89; subst = new char[] { (char)0x0391, (char)0x0345, (char)0x0314 }; decompositionTable.put(key, subst); key = (char)0x1F8A; subst = new char[] { (char)0x0391, (char)0x0345, (char)0x0313, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F8B; subst = new char[] { (char)0x0391, (char)0x0345, (char)0x0314, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F8C; subst = new char[] { (char)0x0391, (char)0x0345, (char)0x0313, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F8D; subst = new char[] { (char)0x0391, (char)0x0345, (char)0x0314, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F8E; subst = new char[] { (char)0x0391, (char)0x0345, (char)0x0313, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F8F; subst = new char[] { (char)0x0391, (char)0x0345, (char)0x0314, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F90; subst = new char[] { (char)0x03B7, (char)0x0345, (char)0x0313 }; decompositionTable.put(key, subst); key = (char)0x1F91; subst = new char[] { (char)0x03B7, (char)0x0345, (char)0x0314 }; decompositionTable.put(key, subst); key = (char)0x1F92; subst = new char[] { (char)0x03B7, (char)0x0345, (char)0x0313, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F93; subst = new char[] { (char)0x03B7, (char)0x0345, (char)0x0314, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F94; subst = new char[] { (char)0x03B7, (char)0x0345, (char)0x0313, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F95; subst = new char[] { (char)0x03B7, (char)0x0345, (char)0x0314, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F96; subst = new char[] { (char)0x03B7, (char)0x0345, (char)0x0313, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F97; subst = new char[] { (char)0x03B7, (char)0x0345, (char)0x0314, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F98; subst = new char[] { (char)0x0397, (char)0x0345, (char)0x0313 }; decompositionTable.put(key, subst); key = (char)0x1F99; subst = new char[] { (char)0x0397, (char)0x0345, (char)0x0314 }; decompositionTable.put(key, subst); key = (char)0x1F9A; subst = new char[] { (char)0x0397, (char)0x0345, (char)0x0313, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F9B; subst = new char[] { (char)0x0397, (char)0x0345, (char)0x0314, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1F9C; subst = new char[] { (char)0x0397, (char)0x0345, (char)0x0313, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F9D; subst = new char[] { (char)0x0397, (char)0x0345, (char)0x0314, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1F9E; subst = new char[] { (char)0x0397, (char)0x0345, (char)0x0313, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1F9F; subst = new char[] { (char)0x0397, (char)0x0345, (char)0x0314, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1FA0; subst = new char[] { (char)0x03C9, (char)0x0345, (char)0x0313 }; decompositionTable.put(key, subst); key = (char)0x1FA1; subst = new char[] { (char)0x03C9, (char)0x0345, (char)0x0314 }; decompositionTable.put(key, subst); key = (char)0x1FA2; subst = new char[] { (char)0x03C9, (char)0x0345, (char)0x0313, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1FA3; subst = new char[] { (char)0x03C9, (char)0x0345, (char)0x0314, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1FA4; subst = new char[] { (char)0x03C9, (char)0x0345, (char)0x0313, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1FA5; subst = new char[] { (char)0x03C9, (char)0x0345, (char)0x0314, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1FA6; subst = new char[] { (char)0x03C9, (char)0x0345, (char)0x0313, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1FA7; subst = new char[] { (char)0x03C9, (char)0x0345, (char)0x0314, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1FA8; subst = new char[] { (char)0x03A9, (char)0x0345, (char)0x0313 }; decompositionTable.put(key, subst); key = (char)0x1FA9; subst = new char[] { (char)0x03A9, (char)0x0345, (char)0x0314 }; decompositionTable.put(key, subst); key = (char)0x1FAA; subst = new char[] { (char)0x03A9, (char)0x0345, (char)0x0313, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1FAB; subst = new char[] { (char)0x03A9, (char)0x0345, (char)0x0314, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1FAC; subst = new char[] { (char)0x03A9, (char)0x0345, (char)0x0313, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1FAD; subst = new char[] { (char)0x03A9, (char)0x0345, (char)0x0314, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1FAE; subst = new char[] { (char)0x03A9, (char)0x0345, (char)0x0313, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1FAF; subst = new char[] { (char)0x03A9, (char)0x0345, (char)0x0314, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1FB0; subst = new char[] { (char)0x03B1, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x1FB1; subst = new char[] { (char)0x03B1, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x1FB2; subst = new char[] { (char)0x03B1, (char)0x0345, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1FB3; subst = new char[] { (char)0x03B1, (char)0x0345 }; decompositionTable.put(key, subst); key = (char)0x1FB4; subst = new char[] { (char)0x03B1, (char)0x0345, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1FB6; subst = new char[] { (char)0x03B1, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1FB7; subst = new char[] { (char)0x03B1, (char)0x0345, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1FB8; subst = new char[] { (char)0x0391, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x1FB9; subst = new char[] { (char)0x0391, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x1FBA; subst = new char[] { (char)0x0391, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1FBB; subst = new char[] { (char)0x0391, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1FBC; subst = new char[] { (char)0x0391, (char)0x0345 }; decompositionTable.put(key, subst); key = (char)0x1FBE; subst = new char[] { (char)0x03B9 }; decompositionTable.put(key, subst); key = (char)0x1FC1; subst = new char[] { (char)0x00A8, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1FC2; subst = new char[] { (char)0x03B7, (char)0x0345, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1FC3; subst = new char[] { (char)0x03B7, (char)0x0345 }; decompositionTable.put(key, subst); key = (char)0x1FC4; subst = new char[] { (char)0x03B7, (char)0x0345, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1FC6; subst = new char[] { (char)0x03B7, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1FC7; subst = new char[] { (char)0x03B7, (char)0x0345, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1FC8; subst = new char[] { (char)0x0395, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1FC9; subst = new char[] { (char)0x0395, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1FCA; subst = new char[] { (char)0x0397, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1FCB; subst = new char[] { (char)0x0397, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1FCC; subst = new char[] { (char)0x0397, (char)0x0345 }; decompositionTable.put(key, subst); key = (char)0x1FCD; subst = new char[] { (char)0x1FBF, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1FCE; subst = new char[] { (char)0x1FBF, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1FCF; subst = new char[] { (char)0x1FBF, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1FD0; subst = new char[] { (char)0x03B9, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x1FD1; subst = new char[] { (char)0x03B9, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x1FD2; subst = new char[] { (char)0x03B9, (char)0x0308, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1FD3; subst = new char[] { (char)0x03B9, (char)0x0308, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1FD6; subst = new char[] { (char)0x03B9, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1FD7; subst = new char[] { (char)0x03B9, (char)0x0308, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1FD8; subst = new char[] { (char)0x0399, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x1FD9; subst = new char[] { (char)0x0399, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x1FDA; subst = new char[] { (char)0x0399, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1FDB; subst = new char[] { (char)0x0399, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1FDD; subst = new char[] { (char)0x1FFE, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1FDE; subst = new char[] { (char)0x1FFE, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1FDF; subst = new char[] { (char)0x1FFE, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1FE0; subst = new char[] { (char)0x03C5, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x1FE1; subst = new char[] { (char)0x03C5, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x1FE2; subst = new char[] { (char)0x03C5, (char)0x0308, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1FE3; subst = new char[] { (char)0x03C5, (char)0x0308, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1FE4; subst = new char[] { (char)0x03C1, (char)0x0313 }; decompositionTable.put(key, subst); key = (char)0x1FE5; subst = new char[] { (char)0x03C1, (char)0x0314 }; decompositionTable.put(key, subst); key = (char)0x1FE6; subst = new char[] { (char)0x03C5, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1FE7; subst = new char[] { (char)0x03C5, (char)0x0308, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1FE8; subst = new char[] { (char)0x03A5, (char)0x0306 }; decompositionTable.put(key, subst); key = (char)0x1FE9; subst = new char[] { (char)0x03A5, (char)0x0304 }; decompositionTable.put(key, subst); key = (char)0x1FEA; subst = new char[] { (char)0x03A5, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1FEB; subst = new char[] { (char)0x03A5, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1FEC; subst = new char[] { (char)0x03A1, (char)0x0314 }; decompositionTable.put(key, subst); key = (char)0x1FED; subst = new char[] { (char)0x00A8, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1FEE; subst = new char[] { (char)0x00A8, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1FEF; subst = new char[] { (char)0x0060 }; decompositionTable.put(key, subst); key = (char)0x1FF2; subst = new char[] { (char)0x03C9, (char)0x0345, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1FF3; subst = new char[] { (char)0x03C9, (char)0x0345 }; decompositionTable.put(key, subst); key = (char)0x1FF4; subst = new char[] { (char)0x03BF, (char)0x0345, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1FF6; subst = new char[] { (char)0x03C9, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1FF7; subst = new char[] { (char)0x03C9, (char)0x0345, (char)0x0342 }; decompositionTable.put(key, subst); key = (char)0x1FF8; subst = new char[] { (char)0x039F, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1FF9; subst = new char[] { (char)0x039F, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1FFA; subst = new char[] { (char)0x03A9, (char)0x0300 }; decompositionTable.put(key, subst); key = (char)0x1FFB; subst = new char[] { (char)0x03A9, (char)0x0301 }; decompositionTable.put(key, subst); key = (char)0x1FFC; subst = new char[] { (char)0x03A9, (char)0x0345 }; decompositionTable.put(key, subst); key = (char)0x1FFD; subst = new char[] { (char)0x00B4 }; decompositionTable.put(key, subst); key = (char)0x304C; subst = new char[] { (char)0x304B, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x304E; subst = new char[] { (char)0x304D, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x3050; subst = new char[] { (char)0x304F, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x3052; subst = new char[] { (char)0x3051, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x3054; subst = new char[] { (char)0x3053, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x3056; subst = new char[] { (char)0x3055, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x3058; subst = new char[] { (char)0x3057, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x305A; subst = new char[] { (char)0x3059, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x305C; subst = new char[] { (char)0x305B, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x305E; subst = new char[] { (char)0x305D, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x3060; subst = new char[] { (char)0x305F, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x3062; subst = new char[] { (char)0x3061, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x3065; subst = new char[] { (char)0x3064, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x3067; subst = new char[] { (char)0x3066, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x3069; subst = new char[] { (char)0x3068, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x3070; subst = new char[] { (char)0x306F, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x3071; subst = new char[] { (char)0x306F, (char)0x309A }; decompositionTable.put(key, subst); key = (char)0x3073; subst = new char[] { (char)0x3072, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x3074; subst = new char[] { (char)0x3072, (char)0x309A }; decompositionTable.put(key, subst); key = (char)0x3076; subst = new char[] { (char)0x3075, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x3077; subst = new char[] { (char)0x3075, (char)0x309A }; decompositionTable.put(key, subst); key = (char)0x3079; subst = new char[] { (char)0x3078, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x307A; subst = new char[] { (char)0x3078, (char)0x309A }; decompositionTable.put(key, subst); key = (char)0x307C; subst = new char[] { (char)0x307B, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x307D; subst = new char[] { (char)0x307B, (char)0x309A }; decompositionTable.put(key, subst); key = (char)0x3094; subst = new char[] { (char)0x3046, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x309E; subst = new char[] { (char)0x309D, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30AC; subst = new char[] { (char)0x30AB, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30AE; subst = new char[] { (char)0x30AD, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30B0; subst = new char[] { (char)0x30AF, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30B2; subst = new char[] { (char)0x30B1, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30B4; subst = new char[] { (char)0x30B3, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30B6; subst = new char[] { (char)0x30B5, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30B8; subst = new char[] { (char)0x30B7, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30BA; subst = new char[] { (char)0x30B9, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30BC; subst = new char[] { (char)0x30BB, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30BE; subst = new char[] { (char)0x30BD, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30C0; subst = new char[] { (char)0x30BF, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30C2; subst = new char[] { (char)0x30C1, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30C5; subst = new char[] { (char)0x30C4, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30C7; subst = new char[] { (char)0x30C6, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30C9; subst = new char[] { (char)0x30C8, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30D0; subst = new char[] { (char)0x30CF, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30D1; subst = new char[] { (char)0x30CF, (char)0x309A }; decompositionTable.put(key, subst); key = (char)0x30D3; subst = new char[] { (char)0x30D2, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30D4; subst = new char[] { (char)0x30D2, (char)0x309A }; decompositionTable.put(key, subst); key = (char)0x30D6; subst = new char[] { (char)0x30D5, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30D7; subst = new char[] { (char)0x30D5, (char)0x309A }; decompositionTable.put(key, subst); key = (char)0x30D9; subst = new char[] { (char)0x30D8, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30DA; subst = new char[] { (char)0x30D8, (char)0x309A }; decompositionTable.put(key, subst); key = (char)0x30DC; subst = new char[] { (char)0x30DB, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30DD; subst = new char[] { (char)0x30DB, (char)0x309A }; decompositionTable.put(key, subst); key = (char)0x30F4; subst = new char[] { (char)0x30A6, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30F7; subst = new char[] { (char)0x30EF, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30F8; subst = new char[] { (char)0x30F0, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30F9; subst = new char[] { (char)0x30F1, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30FA; subst = new char[] { (char)0x30F2, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0x30FE; subst = new char[] { (char)0x30FD, (char)0x3099 }; decompositionTable.put(key, subst); key = (char)0xFB1F; subst = new char[] { (char)0x05F2, (char)0x05B7 }; decompositionTable.put(key, subst); key = (char)0xFB2A; subst = new char[] { (char)0x05E9, (char)0x05C1 }; decompositionTable.put(key, subst); key = (char)0xFB2B; subst = new char[] { (char)0x05E9, (char)0x05C2 }; decompositionTable.put(key, subst); key = (char)0xFB2C; subst = new char[] { (char)0x05E9, (char)0x05BC, (char)0x05C1 }; decompositionTable.put(key, subst); key = (char)0xFB2D; subst = new char[] { (char)0x05E9, (char)0x05BC, (char)0x05C2 }; decompositionTable.put(key, subst); key = (char)0xFB2E; subst = new char[] { (char)0x05D0, (char)0x05B7 }; decompositionTable.put(key, subst); key = (char)0xFB2F; subst = new char[] { (char)0x05D0, (char)0x05B8 }; decompositionTable.put(key, subst); key = (char)0xFB30; subst = new char[] { (char)0x05D0, (char)0x05BC }; decompositionTable.put(key, subst); key = (char)0xFB31; subst = new char[] { (char)0x05D1, (char)0x05BC }; decompositionTable.put(key, subst); key = (char)0xFB32; subst = new char[] { (char)0x05D2, (char)0x05BC }; decompositionTable.put(key, subst); key = (char)0xFB33; subst = new char[] { (char)0x05D3, (char)0x05BC }; decompositionTable.put(key, subst); key = (char)0xFB34; subst = new char[] { (char)0x05D4, (char)0x05BC }; decompositionTable.put(key, subst); key = (char)0xFB35; subst = new char[] { (char)0x05D5, (char)0x05BC }; decompositionTable.put(key, subst); key = (char)0xFB36; subst = new char[] { (char)0x05D6, (char)0x05BC }; decompositionTable.put(key, subst); key = (char)0xFB38; subst = new char[] { (char)0x05D8, (char)0x05BC }; decompositionTable.put(key, subst); key = (char)0xFB39; subst = new char[] { (char)0x05D9, (char)0x05BC }; decompositionTable.put(key, subst); key = (char)0xFB3A; subst = new char[] { (char)0x05DA, (char)0x05BC }; decompositionTable.put(key, subst); key = (char)0xFB3B; subst = new char[] { (char)0x05DB, (char)0x05BC }; decompositionTable.put(key, subst); key = (char)0xFB3C; subst = new char[] { (char)0x05DC, (char)0x05BC }; decompositionTable.put(key, subst); key = (char)0xFB3E; subst = new char[] { (char)0x05DE, (char)0x05BC }; decompositionTable.put(key, subst); key = (char)0xFB40; subst = new char[] { (char)0x05E0, (char)0x05BC }; decompositionTable.put(key, subst); key = (char)0xFB41; subst = new char[] { (char)0x05E1, (char)0x05BC }; decompositionTable.put(key, subst); key = (char)0xFB43; subst = new char[] { (char)0x05E3, (char)0x05BC }; decompositionTable.put(key, subst); key = (char)0xFB44; subst = new char[] { (char)0x05E4, (char)0x05BC }; decompositionTable.put(key, subst); key = (char)0xFB46; subst = new char[] { (char)0x05E6, (char)0x05BC }; decompositionTable.put(key, subst); key = (char)0xFB47; subst = new char[] { (char)0x05E7, (char)0x05BC }; decompositionTable.put(key, subst); key = (char)0xFB48; subst = new char[] { (char)0x05E8, (char)0x05BC }; decompositionTable.put(key, subst); key = (char)0xFB49; subst = new char[] { (char)0x05E9, (char)0x05BC }; decompositionTable.put(key, subst); key = (char)0xFB4A; subst = new char[] { (char)0x05EA, (char)0x05BC }; decompositionTable.put(key, subst); key = (char)0xFB4B; subst = new char[] { (char)0x05D5, (char)0x05B9 }; decompositionTable.put(key, subst); key = (char)0xFB4C; subst = new char[] { (char)0x05D1, (char)0x05BF }; decompositionTable.put(key, subst); key = (char)0xFB4D; subst = new char[] { (char)0x05DB, (char)0x05BF }; decompositionTable.put(key, subst); key = (char)0xFB4E; subst = new char[] { (char)0x05E4, (char)0x05BF }; decompositionTable.put(key, subst); } }