diff -crN ../orig/doc.j/cygwin.txt ./doc.j/cygwin.txt
*** ../orig/doc.j/cygwin.txt	Thu Jan 01 09:00:00 1970
--- ./doc.j/cygwin.txt	Sat Jan 09 01:19:58 1999
***************
*** 0 ****
--- 1,60 ----
+ 
+ Cygwinで使用時の補足
+ 
+ 
+ * Cygwinのバージョン
+ 
+ B20はかなりbuggyなので、B20.1にした方がしあわせです。
+ 
+ 
+ * コンパイルにはlibncursesが必要
+ 
+ B20.1でコンパイルする場合、libtermcap.aが標準で付いてくるので、それを使
+ えばコンパイルはできるんですが、TERMがcygwinでないと怒られたり、動いて
+ もACCESS VIOLATIONで落ちたりと不安定です。素直に後述のサイトから
+ libncursesを入手して
+ 	LIBS = -lncurses
+ でコンパイルした方が無難でしょう。
+ 
+ 
+ * 妙なエラーが出てコンパイルできない場合
+ 
+ Cygwinでこの手のエラーが出る場合、大抵はファイルの改行コードの問題であ
+ る事が多いです。例えばmakefileがCRLFになっていると(makeはCRLFを理解して
+ くれないので)意味不明のエラーメッセージを出してコケます。
+ 
+ # 過去に私がやったケースでは、コンパイルする作業ディレクトリがtext mode
+ # でmountされていた為、patch -p1 < jvim.diff した時にpatchされたファイル
+ # が全てCRLFになってハマった、というのがありました。
+ 
+ text/binaryが混在すると混乱するので、いっその事、mount -bで全てのディレ
+ クトリをbinary modeでmountするようにするか、シェル起動用のバッチファイ
+ ル等で環境変数CYGWINにbinmodeを設定しておく方がいいかもしれません。
+ 	set CYGWIN=tty binmode
+ 	bash
+ 
+ 
+ * その他
+ 
+ o 1.3i/1.3jのvimを、telnet/Xから使用時にウィンドウサイズを変更すると、
+ 	Vim: Error reading input, exiting...
+   と言って終了してしまう事があるので、その部分に手を入れています(1.3jへ
+   のpatch)。ちょっと変な動き(何回も再描画する)をしますが、いきなり死ぬ
+   よりはましでしょう(^^;
+ 
+ o 関連サイト
+ 	Cygwin project home
+ 	http://sourceware.cygnus.com/cygwin/
+ 	ncurses & etc.
+ 	ftp://ftp.franken.de/pub/win32/develop/gnuwin32/cygwin32/porters/Hirmke_Michael/B20/
+ 	coolview & inetd(remote.tar.gz) etc.
+ 	http://www.lexa.ru/sos/
+ 
+ 	小島 肇さんからmirrorの情報を頂きました。
+ 	ftp://ftp.st.ryukoku.ac.jp/pub/ms-windows/cygwin-ports/
+ 
+ 
+ 
+ 1999/01/07
+ 樋口 泰志 (yzone@mail.raidway.ne.jp)
+ 
diff -crN ../orig/doc.j/differen.doc ./doc.j/differen.doc
*** ../orig/doc.j/differen.doc	Thu Jan 01 09:00:00 1970
--- ./doc.j/differen.doc	Sun Jun 16 17:13:08 1996
***************
*** 0 ****
--- 1,505 ----
+ /* vi:set tw=70 sw=2 ts=2 et: */
+ ＃これは vim 2.0 の difference.doc を川藤＠アンリツ
+ ＃（kawafuji@acdpe0.anritu.co.jp）他有志が意訳したものです。原文にはあまり忠
+ ＃実ではありません ;-) 。間違っている部分もあるかも知れません。気が付いた方は
+ ＃川藤までご一報頂けると幸いです。
+ ＃
+ ＃この文章に関する著作権等は一切放棄します。また、この訳によって生じた一切の
+ ＃利益・不利益に関しての責任も持ちません。
+ 
+ ＃このドキュメントは、土田 (ken_t@st.rim.or.jp) が上記のドキュメントを
+ ＃元に vim 3.0 の difference.doc 対応に意訳したものです。
+ ＃きっと間違っている部分がありますが、ご容赦を。
+ ＃この文章に関する著作権等は一切放棄します。また、この訳によって生じた一切の
+ ＃利益・不利益に関しての責任も持ちません。
+ 
+   VIM と vi の違いの要約です。完全ではないので、 reference.doc と {}
+ 内のコメントを見てください。
+ 
+ 
+ 主な追加機能：
+ 
+ vi との互換性
+   オプション 'compatible' をセットすると、すべてのオプションの値は vi
+ 互換になるように設定される。vim はできるだけ「本物の」vi と同じように
+ 振舞う。
+ 
+ 
+ 多段 undo
+   'u' で遡り（undo）、'ctrl-R' で戻る（redo）。オプション 'undolevels'
+ に undo できる数をセットできる（デフォルトは 100）。'undolevels' を 0
+ にすると、vi 互換の一段 undo になる。
+ ＃訳注：原文では 'undolines' となっているが、間違いだろう。
+ 
+ マルチウインドウ／マルチバッファ
+   Vim はそれぞれのウインドウを分割して異なるバッファか同じバッファの異
+ なる場所を編集する事ができます。
+   この機能の為に多くのコマンドやオプションが追加されていますので、
+ windows.doc を見てください。
+ 
+ 
+ コマンドの繰返し
+   'q'<c> で入力した文字の記録を名前つきレジスタ <c> に記録し始める（レ
+ ジスタの名前が大文字の場合は追加）。次の 'q' で記録を終える。バッファ
+ の内容を '@'<c> で実行することができる。これは複雑な動作の場合に有効で
+ ある。
+ 
+ 
+ 柔軟な挿入モード
+   挿入モードでも矢印キーによってカーソルを移動できる。これによって
+ undo/redo の単位となる挿入は二つに分割される。
+   挿入モードでコマンドモードのコマンドを実行するには CTRL-O を使う。こ
+ れは、ESCを押して、コマンドを実行し、'a' を押したこととほぼ同じである。
+ これによってundo/redo の単位となる挿入は二つに分割される。
+ 
+ 
+ ビジュアルモード
+   「ビジュアルモード」を使えば、テキストの一部を選択してから（何らかの
+ 動作を行う）コマンドを入力できる。これは、まずコマンドを入力して次に
+ それがおよぶ範囲まで移動する、ということの別の（簡単な）やり方である。
+   'v' と 'V' でビジュアルモードの始めを指定する。'v' は文字に対して作
+ 用し、'V' は行に対して作用する。
+   カーソルを移動させれば、ビジュアルモードの対象範囲が拡大される。これ
+ は高輝度（または反転）で示される。'o' で囲みの反対側に移動できる。
+   ビジュアルモードは次のコマンドに対して有効である：
+ 
+         d       削除
+         c       変更
+         y       ヤンク
+         > と <  インデントの挿入／削除
+         !       外部コマンドによるフィルタ
+         =       indent コマンドに通す
+         :       : によるコマンド
+         Q       'textwidth' 桁への整形
+         J       行の結合
+         ~       大文字・小文字変換
+         u       小文字へ変換
+         U       大文字へ変換
+ 
+ 
+ ブロック指定
+   テキストを長方形のブロックに囲むことができる。CTRL-V で囲み始めを指
+ 定する。このブロックに対しては、削除（'d'）、ヤンク（'y'）、大文字小文
+ 字変換（'~', 'u', 'U'）を行うことができる。削除やヤンクしたブロックは
+ 'p' や 'P' コマンドでペーストできる。
+ 
+ 
+ オンラインヘルプ
+   ':help' コマンドか help キー（MSDOS なら F1）で数ページの簡易なヘル
+ プを表示する。オプション 'helpfile' でヘルプファイルを指定できる。
+ 
+ 
+ コマンド行の編集
+   カーソルキーでコマンド行の任意の位置に挿入／削除できる。左／右のカー
+ ソルキーは前／後に一文字ずつ移動する。シフトキーを押しながらの左／右の
+ カーソルキーは前／後に一語ずつ移動する。CTRL-B/CTRL-E でコマンドライン
+ の先頭／最後に移動することができる。
+   コマンド行は記憶されている。上／下のカーソルキーで過去のコマンド行を
+ 呼び出すことができる。オプション 'history' で記憶しておくコマンド行の
+ 数を指定できる。
+ 
+ 
+ コマンド行補完
+   （画面の最下行で）コマンド行を編集しているとき、 <TAB> を入力する事
+ によって補完が行われる。
+ 
+      what         example         where
+   - a command     :e<TAB>         at start of command line
+   - a tag         :ta no<TAB>     after :ta
+   - an option     :set sc<TAB>    after :set
+   - a filename    :e v<TAB>       after any command that accepts a filename
+ 
+   複数にマッチする場合、CTRL-N（次）と CTRL-P（前）でマッチするものを
+ 順に表示する。
+   オプション 'wildchar' によってファイル名補完を開始する文字を指定でき
+ る。デフォルトは <TAB> である。ワイルドカードを使用した（不完全な）補
+ 完の後で CTRL-D を入力すると一覧が表示される。 CTRL-A ではすべてが挿入
+ される。CTRL-L は共通な部分までを挿入する。
+ 
+ 
+ 水平スクロール
+   オプション 'wrap' をオフにしておくと、長い行は折り返されず一部だけが
+ 表示される。カーソルが表示されていない部分に移動すると、画面は水平方向
+ にスクロールする。スクロールの最小単位はオプション 'sidescroll' で指定
+ できる。
+ 
+ 
+ テキストの整形
+   オプション 'textwidth'（tw）で一行の長さを制限できる。これは vi の
+ （あまり使い勝手のよくない）オプション 'wrapmargin' を補助するものであ
+ る。'Q' コマンドでテキストの一部を整形することができる（"Q}" は１パラ
+ グラフを整形する）。コマンド ":center", ":left", ":right" でテキストを
+ 整列させることができる。
+ 
+ 
+ エディット−コンパイル−エディットの高速化
+   コマンド ":make" はコンパイラを起動し、最初のエラーにジャンプする。
+ 別の方法としては、オプション "-e" を付けて vim をコンパイラから起動す
+ る。コンパイラからのエラーメッセージのファイルは解釈される。エラーファ
+ イルの各行はファイル名、行番号、エラーメッセージを調べるためにスキャン
+ される。vim は最初のエラーからエディットを開始する。エラーファイル名は
+ "-e errorfile" として与えることもできる。コマンド ":cn" は次のエラーに
+ ジャンプする。":cl" はすべてのエラーメッセージを表示する。他にも利用可
+ 能なコマンドがある（Manxの Z エディタとほぼ同様である）。オプション
+ 'errorfile' がエラーメッセージのファイル名である。オプション
+ 'errorformat' に、さまざまなコンパイラからのエラーメッセージを扱うため
+ の文字列を scanf ライクに設定できる。オプション 'makeprg' にはコマンド
+ ":make" で実行するプログラムの名前を設定する。 'shellpipe' オプション
+ にコンパイラの出力を errfile にリダイレクトする際の文字列を指定できる。
+ 
+ 
+ 起動オプション：
+ 
+   "-v"（View）を付けて vim を起動するとリードオンリモードになる（"-n"
+ を含む）。
+ 
+   "-b" (Binary) を付けて vim を起動すると、バイナリファイルや実行形式の
+ ファイルをエディットできるように、いくつかのオプションがセットされる。
+ 
+   "-s scriptfile" を付けて vim を起動すると "scriptfile" を読み込み、そ
+ の内容をキーボードから入力した場合と同様に振舞う。エディタを終了する前
+ にファイルが終了すると、コンソールから続きを読む。
+ 
+   オプション "-w" で入力したすべての文字をスクリプトファイルに記録する。
+ このファイルは、他のファイルの編集に利用したり、スクリプトファイルを変
+ 更して再編集に用いることができる。
+ 
+   オプション "-n" は ".swp" ファイルを作らないことを指定する（この先参
+ 照）。
+ 
+   オプション "-c command" はオプション "+command" と同じ。
+ 
+   オプション "-T terminal" は端末のタイプを指定する。
+ 
+   オプション "-e" は vim を quickfix モードで起動する。
+ 
+   オプション "-o" はオープンするウインドウの数を指定する。 "-o4" とす
+ ると４つのウインドウがオープンする。
+ 
+ 
+ コマンドモード：
+ 
+   次のコマンドがない：'Q'（ex モードへの移行）。
+   次の ex コマンドがない：append, change, insert, open, recover, z 。
+ 
+   コマンドの文字が最下行に表示される。コマンドが終了すると、これは消え
+ る。これを表示したくない場合は、オプション 'showcmd' をリセットすれば
+ よい。
+ 
+   オプション 'ruler' をセットすると、カーソルの現在位置を最下行に表示
+ する。
+ 
+   'u' と CTRL-R で undo/redo の回数指定ができる。
+ 
+   'U' は、最後に変更した行から移動した後でも、また 'u' の後でも働く。
+ 
+   ヌルは内部的に <LF> に置き換えられる。これは、バイナリファイルのエディ
+ ットを（多少なりとも）可能にする。
+ 
+   8 bit 目がセットされている文字を表示する。オプション 'graphic' をセッ
+ トしていなければ '~' から 0xa0 までの文字は "~?", "~@", "~A" 等のよう
+ に表示する。
+ 
+   コマンド '=' はテキストをフィルタコマンドに通す（vi では lisp 用）。
+ フィルタコマンド名はオプション 'equalprg' で指定できる。デフォルトは
+ "indent" 。
+ 
+   '][' は次の C の関数の終り（第一カラムが '}'）に移動する。
+   '[]' は前の C の関数の終り（第一カラムが '}'）に移動する。
+ 
+   ']f', '[f', 'gf' はカーソル位置のファイルの編集を開始する。 CTRL-W
+ では、ウインドウ分割をしてカーソル位置のファイルの編集を開始する。
+ 
+   '*' は現在カーソルがある単語を前方に検索する。'#' は後方に検索する。
+   'K' は現在カーソルがある単語を引数として、オプション 'keywordprg' で
+ 指定されたプログラムを実行する。
+ 
+   '%' の前に数字を付けて、ファイルのその割合の位置に移動できる。マッチ
+ する括弧にジャンプする通常の '%' は、引用符中の括弧をスキップする。
+ 
+   コマンド CTRL-] で、カーソルは識別子の途中にあってもよい。
+ 
+   使用したタグは記憶される。記憶したタグ（タグスタック）を利用するコマ
+ ンドは、 CTRL-T, ':pop', ':tag' である。':tags' はタグスタックの一覧を
+ 表示する。
+ 
+   オプション 'tags' には、タグファイル名のリストを指定できる。つまり、
+ 複数のタグファイルを使用することができる。
+ 
+   以前に扱ったファイル名はファイル名リストに記憶されている。CTRL-^ に
+ は回数が指定でき、その値はリスト中の位置を示す。
+ 
+   検索パターンがより多くの機能を持っている。 <NL> 文字を検索パターンと
+ ":s" の置換文字列に含む事ができる。 vi ではコマンドの終了を示す。
+ 
+   検索ではマッチしたテキストの末尾に移動でき、移動先から前後へのオフセッ
+ トも指定できる。
+ 
+   '~', ':next', ':Next', 'n', 'N' に回数を指定することができる。
+ 
+   ":next!" コマンドは、 'autowrite' オプションが設定されている場合ファ
+ イルに書き込まない。 vi では、書き込みを行うが、 ':rewind!' では当然の
+ ことながら書き込まないので vi のバグと考えられる。
+ 
+   "5r<CR>" は五文字を五つの改行に置き換える。vi の場合は五文字を一つの
+ 改行に置き換える。
+ 
+   コマンド ':wnext' の追加。これは、':write' に続けて ':next' を行った
+ のと同じ。
+ 
+   ":w!" コマンドは、ライトプロテクトが設定されていても常に書き込みを行
+ う。
+ 
+   オプション 'tildeop' をセットすると、'~' はオペレータとして機能する
+ （移動コマンドを続ける必要がある）。
+ 
+   コマンド 'J' (join) を使うとき、オプション 'joinspaces' (js) をリセッ
+ トしておくと、ピリオドの後に空白を一つだけ付ける（vi は二つ付ける）。
+ 
+   'cw' が複数のホワイトスペースに対して有効である（vi では、'cw' は一
+ つの空白だけを変更するが、'dw' はすべてのホワイトスペースを削除する）。
+ 
+   'o' と 'O' に回数指定ができる（vi では指定を無視する）。
+ 
+   コマンド ':dis' でヤンクレジスタの内容を表示する。
+ 
+   これまでに扱ったファイル名を記憶している。
+   コマンド ":files" でその一覧を表示する。
+   '#'<N> でその一覧の <N> 番目のものに置き換わる。
+   "#<" は現在のファイル名から拡張子を取り除いたものに置き換わる。
+ 
+   ex コマンドの後に指定するフラグはサポートしていない（その予定もない）。
+ 
+   非 UNIX システムでは、コマンド ":cd" はホームディレクトリに行くので
+ はなく、現在ディレクトリを表示する。":pwd" ならどのシステムでも現在ディ
+ レクトリを表示する。
+ 
+   コマンド ':source!' で vi のコマンドをファイルから読み込む。
+ 
+   コマンド ':mkexrc' で変更のあったオプションとマップをファイル ".exrc"
+ に書き出す。':mkvimrc' なら ".vimrc" に書き出す。
+ 
+   マップでは末尾再帰定義をチェックしていない。":map! foo ^]foo" のよう
+ な定義が可能である。
+ 
+   コマンド ':put!' でレジスタの内容を現在行の上に書き出す。
+ 
+   名前付レジスタ '.' はコマンド p, P, ":put" で使用できる。このレジス
+ タの内容は最後に挿入したテキストである。
+ 
+   'p' と 'P' コマンドは vi では行が無い場合 '.' で繰り返す事ができない。
+ しかし、 vim ではいつでも繰り返せる。
+ 
+   コマンド ":noremap" で、再マップが行われないマッピングを設定できる。
+ これは二つのキーの意味を入れ替えるときに便利である。":cmap", ":cunmap"
+ および":cnoremap" はコマンドラインの編集の場合にだけ使えるマッピングを
+ 行う。":imap", ":iunmap" および ":inoremap" は挿入モードの場合にだけ使
+ えるマッピングを行う。同様の短縮形コマンドとして、":noreabbrev",
+ ":iabbrev", ":cabbrev",":iunabbrev", ":cunabbrev", ":inoreabbrev",
+ ":cnoreabbrev" がある。
+ 
+   vi では、コマンド ":map foo bar" は以前のマッピング ":map bug foo"
+ を削除する。これはバグであると考えられるので、vim には実装していない。
+ アンマップは非常に難しいので、":unmap! foo" は ":map! bug foo"を削除す
+ る（これは viと同様）。
+ 
+   コマンド ':@r' は、レジスタ r を実行する（vi でもサポートしているバー
+ ジョンがある）。
+ 
+   ':' レジスタは、最後のコマンドラインの内容が設定される。
+   '%' レジスタは、現在のファイル名が設定される。
+ 
+   CTRL-O/CTRL-I で旧／新ポジションにジャンプできる。これはコマンド ''
+ で移動するのと同じであるが、飛び先が他のファイルでもよい。コマンド
+ ':jumps' でポジションの一覧を表示する。
+ 
+   オプション 'shiftround' をセットすると、コマンド '>' と '<' でインデ
+ ント量を'shiftwidth' の整数倍に丸めることができる。
+ 
+   オプション 'scrolljump' に、カーソルが画面から飛び出す場合にスクロー
+ ルさせる最小の行数を指定できる。スクロールが遅い場合に使うとよい。
+ 
+   大文字のマークはファイルを越えてジャンプできる。コマンド ":marks" は
+ 現在設定されているマークの一覧を表示する。コマンド "']" と "`]" は前の
+ オペレータの終了地点かコマンド put で挿入したテキストの終了地点にジャ
+ ンプする。"'[" と "`["は開始地点にジャンプする。
+ 
+   オプション 'shelltype' には、利用するシェルのタイプを反映した値を設
+ 定する。
+ 
+   'highlight' オプショオンには、 highlight mode を使うそれぞれのコマン
+ ドを設定する。
+ 
+   コマンド CTRL-A（加算）と CTRL-X（減算）を新規実装。これらのコマンド
+ に指定された回数（デフォルトは１）が、カーソル以降の数値に加えられる／
+ 数値から減じられる。数値は十進法、八進法（'0' で始まる）、十六進法
+ （'0x' で始まる）であってよい。マクロでの使用に便利である。
+ 
+   トグルオプションは頭に "inv" を付けてセットすると状態が反転する。
+ 
+   vi でも vim でもコマンド ":substitute" で CTRL-M を使うことによって
+ 改行を作ることができる。vi においては、これはテキストを真の CTRL-Mに置
+ 換できないことを意味する。vim では CTRL-V を前置することによって真の
+ CTRL-M に置換することができる。
+ 
+ 
+ 挿入モード：
+ 
+   オプション 'revins' をセットすると逆向きに入力される。これはヘブライ
+ 語の入力用である。通常の文字の入力ではカーソルは移動せず、テキストが右
+ に移動する。置換モードではカーソルが左に移動する。BS, CTRL-W, CTRL-U
+ もまた逆向きに動作する。CTRL-B でオプション 'revins' はトグルする。
+ 
+   BS キーは CTRL-D のようにインデントを消す。
+ 
+   オプション 'backspace' (bs) を非０に設定しておくと、CTRL-U や CTRL-W
+ で改行を越えて削除することができる。'backspace' を２に設定すると、挿入
+ 開始位置を越えて削除できる。
+ 
+   オプション 'paste' をセットすると、いくつかのオプションがリセットさ
+ れ、また挿入モードでのマッピングおよび短縮入力は無効になる。これによっ
+ て、ウィンドウシステム利用時に正常にペーストができるようになる。オプショ
+ ン 'paste'をリセットすると元の値に設定し直される。
+ 
+   CTRL-T／CTRL-D は、カーソルがどこにあるかによらず、常にインデントの
+ 挿入／削除を行う。
+ 
+   CTRL-@（直前に挿入したテキストの挿入）はいつでも使える（vi: 最初の文
+ 字としてしか使えない）。
+ 
+   CTRL-A は CTRL-@ と同じように働くが、挿入モードを終了させない。
+ 
+   CTRL-R <0-9a-z> はレジスタの内容を挿入する。
+ 
+   オプション 'smartindent' (si) をセットすると、C のプログラムはよりよ
+ く自動インデントされる。
+ 
+   CTRL-Y と CTRL-E はカーソルの上／下の文字をカーソル位置にコピーする。
+ 
+   CTRL-V に続けて三桁の十進数を入れると、それに対応する一文字として入
+ 力される。キーボードにない国際的な文字を入力するのに有効である。
+ 
+   オプション 'expandtab' (et) をセットすると、TAB は適切な個数の空白に
+ 展開される。
+ 
+   画面は常にバッファの内容を反映している（vi はテキスト変更の場合など
+ は反映していない）。
+ 
+   DIGRAPHS を定義して vim をコンパイルすると、digraph がサポートされる。
+ これは、通常の Amiga digraph を含む。digraph はコマンド ":digraph"で表
+ 示される。追加は、":digraph {char1}{char2} {number}" のように行う。
+ digraphの入力は"CTRL-K {char1} {char2}" とする。また、オプション
+ "digraph" がセットされている場合は、"{char1} BS {char2}" でもよい。
+ 
+ 
+ コマンドラインモード：
+ 
+   コマンドラインの入力を ESC で終了させると、そのコマンドは実行しない。
+ vi では実行するが、通常はそれは望まないことだろう（ESC を入力するとコ
+ マンドモードに戻るべきである）。内容がよくわからないマクロを実行しても
+ 問題が起きないように、マクロ中のESCは（従来通り）そのコマンドを実行さ
+ せる。vi のようにESC でコマンドを実行するには次のようにすればよい。
+         ":cmap ^V<ESC> ^V<CR>"
+ 
+ 
+ その他：
+ 
+   以下のオプションをサポートしていない：
+   autoprint (ap), beautify (bf), edcompatible, hardtabs (ht), lisp,
+ mesg, open, optimize (op), prompt, redraw, slowopen (slow), terse,
+ window, w300, w1200 and w9600。
+ オプションthese は設定できるが無視される。
+ 
+   オプション 'compatible' をセットすると、すべてのオプションを最大限
+ vi 互換になるように設定する。
+ 
+   オプション 'ttimeout' 。これは 'timeout' と似ているが、カーソルキー
+ およびファンクションキーだけに対して有効であり、通常のマップされた文字
+ には適用されない。オプション 'timoutlen' にミリ秒単位で待ち時間を設定
+ できる。オプション'esckeys' がセットされていないと、<ESC> から始まるカー
+ ソルキーとファンクションキーは挿入モードで認識されない。
+ 
+   端末の画面制御文字列それぞれに対するオプションが用意されている。これ
+ らは termcap がサポートされていないか、または個々の文字列を変更したい
+ ときに使う。
+ 
+   オプション 'textmode' をセットすると（MSDOS の場合のデフォルト）、
+ <CR><LF> が行末として扱われる。リセットすると（Unix や Amiga の場合の
+ デフォルト）、<LF> が行末になる。オプション 'textauto' をセットすると、
+ vim は最初の <LF> が現れるまで調べて行末コードを決める。オプション
+ 'textmode' は適宜設定される。
+ 
+   ジョブコントロールのできないシステム（BSD-UNIX を除くほとんどのシス
+ テム）では、CTRL-Z とコマンド ":stop", ":suspend" は新たなシェルを起動
+ する。
+ 
+   Amiga 上で、出力用の対話ウィンドウなしに vim を起動すると、新たなウィ
+ ンドウが開かれる（':sh' も利用できる）。引数 "-d" でデバイスの指定がで
+ きる。例 "-d con:20/20/600/150"）。
+ 
+   起動時に、環境変数 VIMINIT か EXINIT 、ファイル s:.vimrc か s:.exrc、
+ さらに.vimrc か .exrc を初期化コマンドとして読み込む。.vimrc や .exrc
+ から読む場合、いくつかのコマンドはセキュリティのために利用できない
+ （shell コマンドやファイル書き込みのコマンドを指す。また、:map コマン
+ ドはエコーされる）。これはオプション 'secure' によって無視することがで
+ きる。
+ 
+   一行の長さは int の最大値まで（Amiga の場合は 32767桁、多くの 32-bit
+ マシンではそれ以上）。そのような行が常に編集できるわけではない。ファイ
+ ル全体では2147483646行まで。画面より長い行の場合、最後の行は <@>で埋め
+ られてその前の行までが表示される（オプション 'wrap' セットされている場
+ 合）。
+ 
+   オプション 'columns' で表示の幅を設定／表示できる。
+ 
+   現在のファイル名がウィンドウのタイトルバーに表示される。
+ 
+   ファイル名のワイルドカードは展開される。
+ 
+   ファイルの先頭と末尾の数行からオプションの設定が読み込まれる。オプショ
+ ン 'modelines' で何行ほどその対象にするか指定する（デフォルトは５行）。
+   注: vi のいくつかのバージョンでは、modeline でいかなる ex コマンドも
+ 実行できる（これはセキュリティ上の重大な問題だ）が、vim は違う。
+ 
+   （例えば .exrc で）オプション 'insertmode' が設定されると、vim は挿
+ 入モードで起動する。
+ 
+   テキストはすべてメモリに保持される。使用可能なメモリが扱えるファイル
+ サイズ（および undo 等）の限界である。これは MSDOS では問題になるだろ
+ うが、Amiga ではめったに問題になることはなく、UNIX ではまず問題になら
+ ない。
+ 
+   オプション 'backup' や 'writebackup' がセットされると、ファイルに上
+ 書きする前にバックアップファイル (.bak) が作られる。オプション "backup"
+ がセットされると、バックアップファイルは vim 終了後も残る。
+ 
+   オプション 'binary' がセットされ、かつ、ファイルの最後に end-of-line
+ がない場合、書込み時に end-of-line は付加しない。
+ 
+   vim は、 ".swp" という名前で終わるスワップファイルを作成する。このファ
+ イルを使う事で編集中にアボートした場合に "vim -r file" でそれまでに行っ
+ た事をリカバーする事ができる。オプション 'updatecount' を０にするか、
+ 起動時に "-n" オプションを指定すると、これが機能しないようにできる。
+ 'directory' オプションで、 .swp ファイルを置くディレクトリを指定できる。
+ 
+   オプション 'shortname' (sn) がセットされると、".bak" と ".swp" ファ
+ イルの名前は MSDOS ライク（８文字＋３文字の拡張子）になる。MSDOS や
+ Amigaの crossdosファイルシステムでは、これを指定しておくべきである。こ
+ のオプションがセットされていない場合、vim は MSDOS のファイル名制限が
+ 存在するかどうか調べようとする。
+ 
+   クラッシュ後にリカバーが成功する可能性は低い。これは、テンポラリファ
+ イルがないためである。
+ 
+   エラーメッセージは最低１秒間表示される（vi はエラーメッセージを上書
+ きする）。vim が "Hit RETURN to continue" とメッセージを出したときには、
+ どのキーをたたいても構わない。<CR>, <LF>, <SPACE> 以外のキーはコマンド
+ （の始まり）と解釈される（vi では ':' から始まるコマンドだけしか受け付
+ けない）。
+ 
+   名前付きおよび名前なしレジスタの内容はファイルを替えても残る。
+ 
+   Amiga の AUX: デバイスをサポートしている。
+ 
+ 
+ 
diff -crN ../orig/doc.j/fepctrl.doc ./doc.j/fepctrl.doc
*** ../orig/doc.j/fepctrl.doc	Thu Jan 01 09:00:00 1970
--- ./doc.j/fepctrl.doc	Sun Jun 16 17:13:12 1996
***************
*** 0 ****
--- 1,974 ----
+ ============================================================================
+ 日本語入力 FEP 操作ライブラリー FEPCTRL ユーザーズマニュアル
+ ============================================================================
+ 
+ 【名称】
+ 	FEPCTRL - 日本語入力 FEP をアプリケーションから制御する
+ 
+ 【バージョン】
+ 	1.5 - 1992/04/08
+ 
+ 【形式】
+ 	#include "fepctrl.h"
+ 
+ 	int	fep_init(void)		... 初期化および変換オフ
+ 	void	fep_term(void)		... 変換状態の復元および終了処理
+ 	void	fep_on(void)		... fep_off() 時の変換状態に戻す
+ 	void	fep_off(void)		... 変換状態を保存して変換オフ
+ 	void	fep_force_on(void)	... 変換オン
+ 	void	fep_force_off(void)	... 変換状態を保存せず変換オフ
+ 	int	fep_raw_init(void)	... 初期化
+ 	void	fep_raw_term(void)	... 終了処理
+ 	int	fep_get_mode(void)	... 変換状態の取得
+ 
+ 【説明】
+ 	FEPCTRL は C 言語で書かれたアプリケーションから MS-DOS 上の日本語入
+ 	力 FEP の変換オン・オフを制御するためのライブラリーである。このライ
+ 	ブラリーを使うことにより、組み込まれている FEP の種類によらず、さま
+ 	ざまな FEP をアプリケーションから統一的に制御することができる。
+ 
+ 	このライブラリーを使うアプリケーションは、最初に fep_init() を呼ばな
+ 	ければならない。fep_init() は組み込まれている FEP を識別し、変換オン
+ 	の状態であればオフにしてから、各 FEP に対応する定数を返す。この定数
+ 	は fepctrl.h に enum 型で定義されており、いずれの FEP の組み込みも確
+ 	認できない場合には FEP_NONE、すなわち 0 が返る。これ以後 fep_term()
+ 	が呼ばれるまでのあいだ、アプリケーションはライブラリーの各関数を利用
+ 	できる。アプリケーションは、ライブラリーの使用終了時には fep_term()
+ 	を呼ばなければならない。fep_term() は FEP を fep_init() が呼ばれたと
+ 	きの変換状態に戻す。fep_init() と fep_term() の組はアプリケーション
+ 	の実行中に何度実行されてもよく、特に子プロセスの実行など制御がプログ
+ 	ラムを離れる場合には、その直前直後を fep_term() と fep_init() で囲ん
+ 	でおく必要がある。ただし、2 回目以降に実行された fep_init() では FEP
+ 	の識別を行わないので、この間に FEP を切り放したり組み替えたりすると
+ 	動作が正常に行われない恐れがある。なお、FEP が FEP_NONE であっても各
+ 	ライブラリー関数を呼んで差し支えなく、この場合は何の動作も行われない。
+ 
+ 	fep_off() は FEP の現在の変換状態を記憶し、変換をオフにする。fep_on()
+ 	は FEP を fep_off() が呼ばれたときの変換状態に戻す。ただし fep_off()
+ 	が呼ばれていない状態で fep_on() が呼ばれた場合は fep_init() が呼ばれ
+ 	たときの変換状態になる。つまり、アプリケーションが一時的に FEP を通
+ 	さずに入力を行いたい場合、その前後を fep_off() と fep_on() で囲めば
+ 	よい。fep_off() を呼んだときの変換モードは、それが日本語入力状態であ
+ 	ろうとなかろうと、fep_on() が呼ばれた段階で回復されることになる。
+ 
+ 	fep_force_on() は無条件に変換をオンにする。このときの変換状態は FEP
+ 	に依存する。fep_force_off() は現在の変換状態を記憶することなく変換を
+ 	オフにする。プログラムが通常は変換オフの状態で実行されていて、一時的
+ 	に日本語入力が必要になる場合には、fep_force_on() と fep_force_off()
+ 	でその前後を囲めばよい。
+ 
+ 	fep_raw_init()、fep_raw_term() は fep_init()、fep_term() と同様に初
+ 	期化と終了処理を行うが、fep_raw_init() は FEP を変換オフの状態にせず、
+ 	fep_raw_term() は FEP を fep_raw_term() が呼ばれたときの状態に戻すこ
+ 	とをしない。FEP を初期化時と異なる状態にして終了するようなアプリケー
+ 	ションでは、fep_init() や fep_term() の代わりにこちらの関数を使う必
+ 	要がある。なお、fep_init() や fep_term() と同時には使用できない。
+ 
+ 	fep_get_mode() は FEP の現在の変換状態を返す。この値は FEP がオフの
+ 	ときには 0、オンのときには 0 以外である。
+ 
+ 	定義されている FEP の数は FEP_NONE を含め NFEPS 個であり、fep_init()
+ 	が返す値は 0 以上 NFEPS-1 以下の数値である。定数 NFEPS は fepctrl.h
+ 	中で enum 型の値として定義されている。
+ 
+ 	このライブラリーは Turbo C 1.5/2.0、Turbo C++ 1.0、Borland C++ 2.0/
+ 	3.0、Microsoft C 5.1/6.0、Quick C 2.0、Lattice C 4.1、LSI C-86 3.2/
+ 	3.3 試食版から利用することが可能であり、以下の例外を除いて各コンパイ
+ 	ラーの全メモリーモデルに対応している。Lattice C ではヒュージモデルで
+ 	利用することができず、またコンパイル時に -t を指定してネガティブスタ
+ 	ックフレームを使用する必要がある（通常のポジティブスタックフレームを
+ 	使用したオブジェクトとリンクすることは可能）。また、LSI C-86 ではス
+ 	モールモデルでのみ利用可能である。コンパイラーやメモリーモデルにもよ
+ 	るが、このライブラリーをリンクすることにより、最低で 4.7KB ほど消費
+ 	メモリーが増加する。
+ 
+ 	fepctrl.c の先頭にはライブラリーの動作を変更するための３つのマクロ定
+ 	義が置かれている。コンパイル時に DO_MSKANJI を指定しなかった場合には、
+ 	MS-KANJI API 仕様の FEP を制御できなくなるが、消費メモリーが 500 バ
+ 	イトほど少なくなる。また、DO_GENERIC を指定しなかった場合は、PC-9801
+ 	以外の機種専用の FEP を制御できなくなる。これらの２つは PC-9801 専用
+ 	のプログラムから利用するとき役に立つかも知れない。さらに、DO_USERDEV
+ 	を指定しなかった場合には、後述するダミーデバイス名による組み込み判定
+ 	が行われなくなる。対応する FEP を少なくしても FEPDMY.SYS、FEPAID.SYS
+ 	などの制御支援ユーティリティーを使いたくない場合には役に立つかもしれ
+ 	ない。このライブラリーが参照する C ライブラリー関数は以下のものだけ
+ 	である。
+ 
+ 	　　intdos(), intdosx(), int86(), int86x(), bdos(), strncmp()
+ 	　　memset() ... DO_MSKANJI を指定した場合のみ
+ 	　　intdoss(), int86s(), FP_SEG(), FP_OFF() ... Lattice C 4.1 のみ
+ 
+ 	現在のバージョンでサポートする FEP は次のものである。括弧内は確認さ
+ 	れた対応機種を示す。
+ 
+ 	　　MS-KANJI API 仕様の FEP (各種 MS-DOS 機)
+ 	　　VJE-α/β/Σ (PC-9801)
+ 	　　ATOK5/ATOK6/ATOK7 (PC-9801, Panacom M, J3100, AX, PS/55, DOS/V)
+ 	　　松茸86/松茸V2/松茸V3 (PC-9801)
+ 	　　EGBridge Ver.2/Ver.3 (PC-9801)
+ 	　　Katana2/ACE/Katana4 (PC-9801)
+ 	　　FIXER3/FIXER4 (PC-9801)
+ 	　　WX/WXS/WXP/WX2/WXA6/WX2+ (PC-9801, J3100, DOS/V)
+ 	　　DFJ/DFJ2 (PC-9801)
+ 	　　MGR2/JJ (PC-9801)
+ 	　　E1 (PC-9801)
+ 	　　DANGO変換 (PC-9801)
+ 	　　おてもと (PC-9801)
+ 	　　OMAC (PC-9801)
+ 	　　αX-1 (PC-9801)
+ 	　　AJIP1 (PC-9801)
+ 	　　Joker-III (PC-9801)
+ 	　　NEC 逐次/連文節変換、AI かな漢字変換 (PC-9801)
+ 	　　風、嵐 Ver.2/Ver.3 (PC-9801)
+ 	　　オアシスかな漢字変換 (FM-R)
+ 	　　かな漢字変換機能 (Panacom M)
+ 	　　連文節日本語入力/日本語自動変換システム (B16、Mr.マイツール)
+ 	　　日本語入力システム (Mr.マイツール MAGUS)
+ 	　　FEPEX (IF800)
+ 	　　単漢字変換/連文節変換 (IBM DOS/V)
+ 
+ 	なお、マクロ TEST を定義して fepctrl.c をコンパイルすると、FEP 制御
+ 	の簡易テストプログラムが得られる。ライブラリーに新たな FEP の制御を
+ 	追加したときはこのプログラムでテストすることができる。test オプショ
+ 	ンを指定してテストプログラムを起動すると、組み込みが確認された FEP
+ 	の名前が表示され、４行のテキスト入力が要求される。以下は WXP を組み
+ 	込んだ状態でテストプログラムを実行した場合の例である。
+ 
+ 	　　A> tcc -DTEST fepctrl.c
+ 	　　...
+ 	　　A> fepctrl test <RET>
+ 	　　fep = WXP
+ 	　　enter 4 lines of text
+ 	 　　on: うにゃにゃん <RET>
+ 	　　off: unyanyan <RET>
+ 	　　 on: ふひょひょ <RET>
+ 	　　off: fuhyohyo <RET>
+ 	　　A> _ 
+ 
+ 	最初の１行は fep_force_on() によって強制的に変換オンの状態になってい
+ 	る。ここでテキストを入力して改行すると、fep_off() によって変換がオフ
+ 	になる。次に１行入力すると、次は fep_on() によって変換がオンになる。
+ 	変換モードは fep_off() が入力されたときの状態になっているので、最初
+ 	の１行の途中で変換モードが変更されている場合には、できるだけそのモー
+ 	ドが再現されるようになっている。ここで１行入力すると fep_force_off()
+ 	で変換オフの状態になるので、さらに１行入力する。この入力が終了すると、
+ 	FEP はテストプログラム起動時の状態に戻り、テストプログラムが終了する。
+ 
+ 	各行の先頭には、fep_get_mode() の結果によって「on:」あるいは「off:」
+ 	が表示される。
+ 
+ 【備考】
+ 	未確定の入力がある状態では、一般にその入力を捨てて変換をオフにするこ
+ 	とができない。
+ 
+ 	fep_force_on() によって強制的に変換をオンにする場合、実際にどのよう
+ 	なモードになるかは FEP に依存する。変換位置はカーソル位置ないし既定
+ 	の変換位置となる。入力モードは既定の入力モードとなるが、例えば ATOK6
+ 	では変換がオフのときに入力モードを知る手段が存在しないため、配布時の
+ 	設定では「ローマ字漢字」モードが選択される。なお、fep_force_on() で
+ 	移行するモードは fepctrl.c 中の配列 fepon[] に定義されているので、必
+ 	要に応じて変更することができる。
+ 
+ 	FEP が変換オン状態のときに fep_get_mode() が返す値は FEP に依存する。
+ 
+ 	MS-DOS 5.0 の KKCFUNC.SYS を利用して複数の FEP を組み込んでいる場合、
+ 	MS-KANJI API に対応していない FEP があると組み込み判定が正しく行われ
+ 	ない可能性がある。ただし、KKCFUNC.SYS に対応していながら MS-KANJI API
+ 	に対応しないことが許されるかどうかは現在のところ不明である。
+ 
+ 	MS-KANJI API 仕様と独自インターフェースの両方を備えた FEP は MS-KANJI
+ 	API 仕様の FEPとして認識される。
+ 
+ 	MS-KANJI API 仕様の FEP では、ライブラリーの使用後に変換位置がカーソ
+ 	ル位置に固定されてしまう場合がある。これは VJE-β 2.x や AI かな漢字
+ 	変換が持つ MS-KANJI API の不具合に対応しているためである。
+ 
+ 	VJE-α Ver.1.10 以前のバージョン、ATOK5 の初期バージョンは制御できな
+ 	い。また、EGBridge Ver.2 では変換オン直後の１文字の入力が変換の対象
+ 	とならない場合がある。FIXER4 は V3 互換インターフェースのみによって
+ 	制御される（V4 インターフェースを使用しない）。松茸V3 は V2 互換イン
+ 	ターフェースのみによって制御される（V3 ネイティブインターフェースを
+ 	使用しない）。
+ 
+ 	EGBridge、MGR2/JJ、おてもと、Joker-III については原作者が独自に調査
+ 	した方法で制御しているため、ライブラリーの使用によって何らかの障害が
+ 	発生する可能性がある。ただし、これまで使用した限りでは特に問題は発見
+ 	されていない。
+ 
+ 	J3100 の MIJ（独自 API） については対応しているはずであるが、動作を
+ 	確認していない。
+ 
+ 	Microsoft C 5.1、Lattice C 4.1 では、データ領域にコードを置いてそこ
+ 	に飛び込むというトリッキーな方法を用いて ATOK7 および FIXER3/FIXER4
+ 	の関数呼び出しによる制御を実現している。このため、データ領域に置いた
+ 	コードを実行できないようなメモリー管理が行われている環境では利用でき
+ 	ないことが考えられる。
+ 
+ 	Lattice C 4.1 でコンパイルした場合、松茸86 を制御する際にハングアッ
+ 	プすることがある。この現象は Lattice C でコンパイルした直後に制御し
+ 	たときには必ず発生するが、いったん計算機をリブートした後では発生しな
+ 	いようである。現在のところ原因は不明。
+ 
+ 	ソフトウエア割り込みベクター上に置かれた識別文字列で組み込みを判定し
+ 	ている FEP では、PC-9801 と異なる割り込みベクターを利用している場合
+ 	には制御できない。またデバイス名で組み込みを判定してソフトウエア割り
+ 	込み経由で制御している FEP は、PC-9801 以外の機種では誤動作を起こす
+ 	可能性がある。なお、現実にこの問題が発生したために、識別文字列による
+ 	判定をデバイス名による判定より優先させることにした。
+ 
+ 	組み込み判定の手段が用意されていない一部の FEP、サードパーティーの組
+ 	み込みユーティリティーで組み込んだ FEP、PC-286/386 シリーズ上の FEP
+ 	などについては、FEPCTRL 単独では制御できない場合がある。このような場
+ 	合でもライブラリーに付属する FEPDMY.SYS、FEPAID.SYS などの制御支援ユ
+ 	ーティリティーを同時に組み込めば制御できることがある。これについては
+ 	次節以降の FEPDMY.SYS、FEPAID.SYS の説明および付表「FEPCTRL Ver.1.2
+ 	〜 1.5 による FEP 制御テスト結果」を参照されたい。
+ 
+ 	PC-9801 上の FEP には、オン・オフの際にテキスト VRAM を分割・結合し
+ 	た結果が CRT BIOS の作業領域に残るためにオン・オフを検出できるものが
+ 	ある。さらに、KBD BIOS のバッファーに直接 CTRL-XFER のコードを書き込
+ 	むことによってオン・オフが可能ならば、独自インターフェースの有無によ
+ 	らず FEPCTRL からこれらの FEP を制御することが可能である。FEPCTRL で
+ 	は、いくつかの FEP をこのような方法で制御している。
+ 
+ 	ただし、この方法で制御する場合にはいくつかの理由で動作が不安定になる
+ 	ことがある。CRT BIOS の作業領域は FEP 以外のプログラムからも使用され
+ 	るため、このライブラリーの使用前あるいは使用中に他のプログラムから変
+ 	更されてオン・オフの判定をあやまる場合がある。例えばカーソルタイプを
+ 	変更する BIOS 呼び出しはこの作業領域をクリアする。また KBD BIOS のバ
+ 	ッファーに書き込まれた CTRL-XFER のコードがどの時点で FEP に読まれる
+ 	かは FEP によって異なり、次にキーボード割り込みが発生したとき（INT
+ 	09h）、次にキー入力を読もうとしたとき（INT 18h）、次にコンソール出力
+ 	を行ったとき（INT 29h）、MS-DOS がアイドル状態になったとき（INT 28h）
+ 	などさまざまである。このため、オン・オフの制御が続けて行われた場合、
+ 	制御の間にキー入力あるいはコンソール出力が行われなかった場合などには
+ 	正しく制御できないことがある。
+ 
+ 	このライブラリーではこれらの問題に対応するため、BIOS 経由での制御を
+ 	３種類用意して FEP によって使い分けている。詳細についてはソースを参
+ 	照されたい。
+ 
+ 【関連文献】
+ 	太田純「特集: 汎用 FEP 制御ライブラリ FEPCTRL」『C マガジン』1991 年
+ 	3 月号, ソフトバンク
+ 		FEPCTRL Ver.1.2 で制御可能な各種 FEP の API および FEPCTRL
+ 		Ver.1.2 の内部構造を解説している。
+ 
+ 	太田純「特集: 続・汎用 FEP 制御ライブラリ構築」『C マガジン』1991 年
+ 	9 月号, ソフトバンク
+ 		上記記事へのフォローアップ。FEPCTRL Ver.1.4 対応。
+ 
+ 【利用条件】
+ 	このライブラリー（FEPDMY.SYS、FEPAID.SYS を含む）の利用、改変、再配
+ 	布にはいかなる制限もない。原作者はこのライブラリーに関するすべての著
+ 	作権を放棄すること、またいかなる場合でも著作者人格権を主張しないこと
+ 	を表明する。言い換えれば、原作者はこのライブラリーがパブリックドメイ
+ 	ンに置かれたものとして扱われることを期待する。オリジナル版、改変版の
+ 	商業的利用あるいは各種 BBS への転載などについても、原作者への連絡は
+ 	一切不要である。
+ 
+ 	ただし、原作者はこのライブラリーに関していかなる保証も行わない。原作
+ 	者はこのライブラリーが期待された動作をすること、特定の目的に対して有
+ 	用であることを保証せず、またこのライブラリーを利用したことによって生
+ 	起したいかなる損害に対する責任も負わないものとする。
+ 
+ 	このライブラリーを改変して再配布する場合、各自による改変部分を何らか
+ 	の形で保護したい場合には、改変部分と制限条項を何らかの形で明示してお
+ 	かなければならない。明示のない場合には、改変者は自己の改変部分につい
+ 	て原作者による部分と同じ扱いを受けることに同意したものとみなす。
+ 
+ 【原作者】
+ 	太田純
+ 	ohta@src.ricoh.co.jp (junet)
+ 	msa02563 (MSA-NET)
+ 
+ 【謝辞】
+ 	Katana2/ACE/Katana4 に関してはサムシンググッドから、FIXER3/FIXER4 に
+ 	関しては日本マイコン販売から技術資料を提供していただいた。また、制御
+ 	情報の入手およびテストについては、以下の各氏に多大な援助をいただいた
+ 	（敬称略）。
+ 
+ 	　　太田昌宏、景山昭博、笠井康伸、金子  裕、兼宗  進、久保田英行、
+ 	　　坂野恒之、澤口昌規、滝川雅巳、千葉  滋、冨岡  晶、成澤一浩、
+ 	　　樋口貴章、藤崎清孝、村井  淳、Ｏｈ！Ｎｏ！
+ 
+ 	上記各社および各氏に対して深く感謝の意を表したい。また MSA-NET の TP
+ 	コーナーほか、日経 MIX の fp 会議、aisoft 会議、k3 会議、v.c. 会議の
+ 	議論を参考にさせていただいた。
+ 
+ 【履歴】
+ 	1990/1 - jstevie1.1 の一部として初版をリリース
+ 	* 対応 FEP は MS-KANJI API、ATOK5/ATOK6/ATOK7、VJE-α/β/Σ、松茸V2、
+ 	  FIXER3/FIXER4、Katana2/ACE、EGBridge Ver.2/Ver.3、WXP、E1
+ 	* VJE-β Ver.2 の MS-KANJI API は使用していない
+ 	* ATOK7 は 7TO6.COM を組み込んで ATOK6 互換 API を実現した場合のみ
+ 	* FIXER3/FIXER4 はソフトウエア割り込み API のみ
+ 	* E1 については未テスト
+ 
+ 	1990/2 - jstevie1.2 の一部としてリリース
+ 	* 対応 FEP に NEC AI 変換、DFJ、MGR2 を追加
+ 	* VJE-β Ver.2 を MS-KANJI API で制御するよう変更
+ 	* PC-9801 の BIOS 作業領域を利用した制御を実装
+ 
+ 	1990/06/06 - jstevie1.3 から切り出し、バージョン 1.0 とする
+ 	* 対応 FEP に松茸86 を追加
+ 	* MELWARE Ver.4 の FPLD.SYS に対応
+ 	* FEPDMY.SYS を追加し、組み込みが判定できない FEP に対応
+ 	* ATOK7、FIXER3/FIXER4 を関数経由の独自 API で制御するよう変更
+ 	* WXP の制御方法を CTRL-XFER を使う方式に変更
+ 	* PC-9801 の BIOS 作業領域を利用した制御を改善
+ 
+ 	1990/08/20 - バージョン 1.1
+ 	* 対応 FEP に NEC 逐次変換、J3100 の ATOK7R、FM-R の OAK を追加
+ 	* IOS-10/II の BNKDRV.SYS に対応
+ 	* 引数でデバイス名を指定できるように FEPDMY.SYS を変更
+ 	* ATOK5/ATOK6 の組み込み判定方法を変更し、AtokID Ver.1.02 に対応
+ 	* 松茸用 G-RAM 転送ドライバ、裏しまっ太郎使用時の動作を確認
+ 	* BNKDRV.SYS で組み込んだ ATOK7 を制御する BDATOK7 を別途リリース
+ 
+ 	1990/11/25 - バージョン 1.2
+ 	* 対応 FEP に OAK Ver.4.20、J3100 の WXP、J3100 の ATOK5T、
+ 	  MS-DOS3.3C の NEC AI 変換、風、嵐、日立純正 FEP を追加
+ 	* BNKDRV.SYS で組み込んだ松茸V2/XMS対応版に対応
+ 	* FEPAID.SYS を追加し、PC-286/386 における BIOS 経由での制御に対応
+ 	* MS-KANJI API の制御方法を一部変更
+ 	* NEC 純正 FEP の制御方法を拡張機能呼び出しを使う方式に変更
+ 	* PC-9801 の VRAM を利用した状態検出を実装
+ 	* MEMORY-PRO386 の LU.DRV 使用時の動作を確認
+ 	* MSATOK 使用時の不具合を確認
+ 
+ 	1991/05/18 - バージョン 1.3
+ 	* コードを ANSI スタイルに書き直し、全面的にクリーンアップ
+ 	* 対応コンパイラーに Turbo C++ 1.0、Borland C++ 2.0、
+ 	  Microsoft C 6.00、Quick C 2.0、Lattice C 4.1、
+ 	  LSI C-86 3.2 試食版を追加
+ 	* 対応 FEP に JJ、WX2、リコー純正 FEP、Katana4（未テスト）、
+ 	  AX の ATOK6、IBM PS/55 シリーズの ATOK6/ATOK7、
+ 	  IBM DOS/V の ATOK7、IBM 単漢字/連文節、
+ 	  IF800 シリーズの FEPEX、J3100 の MIJ（未テスト）を追加
+ 	* PC-9801 の WXS、AX の VJE-β、IBM DOS/V の VJE-βの動作を確認
+ 	* MS-KANJI API の制御方法を一部変更して安全性を向上
+ 	* 組み込み判定の順序を（やむなく）割り込みベクター優先に変更
+ 	* FIXER4 を FIXER3 互換 API のみによって制御するよう変更
+ 	* Microsoft C 5.1、Lattice C 4.1 での ATOK7/7R、FIXER3/FIXER4 の
+ 	  関数呼び出しによる直接制御を実現
+ 
+ 	1991/06/29 - バージョン 1.4
+ 	* 対応 FEP に Panacom M シリーズのかな漢字変換機能を追加
+ 	* PC-9801 の松茸V3、Katana4、WX2+、
+ 	  Panacom M シリーズの ATOK6 での動作を確認
+ 	* ATOK6+MSKN、ATOK7+MSKN での動作を確認
+ 
+ 	1992/04/08 - バージョン 1.5
+ 	* ライブラリー関数に fep_raw_init()、fep_raw_term()、
+ 	  fep_get_mode() を追加
+ 	* テストプログラムを拡張してバッチユーティリティーを作成
+ 	* 対応コンパイラーに Borland C++ 3.0、LSI C-86 3.3 試食版を追加
+ 	* 対応 FEP に PC-9801 の DANGO 変換、おてもと、OMAC、AJIP1、
+ 	  Joker-III、嵐V3 を追加
+ 	* PC-9801 の DFJ2、VJE-β3.0、E1、WX、WXA6、αX-1、
+ 	  IBM DOS/V の WX2+/WX2I/WX2A7、J3100 の WX2+/WX2A5/WX2A7、
+ 	  FM-R シリーズの VJE-β2.5 での動作を確認
+ 	* PC-9801 の BIOS 作業領域を利用した制御を改善
+ 	* NEC および日本 IBM の MS-DOS 5.0 での動作を確認
+ 	* デバイスのオープンの際にドライブ名「@:」を付加するよう変更して
+ 	  デバイスアクセスの安全性を向上
+ 	* FEPAID.SYS のバグを修正
+ 
+ ============================================================================
+ 
+ 【名称】
+ 	FEPCTRL.COM/EXE - バッチファイルのための FEP 制御ユーティリティー
+ 
+ 【バージョン】
+ 	FEPCTRL ライブラリーと同じ
+ 
+ 【形式】
+ 	fepctrl [コマンド]
+ 	コマンド:
+ 		help   - ヘルプメッセージを表示する
+ 		test   - 従来と同様の FEP テストを行う
+ 		name   - 組み込まれた FEP 名を表示する
+ 		on     - FEP を変換オンにする
+ 		off    - FEP を変換オフにする
+ 		flip   - FEP の変換状態を反転する
+ 		status - FEP の変換状態を返す
+ 		check [FEP名 ...]
+ 		       - 指定された FEP が存在するかどうか調べる
+ 	FEP名:
+ 		PC9801A, PC9801B, PC9801C, MSKANJI, VJE, ATOK6, ATOK7,
+ 		MTTK86, MTTK2, KATANA, FIXER, EGB2, EGB3, WXP, WX2,
+ 		MGR2, JJ, NEC, DFJ, DANGO, OTEMOTO, OMAC, AJIP1,
+ 		JOKER3, KAZE, OAK, MKK, B16, RICOH, WXPJ, MIJ,
+ 		FEPEX, AT6AX, AT6IBM, AT7IBM, AT7DOSV, IBMIAS
+ 
+ 【使用例】
+ 	rem - FEP が存在して変換オンなら変換オフにする
+ 	rem - (実際には fepctrl off だけでも弊害はない)
+ 	fepctrl check
+ 	if not errorlevel 1 goto done
+ 	fepctrl status
+ 	if not errorlevel 1 goto done
+ 	fepctrl off
+ 	:done
+ 
+ 【説明】
+ 	このユーティリティーは、バッチファイルの内部で FEP の状態を取得した
+ 	り制御したりするためのものである。機能としては、特定あるいは不特定の
+ 	FEP の組み込みをチェックする機能、FEP の変換状態を取得する機能、変換
+ 	状態を変更する機能などがある。
+ 
+ 	取得された組み込み状態や変換状態はユーティリティーの終了コードとして
+ 	呼び出し側プロセスに返されるため、バッチファイル中で errorlevel を判
+ 	定することによって結果を利用することができる。
+ 
+ 	特定の FEP がどのような名称で組み込みを識別されるかは状況に依存する。
+ 	例えば、VJE-βは VJE でなく MSKANJI と識別される可能性が高い。このた
+ 	め、内部動作に対する十分な知識を持たないかぎり、このユーティリティー
+ 	を特定の FEP の組み込みチェックのために利用することは避けた方が賢明
+ 	である。
+ 
+ 	なお、マクロ TEST を定義して fepctrl.c をコンパイルすればこのユーテ
+ 	ィリティーが作られる。
+ 
+ ============================================================================
+ 
+ 【名称】
+ 	FEPDMY.SYS - 任意の名称を持つダミーデバイスを登録する
+ 
+ 【バージョン】
+ 	1.0 - 1990/06/05  初期バージョン
+ 	1.1 - 1990/06/10  パラメーターによるデバイス名設定機能の追加
+ 
+ 【形式】
+ 	DEVICE=FEPDMY.SYS <デバイス名>
+ 
+ 【使用例】
+ 	DEVICE=FPLD.SYS DFJ.SYS
+ 	DEVICE=FEPDMY.SYS FP$DFJ
+ 	（MELWARE Ver.4 に付属の FPLD.SYS で DFJ を組み込む場合）
+ 
+ 【説明】
+ 	FEPDMY.SYS は何もしないダミーデバイスであり、組み込みの際にパラメー
+ 	ターとして指定された名前をデバイス名として持つ。FEPDMY.SYS は、各種
+ 	MS-DOS 機で利用可能である。
+ 
+ 	FEPCTRL ライブラリーで FEP を制御する場合、どの FEP が組み込まれてい
+ 	るかを判定する必要があるが、FEP そのものが組み込み判定の手段を用意し
+ 	ていない場合や、ある種の組み込みユーティリティーを用いて組み込んだ場
+ 	合には判定が行えないことがある。FEPDMY.SYS は、適当なデバイス名を登
+ 	録することによって組み込み判定不能な FEP を FEPCTRL から認識させるた
+ 	めの支援ユーティリティーである。
+ 
+ 	FEPDMY.SYS を用いれば、どんな FEP でも FEPCTRL から組み込みを判定で
+ 	きるようになるが、どのデバイス名がどの FEP に対応するかについてはあ
+ 	らかじめ FEPCTRL と合意を取っておく必要がある。現在 FEPCTRL が認識す
+ 	るダミーデバイス名は次のものである。どの状況でどのデバイス名を利用す
+ 	べきかについては、付表「FEPCTRL Ver.1.2 〜 1.5 による FEP 制御テスト
+ 	結果」を参照されたい。
+ 
+ 	　　FP$PC98A（PC-9801 の BIOS 領域操作による制御 (1)）、
+ 	　　FP$PC98B（PC-9801 の BIOS 領域操作による制御 (2)）、
+ 	　　FP$PC98C（PC-9801 の BIOS 領域操作による制御 (3)）、
+ 	　　FP$VJE（VJE-α/β/Σ）、FP$ATOK6（ATOK5/ATOK6、DANGO 変換）、
+ 	　　FP$MTTK（松茸86; FP$PC98A と同義）、FP$KTN（Katana2/ACE）、
+ 	　　FP$EGB2（EGBridge Ver.2）、FP$EGB3（EGBridge Ver.3）、
+ 	　　FP$WXP（WX、WXS、WXP Ver.1.03a）、FP$WX2（WXP Ver.1.04c、WX2）、
+ 	　　FP$MGR2（MGR2/JJ）、FP$NEC（NEC 逐次/AI 変換）、
+ 	　　FP$DFJ（DFJ; FP$PC98A と同義）、FP$KAZE（風、嵐V2/V3）、
+ 	　　FP$AJIP1（AJIP1; FP$PC98B と同義）、FP$JOKER（Joker-III）、
+ 	　　FP$OMAC(OMAC; FP$PC98C と同義）、FP$OAK（FM-R の OAK）
+ 
+ ============================================================================
+ 
+ 【名称】
+ 	FEPAID.SYS - PC-9801/PC-286 の BIOS 領域による FEP 制御を支援する
+ 
+ 【バージョン】
+ 	1.0 - 1990/10/19  初期バージョン
+ 	1.1 - 1991/03/18  CRT BIOS 作業領域を保存するよう変更
+ 	1.2 - 1992/03/23  バグ修正(saveworkの参照にcs:を忘れていた^_^;)
+ 
+ 【形式】
+ 	DEVICE=FEPAID.SYS [<デバイス名>]
+ 
+ 【使用例】
+ 	DEVICE=DFJ.SYS
+ 	DEVICE=FEPAID.SYS FP$DFJ
+ 	（PC-286/386 シリーズ上で DFJ の制御を行う場合）
+ 
+ 【説明】
+ 	FEPAID.SYS は、PC-9801/PC-286 での BIOS 領域操作による FEP 制御を支
+ 	援するためのダミーデバイスである。FEPDMY.SYS と同様に、組み込みの際
+ 	にパラメーターとしてデバイス名を指定できる。FEPAID.SYS は PC-9801 お
+ 	よび PC-286/386 シリーズで利用可能である。
+ 
+ 	FEPCTRL の節で述べたように、PC-9801 では CRT BIOS の作業領域から FEP
+ 	の状態を検出できる場合がある。FEP が制御インターフェースを用意してい
+ 	ない場合、組み込み方法によっては本来の状態検出方法が有効でない場合な
+ 	どが存在するため、FEPCTRL では CRT BIOS 作業領域からの状態検出を積極
+ 	的に活用している。しかし、互換機である PC-286/386 では BIOS の互換性
+ 	が不足しているためこの方法が利用できない。また、FEP によってはこの作
+ 	業領域を使用しない CRT BIOS 呼び出しを用いるものもある。 FEPAID.SYS
+ 	は CRT BIOS 呼び出しを監視し、必要に応じて CRT BIOS 作業領域を書き換
+ 	えることによってこの領域からの状態検出を可能にするためのユーティリテ
+ 	ィーである。これは FEPCTRL だけでなく、CRT BIOS 作業領域から状態検出
+ 	を行うようなアプリケーション（EZKEY など）すべてから利用できる。
+ 
+ 	FEPAID.SYS は int 18h をフックし、「１つの表示領域の設定」が行われた
+ 	ときには作業領域に 0 を設定し、「複数の表示領域の設定」が行われたと
+ 	きには作業領域に dl レジスターの値を設定する。それ以外の int 18h 呼
+ 	び出しが行われたときには作業領域の値を保存する。具体的には以下のよう
+ 	な操作を行っている。
+ 
+ 	　　ah ← 0eh; int 18h のとき、0000:053dh に 0 を書き込む
+ 	　　ah ← 0fh; int 18h のとき、0000:053dh に dl の値を書き込む
+ 	　　それ以外の int 18h のとき、0000:053dh の値を保存する
+ 
+ 	「表示領域の設定」以外の int 18h 呼び出しに際して作業領域の値を保存
+ 	するようにしたのは、「カーソルタイプの設定（ah ← 10h）」が行われる
+ 	と作業領域の値が 0 に変更されることが判明したためである（Ver.1.1）。
+ 
+ 	FEPAID.SYS は標準で $FEPAID というデバイス名を持つが、FEPDMY.SYS と
+ 	同様にパラメーターとして指定することによって任意のデバイス名に変更す
+ 	ることができる。FEPCTRL から利用する場合には状況に応じて以下のいずれ
+ 	かのデバイス名を指定する必要がある。どのようなデバイス名を組み込むべ
+ 	きか、また FEP の前後いずれに組み込むべきかについては、付表「FEPCTRL
+ 	Ver.1.2 〜 1.5 による FEP 制御テスト結果」を参照されたい。
+ 
+ 	　　FP$PC98A、FP$PC98B、FP$PC98C、FP$NEC
+ 
+ ============================================================================
+ 
+ 付表: FEPCTRL Ver.1.2 〜 1.5 による FEP 制御テスト結果
+ 
+ 1. NEC PC-9801 シリーズ
+ 
+ (1) CONFIG.SYS、ADDDRV でメインメモリーに組み込んだ場合
+ ========================================================================
+ 日本語入力 FEP       制御  FEPDMY*1  制御形態          常駐判定
+ ------------------------------------------------------------------------
+ ATOK5 Ver.1.1          ○            INT               DEV
+ ATOK6 Ver.1.2          ○            INT               DEV, VECT
+ ATOK7 Ver.1.10         ○            FARCALL, INT*2    DEV, VECT
+ VJE-Σ Ver.1.05        ○            INT               DEV, VECT
+ VJE-β Ver.1.20R       ○            INT               DEV, VECT
+ VJE-β Ver.2.00 L24    ○            MSKANJIV, INT     DEV, VECT
+ VJE-β Ver.2.11 L02    ○            MSKANJIV, INT     DEV, VECT
+ VJE-β Ver.2.50 L19    ○            MSKANJIV, INT     DEV, VECT
+ VJE-β Ver.3.00 L00    ○            MSKANJIV, INT     DEV, VECT
+ 松茸86 Ver.1.0         △            BIOS              VECT
+ 松茸V2 Ver.2.11        ○            INT               VECT
+ 松茸V2 Ver.2.13β版B19 ○            INT               VECT
+ 松茸V3 Ver.3.00開発B14 ○            INT               VECT
+ EGBridge Ver.2.01      ○            INT               VECT
+ EGBridge Ver.3.10      ○            INT, MSKANJI*3    VECT
+ WX Ver.1.00            ○            INT+BIOS          VECT
+ WXS Ver.1.01           ○            INT+BIOS          VECT
+ WXP Ver.1.03a          ○            INT+BIOS          VECT
+ WX2 Ver.1.50a          ○            MSKANJIV, INT*4   VECT
+ WXA6 Ver.1.50a         ○            MSKANJIV, INT*4   VECT
+ WXA6 Ver.1.53          ○            MSKANJI, INT*4    VECT
+ WX2+ Ver.2.00          ○            MSKANJIV, INT*4   VECT
+ WX2A6 Ver.2.00         ○            MSKANJIV, INT     VECT
+ WX2A7 Ver.2.00         ○            MSKANJIV, FARCALL VECT
+ WX2VJ Ver.2.00         ○            MSKANJIV, INT     VECT
+ WX2MT Ver.2.00         ○            MSKANJIV, INT     VECT
+ WX2+ Ver.2.00F         ○            MSKANJI, INT*4    VECT
+ WX2A6 Ver.2.00F        ○            MSKANJI, INT      VECT
+ WX2A7 Ver.2.00F        ○            MSKANJI, FARCALL  VECT
+ WX2VJ Ver.2.00F        ○            MSKANJIV, INT     VECT
+ WX2MT Ver.2.00F        ○            MSKANJI, INT      VECT
+ ACE Ver.2.15           ○            INT               CON
+ Katana2 Ver.1.25       ○            INT               CON
+ Katana4 Ver.4.01       ○            MSKANJI, INT      VECT
+ FIXER Ver.3.10 Rel.2.1 ○            FARCALL, INT*5    IOCTL
+ FIXER Ver.4.13         ○            FARCALL, INT*5    IOCTL
+ DFJ Ver.1.0            △            BIOS              VECT
+ DFJ2 Ver.1.00          ○            MSKANJI           DEV
+ MGR2 Ver.1.00          ○            INT               DEV, VECT
+ JJ Ver.1.00            ○            INT               DEV, VECT
+ E1 Ver.1.05            ○            MSKANJI           DEV
+ DANGO Ver.1.00         ○            INT               VECT
+ おてもと Ver.1.01      ○            FARCALL           DEV
+ OMAC Ver.1.00          △            BIOS              VECT
+ αX-1 Ver.1.04         ○            MSKANJI           DEV
+ AJIP1 Ver.1.05         △            BIOS              DEV, VECT
+ Joker-III Ver.1.00     ○            INT               VECT
+ NEC AI (DOS3.3C以降)   ○            MSKANJIV          DEV, VECT
+ NEC AI (DOS3.3Bまで)   △            BIOS+INT          DEV, VECT
+ NEC 逐次/連文節変換    △            BIOS+INT          DEV, VECT
+ NEC 連文節変換         ×            状態検出不能      DEV, VECT
+ NEC 文節変換           ×            状態検出不能      DEV, VECT
+ NEC 熟語変換           ×            状態検出不能      組み込み判定不能
+ 風 Ver.1.21            ○  FP$KAZE   VRAM              DEV
+ 嵐 Ver.2               ○  FP$KAZE   VRAM              DEV
+ 嵐 Ver.3               ○  FP$KAZE   VRAM              DEV
+ ------------------------------------------------------------------------
+ △ PC-286 では FEPAID.SYS を同時に組み込んだ場合のみ（詳細は(6)を参照）
+ *1 FEPDMY.SYS を組み込む必要がある場合、引数として指定すべきデバイス名
+ *2 ATOK7 に付属の 7TO6.COM を同時に組み込んだ場合のみ
+ *3 EGBridge に付属の EGB98IF.SYS を同時に組み込んだ場合のみ
+ *4 組み込み時に /VZ パラメーターで WXP 互換 API を有効にした場合のみ
+ *5 組み込み時に /I パラメーターで V3 割り込みベクターを指示した場合のみ
+ ========================================================================
+ 制御形態  意味
+ ------------------------------------------------------------------------
+ INT       ソフトウエア割り込み
+ FARCALL   制御関数への far call
+ MSKANJI   MS-KANJI アプリケーションインターフェース（正式）
+ MSKANJIV  MS-KANJI アプリケーションインターフェース（VJE 方言）
+ BIOS      PC-9801 CRT/KBD BIOS 経由での検出・制御（PC-286 では利用不可）
+ VRAM      PC-9801 VRAM の特定位置が空白かどうかで検出、BIOS 経由で制御
+ ========================================================================
+ 常駐判定  意味
+ ------------------------------------------------------------------------
+ DEV       特定デバイスの存在
+ VECT      ソフトウエア割り込み先メモリー上の識別 ID
+ IOCTL     デバイスへの IOCTL 
+ CON       コンソールステータスレポートまたはフックされたベクター
+ ========================================================================
+ 
+ (2) MEMORY-PRO386 V1.5 付属の LU.DRV V1.50 で仮想 UMB に組み込んだ場合
+ ========================================================================
+ 日本語入力 FEP       制御  FEPDMY*1  備考
+ ------------------------------------------------------------------------
+ ATOK5 Ver.1.1          −            変換時に異常動作
+ ATOK6 Ver.1.2          ○
+ ATOK7 Ver.1.10         ○
+ VJE-Σ Ver.1.05        ○
+ VJE-β Ver.1.20R       −            組み込み時にハングアップ
+ VJE-β Ver.2.00 L24    ○
+ VJE-β Ver.2.11 L02    −            組み込み時にハングアップ
+ VJE-β Ver.2.50 L19    −            組み込み時にハングアップ
+ 松茸86 Ver.1.0         △
+ 松茸V2 Ver.2.11        ○
+ 松茸V2 Ver.2.13β版B19 ○
+ 松茸V3 Ver.3.00開発B14 ○
+ EGBridge Ver.2.01      ○
+ EGBridge Ver.3.10      ○            MS-KANJI API は利用不可
+ WXP Ver.1.03a          ○
+ WX2 Ver.1.50a          ○
+ WX2+ Ver.2.00          ○
+ ACE Ver.2.15           ○
+ Katana2 Ver.1.25       ○
+ FIXER Ver.3.10 Rel.2.1 ○
+ DFJ Ver.1.0            △
+ MGR2 Ver.1.00          ○
+ NEC AI (DOS3.3C以降)   ○
+ NEC AI (DOS3.3Bまで)   △
+ NEC 逐次/連文節変換    △
+ 風 Ver.1.21            −            大きすぎて組み込めない
+ 嵐 Ver.2               ○  FP$KAZE
+ ------------------------------------------------------------------------
+ △ PC-286 では FEPAID.SYS を同時に組み込む必要がある（詳細は(6)を参照）
+ *1 FEPDMY.SYS を組み込む必要がある場合、引数として指定すべきデバイス名
+ ========================================================================
+ 
+ (3) MELWARE V4 付属の FPLD V1.0C でバンクメモリーに組み込んだ場合*1
+ ========================================================================
+ 日本語入力 FEP       制御  FEPDMY*2  備考
+ ------------------------------------------------------------------------
+ ATOK5 Ver.1.1          ○
+ ATOK6 Ver.1.2          ○
+ ATOK7 Ver.1.10         −            起動時にハングアップ
+ VJE-Σ Ver.1.05        ○
+ VJE-β Ver.1.20R       −            組み込み時に暴走
+ VJE-β Ver.2.00 L24    ○            MS-KANJI API は無効
+ VJE-β Ver.2.11 L02    ○            MS-KANJI API は無効
+ VJE-β Ver.2.50 L19    ○            MS-KANJI API は無効
+ 松茸86 Ver.1.0         △
+ 松茸V2 Ver.2.11        △            BIOS 経由で制御（松茸86 相当）
+ 松茸V2 Ver.2.13β版B19 −            組み込み時に暴走
+ EGBridge Ver.2.01      −            組み込み時に暴走
+ EGBridge Ver.3.10      −            起動できない
+ WXP Ver.1.03a          −            組み込み時に暴走
+ WX2 Ver.1.50a          −            組み込み時に暴走
+ ACE Ver.2.15           ○
+ Katana2 Ver.1.25       ○
+ FIXER Ver.3.10 Rel.2.1 ○            FARCALL は無効、INT/BIOS で制御*3
+ FIXER Ver.4.13         −            組み込み時に暴走
+ DFJ Ver.1.0            △  FP$DFJ
+ MGR2 Ver.1.00          −            起動できない
+ NEC AI (DOS3.3C以降)   △
+ NEC AI (DOS3.3Bまで)   △
+ NEC 逐次/連文節変換    △
+ 風 Ver.1.21            −            大きすぎて組み込めない
+ 嵐 Ver.2               −            組み込み時に暴走
+ ------------------------------------------------------------------------
+ △ PC-286 では FEPAID.SYS を同時に組み込む必要がある（詳細は(6)を参照）
+ *1 元のデバイス名も組み込まれるため、デバイス経由で常駐判定が可能
+ *2 FEPDMY.SYS を組み込む必要がある場合、引数として指定すべきデバイス名
+ *3 PC-286 で /I を指定せずに組み込んだ場合は FEPAID.SYS が必要
+ ========================================================================
+ 
+ (4) IOS-10 V2.2 付属の BNKDRV V1.01 でバンクメモリーに組み込んだ場合*1
+ ========================================================================
+ 日本語入力 FEP       制御  FEPDMY*2  備考
+ ------------------------------------------------------------------------
+ ATOK5 Ver.1.1          ○  FP$ATOK6
+ ATOK6 Ver.1.2          ○  FP$ATOK6
+ ATOK7 Ver.1.10         −            組み込み時にハングアップ
+ VJE-Σ Ver.1.00-05     ○            BNKDRV が AS$VJE を設定
+ VJE-Σ Ver.1.10        ○            BNKDRV が AS$VJE を設定
+ VJE-β Ver.1.20R       −            組み込み時にハングアップ
+ 松茸V2 Ver.2.04        △  FP$MTTK   BIOS 経由で制御（松茸86 相当）
+ EGBridge Ver.3.10      ○  FP$EGB3   MS-KANJI API は利用不可
+ WXP Ver.1.03a          ○  FP$WXP    wxcolor、wxegg などは無効
+ ACE Ver.2.15           −            起動時に暴走
+ DFJ Ver.1.0            △  FP$DFJ
+ ------------------------------------------------------------------------
+ △ PC-286 では FEPAID.SYS を同時に組み込む必要がある（詳細は(6)を参照）
+ *1 一部を除き元のデバイス名が組み込まれないため、FEPDMY 経由で常駐判定
+ *2 FEPDMY.SYS を組み込む必要がある場合、引数として指定すべきデバイス名
+ ========================================================================
+ 
+ (5) IOS-10II V3 付属の BNKDRV V1.13 でバンクメモリーに組み込んだ場合*1
+ ========================================================================
+ 日本語入力 FEP       制御  FEPDMY*2  備考
+ ------------------------------------------------------------------------
+ ATOK5 Ver.1.1          ○  FP$ATOK6
+ ATOK6 Ver.1.2          ○  FP$ATOK6
+ ATOK7 Ver.1.10         ×            FARCALL は無効、状態検出不能
+ VJE-Σ Ver.1.05        ○            BNKDRV が AS$VJE を設定
+ VJE-β Ver.1.20R       ○            BNKDRV が AS$VJE を設定
+ VJE-β Ver.2.00 L24    ○            BNKDRV が MS$KANJI、AS$VJE を設定
+ VJE-β Ver.2.11 L02    ○            BNKDRV が MS$KANJI、AS$VJE を設定
+ VJE-β Ver.2.50 L19    ○            BNKDRV が MS$KANJI、AS$VJE を設定
+ 松茸86 Ver.1.0         △            割り込みベクター上の識別 ID が有効
+ 松茸V2 Ver.2.11        △  FP$MTTK   BIOS 経由で制御（松茸86 相当）
+ 松茸V2 Ver.2.13β版B19 ×            状態検出不能
+ 松茸V2 Ver.3.00開発B14 ×            状態検出不能
+ EGBridge Ver.2.01      ○  FP$EGB2
+ EGBridge Ver.3.10      ○  FP$EGB3   MS-KANJI API は利用不可
+ WXP Ver.1.03a          ○  FP$WXP    wxcolor、wxegg などは無効
+ WX2 Ver.1.50a          −            組み込み時に暴走*3
+ WX2+ Ver.2.00          −            組み込み時に暴走*3
+ ACE Ver.2.15           −            起動時に暴走*3
+ Katana2 Ver.1.25       ○  FP$KTN
+ FIXER Ver.3.10 Rel.2.1 ○            FARCALL は無効、INT/BIOS で制御*4
+ FIXER Ver.4.13         −            組み込み時に暴走
+ DFJ Ver.1.0            ○  FP$DFJ
+ MGR2 Ver.1.00          ○  FP$MGR2
+ NEC AI (DOS3.3C以降)   △  FP$NEC
+ NEC AI (DOS3.3Bまで)   △  FP$NEC
+ NEC 逐次/連文節変換    △  FP$NEC
+ 風 Ver.1.21            −            大きすぎて組み込めない
+ 嵐 Ver.2               ○  FP$KAZE
+ ------------------------------------------------------------------------
+ △ PC-286 では FEPAID.SYS を同時に組み込む必要がある（詳細は(6)を参照）
+ *1 一部を除き元のデバイス名が組み込まれないため、FEPDMY 経由で常駐判定
+ *2 FEPDMY.SYS を組み込む必要がある場合、引数として指定すべきデバイス名
+ *3 BNKDRV V1.14 では組み込み可能、かつ MS-KANJI API で制御可能
+ *4 PC-286 で /I を指定せずに組み込んだ場合は FEPAID.SYS が必要
+ ========================================================================
+ 
+ (6) BNKDRV V1.13 で組み込み、同時に「FEPAID V1.0」*1 を組み込んだ場合*2
+ ========================================================================
+ 日本語入力 FEP       制御  FEPAID*3  組込順序*4  備考
+ ------------------------------------------------------------------------
+ ATOK5 Ver.1.1          ×                        状態検出不能
+ ATOK6 Ver.1.2          ×                        状態検出不能
+ ATOK7 Ver.1.10         ×                        状態検出不能
+ VJE-Σ Ver.1.05        ○  FP$PC98B  FEPより後
+ VJE-β Ver.1.20R       ○  FP$PC98B  any
+ VJE-β Ver.2.00 L24    ○  any     　any
+ VJE-β Ver.2.11 L02    ○  any     　any
+ VJE-β Ver.2.50 L19    ○  any     　any
+ 松茸86 Ver.1.0         ○  any     　any
+ 松茸V2 Ver.2.11        ○  any     　any
+ 松茸V2 Ver.2.13β版B19 ○  FP$PC98A  any
+ 松茸V3 Ver.3.00開発B14 ×                        起動時に暴走
+ EGBridge Ver.2.01      ×                        制御できない
+ EGBridge Ver.3.10      ○  FP$PC98B  FEPより後
+ WXP Ver.1.03a          ○  any     　any
+ WX2 Ver.1.50a          ○  FP$PC98B  FEPより前   （BNKDRV V1.14 の場合）
+ WX2+ Ver.2.00          ○  FP$PC98B  FEPより前   （BNKDRV V1.14 の場合）
+ ACE Ver.2.15           ○  any     　FEPより前   （BNKDRV V1.14 の場合）
+ Katana2 Ver.1.25       ○  any     　FEPより前
+ FIXER Ver.3.10 Rel.2.1 ○  FP$PC98B  any
+ FIXER Ver.4.13         ×                        状態検出不能
+ DFJ Ver.1.0            ○  any     　any
+ MGR2 Ver.1.00          ×                        状態検出不能
+ NEC AI (DOS3.3C以降)   ○  FP$NEC    any         制御のみ INT 経由で行う
+ NEC AI (DOS3.3Bまで)   ○  FP$NEC  　any         制御のみ INT 経由で行う
+ NEC 逐次/連文節変換    ○  FP$NEC    any         制御のみ INT 経由で行う
+ 嵐 Ver.2               ×                        状態検出不能
+ ------------------------------------------------------------------------
+ *1 太田純作成の PC-9801/286 CRT BIOS 作業領域強制更新デバイスドライバー
+ *2 PC-9801 CRT/KBD BIOS 経由で検出・制御を行う（PC-286 でも利用可能）
+ *3 FEPAID.SYS の引数に指定すべきデバイス名（any: FP$PC98A/B のいずれか）
+ *4 FEP に対する FEPAID.SYS の組み込み順序（any: 前後いずれも可）
+ ========================================================================
+ 
+ (7) BNKDRV V1.13 で組み込み、「BDSETID V1.0」*1 で認識させた場合*2
+ ========================================================================
+ 日本語入力 FEP       制御  BDSETID*3 備考
+ ------------------------------------------------------------------------
+ ATOK5 Ver.1.1          ○  ATOK6
+ ATOK6 Ver.1.2          ○  ATOK6     *4
+ EGBridge Ver.2.01      ○  EGB2
+ EGBridge Ver.3.10      ○  EGB3      *4
+ WXP Ver.1.03a          ○  WXP       *4、wxcolor、wxatok などは無効*5
+ MGR2 Ver.1.00          ○  MGR2
+ NEC AI (DOS3.3C以降)   ×
+ NEC AI (DOS3.3Bまで)   ○  NECAIK
+ NEC 逐次/連文節変換    ○  NECAIK
+ ------------------------------------------------------------------------
+ *1 金子裕氏作成の BNKDRV 用デバイス/識別 ID 書き込みプログラム（junet）
+ *2 BNKDRV V1.01 では利用できない
+ *3 BDSETID コマンドに指定する引数
+ *4 BNKDRV V1.12 でも動作確認済み
+ *5 ID 書き込みを「WX      01.00」にすれば wxcolor は利用可能と思われる
+ ========================================================================
+ 
+ (8) BNKDRV V1.13 で組み込み、「AtokID V1.03」*1 で認識させた場合
+ ========================================================================
+ 日本語入力 FEP       制御  AtokID*2  備考
+ ------------------------------------------------------------------------
+ ATOK5 Ver.1.1          ○  ATOKID5   メモリー上の識別ID でのみ常駐判定可
+ ATOK6 Ver.1.2          ○  ATOKID6   メモリー上の識別ID でのみ常駐判定可
+ ATOK7 Ver.1.10         ×  ATOKID7   AtokID の不備により暴走の可能性あり
+ ------------------------------------------------------------------------
+ *1 NCC-1701A 氏作成、ASCII-NET PCS などで配布
+ *2 常駐させるコマンドのバージョン
+ ========================================================================
+ 
+ (9) BNKDRV V1.13 で組み込み、「BDATOK7 V0.91」*1 で API を再設定した場合
+ ========================================================================
+ 日本語入力 FEP       制御            備考
+ ------------------------------------------------------------------------
+ ATOK7 Ver.1.10         ○            bdatok7 -6 では ATOK6 API で制御
+ ------------------------------------------------------------------------
+ *1 太田純作成の BNKDRV 対応 ATOK7 API 再設定プログラム（junet、MSA-NET）
+ ========================================================================
+ 
+ (10) 「裏しまっ太郎 V1.2a」*1 で裏 G-VRAM に組み込んだ場合
+ ========================================================================
+ 日本語入力 FEP       制御            備考
+ ------------------------------------------------------------------------
+ ATOK6 Ver.1.2          ○            デバイス名でのみ常駐判定可
+ ------------------------------------------------------------------------
+ *1 サザンパシフィックの QUICKSILVER、dBXL に付属
+ ========================================================================
+ 
+ (11) 「松茸用 G-RAM 転送ドライバ V1.00」*1 で G-VRAM に組み込んだ場合
+ ========================================================================
+ 日本語入力 FEP       制御            備考
+ ------------------------------------------------------------------------
+ 松茸86 Ver.1.0         ○
+ 松茸V2 Ver.2.11        ○
+ 松茸V2 Ver.2.13β版B19 ○
+ 松茸V3 Ver.3.00開発B14 ○
+ ------------------------------------------------------------------------
+ *1 日経 MIX の k3/pds 会議で配布
+ ========================================================================
+ 
+ 2. 東芝 J3100
+ 
+ (1) システム標準の方法でメインメモリーに組み込んだ場合
+ ========================================================================
+ 日本語入力 FEP       制御            制御形態          常駐判定
+ ------------------------------------------------------------------------
+ ATOK5T Ver.1.2         ○            INT               DEV, VECT
+ ATOK7R Ver.1.00        ○            FARCALL, INT*1    DEV, VECT
+ WXP Ver.1.03           ○            INT               VECT
+ WX2+ Ver.2.00A         ○            MSKANJI           DEV
+ WX2A5 Ver.2.00A        ○            MSKANJI, INT      DEV, VECT
+ WX2A7 Ver.2.00A        ○            MSKANJI, INT*1    DEV, VECT
+ ------------------------------------------------------------------------
+ *1 7TO5.COM を同時に組み込んだ場合のみ
+ ========================================================================
+ 
+ 3. 富士通 FM-R シリーズ
+ 
+ (1) CONFIG.SYS でメインメモリーに組み込んだ場合
+ ========================================================================
+ 日本語入力 FEP       制御  FEPDMY*1  制御形態          常駐判定
+ ------------------------------------------------------------------------
+ OAK Ver.1.10           ○            INT               VECT
+ OAK Ver.1.30           ○            INT               VECT
+ OAK Ver.4.20           ○  FP$OAK    INT               VECT
+ VJE-β Ver.2.50 L10    ○            MSKANJI           DEV
+ ------------------------------------------------------------------------
+ *1 FEPDMY.SYS を組み込む必要がある場合、引数として指定すべきデバイス名
+ ========================================================================
+ 
+ 4. 松下 Panacom M シリーズ
+ 
+ (1) CONFIG.SYS でメインメモリーに組み込んだ場合
+ ========================================================================
+ 日本語入力 FEP       制御            制御形態          常駐判定
+ ------------------------------------------------------------------------
+ かな漢字 Ver.2.00 L13  ○            INT               VECT
+ ATOK6 Ver.1.2          ○            INT               DEV, VECT
+ ========================================================================
+ 
+ 5. 日立 B16 シリーズ、リコー Mr.マイツール
+ 
+ (1) CONFIG.SYS でメインメモリーに組み込んだ場合
+ ========================================================================
+ 日本語入力 FEP       制御            制御形態          常駐判定
+ ------------------------------------------------------------------------
+ 連文節 Ver.2.05A       ○            INT               VECT
+ 自動変換 Ver.1.04A     ○            INT               VECT
+ 自動変換 Ver.2.04A     ○            INT               VECT
+ ========================================================================
+ 
+ 6. リコー Mr.マイツール MAGUS
+ 
+ (1) CONFIG.SYS でメインメモリーに組み込んだ場合
+ ========================================================================
+ 日本語入力 FEP       制御            制御形態          常駐判定
+ ------------------------------------------------------------------------
+ 日本語入力 Ver.1.00    ○            INT               DEV
+ ========================================================================
+ 
+ 7. 沖 IF800 シリーズ
+ 
+ (1) CONFIG.SYS でメインメモリーに組み込んだ場合
+ ========================================================================
+ 日本語入力 FEP       制御            制御形態          常駐判定
+ ------------------------------------------------------------------------
+ FEPEX Ver.2.5          ○            INT               DEV
+ ========================================================================
+ 
+ 8. AX 協議会機
+ 
+ (1) CONFIG.SYS でメインメモリーに組み込んだ場合
+ ========================================================================
+ 日本語入力 FEP       制御            制御形態          常駐判定
+ ------------------------------------------------------------------------
+ ATOK6AX Ver.1.2        ○            INT               VECT
+ VJE-β Ver.2.11        ○            MSKANJI           DEV
+ ========================================================================
+ 
+ 9. IBM PS/55 シリーズ
+ 
+ (1) CONFIG.SYS でメインメモリーに組み込んだ場合
+ ========================================================================
+ 日本語入力 FEP       制御            制御形態          常駐判定
+ ------------------------------------------------------------------------
+ ATOK6 Ver.1.2          ○            INT               VECT
+ ATOK7 Ver.1.10         ○            FARCALL, INT*1    VECT
+ ------------------------------------------------------------------------
+ *1 ATOK7 に付属の 7TO6.COM を同時に組み込んだ場合のみ
+ ========================================================================
+ 
+ 10. IBM DOS J4.0x/V, J5.0x/V
+ 
+ (1) CONFIG.SYS でメインメモリーに組み込んだ場合
+ ========================================================================
+ 日本語入力 FEP       制御            制御形態          常駐判定
+ ------------------------------------------------------------------------
+ IBM SKK Ver.1.00       ○            IAS*1             DEV
+ IBM 連文節 Ver.3.01    ○            IAS*1             DEV
+ ATOK7 Ver.1.10         ○            IAS*1, INT*2      VECT
+ VJE-β Ver.2.50        ○            MSKANJI           DEV
+ WX2+ Ver.2.00          ○            MSKANJI           DEV
+ WX2I Ver.2.00          ○            MSKANJI, IAS*1    DEV
+ WX2A7 Ver.2.00         ○            MSKANJI           DEV
+ ------------------------------------------------------------------------
+ *1 DOS/V 日本語入力サブシステム（$IAS.SYS）経由での制御
+ *2 ATOK7 に付属の 7TO6.COM を同時に組み込んだ場合のみ
+ ========================================================================
diff -crN ../orig/doc.j/readme.doc ./doc.j/readme.doc
*** ../orig/doc.j/readme.doc	Thu Jan 01 09:00:00 1970
--- ./doc.j/readme.doc	Mon Dec 27 23:12:42 1999
***************
*** 0 ****
--- 1,2251 ----
+ 
+ ＪＶｉｍ ３.０ のしおり
+                                                      Version 3.0-j2.0
+                                                   2000 年  1 月  1 日
+                                       土田  健一 (ken_t@st.rim.or.jp)
+ 
+ 
+  1. はじめに
+ 
+     JVim 3.0(Japanized Vim) は、 vi クローンのエディタ Vim 3.0 を、小
+   笠原博之 (oga@dgw.yz.yamagata-u.ac.jp) さんの簡易日本語化パッチを元
+   に、中村敦司 (ann@mrit.mei.co.jp) さんの Vim 2.0 のパッチをマージし
+   て Onew メイリングリストの方々の協力の元、日本語化したものです。
+ 
+     そして、先日、待ちに待った 5.0 が本家からリリースされましたので、
+   このバージョンが 3.0 の日本語化最終版の予定です。
+ 
+ 
+  2. 修正内容
+ 
+     主な修正内容は次の通りです。
+ 
+     1.  小笠原さんのパッチと中村さんのパッチを統合して日本語化
+     2.  太田純 (ohta@src.ricoh.co.jp) さんの FEPCTRL ライブラリを使用
+         して MS-DOS での FEP 制御を追加
+     3.  DOS/V+DOS 汎用版の追加
+     4.  PC-98+DOS 汎用版の追加
+     5.  WIN-95 対応 (暫定的な対応で制限あり : console mode)
+     6.  Windows GUI サポート
+     7.  LHA/gzip/compress/TAR ファイル編集機能の追加
+     8.  ftp 経由のファイル編集機能の追加
+     9.  その他
+ 
+ 
+  3. 実行
+ 
+   3.1 DOS/V
+ 
+       DOS/V では、基本的にはそのまま実行すれば動作します。
+       但し、当然ですが config.sys に V-TEXT ドライバ (jdisp.sys 等) が
+     組み込まれている事が前提です。
+ 
+      a) config.sys の設定
+ 
+         config.sys に、V-TEXT ドライバの記述がある事を確認する。
+ 
+      b) 環境変数の設定
+ 
+         必要ならば、以下の環境変数を設定する
+ 
+         o VIMINIT/EXINIT      vim の初期設定
+         o HOME                ホームディレクトリの絶対パス
+         o COMSPEC             command.com の絶対パス
+ 
+         この内、 HOME と COMSPEC は設定した方がいいでしょう。
+ 
+      c) 初期オプションの設定
+ 
+         必要ならば、ホームディレクトリに _vimrc ファイルを作り初期オプ
+       ションを設定します。
+ 
+      d) ヘルプファイルの設定
+ 
+         ヘルプファイルを実行形式と同じディレクトリに置きます。
+ 
+   3.2 PC-98
+ 
+       PC-98 も、基本的にはそのまま実行すれば動作します。
+ 
+      a) 環境変数の設定
+ 
+         必要ならば、以下の環境変数を設定する
+ 
+         o VIMINIT/EXINIT      vim の初期設定
+         o HOME                ホームディレクトリの絶対パス
+         o COMSPEC             command.com の絶対パス
+ 
+         この内、 HOME と COMSPEC は設定した方がいいでしょう。
+ 
+      b) 初期オプションの設定
+ 
+         必要ならば、ホームディレクトリに _vimrc ファイルを作り初期オプ
+       ションを設定します。
+ 
+      c) ヘルプファイルの設定
+ 
+         ヘルプファイルを実行形式と同じディレクトリに置きます。
+ 
+   3.3 WIN-32
+ 
+       WIN-32 も、基本的にはそのまま実行すれば動作します。
+       ここで、普通に起動すると Windows GUI mode で起動し、 -nw オプショ
+     ンを指定すると Console mode (MS-DOS プロンプト) で起動します。
+ 
+      a) 環境変数の設定
+ 
+         必要ならば、以下の環境変数を設定する
+ 
+         o VIMINIT/EXINIT      vim の初期設定
+         o HOME                ホームディレクトリの絶対パス
+         o COMSPEC             command.com/cmd.exe の絶対パス
+ 
+         この内、 HOME と COMSPEC は設定した方がいいでしょう。
+ 
+      b) 初期オプションの設定
+ 
+         必要ならば、ホームディレクトリに _vimrc ファイルを作り初期オプ
+       ションを設定します。
+ 
+      c) ヘルプファイルの設定
+ 
+         ヘルプファイルを実行形式と同じディレクトリに置きます。
+ 
+      ※ GUI バージョンだけがご使用になりたい方へ
+         # ショートカットへの Drag & Drop などで、 MS-DOS プロンプトが
+         # 一度開くのが嫌な方もお試しください。
+ 
+         わちきさんの、 wsp を使用させて頂き、自己アップデート形式の実
+       行ファイルで GUI のみのものを作れるようにしました。
+         アーカイブを展開すると、 vim32.exe と vim32w.com があるので、
+       vim32w.com を実行すると vim32.exe が GUI subsystem で動作するよ
+       うに書き換えられます。
+         また、これによって、 Windows 95 でもデスクトップのショートカッ
+       トやエクスプローラでの表示にちゃんとアイコンが表示されます。
+         # 以前のバージョンがショートカットとして存在する場合には、一度
+         # 削除してください。
+ 
+   3.4 その他
+ 
+       MS-DOS 汎用 (DOS EXTENDER を含む) や UNIX の場合、またWIN-32 で
+     エスケープシーケンスを使用する場合には以下の設定が必要です。
+ 
+      a) config.sys の設定 (MS-DOS/WIN-32)
+ 
+         config.sys に、ANSI エスケープシーケンスドライバ (ansi.sys 等)
+       の記述がある事を確認する。
+ 
+         # PC-98 の MS-DOS では、必要ありません。
+ 
+      b) 環境変数の設定
+ 
+         以下の環境変数を設定する
+ 
+         o HOME                ホームディレクトリの絶対パス
+         o COMSPEC             command.com/cmd.exe の絶対パス
+                               (MS-DOS/WIN-32)
+         o SHELL               シェルの絶対パス (UNIX)
+         o TERM                termcap エントリ名
+         o TERMCAP             termcap ファイルの絶対パス
+ 
+         必要ならば、以下の環境変数を設定する。
+ 
+         o LINES               画面の行数
+         o COLUMNS             画面の桁数
+         o VIMINIT/EXINIT      vim の初期設定
+         o LC_CTYPE            locale 識別子 (UNIX)
+         o LANG                文字セットの識別子 (UNIX)
+                               ja_JP.JIS/ja_JP.jis7           JIS コード
+                               ja_JP.EUC/japanese/ja_JP.ujis  EUC コード
+                               ja_JP.SJIS/ja_JP.mscode        SJIS コード
+ 
+      c) termcap ファイルの作成 (MS-DOS/WIN-32)
+ 
+         環境変数 TERMCAP で指定した termcap ファイルを作成し、環境変数
+       TERM で示したエントリを作成します。
+ 
+      d) ヘルプファイルの設定
+ 
+         ヘルプファイルをコンパイル時に指定したディレクトリに置きます。
+         MS-DOS/WIN-32 の場合には、実行形式を置いたディレクトリに一緒に
+       置きます。
+ 
+ 
+  4. コンパイルの方法
+ 
+   4.1 パッチを当てる
+ 
+       まず、オリジナルのソースを展開し、カレントディレクトリを移動しま
+     す（ src ディレクトリの一つ上のディレクトリです）。
+       その後、
+ 
+             gzip -d jvim.tar.gz
+             tar xvf jvim.tar
+             patch -p < jvim.diff
+ 
+     として頂く事によって、パッチが展開されます。
+ 
+   4.2 MS-DOS
+ 
+       MS-DOS では、Borland C++ 4.02 を使用してコンパイルする為の
+     makefile が "makjdos.mak" "makj98.mak" としてパッチファイルに含ま
+     れているので
+ 
+             make -f makjdos.mak     <-- DOS/V の場合
+             make -f makj98.mak      <-- PC-98 の場合
+ 
+     としてコンパイルしてください。
+       残念ながら、他のコンパイラを持っていませんので、コンパイラが
+     Borland C++ で無い場合には適宜 makefile をご自分で作ってください。
+ 
+   4.3 WIN-32 (Windows-NT/95)
+ 
+       WIN-32 は、 VC++ 5.0 での確認です。
+       makefile は、 "makjnt.mak" です。
+ 
+   4.4 DJ-GPP (DOS EXTENDER GO32)
+ 
+       渡辺博文さんのご尽力で、DOSエクステンダの GO32 に対応して頂きま
+     した。
+       又、 FEP の制御を行う為に tantan (sgl00213@niftyserve.or.jp) さ
+     んの DJ-GPP 用 fepctrl 制御パッチを使用させて頂いています。
+       makefile は、 "makjdj.mak" です。
+ 
+   4.5 UNIX
+ 
+       UNIX 用の makefile は、 "makjunix.mak" です。
+       UNIX でコンパイルする場合には、 "makjunix.mak" ファイル内の
+ 
+         1:   configuration dependend
+         2:   various choices
+         2-2: Select Japanese Input System dependend
+         3:   hardware dependend
+ 
+     の部分をそれぞれお使いの環境に合わせて設定した後に、make してくだ
+     さい。
+ 
+   4.6 BOW (BSD on Windows)
+ 
+       BOW 用の makefile は、 UNIX と共通です。
+       又、 MS-IME の直接制御を行う場合には、 2-2 の Input System で
+     BOW IME を選択してください。
+ 
+ 
+  5. コンパイルオプション
+ 
+     日本語化に伴い以下のコンパイルオプションが追加されています。
+ 
+      KANJI/TRACK/FEPCTRL/CRMARK/FEXRC/NT106KEY/JP_DEF/CANNA/ONEW
+ 
+     コンパイルオプションのチェックは行っていないので、適宜設定してくだ
+   さい。
+ 
+   5.1 KANJI
+ 
+       KANJI が define されると、日本語の入出力が可能となります。また、
+     digraph は使用できなくなります。
+ 
+   5.2 TRACK
+ 
+       hjkl キーによって罫線を引く機能が追加されます。
+ 
+   5.3 CRMARK
+ 
+       オプション 'crmark' を追加します。
+ 
+   5.4 FEXRC
+ 
+       オプション 'fexrc' を追加します。
+ 
+   5.5 NT106KEY
+ 
+       WINDOWS-NT の console mode と WIN-32 の GUI mode で、半角/全角キー
+     をエスケープキーにします。
+ 
+   5.6 JP_DEF
+ 
+       デフォルトの入出力の日本語コードを定義します。
+       この定義は、 3 文字の文字列からなり、最初にキー入力のコードを、
+     次にディスプレイのコード、最後にシステムのコード (パイプコマンド等
+     で外部コマンドに渡す際の日本語コード)を定義します。
+ 
+            +-------- キー入力コード
+            |+------- ディスプレイ出力コード
+            ||+------ システムのコード
+            VVV
+           "SSS"
+ 
+       定義できる文字は、
+ 
+         'E'     EUC コード
+         'J'     JIS コード
+         'S'     Shift-JIS コード
+ 
+     の 3 つです。
+       デフォルトでは、 MS-DOS/WIN-32 では "SSS" 。その他のシステムでは
+     "EEE" に定義してあります。
+ 
+   5.7 FEPCTRL
+ 
+       MS-DOS/WIN-32 では、 FEP/IME を直接制御する事によって日本語入力
+     制御が行われます。
+       UNIX では、日本語入力制御の為のエスケープシーケンスを出力する様
+     になります。
+ 
+       注: WIN-32 で使用する場合は、必ず定義してください。
+ 
+   5.8 CANNA
+ 
+       CANNA の直接制御機能が組み込まれます。
+       必ず、 FEPCTRL と一緒に定義してください。
+       また、この時には fepseq.c の代わりに fepcanna.c をコンパイル／リ
+     ンクしてください。
+ 
+   5.9 ONEW
+ 
+       日本語入力システム ONEW の制御が組み込まれます。
+       必ず、 FEPCTRL と一緒に定義してください。
+       また、この時には fepseq.c の代わりに feponew.c をコンパイル／リ
+     ンクしてください。
+ 
+   5.10 その他 (notdef)
+ 
+       基本的に、私の趣味で変更したところや、日本語と関係ない修正などは
+     notdef を定義して頂くとオリジナルの動作と同じになるようにしてあり
+     ますので、変だなと思われたら適当に直してください。
+ 
+   5.11 USE_OPT
+ 
+       vim 標準で無い、動作のフラグが設定されます。
+       6.19 option を参照してください。
+ 
+   5.12 USE_GREP
+ 
+       検索機能が追加されます。 14.23 grep を参照してください。
+ 
+   5.13 USE_EXFILE
+ 
+       LHA ファイル及び ftp 経由の編集ができるようになります。
+ 
+   5.14 USE_BDF
+ 
+       BDF フォントを Windows GUI バージョンで使用できるようにします。
+ 
+ 
+  6. 増えているオプション
+ 
+     日本語化に伴い、次のオプションが増えています。
+     () 内は、オプションの短縮形を (短縮形があれば) 示しています。
+ 
+   6.1 crmark (cm)
+ 
+       改行文字を '!' で表示します。 list オプションでは、タブまで変換
+     されてしまって使いづらい時に指定してください。
+       デフォルトは、 nocrmark (表示しない) です。
+ 
+   6.2 fepctrl (fc)
+ 
+       コマンドモードとインプット／リプレースモードの遷移のタイミングで、
+     前回の日本語入力の状態に合わせて FEP/IME を起動します。
+       このオプションは、ウインドウ毎に設定ができます。
+       起動時のデフォルトは nofepctrl です。新しく、ウインドウを作成し
+     た場合には、カレントウインドウの状態がデフォルトになります。
+ 
+       注: WINDOWS-NT(console mode) の場合
+ 
+           どの様な原因かは判りませんが、 WINDOWS-NT ではこのオプション
+         を使用すると日本語入力がうまくできない場合があるそうです (手元
+         の環境では発生しないので何が原因か判りません) 。
+           うまく日本語が入力できない場合には、 nofepctrl としてお使い
+         ください。
+ 
+       注: WINDOWS-95(console mode) の場合
+ 
+           WINDOWS-95 では、 WINDOWS-NT の Console-API と部分的に互換が
+         取れていない様です。
+           この為、 WINDOWS-95(console mode) で日本語入力を可能とする為
+         に、WINDOWS-NT(console mode) とキー入力のルーティンを分け、 IME
+         の状態をチェックしながら呼び出す API を変えていますので、日本
+         語を入力する場合には fepctrl を定義してください。
+ 
+           # 公式には、 WINDOWS-95 では console-API はサポートされてい
+           # ないようです。
+ 
+       注: BOW(BSD on Windows) の場合
+ 
+           BOW では、 UNIX 用の fepseq.c の替わりに fepbow.c を使用して
+         ください。
+           fepbow.c を使用する事によって、 BOW の ioctl を使用して IME
+         の直接制御を行う様になります。
+ 
+   6.3 jcode (jc)
+ 
+       カレントウインドウの日本語コードを指定します。
+       指定できるのは、次の 5 つです。
+ 
+         E/e     EUC コード
+         J/j     JIS コード
+         S/s     Shift-JIS コード
+         U/u     Unicode
+         T/t     UTF-8
+ 
+       大文字 (EJSUT) の場合には、ファイルの読み込みの際に日本語コード
+     の自動判定を行います。小文字 (ejsut) の場合には、自動判定は行いま
+     せん。
+       このオプションは、ウインドウ毎に設定ができます。
+       起動時のデフォルトは JP_DEF のシステムコードです。新しく、ウイン
+     ドウを作成した場合には、カレントウインドウの値がデフォルトになりま
+     す。
+ 
+   6.4 jiauto (ja)
+ 
+       jinsertmode で、FEP の自動起動を指定している場合に、日本語と
+     ASCII のどちらをデフォルトとするかを判断する閾値を設定します。
+       たとえば、この値が 10 の場合には、
+ 
+         ASCII 文字を 10 文字入力           ASCII が初期値
+         日本語 (2byte) 文字を 10 文字入力  日本語が初期値
+ 
+     となります。
+       起動時のデフォルトは 0 です。
+ 
+   6.5 jinsertmode (ji)
+ 
+       コマンドモードから編集モードに入った時に、日本語入力と ASCII 入
+     力のどちらをデフォルトとするかを指定します。
+ 
+         a       ASCII モード固定 (デフォルト)
+         A       ASCII モードですが、 jiauto の値によって入力
+                 された文字数で日本語入力に自動的に変更されま
+                 す
+         j       日本語モード固定
+         J       日本語モードですが、 jiauto の値によって入力
+                 された文字数で ASCII 入力に自動的に変更されま
+                 す
+ 
+       AJ を指定した自動切り替えを使用する場合には、 jiauto の値を指定
+     する必要があります。自動切り替えは、プログラムを書いていて日本語の
+     コメントを入れる場合等にお使いください。
+       このオプションは、ウインドウ毎に設定ができます。
+       起動時のデフォルトは a です。新しく、ウインドウを作成した場合に
+     は、カレントウインドウの状態がデフォルトになります。
+ 
+   6.6 jkanaconv (jkc)
+ 
+       いわゆる、「半角カナ」を全角カナに自動変換する為のオプションです。
+       このオプションが指定されていると、「ファイルの読み込み」と「キー
+     入力」で半角カナがあった場合に自動的に全角カナに変換します。
+       起動時のデフォルトは、「システムコード」が SJIS の場合には
+     nojkanaconv 、それ以外では jkanaconv です。
+ 
+   6.7 jmask (jm)
+ 
+       日本語コードをそれぞれ、「キー入力」「ディスプレイ表示」「システ
+     ムコード」として設定します。
+ 
+         'E'     EUC コード
+         'J'     JIS コード
+         'S'     Shift-JIS コード
+ 
+       設定できるのは、上記 3 つのコードで大文字だけです。
+       起動時のデフォルトは、 JP_DEF で指定された値です。
+ 
+   6.8 jreplace (jrep)
+ 
+       日本語文字列を REPLACE モードで書き換える際の動作を指定します。
+       jreplace では、文字幅による REPLACE を行い、 nojreplaceでは文字
+     単位の REPLACE を行います。
+       従って、文字列 "123456" を '1' の部分から "あいう" という文字列
+     で REPLACE する場合に、 jreplace では "あいう"となりますが、
+     nojreplace では "あいう456" となります。
+ 
+       起動時のデフォルトは、 jreplace です。
+ 
+   6.9 jtilde (jt)
+ 
+       日本語を tilde operator (~) の対象にするか指定します。
+       日本語を変換対象にすると
+ 
+           あ -> ア
+           ♂ -> ♀
+ 
+     の様に、 ~ で文字を変換します。
+       起動時のデフォルトは、 nojtilde です。
+ 
+   6.10 trackset (trs)
+ 
+       罫線文字を設定します。次のものが設定できます。
+ 
+         "as"        ASCII 文字
+         "jp"        日本語罫線
+         "bj"          同上
+         "hj"          同上
+ 
+       起動時のデフォルトは、 as です。
+ 
+   6.11 ttrack (tt)
+ 
+       空白透過な罫線文字を選択する。
+       起動時のデフォルトは、 nottrack です。
+ 
+   6.12 fexrc (fe)
+ 
+       新規にファイルをオープンする際に、オープンする拡張子に合わせて
+     vimrc ファイルを読み込みます。
+       .c という拡張子の場合には、 .vimrc.c という設定ファイルを読み込
+     みます。拡張子に該当する設定ファイルが無い場合には、 .vimrc ファイ
+     ルを読み込みます。
+       例として、
+ 
+           .vimrc        ->    set ts=8
+           .vimrc.c      ->    set ts=4
+ 
+     としておくと、 .c の拡張子を持つファイルをオープンするとtabstop が
+     4 に、その他の拡張子を持つファイルをオープンすると tabstop が 8 に
+     なります。
+       起動時のデフォルトは、 nofexrc です。
+ 
+       # PC 系では、 .vimrc を、 _vimrc に読み替えてください。
+ 
+   6.13 fepkey (fk)
+ 
+       日本語入力を ON/OFF するキーを指定します。
+       このパラメータには、 '@' 〜 '_' の文字を指定します。実際に、日本
+     語入力を ON/OFF するキーは、これと 0x1f の and を取った control キー
+     になる事に注意してください。
+       起動時のデフォルトは、 '\@' で、 CTRL-\ もしくは CTRL-@ で日本語
+     入力が ON/OFF されます。
+       また、 Window GUI バージョンでは fepkey=[ とする事で、 SHIFT+SPACE
+     での IME の ON/OFF ができます。
+ 
+   6.14 -nw (起動オプション)
+ 
+       WIN-32 版では、起動時に -nw を指定する事によって console mode で
+     動作します。指定しない場合には、 GUI modeで起動します。
+ 
+   6.15 jignorecase (jic)
+ 
+       文字列を検索する際に、いわゆる「あいまい検索」で動作するようにな
+     ります。
+       これによって「 a 」と「 A 」と「ａ」と「Ａ」が同一の文字とみなさ
+     れるようになります。
+       起動時のデフォルトは nojignorecase です。
+ 
+   6.16 window (win)
+ 
+       WIN-32 版では、 window オプションで WINDOW サイズを変更できます。
+       これは、 :win を set コマンドに追加して modeline で使用できるよ
+     うにしたものです。
+       使い方は、 :set win=80,25 のように、 Colum と Row をカンマで区切
+     り 10 進数で記述します。
+ 
+   6.17 whichwrap (ww)
+ 
+       標準で存在する whichwrap ですが、日本語対応のジャンプの仕方を変
+     更する為に拡張しました。
+       下記の様な動作になります（↑が移動する場所を示します）。
+ 
+          ww の値:   bugがありましたら、mailでお知らせください。  また、
+          default:   ↑ ↑            ↑↑  ↑                ↑  ↑  ↑
+            32   :   ↑ ↑              ↑  ↑                    ↑
+            64   :   ↑                                           ↑
+ 
+       whichwrap の値は、 bit で判定して動作する様になっていますので、
+     上記の ww の値で 32 と書いてあるのは、 2 の 5 乗ビットを立てている
+     事を示します。
+       whichwrap が 32 の場合には、日本語と英数字、空白文字を区切り文字
+     とし、 64 の場合には空白文字のみを区切り文字とします。
+ 
+   6.18 option
+ 
+       オリジナルには無いが、あったほうが便利そうな機能。だけど、絶対に
+     標準機能ではないというものを option として設定できるようにしました。
+       ビット単位で意味を持ち、下記の様な動作になります。
+             0:  変更無し
+             1:  コロンモードでのファイル名とディレクトリ名の指定
+                 /tmp/a.c が現在のファイルの場合には、 @ が a.c になり、
+                 & が /tmp になります。オリジナルの機能で #< が /tmp/a
+                 になります
+            16:  スマートコマンドヒストリーを使用しない
+                 コマンドキャンセルと前回と同じコマンドをヒストリする
+            32:  quickfix で、エラー行以外を無視
+            64:  JIS ファイルが混じった、 SJIS/EUC の編集を無効にして、
+                 JIS コードの部分をそのままにする
+           128:  オリジナルの binary モードにする
+ 
+   6.19 foption
+ 
+       オリジナルには無いが、あったほうが便利そうな機能。だけど、絶対に
+     標準機能ではないというもので、ファイル単位に指定できた方がいいもの
+     を foption として設定できるようにしました。
+       ビット単位で意味を持ち、下記の様な動作になります。
+             0:  変更無し
+             1:  ファイルの read/write 時に行末の空白を削除
+             2:  ファイルの read/write 時にタブを空白にする
+           256:  MAC ファイル (CRが改行文字のファイル) の読み書き
+ 
+   6.20 fepkeys (fo)
+ 
+       コマンドモードのキーによって、日本語入力を ON/OFF するコマンドキー
+     を指定します。
+       このキーの指定に関わらず、 a/A/i/I/R/cw などの、文字列を入力する
+     キーは、日本語入力を ON/OFF します。
+       デフォルトでは、 r が設定されています。 /?tTfF などを追加しても
+     いいでしょう。
+ 
+   6.21 -no (起動オプション)
+ 
+       WIN-32 版では、起動時に -no を指定する事によって、既に、 GUI モー
+     ドで動作しているウインドウが存在する場合には、 そのウインドウを使
+     用します。但し、次の条件の場合には新規にウインドウを作ります。
+ 
+       1.  -no が指定されて起動しているウインドウが存在しない
+       2.  ウインドウのカレントバッファに変更があり、 autowrite も
+           hidden も指定されていない
+       3.  コロンモードや挿入モードの時
+       4.  画面選択の状態の場合
+       5.  既に、他のプロセスから要求を受け付けている状態
+           処理が終われば、最上画面にウインドウが表示されるので判ります
+ 
+       例えば、ファイル関連付けの起動するアプリケーションに
+ 
+           vim32.exe -no "%1"
+ 
+     と定義しておくと、 1 つのウインドウで可能な限り動作するようになり
+     ます。
+ 
+   6.22 onewredraw (or)
+ 
+       Onew のステータスラインを CR 入力時に行うオプションです。
+ 
+   6.23 decode (dc)
+ 
+       MIME デコードなどを行う機能です。デフォルトは、 ar です。
+       V コマンドで範囲を選択した後に、 gu を入力する事によって MIME デ
+     コードを行います。
+       設定されている文字が以下の意味を持ちますので、組み合わせて使う事
+     ができます。
+             a)   auto (自動判定)
+             b)   BASE64
+             u)   uuencode
+             q)   quoted printable
+             g)   gzip
+             l)   LHA
+             +)   ファイルへ出力するのみ
+             r)   ファイル読みこみで展開 (自動判定が指定されている時)
+       土田が、流通量の非常に多い某 ML のまとめ送りを読む為だけに作った
+     機能ですので MIME の解釈などはかなり怪しいです。
+ 
+ 
+  7. 増えているコマンド
+ 
+     以下のコマンドが追加されています。
+ 
+   7.1 gh (help)
+ 
+       ヘルプファイルを表示します。
+ 
+   7.2 gx (track start)
+ 
+       罫線モードに遷移します。 ESC で終了します。
+ 
+   7.3 gp/gn
+ 
+       罫線モードの場合に、罫線の種類を変更します。
+ 
+   7.4 gX (WIN-GUI)
+ 
+       Windows GUI バージョンで、選択されている範囲をクリップボードに格
+     納した後に、削除します。 Windows 標準の CTRL-X と同じ動作です。
+ 
+   7.5 gC (WIN-GUI)
+ 
+       Windows GUI バージョンで、選択されている範囲をクリップボードに格
+     納します。 Windows 標準の CTRL-C と同じ動作です。
+ 
+   7.6 gV (WIN-GUI)
+ 
+       Windows GUI バージョンで、クリップボードの内容を読み込みます。
+     Windows 標準の CTRL-V と同じ動作です。
+ 
+   7.7 gg (grep jump)
+ 
+       grep -n regexp files の出力を、ファイルに落しておいて、ジャンプ
+     したい行で gg とすると tag jump の様に、該当ファイルの該当行にジャ
+     ンプします。
+ 
+   7.8 gu
+ 
+       6.22 decode のデコードを実行します。
+ 
+ 
+  8. 追加されているキーバインドや機能
+ 
+     以下のキーバインドや機能が追加されています。
+ 
+   8.1 CTRL-Q/CTRL-[
+ 
+       MS-DOS/WIN-32 で、エスケープシーケンスを使用している場合には、
+     CTRL-Q もしくは CTRL-[ の後に以下のキーを入力する事によって特殊(矢
+     印) キーの入力をシュミレートします。
+ 
+           'h'               LEFT キー
+           'j'               DOWN キー
+           'k'                UP キー
+           'l'               RIGHT キー
+           'H' 'b'           SHIFT+LEFT キー
+           'J' 'CTRL-F'      SHIFT+DOWN キー
+           'K' 'CTRL-B'      SHIFT+UP キー
+           'L' 'w'           SHIFT+RIGHT キー
+ 
+   8.2 CTRL-G での表示
+ 
+       CTRL-G では、オリジナルの vi に対して
+ 
+       "No File" [Modified] line 36 of 36 --100%-- col 0/1 ch 0x31 [E]
+ 
+     のように、表示が増えています。 col X/Y は、 vim オリジナルの表示で
+     カーソル位置の行内でのバイト位置と表示される桁位置。 ch は、日本語
+     化された vim の表示でカーソル位置の文字のコード。最後の [E] は、編
+     集している漢字コードの種別を示します。
+ 
+ 
+  9. Windows バージョンについて
+ 
+     Windows GUI バージョンでは、マウスやホットキー・ショートカットキー
+   などが使えますので何点か拡張がしてあります。
+     ここでは、追加した機能について説明します。
+ 
+   9.1  追加した機能
+ 
+     1.  スクロールバーの追加
+     2.  マウスでの範囲指定の追加
+         # コマンドモードでは、下記のキーとの組み合わせで、選択の方式が
+         # 変わります
+         #   o CTRL キーを押しながらでは、矩形の選択
+         #   o SHIFT キーを押しながらでは、行単位の選択
+         #   o ALT キーを押しながらでは、矩形の選択
+         # このうち、 ALT キーを押している場合には、カーソル位置は変化
+         # しませんが、画面に出ている範囲の文字しか選択できません。
+         # help 画面や、 Insert/Replace モードで ALT キーを押しながら選
+         # 択する場合には、画面に出ている範囲しか選択できません。
+     3.  右クリック（範囲指定時の選択した部分やカーソル上にマウスカーソ
+         ルを置いた場合）のポップアップメニューを追加
+     4.  マウスのダブルクリック
+         a)  grep ファイルからのジャンプ（ 7.7 を参照してください）
+         b)  CTRL キーを押しながらの場合には、アプリケーションの実行（
+             いわゆるクリッカブル URL と言われているものを想像してくだ
+             さい）
+     5.  クリップボードインタフェースの追加
+         但し、クリップボードにデータを入れるのは、システムメニューか右
+         クリックで yank or delete を選択した場合のみ（この方が使いやす
+         かった）
+     6.  フォントサイズやフォントの色の変更が可能
+     7.  Drag & Drop をサポート
+     8.  bitmap
+         背景に bitmap グラフィックを表示します
+     9.  wave sound
+         エラー時のビープ音となる wave ファイルを指定します
+    10.  Unicode での画面出力
+         英語版の Windows などで、日本語のフォントを使用して出力できる
+         様になります
+    11.  GUI 系のオプションの切り替え
+         次のパラメータが切り替えられます
+           a)  WINDOW の位置を記憶するか
+           b)  行数と桁数
+           c)  bitmap / wave file
+           d)  FONT の種類と色
+           e)  背景の色
+           f)  スクロールバーの有無
+ 
+   9.2  GUI 系オプションについて
+ 
+       GUI 系のオプション (FONT の種類等、メニューにあるもの) は、デフォ
+     ルトではレジストリに保存されます。
+       # 初期設定ファイル (vim32.ini) を使っていない場合
+ 
+       GUI 系のオプションは、デフォルトの構成 (0) とオプション (1-3) が
+     設定でき、メニューの Config もしくは、アクセラレータキーを使用する
+     事によって、 GUI 系のオプションを切り替えながら使用する事ができま
+     す。
+       起動時には、デフォルトの 0 番の Config が選択されています。
+       このデフォルトの Config を使用している場合には、終了時に変更があ
+     る部分を自動的にレジストリに記憶し、次回起動時に使用します。
+       別の GUI 系の構成を作成する場合には、 Config で別の番号 (例えば、
+     2 を) 指定します。
+       もしも、ここで選ばれた構成が始めてのものであれば、それまで使用し
+     ていた Config が引き継がれた状態になります。ここで、必要な変更を行
+     い (例えば、 bitmap を付けるとか、 font を変更する) 、メニューの
+     Config で save を選択します。
+       これで、現在の構成が記憶されますので、次回の選択からは設定した構
+     成が使用されます。
+       デフォルトの構成以外では、自動的に構成を記憶しない事に注意してく
+     ださい。
+ 
+   9.3  初期設定ファイル (vim32.ini) について
+ 
+       Windows GUI 版を使用する際に、初期設定をレジストリで無く、 .ini
+     ファイルに記述する事ができます。
+       フロッピーディスクなどに、 JVim を入れて持ち歩く場合など、毎回設
+     定を行う必要が無くなります。
+       設定例は、 vim32.ini ファイルにあります。設定ファイルのファイル
+     名は、 JVim の実行ファイル名 + .ini (実行ファイル名が vim32.exe で
+     あれば vim32.ini になり、 vim32w.exe ならば vim32w.ini になります)
+     となり、実行ファイルと同じディレクトリに置く必要があります。
+       設定ファイルの中身は、 [vim] セクションで始まり、各キーは次の様
+     になります。
+ 
+         printer       プリントアウトコマンドのファイル名
+         unicode       UNICODE 表示する=1 しない=0
+         cols          一行の文字数
+         rows          画面の行数
+         scrollbar     スクロールバー 表示する=1 しない=0
+         bitmap        ビットマップファイル名
+         wave          WAVE ファイル名
+         bdffile       英語 BDF ファイル名
+         jbdffile      日本語 BDF ファイル名
+         bdf           BDF 表示する=1 しない=0
+         fontname      フォント名
+         fontsize      フォントサイズ
+         textcolor     テキストの色  white/black/blue か、 RGB の 10 進値
+         backcolor     背景の色  white/black/blue か、 RGB の 10 進値
+ 
+       レジストリに設定を行う場合には、終了時に変更した内容を書き込んで
+     いますが、設定ファイルを使用している場合には、変更を書き込みません
+     ので注意してください。
+ 
+   9.4  アクセラレータキー
+ 
+       下記のアクセラレータキーが定義してあります。
+ 
+           ALT+0       GUI デフォルト構成
+           ALT+1 〜 3  GUI 構成 1 〜 3
+           ALT+c       選択範囲のクリップボードへのコピー
+           ALT+v       選択範囲のクリップボードからコピー
+           ALT+x       選択範囲のクリップボードへの移動
+           ALT+m       メニューの ON/OFF
+           ALT+n       新しい JVim の起動
+           ALT+o       ファイル選択画面
+           ALT+p       プリンタコマンドの起動
+           ALT+s       スクロールバーの ON/OFF
+ 
+   9.5  メニューについて
+ 
+       メニューは、 ALT+m を入力する事で表示/非表示を切り替えます。
+       また、システムメニューの部分を拡張していますので、 ALT + SPACE
+     をキーボードで入力するか、マウスでクリックする事でメニューを使用で
+     きます。
+ 
+   9.6  外部プリンタコマンドの呼び出し
+ 
+       Windows GUI バージョンでは、外部プリンタコマンドの呼び出しをサポー
+     トしています。
+       メニューに、 "Setup Print Command" がありますので、ここにプリン
+     トアウトに使用するコマンドとオプションを設定します。
+       印刷時には、ここで指定されたコマンドとオプションに、印刷する為の
+     ファイル名を引数として起動します。
+       印刷するファイル名は、 directory オプションで指定されたディレク
+     トリ名＋現在のファイル名となります。このファイルに、 SJIS に変換し
+     た内容を出力し、印刷コマンドが終了した時点で削除します。
+       もしも、 directory オプションで指定されたディレクトリに同名のファ
+     イルが存在する時には、ファイル名に (1) という様に番号が付加されま
+     す。
+       矩形や文字・行単位で範囲選択を行っている場合には、選択された範囲
+     を行単位でプリントアウトコマンドに渡し、選択が行われていない場合に
+     はファイル全体をプリントアウトコマンドに渡します。
+       範囲選択の種類に関わらず、行単位で動作するので注意してください。
+ 
+   9.7  ウインドウ位置を固定するオプション
+ 
+       起動時のウインドウの位置を固定したい場合には、メニューの "Save
+     Window Position" をチェックしてください。
+ 
+   9.8  タスクトレイへの常駐
+ 
+       クローズボタンを押した場合に、終了せずにタスクトレイに常駐する様
+     にするには、 "Task Tray" をチェックしてください。
+ 
+   9.9  マウスカーソルの消去
+ 
+       キー入力中にマウスカーソルを消去する様にするには、 "Erase Mouse"
+     をチェックしてください。
+ 
+   9.10 UNICODE フォントの使用
+ 
+       UNICODE フォントを使用するには、 "Unicode" をチェックしてくださ
+     い。
+ 
+   9.11 Windows 流の CTRL-X/C/V を実現する
+ 
+       次の様に、 _vimrc に記述する事で、 Windows 流の割り当てになりま
+     す。
+                       map  ^X      gX
+                       map  ^C      gC
+                       imap ^V^V  ^OgV
+       残念ながら、 CTRL-V でコントロール文字を入力できなくなりますので、
+     コントロール文字を入力する際には iunmap ^V^V してから、入力してく
+     ださい。
+ 
+   9.12 Windows バージョンで MS-DOS 窓が一瞬ひらくのがいやな場合
+ 
+       わちきさんの、 wsp を使用させて頂き、自己アップデート形式の実行
+     ファイルで GUI のみのものを作れるようにしました。
+       アーカイブを展開すると、 vim32.exe と vim32w.com があるので、
+     vim32w.com を実行すると vim32.exe が GUI subsystem で動作するよう
+     に書き換えられますので、 MS-DOS 窓が開かなくなります。
+ 
+   9.13 WIN-32 GUI でのスクロールスピードについて
+ 
+       j/k キーや矢印キーでのスクロールが遅く感じる時には、コントロール
+     パネルのキーボードを開いて、キーボードのプロパティで速度を選択して
+     「表示までの待ち時間」「表示の間隔」をそれぞれ「短く」「速く」に設
+     定してください。
+       特に、「表示の間隔」を変化させて動作させてみると、はっきりと違い
+     が判ると思います。
+ 
+   9.14 WIN-32(GUI mode) の TERM 名と termcap エントリの注意点
+ 
+       WIN-32 GUI mode では、 TERM 名は無視して、必ず builtin_termcap
+     を使用して動作します。
+       又、 14.5 で示した色のエントリ (t_so/t_ti/t_tb) 以外は変更しない
+     でください。 builtin_termcap のエスケープシーケンスを解釈して、呼
+     び出す API の引数を決定している為、エントリが変更されると動作しな
+     くなります。
+ 
+   9.15 Windows GUI mode の WINDOWS-NT での起動
+ 
+       NT では、いわゆる DOS 窓のコマンドラインで vim32.exe と打ち込ん
+     だ場合に、コンソールを解放してくれません。
+       95 と同じようにコンソールを解放したい場合には、 doskey.exe を使
+     用して "doskey vi=start vim32.exe $*" と定義しておくと、コマンドラ
+     インから vi と入力する事で新たなコンソールを作成／解放しますので解
+     決できます。
+ 
+   9.16 LHA/gzip/compress/TAR ファイルの編集
+ 
+       Ｍｉｃｃｏ (GCH03345@niftyserve.or.jp) さんの UNLHA32.DLL を使用
+     して LHA ファイルの編集機能を追加しました。
+       # 動作確認をした UNLHA32.DLL は、 Ver 0.90 です。
+       ファイル名に、 <archive file name>:<file name> の様に
+     "LHA アーカイブファイル名" + ":" + "LHA 内ファイル名" と指定してく
+     ださい。
+       # "LHA アーカイブファイル名" の拡張子は、 .lzh か .exe のみを認
+       # 識します。
+ 
+       o LHA ファイル内の全てのファイルを編集する場合
+             vim32.exe mail.lzh:*
+       o LHA ファイル内の特定のファイルを編集する場合
+             vim32.exe mail.lzh:log.txt
+ 
+       吉岡恒夫 (QWF00133@niftyserve.or.jp) さんの TAR32.DLL を使用して
+     TAR ファイルの編集機能を追加しました。
+       # 動作確認をした TAR32.DLL は、 Ver 0.23 です。
+       ファイル名に、 <archive file name>:<file name> の様に
+     "TAR アーカイブファイル名" + ":" + "TAR 内ファイル名" と指定してく
+     ださい。
+       # "TAR アーカイブファイル名" の拡張子は、 .tar/.tgz/.taz/.tar.gz
+       # /.tar.Z を認識します。
+ 
+       o TAR ファイル内の全てのファイルを編集する場合
+             vim32.exe mail.tgz:*
+       o TAR ファイル内の特定のファイルを編集する場合
+             vim32.exe mail.tgz:log.txt
+ 
+       また、 TAR ファイルは参照のみになります。これは、 TAR での圧縮が
+     ディレクトリ付きでサポートするのが現状では困難な事によります。
+ 
+       また、同様にして gzip/compress ファイルの編集機能を追加しました。
+       ファイル名に、 <compress file name>:<file name> の様に
+     "圧縮ファイル名" + ":" + "圧縮ファイル名から拡張子を取ったもの" と
+     指定してください。
+       # "圧縮ファイル名" の拡張子は、 .gz か .Z のみを認識します。
+ 
+       o 圧縮ファイル内のファイルを編集する場合
+             vim32.exe mail.gz:mail
+             vim32.exe mail.gz:*
+             vim32.exe mail.Z:mail
+             vim32.exe mail.Z:*
+ 
+       ファイル名は、実際には何を指定しても、 "圧縮ファイル名から拡張子
+     を取ったもの" になります。
+       また、 compress ファイルは参照のみになります。これは、 compress
+     での圧縮がサポートされていない事によります。
+ 
+   9.17 ftp ファイルの編集
+ 
+       ファイル名に、 ftp://hostname/filename の様に "ftp://" + "ftp
+     server 名" + "ファイル名" と指定してください。
+       ログイン名、パスワードなどを問い合わせるダイアログが表示されます
+     ので、 ftp server のアカウントを指定してください。
+       Windows Internet API を使用していますので、 Windows NT 3.5/3.51
+     と Windows 95 の OSR2 以前のバージョンでは、 Internet Explorer 3.X
+     以降がインストールされている必要があると思います。
+       # wininet.dll が、インストールされていれば問題ありません。
+ 
+       パスワードキャッシュは host 名を基本に管理しています。複数のログ
+     イン名を持っている場合には、 host 名を複数定義するなどしてください。
+       パスワードキャッシュは、正常にログインされた際に設定される、ログ
+     インキャッシュ、ログインに失敗した時のエラーキャッシュの二種類があ
+     ります。
+       エラーキャッシュは、正常にログインできるとクリアされます。また、
+     別のエラーログイン及び 10 秒の時間経過でもクリアされます。 ftp
+     server を立ち上げるのを忘れていて、後から立ち上げた場合などは、 10
+     秒経ってからアクセスしてください。
+ 
+       ftp server は、大抵が UNIX でしょうから、 14.12 改行コードの変更
+     を読んで設定を行った方がいいでしょう。
+ 
+       ftp は、 proxy を経由する場合には passive mode でコネクションを
+     接続します。
+ 
+   9.18 ftp 経由でのファイル編集での read error
+ 
+       ftp 経由でファイルを読み込む際に、 read error が発生した場合には
+     コントロールパネルのインターネットのプロパティで詳細タブを選択して、
+     インターネット一時ファイルを選択して、フォルダを空にしてから再度試
+     してください。
+ 
+   9.19 「送る」に登録する
+ 
+       Windows では、エクスプローラの右クリックに、送るというプロパティ
+     があります。
+       標準設定の JVim では、「改行コード」「日本語コード」「 JIS まじ
+     りの SJIS/EUC ファイル」などなどは全て自動判定しますので、ここに
+     vim32.exe を登録して、メモ帳の代わりに使うと便利です。
+       Windows 95/NT ともに、 Windows をインストールしたディレクトリの
+     中に sendto というディレクトリがありますので（ NT では、各ログイン
+     ユーザ単位と default user に別れてますので、自分だけか他の人にも使
+     わせてあげるかによって設定箇所を考えてください）、ここにエクスプロー
+     ラで「ショートカット」を作成します。
+       ショートカットの作成は、エクスプローラの「ファイル」「新規作成」
+     「ショートカット」とし、「コマンドライン」に vim32.exe を設定しま
+     す。
+ 
+   9.20 ファイル関連付けでの JVim の起動の設定
+ 
+       エクスプローラから、ダブルクリックで .txt などに JVim を関連付け
+     しておいて起動する様にするには以下の様にしてください。
+       ここでは、 .txt (テキスト文書) を例にします。
+ 
+       エクスプローラの、「表示」→「オプション」→「ファイルタイプ」を
+     選んで、「テキスト文書」を選択して「編集」をクリック。
+       アクションの「 open 」を選択して、「編集」をクリック。
+       ここで、「アクションの編集」画面になるので、「アクションを実行す
+     るアプリケーション」に
+                     vim32.exe "%1"
+                               ~~~~
+       の様に、指定します。 " (ダブルコーテーション) で括って、引数に
+     %1 を指定します。
+       JVim では、コマンドラインからの起動の為に、引数の区切りを空白文
+     字で行っていますので、 "Program Files" の様に空白文字を含んだもの
+     は複数の引数と判断してしまいますので、 " で括ってください。
+ 
+   9.21 WIN-32 で、ウインドウサイズを変更する方法
+ 
+       WIN-32 版では、 :win 80 25 の様に COLUMN と ROW を指定する事によっ
+     てウインドウサイズを変更する事ができます。
+ 
+   9.22 Windows 95 で起動に時間が掛かる
+                                      Katsutoshi_Ando@justsystem.co.jp
+ 
+       環境変数 HOME の値が、 C:\ などルートディレクトリになっていた場
+     合、起動が異常に遅い事があります。
+       これは Win95 が、 C:\\_vimrc のようにパス名(の先頭以外)に連続す
+     る \ や / があるとファイルオープン時間や存在チェックなどが異常に遅
+     いためのようです。
+       この現象が発生し、 HOME が C:\ になっているのであれば、一つディ
+     レクトリを掘って、 C:\myhome とかにすれば問題は解決します。
+ 
+ 
+ 10. 添付ファイルについて
+ 
+     以下のファイルが添付されていますので、ご一読／ご参考にしてください。
+ 
+   10.1 differen.doc
+ 
+       vim と vi の違いを解説した difference.doc の日本語訳です。これは、
+     川藤光裕さんと他有志の方々により 2.0 用に翻訳されたものを元に土田
+     が 3.0 で追加された部分を付け加えたものです。
+       vi との詳細な違いに関しては、このドキュメントを御覧ください。
+ 
+   10.2 tutor.j
+ 
+       練習用のサンプルファイル tutor を日本語化したものです。
+     これは、高須賀義弘さんが日本語化したものを、小島肇さんが jvim に対
+     応して修正したものです。
+ 
+   10.3 uganda.jp
+ 
+       uganda.txt を中村敦司さんが日本語訳されたものです。
+ 
+   10.4 termcap.dos (termcap.jdos)
+ 
+       太田純さんが作成された termcap ファイルのサンプルに、 Windows-95
+     と DOS/V 用のエントリを追加したものです。
+       termcap ファイル作成の参考にお使いください。
+ 
+   10.5 vim.hlp
+ 
+       小笠原博之さんが作成された、 vim.hlp の日本語訳ファイルです。
+ 
+   10.6 fepctrl.doc
+ 
+       太田純さんが作成された FEPCTRL ライブラリのドキュメントです。
+       本来は、 FEPC15.LZH というアーカイブになっているものから、
+     fepctrl.[ch] を使わせていただいているので、完全なアーカイブが必要
+     な方は別途、入手してください。
+       又、 fepctrl.c は WINDOWS-95 に対応させる為に、土田が手を入れて
+     いますので、オリジナルソースが必要な方も上記のアーカイブを入手して
+     ください。
+       DJ-GPP 用のパッチも fepctrl.c にはあたっています。オリジナル
+     DJ-GPP へのパッチが必要な場合には、やはり別途入手してください。
+ 
+ 
+ 11. 動作確認について
+ 
+     以下の構成での動作確認及びご報告を頂いています。
+ 
+   11.1 MS-DOS
+ 
+       MS-DOS/V 6.22
+       PC-DOS/V 6.3
+       MS-DOS(NEC版) 6.2
+       Windows-95 MS-DOS プロンプト
+       Windows-98 MS-DOS プロンプト
+       Windows-NT 3.5 MS-DOS プロンプト
+       Windows-NT 3.51 MS-DOS プロンプト
+       Windows-NT 4.0 MS-DOS プロンプト
+       Windows-NT 5.0 MS-DOS プロンプト
+ 
+   11.2 WIN-32
+ 
+       Windows-95
+       Windows-95 MS-DOS プロンプト
+       Windows-NT 3.5 MS-DOS プロンプト
+       Windows-NT 3.51
+       Windows-NT 4.0
+       Windows-98
+       Windows-NT 5.0 β
+ 
+   11.3 UNIX
+ 
+       NEWS-4.2R
+       SGI Indy/IRIX 5.3
+       IBM RS/6000 AIX 3.0/3.1
+       SS2/SunOS-4.1.4-JL
+       HP-9000/HP-UX 9.05
+       HP-9000/HP-UX 9.07
+       HP-9000/HP-UX 10.01
+       HP-9000/HP-UX 10.20
+       SS20/日本語Solaris2.4
+       Solaris2.3
+       NEC EWS4800/220 EWS-UX/V Release 6.2
+       BOW (BSD on Windows) 1.5.1
+       BOW (BSD on Windows) 1.5.1 + FreeBSD 2.0R
+       Free BSD 2.2.5-RELEASE
+       Debian 1.3.1
+       Cygwin B20.1
+ 
+   11.4 DOS EXTENDER
+ 
+       djgpp 1.12 maint 4 + gcc 2.6.3
+ 
+ 
+ 12. 著作権について
+ 
+     BDF ディレクトリにある、 mw32bdf.c 及び mw32bdf.h は GPL に従った
+   配布が必要です。
+     また、 EXFILE ディレクトリにある、ソースファイルを使用する際には、
+   土田に連絡をください。この Extend File System 部分は、あまりにも適当
+   に作っていますので．．．
+     その他の、土田が行った、日本語化部分の著作権を放棄します。
+     ソースの改良、修正、配布など、御自由に御利用ください。ただし、変更
+   の如何に関わらず、 JVim により生じるいかなる損害、不利益に対しても、
+   土田はその責を負いません。
+     また、ソースを使用された場合には、そのソースを公開して頂ける事を希
+   望します。
+ 
+ 
+ 13. 転載等について
+ 
+     基本的に転載等はオリジナルの配布条件に準じます。
+     但し、純粋に個人的な興味から、メール等で転載先を教えて頂ければ幸い
+   です。
+     随分、古いバージョンが出回っているようですので、できれば転載先を知っ
+   ておきたいというのが理由です。
+ 
+     又、バグや動作がおかしいなど気になる点や、パッチを作っていただいた
+   場合などは、是非お教えください。
+     その際には、私のホームページ (http://www.st.rim.or.jp/~ken_t/) に
+   可能な限り最新の物を置いておきますので最新版で確認されてから、私
+   (ken_t@st.rim.or.jp) に連絡して頂ければ幸いです。
+ 
+ 
+ 14. その他
+ 
+     現在、判っている問題点等を記述します。
+ 
+   14.1 WINDOWS-32(console mode) の日本語入力
+ 
+       WINDOWS-32(console mode) では、日本語の入力がうまく行えません。
+     例えば、 "あいうえお" と入力した場合にも "あいうえ" までしか表示せ
+     ず、「リターンキー」や「エスケープキー」が入力されるまで "お" が表
+     示されない場合があります。
+ 
+   14.2 WINDOWS-95(console mode) の画面表示
+ 
+       WINDOWS-95(console mode) では、 Console-API を使用した画面表示よ
+     りも、何故かエスケープシーケンスを使用した画面表示の方が高速です。
+       上記の 13.1 と合わせると、 GUI mode で使用する方がいいでしょう。
+ 
+   14.3 その他、気になること
+ 
+       JIS コードに関してはテスト環境が無いので、自分ではまったくテスト
+     していない状態ですので、必ずやバグがあると思います。
+       又、 WINDOWS-32(console mode) の様に判っていながら資料が無く、修
+     正できなかったバグもあります。
+ 
+       # 公式には、 WINDOWS-95 では console-API はサポートされていない
+       # ようです。
+ 
+ 
+ 15. tips
+ 
+   15.1  オリジナルの vi と可能な限り同じ設定にする方法
+ 
+       オプション compatible を設定してください。
+       起動した後に :set compatible とするか、環境変数 EXINIT か .vimrc
+     に set compatible と定義してもいいでしょう。
+ 
+   15.2  複数回の undo/redo
+ 
+       Vim では、複数回の undo/redo が可能です。
+       'u' で undo し 'CTRL-R' で redo します。この回数は、 undolevels
+     で設定できます。回数を 0 に指定すると、標準の vi と同じになります。
+ 
+   15.3  不幸にも Vim がお亡くなりになった場合
+ 
+       Vim が不幸にもお亡くなりになった場合には、 vim -r <filename> と
+     して recover をしてください。幸運ならば、編集中のバッファがある程
+     度回復するでしょう。
+       幸運を引き寄せるには、 updatecount と updatetime を短くする事で
+     すが、パフォーマンスに影響します。
+       また、 vim -n として on memory での動作を指定すると、絶対に幸運
+     の女神は微笑みませんのでご注意ください。
+ 
+   15.4  MS-DOS 及び WIN-32(console mode) の TERM 名
+ 
+       MS-DOS では、 TERM 名を pcbios/pcterm に設定した場合に BIOS を使
+     用した画面制御を行います。
+       WIN-32 では、 pcbios/ntconsole とした場合に Console-API を使用し
+     た画面制御を行います。
+       又、 TERM 名が環境変数 TERM に指定されていない場合には、上記の
+     TERM 名が仮定されます。
+ 
+       従って、 J3100 などで MS-DOS を使用する場合には必ず 3.4 の説明を
+     読んで環境変数 TERM/TERMCAP を設定し、使用している PC に合わせて
+     termcap ファイルを作成してください。
+ 
+   15.5  JIS コードでの日本語入力とネットワークを介した使用
+ 
+       キー入力に JIS コードを使う場合には、 ESC の入力が日本語コードの
+     開始か ESC キーの入力かを判断するためにタイマを使用しています。
+       このタイマ値は timeoutlen を使用していますので、レスポンスが悪い
+     場合には、適当に短くしてください。
+ 
+       又、漢字コードの 1 バイト目がキー入力されてから 2 バイト目が入力
+     されるまでも待ち時間も timeoutlen です。
+       ネットワークを介して使用する場合には、 ping コマンドで応答時間を
+     調べる等して適当な値を設定してください。
+ 
+   15.6  色の変更 （ WIN-32,DOS/V の場合）
+ 
+       色の変更は、 :set termcap とした時の t_so/t_ti/t_tb で行う事がで
+     きます。変えたい色の部分を :set t_so=^[\|113m の様に変更すればいい
+     です（入力する時には、 | がコマンドの区切りなので \ でエスケープす
+     るのを忘れない様に。又、エスケープは CTRL+V に続けて ESC キーです）。
+       ESC + | + 数値(10進値) + m が、カラー設定の場合のエスケープシー
+     ケンスで数値の部分が色になります。
+       数値は、 8bit で表され、上位 4bit がバックグラウンドカラーで、下
+     位 4bit がフォアグラウンドカラーです。
+       各 bit は、下位 bit から B(1)G(2)R(4)+Intensity(8) になっていま
+     す。
+       設定したら忘れずに、 _vimrc ファイルに保存しておいてください。
+ 
+   15.7  MS-DOS/WIN-32(console mode) の直接画面制御を使用する際の注意点
+ 
+       MS-DOS で BIOS(DOS/V)/VRAM(PC98) を直接使用する場合や、 WIN-32
+     での Console-API を使用する場合には、 builtin_termcap を使用して
+     14.5 で示した色のエントリ (t_so/t_ti/t_tb) 以外は変更しないでくだ
+     さい。
+       builtin_termcap のエスケープシーケンスを解釈して、直接 BIOS 等を
+     呼び出す為、エントリが変更されると動作しなくなります。
+ 
+   15.8  改行コードの変更
+ 
+       オプション textmode/notextmode で変更できます。 textmode で CR+LF
+     に notextmode で CR のみになります。
+       通常は、 textauto に設定しておくことで、自動判別して動作します。
+       また、 foption の設定によって、 Macintosh の LF のみのファイルに
+     も対応します。
+ 
+   15.9  複数の buffer (window) を開く
+ 
+       コマンドモードで、 CTRL-W + CTRL-N とするか、コロンモードで
+     :split や :new とする事で新しいウインドウを開きます。
+ 
+   15.10 テキストの整形
+ 
+       textwidth か wrapmargin オプションを設定しておくと、禁則処理を行
+     うテキスト入力ができます。
+       また、コマンドモードで Q コマンドを入力するとテキストの整形を行
+     います。
+ 
+   15.11 PC 版でのコマンドモードの動作
+ 
+       PC 版 (MS-DOS/WIN-32) のコマンドモードでは、 UNIX に似た環境変数
+     のサポートとファイル名の正規表現のサポートがされています。
+       例えば、
+             $LIB/[a-z]*.h
+             ~/filename.txt
+     などという様な指定が可能です。但し、 ~ によるアクセスは環境変数の
+     HOME が定義されている場合に可能です。
+ 
+   15.12 ビジュアルモード
+ 
+       テキストの一部を選択してから、コマンドを入力する事ができます。
+       'v' や 'V' でビジュアルモードの始めを指定し、カーソルを移動させ
+     れば、ビジュアルモードの対象範囲が拡大されます。
+       範囲を指定した後に、 'd' (削除) 'c' (変更) などを指定できます。
+       指定できるコマンドなどの詳しい内容は、 difference.doc を参照して
+     ください。
+ 
+   15.13 HELP ファイルが文字化けする
+ 
+       HELP ファイルは、お使いのディスプレイ出力コードに合わせてくださ
+     い。
+ 
+   15.14 複数のファイルから特定のファイルを指定して編集する (ALL)
+ 
+       vim * などとして、複数のファイルを編集している場合に、目的のファ
+     イルを開くには以下のようにします。
+       :buffers として、ファイル名の一覧を表示します。この時点で、目的
+     のファイルの番号を記憶しておきます。
+       :buffer NN として（ここで NN は buffers で表示された番号）、目的
+     のファイルを開きます。
+ 
+   15.15 grep 機能 (ALL)
+ 
+       正規表現を組み合わせて、複数行を検索できるようになります。
+       検索対象とする行数を指定する事で、複数行に跨った検索パターンを指
+     定できます。
+       検索の指定は、 &&  &&~  ||  の 3 パターンで、最後に l + 行数とい
+     う指定になります。
+           /pat_A/&&/pat_B/l10
+                     (10 行以内に、 pat_A と pat_B を含む)
+           /pat_A/||/pat_B/l
+                     (1 行内に、 pat_A か pat_B を含む)
+           /pat_A/&&~/pat_B/l1
+                     (1 行内に、 pat_A を含み pat_B を含まない)
+       検索速度に影響しますので、検索行数の設定には注意してください。
+       また、 W オプションを追加すると、 buffer list の順番に従い、指定
+     された search を行うようになります。
+       例えば、 a b c の 3 つが buffer list にある状態で、 a ファイルの
+     位置で pattern を検索した場合には、 pattern が見つかるまで a b c
+     の順にファイルを検索します。
+       例えば、
+           /pat_A/&&/pat_B/l10W
+           /pat_A/W
+     とすると、 10 行以内に pat_A と pat_B を含む箇所や、 pat_A を全て
+     のファイルに渡って検索します。
+ 
+   15.16 ONEW/canna の表示について (UNIX,ONEW/canna)
+ 
+       ONEW/canna は、 underline が使用できる場合には fence で表示する
+     のではなく、 underline を使用して表示します。
+       underline が使用できるかは、 termcap エントリに us/ue エントリが
+     存在するかで判定してます。
+       underline ではなく、 reverse で表示したい場合などには、 highlight
+     エントリの f と F が使用しているエントリですので、このパラメータを
+     変更してください。
+ 
+   15.17 複数コードが混ざったファイルの編集
+ 
+       文字化けしている行を V コマンドなどで範囲指定をし、 !nkf (nkf は、
+     漢字コード変換の為のフィルタコマンドです。適宜お使いのものに変えて
+     ください）などとすれば置き換わります。
+       # uuencode と base64 は、 V で行範囲を指定してから !uudecode な
+       # どとすれば同様に処理できます。
+ 
+       コードの使用している範囲から、SJIS と EUC が混ざったファイルを編
+     集する際には、基本的には SJIS で読み込まないと、上記の様に外部コマ
+     ンドの呼び出しでの再変換はうまく行かない可能性が高いです。
+ 
+   15.18 _vimrc の簡単な定義例
+ 
+       _vimrc の簡単な定義例を、私の場合を例にして説明します。
+       環境変数の HOME と TMP は、あらかじめ autoexec.bat(Windows 95)
+     もしくはコントロールパネル (Windows NT) で定義してあります。
+       また、 unlha32.dll がインストールしてあり、 AL-Mail をメーラとし
+     て使用しています。
+       ここでは、 HOME ディレクトリに置いてある、 _vimrc ファイルと
+     _vimrc.alm を例にします。
+       つまり、通常の .c/.txt/.doc など .alm 以外では _vimrc が使用され、
+     AL-Mail のファイルを編集する時には _vimrc.alm が使われます。
+ 
+ ===============================================================================
+ $HOME/_vimrc の定義例
+ -------------------------------------------------------------------------------
+ "Sample of _vimrc file
+ " _vimrc では、デフォルトの定義を行います。 fexrc を使用するので、他の
+ " _vimrc.??? で使用しているオプションも定義しておきます。
+ " コメントは " で始まります。また、 \ そのものを入力するには \\ と記述します。
+ set   autoindent                   " auto indent を使用
+ set nobackup                       " .bak ファイルは通常作らない
+ set   backupdir=>$TMP\\backup.lzh: " backup を作る時には LHA ファイルに
+                                    " これで、 set backup すればこの LHA ファ
+                                    " イルにバックアップファイルが作られます
+ set   cmdheight=1                  " : 行は 1 行
+ set   directory=>d:\\tmp           " > で、始めているとファイルと同じ所には
+                                    " .swp を作らずに指定した所 (d:\tmp) に作る
+ set noerrorbells                   " 煩いのでベルは最小限
+ set noexpandtab                    " TAB は TAB のまま
+ set   fepctrl                      " コマンドモードに戻る時には IME を OFF
+ set   fexrc                        " ファイルの拡張子に合わせて _vimrc を読む
+ set   fepkey=\\                    " IME の ON/OFF は Ctrl-\ で行う
+ set   fepkeys=/?                   " /? でのサーチの時にも fepctrl を有効
+ set nojkanaconv                    " 半角カナを使用可能にする
+ set   modeline                     " modeline を有効にする。このファイルの最
+                                    " 後に記述してある定義の様に、ファイルに記
+                                    " 述した定義を読み込んで使用します
+ set notextauto                     " CR-LF の自動判断を OFF にする
+ set   shiftwidth=4                 " ^D/^T でのシフト幅を 4 文字にする
+ set   tabstop=4                    " TAB は 4 文字単位
+ set   tags=tags\ c:\\devstudio\\vc\\include\\tags " tag ファイルを複数使う時
+                                    " には "\ " としてスペースで区切る
+ set   textmode                     " CR+LF ファイルを指定
+ set   textwidth=0                  " 禁則処理 OFF
+ set   whichwrap=11                 " 左右のカーソルキーでは行を跨って移動
+ set   wildchar=9                   " コマンド行の補完キーを TAB<0x9> に
+ set   window=80,25                 " Window サイズを 80x25 にする
+ map   ^X     gX                    " Windows 標準になるように ^X ^C ^V を割り
+ map   ^C     gC                    " 当て。 ^X などは、 CTRL-V を入力した後に
+ imap  ^V^V ^OgV                    " 該当するコントロールキーを入力
+ "End of Sample
+ -------------------------------------------------------------------------------
+ 
+ ===============================================================================
+ $HOME/_vimrc.alm の定義例
+ -------------------------------------------------------------------------------
+ "Sample of _vimrc.alm file
+ " _vimrc.alm では、私が普段使用しているメーラの AL-Mail で編集に使用する際の
+ " 定義を記述しています。
+ " 基本的には、 _vimrc をコピーして変更のある部分だけを変えるのがいいです。
+ set cmdheight=2       " AL-Mail のディレクトリが深いので、 :w で一々リターン
+                       " キーを押さなくていいようにコマンド行を 2 行に
+ set expandtab         " TAB は、 SPACE に置き換える
+ set jkanaconv         " 半角カナ禁止。全角カナに置き換える
+ set shiftwidth=2      " 編集中の ^D/^T で 2 文字ずつシフト
+ set tabstop=8         " TAB 幅は 8 文字
+ set textwidth=60      " 禁則処理を使用する。禁則の桁数は 60 文字
+ "End of Smaple
+ -------------------------------------------------------------------------------
+ 
+   15.19 mh のエディタに jvim を使用すると、 ^Z でサスペンド後 fg で編
+         集が続行できない                          kawashima@iname.com
+ 
+       mh のエディタとして jvim 1.3 を使用している場合、 comp でメイル
+     を書いている途中で ^Z でサスペンド状態にし、fg でもとに戻すとエラー
+     メッセージが出て、編集の続行ができなくなります。
+       これは、/usr/local/bin/csh-jvim というファイルを
+               #! /bin/csh -f
+               /usr/local/bin/jvim $*
+     というシェルスクリプトとして作成し、 .mh_profile を
+               Editor: /usr/local/bin/csh-jvim
+     とすることで、回避する事ができます。
+ 
+   15.20 binary モードの変更について
+ 
+       JVim では、内部で日本語 (正確には SJIS で) 処理をしている為に、
+     オリジナルの Vim の様な形で binary モードがサポートできませんでし
+     た。
+       そこで、 binary が指定された場合には、 16 進ダンプの形で読み込み
+     と書き込みをする様になっています。
+       読み込みに関しては、下記の様な形になります。
+ 
+ 00000000: 4d5a 9000 0300 0000 0400 0000 ffff 0000 ;MZ%%%%%%%%%%%%%%
+ 00000010: b800 0000 0000 0000 4000 0000 0000 0000 ;8%%%%%%%@%%%%%%%
+ 
+       書き込み時ですが、以下の様になります。
+ 
+         o : から ; までが、書き込む際の変換対象になります。
+ 
+          |<------------------------------------->|
+ 00000010: b800 0000 0000 0000 4000 0000 0000 0000 ;8%%%%%%%@%%%%%%%
+ 
+         o 16 進数で記述します。
+         o 空白かタブで区切るか、 16 進数 2 桁で 1 バイトになります。
+ 
+             b800    =>   0xb8,0x00
+             b8 0 0  =>   0xb8,0x00,0x00
+             b80     =>   0xb8,0x00
+ 
+         o ; から後ろには、 jcode で選択したコードに合わせて変換した文
+           字が表示されます。
+           但し、 JIS コードを指定した場合には、変換しません。
+         o " で括った範囲は、その文字を jcode で指定した文字に変換して、
+           そのまま書きこみます。但し、 JIS コードを指定した場合には、
+           変換しません。
+ 
+   15.21 FEP/IME の自動起動を使用しない
+ 
+       FEP を自動で起動されると使いづらい場合には、 jinsertmode を A も
+     しくは J としてください。
+       # A で FEP/IME は OFF 状態で、 J で ON 状態で起動します。
+       この場合、 jiauto の値は 0 としてください。 jinsertmode は、
+     jiauto の値が 0 以外の場合には入力された文字数で FEP/IME の OFF/ON
+     を変更しますが、 0 の場合には入力開始時の FEP/IME のモードを固定し
+     ます。
+ 
+ 
+ 16. おまけのプログラム
+ 
+   16.1  grep - 日本語対応 grep
+ 
+       grep [-[[ABL] ]<num>] [-[CVcijlnqsvwx]] [-K <code>] [-[efE]] <expr> [<files...>]
+ 
+       日本語に対応した grep コマンドです。
+       標準の grep に比べて、以下の拡張がされています。
+ 
+       o アーカイブファイル内のファイル検索が可能 (WIN-32)
+         14.20 LHA/gzip/compress/TAR ファイルの編集を参照してください。
+       o 正規表現を組み合わせて、複数行のを検索が可能
+         14.23 grep 機能を参照してください。
+       
+       オプションには、以下のものがあります。
+ 
+       == 標準 (GNU grep 2.0) 互換のオプション ==
+       -A<num>     一致した前 num 行を表示します
+       -B<num>     一致した後 num 行を表示します
+       -C          一致した前後 2 行を表示します
+       -V          バージョンを表示します
+       -c          一致した行数を表示します
+       -f<file>    file から正規表現を読み込みます
+       -i          大文字と小文字の区別をしません
+       -l          ファイル名のみを表示します
+       -n          行番号を出力します
+       -q          エラーメッセージを出力しません
+       -s          メッセージを出力しません
+       -v          一致しない行を出力します
+       -w          expr を単語として検索します
+       -x          expr と一致する行を表示します
+ 
+       == 独自拡張のオプション ==
+       -j          日本語あいまい検索（ 6.16 jignorecase を参照してくだ
+                   さい）を使用します
+       -e<expr>    先行する正規表現と or  条件の正規表現を指定します
+       -E<expr>    先行する正規表現と and 条件の正規表現を指定します
+       -L<num>     検索する範囲の行数を指定します。
+             -e -E -L に関しては、14.23 grep 機能を参考にしてください。
+             -e と -E は、最初の物に関しては or/and の区別はしません。
+       -K<code>    使用する日本語コードを jmask （ 6.7 jmask を参照して
+                   ください）と同様に設定できます。
+                   但し、最初の「キー入力」は、ファイルからの読み取りの
+                   日本語コードの設定になります。この部分については、
+                   jcode （ 6.3 jcode を参照してください）と同様に設定
+                   できます。       ex: -K sEE      ex: -K JSE
+                   また、「システムコード」は、引数の日本語コードの設定
+                   になります。
+ 
+       行番号を指定した出力を、 grep jump （ 7.7 gg を参照してください）
+     で使用する事によって目的の行に簡単に移動する事ができます。 
+ 
+   16.2  vim32s - ラウンチャ
+ 
+       SendTo では -no オプションが定義できないので、任意のアプリケーショ
+     ンを引数付きで起動するラウンチャです。
+       vim32s.exe と同じディレクトリにある、 vim32s.ini ファイルの内容に
+     従って、対象となるファイルの内容で起動するアプリケーションを指定し
+     て起動する事ができます。
+       設定方法などは、 vim32s.ini に記述してありますので、こちらを参照
+     してください。
+ 
+   16.3  clip - クリップボードへの出力
+ 
+       クリップボードへ、標準入力の内容をコピーします。
+       オプションには、以下のものがあります。
+ 
+       -e<num>     タブを展開します
+       -p          入力を標準出力にも出力します
+       -x command  コマンドを実行して、その出力をクリップボードへコピー
+                   します
+       -V          バージョンを表示します
+ 
+       type text.txt | clip などの様に、パイプコマンドとして使用してく
+     ださい。
+ 
+ 
+ 17. vim-jp ML
+ 
+   　ものぐさな作者に代わって、堺一広(ka-sakai@ga2.so-net.ne.jp)さんが、
+   森村輝幸(imorimura@debian.or.jp)さんにサーバを提供頂き、 vim のメー
+   リングリストを開設してくださいました。
+     また、開設のアナウンスは、宮澤綾子(t92451am@sfc.keio.ac.jp)さんが
+   してくださいました。
+     質問などは、こちらの ML でなされると、素早い回答が得られるのではな
+   いかと思います。
+     メーリングリストへの参加方法などは、 vim-jp.htm 及び fj.txt ファイ
+   ルを参照してください。
+ 
+ 
+ 18. 謝辞
+ 
+     Vim の日本語化にあたり、以下の方のご協力を頂きました。
+     この場を借りて、感謝いたします。
+ 
+     特に、ものぐさな作者に代わり vim-jp ML を開設して頂いた、堺一広さ
+   んと ML サーバを提供して頂いた 森村輝幸さん、 fj への投稿をして頂い
+   た、宮澤綾子さんにここでお礼を申し上げます。
+ 
+     敬称は略させて頂きました。
+ 
+         tantan           sgl00213@niftyserve.or.jp
+         せにょ〜る       senyol@pb3.so-net.ne.jp
+         とよふく         unbound@papaya.juice.or.jp
+         阿部  康一       kouichi@etn.yz.yamagata-u.ac.jp
+         安藤  勝敏       Katsutoshi_Ando@justsystem.co.jp
+         河野  康司       kohno@nikongw.nikon.co.jp
+         吉山あきら       yosshy@debian.or.jp
+         吉田  正人       yoshidam@yoshidam.net
+         宮下   尚        himi@bird.scphys.kyoto-u.ac.jp
+         宮澤  綾子       t92451am@sfc.keio.ac.jp
+         鯉江  英隆       koie@suri.co.jp
+         高原  和徳       kaz_t@yk.rim.or.jp
+         高田   勝        takada@cced.mt.nec.co.jp
+         堺    一広       ka-sakai@ga2.so-net.ne.jp
+         山田  直弘       y626@msn.com
+         小笠原博之       oga@dgw.yz.yamagata-u.ac.jp
+         小島   肇        kjm@rins.ryukoku.ac.jp
+         新地  隆治       shinchir@soft.hitachi.co.jp
+         森村  輝幸       imorimura@debian.or.jp
+         秦    裕治       ---------------------------
+         西村  英章       nishimu@sdd.siznes.nec.co.jp
+         青木  雅人       aps-00@ceres.dti.ne.jp
+         川戸  勝史       kawato@ksp.nis.nec.co.jp
+         川島  浩         kawashima@iname.com
+         川藤  光裕       kawafuji@anritsu.co.jp
+         村山  文孝       umura@nn.solan.chubu.ac.jp
+         太田   純        ohta@src.ricoh.co.jp
+         中村  敦司       ann@mrit.mei.co.jp
+         朝木  卓見       asaki@mmip.tutics.tut.ac.jp
+         長尾  嘉也       ---------------------------
+         田島  喜晴       ytajima@flab.fujitsu.co.jp
+         渡辺  博文       watanabe@jis.ptg.sony.co.jp
+         渡邉  友範       tom_w@ta2.so-net.ne.jp
+         飯塚   徹        t-iizuka@ca2.so-net.ne.jp
+         樋口  泰志       yzone@mail.raidway.ne.jp
+         武石  尊之       takeishi@arch.comp.kyutech.ac.jp
+         木原  英人       deton@m1.interq.or.jp
+ 
+ 
+ 19. 変更歴
+ 
+     JVim3.0-j2.0 (2000/01/01)
+ 
+       o BDF フォント使用時に、スクロールバーでの移動が遅いのを修正 (WIN-GUI)
+       o メニュー表記の修正 (WIN-GUI)
+       o メニューに Save と Save As を追加した (WIN-GUI)
+       o 新規ファイルの修正を undo した後に、 :bdelete すると JVim が落
+         ちるのを修正 (ALL)
+       o 下カーソル移動で、突然 paste される場合があるのを修正 (WIN-GUI)
+       o VC++ 5.0 + SP3 でコンパイルすると、 tag jump が無限ループする
+         のを修正 (WIN-32)
+       o Windows 98 で Foreground Window にならなかった場合には、アイコ
+         ン化した後に表示する事で Foreground にする様にした (WIN-GUI)
+       o ドラッグ＆ドロップで、 C:\WIDNOWS\デスクトップ\サポートカード 3.3.txt
+         が読み込めない不具合の修正 (WIN-GUI)
+       o tag ファイルで LSIZE 文字以上の行があった場合には、エラーでは
+         無く読み飛ばすようにした (ALL)
+ 
+     JVim3.0-j1.8 (1999/12/04)
+ 
+       o wrap モードで、画面に表示されていない行がある場合に、スクロー
+         ルバーが disable になる場合があるのを修正 (WIN-GUI)
+       o UNIX で UTF-8 出力を行うと core を吐くのを修正 (UTF-8)
+       o ファイルを開ききる前に Config を変更するとアプリケーションエラー
+         になるのを修正 (WIN-GUI)
+       o キーコードを EUC 入力とした時に、 fepkey=@ が動作しなくなる不
+         具合の修正 (ALL)
+       o Turbo C++ 5.01J for Windows で vim32.rc がコンパイルエラーにな
+         るのを修正 (WIN-32)
+       o BDF フォントを使う設定で、 BDF FONT Setup ダイアログを出してキャ
+         ンセルボタンを押すと、ウィンドウ内に表示されたダイアログの表示
+         がクリアされない不具合の修正 (WIN-GUI)
+       o ファイル名が常にフル・パスで表示される不具合の修正 (ALL)
+       o F1 キーを二回押すと、ヘルプメッセージが消えるのを修正 (WIN-GUI)
+       o :sh が Segmentation fault で落ちる不具合の修正 (ALL)
+       o tags ファイルの構成がおかしい時にタグジャンプを行うと、
+         Segmentation faultで落ちる不具合の修正 (ALL)
+       o 日本語と特殊文字 (空白や $) が一緒にあるファイルを Drag & Drop
+         すると一般保護例外になる不具合の修正 (WIN-GUI)
+       o 全角空白が前後にある場合にも、クリッカブル URL が動作する様に
+         した(WIN-GUI)
+       o クリップボード用にバッファ文字 @ を割り当てた (WIN-GUI)
+       o BDF フォントを使う設定で、マウスによる範囲指定を行うと画面を再
+         描画しながら動作するのを修正 (WIN-GUI)
+       o UTF-8 の判定を、吉田(yoshidam@yoshidam.net) さんの方式とのミッ
+         クスにした (ALL)
+       o 起動時に、ファイル名が表示されないのを修正した (WIN-GUI)
+       o BDF フォント使用時の高速化 (WIN-GUI)
+       o 領域選択状態でクリップボードの内容を Put した場合には、選択範
+         囲をクリップボードの内容で置き換える様にした (WIN-GUI)
+ 
+     JVim3.0-j1.7a (1999/10/13)
+ 
+       o SUNOS 4.1.4-JL でコンパイルエラーになるのを修正 (UNIX)
+       o EUC で、箱が行末にあると UTF-8 と判定するのを修正 (ALL)
+       o Turbo C++ for Windows のコンパイルエラーを修正 (WIN-GUI)
+       o grep の、メモリバッファ境界を跨る検索が行えない不良の修正 (ALL)
+       o keywordprg に日本語を渡す際に、システムコードに変換しない不具
+         合の修正 (ALL)
+       o ダイヤログ表示の見直し (WIN-GUI)
+       o Wave / Bitmap / BDF に、 Preview を追加 (WIN-GUI)
+       o CAB / ZIP ファイルのサポート (WIN-32)
+       o コマンドモード以外で、メニューの Edit が動作しないのを修正 (WIN-GUI)
+       o option の機能のうち、ファイル単位に指定するものを foption とし
+         た (ALL)
+       o バイナリファイルを EUC と判定した時に、落ちてしまうのを修正し
+         た (ALL)
+       o スクロールバー描画の見直しによる、更なる高速化 (WIN-GUI)
+       o UNIX でも、日本語ファイル名を扱えるようにした (UNIX)
+       o BDF フォントでスクロール・アップが異常に遅いのを修正した (WIN-GUI)
+ 
+     JVim3.0-j1.7 (1999/08/24)
+ 
+       o スマートコマンドヒストリの追加 (ALL)
+       o アイコン状態からのクローズの追加 (WIN-GUI)
+       o clip コマンドに、コマンド実行を追加した (clip)
+       o ステータスバーの Drag で分割した Window のサイズが変更できるよ
+         うにした (WIN-GUI)
+       o binary モードで、 16 進ダンプ表示となるようにした (ALL)
+         # option を設定する事で、オリジナルの binary モードになります
+       o makjdos.mak の不具合の修正 (DOS)
+       o USE_X11 していない時には、終了時に Window タイトルを terminal
+         名に変更するようにした (X11)
+       o メニューの ON/OFF を可能にした (WIN-GUI)
+       o アクセラレータキーを使用可能にした (WIN-GUI)
+       o ALT キーの入力制御を行う様にした (WIN-GUI)
+       o 初期設定ファイルを読み込む際には、 Loading のダイヤログを表示
+         する様にした (WIN-GUI)
+       o linepersec オプションの削除 (WIN-GUI)
+       o onewin オプションの削除 (WIN-GUI)
+       o UTF-8 をサポートした (ALL)
+       o GUI 系オプションの変更で、画面を小さくした時にエラーとなる場合
+         があるのを修正した (WIN-GUI)
+       o 画面表示の更なる高速化を図った (WIN-GUI)
+       o V コマンドの Yank で、行頭にカーソルが移動するようにした (ALL)
+       o CTRL-C での Yank で、カーソルが戻らないようにした (WIN-GUI)
+       o IME-2000 で、 jk コマンドでの移動の様に、キーリピートが続くと
+         一時的にハングアップ状態になるのを (仮) 対策した (WIN-GUI)
+       o オプションコードの変更
+ 
+     JVim3.0-j1.5b (1999/06/06)
+ 
+       o ホイール・スクロール量を求めるようにした (WIN-GUI)
+       o キーピートのキャンセル処理を追加した (WIN-GUI)
+       o MIME ファイルの処理の不具合を修正した (ALL)
+       o メニューに新規 Window の作成を追加した (WIN-GUI)
+       o [予.txt が開けない不具合の修正 (WIN-32)
+       o BSD 系 OS で、 tputs() を使用しない不具合の修正 (UNIX)
+ 
+     JVim3.0-j1.5a (1999/05/05)
+ 
+       o Window のサイズ変更で一般保護例外となる不具合の修正 (WIN-GUI)
+       o ini ファイルで、パラメータ指定ができるようにした (WIN-GUI)
+         # 14.36 を参照してください
+       o tag ファイルの close 漏れの修正 (ALL)
+       o fepkeys に、 /? を設定している際に fep の状態をリセットしてし
+         まう不具合の修正 (ALL)
+       o fepkey に、 [ を設定している際に : モードから ESC でコマンドモー
+         ドに戻らない不具合の修正 (WIN-GUI)
+       o UNIX の罫線モードで coredump する不具合の修正 (UNIX)
+       o canna で、未確定文字列を BS で全消去するとカーソルが正しい位置
+         にならない不具合の修正 (canna)
+       o Tera Term などの VT100 モード画面制御がおかしくなる不具合の修
+         正 (Debian/linux)
+       o Windows 98 での、ホイール・スクロールの修正 (WIN-GUI)
+ 
+     JVim3.0-j1.5  (1999/02/14)
+ 
+       そろそろ、修正も一息つくだろうという事で、 Revision Up にしまし
+       た。
+ 
+       o WIN-NT で、画面の上端からはみだす状態にして、ウィンドウの位置
+         を Save Config してから、使用した Config を選ぶと Window が消
+         える不具合の修正 (WIN-GUI)
+       o 英語版 Windows でも、日本語 TT Font を使える様にした (WIN-GUI)
+ 
+     JVim3.0-j1.3k (1999/01/17)
+ 
+       o * で、半角カナの word search ができない不具合の修正 (ALL)
+       o ホイールでのスクロールの方向が逆になる場合があったのを修正した
+         つもり (WIN-GUI)
+       o Cygwin の telnet/X から使用した場合、ウィンドウをリサイズする
+         と終了してしまうのに対処 (Cygwin)
+       o :q でなく、ウインドウクローズでプロセスが残る不具合の修正 (WIN-GUI)
+ 
+     JVim3.0-j1.3j (1999/01/01)
+ 
+       o makjnt.mak を修正 (WIN-32)
+       o スクロールバーの表示を変更 (WIN-GUI)
+       o カーソル非表示モードを使用していて、 insert モード中に右クリッ
+         クでカーソルが表示されない不具合の修正 (WIN-GUI)
+       o put の際に、コマンドモードの場合には一度 insert モードに遷移す
+         るようにした (WIN-GUI)
+       o 樋口@raidway さんの Cygwin へのパッチを取り込み (Cygwin)
+       o nojignorecase だと /[0-9] や /[a-c] といった文字の範囲指定が動
+         作しない不具合の修正 (ALL)
+       o 80x65 等の大きな画面で vim を起動した時、画面の 4/5 程度の場所
+         で文字化けすることがある不具合の修正 (ALL)
+       o MSDOS 系の HOME 環境変数の参照では、大文字・小文字の区別をしな
+         いようにした (MSDOS)
+ 
+     JVim3.0-j1.3i (1998/11/04)
+ 
+       o linux で、"Unable to open swap file, recovery impossible" にな
+         るのを修正 (linux)
+       o canna で、再描画が非常に多いのを修正 (canna)
+ 
+     JVim3.0-j1.3h (1998/10/30)
+ 
+       vim-jp ML で、木原 英人さんと川藤  光裕さんが公開された不具合修
+       正パッチの吸収
+ 
+       o grep が、 NT 以外でコンパイルエラーになるのを修正 (ALL)
+       o UNIX で、 make のみで grep しか作成されないのを修正 (UNIX)
+       o X11 の include ディレクトリの定義を追加 (UNIX-X11)
+       o Onew で、未初期化変数を使っているのを修正 (Onew)
+       o TURBO C++ で、 Dialog 関数が Warning になるのを修正 (WIN-GUI)
+       o MFC 用の include ファイルを使っていたのを修正 (WIN-GUI)
+       o Debian でのコンパイルエラーの修正 (Debian)
+ 
+     JVim3.0-j1.3g (1998/10/13)
+ 
+       o -no オプションが動作しなくなった不具合の修正 (WIN-GUI)
+       o -no オプションを onewin として解除できるようにした (WIN-GUI)
+       o SendTo ラウンチャに、プロセス終了待ちとシフトキー押下判定を追
+         加 (WIN-32)
+       o SendTo ラウンチャに渡される引数が、 " で括られていた場合の処理
+         を追加 (WIN-32)
+       o jmask の設定を、 -K オプション / .vimrc / LANG 環境変数 /
+         JP_DEF の順にした (ALL)
+       o Windows GUI の場合には、 IMM32 を使用した IME 制御をする様にし
+         た (WIN-32)
+       o 正規表現の range で、漢字の範囲チェックを変更して、 [亜-個] な
+         どの指定ができるようにした (ALL)
+       o SJIS コード出力の際の不具合の修正 (ALL)
+       o BDF フォント使用時に、存在しない漢字コードがあると、その文字以
+         降を表示しなくなる不具合の修正 (WIN-GUI)
+       o USE_EXFILE を指定しないとリンクエラーでコンパイルできない不具
+         合の修正 (WIN-32)
+       o Darren Hiebert氏の Exuberant Ctags 2.3.1 で作成した tag ファイ
+         ルで tag jump ができない不具合の修正 (ALL)
+       o Insert Mode で Drag & Drop された場合には、ファイル名を入力し
+         たものとして扱うようにした (WIN-GUI)
+       o FreeBSD 3.0 Beta で Warning がでるのを修正 (FreeBSD)
+       o jc=X で、ファイルを開くとエラーになる不具合の修正 (ALL)
+       o Onew のステータスラインの再描画オプションの追加 (ONEW)
+       o Onew で、確定文字が無い時に ESC キーを入力すると、ゴミが出力さ
+         れるのを修正 (Onew)
+ 
+     JVim3.0-j1.3f (1998/05/27)
+ 
+       o lines/columns の set で、ウインドウサイズを変更 (WIN-32)
+       o window パラメータを正しく表示する様にした (WIN-32)
+ 
+     JVim3.0-j1.3e (1998/05/17)
+ 
+       o WINDOWS NT で \[\].txt を開こうとすると、一般保護違反になる不
+         具合の修正 (WIN-32)
+       o vim32s.exe を、汎用ラウンチャに変更 (WIN-32)
+ 
+     JVim3.0-j1.3d (1998/04/21)
+ 
+       o Config で、画面の行数が増えても、 region が増えずに使用できる
+         行数が変わらない不具合の修正 (WIN-GUI)
+       o ONEW が必ず fence mode になる (ONEW/canna)
+       o tags ファイルのサーチ文字が / で終わっているとサーチできない不
+         具合の修正 (ALL)
+       o /pattern/i/+2 などで、正しく行が進まない不具合の修正 (ALL)
+       o Screen Size と Screen Buffer Size が異なる時に、正しく表示でき
+         ない不具合の修正 (WIN-CON)
+       o Extend File System に .bz2 拡張子を判断するように追加 (WIN-32)
+       o 半角カナに相当するコードが連続していない場合には、 euc のコー
+         ドと判定する様にした (ALL)
+       o コード変換で最後の文字を漢字の 1st byte と判断した後に、 2nd
+         byte が無いにも関わらず処理を続行していた不具合の修正 (ALL)
+ 
+     JVim3.0-j1.3c (1998/04/04)
+ 
+       o 編集サブメニューの並びを変更 (WIN-GUI)
+       o ペースト時、クリップボードが空の場合に動作がおかしくなる不具合
+         の修正 (WIN-GUI)
+       o クリップボードから数百 K バイト以上の入力を行った場合に、一時
+         的にハングアップした様に見えるのを修正 (WIN-GUI)
+       o ペースト時には、画面表示を間引きして出力する様にした (WIN-GUI)
+       o bitmap 表示をオリジナルの縦横比を保持して中央に出力するように
+         した (WIN-GUI)
+       o WINDOWS NT で "[{#%" を含んだファイルを開こうとすると、一般保
+         護違反になる不具合の修正 (WIN-32)
+       o Drag&Drop で、ファイルが正しく開けない不具合の修正 (WIN-GUI)
+       o BDF FONT のサポート (WIN-GUI)
+       o scrollbar / bitmap / sound オプションをシステムメニューに変更
+         した (WIN-GUI)
+       o GUI 系のオプションをシステムメニューで切り替えられるように変更
+         した (WIN-GUI)
+       o fj.editor.misc で、「使い物にならない」とまで言われた、漢字コー
+         ドの自動判定の修正 (ALL)
+       o vim-jp ML の紹介 page の vim-jp.htm を追加 (ALL)
+       o vim-jp ML の紹介記事の fj.txt を追加 (ALL)
+       o フォントカラーをバックグランドカラーと同じように設定可能にした (WIN-GUI)
+ 
+     JVim3.0-j1.3b (1998/03/14)
+ 
+       o アーカイブに入れ忘れた vim32s.exe を入れた (WIN-GUI)
+       o スクロールバーで 1000 行以下のファイルをスクロールダウンすると、
+         いきなり行が先頭行に戻る不具合の修正 (WIN-32)
+       o WINDOWS GUI バージョンでは、 fepctrl をデフォルトで設定するよ
+         うにした (WIN-GUI)
+       o grep.exe に、せにょ〜るさんの icon データを設定した (WIN-NT)
+       o 右クリックでのポップアップメニューの位置を調整した (WIN-GUI)
+       o 右クリックでのポップアップメニューを Word と同じ順番にした (WIN-GUI)
+       o bitmap オプションで、背景を設定できるようにした (WIN-GUI)
+       o sound オプションで、ビープ音を設定できるようにした (WIN-GUI)
+       o 外部プリントアウトツールの呼び出しをサポート (WIN-GUI)
+       o _jvimrc が存在する場合には、 _vimrc より優先して使用するように
+         した (ALL)
+ 
+     JVim3.0-j1.3a (1998/02/14)
+ 
+       o vim32 /tmp/*.lzh:*/* などの様に、アーカイブファイル内でディレ
+         クトリを跨ってワイルドカードを指定した際に、動作しない不具合の
+         修正 (WIN-32)
+       o noscrollbar を指定していると、終了／起動でどんどんウインドウサ
+         イズが小さくなる不具合の修正 (WIN-GUI)
+       o アーカイブファイル内の検索ができる grep を追加した
+       o buffer を複数表示している場合には、 fexrc で読み取った _vimrc
+         ファイルに window サイズが指定されていても無視する様にした (WIN-32)
+       o スクロールスピードの更なる向上 (WIN-GUI)
+         バージョン 1.3 に比較して 200% 以上の性能向上
+         特に、 TT フォントを使用した場合の根本的な速度向上
+       o linepersec オプションの追加 (WIN-GUI)
+       o 起動時のウインドウサイズチェックの追加 (WIN-GUI)
+       o script ファイルの出力が出来ない不具合の修正 (WIN-32)
+       o ディレクトリ名の部分を、全て小文字にしてしまう不具合の修正 (WIN-32)
+       o 8+3 形式でない CD-ROM のファイルを、エクスプローラから送るで
+         扱える様に、 alias 名を展開して LFN にする様にした (WIN-32)
+       o アーカイブファイル名が指定された場合には、自動的にアーカイブ内
+         の全てのファイルが指定されたものとして扱う様にした (WIN-32)
+       o -no オプションを追加 (WIN-32)
+       o SendTo では -no オプションが定義できないので、 vim32.exe を
+         -no オプション付きで起動するラウンチャの vim32s.exe を追加
+       o 空白を含んだアーカイブファイル名を扱える様にした (WIN-32)
+ 
+     JVim3.0-j1.3  (1997/12/24)
+ 
+         LHA アーカイブや ftp 経由のファイル編集。性能向上など。細かな
+       不具合の修正。
+ 
+       o 画面表示の高速化 (約 20%) (WIN-GUI)
+       o LHA アーカイブ内のファイルを編集する機能を追加 (WIN-32)
+       o FTP 経由でファイルを編集する機能を追加 (WIN-32)
+       o tar32.dll を使用した tar/gzip/compress ファイルのサポート (WIN-32)
+       o 正規表現を組み合わせた、複数行を検索をできるようにした (ALL)
+       o IME での入力中に、マウスでカーソル移動すると変換中の文字列が元
+         の位置に残る不具合の修正 (WIN-GUI)
+       o Command mode で無くても、マウスでクリップボードへコピーできる
+         様になった (WIN-GUI)
+       o マウスの動作を大変更した (WIN-GUI)
+       o ALT キー+マウスの動作を追加した (WIN-GUI)
+       o INSERT / REPLACE モードでは、マウスカーソルを表示しないように
+         した (WIN-GUI)
+       o showmatch で、カーソルが対応する位置で停止しているように見えな
+         い不具合の修正 (WIN-GUI)
+       o PASTE メニューを使用した場合には、 autoindent が動作しないよう
+         にした (WIN-GUI)
+       o マウスで矩形範囲指定時に CTRL で Yank すると、指定範囲が yank
+         できない不具合の修正 (WIN-GUI)
+       o CTRL + "左右矢印キー" で Word 単位に移動 (WIN-GUI)
+       o clipboard からの読み込みの際には、半角カナ space (0xa0) を、通
+         常の space (0x20) に変換するようにした (WIN-GUI)
+       o 終了時の Window 位置を記憶するオプションを System Menu に追加
+         (WIN-GUI)
+       o jignorecase を指定した際に、うまく検索できない文字があるのを修
+         正した (ALL)
+       o jignorecase で、 TAB/SPACE/全角空白を同一視するようにした (ALL)
+       o Incomplete last line の際に、漢字コード変換をしない不具合の修正 (ALL)
+       o pipe コマンド実行の際に、自動漢字コード判定を動作させていた不
+         具合の修正 (ALL)
+       o set number している際に、日本語を含んでいる行で wrap 指定の際
+         に、カーソルが表示されなくなる場合がある不具合の修正 (ALL)
+       o set number を指定して、複数行に跨る行でのカーソル移動がおかし
+         くなる不具合の修正 (ALL)
+       o backward で、行末が日本語の場合に動作がおかしい不具合の修正 (ALL)
+       o Q) などの、文章整形処理で textwidth の位置に ASCII単語+スペー
+         ス+日本語の順に書かれていると、 ASCII 単語が分割されてしまう不
+         具合の修正 (ALL)
+       o :e! の場合には、 fexrc を実行しないようにした (ALL)
+       o JIS コードが混じっている SJIS/EUC のファイルの読み込みを可能に
+         した (ALL)
+       o REPLACE モードで、漢字が文字化けする場合があるのを修正 (ALL)
+       o fepkeys の追加 (ALL)
+       o Windows 流の CTRL-X/C/V をそれぞれ gX/gC/gV コマンドに割り当て
+         た (WIN-GUI)
+       o ドラッグによる範囲選択のとき開始カラムから真下にドラッグしても
+         選択されない不具合の修正 (WIN-GUI)
+       o 行単位の選択の際には、クリップボードへコピーする際に改行コード
+         を最終行に入れるようにした (WIN-GUI)
+       o メニューにオープンファイルダイアログを追加した (WIN-GUI)
+       o Windows NT の場合にも、 undo buffer を 16bit にしていたために、
+         out of memory となっていた不具合の修正 (WIN-32)
+       o 範囲選択中に、ファイルをドロップすると、ドロップしたファイルに
+         範囲選択が行われてしまう不具合の修正 (WIN-GUI)
+       o jignorecase を設定して、 \<word>\  正規表現（いわゆる word
+         search ）を使用した場合にマッチしない場合がある不具合を修正 (ALL)
+       o Onew_kanakan() した場合には Onew_KK_freqsave() を呼び出すよう
+         にした (ONEW)
+       o ONEW の status line を反転表示にした (ONEW)
+       o grep -n regexp files の出力からジャンプする gg を追加 (ALL)
+       o canna も、 ONEW と同様に underline で表示できる場合には fence
+         では無く、 underline で表示するようにした (CANNA)
+       o canna の確定の際に、文字が表示されない場合があるのを直した (CANNA)
+       o canna で、コマンド行で変換後に変換前の文字が残ってしまう不具合
+         の修正 (canna)
+       o canna のモード切替えが、 vim の fepkey と同じ場合に fepctrl が
+         正しく動作しない不具合の修正 (canna)
+       o canna で、特殊キーを使えるようにした (canna)
+       o ONEW を ON にした状態で、日本語を paste した際に、文字化けが発
+         生する不具合の修正 (ONEW)
+       o 罫線モードの 98 依存文字を削除した (MS-DOS)
+       o option 4 を削除した (WIN-GUI)
+       o クリッカブル URL の実行を、 CTRL キーを押しながらダブルクリッ
+         クに変更した (WIN-GUI)
+       o ダブルクリックを grep ファイルでのジャンプに変更した (WIN-GUI)
+       o option を設定する事によって、終了せずにタスクトレイに常駐する
+         様にした (WIN-GUI)
+       o :disp で、 . に日本語が含まれていると最後にごみが付く不具合の
+         修正 (ALL)
+       o ONEW で、コマンドモードの時には最上行にメッセージを表示するよ
+         うにした (ONEW)
+ 
+     JVim3.0-j1.2g (1997/09/01)
+ 
+       o pipe を使用した際に、日本語入力できなくなる不具合を修正 (WIN-GUI)
+       o swap file のディレクトリ指定がオリジナルの動作と異なる不具合を
+         修正 (debug 文が残っていた (^^;;; ) (ALL)
+       o フォーカスが他の Window に移った場合に、キーの状態をクリアしな
+         い不具合の修正 (WIN-GUI)
+       o あまりにも、 Windows 版で backupdir サポートの要求が多いので
+         Windows 版で backupdir をサポート (WIN-32)
+       o .vimrc ファイル内の backupdir / directory で、 >$TMP の様な環
+         境変数指定をサポート (UNIX,WIN-32)
+       o コロンモードで日本語が複数行に跨る時の処理をそれなりにした (ALL)
+       o マウスの動作を Windows 標準に近くした (WIN-GUI)
+       o option の設定を追加 (ALL)
+          32:  コロンモードでのファイル名とディレクトリ名の指定
+       o option の設定を変更 (WIN-GUI)
+           4:  マウスを使用しない
+       o _vimrc/.vimrc のどちらでも動作するようにした (WIN-32)
+       o NEC EWS4800 (EWS-UX/V R6.x) 用の定義を makjunix.mak に追加 (UNIX)
+       o canna でエラーが発生した際に、エラーメッセージが正しく表示され
+         ない不具合を修正 (canna)
+       o 行番号指定だった場合に、 tagjump が jump しない不具合の修正
+         (MS-DOS, WIN-32)
+       o Full Path 名になっているかの判定に、 '/' を追加した (WIN-32)
+       o 必要の無いタイミングで、 "Hit Return Key" が要求される不具合の
+         修正 (WIN-GUI)
+ 
+     JVim3.0-j1.2f (1997/08/08)
+ 
+       o メモリ解放抜けの修正 (FEPCTRL/TRACK)
+       o Full Path 名になっているかの判定に UNC を追加した (WIN-32)
+       o :make が動作しない不具合を修正 (WIN-GUI)
+       o quickfix 用に、 VC++ の makeprg と errorformat をコンパイル時
+         に設定する様にした (WIN-32,VC++)
+       o ダブルクリックで、関連付けされた open 動作をするようにした。い
+         わゆる、クリッカブル URL の機能です。 (WIN-GUI)
+       o option の設定で、動作を変更できるようにした (ALL)
+         ビット単位で意味を持ち、下記の様な動作になります。
+           0:  変更無し
+           1:  MAC ファイル (CRが改行文字のファイル) の読み込み
+           4:  左ダブルクリックは、カーソルジャンプ (WIN-GUI)
+           8:  quickfix で、エラー行以外を無視
+       o 日本語を含んだメッセージ出力で、最下行最終文字が日本語の場合に
+         メモリアクセス違反となる不具合の修正 (ALL)
+       o quickfix で、コンパイラの日本語コードを keyboard コードとして
+         いたのを system コードに変更 (ALL)
+       o マルチウィンドウ表示で全角文字が右端に入りきら場合に、 \ が正
+         しく表示されない不具合の修正 (ALL)
+       o 起動時のエラー表示で画面が乱れる不具合の修正 (WIN-GUI)
+       o 2byte 文字と 1byte 文字が連続している場合に tag jump ができな
+         い不具合の修正 (ALL)
+       o 起動時にファイル名や "Empty Buffer" が表示されない不具合の修正 (WIN-GUI)
+       o 矩形の yank/delete がマウス操作できない＋クリップボードに入ら
+         ない不具合の修正 (WIN-GUI)
+       o Windows-NT で、環境変数 HOME が存在しない場合には HOMEDRIVE と
+         HOMEPATH 環境変数を HOME 環境変数の代わりに使うようにした (WIN-NT)
+       o WINDOWS 95 上の fepctrl 制御での device open 方式を変更 (DOS)
+ 
+     JVim3.0-j1.2e (1997/05/17)
+ 
+       o PC-98 の WINDOWS-NT で、 CTRL-^ の動作がおかしい不具合の修正 (WIN-GUI)
+       o SHIFT+SPACE で IME の ON/OFF をできるようにした (WIN-GUI)
+         # fepkey=[ としてください
+ 
+     JVim3.0-j1.2d (1997/05/10)
+ 
+       o Windows GUI mode のみ (-nw で console モードにならない) のバー
+         ジョンを追加 (WIN-GUI)
+         わちきさんの、 wsp を使用させて頂き、自己アップデート形式の実
+         行ファイルで GUI のみのものを作れるようにしました。
+         アーカイブを展開すると、 vim32.exe と vim32w.com があるので、
+         vim32w.com を実行すると vim32.exe が GUI subsystem で動作する
+         ように書き換えられます。
+ 
+     JVim3.0-j1.2c (1997/05/05)
+ 
+       o 日本語を含んだ非常に長いファイル名のファイルを、ショートカット
+         にドラッグ＆ドロップすると起動時に一般保護違反になる場合がある
+         のを回避 (WIN-32,WIN95のみ)
+       o REPLACE モードで、行末の 1byte 文字を 2byte 文字で置き換えた時
+         にゴミが表示される場合があるのを修正 (ALL)
+       o set コマンドに window を追加した (WIN-GUI)
+ 
+     JVim3.0-j1.2b (1997/04/28)
+ 
+       ONEW 対応に、まだ時間がかかりそうなので、ここまでの修正を一度ま
+       とめてリリース
+ 
+       o W,B コマンドでの、ジャンプの仕方を変更 (ALL)
+         whichwrap の設定で、動作を変更できるようにしました。
+         下記の様な動作になります（↑が移動する場所を示します）。
+ 
+          ww の値:   bugがありましたら、mailでお知らせください。  また、
+          default:   ↑ ↑            ↑↑  ↑                ↑  ↑  ↑
+            32   :   ↑ ↑              ↑  ↑                    ↑
+            64   :   ↑                                           ↑
+ 
+         whichwrap の値は、 bit で判定して動作する様になっていますので、
+         上記の ww の値で 32 と書いてあるのは、 2 の 5 乗ビットを立てて
+         いる事を示します。
+         whichwrap が 32 の場合には、日本語と英数字、空白文字を区切り文
+         字とし、 64 の場合には空白文字のみを区切り文字とします。
+ 
+     JVim3.0-j1.2a (1997/01/16)
+ 
+       o CTRL-\ 等の fepkey でなく、ALT+[半角/全角] で、 IME の ON/OFF
+         を行うと入力位置がおかしくなる不具合を修正 (WIN-GUI)
+ 
+     JVim3.0-j1.2 (1997/01/16)
+ 
+       o CreateProcess() の後始末をしていない不具合を修正 (WIN-GUI)
+       o カラー表示を行う様にした (WIN-GUI)
+       o マウスでの範囲指定を Vim オリジナルの機能にマッピングするよう
+         にした (WIN-GUI)
+       o 右クリックでメニューをポップアップする様にした (WIN-GUI)
+       o スクロールバーを複数ウインドウ表示の場合でも使用できる様にした (WIN-GUI)
+       o マウスのダブルクリックで、クリックされた個所にもっとも近い場所
+         にカーソルを移動するようにした (WIN-GUI)
+       o クリップボードには、 yank だけでなく delete のデータも入れるよ
+         うにした (WIN-GUI)
+       o スクロールバーが出たり引っ込んだりするのは煩わしいので、定義に
+         合わせて出っ放しか引っ込みっぱなしのどちらかにした (WIN-GUI)
+       o ウインドウサイズの変更などで Caret が消える場合があったのを直
+         した (WIN-GUI)
+       o マウスでの範囲指定中に、マウスカーソルがウインドウの左右に出て
+         しまっても範囲指定を継続する様にした (WIN-GUI)
+       o 右クリックでの paste は、クリップボードの状態に関わらず、コマ
+         ンドモードならばデフォルトバッファを put する様にした (WIN-GUI)
+       o visualbell をサポートした (WIN-GUI)
+       o デフォルトの色合いを変更した (WIN-GUI)
+       o NT 3.51 の ICON 化された WINDOW への Drag & Drop で、 ICON 化
+         された WINDOW が開かない不具合と、リターンキーを入力しないと画
+         面表示がされない不具合の修正 (WIN-GUI)
+       o Drag & Drop で、 Caret が消える場合があったのを直した (WIN-GUI)
+       o コマンドモードになっていない時に Drag & Drop ができてしまう不
+         具合の修正 (WIN-GUI)
+       o 範囲指定中に put 出来てしまう不具合の修正 (WIN-GUI)
+       o ファイルの行数が一画面未満の時に、スクロールバーを使用するとエ
+         ラーメッセージが表示される不具合の修正 (WIN-GUI)
+       o マウスでの範囲指定の際に SHIFT キーを押している場合には行単位
+         の選択 ('V' モード) で動作し、 CTRL キーを押している場合には矩
+         形での選択 (CTRL-V モード) で動作するようにした (WIN-GUI)
+       o Drag & Drop で、修正中のファイルが存在する時には split でオー
+         プンする様にした (WIN-GUI)
+       o FONT を変えた場合に、画面の行数と桁数を変更前と同じになるよう
+         にした (WIN-GUI)
+       o number を指定している際に、マウスでの選択がおかしくなる不具合
+         の修正 (WIN-GUI)
+       o FONT を変えた場合、同時に caret のサイズも変更するようにした (WIN-GUI)
+       o 範囲指定後のクリックの動作を Windows 標準に近くした (WIN-GUI)
+       o 行挿入／削除の際に、文字属性のエリアをクリアしていなかった為に、
+         下方へ範囲指定を続けてスクロールさせると、範囲指定の色が変わる
+         場所がおかしくなる不具合の修正 (ALL)
+       o マウスでの範囲指定を続けて行った場合に、選択部分が正しく表示さ
+         れない不具合の修正 (WIN-GUI)
+       o エディット中の one command 実行で、日本語入力中に正しく継続で
+         きない不具合の修正 (ALL)
+       o マウスの右クリックで、 paste メニューを表示するのは、カーソル
+         の上にマウスポインタがある時だけにした (WIN-GUI)
+       o デフォルトバッファを put するのは、右クリックのメニューで選択
+         した場合だけにした (WIN-GUI)
+       o スクロールバーを使用した時に、 ruler 表示がおかしくなる不具合
+         を修正 (WIN-GUI)
+       o 空白を含むディレクトリ名が存在すると、ファイル名の補完が動作し
+         ない不具合を修正 (WIN-32)
+       o track mode が動作しない不具合を修正 (MS-DOS/WIN-32)
+       o track mode で as mode の場合に、日本語上を左移動すると正しく線
+         が引かれない不具合の修正（まだバグあり） (ALL)
+       o ファイル名補完で $HOME 等、環境変数が展開できない不具合を修正 (WIN-32)
+       o パイプからの読み込み（ :r!ls -x 等）では、最小化ウインドウでプ
+         ロセスを作成する様にした (WIN-GUI)
+       o オーバラップしているウインドウが移動したりした場合に、日本語の
+         部分が再描画されない場合がある不具合の修正 (WIN-GUI)
+       o 日本語入力システム Onew が動作するようにした (ONEW)
+         # まだ、αバージョンのレベル
+       o canna で、 : mode の場合に正しい位置に表示しない不具合の修正 (CANNA)
+       o Drag & Drop された際には、 SetForegroundWindow() でウインドウ
+         をアクティブにするようにした (WIN-GUI)
+       o Insert mode と Replace mode で、右クリックは paste メニューを
+         出すようにした (WIN-GUI)
+       o ダブルクリックで、行を移動した後に jk で行を移動した際にカーソ
+         ル位置がおかしくなる不具合を修正 (WIN-GUI)
+ 
+     JVim3.0-j1.1 (1997/01)
+ 
+       o スクロールバーの追加 (WIN-GUI)
+       o substitute で、 '×' に置換を行おうとすると文字化けする不具合
+         の修正 (ALL)
+       o :sh や :!sh では、新たにプロセスを作ってすぐにコマンドがリター
+         ンする様にした (WIN-GUI)
+       o :!sh では、 pause を実行する様にした (WIN-GUI)
+       o TT フォントを使用した際に、画面表示がおかしくなる不具合の修正 (WIN-GUI)
+       o CTRL-V,CTRL-C がうまく入力できない不具合の修正 (WIN-GUI)
+       o 禁則処理で無限ループする不具合の修正 (ALL)
+       o ファイル I/O などで時間がかかる時に、ウインドウが操作できない
+         不具合の修正 (WIN-GUI)
+       o 修正したファイルがある時に、「閉じる」を選択された場合には問い
+         合わせを行うようにした (WIN-GUI)
+       o 1 行が 32K を超える場合に、一般保護例外になる不具合の修正 (WIN-32)
+       o コマンド起動の後でリターンキーの入力をしなくていいようにした (WIN-GUI)
+       o 85900 行以降にスクロールバーが移動しない不具合の修正 (WIN-GUI)
+ 
+     JVim3.0-j1.0 (1996/12)
+ 
+         Windows 95 の上で、どうしても Long File Name が使えて、日本語
+       の入力ができるバージョンが必要だったので、それまでの JVim 3.0o
+       をベースに JVim 3.0-j1.0 として、取りあえず Windows GUI をサポー
+       トしたものを作成。
+ 
+ 
+ /* vi:set tw=70 sw=2 ts=2 et: */
diff -crN ../orig/doc.j/termcap.dos ./doc.j/termcap.dos
*** ../orig/doc.j/termcap.dos	Thu Jan 01 09:00:00 1970
--- ./doc.j/termcap.dos	Sun Jun 16 17:13:16 1996
***************
*** 0 ****
--- 1,276 ----
+ #=======================================================================
+ #
+ #  TERMCAP for jstevie, Ng, Demacs, MEmacs, JVim and jrogue
+ #				     Original: July 5, 1994 (Junn Ohta)
+ #				Last modified: Sep 28, 1995 (K.Tsuchida)
+ #=======================================================================
+ 
+ # NOTE:
+ # (1) If your Demacs doesn't work fine, insert following one line AT
+ #     THE TOP of ansi entry (i.e. just before the :co#80: line).
+ #	:bs@:km:bc=\E[D:le=\E[D:\
+ #
+ # (2) Local capabilities are incorporated for jrogue, as below:
+ #	Cf str	set foreground color (1 parameter: 0 to 7)
+ #	Cb str	set background color (1 parameter: 0 to 7)
+ #	Ri str	initialize sequence for jrogue
+ #	Re str	terminate sequence for jrogue
+ #	KL str	type of kanji line-character (pc98 or jis83)
+ #	xc bool	cursor doesn't reflect the attribute of the point (kterm)
+ 
+ #=======================================================================
+ #  Generic terminals
+ #=======================================================================
+ 
+ #-----------------------------------------------------------------------
+ #  ANSI terminal
+ #-----------------------------------------------------------------------
+ sx|ansi|ANSI terminal:\
+ 	:co#80:li#24:am:bs:pt:bl=^G:le=^H:do=^J:cr=^M:\
+ 	:cl=\E[2J\E[H:ce=\E[K:cd=\E[J:sc=\E[s:rc=\E[u:\
+ 	:cm=\E[%i%d;%dH:ho=\E[H:ll=\E[24;1H:\
+ 	:up=\E[A:do=\E[B:nd=\E[C:ri=\E[C:le=\E[D:\
+ 	:UP=\E[%dA:DO=\E[%dB:RI=\E[%dC:LE=\E[%dD:\
+ 	:sf=\ED:sr=\EM:al=\E[L:dl=\E[M:AL=\E[%dL:DL=\E[%dM:\
+ 	:ic=\E[@:dc=\E[P:IC=\E[%d@:DC=\E[%dP:\
+ 	:im=\E[4h:ei=\E[4l:\
+ 	:so=\E[7m:se=\E[m:us=\E[4m:ue=\E[m:\
+ 	:mb=\E[5m:md=\E[1m:mr=\E[7m:mh=\E[2m:me=\E[m:
+ 
+ #-----------------------------------------------------------------------
+ #  DEC VT100 terminal
+ #-----------------------------------------------------------------------
+ d0|vt100|DEC VT100:\
+ 	:sc=\E7:rc=\E8:ti=\E(B\E)0:as=^N:ae=^O:\
+ 	:xn:xo:vt#3:cs=\E[%i%d;%dr:\
+ 	:al@:dl@:AL@:DL@:ic@:dc@:IC@:DC@:im@:ei@:\
+ 	:tc=ansi:
+ 
+ #-----------------------------------------------------------------------
+ #  DEC VT52 terminal
+ #-----------------------------------------------------------------------
+ dw|vt52|DEC VT52:\
+ 	:co#80:li#24:bs:pt:le=^H:do=^J:cr=^M:\
+ 	:cl=\EH\EJ:ce=\EK:cd=\EJ:\
+ 	:ho=\EH:cm=\EY%+ %+ :\
+ 	:up=\EA:do=\EB:le=\ED:ri=\EC:nd=\EC:\
+ 	:sr=\EI:as=\EF:ae=\EG:
+ 
+ #-----------------------------------------------------------------------
+ #  Kterm on X Window with color
+ #-----------------------------------------------------------------------
+ kt|kterm|kterm on X Window with color:\
+ 	:co#80:li#24:am:bs:hs:es:pt:xn:bl=^G:le=^H:do=^J:cr=^M:\
+ 	:cl=\E[H\E[2J:ce=\E[K:cd=\E[J:sc=\E7:rc=\E8:\
+ 	:cm=\E[%i%d;%dH:ho=\E[H:ll=\E[24;1H:\
+ 	:up=\E[A:nd=\E[C:ri=\E[C:\
+ 	:UP=\E[%dA:DO=\E[%dB:RI=\E[%dC:LE=\E[%dD:\
+ 	:sf=\ED:sr=\EM:al=\E[L:dl=\E[M:AL=\E[%dL:DL=\E[%dM:\
+ 	:ic=\E[@:dc=\E[P:IC=\E[%d@:DC=\E[%dP:\
+ 	:so=\E[7m:se=\E[m:us=\E[4m:ue=\E[m:\
+ 	:mb=\E[5m:md=\E[1m:mr=\E[7m:mh=\E[2m:me=\E[m:\
+ 	:cs=\E[%i%d;%dr:ae=^O:as=^N:st=\EH:ct=\E[3g:\
+ 	:ts=\E[?E\E[?%i%dT:fs=\E[?F:ds=\E[?E:\
+ 	:ks=\E[?1h\E=:ke=\E[?1l\E>:\
+ 	:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\EOt:\
+ 	:k6=\EOu:k7=\EOv:k8=\EOl:k9=\EOw:k0=\EOy:\
+ 	:ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:\
+ 	:r1=\E>\E[1;3;4;5;6l\E[?7h\E[m\E[r\E[2J\E[H:\
+ 	:Cf=\E[3%dm:Cb=\E[3%d;7m:Ri=\E[?5h:Re=\E[?5l:KL=jis83:xc:
+ 
+ #=======================================================================
+ #  MS/PC-DOS terminals
+ #=======================================================================
+ 
+ #-----------------------------------------------------------------------
+ #  NEC PC-9801 series
+ #-----------------------------------------------------------------------
+ p9|pc98|pc9801|NEC PC-9801:\
+ 	:vi=\E[>5h:vs=\E[>5l:ve=\E[>5l:\
+ 	:Cf=\E[3%dm:Cb=\E[4%dm:Ri=\E)0\E[>3l\E[>1h:Re=\E[>1l:KL=pc98:\
+ 	:xn:im@:ei@:ic@:dc@:IC@:DC@:\
+ 	:tc=ansi:
+ 
+ #-----------------------------------------------------------------------
+ #  NEC PC-9801 series - cyan reverse, yellow underline
+ #-----------------------------------------------------------------------
+ px|pc98-c|pc9801-c|NEC PC-9801:\
+ 	:so=\E[46m:us=\E[33;4m:mr=\E[46m:\
+ 	:tc=pc98:
+ 
+ #-----------------------------------------------------------------------
+ #  NEC PC-9801 series - 25 line mode
+ #-----------------------------------------------------------------------
+ py|pc98-25|pc9801-25|NEC PC-9801 25 line:\
+ 	:li#25:ll=\E[25;1H:\
+ 	:ti=\E[>1h:te=\E[>1l:\
+ 	:tc=pc98:
+ 
+ #-----------------------------------------------------------------------
+ #  Toshiba J3100 with Japanese DOS 3.1 (much like PC-9801)
+ #-----------------------------------------------------------------------
+ j3|j3100|Toshiba J3100:\
+ 	:vi=\E[>5h:vs=\E[>5l:ve=\E[>5l:\
+ 	:Cf=\E[3%d;40m:Cb=\E[30;4%dm:KL=jis83:\
+ 	:xn:im@:ei@:ic@:dc@:IC@:DC@:\
+ 	:tc=ansi:
+ 
+ #-----------------------------------------------------------------------
+ #  AX machines with ANSIJ.SYS, or Toshiba J3100 with English DOS
+ #-----------------------------------------------------------------------
+ ax|j3100e|AX machines:\
+ 	:li#25:ll=\E[25;1H:\
+ 	:vi=\E[>5h:vs=\E[>5l:ve=\E[>5l:\
+ 	:Cf=\E[3%d;40m:Cb=\E[30;4%dm:KL=jis83:\
+ 	:xn:sf@:sr@:ic@:dc@:IC@:DC@:im@:ei@:\
+ 	:tc=ansi:
+ 
+ #-----------------------------------------------------------------------
+ #  Fujitsu FMR series and FM-Towns (MS-DOS)
+ #-----------------------------------------------------------------------
+ fm|fmr|towns|Fujitsu FMR and FM-Towns:\
+ 	:ho=\E[;H:cl=\E[2J\E[;H:\
+ 	:ce=\ET:cd=\EY:al=\EE:dl=\ER:\
+ 	:vi=\E[1v:vs=\E[0v:ve=\E[0v:\
+ 	:Cf=\E[3%dm:Cb=\E[3%d;7m:KL=jis83:\
+ 	:xn:sf@:sr@:AL@:DL@:ic@:dc@:IC@:DC@:im@:ei@:\
+ 	:tc=ansi:
+ 
+ #-----------------------------------------------------------------------
+ #  OKI if-800 model 60 (pesimistic assumption)
+ #-----------------------------------------------------------------------
+ if|if800|if-800|if-800 model 60:\
+ 	:vi=\E0:vs=\E1:ve=\E1:\
+ 	:Cf=\E[3%dm:Cb=\E[3%d;7m:KL=jis83:\
+ 	:xn:sf@:sr@:al@:dl@:AL@:DL@:ic@:dc@:IC@:DC@:im@:ei@:\
+ 	:tc=ansi:
+ 
+ #-----------------------------------------------------------------------
+ #  DOS/V with $IAS.SYS, IBM 5550, IBM PS/55 with JDOS
+ #-----------------------------------------------------------------------
+ dz|dosv|ibm5550|ps55:\
+ 	:Cf=\E[3%d;40m:Cb=\E[30;4%dm:\
+ 	:xn:cd@:us@:ue@:\
+ 	:sf@:sr@:al@:dl@:AL@:DL@:ic@:dc@:IC@:DC@:im@:ei@:\
+ 	:tc=ansi:
+ 
+ #-----------------------------------------------------------------------
+ #  IBM-PC with ANSI.SYS, DOS/V without $IAS.SYS, OS/2 with ANSI on
+ #-----------------------------------------------------------------------
+ pc|ibmpc|ibmpc-ansi|os2|OS2|ANSI.SYS:\
+ 	:li#25:ll=\E[25;1H:\
+ 	:Cf=\E[3%d;40m:Cb=\E[30;4%dm:\
+ 	:xn:cd@:us@:ue@:\
+ 	:sf@:sr@:al@:dl@:AL@:DL@:ic@:dc@:IC@:DC@:im@:ei@:\
+ 	:tc=ansi:
+ 
+ #-----------------------------------------------------------------------
+ #  IBM-PC with NANSI.SYS or ZANSI.SYS
+ #-----------------------------------------------------------------------
+ na|nansi|zansi|ibmpc-nansi|ibmpc-zansi|NANSI or ZANSI.SYS:\
+ 	:li#25:ll=\E[25;1H:\
+ 	:Cf=\E[3%d;40m:Cb=\E[30;4%dm:\
+ 	:xn:cd@:us@:ue@:im@:ei@:\
+ 	:tc=ansi:
+ 
+ #-----------------------------------------------------------------------
+ #  IBM-PC with NNANSI.SYS
+ #-----------------------------------------------------------------------
+ nn|nnansi|ibmpc-nnansi|NNANSI.SYS:\
+ 	:li#25:ll=\E[25;1H:\
+ 	:Cf=\E[3%d;40m:Cb=\E[30;4%dm:\
+ 	:xn:im@:ei@:\
+ 	:tc=ansi:
+ 
+ #-----------------------------------------------------------------------
+ #  IBM-PC with BIOS control
+ #-----------------------------------------------------------------------
+ pb|pcbios|PC-AT BIOS:\
+ 	:li#25:Cf=\E[3%d;40m:Cb=\E[30;4%dm:\
+ 	:xn@:cd@:us@:ue@:pt@:sr@:\
+ 	:sf@:al@:dl@:AL@:DL@:ic@:dc@:IC@:DC@:im@:ei@:\
+ 	:kd=#P:kh=#G:kH=#O:kI=#R:kl=#K:kN=#Q:kP=#I:kr=#M:ku=#H:\
+ 	:k1=#;:k2=#<:k3=#=:k4=#>:k5=#?:k6=#@:k7=#A:k8=#B:k9=#C:k0=#D:\
+ 	:s1=#T:s2=#U:s3=#V:s4=#W:s5=#X:s6=#Y:s7=#Z:s8=#[:s9=#\\:s0=#]:\
+ 	:cm=\E[%i%d;%dH:\
+ 	:%1=#L:\
+ 	:tc=ansi:
+ 
+ #-----------------------------------------------------------------------
+ #  WIN-95 with ANSI.SYS
+ #-----------------------------------------------------------------------
+ win|win95|windows-95|windows95:\
+ 	:li#25:Cf=\E[3%d;40m:Cb=\E[30;4%dm:\
+ 	:so=\E[0;37m:se=\E[1;37m:us=\E[4m:ue=\E[m:\
+ 	:tc=ansi:
+ 
+ #-----------------------------------------------------------------------
+ #  WIN-95 with ANSI.SYS
+ #-----------------------------------------------------------------------
+ win-c|win95-c|windows95-c:\
+ 	:li#25:Cf=\E[3%d;40m:Cb=\E[30;4%dm:\
+ 	:so=\E[0;37m:se=\E[1;37m:us=\E[4m:ue=\E[m:\
+ 	:tc=ansi:
+ 
+ #=======================================================================
+ #  Miscellaneous
+ #=======================================================================
+ 
+ #-----------------------------------------------------------------------
+ #  Sharp X68000 (not tested yet)
+ #-----------------------------------------------------------------------
+ 
+ x6|x68000|x68k|Sharp Personal Workstation X68000:\
+ 	:am:bs:km:pt:xn:co#96:li#31:tw#8:it#8:\
+ 	:bl=^G:le=^H:ta=^I:do=^J:nl=^J:cr=^M:\
+ 	:cl=\E[2J:cd=\E[J:ce=\E[K:\
+ 	:ho=\E[H:up=\E[A:nd=\E[C:cm=\E[%i%d;%dH:\
+ 	:UP=\E[%dA:DO=\E[%dB:RI=\E[%dC:LE=\E[%dD:\
+ 	:al=\E[L:dl=\E[M:AL=\E[%dL:DL=\E[%dM:\
+ 	:sf=\ED:sr=\EM:sc=\E[s:rc=\E[u:\
+ 	:so=\E[7m:se=\E[m:us=\E[1m:ue=\E[m:\
+ 	:md=\E[1m:mr=\E[7m:me=\E[m:\
+ 	:vi=\E[>5h:ve=\E[>5l:vs=\E[>5h:\
+ 	:GS=\033)3:GE=\033)0:\
+ 	:GV=\226:GH=\225:GU=\220:GD=\221:GL=\222:GR=\223:\
+ 	:G1=\231:G2=\230:G3=\232:G4=\233:GC=\217:\
+ 	:kb=^H:PU=\ES:PD=\ET:PL=\EU:PR=\EV:\
+ 	:CO=\E[>5l:CF=\E[>5h:\
+ 	:Cf=\E[3%dm:Cb=\E[3%d;7m:
+ 
+ #-----------------------------------------------------------------------
+ #  Atari ST
+ #-----------------------------------------------------------------------
+ at|atari|Atari ST:\
+ 	:tc=vt52:
+ 
+ #-----------------------------------------------------------------------
+ #  Commodore AMIGA
+ #-----------------------------------------------------------------------
+ am|amiga|AMIGA:\
+ 	:tc=vt100:
+ 
+ #-----------------------------------------------------------------------
+ #  Hardcopy terminal
+ #-----------------------------------------------------------------------
+ su|dumb:\
+ 	:co#80:do=^J:cr=^M:nl=^M^J:bl=^G:am:
+ 
+ #-----------------------------------------------------------------------
+ #  Debugging entry
+ #-----------------------------------------------------------------------
+ de|debug:\
+ 	:co#80:li#24:am:bs:xn:bl=<bl>:le=<le>:do=^J:cr=^M:\
+ 	:cl=<cl>:ce=<ce>:cd=<cd>:sc=<sc>:rc=<rc>:\
+ 	:cm=<cm=%d,%d>:ho=<ho>:ll=<ll>:\
+ 	:up=<up>:nd=<nd>:ri=<ri>:\
+ 	:UP=<UP=%d>:DO=<DO=%d>:RI=<RI=%d>:LE=<LE=%d>:\
+ 	:sf=<sf>:sr=<sr>:SF=<SF=%d>:SR=<SR=%d>:\
+ 	:al=<al>:dl=<dl>:AL=<AL=%d>:DL=<DL=%d>:\
+ 	:ic=<ic>:dc=<dc>:IC=<IC=%d>:DC=<DC=%d>:\
+ 	:cs=<cs=%d,%d>:im=<im>:ei=<ei>:\
+ 	:so=<so>:se=<se>:us=<us>:ue=<ue>:\
+ 	:mb=<mb>:md=<md>:mr=<mr>:mh=<mh>:me=<me>:\
+ 	:is=<is>:rs=<rs>:ti=<ti>:te=<te>:ks=<ks>:ke=<ke>:\
+ 	:vi=<vi>:vs=<vs>:ve=<ve>:vb=<vb>:\
+ 	:Cf=<Cf=%d>:Cb=<Cb=%d>:Ri=<Ri>:Re=<Re>:
diff -crN ../orig/doc.j/tutor/readme.j ./doc.j/tutor/readme.j
*** ../orig/doc.j/tutor/readme.j	Thu Jan 01 09:00:00 1970
--- ./doc.j/tutor/readme.j	Sun Jun 16 17:13:16 1996
***************
*** 0 ****
--- 1,42 ----
+ Ｖｉｍチューター　ver. 1.0 based on 1.2
+ 
+ このチューターは、Ｖｉｍ３.０に付属するtutorをもとに
+ 日本語化と少しの修正を施したものです。
+ 
+ 使用方法
+ 
+     vim tutor.j としてエディタを起動するだけ。
+     あとは、tutor.jを読みながら指示にしたがえばよいでしょう。
+ 
+ ｖｉを使う場合
+ 
+     vi tutor.j で起動し、読み進めれば良いのは同じです。
+     ただし、Ｖｉｍで強化された一部機能がｖｉでは使用できません。
+     このtutor.jでは、lesson2.5のアンドゥがそれにあたります。
+     この部分は、読みとばしてください。
+ 
+ このチュートリアルの著作権は原作者であるBob Ware氏のものです。
+ ただし、原作者は全ての人が使用することに制限が無いことを望んでいます。
+ 日本語化に関する著作権は、全て放棄しまた、放棄できない権利についても
+ 主張しないことを、宣言します。
+ 
+                         高須賀義弘　 Fri May 12 13:09:32 JST 1995
+ ----
+ 
+ 上記 vim tutor 日本語版に少し手を加えました。
+ 
+ 1. 誤訳の修正と訳語の統一
+ 2. 一部訳注の削除と追加
+ 3. 2 バイト英数文字は 1 バイト英数文字に統一
+ 4. フォーマットのやりなおし
+ 5. 漢字コードは JIS とした
+ 6. vim -> jvim に修正(^^)
+ 
+ 高須賀氏 original の日本語訳は、
+ ftp://ftp.mines.colorado.edu/pub/tutorials/ にあります。
+ 
+ 私の修正部分に関する著作権は、全て放棄し、また、放棄できない権利についても
+ 主張しないことを、宣言します。
+ 
+                         小島肇 [Office] kjm@yonka.ngy.mhi.co.jp
+                                [Home]   sgl02543@niftyserve.or.jp
diff -crN ../orig/doc.j/tutor/tutor.j ./doc.j/tutor/tutor.j
*** ../orig/doc.j/tutor/tutor.j	Thu Jan 01 09:00:00 1970
--- ./doc.j/tutor/tutor.j	Sun Jun 16 17:13:18 1996
***************
*** 0 ****
--- 1,758 ----
+ *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
+ *    W e l c o m e   t o   V I   T u t o r    -    V e r s i o n   1 . 2      *
+ *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
+                              **************
+                              * Lesson 1.0 *
+                              **************
+ 
+      Jvim は、このようなチューターで説明するには多すぎるコマンドを持つ、
+      パワフルなエディタです。このチューターでは、何でも OK のエディタと
+      して Jvim を気楽に使うのに十分なコマンドを説明するにとどめました。
+ 
+      このチューターは、およそ25〜30分ほどで終るはずですが、実習がどれく
+      らいかかるかによって変るでしょう。
+ 
+      このことは忘れないでください。それはこのチューターでは使わせて教え
+      るということです。つまり生徒は学ぶためにコマンドを実行することが必
+      要です。暗記するのではありません、使って学ぶのです。
+ 
+      さて、あなたのシフトロックキー(CAPSキーです)が押されていないことを
+      確認してください。そして、カーソルを動かすために j のキーを何度か押
+      して、Lesson 1.1 を完全に画面上にだしてください。
+ 
+       (訳註: Jvim や vi では、大文字と小文字では、別のコマンドを表わしま
+        す。それぞれの説明のコマンドが大文字か小文字か確認して操作し てく
+        ださい。 また、このチューターでいう「単語」は英単語かそ れと同様
+        にスペースやカンマ、ピリオド などをさすもので、文法 的意味での単
+        語とは異なります。)
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 1.1 *
+                              **************
+                  =====>>>>>  カーソルの移動  <<<<<=====
+ 
+    ** カーソルの移動には、示すように h,j,k,l のキーを使います **
+                                    ^
+                                    k
+                              < h       l >
+                                    j
+                                    v
+   1. 気の済むまで画面の中でカーソルを動かしてください。
+ 
+   2. リピートを始めるまで下げるキー(j)を押しつづけてください。
+ ---> これで次のレッスンへの移動方法がわかったでしょう。
+ 
+   3. 下げるキー(j)を使って Lesson 1.2 へいってください。
+ 
+ Note: もし、タイプ結果がおかしければ <ESC> キーを押してください。
+       コマンドモードに移ります。その状態でコマンドをタイプしてください。
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 1.2 *
+                              **************
+               =====>>>>>  Jvim の立ち上げと終了  <<<<<=====
+ 
+   !! NOTE: 最後まで説明をよく読んでから各ステップを実行してください。
+ 
+   1. <ESC> key を押してください。(コマンドモードであることを確認します)
+ 
+   2. :q! <RETURN> とタイプしてください。
+ 
+ ---> この方法は、編集した内容を保存せずにエディタを終了します。
+      編集内容を保存して終了するときは :wq  <RETURN> とタイプします。
+ 
+   3. シェルのプロンプト(%)がみえたら jvim tutor.j <RETURN> とタイプします。
+ 
+ ---> 'jvim' は「Jvim エディタを使う」という意味、'tutor.j' は編集したい
+      ファイル名です。
+ 
+   4. もし、これらの操作を覚え、自信があるなら 1から3のステップで、エディ
+      タを終了しもう一度立ち上げ、カーソルを Lesson 1.3 まで移動させてく
+      ださい。
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 1.3 *
+ 							 **************
+ 			 =====>>>>>  テキストの編集 ＜削除＞ <<<<<=====
+ 
+ ** コマンドモードのままで x キーを押すと、カーソルの文字が消えます。 **
+ 
+   1. カーソルを下の方の ---> に合わせます。
+ 
+   2. 誤りを正します、まず削除する文字の先頭までカーソルを移動します。
+ 
+   3. いらない文字を x キーを使って消します。
+ 
+   4. 文が正しくなるまで2から4のステップを繰り返します。
+ 
+ ---> The ccow jumpedd ovverr thhe mooon.
+ 
+   5. 上の文が正しく仕上がったら、次のレッスンに移ります。
+ 
+ NOTE: 全てのレッスンを読みとばさず、使い方を学んでください.
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 1.4 *
+                              **************
+              =====>>>>> テキストの編集 ＜挿入＞  <<<<<=====
+ 
+ 	** コマンドモードのまま i キーをタイプするとテキストを挿入できます。**
+ 
+   1. ---> マークのある始めの行に移動します。
+ 
+   2. 上の行を下と同じにします、挿入したい位置にカーソルを移動して下さい。
+ 
+   3. i キーを押して必要な文字を加えてください。
+ 
+   4. その部分を直したら <ESC> を押してコマンドモードに戻り、他の位置も2
+      から4のステップを繰り返して上下の文を同じにしてください。
+ 
+ ---> There is text misng this .
+ ---> There is some text missing from this line.
+ 
+   5. 挿入の仕方がわかれば下のサマリ(要約)を見てください。
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           ********************
+                           * LESSON 1 SUMMARY *
+                           ********************
+ 
+   1. カーソルの移動には十字キー、h j k l を使う。
+          h (left)       j (down)       k (up)       l (right)
+ 
+   2. プロンプトから Jvim を立ち上げる。jvim FILENAME <RETURN> とタイプする。
+ 
+   3. Jvim の終了は            <ESC>   :q!   <RETURN> 
+      編集内容を保存するときは <ESC>   :wq   <RETURN> とタイプする。
+ 
+   4. カーソルの文字を削除するには、コマンドモードで x とタイプする。
+ 
+   5. カーソルの位置に文字を挿入するには、コマンドモードで i とタイプする。
+          i     挿入する文字列 <ESC>
+ 
+ NOTE: <ESC> キーを押せばコマンドモードに戻り、コマンドが完成されていない
+      ときは、それを取り消すことができる。
+ 
+ 続けて Lesson 2 を始めます。
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 2.1 *
+                              **************
+                 =====>>>>>   削除コマンド    <<<<<=====
+ 
+                       ** dw と押せば 1単語消せる **
+ 
+   1. <ESC> キーを押してコマンドモードにもどる。
+ 
+   2. カーソルを下の方の ---> に合わせます。
+ 
+   3. いらない単語の先頭にカーソルを移動します。
+   
+   4. dw をタイプすれば単語が消えます。
+ 
+   NOTE: dw とタイプするとき、画面下に打ったアルファベットがでてくるでしょ
+         う。もし、打ちまちがえたなら、<ESC>キーをタイプすることによって
+         やりなおせます。
+ 
+ ---> There are a some words fun that don't belong paper in this sentence.
+ 
+   5. 3から4を繰り返し、文を仕上げたら Lesson 2.2 へ進んでください。
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 2.2 *
+                              **************
+               =====>>>>>  その他の削除コマンド  <<<<<=====
+ 
+              ** d$ とタイプすれば、行の終わりまで削除する **
+ 
+   1. <ESC> キーを押してコマンドモードにもどる。
+ 
+   2. カーソルを下の方の ---> に合わせます。
+ 
+   3. カーソルを文の終わりに移動する。(一つめのピリオドの次にカーソルを移動する)
+ 
+   4. d$ とタイプすればカーソル以下の文字が消えます。
+ 
+ ---> Somebody typed the end of this line twice. end of this line twice.
+ 
+ 
+   5. このことを理解したら、lesson 2.3 へ進んでください
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 2.3 *
+                              **************
+              =====>>>>> コマンドとそのオブジェクト<<<=====
+ 
+        削除コマンド d は次のようなフォーマットになっています。
+ 
+          [number]   d   object    または     d   [number]   object
+                    []は省略可能であることを意味します。
+   それぞれ
+     number - 何回繰り返すかを表わし、デフォルトは1です。
+     d      - 削除コマンドです。
+     object - コマンドのオブジェクト(下で説明します)です。
+ 
+   object には、たとえば次のような物があります。
+     w - カーソル位置の単語を示します。(単語の後のスペースを含みます)
+     e - カーソル位置の単語を示します。(単語の後のスペースを含みません)
+     $ - カーソルからその行の終わりまでを示します。
+ 
+ NOTE: 冒険したい人は、コマンドモードで、コマンドを含めずに、オブジェクト
+       のみをタイプしてみましょう。すると、カーソルは、オブジェクトで指定 
+       したような動きをします。
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 2.4 *
+                              **************
+ 		 =====>>>>>   オブジェクトをとらないコマンド  <<<<<=====
+ 
+                ** dd とタイプすれば、1行全部削除できます。**
+ 
+   1行削除するようなことは頻繁に起こります、Jvim の製作者はその作業を
+   もっと簡単にそして単純に、d を2回タイプするだけで済むように設計しました。
+ 
+   1. カーソルを語群の2番目に移動してください。
+ 
+   2. dd とタイプして行を消します。
+ 
+   3. では、4番目の行に移ってください。
+ 
+   4. 2dd (number-command-objectと同じです)とタイプすれば 2行削除できます。
+      ~    ~~~~~~
+       1)  Roses are red,
+       2)  Mud is fun,
+       3)  Violets are blue,
+       4)  I have a car,
+       5)  Clocks tell time,
+       6)  Sugar is sweet
+       7)  And so are you.
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 2.5 *
+                              **************
+                  =====>>>>> アンドゥコマンド <<<<<=====
+ 
+    ** u をタイプすれば直前のコマンドを取り消せます。U なら1行文取り消します **
+ 
+   1. カーソルを下の方の ---> に合わせます。そして 1つ目の誤りに移動します。
+   2. x を押して始めの要らない文字を消します。
+   3. では、u を押して直前の操作を取り消します。
+   4. 今度は、x を使って誤りを全て直します。
+   5. U をタイプすれば、もとの行に戻ります。
+   6. u を数回あるいは U をタイプすれば、コマンド実行まえに戻ります。
+   7. CTRL-R (CTRL を押したまま R をタイプする)をタイプすれば数回やりなお
+      せます。つまり、取り消しの取り消しができます。
+ 
+ ---> Fiix the errors oon thhis line and reeplace them witth undo.
+ 
+   8. これは、大変便利なコマンドです。では Lesson 2 Summary に移動しましょう。
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           ********************
+                           * LESSON 2 SUMMARY *
+                           ********************
+ 
+   1. 単語を消すときは dw とタイプする。
+ 
+   2. 行末まで消すときは d$ とタイプする。
+ 
+   3. 1行全部消すときは dd とタイプする。
+ 
+   4. コマンドモードで使うコマンドのフォーマットは次のように決っています。
+ 
+        [number]   command   object   または   command   [number]   object
+                       [ ] で囲まれたものは、省略してもよいという意味
+      それぞれ
+        number  - コマンドを何回実行するか。省略した場合は1
+        command - コマンドです。たとえば削除するときなら d のことです。
+        object  - 何に基づいてコマンドを動作させるか。例えば単語なら w
+                  行末までなら $ など。
+ 
+   5. 直前の変更を取り消す。             : u   (小文字の u)
+      その行の変更を全て取り消す。       : U   (大文字の U)
+      取り消しを取り消す。               : CTRL-R
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 3.1 *
+                              **************
+                  =====>>>>> プット コマンド <<<<<=====
+ 
+   ** p をタイプすればカーソルの次の位置に直前に削除したものが書き込まれます **
+ 
+   1. 始めの行にカーソルを移動します。
+ 
+   2. dd をタイプすれば、削除されるとともに Jvim のバッファに記録されます。
+ 
+   3. 削除された行の上に移動します。
+ 
+   4. コマンドモードのまま p をタイプすればカーソルの次の行に戻せます。
+ 
+   5. では、2から4を繰り返し順番に並びかえてください。
+ 
+      d) Can you learn too?
+      b) Violets are blue,
+      c) Intelligence is learned,
+      a) Roses are red,
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 3.2 *
+                              **************
+                =====>>>>>   置き換えコマンド  <<<<<=====
+ 
+      ** r と 何か1文字 入力すれば、カーソルの文字が置き換わります。 **
+ 
+   1. カーソルを下の方の ---> のついたはじめの行に移動します。
+ 
+   2. カーソルをはじめの誤りの位置に移動します。
+ 
+   3. r と正しい文字を入力し誤りを正してください。
+ 
+   4. 2から3を繰り返し、はじめの行を正しくしてください。
+ 
+ --->  Whan this lime was tuoed in, someone presswd some wrojg keys!
+ --->  When this line was typed in, someone pressed some wrong keys!
+ 
+   5. Lesson 3.2 へ移動します。
+ 
+ NOTE: 忘れてはいけません、使って学ぶのです、暗記するのではありません。
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 3.3 *
+                              **************
+                   =====>>>>>  変更コマンド <<<<<=====
+ 
+            ** 単語や部分を変更するには cw とタイプします。**
+ 
+   1. カーソルを下の方の ---> のついた最初の行に移動します。
+ 
+   2. カーソルを 'lubw' の u に移動させてください。
+ 
+   3. cw とタイプし、その後で正しい単語をタイプします。この場合は 'ine' です。
+ 
+   4. <ESC>を押してコマンドモードに戻り、次の誤りの先頭に移動してください。 
+ 
+   5. 3から4を繰り返し、上の文を下の文と同じにしてください。
+ 
+ ---> This lubw has a few wptfd that mrrf changing usf the change command.
+ ---> This line has a few words that need changing using the change command. 
+ 
+ Notice: cw は単語を変更するだけでなく、挿入も行えます。 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 3.4 *
+                              **************
+                =====>>>>> c を使った他の変更方法 <<<<<=====
+ 
+  ** 変更コマンドは、削除コマンドと同じようにオブジェクトをとります。 **
+ 
+   1. 変更コマンドも、削除コマンドと同じような働きかたをします。そのフォー
+      マットは
+ 
+        [number]   c   object     または      c   [number]   object
+ 
+   2. オブジェクトも同じです。例えば単語なら w 行末までなら $ です。
+ 
+   3. カーソルを下の方の ---> のついた最初の行に移動します。
+ 
+   4. 最初の誤りに移動します。
+ 
+   5. 次の行と同じ内容にするため c$ を押し、変更後 <ESC> を押してコマンド
+      モードに戻ってください。
+ 
+ ---> The end of this line needs some help to make it like the second. 
+ ---> The end of this line needs to be corrected using the  c$  command.
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           ********************
+                           * LESSON 3 SUMMARY *
+                           ********************
+ 
+   1. すでに削除した内容をプットしたいときは p を使う。このプットコマンド
+      は直前の削除を出力する。
+ 
+   2. 文字を置き換えるには、r をタイプしたあとで、置き換える文字をタイプ
+      する。
+ 
+   3. 変更コマンドではカーソル位置から何らかのオブジェクトまでを指すこと
+      が許されている。例えば cw ならカーソル位置から単語の終わりまで、c$ 
+      なら行の終わりまでを変更する。
+ 
+   4. 変更コマンドのフォーマットは
+     
+          [number]   c   object      または      c   [number]   object
+ 
+ では、次のレッスンに進みます。
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 4.1 *
+                              **************
+                =====>>>>> 場所とファイルの情報 <<<<<=====
+ 
+   ** CTRL-g をタイプすればカーソルのある行とカラムそしてファイルの情報が
+                          表示され、G は指定した行に移動します。 **
+ 
+   Note: このレッスンを全て読んでからそれらのステップを実行してください。
+ 
+   1. CTRL キーを押したまま g をタイプすると、一番下の行に、ファイル名と
+      現在のカーソル位置についての情報が表示されます。ステップ 3 で利用す
+      るので、必ずこのときの行番号を憶えておいてください。
+ 
+   2. G をタイプすればファイルの終わりに移動します。
+ 
+   3. さきほど憶えた行番号をタイプしたあとで G をタイプすれば、最初に 
+      CTRL-g をした行に移動するでしょう。(行番号をタイプしているとき、タ
+      イプした数字は画面に表示されません)
+ 
+   4. 自信が持てたら 1から3のステップを実行してください
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 4.2 *
+                              **************
+                    =====>>>>> 検索コマンド <<<<<=====
+ 
+   ** / をタイプしたあと検索したい語をタイプすれば、その語を検索します。**
+ 
+   1. コマンドモードで / をタイプします。すると、コロンコマンド (:q など 
+      : command の形式) のように、画面下にカーソルが表われます。
+ 
+   2. では 'errroor' <RETURN> とタイプしてください。これは検索したい語です。
+ 
+   3. 同じ語をもう一度検索するときは 単純に n を押します。
+      逆方向に検索するときは N を押します。
+ 
+   4. もし、逆方向にはじめから検索したい場合のコマンドは ? で、/ のかわりに
+      使います。
+ 
+ ---> もし、検索してファイルの終わりまで来てしまうと、ファイルの先頭から
+      検索をはじめます。
+ 
+   "errroor" is not the way to spell error;  errroor is an error.
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 4.3 *
+                              **************
+                =====>>>>> 対応する括弧による検索 <<<<<=====
+ 
+               ** % をタイプすれば対応する ),],} へ移動します。**
+ 
+   1. --->のある行に移動し カーソルを適当な (, [, { にあわせます。
+ 
+   2. そこで % を押します。
+ 
+   3. すると カーソルは対応する括弧に移動するでしょう。
+ 
+   4. その場でもう一度 % をタイプすれば最初の括弧に移動します(対応する括弧に移
+      動します)
+ 
+ ---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
+ 
+ Note: この機能はプログラムを書くとき括弧の不一致などのエラーを発見するの
+       にとても役にたちます。
+ 
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 4.4 *
+                              **************
+                  =====>>>>> 誤りを変更する方法 <<<<<=====
+ 
+    ** :s/old/new/g とタイプすれば 'new' から 'old' へ 置換されます **
+ 
+   1. カーソルを下の方の ---> に合わせます。
+ 
+   2. :s/thee/the <RETURN> とタイプすればその行ではじめに見つけた thee を 
+      the に置換します。
+ 
+   3. ここで :s/thee/the/g とタイプします。最後の g は全体を示します。つ
+      まりこのときその行にある全ての thee を the に置換します。
+ 	  (訳注: コロンコマンド : command を実行するときは、最後に必ず 
+ 	  <RETURN> キーをタイプしてください。)
+ 
+ ---> thee best time to see thee flowers is in thee spring.
+ 
+   4. ある行からある行までの、全ての単語を置換するには、こうします。
+      :#,#s/old/new/g   # 行から # 行までを置換します。100 行目から 200 行目
+ 	                   までなら、:100,200s/old/new/g です。
+      :%s/old/new/g     ファイル全体を範囲とします。
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           ********************
+                           * LESSON 4 SUMMARY *
+                           ********************
+ 
+   1. CTRL-g をタイプすればカーソル位置やファイルの情報が表示される。
+      G をタイプすればファイルの終わりに移動する。G の前に行番号をタイプ
+      すればその行に移動する。
+ 
+   2. / でファイルの前方(終わり方向)に語を検索する。
+      ? でファイルの後方(はじめ方向)に語を検索する。
+      そのあと n で、同じ方向に検索を続ける。
+      あるいは、N で逆方向に検索を続ける。
+ 
+   3. % で、対応する括弧 (,),[,],{, or } に移動する。
+ 
+   4. 現在行の最初の old を new に置換する。                :s/old/new
+      現在行の全ての old を new に置換する。                :s/old/new/g
+      # から # までの行の全ての old を new に置換する。     :#,#s/old/new/g
+      ファイルの中の全ての old を new に置換する。          :%s/old/new/g
+      'c' を加えると、確認しながら置換を行なえる。          :%s/old/new/gc
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 5.1 *
+                              **************
+             =====>>>>> システム側のコマンドの使いかた <<<<=====
+ 
+    ** :! の後、普段シェルで使うコマンドをタイプすれば、実行できます。**
+ 
+   1. もうおなじみの : をタイプします。すると、画面下にカーソルが移動しま
+      す。これで、コマンドがタイプできるようになりました。
+ 
+   2. ! (ビックリマーク)を この状態でタイプします。これで、UNIX コマンド
+      がタイプできるようになりました。
+ 
+   3. 例として、ls を ! に続けてタイプしてみましょう。シェルのプロンプト
+      (%)がでているときと同じように、そのディレクトリのファイルリストが、
+      表示されるでしょう。
+ 
+ ---> Note:  この方法で他の多くのコマンドも実行することができます。
+ 
+ 
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 5.2 *
+                              **************
+             =====>>>>> その他のファイルへ書き込みかた <<<<<=====
+ 
+     ** 別の名前でファイルにセーブするときは :w FILENAME とタイプします。**
+ 
+   1. :!ls とタイプすれば、ディレクトリのリストが取れます。
+ 
+   2. そのディレクトリに無いファイル名を選択します。ここでは TEST を選ん
+      だとします。
+ 
+   3. :w TEST (この TEST は、選んだファイル名です)
+ 
+   4. これで、このファイル (Jvim Tutor) は、TEST の名前でセーブされます。
+      :!ls とタイプして確認してください。
+ 
+ ---> Note ここで Jvim を終了し、jvim TEST としてもう一度立ち上げれば、そ
+           のファイルは、このチューターと同じ内容でしょう。
+ 
+   5. では、:!rm TEST とタイプしてそのファイルを削除してください。
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 5.3 *
+                              **************
+                  =====>>>>> 選択式書き込み命令 <<<<<=====
+ 
+ 	   ** 部分を保存するときは :#,# w FILENAME とタイプします **
+ 
+   1. もう一度 :!ls とタイプしてリストをみて適当なファイル名を選んでくだ
+      さい。ここでは、TEST とします。
+ 
+   2. このページの先頭にカーソルを動かし CTRL-g を使って行番号を調べます。
+      そしてその行番号を憶えてください。
+ 
+   3. その後、今度はページの終りへ移動し、CTRL-g を使って行番号を調べます。
+      この行番号も憶えてください。
+ 
+   4. ある部分を TEST という名で保存するときは、:#,# w TEST というコマン
+      ドを使います。ここで、#,#は 先程憶えた、2つの行番号(上端,下端)です。
+      もちろん TEST は、保存するファイル名です。
+ 
+   5. ではもう一度 :!ls を使って確認しましょう。ただしこのファイルは消し
+      てはいけません。
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 5.4 *
+                              **************
+                =====>>>>> ファイルの復帰と併合 <<<<<=====
+ 
+    ** ファイルの中身をそのまま挿入するときは :r FILENAME とタイプします **
+ 
+   1. :!ls として先程保存したファイルがあることを確認してください。
+ 
+   2. カーソルをページのはじめに移動します。
+ 
+ NOTE: ステップ3を実行すれば、画面に Lesson 5.3 が現われるので、カーソルを
+        下に移動しこの Lesson に戻ってください。
+ 
+   3. では、TEST を復帰します :r TEST とタイプしてください。このときの 
+      TEST も先程保存したファイルです。
+ 
+ NOTE:  復帰は、カーソルのある位置から行なわれます。
+ 
+   4. 復帰したものを確認しましょう。カーソルを戻して、もとの Lesson 5.3 と
+      同じものであるか調べてください。
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           ********************
+                           * LESSON 5 SUMMARY *
+                           ********************
+ 
+   1.  :!command  によって システム側のコマンドを実行できる。
+ 
+       使用例
+           :!ls           -  ディレクトリのファイルリストを見る。
+           :!rm FILENAME  -  ファイルの削除
+ 
+   2.  :w FILENAME によって FILENAME にセーブする。
+ 
+   3.  :#,# w FILENAME によって #から#までをセーブする。
+ 
+   4.  :r FILENAME は FILENAME の中身をカーソルの位置から挿入する。
+ 
+ 
+ 
+ 
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 6.1 *
+                              **************
+                  =====>>>>> オープンコマンド <<<<<=====
+ 
+   **  o をタイプすればカーソル行の下に新しい行が作られ挿入モードになる。 **
+ 
+   1. カーソルを下の方の ---> に合わせます。
+ 
+   2. o をタイプすればその行の下に新しい行ができ、挿入モードになります。
+ 
+   3. では、---> のついた行を写したら <ESC>キーを押してコマンドモードにし
+      てください。
+ 
+ ---> After typing  o  the cursor is placed on the open line in insert mode.
+ 
+   4. カーソル行の上に書き込みたいときは、単純に O を使います。
+      この下の行でためしてみてください。
+ Open up a line above this by typing Shift-O while the cursor is on this line.
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 6.2 *
+                              **************
+                   =====>>>>> 書き足しコマンド <<<<<=====
+ 
+           ** a は、カーソルの次の位置から挿入するコマンドです。**
+ 
+   1. ---> マークのある最初の行に移動します。そして $ をコマンドモードで
+      押してください。行の終りに移動します。
+ 
+   2. a をタイプすれば、テキストをカーソルの後に文字を追加挿入できます。
+      ( A はその行の一番最後から文字を追加します)
+ 
+ Note: i でタイプするなら、最後の文字を含めてテキストを挿入し <ESC>でコマ
+       ンドモードに移りカーソルを右に移動して x で文字を消せば やっと行の
+       終わりに追加したことになる。
+ 
+   3. 上の行を完成させます。Noteの方法を使った挿入と同じになるでしょう。
+      a による挿入も i によるものも挿入する場所以外は同じです。
+ 
+ ---> This line will allow you to practice
+ ---> This line will allow you to practice appending text to the end of a line.
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 6.3 *
+                              **************
+                =====>>>>> 別の置き換えコマンド <<<<<=====
+ 
+            ** R を使えば1文字より多くの置き換えができます。**
+ 
+   1. ---> マークのある最初の行に移動します。
+ 
+   2. 2行目と違いがある最初の単語の最初の文字に移動してください。
+      (すなわち 'last' です)
+ 
+   3. ここで R をタイプして、残りの部分をタイプし込み2番目の内容と
+      同じになるように、してください。
+ 
+ ---> To make the first line the same as the last on this page use the keys.
+ ---> To make the first line the same as the second, type R and the new text.
+ 
+   4. Note <ESC>キーをタイプすればコマンドモードに戻ります。無変更の部分
+           は残ります。
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              **************
+                              * Lesson 6.4 *
+                              **************
+                    =====>>>>> 環境変数の設定 <<<<<=====
+ 
+     ** 検索や置換で ignore (大文字と小文字を無視する)場合の環境を設定します **
+ 
+ 
+   1. 'ignore' を検索するときは
+      /ignore
+ 	 です。数回繰り返すときは n を使います。
+ 
+   2. 'ic' (Ignore Case の略です) という環境変数を設定します。
+      :set ic
+ 
+   3. 'ignore' をさらに検索するときは n を押します。
+      さらに数回繰り返すときは n を使います。
+ 
+      (訳註: この設定をすると検索時や置換時に大文字と小文字の区別を無視します。
+             この他にもいろいろな意味を持つ環境変数があります。)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           ********************
+                           * LESSON 6 SUMMARY *
+                           ********************
+ 
+   1. o を使えば、カーソル行の下に新しい行が作られその行の挿入モードになる。
+      O であれば、カーソル行の上に作られる。
+ 
+   2. a は、カーソルの次から文字を挿入できます。
+      A なら自動的に現在行の一番終りから書き足しができます。
+ 
+   3. R を使うと <ESC>  が押されるまで、文字の置き換えができます。
+ 
+   4. ":set xxx" で環境変数 "xxx" を設定します。
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ 
+   これで Jvim のチューターは終りです。このチューターは、Jvim エディタを
+   便利に使うに十分なだけの、機能概要を説明するにとどまっています。
+   Jvim には他にもた〜くさんコマンドがあります。このチューターでは、完全
+   にはほど遠いです。
+ 
+   これ以後の学習は以下のファイルを参照してください。
+ 
+         doc/reference.doc   - Jvim の完全な説明です。
+         doc/index           - 手短に書かれた コマンドのサマリです。
+         doc/difference.doc  - vi と Jvim の違いに関するサマリです。
+         doc/difference.jdoc - 上記ファイルの日本語版です。
+ 
+   あるいは、:help を使ってもよいでしょう。
+ 
+   This tutorial was written by Michael C. Pierce and Robert K. Ware,
+   Colorado School of Mines using ideas supplied by Charles Smith,
+   Colorado State University.
+   E-mail: bware@mines.colorado.edu.
+ 
+   Modified for Vim by Bram Moolenaar.
+ 
+   この日本語版のチューターは原文をなるべく忠実に訳しましたが、必ずしも正
+   確ではありません。一部大胆に書きかえた部分もありますし、語学力の無さは 
+   正確な翻訳をかなり困難なものとしました。したがって不可解な部分について 
+   は、全て私個人の責任によるものです。
+ 
+   日本語版訳 高須賀義弘 E-mail:i04143@sr2.takuma-ct.ac.jp
+ 
+   Modified for jvim and some changes by kjm@yonka.ngy.mhi.co.jp (小島肇)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff -crN ../orig/doc.j/uganda.jp ./doc.j/uganda.jp
*** ../orig/doc.j/uganda.jp	Thu Jan 01 09:00:00 1970
--- ./doc.j/uganda.jp	Sun Jun 16 17:13:20 1996
***************
*** 0 ****
--- 1,86 ----
+ 
+ 					日本語訳:ann@mrit.mei.co.jp
+ 
+ Vimはパブリックドメインです。もしあなたがVimのために幸せになって、
+ それを表現したいとしても、私にお金を送らないで下さい。私には必要
+ ありません。でも、私はあなたのお金を必要としている場所を知ってい
+ ます。どうか、以下の文章を読んでみてください。
+ 
+ 1993年、私はオランダのチームとウガンダで一夏を過ごしました。
+ 私がそこで経験したことは、とても印象的でした。我々は、現地の人達
+ とKibaleに研修施設を作りました。たった3週間で、何もないところに屋
+ 根のついた建物を立てたのです。
+ 
+ Kibaleはウガンダの南にある小さな町です。このあたりは、AIDSがひど
+ く蔓延しています。大人の約30%が感染しています。両親が死んでしまっ
+ て浮浪児になってしまった子供達がたくさんいます。彼らはたくさんの
+ 援助を必要としています。Kibaleの児童センターは、必要な食糧と医療、
+ 教育を提供するために、とても役立っています。いまや、食糧と医療は、
+ 彼らの健康を維持できるようになりました。教育は、将来、彼ら自身で
+ やっていけるようにならなければいけません。これは価値の高いチャリ
+ ティープログラムであり、私もこれに参加していました。
+ 
+ この地域の問題を解決する鍵は、教育です。教育は、過去、数年にわた
+ るIdi Amin大統領の時代と、それに続く内戦によって効力を失いました。
+ 人々は自立する方法と感染から身を守る方法を学ばねばなりません。
+ 病んだ人々にも援助は必要ですが、最も重要な目的は、人々を病から守
+ ることなのです。
+ 
+ そこで行なわれていた方法は、とても印象深いものでした。仕事は細か
+ く組織化されていました。すべてのドルは何か有効なものに費やされま
+ した。我々のチームは2000ドルを使いました。そのお金で、我々は2つ
+ の教室のある研修施設のほとんどを作ったのです。彼らはさらに、小学
+ 校と教員宿舎を立てる計画を持っています。彼らにも、本や教材を揃え
+ るためのお金が必要なのです。
+ 
+ Kibale児童センタをサポートしたい、と思ったら、寄付をお願いします。
+ 
+ お金が正しく使われていることをどうやって知ればいいのでしょう?
+ まず、私はVimの作者として個人的に信用されています。さらに、このプ
+ ロジェクトはWorld Vision and International Child Care Fundによっ
+ て監督、運営されています。私は、1994年の1月に、再びこのプロジェク
+ トを尋ねるつもりです。私の友人も1994年の夏に訪れることになってい
+ ます。ですから、私はそこで何が起こっているのかを知らせることがで
+ きるのです。
+ 
+ もし何か質問がありましたら、私のところ(mool@oce.nl)へ電子メイルを
+ 送ってください。
+ 
+ プロジェクトのディレクター:
+ Sekaran Vellasamy
+ p.o. box 1658
+ Masaka, Uganda, East Africa
+ 
+ オランダからの送金:	私の口座を利用して下さい。
+ Rabobank Venlo, nr. 3765.05.117
+ Postbank, nr. 1644503
+ 
+ ヨーロッパからの送金:
+ 手数料を節約するために、ユーロチェックを私に送って下さい。
+ でも、他の方法でも構いません。
+ 
+ アメリカ、日本からの送金:
+ オランダで換金可能なチェックを送って下さい。
+ どんな"標準的な"銀行小切手でもOKです。
+ 手数料の10ドルを加えるのを忘れないで下さい。
+ 
+ 私の住所は次のとおりです。
+ 
+ 	    Bram Moolenaar   
+             Clematisstraat 30
+             5925 BE  Venlo   
+             The Netherlands. 
+ 
+ プロジェクトのディレクターに、直接、送金しても構いません。
+ どのようにすれば送れるのか、手数料がどの程度かかるのか、私にはわ
+ かりません。
+ 
+ Gold Trust Bank LTD - Kampala
+ a/c no. 36059709
+ Citibank, N.A.
+ Global Clearance Services
+ 111 Wall Street 16th floor
+ New York 10043
+ U.S.A.
+ Beneficiary Mr. Sekaran Vellasamy a/c no. 2100
+ 
diff -crN ../orig/doc.j/vim-jp.htm ./doc.j/vim-jp.htm
*** ../orig/doc.j/vim-jp.htm	Thu Jan 01 09:00:00 1970
--- ./doc.j/vim-jp.htm	Sun Jul 18 23:35:20 1999
***************
*** 0 ****
--- 1,107 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+ <HTML>
+ <HEAD>
+   <TITLE>Vim-jp Mailling List</TITLE>
+   <META http-equiv="Content-Type" content="text/html; charset=SHIFT_JIS">
+   <META http-equiv="Content-Style-Type" content="text/css">
+   <META http-equiv="Expires" content="Sun, 18 Jul 1999 15:02:00 JST">
+   <META name="author" content="kazu">
+   <META name="copyright" content="&copy; 1999 Hitachi, Ltd.">
+   <META name="keywords" content="UNIX">
+   <META name="date" content="1999-07-18T15:02:00+09:00">
+   <LINK rev="made" href="mailto:ka-sakai@ga2.so-net.ne.jp">
+   <LINK rel="Contents" href="index.html">
+ </HEAD>
+ <BODY>
+ <P align="right">Sorry! This page is <FONT color="red">Japanese</FONT> only.</P>
+ 
+ <DIV align="center"><H1><FONT color="green">vim-jp: vim {[OXg</FONT></H1></DIV>
+ <DIV align="center"><H2><FONT color="green"><I>vim-jp@sandalwood.net</I></FONT></H2></DIV>
+ <P align="center"><I><FONT color="olive">the vim &amp; vim-jp ML information $Date: 1999/07/18 15:02 $</FONT></I></P>
+ 
+ <H3><FONT color="green">I</FONT></H3>
+ <P>[OXgCvi N[uvimv{[OXgBJ[UC / oO|[g / @\ _cB</P>
+ <P>C Kazuhiro Sakai ( <A href="mailto:vim-jp-admin@sandalwood.net">vim-jp-admin@sandalwood.net</A> ) sB</P>
+ 
+ <H3><FONT color="green">Q</FONT></H3>
+ <P><A href="mailto:vim-jp-ctl@sandalwood.net">vim-jp-ctl@sandalwood.net</A> s <STRONG>{</STRONG> Lq[B<BR>
+ <BR>
+ <CODE>@@@@subscribe &quot;O&quot;</CODE><BR>
+ <BR>
+  ( Kazuhiro Sakai ) QCB<BR>
+ <BR>
+ <CODE>@@@@subscribe Kazuhiro Sakai</CODE><BR>
+ <BR>
+ [CmFbZ[WMB<BR>
+ <BR>
+ <CODE>
+ @@@@confirm 199907111739315060045 Kazuhiro Sakai<BR>
+ @@@@......<BR>
+ @@@@......<BR>
+ @@@@......<BR>
+ </CODE>
+ <BR>
+ M[ &quot;confirm&quot; ns <A href="mailto:vim-jp-ctl@sandalwood.net">vim-jp-ctl@sandalwood.net</A> MBo^ Welcome bZ[WMB</P>
+ 
+ <!--
+ <FORM method="post" action="#" onSubmit="alert('Tv'); return false;">
+ <TABLE border="1" bgcolor="#CCCCCC" cellpadding="6"><TR><TD>
+   <TABLE>
+     <TR>
+       <TD><NOBR>:</NOBR></TD>
+       <TD><INPUT type="text" size="40" name="to" value="vim-jp-ctl@sandalwood.net"></TD>
+     </TR>
+     <TR>
+       <TD><NOBR>:</NOBR></TD>
+       <TD><INPUT type="text" size="40" name="subject" value=""></TD>
+     </TR>
+     <TR>
+       <TD><NOBR>{:</NOBR></TD>
+       <TD><INPUT type="text" size="40" name="message" value="subscribe Kazuhiro Sakai"></TEXTAREA></TD>
+     </TR>
+     <TR>
+       <TD colspan="2" ALIGN=right><INPUT TYPE=submit VALUE="M"></TD>
+     </TR>
+   </TABLE>
+ </TD></TR></TABLE>
+ </FORM>
+ -->
+ 
+ <H3><FONT color="green">e</FONT></H3>
+ <P><A href="mailto:vim-jp@sandalwood.net">vim-jp@sandalwood.net</A> [B</P>
+ 
+ <H3><FONT color="green">E</FONT></H3>
+ <P><A href="mailto:vim-jp-ctl@sandalwood.net">vim-jp-ctl@sandalwood.net</A> s <STRONG>{</STRONG> Lq[B<BR>
+ <BR>
+ <CODE>@@@@# unsubscribe</CODE><BR>
+ <BR>
+ C[OXg[AhXKvB</P>
+ 
+ <H3><FONT color="green">KChC</FONT></H3>
+ <P><A href="mailto:vim-jp-ctl@sandalwood.net">vim-jp-ctl@sandalwood.net</A> s <STRONG>{</STRONG> Lq[B<BR>
+ <BR>
+ <CODE>@@@@# guide</CODE><BR>
+ <BR>
+ </P>
+ 
+ <H3><FONT color="green"></FONT></H3>
+ <P>{[OXgJCB\BChB</P>
+ <UL>
+   <LI>XPK ( terubou@sandalwood.net )
+   <LI>{Vq ( t92451am@sfc.keio.ac.jp )
+   <LI>yc ( ken_t@st.rim.or.jp )
+ </UL>
+ <P>C[OXgJ\oXC\B</P>
+ 
+ <H3><FONT color="green"></FONT></H3>
+ <UL>
+   <LI>wvQB
+   <LI>HTML `[MB
+   <LI>[OXg <A href="mailto:vim-jp-admin@sandalwood.net">vim-jp-admin@sandalwood.net</A> [ B
+ </UL>
+ 
+ <HR>
+ 
+ <DIV align="right">written by <A href="mailto:vim-jp-admin@sandalwood.net">Kazuhiro Sakai</A></DIV>
+ </BODY>
+ </HTML>
diff -crN ../orig/doc.j/vim.hlp ./doc.j/vim.hlp
*** ../orig/doc.j/vim.hlp	Thu Jan 01 09:00:00 1970
--- ./doc.j/vim.hlp	Fri Oct 17 06:56:48 1997
***************
*** 0 ****
--- 1,569 ----
+                      VIM help file 目次
+ 
+ RETURN  HELP終了                VIM stands for Vi IMproved.
+  SPACE  次ページ表示            Most of VIM was made by Bram Moolenaar.
+      a  この目次に戻る          日本語版HELP by Ogasawara Hiroyuki.
+      b  前のページに戻る
+ 
+ c   カーソル移動                     q   オプション i〜n
+ d   ワード/ブロック単位移動          r   オプション p〜s
+ e   検索                             s   オプション s〜t
+ f   その他の移動/タグジャンプ        t   オプション t〜y
+ g   スクロール                       u   undo, shell, quickfix その他
+ h   挿入モード                       v   コマンドライン編集コマンド
+ i   挿入モードでの操作               w   Exモードの範囲指定と特殊機能
+ j   変更コマンド/シフト              x   fileエディット
+ k   その他の変更コマンド             y   ファイルリスト
+ l   テキスト削除/コピー/移動         z   ファイル書き出しと終了
+ m   繰り返し                         A   VIM起動オプション
+ n   キーマッピング/略語登録          B   ウィンドウ操作コマンド
+ o   オプションコマンド a〜c          C   バッファリストコマンド
+ p   オプション d〜h
+ 
+ Read "reference.doc" for a more complete explanation.
+  カーソル左右移動 
+ N  h            左 ( CTRL-H, BS, [←] も同じ )
+ N  l            右 ( SPACE, [→] も同じ )
+    0            行の先頭へ移動
+    ^            行の先頭文字へ移動(空白を除く)
+ N  $            行末に移動
+ N  |            N文字目に移動する
+ N  f<char>      その行の<char>文字の位置に移動する(右方向検索)
+ N  F<char>      その行の<char>文字の位置に移動する(左方向検索)
+ N  t<char>      その行の<char>文字の位置の左に移動する(右方向検索)
+ N  T<char>      その行の<char>文字の位置の右に移動する(左方向検索)
+ N  ;            f,F,t,T コマンドの次検索
+ N  ,            f,F,t,T コマンドの逆検索
+ 
+  カーソル上下移動 
+ N  k            上 ( CTRL-P, [↑] も同じ )
+ N  j            下 ( CTRL-J, CTRL-N, LF, [↓] も同じ )
+ N  -            上の行の空白でない先頭位置に移動
+ N  +            下の行の空白でない先頭位置に移動 (CTRL-M, CR でも同じ )
+ N  _            N - 1 行下の空白でない位置に移動
+ N  G            N 行目に飛ぶ (デフォルトで最終行へ飛ぶ)
+ N  %            ファイル行数の N パーセント目の位置に飛ぶ
+  ワード移動 
+ N  w            次のワード位置に進む
+ N  W            スペースで区切った次のワード位置に進む
+ N  e            次のワードの最後の位置に進む
+ N  E            スペースで区切った次のワードの最後の位置に進む
+ N  b            前のワード位置に進む
+ N  B            スペースで区切った前のワード位置に進む
+ 
+ Text object motions
+ N  )            N sentences forward
+ N  (            N sentences backward
+ N  }            N paragraphs forward
+ N  {            N paragraphs backward
+ N  ]]           N sections forward
+ N  [[           N sections backward
+ N  ][           N sections (starting with a <}>) forward
+ N  []           N sections (starting with a <}>) backward
+ N  [(  [{       N times back to unclosed <(> or <{>
+ N  ])  ]}       N times forward to unclosed <(> or <{>
+  検索 
+ N  /{pattern}[/]        パターン検索
+ N  ?{pattern}[?]        逆検索
+ N  /                    前方向に再検索
+ N  ?                    逆方向に再検索
+ N  n                    次検索(最後の検索を繰り返し)
+ N  N                    次検索(最後の検索の逆方向繰り返し)
+ N  *                    カーソル位置の単語検索
+ N  #                    カーソル位置の単語逆検索
+ 
+ special characters in search patterns      magic      nomagic
+            matches any single character      .            \.
+                   matches start of line      ^            ^
+                     matches end of line      $            $
+                   matches start of word      \<           \<
+                     matches end of word      \>           \>
+    matches a single char from the range      [a-z]        \[a-z]
+  matches a single char not in the range      [^a-z]       \[^a-z]
+ matches 0 or more of the preceding atom      *            \*
+ matches 1 or more of the preceding atom      \+           \+
+    matches 0 or 1 of the preceding atom      \=           \=
+                  separates two branches      \|           \|
+            group a pattern into an atom      \(\)         \(\)
+  その他の移動コマンド 
+    m<a-zA-Z>    カーソル位置に <a-zA-Z> のマークをつける
+    `<a-zA-Z>    <a-zA-Z> のマーク位置に移動する
+    ``           最後に飛んだマーク位置に移動する
+    `[ or `]     go to the start or end of the previously operated or put text
+    '<a-zA-Z[]'> マーク位置の空白でない行頭へ飛ぶ
+ :marks          マーク位置の表示
+ N  CTRL-O       過去に移動したジャンプ位置を遡る
+ N  CTRL-I       過去に移動したジャンプ位置を進む
+ :jumps          ジャンプ位置のリストを表示する
+    %            括弧の対応位置に飛ぶ, コメントや #if/#else/#endif の対応検索
+                 も可能
+ N  H            現在の画面で最上位位置へ飛ぶ
+    M            現在の画面で真中の位置へ飛ぶ
+ N  L            現在の画面で最下行位置へ飛ぶ
+ 
+  タグジャンプ 
+ :ta[g][!] {tag}         タグ名を指定してその位置へ飛ぶ
+    CTRL-]               カーソル位置の単語をタグとしてジャンプ
+ N  CTRL-T               過去にタグジャンプしたリストを遡る(Pop)
+ :[count]po[p][!]        [count] 番目のタグリスト位置に飛ぶ
+ :[count]ta[g][!]        [count] 番目のタグリスト位置に飛ぶ
+ :tags                   タグリストを表示
+  スクロール 
+ N  CTRL-E       表示を行スクロールアップ
+ N  CTRL-D       画面の半分行進む (N行)
+ N  CTRL-F       次ページ (Nページ)
+ N  CTRL-Y       表示を行スクロールダウン
+ N  CTRL-U       画面の半分行戻る (N行)
+ N  CTRL-B       前ページ (Nページ)
+    z<CR> or zt  カーソル行が1番上になるよう書き直し
+    z.    or zz  カーソル行が中心になるよう書き直し
+    z-    or zb  カーソル行が1番下になるよう書き直し
+  挿入 
+ N  a            カーソル位置の次の文字位置へ挿入(挿入モードへ)
+ N  A            行の最後に追加(挿入モードへ)
+ N  i            カーソル位置に挿入(挿入モードへ)
+ N  I            行の空白でない最初の位置に挿入(挿入モードへ)
+ N  o            次の行に挿入(挿入モードへ)
+ N  O            前の行に挿入(挿入モードへ)
+ 
+  その他の挿入 
+ :r [file]       ファイル内容をカーソル位置に取り込む
+ :r!{command}    コマンドを実行した結果(stdout)を取り込む
+ 
+ Digraphs
+ :dig[raphs]     show current list of digraphs
+ :dig[raphs] {char1}{char2} {number} ...
+                 add digraph(s) to the list
+  挿入モードでの操作               action in insert mode
+ CTRL-[ or <ESC>   挿入モードを終了する
+ CTRL-A            最後に挿入したテキストを取り込む
+ CTRL-@            CTRL+Aで取り込まれるテキストをクリアする
+ CTRL-R <0-9a-z%:> 指定したカットバッファの内容を取り込む
+ CTRL-J or <LF> or CTRL-M or <CR>   改行
+ CTRL-K {char1} {char2}  enter digraph
+ CTRL-E / CTRL-Y   次の行/前の行をコピーする
+ CTRL-V            コントロールキーの挿入を指定する
+ CTRL-N / CTRL-P   テキスト内から単語検索をする
+ CTRL-H or <BS> or <DEL> 前の1文字を消す
+ CTRL-W            前のワードを消す
+ CTRL-U            挿入した行を消す
+ CTRL-T            挿入行のインデント変更(右シフト)
+ CTRL-D            挿入行のインデント変更(左シフト)
+ 0 CTRL-D or ^ CTRL-D    挿入行のインデント全削除
+ {char1} <BS> {char2}    enter digraph if 'dg' option set
+ CTRL-B            逆挿入モードのトグルチェンジ
+          挿入モードでのダイレクトカーソル移動 
+ カーソルキー      挿入位置を変更
+ SHIFT[↑]/[↓]    1画面戻る/進む(X68K版未対応)
+ SHIFT[←]/[→]    ワード左右移動(X68K版未対応)
+ CTRL-O {command}  挿入モードから移動コマンドを実行する(CTRL-Ojなど)
+  変更コマンド 
+ N  R            重ね書き(変更モードへ)
+ N  c{motion}    指定範囲変更(挿入モードへ)
+ {visual}c       指定範囲を置き換える(挿入モードへ)
+ N  cc           行変更(挿入モードへ)
+ N  C            行末まで変更(挿入モードへ)
+ N  s            文字変更(挿入モードへ)
+ N  S            行変更(挿入モードへ)
+ N  r<char>      次の1文字へ置換
+ N  ~            カーソル位置のアルファベットの大文字小文字変換
+ {visual}~       指定範囲の大文字小文字変換
+ {visual}u       指定範囲の小文字変換
+ {visual}U       指定範囲の大文字変換
+ N  CTRL-A       カーソル位置の数値ワードに N を加える(C言語定数値)
+ N  CTRL-X       カーソル位置の数値ワードから N を引く
+ N  <{motion}    左シフト(シフト文字幅はshiftwidthで指定する)
+ N  <<           N 行左シフト
+ N  >{motion}    右シフト
+ N  >>           N 行右シフト
+ N  Q{motion}    textwidth オプションに従ってをフォーマットする
+ :[range]ce[nter] [width]   センタリング
+ :[range]le[ft] [indent]    左よせ
+ :[range]ri[ght] [width]    右よせ
+  その他の変更 
+    v            文字範囲指定開始               } カーソル移動によって
+    V            行範囲指定開始                 } 反転して示す範囲を変
+    CTRL-V       ブロック範囲指定開始           } 更
+    o            反転指定領域でのカーソル位置を先頭と最後で交換する
+ 
+ N  !{motion}{command}
+                 指定範囲をフィルタプログラムにかける
+ N  !!{command}
+                 N 行をフィルタプログラムにかける
+ :[range]!{command}
+                 指定範囲をフィルタプログラムにかける
+ N  ={motion}{command}
+                 フィルタ indent にかける (プログラムは 'equalprg' で指定)
+ N  =={command}
+                 N 行をフィルタ indent にかける
+ :[range]s[ubstitute]/{pattern}/{string}/[g][c]
+                 [range] の範囲で {pattern} を {string} に置換する
+                 [g]は現れた全部のパターンを置換,[c]は確認置換
+ :[range]s[ubstitute] [g][c]
+                 前に実行した :s コマンドをもう一度実行する
+    &            前に実行した :s コマンドを現在行に対して実行する
+ 
+  削除コマンド 
+ N  x            カーソル位置の文字削除 (N文字)
+ N  X            カーソル位置の前の文字削除 (N文字)
+ N  d{motion}    指定範囲削除
+ {visual}d       指定範囲削除
+ N  dd           行削除 (N行)
+ N  D            カーソル位置から行末まで削除
+ N  J            次の行と連結する
+ {visual}J       指定範囲を行連結する
+ :[range]d [x]   指定範囲 [range] lines 削除しカットバッファ[x]に取り込む
+ 
+  テキストコピー/移動コマンド 
+    "<char>      次の操作で取り込むカットバッファを指定する
+ :dis            現在の各カットバッファの内容を表示する
+ N  y{motion}    テキスト内容を取り込む (カットバッファへコピー)
+ {visual}y       指定範囲を取り込む
+ N  yy           行取り込み (N行)
+ N  Y            行取り込み (N行)
+ N  p            カットバッファの内容をカーソル位置の次に挿入する
+ N  P            カットバッファの内容をカーソル位置の前に挿入する
+ N  ]p           インデント調整つきの p
+ N  [p           インデント調整つきの P
+  繰り返し 
+ N  .            最後の変更コマンドを繰り返す
+    q<a-z>       キーボードマクロの記録開始 (<a-z>はマクロ名)
+    q            キーボードマクロの記録停止
+ N  @<a-z>       キーボードマクロ実行
+ N  @@           キーボードマクロの実行繰り返し
+ :@<a-z>         キーボードマクロ実行
+ :@@             キーボードマクロ繰り返し
+ :[range]g[lobal]/{pattern}/[cmd]
+                 パターンマッチした行に対して指定の Ex コマンドを実行する
+                 Exコマンドのデフォルトは p
+ :[range]g[lobal]!/{pattern}/[cmd]
+                 パターンマッチしなかった行に対して指定の Ex コマンドを実
+                 行する。Exコマンドのデフォルトは p
+ :so[urce] {file}
+                 Ex コマンドをファイルから読み込んで実行する
+ :so[urce]! {file}
+                 VIM コマンドをファイルから読み込んで実行する
+ :sl[eep] [N]    N 秒 sleep する
+ N  gs           N 秒 sleep する
+  キーマッピング 
+ :ma[p] {lhs} {rhs}      ノーマルモードで {lhs} に {rhs} を定義
+ :ma[p]! {lhs} {rhs}     挿入/コマンドモードで {lhs} に {rhs} を定義
+ :no[remap][!] {lhs} {rhs}
+                         :map と同じ
+ :unm[ap] {lhs}          ノーマルモードでの {lhs} の定義内容を削除する
+ :unm[ap]! {lhs}         挿入/コマンドモードでの {lhs} の定義内容を削除する
+ :ma[p] [lhs]            ノーマルモードでの定義内容の表示
+ :ma[p]! [lhs]           挿入/コマンドモードでの定義内容の表示
+ :cmap/:cunmap/:cnoremap コマンドモードでのみ有効な map/unmap/noremap コマンド
+ :imap/:iunmap/:inoremap 挿入モードでのみ有効な map/unmap/noremap コマンド
+ :mk[exrc][!] [file]     現在の設定内容をファイルに書き出す(デフォルト .exrc)
+                         すでに .exrc がある場合は ! が必要
+ :mkv[imrc][!] [file]    デフォルトファイル名が .vimrc なだけで :mkexrc と同じ
+ 
+  略語登録 
+ :ab[breviate] {lhs} {rhs}    略語を登録する ({lhs} が {rhs} と同じになる)
+ :ab[breviate] {lhs}          {lhs} がどう展開されるか表示する
+ :ab[breviate]                登録されている略語を全部表示する
+ :una[bbreviate] {lhs}        指定単語の略語登録を削除する
+ :iab/:cab/:iunab/:cunab/:noreab/:cnoreab/:inoreab    これらも同じ
+  オプション 
+ :se[t]                  変更したオプションを表示する
+ :se[t] all              全部のオプションを表示する
+ :se[t] {option}         オプションを ON にする(or STR/NUMオプション内容の表示)
+ :se[t] no{option}       オプションを OFF にする
+ :se[t] inv{option}      オプションの状態を反転する(トグル)
+ :se[t] {option}={value} 文字列または数値オプションに値を設定する
+ :se[t] {option}?        オプションの内容を表示
+ 
+  オプション(略記)    type  default        effect
+ autoindent (ai)     toggle    off   挿入モードで前行のインデントをコピーする
+ autowrite (aw)      toggle    off   新編集時に現在の変更をファイルを書き出す
+ backspace (bs)      number    0     0:通常のVi, 1:改行も消せる, 2:全部消せる
+ backup (bk)         toggle    on    バックアップファイルを作る
+ backupdir (bdir)    string    "~/"  バックアップディレクトリの指定
+ binary (bin)        toggle    off   バイナリーモード
+ bioskey (bk)        toggle    on    MSDOS: use bios to get characters
+ cmdheight (ch)      number     1    コマンド行の行数
+ columns (co)        number    80    画面の桁数
+ compatible (cp)     toggle    off   vi 完全コンパチモード指定
+  オプション(略記)    type  default        effect
+ digraph (dg)        toggle    off   enable <BS> digraphs in insert mode
+ directory (dir)     string    ""    スワップファイルを置くディレクトリ指定
+ edcompatible        toggle    off   flags for :substitute toggle
+ endofline (eol)     toggle    on    last line has a newline character
+ equalalways (ea)    toggle    on    ウィンドウ開閉時,常に全部同じサイズにする
+ equalprg (ep)       string    "indent"  '=' コマンドで使うプログラム名
+ errorbells (eb)     toggle    off   ring the bell for error messages
+ errorfile (ef)      string    "AztecC.Err" file for QuickFix option
+ errorformat (efm)   string          コンパイラエラーメッセージのフォーマット
+ esckeys (ek)        toggle    on    <ESC>キーの単独判定待ちをする
+ expandtab (et)      toggle    off   insert mode: use spaces to enter a tab
+ exrc                toggle    off   カレントの .exrc/.vimrc を読み込む
+ formatprg (fp)      string    ""    'Q'で外部呼び出しする場合のプログラム名
+ gdefault (gd)       toggle    off   the 'g' flag is default on for :substitute
+ graphic (gr)        toggle    off   日本語版では意味を持たない
+ helpfile (hf)       string    "vim:vim.hlp"     ヘルプファイル名
+ hidden (hid)        toggle    off   buffers become hidden when abandoned
+ highlight (hl)      string    "db,es,hs,rs,vi,si"   when to use higlighting
+ history (hi)        number    20    コマンド行ヒストリの保存デー多数
+  オプション(略記)    type  default        effect
+ icon                toggle    off   set icon title to file name
+ ignorecase (ic)     toggle    off   ignore case in search patterns
+ insertmode (im)     toggle    off   起動直後即 insert mode にする
+ joinspaces (js)     toggle    on    行連結時 '.' の後ろはスペースを2つ入れる
+ keywordprg (kp)     string    "ref" 'K'command で起動するプログラム名
+ laststatus (ls)     number    1     STATUS行設定 0:single状態or最下WINには付か
+                                     ない,1:WIN分割時は全部に付く,2:常に付く
+ lines               number    25    画面の行数
+ list                toggle    off   TAB,改行を表示文字として表示
+ magic               toggle    on    different pattern matching characters
+ makeprg (mp)        string    "make" ':make'commandで呼び出すプログラム名
+ maxmem (mm)         number    512   How may Kbyte to use for one buffer
+ maxmemtot (mmt)     number    512   How may Kbyte to use for all buffers
+ modeline (ml)       toggle    on    ファイルのモード行設定を有効にする
+ modelines (mls)     number    5     モード行の存在を調べる行範囲
+ more                toggle    on    長いリスト表示時は画面単位で一時停止する
+ number (nu)         toggle    off   行番号を表示する
+  オプション(略記)    type  default        effect
+ paragraphs (para)   string    "IPLPPPQPP LIpplpipbp"
+                                     nroff macros that separate paragraphs
+ paste               toggle    off   paste mode: insert literally
+ patchmode (pm)      string    ""    extension to use when patching files
+ readonly (ro)       toggle    off   overwriting the file not allowed
+ remap               toggle    on    :map command works recursively
+ report              number    2     minimal number of lines for reporting
+ revins (ri)         toggle    off   insert characters right to left
+ ruler (ru)          toggle    off   show cursor position in status line
+ scroll              number    12    scroll size for CTRL-U and CTRL-D
+ scrolljump (sj)     number    1     minimal number of lines for scrolling
+ sections (sect)     string    "SHNHH HUnhsh"      macros separating sections
+ secure              toggle    off   security checks for .vimrc and .exrc
+ shell (sh)          string    "sh"  shell to use for ! and :! commands
+ shellpipe (sh)      string          pipe command to be used for :make
+ shelltype (st)      number    0     how to use the shell (Amiga only)
+ shiftround (sr)     toggle    off   round indent to shiftwidth with > and <
+ shiftwidth (sw)     number    8     number of spaces to use for (auto)indent
+ shortname (sn)      toggle    off   MSDOS-like filesystem being used
+ showcmd (sc)        toggle    on    show command in status line
+ showmatch (sm)      toggle    off   show matching bracket if one is inserted
+ option (shorthand)   type  default        effect
+ showmode (smd)      toggle    on    show insert/replace mode message
+ sidescroll (ss)     number    0     minimal nr of columns for horiz. scroll
+ smartindent (si)    toggle    off   do smart autoindenting
+ smarttab (sta)      toggle    off   tab size depends on position
+ splitbelow (sb)     toggle    off   create new windows below current one
+ suffixes (su)       string    ".bak.o.h.info.swp" suffixes that are ignored
+                                     when multiple files match a wildcard
+ tabstop (ts)        number    8     number of spaces that a TAB counts for
+ taglength (tl)      number    0     if non-zero, tags are significant upto
+                                         this number of characters
+ tagrelative (tr)    toggle    on    file names in tags file are relative
+ tags                string    "tags"   names of tag files
+ term                string    "amiga"   name of terminal
+ terse               toggle    off   make some messages shorter
+ textauto (ta)       toggle    on    detect line separator, (re)set 'textmode'
+ textmode (tx)       toggle    off   use <CR><LF> for line separator
+ textwidth (tw)      number    0     maximum width of a line in insert mode
+ tildeop (to)        toggle    off   tilde behaves like an operator
+ timeout             toggle    on    wait only 'tm' msec for mappings&key codes
+ option (shorthand)   type  default        effect
+ ttimeout            toggle    off   wait only 'tm' msec for key codes
+ timeoutlen (tm)     number    1000  milliseconds to wait for mappings&key codes
+ title               toggle    on    set window title to file name
+ ttyfast (tf)        toggle    off   don't use scroll commands for terminal
+ undolevels (ul)     number    100   number of changes that can be undone
+                                         (0 for Vi compatibility)
+ updatecount (uc)    number    200   指定したキー操作回数毎に swap ファイル作成
+ updatetime (ut)     number    4000  指定した時間(msec)経過毎に swap file 作成
+ visualbell (vb)     toggle    off   use visual instead of audible beep
+ warn                toggle    on    warn when changes and shell command used
+ weirdinvert (wi)    toggle    off   terminal has a weird invert behaviour
+ whichwrap (ww)      number    3     which left/right move commands wrap
+ wildchar (wc)       number    TAB   コマンド行補完で使うキーコード指定
+ winheight (wh)      number    0     minimal number of lines for current window
+ wrap                toggle    on    水平スクロールの禁止
+ wrapmargin (wm)     number    0     wrap text when at (columns - wrapmargin)
+ wrapscan (ws)       toggle    on    searches wrap around the end of the file
+ writeany (wa)       toggle    off   always write file without asking
+ writebackup (wb)    toggle    on    backup a file WHILE overwriting it
+ yankendofline (ye)  toggle    off   'Y' yanks from cursor to end of line
+  Undo/Redo 
+ N  u            最後の変更を取り消す
+ N  CTRL-R       UNDO を戻す
+    U            最後に変更した行の変更を取り消す
+  外部コマンド実行 
+ :sh             シェル起動
+ :!{command}     シェルコマンドの実行
+    K            カレントワードを引数にしてプログラム'keywordprg'実行
+  Quickfix コマンド 
+ :cc [nr]        エラー表示 [nr] (default 現在注目しているエラー表示)
+ :cn             次のエラー表示
+ :cp             前のエラー表示
+ :cl             全部のエラー内容を表示する
+ :cf             エラーファイルを新たに読み込む
+ :cq             コンパイラのエラーコードを持って強制終了
+ :make [args]    make を実行後エラー内容を読み込み最初のエラー行にジャンプする
+  その他のコマンド 
+    CTRL-L       画面の再描画
+    CTRL-G       ファイル名,カーソル位置情報の表示
+    CTRL-C       処理中断
+    <DEL>        直前に入力した回数指定値を取り消す
+ :vers           VIM のバージョン表示
+ :mode N         MSDOS: set screen mode to N (number, C80, C4350, etc.)
+  コマンド行編集 
+ <ESC>              コマンドモード終了
+ CTRL-V {char}      コントロールコード入力
+ CTRL-V {number}    8進数数値によるコード入力(数値3桁必要)
+ [←]/[→]          カーソル移動
+ SHIFT+[←]/[→]    カーソルワード移動
+ CTRL-B/CTRL-E      行の先頭/最終位置へ移動
+ <BS>               カーソル位置の前の文字削除
+ <DEL>              カーソル位置の文字削除
+ CTRL-W             ワード削除
+ CTRL-U             行内容全削除
+ [↑]/[↓]          コマンド行ヒストリ
+ [SC_UP]/[SC_DOWN]  コマンド行ヒストリ(ROLLUP/ROLLDOWN)
+ 
+  コマンド行補完 
+ 'wildchar'  (def. <TAB>)  カーソル位置の単語を補完する
+ CTRL-D             マッチする単語のリストを表示する
+ CTRL-A             マッチする単語全部を取り込む
+ CTRL-L             候補が複数ある場合最大マッチする位置まで補完する
+ CTRL-N             補完の次検索
+ CTRL-P             補完の前検索
+  Ex モードの範囲指定 
+ ,               2つの行番号を,で区切って指定する
+ ;               idem, set cursor to the first line number
+ 
+ {number}        絶対行番号
+ .               カレント行(カーソル行)
+ $               ファイルの最終行
+ %               1,$ と同じ(1行目から最終行まで,つまりファイル全体)
+ 't              tのマーク位置
+ /{pattern}      パターンマッチした行
+ ?{pattern}      パターンマッチした行(逆検索)
+ 
+ +[num]          行番号の加算 (default 1)
+ -[num]          行番号の減算 (default 1)
+ 
+  Ex 特殊文字 
+     |           コマンドセパレータ (not for ":global" and ":!")
+     "           コメント
+     #[number]   番号で指定したファイルネーム
+     %           カレントファイルネーム
+     %<  or #<   idem, but without extension
+  ファイル編集 
+ :e                      Edit the current file, unless changes have been made.
+ :e!                     Edit the current file always. Discard any changes.
+ :e[dit] {file}          Edit {file}, unless changes have been made.
+ :e[dit]! {file}         Edit {file} always. Discard any changes.
+ N   CTRL-^              Edit alternate file N (equivalent to ":e #N").
+ gf  or ]f               Edit the file whose name is under the cursor
+ :pwd                    カレントディレクトリ名表示
+ :cd [path]              カレントディレクトリを変更する
+ :f[ile]                 カレントのファイル名,カーソル位置情報を表示する
+ :f[ile] {name}          カレントファイル名を設定する
+ :files                  Show alternate file names.
+ 
+ Using the file list
+ :ar[gs]                 Print the file list, with the current file in "[]".
+ :all  or :sall          Open a window for every file.
+ :wn[ext][!]             Write file and edit next file.
+ :wn[ext][!] {file}      Write to {file} and edit next file, unless {file}
+                         exists. With ! overwrite existing files.
+ :wN[ext][!] [file]      Write file and edit previous file.
+ 
+ in current window    in new window
+ :argu[ment] N        :sar[gument] N        Edit file N
+ :n[ext]              :sn[ext]              Edit next file
+ :n[ext] {filelist}   :sn[ext] {filelist}   define new list of files and edit
+                                                 the first one
+ :N[ext]              :sN[ext]              Edit previous file
+ :rew[ind][!]         :srew[ind]            Edit first file
+ :last                :slast                Edit last file
+ 
+  書き込みと終了 
+ :[range]w[rite][!]      カレントファイルに書き込む
+ :[range]w[rite] {file}  指定ファイルに書き込む({file}が既にあると書き込めない)
+ :[range]w[rite]! {file} 指定ファイルが存在していても重ね書きする
+ :[range]w[rite][!] >>   カレントファイルに追加書き込みする
+ :[range]w[rite][!] >> {file}
+                         指定ファイルに追加書き込みする
+ :[range]w[rite] !{cmd}  指定コマンドの標準入力として実行する
+ :wall[!]                全部の更新したバッファをファイルに書き込む
+ 
+ :q[uit]                 終了する,更新してある場合は終了できない
+ :q[uit]!                更新があったとしてもそれを無視して強制終了する
+ :qall[!]                全部のウィンドウバッファを終了する
+ :cq                     エラーコードを持って強制終了する
+ :wq[!]                  カレントファイルに書き込んで終了する
+ :wq[!] {file}           指定ファイルに書き込んで終了する
+ :x[it][!] [file]        更新されていればファイルに書き込んで終了する
+    ZZ                   ":x" と同じ
+ :xall[!]  or :wqall[!]  全部の更新されたバッファを書き込んで終了する
+ 
+ :st[op][!]              サスペンドまたはチャイルドシェル起動.もし'aw'オプショ
+                         ンが設定されていてかつ ! がなければバッファを書き込む
+ CTRL-Z                  ":stop!" と同じ
+  起動方法 
+ vim [options]           空のバッファで編集開始
+ vim [options] {file ..} ファイルの編集開始(複数ファイル指定可能)
+ vim [options] -t {tag}  指定タグの含まれるファイルを編集する
+ vim [options] -e [fname] QuickFix mode で編集開始,最初のエラーを表示する
+  起動オプション 
+ +[num]                  指定行から編集を開始する(デフォルトで最終行から)
+ +/{pat} {file ..}       最初にパターンの現れた行から編集を開始する
+ -v                      View モード(read-only) -n の機能も含む
+ -b                      バイナリーモード
+ -r                      .swp ファイルから編集中のファイルを復活させる
+ -n                      .swp ファイルを作らない
+ -o [N]                  N 個のウィンドウを開いて起動する
+ -x                      do not restart VIM to open a window (for e.g. mail)
+ -s {scriptin}           最初にコマンドスクリプトファイルを読み込ませる
+ -w {scriptout}          タイプしたキーを全部スクリプトファイルに書き出す
+ -T {terminal}           termcap のターミナル名を指定する
+ -d {device}             open {device} to be used as a console (Vimでは未使用)
+ 
+  ファイル単位の自動オプション設定 
+ vim:{set-arg}: ..       ファイルの先頭または最終行にsetコマンドで指定できる
+                         オプションを書くことができる(モード行)
+  マルチウィンドウ機能 
+ CTRL-W s  or :split     ウィンドウを2つに分ける
+ :split <file>           分割したウィンドウにファイルを読み込む
+ CTRL-W ]                ウィンドウを分割してカーソル位置のタグジャンプする
+ CTRL-W f                ウィンドウを分割してカーソル位置のファイルを読み込む
+ CTRL-W n  or :new       空の新しいウィンドウを開く
+ CTRL-W q  or :q[uit]    ウィンドウを閉じて編集を中止する
+ CTRL-W c  or :cl[ose]   ウィンドウを閉じる(編集バッファは残る)
+ CTRL-W o  or :o[nly]    カレント以外のウィンドウを全部閉じる
+ 
+ CTRL-W j                下のウィンドウに移動する
+ CTRL-W k                上のウィンドウに移動する
+ CTRL-W CTRL-W           次のウィンドウに進む
+ CTRL-W p                前のウィンドウに戻る
+ 
+ CTRL-W r                ウィンドウの位置を交換する
+ CTRL-W R                ウィンドウの位置を交換する(逆回転)
+ CTRL-W x                次のウィンドウと位置を交換する
+ 
+ CTRL-W =                全部のウィンドウの大きさを同じにする
+ CTRL-W -                カレントウィンドウを小さくする
+ CTRL-W +                カレントウィンドウを広げる
+ CTRL-W _                カレントウィンドウの大きさを最大まで広げる
+  バッファリスト機能 
+ :buffers  or :files     バッファとファイル名を全部表示する
+ 
+ :ball     or :sball     全部のバッファを編集状態にする
+ :unhide   or :sunhide   全部の空でないバッファを表に出す
+ 
+ カレントウィンドウ     新ウィンドウ
+ :[N]buffer [N]       :[N]sbuffer [N]       to arg/buf N
+ :[N]bnext [N]        :[N]sbnext [N]        to Nth next arg/buf
+ :[N]bNext [N]        :[N]sbNext [N]        to Nth previous arg/buf
+ :[N]bprevious [N]    :[N]sbprevious [N]    to Nth previous arg/buf
+ :brewind             :sbrewind             to first arg/buf
+ :blast               :sblast               to last arg/buf
+ :[N]bmod [N]         :[N]sbmod [N]         to Nth modified buf
+ 
+ :bunload[!] [N]          unload buffer [N] from memory
+ :bdelete[!] [N]          unload buffer [N] and delete it from the buffer list
diff -crN ../orig/doc.j/vim32.ini ./doc.j/vim32.ini
*** ../orig/doc.j/vim32.ini	Thu Jan 01 09:00:00 1970
--- ./doc.j/vim32.ini	Sun Feb 21 19:13:48 1999
***************
*** 0 ****
--- 1,31 ----
+ [vim]
+ ; vgAEgR}ht@C
+ printer="d:\bin\wlprt32.exe"
+ ; UNICODE \=1 =0
+ unicode=0
+ ; s
+ cols=80
+ ; s
+ rows=25
+ ; XN[o[ \=1 =0
+ scrollbar=1
+ ; rbg}bvt@C
+ bitmap=d:\usr\test\photo.bmp
+ ; WAVE t@C
+ wave=d:\usr\test\file011.wav
+ ; p BDF t@C
+ bdffile=d:\usr\test\7x14rkmaru.bdf
+ ; { BDF t@C
+ jbdffile=d:\usr\test\maru14.bdf
+ ; BDF \=1 =0
+ bdf=0
+ ; tHg
+ fontname=lr SVbN
+ ; tHgTCY
+ fontsize=12
+ ; eLXgF  white/black/blue A RGB  10 il
+ textcolor=blue
+ ;textcolor=8388608
+ ; wiF  white/black/blue A RGB  10 il
+ backcolor=white
+ ;backcolor=16777215
Only in ../orig/src: addcr.bat
Only in ../orig/src: addcr.c
diff -crN ../orig/src/alloc.c ./src/alloc.c
*** ../orig/src/alloc.c	Wed Aug 10 13:54:10 1994
--- ./src/alloc.c	Sat Apr 04 17:19:18 1998
***************
*** 16,21 ****
--- 16,24 ----
  #include "vim.h"
  #include "globals.h"
  #include "proto.h"
+ #ifdef KANJI
+ #include "kanji.h"
+ #endif
  
  /*
   * Some memory is reserved for error messages and for being able to
***************
*** 43,49 ****
  	static int	releasing = FALSE;	/* don't do mf_release_all() recursive */
  	int			try_again;
  
! #ifdef MSDOS
  	if (size >= 0xfff0)			/* in MSDOS we can't deal with >64K blocks */
  		p = NULL;
  	else
--- 46,52 ----
  	static int	releasing = FALSE;	/* don't do mf_release_all() recursive */
  	int			try_again;
  
! #if defined(MSDOS) && !defined(NT)
  	if (size >= 0xfff0)			/* in MSDOS we can't deal with >64K blocks */
  		p = NULL;
  	else
***************
*** 222,227 ****
--- 225,243 ----
  {
  	while (len)
  	{
+ #ifdef KANJI
+ 		if (ISkanji(*s1) != ISkanji(*s2))
+ 			return 1;						/* this character different */
+ 		if (ISkanji(*s1))
+ 		{
+ 			if (s1[0] != s2[0] || s1[1] != s2[1])
+ 				return 1;					/* this character different */
+ 			++s1;
+ 			++s2;
+ 			--len;
+ 		}
+ 		else
+ #endif
  		if (TO_UPPER(*s1) != TO_UPPER(*s2))
  			return 1;						/* this character different */
  		if (*s1 == NUL)
***************
*** 229,234 ****
--- 245,277 ----
  		++s1;
  		++s2;
  		--len;
+ 	}
+ 	return 0;								/* strings match */
+ }
+ 
+ 	int
+ vim_stricmp(s1, s2)
+ 	char	*s1;
+ 	char	*s2;
+ {
+ 	while (*s1)
+ 	{
+ #ifdef KANJI
+ 		if (ISkanji((char_u)*s1) != ISkanji((char_u)*s2))
+ 			return 1;						/* this character different */
+ 		if (ISkanji((char_u)*s1))
+ 		{
+ 			if (s1[0] != s2[0] || s1[1] != s2[1])
+ 				return 1;					/* this character different */
+ 			++s1;
+ 			++s2;
+ 		}
+ 		else
+ #endif
+ 		if (TO_UPPER(*s1) != TO_UPPER(*s2))
+ 			return 1;						/* this character different */
+ 		++s1;
+ 		++s2;
  	}
  	return 0;								/* strings match */
  }
Only in ../orig/src: amiga.c
Only in ../orig/src: amiga.h
Only in ../orig/src: archie.c
Only in ../orig/src: archie.h
Only in ../orig/src: arp_prot.h
Only in ../orig/src: arpbase.h
diff -crN ../orig/src/bdf/mw32bdf.c ./src/bdf/mw32bdf.c
*** ../orig/src/bdf/mw32bdf.c	Thu Jan 01 09:00:00 1970
--- ./src/bdf/mw32bdf.c	Wed Oct 20 00:24:46 1999
***************
*** 0 ****
--- 1,964 ----
+ /*****************************************
+   Meadow BDF font manager
+          Written by H.Miyashita.
+ ******************************************/
+ 
+ /*****************************************
+ 
+ 	This module provides these functions.
+ 
+ 		bdffont *mw32_init_bdf_font(char *filename);
+ 
+ 		void mw32_free_bdf_font(bdffont *fontp);
+ 
+ 		int mw32_get_bdf_glyph(bdffont *fontp, int index, int size,
+ 													glyph_struct *glyph);
+ 
+ 		int mw32_BDF_TextOut(HDC hdc, int left,
+ 						int top, unsigned char *text, int dim, int bytelen,
+ 						int fixed_pitch_size);
+ 
+ ******************************************/
+ #include <windows.h>
+ #include "mw32bdf.h"
+ 
+ static char		*g_bdffile = NULL;
+ static char		*g_jbdffile = NULL;
+ static bdffont *g_bdffontp = NULL;
+ static bdffont *g_jbdffontp = NULL;
+ static int		g_xsize;
+ static int		g_ysize;
+ static int		g_fix;
+ static BOOL		bJpn;
+ 
+ void mw32_free_bdf_font(bdffont *fontp);
+ bdffont *mw32_init_bdf_font(char *filename);
+ static int compchr(char *text, int len, char ch);
+ 
+ static int 
+ search_file_line(char *key, char *start, int len, char **val, char **next)
+ {
+ 	int linelen;
+ 	unsigned char *p;
+ 
+ 	p = memchr(start, '\n', len);
+ 	if (!p)
+ 		return -1;
+ 	for (;start < p;start++)
+ 	{
+ 		if ((*start != ' ') || (*start != '\t'))
+ 			break;
+ 	}
+ 	linelen = p - start + 1;
+ 	*next = p + 1;
+ 	if (strncmp(start, key, min(strlen(key), linelen)) == 0)
+ 	{
+ 		*val = start + strlen(key);
+ 		return 1;
+ 	}
+ 	return 0;
+ }
+ 
+ static int
+ proceed_file_line(char *key, char *start, int *len, char **val, char **next)
+ {
+ 	int flag = 0;
+ 
+ 	do {
+ 		flag = search_file_line(key, start, *len, val, next);
+ 		*len -= (int)(*next - start);
+ 		start = *next;
+ 	} while(flag == 0);
+ 
+ 	if (flag == -1)
+ 		return 0;
+ 	return 1;
+ }
+    
+ static int
+ set_bdf_font_info(bdffont *fontp)
+ {
+ 	unsigned char *start, *p, *q;
+ 	int len, flag;
+ 	int bbw, bbh, bbx, bby;
+ 	int val1;
+ 
+ 	len = fontp->size;
+ 	start = fontp->font;
+ 
+ 	fontp->yoffset = 0;
+ 	fontp->relative_compose = 0;
+ 	fontp->default_ascent = 0;
+ 
+ 	flag = proceed_file_line("FONTBOUNDINGBOX", start, &len, &p, &q);
+ 	if (!flag)
+ 		return 0;
+ 	bbw = strtol(p, &start, 10);
+ 	p = start;
+ 	bbh = strtol(p, &start, 10);
+ 	p = start;
+ 	bbx = strtol(p, &start, 10);
+ 	p = start;
+ 	bby = strtol(p, &start, 10);
+ 
+ 	fontp->llx = bbx;
+ 	fontp->lly = bby;
+ 	fontp->urx = bbw + bbx;
+ 	fontp->ury = bbh + bby;
+ 
+ 	start = q;
+ 	flag = proceed_file_line("STARTPROPERTIES", start, &len, &p, &q);
+ 	if (!flag)
+ 		return 1;
+ 
+ 	do {
+ 		start = q;
+ 		if (search_file_line("PIXEL_SIZE", start, len, &p, &q) == 1)
+ 		{
+ 			val1 = atoi(p);
+ 		}
+ 		else if (search_file_line("FONT_ASCENT", start, len, &p, &q) == 1)
+ 		{
+ 			val1 = atoi(p);
+ 			fontp->ury = val1;
+ 		}
+ 		else if (search_file_line("FONT_DESCENT", start, len, &p, &q) == 1)
+ 		{
+ 			val1 = atoi(p);
+ 			fontp->lly = -val1;
+ 		}
+ 		else if (search_file_line("_MULE_BASELINE_OFFSET", start, len, &p, &q) == 1)
+ 		{
+ 			val1 = atoi(p);
+ 			fontp->yoffset = -val1;
+ 		}
+ 		else if (search_file_line("_MULE_RELATIVE_COMPOSE", start, len, &p, &q) == 1)
+ 		{
+ 			val1 = atoi(p);
+ 			fontp->relative_compose = val1;
+ 		}
+ 		else if (search_file_line("_MULE_DEFAULT_ASCENT", start, len, &p, &q) == 1)
+ 		{
+ 			val1 = atoi(p);
+ 			fontp->default_ascent = val1;
+ 		}
+ 		else
+ 		{
+ 			flag = search_file_line("ENDPROPERTIES", start, len, &p, &q);
+ 		}
+ 		if (flag == -1)
+ 			return 0;
+ 		len -= (q - start);
+ 	} while (flag == 0);
+ 	start = q;
+ 	flag = proceed_file_line("CHARS", start, &len, &p, &q);
+ 	if (!flag)
+ 		return 0;
+ 	fontp->seeked = q;
+ 	return 1;
+ }
+ 
+ bdffont*
+ mw32_init_bdf_font(char *filename)
+ {
+ 	HANDLE hfile, hfilemap;
+ 	bdffont *bdffontp;
+ 	unsigned char *font;
+ 	BY_HANDLE_FILE_INFORMATION fileinfo;
+ 	int i;
+ 
+ 	hfile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL,
+ 									OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+ 	if (hfile == INVALID_HANDLE_VALUE)
+ 		return NULL;
+ 	if (!GetFileInformationByHandle(hfile, &fileinfo) ||
+ 							(fileinfo.nFileSizeHigh != 0) ||
+ 							(fileinfo.nFileSizeLow > BDF_FILE_SIZE_MAX))
+ 	{
+ 		CloseHandle(hfile);
+ 		return NULL;
+ 	}
+ 	hfilemap = CreateFileMapping(hfile, NULL, PAGE_READONLY, 0, 0, NULL);
+ 	if (hfilemap == INVALID_HANDLE_VALUE)
+ 	{
+ 		CloseHandle(hfile);
+ 		return NULL;
+ 	}
+ 
+ 	font = MapViewOfFile(hfilemap, FILE_MAP_READ, 0, 0, 0);
+ 	if (!font)
+ 	{
+ 		CloseHandle(hfile);
+ 		CloseHandle(hfilemap);
+ 		return NULL;
+ 	}
+ 
+ 	bdffontp = (bdffont *) malloc(sizeof(bdffont));
+ 	for(i = 0;i < BDF_FIRST_OFFSET_TABLE;i++)
+ 		bdffontp->offset[i] = NULL;
+ 	bdffontp->size = fileinfo.nFileSizeLow;
+ 	bdffontp->font = font;
+ 	bdffontp->hfile = hfile;
+ 	bdffontp->hfilemap = hfilemap;
+ 	bdffontp->filename = (char*) malloc(strlen(filename) + 1);
+ 	strcpy(bdffontp->filename, filename);
+ 
+ 	if (!set_bdf_font_info(bdffontp))
+ 	{
+ 		mw32_free_bdf_font(bdffontp);
+ 		return NULL;
+ 	}
+ 	return bdffontp;
+ }
+ 
+ void
+ mw32_free_bdf_font(bdffont *fontp)
+ {
+ 	int i;
+ 
+ 	UnmapViewOfFile(fontp->hfilemap);
+ 	CloseHandle(fontp->hfilemap);
+ 	CloseHandle(fontp->hfile);
+ 	free(fontp->filename);
+ 	for(i = 0;i < BDF_FIRST_OFFSET_TABLE;i++)
+ 	{
+ 		if (fontp->offset[i])
+ 			free(fontp->offset[i]);
+ 	}
+ 	free(fontp);
+ }
+ 
+ static unsigned char*
+ get_cached_char_offset(bdffont *fontp, int index)
+ {
+ 	unsigned char **offset1;
+ 	unsigned char *offset2;
+ 
+ 	if (index > 0xffff)
+ 		return NULL;
+ 
+ 	offset1 = fontp->offset[BDF_FIRST_OFFSET(index)];
+ 	if (!offset1)
+ 		return NULL;
+ 	offset2 = offset1[BDF_SECOND_OFFSET(index)];
+ 
+ 	if (offset2)
+ 		return offset2;
+ 
+ 	return NULL;
+ }
+ 
+ static void
+ cache_char_offset(bdffont *fontp, int index, unsigned char *offset)
+ {
+ 	unsigned char **offset1;
+ 
+ 	if (index > 0xffff)
+ 		return;
+ 
+ 	offset1 = fontp->offset[BDF_FIRST_OFFSET(index)];
+ 	if (!offset1)
+ 	{
+ 		offset1 = fontp->offset[BDF_FIRST_OFFSET(index)] =
+ 				(unsigned char **) malloc(sizeof(unsigned char*) *
+ 												BDF_SECOND_OFFSET_TABLE);
+ 		memset(offset1, 0, sizeof(unsigned char*) * BDF_SECOND_OFFSET_TABLE);
+ 	}
+ 	offset1[BDF_SECOND_OFFSET(index)] = offset;
+ 
+ 	return;
+ }
+ 
+ static unsigned char*
+ seek_char_offset(bdffont *fontp, int index)
+ {
+ 	int len, flag, font_index;
+ 	unsigned char *start, *p, *q;
+ 
+ 	if (!fontp->seeked)
+ 		return NULL;
+ 
+ 	start = fontp->seeked;
+ 	len = fontp->size - (start - fontp->font);
+ 
+ 	do {
+ 		flag = proceed_file_line("ENCODING", start, &len, &p, &q);
+ 		if (!flag)
+ 		{
+ 			fontp->seeked = NULL;
+ 			return NULL;
+ 		}
+ 		font_index = atoi(p);
+ 		cache_char_offset(fontp, font_index, q);
+ 		start = q;
+ 	} while (font_index != index);
+ 	fontp->seeked = q;
+ 
+ 	return q;
+ }
+ 
+ #define GET_HEX_VAL(x) ((isdigit(x)) ? ((x) - '0') : \
+ 			(((x) >= 'A') && ((x) <= 'Z')) ? ((x) - 'A' + 10) : \
+ 			(((x) >= 'a') && ((x) <= 'z')) ? ((x) - 'a' + 10) : \
+ 			(-1))
+ 
+ int
+ mw32_get_bdf_glyph(bdffont *fontp, int index, int size, glyph_struct *glyph)
+ {
+ 	unsigned char *start, *p, *q, *bitmapp;
+ 	unsigned char val1, val2;
+ 	int i, j, len, flag;
+ 
+ 	start = get_cached_char_offset(fontp, index);
+ 	if (!start)
+ 		start = seek_char_offset(fontp, index);
+ 	if (!start)
+ 		return 0;
+ 
+ 	len = fontp->size - (start - fontp->font);
+ 
+ 	flag = proceed_file_line("DWIDTH", start, &len, &p, &q);
+ 	if (!flag)
+ 		return 0;
+ 	glyph->dwidth = atoi(p);
+ 
+ 	start = q;
+ 	flag = proceed_file_line("BBX", start, &len, &p, &q);
+ 	if (!flag)
+ 		return 0;
+ 	glyph->bbw = strtol(p, &start, 10);
+ 	p = start;
+ 	glyph->bbh = strtol(p, &start, 10);
+ 	p = start;
+ 	glyph->bbox = strtol(p, &start, 10);
+ 	p = start;
+ 	glyph->bboy = strtol(p, &start, 10);
+ 
+ 	if (size == 0)
+ 		return 1;
+ 
+ 	start = q;
+ 	flag = proceed_file_line("BITMAP", start, &len, &p, &q);
+ 	if (!flag)
+ 		return 0;
+ 
+ 	p = q;
+ 	bitmapp = glyph->bitmap;
+ 	for(i = 0;i < glyph->bbh;i++)
+ 	{
+ 		q = memchr(p, '\n', len);
+ 		if (!q)
+ 			return 0;
+ 		for(j = 0;((q > p) && (j < ((glyph->bbw + 7) / 8 )));j++)
+ 		{
+ 			val1 = GET_HEX_VAL(*p);
+ 			if (val1 == -1)
+ 				return 0;
+ 			p++;
+ 			val2 = GET_HEX_VAL(*p);
+ 			if (val2 == -1)
+ 				return 0;
+ 			p++;
+ 			size--;
+ 			if (size <= 0)
+ 				return 0;
+ 			/* NAND Operation.  */
+ 			*bitmapp++ = (unsigned char)~((val1 << 4) | val2);
+ 		}
+ 		/* CreateBitmap requires WORD alignment.  */
+ 		if (j % 2)
+ 		{
+ 			*bitmapp++ = 0xff;
+ 		}
+ 		p = q + 1;
+ 	}
+ 
+ 	return 1;
+ }
+ 
+ int
+ mw32_BDF_TextOut(HDC hdc, int left,
+ 		 int top, unsigned char *text, int bytelen, int fixed_pitch_size,
+ 		 int bitmap, int rev, DWORD fg, DWORD bg)
+ {
+ 	int bitmap_size, index, btop;
+ 	unsigned char *textp;
+ 	glyph_struct glyph;
+ 	HDC hCompatDC = 0;
+ 	HBITMAP hBMP;
+ 	HBRUSH hFgBrush, hOrgBrush;
+ 	HANDLE holdobj, horgobj = 0;
+ 	UINT textalign;
+ 	int flag = 0;
+ 	int kanji = 0;
+ 	bdffont *fontp;
+ 	int abitmap_size = 0, jbitmap_size = 0;
+ 
+ 	if (g_jbdffontp != NULL)
+ 	{
+ 		fontp = g_jbdffontp;
+ 		jbitmap_size = ((fontp->urx - fontp->llx) / 8 + 2) * (fontp->ury - fontp->lly) + 256;
+ 	}
+ 	if (g_bdffontp != NULL)
+ 	{
+ 		fontp = g_bdffontp;
+ 		abitmap_size = ((fontp->urx - fontp->llx) / 8 + 2) * (fontp->ury - fontp->lly) + 256;
+ 	}
+ 	if (abitmap_size > jbitmap_size)
+ 		bitmap_size = abitmap_size;
+ 	else
+ 		bitmap_size = jbitmap_size;
+ 	glyph.bitmap = (unsigned char*) malloc(sizeof(unsigned char) * bitmap_size);
+ 
+ 	hCompatDC = CreateCompatibleDC(hdc);
+ 
+ 	textalign = GetTextAlign(hdc);
+ 
+ 	SaveDC(hdc);
+ 
+ 	hFgBrush = CreateSolidBrush(GetTextColor(hdc));
+ 	hOrgBrush = SelectObject(hdc, hFgBrush);
+ 	SetTextColor(hdc, bitmap && rev ? RGB(0, 0, 0) : fg);
+ 	SetBkColor(hdc, bitmap ? RGB(255, 255, 255) : bg);
+ 
+ 	textp = text;
+ 	while(bytelen > 0)
+ 	{
+ 		if ((0x81 <= (unsigned char)(*textp) && (unsigned char)(*textp) <= 0x9F)
+ 				|| (0xE0 <= (unsigned char)(*textp) && (unsigned char)(*textp) <= 0xFC))
+ 		{
+ 			bytelen -= 2;
+ 			if (bytelen < 0)
+ 				break;
+ 			index = MAKELENDSHORT(textp[1], textp[0]);
+ 			{
+ 				unsigned char		high = textp[0];
+ 				unsigned char		low = textp[1];
+ 				if (high <= 0x9f)
+ 					high -= 0x71;
+ 				else
+ 					high -= 0xb1;
+ 				high = high * 2 + 1;
+ 				if (low > 0x7f)
+ 					low--;
+ 				if (low >= 0x9e)
+ 				{
+ 					low -= 0x7d;
+ 					high++;
+ 				}
+ 				else
+ 				{
+ 					low -= 0x1f;
+ 				}
+ 				index = (((unsigned int)high << 8) | (low & 0xff));
+ 			}
+ 			textp += 2;
+ 		}
+ 		else
+ 		{
+ 			index = *textp++;
+ 			bytelen--;
+ 		}
+ 		if (index > 0xff)
+ 		{
+ 			fontp = g_jbdffontp;
+ 			kanji = 1;
+ 		}
+ 		else
+ 		{
+ 			fontp = g_bdffontp;
+ 			kanji = 0;
+ 		}
+ 		if (fontp == NULL)
+ 		{
+ 			if (fixed_pitch_size)
+ 				left += fixed_pitch_size * (index > 0xff ? 2 : 1);
+ 			else
+ 				left += glyph.dwidth;
+ 			continue;
+ 		}
+ 		if (!mw32_get_bdf_glyph(fontp, index, bitmap_size, &glyph))
+ 		{
+ #if 1
+ 			if (kanji)
+ 				index = 0x2126;
+ 			else
+ 				index = 0x40;
+ 			if (!mw32_get_bdf_glyph(fontp, index, bitmap_size, &glyph))
+ 			{
+ 				if (fixed_pitch_size)
+ 					left += fixed_pitch_size * (index > 0xff ? 2 : 1);
+ 				else
+ 					left += glyph.dwidth;
+ 				continue;
+ 			}
+ #else
+ 			if (horgobj)
+ 			{
+ 				SelectObject(hCompatDC, horgobj);
+ 				DeleteObject(hBMP);
+ 			}
+ 			DeleteDC(hCompatDC);
+ 			free(glyph.bitmap);
+ 			return 0;
+ #endif
+ 		}
+ 		hBMP = CreateBitmap(glyph.bbw, glyph.bbh, 1, 1, glyph.bitmap);
+ 		if (textalign & TA_BASELINE)
+ 		{
+ 			btop = top - (glyph.bbh + glyph.bboy);
+ 		}
+ 		else if (textalign & TA_BOTTOM)
+ 		{
+ 			btop = top - glyph.bbh;
+ 		}
+ 		else
+ 		{
+ 			btop = top;
+ 		}
+ 
+ 		if (horgobj)
+ 		{
+ 			SelectObject(hCompatDC, hBMP);
+ 			DeleteObject(holdobj);
+ 			holdobj = hBMP;
+ 		}
+ 		else
+ 		{
+ 			horgobj = SelectObject(hCompatDC, hBMP);
+ 			holdobj = hBMP;
+ 		}
+ 		if (!bitmap)
+ 		{
+ 			if (!g_fix)
+ 			{
+ 				HBRUSH		hbrush, holdbrush;
+ 				RECT		rcWindow;
+ 
+ 				hbrush	= CreateSolidBrush(bg);
+ 				holdbrush = SelectObject(hdc, hbrush);
+ 				rcWindow.left = left;
+ 				rcWindow.top = btop;
+ 				rcWindow.right = left + g_xsize * (index > 0xff ? 2 : 1);
+ 				rcWindow.bottom = btop + g_ysize;
+ 				FillRect(hdc, &rcWindow, hbrush);
+ 				SelectObject(hdc, holdbrush);
+ 				DeleteObject(hbrush);
+ 			}
+ 			BitBlt(hdc, left, btop, glyph.bbw, glyph.bbh, hCompatDC, 0, 0, SRCCOPY);
+ 		}
+ 		else if (index == ' ' && compchr(textp, bytelen, ' '))
+ 			BitBlt(hdc, left, btop, glyph.bbw, glyph.bbh, hCompatDC, 0, 0, SRCAND);
+ #if 0
+ 		else if (rev)
+ 			BitBlt(hdc, left, btop, glyph.bbw, glyph.bbh, hCompatDC, 0, 0, SRCAND);
+ 		else
+ 			BitBlt(hdc, left, btop, glyph.bbw, glyph.bbh, hCompatDC, 0, 0, 0xB8074A);
+ #else
+ 		else if (rev)
+ 			BitBlt(hdc, left, btop, glyph.bbw, glyph.bbh, hCompatDC, 0, 0, 0xE20746);
+ 		else
+ 			BitBlt(hdc, left, btop, glyph.bbw, glyph.bbh, hCompatDC, 0, 0, 0x990066);
+ #endif
+ 		if (fixed_pitch_size)
+ 			left += fixed_pitch_size * (index > 0xff ? 2 : 1);
+ 		else
+ 			left += glyph.dwidth;
+ 	}
+ 	SelectObject(hCompatDC, horgobj);
+ 	SelectObject(hdc, hOrgBrush);
+ 	DeleteObject(hFgBrush);
+ 	DeleteObject(hBMP);
+ 	DeleteDC(hCompatDC);
+ 	RestoreDC(hdc, -1);
+ 	free(glyph.bitmap);
+ 
+ 	return 1;
+ }
+ 
+ int
+ bdfTextOut(HDC hdc, int left, int top, UINT opt, CONST RECT *lprc, char *text, UINT size, CONST INT * lpdx, int bitmap, int rev, DWORD fg, DWORD bg)
+ {
+ 	return mw32_BDF_TextOut(hdc, left, top, text, size, *lpdx, bitmap, rev, fg, bg);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *
+  *----------------------------------------------------------------------------*/
+ static int
+ compchr(char *text, int len, char ch)
+ {
+ 	int				i;
+ 
+ 	for (i = 0; i < len; i++)
+ 		if (text[i] != ch)
+ 			return(FALSE);
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	login dialog
+  *----------------------------------------------------------------------------*/
+ LRESULT PASCAL
+ BDFHookProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+ {
+     static HWND			hwndBrush;
+     static RECT			rt;
+ 	char				NameBuff[MAX_PATH+2];
+ 	LPOFNOTIFY			pofn;
+     HDC					hdc;
+ 	HBRUSH				hbrush;
+ 	HBRUSH				holdbrush;
+ 	bdffont			*	bdffontp;
+ 
+ 	switch (uMsg) {
+ 	case WM_INITDIALOG: 
+ 		hwndBrush = GetDlgItem(hwnd, 1010); 
+ 		GetClientRect(hwndBrush, &rt); 
+ 		return(TRUE);
+ 	case WM_NOTIFY:
+ 		pofn = (LPOFNOTIFY)lParam;
+ 		if (pofn->hdr.code == CDN_SELCHANGE)
+ 		{
+ 			if (CommDlg_OpenSave_GetSpec(GetParent(hwnd), NameBuff, MAX_PATH) <= MAX_PATH)
+ 			{
+ 				bdffontp = mw32_init_bdf_font(NameBuff);
+ 				if (bdffontp != NULL)
+ 				{
+ 					hdc = GetDC(hwndBrush);
+ 					hbrush	= CreateSolidBrush(RGB(185, 185, 185));
+ 					holdbrush = SelectObject(hdc, hbrush);
+ 					FillRect(hdc, &rt, hbrush);
+ 					SelectObject(hdc, holdbrush);
+ 					DeleteObject(hbrush);
+ 					if (bJpn)
+ 					{
+ 						g_jbdffontp = bdffontp;
+ 						mw32_BDF_TextOut(hdc, rt.left, rt.top,
+ 								"A@F", 12, bdffontp->urx / 2,
+ 								FALSE, FALSE, RGB(0, 0, 0), RGB(185, 185, 185));
+ 						g_jbdffontp = NULL;
+ 					}
+ 					else
+ 					{
+ 						g_bdffontp = bdffontp;
+ 						mw32_BDF_TextOut(hdc, rt.left, rt.top,
+ 								"AaBbYyZz", 8, bdffontp->urx,
+ 								FALSE, FALSE, RGB(0, 0, 0), RGB(185, 185, 185));
+ 						g_bdffontp = NULL;
+ 					}
+ 					ReleaseDC(hwndBrush, hdc);
+ 					mw32_free_bdf_font(bdffontp);
+ 				}
+ 			}
+ 		}
+ 		break;
+ 	}
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	login dialog
+  *----------------------------------------------------------------------------*/
+ static LRESULT CALLBACK
+ DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+ {
+ 	static OSVERSIONINFO	ver_info;
+     int					wmId;
+ 	OPENFILENAME		ofn;
+ 	char				NameBuff[MAX_PATH+2];
+ 	char				IObuff[MAX_PATH+2];
+ 	static DWORD		bUse;
+ 	static DWORD	*	config;
+ 	char			*	p;
+ 	char			*	q;
+ 	extern char		*	gettail();
+ 
+ 	switch (uMsg) {
+ 	case WM_INITDIALOG:
+ 		ver_info.dwOSVersionInfoSize = sizeof(ver_info);
+ 		GetVersionEx(&ver_info);
+ 		if (strlen(g_bdffile))
+ 			SendDlgItemMessage(hWnd, 1000, WM_SETTEXT, 0, (LPARAM)g_bdffile);
+ 		if (strlen(g_jbdffile))
+ 			SendDlgItemMessage(hWnd, 3000, WM_SETTEXT, 0, (LPARAM)g_jbdffile);
+ 		config = (DWORD *)lParam;
+ 		bUse = *config;
+ 		if (bUse)
+ 			CheckDlgButton(hWnd, 1002, MF_CHECKED);
+ 		else
+ 			CheckDlgButton(hWnd, 1002, MF_UNCHECKED);
+ 		g_bdffontp = mw32_init_bdf_font(g_bdffile);
+ 		if (g_bdffontp == NULL)
+ 		{
+ 			SendDlgItemMessage(hWnd, 2000, WM_SETTEXT, 0, (LPARAM)"No font name");
+ 			SendDlgItemMessage(hWnd, 2001, WM_SETTEXT, 0, (LPARAM)"0");
+ 			SendDlgItemMessage(hWnd, 2002, WM_SETTEXT, 0, (LPARAM)"0");
+ 		}
+ 		else
+ 		{
+ 			p = g_bdffontp->font;
+ 			q = NameBuff;
+ 			while (*p)
+ 			{
+ 				if (*p == 0x0a)
+ 				{
+ 					*q = '\0';
+ 					break;
+ 				}
+ 				else
+ 					*q = *p;
+ 				p++;
+ 				q++;
+ 			}
+ 			SendDlgItemMessage(hWnd, 2000, WM_SETTEXT, 0, (LPARAM)NameBuff);
+ 			wsprintf(NameBuff, "%d", g_bdffontp->urx);
+ 			SendDlgItemMessage(hWnd, 2001, WM_SETTEXT, 0, (LPARAM)NameBuff);
+ 			wsprintf(NameBuff, "%d", g_bdffontp->ury - g_bdffontp->lly);
+ 			SendDlgItemMessage(hWnd, 2002, WM_SETTEXT, 0, (LPARAM)NameBuff);
+ 			mw32_free_bdf_font(g_bdffontp);
+ 			g_bdffontp = NULL;
+ 		}
+ 		g_jbdffontp = mw32_init_bdf_font(g_jbdffile);
+ 		if (g_jbdffontp == NULL)
+ 		{
+ 			SendDlgItemMessage(hWnd, 4000, WM_SETTEXT, 0, (LPARAM)"No font name");
+ 			SendDlgItemMessage(hWnd, 4001, WM_SETTEXT, 0, (LPARAM)"0");
+ 			SendDlgItemMessage(hWnd, 4002, WM_SETTEXT, 0, (LPARAM)"0");
+ 		}
+ 		else
+ 		{
+ 			p = g_jbdffontp->font;
+ 			q = NameBuff;
+ 			while (*p)
+ 			{
+ 				if (*p == 0x0a)
+ 				{
+ 					*q = '\0';
+ 					break;
+ 				}
+ 				else
+ 					*q = *p;
+ 				p++;
+ 				q++;
+ 			}
+ 			SendDlgItemMessage(hWnd, 4000, WM_SETTEXT, 0, (LPARAM)NameBuff);
+ 			wsprintf(NameBuff, "%d", g_jbdffontp->urx);
+ 			SendDlgItemMessage(hWnd, 4001, WM_SETTEXT, 0, (LPARAM)NameBuff);
+ 			wsprintf(NameBuff, "%d", g_jbdffontp->ury - g_jbdffontp->lly);
+ 			SendDlgItemMessage(hWnd, 4002, WM_SETTEXT, 0, (LPARAM)NameBuff);
+ 			mw32_free_bdf_font(g_jbdffontp);
+ 			g_jbdffontp = NULL;
+ 		}
+ 		return(TRUE);
+ 	case WM_DESTROY:
+ 		break;
+ 	case WM_COMMAND:
+ 		wmId = LOWORD(wParam);
+ 		switch (wmId) {
+ 		case IDOK:
+ 			GetDlgItemText(hWnd, 1000, g_bdffile, MAX_PATH+2);
+ 			GetDlgItemText(hWnd, 3000, g_jbdffile, MAX_PATH+2);
+ 			*config = bUse;
+ 			if (bUse)
+ 				EndDialog(hWnd, 0);
+ 			else
+ 				EndDialog(hWnd, 1);
+ 			return(TRUE);
+ 		case IDCANCEL:
+ 			EndDialog(hWnd, 1);
+ 			return(TRUE);
+ 		case 1001:
+ 			memset(&ofn, 0, sizeof(ofn));
+ 			NameBuff[0] = '\0';
+ 			GetDlgItemText(hWnd, 1000, IObuff, MAX_PATH);
+ 			*gettail(IObuff) = '\0';
+ 			ofn.lStructSize		= sizeof(ofn);
+ 			ofn.hwndOwner		= hWnd;
+ 			ofn.hInstance		= (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);
+ 			ofn.lpstrFilter		= "BDF File(*.bdf)\0*.bdf\0ALL(*.*)\0*.*\0";
+ 			ofn.lpstrCustomFilter = (LPSTR)NULL;
+ 			ofn.nMaxCustFilter	= 0L;
+ 			ofn.nFilterIndex	= 1;
+ 			ofn.lpstrFile		= NameBuff;
+ 			ofn.nMaxFile		= MAX_PATH;
+ 			ofn.lpstrFileTitle	= NULL;
+ 			ofn.nMaxFileTitle	= 0;
+ 			ofn.lpstrInitialDir	= IObuff;
+ 			ofn.lpstrTitle		= "ASCII Font Select";
+ 			ofn.Flags			= OFN_HIDEREADONLY | OFN_EXPLORER | OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST;
+ 			ofn.nFileOffset		= 0;
+ 			ofn.nFileExtension	= 0;
+ 			ofn.lpstrDefExt		= NULL;
+ 			ofn.lCustData		= FALSE;
+ 			if (!(ver_info.dwPlatformId == VER_PLATFORM_WIN32_NT
+ 											&& ver_info.dwMajorVersion == 3))
+ 			{
+ 				ofn.Flags			= OFN_HIDEREADONLY | OFN_EXPLORER | OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST | OFN_ENABLEHOOK | OFN_ENABLETEMPLATE;
+ 				ofn.lpfnHook		= BDFHookProc;
+ 				ofn.lpTemplateName	= "BDFDLGEXP";
+ 				bJpn				= FALSE;
+ 			}
+ 			if (GetOpenFileName(&ofn))
+ 			{
+ 				SendDlgItemMessage(hWnd, 1000, EM_SETSEL, 0, (LPARAM)-2);
+ 				SendDlgItemMessage(hWnd, 1000, WM_SETTEXT, 0, (LPARAM)NameBuff);
+ 				g_bdffontp = mw32_init_bdf_font(NameBuff);
+ 				if (g_bdffontp != NULL)
+ 				{
+ 					p = g_bdffontp->font;
+ 					q = NameBuff;
+ 					while (*p)
+ 					{
+ 						if (*p == 0x0a)
+ 						{
+ 							*q = '\0';
+ 							break;
+ 						}
+ 						else
+ 							*q = *p;
+ 						p++;
+ 						q++;
+ 					}
+ 					SendDlgItemMessage(hWnd, 2000, WM_SETTEXT, 0, (LPARAM)NameBuff);
+ 					wsprintf(NameBuff, "%d", g_bdffontp->urx);
+ 					SendDlgItemMessage(hWnd, 2001, WM_SETTEXT, 0, (LPARAM)NameBuff);
+ 					wsprintf(NameBuff, "%d", g_bdffontp->ury - g_bdffontp->lly);
+ 					SendDlgItemMessage(hWnd, 2002, WM_SETTEXT, 0, (LPARAM)NameBuff);
+ 					mw32_free_bdf_font(g_bdffontp);
+ 					g_bdffontp = NULL;
+ 				}
+ 			}
+ 			break;
+ 		case 3001:
+ 			memset(&ofn, 0, sizeof(ofn));
+ 			NameBuff[0] = '\0';
+ 			GetDlgItemText(hWnd, 3000, IObuff, MAX_PATH);
+ 			*gettail(IObuff) = '\0';
+ 			ofn.lStructSize		= sizeof(ofn);
+ 			ofn.hwndOwner		= hWnd;
+ 			ofn.hInstance		= (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);
+ 			ofn.lpstrFilter		= "BDF File(*.bdf)\0*.bdf\0ALL(*.*)\0*.*\0";
+ 			ofn.lpstrCustomFilter = (LPSTR)NULL;
+ 			ofn.nMaxCustFilter	= 0L;
+ 			ofn.nFilterIndex	= 1;
+ 			ofn.lpstrFile		= NameBuff;
+ 			ofn.nMaxFile		= MAX_PATH;
+ 			ofn.lpstrFileTitle	= NULL;
+ 			ofn.nMaxFileTitle	= 0;
+ 			ofn.lpstrInitialDir	= IObuff;
+ 			ofn.lpstrTitle		= "Japanese Font Select";
+ 			ofn.Flags			= OFN_HIDEREADONLY | OFN_EXPLORER;
+ 			ofn.nFileOffset		= 0;
+ 			ofn.nFileExtension	= 0;
+ 			ofn.lpstrDefExt		= NULL;
+ 			ofn.lCustData		= TRUE;
+ 			if (!(ver_info.dwPlatformId == VER_PLATFORM_WIN32_NT
+ 											&& ver_info.dwMajorVersion == 3))
+ 			{
+ 				ofn.Flags			= OFN_HIDEREADONLY | OFN_EXPLORER | OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST | OFN_ENABLEHOOK | OFN_ENABLETEMPLATE;
+ 				ofn.lpfnHook		= BDFHookProc;
+ 				ofn.lpTemplateName	= "BDFDLGEXP";
+ 				bJpn				= TRUE;
+ 			}
+ 			if (GetOpenFileName(&ofn))
+ 			{
+ 				SendDlgItemMessage(hWnd, 3000, EM_SETSEL, 0, (LPARAM)-2);
+ 				SendDlgItemMessage(hWnd, 3000, WM_SETTEXT, 0, (LPARAM)NameBuff);
+ 				g_jbdffontp = mw32_init_bdf_font(NameBuff);
+ 				if (g_jbdffontp != NULL)
+ 				{
+ 					p = g_jbdffontp->font;
+ 					q = NameBuff;
+ 					while (*p)
+ 					{
+ 						if (*p == 0x0a)
+ 						{
+ 							*q = '\0';
+ 							break;
+ 						}
+ 						else
+ 							*q = *p;
+ 						p++;
+ 						q++;
+ 					}
+ 					SendDlgItemMessage(hWnd, 4000, WM_SETTEXT, 0, (LPARAM)NameBuff);
+ 					wsprintf(NameBuff, "%d", g_jbdffontp->urx);
+ 					SendDlgItemMessage(hWnd, 4001, WM_SETTEXT, 0, (LPARAM)NameBuff);
+ 					wsprintf(NameBuff, "%d", g_jbdffontp->ury - g_jbdffontp->lly);
+ 					SendDlgItemMessage(hWnd, 4002, WM_SETTEXT, 0, (LPARAM)NameBuff);
+ 					mw32_free_bdf_font(g_jbdffontp);
+ 					g_jbdffontp = NULL;
+ 				}
+ 			}
+ 			break;
+ 		case 1002:
+ 			if (bUse)
+ 			{
+ 				bUse = FALSE;
+ 				CheckDlgButton(hWnd, 1002, MF_UNCHECKED);
+ 			}
+ 			else
+ 			{
+ 				bUse = TRUE;
+ 				CheckDlgButton(hWnd, 1002, MF_CHECKED);
+ 			}
+ 			break;
+ 		}
+ 		break;
+ 	}
+ 	return(FALSE);
+ }
+ 
+ void
+ GetBDFfont(HINSTANCE hInst, int mode, char *fname, char *jfname, int *xsize, int *ysize, DWORD *config)
+ {
+ 	int			ax = 0;
+ 	int			ay = 0;
+ 	int			jx = 0;
+ 	int			jy = 0;
+ 
+ 	g_bdffile  = fname;
+ 	g_jbdffile = jfname;
+ 	if (g_bdffontp != NULL)
+ 		mw32_free_bdf_font(g_bdffontp);
+ 	if (g_jbdffontp != NULL)
+ 		mw32_free_bdf_font(g_jbdffontp);
+ 	g_bdffontp  = NULL;
+ 	g_jbdffontp = NULL;
+ 	if (mode != 0)
+ 	{
+ 		if (DialogBoxParam(hInst, "BDF", NULL, (DLGPROC)DialogProc, (LPARAM)config) != 0 && !(*config))
+ 			return; 
+ 	}
+ 	/* check */
+ 	g_bdffontp  = mw32_init_bdf_font(g_bdffile);
+ 	g_jbdffontp = mw32_init_bdf_font(g_jbdffile);
+ 	if (g_bdffontp == NULL && g_jbdffontp == NULL)
+ 	{
+ 		*config = FALSE;
+ 		return; 
+ 	}
+ 	if (g_bdffontp != NULL)
+ 	{
+ 		ax = g_bdffontp->urx;
+ 		ay = g_bdffontp->ury - g_bdffontp->lly;
+ 	}
+ 	if (g_jbdffontp != NULL)
+ 	{
+ 		jx = g_jbdffontp->urx;
+ 		jy = g_jbdffontp->ury - g_jbdffontp->lly;
+ 	}
+ 	if ((ax * 2) >= jx)
+ 		*xsize = ax;
+ 	else
+ 		*xsize = jx / 2;
+ 	g_fix = (ax * 2) == jx ? 1 : 0;
+ 	if (ay > jy)
+ 		*ysize = ay;
+ 	else
+ 		*ysize = jy;
+ 	g_xsize = *xsize;
+ 	g_ysize = *ysize;
+ 	return;
+ }
diff -crN ../orig/src/bdf/mw32bdf.h ./src/bdf/mw32bdf.h
*** ../orig/src/bdf/mw32bdf.h	Thu Jan 01 09:00:00 1970
--- ./src/bdf/mw32bdf.h	Sun Mar 29 17:51:38 1998
***************
*** 0 ****
--- 1,45 ----
+ /*****************************************
+   Meadow BDF font manager
+          Written by H.Miyashita.
+ ******************************************/
+ #define BDF_FIRST_OFFSET_TABLE 0x200
+ #define BDF_SECOND_OFFSET_TABLE 0x80
+ #define BDF_SECOND_OFFSET(x) ((x) & 0x7f)
+ #define BDF_FIRST_OFFSET(x) (((x) >> 8) | (((x) & 0x80) << 1))
+ 
+ /* Structure of glyph information of one character.  */
+ typedef struct
+ {
+   int dwidth;			/* width in pixels */
+   int bbw, bbh, bbox, bboy;	/* bounding box in pixels */
+   int bitmap_size;		/* byte lengh of the following slots */
+   unsigned char *bitmap;	/*  */
+ } glyph_struct;
+ 
+ typedef struct
+ {
+   char *filename;
+   HANDLE hfile;
+   HANDLE hfilemap;
+   unsigned char *font;
+   unsigned char *seeked;
+   DWORD size;
+   unsigned char **offset[BDF_FIRST_OFFSET_TABLE];
+   int llx, lly, urx, ury;	/* Font bounding box */
+ 
+   int yoffset;
+   int relative_compose;
+   int default_ascent;
+ 
+ }bdffont;
+ 
+ #define BDF_FILE_SIZE_MAX 256*1024*1024 /* 256Mb */
+ #define BDF_FONT_FILE(font) (((bdffont*)(font))->filename)
+ #define MAKELENDSHORT(c1, c2) (unsigned short)((c1) | ((c2) << 8))
+ 
+ extern bdffont *mw32_init_bdf_font(char *filename);
+ extern void mw32_free_bdf_font(bdffont *fontp);
+ extern int mw32_get_bdf_glyph(bdffont *fontp, int index, int size,
+ 			      glyph_struct *glyph);
+ extern int mw32_BDF_TextOut(HDC hdc, int left,
+ 			    int top, unsigned char *text, int bytelen, int fixed_pitch_size, int bitmap, int reverse, DWORD fg, DWORD bg);
diff -crN ../orig/src/buffer.c ./src/buffer.c
*** ../orig/src/buffer.c	Mon Aug 15 07:59:06 1994
--- ./src/buffer.c	Sat Dec 11 10:04:52 1999
***************
*** 28,33 ****
--- 28,39 ----
  #include "globals.h"
  #include "proto.h"
  #include "param.h"
+ #ifdef KANJI
+ #include "kanji.h"
+ #endif
+ #if defined(USE_EXFILE) && defined(NT)
+ # undef remove
+ #endif
  
  static void		enter_buffer __ARGS((BUF *));
  static BUF		*buflist_findname __ARGS((char_u *));
***************
*** 69,74 ****
--- 75,138 ----
  	}
  	if (curbuf->b_filename != NULL)
  	{
+ #ifdef FEXRC
+ 		if (p_fexrc)
+ 		{
+ 			char_u			tmp[MAXPATHL];
+ 			char_u		*	dotp = NULL;
+ 			char_u		*	p = NULL;
+ 
+ # ifdef NT
+ 			NoResize = TRUE;
+ # endif
+ 			p = curbuf->b_filename;
+ 			while (*p)
+ 			{
+ 				if (*p == '.')
+ 					dotp = p;
+ # if defined(KANJI) && defined(MSDOS)
+ 				if (ISkanji(*p))
+ 					p++;
+ # endif
+ 				p++;
+ 			}
+ 			if (dotp == curbuf->b_filename)
+ 				dotp = NULL;
+ 			STRCPY(tmp, SYSVIMRC_FILE);
+ 			if (dotp)
+ 				STRCAT(tmp, dotp);
+ 			if (dosource(tmp) == FAIL && dotp != NULL)
+ 				(void)dosource((char_u *)SYSVIMRC_FILE);
+ 			if (fullpathcmp((char_u *)SYSVIMRC_FILE, (char_u *)VIMRC_FILE))
+ 			{
+ 				if (p_exrc)
+ 				{
+ 					STRCPY(tmp, VIMRC_FILE);
+ 					if (dotp)
+ 						STRCAT(tmp, dotp);
+ # ifdef UNIX
+ 					{
+ 						struct stat s;
+ #  ifdef KANJI
+ 						if (stat(fileconvsto(tmp), &s) || s.st_uid != getuid())
+ #  else
+ 						if (stat(tmp, &s) || s.st_uid != getuid())
+ #  endif
+ 							secure = p_secure;
+ 					}
+ # else
+ 					secure = p_secure;
+ # endif
+ 					if (dosource(tmp) == FAIL && dotp != NULL)
+ 						dosource((char_u *)VIMRC_FILE);
+ 					secure = 0;
+ 				}
+ 			}
+ # ifdef NT
+ 			NoResize = FALSE;
+ # endif
+ 		}
+ #endif
  		if (readfile(curbuf->b_filename, curbuf->b_sfilename, (linenr_t)0,
  										TRUE, (linenr_t)0, MAXLNUM) == FAIL)
  			return FAIL;
***************
*** 116,121 ****
--- 180,194 ----
  			lastbuf = buf->b_prev;
  		else
  			buf->b_next->b_prev = buf->b_prev;
+ #ifdef KANJI
+ 		free(buf->b_p_jc);
+ #endif
+ #ifdef FEPCTRL
+ 		free(buf->b_p_ji);
+ #endif
+ #ifdef TRACK
+ 		free(buf->b_p_trs);
+ #endif
  		free(buf);
  	}
  	else
***************
*** 131,137 ****
  {
  	buf->b_ml.ml_line_count = 1;
  	buf->b_changed = FALSE;
! #ifndef MSDOS
  	buf->b_shortname = FALSE;
  #endif
  	buf->b_p_eol = TRUE;
--- 204,210 ----
  {
  	buf->b_ml.ml_line_count = 1;
  	buf->b_changed = FALSE;
! #if !defined(MSDOS) || defined(NT)
  	buf->b_shortname = FALSE;
  #endif
  	buf->b_p_eol = TRUE;
***************
*** 247,254 ****
--- 320,345 ----
  			retval = doecmd(NULL, NULL, NULL, FALSE, (linenr_t)1);
  				/* the doecmd() may create a new buffer, then we have to
  				 * delete the old one */
+ #if 1
+ 			{
+ 				BUF			*wbuf;
+ 				int			empty = FALSE;
+ 
+ 				for (wbuf = firstbuf; wbuf != NULL; wbuf = wbuf->b_next)
+ 				{
+ 					if (wbuf == buf)
+ 					{
+ 						empty = TRUE;
+ 						break;
+ 					}
+ 				}
+ 				if (action == 3 && buf != curbuf && empty)
+ 					close_buffer(buf, TRUE, action == 3);
+ 			}
+ #else
  			if (action == 3 && buf != curbuf)
  				close_buffer(buf, TRUE, action == 3);
+ #endif
  			return retval;
  		}
  		/*
***************
*** 532,537 ****
--- 623,632 ----
  	if (buf == NULL)
  		return NULL;
  	fname = did_cd ? buf->b_filename : buf->b_sfilename;
+ #if 1
+ 	if (fname == NULL)
+ 		return NULL;
+ #endif
  	home_replace(fname, NameBuff, MAXPATHL);
  	return NameBuff;
  }
***************
*** 731,737 ****
  	else
  		curbuf->b_xfilename = curbuf->b_sfilename;
  
! #ifndef MSDOS
  	curbuf->b_shortname = FALSE;
  #endif
  	return OK;
--- 826,832 ----
  	else
  		curbuf->b_xfilename = curbuf->b_sfilename;
  
! #if !defined(MSDOS) || defined(NT)
  	curbuf->b_shortname = FALSE;
  #endif
  	return OK;
***************
*** 821,826 ****
--- 916,976 ----
  		IObuff[0] = '"';
  	}
  
+ #ifdef KANJI
+ 	{
+ 		char_u	*p		= ml_get(curwin->w_cursor.lnum);
+ 		int		pcol	= getvcol(curwin, &curwin->w_cursor, 3),
+ 				lastcol = STRLEN(p),
+ 				code	= *ml_get_cursor() & 0xff;
+ 		FPOS	last;
+ 		char_u	k1, k2;
+ 
+ 		last.lnum = curwin->w_cursor.lnum;
+ 		last.col  = lastcol;
+ 		lastcol   = getvcol(curwin, &last, 3);
+ 		if (ISkanjiCur() == 1)
+ 		{
+ 			k1 = code;
+ 			k2 = p[curwin->w_cursor.col+1];
+ 			kanjito(&k1, &k2, toupper(*curbuf->b_p_jc));
+ 			code = (k1 << 8) | k2;
+ 		}
+ #ifdef UCODE
+ 		else if (toupper(*curbuf->b_p_jc) == JP_WIDE)	/* UNICODE */
+ 		{
+ 			k1 = code;
+ 			kanato(&k1, &k2, toupper(*curbuf->b_p_jc));
+ 			code = (k1 << 8) | k2;
+ 		}
+ #endif
+ 		else if (ISkana(code))
+ 		{
+ 			k1 = code;
+ 			kanato(&k1, &k2, toupper(*curbuf->b_p_jc));
+ 			if (k2)
+ 				code = (k1 << 8) | k2;
+ 			else
+ 				code = k1;
+ 		}
+ 		else if (code == 0x0a)		/* Ctrl('J') */
+ 		{
+ 			code = 0x00;
+ 		}
+ 		sprintf((char *)IObuff + STRLEN(IObuff),
+ 					"\"%s%s%s line %ld of %ld --%d%%-- col %d/%d ch 0x%x [%c]",
+ 				curbuf->b_changed ? " [Modified]" : "",
+ 				curbuf->b_notedited ? " [Not edited]" : "",
+ 				curbuf->b_p_ro ? " [readonly]" : "",
+ 				(long)curwin->w_cursor.lnum,
+ 				(long)curbuf->b_ml.ml_line_count,
+ 				(int)(((long)curwin->w_cursor.lnum * 100L) / (long)curbuf->b_ml.ml_line_count),
+ 				pcol,
+ 				lastcol,
+ 				code,
+ 				toupper(*curbuf->b_p_jc)
+ 		);
+ 	}
+ #else
  	sprintf((char *)IObuff + STRLEN(IObuff),
  						"\"%s%s%s line %ld of %ld --%d%%-- col %d",
  			curbuf->b_changed ? " [Modified]" : "",
***************
*** 830,835 ****
--- 980,986 ----
  			(long)curbuf->b_ml.ml_line_count,
  			(int)(((long)curwin->w_cursor.lnum * 100L) / (long)curbuf->b_ml.ml_line_count),
  			(int)curwin->w_cursor.col + 1);
+ #endif
  
  	if (arg_count > 1)
  		sprintf((char *)IObuff + STRLEN(IObuff), " (file %d of %d)", curwin->w_arg_idx + 1, arg_count);
***************
*** 886,892 ****
--- 1037,1058 ----
  	void
  resettitle()
  {
+ #ifdef KANJI
+ 	char_u	*	t = NULL;
+ 	char_u	*	i = NULL;
+ 
+ 	if (lasttitle != NULL)
+ 		t = kanjiconvsto(lasttitle, toupper(JP_DISP));
+ 	if (lasticon != NULL)
+ 		i = kanjiconvsto(lasticon, toupper(JP_DISP));
+ 	mch_settitle(t, i);
+ 	if (t != NULL)
+ 		free(t);
+ 	if (i != NULL)
+ 		free(i);
+ #else
  	mch_settitle(lasttitle, lasticon);
+ #endif
  }
  
  /*
***************
*** 898,908 ****
--- 1064,1080 ----
  {
  	if (fname != NameBuff)			/* if not already expanded */
  	{
+ #ifdef KANJI
+ 		fname = fileconvsto(fname);
+ #endif
  		if (!isFullName(fname))
  		{
  			(void)FullName(fname, NameBuff, MAXPATHL);
  			fname = NameBuff;
  		}
+ #if !defined(notdef) && defined(NT)
+ 		fname_case(fname);
+ #endif
  #ifdef AMIGA
  		else
  		{
***************
*** 910,915 ****
--- 1082,1090 ----
  			fname = NameBuff;
  			fname_case(fname);			/* set correct case for filename */
  		}
+ #endif
+ #ifdef KANJI
+ 		STRCPY(fname, fileconvsfrom(fname));
  #endif
  	}
  	return fname;
diff -crN ../orig/src/charset.c ./src/charset.c
*** ../orig/src/charset.c	Wed Aug 10 13:54:10 1994
--- ./src/charset.c	Thu Jan 07 00:24:36 1999
***************
*** 10,22 ****
--- 10,29 ----
  #include "globals.h"
  #include "proto.h"
  #include "param.h"
+ #ifdef KANJI
+ #include "kanji.h"
+ #endif
  
  
  	char_u *
  transchar(c)
  	int	 c;
  {
+ #ifdef KANJI
+ 	static char_u buf[5];
+ #else
  	static char_u buf[3];
+ #endif
  
  	if (c < ' ' || c == DEL)
  	{
***************
*** 26,41 ****
--- 33,60 ----
  		buf[1] = c ^ 0x40;		/* DEL displayed as ^? */
  		buf[2] = NUL;
  	}
+ #ifdef KANJI
+ 	else if (c < 0x80 || ISdisp(c))
+ #else
  	else if (c <= '~' || c > 0xa0 || p_gr)
+ #endif
  	{
  		buf[0] = c;
  		buf[1] = NUL;
  	}
  	else
  	{
+ #ifdef KANJI
+ 		buf[0] = '[';
+ 		buf[1] = HexChar((c&0xf0)>>4);
+ 		buf[2] = HexChar(c&0x0f);
+ 		buf[3] = ']';
+ 		buf[4] = NUL;
+ #else
  		buf[0] = '~';
  		buf[1] = c - 0x80 + '@';
  		buf[2] = NUL;
+ #endif
  	}
  	return buf;
  }
***************
*** 47,53 ****
--- 66,77 ----
  charsize(c)
  	int c;
  {
+ #ifdef KANJI
+ 	c &= 0xff;
+ 	return	(c < ' ' || c == DEL) ? 2 : ((c < 0x80 || ISdisp(c)) ? 1 : 4);
+ #else
  	return ((c >= ' ' && (p_gr || c <= '~')) || c > 0xa0 ? 1 : 2);
+ #endif
  }
  
  /*
***************
*** 73,80 ****
--- 97,113 ----
  	register int	c;
  	long			col;
  {
+ #ifdef KANJI
+ 	if (c >= ' ' &&  c != DEL)
+ 	{
+ 		if (c < 0x80 || ISdisp(c))
+ 			return(1);
+ 		return(4);
+ 	}
+ #else
  	if ((c >= ' ' && (c <= '~' || p_gr)) || c > 0xa0)
     		return 1;
+ #endif
     	else if (c == TAB && !curwin->w_p_list)
     		return (int)(curbuf->b_p_ts - (col % curbuf->b_p_ts));
     	else
***************
*** 103,107 ****
--- 136,175 ----
  #else
  				|| (c >= 0xc0 && c <= 0xff)
  #endif
+ #ifdef KANJI
+ 				|| ISdisp(c)
+ #endif
+ 				);
+ }
+ 
+ #ifndef notdef
+ /*
+  * return TRUE if 'c' is an abbr character
+  */
+ 	int
+ isabchar(c)
+ 	int c;
+ {
+ 		return (
+ #ifdef __STDC__
+ 				isalnum(c)
+ #else
+ 				isalpha(c) || isdigit(c)
+ #endif
+ 				|| c == '_'
+ 				|| (isascii(c) && isgraph(c))
+ 	/*
+ 	 * we also accept alhpa's with accents
+ 	 */
+ #ifdef MSDOS
+ 				|| (c >= 0x80 && c <= 0xa7) || (c >= 0xe0 && c <= 0xeb)
+ #else
+ # ifdef KANJI
+ 				|| ISdisp(c)
+ # else
+ 				|| (c >= 0xc0 && c <= 0xff)
+ # endif
+ #endif
  				);
  }
+ #endif
diff -crN ../orig/src/clip/clip.c ./src/clip/clip.c
*** ../orig/src/clip/clip.c	Thu Jan 01 09:00:00 1970
--- ./src/clip/clip.c	Wed Jul 07 01:01:46 1999
***************
*** 0 ****
--- 1,267 ----
+ /*=============================================================== vim:ts=4:sw=4:
+  *
+  *	clip --- input clip board
+  *
+  *============================================================================*/
+ #include <windows.h>
+ #include <stdio.h>
+ #include <fcntl.h>
+ 
+ /*==============================================================================
+  *
+  *============================================================================*/
+ #define	BUF_SIZE			128					/* allocate buffer size		  */
+ 
+ /*==============================================================================
+  *
+  *============================================================================*/
+ #if !defined(__DATE__) || !defined(__TIME__)
+ static char		version[] = "clip by Ken'ichi Tsuchida (1999 May 30)";
+ #else
+ static char		version[] = "clip by Ken'ichi Tsuchida (1999 May 30, compiled " __DATE__ " " __TIME__ ")";
+ #endif
+ static	BOOL				o_disp	= FALSE;	/* display input			  */
+ static	int					o_tabs	= 0;		/* expand tabstop			  */
+ static	BOOL				o_exec	= FALSE;	/* execute command			  */
+ static	HANDLE				hReadPipe;
+ 
+ /*==============================================================================
+  *
+  *============================================================================*/
+ /*------------------------------------------------------------------------------
+  *
+  *----------------------------------------------------------------------------*/
+ static void
+ usage()
+ {
+ 	fprintf(stderr, "usage: clip [-pV] [-e <num>]\n");
+ 	fprintf(stderr, "	-p          print display.\n");
+ 	fprintf(stderr, "	-e <num>    expand tabs.\n");
+ 	fprintf(stderr, "	-V          print version.\n");
+ 	exit(2);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *
+  *----------------------------------------------------------------------------*/
+ static BOOL
+ popen(args)
+ char		*	args;
+ {
+ 	STARTUPINFO				si;			/* for CreateProcess call */ 
+ 	PROCESS_INFORMATION		pi;			/* for CreateProcess call */ 
+ 	SECURITY_ATTRIBUTES		saPipe;		/* security for anonymous pipe */ 
+ 	HANDLE					hWritePipe;
+ 	HANDLE					hWritePipe2;
+ 
+ 	/* set up the security attributes for the anonymous pipe */ 
+ 	saPipe.nLength = sizeof(SECURITY_ATTRIBUTES); 
+ 	saPipe.lpSecurityDescriptor = NULL; 
+ 	saPipe.bInheritHandle = TRUE; 
+ 
+ 	/* create the anonymous pipe */ 
+ 	if (!CreatePipe(&hReadPipe, &hWritePipe, &saPipe, 0))
+ 		return(FALSE);
+ 
+ 	if (!DuplicateHandle(GetCurrentProcess(), hReadPipe, GetCurrentProcess(),
+ 							NULL, 0, FALSE, DUPLICATE_SAME_ACCESS))
+ 		return(FALSE);
+ 
+ 	if (!DuplicateHandle(GetCurrentProcess(), hWritePipe, GetCurrentProcess(),
+ 							&hWritePipe2, 0, TRUE, DUPLICATE_SAME_ACCESS))
+ 		return(FALSE);
+ 
+ 	/* Set up the STARTUPINFO structure for the CreateProcess() call */
+ 	memset(&si, 0, sizeof(si));
+ 	si.cb = sizeof(si);
+ 	si.hStdInput = hWritePipe2;
+ 	si.hStdOutput = hWritePipe;
+ 	si.hStdError = hWritePipe2;
+ 	si.dwFlags = STARTF_USESTDHANDLES;
+ 
+ 	if (!CreateProcess(NULL, args, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi))
+ 		return(FALSE);
+ 
+ 	CloseHandle(pi.hThread); 
+ 	CloseHandle(pi.hProcess); 
+ 	CloseHandle(hWritePipe); 
+ 	CloseHandle(hWritePipe2); 
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *
+  *----------------------------------------------------------------------------*/
+ static int
+ pread()
+ {
+ 	static char				chReadBuffer[16];
+ 	static int				cchReadBuffer = -1;
+ 	int						ch;
+ 
+ 	/* read from the pipe until we get an ERROR_BROKEN_PIPE */ 
+ 	for (;;)
+ 	{
+ 		if (cchReadBuffer <= 0)
+ 		{
+ 			if (!ReadFile(hReadPipe, chReadBuffer, sizeof(chReadBuffer),
+ 														&cchReadBuffer, NULL))
+ 			{
+ 				if (GetLastError() == ERROR_BROKEN_PIPE) 
+ 					break;
+ 				return(-1);
+ 			}
+ 			if (cchReadBuffer == 0)
+ 				break;
+ 		}
+ 		ch = chReadBuffer[sizeof(chReadBuffer) - cchReadBuffer];
+ 		cchReadBuffer--;
+ 		return(ch);
+ 	}
+ 	CloseHandle(hReadPipe); 
+ 	return(EOF);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *
+  *----------------------------------------------------------------------------*/
+ void
+ main(argc, argv)
+ int				argc;
+ char		**	argv;
+ {
+ 	char		*	optarg;
+ 	int				skip;
+ 	HANDLE			hClipData;
+ 	char		*	lpClipData;
+ 	char		*	p;
+ 	int				c;
+ 	int				num	= 0;
+ 	int				size;
+ 	int				col = 0;
+ 	char			command[256];
+ 
+ #ifdef XARGS
+ 	xargs(&argc, &argv);
+ #endif
+ 	++argv;
+ 	--argc;
+ 	while (argc >= 1 && argv[0][0] == '-')
+ 	{
+ 		skip = FALSE;
+ 		for (p = argv[0] + 1; *p && skip == FALSE; p++)
+ 		{
+ 			switch (*p) {
+ 			case 'V':
+ 				fprintf(stderr, "%s.\n", version);
+ 				exit(0);
+ 			case 'p':
+ 				o_disp = TRUE;
+ 				break;
+ 			case 'e':						/* expand tabstop	  */
+ 			case 'x':						/* execute command	  */
+ 				if (p[1] != '\0')
+ 					optarg = &p[1];
+ 				else
+ 				{
+ 					++ argv;
+ 					-- argc;
+ 					if (argc >= 1)
+ 						optarg = argv[0];
+ 					else
+ 					{
+ 						fprintf(stderr, "option unmatch.\n");
+ 						usage();
+ 					}
+ 				}
+ 				skip = TRUE;
+ 				switch (*p) {
+ 				case 'e':					/* expand tabstop	  */
+ 					o_tabs = atol((char *)optarg);
+ 					if (o_tabs >= BUF_SIZE)
+ 						exit(1);
+ 					break;
+ 				case 'x':
+ 					o_exec = TRUE;			/* execute command */
+ 					strcpy(command, optarg);
+ 					while (argc > 1)
+ 					{
+ 						strcat(command, " "); 
+ 						++ argv;
+ 						-- argc;
+ 						strcat(command, *argv); 
+ 					} 
+ 					break;
+ 				}
+ 				break;
+ 			default:
+ 				usage();
+ 				break;
+ 			}
+ 		}
+ 		++ argv;
+ 		-- argc;
+ 	}
+ 	if (o_exec && !popen(command))
+ 		exit(1);
+ 	if ((p = malloc(BUF_SIZE + 1)) == NULL)
+ 		exit(1);
+ 	size = BUF_SIZE;
+ 	while ((c = (o_exec ? pread() : fgetc(stdin))) != EOF)
+ 	{
+ 		if (o_tabs && c == '\t')
+ 		{
+ 			int				n_spaces;
+ 			int				i;
+ 
+ 			n_spaces = o_tabs - col % o_tabs;
+ 			if ((num + n_spaces + 1) >= size)
+ 			{
+ 				if ((p = realloc(p, size + BUF_SIZE)) == NULL)
+ 					exit(1);
+ 				size += BUF_SIZE;
+ 			}
+ 			for (i = 0; i < n_spaces; i++)
+ 			{
+ 				p[num++] = ' ';
+ 				if (o_disp)
+ 					fputc(' ', stdout);
+ 				col++;
+ 			}
+ 		}
+ 		else
+ 		{
+ 			if (num >= size)
+ 			{
+ 				if ((p = realloc(p, size + BUF_SIZE)) == NULL)
+ 					exit(1);
+ 				size += BUF_SIZE;
+ 			}
+ 			p[num++] = c;
+ 			if (o_disp)
+ 				fputc(c, stdout);
+ 			col++;
+ 			if (c == '\r' || c == '\n')
+ 				col = 0;
+ 		}
+ 	}
+ 	p[num] = '\0';
+ 	if ((hClipData = GlobalAlloc(GMEM_MOVEABLE, num)) == NULL)
+ 		exit(1);
+ 	if ((lpClipData = GlobalLock(hClipData)) == NULL)
+ 	{
+ 		GlobalFree(hClipData);
+ 		exit(1);
+ 	}
+ 	CopyMemory(lpClipData, p, num);
+ 	GlobalUnlock(hClipData);
+ 	if (OpenClipboard(NULL) == FALSE)
+ 	{
+ 		GlobalFree(hClipData);
+ 		exit(1);
+ 	}
+ 	EmptyClipboard();
+ 	SetClipboardData(CF_TEXT, hClipData);
+ 	CloseClipboard();
+ 	exit(0);
+ }
diff -crN ../orig/src/clip/clip.mak ./src/clip/clip.mak
*** ../orig/src/clip/clip.mak	Thu Jan 01 09:00:00 1970
--- ./src/clip/clip.mak	Sun May 30 23:45:02 1999
***************
*** 0 ****
--- 1,33 ----
+ # vi:ts=8:sw=8
+ # Makefile for VIM on WINNT, using MS SDK
+ #
+ NODEBUG=1
+ TARGETOS=WIN95
+ !include <ntwin32.mak>
+ ccommon= /O2 /Ox /GA
+ optlibs= user32.lib shell32.lib
+ 
+ #>>>>> name of the compiler and linker, name of lib directory
+ CC	= cl -nologo
+ LINK	= cl
+ LIB	= c:\MSdev\vc\lib
+ DBG	= #-v
+ CFLAGS	= $(DEFINES) $(DBG) $(cflags) $(cdebug) $(cvarsmt)
+ 
+ ###########################################################################
+ INCL =
+ OBJ =	clip.obj
+ 
+ ###########################################################################
+ clip.exe: $(OBJ) clip.res
+ 	$(link) $(linkdebug) $(conlflags) -out:clip.exe $(OBJ) clip.res $(guilibsmt)
+ 
+ clip.obj: clip/clip.c $(INCL)
+ 	$(CC) -I. $(CFLAGS) -c clip\clip.c
+ 
+ clip.res: clip/clip.rc
+ 	rc /fo clip.res clip/clip.rc
+ 
+ clean:
+ 	del *.obj
+ 	del *.exe
diff -crN ../orig/src/clip/clip.rc ./src/clip/clip.rc
*** ../orig/src/clip/clip.rc	Thu Jan 01 09:00:00 1970
--- ./src/clip/clip.rc	Sun May 30 23:43:48 1999
***************
*** 0 ****
--- 1,39 ----
+ #include <winver.h>
+ #include <winnt.h>
+ #include <winuser.h>
+ 
+ vim       ICON      "vim.ico"
+ 
+ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
+ #pragma code_page(932)
+ 
+ VS_VERSION_INFO		VERSIONINFO
+ 	FILEVERSION		1,0,0,0
+ 	PRODUCTVERSION	1,0,0,0
+ 	FILEFLAGSMASK	VS_FFI_FILEFLAGSMASK
+ 	FILEFLAGS		0L
+ 	FILEOS          VOS__WINDOWS32
+ 	FILETYPE        VFT_APP
+ 	FILESUBTYPE     VFT2_UNKNOWN
+ BEGIN
+ 	BLOCK	"StringFileInfo"
+ 	BEGIN
+ 		BLOCK	"041104B0"
+ 		BEGIN
+ 			VALUE "Comments",			"clip"
+ 			VALUE "FileDescription",    "clip 1.0"
+ 			VALUE "FileVersion",        "01.00.00.00"
+ 			VALUE "ProductVersion",     "01.00.00.00"
+ 			VALUE "InternalName",       "clip"
+ 			VALUE "OriginalFilename",   "clip"
+ 			VALUE "ProductName",        "Vi IMproved 3.0/JVim 3.0-j1.5"
+ 			VALUE "LegalCopyright",     "Ken'ichi Tsuchida"
+ 		END
+ 	END
+ 	BLOCK	"VarFileInfo"
+ 	BEGIN
+ 		VALUE "Translation", 0x0411, 0x04b0
+ 	END
+ END
+ 
+ //BuildVer:	1
diff -crN ../orig/src/cmdcmds.c ./src/cmdcmds.c
*** ../orig/src/cmdcmds.c	Wed Aug 10 13:54:10 1994
--- ./src/cmdcmds.c	Sun Sep 05 08:41:30 1999
***************
*** 14,19 ****
--- 14,22 ----
  #include "globals.h"
  #include "proto.h"
  #include "param.h"
+ #ifdef KANJI
+ #include "kanji.h"
+ #endif
  
  #if defined(LATTICE) || defined(NT)
  # define mktemp(a)	tmpnam(a)
***************
*** 338,344 ****
--- 341,353 ----
  
  	windgoto((int)Rows - 1, 0);
  	cursor_on();
+ #ifdef KANJI
+ 	cmd = kanjiconvsto(cmd, toupper(JP_SYS));
+ 	(void)call_shell(cmd, 0, TRUE);
+ 	free(cmd);
+ #else
  	(void)call_shell(cmd, 0, TRUE);
+ #endif
  
  #ifdef AMIGA
  	wait_return(term_console ? -1 : TRUE);		/* see below */
***************
*** 394,399 ****
--- 403,411 ----
  	char_u		otmp[TMPNAMELEN];
  #endif
  	linenr_t 	linecount;
+ #ifdef KANJI
+ 	char_u		code;
+ #endif
  
  	/*
  	 * Disallow shell commands from .exrc and .vimrc in current directory for
***************
*** 438,443 ****
--- 450,459 ----
   * This is a trade off between showing the command and not scrolling the
   * text one line up (problem on slow terminals).
   */
+ #ifdef KANJI
+ 	code = *curbuf->b_p_jc;
+ 	*curbuf->b_p_jc = tolower(JP_SYS);
+ #endif
  	must_redraw = CLEAR;		/* screen has been shifted up one line */
  	++no_wait_return;			/* don't call wait_return() while busy */
  	if (do_in && buf_write(curbuf, itmp, NULL, line1, line2, FALSE, 0, FALSE) == FAIL)
***************
*** 445,450 ****
--- 461,469 ----
  		msg_outchar('\n');					/* keep message from writeit() */
  		--no_wait_return;
  		(void)emsg2(e_notcreate, itmp);		/* will call wait_return */
+ #ifdef KANJI
+ 		*curbuf->b_p_jc = code;
+ #endif
  		return;
  	}
  	if (!do_out)
***************
*** 497,503 ****
--- 516,528 ----
  	cursor_on();
  			/* errors are ignored, so you can see the error
  			   messages from the command; use 'u' to fix the text */
+ #ifdef KANJI
+ 	buff = kanjiconvsto(IObuff, toupper(JP_SYS));
+ 	(void)call_shell(buff, 1, FALSE);
+ 	free(buff);
+ #else
  	(void)call_shell(IObuff, 1, FALSE);
+ #endif
  
  	if (do_out)
  	{
***************
*** 527,532 ****
--- 552,560 ----
  		--no_wait_return;
  		wait_return(FALSE);
  	}
+ #ifdef KANJI
+ 	*curbuf->b_p_jc = code;
+ #endif
  	updateScreen(CLEAR);		/* do this before messages below */
  
  	if (linecount > p_report)
diff -crN ../orig/src/cmdline.c ./src/cmdline.c
*** ../orig/src/cmdline.c	Fri Aug 12 07:08:56 1994
--- ./src/cmdline.c	Tue Dec 21 00:32:36 1999
***************
*** 17,22 ****
--- 17,25 ----
  #include "cmdtab.h"
  #include "ops.h"			/* included because we call functions in ops.c */
  #include "fcntl.h"			/* for chdir() */
+ #ifdef KANJI
+ #include "kanji.h"
+ #endif
  
  /*
   * variables shared between getcmdline() and redrawcmdline()
***************
*** 24,30 ****
--- 27,37 ----
  static int		 cmdlen;		/* number of chars on command line */
  static int		 cmdpos;		/* current cursor position */
  static int		 cmdspos;		/* cursor column on screen */
+ #ifdef NT
+ 	   int		 cmdfirstc; 	/* ':', '/' or '?' */
+ #else
  static int		 cmdfirstc; 	/* ':', '/' or '?' */
+ #endif
  static char_u	*cmdbuff;		/* pointer to command line buffer */
  
  /*
***************
*** 80,86 ****
--- 87,98 ----
  	int			firstc; 	/* either ':', '/', or '?' */
  	char_u		*buff;	 	/* buffer for command string */
  {
+ #ifdef KANJI
+ 	unsigned int	 	c;
+ 			 int		k;
+ #else
  	register char_u 	c;
+ #endif
  			 int		cc;
  			 int		nextc = 0;
  	register int		i;
***************
*** 169,174 ****
--- 181,193 ----
  			c = vgetc();
  			if (c == Ctrl('C'))
  				got_int = FALSE;
+ #ifdef KANJI
+ 			else if (ISkanji(c))
+ 				k = vgetc();
+ #endif
+ #if defined(MSDOS) && defined(TERMCAP)		/* DOSGEN */
+ 			chk_ctlkey((int *)&c, &k);
+ #endif
  		}
  
  		if (lookfor && c != K_SDARROW && c != K_SUARROW)
***************
*** 185,190 ****
--- 204,221 ----
  		c = dodigraph(c);
  #endif
  
+ #ifdef FEPCTRL
+ 		if (KeyTyped && ((0 <= c && c <= 0x20 && c != ESC) || c == K_ZERO)
+ 				&& curbuf->b_p_fc
+ 				&& (p_fk != NULL && STRRCHR(p_fk, c == K_ZERO ? '@' : c + '@') != NULL))
+ 		{
+ 			if (fep_get_mode())
+ 				fep_force_off();
+ 			else
+ 				fep_force_on();
+ 			continue;
+ 		}
+ #endif
  		if (c == '\n' || c == '\r' || (c == ESC && !KeyTyped))
  		{
  			if (ccheck_abbr(c + 0x100))
***************
*** 224,229 ****
--- 255,261 ----
  			c = '\n';
  
  		do_abbr = TRUE;			/* default: check for abbreviation */
+ 
  		switch (c)
  		{
  		case BS:
***************
*** 234,239 ****
--- 266,276 ----
  				 * character, except at end of line
  				 */
  				if (c == DEL && cmdpos != cmdlen)
+ #ifdef KANJI
+ 					if (ISkanji(buff[cmdpos]))
+ 						cmdpos += 2;
+ 					else
+ #endif
  					++cmdpos;
  				if (cmdpos > 0)
  				{
***************
*** 243,253 ****
--- 280,303 ----
  						while (cmdpos && isspace(buff[cmdpos - 1]))
  							--cmdpos;
  						i = isidchar(buff[cmdpos - 1]);
+ #ifdef KANJI
+ 						if (cmdpos && (ISkanjiPosition(buff, cmdpos) == 2))
+ 						{
+ 							while (cmdpos && !isspace(buff[cmdpos - 1])
+ 									&& (ISkanjiPosition(buff, cmdpos) == 2))
+ 								cmdpos -= 2;
+ 						}
+ 						else
+ #endif
  						while (cmdpos && !isspace(buff[cmdpos - 1]) && isidchar(buff[cmdpos - 1]) == i)
  							--cmdpos;
  					}
  					else
+ #ifdef KANJI
+ 						cmdpos -= ISkanjiPosition(buff, cmdpos) == 2 ? 2 : 1;
+ #else
  						--cmdpos;
+ #endif
  					cmdlen -= j - cmdpos;
  					i = cmdpos;
  					while (i < cmdlen)
***************
*** 303,308 ****
--- 353,366 ----
  				{
  						if (cmdpos >= cmdlen)
  								break;
+ #ifdef KANJI
+ 						if (ISkanji(buff[cmdpos]))
+ 						{
+ 							cmdspos += 2;
+ 							cmdpos ++;
+ 						}
+ 						else
+ #endif
  						cmdspos += charsize(buff[cmdpos]);
  						++cmdpos;
  				}
***************
*** 316,321 ****
--- 374,387 ----
  						if (cmdpos <= 0)
  								break;
  						--cmdpos;
+ #ifdef KANJI
+ 						if (ISkanji(buff[cmdpos - 1]))
+ 						{
+ 							cmdspos -= 2;
+ 							cmdpos --;
+ 						}
+ 						else
+ #endif
  						cmdspos -= charsize(buff[cmdpos]);
  				}
  				while (c == K_SLARROW && buff[cmdpos - 1] != ' ');
***************
*** 427,435 ****
--- 493,510 ----
  				}
  				continue;
  
+ #ifdef NT
+ 		case Ctrl('S'):
+ 				if (!GuiWin)
+ 					break;
+ #endif
  		case Ctrl('V'):
  				putcmdline('^', buff);
+ #ifdef KANJI
+ 				c = get_literal(&nextc, &k);
+ #else
  				c = get_literal(&nextc);	/* get next (two) character(s) */
+ #endif
  				do_abbr = FALSE;			/* don't do abbreviation now */
  				break;
  
***************
*** 454,466 ****
--- 529,565 ----
  		if (do_abbr && !isidchar(c) && ccheck_abbr(c))
  			continue;
  
+ #ifdef KANJI
+ 		if (cmdlen < CMDBUFFSIZE - 3)
+ #else
  		if (cmdlen < CMDBUFFSIZE - 2)
+ #endif
  		{
+ #ifdef KANJI
+ 				if (ISkanji(c))
+ 				{
+ 					cmdlen += 2;
+ 					for (i = cmdlen; i > cmdpos; --i)
+ 							buff[i] = buff[i - 2];
+ 					buff[cmdpos] = c;
+ 					buff[cmdpos + 1] = k;
+ 					msg_outtrans(buff + cmdpos, cmdlen - cmdpos);
+ 					cmdpos += 2;
+ 				}
+ 				else
+ 				{
+ #endif
  				for (i = cmdlen++; i > cmdpos; --i)
  						buff[i] = buff[i - 1];
  				buff[cmdpos] = c;
  				msg_outtrans(buff + cmdpos, cmdlen - cmdpos);
  				++cmdpos;
+ #ifdef KANJI
+ 				}
+ 				if (ISkanji(c))
+ 					i = 2;
+ 				else
+ #endif
  				i = charsize(c);
  				cmdspos += i;
  		}
***************
*** 475,480 ****
--- 574,587 ----
  	 */
  	if (cmdlen != 0)
  	{
+ #ifdef USE_OPT
+ 		if (!(p_opt & OPT_NO_SMART_CMDLINE)
+ 				&& ((retval != OK)
+ 					|| (hislen != 0 && hisidx >= 0 && history[hisidx] != NULL
+ 						&& strcmp(history[hisidx], buff) == 0)))
+ 			;
+ 		else
+ #endif
  		if (hislen != 0)
  		{
  			if (++hisidx == hislen)
***************
*** 496,501 ****
--- 603,612 ----
  	 */
  	msg_check();
  	State = NORMAL;
+ #ifdef FEPCTRL
+ 	if (curbuf->b_p_fc && !FepOn && fep_get_mode())
+ 		fep_force_off();
+ #endif
  	return retval;
  }
  
***************
*** 550,562 ****
--- 661,717 ----
  
  	cmdspos = 1;
  	for (i = 0; i < cmdlen && i < cmdpos; ++i)
+ #ifdef KANJI
+ 		if (ISkanji(cmdbuff[i]))
+ 		{
+ 			cmdspos += 2;
+ 			i++;
+ 		}
+ 		else
+ #endif
  		cmdspos += charsize(cmdbuff[i]);
  }
  
  	static void
  cursorcmd()
  {
+ #ifdef KANJI
+ 	int			i;
+ 	int			col = 1;
+ 	int			row = 0;
+ 
+ 	for (i = 0; col < cmdspos && i < cmdpos; ++i)
+ 	{
+ 		if (ISkanji(cmdbuff[i]))
+ 		{
+ 			if (col >= (Columns - 1))
+ 			{
+ 				col = 2;
+ 				row++;
+ 			}
+ 			else if (col >= (Columns - 2))
+ 			{
+ 				col = 0;
+ 				row++;
+ 			}
+ 			else
+ 				col += 2;
+ 			i++;
+ 		}
+ 		else
+ 		{
+ 			col += charsize(cmdbuff[i]);
+ 			if (col >= Columns)
+ 			{
+ 				col -= Columns;
+ 				row++;
+ 			}
+ 		}
+ 	}
+ 	msg_pos(cmdline_row + row, col);
+ #else
  	msg_pos(cmdline_row + (cmdspos / (int)Columns), cmdspos % (int)Columns);
+ #endif
  	windgoto(msg_row, msg_col);
  }
  
***************
*** 669,674 ****
--- 824,832 ----
  	int					usefilter = FALSE;		/* filter instead of file name */
  	char_u				*nextcomm = NULL;		/* no next command yet */
  	int					amount = 0;				/* for ":>" and ":<"; init for gcc */
+ #ifdef KANJI
+ 	char_u				code;
+ #endif
  
  	if (quitmore)
  		--quitmore;		/* when not editing the last file :q has to be typed twice */
***************
*** 1020,1028 ****
--- 1178,1206 ----
  	 */
  	if (argt & XFILE)
  	{
+ #ifdef NT
+ 		int quote = FALSE;
+ #endif
  		for (p = arg; *p; ++p)
  		{
  			c = *p;
+ #ifdef NT
+ 			if (c == '"' && *(p - 1) != '\\')
+ 			{
+ 				if (quote)
+ 					quote = FALSE;
+ 				else
+ 					quote = TRUE;
+ 				continue;
+ 			}
+ 			if (quote)
+ 				continue;
+ #endif
+ #ifdef USE_OPT
+ 			if ((p_opt & OPT_EXPAND_CMDLINE) && ((c == '&') || (c == '@')))
+ 				;
+ 			else
+ #endif
  			if (c != '%' && c != '#')	/* nothing to expand */
  				continue;
  			if (*(p - 1) == '\\')		/* remove escaped char */
***************
*** 1032,1037 ****
--- 1210,1239 ----
  				continue;
  			}
  
+ #ifdef USE_OPT
+ 			if ((p_opt & OPT_EXPAND_CMDLINE) && (c == '@'))
+ 			{
+ 				if (check_fname() == FAIL)
+ 					goto doend;
+ 				q = gettail(curbuf->b_filename);
+ 				n = 1;
+ 			}
+ 			else if ((p_opt & OPT_EXPAND_CMDLINE) && (c == '&'))
+ 			{
+ 				static char_u	buf[MAXPATHL];
+ 				if (check_fname() == FAIL)
+ 					goto doend;
+ 				STRCPY(buf, curbuf->b_filename);
+ 				q = buf;
+ 				q = gettail(buf);
+ 				*q = NUL;
+ 				q = buf;
+ 				if (*q && ispathsep(*(q + STRLEN(q) - 1)))
+ 					*(q + STRLEN(q) - 1) = NUL;
+ 				n = 1;
+ 			}
+ 			else
+ #endif
  			if (c == '%')				/* current file */
  			{
  				if (check_fname() == FAIL)
***************
*** 1562,1567 ****
--- 1764,1772 ----
  				}
  				if (!u_save(line2, (linenr_t)(line2 + 1)))
  					break;
+ #ifdef KANJI
+ 				code = *curbuf->b_p_jc;
+ #endif
  				if (*arg == NUL)
  				{
  					if (check_fname() == FAIL)	/* check for no file name at all */
***************
*** 1570,1575 ****
--- 1775,1783 ----
  				}
  				else
  					i = readfile(arg, NULL, line2, FALSE, (linenr_t)0, MAXLNUM);
+ #ifdef KANJI
+ 				*curbuf->b_p_jc = code;
+ #endif
  				if (i == FAIL)
  				{
  					emsg2(e_notopen, arg);
***************
*** 1580,1586 ****
  
  		case CMD_cd:
  		case CMD_chdir:
! #ifdef UNIX
  				/*
  				 * for UNIX ":cd" means: go to home directory
  				 */
--- 1788,1794 ----
  
  		case CMD_cd:
  		case CMD_chdir:
! #if defined(UNIX) || !defined(notdef)	/* ken */
  				/*
  				 * for UNIX ":cd" means: go to home directory
  				 */
***************
*** 1613,1625 ****
--- 1821,1843 ----
  				/*FALLTHROUGH*/
  
  		case CMD_pwd:
+ #ifdef KANJI
+ 				i = vim_dirname(NameBuff, MAXPATHL);
+ 				STRCPY(NameBuff, fileconvsfrom(NameBuff));
+ 				if (i == OK)
+ #else
  				if (vim_dirname(NameBuff, MAXPATHL) == OK)
+ #endif
  					msg(NameBuff);
  				else
  					emsg(e_unknown);
  				break;
  
  		case CMD_equal:
+ #ifndef notdef
+ 				if (addr_count == 0)		/* quick hack */
+ 					line2 = curbuf->b_ml.ml_line_count;
+ #endif
  				smsg((char_u *)"line %ld", (long)line2);
  				break;
  
***************
*** 1771,1777 ****
--- 1989,2009 ----
  				break;
  
  		case CMD_version:
+ #ifndef KANJI
  				msg(longVersion);
+ #else
+ 				{
+ 					char			buf[256];
+ # ifdef ONEW
+ 					extern char *Onew_version();
+ 					sprintf(buf, "%s / %s + %s",
+ 								longVersion, longJpVersion, Onew_version());
+ # else
+ 					sprintf(buf, "%s / %s", longVersion, longJpVersion);
+ # endif
+ 					msg(buf);
+ 				}
+ #endif
  				break;
  
  		case CMD_winsize:					/* obsolete command */
***************
*** 1779,1784 ****
--- 2011,2030 ----
  				skipspace(&arg);
  				line2 = getdigits(&arg);
  				set_winsize((int)line1, (int)line2, TRUE);
+ #ifdef NT
+ 				{
+ 					char_u		buf[32];
+ 					char_u		*s;
+ 
+ 					sprintf(buf, "%d,%d", Columns, Rows);
+ 					s = strsave(buf);
+ 					if (s != NULL)
+ 					{
+ 						free(p_win);
+ 						p_win = s;
+ 					}
+ 				}
+ #endif
  				break;
  
  		case CMD_delete:
***************
*** 1918,1937 ****
--- 2164,2195 ----
  						arg = (char_u *)EXRC_FILE;
  #ifdef UNIX
  						/* with Unix it is possible to open a directory */
+ # ifdef KANJI
+ 					if (isdir(fileconvsto(arg)) == TRUE)
+ # else
  					if (isdir(arg) == TRUE)
+ # endif
  					{
  						EMSG2("\"%s\" is a directory", arg);
  						break;
  					}
  #endif
+ #ifdef KANJI
+ 					if (!forceit && (fd = fopen(fileconvsto(arg), "r")) != NULL)
+ #else
  					if (!forceit && (fd = fopen((char *)arg, "r")) != NULL)
+ #endif
  					{
  						fclose(fd);
  						EMSG2("\"%s\" exists (use ! to override)", arg);
  						break;
  					}
  
+ #ifdef KANJI
+ 					if ((fd = fopen(fileconvsto(arg), "w")) == NULL)
+ #else
  					if ((fd = fopen((char *)arg, "w")) == NULL)
+ #endif
  					{
  						EMSG2("Cannot open \"%s\" for writing", arg);
  						break;
***************
*** 2104,2115 ****
--- 2362,2381 ----
  	/*
  	 * write to other file or b_notedited set: overwriting only allowed with '!'
  	 */
+ #ifdef KANJI
+ 	if ((other || curbuf->b_notedited) && !forceit && !append && !p_wa && (fd = fopen(fileconvsto(fname), "r")) != NULL)
+ #else
  	if ((other || curbuf->b_notedited) && !forceit && !append && !p_wa && (fd = fopen((char *)fname, "r")) != NULL)
+ #endif
  	{								/* don't overwrite existing file */
  		fclose(fd);
  #ifdef UNIX
  			/* with UNIX it is possible to open a directory */
+ # ifdef KANJI
+ 		if (isdir(fileconvsto(fname)) == TRUE)
+ # else
  		if (isdir(fname) == TRUE)
+ # endif
  			EMSG2("\"%s\" is a directory", fname);
  		else
  #endif
***************
*** 2241,2246 ****
--- 2507,2530 ----
  		curbuf->b_endop.lnum = 0;
  	}
  
+ #ifdef KANJI
+ 	if (!oldbuf && !other_file && forceit)
+ 	{
+ 		char_u	code = *curbuf->b_p_jc;
+ # ifdef FEXRC
+ 		int		fexrc = p_fexrc;
+ 		p_fexrc = FALSE;
+ # endif
+ 
+ 		*curbuf->b_p_jc = tolower(*curbuf->b_p_jc);
+ 		(void)open_buffer();
+ 		*curbuf->b_p_jc = code;
+ # ifdef FEXRC
+ 		p_fexrc = fexrc;
+ # endif
+ 	}
+ 	else
+ #endif
  	if (!oldbuf)						/* need to read the file */
  		(void)open_buffer();
  	win_init(curwin);
***************
*** 2315,2320 ****
--- 2599,2609 ----
  
  	for (p = arg; *p; ++p)
  	{
+ #ifdef KANJI
+ 		if (ISkanji(*p))
+ 			p++;
+ 		else
+ #endif
  		if (*p == '\\' && p[1])
  			++p;
  		else if (*p == '|' || *p == '\n')
***************
*** 2339,2355 ****
--- 2628,2658 ----
  	}
  	if (curbuf->b_changed)
  		(void)autowrite(curbuf);
+ #ifdef KANJI
+ 	remove(fileconvsto(p_ef));
+ #else
  	remove((char *)p_ef);
+ #endif
  	outchar(':');
  	outstr(arg);		/* show what we are doing */
  	sprintf((char *)IObuff, "%s %s %s", arg, p_sp, p_ef);
+ #ifdef NT
+ 	DoMake = TRUE;
+ #endif
  	doshell(IObuff);
+ #ifdef NT
+ 	DoMake = FALSE;
+ #endif
  #ifdef AMIGA
  	flushbuf();
  	vpeekc();		/* read window status report and redraw before message */
  #endif
  	(void)qf_init();
+ #ifdef KANJI
+ 	remove(fileconvsto(p_ef));
+ #else
  	remove((char *)p_ef);
+ #endif
  }
  
  /* 
***************
*** 2395,2400 ****
--- 2698,2711 ----
  			 * for MSDOS a backslash is part of a file name.
  			 * Only skip ", space and tab.
  			 */
+ #ifdef KANJI
+ 			if (ISkanji(*str))
+ 			{
+ 				*p++ = *str++;
+ 				*p++ = *str;
+ 			}
+ 			else
+ #endif
  #ifdef MSDOS
  			if (*str == '\\' && (str[1] == '"' || str[1] == ' ' || str[1] == '\t'))
  #else
***************
*** 2414,2421 ****
  		skipspace(&str);
  		*p = NUL;
  	}
! 	
  	i = ExpandWildCards(new_count, new_files, &exp_count, &exp_files, FALSE, TRUE);
  	free(new_files);
  	if (i == FAIL)
  		return FAIL;
--- 2725,2754 ----
  		skipspace(&str);
  		*p = NUL;
  	}
! 
! #ifdef KANJI
! 	{
! 		char_u	*	fname;
! 		int			j;
! 
! 		for (j = 0; j < new_count; j++)
! 		{
! 			fname = fileconvsfrom(new_files[j]);
! 			new_files[j] = strsave(fname);
! 		}
! 		i = ExpandWildCards(new_count, new_files, &exp_count, &exp_files, FALSE, TRUE);
! 		for (j = 0; j < new_count; j++)
! 			free(new_files[j]);
! 		for (j = 0; j < exp_count; j++)
! 		{
! 			fname = fileconvsfrom(exp_files[j]);
! 			free(exp_files[j]);
! 			exp_files[j] = strsave(fname);
! 		}
! 	}
! #else
  	i = ExpandWildCards(new_count, new_files, &exp_count, &exp_files, FALSE, TRUE);
+ #endif
  	free(new_files);
  	if (i == FAIL)
  		return FAIL;
***************
*** 2697,2702 ****
--- 3030,3036 ----
  #endif /* WEBB_COMPLETE */
  				STRNCPY(&buff[i], p2, STRLEN(p2));
  				cmdlen += difflen;
+ 
  				cmdpos += difflen;
  			}
  			free(p2);
***************
*** 2795,2801 ****
--- 3129,3154 ----
  				emsg(e_nomatch);
  		}
  #else
+ # ifdef KANJI
+ 		{
+ 			char_u	*	fname = fileconvsto(str);
+ 
+ 			len = ExpandWildCards(1, (char_u **)&fname,
+ 							&cmd_numfiles, &cmd_files, FALSE, list_notfound);
+ 			if (len != FAIL)
+ 			{
+ 				for (i = 0; i < cmd_numfiles; i++)
+ 				{
+ 					fname = fileconvsfrom(cmd_files[i]);
+ 					free(cmd_files[i]);
+ 					cmd_files[i] = strsave(fname);
+ 				}
+ 			}
+ 		}
+ 		if (len == FAIL)
+ # else
  		if (ExpandWildCards(1, (char_u **)&str, &cmd_numfiles, &cmd_files, FALSE, list_notfound) == FAIL)
+ # endif
  			/* error: do nothing */;
  		else if (cmd_numfiles == 0)
  			emsg(e_nomatch);
***************
*** 2969,2976 ****
--- 3322,3345 ----
  		files_found = (char_u **)"";
  	}
  #else
+ # ifdef KANJI
+ 	{
+ 		char_u	*	fname = fileconvsto(file_str);
+ 
+ 		if (ExpandWildCards(1, &fname, &num_files, &files_found, FALSE, FALSE)
+ 																	== FAIL)
+ 			return FAIL;
+ 		for (i = 0; i < num_files; i++)
+ 		{
+ 			fname = fileconvsfrom(files_found[i]);
+ 			free(files_found[i]);
+ 			files_found[i] = strsave(fname);
+ 		}
+ 	}
+ # else
  	if (ExpandWildCards(1, &file_str, &num_files, &files_found, FALSE, FALSE) == FAIL)
  		return;
+ # endif
  #endif /* WEBB_COMPLETE */
  
  	/* find the maximum length of the file names */
***************
*** 3001,3011 ****
--- 3370,3388 ----
  					msg_outchar(' ');
  #ifdef WEBB_COMPLETE
  			if (expand_context == EXPAND_FILES)
+ # ifdef KANJI
+ 				j = isdir(fileconvsto(files_found[k]));	/* highlight directories */
+ # else
  				j = isdir(files_found[k]);	/* highlight directories */
+ # endif
  			else
  				j = FALSE;
  #else
+ # ifdef KANJI
+ 			j = isdir(fileconvsto(files_found[k]));	/* highlight directories */
+ # else
  			j = isdir(files_found[k]);	/* highlight directories */
+ # endif
  #endif /* WEBB_COMPLETE */
  			if (j)
  			{
***************
*** 3089,3095 ****
  			fname[j] = NUL;
  			if (gettail(fname)[0] != '~')
  			{
! #ifdef MSDOS
  			/*
  			 * if there is no dot in the file name, add "*.*" instead of "*".
  			 */
--- 3466,3472 ----
  			fname[j] = NUL;
  			if (gettail(fname)[0] != '~')
  			{
! #if defined(MSDOS) && !defined(XARGS)
  			/*
  			 * if there is no dot in the file name, add "*.*" instead of "*".
  			 */
***************
*** 3109,3115 ****
  		}
  	}
  #else /* WEBB_COMPLETE */
! #ifdef MSDOS
  	int		i;
  #endif
  
--- 3486,3492 ----
  		}
  	}
  #else /* WEBB_COMPLETE */
! #if defined(MSDOS) && !defined(XARGS)
  	int		i;
  #endif
  
***************
*** 3117,3123 ****
  	if (retval != NULL)
  	{
  		STRNCPY(retval, fname, (size_t)len);
! #ifdef MSDOS
  	/*
  	 * if there is no dot in the file name, add "*.*" instead of "*".
  	 */
--- 3494,3500 ----
  	if (retval != NULL)
  	{
  		STRNCPY(retval, fname, (size_t)len);
! #if defined(MSDOS) && !defined(XARGS)
  	/*
  	 * if there is no dot in the file name, add "*.*" instead of "*".
  	 */
***************
*** 3153,3162 ****
--- 3530,3580 ----
  #ifdef MSDOS
  	int				error = FALSE;
  #endif
+ #ifdef KANJI
+ 	char_u			*p;
+ #endif
  
  	expand_env(fname, NameBuff, MAXPATHL);		/* use NameBuff for expanded name */
+ #ifdef KANJI
+ 	if ((p = gettail(NameBuff)) != NULL
+ 			&& (STRCMP(p, VIMRC_FILE) == 0
+ 					|| (STRNCMP(p, VIMRC_FILE, STRLEN(VIMRC_FILE))==0
+ 									&& p[STRLEN(VIMRC_FILE)] == '.')))
+ 	{
+ 		memmove(p + 2, p + 1, strlen(p));
+ 		p[1] = 'j';
+ 		if ((fp = fopen(fileconvsto(NameBuff), READBIN)) != NULL)
+ 			;
+ # ifdef NT
+ 		else if (p[0] == '_')
+ 		{
+ 			p[0] = '.';
+ 			fp = fopen(fileconvsto(NameBuff), READBIN);
+ 		}
+ # endif
+ 		if (fp == NULL)
+ 		{
+ 			expand_env(fname, NameBuff, MAXPATHL);
+ 			if ((fp = fopen(fileconvsto(NameBuff), READBIN)) != NULL)
+ 				;
+ # ifdef NT
+ 			else if (p[0] == '_')
+ 			{
+ 				*p = '.';
+ 				if ((fp = fopen(fileconvsto(NameBuff), READBIN)) == NULL)
+ 					return FAIL;
+ 			}
+ # endif
+ 			else
+ 				return FAIL;
+ 		}
+ 	}
+ 	else if ((fp = fopen(fileconvsto(NameBuff), READBIN)) == NULL)
+ 		return FAIL;
+ #else
  	if ((fp = fopen((char *)NameBuff, READBIN)) == NULL)
  		return FAIL;
+ #endif
  
  	++dont_sleep;			/* don't call sleep() in emsg() */
  	len = 0;
***************
*** 3184,3189 ****
--- 3602,3618 ----
  			IObuff[len] = NUL;
  		}
  		breakcheck();		/* check for ^C here, so recursive :so will be broken */
+ #ifdef KANJI
+ 		if (len >= 2)
+ 		{
+ 			char		tmp[IOSIZE];
+ 
+ 			len = kanjiconvsfrom(IObuff, len, tmp, IOSIZE, NULL, JP_SYS, NULL);
+ 			tmp[len] = NUL;
+ 			docmdline((char_u *)tmp);
+ 		}
+ 		else
+ #endif
  		docmdline(IObuff);
  		len = 0;
  	}
***************
*** 3568,3573 ****
--- 3997,4043 ----
  
  	if (argt & XFILE)
  		expand_context = EXPAND_FILES;
+ #ifdef NT
+ 	if (argt & XFILE)
+ 	{
+ 		if (p == arg)
+ 			;
+ 		else
+ 		{
+ 			int			j;
+ 			int			first = TRUE;
+ 			STRCPY(IObuff, arg);
+ 			p = &IObuff[strlen(IObuff)];
+ 			for (j = strlen(IObuff); j >= 0; j--)
+ 			{
+ #ifdef KANJI
+ 				if ((IObuff[j] == ' ' || IObuff[j] == TAB)
+ 								&& isdir(fileconvsto(&IObuff[j + 1])) == OK)
+ #else
+ 				if ((IObuff[j] == ' ' || IObuff[j] == TAB)
+ 											&& isdir(&IObuff[j + 1]) == OK)
+ #endif
+ 				{
+ 					expand_pattern = arg + j + 1;
+ 					break;
+ 				}
+ 				if ((IObuff[j] == '/' || IObuff[j] == '\\') && first == TRUE)
+ 				{
+ 					IObuff[j] = NUL;
+ 					first = FALSE;
+ 				}
+ 			}
+ #ifdef KANJI
+ 			if (j <= 0 && (IObuff[0] != ' ' && IObuff[0] != TAB)
+ 										&& isdir(fileconvsto(&IObuff[0])) == OK)
+ #else
+ 			if (j <= 0 && (IObuff[0] != ' ' && IObuff[0] != TAB)
+ 											&& isdir(&IObuff[0]) == OK)
+ #endif
+ 				expand_pattern = arg;
+ 		}
+ 	}
+ #endif
  
  /*
   * 6. switch on command name
***************
*** 3590,3595 ****
--- 4060,4070 ----
  		case CMD_visual:
  			for (p = arg; *p; ++p)
  			{
+ #ifdef KANJI
+ 				if (ISkanji(*p))
+ 					p += 2;
+ 				else
+ #endif
  				if (*p == '\\' && p[1])
  					++p;
  				else if (*p == '|' || *p == '\n')
***************
*** 3604,3609 ****
--- 4079,4091 ----
  
  			while (arg[0] != NUL && arg[0] != delim)
  			{
+ #ifdef KANJI
+ 				if (ISkanji(arg[0]))
+ 					++arg;
+ 				else if (arg[0] == '\\' && arg[1] != NUL && ISkanji(arg[1]))
+ 					arg += 2;
+ 				else
+ #endif
  				if (arg[0] == '\\' && arg[1] != NUL)
  					++arg;
  				++arg;
***************
*** 3619,3624 ****
--- 4101,4113 ----
  			for (i = 0; i < 2; i++, arg++)
  				while (arg[0] != NUL && arg[0] != delim)
  				{
+ #ifdef KANJI
+ 					if (ISkanji(arg[0]))
+ 						++arg;
+ 					else if (arg[0] == '\\' && arg[1] != NUL && ISkanji(arg[1]))
+ 						arg += 2;
+ 					else
+ #endif
  					if (arg[0] == '\\' && arg[1] != NUL)
  						++arg;
  					++arg;
***************
*** 3660,3674 ****
--- 4149,4199 ----
  	int		i;
  
  	if (!expand_interactively || expand_context == EXPAND_FILES)
+ #ifdef KANJI
+ 	{
+ 		char_u	*	fname = fileconvsto(pat);
+ 
+ 		ret = ExpandWildCards(1, &fname, num_file, file, files_only, list_notfound);
+ 		if (ret != FAIL)
+ 		{
+ 			for (i = 0; i < *num_file; i++)
+ 			{
+ 				fname = fileconvsfrom((*file)[i]);
+ 				free((*file)[i]);
+ 				(*file)[i] = strsave(fname);
+ 			}
+ 		}
+ 		return(ret);
+ 	}
+ #else
  		return ExpandWildCards(1, &pat, num_file, file, files_only, list_notfound);
+ #endif
  	else if (expand_context == EXPAND_DIRECTORIES)
  	{
+ #ifdef KANJI
+ 		char_u	*	fname = fileconvsto(pat);
+ 
+ 		if (ExpandWildCards(1, &fname, num_file, file, files_only, list_notfound)
+ 																	== FAIL)
+ 			return FAIL;
+ 		for (i = 0; i < *num_file; i++)
+ 		{
+ 			fname = fileconvsfrom((*file)[i]);
+ 			free((*file)[i]);
+ 			(*file)[i] = strsave(fname);
+ 		}
+ #else
  		if (ExpandWildCards(1, &pat, num_file, file, files_only, list_notfound)
  																	== FAIL)
  			return FAIL;
+ #endif
  		count = 0;
  		for (i = 0; i < *num_file; i++)
+ #ifdef KANJI
+ 			if (isdir(fileconvsto((*file)[i])))
+ #else
  			if (isdir((*file)[i]))
+ #endif
  				(*file)[count++] = (*file)[i];
  			else
  				free((*file)[i]);
diff -crN ../orig/src/digraph.c ./src/digraph.c
*** ../orig/src/digraph.c	Wed Aug 10 13:54:10 1994
--- ./src/digraph.c	Sun Dec 01 23:09:20 1996
***************
*** 23,188 ****
  
  #ifdef MSDOS
  char_u	digraphdefault[][3] = 		/* standard MSDOS digraphs */
! 	   {{'C', ',', 128},	/*  */
! 		{'u', '"', 129},	/*  */
! 		{'e', '\'', 130},	/*  */
! 		{'a', '^', 131},	/*  */
! 		{'a', '"', 132},	/*  */
! 		{'a', '`', 133},	/*  */
! 		{'a', '@', 134},	/*  */
! 		{'c', ',', 135},	/* ~G (SAS C can't handle the real char) */
! 		{'e', '^', 136},	/* ~H (SAS C can't handle the real char) */
! 		{'e', '"', 137},	/*  */
! 		{'e', '`', 138},	/*  */
! 		{'i', '"', 139},	/*  */
! 		{'i', '^', 140},	/*  */
! 		{'i', '`', 141},	/*  */
! 		{'A', '"', 142},	/*  */
! 		{'A', '@', 143},	/*  */
! 		{'E', '\'', 144},	/*  */
! 		{'a', 'e', 145},	/*  */
! 		{'A', 'E', 146},	/*  */
! 		{'o', '^', 147},	/*  */
! 		{'o', '"', 148},	/*  */
! 		{'o', '`', 149},	/*  */
! 		{'u', '^', 150},	/*  */
! 		{'u', '`', 151},	/*  */
! 		{'y', '"', 152},	/*  */
! 		{'O', '"', 153},	/*  */
! 		{'U', '"', 154},	/*  */
! 	    {'c', '|', 155},	/*  */
! 	    {'$', '$', 156},	/*  */
  	    {'Y', '-', 157},	/* ~] (SAS C can't handle the real char) */
! 	    {'P', 't', 158},	/*  */
! 	    {'f', 'f', 159},	/*  */
! 		{'a', '\'', 160},	/*  */
! 		{'i', '\'', 161},	/*  */
! 		{'o', '\'', 162},	/*  */
  		{'u', '\'', 163},	/* xx (SAS C can't handle the real char) */
! 		{'n', '~', 164},	/*  */
! 		{'N', '~', 165},	/*  */
! 		{'a', 'a', 166},	/*  */
! 		{'o', 'o', 167},	/*  */
! 		{'~', '?', 168},	/*  */
! 		{'-', 'a', 169},	/*  */
! 		{'a', '-', 170},	/*  */
! 		{'1', '2', 171},	/*  */
! 		{'1', '4', 172},	/*  */
! 		{'~', '!', 173},	/*  */
! 		{'<', '<', 174},	/*  */
! 		{'>', '>', 175},	/*  */
  
! 		{'s', 's', 225},	/*  */
! 		{'j', 'u', 230},	/*  */
! 		{'o', '/', 237},	/*  */
! 		{'+', '-', 241},	/*  */
! 		{'>', '=', 242},	/*  */
! 		{'<', '=', 243},	/*  */
! 		{':', '-', 246},	/*  */
! 		{'~', '~', 247},	/*  */
! 		{'~', 'o', 248},	/*  */
! 		{'2', '2', 253},	/*  */
  		{NUL, NUL, NUL}
  		};
  
  #else	/* MSDOS */
  
  char_u	digraphdefault[][3] = 		/* standard ISO digraphs */
! 	   {{'~', '!', 161},	/*  */
! 	    {'c', '|', 162},	/*  */
! 	    {'$', '$', 163},	/*  */
! 	    {'o', 'x', 164},	/*  */
! 	    {'Y', '-', 165},	/*  */
! 	    {'|', '|', 166},	/*  */
! 	    {'p', 'a', 167},	/*  */
! 	    {'"', '"', 168},	/*  */
! 	    {'c', 'O', 169},	/*  */
! 		{'a', '-', 170},	/*  */
! 		{'<', '<', 171},	/*  */
! 		{'-', ',', 172},	/*  */
! 		{'-', '-', 173},	/*  */
! 		{'r', 'O', 174},	/*  */
! 		{'-', '=', 175},	/*  */
! 		{'~', 'o', 176},	/*  */
! 		{'+', '-', 177},	/*  */
! 		{'2', '2', 178},	/*  */
! 		{'3', '3', 179},	/*  */
! 		{'\'', '\'', 180},	/*  */
! 		{'j', 'u', 181},	/*  */
! 		{'p', 'p', 182},	/*  */
! 		{'~', '.', 183},	/*  */
! 		{',', ',', 184},	/*  */
! 		{'1', '1', 185},	/*  */
! 		{'o', '-', 186},	/*  */
! 		{'>', '>', 187},	/*  */
! 		{'1', '4', 188},	/*  */
! 		{'1', '2', 189},	/*  */
! 		{'3', '4', 190},	/*  */
! 		{'~', '?', 191},	/*  */
! 		{'A', '`', 192},	/*  */
! 		{'A', '\'', 193},	/*  */
! 		{'A', '^', 194},	/*  */
! 		{'A', '~', 195},	/*  */
! 		{'A', '"', 196},	/*  */
! 		{'A', '@', 197},	/*  */
! 		{'A', 'E', 198},	/*  */
! 		{'C', ',', 199},	/*  */
! 		{'E', '`', 200},	/*  */
! 		{'E', '\'', 201},	/*  */
! 		{'E', '^', 202},	/*  */
! 		{'E', '"', 203},	/*  */
! 		{'I', '`', 204},	/*  */
! 		{'I', '\'', 205},	/*  */
! 		{'I', '^', 206},	/*  */
! 		{'I', '"', 207},	/*  */
! 		{'D', '-', 208},	/*  */
! 		{'N', '~', 209},	/*  */
! 		{'O', '`', 210},	/*  */
! 		{'O', '\'', 211},	/*  */
! 		{'O', '^', 212},	/*  */
! 		{'O', '~', 213},	/*  */
! 		{'O', '"', 214},	/*  */
! 		{'/', '\\', 215},	/*  */
! 		{'O', '/', 216},	/*  */
! 		{'U', '`', 217},	/*  */
! 		{'U', '\'', 218},	/*  */
! 		{'U', '^', 219},	/*  */
! 		{'U', '"', 220},	/*  */
! 		{'Y', '\'', 221},	/*  */
! 		{'I', 'p', 222},	/*  */
! 		{'s', 's', 223},	/*  */
! 		{'a', '`', 224},	/*  */
! 		{'a', '\'', 225},	/*  */
! 		{'a', '^', 226},	/*  */
! 		{'a', '~', 227},	/*  */
! 		{'a', '"', 228},	/*  */
! 		{'a', '@', 229},	/*  */
! 		{'a', 'e', 230},	/*  */
! 		{'c', ',', 231},	/*  */
! 		{'e', '`', 232},	/*  */
! 		{'e', '\'', 233},	/*  */
! 		{'e', '^', 234},	/*  */
! 		{'e', '"', 235},	/*  */
! 		{'i', '`', 236},	/*  */
! 		{'i', '\'', 237},	/*  */
! 		{'i', '^', 238},	/*  */
! 		{'i', '"', 239},	/*  */
! 		{'d', '-', 240},	/*  */
! 		{'n', '~', 241},	/*  */
! 		{'o', '`', 242},	/*  */
! 		{'o', '\'', 243},	/*  */
! 		{'o', '^', 244},	/*  */
! 		{'o', '~', 245},	/*  */
! 		{'o', '"', 246},	/*  */
! 		{':', '-', 247},	/*  */
! 		{'o', '/', 248},	/*  */
! 		{'u', '`', 249},	/*  */
! 		{'u', '\'', 250},	/*  */
! 		{'u', '^', 251},	/*  */
! 		{'u', '"', 252},	/*  */
! 		{'y', '\'', 253},	/*  */
! 		{'i', 'p', 254},	/*  */
! 		{'y', '"', 255},	/*  */
  		{NUL, NUL, NUL}
  		};
  #endif	/* MSDOS */
--- 23,188 ----
  
  #ifdef MSDOS
  char_u	digraphdefault[][3] = 		/* standard MSDOS digraphs */
! 	   {{'C', ',', 128},
! 		{'u', '"', 129},
! 		{'e', '\'', 130},
! 		{'a', '^', 131},
! 		{'a', '"', 132},
! 		{'a', '`', 133},
! 		{'a', '@', 134},
! 		{'c', ',', 135},
! 		{'e', '^', 136},
! 		{'e', '"', 137},
! 		{'e', '`', 138},
! 		{'i', '"', 139},
! 		{'i', '^', 140},
! 		{'i', '`', 141},
! 		{'A', '"', 142},
! 		{'A', '@', 143},
! 		{'E', '\'', 144},
! 		{'a', 'e', 145},
! 		{'A', 'E', 146},
! 		{'o', '^', 147},
! 		{'o', '"', 148},
! 		{'o', '`', 149},
! 		{'u', '^', 150},
! 		{'u', '`', 151},
! 		{'y', '"', 152},
! 		{'O', '"', 153},
! 		{'U', '"', 154},
! 	    {'c', '|', 155},
! 	    {'$', '$', 156},
  	    {'Y', '-', 157},	/* ~] (SAS C can't handle the real char) */
! 	    {'P', 't', 158},
! 	    {'f', 'f', 159},
! 		{'a', '\'', 160},
! 		{'i', '\'', 161},
! 		{'o', '\'', 162},
  		{'u', '\'', 163},	/* xx (SAS C can't handle the real char) */
! 		{'n', '~', 164},
! 		{'N', '~', 165},
! 		{'a', 'a', 166},
! 		{'o', 'o', 167},
! 		{'~', '?', 168},
! 		{'-', 'a', 169},
! 		{'a', '-', 170},
! 		{'1', '2', 171},
! 		{'1', '4', 172},
! 		{'~', '!', 173},
! 		{'<', '<', 174},
! 		{'>', '>', 175},
  
! 		{'s', 's', 225},
! 		{'j', 'u', 230},
! 		{'o', '/', 237},
! 		{'+', '-', 241},
! 		{'>', '=', 242},
! 		{'<', '=', 243},
! 		{':', '-', 246},
! 		{'~', '~', 247},
! 		{'~', 'o', 248},
! 		{'2', '2', 253},
  		{NUL, NUL, NUL}
  		};
  
  #else	/* MSDOS */
  
  char_u	digraphdefault[][3] = 		/* standard ISO digraphs */
! 	   {{'~', '!', 161},
! 	    {'c', '|', 162},
! 	    {'$', '$', 163},
! 	    {'o', 'x', 164},
! 	    {'Y', '-', 165},
! 	    {'|', '|', 166},
! 	    {'p', 'a', 167},
! 	    {'"', '"', 168},
! 	    {'c', 'O', 169},
! 		{'a', '-', 170},
! 		{'<', '<', 171},
! 		{'-', ',', 172},
! 		{'-', '-', 173},
! 		{'r', 'O', 174},
! 		{'-', '=', 175},
! 		{'~', 'o', 176},
! 		{'+', '-', 177},
! 		{'2', '2', 178},
! 		{'3', '3', 179},
! 		{'\'', '\'', 180},
! 		{'j', 'u', 181},
! 		{'p', 'p', 182},
! 		{'~', '.', 183},
! 		{',', ',', 184},
! 		{'1', '1', 185},
! 		{'o', '-', 186},
! 		{'>', '>', 187},
! 		{'1', '4', 188},
! 		{'1', '2', 189},
! 		{'3', '4', 190},
! 		{'~', '?', 191},
! 		{'A', '`', 192},
! 		{'A', '\'', 193},
! 		{'A', '^', 194},
! 		{'A', '~', 195},
! 		{'A', '"', 196},
! 		{'A', '@', 197},
! 		{'A', 'E', 198},
! 		{'C', ',', 199},
! 		{'E', '`', 200},
! 		{'E', '\'', 201},
! 		{'E', '^', 202},
! 		{'E', '"', 203},
! 		{'I', '`', 204},
! 		{'I', '\'', 205},
! 		{'I', '^', 206},
! 		{'I', '"', 207},
! 		{'D', '-', 208},
! 		{'N', '~', 209},
! 		{'O', '`', 210},
! 		{'O', '\'', 211},
! 		{'O', '^', 212},
! 		{'O', '~', 213},
! 		{'O', '"', 214},
! 		{'/', '\\', 215},
! 		{'O', '/', 216},
! 		{'U', '`', 217},
! 		{'U', '\'', 218},
! 		{'U', '^', 219},
! 		{'U', '"', 220},
! 		{'Y', '\'', 221},
! 		{'I', 'p', 222},
! 		{'s', 's', 223},
! 		{'a', '`', 224},
! 		{'a', '\'', 225},
! 		{'a', '^', 226},
! 		{'a', '~', 227},
! 		{'a', '"', 228},
! 		{'a', '@', 229},
! 		{'a', 'e', 230},
! 		{'c', ',', 231},
! 		{'e', '`', 232},
! 		{'e', '\'', 233},
! 		{'e', '^', 234},
! 		{'e', '"', 235},
! 		{'i', '`', 236},
! 		{'i', '\'', 237},
! 		{'i', '^', 238},
! 		{'i', '"', 239},
! 		{'d', '-', 240},
! 		{'n', '~', 241},
! 		{'o', '`', 242},
! 		{'o', '\'', 243},
! 		{'o', '^', 244},
! 		{'o', '~', 245},
! 		{'o', '"', 246},
! 		{':', '-', 247},
! 		{'o', '/', 248},
! 		{'u', '`', 249},
! 		{'u', '\'', 250},
! 		{'u', '^', 251},
! 		{'u', '"', 252},
! 		{'y', '\'', 253},
! 		{'i', 'p', 254},
! 		{'y', '"', 255},
  		{NUL, NUL, NUL}
  		};
  #endif	/* MSDOS */
diff -crN ../orig/src/dos_v.c ./src/dos_v.c
*** ../orig/src/dos_v.c	Thu Jan 01 09:00:00 1970
--- ./src/dos_v.c	Sat Aug 02 19:51:04 1997
***************
*** 0 ****
--- 1,1288 ----
+ /* vi:set ts=4 sw=4:
+  *
+  * VIM - Vi IMproved		by Bram Moolenaar
+  *
+  * Read the file "credits.txt" for a list of people who contributed.
+  * Read the file "uganda.txt" for copying and usage conditions.
+  */
+ 
+ /*
+  * msdos.c
+  *
+  * MSDOS system-dependent routines.
+  * A cheap plastic imitation of the amiga dependent code.
+  * A lot in this file was made by Juergen Weigert (jw).
+  */
+ 
+ #include <io.h>
+ #include <fcntl.h>
+ #ifndef __GO32__
+ #include <alloc.h>
+ #endif
+ #include <signal.h>
+ #include "vim.h"
+ #include "globals.h"
+ #include "param.h"
+ #include "proto.h"
+ #ifdef KANJI
+ #include "kanji.h"
+ #endif
+ 
+ static int kbhit __ARGS((void));
+ static int getch __ARGS((void));
+ static int WaitForChar __ARGS((int));
+ static int change_drive __ARGS((int));
+ static int get_row __ARGS((void));
+ 
+ typedef struct filelist
+ {
+ 	char_u	**file;
+ 	int		nfiles;
+ 	int		maxfiles;
+ } FileList;
+ 
+ static void		addfile __ARGS((FileList *, char_u *, int));
+ static int		pstrcmp();	/* __ARGS((char **, char **)); BCC does not like this */
+ static void		strlowcpy __ARGS((char_u *, char_u *));
+ static int		expandpath __ARGS((FileList *, char_u *, int, int, int));
+ 
+ static int cbrk_pressed = FALSE;	/* set by ctrl-break interrupt */
+ static int ctrlc_pressed = FALSE;	/* set when ctrl-C or ctrl-break detected */
+ static int delayed_redraw = FALSE;	/* set when ctrl-C detected */
+ 
+ 	long
+ mch_avail_mem(special)
+ 	int special;
+ {
+ #ifdef __GO32__
+ 	return 0x7fffffff;		/* virual memory eh */
+ #else
+ 	return coreleft();
+ #endif
+ }
+ 
+ 	void
+ vim_delay()
+ {
+ #if !defined(__GO32__) && defined(__BORLANDC__)
+ 	if (term_console)
+ 	{
+ 		int		x = 500;
+ 		while (x > 0)
+ 		{
+ 			if (kbhit())
+ 				break;
+ 			delay(100);
+ 			x -= 100;
+ 		}
+ 	}
+ 	else
+ #endif
+ 	sleep(1);
+ }
+ 
+ /*
+  * this version of remove is not scared by a readonly (backup) file
+  *
+  * returns -1 on error, 0 otherwise (just like remove())
+  */
+ 	int
+ vim_remove(name)
+ 	char_u *name;
+ {
+ 	setperm(name, S_IREAD|S_IWRITE);    /* default permissions */
+ 	return unlink(name);
+ }
+ 
+ static int v_col, v_row;	/* current cursor position */
+ static int v_csize;			/* cusor size */
+ static int v_attr = 0x1f;
+ static int int29h = FALSE;
+ static int v_max_row;
+ #define v_refresh()			/* refresh real cursor position */	\
+ {union REGS regs; regs.h.ah=2; regs.h.bh=0; regs.h.dh=v_row; regs.h.dl=v_col; int86(0x10, &regs, &regs);}
+ 
+ /*
+  * mch_write(): write the output buffer to the screen
+  */
+ 	void
+ mch_write(s, len)
+ 	char_u	*s;
+ 	int		len;
+ {
+ 	char_u	*p;
+ 	int		row, col;
+ 	union REGS regs;
+ 
+ 	if (term_console)		/* translate ESC | sequences into bios calls */
+ 	{
+ 		while (len--)
+ 		{
+ 			if (s[0] == '\n')
+ 			{
+ 				v_col = 0;
+ 				v_row++;
+ 				v_refresh();
+ 				if (v_row >= (Rows - 1))
+ 				{
+ 					regs.x.ax = 0x601;
+ 					regs.h.bh = v_attr;
+ 					regs.x.cx = 0;
+ 					regs.x.dx = ((Rows - 1) << 8) + Columns - 1;
+ 					int86(0x10, &regs, &regs);
+ 					v_row = Rows - 1;
+ 				}
+ 				v_refresh();
+ 				s++;
+ 				continue;
+ 			}
+ 			else if (s[0] == '\r')
+ 			{
+ 				v_col = 0;
+ 				v_refresh();
+ 				s++;
+ 				continue;
+ 			}
+ 			else if (s[0] == '\b')		/* backspace */
+ 			{
+ 				if (--v_col < 0)
+ 					v_col = 0;
+ 				v_refresh();
+ 				s++;
+ 				continue;
+ 			}
+ 			else if (s[0] == '\a' || s[0] == '\007')
+ 			{
+ 				regs.x.ax = 0xe00 | s[0];
+ 				regs.h.bh = 0;
+ 				regs.h.bl = v_attr;
+ 				int86(0x10, &regs, &regs);
+ 				v_refresh();
+ 				s++;
+ 				continue;
+ 			}
+ 			else if (s[0] == ESC && len > 1 && s[1] == '|')
+ 			{
+ 				switch (s[2]) {
+ 				case 'v':
+ 							regs.x.ax = 0x200;
+ 							regs.h.ch = 0x20;
+ 							regs.h.cl = 0;
+ 							int86(0x10, &regs, &regs);
+ 							goto got3;
+ 
+ 				case 'V':
+ 							regs.x.ax = 0x200;
+ 							regs.h.ch = 6;
+ 							regs.h.cl = 7;
+ 							int86(0x10, &regs, &regs);
+ 							goto got3;
+ 
+ 				case 'W':
+ 							regs.x.ax = 0x200;
+ 							regs.h.ch = 0;
+ 							regs.h.cl = 7;
+ 							int86(0x10, &regs, &regs);
+ 							goto got3;
+ 
+ 				case 'J':	/*clrscr();*/
+ 							regs.x.ax = 0x600;
+ 							regs.h.bh = v_attr;
+ 							regs.x.cx = 0;
+ 							regs.x.dx = ((v_max_row - 1) << 8) + Columns - 1;
+ 							int86(0x10, &regs, &regs);
+ 							v_col = v_row = 0;
+ 							goto got3;
+ 
+ 				case 'K':	/*clreol();*/
+ 							regs.h.ah = 0x6;
+ 							regs.h.al = 0;
+ 							regs.h.bh = v_attr;
+ 							regs.h.ch = v_row;
+ 							regs.h.cl = v_col;
+ 							regs.h.dh = v_row;
+ 							regs.h.dl = Columns - 1;
+ 							int86(0x10, &regs, &regs);
+ 							goto got3;
+ 
+ 				case 'L':	/*insline();*/
+ 							regs.x.ax = 0x701;
+ 							regs.h.bh = v_attr;
+ 							regs.x.cx = v_row << 8;
+ 							regs.x.dx = ((Rows - 1) << 8) + Columns - 1;
+ 							int86(0x10, &regs, &regs);
+ 							goto got3;
+ 
+ 				case 'M':	/*delline();*/
+ 							regs.x.ax = 0x601;
+ 							regs.h.bh = v_attr;
+ 							regs.x.cx = v_row << 8;
+ 							regs.x.dx = ((Rows - 1) << 8) + Columns - 1;
+ 							int86(0x10, &regs, &regs);
+ got3:						v_refresh();
+ 							s += 3;
+ 							len -= 2;
+ 							continue;
+ 
+ 				case '0':
+ 				case '1':
+ 				case '2':
+ 				case '3':
+ 				case '4':
+ 				case '5':
+ 				case '6':
+ 				case '7':
+ 				case '8':
+ 				case '9':	p = s + 2;
+ 							row = getdigits(&p);		/* no check for length! */
+ 							if (p > s + len)
+ 								break;
+ 							if (*p == ';')
+ 							{
+ 								++p;
+ 								col = getdigits(&p);/* no check for length! */
+ 								if (p > s + len)
+ 									break;
+ 								if (*p == 'H' || *p == 'r')
+ 								{
+ 									if (*p == 'H')	/* set cursor position */
+ 									{
+ 										v_col = col - 1;
+ 										v_row = row - 1;
+ 									}
+ 									else				/* set scroll region  */
+ 									{
+ 										;/*window(1, row, Columns, col);*/
+ 									}
+ 									len -= p - s;
+ 									s = p + 1;
+ 									v_refresh();
+ 									continue;
+ 								}
+ 							}
+ 							else if (*p == 'm')
+ 							{
+ 								if (row == 0)
+ 									v_attr = 0x0f;
+ 								else
+ 									v_attr = row/*0x3f*/;
+ 								len -= p - s;
+ 								s = p + 1;
+ 								continue;
+ 							}
+ 				}
+ 			}
+ 			else if (s[0] >= ' ')
+ 			{
+ 				regs.h.ah = 0x09;
+ 				regs.h.al = s[0];
+ 				regs.h.bh = 0;
+ 				regs.h.bl = v_attr;
+ 				regs.x.cx = 1;
+ 				int86(0x10, &regs, &regs);
+ 				v_col ++;
+ 				if (v_col >= Columns)
+ 				{
+ 					v_col = 0;
+ 					if (++v_row >= Rows)
+ 					{
+ 						regs.x.ax = 0x601;
+ 						regs.h.bh = v_attr;
+ 						regs.x.cx = 0;
+ 						regs.x.dx = ((Rows - 1) << 8) + Columns - 1;
+ 						int86(0x10, &regs, &regs);
+ 						v_row = Rows - 1;
+ 					}
+ 				}
+ 				s++;
+ 				v_refresh();
+ 				continue;
+ 			}
+ 			s++;
+ 		}
+ 	}
+ 	else
+ 	{
+ #ifdef notdef
+ 		write(1, s, (unsigned)len);
+ #else
+ 		if (int29h)
+ 		{
+ 			while (len--)
+ 			{
+ 				regs.x.ax = *s++;
+ 				int86(0x29, &regs, &regs);
+ 			}
+ 		}
+ 		else
+ 		{
+ 			while (len--)
+ 				bdos(6, *s++, 0);
+ 		}
+ #endif
+ 	}
+ }
+ 
+ 	static int
+ kbhit()
+ {
+ 	return(bdos(0xb, 0, 0) & 0xff);
+ }
+ 
+ 	static int
+ getch()
+ {
+ 	return(bdos(7, 0, 0) & 0xff);
+ }
+ 
+ #define POLL_SPEED 10	/* milliseconds between polls */
+ 
+ /*
+  * Simulate WaitForChar() by slowly polling with kbhit().
+  *
+  * If Vim should work over the serial line after a 'ctty com1' we must use
+  * kbhit() and getch(). (jw)
+  *
+  * return TRUE if a character is available, FALSE otherwise
+  */
+ 	static int
+ WaitForChar(msec)
+ 	int msec;
+ {
+ #if !defined(__GO32__) && defined(__BORLANDC__)
+ 	if (term_console)
+ 	{
+ 		for (;;)
+ 		{
+ 			if (kbhit() || cbrk_pressed)
+ 				return TRUE;
+ 			if (msec <= 0)
+ 				break;
+ 			delay(POLL_SPEED);		/* not DOSGEN function */
+ 			msec -= POLL_SPEED;
+ 		}
+ 	}
+ #endif
+ 	return FALSE;
+ }
+ 
+ /*
+  * GetChars(): low level input funcion.
+  * Get a characters from the keyboard.
+  * If time == 0 do not wait for characters.
+  * If time == n wait a short time for characters.
+  * If time == -1 wait forever for characters.
+  *
+  * return the number of characters obtained
+  */
+ 	int
+ GetChars(buf, maxlen, time)
+ 	char_u		*buf;
+ 	int 		maxlen;
+ 	int 		time;
+ {
+ 	int 		len = 0;
+ 	int			c;
+ 
+ 	if (term_console)
+ 		v_refresh();
+ /*
+  * if we got a ctrl-C when we were busy, there will be a "^C" somewhere
+  * on the sceen, so we need to redisplay it.
+  */
+ 	if (delayed_redraw)
+ 	{
+ 		delayed_redraw = FALSE;
+ 		updateScreen(CLEAR);
+ 		setcursor();
+ 		flushbuf();
+ 	}
+ 
+ 	if (time >= 0)
+ 	{
+ 		if (WaitForChar(time) == 0) 	/* no character available */
+ 			return 0;
+ 	}
+ 	else	/* time == -1 */
+ 	{
+ 	/*
+ 	 * If there is no character available within 2 seconds (default)
+ 	 * write the autoscript file to disk
+ 	 */
+ 		if (WaitForChar((int)p_ut) == 0)
+ 			updatescript(0);
+ 	}
+ 
+ /*
+  * Try to read as many characters as there are.
+  * Works for the controlling tty only.
+  */
+ 	--maxlen;		/* may get two chars at once */
+ 	/*
+ 	 * we will get at least one key. Get more if they are available
+ 	 * After a ctrl-break we have to read a 0 (!) from the buffer.
+ 	 * bioskey(1) will return 0 if no key is available and when a
+ 	 * ctrl-break was typed. When ctrl-break is hit, this does not always
+ 	 * implies a key hit.
+ 	 */
+ 	cbrk_pressed = FALSE;
+ 	while ((len == 0 || kbhit()) && len < maxlen)
+ 	{
+ 		switch (c = getch())
+ 		{
+ 		case 0:
+ 				*buf++ = K_NUL;
+ 				break;
+ 		case 3:
+ 				cbrk_pressed = TRUE;
+ 				/*FALLTHROUGH*/
+ 		default:
+ 				*buf++ = c;
+ 		}
+ 		len++;
+ 	}
+ 	return len;
+ }
+ 
+ /*
+  * return non-zero if a character is available
+  */
+ 	int
+ mch_char_avail()
+ {
+ 	return WaitForChar(0);
+ }
+ 
+ /*
+  * We have no job control, fake it by starting a new shell.
+  */
+ 	void
+ mch_suspend()
+ {
+ 	OUTSTR("new shell started\n");
+ 	(void)call_shell(NULL, 0, TRUE);
+ }
+ 
+ extern int _fmode;
+ /*
+  * we do not use windows, there is not much to do here
+  */
+ 	void
+ mch_windinit()
+ {
+ 	_fmode = O_BINARY;		/* we do our own CR-LF translation */
+ 	flushbuf();
+ #ifndef __GO32__
+ 	{
+ 		int	v_stat;
+ 		v_stat = ioctl(1, 0);
+ 		ioctl(1, 1, (void *)(v_stat | 0x0020));
+ 		if ((ioctl(1, 0) & 0x0090) == 0x0090)
+ 			int29h = TRUE;
+ 		ioctl(1, 1, (void *)(v_stat));
+ 	}
+ #endif
+ 	(void)mch_get_winsize();
+ }
+ 
+ 	void
+ check_win(argc, argv)
+ 	int		argc;
+ 	char	**argv;
+ {
+ 	if (!isatty(0) || !isatty(1))
+ 	{
+ 		fprintf(stderr, "VIM: no controlling terminal\n");
+ 		exit(2);
+ 	}
+ }
+ 
+ /*
+  * fname_case(): Set the case of the filename, if it already exists.
+  *				 msdos filesystem is far to primitive for that. do nothing.
+  */
+ 	void
+ fname_case(name)
+ 	char_u *name;
+ {
+ }
+ 
+ /*
+  * mch_settitle(): set titlebar of our window.
+  * Dos console has no title.
+  */
+ 	void
+ mch_settitle(title, icon)
+ 	char_u *title;
+ 	char_u *icon;
+ {
+ }
+ 
+ /*
+  * Restore the window/icon title. (which we don't have)
+  */
+ 	void
+ mch_restore_title(which)
+ 	int which;
+ {
+ }
+ 
+ /*
+  * Get name of current directory into buffer 'buf' of length 'len' bytes.
+  * Return OK for success, FAIL for failure.
+  */
+ 	int
+ vim_dirname(buf, len)
+ 	char_u	*buf;
+ 	int		len;
+ {
+ 	return (getcwd(buf, len) != NULL ? OK : FAIL);
+ }
+ 
+ /*
+  * Change default drive (just like _chdrive of Borland C 3.1)
+  */
+ 	static int
+ change_drive(drive)
+ 	int drive;
+ {
+ 	unsigned dummy;
+ 	union REGS regs;
+ 
+ 	regs.h.ah = 0x0e;
+ 	regs.h.dl = drive - 1;
+ 	intdos(&regs, &regs);	/* set default drive */
+ 	regs.h.ah = 0x19;
+ 	intdos(&regs, &regs);	/* get default drive */
+ 	if (regs.h.al == drive - 1)
+ 		return 0;
+ 	else
+ 		return -1;
+ }
+ 
+ /*
+  * get absolute filename into buffer 'buf' of length 'len' bytes
+  *
+  * return FAIL for failure, OK otherwise
+  */
+ 	int
+ FullName(fname, buf, len)
+ 	char_u	*fname, *buf;
+ 	int		len;
+ {
+ 	if (fname == NULL)	/* always fail */
+ 	{
+ 		*buf = NUL;
+ 		return FAIL;
+ 	}
+ 
+ 	if (isFullName(fname))		/* allready expanded */
+ 	{
+ 		STRNCPY(buf, fname, len);
+ 		return OK;
+ 	}
+ 
+ #ifdef __BORLANDC__		/* the old Turbo C does not have this */
+ 	if (_fullpath(buf, fname, len) == NULL)
+ 	{
+ 		STRNCPY(buf, fname, len);	/* failed, use the relative path name */
+ 		return FAIL;
+ 	}
+ 	return OK;
+ #else					/* almost the same as FullName in unix.c */
+ 	{
+ 		int		l;
+ 		char_u	olddir[MAXPATHL];
+ 		char_u	*p, *q;
+ 		int		c;
+ 		int		retval = OK;
+ 
+ 		*buf = 0;
+ 		/*
+ 		 * change to the directory for a moment,
+ 		 * and then do the getwd() (and get back to where we were).
+ 		 * This will get the correct path name with "../" things.
+ 		 */
+ 		p = strrchr(fname, '/');
+ 		q = strrchr(fname, '\\');
+ 		if (q && (p == NULL || q > p))
+ 			p = q;
+ 		q = strrchr(fname, ':');
+ 		if (q && (p == NULL || q > p))
+ 			p = q;
+ 		if (p != NULL)
+ 		{
+ 			if (getcwd(olddir, MAXPATHL) == NULL)
+ 			{
+ 				p = NULL;		/* can't get current dir: don't chdir */
+ 				retval = FAIL;
+ 			}
+ 			else
+ 			{
+ 				if (*p == ':' || (p > fname && p[-1] == ':'))
+ 					q = p + 1;
+ 				else
+ 					q = p;
+ 				c = *q;
+ 				*q = NUL;
+ 				if (chdir(fname))
+ 					retval = FAIL;
+ 				else
+ 					fname = p + 1;
+ 				*q = c;
+ 			}
+ 		}
+ 		if (getcwd(buf, len) == NULL)
+ 		{
+ 			retval = FAIL;
+ 			*buf = NUL;
+ 		}
+ 		l = STRLEN(buf);
+ 		if (l && buf[l - 1] != '/' && buf[l - 1] != '\\')
+ 			strcat(buf, "\\");
+ 		if (p)
+ 			chdir(olddir);
+ 		strcat(buf, fname);
+ 		return retval;
+ 	}
+ #endif
+ }
+ 
+ /*
+  * return TRUE is fname is an absolute path name
+  */
+ 	int
+ isFullName(fname)
+ 	char_u		*fname;
+ {
+ 	return (STRCHR(fname, ':') != NULL);
+ }
+ 
+ /*
+  * get file permissions for 'name'
+  * -1 : error
+  * else FA_attributes defined in dos.h
+  */
+ 	long
+ getperm(name)
+ 	char_u *name;
+ {
+ 	struct stat statb;
+ 	long		r;
+ 
+ 	if (stat(name, &statb))
+ 		return -1;
+ 	r = (unsigned)statb.st_mode;
+ 	return r;
+ }
+ 
+ /*
+  * set file permission for 'name' to 'perm'
+  *
+  * return FAIL for failure, OK otherwise
+  */
+ 	int
+ setperm(name, perm)
+ 	char_u	*name;
+ 	long	perm;
+ {
+ 	return chmod(name, perm);
+ }
+ 
+ /*
+  * return TRUE if "name" is a directory
+  * return FALSE if "name" is not a directory
+  * return -1 for error
+  *
+  * beware of a trailing backslash that may have been added by addfile()
+  */
+ 	int
+ isdir(name)
+ 	char_u *name;
+ {
+ 	int f;
+ 
+ 	f = getperm(name);
+ 	if (f == -1)
+ 		return -1;					/* file does not exist at all */
+     if ((f & S_IFDIR) == 0)
+         return FAIL;				/* not a directory */
+     return OK;
+ }
+ 
+ /*
+  * Careful: mch_windexit() may be called before mch_windinit()!
+  */
+ 	void
+ mch_windexit(r)
+ 	int r;
+ {
+ #ifdef FEPCTRL
+ 	if (FepInit)
+ 		fep_term();
+ #endif
+ 	settmode(0);
+ 	stoptermcap();
+ 	flushbuf();
+ 	ml_close_all(); 				/* remove all memfiles */
+ 	exit(r);
+ }
+ 
+ /*
+  * function for ctrl-break interrupt
+  */
+ 	void
+ catch_cbrk()
+ {
+ 	cbrk_pressed = TRUE;
+ 	ctrlc_pressed = TRUE;
+ 	signal(SIGINT, catch_cbrk);
+ }
+ 
+ /*
+  * ctrl-break handler for DOS. Never called when a ctrl-break is typed, because
+  * we catch interrupt 1b. If you type ctrl-C while Vim is waiting for a
+  * character this function is not called. When a ctrl-C is typed while Vim is
+  * busy this function may be called. By that time a ^C has been displayed on
+  * the screen, so we have to redisplay the screen. We can't do that here,
+  * because we may be called by DOS. The redraw is in GetChars().
+  */
+ 	static int
+ cbrk_handler()
+ {
+ 	delayed_redraw = TRUE;
+ 	return 1; 				/* resume operation after ctrl-break */
+ }
+ 
+ /*
+  * set the tty in (raw) ? "raw" : "cooked" mode
+  *
+  * Does not change the tty, as bioskey() and kbhit() work raw all the time.
+  */
+ 
+ 	void
+ mch_settmode(raw)
+ 	int  raw;
+ {
+ 	static int saved_cbrk;
+ 
+ 	if (raw)
+ 	{
+ 		saved_cbrk = getcbrk();			/* save old ctrl-break setting */
+ 		setcbrk(0);						/* do not check for ctrl-break */
+ #ifndef __GO32__
+ 		ctrlbrk(cbrk_handler);			/* vim's ctrl-break handler */
+ #endif
+ 		signal(SIGINT, catch_cbrk);
+ 		if (term_console)
+ 		{
+ 			scroll_region = FALSE;		/* terminal supports scroll region */
+ 			outstr(T_TP);				/* set colors */
+ 		}
+ 	}
+ 	else
+ 	{
+ 		setcbrk(saved_cbrk);			/* restore ctrl-break setting */
+ 		signal(SIGINT, SIG_DFL);
+ 	}
+ }
+ 
+ /*
+  * set screen mode
+  * return FAIL for failure, OK otherwise
+  */
+ 	int
+ mch_screenmode(arg)
+ 	char_u		*arg;
+ {
+ 	EMSG("Screen mode setting not supported");
+ 	return FAIL;
+ }
+ 
+ /*
+  * try to get the real window size
+  * return FAIL for failure, OK otherwise
+  */
+ 	static int
+ get_row()
+ {
+ 	int		row;
+ 
+ #ifndef __GO32__
+ #  ifdef KANJI
+ 	if ((row = *(unsigned char far *)(0x00400084L)) != 0
+ 			&& *(unsigned short far *)(0x00400085L) != 0)
+ 		row = row + 1;
+ 	else
+ #  endif
+ 	if (*(int far *)(0x0040004cl)<=4096)
+ 		row = 25;
+ 	else if ((((*(unsigned char far *)(0x0040004aL)*2*
+ 			(*(unsigned char far *)(0x00400084L)+1))+0xfff)&(~0xfff))==
+ 			*(unsigned int far *)(0x0040004cL))
+ 		row = *(unsigned char far *)(0x00400084L)+1;
+ #else
+ 	row = 25;
+ #endif
+ 	return row;
+ }
+ 
+ 	int
+ mch_get_winsize()
+ {
+ 	if (term_console)
+ 	{
+ 		union REGS	regs;
+ 
+ 		scroll_region = FALSE;		/* terminal supports scroll region */
+ 		regs.h.ah = 0x0f;
+ 		int86(0x10, &regs, &regs);
+ 		Columns = regs.h.ah;
+ 		Rows = v_max_row = get_row();
+ #ifdef FEPCTRL
+ 		if (FepInit)
+ 		{
+ 			fep_force_on();
+ 			Rows = get_row();
+ 			fep_force_off();
+ 			if (Rows == v_max_row)
+ 				Rows--;
+ 		}
+ #endif
+ 
+ 	}
+ 	else
+ 	{
+ 		char	*p;
+ 
+ 		Columns = 0;
+ 		Rows = 0;
+ 		if ((p = (char *)vimgetenv("LINES")) != NULL)
+ 			Rows = atoi(p);
+ 		if ((p = (char *)vimgetenv("COLUMNS")) != NULL)
+ 			Columns = atoi(p);
+ #ifdef TERMCAP
+ 		if (Columns == 0 || Rows == 0)
+ 		{
+ 			extern void getlinecol __ARGS((void));
+ 			getlinecol();
+ 		}
+ #endif
+ 	}
+ 	if (Columns < 5 || Columns > MAX_COLUMNS ||
+ 					Rows < 2 || Rows > MAX_COLUMNS)
+ 	{
+ 		/* these values are overwritten by termcap size or default */
+ 		Columns = 80;
+ 		Rows = 25;
+ 		return FAIL;
+ 	}
+ 	check_winsize();
+ 
+ 	return OK;
+ }
+ 
+ /*
+  * Set the active window for delline/insline.
+  */
+ 	void
+ set_window()
+ {
+ }
+ 
+ 	void
+ mch_set_winsize()
+ {
+ 	/* should try to set the window size to Rows and Columns */
+ 	/* may involve switching display mode.... */
+ }
+ 
+ /*
+  * call shell, return FAIL for failure, OK otherwise
+  */
+ 	int
+ call_shell(cmd, filter, cooked)
+ 	char_u	*cmd;
+ 	int 	filter; 		/* if != 0: called by dofilter() */
+ 	int		cooked;
+ {
+ 	int		x;
+ 	char_u	newcmd[200];
+ 
+ 	flushbuf();
+ 
+ #ifdef FEPCTRL
+ 	if (FepInit)
+ 		fep_term();
+ #endif
+ 
+ 	if (cooked)
+ 		settmode(0);		/* set to cooked mode */
+ 
+ 	if (cmd == NULL)
+ 		x = system(p_sh);
+ 	else
+ 	{ 					/* we use "command" to start the shell, slow but easy */
+ 		sprintf(newcmd, "%s /c %s", p_sh, cmd);
+ 		x = system(newcmd);
+ 	}
+ 	outchar('\n');
+ 	if (cooked)
+ 		settmode(1);		/* set to raw mode */
+ 
+ #ifdef WEBB_COMPLETE
+ 	if (x && !expand_interactively)
+ #else
+ 	if (x)
+ #endif
+ 	{
+ 		outnum((long)x);
+ 		outstrn((char_u *)" returned\n");
+ 	}
+ 
+ #ifdef FEPCTRL
+ 	if (FepInit)
+ 		fep_init();
+ #endif
+ 
+ 	resettitle();
+ 	(void)mch_get_winsize();		/* display mode may have been changed */
+ 	return (x ? FAIL : OK);
+ }
+ 
+ /*
+  * check for an "interrupt signal": CTRL-break or CTRL-C
+  */
+ 	void
+ breakcheck()
+ {
+ 	if (ctrlc_pressed)
+ 	{
+ 		ctrlc_pressed = FALSE;
+ 		got_int = TRUE;
+ 	}
+ }
+ 
+ #define FL_CHUNK 32
+ 
+ 	static void
+ addfile(fl, f, isdir)
+ 	FileList	*fl;
+ 	char_u		*f;
+ 	int			isdir;
+ {
+ 	char_u		*p;
+ 
+ 	if (!fl->file)
+ 	{
+ 		fl->file = (char_u **)alloc(sizeof(char_u *) * FL_CHUNK);
+ 		if (!fl->file)
+ 			return;
+ 		fl->nfiles = 0;
+ 		fl->maxfiles = FL_CHUNK;
+ 	}
+ 	if (fl->nfiles >= fl->maxfiles)
+ 	{
+ 		char_u	**t;
+ 		int		i;
+ 
+ 		t = (char_u **)lalloc((long_u)(sizeof(char_u *) * (fl->maxfiles + FL_CHUNK)), TRUE);
+ 		if (!t)
+ 			return;
+ 		for (i = fl->nfiles - 1; i >= 0; i--)
+ 			t[i] = fl->file[i];
+ 		free(fl->file);
+ 		fl->file = t;
+ 		fl->maxfiles += FL_CHUNK;
+ 	}
+ 	p = alloc((unsigned)(STRLEN(f) + 1 + isdir));
+ 	if (p)
+ 	{
+ 		STRCPY(p, f);
+ 		if (isdir)
+ #ifndef notdef
+ 			if (STRCHR(p, '/') != NULL)
+ 				strcat(p, "/");
+ 			else
+ #endif
+ 			strcat(p, "\\");
+ 	}
+ 	fl->file[fl->nfiles++] = p;
+ }
+ 
+ 	static int
+ pstrcmp(a, b)
+ 	char_u **a, **b;
+ {
+ 	return (strcmp(*a, *b));
+ }
+ 
+ 	int
+ has_wildcard(s)
+ 	char_u *s;
+ {
+ 	if (s)
+ #ifndef notdef
+ 		if (*s == '~' || *s == '$')
+ 			return 1;
+ 		else
+ #endif
+ 		for ( ; *s; ++s)
+ #ifdef XARGS
+ 			if (*s == '[' || *s == '`' || *s == '{' || *s == '$' || *s == '~')
+ 				return TRUE;
+ 			else
+ #endif
+ 			if (*s == '?' || *s == '*')
+ 				return TRUE;
+ 	return FALSE;
+ }
+ 
+ 	static void
+ strlowcpy(d, s)
+ 	char_u *d, *s;
+ {
+ 	while (*s)
+ 		*d++ = tolower(*s++);
+ 	*d = '\0';
+ }
+ 
+ 	static int
+ expandpath(fl, path, fonly, donly, notf)
+ 	FileList	*fl;
+ 	char_u		*path;
+ 	int			fonly, donly, notf;
+ {
+ 	char_u	buf[MAXPATH];
+ 	char_u	*p, *s, *e;
+ 	int		lastn, c, r;
+ 	struct	ffblk fb;
+ 
+ 	lastn = fl->nfiles;
+ 
+ /*
+  * Find the first part in the path name that contains a wildcard.
+  * Copy it into buf, including the preceding characters.
+  */
+ 	p = buf;
+ 	s = NULL;
+ 	e = NULL;
+ #ifndef notdef
+ 	memset(buf, NUL, sizeof(buf));
+ #endif
+ 	while (*path)
+ 	{
+ 		if (*path == '\\' || *path == ':' || *path == '/')
+ 		{
+ 			if (e)
+ 				break;
+ 			else
+ 				s = p;
+ 		}
+ 		if (*path == '*' || *path == '?')
+ 			e = p;
+ 		*p++ = *path++;
+ 	}
+ 	e = p;
+ 	if (s)
+ 		s++;
+ 	else
+ 		s = buf;
+ 
+ 	/* if the file name ends in "*" and does not contain a ".", addd ".*" */
+ 	if (e[-1] == '*' && STRCHR(s, '.') == NULL)
+ 	{
+ 		*e++ = '.';
+ 		*e++ = '*';
+ 	}
+ 	/* now we have one wildcard component between s and e */
+ 	*e = '\0';
+ 	r = 0;
+ 	/* If we are expanding wildcards we try both files and directories */
+ 	if ((c = findfirst(buf, &fb, (*path || !notf) ? FA_DIREC : 0)) != 0)
+ 	{
+ 		/* not found */
+ #ifndef notdef
+ 		if (has_wildcard(buf))
+ 			return 0;
+ #endif
+ 		STRCPY(e, path);
+ 		if (notf)
+ 			addfile(fl, buf, FALSE);
+ 		return 1; /* unexpanded or empty */
+ 	}
+ 	while (!c)
+ 	{
+ 		strlowcpy(s, fb.ff_name);
+ 			/* ignore "." and ".." */
+ 		if (*s != '.' || (s[1] != '\0' && (s[1] != '.' || s[2] != '\0')))
+ 		{
+ 			strcat(buf, path);
+ 			if (!has_wildcard(path))
+ 				addfile(fl, buf, (isdir(buf) == TRUE));
+ 			else
+ 				r |= expandpath(fl, buf, fonly, donly, notf);
+ 		}
+ 		c = findnext(&fb);
+ 	}
+ 	qsort(fl->file + lastn, fl->nfiles - lastn, sizeof(char_u *), pstrcmp);
+ 	return r;
+ }
+ 
+ /*
+  * MSDOS rebuilt of Scott Ballantynes ExpandWildCard for amiga/arp.
+  * jw
+  */
+ 
+ 	int
+ ExpandWildCards(num_pat, pat, num_file, file, files_only, list_notfound)
+ 	int 	num_pat;
+ 	char_u	**pat;
+ 	int 	*num_file;
+ 	char_u	***file;
+ 	int 	files_only, list_notfound;
+ {
+ 	int			i, r = 0;
+ 	FileList	f;
+ #ifndef notdef
+ 	char_u		buf[MAXPATHL];
+ # ifdef XARGS
+ 	int			j;
+ 	char	**	result;
+ # endif
+ #endif
+ 
+ 	f.file = NULL;
+ 	f.nfiles = 0;
+ 	for (i = 0; i < num_pat; i++)
+ 	{
+ #ifndef notdef
+ 		expand_env(pat[i], buf, MAXPATHL);
+ # ifdef XARGS
+ 		result = glob_filename(buf);
+ 		for (j = 0; result[j] != NULL; j++)
+ 		{
+ 			if (!has_wildcard(result[j]))
+ 				addfile(&f, result[j], files_only ? FALSE : (isdir(result[j]) == TRUE));
+ 			else
+ 				r |= expandpath(&f, result[j], files_only, 0, list_notfound);
+ 			free(result[j]);
+ 		}
+ 		free(result);
+ # else
+ 		if (!has_wildcard(buf))
+ 			addfile(&f, buf, files_only ? FALSE : (isdir(pat[i]) == TRUE));
+ 		else
+ 			r |= expandpath(&f, buf, files_only, 0, list_notfound);
+ # endif
+ #else
+ 		if (!has_wildcard(pat[i]))
+ 			addfile(&f, pat[i], files_only ? FALSE : (isdir(pat[i]) == TRUE));
+ 		else
+ 			r |= expandpath(&f, pat[i], files_only, 0, list_notfound);
+ #endif
+ 	}
+ 	if (f.nfiles != 0)
+ 	{
+ 		*num_file = f.nfiles;
+ 		*file = f.file;
+ 	}
+ 	else
+ 	{
+ 		*num_file = 0;
+ 		*file = NULL;
+ 	}
+ 	return (r ? FAIL : OK);
+ }
+ 
+ 	void
+ FreeWild(num, file)
+ 	int		num;
+ 	char_u	**file;
+ {
+ 	if (file == NULL || num <= 0)
+ 		return;
+ 	while (num--)
+ 		free(file[num]);
+ 	free(file);
+ }
+ 
+ /*
+  * The normal chdir() does not change the default drive.
+  * This one does.
+  */
+ #undef chdir
+ 	int
+ vim_chdir(path)
+ 	char_u *path;
+ {
+ 	if (path[0] == NUL)				/* just checking... */
+ 		return 0;
+ 	if (path[1] == ':')				/* has a drive name */
+ 	{
+ 		if (change_drive(toupper(path[0]) - 'A' + 1))
+ 			return -1;				/* invalid drive name */
+ 		path += 2;
+ 	}
+ 	if (*path == NUL)				/* drive name only */
+ 		return 0;
+ 	return chdir(path);				/* let the normal chdir() do the rest */
+ }
+ 
+ 
+ 	void
+ chk_ctlkey(c, k)
+ 	int		*c;
+ 	int		*k;
+ {
+ 	int		w;
+ 
+ 	if (term_console)
+ 		return;
+ 	while (1)
+ 	{
+ 		if (*c == Ctrl('Q') || *c == Ctrl(']'))
+ 		{
+ 			w = vgetc();
+ 			switch (w) {
+ 			case 'h':
+ 				*c = K_LARROW;
+ 				break;
+ 			case 'j':
+ 				*c = K_DARROW;
+ 				break;
+ 			case 'k':
+ 				*c = K_UARROW;
+ 				break;
+ 			case 'l':
+ 				*c = K_RARROW;
+ 				break;
+ 			case 'H':
+ 			case 'b':
+ 				*c = K_SLARROW;
+ 				break;
+ 			case 'J':
+ 			case Ctrl('F'):
+ 				*c = K_SDARROW;
+ 				break;
+ 			case 'K':
+ 			case Ctrl('B'):
+ 				*c = K_SUARROW;
+ 				break;
+ 			case 'L':
+ 			case 'w':
+ 				*c = K_SRARROW;
+ 				break;
+ 			default:
+ 				beep();
+ 				if (ISkanji(w))
+ 					vgetc();
+ 				*c = vgetc();
+ 				if (ISkanji(*c))
+ 					*k = vgetc();
+ 				continue;
+ 			}
+ 		}
+ 		break;
+ 	}
+ }
diff -crN ../orig/src/edit.c ./src/edit.c
*** ../orig/src/edit.c	Wed Aug 10 13:54:10 1994
--- ./src/edit.c	Sun Aug 22 07:27:12 1999
***************
*** 15,23 ****
--- 15,30 ----
  #include "proto.h"
  #include "param.h"
  #include "ops.h"	/* for operator */
+ #ifdef KANJI
+ #include "kanji.h"
+ #endif
  
  extern char_u *get_inserted();
+ #ifdef NT
+ 	   void start_arrow __ARGS((void));
+ #else
  static void start_arrow __ARGS((void));
+ #endif
  static void stop_arrow __ARGS((void));
  static void stop_insert __ARGS((void));
  static int echeck_abbr __ARGS((int));
***************
*** 51,56 ****
--- 58,67 ----
  	colnr_t		 mincol;
  	static linenr_t o_lnum = 0;
  	static int	 o_eol = FALSE;
+ #ifdef KANJI
+ 	int			 k = NUL;
+ 	int			 saved_kchar = NUL;
+ #endif
  #ifdef WEBB_KEYWORD_COMPL
  	FPOS		 complete_pos;
  	FPOS		 first_match;
***************
*** 79,84 ****
--- 90,103 ----
  		 * and it is now at the end-of-line, put it after the end-of-line
  		 * (this is not correct in very rare cases).
  		 */
+ #ifdef KANJI
+ 		if (o_eol && curwin->w_cursor.lnum == o_lnum &&
+ 				*((ptr = ml_get(curwin->w_cursor.lnum)) + curwin->w_cursor.col) != NUL &&
+ 				ISkanji(*(ptr + curwin->w_cursor.col)) &&
+ 				*(ptr + curwin->w_cursor.col + 2) == NUL)
+ 			curwin->w_cursor.col += 2;
+ 		else
+ #endif
  		if (o_eol && curwin->w_cursor.lnum == o_lnum &&
  				*((ptr = ml_get(curwin->w_cursor.lnum)) + curwin->w_cursor.col) != NUL &&
  				*(ptr + curwin->w_cursor.col + 1) == NUL)
***************
*** 88,93 ****
--- 107,126 ----
  	{
  		arrow_used = FALSE;
  		o_eol = FALSE;
+ #ifdef FEPCTRL
+ 		switch (*curbuf->b_p_ji) {
+ 		case 'J':
+ 			if (!fep_get_mode())
+ 				fep_force_on();
+ 			break;
+ 		case 'A':
+ 			if (fep_get_mode())
+ 				fep_force_off();
+ 			break;
+ 		default:
+ 			break;
+ 		}
+ #endif
  	}
  
  #ifdef DIGRAPHS
***************
*** 126,131 ****
--- 159,198 ----
  		else
  		{
  			c = vgetc();
+ #ifdef KANJI
+ 			if (ISkanji(c))
+ 				k = vgetc();
+ #endif
+ #if defined(MSDOS) && defined(TERMCAP)		/* DOSGEN */
+ 			chk_ctlkey(&c, &k);
+ #endif
+ #ifdef FEPCTRL
+ 			if (curbuf->b_p_fc && p_ja && isupper(*curbuf->b_p_ji))
+ 			{
+ 				char		ji;
+ 
+ 				ji = *curbuf->b_p_ji;
+ 				if (ISkanji(c))
+ 				{
+ 					if (curbuf->knj_asc > p_ja)
+ 						ji = 'J';
+ 					else
+ 						curbuf->knj_asc ++;
+ 				}
+ 				else if (c > ' ')
+ 				{
+ 					if (curbuf->knj_asc < - p_ja)
+ 						ji = 'A';
+ 					else
+ 						curbuf->knj_asc --;
+ 				}
+ 
+ 				if (ji != *curbuf->b_p_ji && isupper(*curbuf->b_p_ji))
+ 				{
+ 					*curbuf->b_p_ji = ji;
+ 				}
+ 			}
+ #endif
  			if (c == Ctrl('C'))
  				got_int = FALSE;
  		}
***************
*** 174,192 ****
--- 241,287 ----
  		c = dodigraph(c);
  #endif /* DIGRAPHS */
  
+ #ifdef NT
+ 		if (c == Ctrl('V') || (GuiWin && c == Ctrl('S')))
+ #else
  		if (c == Ctrl('V'))
+ #endif
  		{
  			screen_start();
+ #if 0
  			screen_outchar('^', curwin->w_row, curwin->w_col);
+ #else
+ 			screen_outchar('^', curwin->w_winpos + curwin->w_row, curwin->w_col);
+ #endif
  			AppendToRedobuff((char_u *)"\026");	/* CTRL-V */
  			cursupdate();
  			setcursor();
  
+ #ifdef KANJI
+ 			{
+ 				int			 k;
+ 				c = get_literal(&nextc, &k);
+ 				insertchar(c, k);
+ 			}
+ #else
  			c = get_literal(&nextc);
  
  			insertchar(c);
+ #endif
+ 			continue;
+ 		}
+ #ifdef FEPCTRL
+ 		if (((0 <= c && c <= 0x20 && c != ESC) || c == K_ZERO)
+ 				&& curbuf->b_p_fc
+ 				&& (p_fk != NULL && STRRCHR(p_fk, c == K_ZERO ? '@' : c + '@') != NULL))
+ 		{
+ 			if (fep_get_mode())
+ 				fep_force_off();
+ 			else
+ 				fep_force_on();
  			continue;
  		}
+ #endif
  		switch (c)		/* handle character in insert mode */
  		{
  			  case Ctrl('O'):		/* execute one command */
***************
*** 277,282 ****
--- 372,384 ----
  				 */
  			  case Ctrl('T'):		/* make indent one shiftwidth greater */
  			  case Ctrl('D'): 		/* make indent one shiftwidth smaller */
+ #ifdef KANJI
+ 				if (State == REPLACE)
+ 				{
+ 					beep();
+ 					goto redraw;
+ 				}
+ #endif
  				stop_arrow();
  				AppendCharToRedobuff(c);
  				if ((lastc == '0' || lastc == '^') && curwin->w_cursor.col)
***************
*** 360,370 ****
--- 462,482 ----
  						--curwin->w_cursor.lnum;
  						(void)dojoin(FALSE, TRUE);
  						if (temp == NUL && gchar_cursor() != NUL)
+ #ifdef KANJI
+ 							if (ISkanji(gchar_cursor()))
+ 								curwin->w_cursor.col += 2;
+ 							else
+ #endif
  							++curwin->w_cursor.col;
  						if (saved_char)				/* restore what NL replaced */
  						{
  							State = NORMAL;			/* no replace for this char */
+ #ifdef KANJI
+ 							inschar(saved_char, saved_kchar);
+ 							saved_kchar = NUL;
+ #else
  							inschar(saved_char);	/* but no showmatch */
+ #endif
  							State = REPLACE;
  							saved_char = NUL;
  							if (!p_ri)
***************
*** 416,423 ****
--- 528,679 ----
  						{
  							if (saved_line)
  							{
+ #ifdef KANJI
  								if (extraspace)
  								{
+ 									char *s, *p;		 /* 1 for extraspace */
+ 									p = ml_get(curwin->w_cursor.lnum) + 1;
+ 									s = (char *)saved_line;
+ 									while(*p && *s)
+ 									{
+ 										p += ISkanji(*p) ? 2 : 1;
+ 										s += ISkanji(*s) ? 2 : 1;
+ 									}
+ 
+ 									if (*p)
+ 									{
+ 										if (ISkanji(gchar_cursor()))
+ 											delchar(FALSE);
+ 										delchar(FALSE);
+ 									}
+ 									else
+ 									{
+ 										dec_cursor();
+ 										delchar(FALSE);
+ 										extraspace = FALSE;
+ 
+ 										if (ISkanji(gchar_cursor()))
+ 											delchar(FALSE);
+ 										delchar(FALSE);
+ 										State = INSERT;
+ 										inschar(*(char *)saved_line,
+ 													*((char *)saved_line + 1));
+ 										State = REPLACE;
+ 									}
+ 								}
+ 								else if (!p_jrep)
+ 								{
+ 									char *p, *c, *s;
+ 
+ 									p = ml_get(curwin->w_cursor.lnum);
+ 									c = p + curwin->w_cursor.col;
+ 									s = (char *)saved_line;
+ 									while (p < c && *s)
+ 									{
+ 										p += ISkanji(*p) ? 2 : 1;
+ 										s += ISkanji(*s) ? 2 : 1;
+ 									}
+ 
+ 									if (*s)
+ 									{
+ 										if (ISkanji(*p))
+ 											delchar(FALSE);
+ 										delchar(FALSE);
+ 										State = INSERT;
+ 										inschar(*s, *(s + 1));
+ 										State = REPLACE;
+ 										if (!p_ri)
+ 											dec_cursor();
+ 									}
+ 									else if (!p_ri)
+ 									{
+ 										if (ISkanji(gchar_cursor()))
+ 											delchar(FALSE);
+ 										delchar(FALSE);
+ 									}
+ 								}
+ 								else /* p_jrep */
+ 								{
+ 									char *p, *o, *s;
+ 									int  i;
+ 
+ 									p = ml_get(curwin->w_cursor.lnum);
+ 									o = p + curwin->w_cursor.col;
+ 									s = (char *)saved_line;
+ 									for (i = 0; i <= curwin->w_cursor.col; i++)
+ 									{
+ 										s = &saved_line[i];
+ 										if (*s == NUL)
+ 											break;
+ 									}
+ 
+ 									if (*s)
+ 									{
+ 										switch (ISkanjiPointer(saved_line, s)){
+ 										case 1:		/* kanji 1st byte */
+ 											delchar(FALSE);
+ 											delchar(FALSE);
+ 											State = INSERT;
+ 											inschar(*s, *(s + 1));
+ 											State = REPLACE;
+ 											break;
+ 										case 2:		/* kanji 2nd byte */
+ 											switch (ISkanjiPointer(p, o)) {
+ 											case 1:		/* input 2byte char */
+ 												delchar(FALSE);
+ 												delchar(FALSE);
+ 												State = INSERT;
+ 												if (ISkanji(*(s+1)))
+ 													delchar(FALSE);
+ 												inschar(' ', NUL);
+ 												inschar(*(s + 1), *(s + 2));
+ 												dec_cursor();
+ 												State = REPLACE;
+ 												break;
+ 											case 2:
+ 											case 0:
+ 											default:
+ 												delchar(FALSE);
+ 												State = INSERT;
+ 												inschar(' ', NUL);
+ 												State = REPLACE;
+ 												break;
+ 											}
+ 											break;
+ 										case 0:		/* not kanji */
+ 										default:
+ 											i = FALSE;
+ 											if (ISkanjiPointer(p, o))
+ 											{
+ 												delchar(FALSE);
+ 												if (ISkanjiPointer(saved_line, s+1))
+ 													delchar(FALSE);
+ 												i = TRUE;
+ 											}
+ 											delchar(FALSE);
+ 											State = INSERT;
+ 											inschar(*s, *(s + 1));
+ 											if (i == TRUE)
+ 											{
+ 												inschar(*(s + 1), *(s + 2));
+ 												dec_cursor();
+ 											}
+ 											State = REPLACE;
+ 											break;
+ 										}
+ 										if (!p_ri)
+ 											dec_cursor();
+ 									}
+ 									else if (!p_ri)
+ 									{
+ 										if (ISkanji(gchar_cursor()))
+ 											delchar(FALSE);
+ 										delchar(FALSE);
+ 									}
+ 								}
+ #else
+ 								if (extraspace)
+ 								{
  									if ((int)STRLEN(ml_get(curwin->w_cursor.lnum)) - 1 > (int)STRLEN(saved_line))
  										(void)delchar(FALSE);
  									else
***************
*** 432,441 ****
--- 688,702 ----
  									pchar_cursor(saved_line[curwin->w_cursor.col]);
  								else if (!p_ri)
  									(void)delchar(FALSE);
+ #endif
  							}
  						}
  						else  /* State != REPLACE */
  						{
+ #ifdef KANJI
+ 							if (ISkanji(gchar_cursor()))
+ 								delchar(FALSE);
+ #endif
  							(void)delchar(FALSE);
  							if (p_ri && gchar_cursor() == NUL)
  								break;
***************
*** 510,515 ****
--- 771,781 ----
  				{
  					curwin->w_set_curswant = TRUE;
  					start_arrow();
+ #ifdef KANJI
+ 					if (ISkanji(gchar_cursor()))
+ 						curwin->w_cursor.col += 2;
+ 					else
+ #endif
  					++curwin->w_cursor.col;
  				}
  					/* if 'whichwrap' set for cursor in insert mode may go
***************
*** 584,590 ****
--- 850,860 ----
  				else
  					temp = (int)curbuf->b_p_ts;
  				temp -= curwin->w_cursor.col % temp;
+ #ifdef KANJI
+ 				inschar(' ', NUL);
+ #else
  				inschar(' ');			/* delete one char in replace mode */
+ #endif
  				while (--temp)
  					insstr((char_u *)" ");		/* insstr does not delete chars */
  				goto redraw;
***************
*** 597,602 ****
--- 867,881 ----
  				if (State == REPLACE)
  				{
  					saved_char = gchar_cursor();
+ #ifdef KANJI
+ 					if (ISkanji(saved_char))
+ 					{
+ 						saved_kchar = *(ml_get_cursor() + 1);
+ 						(void)delchar(FALSE);
+ 					}
+ 					else
+ 						saved_kchar = NUL;
+ #endif
  					(void)delchar(FALSE);
  				}
  				/*
***************
*** 618,623 ****
--- 897,907 ----
  						dec_cursor();
  				}
  				break;
+ #ifndef notdef
+ 			  case Ctrl('L'):
+ 				updateScreen(CLEAR);
+ 				break;
+ #endif
  
  #ifdef DIGRAPHS
  			  case Ctrl('K'):
***************
*** 659,673 ****
--- 943,975 ----
  					ptr = ml_get(complete_pos.lnum);
  					complete_col = complete_pos.col;
  					temp = complete_col - 1;
+ #ifdef KANJI
+ 					if (temp < 0
+ 							|| !((ISkanjiPosition(ptr, temp + 1) == 2)
+ 												|| isidchar(ptr[temp])))
+ #else
  					if (temp < 0 || !isidchar(ptr[temp]))
+ #endif
  					{
  						complete_pat = strsave((char_u *)"\\<[a-zA-Z_]");
  						complete_any_word = TRUE;
  					}
  					else
  					{
+ #ifdef KANJI
+ 						while (temp >= 0)
+ 						{
+ 							if (ISkanjiPosition(ptr, temp + 1) == 2)
+ 								temp -= 2;
+ 							else if (isidchar(ptr[temp]))
+ 								temp --;
+ 							else
+ 								break;
+ 						}
+ #else
  						while (temp >= 0 && isidchar(ptr[temp]))
  							temp--;
+ #endif
  						temp++;
  						complete_pat = alloc(curwin->w_cursor.col - temp + 3);
  						if (complete_pat != NULL)
***************
*** 711,718 ****
--- 1013,1034 ----
  					if (complete_direction == BACKWARD)
  					{
  						ptr = ml_get(complete_pos.lnum);
+ #ifdef KANJI
+ 						temp = complete_pos.col;
+ 						while (temp >= 0)
+ 						{
+ 							if (ISkanjiPosition(ptr, temp + 1) == 2)
+ 								temp -= 2;
+ 							else if (isidchar(ptr[temp]))
+ 								temp --;
+ 							else
+ 								break;
+ 						}
+ 						complete_pos.col = temp;
+ #else
  						while (isidchar(ptr[complete_pos.col]))
  							complete_pos.col--;
+ #endif
  						complete_pos.col++;
  					}
  					if (!searchit(&complete_pos, complete_direction,
***************
*** 727,734 ****
--- 1043,1068 ----
  						ptr = ml_get_pos(&complete_pos) + 1;
  					tmp_ptr = ptr;
  					temp = 1;
+ #ifdef KANJI
+ 					while (*tmp_ptr != NUL)
+ 					{
+ 						if (ISkanji(*tmp_ptr))
+ 						{
+ 							temp += 2;
+ 							tmp_ptr += 2;
+ 						}
+ 						else if (isidchar(*tmp_ptr))
+ 						{
+ 							temp ++;
+ 							tmp_ptr ++;
+ 						}
+ 						else
+ 							break;
+ 					}
+ #else
  					while (*tmp_ptr != NUL && isidchar(*tmp_ptr++))
  						temp++;
+ #endif
  					free (completion_str);
  					tmp_ptr = completion_str = alloc(temp);
  					if (completion_str == NULL)
***************
*** 736,743 ****
--- 1070,1092 ----
  						found_error = TRUE;
  						break;
  					}
+ #ifdef KANJI
+ 					while (*ptr != NUL)
+ 					{
+ 						if (ISkanji(*ptr))
+ 						{
+ 							*(tmp_ptr++) = *(ptr++);
+ 							*(tmp_ptr++) = *(ptr++);
+ 						}
+ 						else if (isidchar(*ptr))
+ 							*(tmp_ptr++) = *(ptr++);
+ 						else
+ 							break;
+ 					}
+ #else
  					while (*ptr != NUL && isidchar(*ptr))
  						*(tmp_ptr++) = *(ptr++);
+ #endif
  					*tmp_ptr = NUL;
  					if (completion_str[0] != NUL &&
  							STRCMP(completion_str, last_completion_str) != 0)
***************
*** 786,795 ****
--- 1135,1161 ----
  				temp = 0;
  				ptr = ml_get(lnum);
  				while (temp < curwin->w_virtcol && *ptr)
+ #ifdef KANJI
+ 					if (ISkanji(*ptr))
+ 					{
+ 						temp += 2;
+ 						ptr += 2;
+ 					}
+ 					else
+ #endif
  						temp += chartabsize(*ptr++, (long)temp);
  
  				if (temp > curwin->w_virtcol)
+ #ifdef KANJI
+ 				{
+ 					--ptr;
+ 					if (ISkanjiPointer(ml_get(lnum), ptr) == 2)
+ 						--ptr;
+ 				}
+ 				k = *(ptr + 1);
+ #else
  						--ptr;
+ #endif
  				if ((c = *ptr) == NUL)
  				{
  					beep();
***************
*** 828,834 ****
--- 1194,1204 ----
  				}
  
  				if (isidchar(c) || !echeck_abbr(c))
+ #ifdef KANJI
+ 					insertchar(c, k);
+ #else
  					insertchar(c);
+ #endif
  				break;
  			}
  	}
***************
*** 840,847 ****
--- 1210,1223 ----
   * If one or two digits are entered, *nextc is set to the next character.
   */
  	int
+ #ifdef KANJI
+ get_literal(nextc, kp)
+ 	int *nextc;
+ 	int *kp;
+ #else
  get_literal(nextc)
  	int *nextc;
+ #endif
  {
  	int			 cc;
  	int			 nc;
***************
*** 860,865 ****
--- 1236,1248 ----
  	for (i = 0; i < 3; ++i)
  	{
  		nc = vgetc();
+ #ifdef KANJI
+ 		if (ISkanji(nc))
+ 		{
+ 			*kp = vgetc();
+ 			break;
+ 		}
+ #endif
  		if (!isdigit(nc))
  			break;
  		cc = cc * 10 + nc - '0';
***************
*** 872,883 ****
--- 1255,1274 ----
  		if (cc == K_ZERO)	/* NUL is stored as NL */
  			cc = '\n';
  	}
+ #ifdef KANJI
+ 	else if (cc >= 0x100)
+ 		cc &= 0x7f;
+ #endif
  	else if (cc == 0)		/* NUL is stored as NL */
  		cc = '\n';
  
  	State = oldstate;
  	*nextc = nc;
  	got_int = FALSE;		/* CTRL-C typed after CTRL-V is not an interrupt */
+ #ifdef KANJI
+ 	if (ISkanji(nc))
+ 		*nextc = 0;
+ #endif
  	return cc;
  }
  
***************
*** 889,899 ****
   * the "redo", "undo" or "put" commands, so it needs to know when it should
   * stop and defer processing to the "normal" mechanism.
   */
! #define ISSPECIAL(c)	((c) < ' ' || (c) >= DEL)
  
  	void
  insertchar(c)
  	unsigned	c;
  {
  	int		haveto_redraw = FALSE;
  	int		textwidth;
--- 1280,1300 ----
   * the "redo", "undo" or "put" commands, so it needs to know when it should
   * stop and defer processing to the "normal" mechanism.
   */
! #ifdef KANJI
! # define ISSPECIAL(c)	((c) < ' ' || (c) == DEL)
! #else
! # define ISSPECIAL(c)	((c) < ' ' || (c) >= DEL)
! #endif
  
  	void
+ #ifdef KANJI
+ insertchar(c, k)
+ 	unsigned	c;
+ 	unsigned	k;
+ #else
  insertchar(c)
  	unsigned	c;
+ #endif
  {
  	int		haveto_redraw = FALSE;
  	int		textwidth;
***************
*** 925,940 ****
--- 1326,1360 ----
  			int		startcol;		/* Cursor column at entry */
  			int		wantcol;		/* column at textwidth border */
  			int		foundcol;		/* column for start of word */
+ #ifdef KANJI
+ 			int		kborder = FALSE;
+ #endif
  
  			if ((startcol = curwin->w_cursor.col) == 0)
  				break;
+ #ifdef KANJI
+ 			curwin->w_cursor.col = vcol2col(curwin, curwin->w_cursor.lnum, textwidth, &wantcol);
+ #else
  			coladvance(textwidth);			/* find column of textwidth border */
  			wantcol = curwin->w_cursor.col;
+ #endif
  
  			curwin->w_cursor.col = startcol - 1;
  			foundcol = 0;
  			while (curwin->w_cursor.col > 0)			/* find position to break at */
  			{
+ #ifdef KANJI
+ 				/* check the last byte of a multi-byte char. */
+ 				if (ISkanjiFpos(&curwin->w_cursor) == 2)
+ 				{
+ 					foundcol = curwin->w_cursor.col + 1;
+ 					if (curwin->w_cursor.col < wantcol)
+ 						break;
+ 					curwin->w_cursor.col -= 2;
+ 					kborder = TRUE;
+ 					continue;
+ 				}
+ #endif
  				if (isspace(gchar_cursor()))
  				{
  					while (curwin->w_cursor.col > 0 && isspace(gchar_cursor()))
***************
*** 945,950 ****
--- 1365,1379 ----
  					if (curwin->w_cursor.col < wantcol)
  						break;
  				}
+ #ifdef KANJI
+ 				else if (kborder)
+ 				{
+ 					foundcol = curwin->w_cursor.col + 1;
+ 					if (curwin->w_cursor.col < wantcol)
+ 						break;
+ 				}
+ 				kborder = FALSE;
+ #endif
  				--curwin->w_cursor.col;
  			}
  
***************
*** 954,959 ****
--- 1383,1425 ----
  				break;
  			}
  			curwin->w_cursor.col = foundcol;		/* put cursor after pos. to break line */
+ #ifdef KANJI	/* KINSOKU syori */
+ 			if (foundcol == startcol)
+ 			{
+ 				if (!c || (ISkanji(c) ? isjppunc(c, k, TRUE) /* close punc. */
+ 									  : isaspunc(c, TRUE)) )
+ 					break;
+ 			}
+ 			else if (foundcol < startcol)	/* for closing symbols */
+ 			{
+ 				char_u *ptr = ml_get_cursor();
+ 
+ 				if (ISkanji(*ptr))
+ 				{
+ 					if (isjppunc(*ptr, *(ptr + 1), TRUE))
+ 						foundcol += 2;
+ 				}
+ 				else if (*ptr && isaspunc(*ptr, TRUE))
+ 					foundcol ++;
+ 				curwin->w_cursor.col = foundcol;
+ 			}
+ 			if (foundcol > 0)				/* for opening symbols */
+ 			{
+ 				char_u *ptr = ml_get_cursor() - 1;
+ 				if (ISkanjiPointer(ml_get(curwin->w_cursor.lnum), ptr) == 2)
+ 				{
+ 					if (isjppunc(*(ptr - 1), *ptr, FALSE))
+ 					{
+ 						if ((foundcol == wantcol) || (!curbuf->b_p_ai))
+ 							foundcol -= 2;
+ 					}
+ 				}
+ 				else if ((isaspunc(*ptr, FALSE)) && (foundcol == wantcol))
+ 					foundcol --;
+ 				curwin->w_cursor.col = foundcol;
+ 			}
+ 
+ #endif
  			startcol -= foundcol;
  			Opencmd(FORWARD, FALSE, FALSE);
  			while (isspace(gchar_cursor()) && startcol)		/* delete blanks */
***************
*** 994,1000 ****
--- 1460,1473 ----
  
  		p[0] = c;
  		i = 1;
+ #ifdef KANJI
+ 		if (ISkanji(c))
+ 			p[i++] = k;
+ #endif
  		while ((c = vpeekc()) != NUL && !ISSPECIAL(c) && i < MAX_COLUMNS &&
+ #ifdef KANJI
+ 					!ISkanji(c) &&
+ #endif
  					(textwidth == 0 || (curwin->w_virtcol += charsize(p[i - 1])) < textwidth) &&
  					!(!no_abbr && !isidchar(c) && isidchar(p[i - 1])))
  			p[i++] = vgetc();
***************
*** 1008,1015 ****
--- 1481,1496 ----
  	}
  	else
  	{
+ #ifdef KANJI
+ 		inschar(c, k);
+ #else
  		inschar(c);
+ #endif
  		AppendCharToRedobuff(c);
+ #ifdef KANJI
+ 		if (ISkanji(c))
+ 			AppendCharToRedobuff(k);
+ #endif
  	}
  
  	/*
***************
*** 1024,1030 ****
   * start_arrow() is called when an arrow key is used in insert mode.
   * It resembles hitting the <ESC> key.
   */
! 	static void
  start_arrow()
  {
  	if (!arrow_used)		/* something has been inserted */
--- 1505,1514 ----
   * start_arrow() is called when an arrow key is used in insert mode.
   * It resembles hitting the <ESC> key.
   */
! #ifndef NT
! 	static
! #endif
! 	void
  start_arrow()
  {
  	if (!arrow_used)		/* something has been inserted */
***************
*** 1119,1124 ****
--- 1603,1619 ----
  		return FAIL;
  	curwin->w_set_curswant = TRUE;
  	++curwin->w_cursor.col;
+ #ifdef KANJI
+ 	if (ISkanjiCur() == 2)
+ 	{
+ 		if (ptr[1] == NUL)
+ 		{
+ 			curwin->w_cursor.col--;
+ 			return	FAIL;
+ 		}
+ 		curwin->w_cursor.col++;
+ 	}
+ #endif
  	return OK;
  }
  
***************
*** 1129,1134 ****
--- 1624,1633 ----
  		return FAIL;
  	curwin->w_set_curswant = TRUE;
  	--curwin->w_cursor.col;
+ #ifdef KANJI
+ 	if (ISkanjiCur() == 2 && curwin->w_cursor.col != 0)
+ 		--curwin->w_cursor.col;
+ #endif
  	return OK;
  }
  
***************
*** 1235,1240 ****
--- 1734,1743 ----
  		}
  	}
  	beginline(TRUE);
+ #ifdef KANJI
+ 	if (ISkanjiCur() == 2 && curwin->w_cursor.col != 0)
+ 		curwin->w_cursor.col--;
+ #endif
  	updateScreen(VALID);
  	return OK;
  }
diff -crN ../orig/src/exfile/cab.c ./src/exfile/cab.c
*** ../orig/src/exfile/cab.c	Thu Jan 01 09:00:00 1970
--- ./src/exfile/cab.c	Mon Sep 20 23:31:44 1999
***************
*** 0 ****
--- 1,738 ----
+ /*==============================================================================
+  *	cab file support file
+  *============================================================================*/
+ #include <windows.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <fcntl.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <errno.h>
+ #include <io.h>
+ #include <cabapi.h>
+ 
+ #define  __EXFILE__C
+ #include "exfile.h"
+ #include "cab.h"
+ 
+ /*==============================================================================
+  *	Cab file support
+  *============================================================================*/
+ typedef	WORD	(WINAPI *pUnCabGetVersion)(VOID);
+ typedef	BOOL	(WINAPI *pUnCabCheckArchive)(LPCSTR _szFileName,
+ 						const int _iMode);
+ typedef	HARC	(WINAPI *pUnCabOpenArchive)(const HWND _hwnd,
+ 						LPCSTR _szFileName, const DWORD _dwMode);
+ typedef	int		(WINAPI _export *pUnCabCloseArchive)(HARC _harc);
+ typedef	int		(WINAPI *pUnCab)(const HWND _hwnd, LPCSTR _szCmdLine,
+ 						LPSTR _szOutput, const DWORD _dwSize);
+ typedef	int		(WINAPI *pUnCabFindFirst)(HARC _harc, LPCSTR _szWildName,
+ 						INDIVIDUALINFO FAR *lpSubInfo);
+ typedef	int		(WINAPI *pUnCabFindNext)(HARC _harc,
+ 						INDIVIDUALINFO FAR *_lpSubInfo);
+ typedef	int		(WINAPI *pUnCabExtractMem)(const HWND _hwnd, LPCSTR _szCmdLine,
+ 						LPBYTE _szBuffer, const DWORD _dwSize, time_t *_lpTime,
+ 						LPWORD _lpwAttr, LPDWORD _lpdwWriteSize);
+ typedef	int		(WINAPI *pUnCabCompressMem)(const HWND _hwnd, LPCSTR _szCmdLine,
+ 						const LPBYTE _szBuffer, const DWORD _dwSize,
+ 						const time_t *_lpTime, const LPWORD _lpwAttr,
+ 						LPDWORD _lpdwWriteSize);
+ typedef struct readbuf {
+ 	struct readbuf		*	next;
+ 	char				*	fname;
+ } READBUF;
+ 
+ 
+ static	HANDLE				hCabLib				= NULL;
+ static	pUnCabGetVersion	pCabGetVersion		= NULL;
+ static	pUnCabCheckArchive	pCabCheckArchive	= NULL;
+ static	pUnCabOpenArchive	pCabOpenArchive		= NULL;
+ static	pUnCabCloseArchive	pCabCloseArchive	= NULL;
+ static	pUnCab				pCab				= NULL;
+ static	pUnCabFindFirst		pCabFindFirst		= NULL;
+ static	pUnCabFindNext		pCabFindNext		= NULL;
+ static	pUnCabExtractMem	pCabExtractMem		= NULL;
+ static	pUnCabCompressMem	pCabCompressMem		= NULL;
+ 
+ static	INDIVIDUALINFO		SubInfo;
+ static	char				find_fname[MAX_PATH];
+ static	char				find_aname[MAX_PATH];
+ static	READBUF			*	cab_rbuf			= NULL;
+ static	char				Tempdir[MAX_PATH];
+ static	char			*	ext[] = {".cab", ".exe", NULL};
+ 
+ extern	BOOL				ef_dir;
+ 
+ static	HWND				cab_disp;
+ #define LIBNAME				"cab32.dll"
+ #define PATHSEP				'/'
+ #define	EDISP				(128*1024)
+ #define	CDISP				(16*1024)
+ 
+ /*==============================================================================
+  *	Cab support routine
+  *============================================================================*/
+ /*------------------------------------------------------------------------------
+  *	CHECK Cab file
+  *----------------------------------------------------------------------------*/
+ static BOOL
+ cab_getname(name, sep, aname, fname)
+ const char	*	name;
+ char			sep;
+ char		*	aname;
+ char		*	fname;
+ {
+ 	const char	*	p;
+ 	char		**	ep		= ext;
+ 	char			cab_fname[MAX_PATH];
+ 	char			cab_aname[MAX_PATH];
+ 
+ 	if (hCabLib == NULL)
+ 		return(FALSE);
+ 	if (strlen(name) <= 5)
+ 		return(FALSE);
+ 	if (fname == NULL)
+ 		fname = cab_fname;
+ 	if (aname == NULL)
+ 		aname = cab_aname;
+ 	while (*ep)
+ 	{
+ 		p = name + 1;
+ 		while (*p)
+ 		{
+ 			if ((strlen(p) >= strlen(*ep))
+ 					&& strnicmp(p, *ep, strlen(*ep)) == 0
+ 					&& p[strlen(*ep)] == sep)
+ 			{
+ 				strncpy(aname, name, (p + strlen(*ep)) - name);
+ 				aname[(p + strlen(*ep)) - name] = '\0';
+ 				if (sep != '\0')
+ 				{
+ 					strcpy(fname, p + strlen(*ep) + 1);
+ 					if (strlen(fname) == 0)
+ 						return(FALSE);
+ 					if (ef_getperm(aname) != (-1)
+ 									&& (*pCabCheckArchive)(aname, 1) == FALSE)
+ 						return(FALSE);
+ 				}
+ 				else if ((*pCabCheckArchive)(aname, 1) == FALSE)
+ 					return(FALSE);
+ 				return(TRUE);
+ 			}
+ 			p++;
+ 		}
+ 		ep++;
+ 	}
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	Cab init
+  *----------------------------------------------------------------------------*/
+ BOOL
+ cab_init(window)
+ HWND			window;
+ {
+ 	char			*	p;
+ 	UINT				w;
+ 
+ 	if (hCabLib == NULL)
+ 	{
+ 		cab_disp = window;
+ 		hCabLib = LoadLibrary(LIBNAME);
+ 		if (hCabLib == NULL)
+ 			return(FALSE);
+ 		Tempdir[0] = '\0';
+ 		if ((p = getenv("TMP")) == NULL)
+ 			p = getenv("TEMP");
+ 		if (p != NULL)
+ 		{
+ 			strcpy(Tempdir, p);
+ 			w = strlen(Tempdir) - 1;
+ 			if (Tempdir[w] == '\\' || Tempdir[w] == '/')
+ 				;
+ 			else
+ 				strcat(Tempdir, "\\");
+ 		}
+ 		pCabGetVersion
+ 			= (pUnCabGetVersion)GetProcAddress(hCabLib, "CabGetVersion");
+ 		pCabCheckArchive
+ 			= (pUnCabCheckArchive)GetProcAddress(hCabLib, "CabCheckArchive");
+ 		pCabOpenArchive
+ 			= (pUnCabOpenArchive)GetProcAddress(hCabLib, "CabOpenArchive");
+ 		pCabCloseArchive
+ 			= (pUnCabCloseArchive)GetProcAddress(hCabLib, "CabCloseArchive");
+ 		pCab	= (pUnCab)GetProcAddress(hCabLib, "Cab");
+ 		pCabFindFirst
+ 			= (pUnCabFindFirst)GetProcAddress(hCabLib, "CabFindFirst");
+ 		pCabFindNext
+ 			= (pUnCabFindNext)GetProcAddress(hCabLib, "CabFindNext");
+ 		pCabExtractMem
+ 			= (pUnCabExtractMem)GetProcAddress(hCabLib, "CabExtractMem");
+ 		pCabCompressMem
+ 			= (pUnCabCompressMem)GetProcAddress(hCabLib, "CabCompressMem");
+ 		if (pCabGetVersion && pCabCheckArchive && pCabOpenArchive
+ 						&& pCabCloseArchive && pCab && pCabFindFirst
+ 						&& pCabFindNext && pCabExtractMem/*&& pCabCompressMem*/)
+ 			;
+ 		else
+ 		{
+ 			FreeLibrary(hCabLib);
+ 			hCabLib = NULL;
+ 			return(FALSE);
+ 		}
+ 		if ((*pCabGetVersion)() < 84)
+ 		{
+ 			FreeLibrary(hCabLib);
+ 			hCabLib = NULL;
+ 			return(FALSE);
+ 		}
+ 	}
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	Cab term
+  *----------------------------------------------------------------------------*/
+ VOID
+ cab_term()
+ {
+ 	if (hCabLib != NULL)
+ 	{
+ 		FreeLibrary(hCabLib);
+ 		hCabLib = NULL;
+ 	}
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	Cab term
+  *----------------------------------------------------------------------------*/
+ char *
+ cab_ver()
+ {
+ 	static char		ver[1024];
+ 	int				i;
+ 
+ 	sprintf(ver, "%s : %d.%d (",
+ 			LIBNAME, (*pCabGetVersion)() / 100, (*pCabGetVersion)() % 100);
+ 	for (i = 0; ext[i] != NULL; i++)
+ 	{
+ 		if (i != 0)
+ 			strcat(ver, "/");
+ 		strcat(ver, ext[i]);
+ 	}
+ 	strcat(ver, ")");
+ 	return(ver);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	CHECK Cab file
+  *----------------------------------------------------------------------------*/
+ BOOL
+ is_cab(fname, sep)
+ const char	*	fname;
+ char			sep;
+ {
+ 	return(cab_getname(fname, sep, NULL, NULL));
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	CHECK Cab file
+  *----------------------------------------------------------------------------*/
+ BOOL
+ cab_sfx(fname)
+ char		*	fname;
+ {
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	open() emulation
+  *----------------------------------------------------------------------------*/
+ BOOL
+ cab_getfile(fname, tmp)
+ const char	*	fname;
+ const char	*	tmp;
+ {
+ 	char				cab_fname[MAX_PATH];
+ 	char				cab_aname[MAX_PATH];
+ 	char				cab_cline[MAX_PATH + 32];
+ 	HANDLE				hFile;
+ 	WIN32_FIND_DATA		data;
+ 
+ 	if (!cab_getname(fname, ':', cab_aname, cab_fname))
+ 		return(FALSE);
+ 	if ((hFile = cab_findfirst(fname, &data)) == INVALID_HANDLE_VALUE)
+ 		return(FALSE);
+ 	cab_findclose(hFile);
+ #if 1
+ 	{
+ 		sprintf(cab_cline, "-x -j%c \"%s\" \"%s\" \"%s\"",
+ 			(data.nFileSizeLow < EDISP || !cab_disp) ? 'i' : ' ', cab_aname, Tempdir, cab_fname);
+ 		if ((*pCab)(cab_disp, cab_cline, NULL, 0) != 0)
+ 			return(FALSE);
+ 		strcpy(cab_aname, Tempdir);
+ 		strcat(cab_aname, ef_gettail(cab_fname));
+ 		rename(cab_aname, tmp);
+ 	}
+ #else
+ 	{
+ 		int					fd;
+ 		char			*	p		= NULL;
+ 
+ 		if ((p = malloc(data.nFileSizeLow + 1000)) == NULL)
+ 			return(FALSE);
+ 		sprintf(cab_cline, "%s \"%s\" \"%s\"",
+ 			(data.nFileSizeLow < EDISP || !cab_disp) ? "-i" : "", cab_aname, cab_fname);
+ 		if ((*pCabExtractMem)(cab_disp, cab_cline, p,
+ 							data.nFileSizeLow + 1, NULL, NULL, NULL) != 0)
+ 		{
+ 			sprintf(cab_cline, "-d1 -gm -n -gp0 %s %s", cab_aname, cab_fname);
+ 			if ((*pCabExtractMem)(cab_disp, cab_cline, p,
+ 							data.nFileSizeLow + 1, NULL, NULL, NULL) != 0)
+ 			{
+ 				free(p);
+ 				return(FALSE);
+ 			}
+ 		}
+ 		if ((fd = open(tmp, O_WRONLY | O_CREAT | O_BINARY, S_IREAD | S_IWRITE)) < 0)
+ 		{
+ 			free(p);
+ 			return(FALSE);
+ 		}
+ 		write(fd, p, data.nFileSizeLow);
+ 		close(fd);
+ 		free(p);
+ 	}
+ #endif
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	close emulation
+  *----------------------------------------------------------------------------*/
+ BOOL
+ cab_putfile(fname, tmp)
+ const char	*	fname;
+ const char	*	tmp;
+ {
+ 	char				cab_fname[MAX_PATH];
+ 	char				cab_aname[MAX_PATH];
+ 	char				cab_cline[MAX_PATH + 32];
+ 	struct stat			st;
+ 	char			*	p		= NULL;
+ 	long 				perm	= -1;
+ 	int					fd;
+ 
+ 	if (!cab_getname(fname, ':', cab_aname, cab_fname))
+ 		return(FALSE);
+ 	if (stat(tmp, &st) != 0)
+ 		goto error;
+ 	if ((p = malloc(st.st_size + 1)) == NULL)
+ 		goto error;
+ 	if ((fd = open(tmp, O_RDONLY, S_IREAD | S_IWRITE)) < 0)
+ 		goto error;
+ 	if (st.st_size)
+ 		read(fd, p, st.st_size);
+ 	close(fd);
+ 	sprintf(cab_cline, "-d1 -gm %s \"%s\" \"%s\"",
+ 				st.st_size < CDISP || !cab_disp ? "-n -gp0" : "", cab_aname, cab_fname);
+ 	perm = ef_getperm(cab_aname);
+ 	if (perm > 0)
+ 		chmod(cab_aname, S_IREAD|S_IWRITE);
+ 	if ((*pCabCompressMem)(cab_disp, cab_cline, p, st.st_size,
+ 												NULL, NULL, NULL) != 0)
+ 		goto error;
+ 	if (perm > 0)
+ 		chmod(cab_aname, perm);
+ 	return(TRUE);
+ error:
+ 	if (p != NULL)
+ 		free(p);
+ 	if (perm > 0)
+ 		chmod(cab_aname, perm);
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	unlink()/remove() emulation
+  *----------------------------------------------------------------------------*/
+ int
+ cab_remove(fname)
+ const char	*	fname;
+ {
+ 	char				cab_fname[MAX_PATH];
+ 	char				cab_aname[MAX_PATH];
+ 	HANDLE				hFile;
+ 	WIN32_FIND_DATA		data;
+ 	long 				perm;
+ 
+ 	if ((hFile = cab_findfirst(fname, &data)) == INVALID_HANDLE_VALUE)
+ 		return(-1);
+ 	cab_findclose(hFile);
+ 	cab_getname(fname, ':', cab_aname, cab_fname);
+ 	if ((perm = ef_getperm(cab_aname)) == (-1))
+ 		return(-1);
+ 	chmod(cab_aname, S_IREAD|S_IWRITE);
+ 	chmod(cab_aname, perm);
+ 	return(0);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	chmod() emulation
+  *----------------------------------------------------------------------------*/
+ int
+ cab_chmod(name, perm)
+ const char	*	name;
+ int				perm;
+ {
+ 	return(0);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	fullpath() emulation
+  *----------------------------------------------------------------------------*/
+ char *
+ cab_fullpath(buf, fname, len)
+ char		*	buf;
+ char		*	fname;
+ int				len;
+ {
+ 	char				cab_fname[MAX_PATH];
+ 	char				cab_aname[MAX_PATH];
+ 
+ 	if (!cab_getname(fname, ':', cab_aname, cab_fname))
+ 		return(NULL);
+ 	if (_fullpath(buf, cab_aname, len - strlen(cab_fname)) == NULL)
+ 		return(NULL);
+ 	strcat(buf, ":");
+ 	strcat(buf, cab_fname);
+ 	return(buf);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	getfullpathname() emulation
+  *----------------------------------------------------------------------------*/
+ DWORD
+ cab_getfullpathname(lpszFile, cchPath, lpszPath, ppszFilePart)
+ LPCTSTR			lpszFile;
+ DWORD			cchPath;
+ LPTSTR			lpszPath;
+ LPTSTR		*	ppszFilePart;
+ {
+ 	char				cab_fname[MAX_PATH];
+ 	char				cab_aname[MAX_PATH];
+ 	char			*	p;
+ 
+ 	if (!cab_getname(lpszFile, ':', cab_aname, cab_fname))
+ 		return(0);
+ 	if (GetFullPathName(cab_aname, cchPath, lpszPath, ppszFilePart) == 0)
+ 		return(0);
+ 	if ((strlen(cab_fname) + strlen(lpszPath) + 1) > cchPath)
+ 		return(0);
+ 	strcat(lpszPath, ":");
+ 	*ppszFilePart = lpszPath + strlen(lpszPath);
+ 	if (ef_dir)
+ 	{
+ 		if ((p = strrchr(cab_fname, PATHSEP)) != NULL)
+ 			*ppszFilePart += p - cab_fname + 1;
+ 	}
+ 	strcat(lpszPath, cab_fname);
+ 	return(strlen(lpszPath));
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	findnext() emulation
+  *----------------------------------------------------------------------------*/
+ int
+ cab_findnext(harc, data)
+ HANDLE			harc;
+ WIN32_FIND_DATA	* 	data;
+ {
+ 	int				pos;
+ 	int				n;
+ 	char		*	p;
+ 	READBUF		*	rbuf;
+ 	READBUF		**	brbuf;
+ 
+ retry:
+ 	if ((*pCabFindNext)((HARC)harc, &SubInfo) == 0)
+ 	{
+ 		ef_slash(SubInfo.szFileName);
+ 		ef_slash(find_fname);
+ 		if (!ef_dir)
+ 		{
+ 			if (SubInfo.szFileName[strlen(SubInfo.szFileName) - 1] == PATHSEP)
+ 				goto retry;
+ 			memset(data->cFileName, '\0', sizeof(data->cFileName));
+ 			strcpy(data->cFileName, SubInfo.szFileName);
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
+ 			if (strchr(SubInfo.szAttribute, 'R') != NULL)
+ 				data->dwFileAttributes = FILE_ATTRIBUTE_READONLY;
+ 			data->nFileSizeHigh = 0;
+ 			data->nFileSizeLow  = SubInfo.dwOriginalSize;
+ 			return(TRUE);
+ 		}
+ 		if ((p = strrchr(find_fname, PATHSEP)) != NULL)
+ 		{
+ 			if (strnicmp(find_fname, SubInfo.szFileName, p - find_fname + 1) != 0)
+ 				goto retry;
+ 			if ((strchr(find_fname, '*')) == NULL)
+ 			{
+ 				if (strnicmp(find_fname, SubInfo.szFileName, strlen(find_fname)) != 0)
+ 					goto retry;
+ 				if (SubInfo.szFileName[strlen(find_fname)] == PATHSEP
+ 						|| SubInfo.szFileName[strlen(find_fname)] == '\0')
+ 					;
+ 				else
+ 					goto retry;
+ 			}
+ 		}
+ 		else
+ 		{
+ 			if (find_fname[0] != PATHSEP && SubInfo.szFileName[0] == PATHSEP)
+ 				goto retry;
+ 			if ((strchr(find_fname, '*')) == NULL)
+ 			{
+ 				if (strnicmp(find_fname, SubInfo.szFileName, strlen(find_fname)) != 0)
+ 					goto retry;
+ 				if (SubInfo.szFileName[strlen(find_fname)] == PATHSEP
+ 						|| SubInfo.szFileName[strlen(find_fname)] == '\0')
+ 					;
+ 				else
+ 					goto retry;
+ 			}
+ 		}
+ 		pos = 0;
+ 		data->nFileSizeHigh = 0;
+ 		data->nFileSizeLow  = SubInfo.dwOriginalSize;
+ 		data->dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
+ 		if (strchr(SubInfo.szAttribute, 'R') != NULL)
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_READONLY;
+ 		if (p != NULL)
+ 			pos = p - find_fname + 1;
+ 		n = strlen(&SubInfo.szFileName[pos]);
+ 		if ((p = strchr(&SubInfo.szFileName[pos], PATHSEP)) != NULL)
+ 		{
+ 			if (pos == 0 && p == SubInfo.szFileName)
+ 				n = 1;
+ 			else
+ 				n = p - &SubInfo.szFileName[pos];
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
+ 		}
+ 		memset(data->cFileName, '\0', sizeof(data->cFileName));
+ 		strncpy(data->cFileName, &SubInfo.szFileName[pos], n);
+ 		rbuf = cab_rbuf;
+ 		while (rbuf)
+ 		{
+ 			if (stricmp(rbuf->fname, data->cFileName) == 0)
+ 				goto retry;
+ 			if (rbuf->next == NULL)
+ 				break;
+ 			rbuf = rbuf->next;
+ 		}
+ 		if (rbuf == NULL)
+ 		{
+ 			if ((cab_rbuf = malloc(sizeof(READBUF))) == NULL)
+ 				return(FALSE);
+ 			brbuf = &cab_rbuf;
+ 			rbuf = cab_rbuf;
+ 		}
+ 		else
+ 		{
+ 			if ((rbuf->next = malloc(sizeof(READBUF))) == NULL)
+ 				return(FALSE);
+ 			brbuf = &rbuf->next;
+ 			rbuf = rbuf->next;
+ 		}
+ 		rbuf->next = NULL;
+ 		if ((rbuf->fname = malloc(strlen(data->cFileName) + 1)) == NULL)
+ 		{
+ 			*brbuf = NULL;
+ 			free(rbuf);
+ 			return(FALSE);
+ 		}
+ 		strcpy(rbuf->fname, data->cFileName);
+ 		return(TRUE);
+ 	}
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	findfirst() emulation
+  *----------------------------------------------------------------------------*/
+ HANDLE
+ cab_findfirst(name, data)
+ const char		*	name;
+ WIN32_FIND_DATA	* 	data;
+ {
+ 	HARC			hArc;
+ 	int				pos;
+ 	int				n;
+ 	char		*	p;
+ 
+ 	if (!cab_getname(name, ':', find_aname, find_fname))
+ 		return(INVALID_HANDLE_VALUE);
+ 	cab_rbuf = NULL;
+ 	if ((*pCabCheckArchive)(find_aname, 1) == FALSE)
+ 		return(INVALID_HANDLE_VALUE);
+ 	if ((hArc = (*pCabOpenArchive)(cab_disp, find_aname, M_INIT_FILE_USE)) == NULL)
+ 		return(INVALID_HANDLE_VALUE);
+ 	if ((*pCabFindFirst)(hArc, "*.*", &SubInfo) == 0)
+ 	{
+ 		ef_slash(SubInfo.szFileName);
+ 		ef_slash(find_fname);
+ 		if (!ef_dir)
+ 		{
+ 			if (SubInfo.szFileName[strlen(SubInfo.szFileName) - 1] == PATHSEP)
+ 			{
+ 				if (cab_findnext((HANDLE)hArc, data))
+ 					return((HANDLE)hArc);
+ 				(*pCabCloseArchive)(hArc);
+ 				return(INVALID_HANDLE_VALUE);
+ 			}
+ 			memset(data->cFileName, '\0', sizeof(data->cFileName));
+ 			strcpy(data->cFileName, SubInfo.szFileName);
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
+ 			if (strchr(SubInfo.szAttribute, 'R') != NULL)
+ 				data->dwFileAttributes = FILE_ATTRIBUTE_READONLY;
+ 			data->nFileSizeHigh = 0;
+ 			data->nFileSizeLow  = SubInfo.dwOriginalSize;
+ 			return((HANDLE)hArc);
+ 		}
+ 		if ((p = strrchr(find_fname, PATHSEP)) != NULL)
+ 		{
+ 			if (SubInfo.szFileName[p - find_fname + 1] == '\0')
+ 			{
+ 				if (cab_findnext((HANDLE)hArc, data))
+ 					return((HANDLE)hArc);
+ 				(*pCabCloseArchive)(hArc);
+ 				return(INVALID_HANDLE_VALUE);
+ 			}
+ 			if (strnicmp(find_fname, SubInfo.szFileName, p - find_fname + 1) != 0)
+ 			{
+ 				if (cab_findnext((HANDLE)hArc, data))
+ 					return((HANDLE)hArc);
+ 				(*pCabCloseArchive)(hArc);
+ 				return(INVALID_HANDLE_VALUE);
+ 			}
+ 			if ((strchr(find_fname, '*')) == NULL)
+ 			{
+ 				if (strnicmp(find_fname, SubInfo.szFileName, strlen(find_fname)) != 0)
+ 				{
+ 					if (cab_findnext((HANDLE)hArc, data))
+ 						return((HANDLE)hArc);
+ 					(*pCabCloseArchive)(hArc);
+ 					return(INVALID_HANDLE_VALUE);
+ 				}
+ 				if (SubInfo.szFileName[strlen(find_fname)] == PATHSEP
+ 						|| SubInfo.szFileName[strlen(find_fname)] == '\0')
+ 					;
+ 				else
+ 				{
+ 					if (cab_findnext((HANDLE)hArc, data))
+ 						return((HANDLE)hArc);
+ 					(*pCabCloseArchive)(hArc);
+ 					return(INVALID_HANDLE_VALUE);
+ 				}
+ 			}
+ 		}
+ 		else
+ 		{
+ 			if (find_fname[0] != PATHSEP && SubInfo.szFileName[0] == PATHSEP)
+ 			{
+ 				if (cab_findnext((HANDLE)hArc, data))
+ 					return((HANDLE)hArc);
+ 				(*pCabCloseArchive)(hArc);
+ 				return(INVALID_HANDLE_VALUE);
+ 			}
+ 			if ((strchr(find_fname, '*')) == NULL)
+ 			{
+ 				if (strnicmp(find_fname, SubInfo.szFileName, strlen(find_fname)) != 0)
+ 				{
+ 					if (cab_findnext((HANDLE)hArc, data))
+ 						return((HANDLE)hArc);
+ 					(*pCabCloseArchive)(hArc);
+ 					return(INVALID_HANDLE_VALUE);
+ 				}
+ 				if (SubInfo.szFileName[strlen(find_fname)] == PATHSEP
+ 						|| SubInfo.szFileName[strlen(find_fname)] == '\0')
+ 					;
+ 				else
+ 				{
+ 					if (cab_findnext((HANDLE)hArc, data))
+ 						return((HANDLE)hArc);
+ 					(*pCabCloseArchive)(hArc);
+ 					return(INVALID_HANDLE_VALUE);
+ 				}
+ 			}
+ 		}
+ 		pos = 0;
+ 		data->nFileSizeHigh = 0;
+ 		data->nFileSizeLow  = SubInfo.dwOriginalSize;
+ 		data->dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
+ 		if (strchr(SubInfo.szAttribute, 'R') != NULL)
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_READONLY;
+ 		if (p != NULL)
+ 			pos = p - find_fname + 1;
+ 		n = strlen(&SubInfo.szFileName[pos]);
+ 		if ((p = strchr(&SubInfo.szFileName[pos], PATHSEP)) != NULL)
+ 		{
+ 			if (pos == 0 && p == SubInfo.szFileName)
+ 				n = 1;
+ 			else
+ 				n = p - &SubInfo.szFileName[pos];
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
+ 		}
+ 		memset(data->cFileName, '\0', sizeof(data->cFileName));
+ 		strncpy(data->cFileName, &SubInfo.szFileName[pos], n);
+ 		if ((cab_rbuf = malloc(sizeof(READBUF))) == NULL)
+ 		{
+ 			(*pCabCloseArchive)(hArc);
+ 			return(INVALID_HANDLE_VALUE);
+ 		}
+ 		cab_rbuf->next = NULL;
+ 		if ((cab_rbuf->fname = malloc(strlen(data->cFileName) + 1)) == NULL)
+ 		{
+ 			free(cab_rbuf);
+ 			cab_rbuf = NULL;
+ 			(*pCabCloseArchive)(hArc);
+ 			return(INVALID_HANDLE_VALUE);
+ 		}
+ 		strcpy(cab_rbuf->fname, data->cFileName);
+ 		return((HANDLE)hArc);
+ 	}
+ 	(*pCabCloseArchive)(hArc);
+ 	return(INVALID_HANDLE_VALUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	findclose() emulation
+  *----------------------------------------------------------------------------*/
+ void
+ cab_findclose(harc)
+ HANDLE			harc;
+ {
+ 	READBUF		*	rbuf;
+ 	READBUF		*	nrbuf;
+ 
+ 	(*pCabCloseArchive)((HARC)harc);
+ 	rbuf = cab_rbuf;
+ 	while (rbuf)
+ 	{
+ 		nrbuf = rbuf->next;
+ 		free(rbuf->fname);
+ 		free(rbuf);
+ 		rbuf = nrbuf;
+ 	}
+ 	cab_rbuf = NULL;
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	getfullpathname() emulation
+  *----------------------------------------------------------------------------*/
+ BOOL
+ cab_breakcheck()
+ {
+ 	return(FALSE);
+ }
diff -crN ../orig/src/exfile/cab.h ./src/exfile/cab.h
*** ../orig/src/exfile/cab.h	Thu Jan 01 09:00:00 1970
--- ./src/exfile/cab.h	Sun Sep 19 18:55:32 1999
***************
*** 0 ****
--- 1,20 ----
+ /*******************************************************************************
+  *	ZIP file support
+  ******************************************************************************/
+ #include <windows.h>
+ 
+ BOOL		cab_init(HWND);
+ VOID		cab_term(void);
+ char	*	cab_ver(void);
+ BOOL		is_cab(const char *, char);
+ BOOL		cab_sfx(char *);
+ BOOL		cab_getfile(const char *, const char *);
+ BOOL		cab_putfile(const char *, const char *);
+ int			cab_remove(const char *);
+ int			cab_chmod(const char *, int);
+ char	*	cab_fullpath(char *, char *, int);
+ DWORD		cab_getfullpathname(LPCTSTR, DWORD, LPTSTR, LPTSTR *);
+ int			cab_findnext(HANDLE, WIN32_FIND_DATA *);
+ HANDLE		cab_findfirst(const char *, WIN32_FIND_DATA *);
+ void		cab_findclose(HANDLE);
+ BOOL		cab_breakcheck(void);
diff -crN ../orig/src/exfile/exfile.c ./src/exfile/exfile.c
*** ../orig/src/exfile/exfile.c	Thu Jan 01 09:00:00 1970
--- ./src/exfile/exfile.c	Tue Nov 23 20:28:48 1999
***************
*** 0 ****
--- 1,1176 ----
+ /*==============================================================================
+  *	EXtended FILE support file
+  *============================================================================*/
+ #include <windows.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <fcntl.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <errno.h>
+ #include <io.h>
+ #include <stdarg.h>
+ 
+ #define  __EXFILE__C
+ #include "exfile.h"
+ #include "lha.h"
+ #include "ftp.h"
+ #include "tar.h"
+ #include "zip.h"
+ #include "cab.h"
+ 
+ /*==============================================================================
+  *	EXtended FILE support routine
+  *============================================================================*/
+ typedef struct {
+ 	int				fd;						/* open dummy file descriptor	  */
+ 	int				mode;					/* open mode					  */
+ 	char			filename[MAX_PATH];		/* original file name			  */
+ 	char			tempname[MAX_PATH];		/* dummy file name				  */
+ } TmpFile;
+ static TmpFile		Tempfile[16];
+ static char			Tempbase[MAX_PATH];
+ 
+ typedef struct find_data {
+ 	struct find_data *	next;
+ 	WIN32_FIND_DATA		data;
+ } FindData;
+ typedef struct {
+ 	HANDLE			hFile;					/*								  */
+ 	FindData	*	data;					/*								  */
+ } TmpHandle;
+ static TmpHandle	TempFind[16];
+ 
+ static BOOL			ef_load = FALSE;
+ BOOL				ef_dir = TRUE;
+ static char			ef_version[4096];
+ 
+ /*==============================================================================
+  *	EXtended FILE support routine
+  *============================================================================*/
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE get permission
+  *----------------------------------------------------------------------------*/
+ BOOL
+ ef_iskanji(c)
+ unsigned char	c;
+ {
+ 	return((0x81 <= c && c <=0x9F) || (0xE0 <= c && c <= 0xFC));
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE get permission
+  *----------------------------------------------------------------------------*/
+ BOOL
+ ef_pathsep(c)
+ unsigned char	c;
+ {
+ 	return(c == '\\' || c == '/');
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	Get last file name
+  *----------------------------------------------------------------------------*/
+ void
+ ef_slash(str)
+ char			*	str;
+ {
+ 	while (*str)
+ 	{
+ 		if (ef_iskanji(*str))
+ 			str += 2;
+ 		else if (*str == '\\')
+ 			*str++ = '/';
+ 		else
+ 			str++;
+ 	}
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE get permission
+  *----------------------------------------------------------------------------*/
+ long
+ ef_getperm(name)
+ char		*	name;
+ {
+ 	struct stat		statb;
+ 	long			r;
+ 
+ 	if (stat(name, &statb))
+ 		return -1;
+ 	r = statb.st_mode & 0x7fffffff;
+ 	return r;
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	Get last file name
+  *----------------------------------------------------------------------------*/
+ char *
+ ef_gettail(fname)
+ char			*	fname;
+ {
+ 	char			*	p1;
+ 	char			*	p2;
+ 
+ 	for (p1 = p2 = fname; *p2; ++p2)	/* find last part of path */
+ 	{
+ 		if (ef_iskanji((unsigned char)(*p2)))
+ 			++p2;
+ 		else if (*p2 == ':' || *p2 == '\\' || *p2 == '/')
+ 			p1 = p2 + 1;
+ 	}
+ 	return p1;
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE Expand Alias File Name to Long File Name
+  *----------------------------------------------------------------------------*/
+ char *
+ ef_getlongname(fname)
+ char			*	fname;
+ {
+ 	WIN32_FIND_DATA 	fb;
+ 	HANDLE          	hFind;
+ 	char			*	tname;
+ 	char			*	wk;
+ 	char				t;
+ 	char				buf[MAX_PATH * 2];
+ 	char				wbuf[MAX_PATH * 2];
+ 	int					pos = 3;
+ 	BOOL				alias;
+ 
+ 	if (strlen(fname) < 5
+ 			|| strchr(&fname[3], '~') == NULL
+ 			|| !(isalpha(fname[0]) && fname[1] == ':' && fname[2] == '\\'))
+ 		return(fname);
+ retry:
+ 	alias = FALSE;
+ 	tname = fname + pos;
+ 	while (*tname)
+ 	{
+ 		if (tname[0] == '~' && ('0' <= tname[1] && tname[1] <= '9'))
+ 		{
+ 			tname += 2;
+ 			alias = TRUE;
+ 			while (*tname)
+ 			{
+ 				if (*tname == '\\' || *tname == ':')
+ 					break;
+ 				else if ('0' <= *tname && *tname <= '9')
+ 					;
+ 				else if (*tname == '.')
+ 				{
+ 					t = 0;
+ 					tname++;
+ 					while (*tname)
+ 					{
+ 						if (*tname == '\\' || *tname == ':')
+ 							break;
+ 						tname++;
+ 						t++;
+ 						if (t > 3)
+ 						{
+ 							alias = FALSE;
+ 							break;
+ 						}
+ 					}
+ 					break;
+ 				}
+ 				else
+ 				{
+ 					alias = FALSE;
+ 					break;
+ 				}
+ 				tname++;
+ 			}
+ 			break;
+ 		}
+ 		tname++;
+ 	}
+ 	if (alias != TRUE)
+ 		return(fname);
+ 	strcpy(buf, fname);
+ 	pos = tname - fname;
+ 	t = buf[pos];
+ 	buf[pos] = '\0';
+ 	if (GetFullPathName(buf, sizeof(wbuf), wbuf, &tname) == 0)
+ 		return(fname);
+ 	if ((hFind = FindFirstFile(wbuf, &fb)) != INVALID_HANDLE_VALUE)
+ 	{
+ 		FindClose(hFind);
+ 		strcpy(tname, fb.cFileName);
+ 		if (t)
+ 		{
+ 			if (t == ':')
+ 				strcat(wbuf, ":");
+ 			else
+ 				strcat(wbuf, "\\");
+ 			strcat(wbuf, &buf[pos + 1]);
+ 		}
+ 		if ((wk = malloc(strlen(wbuf) + 1)) == NULL)
+ 			return(fname);
+ 		strcpy(wk, wbuf);
+ 		free(fname);
+ 		fname = wk;
+ 		if (t != '\0' && t != ':')
+ 			goto retry;
+ 	}
+ 	return(fname);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE is directory ?
+  *----------------------------------------------------------------------------*/
+ static BOOL
+ ef_isdir(name)
+ char		*	name;
+ {
+ 	struct stat		statb;
+ 
+ 	if (name[strlen(name) - 1] == '/' || name[strlen(name) - 1] == '\\')
+ 		return(TRUE);
+ 	if (ef_stat(name, &statb) == 0 && (statb.st_mode & S_IFDIR))
+ 		return(TRUE);
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE use wild charactor ?
+  *----------------------------------------------------------------------------*/
+ static BOOL
+ ef_has_wildcard(s)
+ char		*	s;
+ {
+ 	if (*s == '~' || *s == '$')
+ 		return(TRUE);
+ 	for (; *s; ++s)
+ 	{
+ 		if ((0x81 <= (unsigned char)(*s) && (unsigned char)(*s) <= 0x9F)
+ 				|| (0xE0 <= (unsigned char)(*s) && (unsigned char)(*s) <= 0xFC))
+ 			++s;
+ 		else if (*s == '[' || *s == '{')
+ 			return(TRUE);
+ 		else if (*s == '?' || *s == '*')
+ 			return(TRUE);
+ 	}
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE Message Loop Active
+  *----------------------------------------------------------------------------*/
+ void
+ ef_loop()
+ {
+ 	MSG				msg;
+ 
+ 	while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) == TRUE)
+ 	{
+ 		TranslateMessage(&msg);
+ 		DispatchMessage(&msg);
+ 	}
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE check readonly archive
+  *----------------------------------------------------------------------------*/
+ static BOOL
+ ef_sfx(fname)
+ char		*	fname;
+ {
+ 	if (is_lha(fname, ':'))
+ 		return(lha_sfx(fname));
+ 	if (is_ftp(fname, ':'))
+ 		return(ftp_sfx(fname));
+ 	if (is_tar(fname, ':'))
+ 		return(tar_sfx(fname));
+ 	if (is_gzip(fname, ':'))
+ 		return(gzip_sfx(fname));
+ 	if (is_zip(fname, ':'))
+ 		return(zip_sfx(fname));
+ 	if (is_cab(fname, ':'))
+ 		return(cab_sfx(fname));
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE initialize
+  *----------------------------------------------------------------------------*/
+ VOID
+ ef_init(window)
+ HWND			window;
+ {
+ 	UINT			w;
+ 	char		*	p;
+ 	INT				i;
+ #define VER_LEFT	12
+ 
+ 	if (ef_load == FALSE)
+ 	{
+ 		for (w = 0; w < (sizeof(Tempfile) / sizeof(TmpFile)); w++)
+ 			Tempfile[w].fd = -1;
+ 		for (w = 0; w < (sizeof(TempFind) / sizeof(TmpHandle)); w++)
+ 			TempFind[w].hFile = INVALID_HANDLE_VALUE;
+ 		Tempbase[0] = '\0';
+ 		if ((p = getenv("TMP")) == NULL)
+ 			p = getenv("TEMP");
+ 		if (p != NULL)
+ 		{
+ 			strcpy(Tempbase, p);
+ 			w = strlen(Tempbase) - 1;
+ 			if (Tempbase[w] == '\\' || Tempbase[w] == '/')
+ 				;
+ 			else
+ 				strcat(Tempbase, "\\");
+ 		}
+ 		strcat(Tempbase, "efXXXXXX");
+ 		w = SetErrorMode(SEM_NOOPENFILEERRORBOX);
+ 		ef_version[0] = '\0';
+ 		if (lha_init(window))
+ 		{
+ 			for (i = 0; i < VER_LEFT; i++)
+ 				strcat(ef_version, " ");
+ 			sprintf(&ef_version[strlen(ef_version)], "%s\r\n", lha_ver());
+ 		}
+ 		if (ftp_init(window))
+ 		{
+ 			for (i = 0; i < VER_LEFT; i++)
+ 				strcat(ef_version, " ");
+ 			sprintf(&ef_version[strlen(ef_version)], "%s\r\n", ftp_ver());
+ 		}
+ 		if (tar_init(window))
+ 		{
+ 			for (i = 0; i < VER_LEFT; i++)
+ 				strcat(ef_version, " ");
+ 			sprintf(&ef_version[strlen(ef_version)], "%s\r\n", tar_ver());
+ 		}
+ 		if (gzip_init(window))
+ 		{
+ 			for (i = 0; i < VER_LEFT; i++)
+ 				strcat(ef_version, " ");
+ 			sprintf(&ef_version[strlen(ef_version)], "%s\r\n", gzip_ver());
+ 		}
+ 		if (zip_init(window))
+ 		{
+ 			for (i = 0; i < VER_LEFT; i++)
+ 				strcat(ef_version, " ");
+ 			sprintf(&ef_version[strlen(ef_version)], "%s\r\n", zip_ver());
+ 		}
+ 		if (cab_init(window))
+ 		{
+ 			for (i = 0; i < VER_LEFT; i++)
+ 				strcat(ef_version, " ");
+ 			sprintf(&ef_version[strlen(ef_version)], "%s", cab_ver());
+ 		}
+ 		SetErrorMode(w);
+ 		ef_load = TRUE;
+ 	}
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE initialize
+  *----------------------------------------------------------------------------*/
+ VOID
+ ef_term()
+ {
+ 	int					i;
+ 
+ 	if (ef_load)
+ 	{
+ 		lha_term();
+ 		ftp_term();
+ 		tar_term();
+ 		gzip_term();
+ 		zip_term();
+ 		cab_term();
+ 		for (i = 0; i < (sizeof(Tempfile) / sizeof(TmpFile)); i++)
+ 		{
+ 			if (Tempfile[i].fd != -1)
+ 			{
+ 				chmod(Tempfile[i].tempname, S_IREAD | S_IWRITE);
+ 				unlink(Tempfile[i].tempname);
+ 				Tempfile[i].fd = -1;
+ 			}
+ 		}
+ 	}
+ 	ef_load = FALSE;
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE initialize
+  *----------------------------------------------------------------------------*/
+ char *
+ ef_ver()
+ {
+ 	return(ef_version);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE check
+  *----------------------------------------------------------------------------*/
+ BOOL
+ is_ef(fname, sep)
+ const char	*	fname;
+ char			sep;
+ {
+ 	if (!ef_load)
+ 		return(FALSE);
+ 	if (is_lha(fname, sep))
+ 		return(TRUE);
+ 	if (is_ftp(fname, sep))
+ 		return(TRUE);
+ 	if (is_tar(fname, sep))
+ 		return(TRUE);
+ 	if (is_gzip(fname, sep))
+ 		return(TRUE);
+ 	if (is_zip(fname, sep))
+ 		return(TRUE);
+ 	if (is_cab(fname, sep))
+ 		return(TRUE);
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended Archive check
+  *----------------------------------------------------------------------------*/
+ BOOL
+ is_efarc(fname, sep)
+ const char	*	fname;
+ char			sep;
+ {
+ 	if (!ef_load)
+ 		return(FALSE);
+ 	if (is_lha(fname, sep))
+ 		return(TRUE);
+ 	if (is_tar(fname, sep))
+ 		return(TRUE);
+ 	if (is_gzip(fname, sep))
+ 		return(TRUE);
+ 	if (is_zip(fname, sep))
+ 		return(TRUE);
+ 	if (is_cab(fname, sep))
+ 		return(TRUE);
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE open
+  *----------------------------------------------------------------------------*/
+ int
+ ef_open(fname, mode, ...)
+ const char	*	fname;
+ int				mode;
+ {
+     va_list				ap;
+ 	WIN32_FIND_DATA		data;
+ 	BOOL				newfile	= TRUE;
+ 	int					i;
+ 	int					rtn;
+ 	TmpFile			*	tmp	= NULL;
+ 	HANDLE				hFile;
+     int					pmode;
+ 
+     va_start(ap, mode);
+     pmode = va_arg(ap, int);
+     va_end(ap);
+ 	if (!ef_load || !is_ef(fname, ':'))
+ 		return(open(fname, mode, pmode));
+ 	if (ef_isdir(fname))
+ 		return(-1);
+ 	if (strchr(fname, '*') != NULL || strchr(fname, '?') != NULL)
+ 		return(-1);
+ 	if ((hFile = ef_findfirst(fname, &data)) == INVALID_HANDLE_VALUE)
+ 	{
+ 		if ((mode & (O_WRONLY | O_CREAT)) && !ef_sfx(fname))
+ 			goto newarch;
+ 		return(-1);
+ 	}
+ 	ef_findclose(hFile);
+ 	if (((data.dwFileAttributes & FILE_ATTRIBUTE_READONLY) || ef_sfx(fname))
+ 												&& (mode & (O_WRONLY | O_RDWR)))
+ 		return(-1);
+ 	newfile = FALSE;
+ newarch:
+ 	for (i = 0; i < (sizeof(Tempfile) / sizeof(TmpFile)); i++)
+ 	{
+ 		if (Tempfile[i].fd == (-1))
+ 		{
+ 			strcpy(Tempfile[i].tempname, Tempbase);
+ 			if (mktemp(Tempfile[i].tempname) == NULL)
+ 				return(-1);
+ 			strcpy(Tempfile[i].filename, fname);
+ 			tmp = &Tempfile[i];
+ 			break;
+ 		}
+ 	}
+ 	if (tmp == NULL)
+ 		return(-1);
+ 	if (newfile)
+ 		;
+ 	else
+ 	{
+ 		if (is_lha(fname, ':'))
+ 			rtn = lha_getfile(fname, tmp->tempname);
+ 		else if (is_ftp(fname, ':'))
+ 			rtn = ftp_getfile(fname, tmp->tempname);
+ 		else if (is_tar(fname, ':'))
+ 			rtn = tar_getfile(fname, tmp->tempname);
+ 		else if (is_gzip(fname, ':'))
+ 			rtn = gzip_getfile(fname, tmp->tempname);
+ 		else if (is_zip(fname, ':'))
+ 			rtn = zip_getfile(fname, tmp->tempname);
+ 		else if (is_cab(fname, ':'))
+ 			rtn = cab_getfile(fname, tmp->tempname);
+ 		chmod(tmp->tempname, S_IREAD | S_IWRITE);
+ 		if (!rtn)
+ 		{
+ 			unlink(tmp->tempname);
+ 			return(-1);
+ 		}
+ 	}
+ 	if ((rtn = open(tmp->tempname, mode, S_IREAD | S_IWRITE)) < 0)
+ 	{
+ 		unlink(tmp->tempname);
+ 		return(-1);
+ 	}
+ 	tmp->fd = rtn;
+ 	tmp->mode = mode;
+ 	return(rtn);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE close
+  *----------------------------------------------------------------------------*/
+ int
+ ef_close(fd)
+ int				fd;
+ {
+ 	int					i;
+ 	BOOL				change = FALSE;
+ 
+ 	if (!ef_load)
+ 		return(close(fd));
+ 	if (close(fd) != 0)
+ 		return(-1);
+ 	for (i = 0; i < (sizeof(Tempfile) / sizeof(TmpFile)); i++)
+ 	{
+ 		if (Tempfile[i].fd == fd)
+ 		{
+ 			if (Tempfile[i].mode & (O_WRONLY | O_CREAT))
+ 				change = TRUE;
+ 			if (change)
+ 			{
+ 				if (is_lha(Tempfile[i].filename, ':'))
+ 				{
+ 					if (!lha_putfile(Tempfile[i].filename, Tempfile[i].tempname))
+ 						return(-1);
+ 				}
+ 				else if (is_ftp(Tempfile[i].filename, ':'))
+ 				{
+ 					if (!ftp_putfile(Tempfile[i].filename, Tempfile[i].tempname))
+ 						return(-1);
+ 				}
+ 				else if (is_tar(Tempfile[i].filename, ':'))
+ 				{
+ 					if (!tar_putfile(Tempfile[i].filename, Tempfile[i].tempname))
+ 						return(-1);
+ 				}
+ 				else if (is_gzip(Tempfile[i].filename, ':'))
+ 				{
+ 					if (!gzip_putfile(Tempfile[i].filename, Tempfile[i].tempname))
+ 						return(-1);
+ 				}
+ 				else if (is_zip(Tempfile[i].filename, ':'))
+ 				{
+ 					if (!zip_putfile(Tempfile[i].filename, Tempfile[i].tempname))
+ 						return(-1);
+ 				}
+ 				else if (is_cab(Tempfile[i].filename, ':'))
+ 				{
+ 					if (!cab_putfile(Tempfile[i].filename, Tempfile[i].tempname))
+ 						return(-1);
+ 				}
+ 			}
+ 			chmod(Tempfile[i].tempname, S_IREAD | S_IWRITE);
+ 			unlink(Tempfile[i].tempname);
+ 			Tempfile[i].fd = -1;
+ 			break;
+ 		}
+ 	}
+ 	return(0);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE unlink()/remove()
+  *----------------------------------------------------------------------------*/
+ int
+ ef_remove(fname)
+ const char	*	fname;
+ {
+ 	int					rtn;
+ 
+ 	if (!ef_load || !is_ef(fname, ':'))
+ 	{
+ 		chmod(fname, S_IREAD | S_IWRITE);
+ 		return(unlink(fname));
+ 	}
+ 	if (ef_sfx(fname))
+ 		return(-1);
+ 	if (is_lha(fname, ':'))
+ 		rtn = lha_remove(fname);
+ 	else if (is_ftp(fname, ':'))
+ 		rtn = ftp_remove(fname);
+ 	else if (is_tar(fname, ':'))
+ 		rtn = tar_remove(fname);
+ 	else if (is_gzip(fname, ':'))
+ 		rtn = gzip_remove(fname);
+ 	else if (is_zip(fname, ':'))
+ 		rtn = zip_remove(fname);
+ 	else if (is_cab(fname, ':'))
+ 		rtn = cab_remove(fname);
+ 	return(rtn);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE rename()
+  *----------------------------------------------------------------------------*/
+ int
+ ef_rename(old, new)
+ const char	*	old;
+ const char	*	new;
+ {
+ 	int					rtn;
+ 	char				tmpname[MAX_PATH];
+ 
+ 	if (!ef_load || (!is_ef(old, ':') && !is_ef(new, ':')))
+ 		return(rename(old, new));
+ 	if (ef_sfx(old) || ef_sfx(new))
+ 		return(-1);
+ 	if (is_ef(old, ':'))
+ 	{
+ 		strcpy(tmpname, Tempbase);
+ 		if (mktemp(tmpname) == NULL)
+ 			return(-1);
+ 		if (is_lha(old, ':'))
+ 		{
+ 			if (!lha_getfile(old, tmpname))
+ 				return(-1);
+ 		}
+ 		else if (is_ftp(old, ':'))
+ 		{
+ 			if (!ftp_getfile(old, tmpname))
+ 				return(-1);
+ 		}
+ 		else if (is_tar(old, ':'))
+ 		{
+ 			if (!tar_getfile(old, tmpname))
+ 				return(-1);
+ 		}
+ 		else if (is_gzip(old, ':'))
+ 		{
+ 			if (!gzip_getfile(old, tmpname))
+ 				return(-1);
+ 		}
+ 		else if (is_zip(old, ':'))
+ 		{
+ 			if (!zip_getfile(old, tmpname))
+ 				return(-1);
+ 		}
+ 		else if (is_cab(old, ':'))
+ 		{
+ 			if (!cab_getfile(old, tmpname))
+ 				return(-1);
+ 		}
+ 	}
+ 	else
+ 		strcpy(tmpname, old);
+ 	if (is_ef(new, ':'))
+ 	{
+ 		if (is_lha(new, ':'))
+ 			rtn = lha_putfile(new, tmpname);
+ 		else if (is_ftp(new, ':'))
+ 			rtn = ftp_putfile(new, tmpname);
+ 		else if (is_tar(new, ':'))
+ 			rtn = tar_putfile(new, tmpname);
+ 		else if (is_gzip(new, ':'))
+ 			rtn = gzip_putfile(new, tmpname);
+ 		else if (is_zip(new, ':'))
+ 			rtn = zip_putfile(new, tmpname);
+ 		else if (is_cab(new, ':'))
+ 			rtn = cab_putfile(new, tmpname);
+ 		if (rtn)
+ 			rtn = 0;
+ 		else
+ 			rtn = -1;
+ 	}
+ 	else
+ 		rtn = rename(tmpname, new);
+ 	if (rtn != 0)
+ 	{
+ 		if (is_ef(old, ':'))
+ 			ef_remove(old);
+ 		return(-1);
+ 	}
+ 	return(0);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE stat()
+  *----------------------------------------------------------------------------*/
+ long
+ ef_stat(name, st)
+ char		*	name;
+ struct stat	*	st;
+ {
+ 	HANDLE				hFile;
+ 	WIN32_FIND_DATA		data;
+ 	unsigned short		r	= (-1);
+ 
+ 	if (!ef_load || !is_ef(name, ':'))
+ 		return(stat(name, st));
+ 	if (name[strlen(name) - 1] == '/' || name[strlen(name) - 1] == '\\')
+ 	{
+ 		st->st_mode = S_IREAD | S_IWRITE | S_IFDIR;
+ 		return(0);
+ 	}
+ 	if ((hFile = ef_findfirst(name, &data)) == INVALID_HANDLE_VALUE)
+ 		return(-1);
+ 	ef_findclose(hFile);
+ 	r = S_IREAD|S_IWRITE;
+ 	if (data.dwFileAttributes & FILE_ATTRIBUTE_READONLY)
+ 		r &= ~S_IWRITE;
+ 	if (data.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
+ 		;
+ 	if (data.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM)
+ 		;
+ 	if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+ 		r |= S_IFDIR;
+ 	if (data.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE)
+ 		;
+ 	if (data.dwFileAttributes & FILE_ATTRIBUTE_NORMAL)
+ 		;
+ 	if (data.dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY)
+ 		;
+ 	st->st_mode = r;
+ 	return(0);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE chmod()
+  *----------------------------------------------------------------------------*/
+ int
+ ef_chmod(name, perm)
+ const char	*	name;
+ int				perm;
+ {
+ 	if (!ef_load || !is_ef(name, ':'))
+ 		return(chmod(name, perm));
+ 	if (ef_sfx(name))
+ 		return(-1);
+ 	if (is_lha(name, ':'))
+ 		return(lha_chmod(name, perm));
+ 	if (is_ftp(name, ':'))
+ 		return(ftp_chmod(name, perm));
+ 	if (is_tar(name, ':'))
+ 		return(tar_chmod(name, perm));
+ 	if (is_gzip(name, ':'))
+ 		return(gzip_chmod(name, perm));
+ 	if (is_zip(name, ':'))
+ 		return(zip_chmod(name, perm));
+ 	if (is_cab(name, ':'))
+ 		return(cab_chmod(name, perm));
+ 	return(-1);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE fullpath()
+  *----------------------------------------------------------------------------*/
+ char *
+ ef_fullpath(buf, fname, len)
+ char		*	buf;
+ char		*	fname;
+ int				len;
+ {
+ 	if (fname == NULL)
+ 		return(NULL);
+ 	if (!ef_load || !is_ef(fname, ':'))
+ 		return(_fullpath(buf, fname, len));
+ 	if (ef_isdir(fname))
+ 		return(NULL);
+ 	if (is_lha(fname, ':'))
+ 		return(lha_fullpath(buf, fname, len));
+ 	if (is_ftp(fname, ':'))
+ 		return(ftp_fullpath(buf, fname, len));
+ 	if (is_tar(fname, ':'))
+ 		return(tar_fullpath(buf, fname, len));
+ 	if (is_gzip(fname, ':'))
+ 		return(gzip_fullpath(buf, fname, len));
+ 	if (is_zip(fname, ':'))
+ 		return(zip_fullpath(buf, fname, len));
+ 	if (is_cab(fname, ':'))
+ 		return(cab_fullpath(buf, fname, len));
+ 	return(NULL);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE getfullpathname()
+  *----------------------------------------------------------------------------*/
+ DWORD
+ ef_getfullpathname(lpszFile, cchPath, lpszPath, ppszFilePart)
+ LPCTSTR			lpszFile;
+ DWORD			cchPath;
+ LPTSTR			lpszPath;
+ LPTSTR		*	ppszFilePart;
+ {
+ 	if (!ef_load || !is_ef(lpszFile, ':'))
+ 		return(GetFullPathName(lpszFile, cchPath, lpszPath, ppszFilePart));
+ 	if (ef_isdir(lpszFile))
+ 		return(0);
+ 	if (is_lha(lpszFile, ':'))
+ 		return(lha_getfullpathname(lpszFile, cchPath, lpszPath, ppszFilePart));
+ 	if (is_ftp(lpszFile, ':'))
+ 		return(ftp_getfullpathname(lpszFile, cchPath, lpszPath, ppszFilePart));
+ 	if (is_tar(lpszFile, ':'))
+ 		return(tar_getfullpathname(lpszFile, cchPath, lpszPath, ppszFilePart));
+ 	if (is_gzip(lpszFile, ':'))
+ 		return(gzip_getfullpathname(lpszFile, cchPath, lpszPath, ppszFilePart));
+ 	if (is_zip(lpszFile, ':'))
+ 		return(zip_getfullpathname(lpszFile, cchPath, lpszPath, ppszFilePart));
+ 	if (is_cab(lpszFile, ':'))
+ 		return(cab_getfullpathname(lpszFile, cchPath, lpszPath, ppszFilePart));
+ 	return(0);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE findnext()
+  *----------------------------------------------------------------------------*/
+ int
+ ef_findnext(hFile, data)
+ HANDLE				hFile;
+ WIN32_FIND_DATA	* 	data;
+ {
+ 	FindData	*	p;
+ 	int				i;
+ 
+ 	for (i = 0; i < (sizeof(TempFind) / sizeof(TmpHandle)); i++)
+ 	{
+ 		if ((HANDLE)&TempFind[i] == hFile)
+ 		{
+ 			if (TempFind[i].data != NULL)
+ 			{
+ 				p = TempFind[i].data->next;
+ 				memmove(data, &TempFind[i].data->data, sizeof(WIN32_FIND_DATA));
+ 				free(TempFind[i].data);
+ 				TempFind[i].data = p;
+ 				return(TRUE);
+ 			}
+ 			return(FALSE);
+ 		}
+ 	}
+ 	return(FindNextFile(hFile, data));
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE findfirst()
+  *----------------------------------------------------------------------------*/
+ HANDLE
+ ef_findfirst(name, data)
+ const char		*	name;
+ WIN32_FIND_DATA	* 	data;
+ {
+ 	int				i;
+ 	TmpHandle	*	tmp = NULL;
+ 	FindData	*	p;
+ 	FindData	**	datap;
+ 
+ 	if (!ef_load || !is_ef(name, ':'))
+ 		return(FindFirstFile(name, data));
+ 	for (i = 0; i < (sizeof(TempFind) / sizeof(TmpHandle)); i++)
+ 	{
+ 		if (TempFind[i].hFile == INVALID_HANDLE_VALUE)
+ 		{
+ 			tmp = &TempFind[i];
+ 			break;
+ 		}
+ 	}
+ 	if (tmp == NULL)
+ 		return(INVALID_HANDLE_VALUE);
+ 	tmp->data = NULL;
+ 	datap = &tmp->data;
+ 	if (is_lha(name, ':'))
+ 	{
+ 		if ((tmp->hFile = lha_findfirst(name, data)) != INVALID_HANDLE_VALUE)
+ 		{
+ 			while ((p = malloc(sizeof(FindData))) != NULL)
+ 			{
+ 				if (lha_findnext(tmp->hFile, &p->data))
+ 				{
+ 					*datap = p;
+ 					p->next = NULL;
+ 					datap = &p->next;
+ 				}
+ 				else
+ 				{
+ 					*datap = NULL;
+ 					free(p);
+ 					break;
+ 				}
+ 			}
+ 			lha_findclose(tmp->hFile);
+ 		}
+ 		else
+ 			return(INVALID_HANDLE_VALUE);
+ 	}
+ 	else if (is_ftp(name, ':'))
+ 	{
+ 		if ((tmp->hFile = ftp_findfirst(name, data)) != INVALID_HANDLE_VALUE)
+ 		{
+ 			while ((p = malloc(sizeof(FindData))) != NULL)
+ 			{
+ 				if (ftp_findnext(tmp->hFile, &p->data))
+ 				{
+ 					*datap = p;
+ 					p->next = NULL;
+ 					datap = &p->next;
+ 				}
+ 				else
+ 				{
+ 					*datap = NULL;
+ 					free(p);
+ 					break;
+ 				}
+ 			}
+ 			ftp_findclose(tmp->hFile);
+ 		}
+ 		else
+ 			return(INVALID_HANDLE_VALUE);
+ 	}
+ 	else if (is_tar(name, ':'))
+ 	{
+ 		if ((tmp->hFile = tar_findfirst(name, data)) != INVALID_HANDLE_VALUE)
+ 		{
+ 			while ((p = malloc(sizeof(FindData))) != NULL)
+ 			{
+ 				if (tar_findnext(tmp->hFile, &p->data))
+ 				{
+ 					*datap = p;
+ 					p->next = NULL;
+ 					datap = &p->next;
+ 				}
+ 				else
+ 				{
+ 					*datap = NULL;
+ 					free(p);
+ 					break;
+ 				}
+ 			}
+ 			tar_findclose(tmp->hFile);
+ 		}
+ 		else
+ 			return(INVALID_HANDLE_VALUE);
+ 	}
+ 	else if (is_gzip(name, ':'))
+ 	{
+ 		if ((tmp->hFile = gzip_findfirst(name, data)) != INVALID_HANDLE_VALUE)
+ 		{
+ 			while ((p = malloc(sizeof(FindData))) != NULL)
+ 			{
+ 				if (gzip_findnext(tmp->hFile, &p->data))
+ 				{
+ 					*datap = p;
+ 					p->next = NULL;
+ 					datap = &p->next;
+ 				}
+ 				else
+ 				{
+ 					*datap = NULL;
+ 					free(p);
+ 					break;
+ 				}
+ 			}
+ 			gzip_findclose(tmp->hFile);
+ 		}
+ 		else
+ 			return(INVALID_HANDLE_VALUE);
+ 	}
+ 	else if (is_zip(name, ':'))
+ 	{
+ 		if ((tmp->hFile = zip_findfirst(name, data)) != INVALID_HANDLE_VALUE)
+ 		{
+ 			while ((p = malloc(sizeof(FindData))) != NULL)
+ 			{
+ 				if (zip_findnext(tmp->hFile, &p->data))
+ 				{
+ 					*datap = p;
+ 					p->next = NULL;
+ 					datap = &p->next;
+ 				}
+ 				else
+ 				{
+ 					*datap = NULL;
+ 					free(p);
+ 					break;
+ 				}
+ 			}
+ 			zip_findclose(tmp->hFile);
+ 		}
+ 		else
+ 			return(INVALID_HANDLE_VALUE);
+ 	}
+ 	else if (is_cab(name, ':'))
+ 	{
+ 		if ((tmp->hFile = cab_findfirst(name, data)) != INVALID_HANDLE_VALUE)
+ 		{
+ 			while ((p = malloc(sizeof(FindData))) != NULL)
+ 			{
+ 				if (cab_findnext(tmp->hFile, &p->data))
+ 				{
+ 					*datap = p;
+ 					p->next = NULL;
+ 					datap = &p->next;
+ 				}
+ 				else
+ 				{
+ 					*datap = NULL;
+ 					free(p);
+ 					break;
+ 				}
+ 			}
+ 			cab_findclose(tmp->hFile);
+ 		}
+ 		else
+ 			return(INVALID_HANDLE_VALUE);
+ 	}
+ 	return((HANDLE)tmp);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE findclose()
+  *----------------------------------------------------------------------------*/
+ void
+ ef_findclose(hFile)
+ HANDLE			hFile;
+ {
+ 	FindData	*	p;
+ 	int				i;
+ 
+ 	for (i = 0; i < (sizeof(TempFind) / sizeof(TmpHandle)); i++)
+ 	{
+ 		if ((HANDLE)&TempFind[i] == hFile)
+ 		{
+ 			TempFind[i].hFile = INVALID_HANDLE_VALUE;
+ 			while (TempFind[i].data != NULL)
+ 			{
+ 				p = TempFind[i].data->next;
+ 				free(TempFind[i].data);
+ 				TempFind[i].data = p;
+ 			}
+ 			return;
+ 		}
+ 	}
+ 	FindClose(hFile);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE signal check
+  *----------------------------------------------------------------------------*/
+ int
+ ef_breakcheck()
+ {
+ 	BOOL			rc = FALSE;
+ 
+ 	if (!ef_load)
+ 		return(FALSE);
+ 	if (lha_breakcheck())
+ 		rc = TRUE;
+ 	if (ftp_breakcheck())
+ 		rc = TRUE;
+ 	if (tar_breakcheck())
+ 		rc = TRUE;
+ 	if (gzip_breakcheck())
+ 		rc = TRUE;
+ 	if (zip_breakcheck())
+ 		rc = TRUE;
+ 	if (cab_breakcheck())
+ 		rc = TRUE;
+ 	return(rc);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	EXtended FILE global file name
+  *----------------------------------------------------------------------------*/
+ char **
+ ef_globfilename(buf, dir)
+ char		*	buf;
+ BOOL			dir;
+ {
+ 	int				j;
+ 	char		**	result;
+ 	char		*	p;
+ 	char		*	wk;
+ 	char		**	retp;
+ 	int				cnt = 0;
+ 	extern char	**	glob_filename(char *);
+ 
+ 	if ((retp = (char **)malloc(sizeof(char *))) == NULL)
+ 		return(NULL);
+ 	ef_dir = dir;
+ 	retp[cnt] = NULL;
+ 	result = glob_filename(buf);
+ 	for (j = 0; result[j] != NULL; j++)
+ 	{
+ 		if (ef_has_wildcard(result[j]) && (p = strrchr(&result[j][2], ':')) != NULL)
+ 		{
+ 			char	**	aresult;
+ 			int			a;
+ 
+ 			*p = '\0';
+ 			aresult = glob_filename(result[j]);
+ 			for (a = 0; aresult[a] != NULL; a++)
+ 			{
+ 				char		buf[MAX_PATH+2];
+ 				char	**	lresult;
+ 				int			k;
+ 
+ 				strcpy(buf, aresult[a]);
+ 				strcat(buf, ":");
+ 				strcat(buf, p + 1);
+ 				lresult = glob_filename(buf);
+ 				for (k = 0; lresult[k] != NULL; k++)
+ 				{
+ 					if ((wk = malloc(sizeof(char *) * (cnt + 2))) == NULL)
+ 					{
+ 						ef_dir = TRUE;
+ 						return(NULL);
+ 					}
+ 					memmove(wk, retp, sizeof(char *) * (cnt + 1));
+ 					free(retp);
+ 					retp = (char **)wk;
+ 					retp[cnt] = lresult[k];
+ 					retp[++cnt] = NULL;
+ 				}
+ 				free(lresult);
+ 			}
+ 			free(aresult);
+ 			free(result[j]);
+ 		}
+ 		else
+ 		{
+ 			if ((wk = malloc(sizeof(char *) * (cnt + 2))) == NULL)
+ 			{
+ 				ef_dir = TRUE;
+ 				return(NULL);
+ 			}
+ 			memmove(wk, retp, sizeof(char *) * (cnt + 1));
+ 			free(retp);
+ 			retp = (char **)wk;
+ 			retp[cnt] = result[j];
+ 			retp[++cnt] = NULL;
+ 		}
+ 	}
+ 	free(result);
+ 	ef_dir = TRUE;
+ 	for (j = 0; retp[j] != NULL; j++)
+ 		retp[j] = ef_getlongname(retp[j]);
+ 	return(retp);
+ }
diff -crN ../orig/src/exfile/exfile.h ./src/exfile/exfile.h
*** ../orig/src/exfile/exfile.h	Thu Jan 01 09:00:00 1970
--- ./src/exfile/exfile.h	Fri Oct 01 19:39:38 1999
***************
*** 0 ****
--- 1,53 ----
+ /*******************************************************************************
+  *	EXtended FILE support
+  ******************************************************************************/
+ #include <windows.h>
+ VOID		ef_init(HWND);
+ VOID		ef_term(void);
+ char	*	ef_ver(void);
+ BOOL		is_ef(const char *, char);
+ BOOL		is_efarc(const char *, char);
+ int			ef_open(const char *, int, ...);
+ int			ef_close(int);
+ int			ef_remove(const char *);
+ int			ef_rename(const char *, const char *);
+ long		ef_stat(char *, struct stat *);
+ int			ef_chmod(const char *, int);
+ char	*	ef_fullpath(char *, char *, int);
+ DWORD		ef_getfullpathname(LPCTSTR, DWORD, LPTSTR, LPTSTR *);
+ int			ef_findnext(HANDLE, WIN32_FIND_DATA *);
+ HANDLE		ef_findfirst(const char *, WIN32_FIND_DATA *);
+ void		ef_findclose(HANDLE);
+ BOOL		ef_breakcheck(void);
+ char **		ef_globfilename(char *, BOOL);
+ 
+ BOOL		ef_iskanji(unsigned char);
+ BOOL		ef_pathsep(unsigned char);
+ void		ef_slash(char *);
+ long		ef_getperm(char *);
+ char	*	ef_gettail(char *);
+ char	*	ef_getlongname(char *);
+ VOID		ef_loop(void);
+ 
+ #ifdef USE_MATOME
+ void		decode(BOOL, long, long);
+ char	*	encode(char, char *, int, unsigned char *, long *, int);
+ char	*	decode_ver(void);
+ #endif
+ 
+ #ifndef  __EXFILE__C
+ # define	open				ef_open
+ # define	close				ef_close
+ # undef		remove
+ # define	remove				ef_remove
+ # define	rename				ef_rename
+ # define	chmod				ef_chmod
+ # undef		FindFirstFile
+ # define	FindFirstFile		ef_findfirst
+ # undef		FindNextFile
+ # define	FindNextFile		ef_findnext
+ # define	FindClose			ef_findclose
+ # define	_fullpath			ef_fullpath
+ # undef		GetFullPathName
+ # define	GetFullPathName		ef_getfullpathname
+ #endif
diff -crN ../orig/src/exfile/ftp.c ./src/exfile/ftp.c
*** ../orig/src/exfile/ftp.c	Thu Jan 01 09:00:00 1970
--- ./src/exfile/ftp.c	Sun Sep 19 19:40:20 1999
***************
*** 0 ****
--- 1,613 ----
+ /*==============================================================================
+  *	LHA file support file
+  *============================================================================*/
+ #include <windows.h>
+ #include <wininet.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <fcntl.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <errno.h>
+ #include <io.h>
+ #include <unlha32.h>
+ 
+ #define  __EXFILE__C
+ #include "exfile.h"
+ #include "ftp.h"
+ 
+ /*==============================================================================
+  *	LHA file support
+  *============================================================================*/
+ #define MAX_LENGTH		256
+ typedef struct {
+ 	DWORD				access;
+ 	BOOL				proxy;
+ 	char				host[MAX_LENGTH];
+ 	char				user[MAX_LENGTH];
+ 	char				pass[MAX_LENGTH];
+ } cache;
+ static cache			Cache[8];
+ 
+ static HINTERNET		hFindOpen;
+ static HINTERNET		hFindConnect; 
+ static HWND				hFtpWnd;
+ 
+ static char				Tempbase[MAX_PATH];
+ 
+ typedef	INTERNETAPI HINTERNET	(WINAPI *pInternetOpenA)(LPCSTR, DWORD, LPCSTR, LPCSTR, DWORD);
+ typedef	INTERNETAPI BOOL		(WINAPI	*pInternetCloseHandle)(HINTERNET);
+ typedef	INTERNETAPI BOOL		(WINAPI *pInternetSetOptionExA)(HINTERNET, DWORD, LPVOID, DWORD, DWORD);
+ typedef	INTERNETAPI HINTERNET	(WINAPI *pInternetConnectA)(HINTERNET, LPCSTR, INTERNET_PORT, LPCSTR, LPCSTR, DWORD, DWORD, DWORD);
+ typedef	INTERNETAPI BOOL		(WINAPI *pInternetFindNextFileA)(HINTERNET, LPVOID);
+ typedef	INTERNETAPI BOOL		(WINAPI *pFtpGetFileA)(HINTERNET, LPCSTR, LPCSTR, BOOL, DWORD, DWORD, DWORD);
+ typedef	INTERNETAPI BOOL		(WINAPI *pFtpPutFileA)(HINTERNET, LPCSTR, LPCSTR, DWORD, DWORD);
+ typedef	INTERNETAPI BOOL		(WINAPI *pFtpDeleteFileA)(HINTERNET, LPCSTR);
+ typedef	INTERNETAPI HINTERNET	(WINAPI *pFtpFindFirstFileA)(HINTERNET, LPCSTR, LPWIN32_FIND_DATA, DWORD, DWORD);
+ typedef	URLCACHEAPI BOOL		(WINAPI *pDeleteUrlCacheEntry)(LPCSTR);
+ 
+ static	HANDLE					hWininetLib				= NULL;
+ static	pInternetOpenA			pInternetOpen			= NULL;
+ static	pInternetCloseHandle	pInternetClose			= NULL;
+ static	pInternetSetOptionExA	pInternetSetOption		= NULL;
+ static	pInternetConnectA		pInternetConnect		= NULL;
+ static	pInternetFindNextFileA	pInternetFindNextFile	= NULL;
+ static	pFtpGetFileA			pFtpGetFile				= NULL;
+ static	pFtpPutFileA			pFtpPutFile				= NULL;
+ static	pFtpDeleteFileA			pFtpDeleteFile			= NULL;
+ static	pFtpFindFirstFileA		pFtpFindFirstFile		= NULL;
+ static	pDeleteUrlCacheEntry	pDeleteCache			= NULL;
+ 
+ static	BOOL					ftp_stop				= FALSE;
+ 
+ /*==============================================================================
+  *	LHA support routine
+  *============================================================================*/
+ /*------------------------------------------------------------------------------
+  *	CHECK LHA file
+  *----------------------------------------------------------------------------*/
+ static BOOL
+ ftp_getname(name, hname, fname)
+ char		*	name;
+ char		*	hname;
+ char		*	fname;
+ {
+ 	char		*	p;
+ 	int				pos;
+ 
+ 	if (hWininetLib == NULL)
+ 		return(FALSE);
+ 	hname[0] = fname[0] = '\0';
+ 	if (strncmp(name, "ftp://", 6) != 0)
+ 		return(FALSE);
+ 	/* get hostname */
+ 	pos	= 0;
+ 	p	= &name[6];
+ 	while (*p)
+ 	{
+ 		if (*p == '/')
+ 		{
+ 			hname[pos] = '\0';
+ 			p++;
+ 			break;
+ 		}
+ 		hname[pos++] = *p++;
+ 	}
+ 	if (hname[0] == '\0')
+ 		return(FALSE);
+ 	pos = 0;
+ 	while (*p)
+ 		fname[pos++] = *p++;
+ 	fname[pos] = '\0';
+ 	if (fname[0] == '\0')
+ 		return(FALSE);
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	login dialog
+  *----------------------------------------------------------------------------*/
+ static LRESULT CALLBACK
+ DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+ {
+     int					wmId;
+ 	HWND				hwndOwner;
+ 	RECT				rc;
+ 	RECT				rcDlg;
+ 	RECT				rcOwner;
+ 	static cache	*	cp = NULL;
+ 
+ 	switch (uMsg) {
+ 	case WM_INITDIALOG:
+ 		hwndOwner = GetDesktopWindow();
+ 		GetWindowRect(hwndOwner, &rcOwner);
+ 		GetWindowRect(hWnd, &rcDlg);
+ 		CopyRect(&rc, &rcOwner);
+ 		OffsetRect(&rcDlg, -rcDlg.left, -rcDlg.top);
+ 		OffsetRect(&rc, -rc.left, -rc.top);
+ 		OffsetRect(&rc, -rcDlg.right, -rcDlg.bottom);
+ 		SetWindowPos(hWnd, HWND_TOP,
+ 				rcOwner.left + (rc.right / 2), rcOwner.top + (rc.bottom / 2),
+ 				0, 0, SWP_NOSIZE);
+ 		cp = (cache *)lParam;
+ 		SetForegroundWindow(hWnd);
+ 		return(TRUE);
+ 	case WM_DESTROY:
+ 		break;
+ 	case WM_COMMAND:
+ 		wmId = LOWORD(wParam);
+ 		switch (wmId) {
+ 		case IDOK:
+ 			if (cp != NULL)
+ 			{
+ 				GetDlgItemText(hWnd, 1000, cp->user,  MAX_LENGTH);
+ 				GetDlgItemText(hWnd, 1001, cp->pass,  MAX_LENGTH);
+ 				cp->proxy = SendDlgItemMessage(hWnd, 1004, BM_GETCHECK, 0, 0);
+ 			}
+ 			cp = NULL;
+ 			EndDialog(hWnd, 0);
+ 			return(TRUE);
+ 		case IDCANCEL:
+ 			cp = NULL;
+ 			EndDialog(hWnd, 1);
+ 			return(TRUE);
+ 		}
+ 		break;
+ 	}
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	CHECK LHA file
+  *----------------------------------------------------------------------------*/
+ static BOOL
+ ftp_connect(host, hOpen, hConnect)
+ char			*	host;
+ HINTERNET		*	hOpen;
+ HINTERNET		*	hConnect; 
+ {
+ 	int					i;
+ 	static cache		work;
+ 	cache			*	cp = NULL;
+ 	int					time_out = 60000;
+ 
+ 	for (i = 0; i < (sizeof(Cache) / sizeof(cache)); i++)
+ 	{
+ 		if (strcmp(Cache[i].host, host) == 0)
+ 		{
+ 			cp = &Cache[i];
+ 			break;
+ 		}
+ 	}
+ 	if (cp == NULL)
+ 	{
+ 		if (strcmp(work.host, host) == 0
+ 								&& (work.access + 10000) > GetTickCount())
+ 			return(FALSE);
+ 		memset(&work, 0, sizeof(work));
+ 		cp = &work;
+ 		strcpy(work.host, host);
+ 		/* dialog */
+ 		if (DialogBoxParam(GetModuleHandle(NULL),
+ 								"LOGIN", hFtpWnd, DialogProc, (LPARAM)cp) != 0)
+ 		{
+ 			cp->access = GetTickCount();
+ 			ftp_stop = TRUE;
+ 			return(FALSE); 
+ 		}
+ 	}
+ 	if (cp->proxy)
+ 	{
+ 		if ((*hOpen = (*pInternetOpen)("FTP", INTERNET_OPEN_TYPE_PRECONFIG,
+ 												NULL, NULL, 0)) == NULL)
+ 			return(FALSE); 
+ 		(*pInternetSetOption)(*hOpen, INTERNET_OPTION_CONNECT_TIMEOUT, &time_out, sizeof(time_out), 0);
+ 		*hConnect = (*pInternetConnect)(*hOpen, host,
+ 					INTERNET_INVALID_PORT_NUMBER, cp->user, cp->pass,
+ 					INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
+ 	}
+ 	else
+ 	{
+ 		if ((*hOpen = (*pInternetOpen)("FTP", INTERNET_OPEN_TYPE_DIRECT,
+ 												NULL, NULL, 0)) == NULL) 
+ 			return(FALSE); 
+ 		(*pInternetSetOption)(*hOpen, INTERNET_OPTION_CONNECT_TIMEOUT, &time_out, sizeof(time_out), 0);
+ 		*hConnect = (*pInternetConnect)(*hOpen, host,
+ 					INTERNET_INVALID_PORT_NUMBER, cp->user, cp->pass,
+ 					INTERNET_SERVICE_FTP, 0, 0);
+ 	}
+     if (*hConnect == NULL)
+ 	{
+ 		(*pInternetClose)(*hOpen);
+ 		if (cp != &work)
+ 		{
+ 			memmove(&work, cp, sizeof(work));
+ 			cp->host[0] = '\0';
+ 			cp->access = 0;
+ 		}
+ 		work.access = GetTickCount();
+ 		return(FALSE);
+ 	}
+ 	cp->access = GetTickCount();
+ 	if (cp == &work)
+ 	{
+ 		DWORD	access = Cache[0].access;
+ 		int		no = 0;
+ 
+ 		for (i = 1; i < (sizeof(Cache) / sizeof(cache)); i++)
+ 		{
+ 			if (Cache[i].access < access)
+ 			{
+ 				access = Cache[i].access;
+ 				no = i;
+ 			}
+ 		}
+ 		memmove(&Cache[no], cp, sizeof(cache));
+ 	}
+     return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	CHECK LHA file
+  *----------------------------------------------------------------------------*/
+ static void
+ ftp_disconnect(hOpen, hConnect)
+ HINTERNET			hOpen;
+ HINTERNET			hConnect; 
+ {
+ 	(*pInternetClose)(hConnect);
+ 	(*pInternetClose)(hOpen);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	LHA init
+  *----------------------------------------------------------------------------*/
+ BOOL
+ ftp_init(window)
+ HWND			window;
+ {
+ 	int				i;
+ 	char		*	p;
+ 
+ 	if (!isatty(0) || !isatty(1))
+ 		return(FALSE);
+ 	hFtpWnd = window;
+ 	if (hWininetLib == NULL)
+ 	{
+ 		hWininetLib = LoadLibrary("wininet.dll");
+ 		if (hWininetLib == NULL)
+ 			return(FALSE);
+ 		pInternetOpen
+ 			= (pInternetOpenA)GetProcAddress(hWininetLib, "InternetOpenA");
+ 		pInternetClose
+ 			= (pInternetCloseHandle)GetProcAddress(hWininetLib, "InternetCloseHandle");
+ 		pInternetSetOption
+ 			= (pInternetSetOptionExA)GetProcAddress(hWininetLib, "InternetSetOptionExA");
+ 		pInternetConnect
+ 			= (pInternetConnectA)GetProcAddress(hWininetLib, "InternetConnectA");
+ 		pInternetFindNextFile
+ 			= (pInternetFindNextFileA)GetProcAddress(hWininetLib, "InternetFindNextFileA");
+ 		pFtpGetFile
+ 			= (pFtpGetFileA)GetProcAddress(hWininetLib, "FtpGetFileA");
+ 		pFtpPutFile
+ 			= (pFtpPutFileA)GetProcAddress(hWininetLib, "FtpPutFileA");
+ 		pFtpDeleteFile
+ 			= (pFtpDeleteFileA)GetProcAddress(hWininetLib, "FtpDeleteFileA");
+ 		pFtpFindFirstFile
+ 			= (pFtpFindFirstFileA)GetProcAddress(hWininetLib, "FtpFindFirstFileA");
+ 		pDeleteCache
+ 			= (pDeleteUrlCacheEntry)GetProcAddress(hWininetLib, "DeleteUrlCacheEntry");
+ 		if (pInternetOpen && pInternetClose && pInternetSetOption
+ 				&& pInternetConnect && pInternetFindNextFile
+ 				&& pFtpGetFile && pFtpPutFile && pFtpDeleteFile
+ 				&& pFtpFindFirstFile && pDeleteCache)
+ 			;
+ 		else
+ 		{
+ 			FreeLibrary(hWininetLib);
+ 			hWininetLib = NULL;
+ 			return(FALSE);
+ 		}
+ 		for (i = 0; i < (sizeof(Cache) / sizeof(cache)); i++)
+ 		{
+ 			Cache[i].host[0] = '\0';
+ 			Cache[i].access = 0;
+ 		}
+ 		Tempbase[0] = '\0';
+ 		if ((p = getenv("TMP")) == NULL)
+ 			p = getenv("TEMP");
+ 		if (p != NULL)
+ 		{
+ 			strcpy(Tempbase, p);
+ 			i = strlen(Tempbase) - 1;
+ 			if (Tempbase[i] == '\\' || Tempbase[i] == '/')
+ 				;
+ 			else
+ 				strcat(Tempbase, "\\");
+ 		}
+ 		strcat(Tempbase, "efXXXXXX");
+ 	}
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	LHA term
+  *----------------------------------------------------------------------------*/
+ VOID
+ ftp_term()
+ {
+ 	FreeLibrary(hWininetLib);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	LHA term
+  *----------------------------------------------------------------------------*/
+ char *
+ ftp_ver()
+ {
+ 	static char		ver[1024] = "ftp : 1.0 (ftp://host/xxxx)";
+ 	return(ver);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	CHECK LHA file
+  *----------------------------------------------------------------------------*/
+ BOOL
+ is_ftp(fname, dummy)
+ const char	*	fname;
+ char			dummy;
+ {
+ 	if (hWininetLib == NULL)
+ 		return(FALSE);
+ 	if (strncmp(fname, "ftp://", 6) == 0)
+ 		return(TRUE);
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	CHECK LHA file
+  *----------------------------------------------------------------------------*/
+ BOOL
+ ftp_sfx(fname)
+ char		*	fname;
+ {
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	open() emulation
+  *----------------------------------------------------------------------------*/
+ BOOL
+ ftp_getfile(fname, tmp)
+ const char	*	fname;
+ const char	*	tmp;
+ {
+ 	char				ftp_fname[MAX_PATH];
+ 	char				ftp_hname[MAX_PATH];
+ 	char				ftp_delete[MAX_PATH];
+ 	int					i;
+ 	HINTERNET			hOpen;
+ 	HINTERNET			hConnect; 
+ 
+ 	if (!ftp_getname(fname, ftp_hname, ftp_fname))
+ 		return(FALSE);
+ 	if (!ftp_connect(ftp_hname, &hOpen, &hConnect))
+ 		return(FALSE);
+ 	if (!(*pFtpGetFile)(hConnect, ftp_fname, tmp, FALSE,
+ 							INTERNET_FLAG_RELOAD, FTP_TRANSFER_TYPE_BINARY, 0)) 
+ 	{
+ 		ftp_disconnect(hOpen, hConnect);
+ 		return(FALSE);
+ 	}
+ 	ftp_disconnect(hOpen, hConnect);
+ 	strcpy(ftp_delete, "ftp://");
+ 	strcat(ftp_delete, ftp_hname);
+ 	strcat(ftp_delete, "/");
+ 	for (i = 0; i < sizeof(ftp_fname) && ftp_fname[i] != '\0'; i++)
+ 	{
+ 		if (ftp_fname[i] == '/')
+ 			;
+ 		else
+ 		{
+ 			strcat(ftp_delete, &ftp_fname[i]);
+ 			(*pDeleteCache)(ftp_delete);
+ 			break;
+ 		}
+ 	}
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	close emulation
+  *----------------------------------------------------------------------------*/
+ BOOL
+ ftp_putfile(fname, tmp)
+ const char	*	fname;
+ const char	*	tmp;
+ {
+ 	char				ftp_fname[MAX_PATH];
+ 	char				ftp_hname[MAX_PATH];
+ 	HINTERNET			hOpen;
+ 	HINTERNET			hConnect; 
+ 
+ 	if (!ftp_getname(fname, ftp_hname, ftp_fname))
+ 		return(FALSE);
+ 	if (!ftp_connect(ftp_hname, &hOpen, &hConnect))
+ 		return(FALSE);
+ 	if (!(*pFtpPutFile)(hConnect, tmp, ftp_fname, FTP_TRANSFER_TYPE_BINARY, 0))
+ 	{
+ 		ftp_disconnect(hOpen, hConnect);
+ 		return(FALSE);
+ 	}
+ 	ftp_disconnect(hOpen, hConnect);
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	unlink()/remove() emulation
+  *----------------------------------------------------------------------------*/
+ int
+ ftp_remove(fname)
+ const char	*	fname;
+ {
+ 	char				ftp_fname[MAX_PATH];
+ 	char				ftp_hname[MAX_PATH];
+ 	HINTERNET			hOpen;
+ 	HINTERNET			hConnect; 
+ 
+ 	if (!ftp_getname(fname, ftp_hname, ftp_fname))
+ 		return(-1);
+ 	if (!ftp_connect(ftp_hname, &hOpen, &hConnect))
+ 		return(-1);
+ 	if (!(*pFtpDeleteFile)(hConnect, ftp_fname)) 
+ 	{
+ 		ftp_disconnect(hOpen, hConnect);
+ 		return(-1);
+ 	}
+ 	ftp_disconnect(hOpen, hConnect);
+ 	return(0);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	chmod() emulation
+  *----------------------------------------------------------------------------*/
+ int
+ ftp_chmod(name, perm)
+ const char	*	name;
+ int				perm;
+ {
+ 	return(0);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	fullpath() emulation
+  *----------------------------------------------------------------------------*/
+ char *
+ ftp_fullpath(buf, fname, len)
+ char		*	buf;
+ char		*	fname;
+ int				len;
+ {
+ 	char				ftp_fname[MAX_PATH];
+ 	char				ftp_hname[MAX_PATH];
+ 
+ 	if (!ftp_getname(fname, ftp_hname, ftp_fname))
+ 		return(NULL);
+ 	strcpy(buf, fname);
+ 	return(buf);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	getfullpathname() emulation
+  *----------------------------------------------------------------------------*/
+ DWORD
+ ftp_getfullpathname(lpszFile, cchPath, lpszPath, ppszFilePart)
+ LPCTSTR			lpszFile;
+ DWORD			cchPath;
+ LPTSTR			lpszPath;
+ LPTSTR		*	ppszFilePart;
+ {
+ 	return(0);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	findnext() emulation
+  *----------------------------------------------------------------------------*/
+ int
+ ftp_findnext(hFind, data)
+ HANDLE				hFind;
+ WIN32_FIND_DATA	* 	data;
+ {
+ 	return((*pInternetFindNextFile)(hFind, data));
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	findfirst() emulation
+  *----------------------------------------------------------------------------*/
+ HANDLE
+ ftp_findfirst(name, data)
+ const char		*	name;
+ WIN32_FIND_DATA	* 	data;
+ {
+ 	HINTERNET				hFind; 
+ 	char					ftp_fname[MAX_PATH];
+ 	char					ftp_hname[MAX_PATH];
+ 	char					ftp_tname[MAX_PATH];
+ 	char				*	tail;
+ 	BOOL					kanji = FALSE;
+ 	int						i;
+ 
+ 	if (!ftp_getname(name, ftp_hname, ftp_fname))
+ 		return(INVALID_HANDLE_VALUE);
+ 	if (!ftp_connect(ftp_hname, &hFindOpen, &hFindConnect))
+ 		return(INVALID_HANDLE_VALUE);
+ 	tail = ef_gettail(ftp_fname);
+ 	memset(ftp_tname, '\0', sizeof(ftp_tname));
+ 	if (tail != ftp_fname)
+ 		strncpy(ftp_tname, ftp_fname, tail - ftp_fname);
+ 	strcat(ftp_tname, "*.*");
+ 	if ((hFind = (*pFtpFindFirstFile)(hFindConnect, ftp_tname, data, 0, 0)) == NULL)
+ 	{
+ 		ftp_disconnect(hFindOpen, hFindConnect);
+ 		return(INVALID_HANDLE_VALUE);
+ 	}
+ 	if (strcmp(tail, "*.*") == 0 || strpbrk(tail, "*?") != NULL)
+ 		return(hFind);
+ 	do 
+ 	{ 
+ 		if (strcmp(data->cFileName, tail) == 0)
+ 			return(hFind);
+ 		for (i = 0; kanji == FALSE && i < sizeof(data->cFileName) && data->cFileName[i] != '\0'; i++)
+ 		{
+ 			if (data->cFileName[i] & 0x80)
+ 			{
+ 				kanji = TRUE;
+ 				break;
+ 			}
+ 		}
+ 		if (!ftp_findnext(hFind, data))
+ 			break; 
+ 	} while (TRUE); 
+ 	if (kanji)
+ 	{
+ 		strcpy(ftp_fname, Tempbase);
+ 		if (mktemp(ftp_fname) == NULL)
+ 		{
+ 			ftp_findclose(hFind);
+ 			return(INVALID_HANDLE_VALUE);
+ 		}
+ 		if (ftp_getfile(name, ftp_fname))
+ 		{
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
+ 			strcpy(data->cFileName, tail);
+ 			chmod(ftp_fname, S_IREAD | S_IWRITE);
+ 			unlink(ftp_fname);
+ 			return(hFind);
+ 		}
+ 	}
+ 	ftp_findclose(hFind);
+ 	return(INVALID_HANDLE_VALUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	findclose() emulation
+  *----------------------------------------------------------------------------*/
+ void
+ ftp_findclose(hFind)
+ HANDLE			hFind;
+ {
+ 	(*pInternetClose)(hFind);
+ 	ftp_disconnect(hFindOpen, hFindConnect);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *
+  *----------------------------------------------------------------------------*/
+ BOOL
+ ftp_breakcheck()
+ {
+ 	BOOL			rc = ftp_stop;
+ 
+ 	ftp_stop = FALSE;
+ 	return(rc);
+ }
diff -crN ../orig/src/exfile/ftp.h ./src/exfile/ftp.h
*** ../orig/src/exfile/ftp.h	Thu Jan 01 09:00:00 1970
--- ./src/exfile/ftp.h	Sun Sep 19 18:55:14 1999
***************
*** 0 ****
--- 1,20 ----
+ /*******************************************************************************
+  *	LZH file support
+  ******************************************************************************/
+ #include <windows.h>
+ 
+ BOOL		ftp_init(HWND);
+ VOID		ftp_term(void);
+ char	*	ftp_ver(void);
+ BOOL		is_ftp(const char *, char);
+ BOOL		ftp_sfx(char *);
+ BOOL		ftp_getfile(const char *, const char *);
+ BOOL		ftp_putfile(const char *, const char *);
+ int			ftp_remove(const char *);
+ int			ftp_chmod(const char *, int);
+ char	*	ftp_fullpath(char *, char *, int);
+ DWORD		ftp_getfullpathname(LPCTSTR, DWORD, LPTSTR, LPTSTR *);
+ int			ftp_findnext(HANDLE, WIN32_FIND_DATA *);
+ HANDLE		ftp_findfirst(const char *, WIN32_FIND_DATA *);
+ void		ftp_findclose(HANDLE);
+ BOOL		ftp_breakcheck(void);
diff -crN ../orig/src/exfile/lha.c ./src/exfile/lha.c
*** ../orig/src/exfile/lha.c	Thu Jan 01 09:00:00 1970
--- ./src/exfile/lha.c	Sun Sep 19 21:46:38 1999
***************
*** 0 ****
--- 1,700 ----
+ /*==============================================================================
+  *	LHA file support file
+  *============================================================================*/
+ #include <windows.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <fcntl.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <errno.h>
+ #include <io.h>
+ #include <unlha32.h>
+ 
+ #define  __EXFILE__C
+ #include "exfile.h"
+ #include "lha.h"
+ 
+ /*==============================================================================
+  *	LHA file support
+  *============================================================================*/
+ typedef	WORD	(WINAPI *pUnlhaGetVersion)(VOID);
+ typedef	BOOL	(WINAPI *pUnlhaCheckArchive)(LPCSTR _szFileName,
+ 						const int _iMode);
+ typedef	HARC	(WINAPI *pUnlhaOpenArchive)(const HWND _hwnd,
+ 						LPCSTR _szFileName, const DWORD _dwMode);
+ typedef	int		(WINAPI _export *pUnlhaCloseArchive)(HARC _harc);
+ typedef	int		(WINAPI *pUnlha)(const HWND _hwnd, LPCSTR _szCmdLine,
+ 						LPSTR _szOutput, const DWORD _dwSize);
+ typedef	int		(WINAPI *pUnlhaFindFirst)(HARC _harc, LPCSTR _szWildName,
+ 						INDIVIDUALINFO FAR *lpSubInfo);
+ typedef	int		(WINAPI *pUnlhaFindNext)(HARC _harc,
+ 						INDIVIDUALINFO FAR *_lpSubInfo);
+ typedef	int		(WINAPI *pUnlhaExtractMem)(const HWND _hwnd, LPCSTR _szCmdLine,
+ 						LPBYTE _szBuffer, const DWORD _dwSize, time_t *_lpTime,
+ 						LPWORD _lpwAttr, LPDWORD _lpdwWriteSize);
+ typedef	int		(WINAPI *pUnlhaCompressMem)(const HWND _hwnd, LPCSTR _szCmdLine,
+ 						const LPBYTE _szBuffer, const DWORD _dwSize,
+ 						const time_t *_lpTime, const LPWORD _lpwAttr,
+ 						LPDWORD _lpdwWriteSize);
+ typedef struct readbuf {
+ 	struct readbuf		*	next;
+ 	char				*	fname;
+ } READBUF;
+ 
+ 
+ static	HANDLE				hLhaLib				= NULL;
+ static	pUnlhaGetVersion	pLhaGetVersion		= NULL;
+ static	pUnlhaCheckArchive	pLhaCheckArchive	= NULL;
+ static	pUnlhaOpenArchive	pLhaOpenArchive		= NULL;
+ static	pUnlhaCloseArchive	pLhaCloseArchive	= NULL;
+ static	pUnlha				pLha				= NULL;
+ static	pUnlhaFindFirst		pLhaFindFirst		= NULL;
+ static	pUnlhaFindNext		pLhaFindNext		= NULL;
+ static	pUnlhaExtractMem	pLhaExtractMem		= NULL;
+ static	pUnlhaCompressMem	pLhaCompressMem		= NULL;
+ 
+ static	INDIVIDUALINFO		SubInfo;
+ static	char				find_fname[MAX_PATH];
+ static	char				find_aname[MAX_PATH];
+ static	READBUF			*	lha_rbuf			= NULL;
+ static	BOOL				lha_stop			= FALSE;
+ extern	BOOL				ef_dir;
+ 
+ static	HWND				lha_disp;
+ static	char			*	ext[] = {".lzh", ".exe", NULL};
+ 
+ #define LIBNAME				"unlha32.dll"
+ #define	EDISP				(128*1024)
+ #define	CDISP				(16*1024)
+ 
+ /*==============================================================================
+  *	LHA support routine
+  *============================================================================*/
+ /*------------------------------------------------------------------------------
+  *	CHECK LHA file
+  *----------------------------------------------------------------------------*/
+ static BOOL
+ lha_getname(name, sep, aname, fname)
+ const char	*	name;
+ char			sep;
+ char		*	aname;
+ char		*	fname;
+ {
+ 	const char	*	p;
+ 	char		**	ep		= ext;
+ 	char			lha_fname[MAX_PATH];
+ 	char			lha_aname[MAX_PATH];
+ 
+ 	if (hLhaLib == NULL)
+ 		return(FALSE);
+ 	if (strlen(name) <= 5)
+ 		return(FALSE);
+ 	if (fname == NULL)
+ 		fname = lha_fname;
+ 	if (aname == NULL)
+ 		aname = lha_aname;
+ 	while (*ep)
+ 	{
+ 		p = name + 1;
+ 		while (*p)
+ 		{
+ 			if ((strlen(p) >= strlen(*ep))
+ 					&& strnicmp(p, *ep, strlen(*ep)) == 0
+ 					&& p[strlen(*ep)] == sep)
+ 			{
+ 				strncpy(aname, name, (p + strlen(*ep)) - name);
+ 				aname[(p + strlen(*ep)) - name] = '\0';
+ 				if (sep != '\0')
+ 				{
+ 					strcpy(fname, p + strlen(*ep) + 1);
+ 					if (strlen(fname) == 0)
+ 						return(FALSE);
+ 					if (ef_getperm(aname) != (-1)
+ 									&& (*pLhaCheckArchive)(aname, 1) == FALSE)
+ 						return(FALSE);
+ 				}
+ 				else if ((*pLhaCheckArchive)(aname, 1) == FALSE)
+ 					return(FALSE);
+ 				return(TRUE);
+ 			}
+ 			p++;
+ 		}
+ 		ep++;
+ 	}
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	LHA init
+  *----------------------------------------------------------------------------*/
+ BOOL
+ lha_init(window)
+ HWND			window;
+ {
+ 	if (hLhaLib == NULL)
+ 	{
+ 		lha_disp = window;
+ 		hLhaLib = LoadLibrary(LIBNAME);
+ 		if (hLhaLib == NULL)
+ 			return(FALSE);
+ 		pLhaGetVersion
+ 			= (pUnlhaGetVersion)GetProcAddress(hLhaLib, "UnlhaGetVersion");
+ 		pLhaCheckArchive
+ 			= (pUnlhaCheckArchive)GetProcAddress(hLhaLib, "UnlhaCheckArchive");
+ 		pLhaOpenArchive
+ 			= (pUnlhaOpenArchive)GetProcAddress(hLhaLib, "UnlhaOpenArchive");
+ 		pLhaCloseArchive
+ 			= (pUnlhaCloseArchive)GetProcAddress(hLhaLib, "UnlhaCloseArchive");
+ 		pLha	= (pUnlha)GetProcAddress(hLhaLib, "Unlha");
+ 		pLhaFindFirst
+ 			= (pUnlhaFindFirst)GetProcAddress(hLhaLib, "UnlhaFindFirst");
+ 		pLhaFindNext
+ 			= (pUnlhaFindNext)GetProcAddress(hLhaLib, "UnlhaFindNext");
+ 		pLhaExtractMem
+ 			= (pUnlhaExtractMem)GetProcAddress(hLhaLib, "UnlhaExtractMem");
+ 		pLhaCompressMem
+ 			= (pUnlhaCompressMem)GetProcAddress(hLhaLib, "UnlhaCompressMem");
+ 		if (pLhaGetVersion && pLhaCheckArchive && pLhaOpenArchive
+ 						&& pLhaCloseArchive && pLha && pLhaFindFirst
+ 						&& pLhaFindNext && pLhaExtractMem && pLhaCompressMem)
+ 			;
+ 		else
+ 		{
+ 			FreeLibrary(hLhaLib);
+ 			hLhaLib = NULL;
+ 			return(FALSE);
+ 		}
+ 		if ((*pLhaGetVersion)() < 89 || (*pLhaGetVersion)() == 91)
+ 		{
+ 			FreeLibrary(hLhaLib);
+ 			hLhaLib = NULL;
+ 			return(FALSE);
+ 		}
+ 	}
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	LHA term
+  *----------------------------------------------------------------------------*/
+ VOID
+ lha_term()
+ {
+ 	FreeLibrary(hLhaLib);
+ 	hLhaLib = NULL;
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	LHA term
+  *----------------------------------------------------------------------------*/
+ char *
+ lha_ver()
+ {
+ 	static char		ver[1024];
+ 	int				i;
+ 
+ 	sprintf(ver, "%s : %d.%d (",
+ 			LIBNAME, (*pLhaGetVersion)() / 100, (*pLhaGetVersion)() % 100);
+ 	for (i = 0; ext[i] != NULL; i++)
+ 	{
+ 		if (i != 0)
+ 			strcat(ver, "/");
+ 		strcat(ver, ext[i]);
+ 	}
+ 	strcat(ver, ")");
+ 	return(ver);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	CHECK LHA file
+  *----------------------------------------------------------------------------*/
+ BOOL
+ is_lha(fname, sep)
+ const char	*	fname;
+ char			sep;
+ {
+ 	return(lha_getname(fname, sep, NULL, NULL));
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	CHECK LHA file
+  *----------------------------------------------------------------------------*/
+ BOOL
+ lha_sfx(fname)
+ char		*	fname;
+ {
+ 	DWORD			type;
+ 	char			lha_aname[MAX_PATH];
+ 
+ 	if (lha_getname(fname, ':', lha_aname, NULL))
+ 	{
+ 		type = (*pLhaCheckArchive)(lha_aname, 9);
+ 		if (type > 0x8000)
+ 			return(TRUE);
+ 	}
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	open() emulation
+  *----------------------------------------------------------------------------*/
+ BOOL
+ lha_getfile(fname, tmp)
+ const char	*	fname;
+ const char	*	tmp;
+ {
+ 	char				lha_fname[MAX_PATH];
+ 	char				lha_aname[MAX_PATH];
+ 	char				lha_cline[MAX_PATH + 32];
+ 	HANDLE				hFile;
+ 	WIN32_FIND_DATA		data;
+ 	int					fd;
+ 	char			*	p		= NULL;
+ 
+ 	if (!lha_getname(fname, ':', lha_aname, lha_fname))
+ 		return(FALSE);
+ 	if ((hFile = lha_findfirst(fname, &data)) == INVALID_HANDLE_VALUE)
+ 		return(FALSE);
+ 	lha_findclose(hFile);
+ 	if ((p = malloc(data.nFileSizeLow + 10)) == NULL)
+ 		return(FALSE);
+ 	sprintf(lha_cline, "-d1 -gm %s \"%s\" \"%s\"",
+ 		(data.nFileSizeLow < EDISP || !lha_disp) ? "-n -gp0" : "", lha_aname, lha_fname);
+ 	if ((*pLhaExtractMem)(lha_disp, lha_cline, p,
+ 						data.nFileSizeLow + 1, NULL, NULL, NULL) != 0)
+ 	{
+ 		lha_stop = TRUE;
+ 		sprintf(lha_cline, "-d1 -gm -n -gp0 %s %s", lha_aname, lha_fname);
+ 		if ((*pLhaExtractMem)(lha_disp, lha_cline, p,
+ 						data.nFileSizeLow + 1, NULL, NULL, NULL) != 0)
+ 		{
+ 			free(p);
+ 			return(FALSE);
+ 		}
+ 	}
+ 	if ((fd = open(tmp, O_WRONLY | O_CREAT | O_BINARY, S_IREAD | S_IWRITE)) < 0)
+ 	{
+ 		free(p);
+ 		return(FALSE);
+ 	}
+ 	write(fd, p, data.nFileSizeLow);
+ 	close(fd);
+ 	free(p);
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	close emulation
+  *----------------------------------------------------------------------------*/
+ BOOL
+ lha_putfile(fname, tmp)
+ const char	*	fname;
+ const char	*	tmp;
+ {
+ 	char				lha_fname[MAX_PATH];
+ 	char				lha_aname[MAX_PATH];
+ 	char				lha_cline[MAX_PATH + 32];
+ 	struct stat			st;
+ 	char			*	p		= NULL;
+ 	long 				perm	= -1;
+ 	int					fd;
+ 
+ 	if (!lha_getname(fname, ':', lha_aname, lha_fname))
+ 		return(FALSE);
+ 	if (stat(tmp, &st) != 0)
+ 		goto error;
+ 	if ((p = malloc(st.st_size + 1)) == NULL)
+ 		goto error;
+ 	if ((fd = open(tmp, O_RDONLY, S_IREAD | S_IWRITE)) < 0)
+ 		goto error;
+ 	if (st.st_size)
+ 		read(fd, p, st.st_size);
+ 	close(fd);
+ 	sprintf(lha_cline, "-d1 -gm %s \"%s\" \"%s\"",
+ 				st.st_size < CDISP || !lha_disp ? "-n -gp0" : "", lha_aname, lha_fname);
+ 	perm = ef_getperm(lha_aname);
+ 	if (perm > 0)
+ 		chmod(lha_aname, S_IREAD|S_IWRITE);
+ 	if ((*pLhaCompressMem)(lha_disp, lha_cline, p, st.st_size,
+ 												NULL, NULL, NULL) != 0)
+ 		goto error;
+ 	if (perm > 0)
+ 		chmod(lha_aname, perm);
+ 	return(TRUE);
+ error:
+ 	if (p != NULL)
+ 		free(p);
+ 	if (perm > 0)
+ 		chmod(lha_aname, perm);
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	unlink()/remove() emulation
+  *----------------------------------------------------------------------------*/
+ int
+ lha_remove(fname)
+ const char	*	fname;
+ {
+ 	char				lha_fname[MAX_PATH];
+ 	char				lha_aname[MAX_PATH];
+ 	char				lha_cline[MAX_PATH + 32];
+ 	HANDLE				hFile;
+ 	WIN32_FIND_DATA		data;
+ 	long 				perm;
+ 
+ 	if ((hFile = lha_findfirst(fname, &data)) == INVALID_HANDLE_VALUE)
+ 		return(-1);
+ 	lha_findclose(hFile);
+ 	lha_getname(fname, ':', lha_aname, lha_fname);
+ 	if ((perm = ef_getperm(lha_aname)) == (-1))
+ 		return(-1);
+ 	chmod(lha_aname, S_IREAD|S_IWRITE);
+ 	sprintf(lha_cline, "d -d1 -n -gp0 -gm \"%s\" \"%s\"", lha_aname, lha_fname);
+ 	(*pLha)(lha_disp, lha_cline, NULL, 0);
+ 	chmod(lha_aname, perm);
+ 	return(0);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	chmod() emulation
+  *----------------------------------------------------------------------------*/
+ int
+ lha_chmod(name, perm)
+ const char	*	name;
+ int				perm;
+ {
+ 	return(0);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	fullpath() emulation
+  *----------------------------------------------------------------------------*/
+ char *
+ lha_fullpath(buf, fname, len)
+ char		*	buf;
+ char		*	fname;
+ int				len;
+ {
+ 	char				lha_fname[MAX_PATH];
+ 	char				lha_aname[MAX_PATH];
+ 
+ 	if (!lha_getname(fname, ':', lha_aname, lha_fname))
+ 		return(NULL);
+ 	if (_fullpath(buf, lha_aname, len - strlen(lha_fname)) == NULL)
+ 		return(NULL);
+ 	strcat(buf, ":");
+ 	strcat(buf, lha_fname);
+ 	return(buf);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	getfullpathname() emulation
+  *----------------------------------------------------------------------------*/
+ DWORD
+ lha_getfullpathname(lpszFile, cchPath, lpszPath, ppszFilePart)
+ LPCTSTR			lpszFile;
+ DWORD			cchPath;
+ LPTSTR			lpszPath;
+ LPTSTR		*	ppszFilePart;
+ {
+ 	char				lha_fname[MAX_PATH];
+ 	char				lha_aname[MAX_PATH];
+ 	char			*	p;
+ 
+ 	if (!lha_getname(lpszFile, ':', lha_aname, lha_fname))
+ 		return(0);
+ 	if (GetFullPathName(lha_aname, cchPath, lpszPath, ppszFilePart) == 0)
+ 		return(0);
+ 	if ((strlen(lha_fname) + strlen(lpszPath) + 1) > cchPath)
+ 		return(0);
+ 	strcat(lpszPath, ":");
+ 	*ppszFilePart = lpszPath + strlen(lpszPath);
+ 	if (ef_dir)
+ 	{
+ 		if ((p = strrchr(lha_fname, '/')) != NULL)
+ 			*ppszFilePart += p - lha_fname + 1;
+ 	}
+ 	strcat(lpszPath, lha_fname);
+ 	return(strlen(lpszPath));
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	findnext() emulation
+  *----------------------------------------------------------------------------*/
+ int
+ lha_findnext(harc, data)
+ HANDLE			harc;
+ WIN32_FIND_DATA	* 	data;
+ {
+ 	int				pos;
+ 	int				n;
+ 	char		*	p;
+ 	READBUF		*	rbuf;
+ 	READBUF		**	brbuf;
+ 
+ retry:
+ 	if ((*pLhaFindNext)((HARC)harc, &SubInfo) == 0)
+ 	{
+ 		if (!ef_dir)
+ 		{
+ 			memset(data->cFileName, '\0', sizeof(data->cFileName));
+ 			strcpy(data->cFileName, SubInfo.szFileName);
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
+ 			if (strchr(SubInfo.szAttribute, 'W') == NULL)
+ 				data->dwFileAttributes = FILE_ATTRIBUTE_READONLY;
+ 			data->nFileSizeHigh = 0;
+ 			data->nFileSizeLow  = SubInfo.dwOriginalSize;
+ 			return(TRUE);
+ 		}
+ 		if ((p = strrchr(find_fname, '/')) != NULL)
+ 		{
+ 			if (strnicmp(find_fname, SubInfo.szFileName, p - find_fname + 1) != 0)
+ 				goto retry;
+ 			if ((strchr(find_fname, '*')) == NULL)
+ 			{
+ 				if (strnicmp(find_fname, SubInfo.szFileName, strlen(find_fname)) != 0)
+ 					goto retry;
+ 				if (SubInfo.szFileName[strlen(find_fname)] == '/'
+ 						|| SubInfo.szFileName[strlen(find_fname)] == '\0')
+ 					;
+ 				else
+ 					goto retry;
+ 			}
+ 		}
+ 		else
+ 		{
+ 			if (find_fname[0] != '/' && SubInfo.szFileName[0] == '/')
+ 				goto retry;
+ 			if ((strchr(find_fname, '*')) == NULL)
+ 			{
+ 				if (strnicmp(find_fname, SubInfo.szFileName, strlen(find_fname)) != 0)
+ 					goto retry;
+ 				if (SubInfo.szFileName[strlen(find_fname)] == '/'
+ 						|| SubInfo.szFileName[strlen(find_fname)] == '\0')
+ 					;
+ 				else
+ 					goto retry;
+ 			}
+ 		}
+ 		pos = 0;
+ 		data->nFileSizeHigh = 0;
+ 		data->nFileSizeLow  = SubInfo.dwOriginalSize;
+ 		data->dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
+ 		if (strchr(SubInfo.szAttribute, 'W') == NULL)
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_READONLY;
+ 		if (p != NULL)
+ 			pos = p - find_fname + 1;
+ 		n = strlen(&SubInfo.szFileName[pos]);
+ 		if ((p = strchr(&SubInfo.szFileName[pos], '/')) != NULL)
+ 		{
+ 			if (pos == 0 && p == SubInfo.szFileName)
+ 				n = 1;
+ 			else
+ 				n = p - &SubInfo.szFileName[pos];
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
+ 		}
+ 		memset(data->cFileName, '\0', sizeof(data->cFileName));
+ 		strncpy(data->cFileName, &SubInfo.szFileName[pos], n);
+ 		rbuf = lha_rbuf;
+ 		while (rbuf)
+ 		{
+ 			if (stricmp(rbuf->fname, data->cFileName) == 0)
+ 				goto retry;
+ 			if (rbuf->next == NULL)
+ 				break;
+ 			rbuf = rbuf->next;
+ 		}
+ 		if (rbuf == NULL)
+ 		{
+ 			if ((lha_rbuf = malloc(sizeof(READBUF))) == NULL)
+ 				return(FALSE);
+ 			brbuf = &lha_rbuf;
+ 			rbuf = lha_rbuf;
+ 		}
+ 		else
+ 		{
+ 			if ((rbuf->next = malloc(sizeof(READBUF))) == NULL)
+ 				return(FALSE);
+ 			brbuf = &rbuf->next;
+ 			rbuf = rbuf->next;
+ 		}
+ 		rbuf->next = NULL;
+ 		if ((rbuf->fname = malloc(strlen(data->cFileName) + 1)) == NULL)
+ 		{
+ 			*brbuf = NULL;
+ 			free(rbuf);
+ 			return(FALSE);
+ 		}
+ 		strcpy(rbuf->fname, data->cFileName);
+ 		return(TRUE);
+ 	}
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	findfirst() emulation
+  *----------------------------------------------------------------------------*/
+ HANDLE
+ lha_findfirst(name, data)
+ const char		*	name;
+ WIN32_FIND_DATA	* 	data;
+ {
+ 	HARC			hArc;
+ 	int				pos;
+ 	int				n;
+ 	char		*	p;
+ 
+ 	if (!lha_getname(name, ':', find_aname, find_fname))
+ 		return(INVALID_HANDLE_VALUE);
+ 	lha_rbuf = NULL;
+ 	if ((*pLhaCheckArchive)(find_aname, 1) == FALSE)
+ 		return(INVALID_HANDLE_VALUE);
+ 	if ((hArc = (*pLhaOpenArchive)(lha_disp, find_aname, M_INIT_FILE_USE)) == NULL)
+ 		return(INVALID_HANDLE_VALUE);
+ 	if ((*pLhaFindFirst)(hArc, "*.*", &SubInfo) == 0)
+ 	{
+ 		if (!ef_dir)
+ 		{
+ 			memset(data->cFileName, '\0', sizeof(data->cFileName));
+ 			strcpy(data->cFileName, SubInfo.szFileName);
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
+ 			if (strchr(SubInfo.szAttribute, 'W') == NULL)
+ 				data->dwFileAttributes = FILE_ATTRIBUTE_READONLY;
+ 			data->nFileSizeHigh = 0;
+ 			data->nFileSizeLow  = SubInfo.dwOriginalSize;
+ 			return((HANDLE)hArc);
+ 		}
+ 		if ((p = strrchr(find_fname, '/')) != NULL)
+ 		{
+ 			if (strnicmp(find_fname, SubInfo.szFileName, p - find_fname + 1) != 0)
+ 			{
+ 				if (lha_findnext((HANDLE)hArc, data))
+ 					return((HANDLE)hArc);
+ 				(*pLhaCloseArchive)(hArc);
+ 				return(INVALID_HANDLE_VALUE);
+ 			}
+ 			if ((strchr(find_fname, '*')) == NULL)
+ 			{
+ 				if (strnicmp(find_fname, SubInfo.szFileName, strlen(find_fname)) != 0)
+ 				{
+ 					if (lha_findnext((HANDLE)hArc, data))
+ 						return((HANDLE)hArc);
+ 					(*pLhaCloseArchive)(hArc);
+ 					return(INVALID_HANDLE_VALUE);
+ 				}
+ 				if (SubInfo.szFileName[strlen(find_fname)] == '/'
+ 						|| SubInfo.szFileName[strlen(find_fname)] == '\0')
+ 					;
+ 				else
+ 				{
+ 					if (lha_findnext((HANDLE)hArc, data))
+ 						return((HANDLE)hArc);
+ 					(*pLhaCloseArchive)(hArc);
+ 					return(INVALID_HANDLE_VALUE);
+ 				}
+ 			}
+ 		}
+ 		else
+ 		{
+ 			if (find_fname[0] != '/' && SubInfo.szFileName[0] == '/')
+ 			{
+ 				if (lha_findnext((HANDLE)hArc, data))
+ 					return((HANDLE)hArc);
+ 				(*pLhaCloseArchive)(hArc);
+ 				return(INVALID_HANDLE_VALUE);
+ 			}
+ 			if ((strchr(find_fname, '*')) == NULL)
+ 			{
+ 				if (strnicmp(find_fname, SubInfo.szFileName, strlen(find_fname)) != 0)
+ 				{
+ 					if (lha_findnext((HANDLE)hArc, data))
+ 						return((HANDLE)hArc);
+ 					(*pLhaCloseArchive)(hArc);
+ 					return(INVALID_HANDLE_VALUE);
+ 				}
+ 				if (SubInfo.szFileName[strlen(find_fname)] == '/'
+ 						|| SubInfo.szFileName[strlen(find_fname)] == '\0')
+ 					;
+ 				else
+ 				{
+ 					if (lha_findnext((HANDLE)hArc, data))
+ 						return((HANDLE)hArc);
+ 					(*pLhaCloseArchive)(hArc);
+ 					return(INVALID_HANDLE_VALUE);
+ 				}
+ 			}
+ 		}
+ 		pos = 0;
+ 		data->nFileSizeHigh = 0;
+ 		data->nFileSizeLow  = SubInfo.dwOriginalSize;
+ 		data->dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
+ 		if (strchr(SubInfo.szAttribute, 'W') == NULL)
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_READONLY;
+ 		if (p != NULL)
+ 			pos = p - find_fname + 1;
+ 		n = strlen(&SubInfo.szFileName[pos]);
+ 		if ((p = strchr(&SubInfo.szFileName[pos], '/')) != NULL)
+ 		{
+ 			if (pos == 0 && p == SubInfo.szFileName)
+ 				n = 1;
+ 			else
+ 				n = p - &SubInfo.szFileName[pos];
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
+ 		}
+ 		memset(data->cFileName, '\0', sizeof(data->cFileName));
+ 		strncpy(data->cFileName, &SubInfo.szFileName[pos], n);
+ 		if ((lha_rbuf = malloc(sizeof(READBUF))) == NULL)
+ 		{
+ 			(*pLhaCloseArchive)(hArc);
+ 			return(INVALID_HANDLE_VALUE);
+ 		}
+ 		lha_rbuf->next = NULL;
+ 		if ((lha_rbuf->fname = malloc(strlen(data->cFileName) + 1)) == NULL)
+ 		{
+ 			free(lha_rbuf);
+ 			lha_rbuf = NULL;
+ 			(*pLhaCloseArchive)(hArc);
+ 			return(INVALID_HANDLE_VALUE);
+ 		}
+ 		strcpy(lha_rbuf->fname, data->cFileName);
+ 		return((HANDLE)hArc);
+ 	}
+ 	(*pLhaCloseArchive)(hArc);
+ 	return(INVALID_HANDLE_VALUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	findclose() emulation
+  *----------------------------------------------------------------------------*/
+ void
+ lha_findclose(harc)
+ HANDLE			harc;
+ {
+ 	READBUF		*	rbuf;
+ 	READBUF		*	nrbuf;
+ 
+ 	(*pLhaCloseArchive)((HARC)harc);
+ 	rbuf = lha_rbuf;
+ 	while (rbuf)
+ 	{
+ 		nrbuf = rbuf->next;
+ 		free(rbuf->fname);
+ 		free(rbuf);
+ 		rbuf = nrbuf;
+ 	}
+ 	lha_rbuf = NULL;
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	getfullpathname() emulation
+  *----------------------------------------------------------------------------*/
+ BOOL
+ lha_breakcheck()
+ {
+ 	BOOL			rc = lha_stop;
+ 
+ 	lha_stop = FALSE;
+ 	return(rc);
+ }
diff -crN ../orig/src/exfile/lha.h ./src/exfile/lha.h
*** ../orig/src/exfile/lha.h	Thu Jan 01 09:00:00 1970
--- ./src/exfile/lha.h	Sun Sep 19 18:55:20 1999
***************
*** 0 ****
--- 1,20 ----
+ /*******************************************************************************
+  *	LZH file support
+  ******************************************************************************/
+ #include <windows.h>
+ 
+ BOOL		lha_init(HWND);
+ VOID		lha_term(void);
+ char	*	lha_ver(void);
+ BOOL		is_lha(const char *, char);
+ BOOL		lha_sfx(char *);
+ BOOL		lha_getfile(const char *, const char *);
+ BOOL		lha_putfile(const char *, const char *);
+ int			lha_remove(const char *);
+ int			lha_chmod(const char *, int);
+ char	*	lha_fullpath(char *, char *, int);
+ DWORD		lha_getfullpathname(LPCTSTR, DWORD, LPTSTR, LPTSTR *);
+ int			lha_findnext(HANDLE, WIN32_FIND_DATA *);
+ HANDLE		lha_findfirst(const char *, WIN32_FIND_DATA *);
+ void		lha_findclose(HANDLE);
+ BOOL		lha_breakcheck(void);
diff -crN ../orig/src/exfile/matome.c ./src/exfile/matome.c
*** ../orig/src/exfile/matome.c	Thu Jan 01 09:00:00 1970
--- ./src/exfile/matome.c	Sun Oct 24 22:20:34 1999
***************
*** 0 ****
--- 1,958 ----
+ /*==============================================================================
+  *
+  *============================================================================*/
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <io.h>
+ #include "vim.h"
+ #include "globals.h"
+ #include "proto.h"
+ #include "param.h"
+ #include "fcntl.h"
+ 
+ #define	DEC(c)		(((c) - ' ') & 077)
+ #define BASE64		1
+ #define UUENCODE	2
+ #define QPRINT		3
+ 
+ static char *mime_type[]
+ 		= {"=?ISO-8859-1?Q?", "=?ISO-2022-JP?B?", "=?shift_jis?B?",
+ 														"=?shift-jis?B?", NULL};
+ static char boundary[80];
+ 
+ /*------------------------------------------------------------------------------
+  *	uuencode decode routine
+  *----------------------------------------------------------------------------*/
+ static BOOL
+ uudc(oflg, fp, line1, line2)
+ BOOL			oflg;
+ FILE		*	fp;
+ linenr_t	*	line1;
+ linenr_t	*	line2;
+ {
+ 	linenr_t 		lnum;
+ 	int				n;
+ 	char		*	p;
+ 
+ 	for (lnum = *line1; lnum <= *line2; ++lnum)
+ 	{
+ 		p = ml_get_buf(curbuf, lnum, FALSE);
+ 		n = DEC(*p);
+ 		if (n <= 0)
+ 			break;
+ 		for (++p; n > 0; p += 4, n -= 3)
+ 		{
+ 			char		ch;
+ 
+ 			if (n >= 3)
+ 			{
+ 				ch = DEC(p[0]) << 2 | DEC(p[1]) >> 4;
+ 				fputc(ch, fp);
+ 				ch = DEC(p[1]) << 4 | DEC(p[2]) >> 2;
+ 				fputc(ch, fp);
+ 				ch = DEC(p[2]) << 6 | DEC(p[3]);
+ 				fputc(ch, fp);
+ 			}
+ 			else
+ 			{
+ 				if (n >= 1)
+ 				{
+ 					ch = DEC(p[0]) << 2 | DEC(p[1]) >> 4;
+ 					fputc(ch, fp);
+ 				}
+ 				if (n >= 2)
+ 				{
+ 					ch = DEC(p[1]) << 4 | DEC(p[2]) >> 2;
+ 					fputc(ch, fp);
+ 				}
+ 			}
+ 		}
+ 	}
+ 	if (lnum >= curbuf->b_ml.ml_line_count)
+ 	{
+ 		if (!oflg)
+ 		{
+ 			emsg("No begin/end line");
+ 			wait_return(FALSE);
+ 		}
+ 		return(FALSE);
+ 	}
+ 	p = ml_get_buf(curbuf, lnum + 1, FALSE);
+ 	if (strcmp(p, "end"))
+ 	{
+ 		if (!strchr(p_dc, 'a'))
+ 		{
+ 			*line2 = lnum;
+ 			return(TRUE);
+ 		}
+ 		if (!oflg)
+ 		{
+ 			emsg("No begin/end line");
+ 			wait_return(FALSE);
+ 		}
+ 		return(FALSE);
+ 	}
+ 	*line2 = lnum;
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	base 64 encode routine
+  *----------------------------------------------------------------------------*/
+ static char *
+ uuec(fname, crlf, ptr, len)
+ char		*	fname;
+ char		*	crlf;
+ unsigned char *	ptr;
+ long			len;
+ {
+ 	static char	szUUencode[] =
+ 		"`!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`";
+ 	DWORD			no;
+ 	INT				i	= 0;
+ 	INT				pos = 0;
+ 	BYTE		*	encode;
+ 	BYTE		*	p = ptr;
+ 	int				size = 0;
+ 
+ 	size = ((len + 2) / 3) * 4 + 1;
+ 	size += ((size / 60) + 1) * (1 + strlen(crlf));
+ 	size += strlen("Content-Type: application/octet-stream; name=\"\"");
+ 	size += strlen(fname);
+ 	size += strlen(crlf);
+ 	size += strlen("Content-Transfer-Encoding: X-uuencode");
+ 	size += strlen(crlf) * 2;
+ 	size += strlen("begin 644 ");
+ 	size += strlen(fname);
+ 	size += strlen(crlf);
+ 	size += strlen("end");
+ 	if ((encode = (BYTE *)malloc(size + 16)) == NULL)
+ 		return(NULL);
+ 	pos += sprintf(&encode[pos],
+ 			"Content-Type: application/octet-stream; name=\"%s\"", fname);
+ 	pos += sprintf(&encode[pos], crlf);
+ 	pos += sprintf(&encode[pos], "Content-Transfer-Encoding: X-uuencode");
+ 	pos += sprintf(&encode[pos], "%s%s", crlf, crlf);
+ 	pos += sprintf(&encode[pos], "begin 644 %s%s", fname, crlf);
+ 
+ 	while (len > 0)
+ 	{
+ 		if ((i % 15) == 0)
+ 		{
+ 			if (len > 45)
+ 				encode[pos++] = szUUencode[45];
+ 			else
+ 				encode[pos++] = szUUencode[len];
+ 		}
+ 		no  = ((DWORD)p[(i * 3) + 0] << 16) & 0x00ff0000;
+ 		if (len > 1)
+ 			no |= ((DWORD)p[(i * 3) + 1] <<  8) & 0x0000ff00;
+ 		if (len > 2)
+ 			no |= ((DWORD)p[(i * 3) + 2] <<  0) & 0x000000ff;
+ 		encode[pos++] = szUUencode[((no & 0x00fc0000) >> 18)];
+ 		encode[pos++] = szUUencode[((no & 0x0003f000) >> 12)];
+ 		if (len > 1)
+ 			encode[pos++] = szUUencode[((no & 0x00000fc0) >>  6)];
+ 		if (len > 2)
+ 			encode[pos++] = szUUencode[  no & 0x0000003f];
+ 		if (((i != 0) && ((i % 15) == 14)) || len <= 3)
+ 			pos += sprintf(&encode[pos], "%s", crlf);
+ 		i++;
+ 		len -= 3;
+ 	}
+ 	encode[pos++] = szUUencode[0];
+ 	sprintf(&encode[pos], "%send", crlf);
+ 	return(encode);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	base 64 decode routine
+  *----------------------------------------------------------------------------*/
+ static BOOL
+ b64dc(oflg, fp, line1, line2, mime)
+ BOOL			oflg;
+ FILE		*	fp;
+ linenr_t	*	line1;
+ linenr_t	*	line2;
+ int				mime;
+ {
+ 	static char	szB64decode[] = {
+ 	 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 	 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 	 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
+ 	 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, 64, -1, -1,
+ 	 -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
+ 	 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
+ 	 -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 	 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1,
+ 	 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 	 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 	 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 	 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 	 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 	 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 	 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 	 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, };
+ 	linenr_t 			lnum;
+ 	int					fill;
+ 	int					len;
+ 	int					i;
+ 	int					j;
+ 	int					bytes;
+ 	unsigned char		decode[3];
+ 	unsigned char		work[4];
+ 
+ 	if (mime != (-1))
+ 	{
+ 		unsigned char	*p;
+ 		unsigned char	*s;
+ 		unsigned char	*e;
+ 
+ 		p = ml_get_buf(curbuf, *line1, FALSE);
+ 		s = strstr(p, "=?");
+ 		e = strstr(p, "?=");
+ 		for (; p < s; p++)
+ 			fputc(*p, fp);
+ 		for (p = s + strlen(mime_type[mime]); p < e; p += 4)
+ 		{
+ 			work[0] = szB64decode[p[0]];
+ 			work[1] = szB64decode[p[1]];
+ 			work[2] = szB64decode[p[2]];
+ 			work[3] = szB64decode[p[3]];
+ 			decode[0] = work[0] << 2 | work[1] >> 4;
+ 			decode[1] = work[1] << 4 | work[2] >> 2;
+ 			decode[2] = work[2] << 6 | work[3];
+ 			bytes = (p[3] == '=') ? (p[2] == '=' ? 1 : 2) : 3;
+ 			for (j = 0; j < bytes; j++)
+ 				fputc(decode[j], fp);
+ 			if (bytes != 3)
+ 				break;
+ 		}
+ 		for (p = e + 2; *p; p++)
+ 			fputc(*p, fp);
+ 		return(TRUE);
+ 	}
+ 	for (lnum = *line1; lnum <= *line2; ++lnum)
+ 	{
+ 		int last_data = 0;
+ 		unsigned char *p;
+ 
+ 		if (lnum > curbuf->b_ml.ml_line_count)
+ 		{
+ 			if (!oflg)
+ 			{
+ 				emsg("Short file");
+ 				wait_return(FALSE);
+ 			}
+ 			return(FALSE);
+ 		}
+ 		p = ml_get_buf(curbuf, lnum, FALSE);
+ 
+ 		if (*p == '\0')
+ 			break;
+ 		if (boundary[0] != '\0' && strstr(p, boundary) != NULL)
+ 		{
+ 			lnum--;
+ 			break;
+ 		}
+ 
+ 		p = ml_get_buf(curbuf, lnum, FALSE);
+ 		len = strlen(p);
+ 		if (lnum == *line1)
+ 			fill = len;
+ 		if (((len % 4) != 0) || (memcmp(p, "====", 4) == 0))
+ 			break;
+ 
+ 		for (i = 0; i < len; i += 4)
+ 		{
+ 			work[0] = szB64decode[p[i + 0]];
+ 			work[1] = szB64decode[p[i + 1]];
+ 			work[2] = szB64decode[p[i + 2]];
+ 			work[3] = szB64decode[p[i + 3]];
+ 			decode[0] = work[0] << 2 | work[1] >> 4;
+ 			decode[1] = work[1] << 4 | work[2] >> 2;
+ 			decode[2] = work[2] << 6 | work[3];
+ 			bytes = (p[i + 3] == '=') ? (p[i + 2] == '=' ? 1 : 2) : 3;
+ 			for (j = 0; j < bytes; j++)
+ 				fputc(decode[j], fp);
+ 			if (bytes != 3)
+ 			{
+ 				last_data = 1;
+ 				break;
+ 			}
+ 		}
+ 		if ((last_data != 0) || (len < fill))
+ 			break;
+ 	}
+ 	if (lnum <= *line2)
+ 		*line2 = lnum;
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	base 64 encode routine
+  *----------------------------------------------------------------------------*/
+ static char *
+ b64ec(fname, crlf, ptr, len)
+ char		*	fname;
+ char		*	crlf;
+ unsigned char *	ptr;
+ long			len;
+ {
+ 	static char	szB64encode[] =
+ 		"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+ 	DWORD			no;
+ 	INT				loop;
+ 	INT				mod;
+ 	INT				i;
+ 	INT				pos = 0;
+ 	BYTE		*	encode;
+ 	BYTE		*	p = ptr;
+ 	int				size = 0;
+ 
+ 	size = ((len + 2) / 3) * 4 + 1;
+ 	size += ((size / 72) + 1) * 2;
+ 	size += strlen("Content-Type: application/octet-stream; name=\"\"");
+ 	size += strlen(fname);
+ 	size += strlen(crlf);
+ 	size += strlen("Content-Transfer-Encoding: base64");
+ 	size += strlen(crlf) * 2;
+ 	if ((encode = (BYTE *)malloc(size + 16)) == NULL)
+ 		return(NULL);
+ 	pos += sprintf(&encode[pos],
+ 			"Content-Type: application/octet-stream; name=\"%s\"", fname);
+ 	pos += sprintf(&encode[pos], crlf);
+ 	pos += sprintf(&encode[pos], "Content-Transfer-Encoding: base64");
+ 	pos += sprintf(&encode[pos], "%s%s", crlf, crlf);
+ 
+ 	loop = len / 3;
+ 	mod  = len % 3;
+ 	for (i = 0; i < loop; i++, pos += 4)
+ 	{
+ 		no  = ((DWORD)p[(i * 3) + 0] << 16) & 0x00ff0000;
+ 		no |= ((DWORD)p[(i * 3) + 1] <<  8) & 0x0000ff00;
+ 		no |= ((DWORD)p[(i * 3) + 2] <<  0) & 0x000000ff;
+ 		encode[pos + 0] = szB64encode[((no & 0x00fc0000) >> 18)];
+ 		encode[pos + 1] = szB64encode[((no & 0x0003f000) >> 12)];
+ 		encode[pos + 2] = szB64encode[((no & 0x00000fc0) >>  6)];
+ 		encode[pos + 3] = szB64encode[  no & 0x0000003f];
+ 		if ((i != 0) && ((i % 18) == 17))
+ 			pos += sprintf(&encode[pos + 4], "%s", crlf);
+ 	}
+ 	switch (mod) {
+ 	case 1:
+ 		no  = ((DWORD)p[(loop * 3) + 0] << 16) & 0x00ff0000;
+ 		encode[pos + 0] = szB64encode[((no & 0x00fc0000) >> 18)];
+ 		encode[pos + 1] = szB64encode[((no & 0x0003f000) >> 12)];
+ 		encode[pos + 2] = '=';
+ 		encode[pos + 3] = '=';
+ 		sprintf(&encode[pos + 4], "%s", crlf);
+ 		break;
+ 	case 2:
+ 		no  = ((DWORD)p[(loop * 3) + 0] << 16) & 0x00ff0000;
+ 		no |= ((DWORD)p[(loop * 3) + 1] <<  8) & 0x0000ff00;
+ 		encode[pos + 0] = szB64encode[((no & 0x00fc0000) >> 18)];
+ 		encode[pos + 1] = szB64encode[((no & 0x0003f000) >> 12)];
+ 		encode[pos + 2] = szB64encode[((no & 0x00000fc0) >>  6)];
+ 		encode[pos + 3] = '=';
+ 		sprintf(&encode[pos + 4], "%s", crlf);
+ 		break;
+ 	default:
+ 		sprintf(&encode[pos], "%s", crlf);
+ 		break;
+ 	}
+ 	return(encode);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	quoted printable decode routine
+  *----------------------------------------------------------------------------*/
+ static BOOL
+ qprint(fp, line1, line2)
+ FILE		*	fp;
+ linenr_t	*	line1;
+ linenr_t	*	line2;
+ {
+ 	linenr_t 		lnum;
+ 	BOOL			crlf;
+ 
+ 	for (lnum = *line1; lnum <= *line2; ++lnum)
+ 	{
+ 		unsigned char *p;
+ 
+ 		if (lnum > curbuf->b_ml.ml_line_count)
+ 		{
+ 			emsg("Short file");
+ 			wait_return(FALSE);
+ 			return(FALSE);
+ 		}
+ 		p = ml_get_buf(curbuf, lnum, FALSE);
+ 
+ 		if (boundary[0] != '\0' && strstr(p, boundary) != NULL)
+ 		{
+ 			lnum--;
+ 			break;
+ 		}
+ 
+ 		crlf = TRUE;
+ 		while (*p != '\0')
+ 		{
+ 			char c1, c2;
+ 
+ 			if (*p == '=')
+ 			{
+ 				if (isxdigit(p[1]) && isxdigit(p[2]))
+ 				{
+ 					c1 = isdigit(p[1]) ? p[1] - '0' : tolower(p[1]) - 'a' + 10;
+ 					c2 = isdigit(p[2]) ? p[2] - '0' : tolower(p[2]) - 'a' + 10;
+ 					fputc(c1 << 4 | c2, fp);
+ 					p += 3;
+ 				}
+ 				else if (p[1] == '\0')
+ 				{
+ 					crlf = FALSE;
+ 					p++;
+ 				}
+ 				else
+ 					fputc(*p++, fp);
+ 			}
+ 			else
+ 				fputc(*p++, fp);
+ 		}
+ 		if (crlf)
+ 		{
+ 			fputc('\r', fp);
+ 			fputc('\n', fp);
+ 		}
+ 	}
+ 	if (lnum <= *line2)
+ 		*line2 = lnum;
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	uuencode + gzip file decode routine
+  *----------------------------------------------------------------------------*/
+ static BOOL
+ decode_part(oflg, line1, line2, linecount, complete) 
+ BOOL			oflg;
+ linenr_t	*	line1;
+ linenr_t	*	line2;
+ linenr_t 	*	linecount;
+ BOOL			complete;
+ {
+ 	linenr_t 		lnum;
+ 	int				n;
+ 	char		*	p;
+ 	char			temp[MAX_PATH];
+ 	int				encode = 0;
+ 	FILE		*	fp;
+ 	BOOL			output = FALSE;
+ 	int				mime = -1;
+ #ifdef USE_EXFILE
+ 	char			multi[MAX_PATH];
+ 	BOOL			compress = FALSE;
+ #endif
+ 
+ 	memset(IObuff, '\0', IOSIZE);
+ 	temp[0] = '\0';
+ 	if ((p = getenv("TMP")) == NULL)
+ 		p = getenv("TEMP");
+ 	if (p != NULL)
+ 	{
+ 		strcpy(temp, p);
+ 		n = strlen(temp) - 1;
+ 		if (temp[n] == '\\' || temp[n] == '/')
+ 			;
+ 		else
+ 			strcat(temp, "\\");
+ 	}
+ 	strcat(temp, "efXXXXXX");
+ #ifdef USE_EXFILE
+ 	strcpy(multi, temp);
+ 	if (mktemp(multi) == NULL)
+ 	{
+ 		if (!oflg)
+ 		{
+ 			emsg("temporary name make error.");
+ 			wait_return(FALSE);
+ 		}
+ 		return(FALSE);
+ 	}
+ #endif
+ 	if (mktemp(temp) == NULL)
+ 	{
+ 		if (!oflg)
+ 		{
+ 			emsg("temporary name make error.");
+ 			wait_return(FALSE);
+ 		}
+ 		return(FALSE);
+ 	}
+ 	if (strchr(p_dc, 'a'))
+ 	{
+ 		for (lnum = *line1; lnum <= *line2; ++lnum)
+ 		{
+ 			p = ml_get_buf(curbuf, lnum, FALSE);
+ 			if (strstr(p, "=?") && strstr(p, "?="))
+ 			{
+ 				int			i;
+ 
+ 				for (i = 0; mime_type[i] != NULL; i++)
+ 				{
+ 					if (vim_strnicmp(mime_type[i], strstr(p, "=?"),
+ 													strlen(mime_type[i])) == 0)
+ 					{
+ 						mime = i;
+ 						encode = BASE64;
+ 						*line1 = *line2 = lnum;
+ 						break;
+ 					}
+ 				}
+ 				if (mime != (-1))
+ 					break;
+ 			}
+ 			else if (strncmp(p, "begin", 5) == 0)
+ 			{
+ 				int			mode;
+ 
+ 				if (sscanf(p, "begin-base64 %o %s", &mode, IObuff) == 2)
+ 				{
+ 					encode = BASE64;
+ 					*line1 = lnum + 1;
+ 					break;
+ 				}
+ 				else if (sscanf(p, "begin %o %s", &mode, IObuff) == 2)
+ 				{
+ 					encode = UUENCODE;
+ 					*line1 = lnum + 1;
+ 					break;
+ 				}
+ 			}
+ 			else if (strncmp(p, "Content-", 8) == 0)
+ 			{
+ 				for (; lnum <= *line2; ++lnum)
+ 				{
+ 					p = ml_get_buf(curbuf, lnum, FALSE);
+ 					if (*p == '\0')
+ 					{
+ 						if (encode == 0 || encode == UUENCODE)
+ 							;
+ 						else
+ 						{
+ 							*line1 = lnum + 1;
+ 							for (; lnum <= *line2; ++lnum)
+ 							{
+ 								p = ml_get_buf(curbuf, lnum, FALSE);
+ 								if (*p != '\0')
+ 								{
+ 									*line1 = lnum;
+ 									break;
+ 								}
+ 							}
+ 							break;
+ 						}
+ 					}
+ 					else if (encode == 0 && strstr(p, "=?") && strstr(p, "?="))
+ 					{
+ 						int			i;
+ 
+ 						for (i = 0; mime_type[i] != NULL; i++)
+ 						{
+ 							if (vim_strnicmp(mime_type[i], strstr(p, "=?"),
+ 													strlen(mime_type[i])) == 0)
+ 							{
+ 								mime = i;
+ 								encode = BASE64;
+ 								*line1 = *line2 = lnum;
+ 								break;
+ 							}
+ 						}
+ 						if (mime != (-1))
+ 							break;
+ 					}
+ 					else if (encode == UUENCODE && strncmp(p, "begin", 5) == 0)
+ 					{
+ 						int			mode;
+ 
+ 						if (sscanf(p, "begin %o %s", &mode, IObuff) == 2)
+ 						{
+ 							*line1 = lnum + 1;
+ 							break;
+ 						}
+ 					}
+ 					else if (strncmp(p, "Content-Transfer-Encoding:", 26) == 0)
+ 					{
+ 						if (stricmp(&p[strlen(p) - 6], "base64") == 0)
+ 							encode = BASE64;
+ 						else if (stricmp(&p[strlen(p) - 10], "X-uuencode") == 0)
+ 							encode = UUENCODE;
+ 						else if (stricmp(&p[strlen(p) - 16], "quoted-printable") == 0)
+ 							encode = QPRINT;
+ 					}
+ 					else if (strstr(p, "multipart") && strstr(p, "boundary="))
+ 						strncpy(boundary, strstr(p, "boundary=") + 10,
+ 										strlen(strstr(p, "boundary=")) - 11);
+ 					else if ((*p == ' ' || *p == '\t') && strstr(p, "boundary="))
+ 						strncpy(boundary, strstr(p, "boundary=") + 10,
+ 										strlen(strstr(p, "boundary=")) - 11);
+ 					else if (IObuff[0] == '\0')
+ 					{
+ 						if (sscanf(p, "\tname=\"%s", IObuff) == 1)
+ 							IObuff[strlen(IObuff) - 1] = '\0';
+ 						else if (sscanf(p, "\tfilename=\"%s", IObuff) == 1)
+ 							IObuff[strlen(IObuff) - 1] = '\0';
+ 						else if (sscanf(p, "Content-Disposition: attachment; filename=\"%s", IObuff) == 1)
+ 							IObuff[strlen(IObuff) - 1] = '\0';
+ 						else if (sscanf(p, "Content-Type: application/octet-stream; name=\"%s", IObuff) == 1)
+ 							IObuff[strlen(IObuff) - 1] = '\0';
+ 					}
+ 				}
+ 				if (lnum > *line2)
+ 					encode = 0;
+ 				break;
+ 			}
+ 		}
+ #ifdef USE_EXFILE
+ 		{
+ 			static char	*	ext[]	= {".lzh", ".gz", ".tar", ".taZ", ".taz", ".tar.gz", "tar.Z", ".tar.bz2", ".bz2", ".cab", ".zip", NULL};
+ 			const char	*	p;
+ 			char		**	ep		= ext;
+ 
+ 			while (*ep && compress == FALSE)
+ 			{
+ 				p = IObuff + 1;
+ 				while (*p)
+ 				{
+ 					if ((strlen(p) >= strlen(*ep))
+ 							&& strnicmp(p, *ep, strlen(*ep)) == 0
+ 							&& p[strlen(*ep)] == '\0')
+ 					{
+ 						compress = TRUE;
+ 						strcat(temp, *ep);
+ 						break;
+ 					}
+ 					p++;
+ 				}
+ 				ep++;
+ 			}
+ 		}
+ #endif
+ 	}
+ 	else
+ 	{
+ 		p = p_dc;
+ 		while (*p)
+ 		{
+ 			switch (*p) {
+ 			case 'b':
+ 				encode = BASE64;
+ 				break;
+ #ifdef USE_EXFILE
+ 			case 'g':
+ 				compress = TRUE;
+ 				strcat(temp, ".gz");
+ 				break;
+ 			case 'l':
+ 				compress = TRUE;
+ 				strcat(temp, ".lzh");
+ 				break;
+ 			case 'c':
+ 				compress = TRUE;
+ 				strcat(temp, ".cab");
+ 				break;
+ 			case 'z':
+ 				compress = TRUE;
+ 				strcat(temp, ".zip");
+ 				break;
+ #endif
+ 			case 'u':
+ 				encode = UUENCODE;
+ 				break;
+ 			case 'q':
+ 				encode = QPRINT;
+ 				break;
+ 			case 'r':
+ 				/* auto read */
+ 				break;
+ 			}
+ 			p++;
+ 		}
+ 	}
+ 	if (strchr(p_dc, '+'))
+ 		output = TRUE;
+ 	if (strchr(p_dc, '*'))
+ 	{
+ 		output = TRUE;
+ 		strcat(temp, ".dmp");
+ 	}
+ 	if (complete && encode == 0)
+ 		return(FALSE);
+ 
+ 	if ((fp = fopen(temp, "wb")) == NULL)
+ 	{
+ 		if (!oflg)
+ 		{
+ 			emsg("temporary file open error.");
+ 			wait_return(FALSE);
+ 		}
+ 		return(FALSE);
+ 	}
+ 	switch (encode) {
+ 	case BASE64:
+ 		n = b64dc(oflg, fp, line1, line2, mime);
+ 		break;
+ 	case QPRINT:
+ 		n = qprint(fp, line1, line2);
+ 		break;
+ 	default:
+ 		n = uudc(oflg, fp, line1, line2);
+ 		break;
+ 	}
+ 	fclose(fp);
+ 	if (n != TRUE)
+ 	{
+ 		remove(temp);
+ 		return(FALSE);
+ 	}
+ 	if (output)
+ 		return(TRUE);
+ #ifdef USE_EXFILE
+ 	if (compress)
+ 	{
+ 		char		**	result;
+ 		int				j;
+ 		int				fd;
+ 		int				bfd;
+ 		int				size;
+ 		int				files;
+ 		char			gzip[MAX_PATH];
+ 
+ 		if (is_efarc(temp, '\0'))
+ 		{
+ 			strcpy(gzip, temp);
+ 			strcat(gzip, ":*");
+ 			if ((bfd = open(multi, O_WRONLY | O_CREAT, 0666)) >= 0)
+ 			{
+ 				result = ef_globfilename(gzip, FALSE);
+ 				for (j = 0; result[j] != NULL; j++)
+ 					;
+ 				files = j;
+ 				for (j = 0; result[j] != NULL; j++)
+ 				{
+ 					if ((fd = ef_open(result[j], O_RDONLY)) >= 0)
+ 					{
+ 						if (files > 1)
+ 						{
+ 							sprintf(gzip, "[%d: %s]\r\n",
+ 										j + 1, &result[j][strlen(temp) + 1]);
+ 							write(bfd, gzip, (size_t)strlen(gzip));
+ 						}
+ 						while ((size = read(fd, (char *)IObuff, (size_t)IOSIZE)) > 0)
+ 							write(bfd, (char *)IObuff, (size_t)size);
+ 						ef_close(fd);
+ 					}
+ 					free(result[j]);
+ 				}
+ 				free(result);
+ 				close(bfd);
+ 			}
+ 			else
+ 			{
+ 				remove(temp);
+ 				if (!oflg)
+ 				{
+ 					emsg("temporary file open error.");
+ 					wait_return(FALSE);
+ 				}
+ 				return(FALSE);
+ 			}
+ 			remove(temp);
+ 			strcpy(temp, multi);
+ 		}
+ 	}
+ #endif
+ 
+ 	curwin->w_cursor.lnum = *line1;
+ 	curwin->w_cursor.col = 0;
+ 
+ 	must_redraw = CLEAR;		/* screen has been shifted up one line */
+ 	++no_wait_return;			/* don't call wait_return() while busy */
+ 	windgoto((int)Rows - 1, 0);
+ 	cursor_on();
+ 
+ 	if (!u_save((linenr_t)(*line2), (linenr_t)(*line2 + 1)))
+ 	{
+ 		--no_wait_return;
+ 		if (!oflg)
+ 			wait_return(FALSE);
+ 		return(FALSE);
+ 	}
+ 	n = readfile(temp, NULL, *line2, FALSE, (linenr_t)0, MAXLNUM);
+ 	remove(temp);
+ 	if (n == FAIL)
+ 	{
+ 		outchar('\n');
+ 		if (!oflg)
+ 			emsg2(e_notread, temp);
+ 		--no_wait_return;
+ 		if (!oflg)
+ 			wait_return(FALSE);
+ 		return(FALSE);
+ 	}
+ 	curwin->w_cursor.lnum = *line1;
+ 	*linecount = *line2 - *line1 + 1;
+ 	dellines(*linecount, TRUE, TRUE);
+ 	--no_wait_return;
+ 	updateScreen(CURSUPD);
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	uuencode + gzip file decode routine
+  *----------------------------------------------------------------------------*/
+ void
+ decode(oflg, line1, line2)
+ BOOL			oflg;
+ linenr_t		line1;
+ linenr_t		line2;
+ {
+ 	linenr_t		end;
+ 	linenr_t 		total;
+ 	linenr_t 		linecount;
+ 	linenr_t		filtered = 0;
+ 	linenr_t		already = 0;
+ 	int				change;
+ 	BOOL			complete = FALSE;
+ 
+ 	DoMatome = TRUE;
+ 	memset(boundary, '\0', sizeof(boundary));
+ 	change = curbuf->b_changed;
+ 	total = curbuf->b_ml.ml_line_count;
+ 	end = line2;
+ 	while (decode_part(oflg, &line1, &line2, &linecount, complete))
+ 	{
+ 		complete = TRUE;
+ 		if (!strchr(p_dc, 'a'))
+ 			break;
+ 		if (already < line2)
+ 			filtered += linecount;
+ 		already = line2;
+ #if 0
+ 		line1 = line2 - (total - curbuf->b_ml.ml_line_count);
+ #endif
+ 		line2 = end - (total - curbuf->b_ml.ml_line_count);
+ 		if (line1 > line2)
+ 			break;
+ 		if (line1 > curbuf->b_ml.ml_line_count)
+ 			break;
+ 		end -= total - curbuf->b_ml.ml_line_count;
+ 		total = curbuf->b_ml.ml_line_count;
+ 	}
+ 	curbuf->b_changed = change;
+ 
+ 	if (complete && !oflg)
+ 	{
+ 		updateScreen(CLEAR);		/* do this before messages below */
+ 
+ 		if (filtered > p_report)
+ 			smsg((char_u *)"%ld lines filtered decoding file.",(long)filtered);
+ 	}
+ 	DoMatome = FALSE;
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	base 64 encode routine
+  *----------------------------------------------------------------------------*/
+ char *
+ encode(type, fname, crlf, ptr, len, last)
+ char			type;
+ char		*	fname;
+ int				crlf;
+ unsigned char *	ptr;
+ long		*	len;
+ int				last;
+ {
+ 	static char		*	enc		= NULL;
+ 	static long			enclen	= 0;
+ 	char			*	tmp;
+ 	char				buf[3];
+ 
+ 	if (*len)
+ 	{
+ 		if ((tmp = realloc(enc, enclen + *len)) == NULL)
+ 		{
+ 			if (enc)
+ 				free(enc);
+ 			enc		= NULL;
+ 			enclen	= 0;
+ 			return(NULL);
+ 		}
+ 		enc = tmp;
+ 		memcpy(&enc[enclen], ptr, *len);
+ 		enclen += *len;
+ 	}
+ 	if (last)
+ 	{
+ 		if (crlf == 2)		/* mac */
+ 		{
+ 			buf[0] = CR;
+ 			buf[1] = NUL;
+ 		}
+ 		else if (crlf == 1)	/* dos */
+ 		{
+ 			buf[0] = CR;
+ 			buf[1] = NL;
+ 			buf[2] = NUL;
+ 		}
+ 		else				/* unix */
+ 		{
+ 			buf[0] = NL;
+ 			buf[1] = NUL;
+ 		}
+ 		if (type == 'b')
+ 			tmp = b64ec(fname, buf, enc, enclen);
+ 		else
+ 			tmp = uuec(fname, buf, enc, enclen);
+ 		free(enc);
+ 		enc		= NULL;
+ 		enclen	= 0;
+ 		*len = strlen(tmp);
+ 	}
+ 	return(tmp);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	uuencode + gzip file decode routine
+  *----------------------------------------------------------------------------*/
+ char *
+ decode_ver()
+ {
+ 	static char		ver[1024];
+ 	int				i;
+ 	char		*	p;
+ #define VER_LEFT	12
+ 
+ 	memset(ver, '\0', sizeof(ver));
+ 	for (i = 0; i < VER_LEFT; i++)
+ 		strcat(ver, " ");
+ 	sprintf(&ver[strlen(ver)], "Support MIME Type : ");
+ 	for (i = 0; mime_type[i] != NULL; i++)
+ 	{
+ 		if (i != 0)
+ 			strcat(ver, " / ");
+ 		p = strchr(&mime_type[i][2], '?');
+ 		strncpy(&ver[strlen(ver)], &mime_type[i][2], p - &mime_type[i][2]);
+ 	}
+ 	strcat(ver, "\r\n");
+ 	for (i = 0; i < VER_LEFT; i++)
+ 		strcat(ver, " ");
+ 	sprintf(&ver[strlen(ver)], "Content-Transfer-Encoding : base64\r\n");
+ 	for (i = 0; i < VER_LEFT; i++)
+ 		strcat(ver, " ");
+ 	sprintf(&ver[strlen(ver)], "Content-Transfer-Encoding : X-uuencode\r\n");
+ 	for (i = 0; i < VER_LEFT; i++)
+ 		strcat(ver, " ");
+ 	sprintf(&ver[strlen(ver)], "Content-Transfer-Encoding : quoted-printable\r\n");
+ 	return(ver);
+ }
diff -crN ../orig/src/exfile/tar.c ./src/exfile/tar.c
*** ../orig/src/exfile/tar.c	Thu Jan 01 09:00:00 1970
--- ./src/exfile/tar.c	Sun Sep 19 21:51:46 1999
***************
*** 0 ****
--- 1,1054 ----
+ /*==============================================================================
+  *	Tar/Gzip/Compress file support file
+  *============================================================================*/
+ #include <windows.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <fcntl.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <errno.h>
+ #include <io.h>
+ #include <tar32.h>
+ 
+ #define  __EXFILE__C
+ #include "exfile.h"
+ #include "tar.h"
+ 
+ /*==============================================================================
+  *	Tar file support
+  *============================================================================*/
+ typedef	WORD	(WINAPI *pUntarGetVersion)(VOID);
+ typedef	BOOL	(WINAPI *pUntarCheckArchive)(LPCSTR _szFileName,
+ 						const int _iMode);
+ typedef	HARC	(WINAPI *pUntarOpenArchive)(const HWND _hwnd,
+ 						LPCSTR _szFileName, const DWORD _dwMode);
+ typedef	int		(WINAPI _export *pUntarCloseArchive)(HARC _harc);
+ typedef	int		(WINAPI *pUntar)(const HWND _hwnd, LPCSTR _szCmdLine,
+ 						LPSTR _szOutput, const DWORD _dwSize);
+ typedef	int		(WINAPI *pUntarFindFirst)(HARC _harc, LPCSTR _szWildName,
+ 						INDIVIDUALINFO FAR *lpSubInfo);
+ typedef	int		(WINAPI *pUntarFindNext)(HARC _harc,
+ 						INDIVIDUALINFO FAR *_lpSubInfo);
+ typedef	int		(WINAPI *pUntarExtractMem)(const HWND _hwnd, LPCSTR _szCmdLine,
+ 						LPBYTE _szBuffer, const DWORD _dwSize, time_t *_lpTime,
+ 						LPWORD _lpwAttr, LPDWORD _lpdwWriteSize);
+ typedef	int		(WINAPI *pUntarCompressMem)(const HWND _hwnd, LPCSTR _szCmdLine,
+ 						const LPBYTE _szBuffer, const DWORD _dwSize,
+ 						const time_t *_lpTime, const LPWORD _lpwAttr,
+ 						LPDWORD _lpdwWriteSize);
+ typedef struct readbuf {
+ 	struct readbuf		*	next;
+ 	char				*	fname;
+ } READBUF;
+ 
+ 
+ static	HANDLE				hTarLib				= NULL;
+ static	pUntarGetVersion	pTarGetVersion		= NULL;
+ static	pUntarCheckArchive	pTarCheckArchive	= NULL;
+ static	pUntarOpenArchive	pTarOpenArchive		= NULL;
+ static	pUntarCloseArchive	pTarCloseArchive	= NULL;
+ static	pUntar				pTar				= NULL;
+ static	pUntarFindFirst		pTarFindFirst		= NULL;
+ static	pUntarFindNext		pTarFindNext		= NULL;
+ static	pUntarExtractMem	pTarExtractMem		= NULL;
+ static	pUntarCompressMem	pTarCompressMem		= NULL;
+ 
+ static	INDIVIDUALINFO		SubInfo;
+ static	char				find_fname[MAX_PATH];
+ static	char				find_aname[MAX_PATH];
+ static	READBUF			*	tar_rbuf			= NULL;
+ 
+ static	BOOL				flg_tar_init		= FALSE;
+ static	BOOL				flg_gzip_init		= FALSE;
+ extern	BOOL				ef_dir;
+ 
+ static	char			*	tar_ext[]
+ 		= {".tar", ".taZ", ".tgz", ".tar.gz", ".tar.Z", ".tar.bz2", NULL};
+ static	char			*	gzip_ext[]	= {".gz", ".Z", ".bz2", NULL};
+ 
+ static	HWND				tar_disp;
+ #define LIBNAME				"tar32.dll"
+ #define	CDISP				(16*1024)
+ 
+ /*==============================================================================
+  *	Tar support routine
+  *============================================================================*/
+ /*------------------------------------------------------------------------------
+  *	Common init
+  *----------------------------------------------------------------------------*/
+ static BOOL
+ tgc_init(window)
+ HWND			window;
+ {
+ 	if (hTarLib == NULL)
+ 	{
+ 		tar_disp = window;
+ 		hTarLib = LoadLibrary(LIBNAME);
+ 		if (hTarLib == NULL)
+ 			return(FALSE);
+ 		pTarGetVersion
+ 			= (pUntarGetVersion)GetProcAddress(hTarLib, "TarGetVersion");
+ 		pTarCheckArchive
+ 			= (pUntarCheckArchive)GetProcAddress(hTarLib, "TarCheckArchive");
+ 		pTarOpenArchive
+ 			= (pUntarOpenArchive)GetProcAddress(hTarLib, "TarOpenArchive");
+ 		pTarCloseArchive
+ 			= (pUntarCloseArchive)GetProcAddress(hTarLib, "TarCloseArchive");
+ 		pTar	= (pUntar)GetProcAddress(hTarLib, "Tar");
+ 		pTarFindFirst
+ 			= (pUntarFindFirst)GetProcAddress(hTarLib, "TarFindFirst");
+ 		pTarFindNext
+ 			= (pUntarFindNext)GetProcAddress(hTarLib, "TarFindNext");
+ 		pTarExtractMem
+ 			= (pUntarExtractMem)GetProcAddress(hTarLib, "TarExtractMem");
+ 		pTarCompressMem
+ 			= (pUntarCompressMem)GetProcAddress(hTarLib, "TarCompressMem");
+ 		if (pTarGetVersion && pTarCheckArchive && pTarOpenArchive
+ 						&& pTarCloseArchive && pTar && pTarFindFirst
+ 						&& pTarFindNext && pTarExtractMem && pTarCompressMem)
+ 			;
+ 		else
+ 		{
+ 			FreeLibrary(hTarLib);
+ 			hTarLib = NULL;
+ 			return(FALSE);
+ 		}
+ 		if ((*pTarGetVersion)() < 23)
+ 		{
+ 			FreeLibrary(hTarLib);
+ 			hTarLib = NULL;
+ 			return(FALSE);
+ 		}
+ 	}
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	CHECK Tar file
+  *----------------------------------------------------------------------------*/
+ static BOOL
+ tar_getname(name, sep, aname, fname)
+ const char	*	name;
+ char			sep;
+ char		*	aname;
+ char		*	fname;
+ {
+ 	const char	*	p;
+ 	char		**	ep	= tar_ext;
+ 	char			tar_fname[MAX_PATH];
+ 	char			tar_aname[MAX_PATH];
+ 
+ 	if (hTarLib == NULL)
+ 		return(FALSE);
+ 	if (strlen(name) <= 5)
+ 		return(FALSE);
+ 	if (fname == NULL)
+ 		fname = tar_fname;
+ 	if (aname == NULL)
+ 		aname = tar_aname;
+ 	while (*ep)
+ 	{
+ 		p = name + 1;
+ 		while (*p)
+ 		{
+ 			if ((strlen(p) >= strlen(*ep))
+ 					&& strnicmp(p, *ep, strlen(*ep)) == 0
+ 					&& p[strlen(*ep)] == sep)
+ 			{
+ 				strncpy(aname, name, (p + strlen(*ep)) - name);
+ 				aname[(p + strlen(*ep)) - name] = '\0';
+ 				if (sep != '\0')
+ 				{
+ 					strcpy(fname, p + strlen(*ep) + 1);
+ 					if (strlen(fname) == 0)
+ 						return(FALSE);
+ 					if (ef_getperm(aname) != (-1)
+ 									&& (*pTarCheckArchive)(aname, 1) == FALSE)
+ 						return(FALSE);
+ 				}
+ 				else if ((*pTarCheckArchive)(aname, 1) == FALSE)
+ 					return(FALSE);
+ 				return(TRUE);
+ 			}
+ 			p++;
+ 		}
+ 		ep++;
+ 	}
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	Tar init
+  *----------------------------------------------------------------------------*/
+ BOOL
+ tar_init(window)
+ HWND			window;
+ {
+ 	if (tgc_init(window))
+ 	{
+ 		flg_tar_init = TRUE;
+ 		return(TRUE);
+ 	}
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	Tar term
+  *----------------------------------------------------------------------------*/
+ VOID
+ tar_term()
+ {
+ 	flg_tar_init = FALSE;
+ 	if (flg_tar_init == FALSE && flg_gzip_init == FALSE)
+ 	{
+ 		FreeLibrary(hTarLib);
+ 		hTarLib = NULL;
+ 	}
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	Tar term
+  *----------------------------------------------------------------------------*/
+ char *
+ tar_ver()
+ {
+ 	static char		ver[1024];
+ 	int				i;
+ 
+ 	sprintf(ver, "%s : %d.%d (",
+ 			LIBNAME, (*pTarGetVersion)() / 100, (*pTarGetVersion)() % 100);
+ 	for (i = 0; tar_ext[i] != NULL; i++)
+ 	{
+ 		if (i != 0)
+ 			strcat(ver, "/");
+ 		strcat(ver, tar_ext[i]);
+ 	}
+ 	strcat(ver, ")");
+ 	return(ver);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	CHECK Tar file
+  *----------------------------------------------------------------------------*/
+ BOOL
+ is_tar(fname, sep)
+ const char	*	fname;
+ char			sep;
+ {
+ 	return(tar_getname(fname, sep, NULL, NULL));
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	CHECK Tar file
+  *----------------------------------------------------------------------------*/
+ BOOL
+ tar_sfx(fname)
+ char		*	fname;
+ {
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	open() emulation
+  *----------------------------------------------------------------------------*/
+ BOOL
+ tar_getfile(fname, tmp)
+ const char	*	fname;
+ const char	*	tmp;
+ {
+ 	char				tar_fname[MAX_PATH];
+ 	char				tar_aname[MAX_PATH];
+ 	char				tar_cline[MAX_PATH + 32];
+ 	HANDLE				hFile;
+ 	WIN32_FIND_DATA		data;
+ 	int					fd;
+ 	char			*	p		= NULL;
+ 	char			*	w		= NULL;
+ 	int					i;
+ 
+ 	if (!tar_getname(fname, ':', tar_aname, tar_fname))
+ 		return(FALSE);
+ 	if ((hFile = tar_findfirst(fname, &data)) == INVALID_HANDLE_VALUE)
+ 		return(FALSE);
+ 	tar_findclose(hFile);
+ 	if ((p = malloc(data.nFileSizeLow + 1000)) == NULL)
+ 		return(FALSE);
+ 	sprintf(tar_cline, "--display-dialog=0 -pxvf \"%s\" \"%s\"", tar_aname, tar_fname);
+ 	if ((*pTar)(tar_disp, tar_cline, p, data.nFileSizeLow + 1000) != 0)
+ 	{
+ 		free(p);
+ 		return(FALSE);
+ 	}
+ 	if ((fd = open(tmp, O_WRONLY | O_CREAT | O_BINARY, S_IREAD | S_IWRITE)) < 0)
+ 	{
+ 		free(p);
+ 		return(FALSE);
+ 	}
+ 	w = p;
+ 	for (i = 0; i < 1000; i++)
+ 	{
+ 		if (*w++ == '\n')
+ 			break;
+ 	}
+ 	write(fd, w, data.nFileSizeLow);
+ 	close(fd);
+ 	free(p);
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	close emulation
+  *----------------------------------------------------------------------------*/
+ BOOL
+ tar_putfile(fname, tmp)
+ const char	*	fname;
+ const char	*	tmp;
+ {
+ 	char				tar_fname[MAX_PATH];
+ 	char				tar_aname[MAX_PATH];
+ 	char				tar_cline[MAX_PATH + 32];
+ 	struct stat			st;
+ 	char			*	p		= NULL;
+ 	long 				perm	= -1;
+ 	int					fd;
+ 
+ 	if (!tar_getname(fname, ':', tar_aname, tar_fname))
+ 		return(FALSE);
+ 	if (stat(tmp, &st) != 0)
+ 		goto error;
+ 	if ((p = malloc(st.st_size + 1)) == NULL)
+ 		goto error;
+ 	if ((fd = open(tmp, O_RDONLY, S_IREAD | S_IWRITE)) < 0)
+ 		goto error;
+ 	if (st.st_size)
+ 		read(fd, p, st.st_size);
+ 	close(fd);
+ 	sprintf(tar_cline, "-d1 -gm %s \"%s\" \"%s\"",
+ 				st.st_size < CDISP || !tar_disp ? "-n -gp0" : "", tar_aname, tar_fname);
+ 	perm = ef_getperm(tar_aname);
+ 	if (perm > 0)
+ 		chmod(tar_aname, S_IREAD|S_IWRITE);
+ 	if ((*pTarCompressMem)(tar_disp, tar_cline, p, st.st_size,
+ 												NULL, NULL, NULL) != 0)
+ 		goto error;
+ 	if (perm > 0)
+ 		chmod(tar_aname, perm);
+ 	return(TRUE);
+ error:
+ 	if (p != NULL)
+ 		free(p);
+ 	if (perm > 0)
+ 		chmod(tar_aname, perm);
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	unlink()/remove() emulation
+  *----------------------------------------------------------------------------*/
+ int
+ tar_remove(fname)
+ const char	*	fname;
+ {
+ 	char				tar_fname[MAX_PATH];
+ 	char				tar_aname[MAX_PATH];
+ 	char				tar_cline[MAX_PATH + 32];
+ 	HANDLE				hFile;
+ 	WIN32_FIND_DATA		data;
+ 	long 				perm;
+ 
+ 	if ((hFile = tar_findfirst(fname, &data)) == INVALID_HANDLE_VALUE)
+ 		return(-1);
+ 	tar_findclose(hFile);
+ 	tar_getname(fname, ':', tar_aname, tar_fname);
+ 	if ((perm = ef_getperm(tar_aname)) == (-1))
+ 		return(-1);
+ 	chmod(tar_aname, S_IREAD|S_IWRITE);
+ 	sprintf(tar_cline, "d -d1 -n -gp0 -gm \"%s\" \"%s\"", tar_aname, tar_fname);
+ 	(*pTar)(tar_disp, tar_cline, NULL, 0);
+ 	chmod(tar_aname, perm);
+ 	return(0);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	chmod() emulation
+  *----------------------------------------------------------------------------*/
+ int
+ tar_chmod(name, perm)
+ const char	*	name;
+ int				perm;
+ {
+ 	return(0);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	fullpath() emulation
+  *----------------------------------------------------------------------------*/
+ char *
+ tar_fullpath(buf, fname, len)
+ char		*	buf;
+ char		*	fname;
+ int				len;
+ {
+ 	char				tar_fname[MAX_PATH];
+ 	char				tar_aname[MAX_PATH];
+ 
+ 	if (!tar_getname(fname, ':', tar_aname, tar_fname))
+ 		return(NULL);
+ 	if (_fullpath(buf, tar_aname, len - strlen(tar_fname)) == NULL)
+ 		return(NULL);
+ 	strcat(buf, ":");
+ 	strcat(buf, tar_fname);
+ 	return(buf);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	getfullpathname() emulation
+  *----------------------------------------------------------------------------*/
+ DWORD
+ tar_getfullpathname(lpszFile, cchPath, lpszPath, ppszFilePart)
+ LPCTSTR			lpszFile;
+ DWORD			cchPath;
+ LPTSTR			lpszPath;
+ LPTSTR		*	ppszFilePart;
+ {
+ 	char				tar_fname[MAX_PATH];
+ 	char				tar_aname[MAX_PATH];
+ 	char			*	p;
+ 
+ 	if (!tar_getname(lpszFile, ':', tar_aname, tar_fname))
+ 		return(0);
+ 	if (GetFullPathName(tar_aname, cchPath, lpszPath, ppszFilePart) == 0)
+ 		return(0);
+ 	if ((strlen(tar_fname) + strlen(lpszPath) + 1) > cchPath)
+ 		return(0);
+ 	strcat(lpszPath, ":");
+ 	*ppszFilePart = lpszPath + strlen(lpszPath);
+ 	if (ef_dir)
+ 	{
+ 		if ((p = strrchr(tar_fname, '/')) != NULL)
+ 			*ppszFilePart += p - tar_fname + 1;
+ 	}
+ 	strcat(lpszPath, tar_fname);
+ 	return(strlen(lpszPath));
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	findnext() emulation
+  *----------------------------------------------------------------------------*/
+ int
+ tar_findnext(harc, data)
+ HANDLE			harc;
+ WIN32_FIND_DATA	* 	data;
+ {
+ 	int				pos;
+ 	int				n;
+ 	char		*	p;
+ 	READBUF		*	rbuf;
+ 	READBUF		**	brbuf;
+ 
+ retry:
+ 	if ((*pTarFindNext)((HARC)harc, &SubInfo) == 0)
+ 	{
+ 		if (!ef_dir)
+ 		{
+ 			if (SubInfo.szFileName[strlen(SubInfo.szFileName) - 1] == '/')
+ 				goto retry;
+ 			memset(data->cFileName, '\0', sizeof(data->cFileName));
+ 			strcpy(data->cFileName, SubInfo.szFileName);
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
+ 			if (strchr(SubInfo.szAttribute, 'R') != NULL)
+ 				data->dwFileAttributes = FILE_ATTRIBUTE_READONLY;
+ 			data->nFileSizeHigh = 0;
+ 			data->nFileSizeLow  = SubInfo.dwOriginalSize;
+ 			return(TRUE);
+ 		}
+ 		if ((p = strrchr(find_fname, '/')) != NULL)
+ 		{
+ 			if (strnicmp(find_fname, SubInfo.szFileName, p - find_fname + 1) != 0)
+ 				goto retry;
+ 			if ((strchr(find_fname, '*')) == NULL)
+ 			{
+ 				if (strnicmp(find_fname, SubInfo.szFileName, strlen(find_fname)) != 0)
+ 					goto retry;
+ 				if (SubInfo.szFileName[strlen(find_fname)] == '/'
+ 						|| SubInfo.szFileName[strlen(find_fname)] == '\0')
+ 					;
+ 				else
+ 					goto retry;
+ 			}
+ 		}
+ 		else
+ 		{
+ 			if (find_fname[0] != '/' && SubInfo.szFileName[0] == '/')
+ 				goto retry;
+ 			if ((strchr(find_fname, '*')) == NULL)
+ 			{
+ 				if (strnicmp(find_fname, SubInfo.szFileName, strlen(find_fname)) != 0)
+ 					goto retry;
+ 				if (SubInfo.szFileName[strlen(find_fname)] == '/'
+ 						|| SubInfo.szFileName[strlen(find_fname)] == '\0')
+ 					;
+ 				else
+ 					goto retry;
+ 			}
+ 		}
+ 		pos = 0;
+ 		data->nFileSizeHigh = 0;
+ 		data->nFileSizeLow  = SubInfo.dwOriginalSize;
+ 		data->dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
+ 		if (strchr(SubInfo.szAttribute, 'R') != NULL)
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_READONLY;
+ 		if (p != NULL)
+ 			pos = p - find_fname + 1;
+ 		n = strlen(&SubInfo.szFileName[pos]);
+ 		if ((p = strchr(&SubInfo.szFileName[pos], '/')) != NULL)
+ 		{
+ 			if (pos == 0 && p == SubInfo.szFileName)
+ 				n = 1;
+ 			else
+ 				n = p - &SubInfo.szFileName[pos];
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
+ 		}
+ 		memset(data->cFileName, '\0', sizeof(data->cFileName));
+ 		strncpy(data->cFileName, &SubInfo.szFileName[pos], n);
+ 		rbuf = tar_rbuf;
+ 		while (rbuf)
+ 		{
+ 			if (stricmp(rbuf->fname, data->cFileName) == 0)
+ 				goto retry;
+ 			if (rbuf->next == NULL)
+ 				break;
+ 			rbuf = rbuf->next;
+ 		}
+ 		if (rbuf == NULL)
+ 		{
+ 			if ((tar_rbuf = malloc(sizeof(READBUF))) == NULL)
+ 				return(FALSE);
+ 			brbuf = &tar_rbuf;
+ 			rbuf = tar_rbuf;
+ 		}
+ 		else
+ 		{
+ 			if ((rbuf->next = malloc(sizeof(READBUF))) == NULL)
+ 				return(FALSE);
+ 			brbuf = &rbuf->next;
+ 			rbuf = rbuf->next;
+ 		}
+ 		rbuf->next = NULL;
+ 		if ((rbuf->fname = malloc(strlen(data->cFileName) + 1)) == NULL)
+ 		{
+ 			*brbuf = NULL;
+ 			free(rbuf);
+ 			return(FALSE);
+ 		}
+ 		strcpy(rbuf->fname, data->cFileName);
+ 		return(TRUE);
+ 	}
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	findfirst() emulation
+  *----------------------------------------------------------------------------*/
+ HANDLE
+ tar_findfirst(name, data)
+ const char		*	name;
+ WIN32_FIND_DATA	* 	data;
+ {
+ 	HARC			hArc;
+ 	int				pos;
+ 	int				n;
+ 	char		*	p;
+ 
+ 	if (!tar_getname(name, ':', find_aname, find_fname))
+ 		return(INVALID_HANDLE_VALUE);
+ 	tar_rbuf = NULL;
+ 	if ((*pTarCheckArchive)(find_aname, 1) == FALSE)
+ 		return(INVALID_HANDLE_VALUE);
+ 	if ((hArc = (*pTarOpenArchive)(tar_disp, find_aname, M_INIT_FILE_USE)) == NULL)
+ 		return(INVALID_HANDLE_VALUE);
+ 	if ((*pTarFindFirst)(hArc, "*.*", &SubInfo) == 0)
+ 	{
+ 		if (!ef_dir)
+ 		{
+ 			if (SubInfo.szFileName[strlen(SubInfo.szFileName) - 1] == '/')
+ 			{
+ 				if (tar_findnext((HANDLE)hArc, data))
+ 					return((HANDLE)hArc);
+ 				(*pTarCloseArchive)(hArc);
+ 				return(INVALID_HANDLE_VALUE);
+ 			}
+ 			memset(data->cFileName, '\0', sizeof(data->cFileName));
+ 			strcpy(data->cFileName, SubInfo.szFileName);
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
+ 			if (strchr(SubInfo.szAttribute, 'R') != NULL)
+ 				data->dwFileAttributes = FILE_ATTRIBUTE_READONLY;
+ 			data->nFileSizeHigh = 0;
+ 			data->nFileSizeLow  = SubInfo.dwOriginalSize;
+ 			return((HANDLE)hArc);
+ 		}
+ 		if ((p = strrchr(find_fname, '/')) != NULL)
+ 		{
+ 			if (SubInfo.szFileName[p - find_fname + 1] == '\0')
+ 			{
+ 				if (tar_findnext((HANDLE)hArc, data))
+ 					return((HANDLE)hArc);
+ 				(*pTarCloseArchive)(hArc);
+ 				return(INVALID_HANDLE_VALUE);
+ 			}
+ 			if (strnicmp(find_fname, SubInfo.szFileName, p - find_fname + 1) != 0)
+ 			{
+ 				if (tar_findnext((HANDLE)hArc, data))
+ 					return((HANDLE)hArc);
+ 				(*pTarCloseArchive)(hArc);
+ 				return(INVALID_HANDLE_VALUE);
+ 			}
+ 			if ((strchr(find_fname, '*')) == NULL)
+ 			{
+ 				if (strnicmp(find_fname, SubInfo.szFileName, strlen(find_fname)) != 0)
+ 				{
+ 					if (tar_findnext((HANDLE)hArc, data))
+ 						return((HANDLE)hArc);
+ 					(*pTarCloseArchive)(hArc);
+ 					return(INVALID_HANDLE_VALUE);
+ 				}
+ 				if (SubInfo.szFileName[strlen(find_fname)] == '/'
+ 						|| SubInfo.szFileName[strlen(find_fname)] == '\0')
+ 					;
+ 				else
+ 				{
+ 					if (tar_findnext((HANDLE)hArc, data))
+ 						return((HANDLE)hArc);
+ 					(*pTarCloseArchive)(hArc);
+ 					return(INVALID_HANDLE_VALUE);
+ 				}
+ 			}
+ 		}
+ 		else
+ 		{
+ 			if (find_fname[0] != '/' && SubInfo.szFileName[0] == '/')
+ 			{
+ 				if (tar_findnext((HANDLE)hArc, data))
+ 					return((HANDLE)hArc);
+ 				(*pTarCloseArchive)(hArc);
+ 				return(INVALID_HANDLE_VALUE);
+ 			}
+ 			if ((strchr(find_fname, '*')) == NULL)
+ 			{
+ 				if (strnicmp(find_fname, SubInfo.szFileName, strlen(find_fname)) != 0)
+ 				{
+ 					if (tar_findnext((HANDLE)hArc, data))
+ 						return((HANDLE)hArc);
+ 					(*pTarCloseArchive)(hArc);
+ 					return(INVALID_HANDLE_VALUE);
+ 				}
+ 				if (SubInfo.szFileName[strlen(find_fname)] == '/'
+ 						|| SubInfo.szFileName[strlen(find_fname)] == '\0')
+ 					;
+ 				else
+ 				{
+ 					if (tar_findnext((HANDLE)hArc, data))
+ 						return((HANDLE)hArc);
+ 					(*pTarCloseArchive)(hArc);
+ 					return(INVALID_HANDLE_VALUE);
+ 				}
+ 			}
+ 		}
+ 		pos = 0;
+ 		data->nFileSizeHigh = 0;
+ 		data->nFileSizeLow  = SubInfo.dwOriginalSize;
+ 		data->dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
+ 		if (strchr(SubInfo.szAttribute, 'R') != NULL)
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_READONLY;
+ 		if (p != NULL)
+ 			pos = p - find_fname + 1;
+ 		n = strlen(&SubInfo.szFileName[pos]);
+ 		if ((p = strchr(&SubInfo.szFileName[pos], '/')) != NULL)
+ 		{
+ 			if (pos == 0 && p == SubInfo.szFileName)
+ 				n = 1;
+ 			else
+ 				n = p - &SubInfo.szFileName[pos];
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
+ 		}
+ 		memset(data->cFileName, '\0', sizeof(data->cFileName));
+ 		strncpy(data->cFileName, &SubInfo.szFileName[pos], n);
+ 		if ((tar_rbuf = malloc(sizeof(READBUF))) == NULL)
+ 		{
+ 			(*pTarCloseArchive)(hArc);
+ 			return(INVALID_HANDLE_VALUE);
+ 		}
+ 		tar_rbuf->next = NULL;
+ 		if ((tar_rbuf->fname = malloc(strlen(data->cFileName) + 1)) == NULL)
+ 		{
+ 			free(tar_rbuf);
+ 			tar_rbuf = NULL;
+ 			(*pTarCloseArchive)(hArc);
+ 			return(INVALID_HANDLE_VALUE);
+ 		}
+ 		strcpy(tar_rbuf->fname, data->cFileName);
+ 		return((HANDLE)hArc);
+ 	}
+ 	(*pTarCloseArchive)(hArc);
+ 	return(INVALID_HANDLE_VALUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	findclose() emulation
+  *----------------------------------------------------------------------------*/
+ void
+ tar_findclose(harc)
+ HANDLE			harc;
+ {
+ 	READBUF		*	rbuf;
+ 	READBUF		*	nrbuf;
+ 
+ 	(*pTarCloseArchive)((HARC)harc);
+ 	rbuf = tar_rbuf;
+ 	while (rbuf)
+ 	{
+ 		nrbuf = rbuf->next;
+ 		free(rbuf->fname);
+ 		free(rbuf);
+ 		rbuf = nrbuf;
+ 	}
+ 	tar_rbuf = NULL;
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	getfullpathname() emulation
+  *----------------------------------------------------------------------------*/
+ BOOL
+ tar_breakcheck()
+ {
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	CHECK Gzip file
+  *----------------------------------------------------------------------------*/
+ static BOOL
+ gzip_getname(name, sep, aname)
+ const char	*	name;
+ char			sep;
+ char		*	aname;
+ {
+ 	const char	*	p;
+ 	char		**	ep	= gzip_ext;
+ 	char			gzip_aname[MAX_PATH];
+ 
+ 	if (hTarLib == NULL)
+ 		return(FALSE);
+ 	if (strlen(name) <= 3)
+ 		return(FALSE);
+ 	if (aname == NULL)
+ 		aname = gzip_aname;
+ 	while (*ep)
+ 	{
+ 		p = name + 1;
+ 		while (*p)
+ 		{
+ 			if ((strlen(p) >= strlen(*ep))
+ 					&& strnicmp(p, *ep, strlen(*ep)) == 0
+ 					&& p[strlen(*ep)] == sep)
+ 			{
+ 				strncpy(aname, name, (p + strlen(*ep)) - name);
+ 				aname[(p + strlen(*ep)) - name] = '\0';
+ 				if (sep != '\0')
+ 				{
+ 					if (strlen(p + strlen(*ep) + 1) == 0)
+ 						return(FALSE);
+ 					if (ef_getperm(aname) != (-1)
+ 									&& (*pTarCheckArchive)(aname, 1) == FALSE)
+ 						return(FALSE);
+ 				}
+ 				else if ((*pTarCheckArchive)(aname, 1) == FALSE)
+ 					return(FALSE);
+ 				return(TRUE);
+ 			}
+ 			p++;
+ 		}
+ 		ep++;
+ 	}
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	CHECK Gzip file
+  *----------------------------------------------------------------------------*/
+ static void
+ gzip_makname(name, fname)
+ char		*	name;
+ char		*	fname;
+ {
+ 	char		*	p;
+ 	char		*	wk;
+ 	int				i;
+ 
+ 	if ((wk = malloc(strlen(name) + 1)) != NULL)
+ 	{
+ 		strcpy(wk, name);
+ 		wk = ef_getlongname(wk);
+ 		p = ef_gettail(wk);
+ 		strcpy(fname, p);
+ 		free(wk);
+ 	}
+ 	else
+ 	{
+ 		p = ef_gettail(name);
+ 		strcpy(fname, p);
+ 	}
+ 	for (i = strlen(fname); i >= 0; i--)
+ 	{
+ 		if (fname[i] == '.')		/* delete .gz or .Z */
+ 		{
+ 			fname[i] = '\0';
+ 			break;
+ 		}
+ 	}
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	Gzip init
+  *----------------------------------------------------------------------------*/
+ BOOL
+ gzip_init(window)
+ HWND			window;
+ {
+ 	if (tgc_init(window))
+ 	{
+ 		flg_gzip_init = TRUE;
+ 		return(TRUE);
+ 	}
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	Gzip term
+  *----------------------------------------------------------------------------*/
+ VOID
+ gzip_term()
+ {
+ 	flg_gzip_init = FALSE;
+ 	if (flg_tar_init == FALSE && flg_gzip_init == FALSE)
+ 	{
+ 		FreeLibrary(hTarLib);
+ 		hTarLib = NULL;
+ 	}
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	Gzip term
+  *----------------------------------------------------------------------------*/
+ char *
+ gzip_ver()
+ {
+ 	static char		ver[1024];
+ 	int				i;
+ 
+ 	sprintf(ver, "%s : %d.%d (",
+ 			LIBNAME, (*pTarGetVersion)() / 100, (*pTarGetVersion)() % 100);
+ 	for (i = 0; gzip_ext[i] != NULL; i++)
+ 	{
+ 		if (i != 0)
+ 			strcat(ver, "/");
+ 		strcat(ver, gzip_ext[i]);
+ 	}
+ 	strcat(ver, ")");
+ 	return(ver);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	CHECK Gzip file
+  *----------------------------------------------------------------------------*/
+ BOOL
+ is_gzip(fname, sep)
+ const char	*	fname;
+ char			sep;
+ {
+ 	return(gzip_getname(fname, sep, NULL));
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	CHECK Gzip file
+  *----------------------------------------------------------------------------*/
+ BOOL
+ gzip_sfx(fname)
+ char		*	fname;
+ {
+ 	char				gzip_aname[MAX_PATH];
+ 
+ 	if (gzip_getname(fname, ':', gzip_aname)
+ 			&& strlen(gzip_aname) > 3
+ 			&& stricmp(&gzip_aname[strlen(gzip_aname) - 3], ".gz") == 0)
+ 		return(FALSE);
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	open() emulation
+  *----------------------------------------------------------------------------*/
+ BOOL
+ gzip_getfile(fname, tmp)
+ const char	*	fname;
+ const char	*	tmp;
+ {
+ 	char				gzip_aname[MAX_PATH];
+ 	char				gzip_cline[MAX_PATH + 32];
+ 
+ 	if (!gzip_getname(fname, ':', gzip_aname))
+ 		return(FALSE);
+ 	sprintf(gzip_cline, "--display-dialog=0 -xvfG \"%s\" \"%s\"", gzip_aname, tmp);
+ 	if ((*pTar)(tar_disp, gzip_cline, NULL, 0) != 0)
+ 		return(FALSE);
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	close emulation
+  *----------------------------------------------------------------------------*/
+ BOOL
+ gzip_putfile(fname, tmp)
+ const char	*	fname;
+ const char	*	tmp;
+ {
+ 	char				gzip_aname[MAX_PATH];
+ 	char				gzip_cline[MAX_PATH + 32];
+ 
+ 	if (!gzip_getname(fname, ':', gzip_aname))
+ 		return(FALSE);
+ 	sprintf(gzip_cline, "--display-dialog=0 -cvfGz \"%s\" \"%s\"", gzip_aname, tmp);
+ 	if ((*pTar)(tar_disp, gzip_cline, NULL, 0) != 0)
+ 		return(FALSE);
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	unlink()/remove() emulation
+  *----------------------------------------------------------------------------*/
+ int
+ gzip_remove(fname)
+ const char	*	fname;
+ {
+ 	char				gzip_aname[MAX_PATH];
+ 
+ 	if (!gzip_getname(fname, ':', gzip_aname))
+ 		return(-1);
+ 	chmod(gzip_aname, S_IREAD | S_IWRITE);
+ 	return(unlink(gzip_aname));
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	chmod() emulation
+  *----------------------------------------------------------------------------*/
+ int
+ gzip_chmod(name, perm)
+ const char	*	name;
+ int				perm;
+ {
+ 	char				gzip_aname[MAX_PATH];
+ 
+ 	if (!gzip_getname(name, ':', gzip_aname))
+ 		return(-1);
+ 	return(chmod(gzip_aname, perm));
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	fullpath() emulation
+  *----------------------------------------------------------------------------*/
+ char *
+ gzip_fullpath(buf, fname, len)
+ char		*	buf;
+ char		*	fname;
+ int				len;
+ {
+ 	char				gzip_aname[MAX_PATH];
+ 	char				gzip_fname[MAX_PATH];
+ 
+ 	if (!gzip_getname(fname, ':', gzip_aname))
+ 		return(NULL);
+ 	gzip_makname(gzip_aname, gzip_fname);
+ 	if (_fullpath(buf, gzip_aname, len - strlen(gzip_fname)) == NULL)
+ 		return(NULL);
+ 	strcat(buf, ":");
+ 	strcat(buf, gzip_fname);
+ 	return(buf);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	getfullpathname() emulation
+  *----------------------------------------------------------------------------*/
+ DWORD
+ gzip_getfullpathname(lpszFile, cchPath, lpszPath, ppszFilePart)
+ LPCTSTR			lpszFile;
+ DWORD			cchPath;
+ LPTSTR			lpszPath;
+ LPTSTR		*	ppszFilePart;
+ {
+ 	char				gzip_aname[MAX_PATH];
+ 	char				gzip_fname[MAX_PATH];
+ 
+ 	if (!gzip_getname(lpszFile, ':', gzip_aname))
+ 		return(0);
+ 	gzip_makname(gzip_aname, gzip_fname);
+ 	if (GetFullPathName(gzip_aname, cchPath, lpszPath, ppszFilePart) == 0)
+ 		return(0);
+ 	if ((strlen(gzip_fname) + strlen(lpszPath) + 1) > cchPath)
+ 		return(0);
+ 	strcat(lpszPath, ":");
+ 	*ppszFilePart = lpszPath + strlen(lpszPath);
+ 	strcat(lpszPath, gzip_fname);
+ 	return(strlen(lpszPath));
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	findnext() emulation
+  *----------------------------------------------------------------------------*/
+ int
+ gzip_findnext(harc, data)
+ HANDLE			harc;
+ WIN32_FIND_DATA	* 	data;
+ {
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	findfirst() emulation
+  *----------------------------------------------------------------------------*/
+ HANDLE
+ gzip_findfirst(name, data)
+ const char		*	name;
+ WIN32_FIND_DATA	* 	data;
+ {
+ 	char				gzip_aname[MAX_PATH];
+ 	HANDLE				hFind;
+ 
+ 	if (!gzip_getname(name, ':', gzip_aname))
+ 		return(INVALID_HANDLE_VALUE);
+ 	hFind = FindFirstFile(gzip_aname, data);
+ 	if (hFind == INVALID_HANDLE_VALUE)
+ 		return(INVALID_HANDLE_VALUE);
+ 	FindClose(hFind);
+ 	memset(data->cFileName, '\0', sizeof(data->cFileName));
+ 	gzip_makname(gzip_aname, data->cFileName);
+ 	return(NULL);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	findclose() emulation
+  *----------------------------------------------------------------------------*/
+ void
+ gzip_findclose(harc)
+ HANDLE			harc;
+ {
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	getfullpathname() emulation
+  *----------------------------------------------------------------------------*/
+ BOOL
+ gzip_breakcheck()
+ {
+ 	return(FALSE);
+ }
diff -crN ../orig/src/exfile/tar.h ./src/exfile/tar.h
*** ../orig/src/exfile/tar.h	Thu Jan 01 09:00:00 1970
--- ./src/exfile/tar.h	Sun Sep 19 19:32:14 1999
***************
*** 0 ****
--- 1,37 ----
+ /*******************************************************************************
+  *	LZH file support
+  ******************************************************************************/
+ #include <windows.h>
+ 
+ BOOL		tar_init(HWND);
+ VOID		tar_term(void);
+ char	*	tar_ver(void);
+ BOOL		is_tar(const char *, char);
+ BOOL		tar_sfx(char *);
+ BOOL		tar_getfile(const char *, const char *);
+ BOOL		tar_putfile(const char *, const char *);
+ int			tar_remove(const char *);
+ int			tar_chmod(const char *, int);
+ char	*	tar_fullpath(char *, char *, int);
+ DWORD		tar_getfullpathname(LPCTSTR, DWORD, LPTSTR, LPTSTR *);
+ int			tar_findnext(HANDLE, WIN32_FIND_DATA *);
+ HANDLE		tar_findfirst(const char *, WIN32_FIND_DATA *);
+ void		tar_findclose(HANDLE);
+ BOOL		tar_breakcheck(void);
+ 
+ BOOL		gzip_init(HWND);
+ VOID		gzip_term(void);
+ char	*	gzip_ver(void);
+ char	*	gzip_version(void);
+ BOOL		is_gzip(const char *, char);
+ BOOL		gzip_sfx(char *);
+ BOOL		gzip_getfile(const char *, const char *);
+ BOOL		gzip_putfile(const char *, const char *);
+ int			gzip_remove(const char *);
+ int			gzip_chmod(const char *, int);
+ char	*	gzip_fullpath(char *, char *, int);
+ DWORD		gzip_getfullpathname(LPCTSTR, DWORD, LPTSTR, LPTSTR *);
+ int			gzip_findnext(HANDLE, WIN32_FIND_DATA *);
+ HANDLE		gzip_findfirst(const char *, WIN32_FIND_DATA *);
+ void		gzip_findclose(HANDLE);
+ BOOL		gzip_breakcheck(void);
diff -crN ../orig/src/exfile/zip.c ./src/exfile/zip.c
*** ../orig/src/exfile/zip.c	Thu Jan 01 09:00:00 1970
--- ./src/exfile/zip.c	Sun Sep 19 21:48:40 1999
***************
*** 0 ****
--- 1,705 ----
+ /*==============================================================================
+  *	zip file support file
+  *============================================================================*/
+ #include <windows.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <fcntl.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <errno.h>
+ #include <io.h>
+ #include <unzip32.h>
+ 
+ #define  __EXFILE__C
+ #include "exfile.h"
+ #include "zip.h"
+ 
+ /*==============================================================================
+  *	Zip file support
+  *============================================================================*/
+ typedef	WORD	(WINAPI *pUnZipGetVersion)(VOID);
+ typedef	BOOL	(WINAPI *pUnZipCheckArchive)(LPCSTR _szFileName,
+ 						const int _iMode);
+ typedef	HARC	(WINAPI *pUnZipOpenArchive)(const HWND _hwnd,
+ 						LPCSTR _szFileName, const DWORD _dwMode);
+ typedef	int		(WINAPI _export *pUnZipCloseArchive)(HARC _harc);
+ typedef	int		(WINAPI *pUnZip)(const HWND _hwnd, LPCSTR _szCmdLine,
+ 						LPSTR _szOutput, const DWORD _dwSize);
+ typedef	int		(WINAPI *pUnZipFindFirst)(HARC _harc, LPCSTR _szWildName,
+ 						INDIVIDUALINFO FAR *lpSubInfo);
+ typedef	int		(WINAPI *pUnZipFindNext)(HARC _harc,
+ 						INDIVIDUALINFO FAR *_lpSubInfo);
+ typedef	int		(WINAPI *pUnZipExtractMem)(const HWND _hwnd, LPCSTR _szCmdLine,
+ 						LPBYTE _szBuffer, const DWORD _dwSize, time_t *_lpTime,
+ 						LPWORD _lpwAttr, LPDWORD _lpdwWriteSize);
+ typedef	int		(WINAPI *pUnZipCompressMem)(const HWND _hwnd, LPCSTR _szCmdLine,
+ 						const LPBYTE _szBuffer, const DWORD _dwSize,
+ 						const time_t *_lpTime, const LPWORD _lpwAttr,
+ 						LPDWORD _lpdwWriteSize);
+ typedef struct readbuf {
+ 	struct readbuf		*	next;
+ 	char				*	fname;
+ } READBUF;
+ 
+ 
+ static	HANDLE				hZipLib				= NULL;
+ static	pUnZipGetVersion	pZipGetVersion		= NULL;
+ static	pUnZipCheckArchive	pZipCheckArchive	= NULL;
+ static	pUnZipOpenArchive	pZipOpenArchive		= NULL;
+ static	pUnZipCloseArchive	pZipCloseArchive	= NULL;
+ static	pUnZip				pZip				= NULL;
+ static	pUnZipFindFirst		pZipFindFirst		= NULL;
+ static	pUnZipFindNext		pZipFindNext		= NULL;
+ static	pUnZipExtractMem	pZipExtractMem		= NULL;
+ static	pUnZipCompressMem	pZipCompressMem		= NULL;
+ 
+ static	INDIVIDUALINFO		SubInfo;
+ static	char				find_fname[MAX_PATH];
+ static	char				find_aname[MAX_PATH];
+ static	READBUF			*	zip_rbuf			= NULL;
+ static	char			*	ext[] = {".zip", ".exe", NULL};
+ 
+ extern	BOOL				ef_dir;
+ 
+ static	HWND				zip_disp;
+ #define LIBNAME				"unzip32.dll"
+ #define	EDISP				(128*1024)
+ #define	CDISP				(16*1024)
+ 
+ /*==============================================================================
+  *	Zip support routine
+  *============================================================================*/
+ /*------------------------------------------------------------------------------
+  *	CHECK Zip file
+  *----------------------------------------------------------------------------*/
+ static BOOL
+ zip_getname(name, sep, aname, fname)
+ const char	*	name;
+ char			sep;
+ char		*	aname;
+ char		*	fname;
+ {
+ 	const char	*	p;
+ 	char		**	ep		= ext;
+ 	char			zip_fname[MAX_PATH];
+ 	char			zip_aname[MAX_PATH];
+ 
+ 	if (hZipLib == NULL)
+ 		return(FALSE);
+ 	if (strlen(name) <= 4)
+ 		return(FALSE);
+ 	if (fname == NULL)
+ 		fname = zip_fname;
+ 	if (aname == NULL)
+ 		aname = zip_aname;
+ 	while (*ep)
+ 	{
+ 		p = name + 1;
+ 		while (*p)
+ 		{
+ 			if ((strlen(p) >= strlen(*ep))
+ 					&& strnicmp(p, *ep, strlen(*ep)) == 0
+ 					&& p[strlen(*ep)] == sep)
+ 			{
+ 				strncpy(aname, name, (p + strlen(*ep)) - name);
+ 				aname[(p + strlen(*ep)) - name] = '\0';
+ 				if (sep != '\0')
+ 				{
+ 					strcpy(fname, p + strlen(*ep) + 1);
+ 					if (strlen(fname) == 0)
+ 						return(FALSE);
+ 					if (ef_getperm(aname) != (-1)
+ 									&& (*pZipCheckArchive)(aname, 1) == FALSE)
+ 						return(FALSE);
+ 				}
+ 				else if ((*pZipCheckArchive)(aname, 1) == FALSE)
+ 					return(FALSE);
+ 				return(TRUE);
+ 			}
+ 			p++;
+ 		}
+ 		ep++;
+ 	}
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	Zip init
+  *----------------------------------------------------------------------------*/
+ BOOL
+ zip_init(window)
+ HWND			window;
+ {
+ 	if (hZipLib == NULL)
+ 	{
+ 		zip_disp = window;
+ 		hZipLib = LoadLibrary(LIBNAME);
+ 		if (hZipLib == NULL)
+ 			return(FALSE);
+ 		pZipGetVersion
+ 			= (pUnZipGetVersion)GetProcAddress(hZipLib, "UnZipGetVersion");
+ 		pZipCheckArchive
+ 			= (pUnZipCheckArchive)GetProcAddress(hZipLib, "UnZipCheckArchive");
+ 		pZipOpenArchive
+ 			= (pUnZipOpenArchive)GetProcAddress(hZipLib, "UnZipOpenArchive");
+ 		pZipCloseArchive
+ 			= (pUnZipCloseArchive)GetProcAddress(hZipLib, "UnZipCloseArchive");
+ 		pZip	= (pUnZip)GetProcAddress(hZipLib, "UnZip");
+ 		pZipFindFirst
+ 			= (pUnZipFindFirst)GetProcAddress(hZipLib, "UnZipFindFirst");
+ 		pZipFindNext
+ 			= (pUnZipFindNext)GetProcAddress(hZipLib, "UnZipFindNext");
+ 		pZipExtractMem
+ 			= (pUnZipExtractMem)GetProcAddress(hZipLib, "UnZipExtractMem");
+ 		pZipCompressMem
+ 			= (pUnZipCompressMem)GetProcAddress(hZipLib, "UnZipCompressMem");
+ 		if (pZipGetVersion && pZipCheckArchive && pZipOpenArchive
+ 						&& pZipCloseArchive && pZip && pZipFindFirst
+ 						&& pZipFindNext && pZipExtractMem /*pZipCompressMem */)
+ 			;
+ 		else
+ 		{
+ 			FreeLibrary(hZipLib);
+ 			hZipLib = NULL;
+ 			return(FALSE);
+ 		}
+ 		if ((*pZipGetVersion)() < 540)
+ 		{
+ 			FreeLibrary(hZipLib);
+ 			hZipLib = NULL;
+ 			return(FALSE);
+ 		}
+ 	}
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	Zip term
+  *----------------------------------------------------------------------------*/
+ VOID
+ zip_term()
+ {
+ 	if (hZipLib != NULL)
+ 	{
+ 		FreeLibrary(hZipLib);
+ 		hZipLib = NULL;
+ 	}
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	Zip term
+  *----------------------------------------------------------------------------*/
+ char *
+ zip_ver()
+ {
+ 	static char		ver[1024];
+ 	int				i;
+ 
+ 	sprintf(ver, "%s : %d.%d (",
+ 			LIBNAME, (*pZipGetVersion)() / 100, (*pZipGetVersion)() % 100);
+ 	for (i = 0; ext[i] != NULL; i++)
+ 	{
+ 		if (i != 0)
+ 			strcat(ver, "/");
+ 		strcat(ver, ext[i]);
+ 	}
+ 	strcat(ver, ")");
+ 	return(ver);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	CHECK Zip file
+  *----------------------------------------------------------------------------*/
+ BOOL
+ is_zip(fname, sep)
+ const char	*	fname;
+ char			sep;
+ {
+ 	return(zip_getname(fname, sep, NULL, NULL));
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	CHECK Zip file
+  *----------------------------------------------------------------------------*/
+ BOOL
+ zip_sfx(fname)
+ char		*	fname;
+ {
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	open() emulation
+  *----------------------------------------------------------------------------*/
+ BOOL
+ zip_getfile(fname, tmp)
+ const char	*	fname;
+ const char	*	tmp;
+ {
+ 	char				zip_fname[MAX_PATH];
+ 	char				zip_aname[MAX_PATH];
+ 	char				zip_cline[MAX_PATH + 32];
+ 	HANDLE				hFile;
+ 	WIN32_FIND_DATA		data;
+ 	int					fd;
+ 	char			*	p		= NULL;
+ 
+ 	if (!zip_getname(fname, ':', zip_aname, zip_fname))
+ 		return(FALSE);
+ 	if ((hFile = zip_findfirst(fname, &data)) == INVALID_HANDLE_VALUE)
+ 		return(FALSE);
+ 	zip_findclose(hFile);
+ 	if ((p = malloc(data.nFileSizeLow + 1000)) == NULL)
+ 		return(FALSE);
+ 	sprintf(zip_cline, "-p %s \"%s\" \"%s\"",
+ 		(data.nFileSizeLow < EDISP || !zip_disp) ? "--i" : "", zip_aname, zip_fname);
+ #if 0
+ 	if ((*pZip)(zip_disp, zip_cline, p, data.nFileSizeLow + 1000) != 0)
+ 	{
+ 		free(p);
+ 		return(FALSE);
+ 	}
+ #else
+ 	if ((*pZipExtractMem)(zip_disp, zip_cline, p,
+ 						data.nFileSizeLow + 1, NULL, NULL, NULL) != 0)
+ 	{
+ 		free(p);
+ 		return(FALSE);
+ 	}
+ #endif
+ 	if ((fd = open(tmp, O_WRONLY | O_CREAT | O_BINARY, S_IREAD | S_IWRITE)) < 0)
+ 	{
+ 		free(p);
+ 		return(FALSE);
+ 	}
+ 	write(fd, p, data.nFileSizeLow);
+ 	close(fd);
+ 	free(p);
+ 	return(TRUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	close emulation
+  *----------------------------------------------------------------------------*/
+ BOOL
+ zip_putfile(fname, tmp)
+ const char	*	fname;
+ const char	*	tmp;
+ {
+ 	char				zip_fname[MAX_PATH];
+ 	char				zip_aname[MAX_PATH];
+ 	char				zip_cline[MAX_PATH + 32];
+ 	struct stat			st;
+ 	char			*	p		= NULL;
+ 	long 				perm	= -1;
+ 	int					fd;
+ 
+ 	if (!zip_getname(fname, ':', zip_aname, zip_fname))
+ 		return(FALSE);
+ 	if (stat(tmp, &st) != 0)
+ 		goto error;
+ 	if ((p = malloc(st.st_size + 1)) == NULL)
+ 		goto error;
+ 	if ((fd = open(tmp, O_RDONLY, S_IREAD | S_IWRITE)) < 0)
+ 		goto error;
+ 	if (st.st_size)
+ 		read(fd, p, st.st_size);
+ 	close(fd);
+ 	sprintf(zip_cline, "-d1 -gm %s \"%s\" \"%s\"",
+ 				st.st_size < CDISP || !zip_disp ? "-n -gp0" : "", zip_aname, zip_fname);
+ 	perm = ef_getperm(zip_aname);
+ 	if (perm > 0)
+ 		chmod(zip_aname, S_IREAD|S_IWRITE);
+ 	if ((*pZipCompressMem)(zip_disp, zip_cline, p, st.st_size,
+ 												NULL, NULL, NULL) != 0)
+ 		goto error;
+ 	if (perm > 0)
+ 		chmod(zip_aname, perm);
+ 	return(TRUE);
+ error:
+ 	if (p != NULL)
+ 		free(p);
+ 	if (perm > 0)
+ 		chmod(zip_aname, perm);
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	unlink()/remove() emulation
+  *----------------------------------------------------------------------------*/
+ int
+ zip_remove(fname)
+ const char	*	fname;
+ {
+ 	char				zip_fname[MAX_PATH];
+ 	char				zip_aname[MAX_PATH];
+ 	HANDLE				hFile;
+ 	WIN32_FIND_DATA		data;
+ 	long 				perm;
+ 
+ 	if ((hFile = zip_findfirst(fname, &data)) == INVALID_HANDLE_VALUE)
+ 		return(-1);
+ 	zip_findclose(hFile);
+ 	zip_getname(fname, ':', zip_aname, zip_fname);
+ 	if ((perm = ef_getperm(zip_aname)) == (-1))
+ 		return(-1);
+ 	chmod(zip_aname, S_IREAD|S_IWRITE);
+ 	chmod(zip_aname, perm);
+ 	return(0);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	chmod() emulation
+  *----------------------------------------------------------------------------*/
+ int
+ zip_chmod(name, perm)
+ const char	*	name;
+ int				perm;
+ {
+ 	return(0);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	fullpath() emulation
+  *----------------------------------------------------------------------------*/
+ char *
+ zip_fullpath(buf, fname, len)
+ char		*	buf;
+ char		*	fname;
+ int				len;
+ {
+ 	char				zip_fname[MAX_PATH];
+ 	char				zip_aname[MAX_PATH];
+ 
+ 	if (!zip_getname(fname, ':', zip_aname, zip_fname))
+ 		return(NULL);
+ 	if (_fullpath(buf, zip_aname, len - strlen(zip_fname)) == NULL)
+ 		return(NULL);
+ 	strcat(buf, ":");
+ 	strcat(buf, zip_fname);
+ 	return(buf);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	getfullpathname() emulation
+  *----------------------------------------------------------------------------*/
+ DWORD
+ zip_getfullpathname(lpszFile, cchPath, lpszPath, ppszFilePart)
+ LPCTSTR			lpszFile;
+ DWORD			cchPath;
+ LPTSTR			lpszPath;
+ LPTSTR		*	ppszFilePart;
+ {
+ 	char				zip_fname[MAX_PATH];
+ 	char				zip_aname[MAX_PATH];
+ 	char			*	p;
+ 
+ 	if (!zip_getname(lpszFile, ':', zip_aname, zip_fname))
+ 		return(0);
+ 	if (GetFullPathName(zip_aname, cchPath, lpszPath, ppszFilePart) == 0)
+ 		return(0);
+ 	if ((strlen(zip_fname) + strlen(lpszPath) + 1) > cchPath)
+ 		return(0);
+ 	strcat(lpszPath, ":");
+ 	*ppszFilePart = lpszPath + strlen(lpszPath);
+ 	if (ef_dir)
+ 	{
+ 		if ((p = strrchr(zip_fname, '/')) != NULL)
+ 			*ppszFilePart += p - zip_fname + 1;
+ 	}
+ 	strcat(lpszPath, zip_fname);
+ 	return(strlen(lpszPath));
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	findnext() emulation
+  *----------------------------------------------------------------------------*/
+ int
+ zip_findnext(harc, data)
+ HANDLE			harc;
+ WIN32_FIND_DATA	* 	data;
+ {
+ 	int				pos;
+ 	int				n;
+ 	char		*	p;
+ 	READBUF		*	rbuf;
+ 	READBUF		**	brbuf;
+ 
+ retry:
+ 	if ((*pZipFindNext)((HARC)harc, &SubInfo) == 0)
+ 	{
+ 		if (!ef_dir)
+ 		{
+ 			if (SubInfo.szFileName[strlen(SubInfo.szFileName) - 1] == '/')
+ 				goto retry;
+ 			memset(data->cFileName, '\0', sizeof(data->cFileName));
+ 			strcpy(data->cFileName, SubInfo.szFileName);
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
+ 			if (strchr(SubInfo.szAttribute, 'R') != NULL)
+ 				data->dwFileAttributes = FILE_ATTRIBUTE_READONLY;
+ 			data->nFileSizeHigh = 0;
+ 			data->nFileSizeLow  = SubInfo.dwOriginalSize;
+ 			return(TRUE);
+ 		}
+ 		if ((p = strrchr(find_fname, '/')) != NULL)
+ 		{
+ 			if (strnicmp(find_fname, SubInfo.szFileName, p - find_fname + 1) != 0)
+ 				goto retry;
+ 			if ((strchr(find_fname, '*')) == NULL)
+ 			{
+ 				if (strnicmp(find_fname, SubInfo.szFileName, strlen(find_fname)) != 0)
+ 					goto retry;
+ 				if (SubInfo.szFileName[strlen(find_fname)] == '/'
+ 						|| SubInfo.szFileName[strlen(find_fname)] == '\0')
+ 					;
+ 				else
+ 					goto retry;
+ 			}
+ 		}
+ 		else
+ 		{
+ 			if (find_fname[0] != '/' && SubInfo.szFileName[0] == '/')
+ 				goto retry;
+ 			if ((strchr(find_fname, '*')) == NULL)
+ 			{
+ 				if (strnicmp(find_fname, SubInfo.szFileName, strlen(find_fname)) != 0)
+ 					goto retry;
+ 				if (SubInfo.szFileName[strlen(find_fname)] == '/'
+ 						|| SubInfo.szFileName[strlen(find_fname)] == '\0')
+ 					;
+ 				else
+ 					goto retry;
+ 			}
+ 		}
+ 		pos = 0;
+ 		data->nFileSizeHigh = 0;
+ 		data->nFileSizeLow  = SubInfo.dwOriginalSize;
+ 		data->dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
+ 		if (strchr(SubInfo.szAttribute, 'R') != NULL)
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_READONLY;
+ 		if (p != NULL)
+ 			pos = p - find_fname + 1;
+ 		n = strlen(&SubInfo.szFileName[pos]);
+ 		if ((p = strchr(&SubInfo.szFileName[pos], '/')) != NULL)
+ 		{
+ 			if (pos == 0 && p == SubInfo.szFileName)
+ 				n = 1;
+ 			else
+ 				n = p - &SubInfo.szFileName[pos];
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
+ 		}
+ 		memset(data->cFileName, '\0', sizeof(data->cFileName));
+ 		strncpy(data->cFileName, &SubInfo.szFileName[pos], n);
+ 		rbuf = zip_rbuf;
+ 		while (rbuf)
+ 		{
+ 			if (stricmp(rbuf->fname, data->cFileName) == 0)
+ 				goto retry;
+ 			if (rbuf->next == NULL)
+ 				break;
+ 			rbuf = rbuf->next;
+ 		}
+ 		if (rbuf == NULL)
+ 		{
+ 			if ((zip_rbuf = malloc(sizeof(READBUF))) == NULL)
+ 				return(FALSE);
+ 			brbuf = &zip_rbuf;
+ 			rbuf = zip_rbuf;
+ 		}
+ 		else
+ 		{
+ 			if ((rbuf->next = malloc(sizeof(READBUF))) == NULL)
+ 				return(FALSE);
+ 			brbuf = &rbuf->next;
+ 			rbuf = rbuf->next;
+ 		}
+ 		rbuf->next = NULL;
+ 		if ((rbuf->fname = malloc(strlen(data->cFileName) + 1)) == NULL)
+ 		{
+ 			*brbuf = NULL;
+ 			free(rbuf);
+ 			return(FALSE);
+ 		}
+ 		strcpy(rbuf->fname, data->cFileName);
+ 		return(TRUE);
+ 	}
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	findfirst() emulation
+  *----------------------------------------------------------------------------*/
+ HANDLE
+ zip_findfirst(name, data)
+ const char		*	name;
+ WIN32_FIND_DATA	* 	data;
+ {
+ 	HARC			hArc;
+ 	int				pos;
+ 	int				n;
+ 	char		*	p;
+ 
+ 	if (!zip_getname(name, ':', find_aname, find_fname))
+ 		return(INVALID_HANDLE_VALUE);
+ 	zip_rbuf = NULL;
+ 	if ((*pZipCheckArchive)(find_aname, 1) == FALSE)
+ 		return(INVALID_HANDLE_VALUE);
+ 	if ((hArc = (*pZipOpenArchive)(zip_disp, find_aname, M_INIT_FILE_USE)) == NULL)
+ 		return(INVALID_HANDLE_VALUE);
+ 	if ((*pZipFindFirst)(hArc, "*.*", &SubInfo) == 0)
+ 	{
+ 		if (!ef_dir)
+ 		{
+ 			if (SubInfo.szFileName[strlen(SubInfo.szFileName) - 1] == '/')
+ 			{
+ 				if (zip_findnext((HANDLE)hArc, data))
+ 					return((HANDLE)hArc);
+ 				(*pZipCloseArchive)(hArc);
+ 				return(INVALID_HANDLE_VALUE);
+ 			}
+ 			memset(data->cFileName, '\0', sizeof(data->cFileName));
+ 			strcpy(data->cFileName, SubInfo.szFileName);
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
+ 			if (strchr(SubInfo.szAttribute, 'R') != NULL)
+ 				data->dwFileAttributes = FILE_ATTRIBUTE_READONLY;
+ 			data->nFileSizeHigh = 0;
+ 			data->nFileSizeLow  = SubInfo.dwOriginalSize;
+ 			return((HANDLE)hArc);
+ 		}
+ 		if ((p = strrchr(find_fname, '/')) != NULL)
+ 		{
+ 			if (SubInfo.szFileName[p - find_fname + 1] == '\0')
+ 			{
+ 				if (zip_findnext((HANDLE)hArc, data))
+ 					return((HANDLE)hArc);
+ 				(*pZipCloseArchive)(hArc);
+ 				return(INVALID_HANDLE_VALUE);
+ 			}
+ 			if (strnicmp(find_fname, SubInfo.szFileName, p - find_fname + 1) != 0)
+ 			{
+ 				if (zip_findnext((HANDLE)hArc, data))
+ 					return((HANDLE)hArc);
+ 				(*pZipCloseArchive)(hArc);
+ 				return(INVALID_HANDLE_VALUE);
+ 			}
+ 			if ((strchr(find_fname, '*')) == NULL)
+ 			{
+ 				if (strnicmp(find_fname, SubInfo.szFileName, strlen(find_fname)) != 0)
+ 				{
+ 					if (zip_findnext((HANDLE)hArc, data))
+ 						return((HANDLE)hArc);
+ 					(*pZipCloseArchive)(hArc);
+ 					return(INVALID_HANDLE_VALUE);
+ 				}
+ 				if (SubInfo.szFileName[strlen(find_fname)] == '/'
+ 						|| SubInfo.szFileName[strlen(find_fname)] == '\0')
+ 					;
+ 				else
+ 				{
+ 					if (zip_findnext((HANDLE)hArc, data))
+ 						return((HANDLE)hArc);
+ 					(*pZipCloseArchive)(hArc);
+ 					return(INVALID_HANDLE_VALUE);
+ 				}
+ 			}
+ 		}
+ 		else
+ 		{
+ 			if (find_fname[0] != '/' && SubInfo.szFileName[0] == '/')
+ 			{
+ 				if (zip_findnext((HANDLE)hArc, data))
+ 					return((HANDLE)hArc);
+ 				(*pZipCloseArchive)(hArc);
+ 				return(INVALID_HANDLE_VALUE);
+ 			}
+ 			if ((strchr(find_fname, '*')) == NULL)
+ 			{
+ 				if (strnicmp(find_fname, SubInfo.szFileName, strlen(find_fname)) != 0)
+ 				{
+ 					if (zip_findnext((HANDLE)hArc, data))
+ 						return((HANDLE)hArc);
+ 					(*pZipCloseArchive)(hArc);
+ 					return(INVALID_HANDLE_VALUE);
+ 				}
+ 				if (SubInfo.szFileName[strlen(find_fname)] == '/'
+ 						|| SubInfo.szFileName[strlen(find_fname)] == '\0')
+ 					;
+ 				else
+ 				{
+ 					if (zip_findnext((HANDLE)hArc, data))
+ 						return((HANDLE)hArc);
+ 					(*pZipCloseArchive)(hArc);
+ 					return(INVALID_HANDLE_VALUE);
+ 				}
+ 			}
+ 		}
+ 		pos = 0;
+ 		data->nFileSizeHigh = 0;
+ 		data->nFileSizeLow  = SubInfo.dwOriginalSize;
+ 		data->dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
+ 		if (strchr(SubInfo.szAttribute, 'R') != NULL)
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_READONLY;
+ 		if (p != NULL)
+ 			pos = p - find_fname + 1;
+ 		n = strlen(&SubInfo.szFileName[pos]);
+ 		if ((p = strchr(&SubInfo.szFileName[pos], '/')) != NULL)
+ 		{
+ 			if (pos == 0 && p == SubInfo.szFileName)
+ 				n = 1;
+ 			else
+ 				n = p - &SubInfo.szFileName[pos];
+ 			data->dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
+ 		}
+ 		memset(data->cFileName, '\0', sizeof(data->cFileName));
+ 		strncpy(data->cFileName, &SubInfo.szFileName[pos], n);
+ 		if ((zip_rbuf = malloc(sizeof(READBUF))) == NULL)
+ 		{
+ 			(*pZipCloseArchive)(hArc);
+ 			return(INVALID_HANDLE_VALUE);
+ 		}
+ 		zip_rbuf->next = NULL;
+ 		if ((zip_rbuf->fname = malloc(strlen(data->cFileName) + 1)) == NULL)
+ 		{
+ 			free(zip_rbuf);
+ 			zip_rbuf = NULL;
+ 			(*pZipCloseArchive)(hArc);
+ 			return(INVALID_HANDLE_VALUE);
+ 		}
+ 		strcpy(zip_rbuf->fname, data->cFileName);
+ 		return((HANDLE)hArc);
+ 	}
+ 	(*pZipCloseArchive)(hArc);
+ 	return(INVALID_HANDLE_VALUE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	findclose() emulation
+  *----------------------------------------------------------------------------*/
+ void
+ zip_findclose(harc)
+ HANDLE			harc;
+ {
+ 	READBUF		*	rbuf;
+ 	READBUF		*	nrbuf;
+ 
+ 	(*pZipCloseArchive)((HARC)harc);
+ 	rbuf = zip_rbuf;
+ 	while (rbuf)
+ 	{
+ 		nrbuf = rbuf->next;
+ 		free(rbuf->fname);
+ 		free(rbuf);
+ 		rbuf = nrbuf;
+ 	}
+ 	zip_rbuf = NULL;
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	getfullpathname() emulation
+  *----------------------------------------------------------------------------*/
+ BOOL
+ zip_breakcheck()
+ {
+ 	return(FALSE);
+ }
diff -crN ../orig/src/exfile/zip.h ./src/exfile/zip.h
*** ../orig/src/exfile/zip.h	Thu Jan 01 09:00:00 1970
--- ./src/exfile/zip.h	Sun Sep 19 18:55:40 1999
***************
*** 0 ****
--- 1,20 ----
+ /*******************************************************************************
+  *	ZIP file support
+  ******************************************************************************/
+ #include <windows.h>
+ 
+ BOOL		zip_init(HWND);
+ VOID		zip_term(void);
+ char	*	zip_ver(void);
+ BOOL		is_zip(const char *, char);
+ BOOL		zip_sfx(char *);
+ BOOL		zip_getfile(const char *, const char *);
+ BOOL		zip_putfile(const char *, const char *);
+ int			zip_remove(const char *);
+ int			zip_chmod(const char *, int);
+ char	*	zip_fullpath(char *, char *, int);
+ DWORD		zip_getfullpathname(LPCTSTR, DWORD, LPTSTR, LPTSTR *);
+ int			zip_findnext(HANDLE, WIN32_FIND_DATA *);
+ HANDLE		zip_findfirst(const char *, WIN32_FIND_DATA *);
+ void		zip_findclose(HANDLE);
+ BOOL		zip_breakcheck(void);
diff -crN ../orig/src/fepbow.c ./src/fepbow.c
*** ../orig/src/fepbow.c	Thu Jan 01 09:00:00 1970
--- ./src/fepbow.c	Sun Jun 16 17:13:28 1996
***************
*** 0 ****
--- 1,108 ----
+ /* vi:ts=4:sw=4
+  *
+  * General purpose Japanese IME control routines for BOW (BSD on Windows).
+  * Original is Written by Junn Ohta (ohta@src.ricoh.co.jp)
+  *                        Hiroshi Oota (lda01607@niftyserve.or.jp)
+  * BOW IME Control routines written by K.Tsuchida (ken_t@st.rim.or.jp).
+  *
+  *	int fep_init(void)
+  *		checks FEP and turn it off, returns FEP type.
+  *	void fep_term(void)
+  *		restore the status of FEP saved by fep_init().
+  *	void fep_on(void)
+  *		restore the status of FEP saved by fep_off().
+  *	void fep_off(void)
+  *		save the status of FEP and turn it off.
+  *	void fep_force_on(void)
+  *		turn FEP on by its default "on" status.
+  *	void fep_force_off(void)
+  *		don't save the status of FEP and turn it off.
+  *	int fep_get_mode(void)
+  *		return the current status of FEP (0 = off).
+  *
+  */
+ #ifdef FEPCTRL
+ 
+ #include <sys/types.h>
+ #include <sys/termios.h>
+ #include <sys/ioctl.h>
+ 
+ static int	init = 0;
+ 
+ void fep_force_off()
+ {
+ 	struct termios termios;
+ 	int n;
+ 
+ 	if (!init)
+ 		return;
+ 	if (ioctl(0, TIOCGETA, &termios))
+ 		return;
+ 	n =  termios.c_cflag;
+ 	n &= ~CLOCAL;
+ 	if (n != termios.c_cflag) {
+ 		termios.c_cflag = n;
+ 		ioctl(0, TIOCSETA, &termios);
+ 	}
+ }
+ 
+ void fep_force_on()
+ {
+ 	struct termios termios;
+ 	int n;
+ 
+ 	if (!init)
+ 		return;
+ 	if (ioctl(0, TIOCGETA, &termios))
+ 		return;
+ 	n =  termios.c_cflag;
+ 	n |= CLOCAL;
+ 	if (n != termios.c_cflag) {
+ 		termios.c_cflag = n;
+ 		ioctl(0, TIOCSETA, &termios);
+ 	}
+ }
+ 
+ int fep_get_mode()
+ {
+ 	struct termios termios;
+ 
+ 	if (!init)
+ 		return 0;
+ 	if (ioctl(0, TIOCGETA, &termios))
+ 		return 0;
+ 	if (termios.c_cflag & CLOCAL)
+ 		return 1;
+ 	return 0;
+ }
+ 
+ int fep_init()
+ {
+ 	init = 1;
+ 	return 1;
+ }
+ 
+ void fep_term()
+ {
+ 	init = 0;
+ }
+ 
+ static int	keepmode = 0;
+ 
+ void fep_on()
+ {
+ 	if (!init)
+ 		return;
+ 	if (keepmode)
+ 		fep_force_on();
+ }
+ 
+ void fep_off()
+ {
+ 	if (!init)
+ 		return;
+ 	keepmode = fep_get_mode();
+ 	fep_force_off();
+ }
+ 
+ #endif	/* FEPCTRL */
diff -crN ../orig/src/fepcanna.c ./src/fepcanna.c
*** ../orig/src/fepcanna.c	Thu Jan 01 09:00:00 1970
--- ./src/fepcanna.c	Wed Mar 24 07:24:32 1999
***************
*** 0 ****
--- 1,700 ----
+ /* canna.c */
+ 
+ /*
+  * Author:
+  *	Nobuyuki Koganemaru
+  *	kogane@kces.koganemaru.co.jp
+  *
+  *	Jun-ichiro "itojun" Itoh/ESD
+  *	itojun@foretune.co.jp / itojun@mt.cs.keio.ac.jp / JINnet itojun
+  */
+ /*
+  * JVim support
+  *  Ken'ichi Tsuchida
+  *  ken_t@st.rim.or.jp
+  *
+  */
+ 
+ /* canna (Japanese-conversion server) interface */
+ 
+ /* Known bugs:
+  * - While canna fence is active, doing backspace(bs) will simply erase
+  *   underlying characters, without redrawing the underlying text.
+  *   It will not be a problem, but it may seem strange for users.
+  * - While entering Japanese chars in vgets(), (say, while doing : or /)
+  *   screen will crush if the user enters characters exceed screen width.
+  *   (need to fix vgets(), so as to be able to edit line longer than
+  *   screen width)
+  * - While entering Japanese chars in vgets(), henkan mode will not be
+  *   displayed.  Here are our future options:
+  *   - to forget about mode display
+  *     (current approach)
+  *   - to have another status line
+  *     (how can we control cursor movement?)
+  *   - to have redraw facility in vgets()
+  *     (unacceptable: what if there's no termcap entry available?)
+  *   - to shift vgets() display area to right
+  * - Support for function key -> canna control code translation is needed.
+  * - Resize will not take effect, while canna fence is active.
+  *   We have two problems here:
+  *   - if the screen is resized while reading input from keyboard,
+  *     control-L will be inserted. (see ttyread() in unix.c for detail)
+  *     it may not be recognized, if canna fence is active.
+  *   - if the screen is resized while canna extend-mode is active,
+  *     KC_SETSIZE won't take effect until we leave canna extend-mode.
+  *     thus, screen will crush if there's no enough room for guideline.
+  * - There may be a chance of overwrite, over lefthalf of kanji chars.
+  *   We have no way to check that.  We Hope your terminal handles it correctly.
+  */
+ 
+ #include "vim.h"
+ #include "globals.h"
+ #include "proto.h"
+ #include "param.h"
+ #include "kanji.h"
+ #ifdef CANNA
+ #include <canna/jrkanji.h>
+ 
+ /* variables visible to external */
+ int	canna_mode = FALSE;		/* actual conversion mode */
+ int	canna_empty = TRUE;		/* true if canna fence is empty */
+ 
+ /* canna library controls */
+ static	jrKanjiStatus		ks;
+ static	jrKanjiStatusWithValue	ksv;
+ extern	void			(*jrBeepFunc)();
+ extern	char			*jrKanjiError;
+ 
+ /* canna inject/result buffer */
+ #define MAXBUF		1024
+ static	unsigned char	inbuf[MAXBUF];
+ static	unsigned char	outbuf[MAXBUF];
+ static	int		ohead = 0;
+ static	int		otail = 0;
+ 
+ /* internal controls */
+ static	int		ready = FALSE;	/* initialized? */
+ static	int		fence = TRUE;
+ static	int		errorkey;	/* illegal key was tapped */
+ static	char		curserver[80] = "";
+ 					/* current canna server */
+ 
+ /* screen controls */
+ static	int		visualmode = FALSE;
+ 					/* true if we can use visual screen
+ 					 * controls.
+ 					 */
+ 
+ #define	MINMODEWIDTH	10
+ static	char		*modeline;	/* canna modeline string */
+ static	int		modewidth = 0;
+ 
+ static	int		leftmargin = 0;
+ 
+ #define	GUIDEPOS	(((modewidth) < MINMODEWIDTH) ? MINMODEWIDTH : (modewidth))
+ #define	MAXGUIDEWIDTH	100
+ static	char		*guideline;	/* canna guideline string */
+ static	int		guidewidth = 0;
+ static	int		guidelen = 0;
+ static	int		guiderevpos = 0;
+ static	int		guiderevlen = 0;
+ 
+ /*------------------------------------------------------------*/
+ 
+ static int		disp_row;
+ static int		disp_col;
+ static int		redraw = FALSE;
+ 
+ /*------------------------------------------------------------*/
+ 
+ static void		canna_ulstart __PARMS((void));
+ static void		canna_ulstop __PARMS((void));
+ 
+ /*------------------------------------------------------------*/
+ 
+ #if 0
+ # define		DTRC(_1, _2, _3, _4)	cannaTrace(_1, _2, _3, _4)
+ #else
+ # define		DTRC(_1, _2, _3, _4)
+ #endif
+ 
+ /*------------------------------------------------------------*/
+ static
+ void	cannaTrace(fmt, a1, a2, a3)
+ 	char_u	*fmt;
+ 	int		 a1, a2, a3;
+ {
+ 	static FILE		*fp = NULL;
+ 
+ 	if (fp == NULL)
+ 	{
+ 		if ((fp = fopen("canna.trc", "w+")) == NULL)
+ 			return;
+ 		fputs("start trace\n", fp);
+ 	}
+ 	fprintf(fp, fmt, a1, a2, a3);
+ }
+ 
+ static
+ void	canna_msg(msg, row, col)
+ 	char_u	*msg;
+ 	int		*row;
+ 	int		*col;
+ {
+ 	char_u	*	buf = msg;
+ 	int			pos = 0;
+ 
+ 	while (*msg)
+ 	{
+ 		screen_msg(msg, *row, *col);
+ 		while (*msg && *col < Columns)
+ 		{
+ 			if (ISkanji(*msg))
+ 			{
+ 				if (*col == Columns - 1)
+ 				{
+ 					screen_msg("\\", *row, *col);
+ 					*row += 1;
+ 					*col  = 0;
+ 					break;
+ 				}
+ 				*col += 1;
+ 				++msg;
+ 			}
+ 			*col += 1;
+ 			++msg;
+ 		}
+ 		if (*col >= Columns)
+ 		{
+ 			*col  = 0;
+ 			*row += 1;
+ 		}
+ 		if (*row >= Rows)
+ 			break;
+ 	}
+ 	if (*row >= (curwin->w_winpos + curwin->w_height))
+ 		redraw = TRUE;
+ 	flushbuf();
+ }
+ 
+ /* Beep if an illegal key was tapped.
+  * Also, the routine will update illegal keystroke flag (errorkey),
+  * because canna library will not report if the injected key is legal or not.
+  */
+ static
+ void	canna_beep()
+ {
+ 	DTRC("@canna_beep\n", 0, 0, 0);
+ 	errorkey = TRUE;
+ 	beep();
+ }
+ 
+ static
+ void	canna_display(guide, str, len, revpos, revlen, row, col)
+ 	int	guide;
+ 	char	*str;
+ 	int	len;
+ 	int	revpos;
+ 	int	revlen;
+ 	int *row;
+ 	int *col;
+ {
+ 	int	i;
+ 
+ 	if (!fence && !guide)
+ 		canna_ulstart();
+ 	i = kanjiconvsfrom(str, revpos, IObuff, IOSIZE, NULL, JP_EUC, NULL);
+ 	IObuff[i] = NUL;
+ 	canna_msg(IObuff, row, col);
+ 	if (!fence && !guide)
+ 		canna_ulstop();
+ 	set_highlight('F');
+ 	start_highlight();
+ 	i = kanjiconvsfrom(&str[revpos], revlen, IObuff, IOSIZE, NULL, JP_EUC, NULL);
+ 	IObuff[i] = NUL;
+ 	canna_msg(IObuff, row, col);
+ 	stop_highlight();
+ 	if (!fence && !guide)
+ 		canna_ulstart();
+ 	i = kanjiconvsfrom(&str[revpos + revlen], len - (revpos + revlen), IObuff, IOSIZE, NULL, JP_EUC, NULL);
+ 	IObuff[i] = NUL;
+ 	canna_msg(IObuff, row, col);
+ 	if (!fence && !guide)
+ 		canna_ulstop();
+ }
+ 
+ /* update modeline/guideline */
+ static
+ void	canna_showmodeline()
+ {
+ 	int	i;
+ 
+ 	if (canna_mode && visualmode)
+ 	{
+ 		i = kanjiconvsfrom(modeline, STRLEN(modeline), IObuff, IOSIZE, NULL, JP_EUC, NULL);
+ 		memset(&IObuff[i], ' ', guidewidth + 2);
+ 		IObuff[i + guidewidth] = NUL;
+ 		disp_row = Rows - 1;
+ 		disp_col = leftmargin;
+ 		canna_msg(IObuff, &disp_row, &disp_col);
+ 		disp_row = Rows - 1;
+ 		disp_col = leftmargin + modewidth + 1;
+ 		canna_display(TRUE, guideline, guidelen, guiderevpos, guiderevlen, &disp_row, &disp_col);
+ 		redraw = FALSE;
+ 	}
+ }
+ 
+ /* echoback canna fence, and update modeline/guideline if needed */
+ void	canna_echoback()
+ {
+ 	int		needredraw;
+ 
+ 	needredraw = FALSE;
+ 
+ 	/* echoback canna fence */
+ 	if (ks.length > 0)
+ 	{
+ 		if (visualmode)
+ 		{
+ 			/* Redraw the current line, and lines which
+ 			 * have been affected by canna fence.
+ 			 * It will be very slow, so it is optional.
+ 			 * NOTE: I don't know why it have to be 2L.
+ 			 * It should be 1L, I think, but it isn't.
+ 			 */
+ 			DTRC("@canna_echoback:1\n", 0, 0, 0);
+ 			RedrawingDisabled++;
+ 			cursupdate();
+ 			RedrawingDisabled--;
+ 			setcursor();
+ 			updateline();
+ 			disp_row = curwin->w_winpos + curwin->w_row;
+ 			disp_col = curwin->w_col;
+ 		}
+ 		else
+ 		{
+ 			DTRC("@canna_echoback:2\n", 0, 0, 0);
+ 			redrawcmdline();
+ 			disp_row = msg_row;
+ 			disp_col = msg_col;
+ 		}
+ 		if (fence)
+ 			canna_msg("|", &disp_row, &disp_col);
+ 		canna_display(FALSE, ks.echoStr, ks.length, ks.revPos, ks.revLen, &disp_row, &disp_col);
+ 		/* hack for pseudo-cursor at the rightmost of canna fence */
+ 		if (ks.length == ks.revPos)
+ 		{
+ 			if (fence)
+ 			{
+ 				set_highlight('F');
+ 				start_highlight();
+ 				canna_msg("|", &disp_row, &disp_col);
+ 				stop_highlight();
+ 			}
+ 		}
+ 		else
+ 		{
+ 			if (fence)
+ 				canna_msg("|", &disp_row, &disp_col);
+ 		}
+ 	}
+ 	else
+ 	{
+ 		/* Advice to redraw the current line, and lines which have
+ 		 * been affected by canna fence.
+ 		 * We need to do it in !visualmode too, because
+ 		 * fence may be used on screen.
+ 		 * NOTE: I don't know why it have to be 2L.
+ 		 * It should be 1L, I think, but it isn't.
+ 		 */
+ 		if (visualmode && !errorkey)
+ 		{
+ 			DTRC("@canna_echoback:3\n", 0, 0, 0);
+ 			updateline();
+ 			setcursor();
+ 			if (redraw == TRUE)
+ 				updateScreen(CLEAR);
+ 			redraw = FALSE;
+ 			needredraw = TRUE;
+ 		}
+ 	}
+ 
+ 	if (ks.info & KanjiModeInfo)
+ 	{
+ 		/* we got new modeline */
+ 		DTRC("@canna_echoback:4\n", 0, 0, 0);
+ 		strcpy(modeline, ks.mode);
+ 		needredraw = TRUE;
+ 	}
+ 	if (ks.info & KanjiGLineInfo)
+ 	{
+ 		/* we got new guideline */
+ 		DTRC("@canna_echoback:5\n", 0, 0, 0);
+ 		memcpy(guideline, ks.gline.line, ks.gline.length);
+ 		guidelen = ks.gline.length;
+ 		guiderevpos = ks.gline.revPos;
+ 		guiderevlen = ks.gline.revLen;
+ 		needredraw = TRUE;
+ 	}
+ 
+ 	if (visualmode)
+ 	{
+ 		if (needredraw)
+ 		{
+ 			DTRC("@canna_echoback:6\n", 0, 0, 0);
+ 			canna_showmodeline();
+ 		}
+ 	}
+ }
+ 
+ /* turn canna on/off */
+ static
+ void	canna_setmode(mode)
+ 	int	mode;
+ {
+ 	int	i;
+ 	int	ilen;
+ 
+ 	if (!ready)
+ 		return;
+ 
+ 	DTRC("@canna_setmode(%d)\n", mode, 0, 0);
+ 	if (mode)
+ 	{
+ 		/* turn canna on */
+ 		canna_mode = TRUE;
+ 
+ 		ksv.ks = &ks;
+ 		ksv.buffer = inbuf;
+ 		ksv.bytes_buffer = MAXBUF;
+ 		ksv.val = CANNA_MODE_HenkanMode;
+ 		jrKanjiControl(0, KC_CHANGEMODE, (char *)&ksv);
+ 		ohead = 0;
+ 		otail = 0;
+ 
+ 		if (visualmode)
+ 		{
+ 			/* initialize modeline/guideline */
+ 			jrKanjiControl(0, KC_QUERYMODE, modeline);
+ 			canna_showmodeline();
+ 		}
+ 	}
+ 	else
+ 	{
+ 		/* turn canna off */
+ 		canna_mode = FALSE;
+ 
+ 		/* obtain fixed chars */
+ 		ksv.ks = &ks;
+ 		ksv.buffer = inbuf;
+ 		ksv.bytes_buffer = MAXBUF;
+ 		jrKanjiControl(0, KC_KAKUTEI, (char *)&ksv);
+ 		ilen = ksv.val;
+ 		if (ilen > 0)
+ 		{
+ 			otail += kanjiconvsfrom(inbuf, ilen,
+ 							&outbuf[otail], sizeof(outbuf) - otail,
+ 							NULL, JP_EUC, NULL);
+ 		}
+ 
+ 		/* fence/modeline/guideline clean-ups */
+ 		if (visualmode)
+ 		{
+ 			updateScreen(INVERTED);
+ 			showmode();
+ 		}
+ 	}
+ }
+ 
+ static void
+ canna_ulstart()
+ {
+ 	set_highlight('f');
+ 	start_highlight();
+ }
+ 
+ static void
+ canna_ulstop()
+ {
+ 	stop_highlight();
+ }
+ 
+ /*------------------------------------------------------------*/
+ /*
+  * internal interface for canna
+  */
+ 
+ /* inject key stroke into canna, and fill reply buffer if needed. */
+ void	canna_inject(c)
+ 	int		c;
+ {
+ 	int	ilen;
+ 	int cc = c;
+ 	static char_u	kanji = 0;
+ 
+ 	if (!ready)
+ 		return;
+ 	DTRC("@canna_inject(%d)\n", c, 0, 0);
+ 	errorkey = FALSE;
+ 	if (canna_mode)
+ 	{
+ 		if (kanji)
+ 		{
+ 			outbuf[otail++] = kanji;
+ 			outbuf[otail++] = c;
+ 			kanji = 0;
+ 			return;
+ 		}
+ 		else if (ISkanji(c))
+ 		{
+ 			kanji = c;
+ 			return;
+ 		}
+ 		else if (ISkana(c))
+ 		{
+ 			outbuf[otail++] = c;
+ 			return;
+ 		}
+ 		switch (c) {
+ 		case DEL:			c = BS;						break;
+ 		case K_UARROW:		c = CANNA_KEY_Up;			break;
+ 		case K_DARROW:		c = CANNA_KEY_Down;			break;
+ 		case K_LARROW:		c = CANNA_KEY_Left;			break;
+ 		case K_RARROW:		c = CANNA_KEY_Right;		break;
+ 		case K_SUARROW:		c = CANNA_KEY_Shift_Up;		break;
+ 		case K_SDARROW:		c = CANNA_KEY_Shift_Down;	break;
+ 		case K_SLARROW:		c = CANNA_KEY_Shift_Left;	break;
+ 		case K_SRARROW:		c = CANNA_KEY_Shift_Right;	break;
+ 		case K_HELP:		c = CANNA_KEY_Help;			break;
+ 		case K_F1:			c = CANNA_KEY_F1;			break;
+ 		case K_F2:			c = CANNA_KEY_F2;			break;
+ 		case K_F3:			c = CANNA_KEY_F3;			break;
+ 		case K_F4:			c = CANNA_KEY_F4;			break;
+ 		case K_F5:			c = CANNA_KEY_F5;			break;
+ 		case K_F6:			c = CANNA_KEY_F6;			break;
+ 		case K_F7:			c = CANNA_KEY_F7;			break;
+ 		case K_F8:			c = CANNA_KEY_F8;			break;
+ 		case K_F9:			c = CANNA_KEY_F9;			break;
+ 		case K_F10:			c = CANNA_KEY_F10;			break;
+ 		case K_SF1:			c = CANNA_KEY_PF1;			break;
+ 		case K_SF2:			c = CANNA_KEY_PF2;			break;
+ 		case K_SF3:			c = CANNA_KEY_PF3;			break;
+ 		case K_SF4:			c = CANNA_KEY_PF4;			break;
+ 		case K_SF5:			c = CANNA_KEY_PF5;			break;
+ 		case K_SF6:			c = CANNA_KEY_PF6;			break;
+ 		case K_SF7:			c = CANNA_KEY_PF7;			break;
+ 		case K_SF8:			c = CANNA_KEY_PF8;			break;
+ 		case K_SF9:			c = CANNA_KEY_PF9;			break;
+ 		case K_SF10:		c = CANNA_KEY_PF10;			break;
+ 		}
+ 
+ 		ilen = jrKanjiString(0, c, (char *)inbuf, MAXBUF, &ks);
+ 		if (ilen < 0)
+ 		{
+ 			smsg("canna: %s", jrKanjiError);
+ 			return;
+ 		}
+ 
+ 		canna_empty = (ks.info & KanjiEmptyInfo);
+ 		if (!errorkey)
+ 		{
+ 			canna_echoback();
+ 		}
+ 		if (ilen > 0)
+ 		{
+ 			otail += kanjiconvsfrom(inbuf, ilen,
+ 							&outbuf[otail], sizeof(outbuf) - otail,
+ 							NULL, JP_EUC, NULL);
+ 		}
+ 		if (canna_empty && outbuf[otail == 0 ? 0 : otail - 1] != cc
+ 				&& ((0 <= cc && cc <= 0x20) || cc == K_ZERO) && cc != ESC
+ 				&& (p_fk != NULL && STRRCHR(p_fk, cc == K_ZERO ? '@' : cc + '@') != NULL))
+ 			outbuf[otail++] = cc;
+ 	}
+ 	else
+ 	{
+ 		/* for safety */
+ 		outbuf[otail++] = c;
+ 	}
+ }
+ 
+ /* check if canna reply buffer is filled. */
+ int	canna_isready()
+ {
+ 	return (ohead != otail);
+ }
+ 
+ /* fetch a character from canna reply buffer. */
+ int	canna_getkey()
+ {
+ 	int	ret;
+ 
+ 	if (!ready)
+ 		return -1;
+ 	if (ohead == otail)
+ 	{
+ 		return -1;
+ 	}
+ 	else
+ 	{
+ 		ret = outbuf[ohead++];
+ 		if (ohead == otail)
+ 		{
+ 			ohead = 0;
+ 			otail = 0;
+ 		}
+ 		return ret;
+ 	}
+ }
+ 
+ /* Switch the screen control mode.
+  * flag = FALSE: switch to dumb mode. (for ex mode)
+  * flag = TRUE:  switch to visual mode. (for vi input mode)
+  */
+ void	canna_visualmode(flag)
+ 	int	flag;
+ {
+ 	int	guideroom;
+ 
+ 	if (!ready)
+ 		return;
+ 
+ 	visualmode = flag;
+ 	if (visualmode)
+ 	{
+ 		/* Calculate the room for ruler/showmode.
+ 		 * Refer to fillkeybuf() in tio.c for these magic numbers.
+ 		 * NOTE: The order of the following expression is important.
+ 		 * Smaller value should come first.
+ 		 */
+ 		leftmargin = guideroom = 0;
+ 		guideroom += (p_smd) ? 13 : 0;
+ 		guideroom += (Recording) ? 9 : 0;
+ 		leftmargin = guideroom;
+ 		guideroom += (p_ru) ? 17 : 0;
+ 		/* add two for spacing */
+ 		guideroom += 2;
+ 
+ 		guidewidth = Columns - GUIDEPOS - guideroom;
+ 		guidewidth = (guidewidth < 0) ? 0 : guidewidth;
+ 		guidewidth = (guidewidth < MAXGUIDEWIDTH) ? guidewidth : MAXGUIDEWIDTH;
+ 	}
+ 	else
+ 	{
+ 		/* we have no room for guideline */
+ 		guidewidth = 0;
+ 	}
+ 	jrKanjiControl(0, KC_SETWIDTH, (char *)guidewidth);
+ }
+ 
+ /* resize notification */
+ void	canna_resize()
+ {
+ 	canna_visualmode(visualmode);
+ }
+ 
+ /* switch canna server if needed */
+ void	canna_setserver(name)
+ 	char	*name;
+ {
+ 	if (!ready)
+ 		return;
+ 	if (strcmp(curserver, name) != 0)
+ 	{
+ 		jrKanjiControl(0, KC_DISCONNECTSERVER, (char*)0);
+ 		jrKanjiControl(0, KC_SETSERVERNAME, name);
+ 		strcpy(curserver, name);
+ 	}
+ }
+ 
+ /*------------------------------------------------------------*/
+ /*
+  * external fepctrl-based interface for canna
+  */
+ 
+ static	int	keepmode = FALSE;	/* canna is active in input mode?
+ 					 * (canna will be active when fep_on())
+ 					 */
+ 
+ int	canna_init()
+ {
+ 	int	r;
+ 	char	*s;
+ 
+ 	r = jrKanjiControl(0, KC_INITIALIZE, 0);
+ 	if (r != 0)
+ 		return 0;
+ 
+ 	jrKanjiControl(0, KC_SETAPPNAME, longJpVersion);
+ 
+ 	/* modeline set-up */
+ 	modewidth = jrKanjiControl(0, KC_QUERYMAXMODESTR, 0);
+ 	modeline = (char *)malloc(modewidth + 1);
+ 	modeline[0] = '\0';
+ 
+ 	/* guideline set-up */
+ 	guideline = (char *)malloc(MAXGUIDEWIDTH + 1);
+ 	guideline[0] = '\0';
+ 
+ 	/* beep if illegal key is tapped */
+ 	jrBeepFunc = canna_beep;
+ 	jrKanjiControl(0, KC_SETUNDEFKEYFUNCTION, kc_normal);
+ 
+ 	/* visual mode off */
+ 	visualmode = FALSE;
+ 	guidewidth = 0;
+ 	jrKanjiControl(0, KC_SETWIDTH, (char *)guidewidth);
+ 
+ 	ready = TRUE;
+ 	fence = TRUE;
+ 	if (T_US != NULL && *T_US != NUL)
+ 		fence = FALSE;
+ 
+ 	return 1;	/*found*/
+ }
+ 
+ void	canna_term()
+ {
+ 	if (!ready)
+ 		return;
+ 	jrKanjiControl(0, KC_FINALIZE, 0);
+ }
+ 
+ void	canna_on()
+ {
+ 	if (!ready)
+ 		return;
+ 	if (keepmode)
+ 		canna_setmode(TRUE);
+ }
+ 
+ void	canna_off()
+ {
+ 	if (!ready)
+ 		return;
+ 	keepmode = canna_mode;
+ 	canna_setmode(FALSE);
+ }
+ 
+ void	canna_force_on()
+ {
+ 	if (!ready)
+ 		return;
+ 	canna_setmode(TRUE);
+ }
+ 
+ void	canna_force_off()
+ {
+ 	if (!ready)
+ 		return;
+ 	canna_setmode(FALSE);
+ }
+ 
+ int		canna_get_mode()
+ {
+ 	if (!ready)
+ 		return 0;
+ 	return canna_mode;
+ }
+ 
+ #endif	/*CANNA*/
diff -crN ../orig/src/fepctrl.c ./src/fepctrl.c
*** ../orig/src/fepctrl.c	Thu Jan 01 09:00:00 1970
--- ./src/fepctrl.c	Mon Aug 11 09:45:04 1997
***************
*** 0 ****
--- 1,1632 ----
+ /*
+  * fepctrl.c 1.5 (patchlevel 1) 1994/07/08.  Public Domain.
+  *
+  * General purpose Japanese FEP control routines for MS-DOS.
+  * Written by Junn Ohta (ohta@src.ricoh.co.jp, JCF00656@NIFTY-Serve)
+  *
+  *	Modified for djgpp 1.11  at 1994-04-02
+  *	      by  tantan :Nifty SGL00213
+  *  Modified for Windows 95  at 1995-09-28
+  *        by  Ken'ichi Tsuchida (ken_t@st.rim.or.jp)
+  *  Modified for Windows 95  at 1997-07-08
+  *        by  Y.Kohno (kohno@nikongw.nikon.co.jp)
+  *
+  *	int fep_init(void)
+  *		checks FEP and turn it off, returns FEP type.
+  *	void fep_term(void)
+  *		restore the status of FEP saved by fep_init().
+  *	void fep_on(void)
+  *		restore the status of FEP saved by fep_off().
+  *	void fep_off(void)
+  *		save the status of FEP and turn it off.
+  *	void fep_force_on(void)
+  *		turn FEP on by its default "on" status.
+  *	void fep_force_off(void)
+  *		don't save the status of FEP and turn it off.
+  *	int fep_raw_init(void)
+  *		same as fep_init(), but doesn't turn the FEP off.
+  *	void fep_raw_term(void)
+  *		same as fep_term(), but doesn't restore the FEP status.
+  *	int fep_get_mode(void)
+  *		return the current status of FEP (0 = off).
+  *
+  * Compiles under:
+  *	Turbo C 1.5/2.0, Turbo C++ 1.0, Borland C++ 2.0/3.0/3.1/4.0/4.5,
+  *	Microsoft C 5.1/6.0, Microsoft C/C++ 7.0, Quick C 2.0,
+  *	Lattice C 4.1 (need negative stack frame, except huge model),
+  *	LSI C-86 3.2/3.3 Sampler (small model only).
+  *	Djgpp 1.11/1.12 + GO32 1.11/1.12
+  */
+ 
+ #ifdef FEPCTRL
+ 
+ static char fepctrl_version[] = "FEPCTRL V1.5pl1 07/08/1994";
+ 
+ /*
+  * define appropriate directives shown below
+  */
+ #define DO_MSKANJI	/* support MS-KANJI application interface */
+ #define DO_GENERIC	/* support platforms other than PC-9801 */
+ #define DO_USERDEV	/* recognize user supplied device names */
+ 
+ #include <dos.h>
+ #if defined(__GO32__)
+ #include  <dpmi.h>
+ #endif
+ #include "fepctrl.h"
+ 
+ /*
+  * default "on" status of FEP (used only in fep_force_on())
+  */
+ static unsigned char fepon[NFEPS] = {
+ /* FEP_NONE	*/  0,
+ /* FEP_PC98A	*/  1,	/* 0=off, 1=on */
+ /* FEP_PC98B	*/  1,	/* 0=off, 1=on */
+ /* FEP_PC98C	*/  1,	/* 0=off, 1=on */
+ /* FEP_MSKANJI	*/  2,	/* 0=off, 1=system, 2=echo */
+ /* FEP_VJE	*/  2,	/* 0=off, 1=system, 2=echo */
+ /* FEP_ATOK6	*/  1,	/* 0=off, 1=roma, 2=kana, 3=alpha, 4=sym, 5=code */
+ /* FEP_ATOK7	*/  1,	/* 0=off, 1=on */
+ /* FEP_MTTK86	*/  1,  /* 0=off, 1=on */
+ /* FEP_MTTK2	*/  1,  /* 0=off, 1=on */
+ /* FEP_KATANA	*/  1,  /* 0=off, 1=echo, 2=system */
+ /* FEP_FIXER	*/  1,  /* 0=off, 1=echo, 2=system */
+ /* FEP_EGB2	*/  2,  /* 0=off, 1=system, 2=echo */
+ /* FEP_EGB3	*/  2,  /* 0=off, 1=system, 2=echo */
+ /* FEP_WXP	*/  1,  /* 0=off, 1=echo, 2=system */
+ /* FEP_WX2	*/  1,	/* 0=off, 1=echo, 2=system */
+ /* FEP_MGR2	*/  1,  /* 0=off, 1=on */
+ /* FEP_JJ	*/  1,	/* 0=off, 1=on */
+ /* FEP_NEC	*/  1,  /* 0=off, 1=on */
+ /* FEP_DFJ	*/  1,  /* 0=off, 1=on */
+ /* FEP_DANGO	*/  1,	/* 0=off, 1=kana, 3=alpha */
+ /* FEP_OTEMOTO	*/  2,	/* 0=off, 1=system, 2=echo */
+ /* FEP_OMAC	*/  1,	/* 0=off, 1=on */
+ /* FEP_AJIP1	*/  1,	/* 0=off, 1=on */
+ /* FEP_JOKER3	*/  1,	/* 0=off, 1=on */
+ /* FEP_KAZE	*/  1,	/* 0=off, 1=on */
+ /* FEP_OAK   */  0xd1,	/* 0r010100=off, 1r010001=on (r=romaji) */
+ /* FEP_MKK	*/  2,	/* 0=off, 1=system, 2=echo */
+ /* FEP_B16   */  0x80,	/* 00000000=off, 10000000=on */
+ /* FEP_RICOH */  0x80,	/* 00000000=off, 10000000=on */
+ /* FEP_WXPJ	*/  1,	/* 0=off, 1=echo, 2=system */
+ /* FEP_MIJ	*/  1,	/* 0=off, 1=on */
+ /* FEP_FEPEX	*/  1,	/* 0=off, 1=on */
+ /* FEP_AT6AX	*/  1,	/* 0=off, 1=roma, 2=kana, 3=alpha, 4=sym, 5=code */
+ /* FEP_AT6IBM	*/  1,	/* 0=off, 1=roma, 2=kana, 3=alpha, 4=sym, 5=code */
+ /* FEP_AT7IBM	*/  1,	/* 0=off, 1=on */
+ /* FEP_AT7DOSV*/ 0x80,	/* 00000000=off, 10000000=on */
+ /* FEP_IAS   */  0xc5 	/* 0rxxx000=off, 1rxxx101=on */
+ };
+ 
+ static int fep = FEP_NONE;
+ static int oldmode = 0;
+ static int keepmode = 0;
+ #if	defined(__GO32__)
+ static _go32_dpmi_seginfo work_info;
+ #endif
+ 
+ static void near __PASCAL fep_open(void);
+ static void near __PASCAL fep_close(void);
+ static int near __PASCAL fep_find(void);
+ static int near __PASCAL fep_mode(int);
+ static int near __PASCAL check_dev(char *);
+ static int near __PASCAL check_vec(int, unsigned, unsigned, char *);
+ static int near __PASCAL check_atok7(int);
+ static int near __PASCAL msknj_find(char *);
+ static int near __PASCAL msknj_get_mode(void);
+ static int near __PASCAL msknj_set_mode(int);
+ 
+ int __CDECL
+ fep_init(void)
+ {
+ 	if (fep == FEP_NONE)
+ 		fep = fep_find();
+ 	fep_open();
+ 	oldmode = keepmode = fep_mode(0);
+ 	return fep;
+ }
+ 
+ void __CDECL
+ fep_term(void)
+ {
+ 	fep_mode(oldmode);
+ 	fep_close();
+ }
+ 
+ void __CDECL
+ fep_on(void)
+ {
+ 	fep_mode(keepmode);
+ }
+ 
+ void __CDECL
+ fep_off(void)
+ {
+ 	keepmode = fep_mode(0);
+ }
+ 
+ void __CDECL
+ fep_force_on(void)
+ {
+ 	fep_mode(fepon[fep]);
+ }
+ 
+ void __CDECL
+ fep_force_off(void)
+ {
+ 	fep_mode(0);
+ }
+ 
+ int __CDECL
+ fep_raw_init(void)
+ {
+ 	if (fep == FEP_NONE)
+ 		fep = fep_find();
+ 	fep_open();
+ 	return fep;
+ }
+ 
+ void __CDECL
+ fep_raw_term(void)
+ {
+ 	fep_close();
+ }
+ 
+ int __CDECL
+ fep_get_mode(void)
+ {
+ 	return fep_mode(-1);
+ }
+ 
+ /*--------------------------------------------------------------------*/
+ #ifdef TEST
+ /*
+  * mail routines for the batch utility
+  *
+  * Usage: fepctrl [command]
+  * command:
+  *	help   - print this message
+  *	test   - ordinary FEP testing
+  *	name   - print installed FEP name
+  *	on     - turn FEP on
+  *	off    - turn FEP off
+  *	flip   - flip FEP status
+  *	status - return FEP status
+  *	check [fepname ...]
+  *		- check existence of specified FEP
+  * fepname:
+  *	as follows...
+  */
+ 
+ static char *fepname[NFEPS] = {
+ /* FEP_NONE	*/  "(none)",
+ /* FEP_PC98A	*/  "PC9801A",
+ /* FEP_PC98B	*/  "PC9801B",
+ /* FEP_PC98C	*/  "PC9801C",
+ /* FEP_MSKANJI	*/  "MSKANJI",
+ /* FEP_VJE	*/  "VJE",
+ /* FEP_ATOK6	*/  "ATOK6",
+ /* FEP_ATOK7	*/  "ATOK7",
+ /* FEP_MTTK86	*/  "MTTK86",
+ /* FEP_MTTK2	*/  "MTTK2",
+ /* FEP_KATANA	*/  "KATANA",
+ /* FEP_FIXER	*/  "FIXER",
+ /* FEP_EGB2	*/  "EGB2",
+ /* FEP_EGB3	*/  "EGB3",
+ /* FEP_WXP	*/  "WXP",
+ /* FEP_WX2	*/  "WX2",
+ /* FEP_MGR2	*/  "MGR2",
+ /* FEP_JJ	*/  "JJ",
+ /* FEP_NEC	*/  "NEC",
+ /* FEP_DFJ	*/  "DFJ",
+ /* FEP_DANGO	*/  "DANGO",
+ /* FEP_OTEMOTO	*/  "OTEMOTO",
+ /* FEP_OMAC	*/  "OMAC",
+ /* FEP_AJIP1	*/  "AJIP1",
+ /* FEP_JOKER3	*/  "JOKER3",
+ /* FEP_KAZE	*/  "KAZE",
+ /* FEP_OAK	*/  "OAK",
+ /* FEP_MKK	*/  "MKK",
+ /* FEP_B16	*/  "B16",
+ /* FEP_RICOH	*/  "RICOH",
+ /* FEP_WXPJ	*/  "WXPJ",
+ /* FEP_MIJ	*/  "MIJ",
+ /* FEP_FEPEX	*/  "FEPEX",
+ /* FEP_AT6AX	*/  "AT6AX",
+ /* FEP_AT6IBM	*/  "AT6IBM",
+ /* FEP_AT7IBM	*/  "AT7IBM",
+ /* FEP_AT7DOSV	*/  "AT7DOSV",
+ /* FEP_IAS	*/  "IBMIAS"
+ };
+ 
+ #define	getch()		(bdos(8, 0, 0) & 0xff)
+ #define	putch(c)	bdos(2, (int)(c), 0)
+ 
+ static void near __PASCAL
+ putstr(char *s)
+ {
+ 	while (*s)
+ 		putch(*s++);
+ }
+ 
+ static void near __PASCAL
+ echoline(void)
+ {
+ 	int c;
+ 	putstr(fep_get_mode()? " on: ": "off: ");
+ 	while ((c = getch()) != '\r' && c != '\n')
+ 		putch(c);
+ 	putstr("\r\n");
+ }
+ 
+ void __CDECL
+ main(int ac, char **av)
+ {
+ 	int fep, ret;
+ 
+ 	ac--, av++;
+ 	if (ac == 0)
+ 		*av = "help";
+ 	if (!strcmp(*av, "test")) {
+ 		putstr("fep = ");
+ 		putstr(fepname[fep_init()]);
+ 		putstr("\r\n");
+ 		putstr("enter 4 lines of text\r\n");
+ 		fep_force_on();
+ 		echoline();
+ 		fep_off();
+ 		echoline();
+ 		fep_on();
+ 		echoline();
+ 		fep_force_off();
+ 		echoline();
+ 		fep_term();
+ 		exit(0);
+ 	}
+ 	ret = 0;
+ 	fep = fep_raw_init();
+ 	if (!strcmp(*av, "name")) {
+ 		putstr(fepname[fep]);
+ 		putstr("\r\n");
+ 	} else if (!strcmp(*av, "on")) {
+ 		if (!fep_get_mode())
+ 			fep_force_on();
+ 	} else if (!strcmp(*av, "off")) {
+ 		if (fep_get_mode())
+ 			fep_force_off();
+ 	} else if (!strcmp(*av, "flip")) {
+ 		if (fep_get_mode())
+ 			fep_force_off();
+ 		else
+ 			fep_force_on();
+ 	} else if (!strcmp(*av, "status")) {
+ 		ret = fep_get_mode()? 1: 0;
+ 	} else if (!strcmp(*av, "check")) {
+ 		ac--, av++;
+ 		if (ac == 0)
+ 			ret = fep;
+ 		while (ac > 0) {
+ 			if (!strcmp(fepname[fep], *av)) {
+ 				ret = fep;
+ 				break;
+ 			}
+ 			ac--, av++;
+ 		}
+ 	} else {
+ 		putstr(fepctrl_version);
+ 		putstr(" - batch utility\r\n");
+ 		putstr("Usage: fepctrl [command]\r\n"
+ 			"command:\r\n"
+ 			"\thelp   - print this message\r\n"
+ 			"\ttest   - ordinary FEP testing\r\n"
+ 			"\tname   - print installed FEP name\r\n"
+ 			"\ton     - turn FEP on\r\n"
+ 			"\toff    - turn FEP off\r\n"
+ 			"\tflip   - flip FEP status\r\n"
+ 			"\tstatus - return FEP status\r\n"
+ 			"\tcheck [fepname ...]\r\n"
+ 			"\t       - check existence of specified FEP\r\n"
+ 			"fepname:\r\n\t");
+ 		for (fep = 1; fep < NFEPS; fep++) {
+ 			if (fep > 1)
+ 				putstr(", ");
+ 			if ((fep % 8) == 0)
+ 				putstr("\r\n\t");
+ 			putstr(fepname[fep]);
+ 		}
+ 		putstr("\r\n");
+ 	}
+ 	fep_raw_term();
+ 	exit(ret);
+ }
+ 
+ #endif /* TEST */
+ /*--------------------------------------------------------------------*/
+ 
+ #ifdef MSC_INLINE
+ #undef MSC_INLINE
+ #endif
+ #if defined(_MSC_VER) && _MSC_VER >= 600 || defined(_QC)
+ #define	MSC_INLINE
+ #endif
+ 
+ typedef struct {
+ 	unsigned char	ftype;		/* fep type */
+ 	unsigned char	inum;		/* dointr number */
+ 	char		*dname;		/* device name */
+ } FEPDEV;
+ 
+ typedef struct {
+ 	unsigned char	ftype;		/* fep type */
+ 	unsigned char	inum;		/* dointr number */
+ 	unsigned char	offset;		/* offset of id string */
+ 	unsigned char	relative;	/* offset is relative? */
+ 	char		*idstr;		/* id string */
+ } FEPINT;
+ 
+ #ifdef DO_USERDEV
+ /*
+  * device names supplied by user for FEP residence check
+  */
+ static FEPDEV fepudev[] = {
+ 	{ FEP_PC98A,	0,    "FP$PC98A" },
+ 	{ FEP_PC98B,	0,    "FP$PC98B" },
+ 	{ FEP_PC98B,	0,    "FP$DUMMY" }, /* backward compatibility */
+ 	{ FEP_PC98B,	0,    "FP$PC98"  }, /* backward compatibility */
+ 	{ FEP_PC98C,	0,    "FP$PC98C" },
+ 	{ FEP_VJE,	0,    "FP$VJE"   },
+ 	{ FEP_ATOK6,	0x6f, "FP$ATOK6" }, /* ATOK6, DANGO */
+ 	{ FEP_MTTK86,	0,    "FP$MTTK"  },
+ 	{ FEP_KATANA,	0,    "FP$KTN"   },
+ 	{ FEP_EGB2,	0,    "FP$EGB2"  },
+ 	{ FEP_EGB3,	0,    "FP$EGB3"  },
+ 	{ FEP_WXP,	0,    "FP$WXP"   }, /* WX, WXS, WXP 1.03a */
+ 	{ FEP_WX2,	0x70, "FP$WX2"   }, /* WX2, WXP 1.04c */
+ 	{ FEP_MGR2,	0,    "FP$MGR2"  },
+ 	{ FEP_JJ,	0,    "FP$JJ"    },
+ 	{ FEP_NEC,	0,    "FP$NEC"   },
+ 	{ FEP_DFJ,	0,    "FP$DFJ"   },
+ 	{ FEP_OMAC,	0,    "FP$OMAC"  },
+ 	{ FEP_AJIP1,	0,    "FP$AJIP1" },
+ 	{ FEP_JOKER3,	0xf1, "FP$JOKER" },
+ 	{ FEP_KAZE,	0,    "FP$KAZE"  },
+ #ifdef DO_GENERIC
+ 	{ FEP_OAK,	0,    "FP$OAK"   },
+ #endif
+ 	{ FEP_NONE, }
+ };
+ #endif /* DO_USERDEV */
+ 
+ /*
+  * real ID string placed in the memory
+  */
+ static FEPINT fepint[] = {
+ 	{ FEP_MTTK86,	0x70, 0x12, 0, "MTTK86"   },
+ 	{ FEP_MTTK2,	0x70, 0x12, 0, "MTTK"     },
+ 	{ FEP_EGB2,	0x70, 0x28, 0, "ERGOA"    },
+ 	{ FEP_EGB3,	0x70, 0x28, 0, "ERGO"     },
+ 	{ FEP_WXP,	0x70, 0x22, 0, "WX      " },
+ 	{ FEP_WX2,	0x70, 0x22, 0, "WX2     " },
+ 	{ FEP_DFJ,	0x6f, 0x02, 0, "DFJ"      },
+ 	{ FEP_JJ,	0x70, 0x0a, 0, "JJ1_V"    },
+ 	{ FEP_ATOK6,	0x6f, 0x03, 1, "ATOK5020" },
+ 	{ FEP_ATOK6,	0x6f, 0x1d, 0, "ATOK5020" }, /* backward compat. */
+ 	{ FEP_KATANA,	0x4b, 0x0b, 0, "KTN"	  },
+ 	{ FEP_DANGO,	0x6f, 0x03, 1, "ATOKI"    },
+ 	{ FEP_OMAC,	0x09, 0x12, 0, "Taikei"   },
+ 	{ FEP_JOKER3,	0xf1, 0x12, 0, "JOKER3"   },
+ /*	{ FEP_AJIP1,	0xf3, 0x0a, 0, "AJ1V01PC" }, */
+ /*	{ FEP_VJE,	0x70, 0x12, 0, "VJE-"     }, */
+ /*	{ FEP_MGR2,	0x70, 0x0a, 0, "#MGR#REX" }, */
+ /*	{ FEP_NEC,	0xdc, 0x0a, 0, "$AID#NEC" }, */
+ /*	{ FEP_NEC,	0xdc, 0x0a, 0, "$ATC#NEC" }, */
+ #ifdef DO_GENERIC
+ 	{ FEP_OAK,	0xed, 0x12, 0, "OAK"      }, /* use 0xec to dointr */
+ 	{ FEP_B16,	0x16, 0x02, 1, "K,YUGEV"  },
+ /*	{ FEP_RICOH,	0x16, 0x0a, 0, "$NIHONGO" }, */
+ 	{ FEP_WXPJ,	0x6c, 0x22, 0, "WX      " },
+ 	{ FEP_MIJ,	0x6f, 0x12, 0, "MTTK"     }, /* NOT TESTED */
+ /*	{ FEP_FEPEX,	0x83, 0x28, 0, "ERGO"	  }, */
+ 	{ FEP_AT6AX,	0x65, 0x0d, 1, "ATOK6020" },
+ 	{ FEP_AT6IBM,	0x60, 0x0a, 0, "ATOK6I%%" },
+ 	{ FEP_AT6IBM,	0x60, 0x45, 1, "7TO6"	  }, /* ATOK7 + 7TO6 */
+ #endif
+ 	{ FEP_NONE, }
+ };
+ 
+ /*
+  * real device names built in by FEPs
+  */
+ static FEPDEV fepdev[] = {
+ 	{ FEP_VJE,	0,    "AS$VJE"   },
+ 	{ FEP_ATOK6,	0x6f, "ATOKF%%%" },
+ 	{ FEP_MGR2,	0,    "#MGR#REX" },
+ 	{ FEP_AJIP1,	0,    "AJ1V01PC" },
+ 	{ FEP_NEC,	0,    "$AID#NEC" }, /* NEC AI Henkan on DOS3.3C */
+ 	{ FEP_NEC,	0,    "$AIC#NEC" }, /* NEC AI Henkan */
+ 	{ FEP_NEC,	0,    "$ATC#NEC" }, /* NEC Chikuji Kana-Kanji */
+ #ifdef DO_GENERIC
+ 	{ FEP_RICOH,	0,    "$NIHONGO" }, /* RICOH Nihongo Nyuryoku */
+ 	{ FEP_FEPEX,	0,    "(ERGOSFT" }, /* FEPEX (on IF800EX/RX) */
+ 	{ FEP_AT7DOSV,	0,    "IAEAT7%%" }, /* ATOK7 on IBM DOS/V $IAS */
+ 	{ FEP_IAS,	0,    "$IBMAIAS" }, /* FEP uses IBM DOS/V $IAS */
+ #endif
+ 	{ FEP_NONE, }
+ };
+ 
+ /*
+  * FIXER ioctl data packet
+  */
+ typedef struct {
+ 	char	name[8];
+ 	short int	version;
+ 	void	(far __CDECL *v3func)(void);	
+ 	short int	v3vec;
+ 	void	(far __CDECL *v4func)(void);
+ 	short int	v4vec;
+ } FIXIDP;
+ 
+ #if defined(LSI_C)
+ static void (far *fixer_entry)(int, int, int, int);
+ static void (far *atok7_entry)(int, int near *);
+ #elif defined(LATTICE)
+ static void (far __CDECL *fixer_entry)(void);
+ static unsigned atok7_seg, atok7_off;
+ #else /* Turbo C, Microsoft C, Quick C ,Djgpp 1.11 */
+ static void (far __CDECL *fixer_entry)(void);
+ static void (far __CDECL *atok7_entry)(void);
+ #endif
+ static int api_vec = -1;	/* API interrupt vector */
+ 
+ #define GET_IOC_DATA	0x4400	/* Get IOCTL Data		*/
+ #define	RCV_IOC_CHAR	0x4402	/* Receive IOCTL Character	*/
+ #define	GET_CBRK	0x3300	/* Get CBREAK (CTRL-C Check)	*/
+ #define	SET_CBRK	0x3301	/* Set CBREAK (CTRL-C Check)	*/
+ #define	GET_VECTOR	0x35	/* Get Interrupt Vector		*/
+ #define	OPEN_HANDLE	0x3d	/* Open Handle			*/
+ #define	CLOSE_HANDLE	0x3e	/* Close Handle			*/
+ #define DEVICE		0x80	/* handle is not a file		*/
+ #define	CFLAG		0x0001	/* iAPX86 carry flag bit	*/
+ 
+ #if defined(__TURBOC__) || defined(LSI_C)
+ #define	MK_FAR(seg,off)	MK_FP(seg, off)
+ #define	FAR_SEG(addr)	FP_SEG(addr)
+ #define	FAR_OFF(addr)	FP_OFF(addr)
+ #define	FAR_OFF2(addr)	FP_OFF(addr)
+ #elif	defined(__GO32__)
+ #define	MK_FAR(seg,off) (void *)(((unsigned)(seg)<<4)+(unsigned)(off))
+ /*
+ #define	FAR_SEG(addr)
+ #define	FAR_OFF(addr) (addr)
+ */
+ #define	FAR_OFF2(addr) (addr)
+ #elif defined(LATTICE)
+ #define	MK_FAR(seg,off) (void far *)(((unsigned long)(seg)<<4)+(unsigned)(off))
+ #define	FAR_SEG(addr)	FP_SEG((void far *)(addr))
+ #define	FAR_OFF(addr)	FP_OFF((void far *)(addr))
+ #define	FAR_OFF2(addr)	((unsigned)(addr))	/* avoid normalization */
+ #else /* Microsoft C, Quick C */
+ #define	MK_FAR(seg,off)	(void far *)((unsigned long)(seg)<<16|(unsigned)(off))
+ #define	FAR_SEG(addr)	((unsigned)((unsigned long)(addr) >> 16))
+ #define	FAR_OFF(addr)	((unsigned)(addr))
+ #define	FAR_OFF2(addr)	((unsigned)(addr))
+ #endif
+ 
+ #ifdef LATTICE
+ static union REGS regs;
+ static union REGSS xregs;
+ static struct SREGS sregs;
+ /*
+  * we must use int86s()/intdoss(), since Lattice's int86x()/intdosx()
+  * don't return the modified values of segment registers
+  */
+ #define	Int86x(inum, xp1, xp2, dummy)	int86s(inum, xp1, xp2)
+ #define	Intdosx(xp1, xp2, dummy)	intdoss(xp1, xp2)
+ #define	Regs				xregs
+ #define	Sregs				xregs.x
+ #elif defined(__GO32__)
+ static _go32_dpmi_registers regs;
+ static struct SREGS sregs;
+ #define	Regs				regs
+ #define	Sregs				sregs
+ #define	Intdosx(rp1, rp2, sp)		Int86x(0x21, rp1, rp2, sp)
+ int Int86x(int inum, _go32_dpmi_registers *rp1, _go32_dpmi_registers *rp2, struct SREGS *sp)
+ {
+ 	int ret;
+ 
+ 	rp1->x.ds = sp->ds;
+ 	rp1->x.es = sp->es;
+ 	
+ 	ret = _go32_dpmi_simulate_int(inum, rp1);
+ 
+ 	 *rp2 = *rp1;
+ 	 sp->ds = rp1->x.ds; 
+ 	 sp->es = rp1->x.es; 
+ 
+ 	 return (rp1->x.flags & 1);
+ }
+ 
+ bdos(int func, unsigned dx, unsigned al)
+ {
+   regs.x.dx = dx;
+   regs.h.ah = func;
+   regs.h.al = al;
+   _go32_dpmi_simulate_int(0x21, &regs);
+   return regs.x.ax;
+ }
+ #define POFFSET 1
+ #define ROFFSET 2
+ #define RSEGMENT 3
+ #define RSTACK_SIZE 2000
+ get_work_info(int flag)
+ {
+ 	static int entry=0;
+ 	static int poffset;
+ 	
+ 	if (!entry){
+ 		work_info.size=RSTACK_SIZE >> 4;
+ 		if (_go32_dpmi_allocate_dos_memory(&work_info)){
+ 			printf("cannot allocate dos memeory\n");
+ 			exit(1);
+ 		}
+ 		entry=1;
+ 		poffset = ((int)work_info.rm_segment << 4) + work_info.rm_offset;
+ 	}
+ 	switch(flag){
+ 		case POFFSET:
+ 			return poffset;
+ 		case ROFFSET:
+ 			return work_info.rm_offset;
+ 		case RSEGMENT:
+ 			return work_info.rm_segment;
+ 	}
+ }
+ #define work_poffset()	get_work_info(POFFSET)
+ #define work_offset()	get_work_info(ROFFSET)
+ #define work_segment()	get_work_info(RSEGMENT)
+ 
+ #else /* Turbo C, Microsoft C, Quick C, LSI C */
+ static union REGS regs;
+ static struct SREGS sregs;
+ #define	Int86x(inum, rp1, rp2, sp)	int86x(inum, rp1, rp2, sp)
+ #define	Intdosx(rp1, rp2, sp)		intdosx(rp1, rp2, sp)
+ #define	Regs				regs
+ #define	Sregs				sregs
+ #endif
+ 
+ static unsigned char *p;
+ static unsigned char far *fp;
+ 
+ #ifndef __TURBOC__
+ #if defined(LATTICE)
+ /*
+  * fake function to mimic disable() and enable()
+  */
+ static unsigned char far disable_fake[] = { 0xfa, 0xcb }; /* cli, retf */
+ static unsigned char far enable_fake[]  = { 0xfb, 0xcb }; /* sti, retf */
+ static void (far *disable)(void) = (void (far *)(void))disable_fake;
+ static void (far *enable)(void)  = (void (far *)(void))enable_fake;
+ #elif defined(LSI_C)
+ #define	disable()	di()
+ #define	enable()	ei()
+ #elif defined(__GO32__)
+ #define	disable()	asm("cli")
+ #define	enable()	asm("sti");
+ #else /* Microsoft C, Quick C */
+ #define	disable()	_disable()
+ #define	enable()	_enable()
+ #endif
+ #endif /* !__TURBOC__ */
+ 
+ #ifdef __cplusplus
+ extern "C" {
+ extern int __CDECL strncmp(char *, char *, unsigned int);
+ extern void * __CDECL memset(void *, int, unsigned int);
+ }
+ #else
+ extern int __CDECL strncmp(char *, char *, unsigned int);
+ extern void * __CDECL memset(void *, int, unsigned int);
+ #endif
+ 
+ static int near __PASCAL
+ fep_find(void)
+ {
+ 	FEPDEV *fv;
+ 	FEPINT *fi;
+ 	FIXIDP fixer;
+ 
+ #ifdef DO_USERDEV
+ 	/*
+ 	 * detect fep type by its USER SUPPLIED device name
+ 	 */
+ 	for (fv = fepudev; fv->ftype != FEP_NONE; fv++) {
+ 		if (check_dev(fv->dname)) {
+ 			api_vec = fv->inum;
+ 			return fv->ftype;
+ 		}
+ 	}
+ #endif
+ 
+ 	/*
+ 	 * loaded into bank memory by MELCO's FEP loader (PC-9801 only)
+ 	 */
+ 	if (check_dev("FPLD$10")) {
+ 		if (check_dev("AS$VJE"))
+ 			return FEP_VJE;		/* don't use MS-KANJI API */
+ 		if (check_vec(0x70, 0x12, 0, "MTTK"))
+ 			return FEP_MTTK86;	/* don't use INT 70H I/F */
+ 		if (check_dev("$AID#NEC"))
+ 			return FEP_NEC;		/* don't use MS-KANJI API */
+ 	}
+ 
+ 	/*
+ 	 * avoid to use MS-KANJI API for OAK
+ 	 */
+ 	if (check_vec(0xed, 0x12, 0, "OAK"))
+ 		return FEP_OAK;
+ 
+ #ifdef DO_MSKANJI
+ 	/*
+ 	 * MS-KANJI FEP and its variants
+ 	 */
+ 	if (msknj_find("MS$KANJI"))
+ 		return FEP_MSKANJI;
+ 	if (msknj_find("$KANJI"))
+ 		return FEP_OTEMOTO;
+ #endif
+ 
+ 	/*
+ 	 * detect fep type by its id string
+ 	 */
+ 	for (fi = fepint; fi->ftype != FEP_NONE; fi++) {
+ 		if (check_vec(fi->inum, fi->offset, fi->relative, fi->idstr)) {
+ 			api_vec = fi->inum;
+ 			return fi->ftype;
+ 		}
+ 	}
+ 
+ 	/*
+ 	 * detect fep type by its device name
+ 	 */
+ 	for (fv = fepdev; fv->ftype != FEP_NONE; fv++) {
+ 		if (check_dev(fv->dname)) {
+ 			api_vec = fv->inum;
+ 			return fv->ftype;
+ 		}
+ 	}
+ 
+ 	/*
+ 	 * special case: ATOK7 function call
+ 	 */
+ 	if (check_atok7(0x6f))
+ 		return FEP_ATOK7;
+ #ifdef DO_GENERIC
+ 	if (check_atok7(0x60) && check_dev("ATOK7I%%"))
+ 		/* PS/55 DOS 4.0J only; avoid to use ATOK7 API on DOS/V */
+ 		return FEP_AT7IBM;
+ #endif
+ 
+ 	/*
+ 	 * special case: FIXER3/4 application interface
+ 	 */
+ 	regs.x.ax = GET_IOC_DATA;
+ 	regs.x.bx = 0;	/* stdin */
+ 	intdos(&regs, &regs);
+ 	if (regs.x.dx & DEVICE) {
+ 		regs.x.ax = RCV_IOC_CHAR;
+ 		regs.x.bx = 0;	/* stdin */
+ 		regs.x.cx = sizeof(fixer);
+ #if	defined(__GO32__)
+ 		regs.x.dx = work_offset();
+ 		sregs.ds = work_segment();
+ 		Intdosx(&regs, &regs, &sregs);
+ 		dosmemget(work_poffset(),sizeof(fixer),(void *)&fixer);
+ #else
+ 		regs.x.dx = FAR_OFF((void far *)&fixer);
+ 		sregs.ds = FAR_SEG((void far *)&fixer);
+ 		intdosx(&regs, &regs, &sregs);
+ #endif
+ 		if (regs.x.ax >= 16 && !strncmp(fixer.name, "FIXER   ", 8)) {
+ 			if (fixer.v3vec != -1) {
+ 				api_vec = fixer.v3vec;
+ 				return FEP_FIXER;
+ 			}
+ 			if (!check_dev("FPLD$10") &&
+ 			    !check_dev("$BNK#DRV") &&
+ 			    fixer.v3func != (void far *)0) {
+ 				fixer_entry = fixer.v3func;
+ 				return FEP_FIXER;
+ 			}
+ 			if (fixer.version < 0x0400)
+ 				return FEP_PC98B;
+ 		}
+ 	}
+ 
+ 	/*
+ 	 * special case: Katana/ACE software dointr interface
+ 	 */
+ 	if (check_vec(0x48, 0x0a, 0, "CON     ") &&
+ 	    check_vec(0x49, 0x0a, 0, "CON     ") &&
+ 	    check_vec(0x4a, 0x0a, 0, "CON     ")) {
+ 		/*
+ 		 * This may not be a good way to check Katana/ACE.
+ 		 * However, console status report (sending "<ESC>@"
+ 		 * returns "$") is not reliable here, because we
+ 		 * may have characters in the keyboard buffer.
+ 		 */
+ 		return FEP_KATANA;
+ 	}
+ 
+ 	/*
+ 	 * special case: Panacom MKK software dointr interface
+ 	 */
+ 	if (check_vec(0xc0, 0x0a, 0, "CON     ") &&
+ 	    check_vec(0xc3, 0x0a, 0, "CON     "))
+ 		return FEP_MKK;
+ 
+ 	return FEP_NONE;
+ }
+ 
+ static int near __PASCAL
+ open_dev(char *dname)
+ {
+ 	static char dbuf[15];
+ 	char *p = dbuf;
+ 	char *d = dname;
+ 
+ 	dbuf[0] = '~';
+ 	dbuf[1] = ':';
+ 	p += 2;
+ 	while ((*p++ = *d++) != 0)
+ 		/* void */;
+ 	regs.h.ah = OPEN_HANDLE;
+ 	regs.h.al = 0;
+ #if	defined(__GO32__)
+ 	dosmemput(dbuf,sizeof(dbuf),work_poffset());
+ 	regs.x.dx = work_offset();
+ 	sregs.ds = work_segment();
+ #else
+ 	regs.x.dx = FAR_OFF((void far *)dbuf);
+ 	sregs.ds = FAR_SEG((void far *)dbuf);
+ #endif
+ 
+ #if defined(LATTICE)
+ 	if (intdosx(&regs, &regs, &sregs) & CFLAG)
+ #elif defined(__GO32__)
+ 	if (Intdosx(&regs, &regs, &sregs))
+ #elif defined(LSI_C)
+ 	intdosx(&regs, &regs, &sregs);
+ 	if (regs.x.flags & CFLAG)
+ #else /* Turbo C, Microsoft C, Quick C */
+ 	intdosx(&regs, &regs, &sregs);
+ 	if (regs.x.cflag)
+ #endif
+ 		return -1;
+ 	return regs.x.ax;
+ }
+ 
+ static void near __PASCAL
+ close_dev(int fd)
+ {
+ 	regs.h.ah = CLOSE_HANDLE;
+ 	regs.x.bx = fd;
+ 	intdos(&regs, &regs);
+ }
+ 
+ static int near __PASCAL
+ check_dev(char *dname)
+ {
+ 	int fd, dc;
+ 
+ 	if ((fd = open_dev(dname)) < 0)
+ 		return 0;
+ 
+ 	regs.x.ax = GET_IOC_DATA;
+ 	regs.x.bx = fd;
+ 	intdos(&regs, &regs);
+ 	dc = regs.x.dx;
+ 	close_dev(fd);
+ 	return (dc & DEVICE)? 1: 0;
+ }
+ 
+ static int near __PASCAL
+ check_vec(int inum, unsigned offset, unsigned relative, char *idstr)
+ {
+ 	/*
+ 	 * get dointr vector
+ 	 */
+ 	Regs.h.ah = GET_VECTOR;
+ 	Regs.h.al = (unsigned char)inum;
+ 	Intdosx(&Regs, &Regs, &Sregs);
+ 	/*
+ 	 * check id string
+ 	 */
+ 	if (relative)
+ 		offset += Regs.x.bx;
+ 	fp = (unsigned char far *)MK_FAR(Sregs.es, offset);
+ #if	defined(__GO32__)
+ 	{
+ 		char buff[100],*bp;
+ 		dosmemget(fp,strlen(idstr),buff);
+ 		bp = buff;
+ 		for (p = (unsigned char *)idstr; *p; p++)
+ 			if (*p != *bp++)
+ 				return 0;
+ 	}
+ #else	
+ 	for (p = (unsigned char *)idstr; *p; p++)
+ 		if (*p != *fp++)
+ 			return 0;
+ #endif
+ 	return 1;
+ }
+ 
+ static int near __PASCAL
+ check_atok7(int inum)
+ {
+ 	Regs.h.ah = GET_VECTOR;
+ 	Regs.h.al = (unsigned char)inum;
+ 	Intdosx(&Regs, &Regs, &Sregs);
+ 	fp = (unsigned char far *)MK_FAR(Sregs.es, Regs.x.bx + 0x30);
+ #if	defined(__GO32__)
+ 	{
+ 		char buff[100],*bp;
+ 		dosmemget(fp,7,buff);
+ 		bp = buff;
+ 		for (p = (unsigned char *)"ATOK7"; *p; p++)
+ 			if (*p != *bp++)
+ 				return 0;
+ 	}
+ #else	
+ 	for (p = (unsigned char *)"ATOK7"; *p; p++)
+ 		if (*p != *fp++)
+ 			return 0;
+ #endif
+ 
+ #ifdef LATTICE
+ 	atok7_seg = Sregs.es;
+ 	atok7_off = Regs.x.bx + 0x20;
+ #elif	defined(__GO32__)
+ 	atok7_entry = (void (*)(void))(((long)Sregs.es << 16)+ Regs.x.bx+0x20);
+ #else
+ 	atok7_entry = (void (far __CDECL *)(void))
+ 				MK_FAR(Sregs.es, Regs.x.bx+0x20);
+ #endif
+ 	return 1;
+ }
+ 
+ #if !defined(__TURBOC__) && !defined(LSI_C) && !defined(MSC_INLINE) && !defined(__GO32__)
+ /*
+  * fake function to call fixer_entry() and atok7_entry()
+  *		for Microsoft C 5.1 and Lattice C
+  */
+ static unsigned char far fixer_fake[] = {
+ 	0x55,			/* push  bp				*/
+ 	0x8b, 0xec,		/* mov   bp, sp				*/
+ 	0x8b, 0x46, 0x0a,	/* mov   ax, word ptr [bp+10]	;func	*/
+ 	0x8a, 0x56, 0x0c,	/* mov   dl, byte ptr [bp+12]	;val	*/
+ 	0xff, 0x5e, 0x06,	/* call  dword ptr [bp+6]	;addr	*/
+ 	0x33, 0xc0,		/* xor   ax, ax				*/
+ 	0x8a, 0xc2,		/* mov   al, dl				*/
+ 	0x8b, 0xe5,		/* mov   sp, bp				*/
+ 	0x5d,			/* pop   bp				*/
+ 	0xcb			/* retf					*/
+ };
+ static unsigned char far atok7_fake[] = {
+ 	0x55,			/* push  bp				*/
+ 	0x8b, 0xec,		/* mov   bp, sp				*/
+ 	0x8b, 0x46, 0x0e,	/* mov   ax, word ptr [bp+14]	;pseg	*/
+ 	0x8e, 0xc0,		/* mov   es, ax				*/
+ 	0x8b, 0x5e, 0x0c,	/* mov   bx, word ptr [bp+12]	;poff	*/
+ 	0x8b, 0x46, 0x0a,	/* mov   ax, word ptr [bp+10]	;func	*/
+ 	0xff, 0x5e, 0x06,	/* call  dword ptr [bp+6]	;addr	*/
+ 	0x8b, 0xe5,		/* mov   sp, bp				*/
+ 	0x5d,			/* pop   bp				*/
+ 	0xcb			/* retf					*/
+ };
+ #ifdef LATTICE
+ static int (far __CDECL *fixer_dummy)(void (far *)(void), int, int) 
+ 	= (int (far __CDECL *)())fixer_fake;
+ static void (far __CDECL *atok7_dummy)(unsigned,unsigned,int,unsigned,unsigned)
+ 	= (void (far __CDECL *)())atok7_fake;
+ #endif
+ #endif /* Microsoft C 5.1, Lattice C */
+ 
+ static int near __PASCAL
+ call_fixer(int func, int val)
+ {
+ 	if (api_vec != -1) {
+ 		regs.x.ax = func;
+ 		regs.h.dl = (unsigned char)val;
+ 		int86(api_vec, &regs, &regs);
+ 		return regs.h.dl;
+ 	}
+ #if defined(__TURBOC__)
+ 	_AX = func;
+ 	_DL = (unsigned char)val;
+ 	fixer_entry();
+ 	return (int)_DL;
+ #elif	defined(__GO32__)
+ 	regs.x.ax = func;
+ 	regs.h.dl = (unsigned char)val;
+ 	regs.x.cs = (int)((void *)fixer_entry) >> 16;
+ 	regs.x.ip = (int)((void *)fixer_entry) & 0xffff;
+ 	regs.x.ss = regs.x.sp = 0;
+ 	_go32_dpmi_simulate_fcall(&regs);
+ 	return (int)regs.h.dl;
+ #elif defined(LSI_C)
+ 	fixer_entry(func, 0, 0, val);  /* ax = func, dx = val */
+ 	_asm_c("\n\txor\tax,ax");
+ 	_asm_c("\n\tmov\tal,dl");
+ 	/* return ax */
+ #elif defined(MSC_INLINE)
+ 	_asm {
+ 		mov	ax,func
+ 		mov	dx,val
+ 	}
+ 	fixer_entry();
+ 	_asm {
+ 		xor	ax,ax
+ 		mov	al,dl
+ 	}
+ 	/* return ax */
+ #elif defined(LATTICE)
+ 	return fixer_dummy(fixer_entry, func, val);
+ #else /* Microsoft C 5.1 */
+ 	return ((int (far __CDECL *)(void (far __CDECL *)(void), int, int))
+ 					fixer_fake)(fixer_entry, func, val);
+ #endif
+ }
+ 
+ static int near __PASCAL
+ call_atok7(int func, int val)
+ {
+ #if defined(MSC_INLINE)
+ 	short int pseg, poff;
+ #endif
+ 	short int packet[32];
+ 
+ 	*packet = (short)val;
+ #if defined(__TURBOC__)
+ 	_ES = FAR_SEG((void far *)packet);
+ 	_BX = FAR_OFF((void far *)packet);
+ 	_AX = func;
+ 	atok7_entry();
+ #elif	defined(__GO32__)
+ 	dosmemput(packet,sizeof(packet),work_poffset());
+ 	regs.x.es = work_segment();
+ 	regs.x.bx = work_offset();
+ 	regs.x.ax = func;
+ 	regs.x.cx = 0;
+ 	regs.x.cs = (int)((void *)atok7_entry) >> 16;
+ 	regs.x.ip = (int)((void *)atok7_entry) & 0xfffff;
+ 	regs.x.ss = regs.x.sp = 0;
+ 	_go32_dpmi_simulate_fcall(&regs);
+ 	dosmemget(work_poffset(),sizeof(packet),packet);
+ #elif defined(LSI_C)
+ 	_asm_c("\n\tpush\tss");
+ 	_asm_c("\n\tpop\tes");
+ 	atok7_entry(func, packet);  /* ax = func, es:bx = packet */
+ #elif defined(MSC_INLINE)
+ 	pseg = FAR_SEG((void far *)packet);
+ 	poff = FAR_OFF((void far *)packet);
+ 	_asm {
+ 		mov	ax,pseg
+ 		mov	es,ax
+ 		mov	bx,poff
+ 		mov	ax,func
+ 	}
+ 	atok7_entry();
+ #elif defined(LATTICE)
+ 	atok7_dummy(atok7_off, atok7_seg, func,
+ 		FAR_OFF((void far *)packet), FAR_SEG((void far *)packet));
+ #else /* Microsoft C 5.1 */
+ 	((void (far __CDECL *)(void (far __CDECL *)(void), int, int far *))
+ 			atok7_fake)(atok7_entry, func, (int far *)packet);
+ #endif
+ 	return *packet;
+ }
+ 
+ /*
+  * PC-9801 CRT/KBD BIOS, VRAM
+  */
+ #define	KBDBIOS		((unsigned char far *)MK_FAR(0x0000, 0x0502))
+ #define	CRTWORK		((unsigned char far *)MK_FAR(0x0000, 0x053d))
+ #define	CRTLINES	((unsigned char far *)MK_FAR(0x0000, 0x0713))
+ #define	VRAM		((unsigned char far *)MK_FAR(0xa000, 0x0000))
+ #define	KBDMAX		16		/* max # of keys in KBDBUF */
+ #define	CTRLXFER	0xb500		/* CTRL-XFER key scan code */
+ 
+ struct kbdbios_t {
+ 	unsigned short		buf[KBDMAX];
+ 	unsigned char near	*tbl;
+ 	unsigned short near	*head;
+ 	unsigned short near	*tail;
+ 	unsigned char		count;
+ } far *kp = (struct kbdbios_t far *)KBDBIOS;
+ 
+ /*
+  * Look into CRT BIOS work area and check FEP status
+  */
+ static int near __PASCAL
+ pc98_crtmode(void)
+ {
+ #if	defined(__GO32__)
+ 	char flag;
+ 	dosmemget(CRTWORK,1,&flag);
+ 	return (flag == 2)? 1: 0;
+ #else
+ 	return (*CRTWORK == 2)? 1: 0;
+ #endif
+ }
+ 
+ #ifdef DO_USERDEV
+ /*
+  * Look into VRAM bottom right corner and check FEP status (for FEP_KAZE)
+  */
+ static int near __PASCAL
+ pc98_vrammode(void)
+ {
+ #if	defined(__GO32__)
+ 	char flag;
+ 	int len;
+ 	dosmemget(CRTLINES,1,&flag);
+ 	len = flag ? 0x0f9d: 0x0c7d;
+ 	dosmemget(VRAM+len,1,flag);
+ 	return ((flag & 0x7f)> '!')? 1: 0;
+ #else
+ 	return ((VRAM[*CRTLINES? 0x0f9d: 0x0c7d] & 0x7f) > '!')? 1: 0;
+ #endif
+ }
+ #endif
+ 
+ /*
+  * Set key code directly into PC-9801 BIOS key code buffer
+  */
+ static void near __PASCAL
+ pc98_setkey(unsigned short keycode)
+ {
+ 	disable();
+ #if	defined(__GO32__)
+ 	dosmemput(&keycode,sizeof(short), (int)kp->tail);
+ #else
+ 	*(unsigned short far *)(MK_FAR(0x0000, kp->tail)) = keycode;
+ #endif
+ 	kp->count++;
+ 	kp->tail++;
+ 	if (kp->tail >= (unsigned short near *)FAR_OFF2(&kp->buf[KBDMAX]))
+ 		kp->tail = (unsigned short near *)FAR_OFF2(kp->buf);
+ 	enable();
+ }
+ 
+ static void near __PASCAL
+ pc98_flushkey(unsigned short keycode)
+ {
+ 	while (bdos(6, 0xff, 0) & 0xff) /* void */;
+ 	pc98_setkey(keycode);
+ 	while (bdos(6, 0xff, 0) & 0xff) /* void */;
+ }
+ 
+ static void near __PASCAL
+ pc98_pushkey(unsigned short keycode)
+ {
+ 	/*
+ 	 * raise dummy keyboard interrupt after feeding CTRL-XFER.
+ 	 * i know it is a brute force attack, but it works!
+ 	 */
+ 	pc98_setkey(keycode);
+ 	int86(0x09, &regs, &regs);
+ 	while (bdos(6, 0xff, 0) & 0xff) /* void */;
+ }
+ 
+ static int near __PASCAL
+ set_cbrk(int newcbrk)
+ {
+ 	int curcbrk;
+ 
+ 	/*
+ 	 * get current cbrk value
+ 	 */
+ 	regs.x.ax = GET_CBRK;
+ 	intdos(&regs, &regs);
+ 	curcbrk = regs.h.dl;
+ 	/*
+ 	 * set new cbrk value
+ 	 */
+ 	regs.x.ax = SET_CBRK;
+ 	regs.h.dl = newcbrk;
+ 	intdos(&regs, &regs);
+ 	return curcbrk;
+ }
+ 
+ static int near __PASCAL
+ dointr(int vec, int ah, int al)
+ {
+ 	regs.h.ah = ah;
+ 	regs.h.al = al;
+ 	int86(vec, &regs, &regs);
+ 	return regs.h.al;
+ }
+ 
+ /*
+  * NEC extended function call (int DCh)
+  */
+ static void near __PASCAL
+ donec(int cl)
+ {
+ 	regs.x.ax = 0;
+ 	regs.h.cl = cl;
+ 	int86(0xdc, &regs, &regs);
+ }
+ 
+ static void near __PASCAL
+ fep_open(void)
+ {
+ 	if (fep == FEP_NEC)
+ 		donec(224);
+ }
+ 
+ static void near __PASCAL
+ fep_close(void)
+ {
+ 	if (fep == FEP_NEC)
+ 		donec(225);
+ }
+ 
+ static int near __PASCAL
+ fep_mode(int newmode)
+ {
+ 	int curmode;
+ 
+ 	switch (fep) {
+ #ifdef DO_MSKANJI
+ 	case FEP_MSKANJI:
+ 	case FEP_OTEMOTO:
+ 		/* mode: 0 = off, 1 = system, 2 = echo */
+ 		curmode = msknj_get_mode();
+ 		if (newmode != -1 && newmode != curmode)
+ 			msknj_set_mode(newmode);
+ 		return curmode;
+ #endif
+ 	case FEP_VJE:
+ 	case FEP_EGB2:
+ 	case FEP_EGB3:
+ 		/* mode: 0 = off, 1 = system, 2 = echo */
+ 		curmode = dointr(0x70, 0, 0);
+ 		if (newmode != -1 && newmode != curmode) {
+ 			dointr(0x70, 1, newmode);
+ 			if (fep == FEP_EGB2)
+ 				dointr(0x70, 12, 0); /* unlock mode key */
+ 		}
+ 		return curmode;
+ 	case FEP_ATOK6:		/* api_vec = 0x6f */
+ 	case FEP_AT6AX:		/* api_vec = 0x65 */
+ 	case FEP_AT6IBM:	/* api_vec = 0x60 */
+ 	case FEP_DANGO:		/* api_vec = 0x6f */
+ 		/* mode: 0=off, 1=roma, 2=kana, 3=alpha, 4=sym, 5=code */
+ 		curmode = dointr(api_vec, 102, 0);
+ 		if (newmode != -1 && newmode != curmode)
+ 			dointr(api_vec, (!newmode? 11: newmode), 0);
+ 		return curmode;
+ 	case FEP_ATOK7:
+ 	case FEP_AT7IBM:
+ 		/* mode: 0 = off, 1 = on */
+ 		curmode = call_atok7(3, -1)? 1: 0;
+ 		if (newmode != -1 && newmode != curmode)
+ 			call_atok7(newmode? 1: 2, 0);
+ 		return curmode;
+ 	case FEP_MTTK2:		/* api_vec = 0x70 */
+ 	case FEP_MIJ:		/* api_vec = 0x6f */
+ 		/* mode: 0 = off, 1 = on */
+ 		Regs.h.ah = 21;
+ 		Int86x(api_vec, &Regs, &Regs, &Sregs);
+ 		fp = (unsigned char far *)MK_FAR(Sregs.es, Regs.x.bx);
+ #if	defined(__GO32__)
+ 		{
+ 			unsigned char t;
+ 			dosmemget(fp+5,1,&t);
+ 			curmode = t;
+ 		}
+ #else
+ 		curmode = fp[5];
+ #endif
+ 		if (newmode != -1 && newmode != curmode)
+ 			dointr(api_vec, 0, newmode);
+ 		return curmode;
+ 	case FEP_FIXER:
+ 		/* mode: 0 = off, 1 = echo, 2 = system */
+ 		curmode = call_fixer(0x0901, 0);
+ 		if (newmode != -1 && newmode != curmode)
+ 			call_fixer(0x0900, newmode);
+ 		return curmode;
+ 	case FEP_KATANA:
+ 		/* mode: 0 = off, 1 = echo, 2 = system */
+ 		curmode = dointr(0x48, 2, 0);
+ 		if (newmode != -1 && newmode != curmode) {
+ 			int old = set_cbrk(0);
+ 			dointr(0x48, 3, newmode);
+ 			set_cbrk(old);
+ 		}
+ 		return curmode;
+ 	case FEP_WXP:
+ 		/* mode: 0 = off, 1 = echo, 2 = system */
+ 		curmode = dointr(0x70, 0x4c, 0);
+ 		if (newmode == 0 && curmode > 0) {
+ 			while (dointr(0x70, 0x4c, 0))
+ 				pc98_flushkey(CTRLXFER);
+ 		} else if (newmode > 0 && curmode == 0) {
+ 			dointr(0x70, 0x5c, newmode);
+ 			dointr(0x70, 0x52, 1);
+ 		}
+ 		return curmode;
+ 	case FEP_WX2:		/* api_vec = 0x70 */
+ 	case FEP_WXPJ:		/* api_vec = 0x6c */
+ 		/* mode: 0 = off, 1 = echo, 2 = system */
+ 		curmode = dointr(api_vec, 0x4c, 0);
+ 		if (newmode != -1 && newmode != curmode)
+ 			dointr(api_vec, 0, newmode);
+ 		return curmode;
+ 	case FEP_MGR2:
+ 	case FEP_JJ:
+ 		/* mode: 0 = off, 1 = on */
+ 		regs.h.ah = 0;
+ 		int86(0x70, &regs, &regs);
+ 		curmode = (regs.h.dl & 0x01);
+ 		if (newmode != -1 && newmode != curmode)
+ 			dointr(0x46, 0, newmode);
+ 		return curmode;
+ 	case FEP_JOKER3:
+ 		/* mode: 0 = off, 1 = on */
+ 		curmode = dointr(0xf1, 0x8f, 0);
+ 		if (newmode != -1 && newmode != curmode)
+ 			dointr(0xf1, newmode? 0x86: 0x85, 0);
+ 		return curmode;
+ 	case FEP_NEC:
+ 		/* mode: 0 = off, 1 = on */
+ 		curmode = pc98_crtmode();
+ 		if (newmode != -1 && newmode != curmode)
+ 			donec(newmode? 239: 240);
+ 		return curmode;
+ 	case FEP_PC98A:
+ 	case FEP_MTTK86:
+ 	case FEP_DFJ:
+ 		/* mode: 0 = off, 1 = on */
+ 		curmode = pc98_crtmode();
+ 		if (newmode != -1)
+ 			while (pc98_crtmode() != newmode)
+ 				pc98_flushkey(CTRLXFER);
+ 		return curmode;
+ 	case FEP_PC98B:
+ 	case FEP_AJIP1:
+ 		/* mode: 0 = off, 1 = on */
+ 		curmode = pc98_crtmode();
+ 		if (newmode != -1 && newmode != curmode)
+ 			pc98_setkey(CTRLXFER);
+ 		return curmode;
+ 	case FEP_PC98C:
+ 	case FEP_OMAC:
+ 		/* mode: 0 = off, 1 = on */
+ 		curmode = pc98_crtmode();
+ 		if (newmode != -1 && newmode != curmode)
+ 			pc98_pushkey(CTRLXFER);
+ 		return curmode;
+ #ifdef DO_USERDEV
+ 	case FEP_KAZE:
+ 		/* mode: 0 = off, 1 = on */
+ 		curmode = pc98_vrammode();
+ 		if (newmode != -1 && newmode != curmode)
+ 			pc98_flushkey(CTRLXFER);
+ 		return curmode;
+ #endif
+ #ifdef DO_GENERIC
+ 	case FEP_OAK:
+ 		/*
+ 		 * mode: 0r010100 = off, 1r010001 = on (r = romaji)
+ 		 *   bit7: size: 0 = hankaku, 1 = zenkaku
+ 		 *   bit6: romaji entry: 0 = off, 1 = on
+ 		 *   bit5: always 0
+ 		 *   bit4: mode change: 0 = disabled, 1 = enabled
+ 		 *   bit3: always 0
+ 		 * bit2-0: char type: 001 = hiragana, 010 = katakana,
+ 		 *	   011 = uppercase, 100 = lowercase, 101 = al
+ 		 */
+ #define	OAKOFF(mode)	((mode) == 0 || ((mode) & 0x84) == 0x04)
+ 		curmode = dointr(0xec, 3, 0);
+ 		if (newmode == -1)
+ 			return OAKOFF(curmode)? 0: curmode;
+ 		if (OAKOFF(newmode) && !OAKOFF(curmode))
+ 			dointr(0xec, 2, (curmode & 0x50) | 0x04);
+ 		else if (!OAKOFF(newmode) && OAKOFF(curmode))
+ 			dointr(0xec, 2, newmode);
+ 		return curmode;
+ 	case FEP_MKK:
+ 		/* mode: 0 = off, 1 = system, 2 = echo */
+ 		curmode = dointr(0xc0, 1, 0);
+ 		if (newmode != -1 && newmode != curmode)
+ 			dointr(0xc0, 0, newmode);
+ 		return curmode;
+ 	case FEP_B16:
+ 	case FEP_RICOH:
+ 		/* mode: 00000000 = off, 10000000 = on */
+ 		curmode = dointr(0x16, 8, 0) & 0x80;
+ 		if (newmode != -1 && newmode != curmode)
+ 			dointr(0x16, 7, newmode);
+ 		return curmode;
+ 	case FEP_FEPEX:
+ 		/* mode: 0 = off, 1 = on */
+ 		regs.h.cl = 0x0e;
+ 		int86(0x83, &regs, &regs);
+ 		curmode = regs.h.al;
+ 		if (newmode != -1 && newmode != curmode) {
+ 			regs.h.cl = 0x0b;
+ 			regs.h.bl = newmode;
+ 			int86(0x83, &regs, &regs);
+ 		}
+ 		return curmode;
+ 	case FEP_AT7DOSV:
+ 		/* mode: 00000000 = off, 10000000 = on */
+ 		regs.x.ax = 0x1301;
+ 		int86(0x16, &regs, &regs);
+ 		curmode = regs.h.dl;
+ 		if (newmode != -1 && newmode != curmode) {
+ 			regs.x.ax = 0x1300;
+ 			regs.h.dl = newmode;
+ 			int86(0x16, &regs, &regs);
+ 		}
+ 		return curmode;
+ 	case FEP_IAS:
+ 		/*
+ 		 * mode: 0rxxx000 = off, 1rxxx101 = on (r = romaji)
+ 		 *   bit7: kanji: 0 = off, 1 = on
+ 		 *   bit6: romaji: 0 = off, 1 = on
+ 		 * bit5-3: reserved
+ 		 * bit2-1: shift: 00=alpha, 01=kata, 10=hira, 11=reserved
+ 		 *   bit0: size: 0 = hankaku, 1 = zenkaku
+ 		 */
+ #define	IASOFF(mode)	((mode & 0x87) == 0x00)
+ 		regs.x.ax = 0x1301;
+ 		int86(0x16, &regs, &regs);
+ 		curmode = regs.h.dl;
+ 		if (newmode == -1)
+ 			return IASOFF(curmode)? 0: curmode;
+ 		if (IASOFF(newmode) != IASOFF(curmode)) {
+ 			regs.x.ax = 0x1300;
+ 			regs.h.dl = (newmode & 0x87) | (curmode & 0x78);
+ 			int86(0x16, &regs, &regs);
+ 		}
+ 		return curmode;
+ #endif /* DO_GENERIC */
+ 	default:
+ 		return 0;
+ 	}
+ }
+ 
+ #ifdef DO_MSKANJI
+ /*
+  * MS-KANJI Application Interface access routines
+  */
+ 
+ struct Kkname {
+ 	short		wLevel;			/* API support level */
+ 	char		rgchName[8];		/* name of system */
+ 	char		rgchVersion[4];		/* version # of system */
+ 	char		rgchRevision[4];	/* revision # of system */
+ 	char		Reserved[14];		/* reserved */
+ };
+ struct Dataparm {
+ 	short		wType;			/* display switch */
+ 	short		wScan;			/* key scan code */
+ 	short		wAscii;			/* ascii code */
+ 	short		wShift;			/* shift key status */
+ 	short		wExShift;		/* extended shift key status */
+ 	short		cchResult;		/* size of confirmed string */
+ 	char far	*lpchResult;		/* ptr to confirmed string */
+ 	short		cchMode;		/* size of mode display str */
+ 	char far	*lpchMode;		/* ptr to mode display str */
+ 	char far	*lpattrMode;		/* ptr to attribute of it */
+ 	short		cchSystem;		/* size of system string */
+ 	char far	*lpchSystem;		/* ptr to system string */
+ 	char far	*lpattrSystem;		/* ptr to attribute of it */
+ 	short		ccBuf;			/* size of unconfirmed str */
+ 	char far	*lpchBuf;		/* ptr to unconfirmed str */
+ 	char far	*lpattrBuf;		/* ptr to attribute of it */
+ 	short		cchBufCursor;		/* cursor position in it */
+ 	char		Reserved[34];		/* reserved */
+ };
+ struct Funcparm {
+ 	short		wFunc;			/* function # */
+ 	short		wMode;			/* reference or set */
+ 	struct Kkname far *lpKkname;		/* translation system */
+ 	struct Dataparm far *lpDataparm;	/* data parameter */
+ 	char		Reserved[4];		/* reserved */
+ };
+ 
+ /*
+  * function # for wFunc
+  */
+ #define	KKAsk	1
+ #define	KKOpen	2
+ #define KKClose	3
+ #define	KKInOut	4
+ #define	KKMode	5
+ 
+ /*
+  * mode bit for wMode
+  */
+ #define	KM_GET	0x0000
+ #define	KM_SET	0x8000
+ #define	KM_OFF	0x0001
+ #define	KM_ON	0x0002
+ #define	KM_SYS	0x0004
+ #define	KM_ECHO	0x0008
+ 
+ #if defined(LSI_C)
+ static int (far *KKfunc)(void);
+ #elif defined(__TURBOC__)
+ static int (far pascal *KKfunc)(struct Funcparm far *);
+ #elif defined(__GO32__)
+ static int (*KKfunc)(struct Funcparm *);
+ #else /* Microsoft C, Quick C, Lattice C */
+ static int (far pascal *KKfunc)(int *, struct Funcparm far *);
+ #endif
+ static int near __PASCAL msknj_kkfunc(struct Funcparm far *);
+ static struct Funcparm Funcbuf;
+ static struct Kkname Kkbuf;
+ 
+ static int near __PASCAL
+ msknj_find(char *dname)
+ {
+ 	int fd, n;
+ 
+ 	if (!check_dev(dname))
+ 		return 0;
+ 
+ 	/*
+ 	 * get entry address of KKfunc()
+ 	 */
+ 	fd = open_dev(dname);
+ 	regs.x.ax = RCV_IOC_CHAR;
+ 	regs.x.bx = fd;
+ 	regs.x.cx = 4;
+ #if	defined(__GO32__)
+ 	regs.x.dx = work_offset();
+ 	regs.x.ds = work_segment();
+ 	_go32_dpmi_simulate_int(0x21,&regs);
+ 	dosmemget(work_poffset(),sizeof(char *),&KKfunc);
+ #else
+ 	regs.x.dx = FAR_OFF((void far *)&KKfunc);
+ 	sregs.ds = FAR_SEG((void far *)&KKfunc);
+ 	intdosx(&regs, &regs, &sregs);
+ #endif
+ 	n = regs.x.ax;
+ 	close_dev(fd);
+ 	if (n != 4)		/* ioctl failed */
+ 		return 0;
+ 
+ 	/*
+ 	 * check API support level
+ 	 */
+ 	memset(&Funcbuf, 0, sizeof(Funcbuf));
+ 	Funcbuf.wFunc = KKAsk;
+ 	Funcbuf.lpKkname = (struct Kkname far *)&Kkbuf;
+ 	if (msknj_kkfunc((struct Funcparm far *)&Funcbuf) < 0)
+ 		return 0;
+ 	if (Kkbuf.wLevel < 1)	/* level too low */
+ 		return 0;
+ 
+ 	/*
+ 	 * we don't use MS-KANJI API upon ATOK7 with MSATOK,
+ 	 * because SoftVision's MSATOK doesn't satisfy the
+ 	 * specification of KKMode function.  MSKN 2.0 (later
+ 	 * version of MSATOK; identified as "MSKN    ") is O.K.
+ 	 */
+ 	if (!strncmp(Kkbuf.rgchName, "MSKNATOK", 8))
+ 		return 0;
+ 
+ 	return 1;
+ }
+ 
+ static int near __PASCAL
+ msknj_get_mode(void)
+ {
+ 	memset(&Funcbuf, 0, sizeof(Funcbuf));
+ 	Funcbuf.wFunc = KKMode;
+ 	Funcbuf.wMode = KM_GET;
+ 	msknj_kkfunc((struct Funcparm far *)&Funcbuf);
+ 	return (Funcbuf.wMode & KM_OFF)? 0: (Funcbuf.wMode & KM_SYS)? 1: 2;
+ }
+ 
+ static int near __PASCAL
+ msknj_set_mode(int mode)
+ {
+ 	memset(&Funcbuf, 0, sizeof(Funcbuf));
+ 	Funcbuf.wFunc = KKMode;
+ 	Funcbuf.wMode = KM_SET;
+ 	Funcbuf.wMode |= (mode == 0)? KM_OFF: KM_ON;
+ 	Funcbuf.wMode |= (mode == 1)? KM_SYS: KM_ECHO;
+ 	msknj_kkfunc((struct Funcparm far *)&Funcbuf);
+ 	return 0;
+ }
+ 
+ static int near __PASCAL
+ msknj_kkfunc(struct Funcparm far *bufp)
+ {
+ #if defined(__TURBOC__)
+ 	static int sp, ret;
+ 	sp = _SP;
+ 	ret = KKfunc((struct Funcparm far *)bufp);
+ 	_SP = sp;
+ 	return ret;
+ #elif defined(__GO32__)
+ 	char *p;
+ 	int woffset=10;
+ 	struct Funcparm tmp;
+ /* set struct Funcparm */
+ 	tmp = *bufp;
+ 
+ 	if (bufp->lpKkname){
+ 		tmp.lpKkname = (struct Kkname *)((work_segment()<<16) + 
+ 			work_offset()+woffset);
+ 		dosmemput((void *)bufp->lpKkname,sizeof(struct Kkname),
+ 		work_poffset()+woffset);
+ 	}
+ 	woffset += sizeof(struct Kkname);
+ 	if (bufp->lpDataparm){
+ 		tmp.lpDataparm = (struct Dataparm *)((work_segment()<<16) + 
+ 			work_offset()+woffset);
+ 		dosmemput((void *)bufp->lpDataparm,sizeof(struct Dataparm),
+ 		work_poffset()+woffset);
+ 	}
+ 	woffset += sizeof(struct Dataparm);
+ 
+ 	dosmemput((void *)&tmp,sizeof(struct Funcparm),work_poffset()+woffset);
+ /*	woffset += sizeof(struct Funcparm);*/
+ 
+ 	p = (char *)(((long)work_segment() << 16)+work_offset()+woffset);
+ /*	p = (char *)(((work_offset()+woffset) << 16)+work_segment());*/
+ 	dosmemput(&p,sizeof(char *),work_poffset()+RSTACK_SIZE-4);
+ 
+ 	regs.x.cs = (int)((void *)KKfunc) >> 16;
+ 	regs.x.ip = (int)((void *)KKfunc) & 0xffff;
+ 	regs.x.ss = work_segment();
+ 	regs.x.sp = work_offset() + RSTACK_SIZE-4;
+ 	_go32_dpmi_simulate_fcall(&regs);
+ /*	dosmemget(work_poffset()+woffset,sizeof(struct Funcparm),bufp);*/
+ 	dosmemget(work_poffset()+woffset,4,bufp); /* 4 byte  */
+ 
+ 	woffset -= sizeof(struct Dataparm);
+ 	if (bufp->lpDataparm)
+ 	  dosmemget(work_poffset()+woffset,sizeof(struct Dataparm),bufp->lpDataparm);
+ 	woffset -= sizeof(struct Kkname);
+ 	if (bufp->lpKkname)
+ 	  dosmemget(work_poffset()+woffset,sizeof(struct Kkname),bufp->lpKkname);
+ 
+ 	return regs.x.ax;
+ #elif defined(LSI_C)
+ 	static int savesp, ret;
+ 	savesp = _asm_i("\n\tmov\tax,sp");
+ 	/*
+ 	 * pass the parameter to KKfunc() thru stack
+ 	 *	mov   ax, [bufp].seg
+ 	 *	mov   bx, [bufp].off
+ 	 *	push  bx
+ 	 *	push  ax
+ 	 */
+ 	_asm_c("\n\tpush\tbx\n\tpush\tax", (struct Funcparm far *)bufp);
+ 	ret = KKfunc();
+ 	_asm_c("\n\tmov\tsp,ax", savesp);
+ 	return ret;
+ #else /* Microsoft C, Quick C, Lattice C */
+ 	int magic;
+ 	/*
+ 	 * magic cookie (hinted by Oh!No!):
+ 	 * adjust resulting stack pointer for both C and pascal calls.
+ 	 * valid under all memory models of Microsoft C and Lattice C.
+ 	 */
+ 	return KKfunc(&magic, (struct Funcparm far *)bufp);
+ #endif
+ }
+ #endif /* DO_MSKANJI */
+ 
+ #endif /*FEPCTRL*/
diff -crN ../orig/src/fepctrl.h ./src/fepctrl.h
*** ../orig/src/fepctrl.h	Thu Jan 01 09:00:00 1970
--- ./src/fepctrl.h	Sun Jun 16 17:13:34 1996
***************
*** 0 ****
--- 1,134 ----
+ /*
+  * fepctrl.h 1.5 1992/04/08.  Public Domain.
+  *
+  * General purpose Japanese FEP control routines for MS-DOS.
+  * Written by Junn Ohta (ohta@src.ricoh.co.jp, msa02563)
+  *
+  *	Modified for djgpp 1.11  at 1994-03-27
+  *	      by  tantan :Nifty SGL00213
+  *
+  * Compiles under:
+  *	Turbo C 1.5/2.0, Turbo C++ 1.0, Borland C++ 2.0/3.0,
+  *	Microsoft C 5.1, Microsoft C 6.0, Quick C 2.0,
+  *	Lattic C 4.1 (need negative stack frame, except huge model),
+  *	LSI C-86 3.2/3.3 Sampler (small model only).
+  *	Djgpp 1.11 /GO32 1.11
+  */
+ 
+ #ifndef __FEPCTRL_H
+ #define __FEPCTRL_H
+ 
+ /*
+  * Holy Oracle for MS-DOS C compilers
+  */
+ #if defined(__TURBOC__)
+ #  if __STDC__
+ #    define _Cdecl
+ #    define _Pascal
+ #  else
+ #    if !defined(_Cdecl)
+ #      define _Cdecl  cdecl
+ #    endif
+ #    define _Pascal pascal
+ #  endif
+ #  define __CDECL  _Cdecl
+ #  define __PASCAL _Pascal
+ #elif defined(__GO32__)
+ #  define far
+ #  define near
+ #  define __CDECL
+ #  define __PASCAL
+ #  define intdos(a,b) _go32_dpmi_simulate_int(0x21,a)
+ #  define int86(a,b,c) _go32_dpmi_simulate_int(a,b)
+ #elif defined(LSI_C)
+ #  define __CDECL
+ #  define __PASCAL
+ #elif defined(LATTICE)
+ #  define __CDECL
+ #  define __PASCAL pascal
+ #elif defined(_MSC_VER) && _MSC_VER >= 600
+ #  define __CDECL  _cdecl
+ #  define __PASCAL _fastcall
+ #else /* Microsoft C 5.1, Quick C */
+ #  ifndef NO_EXT_KEYS
+ #    define _CDECL  cdecl
+ #    define _PASCAL pascal
+ #  else
+ #    define _CDECL
+ #    define _PASCAL
+ #  endif
+ #  define __CDECL  _CDECL
+ #  define __PASCAL _PASCAL
+ #endif
+ 
+ /*
+  * Japanese FEP type (returned by fep_init())
+  */
+ enum __fep_t {
+ 	FEP_NONE,
+ 	FEP_PC98A,	/* FEP controlled via PC-9801 BIOS (type A) */
+ 	FEP_PC98B,	/* FEP controlled via PC-9801 BIOS (type B) */
+ 	FEP_PC98C,	/* FEP controlled via PC-9801 BIOS (type C) */
+ 	FEP_MSKANJI,	/* MS-KANJI Application Interface */
+ 	FEP_VJE,	/* VACS Japanese Entry System Alpha/Sigma/Beta */
+ 	FEP_ATOK6,	/* JUSTSYSTEM's Automatic Transfer of Kana-Kanji 6 */
+ 	FEP_ATOK7,	/* JUSTSYSTEM's Automatic Transfer of Kana-Kanji 7 */
+ 	FEP_MTTK86,	/* K3's Matsutake (pinetree mushroom) 86 */
+ 	FEP_MTTK2,	/* K3's Matsutake (pinetree mushroom) V2 */
+ 	FEP_KATANA,	/* Something Good's Katana/ACE */
+ 	FEP_FIXER,	/* Citysoft's FIXER3/FIXER4 */
+ 	FEP_EGB2,	/* ERGOSOFT's EGBridge Ver.2 */
+ 	FEP_EGB3,	/* ERGOSOFT's EGBridge Ver.3 */
+ 	FEP_WXP,	/* A.I.Soft's WXP 1.03a, WX 1.0, WXS 1.0 */
+ 	FEP_WX2,	/* A.I.Soft's WXII with /VZ (and WXP 1.04c) */
+ 	FEP_MGR2,	/* REED REX's MGR2 */
+ 	FEP_JJ,		/* REED REX's JJ */
+ 	FEP_NEC,	/* NEC's Chikuji/AI Kana-Kanji Henkan */
+ 	FEP_DFJ,	/* Digital Farm's DFJ Ver.1 */
+ 	FEP_DANGO,	/* Suzuki Kyoiku Soft's DANGO Henkan */
+ 	FEP_OTEMOTO,	/* Gengo Kogaku Kenkyujo's OTEMOTO (at hand) */
+ 	FEP_OMAC,	/* Morrin's OMAC */
+ 	FEP_AJIP1,	/* Acel's AJIP1 */
+ 	FEP_JOKER3,	/* Micronics's Joker-III */
+ 	FEP_KAZE,	/* Enzan-Hoshi-Gumi's Kaze / Arashi */
+ 	FEP_OAK,	/* OASYS Kana-Kanji Henkan (Fujitsu FM-R series) */
+ 	FEP_MKK,	/* Matsushita Kana-Kanji Henkan (Panacom series) */
+ 	FEP_B16,	/* Renbunsetsu/Jidou Henkan (Hitachi B16 series) */
+ 	FEP_RICOH,	/* Nihongo Nyuryoku System (RICOH Mr. Mytool MAGUS) */
+ 	FEP_WXPJ,	/* A.I.Soft's WXP (Toshiba J3100) */
+ 	FEP_MIJ,	/* MIJ (Toshiba J3100); NOT TESTED!! */
+ 	FEP_FEPEX,	/* ERGOSOFT's FEPEX Ver.2 (Oki IF800) */
+ 	FEP_AT6AX,	/* JUSTSYSTEM's ATOK6 (AX machines) */
+ 	FEP_AT6IBM,	/* JUSTSYSTEM's ATOK6 (IBM PS/55 JDOS4) */
+ 	FEP_AT7IBM,	/* JUSTSYSTEM's ATOK7 (IBM PS/55 JDOS4) */
+ 	FEP_AT7DOSV,	/* JUSTSYSTEM's ATOK7 (IBM DOS/V) */
+ 	FEP_IAS,	/* IBM DOS/V Input Assist Subsystem (SKK, MKK) */
+ 
+ 	NFEPS		/* Number of FEPs defined */
+ };
+ 
+ #ifdef __cplusplus
+ extern "C" {
+ int	__CDECL	fep_init(void);
+ void	__CDECL	fep_term(void);
+ void	__CDECL	fep_on(void);
+ void	__CDECL	fep_off(void);
+ void	__CDECL	fep_force_on(void);
+ void	__CDECL	fep_force_off(void);
+ int	__CDECL	fep_raw_init(void);
+ void	__CDECL	fep_raw_term(void);
+ int	__CDECL	fep_get_mode(void);
+ }
+ #else
+ int	__CDECL	fep_init(void);
+ void	__CDECL	fep_term(void);
+ void	__CDECL	fep_on(void);
+ void	__CDECL	fep_off(void);
+ void	__CDECL	fep_force_on(void);
+ void	__CDECL	fep_force_off(void);
+ int	__CDECL	fep_raw_init(void);
+ void	__CDECL	fep_raw_term(void);
+ int	__CDECL	fep_get_mode(void);
+ #endif
+ 
+ #endif /* __FEPCTRL_H */
diff -crN ../orig/src/fepnt.c ./src/fepnt.c
*** ../orig/src/fepnt.c	Thu Jan 01 09:00:00 1970
--- ./src/fepnt.c	Sun Aug 22 07:36:04 1999
***************
*** 0 ****
--- 1,332 ----
+ /*
+  * WindowsNT support (minimum function for jelvis)
+  *   Written by Tomonori.Watanabe (GCD02235@niftyserve.or.jp)
+  *                                (tom_w@st.rim.or.jp)
+  *
+  * This version is freely redistributable.
+  */
+ /*
+  * add function for jvim
+  *   add by K.Tsuchida (ken_t@st.rim.or.jp/gdh01571@niftyserve.or.jp)
+  */
+ 
+ /*
+  * General purpose Japanese FEP control routines for MS-DOS.
+  * Original is Written by Junn Ohta (ohta@src.ricoh.co.jp, msa02563)
+  *
+  *	int fep_init(void)
+  *		checks FEP and turn it off, returns FEP type.
+  *	void fep_term(void)
+  *		restore the status of FEP saved by fep_init().
+  *	void fep_on(void)
+  *		restore the status of FEP saved by fep_off().
+  *	void fep_off(void)
+  *		save the status of FEP and turn it off.
+  *	void fep_force_on(void)
+  *		turn FEP on by its default "on" status.
+  *	void fep_force_off(void)
+  *		don't save the status of FEP and turn it off.
+  *	int fep_get_mode(void)
+  *		return the current status of FEP (0 = off).
+  *
+  */
+ #ifdef FEPCTRL
+ 
+ #include <windows.h>
+ #include <winnls32.h>
+ #include <ime.h>
+ #include <stdlib.h>				/* getenv() prototype defined */
+ #include "fepctrl.h"
+ 
+ static HGLOBAL		imeheap = NULL;
+ static long			imeParam;
+ static IMESTRUCT	*ime	= NULL;
+ static HWND			console;
+ static DWORD		fep_initial_state;
+ static DWORD		fep_state;
+ static BOOL			ime_initial_state;
+ static BOOL			ime_state;
+ static DWORD		fep_err;
+ static IMEPRO		ImeProfile;
+ 
+ typedef LRESULT	(WINAPI *SIMEME)(HWND, LPARAM);
+ typedef BOOL	(WINAPI *WINNLSGES)(HWND);
+ typedef BOOL	(WINAPI *WINNLSEIME)(HWND, BOOL);
+ typedef BOOL	(WINAPI *IGetIME)(HWND, LPIMEPRO);
+ typedef HWND	(WINAPI *IGetDefaultIMEWnd)(HWND);
+ typedef	HIMC	(WINAPI *IGetContext)(HWND);
+ typedef	BOOL	(WINAPI *ISetCompositionWindow)(HIMC, LPCOMPOSITIONFORM);
+ typedef	BOOL	(WINAPI *IReleaseContext)(HWND, HIMC);
+ typedef BOOL	(WINAPI *IGetOpenStatus)(HIMC);
+ typedef BOOL	(WINAPI *ISetOpenStatus)(HIMC, BOOL);
+ 
+ static SIMEME					pSendIMEMessageEx		= NULL;
+ static WINNLSGES				pWINNLSGetEnableStatus	= NULL;
+ static WINNLSEIME				pWINNLSEnableIME		= NULL;
+ static IGetIME					pIGetIME				= NULL;
+ static HANDLE					hWLibrary				= NULL;
+ static IGetDefaultIMEWnd		pIGetDefaultIMEWnd		= NULL;
+ static IGetContext				pIGetContext			= NULL;
+ static ISetCompositionWindow	pISetCompositionWindow	= NULL;
+ static IReleaseContext			pIReleaseContext		= NULL;
+ static IGetOpenStatus			pIGetOpenStatus			= NULL;
+ static ISetOpenStatus			pISetOpenStatus			= NULL;
+ static HANDLE					hILibrary				= NULL;
+ 
+ #define VIM_GUI
+ #ifdef VIM_GUI
+ extern HWND						hVimWnd;
+ extern int						GuiWin;
+ #endif
+ 
+ int
+ fep_init()
+ {
+ 	UINT		w;
+ 
+ 	if (imeheap != NULL)
+ 		return (FEP_MSKANJI);
+ 
+ 	w = SetErrorMode(SEM_NOOPENFILEERRORBOX);
+ 	hWLibrary = LoadLibrary("user32.dll");
+ 	SetErrorMode(w);
+ 	if (hWLibrary == NULL)
+ 		return (FEP_NONE);
+ 	pSendIMEMessageEx
+ 			= (SIMEME)GetProcAddress(hWLibrary, "SendIMEMessageExA");
+ 	pWINNLSGetEnableStatus
+ 			= (WINNLSGES)GetProcAddress(hWLibrary, "WINNLSGetEnableStatus");
+ 	pWINNLSEnableIME
+ 			= (WINNLSEIME)GetProcAddress(hWLibrary, "WINNLSEnableIME");
+ 	pIGetIME = (IGetIME)GetProcAddress(hWLibrary, "IMPGetIMEA");
+ 	if (pSendIMEMessageEx == NULL || pWINNLSGetEnableStatus == NULL
+ 								|| pWINNLSEnableIME == NULL || pIGetIME == NULL)
+ 	{
+ 		FreeLibrary(hWLibrary);
+ 		hWLibrary = NULL;
+ 		return (FEP_NONE);
+ 	}
+ 	w = SetErrorMode(SEM_NOOPENFILEERRORBOX);
+ 	hILibrary = LoadLibrary("imm32.dll");
+ 	SetErrorMode(w);
+ 	if (hILibrary != NULL)
+ 	{
+ 		pIGetDefaultIMEWnd = (IGetDefaultIMEWnd)
+ 				GetProcAddress(hILibrary, "ImmGetDefaultIMEWnd");
+ 		pIGetOpenStatus = (IGetOpenStatus)
+ 				GetProcAddress(hILibrary, "ImmGetOpenStatus");
+ 		pISetOpenStatus = (ISetOpenStatus)
+ 				GetProcAddress(hILibrary, "ImmSetOpenStatus");
+ 		pIGetContext = (IGetContext)
+ 				GetProcAddress(hILibrary, "ImmGetContext");
+ 		pISetCompositionWindow = (ISetCompositionWindow)
+ 				GetProcAddress(hILibrary, "ImmSetCompositionWindow");
+ 		pIReleaseContext = (IReleaseContext)
+ 				GetProcAddress(hILibrary, "ImmReleaseContext");
+ 		if (pIGetDefaultIMEWnd == NULL || pIGetOpenStatus == NULL
+ 				|| pISetOpenStatus == NULL || pIGetContext == NULL
+ 				|| pISetCompositionWindow == NULL || pIReleaseContext == NULL)
+ 		{
+ 			FreeLibrary(hILibrary);
+ 			hILibrary = NULL;
+ 		}
+ 	}
+ 	ime = NULL;
+ 	console = GetForegroundWindow();
+ 	if (!IsWindow(console))
+ 	{
+ 		fep_err = GetLastError();
+ 		return (FEP_NONE);
+ 	}
+ 	if ((imeheap = GlobalAlloc(GHND|GMEM_SHARE, ((sizeof(IMESTRUCT)+32)&~31))) == NULL)
+ 		return (FEP_NONE);
+ 	if ((ime = (IMESTRUCT *)GlobalLock(imeheap)) == NULL)
+ 	{
+ 		GlobalFree(imeheap);
+ 		imeheap = NULL;
+ 		return (FEP_NONE);
+ 	}
+ 	if ((pWINNLSGetEnableStatus)(NULL) == TRUE)
+ 		ime_initial_state = TRUE;
+ 	else
+ 	{
+ 		ime_initial_state = FALSE;
+ 		(*pWINNLSEnableIME)(NULL, TRUE);
+ 	}
+ 	imeParam = (long)imeheap;
+ 	ime->fnc = IME_GETOPEN;
+ 	GlobalUnlock(imeheap);
+ 	fep_initial_state = (*pSendIMEMessageEx)(console, imeParam);
+ 	fep_state = fep_initial_state;
+ 	fep_force_off();
+ 	pIGetIME(NULL, &ImeProfile);
+ 	return (FEP_MSKANJI);
+ }
+ 
+ void
+ fep_term()
+ {
+ 	if (imeheap != NULL && (ime = (IMESTRUCT *)GlobalLock(imeheap)) != NULL)
+ 	{
+ 		ime->fnc = IME_SETOPEN;
+ 		ime->wParam = fep_initial_state;
+ 		GlobalUnlock(imeheap);
+ 		(*pSendIMEMessageEx)(console, imeParam);
+ 		GlobalFree(imeheap);
+ 		imeheap = NULL;
+ 		if (ime_initial_state != TRUE)
+ 			(*pWINNLSEnableIME)(NULL, FALSE);
+ 		FreeLibrary(hWLibrary);
+ 		if (hILibrary != NULL)
+ 			FreeLibrary(hILibrary);
+ 	}
+ }
+ 
+ void
+ fep_on()
+ {
+ 	if (imeheap != NULL && (ime = (IMESTRUCT *)GlobalLock(imeheap)) != NULL)
+ 	{
+ 		ime->fnc = IME_SETOPEN;
+ 		ime->wParam = fep_state;
+ 		GlobalUnlock(imeheap);
+ 		(*pSendIMEMessageEx)(console, imeParam);
+ 	}
+ }
+ 
+ void
+ fep_off()
+ {
+ 	if (imeheap != NULL && (ime = (IMESTRUCT *)GlobalLock(imeheap)) != NULL)
+ 	{
+ 		ime->fnc = IME_GETOPEN;
+ 		GlobalUnlock(imeheap);
+ 		fep_state = (*pSendIMEMessageEx)(console, imeParam);
+ 	}
+ 	fep_force_off();
+ }
+ 
+ void
+ fep_force_off()
+ {
+ #ifdef VIM_GUI
+ 	if (GuiWin)
+ 	{
+ 		HWND				hIWnd;
+ 		HIMC				hImc;
+ 
+ 		if ((hIWnd = (*pIGetDefaultIMEWnd)(hVimWnd)) == NULL)
+ 			return;
+ 		hImc = (*pIGetContext)(hIWnd);
+ 		(*pISetOpenStatus)(hImc, FALSE);
+ 		(*pIReleaseContext)(hVimWnd, hImc);
+ 		return;
+ 	}
+ #endif
+ 	if (imeheap != NULL && (ime = (IMESTRUCT *)GlobalLock(imeheap)) != NULL)
+ 	{
+ 		ime->fnc = IME_SETOPEN;
+ 		ime->wParam = FALSE;
+ 		GlobalUnlock(imeheap);
+ 		(*pSendIMEMessageEx)(console, imeParam);
+ 	}
+ }
+ 
+ void
+ fep_force_on()
+ {
+ #ifdef VIM_GUI
+ 	if (GuiWin)
+ 	{
+ 		HWND				hIWnd;
+ 		HIMC				hImc;
+ 
+ 		if ((hIWnd = (*pIGetDefaultIMEWnd)(hVimWnd)) == NULL)
+ 			return;
+ 		hImc = (*pIGetContext)(hIWnd);
+ 		(*pISetOpenStatus)(hImc, TRUE);
+ 		(*pIReleaseContext)(hVimWnd, hImc);
+ 		return;
+ 	}
+ #endif
+ 	if (imeheap != NULL && (ime = (IMESTRUCT *)GlobalLock(imeheap)) != NULL)
+ 	{
+ 		ime->fnc = IME_SETOPEN;
+ 		ime->wParam = TRUE;
+ 		GlobalUnlock(imeheap);
+ 		(*pSendIMEMessageEx)(console, imeParam);
+ 	}
+ }
+ 
+ int
+ fep_get_mode()
+ {
+ #ifdef VIM_GUI
+ 	if (GuiWin)
+ 	{
+ 		HWND				hIWnd;
+ 		HIMC				hImc;
+ 		BOOL				ret;
+ 
+ 		if ((hIWnd = (*pIGetDefaultIMEWnd)(hVimWnd)) == NULL)
+ 			return(FALSE);
+ 		hImc = (*pIGetContext)(hIWnd);
+ 		ret = (*pIGetOpenStatus)(hImc);
+ 		(*pIReleaseContext)(hVimWnd, hImc);
+ 		return(ret);
+ 	}
+ #endif
+ 	if (imeheap != NULL && (ime = (IMESTRUCT *)GlobalLock(imeheap)) != NULL)
+ 	{
+ 		ime->fnc = IME_GETOPEN;
+ 		GlobalUnlock(imeheap);
+ 		return((*pSendIMEMessageEx)(console, imeParam));
+ 	}
+ 	return(0);
+ }
+ 
+ /*
+  *	WINDOWS IME display sync routine
+  */
+ void
+ fep_win_sync(hWnd)
+ HWND			hWnd;
+ {
+ 	HIMC			hImc;
+ 	COMPOSITIONFORM	CompForm;
+ 
+ 	if (hILibrary != NULL)
+ 	{
+ 		CompForm.dwStyle = CFS_POINT;
+ 		GetCaretPos((LPPOINT) &CompForm.ptCurrentPos);
+ 		hImc = (*pIGetContext)(hWnd);
+ 		(*pISetCompositionWindow)(hImc, (COMPOSITIONFORM FAR*)&CompForm);
+ 		(*pIReleaseContext)(hWnd, hImc);
+ 	}
+ }
+ 
+ /*
+  *	WINDOWS IME display font routine
+  */
+ void
+ fep_win_font(hWnd, font)
+ HWND		hWnd;
+ LOGFONT	*	font;
+ {
+ 	HANDLE		hWork;
+ 	LPLOGFONT	pFont;
+ 
+ 	if (imeheap != NULL && (ime = (IMESTRUCT *)GlobalLock(imeheap)) != NULL)
+ 	{
+ 		ime->fnc = IME_SETCONVERSIONFONTEX;
+ 		hWork = GlobalAlloc (GMEM_SHARE | GMEM_MOVEABLE, sizeof(LOGFONT));
+ 		pFont = (LPLOGFONT)GlobalLock(hWork);
+ 		*pFont = *font;
+ 		ime->lParam1 = (LPARAM)hWork;
+ 		(*pSendIMEMessageEx)(hWnd, (LPARAM)ime);
+ 		GlobalUnlock(hWork);
+ 		GlobalUnlock(ime);
+ 		GlobalFree(hWork);
+ 	}
+ }
+ #endif
diff -crN ../orig/src/feponew.c ./src/feponew.c
*** ../orig/src/feponew.c	Thu Jan 01 09:00:00 1970
--- ./src/feponew.c	Mon Mar 22 01:07:50 1999
***************
*** 0 ****
--- 1,941 ----
+ /* feponew.c */
+ 
+ /*
+  * Author:
+  *	  Ken'ichi Tsuchida
+  *    ken_t@st.rim.or.jp
+  *
+  * BASE code (canna.c)
+  *	  Nobuyuki Koganemaru
+  *	  kogane@kces.koganemaru.co.jp
+  *	  Jun-ichiro "itojun" Itoh/ESD
+  *	  itojun@foretune.co.jp / itojun@mt.cs.keio.ac.jp / JINnet itojun
+  */
+ 
+ #ifdef ONEW
+ #include "vim.h"
+ #include "globals.h"
+ #include "proto.h"
+ #include "param.h"
+ #include "kanji.h"
+ 
+ extern void		Onew_kakutei __ARGS((int));
+ extern int		Onew_RK_init __ARGS((void));
+ extern void		Onew_RK_cmode_set __ARGS((int));
+ extern void		Onew_KK_freqsave __ARGS((void));
+ extern int		Onew_RK_imode __ARGS((void));
+ extern int		Onew_kanakan __ARGS((int, char *, int, int));
+ extern int		Onew_romkan __ARGS((void));
+ extern int		Onew_putmode __ARGS((char *, char *));
+ extern int		Onew_putmsg __ARGS((int, char *, char *, char *));
+ extern int		ouiTrace __ARGS((char *, char *, int, int));
+ 
+ #if 0
+ # define		DTRC(_1, _2, _3, _4)	onewTrace(_1, _2, _3, _4)
+ #else
+ # define		DTRC(_1, _2, _3, _4)
+ #endif
+ 
+ static void		onewTrace __PARMS((char *, char *, int, int));
+ static void		onew_msg __PARMS((char_u *, int *, int *));
+ static void		onew_clrmsg __PARMS((void));
+ static void		onew_ulstart __PARMS((void));
+ static void		onew_ulstop __PARMS((void));
+ 
+ /* variables visible to external */
+ static int				onew_mode = FALSE;		/* actual conversion mode */
+ static int				onew_esc  = FALSE;		/* escape key input */
+ 
+ /* input controls */
+ #define MAXBUF			1024
+ static unsigned char	inbuf[MAXBUF];
+ static int				ilen = 0;
+ static unsigned char	outbuf[MAXBUF];
+ static int				ohead = 0;
+ static int				otail = 0;
+ static unsigned char	knjbuf[MAXBUF];
+ static unsigned char	wrkbuf[MAXBUF];
+ static unsigned char	msgbuf[MAXBUF];
+ static int				prev_mode;
+ static char			*	prev_help = NULL;
+ static int				kakutei_char = (-1);
+ static int				nouline = FALSE;
+ 
+ /* internal controls */
+ static int				ready = FALSE;	/* initialized? */
+ 
+ /* screen controls */
+ static int				visualmode = FALSE;
+ static int				disp_row;
+ static int				disp_col;
+ static int				mline  = FALSE;
+ static int				sline  = FALSE;
+ static int				cline  = FALSE;
+ static int				fence  = TRUE;
+ static int				o_smd;
+ static int				o_ru;
+ static int				freq_save = FALSE;
+ 
+ /*------------------------------------------------------------*/
+ int
+ ONEW_PEEKCHAR(timeout)
+ int		*	timeout;
+ {
+ 	*timeout = -1;
+ 	return(0);
+ }
+ 
+ int
+ ONEW_GETCHAR()
+ {
+ 	static char_u	kanji = K_NUL;
+ 	char_u			k1;
+ 	int				c;
+ 
+ 	if (kanji != K_NUL)
+ 	{
+ 		c = kanji;
+ 		c &= 0xff;
+ 		kanji = K_NUL;
+ 		return(c);
+ 	}
+ 	k1 = vgetc() & 0xff;
+ 	if (k1 == K_SPECIAL)
+ 		return(0xffffff80);
+ 	if (ISkanji(k1))
+ 	{
+ 		kanji = vgetc() & 0xff;
+ 		kanjito(&k1, &kanji, JP_EUC);
+ 	}
+ 	else if (ISkana(k1))
+ 	{
+ 		kanato(&k1, &kanji, JP_EUC);
+ 	}
+ 	c = k1;
+ 	c &= 0xff;
+ 	/* BOW can not input Ctrl('@'). Ctrl('Z') is not assinged edit.c */
+ 	DTRC("@ONEW_GETCHAR", "'%c'", c, c == Ctrl('Z') ? c = NUL : 0);
+ 	if (c == ESC)
+ 		onew_esc = TRUE;
+ 	else
+ 		onew_esc = FALSE;
+ 	if ((0 <= c && c <= 0x20)
+ 				&& (p_fk != NULL && STRRCHR(p_fk, c + '@') != NULL))
+ 		c = K_ZERO;
+ 	return(c);
+ }
+ 
+ void
+ ONEW_GOT_2BCHAR(buf, a, b)
+ char	*	buf;
+ char		a;
+ char		b;
+ {
+ 	DTRC("@ONEW_GOT_2BCHAR", "%c%c", a, b);
+ 	sprintf(buf, "%c%c", a, b);
+ }
+ 
+ int
+ ONEW_KANAKAN(ch)
+ int			ch;
+ {
+ 	DTRC("@ONEW_KANAKAN:S", "'%c'", ch, 0);
+ 	if (ilen != 0)
+ 	{
+ 		inbuf[ilen] = NUL;
+ 		ch = Onew_kanakan(ch, inbuf, 0, ilen);
+ 		freq_save = TRUE;
+ 		Onew_kakutei(ch);
+ 		DTRC("@ONEW_KANAKAN:E", "'%c'", ch, 0);
+ 	}
+ 	else if (ch == ' ')
+ 		nouline = TRUE;
+ 	return(ch);
+ }
+ 
+ int
+ ONEW_KAKUTEI(ch)
+ int			ch;
+ {
+ 	DTRC("@ONEW_KAKUTEI:S", "%c", ch, 0);
+ 	if (0 < ilen)
+ 	{
+ 		if (ch == BS || ch == DEL)
+ 		{
+ 			knjbuf[0]	= NUL;
+ 			kakutei_char = ch;
+ 			return(1);
+ 		}
+ 		else
+ 		{
+ 			if (knjbuf[0])
+ 			{
+ 				DTRC("@ONEW_KAKUTEI:K", "[%s]", (int)knjbuf, 0);
+ 				otail += kanjiconvsfrom(knjbuf, STRLEN(knjbuf),
+ 								&outbuf[otail], sizeof(outbuf) - otail,
+ 								NULL, JP_EUC, NULL);
+ 			}
+ 			else
+ 			{
+ 				DTRC("@ONEW_KAKUTEI:I", "[%s]", (int)inbuf, 0);
+ 				otail += kanjiconvsfrom(inbuf, STRLEN(inbuf),
+ 								&outbuf[otail], sizeof(outbuf) - otail,
+ 								NULL, JP_EUC, NULL);
+ 			}
+ 			outbuf[otail] = NUL;
+ 			knjbuf[0]	= NUL;
+ 			ilen		= 0;
+ 			inbuf[0]	= NUL;
+ 			kakutei_char = ch;
+ 			return(0);
+ 		}
+ 	}
+ 	if (visualmode)
+ 	{
+ 		if (sline)
+ 			win_redr_status(curwin);
+ 		if (mline != TRUE)
+ 			updateline();
+ 		else
+ 			win_update(curwin);
+ 	}
+ 	else
+ 		redrawcmdline();
+ 	DTRC("@ONEW_KAKUTEI:E", "", 0, 0);
+ 	return(0);
+ }
+ 
+ int
+ ONEW_MESSAGE_COLS()
+ {
+ 	return(Columns - 1);
+ }
+ 
+ void
+ ONEW_MESSAGE(so, form, a, b, c, d, e)
+ int			so;
+ char	*	form, *a, *b, *c, *d, *e;
+ {
+ 	DTRC("@ONEW_MESSAGE", "%d %d", visualmode, onew_mode);
+ 	if (onew_mode)
+ 	{
+ 		sprintf(wrkbuf, form, a, b, c, d, e);
+ 		DTRC("@ONEW_MESSAGE", "%s", (int)wrkbuf, 0);
+ 		kanjiconvsfrom(wrkbuf, STRLEN(wrkbuf), msgbuf, sizeof(msgbuf), NULL, JP_EUC, NULL);
+ 		if (ISkanji(msgbuf[Columns - 2]))
+ 			msgbuf[Columns - 2] = NUL;
+ 		msgbuf[Columns - 1] = NUL;
+ 		if (!p_ordw && so)
+ 		{
+ 			set_highlight('s');
+ 			start_highlight();
+ 		}
+ 		if (visualmode)
+ 		{
+ 			gotocmdline(TRUE, NUL);
+ 			outstrn(msgbuf);
+ 		}
+ 		else
+ 		{
+ 			disp_row = disp_col = 0;
+ 			/*
+ 			windgoto(0, 0);
+ 			if (T_EL != NULL && *T_EL != NUL)
+ 				outstr(T_EL);
+ 			flushbuf();
+ 			*/
+ 			screen_fill(0, 1, 0, (int)Columns, ' ', ' ');
+ 			onew_msg(msgbuf, &disp_row, &disp_col);
+ 		}
+ 		flushbuf();
+ 		if (!p_ordw && so)
+ 			stop_highlight();
+ 		setcursor();
+ 	}
+ }
+ 
+ void
+ ONEW_DISP_ROMKANMODE(mode, help, imode)
+ char	*	mode;
+ char	*	help;
+ int			imode;
+ {
+ 	DTRC("@ONEW_DISP_ROMKANMODE", "%s,%s", (int)mode, (int)help);
+ #if 1
+ 	if (onew_mode)
+ 	{
+ 		int		i;
+ 		int		row;
+ 
+ 		if (visualmode)
+ 			row = Rows;
+ 		else
+ 			row = 1;
+ 		set_highlight('s');
+ 		start_highlight();
+ 		if (mode == NULL)
+ 		{
+ 			i = kanjiconvsfrom(help, STRLEN(help), IObuff, IOSIZE, NULL, JP_EUC, NULL);
+ 			IObuff[i] = NUL;
+ 			for (; i < Columns; i++)
+ 				IObuff[i] = ' ';
+ 			if (ISkanji(IObuff[Columns - 2]))
+ 				IObuff[Columns - 2] = NUL;
+ 			IObuff[Columns - 1] = NUL;
+ 			disp_row = row - 1;
+ 			disp_col = 0;
+ 			onew_msg(IObuff, &disp_row, &disp_col);
+ 		}
+ 		else if (prev_help == NULL || help == NULL
+ 						|| strcmp(prev_help, help) != 0 || prev_mode != imode)
+ 		{
+ 			i  = kanjiconvsfrom(mode, STRLEN(mode), IObuff, IOSIZE, NULL, JP_EUC, NULL);
+ 			IObuff[i] = NUL;
+ 			i += kanjiconvsfrom(help, STRLEN(help), &IObuff[i], IOSIZE - i, NULL, JP_EUC, NULL);
+ 			IObuff[i] = NUL;
+ 			for (; i < Columns; i++)
+ 				IObuff[i] = ' ';
+ 			if (ISkanji(IObuff[Columns - 2]))
+ 				IObuff[Columns - 2] = NUL;
+ 			IObuff[Columns - 1] = NUL;
+ 			disp_row = row - 1;
+ 			disp_col = 0;
+ 			onew_msg(IObuff, &disp_row, &disp_col);
+ 		}
+ 		stop_highlight();
+ 	}
+ #else
+ 	if (mode == NULL)
+ 		Onew_putmsg(FALSE, "", NULL, NULL);
+ 	else if (prev_help == NULL || help == NULL
+ 						|| strcmp(prev_help, help) != 0 || prev_mode != imode)
+ 		Onew_putmsg(FALSE, "%s %s", mode, help);
+ #endif
+ 	prev_mode = imode;
+ 	prev_help = help;
+ }
+ 
+ int
+ ONEW_DISP_KANAKANB(so, l, c, r)
+ int			so;
+ char	*	l;			/* left char	*/
+ char	*	c;			/* current char */
+ char	*	r;			/* right char	*/
+ {
+ 	int			i;
+ 
+ 	DTRC("@ONEW_DISP_KANAKANB", "%d[%s]", so, (int)l);
+ 	DTRC("@ONEW_DISP_KANAKANB", "[%s][%s]", (int)c, (int)r);
+ 	sprintf(knjbuf, "%s%s%s", l, c, r);
+ 	/* start display */
+ 	if (visualmode)
+ 	{
+ 		if (sline)
+ 			win_redr_status(curwin);
+ 		if (cline)
+ 		{
+ 			onew_clrmsg();
+ 			Onew_putmode(NULL, NULL);
+ 		}
+ 		if (mline != TRUE)
+ 			updateline();
+ 		else
+ 			win_update(curwin);
+ 		disp_row = curwin->w_winpos + curwin->w_row;
+ 		disp_col = curwin->w_col;
+ 	}
+ 	else
+ 	{
+ 		redrawcmdline();
+ 		disp_row = msg_row;
+ 		disp_col = msg_col;
+ 	}
+ 	if (fence)
+ 		onew_msg("|", &disp_row, &disp_col);
+ 	/* display left char */
+ 	if (l != NULL && *l != NUL)
+ 	{
+ 		if (!fence)
+ 			onew_ulstart();
+ 		i = kanjiconvsfrom(l, STRLEN(l), wrkbuf, sizeof(wrkbuf), NULL, JP_EUC, NULL);
+ 		wrkbuf[i] = NUL;
+ 		onew_msg(wrkbuf, &disp_row, &disp_col);
+ 		if (!fence)
+ 			onew_ulstop();
+ 	}
+ 	/* display current char */
+ 	if (c != NULL && *c != NUL)
+ 	{
+ 		set_highlight('F');
+ 		start_highlight();
+ 		i = kanjiconvsfrom(c, STRLEN(c), wrkbuf, sizeof(wrkbuf), NULL, JP_EUC, NULL);
+ 		wrkbuf[i] = NUL;
+ 		onew_msg(wrkbuf, &disp_row, &disp_col);
+ 		stop_highlight();
+ 	}
+ 	/* display right char */
+ 	if (r != NULL && *r != NUL)
+ 	{
+ 		if (!fence)
+ 			onew_ulstart();
+ 		i = kanjiconvsfrom(r, STRLEN(r), wrkbuf, sizeof(wrkbuf), NULL, JP_EUC, NULL);
+ 		wrkbuf[i] = NUL;
+ 		onew_msg(wrkbuf, &disp_row, &disp_col);
+ 		if (!fence)
+ 			onew_ulstop();
+ 	}
+ 	if (fence)
+ 		onew_msg("|", &disp_row, &disp_col);
+ 	/* windgoto(Rows - 1, Columns - 1); */
+ 	return(0);
+ }
+ 
+ int
+ ONEW_DISP_KANAHALVES(str)
+ char	*	str;
+ {
+ 	int			len	= 0;
+ 
+ 	DTRC("@ONEW_DISP_KANAHALVES", "%s:%x", (int)str, *str);
+ 	DTRC("@ONEW_DISP_KANAHALVES", "%x:%x", (int)onew_esc, onew_esc);
+ 	if (onew_esc)
+ 		return(0);
+ 	if (*str == ' ')		/* Back Space */
+ 	{
+ 		if (visualmode)
+ 		{
+ 			if (sline)
+ 				win_redr_status(curwin);
+ 			if (cline)
+ 			{
+ 				onew_clrmsg();
+ 				Onew_putmode(NULL, NULL);
+ 			}
+ 			if (mline != TRUE)
+ 				updateline();
+ 			else
+ 				win_update(curwin);
+ 		}
+ 		else
+ 			redrawcmdline();
+ 	}
+ 	if (inbuf[0] != NUL)
+ 	{
+ 		len = kanjiconvsfrom(inbuf, STRLEN(inbuf), wrkbuf, sizeof(wrkbuf),
+ 															NULL, JP_EUC, NULL);
+ 	}
+ 	wrkbuf[len] = NUL;
+ 	if (*str != ' ')
+ 		strcat(wrkbuf, str);
+ 	if (visualmode)
+ 	{
+ 		disp_row = curwin->w_winpos + curwin->w_row;
+ 		disp_col = curwin->w_col;
+ 	}
+ 	else
+ 	{
+ 		disp_row = msg_row;
+ 		disp_col = msg_col;
+ 	}
+ 	if (wrkbuf[0] != NUL)
+ 	{
+ 		if (!fence)
+ 			onew_ulstart();
+ 		onew_msg(wrkbuf, &disp_row, &disp_col);
+ 		if (!fence)
+ 			onew_ulstop();
+ 	}
+ 	return(0);
+ }
+ 
+ void
+ ONEW_BEEP()
+ {
+ 	beep();
+ }
+ 
+ /*------------------------------------------------------------*/
+ static void
+ onewTrace(title, fmt, a1, a2)
+ char_u	*	title;
+ char_u	*	fmt;
+ int		 	a1, a2;
+ {
+ 	static FILE		*fp = NULL;
+ 
+ 	if (fp == NULL)
+ 	{
+ 		if ((fp = fopen("onew.trc", "w+")) == NULL)
+ 			return;
+ 		fputs("start trace\n", fp);
+ 	}
+ 	fprintf(fp, "%s ", title);
+ 	fprintf(fp, fmt, a1, a2);
+ 	fprintf(fp, "\n");
+ }
+ 
+ static void
+ onew_msg(msg, row, col)
+ char_u	*	msg;
+ int		*	row;
+ int		*	col;
+ {
+ 	while (*msg)
+ 	{
+ 		screen_msg(msg, *row, *col);
+ 		while (*msg && *col < Columns)
+ 		{
+ 			if (ISkanji(*msg))
+ 			{
+ 				if (*col == Columns - 1)
+ 				{
+ 					screen_msg("\\", *row, *col);
+ 					*row += 1;
+ 					*col  = 0;
+ 					break;
+ 				}
+ 				*col += 1;
+ 				++msg;
+ 			}
+ 			*col += 1;
+ 			++msg;
+ 		}
+ 		if (*col >= Columns)
+ 		{
+ 			*col  = 0;
+ 			*row += 1;
+ 		}
+ 		if (*row >= Rows)
+ 			break;
+ 	}
+ 	flushbuf();
+ }
+ 
+ static void
+ onew_clrmsg()
+ {
+ 	DTRC("@onew_clrmsg", "", 0, 0);
+ 	prev_mode = 0;
+ 	prev_help = NULL;
+ 	Onew_curmsg("");
+ 	if (visualmode)
+ 	{
+ 		gotocmdline(TRUE, NUL);
+ 		windgoto(Rows - 1, 0);
+ 		if (T_EL != NULL && *T_EL != NUL)
+ 			outstr(T_EL);
+ 		else
+ 		{
+ 			memset(wrkbuf, ' ', Columns);
+ 			wrkbuf[Columns - 1] = NUL;
+ 			outstr(wrkbuf);
+ 		}
+ 	}
+ 	else
+ 	{
+ 		WIN		*	wp;
+ 		WIN		*	twp;
+ 		linenr_t	lnum;
+ 		linenr_t	tlnum;
+ 
+ 		twp = firstwin;
+ 		while (twp != NULL)
+ 		{
+ 			if (twp->w_winpos == 0)
+ 				break;
+ 			twp = twp->w_next;
+ 		}
+ 		if (twp == NULL)
+ 			return;
+ 		tlnum = twp->w_topline;
+ 		wp = curwin;
+ 		lnum = curwin->w_cursor.lnum;
+ 
+ 		win_enter(twp, TRUE);
+ 		curwin->w_cursor.lnum = tlnum;
+ 		windgoto(0, 0);
+ 		if (T_EL != NULL && *T_EL != NUL)
+ 			outstr(T_EL);
+ 		RedrawingDisabled++;
+ 		cursupdate();
+ 		RedrawingDisabled--;
+ 		setcursor();
+ 		screen_fill(0, 1, 0, (int)Columns, ' ', ' ');
+ 		updateline();
+ 
+ 		win_enter(wp, TRUE);
+ 		curwin->w_cursor.lnum = lnum;
+ 	}
+ 	flushbuf();
+ }
+ 
+ static void
+ onew_ulstart()
+ {
+ 	set_highlight('f');
+ 	start_highlight();
+ }
+ 
+ static void
+ onew_ulstop()
+ {
+ 	stop_highlight();
+ }
+ 
+ /*------------------------------------------------------------*/
+ /*
+  * internal interface for onew
+  */
+ 
+ /* inject key stroke into onew, and fill reply buffer if needed. */
+ void
+ onew_inject(ch)
+ int			ch;
+ {
+ 	int				len;
+ 	int				row;
+ 	int				col;
+ 	int				i;
+ 
+ 	DTRC("@onew_inject:S", "", 0, 0);
+ 	if (visualmode)
+ 	{
+ 		if (inbuf[0] == NUL)
+ 		{
+ 			Onew_putmode(NULL, NULL);
+ 			RedrawingDisabled++;
+ 			cursupdate();
+ 			RedrawingDisabled--;
+ 			setcursor();
+ 			updateline();
+ 		}
+ 		row = curwin->w_winpos + curwin->w_row;
+ 		col = curwin->w_col;
+ 	}
+ 	else
+ 	{
+ 		redrawcmdline();
+ 		row = msg_row;
+ 		col = msg_col;
+ 	}
+ 	DTRC("@onew_inject:P", "%d:%d", row, col);
+ 	if (inbuf[0] != NUL)
+ 	{
+ 		DTRC("@onew_inject:B", "%s", (int)inbuf, 0);
+ 		len = kanjiconvsfrom(inbuf, STRLEN(inbuf), wrkbuf, sizeof(wrkbuf),
+ 															NULL, JP_EUC, NULL);
+ 		wrkbuf[len] = NUL;
+ 		if (!fence && !nouline)
+ 			onew_ulstart();
+ 		onew_msg(wrkbuf, &row, &col);
+ 		if (!fence && !nouline)
+ 			onew_ulstop();
+ 		DTRC("@onew_inject:X", "%d:%d", len, disp_col);
+ 		if (visualmode)
+ 		{
+ 			cline = sline = mline = FALSE;
+ 			if (row >= (curwin->w_winpos + curwin->w_height))
+ 			{
+ 				if (row >= Rows - 1)
+ 					cline = TRUE;
+ 				else
+ 					sline = TRUE;
+ 			}
+ 			for (i = 0, len = 0; i < Rows; i++)
+ 			{
+ 				if (curwin->w_lsize_lnum[i] == curwin->w_cursor.lnum)
+ 				{
+ 					DTRC("@BS:1", "%d:%d", len, curwin->w_winpos);
+ 					DTRC("@BS:2", "%d:%d", row, curwin->w_lsize[i]);
+ 					len += curwin->w_winpos;
+ 					if (curwin->w_lsize[i] == 0 && len == row)
+ 						mline = FALSE;
+ 					else if (curwin->w_lsize[i] == 0)
+ 						mline = TRUE;
+ 					else if (len <= row && row <= (len + curwin->w_lsize[i] -1))
+ 						mline = FALSE;
+ 					else
+ 						mline = TRUE;
+ 					DTRC("@BS:3", "%d:%d", cline, sline);
+ 					DTRC("@BS:4", "%d:%d", mline, curwin->w_height);
+ 					break;
+ 				}
+ 				else
+ 					len += curwin->w_lsize[i];
+ 			}
+ 		}
+ 	}
+ 	nouline = FALSE;
+ 	ch = Onew_romkan() & 0xff;
+ 	DTRC("@onew_inject:I", "%x:%x", ch, kakutei_char);
+ 	switch (ch) {
+ 	case ESC:
+ 		if (inbuf[0] != NUL)
+ 			Onew_kakutei(ch);
+ 		onew_clrmsg();
+ 		outbuf[otail++]	= ch;
+ 		outbuf[otail]	= NUL;
+ 		break;
+ 	case NL:
+ 	case CR:
+ 		if (inbuf[0] != NUL)
+ 			Onew_kakutei(ch);
+ 		else if (kakutei_char != ch)
+ 		{
+ 			outbuf[otail++]	= ch;
+ 			if (p_ordw)
+ 				onew_clrmsg();
+ 		}
+ 		outbuf[otail]	= NUL;
+ 		break;
+ 	case 0x80:
+ 		if (inbuf[0] != NUL)
+ 			Onew_kakutei(ch);
+ 		outbuf[otail++]	= K_SPECIAL;
+ 		outbuf[otail]	= NUL;
+ 		break;
+ 	case K_ZERO:
+ 		if (inbuf[0] != NUL)
+ 			Onew_kakutei(ch);
+ 		onew_clrmsg();
+ 		outbuf[otail++]	= *p_fk - '@';
+ 		outbuf[otail]	= NUL;
+ 		break;
+ 	case DEL:
+ 	case BS:
+ 		if (kakutei_char == ch)
+ 			break;
+ 		if (ilen > 0)
+ 		{
+ 			ilen--;
+ 			if (0x80 & inbuf[ilen])
+ 				ilen--;
+ 			inbuf[ilen] = NUL;
+ 		}
+ 		else
+ 		{
+ 			outbuf[otail++] = ch;
+ 			outbuf[otail]	= NUL;
+ 		}
+ 		if (visualmode)
+ 		{
+ 			if (sline)
+ 				win_redr_status(curwin);
+ 			if (cline)
+ 			{
+ 				onew_clrmsg();
+ 				Onew_putmode(NULL, NULL);
+ 			}
+ 			if (mline != TRUE)
+ 				updateline();
+ 			else
+ 				win_update(curwin);
+ 		}
+ 		break;
+ 	default:
+ 		if (kakutei_char != ch)
+ 		{
+ 			if (ch <= ' ')
+ 			{
+ 				if (inbuf[0] != NUL)
+ 					Onew_kakutei(ch);
+ 				outbuf[otail++]	= ch;
+ 				outbuf[otail]	= NUL;
+ 			}
+ 			else
+ 			{
+ 				if (ilen >= sizeof(inbuf)
+ 						|| (visualmode
+ 								&& row >= (curwin->w_winpos + curwin->w_height)
+ 								&& col >= (Columns / 2)))
+ 				{
+ 					onew_clrmsg();
+ 					beep();
+ 					emsg("onew input buffer empty");
+ 					if (ch & 0x80)
+ 						Onew_romkan();
+ 					if (cline)
+ 						Onew_putmode(NULL, NULL);
+ 				}
+ 				else
+ 				{
+ 					inbuf[ilen++] = ch;
+ 					if (ch & 0x80)
+ 						inbuf[ilen++] = Onew_romkan() & 0xff;
+ 					inbuf[ilen] = NUL;
+ 				}
+ 			}
+ 		}
+ 		break;
+ 	}
+ 	kakutei_char = (-1);
+ 	DTRC("@onew_inject:E", "%x:%x", ilen, ch);
+ }
+ 
+ /* check if onew reply buffer is filled. */
+ int
+ onew_isready()
+ {
+ 	return(ohead != otail);
+ }
+ 
+ /* fetch a character from onew reply buffer. */
+ int
+ onew_getkey()
+ {
+ 	int			ret;
+ 
+ 	if (!ready)
+ 		return(-1);
+ 	if (ohead == otail)
+ 		return(-1);
+ 	ret = outbuf[ohead++];
+ 	DTRC("@onew_getkey", "%x", ret, 0);
+ 	if (ohead == otail)
+ 	{
+ 		ohead = 0;
+ 		otail = 0;
+ 		outbuf[0] = NUL;
+ 		DTRC("@onew_getkey:clear", "%x", ret, 0);
+ 		if (cline)
+ 			onew_clrmsg();
+ 		if (sline)
+ 			win_redr_status(curwin);
+ 	}
+ 	return(ret);
+ }
+ 
+ /* Switch the screen control mode.
+  * flag = FALSE: switch to dumb mode. (for ex mode)
+  * flag = TRUE:  switch to visual mode. (for vi input mode)
+  */
+ void
+ onew_visualmode(flag)
+ int			flag;
+ {
+ 	if (!ready)
+ 		return;
+ 	visualmode = flag;
+ }
+ 
+ /* resize notification */
+ void
+ onew_resize()
+ {
+ 	onew_visualmode(visualmode);
+ }
+ 
+ /*------------------------------------------------------------*/
+ /*
+  * external fepctrl-based interface for onew
+  */
+ 
+ static	int	keepmode = FALSE;	/* onew is active in input mode?
+ 								 * (onew will be active when fep_on())
+ 								 */
+ 
+ int
+ onew_init()
+ {
+ 	if (Onew_RK_init())
+ 	{
+ 		Onew_RK_cmode_set('@');
+ 		ready = TRUE;
+ 		fence = TRUE;
+ 		if (T_US != NULL && *T_US != NUL)
+ 			fence = FALSE;
+ 	}
+ 	DTRC("@onew_init", "%x", ready, 0);
+ 	return(ready);
+ }
+ 
+ void
+ onew_term()
+ {
+ 	if (!ready)
+ 		return;
+ 	DTRC("@onew_term", "", 0, 0);
+ 	Onew_KK_freqsave();
+ 	ready = FALSE;
+ }
+ 
+ void
+ onew_on()
+ {
+ 	if (!ready)
+ 		return;
+ 	DTRC("@onew_on", "%x", keepmode, 0);
+ 	if (keepmode)
+ 		onew_force_on();
+ }
+ 
+ void
+ onew_off()
+ {
+ 	if (!ready)
+ 		return;
+ 	DTRC("@onew_off", "%x", keepmode, 0);
+ 	keepmode = onew_mode;
+ 	onew_force_off();
+ }
+ 
+ void
+ onew_force_on()
+ {
+ 	if (!ready || onew_mode)
+ 		return;
+ 	DTRC("@onew_force_on", "", 0, 0);
+ 	onew_mode = TRUE;
+ 	onew_esc  = FALSE;
+ 	Onew_RK_cmode_set('h');
+ 	o_smd		= p_smd;
+ 	o_ru		= p_ru;
+ 	p_smd		= FALSE;
+ 	if (curwin->w_status_height == 0)
+ 		p_ru	= FALSE;
+ }
+ 
+ void
+ onew_force_off()
+ {
+ 	if (!ready || !onew_mode)
+ 		return;
+ 	DTRC("@onew_force_off", "", 0, 0);
+ 	onew_mode = FALSE;
+ 	Onew_RK_cmode_set('@');
+ 	p_smd		= o_smd;
+ 	p_ru		= o_ru;
+ 	if (p_smd || p_ru)
+ 		showmode();
+ 	if (!visualmode)
+ 	{
+ 		onew_clrmsg();
+ 		redrawcmdline();
+ 	}
+ }
+ 
+ int
+ onew_get_mode()
+ {
+ 	if (!ready)
+ 		return(0);
+ 	DTRC("@onew_get_mode", "%x", Onew_RK_imode(), 0);
+ 	return(Onew_RK_imode());
+ }
+ 
+ /*
+  * onew_freqsave();	save dictionary contents
+  */
+ void
+ onew_freqsave()
+ {
+ 	if (freq_save)
+ 	{
+ 		smsg("saving kanji frequency...");
+ 		Onew_KK_freqsave();
+ 		smsg("");
+ 		freq_save = FALSE;
+ 	}
+ }
+ 
+ #endif	/*ONEW*/
diff -crN ../orig/src/fepseq.c ./src/fepseq.c
*** ../orig/src/fepseq.c	Thu Jan 01 09:00:00 1970
--- ./src/fepseq.c	Wed Jan 15 20:33:16 1997
***************
*** 0 ****
--- 1,69 ----
+ /* vi:ts=4:sw=4
+  *
+  * General purpose Japanese FEP control routines for MS-DOS.
+  * Original is Written by Junn Ohta (ohta@src.ricoh.co.jp, msa02563)
+  *
+  *	void fep_force_on(void)
+  *		turn FEP on by its default "on" status.
+  *	void fep_force_off(void)
+  *		don't save the status of FEP and turn it off.
+  *	int fep_get_mode(void)
+  *		return the current status of FEP (0 = off).
+  *
+  */
+ #ifdef FEPCTRL
+ 
+ #include "vim.h"
+ #include "proto.h"
+ 
+ static int	fep_status = 0;
+ static int	keepmode = 0;
+ 
+ void fep_force_off()
+ {
+ 	if (fep_status == 1)
+ 	{
+ 		if (T_FQ)
+ 			outstr(T_FQ);
+ 	}
+ 	fep_status = 0;
+ }
+ 
+ void fep_force_on()
+ {
+ 	if (fep_status == 0)
+ 	{
+ 		if (T_FB)
+ 			outstr(T_FB);
+ 	}
+ 	fep_status = 1;
+ }
+ 
+ int fep_get_mode()
+ {
+ 	return fep_status;
+ }
+ 
+ int fep_init()
+ {
+ 	return 1;
+ }
+ 
+ void fep_term()
+ {
+ 	;
+ }
+ 
+ void fep_on()
+ {
+ 	if (keepmode)
+ 		fep_force_on();
+ }
+ 
+ void fep_off()
+ {
+ 	keepmode = fep_status;
+ 	fep_force_off();
+ }
+ 
+ #endif	/* FEPCTRL */
diff -crN ../orig/src/fileio.c ./src/fileio.c
*** ../orig/src/fileio.c	Wed Aug 10 13:54:10 1994
--- ./src/fileio.c	Sun Dec 26 18:49:56 1999
***************
*** 29,46 ****
--- 29,61 ----
  #ifdef LATTICE
  # include <proto/dos.h>		/* for Lock() and UnLock() */
  #endif
+ #ifdef KANJI
+ #include "kanji.h"
+ #endif
  
  #define BUFSIZE		8192			/* size of normal write buffer */
  #define SBUFSIZE	256				/* size of emergency write buffer */
  
  static int  write_buf __ARGS((int, char_u *, int));
  static void do_mlines __ARGS((void));
+ #ifdef USE_OPT
+ static char_u *opt_delet	__ARGS((char_u *, int, int, int, int));
+ #endif
+ #if defined(NT) && defined(USE_EXFILE) && defined(USE_MATOME)
+ static int			do_encode	= FALSE;
+ static char_u	*	encode_name	= NULL;
+ static BUF		*	encode_buf;
+ #endif
  
  	void
  filemess(name, s)
  	char_u		*name;
  	char_u		*s;
  {
+ #if defined(NT) && defined(USE_EXFILE) && defined(USE_MATOME)
+ 	if (DoMatome)
+ 		return;
+ #endif
  		/* careful: home_replace calls vimgetenv(), which also uses IObuff! */
  	home_replace(name, IObuff + 1, IOSIZE - 1);
  	IObuff[0] = '"';
***************
*** 107,112 ****
--- 122,133 ----
  	int					textmode = curbuf->b_p_tx;		/* accept CR-LF for line break */
  	struct stat			st;
  	int					readonly;
+ #ifdef KANJI
+ 	char_u				*code = curbuf->b_p_jc;
+ # ifdef USE_OPT
+ 	int					tail = FALSE;
+ # endif
+ #endif
  
  	/*
  	 * If there is no file name yet, use the one for the read file.
***************
*** 135,141 ****
--- 156,166 ----
  	 * On Unix it is possible to read a directory, so we have to
  	 * check for it before the open().
  	 */
+ # ifdef KANJI
+ 	perm = getperm(fileconvsto(fname));
+ # else
  	perm = getperm(fname);
+ # endif
  # ifdef _POSIX_SOURCE
  	if (perm >= 0 && !S_ISREG(perm))				/* not a regular file */
  # else
***************
*** 157,163 ****
--- 182,192 ----
  	if (newfile && !readonlymode)			/* default: set file not readonly */
  		curbuf->b_p_ro = FALSE;
  
+ #ifdef KANJI
+ 	if (newfile && stat(fileconvsto(fname), &st) != -1)
+ #else
  	if (newfile && stat((char *)fname, &st) != -1)	/* remember time of file */
+ #endif
  		curbuf->b_mtime = st.st_mtime;
  	else
  		curbuf->b_mtime = 0;
***************
*** 168,181 ****
--- 197,224 ----
   */
  	readonly = FALSE;
  #ifdef UNIX
+ # ifdef KANJI
+ 	if (!(perm & 0222) || access(fileconvsto(fname), 2))
+ 		readonly = TRUE;
+ 	fd = open(fileconvsto(fname), O_RDONLY);
+ # else
  	if (!(perm & 0222) || access((char *)fname, 2))
  		readonly = TRUE;
  	fd = open((char *)fname, O_RDONLY);
+ # endif
  #else
+ # ifdef KANJI
+ 	if (!newfile || readonlymode || (fd = open(fileconvsto(fname), O_RDWR)) < 0)
+ # else
  	if (!newfile || readonlymode || (fd = open((char *)fname, O_RDWR)) < 0)
+ # endif
  	{
  		readonly = TRUE;
+ # ifdef KANJI
+ 		fd = open(fileconvsto(fname), O_RDONLY);	/* try to open ro */
+ # else
  		fd = open((char *)fname, O_RDONLY);			/* try to open ro */
+ # endif
  	}
  #endif
  
***************
*** 193,199 ****
--- 236,246 ----
  	/*
  	 * On MSDOS and Amiga we can't open a directory, check here.
  	 */
+ # ifdef KANJI
+ 		if (isdir(fileconvsto(fname)) == TRUE)
+ # else
  		if (isdir(fname) == TRUE)
+ # endif
  			filemess(fname, (char_u *)"is a directory");
  		else
  #endif
***************
*** 207,212 ****
--- 254,262 ----
  					filemess(fname, (char_u *)"[Permission Denied]");
  #endif
  
+ #ifdef KANJI
+ 			*code = JP_FILE;
+ #endif
  		return FAIL;
  	}
  	if (newfile && readonly)					/* set file readonly */
***************
*** 227,233 ****
  		 * The amount is limited by the fact that read() only can read
  		 * upto max_unsigned characters (and other things).
  		 */
! #if defined(AMIGA) || defined(MSDOS)
  		if (sizeof(int) <= 2 && linerest >= 0x7ff0)
  		{
  			++split;
--- 277,283 ----
  		 * The amount is limited by the fact that read() only can read
  		 * upto max_unsigned characters (and other things).
  		 */
! #if (defined(AMIGA) || defined(MSDOS)) && !defined(NT)
  		if (sizeof(int) <= 2 && linerest >= 0x7ff0)
  		{
  			++split;
***************
*** 237,243 ****
  		else
  #endif
  		{
! #if !(defined(AMIGA) || defined(MSDOS))
  			if (sizeof(int) > 2)
  				size = 0x10000L;				/* read 64K at a time */
  			else
--- 287,293 ----
  		else
  #endif
  		{
! #if !(defined(AMIGA) || defined(MSDOS)) || defined(NT)
  			if (sizeof(int) > 2)
  				size = 0x10000L;				/* read 64K at a time */
  			else
***************
*** 261,273 ****
  			buffer = new_buffer;
  			ptr = buffer + linerest;
  			line_start = buffer;
- 			
  			if ((size = read(fd, (char *)ptr, (size_t)size)) <= 0)
  			{
  				if (size < 0)				/* read error */
  					error = TRUE;
  				break;
  			}
  			filesize += size;				/* count the number of characters */
  
  			/*
--- 311,335 ----
  			buffer = new_buffer;
  			ptr = buffer + linerest;
  			line_start = buffer;
  			if ((size = read(fd, (char *)ptr, (size_t)size)) <= 0)
  			{
  				if (size < 0)				/* read error */
  					error = TRUE;
  				break;
  			}
+ #ifdef KANJI
+ 			if (firstpart && isupper(*code))
+ 				*code = judge_jcode(code, ptr, size);
+ # ifdef UCODE
+ #  ifdef USE_OPT
+ 			if (!(p_opt & OPT_ORG_BINMODE) && curbuf->b_p_bin)
+ 				;
+ 			else
+ #  endif
+ 			if (toupper(*code) == JP_WIDE)	/* UNICODE */
+ 				size = wide2multi(ptr, size, firstpart);
+ # endif
+ #endif
  			filesize += size;				/* count the number of characters */
  
  			/*
***************
*** 300,305 ****
--- 362,401 ----
  		--ptr;
  		while (++ptr, --size >= 0)
  		{
+ #if defined(KANJI) && defined(USE_OPT)
+ 			if (!(p_opt & OPT_ORG_BINMODE) && curbuf->b_p_bin)
+ 			{
+ 				if ((ptr - line_start + 1) == 16)
+ 				{
+ 					char_u		tmp[81];
+ 
+ 					binaryconvsfrom(lnum, toupper(*code), &tail, line_start, ptr - line_start + 1, tmp);
+ 					tmp[80] = NUL;	/* end of line */
+ 					if (ml_append(lnum, tmp, strlen(tmp) + 1, newfile) == FAIL)
+ 					{
+ 						error = TRUE;
+ 						break;
+ 					}
+ 					++lnum;
+ 					if (--nlines == 0)
+ 					{
+ 						error = TRUE;		/* break loop */
+ 						line_start = ptr;	/* nothing left to write */
+ 						break;
+ 					}
+ 					line_start = ptr + 1;
+ 				}
+ 				continue;
+ 			}
+ #endif
+ #ifdef USE_OPT
+ 			if (curbuf->b_p_opt & FOPT_MAC_FILE)
+ 			{
+ 				if ((c = *ptr) != NUL && c != NL && !(c == CR && ptr[1] != NL))
+ 					continue;
+ 			}
+ 			else
+ #endif
  			if ((c = *ptr) != NUL && c != NL)	/* catch most common case */
  				continue;
  			if (c == NUL)
***************
*** 315,325 ****
--- 411,456 ----
  						ptr[-1] = NUL;
  						--len;
  					}
+ #ifdef KANJI
+ 					{
+ 						char_u	*tmp;
+ 						colnr_t	 n;
+ 
+ 						n = len * 2 + 1;
+ 						if ((tmp = lalloc(n, TRUE)) == NULL)
+ 						{
+ 							error = TRUE;
+ 							break;
+ 						}
+ 						n = kanjiconvsfrom(line_start, len - 1,
+ 									tmp, n, NULL, toupper(*code), NULL);
+ 						tmp[n] = NUL;	/* end of line */
+ # ifdef USE_OPT
+ 						if (curbuf->b_p_opt & FOPT_EXTEND)
+ 						{
+ 							tmp = opt_delet(tmp,
+ 										curbuf->b_p_opt & FOPT_EXPAND_TAB,
+ 										curbuf->b_p_opt & FOPT_DEL_SPC,
+ 										curbuf->b_p_opt & FOPT_REP_SPC,
+ 										(int)curbuf->b_p_ts);
+ 							n = strlen(tmp);
+ 						}
+ # endif
+ 						if (ml_append(lnum, tmp, n + 1, newfile) == FAIL)
+ 						{
+ 							free(tmp);
+ 							error = TRUE;
+ 							break;
+ 						}
+ 						free(tmp);
+ 					}
+ #else
  					if (ml_append(lnum, line_start, len, newfile) == FAIL)
  					{
  						error = TRUE;
  						break;
  					}
+ #endif
  					++lnum;
  					if (--nlines == 0)
  					{
***************
*** 358,371 ****
  		if (newfile && curbuf->b_p_bin)		/* remember for when writing */
  			curbuf->b_p_eol = FALSE;
  		*ptr = NUL;
  		if (ml_append(lnum, line_start, (colnr_t)(ptr - line_start + 1), newfile) == FAIL)
  			error = TRUE;
  		else
  			++lnum;
  	}
  	if (lnum != from && !newfile)	/* added at least one line */
  		CHANGED;
- 
  	close(fd);
  	free(buffer);
  
--- 489,551 ----
  		if (newfile && curbuf->b_p_bin)		/* remember for when writing */
  			curbuf->b_p_eol = FALSE;
  		*ptr = NUL;
+ #ifdef KANJI
+ 		while (1)
+ 		{
+ 			char_u	*tmp;
+ 			int		n;
+ 
+ # ifdef USE_OPT
+ 			if (!(p_opt & OPT_ORG_BINMODE) && curbuf->b_p_bin)
+ 			{
+ 				char_u		tmp[81];
+ 
+ 				binaryconvsfrom(lnum, toupper(*code), &tail, line_start, ptr - line_start, tmp);
+ 				tmp[80] = NUL;	/* end of line */
+ 				if (ml_append(lnum, tmp, strlen(tmp) + 1, newfile) == FAIL)
+ 					error = TRUE;
+ 				else
+ 					++lnum;
+ 				incomplete = FALSE;
+ 				break;
+ 			}
+ # endif
+ 			n = (ptr - line_start) * 2 + 1;
+ 			if ((tmp = lalloc(n, TRUE)) == NULL)
+ 			{
+ 				error = TRUE;
+ 				break;
+ 			}
+ 			n = kanjiconvsfrom(line_start, ptr - line_start,
+ 										tmp, n, NULL, toupper(*code), NULL);
+ 			tmp[n] = NUL;	/* end of line */
+ # ifdef USE_OPT
+ 			if (curbuf->b_p_opt & FOPT_EXTEND)
+ 			{
+ 				tmp = opt_delet(tmp,
+ 							curbuf->b_p_opt & FOPT_EXPAND_TAB,
+ 							curbuf->b_p_opt & FOPT_DEL_SPC,
+ 							curbuf->b_p_opt & FOPT_REP_SPC,
+ 							(int)curbuf->b_p_ts);
+ 				n = strlen(tmp);
+ 			}
+ # endif
+ 			if (ml_append(lnum, tmp, n + 1, newfile) == FAIL)
+ 				error = TRUE;
+ 			else
+ 				lnum++;
+ 			free(tmp);
+ 			break;
+ 		}
+ #else
  		if (ml_append(lnum, line_start, (colnr_t)(ptr - line_start + 1), newfile) == FAIL)
  			error = TRUE;
  		else
  			++lnum;
+ #endif
  	}
  	if (lnum != from && !newfile)	/* added at least one line */
  		CHANGED;
  	close(fd);
  	free(buffer);
  
***************
*** 382,387 ****
--- 562,580 ----
  	screenclear();
  #endif
  
+ #if defined(NT) && defined(USE_EXFILE) && defined(USE_MATOME)
+ 	if (strchr(p_dc, 'a') && strchr(p_dc, 'r'))
+ 	{
+ 		static int		oflg = TRUE;
+ 
+ 		if (oflg)
+ 		{
+ 			oflg = FALSE;
+ 			decode(TRUE, from + 1, curbuf->b_ml.ml_line_count - linecnt);
+ 			oflg = TRUE;
+ 		}
+ 	}
+ #endif
  	linecnt = curbuf->b_ml.ml_line_count - linecnt;
  	if (!newfile)
  		mark_adjust(from + 1, MAXLNUM, (long)linecnt);
***************
*** 396,402 ****
--- 589,599 ----
  	home_replace(fname, IObuff + 1, IOSIZE - 1);
  	IObuff[0] = '"';
  	sprintf((char *)IObuff + STRLEN(IObuff),
+ #ifdef KANJI
+ 					"\" %s%s%s%s%s%ld line%s, %ld character%s [%c]",
+ #else
  					"\" %s%s%s%s%s%ld line%s, %ld character%s",
+ #endif
  			curbuf->b_p_ro ? "[readonly] " : "",
  			incomplete ? "[Incomplete last line] " : "",
  			split ? "[long lines split] " : "",
***************
*** 407,413 ****
--- 604,614 ----
  			textmode ? "[textmode] " : "",
  #endif
  			(long)linecnt, plural((long)linecnt),
+ #ifdef KANJI
+ 			filesize, plural(filesize), toupper(*code));
+ #else
  			filesize, plural(filesize));
+ #endif
  	msg(IObuff);
  
  	if (error && newfile)	/* with errors we should not write the file */
***************
*** 498,505 ****
--- 699,708 ----
  	 * Avoids problems with networks and when directory names are changed.
  	 */
  	ffname = fname;							/* remember full fname */
+ #if !defined(NT) || defined(notdef)
  	if (!did_cd)
  		fname = sfname;
+ #endif
  
  	/*
  	 * Disallow writing from .exrc and .vimrc in current directory for
***************
*** 530,536 ****
--- 733,743 ----
  #if defined(UNIX) && !defined(ARCHIE)
  		/* get information about original file (if there is one) */
  	old.st_dev = old.st_ino = 0;
+ # ifdef KANJI
+ 	if (stat(fileconvsto(fname), &old))
+ # else
  	if (stat((char *)fname, &old))
+ # endif
  		newfile = TRUE;
  	else
  	{
***************
*** 556,563 ****
--- 763,775 ----
   * If we are not appending, the file exists, and the 'writebackup', 'backup'
   * or 'patchmode' option is set, try to make a backup copy of the file.
   */
+ #ifdef KANJI
+ 	if (!append && perm >= 0 && (p_wb || p_bk || (p_pm != NULL && *p_pm != NUL)) &&
+ 					(fd = open(fileconvsto(fname), O_RDONLY)) >= 0)
+ #else
  	if (!append && perm >= 0 && (p_wb || p_bk || (p_pm != NULL && *p_pm != NUL)) &&
  					(fd = open((char *)fname, O_RDONLY)) >= 0)
+ #endif
  	{
  		int				bfd, buflen;
  		char_u			copybuf[BUFSIZE + 1], *wp;
***************
*** 583,590 ****
--- 795,807 ----
  				some_error = TRUE;			/* out of memory */
  				goto nobackup;
  			}			
+ #ifdef KANJI
+ 			if (!stat(fileconvsto(backup), &new) &&
+ 						new.st_dev == old.st_dev && new.st_ino == old.st_ino)
+ #else
  			if (!stat((char *)backup, &new) &&
  						new.st_dev == old.st_dev && new.st_ino == old.st_ino)
+ #endif
  			{
  				/*
  				 * may happen when modname gave the same file back.
***************
*** 601,609 ****
--- 818,834 ----
  				}
  			}
  			else
+ #ifdef KANJI
+ 				remove(fileconvsto(backup));
+ #else
  				remove((char *)backup);		/* remove old backup, if present */
+ #endif
  		}
+ #ifdef KANJI
+ 		if (backup == NULL || (bfd = open(fileconvsto(backup), O_WRONLY | O_CREAT, 0666)) < 0)
+ #else
  		if (backup == NULL || (bfd = open((char *)backup, O_WRONLY | O_CREAT, 0666)) < 0)
+ #endif
  		{
  			/* 
  			 * 'backupdir' starts with '>' or  no write/create permission
***************
*** 617,632 ****
--- 842,867 ----
  				some_error = TRUE;			/* out of memory */
  				goto nobackup;
  			}
+ #ifdef KANJI
+ 			if (!stat(fileconvsto(backup), &new) &&
+ 						new.st_dev == old.st_dev && new.st_ino == old.st_ino)
+ #else
  			if (!stat((char *)backup, &new) &&
  						new.st_dev == old.st_dev && new.st_ino == old.st_ino)
+ #endif
  			{
  				errmsg = (char_u *)"Invalid backup file (use ! to override)";
  				free(backup);
  				backup = NULL;	/* there is no backup file to delete */
  				goto nobackup;
  			}
+ #ifdef KANJI
+ 			remove(fileconvsto(backup));
+ 			if ((bfd = open((char *)fileconvsto(backup), O_WRONLY | O_CREAT, 0666)) < 0)
+ #else
  			remove((char *)backup);
  			if ((bfd = open((char *)backup, O_WRONLY | O_CREAT, 0666)) < 0)
+ #endif
  			{
  				free(backup);
  				backup = NULL;	/* there is no backup file to delete */
***************
*** 635,641 ****
--- 870,880 ----
  			}
  		}
  		/* set file protection same as original file, but strip s-bit */
+ #ifdef KANJI
+ 		(void)setperm(fileconvsto(backup), perm & 0777);
+ #else
  		(void)setperm(backup, perm & 0777);
+ #endif
  
  		/* copy the file. */
  		while ((buflen = read(fd, (char *)copybuf, BUFSIZE)) > 0)
***************
*** 664,670 ****
--- 903,913 ----
  	if (forceit && (old.st_uid == getuid()) && perm >= 0 && !(perm & 0200))
   	{
  		perm |= 0200;	
+ #ifdef KANJI
+ 		(void)setperm(fileconvsto(fname), perm);
+ #else
  		(void)setperm(fname, perm);
+ #endif
  		made_writable = TRUE;
  			/* if we are writing to the current file, readonly makes no sense */
  		if (fname == buf->b_filename || fname == buf->b_sfilename)
***************
*** 679,688 ****
--- 922,939 ----
   * both switched off. This helps when editing large files on
   * almost-full disks. (jw)
   */
+ # ifdef KANJI
+ 	perm = getperm(fileconvsto(fname));
+ # else
  	perm = getperm(fname);
+ # endif
  	if (perm < 0)
  		newfile = TRUE;
+ # ifdef KANJI
+ 	else if (isdir(fileconvsto(fname)) == TRUE)
+ # else
  	else if (isdir(fname) == TRUE)
+ # endif
  	{
  		errmsg = (char_u *)"is a directory";
  		goto fail;
***************
*** 692,697 ****
--- 943,989 ----
  		/*
  		 * Form the backup file name - change path/fo.o.h to path/fo.o.h.bak
  		 */
+ # if defined(NT) && !defined(notdef)
+ 		if (p_bdir != NULL && *p_bdir != NUL)
+ 		{
+ 			char_u			copybuf[BUFSIZE + 1], *wp;
+ 
+ 			if (*p_bdir != '>')
+ 			{
+ 				backup = buf_modname(buf, fname, (char_u *)".bak");
+ 				if (backup == NULL)
+ 					goto nexttry;
+ #  ifdef KANJI
+ 				remove(fileconvsto(backup));
+ 				len = rename(fileconvsto(fname), fileconvsto(backup));
+ #  else
+ 				remove((char *)backup);
+ 				len = rename((char *)fname, (char *)backup);
+ #  endif
+ 				if (len != 0)
+ 				{
+ 					free(backup);
+ 					goto nexttry;
+ 				}
+ #  ifdef KANJI
+ 				rename(fileconvsto(backup), fileconvsto(fname));
+ #  else
+ 				rename((char *)backup, (char *)fname);
+ #  endif
+ 			}
+ 			else
+ 			{
+ nexttry:
+ 				wp = gettail(fname);
+ 				if (ispathsep(p_bdir[strlen(p_bdir) - 1]))
+ 					sprintf((char *)copybuf, "%s%s", *p_bdir == '>' ? p_bdir + 1 : p_bdir, wp);
+ 				else
+ 					sprintf((char *)copybuf, "%s\\%s", *p_bdir == '>' ? p_bdir + 1 : p_bdir, wp);
+ 				backup = buf_modname(buf, copybuf, (char_u *)".bak");
+ 			}
+ 		}
+ 		else
+ # endif
  		backup = buf_modname(buf, fname, (char_u *)".bak");
  		if (backup == NULL)
  		{
***************
*** 720,731 ****
--- 1012,1031 ----
  			 */
  			flock = Lock((UBYTE *)fname, (long)ACCESS_READ);
  #endif
+ #ifdef KANJI
+ 			remove(fileconvsto(backup));
+ #else
  			remove((char *)backup);
+ #endif
  #ifdef AMIGA
  			if (flock)
  				UnLock(flock);
  #endif
+ #ifdef KANJI
+ 			len = rename(fileconvsto(fname), fileconvsto(backup));
+ #else
  			len = rename((char *)fname, (char *)backup);
+ #endif
  			if (len != 0)
  			{
  				if (forceit)
***************
*** 760,768 ****
--- 1060,1074 ----
  	 * (this may happen when the user reached his quotum for number of files).
  	 * Appending will fail if the file does not exist and forceit is FALSE.
  	 */
+ #ifdef KANJI
+ 	while ((fd = open(fileconvsto(fname), O_WRONLY | (append ?
+ 					(forceit ? (O_APPEND | O_CREAT) : O_APPEND) :
+ 					(O_CREAT | O_TRUNC)), 0666)) < 0)
+ #else
  	while ((fd = open((char *)fname, O_WRONLY | (append ?
  					(forceit ? (O_APPEND | O_CREAT) : O_APPEND) :
  					(O_CREAT | O_TRUNC)), 0666)) < 0)
+ #endif
   	{
  		/*
  		 * A forced write will try to create a new file if the old one is
***************
*** 783,789 ****
--- 1089,1099 ----
  					perm &= 0777;
  #endif /* UNIX */
  				if (!append)		/* don't remove when appending */
+ #ifdef KANJI
+ 					remove(fileconvsto(fname));
+ #else
  					remove((char *)fname);
+ #endif
  				continue;
  			}
  		}
***************
*** 802,813 ****
--- 1112,1134 ----
  			 * This won't work if the backup is in another file system!
  			 * In that case we leave the copy around.
  			 */
+ # ifdef KANJI
+ 			if (stat(fileconvsto(fname), &st) < 0)
+ 				rename(fileconvsto(backup), fileconvsto(fname));
+ 			if (stat(fileconvsto(fname), &st) >= 0)
+ 				remove(fileconvsto(backup));
+ # else
  			if (stat((char *)fname, &st) < 0)	/* file does not exist */
  				rename((char *)backup, (char *)fname);	/* put the copy in its place */
  			if (stat((char *)fname, &st) >= 0)	/* original file does exist */
  				remove((char *)backup);	/* throw away the copy */
+ # endif
  #else
+ # ifdef KANJI
+  			rename(fileconvsto(backup), fileconvsto(fname));
+ # else
   			rename((char *)backup, (char *)fname);	/* try to put the original file back */
+ # endif
  #endif
  		}
   		goto fail;
***************
*** 819,833 ****
--- 1140,1256 ----
  	len = 0;
  	s = buffer;
  	nchars = 0;
+ #if defined(NT) && defined(USE_EXFILE) && defined(USE_MATOME)
+ 	if (strchr(buf->b_p_ec, 'b') || strchr(buf->b_p_ec, 'u'))
+ 	{
+ 		do_encode	= TRUE;
+ 		encode_name = gettail(fname);
+ 		encode_buf	= buf;
+ 	}
+ #endif
+ #if defined(KANJI) && defined(UCODE)
+ 	if (toupper(*buf->b_p_jc) == JP_WIDE && !append && !curbuf->b_p_bin)	/* UNICODE */
+ 	{
+ 		short_u		w = 0xfeff;		/* BOM */
+ 		if (write_buf(fd, (char *)&w, (size_t)2) == FAIL)
+ 			end = 0;
+ 		nchars = 2;
+ 	}
+ #endif
  	for (lnum = start; lnum <= end; ++lnum)
  	{
+ #ifdef KANJI
+ 		char_u	*tmpptr;
+ # ifdef UCODE
+ 		char_u	wrk[2];
+ # endif
+ #endif
  		/*
  		 * The next while loop is done once for each character written.
  		 * Keep it fast!
  		 */
  		ptr = ml_get_buf(buf, lnum, FALSE) - 1;
+ #ifdef KANJI
+ # ifdef USE_OPT
+ 		if (!(p_opt & OPT_ORG_BINMODE) && curbuf->b_p_bin)
+ 		{
+ 			int			wlen;
+ 
+ 			tmpptr = binaryconvsto(toupper(*buf->b_p_jc), ptr + 1, &wlen);
+ 			if (wlen && tmpptr)
+ 			{
+ 				if (write_buf(fd, tmpptr, wlen) == FAIL)
+ 				{
+ 					end = 0;				/* write error: break loop */
+ 					break;
+ 				}
+ 				nchars += wlen;
+ 			}
+ 			if (tmpptr)
+ 				free(tmpptr);
+ 			continue;
+ 		}
+ 		if (buf->b_p_opt & FOPT_EXTEND)
+ 		{
+ 			char_u	   *org;
+ 
+ 			org = alloc(strlen(ptr + 1) + 1);
+ 			strcpy(org, ptr + 1);
+ 			org = opt_delet(org,
+ 						buf->b_p_opt & FOPT_EXPAND_TAB,
+ 						buf->b_p_opt & FOPT_DEL_SPC,
+ 						buf->b_p_opt & FOPT_REP_SPC,
+ 						(int)buf->b_p_ts);
+ 			tmpptr = kanjiconvsto(org, toupper(*buf->b_p_jc));
+ 			free(org);
+ 		}
+ 		else
+ # endif
+ 		tmpptr = kanjiconvsto(ptr + 1, toupper(*buf->b_p_jc));
+ 		ptr = tmpptr - 1;
+ #endif
+ #if defined(KANJI) && defined(UCODE)
+ 		while ((toupper(*buf->b_p_jc) == JP_WIDE)
+ 											? TRUE : ((c = *++ptr) != NUL))
+ #else
  		while ((c = *++ptr) != NUL)
+ #endif
  		{
+ #if defined(KANJI) && defined(UCODE)
+ 			if (toupper(*buf->b_p_jc) == JP_WIDE)	/* UNICODE */
+ 			{
+ 				c = *++ptr;
+ 				wrk[0] = c;
+ 				wrk[1] = ptr[1];
+ 				if (wide2multi(wrk, 2, FALSE) == 1)
+ 				{
+ 					if (wrk[0] == NL)
+ 					{
+ 						s[0] = NUL;		/* replace newlines with NULs */
+ 						s[1] = NUL;		/* replace newlines with NULs */
+ 					}
+ 					else if (wrk[0] == NUL)
+ 					{
+ 						ptr++;
+ 						break;
+ 					}
+ 					else
+ 					{
+ 						s[0] = c;
+ 						s[1] = ptr[1];
+ 					}
+ 				}
+ 				else
+ 				{
+ 					s[0] = c;
+ 					s[1] = ptr[1];
+ 				}
+ 				++s;
+ 				++len;
+ 				++ptr;
+ 			}
+ 			else
+ #endif
  			if (c == NL)
  				*s = NUL;		/* replace newlines with NULs */
  			else
***************
*** 847,854 ****
--- 1270,1293 ----
  			/* write failed or last line has no EOL: stop here */
  		if (end == 0 || (buf->b_p_bin && lnum == buf->b_ml.ml_line_count && !buf->b_p_eol))
  			break;
+ #ifdef USE_OPT
+ 		if ((buf->b_p_opt & FOPT_MAC_FILE) || (buf->b_p_tx))
+ #else
  		if (buf->b_p_tx)		/* write CR-NL */
+ #endif
  		{
+ #if defined(KANJI) && defined(UCODE)
+ 			if (toupper(*buf->b_p_jc) == JP_WIDE)	/* UNICODE */
+ 			{
+ 				wrk[0] = CR;
+ 				multi2wide(&wrk[0], &wrk[1], 1);
+ 				s[0] = wrk[0];
+ 				s[1] = wrk[1];
+ 				++s;
+ 				++len;
+ 			}
+ 			else
+ #endif
  			*s = CR;
  			++s;
  			if (++len == bufsize)
***************
*** 863,868 ****
--- 1302,1330 ----
  				len = 0;
  			}
  		}
+ #ifdef KANJI
+ 		free(tmpptr);
+ #endif
+ #ifdef USE_OPT
+ 		if (buf->b_p_opt & FOPT_MAC_FILE)
+ 		{
+ 			--s;
+ 			--len;
+ 		}
+ 		else
+ #endif
+ #if defined(KANJI) && defined(UCODE)
+ 		if (toupper(*buf->b_p_jc) == JP_WIDE)	/* UNICODE */
+ 		{
+ 			wrk[0] = NL;
+ 			multi2wide(&wrk[0], &wrk[1], 1);
+ 			s[0] = wrk[0];
+ 			s[1] = wrk[1];
+ 			++s;
+ 			++len;
+ 		}
+ 		else
+ #endif
  		*s = NL;
  		++s;
  		if (++len == bufsize && end)
***************
*** 884,889 ****
--- 1346,1357 ----
  		nchars += len;
  	}
  
+ #if defined(NT) && defined(USE_EXFILE) && defined(USE_MATOME)
+ 	if (write_buf(fd, NULL, 0) == FAIL)
+ 		end = 0;				/* write error */
+ 	do_encode = FALSE;
+ #endif
+ 
  	if (close(fd) != 0)
  	{
  		errmsg = (char_u *)"Close failed";
***************
*** 894,900 ****
--- 1362,1372 ----
  		perm &= ~0200;			/* reset 'w' bit for security reasons */
  #endif
  	if (perm >= 0)
+ #ifdef KANJI
+ 		(void)setperm(fileconvsto(fname), perm);	/* set permissions of new file same as old file */
+ #else
  		(void)setperm(fname, perm);	/* set permissions of new file same as old file */
+ #endif
  
  	if (end == 0)
  	{
***************
*** 912,921 ****
--- 1384,1401 ----
  	--no_wait_return;		/* may wait for return now */
  
  		/* careful: home_replace calls vimgetenv(), which also uses IObuff! */
+ #if defined(NT) && !defined(notdef)
+ 	if (!did_cd)
+ 		fname = sfname;
+ #endif
  	home_replace(fname, IObuff + 1, IOSIZE - 1);
  	IObuff[0] = '"';
  	sprintf((char *)IObuff + STRLEN(IObuff),
+ #ifdef KANJI
+ 					"\"%s%s %ld line%s, %ld character%s [%c]",
+ #else
  					"\"%s%s %ld line%s, %ld character%s",
+ #endif
  			newfile ? " [New File]" : " ",
  #ifdef MSDOS
  			buf->b_p_tx ? "" : "[notextmode]",
***************
*** 923,929 ****
--- 1403,1413 ----
  			buf->b_p_tx ? "[textmode]" : "",
  #endif
  			(long)lnum, plural((long)lnum),
+ #ifdef KANJI
+ 			nchars, plural(nchars), toupper(*buf->b_p_jc));
+ #else
  			nchars, plural(nchars));
+ #endif
  	msg(IObuff);
  
  	if (reset_changed && whole)			/* when written everything */
***************
*** 960,968 ****
--- 1444,1460 ----
  			 */
  		    if (org == NULL)
  				EMSG("patchmode: can't save original file");
+ #ifdef KANJI
+ 			else if (stat(fileconvsto(org), &st) < 0)
+ #else
  			else if (stat(org, &st) < 0)
+ #endif
  			{
+ #ifdef KANJI
+ 			    rename(fileconvsto(backup), fileconvsto(org));
+ #else
  			    rename((char *)backup, org);
+ #endif
  				free(backup);			/* don't delete the file */
  				backup = NULL;
  			}
***************
*** 975,988 ****
--- 1467,1488 ----
  		{
  		    int fd;
  
+ #ifdef KANJI
+ 			if (org == NULL || (fd = open(fileconvsto(org), O_CREAT, 0666)) < 0)
+ #else
  			if (org == NULL || (fd = open(org, O_CREAT, 0666)) < 0)
+ #endif
  			  EMSG("patchmode: can't touch empty original file");
  		    else
  			  close(fd);
  		}
  	    if (org != NULL)
  		{
+ #ifdef KANJI
+ 		    setperm(fileconvsto(org), getperm(fileconvsto(fname)) & 0777);
+ #else
  		    setperm((char_u *)org, getperm(fname) & 0777);
+ #endif
  			free(org);
  		}
  	}
***************
*** 990,996 ****
--- 1490,1500 ----
  	/*
  	 * Remove the backup unless 'backup' option is set
  	 */
+ #ifdef KANJI
+ 	if (!p_bk && backup != NULL && remove(fileconvsto(backup)) != 0)
+ #else
  	if (!p_bk && backup != NULL && remove((char *)backup) != 0)
+ #endif
  		EMSG("Can't delete backup file");
  	
  	goto nofail;
***************
*** 1027,1040 ****
--- 1531,1574 ----
  {
  	int		wlen;
  
+ #if defined(NT) && defined(USE_EXFILE) && defined(USE_MATOME)
+ 	int		last = FALSE;
+ 	char_u	*tmp;
+ 
+ 	breakcheck();
+ 	if (do_encode)
+ 	{
+ 		if (buf == NULL && len == 0)
+ 			last = TRUE;
+ 		if ((tmp = encode(*encode_buf->b_p_ec, encode_name,
+ 				(encode_buf->b_p_opt & FOPT_MAC_FILE) ? 2 : (encode_buf->b_p_tx ? 1 : 0),
+ 				buf, &len, last)) == NULL)
+ 			return(FAIL);
+ 		if (!last)
+ 			return(OK);
+ 		buf = tmp;
+ 	}
+ #endif
  	while (len)
  	{
  		wlen = write(fd, (char *)buf, (size_t)len);
  		if (wlen <= 0)				/* error! */
+ #if defined(NT) && defined(USE_EXFILE) && defined(USE_MATOME)
+ 		{
+ 			if (do_encode)
+ 				free(tmp);
  			return FAIL;
+ 		}
+ #else
+ 			return FAIL;
+ #endif
  		len -= wlen;
  		buf += wlen;
  	}
+ #if defined(NT) && defined(USE_EXFILE) && defined(USE_MATOME)
+ 	if (do_encode)
+ 		free(tmp);
+ #endif
  	return OK;
  }
  
***************
*** 1051,1065 ****
--- 1585,1609 ----
  	linenr_t		lnum;
  	int 			nmlines;
  
+ #ifdef USE_OPT
+ 	if (!(p_opt & OPT_ORG_BINMODE) && curbuf->b_p_bin)
+ 		return;
+ #endif
  	if (!curbuf->b_p_ml || (nmlines = (int)p_mls) == 0)
  		return;
  
+ #ifdef NT
+ 	NoResize = TRUE;
+ #endif
  	for (lnum = 1; lnum <= curbuf->b_ml.ml_line_count && lnum <= nmlines; ++lnum)
  		chk_mline(lnum);
  
  	for (lnum = curbuf->b_ml.ml_line_count; lnum > 0 && lnum > nmlines &&
  							lnum > curbuf->b_ml.ml_line_count - nmlines; --lnum)
  		chk_mline(lnum);
+ #ifdef NT
+ 	NoResize = FALSE;
+ #endif
  }
  
  /*
***************
*** 1140,1146 ****
--- 1684,1694 ----
  	register char_u   *s;
  	register char_u   *ptr;
  	register int	fnamelen, extlen;
+ #ifdef notdef
  	char_u			currentdir[512];
+ #else
+ 	char_u			currentdir[MAXPATHL + 2];
+ #endif
  
  	extlen = STRLEN(ext);
  
***************
*** 1150,1156 ****
--- 1698,1715 ----
  	 */
  	if (fname == NULL || *fname == NUL)
  	{
+ #ifdef notdef
  		if (vim_dirname(currentdir, 510) == FAIL || (fnamelen = STRLEN(currentdir)) == 0)
+ #else
+ # ifdef KANJI
+ 		if (vim_dirname(currentdir, MAXPATHL) == FAIL)
+ 			return(NULL);
+ 		STRCPY(currentdir, fileconvsfrom(currentdir));
+ 		if ((fnamelen = STRLEN(currentdir)) == 0)
+ # else
+ 		if (vim_dirname(currentdir, MAXPATHL) == FAIL || (fnamelen = STRLEN(currentdir)) == 0)
+ # endif
+ #endif
  			return NULL;
  		if (!ispathsep(currentdir[fnamelen - 1]))
  		{
***************
*** 1175,1185 ****
  		 */
  		for (ptr = retval + fnamelen; ptr >= retval; ptr--)
  		{
! #ifndef MSDOS
  			if (buf->b_p_sn || buf->b_shortname)
  #endif
  				if (*ptr == '.')	/* replace '.' by '_' */
  					*ptr = '_';
  			if (ispathsep(*ptr))
  				break;
  		}
--- 1734,1747 ----
  		 */
  		for (ptr = retval + fnamelen; ptr >= retval; ptr--)
  		{
! #if !defined(MSDOS) || defined(NT)
  			if (buf->b_p_sn || buf->b_shortname)
  #endif
  				if (*ptr == '.')	/* replace '.' by '_' */
  					*ptr = '_';
+ #if defined(KANJI) && defined(MSDOS)
+ 			if (ISkanjiPointer(retval, ptr) != 2)
+ #endif
  			if (ispathsep(*ptr))
  				break;
  		}
***************
*** 1188,1194 ****
  		/* the filename has at most BASENAMELEN characters. */
  		if (STRLEN(ptr) > (unsigned)BASENAMELEN)
  			ptr[BASENAMELEN] = '\0';
! #ifndef MSDOS
  		if ((buf->b_p_sn || buf->b_shortname) && STRLEN(ptr) > (unsigned)8)
  			ptr[8] = '\0';
  #endif
--- 1750,1756 ----
  		/* the filename has at most BASENAMELEN characters. */
  		if (STRLEN(ptr) > (unsigned)BASENAMELEN)
  			ptr[BASENAMELEN] = '\0';
! #if !defined(MSDOS) || defined(NT)
  		if ((buf->b_p_sn || buf->b_shortname) && STRLEN(ptr) > (unsigned)8)
  			ptr[8] = '\0';
  #endif
***************
*** 1199,1209 ****
  		 * ext must start with '.' and cannot exceed 3 more characters.
  		 */
  		STRCPY(s, ext);
! #ifdef MSDOS
  		if (fname == NULL || *fname == NUL)		/* can't have just the extension */
  			*s = '_';
  #endif
  		if (fname != NULL && STRCMP(fname, retval) == 0)
  		{
  			/* after modification still the same name? */
  			/* we search for a character that can be replaced by '_' */
--- 1761,1775 ----
  		 * ext must start with '.' and cannot exceed 3 more characters.
  		 */
  		STRCPY(s, ext);
! #if defined(MSDOS) && !defined(NT)
  		if (fname == NULL || *fname == NUL)		/* can't have just the extension */
  			*s = '_';
  #endif
+ #ifndef MSDOS
  		if (fname != NULL && STRCMP(fname, retval) == 0)
+ #else
+ 		if (fname != NULL && fnamecmp(fname, retval) == 0)
+ #endif
  		{
  			/* after modification still the same name? */
  			/* we search for a character that can be replaced by '_' */
***************
*** 1261,1263 ****
--- 1827,1936 ----
  	return (eof == NULL);
  }
  #endif /* WEBB_COMPLETE */
+ 
+ #ifdef USE_OPT
+ 	static char_u *
+ opt_delet(buf, expand, delete, replace, ts)
+ 	char_u *buf;
+ 	int		expand;
+ 	int		delete;
+ 	int		replace;
+ 	int		ts;
+ {
+ 	char_u		*	cp	= buf;
+ 	int				add	= 0;
+ 	colnr_t			n;
+ 	colnr_t			col;
+ 	colnr_t			space = (-1);
+ 
+ 	if (expand && ts < 1)
+ 		expand = FALSE;
+ # ifdef KANJI
+ 	if (replace)
+ 	{
+ 		col = 0;
+ 		while (buf[col])
+ 		{
+ 			if (ISkanji(buf[col]))
+ 			{
+ 				if (buf[col] == 0x81 && buf[col+1] == 0x40)
+ 					buf[col] = buf[col+1] = ' ';
+ 				col += 2;
+ 			}
+ 			else
+ 				col++;
+ 		}
+ 	}
+ # endif
+ 	if (expand)
+ 	{
+ 		col = 0;
+ 		while (buf[col])
+ 		{
+ # ifdef KANJI
+ 			if (ISkanji(buf[col]))
+ 				col += 2;
+ 			else
+ # endif
+ 			{
+ 				if (buf[col] == '\t')
+ 					add += ts;
+ 				col++;
+ 			}
+ 		}
+ 		if ((cp = alloc(strlen(buf) + add + 1)) == NULL)
+ 		{
+ 			cp = buf;
+ 			expand = FALSE;
+ 		}
+ 	}
+ 	n = col = 0;
+ 	while (buf[col])
+ 	{
+ # ifdef KANJI
+ 		if (ISkanji(buf[col]))
+ 		{
+ 			if (buf[col] == 0x81 && buf[col+1] == 0x40)
+ 				space = (space != (-1)) ? space : n;
+ 			else
+ 				space = (-1);
+ 			cp[n++] = buf[col++];
+ 			cp[n++] = buf[col++];
+ 		}
+ 		else
+ # endif
+ 		if (buf[col] == '\t')
+ 		{
+ 			int			n_spaces;
+ 			int			i;
+ 
+ 			space = (space != (-1)) ? space : n;
+ 			if (expand)
+ 			{
+ 				n_spaces = ts - (n % ts);
+ 				for (i = 0; i < n_spaces; i++)
+ 					cp[n++] = ' ';
+ 				col++;
+ 			}
+ 			else
+ 				cp[n++] = buf[col++];
+ 		}
+ 		else if (buf[col] == ' ')
+ 		{
+ 			space = (space != (-1)) ? space : n;
+ 			cp[n++] = buf[col++];
+ 		}
+ 		else
+ 		{
+ 			space = (-1);
+ 			cp[n++] = buf[col++];
+ 		}
+ 	}
+ 	if (delete && space != (-1) && space < n)
+ 		n = space;
+ 	cp[n] = NUL;
+ 	if (expand)
+ 		free(buf);
+ 	return(cp);
+ }
+ #endif
diff -crN ../orig/src/getchar.c ./src/getchar.c
*** ../orig/src/getchar.c	Wed Aug 10 13:54:10 1994
--- ./src/getchar.c	Sun Sep 26 16:37:30 1999
***************
*** 19,24 ****
--- 19,30 ----
  #include "globals.h"
  #include "proto.h"
  #include "param.h"
+ #ifdef KANJI
+ #include "kanji.h"
+ #endif
+ #ifndef notdef
+ # define isidchar(_a)	isabchar(_a)
+ #endif
  
  /*
   * structure used to store one block of the stuff/redo/macro buffers
***************
*** 150,157 ****
--- 156,172 ----
  		if ((count || dozero) && (p = lalloc(count + 1, TRUE)) != NULL)
  		{
  				*p = NUL;
+ #if 0
  				for (bp = buffer->bh_first.b_next; bp != NULL; bp = bp->b_next)
  						strcat((char *)p, (char *)bp->b_str);
+ #else
+ 				count = 0;
+ 				for (bp = buffer->bh_first.b_next; bp != NULL; bp = bp->b_next)
+ 				{
+ 					strcpy((char *)&p[count], (char *)bp->b_str);
+ 					count += STRLEN((char *)bp->b_str);
+ 				}
+ #endif
  		}
  		return (p);
  }
***************
*** 272,277 ****
--- 287,296 ----
  
  	curr = stuffbuff.bh_first.b_next;
  	c = curr->b_str[stuffbuff.bh_index];
+ #ifdef NT
+ 	if (GuiWin)
+ 		breakcheck();
+ #endif
  
  	if (advance)
  	{
***************
*** 706,712 ****
--- 725,735 ----
  	{
  		if (scriptin[curscript] != NULL)	/* already reading script */
  			++curscript;
+ #ifdef KANJI
+ 		if ((scriptin[curscript] = fopen(fileconvsto(name), READBIN)) == NULL)
+ #else
  		if ((scriptin[curscript] = fopen((char *)name, READBIN)) == NULL)
+ #endif
  		{
  			emsg2(e_notopen, name);
  			if (curscript)
***************
*** 769,780 ****
--- 792,849 ----
  	int
  vgetc()
  {
+ #ifdef KANJI
+ 	int				c;
+ # if defined(FEPCTRL) && (defined(CANNA) || defined(ONEW))
+ 	static int		FepIn = FALSE;
+ 
+ 	if (FepIn == FALSE && curbuf->b_p_fc && fep_get_mode()
+ 													&& read_stuff(FALSE) == NUL)
+ 	{
+ 		FepIn = TRUE;
+ 		while (1)
+ 		{
+ 			if (fep_isready())
+ 			{
+ 				FepIn = FALSE;
+ 				c = fep_getkey() & 0xff;
+ 				if (c == K_SPECIAL)
+ 					return(0x100 + (vgetorpeek(TRUE) & 0xff));
+ 				return(c);
+ 			}
+ #  ifdef ONEW
+ 			fep_inject(0);
+ #  else
+ 			if (!canna_empty)
+ 				canna_echoback();
+ 			c = vgetorpeek(TRUE) & 0xff;
+ 			if (c == K_SPECIAL)
+ 				c = 0x100 + (vgetorpeek(TRUE) & 0xff);
+ 			fep_inject(c);
+ #  endif
+ 		}
+ 	}
+ # endif
+ 	c = vgetorpeek(TRUE) & 0xff;
+ # if defined(FEPCTRL) && (defined(CANNA) || defined(ONEW))
+ 	if (FepIn == FALSE && c == K_SPECIAL)
+ # else
+ 	if (c == K_SPECIAL)
+ # endif
+ 		return(0x100 + (vgetorpeek(TRUE) & 0xff));
+ 	return(c);
+ #else
  	return (vgetorpeek(TRUE));
+ #endif
  }
  
  	int
  vpeekc()
  {
+ #if defined(FEPCTRL) && (defined(CANNA) || defined(ONEW))
+ 	if (curbuf->b_p_fc && fep_get_mode() && read_stuff(FALSE) == NUL)
+ 		return(NUL);
+ #endif
  	return (vgetorpeek(FALSE));
  }
  
***************
*** 816,821 ****
--- 885,894 ----
  			{
  				len = STRLEN(typestr);
  				breakcheck();				/* check for CTRL-C */
+ #ifdef NT
+ 				if (got_int && GuiWin && ((State & NORMAL) && VIsual.lnum != 0))
+ 					got_int = FALSE;
+ #endif
  				if (got_int)
  				{
  					c = inchar(typestr, MAXMAPLEN, 0);	/* flush all input */
***************
*** 941,946 ****
--- 1014,1032 ----
  							c = -1;
  							break;
  						}
+ #ifdef NT
+ 						if (GuiWin && (State & CMDLINE)
+ 								&& ((mp->m_mode & (INSERT + CMDLINE)) == INSERT + CMDLINE)
+ 								&& strcmp(mp->m_str, "gV") == 0)
+ 						{
+ 							extern int	 cmdfirstc; 	/* ':', '/' or '?' */
+ 							if (cmdfirstc != ':')
+ 								wincmd_paste();
+ 							else
+ 								ins_typestr("", TRUE);
+ 						}
+ 						else
+ #endif
  						if (ins_typestr(mp->m_str, mp->m_noremap) == FAIL)
  						{
  							c = -1;
***************
*** 976,982 ****
--- 1062,1077 ----
  									curwin->w_col = 0;
  							}
  							else
+ #ifdef KANJI
+ 							{
+ 								--curwin->w_col;
+ 								if (ISkanjiCol(curwin->w_cursor.lnum,
+ 														curwin->w_col) == 2)
+ 									--curwin->w_col;
+ 							}
+ #else
  								--curwin->w_col;
+ #endif
  						}
  						else if (curwin->w_p_wrap && curwin->w_row)
  						{
***************
*** 1107,1112 ****
--- 1202,1215 ----
   */
  	while (*p)
  	{
+ #ifdef KANJI
+ 		if (*p == Ctrl('V') && p[1] == 'F' && p[2] == 'n')
+ 		{
+ 			STRCPY(p, p + 2);
+ 			*p = 0xff;
+ 		}
+ 		else
+ #endif
  		if (*p == Ctrl('V') && p[1] != NUL)
  			STRCPY(p, p + 1);			/* remove CTRL-V */
  		++p;
***************
*** 1119,1128 ****
--- 1222,1239 ----
  	{
  		if (*keys == '#' && isdigit(*(keys + 1)))	/* function key */
  		{
+ #ifdef KANJI
+ 			*keys= 0xff;
+ 			if (keys[1] == '0')
+ 				keys[1] = K_F10 & 0xff;
+ 			else
+ 				keys[1] += (K_F1 - '1') & 0xff;
+ #else
  			if (*++keys == '0')
  				*keys = K_F10;
  			else
  				*keys += K_F1 - '1';
+ #endif
  		}
  		len = STRLEN(keys);
  		if (len > MAXMAPLEN)			/* maximum lenght of MAXMAPLEN chars */
***************
*** 1134,1142 ****
--- 1245,1263 ----
  		 */
  		if (abbrev)
  		{
+ #ifdef KANJI
+ 			if (ISkanjiPointer(keys, keys + len - 1))
+ 				;
+ 			else
+ #endif
  			if (!isidchar(*(keys + len - 1)))		/* does not end in id char */
  				return 1;
  			for (n = 0; n < len - 2; ++n)
+ #ifdef KANJI
+ 				if (ISkanjiPointer(keys, keys + n) || ISkanjiPointer(keys, keys + len - 2))
+ 					;
+ 				else
+ #endif
  				if (isidchar(*(keys + n)) != isidchar(*(keys + len - 2)))
  					return 1;
  		}
***************
*** 1335,1347 ****
--- 1456,1485 ----
  	if (no_abbr_cnt)		/* abbrev. are not recursive */
  		return FALSE;
  
+ #ifdef KANJI
+ 	if (col && ISkanjiPointer(ptr, &ptr[col - 1]))
+ 		;
+ 	else
+ #endif
  	if (col == 0 || !isidchar(ptr[col - 1]))	/* cannot be an abbr. */
  		return FALSE;
  
+ #ifdef KANJI
+ 	if (col > 1)
+ 		is_id = isidchar(ptr[col - 2]);
+ 	for (len = col - 1; len > 0; --len)
+ 		if (ISkanjiPointer(ptr, &ptr[len - 1]))
+ 			;
+ 		else if (!isspace(ptr[len - 1]) && is_id == isidchar(ptr[len - 1]))
+ 			;
+ 		else
+ 			break;
+ #else
  	if (col > 1)
  		is_id = isidchar(ptr[col - 2]);
  	for (len = col - 1; len > 0 && !isspace(ptr[len - 1]) &&
  								is_id == isidchar(ptr[len - 1]); --len)
+ #endif
  		;
  
  	if (len < mincol)
***************
*** 1369,1374 ****
--- 1507,1525 ----
  			(void)ins_typestr(tb, TRUE);					/* insert the last typed char */
  			(void)ins_typestr(mp->m_str, mp->m_noremap);	/* insert the to string */
  			no_abbr_cnt += STRLEN(mp->m_str) + j;	/* no abbrev. for these chars */
+ #ifdef KANJI
+ 			{
+ 				int		k;
+ 				int		cnt = 0;
+ 				for (k = 0; k < len; k++)
+ 				{
+ 					if (ISkanji(ptr[k]))
+ 						k++;
+ 					cnt++;
+ 				}
+ 				len = cnt;
+ 			}
+ #endif
  			while (len--)
  				(void)ins_typestr((char_u *)"\b", TRUE);	/* delete the from string */
  			return TRUE;
diff -crN ../orig/src/globals.h ./src/globals.h
*** ../orig/src/globals.h	Wed Aug 10 13:54:10 1994
--- ./src/globals.h	Fri Aug 20 06:56:10 1999
***************
*** 190,202 ****
  EXTERN int		postponed_split INIT(= FALSE);	/* for CTRL-W CTRL-] command */
  EXTERN int		keep_old_search_pattern INIT(= FALSE);	/* for myregcomp() */
  
- #ifdef DEBUG
- EXTERN FILE *debugfp INIT(=NULL);
- #endif
- 
  extern char_u *Version;			/* this is in version.c */
  extern char_u *longVersion;		/* this is in version.c */
  
  /*
   * The error messages that can be shared are included here.
   * Excluded are very specific errors and debugging messages.
--- 190,203 ----
  EXTERN int		postponed_split INIT(= FALSE);	/* for CTRL-W CTRL-] command */
  EXTERN int		keep_old_search_pattern INIT(= FALSE);	/* for myregcomp() */
  
  extern char_u *Version;			/* this is in version.c */
  extern char_u *longVersion;		/* this is in version.c */
  
+ #ifdef KANJI
+ extern char_u *JpVersion;		/* this is in version.c */
+ extern char_u *longJpVersion;	/* this is in version.c */
+ #endif
+ 
  /*
   * The error messages that can be shared are included here.
   * Excluded are very specific errors and debugging messages.
***************
*** 257,259 ****
--- 258,283 ----
  EXTERN char_u e_unknown[]	INIT(="Unknown");
  EXTERN char_u e_write[]		INIT(="Error while writing");
  EXTERN char_u e_zerocount[]	INIT(="Zero count");
+ 
+ #ifdef KANJI
+ EXTERN int 		reg_jic		INIT(= 0); 		/* p_jic passed to to regexec() */
+ #endif
+ #ifdef TRACK
+ EXTERN int		Track 		INIT(= FALSE);	/* TRUE when track mode */
+ #endif
+ #ifdef FEPCTRL
+ EXTERN int		FepInit 	INIT(= FALSE);	/* fepctrl initalize flag */
+ EXTERN int		FepOn		INIT(= FALSE);	/* fepctrl on key process */
+ #endif
+ #ifdef NT
+ EXTERN int		GuiWin		INIT(= 'w');	/* Windows GUI mode */
+ EXTERN int		GuiConfig	INIT(= 0);		/* Windows GUI config No. */
+ EXTERN int		SubSysCon	INIT(= TRUE);	/* Console Sub System */
+ EXTERN char_u **WinScreen	INIT(= NULL);	/* Windows Screen Buffer Copy */
+ EXTERN int		DoMake		INIT(= FALSE);	/* domake() call */
+ EXTERN int		NoResize	INIT(= FALSE);	/* fexrc is doset() call */
+ EXTERN long_u	BenchTime	INIT(= 0);		/* bench mark time */
+ # if defined(USE_EXFILE) && defined(USE_MATOME)
+ EXTERN int		DoMatome	INIT(= FALSE);	/* mime trans */
+ # endif
+ #endif
diff -crN ../orig/src/grep/grep.c ./src/grep/grep.c
*** ../orig/src/grep/grep.c	Thu Jan 01 09:00:00 1970
--- ./src/grep/grep.c	Tue Oct 26 07:13:38 1999
***************
*** 0 ****
--- 1,1289 ----
+ /*=============================================================== vim:ts=4:sw=4:
+  *
+  * GREP	- Japanized GREP
+  *
+  *============================================================================*/
+ #ifdef MSDOS
+ # include <io.h>
+ # if !defined(NT) && !defined(__GO32__)
+ #  include <alloc.h>
+ # endif
+ #endif
+ #define EXTERN
+ #include "vim.h"
+ #include "globals.h"
+ #include "proto.h"
+ #include "kanji.h"
+ #include "regexp.h"
+ #include "fcntl.h"
+ #if defined(USE_LOCALE) && defined(UNIX)
+ #include <locale.h>
+ #endif
+ 
+ #if defined(NT) && defined(USE_EXFILE)
+ # define	open				ef_open
+ # define	close				ef_close
+ #endif
+ 
+ /*==============================================================================
+  *	option parameter
+  *============================================================================*/
+ static long		o_after = 0;			/* -A : print after match lines		  */
+ static long		o_before= 0;			/* -B : print before match lines	  */
+ static int		o_conly = FALSE;		/* -c : count match lines			  */
+ static int		o_icase = FALSE;		/* -i : ignore case					  */
+ static int		o_nonly = FALSE;		/* -l : print only file name		  */
+ static int		o_num	= FALSE;		/* -n : print line number			  */
+ static int		o_noerr = FALSE;		/* -q : suppress error message		  */
+ static int		o_nomsg = FALSE;		/* -s : suppress normal output		  */
+ static int		o_nomat = FALSE;		/* -v : print not match lines		  */
+ static int		o_word	= FALSE;		/* -w : match words					  */
+ static int		o_line	= FALSE;		/* -x : match lines					  */
+ static int		o_jcase = FALSE;		/* -j : jignore case				  */
+ static long		o_count = 1;			/* -L : search lines				  */
+ static long		o_join	= FALSE;		/* -J : join search lines			  */
+ #if !defined(__DATE__) || !defined(__TIME__)
+ static char		version[] = "Japanized grep by Ken'ichi Tsuchida (1998 Mar 14)";
+ #else
+ static char		version[] = "Japanized grep by Ken'ichi Tsuchida (1998 Mar 14, compiled " __DATE__ " " __TIME__ ")";
+ #endif
+ 
+ #ifdef NT
+ /*==============================================================================
+  *	GUI parameter
+  *============================================================================*/
+ static HANDLE				hInst;
+ static HWND					hWin;
+ static HWND					hDlg;
+ static TCHAR				szAppName[] = TEXT("Grep");
+ static HANDLE				hEdit;
+ #endif
+ 
+ /*==============================================================================
+  *	I/O parameter
+  *============================================================================*/
+ static unsigned char	*	IObuffer;
+ static long					IOsize;
+ static unsigned char	*	IOstart;
+ static long					IOrest;
+ 
+ /*==============================================================================
+  *	file parameter
+  *============================================================================*/
+ static int					multi = FALSE;
+ #ifdef NT
+ static char				**	dir_list = NULL;
+ static int					dir_cnt = 0;
+ static int					DirList(char *);
+ # ifdef USE_EXFILE
+ static int					do_arcfile(char *, char *);
+ # endif
+ #endif
+ 
+ /*==============================================================================
+  *	line parameter
+  *============================================================================*/
+ typedef struct {
+ 	long					num;			/* line number					  */
+ 	long					size;			/* line size					  */
+ 	long					rest;			/* line rest size				  */
+ 	unsigned char		*	lp;				/* line pointer					  */
+ } LINE;
+ static LINE				**	line;
+ static LINE				*	linep;
+ static int					o_fd = -1;
+ 
+ /*==============================================================================
+  *	regexec parameter
+  *============================================================================*/
+ typedef struct grep {
+ 	int						left;			/* or search					  */
+ 	int						next;			/* near search					  */
+ 	int						not;			/* not search					  */
+ 	regexp				*	prog;			/* regexec parameter			  */
+ } GREP;
+ static GREP				*	gpattern = NULL;
+ 
+ /*==============================================================================
+  *	global parameter
+  *============================================================================*/
+ int							reg_ic;
+ int							reg_jic;
+ int							p_magic = TRUE;
+ int							p_jkc	= FALSE;
+ int							p_opt;
+ char_u						p_jp[4] = JP_DEF;
+ #ifdef NT
+ int							p_cpage = CP_ACP;
+ #endif
+ 
+ int
+ emsg(msg)
+ char_u		*	msg;
+ {
+ 	if (!o_noerr)
+ 		fprintf(stderr, "%s\n", msg);
+ 	return(TRUE);
+ }
+ 
+ char_u	*
+ ml_get_buf(buf, lnum, will_change)
+ BUF			*buf;
+ linenr_t	lnum;
+ int			will_change;		/* line will be changed */
+ {
+ 	return(NULL);
+ }
+ 
+ int
+ mf_release_all()
+ {
+ 	return(0);
+ }
+ 
+ long
+ mch_avail_mem(spec)
+ int spec;
+ {
+ #if !defined(MSDOS) || defined(NT)
+ 	return 0x7fffffff;		/* virual memory eh */
+ #else
+ 	return coreleft();
+ #endif
+ }
+ 
+ /*==============================================================================
+  *	prototype define
+  *============================================================================*/
+ static void			usage __ARGS((void));
+ static int			fileopen __ARGS((char *));
+ static int			fileread __ARGS((int, LINE *));
+ static int			grepsub __ARGS((GREP *, int *));
+ static void			compile __ARGS((char_u *, int, int));
+ static int			do_grep __ARGS((char *));
+ 
+ /*==============================================================================
+  *	line parameter
+  *============================================================================*/
+ #if defined(NT) && defined(USE_EXFILE)
+ BOOL WINAPI
+ handler_routine(DWORD dwCtrlType)
+ {
+ 	if (o_fd > 0)
+ 		close(o_fd);
+ 	exit(0);
+ 	return(0);
+ }
+ #endif
+ 
+ static void
+ usage()
+ {
+ 	fprintf(stderr, "usage: grep [-[[ABL] ]<num>] [-[CVcijlnqsvwx]] [-K <code>] [-[efE]] <expr> [<files...>]\n");
+ 	fprintf(stderr, "	-A <num>    print after match lines.\n");
+ 	fprintf(stderr, "	-B <num>    print before match lines.\n");
+ 	fprintf(stderr, "	-C          print context match two lines.\n");
+ #if 0
+ 	fprintf(stderr, "	-R <DIR>    search directory.\n");
+ #endif
+ 	fprintf(stderr, "	-V          print version.\n");
+ 	fprintf(stderr, "	-c          count match lines.\n");
+ 	fprintf(stderr, "	-f <file>   regular expression define file.\n");
+ 	fprintf(stderr, "	-i          ignore case.\n");
+ 	fprintf(stderr, "	-l          print only file name.\n");
+ 	fprintf(stderr, "	-n          print line number.\n");
+ 	fprintf(stderr, "	-q          suppress error message.\n");
+ 	fprintf(stderr, "	-s          suppress normal output.\n");
+ 	fprintf(stderr, "	-v          print not match lines.\n");
+ 	fprintf(stderr, "	-w          match words.\n");
+ 	fprintf(stderr, "	-x          match lines.\n");
+ #if 0
+ 	fprintf(stderr, "	-J          join search lines.\n");
+ #endif
+ 	fprintf(stderr, "	-j          ignore japanese case.\n");
+ 	fprintf(stderr, "	-e <expr>   or regular expression.\n");
+ 	fprintf(stderr, "	-E <expr>   and regular expression.\n");
+ #ifdef NT
+ 	fprintf(stderr, "	-K <code>   file/disp/system kanji code. [jJeEsSuU][JES][JES]\n");
+ #else
+ 	fprintf(stderr, "	-K <code>   file/disp/system kanji code. [jJeEsS][JES][JES]\n");
+ #endif
+ 	fprintf(stderr, "	-L <num>    search lines.\n");
+ 	exit(2);
+ }
+ 
+ static int
+ fileopen(fname)
+ char		*	fname;
+ {
+ 	int					fd;
+ 
+ 	if (IObuffer == NULL)
+ 	{
+ #if !defined(MSDOS) || defined(NT)
+ 		if (sizeof(int) > 2)
+ 			IOsize = 0x10000L;					/* read 64K at a time */
+ 		else
+ #endif
+ 			IOsize = 0x7ff0L;					/* limit buffer to 32K */
+ 		while ((IObuffer = malloc(IOsize)) == NULL)
+ 		{
+ 			IOsize >>= 1;
+ 			if (IOsize < 1024)
+ 			{
+ 				if (!o_noerr)
+ 					fprintf(stderr, "memory allocation error.\n");
+ 				exit(2);
+ 			}
+ 		}
+ 	}
+ 	IOstart= IObuffer;
+ 	IOrest = 0;
+ 	if (fname == NULL)			/* standerd input */
+ 		fd = 0;
+ 	else
+ 		fd = open(fname, O_RDONLY);
+ 	if (fd < 0)
+ 		return(-1);
+ 	if ((IOrest = read(fd, (char *)IObuffer, (size_t)IOsize)) <= 0)
+ 		return(fd);
+ 	if (isupper(JP_KEY))
+ 		JP_KEY = judge_jcode(&JP_KEY, IObuffer, IOrest);
+ #ifdef NT
+ 	if (toupper(JP_KEY) == JP_WIDE)	/* UNICODE */
+ 		IOrest = wide2multi(IObuffer, IOrest, TRUE);
+ #endif
+ 	return(fd);
+ }
+ 
+ static int
+ fileread(fd, lp)
+ int					fd;
+ LINE			*	lp;
+ {
+ 	long				size;
+ 	unsigned char	*	ptr;
+ 	unsigned char		c;
+ 	int					n;
+ 	int					found = FALSE;
+ 	int					eof   = FALSE;
+ 	long				rest;
+ 
+ 	if (IOrest == 0)	/* end of file */
+ 		return(-1);
+ 	lp->rest += lp->size;
+ 	lp->size  = 0;
+ 	ptr  = IOstart;
+ 	size = IOrest;
+ 	ptr--;
+ 	while (++ptr, --size >= 0)
+ 	{
+ 		if ((c = *ptr) != '\0' && c != '\n' && !(eof && size == 0))
+ 			continue;
+ 		if (c == '\0')
+ 			*ptr = '\n';		/* NULs are replaced by newlines! */
+ 		else if (ptr[-1] == '\r')	/* remove CR */
+ 			ptr[-1] = '\0';
+ 		found = TRUE;
+ #if 0
+ retry:
+ #endif
+ 		n = (ptr - IOstart) * 2 + 1;
+ 		if (n > lp->rest)
+ 		{
+ 			char	*	p = lp->lp;
+ 
+ 			if ((lp->lp = malloc(n)) == NULL)
+ 			{
+ 				if (!o_noerr)
+ 					fprintf(stderr, "memory allocation error.\n");
+ 				exit(2);
+ 			}
+ 			if (p != NULL)
+ 			{
+ 				memmove(lp->lp, p, lp->size);
+ 				free(p);
+ 			}
+ 			lp->rest = n;
+ 			lp->lp[lp->size] = '\0';
+ 		}
+ 		n = kanjiconvsfrom(IOstart, ptr - IOstart,
+ 						&lp->lp[lp->size], n, NULL, toupper(JP_KEY), NULL);
+ 		lp->size += n;
+ 		lp->lp[lp->size] = '\0';	/* end of line */
+ 		lp->rest = lp->rest - n;
+ #if 0
+ retry:
+ #endif
+ 		ptr++;
+ 		IOrest -= ptr - IOstart;
+ 		IOstart = ptr;	/* nothing left to write */
+ 		if (IOrest == 0)
+ 		{
+ retry:
+ 			rest = IOrest;
+ 			if (IOrest != 0)
+ 				memmove(IObuffer, IOstart, IOrest);
+ 			if ((IOrest = read(fd, (char *)IObuffer + IOrest, (size_t)IOsize - IOrest)) < 0)
+ 			{
+ 				if (!o_noerr)
+ 					fprintf(stderr, "file read error.\n");
+ 				return(-1);
+ 			}
+ 			if (IOrest == 0)
+ 				eof = TRUE;
+ 			IOrest += rest;
+ #ifdef NT
+ 			if (toupper(JP_KEY) == JP_WIDE)	/* UNICODE */
+ 				IOrest = wide2multi(IObuffer, IOrest, FALSE);
+ #endif
+ 			if (IOrest == 0)		/* end of file */
+ 				return(0);
+ 			ptr = IOstart = IObuffer;	/* nothing left to write */
+ 			size = IOrest;
+ 			ptr--;
+ 		}
+ 		if (found == TRUE)
+ 			return(0);
+ 	}
+ 	ptr--;
+ 	goto retry;
+ }
+ 
+ static void
+ compile(str, no, and)
+ char_u			*	str;
+ int					no;
+ int					and;
+ {
+ 	regexp			*	prog;
+ 	char_u			*	buf;
+ 	int					n;
+ 
+ 	if ((buf = malloc(sizeof(GREP) * (no + 1))) == NULL)
+ 	{
+ 		if (!o_noerr)
+ 			fprintf(stderr, "memory allocation error.\n");
+ 		exit(2);
+ 	}
+ 	memset(buf, 0, sizeof(GREP) * (no + 1));
+ 	if (gpattern != NULL)
+ 	{
+ 		memcpy(buf, gpattern, sizeof(GREP) * no);
+ 		free(gpattern);
+ 	}
+ 	gpattern = (GREP *)buf;
+ 	n = strlen(str) * 2 + ((o_word || o_line) ? 7 : 1);
+ 	if ((buf = malloc(n)) == NULL)
+ 	{
+ 		if (!o_noerr)
+ 			fprintf(stderr, "memory allocation error.\n");
+ 		exit(2);
+ 	}
+ 	n = kanjiconvsfrom(str, strlen(str), buf, n, NULL, JP_SYS, NULL);
+ 	buf[n] = '\0';
+ 	if (o_word)
+ 	{
+ 		memmove(&buf[2], buf, n);
+ 		buf[0] = '\\';
+ 		buf[1] = '<';
+ 		buf[n + 2] = '\\';
+ 		buf[n + 3] = '>';
+ 		buf[n + 4] = '\0';
+ 	}
+ 	else if (o_line)
+ 	{
+ 		memmove(&buf[3], buf, n);
+ 		buf[0] = '^';
+ 		buf[1] = '\\';
+ 		buf[2] = '(';
+ 		buf[n + 3] = '\\';
+ 		buf[n + 4] = ')';
+ 		buf[n + 5] = '$';
+ 		buf[n + 6] = '\0';
+ 	}
+ 	if ((prog = regcomp(buf)) == NULL)
+ 	{
+ 		if (!o_noerr)
+ 			fprintf(stderr, "regular expression error \"%s\".\n", str);
+ 		exit(2);
+ 	}
+ 	free(buf);
+ 	gpattern[no].not = FALSE;
+ 	gpattern[no].prog= prog;
+ 	if (no != 0)
+ 	{
+ 		if (and)
+ 			gpattern[no - 1].next = no;
+ 		else
+ 			gpattern[no - 1].left = no;
+ 	}
+ }
+ 
+ static int
+ grepsub(gp, look)
+ register GREP	*	gp;
+ int				*	look;
+ {
+ 	int					i;
+ 	int					found = FALSE;
+ 
+ 	if (o_join)
+ 	{
+ 		long				n = 0;
+ 		char_u			*	p;
+ 		char_u			*	cp;
+ 		char_u			*	ep;
+ 		int					kanji = FALSE;
+ 
+ 		for (i = 0; i < o_count; i++)
+ 		{
+ 			if (line[i + o_before] == NULL)
+ 				break;
+ 			n += strlen(line[i + o_before]->lp);
+ 		}
+ 		if ((p = malloc(n + o_count + 1)) == NULL)
+ 			return(FALSE);
+ 		p[0] = '\0';
+ 		for (i = 0; i < o_count; i++)
+ 		{
+ 			if (line[i + o_before] == NULL)
+ 				break;
+ 			cp = line[i + o_before]->lp;
+ 			while (i != 0 && *cp)
+ 			{
+ 				if (*cp == ' ' || *cp == '\t')
+ 					cp++;
+ 				else if (ISkanji(*cp))
+ 				{
+ 					if (cp[0] == 0x81 && cp[1] == 0x40)
+ 						cp += 2;
+ 					else
+ 						break;
+ 				}
+ 				else
+ 					break;
+ 			}
+ 			if (i != 0)
+ 			{
+ 				if (ISkanji(*cp) && kanji)
+ 					;
+ 				else
+ 					strcat(p, " ");
+ 			}
+ 			ep = p + strlen(p);
+ 			strcat(p, cp);
+ 			cp = ep;
+ 			ep = NULL;
+ 			while (*cp)
+ 			{
+ 				if (*cp == ' ' || *cp == '\t')
+ 				{
+ 					if (ep == NULL)
+ 						ep = cp;
+ 				}
+ 				else if (ISkanji(*cp) && cp[0] == 0x81 && cp[1] == 0x40)
+ 				{
+ 					if (ep == NULL)
+ 						ep = cp;
+ 					cp++;
+ 				}
+ 				else
+ 				{
+ 					ep = NULL;
+ 					if (ISkanji(*cp))
+ 					{
+ 						kanji = TRUE;
+ 						cp++;
+ 					}
+ 					else
+ 						kanji = FALSE;
+ 				}
+ 				cp++;
+ 			}
+ 			if (ep != NULL)
+ 				*ep = '\0';
+ 		}
+ 		if (regexec(gp->prog, p, TRUE))
+ 		{
+ 			if (gp->prog->startp[0] < (p + strlen(line[o_before]->lp)))
+ 				*look = TRUE;
+ 			found = TRUE;
+ 		}
+ 		free(p);
+ 	}
+ 	else
+ 	{
+ 		for (i = 0; i < o_count; i++)
+ 		{
+ 			if (line[i + o_before] == NULL)
+ 				break;
+ 			if (regexec(gp->prog, line[i + o_before]->lp, TRUE))
+ 			{
+ 				if (i == 0)
+ 					*look = TRUE;
+ 				found = TRUE;
+ 				break;
+ 			}
+ 		}
+ 	}
+ 	if (gp->not && !found)
+ 		found = TRUE;
+ 	else if (gp->not && found)
+ 		found = FALSE;
+ 	if (!found && gp->left)
+ 		found = grepsub(&gpattern[gp->left], look);
+ 	if (found && gp->next)
+ 		return(grepsub(&gpattern[gp->next], look));
+ 	if (found && gp->next == 0)
+ 		return(TRUE);
+ 	return(FALSE);
+ }
+ 
+ static int
+ do_grep(fname)
+ char				*	fname;
+ {
+ 	long					lnum;
+ 	LINE				*	lp;
+ 	int						found = 0;
+ 	int						look;
+ 	long					pnum  = 0;
+ 	long					i;
+ 	char_u				*	p;
+ 	long					counter = 0;
+ 	int						quote	= FALSE;
+ 	int						loop = o_before + ((o_count > o_after) ? o_count : o_after);
+ 	int						disp;
+ 
+ 	if ((o_fd = fileopen(fname)) < 0)
+ 	{
+ #ifdef NT
+ 		if (!o_noerr && !dir_cnt)
+ #else
+ 		if (!o_noerr)
+ #endif
+ 			fprintf(stderr, "file open error <%s>.\n", fname);
+ 		return(0);
+ 	}
+ 	if (multi && fname != NULL)
+ 	{
+ 		regexp			*	pg1;
+ 		regexp			*	pg2;
+ 		static char_u		p1[] = ":[0-9][0-9]*$";
+ 		static char_u		p2[] = ":[0-9][0-9]*:";
+ 
+ 		if ((pg1 = regcomp(p1)) == NULL)
+ 		{
+ 			close(o_fd);
+ 			if (!o_noerr)
+ 				fprintf(stderr, "memory allocation error.\n");
+ 			exit(2);
+ 		}
+ 		if ((pg2 = regcomp(p2)) == NULL)
+ 		{
+ 			close(o_fd);
+ 			if (!o_noerr)
+ 				fprintf(stderr, "memory allocation error.\n");
+ 			exit(2);
+ 		}
+ 		if (regexec(pg1, fname, TRUE) || regexec(pg2, fname, TRUE))
+ 			quote = TRUE;
+ 		free(pg1);
+ 		free(pg2);
+ 	}
+ 
+ 	reg_ic  = o_icase;
+ 	reg_jic = o_jcase;
+ 
+ 	for (lnum = 0; lnum < o_before; lnum++)
+ 	{
+ 		line[lnum] = &linep[lnum];
+ 		line[lnum]->num = 0;
+ 	}
+ 	for (lnum = 0; lnum < ((o_count > o_after) ? o_count : o_after); lnum++)
+ 	{
+ 		if (fileread(o_fd, &linep[lnum + o_before]) < 0)
+ 			break;
+ 		line[lnum + o_before] = &linep[lnum + o_before];
+ 		line[lnum + o_before]->num = lnum + 1;
+ 	}
+ 	for (;;)
+ 	{
+ 		look = FALSE;
+ 		if (grepsub(&gpattern[0], &look) && look)
+ 		{
+ 			/* found it */
+ 			if (o_nomat)
+ 				look = FALSE;
+ 			else
+ 				found = 1;
+ 		}
+ 		else if (o_nomat && !look)
+ 		{
+ 			look = TRUE;
+ 			found = 1;
+ 		}
+ 		else
+ 			look = FALSE;
+ 		if (look)
+ 		{
+ 			/* found action */
+ 			if (o_nonly || o_nomsg)
+ 			{
+ 				if (!o_nomsg)
+ 					printf("%s\n", fname);
+ 				close(o_fd);
+ 				return(found);
+ 			}
+ 			counter++;
+ 			if (o_conly || o_nomsg)
+ 				;
+ 			else
+ 			{
+ 				if (o_after == 1 && o_before == 0)
+ 					disp = o_count;
+ 				else
+ 					disp = o_after + o_before;
+ 				for (i = 0; i < disp; i++)
+ 				{
+ 					lp = line[i];
+ 					if (lp == NULL)
+ 						break;
+ 					if (lp->num == 0)
+ 						continue;
+ 					if (pnum < lp->num)
+ 					{
+ 						if (multi)
+ 						{
+ 							if (quote)
+ 								printf("\"%s\":", fname);
+ 							else
+ 								printf("%s:", fname);
+ 						}
+ 						if (o_num)
+ 							printf("%d:", lp->num);
+ 						p = kanjiconvsto(lp->lp, JP_DISP);
+ 						printf("%s\n", p);
+ 						free(p);
+ 						pnum = lp->num;
+ 					}
+ 				}
+ 			}
+ 		}
+ 		lp = line[0];
+ 		memmove(line, &line[1], sizeof(LINE *) * (loop - 1));
+ 		line[loop - 1] = NULL;
+ 		if (fileread(o_fd, lp) >= 0)
+ 		{
+ 			lp->num = ++lnum;
+ 			line[loop - 1] = lp;
+ 		}
+ 		if (line[o_before] == NULL)
+ 			break;
+ 	}
+ 	if (o_conly)
+ 	{
+ 		if (multi)
+ 		{
+ 			if (quote)
+ 				printf("\"%s\":", fname);
+ 			else
+ 				printf("%s:", fname);
+ 		}
+ 		printf("%d\n", counter);
+ 	}
+ 	close(o_fd);
+ 	return(found);
+ }
+ 
+ static int
+ getarg(argc, argv)
+ int					argc;
+ char			**	argv;
+ {
+ 	char			*	optarg;
+ 	int					i;
+ 	int					no = 0;
+ 	int					fd;
+ 	char			*	cp;
+ 	int					skip;
+ 	int					rtn = argc;
+ 	LINE				f_opt;
+ 
+ 	++argv;
+ 	--argc;
+ 	/*
+ 	 * Process the command line arguments
+ 	 */
+ 	while (argc >= 1 && argv[0][0] == '-')
+ 	{
+ 		skip = FALSE;
+ 		for (cp = argv[0] + 1; *cp && skip == FALSE; cp++)
+ 		{
+ 			switch (*cp) {
+ 			case '0':
+ 			case '1':
+ 			case '2':
+ 			case '3':
+ 			case '4':
+ 			case '5':
+ 			case '6':
+ 			case '7':
+ 			case '8':
+ 			case '9':
+ 				o_after = o_before = o_after * 10 + *cp - '0';
+ 				break;
+ 			case 'V':
+ 				fprintf(stderr, "%s.\n", version);
+ 				exit(0);
+ 			case 'C':						/* print context match two lines  */
+ 				o_after = o_before = 2;
+ 				o_nomsg = FALSE;
+ 				break;
+ 			case 'J':						/* join search lines			  */
+ 				o_join	= TRUE;
+ 				o_line	= FALSE;
+ 				if (o_count <= 1)
+ 					o_count = 2;
+ 				break;
+ 			case 'c':						/* count match lines			  */
+ 				o_conly = TRUE;
+ 				o_nomsg = FALSE;
+ 				o_nonly = FALSE;
+ 				o_num	= FALSE;
+ 				break;
+ 			case 'i':						/* ignore case					  */
+ 				o_icase = TRUE;
+ 				break;
+ 			case 'l':						/* print only file name			  */
+ 				o_nonly = TRUE;
+ 				o_nomsg = FALSE;
+ 				o_conly = FALSE;
+ 				o_num	= FALSE;
+ 				break;
+ 			case 'n':						/* print line number			  */
+ 				o_num	= TRUE;
+ 				o_nomsg = FALSE;
+ 				o_conly = FALSE;
+ 				o_nonly = FALSE;
+ 				break;
+ 			case 'q':						/* suppress error message		  */
+ 				o_noerr = TRUE;
+ 				break;
+ 			case 's':						/* suppress normal output		  */
+ 				o_nomsg = TRUE;
+ 				o_conly = FALSE;
+ 				o_nonly = FALSE;
+ 				o_num	= FALSE;
+ 				o_after = o_before = 0;
+ 				break;
+ 			case 'v':						/* print not match lines		  */
+ 				o_nomat = TRUE;
+ 				break;
+ 			case 'w':						/* match words					  */
+ 				o_word	= TRUE;
+ 				o_line	= FALSE;
+ 				break;
+ 			case 'x':						/* match lines					  */
+ 				o_line	= TRUE;
+ 				o_word	= FALSE;
+ 				o_join	= FALSE;
+ 				break;
+ 
+ 			case 'j':	o_jcase = TRUE; break;
+ 
+ 			case 'f':						/* regular expression define file */
+ 			case 'A':						/* print after match lines		  */
+ 			case 'B':						/* print before match lines		  */
+ 			case 'e':
+ 			case 'E':
+ 			case 'L':
+ 			case 'K':
+ 			case 'R':						/* Recurcev directory			  */
+ 				if (cp[1] != '\0')
+ 					optarg = &cp[1];
+ 				else
+ 				{
+ 					++ argv;
+ 					-- argc;
+ 					if (argc >= 1)
+ 						optarg = argv[0];
+ 					else
+ 					{
+ 						fprintf(stderr, "option unmatch.\n");
+ 						usage();
+ 					}
+ 				}
+ 				skip = TRUE;
+ 				switch (*cp) {
+ 				case 'f':					/* regular expression define file */
+ 					memset(&f_opt, 0, sizeof(LINE));
+ 					if ((fd = fileopen(optarg)) < 0)
+ 					{
+ 						fprintf(stderr, "file open error <%s>.\n", optarg);
+ 						exit(2);
+ 					}
+ 					while (fileread(fd, &f_opt) >= 0)
+ 					{
+ 						if (strlen(f_opt.lp) != 0)
+ 						{
+ 							compile(f_opt.lp, no, FALSE);
+ 							no++;
+ 						}
+ 					}
+ 					close(fd);
+ 					break;
+ 				case 'A':					/* print after match lines		  */
+ 					o_after = atol((char *)optarg);
+ 					break;
+ 				case 'B':					/* print before match lines		  */
+ 					o_before = atol((char *)optarg);
+ 					break;
+ 				case 'e':
+ 				case 'E':
+ 					compile(optarg, no, *cp == 'E' ? TRUE : FALSE);
+ 					no++;
+ 					break;
+ 				case 'L':
+ 					if ((o_count = atol((char *)optarg)) == 0)
+ 						o_count = 1;
+ 					break;
+ 				case 'K':
+ 					{
+ 						char_u	*	p;
+ 						char_u	*	q;
+ 
+ 						q = optarg;
+ 						for (i = 0, p = optarg; i < 3 && *p; i++, p++)
+ 						{
+ 							if (i == 0)
+ 							{
+ 								if (strchr(JP_FSTR, *p))
+ 									p_jp[p - q] = *p;
+ 							}
+ 							else
+ 							{
+ 								if ('a' <= *p && *p <= 'z')
+ 									*p -= 'a' - 'A';
+ 								if (strchr(JP_STR, *p))
+ 									p_jp[p - q] = *p;
+ 							}
+ 						}
+ 					}
+ 					break;
+ #ifdef NT
+ 				case 'R':
+ 					{
+ 						char	**	result;
+ 						int			j;
+ 
+ # ifdef USE_EXFILE
+ 						result = ef_globfilename(optarg, FALSE);
+ # else
+ 						result = glob_filename(optarg);
+ # endif
+ 						for (j = 0; result[j] != NULL; j++)
+ 						{
+ 							DirList(result[j]);
+ 							free(result[j]);
+ 						}
+ 						free(result);
+ 					}
+ 					break;
+ #endif
+ 				}
+ 				break;
+ 			default:
+ 				usage();
+ 				break;
+ 			}
+ 		}
+ 		++ argv;
+ 		-- argc;
+ 	}
+ 
+ 	o_after++;
+ 	if ((line = (LINE **)malloc(sizeof(LINE *) * ((o_count > o_after ? o_count : o_after) + o_before))) == NULL)
+ 	{
+ 		if (!o_noerr)
+ 			fprintf(stderr, "memory allocation error.\n");
+ 		exit(2);
+ 	}
+ 	if ((linep = (LINE *)malloc(sizeof(LINE) * ((o_count > o_after ? o_count : o_after) + o_before))) == NULL)
+ 	{
+ 		if (!o_noerr)
+ 			fprintf(stderr, "memory allocation error.\n");
+ 		exit(2);
+ 	}
+ 	memset(linep, 0, sizeof(LINE) * ((o_count > o_after ? o_count : o_after) + o_before));
+ 
+ 	if (no == 0 && argc == 0)
+ 		usage();
+ 	if (no == 0 && argc >= 1)
+ 	{
+ 		compile(argv[0], no, TRUE);
+ 		++ argv;
+ 		-- argc;
+ 	}
+ 	return(rtn - argc);
+ }
+ 
+ #ifdef NT
+ static int
+ do_winsearch(fname)
+ char			*	fname;
+ {
+ 	int					rtn = 0;
+ 
+ # ifdef USE_EXFILE
+ 	if (is_efarc(fname, '\0'))
+ 	{
+ 		char	**	result;
+ 		int			j;
+ 		char		buf[MAXPATHL];
+ 
+ 		multi = TRUE;
+ 		strcpy(buf, fname);
+ 		strcat(buf, ":*");
+ 		result = ef_globfilename(buf, FALSE);
+ 		for (j = 0; result[j] != NULL; j++)
+ 		{
+ 			rtn |= do_grep(result[j]);
+ 			free(result[j]);
+ 		}
+ 		free(result);
+ 	}
+ 	else if (is_efarc(fname, ':'))
+ 	{
+ 		char	**	result;
+ 		int			j;
+ 
+ 		multi = TRUE;
+ 		result = ef_globfilename(fname, TRUE);
+ 		for (j = 0; result[j] != NULL; j++)
+ 		{
+ 			rtn |= do_grep(result[j]);
+ 			free(result[j]);
+ 		}
+ 		free(result);
+ 	}
+ 	else if (is_ef(fname, '\0'))	/* ftp */
+ 	{
+ 		char	**	result;
+ 		int			j;
+ 		char		buf[MAXPATHL];
+ 
+ 		multi = TRUE;
+ 		strcpy(buf, fname);
+ 		result = ef_globfilename(buf, FALSE);
+ 		for (j = 0; result[j] != NULL; j++)
+ 		{
+ 			rtn |= do_grep(result[j]);
+ 			free(result[j]);
+ 		}
+ 		free(result);
+ 	}
+ 	else
+ # endif
+ 		rtn |= do_grep(fname);
+ 	return(rtn);
+ }
+ #endif
+ 
+ static int
+ do_search(argc, argv)
+ int					argc;
+ char			**	argv;
+ {
+ 	int					i;
+ 	int					rtn = 0;
+ 
+ 	if (argc == 0)
+ 	{
+ #ifdef NT
+ 		if (dir_cnt)
+ 		{
+ 			char	**	result;
+ 			int			j;
+ 			int			k;
+ 			char		buf[MAXPATHL];
+ 
+ 			multi = TRUE;
+ 			for (k = 0; k < dir_cnt; k++)
+ 			{
+ 				strcpy(buf, dir_list[k]);
+ 				if (buf[strlen(buf) - 1] != '\\' && buf[strlen(buf) - 1] != '/')
+ 					strcat(buf, "\\");
+ 				strcat(buf, "*");
+ # ifdef USE_EXFILE
+ 				result = ef_globfilename(buf, FALSE);
+ # else
+ 				result = glob_filename(buf);
+ # endif
+ 				for (j = 0; result[j] != NULL; j++)
+ 				{
+ 					rtn != do_winsearch(result[j]);
+ 					free(result[j]);
+ 				}
+ 				free(result);
+ 			}
+ 		}
+ 		else
+ #endif
+ 		rtn |= do_grep(NULL);
+ 	}
+ 	else
+ 	{
+ 		if (argc > 1)
+ 			multi = TRUE;
+ 		for (i = 0; i < argc; i++)
+ 		{
+ #ifdef NT
+ 			if (dir_cnt)
+ 			{
+ 				char	**	result;
+ 				int			j;
+ 				int			k;
+ 				char		buf[MAXPATHL];
+ 
+ 				multi = TRUE;
+ 				for (k = 0; k < dir_cnt; k++)
+ 				{
+ 					strcpy(buf, dir_list[k]);
+ 					if (buf[strlen(buf) - 1] != '\\' && buf[strlen(buf) - 1] != '/')
+ 						strcat(buf, "\\");
+ 					strcat(buf, argv[i]);
+ # ifdef USE_EXFILE
+ 					result = ef_globfilename(buf, FALSE);
+ # else
+ 					result = glob_filename(buf);
+ # endif
+ 					for (j = 0; result[j] != NULL; j++)
+ 					{
+ 						rtn != do_winsearch(result[j]);
+ 						free(result[j]);
+ 					}
+ 					free(result);
+ # ifdef USE_EXFILE
+ 					if (vimgetenv("GREP_ARC") != NULL)
+ 						rtn |= do_arcfile(dir_list[k], argv[i]);
+ # endif
+ 				}
+ 			}
+ 			else
+ 				rtn != do_winsearch(argv[i]);
+ #else
+ 			rtn |= do_grep(argv[i]);
+ #endif
+ 		}
+ 	}
+ 	return(rtn ? 0 : 1);
+ }
+ 
+ int
+ #ifdef NT
+ win_main(argc, argv)
+ #else
+ main(argc, argv)
+ #endif
+ int					argc;
+ char			**	argv;
+ {
+ 	int					rtn;
+ 
+ #if defined(NT) && defined(USE_EXFILE)
+ 	ef_init(NULL);
+ #endif
+ #ifdef MSDOS
+ 	_fmode = O_BINARY;          /* we do our own CR-LF translation */
+ #endif
+ #ifdef USE_LOCALE
+ 	setlocale(LC_ALL, "");		/* for ctype() and the like */
+ #endif
+ #ifdef UNIX
+ 	{
+ 		char	*p	= NULL;
+ 
+ # ifdef USE_LOCALE
+ 		p = setlocale(LC_CTYPE, "");
+ 		if (p == NULL)
+ 			p = vimgetenv((char_u *)"LC_CTYPE");
+ # endif
+ 		if (p == NULL)
+ 			p = vimgetenv((char_u *)"LANG");
+ 		if (p != NULL)
+ 		{
+ 			if ((STRCMP(p, "ja_JP.JIS") == 0)
+ 					|| (STRCMP(p, "ja_JP.jis7") == 0))
+ 				JP_KEY = JP_DISP = JP_SYS = JP_JIS;
+ 			else if ((STRCMP(p, "ja_JP.EUC") == 0)
+ 					|| (STRCMP(p, "japanese") == 0)
+ 					|| (STRCMP(p, "ja_JP.ujis") == 0))
+ 				JP_KEY = JP_DISP = JP_SYS = JP_EUC;
+ 			else if ((STRCMP(p, "ja_JP.SJIS") == 0)
+ 					|| (STRCMP(p, "ja_JP.mscode") == 0))
+ 				JP_KEY = JP_DISP = JP_SYS = JP_SJIS;
+ 		}
+ 	}
+ #endif
+ 
+ 	rtn = getarg(argc, argv);
+ 	argc -= rtn;
+ 	argv =  &argv[rtn];
+ 
+ #ifdef XARGS
+ 	if (dir_cnt == 0 && argc != 0)
+ 	{
+ 		xargs(&argc, &argv);
+ 		argc -= rtn;
+ 		argv =  &argv[rtn];
+ 	}
+ #endif
+ 	rtn = 0;
+ 	/*
+ 	 * execute grep for each file
+ 	 */
+ #if defined(NT) && defined(USE_EXFILE)
+ 	SetConsoleCtrlHandler(handler_routine, TRUE);
+ #endif
+ 	rtn = do_search(argc, argv);
+ #if defined(NT) && defined(USE_EXFILE)
+ 	ef_term();
+ #endif
+ 	return rtn;
+ }
+ 
+ #ifdef NT
+ int
+ main(argc, argv)
+ int					argc;
+ char			**	argv;
+ {
+ 	int					rtn;
+ 
+ 	if (vimgetenv("VIM32DEBUG") == NULL)
+ 	{
+ 		__try {
+ 			rtn = win_main(argc, argv);
+ 		}
+ 		__except (EXCEPTION_CONTINUE_EXECUTION) {
+ 			;
+ 		}
+ 	}
+ 	else
+ 		rtn = win_main(argc, argv);
+ 	return rtn;
+ }
+ 
+ static int
+ DirList(dir)
+ char			*	dir;
+ {
+ 	char			*	name;
+     HANDLE				hFind;
+     WIN32_FIND_DATA		fdata;
+ 	char			*	wk;
+ 
+ 	if ((hFind = FindFirstFile(dir, &fdata)) != INVALID_HANDLE_VALUE)
+ 	{
+ 		FindClose(hFind);
+ 		if (!(fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
+ 			return(FALSE);
+ 	}
+ 	if ((wk = malloc(sizeof(char *) * (dir_cnt + 1))) == NULL)
+ 	{
+ 		fprintf(stderr, "memory allocation error.\n");
+ 		exit(2);
+ 	}
+ 	if (dir_list)
+ 		memcpy(wk, dir_list, sizeof(char *) * dir_cnt);
+ 	dir_list = (char **)wk;
+ 	if ((name = malloc(strlen(dir) + 1)) == NULL)
+ 	{
+ 		fprintf(stderr, "memory allocation error.\n");
+ 		exit(2);
+ 	}
+ 	strcpy(name, dir);
+ 	dir_list[dir_cnt++] = name;
+ 	if ((name = malloc(strlen(dir) + strlen("\\*") + 1)) == NULL)
+ 	{
+ 		fprintf(stderr, "memory allocation error.\n");
+ 		exit(2);
+ 	}
+ 	strcpy(name, dir);
+ 	if (dir[strlen(dir) - 1] != '\\' && dir[strlen(dir) - 1] != '/')
+ 		strcat(name, "\\");
+ 	strcat(name, "*");
+ 	if ((hFind = FindFirstFile(name, &fdata)) != INVALID_HANDLE_VALUE)
+ 	{
+ 		do {
+ 			if ((fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+ 					&& strcmp(fdata.cFileName, ".") != 0
+ 					&& strcmp(fdata.cFileName, "..") != 0)
+ 			{
+ 				if ((wk = malloc(strlen(dir) + strlen("fdata.cFileName") + 2)) == NULL)
+ 				{
+ 					fprintf(stderr, "memory allocation error.\n");
+ 					exit(2);
+ 				}
+ 				strcpy(wk, dir);
+ 				if (dir[strlen(dir) - 1] != '\\' && dir[strlen(dir) - 1] != '/')
+ 					strcat(wk, "\\");
+ 				strcat(wk, fdata.cFileName);
+ 				DirList(wk);
+ 				free(wk);
+ 			}
+ 		} while (FindNextFile(hFind, &fdata));
+ 		FindClose(hFind);
+ 	}
+ 	free(name);
+     return(TRUE);
+ }
+ 
+ # ifdef USE_EXFILE
+ static int
+ do_arcfile(dir, ext)
+ char			*	dir;
+ char			*	ext;
+ {
+ 	static char		lzh[]	= ".lzh";
+ 	static char		tar[]	= ".tar";
+ 	static char		taz[]	= ".taZ";
+ 	static char		tgz[]	= ".tgz";
+ 	static char		targz[]	= ".tar.gz";
+ 	static char		tarz[]	= ".tar.Z";
+ 	static char		tarbz2[]= ".tar.bz2";
+ 	static char		gzip[]	= ".gz";
+ 	static char		cmprs[]	= ".Z";
+ 	static char		bz2[]	= ".bz2";
+ 	static char	*	extend[]= {lzh, tar, taz, tgz, targz, tarz, tarbz2, gzip, cmprs, bz2, NULL};
+ 	char			buf[MAXPATHL];
+ 	char		**	ep		= extend;
+ 	int				rtn = 0;
+ 	char		**	result;
+ 	int				j;
+ 
+ 	while (*ep)
+ 	{
+ 		strcpy(buf, dir);
+ 		if (buf[strlen(buf) - 1] != '\\' && buf[strlen(buf) - 1] != '/')
+ 			strcat(buf, "\\");
+ 		strcat(buf, "*");
+ 		strcat(buf, *ep);
+ 		strcat(buf, ":");
+ 		strcat(buf, ext);
+ 		result = ef_globfilename(buf, FALSE);
+ 		for (j = 0; result[j] != NULL; j++)
+ 		{
+ 			multi = TRUE;
+ 			rtn != do_winsearch(result[j]);
+ 			free(result[j]);
+ 		}
+ 		free(result);
+ 		ep++;
+ 	}
+ 	return(rtn);
+ }
+ # endif
+ #endif
Binary files ../orig/src/grep/grep.ico and ./src/grep/grep.ico differ
diff -crN ../orig/src/grep/grep.rc ./src/grep/grep.rc
*** ../orig/src/grep/grep.rc	Thu Jan 01 09:00:00 1970
--- ./src/grep/grep.rc	Wed Sep 01 02:13:18 1999
***************
*** 0 ****
--- 1,54 ----
+ #include <winver.h>
+ #include <winnt.h>
+ #include <winuser.h>
+ #define IDC_STATIC	(-1)
+ 
+ vim       ICON      "grep.ico"
+ 
+ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
+ #pragma code_page(932)
+ 
+ VS_VERSION_INFO		VERSIONINFO
+ 	FILEVERSION		1,7,1,0
+ 	PRODUCTVERSION	1,7,1,0
+ 	FILEFLAGSMASK	VS_FFI_FILEFLAGSMASK
+ 	FILEFLAGS		0L
+ 	FILEOS          VOS__WINDOWS32
+ 	FILETYPE        VFT_APP
+ 	FILESUBTYPE     VFT2_UNKNOWN
+ BEGIN
+ 	BLOCK	"StringFileInfo"
+ 	BEGIN
+ 		BLOCK	"041104B0"
+ 		BEGIN
+ 			VALUE "Comments",			"grep"
+ 			VALUE "FileDescription",    "japanaized grep 1.7a"
+ 			VALUE "FileVersion",        "01.07.01.00"
+ 			VALUE "ProductVersion",     "01.07.01.00"
+ 			VALUE "InternalName",       "grep"
+ 			VALUE "OriginalFilename",   "grep"
+ 			VALUE "ProductName",        "Vi IMproved 3.0/JVim 3.0-j1.7a"
+ 			VALUE "LegalCopyright",     "Ken'ichi Tsuchida"
+ 		END
+ 	END
+ 	BLOCK	"VarFileInfo"
+ 	BEGIN
+ 		VALUE "Translation", 0x0411, 0x04b0
+ 	END
+ END
+ 
+ LOGIN DIALOG DISCARDABLE  0, 0, 123, 68
+ STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
+ CAPTION "LOGIN"
+ BEGIN
+     EDITTEXT        1000,47,3,68,13,ES_AUTOHSCROLL
+     EDITTEXT        1001,47,19,68,13,ES_PASSWORD | ES_AUTOHSCROLL
+     AUTOCHECKBOX    "config",1004,106,35,10,10
+     DEFPUSHBUTTON   "OK",IDOK,8,50,50,14
+     PUSHBUTTON      "CANCEL",IDCANCEL,65,50,50,14
+     LTEXT           "USER:",IDC_STATIC,5,5,40,10
+     LTEXT           "PASSWORD:",IDC_STATIC,5,21,40,10
+     LTEXT           "PROXY",IDC_STATIC,80,36,20,10
+ END
+ 
+ //BuildVer:	20
diff -crN ../orig/src/help.c ./src/help.c
*** ../orig/src/help.c	Wed Aug 10 13:54:10 1994
--- ./src/help.c	Tue Jan 26 00:59:08 1999
***************
*** 14,19 ****
--- 14,22 ----
  #include "globals.h"
  #include "proto.h"
  #include "param.h"
+ #ifdef NT
+ #include <windows.h>
+ #endif
  
  static long helpfilepos;		/* position in help file */
  static FILE *helpfd;			/* file descriptor of help file */
***************
*** 29,35 ****
  	int		i;
  	long	filepos[MAXSCREENS];	/* seek position for each screen */
  	int		screennr;			/* screen number; index == 0, 'c' == 1, 'd' == 2, etc */
! #if defined(MSDOS) && !defined(NT)
  	char_u	*fnamep;
  #endif
  
--- 32,38 ----
  	int		i;
  	long	filepos[MAXSCREENS];	/* seek position for each screen */
  	int		screennr;			/* screen number; index == 0, 'c' == 1, 'd' == 2, etc */
! #ifdef MSDOS
  	char_u	*fnamep;
  #endif
  
***************
*** 38,48 ****
   */
  	if ((helpfd = fopen((char *)p_hf, READBIN)) == NULL)
  	{
! #if defined(MSDOS) && !defined(NT)
  	/*
  	 * for MSDOS: try the DOS search path
       */
  		fnamep = searchpath("vim.hlp");
  		if (fnamep == NULL || (helpfd = fopen((char *)fnamep, READBIN)) == NULL)
  		{
  			smsg((char_u *)"Sorry, help file \"%s\" and \"vim.hlp\" not found", p_hf);
--- 41,66 ----
   */
  	if ((helpfd = fopen((char *)p_hf, READBIN)) == NULL)
  	{
! #if !defined(__GO32__)
! #ifdef MSDOS
  	/*
  	 * for MSDOS: try the DOS search path
       */
+ #ifndef NT
  		fnamep = searchpath("vim.hlp");
+ #else
+ 		{
+ 			static char buf[MAXPATHL];
+ 			char	*	p = &buf[MAXPATHL - (strlen("vim.hlp") + 1)];
+ 			int			len;
+ 
+ 			len = SearchPath(NULL, "vim.hlp", NULL, MAXPATHL, buf, &p);
+ 			if ((len == 0) || ( len > MAXPATHL))
+ 				fnamep = NULL;
+ 			else
+ 				fnamep = buf;
+ 		}
+ #endif
  		if (fnamep == NULL || (helpfd = fopen((char *)fnamep, READBIN)) == NULL)
  		{
  			smsg((char_u *)"Sorry, help file \"%s\" and \"vim.hlp\" not found", p_hf);
***************
*** 52,57 ****
--- 70,76 ----
  		smsg((char_u *)"Sorry, help file \"%s\" not found", p_hf);
  		return;
  #endif
+ #endif
  	}
  	helpfilepos = 0;
  	screennr = 0;
***************
*** 60,65 ****
--- 79,88 ----
  	State = HELP;
  	for (;;)
  	{
+ #ifdef NT
+ 		if (GuiWin)
+ 			screenclear();
+ #endif
  		screens = redrawhelp();				/* show one or more screens */
  		eof = (screens < 0);
  		if (!eof && screennr + screens < MAXSCREENS)
***************
*** 69,77 ****
--- 92,104 ----
  			break;
  
  		if (c == ' ' ||
+ #ifdef KANJI
+ 				(c == K_SDARROW) ||	/* page down */
+ #else
  #ifdef MSDOS
  				(c == K_NUL && vpeekc() == 'Q') ||	/* page down */
  #endif
+ #endif
  				c == Ctrl('F'))						/* one screen forwards */
  		{
  			if (screennr < MAXSCREENS && !eof)
***************
*** 80,88 ****
--- 107,119 ----
  		else if (c == 'a')					/* go to first screen */
  			screennr = 0;
  		else if (c == 'b' ||
+ #ifdef KANJI
+ 				(c == K_SUARROW) ||	/* page up */
+ #else
  #ifdef MSDOS
  				(c == K_NUL && vpeekc() == 'I') ||	/* page up */
  #endif
+ #endif
  				c == Ctrl('B'))					/* go one screen backwards */
  		{
  			if (screennr > 0)
***************
*** 94,103 ****
--- 125,136 ----
  				c = c - 'A' + 'z' + 1;		/* 'A' comes after 'z' */
  			screennr = c - 'b';
  		}
+ #ifndef KANJI
  #ifdef MSDOS
  		if (c == K_NUL)
  			c = vgetc();
  #endif
+ #endif
  		for (i = screennr; i > 0; --i)
  			if (filepos[i])
  				break;
***************
*** 127,161 ****
  redrawhelp()
  {
  	int nextc;
! 	int col;
  	int	line = 0;
  	int	screens = 1;
  
  	fseek(helpfd, helpfilepos, 0);
  	outstr(T_ED);
  	(void)set_highlight('h');
  	windgoto(0,0);
  	while ((nextc = getc(helpfd)) != -1 && (nextc != '\f' || line < Rows - 24))
  	{
  		if (nextc == Ctrl('B'))			/* begin of standout */
  			start_highlight();
  		else if (nextc == Ctrl('E'))	/* end of standout */
  			stop_highlight();
  		else if (nextc == '\f')			/* start of next screen */
  		{
  			++screens;
  			outchar('\n');
  			++line;
  		}
  		else
  		{
  			outchar(nextc);
  			if (nextc == '\n')
  				++line;
  		}
  	}
  	windgoto(0, (int)(Columns - STRLEN(Version) - 1));
  	outstrn(Version);
  	col = (int)Columns - 52;
  	if (col < 0)
  		col = 0;
--- 160,285 ----
  redrawhelp()
  {
  	int nextc;
! 	int col = 0;
  	int	line = 0;
  	int	screens = 1;
  
  	fseek(helpfd, helpfilepos, 0);
  	outstr(T_ED);
+ #ifdef NT
+ 	if (GuiWin)
+ 	{
+ 		IObuff[0] = NUL;
+ 		msg_pos(0, 0);
+ 	}
+ #endif
  	(void)set_highlight('h');
  	windgoto(0,0);
  	while ((nextc = getc(helpfd)) != -1 && (nextc != '\f' || line < Rows - 24))
  	{
  		if (nextc == Ctrl('B'))			/* begin of standout */
+ 		{
+ #ifdef NT
+ 			if (GuiWin)
+ 			{
+ 				IObuff[col] = '\0';
+ 				if (IObuff[0] != NUL)
+ 					msg_outstr(IObuff);
+ 				col = 0;
+ 			}
+ #endif
  			start_highlight();
+ 		}
  		else if (nextc == Ctrl('E'))	/* end of standout */
+ 		{
+ #ifdef NT
+ 			if (GuiWin)
+ 			{
+ 				IObuff[col] = '\0';
+ 				msg_outstr(IObuff);
+ 				col = 0;
+ 			}
+ #endif
  			stop_highlight();
+ 		}
  		else if (nextc == '\f')			/* start of next screen */
  		{
  			++screens;
+ #ifdef NT
+ 			if (GuiWin)
+ 			{
+ 				IObuff[col] = '\0';
+ 				msg_outstr(IObuff);
+ 				col = 0;
+ 			}
+ 			else
+ #endif
  			outchar('\n');
  			++line;
  		}
  		else
  		{
+ #ifdef NT
+ 			if (!GuiWin)
+ #endif
+ #ifndef notdef
+ 			if (nextc != '\n')
+ #endif
  			outchar(nextc);
  			if (nextc == '\n')
+ 			{
+ #ifdef NT
+ 				if (GuiWin)
+ 				{
+ 					IObuff[--col] = '\0';
+ 					msg_outstr(IObuff);
+ 					col = 0;
+ 				}
+ #endif
  				++line;
+ #ifndef notdef
+ # ifdef NT
+ 				if (GuiWin)
+ 				{
+ 					msg_pos(line, 0);
+ 					msg_ceol();
+ 				}
+ 				else
+ # endif
+ 				windgoto(line, 0);
+ #endif
+ 			}
+ #ifdef NT
+ 			else if (GuiWin)
+ 				IObuff[col++] = nextc;
+ #endif
  		}
  	}
+ #ifdef NT
+ 	if (GuiWin)
+ 	{
+ # ifdef KANJI
+ 		msg_pos(0, (int)(Columns - STRLEN(JpVersion) - 1));
+ 		msg_outstr(JpVersion);
+ # else
+ 		msg_pos(0, (int)(Columns - STRLEN(Version) - 1));
+ 		msg_outstr(Version);
+ # endif
+ 		col = (int)Columns - 52;
+ 		if (col < 0)
+ 			col = 0;
+ 		msg_pos((int)Rows - 1, col);
+ 		msg_outstr("<space = next; return = quit; a = index; b = back>");
+ 		return (nextc == -1 ? -1 : screens);
+ 	}
+ #endif
+ #ifdef KANJI
+ 	windgoto(0, (int)(Columns - STRLEN(JpVersion) - 1));
+ 	outstrn(JpVersion);
+ #else
  	windgoto(0, (int)(Columns - STRLEN(Version) - 1));
  	outstrn(Version);
+ #endif
  	col = (int)Columns - 52;
  	if (col < 0)
  		col = 0;
diff -crN ../orig/src/jptab.c ./src/jptab.c
*** ../orig/src/jptab.c	Thu Jan 01 09:00:00 1970
--- ./src/jptab.c	Mon Mar 22 07:44:22 1999
***************
*** 0 ****
--- 1,407 ----
+ /* vi:ts=4:sw=4
+ 
+ 	jptab.h generator (SJIS or EUC file)
+ 
+ */
+ 
+ #ifndef KANJI
+ #define KANJI
+ #endif
+ 
+ #include <stdio.h>
+ #include "vim.h"
+ #include "kanji.h"
+ 
+ char_u *										/* L */
+ Upsyms = "^PRSVABEcLeg{b[ijopuv";
+ 
+ char_u *										/* L */
+ Losyms = "_QTUXCD]dMfh}~a|qrklwx";
+ 
+ char_u *										/* sL */
+ Pcsyms = "[|ABCDFGHIJKLRSTUWXYVcdfhjlnprtvxz";
+ char_u * Pckana = "";		/* s */
+ char_u * PCASCI = ".,:;!?>)}]-";				/* sASCII*/
+ char_u * Posyms = "Megikmoqsuwy";/* (close)L */
+ char_u * POASCI = "<({[@`";						/* (close) */
+ 
+ char_u *Spsyms = "@";							/* L */
+ char_u *Kjsyms = "WXYV";					/* L */
+ char_u *Ktsyms = "[|";						/* J^JiL */
+ char_u *Hrsyms = "RSTU";					/* L */
+ char_u *Sesyms = "BDHI";					/* L */
+ 
+ 
+ /*	JIS X 0201 pJi  JIS X0208 SpJ^Ji  */
+ char_u *JISX0201 = 
+ "  BuvAE@BDFHb|ACEGIJLNPRTVXZ\^`cegijklmnqtwz}~JK";
+ 
+ /*    */
+ char_u *Ksyms[] = {
+ 	"!I",	"\"h",	"#",	"$",	"%",	"&",	"'f",	"(i", ")j",
+ 	"-|",	"=",	"^O",	"~P",	"\\",	"|b",	"@",	"`e", "[m",
+ 	"{o",	";G",	"+{",	":F",	"*",	"]n",	"}p",	",C", "<",
+ 	".D",	">",	"/^",	"?H",	" @",	"\t@",	"\0\0\0",
+ 	NULL};
+ 
+ /* tracktab{Zbg */
+ char_u *trackset[] =
+ {
+ 	"tracktab_jp",
+ 		"  ", "", "", "", "", "", "", "",
+ 		"", "", "", "", "", "", "", "", "",
+ 	"tracktab_bj",
+ 		"  ", "", "", "", "", "", "", "",
+ 		"", "", "", "", "", "", "", "", "",
+ 	"tracktab_hj",
+ 		"  ", "", "", "", "", "", "", "",
+ 		"", "", "", "", "", "", "", "", "",
+ 	NULL
+ };
+ 
+ char_u *UPSYMS;
+ char_u *LOSYMS;
+ char_u *PCSYMS;
+ char_u *PCKANA;
+ char_u *POSYMS;
+ char_u *SPSYMS;
+ char_u *KJSYMS;
+ char_u *KTSYMS;
+ char_u *HRSYMS;
+ char_u *SESYMS;
+ 
+ #define JPC_NG ((char)-1)
+ #define JUPS 1
+ #define JLOS 2
+ 
+ struct jptab
+ {
+ 	char cls1, cls2;
+ #if 1
+ 	/* Turbo C++ doesn't handle bitfields correctly... */
+ 	char punccsym, puncckana, punccasc;
+ 	char puncosym, puncoasc, stcend;
+ 	unsigned int scase;
+ #else
+ 	int punccsym:1, puncckana:1, punccasc:1;
+ 	int puncosym:1, puncoasc:1, stcend:1;
+ 	unsigned int scase:2;
+ #endif
+ 	char swap;
+ } jptab[128];
+ 
+ char *macroJPC[128];
+ 
+ static void		sjistoeuc __ARGS((char_u *, char_u *));
+ static void		euctosjis __ARGS((char_u *, char_u *));
+ 
+ 	static void
+ sjistoeuc(high, low)
+ char_u	*	high;
+ char_u	*	low;
+ {
+ 	if (*high <= 0x9f)
+ 		*high -= 0x71;
+ 	else
+ 		*high -= 0xb1;
+ 	*high = *high * 2 + 1;
+ 	if (*low > 0x7f)
+ 		(*low)--;
+ 	if (*low >= 0x9e)
+ 	{
+ 		*low -= 0x7d;
+ 		(*high)++;
+ 	}
+ 	else
+ 	{
+ 		*low -= 0x1f;
+ 	}
+ }
+ 
+ 	static void
+ euctosjis(high, low)
+ char_u	*	high;
+ char_u	*	low;
+ {
+ 	*low  &= 0x7f;
+ 	*high &= 0x7f;
+ 	if (*high & 1)
+ 		*low += 0x1f;
+ 	else
+ 		*low += 0x7d;
+ 	if (*low >= 0x7f)
+ 		(*low)++;
+ 	*high = (*high - 0x21 >> 1) + 0x81;
+ 	if (*high > 0x9f)
+ 		*high += 0x40;
+ }
+ 
+ 
+ #if defined(UTS4)
+     int
+ #else
+ 	void
+ #endif
+ main()
+ {
+ 	int i;
+ 	char_u *cp, *dp;
+ 
+ 	UPSYMS = strdup(Upsyms);
+ 	LOSYMS = strdup(Losyms);
+ 	PCSYMS = strdup(Pcsyms);
+ 	PCKANA = strdup(Pckana);
+ 	POSYMS = strdup(Posyms);
+ 	SPSYMS = strdup(Spsyms);
+ 	KJSYMS = strdup(Kjsyms);
+ 	KTSYMS = strdup(Ktsyms);
+ 	HRSYMS = strdup(Hrsyms);
+ 	SESYMS = strdup(Sesyms);
+ 
+ 	/* convert kanji code start */
+ 	if ((char_u)UPSYMS[0] == 0x81 && (char_u)UPSYMS[1] == 0x5e)
+ 	{
+ 		fprintf(stderr, "\tSJIS -> EUC convert\n");
+ 		for(cp = UPSYMS; *cp; cp+=2) sjistoeuc(cp, cp+1);
+ 		for(cp = LOSYMS; *cp; cp+=2) sjistoeuc(cp, cp+1);
+ 		for(cp = PCSYMS; *cp; cp+=2) sjistoeuc(cp, cp+1);
+ 		for(cp = PCKANA; *cp; cp+=2) sjistoeuc(cp, cp+1);
+ 		for(cp = POSYMS; *cp; cp+=2) sjistoeuc(cp, cp+1);
+ 		for(cp = SPSYMS; *cp; cp+=2) sjistoeuc(cp, cp+1);
+ 		for(cp = KJSYMS; *cp; cp+=2) sjistoeuc(cp, cp+1);
+ 		for(cp = KTSYMS; *cp; cp+=2) sjistoeuc(cp, cp+1);
+ 		for(cp = HRSYMS; *cp; cp+=2) sjistoeuc(cp, cp+1);
+ 		for(cp = SESYMS; *cp; cp+=2) sjistoeuc(cp, cp+1);
+ 	}
+ 	else
+ 	{
+ 		char_u **tp;
+ 
+ 		fprintf(stderr, "\tEUC -> SJIS convert\n");
+ 		for (tp = trackset; *tp; tp++)
+ 		{
+ 			tp++;
+ 			for(; **tp; tp++)
+ 				if (**tp >= 0x80) euctosjis(*tp, (*tp)+1);
+ 		}
+ 		for (cp = JISX0201; *cp; cp+=2)
+ 			if (*cp >= 0x80) euctosjis(cp, cp+1);
+ 	}
+ 	/* convert kanji code end */
+ 
+ 
+ 	printf("/*\n");
+ 	printf("   This table is generated by jptab.c. \n");
+ 	printf("*/\n\n");
+ 	printf("#ifndef JP_TRACKTAB\n");
+ 	printf("#define JUPS 1\n");
+ 	printf("#define JLOS 2\n\n");
+ 	printf("#define JPCS TRUE\n");
+ 	printf("#define JPOS TRUE\n");
+ 	printf("#define JPCK TRUE\n");
+ 	printf("#define JPCA TRUE\n\n");
+ 	printf("#define JPOA TRUE\n\n");
+ 	printf("static struct jptab\n");
+ 	printf("{\n");
+ 	printf("\tchar\tcls1, cls2;\n");
+ 	printf("\tint\tpunccsym:1, puncckana:1, punccasc:1;\n");
+ 	printf("\tint\tpuncosym:1, puncoasc:1, stcend:1;\n");
+ 	printf("\tunsigned int\tscase:2;\n");
+ 	printf("\tchar\tswap;\n");
+ 	printf("}\t");
+ 
+ 	for(i = 0; i < 128; i++)
+ 	{
+ 		jptab[i].cls1 = jptab[i].cls2 = JPC_NG;
+ 		jptab[i].scase = 0;
+ 		jptab[i].punccsym = jptab[i].puncckana = jptab[i].punccasc = 0;
+ 		jptab[i].puncosym = jptab[i].puncoasc  = jptab[i].stcend   = 0;
+ 		jptab[i].swap = i;
+ 	}
+ 
+ 	/* init cls1 */
+ 	for(i = ' ' + 1; i < '\177'; i++)
+ 		jptab[i].cls1 = JPC_KANJI;
+ 	jptab[JP1_ALNUM & 0x7f].cls1 = JPC_ALNUM;
+ 	jptab[JP1_HIRA  & 0x7f].cls1 = JPC_HIRA;
+ 	jptab[JP1_KATA  & 0x7f].cls1 = JPC_KATA;
+ 	jptab[JP1_KIGOU & 0x7f].cls1 = JPC_KIGOU;
+ 	jptab[JP1_KIGOU2& 0x7f].cls1 = JPC_KIGOU2;
+ 
+ 	for(i = 0; i < 128; i++)
+ 		macroJPC[i] = "JPTAB macro JPC_XXX ERROR";
+ 	macroJPC[0] =         "/*Spc*/ 0";
+ 	macroJPC[JPC_ALNUM] = "JPC_ALNUM";
+ 	macroJPC[JPC_HIRA ] = "JPC_HIRA ";
+ 	macroJPC[JPC_KATA ] = "JPC_KATA ";
+ 	macroJPC[JPC_KIGOU] = "JPC_KIGOU";
+ 	macroJPC[JPC_KIGOU2]= "JPC_KIGOU2";
+ 	macroJPC[JPC_KANJI] = "JPC_KANJI";
+ 
+ 	/* init cls2 */
+ 	for(i = ' ' + 1; i < '\177'; i++)
+ 		jptab[i].cls2 = JPC_KIGOU;
+ 	for(cp = SPSYMS; *cp; cp+=2) jptab[ *(cp + 1) & 0x7f ].cls2 = 0;
+ 	for(cp = KJSYMS; *cp; cp+=2) jptab[ *(cp + 1) & 0x7f ].cls2 = JPC_KANJI;
+ 	for(cp = KTSYMS; *cp; cp+=2) jptab[ *(cp + 1) & 0x7f ].cls2 = JPC_KATA;
+ 	for(cp = HRSYMS; *cp; cp+=2) jptab[ *(cp + 1) & 0x7f ].cls2 = JPC_HIRA;
+ 
+ 	/* init puncsym, punckana */
+ 	for(cp = PCSYMS; *cp; cp+=2) jptab[ *(cp + 1) & 0x7f ].punccsym  = 1;
+ 	for(cp = PCKANA; *cp; cp+=2) jptab[ *(cp + 1) & 0x7f ].puncckana = 1;
+ 	for(cp = PCASCI; *cp; cp++)  jptab[ *cp & 0x7f ].punccasc = 1;
+ 
+ 	for(cp = POSYMS; *cp; cp+=2) jptab[ *(cp + 1) & 0x7f ].puncosym  = 1;
+ 	for(cp = POASCI; *cp; cp++)  jptab[ *cp & 0x7f ].puncoasc = 1;
+ 
+ 	/* init stcend */
+ 	for(cp = SESYMS; *cp; cp++)  jptab[ *cp & 0x7f ].stcend = 1;
+ 
+ 	/* init scase */
+ 	for(cp = UPSYMS; *cp; cp+=2) jptab[ *(cp + 1) & 0x7f ].scase = JUPS;
+ 	for(cp = LOSYMS; *cp; cp+=2) jptab[ *(cp + 1) & 0x7f ].scase = JLOS;
+ 
+ 	/* init swap */
+ 	for(cp = UPSYMS, dp = LOSYMS; *cp; cp+=2, dp+=2)
+ 		jptab[ *(cp + 1) & 0x7f ].swap = *(dp + 1) | 0x80;
+ 	for(cp = LOSYMS, dp = UPSYMS; *cp; cp+=2, dp+=2)
+ 		jptab[ *(cp + 1) & 0x7f ].swap = *(dp + 1) | 0x80;
+ 
+ 	printf("\tjptab[128] = {\n");
+ 
+ 	for(i = 0; i < 128; i++)
+     {
+ 		printf("{");
+ 
+ 		/* cls1 */
+ 		printf("%9s,", jptab[i].cls1==JPC_NG ? "-1": macroJPC[jptab[i].cls1]);
+ 		/* cls2 */
+ 		printf("%9s,", jptab[i].cls2==JPC_NG ? "-1": macroJPC[jptab[i].cls2]);
+ 
+ 		/* punccsym  */
+ 		printf("%s,", jptab[i].punccsym  ? "JPCS": "   0");
+ 		/* puncckana  */
+ 		printf("%s,", jptab[i].puncckana ? "JPCK": "   0");
+ 		/* punccasc  */
+ 		printf("%s,", jptab[i].punccasc  ? "JPCA": "   0");
+ 
+ 		/* puncosym  */
+ 		printf("%s,", jptab[i].puncosym  ? "JPOS": "   0");
+ 		/* puncoasc  */
+ 		printf("%s,", jptab[i].puncoasc  ? "JPOA": "   0");
+ 
+ 		/* stcend  */
+ 		printf("%s,", jptab[i].stcend  ? "1": "0");
+ 
+ 		/* scase */
+ 		switch(jptab[i].scase)
+ 		{
+ 			case JUPS: printf("JUPS,");break;
+ 			case JLOS: printf("JLOS,");break;
+ 			default:   printf("   0,");
+ 		}
+ 
+ 		/* swap */
+ #ifdef comment
+ 		if ((jptab[i].swap & 0x7f) > ' '&& (jptab[i].swap & 0x7f) < '\177')
+ 			printf("/*%c%c*/", JP1_KIGOU | 0x80, jptab[i].swap | 0x80);
+ 		else
+ 			printf("/*%2x*/", jptab[i].swap & 0x7f);
+ 			/*printf("      ");*/
+ #endif
+ 		printf("'\\%03o' ", (jptab[i].swap | 0x80) & 0xff);
+ 
+ 		/* */
+ 		printf("}");
+ 
+ #ifdef comment
+ 		if ( i > ' ' && i < '\177')
+ 			printf("/*%c %c%c%c%c */ ",
+ 							i, JP1_HIRA|0x80, i|0x80,
+ 							   JP1_KIGOU|0x80,i|0x80);
+ 		else
+ 			printf("/* 0x%02x  */ ", i);
+ #endif
+ 
+ 		printf(i != '\177' ? ",\n": "\n");
+ 	}
+ 	printf("};\n\n");
+ 	/*
+ 	 *  JIS X 0201R <-> JIS X 0208 conversion table
+ 	 */
+ 	printf("char jisx0201r[] =");
+ 	printf("{\n");
+ 	for(cp = JISX0201; *cp; cp+=2)
+ #ifdef comment
+ 		printf("\t '\\%03o', '\\%03o', /* %c%c */\n",
+ 				*cp & 0xff , *(cp + 1) & 0xff, *cp, *(cp + 1));
+ #else
+ 		printf("\t '\\%03o', '\\%03o',\n", *cp & 0xff , *(cp + 1) & 0xff);
+ #endif
+ 	printf("};\n\n");
+  	{
+ 		char_u **	tp;
+ 		int			i;
+ 
+ 		printf("char *Asconv[] =\n");
+ 		printf("{\n");
+ 		for(tp = Ksyms, i = 1; *tp; tp++, i++)
+ 		{
+ 			unsigned char *cp = *tp;
+ 
+ 			printf(" \"");
+ 			printf("\\%03o", *(cp + 0));
+ 			printf("\\%03o", *(cp + 1));
+ 			printf("\\%03o", *(cp + 2));
+ 			printf("\"/* %c */,", *cp == '\0' ? '@' : *cp);
+ 			if (*(tp + 1) == NULL)
+ 				break;
+ 			if (i % 3 == 0)
+ 				printf("\n");
+ 			else
+ 				printf(" ");
+ 		}
+ 		printf("\n};\n\n");
+ 	}
+ 
+ /*
+  *
+  * JP_TRACKTAB
+  *
+  */
+ 	printf("#else /* JP_TRACKTAB */\n");
+  	{
+ 		char_u **tp;
+ 		for(tp = trackset; *tp; tp++)
+ 		{
+ 			int i;
+ 			printf("char *%s[] =\n", *tp++);
+ 			printf("{\n");
+ 			for(i = 1; **tp; tp++, i++)
+ 			{
+ 				unsigned char *cp;
+ 				int n;
+ 
+ 				printf(" \"");
+ 				for(n = 0, cp = (unsigned char *)*tp; *cp; cp++)
+ 				{
+ 					printf("\\%03o", *cp);
+ 					n += 4;
+ 				}
+ 				printf("\"");
+ 				for(; n < 8; n++)
+ 					printf(" ");
+ #ifdef comment
+ 				printf("/*%s*/", *tp);
+ #endif
+ 				if (**(tp + 1))
+ 					printf(",");
+ 				if (i % 4 == 0)
+ 					printf("\n");
+ 			}
+ 			printf("};\n");
+ 		}
+ 	}
+ 	printf("#endif /* JP_TRACKTAB */\n");
+ 	exit(0);
+ }
diff -crN ../orig/src/jptab.h ./src/jptab.h
*** ../orig/src/jptab.h	Thu Jan 01 09:00:00 1970
--- ./src/jptab.h	Mon Mar 22 07:50:22 1999
***************
*** 0 ****
--- 1,259 ----
+ /*
+    This table is generated by jptab.c. 
+ */
+ 
+ #ifndef JP_TRACKTAB
+ #define JUPS 1
+ #define JLOS 2
+ 
+ #define JPCS TRUE
+ #define JPOS TRUE
+ #define JPCK TRUE
+ #define JPCA TRUE
+ 
+ #define JPOA TRUE
+ 
+ static struct jptab
+ {
+ 	char	cls1, cls2;
+ 	int	punccsym:1, puncckana:1, punccasc:1;
+ 	int	puncosym:1, puncoasc:1, stcend:1;
+ 	unsigned int	scase:2;
+ 	char	swap;
+ }		jptab[128] = {
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\200' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\201' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\202' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\203' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\204' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\205' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\206' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\207' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\210' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\211' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\212' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\213' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\214' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\215' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\216' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\217' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\220' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\221' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\222' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\223' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\224' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\225' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\226' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\227' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\230' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\231' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\232' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\233' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\234' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\235' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\236' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\237' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\240' },
+ {JPC_KIGOU,/*Spc*/ 0,   0,JPCK,JPCA,   0,   0,1,   0,'\241' },
+ {JPC_KIGOU2,JPC_KIGOU,JPCS,   0,   0,   0,   0,0,JUPS,'\244' },
+ {JPC_ALNUM,JPC_KIGOU,JPCS,JPCK,   0,   0,   0,1,JUPS,'\245' },
+ {JPC_HIRA ,JPC_KIGOU,JPCS,   0,   0,   0,   0,0,JLOS,'\242' },
+ {JPC_KATA ,JPC_KIGOU,JPCS,JPCK,   0,   0,   0,1,JLOS,'\243' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,JUPS,'\276' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,JPCK,   0,   0,   0,0,   0,'\247' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,   0,   0,   0,JPOA,0,   0,'\250' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,JPCK,JPCA,   0,   0,1,   0,'\251' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,   0,   0,   0,   0,1,   0,'\252' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,   0,   0,   0,   0,0,   0,'\253' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,   0,JPCA,   0,   0,0,   0,'\254' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,   0,JPCA,   0,   0,0,JUPS,'\256' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,JPCA,JPOS,   0,0,JLOS,'\255' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,   0,'\257' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,   0,'\260' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,JUPS,'\262' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,JLOS,'\261' },
+ {JPC_KANJI,JPC_HIRA ,JPCS,   0,   0,   0,   0,0,JUPS,'\265' },
+ {JPC_KANJI,JPC_HIRA ,JPCS,   0,   0,   0,   0,0,JUPS,'\266' },
+ {JPC_KANJI,JPC_HIRA ,JPCS,   0,   0,   0,   0,0,JLOS,'\263' },
+ {JPC_KANJI,JPC_HIRA ,JPCS,   0,   0,   0,   0,0,JLOS,'\264' },
+ {JPC_KANJI,JPC_KANJI,JPCS,   0,   0,   0,   0,0,JUPS,'\271' },
+ {JPC_KANJI,JPC_KANJI,JPCS,   0,   0,   0,   0,0,   0,'\270' },
+ {JPC_KANJI,JPC_KANJI,JPCS,   0,   0,   0,   0,0,JLOS,'\267' },
+ {JPC_KANJI,JPC_KANJI,JPCS,   0,JPCA,   0,   0,0,   0,'\272' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,JPCA,   0,   0,0,   0,'\273' },
+ {JPC_KANJI,JPC_KATA ,JPCS,   0,   0,   0,JPOA,0,JUPS,'\335' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,   0,'\275' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,JPCA,   0,   0,0,JLOS,'\246' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,JPCA,   0,   0,0,JUPS,'\300' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,JPOA,0,JLOS,'\277' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,   0,'\301' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,JLOS,'\303' },
+ {JPC_KANJI,JPC_KIGOU,   0,JPCK,   0,   0,   0,0,JUPS,'\302' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,   0,   0,   0,   0,0,JUPS,'\305' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,   0,   0,   0,   0,0,JLOS,'\304' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,JPOS,   0,0,JUPS,'\307' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,   0,   0,   0,   0,0,JLOS,'\306' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,JPOS,   0,0,JUPS,'\311' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,   0,   0,   0,   0,0,JLOS,'\310' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,JPOS,   0,0,JUPS,'\322' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,   0,   0,   0,   0,0,JUPS,'\323' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,JPOS,   0,0,JLOS,'\320' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,   0,   0,   0,   0,0,JLOS,'\321' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,JPOS,   0,0,   0,'\316' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,   0,   0,   0,   0,0,   0,'\317' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,JPOS,   0,0,JUPS,'\314' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,   0,   0,   0,   0,0,JUPS,'\315' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,JPOS,   0,0,JLOS,'\312' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,   0,   0,   0,   0,0,JLOS,'\313' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,JPOS,   0,0,   0,'\324' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,   0,   0,   0,   0,0,   0,'\325' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,JPOS,   0,0,JUPS,'\330' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,   0,   0,   0,   0,0,JUPS,'\331' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,JPOS,   0,0,JLOS,'\326' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,   0,   0,   0,   0,0,JLOS,'\327' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,JPOS,   0,0,   0,'\332' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,   0,   0,   0,JPOA,0,   0,'\333' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,JUPS,'\336' },
+ {JPC_KANJI,JPC_KATA ,JPCS,   0,JPCA,   0,   0,0,JLOS,'\274' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,JLOS,'\334' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,JLOS,'\366' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,JPOA,0,JLOS,'\363' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,JUPS,'\342' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,JLOS,'\341' },
+ {JPC_KANJI,JPC_KIGOU,   0,JPCK,   0,   0,   0,0,JUPS,'\345' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,JUPS,'\346' },
+ {JPC_KANJI,JPC_KIGOU,   0,JPCK,   0,   0,   0,0,JLOS,'\343' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,JLOS,'\344' },
+ {JPC_KANJI,JPC_KIGOU,   0,JPCK,   0,   0,   0,0,   0,'\347' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,   0,'\350' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,JUPS,'\352' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,JLOS,'\351' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,   0,   0,   0,   0,0,JUPS,'\356' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,   0,   0,   0,   0,0,   0,'\354' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,   0,   0,   0,   0,0,   0,'\355' },
+ {JPC_KANJI,JPC_KIGOU,JPCS,JPCK,   0,   0,   0,0,JLOS,'\353' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,JPOS,   0,0,JUPS,'\360' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,JPOS,   0,0,JLOS,'\357' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,JPOS,   0,0,   0,'\361' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,JPOS,   0,0,   0,'\362' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,JUPS,'\340' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,   0,'\364' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,   0,'\365' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,JUPS,'\337' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,   0,'\367' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,JPOS,   0,0,   0,'\370' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,JUPS,'\372' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,JLOS,'\371' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,JPOA,0,JUPS,'\374' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,JLOS,'\373' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,JPCA,   0,   0,0,   0,'\375' },
+ {JPC_KANJI,JPC_KIGOU,   0,   0,   0,   0,   0,0,   0,'\376' },
+ {       -1,       -1,   0,   0,   0,   0,   0,0,   0,'\377' }
+ };
+ 
+ char jisx0201r[] ={
+ 	 '\040', '\040',
+ 	 '\201', '\102',
+ 	 '\201', '\165',
+ 	 '\201', '\166',
+ 	 '\201', '\101',
+ 	 '\201', '\105',
+ 	 '\203', '\222',
+ 	 '\203', '\100',
+ 	 '\203', '\102',
+ 	 '\203', '\104',
+ 	 '\203', '\106',
+ 	 '\203', '\110',
+ 	 '\203', '\203',
+ 	 '\203', '\205',
+ 	 '\203', '\207',
+ 	 '\203', '\142',
+ 	 '\201', '\174',
+ 	 '\203', '\101',
+ 	 '\203', '\103',
+ 	 '\203', '\105',
+ 	 '\203', '\107',
+ 	 '\203', '\111',
+ 	 '\203', '\112',
+ 	 '\203', '\114',
+ 	 '\203', '\116',
+ 	 '\203', '\120',
+ 	 '\203', '\122',
+ 	 '\203', '\124',
+ 	 '\203', '\126',
+ 	 '\203', '\130',
+ 	 '\203', '\132',
+ 	 '\203', '\134',
+ 	 '\203', '\136',
+ 	 '\203', '\140',
+ 	 '\203', '\143',
+ 	 '\203', '\145',
+ 	 '\203', '\147',
+ 	 '\203', '\151',
+ 	 '\203', '\152',
+ 	 '\203', '\153',
+ 	 '\203', '\154',
+ 	 '\203', '\155',
+ 	 '\203', '\156',
+ 	 '\203', '\161',
+ 	 '\203', '\164',
+ 	 '\203', '\167',
+ 	 '\203', '\172',
+ 	 '\203', '\175',
+ 	 '\203', '\176',
+ 	 '\203', '\200',
+ 	 '\203', '\201',
+ 	 '\203', '\202',
+ 	 '\203', '\204',
+ 	 '\203', '\206',
+ 	 '\203', '\210',
+ 	 '\203', '\211',
+ 	 '\203', '\212',
+ 	 '\203', '\213',
+ 	 '\203', '\214',
+ 	 '\203', '\215',
+ 	 '\203', '\217',
+ 	 '\203', '\223',
+ 	 '\201', '\112',
+ 	 '\201', '\113',
+ };
+ 
+ char *Asconv[] =
+ {
+  "\041\201\111"/* ! */,  "\042\201\150"/* " */,  "\043\201\224"/* # */,
+  "\044\201\220"/* $ */,  "\045\201\223"/* % */,  "\046\201\225"/* & */,
+  "\047\201\146"/* ' */,  "\050\201\151"/* ( */,  "\051\201\152"/* ) */,
+  "\055\201\174"/* - */,  "\075\201\201"/* = */,  "\136\201\117"/* ^ */,
+  "\176\201\120"/* ~ */,  "\134\201\217"/* \ */,  "\174\201\142"/* | */,
+  "\100\201\227"/* @ */,  "\140\201\145"/* ` */,  "\133\201\155"/* [ */,
+  "\173\201\157"/* { */,  "\073\201\107"/* ; */,  "\053\201\173"/* + */,
+  "\072\201\106"/* : */,  "\052\201\226"/* * */,  "\135\201\156"/* ] */,
+  "\175\201\160"/* } */,  "\054\201\103"/* , */,  "\074\201\203"/* < */,
+  "\056\201\104"/* . */,  "\076\201\204"/* > */,  "\057\201\136"/* / */,
+  "\077\201\110"/* ? */,  "\040\201\100"/*   */,  "\011\201\100"/* 	 */,
+  "\000\000\000"/* @ */,
+ };
+ 
+ #else /* JP_TRACKTAB */
+ char *tracktab_jp[] =
+ {
+  "\040\040", "\201\253", "\201\252", "\204\240",
+  "\201\250", "\204\243", "\204\242", "\204\247",
+  "\201\251", "\204\244", "\204\241", "\204\245",
+  "\204\237", "\204\250", "\204\246", "\204\251"
+ };
+ char *tracktab_bj[] =
+ {
+  "\040\040", "\201\253", "\201\252", "\204\253",
+  "\201\250", "\204\256", "\204\255", "\204\262",
+  "\201\251", "\204\257", "\204\254", "\204\260",
+  "\204\252", "\204\263", "\204\261", "\204\264"
+ };
+ char *tracktab_hj[] =
+ {
+  "\040\040", "\201\253", "\201\252", "\204\240",
+  "\201\250", "\204\243", "\204\242", "\204\274",
+  "\201\251", "\204\257", "\204\254", "\204\272",
+  "\204\252", "\204\270", "\204\266", "\204\271"
+ };
+ #endif /* JP_TRACKTAB */
diff -crN ../orig/src/kanji.c ./src/kanji.c
*** ../orig/src/kanji.c	Thu Jan 01 09:00:00 1970
--- ./src/kanji.c	Thu Dec 16 00:01:56 1999
***************
*** 0 ****
--- 1,2201 ----
+ /*******************************************************************************
+  * vi:ts=4:sw=4
+  *	original Ogasawara Hiroyuki (COR.)
+  *  original Atsushi Nakamura
+  ******************************************************************************/
+ #ifdef KANJI
+ 
+ #ifdef MSDOS
+ #include	<io.h>
+ #endif
+ #ifdef NT
+ # include <windows.h>
+ # undef DELETE
+ #endif
+ #include	"vim.h"
+ #include	"globals.h"
+ #include	"proto.h"
+ #include	"param.h"
+ #include	"ops.h"
+ #include	"kanji.h"
+ #include	"jptab.h"
+ 
+ #define	JP_EUC_G2		0x8e
+ 
+ static int_u euctosjis		__ARGS((char_u, char_u));
+ static int_u sjistoeuc		__ARGS((char_u, char_u));
+ static char_u *kanjiin		__ARGS((char_u));
+ static char_u *asciiin		__ARGS((char_u));
+ static char_u *kanain		__ARGS((char_u));
+ static int jisx0201rto0208	__ARGS((char_u, char_u, char_u *, char_u *));
+ 
+ static char_u	kanji_map_sjis[]= {
+ 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 	0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 	0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 	2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 	2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 	2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 	1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0
+ };
+ 
+ static char_u	kanji_map_euc[]= {
+ 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,
+ 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 	0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
+ };
+ 
+ 	int
+ ISkanji(code)
+ int			code;
+ {
+ 	if (code >= 0x100)
+ 		return 0;
+ 	return(kanji_map_sjis[code & 0xff] & 1);
+ }
+ 
+ 	int
+ ISkana(code)
+ int			code;
+ {
+ 	if (code >= 0x100)
+ 		return 0;
+ 	return(kanji_map_sjis[code & 0xff] & 2);
+ }
+ 
+ 	int
+ ISdisp(code)
+ int			code;
+ {
+ 	if (code >= 0x100)
+ 		return 0;
+ 	return(kanji_map_sjis[code & 0xff]);
+ }
+ 
+ /* input pos : 1..strlen
+    return  0 : not kanji
+ 	   1 : kanji first byte
+ 	   2 : kanji last byte
+ */
+ 	int
+ ISkanjiPosition(ptr, pos)
+ char_u	*	ptr;
+ int			pos;
+ {
+ 	int	kanji = 0;
+ 
+ 	for (; *ptr && pos--; ptr++)
+ 	{
+ 		if (kanji == 1)
+ 			kanji= 2;
+ 		else
+ 		{
+ 			if (kanji_map_sjis[*ptr] & 1)
+ 				kanji= 1;
+ 			else
+ 				kanji= 0;
+ 		}
+ 	}
+ 	return(kanji);
+ }
+ 
+ 	int
+ ISkanjiPointer(ptr, p)
+ char_u	*	ptr;
+ char_u	*	p;
+ {
+ 	return(ISkanjiPosition(ptr, p - ptr + 1));
+ }
+ 
+ 	int
+ ISkanjiCol(lnum, col)
+ linenr_t	lnum;
+ colnr_t		col;
+ {
+ 	return(ISkanjiPosition(ml_get_buf(curbuf, lnum, FALSE), col + 1));
+ }
+ 
+ 
+ 	int
+ ISkanjiCur()
+ {
+ 	return(ISkanjiPosition(ml_get_buf(curbuf, curwin->w_cursor.lnum, FALSE),
+ 						curwin->w_cursor.col + 1));
+ }
+ 
+ 	int
+ ISkanjiFpos(po)
+ FPOS	*	po;
+ {
+ 	return(ISkanjiPosition(ml_get_buf(curbuf, po->lnum, FALSE), po->col + 1));
+ }
+ 
+ 	int
+ vcol2col(wp, lnum, maxcol, wantcol)
+ WIN		*	wp;
+ linenr_t	lnum;
+ colnr_t		maxcol;
+ int		*	wantcol;
+ {
+ 	char_u	*	line;
+ 	char_u	*	ptr;
+ 	char_u		c;
+ 	colnr_t		vcol;
+ 
+ 	ptr = line = ml_get_buf(wp->w_buffer, lnum, FALSE);
+ 
+ 	vcol = 0;
+ 	while ((c = *ptr) != NUL)
+ 	{
+ 		if (kanji_map_sjis[c] & 1)
+ 		{
+ 			vcol += 2;
+ 			if (vcol > maxcol)
+ 				break;
+ 			ptr += 2;
+ 			continue;
+ 		}
+ 		vcol += chartabsize(c, vcol);
+ 		if (vcol > maxcol)
+ 			break;
+ 		ptr ++;
+ 	}
+ 	if (wantcol != NULL)
+ 	{
+ 		if (c == NUL)
+ 			*wantcol = ptr - line;
+ 		else if (kanji_map_sjis[c] & 1)
+ 			*wantcol = ptr - line + 1;
+ 		else
+ 			*wantcol = ptr - line;
+ 	}
+ 	return(ptr - line);
+ }
+ 
+ /*
+  *	Japanese Character;
+  */
+ 	int_u
+ sjistojis(high, low)
+ char_u		high;
+ char_u		low;
+ {
+ 	if (high <= 0x9f)
+ 		high -= 0x71;
+ 	else
+ 		high -= 0xb1;
+ 	high = high * 2 + 1;
+ 	if (low > 0x7f)
+ 		low--;
+ 	if (low >= 0x9e)
+ 	{
+ 		low -= 0x7d;
+ 		high++;
+ 	}
+ 	else
+ 	{
+ 		low -= 0x1f;
+ 	}
+ 	return(((int_u)high << 8) | (low & 0xff));
+ }
+ 
+ 	static int_u
+ sjistoeuc(high, low)
+ char_u		high;
+ char_u		low;
+ {
+ 	return(sjistojis(high, low) | 0x8080);
+ }
+ 
+ 	int_u
+ jistosjis(high, low)
+ char_u		high;
+ char_u		low;
+ {
+ 	if (high & 1)
+ 		low += 0x1f;
+ 	else
+ 		low += 0x7d;
+ 	if (low >= 0x7f)
+ 		low++;
+ 	high = ((high - 0x21) >> 1) + 0x81;
+ 	if (high > 0x9f)
+ 		high += 0x40;
+ 	return(((int_u)high << 8) | (low & 0xff));
+ }
+ 
+ 	static int_u
+ euctosjis(high, low)
+ char_u		high;
+ char_u		low;
+ {
+ 	return(jistosjis(high & 0x7f, low & 0x7f));
+ }
+ 
+ /*
+  * return kanji shift-in string
+  */
+ 	static char_u *
+ kanjiin(code)
+ 	char_u	code;
+ {
+ 	switch(code) {
+ 	case JP_JIS:		return "\033$B";
+ 	default:			return "";
+ 	}
+ }
+ 
+ /*
+  * return kanji shift-out string
+  */
+ 	static char_u *
+ asciiin(code)
+ 	char_u	code;
+ {
+ 	switch(code) { 
+ 	case JP_JIS:		return "\033(B";
+ 	default:			return "";
+ 	}
+ }
+ 
+ /*
+  * return kana shift-in string
+  */
+ 	static char_u *
+ kanain(code)
+ 	char_u	code;
+ {
+ 	switch(code) { 
+ 	case JP_JIS:		return "\033(I";
+ 	default:			return "";
+ 	}
+ }
+ 
+ 	char_u	*
+ JPdisp(now, mode, code)
+ 	int_u	*now;
+ 	int		mode;
+ 	int		code;		/* kanji code */
+ {
+ 	static	char_u	buffer[32];
+ 	char_u			*p;
+ 
+ 	buffer[0] = NUL;
+ 	switch (*now) {
+ 	case JP_ASCII:
+ 		switch (mode) {
+ 		case JP_KANJI:
+ 			p = kanjiin(code);
+ 			if (p)
+ 				STRCAT(buffer, p);
+ 			break;
+ 		case JP_KANA:
+ 			p = kanain(code);
+ 			if (p)
+ 				STRCAT(buffer, p);
+ 			break;
+ 		}
+ 		break;
+ 	case JP_KANJI:
+ 		switch (mode) {
+ 		case JP_ASCII:
+ 			p = asciiin(code);
+ 			if (p)
+ 				STRCAT(buffer, p);
+ 			break;
+ 		case JP_KANA:
+ 			p = kanain(code);
+ 			if (p)
+ 				STRCAT(buffer, p);
+ 			break;
+ 		}
+ 		break;
+ 	case JP_KANA:
+ 		switch (mode) {
+ 		case JP_ASCII:
+ 			p = asciiin(code);
+ 			if (p)
+ 				STRCAT(buffer, p);
+ 			break;
+ 		case JP_KANJI:
+ 			p = kanjiin(code);
+ 			if (p)
+ 				STRCAT(buffer, p);
+ 			break;
+ 		}
+ 		break;
+ 	}
+ 	*now = mode;
+ 	return(buffer);
+ }
+ 
+ /*
+  * convert SJIS letter into suitable letter.
+  */
+ 	void
+ kanjito(k1, k2, code)
+ 	char_u	*k1, *k2;
+ 	char	code;
+ {
+ 	int_u		kanji;
+ 
+ 	switch(code) {
+ 	case JP_JIS:
+ 		kanji = sjistojis(*k1, *k2);
+ 		*k1 = (kanji & 0xff00) >> 8;
+ 		*k2 = kanji & 0xff;
+ 		break;
+ 	case JP_EUC:
+ 		kanji = sjistoeuc(*k1, *k2);
+ 		*k1 = (kanji & 0xff00) >> 8;
+ 		*k2 = kanji & 0xff;
+ 	    break;
+ #ifdef UCODE
+ 	case JP_UTF8:
+ 	case JP_WIDE:
+ 		multi2wide(k1, k2, 2);
+ 		break;
+ #endif
+ 	default:
+ 		break;
+ 	}
+ }
+ 
+ 	void
+ kanato(k1, k2, code)
+ 	char_u	*k1, *k2;
+ 	char	code;
+ {
+ 	switch(code) {
+ 	case JP_JIS:
+ 		*k1 &= 0x7f;
+ 		*k2 = NUL;
+ 		break;
+ 	case JP_EUC:
+ 		*k2 = *k1;
+ 		*k1 = JP_EUC_G2;
+ 	    break;
+ #ifdef UCODE
+ 	case JP_UTF8:
+ 	case JP_WIDE:
+ 		multi2wide(k1, k2, 1);
+ 		break;
+ #endif
+ 	default:
+ 		*k2 = NUL;
+ 		break;
+ 	}
+ }
+ 
+ /*
+  *	Japanese Character class;
+  *					Make sure this routine is consistent with search.c:cls().
+  *
+  * 	for Japanese
+  *		3 - alphabet, digits
+  *		4 - japanese hiragana
+  *		5 - japanese katakana
+  *		6 - symbols
+  *		7 - other multi-char letter
+  */
+ 	int
+ jpcls(c, k)
+ char_u		c;
+ char_u		k;
+ {
+ 	if (c == ' ' || c == '\t' || c == NUL)
+ 		return 0;
+ 	if (kanji_map_sjis[c] & 1)
+ 	{
+ 		int		ret;
+ 		ret = sjistojis(c, k);
+ 		c = ((int_u)ret & 0xff00) >> 8;
+ 		k =  (int_u)ret & 0xff;
+ 		ret = jptab[c].cls1;
+ 		if (ret == JPC_KIGOU)
+ 			ret = jptab[k].cls2;
+ 		if (ret == JPC_KIGOU2)
+ 			ret = JPC_KIGOU;
+ 		return ret;
+ 	}
+ 	if (isidchar(c))
+ 		return 1;
+ 	return -1;
+ }
+ 
+ /* 
+  *	isjppunc(c, k) returns whether a kanji character ck necessary KINSOKU
+  *	processing or not.
+  */
+ 	int
+ isjppunc(c, k, type)
+ char_u		c;
+ char_u		k;
+ int			type;
+ {
+ 	int		jis;
+ 
+ 	jis = sjistojis(c, k);
+ 	c = ((int_u)jis & 0xff00) >> 8;
+ 	k =  (int_u)jis & 0xff;
+ 	switch(jptab[(int)c].cls1)
+ 	{
+ 	case JPC_KIGOU:
+ 		return type ? jptab[(int)k].punccsym : jptab[(int)k].puncosym;
+ 	case JPC_HIRA:
+ 	case JPC_KATA:
+ 		return type ? jptab[(int)k].puncckana : FALSE;
+ 	default:
+ 		return FALSE;
+ 	}
+ }
+ 
+ /* 
+  *	isaspunc(c, type) returns whether an ascii character ck necessary KINSOKU
+  *	processing or not.
+  */
+ 	int
+ isaspunc(c, type)
+ char_u		c;
+ int			type;
+ {
+ 	return(type ? jptab[(int)c].punccasc: jptab[(int)c].puncoasc);
+ }
+ 
+ /* 
+  *	isjsend(*cp) returns whether a JIS character *cp separates
+  *	sentences or not.
+  */
+ 	int
+ isjsend(cp)
+ char_u	*	cp;
+ {
+ 	int	kanji	= sjistojis(cp[0], cp[1]);
+ 	int	k1		= (kanji & 0xff00) >> 8;
+ 	int	k2		= kanji & 0xff;
+ 	return k1 == '!' && jptab[k2].stcend;
+ }
+ 
+ /* 
+  *	jptocase(&c, &k, tocase)
+  *		modify c & k to case tocase
+  *			tocase == UPPER : to upper
+  *			tocase == LOWER : to lower
+  *			tocase == others : swap case
+  */
+ 	void
+ jptocase(cp, kp, tocase)
+ char_u	*	cp;
+ char_u	*	kp;
+ int			tocase;
+ {
+ 	char_u		k;
+ 	int_u		kanji = sjistoeuc(*cp, *kp);
+ 
+ 	*cp	= (kanji & 0xff00) >> 8;
+ 	*kp = kanji & 0xff;
+ 	k = *kp & 0x7f;
+ 	switch(jptab[*cp & 0x7f].cls1) {
+ 	case JPC_ALNUM:
+ 		if (tocase != LOWER && islower(k))
+ 			*kp = TO_UPPER(k) | 0x80;
+ 		if (tocase != UPPER && isupper(k))
+ 			*kp = TO_LOWER(k) | 0x80;
+ 		break;
+ 	case JPC_KIGOU:
+ 		if (  (tocase != LOWER && jptab[k].scase == JLOS)
+ 		   || (tocase != UPPER && jptab[k].scase == JUPS))
+ 			*kp = jptab[k].swap;
+ 		break;
+ 	case JPC_KATA:
+ 		if (tocase != -1)
+ 			*cp = JP1_HIRA | 0x80;
+ 		break;
+ 	case JPC_HIRA:
+ 		if (tocase != 1)
+ 			*cp = JP1_KATA | 0x80;
+ 		break;
+ 	default:
+ 		break;
+ 	}
+ 	kanji = euctosjis(*cp, *kp);
+ 	*cp	= (kanji & 0xff00) >> 8;
+ 	*kp = kanji & 0xff;
+ }
+ 
+ /*
+  *
+  *
+  */
+ #ifdef UCODE
+ 	static int
+ judge_sjis_euc(ptr)
+ char_u	*	ptr;
+ {
+ 	if (((0xa1 <= ptr[0] && ptr[0] <= 0xfe)
+ 				&& (0xa1 <= ptr[1] && ptr[1] <= 0xfe))
+ 			|| (ptr[0] == 0x8e && (0xa1 <= ptr[1] && ptr[1] <= 0xdf)))
+ 		return(TRUE);/* EUC */
+ 	else if ((((0x81 <= ptr[0] && ptr[0] <= 0x9f)
+ 					|| (0xe0 <= ptr[0] && ptr[0] <= 0xef))
+ 				&& ((0x40 <= ptr[1] && ptr[1] <= 0x7e)
+ 					|| (0x80 <= ptr[1] && ptr[1] <= 0xfc)))
+ 			|| (0xa1 <= ptr[0] && ptr[0] <= 0xdf))
+ 		return(TRUE);/* SJIS */
+ 	return(FALSE);
+ }
+ 
+ 	static int
+ judge_ucs(ptr)
+ char_u	*	ptr;
+ {
+ 	short_u	ucs;
+ 	char_u	dst[2];
+ 
+ 	if (ptr[0] < 0xe0)
+ 		ucs = ((ptr[0] & 0x1f) << 6) | (ptr[1] & 0x3f);
+ 	else
+ 		ucs = ((ptr[0] & 0x0f) << 12) | ((ptr[1] & 0x3f) << 6) | (ptr[2] & 0x3f);
+ 	dst[0] = ucs & 255;
+ 	dst[1] = ucs >> 8;
+ 	if (wide2multi(dst, 2, FALSE) == 1 && dst[0] == '?')
+ 		return(FALSE);
+ 	return(TRUE);
+ }
+ #endif
+ 
+ /*
+  *
+  *
+  */
+ 	int
+ judge_jcode(origcode, ptr, size)
+ char_u	*	origcode;
+ char_u	*	ptr;
+ long		size;
+ {
+ 	char	code;
+ 	int		i;
+ 	int		bfr  = FALSE;	/* Kana Moji */
+ 	int		bfk  = 0;		/* EUC Kana */
+ 	int		sjis = 0;
+ 	int		euc  = 0;
+ #ifdef UCODE
+ 	int		utf8 = 0;
+ 	int		bfu  = 0;
+ #endif
+ 
+ 	code = '\0';
+ #ifdef UCODE
+ 	if ((ptr[0] == 0xff && ptr[1] == 0xfe)
+ 							|| (ptr[0] == 0xfe && ptr[1] == 0xff))
+ 	{
+ 		code = 'U';		/* UNICODE */
+ 		goto breakBreak;
+ 	}
+ 	if (*origcode == 'U')
+ 		*origcode = 'S';
+ 
+ 	/* valid UTF-8 or not */
+ 	i = 0;
+ 	while (i < size)
+ 	{
+ 		if (ptr[i] < 0x80)
+ 			i++;
+ 		else if (ptr[i] < 0xc0)
+ 		{
+ 			/* malformed */
+ 			utf8 = 0;
+ 			break;
+ 		}
+ 		else if (ptr[i] < 0xe0)
+ 		{
+ 			if (size - i > 1)
+ 			{
+ 				if (ptr[i + 1] >= 0x80 && ptr[i + 1] < 0xc0)
+ 				{
+ 					if (judge_ucs(&ptr[i]))
+ 						code = 'T';
+ 					if (judge_sjis_euc(&ptr[i]))
+ 						;
+ 					else
+ 						utf8++;
+ 				}
+ 				else
+ 				{
+ 					/* malformed */
+ 					utf8 = 0;
+ 					break;
+ 				}
+ 			}
+ 			i += 2;
+ 		}
+ 		else if (ptr[i] < 0xf0)
+ 		{
+ 			if (size - i > 2)
+ 			{
+ 				if (ptr[i + 1] >= 0x80 && ptr[i + 1] < 0xc0
+ 						&& ptr[i + 2] >= 0x80 && ptr[i + 2] < 0xc0)
+ 				{
+ 					if (judge_ucs(&ptr[i]))
+ 						code = 'T';
+ 					if (judge_sjis_euc(&ptr[i]))
+ 						;
+ 					else
+ 						utf8++;
+ 				}
+ 				else
+ 				{
+ 					/* malformed */
+ 					utf8 = 0;
+ 					break;
+ 				}
+ 			}
+ 			i += 3;
+ 		}
+ 		else if (ptr[i] < 0xf8)
+ 		{
+ 			/* valid but not supported */
+ 			if (size - i > 3)
+ 			{
+ 				if (!(ptr[i + 1] >= 0x80 && ptr[i + 1] < 0xc0
+ 						&& ptr[i + 2] >= 0x80 && ptr[i + 2] < 0xc0
+ 						&& ptr[i + 3] >= 0x80 && ptr[i + 3] < 0xc0))
+ 				{
+ 					/* malformed */
+ 					utf8 = 0;
+ 					break;
+ 				}
+ 			}
+ 			i += 4;
+ 		}
+ 		else if (ptr[i] < 0xfc)
+ 		{
+ 			/* valid but not supported */
+ 			if (size - i > 4)
+ 			{
+ 				if (!(ptr[i + 1] >= 0x80 && ptr[i + 1] < 0xc0
+ 						&& ptr[i + 2] >= 0x80 && ptr[i + 2] < 0xc0
+ 						&& ptr[i + 3] >= 0x80 && ptr[i + 3] < 0xc0
+ 						&& ptr[i + 4] >= 0x80 && ptr[i + 4] < 0xc0))
+ 				{
+ 					/* malformed */
+ 					utf8 = 0;
+ 					break;
+ 				}
+ 			}
+ 			i += 5;
+ 		}
+ 		else if (ptr[i] < 0xfe)
+ 		{
+ 			/* valid but not supported */
+ 			if (size - i > 5)
+ 			{
+ 				if (!(ptr[i + 1] >= 0x80 && ptr[i + 1] < 0xc0
+ 						&& ptr[i + 2] >= 0x80 && ptr[i + 2] < 0xc0
+ 						&& ptr[i + 3] >= 0x80 && ptr[i + 3] < 0xc0
+ 						&& ptr[i + 4] >= 0x80 && ptr[i + 4] < 0xc0
+ 						&& ptr[i + 5] >= 0x80 && ptr[i + 5] < 0xc0))
+ 				{
+ 					/* malformed */
+ 					utf8 = 0;
+ 					break;
+ 				}
+ 			}
+ 			i += 6;
+ 		}
+ 		else
+ 		{
+ 			/* malformed */
+ 			utf8 = 0;
+ 			break;
+ 		}
+ 	}
+ 	if (utf8 > 1)
+ 	{
+ 		code = 'T';
+ 		goto breakBreak;
+ 	}
+ #endif /* UCODE */
+ 
+ 	i = 0;
+ 	while (i < size)
+ 	{
+ 		if (ptr[i] == '\033' && (size - i >= 3))
+ 		{
+ 			if ((ptr[i+1] == '$' && ptr[i+2] == 'B')
+ 						 || (ptr[i+1] == '(' && ptr[i+2] == 'B'))
+ 			{
+ 				code = 'J';
+ #ifdef USE_OPT
+ 				if (!(p_opt & OPT_NO_JIS))
+ 					i += 3;
+ 				else
+ #endif
+ 				goto breakBreak;
+ 			}
+ 			else if ((ptr[i+1] == '$' && ptr[i+2] == '@')
+ 						 || (ptr[i+1] == '(' && ptr[i+2] == 'J'))
+ 			{
+ 				code = 'J';
+ #ifdef USE_OPT
+ 				if (!(p_opt & OPT_NO_JIS))
+ 					i += 3;
+ 				else
+ #endif
+ 				goto breakBreak;
+ 			}
+ 			else if (ptr[i+1] == '(' && ptr[i+2] == 'I')
+ 			{
+ 				code = 'J';
+ 				i += 3;
+ 			}
+ 			else if (ptr[i+1] == ')' && ptr[i+2] == 'I')
+ 			{
+ 				code = 'J';
+ 				i += 3;
+ 			}
+ 			else
+ 				i++;
+ 			bfr = FALSE;
+ 			bfk = 0;
+ 		}
+ 		else
+ 		{
+ 			if (ptr[i] < 0x20)
+ 			{
+ #ifndef UCODE
+ 				if (bfr == TRUE)
+ 				{
+ 					code = 'S';
+ 					goto breakBreak;
+ 				}
+ #endif
+ 				bfr = FALSE;
+ 				bfk = 0;
+ 				/* ?? check kudokuten ?? && ?? hiragana ?? */
+ 				if ((i >= 2) && (ptr[i-2] == 0x81)
+ 						&& (0x41 <= ptr[i-1] && ptr[i-1] <= 0x49))
+ 				{
+ 					code = 'S';
+ 					sjis += 100;	/* kudokuten */
+ 				}
+ 				else if ((i >= 2) && (ptr[i-2] == 0xa1)
+ 						&& (0xa2 <= ptr[i-1] && ptr[i-1] <= 0xaa))
+ 				{
+ 					code = 'E';
+ 					euc  += 100;	/* kudokuten */
+ 				}
+ 				else if ((i >= 2) && (ptr[i-2] == 0x82) && (0xa0 <= ptr[i-1]))
+ 					sjis += 40;		/* hiragana */
+ 				else if ((i >= 2) && (ptr[i-2] == 0xa4) && (0xa0 <= ptr[i-1]))
+ 					euc  += 40;		/* hiragana */
+ #ifdef UCODE
+ 				else if ((0xa1 <= ptr[i-2] && ptr[i-2] <= 0xfe)
+ 								&& (0xa1 <= ptr[i-1] && ptr[i-1] <= 0xfe))
+ 					;	/* EUC */
+ 				else if (0x8e == ptr[i-2]
+ 								&& (0xa1 <= ptr[i-1] && ptr[i-1] <= 0xdf))
+ 					;	/* EUC */
+ 				else if (((0x81 <= ptr[i-2] && ptr[i-2] <= 0x9f)
+ 								|| (0xe0 <= ptr[i-2] && ptr[i-2] <= 0xef))
+ 						&& ((0x40 <= ptr[i-1] && ptr[i-1] <= 0x7e)
+ 								|| (0x80 <= ptr[i-1] && ptr[i-1] <= 0xfc)))
+ 					;	/* SJIS */
+ 				else if ((i >= 3) && (ptr[i-3] & 0xf0) == 0xe0
+ 											&& (ptr[i-2] & 0xc0) == 0x80
+ 											&& (ptr[i-1] & 0xc0) == 0x80)
+ 				{
+ 					code = 'T';
+ 					utf8  += 30;
+ 				}
+ 				else if ((i >= 2) && (ptr[i-2] & 0xe0) == 0xc0
+ 											&& (ptr[i-1] & 0xc0) == 0x80)
+ 				{
+ 					code = 'T';
+ 					utf8  += 10;
+ 				}
+ #endif
+ 			}
+ 			else
+ 			{
+ 				/* ?? check hiragana or katana ?? */
+ 				if ((size - i > 1) && (ptr[i] == 0x82) && (0xa0 <= ptr[i+1]))
+ 					sjis++;	/* hiragana */
+ 				else if ((size - i > 1) && (ptr[i] == 0x83)
+ 						&& (0x40 <= ptr[i+1] && ptr[i+1] <= 0x9f))
+ 					sjis++;	/* katakana */
+ 				else if ((size - i > 1) && (ptr[i] == 0xa4) && (0xa0 <= ptr[i+1]))
+ 					euc++;	/* hiragana */
+ 				else if ((size - i > 1) && (ptr[i] == 0xa5) && (0xa0 <= ptr[i+1]))
+ 					euc++;	/* katakana */
+ #ifdef UCODE
+ 				if (bfu)
+ 					bfu--;
+ 				else
+ #endif
+ 				if (bfr == TRUE)
+ 				{
+ 					if ((i >= 1) && (0x40 <= ptr[i] && ptr[i] <= 0xa0) && ISkanji(ptr[i-1]))
+ 					{
+ 						code = 'S';
+ 						goto breakBreak;
+ 					}
+ 					else if ((i >= 1) && (0x81 <= ptr[i-1] && ptr[i-1] <= 0x9f) && ((0x40 <= ptr[i] && ptr[i] < 0x7e) || (0x7e < ptr[i] && ptr[i] <= 0xfc)))
+ 					{
+ 						code = 'S';
+ 						goto breakBreak;
+ 					}
+ 					else if ((i >= 1) && (0xfd <= ptr[i] && ptr[i] <= 0xfe) && (0xa1 <= ptr[i-1] && ptr[i-1] <= 0xfe))
+ 					{
+ 						code = 'E';
+ 						goto breakBreak;
+ 					}
+ 					else if ((i >= 1) && (0xfd <= ptr[i-1] && ptr[i-1] <= 0xfe) && (0xa1 <= ptr[i] && ptr[i] <= 0xfe))
+ 					{
+ 						code = 'E';
+ 						goto breakBreak;
+ 					}
+ 					else if ((i >= 1) && (ptr[i] < 0xa0 || 0xdf < ptr[i]) && (0x8e == ptr[i-1]))
+ 					{
+ 						code = 'S';
+ 						goto breakBreak;
+ 					}
+ 					else if (ptr[i] <= 0x7f)
+ 					{
+ 						code = 'S';
+ 						goto breakBreak;
+ 					}
+ 					else
+ 					{
+ 						if (0xa1 <= ptr[i] && ptr[i] <= 0xa6)
+ 							euc++;	/* sjis hankaku kana kigo */
+ 						else if (0xa1 <= ptr[i] && ptr[i] <= 0xdf)
+ 							;	/* sjis hankaku kana */
+ 						else if (0xa1 <= ptr[i] && ptr[i] <= 0xfe)
+ 							euc++;
+ 						else if (0x8e == ptr[i])
+ 							euc++;
+ 						else if (0x20 <= ptr[i] && ptr[i] <= 0x7f)
+ 							sjis++;
+ 						bfr = FALSE;
+ 						bfk = 0;
+ 					}
+ 				}
+ #ifdef UCODE
+ 				else if ((size - i > 3) && (ptr[i] & 0xf0) == 0xe0
+ 											&& (ptr[i+1] & 0xc0) == 0x80
+ 											&& (ptr[i+2] & 0xc0) == 0x80
+ 										&& ((ptr[i+3] & 0x80) == 0x00
+ 											|| (ptr[i+3] & 0xf0) == 0xe0
+ 											|| (ptr[i+3] & 0xe0) == 0xc0)
+ 						&& !((0xa1 <= ptr[i] && ptr[i] <= 0xfe)
+ 								&& (0xa1 <= ptr[i+1] && ptr[i+1] <= 0xfe)
+ 								&& (0xa1 <= ptr[i+2] && ptr[i+2] <= 0xfe)))
+ 				{
+ 					utf8++;
+ 					bfu = 2;
+ 					bfk = 0;
+ 				}
+ 				else if ((size - i > 2) && (ptr[i] & 0xe0) == 0xc0
+ 											&& (ptr[i+1] & 0xc0) == 0x80
+ 										&& ((ptr[i+2] & 0x80) == 0x00
+ 											|| (ptr[i+2] & 0xf0) == 0xe0
+ 											|| (ptr[i+2] & 0xe0) == 0xc0)
+ 						&& !((0xa1 <= ptr[i] && ptr[i] <= 0xfe)
+ 								&& (0xa1 <= ptr[i+1] && ptr[i+1] <= 0xfe)))
+ 				{
+ 					utf8++;
+ 					bfu = 1;
+ 					bfk = 0;
+ 				}
+ #endif
+ 				else if (0x8e == ptr[i])
+ 				{
+ 					if (size - i <= 1)
+ 						;
+ 					else if (0xa1 <= ptr[i+1] && ptr[i+1] <= 0xdf)
+ 					{
+ 						/* EUC KANA or SJIS KANJI */
+ 						if (bfk == 1)
+ 							euc += 100;
+ 						bfk++;
+ 						i++;
+ 					}
+ 					else
+ 					{
+ 						/* SJIS only */
+ 						code = 'S';
+ 						goto breakBreak;
+ 					}
+ 				}
+ 				else if (0x81 <= ptr[i] && ptr[i] <= 0x9f)
+ 				{
+ 					/* SJIS only */
+ 					code = 'S';
+ 					goto breakBreak;
+ 				}
+ 				else if (0xfd <= ptr[i] && ptr[i] <= 0xfe)
+ 				{
+ 					/* EUC only */
+ 					code = 'E';
+ 					goto breakBreak;
+ 				}
+ 				else if (ptr[i] <= 0x7f)
+ 					;
+ 				else
+ 				{
+ 					bfr = TRUE;
+ 					bfk = 0;
+ 				}
+ 			}
+ 			i++;
+ 		}
+ 	}
+ 	if (code == '\0')
+ 	{
+ 		code = *origcode;
+ #ifdef UCODE
+ 		if (utf8 > sjis && utf8 > euc)
+ 			code = 'T';
+ 		else
+ #endif
+ 		if (sjis > euc)
+ 			code = 'S';
+ 		else if (sjis < euc)
+ 			code = 'E';
+ 	}
+ breakBreak:
+ 	return(code);
+ }
+ 
+ 	int				/* return the length of dst */
+ kanjiconvsfrom(ptr, ptrlen, dst, dstlen, tail, code, charsetp)
+ 	char_u	*ptr;
+ 	int		ptrlen;
+ 	char_u	*dst;
+ 	int		dstlen;
+ 	char	*tail;
+ 	char	code;
+ 	int		*charsetp;
+ {
+ 	char_u	*dtop;
+ 	int		c;
+ 	int		charset;
+ 
+ 	dtop = dst;
+ 	if (tail)
+ 		tail[0] = NUL;
+ 
+ 	switch (code) {
+ 	case JP_EUC:
+ 	case JP_SJIS:
+ 	case JP_JIS:
+ #ifdef UCODE
+ 	case JP_UTF8:
+ #endif
+ 		if (charsetp)
+ 			charset = *charsetp;
+ 		else
+ 			charset = JP_ASCII;
+ 		while (ptrlen) {
+ 			if (dst - dtop >= dstlen)
+ 				return -1;
+ 			ptrlen --;
+ 
+ 			if (*ptr & 0x80)
+ 			{
+ 				charset = JP_ASCII;
+ 				switch (code) {
+ 				case JP_EUC:
+ 					switch (kanji_map_euc[*ptr]) {
+ 					case 1:		/* kanji */
+ 						if (ptrlen >= 1 && ptr[1] != NUL)
+ 						{					/* JIS0208 char. */
+ 							*dst++ = (euctosjis(ptr[0], ptr[1]) & 0xff00) >> 8;
+ 							*dst++ = euctosjis(ptr[0], ptr[1]) & 0xff;
+ 							ptr += 2;
+ 							ptrlen --;
+ 						}
+ 						else if (tail && ptrlen == 0)
+ 						{					/* not completed  */
+ 							tail[0] = *ptr;
+ 							tail[1] = NUL;
+ 						}
+ 						else
+ 						{					/* Illegal char  */
+ 							*(dst - 1) &= 0x7f;
+ 						}
+ 						continue;
+ 					case 2:
+ 						if (ptr[1] != NUL)
+ 						{
+ 							if (p_jkc && ISkana(ptr[1]))
+ 							{
+ 								char c1 = NUL;
+ 								char c2 = NUL;
+ 
+ 								if ((ptrlen >= 3) && (ptr[2] == JP_EUC_G2))
+ 								{
+ 									if (jisx0201rto0208(ptr[1], ptr[3], &c1, &c2))
+ 									{
+ 										ptr += 4;
+ 										*dst++ = c1;
+ 										*dst++ = c2;
+ 										ptrlen -= 3;
+ 									}
+ 									else
+ 									{
+ 										ptr += 2;
+ 										*dst++ = c1;
+ 										*dst++ = c2;
+ 										ptrlen --;
+ 									}
+ 								}
+ 								else
+ 								{
+ 									(void)jisx0201rto0208(ptr[1], NUL, &c1, &c2);
+ 									ptr += 2;
+ 									*dst++ = c1;
+ 									*dst++ = c2;
+ 									ptrlen --;
+ 								}
+ 							}
+ 							else
+ 							{
+ 								*dst++  = * ++ptr;
+ 								ptr++;
+ 								ptrlen --;
+ 							}
+ 							continue;
+ 						}
+ 						if (tail && ptrlen == 0)
+ 						{					/* not completed  */
+ 							tail[0] = *ptr;
+ 							tail[1] = NUL;
+ 							continue;
+ 						}
+ 						break;
+ 					default:
+ 						if (!kanji_map_sjis[*ptr])
+ 							*dst ++ = *ptr ++;
+ 						else
+ 						{
+ 							*dst = *ptr & 0x7f;
+ 							ptr++;
+ 							dst++;
+ 						}
+ 						break;
+ 					}
+ 					break;
+ 				case JP_SJIS:
+ 					c = *dst ++ = *ptr ++;
+ 					if (kanji_map_sjis[c] & 1)
+ 					{
+ 						if (ptrlen >= 1 && *ptr != NUL)
+ 						{
+ 							* dst++ = * ptr++;
+ 							ptrlen --;
+ 						}
+ 						else if (tail && ptrlen == 0)
+ 						{
+ 							tail[0] = c;
+ 							tail[1] = NUL;
+ 							dst--;
+ 						}
+ 						else
+ 						{
+ 							*(dst - 1) &= 0x7f;
+ 						}
+ 						continue;
+ 					}
+ 					else if (p_jkc && ISkana(c))
+ 					{					/* JIS X 0201R 8bit encoding */
+ 						char c1 = NUL;
+ 
+ 						if (jisx0201rto0208(c, ptrlen ? *ptr : NUL, dst - 1, &c1))
+ 						{	/* 2 characters -> double byte character. */
+ 							* dst++ = c1;
+ 							ptr ++;
+ 							ptrlen --;
+ 						}
+ 						else if (c1)
+ 							* dst++ = c1;
+ 						continue;
+ 					}
+ 					break;
+ #ifdef UCODE
+ 				case JP_UTF8:
+ 					c = *ptr++;
+ 					if (c < 0xc0)
+ 					{ /* malformed */
+ 						*dst++ = '?';
+ 					}
+ 					else if (c < 0xe0 && ptrlen >= 1)
+ 					{
+ 						short_u ucs = ((c & 0x1f) << 6) | (ptr[0] & 0x3f);
+ 						int len;
+ 						dst[0] = ucs & 255;
+ 						dst[1] = ucs >> 8;
+ 						len = wide2multi(dst, 2, FALSE);
+ 						dst += len;
+ 						ptr += 1;
+ 						ptrlen--;
+ 					}
+ 					else if (c < 0xf0 && ptrlen >= 2)
+ 					{
+ 						short_u ucs = ((c & 0x0f) << 12) |
+ 							((ptr[0] & 0x3f) << 6) | (ptr[1] & 0x3f);
+ 						int len;
+ 						dst[0] = ucs & 255;
+ 						dst[1] = ucs >> 8;
+ 						len = wide2multi(dst, 2, FALSE);
+ 						dst += len;
+ 						ptr += 2;
+ 						ptrlen -= 2;
+ 					}
+ 					else if (c < 0xf8 && ptrlen >= 3)
+ 					{
+ 						ptr += 3;
+ 						ptrlen -= 3;
+ 						*dst++ = '?';
+ 					}
+ 					else if (c < 0xfc  && ptrlen >= 4)
+ 					{
+ 						ptr += 4;
+ 						ptrlen -= 4;
+ 						*dst++ = '?';
+ 					}
+ 					else if (c < 0xfe  && ptrlen >= 5)
+ 					{
+ 						ptr += 5;
+ 						ptrlen -= 5;
+ 						*dst++ = '?';
+ 					}
+ 					else
+ 					{ /* malformed */
+ 						*dst++ = '?';
+ 					}
+ 					if (tail && ptrlen == 0)
+ 					{					/* not completed  */
+ 						tail[0] = *ptr;
+ 						tail[1] = NUL;
+ 						continue;
+ 					}
+ 					break;
+ #endif /* UCODE */
+ 				default:
+ 					*dst ++ = *ptr ++;
+ 					break;
+ 				}
+ 			}
+ 			else
+ 			{
+ 				c = *dst ++ = *ptr ++;
+ #ifdef USE_OPT
+ 				if (c == ESC && (code == JP_JIS || !(p_opt & OPT_NO_JIS)))
+ #else
+ 				if (c == ESC)
+ #endif
+ 				{
+ 					dst --;
+ 
+ 					if (ptrlen == 0)
+ 					{
+ 						if (tail && code == JP_JIS)
+ 						{
+ 							tail[0] = c;
+ 							tail[1] = NUL;
+ 						}
+ 						else
+ 							dst++;
+ 						continue;
+ 					}
+ 
+ 					if (*ptr == '(')
+ 					{
+ 						ptrlen --;
+ 						ptr ++;
+ 
+ 						if (ptrlen == 0)
+ 						{
+ 							if (tail && code == JP_JIS)
+ 							{
+ 								tail[0] = c;
+ 								tail[1] = '(';
+ 								tail[2] = NUL;
+ 							}
+ 							else
+ 							{
+ 								dst ++;
+ 								* dst++ = '(';
+ 							}
+ 							continue;
+ 						}
+ 
+ 						if (*ptr == 'I')
+ 						{						/* JIS X 0201R ISO2022 encoding */
+ 							charset = JP_KANA;
+ 							ptr ++;
+ 							ptrlen --;
+ 							continue;
+ 						}
+ 						else if (*ptr == 'J' || *ptr == 'H' || *ptr == 'B')
+ 						{						/* ASCII/JIS In */
+ 							charset = JP_ASCII;
+ 							ptr ++;
+ 							ptrlen --;
+ 							continue;
+ 						}
+ 						else
+ 						{
+ 							dst ++;
+ 							* dst++ = '(';
+ 							continue;
+ 						}
+ 					}
+ 
+ 					if (*ptr == '$')
+ 					{
+ 						ptrlen --;
+ 						ptr ++;
+ 
+ 						if (ptrlen == 0)
+ 						{
+ 							if (tail && code == JP_JIS)
+ 							{
+ 								tail[0] = c;
+ 								tail[1] = '$';
+ 								tail[2] = NUL;
+ 							}
+ 							else
+ 							{
+ 								dst ++;
+ 								* dst++ = '$';
+ 							}
+ 							continue;
+ 						}
+ 
+ 						if (*ptr == '@' || *ptr == 'B')		/* Kanji In */
+ 						{
+ 							charset = JP_KANJI;
+ 							ptrlen --;
+ 							ptr ++;
+ 							continue;
+ 						}
+ 						else
+ 						{
+ 							dst ++;
+ 							* dst ++ = '$';
+ 							continue;
+ 						}
+ 					}
+ 					else
+ 						dst++;
+ 				}
+ 				switch (charset)
+ 				{
+ 					case JP_ASCII:
+ 						break;
+ 
+ 					case JP_KANA:
+ 						if (p_jkc)
+ 						{					/* JIS X 0201R 8bit encoding */
+ 							char c1 = NUL;
+ 
+ 							if (jisx0201rto0208(c, ptrlen ? *ptr : NUL, dst - 1, &c1))
+ 							{	/* 2 characters -> double byte character. */
+ 								* dst++ = c1;
+ 								ptr ++;
+ 								ptrlen --;
+ 							}
+ 							else if (c1)
+ 								* dst++ = c1;
+ 							continue;
+ 						}
+ 						else
+ 						{
+ 							dst[-1] |= 0x80;
+ 						}
+ 						break;
+ 
+ 					default: /* JP_KANJI */
+ 						if (ptrlen == 0)
+ 						{
+ 							if (tail && code == JP_JIS)
+ 							{
+ 								tail[0] = c;
+ 								tail[1] = NUL;
+ 								dst --;
+ 							}
+ 						}
+ 						else if (c > ' ' && *ptr > ' ')
+ 						{
+ 							ptrlen --;
+ 							dst[-1] = (jistosjis(ptr[-1], ptr[0]) & 0xff00) >> 8;
+ 							dst[0]  = jistosjis(ptr[-1], ptr[0]) & 0xff;
+ 							dst++;
+ 							ptr++;
+ 						}
+ 						else if (c == NUL || c == '\n' || c == '\r')
+ 							charset = JP_ASCII;
+ 				}
+ 			}
+ 		}
+ 		if (charsetp)
+ 			*charsetp = charset;
+ 		break; /* return dst - dtop; */
+ #ifdef UCODE
+ 	case JP_WIDE:		/* UNICODE */
+ #endif
+ 	default:
+ 		while (ptrlen)
+ 		{
+ 			*dst ++ = *ptr ++;
+ 			ptrlen --;
+ 			if (dst - dtop >= dstlen)
+ 				return -1;
+ 		}
+ 		break; /* return dst - dtop; */
+ 	}
+ 	return dst - dtop;
+ }
+ 
+ #ifdef UCODE
+ # define TO_UTF8(ucs, ptr) \
+ 				if (ucs < 0x80) { *ptr ++ = ucs; } \
+ 				else if (ucs < 0x800) { \
+ 					*ptr ++ = (ucs >> 6) | 0xc0; \
+ 					*ptr ++ = (ucs & 0x3f) | 0x80; \
+ 				} else { \
+ 					*ptr ++ = (ucs >> 12) | 0xe0; \
+ 					*ptr ++ = ((ucs >> 6) & 0x3f) | 0x80; \
+ 					*ptr ++ = (ucs & 0x3f) | 0x80; }
+ #endif
+ 
+ 	char_u *
+ kanjiconvsto(ptr, code)
+ 	char_u	*ptr;
+ 	char_u	code;
+ {
+ 	char_u	*top, *ptr2;
+ 	char_u	*cp;
+ 	int_u	kanji;
+ 	int		nshift;
+ 
+ 	if (ptr == NULL)
+ 		return ptr;
+ 
+ 	top = ptr;
+ 
+ 	switch (code) {
+ 	case JP_SJIS:
+ 		nshift = STRLEN(ptr) + 1;
+ 		top = alloc(nshift);
+ 		memcpy((char *)top, (char *)ptr, nshift);
+ 		top[nshift - 1] = '\0';
+ 		return top;
+ #ifdef UCODE
+ 	case JP_UTF8:
+ 		for(nshift = 0; *ptr; ptr++)
+ 		{
+ 			switch (kanji_map_sjis[*ptr]) {
+ 			case 1:
+ 				nshift += 2;
+ 				ptr++;
+ 				break;
+ 			case 2:
+ 				nshift += 2;
+ 				break;
+ 			}
+ 		}
+ 		ptr = top;
+ 		top = ptr2 = alloc(STRLEN(top) + nshift + 1);
+ 		while (*ptr)
+ 		{
+ 			char_u buf[2];
+ 			switch (kanji_map_sjis[*ptr]) {
+ 			case 1:		/* kanji */
+ 				buf[0] = ptr[0];
+ 				buf[1] = ptr[1];
+ 				multi2wide(buf, buf + 1, 2);
+ 				kanji = buf[0] | (buf[1] << 8);
+ 				TO_UTF8(kanji, ptr2);
+ 				ptr += 2;
+ 				break;
+ 			case 2:		/* kana */
+ 				buf[0] = ptr[0];
+ 				buf[1] = '\0';
+ 				multi2wide(buf, buf + 1, 1);
+ 				kanji = buf[0] | (buf[1] << 8);
+ 				TO_UTF8(kanji, ptr2);
+ 				ptr += 1;
+ 				break;
+ 			default:	/* ascii */
+ 				*ptr2 ++ = *ptr ++;
+ 				break;
+ 			}
+ 		}
+ 		*ptr2 = NUL;
+ 		return top;
+ 	case JP_WIDE:		/* UNICODE */
+ 		for (nshift = 0; *ptr; ptr++)
+ 		{
+ 			switch (kanji_map_sjis[*ptr]) {
+ 			case 1:
+ 				ptr++;
+ 				break;
+ 			default:
+ 				nshift++;
+ 				break;
+ 			}
+ 		}
+ 		ptr = top;
+ 		top = ptr2 = alloc(STRLEN(top) + nshift + 2);
+ 		while (*ptr)
+ 			switch (kanji_map_sjis[*ptr]) {
+ 			case 1:		/* kanji */
+ 				ptr2[0] = ptr[0];
+ 				ptr2[1] = ptr[1];
+ 				multi2wide(&ptr2[0], &ptr2[1], 2);
+ 				ptr  += 2;
+ 				ptr2 += 2;
+ 				break;
+ 			default:
+ 				ptr2[0] = ptr[0];
+ 				ptr2[1] = 0;
+ 				multi2wide(&ptr2[0], &ptr2[1], 1);
+ 				ptr  += 1;
+ 				ptr2 += 2;
+ 				break;
+ 			}
+ 		ptr2[0] = ptr[0];
+ 		ptr2[1] = 0;
+ 		multi2wide(&ptr2[0], &ptr2[1], 1);
+ 		return top;
+ #endif /* UCODE */
+ 	case JP_EUC:
+ 		for(nshift = 0; *ptr; ptr++)
+ 		{
+ 			switch (kanji_map_sjis[*ptr]) {
+ 			case 1:
+ 				ptr++;
+ 				break;
+ 			case 2:
+ 				nshift++;
+ 				break;
+ 			}
+ 		}
+ 		ptr = top;
+ 		top = ptr2 = alloc(STRLEN(top) + nshift + 1);
+ 		while (*ptr)
+ 			switch (kanji_map_sjis[*ptr]) {
+ 			case 1:		/* kanji */
+ 				kanji = sjistoeuc(ptr[0], ptr[1]);
+ 				*ptr2 ++ = (kanji & 0xff00) >> 8;
+ 				*ptr2 ++ = kanji & 0xff;
+ 				ptr += 2;
+ 				break;
+ 			case 2:		/* kana */
+ 				*ptr2 ++ = JP_EUC_G2;
+ 				*ptr2 ++ = *ptr ++;
+ 				break;
+ 			default:	/* ascii */
+ 				*ptr2 ++ = *ptr ++;
+ 				break;
+ 			}
+ 		*ptr2 = NUL;
+ 		return top;
+ 	case JP_JIS:
+ 		kanji = 0;
+ 		for(nshift = 0; *ptr; ptr++)
+ 		{
+ 			switch (kanji_map_sjis[*ptr]) {
+ 			case 1:
+ 				ptr++;
+ 				if (kanji != 1)
+ 					nshift++;
+ 				kanji = 1;
+ 				break;
+ 			case 2:
+ 				if (kanji != 2)
+ 					nshift++;
+ 				kanji = 2;
+ 				break;
+ 			default:
+ 				if (kanji != 0)
+ 					nshift++;
+ 				kanji = 0;
+ 				break;
+ 			}
+ 		}
+ 		if (nshift)
+ 			nshift++;		/* eol code */
+ 
+ 		ptr = top;
+ 		top = ptr2 = alloc(STRLEN(top) + (nshift * 3 * 2/*safe*/) + 1);
+ 		kanji = JP_ASCII;
+ 		while (*ptr)
+ 		{
+ 			switch (kanji_map_sjis[*ptr]) {
+ 			case 1:		/* kanji */
+ 				cp = JPdisp(&kanji, JP_KANJI, code);
+ 				for(; *cp;)
+ 					*ptr2++ = *cp++;
+ 				*ptr2 ++ = (sjistojis(ptr[0], ptr[1]) & 0xff00) >> 8;
+ 				*ptr2 ++ = sjistojis(ptr[0], ptr[1]) & 0xff;
+ 				ptr += 2;
+ 				break;
+ 			case 2:		/* kana */
+ 				cp = JPdisp(&kanji, JP_KANA, code);
+ 				for(; *cp;)
+ 					*ptr2++ = *cp++;
+ 				*ptr2 ++ = *ptr & 0x7f;
+ 				ptr ++;
+ 				break;
+ 			default:	/* ascii */
+ 				cp = JPdisp(&kanji, JP_ASCII, code);
+ 				for(; *cp;)
+ 					*ptr2++ = *cp++;
+ 				*ptr2 ++ = *ptr ++;
+ 				break;
+ 			}
+ 		}
+ 		cp = JPdisp(&kanji, JP_ASCII, code);
+ 		for(; *cp;)
+ 			*ptr2++ = *cp++;
+ 		*ptr2 = NUL;
+ 		return top;
+ 	}
+ 	return top;
+ }
+ 
+ 	char *
+ fileconvsfrom(org)
+ 	char_u	*org;
+ {
+ 	static char		fnamebuf[2][MAXPATHL];
+ 	static int		cnt = 0;
+ 	char		*	fname;
+ 	int				jkc = p_jkc;
+ #ifdef MSDOS
+ 	char_u		*	p;
+ 	char_u		*	t;
+ 	int				cygnus = FALSE;
+ #endif
+ 
+ 	if (org == NULL)
+ 		return(NULL);
+ 	p_jkc = FALSE;
+ 	fname = &fnamebuf[++cnt & 1][0];
+ 	fname[kanjiconvsfrom(org, strlen(org),
+ 					fname, MAXPATHL, NULL, toupper(JP_SYS), NULL)] = NUL;
+ #ifdef MSDOS
+ 	t = p = (char_u *)fname;
+ 	if (p[0] == '/' && p[1] == '/' && isalpha(p[2]) && p[3] == '/')
+ 	{
+ 		cygnus = TRUE;
+ 		t[0] = p[2];
+ 		t[1] = ':';
+ 		t[2] = '/';
+ 		memmove(&t[3], &p[4], strlen(p) - 3);
+ 	}
+ 	while (*p)
+ 	{
+ 		if (ISkanji(*p))
+ 		{
+ 			*t++ = *p++;
+ 			*t++ = *p++;
+ 		}
+ 		else if (cygnus && p[0] == '\\')
+ 			p++;
+ 		else if (p != (char_u *)fname && p[0] == '\\' && p[1] == '\\')
+ 			p++;
+ 		else
+ 			*t++ = *p++;
+ 	}
+ 	*t = '\0';
+ #endif
+ 	p_jkc = jkc;
+ 	return(fname);
+ }
+ 
+ 	char *
+ fileconvsto(org)
+ 	char_u	*org;
+ {
+ 	static char		fnamebuf[2][MAXPATHL];
+ 	static int		cnt = 0;
+ 	char		*	fname;
+ 	char_u		*	p;
+ #ifdef MSDOS
+ 	char_u		*	t;
+ 	int				cygnus = FALSE;
+ #endif
+ 
+ 	if (org == NULL)
+ 		return(NULL);
+ 	fname = &fnamebuf[++cnt & 1][0];
+ #ifdef MSDOS
+ 	strcpy(fname, org);
+ 	t = p = (char_u *)fname;
+ 	if (p[0] == '/' && p[1] == '/' && isalpha(p[2]) && p[3] == '/')
+ 	{
+ 		cygnus = TRUE;
+ 		t[0] = p[2];
+ 		t[1] = ':';
+ 		t[2] = '/';
+ 		memmove(&t[3], &p[4], strlen(p) - 3);
+ 	}
+ 	while (*p)
+ 	{
+ 		if (ISkanji(*p))
+ 		{
+ 			*t++ = *p++;
+ 			*t++ = *p++;
+ 		}
+ 		else if (cygnus && p[0] == '\\')
+ 			p++;
+ 		else if (p != (char_u *)fname && p[0] == '\\' && p[1] == '\\')
+ 			p++;
+ 		else
+ 			*t++ = *p++;
+ 	}
+ 	*t = '\0';
+ 	org = fname;
+ #endif
+ 	p = kanjiconvsto(org, toupper(JP_SYS));
+ 	strcpy(fname, p);
+ 	free(p);
+ 	return(fname);
+ }
+ 
+ 	void
+ binaryconvsfrom(lnum, code, tail, ptr, len, dst)
+ 	linenr_t lnum;
+ 	char	code;
+ 	int		*tail;
+ 	char_u	*ptr;
+ 	int		len;
+ 	char_u	*dst;
+ {
+ 	char_u	*wk = ptr;
+ 	int		i;
+ 
+ 	memset(dst, '\0', 81);
+ 	sprintf(dst, "%08x: ", lnum * 16);
+ 	dst += 10;
+ 
+ 	for (i = 0; i < 16; ++i)
+ 	{
+ 		if (len <= i)
+ 		{
+ 			*dst++ = ' ';
+ 			*dst++ = ' ';
+ 		}
+ 		else
+ 		{
+ 			sprintf(dst, "%02x", *wk);
+ 			dst += 2;
+ 			++wk;
+ 		}
+ 		if (i & 1)
+ 			*dst++ = ' ';
+ 	}
+ 	*dst++ = ';';
+ 	for (i = 0; i < len;)
+ 	{
+ 		if (*tail)
+ 		{
+ 			*tail = FALSE;
+ 			goto normal;
+ 		}
+ 		switch (code) {
+ 		case JP_EUC:
+ 			if ((kanji_map_euc[*ptr] & 1) && (0xa1 <= ptr[1] && ptr[1] <= 0xfe))
+ 			{
+ 				*dst++ = (euctosjis(ptr[0], ptr[1]) & 0xff00) >> 8;
+ 				*dst++ = euctosjis(ptr[0], ptr[1]) & 0xff;
+ 				ptr += 2;
+ 				i += 2;
+ 				if (i > len)
+ 					*tail = TRUE;
+ 			}
+ 			else if ((kanji_map_euc[*ptr] & 2) && (0xa1 <= ptr[1] && ptr[1] <= 0xdf))
+ 			{
+ 				*dst++ = '.';
+ 				*dst++ = ptr[1];
+ 				ptr += 2;
+ 				i += 2;
+ 				if (i > len)
+ 					*tail = TRUE;
+ 			}
+ 			else
+ 				goto normal;
+ 			break;
+ 		case JP_SJIS:
+ 			if ((kanji_map_sjis[*ptr] & 1)
+ 					&& ((0x40 <= ptr[1] && ptr[1] <= 0x7e) || (0x80 <= ptr[1] && ptr[1] <= 0xfc)))
+ 			{
+ 				*dst++ = *ptr++;
+ 				*dst++ = *ptr++;
+ 				i += 2;
+ 				if (i > len)
+ 					*tail = TRUE;
+ 			}
+ 			else if (kanji_map_sjis[*ptr] & 2)
+ 			{
+ 				*dst++ = *ptr++;
+ 				i += 1;
+ 			}
+ 			else
+ 				goto normal;
+ 			break;
+ #ifdef NT
+ 		case JP_WIDE:		/* UNICODE */
+ 			{
+ 				int			wlen;
+ 				char_u		buf[2];
+ 				int			nochar;
+ 
+ 				if (ptr[0] == 0xff && ptr[1] == 0xfe)
+ 				{
+ 					*tail = TRUE;
+ 					goto normal;
+ 				}
+ 				wlen = WideCharToMultiByte(p_cpage, WC_COMPOSITECHECK, (LPCWSTR)ptr, 1, (LPSTR)buf, 2, NULL, &nochar);
+ 				if (nochar)
+ 					goto normal;
+ 				if (wlen == 2)
+ 				{
+ 					*dst++ = buf[0];
+ 					*dst++ = buf[1];
+ 				}
+ 				else if (buf[0] < ' ')
+ 				{
+ 					*dst++ = '.';
+ 					*dst++ = '.';
+ 				}
+ 				else
+ 				{
+ 					*dst++ = buf[0];
+ 					*dst++ = '.';
+ 				}
+ 				ptr += 2;
+ 				i += 2;
+ 				if (i > len)
+ 					*tail = TRUE;
+ 			}
+ 			break;
+ #endif
+ 		default:
+ normal:
+ 			if (*ptr < ' ' || 0x7f <= *ptr)
+ 				*dst++ = '.';
+ 			else
+ 				*dst++ = *ptr;
+ 			ptr++;
+ 			i++;
+ 			break;
+ 		}
+ 	}
+ }
+ 
+ 	char_u *
+ binaryconvsto(code, ptr, len)
+ 	char	code;
+ 	char_u	*ptr;
+ 	int		*len;
+ {
+ 	char_u				value = 0;
+ 	int					cnt = 0;
+ 	char_u				*top;
+ 	int					quote = FALSE;
+ 
+ 	*len = 0;
+ 	if ((strchr(ptr, ':') > strchr(ptr, '"')) && strchr(ptr, '"') != NULL)
+ 		;
+ 	else if ((top = strchr(ptr, ':')) != NULL)
+ 		ptr = top + 1;
+ 	top = alloc(STRLEN(ptr) + 1);
+ 
+ 	while (*ptr)
+ 	{
+ 		if (quote)
+ 		{
+ 			if (*ptr == '"')
+ 				quote = FALSE;
+ 			else if (ptr[0] == '\\' && ptr[1] == '"')
+ 			{
+ 				top[(*len)++] = '"';
+ 				ptr++;
+ 			}
+ 			else if (code == JP_JIS)
+ 				top[(*len)++] = *ptr;
+ 			else
+ 			{
+ 				char_u		buf[3];
+ 				char_u		*tmpptr;
+ 				char_u		*p;
+ 
+ 				if (ISkanji(*ptr))
+ 				{
+ 					buf[0] = ptr[0];
+ 					buf[1] = ptr[1];
+ 					buf[2] = NUL;
+ 					p = tmpptr = kanjiconvsto(buf, code);
+ 					while (*p)
+ 						top[(*len)++] = *p++;
+ 					free(tmpptr);
+ 					ptr++;
+ 				}
+ 				else if (ISkana(*ptr))
+ 				{
+ 					buf[0] = ptr[0];
+ 					buf[1] = NUL;
+ 					p = tmpptr = kanjiconvsto(buf, code);
+ 					while (*p)
+ 						top[(*len)++] = *p++;
+ 					free(tmpptr);
+ 				}
+ 				else
+ 					top[(*len)++] = *ptr;
+ 			}
+ 		}
+ 		else
+ 		{
+ 			switch (*ptr) {
+ 			case '0': case '1': case '2': case '3': case '4':
+ 			case '5': case '6': case '7': case '8': case '9':
+ 				value = (value << 4) + (*ptr - '0');
+ 				cnt++;
+ 				break;
+ 			case 'a': case 'A':
+ 				value = (value << 4) + 10
+ 								+ (*ptr == 'a' ? *ptr - 'a' : *ptr - 'A');
+ 				cnt++;
+ 				break;
+ 			case 'b': case 'B':
+ 				value = (value << 4) + 10
+ 								+ (*ptr == 'b' ? *ptr - 'a' : *ptr - 'A');
+ 				cnt++;
+ 				break;
+ 			case 'c': case 'C':
+ 				value = (value << 4) + 10
+ 								+ (*ptr == 'c' ? *ptr - 'a' : *ptr - 'A');
+ 				cnt++;
+ 				break;
+ 			case 'd': case 'D':
+ 				value = (value << 4) + 10
+ 								+ (*ptr == 'd' ? *ptr - 'a' : *ptr - 'A');
+ 				cnt++;
+ 				break;
+ 			case 'e': case 'E':
+ 				value = (value << 4) + 10
+ 								+ (*ptr == 'e' ? *ptr - 'a' : *ptr - 'A');
+ 				cnt++;
+ 				break;
+ 			case 'f': case 'F':
+ 				value = (value << 4) + 10
+ 								+ (*ptr == 'f' ? *ptr - 'a' : *ptr - 'A');
+ 				cnt++;
+ 				break;
+ 			case ';':
+ 				if (cnt == 1)
+ 				{
+ 					top[(*len)++] = value;
+ 					cnt = 0;
+ 					value = 0;
+ 				}
+ 				return(top);
+ 			case '"':
+ 				if (cnt == 1)
+ 				{
+ 					top[(*len)++] = value;
+ 					cnt = 0;
+ 					value = 0;
+ 				}
+ 				quote = TRUE;
+ 				break;
+ 			case ' ':
+ 			case '\t':
+ 			case '\n':
+ 			case '\r':
+ 			default:
+ 				if (cnt == 1)
+ 				{
+ 					top[(*len)++] = value;
+ 					cnt = 0;
+ 					value = 0;
+ 				}
+ 				break;
+ 			}
+ 			if (cnt == 2)
+ 			{
+ 				top[(*len)++] = value;
+ 				cnt = 0;
+ 				value = 0;
+ 			}
+ 		}
+ 		ptr++;
+ 	}
+ 	return(top);
+ }
+ 
+ /*
+  * JIS X 0201 Right hand set(hankaku kana) <-> JIS X 0208(zenkaku)
+  *
+  */
+ 	static int
+ jisx0201rto0208(src0, src1, dst0, dst1)
+ 	char_u src0, src1, *dst0, *dst1;
+ {
+ 	char_u	c, y;
+ 	char_u	*x0201p, z;
+ 	int		conv;
+ 
+ 	src0 |= 0x80;
+ 	src1 |= 0x80;
+ 	c = (char_u)src0;
+ 	x0201p = (char_u *)jisx0201r + 2 * (c - 0xa0);
+ 
+ 	if (! ISkanji(y = *x0201p))
+ 	{
+ 		*dst0 = y;
+ 		*dst1 = NUL;
+ 		return FALSE;
+ 	}
+ 
+ 	z = *(x0201p + 1);
+ 	conv = FALSE;
+ 	if		((char_u)src1 == 0xdf &&		/* maru */
+ 				(c >= 0xca && c <= 0xce))	/* ha - ho */
+ 	{
+ 		z += 2;
+ 		conv = TRUE;
+ 	}
+ 	else if ((char_u)src1 == 0xde)			/* dakuten */
+ 	{
+ 		conv = TRUE;
+ 		if (   (c >= 0xb6 && c <= 0xc4)		/* ka - to */
+ 			|| (c >= 0xca && c <= 0xce) )	/* ha - ho */
+ 			z ++;
+ 		else if (c == 0xb3)					/* u -> vu*/
+ 			z = 0x94;
+ 		else
+ 			conv = FALSE;
+ 	}
+ 
+ 	*dst0 = y;
+ 	*dst1 = z;
+ 
+ 	return conv ? TRUE : FALSE;
+ }
+ 
+ /*
+  * compare two strings, ignoring case
+  * return 0 for match, 1 for difference
+  */
+ 	int
+ jp_strnicmp(s1, s2, len)
+ 	char_u	*s1;
+ 	char_u	*s2;
+ 	size_t	len;
+ {
+ 	char_u	*	str[2];
+ 	char_u		wrk[2][2];
+ 	int			slen[2];
+ 	char_u	*	s;
+ 	char_u	*	w;
+ 	int		*	l;
+ 	size_t		wlen;
+ 	int			i;
+ 	int			class;
+ 	int			flg = TRUE;
+ 	size_t		tlen = len;
+ 
+ 	wlen = len;
+ 	s = s1;
+ 	w = s2;
+ 	while (wlen)
+ 	{
+ 		if ((*s == '\t' && *w == ' ') || (*s == ' ' && *w == '\t'))
+ 			;
+ 		else if (TO_UPPER(*s) != TO_UPPER(*w))
+ 		{
+ 			flg = FALSE;
+ 			break;
+ 		}
+ 		if (*s == NUL)
+ 			break;
+ 		++s;
+ 		++w;
+ 		--wlen;
+ 	}
+ 	if (flg)
+ 		return tlen;						/* strings match */
+ 	str[0]	= s1;
+ 	str[1]	= s2;
+ 	tlen	= 0;
+ 	while (len > 0)
+ 	{
+ 		if (*str[1] == NUL)
+ 			return tlen;
+ 		if (*str[0] == NUL)
+ 			return 0;
+ 		for (i = 0; i < 2; i++)
+ 		{
+ 			s = str[i];
+ 			w = &wrk[i][0];
+ 			l = &slen[i];
+ 			*l = 1;
+ 			if (ISkanji(*s))
+ 			{
+ 				*l = 2;
+ 				w[0] = *s;
+ 				w[1] = *(s + 1);
+ 			}
+ 			else if (ISkana(*s))
+ 			{
+ 				if (jisx0201rto0208(*s, *(s + 1), &w[0], &w[1]))
+ 					*l = 2;
+ 			}
+ 			else if (isalpha(*s))
+ 			{
+ 				if (islower(*s))
+ 				{
+ 					w[0] = 0x82;
+ 					w[1] = 0x60 + (*s - 'a');
+ 				}
+ 				else
+ 				{
+ 					w[0] = 0x82;
+ 					w[1] = 0x60 + (*s - 'A');
+ 				}
+ 			}
+ 			else if (isdigit(*s))
+ 			{
+ 				w[0] = 0x82;
+ 				w[1] = 0x4f + (*s - '0');
+ 			}
+ 			else
+ 			{
+ 				char_u	**	cnv = (char_u **)Asconv;
+ 				char	*	c;
+ 
+ 				while (*cnv[0])
+ 				{
+ 					c = *cnv;
+ 					if (c[0] == *s)
+ 					{
+ 						w[0] = c[1];
+ 						w[1] = c[2];
+ 						break;
+ 					}
+ 					cnv++;
+ 				}
+ 			}
+ 			class = jpcls(w[0], w[1]);
+ 			if (class == JPC_HIRA || class == JPC_ALNUM)
+ 				jptocase(&w[0], &w[1], UPPER);
+ 		}
+ 		if (!(wrk[0][0] == wrk[1][0] && wrk[0][1] == wrk[1][1]))
+ 			return 0;
+ 		str[0] += slen[0];
+ 		str[1] += slen[1];
+ 		len -= slen[1];
+ 		tlen += slen[0];
+ 	}
+ 	return tlen;							/* strings match */
+ }
+ 
+ #ifdef UCODE
+ int ucs2sjis __ARGS((unsigned short ucs, unsigned char* sjis));
+ void sjis2ucs __ARGS((unsigned char* sjis, int len, unsigned char* ucs));
+ 
+ 	int
+ wide2multi(ptr, size, first)
+ 	char_u	*	ptr;
+ 	int			size;
+ 	int			first;
+ {
+ 	char_u	*	p = ptr;
+ 	char_u		buf[2];
+ 	int			len;
+ 	int			total = 0;
+ 	int			i;
+ 	static int	rev = 0;
+ 
+ 	if (first)
+ 	{
+ 		short_u		w = 0xfeff;		/* BOM */
+ 
+ 		memmove((char *)buf, &w, 2);
+ 		rev = 1;
+ 		if (p[0] == buf[0] && p[1] == buf[1])
+ 			rev = 0;
+ 		p += 2;
+ 		size -= 2;
+ 	}
+ 	for (i = 0; i < size; i += 2)
+ 	{
+ 		if (rev) {
+ 			buf[0]	= p[0];
+ 			p[0]	= p[1];
+ 			p[1]	= buf[0];
+ 		}
+ #ifdef NT
+ 		len = WideCharToMultiByte(p_cpage, WC_COMPOSITECHECK, (LPCWSTR)p, 1, (LPSTR)buf, 2, NULL, NULL);
+ #else
+ 		len = ucs2sjis((*(p+1) << 8) | *p, buf);
+ #endif
+ 		memmove((char *)&ptr[total], buf, len);
+ 		p += 2;
+ 		total += len;
+ 	}
+ 	return(total);
+ }
+ 
+ 	void
+ multi2wide(k1, k2, len)
+ 	char_u	*	k1;
+ 	char_u	*	k2;
+ 	int			len;
+ {
+ 	char_u	buf[2];
+ 	char_u	wbuf[2/*sizeof(WCHAR)*/];
+ 
+ 	buf[0] = *k1;
+ 	buf[1] = *k2;
+ #ifdef NT
+ 	MultiByteToWideChar(p_cpage, MB_PRECOMPOSED, (LPSTR)buf, len, (LPWSTR)wbuf, 1);
+ #else
+ 	sjis2ucs(buf, len, wbuf);
+ #endif
+ 	*k1 = wbuf[0];
+ 	*k2 = wbuf[1];
+ }
+ #endif /* UCODE */
+ #endif	/* KANJI */
diff -crN ../orig/src/kanji.h ./src/kanji.h
*** ../orig/src/kanji.h	Thu Jan 01 09:00:00 1970
--- ./src/kanji.h	Fri Jul 30 06:54:04 1999
***************
*** 0 ****
--- 1,55 ----
+ /*******************************************************************************
+  * vi:ts=4:sw=4
+  *	original Ogasawara Hiroyuki (COR.)
+  *  original Atsushi Nakamura
+  ******************************************************************************/
+ #ifdef KANJI
+ 
+ #define	JP_EUC		'E'			/* EUC */
+ #define	JP_JIS		'J'			/* JIS */
+ #define	JP_SJIS		'S'			/* Shift-JIS */
+ #define JP_WIDE		'U'			/* UNICODE */
+ #define JP_UTF8		'T'			/* UTF-8 */
+ #define JP_FSTR		"EJSejs"
+ #define JP_STR		"EJS"
+ #define	JP_KEY		*p_jp		/* file/key in code */
+ #define	JP_DISP		*(p_jp + 1)	/* terminal display code */
+ #define	JP_FILE		*(p_jp + 2)	/* write code for new file */
+ #define	JP_SYS		*(p_jp + 2)	/* system code for pipe */
+ 
+ #ifndef JP_DEF
+ # if defined(MSDOS) || defined(__CYGWIN__)
+ #  define	JP_DEF	"SSS"
+ # else
+ #  define	JP_DEF	"EEE"
+ # endif
+ #endif
+ 
+ #ifdef UCODE
+ # undef JP_FSTR
+ # define JP_FSTR       "EJSUTejsut"
+ # undef JP_STR
+ # define JP_STR		"EJST"
+ #endif
+ 
+ #define JP_ASCII	0
+ #define JP_KANJI	1
+ #define	JP_KANA		2
+ 
+ #define JPC_ALNUM	3
+ #define JPC_HIRA	4
+ #define JPC_KATA	5		/* 2byte kana */
+ #define JPC_KIGOU	6
+ #define JPC_KANJI	7
+ #define JPC_KANA	8		/* 1byte kana */
+ #define JPC_KIGOU2	9
+ 
+ #define JP1_ALNUM	'#'
+ #define JP1_HIRA	'$'
+ #define JP1_KATA	'%'
+ #define JP1_KIGOU	'!'
+ #define JP1_KIGOU2	'"'
+ 
+ #define HexChar(_c)	((_c) >= 10 ? 'A' + (_c) - 10 : '0' + (_c));
+ 
+ #endif /* KANJI */
diff -crN ../orig/src/keymap.h ./src/keymap.h
*** ../orig/src/keymap.h	Wed Aug 10 13:54:10 1994
--- ./src/keymap.h	Sun Jan 19 00:42:34 1997
***************
*** 18,27 ****
   * for special characters. If this is changed also change the numbers in
   * term.h and main.c.
   */
! #ifdef MSDOS
! # define K_OFF 0x30
  #else
! # define K_OFF 0x00
  #endif
  
  #define K_CCIRCM		0x1e	/* control circumflex */
--- 18,31 ----
   * for special characters. If this is changed also change the numbers in
   * term.h and main.c.
   */
! #ifdef KANJI
! #  define K_OFF (0x101+'@'-0x80)
  #else
! # ifdef MSDOS
! #  define K_OFF 0x30
! # else
! #  define K_OFF 0x00
! # endif
  #endif
  
  #define K_CCIRCM		0x1e	/* control circumflex */
***************
*** 68,72 ****
--- 72,82 ----
   * NULs cannot be in the input string, therefore CTRL-@ is replaced by K_ZERO.
   * K_NUL is used for MSDOS extended keys (same value used in term.h).
   */
+ #ifdef KANJI
+ #define K_SPECIAL		(0xff)			/* special key follows */
+ #define K_NUL			(0xfd)			/* for MSDOS: special key follows */
+ #define K_ZERO			(0xa0)			/* replaces ^@ */
+ #else
  #define K_NUL			(K_OFF + 0x9e)	/* for MSDOS: special key follows */
  #define K_ZERO			(K_OFF + 0x9f)	/* replaces ^@ */
+ #endif
diff -crN ../orig/src/linefunc.c ./src/linefunc.c
*** ../orig/src/linefunc.c	Wed Aug 10 13:54:10 1994
--- ./src/linefunc.c	Sat Oct 25 09:20:02 1997
***************
*** 14,19 ****
--- 14,22 ----
  #include "vim.h"
  #include "globals.h"
  #include "proto.h"
+ #ifdef KANJI
+ #include "kanji.h"
+ #endif
  
  /*
   * coladvance(col)
***************
*** 38,43 ****
--- 41,55 ----
  	{
  		++index;
  		/* Count a tab for what it's worth (if list mode not on) */
+ #ifdef KANJI
+ 		if (ISkanji(*ptr))
+ 		{
+ 			col += 2;
+ 			++ptr;
+ 			++index;
+ 		}
+ 		else
+ #endif
  		col += chartabsize(*ptr, (long)col);
  		++ptr;
  	}
***************
*** 50,55 ****
--- 62,71 ----
  		curwin->w_cursor.col = 0;
  	else
  		curwin->w_cursor.col = index;
+ #ifdef KANJI
+ 	if (ISkanjiCur() == 2 && curwin->w_cursor.col != 0)
+ 		curwin->w_cursor.col--;
+ #endif
  }
  
  /*
***************
*** 72,78 ****
--- 88,106 ----
  
  	if (*p != NUL)
  	{			/* still within line */
+ #ifdef KANJI
+ 		if (ISkanji(*p))
+ 		{
+ 			lp->col += 2;
+ 			p++;
+ 		}
+ 		else
+ 		{
+ 			lp->col++;
+ 		}
+ #else
  		lp->col++;
+ #endif
  		return ((p[1] != NUL) ? 0 : 1);
  	}
  	if (lp->lnum != curbuf->b_ml.ml_line_count)
***************
*** 117,122 ****
--- 145,154 ----
  	if (lp->col > 0)
  	{			/* still within line */
  		lp->col--;
+ #ifdef KANJI
+ 		if (ISkanjiFpos(lp) == 2 && lp->col > 0)
+ 			lp->col--;
+ #endif
  		return 0;
  	}
  	if (lp->lnum > 1)
***************
*** 158,163 ****
  	len = STRLEN(ml_get(curwin->w_cursor.lnum));
  	if (len == 0)
  		curwin->w_cursor.col = 0;
! 	else if (curwin->w_cursor.col >= len)
  		curwin->w_cursor.col = len - 1;
  }
--- 190,200 ----
  	len = STRLEN(ml_get(curwin->w_cursor.lnum));
  	if (len == 0)
  		curwin->w_cursor.col = 0;
! 	else if (curwin->w_cursor.col >= len){
  		curwin->w_cursor.col = len - 1;
+ #ifdef KANJI
+ 		if (ISkanjiCur() == 2 && curwin->w_cursor.col > 0)
+ 			curwin->w_cursor.col--;
+ #endif
+ 	}
  }
diff -crN ../orig/src/main.c ./src/main.c
*** ../orig/src/main.c	Wed Aug 10 13:54:10 1994
--- ./src/main.c	Sun Dec 19 00:02:48 1999
***************
*** 15,20 ****
--- 15,26 ----
  #ifdef SPAWNO
  # include <spawno.h>			/* special MSDOS swapping library */
  #endif
+ #ifdef KANJI
+ # include "kanji.h"
+ #endif
+ #if !defined(USE_EXFILE) && defined(NT)
+ # include <windows.h>
+ #endif
  
  static void usage __PARMS((int));
  
***************
*** 31,36 ****
--- 37,45 ----
  								(char_u *)"Argument missing\n",		/* 2 */
  								};
  
+ #ifndef notdef
+ 	if (n <= 2)
+ #endif
  	fprintf(stderr, (char *)errors[n]);
  	fprintf(stderr, "usage:");
  	for (i = 0; ; ++i)
***************
*** 63,69 ****
  # include <locale.h>
  #endif
  
! 	void
  main(argc, argv)
  	int				argc;
  	char		  **argv;
--- 72,78 ----
  # include <locale.h>
  #endif
  
! 	int
  main(argc, argv)
  	int				argc;
  	char		  **argv;
***************
*** 78,83 ****
--- 87,98 ----
  	int				i;
  	int				bin_mode = FALSE;	/* -b option used */
  	int				win_count = 1;		/* number of windows to use */
+ #ifdef KANJI
+ 	int				kopt = FALSE;
+ 	int				fopt = FALSE;
+ 	char_u			jcode[2];
+ 	char_u			jmask[4];
+ #endif
  
  #ifdef USE_LOCALE
  	setlocale(LC_ALL, "");		/* for ctype() and the like */
***************
*** 124,130 ****
  	 *		'-T terminal'	terminal name
  	 */
  	while (argc > 1 && ((c = argv[0][0]) == '+' || (c == '-' &&
! 			strchr("vnbrxocswTd", c = argv[0][1]) != NULL && c != NUL)))
  	{
  		--argc;
  		switch (c)
--- 139,145 ----
  	 *		'-T terminal'	terminal name
  	 */
  	while (argc > 1 && ((c = argv[0][0]) == '+' || (c == '-' &&
! 			strchr("vnbrxocswTdRKkhB", c = argv[0][1]) != NULL && c != NUL)))
  	{
  		--argc;
  		switch (c)
***************
*** 138,148 ****
--- 153,181 ----
  			break;
  
  		case 'v':
+ #ifndef notdef
+ 		case 'R':
+ #endif
  			readonlymode = TRUE;
  			curbuf->b_p_ro = TRUE;
  			/*FALLTHROUGH*/
  
  		case 'n':
+ #ifdef NT
+ 			c = argv[0][2];
+ 			if (c == 'w' && SubSysCon)
+ 				GuiWin = 0;
+ 			else if (c == 'o' && GuiWin)
+ 				GuiWin = '1';
+ 			else if (c != NUL && isdigit(c))
+ 			{
+ 				GuiConfig = atoi(&(argv[0][2]));
+ 				if (GuiConfig > 3)
+ 					GuiConfig = 0;
+ 			}
+ 			else
+ #endif
+ 
  			p_uc = 0;
  			break;
  
***************
*** 167,172 ****
--- 200,211 ----
  			win_count = atoi(&(argv[0][2]));		/* 0 means: number of files */
  			break;
  
+ #ifdef KANJI
+ 		case 'h':
+ 			usage(9);
+ 			break;
+ #endif
+ 
  		default:	/* options with argument */
  			++argv;
  			--argc;
***************
*** 203,208 ****
--- 242,288 ----
  				term = (char_u *)*argv;
  				break;
  			
+ #ifdef KANJI
+ 			case 'k':
+ 				if (STRLEN(argv[0]) == 1 && STRCHR(JP_FSTR, argv[0][0]))
+ 				{
+ 					fopt = TRUE;
+ 					curbuf->b_p_jc = strsave(argv[0]);
+ 					STRCPY(jcode, argv[0]);
+ 				}
+ 				break;
+ 			case 'K':
+ 				if (STRLEN(argv[0]) == 3)
+ 				{
+ 					char_u	*	cp;
+ 
+ 					p_jp = argv[0];
+ 					for (cp = argv[0]; *cp; cp++)
+ 					{
+ 						if ('a' <= *cp && *cp <= 'z')
+ 							*cp -= 'a' - 'A';
+ 						if (!STRCHR(JP_STR, *cp))
+ 							p_jp = NULL;
+ 					}
+ 				}
+ 				if (p_jp != NULL)
+ 				{
+ 					kopt = TRUE;
+ 					STRCPY(jmask, p_jp);
+ 				}
+ 				break;
+ #endif
+ 
+ #ifdef NT
+ 			case 'B':
+ 				{
+ 					BenchTime = GetTickCount();
+ 					if ((scriptin[0] = fopen(argv[0], READBIN)) == NULL)
+ 						usage(9);
+ 				}
+ 				break;
+ #endif
+ 
  		/*	case 'd':		This is ignored as it is handled in check_win() */
  			}
  		}
***************
*** 216,222 ****
--- 296,306 ----
  		mch_windexit(0);
  
  	/* note that we may use mch_windexit() before mch_windinit()! */
+ #ifdef NT
+ 	mch_windinit(argc, argv);
+ #else
  	mch_windinit();
+ #endif
  	set_init();					/* after mch_windinit because Rows is used */
  	firstwin->w_height = Rows - 1;
  	cmdline_row = Rows - 1;
***************
*** 291,298 ****
--- 375,384 ----
  			arg_count = argc - 1;
  			fname = (char_u *)argv[0];
  #endif
+ #ifdef notdef
  			if (arg_count > 1)
  				printf("%d files to edit\n", arg_count);
+ #endif
  			break;
  		}
  	}
***************
*** 307,312 ****
--- 393,399 ----
  									because starting is TRUE) */
  
  #ifdef MSDOS /* default mapping for some often used keys */
+ # ifndef KANJI
  	domap(0, "#1 :help\r", NORMAL);			/* F1 is help key */
  	domap(0, "\316R i", NORMAL);			/* INSERT is 'i' */
  	domap(0, "\316S \177", NORMAL);			/* DELETE is 0x7f */
***************
*** 332,341 ****
--- 419,433 ----
  	domap(0, "\316\204 \017\061G", INSERT);	/* CTRL-PageUp is '^O1G' */
  	domap(0, "\316Q \017\006", INSERT);		/* PageDown is '^O^F' */
  	domap(0, "\316v \017G", INSERT);		/* CTRL-PageDown is '^OG' */
+ # endif /* KANJI */
  #endif
  
  	msg_start();		/* in case a mapping is printed */
  	no_wait_return = TRUE;
+ #ifndef notdef
+ 	if (arg_count > 1)
+ 		smsg("%d files to edit\n", arg_count);
+ #endif
  
  /*
   * get system wide defaults (for unix)
***************
*** 353,363 ****
--- 445,475 ----
   * The first that exists is used, the rest is ignored.
   */
  	if ((initstr = vimgetenv((char_u *)"VIMINIT")) != NULL)
+ #ifndef notdef
+ 	{
+ 	  	if (*initstr == '"')
+ 		  	initstr++;
+ 		if (initstr[strlen(initstr) - 1] == '"')
+ 		  	initstr[strlen(initstr) - 1] = '\0';
+ 		docmdline(initstr);
+ 	}
+ #else
  		docmdline(initstr);
+ #endif
  	else if (dosource((char_u *)SYSVIMRC_FILE) == FAIL)
  	{
  		if ((initstr = vimgetenv((char_u *)"EXINIT")) != NULL)
+ #ifndef notdef
+ 		{
+ 			if (*initstr == '"')
+ 				initstr++;
+ 			if (initstr[strlen(initstr) - 1] == '"')
+ 				initstr[strlen(initstr) - 1] = '\0';
+ 			docmdline(initstr);
+ 		}
+ #else
  			docmdline(initstr);
+ #endif
  		else
  			(void)dosource((char_u *)SYSEXRC_FILE);
  	}
***************
*** 434,440 ****
--- 546,563 ----
  		curbuf->b_p_et = 0;			/* no expand tab */
  	}
  
+ #ifdef KANJI
+ 	if (kopt && STRCMP(jmask, p_jp) != 0)
+ 		STRCPY(p_jp, jmask);
+ 	if (fopt && STRCMP(jcode, curbuf->b_p_jc) != 0)
+ 		STRCPY(curbuf->b_p_jc, jcode);
+ #endif
+ 
+ #ifdef KANJI
+ 	(void)setfname(fileconvsfrom(fname), NULL, TRUE);
+ #else
  	(void)setfname(fname, NULL, TRUE);
+ #endif
  	maketitle();
  
  	if (win_count == 0)
***************
*** 457,462 ****
--- 580,589 ----
  	}
  	screenclear();						/* clear screen */
  
+ #ifdef NT
+ 	if (GuiWin)
+ 		++no_wait_return;
+ #endif
  	if (recoverymode)					/* do recover */
  	{
  		if (ml_open() == FAIL)			/* Initialize storage structure */
***************
*** 482,489 ****
--- 609,621 ----
  			break;
  		win_enter(curwin->w_next, FALSE);
  											/* edit file i, if there is one */
+ #ifdef KANJI
+ 		(void)doecmd(i < arg_count ? fileconvsfrom(arg_files[i]) : NULL,
+ 											NULL, NULL, TRUE, (linenr_t)1);
+ #else
  		(void)doecmd(i < arg_count ? arg_files[i] : NULL,
  											NULL, NULL, TRUE, (linenr_t)1);
+ #endif
  		curwin->w_arg_idx = i;
  	}
  	win_enter(firstwin, FALSE);				/* back to first window */
***************
*** 493,502 ****
--- 625,647 ----
  	 * put the rest of the names in the buffer list.
  	 */
  	for (i = win_count; i < arg_count; ++i)
+ #ifdef KANJI
+ 		(void)buflist_add(fileconvsfrom(arg_files[i]));
+ #else
  		(void)buflist_add(arg_files[i]);
+ #endif
  
  	if (command)
  		docmdline(command);
+ #ifdef NT
+ 	if (GuiWin)
+ 	{
+ 		if (GuiWin == 'w')
+ 			wincmd_active();
+ 		no_wait_return = 0;
+ 		need_wait_return = FALSE;
+ 	}
+ #endif
  	/*
  	 * put the :ta command in the stuff buffer here, so that it will not
  	 * be erased by an emsg().
***************
*** 547,552 ****
--- 692,698 ----
  		normal();						/* get and execute a command */
  	}
  	/*NOTREACHED*/
+ 	return 0;
  }
  
  	void
Only in ../orig/src: makefile.arc
Only in ../orig/src: makefile.bcc
Only in ../orig/src: makefile.dic
Only in ../orig/src: makefile.dos
Only in ../orig/src: makefile.man
Only in ../orig/src: makefile.nt
Only in ../orig/src: makefile.sas
Only in ../orig/src: makefile.uni
diff -crN ../orig/src/makj98.mak ./src/makj98.mak
*** ../orig/src/makj98.mak	Thu Jan 01 09:00:00 1970
--- ./src/makj98.mak	Fri Jan 02 16:54:40 1998
***************
*** 0 ****
--- 1,142 ----
+ # vi:ts=8:sw=8
+ # Makefile for VIM on MSDOS, using Turbo C
+ #
+ 
+ #>>>>> choose options:
+ ### -DDIGRAPHS		digraph support (at the cost of 1.6 Kbyte code)
+ ### -DCOMPATIBLE	start in vi-compatible mode
+ ### -DNOBACKUP		default is no backup file
+ ### -DDEBUG		output a lot of debugging garbage
+ ### -DTERMCAP		include termcap file support
+ ### -DNO_BUILTIN_TCAPS	do not include builtin termcap entries
+ ###				(use only with -DTERMCAP)
+ ### -DSOME_BUILTIN_TCAPS include most useful builtin termcap entries
+ ###				(use only without -DNO_BUILTIN_TCAPS)
+ ### -DALL_BUILTIN_TCAPS	include all builtin termcap entries
+ ###				(use only without -DNO_BUILTIN_TCAPS)
+ ### -DVIMRC_FILE	name of the .vimrc file in current dir
+ ### -DEXRC_FILE		name of the .exrc file in current dir
+ ### -DSYSVIMRC_FILE	name of the global .vimrc file
+ ### -DSYSEXRC_FILE	name of the global .exrc file
+ ### -DDEFVIMRC_FILE	name of the system-wide .vimrc file
+ ### -DVIM_HLP		name of the help file
+ ### -DWEBB_COMPLETE	include Webb's code for command line completion
+ ### -DWEBB_KEYWORD_COMPL include Webb's code for keyword completion
+ ### -DNOTITLE		'title' option off by default
+ DEFINES = -DKANJI -DTRACK -DFEPCTRL -DCRMARK -DFEXRC -DWEBB_COMPLETE -DWEBB_KEYWORD_COMPL -DTERMCAP -DXARGS -DUSE_GREP -DUSE_OPT #-DCOMPATIBLE
+ TERMLIB = termlib.obj
+ 
+ #>>>>> name of the compiler and linker, name of lib directory
+ CC	= bcc
+ LINK	= tlink
+ LIB	= c:\bc45\lib
+ 
+ #>>>>> end of choices
+ ###########################################################################
+ 
+ DBG	= #-v -Ddebug
+ INCL	= vim.h globals.h param.h keymap.h macros.h ascii.h msdos.h structs.h
+ CFLAGS	= $(DBG) -ml -O1 -DMSDOS $(DEFINES)
+ 
+ OBJ =	alloc.obj pc98.obj buffer.obj charset.obj cmdcmds.obj cmdline.obj \
+ 	csearch.obj digraph.obj edit.obj fileio.obj getchar.obj help.obj \
+ 	linefunc.obj main.obj mark.obj memfile.obj memline.obj message.obj \
+ 	misccmds.obj normal.obj ops.obj param.obj quickfix.obj regexp.obj \
+ 	regsub.obj screen.obj search.obj \
+ 	tag.obj term.obj undo.obj window.obj $(TERMLIB) \
+ 	kanji.obj fepctrl.obj track.obj xargs.obj
+ 
+ .c.obj:
+ 	$(CC) @&&!
+ $(CFLAGS) -c $&.c
+ !
+ 
+ .c.exe:
+ 	$(CC) @&&!
+ $(CFLAGS) $&.c
+ !
+ 
+ ###########################################################################
+ 
+ vim.exe: $(OBJ) version.obj
+ 	$(CC) @&&!
+ -ml $(DBG) -evim.exe $(OBJ) version.obj
+ !
+ 
+ ctags:
+ 	command /c ctags *.c *.h
+ 
+ clean:
+ 	del *.obj
+ 	del *.exe
+ 	del cmdtab.h
+ 	del vim.tr
+ 	del tdconfig.td
+ 	del vim.tr2
+ 	del tdconfig.td2
+ 	del jptab.h
+ 
+ addcr:	addcr.c
+ 	$(CC) addcr.c
+ 	command /c addcr.bat
+ 
+ ###########################################################################
+ GREPOBJ = grep.obj alloc.obj charset.obj kanji.obj xargs.obj regexp.obj regsub.obj
+ 
+ grep.exe: $(GREPOBJ)
+ 	$(CC) @&&!
+ -ml $(DBG) -egrep.exe $(GREPOBJ)
+ !
+ 
+ grep.obj:	grep/grep.c $(INCL)
+ 	$(CC) @&&!
+ $(CFLAGS) -c grep/grep.c
+ !
+ 
+ ###########################################################################
+ 
+ alloc.obj:	alloc.c  $(INCL)
+ pc98.obj:	pc98.c  $(INCL) msdos.h
+ msdos.obj:	msdos.c  $(INCL) msdos.h
+ buffer.obj:	buffer.c  $(INCL)
+ charset.obj:	charset.c  $(INCL)
+ cmdcmds.obj:	cmdcmds.c  $(INCL)
+ cmdline.obj:	cmdline.c  $(INCL) cmdtab.h
+ csearch.obj:	csearch.c  $(INCL)
+ digraph.obj:	digraph.c  $(INCL)
+ edit.obj:	edit.c  $(INCL)
+ fileio.obj:	fileio.c  $(INCL) kanji.h
+ getchar.obj:	getchar.c  $(INCL)
+ help.obj:	help.c  $(INCL)
+ linefunc.obj:	linefunc.c  $(INCL)
+ main.obj:	main.c  $(INCL)
+ mark.obj:	mark.c  $(INCL)
+ memfile.obj:	memfile.c  $(INCL)
+ memline.obj:	memline.c  $(INCL)
+ message.obj:	message.c  $(INCL)
+ misccmds.obj:	misccmds.c  $(INCL)
+ normal.obj:	normal.c  $(INCL) ops.h
+ ops.obj:	ops.c  $(INCL) ops.h
+ param.obj:	param.c  $(INCL)
+ quickfix.obj:	quickfix.c  $(INCL)
+ regexp.obj:	regexp.c  $(INCL)
+ regsub.obj:	regsub.c  $(INCL)
+ screen.obj:	screen.c  $(INCL) kanji.h
+ search.obj:	search.c  $(INCL)
+ tag.obj:	tag.c  $(INCL)
+ term.obj:	term.c  $(INCL) term.h
+ undo.obj:	undo.c  $(INCL)
+ window.obj:	window.c  $(INCL)
+ kanji.obj:	kanji.c  $(INCL) jptab.h kanji.h
+ fepctrl.obj:	fepctrl.c  $(INCL)
+ track.obj:	track.c  $(INCL) jptab.h kanji.h
+ mkcmdtab.exe:	mkcmdtab.c
+ jptab.exe:	jptab.c
+ 
+ cmdtab.h: cmdtab.tab mkcmdtab.c
+ 	$(CC) $(CFLAGS) mkcmdtab.c
+ 	mkcmdtab cmdtab.tab cmdtab.h
+ 
+ jptab.h: jptab.c
+ 	$(CC) $(CFLAGS) jptab.c
+ 	jptab.exe > jptab.h
diff -crN ../orig/src/makjdj.mak ./src/makjdj.mak
*** ../orig/src/makjdj.mak	Thu Jan 01 09:00:00 1970
--- ./src/makjdj.mak	Mon Nov 24 20:47:14 1997
***************
*** 0 ****
--- 1,541 ----
+ # vi:ts=8:sw=8
+ # Makefile for Vim on Unix
+ #
+ 
+ # Note: You MUST uncomment three hardware dependend lines!
+ 
+ # There are three types of defines:
+ #
+ # 1. configuration dependend
+ #	Used for "make install". Adjust the path names and protections
+ #	to your desire. Also defines the root for the X11 files (not required).
+ #
+ # 2. various choices
+ #	Can be changed to match your compiler or your preferences (not
+ #	required).
+ #
+ # 3. hardware dependend
+ #	If you machine is in the list, remove one '#' in front of the defines
+ #	following it. Otherwise: Find a machine that is similar and change the
+ #	defines to make it work. Normally you can just try and see what error
+ #	messages you get. (REQUIRED).
+ 
+ # The following systems have entries below. They have been tested and should
+ # work without modification. But later code changes may cause small problems.
+ # There are entries for other systems, but these have not been tested recently.
+ 
+ #system:		tested configurations:		tested by:
+ 
+ #Sun 4.1.x		cc	gcc	X11	no X11	(jw) (mool)
+ #FreeBSD		cc	gcc	X11	no X11	(mool)
+ #linux 1.0		cc		X11
+ #Linux 1.0.9			gcc		no X11	(jw)
+ #ULTRIX 4.2A on MIPS	cc	gcc		no X11	(mool)
+ #HPUX			cc	gcc	X11	no X11	(jw) (mool)
+ #irix 4.0.5H		cc		X11
+ #IRIX 4.0  SGI		cc		X11		(jw)
+ #SINIX-L 5.41		cc			no X11
+ #MOT188			cc			no X11
+ #Sequent/ptx 1.3	cc			no X11	(jw)
+ #osf1			cc			no X11	(jw)
+ #Unisys 6035		cc			no X11
+ #SCO 3.2		cc	gcc		no X11	jos@oce.nl
+ #Solaris		cc		X11
+ #Solaris/Sun OS 5.3	cc			no X11	(jw)
+ #AIX (rs6000)		cc			no X11	(jw)
+ #RISCos on MIPS		cc		X11	no X11	(jw)
+ 
+ # configurations marked by (jw) have been tested by Juergen Weigert:
+ #    jnweiger@uni-erlangen.de
+ 
+ #
+ # PART 1: configuration dependend
+ #
+ 
+ ### root directory for X11 files (unless overruled in hardware-dependend part)
+ ### Unfortunately there is no standard for these, everybody puts them
+ ### somewhere else
+ X11LIBDIR = /usr/openwin/lib
+ X11INCDIR = /usr/openwin/include
+ ### for some hpux systems:
+ #X11LIBDIR = /usr/lib/X11R5
+ #X11INCDIR = /usr/include/X11R5
+ 
+ ### Prefix for location of files
+ PREFIX = /usr/local
+ 
+ ### Location of binary
+ BINLOC = $(PREFIX)/bin
+ 
+ ### Name of target
+ TARGET = vim
+ 
+ ### Location of man page
+ MANLOC = $(PREFIX)/man/man1
+ 
+ ### Location of help file
+ HELPLOC = $(PREFIX)/lib
+ 
+ ### Program to run on installed binary
+ STRIP = strip
+ 
+ ### Permissions for vim binary
+ BINMOD = 755
+ 
+ ### Permissions for man page
+ MANMOD = 644
+ 
+ ### Permissions for help file
+ HELPMOD = 644
+ 
+ MANFILE = ../doc/vim.1
+ 
+ HELPFILE = ../doc/vim.hlp
+ 
+ #
+ # PART 2: various choices
+ #
+ 
+ ### -DDIGRAPHS		digraph support
+ ### -DNO_FREE_NULL	do not call free() with a null pointer
+ ### -DCOMPATIBLE	start in vi-compatible mode
+ ### -DNOBACKUP		default is no backup file
+ ### -DDEBUG		output a lot of debugging garbage
+ ### -DSTRNCASECMP	use strncasecmp() instead of internal function
+ ### -DUSE_LOCALE	use setlocale() to change ctype() and others
+ ### -DTERMCAP		full termcap/terminfo file support
+ ### -DTERMINFO		use terminfo instead of termcap entries for builtin terms
+ ### -DNO_BUILTIN_TCAPS	do not include builtin termcap entries
+ ###				(use only with -DTERMCAP)
+ ### -DSOME_BUILTIN_TCAPS include most useful builtin termcap entries
+ ###				(use only without -DNO_BUILTIN_TCAPS)
+ ### -DALL_BUILTIN_TCAPS	include all builtin termcap entries
+ ###				(use only without -DNO_BUILTIN_TCAPS)
+ ### -DMAXNAMLEN 31	maximum length of a file name (if not defined in sys/dir.h)
+ ### -Dconst=		for compilers that don't have type const
+ ### -DVIMRC_FILE=name		name of the .vimrc file in current dir
+ ### -DEXRC_FILE=name		name of the .exrc file in current dir
+ ### -DSYSVIMRC_FILE=name	name of the global .vimrc file
+ ### -DSYSEXRC_FILE=name		name of the global .exrc file
+ ### -DDEFVIMRC_FILE=name	name of the system-wide .vimrc file
+ ### -DVIM_HLP=name		name of the help file
+ ### -DUSE_SYSTEM	use system() instead of fork/exec for starting a shell
+ ### -DVIM_ISSPACE	use when isspace() can't handle meta chars
+ ### -DNOLIMITS		limits.h does not exist
+ ### -DNOSTDLIB		stdlib.h does not exist
+ ### -DUSE_X11		include code for xterm title saving
+ ### -DWEBB_COMPLETE	include Webb's code for command line completion
+ ### -DWEBB_KEYWORD_COMPL include Webb's code for keyword completion
+ ### -DNOTITLE		'title' option off by default
+ DEFS = -DDIGRAPHS -DTERMCAP -DSOME_BUILTIN_TCAPS -DNO_FREE_NULL -DVIM_ISSPACE \
+ 		-DWEBB_COMPLETE -DWEBB_KEYWORD_COMPL \
+ 		-DVIM_HLP=\"$(HELPLOC)/vim.hlp\" \
+ 		-DKANJI -DTRACK -DCRMARK -DFEPCTRL -DFEXRC -DUSE_GREP -DUSE_OPT
+ 
+ #
+ # PART 3: hardware dependend
+ #
+ 
+ ### CC entry:      name and arguments for the compiler (also for linking)
+ ### MACHINE entry: defines used for compiling (not for linking)
+ ### LIBS:          defines used for linking
+ 
+ # generic for Sun, NeXT, POSIX and SYSV R4 (?) (TESTED for Sun 4.1.x)
+ # standard cc with optimizer
+ #
+ #MACHINE = -DBSD_UNIX -DUSE_LOCALE -DUSE_X11
+ #CC=cc -O -I$(X11INCDIR)
+ #LIBS = -ltermlib -L$(X11LIBDIR) -lX11
+ 
+ # generic for Sun, FreeBSD, NetBSD, NeXT, POSIX and SYSV R4 (?) without x11 code
+ #	(TESTED for Sun 4.1.x and FreeBSD)
+ # standard cc with optimizer
+ #
+ MACHINE = -nostdinc -If:/gcc/include
+ CC=gcc -O4
+ LIBS =
+ TERMLIB=termlib.o
+ 
+ # FreeBSD and NetBSD with Xfree (TESTED for FreeBSD)
+ # standard cc with optimizer
+ #
+ #MACHINE = -DBSD_UNIX -DUSE_LOCALE -DUSE_X11
+ #CC=cc -O -L/usr/X386/lib -I/usr/X386/include
+ #LIBS = -ltermlib -lX11
+ 
+ # FreeBSD and NetBSD with Xfree (TESTED for FreeBSD)
+ # gcc with optimizer
+ #
+ #MACHINE = -DBSD_UNIX -DUSE_LOCALE -DUSE_X11
+ #CC=gcc -O -Wall -traditional -Dconst= -I/usr/X386/include
+ #LIBS = -ltermlib -L/usr/X386/lib -lX11
+ 
+ # like generic, but with termcap, for Linux, NeXT and others (NOT TESTED YET)
+ # standard cc with optimizer
+ #
+ #MACHINE = -DBSD_UNIX
+ #CC=cc -O
+ #LIBS = -ltermcap
+ 
+ # linux 1.0 with X11 (TESTED)
+ #
+ #MACHINE = -DBSD_UNIX -DUSE_LOCALE -DUSE_X11
+ #CC=cc -O -I/usr/X11/include
+ #LIBS = -ltermcap -L/usr/X11/lib -lX11
+ 
+ # like generic, but with debugging (NOT TESTED YET)
+ #
+ #MACHINE = -DBSD_UNIX -g
+ #CC=cc
+ #LIBS = -ltermlib
+ 
+ # like generic, but with gcc and X11 (TESTED on Sun 4.1.x)
+ #
+ #MACHINE = -DBSD_UNIX -DUSE_LOCALE -DUSE_X11
+ #CC=gcc -O -Wall -traditional -Dconst= -L$(X11LIBDIR) -I$(X11INCDIR)
+ #LIBS = -ltermlib -lX11
+ 
+ # like generic, but with gcc, without X11 (TESTED on ULTRIX 4.2A on MIPS)
+ #
+ #MACHINE = -DBSD_UNIX -DUSE_LOCALE
+ #CC=gcc -O -Wall -traditional -Dconst=
+ #LIBS = -ltermlib
+ 
+ # like generic, but with gcc 2.5.8 (TESTED on Sun 4.1.3_U1)
+ #
+ #MACHINE = -DBSD_UNIX -DUSE_LOCALE
+ #CC=gcc -O1000
+ #LIBS = -ltermlib
+ 
+ # standard cc with optimizer for ULTRIX 4.2A on MIPS (ultrix defined) (TESTED)
+ #
+ #MACHINE = -DBSD_UNIX -DUSE_LOCALE
+ #CC=cc -O -Olimit 1500
+ #LIBS = -ltermlib
+ 
+ # GCC (2.2.2d) on Linux (1.0.9) (TESTED)
+ #
+ #MACHINE = -DBSD_UNIX
+ #CC=gcc -O6 -Wall
+ #LIBS = -ltermcap
+ 
+ # Apollo DOMAIN (with SYSTYPE = bsd4.3) (NOT TESTED YET)
+ #
+ #MACHINE = -DBSD_UNIX -DDOMAIN
+ #CC=cc -O -A systype,bsd4.3
+ #LIBS = -ltermlib
+ 
+ # HPUX with X11 (TESTED) (hpux is defined)
+ #
+ #MACHINE = -DBSD_UNIX -DTERMINFO -DUSE_X11
+ #CC=cc -O -I$(X11INCDIR)
+ #LIBS = -ltermcap -L$(X11LIBDIR) -lX11
+ 
+ # HPUX (TESTED) (hpux is defined)
+ #
+ #MACHINE = -DBSD_UNIX -DTERMINFO
+ #CC=cc -O
+ #LIBS = -ltermcap
+ 
+ # HPUX with gcc (TESTED) (hpux is defined)
+ #
+ #MACHINE = -DBSD_UNIX -DTERMINFO
+ #CC=gcc -O
+ #LIBS = -ltermcap
+ 
+ # hpux 9.01 (with termlib instead of termcap) (TESTED)
+ # irix 4.0.5H (TESTED)
+ #
+ #MACHINE = -DBSD_UNIX -DUSE_LOCALE -DUSE_X11
+ #CC=cc -O -I$(X11INCDIR)
+ #LIBS = -ltermlib -L$(X11LIBDIR) -lX11
+ 
+ # IRIX 4.0 (Silicon Graphics Indigo, __sgi will be defined) (TESTED)
+ #
+ #MACHINE = -DBSD_UNIX -DUSE_X11                         
+ #CC=cc -O -Olimit 1500
+ #LIBS = -ltermlib -lX11 -lmalloc -lc_s
+ 
+ # Convex (NOT TESTED YET)
+ #
+ #MACHINE = -DBSD_UNIX -DCONVEX
+ #CC=cc -O
+ #LIBS = -ltermcap
+ 
+ # generic SYSV_UNIX for Dynix/PTX and SYSV R3 (and R4?) (TESTED on SINIX-L 5.41)
+ # (TESTED on MOT188) (TESTED on Sequent/ptx 1.3) (TESTED on osf1)
+ # First try the line with locale. If this gives error messages try the other one.
+ #
+ #MACHINE = -DSYSV_UNIX -DUSE_LOCALE
+ #MACHINE = -DSYSV_UNIX
+ #CC=cc -O
+ #LIBS = -ltermlib
+ 
+ # generic SYSV_UNIX with LOCALE (TESTED on Unisys 6035)
+ #
+ #MACHINE = -DSYSV_UNIX -DUSE_LOCALE -DUNISYS
+ #CC=cc -O
+ #LIBS = -ltermlib
+ 
+ # SCO Xenix (NOT TESTED YET)
+ #
+ #MACHINE = -DSYSV_UNIX -DSCO
+ #CC=cc -O
+ #LIBS = -ltermlib
+ 
+ # GCC on SCO 3.2 (TESTED by jos@oce.nl)
+ # cc works too.
+ #
+ #MACHINE = -DSYSV_UNIX -UM_XENIX -DSCO
+ #CC=gcc -O -Wall
+ #LIBS = -ltinfo
+ 
+ # GCC on another SCO Unix (NOT TESTED YET)
+ #
+ #MACHINE = -DSYSV_UNIX -UM_XENIX -DSCO -g
+ #CC=gcc -O6 -fpcc-struct-return -fwritable-strings
+ #LIBS = -ltermlib -lmalloc
+ 
+ # Dynix with gcc (NOT TESTED YET)
+ #
+ #MACHINE = -DSYSV_UNIX
+ #CC=gcc -O -Wall -traditional
+ #LIBS = -ltermlib
+ 
+ # SOLARIS with X11 anc cc (TESTED)
+ #
+ #MACHINE = -DSYSV_UNIX -DSOLARIS -DTERMINFO -DUSE_X11
+ #CC=cc -O -Xa -v -R$(X11LIBDIR) -L$(X11LIBDIR) -I$(X11INCDIR)
+ #LIBS = -ltermlib -lX11
+ 
+ # SOLARIS with X11 and gcc (TESTED with SOLARIS 2.3 and gcc 2.5.8)
+ #
+ #MACHINE = -DSYSV_UNIX -DSOLARIS -DTERMINFO -DUSE_X11
+ #CC=gcc -O -R$(X11LIBDIR) -L$(X11LIBDIR) -I$(X11INCDIR)
+ #LIBS = -ltermlib -lX11
+ 
+ # SOLARIS (also works for Esix 4.0.3, SYSV R4?) (TESTED on Sun OS 5.3)
+ #
+ #MACHINE = -DSYSV_UNIX -DSOLARIS -DTERMINFO
+ #CC=cc -O -Xa -v
+ #LIBS = -ltermlib
+ 
+ # UNICOS (NOT TESTED YET)
+ #
+ #MACHINE = -DSYSV_UNIX -DUNICOS
+ #CC=cc -O
+ #LIBS = -ltermlib
+ 
+ # AIX (rs6000) (TESTED)
+ #
+ #MACHINE = -DSYSV_UNIX -DAIX
+ #CC=cc -O
+ #LIBS=-lcur
+ 
+ # UTS2 for Amdahl UTS 2.1.x (disable termcap below) (NOT TESTED YET)
+ #
+ #MACHINE = -DSYSV_UNIX -DUTS2
+ #CC=cc -O
+ #LIBS = -ltermlib -lsocket
+ 
+ # UTS4 for Amdahl UTS 4.x (NOT TESTED YET)
+ #
+ #MACHINE = -DSYSV_UNIX -DUTS4 -Xa
+ #CC=cc -O
+ #LIBS = -ltermlib
+ 
+ # USL for Unix Systems Laboratories (SYSV 4.2) (NOT TESTED YET)
+ #
+ #MACHINE = -DSYSV_UNIX -DUSL
+ #CC=cc -O
+ #LIBS = -ltermlib
+ 
+ # RISCos on MIPS without X11 (TESTED)
+ #
+ #MACHINE = -DSYSV_UNIX -DMIPS
+ #CC=cc -O
+ #LIBS = -ltermlib
+ 
+ # RISCos on MIPS with X11 (TESTED)
+ #
+ #MACHINE=-DSYSV_UNIX -DUSE_LOCALE -DUSE_X11
+ #CC=cc -O -I$(X11INCDIR)
+ #LIBS=-ltermlib -L$(X11LIBDIR) -lX11 -lsun
+ 
+ ################################################
+ ##   no changes required below this line      ##
+ ################################################
+ 
+ CFLAGS = -c $(MACHINE) $(DEFS)
+ 
+ INCL = vim.h globals.h param.h keymap.h macros.h ascii.h term.h msdos.h structs.h proto.h
+ 
+ OBJ =	alloc.o dos_v.o buffer.o charset.o cmdcmds.o cmdline.o \
+ 	csearch.o digraph.o edit.o fileio.o getchar.o help.o \
+ 	linefunc.o main.o mark.o memfile.o memline.o message.o misccmds.o \
+ 	normal.o ops.o param.o quickfix.o regexp.o \
+ 	regsub.o screen.o search.o \
+ 	tag.o term.o undo.o window.o $(TERMLIB) \
+ 	kanji.o track.o fepctrl.o
+ 
+ $(TARGET): $(OBJ) version.c
+ 	$(CC) $(CFLAGS) version.c
+ 	$(CC) -o $(TARGET) $(OBJ) version.o $(LIBS)
+ 
+ debug: $(OBJ) version.c
+ 	$(CC) $(CFLAGS) version.c
+ 	$(CC) -o $(TARGET) -g $(OBJ) version.o $(LIBS)
+ 
+ ctags:
+ 	ctags *.c *.h
+ 
+ install: $(TARGET)
+ 	-mkdir $(BINLOC)
+ 	cp $(TARGET) $(BINLOC)
+ 	chmod $(BINMOD) $(BINLOC)/$(TARGET)
+ 	$(STRIP) $(BINLOC)/$(TARGET)
+ 	-mkdir $(MANLOC)
+ 	cp $(MANFILE) $(MANLOC)
+ 	chmod $(MANMOD) $(MANLOC)/vim.1
+ 	-mkdir $(HELPLOC)
+ 	cp $(HELPFILE) $(HELPLOC)
+ 	chmod $(HELPMOD) $(HELPLOC)/vim.hlp
+ 
+ clean:
+ 	-rm -f $(OBJ) mkcmdtab.o version.o core $(TARGET) mkcmdtab cmdtab.h
+ 	-rm -f *.bak
+ 	-rm -f jptab.h jptab
+ 
+ #use this in case the files have been transported via an MSDOS system
+ 
+ FILES = *.c *.h makefile makefile.* cmdtab.tab proto/*.pro tags
+ 
+ dos2unix:
+ 	-mv arp_prot.h arp_proto.h
+ 	-mv ptx_stdl.h ptx_stdlib.h
+ 	-mv sun_stdl.h sun_stdlib.h
+ 	-mv makefile.dic makefile.dice
+ 	-mv makefile.uni makefile.unix
+ 	-mv makefile.man makefile.manx
+ 	-mv makefile.6sa makefile.6sas
+ 	-mv makefile.5sa makefile.5sas
+ 	for i in $(FILES); do tr -d '\r\032' < $$i > ~tmp~; mv ~tmp~ $$i; echo $$i; done
+ 
+ ###########################################################################
+ 
+ alloc.o:	alloc.c  $(INCL)
+ 	$(CC) $(CFLAGS) alloc.c
+ 
+ dos_v.o:	dos_v.c  $(INCL)
+ 	$(CC) $(CFLAGS) dos_v.c
+ 
+ buffer.o:	buffer.c  $(INCL)
+ 	$(CC) $(CFLAGS) buffer.c
+ 
+ charset.o:	charset.c  $(INCL)
+ 	$(CC) $(CFLAGS) charset.c
+ 
+ cmdcmds.o:	cmdcmds.c  $(INCL)
+ 	$(CC) $(CFLAGS) cmdcmds.c
+ 
+ cmdline.o:	cmdline.c  $(INCL) cmdtab.h ops.h
+ 	$(CC) $(CFLAGS) cmdline.c
+ 
+ csearch.o:	csearch.c  $(INCL)
+ 	$(CC) $(CFLAGS) csearch.c
+ 
+ digraph.o:	digraph.c  $(INCL)
+ 	$(CC) $(CFLAGS) digraph.c
+ 
+ edit.o:	edit.c  $(INCL) ops.h
+ 	$(CC) $(CFLAGS) edit.c
+ 
+ fileio.o:	fileio.c  $(INCL)
+ 	$(CC) $(CFLAGS) fileio.c
+ 
+ getchar.o:	getchar.c  $(INCL)
+ 	$(CC) $(CFLAGS) getchar.c
+ 
+ help.o:	help.c  $(INCL)
+ 	$(CC) $(CFLAGS) help.c
+ 
+ linefunc.o:	linefunc.c  $(INCL)
+ 	$(CC) $(CFLAGS) linefunc.c
+ 
+ main.o:	main.c  $(INCL)
+ 	$(CC) $(CFLAGS) main.c
+ 
+ mark.o:	mark.c  $(INCL)
+ 	$(CC) $(CFLAGS) mark.c
+ 
+ memfile.o:	memfile.c  $(INCL)
+ 	$(CC) $(CFLAGS) memfile.c
+ 
+ memline.o:	memline.c  $(INCL)
+ 	$(CC) $(CFLAGS) memline.c
+ 
+ message.o:	message.c  $(INCL)
+ 	$(CC) $(CFLAGS) message.c
+ 
+ misccmds.o:	misccmds.c  $(INCL)
+ 	$(CC) $(CFLAGS) misccmds.c
+ 
+ normal.o:	normal.c  $(INCL) ops.h
+ 	$(CC) $(CFLAGS) normal.c
+ 
+ ops.o:	ops.c  $(INCL) ops.h
+ 	$(CC) $(CFLAGS) ops.c
+ 
+ param.o:	param.c  $(INCL)
+ 	$(CC) $(CFLAGS) param.c
+ 
+ quickfix.o:	quickfix.c  $(INCL)
+ 	$(CC) $(CFLAGS) quickfix.c
+ 
+ regexp.o:	regexp.c  $(INCL)
+ 	$(CC) $(CFLAGS) regexp.c
+ 
+ regsub.o:	regsub.c  $(INCL)
+ 	$(CC) $(CFLAGS) regsub.c
+ 
+ screen.o:	screen.c  $(INCL)
+ 	$(CC) $(CFLAGS) screen.c
+ 
+ search.o:	search.c  $(INCL) ops.h
+ 	$(CC) $(CFLAGS) search.c
+ 
+ tag.o:	tag.c  $(INCL)
+ 	$(CC) $(CFLAGS) tag.c
+ 
+ term.o:	term.c  $(INCL)
+ 	$(CC) $(CFLAGS) term.c
+ 
+ undo.o:	undo.c  $(INCL)
+ 	$(CC) $(CFLAGS) undo.c
+ 
+ window.o:	window.c  $(INCL)
+ 	$(CC) $(CFLAGS) window.c
+ 
+ cmdtab.h: cmdtab.tab mkcmdtab
+ 	go32 ./mkcmdtab cmdtab.tab cmdtab.h
+ 
+ mkcmdtab: mkcmdtab.o
+ 	$(CC) -o mkcmdtab mkcmdtab.o
+ 
+ mkcmdtab.o: mkcmdtab.c
+ 	$(CC) $(CFLAGS) mkcmdtab.c
+ 
+ kanji.o: kanji.c $(INCL) jptab.h
+ 	$(CC) $(CFLAGS) kanji.c
+ 
+ track.o: track.c $(INCL) jptab.h
+ 	$(CC) $(CFLAGS) track.c
+ 
+ jptab.h: jptab
+ 	go32 ./jptab > jptab.h
+ 
+ jptab: jptab.o
+ 	$(CC) -o jptab jptab.o
+ 
+ jptab.o: jptab.c
+ 	$(CC) $(CFLAGS) jptab.c
diff -crN ../orig/src/makjdos.mak ./src/makjdos.mak
*** ../orig/src/makjdos.mak	Thu Jan 01 09:00:00 1970
--- ./src/makjdos.mak	Sun Jul 04 01:01:12 1999
***************
*** 0 ****
--- 1,160 ----
+ # vi:ts=8:sw=8
+ # Makefile for VIM on MSDOS, using Turbo C
+ #
+ 
+ #>>>>> choose options:
+ ### -DDIGRAPHS		digraph support (at the cost of 1.6 Kbyte code)
+ ### -DCOMPATIBLE	start in vi-compatible mode
+ ### -DNOBACKUP		default is no backup file
+ ### -DDEBUG		output a lot of debugging garbage
+ ### -DTERMCAP		include termcap file support
+ ### -DNO_BUILTIN_TCAPS	do not include builtin termcap entries
+ ###				(use only with -DTERMCAP)
+ ### -DSOME_BUILTIN_TCAPS include most useful builtin termcap entries
+ ###				(use only without -DNO_BUILTIN_TCAPS)
+ ### -DALL_BUILTIN_TCAPS	include all builtin termcap entries
+ ###				(use only without -DNO_BUILTIN_TCAPS)
+ ### -DVIMRC_FILE	name of the .vimrc file in current dir
+ ### -DEXRC_FILE		name of the .exrc file in current dir
+ ### -DSYSVIMRC_FILE	name of the global .vimrc file
+ ### -DSYSEXRC_FILE	name of the global .exrc file
+ ### -DDEFVIMRC_FILE	name of the system-wide .vimrc file
+ ### -DVIM_HLP		name of the help file
+ ### -DWEBB_COMPLETE	include Webb's code for command line completion
+ ### -DWEBB_KEYWORD_COMPL include Webb's code for keyword completion
+ ### -DNOTITLE		'title' option off by default
+ DEFINES = -DKANJI -DTRACK -DFEPCTRL -DCRMARK -DFEXRC -DWEBB_COMPLETE -DWEBB_KEYWORD_COMPL -DTERMCAP -DXARGS -DUSE_GREP -DUSE_OPT #-DCOMPATIBLE
+ TERMLIB = termlib.obj
+ 
+ #>>>>> name of the compiler and linker, name of lib directory
+ CC	= bcc +jvim.cfg
+ LINK	= tlink
+ LIB	= c:\bc4\lib
+ 
+ #>>>>> end of choices
+ ###########################################################################
+ 
+ DBG	= #-v -Ddebug
+ INCL	= vim.h globals.h param.h keymap.h macros.h ascii.h msdos.h structs.h
+ CFLAGS	= $(DBG) -ml -O1 -DMSDOS $(DEFINES)
+ 
+ OBJ =	alloc.obj dos_v.obj buffer.obj charset.obj cmdcmds.obj cmdline.obj \
+ 	csearch.obj digraph.obj edit.obj fileio.obj getchar.obj help.obj \
+ 	linefunc.obj main.obj mark.obj memfile.obj memline.obj message.obj \
+ 	misccmds.obj normal.obj ops.obj param.obj quickfix.obj regexp.obj \
+ 	regsub.obj screen.obj search.obj \
+ 	tag.obj term.obj undo.obj window.obj $(TERMLIB) \
+ 	kanji.obj fepctrl.obj track.obj xargs.obj
+ 
+ .c.obj:
+ 	$(CC) -c $&.c
+ 
+ .c.exe:
+ 	$(CC) @&&!
+ $(CFLAGS) $&.c
+ !
+ 
+ ###########################################################################
+ 
+ vim.exe: jvim.cfg $(OBJ) version.obj
+ 	$(CC) @&&!
+ -ml $(DBG) -evim.exe $(OBJ) version.obj
+ !
+ 
+ ctags:
+ 	command /c ctags *.c *.h
+ 
+ clean:
+ 	del *.obj
+ 	del *.exe
+ 	del *.res
+ 	del *.tr
+ 	del *.td
+ 	del *.tr2
+ 	del *.td2
+ 	del *.o
+ 	del vim
+ 	del jptab
+ 	del mkcmdtab
+ 	del *.@@@
+ 	del *.com
+ 	del *.lzh
+ 
+ update:
+ 	make -f makjdos.mak clean
+ 	lha u -rx d:\usr\backup.src\vim3jp.lzh *.*
+ 
+ lzh:
+ 	lha u -rx jv3pc12.lzh vim.exe doc.j\*.* doc.e\*.*
+ 	lha d vim3j12.lzh doc.j\readme.doc
+ 	lha u vim3j12.lzh doc.j\readme.doc
+ 
+ addcr:	addcr.c
+ 	$(CC) addcr.c
+ 	command /c addcr.bat
+ 
+ ###########################################################################
+ GREPOBJ = grep.obj alloc.obj charset.obj kanji.obj xargs.obj regexp.obj regsub.obj
+ 
+ grep.exe: $(GREPOBJ)
+ 	$(CC) @&&!
+ -ml $(DBG) -egrep.exe $(GREPOBJ)
+ !
+ 
+ grep.obj:	grep/grep.c $(INCL)
+ 	$(CC) @&&!
+ $(CFLAGS) -c grep/grep.c
+ !
+ 
+ ###########################################################################
+ 
+ alloc.obj:	alloc.c  $(INCL)
+ dos_v.obj:	dos_v.c  $(INCL) msdos.h
+ msdos.obj:	msdos.c  $(INCL) msdos.h
+ buffer.obj:	buffer.c  $(INCL)
+ charset.obj:	charset.c  $(INCL)
+ cmdcmds.obj:	cmdcmds.c  $(INCL)
+ cmdline.obj:	cmdline.c  $(INCL) cmdtab.h
+ csearch.obj:	csearch.c  $(INCL)
+ digraph.obj:	digraph.c  $(INCL)
+ edit.obj:	edit.c  $(INCL)
+ fileio.obj:	fileio.c  $(INCL) kanji.h
+ getchar.obj:	getchar.c  $(INCL)
+ help.obj:	help.c  $(INCL)
+ linefunc.obj:	linefunc.c  $(INCL)
+ main.obj:	main.c  $(INCL)
+ mark.obj:	mark.c  $(INCL)
+ memfile.obj:	memfile.c  $(INCL)
+ memline.obj:	memline.c  $(INCL)
+ message.obj:	message.c  $(INCL)
+ misccmds.obj:	misccmds.c  $(INCL)
+ normal.obj:	normal.c  $(INCL) ops.h
+ ops.obj:	ops.c  $(INCL) ops.h
+ param.obj:	param.c  $(INCL)
+ quickfix.obj:	quickfix.c  $(INCL)
+ regexp.obj:	regexp.c  $(INCL)
+ regsub.obj:	regsub.c  $(INCL)
+ screen.obj:	screen.c  $(INCL) kanji.h
+ search.obj:	search.c  $(INCL)
+ tag.obj:	tag.c  $(INCL)
+ term.obj:	term.c  $(INCL) term.h
+ undo.obj:	undo.c  $(INCL)
+ window.obj:	window.c  $(INCL)
+ kanji.obj:	kanji.c  $(INCL) jptab.h kanji.h
+ fepctrl.obj:	fepctrl.c  $(INCL)
+ track.obj:	track.c  $(INCL) jptab.h kanji.h
+ mkcmdtab.exe:	mkcmdtab.c
+ jptab.exe:	jptab.c
+ 
+ cmdtab.h: cmdtab.tab mkcmdtab.c
+ 	$(CC) mkcmdtab.c
+ 	mkcmdtab cmdtab.tab cmdtab.h
+ 
+ jptab.h: jptab.c
+ 	$(CC) jptab.c
+ 	jptab.exe > jptab.h
+ 
+ jvim.cfg: makjdos.mak
+   copy &&|
+ $(CFLAGS)
+ | jvim.cfg
diff -crN ../orig/src/makjnt.mak ./src/makjnt.mak
*** ../orig/src/makjnt.mak	Thu Jan 01 09:00:00 1970
--- ./src/makjnt.mak	Wed Dec 15 20:37:48 1999
***************
*** 0 ****
--- 1,264 ----
+ # vi:ts=8:sw=8
+ # Makefile for VIM on WINNT, using MS SDK
+ #
+ NODEBUG=1
+ TARGETOS=WIN95
+ !include <ntwin32.mak>
+ ccommon= /O2 /Ox /GA
+ optlibs= user32.lib shell32.lib winmm.lib comctl32.lib
+ 
+ #>>>>> choose options:
+ ### -DDIGRAPHS		digraph support (at the cost of 1.6 Kbyte code)
+ ### -DCOMPATIBLE	start in vi-compatible mode
+ ### -DNOBACKUP		default is no backup file
+ ### -DDEBUG		output a lot of debugging garbage
+ ### -DTERMCAP		include termcap file support
+ ### -DNO_BUILTIN_TCAPS	do not include builtin termcap entries
+ ###				(use only with -DTERMCAP)
+ ### -DSOME_BUILTIN_TCAPS include most useful builtin termcap entries
+ ###				(use only without -DNO_BUILTIN_TCAPS)
+ ### -DALL_BUILTIN_TCAPS	include all builtin termcap entries
+ ###				(use only without -DNO_BUILTIN_TCAPS)
+ ### -DVIMRC_FILE	name of the .vimrc file in current dir
+ ### -DEXRC_FILE		name of the .exrc file in current dir
+ ### -DSYSVIMRC_FILE	name of the global .vimrc file
+ ### -DSYSEXRC_FILE	name of the global .exrc file
+ ### -DDEFVIMRC_FILE	name of the system-wide .vimrc file
+ ### -DVIM_HLP		name of the help file
+ ### -DWEBB_COMPLETE	include Webb's code for command line completion
+ ### -DWEBB_KEYWORD_COMPL include Webb's code for keyword completion
+ ### -DNOTITLE		'title' option off by default
+ 
+ # generic for grep function
+ #
+ GRPOPT  = -DUSE_GREP
+ 
+ # generic for option function
+ #
+ OPTOPT  = -DUSE_OPT
+ 
+ # generic for extend file system function
+ #
+ EXFOPT  = -DUSE_EXFILE
+ EXFOBJ  = exfile.obj lha.obj ftp.obj tar.obj cab.obj zip.obj
+ 
+ # generic for BDF font function
+ #
+ BDFOPT  = -DUSE_BDF
+ BDFOBJ  = mw32bdf.obj
+ 
+ # generic for matome function
+ #
+ MTMOPT  = -DUSE_MATOME
+ MTMOBJ  = matome.obj
+ 
+ DEFINES	= -DKANJI -DTRACK -DFEPCTRL -DCRMARK -DFEXRC -DNT106KEY -DWEBB_COMPLETE -DWEBB_KEYWORD_COMPL -DXARGS -DTERMCAP -DWIN32 $(GRPOPT) $(OPTOPT) $(EXFOPT) $(BDFOPT) $(MTMOPT)
+ 
+ #>>>>> name of the compiler and linker, name of lib directory
+ CC	= cl -nologo
+ LINK	= cl
+ LIB	= c:\MSdev\vc\lib
+ DBG	= #-v
+ CFLAGS	= -I. -Ibdf -Iexfile -Iinc -DMSDOS -DNT -DUCODE $(DEFINES) $(DBG) $(cflags) $(cdebug) $(cvarsmt)
+ 
+ ### MSDOS,NT,KANJI,TRACK,FEPCTRL,CRMARK,FEXRC,NT106KEY,WEBB_COMPLETE,WEBB_KEYWORD_COMPL,XARGS,TERMCAP,WIN32
+ #>>>>> end of choices
+ ###########################################################################
+ INCL =	vim.h globals.h param.h keymap.h macros.h ascii.h msdos.h structs.h
+ OBJ =	alloc.obj winjnt.obj buffer.obj charset.obj cmdcmds.obj cmdline.obj \
+ 	csearch.obj digraph.obj edit.obj fileio.obj getchar.obj help.obj \
+ 	linefunc.obj main.obj mark.obj memfile.obj memline.obj message.obj \
+ 	misccmds.obj normal.obj ops.obj param.obj quickfix.obj regexp.obj \
+ 	regsub.obj screen.obj search.obj tag.obj term.obj undo.obj window.obj \
+ 	termlib.obj kanji.obj fepnt.obj track.obj xargs.obj \
+ 	$(GRPOBJ) $(OPTOBJ) $(EXFOBJ) $(BDFOBJ) $(MTMOBJ)
+ 
+ ###########################################################################
+ vim32.exe: $(OBJ) version.obj vim32.res
+ 	$(link) $(linkdebug) $(conlflags) -out:vim32.exe $(OBJ) version.obj vim32.res $(guilibsmt)
+         del version.obj
+ 
+ vim32w.exe: $(OBJ) version.obj vim32.res
+ 	$(link) $(linkdebug) $(guiflags) -out:vim32w.exe $(OBJ) version.obj vim32.res $(guilibsmt)
+ 
+ vim32s.exe: vim32s\vim32s.c
+ 	del *.obj
+ 	nmake -f vim32s\mak32s.mak
+ 
+ clip.exe: clip\clip.c
+ 	del *.obj
+ 	nmake -f clip\clip.mak
+ 
+ all: vim32w.exe vim32.exe grep.exe vim32s.exe clip.exe
+ 
+ clean:
+ 	del *.obj
+ 	del *.exe
+ 	del *.res
+ 	del *.tr
+ 	del *.td
+ 	del *.tr2
+ 	del *.td2
+ 	del *.aps
+ 	del *.o
+ 	del vim
+ 	del jptab
+ 	del mkcmdtab
+ 	del tags
+ 	del *.@@@
+ 	del *.com
+ 	del *.lzh
+ 	del *.wup
+ 
+ update:
+ 	nmake -f makjnt.mak clean
+ 	lha u -rx d:\usr\backup.src\vim3jp.lzh *.*
+ 
+ wsp:
+ 	wsp -O vim32.exe vim32w.exe vim32.wup
+ 	wsp -S vim32.wup vim32w.com
+ 	del vim32.wup
+ 
+ lzh:
+ 	nmake -f makjnt.mak wsp
+ 	lha u -rx vim3j20.lzh vim32.exe vim32w.com vim32s.exe grep.exe clip.exe
+ 	lha u -rx vim3j20.lzh doc.j\*.* doc.e\*.*
+ 	lha d vim3j20.lzh doc.j\readme.doc
+ 	lha d vim3j20.lzh doc.j\readme.1st
+ 	lha d vim3j20.lzh doc.j\history.txt
+ 	lha d vim3j20.lzh doc.j\fj.txt
+ 	lha u vim3j20.lzh doc.j\readme.doc
+ 	lha u vim3j20.lzh vim32s\vim32s.ini
+ 
+ beta:
+ 	nmake -f makjnt.mak wsp
+ 	lha u -rx vim3j20.lzh vim32.exe vim32w.com vim32s.exe grep.exe clip.exe
+ 	lha u vim3j20.lzh bench\*.*
+ 	lha u vim3j20.lzh doc.j\readme.doc
+ 	lha u vim3j20.lzh doc.j\history.txt
+ 	lha u vim3j20.lzh doc.j\vim.hlp
+ 	lha u vim3j20.lzh doc.j\vim-jp.htm
+ 	lha u vim3j20.lzh doc.j\vim32.ini
+ 	lha u vim3j20.lzh vim32s\vim32s.ini
+ 
+ patch:
+ 	del ..\jvim.diff
+ 	del jvim.diff
+ 	del jvim.tar.gz
+ 	del jvim.diff.bak
+ 	del readme.1st
+ 	del readme.1st.bak
+ 	renlow -f ../* ../*/* ../*/*/* ../*/*/*/*
+ 	del doc.j\history.txt
+ 	copy doc.j\readme.1st ..
+ 	del doc.j\readme.1st
+ 	diff -crN ../orig . >> ..\jvim.diff
+ 
+ patchm:
+ 	copy ..\jvim.diff .
+ 	copy ..\readme.1st .
+ 	crlf jvim.diff readme.1st
+ 	tar32 cvf jvim.tar readme.1st jvim.diff src/vim.ico
+ 	gzip jvim.tar
+ 
+ install:
+ 	nmake -f makjnt.mak all
+ 	copy vim32w.exe \usr\com\vim32.exe
+ 	copy vim32s.exe \usr\com\vim32s.exe
+ 	copy grep.exe \usr\com
+ 	copy clip.exe \usr\com
+ 
+ addcr:	addcr.c
+ 	$(CC) addcr.c
+ 	command /c addcr.bat
+ 
+ ###########################################################################
+ ctags.exe:	ctags/ctags.c xargs.c
+ 	cl -DWIN32 ctags/ctags.c xargs.c
+ 
+ ###########################################################################
+ GREPOBJS = grep.obj alloc.obj charset.obj kanji.obj xargs.obj regexp.obj regsub.obj $(EXFOBJ)
+ 
+ grep.exe: $(GREPOBJS) grep.res
+ 	$(link) $(linkdebug) $(conlflags) -out:grep.exe $(GREPOBJS) grep.res $(guilibsmt)
+ 	del grep.obj
+ 
+ grep.obj: grep/grep.c $(INCL)
+ 	$(CC) -I. $(CFLAGS) -c grep\grep.c
+ 
+ grep.res: grep/grep.rc
+ 	rc /fo grep.res grep/grep.rc
+ 
+ ###########################################################################
+ alloc.obj:	alloc.c  $(INCL)
+ winjnt.obj:	winjnt.c  $(INCL)
+ buffer.obj:	buffer.c  $(INCL)
+ charset.obj:	charset.c  $(INCL)
+ cmdcmds.obj:	cmdcmds.c  $(INCL)
+ cmdline.obj:	cmdline.c  $(INCL) cmdtab.h
+ csearch.obj:	csearch.c  $(INCL)
+ digraph.obj:	digraph.c  $(INCL)
+ edit.obj:	edit.c  $(INCL)
+ fileio.obj:	fileio.c  $(INCL)
+ getchar.obj:	getchar.c  $(INCL)
+ help.obj:	help.c  $(INCL)
+ linefunc.obj:	linefunc.c  $(INCL)
+ main.obj:	main.c  $(INCL)
+ mark.obj:	mark.c  $(INCL)
+ memfile.obj:	memfile.c  $(INCL)
+ memline.obj:	memline.c  $(INCL)
+ message.obj:	message.c  $(INCL)
+ misccmds.obj:	misccmds.c  $(INCL)
+ normal.obj:	normal.c  $(INCL) ops.h
+ ops.obj:	ops.c  $(INCL) ops.h
+ param.obj:	param.c  $(INCL)
+ quickfix.obj:	quickfix.c  $(INCL)
+ regexp.obj:	regexp.c  $(INCL)
+ regsub.obj:	regsub.c  $(INCL)
+ screen.obj:	screen.c  $(INCL)
+ search.obj:	search.c  $(INCL)
+ tag.obj:	tag.c  $(INCL)
+ term.obj:	term.c  $(INCL) term.h
+ undo.obj:	undo.c  $(INCL)
+ window.obj:	window.c  $(INCL)
+ kanji.obj:	kanji.c  $(INCL) jptab.h
+ track.obj:	track.c  $(INCL) jptab.h
+ fepnt.obj:	fepnt.c  $(INCL)
+ mkcmdtab.exe: 	mkcmdtab.c
+ jptab.exe: 	jptab.c
+ version.obj:	version.c  $(INCL)
+ 
+ exfile.obj:	exfile\exfile.c
+ 	$(CC) $(CFLAGS) -c exfile\exfile.c
+ 
+ lha.obj:	exfile\lha.c
+ 	$(CC) $(CFLAGS) -c exfile\lha.c
+ 
+ ftp.obj:	exfile\ftp.c
+ 	$(CC) $(CFLAGS) -c exfile\ftp.c
+ 
+ tar.obj:	exfile\tar.c
+ 	$(CC) $(CFLAGS) -c exfile\tar.c
+ 
+ cab.obj:	exfile\cab.c
+ 	$(CC) $(CFLAGS) -c exfile\cab.c
+ 
+ zip.obj:	exfile\zip.c
+ 	$(CC) $(CFLAGS) -c exfile\zip.c
+ 
+ matome.obj:	exfile\matome.c
+ 	$(CC) $(CFLAGS) -c exfile\matome.c
+ 
+ mw32bdf.obj:	bdf\mw32bdf.c
+ 	$(CC) $(CFLAGS) -c bdf\mw32bdf.c
+ 
+ jptab.h: jptab.c
+ 	$(CC) $(CFLAGS) jptab.c
+ 	jptab.exe > jptab.h
+ 
+ cmdtab.h: cmdtab.tab mkcmdtab.c
+ 	$(CC) $(CFLAGS) mkcmdtab.c
+ 	mkcmdtab cmdtab.tab cmdtab.h
+ 
+ vim32.res: vim32.rc vim.ico
+ 	rc $(BDFOPT) vim32.rc
diff -crN ../orig/src/makjunix.mak ./src/makjunix.mak
*** ../orig/src/makjunix.mak	Thu Jan 01 09:00:00 1970
--- ./src/makjunix.mak	Fri Jul 30 06:53:44 1999
***************
*** 0 ****
--- 1,626 ----
+ # vi:ts=8:sw=8
+ # Makefile for Vim on Unix
+ #
+ 
+ # Note: You MUST uncomment three hardware dependend lines!
+ 
+ # There are three types of defines:
+ #
+ # 1. configuration dependend
+ #	Used for "make install". Adjust the path names and protections
+ #	to your desire. Also defines the root for the X11 files (not required).
+ #
+ # 2. various choices
+ #	Can be changed to match your compiler or your preferences (not
+ #	required).
+ #
+ # 3. hardware dependend
+ #	If you machine is in the list, remove one '#' in front of the defines
+ #	following it. Otherwise: Find a machine that is similar and change the
+ #	defines to make it work. Normally you can just try and see what error
+ #	messages you get. (REQUIRED).
+ 
+ # The following systems have entries below. They have been tested and should
+ # work without modification. But later code changes may cause small problems.
+ # There are entries for other systems, but these have not been tested recently.
+ 
+ #system:		tested configurations:		tested by:
+ 
+ #Sun 4.1.x		cc	gcc	X11	no X11	(jw) (mool)
+ #FreeBSD		cc	gcc	X11	no X11	(mool)
+ #linux 1.0		cc		X11
+ #Linux 1.0.9			gcc		no X11	(jw)
+ #ULTRIX 4.2A on MIPS	cc	gcc		no X11	(mool)
+ #HPUX			cc	gcc	X11	no X11	(jw) (mool)
+ #irix 4.0.5H		cc		X11
+ #IRIX 4.0  SGI		cc		X11		(jw)
+ #SINIX-L 5.41		cc			no X11
+ #MOT188			cc			no X11
+ #Sequent/ptx 1.3	cc			no X11	(jw)
+ #osf1			cc			no X11	(jw)
+ #Unisys 6035		cc			no X11
+ #SCO 3.2		cc	gcc		no X11	jos@oce.nl
+ #Solaris		cc		X11
+ #Solaris/Sun OS 5.3	cc			no X11	(jw)
+ #AIX (rs6000)		cc			no X11	(jw)
+ #RISCos on MIPS		cc		X11	no X11	(jw)
+ 
+ # configurations marked by (jw) have been tested by Juergen Weigert:
+ #    jnweiger@uni-erlangen.de
+ 
+ #
+ # PART 1: configuration dependend
+ #
+ 
+ ### root directory for X11 files (unless overruled in hardware-dependend part)
+ ### Unfortunately there is no standard for these, everybody puts them
+ ### somewhere else
+ #X11LIBDIR = /usr/openwin/lib
+ #X11INCDIR = /usr/openwin/include
+ ### for some hpux systems:
+ #X11LIBDIR = /usr/lib/X11R5
+ #X11INCDIR = /usr/include/X11R5
+ ###
+ #X11LIBDIR = /usr/X11R6/lib
+ #X11INCDIR = /usr/X11R6/include
+ ###
+ #X11LIBDIR = /usr/X386/lib
+ #X11INCDIR = /usr/X386/include
+ ###
+ #X11LIBDIR = /usr/X11/lib
+ #X11INCDIR = /usr/X11/include
+ 
+ 
+ ### Prefix for location of files
+ PREFIX = /usr/local
+ 
+ ### Location of binary
+ BINLOC = $(PREFIX)/bin
+ 
+ ### Name of target
+ TARGET = vim
+ 
+ ### Location of man page
+ MANLOC = $(PREFIX)/man/man1
+ 
+ ### Location of help file
+ HELPLOC = $(PREFIX)/lib
+ 
+ ### Program to run on installed binary
+ STRIP = strip
+ 
+ ### Permissions for vim binary
+ BINMOD = 755
+ 
+ ### Permissions for man page
+ MANMOD = 644
+ 
+ ### Permissions for help file
+ HELPMOD = 644
+ 
+ MANFILE = ../doc/vim.1
+ 
+ HELPFILE = ../doc/vim.hlp
+ 
+ #
+ # PART 2: various choices
+ #
+ 
+ ### -DDIGRAPHS		digraph support
+ ### -DNO_FREE_NULL	do not call free() with a null pointer
+ ### -DCOMPATIBLE	start in vi-compatible mode
+ ### -DNOBACKUP		default is no backup file
+ ### -DDEBUG		output a lot of debugging garbage
+ ### -DSTRNCASECMP	use strncasecmp() instead of internal function
+ ### -DUSE_LOCALE	use setlocale() to change ctype() and others
+ ### -DTERMCAP		full termcap/terminfo file support
+ ### -DTERMINFO		use terminfo instead of termcap entries for builtin terms
+ ### -DNO_BUILTIN_TCAPS	do not include builtin termcap entries
+ ###				(use only with -DTERMCAP)
+ ### -DSOME_BUILTIN_TCAPS include most useful builtin termcap entries
+ ###				(use only without -DNO_BUILTIN_TCAPS)
+ ### -DALL_BUILTIN_TCAPS	include all builtin termcap entries
+ ###				(use only without -DNO_BUILTIN_TCAPS)
+ ### -DMAXNAMLEN 31	maximum length of a file name (if not defined in sys/dir.h)
+ ### -Dconst=		for compilers that don't have type const
+ ### -DVIMRC_FILE=name		name of the .vimrc file in current dir
+ ### -DEXRC_FILE=name		name of the .exrc file in current dir
+ ### -DSYSVIMRC_FILE=name	name of the global .vimrc file
+ ### -DSYSEXRC_FILE=name		name of the global .exrc file
+ ### -DDEFVIMRC_FILE=name	name of the system-wide .vimrc file
+ ### -DVIM_HLP=name		name of the help file
+ ### -DUSE_SYSTEM	use system() instead of fork/exec for starting a shell
+ ### -DVIM_ISSPACE	use when isspace() can't handle meta chars
+ ### -DNOLIMITS		limits.h does not exist
+ ### -DNOSTDLIB		stdlib.h does not exist
+ ### -DUSE_X11		include code for xterm title saving
+ ### -DWEBB_COMPLETE	include Webb's code for command line completion
+ ### -DWEBB_KEYWORD_COMPL include Webb's code for keyword completion
+ ### -DNOTITLE		'title' option off by default
+ 
+ #
+ # PART 2-2: Select Japanese Input System dependend
+ #
+ 
+ # generic for FEP Sequence
+ #
+ #FEPOPT  = -DFEPCTRL
+ #FEPLIBS =
+ #FEPOBJS = fepseq.o
+ 
+ # generic for BOW IME control Sequence
+ #
+ #FEPOPT  = -DFEPCTRL -DJP_DEF=\"SSS\"
+ #FEPLIBS =
+ #FEPOBJS = fepbow.o
+ 
+ # generic for CANNA input system
+ #
+ #FEPOPT  = -DFEPCTRL -DCANNA
+ #FEPLIBS = -lcanna
+ #FEPOBJS = fepcanna.o
+ 
+ # generic for ONEW input system
+ #
+ #FEPOPT  = -DFEPCTRL -DONEW
+ #FEPLIBS = -lonew -lcanna
+ #FEPOBJS = feponew.o
+ 
+ DEFS = -DDIGRAPHS -DTERMCAP -DSOME_BUILTIN_TCAPS -DNO_FREE_NULL -DVIM_ISSPACE \
+ 		-DWEBB_COMPLETE -DWEBB_KEYWORD_COMPL \
+ 		-DVIM_HLP=\"$(HELPLOC)/vim.hlp\" \
+ 		-DKANJI -DUCODE -DTRACK -DCRMARK -DFEXRC -DUSE_GREP -DUSE_OPT $(FEPOPT)
+ 
+ #
+ # PART 3: hardware dependend
+ #
+ 
+ ### CC entry:      name and arguments for the compiler (also for linking)
+ ### MACHINE entry: defines used for compiling (not for linking)
+ ### LIBS:          defines used for linking
+ 
+ # generic for Sun, NeXT, POSIX and SYSV R4 (?) (TESTED for Sun 4.1.x)
+ # standard cc with optimizer
+ #
+ #MACHINE = -DBSD_UNIX -DUSE_LOCALE -DUSE_X11
+ #CC=cc -O -I$(X11INCDIR)
+ #LIBS = -ltermlib -L$(X11LIBDIR) -lX11
+ 
+ # generic for Sun, FreeBSD, NetBSD, NeXT, POSIX and SYSV R4 (?) without x11 code
+ #	(TESTED for Sun 4.1.x and FreeBSD)
+ # standard cc with optimizer
+ #
+ #MACHINE = -DBSD_UNIX -DUSE_LOCALE
+ #CC=cc -O
+ #LIBS = -ltermlib
+ 
+ # FreeBSD and NetBSD with Xfree (TESTED for FreeBSD)
+ # standard cc with optimizer
+ #
+ #MACHINE = -DBSD_UNIX -DUSE_LOCALE -DUSE_X11
+ #CC=cc -O -I$(X11INCDIR)
+ #LIBS = -ltermlib -L$(X11LIBDIR) -lX11
+ 
+ # FreeBSD and NetBSD with Xfree (TESTED for FreeBSD)
+ # gcc with optimizer
+ #
+ #MACHINE = -DBSD_UNIX -DUSE_LOCALE -DUSE_X11
+ #CC=gcc -O -Wall -traditional -Dconst= -I$(X11INCDIR)
+ #LIBS = -ltermlib -L$(X11LIBDIR) -lX11
+ 
+ # like generic, but with termcap, for Linux, NeXT and others (NOT TESTED YET)
+ # standard cc with optimizer
+ #
+ #MACHINE = -DBSD_UNIX
+ #CC=cc -O
+ #LIBS = -ltermcap
+ 
+ # Linux 2.0.x/2.2.x (TESTED Debian GNU/Linux 2.0/2.1)
+ #MACHINE = -DBSD_UNIX
+ #CC=gcc -O
+ #LIBS = -lncurses
+ 
+ # cygwin (TESTED B20.1 coolview patch)
+ #
+ #MACHINE = -DBSD_UNIX
+ #CC=gcc -O
+ #LIBS = -lncurses
+ 
+ # linux 1.0 with X11 (TESTED)
+ #
+ #MACHINE = -DBSD_UNIX -DUSE_LOCALE -DUSE_X11
+ #CC=cc -O -I$(X11INCDIR)
+ #LIBS = -ltermcap -L$(X11LIBDIR) -lX11
+ 
+ # like generic, but with debugging (NOT TESTED YET)
+ #
+ #MACHINE = -DBSD_UNIX -g
+ #CC=cc
+ #LIBS = -ltermlib
+ 
+ # like generic, but with gcc and X11 (TESTED on Sun 4.1.x)
+ #
+ #MACHINE = -DBSD_UNIX -DUSE_LOCALE -DUSE_X11
+ #CC=gcc -O -Wall -traditional -Dconst= -L$(X11LIBDIR) -I$(X11INCDIR)
+ #LIBS = -ltermlib -lX11
+ 
+ # like generic, but with gcc, without X11 (TESTED on ULTRIX 4.2A on MIPS)
+ #
+ #MACHINE = -DBSD_UNIX -DUSE_LOCALE
+ #CC=gcc -O -Wall -traditional -Dconst=
+ #LIBS = -ltermlib
+ 
+ # like generic, but with gcc 2.5.8 (TESTED on Sun 4.1.3_U1)
+ #
+ #MACHINE = -DBSD_UNIX -DUSE_LOCALE
+ #CC=gcc -O1000
+ #LIBS = -ltermlib
+ 
+ # standard cc with optimizer for ULTRIX 4.2A on MIPS (ultrix defined) (TESTED)
+ #
+ #MACHINE = -DBSD_UNIX -DUSE_LOCALE
+ #CC=cc -O -Olimit 1500
+ #LIBS = -ltermlib
+ 
+ # GCC (2.2.2d) on Linux (1.0.9) (TESTED)
+ #
+ #MACHINE = -DBSD_UNIX
+ #CC=gcc -O6 -Wall
+ #LIBS = -ltermcap
+ 
+ # Apollo DOMAIN (with SYSTYPE = bsd4.3) (NOT TESTED YET)
+ #
+ #MACHINE = -DBSD_UNIX -DDOMAIN
+ #CC=cc -O -A systype,bsd4.3
+ #LIBS = -ltermlib
+ 
+ # HPUX with X11 (TESTED) (hpux is defined)
+ #
+ #MACHINE = -DBSD_UNIX -DTERMINFO -DUSE_X11
+ #CC=cc -O -I$(X11INCDIR)
+ #LIBS = -ltermcap -L$(X11LIBDIR) -lX11
+ 
+ # HPUX (TESTED) (hpux is defined)
+ #
+ #MACHINE = -DBSD_UNIX -DTERMINFO
+ #CC=cc -O
+ #LIBS = -ltermcap
+ 
+ # HPUX with gcc (TESTED) (hpux is defined)
+ #
+ #MACHINE = -DBSD_UNIX -DTERMINFO
+ #CC=gcc -O
+ #LIBS = -ltermcap
+ 
+ # hpux 9.01 (with termlib instead of termcap) (TESTED)
+ # irix 4.0.5H (TESTED)
+ #
+ #MACHINE = -DBSD_UNIX -DUSE_LOCALE -DUSE_X11
+ #CC=cc -O -I$(X11INCDIR)
+ #LIBS = -ltermlib -L$(X11LIBDIR) -lX11
+ 
+ # IRIX 4.0 (Silicon Graphics Indigo, __sgi will be defined) (TESTED)
+ #
+ #MACHINE = -DBSD_UNIX -DUSE_X11                         
+ #CC=cc -O -Olimit 1500
+ #LIBS = -ltermlib -lX11 -lmalloc -lc_s
+ 
+ # Convex (NOT TESTED YET)
+ #
+ #MACHINE = -DBSD_UNIX -DCONVEX
+ #CC=cc -O
+ #LIBS = -ltermcap
+ 
+ # generic SYSV_UNIX for Dynix/PTX and SYSV R3 (and R4?) (TESTED on SINIX-L 5.41)
+ # (TESTED on MOT188) (TESTED on Sequent/ptx 1.3) (TESTED on osf1)
+ # First try the line with locale. If this gives error messages try the other one.
+ #
+ #MACHINE = -DSYSV_UNIX -DUSE_LOCALE
+ #MACHINE = -DSYSV_UNIX
+ #CC=cc -O
+ #LIBS = -ltermlib
+ 
+ # generic SYSV_UNIX with LOCALE (TESTED on Unisys 6035)
+ #
+ #MACHINE = -DSYSV_UNIX -DUSE_LOCALE -DUNISYS
+ #CC=cc -O
+ #LIBS = -ltermlib
+ 
+ # SCO Xenix (NOT TESTED YET)
+ #
+ #MACHINE = -DSYSV_UNIX -DSCO
+ #CC=cc -O
+ #LIBS = -ltermlib
+ 
+ # GCC on SCO 3.2 (TESTED by jos@oce.nl)
+ # cc works too.
+ #
+ #MACHINE = -DSYSV_UNIX -UM_XENIX -DSCO
+ #CC=gcc -O -Wall
+ #LIBS = -ltinfo
+ 
+ # GCC on another SCO Unix (NOT TESTED YET)
+ #
+ #MACHINE = -DSYSV_UNIX -UM_XENIX -DSCO -g
+ #CC=gcc -O6 -fpcc-struct-return -fwritable-strings
+ #LIBS = -ltermlib -lmalloc
+ 
+ # Dynix with gcc (NOT TESTED YET)
+ #
+ #MACHINE = -DSYSV_UNIX
+ #CC=gcc -O -Wall -traditional
+ #LIBS = -ltermlib
+ 
+ # SOLARIS with X11 anc cc (TESTED)
+ #
+ #MACHINE = -DSYSV_UNIX -DSOLARIS -DTERMINFO -DUSE_X11
+ #CC=cc -O -Xa -v -R$(X11LIBDIR) -L$(X11LIBDIR) -I$(X11INCDIR)
+ #LIBS = -ltermlib -lX11
+ 
+ # SOLARIS with X11 and gcc (TESTED with SOLARIS 2.3 and gcc 2.5.8)
+ #
+ #MACHINE = -DSYSV_UNIX -DSOLARIS -DTERMINFO -DUSE_X11
+ #CC=gcc -O -R$(X11LIBDIR) -L$(X11LIBDIR) -I$(X11INCDIR)
+ #LIBS = -ltermlib -lX11
+ 
+ # SOLARIS (also works for Esix 4.0.3, SYSV R4?) (TESTED on Sun OS 5.3)
+ #
+ #MACHINE = -DSYSV_UNIX -DSOLARIS -DTERMINFO
+ #CC=cc -O -Xa -v
+ #LIBS = -ltermlib
+ 
+ # UNICOS (NOT TESTED YET)
+ #
+ #MACHINE = -DSYSV_UNIX -DUNICOS
+ #CC=cc -O
+ #LIBS = -ltermlib
+ 
+ # AIX (rs6000) (TESTED)
+ #
+ #MACHINE = -DSYSV_UNIX -DAIX
+ #CC=cc -O
+ #LIBS=-lcur
+ 
+ # UTS2 for Amdahl UTS 2.1.x (disable termcap below) (NOT TESTED YET)
+ #
+ #MACHINE = -DSYSV_UNIX -DUTS2
+ #CC=cc -O
+ #LIBS = -ltermlib -lsocket
+ 
+ # UTS4 for Amdahl UTS 4.x (NOT TESTED YET)
+ #
+ #MACHINE = -DSYSV_UNIX -DUTS4 -Xa
+ #CC=cc -O
+ #LIBS = -ltermlib
+ 
+ # USL for Unix Systems Laboratories (SYSV 4.2) (NOT TESTED YET)
+ #
+ #MACHINE = -DSYSV_UNIX -DUSL
+ #CC=cc -O
+ #LIBS = -ltermlib
+ 
+ # RISCos on MIPS without X11 (TESTED)
+ #
+ #MACHINE = -DSYSV_UNIX -DMIPS
+ #CC=cc -O
+ #LIBS = -ltermlib
+ 
+ # RISCos on MIPS with X11 (TESTED)
+ #
+ #MACHINE=-DSYSV_UNIX -DUSE_LOCALE -DUSE_X11
+ #CC=cc -O -I$(X11INCDIR)
+ #LIBS=-ltermlib -L$(X11LIBDIR) -lX11 -lsun
+ 
+ # NEC EWS4800 Series (EWS-UX/V R6.x)
+ #
+ #MACHINE = -DSYSV_UNIX -DSOLARIS -DTERMINFO
+ #CC=cc -O -KOlimit=3000
+ #LIBS = -ltermlib -lsocket -lnsl
+ 
+ 
+ ################################################
+ ##   no changes required below this line      ##
+ ################################################
+ 
+ CFLAGS = -c $(MACHINE) $(DEFS)
+ 
+ INCL = vim.h globals.h param.h keymap.h macros.h ascii.h term.h unix.h structs.h proto.h
+ 
+ OBJ =	alloc.o unix.o buffer.o charset.o cmdcmds.o cmdline.o \
+ 	csearch.o digraph.o edit.o fileio.o getchar.o help.o \
+ 	linefunc.o main.o mark.o memfile.o memline.o message.o misccmds.o \
+ 	normal.o ops.o param.o quickfix.o regexp.o \
+ 	regsub.o screen.o search.o \
+ 	tag.o term.o undo.o window.o $(TERMLIB) kanji.o track.o \
+ 	u2s.o s2u.o $(FEPOBJS)
+ 
+ GOBJ = grep.o alloc.o charset.o kanji.o regexp.o regsub.o u2s.o s2u.o
+ 
+ all: $(TARGET) grep
+ 
+ $(TARGET): $(OBJ) version.c
+ 	$(CC) $(CFLAGS) version.c
+ 	$(CC) -o $(TARGET) $(OBJ) version.o $(LIBS) $(FEPLIBS)
+ 
+ grep: $(GOBJ)
+ 	$(CC) -o grep/grep $(GOBJ) $(LIBS) $(FEPLIBS)
+ 
+ debug: $(OBJ) version.c
+ 	$(CC) $(CFLAGS) version.c
+ 	$(CC) -o $(TARGET) -g $(OBJ) version.o $(LIBS)
+ 
+ ctags:
+ 	ctags *.c *.h
+ 
+ install: $(TARGET)
+ 	-mkdir $(BINLOC)
+ 	cp $(TARGET) $(BINLOC)
+ 	chmod $(BINMOD) $(BINLOC)/$(TARGET)
+ 	$(STRIP) $(BINLOC)/$(TARGET)
+ 	-mkdir $(MANLOC)
+ 	cp $(MANFILE) $(MANLOC)
+ 	chmod $(MANMOD) $(MANLOC)/vim.1
+ 	-mkdir $(HELPLOC)
+ 	cp $(HELPFILE) $(HELPLOC)
+ 	chmod $(HELPMOD) $(HELPLOC)/vim.hlp
+ 
+ clean:
+ 	-rm -f $(OBJ) mkcmdtab.o version.o core $(TARGET) mkcmdtab cmdtab.h
+ 	-rm -f *.bak
+ 	-rm -f $(GOBJ)
+ #	-rm -f jptab.h jptab
+ 
+ #use this in case the files have been transported via an MSDOS system
+ 
+ FILES = *.c *.h makefile makefile.* cmdtab.tab proto/*.pro tags
+ 
+ dos2unix:
+ 	-mv arp_prot.h arp_proto.h
+ 	-mv ptx_stdl.h ptx_stdlib.h
+ 	-mv sun_stdl.h sun_stdlib.h
+ 	-mv makefile.dic makefile.dice
+ 	-mv makefile.uni makefile.unix
+ 	-mv makefile.man makefile.manx
+ 	-mv makefile.6sa makefile.6sas
+ 	-mv makefile.5sa makefile.5sas
+ 	for i in $(FILES); do tr -d '\r\032' < $$i > ~tmp~; mv ~tmp~ $$i; echo $$i; done
+ 
+ ###########################################################################
+ 
+ alloc.o:	alloc.c  $(INCL)
+ 	$(CC) $(CFLAGS) alloc.c
+ 
+ unix.o:	unix.c  $(INCL)
+ 	$(CC) $(CFLAGS) unix.c
+ 
+ buffer.o:	buffer.c  $(INCL)
+ 	$(CC) $(CFLAGS) buffer.c
+ 
+ charset.o:	charset.c  $(INCL)
+ 	$(CC) $(CFLAGS) charset.c
+ 
+ cmdcmds.o:	cmdcmds.c  $(INCL)
+ 	$(CC) $(CFLAGS) cmdcmds.c
+ 
+ cmdline.o:	cmdline.c  $(INCL) cmdtab.h ops.h
+ 	$(CC) $(CFLAGS) cmdline.c
+ 
+ csearch.o:	csearch.c  $(INCL)
+ 	$(CC) $(CFLAGS) csearch.c
+ 
+ digraph.o:	digraph.c  $(INCL)
+ 	$(CC) $(CFLAGS) digraph.c
+ 
+ edit.o:	edit.c  $(INCL) ops.h
+ 	$(CC) $(CFLAGS) edit.c
+ 
+ fileio.o:	fileio.c  $(INCL)
+ 	$(CC) $(CFLAGS) fileio.c
+ 
+ getchar.o:	getchar.c  $(INCL)
+ 	$(CC) $(CFLAGS) getchar.c
+ 
+ help.o:	help.c  $(INCL)
+ 	$(CC) $(CFLAGS) help.c
+ 
+ linefunc.o:	linefunc.c  $(INCL)
+ 	$(CC) $(CFLAGS) linefunc.c
+ 
+ main.o:	main.c  $(INCL)
+ 	$(CC) $(CFLAGS) main.c
+ 
+ mark.o:	mark.c  $(INCL)
+ 	$(CC) $(CFLAGS) mark.c
+ 
+ memfile.o:	memfile.c  $(INCL)
+ 	$(CC) $(CFLAGS) memfile.c
+ 
+ memline.o:	memline.c  $(INCL)
+ 	$(CC) $(CFLAGS) memline.c
+ 
+ message.o:	message.c  $(INCL)
+ 	$(CC) $(CFLAGS) message.c
+ 
+ misccmds.o:	misccmds.c  $(INCL)
+ 	$(CC) $(CFLAGS) misccmds.c
+ 
+ normal.o:	normal.c  $(INCL) ops.h
+ 	$(CC) $(CFLAGS) normal.c
+ 
+ ops.o:	ops.c  $(INCL) ops.h
+ 	$(CC) $(CFLAGS) ops.c
+ 
+ param.o:	param.c  $(INCL)
+ 	$(CC) $(CFLAGS) param.c
+ 
+ quickfix.o:	quickfix.c  $(INCL)
+ 	$(CC) $(CFLAGS) quickfix.c
+ 
+ regexp.o:	regexp.c  $(INCL)
+ 	$(CC) $(CFLAGS) regexp.c
+ 
+ regsub.o:	regsub.c  $(INCL)
+ 	$(CC) $(CFLAGS) regsub.c
+ 
+ screen.o:	screen.c  $(INCL)
+ 	$(CC) $(CFLAGS) screen.c
+ 
+ search.o:	search.c  $(INCL) ops.h
+ 	$(CC) $(CFLAGS) search.c
+ 
+ tag.o:	tag.c  $(INCL)
+ 	$(CC) $(CFLAGS) tag.c
+ 
+ term.o:	term.c  $(INCL)
+ 	$(CC) $(CFLAGS) term.c
+ 
+ undo.o:	undo.c  $(INCL)
+ 	$(CC) $(CFLAGS) undo.c
+ 
+ window.o:	window.c  $(INCL)
+ 	$(CC) $(CFLAGS) window.c
+ 
+ cmdtab.h: cmdtab.tab mkcmdtab
+ 	./mkcmdtab cmdtab.tab cmdtab.h
+ 
+ mkcmdtab: mkcmdtab.o
+ 	$(CC) -o mkcmdtab mkcmdtab.o
+ 
+ mkcmdtab.o: mkcmdtab.c
+ 	$(CC) $(CFLAGS) mkcmdtab.c
+ 
+ kanji.o: kanji.c $(INCL) jptab.h
+ 	$(CC) $(CFLAGS) kanji.c
+ 
+ s2u.o: s2u.c
+ 	$(CC) $(CFLAGS) s2u.c
+ 
+ u2s.o: u2s.c
+ 	$(CC) $(CFLAGS) u2s.c
+ 
+ track.o: track.c $(INCL) jptab.h
+ 	$(CC) $(CFLAGS) track.c
+ 
+ #jptab.h: jptab
+ #	./jptab > jptab.h
+ 
+ jptab: jptab.o
+ 	$(CC) -o jptab jptab.o
+ 
+ jptab.o: jptab.c
+ 	$(CC) $(CFLAGS) jptab.c
+ 
+ fepseq.o: fepseq.c
+ 	$(CC) $(CFLAGS) fepseq.c
+ 
+ fepbow.o: fepbow.c
+ 	$(CC) $(CFLAGS) fepbow.c
+ 
+ fepcanna.o: fepcanna.c
+ 	$(CC) $(CFLAGS) -I/usr/local/canna/include fepcanna.c
+ 
+ feponew.o: feponew.c
+ 	$(CC) $(CFLAGS) feponew.c
+ 
+ grep.o: grep/grep.c
+ 	$(CC) $(CFLAGS) -I. grep/grep.c
diff -crN ../orig/src/mark.c ./src/mark.c
*** ../orig/src/mark.c	Wed Aug 10 13:54:10 1994
--- ./src/mark.c	Sat May 10 10:52:14 1997
***************
*** 259,266 ****
--- 259,268 ----
  	if (fmark->fnum != curbuf->b_fnum)				/* not current file */
  	{
  		name = buflist_nr2name(fmark->fnum);
+ #if 0
  		if (name == NULL)
  			return (char_u *)"-unknown-";
+ #endif
  		return name;
  	}
  	return (char_u *)"-current-";
diff -crN ../orig/src/memfile.c ./src/memfile.c
*** ../orig/src/memfile.c	Wed Aug 10 13:54:10 1994
--- ./src/memfile.c	Fri Dec 10 02:04:36 1999
***************
*** 47,53 ****
  /* 
   * Some systems have the page size in statfs, some in stat
   */
! #if defined(SCO) || defined(_SEQUENT_) || defined(__sgi) || defined(MIPS) || defined(MIPSEB) || defined(m88k)
  # include <sys/types.h>
  # include <sys/statfs.h>
  # define STATFS statfs
--- 47,53 ----
  /* 
   * Some systems have the page size in statfs, some in stat
   */
! #if (defined(SCO) || defined(_SEQUENT_) || defined(__sgi) || defined(MIPS) || defined(MIPSEB) || defined(m88k)) && !defined(sony)
  # include <sys/types.h>
  # include <sys/statfs.h>
  # define STATFS statfs
***************
*** 238,244 ****
--- 238,248 ----
  			EMSG("Close error on swap file");
  	}
  	if (delete && mfp->mf_fname != NULL)
+ #ifdef KANJI
+ 		remove(fileconvsto(mfp->mf_fname));
+ #else
  		remove((char *)mfp->mf_fname);
+ #endif
  											/* free entries in used list */
  	for (hp = mfp->mf_used_first; hp != NULL; hp = nextp)
  	{
***************
*** 820,826 ****
--- 824,834 ----
  	page_size = mfp->mf_page_size;
  	offset = page_size * hp->bh_bnum;
  	size = page_size * hp->bh_page_count;
+ #ifdef __FreeBSD__
+ 	if (lseek(mfp->mf_fd, (off_t)offset, SEEK_SET) != offset)
+ #else
  	if (lseek(mfp->mf_fd, offset, SEEK_SET) != offset)
+ #endif
  	{
  		EMSG("Seek error in swap file read");
  		return FAIL;
***************
*** 877,883 ****
--- 885,895 ----
  			hp2 = hp;
  
  		offset = page_size * nr;
+ #ifdef __FreeBSD__
+ 		if (lseek(mfp->mf_fd, (off_t)offset, SEEK_SET) != offset)
+ #else
  		if (lseek(mfp->mf_fd, offset, SEEK_SET) != offset)
+ #endif
  		{
  			EMSG("Seek error in swap file write");
  			return FAIL;
***************
*** 1089,1103 ****
--- 1101,1127 ----
  	 * not possible after the open on the Amiga.
  	 * fname cannot be NameBuff, because it has been allocated.
  	 */
+ #ifdef KANJI
+ 	if (FullName(fileconvsto(fname), NameBuff, MAXPATHL) == FAIL)
+ #else
  	if (FullName(fname, NameBuff, MAXPATHL) == FAIL)
+ #endif
  		mfp->mf_xfname = NULL;
  	else
+ #ifdef KANJI
+ 		mfp->mf_xfname = strsave(fileconvsfrom(NameBuff));
+ #else
  		mfp->mf_xfname = strsave(NameBuff);
+ #endif
  
  	/*
  	 * try to open the file
  	 */
+ #ifdef KANJI
+ 	mfp->mf_fd = open(fileconvsto(fname), new ? (O_CREAT | O_RDWR | O_TRUNC) : (O_RDONLY)
+ #else
  	mfp->mf_fd = open((char *)fname, new ? (O_CREAT | O_RDWR | O_TRUNC) : (O_RDONLY)
+ #endif
  
  #ifdef AMIGA				/* Amiga has no mode argument */
  					);
diff -crN ../orig/src/memline.c ./src/memline.c
*** ../orig/src/memline.c	Sat Aug 13 02:48:48 1994
--- ./src/memline.c	Fri Dec 10 06:42:00 1999
***************
*** 62,67 ****
--- 62,70 ----
   * ml_clearmarked()		clear all line marks (for :global command)
   */
  
+ #ifdef MSDOS
+ # include <io.h>		/* for lseek(), must be before vim.h */
+ #endif
  #include "vim.h"
  #include "globals.h"
  #include "proto.h"
***************
*** 258,264 ****
--- 261,271 ----
  	if (curbuf->b_filename != NULL)
  	{
  		STRNCPY(b0p->b0_fname, curbuf->b_filename, (size_t)1000);
+ #ifdef KANJI
+ 		if (stat(fileconvsto(curbuf->b_filename), &st) != -1)
+ #else
  		if (stat((char *)curbuf->b_filename, &st) != -1)
+ #endif
  			b0p->b0_mtime = st.st_mtime;
  		else
  			b0p->b0_mtime = 0;
***************
*** 403,409 ****
--- 410,420 ----
  	}
  		/* copy filename again, it may have been changed */
  	STRNCPY(b0p->b0_fname, buf->b_filename, (size_t)1000);
+ #ifdef KANJI
+ 	if (stat(fileconvsto(buf->b_filename), &st) != -1)
+ #else
  	if (stat((char *)buf->b_filename, &st) != -1)
+ #endif
  		b0p->b0_mtime = st.st_mtime;
  error:
  	mf_put(mfp, hp, TRUE, FALSE);
***************
*** 445,450 ****
--- 456,465 ----
   * Otherwise ".swp" is appended.
   */
  	fname = curbuf->b_xfilename;
+ #ifndef	notdef		/* NT coredumped */
+ 	len = 0;
+ 	if (fname)
+ #endif
  	len = STRLEN(fname);
  	if (len >= 4 && vim_strnicmp(fname + len - 4, (char_u *)".sw", (size_t)3) == 0)
  	{
***************
*** 545,552 ****
--- 560,572 ----
   * check date of swap file and original file
   */
  	if (curbuf->b_filename != NULL &&
+ #ifdef kANJI
+ 			stat(fileconvsto(curbuf->b_filename), &org_stat) != -1 &&
+ 			((stat(fileconvsto(fname), &swp_stat) != -1 &&
+ #else
  			stat((char *)curbuf->b_filename, &org_stat) != -1 &&
  			((stat((char *)fname, &swp_stat) != -1 &&
+ #endif
  			org_stat.st_mtime > swp_stat.st_mtime) ||
  			org_stat.st_mtime != b0p->b0_mtime))
  	{
***************
*** 788,795 ****
--- 808,820 ----
  			 * if original file does not exist anymore or has been changed
  			 * call ml_preserve to get rid of all negative numbered blocks
  			 */
+ #ifdef KANJI
+ 			if (stat(fileconvsto(buf->b_filename), &st) == -1 ||
+ 								st.st_mtime != buf->b_mtime)
+ #else
  			if (stat((char *)buf->b_filename, &st) == -1 ||
  								st.st_mtime != buf->b_mtime)
+ #endif
  				ml_preserve(buf, FALSE);
  		}
  		if (buf->b_ml.ml_mfp->mf_dirty)
***************
*** 999,1008 ****
--- 1024,1041 ----
  	int			newfile;		/* flag, see above */
  {
  	int			i;
+ #if 0	/* ken */
  	int			line_count;		/* number of indexes in current block */
+ #else
+ 	linenr_t	line_count;		/* number of indexes in current block */
+ #endif
  	int			offset;
  	int			from, to;
+ #if 0	/* ken */
  	int			space_needed;	/* space needed for new line */
+ #else
+ 	colnr_t		space_needed;	/* space needed for new line */
+ #endif
  	int			page_size;
  	int			page_count;
  	int			db_idx;			/* index for lnum in data block */
***************
*** 1187,1193 ****
--- 1220,1230 ----
   * The line counts in the pointer blocks have already been adjusted by
   * ml_find_line().
   */
+ #if 0	/* ken */
  		int			line_count_left, line_count_right;
+ #else
+ 		linenr_t	line_count_left, line_count_right;
+ #endif
  		int			page_count_left, page_count_right;
  		BHDR		*hp_left;
  		BHDR		*hp_right;
***************
*** 2345,2351 ****
--- 2382,2392 ----
  		/*
  		 * check if the scriptfile already exists
  		 */
+ #ifdef KANJI
+ 		if (getperm(fileconvsto(fname)) < 0)		/* it does not exist */
+ #else
  		if (getperm(fname) < 0)		/* it does not exist */
+ #endif
  		{
  #ifdef AMIGA
  			fh = Open((UBYTE *)fname, (long)MODE_NEWFILE);
***************
*** 2398,2413 ****
--- 2439,2463 ----
  			if (!recoverymode && buf->b_xfilename != NULL)
  			{
  						/* call wait_return if not done by emsg() */
+ #ifdef notdef	/* ken */
  				if (EMSG2(".swp file exists: An edit of file \"%s\" may not have been finished", buf->b_xfilename))
  				{
  					msg_outchar('\n');
  					wait_return(FALSE);		/* do call wait_return now */
  				}
+ #endif
  			}
  		}
  
  		if (fname[n - 1] == 'a')	/* tried enough names, give up */
  		{
+ #ifndef notdef	/* ken */
+ 			if (EMSG2(".swp file exists: An edit of file \"%s\" may not have been finished", buf->b_xfilename))
+ 			{
+ 				msg_outchar('\n');
+ 				wait_return(FALSE);		/* do call wait_return now */
+ 			}
+ #endif
  			free(fname);
  			fname = NULL;
  			break;
diff -crN ../orig/src/message.c ./src/message.c
*** ../orig/src/message.c	Wed Aug 10 13:54:10 1994
--- ./src/message.c	Sun Jan 11 15:54:42 1998
***************
*** 15,20 ****
--- 15,23 ----
  #define MESSAGE			/* don't include prototype for smsg() */
  #include "proto.h"
  #include "param.h"
+ #ifdef KANJI
+ #include "kanji.h"
+ #endif
  
  static int msg_check_screen __ARGS((void));
  
***************
*** 91,97 ****
--- 94,107 ----
  			need_wait_return = TRUE;
  		}
  		else
+ #ifdef notdef
  			sleep(1);			/* give the user a chance to read the message */
+ #else
+ 		{
+ 			vim_delay();
+ 			vim_delay();
+ 		}
+ #endif
  		return TRUE;
  	}
  	return FALSE;
***************
*** 258,263 ****
--- 268,286 ----
  		len = STRLEN(str);
  	while (--len >= 0)
  	{
+ #ifdef KANJI
+ 		char_u		buf[3];
+ 		if (ISkanji(*str) && str[1])
+ 		{
+ 			buf[0] = *str++;
+ 			buf[1] = *str++;
+ 			buf[2] = NUL;
+ 			msg_outstr(buf);
+ 			retval += 2;
+ 			len--;
+ 			continue;
+ 		}
+ #endif
  		msg_outstr(transchar(*str));
  		retval += charsize(*str);
  		++str;
***************
*** 296,301 ****
--- 319,337 ----
  		else
  		{
  			c = s[si++];
+ #ifdef KANJI
+ 			if (ISkanji(c) && s[si])
+ 			{
+ 				char_u		buf[3];
+ 				buf[0] = c;
+ 				buf[1] = s[si++];
+ 				buf[2] = NUL;
+ 				msg_outstr(buf);
+ 				col += 2;
+ 				continue;
+ 			}
+ 			else
+ #endif
  			if (c == TAB && !curwin->w_p_list)
  			{
  				/* tab amount depends on current column */
***************
*** 352,358 ****
--- 388,399 ----
  		 *   (some terminals scroll automatically, some don't. To avoid problems
  		 *   we scroll ourselves)
  		 */
+ #ifdef KANJI
+ 		if ((msg_row >= Rows - 1 && (*s == '\n' || msg_col >= Columns - 1))
+ 			|| ((msg_row >= Rows - 1 && (msg_col == Columns - 2 && ISkanji(*s)))))
+ #else
  		if (msg_row >= Rows - 1 && (*s == '\n' || msg_col >= Columns - 1))
+ #endif
  		{
  			screen_del_lines(0, 0, 1, (int)Rows);		/* always works */
  			msg_row = Rows - 2;
***************
*** 366,373 ****
--- 407,418 ----
  			 */
  			if (p_more && --lines_left == 0)
  			{
+ #ifdef notdef
  				windgoto((int)Rows - 1, 0);
  				outstr((char_u *)"-- more --");
+ #else
+ 				screen_msg("-- more --", Rows - 1, 0);
+ #endif
  				c = vgetc();
  				if (c == CR || c == NL)
  					lines_left = 1;
***************
*** 386,391 ****
--- 431,449 ----
  		}
  		else
  		{
+ #ifdef KANJI
+ 			if (ISkanji(*s) && s[1])
+ 			{
+ 				if (msg_col == (Columns - 1))
+ 				{
+ 					screen_msg(" ", msg_row, msg_col++);
+ 					msg_col = 0;
+ 					msg_row++;
+ 				}
+ 				screen_msg(s++, msg_row, msg_col++);
+ 			}
+ 			else
+ #endif
  			screen_outchar(*s, msg_row, msg_col);
  			if (++msg_col >= Columns)
  			{
diff -crN ../orig/src/misccmds.c ./src/misccmds.c
*** ../orig/src/misccmds.c	Wed Aug 10 13:54:10 1994
--- ./src/misccmds.c	Sun Sep 26 00:00:20 1999
***************
*** 14,19 ****
--- 14,22 ----
  #include "globals.h"
  #include "proto.h"
  #include "param.h"
+ #ifdef KANJI
+ #include "kanji.h"
+ #endif
  
  static void check_status __ARGS((BUF *));
  
***************
*** 62,73 ****
--- 65,84 ----
  	if (!curbuf->b_p_et)			/* if 'expandtab' is set, don't use TABs */
  		while (size >= (int)curbuf->b_p_ts)
  		{
+ #ifdef KANJI
+ 			inschar(TAB, NUL);
+ #else
  			inschar(TAB);
+ #endif
  			size -= (int)curbuf->b_p_ts;
  		}
  	while (size)
  	{
+ #ifdef KANJI
+ 		inschar(' ', NUL);
+ #else
  		inschar(' ');
+ #endif
  		--size;
  	}
  	State = oldstate;
***************
*** 127,135 ****
--- 138,169 ----
  			if (dir == FORWARD)
  			{
  				p = ptr + STRLEN(ptr) - 1;
+ #ifdef KANJI
+ 				while (p > ptr)
+ 				{
+ 					switch (ISkanjiPointer(ptr,p))
+ 					{
+ 						case 0:
+ 							if (!isspace(*p))
+ 								goto end_while;
+ 							p--;
+ 							break;
+ 						case 2:
+ 							p -= 2;
+ 							break;
+ 						/* ??? */
+ 						case 1:
+ 							p--;
+ 							break;
+ 					}
+ 				}
+ end_while:
+ 				if (ISkanjiPointer(ptr,p) == 0 && *p == '{')					/* line ends in '{': do indent */
+ #else
  				while (p > ptr && isspace(*p))	/* find last non-blank in line */
  					--p;
  				if (*p == '{')					/* line ends in '{': do indent */
+ #endif
  				{
  					did_si = TRUE;
  					no_si = TRUE;
***************
*** 282,302 ****
--- 316,378 ----
  	if (*s == NUL)				/* empty line */
  		return 1;
  
+ #ifdef KANJI
+ 	{
+ 		int	i = wp->w_p_nu ? 8 : 0,
+ 			j, kanji= 0;
+ 		for (col = i; *s != NUL; s++)
+ 		{
+ 			if (kanji)
+ 			{
+ 				kanji= 0;
+ 				i++;
+ 				col++;
+ 			}
+ 			else
+ 			{
+ 				if (ISkanji(*s))
+ 				{
+ 					kanji = 1;
+ 					i++;
+ 					col++;
+ 					if (i >= Columns)
+ 					{
+ 						i = 1;
+ 						col++;	/* dummy byte */
+ 					}
+ 					continue;
+ 				}
+ 				j = chartabsize(*s, i);
+ 				col += j;
+ 				i += j;
+ 			}
+ 			if (i >= Columns)
+ 				i = 0;
+ 		}
+ 	}
+ #else
  	while (*s != NUL)
  		col += chartabsize(*s++, col);
+ #endif
  
  	/*
  	 * If list mode is on, then the '$' at the end of the line takes up one
  	 * extra column.
  	 */
+ #ifdef CRMARK
+ 	if (wp->w_p_list || wp->w_p_cr)
+ #else
  	if (wp->w_p_list)
+ #endif
  		col += 1;
  
+ #ifndef KANJI
  	/*
  	 * If 'number' mode is on, add another 8.
  	 */
  	if (wp->w_p_nu)
  		col += 8;
+ #endif
  
  	lines = (col + (Columns - 1)) / Columns;
  	if (lines <= wp->w_height)
***************
*** 330,337 ****
--- 406,419 ----
   * insert or replace a single character at the cursor position
   */
  	void
+ #ifdef KANJI
+ inschar(c, k)
+ 	int			c;
+ 	int			k;
+ #else
  inschar(c)
  	int			c;
+ #endif
  {
  	register char_u  *p;
  	int				rir0;		/* reverse replace in column 0 */
***************
*** 351,369 ****
--- 433,498 ----
  	else
  		extra = 0;
  
+ #ifdef KANJI
+ 	if (ISkanji(c) &&
+ 		(State != REPLACE || *(old + col) == NUL || (rir0 && !ISkanji(*(old + col)))))
+ 		extra = 2;
+ 	else if (State == REPLACE && ISkanji(c) && !ISkanji(gchar_cursor()))
+ 		extra = 1;
+ #endif
  	new = alloc((unsigned)(oldlen + extra));
  	if (new == NULL)
  		return;
  	memmove((char *)new, (char *)old, (size_t)col);
  	p = new + col;
+ #ifdef KANJI
+ 	new[oldlen + extra - 1] = NUL;
+ 	if (p_jrep && State == REPLACE && !ISkanji(c) && ISkanji(gchar_cursor()))
+ 	{
+ 		memmove((char *)p, (char *)old + col, (size_t)(oldlen - col));
+ 		if (rir0)					/* reverse replace in column 0 */
+ 			*(p + 2) = ' ';
+ 		else
+ 			*(p + 1) = ' ';
+ 	}
+ 	else if (p_jrep && State == REPLACE && ISkanji(c) && !ISkanji(gchar_cursor()))
+ 	{
+ 		if (gchar_cursor() == NUL)
+ 		{
+ 			memmove((char *)p + 2, (char *)old + col, (size_t)(oldlen - col));
+ 		}
+ 		else
+ 		{
+ 			memmove((char *)p, (char *)old + col, (size_t)(oldlen - col));
+ 			if (ISkanji(*(ml_get_cursor()+1)))
+ 			{
+ 				if (rir0)					/* reverse replace in column 0 */
+ 					*(p + 3) = ' ';
+ 				else
+ 					*(p + 2) = ' ';
+ 			}
+ 		}
+ 	}
+ 	else if (State == REPLACE && !ISkanji(c) && ISkanji(gchar_cursor()))
+ 		memmove((char *)p, (char *)old + col + 1, (size_t)(oldlen - col - 1));
+ 	else
+ #endif
  	memmove((char *)p + extra, (char *)old + col, (size_t)(oldlen - col));
  	if (rir0)					/* reverse replace in column 0 */
  	{
  		*(p + 1) = c;			/* replace the char that was in column 0 */
+ #ifdef KANJI
+ 		if (ISkanji(c))
+ 			*(p + 2) = k;
+ #endif
  		c = ' ';				/* insert a space */
  		extraspace = TRUE;
  	}
  	*p = c;
+ #ifdef KANJI
+ 	if (ISkanji(c))
+ 		*(p + 1) = k;
+ #endif
  	ml_replace(lnum, new, FALSE);
  
  	/*
***************
*** 393,402 ****
--- 522,542 ----
  			cursupdate();
  		}
  	}
+ #ifdef KANJI
+ 	if (!p_ri)							/* normal insert: cursor right */
+ 		curwin->w_cursor.col += (ISkanji(c) ? 2 : 1);
+ 	else if (State == REPLACE && !rir0)	/* reverse replace mode: cursor left */
+ 	{
+ 		--curwin->w_cursor.col;
+ 		if (ISkanji(gchar_cursor()))
+ 			--curwin->w_cursor.col;
+ 	}
+ #else
  	if (!p_ri)							/* normal insert: cursor right */
  		++curwin->w_cursor.col;
  	else if (State == REPLACE && !rir0)	/* reverse replace mode: cursor left */
  		--curwin->w_cursor.col;
+ #endif
  	CHANGED;
  }
  
***************
*** 470,476 ****
--- 610,624 ----
  	 * want to end up positioned at the newline.
  	 */
  	if (fixpos && curwin->w_cursor.col > 0 && col == oldlen - 1)
+ #ifdef KANJI
+ 	{
+ 		--curwin->w_cursor.col;
+ 		if (ISkanjiCur() == 2)
+ 			--curwin->w_cursor.col;
+ 	}
+ #else
  		--curwin->w_cursor.col;
+ #endif
  
  	CHANGED;
  	return OK;
***************
*** 585,592 ****
--- 733,752 ----
  {
      register char_u *p;
      
+ #ifdef KANJI
+     for(p = *pp; 1; ++p)
+ 	{
+ 		if (*p == ' ' || *p == '\t')
+ 			continue;
+ 		if (ISkanji(*p) && jpcls(*p, *(p+1)) == 0)
+ 			++ p;
+ 		else
+ 			break;
+ 	}
+ #else
      for (p = *pp; *p == ' ' || *p == '\t'; ++p)	/* skip to next non-white */
      	;
+ #endif
      *pp = p;
  }
  
***************
*** 602,608 ****
--- 762,777 ----
  	register char_u *p;
  
  	for (p = *pp; *p != ' ' && *p != '\t' && *p != NUL; ++p)
+ #ifdef KANJI
+ 		if (ISkanji(*p))
+ 		{
+ 			if (jpcls(*p, *(p + 1)) == 0)
+ 				break;
+ 			++p;
+ 		}
+ #else
  		;
+ #endif
  	*pp = p;
  }
  
***************
*** 836,841 ****
--- 1005,1015 ----
  		if (var && (STRLEN(var) + STRLEN(tail) + 1 < (unsigned)dstlen))
  		{
  			STRCPY(dst, var);
+ #if !defined(notdef) && defined(MSDOS)
+ 			if (var[strlen(var) - 1] == '\\' && tail[0] == '\\')
+ 				STRCAT(dst, &tail[1]);
+ 			else
+ #endif
  			STRCAT(dst, tail);
  			return;
  		}
***************
*** 873,878 ****
--- 1047,1060 ----
  				if (--dstlen > 0)
  					*dst++ = '~';
  			}
+ #ifdef MSDOS
+ 			else if (vim_strnicmp(src, home, len) == 0)
+ 			{
+ 				src += len;
+ 				if (--dstlen > 0)
+ 					*dst++ = '~';
+ 			}
+ #endif
  			while (*src && *src != ' ' && --dstlen > 0)
  				*dst++ = *src++;
  			while (*src == ' ' && --dstlen > 0)
***************
*** 895,902 ****
--- 1077,1089 ----
  	char_u buf1[MAXPATHL];
  
  	expand_env(s1, buf1, MAXPATHL);
+ # ifdef KANJI
+ 	if (stat(fileconvsto(buf1), &st1) == 0 && stat(fileconvsto(s2), &st2) == 0 &&
+ 				st1.st_dev == st2.st_dev && st1.st_ino == st2.st_ino)
+ # else
  	if (stat((char *)buf1, &st1) == 0 && stat((char *)s2, &st2) == 0 &&
  				st1.st_dev == st2.st_dev && st1.st_ino == st2.st_ino)
+ # endif
  		return FALSE;
  	return TRUE;
  #else
***************
*** 904,910 ****
--- 1091,1101 ----
  	char_u buf2[MAXPATHL];
  
  	expand_env(s1, buf2, MAXPATHL);
+ #ifdef KANJI
+ 	if (FullName(fileconvsto(buf2), buf1, MAXPATHL) == OK && FullName(fileconvsto(s2), buf2, MAXPATHL) == OK)
+ #else
  	if (FullName(buf2, buf1, MAXPATHL) == OK && FullName(s2, buf2, MAXPATHL) == OK)
+ #endif
  		return STRCMP(buf1, buf2);
  	/*
  	 * one of the FullNames() failed, file probably doesn't exist.
***************
*** 926,931 ****
--- 1117,1126 ----
  	{
  		if (ispathsep(*p2))
  			p1 = p2 + 1;
+ #if defined(KANJI) && defined(MSDOS)
+ 		if (ISkanji(*p2))
+ 			p2++;
+ #endif
  	}
  	return p1;
  }
diff -crN ../orig/src/mkcmdtab.c ./src/mkcmdtab.c
*** ../orig/src/mkcmdtab.c	Wed Aug 10 13:54:10 1994
--- ./src/mkcmdtab.c	Tue Dec 15 14:26:28 1998
***************
*** 14,20 ****
  
  #include "vim.h"
  
! #if defined(UTS4)
      int
  #else
  	void
--- 14,20 ----
  
  #include "vim.h"
  
! #if defined(UTS4) || defined(__CYGWIN__)
      int
  #else
  	void
diff -crN ../orig/src/msdos.h ./src/msdos.h
*** ../orig/src/msdos.h	Wed Aug 10 13:54:10 1994
--- ./src/msdos.h	Sun Sep 26 19:46:58 1999
***************
*** 16,26 ****
   */
  
  #ifndef SYSVIMRC_FILE
! # define SYSVIMRC_FILE	"$VIM\\_vimrc"
  #endif
  
  #ifndef SYSEXRC_FILE
! # define SYSEXRC_FILE	"$VIM\\_exrc"
  #endif
  
  #ifndef VIMRC_FILE
--- 16,34 ----
   */
  
  #ifndef SYSVIMRC_FILE
! # ifdef notdef	/* ken */
! #  define SYSVIMRC_FILE	"$VIM\\_vimrc"
! # else
! #  define SYSVIMRC_FILE	"$HOME\\_vimrc"
! # endif
  #endif
  
  #ifndef SYSEXRC_FILE
! # ifdef notdef	/* ken */
! #  define SYSEXRC_FILE	"$VIM\\_exrc"
! # else
! #  define SYSEXRC_FILE	"$HOME\\_exrc"
! # endif
  #endif
  
  #ifndef VIMRC_FILE
***************
*** 32,42 ****
  #endif
  
  #ifndef VIM_HLP
! # define VIM_HLP		"$VIM\\vim.hlp"
  #endif
  
  #ifndef DEF_DIR
! # define DEF_DIR		"c:\\tmp"
  #endif
  
  #define TMPNAME1		"viXXXXXX"		/* put it in current dir */
--- 40,64 ----
  #endif
  
  #ifndef VIM_HLP
! # ifdef notdef	/* ken */
! #  define VIM_HLP		"$VIM\\vim.hlp"
! # else
! #  define VIM_HLP		"$HOME\\vim.hlp"
! # endif
  #endif
  
+ #ifndef notdef
+ # ifndef BACKUPDIR
+ #  define BACKUPDIR		"$HOME"
+ # endif
+ #endif
+ 
  #ifndef DEF_DIR
! # ifndef notdef	/* ken */
! #  define DEF_DIR		"$TMP"
! # else
! #  define DEF_DIR		"c:\\tmp"
! # endif
  #endif
  
  #define TMPNAME1		"viXXXXXX"		/* put it in current dir */
***************
*** 50,56 ****
  # define MAXMEMTOT		0				/* decide in set_init */
  #endif
  
! #define BASENAMELEN		8				/* length of base of file name */
  
  /*
   * MSDOS Machine-dependent routines.
--- 72,82 ----
  # define MAXMEMTOT		0				/* decide in set_init */
  #endif
  
! #ifdef NT
! # define BASENAMELEN	250				/* length of base of file name */
! #else
! # define BASENAMELEN	8				/* length of base of file name */
! #endif
  
  /*
   * MSDOS Machine-dependent routines.
diff -crN ../orig/src/normal.c ./src/normal.c
*** ../orig/src/normal.c	Sun Aug 14 05:22:04 1994
--- ./src/normal.c	Tue Nov 30 23:41:46 1999
***************
*** 15,20 ****
--- 15,23 ----
  #include "globals.h"
  #include "proto.h"
  #include "param.h"
+ #ifdef KANJI
+ #include "kanji.h"
+ #endif
  
  #undef EXTERN
  #undef INIT
***************
*** 39,45 ****
--- 42,52 ----
  static linenr_t	Prenum; 		/* The (optional) number before a command. */
  int				redo_Visual_busy = FALSE;	/* TRUE when redo-ing a visual */
  
+ #ifdef KANJI
+ static void		prep_redo __ARGS((long, int, int, int, int));
+ #else
  static void		prep_redo __ARGS((long, int, int, int));
+ #endif
  static int		checkclearop __ARGS((void));
  static int		checkclearopq __ARGS((void));
  static void		clearopbeep __ARGS((void));
***************
*** 82,87 ****
--- 89,97 ----
  	int 			type = 0;				/* type of operation */
  	int 			dir = FORWARD;			/* search direction */
  	int				nchar = NUL;
+ #ifdef KANJI
+ 	int				kchar = NUL;
+ #endif
  	int				finish_op;
  	linenr_t		Prenum1;
  	char_u			searchbuff[CMDBUFFSIZE];/* buffer for search string */
***************
*** 102,107 ****
--- 112,121 ----
  	static colnr_t	redo_Visual_col;		/* number of columns or end column */
  	static long		redo_Visual_Prenum;		/* Prenum for operator */
  
+ #ifdef TRACK
+ 	if (Track)
+ 		showtrack();
+ #endif
  	Prenum = 0;
  	/*
  	 * If there is an operator pending, then the command we take this time
***************
*** 170,186 ****
--- 184,240 ----
  	 * get an additional character if we need one
  	 * for CTRL-W we already got it when looking for a count
  	 */
+ #ifdef FEPCTRL
+ 	if (c >= 0x100 || ctrl_w)
+ 		;	/* this key is special key. nothing to do. strchr is ascii only. */
+ 	else if (strchr(p_fo, c))
+ 	{
+ 		FepOn = TRUE;
+ # if defined(CANNA) || defined(ONEW)
+ 		if (c != ':' && c != '?' && c != '/')
+ 			fep_visualmode(TRUE);
+ # endif
+ 		if (curbuf->b_p_fc && curbuf->fepmode && !fep_get_mode())
+ 			fep_force_on();
+ 	}
+ #endif
  	if (ctrl_w)
  	{
  		nchar = c;
  		c = Ctrl('W');
  		premsg(c, nchar);
  	}
+ #ifdef KANJI
+ 	else if (c >= 0x100)
+ 		;	/* this key is special key. nothing to do. strchr is ascii only. */
+ #endif
  	else if (strchr("@zZtTfF[]mg'`\"", c) || (c == 'q' && !Recording && !Exec_reg) ||
  										(c == 'r' && !VIsual.lnum))
  	{
+ #ifdef KANJI
  		State = NOMAPPING;
+ #  ifdef FEPCTRL
+ retry_input:
+ #  endif
  		nchar = vgetc();		/* no macro mapping for this char */
+ #  ifdef FEPCTRL
+ 		if (((0 <= nchar && nchar <= 0x20 && nchar != ESC) || nchar == K_ZERO)
+ 				&& curbuf->b_p_fc
+ 				&& (p_fk != NULL && STRRCHR(p_fk, nchar == K_ZERO ? '@' : nchar + '@') != NULL))
+ 		{
+ 			if (fep_get_mode())
+ 				fep_force_off();
+ 			else
+ 				fep_force_on();
+ 			goto retry_input;
+ 		}
+ #  endif
+ 		if (ISkanji(nchar))
+ 			kchar = vgetc();
+ #else	/* KANJI */
+ 		State = NOMAPPING;
+ 		nchar = vgetc();		/* no macro mapping for this char */
+ #endif	/* KANJI */
  		premsg(c, nchar);
  	}
  	if (p_sc)
***************
*** 443,450 ****
--- 497,510 ----
  				 * skip to start of identifier/string
  				 */
  				col = curwin->w_cursor.col;
+ #ifdef KANJI
+ 				while (ptr[col] != NUL
+ 						&& (i == 0 ? !isidchar(ptr[col]) : iswhite(ptr[col]))
+ 						&& !ISkanji(ptr[col]))
+ #else
  				while (ptr[col] != NUL &&
  							(i == 0 ? !isidchar(ptr[col]) : iswhite(ptr[col])))
+ #endif
  					++col;
  
  				/*
***************
*** 452,460 ****
--- 512,538 ----
  				 * real vi but I like it a little better and it shouldn't bother
  				 * anyone.
  				 */
+ #ifdef KANJI
+ 				if (ISkanji(ptr[col]))
+ 				{
+ 					int class;
+ 					class = jpcls(ptr[col], ptr[col+1]);
+ 					while (col > 0 && class == jpcls(ptr[col-2],ptr[col-1]))
+ 						col -= 2;
+ 				}
+ 				else
+ 				{
+ 					while (col > 0
+ 						&& ISkanjiPosition(ptr, col) == 0
+ 						&& (i == 0 ? isidchar(ptr[col - 1]) :
+ 								(!iswhite(ptr[col - 1]) && !isidchar(ptr[col - 1]))))
+ 						--col;
+ 				}
+ #else
  				while (col > 0 && (i == 0 ? isidchar(ptr[col - 1]) :
  							(!iswhite(ptr[col - 1]) && !isidchar(ptr[col - 1]))))
  					--col;
+ #endif
  
  				/*
  				 * if identifier found or not '*' or '#' command, stop searching
***************
*** 465,471 ****
--- 543,554 ----
  			/*
  			 * did't find an identifier of string
  			 */
+ #ifdef KANJI
+ 			if (ptr[col] == NUL
+ 					|| (!isidchar(ptr[col]) && !ISkanji(ptr[col]) && i == 0))
+ #else
  			if (ptr[col] == NUL || (!isidchar(ptr[col]) && i == 0))
+ #endif
  			{
  				CLEAROPBEEP;
  				break;
***************
*** 497,504 ****
--- 580,604 ----
  			/*
  			 * Now grab the chars in the identifier
  			 */
+ #ifdef KANJI
+ 			if (ISkanji(ptr[col]))
+ 			{
+ 				int class;
+ 				class = jpcls(ptr[col], ptr[col+1]);
+ 				while (ptr[col] != NUL && class == jpcls(ptr[col],ptr[col+1]))
+ 				{
+ 					stuffcharReadbuff(ptr[col++]);
+ 					stuffcharReadbuff(ptr[col++]);
+ 				}
+ 			}
+ 			else
+ 				while (!ISkanji(ptr[col])
+ 					&& (i == 0 ? isidchar(ptr[col]) :
+ 								(ptr[col] != NUL && !iswhite(ptr[col]))))
+ #else
  			while (i == 0 ? isidchar(ptr[col]) :
  								(ptr[col] != NUL && !iswhite(ptr[col])))
+ #endif
  			{
  				stuffcharReadbuff(ptr[col]);
  				++col;
***************
*** 558,563 ****
--- 658,667 ----
  		n = Prenum1;
  		while (n--)
  		{
+ #ifdef TRACK
+ 			if (Track)
+ 				track_right();
+ #endif
  			if (oneright() == FAIL)
  			{
  					/* space wraps to next line if 'whichwrap' bit 1 set */
***************
*** 600,605 ****
--- 704,713 ----
  		n = Prenum1;
  		while (n--)
  		{
+ #ifdef TRACK
+ 			if (Track)
+ 				track_left();
+ #endif
  			if (oneleft() == FAIL)
  			{
  					/* backspace and del wrap to previous line if 'whichwrap'
***************
*** 632,637 ****
--- 740,749 ----
  	  case 'k':
  	  case K_UARROW:
  	  case Ctrl('P'):
+ #ifdef TRACK
+ 		if (Track)
+ 			track_up();
+ #endif
  		mtype = MLINE;
  		if (oneup(Prenum1) == FAIL)
  			CLEAROPBEEP;
***************
*** 648,653 ****
--- 760,769 ----
  	  case K_DARROW:
  	  case Ctrl('N'):
  	  case NL:
+ #ifdef TRACK
+ 		if (Track)
+ 			track_down();
+ #endif
  		mtype = MLINE;
  		if (onedown(Prenum1) == FAIL)
  			CLEAROPBEEP;
***************
*** 839,845 ****
--- 955,965 ----
  		else
  			mincl = TRUE;
  		curwin->w_set_curswant = TRUE;
+ #ifdef KANJI
+ 		if (!searchc(nchar, kchar, dir, type, Prenum1))
+ #else
  		if (!searchc(nchar, dir, type, Prenum1))
+ #endif
  			CLEAROPBEEP;
  		break;
  
***************
*** 1047,1053 ****
--- 1167,1177 ----
  		 */
  		if (nchar == '\r' || nchar == '\n' || nchar == '\t')
  		{
+ #ifdef KANJI
+ 			prep_redo(Prenum1, 'r', nchar, NUL, NUL);
+ #else
  			prep_redo(Prenum1, 'r', nchar, NUL);
+ #endif
  			stuffnumReadbuff(Prenum1);
  			stuffcharReadbuff('R');
  			stuffcharReadbuff(nchar);
***************
*** 1058,1070 ****
--- 1182,1202 ----
  		if (nchar == Ctrl('V'))				/* get another character */
  		{
  			c = Ctrl('V');
+ #ifdef KANJI
+ 			nchar = get_literal(&type, &kchar);
+ #else
  			nchar = get_literal(&type);
+ #endif
  			if (type)						/* typeahead */
  				stuffcharReadbuff(type);
  		}
  		else
  			c = NUL;
+ #ifdef KANJI
+ 		prep_redo(Prenum1, 'r', c, nchar, kchar);
+ #else
  		prep_redo(Prenum1, 'r', c, nchar);
+ #endif
  		if (!u_save_cursor())				/* save line for undo */
  			break;
  			/*
***************
*** 1072,1080 ****
--- 1204,1226 ----
  			 * At the same time we let know that the line will be changed.
  			 */
  		ptr = ml_get_buf(curbuf, curwin->w_cursor.lnum, TRUE) + curwin->w_cursor.col;
+ #ifdef KANJI
+ 		{									/* replace the characters */
+ 			int		state = State;
+ 			FPOS	pos;
+ 
+ 			pos = curwin->w_cursor;
+ 			State = REPLACE;
+ 			while (Prenum1--)
+ 				inschar(nchar, kchar);
+ 			State = state;
+ 			curwin->w_cursor = pos;
+ 		}
+ #else
  		curwin->w_cursor.col += Prenum1 - 1;
  		while (Prenum1--)					/* replace the characters */
  			*ptr++ = nchar;
+ #endif
  		curwin->w_set_curswant = TRUE;
  		CHANGED;
  		updateline();
***************
*** 1102,1108 ****
--- 1248,1258 ----
  			break;
  		}
  
+ #ifdef KANJI
+ 		prep_redo(Prenum, 'J', NUL, NUL, NUL);
+ #else
  		prep_redo(Prenum, 'J', NUL, NUL);
+ #endif
  		dodojoin(Prenum, TRUE, TRUE);
  		modified = TRUE;
  		break;
***************
*** 1113,1119 ****
--- 1263,1273 ----
  
  	  case 'p':
  		CHECKCLEAROPQ;
+ #ifdef KANJI
+ 		prep_redo(Prenum, c, NUL, NUL, NUL);
+ #else
  		prep_redo(Prenum, c, NUL, NUL);
+ #endif
  		doput(dir, Prenum1, FALSE);
  		modified = TRUE;
  		break;
***************
*** 1122,1128 ****
--- 1276,1286 ----
  	  case Ctrl('X'):			/* subtract from number */
  		CHECKCLEAROPQ;
  		if (doaddsub((int)c, Prenum1) == OK)
+ #ifdef KANJI
+ 			prep_redo(Prenum1, c, NUL, NUL, NUL);
+ #else
  			prep_redo(Prenum1, c, NUL, NUL);
+ #endif
  		modified = TRUE;
  		break;
  
***************
*** 1229,1235 ****
--- 1387,1397 ----
  				CLEAROPBEEP;
  				break;
  			}
+ #ifdef KANJI
+ 			prep_redo(Prenum, '~', NUL, NUL, NUL);
+ #else
  			prep_redo(Prenum, '~', NUL, NUL);
+ #endif
  
  			if (!u_save_cursor())
  				break;
***************
*** 1340,1345 ****
--- 1502,1511 ----
  			curwin->w_cursor = *pos;
  			if (flag)
  				beginline(TRUE);
+ #ifdef KANJI
+ 			else if (ISkanjiCur() == 2)		/* kanji_align */
+ 				curwin->w_cursor.col--;
+ #endif
  		}
  		mtype = flag ? MLINE : MCHAR;
  		mincl = FALSE;		/* ignored if not MCHAR */
***************
*** 1421,1426 ****
--- 1587,1595 ----
  								curwin->w_cursor.col += resel_Visual_col * Prenum - 1;
  							else
  								curwin->w_cursor.col = resel_Visual_col;
+ #ifdef KANJI
+ 							coladvance(curwin->w_curswant);
+ #endif
  							break;
  				}
  				if (resel_Visual_col == MAXCOL)
***************
*** 1502,1507 ****
--- 1671,1887 ----
  						}
  						break;
  
+ #ifdef TRACK
+ 						/*
+ 						 * "gx": track mode
+ 						 */
+ 			case 'x':	if (Track == TRUE)
+ 						{
+ 							MSG("");
+ 							Track = FALSE;
+ 						}
+ 						else
+ 						{
+ 							showtrack();
+ 							Track = TRUE;
+ 						}
+ 						break;
+ 
+ 						/*
+ 						 * "gp": track mode previous
+ 						 */
+ 			case 'p':	if (Track)
+ 							curbuf->b_p_trs = tracktab_prev(curbuf->b_p_trs);
+ 						break;
+ 
+ 						/*
+ 						 * "gn": track mode next
+ 						 */
+ 			case 'n':	if (Track)
+ 							curbuf->b_p_trs = tracktab_next(curbuf->b_p_trs);
+ 						break;
+ #endif
+ #ifdef NT
+ 						/*
+ 						 * "gX": delete
+ 						 */
+ 			case 'X':	wincmd_delete();
+ 						break;
+ 
+ 						/*
+ 						 * "gC": cut
+ 						 */
+ 			case 'C':	wincmd_cut();
+ 						break;
+ 
+ 						/*
+ 						 * "gV": paste
+ 						 */
+ 			case 'V':	wincmd_paste();
+ 						break;
+ #endif
+ #ifndef notdef
+ 						/*
+ 						 * "gh": goto help
+ 						 */
+ 			case 'h':	help();
+ 						break;
+ 
+ 						/*
+ 						 * "gg": jump grep file
+ 						 */
+ 			case 'g':	{
+ 							char_u		*	name;
+ 							char_u		*	line = NULL;
+ 							char_u		*	p;
+ 							char			sep = ':';
+ 							char_u			linebuf[256];
+ 							char_u			filebuf[MAXPATHL];
+ 
+ 							ptr = name = ml_get(curwin->w_cursor.lnum);
+ 							while (*ptr)
+ 							{
+ 								if (*ptr == '"')
+ 								{
+ 									ptr++;
+ 									while (*ptr)
+ 									{
+ 										if (*ptr == '"')
+ 											break;
+ 										ptr++;
+ 									}
+ 									if (*ptr == NUL)	/* nothing found */
+ 									{
+ 										CLEAROPBEEP;
+ 										goto error;
+ 									}
+ 								}
+ 								else if (*ptr == sep)
+ 								{
+ 									p = &ptr[1];
+ 									while (*p)
+ 									{
+ 										if ('0' <= *p && *p <= '9')
+ 											;
+ 										else if (*p == sep)
+ 										{
+ 											line = &ptr[1];
+ 											ptr = p;
+ 											break;
+ 										}
+ 										else
+ 											break;
+ 										p++;
+ 									}
+ 									if (line != NULL)
+ 										break;
+ 								}
+ 								ptr++;
+ 							}
+ 							if (line == NULL)	/* nothing found */
+ 							{
+ 								CLEAROPBEEP;
+ 								goto error;
+ 							}
+ 							setpcmark();
+ 							STRNCPY(linebuf, line, ptr - line);
+ 							linebuf[ptr - line] = NUL;
+ 							STRNCPY(NameBuff, name, line - name - 1);
+ 							NameBuff[line - name - 1] = NUL;
+ 							if (NameBuff[0] != '"')
+ 								STRCPY(filebuf, NameBuff);
+ 							else
+ 							{
+ 								NameBuff[line - name - 2] = NUL;
+ 								STRCPY(filebuf, &NameBuff[1]);
+ 							}
+ # if 1
+ 							{
+ 								static WIN		*	swin = NULL;
+ 								static char_u	*	sname = NULL;
+ 								/* WIN			*	cwin = curwin; */
+ 								WIN				*	wp = firstwin;
+ 
+ 								while (wp != NULL)
+ 								{
+ 									if (wp == swin && strcmp(wp->w_buffer->b_sfilename, sname) == 0)
+ 										break;
+ 									wp = wp->w_next;
+ 								}
+ 								if (wp != NULL && strcmp(wp->w_buffer->b_sfilename, filebuf) == 0)
+ 								{
+ 									win_enter(wp, TRUE);
+ 									curwin->w_cursor.lnum = atol(linebuf);
+ 									beginline(TRUE);
+ 									setcursor();
+ 									updateScreen(CURSUPD);
+ 								}
+ 								else if (wp != NULL)
+ 								{
+ 									if (wp->w_buffer->b_changed && wp->w_buffer->b_nwindows <= 1)
+ 										autowrite(wp->w_buffer);
+ 									win_enter(wp, TRUE);
+ 									if (wp->w_buffer->b_changed)
+ 									{
+ 										EMSG("No write since last change)");
+ 										break;
+ 									}
+ 									(void)doecmd(filebuf, NULL, NULL, FALSE, atol(linebuf));
+ 								}
+ 								else
+ 								{
+ 									if (win_split(0L, FALSE) == FAIL)
+ 										break;
+ 									(void)doecmd(filebuf, NULL, NULL, FALSE, atol(linebuf));
+ 								}
+ 								swin = curwin;
+ 								if (sname != NULL)
+ 									free(sname);
+ 								sname = strsave(filebuf);
+ 								/* win_enter(cwin, TRUE); */
+ 							}
+ # else
+ 							if (curbuf->b_changed && curbuf->b_nwindows <= 1 && !p_hid)
+ 								autowrite(curbuf);
+ 							stuffReadbuff(":e +");
+ 							stuffReadbuff(linebuf);
+ 							stuffReadbuff(" ");
+ 							stuffReadbuff(filebuf);
+ 							stuffReadbuff((char_u *) "\n");
+ # endif
+ 						}
+ error:
+ 						break;
+ #endif
+ #if defined(NT) && defined(USE_EXFILE) && defined(USE_MATOME)
+ 						/*
+ 						 * "gu": gzip+uuencode and other filter
+ 						 */
+ 			case 'u':	if (VIsual.lnum)
+ 						{
+ 							linenr_t		line1;
+ 							linenr_t		line2;
+ 
+ 							curbuf->b_startop = VIsual;
+ 							if (lt(curbuf->b_startop, curwin->w_cursor))
+ 							{
+ 								curbuf->b_endop = curwin->w_cursor;
+ 								curwin->w_cursor = curbuf->b_startop;
+ 							}
+ 							else
+ 							{
+ 								curbuf->b_endop = curbuf->b_startop;
+ 								curbuf->b_startop = curwin->w_cursor;
+ 							}
+ 							line1 = curbuf->b_startop.lnum;
+ 							line2 = curbuf->b_endop.lnum;
+ 							decode(FALSE, line1, line2);
+ 							VIsual.lnum = 0;
+ 							updateScreen(NOT_VALID);		/* delete the inversion */
+ 						}
+ 						break;
+ #endif
+ 
  			default:	CLEAROPBEEP;
  						break;
  		}
***************
*** 1511,1516 ****
--- 1891,1904 ----
   * The end
   */
  	  case ESC:
+ #ifdef TRACK
+ 		if (Track)
+ 		{
+ 			Track = FALSE;				/* stop track mode */
+ 			MSG("");
+ 			break;
+ 		}
+ #endif
  	    if (VIsual.lnum)
  		{
  			VIsual.lnum = 0;			/* stop Visual */
***************
*** 1546,1552 ****
--- 1934,1944 ----
  	{
  		if (operator != YANK && !VIsual.lnum)		/* can't redo yank */
  		{
+ #ifdef KANJI
+ 			prep_redo(Prenum, opchars[operator - 1], c, nchar, kchar);
+ #else
  			prep_redo(Prenum, opchars[operator - 1], c, nchar);
+ #endif
  			if (c == '/' || c == '?')				/* was a search */
  			{
  				AppendToRedobuff(searchbuff);
***************
*** 1592,1597 ****
--- 1984,1993 ----
  		{
  			curbuf->b_endop = curwin->w_cursor;
  			curwin->w_cursor = curbuf->b_startop;
+ #ifndef notdef
+ 			if (operator == YANK && VIsual.lnum && VIsual.col == VISUALLINE)
+ 				curwin->w_cursor.col = 0;
+ #endif
  		}
  		else
  		{
***************
*** 1652,1658 ****
--- 2048,2058 ----
  			resel_Visual_nlines = nlines;
  			if (operator != YANK && operator != COLON)	/* can't redo yank and : */
  			{
+ #ifdef KANJI
+ 				prep_redo(0L, 'v', opchars[operator - 1], NUL, NUL);
+ #else
  				prep_redo(0L, 'v', opchars[operator - 1], NUL);
+ #endif
  				redo_Visual_type = resel_Visual_type;
  				redo_Visual_col = resel_Visual_col;
  				redo_Visual_nlines = resel_Visual_nlines;
***************
*** 1692,1697 ****
--- 2092,2105 ----
  
  			/* no_op is set when start and end are the same */
  		no_op = (mtype == MCHAR && !mincl && equal(curbuf->b_startop, curbuf->b_endop));
+ #ifdef KANJI
+ 		if (mincl && curbuf->b_endop.col != VISUALLINE
+ 										&& ISkanji(gchar(&curbuf->b_endop)))
+ 		{
+ 			mincl = FALSE;
+ 			curbuf->b_endop.col += 2;
+ 		}
+ #endif
  
  	/*
  	 * If the end of an operator is in column one while mtype is MCHAR and mincl
***************
*** 1798,1803 ****
--- 2206,2224 ----
  		startinsert(restart_edit, FALSE, 1L);
  		modified = TRUE;
  	}
+ #ifdef FEPCTRL
+ 	else if (curbuf->b_p_fc)
+ 	{
+ 		if (FepOn && !command_busy)
+ 			curbuf->fepmode = fep_get_mode();
+ 		if (fep_get_mode())
+ 			fep_force_off();
+ 	}
+ 	FepOn = FALSE;
+ # if defined(CANNA) || defined(ONEW)
+ 	fep_visualmode(FALSE);
+ # endif
+ #endif
  
  	checkpcmark();			/* check if we moved since setting pcmark */
  
***************
*** 1819,1829 ****
--- 2240,2257 ----
  }
  
  	static void
+ #ifdef KANJI
+ prep_redo(num, cmd, c, nchar, kchar)
+ #else
  prep_redo(num, cmd, c, nchar)
+ #endif
  	long 	num;
  	int		cmd;
  	int		c;
  	int		nchar;
+ #ifdef KANJI
+ 	int		kchar;
+ #endif
  {
  	ResetRedobuff();
  	if (yankbuffer != 0)	/* yank from specified buffer */
***************
*** 1837,1843 ****
--- 2265,2279 ----
  	if (c != NUL)
  		AppendCharToRedobuff(c);
  	if (nchar != NUL)
+ #ifdef KANJI
+ 	{
+ 		AppendCharToRedobuff(nchar);
+ 		if (ISkanji(nchar))
+ 			AppendCharToRedobuff(kchar);
+ 	}
+ #else
  		AppendCharToRedobuff(nchar);
+ #endif
  }
  
  /*
***************
*** 1924,1930 ****
--- 2360,2370 ----
  		*p = NUL;
  		if (c1)
  			STRCPY(p, transchar(c1));
+ #ifdef KANJI
+ 		if (c2 && !ISkanji(c2))
+ #else
  		if (c2)
+ #endif
  			STRCAT(p, transchar(c2));
  		buf[10] = NUL;			/* truncate at maximal length */
  		msg_outstr(buf);
diff -crN ../orig/src/ops.c ./src/ops.c
*** ../orig/src/ops.c	Wed Aug 10 13:54:10 1994
--- ./src/ops.c	Wed Dec 15 14:39:22 1999
***************
*** 16,21 ****
--- 16,24 ----
  #include "proto.h"
  #include "param.h"
  #include "ops.h"
+ #ifdef KANJI
+ #include "kanji.h"
+ #endif
  
  /*
   * We have one yank buffer for normal yanks and puts, nine yank buffers for
***************
*** 28,33 ****
--- 31,39 ----
  	linenr_t 	y_size; 		/* number of lines in y_array */
  	char_u		y_type; 		/* MLINE, MCHAR or MBLOCK */
  } y_buf[36];					/* 0..9 = number buffers, 10..35 = char buffers */
+ #ifdef NT
+ static struct	yankbuf	y_clip;			/* clipboard buffer */
+ #endif
  
  static struct	yankbuf *y_current;		/* ptr to current yank buffer */
  static int		yankappend;				/* TRUE when appending */
***************
*** 38,43 ****
--- 44,53 ----
  static void		free_yank __ARGS((long));
  static void		free_yank_all __ARGS((void));
  static void		block_prep __ARGS((linenr_t, int));
+ #ifdef NT
+ static void		get_clip __ARGS((void));
+ static void		put_clip __ARGS((void));
+ #endif
  
  /* variables use by block_prep, dodelete and doyank */
  static int		startspaces;
***************
*** 83,88 ****
--- 93,101 ----
  		curwin->w_cursor.lnum -= nlines;
  	else
  		--curwin->w_cursor.lnum;		/* put cursor on last line, for ":>" */
+ #ifndef notdef
+ 	beginline(TRUE);
+ #endif
  	updateScreen(CURSUPD);
  
  	if (nlines > p_report)
***************
*** 147,152 ****
--- 160,169 ----
  {
  	if (isalnum(c) || (!write && strchr(".%:", c) != NULL) || c == '"')
  		return TRUE;
+ #ifdef NT
+ 	if (c == '@')
+ 		return TRUE;
+ #endif
  	return FALSE;
  }
  
***************
*** 180,185 ****
--- 197,211 ----
  	}
  	else			/* not 0-9, a-z or A-Z: use buffer 0 */
  		i = 0;
+ #ifdef NT
+ 	if (yankbuffer == '@')
+ 	{
+ 		if (!writing)
+ 			get_clip();
+ 		y_current = &y_clip;
+ 	}
+ 	else
+ #endif
  	y_current = &(y_buf[i]);
  	if (writing)		/* remember the buffer we write into for doput() */
  		y_previous = y_current;
***************
*** 653,658 ****
--- 679,709 ----
  	int		c;
  
  	c = gchar(pos);
+ #ifdef KANJI
+ 	if (p_jt && ISkanji(c))
+ 	{
+ 		FPOS	pos2;
+ 		char_u	k;
+ 		char_u	c1, c2;
+ 
+ 		pos2.lnum = pos->lnum;
+ 		pos2.col  = pos->col + 1;
+ 
+ 		c1 = c;
+ 		c2 = k = gchar(&pos2);
+ 
+ 		jptocase(&c1, &c2, operator);
+ 		if (c1 != c || c2 != k)
+ 		{
+ 			pchar(*pos, c1);
+ 			pchar(pos2, c2);
+ 			CHANGED;
+ 		}
+ 	}
+ 	else if (ISkanji(c))
+ 		;
+ 	else
+ #endif
  	if (islower(c) && operator != LOWER)
  	{
  		pchar(*pos, toupper(c));
***************
*** 692,697 ****
--- 743,751 ----
  {
  		register int i;
  
+ #ifdef NT
+ 		y_clip.y_array = NULL;
+ #endif
  		for (i = 0; i < 36; ++i)
  				y_buf[i].y_array = NULL;
  }
***************
*** 827,832 ****
--- 881,890 ----
  			if (yanklines == 1)		/* startop and endop on same line */
  			{
  					j = curbuf->b_endop.col - curbuf->b_startop.col + 1 - !mincl;
+ #ifdef KANJI
+ 					if (ISkanjiFpos(&curbuf->b_endop) == 2)
+ 						j++;
+ #endif
  					if ((y_current->y_array[0] = strnsave(ml_get(lnum) + curbuf->b_startop.col, (int)j)) == NULL)
  					{
  	fail:
***************
*** 855,860 ****
--- 913,922 ----
  	}
  
  success:
+ #ifdef NT
+ 	if (yankbuffer == '@')
+ 		put_clip();
+ #endif
  	if (curr != y_current)		/* append the new block to the old block */
  	{
  		new_ptr = (char_u **)lalloc((long_u)(sizeof(char_u *) * (curr->y_size + y_current->y_size)), TRUE);
***************
*** 943,949 ****
--- 1005,1019 ----
  
  	curbuf->b_startop = curwin->w_cursor;			/* default for "'[" command */
  	if (dir == FORWARD)
+ #ifdef KANJI
+ 	{
+ 		curbuf->b_startop.col++;
+ 		if (ISkanjiFpos(&curbuf->b_startop) == 2)
+ 			curbuf->b_startop.col++;
+ 	}
+ #else
  		curbuf->b_startop.col++;
+ #endif
  	curbuf->b_endop = curwin->w_cursor;				/* default for "']" command */
  	commandchar = (dir == FORWARD ? (count == -1 ? 'o' : 'a') : (count == -1 ? 'O' : 'i'));
  	if (yankbuffer == '.')		/* use inserted text */
***************
*** 1042,1047 ****
--- 1112,1126 ----
  			for (ptr = old; vcol < col && *ptr; ++ptr)
  			{
  				/* Count a tab for what it's worth (if list mode not on) */
+ #ifdef KANJI
+ 				if (ISkanji(*ptr))
+ 				{
+ 					incr = 2;
+ 					ptr ++;
+ 					textcol ++;
+ 				}
+ 				else
+ #endif
  				incr = chartabsize(*ptr, (long)vcol);
  				vcol += incr;
  				++textcol;
***************
*** 1054,1061 ****
--- 1133,1157 ----
  			{
  				endspaces = vcol - col;
  				startspaces = incr - endspaces;
+ #ifdef KANJI
+ 				if (ISkanjiPointer(old, ptr - 1) == 2)
+ 				{
+ 					/*	leave text */
+ 					endspaces = startspaces = 0;
+ 					/*	destroy text
+ 					textcol -= 2;
+ 					delchar = 2;
+ 					*/
+ 				}
+ 				else
+ 				{
+ 					--textcol;
+ 					delchar = 1;
+ 				}
+ #else
  				--textcol;
  				delchar = 1;
+ #endif
  			}
  			yanklen = STRLEN(y_array[i]);
  			totlen = count * yanklen + startspaces + endspaces;
***************
*** 1105,1110 ****
--- 1201,1214 ----
  				{
  					++curwin->w_cursor.col;
  					++curbuf->b_endop.col;
+ #ifdef KANJI
+ 					if (ISkanjiCur() == 2)
+ 					{
+ 						++col;
+ 						++curwin->w_cursor.col;
+ 						++curbuf->b_endop.col;
+ 					}
+ #endif
  				}
  			}
  			new_cursor = curwin->w_cursor;
***************
*** 1135,1140 ****
--- 1239,1248 ----
  				memmove((char *)ptr, (char *)old + col, STRLEN(old + col) + 1);
  				ml_replace(lnum, new, FALSE);
  				curwin->w_cursor.col += (colnr_t)(totlen - 1);	/* put cursor on last putted char */
+ #ifdef KANJI
+ 				if (ISkanji(*(ptr - 1)))
+ 					curwin->w_cursor.col --;
+ #endif
  			}
  			curbuf->b_endop = curwin->w_cursor;
  			updateline();
***************
*** 1224,1229 ****
--- 1332,1344 ----
  				else
  					curbuf->b_endop.col = 0;
  				curwin->w_cursor = new_cursor;
+ #ifdef NT
+ 				{
+ 					extern int		restart_edit;	/* this is in edit.c */
+ 					if (restart_edit && y_current == &y_clip)
+ 						curbuf->b_endop.col = STRLEN(y_array[y_size]);
+ 				}
+ #endif
  			}
  
  error:
***************
*** 1237,1242 ****
--- 1352,1361 ----
  			updateScreen(CURSUPD);
  		}
  	}
+ #ifdef KANJI
+ 	if (ISkanjiCur() == 2)
+ 		curwin->w_cursor.col--;
+ #endif
  
  	msgmore(nlines);
  	curwin->w_set_curswant = TRUE;
***************
*** 1256,1262 ****
--- 1375,1385 ----
  	gotocmdline(TRUE, NUL);
  
  	msg_outstr((char_u *)"--- Registers ---");
+ #ifdef NT
+ 	for (i = -1; i < 37; ++i)
+ #else
  	for (i = -1; i < 36; ++i)
+ #endif
  	{
  		if (i == -1)
  		{
***************
*** 1265,1270 ****
--- 1388,1400 ----
  			else
  				yb = &(y_buf[0]);
  		}
+ #ifdef NT
+ 		else if (i == 36)
+ 		{
+ 			get_clip();
+ 			yb = &y_clip;
+ 		}
+ #endif
  		else
  			yb = &(y_buf[i]);
  		if (yb->y_array != NULL)
***************
*** 1277,1282 ****
--- 1407,1416 ----
  				msg_outchar('"');
  				if (i < 10)
  					msg_outchar(i + '0');
+ #ifdef NT
+ 				else if (i == 36)
+ 					msg_outchar('@');
+ #endif
  				else
  					msg_outchar(i + 'a' - 10);
  			}
***************
*** 1290,1297 ****
--- 1424,1439 ----
  					msg_outstr((char_u *)"^J");
  					n -= 2;
  				}
+ #ifdef KANJI
+ 				p = yb->y_array[j];
+ 				if (STRLEN(p) < (int_u)n)
+ 					n -= msg_outtrans(p, -1);
+ 				else
+ 					n -= msg_outtrans(p, n);
+ #else
  				for (p = yb->y_array[j]; *p && (n -= charsize(*p)) >= 0; ++p)
  					msg_outtrans(p, 1);
+ #endif
  			}
  			flushbuf();				/* show one line at a time */
  		}
***************
*** 1339,1347 ****
--- 1481,1501 ----
  	int		n;
  
  	n = (int)Columns - 6;
+ #ifdef KANJI
  	while (*p && !(*p == ESC && skip_esc && *(p + 1) == NUL) &&
+ 						(n -= ISkanji(*p) ? 2 : charsize(*p)) >= 0)
+ 		if (ISkanji(*p))
+ 		{
+ 			msg_outtrans(p, 2);
+ 			p += 2;
+ 		}
+ 		else
+ 			msg_outtrans(p++, 1);
+ #else
+ 	while (*p && !(*p == ESC && skip_esc && *(p + 1) == NUL) &&
  						(n -= charsize(*p)) >= 0)
  		msg_outtrans(p++, 1);
+ #endif
  }
  
  /*
***************
*** 1418,1423 ****
--- 1572,1582 ----
  				if (currsize > 1)
  					endcurr1 = endcurr2;
  			}
+ #ifdef KANJI
+ 			if (ISkanji(*next) && ISkanjiPosition(curr, currsize) == 2)
+ 				spaces = 0;
+ 			else
+ #endif
  			if (p_js && strchr(".!?", endcurr1) != NULL)
  				spaces = 2;
  		}
***************
*** 1471,1476 ****
--- 1630,1639 ----
  	else
  	{
  		curwin->w_cursor.col = currsize - 1;
+ #ifdef KANJI
+ 		if (ISkanjiCur() == 2)
+ 			curwin->w_cursor.col--;
+ #endif
  		(void)oneright();
  	}
  	CHANGED;
***************
*** 1495,1501 ****
--- 1658,1668 ----
  
  		/* do the formatting */
  	State = INSERT;		/* for Opencmd() */
+ #ifdef KANJI
+ 	insertchar(NUL, NUL);
+ #else
  	insertchar(NUL);
+ #endif
  	State = NORMAL;
  	updateScreen(NOT_VALID);
  }
***************
*** 1526,1532 ****
--- 1693,1717 ----
  		showmode();
  
  	change_warning();		/* give a warning if readonly */
+ #ifdef FEPCTRL
+ # if defined(CANNA) || defined(ONEW)
+ 	fep_visualmode(TRUE);
+ # endif
+ 	if (curbuf->b_p_fc && curbuf->fepmode && !fep_get_mode())
+ 		fep_force_on();
+ #endif
  	edit(count);
+ #ifdef FEPCTRL
+ 	if (curbuf->b_p_fc)
+ 	{
+ 		curbuf->fepmode = fep_get_mode();
+ 		if (fep_get_mode())
+ 			fep_force_off();
+ 	}
+ # if defined(CANNA) || defined(ONEW)
+ 	fep_visualmode(FALSE);
+ # endif
+ #endif
  }
  
  /*
***************
*** 1559,1564 ****
--- 1744,1761 ----
  	while (vcol < startvcol && *textstart)
  	{
  		/* Count a tab for what it's worth (if list mode not on) */
+ #ifdef KANJI
+ 		if (ISkanji(*textstart))
+ 		{
+ 			incr = 2;
+ 			vcol += incr;
+ 			if (vcol > startvcol)
+ 				break;
+ 			textstart += incr;
+ 			textcol   += incr;
+ 			continue;
+ 		}
+ #endif
  		incr = chartabsize(*textstart, (long)vcol);
  		vcol += incr;
  		++textstart;
***************
*** 1572,1577 ****
--- 1769,1787 ----
  	else /* vcol >= startvcol */
  	{
  		startspaces = vcol - startvcol;
+ #ifdef KANJI
+ 		if (!delete && vcol > startvcol && ISkanji(*textstart))
+ 		{
+ 			startspaces = 0;
+ 			vcol -= incr;
+ 		}
+ 		else if (delete && vcol > startvcol && ISkanjiCol(lnum, textcol) == 1)
+ 		{
+ 			startspaces = 0;
+ 			vcol -= incr;
+ 		}
+ 		else
+ #endif
  		if (delete && vcol > startvcol)
  			startspaces = incr - startspaces;
  		pend = textstart;
***************
*** 1586,1591 ****
--- 1796,1810 ----
  			while (vcol <= endvcol && *pend)
  			{
  				/* Count a tab for what it's worth (if list mode not on) */
+ #ifdef KANJI
+ 				if (ISkanji(*pend))
+ 				{
+ 					incr = 2;
+ 					vcol += incr;
+ 					pend += incr;
+ 					continue;
+ 				}
+ #endif
  				incr = chartabsize(*pend, (long)vcol);
  				vcol += incr;
  				++pend;
***************
*** 1598,1603 ****
--- 1817,1827 ----
  			{
  				endspaces = vcol - endvcol - 1;
  				if (!delete && pend != textstart && endspaces)
+ #ifdef KANJI
+ 					if (ISkanjiPointer(textstart, pend - 1) == 2)
+ 						endspaces--;
+ 					else
+ #endif
  					--pend;
  			}
  		}
***************
*** 1733,1735 ****
--- 1957,2097 ----
  		return FAIL;
  	}
  }
+ 
+ #ifdef NT
+ /*
+  * Windows Clipboard Interface function.
+  *					delete/yank command.
+  *	argument NULL is yank buffer size return.
+  *	other argument is copy yank buffer.
+  */
+ int
+ yank_to_clipboard(ptr)
+ char_u			*ptr;
+ {
+ 	int			i;
+ 	int			size	= 0;
+ 	int			col;
+ 
+ 	if (ptr == NULL)
+ 	{
+ 		for (i = 0; i < y_clip.y_size; i++)
+ 			size += STRLEN(y_clip.y_array[i]) + 2;
+ 		size += 1;
+ 	}
+ 	else
+ 	{
+ 		for (i = 0; i < y_clip.y_size; i++)
+ 		{
+ 			col = STRLEN(y_clip.y_array[i]);
+ 			memmove((char *)&ptr[size], (char *)y_clip.y_array[i], (size_t)col);
+ 			ptr[size + col + 0] = '\r';
+ 			ptr[size + col + 1] = '\n';
+ 			size = size + col + 2;
+ 		}
+ 		if (y_clip.y_type == MLINE)
+ 			ptr[size] = '\0';
+ 		else
+ 			ptr[size - 2] = '\0';
+ 	}
+ 	return(size);
+ }
+ 
+ static void
+ get_clip()
+ {
+ 	extern HWND			hVimWnd;
+ 	HANDLE				hClipData;
+ 	char			*	lpClipData;
+ 	char_u			*	p;
+ 	char_u			*	t;
+ 	struct yankbuf	*	curr = y_current;
+ 	long				yanklines = 1;
+ 	long				i;
+ 	long				size;
+ 
+ 	y_current = &y_clip;
+ 	if (OpenClipboard(hVimWnd))
+ 	{
+ 		if ((hClipData = GetClipboardData(CF_TEXT)) != NULL)
+ 		{
+ 			if ((lpClipData = GlobalLock(hClipData)) != NULL)
+ 			{
+ 				free_yank_all();
+ 				p = lpClipData;
+ 				while ((p = strstr(p, "\r\n")) != NULL)
+ 				{
+ 					yanklines++;
+ 					p += 2;
+ 				}
+ 				y_clip.y_size = yanklines;
+ 				if (lpClipData[strlen(lpClipData) - 2] == '\r'
+ 						&& lpClipData[strlen(lpClipData) - 1] == '\n')
+ 					y_clip.y_type = MLINE;	/* set the yank buffer type */
+ 				else
+ 					y_clip.y_type = MCHAR;	/* set the yank buffer type */
+ 				y_clip.y_array = (char_u **)lalloc((long_u)(sizeof(char_u *) * yanklines), TRUE);
+ 				if (y_clip.y_array == NULL)
+ 				{
+ 					GlobalUnlock(hClipData);
+ 					CloseClipboard();
+ 					y_current = curr;
+ 					return;
+ 				}
+ 
+ 				p = lpClipData;
+ 				for (i = 0; i < yanklines; i++)
+ 				{
+ 					t = strstr(p, "\r\n");
+ 					if (t == NULL)
+ 						size = strlen(p);
+ 					else
+ 						size = t - p;
+ 					if ((y_clip.y_array[i] = alloc(size + 1)) == NULL)
+ 					{
+ 						free_yank(i);	/* free the lines that we allocated */
+ 						break;
+ 					}
+ 					memcpy(y_clip.y_array[i], p, size);
+ 					y_clip.y_array[i][size] = NUL;
+ 					p = t + 2;
+ 				}
+ 				GlobalUnlock(hClipData);
+ 			}
+ 		}
+ 		CloseClipboard();
+ 	}
+ 	y_current = curr;
+ }
+ 
+ static void
+ put_clip()
+ {
+ 	extern HWND			hVimWnd;
+ 	HANDLE				hClipData;
+ 	char			*	lpClipData;
+ 	long				i;
+ 
+ 	if ((i = yank_to_clipboard(NULL)) != 0)
+ 	{
+ 		hClipData = GlobalAlloc(GMEM_MOVEABLE, i);
+ 		if (hClipData == NULL)
+ 			return;
+ 		if ((lpClipData = GlobalLock(hClipData)) == NULL)
+ 		{
+ 			GlobalFree(hClipData);
+ 			return;
+ 		}
+ 		yank_to_clipboard(lpClipData);
+ 		GlobalUnlock(hClipData);
+ 		if (OpenClipboard(hVimWnd) == FALSE)
+ 		{
+ 			GlobalFree(hClipData);
+ 			return;
+ 		}
+ 		EmptyClipboard();
+ 		SetClipboardData(CF_TEXT, hClipData);
+ 		CloseClipboard();
+ 	}
+ }
+ #endif
diff -crN ../orig/src/param.c ./src/param.c
*** ../orig/src/param.c	Wed Aug 10 13:54:10 1994
--- ./src/param.c	Tue Oct 26 07:03:06 1999
***************
*** 17,22 ****
--- 17,28 ----
  #include "globals.h"
  #include "proto.h"
  #include "param.h"
+ #ifdef KANJI
+ # include "kanji.h"
+ # ifdef USE_LOCALE
+ #  include <locale.h>
+ # endif
+ #endif
  
  struct param
  {
***************
*** 63,68 ****
--- 69,95 ----
  #define PV_TX		31
  #define PV_WM		33
  
+ #ifdef KANJI
+ # define PV_JC		35
+ #endif
+ #ifdef CRMARK
+ # define PV_CR		37
+ #endif
+ #ifdef TRACK
+ # define PV_TRS		39
+ # define PV_TT		41
+ #endif
+ #ifdef FEPCTRL
+ #define PV_FC		43
+ # define PV_JI		45
+ #endif
+ #ifdef USE_OPT
+ # define PV_OPT		47
+ #endif
+ #if defined(NT) && defined(USE_EXFILE) && defined(USE_MATOME)
+ # define PV_EC		49
+ #endif
+ 
  /*
   * The param structure is initialized here.
   * The order of the parameters should be alfabetic
***************
*** 76,97 ****
  		{"autowrite",	"aw",	P_BOOL,				(char_u *)&p_aw},
  		{"backspace",	"bs",	P_NUM,				(char_u *)&p_bs},
  		{"backup",		"bk",	P_BOOL,				(char_u *)&p_bk},
! #ifdef UNIX
   		{"backupdir",	"bdir",	P_STRING|P_EXPAND,	(char_u *)&p_bdir},
  #endif
  		{"beautify",	"bf",	P_BOOL,				(char_u *)NULL},
  		{"binary",		"bin",	P_BOOL|P_IND,		(char_u *)PV_BIN},
! #ifdef MSDOS
  		{"bioskey",		"biosk",P_BOOL,				(char_u *)&p_biosk},
  #endif
  		{"cmdheight",	"ch",	P_NUM,				(char_u *)&p_ch},
  		{"columns",		"co",	P_NUM,				(char_u *)&Columns},
  		{"compatible",	"cp",	P_BOOL,				(char_u *)&p_cp},
  #ifdef DIGRAPHS
  		{"digraph",		"dg",	P_BOOL,				(char_u *)&p_dg},
  #endif /* DIGRAPHS */
   		{"directory",	"dir",	P_STRING|P_EXPAND,	(char_u *)&p_dir},
  		{"edcompatible",NULL,	P_BOOL,				(char_u *)&p_ed},
  		{"endofline",	"eol",	P_BOOL|P_IND,		(char_u *)PV_EOL},
  		{"equalalways",	"ea",  	P_BOOL,				(char_u *)&p_ea},
  		{"equalprg",	"ep",  	P_STRING|P_EXPAND,	(char_u *)&p_ep},
--- 103,138 ----
  		{"autowrite",	"aw",	P_BOOL,				(char_u *)&p_aw},
  		{"backspace",	"bs",	P_NUM,				(char_u *)&p_bs},
  		{"backup",		"bk",	P_BOOL,				(char_u *)&p_bk},
! #if defined(UNIX) || (defined(NT) && !defined(notdef))
   		{"backupdir",	"bdir",	P_STRING|P_EXPAND,	(char_u *)&p_bdir},
+ #else
+  		{"backupdir",	"bdir",	P_STRING,			(char_u *)NULL},
  #endif
  		{"beautify",	"bf",	P_BOOL,				(char_u *)NULL},
  		{"binary",		"bin",	P_BOOL|P_IND,		(char_u *)PV_BIN},
! #if defined(MSDOS) && !defined(TERMCAP)		/* DOSGEN */
  		{"bioskey",		"biosk",P_BOOL,				(char_u *)&p_biosk},
  #endif
  		{"cmdheight",	"ch",	P_NUM,				(char_u *)&p_ch},
+ #ifdef NT
+ 		{"codepage",	"cpg",	P_NUM,				(char_u *)&p_cpage},
+ #endif
  		{"columns",		"co",	P_NUM,				(char_u *)&Columns},
  		{"compatible",	"cp",	P_BOOL,				(char_u *)&p_cp},
+ #ifdef CRMARK
+ 		{"crmark",		"cm",	P_BOOL|P_IND,		(char_u *)PV_CR},
+ #endif
+ #if defined(NT) && defined(USE_MATOME)
+ 		{"decode",		"dc",	P_STRING,			(char_u *)&p_dc},
+ #endif
  #ifdef DIGRAPHS
  		{"digraph",		"dg",	P_BOOL,				(char_u *)&p_dg},
  #endif /* DIGRAPHS */
   		{"directory",	"dir",	P_STRING|P_EXPAND,	(char_u *)&p_dir},
  		{"edcompatible",NULL,	P_BOOL,				(char_u *)&p_ed},
+ #if defined(NT) && defined(USE_EXFILE) && defined(USE_MATOME)
+ 		{"encode",		"ec",  	P_STRING|P_IND,		(char_u *)PV_EC},
+ #endif
  		{"endofline",	"eol",	P_BOOL|P_IND,		(char_u *)PV_EOL},
  		{"equalalways",	"ea",  	P_BOOL,				(char_u *)&p_ea},
  		{"equalprg",	"ep",  	P_STRING|P_EXPAND,	(char_u *)&p_ep},
***************
*** 101,106 ****
--- 142,158 ----
  		{"esckeys",		"ek",	P_BOOL,				(char_u *)&p_ek},
  		{"expandtab",	"et",	P_BOOL|P_IND,		(char_u *)PV_ET},
  		{"exrc",		NULL,	P_BOOL,				(char_u *)&p_exrc},
+ #ifdef FEPCTRL
+ 		{"fepctrl",		"fc",	P_BOOL|P_IND,		(char_u *)PV_FC},
+ 		{"fepkey",		"fk",	P_STRING,			(char_u *)&p_fk},
+ 		{"fepkeys",		"fo",	P_STRING,			(char_u *)&p_fo},
+ #endif
+ #ifdef FEXRC
+ 		{"fexrc",		"fe",	P_BOOL,				(char_u *)&p_fexrc},
+ #endif
+ #ifdef USE_OPT
+ 		{"foption",		"fopt",	P_NUM|P_IND,		(char_u *)PV_OPT},
+ #endif
  		{"formatprg",	"fp",  	P_STRING|P_EXPAND,	(char_u *)&p_fp},
  		{"gdefault",	"gd",	P_BOOL,				(char_u *)&p_gd},
  		{"graphic",		"gr",	P_BOOL,				(char_u *)&p_gr},
***************
*** 113,118 ****
--- 165,188 ----
  		{"ignorecase",	"ic",	P_BOOL,				(char_u *)&p_ic},
  		{"insertmode",	"im",	P_BOOL,				(char_u *)&p_im},
  		{"joinspaces", 	"js",	P_BOOL,				(char_u *)&p_js},
+ #ifdef KANJI
+ 		{"jcode",		"jc",  	P_STRING|P_IND,		(char_u *)PV_JC},
+ #endif
+ #ifdef FEPCTRL
+ 		{"jiauto", 		"ja",	P_NUM,				(char_u *)&p_ja},
+ #endif
+ #ifdef KANJI
+ 		{"jignorecase",	"jic",	P_BOOL,				(char_u *)&p_jic},
+ #endif
+ #ifdef FEPCTRL
+ 		{"jinsertmode", "ji",	P_STRING|P_IND,		(char_u *)PV_JI},
+ #endif
+ #ifdef KANJI
+ 		{"jkanaconv",	"jkc", 	P_BOOL,				(char_u *)&p_jkc},
+ 		{"jmask",		"jm",  	P_STRING,			(char_u *)&p_jp},
+ 		{"jreplace",	"jrep",	P_BOOL,				(char_u *)&p_jrep},
+ 		{"jtilde",		"jt", 	P_BOOL,				(char_u *)&p_jt},
+ #endif
  		{"keywordprg",	"kp",  	P_STRING|P_EXPAND,	(char_u *)&p_kp},
  		{"laststatus",	"ls", 	P_NUM,				(char_u *)&p_ls},
  		{"lines",		NULL, 	P_NUM,				(char_u *)&Rows},
***************
*** 128,135 ****
--- 198,211 ----
  		{"more",		NULL,	P_BOOL,				(char_u *)&p_more},
  		{"nobuf",		"nb",	P_BOOL,				(char_u *)&p_nb},
  		{"number",		"nu",	P_BOOL|P_IND,		(char_u *)PV_NU},
+ #if defined(FEPCTRL) && defined(ONEW)
+ 		{"onewredraw",	"or",	P_BOOL,				(char_u *)&p_ordw},
+ #endif
  		{"open",		NULL,	P_BOOL,				(char_u *)NULL},
  		{"optimize",	"opt",	P_BOOL,				(char_u *)NULL},
+ #ifdef USE_OPT
+ 		{"option",		NULL,	P_NUM,				(char_u *)&p_opt},
+ #endif
  		{"paragraphs",	"para",	P_STRING,			(char_u *)&p_para},
  		{"paste",		NULL,	P_BOOL,				(char_u *)&p_paste},
  		{"patchmode",   "pm",   P_STRING,			(char_u *)&p_pm},
***************
*** 150,156 ****
  		{"shelltype",	"st",	P_NUM,				(char_u *)&p_st},
  		{"shiftround",	"sr",	P_BOOL,				(char_u *)&p_sr},
  		{"shiftwidth",	"sw",	P_NUM|P_IND,		(char_u *)PV_SW},
! #ifndef MSDOS
  		{"shortname",	"sn",	P_BOOL|P_IND,		(char_u *)PV_SN},
  #endif
  		{"showcmd",		"sc",	P_BOOL,				(char_u *)&p_sc},
--- 226,232 ----
  		{"shelltype",	"st",	P_NUM,				(char_u *)&p_st},
  		{"shiftround",	"sr",	P_BOOL,				(char_u *)&p_sr},
  		{"shiftwidth",	"sw",	P_NUM|P_IND,		(char_u *)PV_SW},
! #if !defined(MSDOS) || defined(NT)
  		{"shortname",	"sn",	P_BOOL|P_IND,		(char_u *)PV_SN},
  #endif
  		{"showcmd",		"sc",	P_BOOL,				(char_u *)&p_sc},
***************
*** 160,165 ****
--- 236,244 ----
  		{"slowopen",	"slow",	P_BOOL,				(char_u *)NULL},
  		{"smartindent", "si",	P_BOOL|P_IND,		(char_u *)PV_SI},
  		{"smarttab",	"sta",	P_BOOL,				(char_u *)&p_sta},
+ #ifndef notdef	/* vim 5.X compatible */
+ 		{"softtabstop", "sts",  P_BOOL,				(char_u *)NULL},
+ #endif
  		{"sourceany",	NULL,	P_BOOL,				(char_u *)NULL},
  		{"splitbelow",	"sb",	P_BOOL,				(char_u *)&p_sb},
  		{"suffixes",	"su",	P_STRING,			(char_u *)&p_su},
***************
*** 176,182 ****
--- 255,267 ----
  		{"timeout", 	NULL,	P_BOOL,				(char_u *)&p_timeout},
  		{"timeoutlen",	"tm",	P_NUM,				(char_u *)&p_tm},
  		{"title",	 	NULL,	P_BOOL,				(char_u *)&p_title},
+ #ifdef TRACK
+ 		{"trackset", 	"trs",	P_STRING|P_IND,		(char_u *)PV_TRS},
+ #endif
  		{"ttimeout", 	NULL,	P_BOOL,				(char_u *)&p_ttimeout},
+ #ifdef TRACK
+ 		{"ttrack", 		"tt",	P_BOOL|P_IND,		(char_u *)PV_TT},
+ #endif
  		{"ttyfast", 	"tf",	P_BOOL,				(char_u *)&p_tf},
  		{"ttytype",		NULL,	P_STRING,			(char_u *)NULL},
  		{"undolevels",	"ul",	P_NUM,				(char_u *)&p_ul},
***************
*** 190,196 ****
--- 275,289 ----
  		{"weirdinvert",	"wi",	P_BOOL,				(char_u *)&p_wi},
  		{"whichwrap",	"ww",	P_NUM,				(char_u *)&p_ww},
  		{"wildchar",	"wc", 	P_NUM,				(char_u *)&p_wc},
+ #ifdef NT
+ 		{"window",		"win", 	P_STRING,			(char_u *)&p_win},
+ #else
+ # ifndef notdef
+ 		{"window",		"win", 	P_STRING,			(char_u *)NULL},
+ # else
  		{"window",		NULL, 	P_NUM,				(char_u *)NULL},
+ # endif
+ #endif
  		{"winheight",	"wh",	P_NUM,				(char_u *)&p_wh},
  		{"wrap",		NULL,	P_BOOL|P_IND,		(char_u *)PV_WRAP},
  		{"wrapmargin",	"wm",	P_NUM|P_IND,		(char_u *)PV_WM},
***************
*** 255,262 ****
--- 348,364 ----
  		{"t_sf9",		NULL,	P_STRING,	(char_u *)&term_strings.t_sf9},
  		{"t_sf10",		NULL,	P_STRING,	(char_u *)&term_strings.t_sf10},
  		{"t_help",		NULL,	P_STRING,	(char_u *)&term_strings.t_help},
+ #if defined(KANJI) && defined(MSDOS)
+ 		{"t_del",		NULL,	P_STRING,	(char_u *)&term_strings.t_del},
+ #endif
  		{"t_undo",		NULL,	P_STRING,	(char_u *)&term_strings.t_undo},
  		{"t_csc",		NULL,	P_STRING,	(char_u *)&term_strings.t_csc},
+ #if defined(FEPCTRL) && !defined(MSDOS)
+ 		{"t_us",		NULL,	P_STRING,	(char_u *)&term_strings.t_us},
+ 		{"t_ue",		NULL,	P_STRING,	(char_u *)&term_strings.t_ue},
+ 		{"t_fb",		NULL,	P_STRING,	(char_u *)&term_strings.t_fb},
+ 		{"t_fq",		NULL,	P_STRING,	(char_u *)&term_strings.t_fq},
+ #endif
  		{NULL, NULL, 0, NULL}			/* end marker */
  };
  
***************
*** 278,283 ****
--- 380,423 ----
  	char_u	*p;
  	int		i;
  
+ #ifdef KANJI
+ 	if (p_jp == NULL)
+ 	{
+ 		static char p_jp_init[4];
+ 
+ 		STRCPY(p_jp_init, JP_DEF);
+ # ifdef UNIX
+ 		p = NULL;
+ #  ifdef USE_LOCALE
+ 		p = setlocale(LC_CTYPE, "");
+ 		if (p == NULL)
+ 			p = vimgetenv((char_u *)"LC_CTYPE");
+ #  endif
+ 		if (p == NULL)
+ 			p = vimgetenv((char_u *)"LANG");
+ 		if (p != NULL)
+ 		{
+ 			if ((STRCMP(p, "ja_JP.JIS") == 0)
+ 					|| (STRCMP(p, "ja_JP.jis7") == 0))
+ 				STRCPY(p_jp_init, "JJJ");
+ 			else if ((STRCMP(p, "ja_JP.EUC") == 0)
+ 					|| (STRCMP(p, "japanese") == 0)
+ 					|| (STRCMP(p, "ja_JP.ujis") == 0))
+ 				STRCPY(p_jp_init, "EEE");
+ 			else if ((STRCMP(p, "ja_JP.SJIS") == 0)
+ 					|| (STRCMP(p, "ja_JP.mscode") == 0))
+ 				STRCPY(p_jp_init, "SSS");
+ #  ifdef UCODE
+ 			else if (STRCMP(p, "en_US.UTF-8") == 0)
+ 				STRCPY(p_jp_init, "TTT");
+ #  endif
+ 		}
+ # endif
+ 		p_jp = p_jp_init;
+ 	}
+ 	if (JP_SYS == JP_SJIS)
+ 		p_jkc = FALSE;
+ #endif
  	if ((p = vimgetenv((char_u *)"SHELL")) != NULL
  #ifdef MSDOS
  			|| (p = vimgetenv((char_u *)"COMSPEC")) != NULL
***************
*** 318,323 ****
--- 458,503 ----
  #ifdef MSDOS
  	curbuf->b_p_tx = TRUE;		/* texmode is default for MSDOS */
  #endif
+ #ifdef KANJI
+ 	{
+ 		char_u	buf[2];
+ 		buf[0] = JP_FILE;
+ 		buf[1] = '\0';
+ 		curbuf->b_p_jc = strsave(buf);
+ 	}
+ #endif
+ #ifdef FEPCTRL
+ # ifdef NT
+ 	if (GuiWin && fep_init())
+ 	{
+ 		FepInit = TRUE;
+ 		curbuf->b_p_fc = TRUE;
+ 	}
+ 	else
+ # endif
+ 	curbuf->b_p_fc = FALSE;
+ 	curbuf->fepmode= FALSE;
+ 	curbuf->b_p_ji = strsave("a");
+ 	curbuf->knj_asc= 0;
+ #endif
+ #ifdef TRACK
+ 	curbuf->b_p_trs = strsave("as");
+ 	curbuf->b_p_tt = FALSE;
+ #endif
+ #ifdef USE_OPT
+ 	curbuf->b_p_opt = 0;
+ #endif
+ #if defined(NT) && defined(USE_EXFILE) && defined(USE_MATOME)
+ 	curbuf->b_p_ec = strsave("");
+ #endif
+ #ifdef NT
+ 	{
+ 		char p_win_init[32];
+ 		sprintf(p_win_init, "%d,%d", Columns, Rows);
+ 		if (p_win == NULL)
+ 			p_win = strsave(p_win_init);
+ 	}
+ #endif
  
  	/*
  	 * expand environment variables in some string options
***************
*** 367,372 ****
--- 547,555 ----
  	static int	save_ri = 0;
  	int			did_show = FALSE;	/* already showed one value */
  	WIN			*wp;
+ #ifdef NT
+ 	long		oldColumns = Columns;
+ #endif
  
  	if (*arg == NUL)
  	{
***************
*** 557,562 ****
--- 740,758 ----
  					else						/* Reset window title NOW */
  						mch_restore_title((int *)varp == &p_title ? 1 : 2);
  				}
+ #ifdef FEPCTRL
+ 				if ((varp == (char_u *)&curbuf->b_p_fc)
+ 							&& (*(int *)(varp) && !FepInit))
+ 				{
+ 					if (fep_init())
+ 					{
+ 						FepInit = TRUE;
+ 						mch_get_winsize();
+ 					}
+ 					else
+ 						*(int *)(varp) = 0;
+ 				}
+ #endif
  			}
  			else								/* numeric or string */
  			{
***************
*** 567,572 ****
--- 763,790 ----
  				}
  				if (flags & P_NUM)				/* numeric */
  				{
+ #ifdef USE_OPT
+ 					if ((varp == (char_u *)&p_opt)
+ 								|| (varp == (char_u *)&curbuf->b_p_opt))
+ 					{
+ 						char_u	*	p = arg + len + 1;
+ 						long		val = *(long *)(varp);
+ 
+ 						switch (*p) {
+ 						case '+':
+ 							val |= atol(++p);
+ 							break;
+ 						case '-':
+ 							val &= ~atol(++p);
+ 							break;
+ 						default:
+ 							val = atol(p);
+ 							break;
+ 						}
+ 						*(long *)(varp) = val;
+ 					}
+ 					else
+ #endif
  					*(long *)(varp) = atol((char *)arg + len + 1);
  
  					if ((long *)varp == &p_wh)
***************
*** 619,624 ****
--- 837,1046 ----
  							updateScreen(CLEAR);
  						}
  					}
+ #ifdef KANJI
+ 					/* kanji file code */
+ 					else if (varp == (char_u *)&curbuf->b_p_jc)
+ 					{
+ 						char_u	**	p	= (char_u **)varp;
+ 
+ 						if (STRLEN(*p) != 1)
+ 						{
+ 							emsg("single letter");
+ 							s = alloc(2);
+ 							if (s == NULL)
+ 								break;
+ 							free(*(char **)(varp));
+ 							s[0] = JP_FILE;
+ 							s[1] = NUL;
+ 							*(char_u **)(varp) = s;
+ 							p = (char_u **)varp;
+ 						}
+ 						if (**p == 'n' || **p == 'N') /* old version convert */
+ 							**p = 'J' + **p - 'N';
+ 						if (!STRCHR(JP_FSTR, **p))
+ 						{
+ 							emsg(JP_FSTR);
+ 							**p = JP_FILE;
+ 						}
+ 					}
+ 					else if (params[i].var == (char_u *)&p_jp)
+ 					{
+ 						char_u	*	cp;
+ 
+ 						if (STRLEN(p_jp) != 3)
+ 						{
+ 							emsg("key, display, and system");
+ 							s = alloc(STRLEN(JP_DEF) + 1);
+ 							if (s == NULL)
+ 								break;
+ 							free(*(char **)(varp));
+ 							STRCPY(s, JP_DEF);
+ 							p_jp = s;
+ 						}
+ 						for (cp = p_jp; *cp; cp++)
+ 						{
+ 							if ('a' <= *cp && *cp <= 'z')
+ 								*cp -= 'a' - 'A';
+ 							if (*cp == 'N')		/* old version convert */
+ 								*cp = JP_JIS;
+ 							if (!STRCHR(JP_STR, *cp))
+ 							{
+ 								emsg(JP_STR);
+ 								STRCPY(p_jp, JP_DEF);
+ 								break;
+ 							}
+ 						}
+ 					}
+ #endif
+ #ifdef FEPCTRL
+ 					else if (varp == (char_u *)&curbuf->b_p_ji)
+ 					{
+ 						char_u	**	p	= (char_u **)varp;
+ 
+ 						if (STRLEN(*p) != 1)
+ 						{
+ 							emsg("single letter");
+ 							s = alloc(2);
+ 							if (s == NULL)
+ 								break;
+ 							free(*(char **)(varp));
+ 							s[0] = 'a';
+ 							s[1] = NUL;
+ 							*(char_u **)(varp) = s;
+ 							p = (char_u **)varp;
+ 						}
+ 						if (!STRCHR("jJaA", **p))
+ 						{
+ 							emsg("jinsert \"jJaA\"");
+ 							**p = 'a';
+ 						}
+ 					}
+ 					else if (varp == (char_u *)&p_fk)
+ 					{
+ 						char_u	*	cp	= p_fk;
+ 
+ 						while (*cp)
+ 						{
+ 							if (*cp < '@' || '_' < *cp)
+ 							{
+ 								emsg("fepkey '@' - '_'");
+ 								STRCPY(p_fk, "\\");
+ 								break;
+ 							}
+ 							cp++;
+ 						}
+ 					}
+ #endif
+ #ifdef NT
+ 					else if (params[i].var == (char_u *)&p_win)
+ 					{
+ 						char_u	*	cp;
+ 						char_u		buf[32];
+ 						long		row = 0;
+ 						long		col = 0;
+ 						int			i;
+ 
+ 						if (NoResize && lastwin != firstwin)
+ 							break;
+ 						for (;;)
+ 						{
+ 							buf[0] = NUL;
+ 							for (i = 0, cp = p_win; *cp; cp++, i++)
+ 							{
+ 								if (*cp == ':' || *cp == ',')
+ 								{
+ 									cp++;
+ 									break;
+ 								}
+ 								else if (isdigit(*cp))
+ 									buf[i] = *cp;
+ 								else
+ 									goto error;
+ 							}
+ 							buf[i] = NUL;
+ 							if (buf[0] != NUL)
+ 								col = atol(buf);
+ 							buf[0] = NUL;
+ 							for (i = 0; *cp; cp++, i++)
+ 							{
+ 								if (isdigit(*cp))
+ 									buf[i] = *cp;
+ 								else
+ 									goto error;
+ 							}
+ 							buf[i] = NUL;
+ 							if (buf[0] != NUL)
+ 								row = atol(buf);
+ 							if (col != 0 && row != 0)
+ 							{
+ 								set_winsize((int)col, (int)row, TRUE);
+ 								break;	/* for loop */
+ 							}
+ error:
+ 							emsg("window=[0-9]*,[0-9]*");
+ 							break;
+ 						}
+ 						sprintf(buf, "%d,%d", Columns, Rows);
+ 						s = strsave(buf);
+ 						if (s == NULL)
+ 							break;
+ 						free(*(char **)(varp));
+ 						*(char_u **)(varp) = s;
+ 					}
+ #endif
+ #if defined(NT) && defined(USE_EXFILE) && defined(USE_MATOME)
+ 					/* kanji file code */
+ 					else if (varp == (char_u *)&curbuf->b_p_ec)
+ 					{
+ 						char_u	**	p	= (char_u **)varp;
+ 
+ 						if (STRLEN(*p) > 1)
+ 						{
+ 							emsg("Base64/Uuencode");
+ 							s = alloc(2);
+ 							if (s == NULL)
+ 								break;
+ 							free(*(char **)(varp));
+ 							s[0] = 'b';
+ 							s[1] = NUL;
+ 							*(char_u **)(varp) = s;
+ 							p = (char_u **)varp;
+ 						}
+ 						if ('A' <= **p && **p <= 'Z')
+ 							**p += 'a' - 'A';
+ 						if (!STRCHR("bu", **p))
+ 						{
+ 							emsg("Base64/Uuencode");
+ 							**p = 'b';
+ 						}
+ 					}
+ 					else if (params[i].var == (char_u *)&p_dc)
+ 					{
+ 						char_u	*	cp;
+ 
+ 						if (STRLEN(p_dc) > 2)
+ 						{
+ 							emsg("Base64/Uuencode/Quoted-printable/Auto and read");
+ 							s = alloc(2);
+ 							if (s == NULL)
+ 								break;
+ 							free(*(char **)(varp));
+ 							STRCPY(s, "a");
+ 							p_dc = s;
+ 						}
+ 						for (cp = p_dc; *cp; cp++)
+ 						{
+ 							if ('A' <= *cp && *cp <= 'Z')
+ 								*cp += 'a' - 'A';
+ 							if (!STRCHR("abuqr+*glcz", *cp))
+ 							{
+ 								emsg("Base64/Uuencode/Quoted-printable/Auto and read");
+ 								STRCPY(p_dc, "a");
+ 								break;
+ 							}
+ 						}
+ 					}
+ #endif
  				}
  			}
  			params[i].flags |= P_CHANGED;
***************
*** 644,649 ****
--- 1066,1087 ----
  			set_window();		/* active window may have changed */
  #endif
  		}
+ #ifdef NT
+ 		if (oldRows != Rows || oldColumns != Columns)
+ 		{
+ 			char_u		buf[32];
+ 			char_u	*	s;
+ 
+ 			set_winsize((int)Columns, (int)Rows, TRUE);
+ 			sprintf(buf, "%d,%d", Columns, Rows);
+ 			s = strsave(buf);
+ 			if (s != NULL)
+ 			{
+ 				free(p_win);
+ 				p_win = s;
+ 			}
+ 		}
+ #endif
  
  		if (curbuf->b_p_ts <= 0)
  		{
***************
*** 764,769 ****
--- 1202,1224 ----
  			*(char_u **)(params[i].var) = p;
  		}
  	}
+ #if !defined(notdef) && (defined(UNIX) || defined(NT))
+ 	if ((params[i].flags & P_EXPAND) &&
+ 				(p = *(char_u **)(params[i].var)) != NULL &&
+ 				(p == (char_u *)p_bdir || p == (char_u *)p_dir) &&
+ 				*p == '>' && (p[1] == '$' || p[1] == '~'))
+ 	{
+ 		expand_env(&(*(char_u **)(params[i].var))[1], &IObuff[1], IOSIZE - 1);
+ 		IObuff[0] = '>';
+ 		p = strsave(IObuff);
+ 		if (p)
+ 		{
+ 			if (dofree)
+ 				free(*(char_u **)(params[i].var));
+ 			*(char_u **)(params[i].var) = p;
+ 		}
+ 	}
+ #endif
  }
  
  /*
***************
*** 929,934 ****
--- 1384,1405 ----
  				home_replace(*(char_u **)(varp), NameBuff, MAXPATHL);
  				msg_outtrans(NameBuff, -1);
  			}
+ #ifdef NT
+ 			else if (varp == (char_u *)&p_win)
+ 			{
+ 				char_u		buf[32];
+ 				char_u	*	s;
+ 
+ 				sprintf(buf, "%d,%d", Columns, Rows);
+ 				s = strsave(buf);
+ 				if (s != NULL)
+ 				{
+ 					free(p_win);
+ 					p_win = s;
+ 				}
+ 				msg_outtrans(*(char_u **)(varp), -1);
+ 			}
+ #endif
  			else
  				msg_outtrans(*(char_u **)(varp), -1);
  		}
***************
*** 1073,1078 ****
--- 1544,1569 ----
  		case PV_TW:		return (char_u *)&(curbuf->b_p_tw);
  		case PV_TX:		return (char_u *)&(curbuf->b_p_tx);
  		case PV_WM:		return (char_u *)&(curbuf->b_p_wm);
+ #ifdef KANJI
+ 		case PV_JC:		return (char_u *)&(curbuf->b_p_jc);
+ #endif
+ #ifdef FEPCTRL
+ 		case PV_FC:		return (char_u *)&(curbuf->b_p_fc);
+ 		case PV_JI:		return (char_u *)&(curbuf->b_p_ji);
+ #endif
+ #ifdef CRMARK
+ 		case PV_CR:		return (char_u *)&(curwin->w_p_cr);
+ #endif
+ #ifdef TRACK
+ 		case PV_TRS:	return (char_u *)&(curbuf->b_p_trs);
+ 		case PV_TT:		return (char_u *)&(curbuf->b_p_tt);
+ #endif
+ #ifdef USE_OPT
+ 		case PV_OPT:	return (char_u *)&(curbuf->b_p_opt);
+ #endif
+ #if defined(NT) && defined(USE_EXFILE) && defined(USE_MATOME)
+ 		case PV_EC:		return (char_u *)&(curbuf->b_p_ec);
+ #endif
  		default:		EMSG("get_varp ERROR");
  	}
  	/* always return a valid pointer to avoid a crash! */
***************
*** 1092,1097 ****
--- 1583,1591 ----
  	wp_to->w_p_nu = wp_from->w_p_nu;
  	wp_to->w_p_scroll = wp_from->w_p_scroll;
  	wp_to->w_p_wrap = wp_from->w_p_wrap;
+ #ifdef CRMARK
+ 	wp_to->w_p_cr = wp_from->w_p_cr;
+ #endif
  }
  
  /*
***************
*** 1115,1120 ****
--- 1609,1633 ----
  	bp_to->b_p_ml = bp_from->b_p_ml;
  	bp_to->b_p_sn = bp_from->b_p_sn;
  	bp_to->b_p_tx = bp_from->b_p_tx;
+ #ifdef KANJI
+ 	bp_to->b_p_jc = strsave(bp_from->b_p_jc);
+ #endif
+ #ifdef FEPCTRL
+ 	bp_to->b_p_fc = bp_from->b_p_fc;
+ 	bp_to->fepmode= FALSE;
+ 	bp_to->b_p_ji = strsave(bp_from->b_p_ji);
+ 	bp_to->knj_asc= 0;
+ #endif
+ #ifdef TRACK
+ 	bp_to->b_p_trs = strsave(bp_from->b_p_trs);
+ 	bp_to->b_p_tt = bp_from->b_p_tt;
+ #endif
+ #ifdef USE_OPT
+ 	bp_to->b_p_opt = bp_from->b_p_opt;
+ #endif
+ #if defined(NT) && defined(USE_EXFILE) && defined(USE_MATOME)
+ 	bp_to->b_p_ec = strsave("");
+ #endif
  }
  
  #ifdef WEBB_COMPLETE
***************
*** 1195,1201 ****
  	{
  		p = params[i].var;
  		if (
! #ifdef UNIX
  			p == (char_u *)&p_bdir ||
  #endif
  			p == (char_u *)&p_dir || p == (char_u *)&p_path)
--- 1708,1714 ----
  	{
  		p = params[i].var;
  		if (
! #if defined(UNIX) || (defined(NT) && !defined(notdef))
  			p == (char_u *)&p_bdir ||
  #endif
  			p == (char_u *)&p_dir || p == (char_u *)&p_path)
diff -crN ../orig/src/param.h ./src/param.h
*** ../orig/src/param.h	Wed Aug 10 13:54:10 1994
--- ./src/param.h	Tue Oct 26 07:03:22 1999
***************
*** 32,41 ****
  #else
  EXTERN int	p_bk	INIT(= TRUE);		/* make backups when writing out files */
  #endif
! #ifdef MSDOS
  EXTERN int	p_biosk	INIT(= TRUE);		/* Use bioskey() instead of kbhit() */
  #endif
! #ifdef UNIX
  EXTERN char_u *p_bdir	INIT(= (char_u *)BACKUPDIR);	/* directory for backups */
  #endif
  EXTERN long	p_ch	INIT(= 1L);			/* command line height */
--- 32,41 ----
  #else
  EXTERN int	p_bk	INIT(= TRUE);		/* make backups when writing out files */
  #endif
! #if defined(MSDOS) && !defined(TERMCAP)	/* DOSGEN */
  EXTERN int	p_biosk	INIT(= TRUE);		/* Use bioskey() instead of kbhit() */
  #endif
! #if defined(UNIX) || (defined(NT) && !defined(notdef))
  EXTERN char_u *p_bdir	INIT(= (char_u *)BACKUPDIR);	/* directory for backups */
  #endif
  EXTERN long	p_ch	INIT(= 1L);			/* command line height */
***************
*** 59,65 ****
--- 59,69 ----
  # ifdef ARCHIE
  EXTERN char_u *p_efm	INIT(= (char_u *)"%f:%l:%m");	/* error format */
  # else
+ #  if defined(NT) && defined(_MSC_VER)
+ EXTERN char_u *p_efm	INIT(= (char_u *)"%f(%l) : %m %t%n:%m");
+ #  else
  EXTERN char_u *p_efm	INIT(= (char_u *)"\"%f\",%*[^0123456789]%l: %m");	/* error format */
+ #  endif
  # endif
  #endif
  #ifdef COMPATIBLE
***************
*** 70,76 ****
  EXTERN int	p_exrc	INIT(= FALSE);		/* read .exrc in current dir */
  EXTERN char_u *p_fp	INIT(= (char_u *)"");			/* name of format program */
  EXTERN int	p_gd	INIT(= FALSE);		/* /g is default for :s */
! #ifdef MSDOS
  EXTERN int	p_gr	INIT(= TRUE);		/* display graphic characters */
  #else
  EXTERN int	p_gr	INIT(= FALSE);		/* display graphic characters */
--- 74,80 ----
  EXTERN int	p_exrc	INIT(= FALSE);		/* read .exrc in current dir */
  EXTERN char_u *p_fp	INIT(= (char_u *)"");			/* name of format program */
  EXTERN int	p_gd	INIT(= FALSE);		/* /g is default for :s */
! #if defined(MSDOS) || defined(KANJI)
  EXTERN int	p_gr	INIT(= TRUE);		/* display graphic characters */
  #else
  EXTERN int	p_gr	INIT(= FALSE);		/* display graphic characters */
***************
*** 79,85 ****
--- 83,93 ----
  EXTERN long p_hi	INIT(= 20);			/* command line history size */
  EXTERN char_u *p_hf	INIT(= (char_u *)VIM_HLP);	/* name of help file */
  EXTERN int	p_hid	INIT(= FALSE);		/* buffers can be hidden */
+ #if defined(FEPCTRL) && !defined(MSDOS)
+ EXTERN char_u *p_hl	INIT(= (char_u *)"db,es,hs,rs,vi,si,fu,Fi");
+ #else
  EXTERN char_u *p_hl	INIT(= (char_u *)"db,es,hs,rs,vi,si");
+ #endif
  										/* which highlight mode to use */
  EXTERN int	p_ic	INIT(= FALSE);		/* ignore case in searches */
  EXTERN int	p_im	INIT(= FALSE);		/* start editing in input mode */
***************
*** 88,94 ****
  EXTERN int	p_js	INIT(= TRUE);		/* use two spaces after period with Join */
  EXTERN long	p_ls	INIT(= 1);			/* last window has status line */
  EXTERN int	p_magic INIT(= TRUE);		/* use some characters for reg exp */
! EXTERN char_u *p_mp	INIT(= (char_u *)"make");		/* program for :make command */
  EXTERN long p_mm	INIT(= MAXMEM);		/* maximal amount of memory for buffer */
  EXTERN long p_mmt	INIT(= MAXMEMTOT);	/* maximal amount of memory for Vim */
  EXTERN long p_mls	INIT(= 5);			/* number of mode lines */
--- 96,106 ----
  EXTERN int	p_js	INIT(= TRUE);		/* use two spaces after period with Join */
  EXTERN long	p_ls	INIT(= 1);			/* last window has status line */
  EXTERN int	p_magic INIT(= TRUE);		/* use some characters for reg exp */
! #if defined(NT) && defined(_MSC_VER)
! EXTERN char_u *p_mp	INIT(= (char_u *)"nmake");
! #else
! EXTERN char_u *p_mp	INIT(= (char_u *)"make");	/* program for :make command */
! #endif
  EXTERN long p_mm	INIT(= MAXMEM);		/* maximal amount of memory for buffer */
  EXTERN long p_mmt	INIT(= MAXMEMTOT);	/* maximal amount of memory for Vim */
  EXTERN long p_mls	INIT(= 5);			/* number of mode lines */
***************
*** 204,206 ****
--- 216,253 ----
  EXTERN int	p_wb	INIT(= TRUE);		/* write backup files */
  #endif
  EXTERN int	p_ye	INIT(= FALSE);		/* Y yanks to end of line */
+ 
+ 
+ #ifdef KANJI
+ EXTERN char *p_jp	INIT(= NULL);		/* code for Japanese letters */
+ EXTERN int	p_jkc	INIT(= TRUE);		/* half size KANA convert */
+ EXTERN int	p_jrep	INIT(= TRUE);		/* replace mode set */
+ EXTERN int	p_jt	INIT(= FALSE);		/* japanese tilde */
+ EXTERN int	p_jic	INIT(= FALSE);		/* japanese ignore case in searches */
+ #endif
+ #ifdef FEPCTRL
+ EXTERN long	p_ja	INIT(= 0);			/* number of characters to reset p_ji */
+ EXTERN char_u *p_fk	INIT(= "\\@");		/* fep on/off CTRL-\ or CTRL-@ */
+ EXTERN char_u *p_fo	INIT(= "r");		/* fep on key */
+ # ifdef ONEW
+ EXTERN int	p_ordw	INIT(= FALSE);		/* Onew status line redraw */
+ # endif
+ #endif
+ #ifdef NT
+ EXTERN char *p_win	INIT(= NULL);		/* window size */
+ EXTERN int	p_cpage	INIT(= 932);		/* Unicode Code Page */
+ #endif
+ #ifdef FEXRC
+ EXTERN int	p_fexrc	INIT(= FALSE);		/* .vimrc execute ext */
+ #endif
+ #ifdef USE_OPT
+ EXTERN int	p_opt	INIT(= 0);
+ # define OPT_EXPAND_CMDLINE		0x0001		/* expand file and directory name */
+ # define OPT_NO_SMART_CMDLINE	0x0010		/* smart command line history */
+ # define OPT_NO_ERR_DISP		0x0020		/* quickfix no error display */
+ # define OPT_NO_JIS				0x0040		/* no JIS code + SJIS/EUC decode */
+ # define OPT_ORG_BINMODE		0x0080		/* use original binary mode */
+ #endif
+ #if defined(NT) && defined(USE_MATOME)
+ EXTERN char_u *p_dc	INIT(= "a");			/* decode type auto detect */
+ #endif
diff -crN ../orig/src/pc98.c ./src/pc98.c
*** ../orig/src/pc98.c	Thu Jan 01 09:00:00 1970
--- ./src/pc98.c	Wed Oct 02 23:16:38 1996
***************
*** 0 ****
--- 1,1376 ----
+ /* vi:set ts=4 sw=4:
+  *
+  * VIM - Vi IMproved		by Bram Moolenaar
+  *
+  * Read the file "credits.txt" for a list of people who contributed.
+  * Read the file "uganda.txt" for copying and usage conditions.
+  */
+ 
+ /*
+  * msdos.c
+  *
+  * MSDOS system-dependent routines.
+  * A cheap plastic imitation of the amiga dependent code.
+  * A lot in this file was made by Juergen Weigert (jw).
+  */
+ 
+ #include <io.h>
+ #include <fcntl.h>
+ #ifndef __GO32__
+ #include <alloc.h>
+ #endif
+ #include <signal.h>
+ #include "vim.h"
+ #include "globals.h"
+ #include "param.h"
+ #include "proto.h"
+ #ifdef KANJI
+ #include "kanji.h"
+ #endif
+ 
+ static int kbhit __ARGS((void));
+ static int getch __ARGS((void));
+ static int WaitForChar __ARGS((int));
+ static int change_drive __ARGS((int));
+ static int get_row __ARGS((void));
+ 
+ typedef struct filelist
+ {
+ 	char_u	**file;
+ 	int		nfiles;
+ 	int		maxfiles;
+ } FileList;
+ 
+ static void		addfile __ARGS((FileList *, char_u *, int));
+ static int		pstrcmp();	/* __ARGS((char **, char **)); BCC does not like this */
+ static void		strlowcpy __ARGS((char_u *, char_u *));
+ static int		expandpath __ARGS((FileList *, char_u *, int, int, int));
+ 
+ static int cbrk_pressed = FALSE;	/* set by ctrl-break interrupt */
+ static int ctrlc_pressed = FALSE;	/* set when ctrl-C or ctrl-break detected */
+ static int delayed_redraw = FALSE;	/* set when ctrl-C detected */
+ 
+ 	long
+ mch_avail_mem(special)
+ 	int special;
+ {
+ #ifdef __GO32__
+ 	return 0x7fffffff;		/* virual memory eh */
+ #else
+ 	return coreleft();
+ #endif
+ }
+ 
+ 	void
+ vim_delay()
+ {
+ #if !defined(__GO32__) && defined(__BORLANDC__)
+ 	if (term_console)
+ 	{
+ 		int		x = 500;
+ 		while (x > 0)
+ 		{
+ 			if (kbhit())
+ 				break;
+ 			delay(100);
+ 			x -= 100;
+ 		}
+ 	}
+ 	else
+ #endif
+ 	sleep(1);
+ }
+ 
+ /*
+  * this version of remove is not scared by a readonly (backup) file
+  *
+  * returns -1 on error, 0 otherwise (just like remove())
+  */
+ 	int
+ vim_remove(name)
+ 	char_u *name;
+ {
+ 	setperm(name, S_IREAD|S_IWRITE);    /* default permissions */
+ 	return unlink(name);
+ }
+ 
+ static int v_col, v_row;	/* current cursor position */
+ static int v_csize;			/* cusor size */
+ static int v_attr = 0xe1;
+ static int int29h = FALSE;
+ static unsigned int far *Vram = NULL;
+ static unsigned int far *Attr = NULL;
+ #define v_refresh()			/* refresh real cursor position */	\
+ {union REGS regs; regs.h.ah=0x13; regs.x.dx=(v_row*Columns+v_col)*2; int86(0x18,&regs,&regs);}
+ 
+ /*
+  * mch_write(): write the output buffer to the screen
+  */
+ 	void
+ mch_write(s, len)
+ 	char_u	*s;
+ 	int		len;
+ {
+ 	char_u	*p;
+ 	int		row, col;
+ 	union REGS regs;
+ 	int		i, j;
+ 
+ 	if (term_console)		/* translate ESC | sequences into bios calls */
+ 	{
+ 		while (len--)
+ 		{
+ 			if (s[0] == '\n')
+ 			{
+ 				v_col = 0;
+ 				v_row++;
+ 				v_refresh();
+ 				if (v_row >= (Rows - 1))
+ 				{
+ 					for (i = 0; i < (v_row - 1) * Columns; i++)
+ 					{
+ 						Vram[i] = Vram[i + Columns];
+ 						Attr[i] = Attr[i + Columns];
+ 					}
+ 					for (i = 0; i < Columns; i++)
+ 					{
+ 						Vram[(v_row - 1) * Columns + i] = 0;
+ 						Attr[(v_row - 1) * Columns + i] = v_attr;
+ 					}
+ 					v_row = Rows - 1;
+ 				}
+ 				v_refresh();
+ 				s++;
+ 				continue;
+ 			}
+ 			else if (s[0] == '\r')
+ 			{
+ 				v_col = 0;
+ 				v_refresh();
+ 				s++;
+ 				continue;
+ 			}
+ 			else if (s[0] == '\b')		/* backspace */
+ 			{
+ 				if (--v_col < 0)
+ 					v_col = 0;
+ 				v_refresh();
+ 				s++;
+ 				continue;
+ 			}
+ 			else if (s[0] == '\a' || s[0] == '\007')
+ 			{
+ 				write(1, "\a", 1);
+ 				v_refresh();
+ 				s++;
+ 				continue;
+ 			}
+ 			else if (s[0] == ESC && len > 1 && s[1] == '|')
+ 			{
+ 				switch (s[2]) {
+ 				case 'v':
+ 				case 'V':
+ 				case 'W':
+ 							goto got3;
+ 
+ 				case 'J':	/*clrscr();*/
+ 							for (i = 0; i < Rows * Columns; i++)
+ 							{
+ 								Vram[i] = 0;
+ 								Attr[i] = v_attr;
+ 							}
+ 							v_col = v_row = 0;
+ 							goto got3;
+ 
+ 				case 'K':	/*clreol();*/
+ 							for (i = v_col; i < Columns; i++)
+ 							{
+ 								Vram[v_row * Columns + i] = 0;
+ 								Attr[v_row * Columns + i] = v_attr;
+ 							}
+ 							goto got3;
+ 
+ 				case 'L':	/*insline();*/
+ 							for (i = Rows - 1; i > v_row; i--)
+ 							{
+ 								for (j = 0; j < Columns; j++)
+ 								{
+ 									Vram[i * Columns + j]
+ 											= Vram[(i - 1) * Columns + j];
+ 									Attr[i * Columns + j]
+ 											= Attr[(i - 1) * Columns + j];
+ 								}
+ 							}
+ 							for (i = 0; i < Columns; i++)
+ 							{
+ 								Vram[v_row * Columns + i] = 0;
+ 								Attr[v_row * Columns + i] = v_attr;
+ 							}
+ 							goto got3;
+ 
+ 				case 'M':	/*delline();*/
+ 							for (i = v_row; i < (Rows - 1); i++)
+ 							{
+ 								for (j = 0; j < Columns; j++)
+ 								{
+ 									Vram[i * Columns + j]
+ 											= Vram[(i + 1) * Columns + j];
+ 									Attr[i * Columns + j]
+ 											= Attr[(i + 1) * Columns + j];
+ 								}
+ 							}
+ 							for (i = 0; i < Columns; i++)
+ 							{
+ 								Vram[(Rows - 1) * Columns + i] = 0;
+ 								Attr[(Rows - 1) * Columns + i] = v_attr;
+ 							}
+ 
+ got3:						v_refresh();
+ 							s += 3;
+ 							len -= 2;
+ 							continue;
+ 
+ 				case '0':
+ 				case '1':
+ 				case '2':
+ 				case '3':
+ 				case '4':
+ 				case '5':
+ 				case '6':
+ 				case '7':
+ 				case '8':
+ 				case '9':	p = s + 2;
+ 							row = getdigits(&p);		/* no check for length! */
+ 							if (p > s + len)
+ 								break;
+ 							if (*p == ';')
+ 							{
+ 								++p;
+ 								col = getdigits(&p);/* no check for length! */
+ 								if (p > s + len)
+ 									break;
+ 								if (*p == 'H' || *p == 'r')
+ 								{
+ 									if (*p == 'H')	/* set cursor position */
+ 									{
+ 										v_col = col - 1;
+ 										v_row = row - 1;
+ 									}
+ 									else				/* set scroll region  */
+ 									{
+ 										;/*window(1, row, Columns, col);*/
+ 									}
+ 									len -= p - s;
+ 									s = p + 1;
+ 									v_refresh();
+ 									continue;
+ 								}
+ 							}
+ 							else if (*p == 'm')
+ 							{
+ 								if (row == 0)
+ 									v_attr = 0xe1;
+ 								else
+ 									v_attr = 0xe5/*0x3f*/;
+ 								len -= p - s;
+ 								s = p + 1;
+ 								continue;
+ 							}
+ 				}
+ 			}
+ 			else if (s[0] >= ' ')
+ 			{
+ 				static unsigned int kanji = 0;
+ 				if (kanji != 0) {
+ 					unsigned int c1, c2;
+ 					kanji = sjistojis(kanji, s[0]);
+ 					c1 = (kanji & 0xff) - 0x00;
+ 					c2 = ((kanji >> 8) & 0xff) - 0x20;
+ 					Vram[v_row * Columns + v_col] = (c1 << 8) + c2;
+ 					c1 |= 0x80;
+ 					Vram[v_row * Columns + v_col + 1] = (c1 << 8) + c2;
+ 					Attr[v_row * Columns + v_col] = v_attr;
+ 					Attr[v_row * Columns + v_col + 1] = v_attr;
+ 					kanji = 0;
+ 					v_col += 2;
+ 				} else if (ISkanji(s[0])) {
+ 					kanji = s[0];
+ 				} else {
+ 					Vram[v_row * Columns + v_col] = s[0];
+ 					Attr[v_row * Columns + v_col] = v_attr;
+ 					kanji = 0;
+ 					v_col ++;
+ 				}
+ 				if (v_col >= Columns)
+ 				{
+ 					v_col = 0;
+ 					if (++v_row >= Rows)
+ 					{
+ 						for (i = 0; i < v_row * Columns; i++)
+ 						{
+ 							Vram[i] = Vram[i + Columns];
+ 							Attr[i] = Attr[i + Columns];
+ 						}
+ 						for (i = 0; i < Columns; i++)
+ 						{
+ 							Vram[v_row * Columns + i] = 0;
+ 							Attr[v_row * Columns + i] = v_attr;
+ 						}
+ 						v_row = Rows - 1;
+ 					}
+ 				}
+ 				s++;
+ 				v_refresh();
+ 				continue;
+ 			}
+ 			s++;
+ 		}
+ 	}
+ 	else
+ 	{
+ #ifdef notdef
+ 		write(1, s, (unsigned)len);
+ #else
+ 		if (int29h)
+ 		{
+ 			while (len--)
+ 			{
+ 				regs.x.ax = *s++;
+ 				int86(0x29, &regs, &regs);
+ 			}
+ 		}
+ 		else
+ 		{
+ 			while (len--)
+ 				bdos(6, *s++, 0);
+ 		}
+ #endif
+ 	}
+ }
+ 
+ 	static int
+ kbhit()
+ {
+ 	return(bdos(0xb, 0, 0) & 0xff);
+ }
+ 
+ 	static int
+ getch()
+ {
+ 	union REGS regs;
+ 	static int	r = 0;
+ 	int			c;
+ 
+ 	if (term_console)
+ 	{
+ 		if (r != 0)
+ 		{
+ 			c = r;
+ 			r = 0;
+ 			return c;
+ 		}
+ 		regs.h.ah = 0;
+ 		int86(0x18, &regs, &regs);
+ 		c = regs.h.al & 0xff;
+ 		switch (c) {
+ 		case 0:				/* special key */
+ 			c = regs.h.ah & 0xff;
+ 			switch (c) {
+ 			case 0x3d:	r = 'P'; return 0;	/* down */
+ 			case 0x3a:	r = 'H'; return 0;	/*  up  */
+ 			case 0x3b:	r = 'K'; return 0;	/* left */
+ 			case 0x3c:	r = 'M'; return 0;	/* right*/
+ 			case 0x36:	r = 'I'; return 0;	/* PgUp */
+ 			case 0x37:	r = 'Q'; return 0;	/* PgDn */
+ 			case 0x62:	r = ';'; return 0;	/*  F1  */
+ 			case 0x63:	r = '<'; return 0;	/*  F2  */
+ 			case 0x64:	r = '='; return 0;	/*  F3  */
+ 			case 0x65:	r = '>'; return 0;	/*  F4  */
+ 			case 0x66:	r = '?'; return 0;	/*  F5  */
+ 			case 0x67:	r = '@'; return 0;	/*  F6  */
+ 			case 0x68:	r = 'A'; return 0;	/*  F7  */
+ 			case 0x69:	r = 'B'; return 0;	/*  F8  */
+ 			case 0x6a:	r = 'C'; return 0;	/*  F9  */
+ 			case 0x6b:	r = 'D'; return 0;	/*  F10 */
+ 			case 0x82:	r = 'T'; return 0;	/*  SF1 */
+ 			case 0x83:	r = 'U'; return 0;	/*  SF2 */
+ 			case 0x84:	r = 'V'; return 0;	/*  SF3 */
+ 			case 0x85:	r = 'W'; return 0;	/*  SF4 */
+ 			case 0x86:	r = 'X'; return 0;	/*  SF5 */
+ 			case 0x87:	r = 'Y'; return 0;	/*  SF6 */
+ 			case 0x88:	r = 'Z'; return 0;	/*  SF7 */
+ 			case 0x89:	r = '['; return 0;	/*  SF8 */
+ 			case 0x8a:	r = '\\';return 0;	/*  SF9 */
+ 			case 0x8b:	r = ']'; return 0;	/* SF10 */
+ 			case 0x3f:		/* HELP*/
+ 			case 0xae:	r = 'O'; return 0;	/* BOTOM*/
+ 			case 0x3e:	r = 'G'; return 0;	/*  TOP */
+ 			case 0x38:	r = 'R'; return 0;	/*  INS */
+ 			case 0x39:	r = 'S'; return 0;	/*  DEL */
+ 			default:
+ 				return c;
+ 			}
+ 		default:
+ 			return c;
+ 		}
+ 	}
+ 	return(bdos(7, 0, 0) & 0xff);
+ }
+ 
+ #define POLL_SPEED 10	/* milliseconds between polls */
+ 
+ /*
+  * Simulate WaitForChar() by slowly polling with kbhit().
+  *
+  * If Vim should work over the serial line after a 'ctty com1' we must use
+  * kbhit() and getch(). (jw)
+  *
+  * return TRUE if a character is available, FALSE otherwise
+  */
+ 	static int
+ WaitForChar(msec)
+ 	int msec;
+ {
+ #if !defined(__GO32__) && defined(__BORLANDC__)
+ 	if (term_console)
+ 	{
+ 		for (;;)
+ 		{
+ 			if (kbhit() || cbrk_pressed)
+ 				return TRUE;
+ 			if (msec <= 0)
+ 				break;
+ 			delay(POLL_SPEED);		/* not DOSGEN function */
+ 			msec -= POLL_SPEED;
+ 		}
+ 	}
+ #endif
+ 	return FALSE;
+ }
+ 
+ /*
+  * GetChars(): low level input funcion.
+  * Get a characters from the keyboard.
+  * If time == 0 do not wait for characters.
+  * If time == n wait a short time for characters.
+  * If time == -1 wait forever for characters.
+  *
+  * return the number of characters obtained
+  */
+ 	int
+ GetChars(buf, maxlen, time)
+ 	char_u		*buf;
+ 	int 		maxlen;
+ 	int 		time;
+ {
+ 	int 		len = 0;
+ 	int			c;
+ 
+ 	if (term_console)
+ 		v_refresh();
+ 
+ /*
+  * if we got a ctrl-C when we were busy, there will be a "^C" somewhere
+  * on the sceen, so we need to redisplay it.
+  */
+ 	if (delayed_redraw)
+ 	{
+ 		delayed_redraw = FALSE;
+ 		updateScreen(CLEAR);
+ 		setcursor();
+ 		flushbuf();
+ 	}
+ 
+ 	if (time >= 0)
+ 	{
+ 		if (WaitForChar(time) == 0) 	/* no character available */
+ 			return 0;
+ 	}
+ 	else	/* time == -1 */
+ 	{
+ 	/*
+ 	 * If there is no character available within 2 seconds (default)
+ 	 * write the autoscript file to disk
+ 	 */
+ 		if (WaitForChar((int)p_ut) == 0)
+ 			updatescript(0);
+ 	}
+ 
+ /*
+  * Try to read as many characters as there are.
+  * Works for the controlling tty only.
+  */
+ 	--maxlen;		/* may get two chars at once */
+ 	/*
+ 	 * we will get at least one key. Get more if they are available
+ 	 * After a ctrl-break we have to read a 0 (!) from the buffer.
+ 	 * bioskey(1) will return 0 if no key is available and when a
+ 	 * ctrl-break was typed. When ctrl-break is hit, this does not always
+ 	 * implies a key hit.
+ 	 */
+ 	cbrk_pressed = FALSE;
+ 	while ((len == 0 || kbhit()) && len < maxlen)
+ 	{
+ 		switch (c = getch())
+ 		{
+ 		case 0:
+ 				*buf++ = K_NUL;
+ 				break;
+ 		case 3:
+ 				cbrk_pressed = TRUE;
+ 				/*FALLTHROUGH*/
+ 		default:
+ 				*buf++ = c;
+ 		}
+ 		len++;
+ 	}
+ 	return len;
+ }
+ 
+ /*
+  * return non-zero if a character is available
+  */
+ 	int
+ mch_char_avail()
+ {
+ 	return WaitForChar(0);
+ }
+ 
+ /*
+  * We have no job control, fake it by starting a new shell.
+  */
+ 	void
+ mch_suspend()
+ {
+ 	OUTSTR("new shell started\n");
+ 	(void)call_shell(NULL, 0, TRUE);
+ }
+ 
+ extern int _fmode;
+ /*
+  * we do not use windows, there is not much to do here
+  */
+ 	void
+ mch_windinit()
+ {
+ 	_fmode = O_BINARY;		/* we do our own CR-LF translation */
+ 	flushbuf();
+ #ifndef __GO32__
+ 	{
+ 		int	v_stat;
+ 		v_stat = ioctl(1, 0);
+ 		ioctl(1, 1, (void *)(v_stat | 0x0020));
+ 		if ((ioctl(1, 0) & 0x0090) == 0x0090)
+ 			int29h = TRUE;
+ 		ioctl(1, 1, (void *)(v_stat));
+ 	}
+ #endif
+ 	(void)mch_get_winsize();
+ }
+ 
+ 	void
+ check_win(argc, argv)
+ 	int		argc;
+ 	char	**argv;
+ {
+ 	if (!isatty(0) || !isatty(1))
+ 	{
+ 		fprintf(stderr, "VIM: no controlling terminal\n");
+ 		exit(2);
+ 	}
+ }
+ 
+ /*
+  * fname_case(): Set the case of the filename, if it already exists.
+  *				 msdos filesystem is far to primitive for that. do nothing.
+  */
+ 	void
+ fname_case(name)
+ 	char_u *name;
+ {
+ }
+ 
+ /*
+  * mch_settitle(): set titlebar of our window.
+  * Dos console has no title.
+  */
+ 	void
+ mch_settitle(title, icon)
+ 	char_u *title;
+ 	char_u *icon;
+ {
+ }
+ 
+ /*
+  * Restore the window/icon title. (which we don't have)
+  */
+ 	void
+ mch_restore_title(which)
+ 	int which;
+ {
+ }
+ 
+ /*
+  * Get name of current directory into buffer 'buf' of length 'len' bytes.
+  * Return OK for success, FAIL for failure.
+  */
+ 	int
+ vim_dirname(buf, len)
+ 	char_u	*buf;
+ 	int		len;
+ {
+ 	return (getcwd(buf, len) != NULL ? OK : FAIL);
+ }
+ 
+ /*
+  * Change default drive (just like _chdrive of Borland C 3.1)
+  */
+ 	static int
+ change_drive(drive)
+ 	int drive;
+ {
+ 	unsigned dummy;
+ 	union REGS regs;
+ 
+ 	regs.h.ah = 0x0e;
+ 	regs.h.dl = drive - 1;
+ 	intdos(&regs, &regs);	/* set default drive */
+ 	regs.h.ah = 0x19;
+ 	intdos(&regs, &regs);	/* get default drive */
+ 	if (regs.h.al == drive - 1)
+ 		return 0;
+ 	else
+ 		return -1;
+ }
+ 
+ /*
+  * get absolute filename into buffer 'buf' of length 'len' bytes
+  *
+  * return FAIL for failure, OK otherwise
+  */
+ 	int
+ FullName(fname, buf, len)
+ 	char_u	*fname, *buf;
+ 	int		len;
+ {
+ 	if (fname == NULL)	/* always fail */
+ 	{
+ 		*buf = NUL;
+ 		return FAIL;
+ 	}
+ 
+ 	if (isFullName(fname))		/* allready expanded */
+ 	{
+ 		STRNCPY(buf, fname, len);
+ 		return OK;
+ 	}
+ 
+ #ifdef __BORLANDC__		/* the old Turbo C does not have this */
+ 	if (_fullpath(buf, fname, len) == NULL)
+ 	{
+ 		STRNCPY(buf, fname, len);	/* failed, use the relative path name */
+ 		return FAIL;
+ 	}
+ 	return OK;
+ #else					/* almost the same as FullName in unix.c */
+ 	{
+ 		int		l;
+ 		char_u	olddir[MAXPATHL];
+ 		char_u	*p, *q;
+ 		int		c;
+ 		int		retval = OK;
+ 
+ 		*buf = 0;
+ 		/*
+ 		 * change to the directory for a moment,
+ 		 * and then do the getwd() (and get back to where we were).
+ 		 * This will get the correct path name with "../" things.
+ 		 */
+ 		p = strrchr(fname, '/');
+ 		q = strrchr(fname, '\\');
+ 		if (q && (p == NULL || q > p))
+ 			p = q;
+ 		q = strrchr(fname, ':');
+ 		if (q && (p == NULL || q > p))
+ 			p = q;
+ 		if (p != NULL)
+ 		{
+ 			if (getcwd(olddir, MAXPATHL) == NULL)
+ 			{
+ 				p = NULL;		/* can't get current dir: don't chdir */
+ 				retval = FAIL;
+ 			}
+ 			else
+ 			{
+ 				if (*p == ':' || (p > fname && p[-1] == ':'))
+ 					q = p + 1;
+ 				else
+ 					q = p;
+ 				c = *q;
+ 				*q = NUL;
+ 				if (chdir(fname))
+ 					retval = FAIL;
+ 				else
+ 					fname = p + 1;
+ 				*q = c;
+ 			}
+ 		}
+ 		if (getcwd(buf, len) == NULL)
+ 		{
+ 			retval = FAIL;
+ 			*buf = NUL;
+ 		}
+ 		l = STRLEN(buf);
+ 		if (l && buf[l - 1] != '/' && buf[l - 1] != '\\')
+ 			strcat(buf, "\\");
+ 		if (p)
+ 			chdir(olddir);
+ 		strcat(buf, fname);
+ 		return retval;
+ 	}
+ #endif
+ }
+ 
+ /*
+  * return TRUE is fname is an absolute path name
+  */
+ 	int
+ isFullName(fname)
+ 	char_u		*fname;
+ {
+ 	return (STRCHR(fname, ':') != NULL);
+ }
+ 
+ /*
+  * get file permissions for 'name'
+  * -1 : error
+  * else FA_attributes defined in dos.h
+  */
+ 	long
+ getperm(name)
+ 	char_u *name;
+ {
+ 	struct stat statb;
+ 	long		r;
+ 
+ 	if (stat(name, &statb))
+ 		return -1;
+ 	r = (unsigned)statb.st_mode;
+ 	return r;
+ }
+ 
+ /*
+  * set file permission for 'name' to 'perm'
+  *
+  * return FAIL for failure, OK otherwise
+  */
+ 	int
+ setperm(name, perm)
+ 	char_u	*name;
+ 	long	perm;
+ {
+ 	return chmod(name, perm);
+ }
+ 
+ /*
+  * return TRUE if "name" is a directory
+  * return FALSE if "name" is not a directory
+  * return -1 for error
+  *
+  * beware of a trailing backslash that may have been added by addfile()
+  */
+ 	int
+ isdir(name)
+ 	char_u *name;
+ {
+ 	int f;
+ 
+ 	f = getperm(name);
+ 	if (f == -1)
+ 		return -1;					/* file does not exist at all */
+     if ((f & S_IFDIR) == 0)
+         return FAIL;				/* not a directory */
+     return OK;
+ }
+ 
+ /*
+  * Careful: mch_windexit() may be called before mch_windinit()!
+  */
+ 	void
+ mch_windexit(r)
+ 	int r;
+ {
+ #ifdef FEPCTRL
+ 	if (FepInit)
+ 		fep_term();
+ #endif
+ 	settmode(0);
+ 	stoptermcap();
+ 	flushbuf();
+ 	ml_close_all(); 				/* remove all memfiles */
+ 	exit(r);
+ }
+ 
+ /*
+  * function for ctrl-break interrupt
+  */
+ 	void
+ catch_cbrk()
+ {
+ 	cbrk_pressed = TRUE;
+ 	ctrlc_pressed = TRUE;
+ 	signal(SIGINT, catch_cbrk);
+ }
+ 
+ /*
+  * ctrl-break handler for DOS. Never called when a ctrl-break is typed, because
+  * we catch interrupt 1b. If you type ctrl-C while Vim is waiting for a
+  * character this function is not called. When a ctrl-C is typed while Vim is
+  * busy this function may be called. By that time a ^C has been displayed on
+  * the screen, so we have to redisplay the screen. We can't do that here,
+  * because we may be called by DOS. The redraw is in GetChars().
+  */
+ 	static int
+ cbrk_handler()
+ {
+ 	delayed_redraw = TRUE;
+ 	return 1; 				/* resume operation after ctrl-break */
+ }
+ 
+ /*
+  * set the tty in (raw) ? "raw" : "cooked" mode
+  *
+  * Does not change the tty, as bioskey() and kbhit() work raw all the time.
+  */
+ 
+ 	void
+ mch_settmode(raw)
+ 	int  raw;
+ {
+ 	static int saved_cbrk;
+ 
+ 	if (raw)
+ 	{
+ 		saved_cbrk = getcbrk();			/* save old ctrl-break setting */
+ 		setcbrk(0);						/* do not check for ctrl-break */
+ #ifndef __GO32__
+ 		ctrlbrk(cbrk_handler);			/* vim's ctrl-break handler */
+ #endif
+ 		signal(SIGINT, catch_cbrk);
+ 		if (term_console)
+ 		{
+ 			scroll_region = FALSE;		/* terminal supports scroll region */
+ 			outstr(T_TP);				/* set colors */
+ 		}
+ 	}
+ 	else
+ 	{
+ 		setcbrk(saved_cbrk);			/* restore ctrl-break setting */
+ 		signal(SIGINT, SIG_DFL);
+ 	}
+ }
+ 
+ /*
+  * set screen mode
+  * return FAIL for failure, OK otherwise
+  */
+ 	int
+ mch_screenmode(arg)
+ 	char_u		*arg;
+ {
+ 	EMSG("Screen mode setting not supported");
+ 	return FAIL;
+ }
+ 
+ /*
+  * try to get the real window size
+  * return FAIL for failure, OK otherwise
+  */
+ 	static int
+ get_row()
+ {
+ 	int		row;
+ 
+ #ifndef __GO32__
+ #  ifdef KANJI
+ 	if ((row = *(unsigned char far *)(0x00400084L)) != 0
+ 			&& *(unsigned short far *)(0x00400085L) != 0)
+ 		row = row + 1;
+ 	else
+ #  endif
+ 	if (*(int far *)(0x0040004cl)<=4096)
+ 		row = 25;
+ 	else if ((((*(unsigned char far *)(0x0040004aL)*2*
+ 			(*(unsigned char far *)(0x00400084L)+1))+0xfff)&(~0xfff))==
+ 			*(unsigned int far *)(0x0040004cL))
+ 		row = *(unsigned char far *)(0x00400084L)+1;
+ #else
+ 	row = 25;
+ #endif
+ 	return row;
+ }
+ 
+ 	int
+ mch_get_winsize()
+ {
+ 	if (term_console)
+ 	{
+ 		union REGS	regs;
+ 		unsigned char far *p;
+ 
+ 		regs.h.ah = 0x0b;	/* CRT mode sense */
+ 		int86(0x18, &regs, &regs);
+ 		p = MK_FP(0x0040, 0x0000);
+ 		if (p[0x101] & 0x08)	/* hi-reso */
+ 		{
+ 			Vram = MK_FP(0xe000, 0);
+ 			Attr = MK_FP(0xe200, 0);
+ 			Rows = (regs.h.al & 0x10) ? 31 : 25;
+ 		}
+ 		else
+ 		{
+ 			Vram = MK_FP(0xa000, 0);
+ 			Attr = MK_FP(0xa200, 0);
+ 			Rows = (regs.h.al & 0x01) ? 20 : 25;
+ 		}
+ 		Columns = 80;
+ 		p = MK_FP(0x0060, 0x0000);
+ 		if (p[0x0111] & 0x01)
+ 			Rows--;
+ 		scroll_region = FALSE;		/* terminal supports scroll region */
+ 	}
+ 	else
+ 	{
+ 		char	*p;
+ 
+ 		Columns = 0;
+ 		Rows = 0;
+ 		if ((p = (char *)vimgetenv("LINES")) != NULL)
+ 			Rows = atoi(p);
+ 		if ((p = (char *)vimgetenv("COLUMNS")) != NULL)
+ 			Columns = atoi(p);
+ #ifdef TERMCAP
+ 		if (Columns == 0 || Rows == 0)
+ 		{
+ 			extern void getlinecol __ARGS((void));
+ 			getlinecol();
+ 		}
+ #endif
+ 	}
+ 	if (Columns < 5 || Columns > MAX_COLUMNS ||
+ 					Rows < 2 || Rows > MAX_COLUMNS)
+ 	{
+ 		/* these values are overwritten by termcap size or default */
+ 		Columns = 80;
+ 		Rows = 25;
+ 		return FAIL;
+ 	}
+ 	check_winsize();
+ 
+ 	return OK;
+ }
+ 
+ /*
+  * Set the active window for delline/insline.
+  */
+ 	void
+ set_window()
+ {
+ }
+ 
+ 	void
+ mch_set_winsize()
+ {
+ 	/* should try to set the window size to Rows and Columns */
+ 	/* may involve switching display mode.... */
+ }
+ 
+ /*
+  * call shell, return FAIL for failure, OK otherwise
+  */
+ 	int
+ call_shell(cmd, filter, cooked)
+ 	char_u	*cmd;
+ 	int 	filter; 		/* if != 0: called by dofilter() */
+ 	int		cooked;
+ {
+ 	int		x;
+ 	char_u	newcmd[200];
+ 
+ 	flushbuf();
+ 
+ #ifdef FEPCTRL
+ 	if (FepInit)
+ 		fep_term();
+ #endif
+ 
+ 	if (cooked)
+ 		settmode(0);		/* set to cooked mode */
+ 
+ 	if (cmd == NULL)
+ 		x = system(p_sh);
+ 	else
+ 	{ 					/* we use "command" to start the shell, slow but easy */
+ 		sprintf(newcmd, "%s /c %s", p_sh, cmd);
+ 		x = system(newcmd);
+ 	}
+ 	outchar('\n');
+ 	if (cooked)
+ 		settmode(1);		/* set to raw mode */
+ 
+ #ifdef WEBB_COMPLETE
+ 	if (x && !expand_interactively)
+ #else
+ 	if (x)
+ #endif
+ 	{
+ 		outnum((long)x);
+ 		outstrn((char_u *)" returned\n");
+ 	}
+ 
+ #ifdef FEPCTRL
+ 	if (FepInit)
+ 		fep_init();
+ #endif
+ 
+ 	resettitle();
+ 	(void)mch_get_winsize();		/* display mode may have been changed */
+ 	return (x ? FAIL : OK);
+ }
+ 
+ /*
+  * check for an "interrupt signal": CTRL-break or CTRL-C
+  */
+ 	void
+ breakcheck()
+ {
+ 	if (ctrlc_pressed)
+ 	{
+ 		ctrlc_pressed = FALSE;
+ 		got_int = TRUE;
+ 	}
+ }
+ 
+ #define FL_CHUNK 32
+ 
+ 	static void
+ addfile(fl, f, isdir)
+ 	FileList	*fl;
+ 	char_u		*f;
+ 	int			isdir;
+ {
+ 	char_u		*p;
+ 
+ 	if (!fl->file)
+ 	{
+ 		fl->file = (char_u **)alloc(sizeof(char_u *) * FL_CHUNK);
+ 		if (!fl->file)
+ 			return;
+ 		fl->nfiles = 0;
+ 		fl->maxfiles = FL_CHUNK;
+ 	}
+ 	if (fl->nfiles >= fl->maxfiles)
+ 	{
+ 		char_u	**t;
+ 		int		i;
+ 
+ 		t = (char_u **)lalloc((long_u)(sizeof(char_u *) * (fl->maxfiles + FL_CHUNK)), TRUE);
+ 		if (!t)
+ 			return;
+ 		for (i = fl->nfiles - 1; i >= 0; i--)
+ 			t[i] = fl->file[i];
+ 		free(fl->file);
+ 		fl->file = t;
+ 		fl->maxfiles += FL_CHUNK;
+ 	}
+ 	p = alloc((unsigned)(STRLEN(f) + 1 + isdir));
+ 	if (p)
+ 	{
+ 		STRCPY(p, f);
+ 		if (isdir)
+ #ifndef notdef
+ 			if (STRCHR(p, '/') != NULL)
+ 				strcat(p, "/");
+ 			else
+ #endif
+ 			strcat(p, "\\");
+ 	}
+ 	fl->file[fl->nfiles++] = p;
+ }
+ 
+ 	static int
+ pstrcmp(a, b)
+ 	char_u **a, **b;
+ {
+ 	return (strcmp(*a, *b));
+ }
+ 
+ 	int
+ has_wildcard(s)
+ 	char_u *s;
+ {
+ 	if (s)
+ #ifndef notdef
+ 		if (*s == '~' || *s == '$')
+ 			return 1;
+ 		else
+ #endif
+ 		for ( ; *s; ++s)
+ #ifdef XARGS
+ 			if (*s == '[' || *s == '`' || *s == '{' || *s == '$' || *s == '~')
+ 				return TRUE;
+ 			else
+ #endif
+ 			if (*s == '?' || *s == '*')
+ 				return TRUE;
+ 	return FALSE;
+ }
+ 
+ 	static void
+ strlowcpy(d, s)
+ 	char_u *d, *s;
+ {
+ 	while (*s)
+ 		*d++ = tolower(*s++);
+ 	*d = '\0';
+ }
+ 
+ 	static int
+ expandpath(fl, path, fonly, donly, notf)
+ 	FileList	*fl;
+ 	char_u		*path;
+ 	int			fonly, donly, notf;
+ {
+ 	char_u	buf[MAXPATH];
+ 	char_u	*p, *s, *e;
+ 	int		lastn, c, r;
+ 	struct	ffblk fb;
+ 
+ 	lastn = fl->nfiles;
+ 
+ /*
+  * Find the first part in the path name that contains a wildcard.
+  * Copy it into buf, including the preceding characters.
+  */
+ 	p = buf;
+ 	s = NULL;
+ 	e = NULL;
+ #ifndef notdef
+ 	memset(buf, NUL, sizeof(buf));
+ #endif
+ 	while (*path)
+ 	{
+ 		if (*path == '\\' || *path == ':' || *path == '/')
+ 		{
+ 			if (e)
+ 				break;
+ 			else
+ 				s = p;
+ 		}
+ 		if (*path == '*' || *path == '?')
+ 			e = p;
+ 		*p++ = *path++;
+ 	}
+ 	e = p;
+ 	if (s)
+ 		s++;
+ 	else
+ 		s = buf;
+ 
+ 	/* if the file name ends in "*" and does not contain a ".", addd ".*" */
+ 	if (e[-1] == '*' && STRCHR(s, '.') == NULL)
+ 	{
+ 		*e++ = '.';
+ 		*e++ = '*';
+ 	}
+ 	/* now we have one wildcard component between s and e */
+ 	*e = '\0';
+ 	r = 0;
+ 	/* If we are expanding wildcards we try both files and directories */
+ 	if ((c = findfirst(buf, &fb, (*path || !notf) ? FA_DIREC : 0)) != 0)
+ 	{
+ 		/* not found */
+ #ifndef notdef
+ 		if (has_wildcard(buf))
+ 			return 0;
+ #endif
+ 		STRCPY(e, path);
+ 		if (notf)
+ 			addfile(fl, buf, FALSE);
+ 		return 1; /* unexpanded or empty */
+ 	}
+ 	while (!c)
+ 	{
+ 		strlowcpy(s, fb.ff_name);
+ 			/* ignore "." and ".." */
+ 		if (*s != '.' || (s[1] != '\0' && (s[1] != '.' || s[2] != '\0')))
+ 		{
+ 			strcat(buf, path);
+ 			if (!has_wildcard(path))
+ 				addfile(fl, buf, (isdir(buf) == TRUE));
+ 			else
+ 				r |= expandpath(fl, buf, fonly, donly, notf);
+ 		}
+ 		c = findnext(&fb);
+ 	}
+ 	qsort(fl->file + lastn, fl->nfiles - lastn, sizeof(char_u *), pstrcmp);
+ 	return r;
+ }
+ 
+ /*
+  * MSDOS rebuilt of Scott Ballantynes ExpandWildCard for amiga/arp.
+  * jw
+  */
+ 
+ 	int
+ ExpandWildCards(num_pat, pat, num_file, file, files_only, list_notfound)
+ 	int 	num_pat;
+ 	char_u	**pat;
+ 	int 	*num_file;
+ 	char_u	***file;
+ 	int 	files_only, list_notfound;
+ {
+ 	int			i, r = 0;
+ 	FileList	f;
+ #ifndef notdef
+ 	char_u		buf[MAXPATHL];
+ # ifdef XARGS
+ 	int			j;
+ 	char	**	result;
+ # endif
+ #endif
+ 
+ 	f.file = NULL;
+ 	f.nfiles = 0;
+ 	for (i = 0; i < num_pat; i++)
+ 	{
+ #ifndef notdef
+ 		expand_env(pat[i], buf, MAXPATHL);
+ # ifdef XARGS
+ 		result = glob_filename(buf);
+ 		for (j = 0; result[j] != NULL; j++)
+ 		{
+ 			if (!has_wildcard(result[j]))
+ 				addfile(&f, result[j], files_only ? FALSE : (isdir(result[j]) == TRUE));
+ 			else
+ 				r |= expandpath(&f, result[j], files_only, 0, list_notfound);
+ 			free(result[j]);
+ 		}
+ 		free(result);
+ # else
+ 		if (!has_wildcard(buf))
+ 			addfile(&f, buf, files_only ? FALSE : (isdir(pat[i]) == TRUE));
+ 		else
+ 			r |= expandpath(&f, buf, files_only, 0, list_notfound);
+ # endif
+ #else
+ 		if (!has_wildcard(pat[i]))
+ 			addfile(&f, pat[i], files_only ? FALSE : (isdir(pat[i]) == TRUE));
+ 		else
+ 			r |= expandpath(&f, pat[i], files_only, 0, list_notfound);
+ #endif
+ 	}
+ 	if (f.nfiles != 0)
+ 	{
+ 		*num_file = f.nfiles;
+ 		*file = f.file;
+ 	}
+ 	else
+ 	{
+ 		*num_file = 0;
+ 		*file = NULL;
+ 	}
+ 	return (r ? FAIL : OK);
+ }
+ 
+ 	void
+ FreeWild(num, file)
+ 	int		num;
+ 	char_u	**file;
+ {
+ 	if (file == NULL || num <= 0)
+ 		return;
+ 	while (num--)
+ 		free(file[num]);
+ 	free(file);
+ }
+ 
+ /*
+  * The normal chdir() does not change the default drive.
+  * This one does.
+  */
+ #undef chdir
+ 	int
+ vim_chdir(path)
+ 	char_u *path;
+ {
+ 	if (path[0] == NUL)				/* just checking... */
+ 		return 0;
+ 	if (path[1] == ':')				/* has a drive name */
+ 	{
+ 		if (change_drive(toupper(path[0]) - 'A' + 1))
+ 			return -1;				/* invalid drive name */
+ 		path += 2;
+ 	}
+ 	if (*path == NUL)				/* drive name only */
+ 		return 0;
+ 	return chdir(path);				/* let the normal chdir() do the rest */
+ }
+ 
+ 
+ 	void
+ chk_ctlkey(c, k)
+ 	int		*c;
+ 	int		*k;
+ {
+ 	int		w;
+ 
+ 	if (term_console)
+ 		return;
+ 	while (1)
+ 	{
+ 		if (*c == Ctrl('Q') || *c == Ctrl(']'))
+ 		{
+ 			w = vgetc();
+ 			switch (w) {
+ 			case 'h':
+ 				*c = K_LARROW;
+ 				break;
+ 			case 'j':
+ 				*c = K_DARROW;
+ 				break;
+ 			case 'k':
+ 				*c = K_UARROW;
+ 				break;
+ 			case 'l':
+ 				*c = K_RARROW;
+ 				break;
+ 			case 'H':
+ 			case 'b':
+ 				*c = K_SLARROW;
+ 				break;
+ 			case 'J':
+ 			case Ctrl('F'):
+ 				*c = K_SDARROW;
+ 				break;
+ 			case 'K':
+ 			case Ctrl('B'):
+ 				*c = K_SUARROW;
+ 				break;
+ 			case 'L':
+ 			case 'w':
+ 				*c = K_SRARROW;
+ 				break;
+ 			default:
+ 				beep();
+ 				if (ISkanji(w))
+ 					vgetc();
+ 				*c = vgetc();
+ 				if (ISkanji(*c))
+ 					*k = vgetc();
+ 				continue;
+ 			}
+ 		}
+ 		break;
+ 	}
+ }
diff -crN ../orig/src/proto/alloc.pro ./src/proto/alloc.pro
*** ../orig/src/proto/alloc.pro	Wed Aug 10 13:56:04 1994
--- ./src/proto/alloc.pro	Sun Jun 16 17:14:14 1996
***************
*** 3,8 ****
  unsigned char *lalloc __PARMS((unsigned long size, int message));
  unsigned char *strsave __PARMS((unsigned char *string));
  unsigned char *strnsave __PARMS((unsigned char *string, int len));
! void copy_spaces __PARMS((unsigned char *ptr, unsigned long count));
  void del_spaces __PARMS((unsigned char *ptr));
! int vim_strnicmp __PARMS((unsigned char *s1, unsigned char *s2, unsigned long len));
--- 3,8 ----
  unsigned char *lalloc __PARMS((unsigned long size, int message));
  unsigned char *strsave __PARMS((unsigned char *string));
  unsigned char *strnsave __PARMS((unsigned char *string, int len));
! void copy_spaces __PARMS((unsigned char *ptr, size_t count));
  void del_spaces __PARMS((unsigned char *ptr));
! int vim_strnicmp __PARMS((unsigned char *s1, unsigned char *s2, size_t len));
diff -crN ../orig/src/proto/charset.pro ./src/proto/charset.pro
*** ../orig/src/proto/charset.pro	Wed Aug 10 13:56:58 1994
--- ./src/proto/charset.pro	Sun Jun 16 17:14:16 1996
***************
*** 4,6 ****
--- 4,9 ----
  int strsize __PARMS((unsigned char *s));
  int chartabsize __PARMS((int c, long col));
  int isidchar __PARMS((int c));
+ #ifndef notdef
+ int isabchar __PARMS((int c));
+ #endif
diff -crN ../orig/src/proto/edit.pro ./src/proto/edit.pro
*** ../orig/src/proto/edit.pro	Wed Aug 10 14:00:54 1994
--- ./src/proto/edit.pro	Sun Jun 16 17:14:16 1996
***************
*** 1,7 ****
--- 1,12 ----
  /* edit.c */
  void edit __PARMS((long count));
+ #ifdef KANJI
+ int get_literal __PARMS((int *nextc, int *kp));
+ void insertchar __PARMS((unsigned int c, unsigned int k));
+ #else
  int get_literal __PARMS((int *nextc));
  void insertchar __PARMS((unsigned int c));
+ #endif
  void beginline __PARMS((int flag));
  int oneright __PARMS((void));
  int oneleft __PARMS((void));
diff -crN ../orig/src/proto/fepctrl.pro ./src/proto/fepctrl.pro
*** ../orig/src/proto/fepctrl.pro	Thu Jan 01 09:00:00 1970
--- ./src/proto/fepctrl.pro	Sun Aug 22 07:31:12 1999
***************
*** 0 ****
--- 1,58 ----
+ /* fepctrl.c */
+ #ifdef CANNA
+ #define fep_init		canna_init
+ #define fep_term		canna_term
+ #define fep_on			canna_on
+ #define fep_off			canna_off
+ #define fep_force_on	canna_force_on
+ #define fep_force_off	canna_force_off
+ #define fep_get_mode	canna_get_mode
+ #define fep_visualmode	canna_visualmode
+ #define fep_resize		canna_resize
+ #define fep_isready		canna_isready
+ #define fep_getkey		canna_getkey
+ #define fep_inject		canna_inject
+ #endif
+ #ifdef ONEW
+ #define fep_init		onew_init
+ #define fep_term		onew_term
+ #define fep_on			onew_on
+ #define fep_off			onew_off
+ #define fep_force_on	onew_force_on
+ #define fep_force_off	onew_force_off
+ #define fep_get_mode	onew_get_mode
+ #define fep_visualmode	onew_visualmode
+ #define fep_resize		onew_resize
+ #define fep_isready		onew_isready
+ #define fep_getkey		onew_getkey
+ #define fep_inject		onew_inject
+ #define isdir			vim_isdir
+ #endif
+ 
+ int		fep_init __PARMS((void));
+ void	fep_term __PARMS((void));
+ void	fep_on __PARMS((void));
+ void	fep_off __PARMS((void));
+ void	fep_force_on __PARMS((void));
+ void	fep_force_off __PARMS((void));
+ int		fep_get_mode __PARMS((void));
+ 
+ #ifdef NT
+ void	fep_win_sync __PARMS((HWND));
+ void	fep_win_font __PARMS((HWND, LOGFONT	*));
+ #endif
+ 
+ #if defined(CANNA) || defined(ONEW)
+ void	fep_visualmode __PARMS((int));
+ void	fep_resize __PARMS((void));
+ int		fep_isready __PARMS((void));
+ int		fep_getkey __PARMS((void));
+ void	fep_inject __PARMS((int));
+ #endif
+ #ifdef CANNA
+ extern	int		canna_empty;
+ void	canna_echoback __PARMS((void));
+ #endif
+ #ifdef ONEW
+ void	onew_freqsave __PARMS((void));
+ #endif
diff -crN ../orig/src/proto/fileio.pro ./src/proto/fileio.pro
*** ../orig/src/proto/fileio.pro	Wed Aug 10 14:01:26 1994
--- ./src/proto/fileio.pro	Sun Jun 16 17:14:18 1996
***************
*** 4,7 ****
  int buf_write __PARMS((struct buffer *buf, unsigned char *fname, unsigned char *sfname, long start, long end, int append, int forceit, int reset_changed));
  unsigned char *modname __PARMS((unsigned char *fname, unsigned char *ext));
  unsigned char *buf_modname __PARMS((struct buffer *buf, unsigned char *fname, unsigned char *ext));
! int vim_fgets __PARMS((unsigned char *buf, int size, struct __stdio *fp, int *lnum));
--- 4,7 ----
  int buf_write __PARMS((struct buffer *buf, unsigned char *fname, unsigned char *sfname, long start, long end, int append, int forceit, int reset_changed));
  unsigned char *modname __PARMS((unsigned char *fname, unsigned char *ext));
  unsigned char *buf_modname __PARMS((struct buffer *buf, unsigned char *fname, unsigned char *ext));
! int vim_fgets __PARMS((unsigned char *buf, int size, FILE *fp, int *lnum));
diff -crN ../orig/src/proto/getchar.pro ./src/proto/getchar.pro
*** ../orig/src/proto/getchar.pro	Wed Aug 10 14:02:00 1994
--- ./src/proto/getchar.pro	Sun Jun 16 17:14:18 1996
***************
*** 23,27 ****
  int vpeekc __PARMS((void));
  int domap __PARMS((int maptype, unsigned char *keys, int mode));
  int check_abbr __PARMS((int c, unsigned char *ptr, int col, int mincol));
! int makemap __PARMS((struct __stdio *fd));
! int putescstr __PARMS((struct __stdio *fd, unsigned char *str, int set));
--- 23,27 ----
  int vpeekc __PARMS((void));
  int domap __PARMS((int maptype, unsigned char *keys, int mode));
  int check_abbr __PARMS((int c, unsigned char *ptr, int col, int mincol));
! int makemap __PARMS((FILE *fd));
! int putescstr __PARMS((FILE *fd, unsigned char *str, int set));
diff -crN ../orig/src/proto/kanji.pro ./src/proto/kanji.pro
*** ../orig/src/proto/kanji.pro	Thu Jan 01 09:00:00 1970
--- ./src/proto/kanji.pro	Sat Sep 25 20:11:46 1999
***************
*** 0 ****
--- 1,32 ----
+ /* kanji.c */
+ int		ISkanji			__ARGS((int));
+ int		ISkana			__ARGS((int));
+ int		ISdisp			__ARGS((int));
+ int		ISkanjiPosition	__ARGS((unsigned char *, int));
+ int		ISkanjiPointer	__ARGS((unsigned char *, unsigned char *));
+ int		ISkanjiCol		__ARGS((linenr_t, colnr_t));
+ int		ISkanjiCur		__ARGS((void));
+ int		ISkanjiFpos		__ARGS((FPOS *));
+ int		vcol2col		__ARGS((WIN *, linenr_t, colnr_t, int *));
+ int_u	sjistojis		__ARGS((char_u, char_u));
+ int_u	jistosjis		__ARGS((char_u, char_u));
+ void	kanjito			__ARGS((char_u *, char_u *, char));
+ void	kanato			__ARGS((char_u *, char_u *, char));
+ char_u *JPdisp			__ARGS((int_u *, int, int));
+ int		jpcls			__ARGS((char_u, char_u));
+ int		isjppunc		__ARGS((char_u, char_u, int));
+ int		isaspunc		__ARGS((char_u, int));
+ int		isjsend			__ARGS((char_u *));
+ void	jptocase		__ARGS((char_u *, char_u *, int));
+ int		judge_jcode		__ARGS((char_u *, char_u *, long));
+ int		kanjiconvsfrom	__ARGS((char_u*, int, char_u*, int, char*, char, int*));
+ char_u *kanjiconvsto	__ARGS((char_u *, char_u));
+ char   *fileconvsfrom	__ARGS((char_u *));
+ char   *fileconvsto		__ARGS((char_u *));
+ void	binaryconvsfrom	__ARGS((linenr_t, char, int *, char_u *, int, char_u *));
+ char_u *binaryconvsto	__ARGS((char, char_u *, int *));
+ int		jp_strnicmp		__ARGS((char_u *, char_u *, size_t));
+ #ifdef UCODE
+ int		wide2multi		__ARGS((char_u *, int, int));
+ void	multi2wide		__ARGS((char_u *, char_u *, int));
+ #endif
diff -crN ../orig/src/proto/main.pro ./src/proto/main.pro
*** ../orig/src/proto/main.pro	Wed Aug 10 14:03:22 1994
--- ./src/proto/main.pro	Tue Dec 15 14:26:54 1998
***************
*** 1,3 ****
  /* main.c */
! void main __PARMS((int argc, char **argv));
  void getout __PARMS((int r));
--- 1,3 ----
  /* main.c */
! int main __PARMS((int argc, char **argv));
  void getout __PARMS((int r));
diff -crN ../orig/src/proto/misccmds.pro ./src/proto/misccmds.pro
*** ../orig/src/proto/misccmds.pro	Wed Aug 10 14:05:48 1994
--- ./src/proto/misccmds.pro	Sun Jun 16 17:14:18 1996
***************
*** 6,12 ****
--- 6,16 ----
  int plines_win __PARMS((struct window *wp, long p));
  int plines_m __PARMS((long first, long last));
  int plines_m_win __PARMS((struct window *wp, long first, long last));
+ #ifdef KANJI
+ void inschar __PARMS((int c, int k));
+ #else
  void inschar __PARMS((int c));
+ #endif
  void insstr __PARMS((unsigned char *s));
  int delchar __PARMS((int fixpos));
  void dellines __PARMS((long nlines, int dowindow, int undo));
diff -crN ../orig/src/proto/msdos.pro ./src/proto/msdos.pro
*** ../orig/src/proto/msdos.pro	Fri Aug 05 13:37:50 1994
--- ./src/proto/msdos.pro	Wed Aug 25 23:25:52 1999
***************
*** 14,20 ****
--- 14,24 ----
  int 	GetChars __ARGS((char_u *, int, int));
  int		mch_char_avail __ARGS((void));
  void	mch_suspend __ARGS((void));
+ #ifdef NT
+ void	mch_windinit __ARGS((int, char **));
+ #else
  void	mch_windinit __ARGS((void));
+ #endif
  void	check_win __ARGS((int, char **));
  void	fname_case __ARGS((char_u *));
  void	mch_settitle __ARGS((char_u *, char_u *));
***************
*** 38,40 ****
--- 42,62 ----
  int		ExpandWildCards __ARGS((int, char_u **, int *, char_u ***, int, int));
  void	FreeWild __ARGS((int, char_u **));
  int		vim_chdir __ARGS((char_u *));
+ 
+ /* prototypes from dos_v.c/winnt.c */
+ #ifdef TERMCAP		/* DOSGEN */
+ void	chk_ctlkey __ARGS((int *, int *));
+ #endif
+ 
+ /* prototypes from winnt.c */
+ #ifdef NT
+ # ifdef __BORLANDC__
+ void	sleep __ARGS((int));
+ # else
+ int		sleep __ARGS((int));
+ # endif
+ void	wincmd_paste __ARGS((void));
+ void	wincmd_cut __ARGS((void));
+ void	wincmd_delete __ARGS((void));
+ void	wincmd_active __ARGS((void));
+ #endif
diff -crN ../orig/src/proto/ops.pro ./src/proto/ops.pro
*** ../orig/src/proto/ops.pro	Wed Aug 10 14:06:54 1994
--- ./src/proto/ops.pro	Sat Jan 10 12:37:28 1998
***************
*** 19,21 ****
--- 19,24 ----
  void doformat __PARMS((void));
  void startinsert __PARMS((int initstr, int startln, long count));
  int doaddsub __PARMS((int command, long Prenum1));
+ #ifdef NT
+ int yank_to_clipboard __PARMS((char_u *ptr));
+ #endif
diff -crN ../orig/src/proto/param.pro ./src/proto/param.pro
*** ../orig/src/proto/param.pro	Wed Aug 10 14:07:26 1994
--- ./src/proto/param.pro	Sun Jun 16 17:14:20 1996
***************
*** 2,8 ****
  void set_init __PARMS((void));
  int doset __PARMS((unsigned char *arg));
  void paramchanged __PARMS((unsigned char *arg));
! int makeset __PARMS((struct __stdio *fd));
  void clear_termparam __PARMS((void));
  void comp_col __PARMS((void));
  void win_copy_options __PARMS((struct window *wp_from, struct window *wp_to));
--- 2,8 ----
  void set_init __PARMS((void));
  int doset __PARMS((unsigned char *arg));
  void paramchanged __PARMS((unsigned char *arg));
! int makeset __PARMS((FILE *fd));
  void clear_termparam __PARMS((void));
  void comp_col __PARMS((void));
  void win_copy_options __PARMS((struct window *wp_from, struct window *wp_to));
diff -crN ../orig/src/proto/search.pro ./src/proto/search.pro
*** ../orig/src/proto/search.pro	Wed Aug 10 14:09:48 1994
--- ./src/proto/search.pro	Sun Nov 23 12:43:30 1997
***************
*** 2,8 ****
--- 2,12 ----
  struct regexp *myregcomp __PARMS((unsigned char *pat, int sub_cmd, int which_pat));
  int searchit __PARMS((struct fpos *pos, int dir, unsigned char *str, long count, int end, int message));
  int dosearch __PARMS((int dirc, unsigned char *str, int reverse, long count, int echo, int message));
+ #ifndef KANJI
  int searchc __PARMS((int c, int dir, int type, long count));
+ #else
+ int searchc __PARMS((int c, int k, int dir, int type, long count));
+ #endif
  struct fpos *showmatch __PARMS((int initc));
  int findfunc __PARMS((int dir, int what, long count));
  int findsent __PARMS((int dir, long count));
diff -crN ../orig/src/proto/term.pro ./src/proto/term.pro
*** ../orig/src/proto/term.pro	Wed Aug 10 14:10:36 1994
--- ./src/proto/term.pro	Tue Dec 29 00:37:54 1998
***************
*** 4,9 ****
--- 4,12 ----
  void termcapinit __PARMS((unsigned char *term));
  void flushbuf __PARMS((void));
  void outchar __PARMS((unsigned int c));
+ #ifdef KANJI
+ void outchar2 __PARMS((unsigned int c1, unsigned int c2));
+ #endif
  void outstrn __PARMS((unsigned char *s));
  void outstr __PARMS((unsigned char *s));
  void windgoto __PARMS((int row, int col));
diff -crN ../orig/src/proto/track.pro ./src/proto/track.pro
*** ../orig/src/proto/track.pro	Thu Jan 01 09:00:00 1970
--- ./src/proto/track.pro	Sun Jun 16 17:14:22 1996
***************
*** 0 ****
--- 1,8 ----
+ /* track.c */
+ char *tracktab_next __PARMS((char *tset));
+ char *tracktab_prev	__PARMS((char *tset));
+ void track_right __PARMS((void));
+ void track_left  __PARMS((void));
+ void track_up    __PARMS((void));
+ void track_down  __PARMS((void));
+ void showtrack   __PARMS((void));
diff -crN ../orig/src/proto/xargs.pro ./src/proto/xargs.pro
*** ../orig/src/proto/xargs.pro	Thu Jan 01 09:00:00 1970
--- ./src/proto/xargs.pro	Sat Oct 11 08:21:52 1997
***************
*** 0 ****
--- 1,3 ----
+ /* xargs.c */
+ char    **glob_filename __PARMS((char *));
+ void    xargs __PARMS((int *, char ***));
diff -crN ../orig/src/proto.h ./src/proto.h
*** ../orig/src/proto.h	Wed Aug 10 13:54:10 1994
--- ./src/proto.h	Sun Jun 16 17:14:22 1996
***************
*** 27,32 ****
--- 27,44 ----
  #ifdef MSDOS
  # include "proto/msdos.pro"
  #endif
+ #ifdef KANJI
+ # include "proto/kanji.pro"
+ #endif
+ #ifdef TRACK
+ # include "proto/track.pro"
+ #endif
+ #ifdef FEPCTRL
+ # include "proto/fepctrl.pro"
+ #endif
+ #ifdef XARGS
+ # include "proto/xargs.pro"
+ #endif
  
  #include "proto/alloc.pro"
  #include "proto/buffer.pro"
Only in ../orig/src: ptx_stdl.h
diff -crN ../orig/src/quickfix.c ./src/quickfix.c
*** ../orig/src/quickfix.c	Wed Aug 10 13:54:10 1994
--- ./src/quickfix.c	Sun Sep 26 00:00:38 1999
***************
*** 14,19 ****
--- 14,22 ----
  #include "globals.h"
  #include "proto.h"
  #include "param.h"
+ #ifdef KANJI
+ #include "kanji.h"
+ #endif
  
  static void qf_free __ARGS((void));
  static char_u *qf_types __ARGS((int, int));
***************
*** 74,80 ****
--- 77,87 ----
  		emsg(e_errorf);
  		return FAIL;
  	}
+ #ifdef KANJI
+ 	if ((fd = fopen(fileconvsto(p_ef), "r")) == NULL)
+ #else
  	if ((fd = fopen((char *)p_ef, "r")) == NULL)
+ #endif
  	{
  		emsg2(e_openerrf, p_ef);
  		return FAIL;
***************
*** 163,168 ****
--- 170,181 ----
  
  	while (fgets((char *)IObuff, CMDBUFFSIZE, fd) != NULL && !got_int)
  	{
+ #ifdef KANJI
+ 		char tmp[CMDBUFFSIZE];
+ 		i = kanjiconvsfrom(IObuff, STRLEN(IObuff), tmp, CMDBUFFSIZE, NULL, JP_SYS, NULL);
+ 		tmp[i] = NUL;
+ 		STRNCPY(IObuff, tmp, CMDBUFFSIZE);
+ #endif
  		if ((qfp = (struct qf_line *)alloc((unsigned)sizeof(struct qf_line))) == NULL)
  			goto error2;
  
***************
*** 178,183 ****
--- 191,204 ----
  		if (sscanf((char *)IObuff, (char *)fmtstr, adr[0], adr[1], adr[2], adr[3],
  												adr[4], adr[5]) != adr_cnt)
  		{
+ #ifdef USE_OPT
+ 			if (p_opt & OPT_NO_ERR_DISP)
+ 			{
+ 				free(qfp);
+ 				breakcheck();
+ 				continue;
+ 			}
+ #endif
  			namebuf[0] = NUL;			/* something failed, remove file name */
  			valid = FALSE;
  			STRCPY(errmsg, IObuff);		/* copy whole line to error message */
diff -crN ../orig/src/regexp.c ./src/regexp.c
*** ../orig/src/regexp.c	Wed Aug 10 13:54:10 1994
--- ./src/regexp.c	Mon Dec 28 23:40:38 1998
***************
*** 59,64 ****
--- 59,67 ----
  #include "regexp.h"
  #include "regmagic.h"
  #include "param.h"
+ #ifdef KANJI
+ #include "kanji.h"
+ #endif
  
  /*
   * The "internal use only" fields in regexp.h are present to pass info from
***************
*** 176,181 ****
--- 179,189 ----
  #define EMSG_RETURN(m) { emsg(m); return NULL; }
  
  static int ismult __ARGS((int));
+ #ifdef KANJI
+ static void regjp __ARGS((int, char_u));
+ static char * strjpchr __ARGS((char_u *, char_u, char_u));
+ static char * mstrjpchr __ARGS((char_u *, char_u, char_u));
+ #endif
  
  	static int
  ismult(c)
***************
*** 287,292 ****
--- 295,307 ----
  	{
  		if (p[0] == dirc && !in_range)		/* found end of regexp */
  			break;
+ #ifdef KANJI
+ 		if (ISkanji(p[0]))
+ 		{
+ 			++p;
+ 			continue;
+ 		}
+ #endif
  		if ((p[0] == '[' && p_magic) || (p[0] == '\\' && p[1] == '[' && !p_magic))
  		{
  			in_range = TRUE;
***************
*** 655,660 ****
--- 670,741 ----
  				regparse++;
  			} else
  				ret = regnode(ANYOF);
+ #ifdef KANJI
+ # define S_CHAR		's'
+ # define R_CHAR		'r'
+ 			if (*regparse == ']' || *regparse == '-')
+ 			{
+ 				regc(S_CHAR);
+ 				regc(*regparse++);
+ 			}
+ 			while (*regparse != '\0' && *regparse != ']')
+ 			{
+ 				if (*regparse == '\\' && regparse[1])
+ 				{
+ 					regparse++;
+ 					regc(S_CHAR);
+ 					regc(*regparse++);
+ 				}
+ 				else if ((ISkanji(*regparse)
+ 						&& regparse[2] == '-'
+ 						&& regparse[2 + 1] != ']'
+ 						&& regparse[2 + 1] != '\0')
+ 							|| (!ISkanji(*regparse) && regparse[1] == '-'
+ 									&& regparse[2] != ']' && regparse[2] != '\0'))
+ 				{
+ 					int_u		cclass;
+ 					int_u		cclassend;
+ 
+ 					regc(R_CHAR);
+ 					if (ISkanji(*regparse))
+ 					{
+ 						if (!ISkanji(*(regparse + 2 + 1)))
+ 							EMSG_RETURN(e_invrange);
+ 						cclass = (int)regparse[0] << 8 | regparse[1];
+ 						regc(*regparse++);
+ 						regc(*regparse++);
+ 						regparse++;
+ 						cclassend = (int)regparse[0] << 8 | regparse[1];
+ 						regc(*regparse++);
+ 						regc(*regparse++);
+ 					}
+ 					else
+ 					{
+ 						if (ISkanji(*(regparse + 2)))
+ 							EMSG_RETURN(e_invrange);
+ 						cclass = UCHARAT(regparse);
+ 						regc(*regparse);
+ 						regparse += 2;
+ 						cclassend = UCHARAT(regparse);
+ 						regc(*regparse);
+ 						regparse++;
+ 					}
+ 					if (cclass > cclassend + 1)
+ 						EMSG_RETURN(e_invrange);
+ 				}
+ 				else if (ISkanji(*regparse))
+ 				{
+ 					regc(S_CHAR);
+ 					regc(*regparse++);
+ 					regc(*regparse++);
+ 				}
+ 				else
+ 				{
+ 					regc(S_CHAR);
+ 					regc(*regparse++);
+ 				}
+ 			}
+ #else
  			if (*regparse == ']' || *regparse == '-')
  				regc(*regparse++);
  			while (*regparse != '\0' && *regparse != ']') {
***************
*** 680,685 ****
--- 761,767 ----
  				} else
  					regc(*regparse++);
  			}
+ #endif
  			regc('\0');
  			if (*regparse != ']')
  				EMSG_RETURN(e_toomsbra);
***************
*** 763,768 ****
--- 845,855 ----
  			ret = regnode(EXACTLY);
  			while ((chr = peekchr()) != '\0' && (chr < Magic(0)))
  			{
+ #ifdef KANJI
+ 				if (ISkanji(chr))
+ 					regjp(chr, regparse[1]);
+ 				else
+ #endif
  				regc(chr);
  				skipchr();
  				len++;
***************
*** 777,782 ****
--- 864,874 ----
  			 */
  			if (len > 1 && ismult(chr))
  			{
+ #ifdef KANJI
+ 				if (ISkanji(chr))
+ 					regjp(chr, regparse[1]);
+ 				else
+ #endif
  				unregc();			/* Back off of *+= operand */
  				ungetchr();			/* and put it back for next time */
  				--len;
***************
*** 829,834 ****
--- 921,945 ----
  		regsize++;
  }
  
+ #ifdef KANJI
+ /*
+  - regjp - emit (if appropriate) a word of code
+  */
+ static void
+ regjp(b, k)
+ 	int			b;
+ 	char_u		k;
+ {
+ 	if (regcode != &regdummy)
+ 	{
+ 		*(char_u *)regcode++ = b;
+ 		*(char_u *)regcode++ = k;
+ 	}
+ 	else
+ 		regsize += 2;
+ }
+ #endif
+ 
  /*
   - unregc - take back (if appropriate) a byte of code
   */
***************
*** 836,842 ****
--- 947,960 ----
  unregc()
  {
  	if (regcode != &regdummy)
+ #ifdef KANJI
+ 	{
+ 		if (ISkanji(* --regcode))
+ 			regcode--;
+ 	}
+ #else
  		regcode--;
+ #endif
  	else
  		regsize--;
  }
***************
*** 992,997 ****
--- 1110,1120 ----
  static void
  skipchr()
  {
+ #ifdef KANJI
+ 	if (ISkanji(*regparse))
+ 		regparse += 2;
+ 	else
+ #endif
  	regparse++;
  	prevchr = curchr;
  	curchr = nextchr;		/* use previously unget char, or -1 */
***************
*** 1021,1026 ****
--- 1144,1157 ----
  	 * Backup regparse as well; not because we will use what it points at,
  	 * but because skipchr() will bump it again.
  	 */
+ #ifdef KANJI
+ 	if (ISkanji(curchr))
+ 	{
+ 		nextchr = -1;
+ 		regparse-= 2;
+ 	}
+ 	else
+ #endif
  	regparse--;
  }
  
***************
*** 1073,1081 ****
  	/* If there is a "must appear" string, look for it. */
  	if (prog->regmust != NULL) {
  		s = string;
! 		while ((s = cstrchr(s, prog->regmust[0])) != NULL) {
  			if (cstrncmp(s, prog->regmust, prog->regmlen) == 0)
  				break;			/* Found it. */
  			s++;
  		}
  		if (s == NULL)			/* Not present. */
--- 1204,1222 ----
  	/* If there is a "must appear" string, look for it. */
  	if (prog->regmust != NULL) {
  		s = string;
! #ifdef KANJI
! 		while ((s = strjpchr(s, prog->regmust[0], prog->regmust[1])) != NULL)
! #else
! 		while ((s = cstrchr(s, prog->regmust[0])) != NULL)
! #endif
! 		{
  			if (cstrncmp(s, prog->regmust, prog->regmlen) == 0)
  				break;			/* Found it. */
+ #ifdef KANJI
+ 			if (ISkanji(*s))
+ 				s += 2;
+ 			else
+ #endif
  			s++;
  		}
  		if (s == NULL)			/* Not present. */
***************
*** 1095,1103 ****
  	s = string;
  	if (prog->regstart != '\0')
  		/* We know what char it must start with. */
! 		while ((s = cstrchr(s, prog->regstart)) != NULL) {
  			if (regtry(prog, s))
  				return 1;
  			s++;
  		}
  	else
--- 1236,1254 ----
  	s = string;
  	if (prog->regstart != '\0')
  		/* We know what char it must start with. */
! #ifdef KANJI
! 		while ((s = strjpchr(s, prog->regstart, NUL)) != NULL)
! #else
! 		while ((s = cstrchr(s, prog->regstart)) != NULL)
! #endif
! 		{
  			if (regtry(prog, s))
  				return 1;
+ #ifdef KANJI
+ 			if (ISkanji(*s))
+ 				s += 2;
+ 			else
+ #endif
  			s++;
  		}
  	else
***************
*** 1105,1110 ****
--- 1256,1265 ----
  		do {
  			if (regtry(prog, s))
  				return 1;
+ #ifdef KANJI
+ 			if (ISkanji(*s))		/* happen ?? */
+ 				s++;
+ #endif
  		} while (*s++ != '\0');
  
  	/* Failure. */
***************
*** 1181,1192 ****
--- 1336,1388 ----
  			break;
  		  case BOW:		/* \<word; reginput points to w */
  #define isidchar(x)	(isalnum(x) || ((x) == '_'))
+ #ifdef KANJI
+ 		  	if (!reginput[0])
+ 				return 0;
+ 			if (ISkanji(reginput[0]))
+ 			{
+ 				int sclass;		/* sclass == JPC_KIGOU : Symbol */
+ 				if (!(sclass = jpcls(reginput[0], reginput[1])))
+ 					return 0;
+ 		  		if (regbol != NULL && (reginput >= (regbol + 2))
+ 								&& ISkanjiPointer(regbol, &reginput[-2]) == 1
+ 								&& sclass == jpcls(reginput[-2], reginput[-1]))
+ 					return 0;
+ 				break;
+ 			}
+ 			else
+ 			{
+ 		  		if (regbol != NULL && (reginput >= (regbol + 2))
+ 								&& ISkanjiPointer(regbol, &reginput[-2]) == 1)
+ 					break;
+ 			}
+ #endif
  		  	if (reginput != regbol && isidchar(reginput[-1]))
  				return 0;
  		  	if (!reginput[0] || !isidchar(reginput[0]))
  				return 0;
  			break;
  		  case EOW:		/* word\>; reginput points after d */
+ #ifdef KANJI
+ 		  	if (reginput == regbol)
+ 				return 0;
+ 			if (regbol != NULL && (reginput >= (regbol + 2))
+ 						&& ISkanjiPointer(regbol, &reginput[-2]) == 1)
+ 			{
+ 				int sclass;
+ 				if (!(sclass = jpcls(reginput[-2], reginput[-1])))
+ 					return 0;
+ 				if (ISkanji(reginput[0])
+ 								&& sclass == jpcls(reginput[0], reginput[1]))
+ 					return 0;
+ 				break;
+ 			}
+ 			else
+ 			{
+ 		  		if (reginput[0] != NUL && ISkanji(reginput[0]))
+ 					break;
+ 			}
+ #endif
  		  	if (reginput == regbol || !isidchar(reginput[-1]))
  				return 0;
  		  	if (reginput[0] && isidchar(reginput[0]))
***************
*** 1195,1200 ****
--- 1391,1401 ----
  		  case ANY:
  			if (*reginput == '\0')
  				return 0;
+ #ifdef KANJI
+ 			if (ISkanji(*reginput))
+ 				reginput += 2;
+ 			else
+ #endif
  			reginput++;
  			break;
  		  case EXACTLY:{
***************
*** 1203,1224 ****
--- 1404,1454 ----
  
  				opnd = OPERAND(scan);
  				/* Inline the first character, for speed. */
+ #ifdef KANJI
+ 				if (!reg_jic)
+ #endif
  				if (*opnd != *reginput && (!reg_ic || TO_UPPER(*opnd) != TO_UPPER(*reginput)))
  					return 0;
  				len = STRLEN(opnd);
+ #ifdef KANJI
+ 				if (reg_jic)
+ 				{
+ 					if ((len = jp_strnicmp(reginput, opnd, len)) == 0)
+ 						return 0;
+ 				}
+ 				else
+ #endif
  				if (len > 1 && cstrncmp(opnd, reginput, len) != 0)
  					return 0;
  				reginput += len;
  			}
  			break;
  		  case ANYOF:
+ #ifdef KANJI
+ 			if (*reginput == '\0' ||
+ 				mstrjpchr(OPERAND(scan), *reginput, *(reginput + 1)) == NULL)
+ 				return 0;
+ 			if (ISkanji(*reginput))
+ 				reginput += 2;
+ 			else
+ #else
  			if (*reginput == '\0' || cstrchr(OPERAND(scan), *reginput) == NULL)
  				return 0;
+ #endif
  			reginput++;
  			break;
  		  case ANYBUT:
+ #ifdef KANJI
+ 			if (*reginput == '\0' ||
+ 				mstrjpchr(OPERAND(scan), *reginput, *(reginput + 1)) != NULL)
+ 				return 0;
+ 			if (ISkanji(*reginput))
+ 				reginput += 2;
+ 			else
+ #else
  			if (*reginput == '\0' || cstrchr(OPERAND(scan), *reginput) != NULL)
  				return 0;
+ #endif
  			reginput++;
  			break;
  		  case NOTHING:
***************
*** 1370,1375 ****
--- 1600,1612 ----
  					/* Couldn't or didn't -- back up. */
  					no--;
  					reginput = save + no;
+ #ifdef KANJI
+ 					if (ISkanji(*reginput))
+ 					{
+ 						no --;
+ 						reginput --;
+ 					}
+ #endif
  				}
  				return 0;
  			}
***************
*** 1413,1418 ****
--- 1650,1663 ----
  		scan += count;
  		break;
  	  case EXACTLY:
+ #ifdef KANJI
+ 	  	if (ISkanji(*opnd))
+ 			while (*opnd == *scan && *(opnd + 1) == *(scan + 1)) {
+ 				count+=2;
+ 				scan +=2;
+ 			}
+ 		else
+ #endif
  		while (*opnd == *scan || (reg_ic && TO_UPPER(*opnd) == TO_UPPER(*scan)))
  		{
  			count++;
***************
*** 1420,1436 ****
--- 1665,1711 ----
  		}
  		break;
  	  case ANYOF:
+ #ifdef KANJI
+ 		while (*scan != '\0' && 
+ 						mstrjpchr(opnd, *scan, *(scan + 1)) != NULL)
+ 			if (ISkanji(*scan))
+ 			{
+ 				count += 2;
+ 				scan += 2;
+ 			}
+ 			else
+ 			{
+ 				count ++;
+ 				scan ++;
+ 			}
+ #else
  		while (*scan != '\0' && cstrchr(opnd, *scan) != NULL)
  		{
  			count++;
  			scan++;
  		}
+ #endif
  		break;
  	  case ANYBUT:
+ #ifdef KANJI
+ 		while (*scan != '\0' && 
+ 						mstrjpchr(opnd, *scan, *(scan + 1)) == NULL)
+ 			if (ISkanji(*scan))
+ 			{
+ 				count += 2;
+ 				scan += 2;
+ 			}
+ 			else
+ 			{
+ 				count ++;
+ 				scan ++;
+ 			}
+ #else
  		while (*scan != '\0' && cstrchr(opnd, *scan) == NULL) {
  			count++;
  			scan++;
  		}
+ #endif
  		break;
  	  default:					/* Oh dear.  Called inappropriately. */
  		emsg(e_re_corr);
***************
*** 1647,1652 ****
--- 1922,1932 ----
  	char_u		   *s1, *s2;
  	int 			n;
  {
+ #ifdef KANJI
+ 	if (reg_jic)
+ 		return (jp_strnicmp(s1, s2, (size_t)n) ? 0 : 1);
+ #endif
+ 
  	if (!reg_ic)
  		return STRNCMP(s1, s2, (size_t)n);
  
***************
*** 1664,1670 ****
--- 1944,1963 ----
  	register char_u		   *p;
  
  	if (!reg_ic)
+ #ifdef KANJI
+ 	{
+ 		for (p = s; *p; p++)
+ 		{
+ 			if (*p == c)
+ 				return p;
+ 			if (ISkanji(*p))
+ 				p++;
+ 		}
+ 		return NULL;
+ 	}
+ #else
  		return STRCHR(s, c);
+ #endif
  
  	c = TO_UPPER(c);
  
***************
*** 1672,1677 ****
--- 1965,2168 ----
  	{
  		if (TO_UPPER(*p) == c)
  			return p;
+ #ifdef KANJI
+ 		if (ISkanji(*p))
+ 			p++;
+ #endif
+ 	}
+ 	return NULL;
+ }
+ 
+ #ifdef KANJI
+ static	char *
+ strjpchr(s, c, k)
+ 	char_u			*s;
+ 	char_u			c, k;
+ {
+ 	if (reg_jic)
+ 	{
+ 		char_u		work[2];
+ 
+ 		work[0] = c;
+ 		work[1] = k;
+ 		while (*s)
+ 		{
+ 			if (ISkanji(*s))
+ 			{
+ 				if ((ISkanji(c) || ISkana(c)) && k == NUL)
+ 					return(s);
+ 				if (jp_strnicmp(s, work, (size_t)(ISkanji(work[0]) ? 2 : 1)) != 0)
+ 					return(s);
+ 				s += 2;
+ 			}
+ 			else
+ 			{
+ 				if (c == *s && k == NUL)
+ 					return(s);
+ 				if (ISkanji(c) && k == NUL)
+ 					return(s);
+ 				if (jp_strnicmp(s, work, (size_t)(ISkanji(work[0]) ? 2 : 1)) != 0)
+ 					return(s);
+ 				s ++;
+ 			}
+ 		}
+ 	}
+ 	else
+ 	{
+ 		while (*s)
+ 		{
+ 			if (ISkanji(*s))
+ 			{
+ 				if (*s == c && (*(s + 1) == k || k == NUL))
+ 					return s;
+ 				s += 2;
+ 			}
+ 			else
+ 			{
+ 				if (*s == c)
+ 					return s;
+ 				if (reg_ic && (isalpha(*s) && (TO_UPPER(*s) == TO_UPPER(c))))
+ 					return s;
+ 				s ++;
+ 			}
+ 		}
+ 	}
+ 	return NULL;
+ }
+ 
+ static	char *
+ mstrjpchr(s, c, k)
+ 	char_u			*s;
+ 	char_u			c, k;
+ {
+ 	int_u		target;
+ 	int_u		class;
+ 	int_u		cclass;
+ 	int_u		cclassend;
+ 
+ 	if (reg_jic)
+ 	{
+ 		char_u		work[2];
+ 		char_u		sbuf[2];
+ 
+ 		work[0] = c;
+ 		work[1] = k;
+ 		while (*s)
+ 		{
+ 			if (*s++ == S_CHAR)
+ 			{
+ 				if (ISkanji(*s))
+ 				{
+ 					if ((ISkanji(c) || ISkana(c)) && k == NUL)
+ 						return(s);
+ 					if (jp_strnicmp(s, work, (size_t)(ISkanji(work[0]) ? 2 : 1)) != 0)
+ 						return(s);
+ 					s += 2;
+ 				}
+ 				else
+ 				{
+ 					if (c == *s && k == NUL)
+ 						return(s);
+ 					if (ISkanji(c) && k == NUL)
+ 						return(s);
+ 					if (jp_strnicmp(s, work, (size_t)(ISkanji(work[0]) ? 2 : 1)) != 0)
+ 						return(s);
+ 					s ++;
+ 				}
+ 			}
+ 			else
+ 			{
+ 				if (ISkanji(*s))
+ 				{
+ 					if ((ISkanji(c) || ISkana(c)) && k == NUL)
+ 						return(s);
+ 					cclass	  = (int_u)s[0] << 8 | s[1];
+ 					cclassend = (int_u)s[2] << 8 | s[3];
+ 					for (class = cclass; class <= cclassend; class++)
+ 					{
+ 						sbuf[0] = (class & 0xff00) >> 8;
+ 						sbuf[1] = class & 0x00ff;
+ 						if (jp_strnicmp(sbuf, work,
+ 									(size_t)(ISkanji(work[0]) ? 2 : 1)) != 0)
+ 							return(s);
+ 					}
+ 					s += 4;
+ 				}
+ 				else
+ 				{
+ 					cclass	  = s[0];
+ 					cclassend = s[1];
+ 					for (class = cclass; class <= cclassend; class++)
+ 					{
+ 						sbuf[0] = class;
+ 						if (c == sbuf[0] && k == NUL)
+ 							return(s);
+ 						if (ISkanji(c) && k == NUL)
+ 							return(s);
+ 						if (jp_strnicmp(sbuf, work, (size_t)(ISkanji(work[0]) ? 2 : 1)) != 0)
+ 							return(s);
+ 					}
+ 					s += 2;
+ 				}
+ 			}
+ 		}
+ 	}
+ 	else
+ 	{
+ 		while (*s)
+ 		{
+ 			if (*s++ == S_CHAR)
+ 			{
+ 				if (ISkanji(*s))
+ 				{
+ 					if (*s == c && (*(s + 1) == k || k == NUL))
+ 						return s;
+ 					s += 2;
+ 				}
+ 				else
+ 				{
+ 					if (*s == c)
+ 						return s;
+ 					if (reg_ic && (isalpha(*s) && (TO_UPPER(*s) == TO_UPPER(c))))
+ 						return s;
+ 					s ++;
+ 				}
+ 			}
+ 			else
+ 			{
+ 				if (ISkanji(*s))
+ 				{
+ 					cclass	  = (int_u)s[0] << 8 | s[1];
+ 					cclassend = (int_u)s[2] << 8 | s[3];
+ 
+ 					if (k != NUL)
+ 					{
+ 						target = (int_u)c << 8 | k;
+ 						for (class = cclass; class <= cclassend; class++)
+ 						{
+ 							if (class == target)
+ 								return s;
+ 						}
+ 					}
+ 					s += 4;
+ 				}
+ 				else
+ 				{
+ 					cclass	  = s[0];
+ 					cclassend = s[1];
+ 
+ 					for (class = cclass; class <= cclassend; class++)
+ 					{
+ 						if (class == c)
+ 							return s;
+ 						if (reg_ic && (isalpha(class) && (TO_UPPER(class) == TO_UPPER(c))))
+ 							return s;
+ 					}
+ 					s += 2;
+ 				}
+ 			}
+ 		}
  	}
  	return NULL;
  }
+ #endif
diff -crN ../orig/src/regexp.h ./src/regexp.h
*** ../orig/src/regexp.h	Wed Aug 10 13:54:10 1994
--- ./src/regexp.h	Sun Jan 12 23:14:32 1997
***************
*** 30,35 ****
--- 30,40 ----
  	char_u			program[1]; /* Unwarranted chumminess with compiler. */
  }				regexp;
  
+ #ifdef ONEW
+ #define regcomp RegComp
+ #define regexec RegExec
+ #endif
+ 
  /* regexp.c */
  regexp *regcomp __ARGS((char_u *));
  int regexec __ARGS((regexp *, char_u *, int));
diff -crN ../orig/src/regsub.c ./src/regsub.c
*** ../orig/src/regsub.c	Wed Aug 10 13:54:10 1994
--- ./src/regsub.c	Mon Aug 30 06:55:40 1999
***************
*** 49,56 ****
  #include "vim.h"
  #include "globals.h"
  #include "proto.h"
  
! #ifdef MSDOS
  # define __ARGS(a)	a
  #endif
  
--- 49,59 ----
  #include "vim.h"
  #include "globals.h"
  #include "proto.h"
+ #ifdef KANJI
+ #include "kanji.h"
+ #endif
  
! #if defined(MSDOS) && !defined(__ARGS)
  # define __ARGS(a)	a
  #endif
  
***************
*** 71,76 ****
--- 74,82 ----
  #endif
  
  extern char_u 	   *reg_prev_sub;
+ #ifndef notdef
+ static char_u	   *reg_prev_pat;
+ #endif
  
  #ifdef CASECONVERT
  	/*
***************
*** 103,108 ****
--- 109,119 ----
  	char_u *d;
  	int c;
  {
+ #ifdef KANJI
+ 	if (ISkanji(c))
+ 		*d = c;
+ 	else
+ #endif
  	*d = TO_UPPER(c);
  
  	return (fptr)do_Copy;
***************
*** 113,118 ****
--- 124,134 ----
  	char_u *d;
  	int c;
  {
+ #ifdef KANJI
+ 	if (ISkanji(c))
+ 		*d = c;
+ 	else
+ #endif
  	*d = TO_UPPER(c);
  
  	return (fptr)do_Upper;
***************
*** 123,128 ****
--- 139,149 ----
  	char_u *d;
  	int c;
  {
+ #ifdef KANJI
+ 	if (ISkanji(c))
+ 		*d = c;
+ 	else
+ #endif
  	*d = TO_LOWER(c);
  
  	return (fptr)do_Copy;
***************
*** 133,138 ****
--- 154,164 ----
  	char_u *d;
  	int c;
  {
+ #ifdef KANJI
+ 	if (ISkanji(c))
+ 		*d = c;
+ 	else
+ #endif
  	*d = TO_LOWER(c);
  
  	return (fptr)do_Lower;
***************
*** 146,151 ****
--- 172,186 ----
  	int n;
  {
  	while (n-- > 0) {
+ #ifdef KANJI
+ 		if (ISkanji(*s))
+ 		{
+ 			f = (fptr)(f(d++, *s++));
+ 			*d++ = *s++;
+ 			n--;
+ 			continue;
+ 		}
+ #endif
  		f = (fptr)(f(d, *s));		/* Turbo C complains without the typecast */
  		if (!*s++)
  			break;
***************
*** 184,189 ****
--- 219,248 ----
  	{
  		if ((*p == '~' && magic) || (*p == '\\' && *(p + 1) == '~' && !magic))
  		{
+ #ifndef notdef
+ 			if (p[1] == '!' && magic)
+ 			{
+ 				if (reg_prev_pat)
+ 				{
+ 					prevlen = STRLEN(reg_prev_pat);
+ 					tmpsub = alloc((unsigned)(STRLEN(source) + prevlen));
+ 					if (tmpsub)
+ 					{
+ 						len = (int)(p - source);	/* not including ~! */
+ 						STRNCPY(tmpsub, source, (size_t)len);
+ 						STRCPY(tmpsub + len, reg_prev_pat);
+ 						STRCAT(tmpsub + len, p + 2);
+ 
+ 						free(newsub);
+ 						newsub = tmpsub;
+ 						p = newsub + len + prevlen;
+ 					}
+ 				}
+ 				else
+ 					STRCPY(p, p + 2);				/* remove '~!' */
+ 			}
+ 			else
+ #endif
  			if (reg_prev_sub)
  			{
  					/* length = len(current) - 1 + len(previous) + 1 */
***************
*** 213,218 ****
--- 272,281 ----
  		}
  		else if (*p == '\\' && p[1])			/* skip escaped characters */
  			++p;
+ #ifdef KANJI
+ 		else if (ISkanji(*p))
+ 			++p;
+ #endif
  	}
  
  	free(reg_prev_sub);
***************
*** 306,311 ****
--- 369,378 ----
  #ifdef CASECONVERT
  				func = (fptr)(func(dst, c));
  							/* Turbo C complains without the typecast */
+ # ifdef KANJI
+ 				if (ISkanji(c))
+ 					*(++dst) = *src++;
+ # endif
  #else
  				*dst = c;
  #endif
***************
*** 334,338 ****
--- 401,417 ----
  		*dst = '\0';
  
  exit:
+ #ifndef notdef
+ 	if (copy)
+ 	{
+ 		if (reg_prev_pat)
+ 			free(reg_prev_pat);
+ 		if ((reg_prev_pat = alloc(dst - dest + 1)) != NULL)
+ 		{
+ 			STRNCPY(reg_prev_pat, dest, dst - dest);
+ 			reg_prev_pat[dst - dest] = '\0';
+ 		}
+ 	}
+ #endif
  	return (int)((dst - dest) + 1);
  }
diff -crN ../orig/src/s2u.c ./src/s2u.c
*** ../orig/src/s2u.c	Thu Jan 01 09:00:00 1970
--- ./src/s2u.c	Thu Oct 14 00:42:24 1999
***************
*** 0 ****
--- 1,11328 ----
+ #ifdef KANJI
+ # if defined(UCODE) && !defined(NT)
+ /*
+   hi:  0x81-0x9f, 0xe0-0xfc
+   low: 0x40-0x7e, 0x80-0xfc
+ */
+ static unsigned short s2utbl[] = {
+   0x3000, /* 8140 */
+   0x3001, /* 8141 */
+   0x3002, /* 8142 */
+   0xff0c, /* 8143 */
+   0xff0e, /* 8144 */
+   0x30fb, /* 8145 */
+   0xff1a, /* 8146 */
+   0xff1b, /* 8147 */
+   0xff1f, /* 8148 */
+   0xff01, /* 8149 */
+   0x309b, /* 814A */
+   0x309c, /* 814B */
+   0x00b4, /* 814C */
+   0xff40, /* 814D */
+   0x00a8, /* 814E */
+   0xff3e, /* 814F */
+   0xffe3, /* 8150 */
+   0xff3f, /* 8151 */
+   0x30fd, /* 8152 */
+   0x30fe, /* 8153 */
+   0x309d, /* 8154 */
+   0x309e, /* 8155 */
+   0x3003, /* 8156 */
+   0x4edd, /* 8157 */
+   0x3005, /* 8158 */
+   0x3006, /* 8159 */
+   0x3007, /* 815A */
+   0x30fc, /* 815B */
+   0x2015, /* 815C */
+   0x2010, /* 815D */
+   0xff0f, /* 815E */
+   0xff3c, /* 815F */
+   0xff5e, /* 8160 */
+   0x2225, /* 8161 */
+   0xff5c, /* 8162 */
+   0x2026, /* 8163 */
+   0x2025, /* 8164 */
+   0x2018, /* 8165 */
+   0x2019, /* 8166 */
+   0x201c, /* 8167 */
+   0x201d, /* 8168 */
+   0xff08, /* 8169 */
+   0xff09, /* 816A */
+   0x3014, /* 816B */
+   0x3015, /* 816C */
+   0xff3b, /* 816D */
+   0xff3d, /* 816E */
+   0xff5b, /* 816F */
+   0xff5d, /* 8170 */
+   0x3008, /* 8171 */
+   0x3009, /* 8172 */
+   0x300a, /* 8173 */
+   0x300b, /* 8174 */
+   0x300c, /* 8175 */
+   0x300d, /* 8176 */
+   0x300e, /* 8177 */
+   0x300f, /* 8178 */
+   0x3010, /* 8179 */
+   0x3011, /* 817A */
+   0xff0b, /* 817B */
+   0xff0d, /* 817C */
+   0x00b1, /* 817D */
+   0x00d7, /* 817E */
+   0x00f7, /* 8180 */
+   0xff1d, /* 8181 */
+   0x2260, /* 8182 */
+   0xff1c, /* 8183 */
+   0xff1e, /* 8184 */
+   0x2266, /* 8185 */
+   0x2267, /* 8186 */
+   0x221e, /* 8187 */
+   0x2234, /* 8188 */
+   0x2642, /* 8189 */
+   0x2640, /* 818A */
+   0x00b0, /* 818B */
+   0x2032, /* 818C */
+   0x2033, /* 818D */
+   0x2103, /* 818E */
+   0xffe5, /* 818F */
+   0xff04, /* 8190 */
+   0xffe0, /* 8191 */
+   0xffe1, /* 8192 */
+   0xff05, /* 8193 */
+   0xff03, /* 8194 */
+   0xff06, /* 8195 */
+   0xff0a, /* 8196 */
+   0xff20, /* 8197 */
+   0x00a7, /* 8198 */
+   0x2606, /* 8199 */
+   0x2605, /* 819A */
+   0x25cb, /* 819B */
+   0x25cf, /* 819C */
+   0x25ce, /* 819D */
+   0x25c7, /* 819E */
+   0x25c6, /* 819F */
+   0x25a1, /* 81A0 */
+   0x25a0, /* 81A1 */
+   0x25b3, /* 81A2 */
+   0x25b2, /* 81A3 */
+   0x25bd, /* 81A4 */
+   0x25bc, /* 81A5 */
+   0x203b, /* 81A6 */
+   0x3012, /* 81A7 */
+   0x2192, /* 81A8 */
+   0x2190, /* 81A9 */
+   0x2191, /* 81AA */
+   0x2193, /* 81AB */
+   0x3013, /* 81AC */
+      '?', /* 81AD */
+      '?', /* 81AE */
+      '?', /* 81AF */
+      '?', /* 81B0 */
+      '?', /* 81B1 */
+      '?', /* 81B2 */
+      '?', /* 81B3 */
+      '?', /* 81B4 */
+      '?', /* 81B5 */
+      '?', /* 81B6 */
+      '?', /* 81B7 */
+   0x2208, /* 81B8 */
+   0x220b, /* 81B9 */
+   0x2286, /* 81BA */
+   0x2287, /* 81BB */
+   0x2282, /* 81BC */
+   0x2283, /* 81BD */
+   0x222a, /* 81BE */
+   0x2229, /* 81BF */
+      '?', /* 81C0 */
+      '?', /* 81C1 */
+      '?', /* 81C2 */
+      '?', /* 81C3 */
+      '?', /* 81C4 */
+      '?', /* 81C5 */
+      '?', /* 81C6 */
+      '?', /* 81C7 */
+   0x2227, /* 81C8 */
+   0x2228, /* 81C9 */
+   0xffe2, /* 81CA */
+   0x21d2, /* 81CB */
+   0x21d4, /* 81CC */
+   0x2200, /* 81CD */
+   0x2203, /* 81CE */
+      '?', /* 81CF */
+      '?', /* 81D0 */
+      '?', /* 81D1 */
+      '?', /* 81D2 */
+      '?', /* 81D3 */
+      '?', /* 81D4 */
+      '?', /* 81D5 */
+      '?', /* 81D6 */
+      '?', /* 81D7 */
+      '?', /* 81D8 */
+      '?', /* 81D9 */
+   0x2220, /* 81DA */
+   0x22a5, /* 81DB */
+   0x2312, /* 81DC */
+   0x2202, /* 81DD */
+   0x2207, /* 81DE */
+   0x2261, /* 81DF */
+   0x2252, /* 81E0 */
+   0x226a, /* 81E1 */
+   0x226b, /* 81E2 */
+   0x221a, /* 81E3 */
+   0x223d, /* 81E4 */
+   0x221d, /* 81E5 */
+   0x2235, /* 81E6 */
+   0x222b, /* 81E7 */
+   0x222c, /* 81E8 */
+      '?', /* 81E9 */
+      '?', /* 81EA */
+      '?', /* 81EB */
+      '?', /* 81EC */
+      '?', /* 81ED */
+      '?', /* 81EE */
+      '?', /* 81EF */
+   0x212b, /* 81F0 */
+   0x2030, /* 81F1 */
+   0x266f, /* 81F2 */
+   0x266d, /* 81F3 */
+   0x266a, /* 81F4 */
+   0x2020, /* 81F5 */
+   0x2021, /* 81F6 */
+   0x00b6, /* 81F7 */
+      '?', /* 81F8 */
+      '?', /* 81F9 */
+      '?', /* 81FA */
+      '?', /* 81FB */
+   0x25ef, /* 81FC */
+      '?', /* 8240 */
+      '?', /* 8241 */
+      '?', /* 8242 */
+      '?', /* 8243 */
+      '?', /* 8244 */
+      '?', /* 8245 */
+      '?', /* 8246 */
+      '?', /* 8247 */
+      '?', /* 8248 */
+      '?', /* 8249 */
+      '?', /* 824A */
+      '?', /* 824B */
+      '?', /* 824C */
+      '?', /* 824D */
+      '?', /* 824E */
+   0xff10, /* 824F */
+   0xff11, /* 8250 */
+   0xff12, /* 8251 */
+   0xff13, /* 8252 */
+   0xff14, /* 8253 */
+   0xff15, /* 8254 */
+   0xff16, /* 8255 */
+   0xff17, /* 8256 */
+   0xff18, /* 8257 */
+   0xff19, /* 8258 */
+      '?', /* 8259 */
+      '?', /* 825A */
+      '?', /* 825B */
+      '?', /* 825C */
+      '?', /* 825D */
+      '?', /* 825E */
+      '?', /* 825F */
+   0xff21, /* 8260 */
+   0xff22, /* 8261 */
+   0xff23, /* 8262 */
+   0xff24, /* 8263 */
+   0xff25, /* 8264 */
+   0xff26, /* 8265 */
+   0xff27, /* 8266 */
+   0xff28, /* 8267 */
+   0xff29, /* 8268 */
+   0xff2a, /* 8269 */
+   0xff2b, /* 826A */
+   0xff2c, /* 826B */
+   0xff2d, /* 826C */
+   0xff2e, /* 826D */
+   0xff2f, /* 826E */
+   0xff30, /* 826F */
+   0xff31, /* 8270 */
+   0xff32, /* 8271 */
+   0xff33, /* 8272 */
+   0xff34, /* 8273 */
+   0xff35, /* 8274 */
+   0xff36, /* 8275 */
+   0xff37, /* 8276 */
+   0xff38, /* 8277 */
+   0xff39, /* 8278 */
+   0xff3a, /* 8279 */
+      '?', /* 827A */
+      '?', /* 827B */
+      '?', /* 827C */
+      '?', /* 827D */
+      '?', /* 827E */
+      '?', /* 8280 */
+   0xff41, /* 8281 */
+   0xff42, /* 8282 */
+   0xff43, /* 8283 */
+   0xff44, /* 8284 */
+   0xff45, /* 8285 */
+   0xff46, /* 8286 */
+   0xff47, /* 8287 */
+   0xff48, /* 8288 */
+   0xff49, /* 8289 */
+   0xff4a, /* 828A */
+   0xff4b, /* 828B */
+   0xff4c, /* 828C */
+   0xff4d, /* 828D */
+   0xff4e, /* 828E */
+   0xff4f, /* 828F */
+   0xff50, /* 8290 */
+   0xff51, /* 8291 */
+   0xff52, /* 8292 */
+   0xff53, /* 8293 */
+   0xff54, /* 8294 */
+   0xff55, /* 8295 */
+   0xff56, /* 8296 */
+   0xff57, /* 8297 */
+   0xff58, /* 8298 */
+   0xff59, /* 8299 */
+   0xff5a, /* 829A */
+      '?', /* 829B */
+      '?', /* 829C */
+      '?', /* 829D */
+      '?', /* 829E */
+   0x3041, /* 829F */
+   0x3042, /* 82A0 */
+   0x3043, /* 82A1 */
+   0x3044, /* 82A2 */
+   0x3045, /* 82A3 */
+   0x3046, /* 82A4 */
+   0x3047, /* 82A5 */
+   0x3048, /* 82A6 */
+   0x3049, /* 82A7 */
+   0x304a, /* 82A8 */
+   0x304b, /* 82A9 */
+   0x304c, /* 82AA */
+   0x304d, /* 82AB */
+   0x304e, /* 82AC */
+   0x304f, /* 82AD */
+   0x3050, /* 82AE */
+   0x3051, /* 82AF */
+   0x3052, /* 82B0 */
+   0x3053, /* 82B1 */
+   0x3054, /* 82B2 */
+   0x3055, /* 82B3 */
+   0x3056, /* 82B4 */
+   0x3057, /* 82B5 */
+   0x3058, /* 82B6 */
+   0x3059, /* 82B7 */
+   0x305a, /* 82B8 */
+   0x305b, /* 82B9 */
+   0x305c, /* 82BA */
+   0x305d, /* 82BB */
+   0x305e, /* 82BC */
+   0x305f, /* 82BD */
+   0x3060, /* 82BE */
+   0x3061, /* 82BF */
+   0x3062, /* 82C0 */
+   0x3063, /* 82C1 */
+   0x3064, /* 82C2 */
+   0x3065, /* 82C3 */
+   0x3066, /* 82C4 */
+   0x3067, /* 82C5 */
+   0x3068, /* 82C6 */
+   0x3069, /* 82C7 */
+   0x306a, /* 82C8 */
+   0x306b, /* 82C9 */
+   0x306c, /* 82CA */
+   0x306d, /* 82CB */
+   0x306e, /* 82CC */
+   0x306f, /* 82CD */
+   0x3070, /* 82CE */
+   0x3071, /* 82CF */
+   0x3072, /* 82D0 */
+   0x3073, /* 82D1 */
+   0x3074, /* 82D2 */
+   0x3075, /* 82D3 */
+   0x3076, /* 82D4 */
+   0x3077, /* 82D5 */
+   0x3078, /* 82D6 */
+   0x3079, /* 82D7 */
+   0x307a, /* 82D8 */
+   0x307b, /* 82D9 */
+   0x307c, /* 82DA */
+   0x307d, /* 82DB */
+   0x307e, /* 82DC */
+   0x307f, /* 82DD */
+   0x3080, /* 82DE */
+   0x3081, /* 82DF */
+   0x3082, /* 82E0 */
+   0x3083, /* 82E1 */
+   0x3084, /* 82E2 */
+   0x3085, /* 82E3 */
+   0x3086, /* 82E4 */
+   0x3087, /* 82E5 */
+   0x3088, /* 82E6 */
+   0x3089, /* 82E7 */
+   0x308a, /* 82E8 */
+   0x308b, /* 82E9 */
+   0x308c, /* 82EA */
+   0x308d, /* 82EB */
+   0x308e, /* 82EC */
+   0x308f, /* 82ED */
+   0x3090, /* 82EE */
+   0x3091, /* 82EF */
+   0x3092, /* 82F0 */
+   0x3093, /* 82F1 */
+      '?', /* 82F2 */
+      '?', /* 82F3 */
+      '?', /* 82F4 */
+      '?', /* 82F5 */
+      '?', /* 82F6 */
+      '?', /* 82F7 */
+      '?', /* 82F8 */
+      '?', /* 82F9 */
+      '?', /* 82FA */
+      '?', /* 82FB */
+      '?', /* 82FC */
+   0x30a1, /* 8340 */
+   0x30a2, /* 8341 */
+   0x30a3, /* 8342 */
+   0x30a4, /* 8343 */
+   0x30a5, /* 8344 */
+   0x30a6, /* 8345 */
+   0x30a7, /* 8346 */
+   0x30a8, /* 8347 */
+   0x30a9, /* 8348 */
+   0x30aa, /* 8349 */
+   0x30ab, /* 834A */
+   0x30ac, /* 834B */
+   0x30ad, /* 834C */
+   0x30ae, /* 834D */
+   0x30af, /* 834E */
+   0x30b0, /* 834F */
+   0x30b1, /* 8350 */
+   0x30b2, /* 8351 */
+   0x30b3, /* 8352 */
+   0x30b4, /* 8353 */
+   0x30b5, /* 8354 */
+   0x30b6, /* 8355 */
+   0x30b7, /* 8356 */
+   0x30b8, /* 8357 */
+   0x30b9, /* 8358 */
+   0x30ba, /* 8359 */
+   0x30bb, /* 835A */
+   0x30bc, /* 835B */
+   0x30bd, /* 835C */
+   0x30be, /* 835D */
+   0x30bf, /* 835E */
+   0x30c0, /* 835F */
+   0x30c1, /* 8360 */
+   0x30c2, /* 8361 */
+   0x30c3, /* 8362 */
+   0x30c4, /* 8363 */
+   0x30c5, /* 8364 */
+   0x30c6, /* 8365 */
+   0x30c7, /* 8366 */
+   0x30c8, /* 8367 */
+   0x30c9, /* 8368 */
+   0x30ca, /* 8369 */
+   0x30cb, /* 836A */
+   0x30cc, /* 836B */
+   0x30cd, /* 836C */
+   0x30ce, /* 836D */
+   0x30cf, /* 836E */
+   0x30d0, /* 836F */
+   0x30d1, /* 8370 */
+   0x30d2, /* 8371 */
+   0x30d3, /* 8372 */
+   0x30d4, /* 8373 */
+   0x30d5, /* 8374 */
+   0x30d6, /* 8375 */
+   0x30d7, /* 8376 */
+   0x30d8, /* 8377 */
+   0x30d9, /* 8378 */
+   0x30da, /* 8379 */
+   0x30db, /* 837A */
+   0x30dc, /* 837B */
+   0x30dd, /* 837C */
+   0x30de, /* 837D */
+   0x30df, /* 837E */
+   0x30e0, /* 8380 */
+   0x30e1, /* 8381 */
+   0x30e2, /* 8382 */
+   0x30e3, /* 8383 */
+   0x30e4, /* 8384 */
+   0x30e5, /* 8385 */
+   0x30e6, /* 8386 */
+   0x30e7, /* 8387 */
+   0x30e8, /* 8388 */
+   0x30e9, /* 8389 */
+   0x30ea, /* 838A */
+   0x30eb, /* 838B */
+   0x30ec, /* 838C */
+   0x30ed, /* 838D */
+   0x30ee, /* 838E */
+   0x30ef, /* 838F */
+   0x30f0, /* 8390 */
+   0x30f1, /* 8391 */
+   0x30f2, /* 8392 */
+   0x30f3, /* 8393 */
+   0x30f4, /* 8394 */
+   0x30f5, /* 8395 */
+   0x30f6, /* 8396 */
+      '?', /* 8397 */
+      '?', /* 8398 */
+      '?', /* 8399 */
+      '?', /* 839A */
+      '?', /* 839B */
+      '?', /* 839C */
+      '?', /* 839D */
+      '?', /* 839E */
+   0x0391, /* 839F */
+   0x0392, /* 83A0 */
+   0x0393, /* 83A1 */
+   0x0394, /* 83A2 */
+   0x0395, /* 83A3 */
+   0x0396, /* 83A4 */
+   0x0397, /* 83A5 */
+   0x0398, /* 83A6 */
+   0x0399, /* 83A7 */
+   0x039a, /* 83A8 */
+   0x039b, /* 83A9 */
+   0x039c, /* 83AA */
+   0x039d, /* 83AB */
+   0x039e, /* 83AC */
+   0x039f, /* 83AD */
+   0x03a0, /* 83AE */
+   0x03a1, /* 83AF */
+   0x03a3, /* 83B0 */
+   0x03a4, /* 83B1 */
+   0x03a5, /* 83B2 */
+   0x03a6, /* 83B3 */
+   0x03a7, /* 83B4 */
+   0x03a8, /* 83B5 */
+   0x03a9, /* 83B6 */
+      '?', /* 83B7 */
+      '?', /* 83B8 */
+      '?', /* 83B9 */
+      '?', /* 83BA */
+      '?', /* 83BB */
+      '?', /* 83BC */
+      '?', /* 83BD */
+      '?', /* 83BE */
+   0x03b1, /* 83BF */
+   0x03b2, /* 83C0 */
+   0x03b3, /* 83C1 */
+   0x03b4, /* 83C2 */
+   0x03b5, /* 83C3 */
+   0x03b6, /* 83C4 */
+   0x03b7, /* 83C5 */
+   0x03b8, /* 83C6 */
+   0x03b9, /* 83C7 */
+   0x03ba, /* 83C8 */
+   0x03bb, /* 83C9 */
+   0x03bc, /* 83CA */
+   0x03bd, /* 83CB */
+   0x03be, /* 83CC */
+   0x03bf, /* 83CD */
+   0x03c0, /* 83CE */
+   0x03c1, /* 83CF */
+   0x03c3, /* 83D0 */
+   0x03c4, /* 83D1 */
+   0x03c5, /* 83D2 */
+   0x03c6, /* 83D3 */
+   0x03c7, /* 83D4 */
+   0x03c8, /* 83D5 */
+   0x03c9, /* 83D6 */
+      '?', /* 83D7 */
+      '?', /* 83D8 */
+      '?', /* 83D9 */
+      '?', /* 83DA */
+      '?', /* 83DB */
+      '?', /* 83DC */
+      '?', /* 83DD */
+      '?', /* 83DE */
+      '?', /* 83DF */
+      '?', /* 83E0 */
+      '?', /* 83E1 */
+      '?', /* 83E2 */
+      '?', /* 83E3 */
+      '?', /* 83E4 */
+      '?', /* 83E5 */
+      '?', /* 83E6 */
+      '?', /* 83E7 */
+      '?', /* 83E8 */
+      '?', /* 83E9 */
+      '?', /* 83EA */
+      '?', /* 83EB */
+      '?', /* 83EC */
+      '?', /* 83ED */
+      '?', /* 83EE */
+      '?', /* 83EF */
+      '?', /* 83F0 */
+      '?', /* 83F1 */
+      '?', /* 83F2 */
+      '?', /* 83F3 */
+      '?', /* 83F4 */
+      '?', /* 83F5 */
+      '?', /* 83F6 */
+      '?', /* 83F7 */
+      '?', /* 83F8 */
+      '?', /* 83F9 */
+      '?', /* 83FA */
+      '?', /* 83FB */
+      '?', /* 83FC */
+   0x0410, /* 8440 */
+   0x0411, /* 8441 */
+   0x0412, /* 8442 */
+   0x0413, /* 8443 */
+   0x0414, /* 8444 */
+   0x0415, /* 8445 */
+   0x0401, /* 8446 */
+   0x0416, /* 8447 */
+   0x0417, /* 8448 */
+   0x0418, /* 8449 */
+   0x0419, /* 844A */
+   0x041a, /* 844B */
+   0x041b, /* 844C */
+   0x041c, /* 844D */
+   0x041d, /* 844E */
+   0x041e, /* 844F */
+   0x041f, /* 8450 */
+   0x0420, /* 8451 */
+   0x0421, /* 8452 */
+   0x0422, /* 8453 */
+   0x0423, /* 8454 */
+   0x0424, /* 8455 */
+   0x0425, /* 8456 */
+   0x0426, /* 8457 */
+   0x0427, /* 8458 */
+   0x0428, /* 8459 */
+   0x0429, /* 845A */
+   0x042a, /* 845B */
+   0x042b, /* 845C */
+   0x042c, /* 845D */
+   0x042d, /* 845E */
+   0x042e, /* 845F */
+   0x042f, /* 8460 */
+      '?', /* 8461 */
+      '?', /* 8462 */
+      '?', /* 8463 */
+      '?', /* 8464 */
+      '?', /* 8465 */
+      '?', /* 8466 */
+      '?', /* 8467 */
+      '?', /* 8468 */
+      '?', /* 8469 */
+      '?', /* 846A */
+      '?', /* 846B */
+      '?', /* 846C */
+      '?', /* 846D */
+      '?', /* 846E */
+      '?', /* 846F */
+   0x0430, /* 8470 */
+   0x0431, /* 8471 */
+   0x0432, /* 8472 */
+   0x0433, /* 8473 */
+   0x0434, /* 8474 */
+   0x0435, /* 8475 */
+   0x0451, /* 8476 */
+   0x0436, /* 8477 */
+   0x0437, /* 8478 */
+   0x0438, /* 8479 */
+   0x0439, /* 847A */
+   0x043a, /* 847B */
+   0x043b, /* 847C */
+   0x043c, /* 847D */
+   0x043d, /* 847E */
+   0x043e, /* 8480 */
+   0x043f, /* 8481 */
+   0x0440, /* 8482 */
+   0x0441, /* 8483 */
+   0x0442, /* 8484 */
+   0x0443, /* 8485 */
+   0x0444, /* 8486 */
+   0x0445, /* 8487 */
+   0x0446, /* 8488 */
+   0x0447, /* 8489 */
+   0x0448, /* 848A */
+   0x0449, /* 848B */
+   0x044a, /* 848C */
+   0x044b, /* 848D */
+   0x044c, /* 848E */
+   0x044d, /* 848F */
+   0x044e, /* 8490 */
+   0x044f, /* 8491 */
+      '?', /* 8492 */
+      '?', /* 8493 */
+      '?', /* 8494 */
+      '?', /* 8495 */
+      '?', /* 8496 */
+      '?', /* 8497 */
+      '?', /* 8498 */
+      '?', /* 8499 */
+      '?', /* 849A */
+      '?', /* 849B */
+      '?', /* 849C */
+      '?', /* 849D */
+      '?', /* 849E */
+   0x2500, /* 849F */
+   0x2502, /* 84A0 */
+   0x250c, /* 84A1 */
+   0x2510, /* 84A2 */
+   0x2518, /* 84A3 */
+   0x2514, /* 84A4 */
+   0x251c, /* 84A5 */
+   0x252c, /* 84A6 */
+   0x2524, /* 84A7 */
+   0x2534, /* 84A8 */
+   0x253c, /* 84A9 */
+   0x2501, /* 84AA */
+   0x2503, /* 84AB */
+   0x250f, /* 84AC */
+   0x2513, /* 84AD */
+   0x251b, /* 84AE */
+   0x2517, /* 84AF */
+   0x2523, /* 84B0 */
+   0x2533, /* 84B1 */
+   0x252b, /* 84B2 */
+   0x253b, /* 84B3 */
+   0x254b, /* 84B4 */
+   0x2520, /* 84B5 */
+   0x252f, /* 84B6 */
+   0x2528, /* 84B7 */
+   0x2537, /* 84B8 */
+   0x253f, /* 84B9 */
+   0x251d, /* 84BA */
+   0x2530, /* 84BB */
+   0x2525, /* 84BC */
+   0x2538, /* 84BD */
+   0x2542, /* 84BE */
+      '?', /* 84BF */
+      '?', /* 84C0 */
+      '?', /* 84C1 */
+      '?', /* 84C2 */
+      '?', /* 84C3 */
+      '?', /* 84C4 */
+      '?', /* 84C5 */
+      '?', /* 84C6 */
+      '?', /* 84C7 */
+      '?', /* 84C8 */
+      '?', /* 84C9 */
+      '?', /* 84CA */
+      '?', /* 84CB */
+      '?', /* 84CC */
+      '?', /* 84CD */
+      '?', /* 84CE */
+      '?', /* 84CF */
+      '?', /* 84D0 */
+      '?', /* 84D1 */
+      '?', /* 84D2 */
+      '?', /* 84D3 */
+      '?', /* 84D4 */
+      '?', /* 84D5 */
+      '?', /* 84D6 */
+      '?', /* 84D7 */
+      '?', /* 84D8 */
+      '?', /* 84D9 */
+      '?', /* 84DA */
+      '?', /* 84DB */
+      '?', /* 84DC */
+      '?', /* 84DD */
+      '?', /* 84DE */
+      '?', /* 84DF */
+      '?', /* 84E0 */
+      '?', /* 84E1 */
+      '?', /* 84E2 */
+      '?', /* 84E3 */
+      '?', /* 84E4 */
+      '?', /* 84E5 */
+      '?', /* 84E6 */
+      '?', /* 84E7 */
+      '?', /* 84E8 */
+      '?', /* 84E9 */
+      '?', /* 84EA */
+      '?', /* 84EB */
+      '?', /* 84EC */
+      '?', /* 84ED */
+      '?', /* 84EE */
+      '?', /* 84EF */
+      '?', /* 84F0 */
+      '?', /* 84F1 */
+      '?', /* 84F2 */
+      '?', /* 84F3 */
+      '?', /* 84F4 */
+      '?', /* 84F5 */
+      '?', /* 84F6 */
+      '?', /* 84F7 */
+      '?', /* 84F8 */
+      '?', /* 84F9 */
+      '?', /* 84FA */
+      '?', /* 84FB */
+      '?', /* 84FC */
+      '?', /* 8540 */
+      '?', /* 8541 */
+      '?', /* 8542 */
+      '?', /* 8543 */
+      '?', /* 8544 */
+      '?', /* 8545 */
+      '?', /* 8546 */
+      '?', /* 8547 */
+      '?', /* 8548 */
+      '?', /* 8549 */
+      '?', /* 854A */
+      '?', /* 854B */
+      '?', /* 854C */
+      '?', /* 854D */
+      '?', /* 854E */
+      '?', /* 854F */
+      '?', /* 8550 */
+      '?', /* 8551 */
+      '?', /* 8552 */
+      '?', /* 8553 */
+      '?', /* 8554 */
+      '?', /* 8555 */
+      '?', /* 8556 */
+      '?', /* 8557 */
+      '?', /* 8558 */
+      '?', /* 8559 */
+      '?', /* 855A */
+      '?', /* 855B */
+      '?', /* 855C */
+      '?', /* 855D */
+      '?', /* 855E */
+      '?', /* 855F */
+      '?', /* 8560 */
+      '?', /* 8561 */
+      '?', /* 8562 */
+      '?', /* 8563 */
+      '?', /* 8564 */
+      '?', /* 8565 */
+      '?', /* 8566 */
+      '?', /* 8567 */
+      '?', /* 8568 */
+      '?', /* 8569 */
+      '?', /* 856A */
+      '?', /* 856B */
+      '?', /* 856C */
+      '?', /* 856D */
+      '?', /* 856E */
+      '?', /* 856F */
+      '?', /* 8570 */
+      '?', /* 8571 */
+      '?', /* 8572 */
+      '?', /* 8573 */
+      '?', /* 8574 */
+      '?', /* 8575 */
+      '?', /* 8576 */
+      '?', /* 8577 */
+      '?', /* 8578 */
+      '?', /* 8579 */
+      '?', /* 857A */
+      '?', /* 857B */
+      '?', /* 857C */
+      '?', /* 857D */
+      '?', /* 857E */
+      '?', /* 8580 */
+      '?', /* 8581 */
+      '?', /* 8582 */
+      '?', /* 8583 */
+      '?', /* 8584 */
+      '?', /* 8585 */
+      '?', /* 8586 */
+      '?', /* 8587 */
+      '?', /* 8588 */
+      '?', /* 8589 */
+      '?', /* 858A */
+      '?', /* 858B */
+      '?', /* 858C */
+      '?', /* 858D */
+      '?', /* 858E */
+      '?', /* 858F */
+      '?', /* 8590 */
+      '?', /* 8591 */
+      '?', /* 8592 */
+      '?', /* 8593 */
+      '?', /* 8594 */
+      '?', /* 8595 */
+      '?', /* 8596 */
+      '?', /* 8597 */
+      '?', /* 8598 */
+      '?', /* 8599 */
+      '?', /* 859A */
+      '?', /* 859B */
+      '?', /* 859C */
+      '?', /* 859D */
+      '?', /* 859E */
+      '?', /* 859F */
+      '?', /* 85A0 */
+      '?', /* 85A1 */
+      '?', /* 85A2 */
+      '?', /* 85A3 */
+      '?', /* 85A4 */
+      '?', /* 85A5 */
+      '?', /* 85A6 */
+      '?', /* 85A7 */
+      '?', /* 85A8 */
+      '?', /* 85A9 */
+      '?', /* 85AA */
+      '?', /* 85AB */
+      '?', /* 85AC */
+      '?', /* 85AD */
+      '?', /* 85AE */
+      '?', /* 85AF */
+      '?', /* 85B0 */
+      '?', /* 85B1 */
+      '?', /* 85B2 */
+      '?', /* 85B3 */
+      '?', /* 85B4 */
+      '?', /* 85B5 */
+      '?', /* 85B6 */
+      '?', /* 85B7 */
+      '?', /* 85B8 */
+      '?', /* 85B9 */
+      '?', /* 85BA */
+      '?', /* 85BB */
+      '?', /* 85BC */
+      '?', /* 85BD */
+      '?', /* 85BE */
+      '?', /* 85BF */
+      '?', /* 85C0 */
+      '?', /* 85C1 */
+      '?', /* 85C2 */
+      '?', /* 85C3 */
+      '?', /* 85C4 */
+      '?', /* 85C5 */
+      '?', /* 85C6 */
+      '?', /* 85C7 */
+      '?', /* 85C8 */
+      '?', /* 85C9 */
+      '?', /* 85CA */
+      '?', /* 85CB */
+      '?', /* 85CC */
+      '?', /* 85CD */
+      '?', /* 85CE */
+      '?', /* 85CF */
+      '?', /* 85D0 */
+      '?', /* 85D1 */
+      '?', /* 85D2 */
+      '?', /* 85D3 */
+      '?', /* 85D4 */
+      '?', /* 85D5 */
+      '?', /* 85D6 */
+      '?', /* 85D7 */
+      '?', /* 85D8 */
+      '?', /* 85D9 */
+      '?', /* 85DA */
+      '?', /* 85DB */
+      '?', /* 85DC */
+      '?', /* 85DD */
+      '?', /* 85DE */
+      '?', /* 85DF */
+      '?', /* 85E0 */
+      '?', /* 85E1 */
+      '?', /* 85E2 */
+      '?', /* 85E3 */
+      '?', /* 85E4 */
+      '?', /* 85E5 */
+      '?', /* 85E6 */
+      '?', /* 85E7 */
+      '?', /* 85E8 */
+      '?', /* 85E9 */
+      '?', /* 85EA */
+      '?', /* 85EB */
+      '?', /* 85EC */
+      '?', /* 85ED */
+      '?', /* 85EE */
+      '?', /* 85EF */
+      '?', /* 85F0 */
+      '?', /* 85F1 */
+      '?', /* 85F2 */
+      '?', /* 85F3 */
+      '?', /* 85F4 */
+      '?', /* 85F5 */
+      '?', /* 85F6 */
+      '?', /* 85F7 */
+      '?', /* 85F8 */
+      '?', /* 85F9 */
+      '?', /* 85FA */
+      '?', /* 85FB */
+      '?', /* 85FC */
+      '?', /* 8640 */
+      '?', /* 8641 */
+      '?', /* 8642 */
+      '?', /* 8643 */
+      '?', /* 8644 */
+      '?', /* 8645 */
+      '?', /* 8646 */
+      '?', /* 8647 */
+      '?', /* 8648 */
+      '?', /* 8649 */
+      '?', /* 864A */
+      '?', /* 864B */
+      '?', /* 864C */
+      '?', /* 864D */
+      '?', /* 864E */
+      '?', /* 864F */
+      '?', /* 8650 */
+      '?', /* 8651 */
+      '?', /* 8652 */
+      '?', /* 8653 */
+      '?', /* 8654 */
+      '?', /* 8655 */
+      '?', /* 8656 */
+      '?', /* 8657 */
+      '?', /* 8658 */
+      '?', /* 8659 */
+      '?', /* 865A */
+      '?', /* 865B */
+      '?', /* 865C */
+      '?', /* 865D */
+      '?', /* 865E */
+      '?', /* 865F */
+      '?', /* 8660 */
+      '?', /* 8661 */
+      '?', /* 8662 */
+      '?', /* 8663 */
+      '?', /* 8664 */
+      '?', /* 8665 */
+      '?', /* 8666 */
+      '?', /* 8667 */
+      '?', /* 8668 */
+      '?', /* 8669 */
+      '?', /* 866A */
+      '?', /* 866B */
+      '?', /* 866C */
+      '?', /* 866D */
+      '?', /* 866E */
+      '?', /* 866F */
+      '?', /* 8670 */
+      '?', /* 8671 */
+      '?', /* 8672 */
+      '?', /* 8673 */
+      '?', /* 8674 */
+      '?', /* 8675 */
+      '?', /* 8676 */
+      '?', /* 8677 */
+      '?', /* 8678 */
+      '?', /* 8679 */
+      '?', /* 867A */
+      '?', /* 867B */
+      '?', /* 867C */
+      '?', /* 867D */
+      '?', /* 867E */
+      '?', /* 8680 */
+      '?', /* 8681 */
+      '?', /* 8682 */
+      '?', /* 8683 */
+      '?', /* 8684 */
+      '?', /* 8685 */
+      '?', /* 8686 */
+      '?', /* 8687 */
+      '?', /* 8688 */
+      '?', /* 8689 */
+      '?', /* 868A */
+      '?', /* 868B */
+      '?', /* 868C */
+      '?', /* 868D */
+      '?', /* 868E */
+      '?', /* 868F */
+      '?', /* 8690 */
+      '?', /* 8691 */
+      '?', /* 8692 */
+      '?', /* 8693 */
+      '?', /* 8694 */
+      '?', /* 8695 */
+      '?', /* 8696 */
+      '?', /* 8697 */
+      '?', /* 8698 */
+      '?', /* 8699 */
+      '?', /* 869A */
+      '?', /* 869B */
+      '?', /* 869C */
+      '?', /* 869D */
+      '?', /* 869E */
+      '?', /* 869F */
+      '?', /* 86A0 */
+      '?', /* 86A1 */
+      '?', /* 86A2 */
+      '?', /* 86A3 */
+      '?', /* 86A4 */
+      '?', /* 86A5 */
+      '?', /* 86A6 */
+      '?', /* 86A7 */
+      '?', /* 86A8 */
+      '?', /* 86A9 */
+      '?', /* 86AA */
+      '?', /* 86AB */
+      '?', /* 86AC */
+      '?', /* 86AD */
+      '?', /* 86AE */
+      '?', /* 86AF */
+      '?', /* 86B0 */
+      '?', /* 86B1 */
+      '?', /* 86B2 */
+      '?', /* 86B3 */
+      '?', /* 86B4 */
+      '?', /* 86B5 */
+      '?', /* 86B6 */
+      '?', /* 86B7 */
+      '?', /* 86B8 */
+      '?', /* 86B9 */
+      '?', /* 86BA */
+      '?', /* 86BB */
+      '?', /* 86BC */
+      '?', /* 86BD */
+      '?', /* 86BE */
+      '?', /* 86BF */
+      '?', /* 86C0 */
+      '?', /* 86C1 */
+      '?', /* 86C2 */
+      '?', /* 86C3 */
+      '?', /* 86C4 */
+      '?', /* 86C5 */
+      '?', /* 86C6 */
+      '?', /* 86C7 */
+      '?', /* 86C8 */
+      '?', /* 86C9 */
+      '?', /* 86CA */
+      '?', /* 86CB */
+      '?', /* 86CC */
+      '?', /* 86CD */
+      '?', /* 86CE */
+      '?', /* 86CF */
+      '?', /* 86D0 */
+      '?', /* 86D1 */
+      '?', /* 86D2 */
+      '?', /* 86D3 */
+      '?', /* 86D4 */
+      '?', /* 86D5 */
+      '?', /* 86D6 */
+      '?', /* 86D7 */
+      '?', /* 86D8 */
+      '?', /* 86D9 */
+      '?', /* 86DA */
+      '?', /* 86DB */
+      '?', /* 86DC */
+      '?', /* 86DD */
+      '?', /* 86DE */
+      '?', /* 86DF */
+      '?', /* 86E0 */
+      '?', /* 86E1 */
+      '?', /* 86E2 */
+      '?', /* 86E3 */
+      '?', /* 86E4 */
+      '?', /* 86E5 */
+      '?', /* 86E6 */
+      '?', /* 86E7 */
+      '?', /* 86E8 */
+      '?', /* 86E9 */
+      '?', /* 86EA */
+      '?', /* 86EB */
+      '?', /* 86EC */
+      '?', /* 86ED */
+      '?', /* 86EE */
+      '?', /* 86EF */
+      '?', /* 86F0 */
+      '?', /* 86F1 */
+      '?', /* 86F2 */
+      '?', /* 86F3 */
+      '?', /* 86F4 */
+      '?', /* 86F5 */
+      '?', /* 86F6 */
+      '?', /* 86F7 */
+      '?', /* 86F8 */
+      '?', /* 86F9 */
+      '?', /* 86FA */
+      '?', /* 86FB */
+      '?', /* 86FC */
+   0x2460, /* 8740 */
+   0x2461, /* 8741 */
+   0x2462, /* 8742 */
+   0x2463, /* 8743 */
+   0x2464, /* 8744 */
+   0x2465, /* 8745 */
+   0x2466, /* 8746 */
+   0x2467, /* 8747 */
+   0x2468, /* 8748 */
+   0x2469, /* 8749 */
+   0x246a, /* 874A */
+   0x246b, /* 874B */
+   0x246c, /* 874C */
+   0x246d, /* 874D */
+   0x246e, /* 874E */
+   0x246f, /* 874F */
+   0x2470, /* 8750 */
+   0x2471, /* 8751 */
+   0x2472, /* 8752 */
+   0x2473, /* 8753 */
+   0x2160, /* 8754 */
+   0x2161, /* 8755 */
+   0x2162, /* 8756 */
+   0x2163, /* 8757 */
+   0x2164, /* 8758 */
+   0x2165, /* 8759 */
+   0x2166, /* 875A */
+   0x2167, /* 875B */
+   0x2168, /* 875C */
+   0x2169, /* 875D */
+      '?', /* 875E */
+   0x3349, /* 875F */
+   0x3314, /* 8760 */
+   0x3322, /* 8761 */
+   0x334d, /* 8762 */
+   0x3318, /* 8763 */
+   0x3327, /* 8764 */
+   0x3303, /* 8765 */
+   0x3336, /* 8766 */
+   0x3351, /* 8767 */
+   0x3357, /* 8768 */
+   0x330d, /* 8769 */
+   0x3326, /* 876A */
+   0x3323, /* 876B */
+   0x332b, /* 876C */
+   0x334a, /* 876D */
+   0x333b, /* 876E */
+   0x339c, /* 876F */
+   0x339d, /* 8770 */
+   0x339e, /* 8771 */
+   0x338e, /* 8772 */
+   0x338f, /* 8773 */
+   0x33c4, /* 8774 */
+   0x33a1, /* 8775 */
+      '?', /* 8776 */
+      '?', /* 8777 */
+      '?', /* 8778 */
+      '?', /* 8779 */
+      '?', /* 877A */
+      '?', /* 877B */
+      '?', /* 877C */
+      '?', /* 877D */
+   0x337b, /* 877E */
+   0x301d, /* 8780 */
+   0x301f, /* 8781 */
+   0x2116, /* 8782 */
+   0x33cd, /* 8783 */
+   0x2121, /* 8784 */
+   0x32a4, /* 8785 */
+   0x32a5, /* 8786 */
+   0x32a6, /* 8787 */
+   0x32a7, /* 8788 */
+   0x32a8, /* 8789 */
+   0x3231, /* 878A */
+   0x3232, /* 878B */
+   0x3239, /* 878C */
+   0x337e, /* 878D */
+   0x337d, /* 878E */
+   0x337c, /* 878F */
+   0x2252, /* 8790 */
+   0x2261, /* 8791 */
+   0x222b, /* 8792 */
+   0x222e, /* 8793 */
+   0x2211, /* 8794 */
+   0x221a, /* 8795 */
+   0x22a5, /* 8796 */
+   0x2220, /* 8797 */
+   0x221f, /* 8798 */
+   0x22bf, /* 8799 */
+   0x2235, /* 879A */
+   0x2229, /* 879B */
+   0x222a, /* 879C */
+      '?', /* 879D */
+      '?', /* 879E */
+      '?', /* 879F */
+      '?', /* 87A0 */
+      '?', /* 87A1 */
+      '?', /* 87A2 */
+      '?', /* 87A3 */
+      '?', /* 87A4 */
+      '?', /* 87A5 */
+      '?', /* 87A6 */
+      '?', /* 87A7 */
+      '?', /* 87A8 */
+      '?', /* 87A9 */
+      '?', /* 87AA */
+      '?', /* 87AB */
+      '?', /* 87AC */
+      '?', /* 87AD */
+      '?', /* 87AE */
+      '?', /* 87AF */
+      '?', /* 87B0 */
+      '?', /* 87B1 */
+      '?', /* 87B2 */
+      '?', /* 87B3 */
+      '?', /* 87B4 */
+      '?', /* 87B5 */
+      '?', /* 87B6 */
+      '?', /* 87B7 */
+      '?', /* 87B8 */
+      '?', /* 87B9 */
+      '?', /* 87BA */
+      '?', /* 87BB */
+      '?', /* 87BC */
+      '?', /* 87BD */
+      '?', /* 87BE */
+      '?', /* 87BF */
+      '?', /* 87C0 */
+      '?', /* 87C1 */
+      '?', /* 87C2 */
+      '?', /* 87C3 */
+      '?', /* 87C4 */
+      '?', /* 87C5 */
+      '?', /* 87C6 */
+      '?', /* 87C7 */
+      '?', /* 87C8 */
+      '?', /* 87C9 */
+      '?', /* 87CA */
+      '?', /* 87CB */
+      '?', /* 87CC */
+      '?', /* 87CD */
+      '?', /* 87CE */
+      '?', /* 87CF */
+      '?', /* 87D0 */
+      '?', /* 87D1 */
+      '?', /* 87D2 */
+      '?', /* 87D3 */
+      '?', /* 87D4 */
+      '?', /* 87D5 */
+      '?', /* 87D6 */
+      '?', /* 87D7 */
+      '?', /* 87D8 */
+      '?', /* 87D9 */
+      '?', /* 87DA */
+      '?', /* 87DB */
+      '?', /* 87DC */
+      '?', /* 87DD */
+      '?', /* 87DE */
+      '?', /* 87DF */
+      '?', /* 87E0 */
+      '?', /* 87E1 */
+      '?', /* 87E2 */
+      '?', /* 87E3 */
+      '?', /* 87E4 */
+      '?', /* 87E5 */
+      '?', /* 87E6 */
+      '?', /* 87E7 */
+      '?', /* 87E8 */
+      '?', /* 87E9 */
+      '?', /* 87EA */
+      '?', /* 87EB */
+      '?', /* 87EC */
+      '?', /* 87ED */
+      '?', /* 87EE */
+      '?', /* 87EF */
+      '?', /* 87F0 */
+      '?', /* 87F1 */
+      '?', /* 87F2 */
+      '?', /* 87F3 */
+      '?', /* 87F4 */
+      '?', /* 87F5 */
+      '?', /* 87F6 */
+      '?', /* 87F7 */
+      '?', /* 87F8 */
+      '?', /* 87F9 */
+      '?', /* 87FA */
+      '?', /* 87FB */
+      '?', /* 87FC */
+      '?', /* 8840 */
+      '?', /* 8841 */
+      '?', /* 8842 */
+      '?', /* 8843 */
+      '?', /* 8844 */
+      '?', /* 8845 */
+      '?', /* 8846 */
+      '?', /* 8847 */
+      '?', /* 8848 */
+      '?', /* 8849 */
+      '?', /* 884A */
+      '?', /* 884B */
+      '?', /* 884C */
+      '?', /* 884D */
+      '?', /* 884E */
+      '?', /* 884F */
+      '?', /* 8850 */
+      '?', /* 8851 */
+      '?', /* 8852 */
+      '?', /* 8853 */
+      '?', /* 8854 */
+      '?', /* 8855 */
+      '?', /* 8856 */
+      '?', /* 8857 */
+      '?', /* 8858 */
+      '?', /* 8859 */
+      '?', /* 885A */
+      '?', /* 885B */
+      '?', /* 885C */
+      '?', /* 885D */
+      '?', /* 885E */
+      '?', /* 885F */
+      '?', /* 8860 */
+      '?', /* 8861 */
+      '?', /* 8862 */
+      '?', /* 8863 */
+      '?', /* 8864 */
+      '?', /* 8865 */
+      '?', /* 8866 */
+      '?', /* 8867 */
+      '?', /* 8868 */
+      '?', /* 8869 */
+      '?', /* 886A */
+      '?', /* 886B */
+      '?', /* 886C */
+      '?', /* 886D */
+      '?', /* 886E */
+      '?', /* 886F */
+      '?', /* 8870 */
+      '?', /* 8871 */
+      '?', /* 8872 */
+      '?', /* 8873 */
+      '?', /* 8874 */
+      '?', /* 8875 */
+      '?', /* 8876 */
+      '?', /* 8877 */
+      '?', /* 8878 */
+      '?', /* 8879 */
+      '?', /* 887A */
+      '?', /* 887B */
+      '?', /* 887C */
+      '?', /* 887D */
+      '?', /* 887E */
+      '?', /* 8880 */
+      '?', /* 8881 */
+      '?', /* 8882 */
+      '?', /* 8883 */
+      '?', /* 8884 */
+      '?', /* 8885 */
+      '?', /* 8886 */
+      '?', /* 8887 */
+      '?', /* 8888 */
+      '?', /* 8889 */
+      '?', /* 888A */
+      '?', /* 888B */
+      '?', /* 888C */
+      '?', /* 888D */
+      '?', /* 888E */
+      '?', /* 888F */
+      '?', /* 8890 */
+      '?', /* 8891 */
+      '?', /* 8892 */
+      '?', /* 8893 */
+      '?', /* 8894 */
+      '?', /* 8895 */
+      '?', /* 8896 */
+      '?', /* 8897 */
+      '?', /* 8898 */
+      '?', /* 8899 */
+      '?', /* 889A */
+      '?', /* 889B */
+      '?', /* 889C */
+      '?', /* 889D */
+      '?', /* 889E */
+   0x4e9c, /* 889F */
+   0x5516, /* 88A0 */
+   0x5a03, /* 88A1 */
+   0x963f, /* 88A2 */
+   0x54c0, /* 88A3 */
+   0x611b, /* 88A4 */
+   0x6328, /* 88A5 */
+   0x59f6, /* 88A6 */
+   0x9022, /* 88A7 */
+   0x8475, /* 88A8 */
+   0x831c, /* 88A9 */
+   0x7a50, /* 88AA */
+   0x60aa, /* 88AB */
+   0x63e1, /* 88AC */
+   0x6e25, /* 88AD */
+   0x65ed, /* 88AE */
+   0x8466, /* 88AF */
+   0x82a6, /* 88B0 */
+   0x9bf5, /* 88B1 */
+   0x6893, /* 88B2 */
+   0x5727, /* 88B3 */
+   0x65a1, /* 88B4 */
+   0x6271, /* 88B5 */
+   0x5b9b, /* 88B6 */
+   0x59d0, /* 88B7 */
+   0x867b, /* 88B8 */
+   0x98f4, /* 88B9 */
+   0x7d62, /* 88BA */
+   0x7dbe, /* 88BB */
+   0x9b8e, /* 88BC */
+   0x6216, /* 88BD */
+   0x7c9f, /* 88BE */
+   0x88b7, /* 88BF */
+   0x5b89, /* 88C0 */
+   0x5eb5, /* 88C1 */
+   0x6309, /* 88C2 */
+   0x6697, /* 88C3 */
+   0x6848, /* 88C4 */
+   0x95c7, /* 88C5 */
+   0x978d, /* 88C6 */
+   0x674f, /* 88C7 */
+   0x4ee5, /* 88C8 */
+   0x4f0a, /* 88C9 */
+   0x4f4d, /* 88CA */
+   0x4f9d, /* 88CB */
+   0x5049, /* 88CC */
+   0x56f2, /* 88CD */
+   0x5937, /* 88CE */
+   0x59d4, /* 88CF */
+   0x5a01, /* 88D0 */
+   0x5c09, /* 88D1 */
+   0x60df, /* 88D2 */
+   0x610f, /* 88D3 */
+   0x6170, /* 88D4 */
+   0x6613, /* 88D5 */
+   0x6905, /* 88D6 */
+   0x70ba, /* 88D7 */
+   0x754f, /* 88D8 */
+   0x7570, /* 88D9 */
+   0x79fb, /* 88DA */
+   0x7dad, /* 88DB */
+   0x7def, /* 88DC */
+   0x80c3, /* 88DD */
+   0x840e, /* 88DE */
+   0x8863, /* 88DF */
+   0x8b02, /* 88E0 */
+   0x9055, /* 88E1 */
+   0x907a, /* 88E2 */
+   0x533b, /* 88E3 */
+   0x4e95, /* 88E4 */
+   0x4ea5, /* 88E5 */
+   0x57df, /* 88E6 */
+   0x80b2, /* 88E7 */
+   0x90c1, /* 88E8 */
+   0x78ef, /* 88E9 */
+   0x4e00, /* 88EA */
+   0x58f1, /* 88EB */
+   0x6ea2, /* 88EC */
+   0x9038, /* 88ED */
+   0x7a32, /* 88EE */
+   0x8328, /* 88EF */
+   0x828b, /* 88F0 */
+   0x9c2f, /* 88F1 */
+   0x5141, /* 88F2 */
+   0x5370, /* 88F3 */
+   0x54bd, /* 88F4 */
+   0x54e1, /* 88F5 */
+   0x56e0, /* 88F6 */
+   0x59fb, /* 88F7 */
+   0x5f15, /* 88F8 */
+   0x98f2, /* 88F9 */
+   0x6deb, /* 88FA */
+   0x80e4, /* 88FB */
+   0x852d, /* 88FC */
+   0x9662, /* 8940 */
+   0x9670, /* 8941 */
+   0x96a0, /* 8942 */
+   0x97fb, /* 8943 */
+   0x540b, /* 8944 */
+   0x53f3, /* 8945 */
+   0x5b87, /* 8946 */
+   0x70cf, /* 8947 */
+   0x7fbd, /* 8948 */
+   0x8fc2, /* 8949 */
+   0x96e8, /* 894A */
+   0x536f, /* 894B */
+   0x9d5c, /* 894C */
+   0x7aba, /* 894D */
+   0x4e11, /* 894E */
+   0x7893, /* 894F */
+   0x81fc, /* 8950 */
+   0x6e26, /* 8951 */
+   0x5618, /* 8952 */
+   0x5504, /* 8953 */
+   0x6b1d, /* 8954 */
+   0x851a, /* 8955 */
+   0x9c3b, /* 8956 */
+   0x59e5, /* 8957 */
+   0x53a9, /* 8958 */
+   0x6d66, /* 8959 */
+   0x74dc, /* 895A */
+   0x958f, /* 895B */
+   0x5642, /* 895C */
+   0x4e91, /* 895D */
+   0x904b, /* 895E */
+   0x96f2, /* 895F */
+   0x834f, /* 8960 */
+   0x990c, /* 8961 */
+   0x53e1, /* 8962 */
+   0x55b6, /* 8963 */
+   0x5b30, /* 8964 */
+   0x5f71, /* 8965 */
+   0x6620, /* 8966 */
+   0x66f3, /* 8967 */
+   0x6804, /* 8968 */
+   0x6c38, /* 8969 */
+   0x6cf3, /* 896A */
+   0x6d29, /* 896B */
+   0x745b, /* 896C */
+   0x76c8, /* 896D */
+   0x7a4e, /* 896E */
+   0x9834, /* 896F */
+   0x82f1, /* 8970 */
+   0x885b, /* 8971 */
+   0x8a60, /* 8972 */
+   0x92ed, /* 8973 */
+   0x6db2, /* 8974 */
+   0x75ab, /* 8975 */
+   0x76ca, /* 8976 */
+   0x99c5, /* 8977 */
+   0x60a6, /* 8978 */
+   0x8b01, /* 8979 */
+   0x8d8a, /* 897A */
+   0x95b2, /* 897B */
+   0x698e, /* 897C */
+   0x53ad, /* 897D */
+   0x5186, /* 897E */
+   0x5712, /* 8980 */
+   0x5830, /* 8981 */
+   0x5944, /* 8982 */
+   0x5bb4, /* 8983 */
+   0x5ef6, /* 8984 */
+   0x6028, /* 8985 */
+   0x63a9, /* 8986 */
+   0x63f4, /* 8987 */
+   0x6cbf, /* 8988 */
+   0x6f14, /* 8989 */
+   0x708e, /* 898A */
+   0x7114, /* 898B */
+   0x7159, /* 898C */
+   0x71d5, /* 898D */
+   0x733f, /* 898E */
+   0x7e01, /* 898F */
+   0x8276, /* 8990 */
+   0x82d1, /* 8991 */
+   0x8597, /* 8992 */
+   0x9060, /* 8993 */
+   0x925b, /* 8994 */
+   0x9d1b, /* 8995 */
+   0x5869, /* 8996 */
+   0x65bc, /* 8997 */
+   0x6c5a, /* 8998 */
+   0x7525, /* 8999 */
+   0x51f9, /* 899A */
+   0x592e, /* 899B */
+   0x5965, /* 899C */
+   0x5f80, /* 899D */
+   0x5fdc, /* 899E */
+   0x62bc, /* 899F */
+   0x65fa, /* 89A0 */
+   0x6a2a, /* 89A1 */
+   0x6b27, /* 89A2 */
+   0x6bb4, /* 89A3 */
+   0x738b, /* 89A4 */
+   0x7fc1, /* 89A5 */
+   0x8956, /* 89A6 */
+   0x9d2c, /* 89A7 */
+   0x9d0e, /* 89A8 */
+   0x9ec4, /* 89A9 */
+   0x5ca1, /* 89AA */
+   0x6c96, /* 89AB */
+   0x837b, /* 89AC */
+   0x5104, /* 89AD */
+   0x5c4b, /* 89AE */
+   0x61b6, /* 89AF */
+   0x81c6, /* 89B0 */
+   0x6876, /* 89B1 */
+   0x7261, /* 89B2 */
+   0x4e59, /* 89B3 */
+   0x4ffa, /* 89B4 */
+   0x5378, /* 89B5 */
+   0x6069, /* 89B6 */
+   0x6e29, /* 89B7 */
+   0x7a4f, /* 89B8 */
+   0x97f3, /* 89B9 */
+   0x4e0b, /* 89BA */
+   0x5316, /* 89BB */
+   0x4eee, /* 89BC */
+   0x4f55, /* 89BD */
+   0x4f3d, /* 89BE */
+   0x4fa1, /* 89BF */
+   0x4f73, /* 89C0 */
+   0x52a0, /* 89C1 */
+   0x53ef, /* 89C2 */
+   0x5609, /* 89C3 */
+   0x590f, /* 89C4 */
+   0x5ac1, /* 89C5 */
+   0x5bb6, /* 89C6 */
+   0x5be1, /* 89C7 */
+   0x79d1, /* 89C8 */
+   0x6687, /* 89C9 */
+   0x679c, /* 89CA */
+   0x67b6, /* 89CB */
+   0x6b4c, /* 89CC */
+   0x6cb3, /* 89CD */
+   0x706b, /* 89CE */
+   0x73c2, /* 89CF */
+   0x798d, /* 89D0 */
+   0x79be, /* 89D1 */
+   0x7a3c, /* 89D2 */
+   0x7b87, /* 89D3 */
+   0x82b1, /* 89D4 */
+   0x82db, /* 89D5 */
+   0x8304, /* 89D6 */
+   0x8377, /* 89D7 */
+   0x83ef, /* 89D8 */
+   0x83d3, /* 89D9 */
+   0x8766, /* 89DA */
+   0x8ab2, /* 89DB */
+   0x5629, /* 89DC */
+   0x8ca8, /* 89DD */
+   0x8fe6, /* 89DE */
+   0x904e, /* 89DF */
+   0x971e, /* 89E0 */
+   0x868a, /* 89E1 */
+   0x4fc4, /* 89E2 */
+   0x5ce8, /* 89E3 */
+   0x6211, /* 89E4 */
+   0x7259, /* 89E5 */
+   0x753b, /* 89E6 */
+   0x81e5, /* 89E7 */
+   0x82bd, /* 89E8 */
+   0x86fe, /* 89E9 */
+   0x8cc0, /* 89EA */
+   0x96c5, /* 89EB */
+   0x9913, /* 89EC */
+   0x99d5, /* 89ED */
+   0x4ecb, /* 89EE */
+   0x4f1a, /* 89EF */
+   0x89e3, /* 89F0 */
+   0x56de, /* 89F1 */
+   0x584a, /* 89F2 */
+   0x58ca, /* 89F3 */
+   0x5efb, /* 89F4 */
+   0x5feb, /* 89F5 */
+   0x602a, /* 89F6 */
+   0x6094, /* 89F7 */
+   0x6062, /* 89F8 */
+   0x61d0, /* 89F9 */
+   0x6212, /* 89FA */
+   0x62d0, /* 89FB */
+   0x6539, /* 89FC */
+   0x9b41, /* 8A40 */
+   0x6666, /* 8A41 */
+   0x68b0, /* 8A42 */
+   0x6d77, /* 8A43 */
+   0x7070, /* 8A44 */
+   0x754c, /* 8A45 */
+   0x7686, /* 8A46 */
+   0x7d75, /* 8A47 */
+   0x82a5, /* 8A48 */
+   0x87f9, /* 8A49 */
+   0x958b, /* 8A4A */
+   0x968e, /* 8A4B */
+   0x8c9d, /* 8A4C */
+   0x51f1, /* 8A4D */
+   0x52be, /* 8A4E */
+   0x5916, /* 8A4F */
+   0x54b3, /* 8A50 */
+   0x5bb3, /* 8A51 */
+   0x5d16, /* 8A52 */
+   0x6168, /* 8A53 */
+   0x6982, /* 8A54 */
+   0x6daf, /* 8A55 */
+   0x788d, /* 8A56 */
+   0x84cb, /* 8A57 */
+   0x8857, /* 8A58 */
+   0x8a72, /* 8A59 */
+   0x93a7, /* 8A5A */
+   0x9ab8, /* 8A5B */
+   0x6d6c, /* 8A5C */
+   0x99a8, /* 8A5D */
+   0x86d9, /* 8A5E */
+   0x57a3, /* 8A5F */
+   0x67ff, /* 8A60 */
+   0x86ce, /* 8A61 */
+   0x920e, /* 8A62 */
+   0x5283, /* 8A63 */
+   0x5687, /* 8A64 */
+   0x5404, /* 8A65 */
+   0x5ed3, /* 8A66 */
+   0x62e1, /* 8A67 */
+   0x64b9, /* 8A68 */
+   0x683c, /* 8A69 */
+   0x6838, /* 8A6A */
+   0x6bbb, /* 8A6B */
+   0x7372, /* 8A6C */
+   0x78ba, /* 8A6D */
+   0x7a6b, /* 8A6E */
+   0x899a, /* 8A6F */
+   0x89d2, /* 8A70 */
+   0x8d6b, /* 8A71 */
+   0x8f03, /* 8A72 */
+   0x90ed, /* 8A73 */
+   0x95a3, /* 8A74 */
+   0x9694, /* 8A75 */
+   0x9769, /* 8A76 */
+   0x5b66, /* 8A77 */
+   0x5cb3, /* 8A78 */
+   0x697d, /* 8A79 */
+   0x984d, /* 8A7A */
+   0x984e, /* 8A7B */
+   0x639b, /* 8A7C */
+   0x7b20, /* 8A7D */
+   0x6a2b, /* 8A7E */
+   0x6a7f, /* 8A80 */
+   0x68b6, /* 8A81 */
+   0x9c0d, /* 8A82 */
+   0x6f5f, /* 8A83 */
+   0x5272, /* 8A84 */
+   0x559d, /* 8A85 */
+   0x6070, /* 8A86 */
+   0x62ec, /* 8A87 */
+   0x6d3b, /* 8A88 */
+   0x6e07, /* 8A89 */
+   0x6ed1, /* 8A8A */
+   0x845b, /* 8A8B */
+   0x8910, /* 8A8C */
+   0x8f44, /* 8A8D */
+   0x4e14, /* 8A8E */
+   0x9c39, /* 8A8F */
+   0x53f6, /* 8A90 */
+   0x691b, /* 8A91 */
+   0x6a3a, /* 8A92 */
+   0x9784, /* 8A93 */
+   0x682a, /* 8A94 */
+   0x515c, /* 8A95 */
+   0x7ac3, /* 8A96 */
+   0x84b2, /* 8A97 */
+   0x91dc, /* 8A98 */
+   0x938c, /* 8A99 */
+   0x565b, /* 8A9A */
+   0x9d28, /* 8A9B */
+   0x6822, /* 8A9C */
+   0x8305, /* 8A9D */
+   0x8431, /* 8A9E */
+   0x7ca5, /* 8A9F */
+   0x5208, /* 8AA0 */
+   0x82c5, /* 8AA1 */
+   0x74e6, /* 8AA2 */
+   0x4e7e, /* 8AA3 */
+   0x4f83, /* 8AA4 */
+   0x51a0, /* 8AA5 */
+   0x5bd2, /* 8AA6 */
+   0x520a, /* 8AA7 */
+   0x52d8, /* 8AA8 */
+   0x52e7, /* 8AA9 */
+   0x5dfb, /* 8AAA */
+   0x559a, /* 8AAB */
+   0x582a, /* 8AAC */
+   0x59e6, /* 8AAD */
+   0x5b8c, /* 8AAE */
+   0x5b98, /* 8AAF */
+   0x5bdb, /* 8AB0 */
+   0x5e72, /* 8AB1 */
+   0x5e79, /* 8AB2 */
+   0x60a3, /* 8AB3 */
+   0x611f, /* 8AB4 */
+   0x6163, /* 8AB5 */
+   0x61be, /* 8AB6 */
+   0x63db, /* 8AB7 */
+   0x6562, /* 8AB8 */
+   0x67d1, /* 8AB9 */
+   0x6853, /* 8ABA */
+   0x68fa, /* 8ABB */
+   0x6b3e, /* 8ABC */
+   0x6b53, /* 8ABD */
+   0x6c57, /* 8ABE */
+   0x6f22, /* 8ABF */
+   0x6f97, /* 8AC0 */
+   0x6f45, /* 8AC1 */
+   0x74b0, /* 8AC2 */
+   0x7518, /* 8AC3 */
+   0x76e3, /* 8AC4 */
+   0x770b, /* 8AC5 */
+   0x7aff, /* 8AC6 */
+   0x7ba1, /* 8AC7 */
+   0x7c21, /* 8AC8 */
+   0x7de9, /* 8AC9 */
+   0x7f36, /* 8ACA */
+   0x7ff0, /* 8ACB */
+   0x809d, /* 8ACC */
+   0x8266, /* 8ACD */
+   0x839e, /* 8ACE */
+   0x89b3, /* 8ACF */
+   0x8acc, /* 8AD0 */
+   0x8cab, /* 8AD1 */
+   0x9084, /* 8AD2 */
+   0x9451, /* 8AD3 */
+   0x9593, /* 8AD4 */
+   0x9591, /* 8AD5 */
+   0x95a2, /* 8AD6 */
+   0x9665, /* 8AD7 */
+   0x97d3, /* 8AD8 */
+   0x9928, /* 8AD9 */
+   0x8218, /* 8ADA */
+   0x4e38, /* 8ADB */
+   0x542b, /* 8ADC */
+   0x5cb8, /* 8ADD */
+   0x5dcc, /* 8ADE */
+   0x73a9, /* 8ADF */
+   0x764c, /* 8AE0 */
+   0x773c, /* 8AE1 */
+   0x5ca9, /* 8AE2 */
+   0x7feb, /* 8AE3 */
+   0x8d0b, /* 8AE4 */
+   0x96c1, /* 8AE5 */
+   0x9811, /* 8AE6 */
+   0x9854, /* 8AE7 */
+   0x9858, /* 8AE8 */
+   0x4f01, /* 8AE9 */
+   0x4f0e, /* 8AEA */
+   0x5371, /* 8AEB */
+   0x559c, /* 8AEC */
+   0x5668, /* 8AED */
+   0x57fa, /* 8AEE */
+   0x5947, /* 8AEF */
+   0x5b09, /* 8AF0 */
+   0x5bc4, /* 8AF1 */
+   0x5c90, /* 8AF2 */
+   0x5e0c, /* 8AF3 */
+   0x5e7e, /* 8AF4 */
+   0x5fcc, /* 8AF5 */
+   0x63ee, /* 8AF6 */
+   0x673a, /* 8AF7 */
+   0x65d7, /* 8AF8 */
+   0x65e2, /* 8AF9 */
+   0x671f, /* 8AFA */
+   0x68cb, /* 8AFB */
+   0x68c4, /* 8AFC */
+   0x6a5f, /* 8B40 */
+   0x5e30, /* 8B41 */
+   0x6bc5, /* 8B42 */
+   0x6c17, /* 8B43 */
+   0x6c7d, /* 8B44 */
+   0x757f, /* 8B45 */
+   0x7948, /* 8B46 */
+   0x5b63, /* 8B47 */
+   0x7a00, /* 8B48 */
+   0x7d00, /* 8B49 */
+   0x5fbd, /* 8B4A */
+   0x898f, /* 8B4B */
+   0x8a18, /* 8B4C */
+   0x8cb4, /* 8B4D */
+   0x8d77, /* 8B4E */
+   0x8ecc, /* 8B4F */
+   0x8f1d, /* 8B50 */
+   0x98e2, /* 8B51 */
+   0x9a0e, /* 8B52 */
+   0x9b3c, /* 8B53 */
+   0x4e80, /* 8B54 */
+   0x507d, /* 8B55 */
+   0x5100, /* 8B56 */
+   0x5993, /* 8B57 */
+   0x5b9c, /* 8B58 */
+   0x622f, /* 8B59 */
+   0x6280, /* 8B5A */
+   0x64ec, /* 8B5B */
+   0x6b3a, /* 8B5C */
+   0x72a0, /* 8B5D */
+   0x7591, /* 8B5E */
+   0x7947, /* 8B5F */
+   0x7fa9, /* 8B60 */
+   0x87fb, /* 8B61 */
+   0x8abc, /* 8B62 */
+   0x8b70, /* 8B63 */
+   0x63ac, /* 8B64 */
+   0x83ca, /* 8B65 */
+   0x97a0, /* 8B66 */
+   0x5409, /* 8B67 */
+   0x5403, /* 8B68 */
+   0x55ab, /* 8B69 */
+   0x6854, /* 8B6A */
+   0x6a58, /* 8B6B */
+   0x8a70, /* 8B6C */
+   0x7827, /* 8B6D */
+   0x6775, /* 8B6E */
+   0x9ecd, /* 8B6F */
+   0x5374, /* 8B70 */
+   0x5ba2, /* 8B71 */
+   0x811a, /* 8B72 */
+   0x8650, /* 8B73 */
+   0x9006, /* 8B74 */
+   0x4e18, /* 8B75 */
+   0x4e45, /* 8B76 */
+   0x4ec7, /* 8B77 */
+   0x4f11, /* 8B78 */
+   0x53ca, /* 8B79 */
+   0x5438, /* 8B7A */
+   0x5bae, /* 8B7B */
+   0x5f13, /* 8B7C */
+   0x6025, /* 8B7D */
+   0x6551, /* 8B7E */
+   0x673d, /* 8B80 */
+   0x6c42, /* 8B81 */
+   0x6c72, /* 8B82 */
+   0x6ce3, /* 8B83 */
+   0x7078, /* 8B84 */
+   0x7403, /* 8B85 */
+   0x7a76, /* 8B86 */
+   0x7aae, /* 8B87 */
+   0x7b08, /* 8B88 */
+   0x7d1a, /* 8B89 */
+   0x7cfe, /* 8B8A */
+   0x7d66, /* 8B8B */
+   0x65e7, /* 8B8C */
+   0x725b, /* 8B8D */
+   0x53bb, /* 8B8E */
+   0x5c45, /* 8B8F */
+   0x5de8, /* 8B90 */
+   0x62d2, /* 8B91 */
+   0x62e0, /* 8B92 */
+   0x6319, /* 8B93 */
+   0x6e20, /* 8B94 */
+   0x865a, /* 8B95 */
+   0x8a31, /* 8B96 */
+   0x8ddd, /* 8B97 */
+   0x92f8, /* 8B98 */
+   0x6f01, /* 8B99 */
+   0x79a6, /* 8B9A */
+   0x9b5a, /* 8B9B */
+   0x4ea8, /* 8B9C */
+   0x4eab, /* 8B9D */
+   0x4eac, /* 8B9E */
+   0x4f9b, /* 8B9F */
+   0x4fa0, /* 8BA0 */
+   0x50d1, /* 8BA1 */
+   0x5147, /* 8BA2 */
+   0x7af6, /* 8BA3 */
+   0x5171, /* 8BA4 */
+   0x51f6, /* 8BA5 */
+   0x5354, /* 8BA6 */
+   0x5321, /* 8BA7 */
+   0x537f, /* 8BA8 */
+   0x53eb, /* 8BA9 */
+   0x55ac, /* 8BAA */
+   0x5883, /* 8BAB */
+   0x5ce1, /* 8BAC */
+   0x5f37, /* 8BAD */
+   0x5f4a, /* 8BAE */
+   0x602f, /* 8BAF */
+   0x6050, /* 8BB0 */
+   0x606d, /* 8BB1 */
+   0x631f, /* 8BB2 */
+   0x6559, /* 8BB3 */
+   0x6a4b, /* 8BB4 */
+   0x6cc1, /* 8BB5 */
+   0x72c2, /* 8BB6 */
+   0x72ed, /* 8BB7 */
+   0x77ef, /* 8BB8 */
+   0x80f8, /* 8BB9 */
+   0x8105, /* 8BBA */
+   0x8208, /* 8BBB */
+   0x854e, /* 8BBC */
+   0x90f7, /* 8BBD */
+   0x93e1, /* 8BBE */
+   0x97ff, /* 8BBF */
+   0x9957, /* 8BC0 */
+   0x9a5a, /* 8BC1 */
+   0x4ef0, /* 8BC2 */
+   0x51dd, /* 8BC3 */
+   0x5c2d, /* 8BC4 */
+   0x6681, /* 8BC5 */
+   0x696d, /* 8BC6 */
+   0x5c40, /* 8BC7 */
+   0x66f2, /* 8BC8 */
+   0x6975, /* 8BC9 */
+   0x7389, /* 8BCA */
+   0x6850, /* 8BCB */
+   0x7c81, /* 8BCC */
+   0x50c5, /* 8BCD */
+   0x52e4, /* 8BCE */
+   0x5747, /* 8BCF */
+   0x5dfe, /* 8BD0 */
+   0x9326, /* 8BD1 */
+   0x65a4, /* 8BD2 */
+   0x6b23, /* 8BD3 */
+   0x6b3d, /* 8BD4 */
+   0x7434, /* 8BD5 */
+   0x7981, /* 8BD6 */
+   0x79bd, /* 8BD7 */
+   0x7b4b, /* 8BD8 */
+   0x7dca, /* 8BD9 */
+   0x82b9, /* 8BDA */
+   0x83cc, /* 8BDB */
+   0x887f, /* 8BDC */
+   0x895f, /* 8BDD */
+   0x8b39, /* 8BDE */
+   0x8fd1, /* 8BDF */
+   0x91d1, /* 8BE0 */
+   0x541f, /* 8BE1 */
+   0x9280, /* 8BE2 */
+   0x4e5d, /* 8BE3 */
+   0x5036, /* 8BE4 */
+   0x53e5, /* 8BE5 */
+   0x533a, /* 8BE6 */
+   0x72d7, /* 8BE7 */
+   0x7396, /* 8BE8 */
+   0x77e9, /* 8BE9 */
+   0x82e6, /* 8BEA */
+   0x8eaf, /* 8BEB */
+   0x99c6, /* 8BEC */
+   0x99c8, /* 8BED */
+   0x99d2, /* 8BEE */
+   0x5177, /* 8BEF */
+   0x611a, /* 8BF0 */
+   0x865e, /* 8BF1 */
+   0x55b0, /* 8BF2 */
+   0x7a7a, /* 8BF3 */
+   0x5076, /* 8BF4 */
+   0x5bd3, /* 8BF5 */
+   0x9047, /* 8BF6 */
+   0x9685, /* 8BF7 */
+   0x4e32, /* 8BF8 */
+   0x6adb, /* 8BF9 */
+   0x91e7, /* 8BFA */
+   0x5c51, /* 8BFB */
+   0x5c48, /* 8BFC */
+   0x6398, /* 8C40 */
+   0x7a9f, /* 8C41 */
+   0x6c93, /* 8C42 */
+   0x9774, /* 8C43 */
+   0x8f61, /* 8C44 */
+   0x7aaa, /* 8C45 */
+   0x718a, /* 8C46 */
+   0x9688, /* 8C47 */
+   0x7c82, /* 8C48 */
+   0x6817, /* 8C49 */
+   0x7e70, /* 8C4A */
+   0x6851, /* 8C4B */
+   0x936c, /* 8C4C */
+   0x52f2, /* 8C4D */
+   0x541b, /* 8C4E */
+   0x85ab, /* 8C4F */
+   0x8a13, /* 8C50 */
+   0x7fa4, /* 8C51 */
+   0x8ecd, /* 8C52 */
+   0x90e1, /* 8C53 */
+   0x5366, /* 8C54 */
+   0x8888, /* 8C55 */
+   0x7941, /* 8C56 */
+   0x4fc2, /* 8C57 */
+   0x50be, /* 8C58 */
+   0x5211, /* 8C59 */
+   0x5144, /* 8C5A */
+   0x5553, /* 8C5B */
+   0x572d, /* 8C5C */
+   0x73ea, /* 8C5D */
+   0x578b, /* 8C5E */
+   0x5951, /* 8C5F */
+   0x5f62, /* 8C60 */
+   0x5f84, /* 8C61 */
+   0x6075, /* 8C62 */
+   0x6176, /* 8C63 */
+   0x6167, /* 8C64 */
+   0x61a9, /* 8C65 */
+   0x63b2, /* 8C66 */
+   0x643a, /* 8C67 */
+   0x656c, /* 8C68 */
+   0x666f, /* 8C69 */
+   0x6842, /* 8C6A */
+   0x6e13, /* 8C6B */
+   0x7566, /* 8C6C */
+   0x7a3d, /* 8C6D */
+   0x7cfb, /* 8C6E */
+   0x7d4c, /* 8C6F */
+   0x7d99, /* 8C70 */
+   0x7e4b, /* 8C71 */
+   0x7f6b, /* 8C72 */
+   0x830e, /* 8C73 */
+   0x834a, /* 8C74 */
+   0x86cd, /* 8C75 */
+   0x8a08, /* 8C76 */
+   0x8a63, /* 8C77 */
+   0x8b66, /* 8C78 */
+   0x8efd, /* 8C79 */
+   0x981a, /* 8C7A */
+   0x9d8f, /* 8C7B */
+   0x82b8, /* 8C7C */
+   0x8fce, /* 8C7D */
+   0x9be8, /* 8C7E */
+   0x5287, /* 8C80 */
+   0x621f, /* 8C81 */
+   0x6483, /* 8C82 */
+   0x6fc0, /* 8C83 */
+   0x9699, /* 8C84 */
+   0x6841, /* 8C85 */
+   0x5091, /* 8C86 */
+   0x6b20, /* 8C87 */
+   0x6c7a, /* 8C88 */
+   0x6f54, /* 8C89 */
+   0x7a74, /* 8C8A */
+   0x7d50, /* 8C8B */
+   0x8840, /* 8C8C */
+   0x8a23, /* 8C8D */
+   0x6708, /* 8C8E */
+   0x4ef6, /* 8C8F */
+   0x5039, /* 8C90 */
+   0x5026, /* 8C91 */
+   0x5065, /* 8C92 */
+   0x517c, /* 8C93 */
+   0x5238, /* 8C94 */
+   0x5263, /* 8C95 */
+   0x55a7, /* 8C96 */
+   0x570f, /* 8C97 */
+   0x5805, /* 8C98 */
+   0x5acc, /* 8C99 */
+   0x5efa, /* 8C9A */
+   0x61b2, /* 8C9B */
+   0x61f8, /* 8C9C */
+   0x62f3, /* 8C9D */
+   0x6372, /* 8C9E */
+   0x691c, /* 8C9F */
+   0x6a29, /* 8CA0 */
+   0x727d, /* 8CA1 */
+   0x72ac, /* 8CA2 */
+   0x732e, /* 8CA3 */
+   0x7814, /* 8CA4 */
+   0x786f, /* 8CA5 */
+   0x7d79, /* 8CA6 */
+   0x770c, /* 8CA7 */
+   0x80a9, /* 8CA8 */
+   0x898b, /* 8CA9 */
+   0x8b19, /* 8CAA */
+   0x8ce2, /* 8CAB */
+   0x8ed2, /* 8CAC */
+   0x9063, /* 8CAD */
+   0x9375, /* 8CAE */
+   0x967a, /* 8CAF */
+   0x9855, /* 8CB0 */
+   0x9a13, /* 8CB1 */
+   0x9e78, /* 8CB2 */
+   0x5143, /* 8CB3 */
+   0x539f, /* 8CB4 */
+   0x53b3, /* 8CB5 */
+   0x5e7b, /* 8CB6 */
+   0x5f26, /* 8CB7 */
+   0x6e1b, /* 8CB8 */
+   0x6e90, /* 8CB9 */
+   0x7384, /* 8CBA */
+   0x73fe, /* 8CBB */
+   0x7d43, /* 8CBC */
+   0x8237, /* 8CBD */
+   0x8a00, /* 8CBE */
+   0x8afa, /* 8CBF */
+   0x9650, /* 8CC0 */
+   0x4e4e, /* 8CC1 */
+   0x500b, /* 8CC2 */
+   0x53e4, /* 8CC3 */
+   0x547c, /* 8CC4 */
+   0x56fa, /* 8CC5 */
+   0x59d1, /* 8CC6 */
+   0x5b64, /* 8CC7 */
+   0x5df1, /* 8CC8 */
+   0x5eab, /* 8CC9 */
+   0x5f27, /* 8CCA */
+   0x6238, /* 8CCB */
+   0x6545, /* 8CCC */
+   0x67af, /* 8CCD */
+   0x6e56, /* 8CCE */
+   0x72d0, /* 8CCF */
+   0x7cca, /* 8CD0 */
+   0x88b4, /* 8CD1 */
+   0x80a1, /* 8CD2 */
+   0x80e1, /* 8CD3 */
+   0x83f0, /* 8CD4 */
+   0x864e, /* 8CD5 */
+   0x8a87, /* 8CD6 */
+   0x8de8, /* 8CD7 */
+   0x9237, /* 8CD8 */
+   0x96c7, /* 8CD9 */
+   0x9867, /* 8CDA */
+   0x9f13, /* 8CDB */
+   0x4e94, /* 8CDC */
+   0x4e92, /* 8CDD */
+   0x4f0d, /* 8CDE */
+   0x5348, /* 8CDF */
+   0x5449, /* 8CE0 */
+   0x543e, /* 8CE1 */
+   0x5a2f, /* 8CE2 */
+   0x5f8c, /* 8CE3 */
+   0x5fa1, /* 8CE4 */
+   0x609f, /* 8CE5 */
+   0x68a7, /* 8CE6 */
+   0x6a8e, /* 8CE7 */
+   0x745a, /* 8CE8 */
+   0x7881, /* 8CE9 */
+   0x8a9e, /* 8CEA */
+   0x8aa4, /* 8CEB */
+   0x8b77, /* 8CEC */
+   0x9190, /* 8CED */
+   0x4e5e, /* 8CEE */
+   0x9bc9, /* 8CEF */
+   0x4ea4, /* 8CF0 */
+   0x4f7c, /* 8CF1 */
+   0x4faf, /* 8CF2 */
+   0x5019, /* 8CF3 */
+   0x5016, /* 8CF4 */
+   0x5149, /* 8CF5 */
+   0x516c, /* 8CF6 */
+   0x529f, /* 8CF7 */
+   0x52b9, /* 8CF8 */
+   0x52fe, /* 8CF9 */
+   0x539a, /* 8CFA */
+   0x53e3, /* 8CFB */
+   0x5411, /* 8CFC */
+   0x540e, /* 8D40 */
+   0x5589, /* 8D41 */
+   0x5751, /* 8D42 */
+   0x57a2, /* 8D43 */
+   0x597d, /* 8D44 */
+   0x5b54, /* 8D45 */
+   0x5b5d, /* 8D46 */
+   0x5b8f, /* 8D47 */
+   0x5de5, /* 8D48 */
+   0x5de7, /* 8D49 */
+   0x5df7, /* 8D4A */
+   0x5e78, /* 8D4B */
+   0x5e83, /* 8D4C */
+   0x5e9a, /* 8D4D */
+   0x5eb7, /* 8D4E */
+   0x5f18, /* 8D4F */
+   0x6052, /* 8D50 */
+   0x614c, /* 8D51 */
+   0x6297, /* 8D52 */
+   0x62d8, /* 8D53 */
+   0x63a7, /* 8D54 */
+   0x653b, /* 8D55 */
+   0x6602, /* 8D56 */
+   0x6643, /* 8D57 */
+   0x66f4, /* 8D58 */
+   0x676d, /* 8D59 */
+   0x6821, /* 8D5A */
+   0x6897, /* 8D5B */
+   0x69cb, /* 8D5C */
+   0x6c5f, /* 8D5D */
+   0x6d2a, /* 8D5E */
+   0x6d69, /* 8D5F */
+   0x6e2f, /* 8D60 */
+   0x6e9d, /* 8D61 */
+   0x7532, /* 8D62 */
+   0x7687, /* 8D63 */
+   0x786c, /* 8D64 */
+   0x7a3f, /* 8D65 */
+   0x7ce0, /* 8D66 */
+   0x7d05, /* 8D67 */
+   0x7d18, /* 8D68 */
+   0x7d5e, /* 8D69 */
+   0x7db1, /* 8D6A */
+   0x8015, /* 8D6B */
+   0x8003, /* 8D6C */
+   0x80af, /* 8D6D */
+   0x80b1, /* 8D6E */
+   0x8154, /* 8D6F */
+   0x818f, /* 8D70 */
+   0x822a, /* 8D71 */
+   0x8352, /* 8D72 */
+   0x884c, /* 8D73 */
+   0x8861, /* 8D74 */
+   0x8b1b, /* 8D75 */
+   0x8ca2, /* 8D76 */
+   0x8cfc, /* 8D77 */
+   0x90ca, /* 8D78 */
+   0x9175, /* 8D79 */
+   0x9271, /* 8D7A */
+   0x783f, /* 8D7B */
+   0x92fc, /* 8D7C */
+   0x95a4, /* 8D7D */
+   0x964d, /* 8D7E */
+   0x9805, /* 8D80 */
+   0x9999, /* 8D81 */
+   0x9ad8, /* 8D82 */
+   0x9d3b, /* 8D83 */
+   0x525b, /* 8D84 */
+   0x52ab, /* 8D85 */
+   0x53f7, /* 8D86 */
+   0x5408, /* 8D87 */
+   0x58d5, /* 8D88 */
+   0x62f7, /* 8D89 */
+   0x6fe0, /* 8D8A */
+   0x8c6a, /* 8D8B */
+   0x8f5f, /* 8D8C */
+   0x9eb9, /* 8D8D */
+   0x514b, /* 8D8E */
+   0x523b, /* 8D8F */
+   0x544a, /* 8D90 */
+   0x56fd, /* 8D91 */
+   0x7a40, /* 8D92 */
+   0x9177, /* 8D93 */
+   0x9d60, /* 8D94 */
+   0x9ed2, /* 8D95 */
+   0x7344, /* 8D96 */
+   0x6f09, /* 8D97 */
+   0x8170, /* 8D98 */
+   0x7511, /* 8D99 */
+   0x5ffd, /* 8D9A */
+   0x60da, /* 8D9B */
+   0x9aa8, /* 8D9C */
+   0x72db, /* 8D9D */
+   0x8fbc, /* 8D9E */
+   0x6b64, /* 8D9F */
+   0x9803, /* 8DA0 */
+   0x4eca, /* 8DA1 */
+   0x56f0, /* 8DA2 */
+   0x5764, /* 8DA3 */
+   0x58be, /* 8DA4 */
+   0x5a5a, /* 8DA5 */
+   0x6068, /* 8DA6 */
+   0x61c7, /* 8DA7 */
+   0x660f, /* 8DA8 */
+   0x6606, /* 8DA9 */
+   0x6839, /* 8DAA */
+   0x68b1, /* 8DAB */
+   0x6df7, /* 8DAC */
+   0x75d5, /* 8DAD */
+   0x7d3a, /* 8DAE */
+   0x826e, /* 8DAF */
+   0x9b42, /* 8DB0 */
+   0x4e9b, /* 8DB1 */
+   0x4f50, /* 8DB2 */
+   0x53c9, /* 8DB3 */
+   0x5506, /* 8DB4 */
+   0x5d6f, /* 8DB5 */
+   0x5de6, /* 8DB6 */
+   0x5dee, /* 8DB7 */
+   0x67fb, /* 8DB8 */
+   0x6c99, /* 8DB9 */
+   0x7473, /* 8DBA */
+   0x7802, /* 8DBB */
+   0x8a50, /* 8DBC */
+   0x9396, /* 8DBD */
+   0x88df, /* 8DBE */
+   0x5750, /* 8DBF */
+   0x5ea7, /* 8DC0 */
+   0x632b, /* 8DC1 */
+   0x50b5, /* 8DC2 */
+   0x50ac, /* 8DC3 */
+   0x518d, /* 8DC4 */
+   0x6700, /* 8DC5 */
+   0x54c9, /* 8DC6 */
+   0x585e, /* 8DC7 */
+   0x59bb, /* 8DC8 */
+   0x5bb0, /* 8DC9 */
+   0x5f69, /* 8DCA */
+   0x624d, /* 8DCB */
+   0x63a1, /* 8DCC */
+   0x683d, /* 8DCD */
+   0x6b73, /* 8DCE */
+   0x6e08, /* 8DCF */
+   0x707d, /* 8DD0 */
+   0x91c7, /* 8DD1 */
+   0x7280, /* 8DD2 */
+   0x7815, /* 8DD3 */
+   0x7826, /* 8DD4 */
+   0x796d, /* 8DD5 */
+   0x658e, /* 8DD6 */
+   0x7d30, /* 8DD7 */
+   0x83dc, /* 8DD8 */
+   0x88c1, /* 8DD9 */
+   0x8f09, /* 8DDA */
+   0x969b, /* 8DDB */
+   0x5264, /* 8DDC */
+   0x5728, /* 8DDD */
+   0x6750, /* 8DDE */
+   0x7f6a, /* 8DDF */
+   0x8ca1, /* 8DE0 */
+   0x51b4, /* 8DE1 */
+   0x5742, /* 8DE2 */
+   0x962a, /* 8DE3 */
+   0x583a, /* 8DE4 */
+   0x698a, /* 8DE5 */
+   0x80b4, /* 8DE6 */
+   0x54b2, /* 8DE7 */
+   0x5d0e, /* 8DE8 */
+   0x57fc, /* 8DE9 */
+   0x7895, /* 8DEA */
+   0x9dfa, /* 8DEB */
+   0x4f5c, /* 8DEC */
+   0x524a, /* 8DED */
+   0x548b, /* 8DEE */
+   0x643e, /* 8DEF */
+   0x6628, /* 8DF0 */
+   0x6714, /* 8DF1 */
+   0x67f5, /* 8DF2 */
+   0x7a84, /* 8DF3 */
+   0x7b56, /* 8DF4 */
+   0x7d22, /* 8DF5 */
+   0x932f, /* 8DF6 */
+   0x685c, /* 8DF7 */
+   0x9bad, /* 8DF8 */
+   0x7b39, /* 8DF9 */
+   0x5319, /* 8DFA */
+   0x518a, /* 8DFB */
+   0x5237, /* 8DFC */
+   0x5bdf, /* 8E40 */
+   0x62f6, /* 8E41 */
+   0x64ae, /* 8E42 */
+   0x64e6, /* 8E43 */
+   0x672d, /* 8E44 */
+   0x6bba, /* 8E45 */
+   0x85a9, /* 8E46 */
+   0x96d1, /* 8E47 */
+   0x7690, /* 8E48 */
+   0x9bd6, /* 8E49 */
+   0x634c, /* 8E4A */
+   0x9306, /* 8E4B */
+   0x9bab, /* 8E4C */
+   0x76bf, /* 8E4D */
+   0x6652, /* 8E4E */
+   0x4e09, /* 8E4F */
+   0x5098, /* 8E50 */
+   0x53c2, /* 8E51 */
+   0x5c71, /* 8E52 */
+   0x60e8, /* 8E53 */
+   0x6492, /* 8E54 */
+   0x6563, /* 8E55 */
+   0x685f, /* 8E56 */
+   0x71e6, /* 8E57 */
+   0x73ca, /* 8E58 */
+   0x7523, /* 8E59 */
+   0x7b97, /* 8E5A */
+   0x7e82, /* 8E5B */
+   0x8695, /* 8E5C */
+   0x8b83, /* 8E5D */
+   0x8cdb, /* 8E5E */
+   0x9178, /* 8E5F */
+   0x9910, /* 8E60 */
+   0x65ac, /* 8E61 */
+   0x66ab, /* 8E62 */
+   0x6b8b, /* 8E63 */
+   0x4ed5, /* 8E64 */
+   0x4ed4, /* 8E65 */
+   0x4f3a, /* 8E66 */
+   0x4f7f, /* 8E67 */
+   0x523a, /* 8E68 */
+   0x53f8, /* 8E69 */
+   0x53f2, /* 8E6A */
+   0x55e3, /* 8E6B */
+   0x56db, /* 8E6C */
+   0x58eb, /* 8E6D */
+   0x59cb, /* 8E6E */
+   0x59c9, /* 8E6F */
+   0x59ff, /* 8E70 */
+   0x5b50, /* 8E71 */
+   0x5c4d, /* 8E72 */
+   0x5e02, /* 8E73 */
+   0x5e2b, /* 8E74 */
+   0x5fd7, /* 8E75 */
+   0x601d, /* 8E76 */
+   0x6307, /* 8E77 */
+   0x652f, /* 8E78 */
+   0x5b5c, /* 8E79 */
+   0x65af, /* 8E7A */
+   0x65bd, /* 8E7B */
+   0x65e8, /* 8E7C */
+   0x679d, /* 8E7D */
+   0x6b62, /* 8E7E */
+   0x6b7b, /* 8E80 */
+   0x6c0f, /* 8E81 */
+   0x7345, /* 8E82 */
+   0x7949, /* 8E83 */
+   0x79c1, /* 8E84 */
+   0x7cf8, /* 8E85 */
+   0x7d19, /* 8E86 */
+   0x7d2b, /* 8E87 */
+   0x80a2, /* 8E88 */
+   0x8102, /* 8E89 */
+   0x81f3, /* 8E8A */
+   0x8996, /* 8E8B */
+   0x8a5e, /* 8E8C */
+   0x8a69, /* 8E8D */
+   0x8a66, /* 8E8E */
+   0x8a8c, /* 8E8F */
+   0x8aee, /* 8E90 */
+   0x8cc7, /* 8E91 */
+   0x8cdc, /* 8E92 */
+   0x96cc, /* 8E93 */
+   0x98fc, /* 8E94 */
+   0x6b6f, /* 8E95 */
+   0x4e8b, /* 8E96 */
+   0x4f3c, /* 8E97 */
+   0x4f8d, /* 8E98 */
+   0x5150, /* 8E99 */
+   0x5b57, /* 8E9A */
+   0x5bfa, /* 8E9B */
+   0x6148, /* 8E9C */
+   0x6301, /* 8E9D */
+   0x6642, /* 8E9E */
+   0x6b21, /* 8E9F */
+   0x6ecb, /* 8EA0 */
+   0x6cbb, /* 8EA1 */
+   0x723e, /* 8EA2 */
+   0x74bd, /* 8EA3 */
+   0x75d4, /* 8EA4 */
+   0x78c1, /* 8EA5 */
+   0x793a, /* 8EA6 */
+   0x800c, /* 8EA7 */
+   0x8033, /* 8EA8 */
+   0x81ea, /* 8EA9 */
+   0x8494, /* 8EAA */
+   0x8f9e, /* 8EAB */
+   0x6c50, /* 8EAC */
+   0x9e7f, /* 8EAD */
+   0x5f0f, /* 8EAE */
+   0x8b58, /* 8EAF */
+   0x9d2b, /* 8EB0 */
+   0x7afa, /* 8EB1 */
+   0x8ef8, /* 8EB2 */
+   0x5b8d, /* 8EB3 */
+   0x96eb, /* 8EB4 */
+   0x4e03, /* 8EB5 */
+   0x53f1, /* 8EB6 */
+   0x57f7, /* 8EB7 */
+   0x5931, /* 8EB8 */
+   0x5ac9, /* 8EB9 */
+   0x5ba4, /* 8EBA */
+   0x6089, /* 8EBB */
+   0x6e7f, /* 8EBC */
+   0x6f06, /* 8EBD */
+   0x75be, /* 8EBE */
+   0x8cea, /* 8EBF */
+   0x5b9f, /* 8EC0 */
+   0x8500, /* 8EC1 */
+   0x7be0, /* 8EC2 */
+   0x5072, /* 8EC3 */
+   0x67f4, /* 8EC4 */
+   0x829d, /* 8EC5 */
+   0x5c61, /* 8EC6 */
+   0x854a, /* 8EC7 */
+   0x7e1e, /* 8EC8 */
+   0x820e, /* 8EC9 */
+   0x5199, /* 8ECA */
+   0x5c04, /* 8ECB */
+   0x6368, /* 8ECC */
+   0x8d66, /* 8ECD */
+   0x659c, /* 8ECE */
+   0x716e, /* 8ECF */
+   0x793e, /* 8ED0 */
+   0x7d17, /* 8ED1 */
+   0x8005, /* 8ED2 */
+   0x8b1d, /* 8ED3 */
+   0x8eca, /* 8ED4 */
+   0x906e, /* 8ED5 */
+   0x86c7, /* 8ED6 */
+   0x90aa, /* 8ED7 */
+   0x501f, /* 8ED8 */
+   0x52fa, /* 8ED9 */
+   0x5c3a, /* 8EDA */
+   0x6753, /* 8EDB */
+   0x707c, /* 8EDC */
+   0x7235, /* 8EDD */
+   0x914c, /* 8EDE */
+   0x91c8, /* 8EDF */
+   0x932b, /* 8EE0 */
+   0x82e5, /* 8EE1 */
+   0x5bc2, /* 8EE2 */
+   0x5f31, /* 8EE3 */
+   0x60f9, /* 8EE4 */
+   0x4e3b, /* 8EE5 */
+   0x53d6, /* 8EE6 */
+   0x5b88, /* 8EE7 */
+   0x624b, /* 8EE8 */
+   0x6731, /* 8EE9 */
+   0x6b8a, /* 8EEA */
+   0x72e9, /* 8EEB */
+   0x73e0, /* 8EEC */
+   0x7a2e, /* 8EED */
+   0x816b, /* 8EEE */
+   0x8da3, /* 8EEF */
+   0x9152, /* 8EF0 */
+   0x9996, /* 8EF1 */
+   0x5112, /* 8EF2 */
+   0x53d7, /* 8EF3 */
+   0x546a, /* 8EF4 */
+   0x5bff, /* 8EF5 */
+   0x6388, /* 8EF6 */
+   0x6a39, /* 8EF7 */
+   0x7dac, /* 8EF8 */
+   0x9700, /* 8EF9 */
+   0x56da, /* 8EFA */
+   0x53ce, /* 8EFB */
+   0x5468, /* 8EFC */
+   0x5b97, /* 8F40 */
+   0x5c31, /* 8F41 */
+   0x5dde, /* 8F42 */
+   0x4fee, /* 8F43 */
+   0x6101, /* 8F44 */
+   0x62fe, /* 8F45 */
+   0x6d32, /* 8F46 */
+   0x79c0, /* 8F47 */
+   0x79cb, /* 8F48 */
+   0x7d42, /* 8F49 */
+   0x7e4d, /* 8F4A */
+   0x7fd2, /* 8F4B */
+   0x81ed, /* 8F4C */
+   0x821f, /* 8F4D */
+   0x8490, /* 8F4E */
+   0x8846, /* 8F4F */
+   0x8972, /* 8F50 */
+   0x8b90, /* 8F51 */
+   0x8e74, /* 8F52 */
+   0x8f2f, /* 8F53 */
+   0x9031, /* 8F54 */
+   0x914b, /* 8F55 */
+   0x916c, /* 8F56 */
+   0x96c6, /* 8F57 */
+   0x919c, /* 8F58 */
+   0x4ec0, /* 8F59 */
+   0x4f4f, /* 8F5A */
+   0x5145, /* 8F5B */
+   0x5341, /* 8F5C */
+   0x5f93, /* 8F5D */
+   0x620e, /* 8F5E */
+   0x67d4, /* 8F5F */
+   0x6c41, /* 8F60 */
+   0x6e0b, /* 8F61 */
+   0x7363, /* 8F62 */
+   0x7e26, /* 8F63 */
+   0x91cd, /* 8F64 */
+   0x9283, /* 8F65 */
+   0x53d4, /* 8F66 */
+   0x5919, /* 8F67 */
+   0x5bbf, /* 8F68 */
+   0x6dd1, /* 8F69 */
+   0x795d, /* 8F6A */
+   0x7e2e, /* 8F6B */
+   0x7c9b, /* 8F6C */
+   0x587e, /* 8F6D */
+   0x719f, /* 8F6E */
+   0x51fa, /* 8F6F */
+   0x8853, /* 8F70 */
+   0x8ff0, /* 8F71 */
+   0x4fca, /* 8F72 */
+   0x5cfb, /* 8F73 */
+   0x6625, /* 8F74 */
+   0x77ac, /* 8F75 */
+   0x7ae3, /* 8F76 */
+   0x821c, /* 8F77 */
+   0x99ff, /* 8F78 */
+   0x51c6, /* 8F79 */
+   0x5faa, /* 8F7A */
+   0x65ec, /* 8F7B */
+   0x696f, /* 8F7C */
+   0x6b89, /* 8F7D */
+   0x6df3, /* 8F7E */
+   0x6e96, /* 8F80 */
+   0x6f64, /* 8F81 */
+   0x76fe, /* 8F82 */
+   0x7d14, /* 8F83 */
+   0x5de1, /* 8F84 */
+   0x9075, /* 8F85 */
+   0x9187, /* 8F86 */
+   0x9806, /* 8F87 */
+   0x51e6, /* 8F88 */
+   0x521d, /* 8F89 */
+   0x6240, /* 8F8A */
+   0x6691, /* 8F8B */
+   0x66d9, /* 8F8C */
+   0x6e1a, /* 8F8D */
+   0x5eb6, /* 8F8E */
+   0x7dd2, /* 8F8F */
+   0x7f72, /* 8F90 */
+   0x66f8, /* 8F91 */
+   0x85af, /* 8F92 */
+   0x85f7, /* 8F93 */
+   0x8af8, /* 8F94 */
+   0x52a9, /* 8F95 */
+   0x53d9, /* 8F96 */
+   0x5973, /* 8F97 */
+   0x5e8f, /* 8F98 */
+   0x5f90, /* 8F99 */
+   0x6055, /* 8F9A */
+   0x92e4, /* 8F9B */
+   0x9664, /* 8F9C */
+   0x50b7, /* 8F9D */
+   0x511f, /* 8F9E */
+   0x52dd, /* 8F9F */
+   0x5320, /* 8FA0 */
+   0x5347, /* 8FA1 */
+   0x53ec, /* 8FA2 */
+   0x54e8, /* 8FA3 */
+   0x5546, /* 8FA4 */
+   0x5531, /* 8FA5 */
+   0x5617, /* 8FA6 */
+   0x5968, /* 8FA7 */
+   0x59be, /* 8FA8 */
+   0x5a3c, /* 8FA9 */
+   0x5bb5, /* 8FAA */
+   0x5c06, /* 8FAB */
+   0x5c0f, /* 8FAC */
+   0x5c11, /* 8FAD */
+   0x5c1a, /* 8FAE */
+   0x5e84, /* 8FAF */
+   0x5e8a, /* 8FB0 */
+   0x5ee0, /* 8FB1 */
+   0x5f70, /* 8FB2 */
+   0x627f, /* 8FB3 */
+   0x6284, /* 8FB4 */
+   0x62db, /* 8FB5 */
+   0x638c, /* 8FB6 */
+   0x6377, /* 8FB7 */
+   0x6607, /* 8FB8 */
+   0x660c, /* 8FB9 */
+   0x662d, /* 8FBA */
+   0x6676, /* 8FBB */
+   0x677e, /* 8FBC */
+   0x68a2, /* 8FBD */
+   0x6a1f, /* 8FBE */
+   0x6a35, /* 8FBF */
+   0x6cbc, /* 8FC0 */
+   0x6d88, /* 8FC1 */
+   0x6e09, /* 8FC2 */
+   0x6e58, /* 8FC3 */
+   0x713c, /* 8FC4 */
+   0x7126, /* 8FC5 */
+   0x7167, /* 8FC6 */
+   0x75c7, /* 8FC7 */
+   0x7701, /* 8FC8 */
+   0x785d, /* 8FC9 */
+   0x7901, /* 8FCA */
+   0x7965, /* 8FCB */
+   0x79f0, /* 8FCC */
+   0x7ae0, /* 8FCD */
+   0x7b11, /* 8FCE */
+   0x7ca7, /* 8FCF */
+   0x7d39, /* 8FD0 */
+   0x8096, /* 8FD1 */
+   0x83d6, /* 8FD2 */
+   0x848b, /* 8FD3 */
+   0x8549, /* 8FD4 */
+   0x885d, /* 8FD5 */
+   0x88f3, /* 8FD6 */
+   0x8a1f, /* 8FD7 */
+   0x8a3c, /* 8FD8 */
+   0x8a54, /* 8FD9 */
+   0x8a73, /* 8FDA */
+   0x8c61, /* 8FDB */
+   0x8cde, /* 8FDC */
+   0x91a4, /* 8FDD */
+   0x9266, /* 8FDE */
+   0x937e, /* 8FDF */
+   0x9418, /* 8FE0 */
+   0x969c, /* 8FE1 */
+   0x9798, /* 8FE2 */
+   0x4e0a, /* 8FE3 */
+   0x4e08, /* 8FE4 */
+   0x4e1e, /* 8FE5 */
+   0x4e57, /* 8FE6 */
+   0x5197, /* 8FE7 */
+   0x5270, /* 8FE8 */
+   0x57ce, /* 8FE9 */
+   0x5834, /* 8FEA */
+   0x58cc, /* 8FEB */
+   0x5b22, /* 8FEC */
+   0x5e38, /* 8FED */
+   0x60c5, /* 8FEE */
+   0x64fe, /* 8FEF */
+   0x6761, /* 8FF0 */
+   0x6756, /* 8FF1 */
+   0x6d44, /* 8FF2 */
+   0x72b6, /* 8FF3 */
+   0x7573, /* 8FF4 */
+   0x7a63, /* 8FF5 */
+   0x84b8, /* 8FF6 */
+   0x8b72, /* 8FF7 */
+   0x91b8, /* 8FF8 */
+   0x9320, /* 8FF9 */
+   0x5631, /* 8FFA */
+   0x57f4, /* 8FFB */
+   0x98fe, /* 8FFC */
+   0x62ed, /* 9040 */
+   0x690d, /* 9041 */
+   0x6b96, /* 9042 */
+   0x71ed, /* 9043 */
+   0x7e54, /* 9044 */
+   0x8077, /* 9045 */
+   0x8272, /* 9046 */
+   0x89e6, /* 9047 */
+   0x98df, /* 9048 */
+   0x8755, /* 9049 */
+   0x8fb1, /* 904A */
+   0x5c3b, /* 904B */
+   0x4f38, /* 904C */
+   0x4fe1, /* 904D */
+   0x4fb5, /* 904E */
+   0x5507, /* 904F */
+   0x5a20, /* 9050 */
+   0x5bdd, /* 9051 */
+   0x5be9, /* 9052 */
+   0x5fc3, /* 9053 */
+   0x614e, /* 9054 */
+   0x632f, /* 9055 */
+   0x65b0, /* 9056 */
+   0x664b, /* 9057 */
+   0x68ee, /* 9058 */
+   0x699b, /* 9059 */
+   0x6d78, /* 905A */
+   0x6df1, /* 905B */
+   0x7533, /* 905C */
+   0x75b9, /* 905D */
+   0x771f, /* 905E */
+   0x795e, /* 905F */
+   0x79e6, /* 9060 */
+   0x7d33, /* 9061 */
+   0x81e3, /* 9062 */
+   0x82af, /* 9063 */
+   0x85aa, /* 9064 */
+   0x89aa, /* 9065 */
+   0x8a3a, /* 9066 */
+   0x8eab, /* 9067 */
+   0x8f9b, /* 9068 */
+   0x9032, /* 9069 */
+   0x91dd, /* 906A */
+   0x9707, /* 906B */
+   0x4eba, /* 906C */
+   0x4ec1, /* 906D */
+   0x5203, /* 906E */
+   0x5875, /* 906F */
+   0x58ec, /* 9070 */
+   0x5c0b, /* 9071 */
+   0x751a, /* 9072 */
+   0x5c3d, /* 9073 */
+   0x814e, /* 9074 */
+   0x8a0a, /* 9075 */
+   0x8fc5, /* 9076 */
+   0x9663, /* 9077 */
+   0x976d, /* 9078 */
+   0x7b25, /* 9079 */
+   0x8acf, /* 907A */
+   0x9808, /* 907B */
+   0x9162, /* 907C */
+   0x56f3, /* 907D */
+   0x53a8, /* 907E */
+   0x9017, /* 9080 */
+   0x5439, /* 9081 */
+   0x5782, /* 9082 */
+   0x5e25, /* 9083 */
+   0x63a8, /* 9084 */
+   0x6c34, /* 9085 */
+   0x708a, /* 9086 */
+   0x7761, /* 9087 */
+   0x7c8b, /* 9088 */
+   0x7fe0, /* 9089 */
+   0x8870, /* 908A */
+   0x9042, /* 908B */
+   0x9154, /* 908C */
+   0x9310, /* 908D */
+   0x9318, /* 908E */
+   0x968f, /* 908F */
+   0x745e, /* 9090 */
+   0x9ac4, /* 9091 */
+   0x5d07, /* 9092 */
+   0x5d69, /* 9093 */
+   0x6570, /* 9094 */
+   0x67a2, /* 9095 */
+   0x8da8, /* 9096 */
+   0x96db, /* 9097 */
+   0x636e, /* 9098 */
+   0x6749, /* 9099 */
+   0x6919, /* 909A */
+   0x83c5, /* 909B */
+   0x9817, /* 909C */
+   0x96c0, /* 909D */
+   0x88fe, /* 909E */
+   0x6f84, /* 909F */
+   0x647a, /* 90A0 */
+   0x5bf8, /* 90A1 */
+   0x4e16, /* 90A2 */
+   0x702c, /* 90A3 */
+   0x755d, /* 90A4 */
+   0x662f, /* 90A5 */
+   0x51c4, /* 90A6 */
+   0x5236, /* 90A7 */
+   0x52e2, /* 90A8 */
+   0x59d3, /* 90A9 */
+   0x5f81, /* 90AA */
+   0x6027, /* 90AB */
+   0x6210, /* 90AC */
+   0x653f, /* 90AD */
+   0x6574, /* 90AE */
+   0x661f, /* 90AF */
+   0x6674, /* 90B0 */
+   0x68f2, /* 90B1 */
+   0x6816, /* 90B2 */
+   0x6b63, /* 90B3 */
+   0x6e05, /* 90B4 */
+   0x7272, /* 90B5 */
+   0x751f, /* 90B6 */
+   0x76db, /* 90B7 */
+   0x7cbe, /* 90B8 */
+   0x8056, /* 90B9 */
+   0x58f0, /* 90BA */
+   0x88fd, /* 90BB */
+   0x897f, /* 90BC */
+   0x8aa0, /* 90BD */
+   0x8a93, /* 90BE */
+   0x8acb, /* 90BF */
+   0x901d, /* 90C0 */
+   0x9192, /* 90C1 */
+   0x9752, /* 90C2 */
+   0x9759, /* 90C3 */
+   0x6589, /* 90C4 */
+   0x7a0e, /* 90C5 */
+   0x8106, /* 90C6 */
+   0x96bb, /* 90C7 */
+   0x5e2d, /* 90C8 */
+   0x60dc, /* 90C9 */
+   0x621a, /* 90CA */
+   0x65a5, /* 90CB */
+   0x6614, /* 90CC */
+   0x6790, /* 90CD */
+   0x77f3, /* 90CE */
+   0x7a4d, /* 90CF */
+   0x7c4d, /* 90D0 */
+   0x7e3e, /* 90D1 */
+   0x810a, /* 90D2 */
+   0x8cac, /* 90D3 */
+   0x8d64, /* 90D4 */
+   0x8de1, /* 90D5 */
+   0x8e5f, /* 90D6 */
+   0x78a9, /* 90D7 */
+   0x5207, /* 90D8 */
+   0x62d9, /* 90D9 */
+   0x63a5, /* 90DA */
+   0x6442, /* 90DB */
+   0x6298, /* 90DC */
+   0x8a2d, /* 90DD */
+   0x7a83, /* 90DE */
+   0x7bc0, /* 90DF */
+   0x8aac, /* 90E0 */
+   0x96ea, /* 90E1 */
+   0x7d76, /* 90E2 */
+   0x820c, /* 90E3 */
+   0x8749, /* 90E4 */
+   0x4ed9, /* 90E5 */
+   0x5148, /* 90E6 */
+   0x5343, /* 90E7 */
+   0x5360, /* 90E8 */
+   0x5ba3, /* 90E9 */
+   0x5c02, /* 90EA */
+   0x5c16, /* 90EB */
+   0x5ddd, /* 90EC */
+   0x6226, /* 90ED */
+   0x6247, /* 90EE */
+   0x64b0, /* 90EF */
+   0x6813, /* 90F0 */
+   0x6834, /* 90F1 */
+   0x6cc9, /* 90F2 */
+   0x6d45, /* 90F3 */
+   0x6d17, /* 90F4 */
+   0x67d3, /* 90F5 */
+   0x6f5c, /* 90F6 */
+   0x714e, /* 90F7 */
+   0x717d, /* 90F8 */
+   0x65cb, /* 90F9 */
+   0x7a7f, /* 90FA */
+   0x7bad, /* 90FB */
+   0x7dda, /* 90FC */
+   0x7e4a, /* 9140 */
+   0x7fa8, /* 9141 */
+   0x817a, /* 9142 */
+   0x821b, /* 9143 */
+   0x8239, /* 9144 */
+   0x85a6, /* 9145 */
+   0x8a6e, /* 9146 */
+   0x8cce, /* 9147 */
+   0x8df5, /* 9148 */
+   0x9078, /* 9149 */
+   0x9077, /* 914A */
+   0x92ad, /* 914B */
+   0x9291, /* 914C */
+   0x9583, /* 914D */
+   0x9bae, /* 914E */
+   0x524d, /* 914F */
+   0x5584, /* 9150 */
+   0x6f38, /* 9151 */
+   0x7136, /* 9152 */
+   0x5168, /* 9153 */
+   0x7985, /* 9154 */
+   0x7e55, /* 9155 */
+   0x81b3, /* 9156 */
+   0x7cce, /* 9157 */
+   0x564c, /* 9158 */
+   0x5851, /* 9159 */
+   0x5ca8, /* 915A */
+   0x63aa, /* 915B */
+   0x66fe, /* 915C */
+   0x66fd, /* 915D */
+   0x695a, /* 915E */
+   0x72d9, /* 915F */
+   0x758f, /* 9160 */
+   0x758e, /* 9161 */
+   0x790e, /* 9162 */
+   0x7956, /* 9163 */
+   0x79df, /* 9164 */
+   0x7c97, /* 9165 */
+   0x7d20, /* 9166 */
+   0x7d44, /* 9167 */
+   0x8607, /* 9168 */
+   0x8a34, /* 9169 */
+   0x963b, /* 916A */
+   0x9061, /* 916B */
+   0x9f20, /* 916C */
+   0x50e7, /* 916D */
+   0x5275, /* 916E */
+   0x53cc, /* 916F */
+   0x53e2, /* 9170 */
+   0x5009, /* 9171 */
+   0x55aa, /* 9172 */
+   0x58ee, /* 9173 */
+   0x594f, /* 9174 */
+   0x723d, /* 9175 */
+   0x5b8b, /* 9176 */
+   0x5c64, /* 9177 */
+   0x531d, /* 9178 */
+   0x60e3, /* 9179 */
+   0x60f3, /* 917A */
+   0x635c, /* 917B */
+   0x6383, /* 917C */
+   0x633f, /* 917D */
+   0x63bb, /* 917E */
+   0x64cd, /* 9180 */
+   0x65e9, /* 9181 */
+   0x66f9, /* 9182 */
+   0x5de3, /* 9183 */
+   0x69cd, /* 9184 */
+   0x69fd, /* 9185 */
+   0x6f15, /* 9186 */
+   0x71e5, /* 9187 */
+   0x4e89, /* 9188 */
+   0x75e9, /* 9189 */
+   0x76f8, /* 918A */
+   0x7a93, /* 918B */
+   0x7cdf, /* 918C */
+   0x7dcf, /* 918D */
+   0x7d9c, /* 918E */
+   0x8061, /* 918F */
+   0x8349, /* 9190 */
+   0x8358, /* 9191 */
+   0x846c, /* 9192 */
+   0x84bc, /* 9193 */
+   0x85fb, /* 9194 */
+   0x88c5, /* 9195 */
+   0x8d70, /* 9196 */
+   0x9001, /* 9197 */
+   0x906d, /* 9198 */
+   0x9397, /* 9199 */
+   0x971c, /* 919A */
+   0x9a12, /* 919B */
+   0x50cf, /* 919C */
+   0x5897, /* 919D */
+   0x618e, /* 919E */
+   0x81d3, /* 919F */
+   0x8535, /* 91A0 */
+   0x8d08, /* 91A1 */
+   0x9020, /* 91A2 */
+   0x4fc3, /* 91A3 */
+   0x5074, /* 91A4 */
+   0x5247, /* 91A5 */
+   0x5373, /* 91A6 */
+   0x606f, /* 91A7 */
+   0x6349, /* 91A8 */
+   0x675f, /* 91A9 */
+   0x6e2c, /* 91AA */
+   0x8db3, /* 91AB */
+   0x901f, /* 91AC */
+   0x4fd7, /* 91AD */
+   0x5c5e, /* 91AE */
+   0x8cca, /* 91AF */
+   0x65cf, /* 91B0 */
+   0x7d9a, /* 91B1 */
+   0x5352, /* 91B2 */
+   0x8896, /* 91B3 */
+   0x5176, /* 91B4 */
+   0x63c3, /* 91B5 */
+   0x5b58, /* 91B6 */
+   0x5b6b, /* 91B7 */
+   0x5c0a, /* 91B8 */
+   0x640d, /* 91B9 */
+   0x6751, /* 91BA */
+   0x905c, /* 91BB */
+   0x4ed6, /* 91BC */
+   0x591a, /* 91BD */
+   0x592a, /* 91BE */
+   0x6c70, /* 91BF */
+   0x8a51, /* 91C0 */
+   0x553e, /* 91C1 */
+   0x5815, /* 91C2 */
+   0x59a5, /* 91C3 */
+   0x60f0, /* 91C4 */
+   0x6253, /* 91C5 */
+   0x67c1, /* 91C6 */
+   0x8235, /* 91C7 */
+   0x6955, /* 91C8 */
+   0x9640, /* 91C9 */
+   0x99c4, /* 91CA */
+   0x9a28, /* 91CB */
+   0x4f53, /* 91CC */
+   0x5806, /* 91CD */
+   0x5bfe, /* 91CE */
+   0x8010, /* 91CF */
+   0x5cb1, /* 91D0 */
+   0x5e2f, /* 91D1 */
+   0x5f85, /* 91D2 */
+   0x6020, /* 91D3 */
+   0x614b, /* 91D4 */
+   0x6234, /* 91D5 */
+   0x66ff, /* 91D6 */
+   0x6cf0, /* 91D7 */
+   0x6ede, /* 91D8 */
+   0x80ce, /* 91D9 */
+   0x817f, /* 91DA */
+   0x82d4, /* 91DB */
+   0x888b, /* 91DC */
+   0x8cb8, /* 91DD */
+   0x9000, /* 91DE */
+   0x902e, /* 91DF */
+   0x968a, /* 91E0 */
+   0x9edb, /* 91E1 */
+   0x9bdb, /* 91E2 */
+   0x4ee3, /* 91E3 */
+   0x53f0, /* 91E4 */
+   0x5927, /* 91E5 */
+   0x7b2c, /* 91E6 */
+   0x918d, /* 91E7 */
+   0x984c, /* 91E8 */
+   0x9df9, /* 91E9 */
+   0x6edd, /* 91EA */
+   0x7027, /* 91EB */
+   0x5353, /* 91EC */
+   0x5544, /* 91ED */
+   0x5b85, /* 91EE */
+   0x6258, /* 91EF */
+   0x629e, /* 91F0 */
+   0x62d3, /* 91F1 */
+   0x6ca2, /* 91F2 */
+   0x6fef, /* 91F3 */
+   0x7422, /* 91F4 */
+   0x8a17, /* 91F5 */
+   0x9438, /* 91F6 */
+   0x6fc1, /* 91F7 */
+   0x8afe, /* 91F8 */
+   0x8338, /* 91F9 */
+   0x51e7, /* 91FA */
+   0x86f8, /* 91FB */
+   0x53ea, /* 91FC */
+   0x53e9, /* 9240 */
+   0x4f46, /* 9241 */
+   0x9054, /* 9242 */
+   0x8fb0, /* 9243 */
+   0x596a, /* 9244 */
+   0x8131, /* 9245 */
+   0x5dfd, /* 9246 */
+   0x7aea, /* 9247 */
+   0x8fbf, /* 9248 */
+   0x68da, /* 9249 */
+   0x8c37, /* 924A */
+   0x72f8, /* 924B */
+   0x9c48, /* 924C */
+   0x6a3d, /* 924D */
+   0x8ab0, /* 924E */
+   0x4e39, /* 924F */
+   0x5358, /* 9250 */
+   0x5606, /* 9251 */
+   0x5766, /* 9252 */
+   0x62c5, /* 9253 */
+   0x63a2, /* 9254 */
+   0x65e6, /* 9255 */
+   0x6b4e, /* 9256 */
+   0x6de1, /* 9257 */
+   0x6e5b, /* 9258 */
+   0x70ad, /* 9259 */
+   0x77ed, /* 925A */
+   0x7aef, /* 925B */
+   0x7baa, /* 925C */
+   0x7dbb, /* 925D */
+   0x803d, /* 925E */
+   0x80c6, /* 925F */
+   0x86cb, /* 9260 */
+   0x8a95, /* 9261 */
+   0x935b, /* 9262 */
+   0x56e3, /* 9263 */
+   0x58c7, /* 9264 */
+   0x5f3e, /* 9265 */
+   0x65ad, /* 9266 */
+   0x6696, /* 9267 */
+   0x6a80, /* 9268 */
+   0x6bb5, /* 9269 */
+   0x7537, /* 926A */
+   0x8ac7, /* 926B */
+   0x5024, /* 926C */
+   0x77e5, /* 926D */
+   0x5730, /* 926E */
+   0x5f1b, /* 926F */
+   0x6065, /* 9270 */
+   0x667a, /* 9271 */
+   0x6c60, /* 9272 */
+   0x75f4, /* 9273 */
+   0x7a1a, /* 9274 */
+   0x7f6e, /* 9275 */
+   0x81f4, /* 9276 */
+   0x8718, /* 9277 */
+   0x9045, /* 9278 */
+   0x99b3, /* 9279 */
+   0x7bc9, /* 927A */
+   0x755c, /* 927B */
+   0x7af9, /* 927C */
+   0x7b51, /* 927D */
+   0x84c4, /* 927E */
+   0x9010, /* 9280 */
+   0x79e9, /* 9281 */
+   0x7a92, /* 9282 */
+   0x8336, /* 9283 */
+   0x5ae1, /* 9284 */
+   0x7740, /* 9285 */
+   0x4e2d, /* 9286 */
+   0x4ef2, /* 9287 */
+   0x5b99, /* 9288 */
+   0x5fe0, /* 9289 */
+   0x62bd, /* 928A */
+   0x663c, /* 928B */
+   0x67f1, /* 928C */
+   0x6ce8, /* 928D */
+   0x866b, /* 928E */
+   0x8877, /* 928F */
+   0x8a3b, /* 9290 */
+   0x914e, /* 9291 */
+   0x92f3, /* 9292 */
+   0x99d0, /* 9293 */
+   0x6a17, /* 9294 */
+   0x7026, /* 9295 */
+   0x732a, /* 9296 */
+   0x82e7, /* 9297 */
+   0x8457, /* 9298 */
+   0x8caf, /* 9299 */
+   0x4e01, /* 929A */
+   0x5146, /* 929B */
+   0x51cb, /* 929C */
+   0x558b, /* 929D */
+   0x5bf5, /* 929E */
+   0x5e16, /* 929F */
+   0x5e33, /* 92A0 */
+   0x5e81, /* 92A1 */
+   0x5f14, /* 92A2 */
+   0x5f35, /* 92A3 */
+   0x5f6b, /* 92A4 */
+   0x5fb4, /* 92A5 */
+   0x61f2, /* 92A6 */
+   0x6311, /* 92A7 */
+   0x66a2, /* 92A8 */
+   0x671d, /* 92A9 */
+   0x6f6e, /* 92AA */
+   0x7252, /* 92AB */
+   0x753a, /* 92AC */
+   0x773a, /* 92AD */
+   0x8074, /* 92AE */
+   0x8139, /* 92AF */
+   0x8178, /* 92B0 */
+   0x8776, /* 92B1 */
+   0x8abf, /* 92B2 */
+   0x8adc, /* 92B3 */
+   0x8d85, /* 92B4 */
+   0x8df3, /* 92B5 */
+   0x929a, /* 92B6 */
+   0x9577, /* 92B7 */
+   0x9802, /* 92B8 */
+   0x9ce5, /* 92B9 */
+   0x52c5, /* 92BA */
+   0x6357, /* 92BB */
+   0x76f4, /* 92BC */
+   0x6715, /* 92BD */
+   0x6c88, /* 92BE */
+   0x73cd, /* 92BF */
+   0x8cc3, /* 92C0 */
+   0x93ae, /* 92C1 */
+   0x9673, /* 92C2 */
+   0x6d25, /* 92C3 */
+   0x589c, /* 92C4 */
+   0x690e, /* 92C5 */
+   0x69cc, /* 92C6 */
+   0x8ffd, /* 92C7 */
+   0x939a, /* 92C8 */
+   0x75db, /* 92C9 */
+   0x901a, /* 92CA */
+   0x585a, /* 92CB */
+   0x6802, /* 92CC */
+   0x63b4, /* 92CD */
+   0x69fb, /* 92CE */
+   0x4f43, /* 92CF */
+   0x6f2c, /* 92D0 */
+   0x67d8, /* 92D1 */
+   0x8fbb, /* 92D2 */
+   0x8526, /* 92D3 */
+   0x7db4, /* 92D4 */
+   0x9354, /* 92D5 */
+   0x693f, /* 92D6 */
+   0x6f70, /* 92D7 */
+   0x576a, /* 92D8 */
+   0x58f7, /* 92D9 */
+   0x5b2c, /* 92DA */
+   0x7d2c, /* 92DB */
+   0x722a, /* 92DC */
+   0x540a, /* 92DD */
+   0x91e3, /* 92DE */
+   0x9db4, /* 92DF */
+   0x4ead, /* 92E0 */
+   0x4f4e, /* 92E1 */
+   0x505c, /* 92E2 */
+   0x5075, /* 92E3 */
+   0x5243, /* 92E4 */
+   0x8c9e, /* 92E5 */
+   0x5448, /* 92E6 */
+   0x5824, /* 92E7 */
+   0x5b9a, /* 92E8 */
+   0x5e1d, /* 92E9 */
+   0x5e95, /* 92EA */
+   0x5ead, /* 92EB */
+   0x5ef7, /* 92EC */
+   0x5f1f, /* 92ED */
+   0x608c, /* 92EE */
+   0x62b5, /* 92EF */
+   0x633a, /* 92F0 */
+   0x63d0, /* 92F1 */
+   0x68af, /* 92F2 */
+   0x6c40, /* 92F3 */
+   0x7887, /* 92F4 */
+   0x798e, /* 92F5 */
+   0x7a0b, /* 92F6 */
+   0x7de0, /* 92F7 */
+   0x8247, /* 92F8 */
+   0x8a02, /* 92F9 */
+   0x8ae6, /* 92FA */
+   0x8e44, /* 92FB */
+   0x9013, /* 92FC */
+   0x90b8, /* 9340 */
+   0x912d, /* 9341 */
+   0x91d8, /* 9342 */
+   0x9f0e, /* 9343 */
+   0x6ce5, /* 9344 */
+   0x6458, /* 9345 */
+   0x64e2, /* 9346 */
+   0x6575, /* 9347 */
+   0x6ef4, /* 9348 */
+   0x7684, /* 9349 */
+   0x7b1b, /* 934A */
+   0x9069, /* 934B */
+   0x93d1, /* 934C */
+   0x6eba, /* 934D */
+   0x54f2, /* 934E */
+   0x5fb9, /* 934F */
+   0x64a4, /* 9350 */
+   0x8f4d, /* 9351 */
+   0x8fed, /* 9352 */
+   0x9244, /* 9353 */
+   0x5178, /* 9354 */
+   0x586b, /* 9355 */
+   0x5929, /* 9356 */
+   0x5c55, /* 9357 */
+   0x5e97, /* 9358 */
+   0x6dfb, /* 9359 */
+   0x7e8f, /* 935A */
+   0x751c, /* 935B */
+   0x8cbc, /* 935C */
+   0x8ee2, /* 935D */
+   0x985b, /* 935E */
+   0x70b9, /* 935F */
+   0x4f1d, /* 9360 */
+   0x6bbf, /* 9361 */
+   0x6fb1, /* 9362 */
+   0x7530, /* 9363 */
+   0x96fb, /* 9364 */
+   0x514e, /* 9365 */
+   0x5410, /* 9366 */
+   0x5835, /* 9367 */
+   0x5857, /* 9368 */
+   0x59ac, /* 9369 */
+   0x5c60, /* 936A */
+   0x5f92, /* 936B */
+   0x6597, /* 936C */
+   0x675c, /* 936D */
+   0x6e21, /* 936E */
+   0x767b, /* 936F */
+   0x83df, /* 9370 */
+   0x8ced, /* 9371 */
+   0x9014, /* 9372 */
+   0x90fd, /* 9373 */
+   0x934d, /* 9374 */
+   0x7825, /* 9375 */
+   0x783a, /* 9376 */
+   0x52aa, /* 9377 */
+   0x5ea6, /* 9378 */
+   0x571f, /* 9379 */
+   0x5974, /* 937A */
+   0x6012, /* 937B */
+   0x5012, /* 937C */
+   0x515a, /* 937D */
+   0x51ac, /* 937E */
+   0x51cd, /* 9380 */
+   0x5200, /* 9381 */
+   0x5510, /* 9382 */
+   0x5854, /* 9383 */
+   0x5858, /* 9384 */
+   0x5957, /* 9385 */
+   0x5b95, /* 9386 */
+   0x5cf6, /* 9387 */
+   0x5d8b, /* 9388 */
+   0x60bc, /* 9389 */
+   0x6295, /* 938A */
+   0x642d, /* 938B */
+   0x6771, /* 938C */
+   0x6843, /* 938D */
+   0x68bc, /* 938E */
+   0x68df, /* 938F */
+   0x76d7, /* 9390 */
+   0x6dd8, /* 9391 */
+   0x6e6f, /* 9392 */
+   0x6d9b, /* 9393 */
+   0x706f, /* 9394 */
+   0x71c8, /* 9395 */
+   0x5f53, /* 9396 */
+   0x75d8, /* 9397 */
+   0x7977, /* 9398 */
+   0x7b49, /* 9399 */
+   0x7b54, /* 939A */
+   0x7b52, /* 939B */
+   0x7cd6, /* 939C */
+   0x7d71, /* 939D */
+   0x5230, /* 939E */
+   0x8463, /* 939F */
+   0x8569, /* 93A0 */
+   0x85e4, /* 93A1 */
+   0x8a0e, /* 93A2 */
+   0x8b04, /* 93A3 */
+   0x8c46, /* 93A4 */
+   0x8e0f, /* 93A5 */
+   0x9003, /* 93A6 */
+   0x900f, /* 93A7 */
+   0x9419, /* 93A8 */
+   0x9676, /* 93A9 */
+   0x982d, /* 93AA */
+   0x9a30, /* 93AB */
+   0x95d8, /* 93AC */
+   0x50cd, /* 93AD */
+   0x52d5, /* 93AE */
+   0x540c, /* 93AF */
+   0x5802, /* 93B0 */
+   0x5c0e, /* 93B1 */
+   0x61a7, /* 93B2 */
+   0x649e, /* 93B3 */
+   0x6d1e, /* 93B4 */
+   0x77b3, /* 93B5 */
+   0x7ae5, /* 93B6 */
+   0x80f4, /* 93B7 */
+   0x8404, /* 93B8 */
+   0x9053, /* 93B9 */
+   0x9285, /* 93BA */
+   0x5ce0, /* 93BB */
+   0x9d07, /* 93BC */
+   0x533f, /* 93BD */
+   0x5f97, /* 93BE */
+   0x5fb3, /* 93BF */
+   0x6d9c, /* 93C0 */
+   0x7279, /* 93C1 */
+   0x7763, /* 93C2 */
+   0x79bf, /* 93C3 */
+   0x7be4, /* 93C4 */
+   0x6bd2, /* 93C5 */
+   0x72ec, /* 93C6 */
+   0x8aad, /* 93C7 */
+   0x6803, /* 93C8 */
+   0x6a61, /* 93C9 */
+   0x51f8, /* 93CA */
+   0x7a81, /* 93CB */
+   0x6934, /* 93CC */
+   0x5c4a, /* 93CD */
+   0x9cf6, /* 93CE */
+   0x82eb, /* 93CF */
+   0x5bc5, /* 93D0 */
+   0x9149, /* 93D1 */
+   0x701e, /* 93D2 */
+   0x5678, /* 93D3 */
+   0x5c6f, /* 93D4 */
+   0x60c7, /* 93D5 */
+   0x6566, /* 93D6 */
+   0x6c8c, /* 93D7 */
+   0x8c5a, /* 93D8 */
+   0x9041, /* 93D9 */
+   0x9813, /* 93DA */
+   0x5451, /* 93DB */
+   0x66c7, /* 93DC */
+   0x920d, /* 93DD */
+   0x5948, /* 93DE */
+   0x90a3, /* 93DF */
+   0x5185, /* 93E0 */
+   0x4e4d, /* 93E1 */
+   0x51ea, /* 93E2 */
+   0x8599, /* 93E3 */
+   0x8b0e, /* 93E4 */
+   0x7058, /* 93E5 */
+   0x637a, /* 93E6 */
+   0x934b, /* 93E7 */
+   0x6962, /* 93E8 */
+   0x99b4, /* 93E9 */
+   0x7e04, /* 93EA */
+   0x7577, /* 93EB */
+   0x5357, /* 93EC */
+   0x6960, /* 93ED */
+   0x8edf, /* 93EE */
+   0x96e3, /* 93EF */
+   0x6c5d, /* 93F0 */
+   0x4e8c, /* 93F1 */
+   0x5c3c, /* 93F2 */
+   0x5f10, /* 93F3 */
+   0x8fe9, /* 93F4 */
+   0x5302, /* 93F5 */
+   0x8cd1, /* 93F6 */
+   0x8089, /* 93F7 */
+   0x8679, /* 93F8 */
+   0x5eff, /* 93F9 */
+   0x65e5, /* 93FA */
+   0x4e73, /* 93FB */
+   0x5165, /* 93FC */
+   0x5982, /* 9440 */
+   0x5c3f, /* 9441 */
+   0x97ee, /* 9442 */
+   0x4efb, /* 9443 */
+   0x598a, /* 9444 */
+   0x5fcd, /* 9445 */
+   0x8a8d, /* 9446 */
+   0x6fe1, /* 9447 */
+   0x79b0, /* 9448 */
+   0x7962, /* 9449 */
+   0x5be7, /* 944A */
+   0x8471, /* 944B */
+   0x732b, /* 944C */
+   0x71b1, /* 944D */
+   0x5e74, /* 944E */
+   0x5ff5, /* 944F */
+   0x637b, /* 9450 */
+   0x649a, /* 9451 */
+   0x71c3, /* 9452 */
+   0x7c98, /* 9453 */
+   0x4e43, /* 9454 */
+   0x5efc, /* 9455 */
+   0x4e4b, /* 9456 */
+   0x57dc, /* 9457 */
+   0x56a2, /* 9458 */
+   0x60a9, /* 9459 */
+   0x6fc3, /* 945A */
+   0x7d0d, /* 945B */
+   0x80fd, /* 945C */
+   0x8133, /* 945D */
+   0x81bf, /* 945E */
+   0x8fb2, /* 945F */
+   0x8997, /* 9460 */
+   0x86a4, /* 9461 */
+   0x5df4, /* 9462 */
+   0x628a, /* 9463 */
+   0x64ad, /* 9464 */
+   0x8987, /* 9465 */
+   0x6777, /* 9466 */
+   0x6ce2, /* 9467 */
+   0x6d3e, /* 9468 */
+   0x7436, /* 9469 */
+   0x7834, /* 946A */
+   0x5a46, /* 946B */
+   0x7f75, /* 946C */
+   0x82ad, /* 946D */
+   0x99ac, /* 946E */
+   0x4ff3, /* 946F */
+   0x5ec3, /* 9470 */
+   0x62dd, /* 9471 */
+   0x6392, /* 9472 */
+   0x6557, /* 9473 */
+   0x676f, /* 9474 */
+   0x76c3, /* 9475 */
+   0x724c, /* 9476 */
+   0x80cc, /* 9477 */
+   0x80ba, /* 9478 */
+   0x8f29, /* 9479 */
+   0x914d, /* 947A */
+   0x500d, /* 947B */
+   0x57f9, /* 947C */
+   0x5a92, /* 947D */
+   0x6885, /* 947E */
+   0x6973, /* 9480 */
+   0x7164, /* 9481 */
+   0x72fd, /* 9482 */
+   0x8cb7, /* 9483 */
+   0x58f2, /* 9484 */
+   0x8ce0, /* 9485 */
+   0x966a, /* 9486 */
+   0x9019, /* 9487 */
+   0x877f, /* 9488 */
+   0x79e4, /* 9489 */
+   0x77e7, /* 948A */
+   0x8429, /* 948B */
+   0x4f2f, /* 948C */
+   0x5265, /* 948D */
+   0x535a, /* 948E */
+   0x62cd, /* 948F */
+   0x67cf, /* 9490 */
+   0x6cca, /* 9491 */
+   0x767d, /* 9492 */
+   0x7b94, /* 9493 */
+   0x7c95, /* 9494 */
+   0x8236, /* 9495 */
+   0x8584, /* 9496 */
+   0x8feb, /* 9497 */
+   0x66dd, /* 9498 */
+   0x6f20, /* 9499 */
+   0x7206, /* 949A */
+   0x7e1b, /* 949B */
+   0x83ab, /* 949C */
+   0x99c1, /* 949D */
+   0x9ea6, /* 949E */
+   0x51fd, /* 949F */
+   0x7bb1, /* 94A0 */
+   0x7872, /* 94A1 */
+   0x7bb8, /* 94A2 */
+   0x8087, /* 94A3 */
+   0x7b48, /* 94A4 */
+   0x6ae8, /* 94A5 */
+   0x5e61, /* 94A6 */
+   0x808c, /* 94A7 */
+   0x7551, /* 94A8 */
+   0x7560, /* 94A9 */
+   0x516b, /* 94AA */
+   0x9262, /* 94AB */
+   0x6e8c, /* 94AC */
+   0x767a, /* 94AD */
+   0x9197, /* 94AE */
+   0x9aea, /* 94AF */
+   0x4f10, /* 94B0 */
+   0x7f70, /* 94B1 */
+   0x629c, /* 94B2 */
+   0x7b4f, /* 94B3 */
+   0x95a5, /* 94B4 */
+   0x9ce9, /* 94B5 */
+   0x567a, /* 94B6 */
+   0x5859, /* 94B7 */
+   0x86e4, /* 94B8 */
+   0x96bc, /* 94B9 */
+   0x4f34, /* 94BA */
+   0x5224, /* 94BB */
+   0x534a, /* 94BC */
+   0x53cd, /* 94BD */
+   0x53db, /* 94BE */
+   0x5e06, /* 94BF */
+   0x642c, /* 94C0 */
+   0x6591, /* 94C1 */
+   0x677f, /* 94C2 */
+   0x6c3e, /* 94C3 */
+   0x6c4e, /* 94C4 */
+   0x7248, /* 94C5 */
+   0x72af, /* 94C6 */
+   0x73ed, /* 94C7 */
+   0x7554, /* 94C8 */
+   0x7e41, /* 94C9 */
+   0x822c, /* 94CA */
+   0x85e9, /* 94CB */
+   0x8ca9, /* 94CC */
+   0x7bc4, /* 94CD */
+   0x91c6, /* 94CE */
+   0x7169, /* 94CF */
+   0x9812, /* 94D0 */
+   0x98ef, /* 94D1 */
+   0x633d, /* 94D2 */
+   0x6669, /* 94D3 */
+   0x756a, /* 94D4 */
+   0x76e4, /* 94D5 */
+   0x78d0, /* 94D6 */
+   0x8543, /* 94D7 */
+   0x86ee, /* 94D8 */
+   0x532a, /* 94D9 */
+   0x5351, /* 94DA */
+   0x5426, /* 94DB */
+   0x5983, /* 94DC */
+   0x5e87, /* 94DD */
+   0x5f7c, /* 94DE */
+   0x60b2, /* 94DF */
+   0x6249, /* 94E0 */
+   0x6279, /* 94E1 */
+   0x62ab, /* 94E2 */
+   0x6590, /* 94E3 */
+   0x6bd4, /* 94E4 */
+   0x6ccc, /* 94E5 */
+   0x75b2, /* 94E6 */
+   0x76ae, /* 94E7 */
+   0x7891, /* 94E8 */
+   0x79d8, /* 94E9 */
+   0x7dcb, /* 94EA */
+   0x7f77, /* 94EB */
+   0x80a5, /* 94EC */
+   0x88ab, /* 94ED */
+   0x8ab9, /* 94EE */
+   0x8cbb, /* 94EF */
+   0x907f, /* 94F0 */
+   0x975e, /* 94F1 */
+   0x98db, /* 94F2 */
+   0x6a0b, /* 94F3 */
+   0x7c38, /* 94F4 */
+   0x5099, /* 94F5 */
+   0x5c3e, /* 94F6 */
+   0x5fae, /* 94F7 */
+   0x6787, /* 94F8 */
+   0x6bd8, /* 94F9 */
+   0x7435, /* 94FA */
+   0x7709, /* 94FB */
+   0x7f8e, /* 94FC */
+   0x9f3b, /* 9540 */
+   0x67ca, /* 9541 */
+   0x7a17, /* 9542 */
+   0x5339, /* 9543 */
+   0x758b, /* 9544 */
+   0x9aed, /* 9545 */
+   0x5f66, /* 9546 */
+   0x819d, /* 9547 */
+   0x83f1, /* 9548 */
+   0x8098, /* 9549 */
+   0x5f3c, /* 954A */
+   0x5fc5, /* 954B */
+   0x7562, /* 954C */
+   0x7b46, /* 954D */
+   0x903c, /* 954E */
+   0x6867, /* 954F */
+   0x59eb, /* 9550 */
+   0x5a9b, /* 9551 */
+   0x7d10, /* 9552 */
+   0x767e, /* 9553 */
+   0x8b2c, /* 9554 */
+   0x4ff5, /* 9555 */
+   0x5f6a, /* 9556 */
+   0x6a19, /* 9557 */
+   0x6c37, /* 9558 */
+   0x6f02, /* 9559 */
+   0x74e2, /* 955A */
+   0x7968, /* 955B */
+   0x8868, /* 955C */
+   0x8a55, /* 955D */
+   0x8c79, /* 955E */
+   0x5edf, /* 955F */
+   0x63cf, /* 9560 */
+   0x75c5, /* 9561 */
+   0x79d2, /* 9562 */
+   0x82d7, /* 9563 */
+   0x9328, /* 9564 */
+   0x92f2, /* 9565 */
+   0x849c, /* 9566 */
+   0x86ed, /* 9567 */
+   0x9c2d, /* 9568 */
+   0x54c1, /* 9569 */
+   0x5f6c, /* 956A */
+   0x658c, /* 956B */
+   0x6d5c, /* 956C */
+   0x7015, /* 956D */
+   0x8ca7, /* 956E */
+   0x8cd3, /* 956F */
+   0x983b, /* 9570 */
+   0x654f, /* 9571 */
+   0x74f6, /* 9572 */
+   0x4e0d, /* 9573 */
+   0x4ed8, /* 9574 */
+   0x57e0, /* 9575 */
+   0x592b, /* 9576 */
+   0x5a66, /* 9577 */
+   0x5bcc, /* 9578 */
+   0x51a8, /* 9579 */
+   0x5e03, /* 957A */
+   0x5e9c, /* 957B */
+   0x6016, /* 957C */
+   0x6276, /* 957D */
+   0x6577, /* 957E */
+   0x65a7, /* 9580 */
+   0x666e, /* 9581 */
+   0x6d6e, /* 9582 */
+   0x7236, /* 9583 */
+   0x7b26, /* 9584 */
+   0x8150, /* 9585 */
+   0x819a, /* 9586 */
+   0x8299, /* 9587 */
+   0x8b5c, /* 9588 */
+   0x8ca0, /* 9589 */
+   0x8ce6, /* 958A */
+   0x8d74, /* 958B */
+   0x961c, /* 958C */
+   0x9644, /* 958D */
+   0x4fae, /* 958E */
+   0x64ab, /* 958F */
+   0x6b66, /* 9590 */
+   0x821e, /* 9591 */
+   0x8461, /* 9592 */
+   0x856a, /* 9593 */
+   0x90e8, /* 9594 */
+   0x5c01, /* 9595 */
+   0x6953, /* 9596 */
+   0x98a8, /* 9597 */
+   0x847a, /* 9598 */
+   0x8557, /* 9599 */
+   0x4f0f, /* 959A */
+   0x526f, /* 959B */
+   0x5fa9, /* 959C */
+   0x5e45, /* 959D */
+   0x670d, /* 959E */
+   0x798f, /* 959F */
+   0x8179, /* 95A0 */
+   0x8907, /* 95A1 */
+   0x8986, /* 95A2 */
+   0x6df5, /* 95A3 */
+   0x5f17, /* 95A4 */
+   0x6255, /* 95A5 */
+   0x6cb8, /* 95A6 */
+   0x4ecf, /* 95A7 */
+   0x7269, /* 95A8 */
+   0x9b92, /* 95A9 */
+   0x5206, /* 95AA */
+   0x543b, /* 95AB */
+   0x5674, /* 95AC */
+   0x58b3, /* 95AD */
+   0x61a4, /* 95AE */
+   0x626e, /* 95AF */
+   0x711a, /* 95B0 */
+   0x596e, /* 95B1 */
+   0x7c89, /* 95B2 */
+   0x7cde, /* 95B3 */
+   0x7d1b, /* 95B4 */
+   0x96f0, /* 95B5 */
+   0x6587, /* 95B6 */
+   0x805e, /* 95B7 */
+   0x4e19, /* 95B8 */
+   0x4f75, /* 95B9 */
+   0x5175, /* 95BA */
+   0x5840, /* 95BB */
+   0x5e63, /* 95BC */
+   0x5e73, /* 95BD */
+   0x5f0a, /* 95BE */
+   0x67c4, /* 95BF */
+   0x4e26, /* 95C0 */
+   0x853d, /* 95C1 */
+   0x9589, /* 95C2 */
+   0x965b, /* 95C3 */
+   0x7c73, /* 95C4 */
+   0x9801, /* 95C5 */
+   0x50fb, /* 95C6 */
+   0x58c1, /* 95C7 */
+   0x7656, /* 95C8 */
+   0x78a7, /* 95C9 */
+   0x5225, /* 95CA */
+   0x77a5, /* 95CB */
+   0x8511, /* 95CC */
+   0x7b86, /* 95CD */
+   0x504f, /* 95CE */
+   0x5909, /* 95CF */
+   0x7247, /* 95D0 */
+   0x7bc7, /* 95D1 */
+   0x7de8, /* 95D2 */
+   0x8fba, /* 95D3 */
+   0x8fd4, /* 95D4 */
+   0x904d, /* 95D5 */
+   0x4fbf, /* 95D6 */
+   0x52c9, /* 95D7 */
+   0x5a29, /* 95D8 */
+   0x5f01, /* 95D9 */
+   0x97ad, /* 95DA */
+   0x4fdd, /* 95DB */
+   0x8217, /* 95DC */
+   0x92ea, /* 95DD */
+   0x5703, /* 95DE */
+   0x6355, /* 95DF */
+   0x6b69, /* 95E0 */
+   0x752b, /* 95E1 */
+   0x88dc, /* 95E2 */
+   0x8f14, /* 95E3 */
+   0x7a42, /* 95E4 */
+   0x52df, /* 95E5 */
+   0x5893, /* 95E6 */
+   0x6155, /* 95E7 */
+   0x620a, /* 95E8 */
+   0x66ae, /* 95E9 */
+   0x6bcd, /* 95EA */
+   0x7c3f, /* 95EB */
+   0x83e9, /* 95EC */
+   0x5023, /* 95ED */
+   0x4ff8, /* 95EE */
+   0x5305, /* 95EF */
+   0x5446, /* 95F0 */
+   0x5831, /* 95F1 */
+   0x5949, /* 95F2 */
+   0x5b9d, /* 95F3 */
+   0x5cf0, /* 95F4 */
+   0x5cef, /* 95F5 */
+   0x5d29, /* 95F6 */
+   0x5e96, /* 95F7 */
+   0x62b1, /* 95F8 */
+   0x6367, /* 95F9 */
+   0x653e, /* 95FA */
+   0x65b9, /* 95FB */
+   0x670b, /* 95FC */
+   0x6cd5, /* 9640 */
+   0x6ce1, /* 9641 */
+   0x70f9, /* 9642 */
+   0x7832, /* 9643 */
+   0x7e2b, /* 9644 */
+   0x80de, /* 9645 */
+   0x82b3, /* 9646 */
+   0x840c, /* 9647 */
+   0x84ec, /* 9648 */
+   0x8702, /* 9649 */
+   0x8912, /* 964A */
+   0x8a2a, /* 964B */
+   0x8c4a, /* 964C */
+   0x90a6, /* 964D */
+   0x92d2, /* 964E */
+   0x98fd, /* 964F */
+   0x9cf3, /* 9650 */
+   0x9d6c, /* 9651 */
+   0x4e4f, /* 9652 */
+   0x4ea1, /* 9653 */
+   0x508d, /* 9654 */
+   0x5256, /* 9655 */
+   0x574a, /* 9656 */
+   0x59a8, /* 9657 */
+   0x5e3d, /* 9658 */
+   0x5fd8, /* 9659 */
+   0x5fd9, /* 965A */
+   0x623f, /* 965B */
+   0x66b4, /* 965C */
+   0x671b, /* 965D */
+   0x67d0, /* 965E */
+   0x68d2, /* 965F */
+   0x5192, /* 9660 */
+   0x7d21, /* 9661 */
+   0x80aa, /* 9662 */
+   0x81a8, /* 9663 */
+   0x8b00, /* 9664 */
+   0x8c8c, /* 9665 */
+   0x8cbf, /* 9666 */
+   0x927e, /* 9667 */
+   0x9632, /* 9668 */
+   0x5420, /* 9669 */
+   0x982c, /* 966A */
+   0x5317, /* 966B */
+   0x50d5, /* 966C */
+   0x535c, /* 966D */
+   0x58a8, /* 966E */
+   0x64b2, /* 966F */
+   0x6734, /* 9670 */
+   0x7267, /* 9671 */
+   0x7766, /* 9672 */
+   0x7a46, /* 9673 */
+   0x91e6, /* 9674 */
+   0x52c3, /* 9675 */
+   0x6ca1, /* 9676 */
+   0x6b86, /* 9677 */
+   0x5800, /* 9678 */
+   0x5e4c, /* 9679 */
+   0x5954, /* 967A */
+   0x672c, /* 967B */
+   0x7ffb, /* 967C */
+   0x51e1, /* 967D */
+   0x76c6, /* 967E */
+   0x6469, /* 9680 */
+   0x78e8, /* 9681 */
+   0x9b54, /* 9682 */
+   0x9ebb, /* 9683 */
+   0x57cb, /* 9684 */
+   0x59b9, /* 9685 */
+   0x6627, /* 9686 */
+   0x679a, /* 9687 */
+   0x6bce, /* 9688 */
+   0x54e9, /* 9689 */
+   0x69d9, /* 968A */
+   0x5e55, /* 968B */
+   0x819c, /* 968C */
+   0x6795, /* 968D */
+   0x9baa, /* 968E */
+   0x67fe, /* 968F */
+   0x9c52, /* 9690 */
+   0x685d, /* 9691 */
+   0x4ea6, /* 9692 */
+   0x4fe3, /* 9693 */
+   0x53c8, /* 9694 */
+   0x62b9, /* 9695 */
+   0x672b, /* 9696 */
+   0x6cab, /* 9697 */
+   0x8fc4, /* 9698 */
+   0x4fad, /* 9699 */
+   0x7e6d, /* 969A */
+   0x9ebf, /* 969B */
+   0x4e07, /* 969C */
+   0x6162, /* 969D */
+   0x6e80, /* 969E */
+   0x6f2b, /* 969F */
+   0x8513, /* 96A0 */
+   0x5473, /* 96A1 */
+   0x672a, /* 96A2 */
+   0x9b45, /* 96A3 */
+   0x5df3, /* 96A4 */
+   0x7b95, /* 96A5 */
+   0x5cac, /* 96A6 */
+   0x5bc6, /* 96A7 */
+   0x871c, /* 96A8 */
+   0x6e4a, /* 96A9 */
+   0x84d1, /* 96AA */
+   0x7a14, /* 96AB */
+   0x8108, /* 96AC */
+   0x5999, /* 96AD */
+   0x7c8d, /* 96AE */
+   0x6c11, /* 96AF */
+   0x7720, /* 96B0 */
+   0x52d9, /* 96B1 */
+   0x5922, /* 96B2 */
+   0x7121, /* 96B3 */
+   0x725f, /* 96B4 */
+   0x77db, /* 96B5 */
+   0x9727, /* 96B6 */
+   0x9d61, /* 96B7 */
+   0x690b, /* 96B8 */
+   0x5a7f, /* 96B9 */
+   0x5a18, /* 96BA */
+   0x51a5, /* 96BB */
+   0x540d, /* 96BC */
+   0x547d, /* 96BD */
+   0x660e, /* 96BE */
+   0x76df, /* 96BF */
+   0x8ff7, /* 96C0 */
+   0x9298, /* 96C1 */
+   0x9cf4, /* 96C2 */
+   0x59ea, /* 96C3 */
+   0x725d, /* 96C4 */
+   0x6ec5, /* 96C5 */
+   0x514d, /* 96C6 */
+   0x68c9, /* 96C7 */
+   0x7dbf, /* 96C8 */
+   0x7dec, /* 96C9 */
+   0x9762, /* 96CA */
+   0x9eba, /* 96CB */
+   0x6478, /* 96CC */
+   0x6a21, /* 96CD */
+   0x8302, /* 96CE */
+   0x5984, /* 96CF */
+   0x5b5f, /* 96D0 */
+   0x6bdb, /* 96D1 */
+   0x731b, /* 96D2 */
+   0x76f2, /* 96D3 */
+   0x7db2, /* 96D4 */
+   0x8017, /* 96D5 */
+   0x8499, /* 96D6 */
+   0x5132, /* 96D7 */
+   0x6728, /* 96D8 */
+   0x9ed9, /* 96D9 */
+   0x76ee, /* 96DA */
+   0x6762, /* 96DB */
+   0x52ff, /* 96DC */
+   0x9905, /* 96DD */
+   0x5c24, /* 96DE */
+   0x623b, /* 96DF */
+   0x7c7e, /* 96E0 */
+   0x8cb0, /* 96E1 */
+   0x554f, /* 96E2 */
+   0x60b6, /* 96E3 */
+   0x7d0b, /* 96E4 */
+   0x9580, /* 96E5 */
+   0x5301, /* 96E6 */
+   0x4e5f, /* 96E7 */
+   0x51b6, /* 96E8 */
+   0x591c, /* 96E9 */
+   0x723a, /* 96EA */
+   0x8036, /* 96EB */
+   0x91ce, /* 96EC */
+   0x5f25, /* 96ED */
+   0x77e2, /* 96EE */
+   0x5384, /* 96EF */
+   0x5f79, /* 96F0 */
+   0x7d04, /* 96F1 */
+   0x85ac, /* 96F2 */
+   0x8a33, /* 96F3 */
+   0x8e8d, /* 96F4 */
+   0x9756, /* 96F5 */
+   0x67f3, /* 96F6 */
+   0x85ae, /* 96F7 */
+   0x9453, /* 96F8 */
+   0x6109, /* 96F9 */
+   0x6108, /* 96FA */
+   0x6cb9, /* 96FB */
+   0x7652, /* 96FC */
+   0x8aed, /* 9740 */
+   0x8f38, /* 9741 */
+   0x552f, /* 9742 */
+   0x4f51, /* 9743 */
+   0x512a, /* 9744 */
+   0x52c7, /* 9745 */
+   0x53cb, /* 9746 */
+   0x5ba5, /* 9747 */
+   0x5e7d, /* 9748 */
+   0x60a0, /* 9749 */
+   0x6182, /* 974A */
+   0x63d6, /* 974B */
+   0x6709, /* 974C */
+   0x67da, /* 974D */
+   0x6e67, /* 974E */
+   0x6d8c, /* 974F */
+   0x7336, /* 9750 */
+   0x7337, /* 9751 */
+   0x7531, /* 9752 */
+   0x7950, /* 9753 */
+   0x88d5, /* 9754 */
+   0x8a98, /* 9755 */
+   0x904a, /* 9756 */
+   0x9091, /* 9757 */
+   0x90f5, /* 9758 */
+   0x96c4, /* 9759 */
+   0x878d, /* 975A */
+   0x5915, /* 975B */
+   0x4e88, /* 975C */
+   0x4f59, /* 975D */
+   0x4e0e, /* 975E */
+   0x8a89, /* 975F */
+   0x8f3f, /* 9760 */
+   0x9810, /* 9761 */
+   0x50ad, /* 9762 */
+   0x5e7c, /* 9763 */
+   0x5996, /* 9764 */
+   0x5bb9, /* 9765 */
+   0x5eb8, /* 9766 */
+   0x63da, /* 9767 */
+   0x63fa, /* 9768 */
+   0x64c1, /* 9769 */
+   0x66dc, /* 976A */
+   0x694a, /* 976B */
+   0x69d8, /* 976C */
+   0x6d0b, /* 976D */
+   0x6eb6, /* 976E */
+   0x7194, /* 976F */
+   0x7528, /* 9770 */
+   0x7aaf, /* 9771 */
+   0x7f8a, /* 9772 */
+   0x8000, /* 9773 */
+   0x8449, /* 9774 */
+   0x84c9, /* 9775 */
+   0x8981, /* 9776 */
+   0x8b21, /* 9777 */
+   0x8e0a, /* 9778 */
+   0x9065, /* 9779 */
+   0x967d, /* 977A */
+   0x990a, /* 977B */
+   0x617e, /* 977C */
+   0x6291, /* 977D */
+   0x6b32, /* 977E */
+   0x6c83, /* 9780 */
+   0x6d74, /* 9781 */
+   0x7fcc, /* 9782 */
+   0x7ffc, /* 9783 */
+   0x6dc0, /* 9784 */
+   0x7f85, /* 9785 */
+   0x87ba, /* 9786 */
+   0x88f8, /* 9787 */
+   0x6765, /* 9788 */
+   0x83b1, /* 9789 */
+   0x983c, /* 978A */
+   0x96f7, /* 978B */
+   0x6d1b, /* 978C */
+   0x7d61, /* 978D */
+   0x843d, /* 978E */
+   0x916a, /* 978F */
+   0x4e71, /* 9790 */
+   0x5375, /* 9791 */
+   0x5d50, /* 9792 */
+   0x6b04, /* 9793 */
+   0x6feb, /* 9794 */
+   0x85cd, /* 9795 */
+   0x862d, /* 9796 */
+   0x89a7, /* 9797 */
+   0x5229, /* 9798 */
+   0x540f, /* 9799 */
+   0x5c65, /* 979A */
+   0x674e, /* 979B */
+   0x68a8, /* 979C */
+   0x7406, /* 979D */
+   0x7483, /* 979E */
+   0x75e2, /* 979F */
+   0x88cf, /* 97A0 */
+   0x88e1, /* 97A1 */
+   0x91cc, /* 97A2 */
+   0x96e2, /* 97A3 */
+   0x9678, /* 97A4 */
+   0x5f8b, /* 97A5 */
+   0x7387, /* 97A6 */
+   0x7acb, /* 97A7 */
+   0x844e, /* 97A8 */
+   0x63a0, /* 97A9 */
+   0x7565, /* 97AA */
+   0x5289, /* 97AB */
+   0x6d41, /* 97AC */
+   0x6e9c, /* 97AD */
+   0x7409, /* 97AE */
+   0x7559, /* 97AF */
+   0x786b, /* 97B0 */
+   0x7c92, /* 97B1 */
+   0x9686, /* 97B2 */
+   0x7adc, /* 97B3 */
+   0x9f8d, /* 97B4 */
+   0x4fb6, /* 97B5 */
+   0x616e, /* 97B6 */
+   0x65c5, /* 97B7 */
+   0x865c, /* 97B8 */
+   0x4e86, /* 97B9 */
+   0x4eae, /* 97BA */
+   0x50da, /* 97BB */
+   0x4e21, /* 97BC */
+   0x51cc, /* 97BD */
+   0x5bee, /* 97BE */
+   0x6599, /* 97BF */
+   0x6881, /* 97C0 */
+   0x6dbc, /* 97C1 */
+   0x731f, /* 97C2 */
+   0x7642, /* 97C3 */
+   0x77ad, /* 97C4 */
+   0x7a1c, /* 97C5 */
+   0x7ce7, /* 97C6 */
+   0x826f, /* 97C7 */
+   0x8ad2, /* 97C8 */
+   0x907c, /* 97C9 */
+   0x91cf, /* 97CA */
+   0x9675, /* 97CB */
+   0x9818, /* 97CC */
+   0x529b, /* 97CD */
+   0x7dd1, /* 97CE */
+   0x502b, /* 97CF */
+   0x5398, /* 97D0 */
+   0x6797, /* 97D1 */
+   0x6dcb, /* 97D2 */
+   0x71d0, /* 97D3 */
+   0x7433, /* 97D4 */
+   0x81e8, /* 97D5 */
+   0x8f2a, /* 97D6 */
+   0x96a3, /* 97D7 */
+   0x9c57, /* 97D8 */
+   0x9e9f, /* 97D9 */
+   0x7460, /* 97DA */
+   0x5841, /* 97DB */
+   0x6d99, /* 97DC */
+   0x7d2f, /* 97DD */
+   0x985e, /* 97DE */
+   0x4ee4, /* 97DF */
+   0x4f36, /* 97E0 */
+   0x4f8b, /* 97E1 */
+   0x51b7, /* 97E2 */
+   0x52b1, /* 97E3 */
+   0x5dba, /* 97E4 */
+   0x601c, /* 97E5 */
+   0x73b2, /* 97E6 */
+   0x793c, /* 97E7 */
+   0x82d3, /* 97E8 */
+   0x9234, /* 97E9 */
+   0x96b7, /* 97EA */
+   0x96f6, /* 97EB */
+   0x970a, /* 97EC */
+   0x9e97, /* 97ED */
+   0x9f62, /* 97EE */
+   0x66a6, /* 97EF */
+   0x6b74, /* 97F0 */
+   0x5217, /* 97F1 */
+   0x52a3, /* 97F2 */
+   0x70c8, /* 97F3 */
+   0x88c2, /* 97F4 */
+   0x5ec9, /* 97F5 */
+   0x604b, /* 97F6 */
+   0x6190, /* 97F7 */
+   0x6f23, /* 97F8 */
+   0x7149, /* 97F9 */
+   0x7c3e, /* 97FA */
+   0x7df4, /* 97FB */
+   0x806f, /* 97FC */
+   0x84ee, /* 9840 */
+   0x9023, /* 9841 */
+   0x932c, /* 9842 */
+   0x5442, /* 9843 */
+   0x9b6f, /* 9844 */
+   0x6ad3, /* 9845 */
+   0x7089, /* 9846 */
+   0x8cc2, /* 9847 */
+   0x8def, /* 9848 */
+   0x9732, /* 9849 */
+   0x52b4, /* 984A */
+   0x5a41, /* 984B */
+   0x5eca, /* 984C */
+   0x5f04, /* 984D */
+   0x6717, /* 984E */
+   0x697c, /* 984F */
+   0x6994, /* 9850 */
+   0x6d6a, /* 9851 */
+   0x6f0f, /* 9852 */
+   0x7262, /* 9853 */
+   0x72fc, /* 9854 */
+   0x7bed, /* 9855 */
+   0x8001, /* 9856 */
+   0x807e, /* 9857 */
+   0x874b, /* 9858 */
+   0x90ce, /* 9859 */
+   0x516d, /* 985A */
+   0x9e93, /* 985B */
+   0x7984, /* 985C */
+   0x808b, /* 985D */
+   0x9332, /* 985E */
+   0x8ad6, /* 985F */
+   0x502d, /* 9860 */
+   0x548c, /* 9861 */
+   0x8a71, /* 9862 */
+   0x6b6a, /* 9863 */
+   0x8cc4, /* 9864 */
+   0x8107, /* 9865 */
+   0x60d1, /* 9866 */
+   0x67a0, /* 9867 */
+   0x9df2, /* 9868 */
+   0x4e99, /* 9869 */
+   0x4e98, /* 986A */
+   0x9c10, /* 986B */
+   0x8a6b, /* 986C */
+   0x85c1, /* 986D */
+   0x8568, /* 986E */
+   0x6900, /* 986F */
+   0x6e7e, /* 9870 */
+   0x7897, /* 9871 */
+   0x8155, /* 9872 */
+      '?', /* 9873 */
+      '?', /* 9874 */
+      '?', /* 9875 */
+      '?', /* 9876 */
+      '?', /* 9877 */
+      '?', /* 9878 */
+      '?', /* 9879 */
+      '?', /* 987A */
+      '?', /* 987B */
+      '?', /* 987C */
+      '?', /* 987D */
+      '?', /* 987E */
+      '?', /* 9880 */
+      '?', /* 9881 */
+      '?', /* 9882 */
+      '?', /* 9883 */
+      '?', /* 9884 */
+      '?', /* 9885 */
+      '?', /* 9886 */
+      '?', /* 9887 */
+      '?', /* 9888 */
+      '?', /* 9889 */
+      '?', /* 988A */
+      '?', /* 988B */
+      '?', /* 988C */
+      '?', /* 988D */
+      '?', /* 988E */
+      '?', /* 988F */
+      '?', /* 9890 */
+      '?', /* 9891 */
+      '?', /* 9892 */
+      '?', /* 9893 */
+      '?', /* 9894 */
+      '?', /* 9895 */
+      '?', /* 9896 */
+      '?', /* 9897 */
+      '?', /* 9898 */
+      '?', /* 9899 */
+      '?', /* 989A */
+      '?', /* 989B */
+      '?', /* 989C */
+      '?', /* 989D */
+      '?', /* 989E */
+   0x5f0c, /* 989F */
+   0x4e10, /* 98A0 */
+   0x4e15, /* 98A1 */
+   0x4e2a, /* 98A2 */
+   0x4e31, /* 98A3 */
+   0x4e36, /* 98A4 */
+   0x4e3c, /* 98A5 */
+   0x4e3f, /* 98A6 */
+   0x4e42, /* 98A7 */
+   0x4e56, /* 98A8 */
+   0x4e58, /* 98A9 */
+   0x4e82, /* 98AA */
+   0x4e85, /* 98AB */
+   0x8c6b, /* 98AC */
+   0x4e8a, /* 98AD */
+   0x8212, /* 98AE */
+   0x5f0d, /* 98AF */
+   0x4e8e, /* 98B0 */
+   0x4e9e, /* 98B1 */
+   0x4e9f, /* 98B2 */
+   0x4ea0, /* 98B3 */
+   0x4ea2, /* 98B4 */
+   0x4eb0, /* 98B5 */
+   0x4eb3, /* 98B6 */
+   0x4eb6, /* 98B7 */
+   0x4ece, /* 98B8 */
+   0x4ecd, /* 98B9 */
+   0x4ec4, /* 98BA */
+   0x4ec6, /* 98BB */
+   0x4ec2, /* 98BC */
+   0x4ed7, /* 98BD */
+   0x4ede, /* 98BE */
+   0x4eed, /* 98BF */
+   0x4edf, /* 98C0 */
+   0x4ef7, /* 98C1 */
+   0x4f09, /* 98C2 */
+   0x4f5a, /* 98C3 */
+   0x4f30, /* 98C4 */
+   0x4f5b, /* 98C5 */
+   0x4f5d, /* 98C6 */
+   0x4f57, /* 98C7 */
+   0x4f47, /* 98C8 */
+   0x4f76, /* 98C9 */
+   0x4f88, /* 98CA */
+   0x4f8f, /* 98CB */
+   0x4f98, /* 98CC */
+   0x4f7b, /* 98CD */
+   0x4f69, /* 98CE */
+   0x4f70, /* 98CF */
+   0x4f91, /* 98D0 */
+   0x4f6f, /* 98D1 */
+   0x4f86, /* 98D2 */
+   0x4f96, /* 98D3 */
+   0x5118, /* 98D4 */
+   0x4fd4, /* 98D5 */
+   0x4fdf, /* 98D6 */
+   0x4fce, /* 98D7 */
+   0x4fd8, /* 98D8 */
+   0x4fdb, /* 98D9 */
+   0x4fd1, /* 98DA */
+   0x4fda, /* 98DB */
+   0x4fd0, /* 98DC */
+   0x4fe4, /* 98DD */
+   0x4fe5, /* 98DE */
+   0x501a, /* 98DF */
+   0x5028, /* 98E0 */
+   0x5014, /* 98E1 */
+   0x502a, /* 98E2 */
+   0x5025, /* 98E3 */
+   0x5005, /* 98E4 */
+   0x4f1c, /* 98E5 */
+   0x4ff6, /* 98E6 */
+   0x5021, /* 98E7 */
+   0x5029, /* 98E8 */
+   0x502c, /* 98E9 */
+   0x4ffe, /* 98EA */
+   0x4fef, /* 98EB */
+   0x5011, /* 98EC */
+   0x5006, /* 98ED */
+   0x5043, /* 98EE */
+   0x5047, /* 98EF */
+   0x6703, /* 98F0 */
+   0x5055, /* 98F1 */
+   0x5050, /* 98F2 */
+   0x5048, /* 98F3 */
+   0x505a, /* 98F4 */
+   0x5056, /* 98F5 */
+   0x506c, /* 98F6 */
+   0x5078, /* 98F7 */
+   0x5080, /* 98F8 */
+   0x509a, /* 98F9 */
+   0x5085, /* 98FA */
+   0x50b4, /* 98FB */
+   0x50b2, /* 98FC */
+   0x50c9, /* 9940 */
+   0x50ca, /* 9941 */
+   0x50b3, /* 9942 */
+   0x50c2, /* 9943 */
+   0x50d6, /* 9944 */
+   0x50de, /* 9945 */
+   0x50e5, /* 9946 */
+   0x50ed, /* 9947 */
+   0x50e3, /* 9948 */
+   0x50ee, /* 9949 */
+   0x50f9, /* 994A */
+   0x50f5, /* 994B */
+   0x5109, /* 994C */
+   0x5101, /* 994D */
+   0x5102, /* 994E */
+   0x5116, /* 994F */
+   0x5115, /* 9950 */
+   0x5114, /* 9951 */
+   0x511a, /* 9952 */
+   0x5121, /* 9953 */
+   0x513a, /* 9954 */
+   0x5137, /* 9955 */
+   0x513c, /* 9956 */
+   0x513b, /* 9957 */
+   0x513f, /* 9958 */
+   0x5140, /* 9959 */
+   0x5152, /* 995A */
+   0x514c, /* 995B */
+   0x5154, /* 995C */
+   0x5162, /* 995D */
+   0x7af8, /* 995E */
+   0x5169, /* 995F */
+   0x516a, /* 9960 */
+   0x516e, /* 9961 */
+   0x5180, /* 9962 */
+   0x5182, /* 9963 */
+   0x56d8, /* 9964 */
+   0x518c, /* 9965 */
+   0x5189, /* 9966 */
+   0x518f, /* 9967 */
+   0x5191, /* 9968 */
+   0x5193, /* 9969 */
+   0x5195, /* 996A */
+   0x5196, /* 996B */
+   0x51a4, /* 996C */
+   0x51a6, /* 996D */
+   0x51a2, /* 996E */
+   0x51a9, /* 996F */
+   0x51aa, /* 9970 */
+   0x51ab, /* 9971 */
+   0x51b3, /* 9972 */
+   0x51b1, /* 9973 */
+   0x51b2, /* 9974 */
+   0x51b0, /* 9975 */
+   0x51b5, /* 9976 */
+   0x51bd, /* 9977 */
+   0x51c5, /* 9978 */
+   0x51c9, /* 9979 */
+   0x51db, /* 997A */
+   0x51e0, /* 997B */
+   0x8655, /* 997C */
+   0x51e9, /* 997D */
+   0x51ed, /* 997E */
+   0x51f0, /* 9980 */
+   0x51f5, /* 9981 */
+   0x51fe, /* 9982 */
+   0x5204, /* 9983 */
+   0x520b, /* 9984 */
+   0x5214, /* 9985 */
+   0x520e, /* 9986 */
+   0x5227, /* 9987 */
+   0x522a, /* 9988 */
+   0x522e, /* 9989 */
+   0x5233, /* 998A */
+   0x5239, /* 998B */
+   0x524f, /* 998C */
+   0x5244, /* 998D */
+   0x524b, /* 998E */
+   0x524c, /* 998F */
+   0x525e, /* 9990 */
+   0x5254, /* 9991 */
+   0x526a, /* 9992 */
+   0x5274, /* 9993 */
+   0x5269, /* 9994 */
+   0x5273, /* 9995 */
+   0x527f, /* 9996 */
+   0x527d, /* 9997 */
+   0x528d, /* 9998 */
+   0x5294, /* 9999 */
+   0x5292, /* 999A */
+   0x5271, /* 999B */
+   0x5288, /* 999C */
+   0x5291, /* 999D */
+   0x8fa8, /* 999E */
+   0x8fa7, /* 999F */
+   0x52ac, /* 99A0 */
+   0x52ad, /* 99A1 */
+   0x52bc, /* 99A2 */
+   0x52b5, /* 99A3 */
+   0x52c1, /* 99A4 */
+   0x52cd, /* 99A5 */
+   0x52d7, /* 99A6 */
+   0x52de, /* 99A7 */
+   0x52e3, /* 99A8 */
+   0x52e6, /* 99A9 */
+   0x98ed, /* 99AA */
+   0x52e0, /* 99AB */
+   0x52f3, /* 99AC */
+   0x52f5, /* 99AD */
+   0x52f8, /* 99AE */
+   0x52f9, /* 99AF */
+   0x5306, /* 99B0 */
+   0x5308, /* 99B1 */
+   0x7538, /* 99B2 */
+   0x530d, /* 99B3 */
+   0x5310, /* 99B4 */
+   0x530f, /* 99B5 */
+   0x5315, /* 99B6 */
+   0x531a, /* 99B7 */
+   0x5323, /* 99B8 */
+   0x532f, /* 99B9 */
+   0x5331, /* 99BA */
+   0x5333, /* 99BB */
+   0x5338, /* 99BC */
+   0x5340, /* 99BD */
+   0x5346, /* 99BE */
+   0x5345, /* 99BF */
+   0x4e17, /* 99C0 */
+   0x5349, /* 99C1 */
+   0x534d, /* 99C2 */
+   0x51d6, /* 99C3 */
+   0x535e, /* 99C4 */
+   0x5369, /* 99C5 */
+   0x536e, /* 99C6 */
+   0x5918, /* 99C7 */
+   0x537b, /* 99C8 */
+   0x5377, /* 99C9 */
+   0x5382, /* 99CA */
+   0x5396, /* 99CB */
+   0x53a0, /* 99CC */
+   0x53a6, /* 99CD */
+   0x53a5, /* 99CE */
+   0x53ae, /* 99CF */
+   0x53b0, /* 99D0 */
+   0x53b6, /* 99D1 */
+   0x53c3, /* 99D2 */
+   0x7c12, /* 99D3 */
+   0x96d9, /* 99D4 */
+   0x53df, /* 99D5 */
+   0x66fc, /* 99D6 */
+   0x71ee, /* 99D7 */
+   0x53ee, /* 99D8 */
+   0x53e8, /* 99D9 */
+   0x53ed, /* 99DA */
+   0x53fa, /* 99DB */
+   0x5401, /* 99DC */
+   0x543d, /* 99DD */
+   0x5440, /* 99DE */
+   0x542c, /* 99DF */
+   0x542d, /* 99E0 */
+   0x543c, /* 99E1 */
+   0x542e, /* 99E2 */
+   0x5436, /* 99E3 */
+   0x5429, /* 99E4 */
+   0x541d, /* 99E5 */
+   0x544e, /* 99E6 */
+   0x548f, /* 99E7 */
+   0x5475, /* 99E8 */
+   0x548e, /* 99E9 */
+   0x545f, /* 99EA */
+   0x5471, /* 99EB */
+   0x5477, /* 99EC */
+   0x5470, /* 99ED */
+   0x5492, /* 99EE */
+   0x547b, /* 99EF */
+   0x5480, /* 99F0 */
+   0x5476, /* 99F1 */
+   0x5484, /* 99F2 */
+   0x5490, /* 99F3 */
+   0x5486, /* 99F4 */
+   0x54c7, /* 99F5 */
+   0x54a2, /* 99F6 */
+   0x54b8, /* 99F7 */
+   0x54a5, /* 99F8 */
+   0x54ac, /* 99F9 */
+   0x54c4, /* 99FA */
+   0x54c8, /* 99FB */
+   0x54a8, /* 99FC */
+   0x54ab, /* 9A40 */
+   0x54c2, /* 9A41 */
+   0x54a4, /* 9A42 */
+   0x54be, /* 9A43 */
+   0x54bc, /* 9A44 */
+   0x54d8, /* 9A45 */
+   0x54e5, /* 9A46 */
+   0x54e6, /* 9A47 */
+   0x550f, /* 9A48 */
+   0x5514, /* 9A49 */
+   0x54fd, /* 9A4A */
+   0x54ee, /* 9A4B */
+   0x54ed, /* 9A4C */
+   0x54fa, /* 9A4D */
+   0x54e2, /* 9A4E */
+   0x5539, /* 9A4F */
+   0x5540, /* 9A50 */
+   0x5563, /* 9A51 */
+   0x554c, /* 9A52 */
+   0x552e, /* 9A53 */
+   0x555c, /* 9A54 */
+   0x5545, /* 9A55 */
+   0x5556, /* 9A56 */
+   0x5557, /* 9A57 */
+   0x5538, /* 9A58 */
+   0x5533, /* 9A59 */
+   0x555d, /* 9A5A */
+   0x5599, /* 9A5B */
+   0x5580, /* 9A5C */
+   0x54af, /* 9A5D */
+   0x558a, /* 9A5E */
+   0x559f, /* 9A5F */
+   0x557b, /* 9A60 */
+   0x557e, /* 9A61 */
+   0x5598, /* 9A62 */
+   0x559e, /* 9A63 */
+   0x55ae, /* 9A64 */
+   0x557c, /* 9A65 */
+   0x5583, /* 9A66 */
+   0x55a9, /* 9A67 */
+   0x5587, /* 9A68 */
+   0x55a8, /* 9A69 */
+   0x55da, /* 9A6A */
+   0x55c5, /* 9A6B */
+   0x55df, /* 9A6C */
+   0x55c4, /* 9A6D */
+   0x55dc, /* 9A6E */
+   0x55e4, /* 9A6F */
+   0x55d4, /* 9A70 */
+   0x5614, /* 9A71 */
+   0x55f7, /* 9A72 */
+   0x5616, /* 9A73 */
+   0x55fe, /* 9A74 */
+   0x55fd, /* 9A75 */
+   0x561b, /* 9A76 */
+   0x55f9, /* 9A77 */
+   0x564e, /* 9A78 */
+   0x5650, /* 9A79 */
+   0x71df, /* 9A7A */
+   0x5634, /* 9A7B */
+   0x5636, /* 9A7C */
+   0x5632, /* 9A7D */
+   0x5638, /* 9A7E */
+   0x566b, /* 9A80 */
+   0x5664, /* 9A81 */
+   0x562f, /* 9A82 */
+   0x566c, /* 9A83 */
+   0x566a, /* 9A84 */
+   0x5686, /* 9A85 */
+   0x5680, /* 9A86 */
+   0x568a, /* 9A87 */
+   0x56a0, /* 9A88 */
+   0x5694, /* 9A89 */
+   0x568f, /* 9A8A */
+   0x56a5, /* 9A8B */
+   0x56ae, /* 9A8C */
+   0x56b6, /* 9A8D */
+   0x56b4, /* 9A8E */
+   0x56c2, /* 9A8F */
+   0x56bc, /* 9A90 */
+   0x56c1, /* 9A91 */
+   0x56c3, /* 9A92 */
+   0x56c0, /* 9A93 */
+   0x56c8, /* 9A94 */
+   0x56ce, /* 9A95 */
+   0x56d1, /* 9A96 */
+   0x56d3, /* 9A97 */
+   0x56d7, /* 9A98 */
+   0x56ee, /* 9A99 */
+   0x56f9, /* 9A9A */
+   0x5700, /* 9A9B */
+   0x56ff, /* 9A9C */
+   0x5704, /* 9A9D */
+   0x5709, /* 9A9E */
+   0x5708, /* 9A9F */
+   0x570b, /* 9AA0 */
+   0x570d, /* 9AA1 */
+   0x5713, /* 9AA2 */
+   0x5718, /* 9AA3 */
+   0x5716, /* 9AA4 */
+   0x55c7, /* 9AA5 */
+   0x571c, /* 9AA6 */
+   0x5726, /* 9AA7 */
+   0x5737, /* 9AA8 */
+   0x5738, /* 9AA9 */
+   0x574e, /* 9AAA */
+   0x573b, /* 9AAB */
+   0x5740, /* 9AAC */
+   0x574f, /* 9AAD */
+   0x5769, /* 9AAE */
+   0x57c0, /* 9AAF */
+   0x5788, /* 9AB0 */
+   0x5761, /* 9AB1 */
+   0x577f, /* 9AB2 */
+   0x5789, /* 9AB3 */
+   0x5793, /* 9AB4 */
+   0x57a0, /* 9AB5 */
+   0x57b3, /* 9AB6 */
+   0x57a4, /* 9AB7 */
+   0x57aa, /* 9AB8 */
+   0x57b0, /* 9AB9 */
+   0x57c3, /* 9ABA */
+   0x57c6, /* 9ABB */
+   0x57d4, /* 9ABC */
+   0x57d2, /* 9ABD */
+   0x57d3, /* 9ABE */
+   0x580a, /* 9ABF */
+   0x57d6, /* 9AC0 */
+   0x57e3, /* 9AC1 */
+   0x580b, /* 9AC2 */
+   0x5819, /* 9AC3 */
+   0x581d, /* 9AC4 */
+   0x5872, /* 9AC5 */
+   0x5821, /* 9AC6 */
+   0x5862, /* 9AC7 */
+   0x584b, /* 9AC8 */
+   0x5870, /* 9AC9 */
+   0x6bc0, /* 9ACA */
+   0x5852, /* 9ACB */
+   0x583d, /* 9ACC */
+   0x5879, /* 9ACD */
+   0x5885, /* 9ACE */
+   0x58b9, /* 9ACF */
+   0x589f, /* 9AD0 */
+   0x58ab, /* 9AD1 */
+   0x58ba, /* 9AD2 */
+   0x58de, /* 9AD3 */
+   0x58bb, /* 9AD4 */
+   0x58b8, /* 9AD5 */
+   0x58ae, /* 9AD6 */
+   0x58c5, /* 9AD7 */
+   0x58d3, /* 9AD8 */
+   0x58d1, /* 9AD9 */
+   0x58d7, /* 9ADA */
+   0x58d9, /* 9ADB */
+   0x58d8, /* 9ADC */
+   0x58e5, /* 9ADD */
+   0x58dc, /* 9ADE */
+   0x58e4, /* 9ADF */
+   0x58df, /* 9AE0 */
+   0x58ef, /* 9AE1 */
+   0x58fa, /* 9AE2 */
+   0x58f9, /* 9AE3 */
+   0x58fb, /* 9AE4 */
+   0x58fc, /* 9AE5 */
+   0x58fd, /* 9AE6 */
+   0x5902, /* 9AE7 */
+   0x590a, /* 9AE8 */
+   0x5910, /* 9AE9 */
+   0x591b, /* 9AEA */
+   0x68a6, /* 9AEB */
+   0x5925, /* 9AEC */
+   0x592c, /* 9AED */
+   0x592d, /* 9AEE */
+   0x5932, /* 9AEF */
+   0x5938, /* 9AF0 */
+   0x593e, /* 9AF1 */
+   0x7ad2, /* 9AF2 */
+   0x5955, /* 9AF3 */
+   0x5950, /* 9AF4 */
+   0x594e, /* 9AF5 */
+   0x595a, /* 9AF6 */
+   0x5958, /* 9AF7 */
+   0x5962, /* 9AF8 */
+   0x5960, /* 9AF9 */
+   0x5967, /* 9AFA */
+   0x596c, /* 9AFB */
+   0x5969, /* 9AFC */
+   0x5978, /* 9B40 */
+   0x5981, /* 9B41 */
+   0x599d, /* 9B42 */
+   0x4f5e, /* 9B43 */
+   0x4fab, /* 9B44 */
+   0x59a3, /* 9B45 */
+   0x59b2, /* 9B46 */
+   0x59c6, /* 9B47 */
+   0x59e8, /* 9B48 */
+   0x59dc, /* 9B49 */
+   0x598d, /* 9B4A */
+   0x59d9, /* 9B4B */
+   0x59da, /* 9B4C */
+   0x5a25, /* 9B4D */
+   0x5a1f, /* 9B4E */
+   0x5a11, /* 9B4F */
+   0x5a1c, /* 9B50 */
+   0x5a09, /* 9B51 */
+   0x5a1a, /* 9B52 */
+   0x5a40, /* 9B53 */
+   0x5a6c, /* 9B54 */
+   0x5a49, /* 9B55 */
+   0x5a35, /* 9B56 */
+   0x5a36, /* 9B57 */
+   0x5a62, /* 9B58 */
+   0x5a6a, /* 9B59 */
+   0x5a9a, /* 9B5A */
+   0x5abc, /* 9B5B */
+   0x5abe, /* 9B5C */
+   0x5acb, /* 9B5D */
+   0x5ac2, /* 9B5E */
+   0x5abd, /* 9B5F */
+   0x5ae3, /* 9B60 */
+   0x5ad7, /* 9B61 */
+   0x5ae6, /* 9B62 */
+   0x5ae9, /* 9B63 */
+   0x5ad6, /* 9B64 */
+   0x5afa, /* 9B65 */
+   0x5afb, /* 9B66 */
+   0x5b0c, /* 9B67 */
+   0x5b0b, /* 9B68 */
+   0x5b16, /* 9B69 */
+   0x5b32, /* 9B6A */
+   0x5ad0, /* 9B6B */
+   0x5b2a, /* 9B6C */
+   0x5b36, /* 9B6D */
+   0x5b3e, /* 9B6E */
+   0x5b43, /* 9B6F */
+   0x5b45, /* 9B70 */
+   0x5b40, /* 9B71 */
+   0x5b51, /* 9B72 */
+   0x5b55, /* 9B73 */
+   0x5b5a, /* 9B74 */
+   0x5b5b, /* 9B75 */
+   0x5b65, /* 9B76 */
+   0x5b69, /* 9B77 */
+   0x5b70, /* 9B78 */
+   0x5b73, /* 9B79 */
+   0x5b75, /* 9B7A */
+   0x5b78, /* 9B7B */
+   0x6588, /* 9B7C */
+   0x5b7a, /* 9B7D */
+   0x5b80, /* 9B7E */
+   0x5b83, /* 9B80 */
+   0x5ba6, /* 9B81 */
+   0x5bb8, /* 9B82 */
+   0x5bc3, /* 9B83 */
+   0x5bc7, /* 9B84 */
+   0x5bc9, /* 9B85 */
+   0x5bd4, /* 9B86 */
+   0x5bd0, /* 9B87 */
+   0x5be4, /* 9B88 */
+   0x5be6, /* 9B89 */
+   0x5be2, /* 9B8A */
+   0x5bde, /* 9B8B */
+   0x5be5, /* 9B8C */
+   0x5beb, /* 9B8D */
+   0x5bf0, /* 9B8E */
+   0x5bf6, /* 9B8F */
+   0x5bf3, /* 9B90 */
+   0x5c05, /* 9B91 */
+   0x5c07, /* 9B92 */
+   0x5c08, /* 9B93 */
+   0x5c0d, /* 9B94 */
+   0x5c13, /* 9B95 */
+   0x5c20, /* 9B96 */
+   0x5c22, /* 9B97 */
+   0x5c28, /* 9B98 */
+   0x5c38, /* 9B99 */
+   0x5c39, /* 9B9A */
+   0x5c41, /* 9B9B */
+   0x5c46, /* 9B9C */
+   0x5c4e, /* 9B9D */
+   0x5c53, /* 9B9E */
+   0x5c50, /* 9B9F */
+   0x5c4f, /* 9BA0 */
+   0x5b71, /* 9BA1 */
+   0x5c6c, /* 9BA2 */
+   0x5c6e, /* 9BA3 */
+   0x4e62, /* 9BA4 */
+   0x5c76, /* 9BA5 */
+   0x5c79, /* 9BA6 */
+   0x5c8c, /* 9BA7 */
+   0x5c91, /* 9BA8 */
+   0x5c94, /* 9BA9 */
+   0x599b, /* 9BAA */
+   0x5cab, /* 9BAB */
+   0x5cbb, /* 9BAC */
+   0x5cb6, /* 9BAD */
+   0x5cbc, /* 9BAE */
+   0x5cb7, /* 9BAF */
+   0x5cc5, /* 9BB0 */
+   0x5cbe, /* 9BB1 */
+   0x5cc7, /* 9BB2 */
+   0x5cd9, /* 9BB3 */
+   0x5ce9, /* 9BB4 */
+   0x5cfd, /* 9BB5 */
+   0x5cfa, /* 9BB6 */
+   0x5ced, /* 9BB7 */
+   0x5d8c, /* 9BB8 */
+   0x5cea, /* 9BB9 */
+   0x5d0b, /* 9BBA */
+   0x5d15, /* 9BBB */
+   0x5d17, /* 9BBC */
+   0x5d5c, /* 9BBD */
+   0x5d1f, /* 9BBE */
+   0x5d1b, /* 9BBF */
+   0x5d11, /* 9BC0 */
+   0x5d14, /* 9BC1 */
+   0x5d22, /* 9BC2 */
+   0x5d1a, /* 9BC3 */
+   0x5d19, /* 9BC4 */
+   0x5d18, /* 9BC5 */
+   0x5d4c, /* 9BC6 */
+   0x5d52, /* 9BC7 */
+   0x5d4e, /* 9BC8 */
+   0x5d4b, /* 9BC9 */
+   0x5d6c, /* 9BCA */
+   0x5d73, /* 9BCB */
+   0x5d76, /* 9BCC */
+   0x5d87, /* 9BCD */
+   0x5d84, /* 9BCE */
+   0x5d82, /* 9BCF */
+   0x5da2, /* 9BD0 */
+   0x5d9d, /* 9BD1 */
+   0x5dac, /* 9BD2 */
+   0x5dae, /* 9BD3 */
+   0x5dbd, /* 9BD4 */
+   0x5d90, /* 9BD5 */
+   0x5db7, /* 9BD6 */
+   0x5dbc, /* 9BD7 */
+   0x5dc9, /* 9BD8 */
+   0x5dcd, /* 9BD9 */
+   0x5dd3, /* 9BDA */
+   0x5dd2, /* 9BDB */
+   0x5dd6, /* 9BDC */
+   0x5ddb, /* 9BDD */
+   0x5deb, /* 9BDE */
+   0x5df2, /* 9BDF */
+   0x5df5, /* 9BE0 */
+   0x5e0b, /* 9BE1 */
+   0x5e1a, /* 9BE2 */
+   0x5e19, /* 9BE3 */
+   0x5e11, /* 9BE4 */
+   0x5e1b, /* 9BE5 */
+   0x5e36, /* 9BE6 */
+   0x5e37, /* 9BE7 */
+   0x5e44, /* 9BE8 */
+   0x5e43, /* 9BE9 */
+   0x5e40, /* 9BEA */
+   0x5e4e, /* 9BEB */
+   0x5e57, /* 9BEC */
+   0x5e54, /* 9BED */
+   0x5e5f, /* 9BEE */
+   0x5e62, /* 9BEF */
+   0x5e64, /* 9BF0 */
+   0x5e47, /* 9BF1 */
+   0x5e75, /* 9BF2 */
+   0x5e76, /* 9BF3 */
+   0x5e7a, /* 9BF4 */
+   0x9ebc, /* 9BF5 */
+   0x5e7f, /* 9BF6 */
+   0x5ea0, /* 9BF7 */
+   0x5ec1, /* 9BF8 */
+   0x5ec2, /* 9BF9 */
+   0x5ec8, /* 9BFA */
+   0x5ed0, /* 9BFB */
+   0x5ecf, /* 9BFC */
+   0x5ed6, /* 9C40 */
+   0x5ee3, /* 9C41 */
+   0x5edd, /* 9C42 */
+   0x5eda, /* 9C43 */
+   0x5edb, /* 9C44 */
+   0x5ee2, /* 9C45 */
+   0x5ee1, /* 9C46 */
+   0x5ee8, /* 9C47 */
+   0x5ee9, /* 9C48 */
+   0x5eec, /* 9C49 */
+   0x5ef1, /* 9C4A */
+   0x5ef3, /* 9C4B */
+   0x5ef0, /* 9C4C */
+   0x5ef4, /* 9C4D */
+   0x5ef8, /* 9C4E */
+   0x5efe, /* 9C4F */
+   0x5f03, /* 9C50 */
+   0x5f09, /* 9C51 */
+   0x5f5d, /* 9C52 */
+   0x5f5c, /* 9C53 */
+   0x5f0b, /* 9C54 */
+   0x5f11, /* 9C55 */
+   0x5f16, /* 9C56 */
+   0x5f29, /* 9C57 */
+   0x5f2d, /* 9C58 */
+   0x5f38, /* 9C59 */
+   0x5f41, /* 9C5A */
+   0x5f48, /* 9C5B */
+   0x5f4c, /* 9C5C */
+   0x5f4e, /* 9C5D */
+   0x5f2f, /* 9C5E */
+   0x5f51, /* 9C5F */
+   0x5f56, /* 9C60 */
+   0x5f57, /* 9C61 */
+   0x5f59, /* 9C62 */
+   0x5f61, /* 9C63 */
+   0x5f6d, /* 9C64 */
+   0x5f73, /* 9C65 */
+   0x5f77, /* 9C66 */
+   0x5f83, /* 9C67 */
+   0x5f82, /* 9C68 */
+   0x5f7f, /* 9C69 */
+   0x5f8a, /* 9C6A */
+   0x5f88, /* 9C6B */
+   0x5f91, /* 9C6C */
+   0x5f87, /* 9C6D */
+   0x5f9e, /* 9C6E */
+   0x5f99, /* 9C6F */
+   0x5f98, /* 9C70 */
+   0x5fa0, /* 9C71 */
+   0x5fa8, /* 9C72 */
+   0x5fad, /* 9C73 */
+   0x5fbc, /* 9C74 */
+   0x5fd6, /* 9C75 */
+   0x5ffb, /* 9C76 */
+   0x5fe4, /* 9C77 */
+   0x5ff8, /* 9C78 */
+   0x5ff1, /* 9C79 */
+   0x5fdd, /* 9C7A */
+   0x60b3, /* 9C7B */
+   0x5fff, /* 9C7C */
+   0x6021, /* 9C7D */
+   0x6060, /* 9C7E */
+   0x6019, /* 9C80 */
+   0x6010, /* 9C81 */
+   0x6029, /* 9C82 */
+   0x600e, /* 9C83 */
+   0x6031, /* 9C84 */
+   0x601b, /* 9C85 */
+   0x6015, /* 9C86 */
+   0x602b, /* 9C87 */
+   0x6026, /* 9C88 */
+   0x600f, /* 9C89 */
+   0x603a, /* 9C8A */
+   0x605a, /* 9C8B */
+   0x6041, /* 9C8C */
+   0x606a, /* 9C8D */
+   0x6077, /* 9C8E */
+   0x605f, /* 9C8F */
+   0x604a, /* 9C90 */
+   0x6046, /* 9C91 */
+   0x604d, /* 9C92 */
+   0x6063, /* 9C93 */
+   0x6043, /* 9C94 */
+   0x6064, /* 9C95 */
+   0x6042, /* 9C96 */
+   0x606c, /* 9C97 */
+   0x606b, /* 9C98 */
+   0x6059, /* 9C99 */
+   0x6081, /* 9C9A */
+   0x608d, /* 9C9B */
+   0x60e7, /* 9C9C */
+   0x6083, /* 9C9D */
+   0x609a, /* 9C9E */
+   0x6084, /* 9C9F */
+   0x609b, /* 9CA0 */
+   0x6096, /* 9CA1 */
+   0x6097, /* 9CA2 */
+   0x6092, /* 9CA3 */
+   0x60a7, /* 9CA4 */
+   0x608b, /* 9CA5 */
+   0x60e1, /* 9CA6 */
+   0x60b8, /* 9CA7 */
+   0x60e0, /* 9CA8 */
+   0x60d3, /* 9CA9 */
+   0x60b4, /* 9CAA */
+   0x5ff0, /* 9CAB */
+   0x60bd, /* 9CAC */
+   0x60c6, /* 9CAD */
+   0x60b5, /* 9CAE */
+   0x60d8, /* 9CAF */
+   0x614d, /* 9CB0 */
+   0x6115, /* 9CB1 */
+   0x6106, /* 9CB2 */
+   0x60f6, /* 9CB3 */
+   0x60f7, /* 9CB4 */
+   0x6100, /* 9CB5 */
+   0x60f4, /* 9CB6 */
+   0x60fa, /* 9CB7 */
+   0x6103, /* 9CB8 */
+   0x6121, /* 9CB9 */
+   0x60fb, /* 9CBA */
+   0x60f1, /* 9CBB */
+   0x610d, /* 9CBC */
+   0x610e, /* 9CBD */
+   0x6147, /* 9CBE */
+   0x613e, /* 9CBF */
+   0x6128, /* 9CC0 */
+   0x6127, /* 9CC1 */
+   0x614a, /* 9CC2 */
+   0x613f, /* 9CC3 */
+   0x613c, /* 9CC4 */
+   0x612c, /* 9CC5 */
+   0x6134, /* 9CC6 */
+   0x613d, /* 9CC7 */
+   0x6142, /* 9CC8 */
+   0x6144, /* 9CC9 */
+   0x6173, /* 9CCA */
+   0x6177, /* 9CCB */
+   0x6158, /* 9CCC */
+   0x6159, /* 9CCD */
+   0x615a, /* 9CCE */
+   0x616b, /* 9CCF */
+   0x6174, /* 9CD0 */
+   0x616f, /* 9CD1 */
+   0x6165, /* 9CD2 */
+   0x6171, /* 9CD3 */
+   0x615f, /* 9CD4 */
+   0x615d, /* 9CD5 */
+   0x6153, /* 9CD6 */
+   0x6175, /* 9CD7 */
+   0x6199, /* 9CD8 */
+   0x6196, /* 9CD9 */
+   0x6187, /* 9CDA */
+   0x61ac, /* 9CDB */
+   0x6194, /* 9CDC */
+   0x619a, /* 9CDD */
+   0x618a, /* 9CDE */
+   0x6191, /* 9CDF */
+   0x61ab, /* 9CE0 */
+   0x61ae, /* 9CE1 */
+   0x61cc, /* 9CE2 */
+   0x61ca, /* 9CE3 */
+   0x61c9, /* 9CE4 */
+   0x61f7, /* 9CE5 */
+   0x61c8, /* 9CE6 */
+   0x61c3, /* 9CE7 */
+   0x61c6, /* 9CE8 */
+   0x61ba, /* 9CE9 */
+   0x61cb, /* 9CEA */
+   0x7f79, /* 9CEB */
+   0x61cd, /* 9CEC */
+   0x61e6, /* 9CED */
+   0x61e3, /* 9CEE */
+   0x61f6, /* 9CEF */
+   0x61fa, /* 9CF0 */
+   0x61f4, /* 9CF1 */
+   0x61ff, /* 9CF2 */
+   0x61fd, /* 9CF3 */
+   0x61fc, /* 9CF4 */
+   0x61fe, /* 9CF5 */
+   0x6200, /* 9CF6 */
+   0x6208, /* 9CF7 */
+   0x6209, /* 9CF8 */
+   0x620d, /* 9CF9 */
+   0x620c, /* 9CFA */
+   0x6214, /* 9CFB */
+   0x621b, /* 9CFC */
+   0x621e, /* 9D40 */
+   0x6221, /* 9D41 */
+   0x622a, /* 9D42 */
+   0x622e, /* 9D43 */
+   0x6230, /* 9D44 */
+   0x6232, /* 9D45 */
+   0x6233, /* 9D46 */
+   0x6241, /* 9D47 */
+   0x624e, /* 9D48 */
+   0x625e, /* 9D49 */
+   0x6263, /* 9D4A */
+   0x625b, /* 9D4B */
+   0x6260, /* 9D4C */
+   0x6268, /* 9D4D */
+   0x627c, /* 9D4E */
+   0x6282, /* 9D4F */
+   0x6289, /* 9D50 */
+   0x627e, /* 9D51 */
+   0x6292, /* 9D52 */
+   0x6293, /* 9D53 */
+   0x6296, /* 9D54 */
+   0x62d4, /* 9D55 */
+   0x6283, /* 9D56 */
+   0x6294, /* 9D57 */
+   0x62d7, /* 9D58 */
+   0x62d1, /* 9D59 */
+   0x62bb, /* 9D5A */
+   0x62cf, /* 9D5B */
+   0x62ff, /* 9D5C */
+   0x62c6, /* 9D5D */
+   0x64d4, /* 9D5E */
+   0x62c8, /* 9D5F */
+   0x62dc, /* 9D60 */
+   0x62cc, /* 9D61 */
+   0x62ca, /* 9D62 */
+   0x62c2, /* 9D63 */
+   0x62c7, /* 9D64 */
+   0x629b, /* 9D65 */
+   0x62c9, /* 9D66 */
+   0x630c, /* 9D67 */
+   0x62ee, /* 9D68 */
+   0x62f1, /* 9D69 */
+   0x6327, /* 9D6A */
+   0x6302, /* 9D6B */
+   0x6308, /* 9D6C */
+   0x62ef, /* 9D6D */
+   0x62f5, /* 9D6E */
+   0x6350, /* 9D6F */
+   0x633e, /* 9D70 */
+   0x634d, /* 9D71 */
+   0x641c, /* 9D72 */
+   0x634f, /* 9D73 */
+   0x6396, /* 9D74 */
+   0x638e, /* 9D75 */
+   0x6380, /* 9D76 */
+   0x63ab, /* 9D77 */
+   0x6376, /* 9D78 */
+   0x63a3, /* 9D79 */
+   0x638f, /* 9D7A */
+   0x6389, /* 9D7B */
+   0x639f, /* 9D7C */
+   0x63b5, /* 9D7D */
+   0x636b, /* 9D7E */
+   0x6369, /* 9D80 */
+   0x63be, /* 9D81 */
+   0x63e9, /* 9D82 */
+   0x63c0, /* 9D83 */
+   0x63c6, /* 9D84 */
+   0x63e3, /* 9D85 */
+   0x63c9, /* 9D86 */
+   0x63d2, /* 9D87 */
+   0x63f6, /* 9D88 */
+   0x63c4, /* 9D89 */
+   0x6416, /* 9D8A */
+   0x6434, /* 9D8B */
+   0x6406, /* 9D8C */
+   0x6413, /* 9D8D */
+   0x6426, /* 9D8E */
+   0x6436, /* 9D8F */
+   0x651d, /* 9D90 */
+   0x6417, /* 9D91 */
+   0x6428, /* 9D92 */
+   0x640f, /* 9D93 */
+   0x6467, /* 9D94 */
+   0x646f, /* 9D95 */
+   0x6476, /* 9D96 */
+   0x644e, /* 9D97 */
+   0x652a, /* 9D98 */
+   0x6495, /* 9D99 */
+   0x6493, /* 9D9A */
+   0x64a5, /* 9D9B */
+   0x64a9, /* 9D9C */
+   0x6488, /* 9D9D */
+   0x64bc, /* 9D9E */
+   0x64da, /* 9D9F */
+   0x64d2, /* 9DA0 */
+   0x64c5, /* 9DA1 */
+   0x64c7, /* 9DA2 */
+   0x64bb, /* 9DA3 */
+   0x64d8, /* 9DA4 */
+   0x64c2, /* 9DA5 */
+   0x64f1, /* 9DA6 */
+   0x64e7, /* 9DA7 */
+   0x8209, /* 9DA8 */
+   0x64e0, /* 9DA9 */
+   0x64e1, /* 9DAA */
+   0x62ac, /* 9DAB */
+   0x64e3, /* 9DAC */
+   0x64ef, /* 9DAD */
+   0x652c, /* 9DAE */
+   0x64f6, /* 9DAF */
+   0x64f4, /* 9DB0 */
+   0x64f2, /* 9DB1 */
+   0x64fa, /* 9DB2 */
+   0x6500, /* 9DB3 */
+   0x64fd, /* 9DB4 */
+   0x6518, /* 9DB5 */
+   0x651c, /* 9DB6 */
+   0x6505, /* 9DB7 */
+   0x6524, /* 9DB8 */
+   0x6523, /* 9DB9 */
+   0x652b, /* 9DBA */
+   0x6534, /* 9DBB */
+   0x6535, /* 9DBC */
+   0x6537, /* 9DBD */
+   0x6536, /* 9DBE */
+   0x6538, /* 9DBF */
+   0x754b, /* 9DC0 */
+   0x6548, /* 9DC1 */
+   0x6556, /* 9DC2 */
+   0x6555, /* 9DC3 */
+   0x654d, /* 9DC4 */
+   0x6558, /* 9DC5 */
+   0x655e, /* 9DC6 */
+   0x655d, /* 9DC7 */
+   0x6572, /* 9DC8 */
+   0x6578, /* 9DC9 */
+   0x6582, /* 9DCA */
+   0x6583, /* 9DCB */
+   0x8b8a, /* 9DCC */
+   0x659b, /* 9DCD */
+   0x659f, /* 9DCE */
+   0x65ab, /* 9DCF */
+   0x65b7, /* 9DD0 */
+   0x65c3, /* 9DD1 */
+   0x65c6, /* 9DD2 */
+   0x65c1, /* 9DD3 */
+   0x65c4, /* 9DD4 */
+   0x65cc, /* 9DD5 */
+   0x65d2, /* 9DD6 */
+   0x65db, /* 9DD7 */
+   0x65d9, /* 9DD8 */
+   0x65e0, /* 9DD9 */
+   0x65e1, /* 9DDA */
+   0x65f1, /* 9DDB */
+   0x6772, /* 9DDC */
+   0x660a, /* 9DDD */
+   0x6603, /* 9DDE */
+   0x65fb, /* 9DDF */
+   0x6773, /* 9DE0 */
+   0x6635, /* 9DE1 */
+   0x6636, /* 9DE2 */
+   0x6634, /* 9DE3 */
+   0x661c, /* 9DE4 */
+   0x664f, /* 9DE5 */
+   0x6644, /* 9DE6 */
+   0x6649, /* 9DE7 */
+   0x6641, /* 9DE8 */
+   0x665e, /* 9DE9 */
+   0x665d, /* 9DEA */
+   0x6664, /* 9DEB */
+   0x6667, /* 9DEC */
+   0x6668, /* 9DED */
+   0x665f, /* 9DEE */
+   0x6662, /* 9DEF */
+   0x6670, /* 9DF0 */
+   0x6683, /* 9DF1 */
+   0x6688, /* 9DF2 */
+   0x668e, /* 9DF3 */
+   0x6689, /* 9DF4 */
+   0x6684, /* 9DF5 */
+   0x6698, /* 9DF6 */
+   0x669d, /* 9DF7 */
+   0x66c1, /* 9DF8 */
+   0x66b9, /* 9DF9 */
+   0x66c9, /* 9DFA */
+   0x66be, /* 9DFB */
+   0x66bc, /* 9DFC */
+   0x66c4, /* 9E40 */
+   0x66b8, /* 9E41 */
+   0x66d6, /* 9E42 */
+   0x66da, /* 9E43 */
+   0x66e0, /* 9E44 */
+   0x663f, /* 9E45 */
+   0x66e6, /* 9E46 */
+   0x66e9, /* 9E47 */
+   0x66f0, /* 9E48 */
+   0x66f5, /* 9E49 */
+   0x66f7, /* 9E4A */
+   0x670f, /* 9E4B */
+   0x6716, /* 9E4C */
+   0x671e, /* 9E4D */
+   0x6726, /* 9E4E */
+   0x6727, /* 9E4F */
+   0x9738, /* 9E50 */
+   0x672e, /* 9E51 */
+   0x673f, /* 9E52 */
+   0x6736, /* 9E53 */
+   0x6741, /* 9E54 */
+   0x6738, /* 9E55 */
+   0x6737, /* 9E56 */
+   0x6746, /* 9E57 */
+   0x675e, /* 9E58 */
+   0x6760, /* 9E59 */
+   0x6759, /* 9E5A */
+   0x6763, /* 9E5B */
+   0x6764, /* 9E5C */
+   0x6789, /* 9E5D */
+   0x6770, /* 9E5E */
+   0x67a9, /* 9E5F */
+   0x677c, /* 9E60 */
+   0x676a, /* 9E61 */
+   0x678c, /* 9E62 */
+   0x678b, /* 9E63 */
+   0x67a6, /* 9E64 */
+   0x67a1, /* 9E65 */
+   0x6785, /* 9E66 */
+   0x67b7, /* 9E67 */
+   0x67ef, /* 9E68 */
+   0x67b4, /* 9E69 */
+   0x67ec, /* 9E6A */
+   0x67b3, /* 9E6B */
+   0x67e9, /* 9E6C */
+   0x67b8, /* 9E6D */
+   0x67e4, /* 9E6E */
+   0x67de, /* 9E6F */
+   0x67dd, /* 9E70 */
+   0x67e2, /* 9E71 */
+   0x67ee, /* 9E72 */
+   0x67b9, /* 9E73 */
+   0x67ce, /* 9E74 */
+   0x67c6, /* 9E75 */
+   0x67e7, /* 9E76 */
+   0x6a9c, /* 9E77 */
+   0x681e, /* 9E78 */
+   0x6846, /* 9E79 */
+   0x6829, /* 9E7A */
+   0x6840, /* 9E7B */
+   0x684d, /* 9E7C */
+   0x6832, /* 9E7D */
+   0x684e, /* 9E7E */
+   0x68b3, /* 9E80 */
+   0x682b, /* 9E81 */
+   0x6859, /* 9E82 */
+   0x6863, /* 9E83 */
+   0x6877, /* 9E84 */
+   0x687f, /* 9E85 */
+   0x689f, /* 9E86 */
+   0x688f, /* 9E87 */
+   0x68ad, /* 9E88 */
+   0x6894, /* 9E89 */
+   0x689d, /* 9E8A */
+   0x689b, /* 9E8B */
+   0x6883, /* 9E8C */
+   0x6aae, /* 9E8D */
+   0x68b9, /* 9E8E */
+   0x6874, /* 9E8F */
+   0x68b5, /* 9E90 */
+   0x68a0, /* 9E91 */
+   0x68ba, /* 9E92 */
+   0x690f, /* 9E93 */
+   0x688d, /* 9E94 */
+   0x687e, /* 9E95 */
+   0x6901, /* 9E96 */
+   0x68ca, /* 9E97 */
+   0x6908, /* 9E98 */
+   0x68d8, /* 9E99 */
+   0x6922, /* 9E9A */
+   0x6926, /* 9E9B */
+   0x68e1, /* 9E9C */
+   0x690c, /* 9E9D */
+   0x68cd, /* 9E9E */
+   0x68d4, /* 9E9F */
+   0x68e7, /* 9EA0 */
+   0x68d5, /* 9EA1 */
+   0x6936, /* 9EA2 */
+   0x6912, /* 9EA3 */
+   0x6904, /* 9EA4 */
+   0x68d7, /* 9EA5 */
+   0x68e3, /* 9EA6 */
+   0x6925, /* 9EA7 */
+   0x68f9, /* 9EA8 */
+   0x68e0, /* 9EA9 */
+   0x68ef, /* 9EAA */
+   0x6928, /* 9EAB */
+   0x692a, /* 9EAC */
+   0x691a, /* 9EAD */
+   0x6923, /* 9EAE */
+   0x6921, /* 9EAF */
+   0x68c6, /* 9EB0 */
+   0x6979, /* 9EB1 */
+   0x6977, /* 9EB2 */
+   0x695c, /* 9EB3 */
+   0x6978, /* 9EB4 */
+   0x696b, /* 9EB5 */
+   0x6954, /* 9EB6 */
+   0x697e, /* 9EB7 */
+   0x696e, /* 9EB8 */
+   0x6939, /* 9EB9 */
+   0x6974, /* 9EBA */
+   0x693d, /* 9EBB */
+   0x6959, /* 9EBC */
+   0x6930, /* 9EBD */
+   0x6961, /* 9EBE */
+   0x695e, /* 9EBF */
+   0x695d, /* 9EC0 */
+   0x6981, /* 9EC1 */
+   0x696a, /* 9EC2 */
+   0x69b2, /* 9EC3 */
+   0x69ae, /* 9EC4 */
+   0x69d0, /* 9EC5 */
+   0x69bf, /* 9EC6 */
+   0x69c1, /* 9EC7 */
+   0x69d3, /* 9EC8 */
+   0x69be, /* 9EC9 */
+   0x69ce, /* 9ECA */
+   0x5be8, /* 9ECB */
+   0x69ca, /* 9ECC */
+   0x69dd, /* 9ECD */
+   0x69bb, /* 9ECE */
+   0x69c3, /* 9ECF */
+   0x69a7, /* 9ED0 */
+   0x6a2e, /* 9ED1 */
+   0x6991, /* 9ED2 */
+   0x69a0, /* 9ED3 */
+   0x699c, /* 9ED4 */
+   0x6995, /* 9ED5 */
+   0x69b4, /* 9ED6 */
+   0x69de, /* 9ED7 */
+   0x69e8, /* 9ED8 */
+   0x6a02, /* 9ED9 */
+   0x6a1b, /* 9EDA */
+   0x69ff, /* 9EDB */
+   0x6b0a, /* 9EDC */
+   0x69f9, /* 9EDD */
+   0x69f2, /* 9EDE */
+   0x69e7, /* 9EDF */
+   0x6a05, /* 9EE0 */
+   0x69b1, /* 9EE1 */
+   0x6a1e, /* 9EE2 */
+   0x69ed, /* 9EE3 */
+   0x6a14, /* 9EE4 */
+   0x69eb, /* 9EE5 */
+   0x6a0a, /* 9EE6 */
+   0x6a12, /* 9EE7 */
+   0x6ac1, /* 9EE8 */
+   0x6a23, /* 9EE9 */
+   0x6a13, /* 9EEA */
+   0x6a44, /* 9EEB */
+   0x6a0c, /* 9EEC */
+   0x6a72, /* 9EED */
+   0x6a36, /* 9EEE */
+   0x6a78, /* 9EEF */
+   0x6a47, /* 9EF0 */
+   0x6a62, /* 9EF1 */
+   0x6a59, /* 9EF2 */
+   0x6a66, /* 9EF3 */
+   0x6a48, /* 9EF4 */
+   0x6a38, /* 9EF5 */
+   0x6a22, /* 9EF6 */
+   0x6a90, /* 9EF7 */
+   0x6a8d, /* 9EF8 */
+   0x6aa0, /* 9EF9 */
+   0x6a84, /* 9EFA */
+   0x6aa2, /* 9EFB */
+   0x6aa3, /* 9EFC */
+   0x6a97, /* 9F40 */
+   0x8617, /* 9F41 */
+   0x6abb, /* 9F42 */
+   0x6ac3, /* 9F43 */
+   0x6ac2, /* 9F44 */
+   0x6ab8, /* 9F45 */
+   0x6ab3, /* 9F46 */
+   0x6aac, /* 9F47 */
+   0x6ade, /* 9F48 */
+   0x6ad1, /* 9F49 */
+   0x6adf, /* 9F4A */
+   0x6aaa, /* 9F4B */
+   0x6ada, /* 9F4C */
+   0x6aea, /* 9F4D */
+   0x6afb, /* 9F4E */
+   0x6b05, /* 9F4F */
+   0x8616, /* 9F50 */
+   0x6afa, /* 9F51 */
+   0x6b12, /* 9F52 */
+   0x6b16, /* 9F53 */
+   0x9b31, /* 9F54 */
+   0x6b1f, /* 9F55 */
+   0x6b38, /* 9F56 */
+   0x6b37, /* 9F57 */
+   0x76dc, /* 9F58 */
+   0x6b39, /* 9F59 */
+   0x98ee, /* 9F5A */
+   0x6b47, /* 9F5B */
+   0x6b43, /* 9F5C */
+   0x6b49, /* 9F5D */
+   0x6b50, /* 9F5E */
+   0x6b59, /* 9F5F */
+   0x6b54, /* 9F60 */
+   0x6b5b, /* 9F61 */
+   0x6b5f, /* 9F62 */
+   0x6b61, /* 9F63 */
+   0x6b78, /* 9F64 */
+   0x6b79, /* 9F65 */
+   0x6b7f, /* 9F66 */
+   0x6b80, /* 9F67 */
+   0x6b84, /* 9F68 */
+   0x6b83, /* 9F69 */
+   0x6b8d, /* 9F6A */
+   0x6b98, /* 9F6B */
+   0x6b95, /* 9F6C */
+   0x6b9e, /* 9F6D */
+   0x6ba4, /* 9F6E */
+   0x6baa, /* 9F6F */
+   0x6bab, /* 9F70 */
+   0x6baf, /* 9F71 */
+   0x6bb2, /* 9F72 */
+   0x6bb1, /* 9F73 */
+   0x6bb3, /* 9F74 */
+   0x6bb7, /* 9F75 */
+   0x6bbc, /* 9F76 */
+   0x6bc6, /* 9F77 */
+   0x6bcb, /* 9F78 */
+   0x6bd3, /* 9F79 */
+   0x6bdf, /* 9F7A */
+   0x6bec, /* 9F7B */
+   0x6beb, /* 9F7C */
+   0x6bf3, /* 9F7D */
+   0x6bef, /* 9F7E */
+   0x9ebe, /* 9F80 */
+   0x6c08, /* 9F81 */
+   0x6c13, /* 9F82 */
+   0x6c14, /* 9F83 */
+   0x6c1b, /* 9F84 */
+   0x6c24, /* 9F85 */
+   0x6c23, /* 9F86 */
+   0x6c5e, /* 9F87 */
+   0x6c55, /* 9F88 */
+   0x6c62, /* 9F89 */
+   0x6c6a, /* 9F8A */
+   0x6c82, /* 9F8B */
+   0x6c8d, /* 9F8C */
+   0x6c9a, /* 9F8D */
+   0x6c81, /* 9F8E */
+   0x6c9b, /* 9F8F */
+   0x6c7e, /* 9F90 */
+   0x6c68, /* 9F91 */
+   0x6c73, /* 9F92 */
+   0x6c92, /* 9F93 */
+   0x6c90, /* 9F94 */
+   0x6cc4, /* 9F95 */
+   0x6cf1, /* 9F96 */
+   0x6cd3, /* 9F97 */
+   0x6cbd, /* 9F98 */
+   0x6cd7, /* 9F99 */
+   0x6cc5, /* 9F9A */
+   0x6cdd, /* 9F9B */
+   0x6cae, /* 9F9C */
+   0x6cb1, /* 9F9D */
+   0x6cbe, /* 9F9E */
+   0x6cba, /* 9F9F */
+   0x6cdb, /* 9FA0 */
+   0x6cef, /* 9FA1 */
+   0x6cd9, /* 9FA2 */
+   0x6cea, /* 9FA3 */
+   0x6d1f, /* 9FA4 */
+   0x884d, /* 9FA5 */
+   0x6d36, /* 9FA6 */
+   0x6d2b, /* 9FA7 */
+   0x6d3d, /* 9FA8 */
+   0x6d38, /* 9FA9 */
+   0x6d19, /* 9FAA */
+   0x6d35, /* 9FAB */
+   0x6d33, /* 9FAC */
+   0x6d12, /* 9FAD */
+   0x6d0c, /* 9FAE */
+   0x6d63, /* 9FAF */
+   0x6d93, /* 9FB0 */
+   0x6d64, /* 9FB1 */
+   0x6d5a, /* 9FB2 */
+   0x6d79, /* 9FB3 */
+   0x6d59, /* 9FB4 */
+   0x6d8e, /* 9FB5 */
+   0x6d95, /* 9FB6 */
+   0x6fe4, /* 9FB7 */
+   0x6d85, /* 9FB8 */
+   0x6df9, /* 9FB9 */
+   0x6e15, /* 9FBA */
+   0x6e0a, /* 9FBB */
+   0x6db5, /* 9FBC */
+   0x6dc7, /* 9FBD */
+   0x6de6, /* 9FBE */
+   0x6db8, /* 9FBF */
+   0x6dc6, /* 9FC0 */
+   0x6dec, /* 9FC1 */
+   0x6dde, /* 9FC2 */
+   0x6dcc, /* 9FC3 */
+   0x6de8, /* 9FC4 */
+   0x6dd2, /* 9FC5 */
+   0x6dc5, /* 9FC6 */
+   0x6dfa, /* 9FC7 */
+   0x6dd9, /* 9FC8 */
+   0x6de4, /* 9FC9 */
+   0x6dd5, /* 9FCA */
+   0x6dea, /* 9FCB */
+   0x6dee, /* 9FCC */
+   0x6e2d, /* 9FCD */
+   0x6e6e, /* 9FCE */
+   0x6e2e, /* 9FCF */
+   0x6e19, /* 9FD0 */
+   0x6e72, /* 9FD1 */
+   0x6e5f, /* 9FD2 */
+   0x6e3e, /* 9FD3 */
+   0x6e23, /* 9FD4 */
+   0x6e6b, /* 9FD5 */
+   0x6e2b, /* 9FD6 */
+   0x6e76, /* 9FD7 */
+   0x6e4d, /* 9FD8 */
+   0x6e1f, /* 9FD9 */
+   0x6e43, /* 9FDA */
+   0x6e3a, /* 9FDB */
+   0x6e4e, /* 9FDC */
+   0x6e24, /* 9FDD */
+   0x6eff, /* 9FDE */
+   0x6e1d, /* 9FDF */
+   0x6e38, /* 9FE0 */
+   0x6e82, /* 9FE1 */
+   0x6eaa, /* 9FE2 */
+   0x6e98, /* 9FE3 */
+   0x6ec9, /* 9FE4 */
+   0x6eb7, /* 9FE5 */
+   0x6ed3, /* 9FE6 */
+   0x6ebd, /* 9FE7 */
+   0x6eaf, /* 9FE8 */
+   0x6ec4, /* 9FE9 */
+   0x6eb2, /* 9FEA */
+   0x6ed4, /* 9FEB */
+   0x6ed5, /* 9FEC */
+   0x6e8f, /* 9FED */
+   0x6ea5, /* 9FEE */
+   0x6ec2, /* 9FEF */
+   0x6e9f, /* 9FF0 */
+   0x6f41, /* 9FF1 */
+   0x6f11, /* 9FF2 */
+   0x704c, /* 9FF3 */
+   0x6eec, /* 9FF4 */
+   0x6ef8, /* 9FF5 */
+   0x6efe, /* 9FF6 */
+   0x6f3f, /* 9FF7 */
+   0x6ef2, /* 9FF8 */
+   0x6f31, /* 9FF9 */
+   0x6eef, /* 9FFA */
+   0x6f32, /* 9FFB */
+   0x6ecc, /* 9FFC */
+   0x6f3e, /* E040 */
+   0x6f13, /* E041 */
+   0x6ef7, /* E042 */
+   0x6f86, /* E043 */
+   0x6f7a, /* E044 */
+   0x6f78, /* E045 */
+   0x6f81, /* E046 */
+   0x6f80, /* E047 */
+   0x6f6f, /* E048 */
+   0x6f5b, /* E049 */
+   0x6ff3, /* E04A */
+   0x6f6d, /* E04B */
+   0x6f82, /* E04C */
+   0x6f7c, /* E04D */
+   0x6f58, /* E04E */
+   0x6f8e, /* E04F */
+   0x6f91, /* E050 */
+   0x6fc2, /* E051 */
+   0x6f66, /* E052 */
+   0x6fb3, /* E053 */
+   0x6fa3, /* E054 */
+   0x6fa1, /* E055 */
+   0x6fa4, /* E056 */
+   0x6fb9, /* E057 */
+   0x6fc6, /* E058 */
+   0x6faa, /* E059 */
+   0x6fdf, /* E05A */
+   0x6fd5, /* E05B */
+   0x6fec, /* E05C */
+   0x6fd4, /* E05D */
+   0x6fd8, /* E05E */
+   0x6ff1, /* E05F */
+   0x6fee, /* E060 */
+   0x6fdb, /* E061 */
+   0x7009, /* E062 */
+   0x700b, /* E063 */
+   0x6ffa, /* E064 */
+   0x7011, /* E065 */
+   0x7001, /* E066 */
+   0x700f, /* E067 */
+   0x6ffe, /* E068 */
+   0x701b, /* E069 */
+   0x701a, /* E06A */
+   0x6f74, /* E06B */
+   0x701d, /* E06C */
+   0x7018, /* E06D */
+   0x701f, /* E06E */
+   0x7030, /* E06F */
+   0x703e, /* E070 */
+   0x7032, /* E071 */
+   0x7051, /* E072 */
+   0x7063, /* E073 */
+   0x7099, /* E074 */
+   0x7092, /* E075 */
+   0x70af, /* E076 */
+   0x70f1, /* E077 */
+   0x70ac, /* E078 */
+   0x70b8, /* E079 */
+   0x70b3, /* E07A */
+   0x70ae, /* E07B */
+   0x70df, /* E07C */
+   0x70cb, /* E07D */
+   0x70dd, /* E07E */
+   0x70d9, /* E080 */
+   0x7109, /* E081 */
+   0x70fd, /* E082 */
+   0x711c, /* E083 */
+   0x7119, /* E084 */
+   0x7165, /* E085 */
+   0x7155, /* E086 */
+   0x7188, /* E087 */
+   0x7166, /* E088 */
+   0x7162, /* E089 */
+   0x714c, /* E08A */
+   0x7156, /* E08B */
+   0x716c, /* E08C */
+   0x718f, /* E08D */
+   0x71fb, /* E08E */
+   0x7184, /* E08F */
+   0x7195, /* E090 */
+   0x71a8, /* E091 */
+   0x71ac, /* E092 */
+   0x71d7, /* E093 */
+   0x71b9, /* E094 */
+   0x71be, /* E095 */
+   0x71d2, /* E096 */
+   0x71c9, /* E097 */
+   0x71d4, /* E098 */
+   0x71ce, /* E099 */
+   0x71e0, /* E09A */
+   0x71ec, /* E09B */
+   0x71e7, /* E09C */
+   0x71f5, /* E09D */
+   0x71fc, /* E09E */
+   0x71f9, /* E09F */
+   0x71ff, /* E0A0 */
+   0x720d, /* E0A1 */
+   0x7210, /* E0A2 */
+   0x721b, /* E0A3 */
+   0x7228, /* E0A4 */
+   0x722d, /* E0A5 */
+   0x722c, /* E0A6 */
+   0x7230, /* E0A7 */
+   0x7232, /* E0A8 */
+   0x723b, /* E0A9 */
+   0x723c, /* E0AA */
+   0x723f, /* E0AB */
+   0x7240, /* E0AC */
+   0x7246, /* E0AD */
+   0x724b, /* E0AE */
+   0x7258, /* E0AF */
+   0x7274, /* E0B0 */
+   0x727e, /* E0B1 */
+   0x7282, /* E0B2 */
+   0x7281, /* E0B3 */
+   0x7287, /* E0B4 */
+   0x7292, /* E0B5 */
+   0x7296, /* E0B6 */
+   0x72a2, /* E0B7 */
+   0x72a7, /* E0B8 */
+   0x72b9, /* E0B9 */
+   0x72b2, /* E0BA */
+   0x72c3, /* E0BB */
+   0x72c6, /* E0BC */
+   0x72c4, /* E0BD */
+   0x72ce, /* E0BE */
+   0x72d2, /* E0BF */
+   0x72e2, /* E0C0 */
+   0x72e0, /* E0C1 */
+   0x72e1, /* E0C2 */
+   0x72f9, /* E0C3 */
+   0x72f7, /* E0C4 */
+   0x500f, /* E0C5 */
+   0x7317, /* E0C6 */
+   0x730a, /* E0C7 */
+   0x731c, /* E0C8 */
+   0x7316, /* E0C9 */
+   0x731d, /* E0CA */
+   0x7334, /* E0CB */
+   0x732f, /* E0CC */
+   0x7329, /* E0CD */
+   0x7325, /* E0CE */
+   0x733e, /* E0CF */
+   0x734e, /* E0D0 */
+   0x734f, /* E0D1 */
+   0x9ed8, /* E0D2 */
+   0x7357, /* E0D3 */
+   0x736a, /* E0D4 */
+   0x7368, /* E0D5 */
+   0x7370, /* E0D6 */
+   0x7378, /* E0D7 */
+   0x7375, /* E0D8 */
+   0x737b, /* E0D9 */
+   0x737a, /* E0DA */
+   0x73c8, /* E0DB */
+   0x73b3, /* E0DC */
+   0x73ce, /* E0DD */
+   0x73bb, /* E0DE */
+   0x73c0, /* E0DF */
+   0x73e5, /* E0E0 */
+   0x73ee, /* E0E1 */
+   0x73de, /* E0E2 */
+   0x74a2, /* E0E3 */
+   0x7405, /* E0E4 */
+   0x746f, /* E0E5 */
+   0x7425, /* E0E6 */
+   0x73f8, /* E0E7 */
+   0x7432, /* E0E8 */
+   0x743a, /* E0E9 */
+   0x7455, /* E0EA */
+   0x743f, /* E0EB */
+   0x745f, /* E0EC */
+   0x7459, /* E0ED */
+   0x7441, /* E0EE */
+   0x745c, /* E0EF */
+   0x7469, /* E0F0 */
+   0x7470, /* E0F1 */
+   0x7463, /* E0F2 */
+   0x746a, /* E0F3 */
+   0x7476, /* E0F4 */
+   0x747e, /* E0F5 */
+   0x748b, /* E0F6 */
+   0x749e, /* E0F7 */
+   0x74a7, /* E0F8 */
+   0x74ca, /* E0F9 */
+   0x74cf, /* E0FA */
+   0x74d4, /* E0FB */
+   0x73f1, /* E0FC */
+   0x74e0, /* E140 */
+   0x74e3, /* E141 */
+   0x74e7, /* E142 */
+   0x74e9, /* E143 */
+   0x74ee, /* E144 */
+   0x74f2, /* E145 */
+   0x74f0, /* E146 */
+   0x74f1, /* E147 */
+   0x74f8, /* E148 */
+   0x74f7, /* E149 */
+   0x7504, /* E14A */
+   0x7503, /* E14B */
+   0x7505, /* E14C */
+   0x750c, /* E14D */
+   0x750e, /* E14E */
+   0x750d, /* E14F */
+   0x7515, /* E150 */
+   0x7513, /* E151 */
+   0x751e, /* E152 */
+   0x7526, /* E153 */
+   0x752c, /* E154 */
+   0x753c, /* E155 */
+   0x7544, /* E156 */
+   0x754d, /* E157 */
+   0x754a, /* E158 */
+   0x7549, /* E159 */
+   0x755b, /* E15A */
+   0x7546, /* E15B */
+   0x755a, /* E15C */
+   0x7569, /* E15D */
+   0x7564, /* E15E */
+   0x7567, /* E15F */
+   0x756b, /* E160 */
+   0x756d, /* E161 */
+   0x7578, /* E162 */
+   0x7576, /* E163 */
+   0x7586, /* E164 */
+   0x7587, /* E165 */
+   0x7574, /* E166 */
+   0x758a, /* E167 */
+   0x7589, /* E168 */
+   0x7582, /* E169 */
+   0x7594, /* E16A */
+   0x759a, /* E16B */
+   0x759d, /* E16C */
+   0x75a5, /* E16D */
+   0x75a3, /* E16E */
+   0x75c2, /* E16F */
+   0x75b3, /* E170 */
+   0x75c3, /* E171 */
+   0x75b5, /* E172 */
+   0x75bd, /* E173 */
+   0x75b8, /* E174 */
+   0x75bc, /* E175 */
+   0x75b1, /* E176 */
+   0x75cd, /* E177 */
+   0x75ca, /* E178 */
+   0x75d2, /* E179 */
+   0x75d9, /* E17A */
+   0x75e3, /* E17B */
+   0x75de, /* E17C */
+   0x75fe, /* E17D */
+   0x75ff, /* E17E */
+   0x75fc, /* E180 */
+   0x7601, /* E181 */
+   0x75f0, /* E182 */
+   0x75fa, /* E183 */
+   0x75f2, /* E184 */
+   0x75f3, /* E185 */
+   0x760b, /* E186 */
+   0x760d, /* E187 */
+   0x7609, /* E188 */
+   0x761f, /* E189 */
+   0x7627, /* E18A */
+   0x7620, /* E18B */
+   0x7621, /* E18C */
+   0x7622, /* E18D */
+   0x7624, /* E18E */
+   0x7634, /* E18F */
+   0x7630, /* E190 */
+   0x763b, /* E191 */
+   0x7647, /* E192 */
+   0x7648, /* E193 */
+   0x7646, /* E194 */
+   0x765c, /* E195 */
+   0x7658, /* E196 */
+   0x7661, /* E197 */
+   0x7662, /* E198 */
+   0x7668, /* E199 */
+   0x7669, /* E19A */
+   0x766a, /* E19B */
+   0x7667, /* E19C */
+   0x766c, /* E19D */
+   0x7670, /* E19E */
+   0x7672, /* E19F */
+   0x7676, /* E1A0 */
+   0x7678, /* E1A1 */
+   0x767c, /* E1A2 */
+   0x7680, /* E1A3 */
+   0x7683, /* E1A4 */
+   0x7688, /* E1A5 */
+   0x768b, /* E1A6 */
+   0x768e, /* E1A7 */
+   0x7696, /* E1A8 */
+   0x7693, /* E1A9 */
+   0x7699, /* E1AA */
+   0x769a, /* E1AB */
+   0x76b0, /* E1AC */
+   0x76b4, /* E1AD */
+   0x76b8, /* E1AE */
+   0x76b9, /* E1AF */
+   0x76ba, /* E1B0 */
+   0x76c2, /* E1B1 */
+   0x76cd, /* E1B2 */
+   0x76d6, /* E1B3 */
+   0x76d2, /* E1B4 */
+   0x76de, /* E1B5 */
+   0x76e1, /* E1B6 */
+   0x76e5, /* E1B7 */
+   0x76e7, /* E1B8 */
+   0x76ea, /* E1B9 */
+   0x862f, /* E1BA */
+   0x76fb, /* E1BB */
+   0x7708, /* E1BC */
+   0x7707, /* E1BD */
+   0x7704, /* E1BE */
+   0x7729, /* E1BF */
+   0x7724, /* E1C0 */
+   0x771e, /* E1C1 */
+   0x7725, /* E1C2 */
+   0x7726, /* E1C3 */
+   0x771b, /* E1C4 */
+   0x7737, /* E1C5 */
+   0x7738, /* E1C6 */
+   0x7747, /* E1C7 */
+   0x775a, /* E1C8 */
+   0x7768, /* E1C9 */
+   0x776b, /* E1CA */
+   0x775b, /* E1CB */
+   0x7765, /* E1CC */
+   0x777f, /* E1CD */
+   0x777e, /* E1CE */
+   0x7779, /* E1CF */
+   0x778e, /* E1D0 */
+   0x778b, /* E1D1 */
+   0x7791, /* E1D2 */
+   0x77a0, /* E1D3 */
+   0x779e, /* E1D4 */
+   0x77b0, /* E1D5 */
+   0x77b6, /* E1D6 */
+   0x77b9, /* E1D7 */
+   0x77bf, /* E1D8 */
+   0x77bc, /* E1D9 */
+   0x77bd, /* E1DA */
+   0x77bb, /* E1DB */
+   0x77c7, /* E1DC */
+   0x77cd, /* E1DD */
+   0x77d7, /* E1DE */
+   0x77da, /* E1DF */
+   0x77dc, /* E1E0 */
+   0x77e3, /* E1E1 */
+   0x77ee, /* E1E2 */
+   0x77fc, /* E1E3 */
+   0x780c, /* E1E4 */
+   0x7812, /* E1E5 */
+   0x7926, /* E1E6 */
+   0x7820, /* E1E7 */
+   0x792a, /* E1E8 */
+   0x7845, /* E1E9 */
+   0x788e, /* E1EA */
+   0x7874, /* E1EB */
+   0x7886, /* E1EC */
+   0x787c, /* E1ED */
+   0x789a, /* E1EE */
+   0x788c, /* E1EF */
+   0x78a3, /* E1F0 */
+   0x78b5, /* E1F1 */
+   0x78aa, /* E1F2 */
+   0x78af, /* E1F3 */
+   0x78d1, /* E1F4 */
+   0x78c6, /* E1F5 */
+   0x78cb, /* E1F6 */
+   0x78d4, /* E1F7 */
+   0x78be, /* E1F8 */
+   0x78bc, /* E1F9 */
+   0x78c5, /* E1FA */
+   0x78ca, /* E1FB */
+   0x78ec, /* E1FC */
+   0x78e7, /* E240 */
+   0x78da, /* E241 */
+   0x78fd, /* E242 */
+   0x78f4, /* E243 */
+   0x7907, /* E244 */
+   0x7912, /* E245 */
+   0x7911, /* E246 */
+   0x7919, /* E247 */
+   0x792c, /* E248 */
+   0x792b, /* E249 */
+   0x7940, /* E24A */
+   0x7960, /* E24B */
+   0x7957, /* E24C */
+   0x795f, /* E24D */
+   0x795a, /* E24E */
+   0x7955, /* E24F */
+   0x7953, /* E250 */
+   0x797a, /* E251 */
+   0x797f, /* E252 */
+   0x798a, /* E253 */
+   0x799d, /* E254 */
+   0x79a7, /* E255 */
+   0x9f4b, /* E256 */
+   0x79aa, /* E257 */
+   0x79ae, /* E258 */
+   0x79b3, /* E259 */
+   0x79b9, /* E25A */
+   0x79ba, /* E25B */
+   0x79c9, /* E25C */
+   0x79d5, /* E25D */
+   0x79e7, /* E25E */
+   0x79ec, /* E25F */
+   0x79e1, /* E260 */
+   0x79e3, /* E261 */
+   0x7a08, /* E262 */
+   0x7a0d, /* E263 */
+   0x7a18, /* E264 */
+   0x7a19, /* E265 */
+   0x7a20, /* E266 */
+   0x7a1f, /* E267 */
+   0x7980, /* E268 */
+   0x7a31, /* E269 */
+   0x7a3b, /* E26A */
+   0x7a3e, /* E26B */
+   0x7a37, /* E26C */
+   0x7a43, /* E26D */
+   0x7a57, /* E26E */
+   0x7a49, /* E26F */
+   0x7a61, /* E270 */
+   0x7a62, /* E271 */
+   0x7a69, /* E272 */
+   0x9f9d, /* E273 */
+   0x7a70, /* E274 */
+   0x7a79, /* E275 */
+   0x7a7d, /* E276 */
+   0x7a88, /* E277 */
+   0x7a97, /* E278 */
+   0x7a95, /* E279 */
+   0x7a98, /* E27A */
+   0x7a96, /* E27B */
+   0x7aa9, /* E27C */
+   0x7ac8, /* E27D */
+   0x7ab0, /* E27E */
+   0x7ab6, /* E280 */
+   0x7ac5, /* E281 */
+   0x7ac4, /* E282 */
+   0x7abf, /* E283 */
+   0x9083, /* E284 */
+   0x7ac7, /* E285 */
+   0x7aca, /* E286 */
+   0x7acd, /* E287 */
+   0x7acf, /* E288 */
+   0x7ad5, /* E289 */
+   0x7ad3, /* E28A */
+   0x7ad9, /* E28B */
+   0x7ada, /* E28C */
+   0x7add, /* E28D */
+   0x7ae1, /* E28E */
+   0x7ae2, /* E28F */
+   0x7ae6, /* E290 */
+   0x7aed, /* E291 */
+   0x7af0, /* E292 */
+   0x7b02, /* E293 */
+   0x7b0f, /* E294 */
+   0x7b0a, /* E295 */
+   0x7b06, /* E296 */
+   0x7b33, /* E297 */
+   0x7b18, /* E298 */
+   0x7b19, /* E299 */
+   0x7b1e, /* E29A */
+   0x7b35, /* E29B */
+   0x7b28, /* E29C */
+   0x7b36, /* E29D */
+   0x7b50, /* E29E */
+   0x7b7a, /* E29F */
+   0x7b04, /* E2A0 */
+   0x7b4d, /* E2A1 */
+   0x7b0b, /* E2A2 */
+   0x7b4c, /* E2A3 */
+   0x7b45, /* E2A4 */
+   0x7b75, /* E2A5 */
+   0x7b65, /* E2A6 */
+   0x7b74, /* E2A7 */
+   0x7b67, /* E2A8 */
+   0x7b70, /* E2A9 */
+   0x7b71, /* E2AA */
+   0x7b6c, /* E2AB */
+   0x7b6e, /* E2AC */
+   0x7b9d, /* E2AD */
+   0x7b98, /* E2AE */
+   0x7b9f, /* E2AF */
+   0x7b8d, /* E2B0 */
+   0x7b9c, /* E2B1 */
+   0x7b9a, /* E2B2 */
+   0x7b8b, /* E2B3 */
+   0x7b92, /* E2B4 */
+   0x7b8f, /* E2B5 */
+   0x7b5d, /* E2B6 */
+   0x7b99, /* E2B7 */
+   0x7bcb, /* E2B8 */
+   0x7bc1, /* E2B9 */
+   0x7bcc, /* E2BA */
+   0x7bcf, /* E2BB */
+   0x7bb4, /* E2BC */
+   0x7bc6, /* E2BD */
+   0x7bdd, /* E2BE */
+   0x7be9, /* E2BF */
+   0x7c11, /* E2C0 */
+   0x7c14, /* E2C1 */
+   0x7be6, /* E2C2 */
+   0x7be5, /* E2C3 */
+   0x7c60, /* E2C4 */
+   0x7c00, /* E2C5 */
+   0x7c07, /* E2C6 */
+   0x7c13, /* E2C7 */
+   0x7bf3, /* E2C8 */
+   0x7bf7, /* E2C9 */
+   0x7c17, /* E2CA */
+   0x7c0d, /* E2CB */
+   0x7bf6, /* E2CC */
+   0x7c23, /* E2CD */
+   0x7c27, /* E2CE */
+   0x7c2a, /* E2CF */
+   0x7c1f, /* E2D0 */
+   0x7c37, /* E2D1 */
+   0x7c2b, /* E2D2 */
+   0x7c3d, /* E2D3 */
+   0x7c4c, /* E2D4 */
+   0x7c43, /* E2D5 */
+   0x7c54, /* E2D6 */
+   0x7c4f, /* E2D7 */
+   0x7c40, /* E2D8 */
+   0x7c50, /* E2D9 */
+   0x7c58, /* E2DA */
+   0x7c5f, /* E2DB */
+   0x7c64, /* E2DC */
+   0x7c56, /* E2DD */
+   0x7c65, /* E2DE */
+   0x7c6c, /* E2DF */
+   0x7c75, /* E2E0 */
+   0x7c83, /* E2E1 */
+   0x7c90, /* E2E2 */
+   0x7ca4, /* E2E3 */
+   0x7cad, /* E2E4 */
+   0x7ca2, /* E2E5 */
+   0x7cab, /* E2E6 */
+   0x7ca1, /* E2E7 */
+   0x7ca8, /* E2E8 */
+   0x7cb3, /* E2E9 */
+   0x7cb2, /* E2EA */
+   0x7cb1, /* E2EB */
+   0x7cae, /* E2EC */
+   0x7cb9, /* E2ED */
+   0x7cbd, /* E2EE */
+   0x7cc0, /* E2EF */
+   0x7cc5, /* E2F0 */
+   0x7cc2, /* E2F1 */
+   0x7cd8, /* E2F2 */
+   0x7cd2, /* E2F3 */
+   0x7cdc, /* E2F4 */
+   0x7ce2, /* E2F5 */
+   0x9b3b, /* E2F6 */
+   0x7cef, /* E2F7 */
+   0x7cf2, /* E2F8 */
+   0x7cf4, /* E2F9 */
+   0x7cf6, /* E2FA */
+   0x7cfa, /* E2FB */
+   0x7d06, /* E2FC */
+   0x7d02, /* E340 */
+   0x7d1c, /* E341 */
+   0x7d15, /* E342 */
+   0x7d0a, /* E343 */
+   0x7d45, /* E344 */
+   0x7d4b, /* E345 */
+   0x7d2e, /* E346 */
+   0x7d32, /* E347 */
+   0x7d3f, /* E348 */
+   0x7d35, /* E349 */
+   0x7d46, /* E34A */
+   0x7d73, /* E34B */
+   0x7d56, /* E34C */
+   0x7d4e, /* E34D */
+   0x7d72, /* E34E */
+   0x7d68, /* E34F */
+   0x7d6e, /* E350 */
+   0x7d4f, /* E351 */
+   0x7d63, /* E352 */
+   0x7d93, /* E353 */
+   0x7d89, /* E354 */
+   0x7d5b, /* E355 */
+   0x7d8f, /* E356 */
+   0x7d7d, /* E357 */
+   0x7d9b, /* E358 */
+   0x7dba, /* E359 */
+   0x7dae, /* E35A */
+   0x7da3, /* E35B */
+   0x7db5, /* E35C */
+   0x7dc7, /* E35D */
+   0x7dbd, /* E35E */
+   0x7dab, /* E35F */
+   0x7e3d, /* E360 */
+   0x7da2, /* E361 */
+   0x7daf, /* E362 */
+   0x7ddc, /* E363 */
+   0x7db8, /* E364 */
+   0x7d9f, /* E365 */
+   0x7db0, /* E366 */
+   0x7dd8, /* E367 */
+   0x7ddd, /* E368 */
+   0x7de4, /* E369 */
+   0x7dde, /* E36A */
+   0x7dfb, /* E36B */
+   0x7df2, /* E36C */
+   0x7de1, /* E36D */
+   0x7e05, /* E36E */
+   0x7e0a, /* E36F */
+   0x7e23, /* E370 */
+   0x7e21, /* E371 */
+   0x7e12, /* E372 */
+   0x7e31, /* E373 */
+   0x7e1f, /* E374 */
+   0x7e09, /* E375 */
+   0x7e0b, /* E376 */
+   0x7e22, /* E377 */
+   0x7e46, /* E378 */
+   0x7e66, /* E379 */
+   0x7e3b, /* E37A */
+   0x7e35, /* E37B */
+   0x7e39, /* E37C */
+   0x7e43, /* E37D */
+   0x7e37, /* E37E */
+   0x7e32, /* E380 */
+   0x7e3a, /* E381 */
+   0x7e67, /* E382 */
+   0x7e5d, /* E383 */
+   0x7e56, /* E384 */
+   0x7e5e, /* E385 */
+   0x7e59, /* E386 */
+   0x7e5a, /* E387 */
+   0x7e79, /* E388 */
+   0x7e6a, /* E389 */
+   0x7e69, /* E38A */
+   0x7e7c, /* E38B */
+   0x7e7b, /* E38C */
+   0x7e83, /* E38D */
+   0x7dd5, /* E38E */
+   0x7e7d, /* E38F */
+   0x8fae, /* E390 */
+   0x7e7f, /* E391 */
+   0x7e88, /* E392 */
+   0x7e89, /* E393 */
+   0x7e8c, /* E394 */
+   0x7e92, /* E395 */
+   0x7e90, /* E396 */
+   0x7e93, /* E397 */
+   0x7e94, /* E398 */
+   0x7e96, /* E399 */
+   0x7e8e, /* E39A */
+   0x7e9b, /* E39B */
+   0x7e9c, /* E39C */
+   0x7f38, /* E39D */
+   0x7f3a, /* E39E */
+   0x7f45, /* E39F */
+   0x7f4c, /* E3A0 */
+   0x7f4d, /* E3A1 */
+   0x7f4e, /* E3A2 */
+   0x7f50, /* E3A3 */
+   0x7f51, /* E3A4 */
+   0x7f55, /* E3A5 */
+   0x7f54, /* E3A6 */
+   0x7f58, /* E3A7 */
+   0x7f5f, /* E3A8 */
+   0x7f60, /* E3A9 */
+   0x7f68, /* E3AA */
+   0x7f69, /* E3AB */
+   0x7f67, /* E3AC */
+   0x7f78, /* E3AD */
+   0x7f82, /* E3AE */
+   0x7f86, /* E3AF */
+   0x7f83, /* E3B0 */
+   0x7f88, /* E3B1 */
+   0x7f87, /* E3B2 */
+   0x7f8c, /* E3B3 */
+   0x7f94, /* E3B4 */
+   0x7f9e, /* E3B5 */
+   0x7f9d, /* E3B6 */
+   0x7f9a, /* E3B7 */
+   0x7fa3, /* E3B8 */
+   0x7faf, /* E3B9 */
+   0x7fb2, /* E3BA */
+   0x7fb9, /* E3BB */
+   0x7fae, /* E3BC */
+   0x7fb6, /* E3BD */
+   0x7fb8, /* E3BE */
+   0x8b71, /* E3BF */
+   0x7fc5, /* E3C0 */
+   0x7fc6, /* E3C1 */
+   0x7fca, /* E3C2 */
+   0x7fd5, /* E3C3 */
+   0x7fd4, /* E3C4 */
+   0x7fe1, /* E3C5 */
+   0x7fe6, /* E3C6 */
+   0x7fe9, /* E3C7 */
+   0x7ff3, /* E3C8 */
+   0x7ff9, /* E3C9 */
+   0x98dc, /* E3CA */
+   0x8006, /* E3CB */
+   0x8004, /* E3CC */
+   0x800b, /* E3CD */
+   0x8012, /* E3CE */
+   0x8018, /* E3CF */
+   0x8019, /* E3D0 */
+   0x801c, /* E3D1 */
+   0x8021, /* E3D2 */
+   0x8028, /* E3D3 */
+   0x803f, /* E3D4 */
+   0x803b, /* E3D5 */
+   0x804a, /* E3D6 */
+   0x8046, /* E3D7 */
+   0x8052, /* E3D8 */
+   0x8058, /* E3D9 */
+   0x805a, /* E3DA */
+   0x805f, /* E3DB */
+   0x8062, /* E3DC */
+   0x8068, /* E3DD */
+   0x8073, /* E3DE */
+   0x8072, /* E3DF */
+   0x8070, /* E3E0 */
+   0x8076, /* E3E1 */
+   0x8079, /* E3E2 */
+   0x807d, /* E3E3 */
+   0x807f, /* E3E4 */
+   0x8084, /* E3E5 */
+   0x8086, /* E3E6 */
+   0x8085, /* E3E7 */
+   0x809b, /* E3E8 */
+   0x8093, /* E3E9 */
+   0x809a, /* E3EA */
+   0x80ad, /* E3EB */
+   0x5190, /* E3EC */
+   0x80ac, /* E3ED */
+   0x80db, /* E3EE */
+   0x80e5, /* E3EF */
+   0x80d9, /* E3F0 */
+   0x80dd, /* E3F1 */
+   0x80c4, /* E3F2 */
+   0x80da, /* E3F3 */
+   0x80d6, /* E3F4 */
+   0x8109, /* E3F5 */
+   0x80ef, /* E3F6 */
+   0x80f1, /* E3F7 */
+   0x811b, /* E3F8 */
+   0x8129, /* E3F9 */
+   0x8123, /* E3FA */
+   0x812f, /* E3FB */
+   0x814b, /* E3FC */
+   0x968b, /* E440 */
+   0x8146, /* E441 */
+   0x813e, /* E442 */
+   0x8153, /* E443 */
+   0x8151, /* E444 */
+   0x80fc, /* E445 */
+   0x8171, /* E446 */
+   0x816e, /* E447 */
+   0x8165, /* E448 */
+   0x8166, /* E449 */
+   0x8174, /* E44A */
+   0x8183, /* E44B */
+   0x8188, /* E44C */
+   0x818a, /* E44D */
+   0x8180, /* E44E */
+   0x8182, /* E44F */
+   0x81a0, /* E450 */
+   0x8195, /* E451 */
+   0x81a4, /* E452 */
+   0x81a3, /* E453 */
+   0x815f, /* E454 */
+   0x8193, /* E455 */
+   0x81a9, /* E456 */
+   0x81b0, /* E457 */
+   0x81b5, /* E458 */
+   0x81be, /* E459 */
+   0x81b8, /* E45A */
+   0x81bd, /* E45B */
+   0x81c0, /* E45C */
+   0x81c2, /* E45D */
+   0x81ba, /* E45E */
+   0x81c9, /* E45F */
+   0x81cd, /* E460 */
+   0x81d1, /* E461 */
+   0x81d9, /* E462 */
+   0x81d8, /* E463 */
+   0x81c8, /* E464 */
+   0x81da, /* E465 */
+   0x81df, /* E466 */
+   0x81e0, /* E467 */
+   0x81e7, /* E468 */
+   0x81fa, /* E469 */
+   0x81fb, /* E46A */
+   0x81fe, /* E46B */
+   0x8201, /* E46C */
+   0x8202, /* E46D */
+   0x8205, /* E46E */
+   0x8207, /* E46F */
+   0x820a, /* E470 */
+   0x820d, /* E471 */
+   0x8210, /* E472 */
+   0x8216, /* E473 */
+   0x8229, /* E474 */
+   0x822b, /* E475 */
+   0x8238, /* E476 */
+   0x8233, /* E477 */
+   0x8240, /* E478 */
+   0x8259, /* E479 */
+   0x8258, /* E47A */
+   0x825d, /* E47B */
+   0x825a, /* E47C */
+   0x825f, /* E47D */
+   0x8264, /* E47E */
+   0x8262, /* E480 */
+   0x8268, /* E481 */
+   0x826a, /* E482 */
+   0x826b, /* E483 */
+   0x822e, /* E484 */
+   0x8271, /* E485 */
+   0x8277, /* E486 */
+   0x8278, /* E487 */
+   0x827e, /* E488 */
+   0x828d, /* E489 */
+   0x8292, /* E48A */
+   0x82ab, /* E48B */
+   0x829f, /* E48C */
+   0x82bb, /* E48D */
+   0x82ac, /* E48E */
+   0x82e1, /* E48F */
+   0x82e3, /* E490 */
+   0x82df, /* E491 */
+   0x82d2, /* E492 */
+   0x82f4, /* E493 */
+   0x82f3, /* E494 */
+   0x82fa, /* E495 */
+   0x8393, /* E496 */
+   0x8303, /* E497 */
+   0x82fb, /* E498 */
+   0x82f9, /* E499 */
+   0x82de, /* E49A */
+   0x8306, /* E49B */
+   0x82dc, /* E49C */
+   0x8309, /* E49D */
+   0x82d9, /* E49E */
+   0x8335, /* E49F */
+   0x8334, /* E4A0 */
+   0x8316, /* E4A1 */
+   0x8332, /* E4A2 */
+   0x8331, /* E4A3 */
+   0x8340, /* E4A4 */
+   0x8339, /* E4A5 */
+   0x8350, /* E4A6 */
+   0x8345, /* E4A7 */
+   0x832f, /* E4A8 */
+   0x832b, /* E4A9 */
+   0x8317, /* E4AA */
+   0x8318, /* E4AB */
+   0x8385, /* E4AC */
+   0x839a, /* E4AD */
+   0x83aa, /* E4AE */
+   0x839f, /* E4AF */
+   0x83a2, /* E4B0 */
+   0x8396, /* E4B1 */
+   0x8323, /* E4B2 */
+   0x838e, /* E4B3 */
+   0x8387, /* E4B4 */
+   0x838a, /* E4B5 */
+   0x837c, /* E4B6 */
+   0x83b5, /* E4B7 */
+   0x8373, /* E4B8 */
+   0x8375, /* E4B9 */
+   0x83a0, /* E4BA */
+   0x8389, /* E4BB */
+   0x83a8, /* E4BC */
+   0x83f4, /* E4BD */
+   0x8413, /* E4BE */
+   0x83eb, /* E4BF */
+   0x83ce, /* E4C0 */
+   0x83fd, /* E4C1 */
+   0x8403, /* E4C2 */
+   0x83d8, /* E4C3 */
+   0x840b, /* E4C4 */
+   0x83c1, /* E4C5 */
+   0x83f7, /* E4C6 */
+   0x8407, /* E4C7 */
+   0x83e0, /* E4C8 */
+   0x83f2, /* E4C9 */
+   0x840d, /* E4CA */
+   0x8422, /* E4CB */
+   0x8420, /* E4CC */
+   0x83bd, /* E4CD */
+   0x8438, /* E4CE */
+   0x8506, /* E4CF */
+   0x83fb, /* E4D0 */
+   0x846d, /* E4D1 */
+   0x842a, /* E4D2 */
+   0x843c, /* E4D3 */
+   0x855a, /* E4D4 */
+   0x8484, /* E4D5 */
+   0x8477, /* E4D6 */
+   0x846b, /* E4D7 */
+   0x84ad, /* E4D8 */
+   0x846e, /* E4D9 */
+   0x8482, /* E4DA */
+   0x8469, /* E4DB */
+   0x8446, /* E4DC */
+   0x842c, /* E4DD */
+   0x846f, /* E4DE */
+   0x8479, /* E4DF */
+   0x8435, /* E4E0 */
+   0x84ca, /* E4E1 */
+   0x8462, /* E4E2 */
+   0x84b9, /* E4E3 */
+   0x84bf, /* E4E4 */
+   0x849f, /* E4E5 */
+   0x84d9, /* E4E6 */
+   0x84cd, /* E4E7 */
+   0x84bb, /* E4E8 */
+   0x84da, /* E4E9 */
+   0x84d0, /* E4EA */
+   0x84c1, /* E4EB */
+   0x84c6, /* E4EC */
+   0x84d6, /* E4ED */
+   0x84a1, /* E4EE */
+   0x8521, /* E4EF */
+   0x84ff, /* E4F0 */
+   0x84f4, /* E4F1 */
+   0x8517, /* E4F2 */
+   0x8518, /* E4F3 */
+   0x852c, /* E4F4 */
+   0x851f, /* E4F5 */
+   0x8515, /* E4F6 */
+   0x8514, /* E4F7 */
+   0x84fc, /* E4F8 */
+   0x8540, /* E4F9 */
+   0x8563, /* E4FA */
+   0x8558, /* E4FB */
+   0x8548, /* E4FC */
+   0x8541, /* E540 */
+   0x8602, /* E541 */
+   0x854b, /* E542 */
+   0x8555, /* E543 */
+   0x8580, /* E544 */
+   0x85a4, /* E545 */
+   0x8588, /* E546 */
+   0x8591, /* E547 */
+   0x858a, /* E548 */
+   0x85a8, /* E549 */
+   0x856d, /* E54A */
+   0x8594, /* E54B */
+   0x859b, /* E54C */
+   0x85ea, /* E54D */
+   0x8587, /* E54E */
+   0x859c, /* E54F */
+   0x8577, /* E550 */
+   0x857e, /* E551 */
+   0x8590, /* E552 */
+   0x85c9, /* E553 */
+   0x85ba, /* E554 */
+   0x85cf, /* E555 */
+   0x85b9, /* E556 */
+   0x85d0, /* E557 */
+   0x85d5, /* E558 */
+   0x85dd, /* E559 */
+   0x85e5, /* E55A */
+   0x85dc, /* E55B */
+   0x85f9, /* E55C */
+   0x860a, /* E55D */
+   0x8613, /* E55E */
+   0x860b, /* E55F */
+   0x85fe, /* E560 */
+   0x85fa, /* E561 */
+   0x8606, /* E562 */
+   0x8622, /* E563 */
+   0x861a, /* E564 */
+   0x8630, /* E565 */
+   0x863f, /* E566 */
+   0x864d, /* E567 */
+   0x4e55, /* E568 */
+   0x8654, /* E569 */
+   0x865f, /* E56A */
+   0x8667, /* E56B */
+   0x8671, /* E56C */
+   0x8693, /* E56D */
+   0x86a3, /* E56E */
+   0x86a9, /* E56F */
+   0x86aa, /* E570 */
+   0x868b, /* E571 */
+   0x868c, /* E572 */
+   0x86b6, /* E573 */
+   0x86af, /* E574 */
+   0x86c4, /* E575 */
+   0x86c6, /* E576 */
+   0x86b0, /* E577 */
+   0x86c9, /* E578 */
+   0x8823, /* E579 */
+   0x86ab, /* E57A */
+   0x86d4, /* E57B */
+   0x86de, /* E57C */
+   0x86e9, /* E57D */
+   0x86ec, /* E57E */
+   0x86df, /* E580 */
+   0x86db, /* E581 */
+   0x86ef, /* E582 */
+   0x8712, /* E583 */
+   0x8706, /* E584 */
+   0x8708, /* E585 */
+   0x8700, /* E586 */
+   0x8703, /* E587 */
+   0x86fb, /* E588 */
+   0x8711, /* E589 */
+   0x8709, /* E58A */
+   0x870d, /* E58B */
+   0x86f9, /* E58C */
+   0x870a, /* E58D */
+   0x8734, /* E58E */
+   0x873f, /* E58F */
+   0x8737, /* E590 */
+   0x873b, /* E591 */
+   0x8725, /* E592 */
+   0x8729, /* E593 */
+   0x871a, /* E594 */
+   0x8760, /* E595 */
+   0x875f, /* E596 */
+   0x8778, /* E597 */
+   0x874c, /* E598 */
+   0x874e, /* E599 */
+   0x8774, /* E59A */
+   0x8757, /* E59B */
+   0x8768, /* E59C */
+   0x876e, /* E59D */
+   0x8759, /* E59E */
+   0x8753, /* E59F */
+   0x8763, /* E5A0 */
+   0x876a, /* E5A1 */
+   0x8805, /* E5A2 */
+   0x87a2, /* E5A3 */
+   0x879f, /* E5A4 */
+   0x8782, /* E5A5 */
+   0x87af, /* E5A6 */
+   0x87cb, /* E5A7 */
+   0x87bd, /* E5A8 */
+   0x87c0, /* E5A9 */
+   0x87d0, /* E5AA */
+   0x96d6, /* E5AB */
+   0x87ab, /* E5AC */
+   0x87c4, /* E5AD */
+   0x87b3, /* E5AE */
+   0x87c7, /* E5AF */
+   0x87c6, /* E5B0 */
+   0x87bb, /* E5B1 */
+   0x87ef, /* E5B2 */
+   0x87f2, /* E5B3 */
+   0x87e0, /* E5B4 */
+   0x880f, /* E5B5 */
+   0x880d, /* E5B6 */
+   0x87fe, /* E5B7 */
+   0x87f6, /* E5B8 */
+   0x87f7, /* E5B9 */
+   0x880e, /* E5BA */
+   0x87d2, /* E5BB */
+   0x8811, /* E5BC */
+   0x8816, /* E5BD */
+   0x8815, /* E5BE */
+   0x8822, /* E5BF */
+   0x8821, /* E5C0 */
+   0x8831, /* E5C1 */
+   0x8836, /* E5C2 */
+   0x8839, /* E5C3 */
+   0x8827, /* E5C4 */
+   0x883b, /* E5C5 */
+   0x8844, /* E5C6 */
+   0x8842, /* E5C7 */
+   0x8852, /* E5C8 */
+   0x8859, /* E5C9 */
+   0x885e, /* E5CA */
+   0x8862, /* E5CB */
+   0x886b, /* E5CC */
+   0x8881, /* E5CD */
+   0x887e, /* E5CE */
+   0x889e, /* E5CF */
+   0x8875, /* E5D0 */
+   0x887d, /* E5D1 */
+   0x88b5, /* E5D2 */
+   0x8872, /* E5D3 */
+   0x8882, /* E5D4 */
+   0x8897, /* E5D5 */
+   0x8892, /* E5D6 */
+   0x88ae, /* E5D7 */
+   0x8899, /* E5D8 */
+   0x88a2, /* E5D9 */
+   0x888d, /* E5DA */
+   0x88a4, /* E5DB */
+   0x88b0, /* E5DC */
+   0x88bf, /* E5DD */
+   0x88b1, /* E5DE */
+   0x88c3, /* E5DF */
+   0x88c4, /* E5E0 */
+   0x88d4, /* E5E1 */
+   0x88d8, /* E5E2 */
+   0x88d9, /* E5E3 */
+   0x88dd, /* E5E4 */
+   0x88f9, /* E5E5 */
+   0x8902, /* E5E6 */
+   0x88fc, /* E5E7 */
+   0x88f4, /* E5E8 */
+   0x88e8, /* E5E9 */
+   0x88f2, /* E5EA */
+   0x8904, /* E5EB */
+   0x890c, /* E5EC */
+   0x890a, /* E5ED */
+   0x8913, /* E5EE */
+   0x8943, /* E5EF */
+   0x891e, /* E5F0 */
+   0x8925, /* E5F1 */
+   0x892a, /* E5F2 */
+   0x892b, /* E5F3 */
+   0x8941, /* E5F4 */
+   0x8944, /* E5F5 */
+   0x893b, /* E5F6 */
+   0x8936, /* E5F7 */
+   0x8938, /* E5F8 */
+   0x894c, /* E5F9 */
+   0x891d, /* E5FA */
+   0x8960, /* E5FB */
+   0x895e, /* E5FC */
+   0x8966, /* E640 */
+   0x8964, /* E641 */
+   0x896d, /* E642 */
+   0x896a, /* E643 */
+   0x896f, /* E644 */
+   0x8974, /* E645 */
+   0x8977, /* E646 */
+   0x897e, /* E647 */
+   0x8983, /* E648 */
+   0x8988, /* E649 */
+   0x898a, /* E64A */
+   0x8993, /* E64B */
+   0x8998, /* E64C */
+   0x89a1, /* E64D */
+   0x89a9, /* E64E */
+   0x89a6, /* E64F */
+   0x89ac, /* E650 */
+   0x89af, /* E651 */
+   0x89b2, /* E652 */
+   0x89ba, /* E653 */
+   0x89bd, /* E654 */
+   0x89bf, /* E655 */
+   0x89c0, /* E656 */
+   0x89da, /* E657 */
+   0x89dc, /* E658 */
+   0x89dd, /* E659 */
+   0x89e7, /* E65A */
+   0x89f4, /* E65B */
+   0x89f8, /* E65C */
+   0x8a03, /* E65D */
+   0x8a16, /* E65E */
+   0x8a10, /* E65F */
+   0x8a0c, /* E660 */
+   0x8a1b, /* E661 */
+   0x8a1d, /* E662 */
+   0x8a25, /* E663 */
+   0x8a36, /* E664 */
+   0x8a41, /* E665 */
+   0x8a5b, /* E666 */
+   0x8a52, /* E667 */
+   0x8a46, /* E668 */
+   0x8a48, /* E669 */
+   0x8a7c, /* E66A */
+   0x8a6d, /* E66B */
+   0x8a6c, /* E66C */
+   0x8a62, /* E66D */
+   0x8a85, /* E66E */
+   0x8a82, /* E66F */
+   0x8a84, /* E670 */
+   0x8aa8, /* E671 */
+   0x8aa1, /* E672 */
+   0x8a91, /* E673 */
+   0x8aa5, /* E674 */
+   0x8aa6, /* E675 */
+   0x8a9a, /* E676 */
+   0x8aa3, /* E677 */
+   0x8ac4, /* E678 */
+   0x8acd, /* E679 */
+   0x8ac2, /* E67A */
+   0x8ada, /* E67B */
+   0x8aeb, /* E67C */
+   0x8af3, /* E67D */
+   0x8ae7, /* E67E */
+   0x8ae4, /* E680 */
+   0x8af1, /* E681 */
+   0x8b14, /* E682 */
+   0x8ae0, /* E683 */
+   0x8ae2, /* E684 */
+   0x8af7, /* E685 */
+   0x8ade, /* E686 */
+   0x8adb, /* E687 */
+   0x8b0c, /* E688 */
+   0x8b07, /* E689 */
+   0x8b1a, /* E68A */
+   0x8ae1, /* E68B */
+   0x8b16, /* E68C */
+   0x8b10, /* E68D */
+   0x8b17, /* E68E */
+   0x8b20, /* E68F */
+   0x8b33, /* E690 */
+   0x97ab, /* E691 */
+   0x8b26, /* E692 */
+   0x8b2b, /* E693 */
+   0x8b3e, /* E694 */
+   0x8b28, /* E695 */
+   0x8b41, /* E696 */
+   0x8b4c, /* E697 */
+   0x8b4f, /* E698 */
+   0x8b4e, /* E699 */
+   0x8b49, /* E69A */
+   0x8b56, /* E69B */
+   0x8b5b, /* E69C */
+   0x8b5a, /* E69D */
+   0x8b6b, /* E69E */
+   0x8b5f, /* E69F */
+   0x8b6c, /* E6A0 */
+   0x8b6f, /* E6A1 */
+   0x8b74, /* E6A2 */
+   0x8b7d, /* E6A3 */
+   0x8b80, /* E6A4 */
+   0x8b8c, /* E6A5 */
+   0x8b8e, /* E6A6 */
+   0x8b92, /* E6A7 */
+   0x8b93, /* E6A8 */
+   0x8b96, /* E6A9 */
+   0x8b99, /* E6AA */
+   0x8b9a, /* E6AB */
+   0x8c3a, /* E6AC */
+   0x8c41, /* E6AD */
+   0x8c3f, /* E6AE */
+   0x8c48, /* E6AF */
+   0x8c4c, /* E6B0 */
+   0x8c4e, /* E6B1 */
+   0x8c50, /* E6B2 */
+   0x8c55, /* E6B3 */
+   0x8c62, /* E6B4 */
+   0x8c6c, /* E6B5 */
+   0x8c78, /* E6B6 */
+   0x8c7a, /* E6B7 */
+   0x8c82, /* E6B8 */
+   0x8c89, /* E6B9 */
+   0x8c85, /* E6BA */
+   0x8c8a, /* E6BB */
+   0x8c8d, /* E6BC */
+   0x8c8e, /* E6BD */
+   0x8c94, /* E6BE */
+   0x8c7c, /* E6BF */
+   0x8c98, /* E6C0 */
+   0x621d, /* E6C1 */
+   0x8cad, /* E6C2 */
+   0x8caa, /* E6C3 */
+   0x8cbd, /* E6C4 */
+   0x8cb2, /* E6C5 */
+   0x8cb3, /* E6C6 */
+   0x8cae, /* E6C7 */
+   0x8cb6, /* E6C8 */
+   0x8cc8, /* E6C9 */
+   0x8cc1, /* E6CA */
+   0x8ce4, /* E6CB */
+   0x8ce3, /* E6CC */
+   0x8cda, /* E6CD */
+   0x8cfd, /* E6CE */
+   0x8cfa, /* E6CF */
+   0x8cfb, /* E6D0 */
+   0x8d04, /* E6D1 */
+   0x8d05, /* E6D2 */
+   0x8d0a, /* E6D3 */
+   0x8d07, /* E6D4 */
+   0x8d0f, /* E6D5 */
+   0x8d0d, /* E6D6 */
+   0x8d10, /* E6D7 */
+   0x9f4e, /* E6D8 */
+   0x8d13, /* E6D9 */
+   0x8ccd, /* E6DA */
+   0x8d14, /* E6DB */
+   0x8d16, /* E6DC */
+   0x8d67, /* E6DD */
+   0x8d6d, /* E6DE */
+   0x8d71, /* E6DF */
+   0x8d73, /* E6E0 */
+   0x8d81, /* E6E1 */
+   0x8d99, /* E6E2 */
+   0x8dc2, /* E6E3 */
+   0x8dbe, /* E6E4 */
+   0x8dba, /* E6E5 */
+   0x8dcf, /* E6E6 */
+   0x8dda, /* E6E7 */
+   0x8dd6, /* E6E8 */
+   0x8dcc, /* E6E9 */
+   0x8ddb, /* E6EA */
+   0x8dcb, /* E6EB */
+   0x8dea, /* E6EC */
+   0x8deb, /* E6ED */
+   0x8ddf, /* E6EE */
+   0x8de3, /* E6EF */
+   0x8dfc, /* E6F0 */
+   0x8e08, /* E6F1 */
+   0x8e09, /* E6F2 */
+   0x8dff, /* E6F3 */
+   0x8e1d, /* E6F4 */
+   0x8e1e, /* E6F5 */
+   0x8e10, /* E6F6 */
+   0x8e1f, /* E6F7 */
+   0x8e42, /* E6F8 */
+   0x8e35, /* E6F9 */
+   0x8e30, /* E6FA */
+   0x8e34, /* E6FB */
+   0x8e4a, /* E6FC */
+   0x8e47, /* E740 */
+   0x8e49, /* E741 */
+   0x8e4c, /* E742 */
+   0x8e50, /* E743 */
+   0x8e48, /* E744 */
+   0x8e59, /* E745 */
+   0x8e64, /* E746 */
+   0x8e60, /* E747 */
+   0x8e2a, /* E748 */
+   0x8e63, /* E749 */
+   0x8e55, /* E74A */
+   0x8e76, /* E74B */
+   0x8e72, /* E74C */
+   0x8e7c, /* E74D */
+   0x8e81, /* E74E */
+   0x8e87, /* E74F */
+   0x8e85, /* E750 */
+   0x8e84, /* E751 */
+   0x8e8b, /* E752 */
+   0x8e8a, /* E753 */
+   0x8e93, /* E754 */
+   0x8e91, /* E755 */
+   0x8e94, /* E756 */
+   0x8e99, /* E757 */
+   0x8eaa, /* E758 */
+   0x8ea1, /* E759 */
+   0x8eac, /* E75A */
+   0x8eb0, /* E75B */
+   0x8ec6, /* E75C */
+   0x8eb1, /* E75D */
+   0x8ebe, /* E75E */
+   0x8ec5, /* E75F */
+   0x8ec8, /* E760 */
+   0x8ecb, /* E761 */
+   0x8edb, /* E762 */
+   0x8ee3, /* E763 */
+   0x8efc, /* E764 */
+   0x8efb, /* E765 */
+   0x8eeb, /* E766 */
+   0x8efe, /* E767 */
+   0x8f0a, /* E768 */
+   0x8f05, /* E769 */
+   0x8f15, /* E76A */
+   0x8f12, /* E76B */
+   0x8f19, /* E76C */
+   0x8f13, /* E76D */
+   0x8f1c, /* E76E */
+   0x8f1f, /* E76F */
+   0x8f1b, /* E770 */
+   0x8f0c, /* E771 */
+   0x8f26, /* E772 */
+   0x8f33, /* E773 */
+   0x8f3b, /* E774 */
+   0x8f39, /* E775 */
+   0x8f45, /* E776 */
+   0x8f42, /* E777 */
+   0x8f3e, /* E778 */
+   0x8f4c, /* E779 */
+   0x8f49, /* E77A */
+   0x8f46, /* E77B */
+   0x8f4e, /* E77C */
+   0x8f57, /* E77D */
+   0x8f5c, /* E77E */
+   0x8f62, /* E780 */
+   0x8f63, /* E781 */
+   0x8f64, /* E782 */
+   0x8f9c, /* E783 */
+   0x8f9f, /* E784 */
+   0x8fa3, /* E785 */
+   0x8fad, /* E786 */
+   0x8faf, /* E787 */
+   0x8fb7, /* E788 */
+   0x8fda, /* E789 */
+   0x8fe5, /* E78A */
+   0x8fe2, /* E78B */
+   0x8fea, /* E78C */
+   0x8fef, /* E78D */
+   0x9087, /* E78E */
+   0x8ff4, /* E78F */
+   0x9005, /* E790 */
+   0x8ff9, /* E791 */
+   0x8ffa, /* E792 */
+   0x9011, /* E793 */
+   0x9015, /* E794 */
+   0x9021, /* E795 */
+   0x900d, /* E796 */
+   0x901e, /* E797 */
+   0x9016, /* E798 */
+   0x900b, /* E799 */
+   0x9027, /* E79A */
+   0x9036, /* E79B */
+   0x9035, /* E79C */
+   0x9039, /* E79D */
+   0x8ff8, /* E79E */
+   0x904f, /* E79F */
+   0x9050, /* E7A0 */
+   0x9051, /* E7A1 */
+   0x9052, /* E7A2 */
+   0x900e, /* E7A3 */
+   0x9049, /* E7A4 */
+   0x903e, /* E7A5 */
+   0x9056, /* E7A6 */
+   0x9058, /* E7A7 */
+   0x905e, /* E7A8 */
+   0x9068, /* E7A9 */
+   0x906f, /* E7AA */
+   0x9076, /* E7AB */
+   0x96a8, /* E7AC */
+   0x9072, /* E7AD */
+   0x9082, /* E7AE */
+   0x907d, /* E7AF */
+   0x9081, /* E7B0 */
+   0x9080, /* E7B1 */
+   0x908a, /* E7B2 */
+   0x9089, /* E7B3 */
+   0x908f, /* E7B4 */
+   0x90a8, /* E7B5 */
+   0x90af, /* E7B6 */
+   0x90b1, /* E7B7 */
+   0x90b5, /* E7B8 */
+   0x90e2, /* E7B9 */
+   0x90e4, /* E7BA */
+   0x6248, /* E7BB */
+   0x90db, /* E7BC */
+   0x9102, /* E7BD */
+   0x9112, /* E7BE */
+   0x9119, /* E7BF */
+   0x9132, /* E7C0 */
+   0x9130, /* E7C1 */
+   0x914a, /* E7C2 */
+   0x9156, /* E7C3 */
+   0x9158, /* E7C4 */
+   0x9163, /* E7C5 */
+   0x9165, /* E7C6 */
+   0x9169, /* E7C7 */
+   0x9173, /* E7C8 */
+   0x9172, /* E7C9 */
+   0x918b, /* E7CA */
+   0x9189, /* E7CB */
+   0x9182, /* E7CC */
+   0x91a2, /* E7CD */
+   0x91ab, /* E7CE */
+   0x91af, /* E7CF */
+   0x91aa, /* E7D0 */
+   0x91b5, /* E7D1 */
+   0x91b4, /* E7D2 */
+   0x91ba, /* E7D3 */
+   0x91c0, /* E7D4 */
+   0x91c1, /* E7D5 */
+   0x91c9, /* E7D6 */
+   0x91cb, /* E7D7 */
+   0x91d0, /* E7D8 */
+   0x91d6, /* E7D9 */
+   0x91df, /* E7DA */
+   0x91e1, /* E7DB */
+   0x91db, /* E7DC */
+   0x91fc, /* E7DD */
+   0x91f5, /* E7DE */
+   0x91f6, /* E7DF */
+   0x921e, /* E7E0 */
+   0x91ff, /* E7E1 */
+   0x9214, /* E7E2 */
+   0x922c, /* E7E3 */
+   0x9215, /* E7E4 */
+   0x9211, /* E7E5 */
+   0x925e, /* E7E6 */
+   0x9257, /* E7E7 */
+   0x9245, /* E7E8 */
+   0x9249, /* E7E9 */
+   0x9264, /* E7EA */
+   0x9248, /* E7EB */
+   0x9295, /* E7EC */
+   0x923f, /* E7ED */
+   0x924b, /* E7EE */
+   0x9250, /* E7EF */
+   0x929c, /* E7F0 */
+   0x9296, /* E7F1 */
+   0x9293, /* E7F2 */
+   0x929b, /* E7F3 */
+   0x925a, /* E7F4 */
+   0x92cf, /* E7F5 */
+   0x92b9, /* E7F6 */
+   0x92b7, /* E7F7 */
+   0x92e9, /* E7F8 */
+   0x930f, /* E7F9 */
+   0x92fa, /* E7FA */
+   0x9344, /* E7FB */
+   0x932e, /* E7FC */
+   0x9319, /* E840 */
+   0x9322, /* E841 */
+   0x931a, /* E842 */
+   0x9323, /* E843 */
+   0x933a, /* E844 */
+   0x9335, /* E845 */
+   0x933b, /* E846 */
+   0x935c, /* E847 */
+   0x9360, /* E848 */
+   0x937c, /* E849 */
+   0x936e, /* E84A */
+   0x9356, /* E84B */
+   0x93b0, /* E84C */
+   0x93ac, /* E84D */
+   0x93ad, /* E84E */
+   0x9394, /* E84F */
+   0x93b9, /* E850 */
+   0x93d6, /* E851 */
+   0x93d7, /* E852 */
+   0x93e8, /* E853 */
+   0x93e5, /* E854 */
+   0x93d8, /* E855 */
+   0x93c3, /* E856 */
+   0x93dd, /* E857 */
+   0x93d0, /* E858 */
+   0x93c8, /* E859 */
+   0x93e4, /* E85A */
+   0x941a, /* E85B */
+   0x9414, /* E85C */
+   0x9413, /* E85D */
+   0x9403, /* E85E */
+   0x9407, /* E85F */
+   0x9410, /* E860 */
+   0x9436, /* E861 */
+   0x942b, /* E862 */
+   0x9435, /* E863 */
+   0x9421, /* E864 */
+   0x943a, /* E865 */
+   0x9441, /* E866 */
+   0x9452, /* E867 */
+   0x9444, /* E868 */
+   0x945b, /* E869 */
+   0x9460, /* E86A */
+   0x9462, /* E86B */
+   0x945e, /* E86C */
+   0x946a, /* E86D */
+   0x9229, /* E86E */
+   0x9470, /* E86F */
+   0x9475, /* E870 */
+   0x9477, /* E871 */
+   0x947d, /* E872 */
+   0x945a, /* E873 */
+   0x947c, /* E874 */
+   0x947e, /* E875 */
+   0x9481, /* E876 */
+   0x947f, /* E877 */
+   0x9582, /* E878 */
+   0x9587, /* E879 */
+   0x958a, /* E87A */
+   0x9594, /* E87B */
+   0x9596, /* E87C */
+   0x9598, /* E87D */
+   0x9599, /* E87E */
+   0x95a0, /* E880 */
+   0x95a8, /* E881 */
+   0x95a7, /* E882 */
+   0x95ad, /* E883 */
+   0x95bc, /* E884 */
+   0x95bb, /* E885 */
+   0x95b9, /* E886 */
+   0x95be, /* E887 */
+   0x95ca, /* E888 */
+   0x6ff6, /* E889 */
+   0x95c3, /* E88A */
+   0x95cd, /* E88B */
+   0x95cc, /* E88C */
+   0x95d5, /* E88D */
+   0x95d4, /* E88E */
+   0x95d6, /* E88F */
+   0x95dc, /* E890 */
+   0x95e1, /* E891 */
+   0x95e5, /* E892 */
+   0x95e2, /* E893 */
+   0x9621, /* E894 */
+   0x9628, /* E895 */
+   0x962e, /* E896 */
+   0x962f, /* E897 */
+   0x9642, /* E898 */
+   0x964c, /* E899 */
+   0x964f, /* E89A */
+   0x964b, /* E89B */
+   0x9677, /* E89C */
+   0x965c, /* E89D */
+   0x965e, /* E89E */
+   0x965d, /* E89F */
+   0x965f, /* E8A0 */
+   0x9666, /* E8A1 */
+   0x9672, /* E8A2 */
+   0x966c, /* E8A3 */
+   0x968d, /* E8A4 */
+   0x9698, /* E8A5 */
+   0x9695, /* E8A6 */
+   0x9697, /* E8A7 */
+   0x96aa, /* E8A8 */
+   0x96a7, /* E8A9 */
+   0x96b1, /* E8AA */
+   0x96b2, /* E8AB */
+   0x96b0, /* E8AC */
+   0x96b4, /* E8AD */
+   0x96b6, /* E8AE */
+   0x96b8, /* E8AF */
+   0x96b9, /* E8B0 */
+   0x96ce, /* E8B1 */
+   0x96cb, /* E8B2 */
+   0x96c9, /* E8B3 */
+   0x96cd, /* E8B4 */
+   0x894d, /* E8B5 */
+   0x96dc, /* E8B6 */
+   0x970d, /* E8B7 */
+   0x96d5, /* E8B8 */
+   0x96f9, /* E8B9 */
+   0x9704, /* E8BA */
+   0x9706, /* E8BB */
+   0x9708, /* E8BC */
+   0x9713, /* E8BD */
+   0x970e, /* E8BE */
+   0x9711, /* E8BF */
+   0x970f, /* E8C0 */
+   0x9716, /* E8C1 */
+   0x9719, /* E8C2 */
+   0x9724, /* E8C3 */
+   0x972a, /* E8C4 */
+   0x9730, /* E8C5 */
+   0x9739, /* E8C6 */
+   0x973d, /* E8C7 */
+   0x973e, /* E8C8 */
+   0x9744, /* E8C9 */
+   0x9746, /* E8CA */
+   0x9748, /* E8CB */
+   0x9742, /* E8CC */
+   0x9749, /* E8CD */
+   0x975c, /* E8CE */
+   0x9760, /* E8CF */
+   0x9764, /* E8D0 */
+   0x9766, /* E8D1 */
+   0x9768, /* E8D2 */
+   0x52d2, /* E8D3 */
+   0x976b, /* E8D4 */
+   0x9771, /* E8D5 */
+   0x9779, /* E8D6 */
+   0x9785, /* E8D7 */
+   0x977c, /* E8D8 */
+   0x9781, /* E8D9 */
+   0x977a, /* E8DA */
+   0x9786, /* E8DB */
+   0x978b, /* E8DC */
+   0x978f, /* E8DD */
+   0x9790, /* E8DE */
+   0x979c, /* E8DF */
+   0x97a8, /* E8E0 */
+   0x97a6, /* E8E1 */
+   0x97a3, /* E8E2 */
+   0x97b3, /* E8E3 */
+   0x97b4, /* E8E4 */
+   0x97c3, /* E8E5 */
+   0x97c6, /* E8E6 */
+   0x97c8, /* E8E7 */
+   0x97cb, /* E8E8 */
+   0x97dc, /* E8E9 */
+   0x97ed, /* E8EA */
+   0x9f4f, /* E8EB */
+   0x97f2, /* E8EC */
+   0x7adf, /* E8ED */
+   0x97f6, /* E8EE */
+   0x97f5, /* E8EF */
+   0x980f, /* E8F0 */
+   0x980c, /* E8F1 */
+   0x9838, /* E8F2 */
+   0x9824, /* E8F3 */
+   0x9821, /* E8F4 */
+   0x9837, /* E8F5 */
+   0x983d, /* E8F6 */
+   0x9846, /* E8F7 */
+   0x984f, /* E8F8 */
+   0x984b, /* E8F9 */
+   0x986b, /* E8FA */
+   0x986f, /* E8FB */
+   0x9870, /* E8FC */
+   0x9871, /* E940 */
+   0x9874, /* E941 */
+   0x9873, /* E942 */
+   0x98aa, /* E943 */
+   0x98af, /* E944 */
+   0x98b1, /* E945 */
+   0x98b6, /* E946 */
+   0x98c4, /* E947 */
+   0x98c3, /* E948 */
+   0x98c6, /* E949 */
+   0x98e9, /* E94A */
+   0x98eb, /* E94B */
+   0x9903, /* E94C */
+   0x9909, /* E94D */
+   0x9912, /* E94E */
+   0x9914, /* E94F */
+   0x9918, /* E950 */
+   0x9921, /* E951 */
+   0x991d, /* E952 */
+   0x991e, /* E953 */
+   0x9924, /* E954 */
+   0x9920, /* E955 */
+   0x992c, /* E956 */
+   0x992e, /* E957 */
+   0x993d, /* E958 */
+   0x993e, /* E959 */
+   0x9942, /* E95A */
+   0x9949, /* E95B */
+   0x9945, /* E95C */
+   0x9950, /* E95D */
+   0x994b, /* E95E */
+   0x9951, /* E95F */
+   0x9952, /* E960 */
+   0x994c, /* E961 */
+   0x9955, /* E962 */
+   0x9997, /* E963 */
+   0x9998, /* E964 */
+   0x99a5, /* E965 */
+   0x99ad, /* E966 */
+   0x99ae, /* E967 */
+   0x99bc, /* E968 */
+   0x99df, /* E969 */
+   0x99db, /* E96A */
+   0x99dd, /* E96B */
+   0x99d8, /* E96C */
+   0x99d1, /* E96D */
+   0x99ed, /* E96E */
+   0x99ee, /* E96F */
+   0x99f1, /* E970 */
+   0x99f2, /* E971 */
+   0x99fb, /* E972 */
+   0x99f8, /* E973 */
+   0x9a01, /* E974 */
+   0x9a0f, /* E975 */
+   0x9a05, /* E976 */
+   0x99e2, /* E977 */
+   0x9a19, /* E978 */
+   0x9a2b, /* E979 */
+   0x9a37, /* E97A */
+   0x9a45, /* E97B */
+   0x9a42, /* E97C */
+   0x9a40, /* E97D */
+   0x9a43, /* E97E */
+   0x9a3e, /* E980 */
+   0x9a55, /* E981 */
+   0x9a4d, /* E982 */
+   0x9a5b, /* E983 */
+   0x9a57, /* E984 */
+   0x9a5f, /* E985 */
+   0x9a62, /* E986 */
+   0x9a65, /* E987 */
+   0x9a64, /* E988 */
+   0x9a69, /* E989 */
+   0x9a6b, /* E98A */
+   0x9a6a, /* E98B */
+   0x9aad, /* E98C */
+   0x9ab0, /* E98D */
+   0x9abc, /* E98E */
+   0x9ac0, /* E98F */
+   0x9acf, /* E990 */
+   0x9ad1, /* E991 */
+   0x9ad3, /* E992 */
+   0x9ad4, /* E993 */
+   0x9ade, /* E994 */
+   0x9adf, /* E995 */
+   0x9ae2, /* E996 */
+   0x9ae3, /* E997 */
+   0x9ae6, /* E998 */
+   0x9aef, /* E999 */
+   0x9aeb, /* E99A */
+   0x9aee, /* E99B */
+   0x9af4, /* E99C */
+   0x9af1, /* E99D */
+   0x9af7, /* E99E */
+   0x9afb, /* E99F */
+   0x9b06, /* E9A0 */
+   0x9b18, /* E9A1 */
+   0x9b1a, /* E9A2 */
+   0x9b1f, /* E9A3 */
+   0x9b22, /* E9A4 */
+   0x9b23, /* E9A5 */
+   0x9b25, /* E9A6 */
+   0x9b27, /* E9A7 */
+   0x9b28, /* E9A8 */
+   0x9b29, /* E9A9 */
+   0x9b2a, /* E9AA */
+   0x9b2e, /* E9AB */
+   0x9b2f, /* E9AC */
+   0x9b32, /* E9AD */
+   0x9b44, /* E9AE */
+   0x9b43, /* E9AF */
+   0x9b4f, /* E9B0 */
+   0x9b4d, /* E9B1 */
+   0x9b4e, /* E9B2 */
+   0x9b51, /* E9B3 */
+   0x9b58, /* E9B4 */
+   0x9b74, /* E9B5 */
+   0x9b93, /* E9B6 */
+   0x9b83, /* E9B7 */
+   0x9b91, /* E9B8 */
+   0x9b96, /* E9B9 */
+   0x9b97, /* E9BA */
+   0x9b9f, /* E9BB */
+   0x9ba0, /* E9BC */
+   0x9ba8, /* E9BD */
+   0x9bb4, /* E9BE */
+   0x9bc0, /* E9BF */
+   0x9bca, /* E9C0 */
+   0x9bb9, /* E9C1 */
+   0x9bc6, /* E9C2 */
+   0x9bcf, /* E9C3 */
+   0x9bd1, /* E9C4 */
+   0x9bd2, /* E9C5 */
+   0x9be3, /* E9C6 */
+   0x9be2, /* E9C7 */
+   0x9be4, /* E9C8 */
+   0x9bd4, /* E9C9 */
+   0x9be1, /* E9CA */
+   0x9c3a, /* E9CB */
+   0x9bf2, /* E9CC */
+   0x9bf1, /* E9CD */
+   0x9bf0, /* E9CE */
+   0x9c15, /* E9CF */
+   0x9c14, /* E9D0 */
+   0x9c09, /* E9D1 */
+   0x9c13, /* E9D2 */
+   0x9c0c, /* E9D3 */
+   0x9c06, /* E9D4 */
+   0x9c08, /* E9D5 */
+   0x9c12, /* E9D6 */
+   0x9c0a, /* E9D7 */
+   0x9c04, /* E9D8 */
+   0x9c2e, /* E9D9 */
+   0x9c1b, /* E9DA */
+   0x9c25, /* E9DB */
+   0x9c24, /* E9DC */
+   0x9c21, /* E9DD */
+   0x9c30, /* E9DE */
+   0x9c47, /* E9DF */
+   0x9c32, /* E9E0 */
+   0x9c46, /* E9E1 */
+   0x9c3e, /* E9E2 */
+   0x9c5a, /* E9E3 */
+   0x9c60, /* E9E4 */
+   0x9c67, /* E9E5 */
+   0x9c76, /* E9E6 */
+   0x9c78, /* E9E7 */
+   0x9ce7, /* E9E8 */
+   0x9cec, /* E9E9 */
+   0x9cf0, /* E9EA */
+   0x9d09, /* E9EB */
+   0x9d08, /* E9EC */
+   0x9ceb, /* E9ED */
+   0x9d03, /* E9EE */
+   0x9d06, /* E9EF */
+   0x9d2a, /* E9F0 */
+   0x9d26, /* E9F1 */
+   0x9daf, /* E9F2 */
+   0x9d23, /* E9F3 */
+   0x9d1f, /* E9F4 */
+   0x9d44, /* E9F5 */
+   0x9d15, /* E9F6 */
+   0x9d12, /* E9F7 */
+   0x9d41, /* E9F8 */
+   0x9d3f, /* E9F9 */
+   0x9d3e, /* E9FA */
+   0x9d46, /* E9FB */
+   0x9d48, /* E9FC */
+   0x9d5d, /* EA40 */
+   0x9d5e, /* EA41 */
+   0x9d64, /* EA42 */
+   0x9d51, /* EA43 */
+   0x9d50, /* EA44 */
+   0x9d59, /* EA45 */
+   0x9d72, /* EA46 */
+   0x9d89, /* EA47 */
+   0x9d87, /* EA48 */
+   0x9dab, /* EA49 */
+   0x9d6f, /* EA4A */
+   0x9d7a, /* EA4B */
+   0x9d9a, /* EA4C */
+   0x9da4, /* EA4D */
+   0x9da9, /* EA4E */
+   0x9db2, /* EA4F */
+   0x9dc4, /* EA50 */
+   0x9dc1, /* EA51 */
+   0x9dbb, /* EA52 */
+   0x9db8, /* EA53 */
+   0x9dba, /* EA54 */
+   0x9dc6, /* EA55 */
+   0x9dcf, /* EA56 */
+   0x9dc2, /* EA57 */
+   0x9dd9, /* EA58 */
+   0x9dd3, /* EA59 */
+   0x9df8, /* EA5A */
+   0x9de6, /* EA5B */
+   0x9ded, /* EA5C */
+   0x9def, /* EA5D */
+   0x9dfd, /* EA5E */
+   0x9e1a, /* EA5F */
+   0x9e1b, /* EA60 */
+   0x9e1e, /* EA61 */
+   0x9e75, /* EA62 */
+   0x9e79, /* EA63 */
+   0x9e7d, /* EA64 */
+   0x9e81, /* EA65 */
+   0x9e88, /* EA66 */
+   0x9e8b, /* EA67 */
+   0x9e8c, /* EA68 */
+   0x9e92, /* EA69 */
+   0x9e95, /* EA6A */
+   0x9e91, /* EA6B */
+   0x9e9d, /* EA6C */
+   0x9ea5, /* EA6D */
+   0x9ea9, /* EA6E */
+   0x9eb8, /* EA6F */
+   0x9eaa, /* EA70 */
+   0x9ead, /* EA71 */
+   0x9761, /* EA72 */
+   0x9ecc, /* EA73 */
+   0x9ece, /* EA74 */
+   0x9ecf, /* EA75 */
+   0x9ed0, /* EA76 */
+   0x9ed4, /* EA77 */
+   0x9edc, /* EA78 */
+   0x9ede, /* EA79 */
+   0x9edd, /* EA7A */
+   0x9ee0, /* EA7B */
+   0x9ee5, /* EA7C */
+   0x9ee8, /* EA7D */
+   0x9eef, /* EA7E */
+   0x9ef4, /* EA80 */
+   0x9ef6, /* EA81 */
+   0x9ef7, /* EA82 */
+   0x9ef9, /* EA83 */
+   0x9efb, /* EA84 */
+   0x9efc, /* EA85 */
+   0x9efd, /* EA86 */
+   0x9f07, /* EA87 */
+   0x9f08, /* EA88 */
+   0x76b7, /* EA89 */
+   0x9f15, /* EA8A */
+   0x9f21, /* EA8B */
+   0x9f2c, /* EA8C */
+   0x9f3e, /* EA8D */
+   0x9f4a, /* EA8E */
+   0x9f52, /* EA8F */
+   0x9f54, /* EA90 */
+   0x9f63, /* EA91 */
+   0x9f5f, /* EA92 */
+   0x9f60, /* EA93 */
+   0x9f61, /* EA94 */
+   0x9f66, /* EA95 */
+   0x9f67, /* EA96 */
+   0x9f6c, /* EA97 */
+   0x9f6a, /* EA98 */
+   0x9f77, /* EA99 */
+   0x9f72, /* EA9A */
+   0x9f76, /* EA9B */
+   0x9f95, /* EA9C */
+   0x9f9c, /* EA9D */
+   0x9fa0, /* EA9E */
+   0x582f, /* EA9F */
+   0x69c7, /* EAA0 */
+   0x9059, /* EAA1 */
+   0x7464, /* EAA2 */
+   0x51dc, /* EAA3 */
+   0x7199, /* EAA4 */
+      '?', /* EAA5 */
+      '?', /* EAA6 */
+      '?', /* EAA7 */
+      '?', /* EAA8 */
+      '?', /* EAA9 */
+      '?', /* EAAA */
+      '?', /* EAAB */
+      '?', /* EAAC */
+      '?', /* EAAD */
+      '?', /* EAAE */
+      '?', /* EAAF */
+      '?', /* EAB0 */
+      '?', /* EAB1 */
+      '?', /* EAB2 */
+      '?', /* EAB3 */
+      '?', /* EAB4 */
+      '?', /* EAB5 */
+      '?', /* EAB6 */
+      '?', /* EAB7 */
+      '?', /* EAB8 */
+      '?', /* EAB9 */
+      '?', /* EABA */
+      '?', /* EABB */
+      '?', /* EABC */
+      '?', /* EABD */
+      '?', /* EABE */
+      '?', /* EABF */
+      '?', /* EAC0 */
+      '?', /* EAC1 */
+      '?', /* EAC2 */
+      '?', /* EAC3 */
+      '?', /* EAC4 */
+      '?', /* EAC5 */
+      '?', /* EAC6 */
+      '?', /* EAC7 */
+      '?', /* EAC8 */
+      '?', /* EAC9 */
+      '?', /* EACA */
+      '?', /* EACB */
+      '?', /* EACC */
+      '?', /* EACD */
+      '?', /* EACE */
+      '?', /* EACF */
+      '?', /* EAD0 */
+      '?', /* EAD1 */
+      '?', /* EAD2 */
+      '?', /* EAD3 */
+      '?', /* EAD4 */
+      '?', /* EAD5 */
+      '?', /* EAD6 */
+      '?', /* EAD7 */
+      '?', /* EAD8 */
+      '?', /* EAD9 */
+      '?', /* EADA */
+      '?', /* EADB */
+      '?', /* EADC */
+      '?', /* EADD */
+      '?', /* EADE */
+      '?', /* EADF */
+      '?', /* EAE0 */
+      '?', /* EAE1 */
+      '?', /* EAE2 */
+      '?', /* EAE3 */
+      '?', /* EAE4 */
+      '?', /* EAE5 */
+      '?', /* EAE6 */
+      '?', /* EAE7 */
+      '?', /* EAE8 */
+      '?', /* EAE9 */
+      '?', /* EAEA */
+      '?', /* EAEB */
+      '?', /* EAEC */
+      '?', /* EAED */
+      '?', /* EAEE */
+      '?', /* EAEF */
+      '?', /* EAF0 */
+      '?', /* EAF1 */
+      '?', /* EAF2 */
+      '?', /* EAF3 */
+      '?', /* EAF4 */
+      '?', /* EAF5 */
+      '?', /* EAF6 */
+      '?', /* EAF7 */
+      '?', /* EAF8 */
+      '?', /* EAF9 */
+      '?', /* EAFA */
+      '?', /* EAFB */
+      '?', /* EAFC */
+      '?', /* EB40 */
+      '?', /* EB41 */
+      '?', /* EB42 */
+      '?', /* EB43 */
+      '?', /* EB44 */
+      '?', /* EB45 */
+      '?', /* EB46 */
+      '?', /* EB47 */
+      '?', /* EB48 */
+      '?', /* EB49 */
+      '?', /* EB4A */
+      '?', /* EB4B */
+      '?', /* EB4C */
+      '?', /* EB4D */
+      '?', /* EB4E */
+      '?', /* EB4F */
+      '?', /* EB50 */
+      '?', /* EB51 */
+      '?', /* EB52 */
+      '?', /* EB53 */
+      '?', /* EB54 */
+      '?', /* EB55 */
+      '?', /* EB56 */
+      '?', /* EB57 */
+      '?', /* EB58 */
+      '?', /* EB59 */
+      '?', /* EB5A */
+      '?', /* EB5B */
+      '?', /* EB5C */
+      '?', /* EB5D */
+      '?', /* EB5E */
+      '?', /* EB5F */
+      '?', /* EB60 */
+      '?', /* EB61 */
+      '?', /* EB62 */
+      '?', /* EB63 */
+      '?', /* EB64 */
+      '?', /* EB65 */
+      '?', /* EB66 */
+      '?', /* EB67 */
+      '?', /* EB68 */
+      '?', /* EB69 */
+      '?', /* EB6A */
+      '?', /* EB6B */
+      '?', /* EB6C */
+      '?', /* EB6D */
+      '?', /* EB6E */
+      '?', /* EB6F */
+      '?', /* EB70 */
+      '?', /* EB71 */
+      '?', /* EB72 */
+      '?', /* EB73 */
+      '?', /* EB74 */
+      '?', /* EB75 */
+      '?', /* EB76 */
+      '?', /* EB77 */
+      '?', /* EB78 */
+      '?', /* EB79 */
+      '?', /* EB7A */
+      '?', /* EB7B */
+      '?', /* EB7C */
+      '?', /* EB7D */
+      '?', /* EB7E */
+      '?', /* EB80 */
+      '?', /* EB81 */
+      '?', /* EB82 */
+      '?', /* EB83 */
+      '?', /* EB84 */
+      '?', /* EB85 */
+      '?', /* EB86 */
+      '?', /* EB87 */
+      '?', /* EB88 */
+      '?', /* EB89 */
+      '?', /* EB8A */
+      '?', /* EB8B */
+      '?', /* EB8C */
+      '?', /* EB8D */
+      '?', /* EB8E */
+      '?', /* EB8F */
+      '?', /* EB90 */
+      '?', /* EB91 */
+      '?', /* EB92 */
+      '?', /* EB93 */
+      '?', /* EB94 */
+      '?', /* EB95 */
+      '?', /* EB96 */
+      '?', /* EB97 */
+      '?', /* EB98 */
+      '?', /* EB99 */
+      '?', /* EB9A */
+      '?', /* EB9B */
+      '?', /* EB9C */
+      '?', /* EB9D */
+      '?', /* EB9E */
+      '?', /* EB9F */
+      '?', /* EBA0 */
+      '?', /* EBA1 */
+      '?', /* EBA2 */
+      '?', /* EBA3 */
+      '?', /* EBA4 */
+      '?', /* EBA5 */
+      '?', /* EBA6 */
+      '?', /* EBA7 */
+      '?', /* EBA8 */
+      '?', /* EBA9 */
+      '?', /* EBAA */
+      '?', /* EBAB */
+      '?', /* EBAC */
+      '?', /* EBAD */
+      '?', /* EBAE */
+      '?', /* EBAF */
+      '?', /* EBB0 */
+      '?', /* EBB1 */
+      '?', /* EBB2 */
+      '?', /* EBB3 */
+      '?', /* EBB4 */
+      '?', /* EBB5 */
+      '?', /* EBB6 */
+      '?', /* EBB7 */
+      '?', /* EBB8 */
+      '?', /* EBB9 */
+      '?', /* EBBA */
+      '?', /* EBBB */
+      '?', /* EBBC */
+      '?', /* EBBD */
+      '?', /* EBBE */
+      '?', /* EBBF */
+      '?', /* EBC0 */
+      '?', /* EBC1 */
+      '?', /* EBC2 */
+      '?', /* EBC3 */
+      '?', /* EBC4 */
+      '?', /* EBC5 */
+      '?', /* EBC6 */
+      '?', /* EBC7 */
+      '?', /* EBC8 */
+      '?', /* EBC9 */
+      '?', /* EBCA */
+      '?', /* EBCB */
+      '?', /* EBCC */
+      '?', /* EBCD */
+      '?', /* EBCE */
+      '?', /* EBCF */
+      '?', /* EBD0 */
+      '?', /* EBD1 */
+      '?', /* EBD2 */
+      '?', /* EBD3 */
+      '?', /* EBD4 */
+      '?', /* EBD5 */
+      '?', /* EBD6 */
+      '?', /* EBD7 */
+      '?', /* EBD8 */
+      '?', /* EBD9 */
+      '?', /* EBDA */
+      '?', /* EBDB */
+      '?', /* EBDC */
+      '?', /* EBDD */
+      '?', /* EBDE */
+      '?', /* EBDF */
+      '?', /* EBE0 */
+      '?', /* EBE1 */
+      '?', /* EBE2 */
+      '?', /* EBE3 */
+      '?', /* EBE4 */
+      '?', /* EBE5 */
+      '?', /* EBE6 */
+      '?', /* EBE7 */
+      '?', /* EBE8 */
+      '?', /* EBE9 */
+      '?', /* EBEA */
+      '?', /* EBEB */
+      '?', /* EBEC */
+      '?', /* EBED */
+      '?', /* EBEE */
+      '?', /* EBEF */
+      '?', /* EBF0 */
+      '?', /* EBF1 */
+      '?', /* EBF2 */
+      '?', /* EBF3 */
+      '?', /* EBF4 */
+      '?', /* EBF5 */
+      '?', /* EBF6 */
+      '?', /* EBF7 */
+      '?', /* EBF8 */
+      '?', /* EBF9 */
+      '?', /* EBFA */
+      '?', /* EBFB */
+      '?', /* EBFC */
+      '?', /* EC40 */
+      '?', /* EC41 */
+      '?', /* EC42 */
+      '?', /* EC43 */
+      '?', /* EC44 */
+      '?', /* EC45 */
+      '?', /* EC46 */
+      '?', /* EC47 */
+      '?', /* EC48 */
+      '?', /* EC49 */
+      '?', /* EC4A */
+      '?', /* EC4B */
+      '?', /* EC4C */
+      '?', /* EC4D */
+      '?', /* EC4E */
+      '?', /* EC4F */
+      '?', /* EC50 */
+      '?', /* EC51 */
+      '?', /* EC52 */
+      '?', /* EC53 */
+      '?', /* EC54 */
+      '?', /* EC55 */
+      '?', /* EC56 */
+      '?', /* EC57 */
+      '?', /* EC58 */
+      '?', /* EC59 */
+      '?', /* EC5A */
+      '?', /* EC5B */
+      '?', /* EC5C */
+      '?', /* EC5D */
+      '?', /* EC5E */
+      '?', /* EC5F */
+      '?', /* EC60 */
+      '?', /* EC61 */
+      '?', /* EC62 */
+      '?', /* EC63 */
+      '?', /* EC64 */
+      '?', /* EC65 */
+      '?', /* EC66 */
+      '?', /* EC67 */
+      '?', /* EC68 */
+      '?', /* EC69 */
+      '?', /* EC6A */
+      '?', /* EC6B */
+      '?', /* EC6C */
+      '?', /* EC6D */
+      '?', /* EC6E */
+      '?', /* EC6F */
+      '?', /* EC70 */
+      '?', /* EC71 */
+      '?', /* EC72 */
+      '?', /* EC73 */
+      '?', /* EC74 */
+      '?', /* EC75 */
+      '?', /* EC76 */
+      '?', /* EC77 */
+      '?', /* EC78 */
+      '?', /* EC79 */
+      '?', /* EC7A */
+      '?', /* EC7B */
+      '?', /* EC7C */
+      '?', /* EC7D */
+      '?', /* EC7E */
+      '?', /* EC80 */
+      '?', /* EC81 */
+      '?', /* EC82 */
+      '?', /* EC83 */
+      '?', /* EC84 */
+      '?', /* EC85 */
+      '?', /* EC86 */
+      '?', /* EC87 */
+      '?', /* EC88 */
+      '?', /* EC89 */
+      '?', /* EC8A */
+      '?', /* EC8B */
+      '?', /* EC8C */
+      '?', /* EC8D */
+      '?', /* EC8E */
+      '?', /* EC8F */
+      '?', /* EC90 */
+      '?', /* EC91 */
+      '?', /* EC92 */
+      '?', /* EC93 */
+      '?', /* EC94 */
+      '?', /* EC95 */
+      '?', /* EC96 */
+      '?', /* EC97 */
+      '?', /* EC98 */
+      '?', /* EC99 */
+      '?', /* EC9A */
+      '?', /* EC9B */
+      '?', /* EC9C */
+      '?', /* EC9D */
+      '?', /* EC9E */
+      '?', /* EC9F */
+      '?', /* ECA0 */
+      '?', /* ECA1 */
+      '?', /* ECA2 */
+      '?', /* ECA3 */
+      '?', /* ECA4 */
+      '?', /* ECA5 */
+      '?', /* ECA6 */
+      '?', /* ECA7 */
+      '?', /* ECA8 */
+      '?', /* ECA9 */
+      '?', /* ECAA */
+      '?', /* ECAB */
+      '?', /* ECAC */
+      '?', /* ECAD */
+      '?', /* ECAE */
+      '?', /* ECAF */
+      '?', /* ECB0 */
+      '?', /* ECB1 */
+      '?', /* ECB2 */
+      '?', /* ECB3 */
+      '?', /* ECB4 */
+      '?', /* ECB5 */
+      '?', /* ECB6 */
+      '?', /* ECB7 */
+      '?', /* ECB8 */
+      '?', /* ECB9 */
+      '?', /* ECBA */
+      '?', /* ECBB */
+      '?', /* ECBC */
+      '?', /* ECBD */
+      '?', /* ECBE */
+      '?', /* ECBF */
+      '?', /* ECC0 */
+      '?', /* ECC1 */
+      '?', /* ECC2 */
+      '?', /* ECC3 */
+      '?', /* ECC4 */
+      '?', /* ECC5 */
+      '?', /* ECC6 */
+      '?', /* ECC7 */
+      '?', /* ECC8 */
+      '?', /* ECC9 */
+      '?', /* ECCA */
+      '?', /* ECCB */
+      '?', /* ECCC */
+      '?', /* ECCD */
+      '?', /* ECCE */
+      '?', /* ECCF */
+      '?', /* ECD0 */
+      '?', /* ECD1 */
+      '?', /* ECD2 */
+      '?', /* ECD3 */
+      '?', /* ECD4 */
+      '?', /* ECD5 */
+      '?', /* ECD6 */
+      '?', /* ECD7 */
+      '?', /* ECD8 */
+      '?', /* ECD9 */
+      '?', /* ECDA */
+      '?', /* ECDB */
+      '?', /* ECDC */
+      '?', /* ECDD */
+      '?', /* ECDE */
+      '?', /* ECDF */
+      '?', /* ECE0 */
+      '?', /* ECE1 */
+      '?', /* ECE2 */
+      '?', /* ECE3 */
+      '?', /* ECE4 */
+      '?', /* ECE5 */
+      '?', /* ECE6 */
+      '?', /* ECE7 */
+      '?', /* ECE8 */
+      '?', /* ECE9 */
+      '?', /* ECEA */
+      '?', /* ECEB */
+      '?', /* ECEC */
+      '?', /* ECED */
+      '?', /* ECEE */
+      '?', /* ECEF */
+      '?', /* ECF0 */
+      '?', /* ECF1 */
+      '?', /* ECF2 */
+      '?', /* ECF3 */
+      '?', /* ECF4 */
+      '?', /* ECF5 */
+      '?', /* ECF6 */
+      '?', /* ECF7 */
+      '?', /* ECF8 */
+      '?', /* ECF9 */
+      '?', /* ECFA */
+      '?', /* ECFB */
+      '?', /* ECFC */
+   0x7e8a, /* ED40 */
+   0x891c, /* ED41 */
+   0x9348, /* ED42 */
+   0x9288, /* ED43 */
+   0x84dc, /* ED44 */
+   0x4fc9, /* ED45 */
+   0x70bb, /* ED46 */
+   0x6631, /* ED47 */
+   0x68c8, /* ED48 */
+   0x92f9, /* ED49 */
+   0x66fb, /* ED4A */
+   0x5f45, /* ED4B */
+   0x4e28, /* ED4C */
+   0x4ee1, /* ED4D */
+   0x4efc, /* ED4E */
+   0x4f00, /* ED4F */
+   0x4f03, /* ED50 */
+   0x4f39, /* ED51 */
+   0x4f56, /* ED52 */
+   0x4f92, /* ED53 */
+   0x4f8a, /* ED54 */
+   0x4f9a, /* ED55 */
+   0x4f94, /* ED56 */
+   0x4fcd, /* ED57 */
+   0x5040, /* ED58 */
+   0x5022, /* ED59 */
+   0x4fff, /* ED5A */
+   0x501e, /* ED5B */
+   0x5046, /* ED5C */
+   0x5070, /* ED5D */
+   0x5042, /* ED5E */
+   0x5094, /* ED5F */
+   0x50f4, /* ED60 */
+   0x50d8, /* ED61 */
+   0x514a, /* ED62 */
+   0x5164, /* ED63 */
+   0x519d, /* ED64 */
+   0x51be, /* ED65 */
+   0x51ec, /* ED66 */
+   0x5215, /* ED67 */
+   0x529c, /* ED68 */
+   0x52a6, /* ED69 */
+   0x52c0, /* ED6A */
+   0x52db, /* ED6B */
+   0x5300, /* ED6C */
+   0x5307, /* ED6D */
+   0x5324, /* ED6E */
+   0x5372, /* ED6F */
+   0x5393, /* ED70 */
+   0x53b2, /* ED71 */
+   0x53dd, /* ED72 */
+   0xfa0e, /* ED73 */
+   0x549c, /* ED74 */
+   0x548a, /* ED75 */
+   0x54a9, /* ED76 */
+   0x54ff, /* ED77 */
+   0x5586, /* ED78 */
+   0x5759, /* ED79 */
+   0x5765, /* ED7A */
+   0x57ac, /* ED7B */
+   0x57c8, /* ED7C */
+   0x57c7, /* ED7D */
+   0xfa0f, /* ED7E */
+   0xfa10, /* ED80 */
+   0x589e, /* ED81 */
+   0x58b2, /* ED82 */
+   0x590b, /* ED83 */
+   0x5953, /* ED84 */
+   0x595b, /* ED85 */
+   0x595d, /* ED86 */
+   0x5963, /* ED87 */
+   0x59a4, /* ED88 */
+   0x59ba, /* ED89 */
+   0x5b56, /* ED8A */
+   0x5bc0, /* ED8B */
+   0x752f, /* ED8C */
+   0x5bd8, /* ED8D */
+   0x5bec, /* ED8E */
+   0x5c1e, /* ED8F */
+   0x5ca6, /* ED90 */
+   0x5cba, /* ED91 */
+   0x5cf5, /* ED92 */
+   0x5d27, /* ED93 */
+   0x5d53, /* ED94 */
+   0xfa11, /* ED95 */
+   0x5d42, /* ED96 */
+   0x5d6d, /* ED97 */
+   0x5db8, /* ED98 */
+   0x5db9, /* ED99 */
+   0x5dd0, /* ED9A */
+   0x5f21, /* ED9B */
+   0x5f34, /* ED9C */
+   0x5f67, /* ED9D */
+   0x5fb7, /* ED9E */
+   0x5fde, /* ED9F */
+   0x605d, /* EDA0 */
+   0x6085, /* EDA1 */
+   0x608a, /* EDA2 */
+   0x60de, /* EDA3 */
+   0x60d5, /* EDA4 */
+   0x6120, /* EDA5 */
+   0x60f2, /* EDA6 */
+   0x6111, /* EDA7 */
+   0x6137, /* EDA8 */
+   0x6130, /* EDA9 */
+   0x6198, /* EDAA */
+   0x6213, /* EDAB */
+   0x62a6, /* EDAC */
+   0x63f5, /* EDAD */
+   0x6460, /* EDAE */
+   0x649d, /* EDAF */
+   0x64ce, /* EDB0 */
+   0x654e, /* EDB1 */
+   0x6600, /* EDB2 */
+   0x6615, /* EDB3 */
+   0x663b, /* EDB4 */
+   0x6609, /* EDB5 */
+   0x662e, /* EDB6 */
+   0x661e, /* EDB7 */
+   0x6624, /* EDB8 */
+   0x6665, /* EDB9 */
+   0x6657, /* EDBA */
+   0x6659, /* EDBB */
+   0xfa12, /* EDBC */
+   0x6673, /* EDBD */
+   0x6699, /* EDBE */
+   0x66a0, /* EDBF */
+   0x66b2, /* EDC0 */
+   0x66bf, /* EDC1 */
+   0x66fa, /* EDC2 */
+   0x670e, /* EDC3 */
+   0xf929, /* EDC4 */
+   0x6766, /* EDC5 */
+   0x67bb, /* EDC6 */
+   0x6852, /* EDC7 */
+   0x67c0, /* EDC8 */
+   0x6801, /* EDC9 */
+   0x6844, /* EDCA */
+   0x68cf, /* EDCB */
+   0xfa13, /* EDCC */
+   0x6968, /* EDCD */
+   0xfa14, /* EDCE */
+   0x6998, /* EDCF */
+   0x69e2, /* EDD0 */
+   0x6a30, /* EDD1 */
+   0x6a6b, /* EDD2 */
+   0x6a46, /* EDD3 */
+   0x6a73, /* EDD4 */
+   0x6a7e, /* EDD5 */
+   0x6ae2, /* EDD6 */
+   0x6ae4, /* EDD7 */
+   0x6bd6, /* EDD8 */
+   0x6c3f, /* EDD9 */
+   0x6c5c, /* EDDA */
+   0x6c86, /* EDDB */
+   0x6c6f, /* EDDC */
+   0x6cda, /* EDDD */
+   0x6d04, /* EDDE */
+   0x6d87, /* EDDF */
+   0x6d6f, /* EDE0 */
+   0x6d96, /* EDE1 */
+   0x6dac, /* EDE2 */
+   0x6dcf, /* EDE3 */
+   0x6df8, /* EDE4 */
+   0x6df2, /* EDE5 */
+   0x6dfc, /* EDE6 */
+   0x6e39, /* EDE7 */
+   0x6e5c, /* EDE8 */
+   0x6e27, /* EDE9 */
+   0x6e3c, /* EDEA */
+   0x6ebf, /* EDEB */
+   0x6f88, /* EDEC */
+   0x6fb5, /* EDED */
+   0x6ff5, /* EDEE */
+   0x7005, /* EDEF */
+   0x7007, /* EDF0 */
+   0x7028, /* EDF1 */
+   0x7085, /* EDF2 */
+   0x70ab, /* EDF3 */
+   0x710f, /* EDF4 */
+   0x7104, /* EDF5 */
+   0x715c, /* EDF6 */
+   0x7146, /* EDF7 */
+   0x7147, /* EDF8 */
+   0xfa15, /* EDF9 */
+   0x71c1, /* EDFA */
+   0x71fe, /* EDFB */
+   0x72b1, /* EDFC */
+   0x72be, /* EE40 */
+   0x7324, /* EE41 */
+   0xfa16, /* EE42 */
+   0x7377, /* EE43 */
+   0x73bd, /* EE44 */
+   0x73c9, /* EE45 */
+   0x73d6, /* EE46 */
+   0x73e3, /* EE47 */
+   0x73d2, /* EE48 */
+   0x7407, /* EE49 */
+   0x73f5, /* EE4A */
+   0x7426, /* EE4B */
+   0x742a, /* EE4C */
+   0x7429, /* EE4D */
+   0x742e, /* EE4E */
+   0x7462, /* EE4F */
+   0x7489, /* EE50 */
+   0x749f, /* EE51 */
+   0x7501, /* EE52 */
+   0x756f, /* EE53 */
+   0x7682, /* EE54 */
+   0x769c, /* EE55 */
+   0x769e, /* EE56 */
+   0x769b, /* EE57 */
+   0x76a6, /* EE58 */
+   0xfa17, /* EE59 */
+   0x7746, /* EE5A */
+   0x52af, /* EE5B */
+   0x7821, /* EE5C */
+   0x784e, /* EE5D */
+   0x7864, /* EE5E */
+   0x787a, /* EE5F */
+   0x7930, /* EE60 */
+   0xfa18, /* EE61 */
+   0xfa19, /* EE62 */
+   0xfa1a, /* EE63 */
+   0x7994, /* EE64 */
+   0xfa1b, /* EE65 */
+   0x799b, /* EE66 */
+   0x7ad1, /* EE67 */
+   0x7ae7, /* EE68 */
+   0xfa1c, /* EE69 */
+   0x7aeb, /* EE6A */
+   0x7b9e, /* EE6B */
+   0xfa1d, /* EE6C */
+   0x7d48, /* EE6D */
+   0x7d5c, /* EE6E */
+   0x7db7, /* EE6F */
+   0x7da0, /* EE70 */
+   0x7dd6, /* EE71 */
+   0x7e52, /* EE72 */
+   0x7f47, /* EE73 */
+   0x7fa1, /* EE74 */
+   0xfa1e, /* EE75 */
+   0x8301, /* EE76 */
+   0x8362, /* EE77 */
+   0x837f, /* EE78 */
+   0x83c7, /* EE79 */
+   0x83f6, /* EE7A */
+   0x8448, /* EE7B */
+   0x84b4, /* EE7C */
+   0x8553, /* EE7D */
+   0x8559, /* EE7E */
+   0x856b, /* EE80 */
+   0xfa1f, /* EE81 */
+   0x85b0, /* EE82 */
+   0xfa20, /* EE83 */
+   0xfa21, /* EE84 */
+   0x8807, /* EE85 */
+   0x88f5, /* EE86 */
+   0x8a12, /* EE87 */
+   0x8a37, /* EE88 */
+   0x8a79, /* EE89 */
+   0x8aa7, /* EE8A */
+   0x8abe, /* EE8B */
+   0x8adf, /* EE8C */
+   0xfa22, /* EE8D */
+   0x8af6, /* EE8E */
+   0x8b53, /* EE8F */
+   0x8b7f, /* EE90 */
+   0x8cf0, /* EE91 */
+   0x8cf4, /* EE92 */
+   0x8d12, /* EE93 */
+   0x8d76, /* EE94 */
+   0xfa23, /* EE95 */
+   0x8ecf, /* EE96 */
+   0xfa24, /* EE97 */
+   0xfa25, /* EE98 */
+   0x9067, /* EE99 */
+   0x90de, /* EE9A */
+   0xfa26, /* EE9B */
+   0x9115, /* EE9C */
+   0x9127, /* EE9D */
+   0x91da, /* EE9E */
+   0x91d7, /* EE9F */
+   0x91de, /* EEA0 */
+   0x91ed, /* EEA1 */
+   0x91ee, /* EEA2 */
+   0x91e4, /* EEA3 */
+   0x91e5, /* EEA4 */
+   0x9206, /* EEA5 */
+   0x9210, /* EEA6 */
+   0x920a, /* EEA7 */
+   0x923a, /* EEA8 */
+   0x9240, /* EEA9 */
+   0x923c, /* EEAA */
+   0x924e, /* EEAB */
+   0x9259, /* EEAC */
+   0x9251, /* EEAD */
+   0x9239, /* EEAE */
+   0x9267, /* EEAF */
+   0x92a7, /* EEB0 */
+   0x9277, /* EEB1 */
+   0x9278, /* EEB2 */
+   0x92e7, /* EEB3 */
+   0x92d7, /* EEB4 */
+   0x92d9, /* EEB5 */
+   0x92d0, /* EEB6 */
+   0xfa27, /* EEB7 */
+   0x92d5, /* EEB8 */
+   0x92e0, /* EEB9 */
+   0x92d3, /* EEBA */
+   0x9325, /* EEBB */
+   0x9321, /* EEBC */
+   0x92fb, /* EEBD */
+   0xfa28, /* EEBE */
+   0x931e, /* EEBF */
+   0x92ff, /* EEC0 */
+   0x931d, /* EEC1 */
+   0x9302, /* EEC2 */
+   0x9370, /* EEC3 */
+   0x9357, /* EEC4 */
+   0x93a4, /* EEC5 */
+   0x93c6, /* EEC6 */
+   0x93de, /* EEC7 */
+   0x93f8, /* EEC8 */
+   0x9431, /* EEC9 */
+   0x9445, /* EECA */
+   0x9448, /* EECB */
+   0x9592, /* EECC */
+   0xf9dc, /* EECD */
+   0xfa29, /* EECE */
+   0x969d, /* EECF */
+   0x96af, /* EED0 */
+   0x9733, /* EED1 */
+   0x973b, /* EED2 */
+   0x9743, /* EED3 */
+   0x974d, /* EED4 */
+   0x974f, /* EED5 */
+   0x9751, /* EED6 */
+   0x9755, /* EED7 */
+   0x9857, /* EED8 */
+   0x9865, /* EED9 */
+   0xfa2a, /* EEDA */
+   0xfa2b, /* EEDB */
+   0x9927, /* EEDC */
+   0xfa2c, /* EEDD */
+   0x999e, /* EEDE */
+   0x9a4e, /* EEDF */
+   0x9ad9, /* EEE0 */
+   0x9adc, /* EEE1 */
+   0x9b75, /* EEE2 */
+   0x9b72, /* EEE3 */
+   0x9b8f, /* EEE4 */
+   0x9bb1, /* EEE5 */
+   0x9bbb, /* EEE6 */
+   0x9c00, /* EEE7 */
+   0x9d70, /* EEE8 */
+   0x9d6b, /* EEE9 */
+   0xfa2d, /* EEEA */
+   0x9e19, /* EEEB */
+   0x9ed1, /* EEEC */
+      '?', /* EEED */
+      '?', /* EEEE */
+   0x2170, /* EEEF */
+   0x2171, /* EEF0 */
+   0x2172, /* EEF1 */
+   0x2173, /* EEF2 */
+   0x2174, /* EEF3 */
+   0x2175, /* EEF4 */
+   0x2176, /* EEF5 */
+   0x2177, /* EEF6 */
+   0x2178, /* EEF7 */
+   0x2179, /* EEF8 */
+   0xffe2, /* EEF9 */
+   0xffe4, /* EEFA */
+   0xff07, /* EEFB */
+   0xff02, /* EEFC */
+      '?', /* EF40 */
+      '?', /* EF41 */
+      '?', /* EF42 */
+      '?', /* EF43 */
+      '?', /* EF44 */
+      '?', /* EF45 */
+      '?', /* EF46 */
+      '?', /* EF47 */
+      '?', /* EF48 */
+      '?', /* EF49 */
+      '?', /* EF4A */
+      '?', /* EF4B */
+      '?', /* EF4C */
+      '?', /* EF4D */
+      '?', /* EF4E */
+      '?', /* EF4F */
+      '?', /* EF50 */
+      '?', /* EF51 */
+      '?', /* EF52 */
+      '?', /* EF53 */
+      '?', /* EF54 */
+      '?', /* EF55 */
+      '?', /* EF56 */
+      '?', /* EF57 */
+      '?', /* EF58 */
+      '?', /* EF59 */
+      '?', /* EF5A */
+      '?', /* EF5B */
+      '?', /* EF5C */
+      '?', /* EF5D */
+      '?', /* EF5E */
+      '?', /* EF5F */
+      '?', /* EF60 */
+      '?', /* EF61 */
+      '?', /* EF62 */
+      '?', /* EF63 */
+      '?', /* EF64 */
+      '?', /* EF65 */
+      '?', /* EF66 */
+      '?', /* EF67 */
+      '?', /* EF68 */
+      '?', /* EF69 */
+      '?', /* EF6A */
+      '?', /* EF6B */
+      '?', /* EF6C */
+      '?', /* EF6D */
+      '?', /* EF6E */
+      '?', /* EF6F */
+      '?', /* EF70 */
+      '?', /* EF71 */
+      '?', /* EF72 */
+      '?', /* EF73 */
+      '?', /* EF74 */
+      '?', /* EF75 */
+      '?', /* EF76 */
+      '?', /* EF77 */
+      '?', /* EF78 */
+      '?', /* EF79 */
+      '?', /* EF7A */
+      '?', /* EF7B */
+      '?', /* EF7C */
+      '?', /* EF7D */
+      '?', /* EF7E */
+      '?', /* EF80 */
+      '?', /* EF81 */
+      '?', /* EF82 */
+      '?', /* EF83 */
+      '?', /* EF84 */
+      '?', /* EF85 */
+      '?', /* EF86 */
+      '?', /* EF87 */
+      '?', /* EF88 */
+      '?', /* EF89 */
+      '?', /* EF8A */
+      '?', /* EF8B */
+      '?', /* EF8C */
+      '?', /* EF8D */
+      '?', /* EF8E */
+      '?', /* EF8F */
+      '?', /* EF90 */
+      '?', /* EF91 */
+      '?', /* EF92 */
+      '?', /* EF93 */
+      '?', /* EF94 */
+      '?', /* EF95 */
+      '?', /* EF96 */
+      '?', /* EF97 */
+      '?', /* EF98 */
+      '?', /* EF99 */
+      '?', /* EF9A */
+      '?', /* EF9B */
+      '?', /* EF9C */
+      '?', /* EF9D */
+      '?', /* EF9E */
+      '?', /* EF9F */
+      '?', /* EFA0 */
+      '?', /* EFA1 */
+      '?', /* EFA2 */
+      '?', /* EFA3 */
+      '?', /* EFA4 */
+      '?', /* EFA5 */
+      '?', /* EFA6 */
+      '?', /* EFA7 */
+      '?', /* EFA8 */
+      '?', /* EFA9 */
+      '?', /* EFAA */
+      '?', /* EFAB */
+      '?', /* EFAC */
+      '?', /* EFAD */
+      '?', /* EFAE */
+      '?', /* EFAF */
+      '?', /* EFB0 */
+      '?', /* EFB1 */
+      '?', /* EFB2 */
+      '?', /* EFB3 */
+      '?', /* EFB4 */
+      '?', /* EFB5 */
+      '?', /* EFB6 */
+      '?', /* EFB7 */
+      '?', /* EFB8 */
+      '?', /* EFB9 */
+      '?', /* EFBA */
+      '?', /* EFBB */
+      '?', /* EFBC */
+      '?', /* EFBD */
+      '?', /* EFBE */
+      '?', /* EFBF */
+      '?', /* EFC0 */
+      '?', /* EFC1 */
+      '?', /* EFC2 */
+      '?', /* EFC3 */
+      '?', /* EFC4 */
+      '?', /* EFC5 */
+      '?', /* EFC6 */
+      '?', /* EFC7 */
+      '?', /* EFC8 */
+      '?', /* EFC9 */
+      '?', /* EFCA */
+      '?', /* EFCB */
+      '?', /* EFCC */
+      '?', /* EFCD */
+      '?', /* EFCE */
+      '?', /* EFCF */
+      '?', /* EFD0 */
+      '?', /* EFD1 */
+      '?', /* EFD2 */
+      '?', /* EFD3 */
+      '?', /* EFD4 */
+      '?', /* EFD5 */
+      '?', /* EFD6 */
+      '?', /* EFD7 */
+      '?', /* EFD8 */
+      '?', /* EFD9 */
+      '?', /* EFDA */
+      '?', /* EFDB */
+      '?', /* EFDC */
+      '?', /* EFDD */
+      '?', /* EFDE */
+      '?', /* EFDF */
+      '?', /* EFE0 */
+      '?', /* EFE1 */
+      '?', /* EFE2 */
+      '?', /* EFE3 */
+      '?', /* EFE4 */
+      '?', /* EFE5 */
+      '?', /* EFE6 */
+      '?', /* EFE7 */
+      '?', /* EFE8 */
+      '?', /* EFE9 */
+      '?', /* EFEA */
+      '?', /* EFEB */
+      '?', /* EFEC */
+      '?', /* EFED */
+      '?', /* EFEE */
+      '?', /* EFEF */
+      '?', /* EFF0 */
+      '?', /* EFF1 */
+      '?', /* EFF2 */
+      '?', /* EFF3 */
+      '?', /* EFF4 */
+      '?', /* EFF5 */
+      '?', /* EFF6 */
+      '?', /* EFF7 */
+      '?', /* EFF8 */
+      '?', /* EFF9 */
+      '?', /* EFFA */
+      '?', /* EFFB */
+      '?', /* EFFC */
+      '?', /* F040 */
+      '?', /* F041 */
+      '?', /* F042 */
+      '?', /* F043 */
+      '?', /* F044 */
+      '?', /* F045 */
+      '?', /* F046 */
+      '?', /* F047 */
+      '?', /* F048 */
+      '?', /* F049 */
+      '?', /* F04A */
+      '?', /* F04B */
+      '?', /* F04C */
+      '?', /* F04D */
+      '?', /* F04E */
+      '?', /* F04F */
+      '?', /* F050 */
+      '?', /* F051 */
+      '?', /* F052 */
+      '?', /* F053 */
+      '?', /* F054 */
+      '?', /* F055 */
+      '?', /* F056 */
+      '?', /* F057 */
+      '?', /* F058 */
+      '?', /* F059 */
+      '?', /* F05A */
+      '?', /* F05B */
+      '?', /* F05C */
+      '?', /* F05D */
+      '?', /* F05E */
+      '?', /* F05F */
+      '?', /* F060 */
+      '?', /* F061 */
+      '?', /* F062 */
+      '?', /* F063 */
+      '?', /* F064 */
+      '?', /* F065 */
+      '?', /* F066 */
+      '?', /* F067 */
+      '?', /* F068 */
+      '?', /* F069 */
+      '?', /* F06A */
+      '?', /* F06B */
+      '?', /* F06C */
+      '?', /* F06D */
+      '?', /* F06E */
+      '?', /* F06F */
+      '?', /* F070 */
+      '?', /* F071 */
+      '?', /* F072 */
+      '?', /* F073 */
+      '?', /* F074 */
+      '?', /* F075 */
+      '?', /* F076 */
+      '?', /* F077 */
+      '?', /* F078 */
+      '?', /* F079 */
+      '?', /* F07A */
+      '?', /* F07B */
+      '?', /* F07C */
+      '?', /* F07D */
+      '?', /* F07E */
+      '?', /* F080 */
+      '?', /* F081 */
+      '?', /* F082 */
+      '?', /* F083 */
+      '?', /* F084 */
+      '?', /* F085 */
+      '?', /* F086 */
+      '?', /* F087 */
+      '?', /* F088 */
+      '?', /* F089 */
+      '?', /* F08A */
+      '?', /* F08B */
+      '?', /* F08C */
+      '?', /* F08D */
+      '?', /* F08E */
+      '?', /* F08F */
+      '?', /* F090 */
+      '?', /* F091 */
+      '?', /* F092 */
+      '?', /* F093 */
+      '?', /* F094 */
+      '?', /* F095 */
+      '?', /* F096 */
+      '?', /* F097 */
+      '?', /* F098 */
+      '?', /* F099 */
+      '?', /* F09A */
+      '?', /* F09B */
+      '?', /* F09C */
+      '?', /* F09D */
+      '?', /* F09E */
+      '?', /* F09F */
+      '?', /* F0A0 */
+      '?', /* F0A1 */
+      '?', /* F0A2 */
+      '?', /* F0A3 */
+      '?', /* F0A4 */
+      '?', /* F0A5 */
+      '?', /* F0A6 */
+      '?', /* F0A7 */
+      '?', /* F0A8 */
+      '?', /* F0A9 */
+      '?', /* F0AA */
+      '?', /* F0AB */
+      '?', /* F0AC */
+      '?', /* F0AD */
+      '?', /* F0AE */
+      '?', /* F0AF */
+      '?', /* F0B0 */
+      '?', /* F0B1 */
+      '?', /* F0B2 */
+      '?', /* F0B3 */
+      '?', /* F0B4 */
+      '?', /* F0B5 */
+      '?', /* F0B6 */
+      '?', /* F0B7 */
+      '?', /* F0B8 */
+      '?', /* F0B9 */
+      '?', /* F0BA */
+      '?', /* F0BB */
+      '?', /* F0BC */
+      '?', /* F0BD */
+      '?', /* F0BE */
+      '?', /* F0BF */
+      '?', /* F0C0 */
+      '?', /* F0C1 */
+      '?', /* F0C2 */
+      '?', /* F0C3 */
+      '?', /* F0C4 */
+      '?', /* F0C5 */
+      '?', /* F0C6 */
+      '?', /* F0C7 */
+      '?', /* F0C8 */
+      '?', /* F0C9 */
+      '?', /* F0CA */
+      '?', /* F0CB */
+      '?', /* F0CC */
+      '?', /* F0CD */
+      '?', /* F0CE */
+      '?', /* F0CF */
+      '?', /* F0D0 */
+      '?', /* F0D1 */
+      '?', /* F0D2 */
+      '?', /* F0D3 */
+      '?', /* F0D4 */
+      '?', /* F0D5 */
+      '?', /* F0D6 */
+      '?', /* F0D7 */
+      '?', /* F0D8 */
+      '?', /* F0D9 */
+      '?', /* F0DA */
+      '?', /* F0DB */
+      '?', /* F0DC */
+      '?', /* F0DD */
+      '?', /* F0DE */
+      '?', /* F0DF */
+      '?', /* F0E0 */
+      '?', /* F0E1 */
+      '?', /* F0E2 */
+      '?', /* F0E3 */
+      '?', /* F0E4 */
+      '?', /* F0E5 */
+      '?', /* F0E6 */
+      '?', /* F0E7 */
+      '?', /* F0E8 */
+      '?', /* F0E9 */
+      '?', /* F0EA */
+      '?', /* F0EB */
+      '?', /* F0EC */
+      '?', /* F0ED */
+      '?', /* F0EE */
+      '?', /* F0EF */
+      '?', /* F0F0 */
+      '?', /* F0F1 */
+      '?', /* F0F2 */
+      '?', /* F0F3 */
+      '?', /* F0F4 */
+      '?', /* F0F5 */
+      '?', /* F0F6 */
+      '?', /* F0F7 */
+      '?', /* F0F8 */
+      '?', /* F0F9 */
+      '?', /* F0FA */
+      '?', /* F0FB */
+      '?', /* F0FC */
+      '?', /* F140 */
+      '?', /* F141 */
+      '?', /* F142 */
+      '?', /* F143 */
+      '?', /* F144 */
+      '?', /* F145 */
+      '?', /* F146 */
+      '?', /* F147 */
+      '?', /* F148 */
+      '?', /* F149 */
+      '?', /* F14A */
+      '?', /* F14B */
+      '?', /* F14C */
+      '?', /* F14D */
+      '?', /* F14E */
+      '?', /* F14F */
+      '?', /* F150 */
+      '?', /* F151 */
+      '?', /* F152 */
+      '?', /* F153 */
+      '?', /* F154 */
+      '?', /* F155 */
+      '?', /* F156 */
+      '?', /* F157 */
+      '?', /* F158 */
+      '?', /* F159 */
+      '?', /* F15A */
+      '?', /* F15B */
+      '?', /* F15C */
+      '?', /* F15D */
+      '?', /* F15E */
+      '?', /* F15F */
+      '?', /* F160 */
+      '?', /* F161 */
+      '?', /* F162 */
+      '?', /* F163 */
+      '?', /* F164 */
+      '?', /* F165 */
+      '?', /* F166 */
+      '?', /* F167 */
+      '?', /* F168 */
+      '?', /* F169 */
+      '?', /* F16A */
+      '?', /* F16B */
+      '?', /* F16C */
+      '?', /* F16D */
+      '?', /* F16E */
+      '?', /* F16F */
+      '?', /* F170 */
+      '?', /* F171 */
+      '?', /* F172 */
+      '?', /* F173 */
+      '?', /* F174 */
+      '?', /* F175 */
+      '?', /* F176 */
+      '?', /* F177 */
+      '?', /* F178 */
+      '?', /* F179 */
+      '?', /* F17A */
+      '?', /* F17B */
+      '?', /* F17C */
+      '?', /* F17D */
+      '?', /* F17E */
+      '?', /* F180 */
+      '?', /* F181 */
+      '?', /* F182 */
+      '?', /* F183 */
+      '?', /* F184 */
+      '?', /* F185 */
+      '?', /* F186 */
+      '?', /* F187 */
+      '?', /* F188 */
+      '?', /* F189 */
+      '?', /* F18A */
+      '?', /* F18B */
+      '?', /* F18C */
+      '?', /* F18D */
+      '?', /* F18E */
+      '?', /* F18F */
+      '?', /* F190 */
+      '?', /* F191 */
+      '?', /* F192 */
+      '?', /* F193 */
+      '?', /* F194 */
+      '?', /* F195 */
+      '?', /* F196 */
+      '?', /* F197 */
+      '?', /* F198 */
+      '?', /* F199 */
+      '?', /* F19A */
+      '?', /* F19B */
+      '?', /* F19C */
+      '?', /* F19D */
+      '?', /* F19E */
+      '?', /* F19F */
+      '?', /* F1A0 */
+      '?', /* F1A1 */
+      '?', /* F1A2 */
+      '?', /* F1A3 */
+      '?', /* F1A4 */
+      '?', /* F1A5 */
+      '?', /* F1A6 */
+      '?', /* F1A7 */
+      '?', /* F1A8 */
+      '?', /* F1A9 */
+      '?', /* F1AA */
+      '?', /* F1AB */
+      '?', /* F1AC */
+      '?', /* F1AD */
+      '?', /* F1AE */
+      '?', /* F1AF */
+      '?', /* F1B0 */
+      '?', /* F1B1 */
+      '?', /* F1B2 */
+      '?', /* F1B3 */
+      '?', /* F1B4 */
+      '?', /* F1B5 */
+      '?', /* F1B6 */
+      '?', /* F1B7 */
+      '?', /* F1B8 */
+      '?', /* F1B9 */
+      '?', /* F1BA */
+      '?', /* F1BB */
+      '?', /* F1BC */
+      '?', /* F1BD */
+      '?', /* F1BE */
+      '?', /* F1BF */
+      '?', /* F1C0 */
+      '?', /* F1C1 */
+      '?', /* F1C2 */
+      '?', /* F1C3 */
+      '?', /* F1C4 */
+      '?', /* F1C5 */
+      '?', /* F1C6 */
+      '?', /* F1C7 */
+      '?', /* F1C8 */
+      '?', /* F1C9 */
+      '?', /* F1CA */
+      '?', /* F1CB */
+      '?', /* F1CC */
+      '?', /* F1CD */
+      '?', /* F1CE */
+      '?', /* F1CF */
+      '?', /* F1D0 */
+      '?', /* F1D1 */
+      '?', /* F1D2 */
+      '?', /* F1D3 */
+      '?', /* F1D4 */
+      '?', /* F1D5 */
+      '?', /* F1D6 */
+      '?', /* F1D7 */
+      '?', /* F1D8 */
+      '?', /* F1D9 */
+      '?', /* F1DA */
+      '?', /* F1DB */
+      '?', /* F1DC */
+      '?', /* F1DD */
+      '?', /* F1DE */
+      '?', /* F1DF */
+      '?', /* F1E0 */
+      '?', /* F1E1 */
+      '?', /* F1E2 */
+      '?', /* F1E3 */
+      '?', /* F1E4 */
+      '?', /* F1E5 */
+      '?', /* F1E6 */
+      '?', /* F1E7 */
+      '?', /* F1E8 */
+      '?', /* F1E9 */
+      '?', /* F1EA */
+      '?', /* F1EB */
+      '?', /* F1EC */
+      '?', /* F1ED */
+      '?', /* F1EE */
+      '?', /* F1EF */
+      '?', /* F1F0 */
+      '?', /* F1F1 */
+      '?', /* F1F2 */
+      '?', /* F1F3 */
+      '?', /* F1F4 */
+      '?', /* F1F5 */
+      '?', /* F1F6 */
+      '?', /* F1F7 */
+      '?', /* F1F8 */
+      '?', /* F1F9 */
+      '?', /* F1FA */
+      '?', /* F1FB */
+      '?', /* F1FC */
+      '?', /* F240 */
+      '?', /* F241 */
+      '?', /* F242 */
+      '?', /* F243 */
+      '?', /* F244 */
+      '?', /* F245 */
+      '?', /* F246 */
+      '?', /* F247 */
+      '?', /* F248 */
+      '?', /* F249 */
+      '?', /* F24A */
+      '?', /* F24B */
+      '?', /* F24C */
+      '?', /* F24D */
+      '?', /* F24E */
+      '?', /* F24F */
+      '?', /* F250 */
+      '?', /* F251 */
+      '?', /* F252 */
+      '?', /* F253 */
+      '?', /* F254 */
+      '?', /* F255 */
+      '?', /* F256 */
+      '?', /* F257 */
+      '?', /* F258 */
+      '?', /* F259 */
+      '?', /* F25A */
+      '?', /* F25B */
+      '?', /* F25C */
+      '?', /* F25D */
+      '?', /* F25E */
+      '?', /* F25F */
+      '?', /* F260 */
+      '?', /* F261 */
+      '?', /* F262 */
+      '?', /* F263 */
+      '?', /* F264 */
+      '?', /* F265 */
+      '?', /* F266 */
+      '?', /* F267 */
+      '?', /* F268 */
+      '?', /* F269 */
+      '?', /* F26A */
+      '?', /* F26B */
+      '?', /* F26C */
+      '?', /* F26D */
+      '?', /* F26E */
+      '?', /* F26F */
+      '?', /* F270 */
+      '?', /* F271 */
+      '?', /* F272 */
+      '?', /* F273 */
+      '?', /* F274 */
+      '?', /* F275 */
+      '?', /* F276 */
+      '?', /* F277 */
+      '?', /* F278 */
+      '?', /* F279 */
+      '?', /* F27A */
+      '?', /* F27B */
+      '?', /* F27C */
+      '?', /* F27D */
+      '?', /* F27E */
+      '?', /* F280 */
+      '?', /* F281 */
+      '?', /* F282 */
+      '?', /* F283 */
+      '?', /* F284 */
+      '?', /* F285 */
+      '?', /* F286 */
+      '?', /* F287 */
+      '?', /* F288 */
+      '?', /* F289 */
+      '?', /* F28A */
+      '?', /* F28B */
+      '?', /* F28C */
+      '?', /* F28D */
+      '?', /* F28E */
+      '?', /* F28F */
+      '?', /* F290 */
+      '?', /* F291 */
+      '?', /* F292 */
+      '?', /* F293 */
+      '?', /* F294 */
+      '?', /* F295 */
+      '?', /* F296 */
+      '?', /* F297 */
+      '?', /* F298 */
+      '?', /* F299 */
+      '?', /* F29A */
+      '?', /* F29B */
+      '?', /* F29C */
+      '?', /* F29D */
+      '?', /* F29E */
+      '?', /* F29F */
+      '?', /* F2A0 */
+      '?', /* F2A1 */
+      '?', /* F2A2 */
+      '?', /* F2A3 */
+      '?', /* F2A4 */
+      '?', /* F2A5 */
+      '?', /* F2A6 */
+      '?', /* F2A7 */
+      '?', /* F2A8 */
+      '?', /* F2A9 */
+      '?', /* F2AA */
+      '?', /* F2AB */
+      '?', /* F2AC */
+      '?', /* F2AD */
+      '?', /* F2AE */
+      '?', /* F2AF */
+      '?', /* F2B0 */
+      '?', /* F2B1 */
+      '?', /* F2B2 */
+      '?', /* F2B3 */
+      '?', /* F2B4 */
+      '?', /* F2B5 */
+      '?', /* F2B6 */
+      '?', /* F2B7 */
+      '?', /* F2B8 */
+      '?', /* F2B9 */
+      '?', /* F2BA */
+      '?', /* F2BB */
+      '?', /* F2BC */
+      '?', /* F2BD */
+      '?', /* F2BE */
+      '?', /* F2BF */
+      '?', /* F2C0 */
+      '?', /* F2C1 */
+      '?', /* F2C2 */
+      '?', /* F2C3 */
+      '?', /* F2C4 */
+      '?', /* F2C5 */
+      '?', /* F2C6 */
+      '?', /* F2C7 */
+      '?', /* F2C8 */
+      '?', /* F2C9 */
+      '?', /* F2CA */
+      '?', /* F2CB */
+      '?', /* F2CC */
+      '?', /* F2CD */
+      '?', /* F2CE */
+      '?', /* F2CF */
+      '?', /* F2D0 */
+      '?', /* F2D1 */
+      '?', /* F2D2 */
+      '?', /* F2D3 */
+      '?', /* F2D4 */
+      '?', /* F2D5 */
+      '?', /* F2D6 */
+      '?', /* F2D7 */
+      '?', /* F2D8 */
+      '?', /* F2D9 */
+      '?', /* F2DA */
+      '?', /* F2DB */
+      '?', /* F2DC */
+      '?', /* F2DD */
+      '?', /* F2DE */
+      '?', /* F2DF */
+      '?', /* F2E0 */
+      '?', /* F2E1 */
+      '?', /* F2E2 */
+      '?', /* F2E3 */
+      '?', /* F2E4 */
+      '?', /* F2E5 */
+      '?', /* F2E6 */
+      '?', /* F2E7 */
+      '?', /* F2E8 */
+      '?', /* F2E9 */
+      '?', /* F2EA */
+      '?', /* F2EB */
+      '?', /* F2EC */
+      '?', /* F2ED */
+      '?', /* F2EE */
+      '?', /* F2EF */
+      '?', /* F2F0 */
+      '?', /* F2F1 */
+      '?', /* F2F2 */
+      '?', /* F2F3 */
+      '?', /* F2F4 */
+      '?', /* F2F5 */
+      '?', /* F2F6 */
+      '?', /* F2F7 */
+      '?', /* F2F8 */
+      '?', /* F2F9 */
+      '?', /* F2FA */
+      '?', /* F2FB */
+      '?', /* F2FC */
+      '?', /* F340 */
+      '?', /* F341 */
+      '?', /* F342 */
+      '?', /* F343 */
+      '?', /* F344 */
+      '?', /* F345 */
+      '?', /* F346 */
+      '?', /* F347 */
+      '?', /* F348 */
+      '?', /* F349 */
+      '?', /* F34A */
+      '?', /* F34B */
+      '?', /* F34C */
+      '?', /* F34D */
+      '?', /* F34E */
+      '?', /* F34F */
+      '?', /* F350 */
+      '?', /* F351 */
+      '?', /* F352 */
+      '?', /* F353 */
+      '?', /* F354 */
+      '?', /* F355 */
+      '?', /* F356 */
+      '?', /* F357 */
+      '?', /* F358 */
+      '?', /* F359 */
+      '?', /* F35A */
+      '?', /* F35B */
+      '?', /* F35C */
+      '?', /* F35D */
+      '?', /* F35E */
+      '?', /* F35F */
+      '?', /* F360 */
+      '?', /* F361 */
+      '?', /* F362 */
+      '?', /* F363 */
+      '?', /* F364 */
+      '?', /* F365 */
+      '?', /* F366 */
+      '?', /* F367 */
+      '?', /* F368 */
+      '?', /* F369 */
+      '?', /* F36A */
+      '?', /* F36B */
+      '?', /* F36C */
+      '?', /* F36D */
+      '?', /* F36E */
+      '?', /* F36F */
+      '?', /* F370 */
+      '?', /* F371 */
+      '?', /* F372 */
+      '?', /* F373 */
+      '?', /* F374 */
+      '?', /* F375 */
+      '?', /* F376 */
+      '?', /* F377 */
+      '?', /* F378 */
+      '?', /* F379 */
+      '?', /* F37A */
+      '?', /* F37B */
+      '?', /* F37C */
+      '?', /* F37D */
+      '?', /* F37E */
+      '?', /* F380 */
+      '?', /* F381 */
+      '?', /* F382 */
+      '?', /* F383 */
+      '?', /* F384 */
+      '?', /* F385 */
+      '?', /* F386 */
+      '?', /* F387 */
+      '?', /* F388 */
+      '?', /* F389 */
+      '?', /* F38A */
+      '?', /* F38B */
+      '?', /* F38C */
+      '?', /* F38D */
+      '?', /* F38E */
+      '?', /* F38F */
+      '?', /* F390 */
+      '?', /* F391 */
+      '?', /* F392 */
+      '?', /* F393 */
+      '?', /* F394 */
+      '?', /* F395 */
+      '?', /* F396 */
+      '?', /* F397 */
+      '?', /* F398 */
+      '?', /* F399 */
+      '?', /* F39A */
+      '?', /* F39B */
+      '?', /* F39C */
+      '?', /* F39D */
+      '?', /* F39E */
+      '?', /* F39F */
+      '?', /* F3A0 */
+      '?', /* F3A1 */
+      '?', /* F3A2 */
+      '?', /* F3A3 */
+      '?', /* F3A4 */
+      '?', /* F3A5 */
+      '?', /* F3A6 */
+      '?', /* F3A7 */
+      '?', /* F3A8 */
+      '?', /* F3A9 */
+      '?', /* F3AA */
+      '?', /* F3AB */
+      '?', /* F3AC */
+      '?', /* F3AD */
+      '?', /* F3AE */
+      '?', /* F3AF */
+      '?', /* F3B0 */
+      '?', /* F3B1 */
+      '?', /* F3B2 */
+      '?', /* F3B3 */
+      '?', /* F3B4 */
+      '?', /* F3B5 */
+      '?', /* F3B6 */
+      '?', /* F3B7 */
+      '?', /* F3B8 */
+      '?', /* F3B9 */
+      '?', /* F3BA */
+      '?', /* F3BB */
+      '?', /* F3BC */
+      '?', /* F3BD */
+      '?', /* F3BE */
+      '?', /* F3BF */
+      '?', /* F3C0 */
+      '?', /* F3C1 */
+      '?', /* F3C2 */
+      '?', /* F3C3 */
+      '?', /* F3C4 */
+      '?', /* F3C5 */
+      '?', /* F3C6 */
+      '?', /* F3C7 */
+      '?', /* F3C8 */
+      '?', /* F3C9 */
+      '?', /* F3CA */
+      '?', /* F3CB */
+      '?', /* F3CC */
+      '?', /* F3CD */
+      '?', /* F3CE */
+      '?', /* F3CF */
+      '?', /* F3D0 */
+      '?', /* F3D1 */
+      '?', /* F3D2 */
+      '?', /* F3D3 */
+      '?', /* F3D4 */
+      '?', /* F3D5 */
+      '?', /* F3D6 */
+      '?', /* F3D7 */
+      '?', /* F3D8 */
+      '?', /* F3D9 */
+      '?', /* F3DA */
+      '?', /* F3DB */
+      '?', /* F3DC */
+      '?', /* F3DD */
+      '?', /* F3DE */
+      '?', /* F3DF */
+      '?', /* F3E0 */
+      '?', /* F3E1 */
+      '?', /* F3E2 */
+      '?', /* F3E3 */
+      '?', /* F3E4 */
+      '?', /* F3E5 */
+      '?', /* F3E6 */
+      '?', /* F3E7 */
+      '?', /* F3E8 */
+      '?', /* F3E9 */
+      '?', /* F3EA */
+      '?', /* F3EB */
+      '?', /* F3EC */
+      '?', /* F3ED */
+      '?', /* F3EE */
+      '?', /* F3EF */
+      '?', /* F3F0 */
+      '?', /* F3F1 */
+      '?', /* F3F2 */
+      '?', /* F3F3 */
+      '?', /* F3F4 */
+      '?', /* F3F5 */
+      '?', /* F3F6 */
+      '?', /* F3F7 */
+      '?', /* F3F8 */
+      '?', /* F3F9 */
+      '?', /* F3FA */
+      '?', /* F3FB */
+      '?', /* F3FC */
+      '?', /* F440 */
+      '?', /* F441 */
+      '?', /* F442 */
+      '?', /* F443 */
+      '?', /* F444 */
+      '?', /* F445 */
+      '?', /* F446 */
+      '?', /* F447 */
+      '?', /* F448 */
+      '?', /* F449 */
+      '?', /* F44A */
+      '?', /* F44B */
+      '?', /* F44C */
+      '?', /* F44D */
+      '?', /* F44E */
+      '?', /* F44F */
+      '?', /* F450 */
+      '?', /* F451 */
+      '?', /* F452 */
+      '?', /* F453 */
+      '?', /* F454 */
+      '?', /* F455 */
+      '?', /* F456 */
+      '?', /* F457 */
+      '?', /* F458 */
+      '?', /* F459 */
+      '?', /* F45A */
+      '?', /* F45B */
+      '?', /* F45C */
+      '?', /* F45D */
+      '?', /* F45E */
+      '?', /* F45F */
+      '?', /* F460 */
+      '?', /* F461 */
+      '?', /* F462 */
+      '?', /* F463 */
+      '?', /* F464 */
+      '?', /* F465 */
+      '?', /* F466 */
+      '?', /* F467 */
+      '?', /* F468 */
+      '?', /* F469 */
+      '?', /* F46A */
+      '?', /* F46B */
+      '?', /* F46C */
+      '?', /* F46D */
+      '?', /* F46E */
+      '?', /* F46F */
+      '?', /* F470 */
+      '?', /* F471 */
+      '?', /* F472 */
+      '?', /* F473 */
+      '?', /* F474 */
+      '?', /* F475 */
+      '?', /* F476 */
+      '?', /* F477 */
+      '?', /* F478 */
+      '?', /* F479 */
+      '?', /* F47A */
+      '?', /* F47B */
+      '?', /* F47C */
+      '?', /* F47D */
+      '?', /* F47E */
+      '?', /* F480 */
+      '?', /* F481 */
+      '?', /* F482 */
+      '?', /* F483 */
+      '?', /* F484 */
+      '?', /* F485 */
+      '?', /* F486 */
+      '?', /* F487 */
+      '?', /* F488 */
+      '?', /* F489 */
+      '?', /* F48A */
+      '?', /* F48B */
+      '?', /* F48C */
+      '?', /* F48D */
+      '?', /* F48E */
+      '?', /* F48F */
+      '?', /* F490 */
+      '?', /* F491 */
+      '?', /* F492 */
+      '?', /* F493 */
+      '?', /* F494 */
+      '?', /* F495 */
+      '?', /* F496 */
+      '?', /* F497 */
+      '?', /* F498 */
+      '?', /* F499 */
+      '?', /* F49A */
+      '?', /* F49B */
+      '?', /* F49C */
+      '?', /* F49D */
+      '?', /* F49E */
+      '?', /* F49F */
+      '?', /* F4A0 */
+      '?', /* F4A1 */
+      '?', /* F4A2 */
+      '?', /* F4A3 */
+      '?', /* F4A4 */
+      '?', /* F4A5 */
+      '?', /* F4A6 */
+      '?', /* F4A7 */
+      '?', /* F4A8 */
+      '?', /* F4A9 */
+      '?', /* F4AA */
+      '?', /* F4AB */
+      '?', /* F4AC */
+      '?', /* F4AD */
+      '?', /* F4AE */
+      '?', /* F4AF */
+      '?', /* F4B0 */
+      '?', /* F4B1 */
+      '?', /* F4B2 */
+      '?', /* F4B3 */
+      '?', /* F4B4 */
+      '?', /* F4B5 */
+      '?', /* F4B6 */
+      '?', /* F4B7 */
+      '?', /* F4B8 */
+      '?', /* F4B9 */
+      '?', /* F4BA */
+      '?', /* F4BB */
+      '?', /* F4BC */
+      '?', /* F4BD */
+      '?', /* F4BE */
+      '?', /* F4BF */
+      '?', /* F4C0 */
+      '?', /* F4C1 */
+      '?', /* F4C2 */
+      '?', /* F4C3 */
+      '?', /* F4C4 */
+      '?', /* F4C5 */
+      '?', /* F4C6 */
+      '?', /* F4C7 */
+      '?', /* F4C8 */
+      '?', /* F4C9 */
+      '?', /* F4CA */
+      '?', /* F4CB */
+      '?', /* F4CC */
+      '?', /* F4CD */
+      '?', /* F4CE */
+      '?', /* F4CF */
+      '?', /* F4D0 */
+      '?', /* F4D1 */
+      '?', /* F4D2 */
+      '?', /* F4D3 */
+      '?', /* F4D4 */
+      '?', /* F4D5 */
+      '?', /* F4D6 */
+      '?', /* F4D7 */
+      '?', /* F4D8 */
+      '?', /* F4D9 */
+      '?', /* F4DA */
+      '?', /* F4DB */
+      '?', /* F4DC */
+      '?', /* F4DD */
+      '?', /* F4DE */
+      '?', /* F4DF */
+      '?', /* F4E0 */
+      '?', /* F4E1 */
+      '?', /* F4E2 */
+      '?', /* F4E3 */
+      '?', /* F4E4 */
+      '?', /* F4E5 */
+      '?', /* F4E6 */
+      '?', /* F4E7 */
+      '?', /* F4E8 */
+      '?', /* F4E9 */
+      '?', /* F4EA */
+      '?', /* F4EB */
+      '?', /* F4EC */
+      '?', /* F4ED */
+      '?', /* F4EE */
+      '?', /* F4EF */
+      '?', /* F4F0 */
+      '?', /* F4F1 */
+      '?', /* F4F2 */
+      '?', /* F4F3 */
+      '?', /* F4F4 */
+      '?', /* F4F5 */
+      '?', /* F4F6 */
+      '?', /* F4F7 */
+      '?', /* F4F8 */
+      '?', /* F4F9 */
+      '?', /* F4FA */
+      '?', /* F4FB */
+      '?', /* F4FC */
+      '?', /* F540 */
+      '?', /* F541 */
+      '?', /* F542 */
+      '?', /* F543 */
+      '?', /* F544 */
+      '?', /* F545 */
+      '?', /* F546 */
+      '?', /* F547 */
+      '?', /* F548 */
+      '?', /* F549 */
+      '?', /* F54A */
+      '?', /* F54B */
+      '?', /* F54C */
+      '?', /* F54D */
+      '?', /* F54E */
+      '?', /* F54F */
+      '?', /* F550 */
+      '?', /* F551 */
+      '?', /* F552 */
+      '?', /* F553 */
+      '?', /* F554 */
+      '?', /* F555 */
+      '?', /* F556 */
+      '?', /* F557 */
+      '?', /* F558 */
+      '?', /* F559 */
+      '?', /* F55A */
+      '?', /* F55B */
+      '?', /* F55C */
+      '?', /* F55D */
+      '?', /* F55E */
+      '?', /* F55F */
+      '?', /* F560 */
+      '?', /* F561 */
+      '?', /* F562 */
+      '?', /* F563 */
+      '?', /* F564 */
+      '?', /* F565 */
+      '?', /* F566 */
+      '?', /* F567 */
+      '?', /* F568 */
+      '?', /* F569 */
+      '?', /* F56A */
+      '?', /* F56B */
+      '?', /* F56C */
+      '?', /* F56D */
+      '?', /* F56E */
+      '?', /* F56F */
+      '?', /* F570 */
+      '?', /* F571 */
+      '?', /* F572 */
+      '?', /* F573 */
+      '?', /* F574 */
+      '?', /* F575 */
+      '?', /* F576 */
+      '?', /* F577 */
+      '?', /* F578 */
+      '?', /* F579 */
+      '?', /* F57A */
+      '?', /* F57B */
+      '?', /* F57C */
+      '?', /* F57D */
+      '?', /* F57E */
+      '?', /* F580 */
+      '?', /* F581 */
+      '?', /* F582 */
+      '?', /* F583 */
+      '?', /* F584 */
+      '?', /* F585 */
+      '?', /* F586 */
+      '?', /* F587 */
+      '?', /* F588 */
+      '?', /* F589 */
+      '?', /* F58A */
+      '?', /* F58B */
+      '?', /* F58C */
+      '?', /* F58D */
+      '?', /* F58E */
+      '?', /* F58F */
+      '?', /* F590 */
+      '?', /* F591 */
+      '?', /* F592 */
+      '?', /* F593 */
+      '?', /* F594 */
+      '?', /* F595 */
+      '?', /* F596 */
+      '?', /* F597 */
+      '?', /* F598 */
+      '?', /* F599 */
+      '?', /* F59A */
+      '?', /* F59B */
+      '?', /* F59C */
+      '?', /* F59D */
+      '?', /* F59E */
+      '?', /* F59F */
+      '?', /* F5A0 */
+      '?', /* F5A1 */
+      '?', /* F5A2 */
+      '?', /* F5A3 */
+      '?', /* F5A4 */
+      '?', /* F5A5 */
+      '?', /* F5A6 */
+      '?', /* F5A7 */
+      '?', /* F5A8 */
+      '?', /* F5A9 */
+      '?', /* F5AA */
+      '?', /* F5AB */
+      '?', /* F5AC */
+      '?', /* F5AD */
+      '?', /* F5AE */
+      '?', /* F5AF */
+      '?', /* F5B0 */
+      '?', /* F5B1 */
+      '?', /* F5B2 */
+      '?', /* F5B3 */
+      '?', /* F5B4 */
+      '?', /* F5B5 */
+      '?', /* F5B6 */
+      '?', /* F5B7 */
+      '?', /* F5B8 */
+      '?', /* F5B9 */
+      '?', /* F5BA */
+      '?', /* F5BB */
+      '?', /* F5BC */
+      '?', /* F5BD */
+      '?', /* F5BE */
+      '?', /* F5BF */
+      '?', /* F5C0 */
+      '?', /* F5C1 */
+      '?', /* F5C2 */
+      '?', /* F5C3 */
+      '?', /* F5C4 */
+      '?', /* F5C5 */
+      '?', /* F5C6 */
+      '?', /* F5C7 */
+      '?', /* F5C8 */
+      '?', /* F5C9 */
+      '?', /* F5CA */
+      '?', /* F5CB */
+      '?', /* F5CC */
+      '?', /* F5CD */
+      '?', /* F5CE */
+      '?', /* F5CF */
+      '?', /* F5D0 */
+      '?', /* F5D1 */
+      '?', /* F5D2 */
+      '?', /* F5D3 */
+      '?', /* F5D4 */
+      '?', /* F5D5 */
+      '?', /* F5D6 */
+      '?', /* F5D7 */
+      '?', /* F5D8 */
+      '?', /* F5D9 */
+      '?', /* F5DA */
+      '?', /* F5DB */
+      '?', /* F5DC */
+      '?', /* F5DD */
+      '?', /* F5DE */
+      '?', /* F5DF */
+      '?', /* F5E0 */
+      '?', /* F5E1 */
+      '?', /* F5E2 */
+      '?', /* F5E3 */
+      '?', /* F5E4 */
+      '?', /* F5E5 */
+      '?', /* F5E6 */
+      '?', /* F5E7 */
+      '?', /* F5E8 */
+      '?', /* F5E9 */
+      '?', /* F5EA */
+      '?', /* F5EB */
+      '?', /* F5EC */
+      '?', /* F5ED */
+      '?', /* F5EE */
+      '?', /* F5EF */
+      '?', /* F5F0 */
+      '?', /* F5F1 */
+      '?', /* F5F2 */
+      '?', /* F5F3 */
+      '?', /* F5F4 */
+      '?', /* F5F5 */
+      '?', /* F5F6 */
+      '?', /* F5F7 */
+      '?', /* F5F8 */
+      '?', /* F5F9 */
+      '?', /* F5FA */
+      '?', /* F5FB */
+      '?', /* F5FC */
+      '?', /* F640 */
+      '?', /* F641 */
+      '?', /* F642 */
+      '?', /* F643 */
+      '?', /* F644 */
+      '?', /* F645 */
+      '?', /* F646 */
+      '?', /* F647 */
+      '?', /* F648 */
+      '?', /* F649 */
+      '?', /* F64A */
+      '?', /* F64B */
+      '?', /* F64C */
+      '?', /* F64D */
+      '?', /* F64E */
+      '?', /* F64F */
+      '?', /* F650 */
+      '?', /* F651 */
+      '?', /* F652 */
+      '?', /* F653 */
+      '?', /* F654 */
+      '?', /* F655 */
+      '?', /* F656 */
+      '?', /* F657 */
+      '?', /* F658 */
+      '?', /* F659 */
+      '?', /* F65A */
+      '?', /* F65B */
+      '?', /* F65C */
+      '?', /* F65D */
+      '?', /* F65E */
+      '?', /* F65F */
+      '?', /* F660 */
+      '?', /* F661 */
+      '?', /* F662 */
+      '?', /* F663 */
+      '?', /* F664 */
+      '?', /* F665 */
+      '?', /* F666 */
+      '?', /* F667 */
+      '?', /* F668 */
+      '?', /* F669 */
+      '?', /* F66A */
+      '?', /* F66B */
+      '?', /* F66C */
+      '?', /* F66D */
+      '?', /* F66E */
+      '?', /* F66F */
+      '?', /* F670 */
+      '?', /* F671 */
+      '?', /* F672 */
+      '?', /* F673 */
+      '?', /* F674 */
+      '?', /* F675 */
+      '?', /* F676 */
+      '?', /* F677 */
+      '?', /* F678 */
+      '?', /* F679 */
+      '?', /* F67A */
+      '?', /* F67B */
+      '?', /* F67C */
+      '?', /* F67D */
+      '?', /* F67E */
+      '?', /* F680 */
+      '?', /* F681 */
+      '?', /* F682 */
+      '?', /* F683 */
+      '?', /* F684 */
+      '?', /* F685 */
+      '?', /* F686 */
+      '?', /* F687 */
+      '?', /* F688 */
+      '?', /* F689 */
+      '?', /* F68A */
+      '?', /* F68B */
+      '?', /* F68C */
+      '?', /* F68D */
+      '?', /* F68E */
+      '?', /* F68F */
+      '?', /* F690 */
+      '?', /* F691 */
+      '?', /* F692 */
+      '?', /* F693 */
+      '?', /* F694 */
+      '?', /* F695 */
+      '?', /* F696 */
+      '?', /* F697 */
+      '?', /* F698 */
+      '?', /* F699 */
+      '?', /* F69A */
+      '?', /* F69B */
+      '?', /* F69C */
+      '?', /* F69D */
+      '?', /* F69E */
+      '?', /* F69F */
+      '?', /* F6A0 */
+      '?', /* F6A1 */
+      '?', /* F6A2 */
+      '?', /* F6A3 */
+      '?', /* F6A4 */
+      '?', /* F6A5 */
+      '?', /* F6A6 */
+      '?', /* F6A7 */
+      '?', /* F6A8 */
+      '?', /* F6A9 */
+      '?', /* F6AA */
+      '?', /* F6AB */
+      '?', /* F6AC */
+      '?', /* F6AD */
+      '?', /* F6AE */
+      '?', /* F6AF */
+      '?', /* F6B0 */
+      '?', /* F6B1 */
+      '?', /* F6B2 */
+      '?', /* F6B3 */
+      '?', /* F6B4 */
+      '?', /* F6B5 */
+      '?', /* F6B6 */
+      '?', /* F6B7 */
+      '?', /* F6B8 */
+      '?', /* F6B9 */
+      '?', /* F6BA */
+      '?', /* F6BB */
+      '?', /* F6BC */
+      '?', /* F6BD */
+      '?', /* F6BE */
+      '?', /* F6BF */
+      '?', /* F6C0 */
+      '?', /* F6C1 */
+      '?', /* F6C2 */
+      '?', /* F6C3 */
+      '?', /* F6C4 */
+      '?', /* F6C5 */
+      '?', /* F6C6 */
+      '?', /* F6C7 */
+      '?', /* F6C8 */
+      '?', /* F6C9 */
+      '?', /* F6CA */
+      '?', /* F6CB */
+      '?', /* F6CC */
+      '?', /* F6CD */
+      '?', /* F6CE */
+      '?', /* F6CF */
+      '?', /* F6D0 */
+      '?', /* F6D1 */
+      '?', /* F6D2 */
+      '?', /* F6D3 */
+      '?', /* F6D4 */
+      '?', /* F6D5 */
+      '?', /* F6D6 */
+      '?', /* F6D7 */
+      '?', /* F6D8 */
+      '?', /* F6D9 */
+      '?', /* F6DA */
+      '?', /* F6DB */
+      '?', /* F6DC */
+      '?', /* F6DD */
+      '?', /* F6DE */
+      '?', /* F6DF */
+      '?', /* F6E0 */
+      '?', /* F6E1 */
+      '?', /* F6E2 */
+      '?', /* F6E3 */
+      '?', /* F6E4 */
+      '?', /* F6E5 */
+      '?', /* F6E6 */
+      '?', /* F6E7 */
+      '?', /* F6E8 */
+      '?', /* F6E9 */
+      '?', /* F6EA */
+      '?', /* F6EB */
+      '?', /* F6EC */
+      '?', /* F6ED */
+      '?', /* F6EE */
+      '?', /* F6EF */
+      '?', /* F6F0 */
+      '?', /* F6F1 */
+      '?', /* F6F2 */
+      '?', /* F6F3 */
+      '?', /* F6F4 */
+      '?', /* F6F5 */
+      '?', /* F6F6 */
+      '?', /* F6F7 */
+      '?', /* F6F8 */
+      '?', /* F6F9 */
+      '?', /* F6FA */
+      '?', /* F6FB */
+      '?', /* F6FC */
+      '?', /* F740 */
+      '?', /* F741 */
+      '?', /* F742 */
+      '?', /* F743 */
+      '?', /* F744 */
+      '?', /* F745 */
+      '?', /* F746 */
+      '?', /* F747 */
+      '?', /* F748 */
+      '?', /* F749 */
+      '?', /* F74A */
+      '?', /* F74B */
+      '?', /* F74C */
+      '?', /* F74D */
+      '?', /* F74E */
+      '?', /* F74F */
+      '?', /* F750 */
+      '?', /* F751 */
+      '?', /* F752 */
+      '?', /* F753 */
+      '?', /* F754 */
+      '?', /* F755 */
+      '?', /* F756 */
+      '?', /* F757 */
+      '?', /* F758 */
+      '?', /* F759 */
+      '?', /* F75A */
+      '?', /* F75B */
+      '?', /* F75C */
+      '?', /* F75D */
+      '?', /* F75E */
+      '?', /* F75F */
+      '?', /* F760 */
+      '?', /* F761 */
+      '?', /* F762 */
+      '?', /* F763 */
+      '?', /* F764 */
+      '?', /* F765 */
+      '?', /* F766 */
+      '?', /* F767 */
+      '?', /* F768 */
+      '?', /* F769 */
+      '?', /* F76A */
+      '?', /* F76B */
+      '?', /* F76C */
+      '?', /* F76D */
+      '?', /* F76E */
+      '?', /* F76F */
+      '?', /* F770 */
+      '?', /* F771 */
+      '?', /* F772 */
+      '?', /* F773 */
+      '?', /* F774 */
+      '?', /* F775 */
+      '?', /* F776 */
+      '?', /* F777 */
+      '?', /* F778 */
+      '?', /* F779 */
+      '?', /* F77A */
+      '?', /* F77B */
+      '?', /* F77C */
+      '?', /* F77D */
+      '?', /* F77E */
+      '?', /* F780 */
+      '?', /* F781 */
+      '?', /* F782 */
+      '?', /* F783 */
+      '?', /* F784 */
+      '?', /* F785 */
+      '?', /* F786 */
+      '?', /* F787 */
+      '?', /* F788 */
+      '?', /* F789 */
+      '?', /* F78A */
+      '?', /* F78B */
+      '?', /* F78C */
+      '?', /* F78D */
+      '?', /* F78E */
+      '?', /* F78F */
+      '?', /* F790 */
+      '?', /* F791 */
+      '?', /* F792 */
+      '?', /* F793 */
+      '?', /* F794 */
+      '?', /* F795 */
+      '?', /* F796 */
+      '?', /* F797 */
+      '?', /* F798 */
+      '?', /* F799 */
+      '?', /* F79A */
+      '?', /* F79B */
+      '?', /* F79C */
+      '?', /* F79D */
+      '?', /* F79E */
+      '?', /* F79F */
+      '?', /* F7A0 */
+      '?', /* F7A1 */
+      '?', /* F7A2 */
+      '?', /* F7A3 */
+      '?', /* F7A4 */
+      '?', /* F7A5 */
+      '?', /* F7A6 */
+      '?', /* F7A7 */
+      '?', /* F7A8 */
+      '?', /* F7A9 */
+      '?', /* F7AA */
+      '?', /* F7AB */
+      '?', /* F7AC */
+      '?', /* F7AD */
+      '?', /* F7AE */
+      '?', /* F7AF */
+      '?', /* F7B0 */
+      '?', /* F7B1 */
+      '?', /* F7B2 */
+      '?', /* F7B3 */
+      '?', /* F7B4 */
+      '?', /* F7B5 */
+      '?', /* F7B6 */
+      '?', /* F7B7 */
+      '?', /* F7B8 */
+      '?', /* F7B9 */
+      '?', /* F7BA */
+      '?', /* F7BB */
+      '?', /* F7BC */
+      '?', /* F7BD */
+      '?', /* F7BE */
+      '?', /* F7BF */
+      '?', /* F7C0 */
+      '?', /* F7C1 */
+      '?', /* F7C2 */
+      '?', /* F7C3 */
+      '?', /* F7C4 */
+      '?', /* F7C5 */
+      '?', /* F7C6 */
+      '?', /* F7C7 */
+      '?', /* F7C8 */
+      '?', /* F7C9 */
+      '?', /* F7CA */
+      '?', /* F7CB */
+      '?', /* F7CC */
+      '?', /* F7CD */
+      '?', /* F7CE */
+      '?', /* F7CF */
+      '?', /* F7D0 */
+      '?', /* F7D1 */
+      '?', /* F7D2 */
+      '?', /* F7D3 */
+      '?', /* F7D4 */
+      '?', /* F7D5 */
+      '?', /* F7D6 */
+      '?', /* F7D7 */
+      '?', /* F7D8 */
+      '?', /* F7D9 */
+      '?', /* F7DA */
+      '?', /* F7DB */
+      '?', /* F7DC */
+      '?', /* F7DD */
+      '?', /* F7DE */
+      '?', /* F7DF */
+      '?', /* F7E0 */
+      '?', /* F7E1 */
+      '?', /* F7E2 */
+      '?', /* F7E3 */
+      '?', /* F7E4 */
+      '?', /* F7E5 */
+      '?', /* F7E6 */
+      '?', /* F7E7 */
+      '?', /* F7E8 */
+      '?', /* F7E9 */
+      '?', /* F7EA */
+      '?', /* F7EB */
+      '?', /* F7EC */
+      '?', /* F7ED */
+      '?', /* F7EE */
+      '?', /* F7EF */
+      '?', /* F7F0 */
+      '?', /* F7F1 */
+      '?', /* F7F2 */
+      '?', /* F7F3 */
+      '?', /* F7F4 */
+      '?', /* F7F5 */
+      '?', /* F7F6 */
+      '?', /* F7F7 */
+      '?', /* F7F8 */
+      '?', /* F7F9 */
+      '?', /* F7FA */
+      '?', /* F7FB */
+      '?', /* F7FC */
+      '?', /* F840 */
+      '?', /* F841 */
+      '?', /* F842 */
+      '?', /* F843 */
+      '?', /* F844 */
+      '?', /* F845 */
+      '?', /* F846 */
+      '?', /* F847 */
+      '?', /* F848 */
+      '?', /* F849 */
+      '?', /* F84A */
+      '?', /* F84B */
+      '?', /* F84C */
+      '?', /* F84D */
+      '?', /* F84E */
+      '?', /* F84F */
+      '?', /* F850 */
+      '?', /* F851 */
+      '?', /* F852 */
+      '?', /* F853 */
+      '?', /* F854 */
+      '?', /* F855 */
+      '?', /* F856 */
+      '?', /* F857 */
+      '?', /* F858 */
+      '?', /* F859 */
+      '?', /* F85A */
+      '?', /* F85B */
+      '?', /* F85C */
+      '?', /* F85D */
+      '?', /* F85E */
+      '?', /* F85F */
+      '?', /* F860 */
+      '?', /* F861 */
+      '?', /* F862 */
+      '?', /* F863 */
+      '?', /* F864 */
+      '?', /* F865 */
+      '?', /* F866 */
+      '?', /* F867 */
+      '?', /* F868 */
+      '?', /* F869 */
+      '?', /* F86A */
+      '?', /* F86B */
+      '?', /* F86C */
+      '?', /* F86D */
+      '?', /* F86E */
+      '?', /* F86F */
+      '?', /* F870 */
+      '?', /* F871 */
+      '?', /* F872 */
+      '?', /* F873 */
+      '?', /* F874 */
+      '?', /* F875 */
+      '?', /* F876 */
+      '?', /* F877 */
+      '?', /* F878 */
+      '?', /* F879 */
+      '?', /* F87A */
+      '?', /* F87B */
+      '?', /* F87C */
+      '?', /* F87D */
+      '?', /* F87E */
+      '?', /* F880 */
+      '?', /* F881 */
+      '?', /* F882 */
+      '?', /* F883 */
+      '?', /* F884 */
+      '?', /* F885 */
+      '?', /* F886 */
+      '?', /* F887 */
+      '?', /* F888 */
+      '?', /* F889 */
+      '?', /* F88A */
+      '?', /* F88B */
+      '?', /* F88C */
+      '?', /* F88D */
+      '?', /* F88E */
+      '?', /* F88F */
+      '?', /* F890 */
+      '?', /* F891 */
+      '?', /* F892 */
+      '?', /* F893 */
+      '?', /* F894 */
+      '?', /* F895 */
+      '?', /* F896 */
+      '?', /* F897 */
+      '?', /* F898 */
+      '?', /* F899 */
+      '?', /* F89A */
+      '?', /* F89B */
+      '?', /* F89C */
+      '?', /* F89D */
+      '?', /* F89E */
+      '?', /* F89F */
+      '?', /* F8A0 */
+      '?', /* F8A1 */
+      '?', /* F8A2 */
+      '?', /* F8A3 */
+      '?', /* F8A4 */
+      '?', /* F8A5 */
+      '?', /* F8A6 */
+      '?', /* F8A7 */
+      '?', /* F8A8 */
+      '?', /* F8A9 */
+      '?', /* F8AA */
+      '?', /* F8AB */
+      '?', /* F8AC */
+      '?', /* F8AD */
+      '?', /* F8AE */
+      '?', /* F8AF */
+      '?', /* F8B0 */
+      '?', /* F8B1 */
+      '?', /* F8B2 */
+      '?', /* F8B3 */
+      '?', /* F8B4 */
+      '?', /* F8B5 */
+      '?', /* F8B6 */
+      '?', /* F8B7 */
+      '?', /* F8B8 */
+      '?', /* F8B9 */
+      '?', /* F8BA */
+      '?', /* F8BB */
+      '?', /* F8BC */
+      '?', /* F8BD */
+      '?', /* F8BE */
+      '?', /* F8BF */
+      '?', /* F8C0 */
+      '?', /* F8C1 */
+      '?', /* F8C2 */
+      '?', /* F8C3 */
+      '?', /* F8C4 */
+      '?', /* F8C5 */
+      '?', /* F8C6 */
+      '?', /* F8C7 */
+      '?', /* F8C8 */
+      '?', /* F8C9 */
+      '?', /* F8CA */
+      '?', /* F8CB */
+      '?', /* F8CC */
+      '?', /* F8CD */
+      '?', /* F8CE */
+      '?', /* F8CF */
+      '?', /* F8D0 */
+      '?', /* F8D1 */
+      '?', /* F8D2 */
+      '?', /* F8D3 */
+      '?', /* F8D4 */
+      '?', /* F8D5 */
+      '?', /* F8D6 */
+      '?', /* F8D7 */
+      '?', /* F8D8 */
+      '?', /* F8D9 */
+      '?', /* F8DA */
+      '?', /* F8DB */
+      '?', /* F8DC */
+      '?', /* F8DD */
+      '?', /* F8DE */
+      '?', /* F8DF */
+      '?', /* F8E0 */
+      '?', /* F8E1 */
+      '?', /* F8E2 */
+      '?', /* F8E3 */
+      '?', /* F8E4 */
+      '?', /* F8E5 */
+      '?', /* F8E6 */
+      '?', /* F8E7 */
+      '?', /* F8E8 */
+      '?', /* F8E9 */
+      '?', /* F8EA */
+      '?', /* F8EB */
+      '?', /* F8EC */
+      '?', /* F8ED */
+      '?', /* F8EE */
+      '?', /* F8EF */
+      '?', /* F8F0 */
+      '?', /* F8F1 */
+      '?', /* F8F2 */
+      '?', /* F8F3 */
+      '?', /* F8F4 */
+      '?', /* F8F5 */
+      '?', /* F8F6 */
+      '?', /* F8F7 */
+      '?', /* F8F8 */
+      '?', /* F8F9 */
+      '?', /* F8FA */
+      '?', /* F8FB */
+      '?', /* F8FC */
+      '?', /* F940 */
+      '?', /* F941 */
+      '?', /* F942 */
+      '?', /* F943 */
+      '?', /* F944 */
+      '?', /* F945 */
+      '?', /* F946 */
+      '?', /* F947 */
+      '?', /* F948 */
+      '?', /* F949 */
+      '?', /* F94A */
+      '?', /* F94B */
+      '?', /* F94C */
+      '?', /* F94D */
+      '?', /* F94E */
+      '?', /* F94F */
+      '?', /* F950 */
+      '?', /* F951 */
+      '?', /* F952 */
+      '?', /* F953 */
+      '?', /* F954 */
+      '?', /* F955 */
+      '?', /* F956 */
+      '?', /* F957 */
+      '?', /* F958 */
+      '?', /* F959 */
+      '?', /* F95A */
+      '?', /* F95B */
+      '?', /* F95C */
+      '?', /* F95D */
+      '?', /* F95E */
+      '?', /* F95F */
+      '?', /* F960 */
+      '?', /* F961 */
+      '?', /* F962 */
+      '?', /* F963 */
+      '?', /* F964 */
+      '?', /* F965 */
+      '?', /* F966 */
+      '?', /* F967 */
+      '?', /* F968 */
+      '?', /* F969 */
+      '?', /* F96A */
+      '?', /* F96B */
+      '?', /* F96C */
+      '?', /* F96D */
+      '?', /* F96E */
+      '?', /* F96F */
+      '?', /* F970 */
+      '?', /* F971 */
+      '?', /* F972 */
+      '?', /* F973 */
+      '?', /* F974 */
+      '?', /* F975 */
+      '?', /* F976 */
+      '?', /* F977 */
+      '?', /* F978 */
+      '?', /* F979 */
+      '?', /* F97A */
+      '?', /* F97B */
+      '?', /* F97C */
+      '?', /* F97D */
+      '?', /* F97E */
+      '?', /* F980 */
+      '?', /* F981 */
+      '?', /* F982 */
+      '?', /* F983 */
+      '?', /* F984 */
+      '?', /* F985 */
+      '?', /* F986 */
+      '?', /* F987 */
+      '?', /* F988 */
+      '?', /* F989 */
+      '?', /* F98A */
+      '?', /* F98B */
+      '?', /* F98C */
+      '?', /* F98D */
+      '?', /* F98E */
+      '?', /* F98F */
+      '?', /* F990 */
+      '?', /* F991 */
+      '?', /* F992 */
+      '?', /* F993 */
+      '?', /* F994 */
+      '?', /* F995 */
+      '?', /* F996 */
+      '?', /* F997 */
+      '?', /* F998 */
+      '?', /* F999 */
+      '?', /* F99A */
+      '?', /* F99B */
+      '?', /* F99C */
+      '?', /* F99D */
+      '?', /* F99E */
+      '?', /* F99F */
+      '?', /* F9A0 */
+      '?', /* F9A1 */
+      '?', /* F9A2 */
+      '?', /* F9A3 */
+      '?', /* F9A4 */
+      '?', /* F9A5 */
+      '?', /* F9A6 */
+      '?', /* F9A7 */
+      '?', /* F9A8 */
+      '?', /* F9A9 */
+      '?', /* F9AA */
+      '?', /* F9AB */
+      '?', /* F9AC */
+      '?', /* F9AD */
+      '?', /* F9AE */
+      '?', /* F9AF */
+      '?', /* F9B0 */
+      '?', /* F9B1 */
+      '?', /* F9B2 */
+      '?', /* F9B3 */
+      '?', /* F9B4 */
+      '?', /* F9B5 */
+      '?', /* F9B6 */
+      '?', /* F9B7 */
+      '?', /* F9B8 */
+      '?', /* F9B9 */
+      '?', /* F9BA */
+      '?', /* F9BB */
+      '?', /* F9BC */
+      '?', /* F9BD */
+      '?', /* F9BE */
+      '?', /* F9BF */
+      '?', /* F9C0 */
+      '?', /* F9C1 */
+      '?', /* F9C2 */
+      '?', /* F9C3 */
+      '?', /* F9C4 */
+      '?', /* F9C5 */
+      '?', /* F9C6 */
+      '?', /* F9C7 */
+      '?', /* F9C8 */
+      '?', /* F9C9 */
+      '?', /* F9CA */
+      '?', /* F9CB */
+      '?', /* F9CC */
+      '?', /* F9CD */
+      '?', /* F9CE */
+      '?', /* F9CF */
+      '?', /* F9D0 */
+      '?', /* F9D1 */
+      '?', /* F9D2 */
+      '?', /* F9D3 */
+      '?', /* F9D4 */
+      '?', /* F9D5 */
+      '?', /* F9D6 */
+      '?', /* F9D7 */
+      '?', /* F9D8 */
+      '?', /* F9D9 */
+      '?', /* F9DA */
+      '?', /* F9DB */
+      '?', /* F9DC */
+      '?', /* F9DD */
+      '?', /* F9DE */
+      '?', /* F9DF */
+      '?', /* F9E0 */
+      '?', /* F9E1 */
+      '?', /* F9E2 */
+      '?', /* F9E3 */
+      '?', /* F9E4 */
+      '?', /* F9E5 */
+      '?', /* F9E6 */
+      '?', /* F9E7 */
+      '?', /* F9E8 */
+      '?', /* F9E9 */
+      '?', /* F9EA */
+      '?', /* F9EB */
+      '?', /* F9EC */
+      '?', /* F9ED */
+      '?', /* F9EE */
+      '?', /* F9EF */
+      '?', /* F9F0 */
+      '?', /* F9F1 */
+      '?', /* F9F2 */
+      '?', /* F9F3 */
+      '?', /* F9F4 */
+      '?', /* F9F5 */
+      '?', /* F9F6 */
+      '?', /* F9F7 */
+      '?', /* F9F8 */
+      '?', /* F9F9 */
+      '?', /* F9FA */
+      '?', /* F9FB */
+      '?', /* F9FC */
+   0x2170, /* FA40 */
+   0x2171, /* FA41 */
+   0x2172, /* FA42 */
+   0x2173, /* FA43 */
+   0x2174, /* FA44 */
+   0x2175, /* FA45 */
+   0x2176, /* FA46 */
+   0x2177, /* FA47 */
+   0x2178, /* FA48 */
+   0x2179, /* FA49 */
+   0x2160, /* FA4A */
+   0x2161, /* FA4B */
+   0x2162, /* FA4C */
+   0x2163, /* FA4D */
+   0x2164, /* FA4E */
+   0x2165, /* FA4F */
+   0x2166, /* FA50 */
+   0x2167, /* FA51 */
+   0x2168, /* FA52 */
+   0x2169, /* FA53 */
+   0xffe2, /* FA54 */
+   0xffe4, /* FA55 */
+   0xff07, /* FA56 */
+   0xff02, /* FA57 */
+   0x3231, /* FA58 */
+   0x2116, /* FA59 */
+   0x2121, /* FA5A */
+   0x2235, /* FA5B */
+   0x7e8a, /* FA5C */
+   0x891c, /* FA5D */
+   0x9348, /* FA5E */
+   0x9288, /* FA5F */
+   0x84dc, /* FA60 */
+   0x4fc9, /* FA61 */
+   0x70bb, /* FA62 */
+   0x6631, /* FA63 */
+   0x68c8, /* FA64 */
+   0x92f9, /* FA65 */
+   0x66fb, /* FA66 */
+   0x5f45, /* FA67 */
+   0x4e28, /* FA68 */
+   0x4ee1, /* FA69 */
+   0x4efc, /* FA6A */
+   0x4f00, /* FA6B */
+   0x4f03, /* FA6C */
+   0x4f39, /* FA6D */
+   0x4f56, /* FA6E */
+   0x4f92, /* FA6F */
+   0x4f8a, /* FA70 */
+   0x4f9a, /* FA71 */
+   0x4f94, /* FA72 */
+   0x4fcd, /* FA73 */
+   0x5040, /* FA74 */
+   0x5022, /* FA75 */
+   0x4fff, /* FA76 */
+   0x501e, /* FA77 */
+   0x5046, /* FA78 */
+   0x5070, /* FA79 */
+   0x5042, /* FA7A */
+   0x5094, /* FA7B */
+   0x50f4, /* FA7C */
+   0x50d8, /* FA7D */
+   0x514a, /* FA7E */
+   0x5164, /* FA80 */
+   0x519d, /* FA81 */
+   0x51be, /* FA82 */
+   0x51ec, /* FA83 */
+   0x5215, /* FA84 */
+   0x529c, /* FA85 */
+   0x52a6, /* FA86 */
+   0x52c0, /* FA87 */
+   0x52db, /* FA88 */
+   0x5300, /* FA89 */
+   0x5307, /* FA8A */
+   0x5324, /* FA8B */
+   0x5372, /* FA8C */
+   0x5393, /* FA8D */
+   0x53b2, /* FA8E */
+   0x53dd, /* FA8F */
+   0xfa0e, /* FA90 */
+   0x549c, /* FA91 */
+   0x548a, /* FA92 */
+   0x54a9, /* FA93 */
+   0x54ff, /* FA94 */
+   0x5586, /* FA95 */
+   0x5759, /* FA96 */
+   0x5765, /* FA97 */
+   0x57ac, /* FA98 */
+   0x57c8, /* FA99 */
+   0x57c7, /* FA9A */
+   0xfa0f, /* FA9B */
+   0xfa10, /* FA9C */
+   0x589e, /* FA9D */
+   0x58b2, /* FA9E */
+   0x590b, /* FA9F */
+   0x5953, /* FAA0 */
+   0x595b, /* FAA1 */
+   0x595d, /* FAA2 */
+   0x5963, /* FAA3 */
+   0x59a4, /* FAA4 */
+   0x59ba, /* FAA5 */
+   0x5b56, /* FAA6 */
+   0x5bc0, /* FAA7 */
+   0x752f, /* FAA8 */
+   0x5bd8, /* FAA9 */
+   0x5bec, /* FAAA */
+   0x5c1e, /* FAAB */
+   0x5ca6, /* FAAC */
+   0x5cba, /* FAAD */
+   0x5cf5, /* FAAE */
+   0x5d27, /* FAAF */
+   0x5d53, /* FAB0 */
+   0xfa11, /* FAB1 */
+   0x5d42, /* FAB2 */
+   0x5d6d, /* FAB3 */
+   0x5db8, /* FAB4 */
+   0x5db9, /* FAB5 */
+   0x5dd0, /* FAB6 */
+   0x5f21, /* FAB7 */
+   0x5f34, /* FAB8 */
+   0x5f67, /* FAB9 */
+   0x5fb7, /* FABA */
+   0x5fde, /* FABB */
+   0x605d, /* FABC */
+   0x6085, /* FABD */
+   0x608a, /* FABE */
+   0x60de, /* FABF */
+   0x60d5, /* FAC0 */
+   0x6120, /* FAC1 */
+   0x60f2, /* FAC2 */
+   0x6111, /* FAC3 */
+   0x6137, /* FAC4 */
+   0x6130, /* FAC5 */
+   0x6198, /* FAC6 */
+   0x6213, /* FAC7 */
+   0x62a6, /* FAC8 */
+   0x63f5, /* FAC9 */
+   0x6460, /* FACA */
+   0x649d, /* FACB */
+   0x64ce, /* FACC */
+   0x654e, /* FACD */
+   0x6600, /* FACE */
+   0x6615, /* FACF */
+   0x663b, /* FAD0 */
+   0x6609, /* FAD1 */
+   0x662e, /* FAD2 */
+   0x661e, /* FAD3 */
+   0x6624, /* FAD4 */
+   0x6665, /* FAD5 */
+   0x6657, /* FAD6 */
+   0x6659, /* FAD7 */
+   0xfa12, /* FAD8 */
+   0x6673, /* FAD9 */
+   0x6699, /* FADA */
+   0x66a0, /* FADB */
+   0x66b2, /* FADC */
+   0x66bf, /* FADD */
+   0x66fa, /* FADE */
+   0x670e, /* FADF */
+   0xf929, /* FAE0 */
+   0x6766, /* FAE1 */
+   0x67bb, /* FAE2 */
+   0x6852, /* FAE3 */
+   0x67c0, /* FAE4 */
+   0x6801, /* FAE5 */
+   0x6844, /* FAE6 */
+   0x68cf, /* FAE7 */
+   0xfa13, /* FAE8 */
+   0x6968, /* FAE9 */
+   0xfa14, /* FAEA */
+   0x6998, /* FAEB */
+   0x69e2, /* FAEC */
+   0x6a30, /* FAED */
+   0x6a6b, /* FAEE */
+   0x6a46, /* FAEF */
+   0x6a73, /* FAF0 */
+   0x6a7e, /* FAF1 */
+   0x6ae2, /* FAF2 */
+   0x6ae4, /* FAF3 */
+   0x6bd6, /* FAF4 */
+   0x6c3f, /* FAF5 */
+   0x6c5c, /* FAF6 */
+   0x6c86, /* FAF7 */
+   0x6c6f, /* FAF8 */
+   0x6cda, /* FAF9 */
+   0x6d04, /* FAFA */
+   0x6d87, /* FAFB */
+   0x6d6f, /* FAFC */
+   0x6d96, /* FB40 */
+   0x6dac, /* FB41 */
+   0x6dcf, /* FB42 */
+   0x6df8, /* FB43 */
+   0x6df2, /* FB44 */
+   0x6dfc, /* FB45 */
+   0x6e39, /* FB46 */
+   0x6e5c, /* FB47 */
+   0x6e27, /* FB48 */
+   0x6e3c, /* FB49 */
+   0x6ebf, /* FB4A */
+   0x6f88, /* FB4B */
+   0x6fb5, /* FB4C */
+   0x6ff5, /* FB4D */
+   0x7005, /* FB4E */
+   0x7007, /* FB4F */
+   0x7028, /* FB50 */
+   0x7085, /* FB51 */
+   0x70ab, /* FB52 */
+   0x710f, /* FB53 */
+   0x7104, /* FB54 */
+   0x715c, /* FB55 */
+   0x7146, /* FB56 */
+   0x7147, /* FB57 */
+   0xfa15, /* FB58 */
+   0x71c1, /* FB59 */
+   0x71fe, /* FB5A */
+   0x72b1, /* FB5B */
+   0x72be, /* FB5C */
+   0x7324, /* FB5D */
+   0xfa16, /* FB5E */
+   0x7377, /* FB5F */
+   0x73bd, /* FB60 */
+   0x73c9, /* FB61 */
+   0x73d6, /* FB62 */
+   0x73e3, /* FB63 */
+   0x73d2, /* FB64 */
+   0x7407, /* FB65 */
+   0x73f5, /* FB66 */
+   0x7426, /* FB67 */
+   0x742a, /* FB68 */
+   0x7429, /* FB69 */
+   0x742e, /* FB6A */
+   0x7462, /* FB6B */
+   0x7489, /* FB6C */
+   0x749f, /* FB6D */
+   0x7501, /* FB6E */
+   0x756f, /* FB6F */
+   0x7682, /* FB70 */
+   0x769c, /* FB71 */
+   0x769e, /* FB72 */
+   0x769b, /* FB73 */
+   0x76a6, /* FB74 */
+   0xfa17, /* FB75 */
+   0x7746, /* FB76 */
+   0x52af, /* FB77 */
+   0x7821, /* FB78 */
+   0x784e, /* FB79 */
+   0x7864, /* FB7A */
+   0x787a, /* FB7B */
+   0x7930, /* FB7C */
+   0xfa18, /* FB7D */
+   0xfa19, /* FB7E */
+   0xfa1a, /* FB80 */
+   0x7994, /* FB81 */
+   0xfa1b, /* FB82 */
+   0x799b, /* FB83 */
+   0x7ad1, /* FB84 */
+   0x7ae7, /* FB85 */
+   0xfa1c, /* FB86 */
+   0x7aeb, /* FB87 */
+   0x7b9e, /* FB88 */
+   0xfa1d, /* FB89 */
+   0x7d48, /* FB8A */
+   0x7d5c, /* FB8B */
+   0x7db7, /* FB8C */
+   0x7da0, /* FB8D */
+   0x7dd6, /* FB8E */
+   0x7e52, /* FB8F */
+   0x7f47, /* FB90 */
+   0x7fa1, /* FB91 */
+   0xfa1e, /* FB92 */
+   0x8301, /* FB93 */
+   0x8362, /* FB94 */
+   0x837f, /* FB95 */
+   0x83c7, /* FB96 */
+   0x83f6, /* FB97 */
+   0x8448, /* FB98 */
+   0x84b4, /* FB99 */
+   0x8553, /* FB9A */
+   0x8559, /* FB9B */
+   0x856b, /* FB9C */
+   0xfa1f, /* FB9D */
+   0x85b0, /* FB9E */
+   0xfa20, /* FB9F */
+   0xfa21, /* FBA0 */
+   0x8807, /* FBA1 */
+   0x88f5, /* FBA2 */
+   0x8a12, /* FBA3 */
+   0x8a37, /* FBA4 */
+   0x8a79, /* FBA5 */
+   0x8aa7, /* FBA6 */
+   0x8abe, /* FBA7 */
+   0x8adf, /* FBA8 */
+   0xfa22, /* FBA9 */
+   0x8af6, /* FBAA */
+   0x8b53, /* FBAB */
+   0x8b7f, /* FBAC */
+   0x8cf0, /* FBAD */
+   0x8cf4, /* FBAE */
+   0x8d12, /* FBAF */
+   0x8d76, /* FBB0 */
+   0xfa23, /* FBB1 */
+   0x8ecf, /* FBB2 */
+   0xfa24, /* FBB3 */
+   0xfa25, /* FBB4 */
+   0x9067, /* FBB5 */
+   0x90de, /* FBB6 */
+   0xfa26, /* FBB7 */
+   0x9115, /* FBB8 */
+   0x9127, /* FBB9 */
+   0x91da, /* FBBA */
+   0x91d7, /* FBBB */
+   0x91de, /* FBBC */
+   0x91ed, /* FBBD */
+   0x91ee, /* FBBE */
+   0x91e4, /* FBBF */
+   0x91e5, /* FBC0 */
+   0x9206, /* FBC1 */
+   0x9210, /* FBC2 */
+   0x920a, /* FBC3 */
+   0x923a, /* FBC4 */
+   0x9240, /* FBC5 */
+   0x923c, /* FBC6 */
+   0x924e, /* FBC7 */
+   0x9259, /* FBC8 */
+   0x9251, /* FBC9 */
+   0x9239, /* FBCA */
+   0x9267, /* FBCB */
+   0x92a7, /* FBCC */
+   0x9277, /* FBCD */
+   0x9278, /* FBCE */
+   0x92e7, /* FBCF */
+   0x92d7, /* FBD0 */
+   0x92d9, /* FBD1 */
+   0x92d0, /* FBD2 */
+   0xfa27, /* FBD3 */
+   0x92d5, /* FBD4 */
+   0x92e0, /* FBD5 */
+   0x92d3, /* FBD6 */
+   0x9325, /* FBD7 */
+   0x9321, /* FBD8 */
+   0x92fb, /* FBD9 */
+   0xfa28, /* FBDA */
+   0x931e, /* FBDB */
+   0x92ff, /* FBDC */
+   0x931d, /* FBDD */
+   0x9302, /* FBDE */
+   0x9370, /* FBDF */
+   0x9357, /* FBE0 */
+   0x93a4, /* FBE1 */
+   0x93c6, /* FBE2 */
+   0x93de, /* FBE3 */
+   0x93f8, /* FBE4 */
+   0x9431, /* FBE5 */
+   0x9445, /* FBE6 */
+   0x9448, /* FBE7 */
+   0x9592, /* FBE8 */
+   0xf9dc, /* FBE9 */
+   0xfa29, /* FBEA */
+   0x969d, /* FBEB */
+   0x96af, /* FBEC */
+   0x9733, /* FBED */
+   0x973b, /* FBEE */
+   0x9743, /* FBEF */
+   0x974d, /* FBF0 */
+   0x974f, /* FBF1 */
+   0x9751, /* FBF2 */
+   0x9755, /* FBF3 */
+   0x9857, /* FBF4 */
+   0x9865, /* FBF5 */
+   0xfa2a, /* FBF6 */
+   0xfa2b, /* FBF7 */
+   0x9927, /* FBF8 */
+   0xfa2c, /* FBF9 */
+   0x999e, /* FBFA */
+   0x9a4e, /* FBFB */
+   0x9ad9, /* FBFC */
+   0x9adc, /* FC40 */
+   0x9b75, /* FC41 */
+   0x9b72, /* FC42 */
+   0x9b8f, /* FC43 */
+   0x9bb1, /* FC44 */
+   0x9bbb, /* FC45 */
+   0x9c00, /* FC46 */
+   0x9d70, /* FC47 */
+   0x9d6b, /* FC48 */
+   0xfa2d, /* FC49 */
+   0x9e19, /* FC4A */
+   0x9ed1, /* FC4B */
+      '?', /* FC4C */
+      '?', /* FC4D */
+      '?', /* FC4E */
+      '?', /* FC4F */
+      '?', /* FC50 */
+      '?', /* FC51 */
+      '?', /* FC52 */
+      '?', /* FC53 */
+      '?', /* FC54 */
+      '?', /* FC55 */
+      '?', /* FC56 */
+      '?', /* FC57 */
+      '?', /* FC58 */
+      '?', /* FC59 */
+      '?', /* FC5A */
+      '?', /* FC5B */
+      '?', /* FC5C */
+      '?', /* FC5D */
+      '?', /* FC5E */
+      '?', /* FC5F */
+      '?', /* FC60 */
+      '?', /* FC61 */
+      '?', /* FC62 */
+      '?', /* FC63 */
+      '?', /* FC64 */
+      '?', /* FC65 */
+      '?', /* FC66 */
+      '?', /* FC67 */
+      '?', /* FC68 */
+      '?', /* FC69 */
+      '?', /* FC6A */
+      '?', /* FC6B */
+      '?', /* FC6C */
+      '?', /* FC6D */
+      '?', /* FC6E */
+      '?', /* FC6F */
+      '?', /* FC70 */
+      '?', /* FC71 */
+      '?', /* FC72 */
+      '?', /* FC73 */
+      '?', /* FC74 */
+      '?', /* FC75 */
+      '?', /* FC76 */
+      '?', /* FC77 */
+      '?', /* FC78 */
+      '?', /* FC79 */
+      '?', /* FC7A */
+      '?', /* FC7B */
+      '?', /* FC7C */
+      '?', /* FC7D */
+      '?', /* FC7E */
+      '?', /* FC80 */
+      '?', /* FC81 */
+      '?', /* FC82 */
+      '?', /* FC83 */
+      '?', /* FC84 */
+      '?', /* FC85 */
+      '?', /* FC86 */
+      '?', /* FC87 */
+      '?', /* FC88 */
+      '?', /* FC89 */
+      '?', /* FC8A */
+      '?', /* FC8B */
+      '?', /* FC8C */
+      '?', /* FC8D */
+      '?', /* FC8E */
+      '?', /* FC8F */
+      '?', /* FC90 */
+      '?', /* FC91 */
+      '?', /* FC92 */
+      '?', /* FC93 */
+      '?', /* FC94 */
+      '?', /* FC95 */
+      '?', /* FC96 */
+      '?', /* FC97 */
+      '?', /* FC98 */
+      '?', /* FC99 */
+      '?', /* FC9A */
+      '?', /* FC9B */
+      '?', /* FC9C */
+      '?', /* FC9D */
+      '?', /* FC9E */
+      '?', /* FC9F */
+      '?', /* FCA0 */
+      '?', /* FCA1 */
+      '?', /* FCA2 */
+      '?', /* FCA3 */
+      '?', /* FCA4 */
+      '?', /* FCA5 */
+      '?', /* FCA6 */
+      '?', /* FCA7 */
+      '?', /* FCA8 */
+      '?', /* FCA9 */
+      '?', /* FCAA */
+      '?', /* FCAB */
+      '?', /* FCAC */
+      '?', /* FCAD */
+      '?', /* FCAE */
+      '?', /* FCAF */
+      '?', /* FCB0 */
+      '?', /* FCB1 */
+      '?', /* FCB2 */
+      '?', /* FCB3 */
+      '?', /* FCB4 */
+      '?', /* FCB5 */
+      '?', /* FCB6 */
+      '?', /* FCB7 */
+      '?', /* FCB8 */
+      '?', /* FCB9 */
+      '?', /* FCBA */
+      '?', /* FCBB */
+      '?', /* FCBC */
+      '?', /* FCBD */
+      '?', /* FCBE */
+      '?', /* FCBF */
+      '?', /* FCC0 */
+      '?', /* FCC1 */
+      '?', /* FCC2 */
+      '?', /* FCC3 */
+      '?', /* FCC4 */
+      '?', /* FCC5 */
+      '?', /* FCC6 */
+      '?', /* FCC7 */
+      '?', /* FCC8 */
+      '?', /* FCC9 */
+      '?', /* FCCA */
+      '?', /* FCCB */
+      '?', /* FCCC */
+      '?', /* FCCD */
+      '?', /* FCCE */
+      '?', /* FCCF */
+      '?', /* FCD0 */
+      '?', /* FCD1 */
+      '?', /* FCD2 */
+      '?', /* FCD3 */
+      '?', /* FCD4 */
+      '?', /* FCD5 */
+      '?', /* FCD6 */
+      '?', /* FCD7 */
+      '?', /* FCD8 */
+      '?', /* FCD9 */
+      '?', /* FCDA */
+      '?', /* FCDB */
+      '?', /* FCDC */
+      '?', /* FCDD */
+      '?', /* FCDE */
+      '?', /* FCDF */
+      '?', /* FCE0 */
+      '?', /* FCE1 */
+      '?', /* FCE2 */
+      '?', /* FCE3 */
+      '?', /* FCE4 */
+      '?', /* FCE5 */
+      '?', /* FCE6 */
+      '?', /* FCE7 */
+      '?', /* FCE8 */
+      '?', /* FCE9 */
+      '?', /* FCEA */
+      '?', /* FCEB */
+      '?', /* FCEC */
+      '?', /* FCED */
+      '?', /* FCEE */
+      '?', /* FCEF */
+      '?', /* FCF0 */
+      '?', /* FCF1 */
+      '?', /* FCF2 */
+      '?', /* FCF3 */
+      '?', /* FCF4 */
+      '?', /* FCF5 */
+      '?', /* FCF6 */
+      '?', /* FCF7 */
+      '?', /* FCF8 */
+      '?', /* FCF9 */
+      '?', /* FCFA */
+      '?', /* FCFB */
+      '?'  /* FCFC */
+ };
+ 
+ void
+ sjis2ucs(sjis, len, utf)
+ unsigned char* sjis;
+ int len;
+ unsigned char* utf;
+ {
+   unsigned char c;
+   unsigned short ucs;
+ 
+   c = *sjis;
+   if (c < 128) {
+     ucs = c;
+   }
+   else if (c >= 0xa0 && c <= 0xdf) {
+     ucs = 0xff00 + (c - 0x40);
+   }
+   else {
+     unsigned short sj;
+     if (c > 0xe0)
+       c -= 0xc1;
+     else
+       c -= 0x81;
+     sj = c * 188;
+     sjis++;
+     c = *sjis;
+     if (c >= 0x80)
+       c -= 0x41;
+     else
+       c -= 0x40;
+     sj += c;
+     ucs = s2utbl[sj];
+   }
+   utf[0] = ucs & 255;
+   utf[1] = ucs >> 8;
+   return;
+ }
+ 
+ # endif
+ #endif
diff -crN ../orig/src/screen.c ./src/screen.c
*** ../orig/src/screen.c	Wed Aug 10 13:54:10 1994
--- ./src/screen.c	Sun Nov 28 18:08:44 1999
***************
*** 14,19 ****
--- 14,22 ----
  #include "globals.h"
  #include "proto.h"
  #include "param.h"
+ #ifdef KANJI
+ #include "kanji.h"
+ #endif
  
  char *tgoto __PARMS((char *cm, int col, int line));
  
***************
*** 39,44 ****
--- 42,56 ----
  
  #define INVERTCODE		0x80
  
+ #ifdef KANJI
+ # define SCREEN(scr)	  ((scr)[Columns])
+ # define SCRTST(scr)	  (((scr)[Columns]) != 0)
+ # define SCRCMP(scr, inv) (inv == 0 ? (((scr)[Columns]) == 0) : (((scr)[Columns]) != 0))
+ #endif
+ #if defined(KANJI) && defined(NT)
+ static int		color = 0;
+ #endif
+ 
  static int win_line __ARGS((WIN *, linenr_t, int, int));
  static void screen_char __ARGS((char_u *, int, int));
  static void screenalloc __ARGS((int));
***************
*** 331,337 ****
--- 343,353 ----
  			to = wp->w_cursor.lnum;
  		}
  	/* if in block mode and changed column or wp->w_curswant: update all lines */
+ #ifdef KANJI
+ 		if (Visual_block)
+ #else
  		if (Visual_block && (wp->w_cursor.col != old_cursor.col || wp->w_curswant != oldCurswant))
+ #endif
  		{
  			if (from > VIsual.lnum)
  				from = VIsual.lnum;
***************
*** 607,612 ****
--- 623,638 ----
  				temp = getvcol(wp, bot, 2);
  				if (temp < fromcol)
  					fromcol = temp;
+ #ifdef KANJI
+ 				/* adjust for multibyte char. */
+ 				{
+ 					FPOS	w;
+ 					w.lnum = lnum;
+ 					w.col = vcol2col(curwin, lnum, fromcol, NULL);
+ 					if (*ml_get_pos(&w) != '\t')
+ 						fromcol = getvcol(wp, &w, 2);
+ 				}
+ #endif
  
  				if (wp->w_curswant != MAXCOL)
  				{
***************
*** 614,619 ****
--- 640,655 ----
  					temp = getvcol(wp, bot, 3);
  					if (temp > tocol)
  						tocol = temp;
+ #ifdef KANJI
+ 					/* adjust for multibyte char. */
+ 					{
+ 						FPOS	w;
+ 						w.lnum = lnum;
+ 						w.col = vcol2col(curwin, lnum, tocol, NULL);
+ 						if (*ml_get_pos(&w) != '\t')
+ 							tocol = getvcol(wp, &w, 3);
+ 					}
+ #endif
  					++tocol;
  				}
  			}
***************
*** 653,658 ****
--- 689,702 ----
  	if (!wp->w_p_wrap)		/* advance to first character to be displayed */
  	{
  		while (vcol < wp->w_leftcol && *ptr)
+ #ifdef KANJI
+ 			if (ISkanji(*ptr))
+ 			{
+ 				vcol += 2;
+ 				ptr  += 2;
+ 			}
+ 			else
+ #endif
  			vcol += chartabsize(*ptr++, vcol);
  		if (vcol > wp->w_leftcol)
  		{
***************
*** 678,683 ****
--- 722,733 ----
  		if (!canopt)	/* Visual in this line */
  		{
  			if (((vcol == fromcol && !(noinvcur && vcol == wp->w_virtcol)) ||
+ #ifdef KANJI
+ 					(noinvcur
+ 						&& (ptr > ml_get_buf(wp->w_buffer, lnum, FALSE))
+ 						&& ISkanjiPointer(ml_get_buf(wp->w_buffer, lnum, FALSE), ptr -1) == 2
+ 						&& vcol == wp->w_virtcol + 2 && vcol >= fromcol) ||
+ #endif
  					(noinvcur && vcol == wp->w_virtcol + 1 && vcol >= fromcol)) &&
  					vcol < tocol)
  				start_highlight();		/* start highlighting */
***************
*** 703,709 ****
--- 753,763 ----
  		}
  		else
  		{
+ #ifdef KANJI
+ 			if ((c = *ptr++) < ' ' || c == DEL || (c >=0x80 && !ISdisp(c)))
+ #else
  			if ((c = *ptr++) < ' ' || (c > '~' && c <= 0xa0))
+ #endif
  			{
  				/*
  				 * when getting a character from the file, we may have to turn it
***************
*** 721,726 ****
--- 775,788 ----
  					n_extra = 1;
  					c = '$';
  				}
+ #ifdef CRMARK
+ 				else if (c == NUL && wp->w_p_cr)
+ 				{
+ 					p_extra = (char_u *)"";
+ 					n_extra = 1;
+ 					c = '!';
+ 				}
+ #endif
  				else if (c != NUL)
  				{
  					p_extra = transchar(c);
***************
*** 736,746 ****
--- 798,817 ----
  			{
  				if (vcol == 0)	/* invert first char of empty line */
  				{
+ #ifdef KANJI
+ 					if (*screenp != ' ' || !SCRTST(screenp))
+ 					{
+ 							*screenp = ' ';
+ 							SCREEN(screenp) = invert;
+ 							screen_char(screenp, screen_row, col);
+ 					}
+ #else
  					if (*screenp != (' ' ^ INVERTCODE))
  					{
  							*screenp = (' ' ^ INVERTCODE);
  							screen_char(screenp, screen_row, col);
  					}
+ #endif
  					++screenp;
  					++col;
  				}
***************
*** 749,755 ****
--- 820,830 ----
  			/* 
  			 * blank out the rest of this row, if necessary
  			 */
+ #ifdef KANJI
+ 			while (col < Columns && *screenp == ' ' && !SCRTST(screenp))
+ #else
  			while (col < Columns && *screenp == ' ')
+ #endif
  			{
  				++screenp;
  				++col;
***************
*** 763,768 ****
--- 838,865 ----
  			screen_row++;
  			break;
  		}
+ #ifdef KANJI
+ 		if (col >= (ISkanji(c) ? Columns - 1 : Columns)) /* continuous line */
+ 		{
+ 			if (col == Columns - 1 && (*screenp != '\\' || !SCRCMP(screenp, invert)))
+ 			{
+ 				*screenp = '\\';
+ 				SCREEN(screenp) = invert;
+ 				screen_char(screenp, screen_row, col);
+ 			}
+ 			col = 0;
+ 			++row;
+ 			++screen_row;
+ 			if (!wp->w_p_wrap)
+ 				break;
+ 			if (row == endrow)		/* line got too long for screen */
+ 			{
+ 				++row;
+ 				break;
+ 			}
+ 			screenp = LinePointers[screen_row];
+ 		}
+ #else	/* KANJI */
  		if (col >= Columns)
  		{
  			col = 0;
***************
*** 777,788 ****
--- 874,932 ----
  			}
  			screenp = LinePointers[screen_row];
  		}
+ #endif	/* KANJI */
  
  		/*
  		 * Store the character in Nextscreen.
  		 * Be careful with characters where (c ^ INVERTCODE == ' '), they may be
  		 * confused with spaces inserted by scrolling.
  		 */
+ #ifdef KANJI
+ 		if (ISkanji(c))
+ 		{
+ 			char_u	c1, c2;
+ 
+ 			c1 = c;
+ 			c2 = *ptr++;
+ 			if (*screenp != c1 || *(screenp + 1) != c2
+ 					|| (invert ? !SCRTST(screenp) : SCRTST(screenp)))
+ 			{
+ 				if (invert)
+ 				{
+ 					SCREEN(screenp)	  = invert;
+ 					SCREEN(screenp+1) = invert;
+ 				}
+ 				else
+ 				{
+ 					SCREEN(screenp)	  = 0;
+ 					SCREEN(screenp+1) = 0;
+ 				}
+ 				*screenp++ = c1;
+ 				*screenp++ = c2;
+ 				screen_char(screenp - 2, screen_row, col);
+ 				col  += 2;
+ 				vcol += 2;
+ 			}
+ 			else
+ 			{
+ 				screenp += 2;
+ 				vcol    += 2;
+ 				col     += 2;
+ 			}
+ 		}
+ 		else
+ 		{
+ 			if (!SCRCMP(screenp, invert) || *screenp != c)
+ 			{
+ 				*screenp = c;
+ 				SCREEN(screenp) = invert;
+ 				screen_char(screenp, screen_row, col);
+ 			}
+ 			++screenp;
+ 			col++;
+ 			vcol++;
+ 		}
+ #else	/* KANJI */
  		if (*screenp != (c ^ invert) || c == (' ' ^ INVERTCODE))
  		{
  			*screenp = (c ^ invert);
***************
*** 791,796 ****
--- 935,941 ----
  		++screenp;
  		col++;
  		vcol++;
+ #endif	/* KANJI */
  	}
  
  	if (invert)
***************
*** 833,843 ****
--- 978,1017 ----
  	screenp = LinePointers[row] + col;
  	while (*msg && col < Columns)
  	{
+ #ifdef KANJI
+ 		if ((*screenp != *msg) || (ISkanji(*msg) && screenp[1] != msg[1])
+ 				|| !SCRCMP(screenp, invert) || (*msg == ' ' && SCRTST(screenp)))
+ 		{
+ 			if (ISkanji(*msg))
+ 			{
+ 				*screenp = msg[0];
+ 				SCREEN(screenp) = invert;
+ 				screenp++;
+ 				*screenp = msg[1];
+ 				SCREEN(screenp) = invert;
+ 				screenp++;
+ 				screen_char(screenp - 2, row, col);
+ 				col += 2;
+ 				msg	+=2;
+ 				continue;
+ 			}
+ 			*screenp = *msg;
+ 			SCREEN(screenp) = invert;
+ 			screen_char(screenp, row, col);
+ 		}
+ 		if (ISkanji(*msg))
+ 		{
+ 			++screenp;
+ 			++col;
+ 			++msg;
+ 		}
+ #else
  		if (*screenp != (*msg ^ invert) || *msg == (' ' ^ INVERTCODE))
  		{
  			*screenp = (*msg ^ invert);
  			screen_char(screenp, row, col);
  		}
+ #endif
  		++screenp;
  		++col;
  		++msg;
***************
*** 890,895 ****
--- 1064,1074 ----
  		case 'n':	highlight = NULL;		/* no highlighting */
  					unhighlight = NULL;
  					break;
+ #if defined(FEPCTRL) && !defined(MSDOS)
+ 		case 'u':	highlight = T_US;		/* underline */
+ 					unhighlight = T_UE;
+ 					break;
+ #endif
  		default:	highlight = T_TI;		/* invert/reverse */
  					unhighlight = T_TP;
  					break;
***************
*** 900,905 ****
--- 1079,1087 ----
  		highlight = NULL;
  		return FAIL;
  	}
+ #if defined(KANJI) && defined(NT)
+ 	color = mode & 0xff;
+ #endif
  	return OK;
  }
  
***************
*** 909,915 ****
--- 1091,1101 ----
  	if (highlight != NULL)
  	{
  		outstr(highlight);
+ #if defined(KANJI) && defined(NT)
+ 		invert = color;
+ #else
  		invert = INVERTCODE;
+ #endif
  	}
  }
  
***************
*** 963,973 ****
--- 1149,1174 ----
  			i = col - oldcol;
  			if (i <= 4 + noinvcurs && canopt)
  			{
+ #ifdef KANJI
+ 				char_u		*ptr;
+ 				ptr = p - i;
+ 				while (ptr < p)
+ 				{
+ 					if (ISkanji(*ptr))
+ 					{
+ 						outchar2(*ptr, *(ptr + 1));
+ 						ptr += 2;
+ 					}
+ 					else
+ 						outchar(*ptr++);
+ 				}
+ #else	/* KANJI */
  				while (i)
  				{
  					c = *(p - i--);
  					outchar(c ^ invert);
  				}
+ #endif	/* KANJI */
  			}
  			else
  			{
***************
*** 1004,1010 ****
--- 1205,1222 ----
  		else                                             
  			outstr(unhighlight);
  	}
+ #ifdef KANJI
+ 	if (ISkanji(*p))
+ 	{
+ 		outchar2(*p, *(p + 1));
+ 		p++;
+ 		oldcol++;
+ 	}
+ 	else
+ 		outchar(*p);
+ #else
  	outchar(*p ^ invert);
+ #endif
  	oldcol++;
  }
  
***************
*** 1027,1038 ****
--- 1239,1256 ----
  	if (start_row >= end_row || start_col >= end_col)	/* nothing to do */
  		return;
  
+ #ifndef KANJI
  	c1 ^= invert;
  	c2 ^= invert;
+ #endif
  	for (row = start_row; row < end_row; ++row)
  	{
  			/* try to use delete-line termcap code */
+ #ifdef KANJI
+ 		if (c2 == ' ' && !invert && end_col == Columns && T_EL != NULL && *T_EL != NUL)
+ #else
  		if (c2 == ' ' && end_col == Columns && T_EL != NULL && *T_EL != NUL)
+ #endif
  		{
  			/*
  			 * check if we really need to clear something
***************
*** 1044,1050 ****
--- 1262,1272 ----
  				++col;
  				++screenp;
  			}
+ #ifdef KANJI
+ 			while (col < end_col && *screenp == ' ' && !SCRTST(screenp))
+ #else
  			while (col < end_col && *screenp == ' ')	/* skip blanks */
+ #endif
  			{
  				++col;
  				++screenp;
***************
*** 1062,1071 ****
--- 1284,1303 ----
  		c = c1;
  		for (col = start_col; col < end_col; ++col)
  		{
+ #ifdef KANJI
+ 			if (*screenp != c || !SCRCMP(screenp,invert))
+ #else
  			if (*screenp != c)
+ #endif
  			{
+ #ifdef KANJI
+ 				*screenp = c;
+ 				SCREEN(screenp) = invert;
+ 				if (!did_delete || c != ' ' || invert)
+ #else
  				*screenp = c;
  				if (!did_delete || c != ' ')
+ #endif
  					screen_char(screenp, row, col);
  			}
  			++screenp;
***************
*** 1074,1080 ****
--- 1306,1316 ----
  		if (row == Rows - 1)
  		{
  			redraw_cmdline = TRUE;
+ #ifdef KANJI
+ 			if (c1 == ' ' && c2 == ' ' && !invert)
+ #else
  			if (c1 == ' ' && c2 == ' ')
+ #endif
  				clear_cmdline = FALSE;
  		}
  	}
***************
*** 1139,1145 ****
--- 1375,1388 ----
  	for (wp = firstwin; wp; wp = wp->w_next)
  		win_free_lsize(wp);
  
+ #ifdef KANJI
+ 	Nextscreen = (char_u *)malloc((size_t) (Rows * Columns * 2));
+ #else
  	Nextscreen = (char_u *)malloc((size_t) (Rows * Columns));
+ #endif
+ #ifdef NT
+ 	WinScreen =
+ #endif
  	LinePointers = (char_u **)malloc(sizeof(char_u *) * Rows);
  	for (wp = firstwin; wp; wp = wp->w_next)
  	{
***************
*** 1158,1165 ****
--- 1401,1424 ----
  	}
  	else
  	{
+ #ifdef KANJI
  		for (i = 0; i < Rows; ++i)
+ 			LinePointers[i] = Nextscreen + i * Columns * 2;
+ #else
+ 		for (i = 0; i < Rows; ++i)
  			LinePointers[i] = Nextscreen + i * Columns;
+ #endif
+ #ifdef NT
+ # ifdef KANJI
+ 		for (i = 0; i < Rows; i++)
+ 		{
+ 			memset(&Nextscreen[i * Columns * 2], ' ', Columns);
+ 			memset(&Nextscreen[i * Columns * 2 + Columns], 0, Columns);
+ 		}
+ # else
+ 		memset((char *)Nextscreen, ' ', (size_t)(Rows * Columns));
+ # endif
+ #endif
  	}
  
  	if (clear)
***************
*** 1182,1188 ****
--- 1441,1458 ----
  	outstr(T_ED);				/* clear the display */
  
  								/* blank out Nextscreen */
+ #ifdef KANJI
+ 	{
+ 		int			i;
+ 		for (i = 0; i < Rows; i++)
+ 		{
+ 			memset(&Nextscreen[i * Columns * 2], ' ', Columns);
+ 			memset(&Nextscreen[i * Columns * 2 + Columns], 0, Columns);
+ 		}
+ 	}
+ #else
  	memset((char *)Nextscreen, ' ', (size_t)(Rows * Columns));
+ #endif
  
  	win_rest_invalid(firstwin);
  	clear_cmdline = FALSE;
***************
*** 1359,1369 ****
--- 1629,1690 ----
  
  	curwin->w_row = Cline_row;
  	if (curwin->w_p_wrap)			/* long line wrapping, adjust curwin->w_row */
+ #ifdef KANJI
+ 	{
+ 		char_u	*	p = ml_get_buf(curbuf, curwin->w_cursor.lnum, FALSE);
+ 		colnr_t		col  = curwin->w_p_nu ? 8 : 0;
+ 
+ 		if (curwin->w_col >= Columns)
+ 		{
+ 			while (*p)
+ 			{
+ 				if (ISkanji(*p))
+ 				{
+ 					p += 2;
+ 					if (col == (Columns - 1))
+ 					{
+ 						col = 2;
+ 						curwin->w_row++;
+ 						curwin->w_col -= (Columns - 1);
+ 						if (curwin->w_col < Columns)
+ 							break;
+ 					}
+ 					else
+ 						col += 2;
+ 				}
+ 				else
+ 				{
+ 					col += chartabsize(*p, col);
+ 					p++;
+ 				}
+ 				if (col >= Columns)
+ 				{
+ 					col -= Columns;
+ 					curwin->w_row++;
+ 					curwin->w_col -= Columns;
+ 					if (curwin->w_col < Columns)
+ 						break;
+ 				}
+ 			}
+ 		}
+ 		if (curwin->w_col == (Columns - 1) && ISkanjiCur() == 1)
+ 		{
+ 			curwin->w_col = 0;
+ 			curwin->w_row++;
+ 		}
+ 		else if (curwin->w_col >= Columns)
+ 		{
+ 			curwin->w_col -= Columns;
+ 			curwin->w_row++;
+ 		}
+ 	}
+ #else
  		while (curwin->w_col >= Columns)
  		{
  			curwin->w_col -= Columns;
  			curwin->w_row++;
  		}
+ #endif
  	else if (scroll)	/* no line wrapping, compute curwin->w_leftcol if scrolling is on */
  						/* if scrolling is off, curwin->w_leftcol is assumed to be 0 */
  	{
***************
*** 1426,1435 ****
--- 1747,1766 ----
  	for (col = pos->col; col >= 0; --col)
  	{
  		c = *ptr++;
+ #ifdef KANJI
+ 		if (ISkanji(c))
+ 			ptr++;
+ 		else
+ #endif
  		if (c == NUL)		/* make sure we don't go past the end of the line */
  			break;
  
  		/* A tab gets expanded, depending on the current column */
+ #ifdef KANJI
+ 		if (ISkanji(c))
+ 			incr = 2;
+ 		else
+ #endif
  		incr = chartabsize(c, (long)vcol);
  
  		if (col == 0)		/* character at pos.col */
***************
*** 1439,1444 ****
--- 1770,1779 ----
  			else
  				break;
  		}
+ #ifdef KANJI
+ 		if (ISkanji(c))
+ 			col--;
+ #endif
  		vcol += incr;
  	}
  	return vcol;
***************
*** 1769,1774 ****
--- 2104,2112 ----
  				LinePointers[j + nlines] = LinePointers[j];
  		LinePointers[j + nlines] = temp;
  		memset((char *)temp, ' ', (size_t)Columns);
+ #ifdef KANJI
+ 		memset((char *)&temp[Columns], 0, (size_t)Columns);
+ #endif
  	}
  	return OK;
  }
***************
*** 1855,1860 ****
--- 2193,2201 ----
  			LinePointers[j - nlines] = LinePointers[j];
  		LinePointers[j - nlines] = temp;
  		memset((char *)temp, ' ', (size_t)Columns);
+ #ifdef KANJI
+ 		memset((char *)&temp[Columns], 0, (size_t)Columns);
+ #endif
  	}
  	return OK;
  }
diff -crN ../orig/src/search.c ./src/search.c
*** ../orig/src/search.c	Wed Aug 10 13:54:10 1994
--- ./src/search.c	Sun Dec 27 09:22:52 1998
***************
*** 14,19 ****
--- 14,22 ----
  #include "proto.h"
  #include "param.h"
  #include "ops.h"		/* for mincl */
+ #ifdef KANJI
+ #include "kanji.h"
+ #endif
  
  /* modified Henry Spencer's regular expression routines */
  #include "regexp.h"
***************
*** 58,63 ****
--- 61,467 ----
  
  static int		want_start;				/* looking for start of line? */
  
+ #ifdef USE_GREP
+ typedef struct grep {
+ 	int					left;			/* or search						*/
+ 	int					next;			/* and search						*/
+ 	int					not;			/* not search						*/
+ 	regexp			*	prog;			/* regexec parameter				*/
+ 	char_u			*	str;			/* original string pointer			*/
+ } GREP;
+ static GREP				g_dmy;
+ static GREP			*	gpattern = &g_dmy;
+ static int				g_max	= 0;
+ static int				p_grep	= 0;
+ static int				p_wn	= FALSE;
+ static int				p_join	= FALSE;
+ static int				p_icase	= FALSE;
+ static int				p_jicase= FALSE;
+ 
+ static char_u * skip_grepregexp __ARGS((char_u *, int));
+ static int grepsub __ARGS((GREP *, char_u *, int, linenr_t, int *, char_u **, char_u **));
+ static int grepexec __ARGS((regexp *, char_u *, int, linenr_t));
+ static int do_wrapnext __ARGS((int));
+ 
+ static char_u *
+ skip_grepregexp(orgstr, dirc)
+ char_u		*	orgstr;
+ int				dirc;
+ {
+ 	regexp	*	prog;
+ 	char_u		pattern[CMDBUFFSIZE];
+ 	char_u	*	p;
+ 	char_u	*	str;
+ 	int			no;
+ 	int			not;
+ 	int			and;
+ 	char_u	*	firstp = NULL;
+ 
+ 	for (no = 0; no < g_max; no++)
+ 	{
+ 		if (gpattern[no].prog)
+ 			free(gpattern[no].prog);
+ 		memset((char *)&gpattern[no], 0, sizeof(GREP));
+ 	}
+ 	p_grep	= 0;
+ 	p_wn	= FALSE;
+ 	p_join	= FALSE;
+ 	p_icase	= FALSE;
+ 	p_jicase= FALSE;
+ 	firstp	= skip_regexp(orgstr, dirc);
+ 	strcpy(pattern, orgstr);
+ 	str		= pattern;
+ 	no		= 0;
+ 	not		= FALSE;
+ 	and		= FALSE;
+ 	for (;;)
+ 	{
+ 		p = skip_regexp(str, dirc);
+ 		if (*p == dirc && p[1] != NUL)
+ 		{
+ 			*p++ = NUL;
+ 			if ((prog = regcomp(str)) == NULL)
+ 				goto error;
+ 			else
+ 			{
+ 				if (no >= g_max)
+ 				{
+ 					GREP	*	p;
+ 
+ 					if ((p = (GREP *)malloc(sizeof(GREP) * (g_max + 1))) == NULL)
+ 						goto error;
+ 					memset((char *)p, 0, sizeof(GREP) * (g_max + 1));
+ 					memcpy(p, gpattern, sizeof(GREP) * g_max);
+ 					g_max++;
+ 					if (gpattern != &g_dmy)
+ 						free(gpattern);
+ 					gpattern = p;
+ 				}
+ 				gpattern[no].not = not;
+ 				gpattern[no].prog= prog;
+ 				gpattern[no].str = str;
+ 				if (no != 0)
+ 				{
+ 					if (and)
+ 						gpattern[no - 1].next = no;
+ 					else
+ 						gpattern[no - 1].left = no;
+ 				}
+ 				no++;
+ 				not = FALSE;
+ 				and = FALSE;
+ 			}
+ 			if (strncmp(p, "&&",  2) == 0 && p[2] == dirc)
+ 			{
+ 				and = TRUE;
+ 				p  += 3;
+ 			}
+ 			else if (strncmp(p, "&&~", 3) == 0 && p[3] == dirc)
+ 			{
+ 				and = TRUE;
+ 				not = TRUE;
+ 				p  += 4;
+ 			}
+ 			else if (strncmp(p, "||",  2) == 0 && p[2] == dirc)
+ 				p  += 3;
+ 			else if (strncmp(p, "||~", 3) == 0 && p[3] == dirc)
+ 			{
+ 				not = TRUE;
+ 				p  += 4;
+ 			}
+ 			else if (strchr("jlLwWiIcC", *p) != NULL)
+ 			{
+ 				while (*p)
+ 				{
+ 					if (*p == 'W')
+ 					{
+ 						p++;
+ 						p_wn = TRUE;
+ 						if (p_grep == 0)
+ 							p_grep = 1;
+ 					}
+ 					else if (*p == 'w')
+ 					{
+ 						char_u	*	w;
+ 						int			i;
+ 
+ 						p++;
+ 						for (i = 0; i < no; i++)
+ 						{
+ 							if ((w = malloc(strlen(gpattern[i].str) + 5)) == NULL)
+ 								goto error;
+ 							strcpy(w, "\\<");
+ 							strcat(w, gpattern[i].str);
+ 							strcat(w, "\\>");
+ 							if ((prog = regcomp(w)) == NULL)
+ 							{
+ 								free(w);
+ 								goto error;
+ 							}
+ 							free(gpattern[i].prog);
+ 							gpattern[i].prog= prog;
+ 							free(w);
+ 						}
+ 						if (p_grep == 0)
+ 							p_grep = 1;
+ 					}
+ 					else if (*p == 'J')
+ 					{
+ 						p++;
+ 						p_join = TRUE;
+ 						if (p_grep <= 1)
+ 							p_grep = 2;
+ 					}
+ 					else if (*p == 'l' || *p == 'L')
+ 					{
+ 						p++;
+ 						if (isdigit(*p))
+ 							p_grep = atol((char *)p);
+ 						else						/* single */
+ 							p_grep = 1;
+ 						while (isdigit(*p))			/* skip number */
+ 							++p;
+ 					}
+ 					else if (*p == 'i' || *p == 'I')
+ 					{
+ 						p++;
+ 						p_icase = TRUE;
+ 						if (p_grep == 0)
+ 							p_grep = 1;
+ 					}
+ 					else if (*p == 'j' || *p == 'C')
+ 					{
+ 						p++;
+ 						p_jicase = TRUE;
+ 						if (p_grep == 0)
+ 							p_grep = 1;
+ 					}
+ 					else if (*p == dirc)
+ 					{
+ 						p++;
+ 						break;
+ 					}
+ 					else
+ 						break;
+ 				}
+ 				firstp = orgstr + (p - pattern);
+ 				break;
+ 			}
+ 			else
+ 				break;
+ 			str = p;
+ 		}
+ 		else
+ 			break;
+ 	}
+ 	return(firstp);
+ error:
+ 	if (gpattern[0].prog != NULL)
+ 		free(gpattern[0].prog);
+ 	gpattern[0].prog = NULL;
+ 	return(firstp);
+ }
+ 
+ static int
+ grepsub(gp, string, at_bol, lnum, look, match, matchend)
+ register GREP *gp;
+ register char_u  *string;
+ int 			at_bol;
+ linenr_t		lnum;
+ int			*	look;
+ char_u		**	match;
+ char_u		**	matchend;
+ {
+ 	linenr_t		i;
+ 	int				found = FALSE;
+ 
+ 	if (p_join)
+ 	{
+ 		long				n = 0;
+ 		char_u			*	p;
+ 		char_u			*	cp;
+ 		char_u			*	ep;
+ 		int					kanji = FALSE;
+ 
+ 		for (i = 0; i < p_grep; i++)
+ 		{
+ 			if (lnum + i > curbuf->b_ml.ml_line_count)
+ 				break;
+ 			n += strlen(i == 0 ? string : ml_get(lnum + i));
+ 		}
+ 		if ((p = malloc(n + p_grep + 1)) == NULL)
+ 			return(FALSE);
+ 		p[0] = '\0';
+ 		for (i = 0; i < p_grep; i++)
+ 		{
+ 			if (lnum + i > curbuf->b_ml.ml_line_count)
+ 				break;
+ 			cp = (i == 0) ? string : ml_get(lnum + i);
+ 			while (i != 0 && *cp)
+ 			{
+ 				if (*cp == ' ' || *cp == '\t')
+ 					cp++;
+ 				else if (ISkanji(*cp))
+ 				{
+ 					if (cp[0] == 0x81 && cp[1] == 0x40)
+ 						cp += 2;
+ 					else
+ 						break;
+ 				}
+ 				else
+ 					break;
+ 			}
+ 			if (i != 0)
+ 			{
+ 				if (ISkanji(*cp) && kanji)
+ 					;
+ 				else
+ 					strcat(p, " ");
+ 			}
+ 			ep = p + strlen(p);
+ 			strcat(p, cp);
+ 			cp = ep;
+ 			ep = NULL;
+ 			while (*cp)
+ 			{
+ 				if (*cp == ' ' || *cp == '\t')
+ 				{
+ 					if (ep == NULL)
+ 						ep = cp;
+ 				}
+ 				else if (ISkanji(*cp) && cp[0] == 0x81 && cp[1] == 0x40)
+ 				{
+ 					if (ep == NULL)
+ 						ep = cp;
+ 					cp++;
+ 				}
+ 				else
+ 				{
+ 					ep = NULL;
+ 					if (ISkanji(*cp))
+ 					{
+ 						kanji = TRUE;
+ 						cp++;
+ 					}
+ 					else
+ 						kanji = FALSE;
+ 				}
+ 				cp++;
+ 			}
+ 			if (ep != NULL)
+ 				*ep = '\0';
+ 		}
+ 		if (regexec(gp->prog, p, at_bol))
+ 		{
+ 			if (gp->prog->startp[0] < (p + strlen(string)))
+ 			{
+ 				*look = TRUE;
+ 				if (*match == NULL
+ 							|| *match > (string + (gp->prog->startp[0] - p)))
+ 				{
+ 					*match = string + (gp->prog->startp[0] - p);
+ 					if ((gp->prog->endp[0] - p) > strlen(string))
+ 						*matchend = string + strlen(string);
+ 					else
+ 						*matchend = string + (gp->prog->endp[0] - p);
+ 				}
+ 			}
+ 			found = TRUE;
+ 		}
+ 		free(p);
+ 	}
+ 	else
+ 	{
+ 		for (i = 0; i < p_grep; i++)
+ 		{
+ 			if (lnum + i > curbuf->b_ml.ml_line_count)
+ 				break;
+ 			if (regexec(gp->prog, i == 0 ? string : ml_get(lnum + i), at_bol))
+ 			{
+ 				if (i == 0)
+ 				{
+ 					*look = TRUE;
+ 					if (*match == NULL || *match > gp->prog->startp[0])
+ 					{
+ 						*match = gp->prog->startp[0];
+ 						*matchend = gp->prog->endp[0];
+ 					}
+ 				}
+ 				found = TRUE;
+ 				break;
+ 			}
+ 		}
+ 	}
+ 	if (gp->not && !found)
+ 		found = TRUE;
+ 	else if (gp->not && found)
+ 		found = FALSE;
+ 	if (!found && gp->left)
+ 		found = grepsub(&gpattern[gp->left], string, at_bol, lnum, look, match, matchend);
+ 	if (found && gp->next)
+ 		return(grepsub(&gpattern[gp->next], string, at_bol, lnum, look, match, matchend));
+ 	if (found && gp->next == 0)
+ 		return(TRUE);
+ 	return(FALSE);
+ }
+ 
+ static int
+ grepexec(prog, string, at_bol, lnum)
+ register regexp *prog;
+ register char_u  *string;
+ int 			at_bol;
+ linenr_t		lnum;
+ {
+ 	int				look = FALSE;
+ 	char_u		*	match		= NULL;
+ 	char_u		*	matchend	= NULL;
+ 
+ 	if (p_grep == 0)
+ 		return(regexec(prog, string, at_bol));
+ 	if (grepsub(&gpattern[0], string, at_bol, lnum, &look, &match, &matchend))
+ 	{
+ 		prog->startp[0] = match;
+ 		prog->endp[0] = matchend;
+ 		return(look);
+ 	}
+ 	return(FALSE);
+ }
+ 
+ static int
+ do_wrapnext(dir)
+ int			dir;
+ {
+ 	int			other = TRUE;
+ 	int			more = p_more;
+ 	int			i;
+ 
+ 	if (!p_wn)
+ 		return(FAIL);
+ 	if (got_int)
+ 		return(FAIL);
+ 	i = curwin->w_arg_idx + dir;
+ 	if (i < 0 || i >= arg_count)
+ 		return(FAIL);
+ 	if (p_hid)
+ 		other = otherfile(fix_fname(arg_files[i]));
+ 	if ((!p_hid || !other)
+ 			&& (curbuf->b_changed && (!other || curbuf->b_nwindows <= 1)
+ 										&& (autowrite(curbuf) == FAIL)))
+ 		return(FAIL);
+ 	curwin->w_arg_idx = i;
+ 	p_more = FALSE;
+ 	++no_wait_return;
+ 	(void)doecmd(arg_files[curwin->w_arg_idx], NULL, NULL, p_hid, (linenr_t)0);
+ 	--no_wait_return;
+ 	p_more = more;
+ 	breakcheck();
+ 	if (got_int)
+ 		return(FAIL);
+ 	flushbuf();
+ 	return(OK);
+ }
+ #endif
+ 
  /*
   * translate search pattern for regcomp()
   *
***************
*** 138,143 ****
--- 542,562 ----
  
  	want_start = (*pat == '^');		/* looking for start of line? */
  	reg_ic = p_ic;					/* tell the regexec routine how to search */
+ #ifdef KANJI
+ 	reg_jic = p_jic;				/* tell the regexec routine how to search */
+ #endif
+ #ifdef USE_GREP
+ 	reg_ic = reg_ic ? reg_ic : p_icase;
+ # ifdef KANJI
+ 	reg_jic = reg_jic ? reg_jic : p_jicase;
+ # endif
+ 	if (p_grep && sub_cmd == 0 && which_pat == 2 && gpattern[0].prog != NULL)
+ 	{
+ 		if ((retval = malloc(sizeof(regexp))) != NULL)
+ 			memcpy(retval, gpattern[0].prog, sizeof(regexp));
+ 	}
+ 	else
+ #endif
  	retval = regcomp(pat);
  	return retval;
  }
***************
*** 166,171 ****
--- 585,594 ----
  	register int		i;
  	register char_u		*match, *matchend;
  	int 				loop;
+ #ifdef USE_GREP
+ 	int					wscan = p_ws;
+ 	long				fcount= count;
+ #endif
  
  	if ((prog = myregcomp(str, 0, 2)) == NULL)
  	{
***************
*** 176,192 ****
--- 599,637 ----
  /*
   * find the string
   */
+ #ifdef USE_GREP
+ 	if (p_wn)
+ 		p_ws = FALSE;
+ retry:
+ #endif
  	found = 1;
  	while (count-- && found)    /* stop after count matches, or no more matches */
  	{
  		startlnum = pos->lnum;	/* remember start of search for detecting no match */
  		found = 0;				/* default: not found */
  
+ #ifdef KANJI
+ 		i = pos->col;
+ 		lnum = pos->lnum;
+ 		if (dir == FORWARD)
+ 		{
+ 			i += ISkanjiCol(lnum, i) == 1 ? 2 : 1;
+ 		}
+ 		else /* dir == BACKWARD */
+ 		{
+ 			i --;
+ 			if (i < 0)
+ 				-- lnum;
+ 			else if (ISkanjiCol(lnum, i) == 2)
+ 				i --;
+ 		}
+ #else
  		i = pos->col + dir; 	/* search starts one postition away */
  		lnum = pos->lnum;
  
  		if (dir == BACKWARD && i < 0)
  			--lnum;
+ #endif
  
  		for (loop = 0; loop != 2; ++loop)   /* do this twice if 'wrapscan' is set */
  		{
***************
*** 200,206 ****
--- 645,655 ----
  					s += i;
  				}
  
+ #ifdef USE_GREP
+ 				if (grepexec(prog, s, dir == BACKWARD || i <= 0, lnum))
+ #else
  				if (regexec(prog, s, dir == BACKWARD || i <= 0))
+ #endif
  				{							/* match somewhere on line */
  					match = prog->startp[0];
  					matchend = prog->endp[0];
***************
*** 211,217 ****
--- 660,674 ----
  						 * we have to get the last one. Or the last one before
  						 * the cursor, if we're on that line.
  						 */
+ #ifdef KANJI
+ # ifdef USE_GREP
+ 						while (*match && grepexec(prog, match + (ISkanji(*match) ? 2 : 1), (int)FALSE, lnum))
+ # else
+ 						while (*match && regexec(prog, match + (ISkanji(*match) ? 2 : 1), (int)FALSE))
+ # endif
+ #else
  						while (*match != NUL && regexec(prog, match + 1, (int)FALSE))
+ #endif
  						{
  							if ((i >= 0) && ((prog->startp[0] - s) > i))
  								break;
***************
*** 229,234 ****
--- 686,694 ----
  					else
  						pos->col = (int) (match - ptr);
  					found = 1;
+ #ifdef USE_GREP
+ 					fcount--;
+ #endif
  					break;
  				}
  				/* breakcheck is slow, do it only once in 16 lines */
***************
*** 251,256 ****
--- 711,725 ----
  			 * is redrawn. The keep_msg is cleared whenever another message is
  			 * written.
  			 */
+ #ifndef notdef
+ 			if (msg_scrolled && !p_terse && message)
+ 			{
+ 				if (must_redraw < NOT_VALID)
+ 					must_redraw = NOT_VALID;
+ 				redraw_cmdline = TRUE;
+ 				msg_scrolled = 0;
+ 			}
+ #endif
  			if (dir == BACKWARD)    /* start second loop at the other end */
  			{
  				lnum = curbuf->b_ml.ml_line_count;
***************
*** 273,278 ****
--- 742,772 ----
  		if (got_int)
  			break;
  	}
+ #ifdef USE_GREP
+ 	if (fcount && !got_int && p_wn)
+ 	{
+ 		found = 0;
+ 		if (do_wrapnext(dir) == OK)
+ 		{
+ 			if (must_redraw)
+ 				updateScreen(must_redraw);
+ 			flushbuf();
+ 			count = fcount;
+ 			if (dir == BACKWARD)
+ 			{
+ 				pos->lnum = curbuf->b_ml.ml_line_count;
+ 				pos->col  = strlen(ml_get(pos->lnum));
+ 			}
+ 			else
+ 			{
+ 				pos->lnum = 1;
+ 				pos->col  = -1;
+ 			}
+ 			goto retry;
+ 		}
+ 	}
+ 	p_ws = wscan;
+ #endif
  
  	free(prog);
  
***************
*** 368,374 ****
--- 862,872 ----
  		 * Find end of regular expression.
  		 * If there is a matching '/' or '?', toss it.
  		 */
+ #ifdef USE_GREP
+ 		p = skip_grepregexp(str, dirc);
+ #else
  		p = skip_regexp(str, dirc);
+ #endif
  		if (*p == dirc)
  		{
  			dircp = p;		/* remember where we put the NUL */
***************
*** 515,527 ****
--- 1013,1033 ----
   * Repeat this 'count' times.
   */
  	int
+ #ifndef KANJI
  searchc(c, dir, type, count)
+ #else
+ searchc(c, k, dir, type, count)
+ 	int				k;
+ #endif
  	int 			c;
  	register int	dir;
  	int 			type;
  	long			count;
  {
  	static int	 	lastc = NUL;	/* last character searched for */
+ #ifdef KANJI
+ 	static int		lastk = NUL;
+ #endif
  	static int		lastcdir;		/* last direction of character search */
  	static int		lastctype;		/* last type of search ("find" or "to") */
  	register int	col;
***************
*** 531,536 ****
--- 1037,1045 ----
  	if (c != NUL)       /* normal search: remember args for repeat */
  	{
  		lastc = c;
+ #ifdef KANJI
+ 		lastk = k;
+ #endif
  		lastcdir = dir;
  		lastctype = type;
  	}
***************
*** 560,573 ****
--- 1069,1109 ----
  	{
  			for (;;)
  			{
+ #ifdef KANJI
+ 				if (dir > 0 && ISkanji(p[col])) col ++;
+ 				col += dir;
+ 				if (dir < 0 && ISkanjiPosition(p, col + 1) == 2) col --;
+ 
+ 				if (col < 0 || col >= len)
+ 					return FALSE;
+ 
+ 				if (ISkanji(p[col]))
+ 				{
+ 					if (p[col] == lastc && p[col + 1] == lastk)
+ 						break;
+ 				}
+ 				else if (p[col] == lastc)
+ 					break;
+ #else
  				if ((col += dir) < 0 || col >= len)
  					return FALSE;
  				if (p[col] == lastc)
  						break;
+ #endif
  			}
  	}
  	if (lastctype)
+ #ifdef KANJI
+ 	{
+ 		if (dir < 0 && ISkanji(p[col]))
+ 			col ++;
  		col -= dir;
+ 		if (dir > 0 && ISkanjiPosition(p, col + 1) == 2)
+ 			col --;
+     }
+ #else
+ 		col -= dir;
+ #endif
  	curwin->w_cursor.col = col;
  	return TRUE;
  }
***************
*** 590,596 ****
--- 1126,1136 ----
  	int				c;
  	int 			count = 0;			/* cumulative number of braces */
  	int 			idx = 0;			/* init for gcc */
+ #ifdef notdef
  	static char_u 	table[6] = {'(', ')', '[', ']', '{', '}'};
+ #else
+ 	static char_u 	table[8] = {'(', ')', '[', ']', '{', '}', '<', '>'};
+ #endif
  	int 			inquote = 0;		/* non-zero when inside quotes */
  	register char_u	*linep;				/* pointer to current line */
  	register char_u	*ptr;
***************
*** 606,618 ****
  	 */
  	if (initc != NUL)
  	{
! 		for (idx = 0; idx < 6; ++idx)
  			if (table[idx] == initc)
  			{
  				initc = table[idx = idx ^ 1];
  				break;
  			}
! 		if (idx == 6)			/* invalid initc! */
  			return NULL;
  	}
  	/*
--- 1146,1158 ----
  	 */
  	if (initc != NUL)
  	{
! 		for (idx = 0; idx < (sizeof(table)/sizeof(char_u)); ++idx)
  			if (table[idx] == initc)
  			{
  				initc = table[idx = idx ^ 1];
  				break;
  			}
! 		if (idx == (sizeof(table)/sizeof(char_u)))			/* invalid initc! */
  			return NULL;
  	}
  	/*
***************
*** 669,682 ****
  				if (initc == NUL)
  					break;
  
! 				for (idx = 0; idx < 6; ++idx)
  					if (table[idx] == initc)
  						break;
! 				if (idx != 6)
  					break;
  				++pos.col;
  			}
! 			if (idx == 6)
  			{
  				if (linep[0] == '#')
  					hash_dir = 1;
--- 1209,1229 ----
  				if (initc == NUL)
  					break;
  
! #ifdef KANJI
! 				if (ISkanji(initc))
! 				{
! 					pos.col += 2;
! 					continue;
! 				}
! #endif
! 				for (idx = 0; idx < (sizeof(table)/sizeof(char_u)); ++idx)
  					if (table[idx] == initc)
  						break;
! 				if (idx != (sizeof(table)/sizeof(char_u)))
  					break;
  				++pos.col;
  			}
! 			if (idx == (sizeof(table)/sizeof(char_u)))
  			{
  				if (linep[0] == '#')
  					hash_dir = 1;
***************
*** 760,765 ****
--- 1307,1315 ----
  		 * Go to the next position, forward or backward. We could use
  		 * inc() and dec() here, but that is much slower
  		 */
+ #ifdef KANJI
+ skip:
+ #endif
  		if (idx)              			/* backward search */
  		{
  			if (pos.col == 0)   		/* at start of line, go to previous one */
***************
*** 776,781 ****
--- 1326,1338 ----
  			}
  			else
  				--pos.col;
+ #ifdef KANJI
+ 			if (linep[pos.col] && ISkanjiPosition(linep, pos.col + 1))
+ 			{
+ 				pos.col--;
+ 				goto skip;
+ 			}
+ #endif
  		}
  		else							/* forward search */
  		{
***************
*** 793,798 ****
--- 1350,1362 ----
  			}
  			else
  				++pos.col;
+ #ifdef KANJI
+ 			if (ISkanjiPosition(linep, pos.col + 1))
+ 			{
+ 				pos.col++;
+ 				goto skip;
+ 			}
+ #endif
  		}
  
  		if (comment_dir)
***************
*** 812,817 ****
--- 1376,1384 ----
  			 */
  			for (ptr = linep; *ptr; ++ptr)
  				if (*ptr == '"' && (ptr == linep || ptr[-1] != '\\') &&
+ #ifdef KANJI
+ 					(ptr > linep ? !ISkanjiPointer(linep, &ptr[-1]) : TRUE) &&
+ #endif
  							(ptr == linep || ptr[-1] != '\'' || ptr[1] != '\''))
  					++do_quotes;
  			do_quotes &= 1;			/* result is 1 with even number of quotes */
***************
*** 999,1005 ****
--- 1566,1578 ----
  
  		/* go back to the previous non-blank char */
  		while ((c = gchar(&pos)) == ' ' || c == '\t' ||
+ #ifdef KANJI
+ 				(dir == BACKWARD &&
+ 					(STRCHR(".!?)]\"'", c) != NULL || isjsend(ml_get_pos(&pos)))
+ 					&& c != NUL))
+ #else
  					(dir == BACKWARD && strchr(".!?)]\"'", c) != NULL && c != NUL))
+ #endif
  			if (decl(&pos) == -1)
  				break;
  
***************
*** 1015,1028 ****
--- 1588,1609 ----
  					++pos.lnum;
  				break;
  			}
+ #ifdef KANJI
+ 			if (c == '.' || c == '!' || c == '?' || isjsend(ml_get_pos(&pos)))
+ #else
  			if (c == '.' || c == '!' || c == '?')
+ #endif
  			{
  				tpos = pos;
  				do
  					if ((c = inc(&tpos)) == -1)
  						break;
  				while (strchr(")}\"'", c = gchar(&tpos)) != NULL && c != NUL);
+ #ifdef KANJI
+ 				if (ISkanji(c) || c == -1  || c == ' ' || c == '\t' || c == NUL)
+ #else
  				if (c == -1  || c == ' ' || c == '\t' || c == NUL)
+ #endif
  				{
  					pos = tpos;
  					if (gchar(&pos) == NUL) /* skip NUL at EOL */
***************
*** 1180,1185 ****
--- 1761,1792 ----
  	register int c;
  
  	c = gchar_cursor();
+ #ifdef KANJI
+ 	if (ISkanji(c))
+ 	{
+ 		int		ret;
+ 
+ 		if ((stype != 0) && (p_ww & 64))
+ 			return 1;
+ 		if ((stype != 0) && (p_ww & 32))
+ 			return JPC_HIRA;
+ 		if ((ret = jpcls(c, *(ml_get_cursor() + 1))) >= 0)
+ 		{
+ 			if (ret != JPC_KIGOU && stype != 0)
+ 				return JPC_HIRA;
+ 			else
+ 				return ret;
+ 		}
+ 	}
+ 	if (ISkana(c))
+ 	{
+ 		if ((stype != 0) && (p_ww & 64))
+ 			return 1;
+ 		if ((stype != 0) && (p_ww & 32))
+ 			return JPC_HIRA;
+ 		return JPC_KANA;
+ 	}
+ #endif
  	if (c == ' ' || c == '\t' || c == NUL)
  		return 0;
  
diff -crN ../orig/src/structs.h ./src/structs.h
*** ../orig/src/structs.h	Wed Aug 10 13:54:10 1994
--- ./src/structs.h	Sat Dec 18 15:45:24 1999
***************
*** 104,110 ****
  /*
   * stuctures used in undo.c
   */
! #ifdef UNIX
  # define ALIGN_LONG		/* longword alignment and use filler byte */
  # define ALIGN_SIZE (sizeof(long))
  #else
--- 104,110 ----
  /*
   * stuctures used in undo.c
   */
! #if defined(UNIX) || defined(NT)
  # define ALIGN_LONG		/* longword alignment and use filler byte */
  # define ALIGN_SIZE (sizeof(long))
  #else
***************
*** 363,371 ****
  	char			 b_did_warn;		/* Set to 1 if user has been warned on
  										 * first change of a read-only file */
  
! #ifndef MSDOS
  	int				 b_shortname;		/* this file has an 8.3 filename */
  #endif
  };
  
  /*
--- 363,395 ----
  	char			 b_did_warn;		/* Set to 1 if user has been warned on
  										 * first change of a read-only file */
  
! #if !defined(MSDOS) || defined(NT)
  	int				 b_shortname;		/* this file has an 8.3 filename */
  #endif
+ #ifdef KANJI
+ 	char			*b_p_jc;			/* kanji file code */
+ #endif
+ #ifdef FEPCTRL
+ 	int				 b_p_fc;			/* fep control */
+ 	int				 fepmode;			/* fep current status */
+ 	char_u			*b_p_ji;			/* keep ASC/JP insert mode */
+ 	long			 knj_asc;			/* for automatic change of p_ji */
+ #endif
+ #ifdef TRACK
+ 	char_u			*b_p_trs;			/* track character set */
+ 	int				 b_p_tt;			/* transparent track mode */
+ #endif
+ #if defined(NT) && defined(USE_EXFILE) && defined(USE_MATOME)
+ 	char			*b_p_ec;			/* encode type nothing */
+ #endif
+ #ifdef USE_OPT
+ 	long			 b_p_opt;			/* option mode */
+ # define FOPT_MAC_FILE			0x0100		/* macintosh file */
+ # define FOPT_EXTEND			0x00ff		/* option mask */
+ # define FOPT_DEL_SPC			0x0001		/* delete line end spaces */
+ # define FOPT_EXPAND_TAB		0x0002		/* expand tab */
+ # define FOPT_REP_SPC			0x0004		/* replace kanji space */
+ #endif
  };
  
  /*
***************
*** 442,447 ****
--- 466,474 ----
  				w_p_nu,
  				w_p_wrap;
  	long		w_p_scroll;
+ #ifdef CRMARK
+ 	int			w_p_cr;
+ #endif
  
  	/*
  	 * The w_prev_pcmark field is used to check whether we really did jump to
Only in ../orig/src: sun_stdl.h
diff -crN ../orig/src/tag.c ./src/tag.c
*** ../orig/src/tag.c	Wed Aug 10 13:54:10 1994
--- ./src/tag.c	Tue Dec 28 19:12:20 1999
***************
*** 190,195 ****
--- 190,198 ----
  	int			i;
  	int			save_secure;
  	int			save_p_ws;
+ #ifdef NT	/* VC 5.0 bug */
+ 	int			last = FALSE;
+ #endif
  
  	if (tag == NULL)		/* out of memory condition */
  		return 0;
***************
*** 209,220 ****
--- 212,246 ----
  			}
  			sbuf[i] = *np++;
  		}
+ #ifdef NT	/* VC 5.0 bug */
+ 		if (last)
+ 			break;
+ 		if (*np == NUL)
+ 			last = TRUE;
+ #endif
  		sbuf[i] = 0;
+ #ifdef KANJI
+ 		if ((tp = fopen(fileconvsto(sbuf), "r")) == NULL)
+ #else
  		if ((tp = fopen((char *)sbuf, "r")) == NULL)
+ #endif
  			continue;
  		reg_ic = p_ic;										/* for cstrncmp() */
  		while (fgets((char *)lbuf, LSIZE, tp) != NULL)
  		{
+ #ifndef notdef
+ 			if (strlen(lbuf) == (LSIZE - 1) && lbuf[strlen(lbuf) - 1] != '\n')
+ 			{
+ 				int			c;
+ 
+ 				while ((c = fgetc(tp)) != EOF)
+ 				{
+ 					if (c == '\n')
+ 						break;
+ 				}
+ 				continue;
+ 			}
+ #endif
  			m = (char_u *)"Format error in tags file %s";	/* default error message */
  			marg = sbuf;
  
***************
*** 227,233 ****
--- 253,261 ----
  
  			if (cstrncmp(lbuf, tag, cmplen) == 0)	/* Tag found */
  			{
+ #ifdef notdef
  				fclose(tp);
+ #endif
  				skipspace(&fname);
  
  			/* find start of search command, after second white space */
***************
*** 279,284 ****
--- 307,319 ----
  										++str;
  										continue;
  									}
+ #ifndef notdef
+ 									if (STRNCMP(str + 1, ";\"\t", 3) == 0)
+ 									{
+ 										str[1] = NUL;
+ 										break;
+ 									}
+ #endif
  						case '[':
  									if (!p_magic)
  										break;
***************
*** 291,297 ****
--- 326,336 ----
  					}
  				}
  				else		/* not a search command, just copy it */
+ #ifdef MSDOS
+ 					for (p = pbuf; *str && *str != '\n' && *str != '\r'; )
+ #else
  					for (p = pbuf; *str && *str != '\n'; )
+ #endif
  						*p++ = *str++;
  				*p = NUL;
  
***************
*** 311,323 ****
--- 350,369 ----
  				/*
  				 * check if file for tag exists before abandoning current file
  				 */
+ #ifdef KANJI
+ 				if (getperm(fileconvsto(fname)) < 0)
+ #else
  				if (getperm(fname) < 0)
+ #endif
  				{
  					m = (char_u *)"File \"%s\" does not exist";
  					marg = fname;
  					goto erret;
  				}
  
+ #ifndef notdef
+ 				fclose(tp);
+ #endif
  				RedrawingDisabled = TRUE;
  				/*
  				 * if it was a CTRL-W CTRL-] command split window now
***************
*** 445,451 ****
--- 491,501 ----
  			tag_file[i] = *np++;
  		tag_file[i] = NUL;
  		skipspace(&np);
+ #ifdef KANJI
+ 		if ((fp = fopen(fileconvsto(tag_file), "r")) == NULL)
+ #else
  		if ((fp = fopen((char *)tag_file, "r")) == NULL)
+ #endif
  			continue;
  		lnum = 0;
  		while (!vim_fgets(line, LSIZE, fp, &lnum))
***************
*** 464,469 ****
--- 514,520 ----
  						/* We'll miss some matches, oh well */
  						*file = matches;
  						*num_file = index;
+ 						fclose(fp);
  						return OK;
  					}
  					for (i = 0; i < index; i++)
***************
*** 474,479 ****
--- 525,531 ----
  				matches[index++] = strsave(line);
  			}
  		}
+ 		fclose(fp);
  	}
  	if (index > 0)
  	{
Only in ../orig/src: tags
Only in ../orig/src: tcconfig.tc
diff -crN ../orig/src/term.c ./src/term.c
*** ../orig/src/term.c	Wed Aug 10 13:54:10 1994
--- ./src/term.c	Sun Nov 28 17:36:08 1999
***************
*** 19,34 ****
  #include "globals.h"
  #include "param.h"
  #include "proto.h"
  #ifdef TERMCAP
  # ifdef linux
  #  include <termcap.h>
  #  if 0		/* only required for old versions, it's now in termcap.h */
      typedef int (*outfuntype) (int);
  #  endif
! #  define TPUTSFUNCAST (outfuntype)
  # else
  #  define TPUTSFUNCAST
! #  ifdef AMIGA
  #   include "proto/termlib.pro"
  #  endif
  # endif
--- 19,37 ----
  #include "globals.h"
  #include "param.h"
  #include "proto.h"
+ #ifdef KANJI
+ #include "kanji.h"
+ #endif
  #ifdef TERMCAP
  # ifdef linux
  #  include <termcap.h>
  #  if 0		/* only required for old versions, it's now in termcap.h */
      typedef int (*outfuntype) (int);
  #  endif
! #  define TPUTSFUNCAST
  # else
  #  define TPUTSFUNCAST
! #  if defined(AMIGA) || defined(MSDOS)	/* DOSGEN */
  #   include "proto/termlib.pro"
  #  endif
  # endif
***************
*** 131,137 ****
  # endif
  #endif /* TERMCAP */
  
! #ifdef linux
  # define TGETSTR(s, p)	(char_u *)tgetstr((s), (char **)(p))
  #else
  # define TGETSTR(s, p)	(char_u *)tgetstr((s), (char *)(p))
--- 134,140 ----
  # endif
  #endif /* TERMCAP */
  
! #if defined(linux) || (defined(MSDOS) && defined(TERMCAP))	/* DOSGEN */
  # define TGETSTR(s, p)	(char_u *)tgetstr((s), (char **)(p))
  #else
  # define TGETSTR(s, p)	(char_u *)tgetstr((s), (char *)(p))
***************
*** 147,152 ****
--- 150,163 ----
  #endif
  	int width = 0, height = 0;
  
+ #ifdef NT
+ 	if (GuiWin)
+ 	{
+ 		term = *p;
+ 		builtin = 1;
+ 	}
+ 	else
+ #endif
  	if (!STRNCMP(term, "builtin_", (size_t)8))
  	{
  		term += 8;
***************
*** 154,159 ****
--- 165,181 ----
  		builtin = 1;
  #endif
  	}
+ #if !defined(notdef) && defined(TERMCAP)	/* debug */
+ 	else if (STRCMP(term, "pcbios") == 0)
+ 	{
+ 		term = *p;
+ 		builtin = 1;
+ 	}
+ 	else if (*p == term)
+ 	{
+ 		builtin = 1;
+ 	}
+ #endif
  #ifdef TERMCAP
  	else
  	{
***************
*** 201,206 ****
--- 223,234 ----
  			T_KE = TGETSTR("ke", &tp);
  			T_TS = TGETSTR("ti", &tp);
  			T_TE = TGETSTR("te", &tp);
+ #if defined(FEPCTRL) && !defined(MSDOS)
+ 			T_US = TGETSTR("us", &tp);		/* underline on  */
+ 			T_UE = TGETSTR("ue", &tp);		/* underline off */
+ 			T_FB = TGETSTR("Fb", &tp);		/* FEP force on  */
+ 			T_FQ = TGETSTR("Fq", &tp);		/* FEP force off */
+ #endif
  
  		/* key codes */
  			term_strings.t_ku = TGETSTR("ku", &tp);
***************
*** 220,225 ****
--- 248,265 ----
              term_strings.t_sku = NULL;
              term_strings.t_skd = NULL;
  #endif
+ #if defined(UNIX) && !defined(notdef)
+ 			if (term_strings.t_sku == NULL)
+ 			{
+ 				term_strings.t_sku = TGETSTR("kP", &tp);
+ 				term_strings.t_skd = TGETSTR("kN", &tp);
+ 			}
+ 			if (term_strings.t_sku == NULL)
+ 			{
+ 				term_strings.t_sku = TGETSTR("kR", &tp);
+ 				term_strings.t_skd = TGETSTR("kF", &tp);
+ 			}
+ #endif
  			term_strings.t_skl = TGETSTR("#4", &tp);
  			term_strings.t_skr = TGETSTR("%i", &tp);
  			term_strings.t_f1 = TGETSTR("k1", &tp);
***************
*** 267,279 ****
  			p++;
  		if (!*p)
  		{
  			fprintf(stderr, "'%s' not builtin. Available terminals are:\r\n", term);
  			for (p = builtin_tcaps; *p; p++)
! #ifdef TERMCAP
  				fprintf(stderr, "\tbuiltin_%s\r\n", *p);
! #else
  				fprintf(stderr, "\t%s\r\n", *p);
! #endif
  			if (!starting)		/* when user typed :set term=xxx, quit here */
  			{
  				wait_return(TRUE);
--- 307,320 ----
  			p++;
  		if (!*p)
  		{
+ #ifdef notdef	/* ken */
  			fprintf(stderr, "'%s' not builtin. Available terminals are:\r\n", term);
  			for (p = builtin_tcaps; *p; p++)
! #  ifdef TERMCAP
  				fprintf(stderr, "\tbuiltin_%s\r\n", *p);
! #  else
  				fprintf(stderr, "\t%s\r\n", *p);
! #  endif
  			if (!starting)		/* when user typed :set term=xxx, quit here */
  			{
  				wait_return(TRUE);
***************
*** 282,287 ****
--- 323,329 ----
  			sleep(2);
  			fprintf(stderr, "defaulting to '%s'\r\n", *builtin_tcaps);
  			sleep(2);
+ #endif
  			p = builtin_tcaps;
  			free(term_strings.t_name);
  			term_strings.t_name = strsave(term = *p);
***************
*** 327,333 ****
  	set_winsize(width, height, FALSE);	/* may change Rows */
  }
  
! #if defined(TERMCAP) && defined(UNIX)
  /*
   * Get Columns and Rows from the termcap. Used after a window signal if the
   * ioctl() fails. It doesn't make sense to call tgetent each time if the "co"
--- 369,375 ----
  	set_winsize(width, height, FALSE);	/* may change Rows */
  }
  
! #if defined(TERMCAP) && (defined(UNIX) || defined(MSDOS))	/* DOSGEN */
  /*
   * Get Columns and Rows from the termcap. Used after a window signal if the
   * ioctl() fails. It doesn't make sense to call tgetent each time if the "co"
***************
*** 444,450 ****
   */
  #undef BSIZE			/* hpux has BSIZE in sys/param.h */
  #define BSIZE	2048
! static char_u			outbuf[BSIZE];
  static int				bpos = 0;		/* number of chars in outbuf */
  
  /*
--- 486,492 ----
   */
  #undef BSIZE			/* hpux has BSIZE in sys/param.h */
  #define BSIZE	2048
! static char_u			outbuf[BSIZE+1+1];
  static int				bpos = 0;		/* number of chars in outbuf */
  
  /*
***************
*** 455,460 ****
--- 497,514 ----
  {
  	if (bpos != 0)
  	{
+ #ifdef KANJI
+ 		if (JP_DISP != JP_SJIS)
+ 		{
+ 			char_u *tmpptr;
+ 
+ 			outbuf[bpos] = NUL;
+ 			tmpptr = kanjiconvsto(outbuf, JP_DISP);
+ 			mch_write(tmpptr, STRLEN(tmpptr));
+ 			free(tmpptr);
+ 		}
+ 		else
+ #endif
  		mch_write(outbuf, bpos);
  		bpos = 0;
  	}
***************
*** 475,490 ****
--- 529,564 ----
  
  	outbuf[bpos] = c;
  
+ #ifndef KANJI
  	if (p_nb)			/* for testing: unbuffered screen output (not for MSDOS) */
  		mch_write(outbuf, 1);
  	else
+ #endif
  		++bpos;
  
  	if (bpos >= BSIZE)
  		flushbuf();
  }
  
+ #ifdef KANJI
+ /*
+  * outchar2(c1, c2): put a character into the output buffer for KANJI.
+  *					 Flush it if it becomes full.
+  */
+ 	void
+ outchar2(c1, c2)
+ 	unsigned	c1, c2;
+ {
+ 	outbuf[bpos++] = c1;
+ 	outbuf[bpos++] = c2;
+ 
+ 	if (bpos >= BSIZE)
+ 		flushbuf();
+ }
+ #endif
+ 
  /*
+ /*
   * a never-padding outstr.
   * use this whenever you don't want to run the string through tputs.
   * tputs above is harmless, but tputs from the termcap library 
***************
*** 512,523 ****
  	if (bpos > BSIZE - 20)		/* avoid terminal strings being split up */
  		flushbuf();
  	if (s)
! #ifdef TERMCAP
  		tputs(s, 1, TPUTSFUNCAST outchar);
  #else
  		while (*s)
  			outchar(*s++);
  #endif
  }
  
  /* 
--- 586,601 ----
  	if (bpos > BSIZE - 20)		/* avoid terminal strings being split up */
  		flushbuf();
  	if (s)
! #if defined(TERMCAP) && !(defined(linux) && defined(NCURSES_BUG))
  		tputs(s, 1, TPUTSFUNCAST outchar);
  #else
  		while (*s)
  			outchar(*s++);
  #endif
+ #ifdef NT
+ 	if (GuiWin)
+ 		flushbuf();
+ #endif
  }
  
  /* 
***************
*** 598,603 ****
--- 676,687 ----
  			else
  				T_SO = T_TI;
  		}
+ #if defined(FEPCTRL) && !defined(MSDOS)
+ 		if (T_UE == NULL || *T_UE == NUL)
+ 			T_US = NULL;
+ 		if (T_FQ == NULL || *T_FQ == NUL)
+ 			T_FB = NULL;
+ #endif
  	}
  }
  
***************
*** 628,633 ****
--- 712,724 ----
  	int				retesc = FALSE;		/* return ESC with gotint */
  	register int 	c;
  	register int	i;
+ #ifdef KANJI
+ 	char			*top;
+ 	static int		kanji = JP_ASCII;
+ 	static int		tmplen = 0;
+ 	static char		tmp[IOSIZE];
+ 	static char		round[5] = "";
+ #endif
  
  	if (time == -1 || time > 100)	/* flush output before waiting */
  	{
***************
*** 670,683 ****
--- 761,837 ----
  	{
  		while (GetChars(buf, maxlen, T_PEEK))
  			;
+ #ifdef KANJI
+ 		kanji = JP_ASCII;
+ 		tmplen = round[0] = 0;
+ #endif
  		return retesc;
  	}
+ #ifdef KANJI
+ 	if (tmplen)	/* flush buffer 'tmp' */
+ 	{
+ 		if (tmplen < maxlen)
+ 		{
+ 			len = tmplen;
+ 			memmove(buf, tmp, len);
+ 			tmplen = 0;
+ 		}
+ 		else
+ 		{
+ 			len = maxlen;
+ 			memmove(buf, tmp, len);
+ 			tmplen -= len;
+ 			memmove(tmp, tmp + len, tmplen);
+ 		}
+ 		return len;
+ 	}
+ 
+ 	if (round[0])
+ 	{
+ 		int newlen;
+ 
+ 		memmove(buf, round, len = strlen(round));
+ 		round[0] = NUL;
+ 		newlen = GetChars(buf + len, maxlen - len, (int)p_tm);
+ 		len += newlen;
+ 		if (newlen == 0)
+ 		{
+ 			buf[len] = NUL;
+ 			return len;
+ 		}
+ 	}
+ 	else
+ 	{
+ 		len = GetChars(buf, maxlen, time);
+ 	}
+ 	top = buf;
+ #else
  	len = GetChars(buf, maxlen, time);
+ #endif
  
  	for (i = len; --i >= 0; ++buf)
  		if (*buf == 0)
  			*(char_u *)buf = K_ZERO;		/* replace ^@ with special code */
  	*buf = NUL;								/* add trailing NUL */
+ #ifdef KANJI
+ 	tmplen = kanjiconvsfrom(top, len, tmp, IOSIZE, round, JP_KEY, &kanji);
+ 
+ 	if (tmplen > maxlen)
+ 	{
+ 		len = maxlen;
+ 		tmplen -= len;
+ 		memmove(top, tmp, maxlen);
+ 		memmove(tmp, tmp + len, tmplen);
+ 	}
+ 	else
+ 	{
+ 		len = tmplen;
+ 		tmplen = 0;
+ 		memmove(top, tmp, len);
+ 	}
+ 
+ 	top[len] = NUL;
+ #endif
  	return len;
  }
  
***************
*** 708,717 ****
--- 862,890 ----
  			{
  				len -= slen;
  					/* remove matched chars, taking care of noremap */
+ #ifdef KANJI
+ # ifdef MSDOS
+ 				if (p == (char_u **)&term_strings.t_del)
+ 				{
+ 					del_typestr(slen - 1);
+ 					buf[0] = DEL;
+ 					return(len + 1);
+ 				}
+ 				else
+ # endif
+ 				{
+ 					del_typestr(slen - 2);
+ 					buf[0] = K_SPECIAL;
+ 					buf[1] = (K_UARROW & 0xff)
+ 										+ (p - (char_u**)&term_strings.t_ku);
+ 					return(len + 2);
+ 				}
+ #else
  				del_typestr(slen - 1);
  					/* this relies on the Key numbers to be consecutive! */
  				buf[0] = K_UARROW + (p - (char_u **)&term_strings.t_ku);
  				return (len + 1);
+ #endif
  			}
  			return -1;				/* got a partial sequence */
  		}
diff -crN ../orig/src/term.h ./src/term.h
*** ../orig/src/term.h	Wed Aug 10 13:54:10 1994
--- ./src/term.h	Thu Oct 30 06:16:22 1997
***************
*** 84,93 ****
--- 84,102 ----
    char_u *t_sf9;	/* kf19     F9	shifted function key 9 */
    char_u *t_sf10;	/* kf20     FA	shifted function key 10 */
    char_u *t_help;	/* khlp     %1	help key */
+ #if defined(KANJI) && defined(MSDOS)
+   char_u *t_del;	/* del        	del key */
+ #endif
    char_u *t_undo;	/* kund     &8	undo key */
    /* adjust inchar() for last key entry! */
  
    char_u *t_csc;	/* -		-	cursor relative to scrolling region */
+ #if defined(FEPCTRL) && !defined(MSDOS)
+   char *t_us;		/* uline    ul	underline mode */
+   char *t_ue;		/* uend     ue	non-undeline mode */
+   char *t_fb;		/* FEP force on  */
+   char *t_fq;		/* FEP force off */
+ #endif
  } Tcarr;
  
  extern Tcarr term_strings;	/* currently used terminal strings */
***************
*** 120,125 ****
--- 129,140 ----
  #define T_TS	(term_strings.t_ts)
  #define T_TE	(term_strings.t_te)
  #define T_CSC	(term_strings.t_csc)
+ #if defined(FEPCTRL) && !defined(MSDOS)
+ #define T_US	(term_strings.t_us)
+ #define T_UE	(term_strings.t_ue)
+ #define T_FB	(term_strings.t_fb)
+ #define T_FQ	(term_strings.t_fq)
+ #endif
  
  
  #ifndef TERMINFO
***************
*** 248,253 ****
--- 263,269 ----
  \0\316]\0\
  \0\0"
  
+ #ifdef KANJI
  /*
   * These codes are valid for the pc video.
   * The entries that start with ESC | are translated into conio calls in msdos.c.
***************
*** 258,263 ****
--- 274,388 ----
  \1\033|M\0\
  \1\033|%i%d;%dr\0\
  \0\033|J\0\
+ \0\033|v\0\
+ \0\033|V\0\
+ \0\033|W\0\
+ \0\033|0m\0\
+ \0\033|112m\0\
+ \0\033|63m\0\
+ \0\033|0m\0\
+ \0\033|31m\0\
+ \0\001\0\
+ \0\033|%i%d;%dH\0\
+ \7\375H\0\
+ \0\375P\0\
+ \0\375K\0\
+ \0\375M\0\
+ \0\375I\0\
+ \0\375Q\0\
+ \0\375s\0\
+ \0\375t\0\
+ \0\375;\0\
+ \0\375<\0\
+ \0\375=\0\
+ \0\375>\0\
+ \0\375?\0\
+ \0\375@\0\
+ \0\375A\0\
+ \0\375B\0\
+ \0\375C\0\
+ \0\375D\0\
+ \0\375T\0\
+ \0\375U\0\
+ \0\375V\0\
+ \0\375W\0\
+ \0\375X\0\
+ \0\375Y\0\
+ \0\375Z\0\
+ \0\375[\0\
+ \0\375\\\0\
+ \0\375]\0\
+ \0\375;\0\
+ \0\375S\0\
+ \0\0"
+ 
+ /*
+  * These codes are valid for the NT Console 
+  * The entries that start with ESC | are translated into console calls 
+  * in winnt.c.
+  */
+ #  define NTCONSOLE_TCAP "ntconsole\0\
+ \0\033|K\0\
+ \0\033|L\0\
+ \0\033|%dL\0\
+ \0\033|M\0\
+ \0\033|%dM\0\
+ \0\033|%d;%dS\0\
+ \0\033|J\0\
+ \0\033|v\0\
+ \0\033|V\0\
+ \1\033|0m\0\
+ \0\033|63m\0\
+ \0\033|207m\0\
+ \0\033|0m\0\
+ \0\033|121m\0\
+ \0\001\0\
+ \0\033|%i%d;%dH\0\
+ \2\007\0\
+ \4\375H\0\
+ \0\375P\0\
+ \0\375K\0\
+ \0\375M\0\
+ \0\375I\0\
+ \0\375Q\0\
+ \0\375s\0\
+ \0\375t\0\
+ \0\375;\0\
+ \0\375<\0\
+ \0\375=\0\
+ \0\375>\0\
+ \0\375?\0\
+ \0\375@\0\
+ \0\375A\0\
+ \0\375B\0\
+ \0\375C\0\
+ \0\375D\0\
+ \0\375T\0\
+ \0\375U\0\
+ \0\375V\0\
+ \0\375W\0\
+ \0\375X\0\
+ \0\375Y\0\
+ \0\375Z\0\
+ \0\375[\0\
+ \0\375\\\0\
+ \0\375]\0\
+ \0\375;\0\
+ \0\375S\0\
+ \0\0"
+ 
+ #else	/* KANJI */
+ 
+ /*
+  * These codes are valid for the pc video.
+  * The entries that start with ESC | are translated into conio calls in msdos.c.
+  */
+ #  define PCTERM_TCAP "pcterm\0\
+ \0\033|K\0\
+ \0\033|L\0\
+ \1\033|M\0\
+ \1\033|%i%d;%dr\0\
+ \0\033|J\0\
  \3\033|0m\0\
  \0\033|112m\0\
  \0\033|63m\0\
***************
*** 342,347 ****
--- 467,473 ----
  \0\316]\0\
  \0\0"
  
+ #endif	/* KANJI */
  
  #  define VT52_TCAP "vt52\0\
  \0\033K\0\
diff -crN ../orig/src/termlib.c ./src/termlib.c
*** ../orig/src/termlib.c	Wed Aug 10 13:54:10 1994
--- ./src/termlib.c	Sat May 10 10:52:14 1997
***************
*** 12,18 ****
  #include "proto.h"
  #include "proto/termlib.pro"
  
! #ifndef AMIGA
  # include <sgtty.h>
  #endif
  
--- 12,18 ----
  #include "proto.h"
  #include "proto/termlib.pro"
  
! #if !defined(AMIGA) && !defined(MSDOS)	/* DOSGEN */
  # include <sgtty.h>
  #endif
  
***************
*** 27,34 ****
--- 27,38 ----
   */
  
  char	*tent;                /* Pointer to terminal entry, set by tgetent */
+ #ifdef MSDOS		/* DOSGEN */
+ extern char		PC, *UP, *BC;
+ #else
  char	PC = 0;               /* Pad character, default NULL */
  char	*UP = 0, *BC = 0;     /* Pointers to UP and BC strings from database */
+ #endif
  short	ospeed;               /* Baud rate (1-16, 1=300, 16=19200), as in stty */
  
  /*
***************
*** 77,83 ****
--- 81,91 ----
  
  	if ((tmp = (char *)vimgetenv("TERMCAP")) != NULL)
  	{
+ #ifdef MSDOS		/* DOSGEN */
+ 		if (*tmp == '/' || *tmp == '\\' || tmp[1] == ':')
+ #else
  		if (*tmp == '/')            /* TERMCAP = name of termcap file */
+ #endif
  			tcap = tmp ;
  		else                    	/* TERMCAP = termcap entry itself */
  		{
***************
*** 98,104 ****
  			}
  		}
  	}
! 	if (!(termcap = fopen(tcap, "r")))
  	{
  		strcpy(tbuf, tcap);
  		return -1;
--- 106,112 ----
  			}
  		}
  	}
! 	if ((termcap = fopen(tcap, "r")) == NULL)
  	{
  		strcpy(tbuf, tcap);
  		return -1;
***************
*** 107,113 ****
  	len = 0;
  	while (getent(tbuf + len, term, termcap, TBUFSZ - len))
  	{
! 		if ((term = tgetstr("tc", &tcptr)))         /* extended entry */
  		{
  			rewind(termcap);
  			len = strlen(tbuf);
--- 115,121 ----
  	len = 0;
  	while (getent(tbuf + len, term, termcap, TBUFSZ - len))
  	{
! 		if ((term = tgetstr("tc", &tcptr)) != NULL)     /* extended entry */
  		{
  			rewind(termcap);
  			len = strlen(tbuf);
***************
*** 165,170 ****
--- 173,187 ----
  	{
  		int llen = strlen(lbuf);
  
+ #ifdef MSDOS		/* DOSGEN */
+ 		if (lbuf[llen-2] == '\r' && lbuf[llen-1] == '\n')
+ 		{
+ 			lbuf[llen-2] = '\n';
+ 			lbuf[llen-1] = '\0';
+ 			llen--;
+ 		}
+ #endif
+ 
  		if (*lbuf == '#')                               /* eat comments */
  			continue;
  		if (lbuf[-1] == ':' &&                        /* and whitespace */
***************
*** 563,568 ****
--- 580,586 ----
  int affcnt;                                      /* Number of lines affected */
  void (*outc) __ARGS((unsigned int));                              /* routine to output 1 character */
  {
+ #ifndef MSDOS		/* DOSGEN */
  	long	frac,                    /* 10^(#digits after decimal point) */
  		counter,                                           /* digits */
  		atol();
***************
*** 596,601 ****
--- 614,625 ----
  	else
  		while (*cp)
  			(*outc)(*cp++);
+ #else
+ 	while (isdigit(*cp) || *cp == '.')
+ 		cp++;
+ 	while (*cp)
+ 		(*outc)(*cp++);
+ #endif
  	return 0;
  }
  
Only in ../orig/src: termlib.fix
diff -crN ../orig/src/track.c ./src/track.c
*** ../orig/src/track.c	Thu Jan 01 09:00:00 1970
--- ./src/track.c	Tue Mar 23 06:55:34 1999
***************
*** 0 ****
--- 1,470 ----
+ /* vi:set ts=4 sw=4:
+  *
+  * VIM - Vi IMproved
+  *
+  * Code Contributions By:	Atsushi  Nakamura		anaka@mrit.mei.co.jp
+  */
+ 
+ #ifdef TRACK
+ /*
+  * track.c: functions for draw tracks.
+  */
+ 
+ #include "vim.h"
+ #include "globals.h"
+ #include "proto.h"
+ #include "param.h"
+ #ifdef KANJI
+ #include "kanji.h"
+ #endif
+ 
+ extern char_u *get_inserted();
+ 
+ /*
+  *	directions where a line exists.
+  *	1 : up
+  *	2 : down
+  *	4 : left
+  *	8 : right
+  */
+ 
+ #define TK_U	1
+ #define TK_D	2
+ #define TK_L	4
+ #define TK_R	8
+ 
+ struct tracktab
+ {
+ 	char	*name;
+ 	int		vw;
+ 	char	**ch;
+ };
+ 
+ #ifdef KANJI
+ 
+ #define JP_TRACKTAB
+ #include "jptab.h"
+ #undef JP_TRACKTAB
+ 
+ #endif
+ 
+ static char *
+ tracktab_as[] =
+ {
+ 	" ",  "V",  "A",  "|",  ">",  "+",  "+",  "+",
+ 	"<",  "+",  "+",  "+",  "-",  "+",  "+",  "+"
+ };
+ 
+ static struct tracktab
+ tracktabs[] =
+ {
+ 	{ "as",    1, tracktab_as    },
+ #ifdef KANJI
+ 	{ "jp",    2, tracktab_jp    },
+ 	{ "bj",    2, tracktab_bj    },
+ 	{ "hj",    2, tracktab_hj    },
+ #endif
+ 	{ NULL, 0, NULL }
+ },
+ *tracktab = &tracktabs[0];
+ 
+ static void		tracktab_sw	__ARGS((char *));
+ static char	*	track_vcol	__ARGS((char_u *, int, int));
+ static int		track_has_arc	__ARGS((char *, char **, int));
+ static int		track_code	__ARGS((int, int, int));
+ static void		track_ins	__ARGS((int));
+ 
+ 	static void
+ tracktab_sw(tname)
+ 	char *tname;
+ {
+ 	struct tracktab *tp;
+ 
+ 	if (tname && !STRCMP(tracktab->name, tname))
+ 		return;
+ 
+ 	for(tp = &tracktabs[0]; tp->name; tp++)
+ 		if (!STRCMP(tp->name, tname))
+ 		{
+ 			tracktab = tp;
+ 			break;
+ 		}
+ 
+ 	if (!(tp->name))
+ 	{
+ 		tracktab = &tracktabs[0];
+ 		smsg("%s unknown track character set.", tname);
+ 	}
+ }
+ 
+ 	char *
+ tracktab_next(tset)
+ 	char *tset;
+ {
+ 	struct tracktab *tp;
+ 
+ 	for(tp = &tracktabs[0]; tp->name; tp++)
+ 		if (!STRCMP(tp->name, tset))
+ 		{
+ 			tp++;
+ 			break;
+ 		}
+ 	if (!tp->name)
+ 		tp = &tracktabs[0];
+ 
+ 	tracktab = tp;
+ 	return tp->name;
+ }
+ 
+ 	char *
+ tracktab_prev(tset)
+ 	char *tset;
+ {
+ 	struct tracktab *tp;
+ 
+ 	tp = &tracktabs[0];
+ 	if (STRCMP(tp->name, tset))
+ 		for(tp++; tp->name; tp++)
+ 			if (!STRCMP(tp->name, tset))
+ 				return (tp-1)->name;
+ 
+ 	for(tp = &tracktabs[0]; tp->name; tp++);
+ 	return (tp-1)->name;
+ }
+ 
+ #define TV_JUST		1
+ #define TV_NEXT		2
+ #define TV_PREV		3
+ #define TV_FPAD		-1
+ #define TV_BPAD		-2
+ 
+ 	static char *
+ track_vcol(line, cvcol, mode)
+ 	char_u *line;
+ 	int cvcol, mode;
+ {
+ 	int  vcol, pcol;
+ 	char_u *ctop = line;
+ 
+ 	vcol = pcol = 0;
+ 	while(*line && vcol < cvcol)
+ 	{
+ 		pcol = vcol;
+ 		ctop = line;
+ #ifdef KANJI
+ 		if (ISkanji(*line))
+ 		{
+ 			vcol += 2;
+ 			line += 2;
+ 		}
+ 		else
+ #endif
+ 		vcol += chartabsize(* line++, vcol);
+ 	}
+ 
+ 	switch(mode) {
+ 	case TV_JUST:
+ 		if (vcol != cvcol)
+ 			return NULL;
+ 	case TV_NEXT:
+ 		return line;
+ 	case TV_PREV:		/* tail byte of the previous char */
+ 		return vcol == cvcol ? line: ctop;
+ 	case TV_FPAD:
+ 		if (!*line)
+ 			return (char *)(long)(cvcol - vcol);
+ 		return (char *)(long)((vcol == cvcol ? 0 : cvcol - pcol));
+ 	case TV_BPAD:
+ 		return (char *)(long)((vcol - cvcol));
+ 	default: /* error */
+ 		return NULL;
+ 	}
+ }
+ 
+ 	static int
+ track_has_arc(ptr, tc, dir)
+ 	char *ptr, *tc[];
+ 	int  dir;
+ {
+ 	int i;
+ 
+ 	for(i = 1; i < 16; i++)
+ 		if (i & dir && !STRNCMP(ptr, tc[i], STRLEN(tc[i])))
+ 			return TRUE;
+ 	return FALSE;
+ }
+ 
+ 	static int
+ track_code(move, vstart, vend)
+ 	int move, vstart, vend;
+ {
+ 	int		len;
+ 	long	i;
+ 	char_u	*line, *ptr;
+ 	char	**tc;
+ 	int		code;
+ 
+ 	line = ml_get(curwin->w_cursor.lnum);
+ 	tc   = tracktab->ch;
+ 	len  = tracktab->vw;
+ 	code = move;
+ 
+ 	/* left char. */
+ 	if (!(code & TK_L) && ((ptr = track_vcol(line, vstart, TV_PREV)) != NULL))
+ 	{
+ 		if (curbuf->b_p_tt)
+ 			while(ptr - line >= len && STRCHR(" \t", *(ptr - 1)))
+ 				ptr --;
+ 
+ 		if (ptr - line >= len && track_has_arc(ptr - len, tc, TK_R))
+ 			code |= TK_L;
+ 	}
+ 
+ 	/* right char. */
+ 	if (!(code & TK_R) && ((ptr = track_vcol(line, vend, TV_NEXT)) != NULL))
+ 	{
+ 		if (curbuf->b_p_tt)
+ 			while(*ptr && STRCHR(" \t", *ptr))
+ 				ptr ++;
+ 
+ 		if (track_has_arc(ptr, tc, TK_L))
+ 			code |= TK_R;
+ 	}
+ 
+ 	/* up char. */
+ 	if (!(code & TK_U))
+ 		for(i = curwin->w_cursor.lnum - 1; i > 0; i --)
+ 		{
+ 			ptr = track_vcol(ml_get(i), vstart, TV_JUST);
+ 
+ 			if (curbuf->b_p_tt && (!ptr || (*ptr && STRCHR(" \t", *ptr))))
+ 				continue;
+ 
+ 			if (ptr && track_has_arc(ptr, tc, TK_D))
+ 				code |= TK_U;
+ 
+ 			break;
+ 		}
+ 
+ 	/* down char. */
+ 	if (!(code & TK_D))
+ 		for(i = curwin->w_cursor.lnum + 1; i <= curbuf->b_ml.ml_line_count; i++)
+ 		{
+ 			ptr = track_vcol(ml_get(i), vstart, TV_JUST);
+ 
+ 			if (curbuf->b_p_tt && (!ptr || (*ptr && STRCHR(" \t", *ptr))))
+ 				continue;
+ 
+ 			if (ptr && track_has_arc(ptr, tc, TK_U))
+ 				code |= TK_D;
+ 
+ 			break;
+ 		}
+ 
+ 	return code;
+ }
+ 
+ 	static void 
+ track_ins(dir)
+ 	int			dir;
+ {
+ 	FPOS		cpos;
+ 	char_u	*	line;
+ 	char_u	*	ins;
+ 	char_u	*	nextp;
+ 	char_u	*	prevp;
+ 	int			ndel, fpad, bpad;
+ 	int			vstart, vend;
+ 	int			ralign;
+ 	int			rvstart, rvend;
+ 	int			rcode, lcode;
+ 	int			oldState;
+ 
+ 	if (curwin->w_curswant == MAXCOL)
+ 		curwin->w_curswant = curwin->w_virtcol;
+ 
+ 	if (!u_save(curwin->w_cursor.lnum - 1, curwin->w_cursor.lnum + 1))
+ 		return;
+ 
+ 	tracktab_sw(curbuf->b_p_trs);
+ 
+ 	vstart = vend = curwin->w_curswant;
+ 	vend += tracktab->vw;
+ 
+ 	rvstart = rvend = curwin->w_curswant + 1;
+ 	rvstart -= tracktab->vw;
+ 
+ 	if (rvstart < 0)
+ 	{
+ 		rvstart = 0;
+ 		rvend = tracktab->vw;
+ 	}
+ 
+ 	/* determine alignment */
+ 		/* vertical matching (matched lines.) */
+ 	rcode = track_code(0, rvstart, rvend) & (TK_U | TK_D);
+ 	lcode = track_code(0,  vstart,  vend) & (TK_U | TK_D);
+ 
+ 	line = ml_get(curwin->w_cursor.lnum);
+ 	if      ((lcode && !rcode) || (lcode & (TK_U | TK_D)) == (TK_U | TK_D))
+ 		ralign = FALSE;
+ 	else if ((!lcode && rcode) || (rcode & (TK_U | TK_D)) == (TK_U | TK_D))
+ 		ralign = TRUE;
+ 	else if (lcode & dir)
+ 		ralign = FALSE;
+ 	else if (rcode & dir)
+ 		ralign = TRUE;
+ 	else
+ 	{	/* holizontal matching (padding chars.) */
+ 		lcode = rcode = 0;
+ 		if (track_vcol(line, vstart,  TV_FPAD))
+ 			lcode |= TK_L;
+ 		if (track_vcol(line, vend,    TV_BPAD))
+ 			lcode |= TK_R;
+ 		if (track_vcol(line, rvstart, TV_FPAD))
+ 			rcode |= TK_L;
+ 		if (track_vcol(line, rvend,   TV_BPAD))
+ 			rcode |= TK_R;
+ 		if      (!rcode && lcode)
+ 			ralign = TRUE;
+ 		else if (rcode && !lcode)
+ 			ralign = FALSE;
+ 		else
+ 		{
+ 			rcode &= ~dir;
+ 			lcode &= ~dir;
+ 			if      (!rcode && lcode)
+ 				ralign = TRUE;
+ 			else if (rcode && !lcode)
+ 				ralign = FALSE;
+ 			else if (dir & TK_L)
+ 				ralign = TRUE;
+ 			else if (dir & TK_R)
+ 				ralign = FALSE;
+ 			else
+ 				ralign = FALSE;
+ 		}
+ 	}
+ 	/*	*/
+ 
+ 	if (ralign)
+ 	{
+ 		vstart = rvstart;
+ 		vend   = rvend;
+ 	}
+ 
+ 	oldState = State;
+ 	if (State == NORMAL)
+ 		State = INSERT;
+ 
+ 	/* find suitable track character */
+ 	ins = tracktab->ch[track_code(dir, vstart, vend)];
+ 
+ 	nextp = track_vcol(line, vend,   TV_NEXT);
+ 	prevp = track_vcol(line, vstart, TV_PREV);
+ 
+ 	ndel = nextp - prevp;
+ 	fpad = (long) track_vcol(line, vstart, TV_FPAD);
+ 	bpad = (long) track_vcol(line, vend,   TV_BPAD);
+ 
+ 	if (ralign && (curwin->w_cursor.col = prevp - line) <= 0)
+ 		curwin->w_cursor.col = 0;
+ 
+ 	if (- bpad >= tracktab->vw)
+ 	{
+ 		curwin->w_cursor.col = STRLEN(line);
+ 		ndel = 0;
+ 	}
+ 
+ #ifdef KANJI		/* quick hack */
+ 	if (fpad == 0 && bpad == 1 && dir == TK_L && ndel == 2
+ 								&& tracktab->vw == 1 && ISkanji(gchar_cursor()))
+ 	{
+ 		fpad = 1;
+ 		bpad = 0;
+ 	}
+ #endif
+ 	/* remove old characters */
+ 	for (;ndel > 0; ndel--)
+ 		delchar(FALSE);
+ 
+ 	/* padd preceeding space */
+ 	for (; fpad > 0; fpad--)
+ #ifdef KANJI
+ 		inschar(' ', NUL);
+ #else
+ 		inschar(' ');
+ #endif
+ 
+ 	/* insert track */
+ 	cpos = curwin->w_cursor;
+ #ifdef KANJI
+ 	for (; *ins; ins += ISkanji(*ins) ? 2 : 1)
+ 		inschar(*ins, *(ins + 1));
+ #else
+ 	inschar(*ins);
+ #endif
+ 
+ 	/* padd tailing space */
+ 	for (; bpad > 0; bpad--)
+ #ifdef KANJI
+ 		inschar(' ', NUL);
+ #else
+ 		inschar(' ');
+ #endif
+ 
+ 	if (dir == TK_R)
+ 	{
+ 		line = ml_get_pos(&curwin->w_cursor);
+ 		if (!*line)
+ #ifdef KANJI
+ 			inschar('X', NUL);
+ #else
+ 			inschar('X');
+ #endif
+ 	}
+ 
+ 	/* recover saved states */
+ 	curwin->w_cursor = cpos;
+ 	updateline();
+ 	State = oldState;
+ }
+ 
+ 	void
+ track_right()
+ {
+ 	track_ins(TK_R);
+ }
+ 
+ 	void
+ track_left()
+ {
+ 	track_ins(TK_L);
+ }
+ 
+ 	void
+ track_up()
+ {
+ 	track_ins(TK_U);
+ }
+ 
+ 	void
+ track_down()
+ {
+ 	track_ins(TK_D);
+ }
+ 
+ 	void
+ showtrack()
+ {
+ 	if (!Track)
+ 		return;
+ 	gotocmdline(TRUE, NUL);
+ 	msg_outstr((char_u *)"-- TRACK[");
+ 	msg_outstr(curbuf->b_p_trs);
+ 	msg_outstr((char_u *)"] --");
+ 	showruler(FALSE);
+ 	setcursor();
+ }
+ 
+ #endif	/* TRACK */
diff -crN ../orig/src/u2s.c ./src/u2s.c
*** ../orig/src/u2s.c	Thu Jan 01 09:00:00 1970
--- ./src/u2s.c	Sat Sep 04 20:17:36 1999
***************
*** 0 ****
--- 1,65557 ----
+ #ifdef KANJI
+ # if defined(UCODE) && !defined(NT)
+ static unsigned short u2stbl[] = {
+   0x0000, /* U+0000 */
+   0x0001, /* U+0001 */
+   0x0002, /* U+0002 */
+   0x0003, /* U+0003 */
+   0x0004, /* U+0004 */
+   0x0005, /* U+0005 */
+   0x0006, /* U+0006 */
+   0x0007, /* U+0007 */
+   0x0008, /* U+0008 */
+   0x0009, /* U+0009 */
+   0x000a, /* U+000A */
+   0x000b, /* U+000B */
+   0x000c, /* U+000C */
+   0x000d, /* U+000D */
+   0x000e, /* U+000E */
+   0x000f, /* U+000F */
+   0x0010, /* U+0010 */
+   0x0011, /* U+0011 */
+   0x0012, /* U+0012 */
+   0x0013, /* U+0013 */
+   0x0014, /* U+0014 */
+   0x0015, /* U+0015 */
+   0x0016, /* U+0016 */
+   0x0017, /* U+0017 */
+   0x0018, /* U+0018 */
+   0x0019, /* U+0019 */
+   0x001a, /* U+001A */
+   0x001b, /* U+001B */
+   0x001c, /* U+001C */
+   0x001d, /* U+001D */
+   0x001e, /* U+001E */
+   0x001f, /* U+001F */
+   0x0020, /* U+0020 */
+   0x0021, /* U+0021 */
+   0x0022, /* U+0022 */
+   0x0023, /* U+0023 */
+   0x0024, /* U+0024 */
+   0x0025, /* U+0025 */
+   0x0026, /* U+0026 */
+   0x0027, /* U+0027 */
+   0x0028, /* U+0028 */
+   0x0029, /* U+0029 */
+   0x002a, /* U+002A */
+   0x002b, /* U+002B */
+   0x002c, /* U+002C */
+   0x002d, /* U+002D */
+   0x002e, /* U+002E */
+   0x002f, /* U+002F */
+   0x0030, /* U+0030 */
+   0x0031, /* U+0031 */
+   0x0032, /* U+0032 */
+   0x0033, /* U+0033 */
+   0x0034, /* U+0034 */
+   0x0035, /* U+0035 */
+   0x0036, /* U+0036 */
+   0x0037, /* U+0037 */
+   0x0038, /* U+0038 */
+   0x0039, /* U+0039 */
+   0x003a, /* U+003A */
+   0x003b, /* U+003B */
+   0x003c, /* U+003C */
+   0x003d, /* U+003D */
+   0x003e, /* U+003E */
+   0x003f, /* U+003F */
+   0x0040, /* U+0040 */
+   0x0041, /* U+0041 */
+   0x0042, /* U+0042 */
+   0x0043, /* U+0043 */
+   0x0044, /* U+0044 */
+   0x0045, /* U+0045 */
+   0x0046, /* U+0046 */
+   0x0047, /* U+0047 */
+   0x0048, /* U+0048 */
+   0x0049, /* U+0049 */
+   0x004a, /* U+004A */
+   0x004b, /* U+004B */
+   0x004c, /* U+004C */
+   0x004d, /* U+004D */
+   0x004e, /* U+004E */
+   0x004f, /* U+004F */
+   0x0050, /* U+0050 */
+   0x0051, /* U+0051 */
+   0x0052, /* U+0052 */
+   0x0053, /* U+0053 */
+   0x0054, /* U+0054 */
+   0x0055, /* U+0055 */
+   0x0056, /* U+0056 */
+   0x0057, /* U+0057 */
+   0x0058, /* U+0058 */
+   0x0059, /* U+0059 */
+   0x005a, /* U+005A */
+   0x005b, /* U+005B */
+   0x005c, /* U+005C */
+   0x005d, /* U+005D */
+   0x005e, /* U+005E */
+   0x005f, /* U+005F */
+   0x0060, /* U+0060 */
+   0x0061, /* U+0061 */
+   0x0062, /* U+0062 */
+   0x0063, /* U+0063 */
+   0x0064, /* U+0064 */
+   0x0065, /* U+0065 */
+   0x0066, /* U+0066 */
+   0x0067, /* U+0067 */
+   0x0068, /* U+0068 */
+   0x0069, /* U+0069 */
+   0x006a, /* U+006A */
+   0x006b, /* U+006B */
+   0x006c, /* U+006C */
+   0x006d, /* U+006D */
+   0x006e, /* U+006E */
+   0x006f, /* U+006F */
+   0x0070, /* U+0070 */
+   0x0071, /* U+0071 */
+   0x0072, /* U+0072 */
+   0x0073, /* U+0073 */
+   0x0074, /* U+0074 */
+   0x0075, /* U+0075 */
+   0x0076, /* U+0076 */
+   0x0077, /* U+0077 */
+   0x0078, /* U+0078 */
+   0x0079, /* U+0079 */
+   0x007a, /* U+007A */
+   0x007b, /* U+007B */
+   0x007c, /* U+007C */
+   0x007d, /* U+007D */
+   0x007e, /* U+007E */
+   0x007f, /* U+007F */
+      '?', /* U+0080 */
+      '?', /* U+0081 */
+      '?', /* U+0082 */
+      '?', /* U+0083 */
+      '?', /* U+0084 */
+      '?', /* U+0085 */
+      '?', /* U+0086 */
+      '?', /* U+0087 */
+      '?', /* U+0088 */
+      '?', /* U+0089 */
+      '?', /* U+008A */
+      '?', /* U+008B */
+      '?', /* U+008C */
+      '?', /* U+008D */
+      '?', /* U+008E */
+      '?', /* U+008F */
+      '?', /* U+0090 */
+      '?', /* U+0091 */
+      '?', /* U+0092 */
+      '?', /* U+0093 */
+      '?', /* U+0094 */
+      '?', /* U+0095 */
+      '?', /* U+0096 */
+      '?', /* U+0097 */
+      '?', /* U+0098 */
+      '?', /* U+0099 */
+      '?', /* U+009A */
+      '?', /* U+009B */
+      '?', /* U+009C */
+      '?', /* U+009D */
+      '?', /* U+009E */
+      '?', /* U+009F */
+      '?', /* U+00A0 */
+      '?', /* U+00A1 */
+      '?', /* U+00A2 */
+      '?', /* U+00A3 */
+      '?', /* U+00A4 */
+      '?', /* U+00A5 */
+      '?', /* U+00A6 */
+   0x8198, /* U+00A7 */
+   0x814e, /* U+00A8 */
+      '?', /* U+00A9 */
+      '?', /* U+00AA */
+      '?', /* U+00AB */
+      '?', /* U+00AC */
+      '?', /* U+00AD */
+      '?', /* U+00AE */
+      '?', /* U+00AF */
+   0x818b, /* U+00B0 */
+   0x817d, /* U+00B1 */
+      '?', /* U+00B2 */
+      '?', /* U+00B3 */
+   0x814c, /* U+00B4 */
+      '?', /* U+00B5 */
+   0x81f7, /* U+00B6 */
+      '?', /* U+00B7 */
+      '?', /* U+00B8 */
+      '?', /* U+00B9 */
+      '?', /* U+00BA */
+      '?', /* U+00BB */
+      '?', /* U+00BC */
+      '?', /* U+00BD */
+      '?', /* U+00BE */
+      '?', /* U+00BF */
+      '?', /* U+00C0 */
+      '?', /* U+00C1 */
+      '?', /* U+00C2 */
+      '?', /* U+00C3 */
+      '?', /* U+00C4 */
+      '?', /* U+00C5 */
+      '?', /* U+00C6 */
+      '?', /* U+00C7 */
+      '?', /* U+00C8 */
+      '?', /* U+00C9 */
+      '?', /* U+00CA */
+      '?', /* U+00CB */
+      '?', /* U+00CC */
+      '?', /* U+00CD */
+      '?', /* U+00CE */
+      '?', /* U+00CF */
+      '?', /* U+00D0 */
+      '?', /* U+00D1 */
+      '?', /* U+00D2 */
+      '?', /* U+00D3 */
+      '?', /* U+00D4 */
+      '?', /* U+00D5 */
+      '?', /* U+00D6 */
+   0x817e, /* U+00D7 */
+      '?', /* U+00D8 */
+      '?', /* U+00D9 */
+      '?', /* U+00DA */
+      '?', /* U+00DB */
+      '?', /* U+00DC */
+      '?', /* U+00DD */
+      '?', /* U+00DE */
+      '?', /* U+00DF */
+      '?', /* U+00E0 */
+      '?', /* U+00E1 */
+      '?', /* U+00E2 */
+      '?', /* U+00E3 */
+      '?', /* U+00E4 */
+      '?', /* U+00E5 */
+      '?', /* U+00E6 */
+      '?', /* U+00E7 */
+      '?', /* U+00E8 */
+      '?', /* U+00E9 */
+      '?', /* U+00EA */
+      '?', /* U+00EB */
+      '?', /* U+00EC */
+      '?', /* U+00ED */
+      '?', /* U+00EE */
+      '?', /* U+00EF */
+      '?', /* U+00F0 */
+      '?', /* U+00F1 */
+      '?', /* U+00F2 */
+      '?', /* U+00F3 */
+      '?', /* U+00F4 */
+      '?', /* U+00F5 */
+      '?', /* U+00F6 */
+   0x8180, /* U+00F7 */
+      '?', /* U+00F8 */
+      '?', /* U+00F9 */
+      '?', /* U+00FA */
+      '?', /* U+00FB */
+      '?', /* U+00FC */
+      '?', /* U+00FD */
+      '?', /* U+00FE */
+      '?', /* U+00FF */
+      '?', /* U+0100 */
+      '?', /* U+0101 */
+      '?', /* U+0102 */
+      '?', /* U+0103 */
+      '?', /* U+0104 */
+      '?', /* U+0105 */
+      '?', /* U+0106 */
+      '?', /* U+0107 */
+      '?', /* U+0108 */
+      '?', /* U+0109 */
+      '?', /* U+010A */
+      '?', /* U+010B */
+      '?', /* U+010C */
+      '?', /* U+010D */
+      '?', /* U+010E */
+      '?', /* U+010F */
+      '?', /* U+0110 */
+      '?', /* U+0111 */
+      '?', /* U+0112 */
+      '?', /* U+0113 */
+      '?', /* U+0114 */
+      '?', /* U+0115 */
+      '?', /* U+0116 */
+      '?', /* U+0117 */
+      '?', /* U+0118 */
+      '?', /* U+0119 */
+      '?', /* U+011A */
+      '?', /* U+011B */
+      '?', /* U+011C */
+      '?', /* U+011D */
+      '?', /* U+011E */
+      '?', /* U+011F */
+      '?', /* U+0120 */
+      '?', /* U+0121 */
+      '?', /* U+0122 */
+      '?', /* U+0123 */
+      '?', /* U+0124 */
+      '?', /* U+0125 */
+      '?', /* U+0126 */
+      '?', /* U+0127 */
+      '?', /* U+0128 */
+      '?', /* U+0129 */
+      '?', /* U+012A */
+      '?', /* U+012B */
+      '?', /* U+012C */
+      '?', /* U+012D */
+      '?', /* U+012E */
+      '?', /* U+012F */
+      '?', /* U+0130 */
+      '?', /* U+0131 */
+      '?', /* U+0132 */
+      '?', /* U+0133 */
+      '?', /* U+0134 */
+      '?', /* U+0135 */
+      '?', /* U+0136 */
+      '?', /* U+0137 */
+      '?', /* U+0138 */
+      '?', /* U+0139 */
+      '?', /* U+013A */
+      '?', /* U+013B */
+      '?', /* U+013C */
+      '?', /* U+013D */
+      '?', /* U+013E */
+      '?', /* U+013F */
+      '?', /* U+0140 */
+      '?', /* U+0141 */
+      '?', /* U+0142 */
+      '?', /* U+0143 */
+      '?', /* U+0144 */
+      '?', /* U+0145 */
+      '?', /* U+0146 */
+      '?', /* U+0147 */
+      '?', /* U+0148 */
+      '?', /* U+0149 */
+      '?', /* U+014A */
+      '?', /* U+014B */
+      '?', /* U+014C */
+      '?', /* U+014D */
+      '?', /* U+014E */
+      '?', /* U+014F */
+      '?', /* U+0150 */
+      '?', /* U+0151 */
+      '?', /* U+0152 */
+      '?', /* U+0153 */
+      '?', /* U+0154 */
+      '?', /* U+0155 */
+      '?', /* U+0156 */
+      '?', /* U+0157 */
+      '?', /* U+0158 */
+      '?', /* U+0159 */
+      '?', /* U+015A */
+      '?', /* U+015B */
+      '?', /* U+015C */
+      '?', /* U+015D */
+      '?', /* U+015E */
+      '?', /* U+015F */
+      '?', /* U+0160 */
+      '?', /* U+0161 */
+      '?', /* U+0162 */
+      '?', /* U+0163 */
+      '?', /* U+0164 */
+      '?', /* U+0165 */
+      '?', /* U+0166 */
+      '?', /* U+0167 */
+      '?', /* U+0168 */
+      '?', /* U+0169 */
+      '?', /* U+016A */
+      '?', /* U+016B */
+      '?', /* U+016C */
+      '?', /* U+016D */
+      '?', /* U+016E */
+      '?', /* U+016F */
+      '?', /* U+0170 */
+      '?', /* U+0171 */
+      '?', /* U+0172 */
+      '?', /* U+0173 */
+      '?', /* U+0174 */
+      '?', /* U+0175 */
+      '?', /* U+0176 */
+      '?', /* U+0177 */
+      '?', /* U+0178 */
+      '?', /* U+0179 */
+      '?', /* U+017A */
+      '?', /* U+017B */
+      '?', /* U+017C */
+      '?', /* U+017D */
+      '?', /* U+017E */
+      '?', /* U+017F */
+      '?', /* U+0180 */
+      '?', /* U+0181 */
+      '?', /* U+0182 */
+      '?', /* U+0183 */
+      '?', /* U+0184 */
+      '?', /* U+0185 */
+      '?', /* U+0186 */
+      '?', /* U+0187 */
+      '?', /* U+0188 */
+      '?', /* U+0189 */
+      '?', /* U+018A */
+      '?', /* U+018B */
+      '?', /* U+018C */
+      '?', /* U+018D */
+      '?', /* U+018E */
+      '?', /* U+018F */
+      '?', /* U+0190 */
+      '?', /* U+0191 */
+      '?', /* U+0192 */
+      '?', /* U+0193 */
+      '?', /* U+0194 */
+      '?', /* U+0195 */
+      '?', /* U+0196 */
+      '?', /* U+0197 */
+      '?', /* U+0198 */
+      '?', /* U+0199 */
+      '?', /* U+019A */
+      '?', /* U+019B */
+      '?', /* U+019C */
+      '?', /* U+019D */
+      '?', /* U+019E */
+      '?', /* U+019F */
+      '?', /* U+01A0 */
+      '?', /* U+01A1 */
+      '?', /* U+01A2 */
+      '?', /* U+01A3 */
+      '?', /* U+01A4 */
+      '?', /* U+01A5 */
+      '?', /* U+01A6 */
+      '?', /* U+01A7 */
+      '?', /* U+01A8 */
+      '?', /* U+01A9 */
+      '?', /* U+01AA */
+      '?', /* U+01AB */
+      '?', /* U+01AC */
+      '?', /* U+01AD */
+      '?', /* U+01AE */
+      '?', /* U+01AF */
+      '?', /* U+01B0 */
+      '?', /* U+01B1 */
+      '?', /* U+01B2 */
+      '?', /* U+01B3 */
+      '?', /* U+01B4 */
+      '?', /* U+01B5 */
+      '?', /* U+01B6 */
+      '?', /* U+01B7 */
+      '?', /* U+01B8 */
+      '?', /* U+01B9 */
+      '?', /* U+01BA */
+      '?', /* U+01BB */
+      '?', /* U+01BC */
+      '?', /* U+01BD */
+      '?', /* U+01BE */
+      '?', /* U+01BF */
+      '?', /* U+01C0 */
+      '?', /* U+01C1 */
+      '?', /* U+01C2 */
+      '?', /* U+01C3 */
+      '?', /* U+01C4 */
+      '?', /* U+01C5 */
+      '?', /* U+01C6 */
+      '?', /* U+01C7 */
+      '?', /* U+01C8 */
+      '?', /* U+01C9 */
+      '?', /* U+01CA */
+      '?', /* U+01CB */
+      '?', /* U+01CC */
+      '?', /* U+01CD */
+      '?', /* U+01CE */
+      '?', /* U+01CF */
+      '?', /* U+01D0 */
+      '?', /* U+01D1 */
+      '?', /* U+01D2 */
+      '?', /* U+01D3 */
+      '?', /* U+01D4 */
+      '?', /* U+01D5 */
+      '?', /* U+01D6 */
+      '?', /* U+01D7 */
+      '?', /* U+01D8 */
+      '?', /* U+01D9 */
+      '?', /* U+01DA */
+      '?', /* U+01DB */
+      '?', /* U+01DC */
+      '?', /* U+01DD */
+      '?', /* U+01DE */
+      '?', /* U+01DF */
+      '?', /* U+01E0 */
+      '?', /* U+01E1 */
+      '?', /* U+01E2 */
+      '?', /* U+01E3 */
+      '?', /* U+01E4 */
+      '?', /* U+01E5 */
+      '?', /* U+01E6 */
+      '?', /* U+01E7 */
+      '?', /* U+01E8 */
+      '?', /* U+01E9 */
+      '?', /* U+01EA */
+      '?', /* U+01EB */
+      '?', /* U+01EC */
+      '?', /* U+01ED */
+      '?', /* U+01EE */
+      '?', /* U+01EF */
+      '?', /* U+01F0 */
+      '?', /* U+01F1 */
+      '?', /* U+01F2 */
+      '?', /* U+01F3 */
+      '?', /* U+01F4 */
+      '?', /* U+01F5 */
+      '?', /* U+01F6 */
+      '?', /* U+01F7 */
+      '?', /* U+01F8 */
+      '?', /* U+01F9 */
+      '?', /* U+01FA */
+      '?', /* U+01FB */
+      '?', /* U+01FC */
+      '?', /* U+01FD */
+      '?', /* U+01FE */
+      '?', /* U+01FF */
+      '?', /* U+0200 */
+      '?', /* U+0201 */
+      '?', /* U+0202 */
+      '?', /* U+0203 */
+      '?', /* U+0204 */
+      '?', /* U+0205 */
+      '?', /* U+0206 */
+      '?', /* U+0207 */
+      '?', /* U+0208 */
+      '?', /* U+0209 */
+      '?', /* U+020A */
+      '?', /* U+020B */
+      '?', /* U+020C */
+      '?', /* U+020D */
+      '?', /* U+020E */
+      '?', /* U+020F */
+      '?', /* U+0210 */
+      '?', /* U+0211 */
+      '?', /* U+0212 */
+      '?', /* U+0213 */
+      '?', /* U+0214 */
+      '?', /* U+0215 */
+      '?', /* U+0216 */
+      '?', /* U+0217 */
+      '?', /* U+0218 */
+      '?', /* U+0219 */
+      '?', /* U+021A */
+      '?', /* U+021B */
+      '?', /* U+021C */
+      '?', /* U+021D */
+      '?', /* U+021E */
+      '?', /* U+021F */
+      '?', /* U+0220 */
+      '?', /* U+0221 */
+      '?', /* U+0222 */
+      '?', /* U+0223 */
+      '?', /* U+0224 */
+      '?', /* U+0225 */
+      '?', /* U+0226 */
+      '?', /* U+0227 */
+      '?', /* U+0228 */
+      '?', /* U+0229 */
+      '?', /* U+022A */
+      '?', /* U+022B */
+      '?', /* U+022C */
+      '?', /* U+022D */
+      '?', /* U+022E */
+      '?', /* U+022F */
+      '?', /* U+0230 */
+      '?', /* U+0231 */
+      '?', /* U+0232 */
+      '?', /* U+0233 */
+      '?', /* U+0234 */
+      '?', /* U+0235 */
+      '?', /* U+0236 */
+      '?', /* U+0237 */
+      '?', /* U+0238 */
+      '?', /* U+0239 */
+      '?', /* U+023A */
+      '?', /* U+023B */
+      '?', /* U+023C */
+      '?', /* U+023D */
+      '?', /* U+023E */
+      '?', /* U+023F */
+      '?', /* U+0240 */
+      '?', /* U+0241 */
+      '?', /* U+0242 */
+      '?', /* U+0243 */
+      '?', /* U+0244 */
+      '?', /* U+0245 */
+      '?', /* U+0246 */
+      '?', /* U+0247 */
+      '?', /* U+0248 */
+      '?', /* U+0249 */
+      '?', /* U+024A */
+      '?', /* U+024B */
+      '?', /* U+024C */
+      '?', /* U+024D */
+      '?', /* U+024E */
+      '?', /* U+024F */
+      '?', /* U+0250 */
+      '?', /* U+0251 */
+      '?', /* U+0252 */
+      '?', /* U+0253 */
+      '?', /* U+0254 */
+      '?', /* U+0255 */
+      '?', /* U+0256 */
+      '?', /* U+0257 */
+      '?', /* U+0258 */
+      '?', /* U+0259 */
+      '?', /* U+025A */
+      '?', /* U+025B */
+      '?', /* U+025C */
+      '?', /* U+025D */
+      '?', /* U+025E */
+      '?', /* U+025F */
+      '?', /* U+0260 */
+      '?', /* U+0261 */
+      '?', /* U+0262 */
+      '?', /* U+0263 */
+      '?', /* U+0264 */
+      '?', /* U+0265 */
+      '?', /* U+0266 */
+      '?', /* U+0267 */
+      '?', /* U+0268 */
+      '?', /* U+0269 */
+      '?', /* U+026A */
+      '?', /* U+026B */
+      '?', /* U+026C */
+      '?', /* U+026D */
+      '?', /* U+026E */
+      '?', /* U+026F */
+      '?', /* U+0270 */
+      '?', /* U+0271 */
+      '?', /* U+0272 */
+      '?', /* U+0273 */
+      '?', /* U+0274 */
+      '?', /* U+0275 */
+      '?', /* U+0276 */
+      '?', /* U+0277 */
+      '?', /* U+0278 */
+      '?', /* U+0279 */
+      '?', /* U+027A */
+      '?', /* U+027B */
+      '?', /* U+027C */
+      '?', /* U+027D */
+      '?', /* U+027E */
+      '?', /* U+027F */
+      '?', /* U+0280 */
+      '?', /* U+0281 */
+      '?', /* U+0282 */
+      '?', /* U+0283 */
+      '?', /* U+0284 */
+      '?', /* U+0285 */
+      '?', /* U+0286 */
+      '?', /* U+0287 */
+      '?', /* U+0288 */
+      '?', /* U+0289 */
+      '?', /* U+028A */
+      '?', /* U+028B */
+      '?', /* U+028C */
+      '?', /* U+028D */
+      '?', /* U+028E */
+      '?', /* U+028F */
+      '?', /* U+0290 */
+      '?', /* U+0291 */
+      '?', /* U+0292 */
+      '?', /* U+0293 */
+      '?', /* U+0294 */
+      '?', /* U+0295 */
+      '?', /* U+0296 */
+      '?', /* U+0297 */
+      '?', /* U+0298 */
+      '?', /* U+0299 */
+      '?', /* U+029A */
+      '?', /* U+029B */
+      '?', /* U+029C */
+      '?', /* U+029D */
+      '?', /* U+029E */
+      '?', /* U+029F */
+      '?', /* U+02A0 */
+      '?', /* U+02A1 */
+      '?', /* U+02A2 */
+      '?', /* U+02A3 */
+      '?', /* U+02A4 */
+      '?', /* U+02A5 */
+      '?', /* U+02A6 */
+      '?', /* U+02A7 */
+      '?', /* U+02A8 */
+      '?', /* U+02A9 */
+      '?', /* U+02AA */
+      '?', /* U+02AB */
+      '?', /* U+02AC */
+      '?', /* U+02AD */
+      '?', /* U+02AE */
+      '?', /* U+02AF */
+      '?', /* U+02B0 */
+      '?', /* U+02B1 */
+      '?', /* U+02B2 */
+      '?', /* U+02B3 */
+      '?', /* U+02B4 */
+      '?', /* U+02B5 */
+      '?', /* U+02B6 */
+      '?', /* U+02B7 */
+      '?', /* U+02B8 */
+      '?', /* U+02B9 */
+      '?', /* U+02BA */
+      '?', /* U+02BB */
+      '?', /* U+02BC */
+      '?', /* U+02BD */
+      '?', /* U+02BE */
+      '?', /* U+02BF */
+      '?', /* U+02C0 */
+      '?', /* U+02C1 */
+      '?', /* U+02C2 */
+      '?', /* U+02C3 */
+      '?', /* U+02C4 */
+      '?', /* U+02C5 */
+      '?', /* U+02C6 */
+      '?', /* U+02C7 */
+      '?', /* U+02C8 */
+      '?', /* U+02C9 */
+      '?', /* U+02CA */
+      '?', /* U+02CB */
+      '?', /* U+02CC */
+      '?', /* U+02CD */
+      '?', /* U+02CE */
+      '?', /* U+02CF */
+      '?', /* U+02D0 */
+      '?', /* U+02D1 */
+      '?', /* U+02D2 */
+      '?', /* U+02D3 */
+      '?', /* U+02D4 */
+      '?', /* U+02D5 */
+      '?', /* U+02D6 */
+      '?', /* U+02D7 */
+      '?', /* U+02D8 */
+      '?', /* U+02D9 */
+      '?', /* U+02DA */
+      '?', /* U+02DB */
+      '?', /* U+02DC */
+      '?', /* U+02DD */
+      '?', /* U+02DE */
+      '?', /* U+02DF */
+      '?', /* U+02E0 */
+      '?', /* U+02E1 */
+      '?', /* U+02E2 */
+      '?', /* U+02E3 */
+      '?', /* U+02E4 */
+      '?', /* U+02E5 */
+      '?', /* U+02E6 */
+      '?', /* U+02E7 */
+      '?', /* U+02E8 */
+      '?', /* U+02E9 */
+      '?', /* U+02EA */
+      '?', /* U+02EB */
+      '?', /* U+02EC */
+      '?', /* U+02ED */
+      '?', /* U+02EE */
+      '?', /* U+02EF */
+      '?', /* U+02F0 */
+      '?', /* U+02F1 */
+      '?', /* U+02F2 */
+      '?', /* U+02F3 */
+      '?', /* U+02F4 */
+      '?', /* U+02F5 */
+      '?', /* U+02F6 */
+      '?', /* U+02F7 */
+      '?', /* U+02F8 */
+      '?', /* U+02F9 */
+      '?', /* U+02FA */
+      '?', /* U+02FB */
+      '?', /* U+02FC */
+      '?', /* U+02FD */
+      '?', /* U+02FE */
+      '?', /* U+02FF */
+      '?', /* U+0300 */
+      '?', /* U+0301 */
+      '?', /* U+0302 */
+      '?', /* U+0303 */
+      '?', /* U+0304 */
+      '?', /* U+0305 */
+      '?', /* U+0306 */
+      '?', /* U+0307 */
+      '?', /* U+0308 */
+      '?', /* U+0309 */
+      '?', /* U+030A */
+      '?', /* U+030B */
+      '?', /* U+030C */
+      '?', /* U+030D */
+      '?', /* U+030E */
+      '?', /* U+030F */
+      '?', /* U+0310 */
+      '?', /* U+0311 */
+      '?', /* U+0312 */
+      '?', /* U+0313 */
+      '?', /* U+0314 */
+      '?', /* U+0315 */
+      '?', /* U+0316 */
+      '?', /* U+0317 */
+      '?', /* U+0318 */
+      '?', /* U+0319 */
+      '?', /* U+031A */
+      '?', /* U+031B */
+      '?', /* U+031C */
+      '?', /* U+031D */
+      '?', /* U+031E */
+      '?', /* U+031F */
+      '?', /* U+0320 */
+      '?', /* U+0321 */
+      '?', /* U+0322 */
+      '?', /* U+0323 */
+      '?', /* U+0324 */
+      '?', /* U+0325 */
+      '?', /* U+0326 */
+      '?', /* U+0327 */
+      '?', /* U+0328 */
+      '?', /* U+0329 */
+      '?', /* U+032A */
+      '?', /* U+032B */
+      '?', /* U+032C */
+      '?', /* U+032D */
+      '?', /* U+032E */
+      '?', /* U+032F */
+      '?', /* U+0330 */
+      '?', /* U+0331 */
+      '?', /* U+0332 */
+      '?', /* U+0333 */
+      '?', /* U+0334 */
+      '?', /* U+0335 */
+      '?', /* U+0336 */
+      '?', /* U+0337 */
+      '?', /* U+0338 */
+      '?', /* U+0339 */
+      '?', /* U+033A */
+      '?', /* U+033B */
+      '?', /* U+033C */
+      '?', /* U+033D */
+      '?', /* U+033E */
+      '?', /* U+033F */
+      '?', /* U+0340 */
+      '?', /* U+0341 */
+      '?', /* U+0342 */
+      '?', /* U+0343 */
+      '?', /* U+0344 */
+      '?', /* U+0345 */
+      '?', /* U+0346 */
+      '?', /* U+0347 */
+      '?', /* U+0348 */
+      '?', /* U+0349 */
+      '?', /* U+034A */
+      '?', /* U+034B */
+      '?', /* U+034C */
+      '?', /* U+034D */
+      '?', /* U+034E */
+      '?', /* U+034F */
+      '?', /* U+0350 */
+      '?', /* U+0351 */
+      '?', /* U+0352 */
+      '?', /* U+0353 */
+      '?', /* U+0354 */
+      '?', /* U+0355 */
+      '?', /* U+0356 */
+      '?', /* U+0357 */
+      '?', /* U+0358 */
+      '?', /* U+0359 */
+      '?', /* U+035A */
+      '?', /* U+035B */
+      '?', /* U+035C */
+      '?', /* U+035D */
+      '?', /* U+035E */
+      '?', /* U+035F */
+      '?', /* U+0360 */
+      '?', /* U+0361 */
+      '?', /* U+0362 */
+      '?', /* U+0363 */
+      '?', /* U+0364 */
+      '?', /* U+0365 */
+      '?', /* U+0366 */
+      '?', /* U+0367 */
+      '?', /* U+0368 */
+      '?', /* U+0369 */
+      '?', /* U+036A */
+      '?', /* U+036B */
+      '?', /* U+036C */
+      '?', /* U+036D */
+      '?', /* U+036E */
+      '?', /* U+036F */
+      '?', /* U+0370 */
+      '?', /* U+0371 */
+      '?', /* U+0372 */
+      '?', /* U+0373 */
+      '?', /* U+0374 */
+      '?', /* U+0375 */
+      '?', /* U+0376 */
+      '?', /* U+0377 */
+      '?', /* U+0378 */
+      '?', /* U+0379 */
+      '?', /* U+037A */
+      '?', /* U+037B */
+      '?', /* U+037C */
+      '?', /* U+037D */
+      '?', /* U+037E */
+      '?', /* U+037F */
+      '?', /* U+0380 */
+      '?', /* U+0381 */
+      '?', /* U+0382 */
+      '?', /* U+0383 */
+      '?', /* U+0384 */
+      '?', /* U+0385 */
+      '?', /* U+0386 */
+      '?', /* U+0387 */
+      '?', /* U+0388 */
+      '?', /* U+0389 */
+      '?', /* U+038A */
+      '?', /* U+038B */
+      '?', /* U+038C */
+      '?', /* U+038D */
+      '?', /* U+038E */
+      '?', /* U+038F */
+      '?', /* U+0390 */
+   0x839f, /* U+0391 */
+   0x83a0, /* U+0392 */
+   0x83a1, /* U+0393 */
+   0x83a2, /* U+0394 */
+   0x83a3, /* U+0395 */
+   0x83a4, /* U+0396 */
+   0x83a5, /* U+0397 */
+   0x83a6, /* U+0398 */
+   0x83a7, /* U+0399 */
+   0x83a8, /* U+039A */
+   0x83a9, /* U+039B */
+   0x83aa, /* U+039C */
+   0x83ab, /* U+039D */
+   0x83ac, /* U+039E */
+   0x83ad, /* U+039F */
+   0x83ae, /* U+03A0 */
+   0x83af, /* U+03A1 */
+      '?', /* U+03A2 */
+   0x83b0, /* U+03A3 */
+   0x83b1, /* U+03A4 */
+   0x83b2, /* U+03A5 */
+   0x83b3, /* U+03A6 */
+   0x83b4, /* U+03A7 */
+   0x83b5, /* U+03A8 */
+   0x83b6, /* U+03A9 */
+      '?', /* U+03AA */
+      '?', /* U+03AB */
+      '?', /* U+03AC */
+      '?', /* U+03AD */
+      '?', /* U+03AE */
+      '?', /* U+03AF */
+      '?', /* U+03B0 */
+   0x83bf, /* U+03B1 */
+   0x83c0, /* U+03B2 */
+   0x83c1, /* U+03B3 */
+   0x83c2, /* U+03B4 */
+   0x83c3, /* U+03B5 */
+   0x83c4, /* U+03B6 */
+   0x83c5, /* U+03B7 */
+   0x83c6, /* U+03B8 */
+   0x83c7, /* U+03B9 */
+   0x83c8, /* U+03BA */
+   0x83c9, /* U+03BB */
+   0x83ca, /* U+03BC */
+   0x83cb, /* U+03BD */
+   0x83cc, /* U+03BE */
+   0x83cd, /* U+03BF */
+   0x83ce, /* U+03C0 */
+   0x83cf, /* U+03C1 */
+      '?', /* U+03C2 */
+   0x83d0, /* U+03C3 */
+   0x83d1, /* U+03C4 */
+   0x83d2, /* U+03C5 */
+   0x83d3, /* U+03C6 */
+   0x83d4, /* U+03C7 */
+   0x83d5, /* U+03C8 */
+   0x83d6, /* U+03C9 */
+      '?', /* U+03CA */
+      '?', /* U+03CB */
+      '?', /* U+03CC */
+      '?', /* U+03CD */
+      '?', /* U+03CE */
+      '?', /* U+03CF */
+      '?', /* U+03D0 */
+      '?', /* U+03D1 */
+      '?', /* U+03D2 */
+      '?', /* U+03D3 */
+      '?', /* U+03D4 */
+      '?', /* U+03D5 */
+      '?', /* U+03D6 */
+      '?', /* U+03D7 */
+      '?', /* U+03D8 */
+      '?', /* U+03D9 */
+      '?', /* U+03DA */
+      '?', /* U+03DB */
+      '?', /* U+03DC */
+      '?', /* U+03DD */
+      '?', /* U+03DE */
+      '?', /* U+03DF */
+      '?', /* U+03E0 */
+      '?', /* U+03E1 */
+      '?', /* U+03E2 */
+      '?', /* U+03E3 */
+      '?', /* U+03E4 */
+      '?', /* U+03E5 */
+      '?', /* U+03E6 */
+      '?', /* U+03E7 */
+      '?', /* U+03E8 */
+      '?', /* U+03E9 */
+      '?', /* U+03EA */
+      '?', /* U+03EB */
+      '?', /* U+03EC */
+      '?', /* U+03ED */
+      '?', /* U+03EE */
+      '?', /* U+03EF */
+      '?', /* U+03F0 */
+      '?', /* U+03F1 */
+      '?', /* U+03F2 */
+      '?', /* U+03F3 */
+      '?', /* U+03F4 */
+      '?', /* U+03F5 */
+      '?', /* U+03F6 */
+      '?', /* U+03F7 */
+      '?', /* U+03F8 */
+      '?', /* U+03F9 */
+      '?', /* U+03FA */
+      '?', /* U+03FB */
+      '?', /* U+03FC */
+      '?', /* U+03FD */
+      '?', /* U+03FE */
+      '?', /* U+03FF */
+      '?', /* U+0400 */
+   0x8446, /* U+0401 */
+      '?', /* U+0402 */
+      '?', /* U+0403 */
+      '?', /* U+0404 */
+      '?', /* U+0405 */
+      '?', /* U+0406 */
+      '?', /* U+0407 */
+      '?', /* U+0408 */
+      '?', /* U+0409 */
+      '?', /* U+040A */
+      '?', /* U+040B */
+      '?', /* U+040C */
+      '?', /* U+040D */
+      '?', /* U+040E */
+      '?', /* U+040F */
+   0x8440, /* U+0410 */
+   0x8441, /* U+0411 */
+   0x8442, /* U+0412 */
+   0x8443, /* U+0413 */
+   0x8444, /* U+0414 */
+   0x8445, /* U+0415 */
+   0x8447, /* U+0416 */
+   0x8448, /* U+0417 */
+   0x8449, /* U+0418 */
+   0x844a, /* U+0419 */
+   0x844b, /* U+041A */
+   0x844c, /* U+041B */
+   0x844d, /* U+041C */
+   0x844e, /* U+041D */
+   0x844f, /* U+041E */
+   0x8450, /* U+041F */
+   0x8451, /* U+0420 */
+   0x8452, /* U+0421 */
+   0x8453, /* U+0422 */
+   0x8454, /* U+0423 */
+   0x8455, /* U+0424 */
+   0x8456, /* U+0425 */
+   0x8457, /* U+0426 */
+   0x8458, /* U+0427 */
+   0x8459, /* U+0428 */
+   0x845a, /* U+0429 */
+   0x845b, /* U+042A */
+   0x845c, /* U+042B */
+   0x845d, /* U+042C */
+   0x845e, /* U+042D */
+   0x845f, /* U+042E */
+   0x8460, /* U+042F */
+   0x8470, /* U+0430 */
+   0x8471, /* U+0431 */
+   0x8472, /* U+0432 */
+   0x8473, /* U+0433 */
+   0x8474, /* U+0434 */
+   0x8475, /* U+0435 */
+   0x8477, /* U+0436 */
+   0x8478, /* U+0437 */
+   0x8479, /* U+0438 */
+   0x847a, /* U+0439 */
+   0x847b, /* U+043A */
+   0x847c, /* U+043B */
+   0x847d, /* U+043C */
+   0x847e, /* U+043D */
+   0x8480, /* U+043E */
+   0x8481, /* U+043F */
+   0x8482, /* U+0440 */
+   0x8483, /* U+0441 */
+   0x8484, /* U+0442 */
+   0x8485, /* U+0443 */
+   0x8486, /* U+0444 */
+   0x8487, /* U+0445 */
+   0x8488, /* U+0446 */
+   0x8489, /* U+0447 */
+   0x848a, /* U+0448 */
+   0x848b, /* U+0449 */
+   0x848c, /* U+044A */
+   0x848d, /* U+044B */
+   0x848e, /* U+044C */
+   0x848f, /* U+044D */
+   0x8490, /* U+044E */
+   0x8491, /* U+044F */
+      '?', /* U+0450 */
+   0x8476, /* U+0451 */
+      '?', /* U+0452 */
+      '?', /* U+0453 */
+      '?', /* U+0454 */
+      '?', /* U+0455 */
+      '?', /* U+0456 */
+      '?', /* U+0457 */
+      '?', /* U+0458 */
+      '?', /* U+0459 */
+      '?', /* U+045A */
+      '?', /* U+045B */
+      '?', /* U+045C */
+      '?', /* U+045D */
+      '?', /* U+045E */
+      '?', /* U+045F */
+      '?', /* U+0460 */
+      '?', /* U+0461 */
+      '?', /* U+0462 */
+      '?', /* U+0463 */
+      '?', /* U+0464 */
+      '?', /* U+0465 */
+      '?', /* U+0466 */
+      '?', /* U+0467 */
+      '?', /* U+0468 */
+      '?', /* U+0469 */
+      '?', /* U+046A */
+      '?', /* U+046B */
+      '?', /* U+046C */
+      '?', /* U+046D */
+      '?', /* U+046E */
+      '?', /* U+046F */
+      '?', /* U+0470 */
+      '?', /* U+0471 */
+      '?', /* U+0472 */
+      '?', /* U+0473 */
+      '?', /* U+0474 */
+      '?', /* U+0475 */
+      '?', /* U+0476 */
+      '?', /* U+0477 */
+      '?', /* U+0478 */
+      '?', /* U+0479 */
+      '?', /* U+047A */
+      '?', /* U+047B */
+      '?', /* U+047C */
+      '?', /* U+047D */
+      '?', /* U+047E */
+      '?', /* U+047F */
+      '?', /* U+0480 */
+      '?', /* U+0481 */
+      '?', /* U+0482 */
+      '?', /* U+0483 */
+      '?', /* U+0484 */
+      '?', /* U+0485 */
+      '?', /* U+0486 */
+      '?', /* U+0487 */
+      '?', /* U+0488 */
+      '?', /* U+0489 */
+      '?', /* U+048A */
+      '?', /* U+048B */
+      '?', /* U+048C */
+      '?', /* U+048D */
+      '?', /* U+048E */
+      '?', /* U+048F */
+      '?', /* U+0490 */
+      '?', /* U+0491 */
+      '?', /* U+0492 */
+      '?', /* U+0493 */
+      '?', /* U+0494 */
+      '?', /* U+0495 */
+      '?', /* U+0496 */
+      '?', /* U+0497 */
+      '?', /* U+0498 */
+      '?', /* U+0499 */
+      '?', /* U+049A */
+      '?', /* U+049B */
+      '?', /* U+049C */
+      '?', /* U+049D */
+      '?', /* U+049E */
+      '?', /* U+049F */
+      '?', /* U+04A0 */
+      '?', /* U+04A1 */
+      '?', /* U+04A2 */
+      '?', /* U+04A3 */
+      '?', /* U+04A4 */
+      '?', /* U+04A5 */
+      '?', /* U+04A6 */
+      '?', /* U+04A7 */
+      '?', /* U+04A8 */
+      '?', /* U+04A9 */
+      '?', /* U+04AA */
+      '?', /* U+04AB */
+      '?', /* U+04AC */
+      '?', /* U+04AD */
+      '?', /* U+04AE */
+      '?', /* U+04AF */
+      '?', /* U+04B0 */
+      '?', /* U+04B1 */
+      '?', /* U+04B2 */
+      '?', /* U+04B3 */
+      '?', /* U+04B4 */
+      '?', /* U+04B5 */
+      '?', /* U+04B6 */
+      '?', /* U+04B7 */
+      '?', /* U+04B8 */
+      '?', /* U+04B9 */
+      '?', /* U+04BA */
+      '?', /* U+04BB */
+      '?', /* U+04BC */
+      '?', /* U+04BD */
+      '?', /* U+04BE */
+      '?', /* U+04BF */
+      '?', /* U+04C0 */
+      '?', /* U+04C1 */
+      '?', /* U+04C2 */
+      '?', /* U+04C3 */
+      '?', /* U+04C4 */
+      '?', /* U+04C5 */
+      '?', /* U+04C6 */
+      '?', /* U+04C7 */
+      '?', /* U+04C8 */
+      '?', /* U+04C9 */
+      '?', /* U+04CA */
+      '?', /* U+04CB */
+      '?', /* U+04CC */
+      '?', /* U+04CD */
+      '?', /* U+04CE */
+      '?', /* U+04CF */
+      '?', /* U+04D0 */
+      '?', /* U+04D1 */
+      '?', /* U+04D2 */
+      '?', /* U+04D3 */
+      '?', /* U+04D4 */
+      '?', /* U+04D5 */
+      '?', /* U+04D6 */
+      '?', /* U+04D7 */
+      '?', /* U+04D8 */
+      '?', /* U+04D9 */
+      '?', /* U+04DA */
+      '?', /* U+04DB */
+      '?', /* U+04DC */
+      '?', /* U+04DD */
+      '?', /* U+04DE */
+      '?', /* U+04DF */
+      '?', /* U+04E0 */
+      '?', /* U+04E1 */
+      '?', /* U+04E2 */
+      '?', /* U+04E3 */
+      '?', /* U+04E4 */
+      '?', /* U+04E5 */
+      '?', /* U+04E6 */
+      '?', /* U+04E7 */
+      '?', /* U+04E8 */
+      '?', /* U+04E9 */
+      '?', /* U+04EA */
+      '?', /* U+04EB */
+      '?', /* U+04EC */
+      '?', /* U+04ED */
+      '?', /* U+04EE */
+      '?', /* U+04EF */
+      '?', /* U+04F0 */
+      '?', /* U+04F1 */
+      '?', /* U+04F2 */
+      '?', /* U+04F3 */
+      '?', /* U+04F4 */
+      '?', /* U+04F5 */
+      '?', /* U+04F6 */
+      '?', /* U+04F7 */
+      '?', /* U+04F8 */
+      '?', /* U+04F9 */
+      '?', /* U+04FA */
+      '?', /* U+04FB */
+      '?', /* U+04FC */
+      '?', /* U+04FD */
+      '?', /* U+04FE */
+      '?', /* U+04FF */
+      '?', /* U+0500 */
+      '?', /* U+0501 */
+      '?', /* U+0502 */
+      '?', /* U+0503 */
+      '?', /* U+0504 */
+      '?', /* U+0505 */
+      '?', /* U+0506 */
+      '?', /* U+0507 */
+      '?', /* U+0508 */
+      '?', /* U+0509 */
+      '?', /* U+050A */
+      '?', /* U+050B */
+      '?', /* U+050C */
+      '?', /* U+050D */
+      '?', /* U+050E */
+      '?', /* U+050F */
+      '?', /* U+0510 */
+      '?', /* U+0511 */
+      '?', /* U+0512 */
+      '?', /* U+0513 */
+      '?', /* U+0514 */
+      '?', /* U+0515 */
+      '?', /* U+0516 */
+      '?', /* U+0517 */
+      '?', /* U+0518 */
+      '?', /* U+0519 */
+      '?', /* U+051A */
+      '?', /* U+051B */
+      '?', /* U+051C */
+      '?', /* U+051D */
+      '?', /* U+051E */
+      '?', /* U+051F */
+      '?', /* U+0520 */
+      '?', /* U+0521 */
+      '?', /* U+0522 */
+      '?', /* U+0523 */
+      '?', /* U+0524 */
+      '?', /* U+0525 */
+      '?', /* U+0526 */
+      '?', /* U+0527 */
+      '?', /* U+0528 */
+      '?', /* U+0529 */
+      '?', /* U+052A */
+      '?', /* U+052B */
+      '?', /* U+052C */
+      '?', /* U+052D */
+      '?', /* U+052E */
+      '?', /* U+052F */
+      '?', /* U+0530 */
+      '?', /* U+0531 */
+      '?', /* U+0532 */
+      '?', /* U+0533 */
+      '?', /* U+0534 */
+      '?', /* U+0535 */
+      '?', /* U+0536 */
+      '?', /* U+0537 */
+      '?', /* U+0538 */
+      '?', /* U+0539 */
+      '?', /* U+053A */
+      '?', /* U+053B */
+      '?', /* U+053C */
+      '?', /* U+053D */
+      '?', /* U+053E */
+      '?', /* U+053F */
+      '?', /* U+0540 */
+      '?', /* U+0541 */
+      '?', /* U+0542 */
+      '?', /* U+0543 */
+      '?', /* U+0544 */
+      '?', /* U+0545 */
+      '?', /* U+0546 */
+      '?', /* U+0547 */
+      '?', /* U+0548 */
+      '?', /* U+0549 */
+      '?', /* U+054A */
+      '?', /* U+054B */
+      '?', /* U+054C */
+      '?', /* U+054D */
+      '?', /* U+054E */
+      '?', /* U+054F */
+      '?', /* U+0550 */
+      '?', /* U+0551 */
+      '?', /* U+0552 */
+      '?', /* U+0553 */
+      '?', /* U+0554 */
+      '?', /* U+0555 */
+      '?', /* U+0556 */
+      '?', /* U+0557 */
+      '?', /* U+0558 */
+      '?', /* U+0559 */
+      '?', /* U+055A */
+      '?', /* U+055B */
+      '?', /* U+055C */
+      '?', /* U+055D */
+      '?', /* U+055E */
+      '?', /* U+055F */
+      '?', /* U+0560 */
+      '?', /* U+0561 */
+      '?', /* U+0562 */
+      '?', /* U+0563 */
+      '?', /* U+0564 */
+      '?', /* U+0565 */
+      '?', /* U+0566 */
+      '?', /* U+0567 */
+      '?', /* U+0568 */
+      '?', /* U+0569 */
+      '?', /* U+056A */
+      '?', /* U+056B */
+      '?', /* U+056C */
+      '?', /* U+056D */
+      '?', /* U+056E */
+      '?', /* U+056F */
+      '?', /* U+0570 */
+      '?', /* U+0571 */
+      '?', /* U+0572 */
+      '?', /* U+0573 */
+      '?', /* U+0574 */
+      '?', /* U+0575 */
+      '?', /* U+0576 */
+      '?', /* U+0577 */
+      '?', /* U+0578 */
+      '?', /* U+0579 */
+      '?', /* U+057A */
+      '?', /* U+057B */
+      '?', /* U+057C */
+      '?', /* U+057D */
+      '?', /* U+057E */
+      '?', /* U+057F */
+      '?', /* U+0580 */
+      '?', /* U+0581 */
+      '?', /* U+0582 */
+      '?', /* U+0583 */
+      '?', /* U+0584 */
+      '?', /* U+0585 */
+      '?', /* U+0586 */
+      '?', /* U+0587 */
+      '?', /* U+0588 */
+      '?', /* U+0589 */
+      '?', /* U+058A */
+      '?', /* U+058B */
+      '?', /* U+058C */
+      '?', /* U+058D */
+      '?', /* U+058E */
+      '?', /* U+058F */
+      '?', /* U+0590 */
+      '?', /* U+0591 */
+      '?', /* U+0592 */
+      '?', /* U+0593 */
+      '?', /* U+0594 */
+      '?', /* U+0595 */
+      '?', /* U+0596 */
+      '?', /* U+0597 */
+      '?', /* U+0598 */
+      '?', /* U+0599 */
+      '?', /* U+059A */
+      '?', /* U+059B */
+      '?', /* U+059C */
+      '?', /* U+059D */
+      '?', /* U+059E */
+      '?', /* U+059F */
+      '?', /* U+05A0 */
+      '?', /* U+05A1 */
+      '?', /* U+05A2 */
+      '?', /* U+05A3 */
+      '?', /* U+05A4 */
+      '?', /* U+05A5 */
+      '?', /* U+05A6 */
+      '?', /* U+05A7 */
+      '?', /* U+05A8 */
+      '?', /* U+05A9 */
+      '?', /* U+05AA */
+      '?', /* U+05AB */
+      '?', /* U+05AC */
+      '?', /* U+05AD */
+      '?', /* U+05AE */
+      '?', /* U+05AF */
+      '?', /* U+05B0 */
+      '?', /* U+05B1 */
+      '?', /* U+05B2 */
+      '?', /* U+05B3 */
+      '?', /* U+05B4 */
+      '?', /* U+05B5 */
+      '?', /* U+05B6 */
+      '?', /* U+05B7 */
+      '?', /* U+05B8 */
+      '?', /* U+05B9 */
+      '?', /* U+05BA */
+      '?', /* U+05BB */
+      '?', /* U+05BC */
+      '?', /* U+05BD */
+      '?', /* U+05BE */
+      '?', /* U+05BF */
+      '?', /* U+05C0 */
+      '?', /* U+05C1 */
+      '?', /* U+05C2 */
+      '?', /* U+05C3 */
+      '?', /* U+05C4 */
+      '?', /* U+05C5 */
+      '?', /* U+05C6 */
+      '?', /* U+05C7 */
+      '?', /* U+05C8 */
+      '?', /* U+05C9 */
+      '?', /* U+05CA */
+      '?', /* U+05CB */
+      '?', /* U+05CC */
+      '?', /* U+05CD */
+      '?', /* U+05CE */
+      '?', /* U+05CF */
+      '?', /* U+05D0 */
+      '?', /* U+05D1 */
+      '?', /* U+05D2 */
+      '?', /* U+05D3 */
+      '?', /* U+05D4 */
+      '?', /* U+05D5 */
+      '?', /* U+05D6 */
+      '?', /* U+05D7 */
+      '?', /* U+05D8 */
+      '?', /* U+05D9 */
+      '?', /* U+05DA */
+      '?', /* U+05DB */
+      '?', /* U+05DC */
+      '?', /* U+05DD */
+      '?', /* U+05DE */
+      '?', /* U+05DF */
+      '?', /* U+05E0 */
+      '?', /* U+05E1 */
+      '?', /* U+05E2 */
+      '?', /* U+05E3 */
+      '?', /* U+05E4 */
+      '?', /* U+05E5 */
+      '?', /* U+05E6 */
+      '?', /* U+05E7 */
+      '?', /* U+05E8 */
+      '?', /* U+05E9 */
+      '?', /* U+05EA */
+      '?', /* U+05EB */
+      '?', /* U+05EC */
+      '?', /* U+05ED */
+      '?', /* U+05EE */
+      '?', /* U+05EF */
+      '?', /* U+05F0 */
+      '?', /* U+05F1 */
+      '?', /* U+05F2 */
+      '?', /* U+05F3 */
+      '?', /* U+05F4 */
+      '?', /* U+05F5 */
+      '?', /* U+05F6 */
+      '?', /* U+05F7 */
+      '?', /* U+05F8 */
+      '?', /* U+05F9 */
+      '?', /* U+05FA */
+      '?', /* U+05FB */
+      '?', /* U+05FC */
+      '?', /* U+05FD */
+      '?', /* U+05FE */
+      '?', /* U+05FF */
+      '?', /* U+0600 */
+      '?', /* U+0601 */
+      '?', /* U+0602 */
+      '?', /* U+0603 */
+      '?', /* U+0604 */
+      '?', /* U+0605 */
+      '?', /* U+0606 */
+      '?', /* U+0607 */
+      '?', /* U+0608 */
+      '?', /* U+0609 */
+      '?', /* U+060A */
+      '?', /* U+060B */
+      '?', /* U+060C */
+      '?', /* U+060D */
+      '?', /* U+060E */
+      '?', /* U+060F */
+      '?', /* U+0610 */
+      '?', /* U+0611 */
+      '?', /* U+0612 */
+      '?', /* U+0613 */
+      '?', /* U+0614 */
+      '?', /* U+0615 */
+      '?', /* U+0616 */
+      '?', /* U+0617 */
+      '?', /* U+0618 */
+      '?', /* U+0619 */
+      '?', /* U+061A */
+      '?', /* U+061B */
+      '?', /* U+061C */
+      '?', /* U+061D */
+      '?', /* U+061E */
+      '?', /* U+061F */
+      '?', /* U+0620 */
+      '?', /* U+0621 */
+      '?', /* U+0622 */
+      '?', /* U+0623 */
+      '?', /* U+0624 */
+      '?', /* U+0625 */
+      '?', /* U+0626 */
+      '?', /* U+0627 */
+      '?', /* U+0628 */
+      '?', /* U+0629 */
+      '?', /* U+062A */
+      '?', /* U+062B */
+      '?', /* U+062C */
+      '?', /* U+062D */
+      '?', /* U+062E */
+      '?', /* U+062F */
+      '?', /* U+0630 */
+      '?', /* U+0631 */
+      '?', /* U+0632 */
+      '?', /* U+0633 */
+      '?', /* U+0634 */
+      '?', /* U+0635 */
+      '?', /* U+0636 */
+      '?', /* U+0637 */
+      '?', /* U+0638 */
+      '?', /* U+0639 */
+      '?', /* U+063A */
+      '?', /* U+063B */
+      '?', /* U+063C */
+      '?', /* U+063D */
+      '?', /* U+063E */
+      '?', /* U+063F */
+      '?', /* U+0640 */
+      '?', /* U+0641 */
+      '?', /* U+0642 */
+      '?', /* U+0643 */
+      '?', /* U+0644 */
+      '?', /* U+0645 */
+      '?', /* U+0646 */
+      '?', /* U+0647 */
+      '?', /* U+0648 */
+      '?', /* U+0649 */
+      '?', /* U+064A */
+      '?', /* U+064B */
+      '?', /* U+064C */
+      '?', /* U+064D */
+      '?', /* U+064E */
+      '?', /* U+064F */
+      '?', /* U+0650 */
+      '?', /* U+0651 */
+      '?', /* U+0652 */
+      '?', /* U+0653 */
+      '?', /* U+0654 */
+      '?', /* U+0655 */
+      '?', /* U+0656 */
+      '?', /* U+0657 */
+      '?', /* U+0658 */
+      '?', /* U+0659 */
+      '?', /* U+065A */
+      '?', /* U+065B */
+      '?', /* U+065C */
+      '?', /* U+065D */
+      '?', /* U+065E */
+      '?', /* U+065F */
+      '?', /* U+0660 */
+      '?', /* U+0661 */
+      '?', /* U+0662 */
+      '?', /* U+0663 */
+      '?', /* U+0664 */
+      '?', /* U+0665 */
+      '?', /* U+0666 */
+      '?', /* U+0667 */
+      '?', /* U+0668 */
+      '?', /* U+0669 */
+      '?', /* U+066A */
+      '?', /* U+066B */
+      '?', /* U+066C */
+      '?', /* U+066D */
+      '?', /* U+066E */
+      '?', /* U+066F */
+      '?', /* U+0670 */
+      '?', /* U+0671 */
+      '?', /* U+0672 */
+      '?', /* U+0673 */
+      '?', /* U+0674 */
+      '?', /* U+0675 */
+      '?', /* U+0676 */
+      '?', /* U+0677 */
+      '?', /* U+0678 */
+      '?', /* U+0679 */
+      '?', /* U+067A */
+      '?', /* U+067B */
+      '?', /* U+067C */
+      '?', /* U+067D */
+      '?', /* U+067E */
+      '?', /* U+067F */
+      '?', /* U+0680 */
+      '?', /* U+0681 */
+      '?', /* U+0682 */
+      '?', /* U+0683 */
+      '?', /* U+0684 */
+      '?', /* U+0685 */
+      '?', /* U+0686 */
+      '?', /* U+0687 */
+      '?', /* U+0688 */
+      '?', /* U+0689 */
+      '?', /* U+068A */
+      '?', /* U+068B */
+      '?', /* U+068C */
+      '?', /* U+068D */
+      '?', /* U+068E */
+      '?', /* U+068F */
+      '?', /* U+0690 */
+      '?', /* U+0691 */
+      '?', /* U+0692 */
+      '?', /* U+0693 */
+      '?', /* U+0694 */
+      '?', /* U+0695 */
+      '?', /* U+0696 */
+      '?', /* U+0697 */
+      '?', /* U+0698 */
+      '?', /* U+0699 */
+      '?', /* U+069A */
+      '?', /* U+069B */
+      '?', /* U+069C */
+      '?', /* U+069D */
+      '?', /* U+069E */
+      '?', /* U+069F */
+      '?', /* U+06A0 */
+      '?', /* U+06A1 */
+      '?', /* U+06A2 */
+      '?', /* U+06A3 */
+      '?', /* U+06A4 */
+      '?', /* U+06A5 */
+      '?', /* U+06A6 */
+      '?', /* U+06A7 */
+      '?', /* U+06A8 */
+      '?', /* U+06A9 */
+      '?', /* U+06AA */
+      '?', /* U+06AB */
+      '?', /* U+06AC */
+      '?', /* U+06AD */
+      '?', /* U+06AE */
+      '?', /* U+06AF */
+      '?', /* U+06B0 */
+      '?', /* U+06B1 */
+      '?', /* U+06B2 */
+      '?', /* U+06B3 */
+      '?', /* U+06B4 */
+      '?', /* U+06B5 */
+      '?', /* U+06B6 */
+      '?', /* U+06B7 */
+      '?', /* U+06B8 */
+      '?', /* U+06B9 */
+      '?', /* U+06BA */
+      '?', /* U+06BB */
+      '?', /* U+06BC */
+      '?', /* U+06BD */
+      '?', /* U+06BE */
+      '?', /* U+06BF */
+      '?', /* U+06C0 */
+      '?', /* U+06C1 */
+      '?', /* U+06C2 */
+      '?', /* U+06C3 */
+      '?', /* U+06C4 */
+      '?', /* U+06C5 */
+      '?', /* U+06C6 */
+      '?', /* U+06C7 */
+      '?', /* U+06C8 */
+      '?', /* U+06C9 */
+      '?', /* U+06CA */
+      '?', /* U+06CB */
+      '?', /* U+06CC */
+      '?', /* U+06CD */
+      '?', /* U+06CE */
+      '?', /* U+06CF */
+      '?', /* U+06D0 */
+      '?', /* U+06D1 */
+      '?', /* U+06D2 */
+      '?', /* U+06D3 */
+      '?', /* U+06D4 */
+      '?', /* U+06D5 */
+      '?', /* U+06D6 */
+      '?', /* U+06D7 */
+      '?', /* U+06D8 */
+      '?', /* U+06D9 */
+      '?', /* U+06DA */
+      '?', /* U+06DB */
+      '?', /* U+06DC */
+      '?', /* U+06DD */
+      '?', /* U+06DE */
+      '?', /* U+06DF */
+      '?', /* U+06E0 */
+      '?', /* U+06E1 */
+      '?', /* U+06E2 */
+      '?', /* U+06E3 */
+      '?', /* U+06E4 */
+      '?', /* U+06E5 */
+      '?', /* U+06E6 */
+      '?', /* U+06E7 */
+      '?', /* U+06E8 */
+      '?', /* U+06E9 */
+      '?', /* U+06EA */
+      '?', /* U+06EB */
+      '?', /* U+06EC */
+      '?', /* U+06ED */
+      '?', /* U+06EE */
+      '?', /* U+06EF */
+      '?', /* U+06F0 */
+      '?', /* U+06F1 */
+      '?', /* U+06F2 */
+      '?', /* U+06F3 */
+      '?', /* U+06F4 */
+      '?', /* U+06F5 */
+      '?', /* U+06F6 */
+      '?', /* U+06F7 */
+      '?', /* U+06F8 */
+      '?', /* U+06F9 */
+      '?', /* U+06FA */
+      '?', /* U+06FB */
+      '?', /* U+06FC */
+      '?', /* U+06FD */
+      '?', /* U+06FE */
+      '?', /* U+06FF */
+      '?', /* U+0700 */
+      '?', /* U+0701 */
+      '?', /* U+0702 */
+      '?', /* U+0703 */
+      '?', /* U+0704 */
+      '?', /* U+0705 */
+      '?', /* U+0706 */
+      '?', /* U+0707 */
+      '?', /* U+0708 */
+      '?', /* U+0709 */
+      '?', /* U+070A */
+      '?', /* U+070B */
+      '?', /* U+070C */
+      '?', /* U+070D */
+      '?', /* U+070E */
+      '?', /* U+070F */
+      '?', /* U+0710 */
+      '?', /* U+0711 */
+      '?', /* U+0712 */
+      '?', /* U+0713 */
+      '?', /* U+0714 */
+      '?', /* U+0715 */
+      '?', /* U+0716 */
+      '?', /* U+0717 */
+      '?', /* U+0718 */
+      '?', /* U+0719 */
+      '?', /* U+071A */
+      '?', /* U+071B */
+      '?', /* U+071C */
+      '?', /* U+071D */
+      '?', /* U+071E */
+      '?', /* U+071F */
+      '?', /* U+0720 */
+      '?', /* U+0721 */
+      '?', /* U+0722 */
+      '?', /* U+0723 */
+      '?', /* U+0724 */
+      '?', /* U+0725 */
+      '?', /* U+0726 */
+      '?', /* U+0727 */
+      '?', /* U+0728 */
+      '?', /* U+0729 */
+      '?', /* U+072A */
+      '?', /* U+072B */
+      '?', /* U+072C */
+      '?', /* U+072D */
+      '?', /* U+072E */
+      '?', /* U+072F */
+      '?', /* U+0730 */
+      '?', /* U+0731 */
+      '?', /* U+0732 */
+      '?', /* U+0733 */
+      '?', /* U+0734 */
+      '?', /* U+0735 */
+      '?', /* U+0736 */
+      '?', /* U+0737 */
+      '?', /* U+0738 */
+      '?', /* U+0739 */
+      '?', /* U+073A */
+      '?', /* U+073B */
+      '?', /* U+073C */
+      '?', /* U+073D */
+      '?', /* U+073E */
+      '?', /* U+073F */
+      '?', /* U+0740 */
+      '?', /* U+0741 */
+      '?', /* U+0742 */
+      '?', /* U+0743 */
+      '?', /* U+0744 */
+      '?', /* U+0745 */
+      '?', /* U+0746 */
+      '?', /* U+0747 */
+      '?', /* U+0748 */
+      '?', /* U+0749 */
+      '?', /* U+074A */
+      '?', /* U+074B */
+      '?', /* U+074C */
+      '?', /* U+074D */
+      '?', /* U+074E */
+      '?', /* U+074F */
+      '?', /* U+0750 */
+      '?', /* U+0751 */
+      '?', /* U+0752 */
+      '?', /* U+0753 */
+      '?', /* U+0754 */
+      '?', /* U+0755 */
+      '?', /* U+0756 */
+      '?', /* U+0757 */
+      '?', /* U+0758 */
+      '?', /* U+0759 */
+      '?', /* U+075A */
+      '?', /* U+075B */
+      '?', /* U+075C */
+      '?', /* U+075D */
+      '?', /* U+075E */
+      '?', /* U+075F */
+      '?', /* U+0760 */
+      '?', /* U+0761 */
+      '?', /* U+0762 */
+      '?', /* U+0763 */
+      '?', /* U+0764 */
+      '?', /* U+0765 */
+      '?', /* U+0766 */
+      '?', /* U+0767 */
+      '?', /* U+0768 */
+      '?', /* U+0769 */
+      '?', /* U+076A */
+      '?', /* U+076B */
+      '?', /* U+076C */
+      '?', /* U+076D */
+      '?', /* U+076E */
+      '?', /* U+076F */
+      '?', /* U+0770 */
+      '?', /* U+0771 */
+      '?', /* U+0772 */
+      '?', /* U+0773 */
+      '?', /* U+0774 */
+      '?', /* U+0775 */
+      '?', /* U+0776 */
+      '?', /* U+0777 */
+      '?', /* U+0778 */
+      '?', /* U+0779 */
+      '?', /* U+077A */
+      '?', /* U+077B */
+      '?', /* U+077C */
+      '?', /* U+077D */
+      '?', /* U+077E */
+      '?', /* U+077F */
+      '?', /* U+0780 */
+      '?', /* U+0781 */
+      '?', /* U+0782 */
+      '?', /* U+0783 */
+      '?', /* U+0784 */
+      '?', /* U+0785 */
+      '?', /* U+0786 */
+      '?', /* U+0787 */
+      '?', /* U+0788 */
+      '?', /* U+0789 */
+      '?', /* U+078A */
+      '?', /* U+078B */
+      '?', /* U+078C */
+      '?', /* U+078D */
+      '?', /* U+078E */
+      '?', /* U+078F */
+      '?', /* U+0790 */
+      '?', /* U+0791 */
+      '?', /* U+0792 */
+      '?', /* U+0793 */
+      '?', /* U+0794 */
+      '?', /* U+0795 */
+      '?', /* U+0796 */
+      '?', /* U+0797 */
+      '?', /* U+0798 */
+      '?', /* U+0799 */
+      '?', /* U+079A */
+      '?', /* U+079B */
+      '?', /* U+079C */
+      '?', /* U+079D */
+      '?', /* U+079E */
+      '?', /* U+079F */
+      '?', /* U+07A0 */
+      '?', /* U+07A1 */
+      '?', /* U+07A2 */
+      '?', /* U+07A3 */
+      '?', /* U+07A4 */
+      '?', /* U+07A5 */
+      '?', /* U+07A6 */
+      '?', /* U+07A7 */
+      '?', /* U+07A8 */
+      '?', /* U+07A9 */
+      '?', /* U+07AA */
+      '?', /* U+07AB */
+      '?', /* U+07AC */
+      '?', /* U+07AD */
+      '?', /* U+07AE */
+      '?', /* U+07AF */
+      '?', /* U+07B0 */
+      '?', /* U+07B1 */
+      '?', /* U+07B2 */
+      '?', /* U+07B3 */
+      '?', /* U+07B4 */
+      '?', /* U+07B5 */
+      '?', /* U+07B6 */
+      '?', /* U+07B7 */
+      '?', /* U+07B8 */
+      '?', /* U+07B9 */
+      '?', /* U+07BA */
+      '?', /* U+07BB */
+      '?', /* U+07BC */
+      '?', /* U+07BD */
+      '?', /* U+07BE */
+      '?', /* U+07BF */
+      '?', /* U+07C0 */
+      '?', /* U+07C1 */
+      '?', /* U+07C2 */
+      '?', /* U+07C3 */
+      '?', /* U+07C4 */
+      '?', /* U+07C5 */
+      '?', /* U+07C6 */
+      '?', /* U+07C7 */
+      '?', /* U+07C8 */
+      '?', /* U+07C9 */
+      '?', /* U+07CA */
+      '?', /* U+07CB */
+      '?', /* U+07CC */
+      '?', /* U+07CD */
+      '?', /* U+07CE */
+      '?', /* U+07CF */
+      '?', /* U+07D0 */
+      '?', /* U+07D1 */
+      '?', /* U+07D2 */
+      '?', /* U+07D3 */
+      '?', /* U+07D4 */
+      '?', /* U+07D5 */
+      '?', /* U+07D6 */
+      '?', /* U+07D7 */
+      '?', /* U+07D8 */
+      '?', /* U+07D9 */
+      '?', /* U+07DA */
+      '?', /* U+07DB */
+      '?', /* U+07DC */
+      '?', /* U+07DD */
+      '?', /* U+07DE */
+      '?', /* U+07DF */
+      '?', /* U+07E0 */
+      '?', /* U+07E1 */
+      '?', /* U+07E2 */
+      '?', /* U+07E3 */
+      '?', /* U+07E4 */
+      '?', /* U+07E5 */
+      '?', /* U+07E6 */
+      '?', /* U+07E7 */
+      '?', /* U+07E8 */
+      '?', /* U+07E9 */
+      '?', /* U+07EA */
+      '?', /* U+07EB */
+      '?', /* U+07EC */
+      '?', /* U+07ED */
+      '?', /* U+07EE */
+      '?', /* U+07EF */
+      '?', /* U+07F0 */
+      '?', /* U+07F1 */
+      '?', /* U+07F2 */
+      '?', /* U+07F3 */
+      '?', /* U+07F4 */
+      '?', /* U+07F5 */
+      '?', /* U+07F6 */
+      '?', /* U+07F7 */
+      '?', /* U+07F8 */
+      '?', /* U+07F9 */
+      '?', /* U+07FA */
+      '?', /* U+07FB */
+      '?', /* U+07FC */
+      '?', /* U+07FD */
+      '?', /* U+07FE */
+      '?', /* U+07FF */
+      '?', /* U+0800 */
+      '?', /* U+0801 */
+      '?', /* U+0802 */
+      '?', /* U+0803 */
+      '?', /* U+0804 */
+      '?', /* U+0805 */
+      '?', /* U+0806 */
+      '?', /* U+0807 */
+      '?', /* U+0808 */
+      '?', /* U+0809 */
+      '?', /* U+080A */
+      '?', /* U+080B */
+      '?', /* U+080C */
+      '?', /* U+080D */
+      '?', /* U+080E */
+      '?', /* U+080F */
+      '?', /* U+0810 */
+      '?', /* U+0811 */
+      '?', /* U+0812 */
+      '?', /* U+0813 */
+      '?', /* U+0814 */
+      '?', /* U+0815 */
+      '?', /* U+0816 */
+      '?', /* U+0817 */
+      '?', /* U+0818 */
+      '?', /* U+0819 */
+      '?', /* U+081A */
+      '?', /* U+081B */
+      '?', /* U+081C */
+      '?', /* U+081D */
+      '?', /* U+081E */
+      '?', /* U+081F */
+      '?', /* U+0820 */
+      '?', /* U+0821 */
+      '?', /* U+0822 */
+      '?', /* U+0823 */
+      '?', /* U+0824 */
+      '?', /* U+0825 */
+      '?', /* U+0826 */
+      '?', /* U+0827 */
+      '?', /* U+0828 */
+      '?', /* U+0829 */
+      '?', /* U+082A */
+      '?', /* U+082B */
+      '?', /* U+082C */
+      '?', /* U+082D */
+      '?', /* U+082E */
+      '?', /* U+082F */
+      '?', /* U+0830 */
+      '?', /* U+0831 */
+      '?', /* U+0832 */
+      '?', /* U+0833 */
+      '?', /* U+0834 */
+      '?', /* U+0835 */
+      '?', /* U+0836 */
+      '?', /* U+0837 */
+      '?', /* U+0838 */
+      '?', /* U+0839 */
+      '?', /* U+083A */
+      '?', /* U+083B */
+      '?', /* U+083C */
+      '?', /* U+083D */
+      '?', /* U+083E */
+      '?', /* U+083F */
+      '?', /* U+0840 */
+      '?', /* U+0841 */
+      '?', /* U+0842 */
+      '?', /* U+0843 */
+      '?', /* U+0844 */
+      '?', /* U+0845 */
+      '?', /* U+0846 */
+      '?', /* U+0847 */
+      '?', /* U+0848 */
+      '?', /* U+0849 */
+      '?', /* U+084A */
+      '?', /* U+084B */
+      '?', /* U+084C */
+      '?', /* U+084D */
+      '?', /* U+084E */
+      '?', /* U+084F */
+      '?', /* U+0850 */
+      '?', /* U+0851 */
+      '?', /* U+0852 */
+      '?', /* U+0853 */
+      '?', /* U+0854 */
+      '?', /* U+0855 */
+      '?', /* U+0856 */
+      '?', /* U+0857 */
+      '?', /* U+0858 */
+      '?', /* U+0859 */
+      '?', /* U+085A */
+      '?', /* U+085B */
+      '?', /* U+085C */
+      '?', /* U+085D */
+      '?', /* U+085E */
+      '?', /* U+085F */
+      '?', /* U+0860 */
+      '?', /* U+0861 */
+      '?', /* U+0862 */
+      '?', /* U+0863 */
+      '?', /* U+0864 */
+      '?', /* U+0865 */
+      '?', /* U+0866 */
+      '?', /* U+0867 */
+      '?', /* U+0868 */
+      '?', /* U+0869 */
+      '?', /* U+086A */
+      '?', /* U+086B */
+      '?', /* U+086C */
+      '?', /* U+086D */
+      '?', /* U+086E */
+      '?', /* U+086F */
+      '?', /* U+0870 */
+      '?', /* U+0871 */
+      '?', /* U+0872 */
+      '?', /* U+0873 */
+      '?', /* U+0874 */
+      '?', /* U+0875 */
+      '?', /* U+0876 */
+      '?', /* U+0877 */
+      '?', /* U+0878 */
+      '?', /* U+0879 */
+      '?', /* U+087A */
+      '?', /* U+087B */
+      '?', /* U+087C */
+      '?', /* U+087D */
+      '?', /* U+087E */
+      '?', /* U+087F */
+      '?', /* U+0880 */
+      '?', /* U+0881 */
+      '?', /* U+0882 */
+      '?', /* U+0883 */
+      '?', /* U+0884 */
+      '?', /* U+0885 */
+      '?', /* U+0886 */
+      '?', /* U+0887 */
+      '?', /* U+0888 */
+      '?', /* U+0889 */
+      '?', /* U+088A */
+      '?', /* U+088B */
+      '?', /* U+088C */
+      '?', /* U+088D */
+      '?', /* U+088E */
+      '?', /* U+088F */
+      '?', /* U+0890 */
+      '?', /* U+0891 */
+      '?', /* U+0892 */
+      '?', /* U+0893 */
+      '?', /* U+0894 */
+      '?', /* U+0895 */
+      '?', /* U+0896 */
+      '?', /* U+0897 */
+      '?', /* U+0898 */
+      '?', /* U+0899 */
+      '?', /* U+089A */
+      '?', /* U+089B */
+      '?', /* U+089C */
+      '?', /* U+089D */
+      '?', /* U+089E */
+      '?', /* U+089F */
+      '?', /* U+08A0 */
+      '?', /* U+08A1 */
+      '?', /* U+08A2 */
+      '?', /* U+08A3 */
+      '?', /* U+08A4 */
+      '?', /* U+08A5 */
+      '?', /* U+08A6 */
+      '?', /* U+08A7 */
+      '?', /* U+08A8 */
+      '?', /* U+08A9 */
+      '?', /* U+08AA */
+      '?', /* U+08AB */
+      '?', /* U+08AC */
+      '?', /* U+08AD */
+      '?', /* U+08AE */
+      '?', /* U+08AF */
+      '?', /* U+08B0 */
+      '?', /* U+08B1 */
+      '?', /* U+08B2 */
+      '?', /* U+08B3 */
+      '?', /* U+08B4 */
+      '?', /* U+08B5 */
+      '?', /* U+08B6 */
+      '?', /* U+08B7 */
+      '?', /* U+08B8 */
+      '?', /* U+08B9 */
+      '?', /* U+08BA */
+      '?', /* U+08BB */
+      '?', /* U+08BC */
+      '?', /* U+08BD */
+      '?', /* U+08BE */
+      '?', /* U+08BF */
+      '?', /* U+08C0 */
+      '?', /* U+08C1 */
+      '?', /* U+08C2 */
+      '?', /* U+08C3 */
+      '?', /* U+08C4 */
+      '?', /* U+08C5 */
+      '?', /* U+08C6 */
+      '?', /* U+08C7 */
+      '?', /* U+08C8 */
+      '?', /* U+08C9 */
+      '?', /* U+08CA */
+      '?', /* U+08CB */
+      '?', /* U+08CC */
+      '?', /* U+08CD */
+      '?', /* U+08CE */
+      '?', /* U+08CF */
+      '?', /* U+08D0 */
+      '?', /* U+08D1 */
+      '?', /* U+08D2 */
+      '?', /* U+08D3 */
+      '?', /* U+08D4 */
+      '?', /* U+08D5 */
+      '?', /* U+08D6 */
+      '?', /* U+08D7 */
+      '?', /* U+08D8 */
+      '?', /* U+08D9 */
+      '?', /* U+08DA */
+      '?', /* U+08DB */
+      '?', /* U+08DC */
+      '?', /* U+08DD */
+      '?', /* U+08DE */
+      '?', /* U+08DF */
+      '?', /* U+08E0 */
+      '?', /* U+08E1 */
+      '?', /* U+08E2 */
+      '?', /* U+08E3 */
+      '?', /* U+08E4 */
+      '?', /* U+08E5 */
+      '?', /* U+08E6 */
+      '?', /* U+08E7 */
+      '?', /* U+08E8 */
+      '?', /* U+08E9 */
+      '?', /* U+08EA */
+      '?', /* U+08EB */
+      '?', /* U+08EC */
+      '?', /* U+08ED */
+      '?', /* U+08EE */
+      '?', /* U+08EF */
+      '?', /* U+08F0 */
+      '?', /* U+08F1 */
+      '?', /* U+08F2 */
+      '?', /* U+08F3 */
+      '?', /* U+08F4 */
+      '?', /* U+08F5 */
+      '?', /* U+08F6 */
+      '?', /* U+08F7 */
+      '?', /* U+08F8 */
+      '?', /* U+08F9 */
+      '?', /* U+08FA */
+      '?', /* U+08FB */
+      '?', /* U+08FC */
+      '?', /* U+08FD */
+      '?', /* U+08FE */
+      '?', /* U+08FF */
+      '?', /* U+0900 */
+      '?', /* U+0901 */
+      '?', /* U+0902 */
+      '?', /* U+0903 */
+      '?', /* U+0904 */
+      '?', /* U+0905 */
+      '?', /* U+0906 */
+      '?', /* U+0907 */
+      '?', /* U+0908 */
+      '?', /* U+0909 */
+      '?', /* U+090A */
+      '?', /* U+090B */
+      '?', /* U+090C */
+      '?', /* U+090D */
+      '?', /* U+090E */
+      '?', /* U+090F */
+      '?', /* U+0910 */
+      '?', /* U+0911 */
+      '?', /* U+0912 */
+      '?', /* U+0913 */
+      '?', /* U+0914 */
+      '?', /* U+0915 */
+      '?', /* U+0916 */
+      '?', /* U+0917 */
+      '?', /* U+0918 */
+      '?', /* U+0919 */
+      '?', /* U+091A */
+      '?', /* U+091B */
+      '?', /* U+091C */
+      '?', /* U+091D */
+      '?', /* U+091E */
+      '?', /* U+091F */
+      '?', /* U+0920 */
+      '?', /* U+0921 */
+      '?', /* U+0922 */
+      '?', /* U+0923 */
+      '?', /* U+0924 */
+      '?', /* U+0925 */
+      '?', /* U+0926 */
+      '?', /* U+0927 */
+      '?', /* U+0928 */
+      '?', /* U+0929 */
+      '?', /* U+092A */
+      '?', /* U+092B */
+      '?', /* U+092C */
+      '?', /* U+092D */
+      '?', /* U+092E */
+      '?', /* U+092F */
+      '?', /* U+0930 */
+      '?', /* U+0931 */
+      '?', /* U+0932 */
+      '?', /* U+0933 */
+      '?', /* U+0934 */
+      '?', /* U+0935 */
+      '?', /* U+0936 */
+      '?', /* U+0937 */
+      '?', /* U+0938 */
+      '?', /* U+0939 */
+      '?', /* U+093A */
+      '?', /* U+093B */
+      '?', /* U+093C */
+      '?', /* U+093D */
+      '?', /* U+093E */
+      '?', /* U+093F */
+      '?', /* U+0940 */
+      '?', /* U+0941 */
+      '?', /* U+0942 */
+      '?', /* U+0943 */
+      '?', /* U+0944 */
+      '?', /* U+0945 */
+      '?', /* U+0946 */
+      '?', /* U+0947 */
+      '?', /* U+0948 */
+      '?', /* U+0949 */
+      '?', /* U+094A */
+      '?', /* U+094B */
+      '?', /* U+094C */
+      '?', /* U+094D */
+      '?', /* U+094E */
+      '?', /* U+094F */
+      '?', /* U+0950 */
+      '?', /* U+0951 */
+      '?', /* U+0952 */
+      '?', /* U+0953 */
+      '?', /* U+0954 */
+      '?', /* U+0955 */
+      '?', /* U+0956 */
+      '?', /* U+0957 */
+      '?', /* U+0958 */
+      '?', /* U+0959 */
+      '?', /* U+095A */
+      '?', /* U+095B */
+      '?', /* U+095C */
+      '?', /* U+095D */
+      '?', /* U+095E */
+      '?', /* U+095F */
+      '?', /* U+0960 */
+      '?', /* U+0961 */
+      '?', /* U+0962 */
+      '?', /* U+0963 */
+      '?', /* U+0964 */
+      '?', /* U+0965 */
+      '?', /* U+0966 */
+      '?', /* U+0967 */
+      '?', /* U+0968 */
+      '?', /* U+0969 */
+      '?', /* U+096A */
+      '?', /* U+096B */
+      '?', /* U+096C */
+      '?', /* U+096D */
+      '?', /* U+096E */
+      '?', /* U+096F */
+      '?', /* U+0970 */
+      '?', /* U+0971 */
+      '?', /* U+0972 */
+      '?', /* U+0973 */
+      '?', /* U+0974 */
+      '?', /* U+0975 */
+      '?', /* U+0976 */
+      '?', /* U+0977 */
+      '?', /* U+0978 */
+      '?', /* U+0979 */
+      '?', /* U+097A */
+      '?', /* U+097B */
+      '?', /* U+097C */
+      '?', /* U+097D */
+      '?', /* U+097E */
+      '?', /* U+097F */
+      '?', /* U+0980 */
+      '?', /* U+0981 */
+      '?', /* U+0982 */
+      '?', /* U+0983 */
+      '?', /* U+0984 */
+      '?', /* U+0985 */
+      '?', /* U+0986 */
+      '?', /* U+0987 */
+      '?', /* U+0988 */
+      '?', /* U+0989 */
+      '?', /* U+098A */
+      '?', /* U+098B */
+      '?', /* U+098C */
+      '?', /* U+098D */
+      '?', /* U+098E */
+      '?', /* U+098F */
+      '?', /* U+0990 */
+      '?', /* U+0991 */
+      '?', /* U+0992 */
+      '?', /* U+0993 */
+      '?', /* U+0994 */
+      '?', /* U+0995 */
+      '?', /* U+0996 */
+      '?', /* U+0997 */
+      '?', /* U+0998 */
+      '?', /* U+0999 */
+      '?', /* U+099A */
+      '?', /* U+099B */
+      '?', /* U+099C */
+      '?', /* U+099D */
+      '?', /* U+099E */
+      '?', /* U+099F */
+      '?', /* U+09A0 */
+      '?', /* U+09A1 */
+      '?', /* U+09A2 */
+      '?', /* U+09A3 */
+      '?', /* U+09A4 */
+      '?', /* U+09A5 */
+      '?', /* U+09A6 */
+      '?', /* U+09A7 */
+      '?', /* U+09A8 */
+      '?', /* U+09A9 */
+      '?', /* U+09AA */
+      '?', /* U+09AB */
+      '?', /* U+09AC */
+      '?', /* U+09AD */
+      '?', /* U+09AE */
+      '?', /* U+09AF */
+      '?', /* U+09B0 */
+      '?', /* U+09B1 */
+      '?', /* U+09B2 */
+      '?', /* U+09B3 */
+      '?', /* U+09B4 */
+      '?', /* U+09B5 */
+      '?', /* U+09B6 */
+      '?', /* U+09B7 */
+      '?', /* U+09B8 */
+      '?', /* U+09B9 */
+      '?', /* U+09BA */
+      '?', /* U+09BB */
+      '?', /* U+09BC */
+      '?', /* U+09BD */
+      '?', /* U+09BE */
+      '?', /* U+09BF */
+      '?', /* U+09C0 */
+      '?', /* U+09C1 */
+      '?', /* U+09C2 */
+      '?', /* U+09C3 */
+      '?', /* U+09C4 */
+      '?', /* U+09C5 */
+      '?', /* U+09C6 */
+      '?', /* U+09C7 */
+      '?', /* U+09C8 */
+      '?', /* U+09C9 */
+      '?', /* U+09CA */
+      '?', /* U+09CB */
+      '?', /* U+09CC */
+      '?', /* U+09CD */
+      '?', /* U+09CE */
+      '?', /* U+09CF */
+      '?', /* U+09D0 */
+      '?', /* U+09D1 */
+      '?', /* U+09D2 */
+      '?', /* U+09D3 */
+      '?', /* U+09D4 */
+      '?', /* U+09D5 */
+      '?', /* U+09D6 */
+      '?', /* U+09D7 */
+      '?', /* U+09D8 */
+      '?', /* U+09D9 */
+      '?', /* U+09DA */
+      '?', /* U+09DB */
+      '?', /* U+09DC */
+      '?', /* U+09DD */
+      '?', /* U+09DE */
+      '?', /* U+09DF */
+      '?', /* U+09E0 */
+      '?', /* U+09E1 */
+      '?', /* U+09E2 */
+      '?', /* U+09E3 */
+      '?', /* U+09E4 */
+      '?', /* U+09E5 */
+      '?', /* U+09E6 */
+      '?', /* U+09E7 */
+      '?', /* U+09E8 */
+      '?', /* U+09E9 */
+      '?', /* U+09EA */
+      '?', /* U+09EB */
+      '?', /* U+09EC */
+      '?', /* U+09ED */
+      '?', /* U+09EE */
+      '?', /* U+09EF */
+      '?', /* U+09F0 */
+      '?', /* U+09F1 */
+      '?', /* U+09F2 */
+      '?', /* U+09F3 */
+      '?', /* U+09F4 */
+      '?', /* U+09F5 */
+      '?', /* U+09F6 */
+      '?', /* U+09F7 */
+      '?', /* U+09F8 */
+      '?', /* U+09F9 */
+      '?', /* U+09FA */
+      '?', /* U+09FB */
+      '?', /* U+09FC */
+      '?', /* U+09FD */
+      '?', /* U+09FE */
+      '?', /* U+09FF */
+      '?', /* U+0A00 */
+      '?', /* U+0A01 */
+      '?', /* U+0A02 */
+      '?', /* U+0A03 */
+      '?', /* U+0A04 */
+      '?', /* U+0A05 */
+      '?', /* U+0A06 */
+      '?', /* U+0A07 */
+      '?', /* U+0A08 */
+      '?', /* U+0A09 */
+      '?', /* U+0A0A */
+      '?', /* U+0A0B */
+      '?', /* U+0A0C */
+      '?', /* U+0A0D */
+      '?', /* U+0A0E */
+      '?', /* U+0A0F */
+      '?', /* U+0A10 */
+      '?', /* U+0A11 */
+      '?', /* U+0A12 */
+      '?', /* U+0A13 */
+      '?', /* U+0A14 */
+      '?', /* U+0A15 */
+      '?', /* U+0A16 */
+      '?', /* U+0A17 */
+      '?', /* U+0A18 */
+      '?', /* U+0A19 */
+      '?', /* U+0A1A */
+      '?', /* U+0A1B */
+      '?', /* U+0A1C */
+      '?', /* U+0A1D */
+      '?', /* U+0A1E */
+      '?', /* U+0A1F */
+      '?', /* U+0A20 */
+      '?', /* U+0A21 */
+      '?', /* U+0A22 */
+      '?', /* U+0A23 */
+      '?', /* U+0A24 */
+      '?', /* U+0A25 */
+      '?', /* U+0A26 */
+      '?', /* U+0A27 */
+      '?', /* U+0A28 */
+      '?', /* U+0A29 */
+      '?', /* U+0A2A */
+      '?', /* U+0A2B */
+      '?', /* U+0A2C */
+      '?', /* U+0A2D */
+      '?', /* U+0A2E */
+      '?', /* U+0A2F */
+      '?', /* U+0A30 */
+      '?', /* U+0A31 */
+      '?', /* U+0A32 */
+      '?', /* U+0A33 */
+      '?', /* U+0A34 */
+      '?', /* U+0A35 */
+      '?', /* U+0A36 */
+      '?', /* U+0A37 */
+      '?', /* U+0A38 */
+      '?', /* U+0A39 */
+      '?', /* U+0A3A */
+      '?', /* U+0A3B */
+      '?', /* U+0A3C */
+      '?', /* U+0A3D */
+      '?', /* U+0A3E */
+      '?', /* U+0A3F */
+      '?', /* U+0A40 */
+      '?', /* U+0A41 */
+      '?', /* U+0A42 */
+      '?', /* U+0A43 */
+      '?', /* U+0A44 */
+      '?', /* U+0A45 */
+      '?', /* U+0A46 */
+      '?', /* U+0A47 */
+      '?', /* U+0A48 */
+      '?', /* U+0A49 */
+      '?', /* U+0A4A */
+      '?', /* U+0A4B */
+      '?', /* U+0A4C */
+      '?', /* U+0A4D */
+      '?', /* U+0A4E */
+      '?', /* U+0A4F */
+      '?', /* U+0A50 */
+      '?', /* U+0A51 */
+      '?', /* U+0A52 */
+      '?', /* U+0A53 */
+      '?', /* U+0A54 */
+      '?', /* U+0A55 */
+      '?', /* U+0A56 */
+      '?', /* U+0A57 */
+      '?', /* U+0A58 */
+      '?', /* U+0A59 */
+      '?', /* U+0A5A */
+      '?', /* U+0A5B */
+      '?', /* U+0A5C */
+      '?', /* U+0A5D */
+      '?', /* U+0A5E */
+      '?', /* U+0A5F */
+      '?', /* U+0A60 */
+      '?', /* U+0A61 */
+      '?', /* U+0A62 */
+      '?', /* U+0A63 */
+      '?', /* U+0A64 */
+      '?', /* U+0A65 */
+      '?', /* U+0A66 */
+      '?', /* U+0A67 */
+      '?', /* U+0A68 */
+      '?', /* U+0A69 */
+      '?', /* U+0A6A */
+      '?', /* U+0A6B */
+      '?', /* U+0A6C */
+      '?', /* U+0A6D */
+      '?', /* U+0A6E */
+      '?', /* U+0A6F */
+      '?', /* U+0A70 */
+      '?', /* U+0A71 */
+      '?', /* U+0A72 */
+      '?', /* U+0A73 */
+      '?', /* U+0A74 */
+      '?', /* U+0A75 */
+      '?', /* U+0A76 */
+      '?', /* U+0A77 */
+      '?', /* U+0A78 */
+      '?', /* U+0A79 */
+      '?', /* U+0A7A */
+      '?', /* U+0A7B */
+      '?', /* U+0A7C */
+      '?', /* U+0A7D */
+      '?', /* U+0A7E */
+      '?', /* U+0A7F */
+      '?', /* U+0A80 */
+      '?', /* U+0A81 */
+      '?', /* U+0A82 */
+      '?', /* U+0A83 */
+      '?', /* U+0A84 */
+      '?', /* U+0A85 */
+      '?', /* U+0A86 */
+      '?', /* U+0A87 */
+      '?', /* U+0A88 */
+      '?', /* U+0A89 */
+      '?', /* U+0A8A */
+      '?', /* U+0A8B */
+      '?', /* U+0A8C */
+      '?', /* U+0A8D */
+      '?', /* U+0A8E */
+      '?', /* U+0A8F */
+      '?', /* U+0A90 */
+      '?', /* U+0A91 */
+      '?', /* U+0A92 */
+      '?', /* U+0A93 */
+      '?', /* U+0A94 */
+      '?', /* U+0A95 */
+      '?', /* U+0A96 */
+      '?', /* U+0A97 */
+      '?', /* U+0A98 */
+      '?', /* U+0A99 */
+      '?', /* U+0A9A */
+      '?', /* U+0A9B */
+      '?', /* U+0A9C */
+      '?', /* U+0A9D */
+      '?', /* U+0A9E */
+      '?', /* U+0A9F */
+      '?', /* U+0AA0 */
+      '?', /* U+0AA1 */
+      '?', /* U+0AA2 */
+      '?', /* U+0AA3 */
+      '?', /* U+0AA4 */
+      '?', /* U+0AA5 */
+      '?', /* U+0AA6 */
+      '?', /* U+0AA7 */
+      '?', /* U+0AA8 */
+      '?', /* U+0AA9 */
+      '?', /* U+0AAA */
+      '?', /* U+0AAB */
+      '?', /* U+0AAC */
+      '?', /* U+0AAD */
+      '?', /* U+0AAE */
+      '?', /* U+0AAF */
+      '?', /* U+0AB0 */
+      '?', /* U+0AB1 */
+      '?', /* U+0AB2 */
+      '?', /* U+0AB3 */
+      '?', /* U+0AB4 */
+      '?', /* U+0AB5 */
+      '?', /* U+0AB6 */
+      '?', /* U+0AB7 */
+      '?', /* U+0AB8 */
+      '?', /* U+0AB9 */
+      '?', /* U+0ABA */
+      '?', /* U+0ABB */
+      '?', /* U+0ABC */
+      '?', /* U+0ABD */
+      '?', /* U+0ABE */
+      '?', /* U+0ABF */
+      '?', /* U+0AC0 */
+      '?', /* U+0AC1 */
+      '?', /* U+0AC2 */
+      '?', /* U+0AC3 */
+      '?', /* U+0AC4 */
+      '?', /* U+0AC5 */
+      '?', /* U+0AC6 */
+      '?', /* U+0AC7 */
+      '?', /* U+0AC8 */
+      '?', /* U+0AC9 */
+      '?', /* U+0ACA */
+      '?', /* U+0ACB */
+      '?', /* U+0ACC */
+      '?', /* U+0ACD */
+      '?', /* U+0ACE */
+      '?', /* U+0ACF */
+      '?', /* U+0AD0 */
+      '?', /* U+0AD1 */
+      '?', /* U+0AD2 */
+      '?', /* U+0AD3 */
+      '?', /* U+0AD4 */
+      '?', /* U+0AD5 */
+      '?', /* U+0AD6 */
+      '?', /* U+0AD7 */
+      '?', /* U+0AD8 */
+      '?', /* U+0AD9 */
+      '?', /* U+0ADA */
+      '?', /* U+0ADB */
+      '?', /* U+0ADC */
+      '?', /* U+0ADD */
+      '?', /* U+0ADE */
+      '?', /* U+0ADF */
+      '?', /* U+0AE0 */
+      '?', /* U+0AE1 */
+      '?', /* U+0AE2 */
+      '?', /* U+0AE3 */
+      '?', /* U+0AE4 */
+      '?', /* U+0AE5 */
+      '?', /* U+0AE6 */
+      '?', /* U+0AE7 */
+      '?', /* U+0AE8 */
+      '?', /* U+0AE9 */
+      '?', /* U+0AEA */
+      '?', /* U+0AEB */
+      '?', /* U+0AEC */
+      '?', /* U+0AED */
+      '?', /* U+0AEE */
+      '?', /* U+0AEF */
+      '?', /* U+0AF0 */
+      '?', /* U+0AF1 */
+      '?', /* U+0AF2 */
+      '?', /* U+0AF3 */
+      '?', /* U+0AF4 */
+      '?', /* U+0AF5 */
+      '?', /* U+0AF6 */
+      '?', /* U+0AF7 */
+      '?', /* U+0AF8 */
+      '?', /* U+0AF9 */
+      '?', /* U+0AFA */
+      '?', /* U+0AFB */
+      '?', /* U+0AFC */
+      '?', /* U+0AFD */
+      '?', /* U+0AFE */
+      '?', /* U+0AFF */
+      '?', /* U+0B00 */
+      '?', /* U+0B01 */
+      '?', /* U+0B02 */
+      '?', /* U+0B03 */
+      '?', /* U+0B04 */
+      '?', /* U+0B05 */
+      '?', /* U+0B06 */
+      '?', /* U+0B07 */
+      '?', /* U+0B08 */
+      '?', /* U+0B09 */
+      '?', /* U+0B0A */
+      '?', /* U+0B0B */
+      '?', /* U+0B0C */
+      '?', /* U+0B0D */
+      '?', /* U+0B0E */
+      '?', /* U+0B0F */
+      '?', /* U+0B10 */
+      '?', /* U+0B11 */
+      '?', /* U+0B12 */
+      '?', /* U+0B13 */
+      '?', /* U+0B14 */
+      '?', /* U+0B15 */
+      '?', /* U+0B16 */
+      '?', /* U+0B17 */
+      '?', /* U+0B18 */
+      '?', /* U+0B19 */
+      '?', /* U+0B1A */
+      '?', /* U+0B1B */
+      '?', /* U+0B1C */
+      '?', /* U+0B1D */
+      '?', /* U+0B1E */
+      '?', /* U+0B1F */
+      '?', /* U+0B20 */
+      '?', /* U+0B21 */
+      '?', /* U+0B22 */
+      '?', /* U+0B23 */
+      '?', /* U+0B24 */
+      '?', /* U+0B25 */
+      '?', /* U+0B26 */
+      '?', /* U+0B27 */
+      '?', /* U+0B28 */
+      '?', /* U+0B29 */
+      '?', /* U+0B2A */
+      '?', /* U+0B2B */
+      '?', /* U+0B2C */
+      '?', /* U+0B2D */
+      '?', /* U+0B2E */
+      '?', /* U+0B2F */
+      '?', /* U+0B30 */
+      '?', /* U+0B31 */
+      '?', /* U+0B32 */
+      '?', /* U+0B33 */
+      '?', /* U+0B34 */
+      '?', /* U+0B35 */
+      '?', /* U+0B36 */
+      '?', /* U+0B37 */
+      '?', /* U+0B38 */
+      '?', /* U+0B39 */
+      '?', /* U+0B3A */
+      '?', /* U+0B3B */
+      '?', /* U+0B3C */
+      '?', /* U+0B3D */
+      '?', /* U+0B3E */
+      '?', /* U+0B3F */
+      '?', /* U+0B40 */
+      '?', /* U+0B41 */
+      '?', /* U+0B42 */
+      '?', /* U+0B43 */
+      '?', /* U+0B44 */
+      '?', /* U+0B45 */
+      '?', /* U+0B46 */
+      '?', /* U+0B47 */
+      '?', /* U+0B48 */
+      '?', /* U+0B49 */
+      '?', /* U+0B4A */
+      '?', /* U+0B4B */
+      '?', /* U+0B4C */
+      '?', /* U+0B4D */
+      '?', /* U+0B4E */
+      '?', /* U+0B4F */
+      '?', /* U+0B50 */
+      '?', /* U+0B51 */
+      '?', /* U+0B52 */
+      '?', /* U+0B53 */
+      '?', /* U+0B54 */
+      '?', /* U+0B55 */
+      '?', /* U+0B56 */
+      '?', /* U+0B57 */
+      '?', /* U+0B58 */
+      '?', /* U+0B59 */
+      '?', /* U+0B5A */
+      '?', /* U+0B5B */
+      '?', /* U+0B5C */
+      '?', /* U+0B5D */
+      '?', /* U+0B5E */
+      '?', /* U+0B5F */
+      '?', /* U+0B60 */
+      '?', /* U+0B61 */
+      '?', /* U+0B62 */
+      '?', /* U+0B63 */
+      '?', /* U+0B64 */
+      '?', /* U+0B65 */
+      '?', /* U+0B66 */
+      '?', /* U+0B67 */
+      '?', /* U+0B68 */
+      '?', /* U+0B69 */
+      '?', /* U+0B6A */
+      '?', /* U+0B6B */
+      '?', /* U+0B6C */
+      '?', /* U+0B6D */
+      '?', /* U+0B6E */
+      '?', /* U+0B6F */
+      '?', /* U+0B70 */
+      '?', /* U+0B71 */
+      '?', /* U+0B72 */
+      '?', /* U+0B73 */
+      '?', /* U+0B74 */
+      '?', /* U+0B75 */
+      '?', /* U+0B76 */
+      '?', /* U+0B77 */
+      '?', /* U+0B78 */
+      '?', /* U+0B79 */
+      '?', /* U+0B7A */
+      '?', /* U+0B7B */
+      '?', /* U+0B7C */
+      '?', /* U+0B7D */
+      '?', /* U+0B7E */
+      '?', /* U+0B7F */
+      '?', /* U+0B80 */
+      '?', /* U+0B81 */
+      '?', /* U+0B82 */
+      '?', /* U+0B83 */
+      '?', /* U+0B84 */
+      '?', /* U+0B85 */
+      '?', /* U+0B86 */
+      '?', /* U+0B87 */
+      '?', /* U+0B88 */
+      '?', /* U+0B89 */
+      '?', /* U+0B8A */
+      '?', /* U+0B8B */
+      '?', /* U+0B8C */
+      '?', /* U+0B8D */
+      '?', /* U+0B8E */
+      '?', /* U+0B8F */
+      '?', /* U+0B90 */
+      '?', /* U+0B91 */
+      '?', /* U+0B92 */
+      '?', /* U+0B93 */
+      '?', /* U+0B94 */
+      '?', /* U+0B95 */
+      '?', /* U+0B96 */
+      '?', /* U+0B97 */
+      '?', /* U+0B98 */
+      '?', /* U+0B99 */
+      '?', /* U+0B9A */
+      '?', /* U+0B9B */
+      '?', /* U+0B9C */
+      '?', /* U+0B9D */
+      '?', /* U+0B9E */
+      '?', /* U+0B9F */
+      '?', /* U+0BA0 */
+      '?', /* U+0BA1 */
+      '?', /* U+0BA2 */
+      '?', /* U+0BA3 */
+      '?', /* U+0BA4 */
+      '?', /* U+0BA5 */
+      '?', /* U+0BA6 */
+      '?', /* U+0BA7 */
+      '?', /* U+0BA8 */
+      '?', /* U+0BA9 */
+      '?', /* U+0BAA */
+      '?', /* U+0BAB */
+      '?', /* U+0BAC */
+      '?', /* U+0BAD */
+      '?', /* U+0BAE */
+      '?', /* U+0BAF */
+      '?', /* U+0BB0 */
+      '?', /* U+0BB1 */
+      '?', /* U+0BB2 */
+      '?', /* U+0BB3 */
+      '?', /* U+0BB4 */
+      '?', /* U+0BB5 */
+      '?', /* U+0BB6 */
+      '?', /* U+0BB7 */
+      '?', /* U+0BB8 */
+      '?', /* U+0BB9 */
+      '?', /* U+0BBA */
+      '?', /* U+0BBB */
+      '?', /* U+0BBC */
+      '?', /* U+0BBD */
+      '?', /* U+0BBE */
+      '?', /* U+0BBF */
+      '?', /* U+0BC0 */
+      '?', /* U+0BC1 */
+      '?', /* U+0BC2 */
+      '?', /* U+0BC3 */
+      '?', /* U+0BC4 */
+      '?', /* U+0BC5 */
+      '?', /* U+0BC6 */
+      '?', /* U+0BC7 */
+      '?', /* U+0BC8 */
+      '?', /* U+0BC9 */
+      '?', /* U+0BCA */
+      '?', /* U+0BCB */
+      '?', /* U+0BCC */
+      '?', /* U+0BCD */
+      '?', /* U+0BCE */
+      '?', /* U+0BCF */
+      '?', /* U+0BD0 */
+      '?', /* U+0BD1 */
+      '?', /* U+0BD2 */
+      '?', /* U+0BD3 */
+      '?', /* U+0BD4 */
+      '?', /* U+0BD5 */
+      '?', /* U+0BD6 */
+      '?', /* U+0BD7 */
+      '?', /* U+0BD8 */
+      '?', /* U+0BD9 */
+      '?', /* U+0BDA */
+      '?', /* U+0BDB */
+      '?', /* U+0BDC */
+      '?', /* U+0BDD */
+      '?', /* U+0BDE */
+      '?', /* U+0BDF */
+      '?', /* U+0BE0 */
+      '?', /* U+0BE1 */
+      '?', /* U+0BE2 */
+      '?', /* U+0BE3 */
+      '?', /* U+0BE4 */
+      '?', /* U+0BE5 */
+      '?', /* U+0BE6 */
+      '?', /* U+0BE7 */
+      '?', /* U+0BE8 */
+      '?', /* U+0BE9 */
+      '?', /* U+0BEA */
+      '?', /* U+0BEB */
+      '?', /* U+0BEC */
+      '?', /* U+0BED */
+      '?', /* U+0BEE */
+      '?', /* U+0BEF */
+      '?', /* U+0BF0 */
+      '?', /* U+0BF1 */
+      '?', /* U+0BF2 */
+      '?', /* U+0BF3 */
+      '?', /* U+0BF4 */
+      '?', /* U+0BF5 */
+      '?', /* U+0BF6 */
+      '?', /* U+0BF7 */
+      '?', /* U+0BF8 */
+      '?', /* U+0BF9 */
+      '?', /* U+0BFA */
+      '?', /* U+0BFB */
+      '?', /* U+0BFC */
+      '?', /* U+0BFD */
+      '?', /* U+0BFE */
+      '?', /* U+0BFF */
+      '?', /* U+0C00 */
+      '?', /* U+0C01 */
+      '?', /* U+0C02 */
+      '?', /* U+0C03 */
+      '?', /* U+0C04 */
+      '?', /* U+0C05 */
+      '?', /* U+0C06 */
+      '?', /* U+0C07 */
+      '?', /* U+0C08 */
+      '?', /* U+0C09 */
+      '?', /* U+0C0A */
+      '?', /* U+0C0B */
+      '?', /* U+0C0C */
+      '?', /* U+0C0D */
+      '?', /* U+0C0E */
+      '?', /* U+0C0F */
+      '?', /* U+0C10 */
+      '?', /* U+0C11 */
+      '?', /* U+0C12 */
+      '?', /* U+0C13 */
+      '?', /* U+0C14 */
+      '?', /* U+0C15 */
+      '?', /* U+0C16 */
+      '?', /* U+0C17 */
+      '?', /* U+0C18 */
+      '?', /* U+0C19 */
+      '?', /* U+0C1A */
+      '?', /* U+0C1B */
+      '?', /* U+0C1C */
+      '?', /* U+0C1D */
+      '?', /* U+0C1E */
+      '?', /* U+0C1F */
+      '?', /* U+0C20 */
+      '?', /* U+0C21 */
+      '?', /* U+0C22 */
+      '?', /* U+0C23 */
+      '?', /* U+0C24 */
+      '?', /* U+0C25 */
+      '?', /* U+0C26 */
+      '?', /* U+0C27 */
+      '?', /* U+0C28 */
+      '?', /* U+0C29 */
+      '?', /* U+0C2A */
+      '?', /* U+0C2B */
+      '?', /* U+0C2C */
+      '?', /* U+0C2D */
+      '?', /* U+0C2E */
+      '?', /* U+0C2F */
+      '?', /* U+0C30 */
+      '?', /* U+0C31 */
+      '?', /* U+0C32 */
+      '?', /* U+0C33 */
+      '?', /* U+0C34 */
+      '?', /* U+0C35 */
+      '?', /* U+0C36 */
+      '?', /* U+0C37 */
+      '?', /* U+0C38 */
+      '?', /* U+0C39 */
+      '?', /* U+0C3A */
+      '?', /* U+0C3B */
+      '?', /* U+0C3C */
+      '?', /* U+0C3D */
+      '?', /* U+0C3E */
+      '?', /* U+0C3F */
+      '?', /* U+0C40 */
+      '?', /* U+0C41 */
+      '?', /* U+0C42 */
+      '?', /* U+0C43 */
+      '?', /* U+0C44 */
+      '?', /* U+0C45 */
+      '?', /* U+0C46 */
+      '?', /* U+0C47 */
+      '?', /* U+0C48 */
+      '?', /* U+0C49 */
+      '?', /* U+0C4A */
+      '?', /* U+0C4B */
+      '?', /* U+0C4C */
+      '?', /* U+0C4D */
+      '?', /* U+0C4E */
+      '?', /* U+0C4F */
+      '?', /* U+0C50 */
+      '?', /* U+0C51 */
+      '?', /* U+0C52 */
+      '?', /* U+0C53 */
+      '?', /* U+0C54 */
+      '?', /* U+0C55 */
+      '?', /* U+0C56 */
+      '?', /* U+0C57 */
+      '?', /* U+0C58 */
+      '?', /* U+0C59 */
+      '?', /* U+0C5A */
+      '?', /* U+0C5B */
+      '?', /* U+0C5C */
+      '?', /* U+0C5D */
+      '?', /* U+0C5E */
+      '?', /* U+0C5F */
+      '?', /* U+0C60 */
+      '?', /* U+0C61 */
+      '?', /* U+0C62 */
+      '?', /* U+0C63 */
+      '?', /* U+0C64 */
+      '?', /* U+0C65 */
+      '?', /* U+0C66 */
+      '?', /* U+0C67 */
+      '?', /* U+0C68 */
+      '?', /* U+0C69 */
+      '?', /* U+0C6A */
+      '?', /* U+0C6B */
+      '?', /* U+0C6C */
+      '?', /* U+0C6D */
+      '?', /* U+0C6E */
+      '?', /* U+0C6F */
+      '?', /* U+0C70 */
+      '?', /* U+0C71 */
+      '?', /* U+0C72 */
+      '?', /* U+0C73 */
+      '?', /* U+0C74 */
+      '?', /* U+0C75 */
+      '?', /* U+0C76 */
+      '?', /* U+0C77 */
+      '?', /* U+0C78 */
+      '?', /* U+0C79 */
+      '?', /* U+0C7A */
+      '?', /* U+0C7B */
+      '?', /* U+0C7C */
+      '?', /* U+0C7D */
+      '?', /* U+0C7E */
+      '?', /* U+0C7F */
+      '?', /* U+0C80 */
+      '?', /* U+0C81 */
+      '?', /* U+0C82 */
+      '?', /* U+0C83 */
+      '?', /* U+0C84 */
+      '?', /* U+0C85 */
+      '?', /* U+0C86 */
+      '?', /* U+0C87 */
+      '?', /* U+0C88 */
+      '?', /* U+0C89 */
+      '?', /* U+0C8A */
+      '?', /* U+0C8B */
+      '?', /* U+0C8C */
+      '?', /* U+0C8D */
+      '?', /* U+0C8E */
+      '?', /* U+0C8F */
+      '?', /* U+0C90 */
+      '?', /* U+0C91 */
+      '?', /* U+0C92 */
+      '?', /* U+0C93 */
+      '?', /* U+0C94 */
+      '?', /* U+0C95 */
+      '?', /* U+0C96 */
+      '?', /* U+0C97 */
+      '?', /* U+0C98 */
+      '?', /* U+0C99 */
+      '?', /* U+0C9A */
+      '?', /* U+0C9B */
+      '?', /* U+0C9C */
+      '?', /* U+0C9D */
+      '?', /* U+0C9E */
+      '?', /* U+0C9F */
+      '?', /* U+0CA0 */
+      '?', /* U+0CA1 */
+      '?', /* U+0CA2 */
+      '?', /* U+0CA3 */
+      '?', /* U+0CA4 */
+      '?', /* U+0CA5 */
+      '?', /* U+0CA6 */
+      '?', /* U+0CA7 */
+      '?', /* U+0CA8 */
+      '?', /* U+0CA9 */
+      '?', /* U+0CAA */
+      '?', /* U+0CAB */
+      '?', /* U+0CAC */
+      '?', /* U+0CAD */
+      '?', /* U+0CAE */
+      '?', /* U+0CAF */
+      '?', /* U+0CB0 */
+      '?', /* U+0CB1 */
+      '?', /* U+0CB2 */
+      '?', /* U+0CB3 */
+      '?', /* U+0CB4 */
+      '?', /* U+0CB5 */
+      '?', /* U+0CB6 */
+      '?', /* U+0CB7 */
+      '?', /* U+0CB8 */
+      '?', /* U+0CB9 */
+      '?', /* U+0CBA */
+      '?', /* U+0CBB */
+      '?', /* U+0CBC */
+      '?', /* U+0CBD */
+      '?', /* U+0CBE */
+      '?', /* U+0CBF */
+      '?', /* U+0CC0 */
+      '?', /* U+0CC1 */
+      '?', /* U+0CC2 */
+      '?', /* U+0CC3 */
+      '?', /* U+0CC4 */
+      '?', /* U+0CC5 */
+      '?', /* U+0CC6 */
+      '?', /* U+0CC7 */
+      '?', /* U+0CC8 */
+      '?', /* U+0CC9 */
+      '?', /* U+0CCA */
+      '?', /* U+0CCB */
+      '?', /* U+0CCC */
+      '?', /* U+0CCD */
+      '?', /* U+0CCE */
+      '?', /* U+0CCF */
+      '?', /* U+0CD0 */
+      '?', /* U+0CD1 */
+      '?', /* U+0CD2 */
+      '?', /* U+0CD3 */
+      '?', /* U+0CD4 */
+      '?', /* U+0CD5 */
+      '?', /* U+0CD6 */
+      '?', /* U+0CD7 */
+      '?', /* U+0CD8 */
+      '?', /* U+0CD9 */
+      '?', /* U+0CDA */
+      '?', /* U+0CDB */
+      '?', /* U+0CDC */
+      '?', /* U+0CDD */
+      '?', /* U+0CDE */
+      '?', /* U+0CDF */
+      '?', /* U+0CE0 */
+      '?', /* U+0CE1 */
+      '?', /* U+0CE2 */
+      '?', /* U+0CE3 */
+      '?', /* U+0CE4 */
+      '?', /* U+0CE5 */
+      '?', /* U+0CE6 */
+      '?', /* U+0CE7 */
+      '?', /* U+0CE8 */
+      '?', /* U+0CE9 */
+      '?', /* U+0CEA */
+      '?', /* U+0CEB */
+      '?', /* U+0CEC */
+      '?', /* U+0CED */
+      '?', /* U+0CEE */
+      '?', /* U+0CEF */
+      '?', /* U+0CF0 */
+      '?', /* U+0CF1 */
+      '?', /* U+0CF2 */
+      '?', /* U+0CF3 */
+      '?', /* U+0CF4 */
+      '?', /* U+0CF5 */
+      '?', /* U+0CF6 */
+      '?', /* U+0CF7 */
+      '?', /* U+0CF8 */
+      '?', /* U+0CF9 */
+      '?', /* U+0CFA */
+      '?', /* U+0CFB */
+      '?', /* U+0CFC */
+      '?', /* U+0CFD */
+      '?', /* U+0CFE */
+      '?', /* U+0CFF */
+      '?', /* U+0D00 */
+      '?', /* U+0D01 */
+      '?', /* U+0D02 */
+      '?', /* U+0D03 */
+      '?', /* U+0D04 */
+      '?', /* U+0D05 */
+      '?', /* U+0D06 */
+      '?', /* U+0D07 */
+      '?', /* U+0D08 */
+      '?', /* U+0D09 */
+      '?', /* U+0D0A */
+      '?', /* U+0D0B */
+      '?', /* U+0D0C */
+      '?', /* U+0D0D */
+      '?', /* U+0D0E */
+      '?', /* U+0D0F */
+      '?', /* U+0D10 */
+      '?', /* U+0D11 */
+      '?', /* U+0D12 */
+      '?', /* U+0D13 */
+      '?', /* U+0D14 */
+      '?', /* U+0D15 */
+      '?', /* U+0D16 */
+      '?', /* U+0D17 */
+      '?', /* U+0D18 */
+      '?', /* U+0D19 */
+      '?', /* U+0D1A */
+      '?', /* U+0D1B */
+      '?', /* U+0D1C */
+      '?', /* U+0D1D */
+      '?', /* U+0D1E */
+      '?', /* U+0D1F */
+      '?', /* U+0D20 */
+      '?', /* U+0D21 */
+      '?', /* U+0D22 */
+      '?', /* U+0D23 */
+      '?', /* U+0D24 */
+      '?', /* U+0D25 */
+      '?', /* U+0D26 */
+      '?', /* U+0D27 */
+      '?', /* U+0D28 */
+      '?', /* U+0D29 */
+      '?', /* U+0D2A */
+      '?', /* U+0D2B */
+      '?', /* U+0D2C */
+      '?', /* U+0D2D */
+      '?', /* U+0D2E */
+      '?', /* U+0D2F */
+      '?', /* U+0D30 */
+      '?', /* U+0D31 */
+      '?', /* U+0D32 */
+      '?', /* U+0D33 */
+      '?', /* U+0D34 */
+      '?', /* U+0D35 */
+      '?', /* U+0D36 */
+      '?', /* U+0D37 */
+      '?', /* U+0D38 */
+      '?', /* U+0D39 */
+      '?', /* U+0D3A */
+      '?', /* U+0D3B */
+      '?', /* U+0D3C */
+      '?', /* U+0D3D */
+      '?', /* U+0D3E */
+      '?', /* U+0D3F */
+      '?', /* U+0D40 */
+      '?', /* U+0D41 */
+      '?', /* U+0D42 */
+      '?', /* U+0D43 */
+      '?', /* U+0D44 */
+      '?', /* U+0D45 */
+      '?', /* U+0D46 */
+      '?', /* U+0D47 */
+      '?', /* U+0D48 */
+      '?', /* U+0D49 */
+      '?', /* U+0D4A */
+      '?', /* U+0D4B */
+      '?', /* U+0D4C */
+      '?', /* U+0D4D */
+      '?', /* U+0D4E */
+      '?', /* U+0D4F */
+      '?', /* U+0D50 */
+      '?', /* U+0D51 */
+      '?', /* U+0D52 */
+      '?', /* U+0D53 */
+      '?', /* U+0D54 */
+      '?', /* U+0D55 */
+      '?', /* U+0D56 */
+      '?', /* U+0D57 */
+      '?', /* U+0D58 */
+      '?', /* U+0D59 */
+      '?', /* U+0D5A */
+      '?', /* U+0D5B */
+      '?', /* U+0D5C */
+      '?', /* U+0D5D */
+      '?', /* U+0D5E */
+      '?', /* U+0D5F */
+      '?', /* U+0D60 */
+      '?', /* U+0D61 */
+      '?', /* U+0D62 */
+      '?', /* U+0D63 */
+      '?', /* U+0D64 */
+      '?', /* U+0D65 */
+      '?', /* U+0D66 */
+      '?', /* U+0D67 */
+      '?', /* U+0D68 */
+      '?', /* U+0D69 */
+      '?', /* U+0D6A */
+      '?', /* U+0D6B */
+      '?', /* U+0D6C */
+      '?', /* U+0D6D */
+      '?', /* U+0D6E */
+      '?', /* U+0D6F */
+      '?', /* U+0D70 */
+      '?', /* U+0D71 */
+      '?', /* U+0D72 */
+      '?', /* U+0D73 */
+      '?', /* U+0D74 */
+      '?', /* U+0D75 */
+      '?', /* U+0D76 */
+      '?', /* U+0D77 */
+      '?', /* U+0D78 */
+      '?', /* U+0D79 */
+      '?', /* U+0D7A */
+      '?', /* U+0D7B */
+      '?', /* U+0D7C */
+      '?', /* U+0D7D */
+      '?', /* U+0D7E */
+      '?', /* U+0D7F */
+      '?', /* U+0D80 */
+      '?', /* U+0D81 */
+      '?', /* U+0D82 */
+      '?', /* U+0D83 */
+      '?', /* U+0D84 */
+      '?', /* U+0D85 */
+      '?', /* U+0D86 */
+      '?', /* U+0D87 */
+      '?', /* U+0D88 */
+      '?', /* U+0D89 */
+      '?', /* U+0D8A */
+      '?', /* U+0D8B */
+      '?', /* U+0D8C */
+      '?', /* U+0D8D */
+      '?', /* U+0D8E */
+      '?', /* U+0D8F */
+      '?', /* U+0D90 */
+      '?', /* U+0D91 */
+      '?', /* U+0D92 */
+      '?', /* U+0D93 */
+      '?', /* U+0D94 */
+      '?', /* U+0D95 */
+      '?', /* U+0D96 */
+      '?', /* U+0D97 */
+      '?', /* U+0D98 */
+      '?', /* U+0D99 */
+      '?', /* U+0D9A */
+      '?', /* U+0D9B */
+      '?', /* U+0D9C */
+      '?', /* U+0D9D */
+      '?', /* U+0D9E */
+      '?', /* U+0D9F */
+      '?', /* U+0DA0 */
+      '?', /* U+0DA1 */
+      '?', /* U+0DA2 */
+      '?', /* U+0DA3 */
+      '?', /* U+0DA4 */
+      '?', /* U+0DA5 */
+      '?', /* U+0DA6 */
+      '?', /* U+0DA7 */
+      '?', /* U+0DA8 */
+      '?', /* U+0DA9 */
+      '?', /* U+0DAA */
+      '?', /* U+0DAB */
+      '?', /* U+0DAC */
+      '?', /* U+0DAD */
+      '?', /* U+0DAE */
+      '?', /* U+0DAF */
+      '?', /* U+0DB0 */
+      '?', /* U+0DB1 */
+      '?', /* U+0DB2 */
+      '?', /* U+0DB3 */
+      '?', /* U+0DB4 */
+      '?', /* U+0DB5 */
+      '?', /* U+0DB6 */
+      '?', /* U+0DB7 */
+      '?', /* U+0DB8 */
+      '?', /* U+0DB9 */
+      '?', /* U+0DBA */
+      '?', /* U+0DBB */
+      '?', /* U+0DBC */
+      '?', /* U+0DBD */
+      '?', /* U+0DBE */
+      '?', /* U+0DBF */
+      '?', /* U+0DC0 */
+      '?', /* U+0DC1 */
+      '?', /* U+0DC2 */
+      '?', /* U+0DC3 */
+      '?', /* U+0DC4 */
+      '?', /* U+0DC5 */
+      '?', /* U+0DC6 */
+      '?', /* U+0DC7 */
+      '?', /* U+0DC8 */
+      '?', /* U+0DC9 */
+      '?', /* U+0DCA */
+      '?', /* U+0DCB */
+      '?', /* U+0DCC */
+      '?', /* U+0DCD */
+      '?', /* U+0DCE */
+      '?', /* U+0DCF */
+      '?', /* U+0DD0 */
+      '?', /* U+0DD1 */
+      '?', /* U+0DD2 */
+      '?', /* U+0DD3 */
+      '?', /* U+0DD4 */
+      '?', /* U+0DD5 */
+      '?', /* U+0DD6 */
+      '?', /* U+0DD7 */
+      '?', /* U+0DD8 */
+      '?', /* U+0DD9 */
+      '?', /* U+0DDA */
+      '?', /* U+0DDB */
+      '?', /* U+0DDC */
+      '?', /* U+0DDD */
+      '?', /* U+0DDE */
+      '?', /* U+0DDF */
+      '?', /* U+0DE0 */
+      '?', /* U+0DE1 */
+      '?', /* U+0DE2 */
+      '?', /* U+0DE3 */
+      '?', /* U+0DE4 */
+      '?', /* U+0DE5 */
+      '?', /* U+0DE6 */
+      '?', /* U+0DE7 */
+      '?', /* U+0DE8 */
+      '?', /* U+0DE9 */
+      '?', /* U+0DEA */
+      '?', /* U+0DEB */
+      '?', /* U+0DEC */
+      '?', /* U+0DED */
+      '?', /* U+0DEE */
+      '?', /* U+0DEF */
+      '?', /* U+0DF0 */
+      '?', /* U+0DF1 */
+      '?', /* U+0DF2 */
+      '?', /* U+0DF3 */
+      '?', /* U+0DF4 */
+      '?', /* U+0DF5 */
+      '?', /* U+0DF6 */
+      '?', /* U+0DF7 */
+      '?', /* U+0DF8 */
+      '?', /* U+0DF9 */
+      '?', /* U+0DFA */
+      '?', /* U+0DFB */
+      '?', /* U+0DFC */
+      '?', /* U+0DFD */
+      '?', /* U+0DFE */
+      '?', /* U+0DFF */
+      '?', /* U+0E00 */
+      '?', /* U+0E01 */
+      '?', /* U+0E02 */
+      '?', /* U+0E03 */
+      '?', /* U+0E04 */
+      '?', /* U+0E05 */
+      '?', /* U+0E06 */
+      '?', /* U+0E07 */
+      '?', /* U+0E08 */
+      '?', /* U+0E09 */
+      '?', /* U+0E0A */
+      '?', /* U+0E0B */
+      '?', /* U+0E0C */
+      '?', /* U+0E0D */
+      '?', /* U+0E0E */
+      '?', /* U+0E0F */
+      '?', /* U+0E10 */
+      '?', /* U+0E11 */
+      '?', /* U+0E12 */
+      '?', /* U+0E13 */
+      '?', /* U+0E14 */
+      '?', /* U+0E15 */
+      '?', /* U+0E16 */
+      '?', /* U+0E17 */
+      '?', /* U+0E18 */
+      '?', /* U+0E19 */
+      '?', /* U+0E1A */
+      '?', /* U+0E1B */
+      '?', /* U+0E1C */
+      '?', /* U+0E1D */
+      '?', /* U+0E1E */
+      '?', /* U+0E1F */
+      '?', /* U+0E20 */
+      '?', /* U+0E21 */
+      '?', /* U+0E22 */
+      '?', /* U+0E23 */
+      '?', /* U+0E24 */
+      '?', /* U+0E25 */
+      '?', /* U+0E26 */
+      '?', /* U+0E27 */
+      '?', /* U+0E28 */
+      '?', /* U+0E29 */
+      '?', /* U+0E2A */
+      '?', /* U+0E2B */
+      '?', /* U+0E2C */
+      '?', /* U+0E2D */
+      '?', /* U+0E2E */
+      '?', /* U+0E2F */
+      '?', /* U+0E30 */
+      '?', /* U+0E31 */
+      '?', /* U+0E32 */
+      '?', /* U+0E33 */
+      '?', /* U+0E34 */
+      '?', /* U+0E35 */
+      '?', /* U+0E36 */
+      '?', /* U+0E37 */
+      '?', /* U+0E38 */
+      '?', /* U+0E39 */
+      '?', /* U+0E3A */
+      '?', /* U+0E3B */
+      '?', /* U+0E3C */
+      '?', /* U+0E3D */
+      '?', /* U+0E3E */
+      '?', /* U+0E3F */
+      '?', /* U+0E40 */
+      '?', /* U+0E41 */
+      '?', /* U+0E42 */
+      '?', /* U+0E43 */
+      '?', /* U+0E44 */
+      '?', /* U+0E45 */
+      '?', /* U+0E46 */
+      '?', /* U+0E47 */
+      '?', /* U+0E48 */
+      '?', /* U+0E49 */
+      '?', /* U+0E4A */
+      '?', /* U+0E4B */
+      '?', /* U+0E4C */
+      '?', /* U+0E4D */
+      '?', /* U+0E4E */
+      '?', /* U+0E4F */
+      '?', /* U+0E50 */
+      '?', /* U+0E51 */
+      '?', /* U+0E52 */
+      '?', /* U+0E53 */
+      '?', /* U+0E54 */
+      '?', /* U+0E55 */
+      '?', /* U+0E56 */
+      '?', /* U+0E57 */
+      '?', /* U+0E58 */
+      '?', /* U+0E59 */
+      '?', /* U+0E5A */
+      '?', /* U+0E5B */
+      '?', /* U+0E5C */
+      '?', /* U+0E5D */
+      '?', /* U+0E5E */
+      '?', /* U+0E5F */
+      '?', /* U+0E60 */
+      '?', /* U+0E61 */
+      '?', /* U+0E62 */
+      '?', /* U+0E63 */
+      '?', /* U+0E64 */
+      '?', /* U+0E65 */
+      '?', /* U+0E66 */
+      '?', /* U+0E67 */
+      '?', /* U+0E68 */
+      '?', /* U+0E69 */
+      '?', /* U+0E6A */
+      '?', /* U+0E6B */
+      '?', /* U+0E6C */
+      '?', /* U+0E6D */
+      '?', /* U+0E6E */
+      '?', /* U+0E6F */
+      '?', /* U+0E70 */
+      '?', /* U+0E71 */
+      '?', /* U+0E72 */
+      '?', /* U+0E73 */
+      '?', /* U+0E74 */
+      '?', /* U+0E75 */
+      '?', /* U+0E76 */
+      '?', /* U+0E77 */
+      '?', /* U+0E78 */
+      '?', /* U+0E79 */
+      '?', /* U+0E7A */
+      '?', /* U+0E7B */
+      '?', /* U+0E7C */
+      '?', /* U+0E7D */
+      '?', /* U+0E7E */
+      '?', /* U+0E7F */
+      '?', /* U+0E80 */
+      '?', /* U+0E81 */
+      '?', /* U+0E82 */
+      '?', /* U+0E83 */
+      '?', /* U+0E84 */
+      '?', /* U+0E85 */
+      '?', /* U+0E86 */
+      '?', /* U+0E87 */
+      '?', /* U+0E88 */
+      '?', /* U+0E89 */
+      '?', /* U+0E8A */
+      '?', /* U+0E8B */
+      '?', /* U+0E8C */
+      '?', /* U+0E8D */
+      '?', /* U+0E8E */
+      '?', /* U+0E8F */
+      '?', /* U+0E90 */
+      '?', /* U+0E91 */
+      '?', /* U+0E92 */
+      '?', /* U+0E93 */
+      '?', /* U+0E94 */
+      '?', /* U+0E95 */
+      '?', /* U+0E96 */
+      '?', /* U+0E97 */
+      '?', /* U+0E98 */
+      '?', /* U+0E99 */
+      '?', /* U+0E9A */
+      '?', /* U+0E9B */
+      '?', /* U+0E9C */
+      '?', /* U+0E9D */
+      '?', /* U+0E9E */
+      '?', /* U+0E9F */
+      '?', /* U+0EA0 */
+      '?', /* U+0EA1 */
+      '?', /* U+0EA2 */
+      '?', /* U+0EA3 */
+      '?', /* U+0EA4 */
+      '?', /* U+0EA5 */
+      '?', /* U+0EA6 */
+      '?', /* U+0EA7 */
+      '?', /* U+0EA8 */
+      '?', /* U+0EA9 */
+      '?', /* U+0EAA */
+      '?', /* U+0EAB */
+      '?', /* U+0EAC */
+      '?', /* U+0EAD */
+      '?', /* U+0EAE */
+      '?', /* U+0EAF */
+      '?', /* U+0EB0 */
+      '?', /* U+0EB1 */
+      '?', /* U+0EB2 */
+      '?', /* U+0EB3 */
+      '?', /* U+0EB4 */
+      '?', /* U+0EB5 */
+      '?', /* U+0EB6 */
+      '?', /* U+0EB7 */
+      '?', /* U+0EB8 */
+      '?', /* U+0EB9 */
+      '?', /* U+0EBA */
+      '?', /* U+0EBB */
+      '?', /* U+0EBC */
+      '?', /* U+0EBD */
+      '?', /* U+0EBE */
+      '?', /* U+0EBF */
+      '?', /* U+0EC0 */
+      '?', /* U+0EC1 */
+      '?', /* U+0EC2 */
+      '?', /* U+0EC3 */
+      '?', /* U+0EC4 */
+      '?', /* U+0EC5 */
+      '?', /* U+0EC6 */
+      '?', /* U+0EC7 */
+      '?', /* U+0EC8 */
+      '?', /* U+0EC9 */
+      '?', /* U+0ECA */
+      '?', /* U+0ECB */
+      '?', /* U+0ECC */
+      '?', /* U+0ECD */
+      '?', /* U+0ECE */
+      '?', /* U+0ECF */
+      '?', /* U+0ED0 */
+      '?', /* U+0ED1 */
+      '?', /* U+0ED2 */
+      '?', /* U+0ED3 */
+      '?', /* U+0ED4 */
+      '?', /* U+0ED5 */
+      '?', /* U+0ED6 */
+      '?', /* U+0ED7 */
+      '?', /* U+0ED8 */
+      '?', /* U+0ED9 */
+      '?', /* U+0EDA */
+      '?', /* U+0EDB */
+      '?', /* U+0EDC */
+      '?', /* U+0EDD */
+      '?', /* U+0EDE */
+      '?', /* U+0EDF */
+      '?', /* U+0EE0 */
+      '?', /* U+0EE1 */
+      '?', /* U+0EE2 */
+      '?', /* U+0EE3 */
+      '?', /* U+0EE4 */
+      '?', /* U+0EE5 */
+      '?', /* U+0EE6 */
+      '?', /* U+0EE7 */
+      '?', /* U+0EE8 */
+      '?', /* U+0EE9 */
+      '?', /* U+0EEA */
+      '?', /* U+0EEB */
+      '?', /* U+0EEC */
+      '?', /* U+0EED */
+      '?', /* U+0EEE */
+      '?', /* U+0EEF */
+      '?', /* U+0EF0 */
+      '?', /* U+0EF1 */
+      '?', /* U+0EF2 */
+      '?', /* U+0EF3 */
+      '?', /* U+0EF4 */
+      '?', /* U+0EF5 */
+      '?', /* U+0EF6 */
+      '?', /* U+0EF7 */
+      '?', /* U+0EF8 */
+      '?', /* U+0EF9 */
+      '?', /* U+0EFA */
+      '?', /* U+0EFB */
+      '?', /* U+0EFC */
+      '?', /* U+0EFD */
+      '?', /* U+0EFE */
+      '?', /* U+0EFF */
+      '?', /* U+0F00 */
+      '?', /* U+0F01 */
+      '?', /* U+0F02 */
+      '?', /* U+0F03 */
+      '?', /* U+0F04 */
+      '?', /* U+0F05 */
+      '?', /* U+0F06 */
+      '?', /* U+0F07 */
+      '?', /* U+0F08 */
+      '?', /* U+0F09 */
+      '?', /* U+0F0A */
+      '?', /* U+0F0B */
+      '?', /* U+0F0C */
+      '?', /* U+0F0D */
+      '?', /* U+0F0E */
+      '?', /* U+0F0F */
+      '?', /* U+0F10 */
+      '?', /* U+0F11 */
+      '?', /* U+0F12 */
+      '?', /* U+0F13 */
+      '?', /* U+0F14 */
+      '?', /* U+0F15 */
+      '?', /* U+0F16 */
+      '?', /* U+0F17 */
+      '?', /* U+0F18 */
+      '?', /* U+0F19 */
+      '?', /* U+0F1A */
+      '?', /* U+0F1B */
+      '?', /* U+0F1C */
+      '?', /* U+0F1D */
+      '?', /* U+0F1E */
+      '?', /* U+0F1F */
+      '?', /* U+0F20 */
+      '?', /* U+0F21 */
+      '?', /* U+0F22 */
+      '?', /* U+0F23 */
+      '?', /* U+0F24 */
+      '?', /* U+0F25 */
+      '?', /* U+0F26 */
+      '?', /* U+0F27 */
+      '?', /* U+0F28 */
+      '?', /* U+0F29 */
+      '?', /* U+0F2A */
+      '?', /* U+0F2B */
+      '?', /* U+0F2C */
+      '?', /* U+0F2D */
+      '?', /* U+0F2E */
+      '?', /* U+0F2F */
+      '?', /* U+0F30 */
+      '?', /* U+0F31 */
+      '?', /* U+0F32 */
+      '?', /* U+0F33 */
+      '?', /* U+0F34 */
+      '?', /* U+0F35 */
+      '?', /* U+0F36 */
+      '?', /* U+0F37 */
+      '?', /* U+0F38 */
+      '?', /* U+0F39 */
+      '?', /* U+0F3A */
+      '?', /* U+0F3B */
+      '?', /* U+0F3C */
+      '?', /* U+0F3D */
+      '?', /* U+0F3E */
+      '?', /* U+0F3F */
+      '?', /* U+0F40 */
+      '?', /* U+0F41 */
+      '?', /* U+0F42 */
+      '?', /* U+0F43 */
+      '?', /* U+0F44 */
+      '?', /* U+0F45 */
+      '?', /* U+0F46 */
+      '?', /* U+0F47 */
+      '?', /* U+0F48 */
+      '?', /* U+0F49 */
+      '?', /* U+0F4A */
+      '?', /* U+0F4B */
+      '?', /* U+0F4C */
+      '?', /* U+0F4D */
+      '?', /* U+0F4E */
+      '?', /* U+0F4F */
+      '?', /* U+0F50 */
+      '?', /* U+0F51 */
+      '?', /* U+0F52 */
+      '?', /* U+0F53 */
+      '?', /* U+0F54 */
+      '?', /* U+0F55 */
+      '?', /* U+0F56 */
+      '?', /* U+0F57 */
+      '?', /* U+0F58 */
+      '?', /* U+0F59 */
+      '?', /* U+0F5A */
+      '?', /* U+0F5B */
+      '?', /* U+0F5C */
+      '?', /* U+0F5D */
+      '?', /* U+0F5E */
+      '?', /* U+0F5F */
+      '?', /* U+0F60 */
+      '?', /* U+0F61 */
+      '?', /* U+0F62 */
+      '?', /* U+0F63 */
+      '?', /* U+0F64 */
+      '?', /* U+0F65 */
+      '?', /* U+0F66 */
+      '?', /* U+0F67 */
+      '?', /* U+0F68 */
+      '?', /* U+0F69 */
+      '?', /* U+0F6A */
+      '?', /* U+0F6B */
+      '?', /* U+0F6C */
+      '?', /* U+0F6D */
+      '?', /* U+0F6E */
+      '?', /* U+0F6F */
+      '?', /* U+0F70 */
+      '?', /* U+0F71 */
+      '?', /* U+0F72 */
+      '?', /* U+0F73 */
+      '?', /* U+0F74 */
+      '?', /* U+0F75 */
+      '?', /* U+0F76 */
+      '?', /* U+0F77 */
+      '?', /* U+0F78 */
+      '?', /* U+0F79 */
+      '?', /* U+0F7A */
+      '?', /* U+0F7B */
+      '?', /* U+0F7C */
+      '?', /* U+0F7D */
+      '?', /* U+0F7E */
+      '?', /* U+0F7F */
+      '?', /* U+0F80 */
+      '?', /* U+0F81 */
+      '?', /* U+0F82 */
+      '?', /* U+0F83 */
+      '?', /* U+0F84 */
+      '?', /* U+0F85 */
+      '?', /* U+0F86 */
+      '?', /* U+0F87 */
+      '?', /* U+0F88 */
+      '?', /* U+0F89 */
+      '?', /* U+0F8A */
+      '?', /* U+0F8B */
+      '?', /* U+0F8C */
+      '?', /* U+0F8D */
+      '?', /* U+0F8E */
+      '?', /* U+0F8F */
+      '?', /* U+0F90 */
+      '?', /* U+0F91 */
+      '?', /* U+0F92 */
+      '?', /* U+0F93 */
+      '?', /* U+0F94 */
+      '?', /* U+0F95 */
+      '?', /* U+0F96 */
+      '?', /* U+0F97 */
+      '?', /* U+0F98 */
+      '?', /* U+0F99 */
+      '?', /* U+0F9A */
+      '?', /* U+0F9B */
+      '?', /* U+0F9C */
+      '?', /* U+0F9D */
+      '?', /* U+0F9E */
+      '?', /* U+0F9F */
+      '?', /* U+0FA0 */
+      '?', /* U+0FA1 */
+      '?', /* U+0FA2 */
+      '?', /* U+0FA3 */
+      '?', /* U+0FA4 */
+      '?', /* U+0FA5 */
+      '?', /* U+0FA6 */
+      '?', /* U+0FA7 */
+      '?', /* U+0FA8 */
+      '?', /* U+0FA9 */
+      '?', /* U+0FAA */
+      '?', /* U+0FAB */
+      '?', /* U+0FAC */
+      '?', /* U+0FAD */
+      '?', /* U+0FAE */
+      '?', /* U+0FAF */
+      '?', /* U+0FB0 */
+      '?', /* U+0FB1 */
+      '?', /* U+0FB2 */
+      '?', /* U+0FB3 */
+      '?', /* U+0FB4 */
+      '?', /* U+0FB5 */
+      '?', /* U+0FB6 */
+      '?', /* U+0FB7 */
+      '?', /* U+0FB8 */
+      '?', /* U+0FB9 */
+      '?', /* U+0FBA */
+      '?', /* U+0FBB */
+      '?', /* U+0FBC */
+      '?', /* U+0FBD */
+      '?', /* U+0FBE */
+      '?', /* U+0FBF */
+      '?', /* U+0FC0 */
+      '?', /* U+0FC1 */
+      '?', /* U+0FC2 */
+      '?', /* U+0FC3 */
+      '?', /* U+0FC4 */
+      '?', /* U+0FC5 */
+      '?', /* U+0FC6 */
+      '?', /* U+0FC7 */
+      '?', /* U+0FC8 */
+      '?', /* U+0FC9 */
+      '?', /* U+0FCA */
+      '?', /* U+0FCB */
+      '?', /* U+0FCC */
+      '?', /* U+0FCD */
+      '?', /* U+0FCE */
+      '?', /* U+0FCF */
+      '?', /* U+0FD0 */
+      '?', /* U+0FD1 */
+      '?', /* U+0FD2 */
+      '?', /* U+0FD3 */
+      '?', /* U+0FD4 */
+      '?', /* U+0FD5 */
+      '?', /* U+0FD6 */
+      '?', /* U+0FD7 */
+      '?', /* U+0FD8 */
+      '?', /* U+0FD9 */
+      '?', /* U+0FDA */
+      '?', /* U+0FDB */
+      '?', /* U+0FDC */
+      '?', /* U+0FDD */
+      '?', /* U+0FDE */
+      '?', /* U+0FDF */
+      '?', /* U+0FE0 */
+      '?', /* U+0FE1 */
+      '?', /* U+0FE2 */
+      '?', /* U+0FE3 */
+      '?', /* U+0FE4 */
+      '?', /* U+0FE5 */
+      '?', /* U+0FE6 */
+      '?', /* U+0FE7 */
+      '?', /* U+0FE8 */
+      '?', /* U+0FE9 */
+      '?', /* U+0FEA */
+      '?', /* U+0FEB */
+      '?', /* U+0FEC */
+      '?', /* U+0FED */
+      '?', /* U+0FEE */
+      '?', /* U+0FEF */
+      '?', /* U+0FF0 */
+      '?', /* U+0FF1 */
+      '?', /* U+0FF2 */
+      '?', /* U+0FF3 */
+      '?', /* U+0FF4 */
+      '?', /* U+0FF5 */
+      '?', /* U+0FF6 */
+      '?', /* U+0FF7 */
+      '?', /* U+0FF8 */
+      '?', /* U+0FF9 */
+      '?', /* U+0FFA */
+      '?', /* U+0FFB */
+      '?', /* U+0FFC */
+      '?', /* U+0FFD */
+      '?', /* U+0FFE */
+      '?', /* U+0FFF */
+      '?', /* U+1000 */
+      '?', /* U+1001 */
+      '?', /* U+1002 */
+      '?', /* U+1003 */
+      '?', /* U+1004 */
+      '?', /* U+1005 */
+      '?', /* U+1006 */
+      '?', /* U+1007 */
+      '?', /* U+1008 */
+      '?', /* U+1009 */
+      '?', /* U+100A */
+      '?', /* U+100B */
+      '?', /* U+100C */
+      '?', /* U+100D */
+      '?', /* U+100E */
+      '?', /* U+100F */
+      '?', /* U+1010 */
+      '?', /* U+1011 */
+      '?', /* U+1012 */
+      '?', /* U+1013 */
+      '?', /* U+1014 */
+      '?', /* U+1015 */
+      '?', /* U+1016 */
+      '?', /* U+1017 */
+      '?', /* U+1018 */
+      '?', /* U+1019 */
+      '?', /* U+101A */
+      '?', /* U+101B */
+      '?', /* U+101C */
+      '?', /* U+101D */
+      '?', /* U+101E */
+      '?', /* U+101F */
+      '?', /* U+1020 */
+      '?', /* U+1021 */
+      '?', /* U+1022 */
+      '?', /* U+1023 */
+      '?', /* U+1024 */
+      '?', /* U+1025 */
+      '?', /* U+1026 */
+      '?', /* U+1027 */
+      '?', /* U+1028 */
+      '?', /* U+1029 */
+      '?', /* U+102A */
+      '?', /* U+102B */
+      '?', /* U+102C */
+      '?', /* U+102D */
+      '?', /* U+102E */
+      '?', /* U+102F */
+      '?', /* U+1030 */
+      '?', /* U+1031 */
+      '?', /* U+1032 */
+      '?', /* U+1033 */
+      '?', /* U+1034 */
+      '?', /* U+1035 */
+      '?', /* U+1036 */
+      '?', /* U+1037 */
+      '?', /* U+1038 */
+      '?', /* U+1039 */
+      '?', /* U+103A */
+      '?', /* U+103B */
+      '?', /* U+103C */
+      '?', /* U+103D */
+      '?', /* U+103E */
+      '?', /* U+103F */
+      '?', /* U+1040 */
+      '?', /* U+1041 */
+      '?', /* U+1042 */
+      '?', /* U+1043 */
+      '?', /* U+1044 */
+      '?', /* U+1045 */
+      '?', /* U+1046 */
+      '?', /* U+1047 */
+      '?', /* U+1048 */
+      '?', /* U+1049 */
+      '?', /* U+104A */
+      '?', /* U+104B */
+      '?', /* U+104C */
+      '?', /* U+104D */
+      '?', /* U+104E */
+      '?', /* U+104F */
+      '?', /* U+1050 */
+      '?', /* U+1051 */
+      '?', /* U+1052 */
+      '?', /* U+1053 */
+      '?', /* U+1054 */
+      '?', /* U+1055 */
+      '?', /* U+1056 */
+      '?', /* U+1057 */
+      '?', /* U+1058 */
+      '?', /* U+1059 */
+      '?', /* U+105A */
+      '?', /* U+105B */
+      '?', /* U+105C */
+      '?', /* U+105D */
+      '?', /* U+105E */
+      '?', /* U+105F */
+      '?', /* U+1060 */
+      '?', /* U+1061 */
+      '?', /* U+1062 */
+      '?', /* U+1063 */
+      '?', /* U+1064 */
+      '?', /* U+1065 */
+      '?', /* U+1066 */
+      '?', /* U+1067 */
+      '?', /* U+1068 */
+      '?', /* U+1069 */
+      '?', /* U+106A */
+      '?', /* U+106B */
+      '?', /* U+106C */
+      '?', /* U+106D */
+      '?', /* U+106E */
+      '?', /* U+106F */
+      '?', /* U+1070 */
+      '?', /* U+1071 */
+      '?', /* U+1072 */
+      '?', /* U+1073 */
+      '?', /* U+1074 */
+      '?', /* U+1075 */
+      '?', /* U+1076 */
+      '?', /* U+1077 */
+      '?', /* U+1078 */
+      '?', /* U+1079 */
+      '?', /* U+107A */
+      '?', /* U+107B */
+      '?', /* U+107C */
+      '?', /* U+107D */
+      '?', /* U+107E */
+      '?', /* U+107F */
+      '?', /* U+1080 */
+      '?', /* U+1081 */
+      '?', /* U+1082 */
+      '?', /* U+1083 */
+      '?', /* U+1084 */
+      '?', /* U+1085 */
+      '?', /* U+1086 */
+      '?', /* U+1087 */
+      '?', /* U+1088 */
+      '?', /* U+1089 */
+      '?', /* U+108A */
+      '?', /* U+108B */
+      '?', /* U+108C */
+      '?', /* U+108D */
+      '?', /* U+108E */
+      '?', /* U+108F */
+      '?', /* U+1090 */
+      '?', /* U+1091 */
+      '?', /* U+1092 */
+      '?', /* U+1093 */
+      '?', /* U+1094 */
+      '?', /* U+1095 */
+      '?', /* U+1096 */
+      '?', /* U+1097 */
+      '?', /* U+1098 */
+      '?', /* U+1099 */
+      '?', /* U+109A */
+      '?', /* U+109B */
+      '?', /* U+109C */
+      '?', /* U+109D */
+      '?', /* U+109E */
+      '?', /* U+109F */
+      '?', /* U+10A0 */
+      '?', /* U+10A1 */
+      '?', /* U+10A2 */
+      '?', /* U+10A3 */
+      '?', /* U+10A4 */
+      '?', /* U+10A5 */
+      '?', /* U+10A6 */
+      '?', /* U+10A7 */
+      '?', /* U+10A8 */
+      '?', /* U+10A9 */
+      '?', /* U+10AA */
+      '?', /* U+10AB */
+      '?', /* U+10AC */
+      '?', /* U+10AD */
+      '?', /* U+10AE */
+      '?', /* U+10AF */
+      '?', /* U+10B0 */
+      '?', /* U+10B1 */
+      '?', /* U+10B2 */
+      '?', /* U+10B3 */
+      '?', /* U+10B4 */
+      '?', /* U+10B5 */
+      '?', /* U+10B6 */
+      '?', /* U+10B7 */
+      '?', /* U+10B8 */
+      '?', /* U+10B9 */
+      '?', /* U+10BA */
+      '?', /* U+10BB */
+      '?', /* U+10BC */
+      '?', /* U+10BD */
+      '?', /* U+10BE */
+      '?', /* U+10BF */
+      '?', /* U+10C0 */
+      '?', /* U+10C1 */
+      '?', /* U+10C2 */
+      '?', /* U+10C3 */
+      '?', /* U+10C4 */
+      '?', /* U+10C5 */
+      '?', /* U+10C6 */
+      '?', /* U+10C7 */
+      '?', /* U+10C8 */
+      '?', /* U+10C9 */
+      '?', /* U+10CA */
+      '?', /* U+10CB */
+      '?', /* U+10CC */
+      '?', /* U+10CD */
+      '?', /* U+10CE */
+      '?', /* U+10CF */
+      '?', /* U+10D0 */
+      '?', /* U+10D1 */
+      '?', /* U+10D2 */
+      '?', /* U+10D3 */
+      '?', /* U+10D4 */
+      '?', /* U+10D5 */
+      '?', /* U+10D6 */
+      '?', /* U+10D7 */
+      '?', /* U+10D8 */
+      '?', /* U+10D9 */
+      '?', /* U+10DA */
+      '?', /* U+10DB */
+      '?', /* U+10DC */
+      '?', /* U+10DD */
+      '?', /* U+10DE */
+      '?', /* U+10DF */
+      '?', /* U+10E0 */
+      '?', /* U+10E1 */
+      '?', /* U+10E2 */
+      '?', /* U+10E3 */
+      '?', /* U+10E4 */
+      '?', /* U+10E5 */
+      '?', /* U+10E6 */
+      '?', /* U+10E7 */
+      '?', /* U+10E8 */
+      '?', /* U+10E9 */
+      '?', /* U+10EA */
+      '?', /* U+10EB */
+      '?', /* U+10EC */
+      '?', /* U+10ED */
+      '?', /* U+10EE */
+      '?', /* U+10EF */
+      '?', /* U+10F0 */
+      '?', /* U+10F1 */
+      '?', /* U+10F2 */
+      '?', /* U+10F3 */
+      '?', /* U+10F4 */
+      '?', /* U+10F5 */
+      '?', /* U+10F6 */
+      '?', /* U+10F7 */
+      '?', /* U+10F8 */
+      '?', /* U+10F9 */
+      '?', /* U+10FA */
+      '?', /* U+10FB */
+      '?', /* U+10FC */
+      '?', /* U+10FD */
+      '?', /* U+10FE */
+      '?', /* U+10FF */
+      '?', /* U+1100 */
+      '?', /* U+1101 */
+      '?', /* U+1102 */
+      '?', /* U+1103 */
+      '?', /* U+1104 */
+      '?', /* U+1105 */
+      '?', /* U+1106 */
+      '?', /* U+1107 */
+      '?', /* U+1108 */
+      '?', /* U+1109 */
+      '?', /* U+110A */
+      '?', /* U+110B */
+      '?', /* U+110C */
+      '?', /* U+110D */
+      '?', /* U+110E */
+      '?', /* U+110F */
+      '?', /* U+1110 */
+      '?', /* U+1111 */
+      '?', /* U+1112 */
+      '?', /* U+1113 */
+      '?', /* U+1114 */
+      '?', /* U+1115 */
+      '?', /* U+1116 */
+      '?', /* U+1117 */
+      '?', /* U+1118 */
+      '?', /* U+1119 */
+      '?', /* U+111A */
+      '?', /* U+111B */
+      '?', /* U+111C */
+      '?', /* U+111D */
+      '?', /* U+111E */
+      '?', /* U+111F */
+      '?', /* U+1120 */
+      '?', /* U+1121 */
+      '?', /* U+1122 */
+      '?', /* U+1123 */
+      '?', /* U+1124 */
+      '?', /* U+1125 */
+      '?', /* U+1126 */
+      '?', /* U+1127 */
+      '?', /* U+1128 */
+      '?', /* U+1129 */
+      '?', /* U+112A */
+      '?', /* U+112B */
+      '?', /* U+112C */
+      '?', /* U+112D */
+      '?', /* U+112E */
+      '?', /* U+112F */
+      '?', /* U+1130 */
+      '?', /* U+1131 */
+      '?', /* U+1132 */
+      '?', /* U+1133 */
+      '?', /* U+1134 */
+      '?', /* U+1135 */
+      '?', /* U+1136 */
+      '?', /* U+1137 */
+      '?', /* U+1138 */
+      '?', /* U+1139 */
+      '?', /* U+113A */
+      '?', /* U+113B */
+      '?', /* U+113C */
+      '?', /* U+113D */
+      '?', /* U+113E */
+      '?', /* U+113F */
+      '?', /* U+1140 */
+      '?', /* U+1141 */
+      '?', /* U+1142 */
+      '?', /* U+1143 */
+      '?', /* U+1144 */
+      '?', /* U+1145 */
+      '?', /* U+1146 */
+      '?', /* U+1147 */
+      '?', /* U+1148 */
+      '?', /* U+1149 */
+      '?', /* U+114A */
+      '?', /* U+114B */
+      '?', /* U+114C */
+      '?', /* U+114D */
+      '?', /* U+114E */
+      '?', /* U+114F */
+      '?', /* U+1150 */
+      '?', /* U+1151 */
+      '?', /* U+1152 */
+      '?', /* U+1153 */
+      '?', /* U+1154 */
+      '?', /* U+1155 */
+      '?', /* U+1156 */
+      '?', /* U+1157 */
+      '?', /* U+1158 */
+      '?', /* U+1159 */
+      '?', /* U+115A */
+      '?', /* U+115B */
+      '?', /* U+115C */
+      '?', /* U+115D */
+      '?', /* U+115E */
+      '?', /* U+115F */
+      '?', /* U+1160 */
+      '?', /* U+1161 */
+      '?', /* U+1162 */
+      '?', /* U+1163 */
+      '?', /* U+1164 */
+      '?', /* U+1165 */
+      '?', /* U+1166 */
+      '?', /* U+1167 */
+      '?', /* U+1168 */
+      '?', /* U+1169 */
+      '?', /* U+116A */
+      '?', /* U+116B */
+      '?', /* U+116C */
+      '?', /* U+116D */
+      '?', /* U+116E */
+      '?', /* U+116F */
+      '?', /* U+1170 */
+      '?', /* U+1171 */
+      '?', /* U+1172 */
+      '?', /* U+1173 */
+      '?', /* U+1174 */
+      '?', /* U+1175 */
+      '?', /* U+1176 */
+      '?', /* U+1177 */
+      '?', /* U+1178 */
+      '?', /* U+1179 */
+      '?', /* U+117A */
+      '?', /* U+117B */
+      '?', /* U+117C */
+      '?', /* U+117D */
+      '?', /* U+117E */
+      '?', /* U+117F */
+      '?', /* U+1180 */
+      '?', /* U+1181 */
+      '?', /* U+1182 */
+      '?', /* U+1183 */
+      '?', /* U+1184 */
+      '?', /* U+1185 */
+      '?', /* U+1186 */
+      '?', /* U+1187 */
+      '?', /* U+1188 */
+      '?', /* U+1189 */
+      '?', /* U+118A */
+      '?', /* U+118B */
+      '?', /* U+118C */
+      '?', /* U+118D */
+      '?', /* U+118E */
+      '?', /* U+118F */
+      '?', /* U+1190 */
+      '?', /* U+1191 */
+      '?', /* U+1192 */
+      '?', /* U+1193 */
+      '?', /* U+1194 */
+      '?', /* U+1195 */
+      '?', /* U+1196 */
+      '?', /* U+1197 */
+      '?', /* U+1198 */
+      '?', /* U+1199 */
+      '?', /* U+119A */
+      '?', /* U+119B */
+      '?', /* U+119C */
+      '?', /* U+119D */
+      '?', /* U+119E */
+      '?', /* U+119F */
+      '?', /* U+11A0 */
+      '?', /* U+11A1 */
+      '?', /* U+11A2 */
+      '?', /* U+11A3 */
+      '?', /* U+11A4 */
+      '?', /* U+11A5 */
+      '?', /* U+11A6 */
+      '?', /* U+11A7 */
+      '?', /* U+11A8 */
+      '?', /* U+11A9 */
+      '?', /* U+11AA */
+      '?', /* U+11AB */
+      '?', /* U+11AC */
+      '?', /* U+11AD */
+      '?', /* U+11AE */
+      '?', /* U+11AF */
+      '?', /* U+11B0 */
+      '?', /* U+11B1 */
+      '?', /* U+11B2 */
+      '?', /* U+11B3 */
+      '?', /* U+11B4 */
+      '?', /* U+11B5 */
+      '?', /* U+11B6 */
+      '?', /* U+11B7 */
+      '?', /* U+11B8 */
+      '?', /* U+11B9 */
+      '?', /* U+11BA */
+      '?', /* U+11BB */
+      '?', /* U+11BC */
+      '?', /* U+11BD */
+      '?', /* U+11BE */
+      '?', /* U+11BF */
+      '?', /* U+11C0 */
+      '?', /* U+11C1 */
+      '?', /* U+11C2 */
+      '?', /* U+11C3 */
+      '?', /* U+11C4 */
+      '?', /* U+11C5 */
+      '?', /* U+11C6 */
+      '?', /* U+11C7 */
+      '?', /* U+11C8 */
+      '?', /* U+11C9 */
+      '?', /* U+11CA */
+      '?', /* U+11CB */
+      '?', /* U+11CC */
+      '?', /* U+11CD */
+      '?', /* U+11CE */
+      '?', /* U+11CF */
+      '?', /* U+11D0 */
+      '?', /* U+11D1 */
+      '?', /* U+11D2 */
+      '?', /* U+11D3 */
+      '?', /* U+11D4 */
+      '?', /* U+11D5 */
+      '?', /* U+11D6 */
+      '?', /* U+11D7 */
+      '?', /* U+11D8 */
+      '?', /* U+11D9 */
+      '?', /* U+11DA */
+      '?', /* U+11DB */
+      '?', /* U+11DC */
+      '?', /* U+11DD */
+      '?', /* U+11DE */
+      '?', /* U+11DF */
+      '?', /* U+11E0 */
+      '?', /* U+11E1 */
+      '?', /* U+11E2 */
+      '?', /* U+11E3 */
+      '?', /* U+11E4 */
+      '?', /* U+11E5 */
+      '?', /* U+11E6 */
+      '?', /* U+11E7 */
+      '?', /* U+11E8 */
+      '?', /* U+11E9 */
+      '?', /* U+11EA */
+      '?', /* U+11EB */
+      '?', /* U+11EC */
+      '?', /* U+11ED */
+      '?', /* U+11EE */
+      '?', /* U+11EF */
+      '?', /* U+11F0 */
+      '?', /* U+11F1 */
+      '?', /* U+11F2 */
+      '?', /* U+11F3 */
+      '?', /* U+11F4 */
+      '?', /* U+11F5 */
+      '?', /* U+11F6 */
+      '?', /* U+11F7 */
+      '?', /* U+11F8 */
+      '?', /* U+11F9 */
+      '?', /* U+11FA */
+      '?', /* U+11FB */
+      '?', /* U+11FC */
+      '?', /* U+11FD */
+      '?', /* U+11FE */
+      '?', /* U+11FF */
+      '?', /* U+1200 */
+      '?', /* U+1201 */
+      '?', /* U+1202 */
+      '?', /* U+1203 */
+      '?', /* U+1204 */
+      '?', /* U+1205 */
+      '?', /* U+1206 */
+      '?', /* U+1207 */
+      '?', /* U+1208 */
+      '?', /* U+1209 */
+      '?', /* U+120A */
+      '?', /* U+120B */
+      '?', /* U+120C */
+      '?', /* U+120D */
+      '?', /* U+120E */
+      '?', /* U+120F */
+      '?', /* U+1210 */
+      '?', /* U+1211 */
+      '?', /* U+1212 */
+      '?', /* U+1213 */
+      '?', /* U+1214 */
+      '?', /* U+1215 */
+      '?', /* U+1216 */
+      '?', /* U+1217 */
+      '?', /* U+1218 */
+      '?', /* U+1219 */
+      '?', /* U+121A */
+      '?', /* U+121B */
+      '?', /* U+121C */
+      '?', /* U+121D */
+      '?', /* U+121E */
+      '?', /* U+121F */
+      '?', /* U+1220 */
+      '?', /* U+1221 */
+      '?', /* U+1222 */
+      '?', /* U+1223 */
+      '?', /* U+1224 */
+      '?', /* U+1225 */
+      '?', /* U+1226 */
+      '?', /* U+1227 */
+      '?', /* U+1228 */
+      '?', /* U+1229 */
+      '?', /* U+122A */
+      '?', /* U+122B */
+      '?', /* U+122C */
+      '?', /* U+122D */
+      '?', /* U+122E */
+      '?', /* U+122F */
+      '?', /* U+1230 */
+      '?', /* U+1231 */
+      '?', /* U+1232 */
+      '?', /* U+1233 */
+      '?', /* U+1234 */
+      '?', /* U+1235 */
+      '?', /* U+1236 */
+      '?', /* U+1237 */
+      '?', /* U+1238 */
+      '?', /* U+1239 */
+      '?', /* U+123A */
+      '?', /* U+123B */
+      '?', /* U+123C */
+      '?', /* U+123D */
+      '?', /* U+123E */
+      '?', /* U+123F */
+      '?', /* U+1240 */
+      '?', /* U+1241 */
+      '?', /* U+1242 */
+      '?', /* U+1243 */
+      '?', /* U+1244 */
+      '?', /* U+1245 */
+      '?', /* U+1246 */
+      '?', /* U+1247 */
+      '?', /* U+1248 */
+      '?', /* U+1249 */
+      '?', /* U+124A */
+      '?', /* U+124B */
+      '?', /* U+124C */
+      '?', /* U+124D */
+      '?', /* U+124E */
+      '?', /* U+124F */
+      '?', /* U+1250 */
+      '?', /* U+1251 */
+      '?', /* U+1252 */
+      '?', /* U+1253 */
+      '?', /* U+1254 */
+      '?', /* U+1255 */
+      '?', /* U+1256 */
+      '?', /* U+1257 */
+      '?', /* U+1258 */
+      '?', /* U+1259 */
+      '?', /* U+125A */
+      '?', /* U+125B */
+      '?', /* U+125C */
+      '?', /* U+125D */
+      '?', /* U+125E */
+      '?', /* U+125F */
+      '?', /* U+1260 */
+      '?', /* U+1261 */
+      '?', /* U+1262 */
+      '?', /* U+1263 */
+      '?', /* U+1264 */
+      '?', /* U+1265 */
+      '?', /* U+1266 */
+      '?', /* U+1267 */
+      '?', /* U+1268 */
+      '?', /* U+1269 */
+      '?', /* U+126A */
+      '?', /* U+126B */
+      '?', /* U+126C */
+      '?', /* U+126D */
+      '?', /* U+126E */
+      '?', /* U+126F */
+      '?', /* U+1270 */
+      '?', /* U+1271 */
+      '?', /* U+1272 */
+      '?', /* U+1273 */
+      '?', /* U+1274 */
+      '?', /* U+1275 */
+      '?', /* U+1276 */
+      '?', /* U+1277 */
+      '?', /* U+1278 */
+      '?', /* U+1279 */
+      '?', /* U+127A */
+      '?', /* U+127B */
+      '?', /* U+127C */
+      '?', /* U+127D */
+      '?', /* U+127E */
+      '?', /* U+127F */
+      '?', /* U+1280 */
+      '?', /* U+1281 */
+      '?', /* U+1282 */
+      '?', /* U+1283 */
+      '?', /* U+1284 */
+      '?', /* U+1285 */
+      '?', /* U+1286 */
+      '?', /* U+1287 */
+      '?', /* U+1288 */
+      '?', /* U+1289 */
+      '?', /* U+128A */
+      '?', /* U+128B */
+      '?', /* U+128C */
+      '?', /* U+128D */
+      '?', /* U+128E */
+      '?', /* U+128F */
+      '?', /* U+1290 */
+      '?', /* U+1291 */
+      '?', /* U+1292 */
+      '?', /* U+1293 */
+      '?', /* U+1294 */
+      '?', /* U+1295 */
+      '?', /* U+1296 */
+      '?', /* U+1297 */
+      '?', /* U+1298 */
+      '?', /* U+1299 */
+      '?', /* U+129A */
+      '?', /* U+129B */
+      '?', /* U+129C */
+      '?', /* U+129D */
+      '?', /* U+129E */
+      '?', /* U+129F */
+      '?', /* U+12A0 */
+      '?', /* U+12A1 */
+      '?', /* U+12A2 */
+      '?', /* U+12A3 */
+      '?', /* U+12A4 */
+      '?', /* U+12A5 */
+      '?', /* U+12A6 */
+      '?', /* U+12A7 */
+      '?', /* U+12A8 */
+      '?', /* U+12A9 */
+      '?', /* U+12AA */
+      '?', /* U+12AB */
+      '?', /* U+12AC */
+      '?', /* U+12AD */
+      '?', /* U+12AE */
+      '?', /* U+12AF */
+      '?', /* U+12B0 */
+      '?', /* U+12B1 */
+      '?', /* U+12B2 */
+      '?', /* U+12B3 */
+      '?', /* U+12B4 */
+      '?', /* U+12B5 */
+      '?', /* U+12B6 */
+      '?', /* U+12B7 */
+      '?', /* U+12B8 */
+      '?', /* U+12B9 */
+      '?', /* U+12BA */
+      '?', /* U+12BB */
+      '?', /* U+12BC */
+      '?', /* U+12BD */
+      '?', /* U+12BE */
+      '?', /* U+12BF */
+      '?', /* U+12C0 */
+      '?', /* U+12C1 */
+      '?', /* U+12C2 */
+      '?', /* U+12C3 */
+      '?', /* U+12C4 */
+      '?', /* U+12C5 */
+      '?', /* U+12C6 */
+      '?', /* U+12C7 */
+      '?', /* U+12C8 */
+      '?', /* U+12C9 */
+      '?', /* U+12CA */
+      '?', /* U+12CB */
+      '?', /* U+12CC */
+      '?', /* U+12CD */
+      '?', /* U+12CE */
+      '?', /* U+12CF */
+      '?', /* U+12D0 */
+      '?', /* U+12D1 */
+      '?', /* U+12D2 */
+      '?', /* U+12D3 */
+      '?', /* U+12D4 */
+      '?', /* U+12D5 */
+      '?', /* U+12D6 */
+      '?', /* U+12D7 */
+      '?', /* U+12D8 */
+      '?', /* U+12D9 */
+      '?', /* U+12DA */
+      '?', /* U+12DB */
+      '?', /* U+12DC */
+      '?', /* U+12DD */
+      '?', /* U+12DE */
+      '?', /* U+12DF */
+      '?', /* U+12E0 */
+      '?', /* U+12E1 */
+      '?', /* U+12E2 */
+      '?', /* U+12E3 */
+      '?', /* U+12E4 */
+      '?', /* U+12E5 */
+      '?', /* U+12E6 */
+      '?', /* U+12E7 */
+      '?', /* U+12E8 */
+      '?', /* U+12E9 */
+      '?', /* U+12EA */
+      '?', /* U+12EB */
+      '?', /* U+12EC */
+      '?', /* U+12ED */
+      '?', /* U+12EE */
+      '?', /* U+12EF */
+      '?', /* U+12F0 */
+      '?', /* U+12F1 */
+      '?', /* U+12F2 */
+      '?', /* U+12F3 */
+      '?', /* U+12F4 */
+      '?', /* U+12F5 */
+      '?', /* U+12F6 */
+      '?', /* U+12F7 */
+      '?', /* U+12F8 */
+      '?', /* U+12F9 */
+      '?', /* U+12FA */
+      '?', /* U+12FB */
+      '?', /* U+12FC */
+      '?', /* U+12FD */
+      '?', /* U+12FE */
+      '?', /* U+12FF */
+      '?', /* U+1300 */
+      '?', /* U+1301 */
+      '?', /* U+1302 */
+      '?', /* U+1303 */
+      '?', /* U+1304 */
+      '?', /* U+1305 */
+      '?', /* U+1306 */
+      '?', /* U+1307 */
+      '?', /* U+1308 */
+      '?', /* U+1309 */
+      '?', /* U+130A */
+      '?', /* U+130B */
+      '?', /* U+130C */
+      '?', /* U+130D */
+      '?', /* U+130E */
+      '?', /* U+130F */
+      '?', /* U+1310 */
+      '?', /* U+1311 */
+      '?', /* U+1312 */
+      '?', /* U+1313 */
+      '?', /* U+1314 */
+      '?', /* U+1315 */
+      '?', /* U+1316 */
+      '?', /* U+1317 */
+      '?', /* U+1318 */
+      '?', /* U+1319 */
+      '?', /* U+131A */
+      '?', /* U+131B */
+      '?', /* U+131C */
+      '?', /* U+131D */
+      '?', /* U+131E */
+      '?', /* U+131F */
+      '?', /* U+1320 */
+      '?', /* U+1321 */
+      '?', /* U+1322 */
+      '?', /* U+1323 */
+      '?', /* U+1324 */
+      '?', /* U+1325 */
+      '?', /* U+1326 */
+      '?', /* U+1327 */
+      '?', /* U+1328 */
+      '?', /* U+1329 */
+      '?', /* U+132A */
+      '?', /* U+132B */
+      '?', /* U+132C */
+      '?', /* U+132D */
+      '?', /* U+132E */
+      '?', /* U+132F */
+      '?', /* U+1330 */
+      '?', /* U+1331 */
+      '?', /* U+1332 */
+      '?', /* U+1333 */
+      '?', /* U+1334 */
+      '?', /* U+1335 */
+      '?', /* U+1336 */
+      '?', /* U+1337 */
+      '?', /* U+1338 */
+      '?', /* U+1339 */
+      '?', /* U+133A */
+      '?', /* U+133B */
+      '?', /* U+133C */
+      '?', /* U+133D */
+      '?', /* U+133E */
+      '?', /* U+133F */
+      '?', /* U+1340 */
+      '?', /* U+1341 */
+      '?', /* U+1342 */
+      '?', /* U+1343 */
+      '?', /* U+1344 */
+      '?', /* U+1345 */
+      '?', /* U+1346 */
+      '?', /* U+1347 */
+      '?', /* U+1348 */
+      '?', /* U+1349 */
+      '?', /* U+134A */
+      '?', /* U+134B */
+      '?', /* U+134C */
+      '?', /* U+134D */
+      '?', /* U+134E */
+      '?', /* U+134F */
+      '?', /* U+1350 */
+      '?', /* U+1351 */
+      '?', /* U+1352 */
+      '?', /* U+1353 */
+      '?', /* U+1354 */
+      '?', /* U+1355 */
+      '?', /* U+1356 */
+      '?', /* U+1357 */
+      '?', /* U+1358 */
+      '?', /* U+1359 */
+      '?', /* U+135A */
+      '?', /* U+135B */
+      '?', /* U+135C */
+      '?', /* U+135D */
+      '?', /* U+135E */
+      '?', /* U+135F */
+      '?', /* U+1360 */
+      '?', /* U+1361 */
+      '?', /* U+1362 */
+      '?', /* U+1363 */
+      '?', /* U+1364 */
+      '?', /* U+1365 */
+      '?', /* U+1366 */
+      '?', /* U+1367 */
+      '?', /* U+1368 */
+      '?', /* U+1369 */
+      '?', /* U+136A */
+      '?', /* U+136B */
+      '?', /* U+136C */
+      '?', /* U+136D */
+      '?', /* U+136E */
+      '?', /* U+136F */
+      '?', /* U+1370 */
+      '?', /* U+1371 */
+      '?', /* U+1372 */
+      '?', /* U+1373 */
+      '?', /* U+1374 */
+      '?', /* U+1375 */
+      '?', /* U+1376 */
+      '?', /* U+1377 */
+      '?', /* U+1378 */
+      '?', /* U+1379 */
+      '?', /* U+137A */
+      '?', /* U+137B */
+      '?', /* U+137C */
+      '?', /* U+137D */
+      '?', /* U+137E */
+      '?', /* U+137F */
+      '?', /* U+1380 */
+      '?', /* U+1381 */
+      '?', /* U+1382 */
+      '?', /* U+1383 */
+      '?', /* U+1384 */
+      '?', /* U+1385 */
+      '?', /* U+1386 */
+      '?', /* U+1387 */
+      '?', /* U+1388 */
+      '?', /* U+1389 */
+      '?', /* U+138A */
+      '?', /* U+138B */
+      '?', /* U+138C */
+      '?', /* U+138D */
+      '?', /* U+138E */
+      '?', /* U+138F */
+      '?', /* U+1390 */
+      '?', /* U+1391 */
+      '?', /* U+1392 */
+      '?', /* U+1393 */
+      '?', /* U+1394 */
+      '?', /* U+1395 */
+      '?', /* U+1396 */
+      '?', /* U+1397 */
+      '?', /* U+1398 */
+      '?', /* U+1399 */
+      '?', /* U+139A */
+      '?', /* U+139B */
+      '?', /* U+139C */
+      '?', /* U+139D */
+      '?', /* U+139E */
+      '?', /* U+139F */
+      '?', /* U+13A0 */
+      '?', /* U+13A1 */
+      '?', /* U+13A2 */
+      '?', /* U+13A3 */
+      '?', /* U+13A4 */
+      '?', /* U+13A5 */
+      '?', /* U+13A6 */
+      '?', /* U+13A7 */
+      '?', /* U+13A8 */
+      '?', /* U+13A9 */
+      '?', /* U+13AA */
+      '?', /* U+13AB */
+      '?', /* U+13AC */
+      '?', /* U+13AD */
+      '?', /* U+13AE */
+      '?', /* U+13AF */
+      '?', /* U+13B0 */
+      '?', /* U+13B1 */
+      '?', /* U+13B2 */
+      '?', /* U+13B3 */
+      '?', /* U+13B4 */
+      '?', /* U+13B5 */
+      '?', /* U+13B6 */
+      '?', /* U+13B7 */
+      '?', /* U+13B8 */
+      '?', /* U+13B9 */
+      '?', /* U+13BA */
+      '?', /* U+13BB */
+      '?', /* U+13BC */
+      '?', /* U+13BD */
+      '?', /* U+13BE */
+      '?', /* U+13BF */
+      '?', /* U+13C0 */
+      '?', /* U+13C1 */
+      '?', /* U+13C2 */
+      '?', /* U+13C3 */
+      '?', /* U+13C4 */
+      '?', /* U+13C5 */
+      '?', /* U+13C6 */
+      '?', /* U+13C7 */
+      '?', /* U+13C8 */
+      '?', /* U+13C9 */
+      '?', /* U+13CA */
+      '?', /* U+13CB */
+      '?', /* U+13CC */
+      '?', /* U+13CD */
+      '?', /* U+13CE */
+      '?', /* U+13CF */
+      '?', /* U+13D0 */
+      '?', /* U+13D1 */
+      '?', /* U+13D2 */
+      '?', /* U+13D3 */
+      '?', /* U+13D4 */
+      '?', /* U+13D5 */
+      '?', /* U+13D6 */
+      '?', /* U+13D7 */
+      '?', /* U+13D8 */
+      '?', /* U+13D9 */
+      '?', /* U+13DA */
+      '?', /* U+13DB */
+      '?', /* U+13DC */
+      '?', /* U+13DD */
+      '?', /* U+13DE */
+      '?', /* U+13DF */
+      '?', /* U+13E0 */
+      '?', /* U+13E1 */
+      '?', /* U+13E2 */
+      '?', /* U+13E3 */
+      '?', /* U+13E4 */
+      '?', /* U+13E5 */
+      '?', /* U+13E6 */
+      '?', /* U+13E7 */
+      '?', /* U+13E8 */
+      '?', /* U+13E9 */
+      '?', /* U+13EA */
+      '?', /* U+13EB */
+      '?', /* U+13EC */
+      '?', /* U+13ED */
+      '?', /* U+13EE */
+      '?', /* U+13EF */
+      '?', /* U+13F0 */
+      '?', /* U+13F1 */
+      '?', /* U+13F2 */
+      '?', /* U+13F3 */
+      '?', /* U+13F4 */
+      '?', /* U+13F5 */
+      '?', /* U+13F6 */
+      '?', /* U+13F7 */
+      '?', /* U+13F8 */
+      '?', /* U+13F9 */
+      '?', /* U+13FA */
+      '?', /* U+13FB */
+      '?', /* U+13FC */
+      '?', /* U+13FD */
+      '?', /* U+13FE */
+      '?', /* U+13FF */
+      '?', /* U+1400 */
+      '?', /* U+1401 */
+      '?', /* U+1402 */
+      '?', /* U+1403 */
+      '?', /* U+1404 */
+      '?', /* U+1405 */
+      '?', /* U+1406 */
+      '?', /* U+1407 */
+      '?', /* U+1408 */
+      '?', /* U+1409 */
+      '?', /* U+140A */
+      '?', /* U+140B */
+      '?', /* U+140C */
+      '?', /* U+140D */
+      '?', /* U+140E */
+      '?', /* U+140F */
+      '?', /* U+1410 */
+      '?', /* U+1411 */
+      '?', /* U+1412 */
+      '?', /* U+1413 */
+      '?', /* U+1414 */
+      '?', /* U+1415 */
+      '?', /* U+1416 */
+      '?', /* U+1417 */
+      '?', /* U+1418 */
+      '?', /* U+1419 */
+      '?', /* U+141A */
+      '?', /* U+141B */
+      '?', /* U+141C */
+      '?', /* U+141D */
+      '?', /* U+141E */
+      '?', /* U+141F */
+      '?', /* U+1420 */
+      '?', /* U+1421 */
+      '?', /* U+1422 */
+      '?', /* U+1423 */
+      '?', /* U+1424 */
+      '?', /* U+1425 */
+      '?', /* U+1426 */
+      '?', /* U+1427 */
+      '?', /* U+1428 */
+      '?', /* U+1429 */
+      '?', /* U+142A */
+      '?', /* U+142B */
+      '?', /* U+142C */
+      '?', /* U+142D */
+      '?', /* U+142E */
+      '?', /* U+142F */
+      '?', /* U+1430 */
+      '?', /* U+1431 */
+      '?', /* U+1432 */
+      '?', /* U+1433 */
+      '?', /* U+1434 */
+      '?', /* U+1435 */
+      '?', /* U+1436 */
+      '?', /* U+1437 */
+      '?', /* U+1438 */
+      '?', /* U+1439 */
+      '?', /* U+143A */
+      '?', /* U+143B */
+      '?', /* U+143C */
+      '?', /* U+143D */
+      '?', /* U+143E */
+      '?', /* U+143F */
+      '?', /* U+1440 */
+      '?', /* U+1441 */
+      '?', /* U+1442 */
+      '?', /* U+1443 */
+      '?', /* U+1444 */
+      '?', /* U+1445 */
+      '?', /* U+1446 */
+      '?', /* U+1447 */
+      '?', /* U+1448 */
+      '?', /* U+1449 */
+      '?', /* U+144A */
+      '?', /* U+144B */
+      '?', /* U+144C */
+      '?', /* U+144D */
+      '?', /* U+144E */
+      '?', /* U+144F */
+      '?', /* U+1450 */
+      '?', /* U+1451 */
+      '?', /* U+1452 */
+      '?', /* U+1453 */
+      '?', /* U+1454 */
+      '?', /* U+1455 */
+      '?', /* U+1456 */
+      '?', /* U+1457 */
+      '?', /* U+1458 */
+      '?', /* U+1459 */
+      '?', /* U+145A */
+      '?', /* U+145B */
+      '?', /* U+145C */
+      '?', /* U+145D */
+      '?', /* U+145E */
+      '?', /* U+145F */
+      '?', /* U+1460 */
+      '?', /* U+1461 */
+      '?', /* U+1462 */
+      '?', /* U+1463 */
+      '?', /* U+1464 */
+      '?', /* U+1465 */
+      '?', /* U+1466 */
+      '?', /* U+1467 */
+      '?', /* U+1468 */
+      '?', /* U+1469 */
+      '?', /* U+146A */
+      '?', /* U+146B */
+      '?', /* U+146C */
+      '?', /* U+146D */
+      '?', /* U+146E */
+      '?', /* U+146F */
+      '?', /* U+1470 */
+      '?', /* U+1471 */
+      '?', /* U+1472 */
+      '?', /* U+1473 */
+      '?', /* U+1474 */
+      '?', /* U+1475 */
+      '?', /* U+1476 */
+      '?', /* U+1477 */
+      '?', /* U+1478 */
+      '?', /* U+1479 */
+      '?', /* U+147A */
+      '?', /* U+147B */
+      '?', /* U+147C */
+      '?', /* U+147D */
+      '?', /* U+147E */
+      '?', /* U+147F */
+      '?', /* U+1480 */
+      '?', /* U+1481 */
+      '?', /* U+1482 */
+      '?', /* U+1483 */
+      '?', /* U+1484 */
+      '?', /* U+1485 */
+      '?', /* U+1486 */
+      '?', /* U+1487 */
+      '?', /* U+1488 */
+      '?', /* U+1489 */
+      '?', /* U+148A */
+      '?', /* U+148B */
+      '?', /* U+148C */
+      '?', /* U+148D */
+      '?', /* U+148E */
+      '?', /* U+148F */
+      '?', /* U+1490 */
+      '?', /* U+1491 */
+      '?', /* U+1492 */
+      '?', /* U+1493 */
+      '?', /* U+1494 */
+      '?', /* U+1495 */
+      '?', /* U+1496 */
+      '?', /* U+1497 */
+      '?', /* U+1498 */
+      '?', /* U+1499 */
+      '?', /* U+149A */
+      '?', /* U+149B */
+      '?', /* U+149C */
+      '?', /* U+149D */
+      '?', /* U+149E */
+      '?', /* U+149F */
+      '?', /* U+14A0 */
+      '?', /* U+14A1 */
+      '?', /* U+14A2 */
+      '?', /* U+14A3 */
+      '?', /* U+14A4 */
+      '?', /* U+14A5 */
+      '?', /* U+14A6 */
+      '?', /* U+14A7 */
+      '?', /* U+14A8 */
+      '?', /* U+14A9 */
+      '?', /* U+14AA */
+      '?', /* U+14AB */
+      '?', /* U+14AC */
+      '?', /* U+14AD */
+      '?', /* U+14AE */
+      '?', /* U+14AF */
+      '?', /* U+14B0 */
+      '?', /* U+14B1 */
+      '?', /* U+14B2 */
+      '?', /* U+14B3 */
+      '?', /* U+14B4 */
+      '?', /* U+14B5 */
+      '?', /* U+14B6 */
+      '?', /* U+14B7 */
+      '?', /* U+14B8 */
+      '?', /* U+14B9 */
+      '?', /* U+14BA */
+      '?', /* U+14BB */
+      '?', /* U+14BC */
+      '?', /* U+14BD */
+      '?', /* U+14BE */
+      '?', /* U+14BF */
+      '?', /* U+14C0 */
+      '?', /* U+14C1 */
+      '?', /* U+14C2 */
+      '?', /* U+14C3 */
+      '?', /* U+14C4 */
+      '?', /* U+14C5 */
+      '?', /* U+14C6 */
+      '?', /* U+14C7 */
+      '?', /* U+14C8 */
+      '?', /* U+14C9 */
+      '?', /* U+14CA */
+      '?', /* U+14CB */
+      '?', /* U+14CC */
+      '?', /* U+14CD */
+      '?', /* U+14CE */
+      '?', /* U+14CF */
+      '?', /* U+14D0 */
+      '?', /* U+14D1 */
+      '?', /* U+14D2 */
+      '?', /* U+14D3 */
+      '?', /* U+14D4 */
+      '?', /* U+14D5 */
+      '?', /* U+14D6 */
+      '?', /* U+14D7 */
+      '?', /* U+14D8 */
+      '?', /* U+14D9 */
+      '?', /* U+14DA */
+      '?', /* U+14DB */
+      '?', /* U+14DC */
+      '?', /* U+14DD */
+      '?', /* U+14DE */
+      '?', /* U+14DF */
+      '?', /* U+14E0 */
+      '?', /* U+14E1 */
+      '?', /* U+14E2 */
+      '?', /* U+14E3 */
+      '?', /* U+14E4 */
+      '?', /* U+14E5 */
+      '?', /* U+14E6 */
+      '?', /* U+14E7 */
+      '?', /* U+14E8 */
+      '?', /* U+14E9 */
+      '?', /* U+14EA */
+      '?', /* U+14EB */
+      '?', /* U+14EC */
+      '?', /* U+14ED */
+      '?', /* U+14EE */
+      '?', /* U+14EF */
+      '?', /* U+14F0 */
+      '?', /* U+14F1 */
+      '?', /* U+14F2 */
+      '?', /* U+14F3 */
+      '?', /* U+14F4 */
+      '?', /* U+14F5 */
+      '?', /* U+14F6 */
+      '?', /* U+14F7 */
+      '?', /* U+14F8 */
+      '?', /* U+14F9 */
+      '?', /* U+14FA */
+      '?', /* U+14FB */
+      '?', /* U+14FC */
+      '?', /* U+14FD */
+      '?', /* U+14FE */
+      '?', /* U+14FF */
+      '?', /* U+1500 */
+      '?', /* U+1501 */
+      '?', /* U+1502 */
+      '?', /* U+1503 */
+      '?', /* U+1504 */
+      '?', /* U+1505 */
+      '?', /* U+1506 */
+      '?', /* U+1507 */
+      '?', /* U+1508 */
+      '?', /* U+1509 */
+      '?', /* U+150A */
+      '?', /* U+150B */
+      '?', /* U+150C */
+      '?', /* U+150D */
+      '?', /* U+150E */
+      '?', /* U+150F */
+      '?', /* U+1510 */
+      '?', /* U+1511 */
+      '?', /* U+1512 */
+      '?', /* U+1513 */
+      '?', /* U+1514 */
+      '?', /* U+1515 */
+      '?', /* U+1516 */
+      '?', /* U+1517 */
+      '?', /* U+1518 */
+      '?', /* U+1519 */
+      '?', /* U+151A */
+      '?', /* U+151B */
+      '?', /* U+151C */
+      '?', /* U+151D */
+      '?', /* U+151E */
+      '?', /* U+151F */
+      '?', /* U+1520 */
+      '?', /* U+1521 */
+      '?', /* U+1522 */
+      '?', /* U+1523 */
+      '?', /* U+1524 */
+      '?', /* U+1525 */
+      '?', /* U+1526 */
+      '?', /* U+1527 */
+      '?', /* U+1528 */
+      '?', /* U+1529 */
+      '?', /* U+152A */
+      '?', /* U+152B */
+      '?', /* U+152C */
+      '?', /* U+152D */
+      '?', /* U+152E */
+      '?', /* U+152F */
+      '?', /* U+1530 */
+      '?', /* U+1531 */
+      '?', /* U+1532 */
+      '?', /* U+1533 */
+      '?', /* U+1534 */
+      '?', /* U+1535 */
+      '?', /* U+1536 */
+      '?', /* U+1537 */
+      '?', /* U+1538 */
+      '?', /* U+1539 */
+      '?', /* U+153A */
+      '?', /* U+153B */
+      '?', /* U+153C */
+      '?', /* U+153D */
+      '?', /* U+153E */
+      '?', /* U+153F */
+      '?', /* U+1540 */
+      '?', /* U+1541 */
+      '?', /* U+1542 */
+      '?', /* U+1543 */
+      '?', /* U+1544 */
+      '?', /* U+1545 */
+      '?', /* U+1546 */
+      '?', /* U+1547 */
+      '?', /* U+1548 */
+      '?', /* U+1549 */
+      '?', /* U+154A */
+      '?', /* U+154B */
+      '?', /* U+154C */
+      '?', /* U+154D */
+      '?', /* U+154E */
+      '?', /* U+154F */
+      '?', /* U+1550 */
+      '?', /* U+1551 */
+      '?', /* U+1552 */
+      '?', /* U+1553 */
+      '?', /* U+1554 */
+      '?', /* U+1555 */
+      '?', /* U+1556 */
+      '?', /* U+1557 */
+      '?', /* U+1558 */
+      '?', /* U+1559 */
+      '?', /* U+155A */
+      '?', /* U+155B */
+      '?', /* U+155C */
+      '?', /* U+155D */
+      '?', /* U+155E */
+      '?', /* U+155F */
+      '?', /* U+1560 */
+      '?', /* U+1561 */
+      '?', /* U+1562 */
+      '?', /* U+1563 */
+      '?', /* U+1564 */
+      '?', /* U+1565 */
+      '?', /* U+1566 */
+      '?', /* U+1567 */
+      '?', /* U+1568 */
+      '?', /* U+1569 */
+      '?', /* U+156A */
+      '?', /* U+156B */
+      '?', /* U+156C */
+      '?', /* U+156D */
+      '?', /* U+156E */
+      '?', /* U+156F */
+      '?', /* U+1570 */
+      '?', /* U+1571 */
+      '?', /* U+1572 */
+      '?', /* U+1573 */
+      '?', /* U+1574 */
+      '?', /* U+1575 */
+      '?', /* U+1576 */
+      '?', /* U+1577 */
+      '?', /* U+1578 */
+      '?', /* U+1579 */
+      '?', /* U+157A */
+      '?', /* U+157B */
+      '?', /* U+157C */
+      '?', /* U+157D */
+      '?', /* U+157E */
+      '?', /* U+157F */
+      '?', /* U+1580 */
+      '?', /* U+1581 */
+      '?', /* U+1582 */
+      '?', /* U+1583 */
+      '?', /* U+1584 */
+      '?', /* U+1585 */
+      '?', /* U+1586 */
+      '?', /* U+1587 */
+      '?', /* U+1588 */
+      '?', /* U+1589 */
+      '?', /* U+158A */
+      '?', /* U+158B */
+      '?', /* U+158C */
+      '?', /* U+158D */
+      '?', /* U+158E */
+      '?', /* U+158F */
+      '?', /* U+1590 */
+      '?', /* U+1591 */
+      '?', /* U+1592 */
+      '?', /* U+1593 */
+      '?', /* U+1594 */
+      '?', /* U+1595 */
+      '?', /* U+1596 */
+      '?', /* U+1597 */
+      '?', /* U+1598 */
+      '?', /* U+1599 */
+      '?', /* U+159A */
+      '?', /* U+159B */
+      '?', /* U+159C */
+      '?', /* U+159D */
+      '?', /* U+159E */
+      '?', /* U+159F */
+      '?', /* U+15A0 */
+      '?', /* U+15A1 */
+      '?', /* U+15A2 */
+      '?', /* U+15A3 */
+      '?', /* U+15A4 */
+      '?', /* U+15A5 */
+      '?', /* U+15A6 */
+      '?', /* U+15A7 */
+      '?', /* U+15A8 */
+      '?', /* U+15A9 */
+      '?', /* U+15AA */
+      '?', /* U+15AB */
+      '?', /* U+15AC */
+      '?', /* U+15AD */
+      '?', /* U+15AE */
+      '?', /* U+15AF */
+      '?', /* U+15B0 */
+      '?', /* U+15B1 */
+      '?', /* U+15B2 */
+      '?', /* U+15B3 */
+      '?', /* U+15B4 */
+      '?', /* U+15B5 */
+      '?', /* U+15B6 */
+      '?', /* U+15B7 */
+      '?', /* U+15B8 */
+      '?', /* U+15B9 */
+      '?', /* U+15BA */
+      '?', /* U+15BB */
+      '?', /* U+15BC */
+      '?', /* U+15BD */
+      '?', /* U+15BE */
+      '?', /* U+15BF */
+      '?', /* U+15C0 */
+      '?', /* U+15C1 */
+      '?', /* U+15C2 */
+      '?', /* U+15C3 */
+      '?', /* U+15C4 */
+      '?', /* U+15C5 */
+      '?', /* U+15C6 */
+      '?', /* U+15C7 */
+      '?', /* U+15C8 */
+      '?', /* U+15C9 */
+      '?', /* U+15CA */
+      '?', /* U+15CB */
+      '?', /* U+15CC */
+      '?', /* U+15CD */
+      '?', /* U+15CE */
+      '?', /* U+15CF */
+      '?', /* U+15D0 */
+      '?', /* U+15D1 */
+      '?', /* U+15D2 */
+      '?', /* U+15D3 */
+      '?', /* U+15D4 */
+      '?', /* U+15D5 */
+      '?', /* U+15D6 */
+      '?', /* U+15D7 */
+      '?', /* U+15D8 */
+      '?', /* U+15D9 */
+      '?', /* U+15DA */
+      '?', /* U+15DB */
+      '?', /* U+15DC */
+      '?', /* U+15DD */
+      '?', /* U+15DE */
+      '?', /* U+15DF */
+      '?', /* U+15E0 */
+      '?', /* U+15E1 */
+      '?', /* U+15E2 */
+      '?', /* U+15E3 */
+      '?', /* U+15E4 */
+      '?', /* U+15E5 */
+      '?', /* U+15E6 */
+      '?', /* U+15E7 */
+      '?', /* U+15E8 */
+      '?', /* U+15E9 */
+      '?', /* U+15EA */
+      '?', /* U+15EB */
+      '?', /* U+15EC */
+      '?', /* U+15ED */
+      '?', /* U+15EE */
+      '?', /* U+15EF */
+      '?', /* U+15F0 */
+      '?', /* U+15F1 */
+      '?', /* U+15F2 */
+      '?', /* U+15F3 */
+      '?', /* U+15F4 */
+      '?', /* U+15F5 */
+      '?', /* U+15F6 */
+      '?', /* U+15F7 */
+      '?', /* U+15F8 */
+      '?', /* U+15F9 */
+      '?', /* U+15FA */
+      '?', /* U+15FB */
+      '?', /* U+15FC */
+      '?', /* U+15FD */
+      '?', /* U+15FE */
+      '?', /* U+15FF */
+      '?', /* U+1600 */
+      '?', /* U+1601 */
+      '?', /* U+1602 */
+      '?', /* U+1603 */
+      '?', /* U+1604 */
+      '?', /* U+1605 */
+      '?', /* U+1606 */
+      '?', /* U+1607 */
+      '?', /* U+1608 */
+      '?', /* U+1609 */
+      '?', /* U+160A */
+      '?', /* U+160B */
+      '?', /* U+160C */
+      '?', /* U+160D */
+      '?', /* U+160E */
+      '?', /* U+160F */
+      '?', /* U+1610 */
+      '?', /* U+1611 */
+      '?', /* U+1612 */
+      '?', /* U+1613 */
+      '?', /* U+1614 */
+      '?', /* U+1615 */
+      '?', /* U+1616 */
+      '?', /* U+1617 */
+      '?', /* U+1618 */
+      '?', /* U+1619 */
+      '?', /* U+161A */
+      '?', /* U+161B */
+      '?', /* U+161C */
+      '?', /* U+161D */
+      '?', /* U+161E */
+      '?', /* U+161F */
+      '?', /* U+1620 */
+      '?', /* U+1621 */
+      '?', /* U+1622 */
+      '?', /* U+1623 */
+      '?', /* U+1624 */
+      '?', /* U+1625 */
+      '?', /* U+1626 */
+      '?', /* U+1627 */
+      '?', /* U+1628 */
+      '?', /* U+1629 */
+      '?', /* U+162A */
+      '?', /* U+162B */
+      '?', /* U+162C */
+      '?', /* U+162D */
+      '?', /* U+162E */
+      '?', /* U+162F */
+      '?', /* U+1630 */
+      '?', /* U+1631 */
+      '?', /* U+1632 */
+      '?', /* U+1633 */
+      '?', /* U+1634 */
+      '?', /* U+1635 */
+      '?', /* U+1636 */
+      '?', /* U+1637 */
+      '?', /* U+1638 */
+      '?', /* U+1639 */
+      '?', /* U+163A */
+      '?', /* U+163B */
+      '?', /* U+163C */
+      '?', /* U+163D */
+      '?', /* U+163E */
+      '?', /* U+163F */
+      '?', /* U+1640 */
+      '?', /* U+1641 */
+      '?', /* U+1642 */
+      '?', /* U+1643 */
+      '?', /* U+1644 */
+      '?', /* U+1645 */
+      '?', /* U+1646 */
+      '?', /* U+1647 */
+      '?', /* U+1648 */
+      '?', /* U+1649 */
+      '?', /* U+164A */
+      '?', /* U+164B */
+      '?', /* U+164C */
+      '?', /* U+164D */
+      '?', /* U+164E */
+      '?', /* U+164F */
+      '?', /* U+1650 */
+      '?', /* U+1651 */
+      '?', /* U+1652 */
+      '?', /* U+1653 */
+      '?', /* U+1654 */
+      '?', /* U+1655 */
+      '?', /* U+1656 */
+      '?', /* U+1657 */
+      '?', /* U+1658 */
+      '?', /* U+1659 */
+      '?', /* U+165A */
+      '?', /* U+165B */
+      '?', /* U+165C */
+      '?', /* U+165D */
+      '?', /* U+165E */
+      '?', /* U+165F */
+      '?', /* U+1660 */
+      '?', /* U+1661 */
+      '?', /* U+1662 */
+      '?', /* U+1663 */
+      '?', /* U+1664 */
+      '?', /* U+1665 */
+      '?', /* U+1666 */
+      '?', /* U+1667 */
+      '?', /* U+1668 */
+      '?', /* U+1669 */
+      '?', /* U+166A */
+      '?', /* U+166B */
+      '?', /* U+166C */
+      '?', /* U+166D */
+      '?', /* U+166E */
+      '?', /* U+166F */
+      '?', /* U+1670 */
+      '?', /* U+1671 */
+      '?', /* U+1672 */
+      '?', /* U+1673 */
+      '?', /* U+1674 */
+      '?', /* U+1675 */
+      '?', /* U+1676 */
+      '?', /* U+1677 */
+      '?', /* U+1678 */
+      '?', /* U+1679 */
+      '?', /* U+167A */
+      '?', /* U+167B */
+      '?', /* U+167C */
+      '?', /* U+167D */
+      '?', /* U+167E */
+      '?', /* U+167F */
+      '?', /* U+1680 */
+      '?', /* U+1681 */
+      '?', /* U+1682 */
+      '?', /* U+1683 */
+      '?', /* U+1684 */
+      '?', /* U+1685 */
+      '?', /* U+1686 */
+      '?', /* U+1687 */
+      '?', /* U+1688 */
+      '?', /* U+1689 */
+      '?', /* U+168A */
+      '?', /* U+168B */
+      '?', /* U+168C */
+      '?', /* U+168D */
+      '?', /* U+168E */
+      '?', /* U+168F */
+      '?', /* U+1690 */
+      '?', /* U+1691 */
+      '?', /* U+1692 */
+      '?', /* U+1693 */
+      '?', /* U+1694 */
+      '?', /* U+1695 */
+      '?', /* U+1696 */
+      '?', /* U+1697 */
+      '?', /* U+1698 */
+      '?', /* U+1699 */
+      '?', /* U+169A */
+      '?', /* U+169B */
+      '?', /* U+169C */
+      '?', /* U+169D */
+      '?', /* U+169E */
+      '?', /* U+169F */
+      '?', /* U+16A0 */
+      '?', /* U+16A1 */
+      '?', /* U+16A2 */
+      '?', /* U+16A3 */
+      '?', /* U+16A4 */
+      '?', /* U+16A5 */
+      '?', /* U+16A6 */
+      '?', /* U+16A7 */
+      '?', /* U+16A8 */
+      '?', /* U+16A9 */
+      '?', /* U+16AA */
+      '?', /* U+16AB */
+      '?', /* U+16AC */
+      '?', /* U+16AD */
+      '?', /* U+16AE */
+      '?', /* U+16AF */
+      '?', /* U+16B0 */
+      '?', /* U+16B1 */
+      '?', /* U+16B2 */
+      '?', /* U+16B3 */
+      '?', /* U+16B4 */
+      '?', /* U+16B5 */
+      '?', /* U+16B6 */
+      '?', /* U+16B7 */
+      '?', /* U+16B8 */
+      '?', /* U+16B9 */
+      '?', /* U+16BA */
+      '?', /* U+16BB */
+      '?', /* U+16BC */
+      '?', /* U+16BD */
+      '?', /* U+16BE */
+      '?', /* U+16BF */
+      '?', /* U+16C0 */
+      '?', /* U+16C1 */
+      '?', /* U+16C2 */
+      '?', /* U+16C3 */
+      '?', /* U+16C4 */
+      '?', /* U+16C5 */
+      '?', /* U+16C6 */
+      '?', /* U+16C7 */
+      '?', /* U+16C8 */
+      '?', /* U+16C9 */
+      '?', /* U+16CA */
+      '?', /* U+16CB */
+      '?', /* U+16CC */
+      '?', /* U+16CD */
+      '?', /* U+16CE */
+      '?', /* U+16CF */
+      '?', /* U+16D0 */
+      '?', /* U+16D1 */
+      '?', /* U+16D2 */
+      '?', /* U+16D3 */
+      '?', /* U+16D4 */
+      '?', /* U+16D5 */
+      '?', /* U+16D6 */
+      '?', /* U+16D7 */
+      '?', /* U+16D8 */
+      '?', /* U+16D9 */
+      '?', /* U+16DA */
+      '?', /* U+16DB */
+      '?', /* U+16DC */
+      '?', /* U+16DD */
+      '?', /* U+16DE */
+      '?', /* U+16DF */
+      '?', /* U+16E0 */
+      '?', /* U+16E1 */
+      '?', /* U+16E2 */
+      '?', /* U+16E3 */
+      '?', /* U+16E4 */
+      '?', /* U+16E5 */
+      '?', /* U+16E6 */
+      '?', /* U+16E7 */
+      '?', /* U+16E8 */
+      '?', /* U+16E9 */
+      '?', /* U+16EA */
+      '?', /* U+16EB */
+      '?', /* U+16EC */
+      '?', /* U+16ED */
+      '?', /* U+16EE */
+      '?', /* U+16EF */
+      '?', /* U+16F0 */
+      '?', /* U+16F1 */
+      '?', /* U+16F2 */
+      '?', /* U+16F3 */
+      '?', /* U+16F4 */
+      '?', /* U+16F5 */
+      '?', /* U+16F6 */
+      '?', /* U+16F7 */
+      '?', /* U+16F8 */
+      '?', /* U+16F9 */
+      '?', /* U+16FA */
+      '?', /* U+16FB */
+      '?', /* U+16FC */
+      '?', /* U+16FD */
+      '?', /* U+16FE */
+      '?', /* U+16FF */
+      '?', /* U+1700 */
+      '?', /* U+1701 */
+      '?', /* U+1702 */
+      '?', /* U+1703 */
+      '?', /* U+1704 */
+      '?', /* U+1705 */
+      '?', /* U+1706 */
+      '?', /* U+1707 */
+      '?', /* U+1708 */
+      '?', /* U+1709 */
+      '?', /* U+170A */
+      '?', /* U+170B */
+      '?', /* U+170C */
+      '?', /* U+170D */
+      '?', /* U+170E */
+      '?', /* U+170F */
+      '?', /* U+1710 */
+      '?', /* U+1711 */
+      '?', /* U+1712 */
+      '?', /* U+1713 */
+      '?', /* U+1714 */
+      '?', /* U+1715 */
+      '?', /* U+1716 */
+      '?', /* U+1717 */
+      '?', /* U+1718 */
+      '?', /* U+1719 */
+      '?', /* U+171A */
+      '?', /* U+171B */
+      '?', /* U+171C */
+      '?', /* U+171D */
+      '?', /* U+171E */
+      '?', /* U+171F */
+      '?', /* U+1720 */
+      '?', /* U+1721 */
+      '?', /* U+1722 */
+      '?', /* U+1723 */
+      '?', /* U+1724 */
+      '?', /* U+1725 */
+      '?', /* U+1726 */
+      '?', /* U+1727 */
+      '?', /* U+1728 */
+      '?', /* U+1729 */
+      '?', /* U+172A */
+      '?', /* U+172B */
+      '?', /* U+172C */
+      '?', /* U+172D */
+      '?', /* U+172E */
+      '?', /* U+172F */
+      '?', /* U+1730 */
+      '?', /* U+1731 */
+      '?', /* U+1732 */
+      '?', /* U+1733 */
+      '?', /* U+1734 */
+      '?', /* U+1735 */
+      '?', /* U+1736 */
+      '?', /* U+1737 */
+      '?', /* U+1738 */
+      '?', /* U+1739 */
+      '?', /* U+173A */
+      '?', /* U+173B */
+      '?', /* U+173C */
+      '?', /* U+173D */
+      '?', /* U+173E */
+      '?', /* U+173F */
+      '?', /* U+1740 */
+      '?', /* U+1741 */
+      '?', /* U+1742 */
+      '?', /* U+1743 */
+      '?', /* U+1744 */
+      '?', /* U+1745 */
+      '?', /* U+1746 */
+      '?', /* U+1747 */
+      '?', /* U+1748 */
+      '?', /* U+1749 */
+      '?', /* U+174A */
+      '?', /* U+174B */
+      '?', /* U+174C */
+      '?', /* U+174D */
+      '?', /* U+174E */
+      '?', /* U+174F */
+      '?', /* U+1750 */
+      '?', /* U+1751 */
+      '?', /* U+1752 */
+      '?', /* U+1753 */
+      '?', /* U+1754 */
+      '?', /* U+1755 */
+      '?', /* U+1756 */
+      '?', /* U+1757 */
+      '?', /* U+1758 */
+      '?', /* U+1759 */
+      '?', /* U+175A */
+      '?', /* U+175B */
+      '?', /* U+175C */
+      '?', /* U+175D */
+      '?', /* U+175E */
+      '?', /* U+175F */
+      '?', /* U+1760 */
+      '?', /* U+1761 */
+      '?', /* U+1762 */
+      '?', /* U+1763 */
+      '?', /* U+1764 */
+      '?', /* U+1765 */
+      '?', /* U+1766 */
+      '?', /* U+1767 */
+      '?', /* U+1768 */
+      '?', /* U+1769 */
+      '?', /* U+176A */
+      '?', /* U+176B */
+      '?', /* U+176C */
+      '?', /* U+176D */
+      '?', /* U+176E */
+      '?', /* U+176F */
+      '?', /* U+1770 */
+      '?', /* U+1771 */
+      '?', /* U+1772 */
+      '?', /* U+1773 */
+      '?', /* U+1774 */
+      '?', /* U+1775 */
+      '?', /* U+1776 */
+      '?', /* U+1777 */
+      '?', /* U+1778 */
+      '?', /* U+1779 */
+      '?', /* U+177A */
+      '?', /* U+177B */
+      '?', /* U+177C */
+      '?', /* U+177D */
+      '?', /* U+177E */
+      '?', /* U+177F */
+      '?', /* U+1780 */
+      '?', /* U+1781 */
+      '?', /* U+1782 */
+      '?', /* U+1783 */
+      '?', /* U+1784 */
+      '?', /* U+1785 */
+      '?', /* U+1786 */
+      '?', /* U+1787 */
+      '?', /* U+1788 */
+      '?', /* U+1789 */
+      '?', /* U+178A */
+      '?', /* U+178B */
+      '?', /* U+178C */
+      '?', /* U+178D */
+      '?', /* U+178E */
+      '?', /* U+178F */
+      '?', /* U+1790 */
+      '?', /* U+1791 */
+      '?', /* U+1792 */
+      '?', /* U+1793 */
+      '?', /* U+1794 */
+      '?', /* U+1795 */
+      '?', /* U+1796 */
+      '?', /* U+1797 */
+      '?', /* U+1798 */
+      '?', /* U+1799 */
+      '?', /* U+179A */
+      '?', /* U+179B */
+      '?', /* U+179C */
+      '?', /* U+179D */
+      '?', /* U+179E */
+      '?', /* U+179F */
+      '?', /* U+17A0 */
+      '?', /* U+17A1 */
+      '?', /* U+17A2 */
+      '?', /* U+17A3 */
+      '?', /* U+17A4 */
+      '?', /* U+17A5 */
+      '?', /* U+17A6 */
+      '?', /* U+17A7 */
+      '?', /* U+17A8 */
+      '?', /* U+17A9 */
+      '?', /* U+17AA */
+      '?', /* U+17AB */
+      '?', /* U+17AC */
+      '?', /* U+17AD */
+      '?', /* U+17AE */
+      '?', /* U+17AF */
+      '?', /* U+17B0 */
+      '?', /* U+17B1 */
+      '?', /* U+17B2 */
+      '?', /* U+17B3 */
+      '?', /* U+17B4 */
+      '?', /* U+17B5 */
+      '?', /* U+17B6 */
+      '?', /* U+17B7 */
+      '?', /* U+17B8 */
+      '?', /* U+17B9 */
+      '?', /* U+17BA */
+      '?', /* U+17BB */
+      '?', /* U+17BC */
+      '?', /* U+17BD */
+      '?', /* U+17BE */
+      '?', /* U+17BF */
+      '?', /* U+17C0 */
+      '?', /* U+17C1 */
+      '?', /* U+17C2 */
+      '?', /* U+17C3 */
+      '?', /* U+17C4 */
+      '?', /* U+17C5 */
+      '?', /* U+17C6 */
+      '?', /* U+17C7 */
+      '?', /* U+17C8 */
+      '?', /* U+17C9 */
+      '?', /* U+17CA */
+      '?', /* U+17CB */
+      '?', /* U+17CC */
+      '?', /* U+17CD */
+      '?', /* U+17CE */
+      '?', /* U+17CF */
+      '?', /* U+17D0 */
+      '?', /* U+17D1 */
+      '?', /* U+17D2 */
+      '?', /* U+17D3 */
+      '?', /* U+17D4 */
+      '?', /* U+17D5 */
+      '?', /* U+17D6 */
+      '?', /* U+17D7 */
+      '?', /* U+17D8 */
+      '?', /* U+17D9 */
+      '?', /* U+17DA */
+      '?', /* U+17DB */
+      '?', /* U+17DC */
+      '?', /* U+17DD */
+      '?', /* U+17DE */
+      '?', /* U+17DF */
+      '?', /* U+17E0 */
+      '?', /* U+17E1 */
+      '?', /* U+17E2 */
+      '?', /* U+17E3 */
+      '?', /* U+17E4 */
+      '?', /* U+17E5 */
+      '?', /* U+17E6 */
+      '?', /* U+17E7 */
+      '?', /* U+17E8 */
+      '?', /* U+17E9 */
+      '?', /* U+17EA */
+      '?', /* U+17EB */
+      '?', /* U+17EC */
+      '?', /* U+17ED */
+      '?', /* U+17EE */
+      '?', /* U+17EF */
+      '?', /* U+17F0 */
+      '?', /* U+17F1 */
+      '?', /* U+17F2 */
+      '?', /* U+17F3 */
+      '?', /* U+17F4 */
+      '?', /* U+17F5 */
+      '?', /* U+17F6 */
+      '?', /* U+17F7 */
+      '?', /* U+17F8 */
+      '?', /* U+17F9 */
+      '?', /* U+17FA */
+      '?', /* U+17FB */
+      '?', /* U+17FC */
+      '?', /* U+17FD */
+      '?', /* U+17FE */
+      '?', /* U+17FF */
+      '?', /* U+1800 */
+      '?', /* U+1801 */
+      '?', /* U+1802 */
+      '?', /* U+1803 */
+      '?', /* U+1804 */
+      '?', /* U+1805 */
+      '?', /* U+1806 */
+      '?', /* U+1807 */
+      '?', /* U+1808 */
+      '?', /* U+1809 */
+      '?', /* U+180A */
+      '?', /* U+180B */
+      '?', /* U+180C */
+      '?', /* U+180D */
+      '?', /* U+180E */
+      '?', /* U+180F */
+      '?', /* U+1810 */
+      '?', /* U+1811 */
+      '?', /* U+1812 */
+      '?', /* U+1813 */
+      '?', /* U+1814 */
+      '?', /* U+1815 */
+      '?', /* U+1816 */
+      '?', /* U+1817 */
+      '?', /* U+1818 */
+      '?', /* U+1819 */
+      '?', /* U+181A */
+      '?', /* U+181B */
+      '?', /* U+181C */
+      '?', /* U+181D */
+      '?', /* U+181E */
+      '?', /* U+181F */
+      '?', /* U+1820 */
+      '?', /* U+1821 */
+      '?', /* U+1822 */
+      '?', /* U+1823 */
+      '?', /* U+1824 */
+      '?', /* U+1825 */
+      '?', /* U+1826 */
+      '?', /* U+1827 */
+      '?', /* U+1828 */
+      '?', /* U+1829 */
+      '?', /* U+182A */
+      '?', /* U+182B */
+      '?', /* U+182C */
+      '?', /* U+182D */
+      '?', /* U+182E */
+      '?', /* U+182F */
+      '?', /* U+1830 */
+      '?', /* U+1831 */
+      '?', /* U+1832 */
+      '?', /* U+1833 */
+      '?', /* U+1834 */
+      '?', /* U+1835 */
+      '?', /* U+1836 */
+      '?', /* U+1837 */
+      '?', /* U+1838 */
+      '?', /* U+1839 */
+      '?', /* U+183A */
+      '?', /* U+183B */
+      '?', /* U+183C */
+      '?', /* U+183D */
+      '?', /* U+183E */
+      '?', /* U+183F */
+      '?', /* U+1840 */
+      '?', /* U+1841 */
+      '?', /* U+1842 */
+      '?', /* U+1843 */
+      '?', /* U+1844 */
+      '?', /* U+1845 */
+      '?', /* U+1846 */
+      '?', /* U+1847 */
+      '?', /* U+1848 */
+      '?', /* U+1849 */
+      '?', /* U+184A */
+      '?', /* U+184B */
+      '?', /* U+184C */
+      '?', /* U+184D */
+      '?', /* U+184E */
+      '?', /* U+184F */
+      '?', /* U+1850 */
+      '?', /* U+1851 */
+      '?', /* U+1852 */
+      '?', /* U+1853 */
+      '?', /* U+1854 */
+      '?', /* U+1855 */
+      '?', /* U+1856 */
+      '?', /* U+1857 */
+      '?', /* U+1858 */
+      '?', /* U+1859 */
+      '?', /* U+185A */
+      '?', /* U+185B */
+      '?', /* U+185C */
+      '?', /* U+185D */
+      '?', /* U+185E */
+      '?', /* U+185F */
+      '?', /* U+1860 */
+      '?', /* U+1861 */
+      '?', /* U+1862 */
+      '?', /* U+1863 */
+      '?', /* U+1864 */
+      '?', /* U+1865 */
+      '?', /* U+1866 */
+      '?', /* U+1867 */
+      '?', /* U+1868 */
+      '?', /* U+1869 */
+      '?', /* U+186A */
+      '?', /* U+186B */
+      '?', /* U+186C */
+      '?', /* U+186D */
+      '?', /* U+186E */
+      '?', /* U+186F */
+      '?', /* U+1870 */
+      '?', /* U+1871 */
+      '?', /* U+1872 */
+      '?', /* U+1873 */
+      '?', /* U+1874 */
+      '?', /* U+1875 */
+      '?', /* U+1876 */
+      '?', /* U+1877 */
+      '?', /* U+1878 */
+      '?', /* U+1879 */
+      '?', /* U+187A */
+      '?', /* U+187B */
+      '?', /* U+187C */
+      '?', /* U+187D */
+      '?', /* U+187E */
+      '?', /* U+187F */
+      '?', /* U+1880 */
+      '?', /* U+1881 */
+      '?', /* U+1882 */
+      '?', /* U+1883 */
+      '?', /* U+1884 */
+      '?', /* U+1885 */
+      '?', /* U+1886 */
+      '?', /* U+1887 */
+      '?', /* U+1888 */
+      '?', /* U+1889 */
+      '?', /* U+188A */
+      '?', /* U+188B */
+      '?', /* U+188C */
+      '?', /* U+188D */
+      '?', /* U+188E */
+      '?', /* U+188F */
+      '?', /* U+1890 */
+      '?', /* U+1891 */
+      '?', /* U+1892 */
+      '?', /* U+1893 */
+      '?', /* U+1894 */
+      '?', /* U+1895 */
+      '?', /* U+1896 */
+      '?', /* U+1897 */
+      '?', /* U+1898 */
+      '?', /* U+1899 */
+      '?', /* U+189A */
+      '?', /* U+189B */
+      '?', /* U+189C */
+      '?', /* U+189D */
+      '?', /* U+189E */
+      '?', /* U+189F */
+      '?', /* U+18A0 */
+      '?', /* U+18A1 */
+      '?', /* U+18A2 */
+      '?', /* U+18A3 */
+      '?', /* U+18A4 */
+      '?', /* U+18A5 */
+      '?', /* U+18A6 */
+      '?', /* U+18A7 */
+      '?', /* U+18A8 */
+      '?', /* U+18A9 */
+      '?', /* U+18AA */
+      '?', /* U+18AB */
+      '?', /* U+18AC */
+      '?', /* U+18AD */
+      '?', /* U+18AE */
+      '?', /* U+18AF */
+      '?', /* U+18B0 */
+      '?', /* U+18B1 */
+      '?', /* U+18B2 */
+      '?', /* U+18B3 */
+      '?', /* U+18B4 */
+      '?', /* U+18B5 */
+      '?', /* U+18B6 */
+      '?', /* U+18B7 */
+      '?', /* U+18B8 */
+      '?', /* U+18B9 */
+      '?', /* U+18BA */
+      '?', /* U+18BB */
+      '?', /* U+18BC */
+      '?', /* U+18BD */
+      '?', /* U+18BE */
+      '?', /* U+18BF */
+      '?', /* U+18C0 */
+      '?', /* U+18C1 */
+      '?', /* U+18C2 */
+      '?', /* U+18C3 */
+      '?', /* U+18C4 */
+      '?', /* U+18C5 */
+      '?', /* U+18C6 */
+      '?', /* U+18C7 */
+      '?', /* U+18C8 */
+      '?', /* U+18C9 */
+      '?', /* U+18CA */
+      '?', /* U+18CB */
+      '?', /* U+18CC */
+      '?', /* U+18CD */
+      '?', /* U+18CE */
+      '?', /* U+18CF */
+      '?', /* U+18D0 */
+      '?', /* U+18D1 */
+      '?', /* U+18D2 */
+      '?', /* U+18D3 */
+      '?', /* U+18D4 */
+      '?', /* U+18D5 */
+      '?', /* U+18D6 */
+      '?', /* U+18D7 */
+      '?', /* U+18D8 */
+      '?', /* U+18D9 */
+      '?', /* U+18DA */
+      '?', /* U+18DB */
+      '?', /* U+18DC */
+      '?', /* U+18DD */
+      '?', /* U+18DE */
+      '?', /* U+18DF */
+      '?', /* U+18E0 */
+      '?', /* U+18E1 */
+      '?', /* U+18E2 */
+      '?', /* U+18E3 */
+      '?', /* U+18E4 */
+      '?', /* U+18E5 */
+      '?', /* U+18E6 */
+      '?', /* U+18E7 */
+      '?', /* U+18E8 */
+      '?', /* U+18E9 */
+      '?', /* U+18EA */
+      '?', /* U+18EB */
+      '?', /* U+18EC */
+      '?', /* U+18ED */
+      '?', /* U+18EE */
+      '?', /* U+18EF */
+      '?', /* U+18F0 */
+      '?', /* U+18F1 */
+      '?', /* U+18F2 */
+      '?', /* U+18F3 */
+      '?', /* U+18F4 */
+      '?', /* U+18F5 */
+      '?', /* U+18F6 */
+      '?', /* U+18F7 */
+      '?', /* U+18F8 */
+      '?', /* U+18F9 */
+      '?', /* U+18FA */
+      '?', /* U+18FB */
+      '?', /* U+18FC */
+      '?', /* U+18FD */
+      '?', /* U+18FE */
+      '?', /* U+18FF */
+      '?', /* U+1900 */
+      '?', /* U+1901 */
+      '?', /* U+1902 */
+      '?', /* U+1903 */
+      '?', /* U+1904 */
+      '?', /* U+1905 */
+      '?', /* U+1906 */
+      '?', /* U+1907 */
+      '?', /* U+1908 */
+      '?', /* U+1909 */
+      '?', /* U+190A */
+      '?', /* U+190B */
+      '?', /* U+190C */
+      '?', /* U+190D */
+      '?', /* U+190E */
+      '?', /* U+190F */
+      '?', /* U+1910 */
+      '?', /* U+1911 */
+      '?', /* U+1912 */
+      '?', /* U+1913 */
+      '?', /* U+1914 */
+      '?', /* U+1915 */
+      '?', /* U+1916 */
+      '?', /* U+1917 */
+      '?', /* U+1918 */
+      '?', /* U+1919 */
+      '?', /* U+191A */
+      '?', /* U+191B */
+      '?', /* U+191C */
+      '?', /* U+191D */
+      '?', /* U+191E */
+      '?', /* U+191F */
+      '?', /* U+1920 */
+      '?', /* U+1921 */
+      '?', /* U+1922 */
+      '?', /* U+1923 */
+      '?', /* U+1924 */
+      '?', /* U+1925 */
+      '?', /* U+1926 */
+      '?', /* U+1927 */
+      '?', /* U+1928 */
+      '?', /* U+1929 */
+      '?', /* U+192A */
+      '?', /* U+192B */
+      '?', /* U+192C */
+      '?', /* U+192D */
+      '?', /* U+192E */
+      '?', /* U+192F */
+      '?', /* U+1930 */
+      '?', /* U+1931 */
+      '?', /* U+1932 */
+      '?', /* U+1933 */
+      '?', /* U+1934 */
+      '?', /* U+1935 */
+      '?', /* U+1936 */
+      '?', /* U+1937 */
+      '?', /* U+1938 */
+      '?', /* U+1939 */
+      '?', /* U+193A */
+      '?', /* U+193B */
+      '?', /* U+193C */
+      '?', /* U+193D */
+      '?', /* U+193E */
+      '?', /* U+193F */
+      '?', /* U+1940 */
+      '?', /* U+1941 */
+      '?', /* U+1942 */
+      '?', /* U+1943 */
+      '?', /* U+1944 */
+      '?', /* U+1945 */
+      '?', /* U+1946 */
+      '?', /* U+1947 */
+      '?', /* U+1948 */
+      '?', /* U+1949 */
+      '?', /* U+194A */
+      '?', /* U+194B */
+      '?', /* U+194C */
+      '?', /* U+194D */
+      '?', /* U+194E */
+      '?', /* U+194F */
+      '?', /* U+1950 */
+      '?', /* U+1951 */
+      '?', /* U+1952 */
+      '?', /* U+1953 */
+      '?', /* U+1954 */
+      '?', /* U+1955 */
+      '?', /* U+1956 */
+      '?', /* U+1957 */
+      '?', /* U+1958 */
+      '?', /* U+1959 */
+      '?', /* U+195A */
+      '?', /* U+195B */
+      '?', /* U+195C */
+      '?', /* U+195D */
+      '?', /* U+195E */
+      '?', /* U+195F */
+      '?', /* U+1960 */
+      '?', /* U+1961 */
+      '?', /* U+1962 */
+      '?', /* U+1963 */
+      '?', /* U+1964 */
+      '?', /* U+1965 */
+      '?', /* U+1966 */
+      '?', /* U+1967 */
+      '?', /* U+1968 */
+      '?', /* U+1969 */
+      '?', /* U+196A */
+      '?', /* U+196B */
+      '?', /* U+196C */
+      '?', /* U+196D */
+      '?', /* U+196E */
+      '?', /* U+196F */
+      '?', /* U+1970 */
+      '?', /* U+1971 */
+      '?', /* U+1972 */
+      '?', /* U+1973 */
+      '?', /* U+1974 */
+      '?', /* U+1975 */
+      '?', /* U+1976 */
+      '?', /* U+1977 */
+      '?', /* U+1978 */
+      '?', /* U+1979 */
+      '?', /* U+197A */
+      '?', /* U+197B */
+      '?', /* U+197C */
+      '?', /* U+197D */
+      '?', /* U+197E */
+      '?', /* U+197F */
+      '?', /* U+1980 */
+      '?', /* U+1981 */
+      '?', /* U+1982 */
+      '?', /* U+1983 */
+      '?', /* U+1984 */
+      '?', /* U+1985 */
+      '?', /* U+1986 */
+      '?', /* U+1987 */
+      '?', /* U+1988 */
+      '?', /* U+1989 */
+      '?', /* U+198A */
+      '?', /* U+198B */
+      '?', /* U+198C */
+      '?', /* U+198D */
+      '?', /* U+198E */
+      '?', /* U+198F */
+      '?', /* U+1990 */
+      '?', /* U+1991 */
+      '?', /* U+1992 */
+      '?', /* U+1993 */
+      '?', /* U+1994 */
+      '?', /* U+1995 */
+      '?', /* U+1996 */
+      '?', /* U+1997 */
+      '?', /* U+1998 */
+      '?', /* U+1999 */
+      '?', /* U+199A */
+      '?', /* U+199B */
+      '?', /* U+199C */
+      '?', /* U+199D */
+      '?', /* U+199E */
+      '?', /* U+199F */
+      '?', /* U+19A0 */
+      '?', /* U+19A1 */
+      '?', /* U+19A2 */
+      '?', /* U+19A3 */
+      '?', /* U+19A4 */
+      '?', /* U+19A5 */
+      '?', /* U+19A6 */
+      '?', /* U+19A7 */
+      '?', /* U+19A8 */
+      '?', /* U+19A9 */
+      '?', /* U+19AA */
+      '?', /* U+19AB */
+      '?', /* U+19AC */
+      '?', /* U+19AD */
+      '?', /* U+19AE */
+      '?', /* U+19AF */
+      '?', /* U+19B0 */
+      '?', /* U+19B1 */
+      '?', /* U+19B2 */
+      '?', /* U+19B3 */
+      '?', /* U+19B4 */
+      '?', /* U+19B5 */
+      '?', /* U+19B6 */
+      '?', /* U+19B7 */
+      '?', /* U+19B8 */
+      '?', /* U+19B9 */
+      '?', /* U+19BA */
+      '?', /* U+19BB */
+      '?', /* U+19BC */
+      '?', /* U+19BD */
+      '?', /* U+19BE */
+      '?', /* U+19BF */
+      '?', /* U+19C0 */
+      '?', /* U+19C1 */
+      '?', /* U+19C2 */
+      '?', /* U+19C3 */
+      '?', /* U+19C4 */
+      '?', /* U+19C5 */
+      '?', /* U+19C6 */
+      '?', /* U+19C7 */
+      '?', /* U+19C8 */
+      '?', /* U+19C9 */
+      '?', /* U+19CA */
+      '?', /* U+19CB */
+      '?', /* U+19CC */
+      '?', /* U+19CD */
+      '?', /* U+19CE */
+      '?', /* U+19CF */
+      '?', /* U+19D0 */
+      '?', /* U+19D1 */
+      '?', /* U+19D2 */
+      '?', /* U+19D3 */
+      '?', /* U+19D4 */
+      '?', /* U+19D5 */
+      '?', /* U+19D6 */
+      '?', /* U+19D7 */
+      '?', /* U+19D8 */
+      '?', /* U+19D9 */
+      '?', /* U+19DA */
+      '?', /* U+19DB */
+      '?', /* U+19DC */
+      '?', /* U+19DD */
+      '?', /* U+19DE */
+      '?', /* U+19DF */
+      '?', /* U+19E0 */
+      '?', /* U+19E1 */
+      '?', /* U+19E2 */
+      '?', /* U+19E3 */
+      '?', /* U+19E4 */
+      '?', /* U+19E5 */
+      '?', /* U+19E6 */
+      '?', /* U+19E7 */
+      '?', /* U+19E8 */
+      '?', /* U+19E9 */
+      '?', /* U+19EA */
+      '?', /* U+19EB */
+      '?', /* U+19EC */
+      '?', /* U+19ED */
+      '?', /* U+19EE */
+      '?', /* U+19EF */
+      '?', /* U+19F0 */
+      '?', /* U+19F1 */
+      '?', /* U+19F2 */
+      '?', /* U+19F3 */
+      '?', /* U+19F4 */
+      '?', /* U+19F5 */
+      '?', /* U+19F6 */
+      '?', /* U+19F7 */
+      '?', /* U+19F8 */
+      '?', /* U+19F9 */
+      '?', /* U+19FA */
+      '?', /* U+19FB */
+      '?', /* U+19FC */
+      '?', /* U+19FD */
+      '?', /* U+19FE */
+      '?', /* U+19FF */
+      '?', /* U+1A00 */
+      '?', /* U+1A01 */
+      '?', /* U+1A02 */
+      '?', /* U+1A03 */
+      '?', /* U+1A04 */
+      '?', /* U+1A05 */
+      '?', /* U+1A06 */
+      '?', /* U+1A07 */
+      '?', /* U+1A08 */
+      '?', /* U+1A09 */
+      '?', /* U+1A0A */
+      '?', /* U+1A0B */
+      '?', /* U+1A0C */
+      '?', /* U+1A0D */
+      '?', /* U+1A0E */
+      '?', /* U+1A0F */
+      '?', /* U+1A10 */
+      '?', /* U+1A11 */
+      '?', /* U+1A12 */
+      '?', /* U+1A13 */
+      '?', /* U+1A14 */
+      '?', /* U+1A15 */
+      '?', /* U+1A16 */
+      '?', /* U+1A17 */
+      '?', /* U+1A18 */
+      '?', /* U+1A19 */
+      '?', /* U+1A1A */
+      '?', /* U+1A1B */
+      '?', /* U+1A1C */
+      '?', /* U+1A1D */
+      '?', /* U+1A1E */
+      '?', /* U+1A1F */
+      '?', /* U+1A20 */
+      '?', /* U+1A21 */
+      '?', /* U+1A22 */
+      '?', /* U+1A23 */
+      '?', /* U+1A24 */
+      '?', /* U+1A25 */
+      '?', /* U+1A26 */
+      '?', /* U+1A27 */
+      '?', /* U+1A28 */
+      '?', /* U+1A29 */
+      '?', /* U+1A2A */
+      '?', /* U+1A2B */
+      '?', /* U+1A2C */
+      '?', /* U+1A2D */
+      '?', /* U+1A2E */
+      '?', /* U+1A2F */
+      '?', /* U+1A30 */
+      '?', /* U+1A31 */
+      '?', /* U+1A32 */
+      '?', /* U+1A33 */
+      '?', /* U+1A34 */
+      '?', /* U+1A35 */
+      '?', /* U+1A36 */
+      '?', /* U+1A37 */
+      '?', /* U+1A38 */
+      '?', /* U+1A39 */
+      '?', /* U+1A3A */
+      '?', /* U+1A3B */
+      '?', /* U+1A3C */
+      '?', /* U+1A3D */
+      '?', /* U+1A3E */
+      '?', /* U+1A3F */
+      '?', /* U+1A40 */
+      '?', /* U+1A41 */
+      '?', /* U+1A42 */
+      '?', /* U+1A43 */
+      '?', /* U+1A44 */
+      '?', /* U+1A45 */
+      '?', /* U+1A46 */
+      '?', /* U+1A47 */
+      '?', /* U+1A48 */
+      '?', /* U+1A49 */
+      '?', /* U+1A4A */
+      '?', /* U+1A4B */
+      '?', /* U+1A4C */
+      '?', /* U+1A4D */
+      '?', /* U+1A4E */
+      '?', /* U+1A4F */
+      '?', /* U+1A50 */
+      '?', /* U+1A51 */
+      '?', /* U+1A52 */
+      '?', /* U+1A53 */
+      '?', /* U+1A54 */
+      '?', /* U+1A55 */
+      '?', /* U+1A56 */
+      '?', /* U+1A57 */
+      '?', /* U+1A58 */
+      '?', /* U+1A59 */
+      '?', /* U+1A5A */
+      '?', /* U+1A5B */
+      '?', /* U+1A5C */
+      '?', /* U+1A5D */
+      '?', /* U+1A5E */
+      '?', /* U+1A5F */
+      '?', /* U+1A60 */
+      '?', /* U+1A61 */
+      '?', /* U+1A62 */
+      '?', /* U+1A63 */
+      '?', /* U+1A64 */
+      '?', /* U+1A65 */
+      '?', /* U+1A66 */
+      '?', /* U+1A67 */
+      '?', /* U+1A68 */
+      '?', /* U+1A69 */
+      '?', /* U+1A6A */
+      '?', /* U+1A6B */
+      '?', /* U+1A6C */
+      '?', /* U+1A6D */
+      '?', /* U+1A6E */
+      '?', /* U+1A6F */
+      '?', /* U+1A70 */
+      '?', /* U+1A71 */
+      '?', /* U+1A72 */
+      '?', /* U+1A73 */
+      '?', /* U+1A74 */
+      '?', /* U+1A75 */
+      '?', /* U+1A76 */
+      '?', /* U+1A77 */
+      '?', /* U+1A78 */
+      '?', /* U+1A79 */
+      '?', /* U+1A7A */
+      '?', /* U+1A7B */
+      '?', /* U+1A7C */
+      '?', /* U+1A7D */
+      '?', /* U+1A7E */
+      '?', /* U+1A7F */
+      '?', /* U+1A80 */
+      '?', /* U+1A81 */
+      '?', /* U+1A82 */
+      '?', /* U+1A83 */
+      '?', /* U+1A84 */
+      '?', /* U+1A85 */
+      '?', /* U+1A86 */
+      '?', /* U+1A87 */
+      '?', /* U+1A88 */
+      '?', /* U+1A89 */
+      '?', /* U+1A8A */
+      '?', /* U+1A8B */
+      '?', /* U+1A8C */
+      '?', /* U+1A8D */
+      '?', /* U+1A8E */
+      '?', /* U+1A8F */
+      '?', /* U+1A90 */
+      '?', /* U+1A91 */
+      '?', /* U+1A92 */
+      '?', /* U+1A93 */
+      '?', /* U+1A94 */
+      '?', /* U+1A95 */
+      '?', /* U+1A96 */
+      '?', /* U+1A97 */
+      '?', /* U+1A98 */
+      '?', /* U+1A99 */
+      '?', /* U+1A9A */
+      '?', /* U+1A9B */
+      '?', /* U+1A9C */
+      '?', /* U+1A9D */
+      '?', /* U+1A9E */
+      '?', /* U+1A9F */
+      '?', /* U+1AA0 */
+      '?', /* U+1AA1 */
+      '?', /* U+1AA2 */
+      '?', /* U+1AA3 */
+      '?', /* U+1AA4 */
+      '?', /* U+1AA5 */
+      '?', /* U+1AA6 */
+      '?', /* U+1AA7 */
+      '?', /* U+1AA8 */
+      '?', /* U+1AA9 */
+      '?', /* U+1AAA */
+      '?', /* U+1AAB */
+      '?', /* U+1AAC */
+      '?', /* U+1AAD */
+      '?', /* U+1AAE */
+      '?', /* U+1AAF */
+      '?', /* U+1AB0 */
+      '?', /* U+1AB1 */
+      '?', /* U+1AB2 */
+      '?', /* U+1AB3 */
+      '?', /* U+1AB4 */
+      '?', /* U+1AB5 */
+      '?', /* U+1AB6 */
+      '?', /* U+1AB7 */
+      '?', /* U+1AB8 */
+      '?', /* U+1AB9 */
+      '?', /* U+1ABA */
+      '?', /* U+1ABB */
+      '?', /* U+1ABC */
+      '?', /* U+1ABD */
+      '?', /* U+1ABE */
+      '?', /* U+1ABF */
+      '?', /* U+1AC0 */
+      '?', /* U+1AC1 */
+      '?', /* U+1AC2 */
+      '?', /* U+1AC3 */
+      '?', /* U+1AC4 */
+      '?', /* U+1AC5 */
+      '?', /* U+1AC6 */
+      '?', /* U+1AC7 */
+      '?', /* U+1AC8 */
+      '?', /* U+1AC9 */
+      '?', /* U+1ACA */
+      '?', /* U+1ACB */
+      '?', /* U+1ACC */
+      '?', /* U+1ACD */
+      '?', /* U+1ACE */
+      '?', /* U+1ACF */
+      '?', /* U+1AD0 */
+      '?', /* U+1AD1 */
+      '?', /* U+1AD2 */
+      '?', /* U+1AD3 */
+      '?', /* U+1AD4 */
+      '?', /* U+1AD5 */
+      '?', /* U+1AD6 */
+      '?', /* U+1AD7 */
+      '?', /* U+1AD8 */
+      '?', /* U+1AD9 */
+      '?', /* U+1ADA */
+      '?', /* U+1ADB */
+      '?', /* U+1ADC */
+      '?', /* U+1ADD */
+      '?', /* U+1ADE */
+      '?', /* U+1ADF */
+      '?', /* U+1AE0 */
+      '?', /* U+1AE1 */
+      '?', /* U+1AE2 */
+      '?', /* U+1AE3 */
+      '?', /* U+1AE4 */
+      '?', /* U+1AE5 */
+      '?', /* U+1AE6 */
+      '?', /* U+1AE7 */
+      '?', /* U+1AE8 */
+      '?', /* U+1AE9 */
+      '?', /* U+1AEA */
+      '?', /* U+1AEB */
+      '?', /* U+1AEC */
+      '?', /* U+1AED */
+      '?', /* U+1AEE */
+      '?', /* U+1AEF */
+      '?', /* U+1AF0 */
+      '?', /* U+1AF1 */
+      '?', /* U+1AF2 */
+      '?', /* U+1AF3 */
+      '?', /* U+1AF4 */
+      '?', /* U+1AF5 */
+      '?', /* U+1AF6 */
+      '?', /* U+1AF7 */
+      '?', /* U+1AF8 */
+      '?', /* U+1AF9 */
+      '?', /* U+1AFA */
+      '?', /* U+1AFB */
+      '?', /* U+1AFC */
+      '?', /* U+1AFD */
+      '?', /* U+1AFE */
+      '?', /* U+1AFF */
+      '?', /* U+1B00 */
+      '?', /* U+1B01 */
+      '?', /* U+1B02 */
+      '?', /* U+1B03 */
+      '?', /* U+1B04 */
+      '?', /* U+1B05 */
+      '?', /* U+1B06 */
+      '?', /* U+1B07 */
+      '?', /* U+1B08 */
+      '?', /* U+1B09 */
+      '?', /* U+1B0A */
+      '?', /* U+1B0B */
+      '?', /* U+1B0C */
+      '?', /* U+1B0D */
+      '?', /* U+1B0E */
+      '?', /* U+1B0F */
+      '?', /* U+1B10 */
+      '?', /* U+1B11 */
+      '?', /* U+1B12 */
+      '?', /* U+1B13 */
+      '?', /* U+1B14 */
+      '?', /* U+1B15 */
+      '?', /* U+1B16 */
+      '?', /* U+1B17 */
+      '?', /* U+1B18 */
+      '?', /* U+1B19 */
+      '?', /* U+1B1A */
+      '?', /* U+1B1B */
+      '?', /* U+1B1C */
+      '?', /* U+1B1D */
+      '?', /* U+1B1E */
+      '?', /* U+1B1F */
+      '?', /* U+1B20 */
+      '?', /* U+1B21 */
+      '?', /* U+1B22 */
+      '?', /* U+1B23 */
+      '?', /* U+1B24 */
+      '?', /* U+1B25 */
+      '?', /* U+1B26 */
+      '?', /* U+1B27 */
+      '?', /* U+1B28 */
+      '?', /* U+1B29 */
+      '?', /* U+1B2A */
+      '?', /* U+1B2B */
+      '?', /* U+1B2C */
+      '?', /* U+1B2D */
+      '?', /* U+1B2E */
+      '?', /* U+1B2F */
+      '?', /* U+1B30 */
+      '?', /* U+1B31 */
+      '?', /* U+1B32 */
+      '?', /* U+1B33 */
+      '?', /* U+1B34 */
+      '?', /* U+1B35 */
+      '?', /* U+1B36 */
+      '?', /* U+1B37 */
+      '?', /* U+1B38 */
+      '?', /* U+1B39 */
+      '?', /* U+1B3A */
+      '?', /* U+1B3B */
+      '?', /* U+1B3C */
+      '?', /* U+1B3D */
+      '?', /* U+1B3E */
+      '?', /* U+1B3F */
+      '?', /* U+1B40 */
+      '?', /* U+1B41 */
+      '?', /* U+1B42 */
+      '?', /* U+1B43 */
+      '?', /* U+1B44 */
+      '?', /* U+1B45 */
+      '?', /* U+1B46 */
+      '?', /* U+1B47 */
+      '?', /* U+1B48 */
+      '?', /* U+1B49 */
+      '?', /* U+1B4A */
+      '?', /* U+1B4B */
+      '?', /* U+1B4C */
+      '?', /* U+1B4D */
+      '?', /* U+1B4E */
+      '?', /* U+1B4F */
+      '?', /* U+1B50 */
+      '?', /* U+1B51 */
+      '?', /* U+1B52 */
+      '?', /* U+1B53 */
+      '?', /* U+1B54 */
+      '?', /* U+1B55 */
+      '?', /* U+1B56 */
+      '?', /* U+1B57 */
+      '?', /* U+1B58 */
+      '?', /* U+1B59 */
+      '?', /* U+1B5A */
+      '?', /* U+1B5B */
+      '?', /* U+1B5C */
+      '?', /* U+1B5D */
+      '?', /* U+1B5E */
+      '?', /* U+1B5F */
+      '?', /* U+1B60 */
+      '?', /* U+1B61 */
+      '?', /* U+1B62 */
+      '?', /* U+1B63 */
+      '?', /* U+1B64 */
+      '?', /* U+1B65 */
+      '?', /* U+1B66 */
+      '?', /* U+1B67 */
+      '?', /* U+1B68 */
+      '?', /* U+1B69 */
+      '?', /* U+1B6A */
+      '?', /* U+1B6B */
+      '?', /* U+1B6C */
+      '?', /* U+1B6D */
+      '?', /* U+1B6E */
+      '?', /* U+1B6F */
+      '?', /* U+1B70 */
+      '?', /* U+1B71 */
+      '?', /* U+1B72 */
+      '?', /* U+1B73 */
+      '?', /* U+1B74 */
+      '?', /* U+1B75 */
+      '?', /* U+1B76 */
+      '?', /* U+1B77 */
+      '?', /* U+1B78 */
+      '?', /* U+1B79 */
+      '?', /* U+1B7A */
+      '?', /* U+1B7B */
+      '?', /* U+1B7C */
+      '?', /* U+1B7D */
+      '?', /* U+1B7E */
+      '?', /* U+1B7F */
+      '?', /* U+1B80 */
+      '?', /* U+1B81 */
+      '?', /* U+1B82 */
+      '?', /* U+1B83 */
+      '?', /* U+1B84 */
+      '?', /* U+1B85 */
+      '?', /* U+1B86 */
+      '?', /* U+1B87 */
+      '?', /* U+1B88 */
+      '?', /* U+1B89 */
+      '?', /* U+1B8A */
+      '?', /* U+1B8B */
+      '?', /* U+1B8C */
+      '?', /* U+1B8D */
+      '?', /* U+1B8E */
+      '?', /* U+1B8F */
+      '?', /* U+1B90 */
+      '?', /* U+1B91 */
+      '?', /* U+1B92 */
+      '?', /* U+1B93 */
+      '?', /* U+1B94 */
+      '?', /* U+1B95 */
+      '?', /* U+1B96 */
+      '?', /* U+1B97 */
+      '?', /* U+1B98 */
+      '?', /* U+1B99 */
+      '?', /* U+1B9A */
+      '?', /* U+1B9B */
+      '?', /* U+1B9C */
+      '?', /* U+1B9D */
+      '?', /* U+1B9E */
+      '?', /* U+1B9F */
+      '?', /* U+1BA0 */
+      '?', /* U+1BA1 */
+      '?', /* U+1BA2 */
+      '?', /* U+1BA3 */
+      '?', /* U+1BA4 */
+      '?', /* U+1BA5 */
+      '?', /* U+1BA6 */
+      '?', /* U+1BA7 */
+      '?', /* U+1BA8 */
+      '?', /* U+1BA9 */
+      '?', /* U+1BAA */
+      '?', /* U+1BAB */
+      '?', /* U+1BAC */
+      '?', /* U+1BAD */
+      '?', /* U+1BAE */
+      '?', /* U+1BAF */
+      '?', /* U+1BB0 */
+      '?', /* U+1BB1 */
+      '?', /* U+1BB2 */
+      '?', /* U+1BB3 */
+      '?', /* U+1BB4 */
+      '?', /* U+1BB5 */
+      '?', /* U+1BB6 */
+      '?', /* U+1BB7 */
+      '?', /* U+1BB8 */
+      '?', /* U+1BB9 */
+      '?', /* U+1BBA */
+      '?', /* U+1BBB */
+      '?', /* U+1BBC */
+      '?', /* U+1BBD */
+      '?', /* U+1BBE */
+      '?', /* U+1BBF */
+      '?', /* U+1BC0 */
+      '?', /* U+1BC1 */
+      '?', /* U+1BC2 */
+      '?', /* U+1BC3 */
+      '?', /* U+1BC4 */
+      '?', /* U+1BC5 */
+      '?', /* U+1BC6 */
+      '?', /* U+1BC7 */
+      '?', /* U+1BC8 */
+      '?', /* U+1BC9 */
+      '?', /* U+1BCA */
+      '?', /* U+1BCB */
+      '?', /* U+1BCC */
+      '?', /* U+1BCD */
+      '?', /* U+1BCE */
+      '?', /* U+1BCF */
+      '?', /* U+1BD0 */
+      '?', /* U+1BD1 */
+      '?', /* U+1BD2 */
+      '?', /* U+1BD3 */
+      '?', /* U+1BD4 */
+      '?', /* U+1BD5 */
+      '?', /* U+1BD6 */
+      '?', /* U+1BD7 */
+      '?', /* U+1BD8 */
+      '?', /* U+1BD9 */
+      '?', /* U+1BDA */
+      '?', /* U+1BDB */
+      '?', /* U+1BDC */
+      '?', /* U+1BDD */
+      '?', /* U+1BDE */
+      '?', /* U+1BDF */
+      '?', /* U+1BE0 */
+      '?', /* U+1BE1 */
+      '?', /* U+1BE2 */
+      '?', /* U+1BE3 */
+      '?', /* U+1BE4 */
+      '?', /* U+1BE5 */
+      '?', /* U+1BE6 */
+      '?', /* U+1BE7 */
+      '?', /* U+1BE8 */
+      '?', /* U+1BE9 */
+      '?', /* U+1BEA */
+      '?', /* U+1BEB */
+      '?', /* U+1BEC */
+      '?', /* U+1BED */
+      '?', /* U+1BEE */
+      '?', /* U+1BEF */
+      '?', /* U+1BF0 */
+      '?', /* U+1BF1 */
+      '?', /* U+1BF2 */
+      '?', /* U+1BF3 */
+      '?', /* U+1BF4 */
+      '?', /* U+1BF5 */
+      '?', /* U+1BF6 */
+      '?', /* U+1BF7 */
+      '?', /* U+1BF8 */
+      '?', /* U+1BF9 */
+      '?', /* U+1BFA */
+      '?', /* U+1BFB */
+      '?', /* U+1BFC */
+      '?', /* U+1BFD */
+      '?', /* U+1BFE */
+      '?', /* U+1BFF */
+      '?', /* U+1C00 */
+      '?', /* U+1C01 */
+      '?', /* U+1C02 */
+      '?', /* U+1C03 */
+      '?', /* U+1C04 */
+      '?', /* U+1C05 */
+      '?', /* U+1C06 */
+      '?', /* U+1C07 */
+      '?', /* U+1C08 */
+      '?', /* U+1C09 */
+      '?', /* U+1C0A */
+      '?', /* U+1C0B */
+      '?', /* U+1C0C */
+      '?', /* U+1C0D */
+      '?', /* U+1C0E */
+      '?', /* U+1C0F */
+      '?', /* U+1C10 */
+      '?', /* U+1C11 */
+      '?', /* U+1C12 */
+      '?', /* U+1C13 */
+      '?', /* U+1C14 */
+      '?', /* U+1C15 */
+      '?', /* U+1C16 */
+      '?', /* U+1C17 */
+      '?', /* U+1C18 */
+      '?', /* U+1C19 */
+      '?', /* U+1C1A */
+      '?', /* U+1C1B */
+      '?', /* U+1C1C */
+      '?', /* U+1C1D */
+      '?', /* U+1C1E */
+      '?', /* U+1C1F */
+      '?', /* U+1C20 */
+      '?', /* U+1C21 */
+      '?', /* U+1C22 */
+      '?', /* U+1C23 */
+      '?', /* U+1C24 */
+      '?', /* U+1C25 */
+      '?', /* U+1C26 */
+      '?', /* U+1C27 */
+      '?', /* U+1C28 */
+      '?', /* U+1C29 */
+      '?', /* U+1C2A */
+      '?', /* U+1C2B */
+      '?', /* U+1C2C */
+      '?', /* U+1C2D */
+      '?', /* U+1C2E */
+      '?', /* U+1C2F */
+      '?', /* U+1C30 */
+      '?', /* U+1C31 */
+      '?', /* U+1C32 */
+      '?', /* U+1C33 */
+      '?', /* U+1C34 */
+      '?', /* U+1C35 */
+      '?', /* U+1C36 */
+      '?', /* U+1C37 */
+      '?', /* U+1C38 */
+      '?', /* U+1C39 */
+      '?', /* U+1C3A */
+      '?', /* U+1C3B */
+      '?', /* U+1C3C */
+      '?', /* U+1C3D */
+      '?', /* U+1C3E */
+      '?', /* U+1C3F */
+      '?', /* U+1C40 */
+      '?', /* U+1C41 */
+      '?', /* U+1C42 */
+      '?', /* U+1C43 */
+      '?', /* U+1C44 */
+      '?', /* U+1C45 */
+      '?', /* U+1C46 */
+      '?', /* U+1C47 */
+      '?', /* U+1C48 */
+      '?', /* U+1C49 */
+      '?', /* U+1C4A */
+      '?', /* U+1C4B */
+      '?', /* U+1C4C */
+      '?', /* U+1C4D */
+      '?', /* U+1C4E */
+      '?', /* U+1C4F */
+      '?', /* U+1C50 */
+      '?', /* U+1C51 */
+      '?', /* U+1C52 */
+      '?', /* U+1C53 */
+      '?', /* U+1C54 */
+      '?', /* U+1C55 */
+      '?', /* U+1C56 */
+      '?', /* U+1C57 */
+      '?', /* U+1C58 */
+      '?', /* U+1C59 */
+      '?', /* U+1C5A */
+      '?', /* U+1C5B */
+      '?', /* U+1C5C */
+      '?', /* U+1C5D */
+      '?', /* U+1C5E */
+      '?', /* U+1C5F */
+      '?', /* U+1C60 */
+      '?', /* U+1C61 */
+      '?', /* U+1C62 */
+      '?', /* U+1C63 */
+      '?', /* U+1C64 */
+      '?', /* U+1C65 */
+      '?', /* U+1C66 */
+      '?', /* U+1C67 */
+      '?', /* U+1C68 */
+      '?', /* U+1C69 */
+      '?', /* U+1C6A */
+      '?', /* U+1C6B */
+      '?', /* U+1C6C */
+      '?', /* U+1C6D */
+      '?', /* U+1C6E */
+      '?', /* U+1C6F */
+      '?', /* U+1C70 */
+      '?', /* U+1C71 */
+      '?', /* U+1C72 */
+      '?', /* U+1C73 */
+      '?', /* U+1C74 */
+      '?', /* U+1C75 */
+      '?', /* U+1C76 */
+      '?', /* U+1C77 */
+      '?', /* U+1C78 */
+      '?', /* U+1C79 */
+      '?', /* U+1C7A */
+      '?', /* U+1C7B */
+      '?', /* U+1C7C */
+      '?', /* U+1C7D */
+      '?', /* U+1C7E */
+      '?', /* U+1C7F */
+      '?', /* U+1C80 */
+      '?', /* U+1C81 */
+      '?', /* U+1C82 */
+      '?', /* U+1C83 */
+      '?', /* U+1C84 */
+      '?', /* U+1C85 */
+      '?', /* U+1C86 */
+      '?', /* U+1C87 */
+      '?', /* U+1C88 */
+      '?', /* U+1C89 */
+      '?', /* U+1C8A */
+      '?', /* U+1C8B */
+      '?', /* U+1C8C */
+      '?', /* U+1C8D */
+      '?', /* U+1C8E */
+      '?', /* U+1C8F */
+      '?', /* U+1C90 */
+      '?', /* U+1C91 */
+      '?', /* U+1C92 */
+      '?', /* U+1C93 */
+      '?', /* U+1C94 */
+      '?', /* U+1C95 */
+      '?', /* U+1C96 */
+      '?', /* U+1C97 */
+      '?', /* U+1C98 */
+      '?', /* U+1C99 */
+      '?', /* U+1C9A */
+      '?', /* U+1C9B */
+      '?', /* U+1C9C */
+      '?', /* U+1C9D */
+      '?', /* U+1C9E */
+      '?', /* U+1C9F */
+      '?', /* U+1CA0 */
+      '?', /* U+1CA1 */
+      '?', /* U+1CA2 */
+      '?', /* U+1CA3 */
+      '?', /* U+1CA4 */
+      '?', /* U+1CA5 */
+      '?', /* U+1CA6 */
+      '?', /* U+1CA7 */
+      '?', /* U+1CA8 */
+      '?', /* U+1CA9 */
+      '?', /* U+1CAA */
+      '?', /* U+1CAB */
+      '?', /* U+1CAC */
+      '?', /* U+1CAD */
+      '?', /* U+1CAE */
+      '?', /* U+1CAF */
+      '?', /* U+1CB0 */
+      '?', /* U+1CB1 */
+      '?', /* U+1CB2 */
+      '?', /* U+1CB3 */
+      '?', /* U+1CB4 */
+      '?', /* U+1CB5 */
+      '?', /* U+1CB6 */
+      '?', /* U+1CB7 */
+      '?', /* U+1CB8 */
+      '?', /* U+1CB9 */
+      '?', /* U+1CBA */
+      '?', /* U+1CBB */
+      '?', /* U+1CBC */
+      '?', /* U+1CBD */
+      '?', /* U+1CBE */
+      '?', /* U+1CBF */
+      '?', /* U+1CC0 */
+      '?', /* U+1CC1 */
+      '?', /* U+1CC2 */
+      '?', /* U+1CC3 */
+      '?', /* U+1CC4 */
+      '?', /* U+1CC5 */
+      '?', /* U+1CC6 */
+      '?', /* U+1CC7 */
+      '?', /* U+1CC8 */
+      '?', /* U+1CC9 */
+      '?', /* U+1CCA */
+      '?', /* U+1CCB */
+      '?', /* U+1CCC */
+      '?', /* U+1CCD */
+      '?', /* U+1CCE */
+      '?', /* U+1CCF */
+      '?', /* U+1CD0 */
+      '?', /* U+1CD1 */
+      '?', /* U+1CD2 */
+      '?', /* U+1CD3 */
+      '?', /* U+1CD4 */
+      '?', /* U+1CD5 */
+      '?', /* U+1CD6 */
+      '?', /* U+1CD7 */
+      '?', /* U+1CD8 */
+      '?', /* U+1CD9 */
+      '?', /* U+1CDA */
+      '?', /* U+1CDB */
+      '?', /* U+1CDC */
+      '?', /* U+1CDD */
+      '?', /* U+1CDE */
+      '?', /* U+1CDF */
+      '?', /* U+1CE0 */
+      '?', /* U+1CE1 */
+      '?', /* U+1CE2 */
+      '?', /* U+1CE3 */
+      '?', /* U+1CE4 */
+      '?', /* U+1CE5 */
+      '?', /* U+1CE6 */
+      '?', /* U+1CE7 */
+      '?', /* U+1CE8 */
+      '?', /* U+1CE9 */
+      '?', /* U+1CEA */
+      '?', /* U+1CEB */
+      '?', /* U+1CEC */
+      '?', /* U+1CED */
+      '?', /* U+1CEE */
+      '?', /* U+1CEF */
+      '?', /* U+1CF0 */
+      '?', /* U+1CF1 */
+      '?', /* U+1CF2 */
+      '?', /* U+1CF3 */
+      '?', /* U+1CF4 */
+      '?', /* U+1CF5 */
+      '?', /* U+1CF6 */
+      '?', /* U+1CF7 */
+      '?', /* U+1CF8 */
+      '?', /* U+1CF9 */
+      '?', /* U+1CFA */
+      '?', /* U+1CFB */
+      '?', /* U+1CFC */
+      '?', /* U+1CFD */
+      '?', /* U+1CFE */
+      '?', /* U+1CFF */
+      '?', /* U+1D00 */
+      '?', /* U+1D01 */
+      '?', /* U+1D02 */
+      '?', /* U+1D03 */
+      '?', /* U+1D04 */
+      '?', /* U+1D05 */
+      '?', /* U+1D06 */
+      '?', /* U+1D07 */
+      '?', /* U+1D08 */
+      '?', /* U+1D09 */
+      '?', /* U+1D0A */
+      '?', /* U+1D0B */
+      '?', /* U+1D0C */
+      '?', /* U+1D0D */
+      '?', /* U+1D0E */
+      '?', /* U+1D0F */
+      '?', /* U+1D10 */
+      '?', /* U+1D11 */
+      '?', /* U+1D12 */
+      '?', /* U+1D13 */
+      '?', /* U+1D14 */
+      '?', /* U+1D15 */
+      '?', /* U+1D16 */
+      '?', /* U+1D17 */
+      '?', /* U+1D18 */
+      '?', /* U+1D19 */
+      '?', /* U+1D1A */
+      '?', /* U+1D1B */
+      '?', /* U+1D1C */
+      '?', /* U+1D1D */
+      '?', /* U+1D1E */
+      '?', /* U+1D1F */
+      '?', /* U+1D20 */
+      '?', /* U+1D21 */
+      '?', /* U+1D22 */
+      '?', /* U+1D23 */
+      '?', /* U+1D24 */
+      '?', /* U+1D25 */
+      '?', /* U+1D26 */
+      '?', /* U+1D27 */
+      '?', /* U+1D28 */
+      '?', /* U+1D29 */
+      '?', /* U+1D2A */
+      '?', /* U+1D2B */
+      '?', /* U+1D2C */
+      '?', /* U+1D2D */
+      '?', /* U+1D2E */
+      '?', /* U+1D2F */
+      '?', /* U+1D30 */
+      '?', /* U+1D31 */
+      '?', /* U+1D32 */
+      '?', /* U+1D33 */
+      '?', /* U+1D34 */
+      '?', /* U+1D35 */
+      '?', /* U+1D36 */
+      '?', /* U+1D37 */
+      '?', /* U+1D38 */
+      '?', /* U+1D39 */
+      '?', /* U+1D3A */
+      '?', /* U+1D3B */
+      '?', /* U+1D3C */
+      '?', /* U+1D3D */
+      '?', /* U+1D3E */
+      '?', /* U+1D3F */
+      '?', /* U+1D40 */
+      '?', /* U+1D41 */
+      '?', /* U+1D42 */
+      '?', /* U+1D43 */
+      '?', /* U+1D44 */
+      '?', /* U+1D45 */
+      '?', /* U+1D46 */
+      '?', /* U+1D47 */
+      '?', /* U+1D48 */
+      '?', /* U+1D49 */
+      '?', /* U+1D4A */
+      '?', /* U+1D4B */
+      '?', /* U+1D4C */
+      '?', /* U+1D4D */
+      '?', /* U+1D4E */
+      '?', /* U+1D4F */
+      '?', /* U+1D50 */
+      '?', /* U+1D51 */
+      '?', /* U+1D52 */
+      '?', /* U+1D53 */
+      '?', /* U+1D54 */
+      '?', /* U+1D55 */
+      '?', /* U+1D56 */
+      '?', /* U+1D57 */
+      '?', /* U+1D58 */
+      '?', /* U+1D59 */
+      '?', /* U+1D5A */
+      '?', /* U+1D5B */
+      '?', /* U+1D5C */
+      '?', /* U+1D5D */
+      '?', /* U+1D5E */
+      '?', /* U+1D5F */
+      '?', /* U+1D60 */
+      '?', /* U+1D61 */
+      '?', /* U+1D62 */
+      '?', /* U+1D63 */
+      '?', /* U+1D64 */
+      '?', /* U+1D65 */
+      '?', /* U+1D66 */
+      '?', /* U+1D67 */
+      '?', /* U+1D68 */
+      '?', /* U+1D69 */
+      '?', /* U+1D6A */
+      '?', /* U+1D6B */
+      '?', /* U+1D6C */
+      '?', /* U+1D6D */
+      '?', /* U+1D6E */
+      '?', /* U+1D6F */
+      '?', /* U+1D70 */
+      '?', /* U+1D71 */
+      '?', /* U+1D72 */
+      '?', /* U+1D73 */
+      '?', /* U+1D74 */
+      '?', /* U+1D75 */
+      '?', /* U+1D76 */
+      '?', /* U+1D77 */
+      '?', /* U+1D78 */
+      '?', /* U+1D79 */
+      '?', /* U+1D7A */
+      '?', /* U+1D7B */
+      '?', /* U+1D7C */
+      '?', /* U+1D7D */
+      '?', /* U+1D7E */
+      '?', /* U+1D7F */
+      '?', /* U+1D80 */
+      '?', /* U+1D81 */
+      '?', /* U+1D82 */
+      '?', /* U+1D83 */
+      '?', /* U+1D84 */
+      '?', /* U+1D85 */
+      '?', /* U+1D86 */
+      '?', /* U+1D87 */
+      '?', /* U+1D88 */
+      '?', /* U+1D89 */
+      '?', /* U+1D8A */
+      '?', /* U+1D8B */
+      '?', /* U+1D8C */
+      '?', /* U+1D8D */
+      '?', /* U+1D8E */
+      '?', /* U+1D8F */
+      '?', /* U+1D90 */
+      '?', /* U+1D91 */
+      '?', /* U+1D92 */
+      '?', /* U+1D93 */
+      '?', /* U+1D94 */
+      '?', /* U+1D95 */
+      '?', /* U+1D96 */
+      '?', /* U+1D97 */
+      '?', /* U+1D98 */
+      '?', /* U+1D99 */
+      '?', /* U+1D9A */
+      '?', /* U+1D9B */
+      '?', /* U+1D9C */
+      '?', /* U+1D9D */
+      '?', /* U+1D9E */
+      '?', /* U+1D9F */
+      '?', /* U+1DA0 */
+      '?', /* U+1DA1 */
+      '?', /* U+1DA2 */
+      '?', /* U+1DA3 */
+      '?', /* U+1DA4 */
+      '?', /* U+1DA5 */
+      '?', /* U+1DA6 */
+      '?', /* U+1DA7 */
+      '?', /* U+1DA8 */
+      '?', /* U+1DA9 */
+      '?', /* U+1DAA */
+      '?', /* U+1DAB */
+      '?', /* U+1DAC */
+      '?', /* U+1DAD */
+      '?', /* U+1DAE */
+      '?', /* U+1DAF */
+      '?', /* U+1DB0 */
+      '?', /* U+1DB1 */
+      '?', /* U+1DB2 */
+      '?', /* U+1DB3 */
+      '?', /* U+1DB4 */
+      '?', /* U+1DB5 */
+      '?', /* U+1DB6 */
+      '?', /* U+1DB7 */
+      '?', /* U+1DB8 */
+      '?', /* U+1DB9 */
+      '?', /* U+1DBA */
+      '?', /* U+1DBB */
+      '?', /* U+1DBC */
+      '?', /* U+1DBD */
+      '?', /* U+1DBE */
+      '?', /* U+1DBF */
+      '?', /* U+1DC0 */
+      '?', /* U+1DC1 */
+      '?', /* U+1DC2 */
+      '?', /* U+1DC3 */
+      '?', /* U+1DC4 */
+      '?', /* U+1DC5 */
+      '?', /* U+1DC6 */
+      '?', /* U+1DC7 */
+      '?', /* U+1DC8 */
+      '?', /* U+1DC9 */
+      '?', /* U+1DCA */
+      '?', /* U+1DCB */
+      '?', /* U+1DCC */
+      '?', /* U+1DCD */
+      '?', /* U+1DCE */
+      '?', /* U+1DCF */
+      '?', /* U+1DD0 */
+      '?', /* U+1DD1 */
+      '?', /* U+1DD2 */
+      '?', /* U+1DD3 */
+      '?', /* U+1DD4 */
+      '?', /* U+1DD5 */
+      '?', /* U+1DD6 */
+      '?', /* U+1DD7 */
+      '?', /* U+1DD8 */
+      '?', /* U+1DD9 */
+      '?', /* U+1DDA */
+      '?', /* U+1DDB */
+      '?', /* U+1DDC */
+      '?', /* U+1DDD */
+      '?', /* U+1DDE */
+      '?', /* U+1DDF */
+      '?', /* U+1DE0 */
+      '?', /* U+1DE1 */
+      '?', /* U+1DE2 */
+      '?', /* U+1DE3 */
+      '?', /* U+1DE4 */
+      '?', /* U+1DE5 */
+      '?', /* U+1DE6 */
+      '?', /* U+1DE7 */
+      '?', /* U+1DE8 */
+      '?', /* U+1DE9 */
+      '?', /* U+1DEA */
+      '?', /* U+1DEB */
+      '?', /* U+1DEC */
+      '?', /* U+1DED */
+      '?', /* U+1DEE */
+      '?', /* U+1DEF */
+      '?', /* U+1DF0 */
+      '?', /* U+1DF1 */
+      '?', /* U+1DF2 */
+      '?', /* U+1DF3 */
+      '?', /* U+1DF4 */
+      '?', /* U+1DF5 */
+      '?', /* U+1DF6 */
+      '?', /* U+1DF7 */
+      '?', /* U+1DF8 */
+      '?', /* U+1DF9 */
+      '?', /* U+1DFA */
+      '?', /* U+1DFB */
+      '?', /* U+1DFC */
+      '?', /* U+1DFD */
+      '?', /* U+1DFE */
+      '?', /* U+1DFF */
+      '?', /* U+1E00 */
+      '?', /* U+1E01 */
+      '?', /* U+1E02 */
+      '?', /* U+1E03 */
+      '?', /* U+1E04 */
+      '?', /* U+1E05 */
+      '?', /* U+1E06 */
+      '?', /* U+1E07 */
+      '?', /* U+1E08 */
+      '?', /* U+1E09 */
+      '?', /* U+1E0A */
+      '?', /* U+1E0B */
+      '?', /* U+1E0C */
+      '?', /* U+1E0D */
+      '?', /* U+1E0E */
+      '?', /* U+1E0F */
+      '?', /* U+1E10 */
+      '?', /* U+1E11 */
+      '?', /* U+1E12 */
+      '?', /* U+1E13 */
+      '?', /* U+1E14 */
+      '?', /* U+1E15 */
+      '?', /* U+1E16 */
+      '?', /* U+1E17 */
+      '?', /* U+1E18 */
+      '?', /* U+1E19 */
+      '?', /* U+1E1A */
+      '?', /* U+1E1B */
+      '?', /* U+1E1C */
+      '?', /* U+1E1D */
+      '?', /* U+1E1E */
+      '?', /* U+1E1F */
+      '?', /* U+1E20 */
+      '?', /* U+1E21 */
+      '?', /* U+1E22 */
+      '?', /* U+1E23 */
+      '?', /* U+1E24 */
+      '?', /* U+1E25 */
+      '?', /* U+1E26 */
+      '?', /* U+1E27 */
+      '?', /* U+1E28 */
+      '?', /* U+1E29 */
+      '?', /* U+1E2A */
+      '?', /* U+1E2B */
+      '?', /* U+1E2C */
+      '?', /* U+1E2D */
+      '?', /* U+1E2E */
+      '?', /* U+1E2F */
+      '?', /* U+1E30 */
+      '?', /* U+1E31 */
+      '?', /* U+1E32 */
+      '?', /* U+1E33 */
+      '?', /* U+1E34 */
+      '?', /* U+1E35 */
+      '?', /* U+1E36 */
+      '?', /* U+1E37 */
+      '?', /* U+1E38 */
+      '?', /* U+1E39 */
+      '?', /* U+1E3A */
+      '?', /* U+1E3B */
+      '?', /* U+1E3C */
+      '?', /* U+1E3D */
+      '?', /* U+1E3E */
+      '?', /* U+1E3F */
+      '?', /* U+1E40 */
+      '?', /* U+1E41 */
+      '?', /* U+1E42 */
+      '?', /* U+1E43 */
+      '?', /* U+1E44 */
+      '?', /* U+1E45 */
+      '?', /* U+1E46 */
+      '?', /* U+1E47 */
+      '?', /* U+1E48 */
+      '?', /* U+1E49 */
+      '?', /* U+1E4A */
+      '?', /* U+1E4B */
+      '?', /* U+1E4C */
+      '?', /* U+1E4D */
+      '?', /* U+1E4E */
+      '?', /* U+1E4F */
+      '?', /* U+1E50 */
+      '?', /* U+1E51 */
+      '?', /* U+1E52 */
+      '?', /* U+1E53 */
+      '?', /* U+1E54 */
+      '?', /* U+1E55 */
+      '?', /* U+1E56 */
+      '?', /* U+1E57 */
+      '?', /* U+1E58 */
+      '?', /* U+1E59 */
+      '?', /* U+1E5A */
+      '?', /* U+1E5B */
+      '?', /* U+1E5C */
+      '?', /* U+1E5D */
+      '?', /* U+1E5E */
+      '?', /* U+1E5F */
+      '?', /* U+1E60 */
+      '?', /* U+1E61 */
+      '?', /* U+1E62 */
+      '?', /* U+1E63 */
+      '?', /* U+1E64 */
+      '?', /* U+1E65 */
+      '?', /* U+1E66 */
+      '?', /* U+1E67 */
+      '?', /* U+1E68 */
+      '?', /* U+1E69 */
+      '?', /* U+1E6A */
+      '?', /* U+1E6B */
+      '?', /* U+1E6C */
+      '?', /* U+1E6D */
+      '?', /* U+1E6E */
+      '?', /* U+1E6F */
+      '?', /* U+1E70 */
+      '?', /* U+1E71 */
+      '?', /* U+1E72 */
+      '?', /* U+1E73 */
+      '?', /* U+1E74 */
+      '?', /* U+1E75 */
+      '?', /* U+1E76 */
+      '?', /* U+1E77 */
+      '?', /* U+1E78 */
+      '?', /* U+1E79 */
+      '?', /* U+1E7A */
+      '?', /* U+1E7B */
+      '?', /* U+1E7C */
+      '?', /* U+1E7D */
+      '?', /* U+1E7E */
+      '?', /* U+1E7F */
+      '?', /* U+1E80 */
+      '?', /* U+1E81 */
+      '?', /* U+1E82 */
+      '?', /* U+1E83 */
+      '?', /* U+1E84 */
+      '?', /* U+1E85 */
+      '?', /* U+1E86 */
+      '?', /* U+1E87 */
+      '?', /* U+1E88 */
+      '?', /* U+1E89 */
+      '?', /* U+1E8A */
+      '?', /* U+1E8B */
+      '?', /* U+1E8C */
+      '?', /* U+1E8D */
+      '?', /* U+1E8E */
+      '?', /* U+1E8F */
+      '?', /* U+1E90 */
+      '?', /* U+1E91 */
+      '?', /* U+1E92 */
+      '?', /* U+1E93 */
+      '?', /* U+1E94 */
+      '?', /* U+1E95 */
+      '?', /* U+1E96 */
+      '?', /* U+1E97 */
+      '?', /* U+1E98 */
+      '?', /* U+1E99 */
+      '?', /* U+1E9A */
+      '?', /* U+1E9B */
+      '?', /* U+1E9C */
+      '?', /* U+1E9D */
+      '?', /* U+1E9E */
+      '?', /* U+1E9F */
+      '?', /* U+1EA0 */
+      '?', /* U+1EA1 */
+      '?', /* U+1EA2 */
+      '?', /* U+1EA3 */
+      '?', /* U+1EA4 */
+      '?', /* U+1EA5 */
+      '?', /* U+1EA6 */
+      '?', /* U+1EA7 */
+      '?', /* U+1EA8 */
+      '?', /* U+1EA9 */
+      '?', /* U+1EAA */
+      '?', /* U+1EAB */
+      '?', /* U+1EAC */
+      '?', /* U+1EAD */
+      '?', /* U+1EAE */
+      '?', /* U+1EAF */
+      '?', /* U+1EB0 */
+      '?', /* U+1EB1 */
+      '?', /* U+1EB2 */
+      '?', /* U+1EB3 */
+      '?', /* U+1EB4 */
+      '?', /* U+1EB5 */
+      '?', /* U+1EB6 */
+      '?', /* U+1EB7 */
+      '?', /* U+1EB8 */
+      '?', /* U+1EB9 */
+      '?', /* U+1EBA */
+      '?', /* U+1EBB */
+      '?', /* U+1EBC */
+      '?', /* U+1EBD */
+      '?', /* U+1EBE */
+      '?', /* U+1EBF */
+      '?', /* U+1EC0 */
+      '?', /* U+1EC1 */
+      '?', /* U+1EC2 */
+      '?', /* U+1EC3 */
+      '?', /* U+1EC4 */
+      '?', /* U+1EC5 */
+      '?', /* U+1EC6 */
+      '?', /* U+1EC7 */
+      '?', /* U+1EC8 */
+      '?', /* U+1EC9 */
+      '?', /* U+1ECA */
+      '?', /* U+1ECB */
+      '?', /* U+1ECC */
+      '?', /* U+1ECD */
+      '?', /* U+1ECE */
+      '?', /* U+1ECF */
+      '?', /* U+1ED0 */
+      '?', /* U+1ED1 */
+      '?', /* U+1ED2 */
+      '?', /* U+1ED3 */
+      '?', /* U+1ED4 */
+      '?', /* U+1ED5 */
+      '?', /* U+1ED6 */
+      '?', /* U+1ED7 */
+      '?', /* U+1ED8 */
+      '?', /* U+1ED9 */
+      '?', /* U+1EDA */
+      '?', /* U+1EDB */
+      '?', /* U+1EDC */
+      '?', /* U+1EDD */
+      '?', /* U+1EDE */
+      '?', /* U+1EDF */
+      '?', /* U+1EE0 */
+      '?', /* U+1EE1 */
+      '?', /* U+1EE2 */
+      '?', /* U+1EE3 */
+      '?', /* U+1EE4 */
+      '?', /* U+1EE5 */
+      '?', /* U+1EE6 */
+      '?', /* U+1EE7 */
+      '?', /* U+1EE8 */
+      '?', /* U+1EE9 */
+      '?', /* U+1EEA */
+      '?', /* U+1EEB */
+      '?', /* U+1EEC */
+      '?', /* U+1EED */
+      '?', /* U+1EEE */
+      '?', /* U+1EEF */
+      '?', /* U+1EF0 */
+      '?', /* U+1EF1 */
+      '?', /* U+1EF2 */
+      '?', /* U+1EF3 */
+      '?', /* U+1EF4 */
+      '?', /* U+1EF5 */
+      '?', /* U+1EF6 */
+      '?', /* U+1EF7 */
+      '?', /* U+1EF8 */
+      '?', /* U+1EF9 */
+      '?', /* U+1EFA */
+      '?', /* U+1EFB */
+      '?', /* U+1EFC */
+      '?', /* U+1EFD */
+      '?', /* U+1EFE */
+      '?', /* U+1EFF */
+      '?', /* U+1F00 */
+      '?', /* U+1F01 */
+      '?', /* U+1F02 */
+      '?', /* U+1F03 */
+      '?', /* U+1F04 */
+      '?', /* U+1F05 */
+      '?', /* U+1F06 */
+      '?', /* U+1F07 */
+      '?', /* U+1F08 */
+      '?', /* U+1F09 */
+      '?', /* U+1F0A */
+      '?', /* U+1F0B */
+      '?', /* U+1F0C */
+      '?', /* U+1F0D */
+      '?', /* U+1F0E */
+      '?', /* U+1F0F */
+      '?', /* U+1F10 */
+      '?', /* U+1F11 */
+      '?', /* U+1F12 */
+      '?', /* U+1F13 */
+      '?', /* U+1F14 */
+      '?', /* U+1F15 */
+      '?', /* U+1F16 */
+      '?', /* U+1F17 */
+      '?', /* U+1F18 */
+      '?', /* U+1F19 */
+      '?', /* U+1F1A */
+      '?', /* U+1F1B */
+      '?', /* U+1F1C */
+      '?', /* U+1F1D */
+      '?', /* U+1F1E */
+      '?', /* U+1F1F */
+      '?', /* U+1F20 */
+      '?', /* U+1F21 */
+      '?', /* U+1F22 */
+      '?', /* U+1F23 */
+      '?', /* U+1F24 */
+      '?', /* U+1F25 */
+      '?', /* U+1F26 */
+      '?', /* U+1F27 */
+      '?', /* U+1F28 */
+      '?', /* U+1F29 */
+      '?', /* U+1F2A */
+      '?', /* U+1F2B */
+      '?', /* U+1F2C */
+      '?', /* U+1F2D */
+      '?', /* U+1F2E */
+      '?', /* U+1F2F */
+      '?', /* U+1F30 */
+      '?', /* U+1F31 */
+      '?', /* U+1F32 */
+      '?', /* U+1F33 */
+      '?', /* U+1F34 */
+      '?', /* U+1F35 */
+      '?', /* U+1F36 */
+      '?', /* U+1F37 */
+      '?', /* U+1F38 */
+      '?', /* U+1F39 */
+      '?', /* U+1F3A */
+      '?', /* U+1F3B */
+      '?', /* U+1F3C */
+      '?', /* U+1F3D */
+      '?', /* U+1F3E */
+      '?', /* U+1F3F */
+      '?', /* U+1F40 */
+      '?', /* U+1F41 */
+      '?', /* U+1F42 */
+      '?', /* U+1F43 */
+      '?', /* U+1F44 */
+      '?', /* U+1F45 */
+      '?', /* U+1F46 */
+      '?', /* U+1F47 */
+      '?', /* U+1F48 */
+      '?', /* U+1F49 */
+      '?', /* U+1F4A */
+      '?', /* U+1F4B */
+      '?', /* U+1F4C */
+      '?', /* U+1F4D */
+      '?', /* U+1F4E */
+      '?', /* U+1F4F */
+      '?', /* U+1F50 */
+      '?', /* U+1F51 */
+      '?', /* U+1F52 */
+      '?', /* U+1F53 */
+      '?', /* U+1F54 */
+      '?', /* U+1F55 */
+      '?', /* U+1F56 */
+      '?', /* U+1F57 */
+      '?', /* U+1F58 */
+      '?', /* U+1F59 */
+      '?', /* U+1F5A */
+      '?', /* U+1F5B */
+      '?', /* U+1F5C */
+      '?', /* U+1F5D */
+      '?', /* U+1F5E */
+      '?', /* U+1F5F */
+      '?', /* U+1F60 */
+      '?', /* U+1F61 */
+      '?', /* U+1F62 */
+      '?', /* U+1F63 */
+      '?', /* U+1F64 */
+      '?', /* U+1F65 */
+      '?', /* U+1F66 */
+      '?', /* U+1F67 */
+      '?', /* U+1F68 */
+      '?', /* U+1F69 */
+      '?', /* U+1F6A */
+      '?', /* U+1F6B */
+      '?', /* U+1F6C */
+      '?', /* U+1F6D */
+      '?', /* U+1F6E */
+      '?', /* U+1F6F */
+      '?', /* U+1F70 */
+      '?', /* U+1F71 */
+      '?', /* U+1F72 */
+      '?', /* U+1F73 */
+      '?', /* U+1F74 */
+      '?', /* U+1F75 */
+      '?', /* U+1F76 */
+      '?', /* U+1F77 */
+      '?', /* U+1F78 */
+      '?', /* U+1F79 */
+      '?', /* U+1F7A */
+      '?', /* U+1F7B */
+      '?', /* U+1F7C */
+      '?', /* U+1F7D */
+      '?', /* U+1F7E */
+      '?', /* U+1F7F */
+      '?', /* U+1F80 */
+      '?', /* U+1F81 */
+      '?', /* U+1F82 */
+      '?', /* U+1F83 */
+      '?', /* U+1F84 */
+      '?', /* U+1F85 */
+      '?', /* U+1F86 */
+      '?', /* U+1F87 */
+      '?', /* U+1F88 */
+      '?', /* U+1F89 */
+      '?', /* U+1F8A */
+      '?', /* U+1F8B */
+      '?', /* U+1F8C */
+      '?', /* U+1F8D */
+      '?', /* U+1F8E */
+      '?', /* U+1F8F */
+      '?', /* U+1F90 */
+      '?', /* U+1F91 */
+      '?', /* U+1F92 */
+      '?', /* U+1F93 */
+      '?', /* U+1F94 */
+      '?', /* U+1F95 */
+      '?', /* U+1F96 */
+      '?', /* U+1F97 */
+      '?', /* U+1F98 */
+      '?', /* U+1F99 */
+      '?', /* U+1F9A */
+      '?', /* U+1F9B */
+      '?', /* U+1F9C */
+      '?', /* U+1F9D */
+      '?', /* U+1F9E */
+      '?', /* U+1F9F */
+      '?', /* U+1FA0 */
+      '?', /* U+1FA1 */
+      '?', /* U+1FA2 */
+      '?', /* U+1FA3 */
+      '?', /* U+1FA4 */
+      '?', /* U+1FA5 */
+      '?', /* U+1FA6 */
+      '?', /* U+1FA7 */
+      '?', /* U+1FA8 */
+      '?', /* U+1FA9 */
+      '?', /* U+1FAA */
+      '?', /* U+1FAB */
+      '?', /* U+1FAC */
+      '?', /* U+1FAD */
+      '?', /* U+1FAE */
+      '?', /* U+1FAF */
+      '?', /* U+1FB0 */
+      '?', /* U+1FB1 */
+      '?', /* U+1FB2 */
+      '?', /* U+1FB3 */
+      '?', /* U+1FB4 */
+      '?', /* U+1FB5 */
+      '?', /* U+1FB6 */
+      '?', /* U+1FB7 */
+      '?', /* U+1FB8 */
+      '?', /* U+1FB9 */
+      '?', /* U+1FBA */
+      '?', /* U+1FBB */
+      '?', /* U+1FBC */
+      '?', /* U+1FBD */
+      '?', /* U+1FBE */
+      '?', /* U+1FBF */
+      '?', /* U+1FC0 */
+      '?', /* U+1FC1 */
+      '?', /* U+1FC2 */
+      '?', /* U+1FC3 */
+      '?', /* U+1FC4 */
+      '?', /* U+1FC5 */
+      '?', /* U+1FC6 */
+      '?', /* U+1FC7 */
+      '?', /* U+1FC8 */
+      '?', /* U+1FC9 */
+      '?', /* U+1FCA */
+      '?', /* U+1FCB */
+      '?', /* U+1FCC */
+      '?', /* U+1FCD */
+      '?', /* U+1FCE */
+      '?', /* U+1FCF */
+      '?', /* U+1FD0 */
+      '?', /* U+1FD1 */
+      '?', /* U+1FD2 */
+      '?', /* U+1FD3 */
+      '?', /* U+1FD4 */
+      '?', /* U+1FD5 */
+      '?', /* U+1FD6 */
+      '?', /* U+1FD7 */
+      '?', /* U+1FD8 */
+      '?', /* U+1FD9 */
+      '?', /* U+1FDA */
+      '?', /* U+1FDB */
+      '?', /* U+1FDC */
+      '?', /* U+1FDD */
+      '?', /* U+1FDE */
+      '?', /* U+1FDF */
+      '?', /* U+1FE0 */
+      '?', /* U+1FE1 */
+      '?', /* U+1FE2 */
+      '?', /* U+1FE3 */
+      '?', /* U+1FE4 */
+      '?', /* U+1FE5 */
+      '?', /* U+1FE6 */
+      '?', /* U+1FE7 */
+      '?', /* U+1FE8 */
+      '?', /* U+1FE9 */
+      '?', /* U+1FEA */
+      '?', /* U+1FEB */
+      '?', /* U+1FEC */
+      '?', /* U+1FED */
+      '?', /* U+1FEE */
+      '?', /* U+1FEF */
+      '?', /* U+1FF0 */
+      '?', /* U+1FF1 */
+      '?', /* U+1FF2 */
+      '?', /* U+1FF3 */
+      '?', /* U+1FF4 */
+      '?', /* U+1FF5 */
+      '?', /* U+1FF6 */
+      '?', /* U+1FF7 */
+      '?', /* U+1FF8 */
+      '?', /* U+1FF9 */
+      '?', /* U+1FFA */
+      '?', /* U+1FFB */
+      '?', /* U+1FFC */
+      '?', /* U+1FFD */
+      '?', /* U+1FFE */
+      '?', /* U+1FFF */
+      '?', /* U+2000 */
+      '?', /* U+2001 */
+      '?', /* U+2002 */
+      '?', /* U+2003 */
+      '?', /* U+2004 */
+      '?', /* U+2005 */
+      '?', /* U+2006 */
+      '?', /* U+2007 */
+      '?', /* U+2008 */
+      '?', /* U+2009 */
+      '?', /* U+200A */
+      '?', /* U+200B */
+      '?', /* U+200C */
+      '?', /* U+200D */
+      '?', /* U+200E */
+      '?', /* U+200F */
+   0x815d, /* U+2010 */
+      '?', /* U+2011 */
+      '?', /* U+2012 */
+      '?', /* U+2013 */
+      '?', /* U+2014 */
+   0x815c, /* U+2015 */
+      '?', /* U+2016 */
+      '?', /* U+2017 */
+   0x8165, /* U+2018 */
+   0x8166, /* U+2019 */
+      '?', /* U+201A */
+      '?', /* U+201B */
+   0x8167, /* U+201C */
+   0x8168, /* U+201D */
+      '?', /* U+201E */
+      '?', /* U+201F */
+   0x81f5, /* U+2020 */
+   0x81f6, /* U+2021 */
+      '?', /* U+2022 */
+      '?', /* U+2023 */
+      '?', /* U+2024 */
+   0x8164, /* U+2025 */
+   0x8163, /* U+2026 */
+      '?', /* U+2027 */
+      '?', /* U+2028 */
+      '?', /* U+2029 */
+      '?', /* U+202A */
+      '?', /* U+202B */
+      '?', /* U+202C */
+      '?', /* U+202D */
+      '?', /* U+202E */
+      '?', /* U+202F */
+   0x81f1, /* U+2030 */
+      '?', /* U+2031 */
+   0x818c, /* U+2032 */
+   0x818d, /* U+2033 */
+      '?', /* U+2034 */
+      '?', /* U+2035 */
+      '?', /* U+2036 */
+      '?', /* U+2037 */
+      '?', /* U+2038 */
+      '?', /* U+2039 */
+      '?', /* U+203A */
+   0x81a6, /* U+203B */
+      '?', /* U+203C */
+      '?', /* U+203D */
+      '?', /* U+203E */
+      '?', /* U+203F */
+      '?', /* U+2040 */
+      '?', /* U+2041 */
+      '?', /* U+2042 */
+      '?', /* U+2043 */
+      '?', /* U+2044 */
+      '?', /* U+2045 */
+      '?', /* U+2046 */
+      '?', /* U+2047 */
+      '?', /* U+2048 */
+      '?', /* U+2049 */
+      '?', /* U+204A */
+      '?', /* U+204B */
+      '?', /* U+204C */
+      '?', /* U+204D */
+      '?', /* U+204E */
+      '?', /* U+204F */
+      '?', /* U+2050 */
+      '?', /* U+2051 */
+      '?', /* U+2052 */
+      '?', /* U+2053 */
+      '?', /* U+2054 */
+      '?', /* U+2055 */
+      '?', /* U+2056 */
+      '?', /* U+2057 */
+      '?', /* U+2058 */
+      '?', /* U+2059 */
+      '?', /* U+205A */
+      '?', /* U+205B */
+      '?', /* U+205C */
+      '?', /* U+205D */
+      '?', /* U+205E */
+      '?', /* U+205F */
+      '?', /* U+2060 */
+      '?', /* U+2061 */
+      '?', /* U+2062 */
+      '?', /* U+2063 */
+      '?', /* U+2064 */
+      '?', /* U+2065 */
+      '?', /* U+2066 */
+      '?', /* U+2067 */
+      '?', /* U+2068 */
+      '?', /* U+2069 */
+      '?', /* U+206A */
+      '?', /* U+206B */
+      '?', /* U+206C */
+      '?', /* U+206D */
+      '?', /* U+206E */
+      '?', /* U+206F */
+      '?', /* U+2070 */
+      '?', /* U+2071 */
+      '?', /* U+2072 */
+      '?', /* U+2073 */
+      '?', /* U+2074 */
+      '?', /* U+2075 */
+      '?', /* U+2076 */
+      '?', /* U+2077 */
+      '?', /* U+2078 */
+      '?', /* U+2079 */
+      '?', /* U+207A */
+      '?', /* U+207B */
+      '?', /* U+207C */
+      '?', /* U+207D */
+      '?', /* U+207E */
+      '?', /* U+207F */
+      '?', /* U+2080 */
+      '?', /* U+2081 */
+      '?', /* U+2082 */
+      '?', /* U+2083 */
+      '?', /* U+2084 */
+      '?', /* U+2085 */
+      '?', /* U+2086 */
+      '?', /* U+2087 */
+      '?', /* U+2088 */
+      '?', /* U+2089 */
+      '?', /* U+208A */
+      '?', /* U+208B */
+      '?', /* U+208C */
+      '?', /* U+208D */
+      '?', /* U+208E */
+      '?', /* U+208F */
+      '?', /* U+2090 */
+      '?', /* U+2091 */
+      '?', /* U+2092 */
+      '?', /* U+2093 */
+      '?', /* U+2094 */
+      '?', /* U+2095 */
+      '?', /* U+2096 */
+      '?', /* U+2097 */
+      '?', /* U+2098 */
+      '?', /* U+2099 */
+      '?', /* U+209A */
+      '?', /* U+209B */
+      '?', /* U+209C */
+      '?', /* U+209D */
+      '?', /* U+209E */
+      '?', /* U+209F */
+      '?', /* U+20A0 */
+      '?', /* U+20A1 */
+      '?', /* U+20A2 */
+      '?', /* U+20A3 */
+      '?', /* U+20A4 */
+      '?', /* U+20A5 */
+      '?', /* U+20A6 */
+      '?', /* U+20A7 */
+      '?', /* U+20A8 */
+      '?', /* U+20A9 */
+      '?', /* U+20AA */
+      '?', /* U+20AB */
+      '?', /* U+20AC */
+      '?', /* U+20AD */
+      '?', /* U+20AE */
+      '?', /* U+20AF */
+      '?', /* U+20B0 */
+      '?', /* U+20B1 */
+      '?', /* U+20B2 */
+      '?', /* U+20B3 */
+      '?', /* U+20B4 */
+      '?', /* U+20B5 */
+      '?', /* U+20B6 */
+      '?', /* U+20B7 */
+      '?', /* U+20B8 */
+      '?', /* U+20B9 */
+      '?', /* U+20BA */
+      '?', /* U+20BB */
+      '?', /* U+20BC */
+      '?', /* U+20BD */
+      '?', /* U+20BE */
+      '?', /* U+20BF */
+      '?', /* U+20C0 */
+      '?', /* U+20C1 */
+      '?', /* U+20C2 */
+      '?', /* U+20C3 */
+      '?', /* U+20C4 */
+      '?', /* U+20C5 */
+      '?', /* U+20C6 */
+      '?', /* U+20C7 */
+      '?', /* U+20C8 */
+      '?', /* U+20C9 */
+      '?', /* U+20CA */
+      '?', /* U+20CB */
+      '?', /* U+20CC */
+      '?', /* U+20CD */
+      '?', /* U+20CE */
+      '?', /* U+20CF */
+      '?', /* U+20D0 */
+      '?', /* U+20D1 */
+      '?', /* U+20D2 */
+      '?', /* U+20D3 */
+      '?', /* U+20D4 */
+      '?', /* U+20D5 */
+      '?', /* U+20D6 */
+      '?', /* U+20D7 */
+      '?', /* U+20D8 */
+      '?', /* U+20D9 */
+      '?', /* U+20DA */
+      '?', /* U+20DB */
+      '?', /* U+20DC */
+      '?', /* U+20DD */
+      '?', /* U+20DE */
+      '?', /* U+20DF */
+      '?', /* U+20E0 */
+      '?', /* U+20E1 */
+      '?', /* U+20E2 */
+      '?', /* U+20E3 */
+      '?', /* U+20E4 */
+      '?', /* U+20E5 */
+      '?', /* U+20E6 */
+      '?', /* U+20E7 */
+      '?', /* U+20E8 */
+      '?', /* U+20E9 */
+      '?', /* U+20EA */
+      '?', /* U+20EB */
+      '?', /* U+20EC */
+      '?', /* U+20ED */
+      '?', /* U+20EE */
+      '?', /* U+20EF */
+      '?', /* U+20F0 */
+      '?', /* U+20F1 */
+      '?', /* U+20F2 */
+      '?', /* U+20F3 */
+      '?', /* U+20F4 */
+      '?', /* U+20F5 */
+      '?', /* U+20F6 */
+      '?', /* U+20F7 */
+      '?', /* U+20F8 */
+      '?', /* U+20F9 */
+      '?', /* U+20FA */
+      '?', /* U+20FB */
+      '?', /* U+20FC */
+      '?', /* U+20FD */
+      '?', /* U+20FE */
+      '?', /* U+20FF */
+      '?', /* U+2100 */
+      '?', /* U+2101 */
+      '?', /* U+2102 */
+   0x818e, /* U+2103 */
+      '?', /* U+2104 */
+      '?', /* U+2105 */
+      '?', /* U+2106 */
+      '?', /* U+2107 */
+      '?', /* U+2108 */
+      '?', /* U+2109 */
+      '?', /* U+210A */
+      '?', /* U+210B */
+      '?', /* U+210C */
+      '?', /* U+210D */
+      '?', /* U+210E */
+      '?', /* U+210F */
+      '?', /* U+2110 */
+      '?', /* U+2111 */
+      '?', /* U+2112 */
+      '?', /* U+2113 */
+      '?', /* U+2114 */
+      '?', /* U+2115 */
+   0xfa59, /* U+2116 */
+      '?', /* U+2117 */
+      '?', /* U+2118 */
+      '?', /* U+2119 */
+      '?', /* U+211A */
+      '?', /* U+211B */
+      '?', /* U+211C */
+      '?', /* U+211D */
+      '?', /* U+211E */
+      '?', /* U+211F */
+      '?', /* U+2120 */
+   0xfa5a, /* U+2121 */
+      '?', /* U+2122 */
+      '?', /* U+2123 */
+      '?', /* U+2124 */
+      '?', /* U+2125 */
+      '?', /* U+2126 */
+      '?', /* U+2127 */
+      '?', /* U+2128 */
+      '?', /* U+2129 */
+      '?', /* U+212A */
+   0x81f0, /* U+212B */
+      '?', /* U+212C */
+      '?', /* U+212D */
+      '?', /* U+212E */
+      '?', /* U+212F */
+      '?', /* U+2130 */
+      '?', /* U+2131 */
+      '?', /* U+2132 */
+      '?', /* U+2133 */
+      '?', /* U+2134 */
+      '?', /* U+2135 */
+      '?', /* U+2136 */
+      '?', /* U+2137 */
+      '?', /* U+2138 */
+      '?', /* U+2139 */
+      '?', /* U+213A */
+      '?', /* U+213B */
+      '?', /* U+213C */
+      '?', /* U+213D */
+      '?', /* U+213E */
+      '?', /* U+213F */
+      '?', /* U+2140 */
+      '?', /* U+2141 */
+      '?', /* U+2142 */
+      '?', /* U+2143 */
+      '?', /* U+2144 */
+      '?', /* U+2145 */
+      '?', /* U+2146 */
+      '?', /* U+2147 */
+      '?', /* U+2148 */
+      '?', /* U+2149 */
+      '?', /* U+214A */
+      '?', /* U+214B */
+      '?', /* U+214C */
+      '?', /* U+214D */
+      '?', /* U+214E */
+      '?', /* U+214F */
+      '?', /* U+2150 */
+      '?', /* U+2151 */
+      '?', /* U+2152 */
+      '?', /* U+2153 */
+      '?', /* U+2154 */
+      '?', /* U+2155 */
+      '?', /* U+2156 */
+      '?', /* U+2157 */
+      '?', /* U+2158 */
+      '?', /* U+2159 */
+      '?', /* U+215A */
+      '?', /* U+215B */
+      '?', /* U+215C */
+      '?', /* U+215D */
+      '?', /* U+215E */
+      '?', /* U+215F */
+   0xfa4a, /* U+2160 */
+   0xfa4b, /* U+2161 */
+   0xfa4c, /* U+2162 */
+   0xfa4d, /* U+2163 */
+   0xfa4e, /* U+2164 */
+   0xfa4f, /* U+2165 */
+   0xfa50, /* U+2166 */
+   0xfa51, /* U+2167 */
+   0xfa52, /* U+2168 */
+   0xfa53, /* U+2169 */
+      '?', /* U+216A */
+      '?', /* U+216B */
+      '?', /* U+216C */
+      '?', /* U+216D */
+      '?', /* U+216E */
+      '?', /* U+216F */
+   0xfa40, /* U+2170 */
+   0xfa41, /* U+2171 */
+   0xfa42, /* U+2172 */
+   0xfa43, /* U+2173 */
+   0xfa44, /* U+2174 */
+   0xfa45, /* U+2175 */
+   0xfa46, /* U+2176 */
+   0xfa47, /* U+2177 */
+   0xfa48, /* U+2178 */
+   0xfa49, /* U+2179 */
+      '?', /* U+217A */
+      '?', /* U+217B */
+      '?', /* U+217C */
+      '?', /* U+217D */
+      '?', /* U+217E */
+      '?', /* U+217F */
+      '?', /* U+2180 */
+      '?', /* U+2181 */
+      '?', /* U+2182 */
+      '?', /* U+2183 */
+      '?', /* U+2184 */
+      '?', /* U+2185 */
+      '?', /* U+2186 */
+      '?', /* U+2187 */
+      '?', /* U+2188 */
+      '?', /* U+2189 */
+      '?', /* U+218A */
+      '?', /* U+218B */
+      '?', /* U+218C */
+      '?', /* U+218D */
+      '?', /* U+218E */
+      '?', /* U+218F */
+   0x81a9, /* U+2190 */
+   0x81aa, /* U+2191 */
+   0x81a8, /* U+2192 */
+   0x81ab, /* U+2193 */
+      '?', /* U+2194 */
+      '?', /* U+2195 */
+      '?', /* U+2196 */
+      '?', /* U+2197 */
+      '?', /* U+2198 */
+      '?', /* U+2199 */
+      '?', /* U+219A */
+      '?', /* U+219B */
+      '?', /* U+219C */
+      '?', /* U+219D */
+      '?', /* U+219E */
+      '?', /* U+219F */
+      '?', /* U+21A0 */
+      '?', /* U+21A1 */
+      '?', /* U+21A2 */
+      '?', /* U+21A3 */
+      '?', /* U+21A4 */
+      '?', /* U+21A5 */
+      '?', /* U+21A6 */
+      '?', /* U+21A7 */
+      '?', /* U+21A8 */
+      '?', /* U+21A9 */
+      '?', /* U+21AA */
+      '?', /* U+21AB */
+      '?', /* U+21AC */
+      '?', /* U+21AD */
+      '?', /* U+21AE */
+      '?', /* U+21AF */
+      '?', /* U+21B0 */
+      '?', /* U+21B1 */
+      '?', /* U+21B2 */
+      '?', /* U+21B3 */
+      '?', /* U+21B4 */
+      '?', /* U+21B5 */
+      '?', /* U+21B6 */
+      '?', /* U+21B7 */
+      '?', /* U+21B8 */
+      '?', /* U+21B9 */
+      '?', /* U+21BA */
+      '?', /* U+21BB */
+      '?', /* U+21BC */
+      '?', /* U+21BD */
+      '?', /* U+21BE */
+      '?', /* U+21BF */
+      '?', /* U+21C0 */
+      '?', /* U+21C1 */
+      '?', /* U+21C2 */
+      '?', /* U+21C3 */
+      '?', /* U+21C4 */
+      '?', /* U+21C5 */
+      '?', /* U+21C6 */
+      '?', /* U+21C7 */
+      '?', /* U+21C8 */
+      '?', /* U+21C9 */
+      '?', /* U+21CA */
+      '?', /* U+21CB */
+      '?', /* U+21CC */
+      '?', /* U+21CD */
+      '?', /* U+21CE */
+      '?', /* U+21CF */
+      '?', /* U+21D0 */
+      '?', /* U+21D1 */
+   0x81cb, /* U+21D2 */
+      '?', /* U+21D3 */
+   0x81cc, /* U+21D4 */
+      '?', /* U+21D5 */
+      '?', /* U+21D6 */
+      '?', /* U+21D7 */
+      '?', /* U+21D8 */
+      '?', /* U+21D9 */
+      '?', /* U+21DA */
+      '?', /* U+21DB */
+      '?', /* U+21DC */
+      '?', /* U+21DD */
+      '?', /* U+21DE */
+      '?', /* U+21DF */
+      '?', /* U+21E0 */
+      '?', /* U+21E1 */
+      '?', /* U+21E2 */
+      '?', /* U+21E3 */
+      '?', /* U+21E4 */
+      '?', /* U+21E5 */
+      '?', /* U+21E6 */
+      '?', /* U+21E7 */
+      '?', /* U+21E8 */
+      '?', /* U+21E9 */
+      '?', /* U+21EA */
+      '?', /* U+21EB */
+      '?', /* U+21EC */
+      '?', /* U+21ED */
+      '?', /* U+21EE */
+      '?', /* U+21EF */
+      '?', /* U+21F0 */
+      '?', /* U+21F1 */
+      '?', /* U+21F2 */
+      '?', /* U+21F3 */
+      '?', /* U+21F4 */
+      '?', /* U+21F5 */
+      '?', /* U+21F6 */
+      '?', /* U+21F7 */
+      '?', /* U+21F8 */
+      '?', /* U+21F9 */
+      '?', /* U+21FA */
+      '?', /* U+21FB */
+      '?', /* U+21FC */
+      '?', /* U+21FD */
+      '?', /* U+21FE */
+      '?', /* U+21FF */
+   0x81cd, /* U+2200 */
+      '?', /* U+2201 */
+   0x81dd, /* U+2202 */
+   0x81ce, /* U+2203 */
+      '?', /* U+2204 */
+      '?', /* U+2205 */
+      '?', /* U+2206 */
+   0x81de, /* U+2207 */
+   0x81b8, /* U+2208 */
+      '?', /* U+2209 */
+      '?', /* U+220A */
+   0x81b9, /* U+220B */
+      '?', /* U+220C */
+      '?', /* U+220D */
+      '?', /* U+220E */
+      '?', /* U+220F */
+      '?', /* U+2210 */
+   0x8794, /* U+2211 */
+      '?', /* U+2212 */
+      '?', /* U+2213 */
+      '?', /* U+2214 */
+      '?', /* U+2215 */
+      '?', /* U+2216 */
+      '?', /* U+2217 */
+      '?', /* U+2218 */
+      '?', /* U+2219 */
+   0x8795, /* U+221A */
+      '?', /* U+221B */
+      '?', /* U+221C */
+   0x81e5, /* U+221D */
+   0x8187, /* U+221E */
+   0x8798, /* U+221F */
+   0x8797, /* U+2220 */
+      '?', /* U+2221 */
+      '?', /* U+2222 */
+      '?', /* U+2223 */
+      '?', /* U+2224 */
+   0x8161, /* U+2225 */
+      '?', /* U+2226 */
+   0x81c8, /* U+2227 */
+   0x81c9, /* U+2228 */
+   0x879b, /* U+2229 */
+   0x879c, /* U+222A */
+   0x8792, /* U+222B */
+   0x81e8, /* U+222C */
+      '?', /* U+222D */
+   0x8793, /* U+222E */
+      '?', /* U+222F */
+      '?', /* U+2230 */
+      '?', /* U+2231 */
+      '?', /* U+2232 */
+      '?', /* U+2233 */
+   0x8188, /* U+2234 */
+   0xfa5b, /* U+2235 */
+      '?', /* U+2236 */
+      '?', /* U+2237 */
+      '?', /* U+2238 */
+      '?', /* U+2239 */
+      '?', /* U+223A */
+      '?', /* U+223B */
+      '?', /* U+223C */
+   0x81e4, /* U+223D */
+      '?', /* U+223E */
+      '?', /* U+223F */
+      '?', /* U+2240 */
+      '?', /* U+2241 */
+      '?', /* U+2242 */
+      '?', /* U+2243 */
+      '?', /* U+2244 */
+      '?', /* U+2245 */
+      '?', /* U+2246 */
+      '?', /* U+2247 */
+      '?', /* U+2248 */
+      '?', /* U+2249 */
+      '?', /* U+224A */
+      '?', /* U+224B */
+      '?', /* U+224C */
+      '?', /* U+224D */
+      '?', /* U+224E */
+      '?', /* U+224F */
+      '?', /* U+2250 */
+      '?', /* U+2251 */
+   0x8790, /* U+2252 */
+      '?', /* U+2253 */
+      '?', /* U+2254 */
+      '?', /* U+2255 */
+      '?', /* U+2256 */
+      '?', /* U+2257 */
+      '?', /* U+2258 */
+      '?', /* U+2259 */
+      '?', /* U+225A */
+      '?', /* U+225B */
+      '?', /* U+225C */
+      '?', /* U+225D */
+      '?', /* U+225E */
+      '?', /* U+225F */
+   0x8182, /* U+2260 */
+   0x8791, /* U+2261 */
+      '?', /* U+2262 */
+      '?', /* U+2263 */
+      '?', /* U+2264 */
+      '?', /* U+2265 */
+   0x8185, /* U+2266 */
+   0x8186, /* U+2267 */
+      '?', /* U+2268 */
+      '?', /* U+2269 */
+   0x81e1, /* U+226A */
+   0x81e2, /* U+226B */
+      '?', /* U+226C */
+      '?', /* U+226D */
+      '?', /* U+226E */
+      '?', /* U+226F */
+      '?', /* U+2270 */
+      '?', /* U+2271 */
+      '?', /* U+2272 */
+      '?', /* U+2273 */
+      '?', /* U+2274 */
+      '?', /* U+2275 */
+      '?', /* U+2276 */
+      '?', /* U+2277 */
+      '?', /* U+2278 */
+      '?', /* U+2279 */
+      '?', /* U+227A */
+      '?', /* U+227B */
+      '?', /* U+227C */
+      '?', /* U+227D */
+      '?', /* U+227E */
+      '?', /* U+227F */
+      '?', /* U+2280 */
+      '?', /* U+2281 */
+   0x81bc, /* U+2282 */
+   0x81bd, /* U+2283 */
+      '?', /* U+2284 */
+      '?', /* U+2285 */
+   0x81ba, /* U+2286 */
+   0x81bb, /* U+2287 */
+      '?', /* U+2288 */
+      '?', /* U+2289 */
+      '?', /* U+228A */
+      '?', /* U+228B */
+      '?', /* U+228C */
+      '?', /* U+228D */
+      '?', /* U+228E */
+      '?', /* U+228F */
+      '?', /* U+2290 */
+      '?', /* U+2291 */
+      '?', /* U+2292 */
+      '?', /* U+2293 */
+      '?', /* U+2294 */
+      '?', /* U+2295 */
+      '?', /* U+2296 */
+      '?', /* U+2297 */
+      '?', /* U+2298 */
+      '?', /* U+2299 */
+      '?', /* U+229A */
+      '?', /* U+229B */
+      '?', /* U+229C */
+      '?', /* U+229D */
+      '?', /* U+229E */
+      '?', /* U+229F */
+      '?', /* U+22A0 */
+      '?', /* U+22A1 */
+      '?', /* U+22A2 */
+      '?', /* U+22A3 */
+      '?', /* U+22A4 */
+   0x8796, /* U+22A5 */
+      '?', /* U+22A6 */
+      '?', /* U+22A7 */
+      '?', /* U+22A8 */
+      '?', /* U+22A9 */
+      '?', /* U+22AA */
+      '?', /* U+22AB */
+      '?', /* U+22AC */
+      '?', /* U+22AD */
+      '?', /* U+22AE */
+      '?', /* U+22AF */
+      '?', /* U+22B0 */
+      '?', /* U+22B1 */
+      '?', /* U+22B2 */
+      '?', /* U+22B3 */
+      '?', /* U+22B4 */
+      '?', /* U+22B5 */
+      '?', /* U+22B6 */
+      '?', /* U+22B7 */
+      '?', /* U+22B8 */
+      '?', /* U+22B9 */
+      '?', /* U+22BA */
+      '?', /* U+22BB */
+      '?', /* U+22BC */
+      '?', /* U+22BD */
+      '?', /* U+22BE */
+   0x8799, /* U+22BF */
+      '?', /* U+22C0 */
+      '?', /* U+22C1 */
+      '?', /* U+22C2 */
+      '?', /* U+22C3 */
+      '?', /* U+22C4 */
+      '?', /* U+22C5 */
+      '?', /* U+22C6 */
+      '?', /* U+22C7 */
+      '?', /* U+22C8 */
+      '?', /* U+22C9 */
+      '?', /* U+22CA */
+      '?', /* U+22CB */
+      '?', /* U+22CC */
+      '?', /* U+22CD */
+      '?', /* U+22CE */
+      '?', /* U+22CF */
+      '?', /* U+22D0 */
+      '?', /* U+22D1 */
+      '?', /* U+22D2 */
+      '?', /* U+22D3 */
+      '?', /* U+22D4 */
+      '?', /* U+22D5 */
+      '?', /* U+22D6 */
+      '?', /* U+22D7 */
+      '?', /* U+22D8 */
+      '?', /* U+22D9 */
+      '?', /* U+22DA */
+      '?', /* U+22DB */
+      '?', /* U+22DC */
+      '?', /* U+22DD */
+      '?', /* U+22DE */
+      '?', /* U+22DF */
+      '?', /* U+22E0 */
+      '?', /* U+22E1 */
+      '?', /* U+22E2 */
+      '?', /* U+22E3 */
+      '?', /* U+22E4 */
+      '?', /* U+22E5 */
+      '?', /* U+22E6 */
+      '?', /* U+22E7 */
+      '?', /* U+22E8 */
+      '?', /* U+22E9 */
+      '?', /* U+22EA */
+      '?', /* U+22EB */
+      '?', /* U+22EC */
+      '?', /* U+22ED */
+      '?', /* U+22EE */
+      '?', /* U+22EF */
+      '?', /* U+22F0 */
+      '?', /* U+22F1 */
+      '?', /* U+22F2 */
+      '?', /* U+22F3 */
+      '?', /* U+22F4 */
+      '?', /* U+22F5 */
+      '?', /* U+22F6 */
+      '?', /* U+22F7 */
+      '?', /* U+22F8 */
+      '?', /* U+22F9 */
+      '?', /* U+22FA */
+      '?', /* U+22FB */
+      '?', /* U+22FC */
+      '?', /* U+22FD */
+      '?', /* U+22FE */
+      '?', /* U+22FF */
+      '?', /* U+2300 */
+      '?', /* U+2301 */
+      '?', /* U+2302 */
+      '?', /* U+2303 */
+      '?', /* U+2304 */
+      '?', /* U+2305 */
+      '?', /* U+2306 */
+      '?', /* U+2307 */
+      '?', /* U+2308 */
+      '?', /* U+2309 */
+      '?', /* U+230A */
+      '?', /* U+230B */
+      '?', /* U+230C */
+      '?', /* U+230D */
+      '?', /* U+230E */
+      '?', /* U+230F */
+      '?', /* U+2310 */
+      '?', /* U+2311 */
+   0x81dc, /* U+2312 */
+      '?', /* U+2313 */
+      '?', /* U+2314 */
+      '?', /* U+2315 */
+      '?', /* U+2316 */
+      '?', /* U+2317 */
+      '?', /* U+2318 */
+      '?', /* U+2319 */
+      '?', /* U+231A */
+      '?', /* U+231B */
+      '?', /* U+231C */
+      '?', /* U+231D */
+      '?', /* U+231E */
+      '?', /* U+231F */
+      '?', /* U+2320 */
+      '?', /* U+2321 */
+      '?', /* U+2322 */
+      '?', /* U+2323 */
+      '?', /* U+2324 */
+      '?', /* U+2325 */
+      '?', /* U+2326 */
+      '?', /* U+2327 */
+      '?', /* U+2328 */
+      '?', /* U+2329 */
+      '?', /* U+232A */
+      '?', /* U+232B */
+      '?', /* U+232C */
+      '?', /* U+232D */
+      '?', /* U+232E */
+      '?', /* U+232F */
+      '?', /* U+2330 */
+      '?', /* U+2331 */
+      '?', /* U+2332 */
+      '?', /* U+2333 */
+      '?', /* U+2334 */
+      '?', /* U+2335 */
+      '?', /* U+2336 */
+      '?', /* U+2337 */
+      '?', /* U+2338 */
+      '?', /* U+2339 */
+      '?', /* U+233A */
+      '?', /* U+233B */
+      '?', /* U+233C */
+      '?', /* U+233D */
+      '?', /* U+233E */
+      '?', /* U+233F */
+      '?', /* U+2340 */
+      '?', /* U+2341 */
+      '?', /* U+2342 */
+      '?', /* U+2343 */
+      '?', /* U+2344 */
+      '?', /* U+2345 */
+      '?', /* U+2346 */
+      '?', /* U+2347 */
+      '?', /* U+2348 */
+      '?', /* U+2349 */
+      '?', /* U+234A */
+      '?', /* U+234B */
+      '?', /* U+234C */
+      '?', /* U+234D */
+      '?', /* U+234E */
+      '?', /* U+234F */
+      '?', /* U+2350 */
+      '?', /* U+2351 */
+      '?', /* U+2352 */
+      '?', /* U+2353 */
+      '?', /* U+2354 */
+      '?', /* U+2355 */
+      '?', /* U+2356 */
+      '?', /* U+2357 */
+      '?', /* U+2358 */
+      '?', /* U+2359 */
+      '?', /* U+235A */
+      '?', /* U+235B */
+      '?', /* U+235C */
+      '?', /* U+235D */
+      '?', /* U+235E */
+      '?', /* U+235F */
+      '?', /* U+2360 */
+      '?', /* U+2361 */
+      '?', /* U+2362 */
+      '?', /* U+2363 */
+      '?', /* U+2364 */
+      '?', /* U+2365 */
+      '?', /* U+2366 */
+      '?', /* U+2367 */
+      '?', /* U+2368 */
+      '?', /* U+2369 */
+      '?', /* U+236A */
+      '?', /* U+236B */
+      '?', /* U+236C */
+      '?', /* U+236D */
+      '?', /* U+236E */
+      '?', /* U+236F */
+      '?', /* U+2370 */
+      '?', /* U+2371 */
+      '?', /* U+2372 */
+      '?', /* U+2373 */
+      '?', /* U+2374 */
+      '?', /* U+2375 */
+      '?', /* U+2376 */
+      '?', /* U+2377 */
+      '?', /* U+2378 */
+      '?', /* U+2379 */
+      '?', /* U+237A */
+      '?', /* U+237B */
+      '?', /* U+237C */
+      '?', /* U+237D */
+      '?', /* U+237E */
+      '?', /* U+237F */
+      '?', /* U+2380 */
+      '?', /* U+2381 */
+      '?', /* U+2382 */
+      '?', /* U+2383 */
+      '?', /* U+2384 */
+      '?', /* U+2385 */
+      '?', /* U+2386 */
+      '?', /* U+2387 */
+      '?', /* U+2388 */
+      '?', /* U+2389 */
+      '?', /* U+238A */
+      '?', /* U+238B */
+      '?', /* U+238C */
+      '?', /* U+238D */
+      '?', /* U+238E */
+      '?', /* U+238F */
+      '?', /* U+2390 */
+      '?', /* U+2391 */
+      '?', /* U+2392 */
+      '?', /* U+2393 */
+      '?', /* U+2394 */
+      '?', /* U+2395 */
+      '?', /* U+2396 */
+      '?', /* U+2397 */
+      '?', /* U+2398 */
+      '?', /* U+2399 */
+      '?', /* U+239A */
+      '?', /* U+239B */
+      '?', /* U+239C */
+      '?', /* U+239D */
+      '?', /* U+239E */
+      '?', /* U+239F */
+      '?', /* U+23A0 */
+      '?', /* U+23A1 */
+      '?', /* U+23A2 */
+      '?', /* U+23A3 */
+      '?', /* U+23A4 */
+      '?', /* U+23A5 */
+      '?', /* U+23A6 */
+      '?', /* U+23A7 */
+      '?', /* U+23A8 */
+      '?', /* U+23A9 */
+      '?', /* U+23AA */
+      '?', /* U+23AB */
+      '?', /* U+23AC */
+      '?', /* U+23AD */
+      '?', /* U+23AE */
+      '?', /* U+23AF */
+      '?', /* U+23B0 */
+      '?', /* U+23B1 */
+      '?', /* U+23B2 */
+      '?', /* U+23B3 */
+      '?', /* U+23B4 */
+      '?', /* U+23B5 */
+      '?', /* U+23B6 */
+      '?', /* U+23B7 */
+      '?', /* U+23B8 */
+      '?', /* U+23B9 */
+      '?', /* U+23BA */
+      '?', /* U+23BB */
+      '?', /* U+23BC */
+      '?', /* U+23BD */
+      '?', /* U+23BE */
+      '?', /* U+23BF */
+      '?', /* U+23C0 */
+      '?', /* U+23C1 */
+      '?', /* U+23C2 */
+      '?', /* U+23C3 */
+      '?', /* U+23C4 */
+      '?', /* U+23C5 */
+      '?', /* U+23C6 */
+      '?', /* U+23C7 */
+      '?', /* U+23C8 */
+      '?', /* U+23C9 */
+      '?', /* U+23CA */
+      '?', /* U+23CB */
+      '?', /* U+23CC */
+      '?', /* U+23CD */
+      '?', /* U+23CE */
+      '?', /* U+23CF */
+      '?', /* U+23D0 */
+      '?', /* U+23D1 */
+      '?', /* U+23D2 */
+      '?', /* U+23D3 */
+      '?', /* U+23D4 */
+      '?', /* U+23D5 */
+      '?', /* U+23D6 */
+      '?', /* U+23D7 */
+      '?', /* U+23D8 */
+      '?', /* U+23D9 */
+      '?', /* U+23DA */
+      '?', /* U+23DB */
+      '?', /* U+23DC */
+      '?', /* U+23DD */
+      '?', /* U+23DE */
+      '?', /* U+23DF */
+      '?', /* U+23E0 */
+      '?', /* U+23E1 */
+      '?', /* U+23E2 */
+      '?', /* U+23E3 */
+      '?', /* U+23E4 */
+      '?', /* U+23E5 */
+      '?', /* U+23E6 */
+      '?', /* U+23E7 */
+      '?', /* U+23E8 */
+      '?', /* U+23E9 */
+      '?', /* U+23EA */
+      '?', /* U+23EB */
+      '?', /* U+23EC */
+      '?', /* U+23ED */
+      '?', /* U+23EE */
+      '?', /* U+23EF */
+      '?', /* U+23F0 */
+      '?', /* U+23F1 */
+      '?', /* U+23F2 */
+      '?', /* U+23F3 */
+      '?', /* U+23F4 */
+      '?', /* U+23F5 */
+      '?', /* U+23F6 */
+      '?', /* U+23F7 */
+      '?', /* U+23F8 */
+      '?', /* U+23F9 */
+      '?', /* U+23FA */
+      '?', /* U+23FB */
+      '?', /* U+23FC */
+      '?', /* U+23FD */
+      '?', /* U+23FE */
+      '?', /* U+23FF */
+      '?', /* U+2400 */
+      '?', /* U+2401 */
+      '?', /* U+2402 */
+      '?', /* U+2403 */
+      '?', /* U+2404 */
+      '?', /* U+2405 */
+      '?', /* U+2406 */
+      '?', /* U+2407 */
+      '?', /* U+2408 */
+      '?', /* U+2409 */
+      '?', /* U+240A */
+      '?', /* U+240B */
+      '?', /* U+240C */
+      '?', /* U+240D */
+      '?', /* U+240E */
+      '?', /* U+240F */
+      '?', /* U+2410 */
+      '?', /* U+2411 */
+      '?', /* U+2412 */
+      '?', /* U+2413 */
+      '?', /* U+2414 */
+      '?', /* U+2415 */
+      '?', /* U+2416 */
+      '?', /* U+2417 */
+      '?', /* U+2418 */
+      '?', /* U+2419 */
+      '?', /* U+241A */
+      '?', /* U+241B */
+      '?', /* U+241C */
+      '?', /* U+241D */
+      '?', /* U+241E */
+      '?', /* U+241F */
+      '?', /* U+2420 */
+      '?', /* U+2421 */
+      '?', /* U+2422 */
+      '?', /* U+2423 */
+      '?', /* U+2424 */
+      '?', /* U+2425 */
+      '?', /* U+2426 */
+      '?', /* U+2427 */
+      '?', /* U+2428 */
+      '?', /* U+2429 */
+      '?', /* U+242A */
+      '?', /* U+242B */
+      '?', /* U+242C */
+      '?', /* U+242D */
+      '?', /* U+242E */
+      '?', /* U+242F */
+      '?', /* U+2430 */
+      '?', /* U+2431 */
+      '?', /* U+2432 */
+      '?', /* U+2433 */
+      '?', /* U+2434 */
+      '?', /* U+2435 */
+      '?', /* U+2436 */
+      '?', /* U+2437 */
+      '?', /* U+2438 */
+      '?', /* U+2439 */
+      '?', /* U+243A */
+      '?', /* U+243B */
+      '?', /* U+243C */
+      '?', /* U+243D */
+      '?', /* U+243E */
+      '?', /* U+243F */
+      '?', /* U+2440 */
+      '?', /* U+2441 */
+      '?', /* U+2442 */
+      '?', /* U+2443 */
+      '?', /* U+2444 */
+      '?', /* U+2445 */
+      '?', /* U+2446 */
+      '?', /* U+2447 */
+      '?', /* U+2448 */
+      '?', /* U+2449 */
+      '?', /* U+244A */
+      '?', /* U+244B */
+      '?', /* U+244C */
+      '?', /* U+244D */
+      '?', /* U+244E */
+      '?', /* U+244F */
+      '?', /* U+2450 */
+      '?', /* U+2451 */
+      '?', /* U+2452 */
+      '?', /* U+2453 */
+      '?', /* U+2454 */
+      '?', /* U+2455 */
+      '?', /* U+2456 */
+      '?', /* U+2457 */
+      '?', /* U+2458 */
+      '?', /* U+2459 */
+      '?', /* U+245A */
+      '?', /* U+245B */
+      '?', /* U+245C */
+      '?', /* U+245D */
+      '?', /* U+245E */
+      '?', /* U+245F */
+   0x8740, /* U+2460 */
+   0x8741, /* U+2461 */
+   0x8742, /* U+2462 */
+   0x8743, /* U+2463 */
+   0x8744, /* U+2464 */
+   0x8745, /* U+2465 */
+   0x8746, /* U+2466 */
+   0x8747, /* U+2467 */
+   0x8748, /* U+2468 */
+   0x8749, /* U+2469 */
+   0x874a, /* U+246A */
+   0x874b, /* U+246B */
+   0x874c, /* U+246C */
+   0x874d, /* U+246D */
+   0x874e, /* U+246E */
+   0x874f, /* U+246F */
+   0x8750, /* U+2470 */
+   0x8751, /* U+2471 */
+   0x8752, /* U+2472 */
+   0x8753, /* U+2473 */
+      '?', /* U+2474 */
+      '?', /* U+2475 */
+      '?', /* U+2476 */
+      '?', /* U+2477 */
+      '?', /* U+2478 */
+      '?', /* U+2479 */
+      '?', /* U+247A */
+      '?', /* U+247B */
+      '?', /* U+247C */
+      '?', /* U+247D */
+      '?', /* U+247E */
+      '?', /* U+247F */
+      '?', /* U+2480 */
+      '?', /* U+2481 */
+      '?', /* U+2482 */
+      '?', /* U+2483 */
+      '?', /* U+2484 */
+      '?', /* U+2485 */
+      '?', /* U+2486 */
+      '?', /* U+2487 */
+      '?', /* U+2488 */
+      '?', /* U+2489 */
+      '?', /* U+248A */
+      '?', /* U+248B */
+      '?', /* U+248C */
+      '?', /* U+248D */
+      '?', /* U+248E */
+      '?', /* U+248F */
+      '?', /* U+2490 */
+      '?', /* U+2491 */
+      '?', /* U+2492 */
+      '?', /* U+2493 */
+      '?', /* U+2494 */
+      '?', /* U+2495 */
+      '?', /* U+2496 */
+      '?', /* U+2497 */
+      '?', /* U+2498 */
+      '?', /* U+2499 */
+      '?', /* U+249A */
+      '?', /* U+249B */
+      '?', /* U+249C */
+      '?', /* U+249D */
+      '?', /* U+249E */
+      '?', /* U+249F */
+      '?', /* U+24A0 */
+      '?', /* U+24A1 */
+      '?', /* U+24A2 */
+      '?', /* U+24A3 */
+      '?', /* U+24A4 */
+      '?', /* U+24A5 */
+      '?', /* U+24A6 */
+      '?', /* U+24A7 */
+      '?', /* U+24A8 */
+      '?', /* U+24A9 */
+      '?', /* U+24AA */
+      '?', /* U+24AB */
+      '?', /* U+24AC */
+      '?', /* U+24AD */
+      '?', /* U+24AE */
+      '?', /* U+24AF */
+      '?', /* U+24B0 */
+      '?', /* U+24B1 */
+      '?', /* U+24B2 */
+      '?', /* U+24B3 */
+      '?', /* U+24B4 */
+      '?', /* U+24B5 */
+      '?', /* U+24B6 */
+      '?', /* U+24B7 */
+      '?', /* U+24B8 */
+      '?', /* U+24B9 */
+      '?', /* U+24BA */
+      '?', /* U+24BB */
+      '?', /* U+24BC */
+      '?', /* U+24BD */
+      '?', /* U+24BE */
+      '?', /* U+24BF */
+      '?', /* U+24C0 */
+      '?', /* U+24C1 */
+      '?', /* U+24C2 */
+      '?', /* U+24C3 */
+      '?', /* U+24C4 */
+      '?', /* U+24C5 */
+      '?', /* U+24C6 */
+      '?', /* U+24C7 */
+      '?', /* U+24C8 */
+      '?', /* U+24C9 */
+      '?', /* U+24CA */
+      '?', /* U+24CB */
+      '?', /* U+24CC */
+      '?', /* U+24CD */
+      '?', /* U+24CE */
+      '?', /* U+24CF */
+      '?', /* U+24D0 */
+      '?', /* U+24D1 */
+      '?', /* U+24D2 */
+      '?', /* U+24D3 */
+      '?', /* U+24D4 */
+      '?', /* U+24D5 */
+      '?', /* U+24D6 */
+      '?', /* U+24D7 */
+      '?', /* U+24D8 */
+      '?', /* U+24D9 */
+      '?', /* U+24DA */
+      '?', /* U+24DB */
+      '?', /* U+24DC */
+      '?', /* U+24DD */
+      '?', /* U+24DE */
+      '?', /* U+24DF */
+      '?', /* U+24E0 */
+      '?', /* U+24E1 */
+      '?', /* U+24E2 */
+      '?', /* U+24E3 */
+      '?', /* U+24E4 */
+      '?', /* U+24E5 */
+      '?', /* U+24E6 */
+      '?', /* U+24E7 */
+      '?', /* U+24E8 */
+      '?', /* U+24E9 */
+      '?', /* U+24EA */
+      '?', /* U+24EB */
+      '?', /* U+24EC */
+      '?', /* U+24ED */
+      '?', /* U+24EE */
+      '?', /* U+24EF */
+      '?', /* U+24F0 */
+      '?', /* U+24F1 */
+      '?', /* U+24F2 */
+      '?', /* U+24F3 */
+      '?', /* U+24F4 */
+      '?', /* U+24F5 */
+      '?', /* U+24F6 */
+      '?', /* U+24F7 */
+      '?', /* U+24F8 */
+      '?', /* U+24F9 */
+      '?', /* U+24FA */
+      '?', /* U+24FB */
+      '?', /* U+24FC */
+      '?', /* U+24FD */
+      '?', /* U+24FE */
+      '?', /* U+24FF */
+   0x849f, /* U+2500 */
+   0x84aa, /* U+2501 */
+   0x84a0, /* U+2502 */
+   0x84ab, /* U+2503 */
+      '?', /* U+2504 */
+      '?', /* U+2505 */
+      '?', /* U+2506 */
+      '?', /* U+2507 */
+      '?', /* U+2508 */
+      '?', /* U+2509 */
+      '?', /* U+250A */
+      '?', /* U+250B */
+   0x84a1, /* U+250C */
+      '?', /* U+250D */
+      '?', /* U+250E */
+   0x84ac, /* U+250F */
+   0x84a2, /* U+2510 */
+      '?', /* U+2511 */
+      '?', /* U+2512 */
+   0x84ad, /* U+2513 */
+   0x84a4, /* U+2514 */
+      '?', /* U+2515 */
+      '?', /* U+2516 */
+   0x84af, /* U+2517 */
+   0x84a3, /* U+2518 */
+      '?', /* U+2519 */
+      '?', /* U+251A */
+   0x84ae, /* U+251B */
+   0x84a5, /* U+251C */
+   0x84ba, /* U+251D */
+      '?', /* U+251E */
+      '?', /* U+251F */
+   0x84b5, /* U+2520 */
+      '?', /* U+2521 */
+      '?', /* U+2522 */
+   0x84b0, /* U+2523 */
+   0x84a7, /* U+2524 */
+   0x84bc, /* U+2525 */
+      '?', /* U+2526 */
+      '?', /* U+2527 */
+   0x84b7, /* U+2528 */
+      '?', /* U+2529 */
+      '?', /* U+252A */
+   0x84b2, /* U+252B */
+   0x84a6, /* U+252C */
+      '?', /* U+252D */
+      '?', /* U+252E */
+   0x84b6, /* U+252F */
+   0x84bb, /* U+2530 */
+      '?', /* U+2531 */
+      '?', /* U+2532 */
+   0x84b1, /* U+2533 */
+   0x84a8, /* U+2534 */
+      '?', /* U+2535 */
+      '?', /* U+2536 */
+   0x84b8, /* U+2537 */
+   0x84bd, /* U+2538 */
+      '?', /* U+2539 */
+      '?', /* U+253A */
+   0x84b3, /* U+253B */
+   0x84a9, /* U+253C */
+      '?', /* U+253D */
+      '?', /* U+253E */
+   0x84b9, /* U+253F */
+      '?', /* U+2540 */
+      '?', /* U+2541 */
+   0x84be, /* U+2542 */
+      '?', /* U+2543 */
+      '?', /* U+2544 */
+      '?', /* U+2545 */
+      '?', /* U+2546 */
+      '?', /* U+2547 */
+      '?', /* U+2548 */
+      '?', /* U+2549 */
+      '?', /* U+254A */
+   0x84b4, /* U+254B */
+      '?', /* U+254C */
+      '?', /* U+254D */
+      '?', /* U+254E */
+      '?', /* U+254F */
+      '?', /* U+2550 */
+      '?', /* U+2551 */
+      '?', /* U+2552 */
+      '?', /* U+2553 */
+      '?', /* U+2554 */
+      '?', /* U+2555 */
+      '?', /* U+2556 */
+      '?', /* U+2557 */
+      '?', /* U+2558 */
+      '?', /* U+2559 */
+      '?', /* U+255A */
+      '?', /* U+255B */
+      '?', /* U+255C */
+      '?', /* U+255D */
+      '?', /* U+255E */
+      '?', /* U+255F */
+      '?', /* U+2560 */
+      '?', /* U+2561 */
+      '?', /* U+2562 */
+      '?', /* U+2563 */
+      '?', /* U+2564 */
+      '?', /* U+2565 */
+      '?', /* U+2566 */
+      '?', /* U+2567 */
+      '?', /* U+2568 */
+      '?', /* U+2569 */
+      '?', /* U+256A */
+      '?', /* U+256B */
+      '?', /* U+256C */
+      '?', /* U+256D */
+      '?', /* U+256E */
+      '?', /* U+256F */
+      '?', /* U+2570 */
+      '?', /* U+2571 */
+      '?', /* U+2572 */
+      '?', /* U+2573 */
+      '?', /* U+2574 */
+      '?', /* U+2575 */
+      '?', /* U+2576 */
+      '?', /* U+2577 */
+      '?', /* U+2578 */
+      '?', /* U+2579 */
+      '?', /* U+257A */
+      '?', /* U+257B */
+      '?', /* U+257C */
+      '?', /* U+257D */
+      '?', /* U+257E */
+      '?', /* U+257F */
+      '?', /* U+2580 */
+      '?', /* U+2581 */
+      '?', /* U+2582 */
+      '?', /* U+2583 */
+      '?', /* U+2584 */
+      '?', /* U+2585 */
+      '?', /* U+2586 */
+      '?', /* U+2587 */
+      '?', /* U+2588 */
+      '?', /* U+2589 */
+      '?', /* U+258A */
+      '?', /* U+258B */
+      '?', /* U+258C */
+      '?', /* U+258D */
+      '?', /* U+258E */
+      '?', /* U+258F */
+      '?', /* U+2590 */
+      '?', /* U+2591 */
+      '?', /* U+2592 */
+      '?', /* U+2593 */
+      '?', /* U+2594 */
+      '?', /* U+2595 */
+      '?', /* U+2596 */
+      '?', /* U+2597 */
+      '?', /* U+2598 */
+      '?', /* U+2599 */
+      '?', /* U+259A */
+      '?', /* U+259B */
+      '?', /* U+259C */
+      '?', /* U+259D */
+      '?', /* U+259E */
+      '?', /* U+259F */
+   0x81a1, /* U+25A0 */
+   0x81a0, /* U+25A1 */
+      '?', /* U+25A2 */
+      '?', /* U+25A3 */
+      '?', /* U+25A4 */
+      '?', /* U+25A5 */
+      '?', /* U+25A6 */
+      '?', /* U+25A7 */
+      '?', /* U+25A8 */
+      '?', /* U+25A9 */
+      '?', /* U+25AA */
+      '?', /* U+25AB */
+      '?', /* U+25AC */
+      '?', /* U+25AD */
+      '?', /* U+25AE */
+      '?', /* U+25AF */
+      '?', /* U+25B0 */
+      '?', /* U+25B1 */
+   0x81a3, /* U+25B2 */
+   0x81a2, /* U+25B3 */
+      '?', /* U+25B4 */
+      '?', /* U+25B5 */
+      '?', /* U+25B6 */
+      '?', /* U+25B7 */
+      '?', /* U+25B8 */
+      '?', /* U+25B9 */
+      '?', /* U+25BA */
+      '?', /* U+25BB */
+   0x81a5, /* U+25BC */
+   0x81a4, /* U+25BD */
+      '?', /* U+25BE */
+      '?', /* U+25BF */
+      '?', /* U+25C0 */
+      '?', /* U+25C1 */
+      '?', /* U+25C2 */
+      '?', /* U+25C3 */
+      '?', /* U+25C4 */
+      '?', /* U+25C5 */
+   0x819f, /* U+25C6 */
+   0x819e, /* U+25C7 */
+      '?', /* U+25C8 */
+      '?', /* U+25C9 */
+      '?', /* U+25CA */
+   0x819b, /* U+25CB */
+      '?', /* U+25CC */
+      '?', /* U+25CD */
+   0x819d, /* U+25CE */
+   0x819c, /* U+25CF */
+      '?', /* U+25D0 */
+      '?', /* U+25D1 */
+      '?', /* U+25D2 */
+      '?', /* U+25D3 */
+      '?', /* U+25D4 */
+      '?', /* U+25D5 */
+      '?', /* U+25D6 */
+      '?', /* U+25D7 */
+      '?', /* U+25D8 */
+      '?', /* U+25D9 */
+      '?', /* U+25DA */
+      '?', /* U+25DB */
+      '?', /* U+25DC */
+      '?', /* U+25DD */
+      '?', /* U+25DE */
+      '?', /* U+25DF */
+      '?', /* U+25E0 */
+      '?', /* U+25E1 */
+      '?', /* U+25E2 */
+      '?', /* U+25E3 */
+      '?', /* U+25E4 */
+      '?', /* U+25E5 */
+      '?', /* U+25E6 */
+      '?', /* U+25E7 */
+      '?', /* U+25E8 */
+      '?', /* U+25E9 */
+      '?', /* U+25EA */
+      '?', /* U+25EB */
+      '?', /* U+25EC */
+      '?', /* U+25ED */
+      '?', /* U+25EE */
+   0x81fc, /* U+25EF */
+      '?', /* U+25F0 */
+      '?', /* U+25F1 */
+      '?', /* U+25F2 */
+      '?', /* U+25F3 */
+      '?', /* U+25F4 */
+      '?', /* U+25F5 */
+      '?', /* U+25F6 */
+      '?', /* U+25F7 */
+      '?', /* U+25F8 */
+      '?', /* U+25F9 */
+      '?', /* U+25FA */
+      '?', /* U+25FB */
+      '?', /* U+25FC */
+      '?', /* U+25FD */
+      '?', /* U+25FE */
+      '?', /* U+25FF */
+      '?', /* U+2600 */
+      '?', /* U+2601 */
+      '?', /* U+2602 */
+      '?', /* U+2603 */
+      '?', /* U+2604 */
+   0x819a, /* U+2605 */
+   0x8199, /* U+2606 */
+      '?', /* U+2607 */
+      '?', /* U+2608 */
+      '?', /* U+2609 */
+      '?', /* U+260A */
+      '?', /* U+260B */
+      '?', /* U+260C */
+      '?', /* U+260D */
+      '?', /* U+260E */
+      '?', /* U+260F */
+      '?', /* U+2610 */
+      '?', /* U+2611 */
+      '?', /* U+2612 */
+      '?', /* U+2613 */
+      '?', /* U+2614 */
+      '?', /* U+2615 */
+      '?', /* U+2616 */
+      '?', /* U+2617 */
+      '?', /* U+2618 */
+      '?', /* U+2619 */
+      '?', /* U+261A */
+      '?', /* U+261B */
+      '?', /* U+261C */
+      '?', /* U+261D */
+      '?', /* U+261E */
+      '?', /* U+261F */
+      '?', /* U+2620 */
+      '?', /* U+2621 */
+      '?', /* U+2622 */
+      '?', /* U+2623 */
+      '?', /* U+2624 */
+      '?', /* U+2625 */
+      '?', /* U+2626 */
+      '?', /* U+2627 */
+      '?', /* U+2628 */
+      '?', /* U+2629 */
+      '?', /* U+262A */
+      '?', /* U+262B */
+      '?', /* U+262C */
+      '?', /* U+262D */
+      '?', /* U+262E */
+      '?', /* U+262F */
+      '?', /* U+2630 */
+      '?', /* U+2631 */
+      '?', /* U+2632 */
+      '?', /* U+2633 */
+      '?', /* U+2634 */
+      '?', /* U+2635 */
+      '?', /* U+2636 */
+      '?', /* U+2637 */
+      '?', /* U+2638 */
+      '?', /* U+2639 */
+      '?', /* U+263A */
+      '?', /* U+263B */
+      '?', /* U+263C */
+      '?', /* U+263D */
+      '?', /* U+263E */
+      '?', /* U+263F */
+   0x818a, /* U+2640 */
+      '?', /* U+2641 */
+   0x8189, /* U+2642 */
+      '?', /* U+2643 */
+      '?', /* U+2644 */
+      '?', /* U+2645 */
+      '?', /* U+2646 */
+      '?', /* U+2647 */
+      '?', /* U+2648 */
+      '?', /* U+2649 */
+      '?', /* U+264A */
+      '?', /* U+264B */
+      '?', /* U+264C */
+      '?', /* U+264D */
+      '?', /* U+264E */
+      '?', /* U+264F */
+      '?', /* U+2650 */
+      '?', /* U+2651 */
+      '?', /* U+2652 */
+      '?', /* U+2653 */
+      '?', /* U+2654 */
+      '?', /* U+2655 */
+      '?', /* U+2656 */
+      '?', /* U+2657 */
+      '?', /* U+2658 */
+      '?', /* U+2659 */
+      '?', /* U+265A */
+      '?', /* U+265B */
+      '?', /* U+265C */
+      '?', /* U+265D */
+      '?', /* U+265E */
+      '?', /* U+265F */
+      '?', /* U+2660 */
+      '?', /* U+2661 */
+      '?', /* U+2662 */
+      '?', /* U+2663 */
+      '?', /* U+2664 */
+      '?', /* U+2665 */
+      '?', /* U+2666 */
+      '?', /* U+2667 */
+      '?', /* U+2668 */
+      '?', /* U+2669 */
+   0x81f4, /* U+266A */
+      '?', /* U+266B */
+      '?', /* U+266C */
+   0x81f3, /* U+266D */
+      '?', /* U+266E */
+   0x81f2, /* U+266F */
+      '?', /* U+2670 */
+      '?', /* U+2671 */
+      '?', /* U+2672 */
+      '?', /* U+2673 */
+      '?', /* U+2674 */
+      '?', /* U+2675 */
+      '?', /* U+2676 */
+      '?', /* U+2677 */
+      '?', /* U+2678 */
+      '?', /* U+2679 */
+      '?', /* U+267A */
+      '?', /* U+267B */
+      '?', /* U+267C */
+      '?', /* U+267D */
+      '?', /* U+267E */
+      '?', /* U+267F */
+      '?', /* U+2680 */
+      '?', /* U+2681 */
+      '?', /* U+2682 */
+      '?', /* U+2683 */
+      '?', /* U+2684 */
+      '?', /* U+2685 */
+      '?', /* U+2686 */
+      '?', /* U+2687 */
+      '?', /* U+2688 */
+      '?', /* U+2689 */
+      '?', /* U+268A */
+      '?', /* U+268B */
+      '?', /* U+268C */
+      '?', /* U+268D */
+      '?', /* U+268E */
+      '?', /* U+268F */
+      '?', /* U+2690 */
+      '?', /* U+2691 */
+      '?', /* U+2692 */
+      '?', /* U+2693 */
+      '?', /* U+2694 */
+      '?', /* U+2695 */
+      '?', /* U+2696 */
+      '?', /* U+2697 */
+      '?', /* U+2698 */
+      '?', /* U+2699 */
+      '?', /* U+269A */
+      '?', /* U+269B */
+      '?', /* U+269C */
+      '?', /* U+269D */
+      '?', /* U+269E */
+      '?', /* U+269F */
+      '?', /* U+26A0 */
+      '?', /* U+26A1 */
+      '?', /* U+26A2 */
+      '?', /* U+26A3 */
+      '?', /* U+26A4 */
+      '?', /* U+26A5 */
+      '?', /* U+26A6 */
+      '?', /* U+26A7 */
+      '?', /* U+26A8 */
+      '?', /* U+26A9 */
+      '?', /* U+26AA */
+      '?', /* U+26AB */
+      '?', /* U+26AC */
+      '?', /* U+26AD */
+      '?', /* U+26AE */
+      '?', /* U+26AF */
+      '?', /* U+26B0 */
+      '?', /* U+26B1 */
+      '?', /* U+26B2 */
+      '?', /* U+26B3 */
+      '?', /* U+26B4 */
+      '?', /* U+26B5 */
+      '?', /* U+26B6 */
+      '?', /* U+26B7 */
+      '?', /* U+26B8 */
+      '?', /* U+26B9 */
+      '?', /* U+26BA */
+      '?', /* U+26BB */
+      '?', /* U+26BC */
+      '?', /* U+26BD */
+      '?', /* U+26BE */
+      '?', /* U+26BF */
+      '?', /* U+26C0 */
+      '?', /* U+26C1 */
+      '?', /* U+26C2 */
+      '?', /* U+26C3 */
+      '?', /* U+26C4 */
+      '?', /* U+26C5 */
+      '?', /* U+26C6 */
+      '?', /* U+26C7 */
+      '?', /* U+26C8 */
+      '?', /* U+26C9 */
+      '?', /* U+26CA */
+      '?', /* U+26CB */
+      '?', /* U+26CC */
+      '?', /* U+26CD */
+      '?', /* U+26CE */
+      '?', /* U+26CF */
+      '?', /* U+26D0 */
+      '?', /* U+26D1 */
+      '?', /* U+26D2 */
+      '?', /* U+26D3 */
+      '?', /* U+26D4 */
+      '?', /* U+26D5 */
+      '?', /* U+26D6 */
+      '?', /* U+26D7 */
+      '?', /* U+26D8 */
+      '?', /* U+26D9 */
+      '?', /* U+26DA */
+      '?', /* U+26DB */
+      '?', /* U+26DC */
+      '?', /* U+26DD */
+      '?', /* U+26DE */
+      '?', /* U+26DF */
+      '?', /* U+26E0 */
+      '?', /* U+26E1 */
+      '?', /* U+26E2 */
+      '?', /* U+26E3 */
+      '?', /* U+26E4 */
+      '?', /* U+26E5 */
+      '?', /* U+26E6 */
+      '?', /* U+26E7 */
+      '?', /* U+26E8 */
+      '?', /* U+26E9 */
+      '?', /* U+26EA */
+      '?', /* U+26EB */
+      '?', /* U+26EC */
+      '?', /* U+26ED */
+      '?', /* U+26EE */
+      '?', /* U+26EF */
+      '?', /* U+26F0 */
+      '?', /* U+26F1 */
+      '?', /* U+26F2 */
+      '?', /* U+26F3 */
+      '?', /* U+26F4 */
+      '?', /* U+26F5 */
+      '?', /* U+26F6 */
+      '?', /* U+26F7 */
+      '?', /* U+26F8 */
+      '?', /* U+26F9 */
+      '?', /* U+26FA */
+      '?', /* U+26FB */
+      '?', /* U+26FC */
+      '?', /* U+26FD */
+      '?', /* U+26FE */
+      '?', /* U+26FF */
+      '?', /* U+2700 */
+      '?', /* U+2701 */
+      '?', /* U+2702 */
+      '?', /* U+2703 */
+      '?', /* U+2704 */
+      '?', /* U+2705 */
+      '?', /* U+2706 */
+      '?', /* U+2707 */
+      '?', /* U+2708 */
+      '?', /* U+2709 */
+      '?', /* U+270A */
+      '?', /* U+270B */
+      '?', /* U+270C */
+      '?', /* U+270D */
+      '?', /* U+270E */
+      '?', /* U+270F */
+      '?', /* U+2710 */
+      '?', /* U+2711 */
+      '?', /* U+2712 */
+      '?', /* U+2713 */
+      '?', /* U+2714 */
+      '?', /* U+2715 */
+      '?', /* U+2716 */
+      '?', /* U+2717 */
+      '?', /* U+2718 */
+      '?', /* U+2719 */
+      '?', /* U+271A */
+      '?', /* U+271B */
+      '?', /* U+271C */
+      '?', /* U+271D */
+      '?', /* U+271E */
+      '?', /* U+271F */
+      '?', /* U+2720 */
+      '?', /* U+2721 */
+      '?', /* U+2722 */
+      '?', /* U+2723 */
+      '?', /* U+2724 */
+      '?', /* U+2725 */
+      '?', /* U+2726 */
+      '?', /* U+2727 */
+      '?', /* U+2728 */
+      '?', /* U+2729 */
+      '?', /* U+272A */
+      '?', /* U+272B */
+      '?', /* U+272C */
+      '?', /* U+272D */
+      '?', /* U+272E */
+      '?', /* U+272F */
+      '?', /* U+2730 */
+      '?', /* U+2731 */
+      '?', /* U+2732 */
+      '?', /* U+2733 */
+      '?', /* U+2734 */
+      '?', /* U+2735 */
+      '?', /* U+2736 */
+      '?', /* U+2737 */
+      '?', /* U+2738 */
+      '?', /* U+2739 */
+      '?', /* U+273A */
+      '?', /* U+273B */
+      '?', /* U+273C */
+      '?', /* U+273D */
+      '?', /* U+273E */
+      '?', /* U+273F */
+      '?', /* U+2740 */
+      '?', /* U+2741 */
+      '?', /* U+2742 */
+      '?', /* U+2743 */
+      '?', /* U+2744 */
+      '?', /* U+2745 */
+      '?', /* U+2746 */
+      '?', /* U+2747 */
+      '?', /* U+2748 */
+      '?', /* U+2749 */
+      '?', /* U+274A */
+      '?', /* U+274B */
+      '?', /* U+274C */
+      '?', /* U+274D */
+      '?', /* U+274E */
+      '?', /* U+274F */
+      '?', /* U+2750 */
+      '?', /* U+2751 */
+      '?', /* U+2752 */
+      '?', /* U+2753 */
+      '?', /* U+2754 */
+      '?', /* U+2755 */
+      '?', /* U+2756 */
+      '?', /* U+2757 */
+      '?', /* U+2758 */
+      '?', /* U+2759 */
+      '?', /* U+275A */
+      '?', /* U+275B */
+      '?', /* U+275C */
+      '?', /* U+275D */
+      '?', /* U+275E */
+      '?', /* U+275F */
+      '?', /* U+2760 */
+      '?', /* U+2761 */
+      '?', /* U+2762 */
+      '?', /* U+2763 */
+      '?', /* U+2764 */
+      '?', /* U+2765 */
+      '?', /* U+2766 */
+      '?', /* U+2767 */
+      '?', /* U+2768 */
+      '?', /* U+2769 */
+      '?', /* U+276A */
+      '?', /* U+276B */
+      '?', /* U+276C */
+      '?', /* U+276D */
+      '?', /* U+276E */
+      '?', /* U+276F */
+      '?', /* U+2770 */
+      '?', /* U+2771 */
+      '?', /* U+2772 */
+      '?', /* U+2773 */
+      '?', /* U+2774 */
+      '?', /* U+2775 */
+      '?', /* U+2776 */
+      '?', /* U+2777 */
+      '?', /* U+2778 */
+      '?', /* U+2779 */
+      '?', /* U+277A */
+      '?', /* U+277B */
+      '?', /* U+277C */
+      '?', /* U+277D */
+      '?', /* U+277E */
+      '?', /* U+277F */
+      '?', /* U+2780 */
+      '?', /* U+2781 */
+      '?', /* U+2782 */
+      '?', /* U+2783 */
+      '?', /* U+2784 */
+      '?', /* U+2785 */
+      '?', /* U+2786 */
+      '?', /* U+2787 */
+      '?', /* U+2788 */
+      '?', /* U+2789 */
+      '?', /* U+278A */
+      '?', /* U+278B */
+      '?', /* U+278C */
+      '?', /* U+278D */
+      '?', /* U+278E */
+      '?', /* U+278F */
+      '?', /* U+2790 */
+      '?', /* U+2791 */
+      '?', /* U+2792 */
+      '?', /* U+2793 */
+      '?', /* U+2794 */
+      '?', /* U+2795 */
+      '?', /* U+2796 */
+      '?', /* U+2797 */
+      '?', /* U+2798 */
+      '?', /* U+2799 */
+      '?', /* U+279A */
+      '?', /* U+279B */
+      '?', /* U+279C */
+      '?', /* U+279D */
+      '?', /* U+279E */
+      '?', /* U+279F */
+      '?', /* U+27A0 */
+      '?', /* U+27A1 */
+      '?', /* U+27A2 */
+      '?', /* U+27A3 */
+      '?', /* U+27A4 */
+      '?', /* U+27A5 */
+      '?', /* U+27A6 */
+      '?', /* U+27A7 */
+      '?', /* U+27A8 */
+      '?', /* U+27A9 */
+      '?', /* U+27AA */
+      '?', /* U+27AB */
+      '?', /* U+27AC */
+      '?', /* U+27AD */
+      '?', /* U+27AE */
+      '?', /* U+27AF */
+      '?', /* U+27B0 */
+      '?', /* U+27B1 */
+      '?', /* U+27B2 */
+      '?', /* U+27B3 */
+      '?', /* U+27B4 */
+      '?', /* U+27B5 */
+      '?', /* U+27B6 */
+      '?', /* U+27B7 */
+      '?', /* U+27B8 */
+      '?', /* U+27B9 */
+      '?', /* U+27BA */
+      '?', /* U+27BB */
+      '?', /* U+27BC */
+      '?', /* U+27BD */
+      '?', /* U+27BE */
+      '?', /* U+27BF */
+      '?', /* U+27C0 */
+      '?', /* U+27C1 */
+      '?', /* U+27C2 */
+      '?', /* U+27C3 */
+      '?', /* U+27C4 */
+      '?', /* U+27C5 */
+      '?', /* U+27C6 */
+      '?', /* U+27C7 */
+      '?', /* U+27C8 */
+      '?', /* U+27C9 */
+      '?', /* U+27CA */
+      '?', /* U+27CB */
+      '?', /* U+27CC */
+      '?', /* U+27CD */
+      '?', /* U+27CE */
+      '?', /* U+27CF */
+      '?', /* U+27D0 */
+      '?', /* U+27D1 */
+      '?', /* U+27D2 */
+      '?', /* U+27D3 */
+      '?', /* U+27D4 */
+      '?', /* U+27D5 */
+      '?', /* U+27D6 */
+      '?', /* U+27D7 */
+      '?', /* U+27D8 */
+      '?', /* U+27D9 */
+      '?', /* U+27DA */
+      '?', /* U+27DB */
+      '?', /* U+27DC */
+      '?', /* U+27DD */
+      '?', /* U+27DE */
+      '?', /* U+27DF */
+      '?', /* U+27E0 */
+      '?', /* U+27E1 */
+      '?', /* U+27E2 */
+      '?', /* U+27E3 */
+      '?', /* U+27E4 */
+      '?', /* U+27E5 */
+      '?', /* U+27E6 */
+      '?', /* U+27E7 */
+      '?', /* U+27E8 */
+      '?', /* U+27E9 */
+      '?', /* U+27EA */
+      '?', /* U+27EB */
+      '?', /* U+27EC */
+      '?', /* U+27ED */
+      '?', /* U+27EE */
+      '?', /* U+27EF */
+      '?', /* U+27F0 */
+      '?', /* U+27F1 */
+      '?', /* U+27F2 */
+      '?', /* U+27F3 */
+      '?', /* U+27F4 */
+      '?', /* U+27F5 */
+      '?', /* U+27F6 */
+      '?', /* U+27F7 */
+      '?', /* U+27F8 */
+      '?', /* U+27F9 */
+      '?', /* U+27FA */
+      '?', /* U+27FB */
+      '?', /* U+27FC */
+      '?', /* U+27FD */
+      '?', /* U+27FE */
+      '?', /* U+27FF */
+      '?', /* U+2800 */
+      '?', /* U+2801 */
+      '?', /* U+2802 */
+      '?', /* U+2803 */
+      '?', /* U+2804 */
+      '?', /* U+2805 */
+      '?', /* U+2806 */
+      '?', /* U+2807 */
+      '?', /* U+2808 */
+      '?', /* U+2809 */
+      '?', /* U+280A */
+      '?', /* U+280B */
+      '?', /* U+280C */
+      '?', /* U+280D */
+      '?', /* U+280E */
+      '?', /* U+280F */
+      '?', /* U+2810 */
+      '?', /* U+2811 */
+      '?', /* U+2812 */
+      '?', /* U+2813 */
+      '?', /* U+2814 */
+      '?', /* U+2815 */
+      '?', /* U+2816 */
+      '?', /* U+2817 */
+      '?', /* U+2818 */
+      '?', /* U+2819 */
+      '?', /* U+281A */
+      '?', /* U+281B */
+      '?', /* U+281C */
+      '?', /* U+281D */
+      '?', /* U+281E */
+      '?', /* U+281F */
+      '?', /* U+2820 */
+      '?', /* U+2821 */
+      '?', /* U+2822 */
+      '?', /* U+2823 */
+      '?', /* U+2824 */
+      '?', /* U+2825 */
+      '?', /* U+2826 */
+      '?', /* U+2827 */
+      '?', /* U+2828 */
+      '?', /* U+2829 */
+      '?', /* U+282A */
+      '?', /* U+282B */
+      '?', /* U+282C */
+      '?', /* U+282D */
+      '?', /* U+282E */
+      '?', /* U+282F */
+      '?', /* U+2830 */
+      '?', /* U+2831 */
+      '?', /* U+2832 */
+      '?', /* U+2833 */
+      '?', /* U+2834 */
+      '?', /* U+2835 */
+      '?', /* U+2836 */
+      '?', /* U+2837 */
+      '?', /* U+2838 */
+      '?', /* U+2839 */
+      '?', /* U+283A */
+      '?', /* U+283B */
+      '?', /* U+283C */
+      '?', /* U+283D */
+      '?', /* U+283E */
+      '?', /* U+283F */
+      '?', /* U+2840 */
+      '?', /* U+2841 */
+      '?', /* U+2842 */
+      '?', /* U+2843 */
+      '?', /* U+2844 */
+      '?', /* U+2845 */
+      '?', /* U+2846 */
+      '?', /* U+2847 */
+      '?', /* U+2848 */
+      '?', /* U+2849 */
+      '?', /* U+284A */
+      '?', /* U+284B */
+      '?', /* U+284C */
+      '?', /* U+284D */
+      '?', /* U+284E */
+      '?', /* U+284F */
+      '?', /* U+2850 */
+      '?', /* U+2851 */
+      '?', /* U+2852 */
+      '?', /* U+2853 */
+      '?', /* U+2854 */
+      '?', /* U+2855 */
+      '?', /* U+2856 */
+      '?', /* U+2857 */
+      '?', /* U+2858 */
+      '?', /* U+2859 */
+      '?', /* U+285A */
+      '?', /* U+285B */
+      '?', /* U+285C */
+      '?', /* U+285D */
+      '?', /* U+285E */
+      '?', /* U+285F */
+      '?', /* U+2860 */
+      '?', /* U+2861 */
+      '?', /* U+2862 */
+      '?', /* U+2863 */
+      '?', /* U+2864 */
+      '?', /* U+2865 */
+      '?', /* U+2866 */
+      '?', /* U+2867 */
+      '?', /* U+2868 */
+      '?', /* U+2869 */
+      '?', /* U+286A */
+      '?', /* U+286B */
+      '?', /* U+286C */
+      '?', /* U+286D */
+      '?', /* U+286E */
+      '?', /* U+286F */
+      '?', /* U+2870 */
+      '?', /* U+2871 */
+      '?', /* U+2872 */
+      '?', /* U+2873 */
+      '?', /* U+2874 */
+      '?', /* U+2875 */
+      '?', /* U+2876 */
+      '?', /* U+2877 */
+      '?', /* U+2878 */
+      '?', /* U+2879 */
+      '?', /* U+287A */
+      '?', /* U+287B */
+      '?', /* U+287C */
+      '?', /* U+287D */
+      '?', /* U+287E */
+      '?', /* U+287F */
+      '?', /* U+2880 */
+      '?', /* U+2881 */
+      '?', /* U+2882 */
+      '?', /* U+2883 */
+      '?', /* U+2884 */
+      '?', /* U+2885 */
+      '?', /* U+2886 */
+      '?', /* U+2887 */
+      '?', /* U+2888 */
+      '?', /* U+2889 */
+      '?', /* U+288A */
+      '?', /* U+288B */
+      '?', /* U+288C */
+      '?', /* U+288D */
+      '?', /* U+288E */
+      '?', /* U+288F */
+      '?', /* U+2890 */
+      '?', /* U+2891 */
+      '?', /* U+2892 */
+      '?', /* U+2893 */
+      '?', /* U+2894 */
+      '?', /* U+2895 */
+      '?', /* U+2896 */
+      '?', /* U+2897 */
+      '?', /* U+2898 */
+      '?', /* U+2899 */
+      '?', /* U+289A */
+      '?', /* U+289B */
+      '?', /* U+289C */
+      '?', /* U+289D */
+      '?', /* U+289E */
+      '?', /* U+289F */
+      '?', /* U+28A0 */
+      '?', /* U+28A1 */
+      '?', /* U+28A2 */
+      '?', /* U+28A3 */
+      '?', /* U+28A4 */
+      '?', /* U+28A5 */
+      '?', /* U+28A6 */
+      '?', /* U+28A7 */
+      '?', /* U+28A8 */
+      '?', /* U+28A9 */
+      '?', /* U+28AA */
+      '?', /* U+28AB */
+      '?', /* U+28AC */
+      '?', /* U+28AD */
+      '?', /* U+28AE */
+      '?', /* U+28AF */
+      '?', /* U+28B0 */
+      '?', /* U+28B1 */
+      '?', /* U+28B2 */
+      '?', /* U+28B3 */
+      '?', /* U+28B4 */
+      '?', /* U+28B5 */
+      '?', /* U+28B6 */
+      '?', /* U+28B7 */
+      '?', /* U+28B8 */
+      '?', /* U+28B9 */
+      '?', /* U+28BA */
+      '?', /* U+28BB */
+      '?', /* U+28BC */
+      '?', /* U+28BD */
+      '?', /* U+28BE */
+      '?', /* U+28BF */
+      '?', /* U+28C0 */
+      '?', /* U+28C1 */
+      '?', /* U+28C2 */
+      '?', /* U+28C3 */
+      '?', /* U+28C4 */
+      '?', /* U+28C5 */
+      '?', /* U+28C6 */
+      '?', /* U+28C7 */
+      '?', /* U+28C8 */
+      '?', /* U+28C9 */
+      '?', /* U+28CA */
+      '?', /* U+28CB */
+      '?', /* U+28CC */
+      '?', /* U+28CD */
+      '?', /* U+28CE */
+      '?', /* U+28CF */
+      '?', /* U+28D0 */
+      '?', /* U+28D1 */
+      '?', /* U+28D2 */
+      '?', /* U+28D3 */
+      '?', /* U+28D4 */
+      '?', /* U+28D5 */
+      '?', /* U+28D6 */
+      '?', /* U+28D7 */
+      '?', /* U+28D8 */
+      '?', /* U+28D9 */
+      '?', /* U+28DA */
+      '?', /* U+28DB */
+      '?', /* U+28DC */
+      '?', /* U+28DD */
+      '?', /* U+28DE */
+      '?', /* U+28DF */
+      '?', /* U+28E0 */
+      '?', /* U+28E1 */
+      '?', /* U+28E2 */
+      '?', /* U+28E3 */
+      '?', /* U+28E4 */
+      '?', /* U+28E5 */
+      '?', /* U+28E6 */
+      '?', /* U+28E7 */
+      '?', /* U+28E8 */
+      '?', /* U+28E9 */
+      '?', /* U+28EA */
+      '?', /* U+28EB */
+      '?', /* U+28EC */
+      '?', /* U+28ED */
+      '?', /* U+28EE */
+      '?', /* U+28EF */
+      '?', /* U+28F0 */
+      '?', /* U+28F1 */
+      '?', /* U+28F2 */
+      '?', /* U+28F3 */
+      '?', /* U+28F4 */
+      '?', /* U+28F5 */
+      '?', /* U+28F6 */
+      '?', /* U+28F7 */
+      '?', /* U+28F8 */
+      '?', /* U+28F9 */
+      '?', /* U+28FA */
+      '?', /* U+28FB */
+      '?', /* U+28FC */
+      '?', /* U+28FD */
+      '?', /* U+28FE */
+      '?', /* U+28FF */
+      '?', /* U+2900 */
+      '?', /* U+2901 */
+      '?', /* U+2902 */
+      '?', /* U+2903 */
+      '?', /* U+2904 */
+      '?', /* U+2905 */
+      '?', /* U+2906 */
+      '?', /* U+2907 */
+      '?', /* U+2908 */
+      '?', /* U+2909 */
+      '?', /* U+290A */
+      '?', /* U+290B */
+      '?', /* U+290C */
+      '?', /* U+290D */
+      '?', /* U+290E */
+      '?', /* U+290F */
+      '?', /* U+2910 */
+      '?', /* U+2911 */
+      '?', /* U+2912 */
+      '?', /* U+2913 */
+      '?', /* U+2914 */
+      '?', /* U+2915 */
+      '?', /* U+2916 */
+      '?', /* U+2917 */
+      '?', /* U+2918 */
+      '?', /* U+2919 */
+      '?', /* U+291A */
+      '?', /* U+291B */
+      '?', /* U+291C */
+      '?', /* U+291D */
+      '?', /* U+291E */
+      '?', /* U+291F */
+      '?', /* U+2920 */
+      '?', /* U+2921 */
+      '?', /* U+2922 */
+      '?', /* U+2923 */
+      '?', /* U+2924 */
+      '?', /* U+2925 */
+      '?', /* U+2926 */
+      '?', /* U+2927 */
+      '?', /* U+2928 */
+      '?', /* U+2929 */
+      '?', /* U+292A */
+      '?', /* U+292B */
+      '?', /* U+292C */
+      '?', /* U+292D */
+      '?', /* U+292E */
+      '?', /* U+292F */
+      '?', /* U+2930 */
+      '?', /* U+2931 */
+      '?', /* U+2932 */
+      '?', /* U+2933 */
+      '?', /* U+2934 */
+      '?', /* U+2935 */
+      '?', /* U+2936 */
+      '?', /* U+2937 */
+      '?', /* U+2938 */
+      '?', /* U+2939 */
+      '?', /* U+293A */
+      '?', /* U+293B */
+      '?', /* U+293C */
+      '?', /* U+293D */
+      '?', /* U+293E */
+      '?', /* U+293F */
+      '?', /* U+2940 */
+      '?', /* U+2941 */
+      '?', /* U+2942 */
+      '?', /* U+2943 */
+      '?', /* U+2944 */
+      '?', /* U+2945 */
+      '?', /* U+2946 */
+      '?', /* U+2947 */
+      '?', /* U+2948 */
+      '?', /* U+2949 */
+      '?', /* U+294A */
+      '?', /* U+294B */
+      '?', /* U+294C */
+      '?', /* U+294D */
+      '?', /* U+294E */
+      '?', /* U+294F */
+      '?', /* U+2950 */
+      '?', /* U+2951 */
+      '?', /* U+2952 */
+      '?', /* U+2953 */
+      '?', /* U+2954 */
+      '?', /* U+2955 */
+      '?', /* U+2956 */
+      '?', /* U+2957 */
+      '?', /* U+2958 */
+      '?', /* U+2959 */
+      '?', /* U+295A */
+      '?', /* U+295B */
+      '?', /* U+295C */
+      '?', /* U+295D */
+      '?', /* U+295E */
+      '?', /* U+295F */
+      '?', /* U+2960 */
+      '?', /* U+2961 */
+      '?', /* U+2962 */
+      '?', /* U+2963 */
+      '?', /* U+2964 */
+      '?', /* U+2965 */
+      '?', /* U+2966 */
+      '?', /* U+2967 */
+      '?', /* U+2968 */
+      '?', /* U+2969 */
+      '?', /* U+296A */
+      '?', /* U+296B */
+      '?', /* U+296C */
+      '?', /* U+296D */
+      '?', /* U+296E */
+      '?', /* U+296F */
+      '?', /* U+2970 */
+      '?', /* U+2971 */
+      '?', /* U+2972 */
+      '?', /* U+2973 */
+      '?', /* U+2974 */
+      '?', /* U+2975 */
+      '?', /* U+2976 */
+      '?', /* U+2977 */
+      '?', /* U+2978 */
+      '?', /* U+2979 */
+      '?', /* U+297A */
+      '?', /* U+297B */
+      '?', /* U+297C */
+      '?', /* U+297D */
+      '?', /* U+297E */
+      '?', /* U+297F */
+      '?', /* U+2980 */
+      '?', /* U+2981 */
+      '?', /* U+2982 */
+      '?', /* U+2983 */
+      '?', /* U+2984 */
+      '?', /* U+2985 */
+      '?', /* U+2986 */
+      '?', /* U+2987 */
+      '?', /* U+2988 */
+      '?', /* U+2989 */
+      '?', /* U+298A */
+      '?', /* U+298B */
+      '?', /* U+298C */
+      '?', /* U+298D */
+      '?', /* U+298E */
+      '?', /* U+298F */
+      '?', /* U+2990 */
+      '?', /* U+2991 */
+      '?', /* U+2992 */
+      '?', /* U+2993 */
+      '?', /* U+2994 */
+      '?', /* U+2995 */
+      '?', /* U+2996 */
+      '?', /* U+2997 */
+      '?', /* U+2998 */
+      '?', /* U+2999 */
+      '?', /* U+299A */
+      '?', /* U+299B */
+      '?', /* U+299C */
+      '?', /* U+299D */
+      '?', /* U+299E */
+      '?', /* U+299F */
+      '?', /* U+29A0 */
+      '?', /* U+29A1 */
+      '?', /* U+29A2 */
+      '?', /* U+29A3 */
+      '?', /* U+29A4 */
+      '?', /* U+29A5 */
+      '?', /* U+29A6 */
+      '?', /* U+29A7 */
+      '?', /* U+29A8 */
+      '?', /* U+29A9 */
+      '?', /* U+29AA */
+      '?', /* U+29AB */
+      '?', /* U+29AC */
+      '?', /* U+29AD */
+      '?', /* U+29AE */
+      '?', /* U+29AF */
+      '?', /* U+29B0 */
+      '?', /* U+29B1 */
+      '?', /* U+29B2 */
+      '?', /* U+29B3 */
+      '?', /* U+29B4 */
+      '?', /* U+29B5 */
+      '?', /* U+29B6 */
+      '?', /* U+29B7 */
+      '?', /* U+29B8 */
+      '?', /* U+29B9 */
+      '?', /* U+29BA */
+      '?', /* U+29BB */
+      '?', /* U+29BC */
+      '?', /* U+29BD */
+      '?', /* U+29BE */
+      '?', /* U+29BF */
+      '?', /* U+29C0 */
+      '?', /* U+29C1 */
+      '?', /* U+29C2 */
+      '?', /* U+29C3 */
+      '?', /* U+29C4 */
+      '?', /* U+29C5 */
+      '?', /* U+29C6 */
+      '?', /* U+29C7 */
+      '?', /* U+29C8 */
+      '?', /* U+29C9 */
+      '?', /* U+29CA */
+      '?', /* U+29CB */
+      '?', /* U+29CC */
+      '?', /* U+29CD */
+      '?', /* U+29CE */
+      '?', /* U+29CF */
+      '?', /* U+29D0 */
+      '?', /* U+29D1 */
+      '?', /* U+29D2 */
+      '?', /* U+29D3 */
+      '?', /* U+29D4 */
+      '?', /* U+29D5 */
+      '?', /* U+29D6 */
+      '?', /* U+29D7 */
+      '?', /* U+29D8 */
+      '?', /* U+29D9 */
+      '?', /* U+29DA */
+      '?', /* U+29DB */
+      '?', /* U+29DC */
+      '?', /* U+29DD */
+      '?', /* U+29DE */
+      '?', /* U+29DF */
+      '?', /* U+29E0 */
+      '?', /* U+29E1 */
+      '?', /* U+29E2 */
+      '?', /* U+29E3 */
+      '?', /* U+29E4 */
+      '?', /* U+29E5 */
+      '?', /* U+29E6 */
+      '?', /* U+29E7 */
+      '?', /* U+29E8 */
+      '?', /* U+29E9 */
+      '?', /* U+29EA */
+      '?', /* U+29EB */
+      '?', /* U+29EC */
+      '?', /* U+29ED */
+      '?', /* U+29EE */
+      '?', /* U+29EF */
+      '?', /* U+29F0 */
+      '?', /* U+29F1 */
+      '?', /* U+29F2 */
+      '?', /* U+29F3 */
+      '?', /* U+29F4 */
+      '?', /* U+29F5 */
+      '?', /* U+29F6 */
+      '?', /* U+29F7 */
+      '?', /* U+29F8 */
+      '?', /* U+29F9 */
+      '?', /* U+29FA */
+      '?', /* U+29FB */
+      '?', /* U+29FC */
+      '?', /* U+29FD */
+      '?', /* U+29FE */
+      '?', /* U+29FF */
+      '?', /* U+2A00 */
+      '?', /* U+2A01 */
+      '?', /* U+2A02 */
+      '?', /* U+2A03 */
+      '?', /* U+2A04 */
+      '?', /* U+2A05 */
+      '?', /* U+2A06 */
+      '?', /* U+2A07 */
+      '?', /* U+2A08 */
+      '?', /* U+2A09 */
+      '?', /* U+2A0A */
+      '?', /* U+2A0B */
+      '?', /* U+2A0C */
+      '?', /* U+2A0D */
+      '?', /* U+2A0E */
+      '?', /* U+2A0F */
+      '?', /* U+2A10 */
+      '?', /* U+2A11 */
+      '?', /* U+2A12 */
+      '?', /* U+2A13 */
+      '?', /* U+2A14 */
+      '?', /* U+2A15 */
+      '?', /* U+2A16 */
+      '?', /* U+2A17 */
+      '?', /* U+2A18 */
+      '?', /* U+2A19 */
+      '?', /* U+2A1A */
+      '?', /* U+2A1B */
+      '?', /* U+2A1C */
+      '?', /* U+2A1D */
+      '?', /* U+2A1E */
+      '?', /* U+2A1F */
+      '?', /* U+2A20 */
+      '?', /* U+2A21 */
+      '?', /* U+2A22 */
+      '?', /* U+2A23 */
+      '?', /* U+2A24 */
+      '?', /* U+2A25 */
+      '?', /* U+2A26 */
+      '?', /* U+2A27 */
+      '?', /* U+2A28 */
+      '?', /* U+2A29 */
+      '?', /* U+2A2A */
+      '?', /* U+2A2B */
+      '?', /* U+2A2C */
+      '?', /* U+2A2D */
+      '?', /* U+2A2E */
+      '?', /* U+2A2F */
+      '?', /* U+2A30 */
+      '?', /* U+2A31 */
+      '?', /* U+2A32 */
+      '?', /* U+2A33 */
+      '?', /* U+2A34 */
+      '?', /* U+2A35 */
+      '?', /* U+2A36 */
+      '?', /* U+2A37 */
+      '?', /* U+2A38 */
+      '?', /* U+2A39 */
+      '?', /* U+2A3A */
+      '?', /* U+2A3B */
+      '?', /* U+2A3C */
+      '?', /* U+2A3D */
+      '?', /* U+2A3E */
+      '?', /* U+2A3F */
+      '?', /* U+2A40 */
+      '?', /* U+2A41 */
+      '?', /* U+2A42 */
+      '?', /* U+2A43 */
+      '?', /* U+2A44 */
+      '?', /* U+2A45 */
+      '?', /* U+2A46 */
+      '?', /* U+2A47 */
+      '?', /* U+2A48 */
+      '?', /* U+2A49 */
+      '?', /* U+2A4A */
+      '?', /* U+2A4B */
+      '?', /* U+2A4C */
+      '?', /* U+2A4D */
+      '?', /* U+2A4E */
+      '?', /* U+2A4F */
+      '?', /* U+2A50 */
+      '?', /* U+2A51 */
+      '?', /* U+2A52 */
+      '?', /* U+2A53 */
+      '?', /* U+2A54 */
+      '?', /* U+2A55 */
+      '?', /* U+2A56 */
+      '?', /* U+2A57 */
+      '?', /* U+2A58 */
+      '?', /* U+2A59 */
+      '?', /* U+2A5A */
+      '?', /* U+2A5B */
+      '?', /* U+2A5C */
+      '?', /* U+2A5D */
+      '?', /* U+2A5E */
+      '?', /* U+2A5F */
+      '?', /* U+2A60 */
+      '?', /* U+2A61 */
+      '?', /* U+2A62 */
+      '?', /* U+2A63 */
+      '?', /* U+2A64 */
+      '?', /* U+2A65 */
+      '?', /* U+2A66 */
+      '?', /* U+2A67 */
+      '?', /* U+2A68 */
+      '?', /* U+2A69 */
+      '?', /* U+2A6A */
+      '?', /* U+2A6B */
+      '?', /* U+2A6C */
+      '?', /* U+2A6D */
+      '?', /* U+2A6E */
+      '?', /* U+2A6F */
+      '?', /* U+2A70 */
+      '?', /* U+2A71 */
+      '?', /* U+2A72 */
+      '?', /* U+2A73 */
+      '?', /* U+2A74 */
+      '?', /* U+2A75 */
+      '?', /* U+2A76 */
+      '?', /* U+2A77 */
+      '?', /* U+2A78 */
+      '?', /* U+2A79 */
+      '?', /* U+2A7A */
+      '?', /* U+2A7B */
+      '?', /* U+2A7C */
+      '?', /* U+2A7D */
+      '?', /* U+2A7E */
+      '?', /* U+2A7F */
+      '?', /* U+2A80 */
+      '?', /* U+2A81 */
+      '?', /* U+2A82 */
+      '?', /* U+2A83 */
+      '?', /* U+2A84 */
+      '?', /* U+2A85 */
+      '?', /* U+2A86 */
+      '?', /* U+2A87 */
+      '?', /* U+2A88 */
+      '?', /* U+2A89 */
+      '?', /* U+2A8A */
+      '?', /* U+2A8B */
+      '?', /* U+2A8C */
+      '?', /* U+2A8D */
+      '?', /* U+2A8E */
+      '?', /* U+2A8F */
+      '?', /* U+2A90 */
+      '?', /* U+2A91 */
+      '?', /* U+2A92 */
+      '?', /* U+2A93 */
+      '?', /* U+2A94 */
+      '?', /* U+2A95 */
+      '?', /* U+2A96 */
+      '?', /* U+2A97 */
+      '?', /* U+2A98 */
+      '?', /* U+2A99 */
+      '?', /* U+2A9A */
+      '?', /* U+2A9B */
+      '?', /* U+2A9C */
+      '?', /* U+2A9D */
+      '?', /* U+2A9E */
+      '?', /* U+2A9F */
+      '?', /* U+2AA0 */
+      '?', /* U+2AA1 */
+      '?', /* U+2AA2 */
+      '?', /* U+2AA3 */
+      '?', /* U+2AA4 */
+      '?', /* U+2AA5 */
+      '?', /* U+2AA6 */
+      '?', /* U+2AA7 */
+      '?', /* U+2AA8 */
+      '?', /* U+2AA9 */
+      '?', /* U+2AAA */
+      '?', /* U+2AAB */
+      '?', /* U+2AAC */
+      '?', /* U+2AAD */
+      '?', /* U+2AAE */
+      '?', /* U+2AAF */
+      '?', /* U+2AB0 */
+      '?', /* U+2AB1 */
+      '?', /* U+2AB2 */
+      '?', /* U+2AB3 */
+      '?', /* U+2AB4 */
+      '?', /* U+2AB5 */
+      '?', /* U+2AB6 */
+      '?', /* U+2AB7 */
+      '?', /* U+2AB8 */
+      '?', /* U+2AB9 */
+      '?', /* U+2ABA */
+      '?', /* U+2ABB */
+      '?', /* U+2ABC */
+      '?', /* U+2ABD */
+      '?', /* U+2ABE */
+      '?', /* U+2ABF */
+      '?', /* U+2AC0 */
+      '?', /* U+2AC1 */
+      '?', /* U+2AC2 */
+      '?', /* U+2AC3 */
+      '?', /* U+2AC4 */
+      '?', /* U+2AC5 */
+      '?', /* U+2AC6 */
+      '?', /* U+2AC7 */
+      '?', /* U+2AC8 */
+      '?', /* U+2AC9 */
+      '?', /* U+2ACA */
+      '?', /* U+2ACB */
+      '?', /* U+2ACC */
+      '?', /* U+2ACD */
+      '?', /* U+2ACE */
+      '?', /* U+2ACF */
+      '?', /* U+2AD0 */
+      '?', /* U+2AD1 */
+      '?', /* U+2AD2 */
+      '?', /* U+2AD3 */
+      '?', /* U+2AD4 */
+      '?', /* U+2AD5 */
+      '?', /* U+2AD6 */
+      '?', /* U+2AD7 */
+      '?', /* U+2AD8 */
+      '?', /* U+2AD9 */
+      '?', /* U+2ADA */
+      '?', /* U+2ADB */
+      '?', /* U+2ADC */
+      '?', /* U+2ADD */
+      '?', /* U+2ADE */
+      '?', /* U+2ADF */
+      '?', /* U+2AE0 */
+      '?', /* U+2AE1 */
+      '?', /* U+2AE2 */
+      '?', /* U+2AE3 */
+      '?', /* U+2AE4 */
+      '?', /* U+2AE5 */
+      '?', /* U+2AE6 */
+      '?', /* U+2AE7 */
+      '?', /* U+2AE8 */
+      '?', /* U+2AE9 */
+      '?', /* U+2AEA */
+      '?', /* U+2AEB */
+      '?', /* U+2AEC */
+      '?', /* U+2AED */
+      '?', /* U+2AEE */
+      '?', /* U+2AEF */
+      '?', /* U+2AF0 */
+      '?', /* U+2AF1 */
+      '?', /* U+2AF2 */
+      '?', /* U+2AF3 */
+      '?', /* U+2AF4 */
+      '?', /* U+2AF5 */
+      '?', /* U+2AF6 */
+      '?', /* U+2AF7 */
+      '?', /* U+2AF8 */
+      '?', /* U+2AF9 */
+      '?', /* U+2AFA */
+      '?', /* U+2AFB */
+      '?', /* U+2AFC */
+      '?', /* U+2AFD */
+      '?', /* U+2AFE */
+      '?', /* U+2AFF */
+      '?', /* U+2B00 */
+      '?', /* U+2B01 */
+      '?', /* U+2B02 */
+      '?', /* U+2B03 */
+      '?', /* U+2B04 */
+      '?', /* U+2B05 */
+      '?', /* U+2B06 */
+      '?', /* U+2B07 */
+      '?', /* U+2B08 */
+      '?', /* U+2B09 */
+      '?', /* U+2B0A */
+      '?', /* U+2B0B */
+      '?', /* U+2B0C */
+      '?', /* U+2B0D */
+      '?', /* U+2B0E */
+      '?', /* U+2B0F */
+      '?', /* U+2B10 */
+      '?', /* U+2B11 */
+      '?', /* U+2B12 */
+      '?', /* U+2B13 */
+      '?', /* U+2B14 */
+      '?', /* U+2B15 */
+      '?', /* U+2B16 */
+      '?', /* U+2B17 */
+      '?', /* U+2B18 */
+      '?', /* U+2B19 */
+      '?', /* U+2B1A */
+      '?', /* U+2B1B */
+      '?', /* U+2B1C */
+      '?', /* U+2B1D */
+      '?', /* U+2B1E */
+      '?', /* U+2B1F */
+      '?', /* U+2B20 */
+      '?', /* U+2B21 */
+      '?', /* U+2B22 */
+      '?', /* U+2B23 */
+      '?', /* U+2B24 */
+      '?', /* U+2B25 */
+      '?', /* U+2B26 */
+      '?', /* U+2B27 */
+      '?', /* U+2B28 */
+      '?', /* U+2B29 */
+      '?', /* U+2B2A */
+      '?', /* U+2B2B */
+      '?', /* U+2B2C */
+      '?', /* U+2B2D */
+      '?', /* U+2B2E */
+      '?', /* U+2B2F */
+      '?', /* U+2B30 */
+      '?', /* U+2B31 */
+      '?', /* U+2B32 */
+      '?', /* U+2B33 */
+      '?', /* U+2B34 */
+      '?', /* U+2B35 */
+      '?', /* U+2B36 */
+      '?', /* U+2B37 */
+      '?', /* U+2B38 */
+      '?', /* U+2B39 */
+      '?', /* U+2B3A */
+      '?', /* U+2B3B */
+      '?', /* U+2B3C */
+      '?', /* U+2B3D */
+      '?', /* U+2B3E */
+      '?', /* U+2B3F */
+      '?', /* U+2B40 */
+      '?', /* U+2B41 */
+      '?', /* U+2B42 */
+      '?', /* U+2B43 */
+      '?', /* U+2B44 */
+      '?', /* U+2B45 */
+      '?', /* U+2B46 */
+      '?', /* U+2B47 */
+      '?', /* U+2B48 */
+      '?', /* U+2B49 */
+      '?', /* U+2B4A */
+      '?', /* U+2B4B */
+      '?', /* U+2B4C */
+      '?', /* U+2B4D */
+      '?', /* U+2B4E */
+      '?', /* U+2B4F */
+      '?', /* U+2B50 */
+      '?', /* U+2B51 */
+      '?', /* U+2B52 */
+      '?', /* U+2B53 */
+      '?', /* U+2B54 */
+      '?', /* U+2B55 */
+      '?', /* U+2B56 */
+      '?', /* U+2B57 */
+      '?', /* U+2B58 */
+      '?', /* U+2B59 */
+      '?', /* U+2B5A */
+      '?', /* U+2B5B */
+      '?', /* U+2B5C */
+      '?', /* U+2B5D */
+      '?', /* U+2B5E */
+      '?', /* U+2B5F */
+      '?', /* U+2B60 */
+      '?', /* U+2B61 */
+      '?', /* U+2B62 */
+      '?', /* U+2B63 */
+      '?', /* U+2B64 */
+      '?', /* U+2B65 */
+      '?', /* U+2B66 */
+      '?', /* U+2B67 */
+      '?', /* U+2B68 */
+      '?', /* U+2B69 */
+      '?', /* U+2B6A */
+      '?', /* U+2B6B */
+      '?', /* U+2B6C */
+      '?', /* U+2B6D */
+      '?', /* U+2B6E */
+      '?', /* U+2B6F */
+      '?', /* U+2B70 */
+      '?', /* U+2B71 */
+      '?', /* U+2B72 */
+      '?', /* U+2B73 */
+      '?', /* U+2B74 */
+      '?', /* U+2B75 */
+      '?', /* U+2B76 */
+      '?', /* U+2B77 */
+      '?', /* U+2B78 */
+      '?', /* U+2B79 */
+      '?', /* U+2B7A */
+      '?', /* U+2B7B */
+      '?', /* U+2B7C */
+      '?', /* U+2B7D */
+      '?', /* U+2B7E */
+      '?', /* U+2B7F */
+      '?', /* U+2B80 */
+      '?', /* U+2B81 */
+      '?', /* U+2B82 */
+      '?', /* U+2B83 */
+      '?', /* U+2B84 */
+      '?', /* U+2B85 */
+      '?', /* U+2B86 */
+      '?', /* U+2B87 */
+      '?', /* U+2B88 */
+      '?', /* U+2B89 */
+      '?', /* U+2B8A */
+      '?', /* U+2B8B */
+      '?', /* U+2B8C */
+      '?', /* U+2B8D */
+      '?', /* U+2B8E */
+      '?', /* U+2B8F */
+      '?', /* U+2B90 */
+      '?', /* U+2B91 */
+      '?', /* U+2B92 */
+      '?', /* U+2B93 */
+      '?', /* U+2B94 */
+      '?', /* U+2B95 */
+      '?', /* U+2B96 */
+      '?', /* U+2B97 */
+      '?', /* U+2B98 */
+      '?', /* U+2B99 */
+      '?', /* U+2B9A */
+      '?', /* U+2B9B */
+      '?', /* U+2B9C */
+      '?', /* U+2B9D */
+      '?', /* U+2B9E */
+      '?', /* U+2B9F */
+      '?', /* U+2BA0 */
+      '?', /* U+2BA1 */
+      '?', /* U+2BA2 */
+      '?', /* U+2BA3 */
+      '?', /* U+2BA4 */
+      '?', /* U+2BA5 */
+      '?', /* U+2BA6 */
+      '?', /* U+2BA7 */
+      '?', /* U+2BA8 */
+      '?', /* U+2BA9 */
+      '?', /* U+2BAA */
+      '?', /* U+2BAB */
+      '?', /* U+2BAC */
+      '?', /* U+2BAD */
+      '?', /* U+2BAE */
+      '?', /* U+2BAF */
+      '?', /* U+2BB0 */
+      '?', /* U+2BB1 */
+      '?', /* U+2BB2 */
+      '?', /* U+2BB3 */
+      '?', /* U+2BB4 */
+      '?', /* U+2BB5 */
+      '?', /* U+2BB6 */
+      '?', /* U+2BB7 */
+      '?', /* U+2BB8 */
+      '?', /* U+2BB9 */
+      '?', /* U+2BBA */
+      '?', /* U+2BBB */
+      '?', /* U+2BBC */
+      '?', /* U+2BBD */
+      '?', /* U+2BBE */
+      '?', /* U+2BBF */
+      '?', /* U+2BC0 */
+      '?', /* U+2BC1 */
+      '?', /* U+2BC2 */
+      '?', /* U+2BC3 */
+      '?', /* U+2BC4 */
+      '?', /* U+2BC5 */
+      '?', /* U+2BC6 */
+      '?', /* U+2BC7 */
+      '?', /* U+2BC8 */
+      '?', /* U+2BC9 */
+      '?', /* U+2BCA */
+      '?', /* U+2BCB */
+      '?', /* U+2BCC */
+      '?', /* U+2BCD */
+      '?', /* U+2BCE */
+      '?', /* U+2BCF */
+      '?', /* U+2BD0 */
+      '?', /* U+2BD1 */
+      '?', /* U+2BD2 */
+      '?', /* U+2BD3 */
+      '?', /* U+2BD4 */
+      '?', /* U+2BD5 */
+      '?', /* U+2BD6 */
+      '?', /* U+2BD7 */
+      '?', /* U+2BD8 */
+      '?', /* U+2BD9 */
+      '?', /* U+2BDA */
+      '?', /* U+2BDB */
+      '?', /* U+2BDC */
+      '?', /* U+2BDD */
+      '?', /* U+2BDE */
+      '?', /* U+2BDF */
+      '?', /* U+2BE0 */
+      '?', /* U+2BE1 */
+      '?', /* U+2BE2 */
+      '?', /* U+2BE3 */
+      '?', /* U+2BE4 */
+      '?', /* U+2BE5 */
+      '?', /* U+2BE6 */
+      '?', /* U+2BE7 */
+      '?', /* U+2BE8 */
+      '?', /* U+2BE9 */
+      '?', /* U+2BEA */
+      '?', /* U+2BEB */
+      '?', /* U+2BEC */
+      '?', /* U+2BED */
+      '?', /* U+2BEE */
+      '?', /* U+2BEF */
+      '?', /* U+2BF0 */
+      '?', /* U+2BF1 */
+      '?', /* U+2BF2 */
+      '?', /* U+2BF3 */
+      '?', /* U+2BF4 */
+      '?', /* U+2BF5 */
+      '?', /* U+2BF6 */
+      '?', /* U+2BF7 */
+      '?', /* U+2BF8 */
+      '?', /* U+2BF9 */
+      '?', /* U+2BFA */
+      '?', /* U+2BFB */
+      '?', /* U+2BFC */
+      '?', /* U+2BFD */
+      '?', /* U+2BFE */
+      '?', /* U+2BFF */
+      '?', /* U+2C00 */
+      '?', /* U+2C01 */
+      '?', /* U+2C02 */
+      '?', /* U+2C03 */
+      '?', /* U+2C04 */
+      '?', /* U+2C05 */
+      '?', /* U+2C06 */
+      '?', /* U+2C07 */
+      '?', /* U+2C08 */
+      '?', /* U+2C09 */
+      '?', /* U+2C0A */
+      '?', /* U+2C0B */
+      '?', /* U+2C0C */
+      '?', /* U+2C0D */
+      '?', /* U+2C0E */
+      '?', /* U+2C0F */
+      '?', /* U+2C10 */
+      '?', /* U+2C11 */
+      '?', /* U+2C12 */
+      '?', /* U+2C13 */
+      '?', /* U+2C14 */
+      '?', /* U+2C15 */
+      '?', /* U+2C16 */
+      '?', /* U+2C17 */
+      '?', /* U+2C18 */
+      '?', /* U+2C19 */
+      '?', /* U+2C1A */
+      '?', /* U+2C1B */
+      '?', /* U+2C1C */
+      '?', /* U+2C1D */
+      '?', /* U+2C1E */
+      '?', /* U+2C1F */
+      '?', /* U+2C20 */
+      '?', /* U+2C21 */
+      '?', /* U+2C22 */
+      '?', /* U+2C23 */
+      '?', /* U+2C24 */
+      '?', /* U+2C25 */
+      '?', /* U+2C26 */
+      '?', /* U+2C27 */
+      '?', /* U+2C28 */
+      '?', /* U+2C29 */
+      '?', /* U+2C2A */
+      '?', /* U+2C2B */
+      '?', /* U+2C2C */
+      '?', /* U+2C2D */
+      '?', /* U+2C2E */
+      '?', /* U+2C2F */
+      '?', /* U+2C30 */
+      '?', /* U+2C31 */
+      '?', /* U+2C32 */
+      '?', /* U+2C33 */
+      '?', /* U+2C34 */
+      '?', /* U+2C35 */
+      '?', /* U+2C36 */
+      '?', /* U+2C37 */
+      '?', /* U+2C38 */
+      '?', /* U+2C39 */
+      '?', /* U+2C3A */
+      '?', /* U+2C3B */
+      '?', /* U+2C3C */
+      '?', /* U+2C3D */
+      '?', /* U+2C3E */
+      '?', /* U+2C3F */
+      '?', /* U+2C40 */
+      '?', /* U+2C41 */
+      '?', /* U+2C42 */
+      '?', /* U+2C43 */
+      '?', /* U+2C44 */
+      '?', /* U+2C45 */
+      '?', /* U+2C46 */
+      '?', /* U+2C47 */
+      '?', /* U+2C48 */
+      '?', /* U+2C49 */
+      '?', /* U+2C4A */
+      '?', /* U+2C4B */
+      '?', /* U+2C4C */
+      '?', /* U+2C4D */
+      '?', /* U+2C4E */
+      '?', /* U+2C4F */
+      '?', /* U+2C50 */
+      '?', /* U+2C51 */
+      '?', /* U+2C52 */
+      '?', /* U+2C53 */
+      '?', /* U+2C54 */
+      '?', /* U+2C55 */
+      '?', /* U+2C56 */
+      '?', /* U+2C57 */
+      '?', /* U+2C58 */
+      '?', /* U+2C59 */
+      '?', /* U+2C5A */
+      '?', /* U+2C5B */
+      '?', /* U+2C5C */
+      '?', /* U+2C5D */
+      '?', /* U+2C5E */
+      '?', /* U+2C5F */
+      '?', /* U+2C60 */
+      '?', /* U+2C61 */
+      '?', /* U+2C62 */
+      '?', /* U+2C63 */
+      '?', /* U+2C64 */
+      '?', /* U+2C65 */
+      '?', /* U+2C66 */
+      '?', /* U+2C67 */
+      '?', /* U+2C68 */
+      '?', /* U+2C69 */
+      '?', /* U+2C6A */
+      '?', /* U+2C6B */
+      '?', /* U+2C6C */
+      '?', /* U+2C6D */
+      '?', /* U+2C6E */
+      '?', /* U+2C6F */
+      '?', /* U+2C70 */
+      '?', /* U+2C71 */
+      '?', /* U+2C72 */
+      '?', /* U+2C73 */
+      '?', /* U+2C74 */
+      '?', /* U+2C75 */
+      '?', /* U+2C76 */
+      '?', /* U+2C77 */
+      '?', /* U+2C78 */
+      '?', /* U+2C79 */
+      '?', /* U+2C7A */
+      '?', /* U+2C7B */
+      '?', /* U+2C7C */
+      '?', /* U+2C7D */
+      '?', /* U+2C7E */
+      '?', /* U+2C7F */
+      '?', /* U+2C80 */
+      '?', /* U+2C81 */
+      '?', /* U+2C82 */
+      '?', /* U+2C83 */
+      '?', /* U+2C84 */
+      '?', /* U+2C85 */
+      '?', /* U+2C86 */
+      '?', /* U+2C87 */
+      '?', /* U+2C88 */
+      '?', /* U+2C89 */
+      '?', /* U+2C8A */
+      '?', /* U+2C8B */
+      '?', /* U+2C8C */
+      '?', /* U+2C8D */
+      '?', /* U+2C8E */
+      '?', /* U+2C8F */
+      '?', /* U+2C90 */
+      '?', /* U+2C91 */
+      '?', /* U+2C92 */
+      '?', /* U+2C93 */
+      '?', /* U+2C94 */
+      '?', /* U+2C95 */
+      '?', /* U+2C96 */
+      '?', /* U+2C97 */
+      '?', /* U+2C98 */
+      '?', /* U+2C99 */
+      '?', /* U+2C9A */
+      '?', /* U+2C9B */
+      '?', /* U+2C9C */
+      '?', /* U+2C9D */
+      '?', /* U+2C9E */
+      '?', /* U+2C9F */
+      '?', /* U+2CA0 */
+      '?', /* U+2CA1 */
+      '?', /* U+2CA2 */
+      '?', /* U+2CA3 */
+      '?', /* U+2CA4 */
+      '?', /* U+2CA5 */
+      '?', /* U+2CA6 */
+      '?', /* U+2CA7 */
+      '?', /* U+2CA8 */
+      '?', /* U+2CA9 */
+      '?', /* U+2CAA */
+      '?', /* U+2CAB */
+      '?', /* U+2CAC */
+      '?', /* U+2CAD */
+      '?', /* U+2CAE */
+      '?', /* U+2CAF */
+      '?', /* U+2CB0 */
+      '?', /* U+2CB1 */
+      '?', /* U+2CB2 */
+      '?', /* U+2CB3 */
+      '?', /* U+2CB4 */
+      '?', /* U+2CB5 */
+      '?', /* U+2CB6 */
+      '?', /* U+2CB7 */
+      '?', /* U+2CB8 */
+      '?', /* U+2CB9 */
+      '?', /* U+2CBA */
+      '?', /* U+2CBB */
+      '?', /* U+2CBC */
+      '?', /* U+2CBD */
+      '?', /* U+2CBE */
+      '?', /* U+2CBF */
+      '?', /* U+2CC0 */
+      '?', /* U+2CC1 */
+      '?', /* U+2CC2 */
+      '?', /* U+2CC3 */
+      '?', /* U+2CC4 */
+      '?', /* U+2CC5 */
+      '?', /* U+2CC6 */
+      '?', /* U+2CC7 */
+      '?', /* U+2CC8 */
+      '?', /* U+2CC9 */
+      '?', /* U+2CCA */
+      '?', /* U+2CCB */
+      '?', /* U+2CCC */
+      '?', /* U+2CCD */
+      '?', /* U+2CCE */
+      '?', /* U+2CCF */
+      '?', /* U+2CD0 */
+      '?', /* U+2CD1 */
+      '?', /* U+2CD2 */
+      '?', /* U+2CD3 */
+      '?', /* U+2CD4 */
+      '?', /* U+2CD5 */
+      '?', /* U+2CD6 */
+      '?', /* U+2CD7 */
+      '?', /* U+2CD8 */
+      '?', /* U+2CD9 */
+      '?', /* U+2CDA */
+      '?', /* U+2CDB */
+      '?', /* U+2CDC */
+      '?', /* U+2CDD */
+      '?', /* U+2CDE */
+      '?', /* U+2CDF */
+      '?', /* U+2CE0 */
+      '?', /* U+2CE1 */
+      '?', /* U+2CE2 */
+      '?', /* U+2CE3 */
+      '?', /* U+2CE4 */
+      '?', /* U+2CE5 */
+      '?', /* U+2CE6 */
+      '?', /* U+2CE7 */
+      '?', /* U+2CE8 */
+      '?', /* U+2CE9 */
+      '?', /* U+2CEA */
+      '?', /* U+2CEB */
+      '?', /* U+2CEC */
+      '?', /* U+2CED */
+      '?', /* U+2CEE */
+      '?', /* U+2CEF */
+      '?', /* U+2CF0 */
+      '?', /* U+2CF1 */
+      '?', /* U+2CF2 */
+      '?', /* U+2CF3 */
+      '?', /* U+2CF4 */
+      '?', /* U+2CF5 */
+      '?', /* U+2CF6 */
+      '?', /* U+2CF7 */
+      '?', /* U+2CF8 */
+      '?', /* U+2CF9 */
+      '?', /* U+2CFA */
+      '?', /* U+2CFB */
+      '?', /* U+2CFC */
+      '?', /* U+2CFD */
+      '?', /* U+2CFE */
+      '?', /* U+2CFF */
+      '?', /* U+2D00 */
+      '?', /* U+2D01 */
+      '?', /* U+2D02 */
+      '?', /* U+2D03 */
+      '?', /* U+2D04 */
+      '?', /* U+2D05 */
+      '?', /* U+2D06 */
+      '?', /* U+2D07 */
+      '?', /* U+2D08 */
+      '?', /* U+2D09 */
+      '?', /* U+2D0A */
+      '?', /* U+2D0B */
+      '?', /* U+2D0C */
+      '?', /* U+2D0D */
+      '?', /* U+2D0E */
+      '?', /* U+2D0F */
+      '?', /* U+2D10 */
+      '?', /* U+2D11 */
+      '?', /* U+2D12 */
+      '?', /* U+2D13 */
+      '?', /* U+2D14 */
+      '?', /* U+2D15 */
+      '?', /* U+2D16 */
+      '?', /* U+2D17 */
+      '?', /* U+2D18 */
+      '?', /* U+2D19 */
+      '?', /* U+2D1A */
+      '?', /* U+2D1B */
+      '?', /* U+2D1C */
+      '?', /* U+2D1D */
+      '?', /* U+2D1E */
+      '?', /* U+2D1F */
+      '?', /* U+2D20 */
+      '?', /* U+2D21 */
+      '?', /* U+2D22 */
+      '?', /* U+2D23 */
+      '?', /* U+2D24 */
+      '?', /* U+2D25 */
+      '?', /* U+2D26 */
+      '?', /* U+2D27 */
+      '?', /* U+2D28 */
+      '?', /* U+2D29 */
+      '?', /* U+2D2A */
+      '?', /* U+2D2B */
+      '?', /* U+2D2C */
+      '?', /* U+2D2D */
+      '?', /* U+2D2E */
+      '?', /* U+2D2F */
+      '?', /* U+2D30 */
+      '?', /* U+2D31 */
+      '?', /* U+2D32 */
+      '?', /* U+2D33 */
+      '?', /* U+2D34 */
+      '?', /* U+2D35 */
+      '?', /* U+2D36 */
+      '?', /* U+2D37 */
+      '?', /* U+2D38 */
+      '?', /* U+2D39 */
+      '?', /* U+2D3A */
+      '?', /* U+2D3B */
+      '?', /* U+2D3C */
+      '?', /* U+2D3D */
+      '?', /* U+2D3E */
+      '?', /* U+2D3F */
+      '?', /* U+2D40 */
+      '?', /* U+2D41 */
+      '?', /* U+2D42 */
+      '?', /* U+2D43 */
+      '?', /* U+2D44 */
+      '?', /* U+2D45 */
+      '?', /* U+2D46 */
+      '?', /* U+2D47 */
+      '?', /* U+2D48 */
+      '?', /* U+2D49 */
+      '?', /* U+2D4A */
+      '?', /* U+2D4B */
+      '?', /* U+2D4C */
+      '?', /* U+2D4D */
+      '?', /* U+2D4E */
+      '?', /* U+2D4F */
+      '?', /* U+2D50 */
+      '?', /* U+2D51 */
+      '?', /* U+2D52 */
+      '?', /* U+2D53 */
+      '?', /* U+2D54 */
+      '?', /* U+2D55 */
+      '?', /* U+2D56 */
+      '?', /* U+2D57 */
+      '?', /* U+2D58 */
+      '?', /* U+2D59 */
+      '?', /* U+2D5A */
+      '?', /* U+2D5B */
+      '?', /* U+2D5C */
+      '?', /* U+2D5D */
+      '?', /* U+2D5E */
+      '?', /* U+2D5F */
+      '?', /* U+2D60 */
+      '?', /* U+2D61 */
+      '?', /* U+2D62 */
+      '?', /* U+2D63 */
+      '?', /* U+2D64 */
+      '?', /* U+2D65 */
+      '?', /* U+2D66 */
+      '?', /* U+2D67 */
+      '?', /* U+2D68 */
+      '?', /* U+2D69 */
+      '?', /* U+2D6A */
+      '?', /* U+2D6B */
+      '?', /* U+2D6C */
+      '?', /* U+2D6D */
+      '?', /* U+2D6E */
+      '?', /* U+2D6F */
+      '?', /* U+2D70 */
+      '?', /* U+2D71 */
+      '?', /* U+2D72 */
+      '?', /* U+2D73 */
+      '?', /* U+2D74 */
+      '?', /* U+2D75 */
+      '?', /* U+2D76 */
+      '?', /* U+2D77 */
+      '?', /* U+2D78 */
+      '?', /* U+2D79 */
+      '?', /* U+2D7A */
+      '?', /* U+2D7B */
+      '?', /* U+2D7C */
+      '?', /* U+2D7D */
+      '?', /* U+2D7E */
+      '?', /* U+2D7F */
+      '?', /* U+2D80 */
+      '?', /* U+2D81 */
+      '?', /* U+2D82 */
+      '?', /* U+2D83 */
+      '?', /* U+2D84 */
+      '?', /* U+2D85 */
+      '?', /* U+2D86 */
+      '?', /* U+2D87 */
+      '?', /* U+2D88 */
+      '?', /* U+2D89 */
+      '?', /* U+2D8A */
+      '?', /* U+2D8B */
+      '?', /* U+2D8C */
+      '?', /* U+2D8D */
+      '?', /* U+2D8E */
+      '?', /* U+2D8F */
+      '?', /* U+2D90 */
+      '?', /* U+2D91 */
+      '?', /* U+2D92 */
+      '?', /* U+2D93 */
+      '?', /* U+2D94 */
+      '?', /* U+2D95 */
+      '?', /* U+2D96 */
+      '?', /* U+2D97 */
+      '?', /* U+2D98 */
+      '?', /* U+2D99 */
+      '?', /* U+2D9A */
+      '?', /* U+2D9B */
+      '?', /* U+2D9C */
+      '?', /* U+2D9D */
+      '?', /* U+2D9E */
+      '?', /* U+2D9F */
+      '?', /* U+2DA0 */
+      '?', /* U+2DA1 */
+      '?', /* U+2DA2 */
+      '?', /* U+2DA3 */
+      '?', /* U+2DA4 */
+      '?', /* U+2DA5 */
+      '?', /* U+2DA6 */
+      '?', /* U+2DA7 */
+      '?', /* U+2DA8 */
+      '?', /* U+2DA9 */
+      '?', /* U+2DAA */
+      '?', /* U+2DAB */
+      '?', /* U+2DAC */
+      '?', /* U+2DAD */
+      '?', /* U+2DAE */
+      '?', /* U+2DAF */
+      '?', /* U+2DB0 */
+      '?', /* U+2DB1 */
+      '?', /* U+2DB2 */
+      '?', /* U+2DB3 */
+      '?', /* U+2DB4 */
+      '?', /* U+2DB5 */
+      '?', /* U+2DB6 */
+      '?', /* U+2DB7 */
+      '?', /* U+2DB8 */
+      '?', /* U+2DB9 */
+      '?', /* U+2DBA */
+      '?', /* U+2DBB */
+      '?', /* U+2DBC */
+      '?', /* U+2DBD */
+      '?', /* U+2DBE */
+      '?', /* U+2DBF */
+      '?', /* U+2DC0 */
+      '?', /* U+2DC1 */
+      '?', /* U+2DC2 */
+      '?', /* U+2DC3 */
+      '?', /* U+2DC4 */
+      '?', /* U+2DC5 */
+      '?', /* U+2DC6 */
+      '?', /* U+2DC7 */
+      '?', /* U+2DC8 */
+      '?', /* U+2DC9 */
+      '?', /* U+2DCA */
+      '?', /* U+2DCB */
+      '?', /* U+2DCC */
+      '?', /* U+2DCD */
+      '?', /* U+2DCE */
+      '?', /* U+2DCF */
+      '?', /* U+2DD0 */
+      '?', /* U+2DD1 */
+      '?', /* U+2DD2 */
+      '?', /* U+2DD3 */
+      '?', /* U+2DD4 */
+      '?', /* U+2DD5 */
+      '?', /* U+2DD6 */
+      '?', /* U+2DD7 */
+      '?', /* U+2DD8 */
+      '?', /* U+2DD9 */
+      '?', /* U+2DDA */
+      '?', /* U+2DDB */
+      '?', /* U+2DDC */
+      '?', /* U+2DDD */
+      '?', /* U+2DDE */
+      '?', /* U+2DDF */
+      '?', /* U+2DE0 */
+      '?', /* U+2DE1 */
+      '?', /* U+2DE2 */
+      '?', /* U+2DE3 */
+      '?', /* U+2DE4 */
+      '?', /* U+2DE5 */
+      '?', /* U+2DE6 */
+      '?', /* U+2DE7 */
+      '?', /* U+2DE8 */
+      '?', /* U+2DE9 */
+      '?', /* U+2DEA */
+      '?', /* U+2DEB */
+      '?', /* U+2DEC */
+      '?', /* U+2DED */
+      '?', /* U+2DEE */
+      '?', /* U+2DEF */
+      '?', /* U+2DF0 */
+      '?', /* U+2DF1 */
+      '?', /* U+2DF2 */
+      '?', /* U+2DF3 */
+      '?', /* U+2DF4 */
+      '?', /* U+2DF5 */
+      '?', /* U+2DF6 */
+      '?', /* U+2DF7 */
+      '?', /* U+2DF8 */
+      '?', /* U+2DF9 */
+      '?', /* U+2DFA */
+      '?', /* U+2DFB */
+      '?', /* U+2DFC */
+      '?', /* U+2DFD */
+      '?', /* U+2DFE */
+      '?', /* U+2DFF */
+      '?', /* U+2E00 */
+      '?', /* U+2E01 */
+      '?', /* U+2E02 */
+      '?', /* U+2E03 */
+      '?', /* U+2E04 */
+      '?', /* U+2E05 */
+      '?', /* U+2E06 */
+      '?', /* U+2E07 */
+      '?', /* U+2E08 */
+      '?', /* U+2E09 */
+      '?', /* U+2E0A */
+      '?', /* U+2E0B */
+      '?', /* U+2E0C */
+      '?', /* U+2E0D */
+      '?', /* U+2E0E */
+      '?', /* U+2E0F */
+      '?', /* U+2E10 */
+      '?', /* U+2E11 */
+      '?', /* U+2E12 */
+      '?', /* U+2E13 */
+      '?', /* U+2E14 */
+      '?', /* U+2E15 */
+      '?', /* U+2E16 */
+      '?', /* U+2E17 */
+      '?', /* U+2E18 */
+      '?', /* U+2E19 */
+      '?', /* U+2E1A */
+      '?', /* U+2E1B */
+      '?', /* U+2E1C */
+      '?', /* U+2E1D */
+      '?', /* U+2E1E */
+      '?', /* U+2E1F */
+      '?', /* U+2E20 */
+      '?', /* U+2E21 */
+      '?', /* U+2E22 */
+      '?', /* U+2E23 */
+      '?', /* U+2E24 */
+      '?', /* U+2E25 */
+      '?', /* U+2E26 */
+      '?', /* U+2E27 */
+      '?', /* U+2E28 */
+      '?', /* U+2E29 */
+      '?', /* U+2E2A */
+      '?', /* U+2E2B */
+      '?', /* U+2E2C */
+      '?', /* U+2E2D */
+      '?', /* U+2E2E */
+      '?', /* U+2E2F */
+      '?', /* U+2E30 */
+      '?', /* U+2E31 */
+      '?', /* U+2E32 */
+      '?', /* U+2E33 */
+      '?', /* U+2E34 */
+      '?', /* U+2E35 */
+      '?', /* U+2E36 */
+      '?', /* U+2E37 */
+      '?', /* U+2E38 */
+      '?', /* U+2E39 */
+      '?', /* U+2E3A */
+      '?', /* U+2E3B */
+      '?', /* U+2E3C */
+      '?', /* U+2E3D */
+      '?', /* U+2E3E */
+      '?', /* U+2E3F */
+      '?', /* U+2E40 */
+      '?', /* U+2E41 */
+      '?', /* U+2E42 */
+      '?', /* U+2E43 */
+      '?', /* U+2E44 */
+      '?', /* U+2E45 */
+      '?', /* U+2E46 */
+      '?', /* U+2E47 */
+      '?', /* U+2E48 */
+      '?', /* U+2E49 */
+      '?', /* U+2E4A */
+      '?', /* U+2E4B */
+      '?', /* U+2E4C */
+      '?', /* U+2E4D */
+      '?', /* U+2E4E */
+      '?', /* U+2E4F */
+      '?', /* U+2E50 */
+      '?', /* U+2E51 */
+      '?', /* U+2E52 */
+      '?', /* U+2E53 */
+      '?', /* U+2E54 */
+      '?', /* U+2E55 */
+      '?', /* U+2E56 */
+      '?', /* U+2E57 */
+      '?', /* U+2E58 */
+      '?', /* U+2E59 */
+      '?', /* U+2E5A */
+      '?', /* U+2E5B */
+      '?', /* U+2E5C */
+      '?', /* U+2E5D */
+      '?', /* U+2E5E */
+      '?', /* U+2E5F */
+      '?', /* U+2E60 */
+      '?', /* U+2E61 */
+      '?', /* U+2E62 */
+      '?', /* U+2E63 */
+      '?', /* U+2E64 */
+      '?', /* U+2E65 */
+      '?', /* U+2E66 */
+      '?', /* U+2E67 */
+      '?', /* U+2E68 */
+      '?', /* U+2E69 */
+      '?', /* U+2E6A */
+      '?', /* U+2E6B */
+      '?', /* U+2E6C */
+      '?', /* U+2E6D */
+      '?', /* U+2E6E */
+      '?', /* U+2E6F */
+      '?', /* U+2E70 */
+      '?', /* U+2E71 */
+      '?', /* U+2E72 */
+      '?', /* U+2E73 */
+      '?', /* U+2E74 */
+      '?', /* U+2E75 */
+      '?', /* U+2E76 */
+      '?', /* U+2E77 */
+      '?', /* U+2E78 */
+      '?', /* U+2E79 */
+      '?', /* U+2E7A */
+      '?', /* U+2E7B */
+      '?', /* U+2E7C */
+      '?', /* U+2E7D */
+      '?', /* U+2E7E */
+      '?', /* U+2E7F */
+      '?', /* U+2E80 */
+      '?', /* U+2E81 */
+      '?', /* U+2E82 */
+      '?', /* U+2E83 */
+      '?', /* U+2E84 */
+      '?', /* U+2E85 */
+      '?', /* U+2E86 */
+      '?', /* U+2E87 */
+      '?', /* U+2E88 */
+      '?', /* U+2E89 */
+      '?', /* U+2E8A */
+      '?', /* U+2E8B */
+      '?', /* U+2E8C */
+      '?', /* U+2E8D */
+      '?', /* U+2E8E */
+      '?', /* U+2E8F */
+      '?', /* U+2E90 */
+      '?', /* U+2E91 */
+      '?', /* U+2E92 */
+      '?', /* U+2E93 */
+      '?', /* U+2E94 */
+      '?', /* U+2E95 */
+      '?', /* U+2E96 */
+      '?', /* U+2E97 */
+      '?', /* U+2E98 */
+      '?', /* U+2E99 */
+      '?', /* U+2E9A */
+      '?', /* U+2E9B */
+      '?', /* U+2E9C */
+      '?', /* U+2E9D */
+      '?', /* U+2E9E */
+      '?', /* U+2E9F */
+      '?', /* U+2EA0 */
+      '?', /* U+2EA1 */
+      '?', /* U+2EA2 */
+      '?', /* U+2EA3 */
+      '?', /* U+2EA4 */
+      '?', /* U+2EA5 */
+      '?', /* U+2EA6 */
+      '?', /* U+2EA7 */
+      '?', /* U+2EA8 */
+      '?', /* U+2EA9 */
+      '?', /* U+2EAA */
+      '?', /* U+2EAB */
+      '?', /* U+2EAC */
+      '?', /* U+2EAD */
+      '?', /* U+2EAE */
+      '?', /* U+2EAF */
+      '?', /* U+2EB0 */
+      '?', /* U+2EB1 */
+      '?', /* U+2EB2 */
+      '?', /* U+2EB3 */
+      '?', /* U+2EB4 */
+      '?', /* U+2EB5 */
+      '?', /* U+2EB6 */
+      '?', /* U+2EB7 */
+      '?', /* U+2EB8 */
+      '?', /* U+2EB9 */
+      '?', /* U+2EBA */
+      '?', /* U+2EBB */
+      '?', /* U+2EBC */
+      '?', /* U+2EBD */
+      '?', /* U+2EBE */
+      '?', /* U+2EBF */
+      '?', /* U+2EC0 */
+      '?', /* U+2EC1 */
+      '?', /* U+2EC2 */
+      '?', /* U+2EC3 */
+      '?', /* U+2EC4 */
+      '?', /* U+2EC5 */
+      '?', /* U+2EC6 */
+      '?', /* U+2EC7 */
+      '?', /* U+2EC8 */
+      '?', /* U+2EC9 */
+      '?', /* U+2ECA */
+      '?', /* U+2ECB */
+      '?', /* U+2ECC */
+      '?', /* U+2ECD */
+      '?', /* U+2ECE */
+      '?', /* U+2ECF */
+      '?', /* U+2ED0 */
+      '?', /* U+2ED1 */
+      '?', /* U+2ED2 */
+      '?', /* U+2ED3 */
+      '?', /* U+2ED4 */
+      '?', /* U+2ED5 */
+      '?', /* U+2ED6 */
+      '?', /* U+2ED7 */
+      '?', /* U+2ED8 */
+      '?', /* U+2ED9 */
+      '?', /* U+2EDA */
+      '?', /* U+2EDB */
+      '?', /* U+2EDC */
+      '?', /* U+2EDD */
+      '?', /* U+2EDE */
+      '?', /* U+2EDF */
+      '?', /* U+2EE0 */
+      '?', /* U+2EE1 */
+      '?', /* U+2EE2 */
+      '?', /* U+2EE3 */
+      '?', /* U+2EE4 */
+      '?', /* U+2EE5 */
+      '?', /* U+2EE6 */
+      '?', /* U+2EE7 */
+      '?', /* U+2EE8 */
+      '?', /* U+2EE9 */
+      '?', /* U+2EEA */
+      '?', /* U+2EEB */
+      '?', /* U+2EEC */
+      '?', /* U+2EED */
+      '?', /* U+2EEE */
+      '?', /* U+2EEF */
+      '?', /* U+2EF0 */
+      '?', /* U+2EF1 */
+      '?', /* U+2EF2 */
+      '?', /* U+2EF3 */
+      '?', /* U+2EF4 */
+      '?', /* U+2EF5 */
+      '?', /* U+2EF6 */
+      '?', /* U+2EF7 */
+      '?', /* U+2EF8 */
+      '?', /* U+2EF9 */
+      '?', /* U+2EFA */
+      '?', /* U+2EFB */
+      '?', /* U+2EFC */
+      '?', /* U+2EFD */
+      '?', /* U+2EFE */
+      '?', /* U+2EFF */
+      '?', /* U+2F00 */
+      '?', /* U+2F01 */
+      '?', /* U+2F02 */
+      '?', /* U+2F03 */
+      '?', /* U+2F04 */
+      '?', /* U+2F05 */
+      '?', /* U+2F06 */
+      '?', /* U+2F07 */
+      '?', /* U+2F08 */
+      '?', /* U+2F09 */
+      '?', /* U+2F0A */
+      '?', /* U+2F0B */
+      '?', /* U+2F0C */
+      '?', /* U+2F0D */
+      '?', /* U+2F0E */
+      '?', /* U+2F0F */
+      '?', /* U+2F10 */
+      '?', /* U+2F11 */
+      '?', /* U+2F12 */
+      '?', /* U+2F13 */
+      '?', /* U+2F14 */
+      '?', /* U+2F15 */
+      '?', /* U+2F16 */
+      '?', /* U+2F17 */
+      '?', /* U+2F18 */
+      '?', /* U+2F19 */
+      '?', /* U+2F1A */
+      '?', /* U+2F1B */
+      '?', /* U+2F1C */
+      '?', /* U+2F1D */
+      '?', /* U+2F1E */
+      '?', /* U+2F1F */
+      '?', /* U+2F20 */
+      '?', /* U+2F21 */
+      '?', /* U+2F22 */
+      '?', /* U+2F23 */
+      '?', /* U+2F24 */
+      '?', /* U+2F25 */
+      '?', /* U+2F26 */
+      '?', /* U+2F27 */
+      '?', /* U+2F28 */
+      '?', /* U+2F29 */
+      '?', /* U+2F2A */
+      '?', /* U+2F2B */
+      '?', /* U+2F2C */
+      '?', /* U+2F2D */
+      '?', /* U+2F2E */
+      '?', /* U+2F2F */
+      '?', /* U+2F30 */
+      '?', /* U+2F31 */
+      '?', /* U+2F32 */
+      '?', /* U+2F33 */
+      '?', /* U+2F34 */
+      '?', /* U+2F35 */
+      '?', /* U+2F36 */
+      '?', /* U+2F37 */
+      '?', /* U+2F38 */
+      '?', /* U+2F39 */
+      '?', /* U+2F3A */
+      '?', /* U+2F3B */
+      '?', /* U+2F3C */
+      '?', /* U+2F3D */
+      '?', /* U+2F3E */
+      '?', /* U+2F3F */
+      '?', /* U+2F40 */
+      '?', /* U+2F41 */
+      '?', /* U+2F42 */
+      '?', /* U+2F43 */
+      '?', /* U+2F44 */
+      '?', /* U+2F45 */
+      '?', /* U+2F46 */
+      '?', /* U+2F47 */
+      '?', /* U+2F48 */
+      '?', /* U+2F49 */
+      '?', /* U+2F4A */
+      '?', /* U+2F4B */
+      '?', /* U+2F4C */
+      '?', /* U+2F4D */
+      '?', /* U+2F4E */
+      '?', /* U+2F4F */
+      '?', /* U+2F50 */
+      '?', /* U+2F51 */
+      '?', /* U+2F52 */
+      '?', /* U+2F53 */
+      '?', /* U+2F54 */
+      '?', /* U+2F55 */
+      '?', /* U+2F56 */
+      '?', /* U+2F57 */
+      '?', /* U+2F58 */
+      '?', /* U+2F59 */
+      '?', /* U+2F5A */
+      '?', /* U+2F5B */
+      '?', /* U+2F5C */
+      '?', /* U+2F5D */
+      '?', /* U+2F5E */
+      '?', /* U+2F5F */
+      '?', /* U+2F60 */
+      '?', /* U+2F61 */
+      '?', /* U+2F62 */
+      '?', /* U+2F63 */
+      '?', /* U+2F64 */
+      '?', /* U+2F65 */
+      '?', /* U+2F66 */
+      '?', /* U+2F67 */
+      '?', /* U+2F68 */
+      '?', /* U+2F69 */
+      '?', /* U+2F6A */
+      '?', /* U+2F6B */
+      '?', /* U+2F6C */
+      '?', /* U+2F6D */
+      '?', /* U+2F6E */
+      '?', /* U+2F6F */
+      '?', /* U+2F70 */
+      '?', /* U+2F71 */
+      '?', /* U+2F72 */
+      '?', /* U+2F73 */
+      '?', /* U+2F74 */
+      '?', /* U+2F75 */
+      '?', /* U+2F76 */
+      '?', /* U+2F77 */
+      '?', /* U+2F78 */
+      '?', /* U+2F79 */
+      '?', /* U+2F7A */
+      '?', /* U+2F7B */
+      '?', /* U+2F7C */
+      '?', /* U+2F7D */
+      '?', /* U+2F7E */
+      '?', /* U+2F7F */
+      '?', /* U+2F80 */
+      '?', /* U+2F81 */
+      '?', /* U+2F82 */
+      '?', /* U+2F83 */
+      '?', /* U+2F84 */
+      '?', /* U+2F85 */
+      '?', /* U+2F86 */
+      '?', /* U+2F87 */
+      '?', /* U+2F88 */
+      '?', /* U+2F89 */
+      '?', /* U+2F8A */
+      '?', /* U+2F8B */
+      '?', /* U+2F8C */
+      '?', /* U+2F8D */
+      '?', /* U+2F8E */
+      '?', /* U+2F8F */
+      '?', /* U+2F90 */
+      '?', /* U+2F91 */
+      '?', /* U+2F92 */
+      '?', /* U+2F93 */
+      '?', /* U+2F94 */
+      '?', /* U+2F95 */
+      '?', /* U+2F96 */
+      '?', /* U+2F97 */
+      '?', /* U+2F98 */
+      '?', /* U+2F99 */
+      '?', /* U+2F9A */
+      '?', /* U+2F9B */
+      '?', /* U+2F9C */
+      '?', /* U+2F9D */
+      '?', /* U+2F9E */
+      '?', /* U+2F9F */
+      '?', /* U+2FA0 */
+      '?', /* U+2FA1 */
+      '?', /* U+2FA2 */
+      '?', /* U+2FA3 */
+      '?', /* U+2FA4 */
+      '?', /* U+2FA5 */
+      '?', /* U+2FA6 */
+      '?', /* U+2FA7 */
+      '?', /* U+2FA8 */
+      '?', /* U+2FA9 */
+      '?', /* U+2FAA */
+      '?', /* U+2FAB */
+      '?', /* U+2FAC */
+      '?', /* U+2FAD */
+      '?', /* U+2FAE */
+      '?', /* U+2FAF */
+      '?', /* U+2FB0 */
+      '?', /* U+2FB1 */
+      '?', /* U+2FB2 */
+      '?', /* U+2FB3 */
+      '?', /* U+2FB4 */
+      '?', /* U+2FB5 */
+      '?', /* U+2FB6 */
+      '?', /* U+2FB7 */
+      '?', /* U+2FB8 */
+      '?', /* U+2FB9 */
+      '?', /* U+2FBA */
+      '?', /* U+2FBB */
+      '?', /* U+2FBC */
+      '?', /* U+2FBD */
+      '?', /* U+2FBE */
+      '?', /* U+2FBF */
+      '?', /* U+2FC0 */
+      '?', /* U+2FC1 */
+      '?', /* U+2FC2 */
+      '?', /* U+2FC3 */
+      '?', /* U+2FC4 */
+      '?', /* U+2FC5 */
+      '?', /* U+2FC6 */
+      '?', /* U+2FC7 */
+      '?', /* U+2FC8 */
+      '?', /* U+2FC9 */
+      '?', /* U+2FCA */
+      '?', /* U+2FCB */
+      '?', /* U+2FCC */
+      '?', /* U+2FCD */
+      '?', /* U+2FCE */
+      '?', /* U+2FCF */
+      '?', /* U+2FD0 */
+      '?', /* U+2FD1 */
+      '?', /* U+2FD2 */
+      '?', /* U+2FD3 */
+      '?', /* U+2FD4 */
+      '?', /* U+2FD5 */
+      '?', /* U+2FD6 */
+      '?', /* U+2FD7 */
+      '?', /* U+2FD8 */
+      '?', /* U+2FD9 */
+      '?', /* U+2FDA */
+      '?', /* U+2FDB */
+      '?', /* U+2FDC */
+      '?', /* U+2FDD */
+      '?', /* U+2FDE */
+      '?', /* U+2FDF */
+      '?', /* U+2FE0 */
+      '?', /* U+2FE1 */
+      '?', /* U+2FE2 */
+      '?', /* U+2FE3 */
+      '?', /* U+2FE4 */
+      '?', /* U+2FE5 */
+      '?', /* U+2FE6 */
+      '?', /* U+2FE7 */
+      '?', /* U+2FE8 */
+      '?', /* U+2FE9 */
+      '?', /* U+2FEA */
+      '?', /* U+2FEB */
+      '?', /* U+2FEC */
+      '?', /* U+2FED */
+      '?', /* U+2FEE */
+      '?', /* U+2FEF */
+      '?', /* U+2FF0 */
+      '?', /* U+2FF1 */
+      '?', /* U+2FF2 */
+      '?', /* U+2FF3 */
+      '?', /* U+2FF4 */
+      '?', /* U+2FF5 */
+      '?', /* U+2FF6 */
+      '?', /* U+2FF7 */
+      '?', /* U+2FF8 */
+      '?', /* U+2FF9 */
+      '?', /* U+2FFA */
+      '?', /* U+2FFB */
+      '?', /* U+2FFC */
+      '?', /* U+2FFD */
+      '?', /* U+2FFE */
+      '?', /* U+2FFF */
+   0x8140, /* U+3000 */
+   0x8141, /* U+3001 */
+   0x8142, /* U+3002 */
+   0x8156, /* U+3003 */
+      '?', /* U+3004 */
+   0x8158, /* U+3005 */
+   0x8159, /* U+3006 */
+   0x815a, /* U+3007 */
+   0x8171, /* U+3008 */
+   0x8172, /* U+3009 */
+   0x8173, /* U+300A */
+   0x8174, /* U+300B */
+   0x8175, /* U+300C */
+   0x8176, /* U+300D */
+   0x8177, /* U+300E */
+   0x8178, /* U+300F */
+   0x8179, /* U+3010 */
+   0x817a, /* U+3011 */
+   0x81a7, /* U+3012 */
+   0x81ac, /* U+3013 */
+   0x816b, /* U+3014 */
+   0x816c, /* U+3015 */
+      '?', /* U+3016 */
+      '?', /* U+3017 */
+      '?', /* U+3018 */
+      '?', /* U+3019 */
+      '?', /* U+301A */
+      '?', /* U+301B */
+      '?', /* U+301C */
+   0x8780, /* U+301D */
+      '?', /* U+301E */
+   0x8781, /* U+301F */
+      '?', /* U+3020 */
+      '?', /* U+3021 */
+      '?', /* U+3022 */
+      '?', /* U+3023 */
+      '?', /* U+3024 */
+      '?', /* U+3025 */
+      '?', /* U+3026 */
+      '?', /* U+3027 */
+      '?', /* U+3028 */
+      '?', /* U+3029 */
+      '?', /* U+302A */
+      '?', /* U+302B */
+      '?', /* U+302C */
+      '?', /* U+302D */
+      '?', /* U+302E */
+      '?', /* U+302F */
+      '?', /* U+3030 */
+      '?', /* U+3031 */
+      '?', /* U+3032 */
+      '?', /* U+3033 */
+      '?', /* U+3034 */
+      '?', /* U+3035 */
+      '?', /* U+3036 */
+      '?', /* U+3037 */
+      '?', /* U+3038 */
+      '?', /* U+3039 */
+      '?', /* U+303A */
+      '?', /* U+303B */
+      '?', /* U+303C */
+      '?', /* U+303D */
+      '?', /* U+303E */
+      '?', /* U+303F */
+      '?', /* U+3040 */
+   0x829f, /* U+3041 */
+   0x82a0, /* U+3042 */
+   0x82a1, /* U+3043 */
+   0x82a2, /* U+3044 */
+   0x82a3, /* U+3045 */
+   0x82a4, /* U+3046 */
+   0x82a5, /* U+3047 */
+   0x82a6, /* U+3048 */
+   0x82a7, /* U+3049 */
+   0x82a8, /* U+304A */
+   0x82a9, /* U+304B */
+   0x82aa, /* U+304C */
+   0x82ab, /* U+304D */
+   0x82ac, /* U+304E */
+   0x82ad, /* U+304F */
+   0x82ae, /* U+3050 */
+   0x82af, /* U+3051 */
+   0x82b0, /* U+3052 */
+   0x82b1, /* U+3053 */
+   0x82b2, /* U+3054 */
+   0x82b3, /* U+3055 */
+   0x82b4, /* U+3056 */
+   0x82b5, /* U+3057 */
+   0x82b6, /* U+3058 */
+   0x82b7, /* U+3059 */
+   0x82b8, /* U+305A */
+   0x82b9, /* U+305B */
+   0x82ba, /* U+305C */
+   0x82bb, /* U+305D */
+   0x82bc, /* U+305E */
+   0x82bd, /* U+305F */
+   0x82be, /* U+3060 */
+   0x82bf, /* U+3061 */
+   0x82c0, /* U+3062 */
+   0x82c1, /* U+3063 */
+   0x82c2, /* U+3064 */
+   0x82c3, /* U+3065 */
+   0x82c4, /* U+3066 */
+   0x82c5, /* U+3067 */
+   0x82c6, /* U+3068 */
+   0x82c7, /* U+3069 */
+   0x82c8, /* U+306A */
+   0x82c9, /* U+306B */
+   0x82ca, /* U+306C */
+   0x82cb, /* U+306D */
+   0x82cc, /* U+306E */
+   0x82cd, /* U+306F */
+   0x82ce, /* U+3070 */
+   0x82cf, /* U+3071 */
+   0x82d0, /* U+3072 */
+   0x82d1, /* U+3073 */
+   0x82d2, /* U+3074 */
+   0x82d3, /* U+3075 */
+   0x82d4, /* U+3076 */
+   0x82d5, /* U+3077 */
+   0x82d6, /* U+3078 */
+   0x82d7, /* U+3079 */
+   0x82d8, /* U+307A */
+   0x82d9, /* U+307B */
+   0x82da, /* U+307C */
+   0x82db, /* U+307D */
+   0x82dc, /* U+307E */
+   0x82dd, /* U+307F */
+   0x82de, /* U+3080 */
+   0x82df, /* U+3081 */
+   0x82e0, /* U+3082 */
+   0x82e1, /* U+3083 */
+   0x82e2, /* U+3084 */
+   0x82e3, /* U+3085 */
+   0x82e4, /* U+3086 */
+   0x82e5, /* U+3087 */
+   0x82e6, /* U+3088 */
+   0x82e7, /* U+3089 */
+   0x82e8, /* U+308A */
+   0x82e9, /* U+308B */
+   0x82ea, /* U+308C */
+   0x82eb, /* U+308D */
+   0x82ec, /* U+308E */
+   0x82ed, /* U+308F */
+   0x82ee, /* U+3090 */
+   0x82ef, /* U+3091 */
+   0x82f0, /* U+3092 */
+   0x82f1, /* U+3093 */
+      '?', /* U+3094 */
+      '?', /* U+3095 */
+      '?', /* U+3096 */
+      '?', /* U+3097 */
+      '?', /* U+3098 */
+      '?', /* U+3099 */
+      '?', /* U+309A */
+   0x814a, /* U+309B */
+   0x814b, /* U+309C */
+   0x8154, /* U+309D */
+   0x8155, /* U+309E */
+      '?', /* U+309F */
+      '?', /* U+30A0 */
+   0x8340, /* U+30A1 */
+   0x8341, /* U+30A2 */
+   0x8342, /* U+30A3 */
+   0x8343, /* U+30A4 */
+   0x8344, /* U+30A5 */
+   0x8345, /* U+30A6 */
+   0x8346, /* U+30A7 */
+   0x8347, /* U+30A8 */
+   0x8348, /* U+30A9 */
+   0x8349, /* U+30AA */
+   0x834a, /* U+30AB */
+   0x834b, /* U+30AC */
+   0x834c, /* U+30AD */
+   0x834d, /* U+30AE */
+   0x834e, /* U+30AF */
+   0x834f, /* U+30B0 */
+   0x8350, /* U+30B1 */
+   0x8351, /* U+30B2 */
+   0x8352, /* U+30B3 */
+   0x8353, /* U+30B4 */
+   0x8354, /* U+30B5 */
+   0x8355, /* U+30B6 */
+   0x8356, /* U+30B7 */
+   0x8357, /* U+30B8 */
+   0x8358, /* U+30B9 */
+   0x8359, /* U+30BA */
+   0x835a, /* U+30BB */
+   0x835b, /* U+30BC */
+   0x835c, /* U+30BD */
+   0x835d, /* U+30BE */
+   0x835e, /* U+30BF */
+   0x835f, /* U+30C0 */
+   0x8360, /* U+30C1 */
+   0x8361, /* U+30C2 */
+   0x8362, /* U+30C3 */
+   0x8363, /* U+30C4 */
+   0x8364, /* U+30C5 */
+   0x8365, /* U+30C6 */
+   0x8366, /* U+30C7 */
+   0x8367, /* U+30C8 */
+   0x8368, /* U+30C9 */
+   0x8369, /* U+30CA */
+   0x836a, /* U+30CB */
+   0x836b, /* U+30CC */
+   0x836c, /* U+30CD */
+   0x836d, /* U+30CE */
+   0x836e, /* U+30CF */
+   0x836f, /* U+30D0 */
+   0x8370, /* U+30D1 */
+   0x8371, /* U+30D2 */
+   0x8372, /* U+30D3 */
+   0x8373, /* U+30D4 */
+   0x8374, /* U+30D5 */
+   0x8375, /* U+30D6 */
+   0x8376, /* U+30D7 */
+   0x8377, /* U+30D8 */
+   0x8378, /* U+30D9 */
+   0x8379, /* U+30DA */
+   0x837a, /* U+30DB */
+   0x837b, /* U+30DC */
+   0x837c, /* U+30DD */
+   0x837d, /* U+30DE */
+   0x837e, /* U+30DF */
+   0x8380, /* U+30E0 */
+   0x8381, /* U+30E1 */
+   0x8382, /* U+30E2 */
+   0x8383, /* U+30E3 */
+   0x8384, /* U+30E4 */
+   0x8385, /* U+30E5 */
+   0x8386, /* U+30E6 */
+   0x8387, /* U+30E7 */
+   0x8388, /* U+30E8 */
+   0x8389, /* U+30E9 */
+   0x838a, /* U+30EA */
+   0x838b, /* U+30EB */
+   0x838c, /* U+30EC */
+   0x838d, /* U+30ED */
+   0x838e, /* U+30EE */
+   0x838f, /* U+30EF */
+   0x8390, /* U+30F0 */
+   0x8391, /* U+30F1 */
+   0x8392, /* U+30F2 */
+   0x8393, /* U+30F3 */
+   0x8394, /* U+30F4 */
+   0x8395, /* U+30F5 */
+   0x8396, /* U+30F6 */
+      '?', /* U+30F7 */
+      '?', /* U+30F8 */
+      '?', /* U+30F9 */
+      '?', /* U+30FA */
+   0x8145, /* U+30FB */
+   0x815b, /* U+30FC */
+   0x8152, /* U+30FD */
+   0x8153, /* U+30FE */
+      '?', /* U+30FF */
+      '?', /* U+3100 */
+      '?', /* U+3101 */
+      '?', /* U+3102 */
+      '?', /* U+3103 */
+      '?', /* U+3104 */
+      '?', /* U+3105 */
+      '?', /* U+3106 */
+      '?', /* U+3107 */
+      '?', /* U+3108 */
+      '?', /* U+3109 */
+      '?', /* U+310A */
+      '?', /* U+310B */
+      '?', /* U+310C */
+      '?', /* U+310D */
+      '?', /* U+310E */
+      '?', /* U+310F */
+      '?', /* U+3110 */
+      '?', /* U+3111 */
+      '?', /* U+3112 */
+      '?', /* U+3113 */
+      '?', /* U+3114 */
+      '?', /* U+3115 */
+      '?', /* U+3116 */
+      '?', /* U+3117 */
+      '?', /* U+3118 */
+      '?', /* U+3119 */
+      '?', /* U+311A */
+      '?', /* U+311B */
+      '?', /* U+311C */
+      '?', /* U+311D */
+      '?', /* U+311E */
+      '?', /* U+311F */
+      '?', /* U+3120 */
+      '?', /* U+3121 */
+      '?', /* U+3122 */
+      '?', /* U+3123 */
+      '?', /* U+3124 */
+      '?', /* U+3125 */
+      '?', /* U+3126 */
+      '?', /* U+3127 */
+      '?', /* U+3128 */
+      '?', /* U+3129 */
+      '?', /* U+312A */
+      '?', /* U+312B */
+      '?', /* U+312C */
+      '?', /* U+312D */
+      '?', /* U+312E */
+      '?', /* U+312F */
+      '?', /* U+3130 */
+      '?', /* U+3131 */
+      '?', /* U+3132 */
+      '?', /* U+3133 */
+      '?', /* U+3134 */
+      '?', /* U+3135 */
+      '?', /* U+3136 */
+      '?', /* U+3137 */
+      '?', /* U+3138 */
+      '?', /* U+3139 */
+      '?', /* U+313A */
+      '?', /* U+313B */
+      '?', /* U+313C */
+      '?', /* U+313D */
+      '?', /* U+313E */
+      '?', /* U+313F */
+      '?', /* U+3140 */
+      '?', /* U+3141 */
+      '?', /* U+3142 */
+      '?', /* U+3143 */
+      '?', /* U+3144 */
+      '?', /* U+3145 */
+      '?', /* U+3146 */
+      '?', /* U+3147 */
+      '?', /* U+3148 */
+      '?', /* U+3149 */
+      '?', /* U+314A */
+      '?', /* U+314B */
+      '?', /* U+314C */
+      '?', /* U+314D */
+      '?', /* U+314E */
+      '?', /* U+314F */
+      '?', /* U+3150 */
+      '?', /* U+3151 */
+      '?', /* U+3152 */
+      '?', /* U+3153 */
+      '?', /* U+3154 */
+      '?', /* U+3155 */
+      '?', /* U+3156 */
+      '?', /* U+3157 */
+      '?', /* U+3158 */
+      '?', /* U+3159 */
+      '?', /* U+315A */
+      '?', /* U+315B */
+      '?', /* U+315C */
+      '?', /* U+315D */
+      '?', /* U+315E */
+      '?', /* U+315F */
+      '?', /* U+3160 */
+      '?', /* U+3161 */
+      '?', /* U+3162 */
+      '?', /* U+3163 */
+      '?', /* U+3164 */
+      '?', /* U+3165 */
+      '?', /* U+3166 */
+      '?', /* U+3167 */
+      '?', /* U+3168 */
+      '?', /* U+3169 */
+      '?', /* U+316A */
+      '?', /* U+316B */
+      '?', /* U+316C */
+      '?', /* U+316D */
+      '?', /* U+316E */
+      '?', /* U+316F */
+      '?', /* U+3170 */
+      '?', /* U+3171 */
+      '?', /* U+3172 */
+      '?', /* U+3173 */
+      '?', /* U+3174 */
+      '?', /* U+3175 */
+      '?', /* U+3176 */
+      '?', /* U+3177 */
+      '?', /* U+3178 */
+      '?', /* U+3179 */
+      '?', /* U+317A */
+      '?', /* U+317B */
+      '?', /* U+317C */
+      '?', /* U+317D */
+      '?', /* U+317E */
+      '?', /* U+317F */
+      '?', /* U+3180 */
+      '?', /* U+3181 */
+      '?', /* U+3182 */
+      '?', /* U+3183 */
+      '?', /* U+3184 */
+      '?', /* U+3185 */
+      '?', /* U+3186 */
+      '?', /* U+3187 */
+      '?', /* U+3188 */
+      '?', /* U+3189 */
+      '?', /* U+318A */
+      '?', /* U+318B */
+      '?', /* U+318C */
+      '?', /* U+318D */
+      '?', /* U+318E */
+      '?', /* U+318F */
+      '?', /* U+3190 */
+      '?', /* U+3191 */
+      '?', /* U+3192 */
+      '?', /* U+3193 */
+      '?', /* U+3194 */
+      '?', /* U+3195 */
+      '?', /* U+3196 */
+      '?', /* U+3197 */
+      '?', /* U+3198 */
+      '?', /* U+3199 */
+      '?', /* U+319A */
+      '?', /* U+319B */
+      '?', /* U+319C */
+      '?', /* U+319D */
+      '?', /* U+319E */
+      '?', /* U+319F */
+      '?', /* U+31A0 */
+      '?', /* U+31A1 */
+      '?', /* U+31A2 */
+      '?', /* U+31A3 */
+      '?', /* U+31A4 */
+      '?', /* U+31A5 */
+      '?', /* U+31A6 */
+      '?', /* U+31A7 */
+      '?', /* U+31A8 */
+      '?', /* U+31A9 */
+      '?', /* U+31AA */
+      '?', /* U+31AB */
+      '?', /* U+31AC */
+      '?', /* U+31AD */
+      '?', /* U+31AE */
+      '?', /* U+31AF */
+      '?', /* U+31B0 */
+      '?', /* U+31B1 */
+      '?', /* U+31B2 */
+      '?', /* U+31B3 */
+      '?', /* U+31B4 */
+      '?', /* U+31B5 */
+      '?', /* U+31B6 */
+      '?', /* U+31B7 */
+      '?', /* U+31B8 */
+      '?', /* U+31B9 */
+      '?', /* U+31BA */
+      '?', /* U+31BB */
+      '?', /* U+31BC */
+      '?', /* U+31BD */
+      '?', /* U+31BE */
+      '?', /* U+31BF */
+      '?', /* U+31C0 */
+      '?', /* U+31C1 */
+      '?', /* U+31C2 */
+      '?', /* U+31C3 */
+      '?', /* U+31C4 */
+      '?', /* U+31C5 */
+      '?', /* U+31C6 */
+      '?', /* U+31C7 */
+      '?', /* U+31C8 */
+      '?', /* U+31C9 */
+      '?', /* U+31CA */
+      '?', /* U+31CB */
+      '?', /* U+31CC */
+      '?', /* U+31CD */
+      '?', /* U+31CE */
+      '?', /* U+31CF */
+      '?', /* U+31D0 */
+      '?', /* U+31D1 */
+      '?', /* U+31D2 */
+      '?', /* U+31D3 */
+      '?', /* U+31D4 */
+      '?', /* U+31D5 */
+      '?', /* U+31D6 */
+      '?', /* U+31D7 */
+      '?', /* U+31D8 */
+      '?', /* U+31D9 */
+      '?', /* U+31DA */
+      '?', /* U+31DB */
+      '?', /* U+31DC */
+      '?', /* U+31DD */
+      '?', /* U+31DE */
+      '?', /* U+31DF */
+      '?', /* U+31E0 */
+      '?', /* U+31E1 */
+      '?', /* U+31E2 */
+      '?', /* U+31E3 */
+      '?', /* U+31E4 */
+      '?', /* U+31E5 */
+      '?', /* U+31E6 */
+      '?', /* U+31E7 */
+      '?', /* U+31E8 */
+      '?', /* U+31E9 */
+      '?', /* U+31EA */
+      '?', /* U+31EB */
+      '?', /* U+31EC */
+      '?', /* U+31ED */
+      '?', /* U+31EE */
+      '?', /* U+31EF */
+      '?', /* U+31F0 */
+      '?', /* U+31F1 */
+      '?', /* U+31F2 */
+      '?', /* U+31F3 */
+      '?', /* U+31F4 */
+      '?', /* U+31F5 */
+      '?', /* U+31F6 */
+      '?', /* U+31F7 */
+      '?', /* U+31F8 */
+      '?', /* U+31F9 */
+      '?', /* U+31FA */
+      '?', /* U+31FB */
+      '?', /* U+31FC */
+      '?', /* U+31FD */
+      '?', /* U+31FE */
+      '?', /* U+31FF */
+      '?', /* U+3200 */
+      '?', /* U+3201 */
+      '?', /* U+3202 */
+      '?', /* U+3203 */
+      '?', /* U+3204 */
+      '?', /* U+3205 */
+      '?', /* U+3206 */
+      '?', /* U+3207 */
+      '?', /* U+3208 */
+      '?', /* U+3209 */
+      '?', /* U+320A */
+      '?', /* U+320B */
+      '?', /* U+320C */
+      '?', /* U+320D */
+      '?', /* U+320E */
+      '?', /* U+320F */
+      '?', /* U+3210 */
+      '?', /* U+3211 */
+      '?', /* U+3212 */
+      '?', /* U+3213 */
+      '?', /* U+3214 */
+      '?', /* U+3215 */
+      '?', /* U+3216 */
+      '?', /* U+3217 */
+      '?', /* U+3218 */
+      '?', /* U+3219 */
+      '?', /* U+321A */
+      '?', /* U+321B */
+      '?', /* U+321C */
+      '?', /* U+321D */
+      '?', /* U+321E */
+      '?', /* U+321F */
+      '?', /* U+3220 */
+      '?', /* U+3221 */
+      '?', /* U+3222 */
+      '?', /* U+3223 */
+      '?', /* U+3224 */
+      '?', /* U+3225 */
+      '?', /* U+3226 */
+      '?', /* U+3227 */
+      '?', /* U+3228 */
+      '?', /* U+3229 */
+      '?', /* U+322A */
+      '?', /* U+322B */
+      '?', /* U+322C */
+      '?', /* U+322D */
+      '?', /* U+322E */
+      '?', /* U+322F */
+      '?', /* U+3230 */
+   0xfa58, /* U+3231 */
+   0x878b, /* U+3232 */
+      '?', /* U+3233 */
+      '?', /* U+3234 */
+      '?', /* U+3235 */
+      '?', /* U+3236 */
+      '?', /* U+3237 */
+      '?', /* U+3238 */
+   0x878c, /* U+3239 */
+      '?', /* U+323A */
+      '?', /* U+323B */
+      '?', /* U+323C */
+      '?', /* U+323D */
+      '?', /* U+323E */
+      '?', /* U+323F */
+      '?', /* U+3240 */
+      '?', /* U+3241 */
+      '?', /* U+3242 */
+      '?', /* U+3243 */
+      '?', /* U+3244 */
+      '?', /* U+3245 */
+      '?', /* U+3246 */
+      '?', /* U+3247 */
+      '?', /* U+3248 */
+      '?', /* U+3249 */
+      '?', /* U+324A */
+      '?', /* U+324B */
+      '?', /* U+324C */
+      '?', /* U+324D */
+      '?', /* U+324E */
+      '?', /* U+324F */
+      '?', /* U+3250 */
+      '?', /* U+3251 */
+      '?', /* U+3252 */
+      '?', /* U+3253 */
+      '?', /* U+3254 */
+      '?', /* U+3255 */
+      '?', /* U+3256 */
+      '?', /* U+3257 */
+      '?', /* U+3258 */
+      '?', /* U+3259 */
+      '?', /* U+325A */
+      '?', /* U+325B */
+      '?', /* U+325C */
+      '?', /* U+325D */
+      '?', /* U+325E */
+      '?', /* U+325F */
+      '?', /* U+3260 */
+      '?', /* U+3261 */
+      '?', /* U+3262 */
+      '?', /* U+3263 */
+      '?', /* U+3264 */
+      '?', /* U+3265 */
+      '?', /* U+3266 */
+      '?', /* U+3267 */
+      '?', /* U+3268 */
+      '?', /* U+3269 */
+      '?', /* U+326A */
+      '?', /* U+326B */
+      '?', /* U+326C */
+      '?', /* U+326D */
+      '?', /* U+326E */
+      '?', /* U+326F */
+      '?', /* U+3270 */
+      '?', /* U+3271 */
+      '?', /* U+3272 */
+      '?', /* U+3273 */
+      '?', /* U+3274 */
+      '?', /* U+3275 */
+      '?', /* U+3276 */
+      '?', /* U+3277 */
+      '?', /* U+3278 */
+      '?', /* U+3279 */
+      '?', /* U+327A */
+      '?', /* U+327B */
+      '?', /* U+327C */
+      '?', /* U+327D */
+      '?', /* U+327E */
+      '?', /* U+327F */
+      '?', /* U+3280 */
+      '?', /* U+3281 */
+      '?', /* U+3282 */
+      '?', /* U+3283 */
+      '?', /* U+3284 */
+      '?', /* U+3285 */
+      '?', /* U+3286 */
+      '?', /* U+3287 */
+      '?', /* U+3288 */
+      '?', /* U+3289 */
+      '?', /* U+328A */
+      '?', /* U+328B */
+      '?', /* U+328C */
+      '?', /* U+328D */
+      '?', /* U+328E */
+      '?', /* U+328F */
+      '?', /* U+3290 */
+      '?', /* U+3291 */
+      '?', /* U+3292 */
+      '?', /* U+3293 */
+      '?', /* U+3294 */
+      '?', /* U+3295 */
+      '?', /* U+3296 */
+      '?', /* U+3297 */
+      '?', /* U+3298 */
+      '?', /* U+3299 */
+      '?', /* U+329A */
+      '?', /* U+329B */
+      '?', /* U+329C */
+      '?', /* U+329D */
+      '?', /* U+329E */
+      '?', /* U+329F */
+      '?', /* U+32A0 */
+      '?', /* U+32A1 */
+      '?', /* U+32A2 */
+      '?', /* U+32A3 */
+   0x8785, /* U+32A4 */
+   0x8786, /* U+32A5 */
+   0x8787, /* U+32A6 */
+   0x8788, /* U+32A7 */
+   0x8789, /* U+32A8 */
+      '?', /* U+32A9 */
+      '?', /* U+32AA */
+      '?', /* U+32AB */
+      '?', /* U+32AC */
+      '?', /* U+32AD */
+      '?', /* U+32AE */
+      '?', /* U+32AF */
+      '?', /* U+32B0 */
+      '?', /* U+32B1 */
+      '?', /* U+32B2 */
+      '?', /* U+32B3 */
+      '?', /* U+32B4 */
+      '?', /* U+32B5 */
+      '?', /* U+32B6 */
+      '?', /* U+32B7 */
+      '?', /* U+32B8 */
+      '?', /* U+32B9 */
+      '?', /* U+32BA */
+      '?', /* U+32BB */
+      '?', /* U+32BC */
+      '?', /* U+32BD */
+      '?', /* U+32BE */
+      '?', /* U+32BF */
+      '?', /* U+32C0 */
+      '?', /* U+32C1 */
+      '?', /* U+32C2 */
+      '?', /* U+32C3 */
+      '?', /* U+32C4 */
+      '?', /* U+32C5 */
+      '?', /* U+32C6 */
+      '?', /* U+32C7 */
+      '?', /* U+32C8 */
+      '?', /* U+32C9 */
+      '?', /* U+32CA */
+      '?', /* U+32CB */
+      '?', /* U+32CC */
+      '?', /* U+32CD */
+      '?', /* U+32CE */
+      '?', /* U+32CF */
+      '?', /* U+32D0 */
+      '?', /* U+32D1 */
+      '?', /* U+32D2 */
+      '?', /* U+32D3 */
+      '?', /* U+32D4 */
+      '?', /* U+32D5 */
+      '?', /* U+32D6 */
+      '?', /* U+32D7 */
+      '?', /* U+32D8 */
+      '?', /* U+32D9 */
+      '?', /* U+32DA */
+      '?', /* U+32DB */
+      '?', /* U+32DC */
+      '?', /* U+32DD */
+      '?', /* U+32DE */
+      '?', /* U+32DF */
+      '?', /* U+32E0 */
+      '?', /* U+32E1 */
+      '?', /* U+32E2 */
+      '?', /* U+32E3 */
+      '?', /* U+32E4 */
+      '?', /* U+32E5 */
+      '?', /* U+32E6 */
+      '?', /* U+32E7 */
+      '?', /* U+32E8 */
+      '?', /* U+32E9 */
+      '?', /* U+32EA */
+      '?', /* U+32EB */
+      '?', /* U+32EC */
+      '?', /* U+32ED */
+      '?', /* U+32EE */
+      '?', /* U+32EF */
+      '?', /* U+32F0 */
+      '?', /* U+32F1 */
+      '?', /* U+32F2 */
+      '?', /* U+32F3 */
+      '?', /* U+32F4 */
+      '?', /* U+32F5 */
+      '?', /* U+32F6 */
+      '?', /* U+32F7 */
+      '?', /* U+32F8 */
+      '?', /* U+32F9 */
+      '?', /* U+32FA */
+      '?', /* U+32FB */
+      '?', /* U+32FC */
+      '?', /* U+32FD */
+      '?', /* U+32FE */
+      '?', /* U+32FF */
+      '?', /* U+3300 */
+      '?', /* U+3301 */
+      '?', /* U+3302 */
+   0x8765, /* U+3303 */
+      '?', /* U+3304 */
+      '?', /* U+3305 */
+      '?', /* U+3306 */
+      '?', /* U+3307 */
+      '?', /* U+3308 */
+      '?', /* U+3309 */
+      '?', /* U+330A */
+      '?', /* U+330B */
+      '?', /* U+330C */
+   0x8769, /* U+330D */
+      '?', /* U+330E */
+      '?', /* U+330F */
+      '?', /* U+3310 */
+      '?', /* U+3311 */
+      '?', /* U+3312 */
+      '?', /* U+3313 */
+   0x8760, /* U+3314 */
+      '?', /* U+3315 */
+      '?', /* U+3316 */
+      '?', /* U+3317 */
+   0x8763, /* U+3318 */
+      '?', /* U+3319 */
+      '?', /* U+331A */
+      '?', /* U+331B */
+      '?', /* U+331C */
+      '?', /* U+331D */
+      '?', /* U+331E */
+      '?', /* U+331F */
+      '?', /* U+3320 */
+      '?', /* U+3321 */
+   0x8761, /* U+3322 */
+   0x876b, /* U+3323 */
+      '?', /* U+3324 */
+      '?', /* U+3325 */
+   0x876a, /* U+3326 */
+   0x8764, /* U+3327 */
+      '?', /* U+3328 */
+      '?', /* U+3329 */
+      '?', /* U+332A */
+   0x876c, /* U+332B */
+      '?', /* U+332C */
+      '?', /* U+332D */
+      '?', /* U+332E */
+      '?', /* U+332F */
+      '?', /* U+3330 */
+      '?', /* U+3331 */
+      '?', /* U+3332 */
+      '?', /* U+3333 */
+      '?', /* U+3334 */
+      '?', /* U+3335 */
+   0x8766, /* U+3336 */
+      '?', /* U+3337 */
+      '?', /* U+3338 */
+      '?', /* U+3339 */
+      '?', /* U+333A */
+   0x876e, /* U+333B */
+      '?', /* U+333C */
+      '?', /* U+333D */
+      '?', /* U+333E */
+      '?', /* U+333F */
+      '?', /* U+3340 */
+      '?', /* U+3341 */
+      '?', /* U+3342 */
+      '?', /* U+3343 */
+      '?', /* U+3344 */
+      '?', /* U+3345 */
+      '?', /* U+3346 */
+      '?', /* U+3347 */
+      '?', /* U+3348 */
+   0x875f, /* U+3349 */
+   0x876d, /* U+334A */
+      '?', /* U+334B */
+      '?', /* U+334C */
+   0x8762, /* U+334D */
+      '?', /* U+334E */
+      '?', /* U+334F */
+      '?', /* U+3350 */
+   0x8767, /* U+3351 */
+      '?', /* U+3352 */
+      '?', /* U+3353 */
+      '?', /* U+3354 */
+      '?', /* U+3355 */
+      '?', /* U+3356 */
+   0x8768, /* U+3357 */
+      '?', /* U+3358 */
+      '?', /* U+3359 */
+      '?', /* U+335A */
+      '?', /* U+335B */
+      '?', /* U+335C */
+      '?', /* U+335D */
+      '?', /* U+335E */
+      '?', /* U+335F */
+      '?', /* U+3360 */
+      '?', /* U+3361 */
+      '?', /* U+3362 */
+      '?', /* U+3363 */
+      '?', /* U+3364 */
+      '?', /* U+3365 */
+      '?', /* U+3366 */
+      '?', /* U+3367 */
+      '?', /* U+3368 */
+      '?', /* U+3369 */
+      '?', /* U+336A */
+      '?', /* U+336B */
+      '?', /* U+336C */
+      '?', /* U+336D */
+      '?', /* U+336E */
+      '?', /* U+336F */
+      '?', /* U+3370 */
+      '?', /* U+3371 */
+      '?', /* U+3372 */
+      '?', /* U+3373 */
+      '?', /* U+3374 */
+      '?', /* U+3375 */
+      '?', /* U+3376 */
+      '?', /* U+3377 */
+      '?', /* U+3378 */
+      '?', /* U+3379 */
+      '?', /* U+337A */
+   0x877e, /* U+337B */
+   0x878f, /* U+337C */
+   0x878e, /* U+337D */
+   0x878d, /* U+337E */
+      '?', /* U+337F */
+      '?', /* U+3380 */
+      '?', /* U+3381 */
+      '?', /* U+3382 */
+      '?', /* U+3383 */
+      '?', /* U+3384 */
+      '?', /* U+3385 */
+      '?', /* U+3386 */
+      '?', /* U+3387 */
+      '?', /* U+3388 */
+      '?', /* U+3389 */
+      '?', /* U+338A */
+      '?', /* U+338B */
+      '?', /* U+338C */
+      '?', /* U+338D */
+   0x8772, /* U+338E */
+   0x8773, /* U+338F */
+      '?', /* U+3390 */
+      '?', /* U+3391 */
+      '?', /* U+3392 */
+      '?', /* U+3393 */
+      '?', /* U+3394 */
+      '?', /* U+3395 */
+      '?', /* U+3396 */
+      '?', /* U+3397 */
+      '?', /* U+3398 */
+      '?', /* U+3399 */
+      '?', /* U+339A */
+      '?', /* U+339B */
+   0x876f, /* U+339C */
+   0x8770, /* U+339D */
+   0x8771, /* U+339E */
+      '?', /* U+339F */
+      '?', /* U+33A0 */
+   0x8775, /* U+33A1 */
+      '?', /* U+33A2 */
+      '?', /* U+33A3 */
+      '?', /* U+33A4 */
+      '?', /* U+33A5 */
+      '?', /* U+33A6 */
+      '?', /* U+33A7 */
+      '?', /* U+33A8 */
+      '?', /* U+33A9 */
+      '?', /* U+33AA */
+      '?', /* U+33AB */
+      '?', /* U+33AC */
+      '?', /* U+33AD */
+      '?', /* U+33AE */
+      '?', /* U+33AF */
+      '?', /* U+33B0 */
+      '?', /* U+33B1 */
+      '?', /* U+33B2 */
+      '?', /* U+33B3 */
+      '?', /* U+33B4 */
+      '?', /* U+33B5 */
+      '?', /* U+33B6 */
+      '?', /* U+33B7 */
+      '?', /* U+33B8 */
+      '?', /* U+33B9 */
+      '?', /* U+33BA */
+      '?', /* U+33BB */
+      '?', /* U+33BC */
+      '?', /* U+33BD */
+      '?', /* U+33BE */
+      '?', /* U+33BF */
+      '?', /* U+33C0 */
+      '?', /* U+33C1 */
+      '?', /* U+33C2 */
+      '?', /* U+33C3 */
+   0x8774, /* U+33C4 */
+      '?', /* U+33C5 */
+      '?', /* U+33C6 */
+      '?', /* U+33C7 */
+      '?', /* U+33C8 */
+      '?', /* U+33C9 */
+      '?', /* U+33CA */
+      '?', /* U+33CB */
+      '?', /* U+33CC */
+   0x8783, /* U+33CD */
+      '?', /* U+33CE */
+      '?', /* U+33CF */
+      '?', /* U+33D0 */
+      '?', /* U+33D1 */
+      '?', /* U+33D2 */
+      '?', /* U+33D3 */
+      '?', /* U+33D4 */
+      '?', /* U+33D5 */
+      '?', /* U+33D6 */
+      '?', /* U+33D7 */
+      '?', /* U+33D8 */
+      '?', /* U+33D9 */
+      '?', /* U+33DA */
+      '?', /* U+33DB */
+      '?', /* U+33DC */
+      '?', /* U+33DD */
+      '?', /* U+33DE */
+      '?', /* U+33DF */
+      '?', /* U+33E0 */
+      '?', /* U+33E1 */
+      '?', /* U+33E2 */
+      '?', /* U+33E3 */
+      '?', /* U+33E4 */
+      '?', /* U+33E5 */
+      '?', /* U+33E6 */
+      '?', /* U+33E7 */
+      '?', /* U+33E8 */
+      '?', /* U+33E9 */
+      '?', /* U+33EA */
+      '?', /* U+33EB */
+      '?', /* U+33EC */
+      '?', /* U+33ED */
+      '?', /* U+33EE */
+      '?', /* U+33EF */
+      '?', /* U+33F0 */
+      '?', /* U+33F1 */
+      '?', /* U+33F2 */
+      '?', /* U+33F3 */
+      '?', /* U+33F4 */
+      '?', /* U+33F5 */
+      '?', /* U+33F6 */
+      '?', /* U+33F7 */
+      '?', /* U+33F8 */
+      '?', /* U+33F9 */
+      '?', /* U+33FA */
+      '?', /* U+33FB */
+      '?', /* U+33FC */
+      '?', /* U+33FD */
+      '?', /* U+33FE */
+      '?', /* U+33FF */
+      '?', /* U+3400 */
+      '?', /* U+3401 */
+      '?', /* U+3402 */
+      '?', /* U+3403 */
+      '?', /* U+3404 */
+      '?', /* U+3405 */
+      '?', /* U+3406 */
+      '?', /* U+3407 */
+      '?', /* U+3408 */
+      '?', /* U+3409 */
+      '?', /* U+340A */
+      '?', /* U+340B */
+      '?', /* U+340C */
+      '?', /* U+340D */
+      '?', /* U+340E */
+      '?', /* U+340F */
+      '?', /* U+3410 */
+      '?', /* U+3411 */
+      '?', /* U+3412 */
+      '?', /* U+3413 */
+      '?', /* U+3414 */
+      '?', /* U+3415 */
+      '?', /* U+3416 */
+      '?', /* U+3417 */
+      '?', /* U+3418 */
+      '?', /* U+3419 */
+      '?', /* U+341A */
+      '?', /* U+341B */
+      '?', /* U+341C */
+      '?', /* U+341D */
+      '?', /* U+341E */
+      '?', /* U+341F */
+      '?', /* U+3420 */
+      '?', /* U+3421 */
+      '?', /* U+3422 */
+      '?', /* U+3423 */
+      '?', /* U+3424 */
+      '?', /* U+3425 */
+      '?', /* U+3426 */
+      '?', /* U+3427 */
+      '?', /* U+3428 */
+      '?', /* U+3429 */
+      '?', /* U+342A */
+      '?', /* U+342B */
+      '?', /* U+342C */
+      '?', /* U+342D */
+      '?', /* U+342E */
+      '?', /* U+342F */
+      '?', /* U+3430 */
+      '?', /* U+3431 */
+      '?', /* U+3432 */
+      '?', /* U+3433 */
+      '?', /* U+3434 */
+      '?', /* U+3435 */
+      '?', /* U+3436 */
+      '?', /* U+3437 */
+      '?', /* U+3438 */
+      '?', /* U+3439 */
+      '?', /* U+343A */
+      '?', /* U+343B */
+      '?', /* U+343C */
+      '?', /* U+343D */
+      '?', /* U+343E */
+      '?', /* U+343F */
+      '?', /* U+3440 */
+      '?', /* U+3441 */
+      '?', /* U+3442 */
+      '?', /* U+3443 */
+      '?', /* U+3444 */
+      '?', /* U+3445 */
+      '?', /* U+3446 */
+      '?', /* U+3447 */
+      '?', /* U+3448 */
+      '?', /* U+3449 */
+      '?', /* U+344A */
+      '?', /* U+344B */
+      '?', /* U+344C */
+      '?', /* U+344D */
+      '?', /* U+344E */
+      '?', /* U+344F */
+      '?', /* U+3450 */
+      '?', /* U+3451 */
+      '?', /* U+3452 */
+      '?', /* U+3453 */
+      '?', /* U+3454 */
+      '?', /* U+3455 */
+      '?', /* U+3456 */
+      '?', /* U+3457 */
+      '?', /* U+3458 */
+      '?', /* U+3459 */
+      '?', /* U+345A */
+      '?', /* U+345B */
+      '?', /* U+345C */
+      '?', /* U+345D */
+      '?', /* U+345E */
+      '?', /* U+345F */
+      '?', /* U+3460 */
+      '?', /* U+3461 */
+      '?', /* U+3462 */
+      '?', /* U+3463 */
+      '?', /* U+3464 */
+      '?', /* U+3465 */
+      '?', /* U+3466 */
+      '?', /* U+3467 */
+      '?', /* U+3468 */
+      '?', /* U+3469 */
+      '?', /* U+346A */
+      '?', /* U+346B */
+      '?', /* U+346C */
+      '?', /* U+346D */
+      '?', /* U+346E */
+      '?', /* U+346F */
+      '?', /* U+3470 */
+      '?', /* U+3471 */
+      '?', /* U+3472 */
+      '?', /* U+3473 */
+      '?', /* U+3474 */
+      '?', /* U+3475 */
+      '?', /* U+3476 */
+      '?', /* U+3477 */
+      '?', /* U+3478 */
+      '?', /* U+3479 */
+      '?', /* U+347A */
+      '?', /* U+347B */
+      '?', /* U+347C */
+      '?', /* U+347D */
+      '?', /* U+347E */
+      '?', /* U+347F */
+      '?', /* U+3480 */
+      '?', /* U+3481 */
+      '?', /* U+3482 */
+      '?', /* U+3483 */
+      '?', /* U+3484 */
+      '?', /* U+3485 */
+      '?', /* U+3486 */
+      '?', /* U+3487 */
+      '?', /* U+3488 */
+      '?', /* U+3489 */
+      '?', /* U+348A */
+      '?', /* U+348B */
+      '?', /* U+348C */
+      '?', /* U+348D */
+      '?', /* U+348E */
+      '?', /* U+348F */
+      '?', /* U+3490 */
+      '?', /* U+3491 */
+      '?', /* U+3492 */
+      '?', /* U+3493 */
+      '?', /* U+3494 */
+      '?', /* U+3495 */
+      '?', /* U+3496 */
+      '?', /* U+3497 */
+      '?', /* U+3498 */
+      '?', /* U+3499 */
+      '?', /* U+349A */
+      '?', /* U+349B */
+      '?', /* U+349C */
+      '?', /* U+349D */
+      '?', /* U+349E */
+      '?', /* U+349F */
+      '?', /* U+34A0 */
+      '?', /* U+34A1 */
+      '?', /* U+34A2 */
+      '?', /* U+34A3 */
+      '?', /* U+34A4 */
+      '?', /* U+34A5 */
+      '?', /* U+34A6 */
+      '?', /* U+34A7 */
+      '?', /* U+34A8 */
+      '?', /* U+34A9 */
+      '?', /* U+34AA */
+      '?', /* U+34AB */
+      '?', /* U+34AC */
+      '?', /* U+34AD */
+      '?', /* U+34AE */
+      '?', /* U+34AF */
+      '?', /* U+34B0 */
+      '?', /* U+34B1 */
+      '?', /* U+34B2 */
+      '?', /* U+34B3 */
+      '?', /* U+34B4 */
+      '?', /* U+34B5 */
+      '?', /* U+34B6 */
+      '?', /* U+34B7 */
+      '?', /* U+34B8 */
+      '?', /* U+34B9 */
+      '?', /* U+34BA */
+      '?', /* U+34BB */
+      '?', /* U+34BC */
+      '?', /* U+34BD */
+      '?', /* U+34BE */
+      '?', /* U+34BF */
+      '?', /* U+34C0 */
+      '?', /* U+34C1 */
+      '?', /* U+34C2 */
+      '?', /* U+34C3 */
+      '?', /* U+34C4 */
+      '?', /* U+34C5 */
+      '?', /* U+34C6 */
+      '?', /* U+34C7 */
+      '?', /* U+34C8 */
+      '?', /* U+34C9 */
+      '?', /* U+34CA */
+      '?', /* U+34CB */
+      '?', /* U+34CC */
+      '?', /* U+34CD */
+      '?', /* U+34CE */
+      '?', /* U+34CF */
+      '?', /* U+34D0 */
+      '?', /* U+34D1 */
+      '?', /* U+34D2 */
+      '?', /* U+34D3 */
+      '?', /* U+34D4 */
+      '?', /* U+34D5 */
+      '?', /* U+34D6 */
+      '?', /* U+34D7 */
+      '?', /* U+34D8 */
+      '?', /* U+34D9 */
+      '?', /* U+34DA */
+      '?', /* U+34DB */
+      '?', /* U+34DC */
+      '?', /* U+34DD */
+      '?', /* U+34DE */
+      '?', /* U+34DF */
+      '?', /* U+34E0 */
+      '?', /* U+34E1 */
+      '?', /* U+34E2 */
+      '?', /* U+34E3 */
+      '?', /* U+34E4 */
+      '?', /* U+34E5 */
+      '?', /* U+34E6 */
+      '?', /* U+34E7 */
+      '?', /* U+34E8 */
+      '?', /* U+34E9 */
+      '?', /* U+34EA */
+      '?', /* U+34EB */
+      '?', /* U+34EC */
+      '?', /* U+34ED */
+      '?', /* U+34EE */
+      '?', /* U+34EF */
+      '?', /* U+34F0 */
+      '?', /* U+34F1 */
+      '?', /* U+34F2 */
+      '?', /* U+34F3 */
+      '?', /* U+34F4 */
+      '?', /* U+34F5 */
+      '?', /* U+34F6 */
+      '?', /* U+34F7 */
+      '?', /* U+34F8 */
+      '?', /* U+34F9 */
+      '?', /* U+34FA */
+      '?', /* U+34FB */
+      '?', /* U+34FC */
+      '?', /* U+34FD */
+      '?', /* U+34FE */
+      '?', /* U+34FF */
+      '?', /* U+3500 */
+      '?', /* U+3501 */
+      '?', /* U+3502 */
+      '?', /* U+3503 */
+      '?', /* U+3504 */
+      '?', /* U+3505 */
+      '?', /* U+3506 */
+      '?', /* U+3507 */
+      '?', /* U+3508 */
+      '?', /* U+3509 */
+      '?', /* U+350A */
+      '?', /* U+350B */
+      '?', /* U+350C */
+      '?', /* U+350D */
+      '?', /* U+350E */
+      '?', /* U+350F */
+      '?', /* U+3510 */
+      '?', /* U+3511 */
+      '?', /* U+3512 */
+      '?', /* U+3513 */
+      '?', /* U+3514 */
+      '?', /* U+3515 */
+      '?', /* U+3516 */
+      '?', /* U+3517 */
+      '?', /* U+3518 */
+      '?', /* U+3519 */
+      '?', /* U+351A */
+      '?', /* U+351B */
+      '?', /* U+351C */
+      '?', /* U+351D */
+      '?', /* U+351E */
+      '?', /* U+351F */
+      '?', /* U+3520 */
+      '?', /* U+3521 */
+      '?', /* U+3522 */
+      '?', /* U+3523 */
+      '?', /* U+3524 */
+      '?', /* U+3525 */
+      '?', /* U+3526 */
+      '?', /* U+3527 */
+      '?', /* U+3528 */
+      '?', /* U+3529 */
+      '?', /* U+352A */
+      '?', /* U+352B */
+      '?', /* U+352C */
+      '?', /* U+352D */
+      '?', /* U+352E */
+      '?', /* U+352F */
+      '?', /* U+3530 */
+      '?', /* U+3531 */
+      '?', /* U+3532 */
+      '?', /* U+3533 */
+      '?', /* U+3534 */
+      '?', /* U+3535 */
+      '?', /* U+3536 */
+      '?', /* U+3537 */
+      '?', /* U+3538 */
+      '?', /* U+3539 */
+      '?', /* U+353A */
+      '?', /* U+353B */
+      '?', /* U+353C */
+      '?', /* U+353D */
+      '?', /* U+353E */
+      '?', /* U+353F */
+      '?', /* U+3540 */
+      '?', /* U+3541 */
+      '?', /* U+3542 */
+      '?', /* U+3543 */
+      '?', /* U+3544 */
+      '?', /* U+3545 */
+      '?', /* U+3546 */
+      '?', /* U+3547 */
+      '?', /* U+3548 */
+      '?', /* U+3549 */
+      '?', /* U+354A */
+      '?', /* U+354B */
+      '?', /* U+354C */
+      '?', /* U+354D */
+      '?', /* U+354E */
+      '?', /* U+354F */
+      '?', /* U+3550 */
+      '?', /* U+3551 */
+      '?', /* U+3552 */
+      '?', /* U+3553 */
+      '?', /* U+3554 */
+      '?', /* U+3555 */
+      '?', /* U+3556 */
+      '?', /* U+3557 */
+      '?', /* U+3558 */
+      '?', /* U+3559 */
+      '?', /* U+355A */
+      '?', /* U+355B */
+      '?', /* U+355C */
+      '?', /* U+355D */
+      '?', /* U+355E */
+      '?', /* U+355F */
+      '?', /* U+3560 */
+      '?', /* U+3561 */
+      '?', /* U+3562 */
+      '?', /* U+3563 */
+      '?', /* U+3564 */
+      '?', /* U+3565 */
+      '?', /* U+3566 */
+      '?', /* U+3567 */
+      '?', /* U+3568 */
+      '?', /* U+3569 */
+      '?', /* U+356A */
+      '?', /* U+356B */
+      '?', /* U+356C */
+      '?', /* U+356D */
+      '?', /* U+356E */
+      '?', /* U+356F */
+      '?', /* U+3570 */
+      '?', /* U+3571 */
+      '?', /* U+3572 */
+      '?', /* U+3573 */
+      '?', /* U+3574 */
+      '?', /* U+3575 */
+      '?', /* U+3576 */
+      '?', /* U+3577 */
+      '?', /* U+3578 */
+      '?', /* U+3579 */
+      '?', /* U+357A */
+      '?', /* U+357B */
+      '?', /* U+357C */
+      '?', /* U+357D */
+      '?', /* U+357E */
+      '?', /* U+357F */
+      '?', /* U+3580 */
+      '?', /* U+3581 */
+      '?', /* U+3582 */
+      '?', /* U+3583 */
+      '?', /* U+3584 */
+      '?', /* U+3585 */
+      '?', /* U+3586 */
+      '?', /* U+3587 */
+      '?', /* U+3588 */
+      '?', /* U+3589 */
+      '?', /* U+358A */
+      '?', /* U+358B */
+      '?', /* U+358C */
+      '?', /* U+358D */
+      '?', /* U+358E */
+      '?', /* U+358F */
+      '?', /* U+3590 */
+      '?', /* U+3591 */
+      '?', /* U+3592 */
+      '?', /* U+3593 */
+      '?', /* U+3594 */
+      '?', /* U+3595 */
+      '?', /* U+3596 */
+      '?', /* U+3597 */
+      '?', /* U+3598 */
+      '?', /* U+3599 */
+      '?', /* U+359A */
+      '?', /* U+359B */
+      '?', /* U+359C */
+      '?', /* U+359D */
+      '?', /* U+359E */
+      '?', /* U+359F */
+      '?', /* U+35A0 */
+      '?', /* U+35A1 */
+      '?', /* U+35A2 */
+      '?', /* U+35A3 */
+      '?', /* U+35A4 */
+      '?', /* U+35A5 */
+      '?', /* U+35A6 */
+      '?', /* U+35A7 */
+      '?', /* U+35A8 */
+      '?', /* U+35A9 */
+      '?', /* U+35AA */
+      '?', /* U+35AB */
+      '?', /* U+35AC */
+      '?', /* U+35AD */
+      '?', /* U+35AE */
+      '?', /* U+35AF */
+      '?', /* U+35B0 */
+      '?', /* U+35B1 */
+      '?', /* U+35B2 */
+      '?', /* U+35B3 */
+      '?', /* U+35B4 */
+      '?', /* U+35B5 */
+      '?', /* U+35B6 */
+      '?', /* U+35B7 */
+      '?', /* U+35B8 */
+      '?', /* U+35B9 */
+      '?', /* U+35BA */
+      '?', /* U+35BB */
+      '?', /* U+35BC */
+      '?', /* U+35BD */
+      '?', /* U+35BE */
+      '?', /* U+35BF */
+      '?', /* U+35C0 */
+      '?', /* U+35C1 */
+      '?', /* U+35C2 */
+      '?', /* U+35C3 */
+      '?', /* U+35C4 */
+      '?', /* U+35C5 */
+      '?', /* U+35C6 */
+      '?', /* U+35C7 */
+      '?', /* U+35C8 */
+      '?', /* U+35C9 */
+      '?', /* U+35CA */
+      '?', /* U+35CB */
+      '?', /* U+35CC */
+      '?', /* U+35CD */
+      '?', /* U+35CE */
+      '?', /* U+35CF */
+      '?', /* U+35D0 */
+      '?', /* U+35D1 */
+      '?', /* U+35D2 */
+      '?', /* U+35D3 */
+      '?', /* U+35D4 */
+      '?', /* U+35D5 */
+      '?', /* U+35D6 */
+      '?', /* U+35D7 */
+      '?', /* U+35D8 */
+      '?', /* U+35D9 */
+      '?', /* U+35DA */
+      '?', /* U+35DB */
+      '?', /* U+35DC */
+      '?', /* U+35DD */
+      '?', /* U+35DE */
+      '?', /* U+35DF */
+      '?', /* U+35E0 */
+      '?', /* U+35E1 */
+      '?', /* U+35E2 */
+      '?', /* U+35E3 */
+      '?', /* U+35E4 */
+      '?', /* U+35E5 */
+      '?', /* U+35E6 */
+      '?', /* U+35E7 */
+      '?', /* U+35E8 */
+      '?', /* U+35E9 */
+      '?', /* U+35EA */
+      '?', /* U+35EB */
+      '?', /* U+35EC */
+      '?', /* U+35ED */
+      '?', /* U+35EE */
+      '?', /* U+35EF */
+      '?', /* U+35F0 */
+      '?', /* U+35F1 */
+      '?', /* U+35F2 */
+      '?', /* U+35F3 */
+      '?', /* U+35F4 */
+      '?', /* U+35F5 */
+      '?', /* U+35F6 */
+      '?', /* U+35F7 */
+      '?', /* U+35F8 */
+      '?', /* U+35F9 */
+      '?', /* U+35FA */
+      '?', /* U+35FB */
+      '?', /* U+35FC */
+      '?', /* U+35FD */
+      '?', /* U+35FE */
+      '?', /* U+35FF */
+      '?', /* U+3600 */
+      '?', /* U+3601 */
+      '?', /* U+3602 */
+      '?', /* U+3603 */
+      '?', /* U+3604 */
+      '?', /* U+3605 */
+      '?', /* U+3606 */
+      '?', /* U+3607 */
+      '?', /* U+3608 */
+      '?', /* U+3609 */
+      '?', /* U+360A */
+      '?', /* U+360B */
+      '?', /* U+360C */
+      '?', /* U+360D */
+      '?', /* U+360E */
+      '?', /* U+360F */
+      '?', /* U+3610 */
+      '?', /* U+3611 */
+      '?', /* U+3612 */
+      '?', /* U+3613 */
+      '?', /* U+3614 */
+      '?', /* U+3615 */
+      '?', /* U+3616 */
+      '?', /* U+3617 */
+      '?', /* U+3618 */
+      '?', /* U+3619 */
+      '?', /* U+361A */
+      '?', /* U+361B */
+      '?', /* U+361C */
+      '?', /* U+361D */
+      '?', /* U+361E */
+      '?', /* U+361F */
+      '?', /* U+3620 */
+      '?', /* U+3621 */
+      '?', /* U+3622 */
+      '?', /* U+3623 */
+      '?', /* U+3624 */
+      '?', /* U+3625 */
+      '?', /* U+3626 */
+      '?', /* U+3627 */
+      '?', /* U+3628 */
+      '?', /* U+3629 */
+      '?', /* U+362A */
+      '?', /* U+362B */
+      '?', /* U+362C */
+      '?', /* U+362D */
+      '?', /* U+362E */
+      '?', /* U+362F */
+      '?', /* U+3630 */
+      '?', /* U+3631 */
+      '?', /* U+3632 */
+      '?', /* U+3633 */
+      '?', /* U+3634 */
+      '?', /* U+3635 */
+      '?', /* U+3636 */
+      '?', /* U+3637 */
+      '?', /* U+3638 */
+      '?', /* U+3639 */
+      '?', /* U+363A */
+      '?', /* U+363B */
+      '?', /* U+363C */
+      '?', /* U+363D */
+      '?', /* U+363E */
+      '?', /* U+363F */
+      '?', /* U+3640 */
+      '?', /* U+3641 */
+      '?', /* U+3642 */
+      '?', /* U+3643 */
+      '?', /* U+3644 */
+      '?', /* U+3645 */
+      '?', /* U+3646 */
+      '?', /* U+3647 */
+      '?', /* U+3648 */
+      '?', /* U+3649 */
+      '?', /* U+364A */
+      '?', /* U+364B */
+      '?', /* U+364C */
+      '?', /* U+364D */
+      '?', /* U+364E */
+      '?', /* U+364F */
+      '?', /* U+3650 */
+      '?', /* U+3651 */
+      '?', /* U+3652 */
+      '?', /* U+3653 */
+      '?', /* U+3654 */
+      '?', /* U+3655 */
+      '?', /* U+3656 */
+      '?', /* U+3657 */
+      '?', /* U+3658 */
+      '?', /* U+3659 */
+      '?', /* U+365A */
+      '?', /* U+365B */
+      '?', /* U+365C */
+      '?', /* U+365D */
+      '?', /* U+365E */
+      '?', /* U+365F */
+      '?', /* U+3660 */
+      '?', /* U+3661 */
+      '?', /* U+3662 */
+      '?', /* U+3663 */
+      '?', /* U+3664 */
+      '?', /* U+3665 */
+      '?', /* U+3666 */
+      '?', /* U+3667 */
+      '?', /* U+3668 */
+      '?', /* U+3669 */
+      '?', /* U+366A */
+      '?', /* U+366B */
+      '?', /* U+366C */
+      '?', /* U+366D */
+      '?', /* U+366E */
+      '?', /* U+366F */
+      '?', /* U+3670 */
+      '?', /* U+3671 */
+      '?', /* U+3672 */
+      '?', /* U+3673 */
+      '?', /* U+3674 */
+      '?', /* U+3675 */
+      '?', /* U+3676 */
+      '?', /* U+3677 */
+      '?', /* U+3678 */
+      '?', /* U+3679 */
+      '?', /* U+367A */
+      '?', /* U+367B */
+      '?', /* U+367C */
+      '?', /* U+367D */
+      '?', /* U+367E */
+      '?', /* U+367F */
+      '?', /* U+3680 */
+      '?', /* U+3681 */
+      '?', /* U+3682 */
+      '?', /* U+3683 */
+      '?', /* U+3684 */
+      '?', /* U+3685 */
+      '?', /* U+3686 */
+      '?', /* U+3687 */
+      '?', /* U+3688 */
+      '?', /* U+3689 */
+      '?', /* U+368A */
+      '?', /* U+368B */
+      '?', /* U+368C */
+      '?', /* U+368D */
+      '?', /* U+368E */
+      '?', /* U+368F */
+      '?', /* U+3690 */
+      '?', /* U+3691 */
+      '?', /* U+3692 */
+      '?', /* U+3693 */
+      '?', /* U+3694 */
+      '?', /* U+3695 */
+      '?', /* U+3696 */
+      '?', /* U+3697 */
+      '?', /* U+3698 */
+      '?', /* U+3699 */
+      '?', /* U+369A */
+      '?', /* U+369B */
+      '?', /* U+369C */
+      '?', /* U+369D */
+      '?', /* U+369E */
+      '?', /* U+369F */
+      '?', /* U+36A0 */
+      '?', /* U+36A1 */
+      '?', /* U+36A2 */
+      '?', /* U+36A3 */
+      '?', /* U+36A4 */
+      '?', /* U+36A5 */
+      '?', /* U+36A6 */
+      '?', /* U+36A7 */
+      '?', /* U+36A8 */
+      '?', /* U+36A9 */
+      '?', /* U+36AA */
+      '?', /* U+36AB */
+      '?', /* U+36AC */
+      '?', /* U+36AD */
+      '?', /* U+36AE */
+      '?', /* U+36AF */
+      '?', /* U+36B0 */
+      '?', /* U+36B1 */
+      '?', /* U+36B2 */
+      '?', /* U+36B3 */
+      '?', /* U+36B4 */
+      '?', /* U+36B5 */
+      '?', /* U+36B6 */
+      '?', /* U+36B7 */
+      '?', /* U+36B8 */
+      '?', /* U+36B9 */
+      '?', /* U+36BA */
+      '?', /* U+36BB */
+      '?', /* U+36BC */
+      '?', /* U+36BD */
+      '?', /* U+36BE */
+      '?', /* U+36BF */
+      '?', /* U+36C0 */
+      '?', /* U+36C1 */
+      '?', /* U+36C2 */
+      '?', /* U+36C3 */
+      '?', /* U+36C4 */
+      '?', /* U+36C5 */
+      '?', /* U+36C6 */
+      '?', /* U+36C7 */
+      '?', /* U+36C8 */
+      '?', /* U+36C9 */
+      '?', /* U+36CA */
+      '?', /* U+36CB */
+      '?', /* U+36CC */
+      '?', /* U+36CD */
+      '?', /* U+36CE */
+      '?', /* U+36CF */
+      '?', /* U+36D0 */
+      '?', /* U+36D1 */
+      '?', /* U+36D2 */
+      '?', /* U+36D3 */
+      '?', /* U+36D4 */
+      '?', /* U+36D5 */
+      '?', /* U+36D6 */
+      '?', /* U+36D7 */
+      '?', /* U+36D8 */
+      '?', /* U+36D9 */
+      '?', /* U+36DA */
+      '?', /* U+36DB */
+      '?', /* U+36DC */
+      '?', /* U+36DD */
+      '?', /* U+36DE */
+      '?', /* U+36DF */
+      '?', /* U+36E0 */
+      '?', /* U+36E1 */
+      '?', /* U+36E2 */
+      '?', /* U+36E3 */
+      '?', /* U+36E4 */
+      '?', /* U+36E5 */
+      '?', /* U+36E6 */
+      '?', /* U+36E7 */
+      '?', /* U+36E8 */
+      '?', /* U+36E9 */
+      '?', /* U+36EA */
+      '?', /* U+36EB */
+      '?', /* U+36EC */
+      '?', /* U+36ED */
+      '?', /* U+36EE */
+      '?', /* U+36EF */
+      '?', /* U+36F0 */
+      '?', /* U+36F1 */
+      '?', /* U+36F2 */
+      '?', /* U+36F3 */
+      '?', /* U+36F4 */
+      '?', /* U+36F5 */
+      '?', /* U+36F6 */
+      '?', /* U+36F7 */
+      '?', /* U+36F8 */
+      '?', /* U+36F9 */
+      '?', /* U+36FA */
+      '?', /* U+36FB */
+      '?', /* U+36FC */
+      '?', /* U+36FD */
+      '?', /* U+36FE */
+      '?', /* U+36FF */
+      '?', /* U+3700 */
+      '?', /* U+3701 */
+      '?', /* U+3702 */
+      '?', /* U+3703 */
+      '?', /* U+3704 */
+      '?', /* U+3705 */
+      '?', /* U+3706 */
+      '?', /* U+3707 */
+      '?', /* U+3708 */
+      '?', /* U+3709 */
+      '?', /* U+370A */
+      '?', /* U+370B */
+      '?', /* U+370C */
+      '?', /* U+370D */
+      '?', /* U+370E */
+      '?', /* U+370F */
+      '?', /* U+3710 */
+      '?', /* U+3711 */
+      '?', /* U+3712 */
+      '?', /* U+3713 */
+      '?', /* U+3714 */
+      '?', /* U+3715 */
+      '?', /* U+3716 */
+      '?', /* U+3717 */
+      '?', /* U+3718 */
+      '?', /* U+3719 */
+      '?', /* U+371A */
+      '?', /* U+371B */
+      '?', /* U+371C */
+      '?', /* U+371D */
+      '?', /* U+371E */
+      '?', /* U+371F */
+      '?', /* U+3720 */
+      '?', /* U+3721 */
+      '?', /* U+3722 */
+      '?', /* U+3723 */
+      '?', /* U+3724 */
+      '?', /* U+3725 */
+      '?', /* U+3726 */
+      '?', /* U+3727 */
+      '?', /* U+3728 */
+      '?', /* U+3729 */
+      '?', /* U+372A */
+      '?', /* U+372B */
+      '?', /* U+372C */
+      '?', /* U+372D */
+      '?', /* U+372E */
+      '?', /* U+372F */
+      '?', /* U+3730 */
+      '?', /* U+3731 */
+      '?', /* U+3732 */
+      '?', /* U+3733 */
+      '?', /* U+3734 */
+      '?', /* U+3735 */
+      '?', /* U+3736 */
+      '?', /* U+3737 */
+      '?', /* U+3738 */
+      '?', /* U+3739 */
+      '?', /* U+373A */
+      '?', /* U+373B */
+      '?', /* U+373C */
+      '?', /* U+373D */
+      '?', /* U+373E */
+      '?', /* U+373F */
+      '?', /* U+3740 */
+      '?', /* U+3741 */
+      '?', /* U+3742 */
+      '?', /* U+3743 */
+      '?', /* U+3744 */
+      '?', /* U+3745 */
+      '?', /* U+3746 */
+      '?', /* U+3747 */
+      '?', /* U+3748 */
+      '?', /* U+3749 */
+      '?', /* U+374A */
+      '?', /* U+374B */
+      '?', /* U+374C */
+      '?', /* U+374D */
+      '?', /* U+374E */
+      '?', /* U+374F */
+      '?', /* U+3750 */
+      '?', /* U+3751 */
+      '?', /* U+3752 */
+      '?', /* U+3753 */
+      '?', /* U+3754 */
+      '?', /* U+3755 */
+      '?', /* U+3756 */
+      '?', /* U+3757 */
+      '?', /* U+3758 */
+      '?', /* U+3759 */
+      '?', /* U+375A */
+      '?', /* U+375B */
+      '?', /* U+375C */
+      '?', /* U+375D */
+      '?', /* U+375E */
+      '?', /* U+375F */
+      '?', /* U+3760 */
+      '?', /* U+3761 */
+      '?', /* U+3762 */
+      '?', /* U+3763 */
+      '?', /* U+3764 */
+      '?', /* U+3765 */
+      '?', /* U+3766 */
+      '?', /* U+3767 */
+      '?', /* U+3768 */
+      '?', /* U+3769 */
+      '?', /* U+376A */
+      '?', /* U+376B */
+      '?', /* U+376C */
+      '?', /* U+376D */
+      '?', /* U+376E */
+      '?', /* U+376F */
+      '?', /* U+3770 */
+      '?', /* U+3771 */
+      '?', /* U+3772 */
+      '?', /* U+3773 */
+      '?', /* U+3774 */
+      '?', /* U+3775 */
+      '?', /* U+3776 */
+      '?', /* U+3777 */
+      '?', /* U+3778 */
+      '?', /* U+3779 */
+      '?', /* U+377A */
+      '?', /* U+377B */
+      '?', /* U+377C */
+      '?', /* U+377D */
+      '?', /* U+377E */
+      '?', /* U+377F */
+      '?', /* U+3780 */
+      '?', /* U+3781 */
+      '?', /* U+3782 */
+      '?', /* U+3783 */
+      '?', /* U+3784 */
+      '?', /* U+3785 */
+      '?', /* U+3786 */
+      '?', /* U+3787 */
+      '?', /* U+3788 */
+      '?', /* U+3789 */
+      '?', /* U+378A */
+      '?', /* U+378B */
+      '?', /* U+378C */
+      '?', /* U+378D */
+      '?', /* U+378E */
+      '?', /* U+378F */
+      '?', /* U+3790 */
+      '?', /* U+3791 */
+      '?', /* U+3792 */
+      '?', /* U+3793 */
+      '?', /* U+3794 */
+      '?', /* U+3795 */
+      '?', /* U+3796 */
+      '?', /* U+3797 */
+      '?', /* U+3798 */
+      '?', /* U+3799 */
+      '?', /* U+379A */
+      '?', /* U+379B */
+      '?', /* U+379C */
+      '?', /* U+379D */
+      '?', /* U+379E */
+      '?', /* U+379F */
+      '?', /* U+37A0 */
+      '?', /* U+37A1 */
+      '?', /* U+37A2 */
+      '?', /* U+37A3 */
+      '?', /* U+37A4 */
+      '?', /* U+37A5 */
+      '?', /* U+37A6 */
+      '?', /* U+37A7 */
+      '?', /* U+37A8 */
+      '?', /* U+37A9 */
+      '?', /* U+37AA */
+      '?', /* U+37AB */
+      '?', /* U+37AC */
+      '?', /* U+37AD */
+      '?', /* U+37AE */
+      '?', /* U+37AF */
+      '?', /* U+37B0 */
+      '?', /* U+37B1 */
+      '?', /* U+37B2 */
+      '?', /* U+37B3 */
+      '?', /* U+37B4 */
+      '?', /* U+37B5 */
+      '?', /* U+37B6 */
+      '?', /* U+37B7 */
+      '?', /* U+37B8 */
+      '?', /* U+37B9 */
+      '?', /* U+37BA */
+      '?', /* U+37BB */
+      '?', /* U+37BC */
+      '?', /* U+37BD */
+      '?', /* U+37BE */
+      '?', /* U+37BF */
+      '?', /* U+37C0 */
+      '?', /* U+37C1 */
+      '?', /* U+37C2 */
+      '?', /* U+37C3 */
+      '?', /* U+37C4 */
+      '?', /* U+37C5 */
+      '?', /* U+37C6 */
+      '?', /* U+37C7 */
+      '?', /* U+37C8 */
+      '?', /* U+37C9 */
+      '?', /* U+37CA */
+      '?', /* U+37CB */
+      '?', /* U+37CC */
+      '?', /* U+37CD */
+      '?', /* U+37CE */
+      '?', /* U+37CF */
+      '?', /* U+37D0 */
+      '?', /* U+37D1 */
+      '?', /* U+37D2 */
+      '?', /* U+37D3 */
+      '?', /* U+37D4 */
+      '?', /* U+37D5 */
+      '?', /* U+37D6 */
+      '?', /* U+37D7 */
+      '?', /* U+37D8 */
+      '?', /* U+37D9 */
+      '?', /* U+37DA */
+      '?', /* U+37DB */
+      '?', /* U+37DC */
+      '?', /* U+37DD */
+      '?', /* U+37DE */
+      '?', /* U+37DF */
+      '?', /* U+37E0 */
+      '?', /* U+37E1 */
+      '?', /* U+37E2 */
+      '?', /* U+37E3 */
+      '?', /* U+37E4 */
+      '?', /* U+37E5 */
+      '?', /* U+37E6 */
+      '?', /* U+37E7 */
+      '?', /* U+37E8 */
+      '?', /* U+37E9 */
+      '?', /* U+37EA */
+      '?', /* U+37EB */
+      '?', /* U+37EC */
+      '?', /* U+37ED */
+      '?', /* U+37EE */
+      '?', /* U+37EF */
+      '?', /* U+37F0 */
+      '?', /* U+37F1 */
+      '?', /* U+37F2 */
+      '?', /* U+37F3 */
+      '?', /* U+37F4 */
+      '?', /* U+37F5 */
+      '?', /* U+37F6 */
+      '?', /* U+37F7 */
+      '?', /* U+37F8 */
+      '?', /* U+37F9 */
+      '?', /* U+37FA */
+      '?', /* U+37FB */
+      '?', /* U+37FC */
+      '?', /* U+37FD */
+      '?', /* U+37FE */
+      '?', /* U+37FF */
+      '?', /* U+3800 */
+      '?', /* U+3801 */
+      '?', /* U+3802 */
+      '?', /* U+3803 */
+      '?', /* U+3804 */
+      '?', /* U+3805 */
+      '?', /* U+3806 */
+      '?', /* U+3807 */
+      '?', /* U+3808 */
+      '?', /* U+3809 */
+      '?', /* U+380A */
+      '?', /* U+380B */
+      '?', /* U+380C */
+      '?', /* U+380D */
+      '?', /* U+380E */
+      '?', /* U+380F */
+      '?', /* U+3810 */
+      '?', /* U+3811 */
+      '?', /* U+3812 */
+      '?', /* U+3813 */
+      '?', /* U+3814 */
+      '?', /* U+3815 */
+      '?', /* U+3816 */
+      '?', /* U+3817 */
+      '?', /* U+3818 */
+      '?', /* U+3819 */
+      '?', /* U+381A */
+      '?', /* U+381B */
+      '?', /* U+381C */
+      '?', /* U+381D */
+      '?', /* U+381E */
+      '?', /* U+381F */
+      '?', /* U+3820 */
+      '?', /* U+3821 */
+      '?', /* U+3822 */
+      '?', /* U+3823 */
+      '?', /* U+3824 */
+      '?', /* U+3825 */
+      '?', /* U+3826 */
+      '?', /* U+3827 */
+      '?', /* U+3828 */
+      '?', /* U+3829 */
+      '?', /* U+382A */
+      '?', /* U+382B */
+      '?', /* U+382C */
+      '?', /* U+382D */
+      '?', /* U+382E */
+      '?', /* U+382F */
+      '?', /* U+3830 */
+      '?', /* U+3831 */
+      '?', /* U+3832 */
+      '?', /* U+3833 */
+      '?', /* U+3834 */
+      '?', /* U+3835 */
+      '?', /* U+3836 */
+      '?', /* U+3837 */
+      '?', /* U+3838 */
+      '?', /* U+3839 */
+      '?', /* U+383A */
+      '?', /* U+383B */
+      '?', /* U+383C */
+      '?', /* U+383D */
+      '?', /* U+383E */
+      '?', /* U+383F */
+      '?', /* U+3840 */
+      '?', /* U+3841 */
+      '?', /* U+3842 */
+      '?', /* U+3843 */
+      '?', /* U+3844 */
+      '?', /* U+3845 */
+      '?', /* U+3846 */
+      '?', /* U+3847 */
+      '?', /* U+3848 */
+      '?', /* U+3849 */
+      '?', /* U+384A */
+      '?', /* U+384B */
+      '?', /* U+384C */
+      '?', /* U+384D */
+      '?', /* U+384E */
+      '?', /* U+384F */
+      '?', /* U+3850 */
+      '?', /* U+3851 */
+      '?', /* U+3852 */
+      '?', /* U+3853 */
+      '?', /* U+3854 */
+      '?', /* U+3855 */
+      '?', /* U+3856 */
+      '?', /* U+3857 */
+      '?', /* U+3858 */
+      '?', /* U+3859 */
+      '?', /* U+385A */
+      '?', /* U+385B */
+      '?', /* U+385C */
+      '?', /* U+385D */
+      '?', /* U+385E */
+      '?', /* U+385F */
+      '?', /* U+3860 */
+      '?', /* U+3861 */
+      '?', /* U+3862 */
+      '?', /* U+3863 */
+      '?', /* U+3864 */
+      '?', /* U+3865 */
+      '?', /* U+3866 */
+      '?', /* U+3867 */
+      '?', /* U+3868 */
+      '?', /* U+3869 */
+      '?', /* U+386A */
+      '?', /* U+386B */
+      '?', /* U+386C */
+      '?', /* U+386D */
+      '?', /* U+386E */
+      '?', /* U+386F */
+      '?', /* U+3870 */
+      '?', /* U+3871 */
+      '?', /* U+3872 */
+      '?', /* U+3873 */
+      '?', /* U+3874 */
+      '?', /* U+3875 */
+      '?', /* U+3876 */
+      '?', /* U+3877 */
+      '?', /* U+3878 */
+      '?', /* U+3879 */
+      '?', /* U+387A */
+      '?', /* U+387B */
+      '?', /* U+387C */
+      '?', /* U+387D */
+      '?', /* U+387E */
+      '?', /* U+387F */
+      '?', /* U+3880 */
+      '?', /* U+3881 */
+      '?', /* U+3882 */
+      '?', /* U+3883 */
+      '?', /* U+3884 */
+      '?', /* U+3885 */
+      '?', /* U+3886 */
+      '?', /* U+3887 */
+      '?', /* U+3888 */
+      '?', /* U+3889 */
+      '?', /* U+388A */
+      '?', /* U+388B */
+      '?', /* U+388C */
+      '?', /* U+388D */
+      '?', /* U+388E */
+      '?', /* U+388F */
+      '?', /* U+3890 */
+      '?', /* U+3891 */
+      '?', /* U+3892 */
+      '?', /* U+3893 */
+      '?', /* U+3894 */
+      '?', /* U+3895 */
+      '?', /* U+3896 */
+      '?', /* U+3897 */
+      '?', /* U+3898 */
+      '?', /* U+3899 */
+      '?', /* U+389A */
+      '?', /* U+389B */
+      '?', /* U+389C */
+      '?', /* U+389D */
+      '?', /* U+389E */
+      '?', /* U+389F */
+      '?', /* U+38A0 */
+      '?', /* U+38A1 */
+      '?', /* U+38A2 */
+      '?', /* U+38A3 */
+      '?', /* U+38A4 */
+      '?', /* U+38A5 */
+      '?', /* U+38A6 */
+      '?', /* U+38A7 */
+      '?', /* U+38A8 */
+      '?', /* U+38A9 */
+      '?', /* U+38AA */
+      '?', /* U+38AB */
+      '?', /* U+38AC */
+      '?', /* U+38AD */
+      '?', /* U+38AE */
+      '?', /* U+38AF */
+      '?', /* U+38B0 */
+      '?', /* U+38B1 */
+      '?', /* U+38B2 */
+      '?', /* U+38B3 */
+      '?', /* U+38B4 */
+      '?', /* U+38B5 */
+      '?', /* U+38B6 */
+      '?', /* U+38B7 */
+      '?', /* U+38B8 */
+      '?', /* U+38B9 */
+      '?', /* U+38BA */
+      '?', /* U+38BB */
+      '?', /* U+38BC */
+      '?', /* U+38BD */
+      '?', /* U+38BE */
+      '?', /* U+38BF */
+      '?', /* U+38C0 */
+      '?', /* U+38C1 */
+      '?', /* U+38C2 */
+      '?', /* U+38C3 */
+      '?', /* U+38C4 */
+      '?', /* U+38C5 */
+      '?', /* U+38C6 */
+      '?', /* U+38C7 */
+      '?', /* U+38C8 */
+      '?', /* U+38C9 */
+      '?', /* U+38CA */
+      '?', /* U+38CB */
+      '?', /* U+38CC */
+      '?', /* U+38CD */
+      '?', /* U+38CE */
+      '?', /* U+38CF */
+      '?', /* U+38D0 */
+      '?', /* U+38D1 */
+      '?', /* U+38D2 */
+      '?', /* U+38D3 */
+      '?', /* U+38D4 */
+      '?', /* U+38D5 */
+      '?', /* U+38D6 */
+      '?', /* U+38D7 */
+      '?', /* U+38D8 */
+      '?', /* U+38D9 */
+      '?', /* U+38DA */
+      '?', /* U+38DB */
+      '?', /* U+38DC */
+      '?', /* U+38DD */
+      '?', /* U+38DE */
+      '?', /* U+38DF */
+      '?', /* U+38E0 */
+      '?', /* U+38E1 */
+      '?', /* U+38E2 */
+      '?', /* U+38E3 */
+      '?', /* U+38E4 */
+      '?', /* U+38E5 */
+      '?', /* U+38E6 */
+      '?', /* U+38E7 */
+      '?', /* U+38E8 */
+      '?', /* U+38E9 */
+      '?', /* U+38EA */
+      '?', /* U+38EB */
+      '?', /* U+38EC */
+      '?', /* U+38ED */
+      '?', /* U+38EE */
+      '?', /* U+38EF */
+      '?', /* U+38F0 */
+      '?', /* U+38F1 */
+      '?', /* U+38F2 */
+      '?', /* U+38F3 */
+      '?', /* U+38F4 */
+      '?', /* U+38F5 */
+      '?', /* U+38F6 */
+      '?', /* U+38F7 */
+      '?', /* U+38F8 */
+      '?', /* U+38F9 */
+      '?', /* U+38FA */
+      '?', /* U+38FB */
+      '?', /* U+38FC */
+      '?', /* U+38FD */
+      '?', /* U+38FE */
+      '?', /* U+38FF */
+      '?', /* U+3900 */
+      '?', /* U+3901 */
+      '?', /* U+3902 */
+      '?', /* U+3903 */
+      '?', /* U+3904 */
+      '?', /* U+3905 */
+      '?', /* U+3906 */
+      '?', /* U+3907 */
+      '?', /* U+3908 */
+      '?', /* U+3909 */
+      '?', /* U+390A */
+      '?', /* U+390B */
+      '?', /* U+390C */
+      '?', /* U+390D */
+      '?', /* U+390E */
+      '?', /* U+390F */
+      '?', /* U+3910 */
+      '?', /* U+3911 */
+      '?', /* U+3912 */
+      '?', /* U+3913 */
+      '?', /* U+3914 */
+      '?', /* U+3915 */
+      '?', /* U+3916 */
+      '?', /* U+3917 */
+      '?', /* U+3918 */
+      '?', /* U+3919 */
+      '?', /* U+391A */
+      '?', /* U+391B */
+      '?', /* U+391C */
+      '?', /* U+391D */
+      '?', /* U+391E */
+      '?', /* U+391F */
+      '?', /* U+3920 */
+      '?', /* U+3921 */
+      '?', /* U+3922 */
+      '?', /* U+3923 */
+      '?', /* U+3924 */
+      '?', /* U+3925 */
+      '?', /* U+3926 */
+      '?', /* U+3927 */
+      '?', /* U+3928 */
+      '?', /* U+3929 */
+      '?', /* U+392A */
+      '?', /* U+392B */
+      '?', /* U+392C */
+      '?', /* U+392D */
+      '?', /* U+392E */
+      '?', /* U+392F */
+      '?', /* U+3930 */
+      '?', /* U+3931 */
+      '?', /* U+3932 */
+      '?', /* U+3933 */
+      '?', /* U+3934 */
+      '?', /* U+3935 */
+      '?', /* U+3936 */
+      '?', /* U+3937 */
+      '?', /* U+3938 */
+      '?', /* U+3939 */
+      '?', /* U+393A */
+      '?', /* U+393B */
+      '?', /* U+393C */
+      '?', /* U+393D */
+      '?', /* U+393E */
+      '?', /* U+393F */
+      '?', /* U+3940 */
+      '?', /* U+3941 */
+      '?', /* U+3942 */
+      '?', /* U+3943 */
+      '?', /* U+3944 */
+      '?', /* U+3945 */
+      '?', /* U+3946 */
+      '?', /* U+3947 */
+      '?', /* U+3948 */
+      '?', /* U+3949 */
+      '?', /* U+394A */
+      '?', /* U+394B */
+      '?', /* U+394C */
+      '?', /* U+394D */
+      '?', /* U+394E */
+      '?', /* U+394F */
+      '?', /* U+3950 */
+      '?', /* U+3951 */
+      '?', /* U+3952 */
+      '?', /* U+3953 */
+      '?', /* U+3954 */
+      '?', /* U+3955 */
+      '?', /* U+3956 */
+      '?', /* U+3957 */
+      '?', /* U+3958 */
+      '?', /* U+3959 */
+      '?', /* U+395A */
+      '?', /* U+395B */
+      '?', /* U+395C */
+      '?', /* U+395D */
+      '?', /* U+395E */
+      '?', /* U+395F */
+      '?', /* U+3960 */
+      '?', /* U+3961 */
+      '?', /* U+3962 */
+      '?', /* U+3963 */
+      '?', /* U+3964 */
+      '?', /* U+3965 */
+      '?', /* U+3966 */
+      '?', /* U+3967 */
+      '?', /* U+3968 */
+      '?', /* U+3969 */
+      '?', /* U+396A */
+      '?', /* U+396B */
+      '?', /* U+396C */
+      '?', /* U+396D */
+      '?', /* U+396E */
+      '?', /* U+396F */
+      '?', /* U+3970 */
+      '?', /* U+3971 */
+      '?', /* U+3972 */
+      '?', /* U+3973 */
+      '?', /* U+3974 */
+      '?', /* U+3975 */
+      '?', /* U+3976 */
+      '?', /* U+3977 */
+      '?', /* U+3978 */
+      '?', /* U+3979 */
+      '?', /* U+397A */
+      '?', /* U+397B */
+      '?', /* U+397C */
+      '?', /* U+397D */
+      '?', /* U+397E */
+      '?', /* U+397F */
+      '?', /* U+3980 */
+      '?', /* U+3981 */
+      '?', /* U+3982 */
+      '?', /* U+3983 */
+      '?', /* U+3984 */
+      '?', /* U+3985 */
+      '?', /* U+3986 */
+      '?', /* U+3987 */
+      '?', /* U+3988 */
+      '?', /* U+3989 */
+      '?', /* U+398A */
+      '?', /* U+398B */
+      '?', /* U+398C */
+      '?', /* U+398D */
+      '?', /* U+398E */
+      '?', /* U+398F */
+      '?', /* U+3990 */
+      '?', /* U+3991 */
+      '?', /* U+3992 */
+      '?', /* U+3993 */
+      '?', /* U+3994 */
+      '?', /* U+3995 */
+      '?', /* U+3996 */
+      '?', /* U+3997 */
+      '?', /* U+3998 */
+      '?', /* U+3999 */
+      '?', /* U+399A */
+      '?', /* U+399B */
+      '?', /* U+399C */
+      '?', /* U+399D */
+      '?', /* U+399E */
+      '?', /* U+399F */
+      '?', /* U+39A0 */
+      '?', /* U+39A1 */
+      '?', /* U+39A2 */
+      '?', /* U+39A3 */
+      '?', /* U+39A4 */
+      '?', /* U+39A5 */
+      '?', /* U+39A6 */
+      '?', /* U+39A7 */
+      '?', /* U+39A8 */
+      '?', /* U+39A9 */
+      '?', /* U+39AA */
+      '?', /* U+39AB */
+      '?', /* U+39AC */
+      '?', /* U+39AD */
+      '?', /* U+39AE */
+      '?', /* U+39AF */
+      '?', /* U+39B0 */
+      '?', /* U+39B1 */
+      '?', /* U+39B2 */
+      '?', /* U+39B3 */
+      '?', /* U+39B4 */
+      '?', /* U+39B5 */
+      '?', /* U+39B6 */
+      '?', /* U+39B7 */
+      '?', /* U+39B8 */
+      '?', /* U+39B9 */
+      '?', /* U+39BA */
+      '?', /* U+39BB */
+      '?', /* U+39BC */
+      '?', /* U+39BD */
+      '?', /* U+39BE */
+      '?', /* U+39BF */
+      '?', /* U+39C0 */
+      '?', /* U+39C1 */
+      '?', /* U+39C2 */
+      '?', /* U+39C3 */
+      '?', /* U+39C4 */
+      '?', /* U+39C5 */
+      '?', /* U+39C6 */
+      '?', /* U+39C7 */
+      '?', /* U+39C8 */
+      '?', /* U+39C9 */
+      '?', /* U+39CA */
+      '?', /* U+39CB */
+      '?', /* U+39CC */
+      '?', /* U+39CD */
+      '?', /* U+39CE */
+      '?', /* U+39CF */
+      '?', /* U+39D0 */
+      '?', /* U+39D1 */
+      '?', /* U+39D2 */
+      '?', /* U+39D3 */
+      '?', /* U+39D4 */
+      '?', /* U+39D5 */
+      '?', /* U+39D6 */
+      '?', /* U+39D7 */
+      '?', /* U+39D8 */
+      '?', /* U+39D9 */
+      '?', /* U+39DA */
+      '?', /* U+39DB */
+      '?', /* U+39DC */
+      '?', /* U+39DD */
+      '?', /* U+39DE */
+      '?', /* U+39DF */
+      '?', /* U+39E0 */
+      '?', /* U+39E1 */
+      '?', /* U+39E2 */
+      '?', /* U+39E3 */
+      '?', /* U+39E4 */
+      '?', /* U+39E5 */
+      '?', /* U+39E6 */
+      '?', /* U+39E7 */
+      '?', /* U+39E8 */
+      '?', /* U+39E9 */
+      '?', /* U+39EA */
+      '?', /* U+39EB */
+      '?', /* U+39EC */
+      '?', /* U+39ED */
+      '?', /* U+39EE */
+      '?', /* U+39EF */
+      '?', /* U+39F0 */
+      '?', /* U+39F1 */
+      '?', /* U+39F2 */
+      '?', /* U+39F3 */
+      '?', /* U+39F4 */
+      '?', /* U+39F5 */
+      '?', /* U+39F6 */
+      '?', /* U+39F7 */
+      '?', /* U+39F8 */
+      '?', /* U+39F9 */
+      '?', /* U+39FA */
+      '?', /* U+39FB */
+      '?', /* U+39FC */
+      '?', /* U+39FD */
+      '?', /* U+39FE */
+      '?', /* U+39FF */
+      '?', /* U+3A00 */
+      '?', /* U+3A01 */
+      '?', /* U+3A02 */
+      '?', /* U+3A03 */
+      '?', /* U+3A04 */
+      '?', /* U+3A05 */
+      '?', /* U+3A06 */
+      '?', /* U+3A07 */
+      '?', /* U+3A08 */
+      '?', /* U+3A09 */
+      '?', /* U+3A0A */
+      '?', /* U+3A0B */
+      '?', /* U+3A0C */
+      '?', /* U+3A0D */
+      '?', /* U+3A0E */
+      '?', /* U+3A0F */
+      '?', /* U+3A10 */
+      '?', /* U+3A11 */
+      '?', /* U+3A12 */
+      '?', /* U+3A13 */
+      '?', /* U+3A14 */
+      '?', /* U+3A15 */
+      '?', /* U+3A16 */
+      '?', /* U+3A17 */
+      '?', /* U+3A18 */
+      '?', /* U+3A19 */
+      '?', /* U+3A1A */
+      '?', /* U+3A1B */
+      '?', /* U+3A1C */
+      '?', /* U+3A1D */
+      '?', /* U+3A1E */
+      '?', /* U+3A1F */
+      '?', /* U+3A20 */
+      '?', /* U+3A21 */
+      '?', /* U+3A22 */
+      '?', /* U+3A23 */
+      '?', /* U+3A24 */
+      '?', /* U+3A25 */
+      '?', /* U+3A26 */
+      '?', /* U+3A27 */
+      '?', /* U+3A28 */
+      '?', /* U+3A29 */
+      '?', /* U+3A2A */
+      '?', /* U+3A2B */
+      '?', /* U+3A2C */
+      '?', /* U+3A2D */
+      '?', /* U+3A2E */
+      '?', /* U+3A2F */
+      '?', /* U+3A30 */
+      '?', /* U+3A31 */
+      '?', /* U+3A32 */
+      '?', /* U+3A33 */
+      '?', /* U+3A34 */
+      '?', /* U+3A35 */
+      '?', /* U+3A36 */
+      '?', /* U+3A37 */
+      '?', /* U+3A38 */
+      '?', /* U+3A39 */
+      '?', /* U+3A3A */
+      '?', /* U+3A3B */
+      '?', /* U+3A3C */
+      '?', /* U+3A3D */
+      '?', /* U+3A3E */
+      '?', /* U+3A3F */
+      '?', /* U+3A40 */
+      '?', /* U+3A41 */
+      '?', /* U+3A42 */
+      '?', /* U+3A43 */
+      '?', /* U+3A44 */
+      '?', /* U+3A45 */
+      '?', /* U+3A46 */
+      '?', /* U+3A47 */
+      '?', /* U+3A48 */
+      '?', /* U+3A49 */
+      '?', /* U+3A4A */
+      '?', /* U+3A4B */
+      '?', /* U+3A4C */
+      '?', /* U+3A4D */
+      '?', /* U+3A4E */
+      '?', /* U+3A4F */
+      '?', /* U+3A50 */
+      '?', /* U+3A51 */
+      '?', /* U+3A52 */
+      '?', /* U+3A53 */
+      '?', /* U+3A54 */
+      '?', /* U+3A55 */
+      '?', /* U+3A56 */
+      '?', /* U+3A57 */
+      '?', /* U+3A58 */
+      '?', /* U+3A59 */
+      '?', /* U+3A5A */
+      '?', /* U+3A5B */
+      '?', /* U+3A5C */
+      '?', /* U+3A5D */
+      '?', /* U+3A5E */
+      '?', /* U+3A5F */
+      '?', /* U+3A60 */
+      '?', /* U+3A61 */
+      '?', /* U+3A62 */
+      '?', /* U+3A63 */
+      '?', /* U+3A64 */
+      '?', /* U+3A65 */
+      '?', /* U+3A66 */
+      '?', /* U+3A67 */
+      '?', /* U+3A68 */
+      '?', /* U+3A69 */
+      '?', /* U+3A6A */
+      '?', /* U+3A6B */
+      '?', /* U+3A6C */
+      '?', /* U+3A6D */
+      '?', /* U+3A6E */
+      '?', /* U+3A6F */
+      '?', /* U+3A70 */
+      '?', /* U+3A71 */
+      '?', /* U+3A72 */
+      '?', /* U+3A73 */
+      '?', /* U+3A74 */
+      '?', /* U+3A75 */
+      '?', /* U+3A76 */
+      '?', /* U+3A77 */
+      '?', /* U+3A78 */
+      '?', /* U+3A79 */
+      '?', /* U+3A7A */
+      '?', /* U+3A7B */
+      '?', /* U+3A7C */
+      '?', /* U+3A7D */
+      '?', /* U+3A7E */
+      '?', /* U+3A7F */
+      '?', /* U+3A80 */
+      '?', /* U+3A81 */
+      '?', /* U+3A82 */
+      '?', /* U+3A83 */
+      '?', /* U+3A84 */
+      '?', /* U+3A85 */
+      '?', /* U+3A86 */
+      '?', /* U+3A87 */
+      '?', /* U+3A88 */
+      '?', /* U+3A89 */
+      '?', /* U+3A8A */
+      '?', /* U+3A8B */
+      '?', /* U+3A8C */
+      '?', /* U+3A8D */
+      '?', /* U+3A8E */
+      '?', /* U+3A8F */
+      '?', /* U+3A90 */
+      '?', /* U+3A91 */
+      '?', /* U+3A92 */
+      '?', /* U+3A93 */
+      '?', /* U+3A94 */
+      '?', /* U+3A95 */
+      '?', /* U+3A96 */
+      '?', /* U+3A97 */
+      '?', /* U+3A98 */
+      '?', /* U+3A99 */
+      '?', /* U+3A9A */
+      '?', /* U+3A9B */
+      '?', /* U+3A9C */
+      '?', /* U+3A9D */
+      '?', /* U+3A9E */
+      '?', /* U+3A9F */
+      '?', /* U+3AA0 */
+      '?', /* U+3AA1 */
+      '?', /* U+3AA2 */
+      '?', /* U+3AA3 */
+      '?', /* U+3AA4 */
+      '?', /* U+3AA5 */
+      '?', /* U+3AA6 */
+      '?', /* U+3AA7 */
+      '?', /* U+3AA8 */
+      '?', /* U+3AA9 */
+      '?', /* U+3AAA */
+      '?', /* U+3AAB */
+      '?', /* U+3AAC */
+      '?', /* U+3AAD */
+      '?', /* U+3AAE */
+      '?', /* U+3AAF */
+      '?', /* U+3AB0 */
+      '?', /* U+3AB1 */
+      '?', /* U+3AB2 */
+      '?', /* U+3AB3 */
+      '?', /* U+3AB4 */
+      '?', /* U+3AB5 */
+      '?', /* U+3AB6 */
+      '?', /* U+3AB7 */
+      '?', /* U+3AB8 */
+      '?', /* U+3AB9 */
+      '?', /* U+3ABA */
+      '?', /* U+3ABB */
+      '?', /* U+3ABC */
+      '?', /* U+3ABD */
+      '?', /* U+3ABE */
+      '?', /* U+3ABF */
+      '?', /* U+3AC0 */
+      '?', /* U+3AC1 */
+      '?', /* U+3AC2 */
+      '?', /* U+3AC3 */
+      '?', /* U+3AC4 */
+      '?', /* U+3AC5 */
+      '?', /* U+3AC6 */
+      '?', /* U+3AC7 */
+      '?', /* U+3AC8 */
+      '?', /* U+3AC9 */
+      '?', /* U+3ACA */
+      '?', /* U+3ACB */
+      '?', /* U+3ACC */
+      '?', /* U+3ACD */
+      '?', /* U+3ACE */
+      '?', /* U+3ACF */
+      '?', /* U+3AD0 */
+      '?', /* U+3AD1 */
+      '?', /* U+3AD2 */
+      '?', /* U+3AD3 */
+      '?', /* U+3AD4 */
+      '?', /* U+3AD5 */
+      '?', /* U+3AD6 */
+      '?', /* U+3AD7 */
+      '?', /* U+3AD8 */
+      '?', /* U+3AD9 */
+      '?', /* U+3ADA */
+      '?', /* U+3ADB */
+      '?', /* U+3ADC */
+      '?', /* U+3ADD */
+      '?', /* U+3ADE */
+      '?', /* U+3ADF */
+      '?', /* U+3AE0 */
+      '?', /* U+3AE1 */
+      '?', /* U+3AE2 */
+      '?', /* U+3AE3 */
+      '?', /* U+3AE4 */
+      '?', /* U+3AE5 */
+      '?', /* U+3AE6 */
+      '?', /* U+3AE7 */
+      '?', /* U+3AE8 */
+      '?', /* U+3AE9 */
+      '?', /* U+3AEA */
+      '?', /* U+3AEB */
+      '?', /* U+3AEC */
+      '?', /* U+3AED */
+      '?', /* U+3AEE */
+      '?', /* U+3AEF */
+      '?', /* U+3AF0 */
+      '?', /* U+3AF1 */
+      '?', /* U+3AF2 */
+      '?', /* U+3AF3 */
+      '?', /* U+3AF4 */
+      '?', /* U+3AF5 */
+      '?', /* U+3AF6 */
+      '?', /* U+3AF7 */
+      '?', /* U+3AF8 */
+      '?', /* U+3AF9 */
+      '?', /* U+3AFA */
+      '?', /* U+3AFB */
+      '?', /* U+3AFC */
+      '?', /* U+3AFD */
+      '?', /* U+3AFE */
+      '?', /* U+3AFF */
+      '?', /* U+3B00 */
+      '?', /* U+3B01 */
+      '?', /* U+3B02 */
+      '?', /* U+3B03 */
+      '?', /* U+3B04 */
+      '?', /* U+3B05 */
+      '?', /* U+3B06 */
+      '?', /* U+3B07 */
+      '?', /* U+3B08 */
+      '?', /* U+3B09 */
+      '?', /* U+3B0A */
+      '?', /* U+3B0B */
+      '?', /* U+3B0C */
+      '?', /* U+3B0D */
+      '?', /* U+3B0E */
+      '?', /* U+3B0F */
+      '?', /* U+3B10 */
+      '?', /* U+3B11 */
+      '?', /* U+3B12 */
+      '?', /* U+3B13 */
+      '?', /* U+3B14 */
+      '?', /* U+3B15 */
+      '?', /* U+3B16 */
+      '?', /* U+3B17 */
+      '?', /* U+3B18 */
+      '?', /* U+3B19 */
+      '?', /* U+3B1A */
+      '?', /* U+3B1B */
+      '?', /* U+3B1C */
+      '?', /* U+3B1D */
+      '?', /* U+3B1E */
+      '?', /* U+3B1F */
+      '?', /* U+3B20 */
+      '?', /* U+3B21 */
+      '?', /* U+3B22 */
+      '?', /* U+3B23 */
+      '?', /* U+3B24 */
+      '?', /* U+3B25 */
+      '?', /* U+3B26 */
+      '?', /* U+3B27 */
+      '?', /* U+3B28 */
+      '?', /* U+3B29 */
+      '?', /* U+3B2A */
+      '?', /* U+3B2B */
+      '?', /* U+3B2C */
+      '?', /* U+3B2D */
+      '?', /* U+3B2E */
+      '?', /* U+3B2F */
+      '?', /* U+3B30 */
+      '?', /* U+3B31 */
+      '?', /* U+3B32 */
+      '?', /* U+3B33 */
+      '?', /* U+3B34 */
+      '?', /* U+3B35 */
+      '?', /* U+3B36 */
+      '?', /* U+3B37 */
+      '?', /* U+3B38 */
+      '?', /* U+3B39 */
+      '?', /* U+3B3A */
+      '?', /* U+3B3B */
+      '?', /* U+3B3C */
+      '?', /* U+3B3D */
+      '?', /* U+3B3E */
+      '?', /* U+3B3F */
+      '?', /* U+3B40 */
+      '?', /* U+3B41 */
+      '?', /* U+3B42 */
+      '?', /* U+3B43 */
+      '?', /* U+3B44 */
+      '?', /* U+3B45 */
+      '?', /* U+3B46 */
+      '?', /* U+3B47 */
+      '?', /* U+3B48 */
+      '?', /* U+3B49 */
+      '?', /* U+3B4A */
+      '?', /* U+3B4B */
+      '?', /* U+3B4C */
+      '?', /* U+3B4D */
+      '?', /* U+3B4E */
+      '?', /* U+3B4F */
+      '?', /* U+3B50 */
+      '?', /* U+3B51 */
+      '?', /* U+3B52 */
+      '?', /* U+3B53 */
+      '?', /* U+3B54 */
+      '?', /* U+3B55 */
+      '?', /* U+3B56 */
+      '?', /* U+3B57 */
+      '?', /* U+3B58 */
+      '?', /* U+3B59 */
+      '?', /* U+3B5A */
+      '?', /* U+3B5B */
+      '?', /* U+3B5C */
+      '?', /* U+3B5D */
+      '?', /* U+3B5E */
+      '?', /* U+3B5F */
+      '?', /* U+3B60 */
+      '?', /* U+3B61 */
+      '?', /* U+3B62 */
+      '?', /* U+3B63 */
+      '?', /* U+3B64 */
+      '?', /* U+3B65 */
+      '?', /* U+3B66 */
+      '?', /* U+3B67 */
+      '?', /* U+3B68 */
+      '?', /* U+3B69 */
+      '?', /* U+3B6A */
+      '?', /* U+3B6B */
+      '?', /* U+3B6C */
+      '?', /* U+3B6D */
+      '?', /* U+3B6E */
+      '?', /* U+3B6F */
+      '?', /* U+3B70 */
+      '?', /* U+3B71 */
+      '?', /* U+3B72 */
+      '?', /* U+3B73 */
+      '?', /* U+3B74 */
+      '?', /* U+3B75 */
+      '?', /* U+3B76 */
+      '?', /* U+3B77 */
+      '?', /* U+3B78 */
+      '?', /* U+3B79 */
+      '?', /* U+3B7A */
+      '?', /* U+3B7B */
+      '?', /* U+3B7C */
+      '?', /* U+3B7D */
+      '?', /* U+3B7E */
+      '?', /* U+3B7F */
+      '?', /* U+3B80 */
+      '?', /* U+3B81 */
+      '?', /* U+3B82 */
+      '?', /* U+3B83 */
+      '?', /* U+3B84 */
+      '?', /* U+3B85 */
+      '?', /* U+3B86 */
+      '?', /* U+3B87 */
+      '?', /* U+3B88 */
+      '?', /* U+3B89 */
+      '?', /* U+3B8A */
+      '?', /* U+3B8B */
+      '?', /* U+3B8C */
+      '?', /* U+3B8D */
+      '?', /* U+3B8E */
+      '?', /* U+3B8F */
+      '?', /* U+3B90 */
+      '?', /* U+3B91 */
+      '?', /* U+3B92 */
+      '?', /* U+3B93 */
+      '?', /* U+3B94 */
+      '?', /* U+3B95 */
+      '?', /* U+3B96 */
+      '?', /* U+3B97 */
+      '?', /* U+3B98 */
+      '?', /* U+3B99 */
+      '?', /* U+3B9A */
+      '?', /* U+3B9B */
+      '?', /* U+3B9C */
+      '?', /* U+3B9D */
+      '?', /* U+3B9E */
+      '?', /* U+3B9F */
+      '?', /* U+3BA0 */
+      '?', /* U+3BA1 */
+      '?', /* U+3BA2 */
+      '?', /* U+3BA3 */
+      '?', /* U+3BA4 */
+      '?', /* U+3BA5 */
+      '?', /* U+3BA6 */
+      '?', /* U+3BA7 */
+      '?', /* U+3BA8 */
+      '?', /* U+3BA9 */
+      '?', /* U+3BAA */
+      '?', /* U+3BAB */
+      '?', /* U+3BAC */
+      '?', /* U+3BAD */
+      '?', /* U+3BAE */
+      '?', /* U+3BAF */
+      '?', /* U+3BB0 */
+      '?', /* U+3BB1 */
+      '?', /* U+3BB2 */
+      '?', /* U+3BB3 */
+      '?', /* U+3BB4 */
+      '?', /* U+3BB5 */
+      '?', /* U+3BB6 */
+      '?', /* U+3BB7 */
+      '?', /* U+3BB8 */
+      '?', /* U+3BB9 */
+      '?', /* U+3BBA */
+      '?', /* U+3BBB */
+      '?', /* U+3BBC */
+      '?', /* U+3BBD */
+      '?', /* U+3BBE */
+      '?', /* U+3BBF */
+      '?', /* U+3BC0 */
+      '?', /* U+3BC1 */
+      '?', /* U+3BC2 */
+      '?', /* U+3BC3 */
+      '?', /* U+3BC4 */
+      '?', /* U+3BC5 */
+      '?', /* U+3BC6 */
+      '?', /* U+3BC7 */
+      '?', /* U+3BC8 */
+      '?', /* U+3BC9 */
+      '?', /* U+3BCA */
+      '?', /* U+3BCB */
+      '?', /* U+3BCC */
+      '?', /* U+3BCD */
+      '?', /* U+3BCE */
+      '?', /* U+3BCF */
+      '?', /* U+3BD0 */
+      '?', /* U+3BD1 */
+      '?', /* U+3BD2 */
+      '?', /* U+3BD3 */
+      '?', /* U+3BD4 */
+      '?', /* U+3BD5 */
+      '?', /* U+3BD6 */
+      '?', /* U+3BD7 */
+      '?', /* U+3BD8 */
+      '?', /* U+3BD9 */
+      '?', /* U+3BDA */
+      '?', /* U+3BDB */
+      '?', /* U+3BDC */
+      '?', /* U+3BDD */
+      '?', /* U+3BDE */
+      '?', /* U+3BDF */
+      '?', /* U+3BE0 */
+      '?', /* U+3BE1 */
+      '?', /* U+3BE2 */
+      '?', /* U+3BE3 */
+      '?', /* U+3BE4 */
+      '?', /* U+3BE5 */
+      '?', /* U+3BE6 */
+      '?', /* U+3BE7 */
+      '?', /* U+3BE8 */
+      '?', /* U+3BE9 */
+      '?', /* U+3BEA */
+      '?', /* U+3BEB */
+      '?', /* U+3BEC */
+      '?', /* U+3BED */
+      '?', /* U+3BEE */
+      '?', /* U+3BEF */
+      '?', /* U+3BF0 */
+      '?', /* U+3BF1 */
+      '?', /* U+3BF2 */
+      '?', /* U+3BF3 */
+      '?', /* U+3BF4 */
+      '?', /* U+3BF5 */
+      '?', /* U+3BF6 */
+      '?', /* U+3BF7 */
+      '?', /* U+3BF8 */
+      '?', /* U+3BF9 */
+      '?', /* U+3BFA */
+      '?', /* U+3BFB */
+      '?', /* U+3BFC */
+      '?', /* U+3BFD */
+      '?', /* U+3BFE */
+      '?', /* U+3BFF */
+      '?', /* U+3C00 */
+      '?', /* U+3C01 */
+      '?', /* U+3C02 */
+      '?', /* U+3C03 */
+      '?', /* U+3C04 */
+      '?', /* U+3C05 */
+      '?', /* U+3C06 */
+      '?', /* U+3C07 */
+      '?', /* U+3C08 */
+      '?', /* U+3C09 */
+      '?', /* U+3C0A */
+      '?', /* U+3C0B */
+      '?', /* U+3C0C */
+      '?', /* U+3C0D */
+      '?', /* U+3C0E */
+      '?', /* U+3C0F */
+      '?', /* U+3C10 */
+      '?', /* U+3C11 */
+      '?', /* U+3C12 */
+      '?', /* U+3C13 */
+      '?', /* U+3C14 */
+      '?', /* U+3C15 */
+      '?', /* U+3C16 */
+      '?', /* U+3C17 */
+      '?', /* U+3C18 */
+      '?', /* U+3C19 */
+      '?', /* U+3C1A */
+      '?', /* U+3C1B */
+      '?', /* U+3C1C */
+      '?', /* U+3C1D */
+      '?', /* U+3C1E */
+      '?', /* U+3C1F */
+      '?', /* U+3C20 */
+      '?', /* U+3C21 */
+      '?', /* U+3C22 */
+      '?', /* U+3C23 */
+      '?', /* U+3C24 */
+      '?', /* U+3C25 */
+      '?', /* U+3C26 */
+      '?', /* U+3C27 */
+      '?', /* U+3C28 */
+      '?', /* U+3C29 */
+      '?', /* U+3C2A */
+      '?', /* U+3C2B */
+      '?', /* U+3C2C */
+      '?', /* U+3C2D */
+      '?', /* U+3C2E */
+      '?', /* U+3C2F */
+      '?', /* U+3C30 */
+      '?', /* U+3C31 */
+      '?', /* U+3C32 */
+      '?', /* U+3C33 */
+      '?', /* U+3C34 */
+      '?', /* U+3C35 */
+      '?', /* U+3C36 */
+      '?', /* U+3C37 */
+      '?', /* U+3C38 */
+      '?', /* U+3C39 */
+      '?', /* U+3C3A */
+      '?', /* U+3C3B */
+      '?', /* U+3C3C */
+      '?', /* U+3C3D */
+      '?', /* U+3C3E */
+      '?', /* U+3C3F */
+      '?', /* U+3C40 */
+      '?', /* U+3C41 */
+      '?', /* U+3C42 */
+      '?', /* U+3C43 */
+      '?', /* U+3C44 */
+      '?', /* U+3C45 */
+      '?', /* U+3C46 */
+      '?', /* U+3C47 */
+      '?', /* U+3C48 */
+      '?', /* U+3C49 */
+      '?', /* U+3C4A */
+      '?', /* U+3C4B */
+      '?', /* U+3C4C */
+      '?', /* U+3C4D */
+      '?', /* U+3C4E */
+      '?', /* U+3C4F */
+      '?', /* U+3C50 */
+      '?', /* U+3C51 */
+      '?', /* U+3C52 */
+      '?', /* U+3C53 */
+      '?', /* U+3C54 */
+      '?', /* U+3C55 */
+      '?', /* U+3C56 */
+      '?', /* U+3C57 */
+      '?', /* U+3C58 */
+      '?', /* U+3C59 */
+      '?', /* U+3C5A */
+      '?', /* U+3C5B */
+      '?', /* U+3C5C */
+      '?', /* U+3C5D */
+      '?', /* U+3C5E */
+      '?', /* U+3C5F */
+      '?', /* U+3C60 */
+      '?', /* U+3C61 */
+      '?', /* U+3C62 */
+      '?', /* U+3C63 */
+      '?', /* U+3C64 */
+      '?', /* U+3C65 */
+      '?', /* U+3C66 */
+      '?', /* U+3C67 */
+      '?', /* U+3C68 */
+      '?', /* U+3C69 */
+      '?', /* U+3C6A */
+      '?', /* U+3C6B */
+      '?', /* U+3C6C */
+      '?', /* U+3C6D */
+      '?', /* U+3C6E */
+      '?', /* U+3C6F */
+      '?', /* U+3C70 */
+      '?', /* U+3C71 */
+      '?', /* U+3C72 */
+      '?', /* U+3C73 */
+      '?', /* U+3C74 */
+      '?', /* U+3C75 */
+      '?', /* U+3C76 */
+      '?', /* U+3C77 */
+      '?', /* U+3C78 */
+      '?', /* U+3C79 */
+      '?', /* U+3C7A */
+      '?', /* U+3C7B */
+      '?', /* U+3C7C */
+      '?', /* U+3C7D */
+      '?', /* U+3C7E */
+      '?', /* U+3C7F */
+      '?', /* U+3C80 */
+      '?', /* U+3C81 */
+      '?', /* U+3C82 */
+      '?', /* U+3C83 */
+      '?', /* U+3C84 */
+      '?', /* U+3C85 */
+      '?', /* U+3C86 */
+      '?', /* U+3C87 */
+      '?', /* U+3C88 */
+      '?', /* U+3C89 */
+      '?', /* U+3C8A */
+      '?', /* U+3C8B */
+      '?', /* U+3C8C */
+      '?', /* U+3C8D */
+      '?', /* U+3C8E */
+      '?', /* U+3C8F */
+      '?', /* U+3C90 */
+      '?', /* U+3C91 */
+      '?', /* U+3C92 */
+      '?', /* U+3C93 */
+      '?', /* U+3C94 */
+      '?', /* U+3C95 */
+      '?', /* U+3C96 */
+      '?', /* U+3C97 */
+      '?', /* U+3C98 */
+      '?', /* U+3C99 */
+      '?', /* U+3C9A */
+      '?', /* U+3C9B */
+      '?', /* U+3C9C */
+      '?', /* U+3C9D */
+      '?', /* U+3C9E */
+      '?', /* U+3C9F */
+      '?', /* U+3CA0 */
+      '?', /* U+3CA1 */
+      '?', /* U+3CA2 */
+      '?', /* U+3CA3 */
+      '?', /* U+3CA4 */
+      '?', /* U+3CA5 */
+      '?', /* U+3CA6 */
+      '?', /* U+3CA7 */
+      '?', /* U+3CA8 */
+      '?', /* U+3CA9 */
+      '?', /* U+3CAA */
+      '?', /* U+3CAB */
+      '?', /* U+3CAC */
+      '?', /* U+3CAD */
+      '?', /* U+3CAE */
+      '?', /* U+3CAF */
+      '?', /* U+3CB0 */
+      '?', /* U+3CB1 */
+      '?', /* U+3CB2 */
+      '?', /* U+3CB3 */
+      '?', /* U+3CB4 */
+      '?', /* U+3CB5 */
+      '?', /* U+3CB6 */
+      '?', /* U+3CB7 */
+      '?', /* U+3CB8 */
+      '?', /* U+3CB9 */
+      '?', /* U+3CBA */
+      '?', /* U+3CBB */
+      '?', /* U+3CBC */
+      '?', /* U+3CBD */
+      '?', /* U+3CBE */
+      '?', /* U+3CBF */
+      '?', /* U+3CC0 */
+      '?', /* U+3CC1 */
+      '?', /* U+3CC2 */
+      '?', /* U+3CC3 */
+      '?', /* U+3CC4 */
+      '?', /* U+3CC5 */
+      '?', /* U+3CC6 */
+      '?', /* U+3CC7 */
+      '?', /* U+3CC8 */
+      '?', /* U+3CC9 */
+      '?', /* U+3CCA */
+      '?', /* U+3CCB */
+      '?', /* U+3CCC */
+      '?', /* U+3CCD */
+      '?', /* U+3CCE */
+      '?', /* U+3CCF */
+      '?', /* U+3CD0 */
+      '?', /* U+3CD1 */
+      '?', /* U+3CD2 */
+      '?', /* U+3CD3 */
+      '?', /* U+3CD4 */
+      '?', /* U+3CD5 */
+      '?', /* U+3CD6 */
+      '?', /* U+3CD7 */
+      '?', /* U+3CD8 */
+      '?', /* U+3CD9 */
+      '?', /* U+3CDA */
+      '?', /* U+3CDB */
+      '?', /* U+3CDC */
+      '?', /* U+3CDD */
+      '?', /* U+3CDE */
+      '?', /* U+3CDF */
+      '?', /* U+3CE0 */
+      '?', /* U+3CE1 */
+      '?', /* U+3CE2 */
+      '?', /* U+3CE3 */
+      '?', /* U+3CE4 */
+      '?', /* U+3CE5 */
+      '?', /* U+3CE6 */
+      '?', /* U+3CE7 */
+      '?', /* U+3CE8 */
+      '?', /* U+3CE9 */
+      '?', /* U+3CEA */
+      '?', /* U+3CEB */
+      '?', /* U+3CEC */
+      '?', /* U+3CED */
+      '?', /* U+3CEE */
+      '?', /* U+3CEF */
+      '?', /* U+3CF0 */
+      '?', /* U+3CF1 */
+      '?', /* U+3CF2 */
+      '?', /* U+3CF3 */
+      '?', /* U+3CF4 */
+      '?', /* U+3CF5 */
+      '?', /* U+3CF6 */
+      '?', /* U+3CF7 */
+      '?', /* U+3CF8 */
+      '?', /* U+3CF9 */
+      '?', /* U+3CFA */
+      '?', /* U+3CFB */
+      '?', /* U+3CFC */
+      '?', /* U+3CFD */
+      '?', /* U+3CFE */
+      '?', /* U+3CFF */
+      '?', /* U+3D00 */
+      '?', /* U+3D01 */
+      '?', /* U+3D02 */
+      '?', /* U+3D03 */
+      '?', /* U+3D04 */
+      '?', /* U+3D05 */
+      '?', /* U+3D06 */
+      '?', /* U+3D07 */
+      '?', /* U+3D08 */
+      '?', /* U+3D09 */
+      '?', /* U+3D0A */
+      '?', /* U+3D0B */
+      '?', /* U+3D0C */
+      '?', /* U+3D0D */
+      '?', /* U+3D0E */
+      '?', /* U+3D0F */
+      '?', /* U+3D10 */
+      '?', /* U+3D11 */
+      '?', /* U+3D12 */
+      '?', /* U+3D13 */
+      '?', /* U+3D14 */
+      '?', /* U+3D15 */
+      '?', /* U+3D16 */
+      '?', /* U+3D17 */
+      '?', /* U+3D18 */
+      '?', /* U+3D19 */
+      '?', /* U+3D1A */
+      '?', /* U+3D1B */
+      '?', /* U+3D1C */
+      '?', /* U+3D1D */
+      '?', /* U+3D1E */
+      '?', /* U+3D1F */
+      '?', /* U+3D20 */
+      '?', /* U+3D21 */
+      '?', /* U+3D22 */
+      '?', /* U+3D23 */
+      '?', /* U+3D24 */
+      '?', /* U+3D25 */
+      '?', /* U+3D26 */
+      '?', /* U+3D27 */
+      '?', /* U+3D28 */
+      '?', /* U+3D29 */
+      '?', /* U+3D2A */
+      '?', /* U+3D2B */
+      '?', /* U+3D2C */
+      '?', /* U+3D2D */
+      '?', /* U+3D2E */
+      '?', /* U+3D2F */
+      '?', /* U+3D30 */
+      '?', /* U+3D31 */
+      '?', /* U+3D32 */
+      '?', /* U+3D33 */
+      '?', /* U+3D34 */
+      '?', /* U+3D35 */
+      '?', /* U+3D36 */
+      '?', /* U+3D37 */
+      '?', /* U+3D38 */
+      '?', /* U+3D39 */
+      '?', /* U+3D3A */
+      '?', /* U+3D3B */
+      '?', /* U+3D3C */
+      '?', /* U+3D3D */
+      '?', /* U+3D3E */
+      '?', /* U+3D3F */
+      '?', /* U+3D40 */
+      '?', /* U+3D41 */
+      '?', /* U+3D42 */
+      '?', /* U+3D43 */
+      '?', /* U+3D44 */
+      '?', /* U+3D45 */
+      '?', /* U+3D46 */
+      '?', /* U+3D47 */
+      '?', /* U+3D48 */
+      '?', /* U+3D49 */
+      '?', /* U+3D4A */
+      '?', /* U+3D4B */
+      '?', /* U+3D4C */
+      '?', /* U+3D4D */
+      '?', /* U+3D4E */
+      '?', /* U+3D4F */
+      '?', /* U+3D50 */
+      '?', /* U+3D51 */
+      '?', /* U+3D52 */
+      '?', /* U+3D53 */
+      '?', /* U+3D54 */
+      '?', /* U+3D55 */
+      '?', /* U+3D56 */
+      '?', /* U+3D57 */
+      '?', /* U+3D58 */
+      '?', /* U+3D59 */
+      '?', /* U+3D5A */
+      '?', /* U+3D5B */
+      '?', /* U+3D5C */
+      '?', /* U+3D5D */
+      '?', /* U+3D5E */
+      '?', /* U+3D5F */
+      '?', /* U+3D60 */
+      '?', /* U+3D61 */
+      '?', /* U+3D62 */
+      '?', /* U+3D63 */
+      '?', /* U+3D64 */
+      '?', /* U+3D65 */
+      '?', /* U+3D66 */
+      '?', /* U+3D67 */
+      '?', /* U+3D68 */
+      '?', /* U+3D69 */
+      '?', /* U+3D6A */
+      '?', /* U+3D6B */
+      '?', /* U+3D6C */
+      '?', /* U+3D6D */
+      '?', /* U+3D6E */
+      '?', /* U+3D6F */
+      '?', /* U+3D70 */
+      '?', /* U+3D71 */
+      '?', /* U+3D72 */
+      '?', /* U+3D73 */
+      '?', /* U+3D74 */
+      '?', /* U+3D75 */
+      '?', /* U+3D76 */
+      '?', /* U+3D77 */
+      '?', /* U+3D78 */
+      '?', /* U+3D79 */
+      '?', /* U+3D7A */
+      '?', /* U+3D7B */
+      '?', /* U+3D7C */
+      '?', /* U+3D7D */
+      '?', /* U+3D7E */
+      '?', /* U+3D7F */
+      '?', /* U+3D80 */
+      '?', /* U+3D81 */
+      '?', /* U+3D82 */
+      '?', /* U+3D83 */
+      '?', /* U+3D84 */
+      '?', /* U+3D85 */
+      '?', /* U+3D86 */
+      '?', /* U+3D87 */
+      '?', /* U+3D88 */
+      '?', /* U+3D89 */
+      '?', /* U+3D8A */
+      '?', /* U+3D8B */
+      '?', /* U+3D8C */
+      '?', /* U+3D8D */
+      '?', /* U+3D8E */
+      '?', /* U+3D8F */
+      '?', /* U+3D90 */
+      '?', /* U+3D91 */
+      '?', /* U+3D92 */
+      '?', /* U+3D93 */
+      '?', /* U+3D94 */
+      '?', /* U+3D95 */
+      '?', /* U+3D96 */
+      '?', /* U+3D97 */
+      '?', /* U+3D98 */
+      '?', /* U+3D99 */
+      '?', /* U+3D9A */
+      '?', /* U+3D9B */
+      '?', /* U+3D9C */
+      '?', /* U+3D9D */
+      '?', /* U+3D9E */
+      '?', /* U+3D9F */
+      '?', /* U+3DA0 */
+      '?', /* U+3DA1 */
+      '?', /* U+3DA2 */
+      '?', /* U+3DA3 */
+      '?', /* U+3DA4 */
+      '?', /* U+3DA5 */
+      '?', /* U+3DA6 */
+      '?', /* U+3DA7 */
+      '?', /* U+3DA8 */
+      '?', /* U+3DA9 */
+      '?', /* U+3DAA */
+      '?', /* U+3DAB */
+      '?', /* U+3DAC */
+      '?', /* U+3DAD */
+      '?', /* U+3DAE */
+      '?', /* U+3DAF */
+      '?', /* U+3DB0 */
+      '?', /* U+3DB1 */
+      '?', /* U+3DB2 */
+      '?', /* U+3DB3 */
+      '?', /* U+3DB4 */
+      '?', /* U+3DB5 */
+      '?', /* U+3DB6 */
+      '?', /* U+3DB7 */
+      '?', /* U+3DB8 */
+      '?', /* U+3DB9 */
+      '?', /* U+3DBA */
+      '?', /* U+3DBB */
+      '?', /* U+3DBC */
+      '?', /* U+3DBD */
+      '?', /* U+3DBE */
+      '?', /* U+3DBF */
+      '?', /* U+3DC0 */
+      '?', /* U+3DC1 */
+      '?', /* U+3DC2 */
+      '?', /* U+3DC3 */
+      '?', /* U+3DC4 */
+      '?', /* U+3DC5 */
+      '?', /* U+3DC6 */
+      '?', /* U+3DC7 */
+      '?', /* U+3DC8 */
+      '?', /* U+3DC9 */
+      '?', /* U+3DCA */
+      '?', /* U+3DCB */
+      '?', /* U+3DCC */
+      '?', /* U+3DCD */
+      '?', /* U+3DCE */
+      '?', /* U+3DCF */
+      '?', /* U+3DD0 */
+      '?', /* U+3DD1 */
+      '?', /* U+3DD2 */
+      '?', /* U+3DD3 */
+      '?', /* U+3DD4 */
+      '?', /* U+3DD5 */
+      '?', /* U+3DD6 */
+      '?', /* U+3DD7 */
+      '?', /* U+3DD8 */
+      '?', /* U+3DD9 */
+      '?', /* U+3DDA */
+      '?', /* U+3DDB */
+      '?', /* U+3DDC */
+      '?', /* U+3DDD */
+      '?', /* U+3DDE */
+      '?', /* U+3DDF */
+      '?', /* U+3DE0 */
+      '?', /* U+3DE1 */
+      '?', /* U+3DE2 */
+      '?', /* U+3DE3 */
+      '?', /* U+3DE4 */
+      '?', /* U+3DE5 */
+      '?', /* U+3DE6 */
+      '?', /* U+3DE7 */
+      '?', /* U+3DE8 */
+      '?', /* U+3DE9 */
+      '?', /* U+3DEA */
+      '?', /* U+3DEB */
+      '?', /* U+3DEC */
+      '?', /* U+3DED */
+      '?', /* U+3DEE */
+      '?', /* U+3DEF */
+      '?', /* U+3DF0 */
+      '?', /* U+3DF1 */
+      '?', /* U+3DF2 */
+      '?', /* U+3DF3 */
+      '?', /* U+3DF4 */
+      '?', /* U+3DF5 */
+      '?', /* U+3DF6 */
+      '?', /* U+3DF7 */
+      '?', /* U+3DF8 */
+      '?', /* U+3DF9 */
+      '?', /* U+3DFA */
+      '?', /* U+3DFB */
+      '?', /* U+3DFC */
+      '?', /* U+3DFD */
+      '?', /* U+3DFE */
+      '?', /* U+3DFF */
+      '?', /* U+3E00 */
+      '?', /* U+3E01 */
+      '?', /* U+3E02 */
+      '?', /* U+3E03 */
+      '?', /* U+3E04 */
+      '?', /* U+3E05 */
+      '?', /* U+3E06 */
+      '?', /* U+3E07 */
+      '?', /* U+3E08 */
+      '?', /* U+3E09 */
+      '?', /* U+3E0A */
+      '?', /* U+3E0B */
+      '?', /* U+3E0C */
+      '?', /* U+3E0D */
+      '?', /* U+3E0E */
+      '?', /* U+3E0F */
+      '?', /* U+3E10 */
+      '?', /* U+3E11 */
+      '?', /* U+3E12 */
+      '?', /* U+3E13 */
+      '?', /* U+3E14 */
+      '?', /* U+3E15 */
+      '?', /* U+3E16 */
+      '?', /* U+3E17 */
+      '?', /* U+3E18 */
+      '?', /* U+3E19 */
+      '?', /* U+3E1A */
+      '?', /* U+3E1B */
+      '?', /* U+3E1C */
+      '?', /* U+3E1D */
+      '?', /* U+3E1E */
+      '?', /* U+3E1F */
+      '?', /* U+3E20 */
+      '?', /* U+3E21 */
+      '?', /* U+3E22 */
+      '?', /* U+3E23 */
+      '?', /* U+3E24 */
+      '?', /* U+3E25 */
+      '?', /* U+3E26 */
+      '?', /* U+3E27 */
+      '?', /* U+3E28 */
+      '?', /* U+3E29 */
+      '?', /* U+3E2A */
+      '?', /* U+3E2B */
+      '?', /* U+3E2C */
+      '?', /* U+3E2D */
+      '?', /* U+3E2E */
+      '?', /* U+3E2F */
+      '?', /* U+3E30 */
+      '?', /* U+3E31 */
+      '?', /* U+3E32 */
+      '?', /* U+3E33 */
+      '?', /* U+3E34 */
+      '?', /* U+3E35 */
+      '?', /* U+3E36 */
+      '?', /* U+3E37 */
+      '?', /* U+3E38 */
+      '?', /* U+3E39 */
+      '?', /* U+3E3A */
+      '?', /* U+3E3B */
+      '?', /* U+3E3C */
+      '?', /* U+3E3D */
+      '?', /* U+3E3E */
+      '?', /* U+3E3F */
+      '?', /* U+3E40 */
+      '?', /* U+3E41 */
+      '?', /* U+3E42 */
+      '?', /* U+3E43 */
+      '?', /* U+3E44 */
+      '?', /* U+3E45 */
+      '?', /* U+3E46 */
+      '?', /* U+3E47 */
+      '?', /* U+3E48 */
+      '?', /* U+3E49 */
+      '?', /* U+3E4A */
+      '?', /* U+3E4B */
+      '?', /* U+3E4C */
+      '?', /* U+3E4D */
+      '?', /* U+3E4E */
+      '?', /* U+3E4F */
+      '?', /* U+3E50 */
+      '?', /* U+3E51 */
+      '?', /* U+3E52 */
+      '?', /* U+3E53 */
+      '?', /* U+3E54 */
+      '?', /* U+3E55 */
+      '?', /* U+3E56 */
+      '?', /* U+3E57 */
+      '?', /* U+3E58 */
+      '?', /* U+3E59 */
+      '?', /* U+3E5A */
+      '?', /* U+3E5B */
+      '?', /* U+3E5C */
+      '?', /* U+3E5D */
+      '?', /* U+3E5E */
+      '?', /* U+3E5F */
+      '?', /* U+3E60 */
+      '?', /* U+3E61 */
+      '?', /* U+3E62 */
+      '?', /* U+3E63 */
+      '?', /* U+3E64 */
+      '?', /* U+3E65 */
+      '?', /* U+3E66 */
+      '?', /* U+3E67 */
+      '?', /* U+3E68 */
+      '?', /* U+3E69 */
+      '?', /* U+3E6A */
+      '?', /* U+3E6B */
+      '?', /* U+3E6C */
+      '?', /* U+3E6D */
+      '?', /* U+3E6E */
+      '?', /* U+3E6F */
+      '?', /* U+3E70 */
+      '?', /* U+3E71 */
+      '?', /* U+3E72 */
+      '?', /* U+3E73 */
+      '?', /* U+3E74 */
+      '?', /* U+3E75 */
+      '?', /* U+3E76 */
+      '?', /* U+3E77 */
+      '?', /* U+3E78 */
+      '?', /* U+3E79 */
+      '?', /* U+3E7A */
+      '?', /* U+3E7B */
+      '?', /* U+3E7C */
+      '?', /* U+3E7D */
+      '?', /* U+3E7E */
+      '?', /* U+3E7F */
+      '?', /* U+3E80 */
+      '?', /* U+3E81 */
+      '?', /* U+3E82 */
+      '?', /* U+3E83 */
+      '?', /* U+3E84 */
+      '?', /* U+3E85 */
+      '?', /* U+3E86 */
+      '?', /* U+3E87 */
+      '?', /* U+3E88 */
+      '?', /* U+3E89 */
+      '?', /* U+3E8A */
+      '?', /* U+3E8B */
+      '?', /* U+3E8C */
+      '?', /* U+3E8D */
+      '?', /* U+3E8E */
+      '?', /* U+3E8F */
+      '?', /* U+3E90 */
+      '?', /* U+3E91 */
+      '?', /* U+3E92 */
+      '?', /* U+3E93 */
+      '?', /* U+3E94 */
+      '?', /* U+3E95 */
+      '?', /* U+3E96 */
+      '?', /* U+3E97 */
+      '?', /* U+3E98 */
+      '?', /* U+3E99 */
+      '?', /* U+3E9A */
+      '?', /* U+3E9B */
+      '?', /* U+3E9C */
+      '?', /* U+3E9D */
+      '?', /* U+3E9E */
+      '?', /* U+3E9F */
+      '?', /* U+3EA0 */
+      '?', /* U+3EA1 */
+      '?', /* U+3EA2 */
+      '?', /* U+3EA3 */
+      '?', /* U+3EA4 */
+      '?', /* U+3EA5 */
+      '?', /* U+3EA6 */
+      '?', /* U+3EA7 */
+      '?', /* U+3EA8 */
+      '?', /* U+3EA9 */
+      '?', /* U+3EAA */
+      '?', /* U+3EAB */
+      '?', /* U+3EAC */
+      '?', /* U+3EAD */
+      '?', /* U+3EAE */
+      '?', /* U+3EAF */
+      '?', /* U+3EB0 */
+      '?', /* U+3EB1 */
+      '?', /* U+3EB2 */
+      '?', /* U+3EB3 */
+      '?', /* U+3EB4 */
+      '?', /* U+3EB5 */
+      '?', /* U+3EB6 */
+      '?', /* U+3EB7 */
+      '?', /* U+3EB8 */
+      '?', /* U+3EB9 */
+      '?', /* U+3EBA */
+      '?', /* U+3EBB */
+      '?', /* U+3EBC */
+      '?', /* U+3EBD */
+      '?', /* U+3EBE */
+      '?', /* U+3EBF */
+      '?', /* U+3EC0 */
+      '?', /* U+3EC1 */
+      '?', /* U+3EC2 */
+      '?', /* U+3EC3 */
+      '?', /* U+3EC4 */
+      '?', /* U+3EC5 */
+      '?', /* U+3EC6 */
+      '?', /* U+3EC7 */
+      '?', /* U+3EC8 */
+      '?', /* U+3EC9 */
+      '?', /* U+3ECA */
+      '?', /* U+3ECB */
+      '?', /* U+3ECC */
+      '?', /* U+3ECD */
+      '?', /* U+3ECE */
+      '?', /* U+3ECF */
+      '?', /* U+3ED0 */
+      '?', /* U+3ED1 */
+      '?', /* U+3ED2 */
+      '?', /* U+3ED3 */
+      '?', /* U+3ED4 */
+      '?', /* U+3ED5 */
+      '?', /* U+3ED6 */
+      '?', /* U+3ED7 */
+      '?', /* U+3ED8 */
+      '?', /* U+3ED9 */
+      '?', /* U+3EDA */
+      '?', /* U+3EDB */
+      '?', /* U+3EDC */
+      '?', /* U+3EDD */
+      '?', /* U+3EDE */
+      '?', /* U+3EDF */
+      '?', /* U+3EE0 */
+      '?', /* U+3EE1 */
+      '?', /* U+3EE2 */
+      '?', /* U+3EE3 */
+      '?', /* U+3EE4 */
+      '?', /* U+3EE5 */
+      '?', /* U+3EE6 */
+      '?', /* U+3EE7 */
+      '?', /* U+3EE8 */
+      '?', /* U+3EE9 */
+      '?', /* U+3EEA */
+      '?', /* U+3EEB */
+      '?', /* U+3EEC */
+      '?', /* U+3EED */
+      '?', /* U+3EEE */
+      '?', /* U+3EEF */
+      '?', /* U+3EF0 */
+      '?', /* U+3EF1 */
+      '?', /* U+3EF2 */
+      '?', /* U+3EF3 */
+      '?', /* U+3EF4 */
+      '?', /* U+3EF5 */
+      '?', /* U+3EF6 */
+      '?', /* U+3EF7 */
+      '?', /* U+3EF8 */
+      '?', /* U+3EF9 */
+      '?', /* U+3EFA */
+      '?', /* U+3EFB */
+      '?', /* U+3EFC */
+      '?', /* U+3EFD */
+      '?', /* U+3EFE */
+      '?', /* U+3EFF */
+      '?', /* U+3F00 */
+      '?', /* U+3F01 */
+      '?', /* U+3F02 */
+      '?', /* U+3F03 */
+      '?', /* U+3F04 */
+      '?', /* U+3F05 */
+      '?', /* U+3F06 */
+      '?', /* U+3F07 */
+      '?', /* U+3F08 */
+      '?', /* U+3F09 */
+      '?', /* U+3F0A */
+      '?', /* U+3F0B */
+      '?', /* U+3F0C */
+      '?', /* U+3F0D */
+      '?', /* U+3F0E */
+      '?', /* U+3F0F */
+      '?', /* U+3F10 */
+      '?', /* U+3F11 */
+      '?', /* U+3F12 */
+      '?', /* U+3F13 */
+      '?', /* U+3F14 */
+      '?', /* U+3F15 */
+      '?', /* U+3F16 */
+      '?', /* U+3F17 */
+      '?', /* U+3F18 */
+      '?', /* U+3F19 */
+      '?', /* U+3F1A */
+      '?', /* U+3F1B */
+      '?', /* U+3F1C */
+      '?', /* U+3F1D */
+      '?', /* U+3F1E */
+      '?', /* U+3F1F */
+      '?', /* U+3F20 */
+      '?', /* U+3F21 */
+      '?', /* U+3F22 */
+      '?', /* U+3F23 */
+      '?', /* U+3F24 */
+      '?', /* U+3F25 */
+      '?', /* U+3F26 */
+      '?', /* U+3F27 */
+      '?', /* U+3F28 */
+      '?', /* U+3F29 */
+      '?', /* U+3F2A */
+      '?', /* U+3F2B */
+      '?', /* U+3F2C */
+      '?', /* U+3F2D */
+      '?', /* U+3F2E */
+      '?', /* U+3F2F */
+      '?', /* U+3F30 */
+      '?', /* U+3F31 */
+      '?', /* U+3F32 */
+      '?', /* U+3F33 */
+      '?', /* U+3F34 */
+      '?', /* U+3F35 */
+      '?', /* U+3F36 */
+      '?', /* U+3F37 */
+      '?', /* U+3F38 */
+      '?', /* U+3F39 */
+      '?', /* U+3F3A */
+      '?', /* U+3F3B */
+      '?', /* U+3F3C */
+      '?', /* U+3F3D */
+      '?', /* U+3F3E */
+      '?', /* U+3F3F */
+      '?', /* U+3F40 */
+      '?', /* U+3F41 */
+      '?', /* U+3F42 */
+      '?', /* U+3F43 */
+      '?', /* U+3F44 */
+      '?', /* U+3F45 */
+      '?', /* U+3F46 */
+      '?', /* U+3F47 */
+      '?', /* U+3F48 */
+      '?', /* U+3F49 */
+      '?', /* U+3F4A */
+      '?', /* U+3F4B */
+      '?', /* U+3F4C */
+      '?', /* U+3F4D */
+      '?', /* U+3F4E */
+      '?', /* U+3F4F */
+      '?', /* U+3F50 */
+      '?', /* U+3F51 */
+      '?', /* U+3F52 */
+      '?', /* U+3F53 */
+      '?', /* U+3F54 */
+      '?', /* U+3F55 */
+      '?', /* U+3F56 */
+      '?', /* U+3F57 */
+      '?', /* U+3F58 */
+      '?', /* U+3F59 */
+      '?', /* U+3F5A */
+      '?', /* U+3F5B */
+      '?', /* U+3F5C */
+      '?', /* U+3F5D */
+      '?', /* U+3F5E */
+      '?', /* U+3F5F */
+      '?', /* U+3F60 */
+      '?', /* U+3F61 */
+      '?', /* U+3F62 */
+      '?', /* U+3F63 */
+      '?', /* U+3F64 */
+      '?', /* U+3F65 */
+      '?', /* U+3F66 */
+      '?', /* U+3F67 */
+      '?', /* U+3F68 */
+      '?', /* U+3F69 */
+      '?', /* U+3F6A */
+      '?', /* U+3F6B */
+      '?', /* U+3F6C */
+      '?', /* U+3F6D */
+      '?', /* U+3F6E */
+      '?', /* U+3F6F */
+      '?', /* U+3F70 */
+      '?', /* U+3F71 */
+      '?', /* U+3F72 */
+      '?', /* U+3F73 */
+      '?', /* U+3F74 */
+      '?', /* U+3F75 */
+      '?', /* U+3F76 */
+      '?', /* U+3F77 */
+      '?', /* U+3F78 */
+      '?', /* U+3F79 */
+      '?', /* U+3F7A */
+      '?', /* U+3F7B */
+      '?', /* U+3F7C */
+      '?', /* U+3F7D */
+      '?', /* U+3F7E */
+      '?', /* U+3F7F */
+      '?', /* U+3F80 */
+      '?', /* U+3F81 */
+      '?', /* U+3F82 */
+      '?', /* U+3F83 */
+      '?', /* U+3F84 */
+      '?', /* U+3F85 */
+      '?', /* U+3F86 */
+      '?', /* U+3F87 */
+      '?', /* U+3F88 */
+      '?', /* U+3F89 */
+      '?', /* U+3F8A */
+      '?', /* U+3F8B */
+      '?', /* U+3F8C */
+      '?', /* U+3F8D */
+      '?', /* U+3F8E */
+      '?', /* U+3F8F */
+      '?', /* U+3F90 */
+      '?', /* U+3F91 */
+      '?', /* U+3F92 */
+      '?', /* U+3F93 */
+      '?', /* U+3F94 */
+      '?', /* U+3F95 */
+      '?', /* U+3F96 */
+      '?', /* U+3F97 */
+      '?', /* U+3F98 */
+      '?', /* U+3F99 */
+      '?', /* U+3F9A */
+      '?', /* U+3F9B */
+      '?', /* U+3F9C */
+      '?', /* U+3F9D */
+      '?', /* U+3F9E */
+      '?', /* U+3F9F */
+      '?', /* U+3FA0 */
+      '?', /* U+3FA1 */
+      '?', /* U+3FA2 */
+      '?', /* U+3FA3 */
+      '?', /* U+3FA4 */
+      '?', /* U+3FA5 */
+      '?', /* U+3FA6 */
+      '?', /* U+3FA7 */
+      '?', /* U+3FA8 */
+      '?', /* U+3FA9 */
+      '?', /* U+3FAA */
+      '?', /* U+3FAB */
+      '?', /* U+3FAC */
+      '?', /* U+3FAD */
+      '?', /* U+3FAE */
+      '?', /* U+3FAF */
+      '?', /* U+3FB0 */
+      '?', /* U+3FB1 */
+      '?', /* U+3FB2 */
+      '?', /* U+3FB3 */
+      '?', /* U+3FB4 */
+      '?', /* U+3FB5 */
+      '?', /* U+3FB6 */
+      '?', /* U+3FB7 */
+      '?', /* U+3FB8 */
+      '?', /* U+3FB9 */
+      '?', /* U+3FBA */
+      '?', /* U+3FBB */
+      '?', /* U+3FBC */
+      '?', /* U+3FBD */
+      '?', /* U+3FBE */
+      '?', /* U+3FBF */
+      '?', /* U+3FC0 */
+      '?', /* U+3FC1 */
+      '?', /* U+3FC2 */
+      '?', /* U+3FC3 */
+      '?', /* U+3FC4 */
+      '?', /* U+3FC5 */
+      '?', /* U+3FC6 */
+      '?', /* U+3FC7 */
+      '?', /* U+3FC8 */
+      '?', /* U+3FC9 */
+      '?', /* U+3FCA */
+      '?', /* U+3FCB */
+      '?', /* U+3FCC */
+      '?', /* U+3FCD */
+      '?', /* U+3FCE */
+      '?', /* U+3FCF */
+      '?', /* U+3FD0 */
+      '?', /* U+3FD1 */
+      '?', /* U+3FD2 */
+      '?', /* U+3FD3 */
+      '?', /* U+3FD4 */
+      '?', /* U+3FD5 */
+      '?', /* U+3FD6 */
+      '?', /* U+3FD7 */
+      '?', /* U+3FD8 */
+      '?', /* U+3FD9 */
+      '?', /* U+3FDA */
+      '?', /* U+3FDB */
+      '?', /* U+3FDC */
+      '?', /* U+3FDD */
+      '?', /* U+3FDE */
+      '?', /* U+3FDF */
+      '?', /* U+3FE0 */
+      '?', /* U+3FE1 */
+      '?', /* U+3FE2 */
+      '?', /* U+3FE3 */
+      '?', /* U+3FE4 */
+      '?', /* U+3FE5 */
+      '?', /* U+3FE6 */
+      '?', /* U+3FE7 */
+      '?', /* U+3FE8 */
+      '?', /* U+3FE9 */
+      '?', /* U+3FEA */
+      '?', /* U+3FEB */
+      '?', /* U+3FEC */
+      '?', /* U+3FED */
+      '?', /* U+3FEE */
+      '?', /* U+3FEF */
+      '?', /* U+3FF0 */
+      '?', /* U+3FF1 */
+      '?', /* U+3FF2 */
+      '?', /* U+3FF3 */
+      '?', /* U+3FF4 */
+      '?', /* U+3FF5 */
+      '?', /* U+3FF6 */
+      '?', /* U+3FF7 */
+      '?', /* U+3FF8 */
+      '?', /* U+3FF9 */
+      '?', /* U+3FFA */
+      '?', /* U+3FFB */
+      '?', /* U+3FFC */
+      '?', /* U+3FFD */
+      '?', /* U+3FFE */
+      '?', /* U+3FFF */
+      '?', /* U+4000 */
+      '?', /* U+4001 */
+      '?', /* U+4002 */
+      '?', /* U+4003 */
+      '?', /* U+4004 */
+      '?', /* U+4005 */
+      '?', /* U+4006 */
+      '?', /* U+4007 */
+      '?', /* U+4008 */
+      '?', /* U+4009 */
+      '?', /* U+400A */
+      '?', /* U+400B */
+      '?', /* U+400C */
+      '?', /* U+400D */
+      '?', /* U+400E */
+      '?', /* U+400F */
+      '?', /* U+4010 */
+      '?', /* U+4011 */
+      '?', /* U+4012 */
+      '?', /* U+4013 */
+      '?', /* U+4014 */
+      '?', /* U+4015 */
+      '?', /* U+4016 */
+      '?', /* U+4017 */
+      '?', /* U+4018 */
+      '?', /* U+4019 */
+      '?', /* U+401A */
+      '?', /* U+401B */
+      '?', /* U+401C */
+      '?', /* U+401D */
+      '?', /* U+401E */
+      '?', /* U+401F */
+      '?', /* U+4020 */
+      '?', /* U+4021 */
+      '?', /* U+4022 */
+      '?', /* U+4023 */
+      '?', /* U+4024 */
+      '?', /* U+4025 */
+      '?', /* U+4026 */
+      '?', /* U+4027 */
+      '?', /* U+4028 */
+      '?', /* U+4029 */
+      '?', /* U+402A */
+      '?', /* U+402B */
+      '?', /* U+402C */
+      '?', /* U+402D */
+      '?', /* U+402E */
+      '?', /* U+402F */
+      '?', /* U+4030 */
+      '?', /* U+4031 */
+      '?', /* U+4032 */
+      '?', /* U+4033 */
+      '?', /* U+4034 */
+      '?', /* U+4035 */
+      '?', /* U+4036 */
+      '?', /* U+4037 */
+      '?', /* U+4038 */
+      '?', /* U+4039 */
+      '?', /* U+403A */
+      '?', /* U+403B */
+      '?', /* U+403C */
+      '?', /* U+403D */
+      '?', /* U+403E */
+      '?', /* U+403F */
+      '?', /* U+4040 */
+      '?', /* U+4041 */
+      '?', /* U+4042 */
+      '?', /* U+4043 */
+      '?', /* U+4044 */
+      '?', /* U+4045 */
+      '?', /* U+4046 */
+      '?', /* U+4047 */
+      '?', /* U+4048 */
+      '?', /* U+4049 */
+      '?', /* U+404A */
+      '?', /* U+404B */
+      '?', /* U+404C */
+      '?', /* U+404D */
+      '?', /* U+404E */
+      '?', /* U+404F */
+      '?', /* U+4050 */
+      '?', /* U+4051 */
+      '?', /* U+4052 */
+      '?', /* U+4053 */
+      '?', /* U+4054 */
+      '?', /* U+4055 */
+      '?', /* U+4056 */
+      '?', /* U+4057 */
+      '?', /* U+4058 */
+      '?', /* U+4059 */
+      '?', /* U+405A */
+      '?', /* U+405B */
+      '?', /* U+405C */
+      '?', /* U+405D */
+      '?', /* U+405E */
+      '?', /* U+405F */
+      '?', /* U+4060 */
+      '?', /* U+4061 */
+      '?', /* U+4062 */
+      '?', /* U+4063 */
+      '?', /* U+4064 */
+      '?', /* U+4065 */
+      '?', /* U+4066 */
+      '?', /* U+4067 */
+      '?', /* U+4068 */
+      '?', /* U+4069 */
+      '?', /* U+406A */
+      '?', /* U+406B */
+      '?', /* U+406C */
+      '?', /* U+406D */
+      '?', /* U+406E */
+      '?', /* U+406F */
+      '?', /* U+4070 */
+      '?', /* U+4071 */
+      '?', /* U+4072 */
+      '?', /* U+4073 */
+      '?', /* U+4074 */
+      '?', /* U+4075 */
+      '?', /* U+4076 */
+      '?', /* U+4077 */
+      '?', /* U+4078 */
+      '?', /* U+4079 */
+      '?', /* U+407A */
+      '?', /* U+407B */
+      '?', /* U+407C */
+      '?', /* U+407D */
+      '?', /* U+407E */
+      '?', /* U+407F */
+      '?', /* U+4080 */
+      '?', /* U+4081 */
+      '?', /* U+4082 */
+      '?', /* U+4083 */
+      '?', /* U+4084 */
+      '?', /* U+4085 */
+      '?', /* U+4086 */
+      '?', /* U+4087 */
+      '?', /* U+4088 */
+      '?', /* U+4089 */
+      '?', /* U+408A */
+      '?', /* U+408B */
+      '?', /* U+408C */
+      '?', /* U+408D */
+      '?', /* U+408E */
+      '?', /* U+408F */
+      '?', /* U+4090 */
+      '?', /* U+4091 */
+      '?', /* U+4092 */
+      '?', /* U+4093 */
+      '?', /* U+4094 */
+      '?', /* U+4095 */
+      '?', /* U+4096 */
+      '?', /* U+4097 */
+      '?', /* U+4098 */
+      '?', /* U+4099 */
+      '?', /* U+409A */
+      '?', /* U+409B */
+      '?', /* U+409C */
+      '?', /* U+409D */
+      '?', /* U+409E */
+      '?', /* U+409F */
+      '?', /* U+40A0 */
+      '?', /* U+40A1 */
+      '?', /* U+40A2 */
+      '?', /* U+40A3 */
+      '?', /* U+40A4 */
+      '?', /* U+40A5 */
+      '?', /* U+40A6 */
+      '?', /* U+40A7 */
+      '?', /* U+40A8 */
+      '?', /* U+40A9 */
+      '?', /* U+40AA */
+      '?', /* U+40AB */
+      '?', /* U+40AC */
+      '?', /* U+40AD */
+      '?', /* U+40AE */
+      '?', /* U+40AF */
+      '?', /* U+40B0 */
+      '?', /* U+40B1 */
+      '?', /* U+40B2 */
+      '?', /* U+40B3 */
+      '?', /* U+40B4 */
+      '?', /* U+40B5 */
+      '?', /* U+40B6 */
+      '?', /* U+40B7 */
+      '?', /* U+40B8 */
+      '?', /* U+40B9 */
+      '?', /* U+40BA */
+      '?', /* U+40BB */
+      '?', /* U+40BC */
+      '?', /* U+40BD */
+      '?', /* U+40BE */
+      '?', /* U+40BF */
+      '?', /* U+40C0 */
+      '?', /* U+40C1 */
+      '?', /* U+40C2 */
+      '?', /* U+40C3 */
+      '?', /* U+40C4 */
+      '?', /* U+40C5 */
+      '?', /* U+40C6 */
+      '?', /* U+40C7 */
+      '?', /* U+40C8 */
+      '?', /* U+40C9 */
+      '?', /* U+40CA */
+      '?', /* U+40CB */
+      '?', /* U+40CC */
+      '?', /* U+40CD */
+      '?', /* U+40CE */
+      '?', /* U+40CF */
+      '?', /* U+40D0 */
+      '?', /* U+40D1 */
+      '?', /* U+40D2 */
+      '?', /* U+40D3 */
+      '?', /* U+40D4 */
+      '?', /* U+40D5 */
+      '?', /* U+40D6 */
+      '?', /* U+40D7 */
+      '?', /* U+40D8 */
+      '?', /* U+40D9 */
+      '?', /* U+40DA */
+      '?', /* U+40DB */
+      '?', /* U+40DC */
+      '?', /* U+40DD */
+      '?', /* U+40DE */
+      '?', /* U+40DF */
+      '?', /* U+40E0 */
+      '?', /* U+40E1 */
+      '?', /* U+40E2 */
+      '?', /* U+40E3 */
+      '?', /* U+40E4 */
+      '?', /* U+40E5 */
+      '?', /* U+40E6 */
+      '?', /* U+40E7 */
+      '?', /* U+40E8 */
+      '?', /* U+40E9 */
+      '?', /* U+40EA */
+      '?', /* U+40EB */
+      '?', /* U+40EC */
+      '?', /* U+40ED */
+      '?', /* U+40EE */
+      '?', /* U+40EF */
+      '?', /* U+40F0 */
+      '?', /* U+40F1 */
+      '?', /* U+40F2 */
+      '?', /* U+40F3 */
+      '?', /* U+40F4 */
+      '?', /* U+40F5 */
+      '?', /* U+40F6 */
+      '?', /* U+40F7 */
+      '?', /* U+40F8 */
+      '?', /* U+40F9 */
+      '?', /* U+40FA */
+      '?', /* U+40FB */
+      '?', /* U+40FC */
+      '?', /* U+40FD */
+      '?', /* U+40FE */
+      '?', /* U+40FF */
+      '?', /* U+4100 */
+      '?', /* U+4101 */
+      '?', /* U+4102 */
+      '?', /* U+4103 */
+      '?', /* U+4104 */
+      '?', /* U+4105 */
+      '?', /* U+4106 */
+      '?', /* U+4107 */
+      '?', /* U+4108 */
+      '?', /* U+4109 */
+      '?', /* U+410A */
+      '?', /* U+410B */
+      '?', /* U+410C */
+      '?', /* U+410D */
+      '?', /* U+410E */
+      '?', /* U+410F */
+      '?', /* U+4110 */
+      '?', /* U+4111 */
+      '?', /* U+4112 */
+      '?', /* U+4113 */
+      '?', /* U+4114 */
+      '?', /* U+4115 */
+      '?', /* U+4116 */
+      '?', /* U+4117 */
+      '?', /* U+4118 */
+      '?', /* U+4119 */
+      '?', /* U+411A */
+      '?', /* U+411B */
+      '?', /* U+411C */
+      '?', /* U+411D */
+      '?', /* U+411E */
+      '?', /* U+411F */
+      '?', /* U+4120 */
+      '?', /* U+4121 */
+      '?', /* U+4122 */
+      '?', /* U+4123 */
+      '?', /* U+4124 */
+      '?', /* U+4125 */
+      '?', /* U+4126 */
+      '?', /* U+4127 */
+      '?', /* U+4128 */
+      '?', /* U+4129 */
+      '?', /* U+412A */
+      '?', /* U+412B */
+      '?', /* U+412C */
+      '?', /* U+412D */
+      '?', /* U+412E */
+      '?', /* U+412F */
+      '?', /* U+4130 */
+      '?', /* U+4131 */
+      '?', /* U+4132 */
+      '?', /* U+4133 */
+      '?', /* U+4134 */
+      '?', /* U+4135 */
+      '?', /* U+4136 */
+      '?', /* U+4137 */
+      '?', /* U+4138 */
+      '?', /* U+4139 */
+      '?', /* U+413A */
+      '?', /* U+413B */
+      '?', /* U+413C */
+      '?', /* U+413D */
+      '?', /* U+413E */
+      '?', /* U+413F */
+      '?', /* U+4140 */
+      '?', /* U+4141 */
+      '?', /* U+4142 */
+      '?', /* U+4143 */
+      '?', /* U+4144 */
+      '?', /* U+4145 */
+      '?', /* U+4146 */
+      '?', /* U+4147 */
+      '?', /* U+4148 */
+      '?', /* U+4149 */
+      '?', /* U+414A */
+      '?', /* U+414B */
+      '?', /* U+414C */
+      '?', /* U+414D */
+      '?', /* U+414E */
+      '?', /* U+414F */
+      '?', /* U+4150 */
+      '?', /* U+4151 */
+      '?', /* U+4152 */
+      '?', /* U+4153 */
+      '?', /* U+4154 */
+      '?', /* U+4155 */
+      '?', /* U+4156 */
+      '?', /* U+4157 */
+      '?', /* U+4158 */
+      '?', /* U+4159 */
+      '?', /* U+415A */
+      '?', /* U+415B */
+      '?', /* U+415C */
+      '?', /* U+415D */
+      '?', /* U+415E */
+      '?', /* U+415F */
+      '?', /* U+4160 */
+      '?', /* U+4161 */
+      '?', /* U+4162 */
+      '?', /* U+4163 */
+      '?', /* U+4164 */
+      '?', /* U+4165 */
+      '?', /* U+4166 */
+      '?', /* U+4167 */
+      '?', /* U+4168 */
+      '?', /* U+4169 */
+      '?', /* U+416A */
+      '?', /* U+416B */
+      '?', /* U+416C */
+      '?', /* U+416D */
+      '?', /* U+416E */
+      '?', /* U+416F */
+      '?', /* U+4170 */
+      '?', /* U+4171 */
+      '?', /* U+4172 */
+      '?', /* U+4173 */
+      '?', /* U+4174 */
+      '?', /* U+4175 */
+      '?', /* U+4176 */
+      '?', /* U+4177 */
+      '?', /* U+4178 */
+      '?', /* U+4179 */
+      '?', /* U+417A */
+      '?', /* U+417B */
+      '?', /* U+417C */
+      '?', /* U+417D */
+      '?', /* U+417E */
+      '?', /* U+417F */
+      '?', /* U+4180 */
+      '?', /* U+4181 */
+      '?', /* U+4182 */
+      '?', /* U+4183 */
+      '?', /* U+4184 */
+      '?', /* U+4185 */
+      '?', /* U+4186 */
+      '?', /* U+4187 */
+      '?', /* U+4188 */
+      '?', /* U+4189 */
+      '?', /* U+418A */
+      '?', /* U+418B */
+      '?', /* U+418C */
+      '?', /* U+418D */
+      '?', /* U+418E */
+      '?', /* U+418F */
+      '?', /* U+4190 */
+      '?', /* U+4191 */
+      '?', /* U+4192 */
+      '?', /* U+4193 */
+      '?', /* U+4194 */
+      '?', /* U+4195 */
+      '?', /* U+4196 */
+      '?', /* U+4197 */
+      '?', /* U+4198 */
+      '?', /* U+4199 */
+      '?', /* U+419A */
+      '?', /* U+419B */
+      '?', /* U+419C */
+      '?', /* U+419D */
+      '?', /* U+419E */
+      '?', /* U+419F */
+      '?', /* U+41A0 */
+      '?', /* U+41A1 */
+      '?', /* U+41A2 */
+      '?', /* U+41A3 */
+      '?', /* U+41A4 */
+      '?', /* U+41A5 */
+      '?', /* U+41A6 */
+      '?', /* U+41A7 */
+      '?', /* U+41A8 */
+      '?', /* U+41A9 */
+      '?', /* U+41AA */
+      '?', /* U+41AB */
+      '?', /* U+41AC */
+      '?', /* U+41AD */
+      '?', /* U+41AE */
+      '?', /* U+41AF */
+      '?', /* U+41B0 */
+      '?', /* U+41B1 */
+      '?', /* U+41B2 */
+      '?', /* U+41B3 */
+      '?', /* U+41B4 */
+      '?', /* U+41B5 */
+      '?', /* U+41B6 */
+      '?', /* U+41B7 */
+      '?', /* U+41B8 */
+      '?', /* U+41B9 */
+      '?', /* U+41BA */
+      '?', /* U+41BB */
+      '?', /* U+41BC */
+      '?', /* U+41BD */
+      '?', /* U+41BE */
+      '?', /* U+41BF */
+      '?', /* U+41C0 */
+      '?', /* U+41C1 */
+      '?', /* U+41C2 */
+      '?', /* U+41C3 */
+      '?', /* U+41C4 */
+      '?', /* U+41C5 */
+      '?', /* U+41C6 */
+      '?', /* U+41C7 */
+      '?', /* U+41C8 */
+      '?', /* U+41C9 */
+      '?', /* U+41CA */
+      '?', /* U+41CB */
+      '?', /* U+41CC */
+      '?', /* U+41CD */
+      '?', /* U+41CE */
+      '?', /* U+41CF */
+      '?', /* U+41D0 */
+      '?', /* U+41D1 */
+      '?', /* U+41D2 */
+      '?', /* U+41D3 */
+      '?', /* U+41D4 */
+      '?', /* U+41D5 */
+      '?', /* U+41D6 */
+      '?', /* U+41D7 */
+      '?', /* U+41D8 */
+      '?', /* U+41D9 */
+      '?', /* U+41DA */
+      '?', /* U+41DB */
+      '?', /* U+41DC */
+      '?', /* U+41DD */
+      '?', /* U+41DE */
+      '?', /* U+41DF */
+      '?', /* U+41E0 */
+      '?', /* U+41E1 */
+      '?', /* U+41E2 */
+      '?', /* U+41E3 */
+      '?', /* U+41E4 */
+      '?', /* U+41E5 */
+      '?', /* U+41E6 */
+      '?', /* U+41E7 */
+      '?', /* U+41E8 */
+      '?', /* U+41E9 */
+      '?', /* U+41EA */
+      '?', /* U+41EB */
+      '?', /* U+41EC */
+      '?', /* U+41ED */
+      '?', /* U+41EE */
+      '?', /* U+41EF */
+      '?', /* U+41F0 */
+      '?', /* U+41F1 */
+      '?', /* U+41F2 */
+      '?', /* U+41F3 */
+      '?', /* U+41F4 */
+      '?', /* U+41F5 */
+      '?', /* U+41F6 */
+      '?', /* U+41F7 */
+      '?', /* U+41F8 */
+      '?', /* U+41F9 */
+      '?', /* U+41FA */
+      '?', /* U+41FB */
+      '?', /* U+41FC */
+      '?', /* U+41FD */
+      '?', /* U+41FE */
+      '?', /* U+41FF */
+      '?', /* U+4200 */
+      '?', /* U+4201 */
+      '?', /* U+4202 */
+      '?', /* U+4203 */
+      '?', /* U+4204 */
+      '?', /* U+4205 */
+      '?', /* U+4206 */
+      '?', /* U+4207 */
+      '?', /* U+4208 */
+      '?', /* U+4209 */
+      '?', /* U+420A */
+      '?', /* U+420B */
+      '?', /* U+420C */
+      '?', /* U+420D */
+      '?', /* U+420E */
+      '?', /* U+420F */
+      '?', /* U+4210 */
+      '?', /* U+4211 */
+      '?', /* U+4212 */
+      '?', /* U+4213 */
+      '?', /* U+4214 */
+      '?', /* U+4215 */
+      '?', /* U+4216 */
+      '?', /* U+4217 */
+      '?', /* U+4218 */
+      '?', /* U+4219 */
+      '?', /* U+421A */
+      '?', /* U+421B */
+      '?', /* U+421C */
+      '?', /* U+421D */
+      '?', /* U+421E */
+      '?', /* U+421F */
+      '?', /* U+4220 */
+      '?', /* U+4221 */
+      '?', /* U+4222 */
+      '?', /* U+4223 */
+      '?', /* U+4224 */
+      '?', /* U+4225 */
+      '?', /* U+4226 */
+      '?', /* U+4227 */
+      '?', /* U+4228 */
+      '?', /* U+4229 */
+      '?', /* U+422A */
+      '?', /* U+422B */
+      '?', /* U+422C */
+      '?', /* U+422D */
+      '?', /* U+422E */
+      '?', /* U+422F */
+      '?', /* U+4230 */
+      '?', /* U+4231 */
+      '?', /* U+4232 */
+      '?', /* U+4233 */
+      '?', /* U+4234 */
+      '?', /* U+4235 */
+      '?', /* U+4236 */
+      '?', /* U+4237 */
+      '?', /* U+4238 */
+      '?', /* U+4239 */
+      '?', /* U+423A */
+      '?', /* U+423B */
+      '?', /* U+423C */
+      '?', /* U+423D */
+      '?', /* U+423E */
+      '?', /* U+423F */
+      '?', /* U+4240 */
+      '?', /* U+4241 */
+      '?', /* U+4242 */
+      '?', /* U+4243 */
+      '?', /* U+4244 */
+      '?', /* U+4245 */
+      '?', /* U+4246 */
+      '?', /* U+4247 */
+      '?', /* U+4248 */
+      '?', /* U+4249 */
+      '?', /* U+424A */
+      '?', /* U+424B */
+      '?', /* U+424C */
+      '?', /* U+424D */
+      '?', /* U+424E */
+      '?', /* U+424F */
+      '?', /* U+4250 */
+      '?', /* U+4251 */
+      '?', /* U+4252 */
+      '?', /* U+4253 */
+      '?', /* U+4254 */
+      '?', /* U+4255 */
+      '?', /* U+4256 */
+      '?', /* U+4257 */
+      '?', /* U+4258 */
+      '?', /* U+4259 */
+      '?', /* U+425A */
+      '?', /* U+425B */
+      '?', /* U+425C */
+      '?', /* U+425D */
+      '?', /* U+425E */
+      '?', /* U+425F */
+      '?', /* U+4260 */
+      '?', /* U+4261 */
+      '?', /* U+4262 */
+      '?', /* U+4263 */
+      '?', /* U+4264 */
+      '?', /* U+4265 */
+      '?', /* U+4266 */
+      '?', /* U+4267 */
+      '?', /* U+4268 */
+      '?', /* U+4269 */
+      '?', /* U+426A */
+      '?', /* U+426B */
+      '?', /* U+426C */
+      '?', /* U+426D */
+      '?', /* U+426E */
+      '?', /* U+426F */
+      '?', /* U+4270 */
+      '?', /* U+4271 */
+      '?', /* U+4272 */
+      '?', /* U+4273 */
+      '?', /* U+4274 */
+      '?', /* U+4275 */
+      '?', /* U+4276 */
+      '?', /* U+4277 */
+      '?', /* U+4278 */
+      '?', /* U+4279 */
+      '?', /* U+427A */
+      '?', /* U+427B */
+      '?', /* U+427C */
+      '?', /* U+427D */
+      '?', /* U+427E */
+      '?', /* U+427F */
+      '?', /* U+4280 */
+      '?', /* U+4281 */
+      '?', /* U+4282 */
+      '?', /* U+4283 */
+      '?', /* U+4284 */
+      '?', /* U+4285 */
+      '?', /* U+4286 */
+      '?', /* U+4287 */
+      '?', /* U+4288 */
+      '?', /* U+4289 */
+      '?', /* U+428A */
+      '?', /* U+428B */
+      '?', /* U+428C */
+      '?', /* U+428D */
+      '?', /* U+428E */
+      '?', /* U+428F */
+      '?', /* U+4290 */
+      '?', /* U+4291 */
+      '?', /* U+4292 */
+      '?', /* U+4293 */
+      '?', /* U+4294 */
+      '?', /* U+4295 */
+      '?', /* U+4296 */
+      '?', /* U+4297 */
+      '?', /* U+4298 */
+      '?', /* U+4299 */
+      '?', /* U+429A */
+      '?', /* U+429B */
+      '?', /* U+429C */
+      '?', /* U+429D */
+      '?', /* U+429E */
+      '?', /* U+429F */
+      '?', /* U+42A0 */
+      '?', /* U+42A1 */
+      '?', /* U+42A2 */
+      '?', /* U+42A3 */
+      '?', /* U+42A4 */
+      '?', /* U+42A5 */
+      '?', /* U+42A6 */
+      '?', /* U+42A7 */
+      '?', /* U+42A8 */
+      '?', /* U+42A9 */
+      '?', /* U+42AA */
+      '?', /* U+42AB */
+      '?', /* U+42AC */
+      '?', /* U+42AD */
+      '?', /* U+42AE */
+      '?', /* U+42AF */
+      '?', /* U+42B0 */
+      '?', /* U+42B1 */
+      '?', /* U+42B2 */
+      '?', /* U+42B3 */
+      '?', /* U+42B4 */
+      '?', /* U+42B5 */
+      '?', /* U+42B6 */
+      '?', /* U+42B7 */
+      '?', /* U+42B8 */
+      '?', /* U+42B9 */
+      '?', /* U+42BA */
+      '?', /* U+42BB */
+      '?', /* U+42BC */
+      '?', /* U+42BD */
+      '?', /* U+42BE */
+      '?', /* U+42BF */
+      '?', /* U+42C0 */
+      '?', /* U+42C1 */
+      '?', /* U+42C2 */
+      '?', /* U+42C3 */
+      '?', /* U+42C4 */
+      '?', /* U+42C5 */
+      '?', /* U+42C6 */
+      '?', /* U+42C7 */
+      '?', /* U+42C8 */
+      '?', /* U+42C9 */
+      '?', /* U+42CA */
+      '?', /* U+42CB */
+      '?', /* U+42CC */
+      '?', /* U+42CD */
+      '?', /* U+42CE */
+      '?', /* U+42CF */
+      '?', /* U+42D0 */
+      '?', /* U+42D1 */
+      '?', /* U+42D2 */
+      '?', /* U+42D3 */
+      '?', /* U+42D4 */
+      '?', /* U+42D5 */
+      '?', /* U+42D6 */
+      '?', /* U+42D7 */
+      '?', /* U+42D8 */
+      '?', /* U+42D9 */
+      '?', /* U+42DA */
+      '?', /* U+42DB */
+      '?', /* U+42DC */
+      '?', /* U+42DD */
+      '?', /* U+42DE */
+      '?', /* U+42DF */
+      '?', /* U+42E0 */
+      '?', /* U+42E1 */
+      '?', /* U+42E2 */
+      '?', /* U+42E3 */
+      '?', /* U+42E4 */
+      '?', /* U+42E5 */
+      '?', /* U+42E6 */
+      '?', /* U+42E7 */
+      '?', /* U+42E8 */
+      '?', /* U+42E9 */
+      '?', /* U+42EA */
+      '?', /* U+42EB */
+      '?', /* U+42EC */
+      '?', /* U+42ED */
+      '?', /* U+42EE */
+      '?', /* U+42EF */
+      '?', /* U+42F0 */
+      '?', /* U+42F1 */
+      '?', /* U+42F2 */
+      '?', /* U+42F3 */
+      '?', /* U+42F4 */
+      '?', /* U+42F5 */
+      '?', /* U+42F6 */
+      '?', /* U+42F7 */
+      '?', /* U+42F8 */
+      '?', /* U+42F9 */
+      '?', /* U+42FA */
+      '?', /* U+42FB */
+      '?', /* U+42FC */
+      '?', /* U+42FD */
+      '?', /* U+42FE */
+      '?', /* U+42FF */
+      '?', /* U+4300 */
+      '?', /* U+4301 */
+      '?', /* U+4302 */
+      '?', /* U+4303 */
+      '?', /* U+4304 */
+      '?', /* U+4305 */
+      '?', /* U+4306 */
+      '?', /* U+4307 */
+      '?', /* U+4308 */
+      '?', /* U+4309 */
+      '?', /* U+430A */
+      '?', /* U+430B */
+      '?', /* U+430C */
+      '?', /* U+430D */
+      '?', /* U+430E */
+      '?', /* U+430F */
+      '?', /* U+4310 */
+      '?', /* U+4311 */
+      '?', /* U+4312 */
+      '?', /* U+4313 */
+      '?', /* U+4314 */
+      '?', /* U+4315 */
+      '?', /* U+4316 */
+      '?', /* U+4317 */
+      '?', /* U+4318 */
+      '?', /* U+4319 */
+      '?', /* U+431A */
+      '?', /* U+431B */
+      '?', /* U+431C */
+      '?', /* U+431D */
+      '?', /* U+431E */
+      '?', /* U+431F */
+      '?', /* U+4320 */
+      '?', /* U+4321 */
+      '?', /* U+4322 */
+      '?', /* U+4323 */
+      '?', /* U+4324 */
+      '?', /* U+4325 */
+      '?', /* U+4326 */
+      '?', /* U+4327 */
+      '?', /* U+4328 */
+      '?', /* U+4329 */
+      '?', /* U+432A */
+      '?', /* U+432B */
+      '?', /* U+432C */
+      '?', /* U+432D */
+      '?', /* U+432E */
+      '?', /* U+432F */
+      '?', /* U+4330 */
+      '?', /* U+4331 */
+      '?', /* U+4332 */
+      '?', /* U+4333 */
+      '?', /* U+4334 */
+      '?', /* U+4335 */
+      '?', /* U+4336 */
+      '?', /* U+4337 */
+      '?', /* U+4338 */
+      '?', /* U+4339 */
+      '?', /* U+433A */
+      '?', /* U+433B */
+      '?', /* U+433C */
+      '?', /* U+433D */
+      '?', /* U+433E */
+      '?', /* U+433F */
+      '?', /* U+4340 */
+      '?', /* U+4341 */
+      '?', /* U+4342 */
+      '?', /* U+4343 */
+      '?', /* U+4344 */
+      '?', /* U+4345 */
+      '?', /* U+4346 */
+      '?', /* U+4347 */
+      '?', /* U+4348 */
+      '?', /* U+4349 */
+      '?', /* U+434A */
+      '?', /* U+434B */
+      '?', /* U+434C */
+      '?', /* U+434D */
+      '?', /* U+434E */
+      '?', /* U+434F */
+      '?', /* U+4350 */
+      '?', /* U+4351 */
+      '?', /* U+4352 */
+      '?', /* U+4353 */
+      '?', /* U+4354 */
+      '?', /* U+4355 */
+      '?', /* U+4356 */
+      '?', /* U+4357 */
+      '?', /* U+4358 */
+      '?', /* U+4359 */
+      '?', /* U+435A */
+      '?', /* U+435B */
+      '?', /* U+435C */
+      '?', /* U+435D */
+      '?', /* U+435E */
+      '?', /* U+435F */
+      '?', /* U+4360 */
+      '?', /* U+4361 */
+      '?', /* U+4362 */
+      '?', /* U+4363 */
+      '?', /* U+4364 */
+      '?', /* U+4365 */
+      '?', /* U+4366 */
+      '?', /* U+4367 */
+      '?', /* U+4368 */
+      '?', /* U+4369 */
+      '?', /* U+436A */
+      '?', /* U+436B */
+      '?', /* U+436C */
+      '?', /* U+436D */
+      '?', /* U+436E */
+      '?', /* U+436F */
+      '?', /* U+4370 */
+      '?', /* U+4371 */
+      '?', /* U+4372 */
+      '?', /* U+4373 */
+      '?', /* U+4374 */
+      '?', /* U+4375 */
+      '?', /* U+4376 */
+      '?', /* U+4377 */
+      '?', /* U+4378 */
+      '?', /* U+4379 */
+      '?', /* U+437A */
+      '?', /* U+437B */
+      '?', /* U+437C */
+      '?', /* U+437D */
+      '?', /* U+437E */
+      '?', /* U+437F */
+      '?', /* U+4380 */
+      '?', /* U+4381 */
+      '?', /* U+4382 */
+      '?', /* U+4383 */
+      '?', /* U+4384 */
+      '?', /* U+4385 */
+      '?', /* U+4386 */
+      '?', /* U+4387 */
+      '?', /* U+4388 */
+      '?', /* U+4389 */
+      '?', /* U+438A */
+      '?', /* U+438B */
+      '?', /* U+438C */
+      '?', /* U+438D */
+      '?', /* U+438E */
+      '?', /* U+438F */
+      '?', /* U+4390 */
+      '?', /* U+4391 */
+      '?', /* U+4392 */
+      '?', /* U+4393 */
+      '?', /* U+4394 */
+      '?', /* U+4395 */
+      '?', /* U+4396 */
+      '?', /* U+4397 */
+      '?', /* U+4398 */
+      '?', /* U+4399 */
+      '?', /* U+439A */
+      '?', /* U+439B */
+      '?', /* U+439C */
+      '?', /* U+439D */
+      '?', /* U+439E */
+      '?', /* U+439F */
+      '?', /* U+43A0 */
+      '?', /* U+43A1 */
+      '?', /* U+43A2 */
+      '?', /* U+43A3 */
+      '?', /* U+43A4 */
+      '?', /* U+43A5 */
+      '?', /* U+43A6 */
+      '?', /* U+43A7 */
+      '?', /* U+43A8 */
+      '?', /* U+43A9 */
+      '?', /* U+43AA */
+      '?', /* U+43AB */
+      '?', /* U+43AC */
+      '?', /* U+43AD */
+      '?', /* U+43AE */
+      '?', /* U+43AF */
+      '?', /* U+43B0 */
+      '?', /* U+43B1 */
+      '?', /* U+43B2 */
+      '?', /* U+43B3 */
+      '?', /* U+43B4 */
+      '?', /* U+43B5 */
+      '?', /* U+43B6 */
+      '?', /* U+43B7 */
+      '?', /* U+43B8 */
+      '?', /* U+43B9 */
+      '?', /* U+43BA */
+      '?', /* U+43BB */
+      '?', /* U+43BC */
+      '?', /* U+43BD */
+      '?', /* U+43BE */
+      '?', /* U+43BF */
+      '?', /* U+43C0 */
+      '?', /* U+43C1 */
+      '?', /* U+43C2 */
+      '?', /* U+43C3 */
+      '?', /* U+43C4 */
+      '?', /* U+43C5 */
+      '?', /* U+43C6 */
+      '?', /* U+43C7 */
+      '?', /* U+43C8 */
+      '?', /* U+43C9 */
+      '?', /* U+43CA */
+      '?', /* U+43CB */
+      '?', /* U+43CC */
+      '?', /* U+43CD */
+      '?', /* U+43CE */
+      '?', /* U+43CF */
+      '?', /* U+43D0 */
+      '?', /* U+43D1 */
+      '?', /* U+43D2 */
+      '?', /* U+43D3 */
+      '?', /* U+43D4 */
+      '?', /* U+43D5 */
+      '?', /* U+43D6 */
+      '?', /* U+43D7 */
+      '?', /* U+43D8 */
+      '?', /* U+43D9 */
+      '?', /* U+43DA */
+      '?', /* U+43DB */
+      '?', /* U+43DC */
+      '?', /* U+43DD */
+      '?', /* U+43DE */
+      '?', /* U+43DF */
+      '?', /* U+43E0 */
+      '?', /* U+43E1 */
+      '?', /* U+43E2 */
+      '?', /* U+43E3 */
+      '?', /* U+43E4 */
+      '?', /* U+43E5 */
+      '?', /* U+43E6 */
+      '?', /* U+43E7 */
+      '?', /* U+43E8 */
+      '?', /* U+43E9 */
+      '?', /* U+43EA */
+      '?', /* U+43EB */
+      '?', /* U+43EC */
+      '?', /* U+43ED */
+      '?', /* U+43EE */
+      '?', /* U+43EF */
+      '?', /* U+43F0 */
+      '?', /* U+43F1 */
+      '?', /* U+43F2 */
+      '?', /* U+43F3 */
+      '?', /* U+43F4 */
+      '?', /* U+43F5 */
+      '?', /* U+43F6 */
+      '?', /* U+43F7 */
+      '?', /* U+43F8 */
+      '?', /* U+43F9 */
+      '?', /* U+43FA */
+      '?', /* U+43FB */
+      '?', /* U+43FC */
+      '?', /* U+43FD */
+      '?', /* U+43FE */
+      '?', /* U+43FF */
+      '?', /* U+4400 */
+      '?', /* U+4401 */
+      '?', /* U+4402 */
+      '?', /* U+4403 */
+      '?', /* U+4404 */
+      '?', /* U+4405 */
+      '?', /* U+4406 */
+      '?', /* U+4407 */
+      '?', /* U+4408 */
+      '?', /* U+4409 */
+      '?', /* U+440A */
+      '?', /* U+440B */
+      '?', /* U+440C */
+      '?', /* U+440D */
+      '?', /* U+440E */
+      '?', /* U+440F */
+      '?', /* U+4410 */
+      '?', /* U+4411 */
+      '?', /* U+4412 */
+      '?', /* U+4413 */
+      '?', /* U+4414 */
+      '?', /* U+4415 */
+      '?', /* U+4416 */
+      '?', /* U+4417 */
+      '?', /* U+4418 */
+      '?', /* U+4419 */
+      '?', /* U+441A */
+      '?', /* U+441B */
+      '?', /* U+441C */
+      '?', /* U+441D */
+      '?', /* U+441E */
+      '?', /* U+441F */
+      '?', /* U+4420 */
+      '?', /* U+4421 */
+      '?', /* U+4422 */
+      '?', /* U+4423 */
+      '?', /* U+4424 */
+      '?', /* U+4425 */
+      '?', /* U+4426 */
+      '?', /* U+4427 */
+      '?', /* U+4428 */
+      '?', /* U+4429 */
+      '?', /* U+442A */
+      '?', /* U+442B */
+      '?', /* U+442C */
+      '?', /* U+442D */
+      '?', /* U+442E */
+      '?', /* U+442F */
+      '?', /* U+4430 */
+      '?', /* U+4431 */
+      '?', /* U+4432 */
+      '?', /* U+4433 */
+      '?', /* U+4434 */
+      '?', /* U+4435 */
+      '?', /* U+4436 */
+      '?', /* U+4437 */
+      '?', /* U+4438 */
+      '?', /* U+4439 */
+      '?', /* U+443A */
+      '?', /* U+443B */
+      '?', /* U+443C */
+      '?', /* U+443D */
+      '?', /* U+443E */
+      '?', /* U+443F */
+      '?', /* U+4440 */
+      '?', /* U+4441 */
+      '?', /* U+4442 */
+      '?', /* U+4443 */
+      '?', /* U+4444 */
+      '?', /* U+4445 */
+      '?', /* U+4446 */
+      '?', /* U+4447 */
+      '?', /* U+4448 */
+      '?', /* U+4449 */
+      '?', /* U+444A */
+      '?', /* U+444B */
+      '?', /* U+444C */
+      '?', /* U+444D */
+      '?', /* U+444E */
+      '?', /* U+444F */
+      '?', /* U+4450 */
+      '?', /* U+4451 */
+      '?', /* U+4452 */
+      '?', /* U+4453 */
+      '?', /* U+4454 */
+      '?', /* U+4455 */
+      '?', /* U+4456 */
+      '?', /* U+4457 */
+      '?', /* U+4458 */
+      '?', /* U+4459 */
+      '?', /* U+445A */
+      '?', /* U+445B */
+      '?', /* U+445C */
+      '?', /* U+445D */
+      '?', /* U+445E */
+      '?', /* U+445F */
+      '?', /* U+4460 */
+      '?', /* U+4461 */
+      '?', /* U+4462 */
+      '?', /* U+4463 */
+      '?', /* U+4464 */
+      '?', /* U+4465 */
+      '?', /* U+4466 */
+      '?', /* U+4467 */
+      '?', /* U+4468 */
+      '?', /* U+4469 */
+      '?', /* U+446A */
+      '?', /* U+446B */
+      '?', /* U+446C */
+      '?', /* U+446D */
+      '?', /* U+446E */
+      '?', /* U+446F */
+      '?', /* U+4470 */
+      '?', /* U+4471 */
+      '?', /* U+4472 */
+      '?', /* U+4473 */
+      '?', /* U+4474 */
+      '?', /* U+4475 */
+      '?', /* U+4476 */
+      '?', /* U+4477 */
+      '?', /* U+4478 */
+      '?', /* U+4479 */
+      '?', /* U+447A */
+      '?', /* U+447B */
+      '?', /* U+447C */
+      '?', /* U+447D */
+      '?', /* U+447E */
+      '?', /* U+447F */
+      '?', /* U+4480 */
+      '?', /* U+4481 */
+      '?', /* U+4482 */
+      '?', /* U+4483 */
+      '?', /* U+4484 */
+      '?', /* U+4485 */
+      '?', /* U+4486 */
+      '?', /* U+4487 */
+      '?', /* U+4488 */
+      '?', /* U+4489 */
+      '?', /* U+448A */
+      '?', /* U+448B */
+      '?', /* U+448C */
+      '?', /* U+448D */
+      '?', /* U+448E */
+      '?', /* U+448F */
+      '?', /* U+4490 */
+      '?', /* U+4491 */
+      '?', /* U+4492 */
+      '?', /* U+4493 */
+      '?', /* U+4494 */
+      '?', /* U+4495 */
+      '?', /* U+4496 */
+      '?', /* U+4497 */
+      '?', /* U+4498 */
+      '?', /* U+4499 */
+      '?', /* U+449A */
+      '?', /* U+449B */
+      '?', /* U+449C */
+      '?', /* U+449D */
+      '?', /* U+449E */
+      '?', /* U+449F */
+      '?', /* U+44A0 */
+      '?', /* U+44A1 */
+      '?', /* U+44A2 */
+      '?', /* U+44A3 */
+      '?', /* U+44A4 */
+      '?', /* U+44A5 */
+      '?', /* U+44A6 */
+      '?', /* U+44A7 */
+      '?', /* U+44A8 */
+      '?', /* U+44A9 */
+      '?', /* U+44AA */
+      '?', /* U+44AB */
+      '?', /* U+44AC */
+      '?', /* U+44AD */
+      '?', /* U+44AE */
+      '?', /* U+44AF */
+      '?', /* U+44B0 */
+      '?', /* U+44B1 */
+      '?', /* U+44B2 */
+      '?', /* U+44B3 */
+      '?', /* U+44B4 */
+      '?', /* U+44B5 */
+      '?', /* U+44B6 */
+      '?', /* U+44B7 */
+      '?', /* U+44B8 */
+      '?', /* U+44B9 */
+      '?', /* U+44BA */
+      '?', /* U+44BB */
+      '?', /* U+44BC */
+      '?', /* U+44BD */
+      '?', /* U+44BE */
+      '?', /* U+44BF */
+      '?', /* U+44C0 */
+      '?', /* U+44C1 */
+      '?', /* U+44C2 */
+      '?', /* U+44C3 */
+      '?', /* U+44C4 */
+      '?', /* U+44C5 */
+      '?', /* U+44C6 */
+      '?', /* U+44C7 */
+      '?', /* U+44C8 */
+      '?', /* U+44C9 */
+      '?', /* U+44CA */
+      '?', /* U+44CB */
+      '?', /* U+44CC */
+      '?', /* U+44CD */
+      '?', /* U+44CE */
+      '?', /* U+44CF */
+      '?', /* U+44D0 */
+      '?', /* U+44D1 */
+      '?', /* U+44D2 */
+      '?', /* U+44D3 */
+      '?', /* U+44D4 */
+      '?', /* U+44D5 */
+      '?', /* U+44D6 */
+      '?', /* U+44D7 */
+      '?', /* U+44D8 */
+      '?', /* U+44D9 */
+      '?', /* U+44DA */
+      '?', /* U+44DB */
+      '?', /* U+44DC */
+      '?', /* U+44DD */
+      '?', /* U+44DE */
+      '?', /* U+44DF */
+      '?', /* U+44E0 */
+      '?', /* U+44E1 */
+      '?', /* U+44E2 */
+      '?', /* U+44E3 */
+      '?', /* U+44E4 */
+      '?', /* U+44E5 */
+      '?', /* U+44E6 */
+      '?', /* U+44E7 */
+      '?', /* U+44E8 */
+      '?', /* U+44E9 */
+      '?', /* U+44EA */
+      '?', /* U+44EB */
+      '?', /* U+44EC */
+      '?', /* U+44ED */
+      '?', /* U+44EE */
+      '?', /* U+44EF */
+      '?', /* U+44F0 */
+      '?', /* U+44F1 */
+      '?', /* U+44F2 */
+      '?', /* U+44F3 */
+      '?', /* U+44F4 */
+      '?', /* U+44F5 */
+      '?', /* U+44F6 */
+      '?', /* U+44F7 */
+      '?', /* U+44F8 */
+      '?', /* U+44F9 */
+      '?', /* U+44FA */
+      '?', /* U+44FB */
+      '?', /* U+44FC */
+      '?', /* U+44FD */
+      '?', /* U+44FE */
+      '?', /* U+44FF */
+      '?', /* U+4500 */
+      '?', /* U+4501 */
+      '?', /* U+4502 */
+      '?', /* U+4503 */
+      '?', /* U+4504 */
+      '?', /* U+4505 */
+      '?', /* U+4506 */
+      '?', /* U+4507 */
+      '?', /* U+4508 */
+      '?', /* U+4509 */
+      '?', /* U+450A */
+      '?', /* U+450B */
+      '?', /* U+450C */
+      '?', /* U+450D */
+      '?', /* U+450E */
+      '?', /* U+450F */
+      '?', /* U+4510 */
+      '?', /* U+4511 */
+      '?', /* U+4512 */
+      '?', /* U+4513 */
+      '?', /* U+4514 */
+      '?', /* U+4515 */
+      '?', /* U+4516 */
+      '?', /* U+4517 */
+      '?', /* U+4518 */
+      '?', /* U+4519 */
+      '?', /* U+451A */
+      '?', /* U+451B */
+      '?', /* U+451C */
+      '?', /* U+451D */
+      '?', /* U+451E */
+      '?', /* U+451F */
+      '?', /* U+4520 */
+      '?', /* U+4521 */
+      '?', /* U+4522 */
+      '?', /* U+4523 */
+      '?', /* U+4524 */
+      '?', /* U+4525 */
+      '?', /* U+4526 */
+      '?', /* U+4527 */
+      '?', /* U+4528 */
+      '?', /* U+4529 */
+      '?', /* U+452A */
+      '?', /* U+452B */
+      '?', /* U+452C */
+      '?', /* U+452D */
+      '?', /* U+452E */
+      '?', /* U+452F */
+      '?', /* U+4530 */
+      '?', /* U+4531 */
+      '?', /* U+4532 */
+      '?', /* U+4533 */
+      '?', /* U+4534 */
+      '?', /* U+4535 */
+      '?', /* U+4536 */
+      '?', /* U+4537 */
+      '?', /* U+4538 */
+      '?', /* U+4539 */
+      '?', /* U+453A */
+      '?', /* U+453B */
+      '?', /* U+453C */
+      '?', /* U+453D */
+      '?', /* U+453E */
+      '?', /* U+453F */
+      '?', /* U+4540 */
+      '?', /* U+4541 */
+      '?', /* U+4542 */
+      '?', /* U+4543 */
+      '?', /* U+4544 */
+      '?', /* U+4545 */
+      '?', /* U+4546 */
+      '?', /* U+4547 */
+      '?', /* U+4548 */
+      '?', /* U+4549 */
+      '?', /* U+454A */
+      '?', /* U+454B */
+      '?', /* U+454C */
+      '?', /* U+454D */
+      '?', /* U+454E */
+      '?', /* U+454F */
+      '?', /* U+4550 */
+      '?', /* U+4551 */
+      '?', /* U+4552 */
+      '?', /* U+4553 */
+      '?', /* U+4554 */
+      '?', /* U+4555 */
+      '?', /* U+4556 */
+      '?', /* U+4557 */
+      '?', /* U+4558 */
+      '?', /* U+4559 */
+      '?', /* U+455A */
+      '?', /* U+455B */
+      '?', /* U+455C */
+      '?', /* U+455D */
+      '?', /* U+455E */
+      '?', /* U+455F */
+      '?', /* U+4560 */
+      '?', /* U+4561 */
+      '?', /* U+4562 */
+      '?', /* U+4563 */
+      '?', /* U+4564 */
+      '?', /* U+4565 */
+      '?', /* U+4566 */
+      '?', /* U+4567 */
+      '?', /* U+4568 */
+      '?', /* U+4569 */
+      '?', /* U+456A */
+      '?', /* U+456B */
+      '?', /* U+456C */
+      '?', /* U+456D */
+      '?', /* U+456E */
+      '?', /* U+456F */
+      '?', /* U+4570 */
+      '?', /* U+4571 */
+      '?', /* U+4572 */
+      '?', /* U+4573 */
+      '?', /* U+4574 */
+      '?', /* U+4575 */
+      '?', /* U+4576 */
+      '?', /* U+4577 */
+      '?', /* U+4578 */
+      '?', /* U+4579 */
+      '?', /* U+457A */
+      '?', /* U+457B */
+      '?', /* U+457C */
+      '?', /* U+457D */
+      '?', /* U+457E */
+      '?', /* U+457F */
+      '?', /* U+4580 */
+      '?', /* U+4581 */
+      '?', /* U+4582 */
+      '?', /* U+4583 */
+      '?', /* U+4584 */
+      '?', /* U+4585 */
+      '?', /* U+4586 */
+      '?', /* U+4587 */
+      '?', /* U+4588 */
+      '?', /* U+4589 */
+      '?', /* U+458A */
+      '?', /* U+458B */
+      '?', /* U+458C */
+      '?', /* U+458D */
+      '?', /* U+458E */
+      '?', /* U+458F */
+      '?', /* U+4590 */
+      '?', /* U+4591 */
+      '?', /* U+4592 */
+      '?', /* U+4593 */
+      '?', /* U+4594 */
+      '?', /* U+4595 */
+      '?', /* U+4596 */
+      '?', /* U+4597 */
+      '?', /* U+4598 */
+      '?', /* U+4599 */
+      '?', /* U+459A */
+      '?', /* U+459B */
+      '?', /* U+459C */
+      '?', /* U+459D */
+      '?', /* U+459E */
+      '?', /* U+459F */
+      '?', /* U+45A0 */
+      '?', /* U+45A1 */
+      '?', /* U+45A2 */
+      '?', /* U+45A3 */
+      '?', /* U+45A4 */
+      '?', /* U+45A5 */
+      '?', /* U+45A6 */
+      '?', /* U+45A7 */
+      '?', /* U+45A8 */
+      '?', /* U+45A9 */
+      '?', /* U+45AA */
+      '?', /* U+45AB */
+      '?', /* U+45AC */
+      '?', /* U+45AD */
+      '?', /* U+45AE */
+      '?', /* U+45AF */
+      '?', /* U+45B0 */
+      '?', /* U+45B1 */
+      '?', /* U+45B2 */
+      '?', /* U+45B3 */
+      '?', /* U+45B4 */
+      '?', /* U+45B5 */
+      '?', /* U+45B6 */
+      '?', /* U+45B7 */
+      '?', /* U+45B8 */
+      '?', /* U+45B9 */
+      '?', /* U+45BA */
+      '?', /* U+45BB */
+      '?', /* U+45BC */
+      '?', /* U+45BD */
+      '?', /* U+45BE */
+      '?', /* U+45BF */
+      '?', /* U+45C0 */
+      '?', /* U+45C1 */
+      '?', /* U+45C2 */
+      '?', /* U+45C3 */
+      '?', /* U+45C4 */
+      '?', /* U+45C5 */
+      '?', /* U+45C6 */
+      '?', /* U+45C7 */
+      '?', /* U+45C8 */
+      '?', /* U+45C9 */
+      '?', /* U+45CA */
+      '?', /* U+45CB */
+      '?', /* U+45CC */
+      '?', /* U+45CD */
+      '?', /* U+45CE */
+      '?', /* U+45CF */
+      '?', /* U+45D0 */
+      '?', /* U+45D1 */
+      '?', /* U+45D2 */
+      '?', /* U+45D3 */
+      '?', /* U+45D4 */
+      '?', /* U+45D5 */
+      '?', /* U+45D6 */
+      '?', /* U+45D7 */
+      '?', /* U+45D8 */
+      '?', /* U+45D9 */
+      '?', /* U+45DA */
+      '?', /* U+45DB */
+      '?', /* U+45DC */
+      '?', /* U+45DD */
+      '?', /* U+45DE */
+      '?', /* U+45DF */
+      '?', /* U+45E0 */
+      '?', /* U+45E1 */
+      '?', /* U+45E2 */
+      '?', /* U+45E3 */
+      '?', /* U+45E4 */
+      '?', /* U+45E5 */
+      '?', /* U+45E6 */
+      '?', /* U+45E7 */
+      '?', /* U+45E8 */
+      '?', /* U+45E9 */
+      '?', /* U+45EA */
+      '?', /* U+45EB */
+      '?', /* U+45EC */
+      '?', /* U+45ED */
+      '?', /* U+45EE */
+      '?', /* U+45EF */
+      '?', /* U+45F0 */
+      '?', /* U+45F1 */
+      '?', /* U+45F2 */
+      '?', /* U+45F3 */
+      '?', /* U+45F4 */
+      '?', /* U+45F5 */
+      '?', /* U+45F6 */
+      '?', /* U+45F7 */
+      '?', /* U+45F8 */
+      '?', /* U+45F9 */
+      '?', /* U+45FA */
+      '?', /* U+45FB */
+      '?', /* U+45FC */
+      '?', /* U+45FD */
+      '?', /* U+45FE */
+      '?', /* U+45FF */
+      '?', /* U+4600 */
+      '?', /* U+4601 */
+      '?', /* U+4602 */
+      '?', /* U+4603 */
+      '?', /* U+4604 */
+      '?', /* U+4605 */
+      '?', /* U+4606 */
+      '?', /* U+4607 */
+      '?', /* U+4608 */
+      '?', /* U+4609 */
+      '?', /* U+460A */
+      '?', /* U+460B */
+      '?', /* U+460C */
+      '?', /* U+460D */
+      '?', /* U+460E */
+      '?', /* U+460F */
+      '?', /* U+4610 */
+      '?', /* U+4611 */
+      '?', /* U+4612 */
+      '?', /* U+4613 */
+      '?', /* U+4614 */
+      '?', /* U+4615 */
+      '?', /* U+4616 */
+      '?', /* U+4617 */
+      '?', /* U+4618 */
+      '?', /* U+4619 */
+      '?', /* U+461A */
+      '?', /* U+461B */
+      '?', /* U+461C */
+      '?', /* U+461D */
+      '?', /* U+461E */
+      '?', /* U+461F */
+      '?', /* U+4620 */
+      '?', /* U+4621 */
+      '?', /* U+4622 */
+      '?', /* U+4623 */
+      '?', /* U+4624 */
+      '?', /* U+4625 */
+      '?', /* U+4626 */
+      '?', /* U+4627 */
+      '?', /* U+4628 */
+      '?', /* U+4629 */
+      '?', /* U+462A */
+      '?', /* U+462B */
+      '?', /* U+462C */
+      '?', /* U+462D */
+      '?', /* U+462E */
+      '?', /* U+462F */
+      '?', /* U+4630 */
+      '?', /* U+4631 */
+      '?', /* U+4632 */
+      '?', /* U+4633 */
+      '?', /* U+4634 */
+      '?', /* U+4635 */
+      '?', /* U+4636 */
+      '?', /* U+4637 */
+      '?', /* U+4638 */
+      '?', /* U+4639 */
+      '?', /* U+463A */
+      '?', /* U+463B */
+      '?', /* U+463C */
+      '?', /* U+463D */
+      '?', /* U+463E */
+      '?', /* U+463F */
+      '?', /* U+4640 */
+      '?', /* U+4641 */
+      '?', /* U+4642 */
+      '?', /* U+4643 */
+      '?', /* U+4644 */
+      '?', /* U+4645 */
+      '?', /* U+4646 */
+      '?', /* U+4647 */
+      '?', /* U+4648 */
+      '?', /* U+4649 */
+      '?', /* U+464A */
+      '?', /* U+464B */
+      '?', /* U+464C */
+      '?', /* U+464D */
+      '?', /* U+464E */
+      '?', /* U+464F */
+      '?', /* U+4650 */
+      '?', /* U+4651 */
+      '?', /* U+4652 */
+      '?', /* U+4653 */
+      '?', /* U+4654 */
+      '?', /* U+4655 */
+      '?', /* U+4656 */
+      '?', /* U+4657 */
+      '?', /* U+4658 */
+      '?', /* U+4659 */
+      '?', /* U+465A */
+      '?', /* U+465B */
+      '?', /* U+465C */
+      '?', /* U+465D */
+      '?', /* U+465E */
+      '?', /* U+465F */
+      '?', /* U+4660 */
+      '?', /* U+4661 */
+      '?', /* U+4662 */
+      '?', /* U+4663 */
+      '?', /* U+4664 */
+      '?', /* U+4665 */
+      '?', /* U+4666 */
+      '?', /* U+4667 */
+      '?', /* U+4668 */
+      '?', /* U+4669 */
+      '?', /* U+466A */
+      '?', /* U+466B */
+      '?', /* U+466C */
+      '?', /* U+466D */
+      '?', /* U+466E */
+      '?', /* U+466F */
+      '?', /* U+4670 */
+      '?', /* U+4671 */
+      '?', /* U+4672 */
+      '?', /* U+4673 */
+      '?', /* U+4674 */
+      '?', /* U+4675 */
+      '?', /* U+4676 */
+      '?', /* U+4677 */
+      '?', /* U+4678 */
+      '?', /* U+4679 */
+      '?', /* U+467A */
+      '?', /* U+467B */
+      '?', /* U+467C */
+      '?', /* U+467D */
+      '?', /* U+467E */
+      '?', /* U+467F */
+      '?', /* U+4680 */
+      '?', /* U+4681 */
+      '?', /* U+4682 */
+      '?', /* U+4683 */
+      '?', /* U+4684 */
+      '?', /* U+4685 */
+      '?', /* U+4686 */
+      '?', /* U+4687 */
+      '?', /* U+4688 */
+      '?', /* U+4689 */
+      '?', /* U+468A */
+      '?', /* U+468B */
+      '?', /* U+468C */
+      '?', /* U+468D */
+      '?', /* U+468E */
+      '?', /* U+468F */
+      '?', /* U+4690 */
+      '?', /* U+4691 */
+      '?', /* U+4692 */
+      '?', /* U+4693 */
+      '?', /* U+4694 */
+      '?', /* U+4695 */
+      '?', /* U+4696 */
+      '?', /* U+4697 */
+      '?', /* U+4698 */
+      '?', /* U+4699 */
+      '?', /* U+469A */
+      '?', /* U+469B */
+      '?', /* U+469C */
+      '?', /* U+469D */
+      '?', /* U+469E */
+      '?', /* U+469F */
+      '?', /* U+46A0 */
+      '?', /* U+46A1 */
+      '?', /* U+46A2 */
+      '?', /* U+46A3 */
+      '?', /* U+46A4 */
+      '?', /* U+46A5 */
+      '?', /* U+46A6 */
+      '?', /* U+46A7 */
+      '?', /* U+46A8 */
+      '?', /* U+46A9 */
+      '?', /* U+46AA */
+      '?', /* U+46AB */
+      '?', /* U+46AC */
+      '?', /* U+46AD */
+      '?', /* U+46AE */
+      '?', /* U+46AF */
+      '?', /* U+46B0 */
+      '?', /* U+46B1 */
+      '?', /* U+46B2 */
+      '?', /* U+46B3 */
+      '?', /* U+46B4 */
+      '?', /* U+46B5 */
+      '?', /* U+46B6 */
+      '?', /* U+46B7 */
+      '?', /* U+46B8 */
+      '?', /* U+46B9 */
+      '?', /* U+46BA */
+      '?', /* U+46BB */
+      '?', /* U+46BC */
+      '?', /* U+46BD */
+      '?', /* U+46BE */
+      '?', /* U+46BF */
+      '?', /* U+46C0 */
+      '?', /* U+46C1 */
+      '?', /* U+46C2 */
+      '?', /* U+46C3 */
+      '?', /* U+46C4 */
+      '?', /* U+46C5 */
+      '?', /* U+46C6 */
+      '?', /* U+46C7 */
+      '?', /* U+46C8 */
+      '?', /* U+46C9 */
+      '?', /* U+46CA */
+      '?', /* U+46CB */
+      '?', /* U+46CC */
+      '?', /* U+46CD */
+      '?', /* U+46CE */
+      '?', /* U+46CF */
+      '?', /* U+46D0 */
+      '?', /* U+46D1 */
+      '?', /* U+46D2 */
+      '?', /* U+46D3 */
+      '?', /* U+46D4 */
+      '?', /* U+46D5 */
+      '?', /* U+46D6 */
+      '?', /* U+46D7 */
+      '?', /* U+46D8 */
+      '?', /* U+46D9 */
+      '?', /* U+46DA */
+      '?', /* U+46DB */
+      '?', /* U+46DC */
+      '?', /* U+46DD */
+      '?', /* U+46DE */
+      '?', /* U+46DF */
+      '?', /* U+46E0 */
+      '?', /* U+46E1 */
+      '?', /* U+46E2 */
+      '?', /* U+46E3 */
+      '?', /* U+46E4 */
+      '?', /* U+46E5 */
+      '?', /* U+46E6 */
+      '?', /* U+46E7 */
+      '?', /* U+46E8 */
+      '?', /* U+46E9 */
+      '?', /* U+46EA */
+      '?', /* U+46EB */
+      '?', /* U+46EC */
+      '?', /* U+46ED */
+      '?', /* U+46EE */
+      '?', /* U+46EF */
+      '?', /* U+46F0 */
+      '?', /* U+46F1 */
+      '?', /* U+46F2 */
+      '?', /* U+46F3 */
+      '?', /* U+46F4 */
+      '?', /* U+46F5 */
+      '?', /* U+46F6 */
+      '?', /* U+46F7 */
+      '?', /* U+46F8 */
+      '?', /* U+46F9 */
+      '?', /* U+46FA */
+      '?', /* U+46FB */
+      '?', /* U+46FC */
+      '?', /* U+46FD */
+      '?', /* U+46FE */
+      '?', /* U+46FF */
+      '?', /* U+4700 */
+      '?', /* U+4701 */
+      '?', /* U+4702 */
+      '?', /* U+4703 */
+      '?', /* U+4704 */
+      '?', /* U+4705 */
+      '?', /* U+4706 */
+      '?', /* U+4707 */
+      '?', /* U+4708 */
+      '?', /* U+4709 */
+      '?', /* U+470A */
+      '?', /* U+470B */
+      '?', /* U+470C */
+      '?', /* U+470D */
+      '?', /* U+470E */
+      '?', /* U+470F */
+      '?', /* U+4710 */
+      '?', /* U+4711 */
+      '?', /* U+4712 */
+      '?', /* U+4713 */
+      '?', /* U+4714 */
+      '?', /* U+4715 */
+      '?', /* U+4716 */
+      '?', /* U+4717 */
+      '?', /* U+4718 */
+      '?', /* U+4719 */
+      '?', /* U+471A */
+      '?', /* U+471B */
+      '?', /* U+471C */
+      '?', /* U+471D */
+      '?', /* U+471E */
+      '?', /* U+471F */
+      '?', /* U+4720 */
+      '?', /* U+4721 */
+      '?', /* U+4722 */
+      '?', /* U+4723 */
+      '?', /* U+4724 */
+      '?', /* U+4725 */
+      '?', /* U+4726 */
+      '?', /* U+4727 */
+      '?', /* U+4728 */
+      '?', /* U+4729 */
+      '?', /* U+472A */
+      '?', /* U+472B */
+      '?', /* U+472C */
+      '?', /* U+472D */
+      '?', /* U+472E */
+      '?', /* U+472F */
+      '?', /* U+4730 */
+      '?', /* U+4731 */
+      '?', /* U+4732 */
+      '?', /* U+4733 */
+      '?', /* U+4734 */
+      '?', /* U+4735 */
+      '?', /* U+4736 */
+      '?', /* U+4737 */
+      '?', /* U+4738 */
+      '?', /* U+4739 */
+      '?', /* U+473A */
+      '?', /* U+473B */
+      '?', /* U+473C */
+      '?', /* U+473D */
+      '?', /* U+473E */
+      '?', /* U+473F */
+      '?', /* U+4740 */
+      '?', /* U+4741 */
+      '?', /* U+4742 */
+      '?', /* U+4743 */
+      '?', /* U+4744 */
+      '?', /* U+4745 */
+      '?', /* U+4746 */
+      '?', /* U+4747 */
+      '?', /* U+4748 */
+      '?', /* U+4749 */
+      '?', /* U+474A */
+      '?', /* U+474B */
+      '?', /* U+474C */
+      '?', /* U+474D */
+      '?', /* U+474E */
+      '?', /* U+474F */
+      '?', /* U+4750 */
+      '?', /* U+4751 */
+      '?', /* U+4752 */
+      '?', /* U+4753 */
+      '?', /* U+4754 */
+      '?', /* U+4755 */
+      '?', /* U+4756 */
+      '?', /* U+4757 */
+      '?', /* U+4758 */
+      '?', /* U+4759 */
+      '?', /* U+475A */
+      '?', /* U+475B */
+      '?', /* U+475C */
+      '?', /* U+475D */
+      '?', /* U+475E */
+      '?', /* U+475F */
+      '?', /* U+4760 */
+      '?', /* U+4761 */
+      '?', /* U+4762 */
+      '?', /* U+4763 */
+      '?', /* U+4764 */
+      '?', /* U+4765 */
+      '?', /* U+4766 */
+      '?', /* U+4767 */
+      '?', /* U+4768 */
+      '?', /* U+4769 */
+      '?', /* U+476A */
+      '?', /* U+476B */
+      '?', /* U+476C */
+      '?', /* U+476D */
+      '?', /* U+476E */
+      '?', /* U+476F */
+      '?', /* U+4770 */
+      '?', /* U+4771 */
+      '?', /* U+4772 */
+      '?', /* U+4773 */
+      '?', /* U+4774 */
+      '?', /* U+4775 */
+      '?', /* U+4776 */
+      '?', /* U+4777 */
+      '?', /* U+4778 */
+      '?', /* U+4779 */
+      '?', /* U+477A */
+      '?', /* U+477B */
+      '?', /* U+477C */
+      '?', /* U+477D */
+      '?', /* U+477E */
+      '?', /* U+477F */
+      '?', /* U+4780 */
+      '?', /* U+4781 */
+      '?', /* U+4782 */
+      '?', /* U+4783 */
+      '?', /* U+4784 */
+      '?', /* U+4785 */
+      '?', /* U+4786 */
+      '?', /* U+4787 */
+      '?', /* U+4788 */
+      '?', /* U+4789 */
+      '?', /* U+478A */
+      '?', /* U+478B */
+      '?', /* U+478C */
+      '?', /* U+478D */
+      '?', /* U+478E */
+      '?', /* U+478F */
+      '?', /* U+4790 */
+      '?', /* U+4791 */
+      '?', /* U+4792 */
+      '?', /* U+4793 */
+      '?', /* U+4794 */
+      '?', /* U+4795 */
+      '?', /* U+4796 */
+      '?', /* U+4797 */
+      '?', /* U+4798 */
+      '?', /* U+4799 */
+      '?', /* U+479A */
+      '?', /* U+479B */
+      '?', /* U+479C */
+      '?', /* U+479D */
+      '?', /* U+479E */
+      '?', /* U+479F */
+      '?', /* U+47A0 */
+      '?', /* U+47A1 */
+      '?', /* U+47A2 */
+      '?', /* U+47A3 */
+      '?', /* U+47A4 */
+      '?', /* U+47A5 */
+      '?', /* U+47A6 */
+      '?', /* U+47A7 */
+      '?', /* U+47A8 */
+      '?', /* U+47A9 */
+      '?', /* U+47AA */
+      '?', /* U+47AB */
+      '?', /* U+47AC */
+      '?', /* U+47AD */
+      '?', /* U+47AE */
+      '?', /* U+47AF */
+      '?', /* U+47B0 */
+      '?', /* U+47B1 */
+      '?', /* U+47B2 */
+      '?', /* U+47B3 */
+      '?', /* U+47B4 */
+      '?', /* U+47B5 */
+      '?', /* U+47B6 */
+      '?', /* U+47B7 */
+      '?', /* U+47B8 */
+      '?', /* U+47B9 */
+      '?', /* U+47BA */
+      '?', /* U+47BB */
+      '?', /* U+47BC */
+      '?', /* U+47BD */
+      '?', /* U+47BE */
+      '?', /* U+47BF */
+      '?', /* U+47C0 */
+      '?', /* U+47C1 */
+      '?', /* U+47C2 */
+      '?', /* U+47C3 */
+      '?', /* U+47C4 */
+      '?', /* U+47C5 */
+      '?', /* U+47C6 */
+      '?', /* U+47C7 */
+      '?', /* U+47C8 */
+      '?', /* U+47C9 */
+      '?', /* U+47CA */
+      '?', /* U+47CB */
+      '?', /* U+47CC */
+      '?', /* U+47CD */
+      '?', /* U+47CE */
+      '?', /* U+47CF */
+      '?', /* U+47D0 */
+      '?', /* U+47D1 */
+      '?', /* U+47D2 */
+      '?', /* U+47D3 */
+      '?', /* U+47D4 */
+      '?', /* U+47D5 */
+      '?', /* U+47D6 */
+      '?', /* U+47D7 */
+      '?', /* U+47D8 */
+      '?', /* U+47D9 */
+      '?', /* U+47DA */
+      '?', /* U+47DB */
+      '?', /* U+47DC */
+      '?', /* U+47DD */
+      '?', /* U+47DE */
+      '?', /* U+47DF */
+      '?', /* U+47E0 */
+      '?', /* U+47E1 */
+      '?', /* U+47E2 */
+      '?', /* U+47E3 */
+      '?', /* U+47E4 */
+      '?', /* U+47E5 */
+      '?', /* U+47E6 */
+      '?', /* U+47E7 */
+      '?', /* U+47E8 */
+      '?', /* U+47E9 */
+      '?', /* U+47EA */
+      '?', /* U+47EB */
+      '?', /* U+47EC */
+      '?', /* U+47ED */
+      '?', /* U+47EE */
+      '?', /* U+47EF */
+      '?', /* U+47F0 */
+      '?', /* U+47F1 */
+      '?', /* U+47F2 */
+      '?', /* U+47F3 */
+      '?', /* U+47F4 */
+      '?', /* U+47F5 */
+      '?', /* U+47F6 */
+      '?', /* U+47F7 */
+      '?', /* U+47F8 */
+      '?', /* U+47F9 */
+      '?', /* U+47FA */
+      '?', /* U+47FB */
+      '?', /* U+47FC */
+      '?', /* U+47FD */
+      '?', /* U+47FE */
+      '?', /* U+47FF */
+      '?', /* U+4800 */
+      '?', /* U+4801 */
+      '?', /* U+4802 */
+      '?', /* U+4803 */
+      '?', /* U+4804 */
+      '?', /* U+4805 */
+      '?', /* U+4806 */
+      '?', /* U+4807 */
+      '?', /* U+4808 */
+      '?', /* U+4809 */
+      '?', /* U+480A */
+      '?', /* U+480B */
+      '?', /* U+480C */
+      '?', /* U+480D */
+      '?', /* U+480E */
+      '?', /* U+480F */
+      '?', /* U+4810 */
+      '?', /* U+4811 */
+      '?', /* U+4812 */
+      '?', /* U+4813 */
+      '?', /* U+4814 */
+      '?', /* U+4815 */
+      '?', /* U+4816 */
+      '?', /* U+4817 */
+      '?', /* U+4818 */
+      '?', /* U+4819 */
+      '?', /* U+481A */
+      '?', /* U+481B */
+      '?', /* U+481C */
+      '?', /* U+481D */
+      '?', /* U+481E */
+      '?', /* U+481F */
+      '?', /* U+4820 */
+      '?', /* U+4821 */
+      '?', /* U+4822 */
+      '?', /* U+4823 */
+      '?', /* U+4824 */
+      '?', /* U+4825 */
+      '?', /* U+4826 */
+      '?', /* U+4827 */
+      '?', /* U+4828 */
+      '?', /* U+4829 */
+      '?', /* U+482A */
+      '?', /* U+482B */
+      '?', /* U+482C */
+      '?', /* U+482D */
+      '?', /* U+482E */
+      '?', /* U+482F */
+      '?', /* U+4830 */
+      '?', /* U+4831 */
+      '?', /* U+4832 */
+      '?', /* U+4833 */
+      '?', /* U+4834 */
+      '?', /* U+4835 */
+      '?', /* U+4836 */
+      '?', /* U+4837 */
+      '?', /* U+4838 */
+      '?', /* U+4839 */
+      '?', /* U+483A */
+      '?', /* U+483B */
+      '?', /* U+483C */
+      '?', /* U+483D */
+      '?', /* U+483E */
+      '?', /* U+483F */
+      '?', /* U+4840 */
+      '?', /* U+4841 */
+      '?', /* U+4842 */
+      '?', /* U+4843 */
+      '?', /* U+4844 */
+      '?', /* U+4845 */
+      '?', /* U+4846 */
+      '?', /* U+4847 */
+      '?', /* U+4848 */
+      '?', /* U+4849 */
+      '?', /* U+484A */
+      '?', /* U+484B */
+      '?', /* U+484C */
+      '?', /* U+484D */
+      '?', /* U+484E */
+      '?', /* U+484F */
+      '?', /* U+4850 */
+      '?', /* U+4851 */
+      '?', /* U+4852 */
+      '?', /* U+4853 */
+      '?', /* U+4854 */
+      '?', /* U+4855 */
+      '?', /* U+4856 */
+      '?', /* U+4857 */
+      '?', /* U+4858 */
+      '?', /* U+4859 */
+      '?', /* U+485A */
+      '?', /* U+485B */
+      '?', /* U+485C */
+      '?', /* U+485D */
+      '?', /* U+485E */
+      '?', /* U+485F */
+      '?', /* U+4860 */
+      '?', /* U+4861 */
+      '?', /* U+4862 */
+      '?', /* U+4863 */
+      '?', /* U+4864 */
+      '?', /* U+4865 */
+      '?', /* U+4866 */
+      '?', /* U+4867 */
+      '?', /* U+4868 */
+      '?', /* U+4869 */
+      '?', /* U+486A */
+      '?', /* U+486B */
+      '?', /* U+486C */
+      '?', /* U+486D */
+      '?', /* U+486E */
+      '?', /* U+486F */
+      '?', /* U+4870 */
+      '?', /* U+4871 */
+      '?', /* U+4872 */
+      '?', /* U+4873 */
+      '?', /* U+4874 */
+      '?', /* U+4875 */
+      '?', /* U+4876 */
+      '?', /* U+4877 */
+      '?', /* U+4878 */
+      '?', /* U+4879 */
+      '?', /* U+487A */
+      '?', /* U+487B */
+      '?', /* U+487C */
+      '?', /* U+487D */
+      '?', /* U+487E */
+      '?', /* U+487F */
+      '?', /* U+4880 */
+      '?', /* U+4881 */
+      '?', /* U+4882 */
+      '?', /* U+4883 */
+      '?', /* U+4884 */
+      '?', /* U+4885 */
+      '?', /* U+4886 */
+      '?', /* U+4887 */
+      '?', /* U+4888 */
+      '?', /* U+4889 */
+      '?', /* U+488A */
+      '?', /* U+488B */
+      '?', /* U+488C */
+      '?', /* U+488D */
+      '?', /* U+488E */
+      '?', /* U+488F */
+      '?', /* U+4890 */
+      '?', /* U+4891 */
+      '?', /* U+4892 */
+      '?', /* U+4893 */
+      '?', /* U+4894 */
+      '?', /* U+4895 */
+      '?', /* U+4896 */
+      '?', /* U+4897 */
+      '?', /* U+4898 */
+      '?', /* U+4899 */
+      '?', /* U+489A */
+      '?', /* U+489B */
+      '?', /* U+489C */
+      '?', /* U+489D */
+      '?', /* U+489E */
+      '?', /* U+489F */
+      '?', /* U+48A0 */
+      '?', /* U+48A1 */
+      '?', /* U+48A2 */
+      '?', /* U+48A3 */
+      '?', /* U+48A4 */
+      '?', /* U+48A5 */
+      '?', /* U+48A6 */
+      '?', /* U+48A7 */
+      '?', /* U+48A8 */
+      '?', /* U+48A9 */
+      '?', /* U+48AA */
+      '?', /* U+48AB */
+      '?', /* U+48AC */
+      '?', /* U+48AD */
+      '?', /* U+48AE */
+      '?', /* U+48AF */
+      '?', /* U+48B0 */
+      '?', /* U+48B1 */
+      '?', /* U+48B2 */
+      '?', /* U+48B3 */
+      '?', /* U+48B4 */
+      '?', /* U+48B5 */
+      '?', /* U+48B6 */
+      '?', /* U+48B7 */
+      '?', /* U+48B8 */
+      '?', /* U+48B9 */
+      '?', /* U+48BA */
+      '?', /* U+48BB */
+      '?', /* U+48BC */
+      '?', /* U+48BD */
+      '?', /* U+48BE */
+      '?', /* U+48BF */
+      '?', /* U+48C0 */
+      '?', /* U+48C1 */
+      '?', /* U+48C2 */
+      '?', /* U+48C3 */
+      '?', /* U+48C4 */
+      '?', /* U+48C5 */
+      '?', /* U+48C6 */
+      '?', /* U+48C7 */
+      '?', /* U+48C8 */
+      '?', /* U+48C9 */
+      '?', /* U+48CA */
+      '?', /* U+48CB */
+      '?', /* U+48CC */
+      '?', /* U+48CD */
+      '?', /* U+48CE */
+      '?', /* U+48CF */
+      '?', /* U+48D0 */
+      '?', /* U+48D1 */
+      '?', /* U+48D2 */
+      '?', /* U+48D3 */
+      '?', /* U+48D4 */
+      '?', /* U+48D5 */
+      '?', /* U+48D6 */
+      '?', /* U+48D7 */
+      '?', /* U+48D8 */
+      '?', /* U+48D9 */
+      '?', /* U+48DA */
+      '?', /* U+48DB */
+      '?', /* U+48DC */
+      '?', /* U+48DD */
+      '?', /* U+48DE */
+      '?', /* U+48DF */
+      '?', /* U+48E0 */
+      '?', /* U+48E1 */
+      '?', /* U+48E2 */
+      '?', /* U+48E3 */
+      '?', /* U+48E4 */
+      '?', /* U+48E5 */
+      '?', /* U+48E6 */
+      '?', /* U+48E7 */
+      '?', /* U+48E8 */
+      '?', /* U+48E9 */
+      '?', /* U+48EA */
+      '?', /* U+48EB */
+      '?', /* U+48EC */
+      '?', /* U+48ED */
+      '?', /* U+48EE */
+      '?', /* U+48EF */
+      '?', /* U+48F0 */
+      '?', /* U+48F1 */
+      '?', /* U+48F2 */
+      '?', /* U+48F3 */
+      '?', /* U+48F4 */
+      '?', /* U+48F5 */
+      '?', /* U+48F6 */
+      '?', /* U+48F7 */
+      '?', /* U+48F8 */
+      '?', /* U+48F9 */
+      '?', /* U+48FA */
+      '?', /* U+48FB */
+      '?', /* U+48FC */
+      '?', /* U+48FD */
+      '?', /* U+48FE */
+      '?', /* U+48FF */
+      '?', /* U+4900 */
+      '?', /* U+4901 */
+      '?', /* U+4902 */
+      '?', /* U+4903 */
+      '?', /* U+4904 */
+      '?', /* U+4905 */
+      '?', /* U+4906 */
+      '?', /* U+4907 */
+      '?', /* U+4908 */
+      '?', /* U+4909 */
+      '?', /* U+490A */
+      '?', /* U+490B */
+      '?', /* U+490C */
+      '?', /* U+490D */
+      '?', /* U+490E */
+      '?', /* U+490F */
+      '?', /* U+4910 */
+      '?', /* U+4911 */
+      '?', /* U+4912 */
+      '?', /* U+4913 */
+      '?', /* U+4914 */
+      '?', /* U+4915 */
+      '?', /* U+4916 */
+      '?', /* U+4917 */
+      '?', /* U+4918 */
+      '?', /* U+4919 */
+      '?', /* U+491A */
+      '?', /* U+491B */
+      '?', /* U+491C */
+      '?', /* U+491D */
+      '?', /* U+491E */
+      '?', /* U+491F */
+      '?', /* U+4920 */
+      '?', /* U+4921 */
+      '?', /* U+4922 */
+      '?', /* U+4923 */
+      '?', /* U+4924 */
+      '?', /* U+4925 */
+      '?', /* U+4926 */
+      '?', /* U+4927 */
+      '?', /* U+4928 */
+      '?', /* U+4929 */
+      '?', /* U+492A */
+      '?', /* U+492B */
+      '?', /* U+492C */
+      '?', /* U+492D */
+      '?', /* U+492E */
+      '?', /* U+492F */
+      '?', /* U+4930 */
+      '?', /* U+4931 */
+      '?', /* U+4932 */
+      '?', /* U+4933 */
+      '?', /* U+4934 */
+      '?', /* U+4935 */
+      '?', /* U+4936 */
+      '?', /* U+4937 */
+      '?', /* U+4938 */
+      '?', /* U+4939 */
+      '?', /* U+493A */
+      '?', /* U+493B */
+      '?', /* U+493C */
+      '?', /* U+493D */
+      '?', /* U+493E */
+      '?', /* U+493F */
+      '?', /* U+4940 */
+      '?', /* U+4941 */
+      '?', /* U+4942 */
+      '?', /* U+4943 */
+      '?', /* U+4944 */
+      '?', /* U+4945 */
+      '?', /* U+4946 */
+      '?', /* U+4947 */
+      '?', /* U+4948 */
+      '?', /* U+4949 */
+      '?', /* U+494A */
+      '?', /* U+494B */
+      '?', /* U+494C */
+      '?', /* U+494D */
+      '?', /* U+494E */
+      '?', /* U+494F */
+      '?', /* U+4950 */
+      '?', /* U+4951 */
+      '?', /* U+4952 */
+      '?', /* U+4953 */
+      '?', /* U+4954 */
+      '?', /* U+4955 */
+      '?', /* U+4956 */
+      '?', /* U+4957 */
+      '?', /* U+4958 */
+      '?', /* U+4959 */
+      '?', /* U+495A */
+      '?', /* U+495B */
+      '?', /* U+495C */
+      '?', /* U+495D */
+      '?', /* U+495E */
+      '?', /* U+495F */
+      '?', /* U+4960 */
+      '?', /* U+4961 */
+      '?', /* U+4962 */
+      '?', /* U+4963 */
+      '?', /* U+4964 */
+      '?', /* U+4965 */
+      '?', /* U+4966 */
+      '?', /* U+4967 */
+      '?', /* U+4968 */
+      '?', /* U+4969 */
+      '?', /* U+496A */
+      '?', /* U+496B */
+      '?', /* U+496C */
+      '?', /* U+496D */
+      '?', /* U+496E */
+      '?', /* U+496F */
+      '?', /* U+4970 */
+      '?', /* U+4971 */
+      '?', /* U+4972 */
+      '?', /* U+4973 */
+      '?', /* U+4974 */
+      '?', /* U+4975 */
+      '?', /* U+4976 */
+      '?', /* U+4977 */
+      '?', /* U+4978 */
+      '?', /* U+4979 */
+      '?', /* U+497A */
+      '?', /* U+497B */
+      '?', /* U+497C */
+      '?', /* U+497D */
+      '?', /* U+497E */
+      '?', /* U+497F */
+      '?', /* U+4980 */
+      '?', /* U+4981 */
+      '?', /* U+4982 */
+      '?', /* U+4983 */
+      '?', /* U+4984 */
+      '?', /* U+4985 */
+      '?', /* U+4986 */
+      '?', /* U+4987 */
+      '?', /* U+4988 */
+      '?', /* U+4989 */
+      '?', /* U+498A */
+      '?', /* U+498B */
+      '?', /* U+498C */
+      '?', /* U+498D */
+      '?', /* U+498E */
+      '?', /* U+498F */
+      '?', /* U+4990 */
+      '?', /* U+4991 */
+      '?', /* U+4992 */
+      '?', /* U+4993 */
+      '?', /* U+4994 */
+      '?', /* U+4995 */
+      '?', /* U+4996 */
+      '?', /* U+4997 */
+      '?', /* U+4998 */
+      '?', /* U+4999 */
+      '?', /* U+499A */
+      '?', /* U+499B */
+      '?', /* U+499C */
+      '?', /* U+499D */
+      '?', /* U+499E */
+      '?', /* U+499F */
+      '?', /* U+49A0 */
+      '?', /* U+49A1 */
+      '?', /* U+49A2 */
+      '?', /* U+49A3 */
+      '?', /* U+49A4 */
+      '?', /* U+49A5 */
+      '?', /* U+49A6 */
+      '?', /* U+49A7 */
+      '?', /* U+49A8 */
+      '?', /* U+49A9 */
+      '?', /* U+49AA */
+      '?', /* U+49AB */
+      '?', /* U+49AC */
+      '?', /* U+49AD */
+      '?', /* U+49AE */
+      '?', /* U+49AF */
+      '?', /* U+49B0 */
+      '?', /* U+49B1 */
+      '?', /* U+49B2 */
+      '?', /* U+49B3 */
+      '?', /* U+49B4 */
+      '?', /* U+49B5 */
+      '?', /* U+49B6 */
+      '?', /* U+49B7 */
+      '?', /* U+49B8 */
+      '?', /* U+49B9 */
+      '?', /* U+49BA */
+      '?', /* U+49BB */
+      '?', /* U+49BC */
+      '?', /* U+49BD */
+      '?', /* U+49BE */
+      '?', /* U+49BF */
+      '?', /* U+49C0 */
+      '?', /* U+49C1 */
+      '?', /* U+49C2 */
+      '?', /* U+49C3 */
+      '?', /* U+49C4 */
+      '?', /* U+49C5 */
+      '?', /* U+49C6 */
+      '?', /* U+49C7 */
+      '?', /* U+49C8 */
+      '?', /* U+49C9 */
+      '?', /* U+49CA */
+      '?', /* U+49CB */
+      '?', /* U+49CC */
+      '?', /* U+49CD */
+      '?', /* U+49CE */
+      '?', /* U+49CF */
+      '?', /* U+49D0 */
+      '?', /* U+49D1 */
+      '?', /* U+49D2 */
+      '?', /* U+49D3 */
+      '?', /* U+49D4 */
+      '?', /* U+49D5 */
+      '?', /* U+49D6 */
+      '?', /* U+49D7 */
+      '?', /* U+49D8 */
+      '?', /* U+49D9 */
+      '?', /* U+49DA */
+      '?', /* U+49DB */
+      '?', /* U+49DC */
+      '?', /* U+49DD */
+      '?', /* U+49DE */
+      '?', /* U+49DF */
+      '?', /* U+49E0 */
+      '?', /* U+49E1 */
+      '?', /* U+49E2 */
+      '?', /* U+49E3 */
+      '?', /* U+49E4 */
+      '?', /* U+49E5 */
+      '?', /* U+49E6 */
+      '?', /* U+49E7 */
+      '?', /* U+49E8 */
+      '?', /* U+49E9 */
+      '?', /* U+49EA */
+      '?', /* U+49EB */
+      '?', /* U+49EC */
+      '?', /* U+49ED */
+      '?', /* U+49EE */
+      '?', /* U+49EF */
+      '?', /* U+49F0 */
+      '?', /* U+49F1 */
+      '?', /* U+49F2 */
+      '?', /* U+49F3 */
+      '?', /* U+49F4 */
+      '?', /* U+49F5 */
+      '?', /* U+49F6 */
+      '?', /* U+49F7 */
+      '?', /* U+49F8 */
+      '?', /* U+49F9 */
+      '?', /* U+49FA */
+      '?', /* U+49FB */
+      '?', /* U+49FC */
+      '?', /* U+49FD */
+      '?', /* U+49FE */
+      '?', /* U+49FF */
+      '?', /* U+4A00 */
+      '?', /* U+4A01 */
+      '?', /* U+4A02 */
+      '?', /* U+4A03 */
+      '?', /* U+4A04 */
+      '?', /* U+4A05 */
+      '?', /* U+4A06 */
+      '?', /* U+4A07 */
+      '?', /* U+4A08 */
+      '?', /* U+4A09 */
+      '?', /* U+4A0A */
+      '?', /* U+4A0B */
+      '?', /* U+4A0C */
+      '?', /* U+4A0D */
+      '?', /* U+4A0E */
+      '?', /* U+4A0F */
+      '?', /* U+4A10 */
+      '?', /* U+4A11 */
+      '?', /* U+4A12 */
+      '?', /* U+4A13 */
+      '?', /* U+4A14 */
+      '?', /* U+4A15 */
+      '?', /* U+4A16 */
+      '?', /* U+4A17 */
+      '?', /* U+4A18 */
+      '?', /* U+4A19 */
+      '?', /* U+4A1A */
+      '?', /* U+4A1B */
+      '?', /* U+4A1C */
+      '?', /* U+4A1D */
+      '?', /* U+4A1E */
+      '?', /* U+4A1F */
+      '?', /* U+4A20 */
+      '?', /* U+4A21 */
+      '?', /* U+4A22 */
+      '?', /* U+4A23 */
+      '?', /* U+4A24 */
+      '?', /* U+4A25 */
+      '?', /* U+4A26 */
+      '?', /* U+4A27 */
+      '?', /* U+4A28 */
+      '?', /* U+4A29 */
+      '?', /* U+4A2A */
+      '?', /* U+4A2B */
+      '?', /* U+4A2C */
+      '?', /* U+4A2D */
+      '?', /* U+4A2E */
+      '?', /* U+4A2F */
+      '?', /* U+4A30 */
+      '?', /* U+4A31 */
+      '?', /* U+4A32 */
+      '?', /* U+4A33 */
+      '?', /* U+4A34 */
+      '?', /* U+4A35 */
+      '?', /* U+4A36 */
+      '?', /* U+4A37 */
+      '?', /* U+4A38 */
+      '?', /* U+4A39 */
+      '?', /* U+4A3A */
+      '?', /* U+4A3B */
+      '?', /* U+4A3C */
+      '?', /* U+4A3D */
+      '?', /* U+4A3E */
+      '?', /* U+4A3F */
+      '?', /* U+4A40 */
+      '?', /* U+4A41 */
+      '?', /* U+4A42 */
+      '?', /* U+4A43 */
+      '?', /* U+4A44 */
+      '?', /* U+4A45 */
+      '?', /* U+4A46 */
+      '?', /* U+4A47 */
+      '?', /* U+4A48 */
+      '?', /* U+4A49 */
+      '?', /* U+4A4A */
+      '?', /* U+4A4B */
+      '?', /* U+4A4C */
+      '?', /* U+4A4D */
+      '?', /* U+4A4E */
+      '?', /* U+4A4F */
+      '?', /* U+4A50 */
+      '?', /* U+4A51 */
+      '?', /* U+4A52 */
+      '?', /* U+4A53 */
+      '?', /* U+4A54 */
+      '?', /* U+4A55 */
+      '?', /* U+4A56 */
+      '?', /* U+4A57 */
+      '?', /* U+4A58 */
+      '?', /* U+4A59 */
+      '?', /* U+4A5A */
+      '?', /* U+4A5B */
+      '?', /* U+4A5C */
+      '?', /* U+4A5D */
+      '?', /* U+4A5E */
+      '?', /* U+4A5F */
+      '?', /* U+4A60 */
+      '?', /* U+4A61 */
+      '?', /* U+4A62 */
+      '?', /* U+4A63 */
+      '?', /* U+4A64 */
+      '?', /* U+4A65 */
+      '?', /* U+4A66 */
+      '?', /* U+4A67 */
+      '?', /* U+4A68 */
+      '?', /* U+4A69 */
+      '?', /* U+4A6A */
+      '?', /* U+4A6B */
+      '?', /* U+4A6C */
+      '?', /* U+4A6D */
+      '?', /* U+4A6E */
+      '?', /* U+4A6F */
+      '?', /* U+4A70 */
+      '?', /* U+4A71 */
+      '?', /* U+4A72 */
+      '?', /* U+4A73 */
+      '?', /* U+4A74 */
+      '?', /* U+4A75 */
+      '?', /* U+4A76 */
+      '?', /* U+4A77 */
+      '?', /* U+4A78 */
+      '?', /* U+4A79 */
+      '?', /* U+4A7A */
+      '?', /* U+4A7B */
+      '?', /* U+4A7C */
+      '?', /* U+4A7D */
+      '?', /* U+4A7E */
+      '?', /* U+4A7F */
+      '?', /* U+4A80 */
+      '?', /* U+4A81 */
+      '?', /* U+4A82 */
+      '?', /* U+4A83 */
+      '?', /* U+4A84 */
+      '?', /* U+4A85 */
+      '?', /* U+4A86 */
+      '?', /* U+4A87 */
+      '?', /* U+4A88 */
+      '?', /* U+4A89 */
+      '?', /* U+4A8A */
+      '?', /* U+4A8B */
+      '?', /* U+4A8C */
+      '?', /* U+4A8D */
+      '?', /* U+4A8E */
+      '?', /* U+4A8F */
+      '?', /* U+4A90 */
+      '?', /* U+4A91 */
+      '?', /* U+4A92 */
+      '?', /* U+4A93 */
+      '?', /* U+4A94 */
+      '?', /* U+4A95 */
+      '?', /* U+4A96 */
+      '?', /* U+4A97 */
+      '?', /* U+4A98 */
+      '?', /* U+4A99 */
+      '?', /* U+4A9A */
+      '?', /* U+4A9B */
+      '?', /* U+4A9C */
+      '?', /* U+4A9D */
+      '?', /* U+4A9E */
+      '?', /* U+4A9F */
+      '?', /* U+4AA0 */
+      '?', /* U+4AA1 */
+      '?', /* U+4AA2 */
+      '?', /* U+4AA3 */
+      '?', /* U+4AA4 */
+      '?', /* U+4AA5 */
+      '?', /* U+4AA6 */
+      '?', /* U+4AA7 */
+      '?', /* U+4AA8 */
+      '?', /* U+4AA9 */
+      '?', /* U+4AAA */
+      '?', /* U+4AAB */
+      '?', /* U+4AAC */
+      '?', /* U+4AAD */
+      '?', /* U+4AAE */
+      '?', /* U+4AAF */
+      '?', /* U+4AB0 */
+      '?', /* U+4AB1 */
+      '?', /* U+4AB2 */
+      '?', /* U+4AB3 */
+      '?', /* U+4AB4 */
+      '?', /* U+4AB5 */
+      '?', /* U+4AB6 */
+      '?', /* U+4AB7 */
+      '?', /* U+4AB8 */
+      '?', /* U+4AB9 */
+      '?', /* U+4ABA */
+      '?', /* U+4ABB */
+      '?', /* U+4ABC */
+      '?', /* U+4ABD */
+      '?', /* U+4ABE */
+      '?', /* U+4ABF */
+      '?', /* U+4AC0 */
+      '?', /* U+4AC1 */
+      '?', /* U+4AC2 */
+      '?', /* U+4AC3 */
+      '?', /* U+4AC4 */
+      '?', /* U+4AC5 */
+      '?', /* U+4AC6 */
+      '?', /* U+4AC7 */
+      '?', /* U+4AC8 */
+      '?', /* U+4AC9 */
+      '?', /* U+4ACA */
+      '?', /* U+4ACB */
+      '?', /* U+4ACC */
+      '?', /* U+4ACD */
+      '?', /* U+4ACE */
+      '?', /* U+4ACF */
+      '?', /* U+4AD0 */
+      '?', /* U+4AD1 */
+      '?', /* U+4AD2 */
+      '?', /* U+4AD3 */
+      '?', /* U+4AD4 */
+      '?', /* U+4AD5 */
+      '?', /* U+4AD6 */
+      '?', /* U+4AD7 */
+      '?', /* U+4AD8 */
+      '?', /* U+4AD9 */
+      '?', /* U+4ADA */
+      '?', /* U+4ADB */
+      '?', /* U+4ADC */
+      '?', /* U+4ADD */
+      '?', /* U+4ADE */
+      '?', /* U+4ADF */
+      '?', /* U+4AE0 */
+      '?', /* U+4AE1 */
+      '?', /* U+4AE2 */
+      '?', /* U+4AE3 */
+      '?', /* U+4AE4 */
+      '?', /* U+4AE5 */
+      '?', /* U+4AE6 */
+      '?', /* U+4AE7 */
+      '?', /* U+4AE8 */
+      '?', /* U+4AE9 */
+      '?', /* U+4AEA */
+      '?', /* U+4AEB */
+      '?', /* U+4AEC */
+      '?', /* U+4AED */
+      '?', /* U+4AEE */
+      '?', /* U+4AEF */
+      '?', /* U+4AF0 */
+      '?', /* U+4AF1 */
+      '?', /* U+4AF2 */
+      '?', /* U+4AF3 */
+      '?', /* U+4AF4 */
+      '?', /* U+4AF5 */
+      '?', /* U+4AF6 */
+      '?', /* U+4AF7 */
+      '?', /* U+4AF8 */
+      '?', /* U+4AF9 */
+      '?', /* U+4AFA */
+      '?', /* U+4AFB */
+      '?', /* U+4AFC */
+      '?', /* U+4AFD */
+      '?', /* U+4AFE */
+      '?', /* U+4AFF */
+      '?', /* U+4B00 */
+      '?', /* U+4B01 */
+      '?', /* U+4B02 */
+      '?', /* U+4B03 */
+      '?', /* U+4B04 */
+      '?', /* U+4B05 */
+      '?', /* U+4B06 */
+      '?', /* U+4B07 */
+      '?', /* U+4B08 */
+      '?', /* U+4B09 */
+      '?', /* U+4B0A */
+      '?', /* U+4B0B */
+      '?', /* U+4B0C */
+      '?', /* U+4B0D */
+      '?', /* U+4B0E */
+      '?', /* U+4B0F */
+      '?', /* U+4B10 */
+      '?', /* U+4B11 */
+      '?', /* U+4B12 */
+      '?', /* U+4B13 */
+      '?', /* U+4B14 */
+      '?', /* U+4B15 */
+      '?', /* U+4B16 */
+      '?', /* U+4B17 */
+      '?', /* U+4B18 */
+      '?', /* U+4B19 */
+      '?', /* U+4B1A */
+      '?', /* U+4B1B */
+      '?', /* U+4B1C */
+      '?', /* U+4B1D */
+      '?', /* U+4B1E */
+      '?', /* U+4B1F */
+      '?', /* U+4B20 */
+      '?', /* U+4B21 */
+      '?', /* U+4B22 */
+      '?', /* U+4B23 */
+      '?', /* U+4B24 */
+      '?', /* U+4B25 */
+      '?', /* U+4B26 */
+      '?', /* U+4B27 */
+      '?', /* U+4B28 */
+      '?', /* U+4B29 */
+      '?', /* U+4B2A */
+      '?', /* U+4B2B */
+      '?', /* U+4B2C */
+      '?', /* U+4B2D */
+      '?', /* U+4B2E */
+      '?', /* U+4B2F */
+      '?', /* U+4B30 */
+      '?', /* U+4B31 */
+      '?', /* U+4B32 */
+      '?', /* U+4B33 */
+      '?', /* U+4B34 */
+      '?', /* U+4B35 */
+      '?', /* U+4B36 */
+      '?', /* U+4B37 */
+      '?', /* U+4B38 */
+      '?', /* U+4B39 */
+      '?', /* U+4B3A */
+      '?', /* U+4B3B */
+      '?', /* U+4B3C */
+      '?', /* U+4B3D */
+      '?', /* U+4B3E */
+      '?', /* U+4B3F */
+      '?', /* U+4B40 */
+      '?', /* U+4B41 */
+      '?', /* U+4B42 */
+      '?', /* U+4B43 */
+      '?', /* U+4B44 */
+      '?', /* U+4B45 */
+      '?', /* U+4B46 */
+      '?', /* U+4B47 */
+      '?', /* U+4B48 */
+      '?', /* U+4B49 */
+      '?', /* U+4B4A */
+      '?', /* U+4B4B */
+      '?', /* U+4B4C */
+      '?', /* U+4B4D */
+      '?', /* U+4B4E */
+      '?', /* U+4B4F */
+      '?', /* U+4B50 */
+      '?', /* U+4B51 */
+      '?', /* U+4B52 */
+      '?', /* U+4B53 */
+      '?', /* U+4B54 */
+      '?', /* U+4B55 */
+      '?', /* U+4B56 */
+      '?', /* U+4B57 */
+      '?', /* U+4B58 */
+      '?', /* U+4B59 */
+      '?', /* U+4B5A */
+      '?', /* U+4B5B */
+      '?', /* U+4B5C */
+      '?', /* U+4B5D */
+      '?', /* U+4B5E */
+      '?', /* U+4B5F */
+      '?', /* U+4B60 */
+      '?', /* U+4B61 */
+      '?', /* U+4B62 */
+      '?', /* U+4B63 */
+      '?', /* U+4B64 */
+      '?', /* U+4B65 */
+      '?', /* U+4B66 */
+      '?', /* U+4B67 */
+      '?', /* U+4B68 */
+      '?', /* U+4B69 */
+      '?', /* U+4B6A */
+      '?', /* U+4B6B */
+      '?', /* U+4B6C */
+      '?', /* U+4B6D */
+      '?', /* U+4B6E */
+      '?', /* U+4B6F */
+      '?', /* U+4B70 */
+      '?', /* U+4B71 */
+      '?', /* U+4B72 */
+      '?', /* U+4B73 */
+      '?', /* U+4B74 */
+      '?', /* U+4B75 */
+      '?', /* U+4B76 */
+      '?', /* U+4B77 */
+      '?', /* U+4B78 */
+      '?', /* U+4B79 */
+      '?', /* U+4B7A */
+      '?', /* U+4B7B */
+      '?', /* U+4B7C */
+      '?', /* U+4B7D */
+      '?', /* U+4B7E */
+      '?', /* U+4B7F */
+      '?', /* U+4B80 */
+      '?', /* U+4B81 */
+      '?', /* U+4B82 */
+      '?', /* U+4B83 */
+      '?', /* U+4B84 */
+      '?', /* U+4B85 */
+      '?', /* U+4B86 */
+      '?', /* U+4B87 */
+      '?', /* U+4B88 */
+      '?', /* U+4B89 */
+      '?', /* U+4B8A */
+      '?', /* U+4B8B */
+      '?', /* U+4B8C */
+      '?', /* U+4B8D */
+      '?', /* U+4B8E */
+      '?', /* U+4B8F */
+      '?', /* U+4B90 */
+      '?', /* U+4B91 */
+      '?', /* U+4B92 */
+      '?', /* U+4B93 */
+      '?', /* U+4B94 */
+      '?', /* U+4B95 */
+      '?', /* U+4B96 */
+      '?', /* U+4B97 */
+      '?', /* U+4B98 */
+      '?', /* U+4B99 */
+      '?', /* U+4B9A */
+      '?', /* U+4B9B */
+      '?', /* U+4B9C */
+      '?', /* U+4B9D */
+      '?', /* U+4B9E */
+      '?', /* U+4B9F */
+      '?', /* U+4BA0 */
+      '?', /* U+4BA1 */
+      '?', /* U+4BA2 */
+      '?', /* U+4BA3 */
+      '?', /* U+4BA4 */
+      '?', /* U+4BA5 */
+      '?', /* U+4BA6 */
+      '?', /* U+4BA7 */
+      '?', /* U+4BA8 */
+      '?', /* U+4BA9 */
+      '?', /* U+4BAA */
+      '?', /* U+4BAB */
+      '?', /* U+4BAC */
+      '?', /* U+4BAD */
+      '?', /* U+4BAE */
+      '?', /* U+4BAF */
+      '?', /* U+4BB0 */
+      '?', /* U+4BB1 */
+      '?', /* U+4BB2 */
+      '?', /* U+4BB3 */
+      '?', /* U+4BB4 */
+      '?', /* U+4BB5 */
+      '?', /* U+4BB6 */
+      '?', /* U+4BB7 */
+      '?', /* U+4BB8 */
+      '?', /* U+4BB9 */
+      '?', /* U+4BBA */
+      '?', /* U+4BBB */
+      '?', /* U+4BBC */
+      '?', /* U+4BBD */
+      '?', /* U+4BBE */
+      '?', /* U+4BBF */
+      '?', /* U+4BC0 */
+      '?', /* U+4BC1 */
+      '?', /* U+4BC2 */
+      '?', /* U+4BC3 */
+      '?', /* U+4BC4 */
+      '?', /* U+4BC5 */
+      '?', /* U+4BC6 */
+      '?', /* U+4BC7 */
+      '?', /* U+4BC8 */
+      '?', /* U+4BC9 */
+      '?', /* U+4BCA */
+      '?', /* U+4BCB */
+      '?', /* U+4BCC */
+      '?', /* U+4BCD */
+      '?', /* U+4BCE */
+      '?', /* U+4BCF */
+      '?', /* U+4BD0 */
+      '?', /* U+4BD1 */
+      '?', /* U+4BD2 */
+      '?', /* U+4BD3 */
+      '?', /* U+4BD4 */
+      '?', /* U+4BD5 */
+      '?', /* U+4BD6 */
+      '?', /* U+4BD7 */
+      '?', /* U+4BD8 */
+      '?', /* U+4BD9 */
+      '?', /* U+4BDA */
+      '?', /* U+4BDB */
+      '?', /* U+4BDC */
+      '?', /* U+4BDD */
+      '?', /* U+4BDE */
+      '?', /* U+4BDF */
+      '?', /* U+4BE0 */
+      '?', /* U+4BE1 */
+      '?', /* U+4BE2 */
+      '?', /* U+4BE3 */
+      '?', /* U+4BE4 */
+      '?', /* U+4BE5 */
+      '?', /* U+4BE6 */
+      '?', /* U+4BE7 */
+      '?', /* U+4BE8 */
+      '?', /* U+4BE9 */
+      '?', /* U+4BEA */
+      '?', /* U+4BEB */
+      '?', /* U+4BEC */
+      '?', /* U+4BED */
+      '?', /* U+4BEE */
+      '?', /* U+4BEF */
+      '?', /* U+4BF0 */
+      '?', /* U+4BF1 */
+      '?', /* U+4BF2 */
+      '?', /* U+4BF3 */
+      '?', /* U+4BF4 */
+      '?', /* U+4BF5 */
+      '?', /* U+4BF6 */
+      '?', /* U+4BF7 */
+      '?', /* U+4BF8 */
+      '?', /* U+4BF9 */
+      '?', /* U+4BFA */
+      '?', /* U+4BFB */
+      '?', /* U+4BFC */
+      '?', /* U+4BFD */
+      '?', /* U+4BFE */
+      '?', /* U+4BFF */
+      '?', /* U+4C00 */
+      '?', /* U+4C01 */
+      '?', /* U+4C02 */
+      '?', /* U+4C03 */
+      '?', /* U+4C04 */
+      '?', /* U+4C05 */
+      '?', /* U+4C06 */
+      '?', /* U+4C07 */
+      '?', /* U+4C08 */
+      '?', /* U+4C09 */
+      '?', /* U+4C0A */
+      '?', /* U+4C0B */
+      '?', /* U+4C0C */
+      '?', /* U+4C0D */
+      '?', /* U+4C0E */
+      '?', /* U+4C0F */
+      '?', /* U+4C10 */
+      '?', /* U+4C11 */
+      '?', /* U+4C12 */
+      '?', /* U+4C13 */
+      '?', /* U+4C14 */
+      '?', /* U+4C15 */
+      '?', /* U+4C16 */
+      '?', /* U+4C17 */
+      '?', /* U+4C18 */
+      '?', /* U+4C19 */
+      '?', /* U+4C1A */
+      '?', /* U+4C1B */
+      '?', /* U+4C1C */
+      '?', /* U+4C1D */
+      '?', /* U+4C1E */
+      '?', /* U+4C1F */
+      '?', /* U+4C20 */
+      '?', /* U+4C21 */
+      '?', /* U+4C22 */
+      '?', /* U+4C23 */
+      '?', /* U+4C24 */
+      '?', /* U+4C25 */
+      '?', /* U+4C26 */
+      '?', /* U+4C27 */
+      '?', /* U+4C28 */
+      '?', /* U+4C29 */
+      '?', /* U+4C2A */
+      '?', /* U+4C2B */
+      '?', /* U+4C2C */
+      '?', /* U+4C2D */
+      '?', /* U+4C2E */
+      '?', /* U+4C2F */
+      '?', /* U+4C30 */
+      '?', /* U+4C31 */
+      '?', /* U+4C32 */
+      '?', /* U+4C33 */
+      '?', /* U+4C34 */
+      '?', /* U+4C35 */
+      '?', /* U+4C36 */
+      '?', /* U+4C37 */
+      '?', /* U+4C38 */
+      '?', /* U+4C39 */
+      '?', /* U+4C3A */
+      '?', /* U+4C3B */
+      '?', /* U+4C3C */
+      '?', /* U+4C3D */
+      '?', /* U+4C3E */
+      '?', /* U+4C3F */
+      '?', /* U+4C40 */
+      '?', /* U+4C41 */
+      '?', /* U+4C42 */
+      '?', /* U+4C43 */
+      '?', /* U+4C44 */
+      '?', /* U+4C45 */
+      '?', /* U+4C46 */
+      '?', /* U+4C47 */
+      '?', /* U+4C48 */
+      '?', /* U+4C49 */
+      '?', /* U+4C4A */
+      '?', /* U+4C4B */
+      '?', /* U+4C4C */
+      '?', /* U+4C4D */
+      '?', /* U+4C4E */
+      '?', /* U+4C4F */
+      '?', /* U+4C50 */
+      '?', /* U+4C51 */
+      '?', /* U+4C52 */
+      '?', /* U+4C53 */
+      '?', /* U+4C54 */
+      '?', /* U+4C55 */
+      '?', /* U+4C56 */
+      '?', /* U+4C57 */
+      '?', /* U+4C58 */
+      '?', /* U+4C59 */
+      '?', /* U+4C5A */
+      '?', /* U+4C5B */
+      '?', /* U+4C5C */
+      '?', /* U+4C5D */
+      '?', /* U+4C5E */
+      '?', /* U+4C5F */
+      '?', /* U+4C60 */
+      '?', /* U+4C61 */
+      '?', /* U+4C62 */
+      '?', /* U+4C63 */
+      '?', /* U+4C64 */
+      '?', /* U+4C65 */
+      '?', /* U+4C66 */
+      '?', /* U+4C67 */
+      '?', /* U+4C68 */
+      '?', /* U+4C69 */
+      '?', /* U+4C6A */
+      '?', /* U+4C6B */
+      '?', /* U+4C6C */
+      '?', /* U+4C6D */
+      '?', /* U+4C6E */
+      '?', /* U+4C6F */
+      '?', /* U+4C70 */
+      '?', /* U+4C71 */
+      '?', /* U+4C72 */
+      '?', /* U+4C73 */
+      '?', /* U+4C74 */
+      '?', /* U+4C75 */
+      '?', /* U+4C76 */
+      '?', /* U+4C77 */
+      '?', /* U+4C78 */
+      '?', /* U+4C79 */
+      '?', /* U+4C7A */
+      '?', /* U+4C7B */
+      '?', /* U+4C7C */
+      '?', /* U+4C7D */
+      '?', /* U+4C7E */
+      '?', /* U+4C7F */
+      '?', /* U+4C80 */
+      '?', /* U+4C81 */
+      '?', /* U+4C82 */
+      '?', /* U+4C83 */
+      '?', /* U+4C84 */
+      '?', /* U+4C85 */
+      '?', /* U+4C86 */
+      '?', /* U+4C87 */
+      '?', /* U+4C88 */
+      '?', /* U+4C89 */
+      '?', /* U+4C8A */
+      '?', /* U+4C8B */
+      '?', /* U+4C8C */
+      '?', /* U+4C8D */
+      '?', /* U+4C8E */
+      '?', /* U+4C8F */
+      '?', /* U+4C90 */
+      '?', /* U+4C91 */
+      '?', /* U+4C92 */
+      '?', /* U+4C93 */
+      '?', /* U+4C94 */
+      '?', /* U+4C95 */
+      '?', /* U+4C96 */
+      '?', /* U+4C97 */
+      '?', /* U+4C98 */
+      '?', /* U+4C99 */
+      '?', /* U+4C9A */
+      '?', /* U+4C9B */
+      '?', /* U+4C9C */
+      '?', /* U+4C9D */
+      '?', /* U+4C9E */
+      '?', /* U+4C9F */
+      '?', /* U+4CA0 */
+      '?', /* U+4CA1 */
+      '?', /* U+4CA2 */
+      '?', /* U+4CA3 */
+      '?', /* U+4CA4 */
+      '?', /* U+4CA5 */
+      '?', /* U+4CA6 */
+      '?', /* U+4CA7 */
+      '?', /* U+4CA8 */
+      '?', /* U+4CA9 */
+      '?', /* U+4CAA */
+      '?', /* U+4CAB */
+      '?', /* U+4CAC */
+      '?', /* U+4CAD */
+      '?', /* U+4CAE */
+      '?', /* U+4CAF */
+      '?', /* U+4CB0 */
+      '?', /* U+4CB1 */
+      '?', /* U+4CB2 */
+      '?', /* U+4CB3 */
+      '?', /* U+4CB4 */
+      '?', /* U+4CB5 */
+      '?', /* U+4CB6 */
+      '?', /* U+4CB7 */
+      '?', /* U+4CB8 */
+      '?', /* U+4CB9 */
+      '?', /* U+4CBA */
+      '?', /* U+4CBB */
+      '?', /* U+4CBC */
+      '?', /* U+4CBD */
+      '?', /* U+4CBE */
+      '?', /* U+4CBF */
+      '?', /* U+4CC0 */
+      '?', /* U+4CC1 */
+      '?', /* U+4CC2 */
+      '?', /* U+4CC3 */
+      '?', /* U+4CC4 */
+      '?', /* U+4CC5 */
+      '?', /* U+4CC6 */
+      '?', /* U+4CC7 */
+      '?', /* U+4CC8 */
+      '?', /* U+4CC9 */
+      '?', /* U+4CCA */
+      '?', /* U+4CCB */
+      '?', /* U+4CCC */
+      '?', /* U+4CCD */
+      '?', /* U+4CCE */
+      '?', /* U+4CCF */
+      '?', /* U+4CD0 */
+      '?', /* U+4CD1 */
+      '?', /* U+4CD2 */
+      '?', /* U+4CD3 */
+      '?', /* U+4CD4 */
+      '?', /* U+4CD5 */
+      '?', /* U+4CD6 */
+      '?', /* U+4CD7 */
+      '?', /* U+4CD8 */
+      '?', /* U+4CD9 */
+      '?', /* U+4CDA */
+      '?', /* U+4CDB */
+      '?', /* U+4CDC */
+      '?', /* U+4CDD */
+      '?', /* U+4CDE */
+      '?', /* U+4CDF */
+      '?', /* U+4CE0 */
+      '?', /* U+4CE1 */
+      '?', /* U+4CE2 */
+      '?', /* U+4CE3 */
+      '?', /* U+4CE4 */
+      '?', /* U+4CE5 */
+      '?', /* U+4CE6 */
+      '?', /* U+4CE7 */
+      '?', /* U+4CE8 */
+      '?', /* U+4CE9 */
+      '?', /* U+4CEA */
+      '?', /* U+4CEB */
+      '?', /* U+4CEC */
+      '?', /* U+4CED */
+      '?', /* U+4CEE */
+      '?', /* U+4CEF */
+      '?', /* U+4CF0 */
+      '?', /* U+4CF1 */
+      '?', /* U+4CF2 */
+      '?', /* U+4CF3 */
+      '?', /* U+4CF4 */
+      '?', /* U+4CF5 */
+      '?', /* U+4CF6 */
+      '?', /* U+4CF7 */
+      '?', /* U+4CF8 */
+      '?', /* U+4CF9 */
+      '?', /* U+4CFA */
+      '?', /* U+4CFB */
+      '?', /* U+4CFC */
+      '?', /* U+4CFD */
+      '?', /* U+4CFE */
+      '?', /* U+4CFF */
+      '?', /* U+4D00 */
+      '?', /* U+4D01 */
+      '?', /* U+4D02 */
+      '?', /* U+4D03 */
+      '?', /* U+4D04 */
+      '?', /* U+4D05 */
+      '?', /* U+4D06 */
+      '?', /* U+4D07 */
+      '?', /* U+4D08 */
+      '?', /* U+4D09 */
+      '?', /* U+4D0A */
+      '?', /* U+4D0B */
+      '?', /* U+4D0C */
+      '?', /* U+4D0D */
+      '?', /* U+4D0E */
+      '?', /* U+4D0F */
+      '?', /* U+4D10 */
+      '?', /* U+4D11 */
+      '?', /* U+4D12 */
+      '?', /* U+4D13 */
+      '?', /* U+4D14 */
+      '?', /* U+4D15 */
+      '?', /* U+4D16 */
+      '?', /* U+4D17 */
+      '?', /* U+4D18 */
+      '?', /* U+4D19 */
+      '?', /* U+4D1A */
+      '?', /* U+4D1B */
+      '?', /* U+4D1C */
+      '?', /* U+4D1D */
+      '?', /* U+4D1E */
+      '?', /* U+4D1F */
+      '?', /* U+4D20 */
+      '?', /* U+4D21 */
+      '?', /* U+4D22 */
+      '?', /* U+4D23 */
+      '?', /* U+4D24 */
+      '?', /* U+4D25 */
+      '?', /* U+4D26 */
+      '?', /* U+4D27 */
+      '?', /* U+4D28 */
+      '?', /* U+4D29 */
+      '?', /* U+4D2A */
+      '?', /* U+4D2B */
+      '?', /* U+4D2C */
+      '?', /* U+4D2D */
+      '?', /* U+4D2E */
+      '?', /* U+4D2F */
+      '?', /* U+4D30 */
+      '?', /* U+4D31 */
+      '?', /* U+4D32 */
+      '?', /* U+4D33 */
+      '?', /* U+4D34 */
+      '?', /* U+4D35 */
+      '?', /* U+4D36 */
+      '?', /* U+4D37 */
+      '?', /* U+4D38 */
+      '?', /* U+4D39 */
+      '?', /* U+4D3A */
+      '?', /* U+4D3B */
+      '?', /* U+4D3C */
+      '?', /* U+4D3D */
+      '?', /* U+4D3E */
+      '?', /* U+4D3F */
+      '?', /* U+4D40 */
+      '?', /* U+4D41 */
+      '?', /* U+4D42 */
+      '?', /* U+4D43 */
+      '?', /* U+4D44 */
+      '?', /* U+4D45 */
+      '?', /* U+4D46 */
+      '?', /* U+4D47 */
+      '?', /* U+4D48 */
+      '?', /* U+4D49 */
+      '?', /* U+4D4A */
+      '?', /* U+4D4B */
+      '?', /* U+4D4C */
+      '?', /* U+4D4D */
+      '?', /* U+4D4E */
+      '?', /* U+4D4F */
+      '?', /* U+4D50 */
+      '?', /* U+4D51 */
+      '?', /* U+4D52 */
+      '?', /* U+4D53 */
+      '?', /* U+4D54 */
+      '?', /* U+4D55 */
+      '?', /* U+4D56 */
+      '?', /* U+4D57 */
+      '?', /* U+4D58 */
+      '?', /* U+4D59 */
+      '?', /* U+4D5A */
+      '?', /* U+4D5B */
+      '?', /* U+4D5C */
+      '?', /* U+4D5D */
+      '?', /* U+4D5E */
+      '?', /* U+4D5F */
+      '?', /* U+4D60 */
+      '?', /* U+4D61 */
+      '?', /* U+4D62 */
+      '?', /* U+4D63 */
+      '?', /* U+4D64 */
+      '?', /* U+4D65 */
+      '?', /* U+4D66 */
+      '?', /* U+4D67 */
+      '?', /* U+4D68 */
+      '?', /* U+4D69 */
+      '?', /* U+4D6A */
+      '?', /* U+4D6B */
+      '?', /* U+4D6C */
+      '?', /* U+4D6D */
+      '?', /* U+4D6E */
+      '?', /* U+4D6F */
+      '?', /* U+4D70 */
+      '?', /* U+4D71 */
+      '?', /* U+4D72 */
+      '?', /* U+4D73 */
+      '?', /* U+4D74 */
+      '?', /* U+4D75 */
+      '?', /* U+4D76 */
+      '?', /* U+4D77 */
+      '?', /* U+4D78 */
+      '?', /* U+4D79 */
+      '?', /* U+4D7A */
+      '?', /* U+4D7B */
+      '?', /* U+4D7C */
+      '?', /* U+4D7D */
+      '?', /* U+4D7E */
+      '?', /* U+4D7F */
+      '?', /* U+4D80 */
+      '?', /* U+4D81 */
+      '?', /* U+4D82 */
+      '?', /* U+4D83 */
+      '?', /* U+4D84 */
+      '?', /* U+4D85 */
+      '?', /* U+4D86 */
+      '?', /* U+4D87 */
+      '?', /* U+4D88 */
+      '?', /* U+4D89 */
+      '?', /* U+4D8A */
+      '?', /* U+4D8B */
+      '?', /* U+4D8C */
+      '?', /* U+4D8D */
+      '?', /* U+4D8E */
+      '?', /* U+4D8F */
+      '?', /* U+4D90 */
+      '?', /* U+4D91 */
+      '?', /* U+4D92 */
+      '?', /* U+4D93 */
+      '?', /* U+4D94 */
+      '?', /* U+4D95 */
+      '?', /* U+4D96 */
+      '?', /* U+4D97 */
+      '?', /* U+4D98 */
+      '?', /* U+4D99 */
+      '?', /* U+4D9A */
+      '?', /* U+4D9B */
+      '?', /* U+4D9C */
+      '?', /* U+4D9D */
+      '?', /* U+4D9E */
+      '?', /* U+4D9F */
+      '?', /* U+4DA0 */
+      '?', /* U+4DA1 */
+      '?', /* U+4DA2 */
+      '?', /* U+4DA3 */
+      '?', /* U+4DA4 */
+      '?', /* U+4DA5 */
+      '?', /* U+4DA6 */
+      '?', /* U+4DA7 */
+      '?', /* U+4DA8 */
+      '?', /* U+4DA9 */
+      '?', /* U+4DAA */
+      '?', /* U+4DAB */
+      '?', /* U+4DAC */
+      '?', /* U+4DAD */
+      '?', /* U+4DAE */
+      '?', /* U+4DAF */
+      '?', /* U+4DB0 */
+      '?', /* U+4DB1 */
+      '?', /* U+4DB2 */
+      '?', /* U+4DB3 */
+      '?', /* U+4DB4 */
+      '?', /* U+4DB5 */
+      '?', /* U+4DB6 */
+      '?', /* U+4DB7 */
+      '?', /* U+4DB8 */
+      '?', /* U+4DB9 */
+      '?', /* U+4DBA */
+      '?', /* U+4DBB */
+      '?', /* U+4DBC */
+      '?', /* U+4DBD */
+      '?', /* U+4DBE */
+      '?', /* U+4DBF */
+      '?', /* U+4DC0 */
+      '?', /* U+4DC1 */
+      '?', /* U+4DC2 */
+      '?', /* U+4DC3 */
+      '?', /* U+4DC4 */
+      '?', /* U+4DC5 */
+      '?', /* U+4DC6 */
+      '?', /* U+4DC7 */
+      '?', /* U+4DC8 */
+      '?', /* U+4DC9 */
+      '?', /* U+4DCA */
+      '?', /* U+4DCB */
+      '?', /* U+4DCC */
+      '?', /* U+4DCD */
+      '?', /* U+4DCE */
+      '?', /* U+4DCF */
+      '?', /* U+4DD0 */
+      '?', /* U+4DD1 */
+      '?', /* U+4DD2 */
+      '?', /* U+4DD3 */
+      '?', /* U+4DD4 */
+      '?', /* U+4DD5 */
+      '?', /* U+4DD6 */
+      '?', /* U+4DD7 */
+      '?', /* U+4DD8 */
+      '?', /* U+4DD9 */
+      '?', /* U+4DDA */
+      '?', /* U+4DDB */
+      '?', /* U+4DDC */
+      '?', /* U+4DDD */
+      '?', /* U+4DDE */
+      '?', /* U+4DDF */
+      '?', /* U+4DE0 */
+      '?', /* U+4DE1 */
+      '?', /* U+4DE2 */
+      '?', /* U+4DE3 */
+      '?', /* U+4DE4 */
+      '?', /* U+4DE5 */
+      '?', /* U+4DE6 */
+      '?', /* U+4DE7 */
+      '?', /* U+4DE8 */
+      '?', /* U+4DE9 */
+      '?', /* U+4DEA */
+      '?', /* U+4DEB */
+      '?', /* U+4DEC */
+      '?', /* U+4DED */
+      '?', /* U+4DEE */
+      '?', /* U+4DEF */
+      '?', /* U+4DF0 */
+      '?', /* U+4DF1 */
+      '?', /* U+4DF2 */
+      '?', /* U+4DF3 */
+      '?', /* U+4DF4 */
+      '?', /* U+4DF5 */
+      '?', /* U+4DF6 */
+      '?', /* U+4DF7 */
+      '?', /* U+4DF8 */
+      '?', /* U+4DF9 */
+      '?', /* U+4DFA */
+      '?', /* U+4DFB */
+      '?', /* U+4DFC */
+      '?', /* U+4DFD */
+      '?', /* U+4DFE */
+      '?', /* U+4DFF */
+   0x88ea, /* U+4E00 */
+   0x929a, /* U+4E01 */
+      '?', /* U+4E02 */
+   0x8eb5, /* U+4E03 */
+      '?', /* U+4E04 */
+      '?', /* U+4E05 */
+      '?', /* U+4E06 */
+   0x969c, /* U+4E07 */
+   0x8fe4, /* U+4E08 */
+   0x8e4f, /* U+4E09 */
+   0x8fe3, /* U+4E0A */
+   0x89ba, /* U+4E0B */
+      '?', /* U+4E0C */
+   0x9573, /* U+4E0D */
+   0x975e, /* U+4E0E */
+      '?', /* U+4E0F */
+   0x98a0, /* U+4E10 */
+   0x894e, /* U+4E11 */
+      '?', /* U+4E12 */
+      '?', /* U+4E13 */
+   0x8a8e, /* U+4E14 */
+   0x98a1, /* U+4E15 */
+   0x90a2, /* U+4E16 */
+   0x99c0, /* U+4E17 */
+   0x8b75, /* U+4E18 */
+   0x95b8, /* U+4E19 */
+      '?', /* U+4E1A */
+      '?', /* U+4E1B */
+      '?', /* U+4E1C */
+      '?', /* U+4E1D */
+   0x8fe5, /* U+4E1E */
+      '?', /* U+4E1F */
+      '?', /* U+4E20 */
+   0x97bc, /* U+4E21 */
+      '?', /* U+4E22 */
+      '?', /* U+4E23 */
+      '?', /* U+4E24 */
+      '?', /* U+4E25 */
+   0x95c0, /* U+4E26 */
+      '?', /* U+4E27 */
+   0xfa68, /* U+4E28 */
+      '?', /* U+4E29 */
+   0x98a2, /* U+4E2A */
+      '?', /* U+4E2B */
+      '?', /* U+4E2C */
+   0x9286, /* U+4E2D */
+      '?', /* U+4E2E */
+      '?', /* U+4E2F */
+      '?', /* U+4E30 */
+   0x98a3, /* U+4E31 */
+   0x8bf8, /* U+4E32 */
+      '?', /* U+4E33 */
+      '?', /* U+4E34 */
+      '?', /* U+4E35 */
+   0x98a4, /* U+4E36 */
+      '?', /* U+4E37 */
+   0x8adb, /* U+4E38 */
+   0x924f, /* U+4E39 */
+      '?', /* U+4E3A */
+   0x8ee5, /* U+4E3B */
+   0x98a5, /* U+4E3C */
+      '?', /* U+4E3D */
+      '?', /* U+4E3E */
+   0x98a6, /* U+4E3F */
+      '?', /* U+4E40 */
+      '?', /* U+4E41 */
+   0x98a7, /* U+4E42 */
+   0x9454, /* U+4E43 */
+      '?', /* U+4E44 */
+   0x8b76, /* U+4E45 */
+      '?', /* U+4E46 */
+      '?', /* U+4E47 */
+      '?', /* U+4E48 */
+      '?', /* U+4E49 */
+      '?', /* U+4E4A */
+   0x9456, /* U+4E4B */
+      '?', /* U+4E4C */
+   0x93e1, /* U+4E4D */
+   0x8cc1, /* U+4E4E */
+   0x9652, /* U+4E4F */
+      '?', /* U+4E50 */
+      '?', /* U+4E51 */
+      '?', /* U+4E52 */
+      '?', /* U+4E53 */
+      '?', /* U+4E54 */
+   0xe568, /* U+4E55 */
+   0x98a8, /* U+4E56 */
+   0x8fe6, /* U+4E57 */
+   0x98a9, /* U+4E58 */
+   0x89b3, /* U+4E59 */
+      '?', /* U+4E5A */
+      '?', /* U+4E5B */
+      '?', /* U+4E5C */
+   0x8be3, /* U+4E5D */
+   0x8cee, /* U+4E5E */
+   0x96e7, /* U+4E5F */
+      '?', /* U+4E60 */
+      '?', /* U+4E61 */
+   0x9ba4, /* U+4E62 */
+      '?', /* U+4E63 */
+      '?', /* U+4E64 */
+      '?', /* U+4E65 */
+      '?', /* U+4E66 */
+      '?', /* U+4E67 */
+      '?', /* U+4E68 */
+      '?', /* U+4E69 */
+      '?', /* U+4E6A */
+      '?', /* U+4E6B */
+      '?', /* U+4E6C */
+      '?', /* U+4E6D */
+      '?', /* U+4E6E */
+      '?', /* U+4E6F */
+      '?', /* U+4E70 */
+   0x9790, /* U+4E71 */
+      '?', /* U+4E72 */
+   0x93fb, /* U+4E73 */
+      '?', /* U+4E74 */
+      '?', /* U+4E75 */
+      '?', /* U+4E76 */
+      '?', /* U+4E77 */
+      '?', /* U+4E78 */
+      '?', /* U+4E79 */
+      '?', /* U+4E7A */
+      '?', /* U+4E7B */
+      '?', /* U+4E7C */
+      '?', /* U+4E7D */
+   0x8aa3, /* U+4E7E */
+      '?', /* U+4E7F */
+   0x8b54, /* U+4E80 */
+      '?', /* U+4E81 */
+   0x98aa, /* U+4E82 */
+      '?', /* U+4E83 */
+      '?', /* U+4E84 */
+   0x98ab, /* U+4E85 */
+   0x97b9, /* U+4E86 */
+      '?', /* U+4E87 */
+   0x975c, /* U+4E88 */
+   0x9188, /* U+4E89 */
+   0x98ad, /* U+4E8A */
+   0x8e96, /* U+4E8B */
+   0x93f1, /* U+4E8C */
+      '?', /* U+4E8D */
+   0x98b0, /* U+4E8E */
+      '?', /* U+4E8F */
+      '?', /* U+4E90 */
+   0x895d, /* U+4E91 */
+   0x8cdd, /* U+4E92 */
+      '?', /* U+4E93 */
+   0x8cdc, /* U+4E94 */
+   0x88e4, /* U+4E95 */
+      '?', /* U+4E96 */
+      '?', /* U+4E97 */
+   0x986a, /* U+4E98 */
+   0x9869, /* U+4E99 */
+      '?', /* U+4E9A */
+   0x8db1, /* U+4E9B */
+   0x889f, /* U+4E9C */
+      '?', /* U+4E9D */
+   0x98b1, /* U+4E9E */
+   0x98b2, /* U+4E9F */
+   0x98b3, /* U+4EA0 */
+   0x9653, /* U+4EA1 */
+   0x98b4, /* U+4EA2 */
+      '?', /* U+4EA3 */
+   0x8cf0, /* U+4EA4 */
+   0x88e5, /* U+4EA5 */
+   0x9692, /* U+4EA6 */
+      '?', /* U+4EA7 */
+   0x8b9c, /* U+4EA8 */
+      '?', /* U+4EA9 */
+      '?', /* U+4EAA */
+   0x8b9d, /* U+4EAB */
+   0x8b9e, /* U+4EAC */
+   0x92e0, /* U+4EAD */
+   0x97ba, /* U+4EAE */
+      '?', /* U+4EAF */
+   0x98b5, /* U+4EB0 */
+      '?', /* U+4EB1 */
+      '?', /* U+4EB2 */
+   0x98b6, /* U+4EB3 */
+      '?', /* U+4EB4 */
+      '?', /* U+4EB5 */
+   0x98b7, /* U+4EB6 */
+      '?', /* U+4EB7 */
+      '?', /* U+4EB8 */
+      '?', /* U+4EB9 */
+   0x906c, /* U+4EBA */
+      '?', /* U+4EBB */
+      '?', /* U+4EBC */
+      '?', /* U+4EBD */
+      '?', /* U+4EBE */
+      '?', /* U+4EBF */
+   0x8f59, /* U+4EC0 */
+   0x906d, /* U+4EC1 */
+   0x98bc, /* U+4EC2 */
+      '?', /* U+4EC3 */
+   0x98ba, /* U+4EC4 */
+      '?', /* U+4EC5 */
+   0x98bb, /* U+4EC6 */
+   0x8b77, /* U+4EC7 */
+      '?', /* U+4EC8 */
+      '?', /* U+4EC9 */
+   0x8da1, /* U+4ECA */
+   0x89ee, /* U+4ECB */
+      '?', /* U+4ECC */
+   0x98b9, /* U+4ECD */
+   0x98b8, /* U+4ECE */
+   0x95a7, /* U+4ECF */
+      '?', /* U+4ED0 */
+      '?', /* U+4ED1 */
+      '?', /* U+4ED2 */
+      '?', /* U+4ED3 */
+   0x8e65, /* U+4ED4 */
+   0x8e64, /* U+4ED5 */
+   0x91bc, /* U+4ED6 */
+   0x98bd, /* U+4ED7 */
+   0x9574, /* U+4ED8 */
+   0x90e5, /* U+4ED9 */
+      '?', /* U+4EDA */
+      '?', /* U+4EDB */
+      '?', /* U+4EDC */
+   0x8157, /* U+4EDD */
+   0x98be, /* U+4EDE */
+   0x98c0, /* U+4EDF */
+      '?', /* U+4EE0 */
+   0xfa69, /* U+4EE1 */
+      '?', /* U+4EE2 */
+   0x91e3, /* U+4EE3 */
+   0x97df, /* U+4EE4 */
+   0x88c8, /* U+4EE5 */
+      '?', /* U+4EE6 */
+      '?', /* U+4EE7 */
+      '?', /* U+4EE8 */
+      '?', /* U+4EE9 */
+      '?', /* U+4EEA */
+      '?', /* U+4EEB */
+      '?', /* U+4EEC */
+   0x98bf, /* U+4EED */
+   0x89bc, /* U+4EEE */
+      '?', /* U+4EEF */
+   0x8bc2, /* U+4EF0 */
+      '?', /* U+4EF1 */
+   0x9287, /* U+4EF2 */
+      '?', /* U+4EF3 */
+      '?', /* U+4EF4 */
+      '?', /* U+4EF5 */
+   0x8c8f, /* U+4EF6 */
+   0x98c1, /* U+4EF7 */
+      '?', /* U+4EF8 */
+      '?', /* U+4EF9 */
+      '?', /* U+4EFA */
+   0x9443, /* U+4EFB */
+   0xfa6a, /* U+4EFC */
+      '?', /* U+4EFD */
+      '?', /* U+4EFE */
+      '?', /* U+4EFF */
+   0xfa6b, /* U+4F00 */
+   0x8ae9, /* U+4F01 */
+      '?', /* U+4F02 */
+   0xfa6c, /* U+4F03 */
+      '?', /* U+4F04 */
+      '?', /* U+4F05 */
+      '?', /* U+4F06 */
+      '?', /* U+4F07 */
+      '?', /* U+4F08 */
+   0x98c2, /* U+4F09 */
+   0x88c9, /* U+4F0A */
+      '?', /* U+4F0B */
+      '?', /* U+4F0C */
+   0x8cde, /* U+4F0D */
+   0x8aea, /* U+4F0E */
+   0x959a, /* U+4F0F */
+   0x94b0, /* U+4F10 */
+   0x8b78, /* U+4F11 */
+      '?', /* U+4F12 */
+      '?', /* U+4F13 */
+      '?', /* U+4F14 */
+      '?', /* U+4F15 */
+      '?', /* U+4F16 */
+      '?', /* U+4F17 */
+      '?', /* U+4F18 */
+      '?', /* U+4F19 */
+   0x89ef, /* U+4F1A */
+      '?', /* U+4F1B */
+   0x98e5, /* U+4F1C */
+   0x9360, /* U+4F1D */
+      '?', /* U+4F1E */
+      '?', /* U+4F1F */
+      '?', /* U+4F20 */
+      '?', /* U+4F21 */
+      '?', /* U+4F22 */
+      '?', /* U+4F23 */
+      '?', /* U+4F24 */
+      '?', /* U+4F25 */
+      '?', /* U+4F26 */
+      '?', /* U+4F27 */
+      '?', /* U+4F28 */
+      '?', /* U+4F29 */
+      '?', /* U+4F2A */
+      '?', /* U+4F2B */
+      '?', /* U+4F2C */
+      '?', /* U+4F2D */
+      '?', /* U+4F2E */
+   0x948c, /* U+4F2F */
+   0x98c4, /* U+4F30 */
+      '?', /* U+4F31 */
+      '?', /* U+4F32 */
+      '?', /* U+4F33 */
+   0x94ba, /* U+4F34 */
+      '?', /* U+4F35 */
+   0x97e0, /* U+4F36 */
+      '?', /* U+4F37 */
+   0x904c, /* U+4F38 */
+   0xfa6d, /* U+4F39 */
+   0x8e66, /* U+4F3A */
+      '?', /* U+4F3B */
+   0x8e97, /* U+4F3C */
+   0x89be, /* U+4F3D */
+      '?', /* U+4F3E */
+      '?', /* U+4F3F */
+      '?', /* U+4F40 */
+      '?', /* U+4F41 */
+      '?', /* U+4F42 */
+   0x92cf, /* U+4F43 */
+      '?', /* U+4F44 */
+      '?', /* U+4F45 */
+   0x9241, /* U+4F46 */
+   0x98c8, /* U+4F47 */
+      '?', /* U+4F48 */
+      '?', /* U+4F49 */
+      '?', /* U+4F4A */
+      '?', /* U+4F4B */
+      '?', /* U+4F4C */
+   0x88ca, /* U+4F4D */
+   0x92e1, /* U+4F4E */
+   0x8f5a, /* U+4F4F */
+   0x8db2, /* U+4F50 */
+   0x9743, /* U+4F51 */
+      '?', /* U+4F52 */
+   0x91cc, /* U+4F53 */
+      '?', /* U+4F54 */
+   0x89bd, /* U+4F55 */
+   0xfa6e, /* U+4F56 */
+   0x98c7, /* U+4F57 */
+      '?', /* U+4F58 */
+   0x975d, /* U+4F59 */
+   0x98c3, /* U+4F5A */
+   0x98c5, /* U+4F5B */
+   0x8dec, /* U+4F5C */
+   0x98c6, /* U+4F5D */
+   0x9b43, /* U+4F5E */
+      '?', /* U+4F5F */
+      '?', /* U+4F60 */
+      '?', /* U+4F61 */
+      '?', /* U+4F62 */
+      '?', /* U+4F63 */
+      '?', /* U+4F64 */
+      '?', /* U+4F65 */
+      '?', /* U+4F66 */
+      '?', /* U+4F67 */
+      '?', /* U+4F68 */
+   0x98ce, /* U+4F69 */
+      '?', /* U+4F6A */
+      '?', /* U+4F6B */
+      '?', /* U+4F6C */
+      '?', /* U+4F6D */
+      '?', /* U+4F6E */
+   0x98d1, /* U+4F6F */
+   0x98cf, /* U+4F70 */
+      '?', /* U+4F71 */
+      '?', /* U+4F72 */
+   0x89c0, /* U+4F73 */
+      '?', /* U+4F74 */
+   0x95b9, /* U+4F75 */
+   0x98c9, /* U+4F76 */
+      '?', /* U+4F77 */
+      '?', /* U+4F78 */
+      '?', /* U+4F79 */
+      '?', /* U+4F7A */
+   0x98cd, /* U+4F7B */
+   0x8cf1, /* U+4F7C */
+      '?', /* U+4F7D */
+      '?', /* U+4F7E */
+   0x8e67, /* U+4F7F */
+      '?', /* U+4F80 */
+      '?', /* U+4F81 */
+      '?', /* U+4F82 */
+   0x8aa4, /* U+4F83 */
+      '?', /* U+4F84 */
+      '?', /* U+4F85 */
+   0x98d2, /* U+4F86 */
+      '?', /* U+4F87 */
+   0x98ca, /* U+4F88 */
+      '?', /* U+4F89 */
+   0xfa70, /* U+4F8A */
+   0x97e1, /* U+4F8B */
+      '?', /* U+4F8C */
+   0x8e98, /* U+4F8D */
+      '?', /* U+4F8E */
+   0x98cb, /* U+4F8F */
+      '?', /* U+4F90 */
+   0x98d0, /* U+4F91 */
+   0xfa6f, /* U+4F92 */
+      '?', /* U+4F93 */
+   0xfa72, /* U+4F94 */
+      '?', /* U+4F95 */
+   0x98d3, /* U+4F96 */
+      '?', /* U+4F97 */
+   0x98cc, /* U+4F98 */
+      '?', /* U+4F99 */
+   0xfa71, /* U+4F9A */
+   0x8b9f, /* U+4F9B */
+      '?', /* U+4F9C */
+   0x88cb, /* U+4F9D */
+      '?', /* U+4F9E */
+      '?', /* U+4F9F */
+   0x8ba0, /* U+4FA0 */
+   0x89bf, /* U+4FA1 */
+      '?', /* U+4FA2 */
+      '?', /* U+4FA3 */
+      '?', /* U+4FA4 */
+      '?', /* U+4FA5 */
+      '?', /* U+4FA6 */
+      '?', /* U+4FA7 */
+      '?', /* U+4FA8 */
+      '?', /* U+4FA9 */
+      '?', /* U+4FAA */
+   0x9b44, /* U+4FAB */
+      '?', /* U+4FAC */
+   0x9699, /* U+4FAD */
+   0x958e, /* U+4FAE */
+   0x8cf2, /* U+4FAF */
+      '?', /* U+4FB0 */
+      '?', /* U+4FB1 */
+      '?', /* U+4FB2 */
+      '?', /* U+4FB3 */
+      '?', /* U+4FB4 */
+   0x904e, /* U+4FB5 */
+   0x97b5, /* U+4FB6 */
+      '?', /* U+4FB7 */
+      '?', /* U+4FB8 */
+      '?', /* U+4FB9 */
+      '?', /* U+4FBA */
+      '?', /* U+4FBB */
+      '?', /* U+4FBC */
+      '?', /* U+4FBD */
+      '?', /* U+4FBE */
+   0x95d6, /* U+4FBF */
+      '?', /* U+4FC0 */
+      '?', /* U+4FC1 */
+   0x8c57, /* U+4FC2 */
+   0x91a3, /* U+4FC3 */
+   0x89e2, /* U+4FC4 */
+      '?', /* U+4FC5 */
+      '?', /* U+4FC6 */
+      '?', /* U+4FC7 */
+      '?', /* U+4FC8 */
+   0xfa61, /* U+4FC9 */
+   0x8f72, /* U+4FCA */
+      '?', /* U+4FCB */
+      '?', /* U+4FCC */
+   0xfa73, /* U+4FCD */
+   0x98d7, /* U+4FCE */
+      '?', /* U+4FCF */
+   0x98dc, /* U+4FD0 */
+   0x98da, /* U+4FD1 */
+      '?', /* U+4FD2 */
+      '?', /* U+4FD3 */
+   0x98d5, /* U+4FD4 */
+      '?', /* U+4FD5 */
+      '?', /* U+4FD6 */
+   0x91ad, /* U+4FD7 */
+   0x98d8, /* U+4FD8 */
+      '?', /* U+4FD9 */
+   0x98db, /* U+4FDA */
+   0x98d9, /* U+4FDB */
+      '?', /* U+4FDC */
+   0x95db, /* U+4FDD */
+      '?', /* U+4FDE */
+   0x98d6, /* U+4FDF */
+      '?', /* U+4FE0 */
+   0x904d, /* U+4FE1 */
+      '?', /* U+4FE2 */
+   0x9693, /* U+4FE3 */
+   0x98dd, /* U+4FE4 */
+   0x98de, /* U+4FE5 */
+      '?', /* U+4FE6 */
+      '?', /* U+4FE7 */
+      '?', /* U+4FE8 */
+      '?', /* U+4FE9 */
+      '?', /* U+4FEA */
+      '?', /* U+4FEB */
+      '?', /* U+4FEC */
+      '?', /* U+4FED */
+   0x8f43, /* U+4FEE */
+   0x98eb, /* U+4FEF */
+      '?', /* U+4FF0 */
+      '?', /* U+4FF1 */
+      '?', /* U+4FF2 */
+   0x946f, /* U+4FF3 */
+      '?', /* U+4FF4 */
+   0x9555, /* U+4FF5 */
+   0x98e6, /* U+4FF6 */
+      '?', /* U+4FF7 */
+   0x95ee, /* U+4FF8 */
+      '?', /* U+4FF9 */
+   0x89b4, /* U+4FFA */
+      '?', /* U+4FFB */
+      '?', /* U+4FFC */
+      '?', /* U+4FFD */
+   0x98ea, /* U+4FFE */
+   0xfa76, /* U+4FFF */
+      '?', /* U+5000 */
+      '?', /* U+5001 */
+      '?', /* U+5002 */
+      '?', /* U+5003 */
+      '?', /* U+5004 */
+   0x98e4, /* U+5005 */
+   0x98ed, /* U+5006 */
+      '?', /* U+5007 */
+      '?', /* U+5008 */
+   0x9171, /* U+5009 */
+      '?', /* U+500A */
+   0x8cc2, /* U+500B */
+      '?', /* U+500C */
+   0x947b, /* U+500D */
+      '?', /* U+500E */
+   0xe0c5, /* U+500F */
+      '?', /* U+5010 */
+   0x98ec, /* U+5011 */
+   0x937c, /* U+5012 */
+      '?', /* U+5013 */
+   0x98e1, /* U+5014 */
+      '?', /* U+5015 */
+   0x8cf4, /* U+5016 */
+      '?', /* U+5017 */
+      '?', /* U+5018 */
+   0x8cf3, /* U+5019 */
+   0x98df, /* U+501A */
+      '?', /* U+501B */
+      '?', /* U+501C */
+      '?', /* U+501D */
+   0xfa77, /* U+501E */
+   0x8ed8, /* U+501F */
+      '?', /* U+5020 */
+   0x98e7, /* U+5021 */
+   0xfa75, /* U+5022 */
+   0x95ed, /* U+5023 */
+   0x926c, /* U+5024 */
+   0x98e3, /* U+5025 */
+   0x8c91, /* U+5026 */
+      '?', /* U+5027 */
+   0x98e0, /* U+5028 */
+   0x98e8, /* U+5029 */
+   0x98e2, /* U+502A */
+   0x97cf, /* U+502B */
+   0x98e9, /* U+502C */
+   0x9860, /* U+502D */
+      '?', /* U+502E */
+      '?', /* U+502F */
+      '?', /* U+5030 */
+      '?', /* U+5031 */
+      '?', /* U+5032 */
+      '?', /* U+5033 */
+      '?', /* U+5034 */
+      '?', /* U+5035 */
+   0x8be4, /* U+5036 */
+      '?', /* U+5037 */
+      '?', /* U+5038 */
+   0x8c90, /* U+5039 */
+      '?', /* U+503A */
+      '?', /* U+503B */
+      '?', /* U+503C */
+      '?', /* U+503D */
+      '?', /* U+503E */
+      '?', /* U+503F */
+   0xfa74, /* U+5040 */
+      '?', /* U+5041 */
+   0xfa7a, /* U+5042 */
+   0x98ee, /* U+5043 */
+      '?', /* U+5044 */
+      '?', /* U+5045 */
+   0xfa78, /* U+5046 */
+   0x98ef, /* U+5047 */
+   0x98f3, /* U+5048 */
+   0x88cc, /* U+5049 */
+      '?', /* U+504A */
+      '?', /* U+504B */
+      '?', /* U+504C */
+      '?', /* U+504D */
+      '?', /* U+504E */
+   0x95ce, /* U+504F */
+   0x98f2, /* U+5050 */
+      '?', /* U+5051 */
+      '?', /* U+5052 */
+      '?', /* U+5053 */
+      '?', /* U+5054 */
+   0x98f1, /* U+5055 */
+   0x98f5, /* U+5056 */
+      '?', /* U+5057 */
+      '?', /* U+5058 */
+      '?', /* U+5059 */
+   0x98f4, /* U+505A */
+      '?', /* U+505B */
+   0x92e2, /* U+505C */
+      '?', /* U+505D */
+      '?', /* U+505E */
+      '?', /* U+505F */
+      '?', /* U+5060 */
+      '?', /* U+5061 */
+      '?', /* U+5062 */
+      '?', /* U+5063 */
+      '?', /* U+5064 */
+   0x8c92, /* U+5065 */
+      '?', /* U+5066 */
+      '?', /* U+5067 */
+      '?', /* U+5068 */
+      '?', /* U+5069 */
+      '?', /* U+506A */
+      '?', /* U+506B */
+   0x98f6, /* U+506C */
+      '?', /* U+506D */
+      '?', /* U+506E */
+      '?', /* U+506F */
+   0xfa79, /* U+5070 */
+      '?', /* U+5071 */
+   0x8ec3, /* U+5072 */
+      '?', /* U+5073 */
+   0x91a4, /* U+5074 */
+   0x92e3, /* U+5075 */
+   0x8bf4, /* U+5076 */
+      '?', /* U+5077 */
+   0x98f7, /* U+5078 */
+      '?', /* U+5079 */
+      '?', /* U+507A */
+      '?', /* U+507B */
+      '?', /* U+507C */
+   0x8b55, /* U+507D */
+      '?', /* U+507E */
+      '?', /* U+507F */
+   0x98f8, /* U+5080 */
+      '?', /* U+5081 */
+      '?', /* U+5082 */
+      '?', /* U+5083 */
+      '?', /* U+5084 */
+   0x98fa, /* U+5085 */
+      '?', /* U+5086 */
+      '?', /* U+5087 */
+      '?', /* U+5088 */
+      '?', /* U+5089 */
+      '?', /* U+508A */
+      '?', /* U+508B */
+      '?', /* U+508C */
+   0x9654, /* U+508D */
+      '?', /* U+508E */
+      '?', /* U+508F */
+      '?', /* U+5090 */
+   0x8c86, /* U+5091 */
+      '?', /* U+5092 */
+      '?', /* U+5093 */
+   0xfa7b, /* U+5094 */
+      '?', /* U+5095 */
+      '?', /* U+5096 */
+      '?', /* U+5097 */
+   0x8e50, /* U+5098 */
+   0x94f5, /* U+5099 */
+   0x98f9, /* U+509A */
+      '?', /* U+509B */
+      '?', /* U+509C */
+      '?', /* U+509D */
+      '?', /* U+509E */
+      '?', /* U+509F */
+      '?', /* U+50A0 */
+      '?', /* U+50A1 */
+      '?', /* U+50A2 */
+      '?', /* U+50A3 */
+      '?', /* U+50A4 */
+      '?', /* U+50A5 */
+      '?', /* U+50A6 */
+      '?', /* U+50A7 */
+      '?', /* U+50A8 */
+      '?', /* U+50A9 */
+      '?', /* U+50AA */
+      '?', /* U+50AB */
+   0x8dc3, /* U+50AC */
+   0x9762, /* U+50AD */
+      '?', /* U+50AE */
+      '?', /* U+50AF */
+      '?', /* U+50B0 */
+      '?', /* U+50B1 */
+   0x98fc, /* U+50B2 */
+   0x9942, /* U+50B3 */
+   0x98fb, /* U+50B4 */
+   0x8dc2, /* U+50B5 */
+      '?', /* U+50B6 */
+   0x8f9d, /* U+50B7 */
+      '?', /* U+50B8 */
+      '?', /* U+50B9 */
+      '?', /* U+50BA */
+      '?', /* U+50BB */
+      '?', /* U+50BC */
+      '?', /* U+50BD */
+   0x8c58, /* U+50BE */
+      '?', /* U+50BF */
+      '?', /* U+50C0 */
+      '?', /* U+50C1 */
+   0x9943, /* U+50C2 */
+      '?', /* U+50C3 */
+      '?', /* U+50C4 */
+   0x8bcd, /* U+50C5 */
+      '?', /* U+50C6 */
+      '?', /* U+50C7 */
+      '?', /* U+50C8 */
+   0x9940, /* U+50C9 */
+   0x9941, /* U+50CA */
+      '?', /* U+50CB */
+      '?', /* U+50CC */
+   0x93ad, /* U+50CD */
+      '?', /* U+50CE */
+   0x919c, /* U+50CF */
+      '?', /* U+50D0 */
+   0x8ba1, /* U+50D1 */
+      '?', /* U+50D2 */
+      '?', /* U+50D3 */
+      '?', /* U+50D4 */
+   0x966c, /* U+50D5 */
+   0x9944, /* U+50D6 */
+      '?', /* U+50D7 */
+   0xfa7d, /* U+50D8 */
+      '?', /* U+50D9 */
+   0x97bb, /* U+50DA */
+      '?', /* U+50DB */
+      '?', /* U+50DC */
+      '?', /* U+50DD */
+   0x9945, /* U+50DE */
+      '?', /* U+50DF */
+      '?', /* U+50E0 */
+      '?', /* U+50E1 */
+      '?', /* U+50E2 */
+   0x9948, /* U+50E3 */
+      '?', /* U+50E4 */
+   0x9946, /* U+50E5 */
+      '?', /* U+50E6 */
+   0x916d, /* U+50E7 */
+      '?', /* U+50E8 */
+      '?', /* U+50E9 */
+      '?', /* U+50EA */
+      '?', /* U+50EB */
+      '?', /* U+50EC */
+   0x9947, /* U+50ED */
+   0x9949, /* U+50EE */
+      '?', /* U+50EF */
+      '?', /* U+50F0 */
+      '?', /* U+50F1 */
+      '?', /* U+50F2 */
+      '?', /* U+50F3 */
+   0xfa7c, /* U+50F4 */
+   0x994b, /* U+50F5 */
+      '?', /* U+50F6 */
+      '?', /* U+50F7 */
+      '?', /* U+50F8 */
+   0x994a, /* U+50F9 */
+      '?', /* U+50FA */
+   0x95c6, /* U+50FB */
+      '?', /* U+50FC */
+      '?', /* U+50FD */
+      '?', /* U+50FE */
+      '?', /* U+50FF */
+   0x8b56, /* U+5100 */
+   0x994d, /* U+5101 */
+   0x994e, /* U+5102 */
+      '?', /* U+5103 */
+   0x89ad, /* U+5104 */
+      '?', /* U+5105 */
+      '?', /* U+5106 */
+      '?', /* U+5107 */
+      '?', /* U+5108 */
+   0x994c, /* U+5109 */
+      '?', /* U+510A */
+      '?', /* U+510B */
+      '?', /* U+510C */
+      '?', /* U+510D */
+      '?', /* U+510E */
+      '?', /* U+510F */
+      '?', /* U+5110 */
+      '?', /* U+5111 */
+   0x8ef2, /* U+5112 */
+      '?', /* U+5113 */
+   0x9951, /* U+5114 */
+   0x9950, /* U+5115 */
+   0x994f, /* U+5116 */
+      '?', /* U+5117 */
+   0x98d4, /* U+5118 */
+      '?', /* U+5119 */
+   0x9952, /* U+511A */
+      '?', /* U+511B */
+      '?', /* U+511C */
+      '?', /* U+511D */
+      '?', /* U+511E */
+   0x8f9e, /* U+511F */
+      '?', /* U+5120 */
+   0x9953, /* U+5121 */
+      '?', /* U+5122 */
+      '?', /* U+5123 */
+      '?', /* U+5124 */
+      '?', /* U+5125 */
+      '?', /* U+5126 */
+      '?', /* U+5127 */
+      '?', /* U+5128 */
+      '?', /* U+5129 */
+   0x9744, /* U+512A */
+      '?', /* U+512B */
+      '?', /* U+512C */
+      '?', /* U+512D */
+      '?', /* U+512E */
+      '?', /* U+512F */
+      '?', /* U+5130 */
+      '?', /* U+5131 */
+   0x96d7, /* U+5132 */
+      '?', /* U+5133 */
+      '?', /* U+5134 */
+      '?', /* U+5135 */
+      '?', /* U+5136 */
+   0x9955, /* U+5137 */
+      '?', /* U+5138 */
+      '?', /* U+5139 */
+   0x9954, /* U+513A */
+   0x9957, /* U+513B */
+   0x9956, /* U+513C */
+      '?', /* U+513D */
+      '?', /* U+513E */
+   0x9958, /* U+513F */
+   0x9959, /* U+5140 */
+   0x88f2, /* U+5141 */
+      '?', /* U+5142 */
+   0x8cb3, /* U+5143 */
+   0x8c5a, /* U+5144 */
+   0x8f5b, /* U+5145 */
+   0x929b, /* U+5146 */
+   0x8ba2, /* U+5147 */
+   0x90e6, /* U+5148 */
+   0x8cf5, /* U+5149 */
+   0xfa7e, /* U+514A */
+   0x8d8e, /* U+514B */
+   0x995b, /* U+514C */
+   0x96c6, /* U+514D */
+   0x9365, /* U+514E */
+      '?', /* U+514F */
+   0x8e99, /* U+5150 */
+      '?', /* U+5151 */
+   0x995a, /* U+5152 */
+      '?', /* U+5153 */
+   0x995c, /* U+5154 */
+      '?', /* U+5155 */
+      '?', /* U+5156 */
+      '?', /* U+5157 */
+      '?', /* U+5158 */
+      '?', /* U+5159 */
+   0x937d, /* U+515A */
+      '?', /* U+515B */
+   0x8a95, /* U+515C */
+      '?', /* U+515D */
+      '?', /* U+515E */
+      '?', /* U+515F */
+      '?', /* U+5160 */
+      '?', /* U+5161 */
+   0x995d, /* U+5162 */
+      '?', /* U+5163 */
+   0xfa80, /* U+5164 */
+   0x93fc, /* U+5165 */
+      '?', /* U+5166 */
+      '?', /* U+5167 */
+   0x9153, /* U+5168 */
+   0x995f, /* U+5169 */
+   0x9960, /* U+516A */
+   0x94aa, /* U+516B */
+   0x8cf6, /* U+516C */
+   0x985a, /* U+516D */
+   0x9961, /* U+516E */
+      '?', /* U+516F */
+      '?', /* U+5170 */
+   0x8ba4, /* U+5171 */
+      '?', /* U+5172 */
+      '?', /* U+5173 */
+      '?', /* U+5174 */
+   0x95ba, /* U+5175 */
+   0x91b4, /* U+5176 */
+   0x8bef, /* U+5177 */
+   0x9354, /* U+5178 */
+      '?', /* U+5179 */
+      '?', /* U+517A */
+      '?', /* U+517B */
+   0x8c93, /* U+517C */
+      '?', /* U+517D */
+      '?', /* U+517E */
+      '?', /* U+517F */
+   0x9962, /* U+5180 */
+      '?', /* U+5181 */
+   0x9963, /* U+5182 */
+      '?', /* U+5183 */
+      '?', /* U+5184 */
+   0x93e0, /* U+5185 */
+   0x897e, /* U+5186 */
+      '?', /* U+5187 */
+      '?', /* U+5188 */
+   0x9966, /* U+5189 */
+   0x8dfb, /* U+518A */
+      '?', /* U+518B */
+   0x9965, /* U+518C */
+   0x8dc4, /* U+518D */
+      '?', /* U+518E */
+   0x9967, /* U+518F */
+   0xe3ec, /* U+5190 */
+   0x9968, /* U+5191 */
+   0x9660, /* U+5192 */
+   0x9969, /* U+5193 */
+      '?', /* U+5194 */
+   0x996a, /* U+5195 */
+   0x996b, /* U+5196 */
+   0x8fe7, /* U+5197 */
+      '?', /* U+5198 */
+   0x8eca, /* U+5199 */
+      '?', /* U+519A */
+      '?', /* U+519B */
+      '?', /* U+519C */
+   0xfa81, /* U+519D */
+      '?', /* U+519E */
+      '?', /* U+519F */
+   0x8aa5, /* U+51A0 */
+      '?', /* U+51A1 */
+   0x996e, /* U+51A2 */
+      '?', /* U+51A3 */
+   0x996c, /* U+51A4 */
+   0x96bb, /* U+51A5 */
+   0x996d, /* U+51A6 */
+      '?', /* U+51A7 */
+   0x9579, /* U+51A8 */
+   0x996f, /* U+51A9 */
+   0x9970, /* U+51AA */
+   0x9971, /* U+51AB */
+   0x937e, /* U+51AC */
+      '?', /* U+51AD */
+      '?', /* U+51AE */
+      '?', /* U+51AF */
+   0x9975, /* U+51B0 */
+   0x9973, /* U+51B1 */
+   0x9974, /* U+51B2 */
+   0x9972, /* U+51B3 */
+   0x8de1, /* U+51B4 */
+   0x9976, /* U+51B5 */
+   0x96e8, /* U+51B6 */
+   0x97e2, /* U+51B7 */
+      '?', /* U+51B8 */
+      '?', /* U+51B9 */
+      '?', /* U+51BA */
+      '?', /* U+51BB */
+      '?', /* U+51BC */
+   0x9977, /* U+51BD */
+   0xfa82, /* U+51BE */
+      '?', /* U+51BF */
+      '?', /* U+51C0 */
+      '?', /* U+51C1 */
+      '?', /* U+51C2 */
+      '?', /* U+51C3 */
+   0x90a6, /* U+51C4 */
+   0x9978, /* U+51C5 */
+   0x8f79, /* U+51C6 */
+      '?', /* U+51C7 */
+      '?', /* U+51C8 */
+   0x9979, /* U+51C9 */
+      '?', /* U+51CA */
+   0x929c, /* U+51CB */
+   0x97bd, /* U+51CC */
+   0x9380, /* U+51CD */
+      '?', /* U+51CE */
+      '?', /* U+51CF */
+      '?', /* U+51D0 */
+      '?', /* U+51D1 */
+      '?', /* U+51D2 */
+      '?', /* U+51D3 */
+      '?', /* U+51D4 */
+      '?', /* U+51D5 */
+   0x99c3, /* U+51D6 */
+      '?', /* U+51D7 */
+      '?', /* U+51D8 */
+      '?', /* U+51D9 */
+      '?', /* U+51DA */
+   0x997a, /* U+51DB */
+   0xeaa3, /* U+51DC */
+   0x8bc3, /* U+51DD */
+      '?', /* U+51DE */
+      '?', /* U+51DF */
+   0x997b, /* U+51E0 */
+   0x967d, /* U+51E1 */
+      '?', /* U+51E2 */
+      '?', /* U+51E3 */
+      '?', /* U+51E4 */
+      '?', /* U+51E5 */
+   0x8f88, /* U+51E6 */
+   0x91fa, /* U+51E7 */
+      '?', /* U+51E8 */
+   0x997d, /* U+51E9 */
+   0x93e2, /* U+51EA */
+      '?', /* U+51EB */
+   0xfa83, /* U+51EC */
+   0x997e, /* U+51ED */
+      '?', /* U+51EE */
+      '?', /* U+51EF */
+   0x9980, /* U+51F0 */
+   0x8a4d, /* U+51F1 */
+      '?', /* U+51F2 */
+      '?', /* U+51F3 */
+      '?', /* U+51F4 */
+   0x9981, /* U+51F5 */
+   0x8ba5, /* U+51F6 */
+      '?', /* U+51F7 */
+   0x93ca, /* U+51F8 */
+   0x899a, /* U+51F9 */
+   0x8f6f, /* U+51FA */
+      '?', /* U+51FB */
+      '?', /* U+51FC */
+   0x949f, /* U+51FD */
+   0x9982, /* U+51FE */
+      '?', /* U+51FF */
+   0x9381, /* U+5200 */
+      '?', /* U+5201 */
+      '?', /* U+5202 */
+   0x906e, /* U+5203 */
+   0x9983, /* U+5204 */
+      '?', /* U+5205 */
+   0x95aa, /* U+5206 */
+   0x90d8, /* U+5207 */
+   0x8aa0, /* U+5208 */
+      '?', /* U+5209 */
+   0x8aa7, /* U+520A */
+   0x9984, /* U+520B */
+      '?', /* U+520C */
+      '?', /* U+520D */
+   0x9986, /* U+520E */
+      '?', /* U+520F */
+      '?', /* U+5210 */
+   0x8c59, /* U+5211 */
+      '?', /* U+5212 */
+      '?', /* U+5213 */
+   0x9985, /* U+5214 */
+   0xfa84, /* U+5215 */
+      '?', /* U+5216 */
+   0x97f1, /* U+5217 */
+      '?', /* U+5218 */
+      '?', /* U+5219 */
+      '?', /* U+521A */
+      '?', /* U+521B */
+      '?', /* U+521C */
+   0x8f89, /* U+521D */
+      '?', /* U+521E */
+      '?', /* U+521F */
+      '?', /* U+5220 */
+      '?', /* U+5221 */
+      '?', /* U+5222 */
+      '?', /* U+5223 */
+   0x94bb, /* U+5224 */
+   0x95ca, /* U+5225 */
+      '?', /* U+5226 */
+   0x9987, /* U+5227 */
+      '?', /* U+5228 */
+   0x9798, /* U+5229 */
+   0x9988, /* U+522A */
+      '?', /* U+522B */
+      '?', /* U+522C */
+      '?', /* U+522D */
+   0x9989, /* U+522E */
+      '?', /* U+522F */
+   0x939e, /* U+5230 */
+      '?', /* U+5231 */
+      '?', /* U+5232 */
+   0x998a, /* U+5233 */
+      '?', /* U+5234 */
+      '?', /* U+5235 */
+   0x90a7, /* U+5236 */
+   0x8dfc, /* U+5237 */
+   0x8c94, /* U+5238 */
+   0x998b, /* U+5239 */
+   0x8e68, /* U+523A */
+   0x8d8f, /* U+523B */
+      '?', /* U+523C */
+      '?', /* U+523D */
+      '?', /* U+523E */
+      '?', /* U+523F */
+      '?', /* U+5240 */
+      '?', /* U+5241 */
+      '?', /* U+5242 */
+   0x92e4, /* U+5243 */
+   0x998d, /* U+5244 */
+      '?', /* U+5245 */
+      '?', /* U+5246 */
+   0x91a5, /* U+5247 */
+      '?', /* U+5248 */
+      '?', /* U+5249 */
+   0x8ded, /* U+524A */
+   0x998e, /* U+524B */
+   0x998f, /* U+524C */
+   0x914f, /* U+524D */
+      '?', /* U+524E */
+   0x998c, /* U+524F */
+      '?', /* U+5250 */
+      '?', /* U+5251 */
+      '?', /* U+5252 */
+      '?', /* U+5253 */
+   0x9991, /* U+5254 */
+      '?', /* U+5255 */
+   0x9655, /* U+5256 */
+      '?', /* U+5257 */
+      '?', /* U+5258 */
+      '?', /* U+5259 */
+      '?', /* U+525A */
+   0x8d84, /* U+525B */
+      '?', /* U+525C */
+      '?', /* U+525D */
+   0x9990, /* U+525E */
+      '?', /* U+525F */
+      '?', /* U+5260 */
+      '?', /* U+5261 */
+      '?', /* U+5262 */
+   0x8c95, /* U+5263 */
+   0x8ddc, /* U+5264 */
+   0x948d, /* U+5265 */
+      '?', /* U+5266 */
+      '?', /* U+5267 */
+      '?', /* U+5268 */
+   0x9994, /* U+5269 */
+   0x9992, /* U+526A */
+      '?', /* U+526B */
+      '?', /* U+526C */
+      '?', /* U+526D */
+      '?', /* U+526E */
+   0x959b, /* U+526F */
+   0x8fe8, /* U+5270 */
+   0x999b, /* U+5271 */
+   0x8a84, /* U+5272 */
+   0x9995, /* U+5273 */
+   0x9993, /* U+5274 */
+   0x916e, /* U+5275 */
+      '?', /* U+5276 */
+      '?', /* U+5277 */
+      '?', /* U+5278 */
+      '?', /* U+5279 */
+      '?', /* U+527A */
+      '?', /* U+527B */
+      '?', /* U+527C */
+   0x9997, /* U+527D */
+      '?', /* U+527E */
+   0x9996, /* U+527F */
+      '?', /* U+5280 */
+      '?', /* U+5281 */
+      '?', /* U+5282 */
+   0x8a63, /* U+5283 */
+      '?', /* U+5284 */
+      '?', /* U+5285 */
+      '?', /* U+5286 */
+   0x8c80, /* U+5287 */
+   0x999c, /* U+5288 */
+   0x97ab, /* U+5289 */
+      '?', /* U+528A */
+      '?', /* U+528B */
+      '?', /* U+528C */
+   0x9998, /* U+528D */
+      '?', /* U+528E */
+      '?', /* U+528F */
+      '?', /* U+5290 */
+   0x999d, /* U+5291 */
+   0x999a, /* U+5292 */
+      '?', /* U+5293 */
+   0x9999, /* U+5294 */
+      '?', /* U+5295 */
+      '?', /* U+5296 */
+      '?', /* U+5297 */
+      '?', /* U+5298 */
+      '?', /* U+5299 */
+      '?', /* U+529A */
+   0x97cd, /* U+529B */
+   0xfa85, /* U+529C */
+      '?', /* U+529D */
+      '?', /* U+529E */
+   0x8cf7, /* U+529F */
+   0x89c1, /* U+52A0 */
+      '?', /* U+52A1 */
+      '?', /* U+52A2 */
+   0x97f2, /* U+52A3 */
+      '?', /* U+52A4 */
+      '?', /* U+52A5 */
+   0xfa86, /* U+52A6 */
+      '?', /* U+52A7 */
+      '?', /* U+52A8 */
+   0x8f95, /* U+52A9 */
+   0x9377, /* U+52AA */
+   0x8d85, /* U+52AB */
+   0x99a0, /* U+52AC */
+   0x99a1, /* U+52AD */
+      '?', /* U+52AE */
+   0xfb77, /* U+52AF */
+      '?', /* U+52B0 */
+   0x97e3, /* U+52B1 */
+      '?', /* U+52B2 */
+      '?', /* U+52B3 */
+   0x984a, /* U+52B4 */
+   0x99a3, /* U+52B5 */
+      '?', /* U+52B6 */
+      '?', /* U+52B7 */
+      '?', /* U+52B8 */
+   0x8cf8, /* U+52B9 */
+      '?', /* U+52BA */
+      '?', /* U+52BB */
+   0x99a2, /* U+52BC */
+      '?', /* U+52BD */
+   0x8a4e, /* U+52BE */
+      '?', /* U+52BF */
+   0xfa87, /* U+52C0 */
+   0x99a4, /* U+52C1 */
+      '?', /* U+52C2 */
+   0x9675, /* U+52C3 */
+      '?', /* U+52C4 */
+   0x92ba, /* U+52C5 */
+      '?', /* U+52C6 */
+   0x9745, /* U+52C7 */
+      '?', /* U+52C8 */
+   0x95d7, /* U+52C9 */
+      '?', /* U+52CA */
+      '?', /* U+52CB */
+      '?', /* U+52CC */
+   0x99a5, /* U+52CD */
+      '?', /* U+52CE */
+      '?', /* U+52CF */
+      '?', /* U+52D0 */
+      '?', /* U+52D1 */
+   0xe8d3, /* U+52D2 */
+      '?', /* U+52D3 */
+      '?', /* U+52D4 */
+   0x93ae, /* U+52D5 */
+      '?', /* U+52D6 */
+   0x99a6, /* U+52D7 */
+   0x8aa8, /* U+52D8 */
+   0x96b1, /* U+52D9 */
+      '?', /* U+52DA */
+   0xfa88, /* U+52DB */
+      '?', /* U+52DC */
+   0x8f9f, /* U+52DD */
+   0x99a7, /* U+52DE */
+   0x95e5, /* U+52DF */
+   0x99ab, /* U+52E0 */
+      '?', /* U+52E1 */
+   0x90a8, /* U+52E2 */
+   0x99a8, /* U+52E3 */
+   0x8bce, /* U+52E4 */
+      '?', /* U+52E5 */
+   0x99a9, /* U+52E6 */
+   0x8aa9, /* U+52E7 */
+      '?', /* U+52E8 */
+      '?', /* U+52E9 */
+      '?', /* U+52EA */
+      '?', /* U+52EB */
+      '?', /* U+52EC */
+      '?', /* U+52ED */
+      '?', /* U+52EE */
+      '?', /* U+52EF */
+      '?', /* U+52F0 */
+      '?', /* U+52F1 */
+   0x8c4d, /* U+52F2 */
+   0x99ac, /* U+52F3 */
+      '?', /* U+52F4 */
+   0x99ad, /* U+52F5 */
+      '?', /* U+52F6 */
+      '?', /* U+52F7 */
+   0x99ae, /* U+52F8 */
+   0x99af, /* U+52F9 */
+   0x8ed9, /* U+52FA */
+      '?', /* U+52FB */
+      '?', /* U+52FC */
+      '?', /* U+52FD */
+   0x8cf9, /* U+52FE */
+   0x96dc, /* U+52FF */
+   0xfa89, /* U+5300 */
+   0x96e6, /* U+5301 */
+   0x93f5, /* U+5302 */
+      '?', /* U+5303 */
+      '?', /* U+5304 */
+   0x95ef, /* U+5305 */
+   0x99b0, /* U+5306 */
+   0xfa8a, /* U+5307 */
+   0x99b1, /* U+5308 */
+      '?', /* U+5309 */
+      '?', /* U+530A */
+      '?', /* U+530B */
+      '?', /* U+530C */
+   0x99b3, /* U+530D */
+      '?', /* U+530E */
+   0x99b5, /* U+530F */
+   0x99b4, /* U+5310 */
+      '?', /* U+5311 */
+      '?', /* U+5312 */
+      '?', /* U+5313 */
+      '?', /* U+5314 */
+   0x99b6, /* U+5315 */
+   0x89bb, /* U+5316 */
+   0x966b, /* U+5317 */
+      '?', /* U+5318 */
+   0x8dfa, /* U+5319 */
+   0x99b7, /* U+531A */
+      '?', /* U+531B */
+      '?', /* U+531C */
+   0x9178, /* U+531D */
+      '?', /* U+531E */
+      '?', /* U+531F */
+   0x8fa0, /* U+5320 */
+   0x8ba7, /* U+5321 */
+      '?', /* U+5322 */
+   0x99b8, /* U+5323 */
+   0xfa8b, /* U+5324 */
+      '?', /* U+5325 */
+      '?', /* U+5326 */
+      '?', /* U+5327 */
+      '?', /* U+5328 */
+      '?', /* U+5329 */
+   0x94d9, /* U+532A */
+      '?', /* U+532B */
+      '?', /* U+532C */
+      '?', /* U+532D */
+      '?', /* U+532E */
+   0x99b9, /* U+532F */
+      '?', /* U+5330 */
+   0x99ba, /* U+5331 */
+      '?', /* U+5332 */
+   0x99bb, /* U+5333 */
+      '?', /* U+5334 */
+      '?', /* U+5335 */
+      '?', /* U+5336 */
+      '?', /* U+5337 */
+   0x99bc, /* U+5338 */
+   0x9543, /* U+5339 */
+   0x8be6, /* U+533A */
+   0x88e3, /* U+533B */
+      '?', /* U+533C */
+      '?', /* U+533D */
+      '?', /* U+533E */
+   0x93bd, /* U+533F */
+   0x99bd, /* U+5340 */
+   0x8f5c, /* U+5341 */
+      '?', /* U+5342 */
+   0x90e7, /* U+5343 */
+      '?', /* U+5344 */
+   0x99bf, /* U+5345 */
+   0x99be, /* U+5346 */
+   0x8fa1, /* U+5347 */
+   0x8cdf, /* U+5348 */
+   0x99c1, /* U+5349 */
+   0x94bc, /* U+534A */
+      '?', /* U+534B */
+      '?', /* U+534C */
+   0x99c2, /* U+534D */
+      '?', /* U+534E */
+      '?', /* U+534F */
+      '?', /* U+5350 */
+   0x94da, /* U+5351 */
+   0x91b2, /* U+5352 */
+   0x91ec, /* U+5353 */
+   0x8ba6, /* U+5354 */
+      '?', /* U+5355 */
+      '?', /* U+5356 */
+   0x93ec, /* U+5357 */
+   0x9250, /* U+5358 */
+      '?', /* U+5359 */
+   0x948e, /* U+535A */
+      '?', /* U+535B */
+   0x966d, /* U+535C */
+      '?', /* U+535D */
+   0x99c4, /* U+535E */
+      '?', /* U+535F */
+   0x90e8, /* U+5360 */
+      '?', /* U+5361 */
+      '?', /* U+5362 */
+      '?', /* U+5363 */
+      '?', /* U+5364 */
+      '?', /* U+5365 */
+   0x8c54, /* U+5366 */
+      '?', /* U+5367 */
+      '?', /* U+5368 */
+   0x99c5, /* U+5369 */
+      '?', /* U+536A */
+      '?', /* U+536B */
+      '?', /* U+536C */
+      '?', /* U+536D */
+   0x99c6, /* U+536E */
+   0x894b, /* U+536F */
+   0x88f3, /* U+5370 */
+   0x8aeb, /* U+5371 */
+   0xfa8c, /* U+5372 */
+   0x91a6, /* U+5373 */
+   0x8b70, /* U+5374 */
+   0x9791, /* U+5375 */
+      '?', /* U+5376 */
+   0x99c9, /* U+5377 */
+   0x89b5, /* U+5378 */
+      '?', /* U+5379 */
+      '?', /* U+537A */
+   0x99c8, /* U+537B */
+      '?', /* U+537C */
+      '?', /* U+537D */
+      '?', /* U+537E */
+   0x8ba8, /* U+537F */
+      '?', /* U+5380 */
+      '?', /* U+5381 */
+   0x99ca, /* U+5382 */
+      '?', /* U+5383 */
+   0x96ef, /* U+5384 */
+      '?', /* U+5385 */
+      '?', /* U+5386 */
+      '?', /* U+5387 */
+      '?', /* U+5388 */
+      '?', /* U+5389 */
+      '?', /* U+538A */
+      '?', /* U+538B */
+      '?', /* U+538C */
+      '?', /* U+538D */
+      '?', /* U+538E */
+      '?', /* U+538F */
+      '?', /* U+5390 */
+      '?', /* U+5391 */
+      '?', /* U+5392 */
+   0xfa8d, /* U+5393 */
+      '?', /* U+5394 */
+      '?', /* U+5395 */
+   0x99cb, /* U+5396 */
+      '?', /* U+5397 */
+   0x97d0, /* U+5398 */
+      '?', /* U+5399 */
+   0x8cfa, /* U+539A */
+      '?', /* U+539B */
+      '?', /* U+539C */
+      '?', /* U+539D */
+      '?', /* U+539E */
+   0x8cb4, /* U+539F */
+   0x99cc, /* U+53A0 */
+      '?', /* U+53A1 */
+      '?', /* U+53A2 */
+      '?', /* U+53A3 */
+      '?', /* U+53A4 */
+   0x99ce, /* U+53A5 */
+   0x99cd, /* U+53A6 */
+      '?', /* U+53A7 */
+   0x907e, /* U+53A8 */
+   0x8958, /* U+53A9 */
+      '?', /* U+53AA */
+      '?', /* U+53AB */
+      '?', /* U+53AC */
+   0x897d, /* U+53AD */
+   0x99cf, /* U+53AE */
+      '?', /* U+53AF */
+   0x99d0, /* U+53B0 */
+      '?', /* U+53B1 */
+   0xfa8e, /* U+53B2 */
+   0x8cb5, /* U+53B3 */
+      '?', /* U+53B4 */
+      '?', /* U+53B5 */
+   0x99d1, /* U+53B6 */
+      '?', /* U+53B7 */
+      '?', /* U+53B8 */
+      '?', /* U+53B9 */
+      '?', /* U+53BA */
+   0x8b8e, /* U+53BB */
+      '?', /* U+53BC */
+      '?', /* U+53BD */
+      '?', /* U+53BE */
+      '?', /* U+53BF */
+      '?', /* U+53C0 */
+      '?', /* U+53C1 */
+   0x8e51, /* U+53C2 */
+   0x99d2, /* U+53C3 */
+      '?', /* U+53C4 */
+      '?', /* U+53C5 */
+      '?', /* U+53C6 */
+      '?', /* U+53C7 */
+   0x9694, /* U+53C8 */
+   0x8db3, /* U+53C9 */
+   0x8b79, /* U+53CA */
+   0x9746, /* U+53CB */
+   0x916f, /* U+53CC */
+   0x94bd, /* U+53CD */
+   0x8efb, /* U+53CE */
+      '?', /* U+53CF */
+      '?', /* U+53D0 */
+      '?', /* U+53D1 */
+      '?', /* U+53D2 */
+      '?', /* U+53D3 */
+   0x8f66, /* U+53D4 */
+      '?', /* U+53D5 */
+   0x8ee6, /* U+53D6 */
+   0x8ef3, /* U+53D7 */
+      '?', /* U+53D8 */
+   0x8f96, /* U+53D9 */
+      '?', /* U+53DA */
+   0x94be, /* U+53DB */
+      '?', /* U+53DC */
+   0xfa8f, /* U+53DD */
+      '?', /* U+53DE */
+   0x99d5, /* U+53DF */
+      '?', /* U+53E0 */
+   0x8962, /* U+53E1 */
+   0x9170, /* U+53E2 */
+   0x8cfb, /* U+53E3 */
+   0x8cc3, /* U+53E4 */
+   0x8be5, /* U+53E5 */
+      '?', /* U+53E6 */
+      '?', /* U+53E7 */
+   0x99d9, /* U+53E8 */
+   0x9240, /* U+53E9 */
+   0x91fc, /* U+53EA */
+   0x8ba9, /* U+53EB */
+   0x8fa2, /* U+53EC */
+   0x99da, /* U+53ED */
+   0x99d8, /* U+53EE */
+   0x89c2, /* U+53EF */
+   0x91e4, /* U+53F0 */
+   0x8eb6, /* U+53F1 */
+   0x8e6a, /* U+53F2 */
+   0x8945, /* U+53F3 */
+      '?', /* U+53F4 */
+      '?', /* U+53F5 */
+   0x8a90, /* U+53F6 */
+   0x8d86, /* U+53F7 */
+   0x8e69, /* U+53F8 */
+      '?', /* U+53F9 */
+   0x99db, /* U+53FA */
+      '?', /* U+53FB */
+      '?', /* U+53FC */
+      '?', /* U+53FD */
+      '?', /* U+53FE */
+      '?', /* U+53FF */
+      '?', /* U+5400 */
+   0x99dc, /* U+5401 */
+      '?', /* U+5402 */
+   0x8b68, /* U+5403 */
+   0x8a65, /* U+5404 */
+      '?', /* U+5405 */
+      '?', /* U+5406 */
+      '?', /* U+5407 */
+   0x8d87, /* U+5408 */
+   0x8b67, /* U+5409 */
+   0x92dd, /* U+540A */
+   0x8944, /* U+540B */
+   0x93af, /* U+540C */
+   0x96bc, /* U+540D */
+   0x8d40, /* U+540E */
+   0x9799, /* U+540F */
+   0x9366, /* U+5410 */
+   0x8cfc, /* U+5411 */
+      '?', /* U+5412 */
+      '?', /* U+5413 */
+      '?', /* U+5414 */
+      '?', /* U+5415 */
+      '?', /* U+5416 */
+      '?', /* U+5417 */
+      '?', /* U+5418 */
+      '?', /* U+5419 */
+      '?', /* U+541A */
+   0x8c4e, /* U+541B */
+      '?', /* U+541C */
+   0x99e5, /* U+541D */
+      '?', /* U+541E */
+   0x8be1, /* U+541F */
+   0x9669, /* U+5420 */
+      '?', /* U+5421 */
+      '?', /* U+5422 */
+      '?', /* U+5423 */
+      '?', /* U+5424 */
+      '?', /* U+5425 */
+   0x94db, /* U+5426 */
+      '?', /* U+5427 */
+      '?', /* U+5428 */
+   0x99e4, /* U+5429 */
+      '?', /* U+542A */
+   0x8adc, /* U+542B */
+   0x99df, /* U+542C */
+   0x99e0, /* U+542D */
+   0x99e2, /* U+542E */
+      '?', /* U+542F */
+      '?', /* U+5430 */
+      '?', /* U+5431 */
+      '?', /* U+5432 */
+      '?', /* U+5433 */
+      '?', /* U+5434 */
+      '?', /* U+5435 */
+   0x99e3, /* U+5436 */
+      '?', /* U+5437 */
+   0x8b7a, /* U+5438 */
+   0x9081, /* U+5439 */
+      '?', /* U+543A */
+   0x95ab, /* U+543B */
+   0x99e1, /* U+543C */
+   0x99dd, /* U+543D */
+   0x8ce1, /* U+543E */
+      '?', /* U+543F */
+   0x99de, /* U+5440 */
+      '?', /* U+5441 */
+   0x9843, /* U+5442 */
+      '?', /* U+5443 */
+      '?', /* U+5444 */
+      '?', /* U+5445 */
+   0x95f0, /* U+5446 */
+      '?', /* U+5447 */
+   0x92e6, /* U+5448 */
+   0x8ce0, /* U+5449 */
+   0x8d90, /* U+544A */
+      '?', /* U+544B */
+      '?', /* U+544C */
+      '?', /* U+544D */
+   0x99e6, /* U+544E */
+      '?', /* U+544F */
+      '?', /* U+5450 */
+   0x93db, /* U+5451 */
+      '?', /* U+5452 */
+      '?', /* U+5453 */
+      '?', /* U+5454 */
+      '?', /* U+5455 */
+      '?', /* U+5456 */
+      '?', /* U+5457 */
+      '?', /* U+5458 */
+      '?', /* U+5459 */
+      '?', /* U+545A */
+      '?', /* U+545B */
+      '?', /* U+545C */
+      '?', /* U+545D */
+      '?', /* U+545E */
+   0x99ea, /* U+545F */
+      '?', /* U+5460 */
+      '?', /* U+5461 */
+      '?', /* U+5462 */
+      '?', /* U+5463 */
+      '?', /* U+5464 */
+      '?', /* U+5465 */
+      '?', /* U+5466 */
+      '?', /* U+5467 */
+   0x8efc, /* U+5468 */
+      '?', /* U+5469 */
+   0x8ef4, /* U+546A */
+      '?', /* U+546B */
+      '?', /* U+546C */
+      '?', /* U+546D */
+      '?', /* U+546E */
+      '?', /* U+546F */
+   0x99ed, /* U+5470 */
+   0x99eb, /* U+5471 */
+      '?', /* U+5472 */
+   0x96a1, /* U+5473 */
+      '?', /* U+5474 */
+   0x99e8, /* U+5475 */
+   0x99f1, /* U+5476 */
+   0x99ec, /* U+5477 */
+      '?', /* U+5478 */
+      '?', /* U+5479 */
+      '?', /* U+547A */
+   0x99ef, /* U+547B */
+   0x8cc4, /* U+547C */
+   0x96bd, /* U+547D */
+      '?', /* U+547E */
+      '?', /* U+547F */
+   0x99f0, /* U+5480 */
+      '?', /* U+5481 */
+      '?', /* U+5482 */
+      '?', /* U+5483 */
+   0x99f2, /* U+5484 */
+      '?', /* U+5485 */
+   0x99f4, /* U+5486 */
+      '?', /* U+5487 */
+      '?', /* U+5488 */
+      '?', /* U+5489 */
+   0xfa92, /* U+548A */
+   0x8dee, /* U+548B */
+   0x9861, /* U+548C */
+      '?', /* U+548D */
+   0x99e9, /* U+548E */
+   0x99e7, /* U+548F */
+   0x99f3, /* U+5490 */
+      '?', /* U+5491 */
+   0x99ee, /* U+5492 */
+      '?', /* U+5493 */
+      '?', /* U+5494 */
+      '?', /* U+5495 */
+      '?', /* U+5496 */
+      '?', /* U+5497 */
+      '?', /* U+5498 */
+      '?', /* U+5499 */
+      '?', /* U+549A */
+      '?', /* U+549B */
+   0xfa91, /* U+549C */
+      '?', /* U+549D */
+      '?', /* U+549E */
+      '?', /* U+549F */
+      '?', /* U+54A0 */
+      '?', /* U+54A1 */
+   0x99f6, /* U+54A2 */
+      '?', /* U+54A3 */
+   0x9a42, /* U+54A4 */
+   0x99f8, /* U+54A5 */
+      '?', /* U+54A6 */
+      '?', /* U+54A7 */
+   0x99fc, /* U+54A8 */
+   0xfa93, /* U+54A9 */
+      '?', /* U+54AA */
+   0x9a40, /* U+54AB */
+   0x99f9, /* U+54AC */
+      '?', /* U+54AD */
+      '?', /* U+54AE */
+   0x9a5d, /* U+54AF */
+      '?', /* U+54B0 */
+      '?', /* U+54B1 */
+   0x8de7, /* U+54B2 */
+   0x8a50, /* U+54B3 */
+      '?', /* U+54B4 */
+      '?', /* U+54B5 */
+      '?', /* U+54B6 */
+      '?', /* U+54B7 */
+   0x99f7, /* U+54B8 */
+      '?', /* U+54B9 */
+      '?', /* U+54BA */
+      '?', /* U+54BB */
+   0x9a44, /* U+54BC */
+   0x88f4, /* U+54BD */
+   0x9a43, /* U+54BE */
+      '?', /* U+54BF */
+   0x88a3, /* U+54C0 */
+   0x9569, /* U+54C1 */
+   0x9a41, /* U+54C2 */
+      '?', /* U+54C3 */
+   0x99fa, /* U+54C4 */
+      '?', /* U+54C5 */
+      '?', /* U+54C6 */
+   0x99f5, /* U+54C7 */
+   0x99fb, /* U+54C8 */
+   0x8dc6, /* U+54C9 */
+      '?', /* U+54CA */
+      '?', /* U+54CB */
+      '?', /* U+54CC */
+      '?', /* U+54CD */
+      '?', /* U+54CE */
+      '?', /* U+54CF */
+      '?', /* U+54D0 */
+      '?', /* U+54D1 */
+      '?', /* U+54D2 */
+      '?', /* U+54D3 */
+      '?', /* U+54D4 */
+      '?', /* U+54D5 */
+      '?', /* U+54D6 */
+      '?', /* U+54D7 */
+   0x9a45, /* U+54D8 */
+      '?', /* U+54D9 */
+      '?', /* U+54DA */
+      '?', /* U+54DB */
+      '?', /* U+54DC */
+      '?', /* U+54DD */
+      '?', /* U+54DE */
+      '?', /* U+54DF */
+      '?', /* U+54E0 */
+   0x88f5, /* U+54E1 */
+   0x9a4e, /* U+54E2 */
+      '?', /* U+54E3 */
+      '?', /* U+54E4 */
+   0x9a46, /* U+54E5 */
+   0x9a47, /* U+54E6 */
+      '?', /* U+54E7 */
+   0x8fa3, /* U+54E8 */
+   0x9689, /* U+54E9 */
+      '?', /* U+54EA */
+      '?', /* U+54EB */
+      '?', /* U+54EC */
+   0x9a4c, /* U+54ED */
+   0x9a4b, /* U+54EE */
+      '?', /* U+54EF */
+      '?', /* U+54F0 */
+      '?', /* U+54F1 */
+   0x934e, /* U+54F2 */
+      '?', /* U+54F3 */
+      '?', /* U+54F4 */
+      '?', /* U+54F5 */
+      '?', /* U+54F6 */
+      '?', /* U+54F7 */
+      '?', /* U+54F8 */
+      '?', /* U+54F9 */
+   0x9a4d, /* U+54FA */
+      '?', /* U+54FB */
+      '?', /* U+54FC */
+   0x9a4a, /* U+54FD */
+      '?', /* U+54FE */
+   0xfa94, /* U+54FF */
+      '?', /* U+5500 */
+      '?', /* U+5501 */
+      '?', /* U+5502 */
+      '?', /* U+5503 */
+   0x8953, /* U+5504 */
+      '?', /* U+5505 */
+   0x8db4, /* U+5506 */
+   0x904f, /* U+5507 */
+      '?', /* U+5508 */
+      '?', /* U+5509 */
+      '?', /* U+550A */
+      '?', /* U+550B */
+      '?', /* U+550C */
+      '?', /* U+550D */
+      '?', /* U+550E */
+   0x9a48, /* U+550F */
+   0x9382, /* U+5510 */
+      '?', /* U+5511 */
+      '?', /* U+5512 */
+      '?', /* U+5513 */
+   0x9a49, /* U+5514 */
+      '?', /* U+5515 */
+   0x88a0, /* U+5516 */
+      '?', /* U+5517 */
+      '?', /* U+5518 */
+      '?', /* U+5519 */
+      '?', /* U+551A */
+      '?', /* U+551B */
+      '?', /* U+551C */
+      '?', /* U+551D */
+      '?', /* U+551E */
+      '?', /* U+551F */
+      '?', /* U+5520 */
+      '?', /* U+5521 */
+      '?', /* U+5522 */
+      '?', /* U+5523 */
+      '?', /* U+5524 */
+      '?', /* U+5525 */
+      '?', /* U+5526 */
+      '?', /* U+5527 */
+      '?', /* U+5528 */
+      '?', /* U+5529 */
+      '?', /* U+552A */
+      '?', /* U+552B */
+      '?', /* U+552C */
+      '?', /* U+552D */
+   0x9a53, /* U+552E */
+   0x9742, /* U+552F */
+      '?', /* U+5530 */
+   0x8fa5, /* U+5531 */
+      '?', /* U+5532 */
+   0x9a59, /* U+5533 */
+      '?', /* U+5534 */
+      '?', /* U+5535 */
+      '?', /* U+5536 */
+      '?', /* U+5537 */
+   0x9a58, /* U+5538 */
+   0x9a4f, /* U+5539 */
+      '?', /* U+553A */
+      '?', /* U+553B */
+      '?', /* U+553C */
+      '?', /* U+553D */
+   0x91c1, /* U+553E */
+      '?', /* U+553F */
+   0x9a50, /* U+5540 */
+      '?', /* U+5541 */
+      '?', /* U+5542 */
+      '?', /* U+5543 */
+   0x91ed, /* U+5544 */
+   0x9a55, /* U+5545 */
+   0x8fa4, /* U+5546 */
+      '?', /* U+5547 */
+      '?', /* U+5548 */
+      '?', /* U+5549 */
+      '?', /* U+554A */
+      '?', /* U+554B */
+   0x9a52, /* U+554C */
+      '?', /* U+554D */
+      '?', /* U+554E */
+   0x96e2, /* U+554F */
+      '?', /* U+5550 */
+      '?', /* U+5551 */
+      '?', /* U+5552 */
+   0x8c5b, /* U+5553 */
+      '?', /* U+5554 */
+      '?', /* U+5555 */
+   0x9a56, /* U+5556 */
+   0x9a57, /* U+5557 */
+      '?', /* U+5558 */
+      '?', /* U+5559 */
+      '?', /* U+555A */
+      '?', /* U+555B */
+   0x9a54, /* U+555C */
+   0x9a5a, /* U+555D */
+      '?', /* U+555E */
+      '?', /* U+555F */
+      '?', /* U+5560 */
+      '?', /* U+5561 */
+      '?', /* U+5562 */
+   0x9a51, /* U+5563 */
+      '?', /* U+5564 */
+      '?', /* U+5565 */
+      '?', /* U+5566 */
+      '?', /* U+5567 */
+      '?', /* U+5568 */
+      '?', /* U+5569 */
+      '?', /* U+556A */
+      '?', /* U+556B */
+      '?', /* U+556C */
+      '?', /* U+556D */
+      '?', /* U+556E */
+      '?', /* U+556F */
+      '?', /* U+5570 */
+      '?', /* U+5571 */
+      '?', /* U+5572 */
+      '?', /* U+5573 */
+      '?', /* U+5574 */
+      '?', /* U+5575 */
+      '?', /* U+5576 */
+      '?', /* U+5577 */
+      '?', /* U+5578 */
+      '?', /* U+5579 */
+      '?', /* U+557A */
+   0x9a60, /* U+557B */
+   0x9a65, /* U+557C */
+      '?', /* U+557D */
+   0x9a61, /* U+557E */
+      '?', /* U+557F */
+   0x9a5c, /* U+5580 */
+      '?', /* U+5581 */
+      '?', /* U+5582 */
+   0x9a66, /* U+5583 */
+   0x9150, /* U+5584 */
+      '?', /* U+5585 */
+   0xfa95, /* U+5586 */
+   0x9a68, /* U+5587 */
+      '?', /* U+5588 */
+   0x8d41, /* U+5589 */
+   0x9a5e, /* U+558A */
+   0x929d, /* U+558B */
+      '?', /* U+558C */
+      '?', /* U+558D */
+      '?', /* U+558E */
+      '?', /* U+558F */
+      '?', /* U+5590 */
+      '?', /* U+5591 */
+      '?', /* U+5592 */
+      '?', /* U+5593 */
+      '?', /* U+5594 */
+      '?', /* U+5595 */
+      '?', /* U+5596 */
+      '?', /* U+5597 */
+   0x9a62, /* U+5598 */
+   0x9a5b, /* U+5599 */
+   0x8aab, /* U+559A */
+      '?', /* U+559B */
+   0x8aec, /* U+559C */
+   0x8a85, /* U+559D */
+   0x9a63, /* U+559E */
+   0x9a5f, /* U+559F */
+      '?', /* U+55A0 */
+      '?', /* U+55A1 */
+      '?', /* U+55A2 */
+      '?', /* U+55A3 */
+      '?', /* U+55A4 */
+      '?', /* U+55A5 */
+      '?', /* U+55A6 */
+   0x8c96, /* U+55A7 */
+   0x9a69, /* U+55A8 */
+   0x9a67, /* U+55A9 */
+   0x9172, /* U+55AA */
+   0x8b69, /* U+55AB */
+   0x8baa, /* U+55AC */
+      '?', /* U+55AD */
+   0x9a64, /* U+55AE */
+      '?', /* U+55AF */
+   0x8bf2, /* U+55B0 */
+      '?', /* U+55B1 */
+      '?', /* U+55B2 */
+      '?', /* U+55B3 */
+      '?', /* U+55B4 */
+      '?', /* U+55B5 */
+   0x8963, /* U+55B6 */
+      '?', /* U+55B7 */
+      '?', /* U+55B8 */
+      '?', /* U+55B9 */
+      '?', /* U+55BA */
+      '?', /* U+55BB */
+      '?', /* U+55BC */
+      '?', /* U+55BD */
+      '?', /* U+55BE */
+      '?', /* U+55BF */
+      '?', /* U+55C0 */
+      '?', /* U+55C1 */
+      '?', /* U+55C2 */
+      '?', /* U+55C3 */
+   0x9a6d, /* U+55C4 */
+   0x9a6b, /* U+55C5 */
+      '?', /* U+55C6 */
+   0x9aa5, /* U+55C7 */
+      '?', /* U+55C8 */
+      '?', /* U+55C9 */
+      '?', /* U+55CA */
+      '?', /* U+55CB */
+      '?', /* U+55CC */
+      '?', /* U+55CD */
+      '?', /* U+55CE */
+      '?', /* U+55CF */
+      '?', /* U+55D0 */
+      '?', /* U+55D1 */
+      '?', /* U+55D2 */
+      '?', /* U+55D3 */
+   0x9a70, /* U+55D4 */
+      '?', /* U+55D5 */
+      '?', /* U+55D6 */
+      '?', /* U+55D7 */
+      '?', /* U+55D8 */
+      '?', /* U+55D9 */
+   0x9a6a, /* U+55DA */
+      '?', /* U+55DB */
+   0x9a6e, /* U+55DC */
+      '?', /* U+55DD */
+      '?', /* U+55DE */
+   0x9a6c, /* U+55DF */
+      '?', /* U+55E0 */
+      '?', /* U+55E1 */
+      '?', /* U+55E2 */
+   0x8e6b, /* U+55E3 */
+   0x9a6f, /* U+55E4 */
+      '?', /* U+55E5 */
+      '?', /* U+55E6 */
+      '?', /* U+55E7 */
+      '?', /* U+55E8 */
+      '?', /* U+55E9 */
+      '?', /* U+55EA */
+      '?', /* U+55EB */
+      '?', /* U+55EC */
+      '?', /* U+55ED */
+      '?', /* U+55EE */
+      '?', /* U+55EF */
+      '?', /* U+55F0 */
+      '?', /* U+55F1 */
+      '?', /* U+55F2 */
+      '?', /* U+55F3 */
+      '?', /* U+55F4 */
+      '?', /* U+55F5 */
+      '?', /* U+55F6 */
+   0x9a72, /* U+55F7 */
+      '?', /* U+55F8 */
+   0x9a77, /* U+55F9 */
+      '?', /* U+55FA */
+      '?', /* U+55FB */
+      '?', /* U+55FC */
+   0x9a75, /* U+55FD */
+   0x9a74, /* U+55FE */
+      '?', /* U+55FF */
+      '?', /* U+5600 */
+      '?', /* U+5601 */
+      '?', /* U+5602 */
+      '?', /* U+5603 */
+      '?', /* U+5604 */
+      '?', /* U+5605 */
+   0x9251, /* U+5606 */
+      '?', /* U+5607 */
+      '?', /* U+5608 */
+   0x89c3, /* U+5609 */
+      '?', /* U+560A */
+      '?', /* U+560B */
+      '?', /* U+560C */
+      '?', /* U+560D */
+      '?', /* U+560E */
+      '?', /* U+560F */
+      '?', /* U+5610 */
+      '?', /* U+5611 */
+      '?', /* U+5612 */
+      '?', /* U+5613 */
+   0x9a71, /* U+5614 */
+      '?', /* U+5615 */
+   0x9a73, /* U+5616 */
+   0x8fa6, /* U+5617 */
+   0x8952, /* U+5618 */
+      '?', /* U+5619 */
+      '?', /* U+561A */
+   0x9a76, /* U+561B */
+      '?', /* U+561C */
+      '?', /* U+561D */
+      '?', /* U+561E */
+      '?', /* U+561F */
+      '?', /* U+5620 */
+      '?', /* U+5621 */
+      '?', /* U+5622 */
+      '?', /* U+5623 */
+      '?', /* U+5624 */
+      '?', /* U+5625 */
+      '?', /* U+5626 */
+      '?', /* U+5627 */
+      '?', /* U+5628 */
+   0x89dc, /* U+5629 */
+      '?', /* U+562A */
+      '?', /* U+562B */
+      '?', /* U+562C */
+      '?', /* U+562D */
+      '?', /* U+562E */
+   0x9a82, /* U+562F */
+      '?', /* U+5630 */
+   0x8ffa, /* U+5631 */
+   0x9a7d, /* U+5632 */
+      '?', /* U+5633 */
+   0x9a7b, /* U+5634 */
+      '?', /* U+5635 */
+   0x9a7c, /* U+5636 */
+      '?', /* U+5637 */
+   0x9a7e, /* U+5638 */
+      '?', /* U+5639 */
+      '?', /* U+563A */
+      '?', /* U+563B */
+      '?', /* U+563C */
+      '?', /* U+563D */
+      '?', /* U+563E */
+      '?', /* U+563F */
+      '?', /* U+5640 */
+      '?', /* U+5641 */
+   0x895c, /* U+5642 */
+      '?', /* U+5643 */
+      '?', /* U+5644 */
+      '?', /* U+5645 */
+      '?', /* U+5646 */
+      '?', /* U+5647 */
+      '?', /* U+5648 */
+      '?', /* U+5649 */
+      '?', /* U+564A */
+      '?', /* U+564B */
+   0x9158, /* U+564C */
+      '?', /* U+564D */
+   0x9a78, /* U+564E */
+      '?', /* U+564F */
+   0x9a79, /* U+5650 */
+      '?', /* U+5651 */
+      '?', /* U+5652 */
+      '?', /* U+5653 */
+      '?', /* U+5654 */
+      '?', /* U+5655 */
+      '?', /* U+5656 */
+      '?', /* U+5657 */
+      '?', /* U+5658 */
+      '?', /* U+5659 */
+      '?', /* U+565A */
+   0x8a9a, /* U+565B */
+      '?', /* U+565C */
+      '?', /* U+565D */
+      '?', /* U+565E */
+      '?', /* U+565F */
+      '?', /* U+5660 */
+      '?', /* U+5661 */
+      '?', /* U+5662 */
+      '?', /* U+5663 */
+   0x9a81, /* U+5664 */
+      '?', /* U+5665 */
+      '?', /* U+5666 */
+      '?', /* U+5667 */
+   0x8aed, /* U+5668 */
+      '?', /* U+5669 */
+   0x9a84, /* U+566A */
+   0x9a80, /* U+566B */
+   0x9a83, /* U+566C */
+      '?', /* U+566D */
+      '?', /* U+566E */
+      '?', /* U+566F */
+      '?', /* U+5670 */
+      '?', /* U+5671 */
+      '?', /* U+5672 */
+      '?', /* U+5673 */
+   0x95ac, /* U+5674 */
+      '?', /* U+5675 */
+      '?', /* U+5676 */
+      '?', /* U+5677 */
+   0x93d3, /* U+5678 */
+      '?', /* U+5679 */
+   0x94b6, /* U+567A */
+      '?', /* U+567B */
+      '?', /* U+567C */
+      '?', /* U+567D */
+      '?', /* U+567E */
+      '?', /* U+567F */
+   0x9a86, /* U+5680 */
+      '?', /* U+5681 */
+      '?', /* U+5682 */
+      '?', /* U+5683 */
+      '?', /* U+5684 */
+      '?', /* U+5685 */
+   0x9a85, /* U+5686 */
+   0x8a64, /* U+5687 */
+      '?', /* U+5688 */
+      '?', /* U+5689 */
+   0x9a87, /* U+568A */
+      '?', /* U+568B */
+      '?', /* U+568C */
+      '?', /* U+568D */
+      '?', /* U+568E */
+   0x9a8a, /* U+568F */
+      '?', /* U+5690 */
+      '?', /* U+5691 */
+      '?', /* U+5692 */
+      '?', /* U+5693 */
+   0x9a89, /* U+5694 */
+      '?', /* U+5695 */
+      '?', /* U+5696 */
+      '?', /* U+5697 */
+      '?', /* U+5698 */
+      '?', /* U+5699 */
+      '?', /* U+569A */
+      '?', /* U+569B */
+      '?', /* U+569C */
+      '?', /* U+569D */
+      '?', /* U+569E */
+      '?', /* U+569F */
+   0x9a88, /* U+56A0 */
+      '?', /* U+56A1 */
+   0x9458, /* U+56A2 */
+      '?', /* U+56A3 */
+      '?', /* U+56A4 */
+   0x9a8b, /* U+56A5 */
+      '?', /* U+56A6 */
+      '?', /* U+56A7 */
+      '?', /* U+56A8 */
+      '?', /* U+56A9 */
+      '?', /* U+56AA */
+      '?', /* U+56AB */
+      '?', /* U+56AC */
+      '?', /* U+56AD */
+   0x9a8c, /* U+56AE */
+      '?', /* U+56AF */
+      '?', /* U+56B0 */
+      '?', /* U+56B1 */
+      '?', /* U+56B2 */
+      '?', /* U+56B3 */
+   0x9a8e, /* U+56B4 */
+      '?', /* U+56B5 */
+   0x9a8d, /* U+56B6 */
+      '?', /* U+56B7 */
+      '?', /* U+56B8 */
+      '?', /* U+56B9 */
+      '?', /* U+56BA */
+      '?', /* U+56BB */
+   0x9a90, /* U+56BC */
+      '?', /* U+56BD */
+      '?', /* U+56BE */
+      '?', /* U+56BF */
+   0x9a93, /* U+56C0 */
+   0x9a91, /* U+56C1 */
+   0x9a8f, /* U+56C2 */
+   0x9a92, /* U+56C3 */
+      '?', /* U+56C4 */
+      '?', /* U+56C5 */
+      '?', /* U+56C6 */
+      '?', /* U+56C7 */
+   0x9a94, /* U+56C8 */
+      '?', /* U+56C9 */
+      '?', /* U+56CA */
+      '?', /* U+56CB */
+      '?', /* U+56CC */
+      '?', /* U+56CD */
+   0x9a95, /* U+56CE */
+      '?', /* U+56CF */
+      '?', /* U+56D0 */
+   0x9a96, /* U+56D1 */
+      '?', /* U+56D2 */
+   0x9a97, /* U+56D3 */
+      '?', /* U+56D4 */
+      '?', /* U+56D5 */
+      '?', /* U+56D6 */
+   0x9a98, /* U+56D7 */
+   0x9964, /* U+56D8 */
+      '?', /* U+56D9 */
+   0x8efa, /* U+56DA */
+   0x8e6c, /* U+56DB */
+      '?', /* U+56DC */
+      '?', /* U+56DD */
+   0x89f1, /* U+56DE */
+      '?', /* U+56DF */
+   0x88f6, /* U+56E0 */
+      '?', /* U+56E1 */
+      '?', /* U+56E2 */
+   0x9263, /* U+56E3 */
+      '?', /* U+56E4 */
+      '?', /* U+56E5 */
+      '?', /* U+56E6 */
+      '?', /* U+56E7 */
+      '?', /* U+56E8 */
+      '?', /* U+56E9 */
+      '?', /* U+56EA */
+      '?', /* U+56EB */
+      '?', /* U+56EC */
+      '?', /* U+56ED */
+   0x9a99, /* U+56EE */
+      '?', /* U+56EF */
+   0x8da2, /* U+56F0 */
+      '?', /* U+56F1 */
+   0x88cd, /* U+56F2 */
+   0x907d, /* U+56F3 */
+      '?', /* U+56F4 */
+      '?', /* U+56F5 */
+      '?', /* U+56F6 */
+      '?', /* U+56F7 */
+      '?', /* U+56F8 */
+   0x9a9a, /* U+56F9 */
+   0x8cc5, /* U+56FA */
+      '?', /* U+56FB */
+      '?', /* U+56FC */
+   0x8d91, /* U+56FD */
+      '?', /* U+56FE */
+   0x9a9c, /* U+56FF */
+   0x9a9b, /* U+5700 */
+      '?', /* U+5701 */
+      '?', /* U+5702 */
+   0x95de, /* U+5703 */
+   0x9a9d, /* U+5704 */
+      '?', /* U+5705 */
+      '?', /* U+5706 */
+      '?', /* U+5707 */
+   0x9a9f, /* U+5708 */
+   0x9a9e, /* U+5709 */
+      '?', /* U+570A */
+   0x9aa0, /* U+570B */
+      '?', /* U+570C */
+   0x9aa1, /* U+570D */
+      '?', /* U+570E */
+   0x8c97, /* U+570F */
+      '?', /* U+5710 */
+      '?', /* U+5711 */
+   0x8980, /* U+5712 */
+   0x9aa2, /* U+5713 */
+      '?', /* U+5714 */
+      '?', /* U+5715 */
+   0x9aa4, /* U+5716 */
+      '?', /* U+5717 */
+   0x9aa3, /* U+5718 */
+      '?', /* U+5719 */
+      '?', /* U+571A */
+      '?', /* U+571B */
+   0x9aa6, /* U+571C */
+      '?', /* U+571D */
+      '?', /* U+571E */
+   0x9379, /* U+571F */
+      '?', /* U+5720 */
+      '?', /* U+5721 */
+      '?', /* U+5722 */
+      '?', /* U+5723 */
+      '?', /* U+5724 */
+      '?', /* U+5725 */
+   0x9aa7, /* U+5726 */
+   0x88b3, /* U+5727 */
+   0x8ddd, /* U+5728 */
+      '?', /* U+5729 */
+      '?', /* U+572A */
+      '?', /* U+572B */
+      '?', /* U+572C */
+   0x8c5c, /* U+572D */
+      '?', /* U+572E */
+      '?', /* U+572F */
+   0x926e, /* U+5730 */
+      '?', /* U+5731 */
+      '?', /* U+5732 */
+      '?', /* U+5733 */
+      '?', /* U+5734 */
+      '?', /* U+5735 */
+      '?', /* U+5736 */
+   0x9aa8, /* U+5737 */
+   0x9aa9, /* U+5738 */
+      '?', /* U+5739 */
+      '?', /* U+573A */
+   0x9aab, /* U+573B */
+      '?', /* U+573C */
+      '?', /* U+573D */
+      '?', /* U+573E */
+      '?', /* U+573F */
+   0x9aac, /* U+5740 */
+      '?', /* U+5741 */
+   0x8de2, /* U+5742 */
+      '?', /* U+5743 */
+      '?', /* U+5744 */
+      '?', /* U+5745 */
+      '?', /* U+5746 */
+   0x8bcf, /* U+5747 */
+      '?', /* U+5748 */
+      '?', /* U+5749 */
+   0x9656, /* U+574A */
+      '?', /* U+574B */
+      '?', /* U+574C */
+      '?', /* U+574D */
+   0x9aaa, /* U+574E */
+   0x9aad, /* U+574F */
+   0x8dbf, /* U+5750 */
+   0x8d42, /* U+5751 */
+      '?', /* U+5752 */
+      '?', /* U+5753 */
+      '?', /* U+5754 */
+      '?', /* U+5755 */
+      '?', /* U+5756 */
+      '?', /* U+5757 */
+      '?', /* U+5758 */
+   0xfa96, /* U+5759 */
+      '?', /* U+575A */
+      '?', /* U+575B */
+      '?', /* U+575C */
+      '?', /* U+575D */
+      '?', /* U+575E */
+      '?', /* U+575F */
+      '?', /* U+5760 */
+   0x9ab1, /* U+5761 */
+      '?', /* U+5762 */
+      '?', /* U+5763 */
+   0x8da3, /* U+5764 */
+   0xfa97, /* U+5765 */
+   0x9252, /* U+5766 */
+      '?', /* U+5767 */
+      '?', /* U+5768 */
+   0x9aae, /* U+5769 */
+   0x92d8, /* U+576A */
+      '?', /* U+576B */
+      '?', /* U+576C */
+      '?', /* U+576D */
+      '?', /* U+576E */
+      '?', /* U+576F */
+      '?', /* U+5770 */
+      '?', /* U+5771 */
+      '?', /* U+5772 */
+      '?', /* U+5773 */
+      '?', /* U+5774 */
+      '?', /* U+5775 */
+      '?', /* U+5776 */
+      '?', /* U+5777 */
+      '?', /* U+5778 */
+      '?', /* U+5779 */
+      '?', /* U+577A */
+      '?', /* U+577B */
+      '?', /* U+577C */
+      '?', /* U+577D */
+      '?', /* U+577E */
+   0x9ab2, /* U+577F */
+      '?', /* U+5780 */
+      '?', /* U+5781 */
+   0x9082, /* U+5782 */
+      '?', /* U+5783 */
+      '?', /* U+5784 */
+      '?', /* U+5785 */
+      '?', /* U+5786 */
+      '?', /* U+5787 */
+   0x9ab0, /* U+5788 */
+   0x9ab3, /* U+5789 */
+      '?', /* U+578A */
+   0x8c5e, /* U+578B */
+      '?', /* U+578C */
+      '?', /* U+578D */
+      '?', /* U+578E */
+      '?', /* U+578F */
+      '?', /* U+5790 */
+      '?', /* U+5791 */
+      '?', /* U+5792 */
+   0x9ab4, /* U+5793 */
+      '?', /* U+5794 */
+      '?', /* U+5795 */
+      '?', /* U+5796 */
+      '?', /* U+5797 */
+      '?', /* U+5798 */
+      '?', /* U+5799 */
+      '?', /* U+579A */
+      '?', /* U+579B */
+      '?', /* U+579C */
+      '?', /* U+579D */
+      '?', /* U+579E */
+      '?', /* U+579F */
+   0x9ab5, /* U+57A0 */
+      '?', /* U+57A1 */
+   0x8d43, /* U+57A2 */
+   0x8a5f, /* U+57A3 */
+   0x9ab7, /* U+57A4 */
+      '?', /* U+57A5 */
+      '?', /* U+57A6 */
+      '?', /* U+57A7 */
+      '?', /* U+57A8 */
+      '?', /* U+57A9 */
+   0x9ab8, /* U+57AA */
+      '?', /* U+57AB */
+   0xfa98, /* U+57AC */
+      '?', /* U+57AD */
+      '?', /* U+57AE */
+      '?', /* U+57AF */
+   0x9ab9, /* U+57B0 */
+      '?', /* U+57B1 */
+      '?', /* U+57B2 */
+   0x9ab6, /* U+57B3 */
+      '?', /* U+57B4 */
+      '?', /* U+57B5 */
+      '?', /* U+57B6 */
+      '?', /* U+57B7 */
+      '?', /* U+57B8 */
+      '?', /* U+57B9 */
+      '?', /* U+57BA */
+      '?', /* U+57BB */
+      '?', /* U+57BC */
+      '?', /* U+57BD */
+      '?', /* U+57BE */
+      '?', /* U+57BF */
+   0x9aaf, /* U+57C0 */
+      '?', /* U+57C1 */
+      '?', /* U+57C2 */
+   0x9aba, /* U+57C3 */
+      '?', /* U+57C4 */
+      '?', /* U+57C5 */
+   0x9abb, /* U+57C6 */
+   0xfa9a, /* U+57C7 */
+   0xfa99, /* U+57C8 */
+      '?', /* U+57C9 */
+      '?', /* U+57CA */
+   0x9684, /* U+57CB */
+      '?', /* U+57CC */
+      '?', /* U+57CD */
+   0x8fe9, /* U+57CE */
+      '?', /* U+57CF */
+      '?', /* U+57D0 */
+      '?', /* U+57D1 */
+   0x9abd, /* U+57D2 */
+   0x9abe, /* U+57D3 */
+   0x9abc, /* U+57D4 */
+      '?', /* U+57D5 */
+   0x9ac0, /* U+57D6 */
+      '?', /* U+57D7 */
+      '?', /* U+57D8 */
+      '?', /* U+57D9 */
+      '?', /* U+57DA */
+      '?', /* U+57DB */
+   0x9457, /* U+57DC */
+      '?', /* U+57DD */
+      '?', /* U+57DE */
+   0x88e6, /* U+57DF */
+   0x9575, /* U+57E0 */
+      '?', /* U+57E1 */
+      '?', /* U+57E2 */
+   0x9ac1, /* U+57E3 */
+      '?', /* U+57E4 */
+      '?', /* U+57E5 */
+      '?', /* U+57E6 */
+      '?', /* U+57E7 */
+      '?', /* U+57E8 */
+      '?', /* U+57E9 */
+      '?', /* U+57EA */
+      '?', /* U+57EB */
+      '?', /* U+57EC */
+      '?', /* U+57ED */
+      '?', /* U+57EE */
+      '?', /* U+57EF */
+      '?', /* U+57F0 */
+      '?', /* U+57F1 */
+      '?', /* U+57F2 */
+      '?', /* U+57F3 */
+   0x8ffb, /* U+57F4 */
+      '?', /* U+57F5 */
+      '?', /* U+57F6 */
+   0x8eb7, /* U+57F7 */
+      '?', /* U+57F8 */
+   0x947c, /* U+57F9 */
+   0x8aee, /* U+57FA */
+      '?', /* U+57FB */
+   0x8de9, /* U+57FC */
+      '?', /* U+57FD */
+      '?', /* U+57FE */
+      '?', /* U+57FF */
+   0x9678, /* U+5800 */
+      '?', /* U+5801 */
+   0x93b0, /* U+5802 */
+      '?', /* U+5803 */
+      '?', /* U+5804 */
+   0x8c98, /* U+5805 */
+   0x91cd, /* U+5806 */
+      '?', /* U+5807 */
+      '?', /* U+5808 */
+      '?', /* U+5809 */
+   0x9abf, /* U+580A */
+   0x9ac2, /* U+580B */
+      '?', /* U+580C */
+      '?', /* U+580D */
+      '?', /* U+580E */
+      '?', /* U+580F */
+      '?', /* U+5810 */
+      '?', /* U+5811 */
+      '?', /* U+5812 */
+      '?', /* U+5813 */
+      '?', /* U+5814 */
+   0x91c2, /* U+5815 */
+      '?', /* U+5816 */
+      '?', /* U+5817 */
+      '?', /* U+5818 */
+   0x9ac3, /* U+5819 */
+      '?', /* U+581A */
+      '?', /* U+581B */
+      '?', /* U+581C */
+   0x9ac4, /* U+581D */
+      '?', /* U+581E */
+      '?', /* U+581F */
+      '?', /* U+5820 */
+   0x9ac6, /* U+5821 */
+      '?', /* U+5822 */
+      '?', /* U+5823 */
+   0x92e7, /* U+5824 */
+      '?', /* U+5825 */
+      '?', /* U+5826 */
+      '?', /* U+5827 */
+      '?', /* U+5828 */
+      '?', /* U+5829 */
+   0x8aac, /* U+582A */
+      '?', /* U+582B */
+      '?', /* U+582C */
+      '?', /* U+582D */
+      '?', /* U+582E */
+   0xea9f, /* U+582F */
+   0x8981, /* U+5830 */
+   0x95f1, /* U+5831 */
+      '?', /* U+5832 */
+      '?', /* U+5833 */
+   0x8fea, /* U+5834 */
+   0x9367, /* U+5835 */
+      '?', /* U+5836 */
+      '?', /* U+5837 */
+      '?', /* U+5838 */
+      '?', /* U+5839 */
+   0x8de4, /* U+583A */
+      '?', /* U+583B */
+      '?', /* U+583C */
+   0x9acc, /* U+583D */
+      '?', /* U+583E */
+      '?', /* U+583F */
+   0x95bb, /* U+5840 */
+   0x97db, /* U+5841 */
+      '?', /* U+5842 */
+      '?', /* U+5843 */
+      '?', /* U+5844 */
+      '?', /* U+5845 */
+      '?', /* U+5846 */
+      '?', /* U+5847 */
+      '?', /* U+5848 */
+      '?', /* U+5849 */
+   0x89f2, /* U+584A */
+   0x9ac8, /* U+584B */
+      '?', /* U+584C */
+      '?', /* U+584D */
+      '?', /* U+584E */
+      '?', /* U+584F */
+      '?', /* U+5850 */
+   0x9159, /* U+5851 */
+   0x9acb, /* U+5852 */
+      '?', /* U+5853 */
+   0x9383, /* U+5854 */
+      '?', /* U+5855 */
+      '?', /* U+5856 */
+   0x9368, /* U+5857 */
+   0x9384, /* U+5858 */
+   0x94b7, /* U+5859 */
+   0x92cb, /* U+585A */
+      '?', /* U+585B */
+      '?', /* U+585C */
+      '?', /* U+585D */
+   0x8dc7, /* U+585E */
+      '?', /* U+585F */
+      '?', /* U+5860 */
+      '?', /* U+5861 */
+   0x9ac7, /* U+5862 */
+      '?', /* U+5863 */
+      '?', /* U+5864 */
+      '?', /* U+5865 */
+      '?', /* U+5866 */
+      '?', /* U+5867 */
+      '?', /* U+5868 */
+   0x8996, /* U+5869 */
+      '?', /* U+586A */
+   0x9355, /* U+586B */
+      '?', /* U+586C */
+      '?', /* U+586D */
+      '?', /* U+586E */
+      '?', /* U+586F */
+   0x9ac9, /* U+5870 */
+      '?', /* U+5871 */
+   0x9ac5, /* U+5872 */
+      '?', /* U+5873 */
+      '?', /* U+5874 */
+   0x906f, /* U+5875 */
+      '?', /* U+5876 */
+      '?', /* U+5877 */
+      '?', /* U+5878 */
+   0x9acd, /* U+5879 */
+      '?', /* U+587A */
+      '?', /* U+587B */
+      '?', /* U+587C */
+      '?', /* U+587D */
+   0x8f6d, /* U+587E */
+      '?', /* U+587F */
+      '?', /* U+5880 */
+      '?', /* U+5881 */
+      '?', /* U+5882 */
+   0x8bab, /* U+5883 */
+      '?', /* U+5884 */
+   0x9ace, /* U+5885 */
+      '?', /* U+5886 */
+      '?', /* U+5887 */
+      '?', /* U+5888 */
+      '?', /* U+5889 */
+      '?', /* U+588A */
+      '?', /* U+588B */
+      '?', /* U+588C */
+      '?', /* U+588D */
+      '?', /* U+588E */
+      '?', /* U+588F */
+      '?', /* U+5890 */
+      '?', /* U+5891 */
+      '?', /* U+5892 */
+   0x95e6, /* U+5893 */
+      '?', /* U+5894 */
+      '?', /* U+5895 */
+      '?', /* U+5896 */
+   0x919d, /* U+5897 */
+      '?', /* U+5898 */
+      '?', /* U+5899 */
+      '?', /* U+589A */
+      '?', /* U+589B */
+   0x92c4, /* U+589C */
+      '?', /* U+589D */
+   0xfa9d, /* U+589E */
+   0x9ad0, /* U+589F */
+      '?', /* U+58A0 */
+      '?', /* U+58A1 */
+      '?', /* U+58A2 */
+      '?', /* U+58A3 */
+      '?', /* U+58A4 */
+      '?', /* U+58A5 */
+      '?', /* U+58A6 */
+      '?', /* U+58A7 */
+   0x966e, /* U+58A8 */
+      '?', /* U+58A9 */
+      '?', /* U+58AA */
+   0x9ad1, /* U+58AB */
+      '?', /* U+58AC */
+      '?', /* U+58AD */
+   0x9ad6, /* U+58AE */
+      '?', /* U+58AF */
+      '?', /* U+58B0 */
+      '?', /* U+58B1 */
+   0xfa9e, /* U+58B2 */
+   0x95ad, /* U+58B3 */
+      '?', /* U+58B4 */
+      '?', /* U+58B5 */
+      '?', /* U+58B6 */
+      '?', /* U+58B7 */
+   0x9ad5, /* U+58B8 */
+   0x9acf, /* U+58B9 */
+   0x9ad2, /* U+58BA */
+   0x9ad4, /* U+58BB */
+      '?', /* U+58BC */
+      '?', /* U+58BD */
+   0x8da4, /* U+58BE */
+      '?', /* U+58BF */
+      '?', /* U+58C0 */
+   0x95c7, /* U+58C1 */
+      '?', /* U+58C2 */
+      '?', /* U+58C3 */
+      '?', /* U+58C4 */
+   0x9ad7, /* U+58C5 */
+      '?', /* U+58C6 */
+   0x9264, /* U+58C7 */
+      '?', /* U+58C8 */
+      '?', /* U+58C9 */
+   0x89f3, /* U+58CA */
+      '?', /* U+58CB */
+   0x8feb, /* U+58CC */
+      '?', /* U+58CD */
+      '?', /* U+58CE */
+      '?', /* U+58CF */
+      '?', /* U+58D0 */
+   0x9ad9, /* U+58D1 */
+      '?', /* U+58D2 */
+   0x9ad8, /* U+58D3 */
+      '?', /* U+58D4 */
+   0x8d88, /* U+58D5 */
+      '?', /* U+58D6 */
+   0x9ada, /* U+58D7 */
+   0x9adc, /* U+58D8 */
+   0x9adb, /* U+58D9 */
+      '?', /* U+58DA */
+      '?', /* U+58DB */
+   0x9ade, /* U+58DC */
+      '?', /* U+58DD */
+   0x9ad3, /* U+58DE */
+   0x9ae0, /* U+58DF */
+      '?', /* U+58E0 */
+      '?', /* U+58E1 */
+      '?', /* U+58E2 */
+      '?', /* U+58E3 */
+   0x9adf, /* U+58E4 */
+   0x9add, /* U+58E5 */
+      '?', /* U+58E6 */
+      '?', /* U+58E7 */
+      '?', /* U+58E8 */
+      '?', /* U+58E9 */
+      '?', /* U+58EA */
+   0x8e6d, /* U+58EB */
+   0x9070, /* U+58EC */
+      '?', /* U+58ED */
+   0x9173, /* U+58EE */
+   0x9ae1, /* U+58EF */
+   0x90ba, /* U+58F0 */
+   0x88eb, /* U+58F1 */
+   0x9484, /* U+58F2 */
+      '?', /* U+58F3 */
+      '?', /* U+58F4 */
+      '?', /* U+58F5 */
+      '?', /* U+58F6 */
+   0x92d9, /* U+58F7 */
+      '?', /* U+58F8 */
+   0x9ae3, /* U+58F9 */
+   0x9ae2, /* U+58FA */
+   0x9ae4, /* U+58FB */
+   0x9ae5, /* U+58FC */
+   0x9ae6, /* U+58FD */
+      '?', /* U+58FE */
+      '?', /* U+58FF */
+      '?', /* U+5900 */
+      '?', /* U+5901 */
+   0x9ae7, /* U+5902 */
+      '?', /* U+5903 */
+      '?', /* U+5904 */
+      '?', /* U+5905 */
+      '?', /* U+5906 */
+      '?', /* U+5907 */
+      '?', /* U+5908 */
+   0x95cf, /* U+5909 */
+   0x9ae8, /* U+590A */
+   0xfa9f, /* U+590B */
+      '?', /* U+590C */
+      '?', /* U+590D */
+      '?', /* U+590E */
+   0x89c4, /* U+590F */
+   0x9ae9, /* U+5910 */
+      '?', /* U+5911 */
+      '?', /* U+5912 */
+      '?', /* U+5913 */
+      '?', /* U+5914 */
+   0x975b, /* U+5915 */
+   0x8a4f, /* U+5916 */
+      '?', /* U+5917 */
+   0x99c7, /* U+5918 */
+   0x8f67, /* U+5919 */
+   0x91bd, /* U+591A */
+   0x9aea, /* U+591B */
+   0x96e9, /* U+591C */
+      '?', /* U+591D */
+      '?', /* U+591E */
+      '?', /* U+591F */
+      '?', /* U+5920 */
+      '?', /* U+5921 */
+   0x96b2, /* U+5922 */
+      '?', /* U+5923 */
+      '?', /* U+5924 */
+   0x9aec, /* U+5925 */
+      '?', /* U+5926 */
+   0x91e5, /* U+5927 */
+      '?', /* U+5928 */
+   0x9356, /* U+5929 */
+   0x91be, /* U+592A */
+   0x9576, /* U+592B */
+   0x9aed, /* U+592C */
+   0x9aee, /* U+592D */
+   0x899b, /* U+592E */
+      '?', /* U+592F */
+      '?', /* U+5930 */
+   0x8eb8, /* U+5931 */
+   0x9aef, /* U+5932 */
+      '?', /* U+5933 */
+      '?', /* U+5934 */
+      '?', /* U+5935 */
+      '?', /* U+5936 */
+   0x88ce, /* U+5937 */
+   0x9af0, /* U+5938 */
+      '?', /* U+5939 */
+      '?', /* U+593A */
+      '?', /* U+593B */
+      '?', /* U+593C */
+      '?', /* U+593D */
+   0x9af1, /* U+593E */
+      '?', /* U+593F */
+      '?', /* U+5940 */
+      '?', /* U+5941 */
+      '?', /* U+5942 */
+      '?', /* U+5943 */
+   0x8982, /* U+5944 */
+      '?', /* U+5945 */
+      '?', /* U+5946 */
+   0x8aef, /* U+5947 */
+   0x93de, /* U+5948 */
+   0x95f2, /* U+5949 */
+      '?', /* U+594A */
+      '?', /* U+594B */
+      '?', /* U+594C */
+      '?', /* U+594D */
+   0x9af5, /* U+594E */
+   0x9174, /* U+594F */
+   0x9af4, /* U+5950 */
+   0x8c5f, /* U+5951 */
+      '?', /* U+5952 */
+   0xfaa0, /* U+5953 */
+   0x967a, /* U+5954 */
+   0x9af3, /* U+5955 */
+      '?', /* U+5956 */
+   0x9385, /* U+5957 */
+   0x9af7, /* U+5958 */
+      '?', /* U+5959 */
+   0x9af6, /* U+595A */
+   0xfaa1, /* U+595B */
+      '?', /* U+595C */
+   0xfaa2, /* U+595D */
+      '?', /* U+595E */
+      '?', /* U+595F */
+   0x9af9, /* U+5960 */
+      '?', /* U+5961 */
+   0x9af8, /* U+5962 */
+   0xfaa3, /* U+5963 */
+      '?', /* U+5964 */
+   0x899c, /* U+5965 */
+      '?', /* U+5966 */
+   0x9afa, /* U+5967 */
+   0x8fa7, /* U+5968 */
+   0x9afc, /* U+5969 */
+   0x9244, /* U+596A */
+      '?', /* U+596B */
+   0x9afb, /* U+596C */
+      '?', /* U+596D */
+   0x95b1, /* U+596E */
+      '?', /* U+596F */
+      '?', /* U+5970 */
+      '?', /* U+5971 */
+      '?', /* U+5972 */
+   0x8f97, /* U+5973 */
+   0x937a, /* U+5974 */
+      '?', /* U+5975 */
+      '?', /* U+5976 */
+      '?', /* U+5977 */
+   0x9b40, /* U+5978 */
+      '?', /* U+5979 */
+      '?', /* U+597A */
+      '?', /* U+597B */
+      '?', /* U+597C */
+   0x8d44, /* U+597D */
+      '?', /* U+597E */
+      '?', /* U+597F */
+      '?', /* U+5980 */
+   0x9b41, /* U+5981 */
+   0x9440, /* U+5982 */
+   0x94dc, /* U+5983 */
+   0x96cf, /* U+5984 */
+      '?', /* U+5985 */
+      '?', /* U+5986 */
+      '?', /* U+5987 */
+      '?', /* U+5988 */
+      '?', /* U+5989 */
+   0x9444, /* U+598A */
+      '?', /* U+598B */
+      '?', /* U+598C */
+   0x9b4a, /* U+598D */
+      '?', /* U+598E */
+      '?', /* U+598F */
+      '?', /* U+5990 */
+      '?', /* U+5991 */
+      '?', /* U+5992 */
+   0x8b57, /* U+5993 */
+      '?', /* U+5994 */
+      '?', /* U+5995 */
+   0x9764, /* U+5996 */
+      '?', /* U+5997 */
+      '?', /* U+5998 */
+   0x96ad, /* U+5999 */
+      '?', /* U+599A */
+   0x9baa, /* U+599B */
+      '?', /* U+599C */
+   0x9b42, /* U+599D */
+      '?', /* U+599E */
+      '?', /* U+599F */
+      '?', /* U+59A0 */
+      '?', /* U+59A1 */
+      '?', /* U+59A2 */
+   0x9b45, /* U+59A3 */
+   0xfaa4, /* U+59A4 */
+   0x91c3, /* U+59A5 */
+      '?', /* U+59A6 */
+      '?', /* U+59A7 */
+   0x9657, /* U+59A8 */
+      '?', /* U+59A9 */
+      '?', /* U+59AA */
+      '?', /* U+59AB */
+   0x9369, /* U+59AC */
+      '?', /* U+59AD */
+      '?', /* U+59AE */
+      '?', /* U+59AF */
+      '?', /* U+59B0 */
+      '?', /* U+59B1 */
+   0x9b46, /* U+59B2 */
+      '?', /* U+59B3 */
+      '?', /* U+59B4 */
+      '?', /* U+59B5 */
+      '?', /* U+59B6 */
+      '?', /* U+59B7 */
+      '?', /* U+59B8 */
+   0x9685, /* U+59B9 */
+   0xfaa5, /* U+59BA */
+   0x8dc8, /* U+59BB */
+      '?', /* U+59BC */
+      '?', /* U+59BD */
+   0x8fa8, /* U+59BE */
+      '?', /* U+59BF */
+      '?', /* U+59C0 */
+      '?', /* U+59C1 */
+      '?', /* U+59C2 */
+      '?', /* U+59C3 */
+      '?', /* U+59C4 */
+      '?', /* U+59C5 */
+   0x9b47, /* U+59C6 */
+      '?', /* U+59C7 */
+      '?', /* U+59C8 */
+   0x8e6f, /* U+59C9 */
+      '?', /* U+59CA */
+   0x8e6e, /* U+59CB */
+      '?', /* U+59CC */
+      '?', /* U+59CD */
+      '?', /* U+59CE */
+      '?', /* U+59CF */
+   0x88b7, /* U+59D0 */
+   0x8cc6, /* U+59D1 */
+      '?', /* U+59D2 */
+   0x90a9, /* U+59D3 */
+   0x88cf, /* U+59D4 */
+      '?', /* U+59D5 */
+      '?', /* U+59D6 */
+      '?', /* U+59D7 */
+      '?', /* U+59D8 */
+   0x9b4b, /* U+59D9 */
+   0x9b4c, /* U+59DA */
+      '?', /* U+59DB */
+   0x9b49, /* U+59DC */
+      '?', /* U+59DD */
+      '?', /* U+59DE */
+      '?', /* U+59DF */
+      '?', /* U+59E0 */
+      '?', /* U+59E1 */
+      '?', /* U+59E2 */
+      '?', /* U+59E3 */
+      '?', /* U+59E4 */
+   0x8957, /* U+59E5 */
+   0x8aad, /* U+59E6 */
+      '?', /* U+59E7 */
+   0x9b48, /* U+59E8 */
+      '?', /* U+59E9 */
+   0x96c3, /* U+59EA */
+   0x9550, /* U+59EB */
+      '?', /* U+59EC */
+      '?', /* U+59ED */
+      '?', /* U+59EE */
+      '?', /* U+59EF */
+      '?', /* U+59F0 */
+      '?', /* U+59F1 */
+      '?', /* U+59F2 */
+      '?', /* U+59F3 */
+      '?', /* U+59F4 */
+      '?', /* U+59F5 */
+   0x88a6, /* U+59F6 */
+      '?', /* U+59F7 */
+      '?', /* U+59F8 */
+      '?', /* U+59F9 */
+      '?', /* U+59FA */
+   0x88f7, /* U+59FB */
+      '?', /* U+59FC */
+      '?', /* U+59FD */
+      '?', /* U+59FE */
+   0x8e70, /* U+59FF */
+      '?', /* U+5A00 */
+   0x88d0, /* U+5A01 */
+      '?', /* U+5A02 */
+   0x88a1, /* U+5A03 */
+      '?', /* U+5A04 */
+      '?', /* U+5A05 */
+      '?', /* U+5A06 */
+      '?', /* U+5A07 */
+      '?', /* U+5A08 */
+   0x9b51, /* U+5A09 */
+      '?', /* U+5A0A */
+      '?', /* U+5A0B */
+      '?', /* U+5A0C */
+      '?', /* U+5A0D */
+      '?', /* U+5A0E */
+      '?', /* U+5A0F */
+      '?', /* U+5A10 */
+   0x9b4f, /* U+5A11 */
+      '?', /* U+5A12 */
+      '?', /* U+5A13 */
+      '?', /* U+5A14 */
+      '?', /* U+5A15 */
+      '?', /* U+5A16 */
+      '?', /* U+5A17 */
+   0x96ba, /* U+5A18 */
+      '?', /* U+5A19 */
+   0x9b52, /* U+5A1A */
+      '?', /* U+5A1B */
+   0x9b50, /* U+5A1C */
+      '?', /* U+5A1D */
+      '?', /* U+5A1E */
+   0x9b4e, /* U+5A1F */
+   0x9050, /* U+5A20 */
+      '?', /* U+5A21 */
+      '?', /* U+5A22 */
+      '?', /* U+5A23 */
+      '?', /* U+5A24 */
+   0x9b4d, /* U+5A25 */
+      '?', /* U+5A26 */
+      '?', /* U+5A27 */
+      '?', /* U+5A28 */
+   0x95d8, /* U+5A29 */
+      '?', /* U+5A2A */
+      '?', /* U+5A2B */
+      '?', /* U+5A2C */
+      '?', /* U+5A2D */
+      '?', /* U+5A2E */
+   0x8ce2, /* U+5A2F */
+      '?', /* U+5A30 */
+      '?', /* U+5A31 */
+      '?', /* U+5A32 */
+      '?', /* U+5A33 */
+      '?', /* U+5A34 */
+   0x9b56, /* U+5A35 */
+   0x9b57, /* U+5A36 */
+      '?', /* U+5A37 */
+      '?', /* U+5A38 */
+      '?', /* U+5A39 */
+      '?', /* U+5A3A */
+      '?', /* U+5A3B */
+   0x8fa9, /* U+5A3C */
+      '?', /* U+5A3D */
+      '?', /* U+5A3E */
+      '?', /* U+5A3F */
+   0x9b53, /* U+5A40 */
+   0x984b, /* U+5A41 */
+      '?', /* U+5A42 */
+      '?', /* U+5A43 */
+      '?', /* U+5A44 */
+      '?', /* U+5A45 */
+   0x946b, /* U+5A46 */
+      '?', /* U+5A47 */
+      '?', /* U+5A48 */
+   0x9b55, /* U+5A49 */
+      '?', /* U+5A4A */
+      '?', /* U+5A4B */
+      '?', /* U+5A4C */
+      '?', /* U+5A4D */
+      '?', /* U+5A4E */
+      '?', /* U+5A4F */
+      '?', /* U+5A50 */
+      '?', /* U+5A51 */
+      '?', /* U+5A52 */
+      '?', /* U+5A53 */
+      '?', /* U+5A54 */
+      '?', /* U+5A55 */
+      '?', /* U+5A56 */
+      '?', /* U+5A57 */
+      '?', /* U+5A58 */
+      '?', /* U+5A59 */
+   0x8da5, /* U+5A5A */
+      '?', /* U+5A5B */
+      '?', /* U+5A5C */
+      '?', /* U+5A5D */
+      '?', /* U+5A5E */
+      '?', /* U+5A5F */
+      '?', /* U+5A60 */
+      '?', /* U+5A61 */
+   0x9b58, /* U+5A62 */
+      '?', /* U+5A63 */
+      '?', /* U+5A64 */
+      '?', /* U+5A65 */
+   0x9577, /* U+5A66 */
+      '?', /* U+5A67 */
+      '?', /* U+5A68 */
+      '?', /* U+5A69 */
+   0x9b59, /* U+5A6A */
+      '?', /* U+5A6B */
+   0x9b54, /* U+5A6C */
+      '?', /* U+5A6D */
+      '?', /* U+5A6E */
+      '?', /* U+5A6F */
+      '?', /* U+5A70 */
+      '?', /* U+5A71 */
+      '?', /* U+5A72 */
+      '?', /* U+5A73 */
+      '?', /* U+5A74 */
+      '?', /* U+5A75 */
+      '?', /* U+5A76 */
+      '?', /* U+5A77 */
+      '?', /* U+5A78 */
+      '?', /* U+5A79 */
+      '?', /* U+5A7A */
+      '?', /* U+5A7B */
+      '?', /* U+5A7C */
+      '?', /* U+5A7D */
+      '?', /* U+5A7E */
+   0x96b9, /* U+5A7F */
+      '?', /* U+5A80 */
+      '?', /* U+5A81 */
+      '?', /* U+5A82 */
+      '?', /* U+5A83 */
+      '?', /* U+5A84 */
+      '?', /* U+5A85 */
+      '?', /* U+5A86 */
+      '?', /* U+5A87 */
+      '?', /* U+5A88 */
+      '?', /* U+5A89 */
+      '?', /* U+5A8A */
+      '?', /* U+5A8B */
+      '?', /* U+5A8C */
+      '?', /* U+5A8D */
+      '?', /* U+5A8E */
+      '?', /* U+5A8F */
+      '?', /* U+5A90 */
+      '?', /* U+5A91 */
+   0x947d, /* U+5A92 */
+      '?', /* U+5A93 */
+      '?', /* U+5A94 */
+      '?', /* U+5A95 */
+      '?', /* U+5A96 */
+      '?', /* U+5A97 */
+      '?', /* U+5A98 */
+      '?', /* U+5A99 */
+   0x9b5a, /* U+5A9A */
+   0x9551, /* U+5A9B */
+      '?', /* U+5A9C */
+      '?', /* U+5A9D */
+      '?', /* U+5A9E */
+      '?', /* U+5A9F */
+      '?', /* U+5AA0 */
+      '?', /* U+5AA1 */
+      '?', /* U+5AA2 */
+      '?', /* U+5AA3 */
+      '?', /* U+5AA4 */
+      '?', /* U+5AA5 */
+      '?', /* U+5AA6 */
+      '?', /* U+5AA7 */
+      '?', /* U+5AA8 */
+      '?', /* U+5AA9 */
+      '?', /* U+5AAA */
+      '?', /* U+5AAB */
+      '?', /* U+5AAC */
+      '?', /* U+5AAD */
+      '?', /* U+5AAE */
+      '?', /* U+5AAF */
+      '?', /* U+5AB0 */
+      '?', /* U+5AB1 */
+      '?', /* U+5AB2 */
+      '?', /* U+5AB3 */
+      '?', /* U+5AB4 */
+      '?', /* U+5AB5 */
+      '?', /* U+5AB6 */
+      '?', /* U+5AB7 */
+      '?', /* U+5AB8 */
+      '?', /* U+5AB9 */
+      '?', /* U+5ABA */
+      '?', /* U+5ABB */
+   0x9b5b, /* U+5ABC */
+   0x9b5f, /* U+5ABD */
+   0x9b5c, /* U+5ABE */
+      '?', /* U+5ABF */
+      '?', /* U+5AC0 */
+   0x89c5, /* U+5AC1 */
+   0x9b5e, /* U+5AC2 */
+      '?', /* U+5AC3 */
+      '?', /* U+5AC4 */
+      '?', /* U+5AC5 */
+      '?', /* U+5AC6 */
+      '?', /* U+5AC7 */
+      '?', /* U+5AC8 */
+   0x8eb9, /* U+5AC9 */
+      '?', /* U+5ACA */
+   0x9b5d, /* U+5ACB */
+   0x8c99, /* U+5ACC */
+      '?', /* U+5ACD */
+      '?', /* U+5ACE */
+      '?', /* U+5ACF */
+   0x9b6b, /* U+5AD0 */
+      '?', /* U+5AD1 */
+      '?', /* U+5AD2 */
+      '?', /* U+5AD3 */
+      '?', /* U+5AD4 */
+      '?', /* U+5AD5 */
+   0x9b64, /* U+5AD6 */
+   0x9b61, /* U+5AD7 */
+      '?', /* U+5AD8 */
+      '?', /* U+5AD9 */
+      '?', /* U+5ADA */
+      '?', /* U+5ADB */
+      '?', /* U+5ADC */
+      '?', /* U+5ADD */
+      '?', /* U+5ADE */
+      '?', /* U+5ADF */
+      '?', /* U+5AE0 */
+   0x9284, /* U+5AE1 */
+      '?', /* U+5AE2 */
+   0x9b60, /* U+5AE3 */
+      '?', /* U+5AE4 */
+      '?', /* U+5AE5 */
+   0x9b62, /* U+5AE6 */
+      '?', /* U+5AE7 */
+      '?', /* U+5AE8 */
+   0x9b63, /* U+5AE9 */
+      '?', /* U+5AEA */
+      '?', /* U+5AEB */
+      '?', /* U+5AEC */
+      '?', /* U+5AED */
+      '?', /* U+5AEE */
+      '?', /* U+5AEF */
+      '?', /* U+5AF0 */
+      '?', /* U+5AF1 */
+      '?', /* U+5AF2 */
+      '?', /* U+5AF3 */
+      '?', /* U+5AF4 */
+      '?', /* U+5AF5 */
+      '?', /* U+5AF6 */
+      '?', /* U+5AF7 */
+      '?', /* U+5AF8 */
+      '?', /* U+5AF9 */
+   0x9b65, /* U+5AFA */
+   0x9b66, /* U+5AFB */
+      '?', /* U+5AFC */
+      '?', /* U+5AFD */
+      '?', /* U+5AFE */
+      '?', /* U+5AFF */
+      '?', /* U+5B00 */
+      '?', /* U+5B01 */
+      '?', /* U+5B02 */
+      '?', /* U+5B03 */
+      '?', /* U+5B04 */
+      '?', /* U+5B05 */
+      '?', /* U+5B06 */
+      '?', /* U+5B07 */
+      '?', /* U+5B08 */
+   0x8af0, /* U+5B09 */
+      '?', /* U+5B0A */
+   0x9b68, /* U+5B0B */
+   0x9b67, /* U+5B0C */
+      '?', /* U+5B0D */
+      '?', /* U+5B0E */
+      '?', /* U+5B0F */
+      '?', /* U+5B10 */
+      '?', /* U+5B11 */
+      '?', /* U+5B12 */
+      '?', /* U+5B13 */
+      '?', /* U+5B14 */
+      '?', /* U+5B15 */
+   0x9b69, /* U+5B16 */
+      '?', /* U+5B17 */
+      '?', /* U+5B18 */
+      '?', /* U+5B19 */
+      '?', /* U+5B1A */
+      '?', /* U+5B1B */
+      '?', /* U+5B1C */
+      '?', /* U+5B1D */
+      '?', /* U+5B1E */
+      '?', /* U+5B1F */
+      '?', /* U+5B20 */
+      '?', /* U+5B21 */
+   0x8fec, /* U+5B22 */
+      '?', /* U+5B23 */
+      '?', /* U+5B24 */
+      '?', /* U+5B25 */
+      '?', /* U+5B26 */
+      '?', /* U+5B27 */
+      '?', /* U+5B28 */
+      '?', /* U+5B29 */
+   0x9b6c, /* U+5B2A */
+      '?', /* U+5B2B */
+   0x92da, /* U+5B2C */
+      '?', /* U+5B2D */
+      '?', /* U+5B2E */
+      '?', /* U+5B2F */
+   0x8964, /* U+5B30 */
+      '?', /* U+5B31 */
+   0x9b6a, /* U+5B32 */
+      '?', /* U+5B33 */
+      '?', /* U+5B34 */
+      '?', /* U+5B35 */
+   0x9b6d, /* U+5B36 */
+      '?', /* U+5B37 */
+      '?', /* U+5B38 */
+      '?', /* U+5B39 */
+      '?', /* U+5B3A */
+      '?', /* U+5B3B */
+      '?', /* U+5B3C */
+      '?', /* U+5B3D */
+   0x9b6e, /* U+5B3E */
+      '?', /* U+5B3F */
+   0x9b71, /* U+5B40 */
+      '?', /* U+5B41 */
+      '?', /* U+5B42 */
+   0x9b6f, /* U+5B43 */
+      '?', /* U+5B44 */
+   0x9b70, /* U+5B45 */
+      '?', /* U+5B46 */
+      '?', /* U+5B47 */
+      '?', /* U+5B48 */
+      '?', /* U+5B49 */
+      '?', /* U+5B4A */
+      '?', /* U+5B4B */
+      '?', /* U+5B4C */
+      '?', /* U+5B4D */
+      '?', /* U+5B4E */
+      '?', /* U+5B4F */
+   0x8e71, /* U+5B50 */
+   0x9b72, /* U+5B51 */
+      '?', /* U+5B52 */
+      '?', /* U+5B53 */
+   0x8d45, /* U+5B54 */
+   0x9b73, /* U+5B55 */
+   0xfaa6, /* U+5B56 */
+   0x8e9a, /* U+5B57 */
+   0x91b6, /* U+5B58 */
+      '?', /* U+5B59 */
+   0x9b74, /* U+5B5A */
+   0x9b75, /* U+5B5B */
+   0x8e79, /* U+5B5C */
+   0x8d46, /* U+5B5D */
+      '?', /* U+5B5E */
+   0x96d0, /* U+5B5F */
+      '?', /* U+5B60 */
+      '?', /* U+5B61 */
+      '?', /* U+5B62 */
+   0x8b47, /* U+5B63 */
+   0x8cc7, /* U+5B64 */
+   0x9b76, /* U+5B65 */
+   0x8a77, /* U+5B66 */
+      '?', /* U+5B67 */
+      '?', /* U+5B68 */
+   0x9b77, /* U+5B69 */
+      '?', /* U+5B6A */
+   0x91b7, /* U+5B6B */
+      '?', /* U+5B6C */
+      '?', /* U+5B6D */
+      '?', /* U+5B6E */
+      '?', /* U+5B6F */
+   0x9b78, /* U+5B70 */
+   0x9ba1, /* U+5B71 */
+      '?', /* U+5B72 */
+   0x9b79, /* U+5B73 */
+      '?', /* U+5B74 */
+   0x9b7a, /* U+5B75 */
+      '?', /* U+5B76 */
+      '?', /* U+5B77 */
+   0x9b7b, /* U+5B78 */
+      '?', /* U+5B79 */
+   0x9b7d, /* U+5B7A */
+      '?', /* U+5B7B */
+      '?', /* U+5B7C */
+      '?', /* U+5B7D */
+      '?', /* U+5B7E */
+      '?', /* U+5B7F */
+   0x9b7e, /* U+5B80 */
+      '?', /* U+5B81 */
+      '?', /* U+5B82 */
+   0x9b80, /* U+5B83 */
+      '?', /* U+5B84 */
+   0x91ee, /* U+5B85 */
+      '?', /* U+5B86 */
+   0x8946, /* U+5B87 */
+   0x8ee7, /* U+5B88 */
+   0x88c0, /* U+5B89 */
+      '?', /* U+5B8A */
+   0x9176, /* U+5B8B */
+   0x8aae, /* U+5B8C */
+   0x8eb3, /* U+5B8D */
+      '?', /* U+5B8E */
+   0x8d47, /* U+5B8F */
+      '?', /* U+5B90 */
+      '?', /* U+5B91 */
+      '?', /* U+5B92 */
+      '?', /* U+5B93 */
+      '?', /* U+5B94 */
+   0x9386, /* U+5B95 */
+      '?', /* U+5B96 */
+   0x8f40, /* U+5B97 */
+   0x8aaf, /* U+5B98 */
+   0x9288, /* U+5B99 */
+   0x92e8, /* U+5B9A */
+   0x88b6, /* U+5B9B */
+   0x8b58, /* U+5B9C */
+   0x95f3, /* U+5B9D */
+      '?', /* U+5B9E */
+   0x8ec0, /* U+5B9F */
+      '?', /* U+5BA0 */
+      '?', /* U+5BA1 */
+   0x8b71, /* U+5BA2 */
+   0x90e9, /* U+5BA3 */
+   0x8eba, /* U+5BA4 */
+   0x9747, /* U+5BA5 */
+   0x9b81, /* U+5BA6 */
+      '?', /* U+5BA7 */
+      '?', /* U+5BA8 */
+      '?', /* U+5BA9 */
+      '?', /* U+5BAA */
+      '?', /* U+5BAB */
+      '?', /* U+5BAC */
+      '?', /* U+5BAD */
+   0x8b7b, /* U+5BAE */
+      '?', /* U+5BAF */
+   0x8dc9, /* U+5BB0 */
+      '?', /* U+5BB1 */
+      '?', /* U+5BB2 */
+   0x8a51, /* U+5BB3 */
+   0x8983, /* U+5BB4 */
+   0x8faa, /* U+5BB5 */
+   0x89c6, /* U+5BB6 */
+      '?', /* U+5BB7 */
+   0x9b82, /* U+5BB8 */
+   0x9765, /* U+5BB9 */
+      '?', /* U+5BBA */
+      '?', /* U+5BBB */
+      '?', /* U+5BBC */
+      '?', /* U+5BBD */
+      '?', /* U+5BBE */
+   0x8f68, /* U+5BBF */
+   0xfaa7, /* U+5BC0 */
+      '?', /* U+5BC1 */
+   0x8ee2, /* U+5BC2 */
+   0x9b83, /* U+5BC3 */
+   0x8af1, /* U+5BC4 */
+   0x93d0, /* U+5BC5 */
+   0x96a7, /* U+5BC6 */
+   0x9b84, /* U+5BC7 */
+      '?', /* U+5BC8 */
+   0x9b85, /* U+5BC9 */
+      '?', /* U+5BCA */
+      '?', /* U+5BCB */
+   0x9578, /* U+5BCC */
+      '?', /* U+5BCD */
+      '?', /* U+5BCE */
+      '?', /* U+5BCF */
+   0x9b87, /* U+5BD0 */
+      '?', /* U+5BD1 */
+   0x8aa6, /* U+5BD2 */
+   0x8bf5, /* U+5BD3 */
+   0x9b86, /* U+5BD4 */
+      '?', /* U+5BD5 */
+      '?', /* U+5BD6 */
+      '?', /* U+5BD7 */
+   0xfaa9, /* U+5BD8 */
+      '?', /* U+5BD9 */
+      '?', /* U+5BDA */
+   0x8ab0, /* U+5BDB */
+      '?', /* U+5BDC */
+   0x9051, /* U+5BDD */
+   0x9b8b, /* U+5BDE */
+   0x8e40, /* U+5BDF */
+      '?', /* U+5BE0 */
+   0x89c7, /* U+5BE1 */
+   0x9b8a, /* U+5BE2 */
+      '?', /* U+5BE3 */
+   0x9b88, /* U+5BE4 */
+   0x9b8c, /* U+5BE5 */
+   0x9b89, /* U+5BE6 */
+   0x944a, /* U+5BE7 */
+   0x9ecb, /* U+5BE8 */
+   0x9052, /* U+5BE9 */
+      '?', /* U+5BEA */
+   0x9b8d, /* U+5BEB */
+   0xfaaa, /* U+5BEC */
+      '?', /* U+5BED */
+   0x97be, /* U+5BEE */
+      '?', /* U+5BEF */
+   0x9b8e, /* U+5BF0 */
+      '?', /* U+5BF1 */
+      '?', /* U+5BF2 */
+   0x9b90, /* U+5BF3 */
+      '?', /* U+5BF4 */
+   0x929e, /* U+5BF5 */
+   0x9b8f, /* U+5BF6 */
+      '?', /* U+5BF7 */
+   0x90a1, /* U+5BF8 */
+      '?', /* U+5BF9 */
+   0x8e9b, /* U+5BFA */
+      '?', /* U+5BFB */
+      '?', /* U+5BFC */
+      '?', /* U+5BFD */
+   0x91ce, /* U+5BFE */
+   0x8ef5, /* U+5BFF */
+      '?', /* U+5C00 */
+   0x9595, /* U+5C01 */
+   0x90ea, /* U+5C02 */
+      '?', /* U+5C03 */
+   0x8ecb, /* U+5C04 */
+   0x9b91, /* U+5C05 */
+   0x8fab, /* U+5C06 */
+   0x9b92, /* U+5C07 */
+   0x9b93, /* U+5C08 */
+   0x88d1, /* U+5C09 */
+   0x91b8, /* U+5C0A */
+   0x9071, /* U+5C0B */
+      '?', /* U+5C0C */
+   0x9b94, /* U+5C0D */
+   0x93b1, /* U+5C0E */
+   0x8fac, /* U+5C0F */
+      '?', /* U+5C10 */
+   0x8fad, /* U+5C11 */
+      '?', /* U+5C12 */
+   0x9b95, /* U+5C13 */
+      '?', /* U+5C14 */
+      '?', /* U+5C15 */
+   0x90eb, /* U+5C16 */
+      '?', /* U+5C17 */
+      '?', /* U+5C18 */
+      '?', /* U+5C19 */
+   0x8fae, /* U+5C1A */
+      '?', /* U+5C1B */
+      '?', /* U+5C1C */
+      '?', /* U+5C1D */
+   0xfaab, /* U+5C1E */
+      '?', /* U+5C1F */
+   0x9b96, /* U+5C20 */
+      '?', /* U+5C21 */
+   0x9b97, /* U+5C22 */
+      '?', /* U+5C23 */
+   0x96de, /* U+5C24 */
+      '?', /* U+5C25 */
+      '?', /* U+5C26 */
+      '?', /* U+5C27 */
+   0x9b98, /* U+5C28 */
+      '?', /* U+5C29 */
+      '?', /* U+5C2A */
+      '?', /* U+5C2B */
+      '?', /* U+5C2C */
+   0x8bc4, /* U+5C2D */
+      '?', /* U+5C2E */
+      '?', /* U+5C2F */
+      '?', /* U+5C30 */
+   0x8f41, /* U+5C31 */
+      '?', /* U+5C32 */
+      '?', /* U+5C33 */
+      '?', /* U+5C34 */
+      '?', /* U+5C35 */
+      '?', /* U+5C36 */
+      '?', /* U+5C37 */
+   0x9b99, /* U+5C38 */
+   0x9b9a, /* U+5C39 */
+   0x8eda, /* U+5C3A */
+   0x904b, /* U+5C3B */
+   0x93f2, /* U+5C3C */
+   0x9073, /* U+5C3D */
+   0x94f6, /* U+5C3E */
+   0x9441, /* U+5C3F */
+   0x8bc7, /* U+5C40 */
+   0x9b9b, /* U+5C41 */
+      '?', /* U+5C42 */
+      '?', /* U+5C43 */
+      '?', /* U+5C44 */
+   0x8b8f, /* U+5C45 */
+   0x9b9c, /* U+5C46 */
+      '?', /* U+5C47 */
+   0x8bfc, /* U+5C48 */
+      '?', /* U+5C49 */
+   0x93cd, /* U+5C4A */
+   0x89ae, /* U+5C4B */
+      '?', /* U+5C4C */
+   0x8e72, /* U+5C4D */
+   0x9b9d, /* U+5C4E */
+   0x9ba0, /* U+5C4F */
+   0x9b9f, /* U+5C50 */
+   0x8bfb, /* U+5C51 */
+      '?', /* U+5C52 */
+   0x9b9e, /* U+5C53 */
+      '?', /* U+5C54 */
+   0x9357, /* U+5C55 */
+      '?', /* U+5C56 */
+      '?', /* U+5C57 */
+      '?', /* U+5C58 */
+      '?', /* U+5C59 */
+      '?', /* U+5C5A */
+      '?', /* U+5C5B */
+      '?', /* U+5C5C */
+      '?', /* U+5C5D */
+   0x91ae, /* U+5C5E */
+      '?', /* U+5C5F */
+   0x936a, /* U+5C60 */
+   0x8ec6, /* U+5C61 */
+      '?', /* U+5C62 */
+      '?', /* U+5C63 */
+   0x9177, /* U+5C64 */
+   0x979a, /* U+5C65 */
+      '?', /* U+5C66 */
+      '?', /* U+5C67 */
+      '?', /* U+5C68 */
+      '?', /* U+5C69 */
+      '?', /* U+5C6A */
+      '?', /* U+5C6B */
+   0x9ba2, /* U+5C6C */
+      '?', /* U+5C6D */
+   0x9ba3, /* U+5C6E */
+   0x93d4, /* U+5C6F */
+      '?', /* U+5C70 */
+   0x8e52, /* U+5C71 */
+      '?', /* U+5C72 */
+      '?', /* U+5C73 */
+      '?', /* U+5C74 */
+      '?', /* U+5C75 */
+   0x9ba5, /* U+5C76 */
+      '?', /* U+5C77 */
+      '?', /* U+5C78 */
+   0x9ba6, /* U+5C79 */
+      '?', /* U+5C7A */
+      '?', /* U+5C7B */
+      '?', /* U+5C7C */
+      '?', /* U+5C7D */
+      '?', /* U+5C7E */
+      '?', /* U+5C7F */
+      '?', /* U+5C80 */
+      '?', /* U+5C81 */
+      '?', /* U+5C82 */
+      '?', /* U+5C83 */
+      '?', /* U+5C84 */
+      '?', /* U+5C85 */
+      '?', /* U+5C86 */
+      '?', /* U+5C87 */
+      '?', /* U+5C88 */
+      '?', /* U+5C89 */
+      '?', /* U+5C8A */
+      '?', /* U+5C8B */
+   0x9ba7, /* U+5C8C */
+      '?', /* U+5C8D */
+      '?', /* U+5C8E */
+      '?', /* U+5C8F */
+   0x8af2, /* U+5C90 */
+   0x9ba8, /* U+5C91 */
+      '?', /* U+5C92 */
+      '?', /* U+5C93 */
+   0x9ba9, /* U+5C94 */
+      '?', /* U+5C95 */
+      '?', /* U+5C96 */
+      '?', /* U+5C97 */
+      '?', /* U+5C98 */
+      '?', /* U+5C99 */
+      '?', /* U+5C9A */
+      '?', /* U+5C9B */
+      '?', /* U+5C9C */
+      '?', /* U+5C9D */
+      '?', /* U+5C9E */
+      '?', /* U+5C9F */
+      '?', /* U+5CA0 */
+   0x89aa, /* U+5CA1 */
+      '?', /* U+5CA2 */
+      '?', /* U+5CA3 */
+      '?', /* U+5CA4 */
+      '?', /* U+5CA5 */
+   0xfaac, /* U+5CA6 */
+      '?', /* U+5CA7 */
+   0x915a, /* U+5CA8 */
+   0x8ae2, /* U+5CA9 */
+      '?', /* U+5CAA */
+   0x9bab, /* U+5CAB */
+   0x96a6, /* U+5CAC */
+      '?', /* U+5CAD */
+      '?', /* U+5CAE */
+      '?', /* U+5CAF */
+      '?', /* U+5CB0 */
+   0x91d0, /* U+5CB1 */
+      '?', /* U+5CB2 */
+   0x8a78, /* U+5CB3 */
+      '?', /* U+5CB4 */
+      '?', /* U+5CB5 */
+   0x9bad, /* U+5CB6 */
+   0x9baf, /* U+5CB7 */
+   0x8add, /* U+5CB8 */
+      '?', /* U+5CB9 */
+   0xfaad, /* U+5CBA */
+   0x9bac, /* U+5CBB */
+   0x9bae, /* U+5CBC */
+      '?', /* U+5CBD */
+   0x9bb1, /* U+5CBE */
+      '?', /* U+5CBF */
+      '?', /* U+5CC0 */
+      '?', /* U+5CC1 */
+      '?', /* U+5CC2 */
+      '?', /* U+5CC3 */
+      '?', /* U+5CC4 */
+   0x9bb0, /* U+5CC5 */
+      '?', /* U+5CC6 */
+   0x9bb2, /* U+5CC7 */
+      '?', /* U+5CC8 */
+      '?', /* U+5CC9 */
+      '?', /* U+5CCA */
+      '?', /* U+5CCB */
+      '?', /* U+5CCC */
+      '?', /* U+5CCD */
+      '?', /* U+5CCE */
+      '?', /* U+5CCF */
+      '?', /* U+5CD0 */
+      '?', /* U+5CD1 */
+      '?', /* U+5CD2 */
+      '?', /* U+5CD3 */
+      '?', /* U+5CD4 */
+      '?', /* U+5CD5 */
+      '?', /* U+5CD6 */
+      '?', /* U+5CD7 */
+      '?', /* U+5CD8 */
+   0x9bb3, /* U+5CD9 */
+      '?', /* U+5CDA */
+      '?', /* U+5CDB */
+      '?', /* U+5CDC */
+      '?', /* U+5CDD */
+      '?', /* U+5CDE */
+      '?', /* U+5CDF */
+   0x93bb, /* U+5CE0 */
+   0x8bac, /* U+5CE1 */
+      '?', /* U+5CE2 */
+      '?', /* U+5CE3 */
+      '?', /* U+5CE4 */
+      '?', /* U+5CE5 */
+      '?', /* U+5CE6 */
+      '?', /* U+5CE7 */
+   0x89e3, /* U+5CE8 */
+   0x9bb4, /* U+5CE9 */
+   0x9bb9, /* U+5CEA */
+      '?', /* U+5CEB */
+      '?', /* U+5CEC */
+   0x9bb7, /* U+5CED */
+      '?', /* U+5CEE */
+   0x95f5, /* U+5CEF */
+   0x95f4, /* U+5CF0 */
+      '?', /* U+5CF1 */
+      '?', /* U+5CF2 */
+      '?', /* U+5CF3 */
+      '?', /* U+5CF4 */
+   0xfaae, /* U+5CF5 */
+   0x9387, /* U+5CF6 */
+      '?', /* U+5CF7 */
+      '?', /* U+5CF8 */
+      '?', /* U+5CF9 */
+   0x9bb6, /* U+5CFA */
+   0x8f73, /* U+5CFB */
+      '?', /* U+5CFC */
+   0x9bb5, /* U+5CFD */
+      '?', /* U+5CFE */
+      '?', /* U+5CFF */
+      '?', /* U+5D00 */
+      '?', /* U+5D01 */
+      '?', /* U+5D02 */
+      '?', /* U+5D03 */
+      '?', /* U+5D04 */
+      '?', /* U+5D05 */
+      '?', /* U+5D06 */
+   0x9092, /* U+5D07 */
+      '?', /* U+5D08 */
+      '?', /* U+5D09 */
+      '?', /* U+5D0A */
+   0x9bba, /* U+5D0B */
+      '?', /* U+5D0C */
+      '?', /* U+5D0D */
+   0x8de8, /* U+5D0E */
+      '?', /* U+5D0F */
+      '?', /* U+5D10 */
+   0x9bc0, /* U+5D11 */
+      '?', /* U+5D12 */
+      '?', /* U+5D13 */
+   0x9bc1, /* U+5D14 */
+   0x9bbb, /* U+5D15 */
+   0x8a52, /* U+5D16 */
+   0x9bbc, /* U+5D17 */
+   0x9bc5, /* U+5D18 */
+   0x9bc4, /* U+5D19 */
+   0x9bc3, /* U+5D1A */
+   0x9bbf, /* U+5D1B */
+      '?', /* U+5D1C */
+      '?', /* U+5D1D */
+      '?', /* U+5D1E */
+   0x9bbe, /* U+5D1F */
+      '?', /* U+5D20 */
+      '?', /* U+5D21 */
+   0x9bc2, /* U+5D22 */
+      '?', /* U+5D23 */
+      '?', /* U+5D24 */
+      '?', /* U+5D25 */
+      '?', /* U+5D26 */
+   0xfaaf, /* U+5D27 */
+      '?', /* U+5D28 */
+   0x95f6, /* U+5D29 */
+      '?', /* U+5D2A */
+      '?', /* U+5D2B */
+      '?', /* U+5D2C */
+      '?', /* U+5D2D */
+      '?', /* U+5D2E */
+      '?', /* U+5D2F */
+      '?', /* U+5D30 */
+      '?', /* U+5D31 */
+      '?', /* U+5D32 */
+      '?', /* U+5D33 */
+      '?', /* U+5D34 */
+      '?', /* U+5D35 */
+      '?', /* U+5D36 */
+      '?', /* U+5D37 */
+      '?', /* U+5D38 */
+      '?', /* U+5D39 */
+      '?', /* U+5D3A */
+      '?', /* U+5D3B */
+      '?', /* U+5D3C */
+      '?', /* U+5D3D */
+      '?', /* U+5D3E */
+      '?', /* U+5D3F */
+      '?', /* U+5D40 */
+      '?', /* U+5D41 */
+   0xfab2, /* U+5D42 */
+      '?', /* U+5D43 */
+      '?', /* U+5D44 */
+      '?', /* U+5D45 */
+      '?', /* U+5D46 */
+      '?', /* U+5D47 */
+      '?', /* U+5D48 */
+      '?', /* U+5D49 */
+      '?', /* U+5D4A */
+   0x9bc9, /* U+5D4B */
+   0x9bc6, /* U+5D4C */
+      '?', /* U+5D4D */
+   0x9bc8, /* U+5D4E */
+      '?', /* U+5D4F */
+   0x9792, /* U+5D50 */
+      '?', /* U+5D51 */
+   0x9bc7, /* U+5D52 */
+   0xfab0, /* U+5D53 */
+      '?', /* U+5D54 */
+      '?', /* U+5D55 */
+      '?', /* U+5D56 */
+      '?', /* U+5D57 */
+      '?', /* U+5D58 */
+      '?', /* U+5D59 */
+      '?', /* U+5D5A */
+      '?', /* U+5D5B */
+   0x9bbd, /* U+5D5C */
+      '?', /* U+5D5D */
+      '?', /* U+5D5E */
+      '?', /* U+5D5F */
+      '?', /* U+5D60 */
+      '?', /* U+5D61 */
+      '?', /* U+5D62 */
+      '?', /* U+5D63 */
+      '?', /* U+5D64 */
+      '?', /* U+5D65 */
+      '?', /* U+5D66 */
+      '?', /* U+5D67 */
+      '?', /* U+5D68 */
+   0x9093, /* U+5D69 */
+      '?', /* U+5D6A */
+      '?', /* U+5D6B */
+   0x9bca, /* U+5D6C */
+   0xfab3, /* U+5D6D */
+      '?', /* U+5D6E */
+   0x8db5, /* U+5D6F */
+      '?', /* U+5D70 */
+      '?', /* U+5D71 */
+      '?', /* U+5D72 */
+   0x9bcb, /* U+5D73 */
+      '?', /* U+5D74 */
+      '?', /* U+5D75 */
+   0x9bcc, /* U+5D76 */
+      '?', /* U+5D77 */
+      '?', /* U+5D78 */
+      '?', /* U+5D79 */
+      '?', /* U+5D7A */
+      '?', /* U+5D7B */
+      '?', /* U+5D7C */
+      '?', /* U+5D7D */
+      '?', /* U+5D7E */
+      '?', /* U+5D7F */
+      '?', /* U+5D80 */
+      '?', /* U+5D81 */
+   0x9bcf, /* U+5D82 */
+      '?', /* U+5D83 */
+   0x9bce, /* U+5D84 */
+      '?', /* U+5D85 */
+      '?', /* U+5D86 */
+   0x9bcd, /* U+5D87 */
+      '?', /* U+5D88 */
+      '?', /* U+5D89 */
+      '?', /* U+5D8A */
+   0x9388, /* U+5D8B */
+   0x9bb8, /* U+5D8C */
+      '?', /* U+5D8D */
+      '?', /* U+5D8E */
+      '?', /* U+5D8F */
+   0x9bd5, /* U+5D90 */
+      '?', /* U+5D91 */
+      '?', /* U+5D92 */
+      '?', /* U+5D93 */
+      '?', /* U+5D94 */
+      '?', /* U+5D95 */
+      '?', /* U+5D96 */
+      '?', /* U+5D97 */
+      '?', /* U+5D98 */
+      '?', /* U+5D99 */
+      '?', /* U+5D9A */
+      '?', /* U+5D9B */
+      '?', /* U+5D9C */
+   0x9bd1, /* U+5D9D */
+      '?', /* U+5D9E */
+      '?', /* U+5D9F */
+      '?', /* U+5DA0 */
+      '?', /* U+5DA1 */
+   0x9bd0, /* U+5DA2 */
+      '?', /* U+5DA3 */
+      '?', /* U+5DA4 */
+      '?', /* U+5DA5 */
+      '?', /* U+5DA6 */
+      '?', /* U+5DA7 */
+      '?', /* U+5DA8 */
+      '?', /* U+5DA9 */
+      '?', /* U+5DAA */
+      '?', /* U+5DAB */
+   0x9bd2, /* U+5DAC */
+      '?', /* U+5DAD */
+   0x9bd3, /* U+5DAE */
+      '?', /* U+5DAF */
+      '?', /* U+5DB0 */
+      '?', /* U+5DB1 */
+      '?', /* U+5DB2 */
+      '?', /* U+5DB3 */
+      '?', /* U+5DB4 */
+      '?', /* U+5DB5 */
+      '?', /* U+5DB6 */
+   0x9bd6, /* U+5DB7 */
+   0xfab4, /* U+5DB8 */
+   0xfab5, /* U+5DB9 */
+   0x97e4, /* U+5DBA */
+      '?', /* U+5DBB */
+   0x9bd7, /* U+5DBC */
+   0x9bd4, /* U+5DBD */
+      '?', /* U+5DBE */
+      '?', /* U+5DBF */
+      '?', /* U+5DC0 */
+      '?', /* U+5DC1 */
+      '?', /* U+5DC2 */
+      '?', /* U+5DC3 */
+      '?', /* U+5DC4 */
+      '?', /* U+5DC5 */
+      '?', /* U+5DC6 */
+      '?', /* U+5DC7 */
+      '?', /* U+5DC8 */
+   0x9bd8, /* U+5DC9 */
+      '?', /* U+5DCA */
+      '?', /* U+5DCB */
+   0x8ade, /* U+5DCC */
+   0x9bd9, /* U+5DCD */
+      '?', /* U+5DCE */
+      '?', /* U+5DCF */
+   0xfab6, /* U+5DD0 */
+      '?', /* U+5DD1 */
+   0x9bdb, /* U+5DD2 */
+   0x9bda, /* U+5DD3 */
+      '?', /* U+5DD4 */
+      '?', /* U+5DD5 */
+   0x9bdc, /* U+5DD6 */
+      '?', /* U+5DD7 */
+      '?', /* U+5DD8 */
+      '?', /* U+5DD9 */
+      '?', /* U+5DDA */
+   0x9bdd, /* U+5DDB */
+      '?', /* U+5DDC */
+   0x90ec, /* U+5DDD */
+   0x8f42, /* U+5DDE */
+      '?', /* U+5DDF */
+      '?', /* U+5DE0 */
+   0x8f84, /* U+5DE1 */
+      '?', /* U+5DE2 */
+   0x9183, /* U+5DE3 */
+      '?', /* U+5DE4 */
+   0x8d48, /* U+5DE5 */
+   0x8db6, /* U+5DE6 */
+   0x8d49, /* U+5DE7 */
+   0x8b90, /* U+5DE8 */
+      '?', /* U+5DE9 */
+      '?', /* U+5DEA */
+   0x9bde, /* U+5DEB */
+      '?', /* U+5DEC */
+      '?', /* U+5DED */
+   0x8db7, /* U+5DEE */
+      '?', /* U+5DEF */
+      '?', /* U+5DF0 */
+   0x8cc8, /* U+5DF1 */
+   0x9bdf, /* U+5DF2 */
+   0x96a4, /* U+5DF3 */
+   0x9462, /* U+5DF4 */
+   0x9be0, /* U+5DF5 */
+      '?', /* U+5DF6 */
+   0x8d4a, /* U+5DF7 */
+      '?', /* U+5DF8 */
+      '?', /* U+5DF9 */
+      '?', /* U+5DFA */
+   0x8aaa, /* U+5DFB */
+      '?', /* U+5DFC */
+   0x9246, /* U+5DFD */
+   0x8bd0, /* U+5DFE */
+      '?', /* U+5DFF */
+      '?', /* U+5E00 */
+      '?', /* U+5E01 */
+   0x8e73, /* U+5E02 */
+   0x957a, /* U+5E03 */
+      '?', /* U+5E04 */
+      '?', /* U+5E05 */
+   0x94bf, /* U+5E06 */
+      '?', /* U+5E07 */
+      '?', /* U+5E08 */
+      '?', /* U+5E09 */
+      '?', /* U+5E0A */
+   0x9be1, /* U+5E0B */
+   0x8af3, /* U+5E0C */
+      '?', /* U+5E0D */
+      '?', /* U+5E0E */
+      '?', /* U+5E0F */
+      '?', /* U+5E10 */
+   0x9be4, /* U+5E11 */
+      '?', /* U+5E12 */
+      '?', /* U+5E13 */
+      '?', /* U+5E14 */
+      '?', /* U+5E15 */
+   0x929f, /* U+5E16 */
+      '?', /* U+5E17 */
+      '?', /* U+5E18 */
+   0x9be3, /* U+5E19 */
+   0x9be2, /* U+5E1A */
+   0x9be5, /* U+5E1B */
+      '?', /* U+5E1C */
+   0x92e9, /* U+5E1D */
+      '?', /* U+5E1E */
+      '?', /* U+5E1F */
+      '?', /* U+5E20 */
+      '?', /* U+5E21 */
+      '?', /* U+5E22 */
+      '?', /* U+5E23 */
+      '?', /* U+5E24 */
+   0x9083, /* U+5E25 */
+      '?', /* U+5E26 */
+      '?', /* U+5E27 */
+      '?', /* U+5E28 */
+      '?', /* U+5E29 */
+      '?', /* U+5E2A */
+   0x8e74, /* U+5E2B */
+      '?', /* U+5E2C */
+   0x90c8, /* U+5E2D */
+      '?', /* U+5E2E */
+   0x91d1, /* U+5E2F */
+   0x8b41, /* U+5E30 */
+      '?', /* U+5E31 */
+      '?', /* U+5E32 */
+   0x92a0, /* U+5E33 */
+      '?', /* U+5E34 */
+      '?', /* U+5E35 */
+   0x9be6, /* U+5E36 */
+   0x9be7, /* U+5E37 */
+   0x8fed, /* U+5E38 */
+      '?', /* U+5E39 */
+      '?', /* U+5E3A */
+      '?', /* U+5E3B */
+      '?', /* U+5E3C */
+   0x9658, /* U+5E3D */
+      '?', /* U+5E3E */
+      '?', /* U+5E3F */
+   0x9bea, /* U+5E40 */
+      '?', /* U+5E41 */
+      '?', /* U+5E42 */
+   0x9be9, /* U+5E43 */
+   0x9be8, /* U+5E44 */
+   0x959d, /* U+5E45 */
+      '?', /* U+5E46 */
+   0x9bf1, /* U+5E47 */
+      '?', /* U+5E48 */
+      '?', /* U+5E49 */
+      '?', /* U+5E4A */
+      '?', /* U+5E4B */
+   0x9679, /* U+5E4C */
+      '?', /* U+5E4D */
+   0x9beb, /* U+5E4E */
+      '?', /* U+5E4F */
+      '?', /* U+5E50 */
+      '?', /* U+5E51 */
+      '?', /* U+5E52 */
+      '?', /* U+5E53 */
+   0x9bed, /* U+5E54 */
+   0x968b, /* U+5E55 */
+      '?', /* U+5E56 */
+   0x9bec, /* U+5E57 */
+      '?', /* U+5E58 */
+      '?', /* U+5E59 */
+      '?', /* U+5E5A */
+      '?', /* U+5E5B */
+      '?', /* U+5E5C */
+      '?', /* U+5E5D */
+      '?', /* U+5E5E */
+   0x9bee, /* U+5E5F */
+      '?', /* U+5E60 */
+   0x94a6, /* U+5E61 */
+   0x9bef, /* U+5E62 */
+   0x95bc, /* U+5E63 */
+   0x9bf0, /* U+5E64 */
+      '?', /* U+5E65 */
+      '?', /* U+5E66 */
+      '?', /* U+5E67 */
+      '?', /* U+5E68 */
+      '?', /* U+5E69 */
+      '?', /* U+5E6A */
+      '?', /* U+5E6B */
+      '?', /* U+5E6C */
+      '?', /* U+5E6D */
+      '?', /* U+5E6E */
+      '?', /* U+5E6F */
+      '?', /* U+5E70 */
+      '?', /* U+5E71 */
+   0x8ab1, /* U+5E72 */
+   0x95bd, /* U+5E73 */
+   0x944e, /* U+5E74 */
+   0x9bf2, /* U+5E75 */
+   0x9bf3, /* U+5E76 */
+      '?', /* U+5E77 */
+   0x8d4b, /* U+5E78 */
+   0x8ab2, /* U+5E79 */
+   0x9bf4, /* U+5E7A */
+   0x8cb6, /* U+5E7B */
+   0x9763, /* U+5E7C */
+   0x9748, /* U+5E7D */
+   0x8af4, /* U+5E7E */
+   0x9bf6, /* U+5E7F */
+      '?', /* U+5E80 */
+   0x92a1, /* U+5E81 */
+      '?', /* U+5E82 */
+   0x8d4c, /* U+5E83 */
+   0x8faf, /* U+5E84 */
+      '?', /* U+5E85 */
+      '?', /* U+5E86 */
+   0x94dd, /* U+5E87 */
+      '?', /* U+5E88 */
+      '?', /* U+5E89 */
+   0x8fb0, /* U+5E8A */
+      '?', /* U+5E8B */
+      '?', /* U+5E8C */
+      '?', /* U+5E8D */
+      '?', /* U+5E8E */
+   0x8f98, /* U+5E8F */
+      '?', /* U+5E90 */
+      '?', /* U+5E91 */
+      '?', /* U+5E92 */
+      '?', /* U+5E93 */
+      '?', /* U+5E94 */
+   0x92ea, /* U+5E95 */
+   0x95f7, /* U+5E96 */
+   0x9358, /* U+5E97 */
+      '?', /* U+5E98 */
+      '?', /* U+5E99 */
+   0x8d4d, /* U+5E9A */
+      '?', /* U+5E9B */
+   0x957b, /* U+5E9C */
+      '?', /* U+5E9D */
+      '?', /* U+5E9E */
+      '?', /* U+5E9F */
+   0x9bf7, /* U+5EA0 */
+      '?', /* U+5EA1 */
+      '?', /* U+5EA2 */
+      '?', /* U+5EA3 */
+      '?', /* U+5EA4 */
+      '?', /* U+5EA5 */
+   0x9378, /* U+5EA6 */
+   0x8dc0, /* U+5EA7 */
+      '?', /* U+5EA8 */
+      '?', /* U+5EA9 */
+      '?', /* U+5EAA */
+   0x8cc9, /* U+5EAB */
+      '?', /* U+5EAC */
+   0x92eb, /* U+5EAD */
+      '?', /* U+5EAE */
+      '?', /* U+5EAF */
+      '?', /* U+5EB0 */
+      '?', /* U+5EB1 */
+      '?', /* U+5EB2 */
+      '?', /* U+5EB3 */
+      '?', /* U+5EB4 */
+   0x88c1, /* U+5EB5 */
+   0x8f8e, /* U+5EB6 */
+   0x8d4e, /* U+5EB7 */
+   0x9766, /* U+5EB8 */
+      '?', /* U+5EB9 */
+      '?', /* U+5EBA */
+      '?', /* U+5EBB */
+      '?', /* U+5EBC */
+      '?', /* U+5EBD */
+      '?', /* U+5EBE */
+      '?', /* U+5EBF */
+      '?', /* U+5EC0 */
+   0x9bf8, /* U+5EC1 */
+   0x9bf9, /* U+5EC2 */
+   0x9470, /* U+5EC3 */
+      '?', /* U+5EC4 */
+      '?', /* U+5EC5 */
+      '?', /* U+5EC6 */
+      '?', /* U+5EC7 */
+   0x9bfa, /* U+5EC8 */
+   0x97f5, /* U+5EC9 */
+   0x984c, /* U+5ECA */
+      '?', /* U+5ECB */
+      '?', /* U+5ECC */
+      '?', /* U+5ECD */
+      '?', /* U+5ECE */
+   0x9bfc, /* U+5ECF */
+   0x9bfb, /* U+5ED0 */
+      '?', /* U+5ED1 */
+      '?', /* U+5ED2 */
+   0x8a66, /* U+5ED3 */
+      '?', /* U+5ED4 */
+      '?', /* U+5ED5 */
+   0x9c40, /* U+5ED6 */
+      '?', /* U+5ED7 */
+      '?', /* U+5ED8 */
+      '?', /* U+5ED9 */
+   0x9c43, /* U+5EDA */
+   0x9c44, /* U+5EDB */
+      '?', /* U+5EDC */
+   0x9c42, /* U+5EDD */
+      '?', /* U+5EDE */
+   0x955f, /* U+5EDF */
+   0x8fb1, /* U+5EE0 */
+   0x9c46, /* U+5EE1 */
+   0x9c45, /* U+5EE2 */
+   0x9c41, /* U+5EE3 */
+      '?', /* U+5EE4 */
+      '?', /* U+5EE5 */
+      '?', /* U+5EE6 */
+      '?', /* U+5EE7 */
+   0x9c47, /* U+5EE8 */
+   0x9c48, /* U+5EE9 */
+      '?', /* U+5EEA */
+      '?', /* U+5EEB */
+   0x9c49, /* U+5EEC */
+      '?', /* U+5EED */
+      '?', /* U+5EEE */
+      '?', /* U+5EEF */
+   0x9c4c, /* U+5EF0 */
+   0x9c4a, /* U+5EF1 */
+      '?', /* U+5EF2 */
+   0x9c4b, /* U+5EF3 */
+   0x9c4d, /* U+5EF4 */
+      '?', /* U+5EF5 */
+   0x8984, /* U+5EF6 */
+   0x92ec, /* U+5EF7 */
+   0x9c4e, /* U+5EF8 */
+      '?', /* U+5EF9 */
+   0x8c9a, /* U+5EFA */
+   0x89f4, /* U+5EFB */
+   0x9455, /* U+5EFC */
+      '?', /* U+5EFD */
+   0x9c4f, /* U+5EFE */
+   0x93f9, /* U+5EFF */
+      '?', /* U+5F00 */
+   0x95d9, /* U+5F01 */
+      '?', /* U+5F02 */
+   0x9c50, /* U+5F03 */
+   0x984d, /* U+5F04 */
+      '?', /* U+5F05 */
+      '?', /* U+5F06 */
+      '?', /* U+5F07 */
+      '?', /* U+5F08 */
+   0x9c51, /* U+5F09 */
+   0x95be, /* U+5F0A */
+   0x9c54, /* U+5F0B */
+   0x989f, /* U+5F0C */
+   0x98af, /* U+5F0D */
+      '?', /* U+5F0E */
+   0x8eae, /* U+5F0F */
+   0x93f3, /* U+5F10 */
+   0x9c55, /* U+5F11 */
+      '?', /* U+5F12 */
+   0x8b7c, /* U+5F13 */
+   0x92a2, /* U+5F14 */
+   0x88f8, /* U+5F15 */
+   0x9c56, /* U+5F16 */
+   0x95a4, /* U+5F17 */
+   0x8d4f, /* U+5F18 */
+      '?', /* U+5F19 */
+      '?', /* U+5F1A */
+   0x926f, /* U+5F1B */
+      '?', /* U+5F1C */
+      '?', /* U+5F1D */
+      '?', /* U+5F1E */
+   0x92ed, /* U+5F1F */
+      '?', /* U+5F20 */
+   0xfab7, /* U+5F21 */
+      '?', /* U+5F22 */
+      '?', /* U+5F23 */
+      '?', /* U+5F24 */
+   0x96ed, /* U+5F25 */
+   0x8cb7, /* U+5F26 */
+   0x8cca, /* U+5F27 */
+      '?', /* U+5F28 */
+   0x9c57, /* U+5F29 */
+      '?', /* U+5F2A */
+      '?', /* U+5F2B */
+      '?', /* U+5F2C */
+   0x9c58, /* U+5F2D */
+      '?', /* U+5F2E */
+   0x9c5e, /* U+5F2F */
+      '?', /* U+5F30 */
+   0x8ee3, /* U+5F31 */
+      '?', /* U+5F32 */
+      '?', /* U+5F33 */
+   0xfab8, /* U+5F34 */
+   0x92a3, /* U+5F35 */
+      '?', /* U+5F36 */
+   0x8bad, /* U+5F37 */
+   0x9c59, /* U+5F38 */
+      '?', /* U+5F39 */
+      '?', /* U+5F3A */
+      '?', /* U+5F3B */
+   0x954a, /* U+5F3C */
+      '?', /* U+5F3D */
+   0x9265, /* U+5F3E */
+      '?', /* U+5F3F */
+      '?', /* U+5F40 */
+   0x9c5a, /* U+5F41 */
+      '?', /* U+5F42 */
+      '?', /* U+5F43 */
+      '?', /* U+5F44 */
+   0xfa67, /* U+5F45 */
+      '?', /* U+5F46 */
+      '?', /* U+5F47 */
+   0x9c5b, /* U+5F48 */
+      '?', /* U+5F49 */
+   0x8bae, /* U+5F4A */
+      '?', /* U+5F4B */
+   0x9c5c, /* U+5F4C */
+      '?', /* U+5F4D */
+   0x9c5d, /* U+5F4E */
+      '?', /* U+5F4F */
+      '?', /* U+5F50 */
+   0x9c5f, /* U+5F51 */
+      '?', /* U+5F52 */
+   0x9396, /* U+5F53 */
+      '?', /* U+5F54 */
+      '?', /* U+5F55 */
+   0x9c60, /* U+5F56 */
+   0x9c61, /* U+5F57 */
+      '?', /* U+5F58 */
+   0x9c62, /* U+5F59 */
+      '?', /* U+5F5A */
+      '?', /* U+5F5B */
+   0x9c53, /* U+5F5C */
+   0x9c52, /* U+5F5D */
+      '?', /* U+5F5E */
+      '?', /* U+5F5F */
+      '?', /* U+5F60 */
+   0x9c63, /* U+5F61 */
+   0x8c60, /* U+5F62 */
+      '?', /* U+5F63 */
+      '?', /* U+5F64 */
+      '?', /* U+5F65 */
+   0x9546, /* U+5F66 */
+   0xfab9, /* U+5F67 */
+      '?', /* U+5F68 */
+   0x8dca, /* U+5F69 */
+   0x9556, /* U+5F6A */
+   0x92a4, /* U+5F6B */
+   0x956a, /* U+5F6C */
+   0x9c64, /* U+5F6D */
+      '?', /* U+5F6E */
+      '?', /* U+5F6F */
+   0x8fb2, /* U+5F70 */
+   0x8965, /* U+5F71 */
+      '?', /* U+5F72 */
+   0x9c65, /* U+5F73 */
+      '?', /* U+5F74 */
+      '?', /* U+5F75 */
+      '?', /* U+5F76 */
+   0x9c66, /* U+5F77 */
+      '?', /* U+5F78 */
+   0x96f0, /* U+5F79 */
+      '?', /* U+5F7A */
+      '?', /* U+5F7B */
+   0x94de, /* U+5F7C */
+      '?', /* U+5F7D */
+      '?', /* U+5F7E */
+   0x9c69, /* U+5F7F */
+   0x899d, /* U+5F80 */
+   0x90aa, /* U+5F81 */
+   0x9c68, /* U+5F82 */
+   0x9c67, /* U+5F83 */
+   0x8c61, /* U+5F84 */
+   0x91d2, /* U+5F85 */
+      '?', /* U+5F86 */
+   0x9c6d, /* U+5F87 */
+   0x9c6b, /* U+5F88 */
+      '?', /* U+5F89 */
+   0x9c6a, /* U+5F8A */
+   0x97a5, /* U+5F8B */
+   0x8ce3, /* U+5F8C */
+      '?', /* U+5F8D */
+      '?', /* U+5F8E */
+      '?', /* U+5F8F */
+   0x8f99, /* U+5F90 */
+   0x9c6c, /* U+5F91 */
+   0x936b, /* U+5F92 */
+   0x8f5d, /* U+5F93 */
+      '?', /* U+5F94 */
+      '?', /* U+5F95 */
+      '?', /* U+5F96 */
+   0x93be, /* U+5F97 */
+   0x9c70, /* U+5F98 */
+   0x9c6f, /* U+5F99 */
+      '?', /* U+5F9A */
+      '?', /* U+5F9B */
+      '?', /* U+5F9C */
+      '?', /* U+5F9D */
+   0x9c6e, /* U+5F9E */
+      '?', /* U+5F9F */
+   0x9c71, /* U+5FA0 */
+   0x8ce4, /* U+5FA1 */
+      '?', /* U+5FA2 */
+      '?', /* U+5FA3 */
+      '?', /* U+5FA4 */
+      '?', /* U+5FA5 */
+      '?', /* U+5FA6 */
+      '?', /* U+5FA7 */
+   0x9c72, /* U+5FA8 */
+   0x959c, /* U+5FA9 */
+   0x8f7a, /* U+5FAA */
+      '?', /* U+5FAB */
+      '?', /* U+5FAC */
+   0x9c73, /* U+5FAD */
+   0x94f7, /* U+5FAE */
+      '?', /* U+5FAF */
+      '?', /* U+5FB0 */
+      '?', /* U+5FB1 */
+      '?', /* U+5FB2 */
+   0x93bf, /* U+5FB3 */
+   0x92a5, /* U+5FB4 */
+      '?', /* U+5FB5 */
+      '?', /* U+5FB6 */
+   0xfaba, /* U+5FB7 */
+      '?', /* U+5FB8 */
+   0x934f, /* U+5FB9 */
+      '?', /* U+5FBA */
+      '?', /* U+5FBB */
+   0x9c74, /* U+5FBC */
+   0x8b4a, /* U+5FBD */
+      '?', /* U+5FBE */
+      '?', /* U+5FBF */
+      '?', /* U+5FC0 */
+      '?', /* U+5FC1 */
+      '?', /* U+5FC2 */
+   0x9053, /* U+5FC3 */
+      '?', /* U+5FC4 */
+   0x954b, /* U+5FC5 */
+      '?', /* U+5FC6 */
+      '?', /* U+5FC7 */
+      '?', /* U+5FC8 */
+      '?', /* U+5FC9 */
+      '?', /* U+5FCA */
+      '?', /* U+5FCB */
+   0x8af5, /* U+5FCC */
+   0x9445, /* U+5FCD */
+      '?', /* U+5FCE */
+      '?', /* U+5FCF */
+      '?', /* U+5FD0 */
+      '?', /* U+5FD1 */
+      '?', /* U+5FD2 */
+      '?', /* U+5FD3 */
+      '?', /* U+5FD4 */
+      '?', /* U+5FD5 */
+   0x9c75, /* U+5FD6 */
+   0x8e75, /* U+5FD7 */
+   0x9659, /* U+5FD8 */
+   0x965a, /* U+5FD9 */
+      '?', /* U+5FDA */
+      '?', /* U+5FDB */
+   0x899e, /* U+5FDC */
+   0x9c7a, /* U+5FDD */
+   0xfabb, /* U+5FDE */
+      '?', /* U+5FDF */
+   0x9289, /* U+5FE0 */
+      '?', /* U+5FE1 */
+      '?', /* U+5FE2 */
+      '?', /* U+5FE3 */
+   0x9c77, /* U+5FE4 */
+      '?', /* U+5FE5 */
+      '?', /* U+5FE6 */
+      '?', /* U+5FE7 */
+      '?', /* U+5FE8 */
+      '?', /* U+5FE9 */
+      '?', /* U+5FEA */
+   0x89f5, /* U+5FEB */
+      '?', /* U+5FEC */
+      '?', /* U+5FED */
+      '?', /* U+5FEE */
+      '?', /* U+5FEF */
+   0x9cab, /* U+5FF0 */
+   0x9c79, /* U+5FF1 */
+      '?', /* U+5FF2 */
+      '?', /* U+5FF3 */
+      '?', /* U+5FF4 */
+   0x944f, /* U+5FF5 */
+      '?', /* U+5FF6 */
+      '?', /* U+5FF7 */
+   0x9c78, /* U+5FF8 */
+      '?', /* U+5FF9 */
+      '?', /* U+5FFA */
+   0x9c76, /* U+5FFB */
+      '?', /* U+5FFC */
+   0x8d9a, /* U+5FFD */
+      '?', /* U+5FFE */
+   0x9c7c, /* U+5FFF */
+      '?', /* U+6000 */
+      '?', /* U+6001 */
+      '?', /* U+6002 */
+      '?', /* U+6003 */
+      '?', /* U+6004 */
+      '?', /* U+6005 */
+      '?', /* U+6006 */
+      '?', /* U+6007 */
+      '?', /* U+6008 */
+      '?', /* U+6009 */
+      '?', /* U+600A */
+      '?', /* U+600B */
+      '?', /* U+600C */
+      '?', /* U+600D */
+   0x9c83, /* U+600E */
+   0x9c89, /* U+600F */
+   0x9c81, /* U+6010 */
+      '?', /* U+6011 */
+   0x937b, /* U+6012 */
+      '?', /* U+6013 */
+      '?', /* U+6014 */
+   0x9c86, /* U+6015 */
+   0x957c, /* U+6016 */
+      '?', /* U+6017 */
+      '?', /* U+6018 */
+   0x9c80, /* U+6019 */
+      '?', /* U+601A */
+   0x9c85, /* U+601B */
+   0x97e5, /* U+601C */
+   0x8e76, /* U+601D */
+      '?', /* U+601E */
+      '?', /* U+601F */
+   0x91d3, /* U+6020 */
+   0x9c7d, /* U+6021 */
+      '?', /* U+6022 */
+      '?', /* U+6023 */
+      '?', /* U+6024 */
+   0x8b7d, /* U+6025 */
+   0x9c88, /* U+6026 */
+   0x90ab, /* U+6027 */
+   0x8985, /* U+6028 */
+   0x9c82, /* U+6029 */
+   0x89f6, /* U+602A */
+   0x9c87, /* U+602B */
+      '?', /* U+602C */
+      '?', /* U+602D */
+      '?', /* U+602E */
+   0x8baf, /* U+602F */
+      '?', /* U+6030 */
+   0x9c84, /* U+6031 */
+      '?', /* U+6032 */
+      '?', /* U+6033 */
+      '?', /* U+6034 */
+      '?', /* U+6035 */
+      '?', /* U+6036 */
+      '?', /* U+6037 */
+      '?', /* U+6038 */
+      '?', /* U+6039 */
+   0x9c8a, /* U+603A */
+      '?', /* U+603B */
+      '?', /* U+603C */
+      '?', /* U+603D */
+      '?', /* U+603E */
+      '?', /* U+603F */
+      '?', /* U+6040 */
+   0x9c8c, /* U+6041 */
+   0x9c96, /* U+6042 */
+   0x9c94, /* U+6043 */
+      '?', /* U+6044 */
+      '?', /* U+6045 */
+   0x9c91, /* U+6046 */
+      '?', /* U+6047 */
+      '?', /* U+6048 */
+      '?', /* U+6049 */
+   0x9c90, /* U+604A */
+   0x97f6, /* U+604B */
+      '?', /* U+604C */
+   0x9c92, /* U+604D */
+      '?', /* U+604E */
+      '?', /* U+604F */
+   0x8bb0, /* U+6050 */
+      '?', /* U+6051 */
+   0x8d50, /* U+6052 */
+      '?', /* U+6053 */
+      '?', /* U+6054 */
+   0x8f9a, /* U+6055 */
+      '?', /* U+6056 */
+      '?', /* U+6057 */
+      '?', /* U+6058 */
+   0x9c99, /* U+6059 */
+   0x9c8b, /* U+605A */
+      '?', /* U+605B */
+      '?', /* U+605C */
+   0xfabc, /* U+605D */
+      '?', /* U+605E */
+   0x9c8f, /* U+605F */
+   0x9c7e, /* U+6060 */
+      '?', /* U+6061 */
+   0x89f8, /* U+6062 */
+   0x9c93, /* U+6063 */
+   0x9c95, /* U+6064 */
+   0x9270, /* U+6065 */
+      '?', /* U+6066 */
+      '?', /* U+6067 */
+   0x8da6, /* U+6068 */
+   0x89b6, /* U+6069 */
+   0x9c8d, /* U+606A */
+   0x9c98, /* U+606B */
+   0x9c97, /* U+606C */
+   0x8bb1, /* U+606D */
+      '?', /* U+606E */
+   0x91a7, /* U+606F */
+   0x8a86, /* U+6070 */
+      '?', /* U+6071 */
+      '?', /* U+6072 */
+      '?', /* U+6073 */
+      '?', /* U+6074 */
+   0x8c62, /* U+6075 */
+      '?', /* U+6076 */
+   0x9c8e, /* U+6077 */
+      '?', /* U+6078 */
+      '?', /* U+6079 */
+      '?', /* U+607A */
+      '?', /* U+607B */
+      '?', /* U+607C */
+      '?', /* U+607D */
+      '?', /* U+607E */
+      '?', /* U+607F */
+      '?', /* U+6080 */
+   0x9c9a, /* U+6081 */
+      '?', /* U+6082 */
+   0x9c9d, /* U+6083 */
+   0x9c9f, /* U+6084 */
+   0xfabd, /* U+6085 */
+      '?', /* U+6086 */
+      '?', /* U+6087 */
+      '?', /* U+6088 */
+   0x8ebb, /* U+6089 */
+   0xfabe, /* U+608A */
+   0x9ca5, /* U+608B */
+   0x92ee, /* U+608C */
+   0x9c9b, /* U+608D */
+      '?', /* U+608E */
+      '?', /* U+608F */
+      '?', /* U+6090 */
+      '?', /* U+6091 */
+   0x9ca3, /* U+6092 */
+      '?', /* U+6093 */
+   0x89f7, /* U+6094 */
+      '?', /* U+6095 */
+   0x9ca1, /* U+6096 */
+   0x9ca2, /* U+6097 */
+      '?', /* U+6098 */
+      '?', /* U+6099 */
+   0x9c9e, /* U+609A */
+   0x9ca0, /* U+609B */
+      '?', /* U+609C */
+      '?', /* U+609D */
+      '?', /* U+609E */
+   0x8ce5, /* U+609F */
+   0x9749, /* U+60A0 */
+      '?', /* U+60A1 */
+      '?', /* U+60A2 */
+   0x8ab3, /* U+60A3 */
+      '?', /* U+60A4 */
+      '?', /* U+60A5 */
+   0x8978, /* U+60A6 */
+   0x9ca4, /* U+60A7 */
+      '?', /* U+60A8 */
+   0x9459, /* U+60A9 */
+   0x88ab, /* U+60AA */
+      '?', /* U+60AB */
+      '?', /* U+60AC */
+      '?', /* U+60AD */
+      '?', /* U+60AE */
+      '?', /* U+60AF */
+      '?', /* U+60B0 */
+      '?', /* U+60B1 */
+   0x94df, /* U+60B2 */
+   0x9c7b, /* U+60B3 */
+   0x9caa, /* U+60B4 */
+   0x9cae, /* U+60B5 */
+   0x96e3, /* U+60B6 */
+      '?', /* U+60B7 */
+   0x9ca7, /* U+60B8 */
+      '?', /* U+60B9 */
+      '?', /* U+60BA */
+      '?', /* U+60BB */
+   0x9389, /* U+60BC */
+   0x9cac, /* U+60BD */
+      '?', /* U+60BE */
+      '?', /* U+60BF */
+      '?', /* U+60C0 */
+      '?', /* U+60C1 */
+      '?', /* U+60C2 */
+      '?', /* U+60C3 */
+      '?', /* U+60C4 */
+   0x8fee, /* U+60C5 */
+   0x9cad, /* U+60C6 */
+   0x93d5, /* U+60C7 */
+      '?', /* U+60C8 */
+      '?', /* U+60C9 */
+      '?', /* U+60CA */
+      '?', /* U+60CB */
+      '?', /* U+60CC */
+      '?', /* U+60CD */
+      '?', /* U+60CE */
+      '?', /* U+60CF */
+      '?', /* U+60D0 */
+   0x9866, /* U+60D1 */
+      '?', /* U+60D2 */
+   0x9ca9, /* U+60D3 */
+      '?', /* U+60D4 */
+   0xfac0, /* U+60D5 */
+      '?', /* U+60D6 */
+      '?', /* U+60D7 */
+   0x9caf, /* U+60D8 */
+      '?', /* U+60D9 */
+   0x8d9b, /* U+60DA */
+      '?', /* U+60DB */
+   0x90c9, /* U+60DC */
+      '?', /* U+60DD */
+   0xfabf, /* U+60DE */
+   0x88d2, /* U+60DF */
+   0x9ca8, /* U+60E0 */
+   0x9ca6, /* U+60E1 */
+      '?', /* U+60E2 */
+   0x9179, /* U+60E3 */
+      '?', /* U+60E4 */
+      '?', /* U+60E5 */
+      '?', /* U+60E6 */
+   0x9c9c, /* U+60E7 */
+   0x8e53, /* U+60E8 */
+      '?', /* U+60E9 */
+      '?', /* U+60EA */
+      '?', /* U+60EB */
+      '?', /* U+60EC */
+      '?', /* U+60ED */
+      '?', /* U+60EE */
+      '?', /* U+60EF */
+   0x91c4, /* U+60F0 */
+   0x9cbb, /* U+60F1 */
+   0xfac2, /* U+60F2 */
+   0x917a, /* U+60F3 */
+   0x9cb6, /* U+60F4 */
+      '?', /* U+60F5 */
+   0x9cb3, /* U+60F6 */
+   0x9cb4, /* U+60F7 */
+      '?', /* U+60F8 */
+   0x8ee4, /* U+60F9 */
+   0x9cb7, /* U+60FA */
+   0x9cba, /* U+60FB */
+      '?', /* U+60FC */
+      '?', /* U+60FD */
+      '?', /* U+60FE */
+      '?', /* U+60FF */
+   0x9cb5, /* U+6100 */
+   0x8f44, /* U+6101 */
+      '?', /* U+6102 */
+   0x9cb8, /* U+6103 */
+      '?', /* U+6104 */
+      '?', /* U+6105 */
+   0x9cb2, /* U+6106 */
+      '?', /* U+6107 */
+   0x96fa, /* U+6108 */
+   0x96f9, /* U+6109 */
+      '?', /* U+610A */
+      '?', /* U+610B */
+      '?', /* U+610C */
+   0x9cbc, /* U+610D */
+   0x9cbd, /* U+610E */
+   0x88d3, /* U+610F */
+      '?', /* U+6110 */
+   0xfac3, /* U+6111 */
+      '?', /* U+6112 */
+      '?', /* U+6113 */
+      '?', /* U+6114 */
+   0x9cb1, /* U+6115 */
+      '?', /* U+6116 */
+      '?', /* U+6117 */
+      '?', /* U+6118 */
+      '?', /* U+6119 */
+   0x8bf0, /* U+611A */
+   0x88a4, /* U+611B */
+      '?', /* U+611C */
+      '?', /* U+611D */
+      '?', /* U+611E */
+   0x8ab4, /* U+611F */
+   0xfac1, /* U+6120 */
+   0x9cb9, /* U+6121 */
+      '?', /* U+6122 */
+      '?', /* U+6123 */
+      '?', /* U+6124 */
+      '?', /* U+6125 */
+      '?', /* U+6126 */
+   0x9cc1, /* U+6127 */
+   0x9cc0, /* U+6128 */
+      '?', /* U+6129 */
+      '?', /* U+612A */
+      '?', /* U+612B */
+   0x9cc5, /* U+612C */
+      '?', /* U+612D */
+      '?', /* U+612E */
+      '?', /* U+612F */
+   0xfac5, /* U+6130 */
+      '?', /* U+6131 */
+      '?', /* U+6132 */
+      '?', /* U+6133 */
+   0x9cc6, /* U+6134 */
+      '?', /* U+6135 */
+      '?', /* U+6136 */
+   0xfac4, /* U+6137 */
+      '?', /* U+6138 */
+      '?', /* U+6139 */
+      '?', /* U+613A */
+      '?', /* U+613B */
+   0x9cc4, /* U+613C */
+   0x9cc7, /* U+613D */
+   0x9cbf, /* U+613E */
+   0x9cc3, /* U+613F */
+      '?', /* U+6140 */
+      '?', /* U+6141 */
+   0x9cc8, /* U+6142 */
+      '?', /* U+6143 */
+   0x9cc9, /* U+6144 */
+      '?', /* U+6145 */
+      '?', /* U+6146 */
+   0x9cbe, /* U+6147 */
+   0x8e9c, /* U+6148 */
+      '?', /* U+6149 */
+   0x9cc2, /* U+614A */
+   0x91d4, /* U+614B */
+   0x8d51, /* U+614C */
+   0x9cb0, /* U+614D */
+   0x9054, /* U+614E */
+      '?', /* U+614F */
+      '?', /* U+6150 */
+      '?', /* U+6151 */
+      '?', /* U+6152 */
+   0x9cd6, /* U+6153 */
+      '?', /* U+6154 */
+   0x95e7, /* U+6155 */
+      '?', /* U+6156 */
+      '?', /* U+6157 */
+   0x9ccc, /* U+6158 */
+   0x9ccd, /* U+6159 */
+   0x9cce, /* U+615A */
+      '?', /* U+615B */
+      '?', /* U+615C */
+   0x9cd5, /* U+615D */
+      '?', /* U+615E */
+   0x9cd4, /* U+615F */
+      '?', /* U+6160 */
+      '?', /* U+6161 */
+   0x969d, /* U+6162 */
+   0x8ab5, /* U+6163 */
+      '?', /* U+6164 */
+   0x9cd2, /* U+6165 */
+      '?', /* U+6166 */
+   0x8c64, /* U+6167 */
+   0x8a53, /* U+6168 */
+      '?', /* U+6169 */
+      '?', /* U+616A */
+   0x9ccf, /* U+616B */
+      '?', /* U+616C */
+      '?', /* U+616D */
+   0x97b6, /* U+616E */
+   0x9cd1, /* U+616F */
+   0x88d4, /* U+6170 */
+   0x9cd3, /* U+6171 */
+      '?', /* U+6172 */
+   0x9cca, /* U+6173 */
+   0x9cd0, /* U+6174 */
+   0x9cd7, /* U+6175 */
+   0x8c63, /* U+6176 */
+   0x9ccb, /* U+6177 */
+      '?', /* U+6178 */
+      '?', /* U+6179 */
+      '?', /* U+617A */
+      '?', /* U+617B */
+      '?', /* U+617C */
+      '?', /* U+617D */
+   0x977c, /* U+617E */
+      '?', /* U+617F */
+      '?', /* U+6180 */
+      '?', /* U+6181 */
+   0x974a, /* U+6182 */
+      '?', /* U+6183 */
+      '?', /* U+6184 */
+      '?', /* U+6185 */
+      '?', /* U+6186 */
+   0x9cda, /* U+6187 */
+      '?', /* U+6188 */
+      '?', /* U+6189 */
+   0x9cde, /* U+618A */
+      '?', /* U+618B */
+      '?', /* U+618C */
+      '?', /* U+618D */
+   0x919e, /* U+618E */
+      '?', /* U+618F */
+   0x97f7, /* U+6190 */
+   0x9cdf, /* U+6191 */
+      '?', /* U+6192 */
+      '?', /* U+6193 */
+   0x9cdc, /* U+6194 */
+      '?', /* U+6195 */
+   0x9cd9, /* U+6196 */
+      '?', /* U+6197 */
+   0xfac6, /* U+6198 */
+   0x9cd8, /* U+6199 */
+   0x9cdd, /* U+619A */
+      '?', /* U+619B */
+      '?', /* U+619C */
+      '?', /* U+619D */
+      '?', /* U+619E */
+      '?', /* U+619F */
+      '?', /* U+61A0 */
+      '?', /* U+61A1 */
+      '?', /* U+61A2 */
+      '?', /* U+61A3 */
+   0x95ae, /* U+61A4 */
+      '?', /* U+61A5 */
+      '?', /* U+61A6 */
+   0x93b2, /* U+61A7 */
+      '?', /* U+61A8 */
+   0x8c65, /* U+61A9 */
+      '?', /* U+61AA */
+   0x9ce0, /* U+61AB */
+   0x9cdb, /* U+61AC */
+      '?', /* U+61AD */
+   0x9ce1, /* U+61AE */
+      '?', /* U+61AF */
+      '?', /* U+61B0 */
+      '?', /* U+61B1 */
+   0x8c9b, /* U+61B2 */
+      '?', /* U+61B3 */
+      '?', /* U+61B4 */
+      '?', /* U+61B5 */
+   0x89af, /* U+61B6 */
+      '?', /* U+61B7 */
+      '?', /* U+61B8 */
+      '?', /* U+61B9 */
+   0x9ce9, /* U+61BA */
+      '?', /* U+61BB */
+      '?', /* U+61BC */
+      '?', /* U+61BD */
+   0x8ab6, /* U+61BE */
+      '?', /* U+61BF */
+      '?', /* U+61C0 */
+      '?', /* U+61C1 */
+      '?', /* U+61C2 */
+   0x9ce7, /* U+61C3 */
+      '?', /* U+61C4 */
+      '?', /* U+61C5 */
+   0x9ce8, /* U+61C6 */
+   0x8da7, /* U+61C7 */
+   0x9ce6, /* U+61C8 */
+   0x9ce4, /* U+61C9 */
+   0x9ce3, /* U+61CA */
+   0x9cea, /* U+61CB */
+   0x9ce2, /* U+61CC */
+   0x9cec, /* U+61CD */
+      '?', /* U+61CE */
+      '?', /* U+61CF */
+   0x89f9, /* U+61D0 */
+      '?', /* U+61D1 */
+      '?', /* U+61D2 */
+      '?', /* U+61D3 */
+      '?', /* U+61D4 */
+      '?', /* U+61D5 */
+      '?', /* U+61D6 */
+      '?', /* U+61D7 */
+      '?', /* U+61D8 */
+      '?', /* U+61D9 */
+      '?', /* U+61DA */
+      '?', /* U+61DB */
+      '?', /* U+61DC */
+      '?', /* U+61DD */
+      '?', /* U+61DE */
+      '?', /* U+61DF */
+      '?', /* U+61E0 */
+      '?', /* U+61E1 */
+      '?', /* U+61E2 */
+   0x9cee, /* U+61E3 */
+      '?', /* U+61E4 */
+      '?', /* U+61E5 */
+   0x9ced, /* U+61E6 */
+      '?', /* U+61E7 */
+      '?', /* U+61E8 */
+      '?', /* U+61E9 */
+      '?', /* U+61EA */
+      '?', /* U+61EB */
+      '?', /* U+61EC */
+      '?', /* U+61ED */
+      '?', /* U+61EE */
+      '?', /* U+61EF */
+      '?', /* U+61F0 */
+      '?', /* U+61F1 */
+   0x92a6, /* U+61F2 */
+      '?', /* U+61F3 */
+   0x9cf1, /* U+61F4 */
+      '?', /* U+61F5 */
+   0x9cef, /* U+61F6 */
+   0x9ce5, /* U+61F7 */
+   0x8c9c, /* U+61F8 */
+      '?', /* U+61F9 */
+   0x9cf0, /* U+61FA */
+      '?', /* U+61FB */
+   0x9cf4, /* U+61FC */
+   0x9cf3, /* U+61FD */
+   0x9cf5, /* U+61FE */
+   0x9cf2, /* U+61FF */
+   0x9cf6, /* U+6200 */
+      '?', /* U+6201 */
+      '?', /* U+6202 */
+      '?', /* U+6203 */
+      '?', /* U+6204 */
+      '?', /* U+6205 */
+      '?', /* U+6206 */
+      '?', /* U+6207 */
+   0x9cf7, /* U+6208 */
+   0x9cf8, /* U+6209 */
+   0x95e8, /* U+620A */
+      '?', /* U+620B */
+   0x9cfa, /* U+620C */
+   0x9cf9, /* U+620D */
+   0x8f5e, /* U+620E */
+      '?', /* U+620F */
+   0x90ac, /* U+6210 */
+   0x89e4, /* U+6211 */
+   0x89fa, /* U+6212 */
+   0xfac7, /* U+6213 */
+   0x9cfb, /* U+6214 */
+      '?', /* U+6215 */
+   0x88bd, /* U+6216 */
+      '?', /* U+6217 */
+      '?', /* U+6218 */
+      '?', /* U+6219 */
+   0x90ca, /* U+621A */
+   0x9cfc, /* U+621B */
+      '?', /* U+621C */
+   0xe6c1, /* U+621D */
+   0x9d40, /* U+621E */
+   0x8c81, /* U+621F */
+      '?', /* U+6220 */
+   0x9d41, /* U+6221 */
+      '?', /* U+6222 */
+      '?', /* U+6223 */
+      '?', /* U+6224 */
+      '?', /* U+6225 */
+   0x90ed, /* U+6226 */
+      '?', /* U+6227 */
+      '?', /* U+6228 */
+      '?', /* U+6229 */
+   0x9d42, /* U+622A */
+      '?', /* U+622B */
+      '?', /* U+622C */
+      '?', /* U+622D */
+   0x9d43, /* U+622E */
+   0x8b59, /* U+622F */
+   0x9d44, /* U+6230 */
+      '?', /* U+6231 */
+   0x9d45, /* U+6232 */
+   0x9d46, /* U+6233 */
+   0x91d5, /* U+6234 */
+      '?', /* U+6235 */
+      '?', /* U+6236 */
+      '?', /* U+6237 */
+   0x8ccb, /* U+6238 */
+      '?', /* U+6239 */
+      '?', /* U+623A */
+   0x96df, /* U+623B */
+      '?', /* U+623C */
+      '?', /* U+623D */
+      '?', /* U+623E */
+   0x965b, /* U+623F */
+   0x8f8a, /* U+6240 */
+   0x9d47, /* U+6241 */
+      '?', /* U+6242 */
+      '?', /* U+6243 */
+      '?', /* U+6244 */
+      '?', /* U+6245 */
+      '?', /* U+6246 */
+   0x90ee, /* U+6247 */
+   0xe7bb, /* U+6248 */
+   0x94e0, /* U+6249 */
+      '?', /* U+624A */
+   0x8ee8, /* U+624B */
+      '?', /* U+624C */
+   0x8dcb, /* U+624D */
+   0x9d48, /* U+624E */
+      '?', /* U+624F */
+      '?', /* U+6250 */
+      '?', /* U+6251 */
+      '?', /* U+6252 */
+   0x91c5, /* U+6253 */
+      '?', /* U+6254 */
+   0x95a5, /* U+6255 */
+      '?', /* U+6256 */
+      '?', /* U+6257 */
+   0x91ef, /* U+6258 */
+      '?', /* U+6259 */
+      '?', /* U+625A */
+   0x9d4b, /* U+625B */
+      '?', /* U+625C */
+      '?', /* U+625D */
+   0x9d49, /* U+625E */
+      '?', /* U+625F */
+   0x9d4c, /* U+6260 */
+      '?', /* U+6261 */
+      '?', /* U+6262 */
+   0x9d4a, /* U+6263 */
+      '?', /* U+6264 */
+      '?', /* U+6265 */
+      '?', /* U+6266 */
+      '?', /* U+6267 */
+   0x9d4d, /* U+6268 */
+      '?', /* U+6269 */
+      '?', /* U+626A */
+      '?', /* U+626B */
+      '?', /* U+626C */
+      '?', /* U+626D */
+   0x95af, /* U+626E */
+      '?', /* U+626F */
+      '?', /* U+6270 */
+   0x88b5, /* U+6271 */
+      '?', /* U+6272 */
+      '?', /* U+6273 */
+      '?', /* U+6274 */
+      '?', /* U+6275 */
+   0x957d, /* U+6276 */
+      '?', /* U+6277 */
+      '?', /* U+6278 */
+   0x94e1, /* U+6279 */
+      '?', /* U+627A */
+      '?', /* U+627B */
+   0x9d4e, /* U+627C */
+      '?', /* U+627D */
+   0x9d51, /* U+627E */
+   0x8fb3, /* U+627F */
+   0x8b5a, /* U+6280 */
+      '?', /* U+6281 */
+   0x9d4f, /* U+6282 */
+   0x9d56, /* U+6283 */
+   0x8fb4, /* U+6284 */
+      '?', /* U+6285 */
+      '?', /* U+6286 */
+      '?', /* U+6287 */
+      '?', /* U+6288 */
+   0x9d50, /* U+6289 */
+   0x9463, /* U+628A */
+      '?', /* U+628B */
+      '?', /* U+628C */
+      '?', /* U+628D */
+      '?', /* U+628E */
+      '?', /* U+628F */
+      '?', /* U+6290 */
+   0x977d, /* U+6291 */
+   0x9d52, /* U+6292 */
+   0x9d53, /* U+6293 */
+   0x9d57, /* U+6294 */
+   0x938a, /* U+6295 */
+   0x9d54, /* U+6296 */
+   0x8d52, /* U+6297 */
+   0x90dc, /* U+6298 */
+      '?', /* U+6299 */
+      '?', /* U+629A */
+   0x9d65, /* U+629B */
+   0x94b2, /* U+629C */
+      '?', /* U+629D */
+   0x91f0, /* U+629E */
+      '?', /* U+629F */
+      '?', /* U+62A0 */
+      '?', /* U+62A1 */
+      '?', /* U+62A2 */
+      '?', /* U+62A3 */
+      '?', /* U+62A4 */
+      '?', /* U+62A5 */
+   0xfac8, /* U+62A6 */
+      '?', /* U+62A7 */
+      '?', /* U+62A8 */
+      '?', /* U+62A9 */
+      '?', /* U+62AA */
+   0x94e2, /* U+62AB */
+   0x9dab, /* U+62AC */
+      '?', /* U+62AD */
+      '?', /* U+62AE */
+      '?', /* U+62AF */
+      '?', /* U+62B0 */
+   0x95f8, /* U+62B1 */
+      '?', /* U+62B2 */
+      '?', /* U+62B3 */
+      '?', /* U+62B4 */
+   0x92ef, /* U+62B5 */
+      '?', /* U+62B6 */
+      '?', /* U+62B7 */
+      '?', /* U+62B8 */
+   0x9695, /* U+62B9 */
+      '?', /* U+62BA */
+   0x9d5a, /* U+62BB */
+   0x899f, /* U+62BC */
+   0x928a, /* U+62BD */
+      '?', /* U+62BE */
+      '?', /* U+62BF */
+      '?', /* U+62C0 */
+      '?', /* U+62C1 */
+   0x9d63, /* U+62C2 */
+      '?', /* U+62C3 */
+      '?', /* U+62C4 */
+   0x9253, /* U+62C5 */
+   0x9d5d, /* U+62C6 */
+   0x9d64, /* U+62C7 */
+   0x9d5f, /* U+62C8 */
+   0x9d66, /* U+62C9 */
+   0x9d62, /* U+62CA */
+      '?', /* U+62CB */
+   0x9d61, /* U+62CC */
+   0x948f, /* U+62CD */
+      '?', /* U+62CE */
+   0x9d5b, /* U+62CF */
+   0x89fb, /* U+62D0 */
+   0x9d59, /* U+62D1 */
+   0x8b91, /* U+62D2 */
+   0x91f1, /* U+62D3 */
+   0x9d55, /* U+62D4 */
+      '?', /* U+62D5 */
+      '?', /* U+62D6 */
+   0x9d58, /* U+62D7 */
+   0x8d53, /* U+62D8 */
+   0x90d9, /* U+62D9 */
+      '?', /* U+62DA */
+   0x8fb5, /* U+62DB */
+   0x9d60, /* U+62DC */
+   0x9471, /* U+62DD */
+      '?', /* U+62DE */
+      '?', /* U+62DF */
+   0x8b92, /* U+62E0 */
+   0x8a67, /* U+62E1 */
+      '?', /* U+62E2 */
+      '?', /* U+62E3 */
+      '?', /* U+62E4 */
+      '?', /* U+62E5 */
+      '?', /* U+62E6 */
+      '?', /* U+62E7 */
+      '?', /* U+62E8 */
+      '?', /* U+62E9 */
+      '?', /* U+62EA */
+      '?', /* U+62EB */
+   0x8a87, /* U+62EC */
+   0x9040, /* U+62ED */
+   0x9d68, /* U+62EE */
+   0x9d6d, /* U+62EF */
+      '?', /* U+62F0 */
+   0x9d69, /* U+62F1 */
+      '?', /* U+62F2 */
+   0x8c9d, /* U+62F3 */
+      '?', /* U+62F4 */
+   0x9d6e, /* U+62F5 */
+   0x8e41, /* U+62F6 */
+   0x8d89, /* U+62F7 */
+      '?', /* U+62F8 */
+      '?', /* U+62F9 */
+      '?', /* U+62FA */
+      '?', /* U+62FB */
+      '?', /* U+62FC */
+      '?', /* U+62FD */
+   0x8f45, /* U+62FE */
+   0x9d5c, /* U+62FF */
+      '?', /* U+6300 */
+   0x8e9d, /* U+6301 */
+   0x9d6b, /* U+6302 */
+      '?', /* U+6303 */
+      '?', /* U+6304 */
+      '?', /* U+6305 */
+      '?', /* U+6306 */
+   0x8e77, /* U+6307 */
+   0x9d6c, /* U+6308 */
+   0x88c2, /* U+6309 */
+      '?', /* U+630A */
+      '?', /* U+630B */
+   0x9d67, /* U+630C */
+      '?', /* U+630D */
+      '?', /* U+630E */
+      '?', /* U+630F */
+      '?', /* U+6310 */
+   0x92a7, /* U+6311 */
+      '?', /* U+6312 */
+      '?', /* U+6313 */
+      '?', /* U+6314 */
+      '?', /* U+6315 */
+      '?', /* U+6316 */
+      '?', /* U+6317 */
+      '?', /* U+6318 */
+   0x8b93, /* U+6319 */
+      '?', /* U+631A */
+      '?', /* U+631B */
+      '?', /* U+631C */
+      '?', /* U+631D */
+      '?', /* U+631E */
+   0x8bb2, /* U+631F */
+      '?', /* U+6320 */
+      '?', /* U+6321 */
+      '?', /* U+6322 */
+      '?', /* U+6323 */
+      '?', /* U+6324 */
+      '?', /* U+6325 */
+      '?', /* U+6326 */
+   0x9d6a, /* U+6327 */
+   0x88a5, /* U+6328 */
+      '?', /* U+6329 */
+      '?', /* U+632A */
+   0x8dc1, /* U+632B */
+      '?', /* U+632C */
+      '?', /* U+632D */
+      '?', /* U+632E */
+   0x9055, /* U+632F */
+      '?', /* U+6330 */
+      '?', /* U+6331 */
+      '?', /* U+6332 */
+      '?', /* U+6333 */
+      '?', /* U+6334 */
+      '?', /* U+6335 */
+      '?', /* U+6336 */
+      '?', /* U+6337 */
+      '?', /* U+6338 */
+      '?', /* U+6339 */
+   0x92f0, /* U+633A */
+      '?', /* U+633B */
+      '?', /* U+633C */
+   0x94d2, /* U+633D */
+   0x9d70, /* U+633E */
+   0x917d, /* U+633F */
+      '?', /* U+6340 */
+      '?', /* U+6341 */
+      '?', /* U+6342 */
+      '?', /* U+6343 */
+      '?', /* U+6344 */
+      '?', /* U+6345 */
+      '?', /* U+6346 */
+      '?', /* U+6347 */
+      '?', /* U+6348 */
+   0x91a8, /* U+6349 */
+      '?', /* U+634A */
+      '?', /* U+634B */
+   0x8e4a, /* U+634C */
+   0x9d71, /* U+634D */
+      '?', /* U+634E */
+   0x9d73, /* U+634F */
+   0x9d6f, /* U+6350 */
+      '?', /* U+6351 */
+      '?', /* U+6352 */
+      '?', /* U+6353 */
+      '?', /* U+6354 */
+   0x95df, /* U+6355 */
+      '?', /* U+6356 */
+   0x92bb, /* U+6357 */
+      '?', /* U+6358 */
+      '?', /* U+6359 */
+      '?', /* U+635A */
+      '?', /* U+635B */
+   0x917b, /* U+635C */
+      '?', /* U+635D */
+      '?', /* U+635E */
+      '?', /* U+635F */
+      '?', /* U+6360 */
+      '?', /* U+6361 */
+      '?', /* U+6362 */
+      '?', /* U+6363 */
+      '?', /* U+6364 */
+      '?', /* U+6365 */
+      '?', /* U+6366 */
+   0x95f9, /* U+6367 */
+   0x8ecc, /* U+6368 */
+   0x9d80, /* U+6369 */
+      '?', /* U+636A */
+   0x9d7e, /* U+636B */
+      '?', /* U+636C */
+      '?', /* U+636D */
+   0x9098, /* U+636E */
+      '?', /* U+636F */
+      '?', /* U+6370 */
+      '?', /* U+6371 */
+   0x8c9e, /* U+6372 */
+      '?', /* U+6373 */
+      '?', /* U+6374 */
+      '?', /* U+6375 */
+   0x9d78, /* U+6376 */
+   0x8fb7, /* U+6377 */
+      '?', /* U+6378 */
+      '?', /* U+6379 */
+   0x93e6, /* U+637A */
+   0x9450, /* U+637B */
+      '?', /* U+637C */
+      '?', /* U+637D */
+      '?', /* U+637E */
+      '?', /* U+637F */
+   0x9d76, /* U+6380 */
+      '?', /* U+6381 */
+      '?', /* U+6382 */
+   0x917c, /* U+6383 */
+      '?', /* U+6384 */
+      '?', /* U+6385 */
+      '?', /* U+6386 */
+      '?', /* U+6387 */
+   0x8ef6, /* U+6388 */
+   0x9d7b, /* U+6389 */
+      '?', /* U+638A */
+      '?', /* U+638B */
+   0x8fb6, /* U+638C */
+      '?', /* U+638D */
+   0x9d75, /* U+638E */
+   0x9d7a, /* U+638F */
+      '?', /* U+6390 */
+      '?', /* U+6391 */
+   0x9472, /* U+6392 */
+      '?', /* U+6393 */
+      '?', /* U+6394 */
+      '?', /* U+6395 */
+   0x9d74, /* U+6396 */
+      '?', /* U+6397 */
+   0x8c40, /* U+6398 */
+      '?', /* U+6399 */
+      '?', /* U+639A */
+   0x8a7c, /* U+639B */
+      '?', /* U+639C */
+      '?', /* U+639D */
+      '?', /* U+639E */
+   0x9d7c, /* U+639F */
+   0x97a9, /* U+63A0 */
+   0x8dcc, /* U+63A1 */
+   0x9254, /* U+63A2 */
+   0x9d79, /* U+63A3 */
+      '?', /* U+63A4 */
+   0x90da, /* U+63A5 */
+      '?', /* U+63A6 */
+   0x8d54, /* U+63A7 */
+   0x9084, /* U+63A8 */
+   0x8986, /* U+63A9 */
+   0x915b, /* U+63AA */
+   0x9d77, /* U+63AB */
+   0x8b64, /* U+63AC */
+      '?', /* U+63AD */
+      '?', /* U+63AE */
+      '?', /* U+63AF */
+      '?', /* U+63B0 */
+      '?', /* U+63B1 */
+   0x8c66, /* U+63B2 */
+      '?', /* U+63B3 */
+   0x92cd, /* U+63B4 */
+   0x9d7d, /* U+63B5 */
+      '?', /* U+63B6 */
+      '?', /* U+63B7 */
+      '?', /* U+63B8 */
+      '?', /* U+63B9 */
+      '?', /* U+63BA */
+   0x917e, /* U+63BB */
+      '?', /* U+63BC */
+      '?', /* U+63BD */
+   0x9d81, /* U+63BE */
+      '?', /* U+63BF */
+   0x9d83, /* U+63C0 */
+      '?', /* U+63C1 */
+      '?', /* U+63C2 */
+   0x91b5, /* U+63C3 */
+   0x9d89, /* U+63C4 */
+      '?', /* U+63C5 */
+   0x9d84, /* U+63C6 */
+      '?', /* U+63C7 */
+      '?', /* U+63C8 */
+   0x9d86, /* U+63C9 */
+      '?', /* U+63CA */
+      '?', /* U+63CB */
+      '?', /* U+63CC */
+      '?', /* U+63CD */
+      '?', /* U+63CE */
+   0x9560, /* U+63CF */
+   0x92f1, /* U+63D0 */
+      '?', /* U+63D1 */
+   0x9d87, /* U+63D2 */
+      '?', /* U+63D3 */
+      '?', /* U+63D4 */
+      '?', /* U+63D5 */
+   0x974b, /* U+63D6 */
+      '?', /* U+63D7 */
+      '?', /* U+63D8 */
+      '?', /* U+63D9 */
+   0x9767, /* U+63DA */
+   0x8ab7, /* U+63DB */
+      '?', /* U+63DC */
+      '?', /* U+63DD */
+      '?', /* U+63DE */
+      '?', /* U+63DF */
+      '?', /* U+63E0 */
+   0x88ac, /* U+63E1 */
+      '?', /* U+63E2 */
+   0x9d85, /* U+63E3 */
+      '?', /* U+63E4 */
+      '?', /* U+63E5 */
+      '?', /* U+63E6 */
+      '?', /* U+63E7 */
+      '?', /* U+63E8 */
+   0x9d82, /* U+63E9 */
+      '?', /* U+63EA */
+      '?', /* U+63EB */
+      '?', /* U+63EC */
+      '?', /* U+63ED */
+   0x8af6, /* U+63EE */
+      '?', /* U+63EF */
+      '?', /* U+63F0 */
+      '?', /* U+63F1 */
+      '?', /* U+63F2 */
+      '?', /* U+63F3 */
+   0x8987, /* U+63F4 */
+   0xfac9, /* U+63F5 */
+   0x9d88, /* U+63F6 */
+      '?', /* U+63F7 */
+      '?', /* U+63F8 */
+      '?', /* U+63F9 */
+   0x9768, /* U+63FA */
+      '?', /* U+63FB */
+      '?', /* U+63FC */
+      '?', /* U+63FD */
+      '?', /* U+63FE */
+      '?', /* U+63FF */
+      '?', /* U+6400 */
+      '?', /* U+6401 */
+      '?', /* U+6402 */
+      '?', /* U+6403 */
+      '?', /* U+6404 */
+      '?', /* U+6405 */
+   0x9d8c, /* U+6406 */
+      '?', /* U+6407 */
+      '?', /* U+6408 */
+      '?', /* U+6409 */
+      '?', /* U+640A */
+      '?', /* U+640B */
+      '?', /* U+640C */
+   0x91b9, /* U+640D */
+      '?', /* U+640E */
+   0x9d93, /* U+640F */
+      '?', /* U+6410 */
+      '?', /* U+6411 */
+      '?', /* U+6412 */
+   0x9d8d, /* U+6413 */
+      '?', /* U+6414 */
+      '?', /* U+6415 */
+   0x9d8a, /* U+6416 */
+   0x9d91, /* U+6417 */
+      '?', /* U+6418 */
+      '?', /* U+6419 */
+      '?', /* U+641A */
+      '?', /* U+641B */
+   0x9d72, /* U+641C */
+      '?', /* U+641D */
+      '?', /* U+641E */
+      '?', /* U+641F */
+      '?', /* U+6420 */
+      '?', /* U+6421 */
+      '?', /* U+6422 */
+      '?', /* U+6423 */
+      '?', /* U+6424 */
+      '?', /* U+6425 */
+   0x9d8e, /* U+6426 */
+      '?', /* U+6427 */
+   0x9d92, /* U+6428 */
+      '?', /* U+6429 */
+      '?', /* U+642A */
+      '?', /* U+642B */
+   0x94c0, /* U+642C */
+   0x938b, /* U+642D */
+      '?', /* U+642E */
+      '?', /* U+642F */
+      '?', /* U+6430 */
+      '?', /* U+6431 */
+      '?', /* U+6432 */
+      '?', /* U+6433 */
+   0x9d8b, /* U+6434 */
+      '?', /* U+6435 */
+   0x9d8f, /* U+6436 */
+      '?', /* U+6437 */
+      '?', /* U+6438 */
+      '?', /* U+6439 */
+   0x8c67, /* U+643A */
+      '?', /* U+643B */
+      '?', /* U+643C */
+      '?', /* U+643D */
+   0x8def, /* U+643E */
+      '?', /* U+643F */
+      '?', /* U+6440 */
+      '?', /* U+6441 */
+   0x90db, /* U+6442 */
+      '?', /* U+6443 */
+      '?', /* U+6444 */
+      '?', /* U+6445 */
+      '?', /* U+6446 */
+      '?', /* U+6447 */
+      '?', /* U+6448 */
+      '?', /* U+6449 */
+      '?', /* U+644A */
+      '?', /* U+644B */
+      '?', /* U+644C */
+      '?', /* U+644D */
+   0x9d97, /* U+644E */
+      '?', /* U+644F */
+      '?', /* U+6450 */
+      '?', /* U+6451 */
+      '?', /* U+6452 */
+      '?', /* U+6453 */
+      '?', /* U+6454 */
+      '?', /* U+6455 */
+      '?', /* U+6456 */
+      '?', /* U+6457 */
+   0x9345, /* U+6458 */
+      '?', /* U+6459 */
+      '?', /* U+645A */
+      '?', /* U+645B */
+      '?', /* U+645C */
+      '?', /* U+645D */
+      '?', /* U+645E */
+      '?', /* U+645F */
+   0xfaca, /* U+6460 */
+      '?', /* U+6461 */
+      '?', /* U+6462 */
+      '?', /* U+6463 */
+      '?', /* U+6464 */
+      '?', /* U+6465 */
+      '?', /* U+6466 */
+   0x9d94, /* U+6467 */
+      '?', /* U+6468 */
+   0x9680, /* U+6469 */
+      '?', /* U+646A */
+      '?', /* U+646B */
+      '?', /* U+646C */
+      '?', /* U+646D */
+      '?', /* U+646E */
+   0x9d95, /* U+646F */
+      '?', /* U+6470 */
+      '?', /* U+6471 */
+      '?', /* U+6472 */
+      '?', /* U+6473 */
+      '?', /* U+6474 */
+      '?', /* U+6475 */
+   0x9d96, /* U+6476 */
+      '?', /* U+6477 */
+   0x96cc, /* U+6478 */
+      '?', /* U+6479 */
+   0x90a0, /* U+647A */
+      '?', /* U+647B */
+      '?', /* U+647C */
+      '?', /* U+647D */
+      '?', /* U+647E */
+      '?', /* U+647F */
+      '?', /* U+6480 */
+      '?', /* U+6481 */
+      '?', /* U+6482 */
+   0x8c82, /* U+6483 */
+      '?', /* U+6484 */
+      '?', /* U+6485 */
+      '?', /* U+6486 */
+      '?', /* U+6487 */
+   0x9d9d, /* U+6488 */
+      '?', /* U+6489 */
+      '?', /* U+648A */
+      '?', /* U+648B */
+      '?', /* U+648C */
+      '?', /* U+648D */
+      '?', /* U+648E */
+      '?', /* U+648F */
+      '?', /* U+6490 */
+      '?', /* U+6491 */
+   0x8e54, /* U+6492 */
+   0x9d9a, /* U+6493 */
+      '?', /* U+6494 */
+   0x9d99, /* U+6495 */
+      '?', /* U+6496 */
+      '?', /* U+6497 */
+      '?', /* U+6498 */
+      '?', /* U+6499 */
+   0x9451, /* U+649A */
+      '?', /* U+649B */
+      '?', /* U+649C */
+   0xfacb, /* U+649D */
+   0x93b3, /* U+649E */
+      '?', /* U+649F */
+      '?', /* U+64A0 */
+      '?', /* U+64A1 */
+      '?', /* U+64A2 */
+      '?', /* U+64A3 */
+   0x9350, /* U+64A4 */
+   0x9d9b, /* U+64A5 */
+      '?', /* U+64A6 */
+      '?', /* U+64A7 */
+      '?', /* U+64A8 */
+   0x9d9c, /* U+64A9 */
+      '?', /* U+64AA */
+   0x958f, /* U+64AB */
+      '?', /* U+64AC */
+   0x9464, /* U+64AD */
+   0x8e42, /* U+64AE */
+      '?', /* U+64AF */
+   0x90ef, /* U+64B0 */
+      '?', /* U+64B1 */
+   0x966f, /* U+64B2 */
+      '?', /* U+64B3 */
+      '?', /* U+64B4 */
+      '?', /* U+64B5 */
+      '?', /* U+64B6 */
+      '?', /* U+64B7 */
+      '?', /* U+64B8 */
+   0x8a68, /* U+64B9 */
+      '?', /* U+64BA */
+   0x9da3, /* U+64BB */
+   0x9d9e, /* U+64BC */
+      '?', /* U+64BD */
+      '?', /* U+64BE */
+      '?', /* U+64BF */
+      '?', /* U+64C0 */
+   0x9769, /* U+64C1 */
+   0x9da5, /* U+64C2 */
+      '?', /* U+64C3 */
+      '?', /* U+64C4 */
+   0x9da1, /* U+64C5 */
+      '?', /* U+64C6 */
+   0x9da2, /* U+64C7 */
+      '?', /* U+64C8 */
+      '?', /* U+64C9 */
+      '?', /* U+64CA */
+      '?', /* U+64CB */
+      '?', /* U+64CC */
+   0x9180, /* U+64CD */
+   0xfacc, /* U+64CE */
+      '?', /* U+64CF */
+      '?', /* U+64D0 */
+      '?', /* U+64D1 */
+   0x9da0, /* U+64D2 */
+      '?', /* U+64D3 */
+   0x9d5e, /* U+64D4 */
+      '?', /* U+64D5 */
+      '?', /* U+64D6 */
+      '?', /* U+64D7 */
+   0x9da4, /* U+64D8 */
+      '?', /* U+64D9 */
+   0x9d9f, /* U+64DA */
+      '?', /* U+64DB */
+      '?', /* U+64DC */
+      '?', /* U+64DD */
+      '?', /* U+64DE */
+      '?', /* U+64DF */
+   0x9da9, /* U+64E0 */
+   0x9daa, /* U+64E1 */
+   0x9346, /* U+64E2 */
+   0x9dac, /* U+64E3 */
+      '?', /* U+64E4 */
+      '?', /* U+64E5 */
+   0x8e43, /* U+64E6 */
+   0x9da7, /* U+64E7 */
+      '?', /* U+64E8 */
+      '?', /* U+64E9 */
+      '?', /* U+64EA */
+      '?', /* U+64EB */
+   0x8b5b, /* U+64EC */
+      '?', /* U+64ED */
+      '?', /* U+64EE */
+   0x9dad, /* U+64EF */
+      '?', /* U+64F0 */
+   0x9da6, /* U+64F1 */
+   0x9db1, /* U+64F2 */
+      '?', /* U+64F3 */
+   0x9db0, /* U+64F4 */
+      '?', /* U+64F5 */
+   0x9daf, /* U+64F6 */
+      '?', /* U+64F7 */
+      '?', /* U+64F8 */
+      '?', /* U+64F9 */
+   0x9db2, /* U+64FA */
+      '?', /* U+64FB */
+      '?', /* U+64FC */
+   0x9db4, /* U+64FD */
+   0x8fef, /* U+64FE */
+      '?', /* U+64FF */
+   0x9db3, /* U+6500 */
+      '?', /* U+6501 */
+      '?', /* U+6502 */
+      '?', /* U+6503 */
+      '?', /* U+6504 */
+   0x9db7, /* U+6505 */
+      '?', /* U+6506 */
+      '?', /* U+6507 */
+      '?', /* U+6508 */
+      '?', /* U+6509 */
+      '?', /* U+650A */
+      '?', /* U+650B */
+      '?', /* U+650C */
+      '?', /* U+650D */
+      '?', /* U+650E */
+      '?', /* U+650F */
+      '?', /* U+6510 */
+      '?', /* U+6511 */
+      '?', /* U+6512 */
+      '?', /* U+6513 */
+      '?', /* U+6514 */
+      '?', /* U+6515 */
+      '?', /* U+6516 */
+      '?', /* U+6517 */
+   0x9db5, /* U+6518 */
+      '?', /* U+6519 */
+      '?', /* U+651A */
+      '?', /* U+651B */
+   0x9db6, /* U+651C */
+   0x9d90, /* U+651D */
+      '?', /* U+651E */
+      '?', /* U+651F */
+      '?', /* U+6520 */
+      '?', /* U+6521 */
+      '?', /* U+6522 */
+   0x9db9, /* U+6523 */
+   0x9db8, /* U+6524 */
+      '?', /* U+6525 */
+      '?', /* U+6526 */
+      '?', /* U+6527 */
+      '?', /* U+6528 */
+      '?', /* U+6529 */
+   0x9d98, /* U+652A */
+   0x9dba, /* U+652B */
+   0x9dae, /* U+652C */
+      '?', /* U+652D */
+      '?', /* U+652E */
+   0x8e78, /* U+652F */
+      '?', /* U+6530 */
+      '?', /* U+6531 */
+      '?', /* U+6532 */
+      '?', /* U+6533 */
+   0x9dbb, /* U+6534 */
+   0x9dbc, /* U+6535 */
+   0x9dbe, /* U+6536 */
+   0x9dbd, /* U+6537 */
+   0x9dbf, /* U+6538 */
+   0x89fc, /* U+6539 */
+      '?', /* U+653A */
+   0x8d55, /* U+653B */
+      '?', /* U+653C */
+      '?', /* U+653D */
+   0x95fa, /* U+653E */
+   0x90ad, /* U+653F */
+      '?', /* U+6540 */
+      '?', /* U+6541 */
+      '?', /* U+6542 */
+      '?', /* U+6543 */
+      '?', /* U+6544 */
+   0x8ccc, /* U+6545 */
+      '?', /* U+6546 */
+      '?', /* U+6547 */
+   0x9dc1, /* U+6548 */
+      '?', /* U+6549 */
+      '?', /* U+654A */
+      '?', /* U+654B */
+      '?', /* U+654C */
+   0x9dc4, /* U+654D */
+   0xfacd, /* U+654E */
+   0x9571, /* U+654F */
+      '?', /* U+6550 */
+   0x8b7e, /* U+6551 */
+      '?', /* U+6552 */
+      '?', /* U+6553 */
+      '?', /* U+6554 */
+   0x9dc3, /* U+6555 */
+   0x9dc2, /* U+6556 */
+   0x9473, /* U+6557 */
+   0x9dc5, /* U+6558 */
+   0x8bb3, /* U+6559 */
+      '?', /* U+655A */
+      '?', /* U+655B */
+      '?', /* U+655C */
+   0x9dc7, /* U+655D */
+   0x9dc6, /* U+655E */
+      '?', /* U+655F */
+      '?', /* U+6560 */
+      '?', /* U+6561 */
+   0x8ab8, /* U+6562 */
+   0x8e55, /* U+6563 */
+      '?', /* U+6564 */
+      '?', /* U+6565 */
+   0x93d6, /* U+6566 */
+      '?', /* U+6567 */
+      '?', /* U+6568 */
+      '?', /* U+6569 */
+      '?', /* U+656A */
+      '?', /* U+656B */
+   0x8c68, /* U+656C */
+      '?', /* U+656D */
+      '?', /* U+656E */
+      '?', /* U+656F */
+   0x9094, /* U+6570 */
+      '?', /* U+6571 */
+   0x9dc8, /* U+6572 */
+      '?', /* U+6573 */
+   0x90ae, /* U+6574 */
+   0x9347, /* U+6575 */
+      '?', /* U+6576 */
+   0x957e, /* U+6577 */
+   0x9dc9, /* U+6578 */
+      '?', /* U+6579 */
+      '?', /* U+657A */
+      '?', /* U+657B */
+      '?', /* U+657C */
+      '?', /* U+657D */
+      '?', /* U+657E */
+      '?', /* U+657F */
+      '?', /* U+6580 */
+      '?', /* U+6581 */
+   0x9dca, /* U+6582 */
+   0x9dcb, /* U+6583 */
+      '?', /* U+6584 */
+      '?', /* U+6585 */
+      '?', /* U+6586 */
+   0x95b6, /* U+6587 */
+   0x9b7c, /* U+6588 */
+   0x90c4, /* U+6589 */
+      '?', /* U+658A */
+      '?', /* U+658B */
+   0x956b, /* U+658C */
+      '?', /* U+658D */
+   0x8dd6, /* U+658E */
+      '?', /* U+658F */
+   0x94e3, /* U+6590 */
+   0x94c1, /* U+6591 */
+      '?', /* U+6592 */
+      '?', /* U+6593 */
+      '?', /* U+6594 */
+      '?', /* U+6595 */
+      '?', /* U+6596 */
+   0x936c, /* U+6597 */
+      '?', /* U+6598 */
+   0x97bf, /* U+6599 */
+      '?', /* U+659A */
+   0x9dcd, /* U+659B */
+   0x8ece, /* U+659C */
+      '?', /* U+659D */
+      '?', /* U+659E */
+   0x9dce, /* U+659F */
+      '?', /* U+65A0 */
+   0x88b4, /* U+65A1 */
+      '?', /* U+65A2 */
+      '?', /* U+65A3 */
+   0x8bd2, /* U+65A4 */
+   0x90cb, /* U+65A5 */
+      '?', /* U+65A6 */
+   0x9580, /* U+65A7 */
+      '?', /* U+65A8 */
+      '?', /* U+65A9 */
+      '?', /* U+65AA */
+   0x9dcf, /* U+65AB */
+   0x8e61, /* U+65AC */
+   0x9266, /* U+65AD */
+      '?', /* U+65AE */
+   0x8e7a, /* U+65AF */
+   0x9056, /* U+65B0 */
+      '?', /* U+65B1 */
+      '?', /* U+65B2 */
+      '?', /* U+65B3 */
+      '?', /* U+65B4 */
+      '?', /* U+65B5 */
+      '?', /* U+65B6 */
+   0x9dd0, /* U+65B7 */
+      '?', /* U+65B8 */
+   0x95fb, /* U+65B9 */
+      '?', /* U+65BA */
+      '?', /* U+65BB */
+   0x8997, /* U+65BC */
+   0x8e7b, /* U+65BD */
+      '?', /* U+65BE */
+      '?', /* U+65BF */
+      '?', /* U+65C0 */
+   0x9dd3, /* U+65C1 */
+      '?', /* U+65C2 */
+   0x9dd1, /* U+65C3 */
+   0x9dd4, /* U+65C4 */
+   0x97b7, /* U+65C5 */
+   0x9dd2, /* U+65C6 */
+      '?', /* U+65C7 */
+      '?', /* U+65C8 */
+      '?', /* U+65C9 */
+      '?', /* U+65CA */
+   0x90f9, /* U+65CB */
+   0x9dd5, /* U+65CC */
+      '?', /* U+65CD */
+      '?', /* U+65CE */
+   0x91b0, /* U+65CF */
+      '?', /* U+65D0 */
+      '?', /* U+65D1 */
+   0x9dd6, /* U+65D2 */
+      '?', /* U+65D3 */
+      '?', /* U+65D4 */
+      '?', /* U+65D5 */
+      '?', /* U+65D6 */
+   0x8af8, /* U+65D7 */
+      '?', /* U+65D8 */
+   0x9dd8, /* U+65D9 */
+      '?', /* U+65DA */
+   0x9dd7, /* U+65DB */
+      '?', /* U+65DC */
+      '?', /* U+65DD */
+      '?', /* U+65DE */
+      '?', /* U+65DF */
+   0x9dd9, /* U+65E0 */
+   0x9dda, /* U+65E1 */
+   0x8af9, /* U+65E2 */
+      '?', /* U+65E3 */
+      '?', /* U+65E4 */
+   0x93fa, /* U+65E5 */
+   0x9255, /* U+65E6 */
+   0x8b8c, /* U+65E7 */
+   0x8e7c, /* U+65E8 */
+   0x9181, /* U+65E9 */
+      '?', /* U+65EA */
+      '?', /* U+65EB */
+   0x8f7b, /* U+65EC */
+   0x88ae, /* U+65ED */
+      '?', /* U+65EE */
+      '?', /* U+65EF */
+      '?', /* U+65F0 */
+   0x9ddb, /* U+65F1 */
+      '?', /* U+65F2 */
+      '?', /* U+65F3 */
+      '?', /* U+65F4 */
+      '?', /* U+65F5 */
+      '?', /* U+65F6 */
+      '?', /* U+65F7 */
+      '?', /* U+65F8 */
+      '?', /* U+65F9 */
+   0x89a0, /* U+65FA */
+   0x9ddf, /* U+65FB */
+      '?', /* U+65FC */
+      '?', /* U+65FD */
+      '?', /* U+65FE */
+      '?', /* U+65FF */
+   0xface, /* U+6600 */
+      '?', /* U+6601 */
+   0x8d56, /* U+6602 */
+   0x9dde, /* U+6603 */
+      '?', /* U+6604 */
+      '?', /* U+6605 */
+   0x8da9, /* U+6606 */
+   0x8fb8, /* U+6607 */
+      '?', /* U+6608 */
+   0xfad1, /* U+6609 */
+   0x9ddd, /* U+660A */
+      '?', /* U+660B */
+   0x8fb9, /* U+660C */
+      '?', /* U+660D */
+   0x96be, /* U+660E */
+   0x8da8, /* U+660F */
+      '?', /* U+6610 */
+      '?', /* U+6611 */
+      '?', /* U+6612 */
+   0x88d5, /* U+6613 */
+   0x90cc, /* U+6614 */
+   0xfacf, /* U+6615 */
+      '?', /* U+6616 */
+      '?', /* U+6617 */
+      '?', /* U+6618 */
+      '?', /* U+6619 */
+      '?', /* U+661A */
+      '?', /* U+661B */
+   0x9de4, /* U+661C */
+      '?', /* U+661D */
+   0xfad3, /* U+661E */
+   0x90af, /* U+661F */
+   0x8966, /* U+6620 */
+      '?', /* U+6621 */
+      '?', /* U+6622 */
+      '?', /* U+6623 */
+   0xfad4, /* U+6624 */
+   0x8f74, /* U+6625 */
+      '?', /* U+6626 */
+   0x9686, /* U+6627 */
+   0x8df0, /* U+6628 */
+      '?', /* U+6629 */
+      '?', /* U+662A */
+      '?', /* U+662B */
+      '?', /* U+662C */
+   0x8fba, /* U+662D */
+   0xfad2, /* U+662E */
+   0x90a5, /* U+662F */
+      '?', /* U+6630 */
+   0xfa63, /* U+6631 */
+      '?', /* U+6632 */
+      '?', /* U+6633 */
+   0x9de3, /* U+6634 */
+   0x9de1, /* U+6635 */
+   0x9de2, /* U+6636 */
+      '?', /* U+6637 */
+      '?', /* U+6638 */
+      '?', /* U+6639 */
+      '?', /* U+663A */
+   0xfad0, /* U+663B */
+   0x928b, /* U+663C */
+      '?', /* U+663D */
+      '?', /* U+663E */
+   0x9e45, /* U+663F */
+      '?', /* U+6640 */
+   0x9de8, /* U+6641 */
+   0x8e9e, /* U+6642 */
+   0x8d57, /* U+6643 */
+   0x9de6, /* U+6644 */
+      '?', /* U+6645 */
+      '?', /* U+6646 */
+      '?', /* U+6647 */
+      '?', /* U+6648 */
+   0x9de7, /* U+6649 */
+      '?', /* U+664A */
+   0x9057, /* U+664B */
+      '?', /* U+664C */
+      '?', /* U+664D */
+      '?', /* U+664E */
+   0x9de5, /* U+664F */
+      '?', /* U+6650 */
+      '?', /* U+6651 */
+   0x8e4e, /* U+6652 */
+      '?', /* U+6653 */
+      '?', /* U+6654 */
+      '?', /* U+6655 */
+      '?', /* U+6656 */
+   0xfad6, /* U+6657 */
+      '?', /* U+6658 */
+   0xfad7, /* U+6659 */
+      '?', /* U+665A */
+      '?', /* U+665B */
+      '?', /* U+665C */
+   0x9dea, /* U+665D */
+   0x9de9, /* U+665E */
+   0x9dee, /* U+665F */
+      '?', /* U+6660 */
+      '?', /* U+6661 */
+   0x9def, /* U+6662 */
+      '?', /* U+6663 */
+   0x9deb, /* U+6664 */
+   0xfad5, /* U+6665 */
+   0x8a41, /* U+6666 */
+   0x9dec, /* U+6667 */
+   0x9ded, /* U+6668 */
+   0x94d3, /* U+6669 */
+      '?', /* U+666A */
+      '?', /* U+666B */
+      '?', /* U+666C */
+      '?', /* U+666D */
+   0x9581, /* U+666E */
+   0x8c69, /* U+666F */
+   0x9df0, /* U+6670 */
+      '?', /* U+6671 */
+      '?', /* U+6672 */
+   0xfad9, /* U+6673 */
+   0x90b0, /* U+6674 */
+      '?', /* U+6675 */
+   0x8fbb, /* U+6676 */
+      '?', /* U+6677 */
+      '?', /* U+6678 */
+      '?', /* U+6679 */
+   0x9271, /* U+667A */
+      '?', /* U+667B */
+      '?', /* U+667C */
+      '?', /* U+667D */
+      '?', /* U+667E */
+      '?', /* U+667F */
+      '?', /* U+6680 */
+   0x8bc5, /* U+6681 */
+      '?', /* U+6682 */
+   0x9df1, /* U+6683 */
+   0x9df5, /* U+6684 */
+      '?', /* U+6685 */
+      '?', /* U+6686 */
+   0x89c9, /* U+6687 */
+   0x9df2, /* U+6688 */
+   0x9df4, /* U+6689 */
+      '?', /* U+668A */
+      '?', /* U+668B */
+      '?', /* U+668C */
+      '?', /* U+668D */
+   0x9df3, /* U+668E */
+      '?', /* U+668F */
+      '?', /* U+6690 */
+   0x8f8b, /* U+6691 */
+      '?', /* U+6692 */
+      '?', /* U+6693 */
+      '?', /* U+6694 */
+      '?', /* U+6695 */
+   0x9267, /* U+6696 */
+   0x88c3, /* U+6697 */
+   0x9df6, /* U+6698 */
+   0xfada, /* U+6699 */
+      '?', /* U+669A */
+      '?', /* U+669B */
+      '?', /* U+669C */
+   0x9df7, /* U+669D */
+      '?', /* U+669E */
+      '?', /* U+669F */
+   0xfadb, /* U+66A0 */
+      '?', /* U+66A1 */
+   0x92a8, /* U+66A2 */
+      '?', /* U+66A3 */
+      '?', /* U+66A4 */
+      '?', /* U+66A5 */
+   0x97ef, /* U+66A6 */
+      '?', /* U+66A7 */
+      '?', /* U+66A8 */
+      '?', /* U+66A9 */
+      '?', /* U+66AA */
+   0x8e62, /* U+66AB */
+      '?', /* U+66AC */
+      '?', /* U+66AD */
+   0x95e9, /* U+66AE */
+      '?', /* U+66AF */
+      '?', /* U+66B0 */
+      '?', /* U+66B1 */
+   0xfadc, /* U+66B2 */
+      '?', /* U+66B3 */
+   0x965c, /* U+66B4 */
+      '?', /* U+66B5 */
+      '?', /* U+66B6 */
+      '?', /* U+66B7 */
+   0x9e41, /* U+66B8 */
+   0x9df9, /* U+66B9 */
+      '?', /* U+66BA */
+      '?', /* U+66BB */
+   0x9dfc, /* U+66BC */
+      '?', /* U+66BD */
+   0x9dfb, /* U+66BE */
+   0xfadd, /* U+66BF */
+      '?', /* U+66C0 */
+   0x9df8, /* U+66C1 */
+      '?', /* U+66C2 */
+      '?', /* U+66C3 */
+   0x9e40, /* U+66C4 */
+      '?', /* U+66C5 */
+      '?', /* U+66C6 */
+   0x93dc, /* U+66C7 */
+      '?', /* U+66C8 */
+   0x9dfa, /* U+66C9 */
+      '?', /* U+66CA */
+      '?', /* U+66CB */
+      '?', /* U+66CC */
+      '?', /* U+66CD */
+      '?', /* U+66CE */
+      '?', /* U+66CF */
+      '?', /* U+66D0 */
+      '?', /* U+66D1 */
+      '?', /* U+66D2 */
+      '?', /* U+66D3 */
+      '?', /* U+66D4 */
+      '?', /* U+66D5 */
+   0x9e42, /* U+66D6 */
+      '?', /* U+66D7 */
+      '?', /* U+66D8 */
+   0x8f8c, /* U+66D9 */
+   0x9e43, /* U+66DA */
+      '?', /* U+66DB */
+   0x976a, /* U+66DC */
+   0x9498, /* U+66DD */
+      '?', /* U+66DE */
+      '?', /* U+66DF */
+   0x9e44, /* U+66E0 */
+      '?', /* U+66E1 */
+      '?', /* U+66E2 */
+      '?', /* U+66E3 */
+      '?', /* U+66E4 */
+      '?', /* U+66E5 */
+   0x9e46, /* U+66E6 */
+      '?', /* U+66E7 */
+      '?', /* U+66E8 */
+   0x9e47, /* U+66E9 */
+      '?', /* U+66EA */
+      '?', /* U+66EB */
+      '?', /* U+66EC */
+      '?', /* U+66ED */
+      '?', /* U+66EE */
+      '?', /* U+66EF */
+   0x9e48, /* U+66F0 */
+      '?', /* U+66F1 */
+   0x8bc8, /* U+66F2 */
+   0x8967, /* U+66F3 */
+   0x8d58, /* U+66F4 */
+   0x9e49, /* U+66F5 */
+      '?', /* U+66F6 */
+   0x9e4a, /* U+66F7 */
+   0x8f91, /* U+66F8 */
+   0x9182, /* U+66F9 */
+   0xfade, /* U+66FA */
+   0xfa66, /* U+66FB */
+   0x99d6, /* U+66FC */
+   0x915d, /* U+66FD */
+   0x915c, /* U+66FE */
+   0x91d6, /* U+66FF */
+   0x8dc5, /* U+6700 */
+      '?', /* U+6701 */
+      '?', /* U+6702 */
+   0x98f0, /* U+6703 */
+      '?', /* U+6704 */
+      '?', /* U+6705 */
+      '?', /* U+6706 */
+      '?', /* U+6707 */
+   0x8c8e, /* U+6708 */
+   0x974c, /* U+6709 */
+      '?', /* U+670A */
+   0x95fc, /* U+670B */
+      '?', /* U+670C */
+   0x959e, /* U+670D */
+   0xfadf, /* U+670E */
+   0x9e4b, /* U+670F */
+      '?', /* U+6710 */
+      '?', /* U+6711 */
+      '?', /* U+6712 */
+      '?', /* U+6713 */
+   0x8df1, /* U+6714 */
+   0x92bd, /* U+6715 */
+   0x9e4c, /* U+6716 */
+   0x984e, /* U+6717 */
+      '?', /* U+6718 */
+      '?', /* U+6719 */
+      '?', /* U+671A */
+   0x965d, /* U+671B */
+      '?', /* U+671C */
+   0x92a9, /* U+671D */
+   0x9e4d, /* U+671E */
+   0x8afa, /* U+671F */
+      '?', /* U+6720 */
+      '?', /* U+6721 */
+      '?', /* U+6722 */
+      '?', /* U+6723 */
+      '?', /* U+6724 */
+      '?', /* U+6725 */
+   0x9e4e, /* U+6726 */
+   0x9e4f, /* U+6727 */
+   0x96d8, /* U+6728 */
+      '?', /* U+6729 */
+   0x96a2, /* U+672A */
+   0x9696, /* U+672B */
+   0x967b, /* U+672C */
+   0x8e44, /* U+672D */
+   0x9e51, /* U+672E */
+      '?', /* U+672F */
+      '?', /* U+6730 */
+   0x8ee9, /* U+6731 */
+      '?', /* U+6732 */
+      '?', /* U+6733 */
+   0x9670, /* U+6734 */
+      '?', /* U+6735 */
+   0x9e53, /* U+6736 */
+   0x9e56, /* U+6737 */
+   0x9e55, /* U+6738 */
+      '?', /* U+6739 */
+   0x8af7, /* U+673A */
+      '?', /* U+673B */
+      '?', /* U+673C */
+   0x8b80, /* U+673D */
+      '?', /* U+673E */
+   0x9e52, /* U+673F */
+      '?', /* U+6740 */
+   0x9e54, /* U+6741 */
+      '?', /* U+6742 */
+      '?', /* U+6743 */
+      '?', /* U+6744 */
+      '?', /* U+6745 */
+   0x9e57, /* U+6746 */
+      '?', /* U+6747 */
+      '?', /* U+6748 */
+   0x9099, /* U+6749 */
+      '?', /* U+674A */
+      '?', /* U+674B */
+      '?', /* U+674C */
+      '?', /* U+674D */
+   0x979b, /* U+674E */
+   0x88c7, /* U+674F */
+   0x8dde, /* U+6750 */
+   0x91ba, /* U+6751 */
+      '?', /* U+6752 */
+   0x8edb, /* U+6753 */
+      '?', /* U+6754 */
+      '?', /* U+6755 */
+   0x8ff1, /* U+6756 */
+      '?', /* U+6757 */
+      '?', /* U+6758 */
+   0x9e5a, /* U+6759 */
+      '?', /* U+675A */
+      '?', /* U+675B */
+   0x936d, /* U+675C */
+      '?', /* U+675D */
+   0x9e58, /* U+675E */
+   0x91a9, /* U+675F */
+   0x9e59, /* U+6760 */
+   0x8ff0, /* U+6761 */
+   0x96db, /* U+6762 */
+   0x9e5b, /* U+6763 */
+   0x9e5c, /* U+6764 */
+   0x9788, /* U+6765 */
+   0xfae1, /* U+6766 */
+      '?', /* U+6767 */
+      '?', /* U+6768 */
+      '?', /* U+6769 */
+   0x9e61, /* U+676A */
+      '?', /* U+676B */
+      '?', /* U+676C */
+   0x8d59, /* U+676D */
+      '?', /* U+676E */
+   0x9474, /* U+676F */
+   0x9e5e, /* U+6770 */
+   0x938c, /* U+6771 */
+   0x9ddc, /* U+6772 */
+   0x9de0, /* U+6773 */
+      '?', /* U+6774 */
+   0x8b6e, /* U+6775 */
+      '?', /* U+6776 */
+   0x9466, /* U+6777 */
+      '?', /* U+6778 */
+      '?', /* U+6779 */
+      '?', /* U+677A */
+      '?', /* U+677B */
+   0x9e60, /* U+677C */
+      '?', /* U+677D */
+   0x8fbc, /* U+677E */
+   0x94c2, /* U+677F */
+      '?', /* U+6780 */
+      '?', /* U+6781 */
+      '?', /* U+6782 */
+      '?', /* U+6783 */
+      '?', /* U+6784 */
+   0x9e66, /* U+6785 */
+      '?', /* U+6786 */
+   0x94f8, /* U+6787 */
+      '?', /* U+6788 */
+   0x9e5d, /* U+6789 */
+      '?', /* U+678A */
+   0x9e63, /* U+678B */
+   0x9e62, /* U+678C */
+      '?', /* U+678D */
+      '?', /* U+678E */
+      '?', /* U+678F */
+   0x90cd, /* U+6790 */
+      '?', /* U+6791 */
+      '?', /* U+6792 */
+      '?', /* U+6793 */
+      '?', /* U+6794 */
+   0x968d, /* U+6795 */
+      '?', /* U+6796 */
+   0x97d1, /* U+6797 */
+      '?', /* U+6798 */
+      '?', /* U+6799 */
+   0x9687, /* U+679A */
+      '?', /* U+679B */
+   0x89ca, /* U+679C */
+   0x8e7d, /* U+679D */
+      '?', /* U+679E */
+      '?', /* U+679F */
+   0x9867, /* U+67A0 */
+   0x9e65, /* U+67A1 */
+   0x9095, /* U+67A2 */
+      '?', /* U+67A3 */
+      '?', /* U+67A4 */
+      '?', /* U+67A5 */
+   0x9e64, /* U+67A6 */
+      '?', /* U+67A7 */
+      '?', /* U+67A8 */
+   0x9e5f, /* U+67A9 */
+      '?', /* U+67AA */
+      '?', /* U+67AB */
+      '?', /* U+67AC */
+      '?', /* U+67AD */
+      '?', /* U+67AE */
+   0x8ccd, /* U+67AF */
+      '?', /* U+67B0 */
+      '?', /* U+67B1 */
+      '?', /* U+67B2 */
+   0x9e6b, /* U+67B3 */
+   0x9e69, /* U+67B4 */
+      '?', /* U+67B5 */
+   0x89cb, /* U+67B6 */
+   0x9e67, /* U+67B7 */
+   0x9e6d, /* U+67B8 */
+   0x9e73, /* U+67B9 */
+      '?', /* U+67BA */
+   0xfae2, /* U+67BB */
+      '?', /* U+67BC */
+      '?', /* U+67BD */
+      '?', /* U+67BE */
+      '?', /* U+67BF */
+   0xfae4, /* U+67C0 */
+   0x91c6, /* U+67C1 */
+      '?', /* U+67C2 */
+      '?', /* U+67C3 */
+   0x95bf, /* U+67C4 */
+      '?', /* U+67C5 */
+   0x9e75, /* U+67C6 */
+      '?', /* U+67C7 */
+      '?', /* U+67C8 */
+      '?', /* U+67C9 */
+   0x9541, /* U+67CA */
+      '?', /* U+67CB */
+      '?', /* U+67CC */
+      '?', /* U+67CD */
+   0x9e74, /* U+67CE */
+   0x9490, /* U+67CF */
+   0x965e, /* U+67D0 */
+   0x8ab9, /* U+67D1 */
+      '?', /* U+67D2 */
+   0x90f5, /* U+67D3 */
+   0x8f5f, /* U+67D4 */
+      '?', /* U+67D5 */
+      '?', /* U+67D6 */
+      '?', /* U+67D7 */
+   0x92d1, /* U+67D8 */
+      '?', /* U+67D9 */
+   0x974d, /* U+67DA */
+      '?', /* U+67DB */
+      '?', /* U+67DC */
+   0x9e70, /* U+67DD */
+   0x9e6f, /* U+67DE */
+      '?', /* U+67DF */
+      '?', /* U+67E0 */
+      '?', /* U+67E1 */
+   0x9e71, /* U+67E2 */
+      '?', /* U+67E3 */
+   0x9e6e, /* U+67E4 */
+      '?', /* U+67E5 */
+      '?', /* U+67E6 */
+   0x9e76, /* U+67E7 */
+      '?', /* U+67E8 */
+   0x9e6c, /* U+67E9 */
+      '?', /* U+67EA */
+      '?', /* U+67EB */
+   0x9e6a, /* U+67EC */
+      '?', /* U+67ED */
+   0x9e72, /* U+67EE */
+   0x9e68, /* U+67EF */
+      '?', /* U+67F0 */
+   0x928c, /* U+67F1 */
+      '?', /* U+67F2 */
+   0x96f6, /* U+67F3 */
+   0x8ec4, /* U+67F4 */
+   0x8df2, /* U+67F5 */
+      '?', /* U+67F6 */
+      '?', /* U+67F7 */
+      '?', /* U+67F8 */
+      '?', /* U+67F9 */
+      '?', /* U+67FA */
+   0x8db8, /* U+67FB */
+      '?', /* U+67FC */
+      '?', /* U+67FD */
+   0x968f, /* U+67FE */
+   0x8a60, /* U+67FF */
+      '?', /* U+6800 */
+   0xfae5, /* U+6801 */
+   0x92cc, /* U+6802 */
+   0x93c8, /* U+6803 */
+   0x8968, /* U+6804 */
+      '?', /* U+6805 */
+      '?', /* U+6806 */
+      '?', /* U+6807 */
+      '?', /* U+6808 */
+      '?', /* U+6809 */
+      '?', /* U+680A */
+      '?', /* U+680B */
+      '?', /* U+680C */
+      '?', /* U+680D */
+      '?', /* U+680E */
+      '?', /* U+680F */
+      '?', /* U+6810 */
+      '?', /* U+6811 */
+      '?', /* U+6812 */
+   0x90f0, /* U+6813 */
+      '?', /* U+6814 */
+      '?', /* U+6815 */
+   0x90b2, /* U+6816 */
+   0x8c49, /* U+6817 */
+      '?', /* U+6818 */
+      '?', /* U+6819 */
+      '?', /* U+681A */
+      '?', /* U+681B */
+      '?', /* U+681C */
+      '?', /* U+681D */
+   0x9e78, /* U+681E */
+      '?', /* U+681F */
+      '?', /* U+6820 */
+   0x8d5a, /* U+6821 */
+   0x8a9c, /* U+6822 */
+      '?', /* U+6823 */
+      '?', /* U+6824 */
+      '?', /* U+6825 */
+      '?', /* U+6826 */
+      '?', /* U+6827 */
+      '?', /* U+6828 */
+   0x9e7a, /* U+6829 */
+   0x8a94, /* U+682A */
+   0x9e81, /* U+682B */
+      '?', /* U+682C */
+      '?', /* U+682D */
+      '?', /* U+682E */
+      '?', /* U+682F */
+      '?', /* U+6830 */
+      '?', /* U+6831 */
+   0x9e7d, /* U+6832 */
+      '?', /* U+6833 */
+   0x90f1, /* U+6834 */
+      '?', /* U+6835 */
+      '?', /* U+6836 */
+      '?', /* U+6837 */
+   0x8a6a, /* U+6838 */
+   0x8daa, /* U+6839 */
+      '?', /* U+683A */
+      '?', /* U+683B */
+   0x8a69, /* U+683C */
+   0x8dcd, /* U+683D */
+      '?', /* U+683E */
+      '?', /* U+683F */
+   0x9e7b, /* U+6840 */
+   0x8c85, /* U+6841 */
+   0x8c6a, /* U+6842 */
+   0x938d, /* U+6843 */
+   0xfae6, /* U+6844 */
+      '?', /* U+6845 */
+   0x9e79, /* U+6846 */
+      '?', /* U+6847 */
+   0x88c4, /* U+6848 */
+      '?', /* U+6849 */
+      '?', /* U+684A */
+      '?', /* U+684B */
+      '?', /* U+684C */
+   0x9e7c, /* U+684D */
+   0x9e7e, /* U+684E */
+      '?', /* U+684F */
+   0x8bcb, /* U+6850 */
+   0x8c4b, /* U+6851 */
+   0xfae3, /* U+6852 */
+   0x8aba, /* U+6853 */
+   0x8b6a, /* U+6854 */
+      '?', /* U+6855 */
+      '?', /* U+6856 */
+      '?', /* U+6857 */
+      '?', /* U+6858 */
+   0x9e82, /* U+6859 */
+      '?', /* U+685A */
+      '?', /* U+685B */
+   0x8df7, /* U+685C */
+   0x9691, /* U+685D */
+      '?', /* U+685E */
+   0x8e56, /* U+685F */
+      '?', /* U+6860 */
+      '?', /* U+6861 */
+      '?', /* U+6862 */
+   0x9e83, /* U+6863 */
+      '?', /* U+6864 */
+      '?', /* U+6865 */
+      '?', /* U+6866 */
+   0x954f, /* U+6867 */
+      '?', /* U+6868 */
+      '?', /* U+6869 */
+      '?', /* U+686A */
+      '?', /* U+686B */
+      '?', /* U+686C */
+      '?', /* U+686D */
+      '?', /* U+686E */
+      '?', /* U+686F */
+      '?', /* U+6870 */
+      '?', /* U+6871 */
+      '?', /* U+6872 */
+      '?', /* U+6873 */
+   0x9e8f, /* U+6874 */
+      '?', /* U+6875 */
+   0x89b1, /* U+6876 */
+   0x9e84, /* U+6877 */
+      '?', /* U+6878 */
+      '?', /* U+6879 */
+      '?', /* U+687A */
+      '?', /* U+687B */
+      '?', /* U+687C */
+      '?', /* U+687D */
+   0x9e95, /* U+687E */
+   0x9e85, /* U+687F */
+      '?', /* U+6880 */
+   0x97c0, /* U+6881 */
+      '?', /* U+6882 */
+   0x9e8c, /* U+6883 */
+      '?', /* U+6884 */
+   0x947e, /* U+6885 */
+      '?', /* U+6886 */
+      '?', /* U+6887 */
+      '?', /* U+6888 */
+      '?', /* U+6889 */
+      '?', /* U+688A */
+      '?', /* U+688B */
+      '?', /* U+688C */
+   0x9e94, /* U+688D */
+      '?', /* U+688E */
+   0x9e87, /* U+688F */
+      '?', /* U+6890 */
+      '?', /* U+6891 */
+      '?', /* U+6892 */
+   0x88b2, /* U+6893 */
+   0x9e89, /* U+6894 */
+      '?', /* U+6895 */
+      '?', /* U+6896 */
+   0x8d5b, /* U+6897 */
+      '?', /* U+6898 */
+      '?', /* U+6899 */
+      '?', /* U+689A */
+   0x9e8b, /* U+689B */
+      '?', /* U+689C */
+   0x9e8a, /* U+689D */
+      '?', /* U+689E */
+   0x9e86, /* U+689F */
+   0x9e91, /* U+68A0 */
+      '?', /* U+68A1 */
+   0x8fbd, /* U+68A2 */
+      '?', /* U+68A3 */
+      '?', /* U+68A4 */
+      '?', /* U+68A5 */
+   0x9aeb, /* U+68A6 */
+   0x8ce6, /* U+68A7 */
+   0x979c, /* U+68A8 */
+      '?', /* U+68A9 */
+      '?', /* U+68AA */
+      '?', /* U+68AB */
+      '?', /* U+68AC */
+   0x9e88, /* U+68AD */
+      '?', /* U+68AE */
+   0x92f2, /* U+68AF */
+   0x8a42, /* U+68B0 */
+   0x8dab, /* U+68B1 */
+      '?', /* U+68B2 */
+   0x9e80, /* U+68B3 */
+      '?', /* U+68B4 */
+   0x9e90, /* U+68B5 */
+   0x8a81, /* U+68B6 */
+      '?', /* U+68B7 */
+      '?', /* U+68B8 */
+   0x9e8e, /* U+68B9 */
+   0x9e92, /* U+68BA */
+      '?', /* U+68BB */
+   0x938e, /* U+68BC */
+      '?', /* U+68BD */
+      '?', /* U+68BE */
+      '?', /* U+68BF */
+      '?', /* U+68C0 */
+      '?', /* U+68C1 */
+      '?', /* U+68C2 */
+      '?', /* U+68C3 */
+   0x8afc, /* U+68C4 */
+      '?', /* U+68C5 */
+   0x9eb0, /* U+68C6 */
+      '?', /* U+68C7 */
+   0xfa64, /* U+68C8 */
+   0x96c7, /* U+68C9 */
+   0x9e97, /* U+68CA */
+   0x8afb, /* U+68CB */
+      '?', /* U+68CC */
+   0x9e9e, /* U+68CD */
+      '?', /* U+68CE */
+   0xfae7, /* U+68CF */
+      '?', /* U+68D0 */
+      '?', /* U+68D1 */
+   0x965f, /* U+68D2 */
+      '?', /* U+68D3 */
+   0x9e9f, /* U+68D4 */
+   0x9ea1, /* U+68D5 */
+      '?', /* U+68D6 */
+   0x9ea5, /* U+68D7 */
+   0x9e99, /* U+68D8 */
+      '?', /* U+68D9 */
+   0x9249, /* U+68DA */
+      '?', /* U+68DB */
+      '?', /* U+68DC */
+      '?', /* U+68DD */
+      '?', /* U+68DE */
+   0x938f, /* U+68DF */
+   0x9ea9, /* U+68E0 */
+   0x9e9c, /* U+68E1 */
+      '?', /* U+68E2 */
+   0x9ea6, /* U+68E3 */
+      '?', /* U+68E4 */
+      '?', /* U+68E5 */
+      '?', /* U+68E6 */
+   0x9ea0, /* U+68E7 */
+      '?', /* U+68E8 */
+      '?', /* U+68E9 */
+      '?', /* U+68EA */
+      '?', /* U+68EB */
+      '?', /* U+68EC */
+      '?', /* U+68ED */
+   0x9058, /* U+68EE */
+   0x9eaa, /* U+68EF */
+      '?', /* U+68F0 */
+      '?', /* U+68F1 */
+   0x90b1, /* U+68F2 */
+      '?', /* U+68F3 */
+      '?', /* U+68F4 */
+      '?', /* U+68F5 */
+      '?', /* U+68F6 */
+      '?', /* U+68F7 */
+      '?', /* U+68F8 */
+   0x9ea8, /* U+68F9 */
+   0x8abb, /* U+68FA */
+      '?', /* U+68FB */
+      '?', /* U+68FC */
+      '?', /* U+68FD */
+      '?', /* U+68FE */
+      '?', /* U+68FF */
+   0x986f, /* U+6900 */
+   0x9e96, /* U+6901 */
+      '?', /* U+6902 */
+      '?', /* U+6903 */
+   0x9ea4, /* U+6904 */
+   0x88d6, /* U+6905 */
+      '?', /* U+6906 */
+      '?', /* U+6907 */
+   0x9e98, /* U+6908 */
+      '?', /* U+6909 */
+      '?', /* U+690A */
+   0x96b8, /* U+690B */
+   0x9e9d, /* U+690C */
+   0x9041, /* U+690D */
+   0x92c5, /* U+690E */
+   0x9e93, /* U+690F */
+      '?', /* U+6910 */
+      '?', /* U+6911 */
+   0x9ea3, /* U+6912 */
+      '?', /* U+6913 */
+      '?', /* U+6914 */
+      '?', /* U+6915 */
+      '?', /* U+6916 */
+      '?', /* U+6917 */
+      '?', /* U+6918 */
+   0x909a, /* U+6919 */
+   0x9ead, /* U+691A */
+   0x8a91, /* U+691B */
+   0x8c9f, /* U+691C */
+      '?', /* U+691D */
+      '?', /* U+691E */
+      '?', /* U+691F */
+      '?', /* U+6920 */
+   0x9eaf, /* U+6921 */
+   0x9e9a, /* U+6922 */
+   0x9eae, /* U+6923 */
+      '?', /* U+6924 */
+   0x9ea7, /* U+6925 */
+   0x9e9b, /* U+6926 */
+      '?', /* U+6927 */
+   0x9eab, /* U+6928 */
+      '?', /* U+6929 */
+   0x9eac, /* U+692A */
+      '?', /* U+692B */
+      '?', /* U+692C */
+      '?', /* U+692D */
+      '?', /* U+692E */
+      '?', /* U+692F */
+   0x9ebd, /* U+6930 */
+      '?', /* U+6931 */
+      '?', /* U+6932 */
+      '?', /* U+6933 */
+   0x93cc, /* U+6934 */
+      '?', /* U+6935 */
+   0x9ea2, /* U+6936 */
+      '?', /* U+6937 */
+      '?', /* U+6938 */
+   0x9eb9, /* U+6939 */
+      '?', /* U+693A */
+      '?', /* U+693B */
+      '?', /* U+693C */
+   0x9ebb, /* U+693D */
+      '?', /* U+693E */
+   0x92d6, /* U+693F */
+      '?', /* U+6940 */
+      '?', /* U+6941 */
+      '?', /* U+6942 */
+      '?', /* U+6943 */
+      '?', /* U+6944 */
+      '?', /* U+6945 */
+      '?', /* U+6946 */
+      '?', /* U+6947 */
+      '?', /* U+6948 */
+      '?', /* U+6949 */
+   0x976b, /* U+694A */
+      '?', /* U+694B */
+      '?', /* U+694C */
+      '?', /* U+694D */
+      '?', /* U+694E */
+      '?', /* U+694F */
+      '?', /* U+6950 */
+      '?', /* U+6951 */
+      '?', /* U+6952 */
+   0x9596, /* U+6953 */
+   0x9eb6, /* U+6954 */
+   0x91c8, /* U+6955 */
+      '?', /* U+6956 */
+      '?', /* U+6957 */
+      '?', /* U+6958 */
+   0x9ebc, /* U+6959 */
+   0x915e, /* U+695A */
+      '?', /* U+695B */
+   0x9eb3, /* U+695C */
+   0x9ec0, /* U+695D */
+   0x9ebf, /* U+695E */
+      '?', /* U+695F */
+   0x93ed, /* U+6960 */
+   0x9ebe, /* U+6961 */
+   0x93e8, /* U+6962 */
+      '?', /* U+6963 */
+      '?', /* U+6964 */
+      '?', /* U+6965 */
+      '?', /* U+6966 */
+      '?', /* U+6967 */
+   0xfae9, /* U+6968 */
+      '?', /* U+6969 */
+   0x9ec2, /* U+696A */
+   0x9eb5, /* U+696B */
+      '?', /* U+696C */
+   0x8bc6, /* U+696D */
+   0x9eb8, /* U+696E */
+   0x8f7c, /* U+696F */
+      '?', /* U+6970 */
+      '?', /* U+6971 */
+      '?', /* U+6972 */
+   0x9480, /* U+6973 */
+   0x9eba, /* U+6974 */
+   0x8bc9, /* U+6975 */
+      '?', /* U+6976 */
+   0x9eb2, /* U+6977 */
+   0x9eb4, /* U+6978 */
+   0x9eb1, /* U+6979 */
+      '?', /* U+697A */
+      '?', /* U+697B */
+   0x984f, /* U+697C */
+   0x8a79, /* U+697D */
+   0x9eb7, /* U+697E */
+      '?', /* U+697F */
+      '?', /* U+6980 */
+   0x9ec1, /* U+6981 */
+   0x8a54, /* U+6982 */
+      '?', /* U+6983 */
+      '?', /* U+6984 */
+      '?', /* U+6985 */
+      '?', /* U+6986 */
+      '?', /* U+6987 */
+      '?', /* U+6988 */
+      '?', /* U+6989 */
+   0x8de5, /* U+698A */
+      '?', /* U+698B */
+      '?', /* U+698C */
+      '?', /* U+698D */
+   0x897c, /* U+698E */
+      '?', /* U+698F */
+      '?', /* U+6990 */
+   0x9ed2, /* U+6991 */
+      '?', /* U+6992 */
+      '?', /* U+6993 */
+   0x9850, /* U+6994 */
+   0x9ed5, /* U+6995 */
+      '?', /* U+6996 */
+      '?', /* U+6997 */
+   0xfaeb, /* U+6998 */
+      '?', /* U+6999 */
+      '?', /* U+699A */
+   0x9059, /* U+699B */
+   0x9ed4, /* U+699C */
+      '?', /* U+699D */
+      '?', /* U+699E */
+      '?', /* U+699F */
+   0x9ed3, /* U+69A0 */
+      '?', /* U+69A1 */
+      '?', /* U+69A2 */
+      '?', /* U+69A3 */
+      '?', /* U+69A4 */
+      '?', /* U+69A5 */
+      '?', /* U+69A6 */
+   0x9ed0, /* U+69A7 */
+      '?', /* U+69A8 */
+      '?', /* U+69A9 */
+      '?', /* U+69AA */
+      '?', /* U+69AB */
+      '?', /* U+69AC */
+      '?', /* U+69AD */
+   0x9ec4, /* U+69AE */
+      '?', /* U+69AF */
+      '?', /* U+69B0 */
+   0x9ee1, /* U+69B1 */
+   0x9ec3, /* U+69B2 */
+      '?', /* U+69B3 */
+   0x9ed6, /* U+69B4 */
+      '?', /* U+69B5 */
+      '?', /* U+69B6 */
+      '?', /* U+69B7 */
+      '?', /* U+69B8 */
+      '?', /* U+69B9 */
+      '?', /* U+69BA */
+   0x9ece, /* U+69BB */
+      '?', /* U+69BC */
+      '?', /* U+69BD */
+   0x9ec9, /* U+69BE */
+   0x9ec6, /* U+69BF */
+      '?', /* U+69C0 */
+   0x9ec7, /* U+69C1 */
+      '?', /* U+69C2 */
+   0x9ecf, /* U+69C3 */
+      '?', /* U+69C4 */
+      '?', /* U+69C5 */
+      '?', /* U+69C6 */
+   0xeaa0, /* U+69C7 */
+      '?', /* U+69C8 */
+      '?', /* U+69C9 */
+   0x9ecc, /* U+69CA */
+   0x8d5c, /* U+69CB */
+   0x92c6, /* U+69CC */
+   0x9184, /* U+69CD */
+   0x9eca, /* U+69CE */
+      '?', /* U+69CF */
+   0x9ec5, /* U+69D0 */
+      '?', /* U+69D1 */
+      '?', /* U+69D2 */
+   0x9ec8, /* U+69D3 */
+      '?', /* U+69D4 */
+      '?', /* U+69D5 */
+      '?', /* U+69D6 */
+      '?', /* U+69D7 */
+   0x976c, /* U+69D8 */
+   0x968a, /* U+69D9 */
+      '?', /* U+69DA */
+      '?', /* U+69DB */
+      '?', /* U+69DC */
+   0x9ecd, /* U+69DD */
+   0x9ed7, /* U+69DE */
+      '?', /* U+69DF */
+      '?', /* U+69E0 */
+      '?', /* U+69E1 */
+   0xfaec, /* U+69E2 */
+      '?', /* U+69E3 */
+      '?', /* U+69E4 */
+      '?', /* U+69E5 */
+      '?', /* U+69E6 */
+   0x9edf, /* U+69E7 */
+   0x9ed8, /* U+69E8 */
+      '?', /* U+69E9 */
+      '?', /* U+69EA */
+   0x9ee5, /* U+69EB */
+      '?', /* U+69EC */
+   0x9ee3, /* U+69ED */
+      '?', /* U+69EE */
+      '?', /* U+69EF */
+      '?', /* U+69F0 */
+      '?', /* U+69F1 */
+   0x9ede, /* U+69F2 */
+      '?', /* U+69F3 */
+      '?', /* U+69F4 */
+      '?', /* U+69F5 */
+      '?', /* U+69F6 */
+      '?', /* U+69F7 */
+      '?', /* U+69F8 */
+   0x9edd, /* U+69F9 */
+      '?', /* U+69FA */
+   0x92ce, /* U+69FB */
+      '?', /* U+69FC */
+   0x9185, /* U+69FD */
+      '?', /* U+69FE */
+   0x9edb, /* U+69FF */
+      '?', /* U+6A00 */
+      '?', /* U+6A01 */
+   0x9ed9, /* U+6A02 */
+      '?', /* U+6A03 */
+      '?', /* U+6A04 */
+   0x9ee0, /* U+6A05 */
+      '?', /* U+6A06 */
+      '?', /* U+6A07 */
+      '?', /* U+6A08 */
+      '?', /* U+6A09 */
+   0x9ee6, /* U+6A0A */
+   0x94f3, /* U+6A0B */
+   0x9eec, /* U+6A0C */
+      '?', /* U+6A0D */
+      '?', /* U+6A0E */
+      '?', /* U+6A0F */
+      '?', /* U+6A10 */
+      '?', /* U+6A11 */
+   0x9ee7, /* U+6A12 */
+   0x9eea, /* U+6A13 */
+   0x9ee4, /* U+6A14 */
+      '?', /* U+6A15 */
+      '?', /* U+6A16 */
+   0x9294, /* U+6A17 */
+      '?', /* U+6A18 */
+   0x9557, /* U+6A19 */
+      '?', /* U+6A1A */
+   0x9eda, /* U+6A1B */
+      '?', /* U+6A1C */
+      '?', /* U+6A1D */
+   0x9ee2, /* U+6A1E */
+   0x8fbe, /* U+6A1F */
+      '?', /* U+6A20 */
+   0x96cd, /* U+6A21 */
+   0x9ef6, /* U+6A22 */
+   0x9ee9, /* U+6A23 */
+      '?', /* U+6A24 */
+      '?', /* U+6A25 */
+      '?', /* U+6A26 */
+      '?', /* U+6A27 */
+      '?', /* U+6A28 */
+   0x8ca0, /* U+6A29 */
+   0x89a1, /* U+6A2A */
+   0x8a7e, /* U+6A2B */
+      '?', /* U+6A2C */
+      '?', /* U+6A2D */
+   0x9ed1, /* U+6A2E */
+      '?', /* U+6A2F */
+   0xfaed, /* U+6A30 */
+      '?', /* U+6A31 */
+      '?', /* U+6A32 */
+      '?', /* U+6A33 */
+      '?', /* U+6A34 */
+   0x8fbf, /* U+6A35 */
+   0x9eee, /* U+6A36 */
+      '?', /* U+6A37 */
+   0x9ef5, /* U+6A38 */
+   0x8ef7, /* U+6A39 */
+   0x8a92, /* U+6A3A */
+      '?', /* U+6A3B */
+      '?', /* U+6A3C */
+   0x924d, /* U+6A3D */
+      '?', /* U+6A3E */
+      '?', /* U+6A3F */
+      '?', /* U+6A40 */
+      '?', /* U+6A41 */
+      '?', /* U+6A42 */
+      '?', /* U+6A43 */
+   0x9eeb, /* U+6A44 */
+      '?', /* U+6A45 */
+   0xfaef, /* U+6A46 */
+   0x9ef0, /* U+6A47 */
+   0x9ef4, /* U+6A48 */
+      '?', /* U+6A49 */
+      '?', /* U+6A4A */
+   0x8bb4, /* U+6A4B */
+      '?', /* U+6A4C */
+      '?', /* U+6A4D */
+      '?', /* U+6A4E */
+      '?', /* U+6A4F */
+      '?', /* U+6A50 */
+      '?', /* U+6A51 */
+      '?', /* U+6A52 */
+      '?', /* U+6A53 */
+      '?', /* U+6A54 */
+      '?', /* U+6A55 */
+      '?', /* U+6A56 */
+      '?', /* U+6A57 */
+   0x8b6b, /* U+6A58 */
+   0x9ef2, /* U+6A59 */
+      '?', /* U+6A5A */
+      '?', /* U+6A5B */
+      '?', /* U+6A5C */
+      '?', /* U+6A5D */
+      '?', /* U+6A5E */
+   0x8b40, /* U+6A5F */
+      '?', /* U+6A60 */
+   0x93c9, /* U+6A61 */
+   0x9ef1, /* U+6A62 */
+      '?', /* U+6A63 */
+      '?', /* U+6A64 */
+      '?', /* U+6A65 */
+   0x9ef3, /* U+6A66 */
+      '?', /* U+6A67 */
+      '?', /* U+6A68 */
+      '?', /* U+6A69 */
+      '?', /* U+6A6A */
+   0xfaee, /* U+6A6B */
+      '?', /* U+6A6C */
+      '?', /* U+6A6D */
+      '?', /* U+6A6E */
+      '?', /* U+6A6F */
+      '?', /* U+6A70 */
+      '?', /* U+6A71 */
+   0x9eed, /* U+6A72 */
+   0xfaf0, /* U+6A73 */
+      '?', /* U+6A74 */
+      '?', /* U+6A75 */
+      '?', /* U+6A76 */
+      '?', /* U+6A77 */
+   0x9eef, /* U+6A78 */
+      '?', /* U+6A79 */
+      '?', /* U+6A7A */
+      '?', /* U+6A7B */
+      '?', /* U+6A7C */
+      '?', /* U+6A7D */
+   0xfaf1, /* U+6A7E */
+   0x8a80, /* U+6A7F */
+   0x9268, /* U+6A80 */
+      '?', /* U+6A81 */
+      '?', /* U+6A82 */
+      '?', /* U+6A83 */
+   0x9efa, /* U+6A84 */
+      '?', /* U+6A85 */
+      '?', /* U+6A86 */
+      '?', /* U+6A87 */
+      '?', /* U+6A88 */
+      '?', /* U+6A89 */
+      '?', /* U+6A8A */
+      '?', /* U+6A8B */
+      '?', /* U+6A8C */
+   0x9ef8, /* U+6A8D */
+   0x8ce7, /* U+6A8E */
+      '?', /* U+6A8F */
+   0x9ef7, /* U+6A90 */
+      '?', /* U+6A91 */
+      '?', /* U+6A92 */
+      '?', /* U+6A93 */
+      '?', /* U+6A94 */
+      '?', /* U+6A95 */
+      '?', /* U+6A96 */
+   0x9f40, /* U+6A97 */
+      '?', /* U+6A98 */
+      '?', /* U+6A99 */
+      '?', /* U+6A9A */
+      '?', /* U+6A9B */
+   0x9e77, /* U+6A9C */
+      '?', /* U+6A9D */
+      '?', /* U+6A9E */
+      '?', /* U+6A9F */
+   0x9ef9, /* U+6AA0 */
+      '?', /* U+6AA1 */
+   0x9efb, /* U+6AA2 */
+   0x9efc, /* U+6AA3 */
+      '?', /* U+6AA4 */
+      '?', /* U+6AA5 */
+      '?', /* U+6AA6 */
+      '?', /* U+6AA7 */
+      '?', /* U+6AA8 */
+      '?', /* U+6AA9 */
+   0x9f4b, /* U+6AAA */
+      '?', /* U+6AAB */
+   0x9f47, /* U+6AAC */
+      '?', /* U+6AAD */
+   0x9e8d, /* U+6AAE */
+      '?', /* U+6AAF */
+      '?', /* U+6AB0 */
+      '?', /* U+6AB1 */
+      '?', /* U+6AB2 */
+   0x9f46, /* U+6AB3 */
+      '?', /* U+6AB4 */
+      '?', /* U+6AB5 */
+      '?', /* U+6AB6 */
+      '?', /* U+6AB7 */
+   0x9f45, /* U+6AB8 */
+      '?', /* U+6AB9 */
+      '?', /* U+6ABA */
+   0x9f42, /* U+6ABB */
+      '?', /* U+6ABC */
+      '?', /* U+6ABD */
+      '?', /* U+6ABE */
+      '?', /* U+6ABF */
+      '?', /* U+6AC0 */
+   0x9ee8, /* U+6AC1 */
+   0x9f44, /* U+6AC2 */
+   0x9f43, /* U+6AC3 */
+      '?', /* U+6AC4 */
+      '?', /* U+6AC5 */
+      '?', /* U+6AC6 */
+      '?', /* U+6AC7 */
+      '?', /* U+6AC8 */
+      '?', /* U+6AC9 */
+      '?', /* U+6ACA */
+      '?', /* U+6ACB */
+      '?', /* U+6ACC */
+      '?', /* U+6ACD */
+      '?', /* U+6ACE */
+      '?', /* U+6ACF */
+      '?', /* U+6AD0 */
+   0x9f49, /* U+6AD1 */
+      '?', /* U+6AD2 */
+   0x9845, /* U+6AD3 */
+      '?', /* U+6AD4 */
+      '?', /* U+6AD5 */
+      '?', /* U+6AD6 */
+      '?', /* U+6AD7 */
+      '?', /* U+6AD8 */
+      '?', /* U+6AD9 */
+   0x9f4c, /* U+6ADA */
+   0x8bf9, /* U+6ADB */
+      '?', /* U+6ADC */
+      '?', /* U+6ADD */
+   0x9f48, /* U+6ADE */
+   0x9f4a, /* U+6ADF */
+      '?', /* U+6AE0 */
+      '?', /* U+6AE1 */
+   0xfaf2, /* U+6AE2 */
+      '?', /* U+6AE3 */
+   0xfaf3, /* U+6AE4 */
+      '?', /* U+6AE5 */
+      '?', /* U+6AE6 */
+      '?', /* U+6AE7 */
+   0x94a5, /* U+6AE8 */
+      '?', /* U+6AE9 */
+   0x9f4d, /* U+6AEA */
+      '?', /* U+6AEB */
+      '?', /* U+6AEC */
+      '?', /* U+6AED */
+      '?', /* U+6AEE */
+      '?', /* U+6AEF */
+      '?', /* U+6AF0 */
+      '?', /* U+6AF1 */
+      '?', /* U+6AF2 */
+      '?', /* U+6AF3 */
+      '?', /* U+6AF4 */
+      '?', /* U+6AF5 */
+      '?', /* U+6AF6 */
+      '?', /* U+6AF7 */
+      '?', /* U+6AF8 */
+      '?', /* U+6AF9 */
+   0x9f51, /* U+6AFA */
+   0x9f4e, /* U+6AFB */
+      '?', /* U+6AFC */
+      '?', /* U+6AFD */
+      '?', /* U+6AFE */
+      '?', /* U+6AFF */
+      '?', /* U+6B00 */
+      '?', /* U+6B01 */
+      '?', /* U+6B02 */
+      '?', /* U+6B03 */
+   0x9793, /* U+6B04 */
+   0x9f4f, /* U+6B05 */
+      '?', /* U+6B06 */
+      '?', /* U+6B07 */
+      '?', /* U+6B08 */
+      '?', /* U+6B09 */
+   0x9edc, /* U+6B0A */
+      '?', /* U+6B0B */
+      '?', /* U+6B0C */
+      '?', /* U+6B0D */
+      '?', /* U+6B0E */
+      '?', /* U+6B0F */
+      '?', /* U+6B10 */
+      '?', /* U+6B11 */
+   0x9f52, /* U+6B12 */
+      '?', /* U+6B13 */
+      '?', /* U+6B14 */
+      '?', /* U+6B15 */
+   0x9f53, /* U+6B16 */
+      '?', /* U+6B17 */
+      '?', /* U+6B18 */
+      '?', /* U+6B19 */
+      '?', /* U+6B1A */
+      '?', /* U+6B1B */
+      '?', /* U+6B1C */
+   0x8954, /* U+6B1D */
+      '?', /* U+6B1E */
+   0x9f55, /* U+6B1F */
+   0x8c87, /* U+6B20 */
+   0x8e9f, /* U+6B21 */
+      '?', /* U+6B22 */
+   0x8bd3, /* U+6B23 */
+      '?', /* U+6B24 */
+      '?', /* U+6B25 */
+      '?', /* U+6B26 */
+   0x89a2, /* U+6B27 */
+      '?', /* U+6B28 */
+      '?', /* U+6B29 */
+      '?', /* U+6B2A */
+      '?', /* U+6B2B */
+      '?', /* U+6B2C */
+      '?', /* U+6B2D */
+      '?', /* U+6B2E */
+      '?', /* U+6B2F */
+      '?', /* U+6B30 */
+      '?', /* U+6B31 */
+   0x977e, /* U+6B32 */
+      '?', /* U+6B33 */
+      '?', /* U+6B34 */
+      '?', /* U+6B35 */
+      '?', /* U+6B36 */
+   0x9f57, /* U+6B37 */
+   0x9f56, /* U+6B38 */
+   0x9f59, /* U+6B39 */
+   0x8b5c, /* U+6B3A */
+      '?', /* U+6B3B */
+      '?', /* U+6B3C */
+   0x8bd4, /* U+6B3D */
+   0x8abc, /* U+6B3E */
+      '?', /* U+6B3F */
+      '?', /* U+6B40 */
+      '?', /* U+6B41 */
+      '?', /* U+6B42 */
+   0x9f5c, /* U+6B43 */
+      '?', /* U+6B44 */
+      '?', /* U+6B45 */
+      '?', /* U+6B46 */
+   0x9f5b, /* U+6B47 */
+      '?', /* U+6B48 */
+   0x9f5d, /* U+6B49 */
+      '?', /* U+6B4A */
+      '?', /* U+6B4B */
+   0x89cc, /* U+6B4C */
+      '?', /* U+6B4D */
+   0x9256, /* U+6B4E */
+      '?', /* U+6B4F */
+   0x9f5e, /* U+6B50 */
+      '?', /* U+6B51 */
+      '?', /* U+6B52 */
+   0x8abd, /* U+6B53 */
+   0x9f60, /* U+6B54 */
+      '?', /* U+6B55 */
+      '?', /* U+6B56 */
+      '?', /* U+6B57 */
+      '?', /* U+6B58 */
+   0x9f5f, /* U+6B59 */
+      '?', /* U+6B5A */
+   0x9f61, /* U+6B5B */
+      '?', /* U+6B5C */
+      '?', /* U+6B5D */
+      '?', /* U+6B5E */
+   0x9f62, /* U+6B5F */
+      '?', /* U+6B60 */
+   0x9f63, /* U+6B61 */
+   0x8e7e, /* U+6B62 */
+   0x90b3, /* U+6B63 */
+   0x8d9f, /* U+6B64 */
+      '?', /* U+6B65 */
+   0x9590, /* U+6B66 */
+      '?', /* U+6B67 */
+      '?', /* U+6B68 */
+   0x95e0, /* U+6B69 */
+   0x9863, /* U+6B6A */
+      '?', /* U+6B6B */
+      '?', /* U+6B6C */
+      '?', /* U+6B6D */
+      '?', /* U+6B6E */
+   0x8e95, /* U+6B6F */
+      '?', /* U+6B70 */
+      '?', /* U+6B71 */
+      '?', /* U+6B72 */
+   0x8dce, /* U+6B73 */
+   0x97f0, /* U+6B74 */
+      '?', /* U+6B75 */
+      '?', /* U+6B76 */
+      '?', /* U+6B77 */
+   0x9f64, /* U+6B78 */
+   0x9f65, /* U+6B79 */
+      '?', /* U+6B7A */
+   0x8e80, /* U+6B7B */
+      '?', /* U+6B7C */
+      '?', /* U+6B7D */
+      '?', /* U+6B7E */
+   0x9f66, /* U+6B7F */
+   0x9f67, /* U+6B80 */
+      '?', /* U+6B81 */
+      '?', /* U+6B82 */
+   0x9f69, /* U+6B83 */
+   0x9f68, /* U+6B84 */
+      '?', /* U+6B85 */
+   0x9677, /* U+6B86 */
+      '?', /* U+6B87 */
+      '?', /* U+6B88 */
+   0x8f7d, /* U+6B89 */
+   0x8eea, /* U+6B8A */
+   0x8e63, /* U+6B8B */
+      '?', /* U+6B8C */
+   0x9f6a, /* U+6B8D */
+      '?', /* U+6B8E */
+      '?', /* U+6B8F */
+      '?', /* U+6B90 */
+      '?', /* U+6B91 */
+      '?', /* U+6B92 */
+      '?', /* U+6B93 */
+      '?', /* U+6B94 */
+   0x9f6c, /* U+6B95 */
+   0x9042, /* U+6B96 */
+      '?', /* U+6B97 */
+   0x9f6b, /* U+6B98 */
+      '?', /* U+6B99 */
+      '?', /* U+6B9A */
+      '?', /* U+6B9B */
+      '?', /* U+6B9C */
+      '?', /* U+6B9D */
+   0x9f6d, /* U+6B9E */
+      '?', /* U+6B9F */
+      '?', /* U+6BA0 */
+      '?', /* U+6BA1 */
+      '?', /* U+6BA2 */
+      '?', /* U+6BA3 */
+   0x9f6e, /* U+6BA4 */
+      '?', /* U+6BA5 */
+      '?', /* U+6BA6 */
+      '?', /* U+6BA7 */
+      '?', /* U+6BA8 */
+      '?', /* U+6BA9 */
+   0x9f6f, /* U+6BAA */
+   0x9f70, /* U+6BAB */
+      '?', /* U+6BAC */
+      '?', /* U+6BAD */
+      '?', /* U+6BAE */
+   0x9f71, /* U+6BAF */
+      '?', /* U+6BB0 */
+   0x9f73, /* U+6BB1 */
+   0x9f72, /* U+6BB2 */
+   0x9f74, /* U+6BB3 */
+   0x89a3, /* U+6BB4 */
+   0x9269, /* U+6BB5 */
+      '?', /* U+6BB6 */
+   0x9f75, /* U+6BB7 */
+      '?', /* U+6BB8 */
+      '?', /* U+6BB9 */
+   0x8e45, /* U+6BBA */
+   0x8a6b, /* U+6BBB */
+   0x9f76, /* U+6BBC */
+      '?', /* U+6BBD */
+      '?', /* U+6BBE */
+   0x9361, /* U+6BBF */
+   0x9aca, /* U+6BC0 */
+      '?', /* U+6BC1 */
+      '?', /* U+6BC2 */
+      '?', /* U+6BC3 */
+      '?', /* U+6BC4 */
+   0x8b42, /* U+6BC5 */
+   0x9f77, /* U+6BC6 */
+      '?', /* U+6BC7 */
+      '?', /* U+6BC8 */
+      '?', /* U+6BC9 */
+      '?', /* U+6BCA */
+   0x9f78, /* U+6BCB */
+      '?', /* U+6BCC */
+   0x95ea, /* U+6BCD */
+   0x9688, /* U+6BCE */
+      '?', /* U+6BCF */
+      '?', /* U+6BD0 */
+      '?', /* U+6BD1 */
+   0x93c5, /* U+6BD2 */
+   0x9f79, /* U+6BD3 */
+   0x94e4, /* U+6BD4 */
+      '?', /* U+6BD5 */
+   0xfaf4, /* U+6BD6 */
+      '?', /* U+6BD7 */
+   0x94f9, /* U+6BD8 */
+      '?', /* U+6BD9 */
+      '?', /* U+6BDA */
+   0x96d1, /* U+6BDB */
+      '?', /* U+6BDC */
+      '?', /* U+6BDD */
+      '?', /* U+6BDE */
+   0x9f7a, /* U+6BDF */
+      '?', /* U+6BE0 */
+      '?', /* U+6BE1 */
+      '?', /* U+6BE2 */
+      '?', /* U+6BE3 */
+      '?', /* U+6BE4 */
+      '?', /* U+6BE5 */
+      '?', /* U+6BE6 */
+      '?', /* U+6BE7 */
+      '?', /* U+6BE8 */
+      '?', /* U+6BE9 */
+      '?', /* U+6BEA */
+   0x9f7c, /* U+6BEB */
+   0x9f7b, /* U+6BEC */
+      '?', /* U+6BED */
+      '?', /* U+6BEE */
+   0x9f7e, /* U+6BEF */
+      '?', /* U+6BF0 */
+      '?', /* U+6BF1 */
+      '?', /* U+6BF2 */
+   0x9f7d, /* U+6BF3 */
+      '?', /* U+6BF4 */
+      '?', /* U+6BF5 */
+      '?', /* U+6BF6 */
+      '?', /* U+6BF7 */
+      '?', /* U+6BF8 */
+      '?', /* U+6BF9 */
+      '?', /* U+6BFA */
+      '?', /* U+6BFB */
+      '?', /* U+6BFC */
+      '?', /* U+6BFD */
+      '?', /* U+6BFE */
+      '?', /* U+6BFF */
+      '?', /* U+6C00 */
+      '?', /* U+6C01 */
+      '?', /* U+6C02 */
+      '?', /* U+6C03 */
+      '?', /* U+6C04 */
+      '?', /* U+6C05 */
+      '?', /* U+6C06 */
+      '?', /* U+6C07 */
+   0x9f81, /* U+6C08 */
+      '?', /* U+6C09 */
+      '?', /* U+6C0A */
+      '?', /* U+6C0B */
+      '?', /* U+6C0C */
+      '?', /* U+6C0D */
+      '?', /* U+6C0E */
+   0x8e81, /* U+6C0F */
+      '?', /* U+6C10 */
+   0x96af, /* U+6C11 */
+      '?', /* U+6C12 */
+   0x9f82, /* U+6C13 */
+   0x9f83, /* U+6C14 */
+      '?', /* U+6C15 */
+      '?', /* U+6C16 */
+   0x8b43, /* U+6C17 */
+      '?', /* U+6C18 */
+      '?', /* U+6C19 */
+      '?', /* U+6C1A */
+   0x9f84, /* U+6C1B */
+      '?', /* U+6C1C */
+      '?', /* U+6C1D */
+      '?', /* U+6C1E */
+      '?', /* U+6C1F */
+      '?', /* U+6C20 */
+      '?', /* U+6C21 */
+      '?', /* U+6C22 */
+   0x9f86, /* U+6C23 */
+   0x9f85, /* U+6C24 */
+      '?', /* U+6C25 */
+      '?', /* U+6C26 */
+      '?', /* U+6C27 */
+      '?', /* U+6C28 */
+      '?', /* U+6C29 */
+      '?', /* U+6C2A */
+      '?', /* U+6C2B */
+      '?', /* U+6C2C */
+      '?', /* U+6C2D */
+      '?', /* U+6C2E */
+      '?', /* U+6C2F */
+      '?', /* U+6C30 */
+      '?', /* U+6C31 */
+      '?', /* U+6C32 */
+      '?', /* U+6C33 */
+   0x9085, /* U+6C34 */
+      '?', /* U+6C35 */
+      '?', /* U+6C36 */
+   0x9558, /* U+6C37 */
+   0x8969, /* U+6C38 */
+      '?', /* U+6C39 */
+      '?', /* U+6C3A */
+      '?', /* U+6C3B */
+      '?', /* U+6C3C */
+      '?', /* U+6C3D */
+   0x94c3, /* U+6C3E */
+   0xfaf5, /* U+6C3F */
+   0x92f3, /* U+6C40 */
+   0x8f60, /* U+6C41 */
+   0x8b81, /* U+6C42 */
+      '?', /* U+6C43 */
+      '?', /* U+6C44 */
+      '?', /* U+6C45 */
+      '?', /* U+6C46 */
+      '?', /* U+6C47 */
+      '?', /* U+6C48 */
+      '?', /* U+6C49 */
+      '?', /* U+6C4A */
+      '?', /* U+6C4B */
+      '?', /* U+6C4C */
+      '?', /* U+6C4D */
+   0x94c4, /* U+6C4E */
+      '?', /* U+6C4F */
+   0x8eac, /* U+6C50 */
+      '?', /* U+6C51 */
+      '?', /* U+6C52 */
+      '?', /* U+6C53 */
+      '?', /* U+6C54 */
+   0x9f88, /* U+6C55 */
+      '?', /* U+6C56 */
+   0x8abe, /* U+6C57 */
+      '?', /* U+6C58 */
+      '?', /* U+6C59 */
+   0x8998, /* U+6C5A */
+      '?', /* U+6C5B */
+   0xfaf6, /* U+6C5C */
+   0x93f0, /* U+6C5D */
+   0x9f87, /* U+6C5E */
+   0x8d5d, /* U+6C5F */
+   0x9272, /* U+6C60 */
+      '?', /* U+6C61 */
+   0x9f89, /* U+6C62 */
+      '?', /* U+6C63 */
+      '?', /* U+6C64 */
+      '?', /* U+6C65 */
+      '?', /* U+6C66 */
+      '?', /* U+6C67 */
+   0x9f91, /* U+6C68 */
+      '?', /* U+6C69 */
+   0x9f8a, /* U+6C6A */
+      '?', /* U+6C6B */
+      '?', /* U+6C6C */
+      '?', /* U+6C6D */
+      '?', /* U+6C6E */
+   0xfaf8, /* U+6C6F */
+   0x91bf, /* U+6C70 */
+      '?', /* U+6C71 */
+   0x8b82, /* U+6C72 */
+   0x9f92, /* U+6C73 */
+      '?', /* U+6C74 */
+      '?', /* U+6C75 */
+      '?', /* U+6C76 */
+      '?', /* U+6C77 */
+      '?', /* U+6C78 */
+      '?', /* U+6C79 */
+   0x8c88, /* U+6C7A */
+      '?', /* U+6C7B */
+      '?', /* U+6C7C */
+   0x8b44, /* U+6C7D */
+   0x9f90, /* U+6C7E */
+      '?', /* U+6C7F */
+      '?', /* U+6C80 */
+   0x9f8e, /* U+6C81 */
+   0x9f8b, /* U+6C82 */
+   0x9780, /* U+6C83 */
+      '?', /* U+6C84 */
+      '?', /* U+6C85 */
+   0xfaf7, /* U+6C86 */
+      '?', /* U+6C87 */
+   0x92be, /* U+6C88 */
+      '?', /* U+6C89 */
+      '?', /* U+6C8A */
+      '?', /* U+6C8B */
+   0x93d7, /* U+6C8C */
+   0x9f8c, /* U+6C8D */
+      '?', /* U+6C8E */
+      '?', /* U+6C8F */
+   0x9f94, /* U+6C90 */
+      '?', /* U+6C91 */
+   0x9f93, /* U+6C92 */
+   0x8c42, /* U+6C93 */
+      '?', /* U+6C94 */
+      '?', /* U+6C95 */
+   0x89ab, /* U+6C96 */
+      '?', /* U+6C97 */
+      '?', /* U+6C98 */
+   0x8db9, /* U+6C99 */
+   0x9f8d, /* U+6C9A */
+   0x9f8f, /* U+6C9B */
+      '?', /* U+6C9C */
+      '?', /* U+6C9D */
+      '?', /* U+6C9E */
+      '?', /* U+6C9F */
+      '?', /* U+6CA0 */
+   0x9676, /* U+6CA1 */
+   0x91f2, /* U+6CA2 */
+      '?', /* U+6CA3 */
+      '?', /* U+6CA4 */
+      '?', /* U+6CA5 */
+      '?', /* U+6CA6 */
+      '?', /* U+6CA7 */
+      '?', /* U+6CA8 */
+      '?', /* U+6CA9 */
+      '?', /* U+6CAA */
+   0x9697, /* U+6CAB */
+      '?', /* U+6CAC */
+      '?', /* U+6CAD */
+   0x9f9c, /* U+6CAE */
+      '?', /* U+6CAF */
+      '?', /* U+6CB0 */
+   0x9f9d, /* U+6CB1 */
+      '?', /* U+6CB2 */
+   0x89cd, /* U+6CB3 */
+      '?', /* U+6CB4 */
+      '?', /* U+6CB5 */
+      '?', /* U+6CB6 */
+      '?', /* U+6CB7 */
+   0x95a6, /* U+6CB8 */
+   0x96fb, /* U+6CB9 */
+   0x9f9f, /* U+6CBA */
+   0x8ea1, /* U+6CBB */
+   0x8fc0, /* U+6CBC */
+   0x9f98, /* U+6CBD */
+   0x9f9e, /* U+6CBE */
+   0x8988, /* U+6CBF */
+      '?', /* U+6CC0 */
+   0x8bb5, /* U+6CC1 */
+      '?', /* U+6CC2 */
+      '?', /* U+6CC3 */
+   0x9f95, /* U+6CC4 */
+   0x9f9a, /* U+6CC5 */
+      '?', /* U+6CC6 */
+      '?', /* U+6CC7 */
+      '?', /* U+6CC8 */
+   0x90f2, /* U+6CC9 */
+   0x9491, /* U+6CCA */
+      '?', /* U+6CCB */
+   0x94e5, /* U+6CCC */
+      '?', /* U+6CCD */
+      '?', /* U+6CCE */
+      '?', /* U+6CCF */
+      '?', /* U+6CD0 */
+      '?', /* U+6CD1 */
+      '?', /* U+6CD2 */
+   0x9f97, /* U+6CD3 */
+      '?', /* U+6CD4 */
+   0x9640, /* U+6CD5 */
+      '?', /* U+6CD6 */
+   0x9f99, /* U+6CD7 */
+      '?', /* U+6CD8 */
+   0x9fa2, /* U+6CD9 */
+   0xfaf9, /* U+6CDA */
+   0x9fa0, /* U+6CDB */
+      '?', /* U+6CDC */
+   0x9f9b, /* U+6CDD */
+      '?', /* U+6CDE */
+      '?', /* U+6CDF */
+      '?', /* U+6CE0 */
+   0x9641, /* U+6CE1 */
+   0x9467, /* U+6CE2 */
+   0x8b83, /* U+6CE3 */
+      '?', /* U+6CE4 */
+   0x9344, /* U+6CE5 */
+      '?', /* U+6CE6 */
+      '?', /* U+6CE7 */
+   0x928d, /* U+6CE8 */
+      '?', /* U+6CE9 */
+   0x9fa3, /* U+6CEA */
+      '?', /* U+6CEB */
+      '?', /* U+6CEC */
+      '?', /* U+6CED */
+      '?', /* U+6CEE */
+   0x9fa1, /* U+6CEF */
+   0x91d7, /* U+6CF0 */
+   0x9f96, /* U+6CF1 */
+      '?', /* U+6CF2 */
+   0x896a, /* U+6CF3 */
+      '?', /* U+6CF4 */
+      '?', /* U+6CF5 */
+      '?', /* U+6CF6 */
+      '?', /* U+6CF7 */
+      '?', /* U+6CF8 */
+      '?', /* U+6CF9 */
+      '?', /* U+6CFA */
+      '?', /* U+6CFB */
+      '?', /* U+6CFC */
+      '?', /* U+6CFD */
+      '?', /* U+6CFE */
+      '?', /* U+6CFF */
+      '?', /* U+6D00 */
+      '?', /* U+6D01 */
+      '?', /* U+6D02 */
+      '?', /* U+6D03 */
+   0xfafa, /* U+6D04 */
+      '?', /* U+6D05 */
+      '?', /* U+6D06 */
+      '?', /* U+6D07 */
+      '?', /* U+6D08 */
+      '?', /* U+6D09 */
+      '?', /* U+6D0A */
+   0x976d, /* U+6D0B */
+   0x9fae, /* U+6D0C */
+      '?', /* U+6D0D */
+      '?', /* U+6D0E */
+      '?', /* U+6D0F */
+      '?', /* U+6D10 */
+      '?', /* U+6D11 */
+   0x9fad, /* U+6D12 */
+      '?', /* U+6D13 */
+      '?', /* U+6D14 */
+      '?', /* U+6D15 */
+      '?', /* U+6D16 */
+   0x90f4, /* U+6D17 */
+      '?', /* U+6D18 */
+   0x9faa, /* U+6D19 */
+      '?', /* U+6D1A */
+   0x978c, /* U+6D1B */
+      '?', /* U+6D1C */
+      '?', /* U+6D1D */
+   0x93b4, /* U+6D1E */
+   0x9fa4, /* U+6D1F */
+      '?', /* U+6D20 */
+      '?', /* U+6D21 */
+      '?', /* U+6D22 */
+      '?', /* U+6D23 */
+      '?', /* U+6D24 */
+   0x92c3, /* U+6D25 */
+      '?', /* U+6D26 */
+      '?', /* U+6D27 */
+      '?', /* U+6D28 */
+   0x896b, /* U+6D29 */
+   0x8d5e, /* U+6D2A */
+   0x9fa7, /* U+6D2B */
+      '?', /* U+6D2C */
+      '?', /* U+6D2D */
+      '?', /* U+6D2E */
+      '?', /* U+6D2F */
+      '?', /* U+6D30 */
+      '?', /* U+6D31 */
+   0x8f46, /* U+6D32 */
+   0x9fac, /* U+6D33 */
+      '?', /* U+6D34 */
+   0x9fab, /* U+6D35 */
+   0x9fa6, /* U+6D36 */
+      '?', /* U+6D37 */
+   0x9fa9, /* U+6D38 */
+      '?', /* U+6D39 */
+      '?', /* U+6D3A */
+   0x8a88, /* U+6D3B */
+      '?', /* U+6D3C */
+   0x9fa8, /* U+6D3D */
+   0x9468, /* U+6D3E */
+      '?', /* U+6D3F */
+      '?', /* U+6D40 */
+   0x97ac, /* U+6D41 */
+      '?', /* U+6D42 */
+      '?', /* U+6D43 */
+   0x8ff2, /* U+6D44 */
+   0x90f3, /* U+6D45 */
+      '?', /* U+6D46 */
+      '?', /* U+6D47 */
+      '?', /* U+6D48 */
+      '?', /* U+6D49 */
+      '?', /* U+6D4A */
+      '?', /* U+6D4B */
+      '?', /* U+6D4C */
+      '?', /* U+6D4D */
+      '?', /* U+6D4E */
+      '?', /* U+6D4F */
+      '?', /* U+6D50 */
+      '?', /* U+6D51 */
+      '?', /* U+6D52 */
+      '?', /* U+6D53 */
+      '?', /* U+6D54 */
+      '?', /* U+6D55 */
+      '?', /* U+6D56 */
+      '?', /* U+6D57 */
+      '?', /* U+6D58 */
+   0x9fb4, /* U+6D59 */
+   0x9fb2, /* U+6D5A */
+      '?', /* U+6D5B */
+   0x956c, /* U+6D5C */
+      '?', /* U+6D5D */
+      '?', /* U+6D5E */
+      '?', /* U+6D5F */
+      '?', /* U+6D60 */
+      '?', /* U+6D61 */
+      '?', /* U+6D62 */
+   0x9faf, /* U+6D63 */
+   0x9fb1, /* U+6D64 */
+      '?', /* U+6D65 */
+   0x8959, /* U+6D66 */
+      '?', /* U+6D67 */
+      '?', /* U+6D68 */
+   0x8d5f, /* U+6D69 */
+   0x9851, /* U+6D6A */
+      '?', /* U+6D6B */
+   0x8a5c, /* U+6D6C */
+      '?', /* U+6D6D */
+   0x9582, /* U+6D6E */
+   0xfafc, /* U+6D6F */
+      '?', /* U+6D70 */
+      '?', /* U+6D71 */
+      '?', /* U+6D72 */
+      '?', /* U+6D73 */
+   0x9781, /* U+6D74 */
+      '?', /* U+6D75 */
+      '?', /* U+6D76 */
+   0x8a43, /* U+6D77 */
+   0x905a, /* U+6D78 */
+   0x9fb3, /* U+6D79 */
+      '?', /* U+6D7A */
+      '?', /* U+6D7B */
+      '?', /* U+6D7C */
+      '?', /* U+6D7D */
+      '?', /* U+6D7E */
+      '?', /* U+6D7F */
+      '?', /* U+6D80 */
+      '?', /* U+6D81 */
+      '?', /* U+6D82 */
+      '?', /* U+6D83 */
+      '?', /* U+6D84 */
+   0x9fb8, /* U+6D85 */
+      '?', /* U+6D86 */
+   0xfafb, /* U+6D87 */
+   0x8fc1, /* U+6D88 */
+      '?', /* U+6D89 */
+      '?', /* U+6D8A */
+      '?', /* U+6D8B */
+   0x974f, /* U+6D8C */
+      '?', /* U+6D8D */
+   0x9fb5, /* U+6D8E */
+      '?', /* U+6D8F */
+      '?', /* U+6D90 */
+      '?', /* U+6D91 */
+      '?', /* U+6D92 */
+   0x9fb0, /* U+6D93 */
+      '?', /* U+6D94 */
+   0x9fb6, /* U+6D95 */
+   0xfb40, /* U+6D96 */
+      '?', /* U+6D97 */
+      '?', /* U+6D98 */
+   0x97dc, /* U+6D99 */
+      '?', /* U+6D9A */
+   0x9393, /* U+6D9B */
+   0x93c0, /* U+6D9C */
+      '?', /* U+6D9D */
+      '?', /* U+6D9E */
+      '?', /* U+6D9F */
+      '?', /* U+6DA0 */
+      '?', /* U+6DA1 */
+      '?', /* U+6DA2 */
+      '?', /* U+6DA3 */
+      '?', /* U+6DA4 */
+      '?', /* U+6DA5 */
+      '?', /* U+6DA6 */
+      '?', /* U+6DA7 */
+      '?', /* U+6DA8 */
+      '?', /* U+6DA9 */
+      '?', /* U+6DAA */
+      '?', /* U+6DAB */
+   0xfb41, /* U+6DAC */
+      '?', /* U+6DAD */
+      '?', /* U+6DAE */
+   0x8a55, /* U+6DAF */
+      '?', /* U+6DB0 */
+      '?', /* U+6DB1 */
+   0x8974, /* U+6DB2 */
+      '?', /* U+6DB3 */
+      '?', /* U+6DB4 */
+   0x9fbc, /* U+6DB5 */
+      '?', /* U+6DB6 */
+      '?', /* U+6DB7 */
+   0x9fbf, /* U+6DB8 */
+      '?', /* U+6DB9 */
+      '?', /* U+6DBA */
+      '?', /* U+6DBB */
+   0x97c1, /* U+6DBC */
+      '?', /* U+6DBD */
+      '?', /* U+6DBE */
+      '?', /* U+6DBF */
+   0x9784, /* U+6DC0 */
+      '?', /* U+6DC1 */
+      '?', /* U+6DC2 */
+      '?', /* U+6DC3 */
+      '?', /* U+6DC4 */
+   0x9fc6, /* U+6DC5 */
+   0x9fc0, /* U+6DC6 */
+   0x9fbd, /* U+6DC7 */
+      '?', /* U+6DC8 */
+      '?', /* U+6DC9 */
+      '?', /* U+6DCA */
+   0x97d2, /* U+6DCB */
+   0x9fc3, /* U+6DCC */
+      '?', /* U+6DCD */
+      '?', /* U+6DCE */
+   0xfb42, /* U+6DCF */
+      '?', /* U+6DD0 */
+   0x8f69, /* U+6DD1 */
+   0x9fc5, /* U+6DD2 */
+      '?', /* U+6DD3 */
+      '?', /* U+6DD4 */
+   0x9fca, /* U+6DD5 */
+      '?', /* U+6DD6 */
+      '?', /* U+6DD7 */
+   0x9391, /* U+6DD8 */
+   0x9fc8, /* U+6DD9 */
+      '?', /* U+6DDA */
+      '?', /* U+6DDB */
+      '?', /* U+6DDC */
+      '?', /* U+6DDD */
+   0x9fc2, /* U+6DDE */
+      '?', /* U+6DDF */
+      '?', /* U+6DE0 */
+   0x9257, /* U+6DE1 */
+      '?', /* U+6DE2 */
+      '?', /* U+6DE3 */
+   0x9fc9, /* U+6DE4 */
+      '?', /* U+6DE5 */
+   0x9fbe, /* U+6DE6 */
+      '?', /* U+6DE7 */
+   0x9fc4, /* U+6DE8 */
+      '?', /* U+6DE9 */
+   0x9fcb, /* U+6DEA */
+   0x88fa, /* U+6DEB */
+   0x9fc1, /* U+6DEC */
+      '?', /* U+6DED */
+   0x9fcc, /* U+6DEE */
+      '?', /* U+6DEF */
+      '?', /* U+6DF0 */
+   0x905b, /* U+6DF1 */
+   0xfb44, /* U+6DF2 */
+   0x8f7e, /* U+6DF3 */
+      '?', /* U+6DF4 */
+   0x95a3, /* U+6DF5 */
+      '?', /* U+6DF6 */
+   0x8dac, /* U+6DF7 */
+   0xfb43, /* U+6DF8 */
+   0x9fb9, /* U+6DF9 */
+   0x9fc7, /* U+6DFA */
+   0x9359, /* U+6DFB */
+   0xfb45, /* U+6DFC */
+      '?', /* U+6DFD */
+      '?', /* U+6DFE */
+      '?', /* U+6DFF */
+      '?', /* U+6E00 */
+      '?', /* U+6E01 */
+      '?', /* U+6E02 */
+      '?', /* U+6E03 */
+      '?', /* U+6E04 */
+   0x90b4, /* U+6E05 */
+      '?', /* U+6E06 */
+   0x8a89, /* U+6E07 */
+   0x8dcf, /* U+6E08 */
+   0x8fc2, /* U+6E09 */
+   0x9fbb, /* U+6E0A */
+   0x8f61, /* U+6E0B */
+      '?', /* U+6E0C */
+      '?', /* U+6E0D */
+      '?', /* U+6E0E */
+      '?', /* U+6E0F */
+      '?', /* U+6E10 */
+      '?', /* U+6E11 */
+      '?', /* U+6E12 */
+   0x8c6b, /* U+6E13 */
+      '?', /* U+6E14 */
+   0x9fba, /* U+6E15 */
+      '?', /* U+6E16 */
+      '?', /* U+6E17 */
+      '?', /* U+6E18 */
+   0x9fd0, /* U+6E19 */
+   0x8f8d, /* U+6E1A */
+   0x8cb8, /* U+6E1B */
+      '?', /* U+6E1C */
+   0x9fdf, /* U+6E1D */
+      '?', /* U+6E1E */
+   0x9fd9, /* U+6E1F */
+   0x8b94, /* U+6E20 */
+   0x936e, /* U+6E21 */
+      '?', /* U+6E22 */
+   0x9fd4, /* U+6E23 */
+   0x9fdd, /* U+6E24 */
+   0x88ad, /* U+6E25 */
+   0x8951, /* U+6E26 */
+   0xfb48, /* U+6E27 */
+      '?', /* U+6E28 */
+   0x89b7, /* U+6E29 */
+      '?', /* U+6E2A */
+   0x9fd6, /* U+6E2B */
+   0x91aa, /* U+6E2C */
+   0x9fcd, /* U+6E2D */
+   0x9fcf, /* U+6E2E */
+   0x8d60, /* U+6E2F */
+      '?', /* U+6E30 */
+      '?', /* U+6E31 */
+      '?', /* U+6E32 */
+      '?', /* U+6E33 */
+      '?', /* U+6E34 */
+      '?', /* U+6E35 */
+      '?', /* U+6E36 */
+      '?', /* U+6E37 */
+   0x9fe0, /* U+6E38 */
+   0xfb46, /* U+6E39 */
+   0x9fdb, /* U+6E3A */
+      '?', /* U+6E3B */
+   0xfb49, /* U+6E3C */
+      '?', /* U+6E3D */
+   0x9fd3, /* U+6E3E */
+      '?', /* U+6E3F */
+      '?', /* U+6E40 */
+      '?', /* U+6E41 */
+      '?', /* U+6E42 */
+   0x9fda, /* U+6E43 */
+      '?', /* U+6E44 */
+      '?', /* U+6E45 */
+      '?', /* U+6E46 */
+      '?', /* U+6E47 */
+      '?', /* U+6E48 */
+      '?', /* U+6E49 */
+   0x96a9, /* U+6E4A */
+      '?', /* U+6E4B */
+      '?', /* U+6E4C */
+   0x9fd8, /* U+6E4D */
+   0x9fdc, /* U+6E4E */
+      '?', /* U+6E4F */
+      '?', /* U+6E50 */
+      '?', /* U+6E51 */
+      '?', /* U+6E52 */
+      '?', /* U+6E53 */
+      '?', /* U+6E54 */
+      '?', /* U+6E55 */
+   0x8cce, /* U+6E56 */
+      '?', /* U+6E57 */
+   0x8fc3, /* U+6E58 */
+      '?', /* U+6E59 */
+      '?', /* U+6E5A */
+   0x9258, /* U+6E5B */
+   0xfb47, /* U+6E5C */
+      '?', /* U+6E5D */
+      '?', /* U+6E5E */
+   0x9fd2, /* U+6E5F */
+      '?', /* U+6E60 */
+      '?', /* U+6E61 */
+      '?', /* U+6E62 */
+      '?', /* U+6E63 */
+      '?', /* U+6E64 */
+      '?', /* U+6E65 */
+      '?', /* U+6E66 */
+   0x974e, /* U+6E67 */
+      '?', /* U+6E68 */
+      '?', /* U+6E69 */
+      '?', /* U+6E6A */
+   0x9fd5, /* U+6E6B */
+      '?', /* U+6E6C */
+      '?', /* U+6E6D */
+   0x9fce, /* U+6E6E */
+   0x9392, /* U+6E6F */
+      '?', /* U+6E70 */
+      '?', /* U+6E71 */
+   0x9fd1, /* U+6E72 */
+      '?', /* U+6E73 */
+      '?', /* U+6E74 */
+      '?', /* U+6E75 */
+   0x9fd7, /* U+6E76 */
+      '?', /* U+6E77 */
+      '?', /* U+6E78 */
+      '?', /* U+6E79 */
+      '?', /* U+6E7A */
+      '?', /* U+6E7B */
+      '?', /* U+6E7C */
+      '?', /* U+6E7D */
+   0x9870, /* U+6E7E */
+   0x8ebc, /* U+6E7F */
+   0x969e, /* U+6E80 */
+      '?', /* U+6E81 */
+   0x9fe1, /* U+6E82 */
+      '?', /* U+6E83 */
+      '?', /* U+6E84 */
+      '?', /* U+6E85 */
+      '?', /* U+6E86 */
+      '?', /* U+6E87 */
+      '?', /* U+6E88 */
+      '?', /* U+6E89 */
+      '?', /* U+6E8A */
+      '?', /* U+6E8B */
+   0x94ac, /* U+6E8C */
+      '?', /* U+6E8D */
+      '?', /* U+6E8E */
+   0x9fed, /* U+6E8F */
+   0x8cb9, /* U+6E90 */
+      '?', /* U+6E91 */
+      '?', /* U+6E92 */
+      '?', /* U+6E93 */
+      '?', /* U+6E94 */
+      '?', /* U+6E95 */
+   0x8f80, /* U+6E96 */
+      '?', /* U+6E97 */
+   0x9fe3, /* U+6E98 */
+      '?', /* U+6E99 */
+      '?', /* U+6E9A */
+      '?', /* U+6E9B */
+   0x97ad, /* U+6E9C */
+   0x8d61, /* U+6E9D */
+      '?', /* U+6E9E */
+   0x9ff0, /* U+6E9F */
+      '?', /* U+6EA0 */
+      '?', /* U+6EA1 */
+   0x88ec, /* U+6EA2 */
+      '?', /* U+6EA3 */
+      '?', /* U+6EA4 */
+   0x9fee, /* U+6EA5 */
+      '?', /* U+6EA6 */
+      '?', /* U+6EA7 */
+      '?', /* U+6EA8 */
+      '?', /* U+6EA9 */
+   0x9fe2, /* U+6EAA */
+      '?', /* U+6EAB */
+      '?', /* U+6EAC */
+      '?', /* U+6EAD */
+      '?', /* U+6EAE */
+   0x9fe8, /* U+6EAF */
+      '?', /* U+6EB0 */
+      '?', /* U+6EB1 */
+   0x9fea, /* U+6EB2 */
+      '?', /* U+6EB3 */
+      '?', /* U+6EB4 */
+      '?', /* U+6EB5 */
+   0x976e, /* U+6EB6 */
+   0x9fe5, /* U+6EB7 */
+      '?', /* U+6EB8 */
+      '?', /* U+6EB9 */
+   0x934d, /* U+6EBA */
+      '?', /* U+6EBB */
+      '?', /* U+6EBC */
+   0x9fe7, /* U+6EBD */
+      '?', /* U+6EBE */
+   0xfb4a, /* U+6EBF */
+      '?', /* U+6EC0 */
+      '?', /* U+6EC1 */
+   0x9fef, /* U+6EC2 */
+      '?', /* U+6EC3 */
+   0x9fe9, /* U+6EC4 */
+   0x96c5, /* U+6EC5 */
+      '?', /* U+6EC6 */
+      '?', /* U+6EC7 */
+      '?', /* U+6EC8 */
+   0x9fe4, /* U+6EC9 */
+      '?', /* U+6ECA */
+   0x8ea0, /* U+6ECB */
+   0x9ffc, /* U+6ECC */
+      '?', /* U+6ECD */
+      '?', /* U+6ECE */
+      '?', /* U+6ECF */
+      '?', /* U+6ED0 */
+   0x8a8a, /* U+6ED1 */
+      '?', /* U+6ED2 */
+   0x9fe6, /* U+6ED3 */
+   0x9feb, /* U+6ED4 */
+   0x9fec, /* U+6ED5 */
+      '?', /* U+6ED6 */
+      '?', /* U+6ED7 */
+      '?', /* U+6ED8 */
+      '?', /* U+6ED9 */
+      '?', /* U+6EDA */
+      '?', /* U+6EDB */
+      '?', /* U+6EDC */
+   0x91ea, /* U+6EDD */
+   0x91d8, /* U+6EDE */
+      '?', /* U+6EDF */
+      '?', /* U+6EE0 */
+      '?', /* U+6EE1 */
+      '?', /* U+6EE2 */
+      '?', /* U+6EE3 */
+      '?', /* U+6EE4 */
+      '?', /* U+6EE5 */
+      '?', /* U+6EE6 */
+      '?', /* U+6EE7 */
+      '?', /* U+6EE8 */
+      '?', /* U+6EE9 */
+      '?', /* U+6EEA */
+      '?', /* U+6EEB */
+   0x9ff4, /* U+6EEC */
+      '?', /* U+6EED */
+      '?', /* U+6EEE */
+   0x9ffa, /* U+6EEF */
+      '?', /* U+6EF0 */
+      '?', /* U+6EF1 */
+   0x9ff8, /* U+6EF2 */
+      '?', /* U+6EF3 */
+   0x9348, /* U+6EF4 */
+      '?', /* U+6EF5 */
+      '?', /* U+6EF6 */
+   0xe042, /* U+6EF7 */
+   0x9ff5, /* U+6EF8 */
+      '?', /* U+6EF9 */
+      '?', /* U+6EFA */
+      '?', /* U+6EFB */
+      '?', /* U+6EFC */
+      '?', /* U+6EFD */
+   0x9ff6, /* U+6EFE */
+   0x9fde, /* U+6EFF */
+      '?', /* U+6F00 */
+   0x8b99, /* U+6F01 */
+   0x9559, /* U+6F02 */
+      '?', /* U+6F03 */
+      '?', /* U+6F04 */
+      '?', /* U+6F05 */
+   0x8ebd, /* U+6F06 */
+      '?', /* U+6F07 */
+      '?', /* U+6F08 */
+   0x8d97, /* U+6F09 */
+      '?', /* U+6F0A */
+      '?', /* U+6F0B */
+      '?', /* U+6F0C */
+      '?', /* U+6F0D */
+      '?', /* U+6F0E */
+   0x9852, /* U+6F0F */
+      '?', /* U+6F10 */
+   0x9ff2, /* U+6F11 */
+      '?', /* U+6F12 */
+   0xe041, /* U+6F13 */
+   0x8989, /* U+6F14 */
+   0x9186, /* U+6F15 */
+      '?', /* U+6F16 */
+      '?', /* U+6F17 */
+      '?', /* U+6F18 */
+      '?', /* U+6F19 */
+      '?', /* U+6F1A */
+      '?', /* U+6F1B */
+      '?', /* U+6F1C */
+      '?', /* U+6F1D */
+      '?', /* U+6F1E */
+      '?', /* U+6F1F */
+   0x9499, /* U+6F20 */
+      '?', /* U+6F21 */
+   0x8abf, /* U+6F22 */
+   0x97f8, /* U+6F23 */
+      '?', /* U+6F24 */
+      '?', /* U+6F25 */
+      '?', /* U+6F26 */
+      '?', /* U+6F27 */
+      '?', /* U+6F28 */
+      '?', /* U+6F29 */
+      '?', /* U+6F2A */
+   0x969f, /* U+6F2B */
+   0x92d0, /* U+6F2C */
+      '?', /* U+6F2D */
+      '?', /* U+6F2E */
+      '?', /* U+6F2F */
+      '?', /* U+6F30 */
+   0x9ff9, /* U+6F31 */
+   0x9ffb, /* U+6F32 */
+      '?', /* U+6F33 */
+      '?', /* U+6F34 */
+      '?', /* U+6F35 */
+      '?', /* U+6F36 */
+      '?', /* U+6F37 */
+   0x9151, /* U+6F38 */
+      '?', /* U+6F39 */
+      '?', /* U+6F3A */
+      '?', /* U+6F3B */
+      '?', /* U+6F3C */
+      '?', /* U+6F3D */
+   0xe040, /* U+6F3E */
+   0x9ff7, /* U+6F3F */
+      '?', /* U+6F40 */
+   0x9ff1, /* U+6F41 */
+      '?', /* U+6F42 */
+      '?', /* U+6F43 */
+      '?', /* U+6F44 */
+   0x8ac1, /* U+6F45 */
+      '?', /* U+6F46 */
+      '?', /* U+6F47 */
+      '?', /* U+6F48 */
+      '?', /* U+6F49 */
+      '?', /* U+6F4A */
+      '?', /* U+6F4B */
+      '?', /* U+6F4C */
+      '?', /* U+6F4D */
+      '?', /* U+6F4E */
+      '?', /* U+6F4F */
+      '?', /* U+6F50 */
+      '?', /* U+6F51 */
+      '?', /* U+6F52 */
+      '?', /* U+6F53 */
+   0x8c89, /* U+6F54 */
+      '?', /* U+6F55 */
+      '?', /* U+6F56 */
+      '?', /* U+6F57 */
+   0xe04e, /* U+6F58 */
+      '?', /* U+6F59 */
+      '?', /* U+6F5A */
+   0xe049, /* U+6F5B */
+   0x90f6, /* U+6F5C */
+      '?', /* U+6F5D */
+      '?', /* U+6F5E */
+   0x8a83, /* U+6F5F */
+      '?', /* U+6F60 */
+      '?', /* U+6F61 */
+      '?', /* U+6F62 */
+      '?', /* U+6F63 */
+   0x8f81, /* U+6F64 */
+      '?', /* U+6F65 */
+   0xe052, /* U+6F66 */
+      '?', /* U+6F67 */
+      '?', /* U+6F68 */
+      '?', /* U+6F69 */
+      '?', /* U+6F6A */
+      '?', /* U+6F6B */
+      '?', /* U+6F6C */
+   0xe04b, /* U+6F6D */
+   0x92aa, /* U+6F6E */
+   0xe048, /* U+6F6F */
+   0x92d7, /* U+6F70 */
+      '?', /* U+6F71 */
+      '?', /* U+6F72 */
+      '?', /* U+6F73 */
+   0xe06b, /* U+6F74 */
+      '?', /* U+6F75 */
+      '?', /* U+6F76 */
+      '?', /* U+6F77 */
+   0xe045, /* U+6F78 */
+      '?', /* U+6F79 */
+   0xe044, /* U+6F7A */
+      '?', /* U+6F7B */
+   0xe04d, /* U+6F7C */
+      '?', /* U+6F7D */
+      '?', /* U+6F7E */
+      '?', /* U+6F7F */
+   0xe047, /* U+6F80 */
+   0xe046, /* U+6F81 */
+   0xe04c, /* U+6F82 */
+      '?', /* U+6F83 */
+   0x909f, /* U+6F84 */
+      '?', /* U+6F85 */
+   0xe043, /* U+6F86 */
+      '?', /* U+6F87 */
+   0xfb4b, /* U+6F88 */
+      '?', /* U+6F89 */
+      '?', /* U+6F8A */
+      '?', /* U+6F8B */
+      '?', /* U+6F8C */
+      '?', /* U+6F8D */
+   0xe04f, /* U+6F8E */
+      '?', /* U+6F8F */
+      '?', /* U+6F90 */
+   0xe050, /* U+6F91 */
+      '?', /* U+6F92 */
+      '?', /* U+6F93 */
+      '?', /* U+6F94 */
+      '?', /* U+6F95 */
+      '?', /* U+6F96 */
+   0x8ac0, /* U+6F97 */
+      '?', /* U+6F98 */
+      '?', /* U+6F99 */
+      '?', /* U+6F9A */
+      '?', /* U+6F9B */
+      '?', /* U+6F9C */
+      '?', /* U+6F9D */
+      '?', /* U+6F9E */
+      '?', /* U+6F9F */
+      '?', /* U+6FA0 */
+   0xe055, /* U+6FA1 */
+      '?', /* U+6FA2 */
+   0xe054, /* U+6FA3 */
+   0xe056, /* U+6FA4 */
+      '?', /* U+6FA5 */
+      '?', /* U+6FA6 */
+      '?', /* U+6FA7 */
+      '?', /* U+6FA8 */
+      '?', /* U+6FA9 */
+   0xe059, /* U+6FAA */
+      '?', /* U+6FAB */
+      '?', /* U+6FAC */
+      '?', /* U+6FAD */
+      '?', /* U+6FAE */
+      '?', /* U+6FAF */
+      '?', /* U+6FB0 */
+   0x9362, /* U+6FB1 */
+      '?', /* U+6FB2 */
+   0xe053, /* U+6FB3 */
+      '?', /* U+6FB4 */
+   0xfb4c, /* U+6FB5 */
+      '?', /* U+6FB6 */
+      '?', /* U+6FB7 */
+      '?', /* U+6FB8 */
+   0xe057, /* U+6FB9 */
+      '?', /* U+6FBA */
+      '?', /* U+6FBB */
+      '?', /* U+6FBC */
+      '?', /* U+6FBD */
+      '?', /* U+6FBE */
+      '?', /* U+6FBF */
+   0x8c83, /* U+6FC0 */
+   0x91f7, /* U+6FC1 */
+   0xe051, /* U+6FC2 */
+   0x945a, /* U+6FC3 */
+      '?', /* U+6FC4 */
+      '?', /* U+6FC5 */
+   0xe058, /* U+6FC6 */
+      '?', /* U+6FC7 */
+      '?', /* U+6FC8 */
+      '?', /* U+6FC9 */
+      '?', /* U+6FCA */
+      '?', /* U+6FCB */
+      '?', /* U+6FCC */
+      '?', /* U+6FCD */
+      '?', /* U+6FCE */
+      '?', /* U+6FCF */
+      '?', /* U+6FD0 */
+      '?', /* U+6FD1 */
+      '?', /* U+6FD2 */
+      '?', /* U+6FD3 */
+   0xe05d, /* U+6FD4 */
+   0xe05b, /* U+6FD5 */
+      '?', /* U+6FD6 */
+      '?', /* U+6FD7 */
+   0xe05e, /* U+6FD8 */
+      '?', /* U+6FD9 */
+      '?', /* U+6FDA */
+   0xe061, /* U+6FDB */
+      '?', /* U+6FDC */
+      '?', /* U+6FDD */
+      '?', /* U+6FDE */
+   0xe05a, /* U+6FDF */
+   0x8d8a, /* U+6FE0 */
+   0x9447, /* U+6FE1 */
+      '?', /* U+6FE2 */
+      '?', /* U+6FE3 */
+   0x9fb7, /* U+6FE4 */
+      '?', /* U+6FE5 */
+      '?', /* U+6FE6 */
+      '?', /* U+6FE7 */
+      '?', /* U+6FE8 */
+      '?', /* U+6FE9 */
+      '?', /* U+6FEA */
+   0x9794, /* U+6FEB */
+   0xe05c, /* U+6FEC */
+      '?', /* U+6FED */
+   0xe060, /* U+6FEE */
+   0x91f3, /* U+6FEF */
+      '?', /* U+6FF0 */
+   0xe05f, /* U+6FF1 */
+      '?', /* U+6FF2 */
+   0xe04a, /* U+6FF3 */
+      '?', /* U+6FF4 */
+   0xfb4d, /* U+6FF5 */
+   0xe889, /* U+6FF6 */
+      '?', /* U+6FF7 */
+      '?', /* U+6FF8 */
+      '?', /* U+6FF9 */
+   0xe064, /* U+6FFA */
+      '?', /* U+6FFB */
+      '?', /* U+6FFC */
+      '?', /* U+6FFD */
+   0xe068, /* U+6FFE */
+      '?', /* U+6FFF */
+      '?', /* U+7000 */
+   0xe066, /* U+7001 */
+      '?', /* U+7002 */
+      '?', /* U+7003 */
+      '?', /* U+7004 */
+   0xfb4e, /* U+7005 */
+      '?', /* U+7006 */
+   0xfb4f, /* U+7007 */
+      '?', /* U+7008 */
+   0xe062, /* U+7009 */
+      '?', /* U+700A */
+   0xe063, /* U+700B */
+      '?', /* U+700C */
+      '?', /* U+700D */
+      '?', /* U+700E */
+   0xe067, /* U+700F */
+      '?', /* U+7010 */
+   0xe065, /* U+7011 */
+      '?', /* U+7012 */
+      '?', /* U+7013 */
+      '?', /* U+7014 */
+   0x956d, /* U+7015 */
+      '?', /* U+7016 */
+      '?', /* U+7017 */
+   0xe06d, /* U+7018 */
+      '?', /* U+7019 */
+   0xe06a, /* U+701A */
+   0xe069, /* U+701B */
+      '?', /* U+701C */
+   0xe06c, /* U+701D */
+   0x93d2, /* U+701E */
+   0xe06e, /* U+701F */
+      '?', /* U+7020 */
+      '?', /* U+7021 */
+      '?', /* U+7022 */
+      '?', /* U+7023 */
+      '?', /* U+7024 */
+      '?', /* U+7025 */
+   0x9295, /* U+7026 */
+   0x91eb, /* U+7027 */
+   0xfb50, /* U+7028 */
+      '?', /* U+7029 */
+      '?', /* U+702A */
+      '?', /* U+702B */
+   0x90a3, /* U+702C */
+      '?', /* U+702D */
+      '?', /* U+702E */
+      '?', /* U+702F */
+   0xe06f, /* U+7030 */
+      '?', /* U+7031 */
+   0xe071, /* U+7032 */
+      '?', /* U+7033 */
+      '?', /* U+7034 */
+      '?', /* U+7035 */
+      '?', /* U+7036 */
+      '?', /* U+7037 */
+      '?', /* U+7038 */
+      '?', /* U+7039 */
+      '?', /* U+703A */
+      '?', /* U+703B */
+      '?', /* U+703C */
+      '?', /* U+703D */
+   0xe070, /* U+703E */
+      '?', /* U+703F */
+      '?', /* U+7040 */
+      '?', /* U+7041 */
+      '?', /* U+7042 */
+      '?', /* U+7043 */
+      '?', /* U+7044 */
+      '?', /* U+7045 */
+      '?', /* U+7046 */
+      '?', /* U+7047 */
+      '?', /* U+7048 */
+      '?', /* U+7049 */
+      '?', /* U+704A */
+      '?', /* U+704B */
+   0x9ff3, /* U+704C */
+      '?', /* U+704D */
+      '?', /* U+704E */
+      '?', /* U+704F */
+      '?', /* U+7050 */
+   0xe072, /* U+7051 */
+      '?', /* U+7052 */
+      '?', /* U+7053 */
+      '?', /* U+7054 */
+      '?', /* U+7055 */
+      '?', /* U+7056 */
+      '?', /* U+7057 */
+   0x93e5, /* U+7058 */
+      '?', /* U+7059 */
+      '?', /* U+705A */
+      '?', /* U+705B */
+      '?', /* U+705C */
+      '?', /* U+705D */
+      '?', /* U+705E */
+      '?', /* U+705F */
+      '?', /* U+7060 */
+      '?', /* U+7061 */
+      '?', /* U+7062 */
+   0xe073, /* U+7063 */
+      '?', /* U+7064 */
+      '?', /* U+7065 */
+      '?', /* U+7066 */
+      '?', /* U+7067 */
+      '?', /* U+7068 */
+      '?', /* U+7069 */
+      '?', /* U+706A */
+   0x89ce, /* U+706B */
+      '?', /* U+706C */
+      '?', /* U+706D */
+      '?', /* U+706E */
+   0x9394, /* U+706F */
+   0x8a44, /* U+7070 */
+      '?', /* U+7071 */
+      '?', /* U+7072 */
+      '?', /* U+7073 */
+      '?', /* U+7074 */
+      '?', /* U+7075 */
+      '?', /* U+7076 */
+      '?', /* U+7077 */
+   0x8b84, /* U+7078 */
+      '?', /* U+7079 */
+      '?', /* U+707A */
+      '?', /* U+707B */
+   0x8edc, /* U+707C */
+   0x8dd0, /* U+707D */
+      '?', /* U+707E */
+      '?', /* U+707F */
+      '?', /* U+7080 */
+      '?', /* U+7081 */
+      '?', /* U+7082 */
+      '?', /* U+7083 */
+      '?', /* U+7084 */
+   0xfb51, /* U+7085 */
+      '?', /* U+7086 */
+      '?', /* U+7087 */
+      '?', /* U+7088 */
+   0x9846, /* U+7089 */
+   0x9086, /* U+708A */
+      '?', /* U+708B */
+      '?', /* U+708C */
+      '?', /* U+708D */
+   0x898a, /* U+708E */
+      '?', /* U+708F */
+      '?', /* U+7090 */
+      '?', /* U+7091 */
+   0xe075, /* U+7092 */
+      '?', /* U+7093 */
+      '?', /* U+7094 */
+      '?', /* U+7095 */
+      '?', /* U+7096 */
+      '?', /* U+7097 */
+      '?', /* U+7098 */
+   0xe074, /* U+7099 */
+      '?', /* U+709A */
+      '?', /* U+709B */
+      '?', /* U+709C */
+      '?', /* U+709D */
+      '?', /* U+709E */
+      '?', /* U+709F */
+      '?', /* U+70A0 */
+      '?', /* U+70A1 */
+      '?', /* U+70A2 */
+      '?', /* U+70A3 */
+      '?', /* U+70A4 */
+      '?', /* U+70A5 */
+      '?', /* U+70A6 */
+      '?', /* U+70A7 */
+      '?', /* U+70A8 */
+      '?', /* U+70A9 */
+      '?', /* U+70AA */
+   0xfb52, /* U+70AB */
+   0xe078, /* U+70AC */
+   0x9259, /* U+70AD */
+   0xe07b, /* U+70AE */
+   0xe076, /* U+70AF */
+      '?', /* U+70B0 */
+      '?', /* U+70B1 */
+      '?', /* U+70B2 */
+   0xe07a, /* U+70B3 */
+      '?', /* U+70B4 */
+      '?', /* U+70B5 */
+      '?', /* U+70B6 */
+      '?', /* U+70B7 */
+   0xe079, /* U+70B8 */
+   0x935f, /* U+70B9 */
+   0x88d7, /* U+70BA */
+   0xfa62, /* U+70BB */
+      '?', /* U+70BC */
+      '?', /* U+70BD */
+      '?', /* U+70BE */
+      '?', /* U+70BF */
+      '?', /* U+70C0 */
+      '?', /* U+70C1 */
+      '?', /* U+70C2 */
+      '?', /* U+70C3 */
+      '?', /* U+70C4 */
+      '?', /* U+70C5 */
+      '?', /* U+70C6 */
+      '?', /* U+70C7 */
+   0x97f3, /* U+70C8 */
+      '?', /* U+70C9 */
+      '?', /* U+70CA */
+   0xe07d, /* U+70CB */
+      '?', /* U+70CC */
+      '?', /* U+70CD */
+      '?', /* U+70CE */
+   0x8947, /* U+70CF */
+      '?', /* U+70D0 */
+      '?', /* U+70D1 */
+      '?', /* U+70D2 */
+      '?', /* U+70D3 */
+      '?', /* U+70D4 */
+      '?', /* U+70D5 */
+      '?', /* U+70D6 */
+      '?', /* U+70D7 */
+      '?', /* U+70D8 */
+   0xe080, /* U+70D9 */
+      '?', /* U+70DA */
+      '?', /* U+70DB */
+      '?', /* U+70DC */
+   0xe07e, /* U+70DD */
+      '?', /* U+70DE */
+   0xe07c, /* U+70DF */
+      '?', /* U+70E0 */
+      '?', /* U+70E1 */
+      '?', /* U+70E2 */
+      '?', /* U+70E3 */
+      '?', /* U+70E4 */
+      '?', /* U+70E5 */
+      '?', /* U+70E6 */
+      '?', /* U+70E7 */
+      '?', /* U+70E8 */
+      '?', /* U+70E9 */
+      '?', /* U+70EA */
+      '?', /* U+70EB */
+      '?', /* U+70EC */
+      '?', /* U+70ED */
+      '?', /* U+70EE */
+      '?', /* U+70EF */
+      '?', /* U+70F0 */
+   0xe077, /* U+70F1 */
+      '?', /* U+70F2 */
+      '?', /* U+70F3 */
+      '?', /* U+70F4 */
+      '?', /* U+70F5 */
+      '?', /* U+70F6 */
+      '?', /* U+70F7 */
+      '?', /* U+70F8 */
+   0x9642, /* U+70F9 */
+      '?', /* U+70FA */
+      '?', /* U+70FB */
+      '?', /* U+70FC */
+   0xe082, /* U+70FD */
+      '?', /* U+70FE */
+      '?', /* U+70FF */
+      '?', /* U+7100 */
+      '?', /* U+7101 */
+      '?', /* U+7102 */
+      '?', /* U+7103 */
+   0xfb54, /* U+7104 */
+      '?', /* U+7105 */
+      '?', /* U+7106 */
+      '?', /* U+7107 */
+      '?', /* U+7108 */
+   0xe081, /* U+7109 */
+      '?', /* U+710A */
+      '?', /* U+710B */
+      '?', /* U+710C */
+      '?', /* U+710D */
+      '?', /* U+710E */
+   0xfb53, /* U+710F */
+      '?', /* U+7110 */
+      '?', /* U+7111 */
+      '?', /* U+7112 */
+      '?', /* U+7113 */
+   0x898b, /* U+7114 */
+      '?', /* U+7115 */
+      '?', /* U+7116 */
+      '?', /* U+7117 */
+      '?', /* U+7118 */
+   0xe084, /* U+7119 */
+   0x95b0, /* U+711A */
+      '?', /* U+711B */
+   0xe083, /* U+711C */
+      '?', /* U+711D */
+      '?', /* U+711E */
+      '?', /* U+711F */
+      '?', /* U+7120 */
+   0x96b3, /* U+7121 */
+      '?', /* U+7122 */
+      '?', /* U+7123 */
+      '?', /* U+7124 */
+      '?', /* U+7125 */
+   0x8fc5, /* U+7126 */
+      '?', /* U+7127 */
+      '?', /* U+7128 */
+      '?', /* U+7129 */
+      '?', /* U+712A */
+      '?', /* U+712B */
+      '?', /* U+712C */
+      '?', /* U+712D */
+      '?', /* U+712E */
+      '?', /* U+712F */
+      '?', /* U+7130 */
+      '?', /* U+7131 */
+      '?', /* U+7132 */
+      '?', /* U+7133 */
+      '?', /* U+7134 */
+      '?', /* U+7135 */
+   0x9152, /* U+7136 */
+      '?', /* U+7137 */
+      '?', /* U+7138 */
+      '?', /* U+7139 */
+      '?', /* U+713A */
+      '?', /* U+713B */
+   0x8fc4, /* U+713C */
+      '?', /* U+713D */
+      '?', /* U+713E */
+      '?', /* U+713F */
+      '?', /* U+7140 */
+      '?', /* U+7141 */
+      '?', /* U+7142 */
+      '?', /* U+7143 */
+      '?', /* U+7144 */
+      '?', /* U+7145 */
+   0xfb56, /* U+7146 */
+   0xfb57, /* U+7147 */
+      '?', /* U+7148 */
+   0x97f9, /* U+7149 */
+      '?', /* U+714A */
+      '?', /* U+714B */
+   0xe08a, /* U+714C */
+      '?', /* U+714D */
+   0x90f7, /* U+714E */
+      '?', /* U+714F */
+      '?', /* U+7150 */
+      '?', /* U+7151 */
+      '?', /* U+7152 */
+      '?', /* U+7153 */
+      '?', /* U+7154 */
+   0xe086, /* U+7155 */
+   0xe08b, /* U+7156 */
+      '?', /* U+7157 */
+      '?', /* U+7158 */
+   0x898c, /* U+7159 */
+      '?', /* U+715A */
+      '?', /* U+715B */
+   0xfb55, /* U+715C */
+      '?', /* U+715D */
+      '?', /* U+715E */
+      '?', /* U+715F */
+      '?', /* U+7160 */
+      '?', /* U+7161 */
+   0xe089, /* U+7162 */
+      '?', /* U+7163 */
+   0x9481, /* U+7164 */
+   0xe085, /* U+7165 */
+   0xe088, /* U+7166 */
+   0x8fc6, /* U+7167 */
+      '?', /* U+7168 */
+   0x94cf, /* U+7169 */
+      '?', /* U+716A */
+      '?', /* U+716B */
+   0xe08c, /* U+716C */
+      '?', /* U+716D */
+   0x8ecf, /* U+716E */
+      '?', /* U+716F */
+      '?', /* U+7170 */
+      '?', /* U+7171 */
+      '?', /* U+7172 */
+      '?', /* U+7173 */
+      '?', /* U+7174 */
+      '?', /* U+7175 */
+      '?', /* U+7176 */
+      '?', /* U+7177 */
+      '?', /* U+7178 */
+      '?', /* U+7179 */
+      '?', /* U+717A */
+      '?', /* U+717B */
+      '?', /* U+717C */
+   0x90f8, /* U+717D */
+      '?', /* U+717E */
+      '?', /* U+717F */
+      '?', /* U+7180 */
+      '?', /* U+7181 */
+      '?', /* U+7182 */
+      '?', /* U+7183 */
+   0xe08f, /* U+7184 */
+      '?', /* U+7185 */
+      '?', /* U+7186 */
+      '?', /* U+7187 */
+   0xe087, /* U+7188 */
+      '?', /* U+7189 */
+   0x8c46, /* U+718A */
+      '?', /* U+718B */
+      '?', /* U+718C */
+      '?', /* U+718D */
+      '?', /* U+718E */
+   0xe08d, /* U+718F */
+      '?', /* U+7190 */
+      '?', /* U+7191 */
+      '?', /* U+7192 */
+      '?', /* U+7193 */
+   0x976f, /* U+7194 */
+   0xe090, /* U+7195 */
+      '?', /* U+7196 */
+      '?', /* U+7197 */
+      '?', /* U+7198 */
+   0xeaa4, /* U+7199 */
+      '?', /* U+719A */
+      '?', /* U+719B */
+      '?', /* U+719C */
+      '?', /* U+719D */
+      '?', /* U+719E */
+   0x8f6e, /* U+719F */
+      '?', /* U+71A0 */
+      '?', /* U+71A1 */
+      '?', /* U+71A2 */
+      '?', /* U+71A3 */
+      '?', /* U+71A4 */
+      '?', /* U+71A5 */
+      '?', /* U+71A6 */
+      '?', /* U+71A7 */
+   0xe091, /* U+71A8 */
+      '?', /* U+71A9 */
+      '?', /* U+71AA */
+      '?', /* U+71AB */
+   0xe092, /* U+71AC */
+      '?', /* U+71AD */
+      '?', /* U+71AE */
+      '?', /* U+71AF */
+      '?', /* U+71B0 */
+   0x944d, /* U+71B1 */
+      '?', /* U+71B2 */
+      '?', /* U+71B3 */
+      '?', /* U+71B4 */
+      '?', /* U+71B5 */
+      '?', /* U+71B6 */
+      '?', /* U+71B7 */
+      '?', /* U+71B8 */
+   0xe094, /* U+71B9 */
+      '?', /* U+71BA */
+      '?', /* U+71BB */
+      '?', /* U+71BC */
+      '?', /* U+71BD */
+   0xe095, /* U+71BE */
+      '?', /* U+71BF */
+      '?', /* U+71C0 */
+   0xfb59, /* U+71C1 */
+      '?', /* U+71C2 */
+   0x9452, /* U+71C3 */
+      '?', /* U+71C4 */
+      '?', /* U+71C5 */
+      '?', /* U+71C6 */
+      '?', /* U+71C7 */
+   0x9395, /* U+71C8 */
+   0xe097, /* U+71C9 */
+      '?', /* U+71CA */
+      '?', /* U+71CB */
+      '?', /* U+71CC */
+      '?', /* U+71CD */
+   0xe099, /* U+71CE */
+      '?', /* U+71CF */
+   0x97d3, /* U+71D0 */
+      '?', /* U+71D1 */
+   0xe096, /* U+71D2 */
+      '?', /* U+71D3 */
+   0xe098, /* U+71D4 */
+   0x898d, /* U+71D5 */
+      '?', /* U+71D6 */
+   0xe093, /* U+71D7 */
+      '?', /* U+71D8 */
+      '?', /* U+71D9 */
+      '?', /* U+71DA */
+      '?', /* U+71DB */
+      '?', /* U+71DC */
+      '?', /* U+71DD */
+      '?', /* U+71DE */
+   0x9a7a, /* U+71DF */
+   0xe09a, /* U+71E0 */
+      '?', /* U+71E1 */
+      '?', /* U+71E2 */
+      '?', /* U+71E3 */
+      '?', /* U+71E4 */
+   0x9187, /* U+71E5 */
+   0x8e57, /* U+71E6 */
+   0xe09c, /* U+71E7 */
+      '?', /* U+71E8 */
+      '?', /* U+71E9 */
+      '?', /* U+71EA */
+      '?', /* U+71EB */
+   0xe09b, /* U+71EC */
+   0x9043, /* U+71ED */
+   0x99d7, /* U+71EE */
+      '?', /* U+71EF */
+      '?', /* U+71F0 */
+      '?', /* U+71F1 */
+      '?', /* U+71F2 */
+      '?', /* U+71F3 */
+      '?', /* U+71F4 */
+   0xe09d, /* U+71F5 */
+      '?', /* U+71F6 */
+      '?', /* U+71F7 */
+      '?', /* U+71F8 */
+   0xe09f, /* U+71F9 */
+      '?', /* U+71FA */
+   0xe08e, /* U+71FB */
+   0xe09e, /* U+71FC */
+      '?', /* U+71FD */
+   0xfb5a, /* U+71FE */
+   0xe0a0, /* U+71FF */
+      '?', /* U+7200 */
+      '?', /* U+7201 */
+      '?', /* U+7202 */
+      '?', /* U+7203 */
+      '?', /* U+7204 */
+      '?', /* U+7205 */
+   0x949a, /* U+7206 */
+      '?', /* U+7207 */
+      '?', /* U+7208 */
+      '?', /* U+7209 */
+      '?', /* U+720A */
+      '?', /* U+720B */
+      '?', /* U+720C */
+   0xe0a1, /* U+720D */
+      '?', /* U+720E */
+      '?', /* U+720F */
+   0xe0a2, /* U+7210 */
+      '?', /* U+7211 */
+      '?', /* U+7212 */
+      '?', /* U+7213 */
+      '?', /* U+7214 */
+      '?', /* U+7215 */
+      '?', /* U+7216 */
+      '?', /* U+7217 */
+      '?', /* U+7218 */
+      '?', /* U+7219 */
+      '?', /* U+721A */
+   0xe0a3, /* U+721B */
+      '?', /* U+721C */
+      '?', /* U+721D */
+      '?', /* U+721E */
+      '?', /* U+721F */
+      '?', /* U+7220 */
+      '?', /* U+7221 */
+      '?', /* U+7222 */
+      '?', /* U+7223 */
+      '?', /* U+7224 */
+      '?', /* U+7225 */
+      '?', /* U+7226 */
+      '?', /* U+7227 */
+   0xe0a4, /* U+7228 */
+      '?', /* U+7229 */
+   0x92dc, /* U+722A */
+      '?', /* U+722B */
+   0xe0a6, /* U+722C */
+   0xe0a5, /* U+722D */
+      '?', /* U+722E */
+      '?', /* U+722F */
+   0xe0a7, /* U+7230 */
+      '?', /* U+7231 */
+   0xe0a8, /* U+7232 */
+      '?', /* U+7233 */
+      '?', /* U+7234 */
+   0x8edd, /* U+7235 */
+   0x9583, /* U+7236 */
+      '?', /* U+7237 */
+      '?', /* U+7238 */
+      '?', /* U+7239 */
+   0x96ea, /* U+723A */
+   0xe0a9, /* U+723B */
+   0xe0aa, /* U+723C */
+   0x9175, /* U+723D */
+   0x8ea2, /* U+723E */
+   0xe0ab, /* U+723F */
+   0xe0ac, /* U+7240 */
+      '?', /* U+7241 */
+      '?', /* U+7242 */
+      '?', /* U+7243 */
+      '?', /* U+7244 */
+      '?', /* U+7245 */
+   0xe0ad, /* U+7246 */
+   0x95d0, /* U+7247 */
+   0x94c5, /* U+7248 */
+      '?', /* U+7249 */
+      '?', /* U+724A */
+   0xe0ae, /* U+724B */
+   0x9476, /* U+724C */
+      '?', /* U+724D */
+      '?', /* U+724E */
+      '?', /* U+724F */
+      '?', /* U+7250 */
+      '?', /* U+7251 */
+   0x92ab, /* U+7252 */
+      '?', /* U+7253 */
+      '?', /* U+7254 */
+      '?', /* U+7255 */
+      '?', /* U+7256 */
+      '?', /* U+7257 */
+   0xe0af, /* U+7258 */
+   0x89e5, /* U+7259 */
+      '?', /* U+725A */
+   0x8b8d, /* U+725B */
+      '?', /* U+725C */
+   0x96c4, /* U+725D */
+      '?', /* U+725E */
+   0x96b4, /* U+725F */
+      '?', /* U+7260 */
+   0x89b2, /* U+7261 */
+   0x9853, /* U+7262 */
+      '?', /* U+7263 */
+      '?', /* U+7264 */
+      '?', /* U+7265 */
+      '?', /* U+7266 */
+   0x9671, /* U+7267 */
+      '?', /* U+7268 */
+   0x95a8, /* U+7269 */
+      '?', /* U+726A */
+      '?', /* U+726B */
+      '?', /* U+726C */
+      '?', /* U+726D */
+      '?', /* U+726E */
+      '?', /* U+726F */
+      '?', /* U+7270 */
+      '?', /* U+7271 */
+   0x90b5, /* U+7272 */
+      '?', /* U+7273 */
+   0xe0b0, /* U+7274 */
+      '?', /* U+7275 */
+      '?', /* U+7276 */
+      '?', /* U+7277 */
+      '?', /* U+7278 */
+   0x93c1, /* U+7279 */
+      '?', /* U+727A */
+      '?', /* U+727B */
+      '?', /* U+727C */
+   0x8ca1, /* U+727D */
+   0xe0b1, /* U+727E */
+      '?', /* U+727F */
+   0x8dd2, /* U+7280 */
+   0xe0b3, /* U+7281 */
+   0xe0b2, /* U+7282 */
+      '?', /* U+7283 */
+      '?', /* U+7284 */
+      '?', /* U+7285 */
+      '?', /* U+7286 */
+   0xe0b4, /* U+7287 */
+      '?', /* U+7288 */
+      '?', /* U+7289 */
+      '?', /* U+728A */
+      '?', /* U+728B */
+      '?', /* U+728C */
+      '?', /* U+728D */
+      '?', /* U+728E */
+      '?', /* U+728F */
+      '?', /* U+7290 */
+      '?', /* U+7291 */
+   0xe0b5, /* U+7292 */
+      '?', /* U+7293 */
+      '?', /* U+7294 */
+      '?', /* U+7295 */
+   0xe0b6, /* U+7296 */
+      '?', /* U+7297 */
+      '?', /* U+7298 */
+      '?', /* U+7299 */
+      '?', /* U+729A */
+      '?', /* U+729B */
+      '?', /* U+729C */
+      '?', /* U+729D */
+      '?', /* U+729E */
+      '?', /* U+729F */
+   0x8b5d, /* U+72A0 */
+      '?', /* U+72A1 */
+   0xe0b7, /* U+72A2 */
+      '?', /* U+72A3 */
+      '?', /* U+72A4 */
+      '?', /* U+72A5 */
+      '?', /* U+72A6 */
+   0xe0b8, /* U+72A7 */
+      '?', /* U+72A8 */
+      '?', /* U+72A9 */
+      '?', /* U+72AA */
+      '?', /* U+72AB */
+   0x8ca2, /* U+72AC */
+      '?', /* U+72AD */
+      '?', /* U+72AE */
+   0x94c6, /* U+72AF */
+      '?', /* U+72B0 */
+   0xfb5b, /* U+72B1 */
+   0xe0ba, /* U+72B2 */
+      '?', /* U+72B3 */
+      '?', /* U+72B4 */
+      '?', /* U+72B5 */
+   0x8ff3, /* U+72B6 */
+      '?', /* U+72B7 */
+      '?', /* U+72B8 */
+   0xe0b9, /* U+72B9 */
+      '?', /* U+72BA */
+      '?', /* U+72BB */
+      '?', /* U+72BC */
+      '?', /* U+72BD */
+   0xfb5c, /* U+72BE */
+      '?', /* U+72BF */
+      '?', /* U+72C0 */
+      '?', /* U+72C1 */
+   0x8bb6, /* U+72C2 */
+   0xe0bb, /* U+72C3 */
+   0xe0bd, /* U+72C4 */
+      '?', /* U+72C5 */
+   0xe0bc, /* U+72C6 */
+      '?', /* U+72C7 */
+      '?', /* U+72C8 */
+      '?', /* U+72C9 */
+      '?', /* U+72CA */
+      '?', /* U+72CB */
+      '?', /* U+72CC */
+      '?', /* U+72CD */
+   0xe0be, /* U+72CE */
+      '?', /* U+72CF */
+   0x8ccf, /* U+72D0 */
+      '?', /* U+72D1 */
+   0xe0bf, /* U+72D2 */
+      '?', /* U+72D3 */
+      '?', /* U+72D4 */
+      '?', /* U+72D5 */
+      '?', /* U+72D6 */
+   0x8be7, /* U+72D7 */
+      '?', /* U+72D8 */
+   0x915f, /* U+72D9 */
+      '?', /* U+72DA */
+   0x8d9d, /* U+72DB */
+      '?', /* U+72DC */
+      '?', /* U+72DD */
+      '?', /* U+72DE */
+      '?', /* U+72DF */
+   0xe0c1, /* U+72E0 */
+   0xe0c2, /* U+72E1 */
+   0xe0c0, /* U+72E2 */
+      '?', /* U+72E3 */
+      '?', /* U+72E4 */
+      '?', /* U+72E5 */
+      '?', /* U+72E6 */
+      '?', /* U+72E7 */
+      '?', /* U+72E8 */
+   0x8eeb, /* U+72E9 */
+      '?', /* U+72EA */
+      '?', /* U+72EB */
+   0x93c6, /* U+72EC */
+   0x8bb7, /* U+72ED */
+      '?', /* U+72EE */
+      '?', /* U+72EF */
+      '?', /* U+72F0 */
+      '?', /* U+72F1 */
+      '?', /* U+72F2 */
+      '?', /* U+72F3 */
+      '?', /* U+72F4 */
+      '?', /* U+72F5 */
+      '?', /* U+72F6 */
+   0xe0c4, /* U+72F7 */
+   0x924b, /* U+72F8 */
+   0xe0c3, /* U+72F9 */
+      '?', /* U+72FA */
+      '?', /* U+72FB */
+   0x9854, /* U+72FC */
+   0x9482, /* U+72FD */
+      '?', /* U+72FE */
+      '?', /* U+72FF */
+      '?', /* U+7300 */
+      '?', /* U+7301 */
+      '?', /* U+7302 */
+      '?', /* U+7303 */
+      '?', /* U+7304 */
+      '?', /* U+7305 */
+      '?', /* U+7306 */
+      '?', /* U+7307 */
+      '?', /* U+7308 */
+      '?', /* U+7309 */
+   0xe0c7, /* U+730A */
+      '?', /* U+730B */
+      '?', /* U+730C */
+      '?', /* U+730D */
+      '?', /* U+730E */
+      '?', /* U+730F */
+      '?', /* U+7310 */
+      '?', /* U+7311 */
+      '?', /* U+7312 */
+      '?', /* U+7313 */
+      '?', /* U+7314 */
+      '?', /* U+7315 */
+   0xe0c9, /* U+7316 */
+   0xe0c6, /* U+7317 */
+      '?', /* U+7318 */
+      '?', /* U+7319 */
+      '?', /* U+731A */
+   0x96d2, /* U+731B */
+   0xe0c8, /* U+731C */
+   0xe0ca, /* U+731D */
+      '?', /* U+731E */
+   0x97c2, /* U+731F */
+      '?', /* U+7320 */
+      '?', /* U+7321 */
+      '?', /* U+7322 */
+      '?', /* U+7323 */
+   0xfb5d, /* U+7324 */
+   0xe0ce, /* U+7325 */
+      '?', /* U+7326 */
+      '?', /* U+7327 */
+      '?', /* U+7328 */
+   0xe0cd, /* U+7329 */
+   0x9296, /* U+732A */
+   0x944c, /* U+732B */
+      '?', /* U+732C */
+      '?', /* U+732D */
+   0x8ca3, /* U+732E */
+   0xe0cc, /* U+732F */
+      '?', /* U+7330 */
+      '?', /* U+7331 */
+      '?', /* U+7332 */
+      '?', /* U+7333 */
+   0xe0cb, /* U+7334 */
+      '?', /* U+7335 */
+   0x9750, /* U+7336 */
+   0x9751, /* U+7337 */
+      '?', /* U+7338 */
+      '?', /* U+7339 */
+      '?', /* U+733A */
+      '?', /* U+733B */
+      '?', /* U+733C */
+      '?', /* U+733D */
+   0xe0cf, /* U+733E */
+   0x898e, /* U+733F */
+      '?', /* U+7340 */
+      '?', /* U+7341 */
+      '?', /* U+7342 */
+      '?', /* U+7343 */
+   0x8d96, /* U+7344 */
+   0x8e82, /* U+7345 */
+      '?', /* U+7346 */
+      '?', /* U+7347 */
+      '?', /* U+7348 */
+      '?', /* U+7349 */
+      '?', /* U+734A */
+      '?', /* U+734B */
+      '?', /* U+734C */
+      '?', /* U+734D */
+   0xe0d0, /* U+734E */
+   0xe0d1, /* U+734F */
+      '?', /* U+7350 */
+      '?', /* U+7351 */
+      '?', /* U+7352 */
+      '?', /* U+7353 */
+      '?', /* U+7354 */
+      '?', /* U+7355 */
+      '?', /* U+7356 */
+   0xe0d3, /* U+7357 */
+      '?', /* U+7358 */
+      '?', /* U+7359 */
+      '?', /* U+735A */
+      '?', /* U+735B */
+      '?', /* U+735C */
+      '?', /* U+735D */
+      '?', /* U+735E */
+      '?', /* U+735F */
+      '?', /* U+7360 */
+      '?', /* U+7361 */
+      '?', /* U+7362 */
+   0x8f62, /* U+7363 */
+      '?', /* U+7364 */
+      '?', /* U+7365 */
+      '?', /* U+7366 */
+      '?', /* U+7367 */
+   0xe0d5, /* U+7368 */
+      '?', /* U+7369 */
+   0xe0d4, /* U+736A */
+      '?', /* U+736B */
+      '?', /* U+736C */
+      '?', /* U+736D */
+      '?', /* U+736E */
+      '?', /* U+736F */
+   0xe0d6, /* U+7370 */
+      '?', /* U+7371 */
+   0x8a6c, /* U+7372 */
+      '?', /* U+7373 */
+      '?', /* U+7374 */
+   0xe0d8, /* U+7375 */
+      '?', /* U+7376 */
+   0xfb5f, /* U+7377 */
+   0xe0d7, /* U+7378 */
+      '?', /* U+7379 */
+   0xe0da, /* U+737A */
+   0xe0d9, /* U+737B */
+      '?', /* U+737C */
+      '?', /* U+737D */
+      '?', /* U+737E */
+      '?', /* U+737F */
+      '?', /* U+7380 */
+      '?', /* U+7381 */
+      '?', /* U+7382 */
+      '?', /* U+7383 */
+   0x8cba, /* U+7384 */
+      '?', /* U+7385 */
+      '?', /* U+7386 */
+   0x97a6, /* U+7387 */
+      '?', /* U+7388 */
+   0x8bca, /* U+7389 */
+      '?', /* U+738A */
+   0x89a4, /* U+738B */
+      '?', /* U+738C */
+      '?', /* U+738D */
+      '?', /* U+738E */
+      '?', /* U+738F */
+      '?', /* U+7390 */
+      '?', /* U+7391 */
+      '?', /* U+7392 */
+      '?', /* U+7393 */
+      '?', /* U+7394 */
+      '?', /* U+7395 */
+   0x8be8, /* U+7396 */
+      '?', /* U+7397 */
+      '?', /* U+7398 */
+      '?', /* U+7399 */
+      '?', /* U+739A */
+      '?', /* U+739B */
+      '?', /* U+739C */
+      '?', /* U+739D */
+      '?', /* U+739E */
+      '?', /* U+739F */
+      '?', /* U+73A0 */
+      '?', /* U+73A1 */
+      '?', /* U+73A2 */
+      '?', /* U+73A3 */
+      '?', /* U+73A4 */
+      '?', /* U+73A5 */
+      '?', /* U+73A6 */
+      '?', /* U+73A7 */
+      '?', /* U+73A8 */
+   0x8adf, /* U+73A9 */
+      '?', /* U+73AA */
+      '?', /* U+73AB */
+      '?', /* U+73AC */
+      '?', /* U+73AD */
+      '?', /* U+73AE */
+      '?', /* U+73AF */
+      '?', /* U+73B0 */
+      '?', /* U+73B1 */
+   0x97e6, /* U+73B2 */
+   0xe0dc, /* U+73B3 */
+      '?', /* U+73B4 */
+      '?', /* U+73B5 */
+      '?', /* U+73B6 */
+      '?', /* U+73B7 */
+      '?', /* U+73B8 */
+      '?', /* U+73B9 */
+      '?', /* U+73BA */
+   0xe0de, /* U+73BB */
+      '?', /* U+73BC */
+   0xfb60, /* U+73BD */
+      '?', /* U+73BE */
+      '?', /* U+73BF */
+   0xe0df, /* U+73C0 */
+      '?', /* U+73C1 */
+   0x89cf, /* U+73C2 */
+      '?', /* U+73C3 */
+      '?', /* U+73C4 */
+      '?', /* U+73C5 */
+      '?', /* U+73C6 */
+      '?', /* U+73C7 */
+   0xe0db, /* U+73C8 */
+   0xfb61, /* U+73C9 */
+   0x8e58, /* U+73CA */
+      '?', /* U+73CB */
+      '?', /* U+73CC */
+   0x92bf, /* U+73CD */
+   0xe0dd, /* U+73CE */
+      '?', /* U+73CF */
+      '?', /* U+73D0 */
+      '?', /* U+73D1 */
+   0xfb64, /* U+73D2 */
+      '?', /* U+73D3 */
+      '?', /* U+73D4 */
+      '?', /* U+73D5 */
+   0xfb62, /* U+73D6 */
+      '?', /* U+73D7 */
+      '?', /* U+73D8 */
+      '?', /* U+73D9 */
+      '?', /* U+73DA */
+      '?', /* U+73DB */
+      '?', /* U+73DC */
+      '?', /* U+73DD */
+   0xe0e2, /* U+73DE */
+      '?', /* U+73DF */
+   0x8eec, /* U+73E0 */
+      '?', /* U+73E1 */
+      '?', /* U+73E2 */
+   0xfb63, /* U+73E3 */
+      '?', /* U+73E4 */
+   0xe0e0, /* U+73E5 */
+      '?', /* U+73E6 */
+      '?', /* U+73E7 */
+      '?', /* U+73E8 */
+      '?', /* U+73E9 */
+   0x8c5d, /* U+73EA */
+      '?', /* U+73EB */
+      '?', /* U+73EC */
+   0x94c7, /* U+73ED */
+   0xe0e1, /* U+73EE */
+      '?', /* U+73EF */
+      '?', /* U+73F0 */
+   0xe0fc, /* U+73F1 */
+      '?', /* U+73F2 */
+      '?', /* U+73F3 */
+      '?', /* U+73F4 */
+   0xfb66, /* U+73F5 */
+      '?', /* U+73F6 */
+      '?', /* U+73F7 */
+   0xe0e7, /* U+73F8 */
+      '?', /* U+73F9 */
+      '?', /* U+73FA */
+      '?', /* U+73FB */
+      '?', /* U+73FC */
+      '?', /* U+73FD */
+   0x8cbb, /* U+73FE */
+      '?', /* U+73FF */
+      '?', /* U+7400 */
+      '?', /* U+7401 */
+      '?', /* U+7402 */
+   0x8b85, /* U+7403 */
+      '?', /* U+7404 */
+   0xe0e4, /* U+7405 */
+   0x979d, /* U+7406 */
+   0xfb65, /* U+7407 */
+      '?', /* U+7408 */
+   0x97ae, /* U+7409 */
+      '?', /* U+740A */
+      '?', /* U+740B */
+      '?', /* U+740C */
+      '?', /* U+740D */
+      '?', /* U+740E */
+      '?', /* U+740F */
+      '?', /* U+7410 */
+      '?', /* U+7411 */
+      '?', /* U+7412 */
+      '?', /* U+7413 */
+      '?', /* U+7414 */
+      '?', /* U+7415 */
+      '?', /* U+7416 */
+      '?', /* U+7417 */
+      '?', /* U+7418 */
+      '?', /* U+7419 */
+      '?', /* U+741A */
+      '?', /* U+741B */
+      '?', /* U+741C */
+      '?', /* U+741D */
+      '?', /* U+741E */
+      '?', /* U+741F */
+      '?', /* U+7420 */
+      '?', /* U+7421 */
+   0x91f4, /* U+7422 */
+      '?', /* U+7423 */
+      '?', /* U+7424 */
+   0xe0e6, /* U+7425 */
+   0xfb67, /* U+7426 */
+      '?', /* U+7427 */
+      '?', /* U+7428 */
+   0xfb69, /* U+7429 */
+   0xfb68, /* U+742A */
+      '?', /* U+742B */
+      '?', /* U+742C */
+      '?', /* U+742D */
+   0xfb6a, /* U+742E */
+      '?', /* U+742F */
+      '?', /* U+7430 */
+      '?', /* U+7431 */
+   0xe0e8, /* U+7432 */
+   0x97d4, /* U+7433 */
+   0x8bd5, /* U+7434 */
+   0x94fa, /* U+7435 */
+   0x9469, /* U+7436 */
+      '?', /* U+7437 */
+      '?', /* U+7438 */
+      '?', /* U+7439 */
+   0xe0e9, /* U+743A */
+      '?', /* U+743B */
+      '?', /* U+743C */
+      '?', /* U+743D */
+      '?', /* U+743E */
+   0xe0eb, /* U+743F */
+      '?', /* U+7440 */
+   0xe0ee, /* U+7441 */
+      '?', /* U+7442 */
+      '?', /* U+7443 */
+      '?', /* U+7444 */
+      '?', /* U+7445 */
+      '?', /* U+7446 */
+      '?', /* U+7447 */
+      '?', /* U+7448 */
+      '?', /* U+7449 */
+      '?', /* U+744A */
+      '?', /* U+744B */
+      '?', /* U+744C */
+      '?', /* U+744D */
+      '?', /* U+744E */
+      '?', /* U+744F */
+      '?', /* U+7450 */
+      '?', /* U+7451 */
+      '?', /* U+7452 */
+      '?', /* U+7453 */
+      '?', /* U+7454 */
+   0xe0ea, /* U+7455 */
+      '?', /* U+7456 */
+      '?', /* U+7457 */
+      '?', /* U+7458 */
+   0xe0ed, /* U+7459 */
+   0x8ce8, /* U+745A */
+   0x896c, /* U+745B */
+   0xe0ef, /* U+745C */
+      '?', /* U+745D */
+   0x9090, /* U+745E */
+   0xe0ec, /* U+745F */
+   0x97da, /* U+7460 */
+      '?', /* U+7461 */
+   0xfb6b, /* U+7462 */
+   0xe0f2, /* U+7463 */
+   0xeaa2, /* U+7464 */
+      '?', /* U+7465 */
+      '?', /* U+7466 */
+      '?', /* U+7467 */
+      '?', /* U+7468 */
+   0xe0f0, /* U+7469 */
+   0xe0f3, /* U+746A */
+      '?', /* U+746B */
+      '?', /* U+746C */
+      '?', /* U+746D */
+      '?', /* U+746E */
+   0xe0e5, /* U+746F */
+   0xe0f1, /* U+7470 */
+      '?', /* U+7471 */
+      '?', /* U+7472 */
+   0x8dba, /* U+7473 */
+      '?', /* U+7474 */
+      '?', /* U+7475 */
+   0xe0f4, /* U+7476 */
+      '?', /* U+7477 */
+      '?', /* U+7478 */
+      '?', /* U+7479 */
+      '?', /* U+747A */
+      '?', /* U+747B */
+      '?', /* U+747C */
+      '?', /* U+747D */
+   0xe0f5, /* U+747E */
+      '?', /* U+747F */
+      '?', /* U+7480 */
+      '?', /* U+7481 */
+      '?', /* U+7482 */
+   0x979e, /* U+7483 */
+      '?', /* U+7484 */
+      '?', /* U+7485 */
+      '?', /* U+7486 */
+      '?', /* U+7487 */
+      '?', /* U+7488 */
+   0xfb6c, /* U+7489 */
+      '?', /* U+748A */
+   0xe0f6, /* U+748B */
+      '?', /* U+748C */
+      '?', /* U+748D */
+      '?', /* U+748E */
+      '?', /* U+748F */
+      '?', /* U+7490 */
+      '?', /* U+7491 */
+      '?', /* U+7492 */
+      '?', /* U+7493 */
+      '?', /* U+7494 */
+      '?', /* U+7495 */
+      '?', /* U+7496 */
+      '?', /* U+7497 */
+      '?', /* U+7498 */
+      '?', /* U+7499 */
+      '?', /* U+749A */
+      '?', /* U+749B */
+      '?', /* U+749C */
+      '?', /* U+749D */
+   0xe0f7, /* U+749E */
+   0xfb6d, /* U+749F */
+      '?', /* U+74A0 */
+      '?', /* U+74A1 */
+   0xe0e3, /* U+74A2 */
+      '?', /* U+74A3 */
+      '?', /* U+74A4 */
+      '?', /* U+74A5 */
+      '?', /* U+74A6 */
+   0xe0f8, /* U+74A7 */
+      '?', /* U+74A8 */
+      '?', /* U+74A9 */
+      '?', /* U+74AA */
+      '?', /* U+74AB */
+      '?', /* U+74AC */
+      '?', /* U+74AD */
+      '?', /* U+74AE */
+      '?', /* U+74AF */
+   0x8ac2, /* U+74B0 */
+      '?', /* U+74B1 */
+      '?', /* U+74B2 */
+      '?', /* U+74B3 */
+      '?', /* U+74B4 */
+      '?', /* U+74B5 */
+      '?', /* U+74B6 */
+      '?', /* U+74B7 */
+      '?', /* U+74B8 */
+      '?', /* U+74B9 */
+      '?', /* U+74BA */
+      '?', /* U+74BB */
+      '?', /* U+74BC */
+   0x8ea3, /* U+74BD */
+      '?', /* U+74BE */
+      '?', /* U+74BF */
+      '?', /* U+74C0 */
+      '?', /* U+74C1 */
+      '?', /* U+74C2 */
+      '?', /* U+74C3 */
+      '?', /* U+74C4 */
+      '?', /* U+74C5 */
+      '?', /* U+74C6 */
+      '?', /* U+74C7 */
+      '?', /* U+74C8 */
+      '?', /* U+74C9 */
+   0xe0f9, /* U+74CA */
+      '?', /* U+74CB */
+      '?', /* U+74CC */
+      '?', /* U+74CD */
+      '?', /* U+74CE */
+   0xe0fa, /* U+74CF */
+      '?', /* U+74D0 */
+      '?', /* U+74D1 */
+      '?', /* U+74D2 */
+      '?', /* U+74D3 */
+   0xe0fb, /* U+74D4 */
+      '?', /* U+74D5 */
+      '?', /* U+74D6 */
+      '?', /* U+74D7 */
+      '?', /* U+74D8 */
+      '?', /* U+74D9 */
+      '?', /* U+74DA */
+      '?', /* U+74DB */
+   0x895a, /* U+74DC */
+      '?', /* U+74DD */
+      '?', /* U+74DE */
+      '?', /* U+74DF */
+   0xe140, /* U+74E0 */
+      '?', /* U+74E1 */
+   0x955a, /* U+74E2 */
+   0xe141, /* U+74E3 */
+      '?', /* U+74E4 */
+      '?', /* U+74E5 */
+   0x8aa2, /* U+74E6 */
+   0xe142, /* U+74E7 */
+      '?', /* U+74E8 */
+   0xe143, /* U+74E9 */
+      '?', /* U+74EA */
+      '?', /* U+74EB */
+      '?', /* U+74EC */
+      '?', /* U+74ED */
+   0xe144, /* U+74EE */
+      '?', /* U+74EF */
+   0xe146, /* U+74F0 */
+   0xe147, /* U+74F1 */
+   0xe145, /* U+74F2 */
+      '?', /* U+74F3 */
+      '?', /* U+74F4 */
+      '?', /* U+74F5 */
+   0x9572, /* U+74F6 */
+   0xe149, /* U+74F7 */
+   0xe148, /* U+74F8 */
+      '?', /* U+74F9 */
+      '?', /* U+74FA */
+      '?', /* U+74FB */
+      '?', /* U+74FC */
+      '?', /* U+74FD */
+      '?', /* U+74FE */
+      '?', /* U+74FF */
+      '?', /* U+7500 */
+   0xfb6e, /* U+7501 */
+      '?', /* U+7502 */
+   0xe14b, /* U+7503 */
+   0xe14a, /* U+7504 */
+   0xe14c, /* U+7505 */
+      '?', /* U+7506 */
+      '?', /* U+7507 */
+      '?', /* U+7508 */
+      '?', /* U+7509 */
+      '?', /* U+750A */
+      '?', /* U+750B */
+   0xe14d, /* U+750C */
+   0xe14f, /* U+750D */
+   0xe14e, /* U+750E */
+      '?', /* U+750F */
+      '?', /* U+7510 */
+   0x8d99, /* U+7511 */
+      '?', /* U+7512 */
+   0xe151, /* U+7513 */
+      '?', /* U+7514 */
+   0xe150, /* U+7515 */
+      '?', /* U+7516 */
+      '?', /* U+7517 */
+   0x8ac3, /* U+7518 */
+      '?', /* U+7519 */
+   0x9072, /* U+751A */
+      '?', /* U+751B */
+   0x935b, /* U+751C */
+      '?', /* U+751D */
+   0xe152, /* U+751E */
+   0x90b6, /* U+751F */
+      '?', /* U+7520 */
+      '?', /* U+7521 */
+      '?', /* U+7522 */
+   0x8e59, /* U+7523 */
+      '?', /* U+7524 */
+   0x8999, /* U+7525 */
+   0xe153, /* U+7526 */
+      '?', /* U+7527 */
+   0x9770, /* U+7528 */
+      '?', /* U+7529 */
+      '?', /* U+752A */
+   0x95e1, /* U+752B */
+   0xe154, /* U+752C */
+      '?', /* U+752D */
+      '?', /* U+752E */
+   0xfaa8, /* U+752F */
+   0x9363, /* U+7530 */
+   0x9752, /* U+7531 */
+   0x8d62, /* U+7532 */
+   0x905c, /* U+7533 */
+      '?', /* U+7534 */
+      '?', /* U+7535 */
+      '?', /* U+7536 */
+   0x926a, /* U+7537 */
+   0x99b2, /* U+7538 */
+      '?', /* U+7539 */
+   0x92ac, /* U+753A */
+   0x89e6, /* U+753B */
+   0xe155, /* U+753C */
+      '?', /* U+753D */
+      '?', /* U+753E */
+      '?', /* U+753F */
+      '?', /* U+7540 */
+      '?', /* U+7541 */
+      '?', /* U+7542 */
+      '?', /* U+7543 */
+   0xe156, /* U+7544 */
+      '?', /* U+7545 */
+   0xe15b, /* U+7546 */
+      '?', /* U+7547 */
+      '?', /* U+7548 */
+   0xe159, /* U+7549 */
+   0xe158, /* U+754A */
+   0x9dc0, /* U+754B */
+   0x8a45, /* U+754C */
+   0xe157, /* U+754D */
+      '?', /* U+754E */
+   0x88d8, /* U+754F */
+      '?', /* U+7550 */
+   0x94a8, /* U+7551 */
+      '?', /* U+7552 */
+      '?', /* U+7553 */
+   0x94c8, /* U+7554 */
+      '?', /* U+7555 */
+      '?', /* U+7556 */
+      '?', /* U+7557 */
+      '?', /* U+7558 */
+   0x97af, /* U+7559 */
+   0xe15c, /* U+755A */
+   0xe15a, /* U+755B */
+   0x927b, /* U+755C */
+   0x90a4, /* U+755D */
+      '?', /* U+755E */
+      '?', /* U+755F */
+   0x94a9, /* U+7560 */
+      '?', /* U+7561 */
+   0x954c, /* U+7562 */
+      '?', /* U+7563 */
+   0xe15e, /* U+7564 */
+   0x97aa, /* U+7565 */
+   0x8c6c, /* U+7566 */
+   0xe15f, /* U+7567 */
+      '?', /* U+7568 */
+   0xe15d, /* U+7569 */
+   0x94d4, /* U+756A */
+   0xe160, /* U+756B */
+      '?', /* U+756C */
+   0xe161, /* U+756D */
+      '?', /* U+756E */
+   0xfb6f, /* U+756F */
+   0x88d9, /* U+7570 */
+      '?', /* U+7571 */
+      '?', /* U+7572 */
+   0x8ff4, /* U+7573 */
+   0xe166, /* U+7574 */
+      '?', /* U+7575 */
+   0xe163, /* U+7576 */
+   0x93eb, /* U+7577 */
+   0xe162, /* U+7578 */
+      '?', /* U+7579 */
+      '?', /* U+757A */
+      '?', /* U+757B */
+      '?', /* U+757C */
+      '?', /* U+757D */
+      '?', /* U+757E */
+   0x8b45, /* U+757F */
+      '?', /* U+7580 */
+      '?', /* U+7581 */
+   0xe169, /* U+7582 */
+      '?', /* U+7583 */
+      '?', /* U+7584 */
+      '?', /* U+7585 */
+   0xe164, /* U+7586 */
+   0xe165, /* U+7587 */
+      '?', /* U+7588 */
+   0xe168, /* U+7589 */
+   0xe167, /* U+758A */
+   0x9544, /* U+758B */
+      '?', /* U+758C */
+      '?', /* U+758D */
+   0x9161, /* U+758E */
+   0x9160, /* U+758F */
+      '?', /* U+7590 */
+   0x8b5e, /* U+7591 */
+      '?', /* U+7592 */
+      '?', /* U+7593 */
+   0xe16a, /* U+7594 */
+      '?', /* U+7595 */
+      '?', /* U+7596 */
+      '?', /* U+7597 */
+      '?', /* U+7598 */
+      '?', /* U+7599 */
+   0xe16b, /* U+759A */
+      '?', /* U+759B */
+      '?', /* U+759C */
+   0xe16c, /* U+759D */
+      '?', /* U+759E */
+      '?', /* U+759F */
+      '?', /* U+75A0 */
+      '?', /* U+75A1 */
+      '?', /* U+75A2 */
+   0xe16e, /* U+75A3 */
+      '?', /* U+75A4 */
+   0xe16d, /* U+75A5 */
+      '?', /* U+75A6 */
+      '?', /* U+75A7 */
+      '?', /* U+75A8 */
+      '?', /* U+75A9 */
+      '?', /* U+75AA */
+   0x8975, /* U+75AB */
+      '?', /* U+75AC */
+      '?', /* U+75AD */
+      '?', /* U+75AE */
+      '?', /* U+75AF */
+      '?', /* U+75B0 */
+   0xe176, /* U+75B1 */
+   0x94e6, /* U+75B2 */
+   0xe170, /* U+75B3 */
+      '?', /* U+75B4 */
+   0xe172, /* U+75B5 */
+      '?', /* U+75B6 */
+      '?', /* U+75B7 */
+   0xe174, /* U+75B8 */
+   0x905d, /* U+75B9 */
+      '?', /* U+75BA */
+      '?', /* U+75BB */
+   0xe175, /* U+75BC */
+   0xe173, /* U+75BD */
+   0x8ebe, /* U+75BE */
+      '?', /* U+75BF */
+      '?', /* U+75C0 */
+      '?', /* U+75C1 */
+   0xe16f, /* U+75C2 */
+   0xe171, /* U+75C3 */
+      '?', /* U+75C4 */
+   0x9561, /* U+75C5 */
+      '?', /* U+75C6 */
+   0x8fc7, /* U+75C7 */
+      '?', /* U+75C8 */
+      '?', /* U+75C9 */
+   0xe178, /* U+75CA */
+      '?', /* U+75CB */
+      '?', /* U+75CC */
+   0xe177, /* U+75CD */
+      '?', /* U+75CE */
+      '?', /* U+75CF */
+      '?', /* U+75D0 */
+      '?', /* U+75D1 */
+   0xe179, /* U+75D2 */
+      '?', /* U+75D3 */
+   0x8ea4, /* U+75D4 */
+   0x8dad, /* U+75D5 */
+      '?', /* U+75D6 */
+      '?', /* U+75D7 */
+   0x9397, /* U+75D8 */
+   0xe17a, /* U+75D9 */
+      '?', /* U+75DA */
+   0x92c9, /* U+75DB */
+      '?', /* U+75DC */
+      '?', /* U+75DD */
+   0xe17c, /* U+75DE */
+      '?', /* U+75DF */
+      '?', /* U+75E0 */
+      '?', /* U+75E1 */
+   0x979f, /* U+75E2 */
+   0xe17b, /* U+75E3 */
+      '?', /* U+75E4 */
+      '?', /* U+75E5 */
+      '?', /* U+75E6 */
+      '?', /* U+75E7 */
+      '?', /* U+75E8 */
+   0x9189, /* U+75E9 */
+      '?', /* U+75EA */
+      '?', /* U+75EB */
+      '?', /* U+75EC */
+      '?', /* U+75ED */
+      '?', /* U+75EE */
+      '?', /* U+75EF */
+   0xe182, /* U+75F0 */
+      '?', /* U+75F1 */
+   0xe184, /* U+75F2 */
+   0xe185, /* U+75F3 */
+   0x9273, /* U+75F4 */
+      '?', /* U+75F5 */
+      '?', /* U+75F6 */
+      '?', /* U+75F7 */
+      '?', /* U+75F8 */
+      '?', /* U+75F9 */
+   0xe183, /* U+75FA */
+      '?', /* U+75FB */
+   0xe180, /* U+75FC */
+      '?', /* U+75FD */
+   0xe17d, /* U+75FE */
+   0xe17e, /* U+75FF */
+      '?', /* U+7600 */
+   0xe181, /* U+7601 */
+      '?', /* U+7602 */
+      '?', /* U+7603 */
+      '?', /* U+7604 */
+      '?', /* U+7605 */
+      '?', /* U+7606 */
+      '?', /* U+7607 */
+      '?', /* U+7608 */
+   0xe188, /* U+7609 */
+      '?', /* U+760A */
+   0xe186, /* U+760B */
+      '?', /* U+760C */
+   0xe187, /* U+760D */
+      '?', /* U+760E */
+      '?', /* U+760F */
+      '?', /* U+7610 */
+      '?', /* U+7611 */
+      '?', /* U+7612 */
+      '?', /* U+7613 */
+      '?', /* U+7614 */
+      '?', /* U+7615 */
+      '?', /* U+7616 */
+      '?', /* U+7617 */
+      '?', /* U+7618 */
+      '?', /* U+7619 */
+      '?', /* U+761A */
+      '?', /* U+761B */
+      '?', /* U+761C */
+      '?', /* U+761D */
+      '?', /* U+761E */
+   0xe189, /* U+761F */
+   0xe18b, /* U+7620 */
+   0xe18c, /* U+7621 */
+   0xe18d, /* U+7622 */
+      '?', /* U+7623 */
+   0xe18e, /* U+7624 */
+      '?', /* U+7625 */
+      '?', /* U+7626 */
+   0xe18a, /* U+7627 */
+      '?', /* U+7628 */
+      '?', /* U+7629 */
+      '?', /* U+762A */
+      '?', /* U+762B */
+      '?', /* U+762C */
+      '?', /* U+762D */
+      '?', /* U+762E */
+      '?', /* U+762F */
+   0xe190, /* U+7630 */
+      '?', /* U+7631 */
+      '?', /* U+7632 */
+      '?', /* U+7633 */
+   0xe18f, /* U+7634 */
+      '?', /* U+7635 */
+      '?', /* U+7636 */
+      '?', /* U+7637 */
+      '?', /* U+7638 */
+      '?', /* U+7639 */
+      '?', /* U+763A */
+   0xe191, /* U+763B */
+      '?', /* U+763C */
+      '?', /* U+763D */
+      '?', /* U+763E */
+      '?', /* U+763F */
+      '?', /* U+7640 */
+      '?', /* U+7641 */
+   0x97c3, /* U+7642 */
+      '?', /* U+7643 */
+      '?', /* U+7644 */
+      '?', /* U+7645 */
+   0xe194, /* U+7646 */
+   0xe192, /* U+7647 */
+   0xe193, /* U+7648 */
+      '?', /* U+7649 */
+      '?', /* U+764A */
+      '?', /* U+764B */
+   0x8ae0, /* U+764C */
+      '?', /* U+764D */
+      '?', /* U+764E */
+      '?', /* U+764F */
+      '?', /* U+7650 */
+      '?', /* U+7651 */
+   0x96fc, /* U+7652 */
+      '?', /* U+7653 */
+      '?', /* U+7654 */
+      '?', /* U+7655 */
+   0x95c8, /* U+7656 */
+      '?', /* U+7657 */
+   0xe196, /* U+7658 */
+      '?', /* U+7659 */
+      '?', /* U+765A */
+      '?', /* U+765B */
+   0xe195, /* U+765C */
+      '?', /* U+765D */
+      '?', /* U+765E */
+      '?', /* U+765F */
+      '?', /* U+7660 */
+   0xe197, /* U+7661 */
+   0xe198, /* U+7662 */
+      '?', /* U+7663 */
+      '?', /* U+7664 */
+      '?', /* U+7665 */
+      '?', /* U+7666 */
+   0xe19c, /* U+7667 */
+   0xe199, /* U+7668 */
+   0xe19a, /* U+7669 */
+   0xe19b, /* U+766A */
+      '?', /* U+766B */
+   0xe19d, /* U+766C */
+      '?', /* U+766D */
+      '?', /* U+766E */
+      '?', /* U+766F */
+   0xe19e, /* U+7670 */
+      '?', /* U+7671 */
+   0xe19f, /* U+7672 */
+      '?', /* U+7673 */
+      '?', /* U+7674 */
+      '?', /* U+7675 */
+   0xe1a0, /* U+7676 */
+      '?', /* U+7677 */
+   0xe1a1, /* U+7678 */
+      '?', /* U+7679 */
+   0x94ad, /* U+767A */
+   0x936f, /* U+767B */
+   0xe1a2, /* U+767C */
+   0x9492, /* U+767D */
+   0x9553, /* U+767E */
+      '?', /* U+767F */
+   0xe1a3, /* U+7680 */
+      '?', /* U+7681 */
+   0xfb70, /* U+7682 */
+   0xe1a4, /* U+7683 */
+   0x9349, /* U+7684 */
+      '?', /* U+7685 */
+   0x8a46, /* U+7686 */
+   0x8d63, /* U+7687 */
+   0xe1a5, /* U+7688 */
+      '?', /* U+7689 */
+      '?', /* U+768A */
+   0xe1a6, /* U+768B */
+      '?', /* U+768C */
+      '?', /* U+768D */
+   0xe1a7, /* U+768E */
+      '?', /* U+768F */
+   0x8e48, /* U+7690 */
+      '?', /* U+7691 */
+      '?', /* U+7692 */
+   0xe1a9, /* U+7693 */
+      '?', /* U+7694 */
+      '?', /* U+7695 */
+   0xe1a8, /* U+7696 */
+      '?', /* U+7697 */
+      '?', /* U+7698 */
+   0xe1aa, /* U+7699 */
+   0xe1ab, /* U+769A */
+   0xfb73, /* U+769B */
+   0xfb71, /* U+769C */
+      '?', /* U+769D */
+   0xfb72, /* U+769E */
+      '?', /* U+769F */
+      '?', /* U+76A0 */
+      '?', /* U+76A1 */
+      '?', /* U+76A2 */
+      '?', /* U+76A3 */
+      '?', /* U+76A4 */
+      '?', /* U+76A5 */
+   0xfb74, /* U+76A6 */
+      '?', /* U+76A7 */
+      '?', /* U+76A8 */
+      '?', /* U+76A9 */
+      '?', /* U+76AA */
+      '?', /* U+76AB */
+      '?', /* U+76AC */
+      '?', /* U+76AD */
+   0x94e7, /* U+76AE */
+      '?', /* U+76AF */
+   0xe1ac, /* U+76B0 */
+      '?', /* U+76B1 */
+      '?', /* U+76B2 */
+      '?', /* U+76B3 */
+   0xe1ad, /* U+76B4 */
+      '?', /* U+76B5 */
+      '?', /* U+76B6 */
+   0xea89, /* U+76B7 */
+   0xe1ae, /* U+76B8 */
+   0xe1af, /* U+76B9 */
+   0xe1b0, /* U+76BA */
+      '?', /* U+76BB */
+      '?', /* U+76BC */
+      '?', /* U+76BD */
+      '?', /* U+76BE */
+   0x8e4d, /* U+76BF */
+      '?', /* U+76C0 */
+      '?', /* U+76C1 */
+   0xe1b1, /* U+76C2 */
+   0x9475, /* U+76C3 */
+      '?', /* U+76C4 */
+      '?', /* U+76C5 */
+   0x967e, /* U+76C6 */
+      '?', /* U+76C7 */
+   0x896d, /* U+76C8 */
+      '?', /* U+76C9 */
+   0x8976, /* U+76CA */
+      '?', /* U+76CB */
+      '?', /* U+76CC */
+   0xe1b2, /* U+76CD */
+      '?', /* U+76CE */
+      '?', /* U+76CF */
+      '?', /* U+76D0 */
+      '?', /* U+76D1 */
+   0xe1b4, /* U+76D2 */
+      '?', /* U+76D3 */
+      '?', /* U+76D4 */
+      '?', /* U+76D5 */
+   0xe1b3, /* U+76D6 */
+   0x9390, /* U+76D7 */
+      '?', /* U+76D8 */
+      '?', /* U+76D9 */
+      '?', /* U+76DA */
+   0x90b7, /* U+76DB */
+   0x9f58, /* U+76DC */
+      '?', /* U+76DD */
+   0xe1b5, /* U+76DE */
+   0x96bf, /* U+76DF */
+      '?', /* U+76E0 */
+   0xe1b6, /* U+76E1 */
+      '?', /* U+76E2 */
+   0x8ac4, /* U+76E3 */
+   0x94d5, /* U+76E4 */
+   0xe1b7, /* U+76E5 */
+      '?', /* U+76E6 */
+   0xe1b8, /* U+76E7 */
+      '?', /* U+76E8 */
+      '?', /* U+76E9 */
+   0xe1b9, /* U+76EA */
+      '?', /* U+76EB */
+      '?', /* U+76EC */
+      '?', /* U+76ED */
+   0x96da, /* U+76EE */
+      '?', /* U+76EF */
+      '?', /* U+76F0 */
+      '?', /* U+76F1 */
+   0x96d3, /* U+76F2 */
+      '?', /* U+76F3 */
+   0x92bc, /* U+76F4 */
+      '?', /* U+76F5 */
+      '?', /* U+76F6 */
+      '?', /* U+76F7 */
+   0x918a, /* U+76F8 */
+      '?', /* U+76F9 */
+      '?', /* U+76FA */
+   0xe1bb, /* U+76FB */
+      '?', /* U+76FC */
+      '?', /* U+76FD */
+   0x8f82, /* U+76FE */
+      '?', /* U+76FF */
+      '?', /* U+7700 */
+   0x8fc8, /* U+7701 */
+      '?', /* U+7702 */
+      '?', /* U+7703 */
+   0xe1be, /* U+7704 */
+      '?', /* U+7705 */
+      '?', /* U+7706 */
+   0xe1bd, /* U+7707 */
+   0xe1bc, /* U+7708 */
+   0x94fb, /* U+7709 */
+      '?', /* U+770A */
+   0x8ac5, /* U+770B */
+   0x8ca7, /* U+770C */
+      '?', /* U+770D */
+      '?', /* U+770E */
+      '?', /* U+770F */
+      '?', /* U+7710 */
+      '?', /* U+7711 */
+      '?', /* U+7712 */
+      '?', /* U+7713 */
+      '?', /* U+7714 */
+      '?', /* U+7715 */
+      '?', /* U+7716 */
+      '?', /* U+7717 */
+      '?', /* U+7718 */
+      '?', /* U+7719 */
+      '?', /* U+771A */
+   0xe1c4, /* U+771B */
+      '?', /* U+771C */
+      '?', /* U+771D */
+   0xe1c1, /* U+771E */
+   0x905e, /* U+771F */
+   0x96b0, /* U+7720 */
+      '?', /* U+7721 */
+      '?', /* U+7722 */
+      '?', /* U+7723 */
+   0xe1c0, /* U+7724 */
+   0xe1c2, /* U+7725 */
+   0xe1c3, /* U+7726 */
+      '?', /* U+7727 */
+      '?', /* U+7728 */
+   0xe1bf, /* U+7729 */
+      '?', /* U+772A */
+      '?', /* U+772B */
+      '?', /* U+772C */
+      '?', /* U+772D */
+      '?', /* U+772E */
+      '?', /* U+772F */
+      '?', /* U+7730 */
+      '?', /* U+7731 */
+      '?', /* U+7732 */
+      '?', /* U+7733 */
+      '?', /* U+7734 */
+      '?', /* U+7735 */
+      '?', /* U+7736 */
+   0xe1c5, /* U+7737 */
+   0xe1c6, /* U+7738 */
+      '?', /* U+7739 */
+   0x92ad, /* U+773A */
+      '?', /* U+773B */
+   0x8ae1, /* U+773C */
+      '?', /* U+773D */
+      '?', /* U+773E */
+      '?', /* U+773F */
+   0x9285, /* U+7740 */
+      '?', /* U+7741 */
+      '?', /* U+7742 */
+      '?', /* U+7743 */
+      '?', /* U+7744 */
+      '?', /* U+7745 */
+   0xfb76, /* U+7746 */
+   0xe1c7, /* U+7747 */
+      '?', /* U+7748 */
+      '?', /* U+7749 */
+      '?', /* U+774A */
+      '?', /* U+774B */
+      '?', /* U+774C */
+      '?', /* U+774D */
+      '?', /* U+774E */
+      '?', /* U+774F */
+      '?', /* U+7750 */
+      '?', /* U+7751 */
+      '?', /* U+7752 */
+      '?', /* U+7753 */
+      '?', /* U+7754 */
+      '?', /* U+7755 */
+      '?', /* U+7756 */
+      '?', /* U+7757 */
+      '?', /* U+7758 */
+      '?', /* U+7759 */
+   0xe1c8, /* U+775A */
+   0xe1cb, /* U+775B */
+      '?', /* U+775C */
+      '?', /* U+775D */
+      '?', /* U+775E */
+      '?', /* U+775F */
+      '?', /* U+7760 */
+   0x9087, /* U+7761 */
+      '?', /* U+7762 */
+   0x93c2, /* U+7763 */
+      '?', /* U+7764 */
+   0xe1cc, /* U+7765 */
+   0x9672, /* U+7766 */
+      '?', /* U+7767 */
+   0xe1c9, /* U+7768 */
+      '?', /* U+7769 */
+      '?', /* U+776A */
+   0xe1ca, /* U+776B */
+      '?', /* U+776C */
+      '?', /* U+776D */
+      '?', /* U+776E */
+      '?', /* U+776F */
+      '?', /* U+7770 */
+      '?', /* U+7771 */
+      '?', /* U+7772 */
+      '?', /* U+7773 */
+      '?', /* U+7774 */
+      '?', /* U+7775 */
+      '?', /* U+7776 */
+      '?', /* U+7777 */
+      '?', /* U+7778 */
+   0xe1cf, /* U+7779 */
+      '?', /* U+777A */
+      '?', /* U+777B */
+      '?', /* U+777C */
+      '?', /* U+777D */
+   0xe1ce, /* U+777E */
+   0xe1cd, /* U+777F */
+      '?', /* U+7780 */
+      '?', /* U+7781 */
+      '?', /* U+7782 */
+      '?', /* U+7783 */
+      '?', /* U+7784 */
+      '?', /* U+7785 */
+      '?', /* U+7786 */
+      '?', /* U+7787 */
+      '?', /* U+7788 */
+      '?', /* U+7789 */
+      '?', /* U+778A */
+   0xe1d1, /* U+778B */
+      '?', /* U+778C */
+      '?', /* U+778D */
+   0xe1d0, /* U+778E */
+      '?', /* U+778F */
+      '?', /* U+7790 */
+   0xe1d2, /* U+7791 */
+      '?', /* U+7792 */
+      '?', /* U+7793 */
+      '?', /* U+7794 */
+      '?', /* U+7795 */
+      '?', /* U+7796 */
+      '?', /* U+7797 */
+      '?', /* U+7798 */
+      '?', /* U+7799 */
+      '?', /* U+779A */
+      '?', /* U+779B */
+      '?', /* U+779C */
+      '?', /* U+779D */
+   0xe1d4, /* U+779E */
+      '?', /* U+779F */
+   0xe1d3, /* U+77A0 */
+      '?', /* U+77A1 */
+      '?', /* U+77A2 */
+      '?', /* U+77A3 */
+      '?', /* U+77A4 */
+   0x95cb, /* U+77A5 */
+      '?', /* U+77A6 */
+      '?', /* U+77A7 */
+      '?', /* U+77A8 */
+      '?', /* U+77A9 */
+      '?', /* U+77AA */
+      '?', /* U+77AB */
+   0x8f75, /* U+77AC */
+   0x97c4, /* U+77AD */
+      '?', /* U+77AE */
+      '?', /* U+77AF */
+   0xe1d5, /* U+77B0 */
+      '?', /* U+77B1 */
+      '?', /* U+77B2 */
+   0x93b5, /* U+77B3 */
+      '?', /* U+77B4 */
+      '?', /* U+77B5 */
+   0xe1d6, /* U+77B6 */
+      '?', /* U+77B7 */
+      '?', /* U+77B8 */
+   0xe1d7, /* U+77B9 */
+      '?', /* U+77BA */
+   0xe1db, /* U+77BB */
+   0xe1d9, /* U+77BC */
+   0xe1da, /* U+77BD */
+      '?', /* U+77BE */
+   0xe1d8, /* U+77BF */
+      '?', /* U+77C0 */
+      '?', /* U+77C1 */
+      '?', /* U+77C2 */
+      '?', /* U+77C3 */
+      '?', /* U+77C4 */
+      '?', /* U+77C5 */
+      '?', /* U+77C6 */
+   0xe1dc, /* U+77C7 */
+      '?', /* U+77C8 */
+      '?', /* U+77C9 */
+      '?', /* U+77CA */
+      '?', /* U+77CB */
+      '?', /* U+77CC */
+   0xe1dd, /* U+77CD */
+      '?', /* U+77CE */
+      '?', /* U+77CF */
+      '?', /* U+77D0 */
+      '?', /* U+77D1 */
+      '?', /* U+77D2 */
+      '?', /* U+77D3 */
+      '?', /* U+77D4 */
+      '?', /* U+77D5 */
+      '?', /* U+77D6 */
+   0xe1de, /* U+77D7 */
+      '?', /* U+77D8 */
+      '?', /* U+77D9 */
+   0xe1df, /* U+77DA */
+   0x96b5, /* U+77DB */
+   0xe1e0, /* U+77DC */
+      '?', /* U+77DD */
+      '?', /* U+77DE */
+      '?', /* U+77DF */
+      '?', /* U+77E0 */
+      '?', /* U+77E1 */
+   0x96ee, /* U+77E2 */
+   0xe1e1, /* U+77E3 */
+      '?', /* U+77E4 */
+   0x926d, /* U+77E5 */
+      '?', /* U+77E6 */
+   0x948a, /* U+77E7 */
+      '?', /* U+77E8 */
+   0x8be9, /* U+77E9 */
+      '?', /* U+77EA */
+      '?', /* U+77EB */
+      '?', /* U+77EC */
+   0x925a, /* U+77ED */
+   0xe1e2, /* U+77EE */
+   0x8bb8, /* U+77EF */
+      '?', /* U+77F0 */
+      '?', /* U+77F1 */
+      '?', /* U+77F2 */
+   0x90ce, /* U+77F3 */
+      '?', /* U+77F4 */
+      '?', /* U+77F5 */
+      '?', /* U+77F6 */
+      '?', /* U+77F7 */
+      '?', /* U+77F8 */
+      '?', /* U+77F9 */
+      '?', /* U+77FA */
+      '?', /* U+77FB */
+   0xe1e3, /* U+77FC */
+      '?', /* U+77FD */
+      '?', /* U+77FE */
+      '?', /* U+77FF */
+      '?', /* U+7800 */
+      '?', /* U+7801 */
+   0x8dbb, /* U+7802 */
+      '?', /* U+7803 */
+      '?', /* U+7804 */
+      '?', /* U+7805 */
+      '?', /* U+7806 */
+      '?', /* U+7807 */
+      '?', /* U+7808 */
+      '?', /* U+7809 */
+      '?', /* U+780A */
+      '?', /* U+780B */
+   0xe1e4, /* U+780C */
+      '?', /* U+780D */
+      '?', /* U+780E */
+      '?', /* U+780F */
+      '?', /* U+7810 */
+      '?', /* U+7811 */
+   0xe1e5, /* U+7812 */
+      '?', /* U+7813 */
+   0x8ca4, /* U+7814 */
+   0x8dd3, /* U+7815 */
+      '?', /* U+7816 */
+      '?', /* U+7817 */
+      '?', /* U+7818 */
+      '?', /* U+7819 */
+      '?', /* U+781A */
+      '?', /* U+781B */
+      '?', /* U+781C */
+      '?', /* U+781D */
+      '?', /* U+781E */
+      '?', /* U+781F */
+   0xe1e7, /* U+7820 */
+   0xfb78, /* U+7821 */
+      '?', /* U+7822 */
+      '?', /* U+7823 */
+      '?', /* U+7824 */
+   0x9375, /* U+7825 */
+   0x8dd4, /* U+7826 */
+   0x8b6d, /* U+7827 */
+      '?', /* U+7828 */
+      '?', /* U+7829 */
+      '?', /* U+782A */
+      '?', /* U+782B */
+      '?', /* U+782C */
+      '?', /* U+782D */
+      '?', /* U+782E */
+      '?', /* U+782F */
+      '?', /* U+7830 */
+      '?', /* U+7831 */
+   0x9643, /* U+7832 */
+      '?', /* U+7833 */
+   0x946a, /* U+7834 */
+      '?', /* U+7835 */
+      '?', /* U+7836 */
+      '?', /* U+7837 */
+      '?', /* U+7838 */
+      '?', /* U+7839 */
+   0x9376, /* U+783A */
+      '?', /* U+783B */
+      '?', /* U+783C */
+      '?', /* U+783D */
+      '?', /* U+783E */
+   0x8d7b, /* U+783F */
+      '?', /* U+7840 */
+      '?', /* U+7841 */
+      '?', /* U+7842 */
+      '?', /* U+7843 */
+      '?', /* U+7844 */
+   0xe1e9, /* U+7845 */
+      '?', /* U+7846 */
+      '?', /* U+7847 */
+      '?', /* U+7848 */
+      '?', /* U+7849 */
+      '?', /* U+784A */
+      '?', /* U+784B */
+      '?', /* U+784C */
+      '?', /* U+784D */
+   0xfb79, /* U+784E */
+      '?', /* U+784F */
+      '?', /* U+7850 */
+      '?', /* U+7851 */
+      '?', /* U+7852 */
+      '?', /* U+7853 */
+      '?', /* U+7854 */
+      '?', /* U+7855 */
+      '?', /* U+7856 */
+      '?', /* U+7857 */
+      '?', /* U+7858 */
+      '?', /* U+7859 */
+      '?', /* U+785A */
+      '?', /* U+785B */
+      '?', /* U+785C */
+   0x8fc9, /* U+785D */
+      '?', /* U+785E */
+      '?', /* U+785F */
+      '?', /* U+7860 */
+      '?', /* U+7861 */
+      '?', /* U+7862 */
+      '?', /* U+7863 */
+   0xfb7a, /* U+7864 */
+      '?', /* U+7865 */
+      '?', /* U+7866 */
+      '?', /* U+7867 */
+      '?', /* U+7868 */
+      '?', /* U+7869 */
+      '?', /* U+786A */
+   0x97b0, /* U+786B */
+   0x8d64, /* U+786C */
+      '?', /* U+786D */
+      '?', /* U+786E */
+   0x8ca5, /* U+786F */
+      '?', /* U+7870 */
+      '?', /* U+7871 */
+   0x94a1, /* U+7872 */
+      '?', /* U+7873 */
+   0xe1eb, /* U+7874 */
+      '?', /* U+7875 */
+      '?', /* U+7876 */
+      '?', /* U+7877 */
+      '?', /* U+7878 */
+      '?', /* U+7879 */
+   0xfb7b, /* U+787A */
+      '?', /* U+787B */
+   0xe1ed, /* U+787C */
+      '?', /* U+787D */
+      '?', /* U+787E */
+      '?', /* U+787F */
+      '?', /* U+7880 */
+   0x8ce9, /* U+7881 */
+      '?', /* U+7882 */
+      '?', /* U+7883 */
+      '?', /* U+7884 */
+      '?', /* U+7885 */
+   0xe1ec, /* U+7886 */
+   0x92f4, /* U+7887 */
+      '?', /* U+7888 */
+      '?', /* U+7889 */
+      '?', /* U+788A */
+      '?', /* U+788B */
+   0xe1ef, /* U+788C */
+   0x8a56, /* U+788D */
+   0xe1ea, /* U+788E */
+      '?', /* U+788F */
+      '?', /* U+7890 */
+   0x94e8, /* U+7891 */
+      '?', /* U+7892 */
+   0x894f, /* U+7893 */
+      '?', /* U+7894 */
+   0x8dea, /* U+7895 */
+      '?', /* U+7896 */
+   0x9871, /* U+7897 */
+      '?', /* U+7898 */
+      '?', /* U+7899 */
+   0xe1ee, /* U+789A */
+      '?', /* U+789B */
+      '?', /* U+789C */
+      '?', /* U+789D */
+      '?', /* U+789E */
+      '?', /* U+789F */
+      '?', /* U+78A0 */
+      '?', /* U+78A1 */
+      '?', /* U+78A2 */
+   0xe1f0, /* U+78A3 */
+      '?', /* U+78A4 */
+      '?', /* U+78A5 */
+      '?', /* U+78A6 */
+   0x95c9, /* U+78A7 */
+      '?', /* U+78A8 */
+   0x90d7, /* U+78A9 */
+   0xe1f2, /* U+78AA */
+      '?', /* U+78AB */
+      '?', /* U+78AC */
+      '?', /* U+78AD */
+      '?', /* U+78AE */
+   0xe1f3, /* U+78AF */
+      '?', /* U+78B0 */
+      '?', /* U+78B1 */
+      '?', /* U+78B2 */
+      '?', /* U+78B3 */
+      '?', /* U+78B4 */
+   0xe1f1, /* U+78B5 */
+      '?', /* U+78B6 */
+      '?', /* U+78B7 */
+      '?', /* U+78B8 */
+      '?', /* U+78B9 */
+   0x8a6d, /* U+78BA */
+      '?', /* U+78BB */
+   0xe1f9, /* U+78BC */
+      '?', /* U+78BD */
+   0xe1f8, /* U+78BE */
+      '?', /* U+78BF */
+      '?', /* U+78C0 */
+   0x8ea5, /* U+78C1 */
+      '?', /* U+78C2 */
+      '?', /* U+78C3 */
+      '?', /* U+78C4 */
+   0xe1fa, /* U+78C5 */
+   0xe1f5, /* U+78C6 */
+      '?', /* U+78C7 */
+      '?', /* U+78C8 */
+      '?', /* U+78C9 */
+   0xe1fb, /* U+78CA */
+   0xe1f6, /* U+78CB */
+      '?', /* U+78CC */
+      '?', /* U+78CD */
+      '?', /* U+78CE */
+      '?', /* U+78CF */
+   0x94d6, /* U+78D0 */
+   0xe1f4, /* U+78D1 */
+      '?', /* U+78D2 */
+      '?', /* U+78D3 */
+   0xe1f7, /* U+78D4 */
+      '?', /* U+78D5 */
+      '?', /* U+78D6 */
+      '?', /* U+78D7 */
+      '?', /* U+78D8 */
+      '?', /* U+78D9 */
+   0xe241, /* U+78DA */
+      '?', /* U+78DB */
+      '?', /* U+78DC */
+      '?', /* U+78DD */
+      '?', /* U+78DE */
+      '?', /* U+78DF */
+      '?', /* U+78E0 */
+      '?', /* U+78E1 */
+      '?', /* U+78E2 */
+      '?', /* U+78E3 */
+      '?', /* U+78E4 */
+      '?', /* U+78E5 */
+      '?', /* U+78E6 */
+   0xe240, /* U+78E7 */
+   0x9681, /* U+78E8 */
+      '?', /* U+78E9 */
+      '?', /* U+78EA */
+      '?', /* U+78EB */
+   0xe1fc, /* U+78EC */
+      '?', /* U+78ED */
+      '?', /* U+78EE */
+   0x88e9, /* U+78EF */
+      '?', /* U+78F0 */
+      '?', /* U+78F1 */
+      '?', /* U+78F2 */
+      '?', /* U+78F3 */
+   0xe243, /* U+78F4 */
+      '?', /* U+78F5 */
+      '?', /* U+78F6 */
+      '?', /* U+78F7 */
+      '?', /* U+78F8 */
+      '?', /* U+78F9 */
+      '?', /* U+78FA */
+      '?', /* U+78FB */
+      '?', /* U+78FC */
+   0xe242, /* U+78FD */
+      '?', /* U+78FE */
+      '?', /* U+78FF */
+      '?', /* U+7900 */
+   0x8fca, /* U+7901 */
+      '?', /* U+7902 */
+      '?', /* U+7903 */
+      '?', /* U+7904 */
+      '?', /* U+7905 */
+      '?', /* U+7906 */
+   0xe244, /* U+7907 */
+      '?', /* U+7908 */
+      '?', /* U+7909 */
+      '?', /* U+790A */
+      '?', /* U+790B */
+      '?', /* U+790C */
+      '?', /* U+790D */
+   0x9162, /* U+790E */
+      '?', /* U+790F */
+      '?', /* U+7910 */
+   0xe246, /* U+7911 */
+   0xe245, /* U+7912 */
+      '?', /* U+7913 */
+      '?', /* U+7914 */
+      '?', /* U+7915 */
+      '?', /* U+7916 */
+      '?', /* U+7917 */
+      '?', /* U+7918 */
+   0xe247, /* U+7919 */
+      '?', /* U+791A */
+      '?', /* U+791B */
+      '?', /* U+791C */
+      '?', /* U+791D */
+      '?', /* U+791E */
+      '?', /* U+791F */
+      '?', /* U+7920 */
+      '?', /* U+7921 */
+      '?', /* U+7922 */
+      '?', /* U+7923 */
+      '?', /* U+7924 */
+      '?', /* U+7925 */
+   0xe1e6, /* U+7926 */
+      '?', /* U+7927 */
+      '?', /* U+7928 */
+      '?', /* U+7929 */
+   0xe1e8, /* U+792A */
+   0xe249, /* U+792B */
+   0xe248, /* U+792C */
+      '?', /* U+792D */
+      '?', /* U+792E */
+      '?', /* U+792F */
+   0xfb7c, /* U+7930 */
+      '?', /* U+7931 */
+      '?', /* U+7932 */
+      '?', /* U+7933 */
+      '?', /* U+7934 */
+      '?', /* U+7935 */
+      '?', /* U+7936 */
+      '?', /* U+7937 */
+      '?', /* U+7938 */
+      '?', /* U+7939 */
+   0x8ea6, /* U+793A */
+      '?', /* U+793B */
+   0x97e7, /* U+793C */
+      '?', /* U+793D */
+   0x8ed0, /* U+793E */
+      '?', /* U+793F */
+   0xe24a, /* U+7940 */
+   0x8c56, /* U+7941 */
+      '?', /* U+7942 */
+      '?', /* U+7943 */
+      '?', /* U+7944 */
+      '?', /* U+7945 */
+      '?', /* U+7946 */
+   0x8b5f, /* U+7947 */
+   0x8b46, /* U+7948 */
+   0x8e83, /* U+7949 */
+      '?', /* U+794A */
+      '?', /* U+794B */
+      '?', /* U+794C */
+      '?', /* U+794D */
+      '?', /* U+794E */
+      '?', /* U+794F */
+   0x9753, /* U+7950 */
+      '?', /* U+7951 */
+      '?', /* U+7952 */
+   0xe250, /* U+7953 */
+      '?', /* U+7954 */
+   0xe24f, /* U+7955 */
+   0x9163, /* U+7956 */
+   0xe24c, /* U+7957 */
+      '?', /* U+7958 */
+      '?', /* U+7959 */
+   0xe24e, /* U+795A */
+      '?', /* U+795B */
+      '?', /* U+795C */
+   0x8f6a, /* U+795D */
+   0x905f, /* U+795E */
+   0xe24d, /* U+795F */
+   0xe24b, /* U+7960 */
+      '?', /* U+7961 */
+   0x9449, /* U+7962 */
+      '?', /* U+7963 */
+      '?', /* U+7964 */
+   0x8fcb, /* U+7965 */
+      '?', /* U+7966 */
+      '?', /* U+7967 */
+   0x955b, /* U+7968 */
+      '?', /* U+7969 */
+      '?', /* U+796A */
+      '?', /* U+796B */
+      '?', /* U+796C */
+   0x8dd5, /* U+796D */
+      '?', /* U+796E */
+      '?', /* U+796F */
+      '?', /* U+7970 */
+      '?', /* U+7971 */
+      '?', /* U+7972 */
+      '?', /* U+7973 */
+      '?', /* U+7974 */
+      '?', /* U+7975 */
+      '?', /* U+7976 */
+   0x9398, /* U+7977 */
+      '?', /* U+7978 */
+      '?', /* U+7979 */
+   0xe251, /* U+797A */
+      '?', /* U+797B */
+      '?', /* U+797C */
+      '?', /* U+797D */
+      '?', /* U+797E */
+   0xe252, /* U+797F */
+   0xe268, /* U+7980 */
+   0x8bd6, /* U+7981 */
+      '?', /* U+7982 */
+      '?', /* U+7983 */
+   0x985c, /* U+7984 */
+   0x9154, /* U+7985 */
+      '?', /* U+7986 */
+      '?', /* U+7987 */
+      '?', /* U+7988 */
+      '?', /* U+7989 */
+   0xe253, /* U+798A */
+      '?', /* U+798B */
+      '?', /* U+798C */
+   0x89d0, /* U+798D */
+   0x92f5, /* U+798E */
+   0x959f, /* U+798F */
+      '?', /* U+7990 */
+      '?', /* U+7991 */
+      '?', /* U+7992 */
+      '?', /* U+7993 */
+   0xfb81, /* U+7994 */
+      '?', /* U+7995 */
+      '?', /* U+7996 */
+      '?', /* U+7997 */
+      '?', /* U+7998 */
+      '?', /* U+7999 */
+      '?', /* U+799A */
+   0xfb83, /* U+799B */
+      '?', /* U+799C */
+   0xe254, /* U+799D */
+      '?', /* U+799E */
+      '?', /* U+799F */
+      '?', /* U+79A0 */
+      '?', /* U+79A1 */
+      '?', /* U+79A2 */
+      '?', /* U+79A3 */
+      '?', /* U+79A4 */
+      '?', /* U+79A5 */
+   0x8b9a, /* U+79A6 */
+   0xe255, /* U+79A7 */
+      '?', /* U+79A8 */
+      '?', /* U+79A9 */
+   0xe257, /* U+79AA */
+      '?', /* U+79AB */
+      '?', /* U+79AC */
+      '?', /* U+79AD */
+   0xe258, /* U+79AE */
+      '?', /* U+79AF */
+   0x9448, /* U+79B0 */
+      '?', /* U+79B1 */
+      '?', /* U+79B2 */
+   0xe259, /* U+79B3 */
+      '?', /* U+79B4 */
+      '?', /* U+79B5 */
+      '?', /* U+79B6 */
+      '?', /* U+79B7 */
+      '?', /* U+79B8 */
+   0xe25a, /* U+79B9 */
+   0xe25b, /* U+79BA */
+      '?', /* U+79BB */
+      '?', /* U+79BC */
+   0x8bd7, /* U+79BD */
+   0x89d1, /* U+79BE */
+   0x93c3, /* U+79BF */
+   0x8f47, /* U+79C0 */
+   0x8e84, /* U+79C1 */
+      '?', /* U+79C2 */
+      '?', /* U+79C3 */
+      '?', /* U+79C4 */
+      '?', /* U+79C5 */
+      '?', /* U+79C6 */
+      '?', /* U+79C7 */
+      '?', /* U+79C8 */
+   0xe25c, /* U+79C9 */
+      '?', /* U+79CA */
+   0x8f48, /* U+79CB */
+      '?', /* U+79CC */
+      '?', /* U+79CD */
+      '?', /* U+79CE */
+      '?', /* U+79CF */
+      '?', /* U+79D0 */
+   0x89c8, /* U+79D1 */
+   0x9562, /* U+79D2 */
+      '?', /* U+79D3 */
+      '?', /* U+79D4 */
+   0xe25d, /* U+79D5 */
+      '?', /* U+79D6 */
+      '?', /* U+79D7 */
+   0x94e9, /* U+79D8 */
+      '?', /* U+79D9 */
+      '?', /* U+79DA */
+      '?', /* U+79DB */
+      '?', /* U+79DC */
+      '?', /* U+79DD */
+      '?', /* U+79DE */
+   0x9164, /* U+79DF */
+      '?', /* U+79E0 */
+   0xe260, /* U+79E1 */
+      '?', /* U+79E2 */
+   0xe261, /* U+79E3 */
+   0x9489, /* U+79E4 */
+      '?', /* U+79E5 */
+   0x9060, /* U+79E6 */
+   0xe25e, /* U+79E7 */
+      '?', /* U+79E8 */
+   0x9281, /* U+79E9 */
+      '?', /* U+79EA */
+      '?', /* U+79EB */
+   0xe25f, /* U+79EC */
+      '?', /* U+79ED */
+      '?', /* U+79EE */
+      '?', /* U+79EF */
+   0x8fcc, /* U+79F0 */
+      '?', /* U+79F1 */
+      '?', /* U+79F2 */
+      '?', /* U+79F3 */
+      '?', /* U+79F4 */
+      '?', /* U+79F5 */
+      '?', /* U+79F6 */
+      '?', /* U+79F7 */
+      '?', /* U+79F8 */
+      '?', /* U+79F9 */
+      '?', /* U+79FA */
+   0x88da, /* U+79FB */
+      '?', /* U+79FC */
+      '?', /* U+79FD */
+      '?', /* U+79FE */
+      '?', /* U+79FF */
+   0x8b48, /* U+7A00 */
+      '?', /* U+7A01 */
+      '?', /* U+7A02 */
+      '?', /* U+7A03 */
+      '?', /* U+7A04 */
+      '?', /* U+7A05 */
+      '?', /* U+7A06 */
+      '?', /* U+7A07 */
+   0xe262, /* U+7A08 */
+      '?', /* U+7A09 */
+      '?', /* U+7A0A */
+   0x92f6, /* U+7A0B */
+      '?', /* U+7A0C */
+   0xe263, /* U+7A0D */
+   0x90c5, /* U+7A0E */
+      '?', /* U+7A0F */
+      '?', /* U+7A10 */
+      '?', /* U+7A11 */
+      '?', /* U+7A12 */
+      '?', /* U+7A13 */
+   0x96ab, /* U+7A14 */
+      '?', /* U+7A15 */
+      '?', /* U+7A16 */
+   0x9542, /* U+7A17 */
+   0xe264, /* U+7A18 */
+   0xe265, /* U+7A19 */
+   0x9274, /* U+7A1A */
+      '?', /* U+7A1B */
+   0x97c5, /* U+7A1C */
+      '?', /* U+7A1D */
+      '?', /* U+7A1E */
+   0xe267, /* U+7A1F */
+   0xe266, /* U+7A20 */
+      '?', /* U+7A21 */
+      '?', /* U+7A22 */
+      '?', /* U+7A23 */
+      '?', /* U+7A24 */
+      '?', /* U+7A25 */
+      '?', /* U+7A26 */
+      '?', /* U+7A27 */
+      '?', /* U+7A28 */
+      '?', /* U+7A29 */
+      '?', /* U+7A2A */
+      '?', /* U+7A2B */
+      '?', /* U+7A2C */
+      '?', /* U+7A2D */
+   0x8eed, /* U+7A2E */
+      '?', /* U+7A2F */
+      '?', /* U+7A30 */
+   0xe269, /* U+7A31 */
+   0x88ee, /* U+7A32 */
+      '?', /* U+7A33 */
+      '?', /* U+7A34 */
+      '?', /* U+7A35 */
+      '?', /* U+7A36 */
+   0xe26c, /* U+7A37 */
+      '?', /* U+7A38 */
+      '?', /* U+7A39 */
+      '?', /* U+7A3A */
+   0xe26a, /* U+7A3B */
+   0x89d2, /* U+7A3C */
+   0x8c6d, /* U+7A3D */
+   0xe26b, /* U+7A3E */
+   0x8d65, /* U+7A3F */
+   0x8d92, /* U+7A40 */
+      '?', /* U+7A41 */
+   0x95e4, /* U+7A42 */
+   0xe26d, /* U+7A43 */
+      '?', /* U+7A44 */
+      '?', /* U+7A45 */
+   0x9673, /* U+7A46 */
+      '?', /* U+7A47 */
+      '?', /* U+7A48 */
+   0xe26f, /* U+7A49 */
+      '?', /* U+7A4A */
+      '?', /* U+7A4B */
+      '?', /* U+7A4C */
+   0x90cf, /* U+7A4D */
+   0x896e, /* U+7A4E */
+   0x89b8, /* U+7A4F */
+   0x88aa, /* U+7A50 */
+      '?', /* U+7A51 */
+      '?', /* U+7A52 */
+      '?', /* U+7A53 */
+      '?', /* U+7A54 */
+      '?', /* U+7A55 */
+      '?', /* U+7A56 */
+   0xe26e, /* U+7A57 */
+      '?', /* U+7A58 */
+      '?', /* U+7A59 */
+      '?', /* U+7A5A */
+      '?', /* U+7A5B */
+      '?', /* U+7A5C */
+      '?', /* U+7A5D */
+      '?', /* U+7A5E */
+      '?', /* U+7A5F */
+      '?', /* U+7A60 */
+   0xe270, /* U+7A61 */
+   0xe271, /* U+7A62 */
+   0x8ff5, /* U+7A63 */
+      '?', /* U+7A64 */
+      '?', /* U+7A65 */
+      '?', /* U+7A66 */
+      '?', /* U+7A67 */
+      '?', /* U+7A68 */
+   0xe272, /* U+7A69 */
+      '?', /* U+7A6A */
+   0x8a6e, /* U+7A6B */
+      '?', /* U+7A6C */
+      '?', /* U+7A6D */
+      '?', /* U+7A6E */
+      '?', /* U+7A6F */
+   0xe274, /* U+7A70 */
+      '?', /* U+7A71 */
+      '?', /* U+7A72 */
+      '?', /* U+7A73 */
+   0x8c8a, /* U+7A74 */
+      '?', /* U+7A75 */
+   0x8b86, /* U+7A76 */
+      '?', /* U+7A77 */
+      '?', /* U+7A78 */
+   0xe275, /* U+7A79 */
+   0x8bf3, /* U+7A7A */
+      '?', /* U+7A7B */
+      '?', /* U+7A7C */
+   0xe276, /* U+7A7D */
+      '?', /* U+7A7E */
+   0x90fa, /* U+7A7F */
+      '?', /* U+7A80 */
+   0x93cb, /* U+7A81 */
+      '?', /* U+7A82 */
+   0x90de, /* U+7A83 */
+   0x8df3, /* U+7A84 */
+      '?', /* U+7A85 */
+      '?', /* U+7A86 */
+      '?', /* U+7A87 */
+   0xe277, /* U+7A88 */
+      '?', /* U+7A89 */
+      '?', /* U+7A8A */
+      '?', /* U+7A8B */
+      '?', /* U+7A8C */
+      '?', /* U+7A8D */
+      '?', /* U+7A8E */
+      '?', /* U+7A8F */
+      '?', /* U+7A90 */
+      '?', /* U+7A91 */
+   0x9282, /* U+7A92 */
+   0x918b, /* U+7A93 */
+      '?', /* U+7A94 */
+   0xe279, /* U+7A95 */
+   0xe27b, /* U+7A96 */
+   0xe278, /* U+7A97 */
+   0xe27a, /* U+7A98 */
+      '?', /* U+7A99 */
+      '?', /* U+7A9A */
+      '?', /* U+7A9B */
+      '?', /* U+7A9C */
+      '?', /* U+7A9D */
+      '?', /* U+7A9E */
+   0x8c41, /* U+7A9F */
+      '?', /* U+7AA0 */
+      '?', /* U+7AA1 */
+      '?', /* U+7AA2 */
+      '?', /* U+7AA3 */
+      '?', /* U+7AA4 */
+      '?', /* U+7AA5 */
+      '?', /* U+7AA6 */
+      '?', /* U+7AA7 */
+      '?', /* U+7AA8 */
+   0xe27c, /* U+7AA9 */
+   0x8c45, /* U+7AAA */
+      '?', /* U+7AAB */
+      '?', /* U+7AAC */
+      '?', /* U+7AAD */
+   0x8b87, /* U+7AAE */
+   0x9771, /* U+7AAF */
+   0xe27e, /* U+7AB0 */
+      '?', /* U+7AB1 */
+      '?', /* U+7AB2 */
+      '?', /* U+7AB3 */
+      '?', /* U+7AB4 */
+      '?', /* U+7AB5 */
+   0xe280, /* U+7AB6 */
+      '?', /* U+7AB7 */
+      '?', /* U+7AB8 */
+      '?', /* U+7AB9 */
+   0x894d, /* U+7ABA */
+      '?', /* U+7ABB */
+      '?', /* U+7ABC */
+      '?', /* U+7ABD */
+      '?', /* U+7ABE */
+   0xe283, /* U+7ABF */
+      '?', /* U+7AC0 */
+      '?', /* U+7AC1 */
+      '?', /* U+7AC2 */
+   0x8a96, /* U+7AC3 */
+   0xe282, /* U+7AC4 */
+   0xe281, /* U+7AC5 */
+      '?', /* U+7AC6 */
+   0xe285, /* U+7AC7 */
+   0xe27d, /* U+7AC8 */
+      '?', /* U+7AC9 */
+   0xe286, /* U+7ACA */
+   0x97a7, /* U+7ACB */
+      '?', /* U+7ACC */
+   0xe287, /* U+7ACD */
+      '?', /* U+7ACE */
+   0xe288, /* U+7ACF */
+      '?', /* U+7AD0 */
+   0xfb84, /* U+7AD1 */
+   0x9af2, /* U+7AD2 */
+   0xe28a, /* U+7AD3 */
+      '?', /* U+7AD4 */
+   0xe289, /* U+7AD5 */
+      '?', /* U+7AD6 */
+      '?', /* U+7AD7 */
+      '?', /* U+7AD8 */
+   0xe28b, /* U+7AD9 */
+   0xe28c, /* U+7ADA */
+      '?', /* U+7ADB */
+   0x97b3, /* U+7ADC */
+   0xe28d, /* U+7ADD */
+      '?', /* U+7ADE */
+   0xe8ed, /* U+7ADF */
+   0x8fcd, /* U+7AE0 */
+   0xe28e, /* U+7AE1 */
+   0xe28f, /* U+7AE2 */
+   0x8f76, /* U+7AE3 */
+      '?', /* U+7AE4 */
+   0x93b6, /* U+7AE5 */
+   0xe290, /* U+7AE6 */
+   0xfb85, /* U+7AE7 */
+      '?', /* U+7AE8 */
+      '?', /* U+7AE9 */
+   0x9247, /* U+7AEA */
+   0xfb87, /* U+7AEB */
+      '?', /* U+7AEC */
+   0xe291, /* U+7AED */
+      '?', /* U+7AEE */
+   0x925b, /* U+7AEF */
+   0xe292, /* U+7AF0 */
+      '?', /* U+7AF1 */
+      '?', /* U+7AF2 */
+      '?', /* U+7AF3 */
+      '?', /* U+7AF4 */
+      '?', /* U+7AF5 */
+   0x8ba3, /* U+7AF6 */
+      '?', /* U+7AF7 */
+   0x995e, /* U+7AF8 */
+   0x927c, /* U+7AF9 */
+   0x8eb1, /* U+7AFA */
+      '?', /* U+7AFB */
+      '?', /* U+7AFC */
+      '?', /* U+7AFD */
+      '?', /* U+7AFE */
+   0x8ac6, /* U+7AFF */
+      '?', /* U+7B00 */
+      '?', /* U+7B01 */
+   0xe293, /* U+7B02 */
+      '?', /* U+7B03 */
+   0xe2a0, /* U+7B04 */
+      '?', /* U+7B05 */
+   0xe296, /* U+7B06 */
+      '?', /* U+7B07 */
+   0x8b88, /* U+7B08 */
+      '?', /* U+7B09 */
+   0xe295, /* U+7B0A */
+   0xe2a2, /* U+7B0B */
+      '?', /* U+7B0C */
+      '?', /* U+7B0D */
+      '?', /* U+7B0E */
+   0xe294, /* U+7B0F */
+      '?', /* U+7B10 */
+   0x8fce, /* U+7B11 */
+      '?', /* U+7B12 */
+      '?', /* U+7B13 */
+      '?', /* U+7B14 */
+      '?', /* U+7B15 */
+      '?', /* U+7B16 */
+      '?', /* U+7B17 */
+   0xe298, /* U+7B18 */
+   0xe299, /* U+7B19 */
+      '?', /* U+7B1A */
+   0x934a, /* U+7B1B */
+      '?', /* U+7B1C */
+      '?', /* U+7B1D */
+   0xe29a, /* U+7B1E */
+      '?', /* U+7B1F */
+   0x8a7d, /* U+7B20 */
+      '?', /* U+7B21 */
+      '?', /* U+7B22 */
+      '?', /* U+7B23 */
+      '?', /* U+7B24 */
+   0x9079, /* U+7B25 */
+   0x9584, /* U+7B26 */
+      '?', /* U+7B27 */
+   0xe29c, /* U+7B28 */
+      '?', /* U+7B29 */
+      '?', /* U+7B2A */
+      '?', /* U+7B2B */
+   0x91e6, /* U+7B2C */
+      '?', /* U+7B2D */
+      '?', /* U+7B2E */
+      '?', /* U+7B2F */
+      '?', /* U+7B30 */
+      '?', /* U+7B31 */
+      '?', /* U+7B32 */
+   0xe297, /* U+7B33 */
+      '?', /* U+7B34 */
+   0xe29b, /* U+7B35 */
+   0xe29d, /* U+7B36 */
+      '?', /* U+7B37 */
+      '?', /* U+7B38 */
+   0x8df9, /* U+7B39 */
+      '?', /* U+7B3A */
+      '?', /* U+7B3B */
+      '?', /* U+7B3C */
+      '?', /* U+7B3D */
+      '?', /* U+7B3E */
+      '?', /* U+7B3F */
+      '?', /* U+7B40 */
+      '?', /* U+7B41 */
+      '?', /* U+7B42 */
+      '?', /* U+7B43 */
+      '?', /* U+7B44 */
+   0xe2a4, /* U+7B45 */
+   0x954d, /* U+7B46 */
+      '?', /* U+7B47 */
+   0x94a4, /* U+7B48 */
+   0x9399, /* U+7B49 */
+      '?', /* U+7B4A */
+   0x8bd8, /* U+7B4B */
+   0xe2a3, /* U+7B4C */
+   0xe2a1, /* U+7B4D */
+      '?', /* U+7B4E */
+   0x94b3, /* U+7B4F */
+   0xe29e, /* U+7B50 */
+   0x927d, /* U+7B51 */
+   0x939b, /* U+7B52 */
+      '?', /* U+7B53 */
+   0x939a, /* U+7B54 */
+      '?', /* U+7B55 */
+   0x8df4, /* U+7B56 */
+      '?', /* U+7B57 */
+      '?', /* U+7B58 */
+      '?', /* U+7B59 */
+      '?', /* U+7B5A */
+      '?', /* U+7B5B */
+      '?', /* U+7B5C */
+   0xe2b6, /* U+7B5D */
+      '?', /* U+7B5E */
+      '?', /* U+7B5F */
+      '?', /* U+7B60 */
+      '?', /* U+7B61 */
+      '?', /* U+7B62 */
+      '?', /* U+7B63 */
+      '?', /* U+7B64 */
+   0xe2a6, /* U+7B65 */
+      '?', /* U+7B66 */
+   0xe2a8, /* U+7B67 */
+      '?', /* U+7B68 */
+      '?', /* U+7B69 */
+      '?', /* U+7B6A */
+      '?', /* U+7B6B */
+   0xe2ab, /* U+7B6C */
+      '?', /* U+7B6D */
+   0xe2ac, /* U+7B6E */
+      '?', /* U+7B6F */
+   0xe2a9, /* U+7B70 */
+   0xe2aa, /* U+7B71 */
+      '?', /* U+7B72 */
+      '?', /* U+7B73 */
+   0xe2a7, /* U+7B74 */
+   0xe2a5, /* U+7B75 */
+      '?', /* U+7B76 */
+      '?', /* U+7B77 */
+      '?', /* U+7B78 */
+      '?', /* U+7B79 */
+   0xe29f, /* U+7B7A */
+      '?', /* U+7B7B */
+      '?', /* U+7B7C */
+      '?', /* U+7B7D */
+      '?', /* U+7B7E */
+      '?', /* U+7B7F */
+      '?', /* U+7B80 */
+      '?', /* U+7B81 */
+      '?', /* U+7B82 */
+      '?', /* U+7B83 */
+      '?', /* U+7B84 */
+      '?', /* U+7B85 */
+   0x95cd, /* U+7B86 */
+   0x89d3, /* U+7B87 */
+      '?', /* U+7B88 */
+      '?', /* U+7B89 */
+      '?', /* U+7B8A */
+   0xe2b3, /* U+7B8B */
+      '?', /* U+7B8C */
+   0xe2b0, /* U+7B8D */
+      '?', /* U+7B8E */
+   0xe2b5, /* U+7B8F */
+      '?', /* U+7B90 */
+      '?', /* U+7B91 */
+   0xe2b4, /* U+7B92 */
+      '?', /* U+7B93 */
+   0x9493, /* U+7B94 */
+   0x96a5, /* U+7B95 */
+      '?', /* U+7B96 */
+   0x8e5a, /* U+7B97 */
+   0xe2ae, /* U+7B98 */
+   0xe2b7, /* U+7B99 */
+   0xe2b2, /* U+7B9A */
+      '?', /* U+7B9B */
+   0xe2b1, /* U+7B9C */
+   0xe2ad, /* U+7B9D */
+   0xfb88, /* U+7B9E */
+   0xe2af, /* U+7B9F */
+      '?', /* U+7BA0 */
+   0x8ac7, /* U+7BA1 */
+      '?', /* U+7BA2 */
+      '?', /* U+7BA3 */
+      '?', /* U+7BA4 */
+      '?', /* U+7BA5 */
+      '?', /* U+7BA6 */
+      '?', /* U+7BA7 */
+      '?', /* U+7BA8 */
+      '?', /* U+7BA9 */
+   0x925c, /* U+7BAA */
+      '?', /* U+7BAB */
+      '?', /* U+7BAC */
+   0x90fb, /* U+7BAD */
+      '?', /* U+7BAE */
+      '?', /* U+7BAF */
+      '?', /* U+7BB0 */
+   0x94a0, /* U+7BB1 */
+      '?', /* U+7BB2 */
+      '?', /* U+7BB3 */
+   0xe2bc, /* U+7BB4 */
+      '?', /* U+7BB5 */
+      '?', /* U+7BB6 */
+      '?', /* U+7BB7 */
+   0x94a2, /* U+7BB8 */
+      '?', /* U+7BB9 */
+      '?', /* U+7BBA */
+      '?', /* U+7BBB */
+      '?', /* U+7BBC */
+      '?', /* U+7BBD */
+      '?', /* U+7BBE */
+      '?', /* U+7BBF */
+   0x90df, /* U+7BC0 */
+   0xe2b9, /* U+7BC1 */
+      '?', /* U+7BC2 */
+      '?', /* U+7BC3 */
+   0x94cd, /* U+7BC4 */
+      '?', /* U+7BC5 */
+   0xe2bd, /* U+7BC6 */
+   0x95d1, /* U+7BC7 */
+      '?', /* U+7BC8 */
+   0x927a, /* U+7BC9 */
+      '?', /* U+7BCA */
+   0xe2b8, /* U+7BCB */
+   0xe2ba, /* U+7BCC */
+      '?', /* U+7BCD */
+      '?', /* U+7BCE */
+   0xe2bb, /* U+7BCF */
+      '?', /* U+7BD0 */
+      '?', /* U+7BD1 */
+      '?', /* U+7BD2 */
+      '?', /* U+7BD3 */
+      '?', /* U+7BD4 */
+      '?', /* U+7BD5 */
+      '?', /* U+7BD6 */
+      '?', /* U+7BD7 */
+      '?', /* U+7BD8 */
+      '?', /* U+7BD9 */
+      '?', /* U+7BDA */
+      '?', /* U+7BDB */
+      '?', /* U+7BDC */
+   0xe2be, /* U+7BDD */
+      '?', /* U+7BDE */
+      '?', /* U+7BDF */
+   0x8ec2, /* U+7BE0 */
+      '?', /* U+7BE1 */
+      '?', /* U+7BE2 */
+      '?', /* U+7BE3 */
+   0x93c4, /* U+7BE4 */
+   0xe2c3, /* U+7BE5 */
+   0xe2c2, /* U+7BE6 */
+      '?', /* U+7BE7 */
+      '?', /* U+7BE8 */
+   0xe2bf, /* U+7BE9 */
+      '?', /* U+7BEA */
+      '?', /* U+7BEB */
+      '?', /* U+7BEC */
+   0x9855, /* U+7BED */
+      '?', /* U+7BEE */
+      '?', /* U+7BEF */
+      '?', /* U+7BF0 */
+      '?', /* U+7BF1 */
+      '?', /* U+7BF2 */
+   0xe2c8, /* U+7BF3 */
+      '?', /* U+7BF4 */
+      '?', /* U+7BF5 */
+   0xe2cc, /* U+7BF6 */
+   0xe2c9, /* U+7BF7 */
+      '?', /* U+7BF8 */
+      '?', /* U+7BF9 */
+      '?', /* U+7BFA */
+      '?', /* U+7BFB */
+      '?', /* U+7BFC */
+      '?', /* U+7BFD */
+      '?', /* U+7BFE */
+      '?', /* U+7BFF */
+   0xe2c5, /* U+7C00 */
+      '?', /* U+7C01 */
+      '?', /* U+7C02 */
+      '?', /* U+7C03 */
+      '?', /* U+7C04 */
+      '?', /* U+7C05 */
+      '?', /* U+7C06 */
+   0xe2c6, /* U+7C07 */
+      '?', /* U+7C08 */
+      '?', /* U+7C09 */
+      '?', /* U+7C0A */
+      '?', /* U+7C0B */
+      '?', /* U+7C0C */
+   0xe2cb, /* U+7C0D */
+      '?', /* U+7C0E */
+      '?', /* U+7C0F */
+      '?', /* U+7C10 */
+   0xe2c0, /* U+7C11 */
+   0x99d3, /* U+7C12 */
+   0xe2c7, /* U+7C13 */
+   0xe2c1, /* U+7C14 */
+      '?', /* U+7C15 */
+      '?', /* U+7C16 */
+   0xe2ca, /* U+7C17 */
+      '?', /* U+7C18 */
+      '?', /* U+7C19 */
+      '?', /* U+7C1A */
+      '?', /* U+7C1B */
+      '?', /* U+7C1C */
+      '?', /* U+7C1D */
+      '?', /* U+7C1E */
+   0xe2d0, /* U+7C1F */
+      '?', /* U+7C20 */
+   0x8ac8, /* U+7C21 */
+      '?', /* U+7C22 */
+   0xe2cd, /* U+7C23 */
+      '?', /* U+7C24 */
+      '?', /* U+7C25 */
+      '?', /* U+7C26 */
+   0xe2ce, /* U+7C27 */
+      '?', /* U+7C28 */
+      '?', /* U+7C29 */
+   0xe2cf, /* U+7C2A */
+   0xe2d2, /* U+7C2B */
+      '?', /* U+7C2C */
+      '?', /* U+7C2D */
+      '?', /* U+7C2E */
+      '?', /* U+7C2F */
+      '?', /* U+7C30 */
+      '?', /* U+7C31 */
+      '?', /* U+7C32 */
+      '?', /* U+7C33 */
+      '?', /* U+7C34 */
+      '?', /* U+7C35 */
+      '?', /* U+7C36 */
+   0xe2d1, /* U+7C37 */
+   0x94f4, /* U+7C38 */
+      '?', /* U+7C39 */
+      '?', /* U+7C3A */
+      '?', /* U+7C3B */
+      '?', /* U+7C3C */
+   0xe2d3, /* U+7C3D */
+   0x97fa, /* U+7C3E */
+   0x95eb, /* U+7C3F */
+   0xe2d8, /* U+7C40 */
+      '?', /* U+7C41 */
+      '?', /* U+7C42 */
+   0xe2d5, /* U+7C43 */
+      '?', /* U+7C44 */
+      '?', /* U+7C45 */
+      '?', /* U+7C46 */
+      '?', /* U+7C47 */
+      '?', /* U+7C48 */
+      '?', /* U+7C49 */
+      '?', /* U+7C4A */
+      '?', /* U+7C4B */
+   0xe2d4, /* U+7C4C */
+   0x90d0, /* U+7C4D */
+      '?', /* U+7C4E */
+   0xe2d7, /* U+7C4F */
+   0xe2d9, /* U+7C50 */
+      '?', /* U+7C51 */
+      '?', /* U+7C52 */
+      '?', /* U+7C53 */
+   0xe2d6, /* U+7C54 */
+      '?', /* U+7C55 */
+   0xe2dd, /* U+7C56 */
+      '?', /* U+7C57 */
+   0xe2da, /* U+7C58 */
+      '?', /* U+7C59 */
+      '?', /* U+7C5A */
+      '?', /* U+7C5B */
+      '?', /* U+7C5C */
+      '?', /* U+7C5D */
+      '?', /* U+7C5E */
+   0xe2db, /* U+7C5F */
+   0xe2c4, /* U+7C60 */
+      '?', /* U+7C61 */
+      '?', /* U+7C62 */
+      '?', /* U+7C63 */
+   0xe2dc, /* U+7C64 */
+   0xe2de, /* U+7C65 */
+      '?', /* U+7C66 */
+      '?', /* U+7C67 */
+      '?', /* U+7C68 */
+      '?', /* U+7C69 */
+      '?', /* U+7C6A */
+      '?', /* U+7C6B */
+   0xe2df, /* U+7C6C */
+      '?', /* U+7C6D */
+      '?', /* U+7C6E */
+      '?', /* U+7C6F */
+      '?', /* U+7C70 */
+      '?', /* U+7C71 */
+      '?', /* U+7C72 */
+   0x95c4, /* U+7C73 */
+      '?', /* U+7C74 */
+   0xe2e0, /* U+7C75 */
+      '?', /* U+7C76 */
+      '?', /* U+7C77 */
+      '?', /* U+7C78 */
+      '?', /* U+7C79 */
+      '?', /* U+7C7A */
+      '?', /* U+7C7B */
+      '?', /* U+7C7C */
+      '?', /* U+7C7D */
+   0x96e0, /* U+7C7E */
+      '?', /* U+7C7F */
+      '?', /* U+7C80 */
+   0x8bcc, /* U+7C81 */
+   0x8c48, /* U+7C82 */
+   0xe2e1, /* U+7C83 */
+      '?', /* U+7C84 */
+      '?', /* U+7C85 */
+      '?', /* U+7C86 */
+      '?', /* U+7C87 */
+      '?', /* U+7C88 */
+   0x95b2, /* U+7C89 */
+      '?', /* U+7C8A */
+   0x9088, /* U+7C8B */
+      '?', /* U+7C8C */
+   0x96ae, /* U+7C8D */
+      '?', /* U+7C8E */
+      '?', /* U+7C8F */
+   0xe2e2, /* U+7C90 */
+      '?', /* U+7C91 */
+   0x97b1, /* U+7C92 */
+      '?', /* U+7C93 */
+      '?', /* U+7C94 */
+   0x9494, /* U+7C95 */
+      '?', /* U+7C96 */
+   0x9165, /* U+7C97 */
+   0x9453, /* U+7C98 */
+      '?', /* U+7C99 */
+      '?', /* U+7C9A */
+   0x8f6c, /* U+7C9B */
+      '?', /* U+7C9C */
+      '?', /* U+7C9D */
+      '?', /* U+7C9E */
+   0x88be, /* U+7C9F */
+      '?', /* U+7CA0 */
+   0xe2e7, /* U+7CA1 */
+   0xe2e5, /* U+7CA2 */
+      '?', /* U+7CA3 */
+   0xe2e3, /* U+7CA4 */
+   0x8a9f, /* U+7CA5 */
+      '?', /* U+7CA6 */
+   0x8fcf, /* U+7CA7 */
+   0xe2e8, /* U+7CA8 */
+      '?', /* U+7CA9 */
+      '?', /* U+7CAA */
+   0xe2e6, /* U+7CAB */
+      '?', /* U+7CAC */
+   0xe2e4, /* U+7CAD */
+   0xe2ec, /* U+7CAE */
+      '?', /* U+7CAF */
+      '?', /* U+7CB0 */
+   0xe2eb, /* U+7CB1 */
+   0xe2ea, /* U+7CB2 */
+   0xe2e9, /* U+7CB3 */
+      '?', /* U+7CB4 */
+      '?', /* U+7CB5 */
+      '?', /* U+7CB6 */
+      '?', /* U+7CB7 */
+      '?', /* U+7CB8 */
+   0xe2ed, /* U+7CB9 */
+      '?', /* U+7CBA */
+      '?', /* U+7CBB */
+      '?', /* U+7CBC */
+   0xe2ee, /* U+7CBD */
+   0x90b8, /* U+7CBE */
+      '?', /* U+7CBF */
+   0xe2ef, /* U+7CC0 */
+      '?', /* U+7CC1 */
+   0xe2f1, /* U+7CC2 */
+      '?', /* U+7CC3 */
+      '?', /* U+7CC4 */
+   0xe2f0, /* U+7CC5 */
+      '?', /* U+7CC6 */
+      '?', /* U+7CC7 */
+      '?', /* U+7CC8 */
+      '?', /* U+7CC9 */
+   0x8cd0, /* U+7CCA */
+      '?', /* U+7CCB */
+      '?', /* U+7CCC */
+      '?', /* U+7CCD */
+   0x9157, /* U+7CCE */
+      '?', /* U+7CCF */
+      '?', /* U+7CD0 */
+      '?', /* U+7CD1 */
+   0xe2f3, /* U+7CD2 */
+      '?', /* U+7CD3 */
+      '?', /* U+7CD4 */
+      '?', /* U+7CD5 */
+   0x939c, /* U+7CD6 */
+      '?', /* U+7CD7 */
+   0xe2f2, /* U+7CD8 */
+      '?', /* U+7CD9 */
+      '?', /* U+7CDA */
+      '?', /* U+7CDB */
+   0xe2f4, /* U+7CDC */
+      '?', /* U+7CDD */
+   0x95b3, /* U+7CDE */
+   0x918c, /* U+7CDF */
+   0x8d66, /* U+7CE0 */
+      '?', /* U+7CE1 */
+   0xe2f5, /* U+7CE2 */
+      '?', /* U+7CE3 */
+      '?', /* U+7CE4 */
+      '?', /* U+7CE5 */
+      '?', /* U+7CE6 */
+   0x97c6, /* U+7CE7 */
+      '?', /* U+7CE8 */
+      '?', /* U+7CE9 */
+      '?', /* U+7CEA */
+      '?', /* U+7CEB */
+      '?', /* U+7CEC */
+      '?', /* U+7CED */
+      '?', /* U+7CEE */
+   0xe2f7, /* U+7CEF */
+      '?', /* U+7CF0 */
+      '?', /* U+7CF1 */
+   0xe2f8, /* U+7CF2 */
+      '?', /* U+7CF3 */
+   0xe2f9, /* U+7CF4 */
+      '?', /* U+7CF5 */
+   0xe2fa, /* U+7CF6 */
+      '?', /* U+7CF7 */
+   0x8e85, /* U+7CF8 */
+      '?', /* U+7CF9 */
+   0xe2fb, /* U+7CFA */
+   0x8c6e, /* U+7CFB */
+      '?', /* U+7CFC */
+      '?', /* U+7CFD */
+   0x8b8a, /* U+7CFE */
+      '?', /* U+7CFF */
+   0x8b49, /* U+7D00 */
+      '?', /* U+7D01 */
+   0xe340, /* U+7D02 */
+      '?', /* U+7D03 */
+   0x96f1, /* U+7D04 */
+   0x8d67, /* U+7D05 */
+   0xe2fc, /* U+7D06 */
+      '?', /* U+7D07 */
+      '?', /* U+7D08 */
+      '?', /* U+7D09 */
+   0xe343, /* U+7D0A */
+   0x96e4, /* U+7D0B */
+      '?', /* U+7D0C */
+   0x945b, /* U+7D0D */
+      '?', /* U+7D0E */
+      '?', /* U+7D0F */
+   0x9552, /* U+7D10 */
+      '?', /* U+7D11 */
+      '?', /* U+7D12 */
+      '?', /* U+7D13 */
+   0x8f83, /* U+7D14 */
+   0xe342, /* U+7D15 */
+      '?', /* U+7D16 */
+   0x8ed1, /* U+7D17 */
+   0x8d68, /* U+7D18 */
+   0x8e86, /* U+7D19 */
+   0x8b89, /* U+7D1A */
+   0x95b4, /* U+7D1B */
+   0xe341, /* U+7D1C */
+      '?', /* U+7D1D */
+      '?', /* U+7D1E */
+      '?', /* U+7D1F */
+   0x9166, /* U+7D20 */
+   0x9661, /* U+7D21 */
+   0x8df5, /* U+7D22 */
+      '?', /* U+7D23 */
+      '?', /* U+7D24 */
+      '?', /* U+7D25 */
+      '?', /* U+7D26 */
+      '?', /* U+7D27 */
+      '?', /* U+7D28 */
+      '?', /* U+7D29 */
+      '?', /* U+7D2A */
+   0x8e87, /* U+7D2B */
+   0x92db, /* U+7D2C */
+      '?', /* U+7D2D */
+   0xe346, /* U+7D2E */
+   0x97dd, /* U+7D2F */
+   0x8dd7, /* U+7D30 */
+      '?', /* U+7D31 */
+   0xe347, /* U+7D32 */
+   0x9061, /* U+7D33 */
+      '?', /* U+7D34 */
+   0xe349, /* U+7D35 */
+      '?', /* U+7D36 */
+      '?', /* U+7D37 */
+      '?', /* U+7D38 */
+   0x8fd0, /* U+7D39 */
+   0x8dae, /* U+7D3A */
+      '?', /* U+7D3B */
+      '?', /* U+7D3C */
+      '?', /* U+7D3D */
+      '?', /* U+7D3E */
+   0xe348, /* U+7D3F */
+      '?', /* U+7D40 */
+      '?', /* U+7D41 */
+   0x8f49, /* U+7D42 */
+   0x8cbc, /* U+7D43 */
+   0x9167, /* U+7D44 */
+   0xe344, /* U+7D45 */
+   0xe34a, /* U+7D46 */
+      '?', /* U+7D47 */
+   0xfb8a, /* U+7D48 */
+      '?', /* U+7D49 */
+      '?', /* U+7D4A */
+   0xe345, /* U+7D4B */
+   0x8c6f, /* U+7D4C */
+      '?', /* U+7D4D */
+   0xe34d, /* U+7D4E */
+   0xe351, /* U+7D4F */
+   0x8c8b, /* U+7D50 */
+      '?', /* U+7D51 */
+      '?', /* U+7D52 */
+      '?', /* U+7D53 */
+      '?', /* U+7D54 */
+      '?', /* U+7D55 */
+   0xe34c, /* U+7D56 */
+      '?', /* U+7D57 */
+      '?', /* U+7D58 */
+      '?', /* U+7D59 */
+      '?', /* U+7D5A */
+   0xe355, /* U+7D5B */
+   0xfb8b, /* U+7D5C */
+      '?', /* U+7D5D */
+   0x8d69, /* U+7D5E */
+      '?', /* U+7D5F */
+      '?', /* U+7D60 */
+   0x978d, /* U+7D61 */
+   0x88ba, /* U+7D62 */
+   0xe352, /* U+7D63 */
+      '?', /* U+7D64 */
+      '?', /* U+7D65 */
+   0x8b8b, /* U+7D66 */
+      '?', /* U+7D67 */
+   0xe34f, /* U+7D68 */
+      '?', /* U+7D69 */
+      '?', /* U+7D6A */
+      '?', /* U+7D6B */
+      '?', /* U+7D6C */
+      '?', /* U+7D6D */
+   0xe350, /* U+7D6E */
+      '?', /* U+7D6F */
+      '?', /* U+7D70 */
+   0x939d, /* U+7D71 */
+   0xe34e, /* U+7D72 */
+   0xe34b, /* U+7D73 */
+      '?', /* U+7D74 */
+   0x8a47, /* U+7D75 */
+   0x90e2, /* U+7D76 */
+      '?', /* U+7D77 */
+      '?', /* U+7D78 */
+   0x8ca6, /* U+7D79 */
+      '?', /* U+7D7A */
+      '?', /* U+7D7B */
+      '?', /* U+7D7C */
+   0xe357, /* U+7D7D */
+      '?', /* U+7D7E */
+      '?', /* U+7D7F */
+      '?', /* U+7D80 */
+      '?', /* U+7D81 */
+      '?', /* U+7D82 */
+      '?', /* U+7D83 */
+      '?', /* U+7D84 */
+      '?', /* U+7D85 */
+      '?', /* U+7D86 */
+      '?', /* U+7D87 */
+      '?', /* U+7D88 */
+   0xe354, /* U+7D89 */
+      '?', /* U+7D8A */
+      '?', /* U+7D8B */
+      '?', /* U+7D8C */
+      '?', /* U+7D8D */
+      '?', /* U+7D8E */
+   0xe356, /* U+7D8F */
+      '?', /* U+7D90 */
+      '?', /* U+7D91 */
+      '?', /* U+7D92 */
+   0xe353, /* U+7D93 */
+      '?', /* U+7D94 */
+      '?', /* U+7D95 */
+      '?', /* U+7D96 */
+      '?', /* U+7D97 */
+      '?', /* U+7D98 */
+   0x8c70, /* U+7D99 */
+   0x91b1, /* U+7D9A */
+   0xe358, /* U+7D9B */
+   0x918e, /* U+7D9C */
+      '?', /* U+7D9D */
+      '?', /* U+7D9E */
+   0xe365, /* U+7D9F */
+   0xfb8d, /* U+7DA0 */
+      '?', /* U+7DA1 */
+   0xe361, /* U+7DA2 */
+   0xe35b, /* U+7DA3 */
+      '?', /* U+7DA4 */
+      '?', /* U+7DA5 */
+      '?', /* U+7DA6 */
+      '?', /* U+7DA7 */
+      '?', /* U+7DA8 */
+      '?', /* U+7DA9 */
+      '?', /* U+7DAA */
+   0xe35f, /* U+7DAB */
+   0x8ef8, /* U+7DAC */
+   0x88db, /* U+7DAD */
+   0xe35a, /* U+7DAE */
+   0xe362, /* U+7DAF */
+   0xe366, /* U+7DB0 */
+   0x8d6a, /* U+7DB1 */
+   0x96d4, /* U+7DB2 */
+      '?', /* U+7DB3 */
+   0x92d4, /* U+7DB4 */
+   0xe35c, /* U+7DB5 */
+      '?', /* U+7DB6 */
+   0xfb8c, /* U+7DB7 */
+   0xe364, /* U+7DB8 */
+      '?', /* U+7DB9 */
+   0xe359, /* U+7DBA */
+   0x925d, /* U+7DBB */
+      '?', /* U+7DBC */
+   0xe35e, /* U+7DBD */
+   0x88bb, /* U+7DBE */
+   0x96c8, /* U+7DBF */
+      '?', /* U+7DC0 */
+      '?', /* U+7DC1 */
+      '?', /* U+7DC2 */
+      '?', /* U+7DC3 */
+      '?', /* U+7DC4 */
+      '?', /* U+7DC5 */
+      '?', /* U+7DC6 */
+   0xe35d, /* U+7DC7 */
+      '?', /* U+7DC8 */
+      '?', /* U+7DC9 */
+   0x8bd9, /* U+7DCA */
+   0x94ea, /* U+7DCB */
+      '?', /* U+7DCC */
+      '?', /* U+7DCD */
+      '?', /* U+7DCE */
+   0x918d, /* U+7DCF */
+      '?', /* U+7DD0 */
+   0x97ce, /* U+7DD1 */
+   0x8f8f, /* U+7DD2 */
+      '?', /* U+7DD3 */
+      '?', /* U+7DD4 */
+   0xe38e, /* U+7DD5 */
+   0xfb8e, /* U+7DD6 */
+      '?', /* U+7DD7 */
+   0xe367, /* U+7DD8 */
+      '?', /* U+7DD9 */
+   0x90fc, /* U+7DDA */
+      '?', /* U+7DDB */
+   0xe363, /* U+7DDC */
+   0xe368, /* U+7DDD */
+   0xe36a, /* U+7DDE */
+      '?', /* U+7DDF */
+   0x92f7, /* U+7DE0 */
+   0xe36d, /* U+7DE1 */
+      '?', /* U+7DE2 */
+      '?', /* U+7DE3 */
+   0xe369, /* U+7DE4 */
+      '?', /* U+7DE5 */
+      '?', /* U+7DE6 */
+      '?', /* U+7DE7 */
+   0x95d2, /* U+7DE8 */
+   0x8ac9, /* U+7DE9 */
+      '?', /* U+7DEA */
+      '?', /* U+7DEB */
+   0x96c9, /* U+7DEC */
+      '?', /* U+7DED */
+      '?', /* U+7DEE */
+   0x88dc, /* U+7DEF */
+      '?', /* U+7DF0 */
+      '?', /* U+7DF1 */
+   0xe36c, /* U+7DF2 */
+      '?', /* U+7DF3 */
+   0x97fb, /* U+7DF4 */
+      '?', /* U+7DF5 */
+      '?', /* U+7DF6 */
+      '?', /* U+7DF7 */
+      '?', /* U+7DF8 */
+      '?', /* U+7DF9 */
+      '?', /* U+7DFA */
+   0xe36b, /* U+7DFB */
+      '?', /* U+7DFC */
+      '?', /* U+7DFD */
+      '?', /* U+7DFE */
+      '?', /* U+7DFF */
+      '?', /* U+7E00 */
+   0x898f, /* U+7E01 */
+      '?', /* U+7E02 */
+      '?', /* U+7E03 */
+   0x93ea, /* U+7E04 */
+   0xe36e, /* U+7E05 */
+      '?', /* U+7E06 */
+      '?', /* U+7E07 */
+      '?', /* U+7E08 */
+   0xe375, /* U+7E09 */
+   0xe36f, /* U+7E0A */
+   0xe376, /* U+7E0B */
+      '?', /* U+7E0C */
+      '?', /* U+7E0D */
+      '?', /* U+7E0E */
+      '?', /* U+7E0F */
+      '?', /* U+7E10 */
+      '?', /* U+7E11 */
+   0xe372, /* U+7E12 */
+      '?', /* U+7E13 */
+      '?', /* U+7E14 */
+      '?', /* U+7E15 */
+      '?', /* U+7E16 */
+      '?', /* U+7E17 */
+      '?', /* U+7E18 */
+      '?', /* U+7E19 */
+      '?', /* U+7E1A */
+   0x949b, /* U+7E1B */
+      '?', /* U+7E1C */
+      '?', /* U+7E1D */
+   0x8ec8, /* U+7E1E */
+   0xe374, /* U+7E1F */
+      '?', /* U+7E20 */
+   0xe371, /* U+7E21 */
+   0xe377, /* U+7E22 */
+   0xe370, /* U+7E23 */
+      '?', /* U+7E24 */
+      '?', /* U+7E25 */
+   0x8f63, /* U+7E26 */
+      '?', /* U+7E27 */
+      '?', /* U+7E28 */
+      '?', /* U+7E29 */
+      '?', /* U+7E2A */
+   0x9644, /* U+7E2B */
+      '?', /* U+7E2C */
+      '?', /* U+7E2D */
+   0x8f6b, /* U+7E2E */
+      '?', /* U+7E2F */
+      '?', /* U+7E30 */
+   0xe373, /* U+7E31 */
+   0xe380, /* U+7E32 */
+      '?', /* U+7E33 */
+      '?', /* U+7E34 */
+   0xe37b, /* U+7E35 */
+      '?', /* U+7E36 */
+   0xe37e, /* U+7E37 */
+      '?', /* U+7E38 */
+   0xe37c, /* U+7E39 */
+   0xe381, /* U+7E3A */
+   0xe37a, /* U+7E3B */
+      '?', /* U+7E3C */
+   0xe360, /* U+7E3D */
+   0x90d1, /* U+7E3E */
+      '?', /* U+7E3F */
+      '?', /* U+7E40 */
+   0x94c9, /* U+7E41 */
+      '?', /* U+7E42 */
+   0xe37d, /* U+7E43 */
+      '?', /* U+7E44 */
+      '?', /* U+7E45 */
+   0xe378, /* U+7E46 */
+      '?', /* U+7E47 */
+      '?', /* U+7E48 */
+      '?', /* U+7E49 */
+   0x9140, /* U+7E4A */
+   0x8c71, /* U+7E4B */
+      '?', /* U+7E4C */
+   0x8f4a, /* U+7E4D */
+      '?', /* U+7E4E */
+      '?', /* U+7E4F */
+      '?', /* U+7E50 */
+      '?', /* U+7E51 */
+   0xfb8f, /* U+7E52 */
+      '?', /* U+7E53 */
+   0x9044, /* U+7E54 */
+   0x9155, /* U+7E55 */
+   0xe384, /* U+7E56 */
+      '?', /* U+7E57 */
+      '?', /* U+7E58 */
+   0xe386, /* U+7E59 */
+   0xe387, /* U+7E5A */
+      '?', /* U+7E5B */
+      '?', /* U+7E5C */
+   0xe383, /* U+7E5D */
+   0xe385, /* U+7E5E */
+      '?', /* U+7E5F */
+      '?', /* U+7E60 */
+      '?', /* U+7E61 */
+      '?', /* U+7E62 */
+      '?', /* U+7E63 */
+      '?', /* U+7E64 */
+      '?', /* U+7E65 */
+   0xe379, /* U+7E66 */
+   0xe382, /* U+7E67 */
+      '?', /* U+7E68 */
+   0xe38a, /* U+7E69 */
+   0xe389, /* U+7E6A */
+      '?', /* U+7E6B */
+      '?', /* U+7E6C */
+   0x969a, /* U+7E6D */
+      '?', /* U+7E6E */
+      '?', /* U+7E6F */
+   0x8c4a, /* U+7E70 */
+      '?', /* U+7E71 */
+      '?', /* U+7E72 */
+      '?', /* U+7E73 */
+      '?', /* U+7E74 */
+      '?', /* U+7E75 */
+      '?', /* U+7E76 */
+      '?', /* U+7E77 */
+      '?', /* U+7E78 */
+   0xe388, /* U+7E79 */
+      '?', /* U+7E7A */
+   0xe38c, /* U+7E7B */
+   0xe38b, /* U+7E7C */
+   0xe38f, /* U+7E7D */
+      '?', /* U+7E7E */
+   0xe391, /* U+7E7F */
+      '?', /* U+7E80 */
+      '?', /* U+7E81 */
+   0x8e5b, /* U+7E82 */
+   0xe38d, /* U+7E83 */
+      '?', /* U+7E84 */
+      '?', /* U+7E85 */
+      '?', /* U+7E86 */
+      '?', /* U+7E87 */
+   0xe392, /* U+7E88 */
+   0xe393, /* U+7E89 */
+   0xfa5c, /* U+7E8A */
+      '?', /* U+7E8B */
+   0xe394, /* U+7E8C */
+      '?', /* U+7E8D */
+   0xe39a, /* U+7E8E */
+   0x935a, /* U+7E8F */
+   0xe396, /* U+7E90 */
+      '?', /* U+7E91 */
+   0xe395, /* U+7E92 */
+   0xe397, /* U+7E93 */
+   0xe398, /* U+7E94 */
+      '?', /* U+7E95 */
+   0xe399, /* U+7E96 */
+      '?', /* U+7E97 */
+      '?', /* U+7E98 */
+      '?', /* U+7E99 */
+      '?', /* U+7E9A */
+   0xe39b, /* U+7E9B */
+   0xe39c, /* U+7E9C */
+      '?', /* U+7E9D */
+      '?', /* U+7E9E */
+      '?', /* U+7E9F */
+      '?', /* U+7EA0 */
+      '?', /* U+7EA1 */
+      '?', /* U+7EA2 */
+      '?', /* U+7EA3 */
+      '?', /* U+7EA4 */
+      '?', /* U+7EA5 */
+      '?', /* U+7EA6 */
+      '?', /* U+7EA7 */
+      '?', /* U+7EA8 */
+      '?', /* U+7EA9 */
+      '?', /* U+7EAA */
+      '?', /* U+7EAB */
+      '?', /* U+7EAC */
+      '?', /* U+7EAD */
+      '?', /* U+7EAE */
+      '?', /* U+7EAF */
+      '?', /* U+7EB0 */
+      '?', /* U+7EB1 */
+      '?', /* U+7EB2 */
+      '?', /* U+7EB3 */
+      '?', /* U+7EB4 */
+      '?', /* U+7EB5 */
+      '?', /* U+7EB6 */
+      '?', /* U+7EB7 */
+      '?', /* U+7EB8 */
+      '?', /* U+7EB9 */
+      '?', /* U+7EBA */
+      '?', /* U+7EBB */
+      '?', /* U+7EBC */
+      '?', /* U+7EBD */
+      '?', /* U+7EBE */
+      '?', /* U+7EBF */
+      '?', /* U+7EC0 */
+      '?', /* U+7EC1 */
+      '?', /* U+7EC2 */
+      '?', /* U+7EC3 */
+      '?', /* U+7EC4 */
+      '?', /* U+7EC5 */
+      '?', /* U+7EC6 */
+      '?', /* U+7EC7 */
+      '?', /* U+7EC8 */
+      '?', /* U+7EC9 */
+      '?', /* U+7ECA */
+      '?', /* U+7ECB */
+      '?', /* U+7ECC */
+      '?', /* U+7ECD */
+      '?', /* U+7ECE */
+      '?', /* U+7ECF */
+      '?', /* U+7ED0 */
+      '?', /* U+7ED1 */
+      '?', /* U+7ED2 */
+      '?', /* U+7ED3 */
+      '?', /* U+7ED4 */
+      '?', /* U+7ED5 */
+      '?', /* U+7ED6 */
+      '?', /* U+7ED7 */
+      '?', /* U+7ED8 */
+      '?', /* U+7ED9 */
+      '?', /* U+7EDA */
+      '?', /* U+7EDB */
+      '?', /* U+7EDC */
+      '?', /* U+7EDD */
+      '?', /* U+7EDE */
+      '?', /* U+7EDF */
+      '?', /* U+7EE0 */
+      '?', /* U+7EE1 */
+      '?', /* U+7EE2 */
+      '?', /* U+7EE3 */
+      '?', /* U+7EE4 */
+      '?', /* U+7EE5 */
+      '?', /* U+7EE6 */
+      '?', /* U+7EE7 */
+      '?', /* U+7EE8 */
+      '?', /* U+7EE9 */
+      '?', /* U+7EEA */
+      '?', /* U+7EEB */
+      '?', /* U+7EEC */
+      '?', /* U+7EED */
+      '?', /* U+7EEE */
+      '?', /* U+7EEF */
+      '?', /* U+7EF0 */
+      '?', /* U+7EF1 */
+      '?', /* U+7EF2 */
+      '?', /* U+7EF3 */
+      '?', /* U+7EF4 */
+      '?', /* U+7EF5 */
+      '?', /* U+7EF6 */
+      '?', /* U+7EF7 */
+      '?', /* U+7EF8 */
+      '?', /* U+7EF9 */
+      '?', /* U+7EFA */
+      '?', /* U+7EFB */
+      '?', /* U+7EFC */
+      '?', /* U+7EFD */
+      '?', /* U+7EFE */
+      '?', /* U+7EFF */
+      '?', /* U+7F00 */
+      '?', /* U+7F01 */
+      '?', /* U+7F02 */
+      '?', /* U+7F03 */
+      '?', /* U+7F04 */
+      '?', /* U+7F05 */
+      '?', /* U+7F06 */
+      '?', /* U+7F07 */
+      '?', /* U+7F08 */
+      '?', /* U+7F09 */
+      '?', /* U+7F0A */
+      '?', /* U+7F0B */
+      '?', /* U+7F0C */
+      '?', /* U+7F0D */
+      '?', /* U+7F0E */
+      '?', /* U+7F0F */
+      '?', /* U+7F10 */
+      '?', /* U+7F11 */
+      '?', /* U+7F12 */
+      '?', /* U+7F13 */
+      '?', /* U+7F14 */
+      '?', /* U+7F15 */
+      '?', /* U+7F16 */
+      '?', /* U+7F17 */
+      '?', /* U+7F18 */
+      '?', /* U+7F19 */
+      '?', /* U+7F1A */
+      '?', /* U+7F1B */
+      '?', /* U+7F1C */
+      '?', /* U+7F1D */
+      '?', /* U+7F1E */
+      '?', /* U+7F1F */
+      '?', /* U+7F20 */
+      '?', /* U+7F21 */
+      '?', /* U+7F22 */
+      '?', /* U+7F23 */
+      '?', /* U+7F24 */
+      '?', /* U+7F25 */
+      '?', /* U+7F26 */
+      '?', /* U+7F27 */
+      '?', /* U+7F28 */
+      '?', /* U+7F29 */
+      '?', /* U+7F2A */
+      '?', /* U+7F2B */
+      '?', /* U+7F2C */
+      '?', /* U+7F2D */
+      '?', /* U+7F2E */
+      '?', /* U+7F2F */
+      '?', /* U+7F30 */
+      '?', /* U+7F31 */
+      '?', /* U+7F32 */
+      '?', /* U+7F33 */
+      '?', /* U+7F34 */
+      '?', /* U+7F35 */
+   0x8aca, /* U+7F36 */
+      '?', /* U+7F37 */
+   0xe39d, /* U+7F38 */
+      '?', /* U+7F39 */
+   0xe39e, /* U+7F3A */
+      '?', /* U+7F3B */
+      '?', /* U+7F3C */
+      '?', /* U+7F3D */
+      '?', /* U+7F3E */
+      '?', /* U+7F3F */
+      '?', /* U+7F40 */
+      '?', /* U+7F41 */
+      '?', /* U+7F42 */
+      '?', /* U+7F43 */
+      '?', /* U+7F44 */
+   0xe39f, /* U+7F45 */
+      '?', /* U+7F46 */
+   0xfb90, /* U+7F47 */
+      '?', /* U+7F48 */
+      '?', /* U+7F49 */
+      '?', /* U+7F4A */
+      '?', /* U+7F4B */
+   0xe3a0, /* U+7F4C */
+   0xe3a1, /* U+7F4D */
+   0xe3a2, /* U+7F4E */
+      '?', /* U+7F4F */
+   0xe3a3, /* U+7F50 */
+   0xe3a4, /* U+7F51 */
+      '?', /* U+7F52 */
+      '?', /* U+7F53 */
+   0xe3a6, /* U+7F54 */
+   0xe3a5, /* U+7F55 */
+      '?', /* U+7F56 */
+      '?', /* U+7F57 */
+   0xe3a7, /* U+7F58 */
+      '?', /* U+7F59 */
+      '?', /* U+7F5A */
+      '?', /* U+7F5B */
+      '?', /* U+7F5C */
+      '?', /* U+7F5D */
+      '?', /* U+7F5E */
+   0xe3a8, /* U+7F5F */
+   0xe3a9, /* U+7F60 */
+      '?', /* U+7F61 */
+      '?', /* U+7F62 */
+      '?', /* U+7F63 */
+      '?', /* U+7F64 */
+      '?', /* U+7F65 */
+      '?', /* U+7F66 */
+   0xe3ac, /* U+7F67 */
+   0xe3aa, /* U+7F68 */
+   0xe3ab, /* U+7F69 */
+   0x8ddf, /* U+7F6A */
+   0x8c72, /* U+7F6B */
+      '?', /* U+7F6C */
+      '?', /* U+7F6D */
+   0x9275, /* U+7F6E */
+      '?', /* U+7F6F */
+   0x94b1, /* U+7F70 */
+      '?', /* U+7F71 */
+   0x8f90, /* U+7F72 */
+      '?', /* U+7F73 */
+      '?', /* U+7F74 */
+   0x946c, /* U+7F75 */
+      '?', /* U+7F76 */
+   0x94eb, /* U+7F77 */
+   0xe3ad, /* U+7F78 */
+   0x9ceb, /* U+7F79 */
+      '?', /* U+7F7A */
+      '?', /* U+7F7B */
+      '?', /* U+7F7C */
+      '?', /* U+7F7D */
+      '?', /* U+7F7E */
+      '?', /* U+7F7F */
+      '?', /* U+7F80 */
+      '?', /* U+7F81 */
+   0xe3ae, /* U+7F82 */
+   0xe3b0, /* U+7F83 */
+      '?', /* U+7F84 */
+   0x9785, /* U+7F85 */
+   0xe3af, /* U+7F86 */
+   0xe3b2, /* U+7F87 */
+   0xe3b1, /* U+7F88 */
+      '?', /* U+7F89 */
+   0x9772, /* U+7F8A */
+      '?', /* U+7F8B */
+   0xe3b3, /* U+7F8C */
+      '?', /* U+7F8D */
+   0x94fc, /* U+7F8E */
+      '?', /* U+7F8F */
+      '?', /* U+7F90 */
+      '?', /* U+7F91 */
+      '?', /* U+7F92 */
+      '?', /* U+7F93 */
+   0xe3b4, /* U+7F94 */
+      '?', /* U+7F95 */
+      '?', /* U+7F96 */
+      '?', /* U+7F97 */
+      '?', /* U+7F98 */
+      '?', /* U+7F99 */
+   0xe3b7, /* U+7F9A */
+      '?', /* U+7F9B */
+      '?', /* U+7F9C */
+   0xe3b6, /* U+7F9D */
+   0xe3b5, /* U+7F9E */
+      '?', /* U+7F9F */
+      '?', /* U+7FA0 */
+   0xfb91, /* U+7FA1 */
+      '?', /* U+7FA2 */
+   0xe3b8, /* U+7FA3 */
+   0x8c51, /* U+7FA4 */
+      '?', /* U+7FA5 */
+      '?', /* U+7FA6 */
+      '?', /* U+7FA7 */
+   0x9141, /* U+7FA8 */
+   0x8b60, /* U+7FA9 */
+      '?', /* U+7FAA */
+      '?', /* U+7FAB */
+      '?', /* U+7FAC */
+      '?', /* U+7FAD */
+   0xe3bc, /* U+7FAE */
+   0xe3b9, /* U+7FAF */
+      '?', /* U+7FB0 */
+      '?', /* U+7FB1 */
+   0xe3ba, /* U+7FB2 */
+      '?', /* U+7FB3 */
+      '?', /* U+7FB4 */
+      '?', /* U+7FB5 */
+   0xe3bd, /* U+7FB6 */
+      '?', /* U+7FB7 */
+   0xe3be, /* U+7FB8 */
+   0xe3bb, /* U+7FB9 */
+      '?', /* U+7FBA */
+      '?', /* U+7FBB */
+      '?', /* U+7FBC */
+   0x8948, /* U+7FBD */
+      '?', /* U+7FBE */
+      '?', /* U+7FBF */
+      '?', /* U+7FC0 */
+   0x89a5, /* U+7FC1 */
+      '?', /* U+7FC2 */
+      '?', /* U+7FC3 */
+      '?', /* U+7FC4 */
+   0xe3c0, /* U+7FC5 */
+   0xe3c1, /* U+7FC6 */
+      '?', /* U+7FC7 */
+      '?', /* U+7FC8 */
+      '?', /* U+7FC9 */
+   0xe3c2, /* U+7FCA */
+      '?', /* U+7FCB */
+   0x9782, /* U+7FCC */
+      '?', /* U+7FCD */
+      '?', /* U+7FCE */
+      '?', /* U+7FCF */
+      '?', /* U+7FD0 */
+      '?', /* U+7FD1 */
+   0x8f4b, /* U+7FD2 */
+      '?', /* U+7FD3 */
+   0xe3c4, /* U+7FD4 */
+   0xe3c3, /* U+7FD5 */
+      '?', /* U+7FD6 */
+      '?', /* U+7FD7 */
+      '?', /* U+7FD8 */
+      '?', /* U+7FD9 */
+      '?', /* U+7FDA */
+      '?', /* U+7FDB */
+      '?', /* U+7FDC */
+      '?', /* U+7FDD */
+      '?', /* U+7FDE */
+      '?', /* U+7FDF */
+   0x9089, /* U+7FE0 */
+   0xe3c5, /* U+7FE1 */
+      '?', /* U+7FE2 */
+      '?', /* U+7FE3 */
+      '?', /* U+7FE4 */
+      '?', /* U+7FE5 */
+   0xe3c6, /* U+7FE6 */
+      '?', /* U+7FE7 */
+      '?', /* U+7FE8 */
+   0xe3c7, /* U+7FE9 */
+      '?', /* U+7FEA */
+   0x8ae3, /* U+7FEB */
+      '?', /* U+7FEC */
+      '?', /* U+7FED */
+      '?', /* U+7FEE */
+      '?', /* U+7FEF */
+   0x8acb, /* U+7FF0 */
+      '?', /* U+7FF1 */
+      '?', /* U+7FF2 */
+   0xe3c8, /* U+7FF3 */
+      '?', /* U+7FF4 */
+      '?', /* U+7FF5 */
+      '?', /* U+7FF6 */
+      '?', /* U+7FF7 */
+      '?', /* U+7FF8 */
+   0xe3c9, /* U+7FF9 */
+      '?', /* U+7FFA */
+   0x967c, /* U+7FFB */
+   0x9783, /* U+7FFC */
+      '?', /* U+7FFD */
+      '?', /* U+7FFE */
+      '?', /* U+7FFF */
+   0x9773, /* U+8000 */
+   0x9856, /* U+8001 */
+      '?', /* U+8002 */
+   0x8d6c, /* U+8003 */
+   0xe3cc, /* U+8004 */
+   0x8ed2, /* U+8005 */
+   0xe3cb, /* U+8006 */
+      '?', /* U+8007 */
+      '?', /* U+8008 */
+      '?', /* U+8009 */
+      '?', /* U+800A */
+   0xe3cd, /* U+800B */
+   0x8ea7, /* U+800C */
+      '?', /* U+800D */
+      '?', /* U+800E */
+      '?', /* U+800F */
+   0x91cf, /* U+8010 */
+      '?', /* U+8011 */
+   0xe3ce, /* U+8012 */
+      '?', /* U+8013 */
+      '?', /* U+8014 */
+   0x8d6b, /* U+8015 */
+      '?', /* U+8016 */
+   0x96d5, /* U+8017 */
+   0xe3cf, /* U+8018 */
+   0xe3d0, /* U+8019 */
+      '?', /* U+801A */
+      '?', /* U+801B */
+   0xe3d1, /* U+801C */
+      '?', /* U+801D */
+      '?', /* U+801E */
+      '?', /* U+801F */
+      '?', /* U+8020 */
+   0xe3d2, /* U+8021 */
+      '?', /* U+8022 */
+      '?', /* U+8023 */
+      '?', /* U+8024 */
+      '?', /* U+8025 */
+      '?', /* U+8026 */
+      '?', /* U+8027 */
+   0xe3d3, /* U+8028 */
+      '?', /* U+8029 */
+      '?', /* U+802A */
+      '?', /* U+802B */
+      '?', /* U+802C */
+      '?', /* U+802D */
+      '?', /* U+802E */
+      '?', /* U+802F */
+      '?', /* U+8030 */
+      '?', /* U+8031 */
+      '?', /* U+8032 */
+   0x8ea8, /* U+8033 */
+      '?', /* U+8034 */
+      '?', /* U+8035 */
+   0x96eb, /* U+8036 */
+      '?', /* U+8037 */
+      '?', /* U+8038 */
+      '?', /* U+8039 */
+      '?', /* U+803A */
+   0xe3d5, /* U+803B */
+      '?', /* U+803C */
+   0x925e, /* U+803D */
+      '?', /* U+803E */
+   0xe3d4, /* U+803F */
+      '?', /* U+8040 */
+      '?', /* U+8041 */
+      '?', /* U+8042 */
+      '?', /* U+8043 */
+      '?', /* U+8044 */
+      '?', /* U+8045 */
+   0xe3d7, /* U+8046 */
+      '?', /* U+8047 */
+      '?', /* U+8048 */
+      '?', /* U+8049 */
+   0xe3d6, /* U+804A */
+      '?', /* U+804B */
+      '?', /* U+804C */
+      '?', /* U+804D */
+      '?', /* U+804E */
+      '?', /* U+804F */
+      '?', /* U+8050 */
+      '?', /* U+8051 */
+   0xe3d8, /* U+8052 */
+      '?', /* U+8053 */
+      '?', /* U+8054 */
+      '?', /* U+8055 */
+   0x90b9, /* U+8056 */
+      '?', /* U+8057 */
+   0xe3d9, /* U+8058 */
+      '?', /* U+8059 */
+   0xe3da, /* U+805A */
+      '?', /* U+805B */
+      '?', /* U+805C */
+      '?', /* U+805D */
+   0x95b7, /* U+805E */
+   0xe3db, /* U+805F */
+      '?', /* U+8060 */
+   0x918f, /* U+8061 */
+   0xe3dc, /* U+8062 */
+      '?', /* U+8063 */
+      '?', /* U+8064 */
+      '?', /* U+8065 */
+      '?', /* U+8066 */
+      '?', /* U+8067 */
+   0xe3dd, /* U+8068 */
+      '?', /* U+8069 */
+      '?', /* U+806A */
+      '?', /* U+806B */
+      '?', /* U+806C */
+      '?', /* U+806D */
+      '?', /* U+806E */
+   0x97fc, /* U+806F */
+   0xe3e0, /* U+8070 */
+      '?', /* U+8071 */
+   0xe3df, /* U+8072 */
+   0xe3de, /* U+8073 */
+   0x92ae, /* U+8074 */
+      '?', /* U+8075 */
+   0xe3e1, /* U+8076 */
+   0x9045, /* U+8077 */
+      '?', /* U+8078 */
+   0xe3e2, /* U+8079 */
+      '?', /* U+807A */
+      '?', /* U+807B */
+      '?', /* U+807C */
+   0xe3e3, /* U+807D */
+   0x9857, /* U+807E */
+   0xe3e4, /* U+807F */
+      '?', /* U+8080 */
+      '?', /* U+8081 */
+      '?', /* U+8082 */
+      '?', /* U+8083 */
+   0xe3e5, /* U+8084 */
+   0xe3e7, /* U+8085 */
+   0xe3e6, /* U+8086 */
+   0x94a3, /* U+8087 */
+      '?', /* U+8088 */
+   0x93f7, /* U+8089 */
+      '?', /* U+808A */
+   0x985d, /* U+808B */
+   0x94a7, /* U+808C */
+      '?', /* U+808D */
+      '?', /* U+808E */
+      '?', /* U+808F */
+      '?', /* U+8090 */
+      '?', /* U+8091 */
+      '?', /* U+8092 */
+   0xe3e9, /* U+8093 */
+      '?', /* U+8094 */
+      '?', /* U+8095 */
+   0x8fd1, /* U+8096 */
+      '?', /* U+8097 */
+   0x9549, /* U+8098 */
+      '?', /* U+8099 */
+   0xe3ea, /* U+809A */
+   0xe3e8, /* U+809B */
+      '?', /* U+809C */
+   0x8acc, /* U+809D */
+      '?', /* U+809E */
+      '?', /* U+809F */
+      '?', /* U+80A0 */
+   0x8cd2, /* U+80A1 */
+   0x8e88, /* U+80A2 */
+      '?', /* U+80A3 */
+      '?', /* U+80A4 */
+   0x94ec, /* U+80A5 */
+      '?', /* U+80A6 */
+      '?', /* U+80A7 */
+      '?', /* U+80A8 */
+   0x8ca8, /* U+80A9 */
+   0x9662, /* U+80AA */
+      '?', /* U+80AB */
+   0xe3ed, /* U+80AC */
+   0xe3eb, /* U+80AD */
+      '?', /* U+80AE */
+   0x8d6d, /* U+80AF */
+      '?', /* U+80B0 */
+   0x8d6e, /* U+80B1 */
+   0x88e7, /* U+80B2 */
+      '?', /* U+80B3 */
+   0x8de6, /* U+80B4 */
+      '?', /* U+80B5 */
+      '?', /* U+80B6 */
+      '?', /* U+80B7 */
+      '?', /* U+80B8 */
+      '?', /* U+80B9 */
+   0x9478, /* U+80BA */
+      '?', /* U+80BB */
+      '?', /* U+80BC */
+      '?', /* U+80BD */
+      '?', /* U+80BE */
+      '?', /* U+80BF */
+      '?', /* U+80C0 */
+      '?', /* U+80C1 */
+      '?', /* U+80C2 */
+   0x88dd, /* U+80C3 */
+   0xe3f2, /* U+80C4 */
+      '?', /* U+80C5 */
+   0x925f, /* U+80C6 */
+      '?', /* U+80C7 */
+      '?', /* U+80C8 */
+      '?', /* U+80C9 */
+      '?', /* U+80CA */
+      '?', /* U+80CB */
+   0x9477, /* U+80CC */
+      '?', /* U+80CD */
+   0x91d9, /* U+80CE */
+      '?', /* U+80CF */
+      '?', /* U+80D0 */
+      '?', /* U+80D1 */
+      '?', /* U+80D2 */
+      '?', /* U+80D3 */
+      '?', /* U+80D4 */
+      '?', /* U+80D5 */
+   0xe3f4, /* U+80D6 */
+      '?', /* U+80D7 */
+      '?', /* U+80D8 */
+   0xe3f0, /* U+80D9 */
+   0xe3f3, /* U+80DA */
+   0xe3ee, /* U+80DB */
+      '?', /* U+80DC */
+   0xe3f1, /* U+80DD */
+   0x9645, /* U+80DE */
+      '?', /* U+80DF */
+      '?', /* U+80E0 */
+   0x8cd3, /* U+80E1 */
+      '?', /* U+80E2 */
+      '?', /* U+80E3 */
+   0x88fb, /* U+80E4 */
+   0xe3ef, /* U+80E5 */
+      '?', /* U+80E6 */
+      '?', /* U+80E7 */
+      '?', /* U+80E8 */
+      '?', /* U+80E9 */
+      '?', /* U+80EA */
+      '?', /* U+80EB */
+      '?', /* U+80EC */
+      '?', /* U+80ED */
+      '?', /* U+80EE */
+   0xe3f6, /* U+80EF */
+      '?', /* U+80F0 */
+   0xe3f7, /* U+80F1 */
+      '?', /* U+80F2 */
+      '?', /* U+80F3 */
+   0x93b7, /* U+80F4 */
+      '?', /* U+80F5 */
+      '?', /* U+80F6 */
+      '?', /* U+80F7 */
+   0x8bb9, /* U+80F8 */
+      '?', /* U+80F9 */
+      '?', /* U+80FA */
+      '?', /* U+80FB */
+   0xe445, /* U+80FC */
+   0x945c, /* U+80FD */
+      '?', /* U+80FE */
+      '?', /* U+80FF */
+      '?', /* U+8100 */
+      '?', /* U+8101 */
+   0x8e89, /* U+8102 */
+      '?', /* U+8103 */
+      '?', /* U+8104 */
+   0x8bba, /* U+8105 */
+   0x90c6, /* U+8106 */
+   0x9865, /* U+8107 */
+   0x96ac, /* U+8108 */
+   0xe3f5, /* U+8109 */
+   0x90d2, /* U+810A */
+      '?', /* U+810B */
+      '?', /* U+810C */
+      '?', /* U+810D */
+      '?', /* U+810E */
+      '?', /* U+810F */
+      '?', /* U+8110 */
+      '?', /* U+8111 */
+      '?', /* U+8112 */
+      '?', /* U+8113 */
+      '?', /* U+8114 */
+      '?', /* U+8115 */
+      '?', /* U+8116 */
+      '?', /* U+8117 */
+      '?', /* U+8118 */
+      '?', /* U+8119 */
+   0x8b72, /* U+811A */
+   0xe3f8, /* U+811B */
+      '?', /* U+811C */
+      '?', /* U+811D */
+      '?', /* U+811E */
+      '?', /* U+811F */
+      '?', /* U+8120 */
+      '?', /* U+8121 */
+      '?', /* U+8122 */
+   0xe3fa, /* U+8123 */
+      '?', /* U+8124 */
+      '?', /* U+8125 */
+      '?', /* U+8126 */
+      '?', /* U+8127 */
+      '?', /* U+8128 */
+   0xe3f9, /* U+8129 */
+      '?', /* U+812A */
+      '?', /* U+812B */
+      '?', /* U+812C */
+      '?', /* U+812D */
+      '?', /* U+812E */
+   0xe3fb, /* U+812F */
+      '?', /* U+8130 */
+   0x9245, /* U+8131 */
+      '?', /* U+8132 */
+   0x945d, /* U+8133 */
+      '?', /* U+8134 */
+      '?', /* U+8135 */
+      '?', /* U+8136 */
+      '?', /* U+8137 */
+      '?', /* U+8138 */
+   0x92af, /* U+8139 */
+      '?', /* U+813A */
+      '?', /* U+813B */
+      '?', /* U+813C */
+      '?', /* U+813D */
+   0xe442, /* U+813E */
+      '?', /* U+813F */
+      '?', /* U+8140 */
+      '?', /* U+8141 */
+      '?', /* U+8142 */
+      '?', /* U+8143 */
+      '?', /* U+8144 */
+      '?', /* U+8145 */
+   0xe441, /* U+8146 */
+      '?', /* U+8147 */
+      '?', /* U+8148 */
+      '?', /* U+8149 */
+      '?', /* U+814A */
+   0xe3fc, /* U+814B */
+      '?', /* U+814C */
+      '?', /* U+814D */
+   0x9074, /* U+814E */
+      '?', /* U+814F */
+   0x9585, /* U+8150 */
+   0xe444, /* U+8151 */
+      '?', /* U+8152 */
+   0xe443, /* U+8153 */
+   0x8d6f, /* U+8154 */
+   0x9872, /* U+8155 */
+      '?', /* U+8156 */
+      '?', /* U+8157 */
+      '?', /* U+8158 */
+      '?', /* U+8159 */
+      '?', /* U+815A */
+      '?', /* U+815B */
+      '?', /* U+815C */
+      '?', /* U+815D */
+      '?', /* U+815E */
+   0xe454, /* U+815F */
+      '?', /* U+8160 */
+      '?', /* U+8161 */
+      '?', /* U+8162 */
+      '?', /* U+8163 */
+      '?', /* U+8164 */
+   0xe448, /* U+8165 */
+   0xe449, /* U+8166 */
+      '?', /* U+8167 */
+      '?', /* U+8168 */
+      '?', /* U+8169 */
+      '?', /* U+816A */
+   0x8eee, /* U+816B */
+      '?', /* U+816C */
+      '?', /* U+816D */
+   0xe447, /* U+816E */
+      '?', /* U+816F */
+   0x8d98, /* U+8170 */
+   0xe446, /* U+8171 */
+      '?', /* U+8172 */
+      '?', /* U+8173 */
+   0xe44a, /* U+8174 */
+      '?', /* U+8175 */
+      '?', /* U+8176 */
+      '?', /* U+8177 */
+   0x92b0, /* U+8178 */
+   0x95a0, /* U+8179 */
+   0x9142, /* U+817A */
+      '?', /* U+817B */
+      '?', /* U+817C */
+      '?', /* U+817D */
+      '?', /* U+817E */
+   0x91da, /* U+817F */
+   0xe44e, /* U+8180 */
+      '?', /* U+8181 */
+   0xe44f, /* U+8182 */
+   0xe44b, /* U+8183 */
+      '?', /* U+8184 */
+      '?', /* U+8185 */
+      '?', /* U+8186 */
+      '?', /* U+8187 */
+   0xe44c, /* U+8188 */
+      '?', /* U+8189 */
+   0xe44d, /* U+818A */
+      '?', /* U+818B */
+      '?', /* U+818C */
+      '?', /* U+818D */
+      '?', /* U+818E */
+   0x8d70, /* U+818F */
+      '?', /* U+8190 */
+      '?', /* U+8191 */
+      '?', /* U+8192 */
+   0xe455, /* U+8193 */
+      '?', /* U+8194 */
+   0xe451, /* U+8195 */
+      '?', /* U+8196 */
+      '?', /* U+8197 */
+      '?', /* U+8198 */
+      '?', /* U+8199 */
+   0x9586, /* U+819A */
+      '?', /* U+819B */
+   0x968c, /* U+819C */
+   0x9547, /* U+819D */
+      '?', /* U+819E */
+      '?', /* U+819F */
+   0xe450, /* U+81A0 */
+      '?', /* U+81A1 */
+      '?', /* U+81A2 */
+   0xe453, /* U+81A3 */
+   0xe452, /* U+81A4 */
+      '?', /* U+81A5 */
+      '?', /* U+81A6 */
+      '?', /* U+81A7 */
+   0x9663, /* U+81A8 */
+   0xe456, /* U+81A9 */
+      '?', /* U+81AA */
+      '?', /* U+81AB */
+      '?', /* U+81AC */
+      '?', /* U+81AD */
+      '?', /* U+81AE */
+      '?', /* U+81AF */
+   0xe457, /* U+81B0 */
+      '?', /* U+81B1 */
+      '?', /* U+81B2 */
+   0x9156, /* U+81B3 */
+      '?', /* U+81B4 */
+   0xe458, /* U+81B5 */
+      '?', /* U+81B6 */
+      '?', /* U+81B7 */
+   0xe45a, /* U+81B8 */
+      '?', /* U+81B9 */
+   0xe45e, /* U+81BA */
+      '?', /* U+81BB */
+      '?', /* U+81BC */
+   0xe45b, /* U+81BD */
+   0xe459, /* U+81BE */
+   0x945e, /* U+81BF */
+   0xe45c, /* U+81C0 */
+      '?', /* U+81C1 */
+   0xe45d, /* U+81C2 */
+      '?', /* U+81C3 */
+      '?', /* U+81C4 */
+      '?', /* U+81C5 */
+   0x89b0, /* U+81C6 */
+      '?', /* U+81C7 */
+   0xe464, /* U+81C8 */
+   0xe45f, /* U+81C9 */
+      '?', /* U+81CA */
+      '?', /* U+81CB */
+      '?', /* U+81CC */
+   0xe460, /* U+81CD */
+      '?', /* U+81CE */
+      '?', /* U+81CF */
+      '?', /* U+81D0 */
+   0xe461, /* U+81D1 */
+      '?', /* U+81D2 */
+   0x919f, /* U+81D3 */
+      '?', /* U+81D4 */
+      '?', /* U+81D5 */
+      '?', /* U+81D6 */
+      '?', /* U+81D7 */
+   0xe463, /* U+81D8 */
+   0xe462, /* U+81D9 */
+   0xe465, /* U+81DA */
+      '?', /* U+81DB */
+      '?', /* U+81DC */
+      '?', /* U+81DD */
+      '?', /* U+81DE */
+   0xe466, /* U+81DF */
+   0xe467, /* U+81E0 */
+      '?', /* U+81E1 */
+      '?', /* U+81E2 */
+   0x9062, /* U+81E3 */
+      '?', /* U+81E4 */
+   0x89e7, /* U+81E5 */
+      '?', /* U+81E6 */
+   0xe468, /* U+81E7 */
+   0x97d5, /* U+81E8 */
+      '?', /* U+81E9 */
+   0x8ea9, /* U+81EA */
+      '?', /* U+81EB */
+      '?', /* U+81EC */
+   0x8f4c, /* U+81ED */
+      '?', /* U+81EE */
+      '?', /* U+81EF */
+      '?', /* U+81F0 */
+      '?', /* U+81F1 */
+      '?', /* U+81F2 */
+   0x8e8a, /* U+81F3 */
+   0x9276, /* U+81F4 */
+      '?', /* U+81F5 */
+      '?', /* U+81F6 */
+      '?', /* U+81F7 */
+      '?', /* U+81F8 */
+      '?', /* U+81F9 */
+   0xe469, /* U+81FA */
+   0xe46a, /* U+81FB */
+   0x8950, /* U+81FC */
+      '?', /* U+81FD */
+   0xe46b, /* U+81FE */
+      '?', /* U+81FF */
+      '?', /* U+8200 */
+   0xe46c, /* U+8201 */
+   0xe46d, /* U+8202 */
+      '?', /* U+8203 */
+      '?', /* U+8204 */
+   0xe46e, /* U+8205 */
+      '?', /* U+8206 */
+   0xe46f, /* U+8207 */
+   0x8bbb, /* U+8208 */
+   0x9da8, /* U+8209 */
+   0xe470, /* U+820A */
+      '?', /* U+820B */
+   0x90e3, /* U+820C */
+   0xe471, /* U+820D */
+   0x8ec9, /* U+820E */
+      '?', /* U+820F */
+   0xe472, /* U+8210 */
+      '?', /* U+8211 */
+   0x98ae, /* U+8212 */
+      '?', /* U+8213 */
+      '?', /* U+8214 */
+      '?', /* U+8215 */
+   0xe473, /* U+8216 */
+   0x95dc, /* U+8217 */
+   0x8ada, /* U+8218 */
+      '?', /* U+8219 */
+      '?', /* U+821A */
+   0x9143, /* U+821B */
+   0x8f77, /* U+821C */
+      '?', /* U+821D */
+   0x9591, /* U+821E */
+   0x8f4d, /* U+821F */
+      '?', /* U+8220 */
+      '?', /* U+8221 */
+      '?', /* U+8222 */
+      '?', /* U+8223 */
+      '?', /* U+8224 */
+      '?', /* U+8225 */
+      '?', /* U+8226 */
+      '?', /* U+8227 */
+      '?', /* U+8228 */
+   0xe474, /* U+8229 */
+   0x8d71, /* U+822A */
+   0xe475, /* U+822B */
+   0x94ca, /* U+822C */
+      '?', /* U+822D */
+   0xe484, /* U+822E */
+      '?', /* U+822F */
+      '?', /* U+8230 */
+      '?', /* U+8231 */
+      '?', /* U+8232 */
+   0xe477, /* U+8233 */
+      '?', /* U+8234 */
+   0x91c7, /* U+8235 */
+   0x9495, /* U+8236 */
+   0x8cbd, /* U+8237 */
+   0xe476, /* U+8238 */
+   0x9144, /* U+8239 */
+      '?', /* U+823A */
+      '?', /* U+823B */
+      '?', /* U+823C */
+      '?', /* U+823D */
+      '?', /* U+823E */
+      '?', /* U+823F */
+   0xe478, /* U+8240 */
+      '?', /* U+8241 */
+      '?', /* U+8242 */
+      '?', /* U+8243 */
+      '?', /* U+8244 */
+      '?', /* U+8245 */
+      '?', /* U+8246 */
+   0x92f8, /* U+8247 */
+      '?', /* U+8248 */
+      '?', /* U+8249 */
+      '?', /* U+824A */
+      '?', /* U+824B */
+      '?', /* U+824C */
+      '?', /* U+824D */
+      '?', /* U+824E */
+      '?', /* U+824F */
+      '?', /* U+8250 */
+      '?', /* U+8251 */
+      '?', /* U+8252 */
+      '?', /* U+8253 */
+      '?', /* U+8254 */
+      '?', /* U+8255 */
+      '?', /* U+8256 */
+      '?', /* U+8257 */
+   0xe47a, /* U+8258 */
+   0xe479, /* U+8259 */
+   0xe47c, /* U+825A */
+      '?', /* U+825B */
+      '?', /* U+825C */
+   0xe47b, /* U+825D */
+      '?', /* U+825E */
+   0xe47d, /* U+825F */
+      '?', /* U+8260 */
+      '?', /* U+8261 */
+   0xe480, /* U+8262 */
+      '?', /* U+8263 */
+   0xe47e, /* U+8264 */
+      '?', /* U+8265 */
+   0x8acd, /* U+8266 */
+      '?', /* U+8267 */
+   0xe481, /* U+8268 */
+      '?', /* U+8269 */
+   0xe482, /* U+826A */
+   0xe483, /* U+826B */
+      '?', /* U+826C */
+      '?', /* U+826D */
+   0x8daf, /* U+826E */
+   0x97c7, /* U+826F */
+      '?', /* U+8270 */
+   0xe485, /* U+8271 */
+   0x9046, /* U+8272 */
+      '?', /* U+8273 */
+      '?', /* U+8274 */
+      '?', /* U+8275 */
+   0x8990, /* U+8276 */
+   0xe486, /* U+8277 */
+   0xe487, /* U+8278 */
+      '?', /* U+8279 */
+      '?', /* U+827A */
+      '?', /* U+827B */
+      '?', /* U+827C */
+      '?', /* U+827D */
+   0xe488, /* U+827E */
+      '?', /* U+827F */
+      '?', /* U+8280 */
+      '?', /* U+8281 */
+      '?', /* U+8282 */
+      '?', /* U+8283 */
+      '?', /* U+8284 */
+      '?', /* U+8285 */
+      '?', /* U+8286 */
+      '?', /* U+8287 */
+      '?', /* U+8288 */
+      '?', /* U+8289 */
+      '?', /* U+828A */
+   0x88f0, /* U+828B */
+      '?', /* U+828C */
+   0xe489, /* U+828D */
+      '?', /* U+828E */
+      '?', /* U+828F */
+      '?', /* U+8290 */
+      '?', /* U+8291 */
+   0xe48a, /* U+8292 */
+      '?', /* U+8293 */
+      '?', /* U+8294 */
+      '?', /* U+8295 */
+      '?', /* U+8296 */
+      '?', /* U+8297 */
+      '?', /* U+8298 */
+   0x9587, /* U+8299 */
+      '?', /* U+829A */
+      '?', /* U+829B */
+      '?', /* U+829C */
+   0x8ec5, /* U+829D */
+      '?', /* U+829E */
+   0xe48c, /* U+829F */
+      '?', /* U+82A0 */
+      '?', /* U+82A1 */
+      '?', /* U+82A2 */
+      '?', /* U+82A3 */
+      '?', /* U+82A4 */
+   0x8a48, /* U+82A5 */
+   0x88b0, /* U+82A6 */
+      '?', /* U+82A7 */
+      '?', /* U+82A8 */
+      '?', /* U+82A9 */
+      '?', /* U+82AA */
+   0xe48b, /* U+82AB */
+   0xe48e, /* U+82AC */
+   0x946d, /* U+82AD */
+      '?', /* U+82AE */
+   0x9063, /* U+82AF */
+      '?', /* U+82B0 */
+   0x89d4, /* U+82B1 */
+      '?', /* U+82B2 */
+   0x9646, /* U+82B3 */
+      '?', /* U+82B4 */
+      '?', /* U+82B5 */
+      '?', /* U+82B6 */
+      '?', /* U+82B7 */
+   0x8c7c, /* U+82B8 */
+   0x8bda, /* U+82B9 */
+      '?', /* U+82BA */
+   0xe48d, /* U+82BB */
+      '?', /* U+82BC */
+   0x89e8, /* U+82BD */
+      '?', /* U+82BE */
+      '?', /* U+82BF */
+      '?', /* U+82C0 */
+      '?', /* U+82C1 */
+      '?', /* U+82C2 */
+      '?', /* U+82C3 */
+      '?', /* U+82C4 */
+   0x8aa1, /* U+82C5 */
+      '?', /* U+82C6 */
+      '?', /* U+82C7 */
+      '?', /* U+82C8 */
+      '?', /* U+82C9 */
+      '?', /* U+82CA */
+      '?', /* U+82CB */
+      '?', /* U+82CC */
+      '?', /* U+82CD */
+      '?', /* U+82CE */
+      '?', /* U+82CF */
+      '?', /* U+82D0 */
+   0x8991, /* U+82D1 */
+   0xe492, /* U+82D2 */
+   0x97e8, /* U+82D3 */
+   0x91db, /* U+82D4 */
+      '?', /* U+82D5 */
+      '?', /* U+82D6 */
+   0x9563, /* U+82D7 */
+      '?', /* U+82D8 */
+   0xe49e, /* U+82D9 */
+      '?', /* U+82DA */
+   0x89d5, /* U+82DB */
+   0xe49c, /* U+82DC */
+      '?', /* U+82DD */
+   0xe49a, /* U+82DE */
+   0xe491, /* U+82DF */
+      '?', /* U+82E0 */
+   0xe48f, /* U+82E1 */
+      '?', /* U+82E2 */
+   0xe490, /* U+82E3 */
+      '?', /* U+82E4 */
+   0x8ee1, /* U+82E5 */
+   0x8bea, /* U+82E6 */
+   0x9297, /* U+82E7 */
+      '?', /* U+82E8 */
+      '?', /* U+82E9 */
+      '?', /* U+82EA */
+   0x93cf, /* U+82EB */
+      '?', /* U+82EC */
+      '?', /* U+82ED */
+      '?', /* U+82EE */
+      '?', /* U+82EF */
+      '?', /* U+82F0 */
+   0x8970, /* U+82F1 */
+      '?', /* U+82F2 */
+   0xe494, /* U+82F3 */
+   0xe493, /* U+82F4 */
+      '?', /* U+82F5 */
+      '?', /* U+82F6 */
+      '?', /* U+82F7 */
+      '?', /* U+82F8 */
+   0xe499, /* U+82F9 */
+   0xe495, /* U+82FA */
+   0xe498, /* U+82FB */
+      '?', /* U+82FC */
+      '?', /* U+82FD */
+      '?', /* U+82FE */
+      '?', /* U+82FF */
+      '?', /* U+8300 */
+   0xfb93, /* U+8301 */
+   0x96ce, /* U+8302 */
+   0xe497, /* U+8303 */
+   0x89d6, /* U+8304 */
+   0x8a9d, /* U+8305 */
+   0xe49b, /* U+8306 */
+      '?', /* U+8307 */
+      '?', /* U+8308 */
+   0xe49d, /* U+8309 */
+      '?', /* U+830A */
+      '?', /* U+830B */
+      '?', /* U+830C */
+      '?', /* U+830D */
+   0x8c73, /* U+830E */
+      '?', /* U+830F */
+      '?', /* U+8310 */
+      '?', /* U+8311 */
+      '?', /* U+8312 */
+      '?', /* U+8313 */
+      '?', /* U+8314 */
+      '?', /* U+8315 */
+   0xe4a1, /* U+8316 */
+   0xe4aa, /* U+8317 */
+   0xe4ab, /* U+8318 */
+      '?', /* U+8319 */
+      '?', /* U+831A */
+      '?', /* U+831B */
+   0x88a9, /* U+831C */
+      '?', /* U+831D */
+      '?', /* U+831E */
+      '?', /* U+831F */
+      '?', /* U+8320 */
+      '?', /* U+8321 */
+      '?', /* U+8322 */
+   0xe4b2, /* U+8323 */
+      '?', /* U+8324 */
+      '?', /* U+8325 */
+      '?', /* U+8326 */
+      '?', /* U+8327 */
+   0x88ef, /* U+8328 */
+      '?', /* U+8329 */
+      '?', /* U+832A */
+   0xe4a9, /* U+832B */
+      '?', /* U+832C */
+      '?', /* U+832D */
+      '?', /* U+832E */
+   0xe4a8, /* U+832F */
+      '?', /* U+8330 */
+   0xe4a3, /* U+8331 */
+   0xe4a2, /* U+8332 */
+      '?', /* U+8333 */
+   0xe4a0, /* U+8334 */
+   0xe49f, /* U+8335 */
+   0x9283, /* U+8336 */
+      '?', /* U+8337 */
+   0x91f9, /* U+8338 */
+   0xe4a5, /* U+8339 */
+      '?', /* U+833A */
+      '?', /* U+833B */
+      '?', /* U+833C */
+      '?', /* U+833D */
+      '?', /* U+833E */
+      '?', /* U+833F */
+   0xe4a4, /* U+8340 */
+      '?', /* U+8341 */
+      '?', /* U+8342 */
+      '?', /* U+8343 */
+      '?', /* U+8344 */
+   0xe4a7, /* U+8345 */
+      '?', /* U+8346 */
+      '?', /* U+8347 */
+      '?', /* U+8348 */
+   0x9190, /* U+8349 */
+   0x8c74, /* U+834A */
+      '?', /* U+834B */
+      '?', /* U+834C */
+      '?', /* U+834D */
+      '?', /* U+834E */
+   0x8960, /* U+834F */
+   0xe4a6, /* U+8350 */
+      '?', /* U+8351 */
+   0x8d72, /* U+8352 */
+      '?', /* U+8353 */
+      '?', /* U+8354 */
+      '?', /* U+8355 */
+      '?', /* U+8356 */
+      '?', /* U+8357 */
+   0x9191, /* U+8358 */
+      '?', /* U+8359 */
+      '?', /* U+835A */
+      '?', /* U+835B */
+      '?', /* U+835C */
+      '?', /* U+835D */
+      '?', /* U+835E */
+      '?', /* U+835F */
+      '?', /* U+8360 */
+      '?', /* U+8361 */
+   0xfb94, /* U+8362 */
+      '?', /* U+8363 */
+      '?', /* U+8364 */
+      '?', /* U+8365 */
+      '?', /* U+8366 */
+      '?', /* U+8367 */
+      '?', /* U+8368 */
+      '?', /* U+8369 */
+      '?', /* U+836A */
+      '?', /* U+836B */
+      '?', /* U+836C */
+      '?', /* U+836D */
+      '?', /* U+836E */
+      '?', /* U+836F */
+      '?', /* U+8370 */
+      '?', /* U+8371 */
+      '?', /* U+8372 */
+   0xe4b8, /* U+8373 */
+      '?', /* U+8374 */
+   0xe4b9, /* U+8375 */
+      '?', /* U+8376 */
+   0x89d7, /* U+8377 */
+      '?', /* U+8378 */
+      '?', /* U+8379 */
+      '?', /* U+837A */
+   0x89ac, /* U+837B */
+   0xe4b6, /* U+837C */
+      '?', /* U+837D */
+      '?', /* U+837E */
+   0xfb95, /* U+837F */
+      '?', /* U+8380 */
+      '?', /* U+8381 */
+      '?', /* U+8382 */
+      '?', /* U+8383 */
+      '?', /* U+8384 */
+   0xe4ac, /* U+8385 */
+      '?', /* U+8386 */
+   0xe4b4, /* U+8387 */
+      '?', /* U+8388 */
+   0xe4bb, /* U+8389 */
+   0xe4b5, /* U+838A */
+      '?', /* U+838B */
+      '?', /* U+838C */
+      '?', /* U+838D */
+   0xe4b3, /* U+838E */
+      '?', /* U+838F */
+      '?', /* U+8390 */
+      '?', /* U+8391 */
+      '?', /* U+8392 */
+   0xe496, /* U+8393 */
+      '?', /* U+8394 */
+      '?', /* U+8395 */
+   0xe4b1, /* U+8396 */
+      '?', /* U+8397 */
+      '?', /* U+8398 */
+      '?', /* U+8399 */
+   0xe4ad, /* U+839A */
+      '?', /* U+839B */
+      '?', /* U+839C */
+      '?', /* U+839D */
+   0x8ace, /* U+839E */
+   0xe4af, /* U+839F */
+   0xe4ba, /* U+83A0 */
+      '?', /* U+83A1 */
+   0xe4b0, /* U+83A2 */
+      '?', /* U+83A3 */
+      '?', /* U+83A4 */
+      '?', /* U+83A5 */
+      '?', /* U+83A6 */
+      '?', /* U+83A7 */
+   0xe4bc, /* U+83A8 */
+      '?', /* U+83A9 */
+   0xe4ae, /* U+83AA */
+   0x949c, /* U+83AB */
+      '?', /* U+83AC */
+      '?', /* U+83AD */
+      '?', /* U+83AE */
+      '?', /* U+83AF */
+      '?', /* U+83B0 */
+   0x9789, /* U+83B1 */
+      '?', /* U+83B2 */
+      '?', /* U+83B3 */
+      '?', /* U+83B4 */
+   0xe4b7, /* U+83B5 */
+      '?', /* U+83B6 */
+      '?', /* U+83B7 */
+      '?', /* U+83B8 */
+      '?', /* U+83B9 */
+      '?', /* U+83BA */
+      '?', /* U+83BB */
+      '?', /* U+83BC */
+   0xe4cd, /* U+83BD */
+      '?', /* U+83BE */
+      '?', /* U+83BF */
+      '?', /* U+83C0 */
+   0xe4c5, /* U+83C1 */
+      '?', /* U+83C2 */
+      '?', /* U+83C3 */
+      '?', /* U+83C4 */
+   0x909b, /* U+83C5 */
+      '?', /* U+83C6 */
+   0xfb96, /* U+83C7 */
+      '?', /* U+83C8 */
+      '?', /* U+83C9 */
+   0x8b65, /* U+83CA */
+      '?', /* U+83CB */
+   0x8bdb, /* U+83CC */
+      '?', /* U+83CD */
+   0xe4c0, /* U+83CE */
+      '?', /* U+83CF */
+      '?', /* U+83D0 */
+      '?', /* U+83D1 */
+      '?', /* U+83D2 */
+   0x89d9, /* U+83D3 */
+      '?', /* U+83D4 */
+      '?', /* U+83D5 */
+   0x8fd2, /* U+83D6 */
+      '?', /* U+83D7 */
+   0xe4c3, /* U+83D8 */
+      '?', /* U+83D9 */
+      '?', /* U+83DA */
+      '?', /* U+83DB */
+   0x8dd8, /* U+83DC */
+      '?', /* U+83DD */
+      '?', /* U+83DE */
+   0x9370, /* U+83DF */
+   0xe4c8, /* U+83E0 */
+      '?', /* U+83E1 */
+      '?', /* U+83E2 */
+      '?', /* U+83E3 */
+      '?', /* U+83E4 */
+      '?', /* U+83E5 */
+      '?', /* U+83E6 */
+      '?', /* U+83E7 */
+      '?', /* U+83E8 */
+   0x95ec, /* U+83E9 */
+      '?', /* U+83EA */
+   0xe4bf, /* U+83EB */
+      '?', /* U+83EC */
+      '?', /* U+83ED */
+      '?', /* U+83EE */
+   0x89d8, /* U+83EF */
+   0x8cd4, /* U+83F0 */
+   0x9548, /* U+83F1 */
+   0xe4c9, /* U+83F2 */
+      '?', /* U+83F3 */
+   0xe4bd, /* U+83F4 */
+      '?', /* U+83F5 */
+   0xfb97, /* U+83F6 */
+   0xe4c6, /* U+83F7 */
+      '?', /* U+83F8 */
+      '?', /* U+83F9 */
+      '?', /* U+83FA */
+   0xe4d0, /* U+83FB */
+      '?', /* U+83FC */
+   0xe4c1, /* U+83FD */
+      '?', /* U+83FE */
+      '?', /* U+83FF */
+      '?', /* U+8400 */
+      '?', /* U+8401 */
+      '?', /* U+8402 */
+   0xe4c2, /* U+8403 */
+   0x93b8, /* U+8404 */
+      '?', /* U+8405 */
+      '?', /* U+8406 */
+   0xe4c7, /* U+8407 */
+      '?', /* U+8408 */
+      '?', /* U+8409 */
+      '?', /* U+840A */
+   0xe4c4, /* U+840B */
+   0x9647, /* U+840C */
+   0xe4ca, /* U+840D */
+   0x88de, /* U+840E */
+      '?', /* U+840F */
+      '?', /* U+8410 */
+      '?', /* U+8411 */
+      '?', /* U+8412 */
+   0xe4be, /* U+8413 */
+      '?', /* U+8414 */
+      '?', /* U+8415 */
+      '?', /* U+8416 */
+      '?', /* U+8417 */
+      '?', /* U+8418 */
+      '?', /* U+8419 */
+      '?', /* U+841A */
+      '?', /* U+841B */
+      '?', /* U+841C */
+      '?', /* U+841D */
+      '?', /* U+841E */
+      '?', /* U+841F */
+   0xe4cc, /* U+8420 */
+      '?', /* U+8421 */
+   0xe4cb, /* U+8422 */
+      '?', /* U+8423 */
+      '?', /* U+8424 */
+      '?', /* U+8425 */
+      '?', /* U+8426 */
+      '?', /* U+8427 */
+      '?', /* U+8428 */
+   0x948b, /* U+8429 */
+   0xe4d2, /* U+842A */
+      '?', /* U+842B */
+   0xe4dd, /* U+842C */
+      '?', /* U+842D */
+      '?', /* U+842E */
+      '?', /* U+842F */
+      '?', /* U+8430 */
+   0x8a9e, /* U+8431 */
+      '?', /* U+8432 */
+      '?', /* U+8433 */
+      '?', /* U+8434 */
+   0xe4e0, /* U+8435 */
+      '?', /* U+8436 */
+      '?', /* U+8437 */
+   0xe4ce, /* U+8438 */
+      '?', /* U+8439 */
+      '?', /* U+843A */
+      '?', /* U+843B */
+   0xe4d3, /* U+843C */
+   0x978e, /* U+843D */
+      '?', /* U+843E */
+      '?', /* U+843F */
+      '?', /* U+8440 */
+      '?', /* U+8441 */
+      '?', /* U+8442 */
+      '?', /* U+8443 */
+      '?', /* U+8444 */
+      '?', /* U+8445 */
+   0xe4dc, /* U+8446 */
+      '?', /* U+8447 */
+   0xfb98, /* U+8448 */
+   0x9774, /* U+8449 */
+      '?', /* U+844A */
+      '?', /* U+844B */
+      '?', /* U+844C */
+      '?', /* U+844D */
+   0x97a8, /* U+844E */
+      '?', /* U+844F */
+      '?', /* U+8450 */
+      '?', /* U+8451 */
+      '?', /* U+8452 */
+      '?', /* U+8453 */
+      '?', /* U+8454 */
+      '?', /* U+8455 */
+      '?', /* U+8456 */
+   0x9298, /* U+8457 */
+      '?', /* U+8458 */
+      '?', /* U+8459 */
+      '?', /* U+845A */
+   0x8a8b, /* U+845B */
+      '?', /* U+845C */
+      '?', /* U+845D */
+      '?', /* U+845E */
+      '?', /* U+845F */
+      '?', /* U+8460 */
+   0x9592, /* U+8461 */
+   0xe4e2, /* U+8462 */
+   0x939f, /* U+8463 */
+      '?', /* U+8464 */
+      '?', /* U+8465 */
+   0x88af, /* U+8466 */
+      '?', /* U+8467 */
+      '?', /* U+8468 */
+   0xe4db, /* U+8469 */
+      '?', /* U+846A */
+   0xe4d7, /* U+846B */
+   0x9192, /* U+846C */
+   0xe4d1, /* U+846D */
+   0xe4d9, /* U+846E */
+   0xe4de, /* U+846F */
+      '?', /* U+8470 */
+   0x944b, /* U+8471 */
+      '?', /* U+8472 */
+      '?', /* U+8473 */
+      '?', /* U+8474 */
+   0x88a8, /* U+8475 */
+      '?', /* U+8476 */
+   0xe4d6, /* U+8477 */
+      '?', /* U+8478 */
+   0xe4df, /* U+8479 */
+   0x9598, /* U+847A */
+      '?', /* U+847B */
+      '?', /* U+847C */
+      '?', /* U+847D */
+      '?', /* U+847E */
+      '?', /* U+847F */
+      '?', /* U+8480 */
+      '?', /* U+8481 */
+   0xe4da, /* U+8482 */
+      '?', /* U+8483 */
+   0xe4d5, /* U+8484 */
+      '?', /* U+8485 */
+      '?', /* U+8486 */
+      '?', /* U+8487 */
+      '?', /* U+8488 */
+      '?', /* U+8489 */
+      '?', /* U+848A */
+   0x8fd3, /* U+848B */
+      '?', /* U+848C */
+      '?', /* U+848D */
+      '?', /* U+848E */
+      '?', /* U+848F */
+   0x8f4e, /* U+8490 */
+      '?', /* U+8491 */
+      '?', /* U+8492 */
+      '?', /* U+8493 */
+   0x8eaa, /* U+8494 */
+      '?', /* U+8495 */
+      '?', /* U+8496 */
+      '?', /* U+8497 */
+      '?', /* U+8498 */
+   0x96d6, /* U+8499 */
+      '?', /* U+849A */
+      '?', /* U+849B */
+   0x9566, /* U+849C */
+      '?', /* U+849D */
+      '?', /* U+849E */
+   0xe4e5, /* U+849F */
+      '?', /* U+84A0 */
+   0xe4ee, /* U+84A1 */
+      '?', /* U+84A2 */
+      '?', /* U+84A3 */
+      '?', /* U+84A4 */
+      '?', /* U+84A5 */
+      '?', /* U+84A6 */
+      '?', /* U+84A7 */
+      '?', /* U+84A8 */
+      '?', /* U+84A9 */
+      '?', /* U+84AA */
+      '?', /* U+84AB */
+      '?', /* U+84AC */
+   0xe4d8, /* U+84AD */
+      '?', /* U+84AE */
+      '?', /* U+84AF */
+      '?', /* U+84B0 */
+      '?', /* U+84B1 */
+   0x8a97, /* U+84B2 */
+      '?', /* U+84B3 */
+   0xfb99, /* U+84B4 */
+      '?', /* U+84B5 */
+      '?', /* U+84B6 */
+      '?', /* U+84B7 */
+   0x8ff6, /* U+84B8 */
+   0xe4e3, /* U+84B9 */
+      '?', /* U+84BA */
+   0xe4e8, /* U+84BB */
+   0x9193, /* U+84BC */
+      '?', /* U+84BD */
+      '?', /* U+84BE */
+   0xe4e4, /* U+84BF */
+      '?', /* U+84C0 */
+   0xe4eb, /* U+84C1 */
+      '?', /* U+84C2 */
+      '?', /* U+84C3 */
+   0x927e, /* U+84C4 */
+      '?', /* U+84C5 */
+   0xe4ec, /* U+84C6 */
+      '?', /* U+84C7 */
+      '?', /* U+84C8 */
+   0x9775, /* U+84C9 */
+   0xe4e1, /* U+84CA */
+   0x8a57, /* U+84CB */
+      '?', /* U+84CC */
+   0xe4e7, /* U+84CD */
+      '?', /* U+84CE */
+      '?', /* U+84CF */
+   0xe4ea, /* U+84D0 */
+   0x96aa, /* U+84D1 */
+      '?', /* U+84D2 */
+      '?', /* U+84D3 */
+      '?', /* U+84D4 */
+      '?', /* U+84D5 */
+   0xe4ed, /* U+84D6 */
+      '?', /* U+84D7 */
+      '?', /* U+84D8 */
+   0xe4e6, /* U+84D9 */
+   0xe4e9, /* U+84DA */
+      '?', /* U+84DB */
+   0xfa60, /* U+84DC */
+      '?', /* U+84DD */
+      '?', /* U+84DE */
+      '?', /* U+84DF */
+      '?', /* U+84E0 */
+      '?', /* U+84E1 */
+      '?', /* U+84E2 */
+      '?', /* U+84E3 */
+      '?', /* U+84E4 */
+      '?', /* U+84E5 */
+      '?', /* U+84E6 */
+      '?', /* U+84E7 */
+      '?', /* U+84E8 */
+      '?', /* U+84E9 */
+      '?', /* U+84EA */
+      '?', /* U+84EB */
+   0x9648, /* U+84EC */
+      '?', /* U+84ED */
+   0x9840, /* U+84EE */
+      '?', /* U+84EF */
+      '?', /* U+84F0 */
+      '?', /* U+84F1 */
+      '?', /* U+84F2 */
+      '?', /* U+84F3 */
+   0xe4f1, /* U+84F4 */
+      '?', /* U+84F5 */
+      '?', /* U+84F6 */
+      '?', /* U+84F7 */
+      '?', /* U+84F8 */
+      '?', /* U+84F9 */
+      '?', /* U+84FA */
+      '?', /* U+84FB */
+   0xe4f8, /* U+84FC */
+      '?', /* U+84FD */
+      '?', /* U+84FE */
+   0xe4f0, /* U+84FF */
+   0x8ec1, /* U+8500 */
+      '?', /* U+8501 */
+      '?', /* U+8502 */
+      '?', /* U+8503 */
+      '?', /* U+8504 */
+      '?', /* U+8505 */
+   0xe4cf, /* U+8506 */
+      '?', /* U+8507 */
+      '?', /* U+8508 */
+      '?', /* U+8509 */
+      '?', /* U+850A */
+      '?', /* U+850B */
+      '?', /* U+850C */
+      '?', /* U+850D */
+      '?', /* U+850E */
+      '?', /* U+850F */
+      '?', /* U+8510 */
+   0x95cc, /* U+8511 */
+      '?', /* U+8512 */
+   0x96a0, /* U+8513 */
+   0xe4f7, /* U+8514 */
+   0xe4f6, /* U+8515 */
+      '?', /* U+8516 */
+   0xe4f2, /* U+8517 */
+   0xe4f3, /* U+8518 */
+      '?', /* U+8519 */
+   0x8955, /* U+851A */
+      '?', /* U+851B */
+      '?', /* U+851C */
+      '?', /* U+851D */
+      '?', /* U+851E */
+   0xe4f5, /* U+851F */
+      '?', /* U+8520 */
+   0xe4ef, /* U+8521 */
+      '?', /* U+8522 */
+      '?', /* U+8523 */
+      '?', /* U+8524 */
+      '?', /* U+8525 */
+   0x92d3, /* U+8526 */
+      '?', /* U+8527 */
+      '?', /* U+8528 */
+      '?', /* U+8529 */
+      '?', /* U+852A */
+      '?', /* U+852B */
+   0xe4f4, /* U+852C */
+   0x88fc, /* U+852D */
+      '?', /* U+852E */
+      '?', /* U+852F */
+      '?', /* U+8530 */
+      '?', /* U+8531 */
+      '?', /* U+8532 */
+      '?', /* U+8533 */
+      '?', /* U+8534 */
+   0x91a0, /* U+8535 */
+      '?', /* U+8536 */
+      '?', /* U+8537 */
+      '?', /* U+8538 */
+      '?', /* U+8539 */
+      '?', /* U+853A */
+      '?', /* U+853B */
+      '?', /* U+853C */
+   0x95c1, /* U+853D */
+      '?', /* U+853E */
+      '?', /* U+853F */
+   0xe4f9, /* U+8540 */
+   0xe540, /* U+8541 */
+      '?', /* U+8542 */
+   0x94d7, /* U+8543 */
+      '?', /* U+8544 */
+      '?', /* U+8545 */
+      '?', /* U+8546 */
+      '?', /* U+8547 */
+   0xe4fc, /* U+8548 */
+   0x8fd4, /* U+8549 */
+   0x8ec7, /* U+854A */
+   0xe542, /* U+854B */
+      '?', /* U+854C */
+      '?', /* U+854D */
+   0x8bbc, /* U+854E */
+      '?', /* U+854F */
+      '?', /* U+8550 */
+      '?', /* U+8551 */
+      '?', /* U+8552 */
+   0xfb9a, /* U+8553 */
+      '?', /* U+8554 */
+   0xe543, /* U+8555 */
+      '?', /* U+8556 */
+   0x9599, /* U+8557 */
+   0xe4fb, /* U+8558 */
+   0xfb9b, /* U+8559 */
+   0xe4d4, /* U+855A */
+      '?', /* U+855B */
+      '?', /* U+855C */
+      '?', /* U+855D */
+      '?', /* U+855E */
+      '?', /* U+855F */
+      '?', /* U+8560 */
+      '?', /* U+8561 */
+      '?', /* U+8562 */
+   0xe4fa, /* U+8563 */
+      '?', /* U+8564 */
+      '?', /* U+8565 */
+      '?', /* U+8566 */
+      '?', /* U+8567 */
+   0x986e, /* U+8568 */
+   0x93a0, /* U+8569 */
+   0x9593, /* U+856A */
+   0xfb9c, /* U+856B */
+      '?', /* U+856C */
+   0xe54a, /* U+856D */
+      '?', /* U+856E */
+      '?', /* U+856F */
+      '?', /* U+8570 */
+      '?', /* U+8571 */
+      '?', /* U+8572 */
+      '?', /* U+8573 */
+      '?', /* U+8574 */
+      '?', /* U+8575 */
+      '?', /* U+8576 */
+   0xe550, /* U+8577 */
+      '?', /* U+8578 */
+      '?', /* U+8579 */
+      '?', /* U+857A */
+      '?', /* U+857B */
+      '?', /* U+857C */
+      '?', /* U+857D */
+   0xe551, /* U+857E */
+      '?', /* U+857F */
+   0xe544, /* U+8580 */
+      '?', /* U+8581 */
+      '?', /* U+8582 */
+      '?', /* U+8583 */
+   0x9496, /* U+8584 */
+      '?', /* U+8585 */
+      '?', /* U+8586 */
+   0xe54e, /* U+8587 */
+   0xe546, /* U+8588 */
+      '?', /* U+8589 */
+   0xe548, /* U+858A */
+      '?', /* U+858B */
+      '?', /* U+858C */
+      '?', /* U+858D */
+      '?', /* U+858E */
+      '?', /* U+858F */
+   0xe552, /* U+8590 */
+   0xe547, /* U+8591 */
+      '?', /* U+8592 */
+      '?', /* U+8593 */
+   0xe54b, /* U+8594 */
+      '?', /* U+8595 */
+      '?', /* U+8596 */
+   0x8992, /* U+8597 */
+      '?', /* U+8598 */
+   0x93e3, /* U+8599 */
+      '?', /* U+859A */
+   0xe54c, /* U+859B */
+   0xe54f, /* U+859C */
+      '?', /* U+859D */
+      '?', /* U+859E */
+      '?', /* U+859F */
+      '?', /* U+85A0 */
+      '?', /* U+85A1 */
+      '?', /* U+85A2 */
+      '?', /* U+85A3 */
+   0xe545, /* U+85A4 */
+      '?', /* U+85A5 */
+   0x9145, /* U+85A6 */
+      '?', /* U+85A7 */
+   0xe549, /* U+85A8 */
+   0x8e46, /* U+85A9 */
+   0x9064, /* U+85AA */
+   0x8c4f, /* U+85AB */
+   0x96f2, /* U+85AC */
+      '?', /* U+85AD */
+   0x96f7, /* U+85AE */
+   0x8f92, /* U+85AF */
+   0xfb9e, /* U+85B0 */
+      '?', /* U+85B1 */
+      '?', /* U+85B2 */
+      '?', /* U+85B3 */
+      '?', /* U+85B4 */
+      '?', /* U+85B5 */
+      '?', /* U+85B6 */
+      '?', /* U+85B7 */
+      '?', /* U+85B8 */
+   0xe556, /* U+85B9 */
+   0xe554, /* U+85BA */
+      '?', /* U+85BB */
+      '?', /* U+85BC */
+      '?', /* U+85BD */
+      '?', /* U+85BE */
+      '?', /* U+85BF */
+      '?', /* U+85C0 */
+   0x986d, /* U+85C1 */
+      '?', /* U+85C2 */
+      '?', /* U+85C3 */
+      '?', /* U+85C4 */
+      '?', /* U+85C5 */
+      '?', /* U+85C6 */
+      '?', /* U+85C7 */
+      '?', /* U+85C8 */
+   0xe553, /* U+85C9 */
+      '?', /* U+85CA */
+      '?', /* U+85CB */
+      '?', /* U+85CC */
+   0x9795, /* U+85CD */
+      '?', /* U+85CE */
+   0xe555, /* U+85CF */
+   0xe557, /* U+85D0 */
+      '?', /* U+85D1 */
+      '?', /* U+85D2 */
+      '?', /* U+85D3 */
+      '?', /* U+85D4 */
+   0xe558, /* U+85D5 */
+      '?', /* U+85D6 */
+      '?', /* U+85D7 */
+      '?', /* U+85D8 */
+      '?', /* U+85D9 */
+      '?', /* U+85DA */
+      '?', /* U+85DB */
+   0xe55b, /* U+85DC */
+   0xe559, /* U+85DD */
+      '?', /* U+85DE */
+      '?', /* U+85DF */
+      '?', /* U+85E0 */
+      '?', /* U+85E1 */
+      '?', /* U+85E2 */
+      '?', /* U+85E3 */
+   0x93a1, /* U+85E4 */
+   0xe55a, /* U+85E5 */
+      '?', /* U+85E6 */
+      '?', /* U+85E7 */
+      '?', /* U+85E8 */
+   0x94cb, /* U+85E9 */
+   0xe54d, /* U+85EA */
+      '?', /* U+85EB */
+      '?', /* U+85EC */
+      '?', /* U+85ED */
+      '?', /* U+85EE */
+      '?', /* U+85EF */
+      '?', /* U+85F0 */
+      '?', /* U+85F1 */
+      '?', /* U+85F2 */
+      '?', /* U+85F3 */
+      '?', /* U+85F4 */
+      '?', /* U+85F5 */
+      '?', /* U+85F6 */
+   0x8f93, /* U+85F7 */
+      '?', /* U+85F8 */
+   0xe55c, /* U+85F9 */
+   0xe561, /* U+85FA */
+   0x9194, /* U+85FB */
+      '?', /* U+85FC */
+      '?', /* U+85FD */
+   0xe560, /* U+85FE */
+      '?', /* U+85FF */
+      '?', /* U+8600 */
+      '?', /* U+8601 */
+   0xe541, /* U+8602 */
+      '?', /* U+8603 */
+      '?', /* U+8604 */
+      '?', /* U+8605 */
+   0xe562, /* U+8606 */
+   0x9168, /* U+8607 */
+      '?', /* U+8608 */
+      '?', /* U+8609 */
+   0xe55d, /* U+860A */
+   0xe55f, /* U+860B */
+      '?', /* U+860C */
+      '?', /* U+860D */
+      '?', /* U+860E */
+      '?', /* U+860F */
+      '?', /* U+8610 */
+      '?', /* U+8611 */
+      '?', /* U+8612 */
+   0xe55e, /* U+8613 */
+      '?', /* U+8614 */
+      '?', /* U+8615 */
+   0x9f50, /* U+8616 */
+   0x9f41, /* U+8617 */
+      '?', /* U+8618 */
+      '?', /* U+8619 */
+   0xe564, /* U+861A */
+      '?', /* U+861B */
+      '?', /* U+861C */
+      '?', /* U+861D */
+      '?', /* U+861E */
+      '?', /* U+861F */
+      '?', /* U+8620 */
+      '?', /* U+8621 */
+   0xe563, /* U+8622 */
+      '?', /* U+8623 */
+      '?', /* U+8624 */
+      '?', /* U+8625 */
+      '?', /* U+8626 */
+      '?', /* U+8627 */
+      '?', /* U+8628 */
+      '?', /* U+8629 */
+      '?', /* U+862A */
+      '?', /* U+862B */
+      '?', /* U+862C */
+   0x9796, /* U+862D */
+      '?', /* U+862E */
+   0xe1ba, /* U+862F */
+   0xe565, /* U+8630 */
+      '?', /* U+8631 */
+      '?', /* U+8632 */
+      '?', /* U+8633 */
+      '?', /* U+8634 */
+      '?', /* U+8635 */
+      '?', /* U+8636 */
+      '?', /* U+8637 */
+      '?', /* U+8638 */
+      '?', /* U+8639 */
+      '?', /* U+863A */
+      '?', /* U+863B */
+      '?', /* U+863C */
+      '?', /* U+863D */
+      '?', /* U+863E */
+   0xe566, /* U+863F */
+      '?', /* U+8640 */
+      '?', /* U+8641 */
+      '?', /* U+8642 */
+      '?', /* U+8643 */
+      '?', /* U+8644 */
+      '?', /* U+8645 */
+      '?', /* U+8646 */
+      '?', /* U+8647 */
+      '?', /* U+8648 */
+      '?', /* U+8649 */
+      '?', /* U+864A */
+      '?', /* U+864B */
+      '?', /* U+864C */
+   0xe567, /* U+864D */
+   0x8cd5, /* U+864E */
+      '?', /* U+864F */
+   0x8b73, /* U+8650 */
+      '?', /* U+8651 */
+      '?', /* U+8652 */
+      '?', /* U+8653 */
+   0xe569, /* U+8654 */
+   0x997c, /* U+8655 */
+      '?', /* U+8656 */
+      '?', /* U+8657 */
+      '?', /* U+8658 */
+      '?', /* U+8659 */
+   0x8b95, /* U+865A */
+      '?', /* U+865B */
+   0x97b8, /* U+865C */
+      '?', /* U+865D */
+   0x8bf1, /* U+865E */
+   0xe56a, /* U+865F */
+      '?', /* U+8660 */
+      '?', /* U+8661 */
+      '?', /* U+8662 */
+      '?', /* U+8663 */
+      '?', /* U+8664 */
+      '?', /* U+8665 */
+      '?', /* U+8666 */
+   0xe56b, /* U+8667 */
+      '?', /* U+8668 */
+      '?', /* U+8669 */
+      '?', /* U+866A */
+   0x928e, /* U+866B */
+      '?', /* U+866C */
+      '?', /* U+866D */
+      '?', /* U+866E */
+      '?', /* U+866F */
+      '?', /* U+8670 */
+   0xe56c, /* U+8671 */
+      '?', /* U+8672 */
+      '?', /* U+8673 */
+      '?', /* U+8674 */
+      '?', /* U+8675 */
+      '?', /* U+8676 */
+      '?', /* U+8677 */
+      '?', /* U+8678 */
+   0x93f8, /* U+8679 */
+      '?', /* U+867A */
+   0x88b8, /* U+867B */
+      '?', /* U+867C */
+      '?', /* U+867D */
+      '?', /* U+867E */
+      '?', /* U+867F */
+      '?', /* U+8680 */
+      '?', /* U+8681 */
+      '?', /* U+8682 */
+      '?', /* U+8683 */
+      '?', /* U+8684 */
+      '?', /* U+8685 */
+      '?', /* U+8686 */
+      '?', /* U+8687 */
+      '?', /* U+8688 */
+      '?', /* U+8689 */
+   0x89e1, /* U+868A */
+   0xe571, /* U+868B */
+   0xe572, /* U+868C */
+      '?', /* U+868D */
+      '?', /* U+868E */
+      '?', /* U+868F */
+      '?', /* U+8690 */
+      '?', /* U+8691 */
+      '?', /* U+8692 */
+   0xe56d, /* U+8693 */
+      '?', /* U+8694 */
+   0x8e5c, /* U+8695 */
+      '?', /* U+8696 */
+      '?', /* U+8697 */
+      '?', /* U+8698 */
+      '?', /* U+8699 */
+      '?', /* U+869A */
+      '?', /* U+869B */
+      '?', /* U+869C */
+      '?', /* U+869D */
+      '?', /* U+869E */
+      '?', /* U+869F */
+      '?', /* U+86A0 */
+      '?', /* U+86A1 */
+      '?', /* U+86A2 */
+   0xe56e, /* U+86A3 */
+   0x9461, /* U+86A4 */
+      '?', /* U+86A5 */
+      '?', /* U+86A6 */
+      '?', /* U+86A7 */
+      '?', /* U+86A8 */
+   0xe56f, /* U+86A9 */
+   0xe570, /* U+86AA */
+   0xe57a, /* U+86AB */
+      '?', /* U+86AC */
+      '?', /* U+86AD */
+      '?', /* U+86AE */
+   0xe574, /* U+86AF */
+   0xe577, /* U+86B0 */
+      '?', /* U+86B1 */
+      '?', /* U+86B2 */
+      '?', /* U+86B3 */
+      '?', /* U+86B4 */
+      '?', /* U+86B5 */
+   0xe573, /* U+86B6 */
+      '?', /* U+86B7 */
+      '?', /* U+86B8 */
+      '?', /* U+86B9 */
+      '?', /* U+86BA */
+      '?', /* U+86BB */
+      '?', /* U+86BC */
+      '?', /* U+86BD */
+      '?', /* U+86BE */
+      '?', /* U+86BF */
+      '?', /* U+86C0 */
+      '?', /* U+86C1 */
+      '?', /* U+86C2 */
+      '?', /* U+86C3 */
+   0xe575, /* U+86C4 */
+      '?', /* U+86C5 */
+   0xe576, /* U+86C6 */
+   0x8ed6, /* U+86C7 */
+      '?', /* U+86C8 */
+   0xe578, /* U+86C9 */
+      '?', /* U+86CA */
+   0x9260, /* U+86CB */
+      '?', /* U+86CC */
+   0x8c75, /* U+86CD */
+   0x8a61, /* U+86CE */
+      '?', /* U+86CF */
+      '?', /* U+86D0 */
+      '?', /* U+86D1 */
+      '?', /* U+86D2 */
+      '?', /* U+86D3 */
+   0xe57b, /* U+86D4 */
+      '?', /* U+86D5 */
+      '?', /* U+86D6 */
+      '?', /* U+86D7 */
+      '?', /* U+86D8 */
+   0x8a5e, /* U+86D9 */
+      '?', /* U+86DA */
+   0xe581, /* U+86DB */
+      '?', /* U+86DC */
+      '?', /* U+86DD */
+   0xe57c, /* U+86DE */
+   0xe580, /* U+86DF */
+      '?', /* U+86E0 */
+      '?', /* U+86E1 */
+      '?', /* U+86E2 */
+      '?', /* U+86E3 */
+   0x94b8, /* U+86E4 */
+      '?', /* U+86E5 */
+      '?', /* U+86E6 */
+      '?', /* U+86E7 */
+      '?', /* U+86E8 */
+   0xe57d, /* U+86E9 */
+      '?', /* U+86EA */
+      '?', /* U+86EB */
+   0xe57e, /* U+86EC */
+   0x9567, /* U+86ED */
+   0x94d8, /* U+86EE */
+   0xe582, /* U+86EF */
+      '?', /* U+86F0 */
+      '?', /* U+86F1 */
+      '?', /* U+86F2 */
+      '?', /* U+86F3 */
+      '?', /* U+86F4 */
+      '?', /* U+86F5 */
+      '?', /* U+86F6 */
+      '?', /* U+86F7 */
+   0x91fb, /* U+86F8 */
+   0xe58c, /* U+86F9 */
+      '?', /* U+86FA */
+   0xe588, /* U+86FB */
+      '?', /* U+86FC */
+      '?', /* U+86FD */
+   0x89e9, /* U+86FE */
+      '?', /* U+86FF */
+   0xe586, /* U+8700 */
+      '?', /* U+8701 */
+   0x9649, /* U+8702 */
+   0xe587, /* U+8703 */
+      '?', /* U+8704 */
+      '?', /* U+8705 */
+   0xe584, /* U+8706 */
+      '?', /* U+8707 */
+   0xe585, /* U+8708 */
+   0xe58a, /* U+8709 */
+   0xe58d, /* U+870A */
+      '?', /* U+870B */
+      '?', /* U+870C */
+   0xe58b, /* U+870D */
+      '?', /* U+870E */
+      '?', /* U+870F */
+      '?', /* U+8710 */
+   0xe589, /* U+8711 */
+   0xe583, /* U+8712 */
+      '?', /* U+8713 */
+      '?', /* U+8714 */
+      '?', /* U+8715 */
+      '?', /* U+8716 */
+      '?', /* U+8717 */
+   0x9277, /* U+8718 */
+      '?', /* U+8719 */
+   0xe594, /* U+871A */
+      '?', /* U+871B */
+   0x96a8, /* U+871C */
+      '?', /* U+871D */
+      '?', /* U+871E */
+      '?', /* U+871F */
+      '?', /* U+8720 */
+      '?', /* U+8721 */
+      '?', /* U+8722 */
+      '?', /* U+8723 */
+      '?', /* U+8724 */
+   0xe592, /* U+8725 */
+      '?', /* U+8726 */
+      '?', /* U+8727 */
+      '?', /* U+8728 */
+   0xe593, /* U+8729 */
+      '?', /* U+872A */
+      '?', /* U+872B */
+      '?', /* U+872C */
+      '?', /* U+872D */
+      '?', /* U+872E */
+      '?', /* U+872F */
+      '?', /* U+8730 */
+      '?', /* U+8731 */
+      '?', /* U+8732 */
+      '?', /* U+8733 */
+   0xe58e, /* U+8734 */
+      '?', /* U+8735 */
+      '?', /* U+8736 */
+   0xe590, /* U+8737 */
+      '?', /* U+8738 */
+      '?', /* U+8739 */
+      '?', /* U+873A */
+   0xe591, /* U+873B */
+      '?', /* U+873C */
+      '?', /* U+873D */
+      '?', /* U+873E */
+   0xe58f, /* U+873F */
+      '?', /* U+8740 */
+      '?', /* U+8741 */
+      '?', /* U+8742 */
+      '?', /* U+8743 */
+      '?', /* U+8744 */
+      '?', /* U+8745 */
+      '?', /* U+8746 */
+      '?', /* U+8747 */
+      '?', /* U+8748 */
+   0x90e4, /* U+8749 */
+      '?', /* U+874A */
+   0x9858, /* U+874B */
+   0xe598, /* U+874C */
+      '?', /* U+874D */
+   0xe599, /* U+874E */
+      '?', /* U+874F */
+      '?', /* U+8750 */
+      '?', /* U+8751 */
+      '?', /* U+8752 */
+   0xe59f, /* U+8753 */
+      '?', /* U+8754 */
+   0x9049, /* U+8755 */
+      '?', /* U+8756 */
+   0xe59b, /* U+8757 */
+      '?', /* U+8758 */
+   0xe59e, /* U+8759 */
+      '?', /* U+875A */
+      '?', /* U+875B */
+      '?', /* U+875C */
+      '?', /* U+875D */
+      '?', /* U+875E */
+   0xe596, /* U+875F */
+   0xe595, /* U+8760 */
+      '?', /* U+8761 */
+      '?', /* U+8762 */
+   0xe5a0, /* U+8763 */
+      '?', /* U+8764 */
+      '?', /* U+8765 */
+   0x89da, /* U+8766 */
+      '?', /* U+8767 */
+   0xe59c, /* U+8768 */
+      '?', /* U+8769 */
+   0xe5a1, /* U+876A */
+      '?', /* U+876B */
+      '?', /* U+876C */
+      '?', /* U+876D */
+   0xe59d, /* U+876E */
+      '?', /* U+876F */
+      '?', /* U+8770 */
+      '?', /* U+8771 */
+      '?', /* U+8772 */
+      '?', /* U+8773 */
+   0xe59a, /* U+8774 */
+      '?', /* U+8775 */
+   0x92b1, /* U+8776 */
+      '?', /* U+8777 */
+   0xe597, /* U+8778 */
+      '?', /* U+8779 */
+      '?', /* U+877A */
+      '?', /* U+877B */
+      '?', /* U+877C */
+      '?', /* U+877D */
+      '?', /* U+877E */
+   0x9488, /* U+877F */
+      '?', /* U+8780 */
+      '?', /* U+8781 */
+   0xe5a5, /* U+8782 */
+      '?', /* U+8783 */
+      '?', /* U+8784 */
+      '?', /* U+8785 */
+      '?', /* U+8786 */
+      '?', /* U+8787 */
+      '?', /* U+8788 */
+      '?', /* U+8789 */
+      '?', /* U+878A */
+      '?', /* U+878B */
+      '?', /* U+878C */
+   0x975a, /* U+878D */
+      '?', /* U+878E */
+      '?', /* U+878F */
+      '?', /* U+8790 */
+      '?', /* U+8791 */
+      '?', /* U+8792 */
+      '?', /* U+8793 */
+      '?', /* U+8794 */
+      '?', /* U+8795 */
+      '?', /* U+8796 */
+      '?', /* U+8797 */
+      '?', /* U+8798 */
+      '?', /* U+8799 */
+      '?', /* U+879A */
+      '?', /* U+879B */
+      '?', /* U+879C */
+      '?', /* U+879D */
+      '?', /* U+879E */
+   0xe5a4, /* U+879F */
+      '?', /* U+87A0 */
+      '?', /* U+87A1 */
+   0xe5a3, /* U+87A2 */
+      '?', /* U+87A3 */
+      '?', /* U+87A4 */
+      '?', /* U+87A5 */
+      '?', /* U+87A6 */
+      '?', /* U+87A7 */
+      '?', /* U+87A8 */
+      '?', /* U+87A9 */
+      '?', /* U+87AA */
+   0xe5ac, /* U+87AB */
+      '?', /* U+87AC */
+      '?', /* U+87AD */
+      '?', /* U+87AE */
+   0xe5a6, /* U+87AF */
+      '?', /* U+87B0 */
+      '?', /* U+87B1 */
+      '?', /* U+87B2 */
+   0xe5ae, /* U+87B3 */
+      '?', /* U+87B4 */
+      '?', /* U+87B5 */
+      '?', /* U+87B6 */
+      '?', /* U+87B7 */
+      '?', /* U+87B8 */
+      '?', /* U+87B9 */
+   0x9786, /* U+87BA */
+   0xe5b1, /* U+87BB */
+      '?', /* U+87BC */
+   0xe5a8, /* U+87BD */
+      '?', /* U+87BE */
+      '?', /* U+87BF */
+   0xe5a9, /* U+87C0 */
+      '?', /* U+87C1 */
+      '?', /* U+87C2 */
+      '?', /* U+87C3 */
+   0xe5ad, /* U+87C4 */
+      '?', /* U+87C5 */
+   0xe5b0, /* U+87C6 */
+   0xe5af, /* U+87C7 */
+      '?', /* U+87C8 */
+      '?', /* U+87C9 */
+      '?', /* U+87CA */
+   0xe5a7, /* U+87CB */
+      '?', /* U+87CC */
+      '?', /* U+87CD */
+      '?', /* U+87CE */
+      '?', /* U+87CF */
+   0xe5aa, /* U+87D0 */
+      '?', /* U+87D1 */
+   0xe5bb, /* U+87D2 */
+      '?', /* U+87D3 */
+      '?', /* U+87D4 */
+      '?', /* U+87D5 */
+      '?', /* U+87D6 */
+      '?', /* U+87D7 */
+      '?', /* U+87D8 */
+      '?', /* U+87D9 */
+      '?', /* U+87DA */
+      '?', /* U+87DB */
+      '?', /* U+87DC */
+      '?', /* U+87DD */
+      '?', /* U+87DE */
+      '?', /* U+87DF */
+   0xe5b4, /* U+87E0 */
+      '?', /* U+87E1 */
+      '?', /* U+87E2 */
+      '?', /* U+87E3 */
+      '?', /* U+87E4 */
+      '?', /* U+87E5 */
+      '?', /* U+87E6 */
+      '?', /* U+87E7 */
+      '?', /* U+87E8 */
+      '?', /* U+87E9 */
+      '?', /* U+87EA */
+      '?', /* U+87EB */
+      '?', /* U+87EC */
+      '?', /* U+87ED */
+      '?', /* U+87EE */
+   0xe5b2, /* U+87EF */
+      '?', /* U+87F0 */
+      '?', /* U+87F1 */
+   0xe5b3, /* U+87F2 */
+      '?', /* U+87F3 */
+      '?', /* U+87F4 */
+      '?', /* U+87F5 */
+   0xe5b8, /* U+87F6 */
+   0xe5b9, /* U+87F7 */
+      '?', /* U+87F8 */
+   0x8a49, /* U+87F9 */
+      '?', /* U+87FA */
+   0x8b61, /* U+87FB */
+      '?', /* U+87FC */
+      '?', /* U+87FD */
+   0xe5b7, /* U+87FE */
+      '?', /* U+87FF */
+      '?', /* U+8800 */
+      '?', /* U+8801 */
+      '?', /* U+8802 */
+      '?', /* U+8803 */
+      '?', /* U+8804 */
+   0xe5a2, /* U+8805 */
+      '?', /* U+8806 */
+   0xfba1, /* U+8807 */
+      '?', /* U+8808 */
+      '?', /* U+8809 */
+      '?', /* U+880A */
+      '?', /* U+880B */
+      '?', /* U+880C */
+   0xe5b6, /* U+880D */
+   0xe5ba, /* U+880E */
+   0xe5b5, /* U+880F */
+      '?', /* U+8810 */
+   0xe5bc, /* U+8811 */
+      '?', /* U+8812 */
+      '?', /* U+8813 */
+      '?', /* U+8814 */
+   0xe5be, /* U+8815 */
+   0xe5bd, /* U+8816 */
+      '?', /* U+8817 */
+      '?', /* U+8818 */
+      '?', /* U+8819 */
+      '?', /* U+881A */
+      '?', /* U+881B */
+      '?', /* U+881C */
+      '?', /* U+881D */
+      '?', /* U+881E */
+      '?', /* U+881F */
+      '?', /* U+8820 */
+   0xe5c0, /* U+8821 */
+   0xe5bf, /* U+8822 */
+   0xe579, /* U+8823 */
+      '?', /* U+8824 */
+      '?', /* U+8825 */
+      '?', /* U+8826 */
+   0xe5c4, /* U+8827 */
+      '?', /* U+8828 */
+      '?', /* U+8829 */
+      '?', /* U+882A */
+      '?', /* U+882B */
+      '?', /* U+882C */
+      '?', /* U+882D */
+      '?', /* U+882E */
+      '?', /* U+882F */
+      '?', /* U+8830 */
+   0xe5c1, /* U+8831 */
+      '?', /* U+8832 */
+      '?', /* U+8833 */
+      '?', /* U+8834 */
+      '?', /* U+8835 */
+   0xe5c2, /* U+8836 */
+      '?', /* U+8837 */
+      '?', /* U+8838 */
+   0xe5c3, /* U+8839 */
+      '?', /* U+883A */
+   0xe5c5, /* U+883B */
+      '?', /* U+883C */
+      '?', /* U+883D */
+      '?', /* U+883E */
+      '?', /* U+883F */
+   0x8c8c, /* U+8840 */
+      '?', /* U+8841 */
+   0xe5c7, /* U+8842 */
+      '?', /* U+8843 */
+   0xe5c6, /* U+8844 */
+      '?', /* U+8845 */
+   0x8f4f, /* U+8846 */
+      '?', /* U+8847 */
+      '?', /* U+8848 */
+      '?', /* U+8849 */
+      '?', /* U+884A */
+      '?', /* U+884B */
+   0x8d73, /* U+884C */
+   0x9fa5, /* U+884D */
+      '?', /* U+884E */
+      '?', /* U+884F */
+      '?', /* U+8850 */
+      '?', /* U+8851 */
+   0xe5c8, /* U+8852 */
+   0x8f70, /* U+8853 */
+      '?', /* U+8854 */
+      '?', /* U+8855 */
+      '?', /* U+8856 */
+   0x8a58, /* U+8857 */
+      '?', /* U+8858 */
+   0xe5c9, /* U+8859 */
+      '?', /* U+885A */
+   0x8971, /* U+885B */
+      '?', /* U+885C */
+   0x8fd5, /* U+885D */
+   0xe5ca, /* U+885E */
+      '?', /* U+885F */
+      '?', /* U+8860 */
+   0x8d74, /* U+8861 */
+   0xe5cb, /* U+8862 */
+   0x88df, /* U+8863 */
+      '?', /* U+8864 */
+      '?', /* U+8865 */
+      '?', /* U+8866 */
+      '?', /* U+8867 */
+   0x955c, /* U+8868 */
+      '?', /* U+8869 */
+      '?', /* U+886A */
+   0xe5cc, /* U+886B */
+      '?', /* U+886C */
+      '?', /* U+886D */
+      '?', /* U+886E */
+      '?', /* U+886F */
+   0x908a, /* U+8870 */
+      '?', /* U+8871 */
+   0xe5d3, /* U+8872 */
+      '?', /* U+8873 */
+      '?', /* U+8874 */
+   0xe5d0, /* U+8875 */
+      '?', /* U+8876 */
+   0x928f, /* U+8877 */
+      '?', /* U+8878 */
+      '?', /* U+8879 */
+      '?', /* U+887A */
+      '?', /* U+887B */
+      '?', /* U+887C */
+   0xe5d1, /* U+887D */
+   0xe5ce, /* U+887E */
+   0x8bdc, /* U+887F */
+      '?', /* U+8880 */
+   0xe5cd, /* U+8881 */
+   0xe5d4, /* U+8882 */
+      '?', /* U+8883 */
+      '?', /* U+8884 */
+      '?', /* U+8885 */
+      '?', /* U+8886 */
+      '?', /* U+8887 */
+   0x8c55, /* U+8888 */
+      '?', /* U+8889 */
+      '?', /* U+888A */
+   0x91dc, /* U+888B */
+      '?', /* U+888C */
+   0xe5da, /* U+888D */
+      '?', /* U+888E */
+      '?', /* U+888F */
+      '?', /* U+8890 */
+      '?', /* U+8891 */
+   0xe5d6, /* U+8892 */
+      '?', /* U+8893 */
+      '?', /* U+8894 */
+      '?', /* U+8895 */
+   0x91b3, /* U+8896 */
+   0xe5d5, /* U+8897 */
+      '?', /* U+8898 */
+   0xe5d8, /* U+8899 */
+      '?', /* U+889A */
+      '?', /* U+889B */
+      '?', /* U+889C */
+      '?', /* U+889D */
+   0xe5cf, /* U+889E */
+      '?', /* U+889F */
+      '?', /* U+88A0 */
+      '?', /* U+88A1 */
+   0xe5d9, /* U+88A2 */
+      '?', /* U+88A3 */
+   0xe5db, /* U+88A4 */
+      '?', /* U+88A5 */
+      '?', /* U+88A6 */
+      '?', /* U+88A7 */
+      '?', /* U+88A8 */
+      '?', /* U+88A9 */
+      '?', /* U+88AA */
+   0x94ed, /* U+88AB */
+      '?', /* U+88AC */
+      '?', /* U+88AD */
+   0xe5d7, /* U+88AE */
+      '?', /* U+88AF */
+   0xe5dc, /* U+88B0 */
+   0xe5de, /* U+88B1 */
+      '?', /* U+88B2 */
+      '?', /* U+88B3 */
+   0x8cd1, /* U+88B4 */
+   0xe5d2, /* U+88B5 */
+      '?', /* U+88B6 */
+   0x88bf, /* U+88B7 */
+      '?', /* U+88B8 */
+      '?', /* U+88B9 */
+      '?', /* U+88BA */
+      '?', /* U+88BB */
+      '?', /* U+88BC */
+      '?', /* U+88BD */
+      '?', /* U+88BE */
+   0xe5dd, /* U+88BF */
+      '?', /* U+88C0 */
+   0x8dd9, /* U+88C1 */
+   0x97f4, /* U+88C2 */
+   0xe5df, /* U+88C3 */
+   0xe5e0, /* U+88C4 */
+   0x9195, /* U+88C5 */
+      '?', /* U+88C6 */
+      '?', /* U+88C7 */
+      '?', /* U+88C8 */
+      '?', /* U+88C9 */
+      '?', /* U+88CA */
+      '?', /* U+88CB */
+      '?', /* U+88CC */
+      '?', /* U+88CD */
+      '?', /* U+88CE */
+   0x97a0, /* U+88CF */
+      '?', /* U+88D0 */
+      '?', /* U+88D1 */
+      '?', /* U+88D2 */
+      '?', /* U+88D3 */
+   0xe5e1, /* U+88D4 */
+   0x9754, /* U+88D5 */
+      '?', /* U+88D6 */
+      '?', /* U+88D7 */
+   0xe5e2, /* U+88D8 */
+   0xe5e3, /* U+88D9 */
+      '?', /* U+88DA */
+      '?', /* U+88DB */
+   0x95e2, /* U+88DC */
+   0xe5e4, /* U+88DD */
+      '?', /* U+88DE */
+   0x8dbe, /* U+88DF */
+      '?', /* U+88E0 */
+   0x97a1, /* U+88E1 */
+      '?', /* U+88E2 */
+      '?', /* U+88E3 */
+      '?', /* U+88E4 */
+      '?', /* U+88E5 */
+      '?', /* U+88E6 */
+      '?', /* U+88E7 */
+   0xe5e9, /* U+88E8 */
+      '?', /* U+88E9 */
+      '?', /* U+88EA */
+      '?', /* U+88EB */
+      '?', /* U+88EC */
+      '?', /* U+88ED */
+      '?', /* U+88EE */
+      '?', /* U+88EF */
+      '?', /* U+88F0 */
+      '?', /* U+88F1 */
+   0xe5ea, /* U+88F2 */
+   0x8fd6, /* U+88F3 */
+   0xe5e8, /* U+88F4 */
+   0xfba2, /* U+88F5 */
+      '?', /* U+88F6 */
+      '?', /* U+88F7 */
+   0x9787, /* U+88F8 */
+   0xe5e5, /* U+88F9 */
+      '?', /* U+88FA */
+      '?', /* U+88FB */
+   0xe5e7, /* U+88FC */
+   0x90bb, /* U+88FD */
+   0x909e, /* U+88FE */
+      '?', /* U+88FF */
+      '?', /* U+8900 */
+      '?', /* U+8901 */
+   0xe5e6, /* U+8902 */
+      '?', /* U+8903 */
+   0xe5eb, /* U+8904 */
+      '?', /* U+8905 */
+      '?', /* U+8906 */
+   0x95a1, /* U+8907 */
+      '?', /* U+8908 */
+      '?', /* U+8909 */
+   0xe5ed, /* U+890A */
+      '?', /* U+890B */
+   0xe5ec, /* U+890C */
+      '?', /* U+890D */
+      '?', /* U+890E */
+      '?', /* U+890F */
+   0x8a8c, /* U+8910 */
+      '?', /* U+8911 */
+   0x964a, /* U+8912 */
+   0xe5ee, /* U+8913 */
+      '?', /* U+8914 */
+      '?', /* U+8915 */
+      '?', /* U+8916 */
+      '?', /* U+8917 */
+      '?', /* U+8918 */
+      '?', /* U+8919 */
+      '?', /* U+891A */
+      '?', /* U+891B */
+   0xfa5d, /* U+891C */
+   0xe5fa, /* U+891D */
+   0xe5f0, /* U+891E */
+      '?', /* U+891F */
+      '?', /* U+8920 */
+      '?', /* U+8921 */
+      '?', /* U+8922 */
+      '?', /* U+8923 */
+      '?', /* U+8924 */
+   0xe5f1, /* U+8925 */
+      '?', /* U+8926 */
+      '?', /* U+8927 */
+      '?', /* U+8928 */
+      '?', /* U+8929 */
+   0xe5f2, /* U+892A */
+   0xe5f3, /* U+892B */
+      '?', /* U+892C */
+      '?', /* U+892D */
+      '?', /* U+892E */
+      '?', /* U+892F */
+      '?', /* U+8930 */
+      '?', /* U+8931 */
+      '?', /* U+8932 */
+      '?', /* U+8933 */
+      '?', /* U+8934 */
+      '?', /* U+8935 */
+   0xe5f7, /* U+8936 */
+      '?', /* U+8937 */
+   0xe5f8, /* U+8938 */
+      '?', /* U+8939 */
+      '?', /* U+893A */
+   0xe5f6, /* U+893B */
+      '?', /* U+893C */
+      '?', /* U+893D */
+      '?', /* U+893E */
+      '?', /* U+893F */
+      '?', /* U+8940 */
+   0xe5f4, /* U+8941 */
+      '?', /* U+8942 */
+   0xe5ef, /* U+8943 */
+   0xe5f5, /* U+8944 */
+      '?', /* U+8945 */
+      '?', /* U+8946 */
+      '?', /* U+8947 */
+      '?', /* U+8948 */
+      '?', /* U+8949 */
+      '?', /* U+894A */
+      '?', /* U+894B */
+   0xe5f9, /* U+894C */
+   0xe8b5, /* U+894D */
+      '?', /* U+894E */
+      '?', /* U+894F */
+      '?', /* U+8950 */
+      '?', /* U+8951 */
+      '?', /* U+8952 */
+      '?', /* U+8953 */
+      '?', /* U+8954 */
+      '?', /* U+8955 */
+   0x89a6, /* U+8956 */
+      '?', /* U+8957 */
+      '?', /* U+8958 */
+      '?', /* U+8959 */
+      '?', /* U+895A */
+      '?', /* U+895B */
+      '?', /* U+895C */
+      '?', /* U+895D */
+   0xe5fc, /* U+895E */
+   0x8bdd, /* U+895F */
+   0xe5fb, /* U+8960 */
+      '?', /* U+8961 */
+      '?', /* U+8962 */
+      '?', /* U+8963 */
+   0xe641, /* U+8964 */
+      '?', /* U+8965 */
+   0xe640, /* U+8966 */
+      '?', /* U+8967 */
+      '?', /* U+8968 */
+      '?', /* U+8969 */
+   0xe643, /* U+896A */
+      '?', /* U+896B */
+      '?', /* U+896C */
+   0xe642, /* U+896D */
+      '?', /* U+896E */
+   0xe644, /* U+896F */
+      '?', /* U+8970 */
+      '?', /* U+8971 */
+   0x8f50, /* U+8972 */
+      '?', /* U+8973 */
+   0xe645, /* U+8974 */
+      '?', /* U+8975 */
+      '?', /* U+8976 */
+   0xe646, /* U+8977 */
+      '?', /* U+8978 */
+      '?', /* U+8979 */
+      '?', /* U+897A */
+      '?', /* U+897B */
+      '?', /* U+897C */
+      '?', /* U+897D */
+   0xe647, /* U+897E */
+   0x90bc, /* U+897F */
+      '?', /* U+8980 */
+   0x9776, /* U+8981 */
+      '?', /* U+8982 */
+   0xe648, /* U+8983 */
+      '?', /* U+8984 */
+      '?', /* U+8985 */
+   0x95a2, /* U+8986 */
+   0x9465, /* U+8987 */
+   0xe649, /* U+8988 */
+      '?', /* U+8989 */
+   0xe64a, /* U+898A */
+   0x8ca9, /* U+898B */
+      '?', /* U+898C */
+      '?', /* U+898D */
+      '?', /* U+898E */
+   0x8b4b, /* U+898F */
+      '?', /* U+8990 */
+      '?', /* U+8991 */
+      '?', /* U+8992 */
+   0xe64b, /* U+8993 */
+      '?', /* U+8994 */
+      '?', /* U+8995 */
+   0x8e8b, /* U+8996 */
+   0x9460, /* U+8997 */
+   0xe64c, /* U+8998 */
+      '?', /* U+8999 */
+   0x8a6f, /* U+899A */
+      '?', /* U+899B */
+      '?', /* U+899C */
+      '?', /* U+899D */
+      '?', /* U+899E */
+      '?', /* U+899F */
+      '?', /* U+89A0 */
+   0xe64d, /* U+89A1 */
+      '?', /* U+89A2 */
+      '?', /* U+89A3 */
+      '?', /* U+89A4 */
+      '?', /* U+89A5 */
+   0xe64f, /* U+89A6 */
+   0x9797, /* U+89A7 */
+      '?', /* U+89A8 */
+   0xe64e, /* U+89A9 */
+   0x9065, /* U+89AA */
+      '?', /* U+89AB */
+   0xe650, /* U+89AC */
+      '?', /* U+89AD */
+      '?', /* U+89AE */
+   0xe651, /* U+89AF */
+      '?', /* U+89B0 */
+      '?', /* U+89B1 */
+   0xe652, /* U+89B2 */
+   0x8acf, /* U+89B3 */
+      '?', /* U+89B4 */
+      '?', /* U+89B5 */
+      '?', /* U+89B6 */
+      '?', /* U+89B7 */
+      '?', /* U+89B8 */
+      '?', /* U+89B9 */
+   0xe653, /* U+89BA */
+      '?', /* U+89BB */
+      '?', /* U+89BC */
+   0xe654, /* U+89BD */
+      '?', /* U+89BE */
+   0xe655, /* U+89BF */
+   0xe656, /* U+89C0 */
+      '?', /* U+89C1 */
+      '?', /* U+89C2 */
+      '?', /* U+89C3 */
+      '?', /* U+89C4 */
+      '?', /* U+89C5 */
+      '?', /* U+89C6 */
+      '?', /* U+89C7 */
+      '?', /* U+89C8 */
+      '?', /* U+89C9 */
+      '?', /* U+89CA */
+      '?', /* U+89CB */
+      '?', /* U+89CC */
+      '?', /* U+89CD */
+      '?', /* U+89CE */
+      '?', /* U+89CF */
+      '?', /* U+89D0 */
+      '?', /* U+89D1 */
+   0x8a70, /* U+89D2 */
+      '?', /* U+89D3 */
+      '?', /* U+89D4 */
+      '?', /* U+89D5 */
+      '?', /* U+89D6 */
+      '?', /* U+89D7 */
+      '?', /* U+89D8 */
+      '?', /* U+89D9 */
+   0xe657, /* U+89DA */
+      '?', /* U+89DB */
+   0xe658, /* U+89DC */
+   0xe659, /* U+89DD */
+      '?', /* U+89DE */
+      '?', /* U+89DF */
+      '?', /* U+89E0 */
+      '?', /* U+89E1 */
+      '?', /* U+89E2 */
+   0x89f0, /* U+89E3 */
+      '?', /* U+89E4 */
+      '?', /* U+89E5 */
+   0x9047, /* U+89E6 */
+   0xe65a, /* U+89E7 */
+      '?', /* U+89E8 */
+      '?', /* U+89E9 */
+      '?', /* U+89EA */
+      '?', /* U+89EB */
+      '?', /* U+89EC */
+      '?', /* U+89ED */
+      '?', /* U+89EE */
+      '?', /* U+89EF */
+      '?', /* U+89F0 */
+      '?', /* U+89F1 */
+      '?', /* U+89F2 */
+      '?', /* U+89F3 */
+   0xe65b, /* U+89F4 */
+      '?', /* U+89F5 */
+      '?', /* U+89F6 */
+      '?', /* U+89F7 */
+   0xe65c, /* U+89F8 */
+      '?', /* U+89F9 */
+      '?', /* U+89FA */
+      '?', /* U+89FB */
+      '?', /* U+89FC */
+      '?', /* U+89FD */
+      '?', /* U+89FE */
+      '?', /* U+89FF */
+   0x8cbe, /* U+8A00 */
+      '?', /* U+8A01 */
+   0x92f9, /* U+8A02 */
+   0xe65d, /* U+8A03 */
+      '?', /* U+8A04 */
+      '?', /* U+8A05 */
+      '?', /* U+8A06 */
+      '?', /* U+8A07 */
+   0x8c76, /* U+8A08 */
+      '?', /* U+8A09 */
+   0x9075, /* U+8A0A */
+      '?', /* U+8A0B */
+   0xe660, /* U+8A0C */
+      '?', /* U+8A0D */
+   0x93a2, /* U+8A0E */
+      '?', /* U+8A0F */
+   0xe65f, /* U+8A10 */
+      '?', /* U+8A11 */
+   0xfba3, /* U+8A12 */
+   0x8c50, /* U+8A13 */
+      '?', /* U+8A14 */
+      '?', /* U+8A15 */
+   0xe65e, /* U+8A16 */
+   0x91f5, /* U+8A17 */
+   0x8b4c, /* U+8A18 */
+      '?', /* U+8A19 */
+      '?', /* U+8A1A */
+   0xe661, /* U+8A1B */
+      '?', /* U+8A1C */
+   0xe662, /* U+8A1D */
+      '?', /* U+8A1E */
+   0x8fd7, /* U+8A1F */
+      '?', /* U+8A20 */
+      '?', /* U+8A21 */
+      '?', /* U+8A22 */
+   0x8c8d, /* U+8A23 */
+      '?', /* U+8A24 */
+   0xe663, /* U+8A25 */
+      '?', /* U+8A26 */
+      '?', /* U+8A27 */
+      '?', /* U+8A28 */
+      '?', /* U+8A29 */
+   0x964b, /* U+8A2A */
+      '?', /* U+8A2B */
+      '?', /* U+8A2C */
+   0x90dd, /* U+8A2D */
+      '?', /* U+8A2E */
+      '?', /* U+8A2F */
+      '?', /* U+8A30 */
+   0x8b96, /* U+8A31 */
+      '?', /* U+8A32 */
+   0x96f3, /* U+8A33 */
+   0x9169, /* U+8A34 */
+      '?', /* U+8A35 */
+   0xe664, /* U+8A36 */
+   0xfba4, /* U+8A37 */
+      '?', /* U+8A38 */
+      '?', /* U+8A39 */
+   0x9066, /* U+8A3A */
+   0x9290, /* U+8A3B */
+   0x8fd8, /* U+8A3C */
+      '?', /* U+8A3D */
+      '?', /* U+8A3E */
+      '?', /* U+8A3F */
+      '?', /* U+8A40 */
+   0xe665, /* U+8A41 */
+      '?', /* U+8A42 */
+      '?', /* U+8A43 */
+      '?', /* U+8A44 */
+      '?', /* U+8A45 */
+   0xe668, /* U+8A46 */
+      '?', /* U+8A47 */
+   0xe669, /* U+8A48 */
+      '?', /* U+8A49 */
+      '?', /* U+8A4A */
+      '?', /* U+8A4B */
+      '?', /* U+8A4C */
+      '?', /* U+8A4D */
+      '?', /* U+8A4E */
+      '?', /* U+8A4F */
+   0x8dbc, /* U+8A50 */
+   0x91c0, /* U+8A51 */
+   0xe667, /* U+8A52 */
+      '?', /* U+8A53 */
+   0x8fd9, /* U+8A54 */
+   0x955d, /* U+8A55 */
+      '?', /* U+8A56 */
+      '?', /* U+8A57 */
+      '?', /* U+8A58 */
+      '?', /* U+8A59 */
+      '?', /* U+8A5A */
+   0xe666, /* U+8A5B */
+      '?', /* U+8A5C */
+      '?', /* U+8A5D */
+   0x8e8c, /* U+8A5E */
+      '?', /* U+8A5F */
+   0x8972, /* U+8A60 */
+      '?', /* U+8A61 */
+   0xe66d, /* U+8A62 */
+   0x8c77, /* U+8A63 */
+      '?', /* U+8A64 */
+      '?', /* U+8A65 */
+   0x8e8e, /* U+8A66 */
+      '?', /* U+8A67 */
+      '?', /* U+8A68 */
+   0x8e8d, /* U+8A69 */
+      '?', /* U+8A6A */
+   0x986c, /* U+8A6B */
+   0xe66c, /* U+8A6C */
+   0xe66b, /* U+8A6D */
+   0x9146, /* U+8A6E */
+      '?', /* U+8A6F */
+   0x8b6c, /* U+8A70 */
+   0x9862, /* U+8A71 */
+   0x8a59, /* U+8A72 */
+   0x8fda, /* U+8A73 */
+      '?', /* U+8A74 */
+      '?', /* U+8A75 */
+      '?', /* U+8A76 */
+      '?', /* U+8A77 */
+      '?', /* U+8A78 */
+   0xfba5, /* U+8A79 */
+      '?', /* U+8A7A */
+      '?', /* U+8A7B */
+   0xe66a, /* U+8A7C */
+      '?', /* U+8A7D */
+      '?', /* U+8A7E */
+      '?', /* U+8A7F */
+      '?', /* U+8A80 */
+      '?', /* U+8A81 */
+   0xe66f, /* U+8A82 */
+      '?', /* U+8A83 */
+   0xe670, /* U+8A84 */
+   0xe66e, /* U+8A85 */
+      '?', /* U+8A86 */
+   0x8cd6, /* U+8A87 */
+      '?', /* U+8A88 */
+   0x975f, /* U+8A89 */
+      '?', /* U+8A8A */
+      '?', /* U+8A8B */
+   0x8e8f, /* U+8A8C */
+   0x9446, /* U+8A8D */
+      '?', /* U+8A8E */
+      '?', /* U+8A8F */
+      '?', /* U+8A90 */
+   0xe673, /* U+8A91 */
+      '?', /* U+8A92 */
+   0x90be, /* U+8A93 */
+      '?', /* U+8A94 */
+   0x9261, /* U+8A95 */
+      '?', /* U+8A96 */
+      '?', /* U+8A97 */
+   0x9755, /* U+8A98 */
+      '?', /* U+8A99 */
+   0xe676, /* U+8A9A */
+      '?', /* U+8A9B */
+      '?', /* U+8A9C */
+      '?', /* U+8A9D */
+   0x8cea, /* U+8A9E */
+      '?', /* U+8A9F */
+   0x90bd, /* U+8AA0 */
+   0xe672, /* U+8AA1 */
+      '?', /* U+8AA2 */
+   0xe677, /* U+8AA3 */
+   0x8ceb, /* U+8AA4 */
+   0xe674, /* U+8AA5 */
+   0xe675, /* U+8AA6 */
+   0xfba6, /* U+8AA7 */
+   0xe671, /* U+8AA8 */
+      '?', /* U+8AA9 */
+      '?', /* U+8AAA */
+      '?', /* U+8AAB */
+   0x90e0, /* U+8AAC */
+   0x93c7, /* U+8AAD */
+      '?', /* U+8AAE */
+      '?', /* U+8AAF */
+   0x924e, /* U+8AB0 */
+      '?', /* U+8AB1 */
+   0x89db, /* U+8AB2 */
+      '?', /* U+8AB3 */
+      '?', /* U+8AB4 */
+      '?', /* U+8AB5 */
+      '?', /* U+8AB6 */
+      '?', /* U+8AB7 */
+      '?', /* U+8AB8 */
+   0x94ee, /* U+8AB9 */
+      '?', /* U+8ABA */
+      '?', /* U+8ABB */
+   0x8b62, /* U+8ABC */
+      '?', /* U+8ABD */
+   0xfba7, /* U+8ABE */
+   0x92b2, /* U+8ABF */
+      '?', /* U+8AC0 */
+      '?', /* U+8AC1 */
+   0xe67a, /* U+8AC2 */
+      '?', /* U+8AC3 */
+   0xe678, /* U+8AC4 */
+      '?', /* U+8AC5 */
+      '?', /* U+8AC6 */
+   0x926b, /* U+8AC7 */
+      '?', /* U+8AC8 */
+      '?', /* U+8AC9 */
+      '?', /* U+8ACA */
+   0x90bf, /* U+8ACB */
+   0x8ad0, /* U+8ACC */
+   0xe679, /* U+8ACD */
+      '?', /* U+8ACE */
+   0x907a, /* U+8ACF */
+      '?', /* U+8AD0 */
+      '?', /* U+8AD1 */
+   0x97c8, /* U+8AD2 */
+      '?', /* U+8AD3 */
+      '?', /* U+8AD4 */
+      '?', /* U+8AD5 */
+   0x985f, /* U+8AD6 */
+      '?', /* U+8AD7 */
+      '?', /* U+8AD8 */
+      '?', /* U+8AD9 */
+   0xe67b, /* U+8ADA */
+   0xe687, /* U+8ADB */
+   0x92b3, /* U+8ADC */
+      '?', /* U+8ADD */
+   0xe686, /* U+8ADE */
+   0xfba8, /* U+8ADF */
+   0xe683, /* U+8AE0 */
+   0xe68b, /* U+8AE1 */
+   0xe684, /* U+8AE2 */
+      '?', /* U+8AE3 */
+   0xe680, /* U+8AE4 */
+      '?', /* U+8AE5 */
+   0x92fa, /* U+8AE6 */
+   0xe67e, /* U+8AE7 */
+      '?', /* U+8AE8 */
+      '?', /* U+8AE9 */
+      '?', /* U+8AEA */
+   0xe67c, /* U+8AEB */
+      '?', /* U+8AEC */
+   0x9740, /* U+8AED */
+   0x8e90, /* U+8AEE */
+      '?', /* U+8AEF */
+      '?', /* U+8AF0 */
+   0xe681, /* U+8AF1 */
+      '?', /* U+8AF2 */
+   0xe67d, /* U+8AF3 */
+      '?', /* U+8AF4 */
+      '?', /* U+8AF5 */
+   0xfbaa, /* U+8AF6 */
+   0xe685, /* U+8AF7 */
+   0x8f94, /* U+8AF8 */
+      '?', /* U+8AF9 */
+   0x8cbf, /* U+8AFA */
+      '?', /* U+8AFB */
+      '?', /* U+8AFC */
+      '?', /* U+8AFD */
+   0x91f8, /* U+8AFE */
+      '?', /* U+8AFF */
+   0x9664, /* U+8B00 */
+   0x8979, /* U+8B01 */
+   0x88e0, /* U+8B02 */
+      '?', /* U+8B03 */
+   0x93a3, /* U+8B04 */
+      '?', /* U+8B05 */
+      '?', /* U+8B06 */
+   0xe689, /* U+8B07 */
+      '?', /* U+8B08 */
+      '?', /* U+8B09 */
+      '?', /* U+8B0A */
+      '?', /* U+8B0B */
+   0xe688, /* U+8B0C */
+      '?', /* U+8B0D */
+   0x93e4, /* U+8B0E */
+      '?', /* U+8B0F */
+   0xe68d, /* U+8B10 */
+      '?', /* U+8B11 */
+      '?', /* U+8B12 */
+      '?', /* U+8B13 */
+   0xe682, /* U+8B14 */
+      '?', /* U+8B15 */
+   0xe68c, /* U+8B16 */
+   0xe68e, /* U+8B17 */
+      '?', /* U+8B18 */
+   0x8caa, /* U+8B19 */
+   0xe68a, /* U+8B1A */
+   0x8d75, /* U+8B1B */
+      '?', /* U+8B1C */
+   0x8ed3, /* U+8B1D */
+      '?', /* U+8B1E */
+      '?', /* U+8B1F */
+   0xe68f, /* U+8B20 */
+   0x9777, /* U+8B21 */
+      '?', /* U+8B22 */
+      '?', /* U+8B23 */
+      '?', /* U+8B24 */
+      '?', /* U+8B25 */
+   0xe692, /* U+8B26 */
+      '?', /* U+8B27 */
+   0xe695, /* U+8B28 */
+      '?', /* U+8B29 */
+      '?', /* U+8B2A */
+   0xe693, /* U+8B2B */
+   0x9554, /* U+8B2C */
+      '?', /* U+8B2D */
+      '?', /* U+8B2E */
+      '?', /* U+8B2F */
+      '?', /* U+8B30 */
+      '?', /* U+8B31 */
+      '?', /* U+8B32 */
+   0xe690, /* U+8B33 */
+      '?', /* U+8B34 */
+      '?', /* U+8B35 */
+      '?', /* U+8B36 */
+      '?', /* U+8B37 */
+      '?', /* U+8B38 */
+   0x8bde, /* U+8B39 */
+      '?', /* U+8B3A */
+      '?', /* U+8B3B */
+      '?', /* U+8B3C */
+      '?', /* U+8B3D */
+   0xe694, /* U+8B3E */
+      '?', /* U+8B3F */
+      '?', /* U+8B40 */
+   0xe696, /* U+8B41 */
+      '?', /* U+8B42 */
+      '?', /* U+8B43 */
+      '?', /* U+8B44 */
+      '?', /* U+8B45 */
+      '?', /* U+8B46 */
+      '?', /* U+8B47 */
+      '?', /* U+8B48 */
+   0xe69a, /* U+8B49 */
+      '?', /* U+8B4A */
+      '?', /* U+8B4B */
+   0xe697, /* U+8B4C */
+      '?', /* U+8B4D */
+   0xe699, /* U+8B4E */
+   0xe698, /* U+8B4F */
+      '?', /* U+8B50 */
+      '?', /* U+8B51 */
+      '?', /* U+8B52 */
+   0xfbab, /* U+8B53 */
+      '?', /* U+8B54 */
+      '?', /* U+8B55 */
+   0xe69b, /* U+8B56 */
+      '?', /* U+8B57 */
+   0x8eaf, /* U+8B58 */
+      '?', /* U+8B59 */
+   0xe69d, /* U+8B5A */
+   0xe69c, /* U+8B5B */
+   0x9588, /* U+8B5C */
+      '?', /* U+8B5D */
+      '?', /* U+8B5E */
+   0xe69f, /* U+8B5F */
+      '?', /* U+8B60 */
+      '?', /* U+8B61 */
+      '?', /* U+8B62 */
+      '?', /* U+8B63 */
+      '?', /* U+8B64 */
+      '?', /* U+8B65 */
+   0x8c78, /* U+8B66 */
+      '?', /* U+8B67 */
+      '?', /* U+8B68 */
+      '?', /* U+8B69 */
+      '?', /* U+8B6A */
+   0xe69e, /* U+8B6B */
+   0xe6a0, /* U+8B6C */
+      '?', /* U+8B6D */
+      '?', /* U+8B6E */
+   0xe6a1, /* U+8B6F */
+   0x8b63, /* U+8B70 */
+   0xe3bf, /* U+8B71 */
+   0x8ff7, /* U+8B72 */
+      '?', /* U+8B73 */
+   0xe6a2, /* U+8B74 */
+      '?', /* U+8B75 */
+      '?', /* U+8B76 */
+   0x8cec, /* U+8B77 */
+      '?', /* U+8B78 */
+      '?', /* U+8B79 */
+      '?', /* U+8B7A */
+      '?', /* U+8B7B */
+      '?', /* U+8B7C */
+   0xe6a3, /* U+8B7D */
+      '?', /* U+8B7E */
+   0xfbac, /* U+8B7F */
+   0xe6a4, /* U+8B80 */
+      '?', /* U+8B81 */
+      '?', /* U+8B82 */
+   0x8e5d, /* U+8B83 */
+      '?', /* U+8B84 */
+      '?', /* U+8B85 */
+      '?', /* U+8B86 */
+      '?', /* U+8B87 */
+      '?', /* U+8B88 */
+      '?', /* U+8B89 */
+   0x9dcc, /* U+8B8A */
+      '?', /* U+8B8B */
+   0xe6a5, /* U+8B8C */
+      '?', /* U+8B8D */
+   0xe6a6, /* U+8B8E */
+      '?', /* U+8B8F */
+   0x8f51, /* U+8B90 */
+      '?', /* U+8B91 */
+   0xe6a7, /* U+8B92 */
+   0xe6a8, /* U+8B93 */
+      '?', /* U+8B94 */
+      '?', /* U+8B95 */
+   0xe6a9, /* U+8B96 */
+      '?', /* U+8B97 */
+      '?', /* U+8B98 */
+   0xe6aa, /* U+8B99 */
+   0xe6ab, /* U+8B9A */
+      '?', /* U+8B9B */
+      '?', /* U+8B9C */
+      '?', /* U+8B9D */
+      '?', /* U+8B9E */
+      '?', /* U+8B9F */
+      '?', /* U+8BA0 */
+      '?', /* U+8BA1 */
+      '?', /* U+8BA2 */
+      '?', /* U+8BA3 */
+      '?', /* U+8BA4 */
+      '?', /* U+8BA5 */
+      '?', /* U+8BA6 */
+      '?', /* U+8BA7 */
+      '?', /* U+8BA8 */
+      '?', /* U+8BA9 */
+      '?', /* U+8BAA */
+      '?', /* U+8BAB */
+      '?', /* U+8BAC */
+      '?', /* U+8BAD */
+      '?', /* U+8BAE */
+      '?', /* U+8BAF */
+      '?', /* U+8BB0 */
+      '?', /* U+8BB1 */
+      '?', /* U+8BB2 */
+      '?', /* U+8BB3 */
+      '?', /* U+8BB4 */
+      '?', /* U+8BB5 */
+      '?', /* U+8BB6 */
+      '?', /* U+8BB7 */
+      '?', /* U+8BB8 */
+      '?', /* U+8BB9 */
+      '?', /* U+8BBA */
+      '?', /* U+8BBB */
+      '?', /* U+8BBC */
+      '?', /* U+8BBD */
+      '?', /* U+8BBE */
+      '?', /* U+8BBF */
+      '?', /* U+8BC0 */
+      '?', /* U+8BC1 */
+      '?', /* U+8BC2 */
+      '?', /* U+8BC3 */
+      '?', /* U+8BC4 */
+      '?', /* U+8BC5 */
+      '?', /* U+8BC6 */
+      '?', /* U+8BC7 */
+      '?', /* U+8BC8 */
+      '?', /* U+8BC9 */
+      '?', /* U+8BCA */
+      '?', /* U+8BCB */
+      '?', /* U+8BCC */
+      '?', /* U+8BCD */
+      '?', /* U+8BCE */
+      '?', /* U+8BCF */
+      '?', /* U+8BD0 */
+      '?', /* U+8BD1 */
+      '?', /* U+8BD2 */
+      '?', /* U+8BD3 */
+      '?', /* U+8BD4 */
+      '?', /* U+8BD5 */
+      '?', /* U+8BD6 */
+      '?', /* U+8BD7 */
+      '?', /* U+8BD8 */
+      '?', /* U+8BD9 */
+      '?', /* U+8BDA */
+      '?', /* U+8BDB */
+      '?', /* U+8BDC */
+      '?', /* U+8BDD */
+      '?', /* U+8BDE */
+      '?', /* U+8BDF */
+      '?', /* U+8BE0 */
+      '?', /* U+8BE1 */
+      '?', /* U+8BE2 */
+      '?', /* U+8BE3 */
+      '?', /* U+8BE4 */
+      '?', /* U+8BE5 */
+      '?', /* U+8BE6 */
+      '?', /* U+8BE7 */
+      '?', /* U+8BE8 */
+      '?', /* U+8BE9 */
+      '?', /* U+8BEA */
+      '?', /* U+8BEB */
+      '?', /* U+8BEC */
+      '?', /* U+8BED */
+      '?', /* U+8BEE */
+      '?', /* U+8BEF */
+      '?', /* U+8BF0 */
+      '?', /* U+8BF1 */
+      '?', /* U+8BF2 */
+      '?', /* U+8BF3 */
+      '?', /* U+8BF4 */
+      '?', /* U+8BF5 */
+      '?', /* U+8BF6 */
+      '?', /* U+8BF7 */
+      '?', /* U+8BF8 */
+      '?', /* U+8BF9 */
+      '?', /* U+8BFA */
+      '?', /* U+8BFB */
+      '?', /* U+8BFC */
+      '?', /* U+8BFD */
+      '?', /* U+8BFE */
+      '?', /* U+8BFF */
+      '?', /* U+8C00 */
+      '?', /* U+8C01 */
+      '?', /* U+8C02 */
+      '?', /* U+8C03 */
+      '?', /* U+8C04 */
+      '?', /* U+8C05 */
+      '?', /* U+8C06 */
+      '?', /* U+8C07 */
+      '?', /* U+8C08 */
+      '?', /* U+8C09 */
+      '?', /* U+8C0A */
+      '?', /* U+8C0B */
+      '?', /* U+8C0C */
+      '?', /* U+8C0D */
+      '?', /* U+8C0E */
+      '?', /* U+8C0F */
+      '?', /* U+8C10 */
+      '?', /* U+8C11 */
+      '?', /* U+8C12 */
+      '?', /* U+8C13 */
+      '?', /* U+8C14 */
+      '?', /* U+8C15 */
+      '?', /* U+8C16 */
+      '?', /* U+8C17 */
+      '?', /* U+8C18 */
+      '?', /* U+8C19 */
+      '?', /* U+8C1A */
+      '?', /* U+8C1B */
+      '?', /* U+8C1C */
+      '?', /* U+8C1D */
+      '?', /* U+8C1E */
+      '?', /* U+8C1F */
+      '?', /* U+8C20 */
+      '?', /* U+8C21 */
+      '?', /* U+8C22 */
+      '?', /* U+8C23 */
+      '?', /* U+8C24 */
+      '?', /* U+8C25 */
+      '?', /* U+8C26 */
+      '?', /* U+8C27 */
+      '?', /* U+8C28 */
+      '?', /* U+8C29 */
+      '?', /* U+8C2A */
+      '?', /* U+8C2B */
+      '?', /* U+8C2C */
+      '?', /* U+8C2D */
+      '?', /* U+8C2E */
+      '?', /* U+8C2F */
+      '?', /* U+8C30 */
+      '?', /* U+8C31 */
+      '?', /* U+8C32 */
+      '?', /* U+8C33 */
+      '?', /* U+8C34 */
+      '?', /* U+8C35 */
+      '?', /* U+8C36 */
+   0x924a, /* U+8C37 */
+      '?', /* U+8C38 */
+      '?', /* U+8C39 */
+   0xe6ac, /* U+8C3A */
+      '?', /* U+8C3B */
+      '?', /* U+8C3C */
+      '?', /* U+8C3D */
+      '?', /* U+8C3E */
+   0xe6ae, /* U+8C3F */
+      '?', /* U+8C40 */
+   0xe6ad, /* U+8C41 */
+      '?', /* U+8C42 */
+      '?', /* U+8C43 */
+      '?', /* U+8C44 */
+      '?', /* U+8C45 */
+   0x93a4, /* U+8C46 */
+      '?', /* U+8C47 */
+   0xe6af, /* U+8C48 */
+      '?', /* U+8C49 */
+   0x964c, /* U+8C4A */
+      '?', /* U+8C4B */
+   0xe6b0, /* U+8C4C */
+      '?', /* U+8C4D */
+   0xe6b1, /* U+8C4E */
+      '?', /* U+8C4F */
+   0xe6b2, /* U+8C50 */
+      '?', /* U+8C51 */
+      '?', /* U+8C52 */
+      '?', /* U+8C53 */
+      '?', /* U+8C54 */
+   0xe6b3, /* U+8C55 */
+      '?', /* U+8C56 */
+      '?', /* U+8C57 */
+      '?', /* U+8C58 */
+      '?', /* U+8C59 */
+   0x93d8, /* U+8C5A */
+      '?', /* U+8C5B */
+      '?', /* U+8C5C */
+      '?', /* U+8C5D */
+      '?', /* U+8C5E */
+      '?', /* U+8C5F */
+      '?', /* U+8C60 */
+   0x8fdb, /* U+8C61 */
+   0xe6b4, /* U+8C62 */
+      '?', /* U+8C63 */
+      '?', /* U+8C64 */
+      '?', /* U+8C65 */
+      '?', /* U+8C66 */
+      '?', /* U+8C67 */
+      '?', /* U+8C68 */
+      '?', /* U+8C69 */
+   0x8d8b, /* U+8C6A */
+   0x98ac, /* U+8C6B */
+   0xe6b5, /* U+8C6C */
+      '?', /* U+8C6D */
+      '?', /* U+8C6E */
+      '?', /* U+8C6F */
+      '?', /* U+8C70 */
+      '?', /* U+8C71 */
+      '?', /* U+8C72 */
+      '?', /* U+8C73 */
+      '?', /* U+8C74 */
+      '?', /* U+8C75 */
+      '?', /* U+8C76 */
+      '?', /* U+8C77 */
+   0xe6b6, /* U+8C78 */
+   0x955e, /* U+8C79 */
+   0xe6b7, /* U+8C7A */
+      '?', /* U+8C7B */
+   0xe6bf, /* U+8C7C */
+      '?', /* U+8C7D */
+      '?', /* U+8C7E */
+      '?', /* U+8C7F */
+      '?', /* U+8C80 */
+      '?', /* U+8C81 */
+   0xe6b8, /* U+8C82 */
+      '?', /* U+8C83 */
+      '?', /* U+8C84 */
+   0xe6ba, /* U+8C85 */
+      '?', /* U+8C86 */
+      '?', /* U+8C87 */
+      '?', /* U+8C88 */
+   0xe6b9, /* U+8C89 */
+   0xe6bb, /* U+8C8A */
+      '?', /* U+8C8B */
+   0x9665, /* U+8C8C */
+   0xe6bc, /* U+8C8D */
+   0xe6bd, /* U+8C8E */
+      '?', /* U+8C8F */
+      '?', /* U+8C90 */
+      '?', /* U+8C91 */
+      '?', /* U+8C92 */
+      '?', /* U+8C93 */
+   0xe6be, /* U+8C94 */
+      '?', /* U+8C95 */
+      '?', /* U+8C96 */
+      '?', /* U+8C97 */
+   0xe6c0, /* U+8C98 */
+      '?', /* U+8C99 */
+      '?', /* U+8C9A */
+      '?', /* U+8C9B */
+      '?', /* U+8C9C */
+   0x8a4c, /* U+8C9D */
+   0x92e5, /* U+8C9E */
+      '?', /* U+8C9F */
+   0x9589, /* U+8CA0 */
+   0x8de0, /* U+8CA1 */
+   0x8d76, /* U+8CA2 */
+      '?', /* U+8CA3 */
+      '?', /* U+8CA4 */
+      '?', /* U+8CA5 */
+      '?', /* U+8CA6 */
+   0x956e, /* U+8CA7 */
+   0x89dd, /* U+8CA8 */
+   0x94cc, /* U+8CA9 */
+   0xe6c3, /* U+8CAA */
+   0x8ad1, /* U+8CAB */
+   0x90d3, /* U+8CAC */
+   0xe6c2, /* U+8CAD */
+   0xe6c7, /* U+8CAE */
+   0x9299, /* U+8CAF */
+   0x96e1, /* U+8CB0 */
+      '?', /* U+8CB1 */
+   0xe6c5, /* U+8CB2 */
+   0xe6c6, /* U+8CB3 */
+   0x8b4d, /* U+8CB4 */
+      '?', /* U+8CB5 */
+   0xe6c8, /* U+8CB6 */
+   0x9483, /* U+8CB7 */
+   0x91dd, /* U+8CB8 */
+      '?', /* U+8CB9 */
+      '?', /* U+8CBA */
+   0x94ef, /* U+8CBB */
+   0x935c, /* U+8CBC */
+   0xe6c4, /* U+8CBD */
+      '?', /* U+8CBE */
+   0x9666, /* U+8CBF */
+   0x89ea, /* U+8CC0 */
+   0xe6ca, /* U+8CC1 */
+   0x9847, /* U+8CC2 */
+   0x92c0, /* U+8CC3 */
+   0x9864, /* U+8CC4 */
+      '?', /* U+8CC5 */
+      '?', /* U+8CC6 */
+   0x8e91, /* U+8CC7 */
+   0xe6c9, /* U+8CC8 */
+      '?', /* U+8CC9 */
+   0x91af, /* U+8CCA */
+      '?', /* U+8CCB */
+      '?', /* U+8CCC */
+   0xe6da, /* U+8CCD */
+   0x9147, /* U+8CCE */
+      '?', /* U+8CCF */
+      '?', /* U+8CD0 */
+   0x93f6, /* U+8CD1 */
+      '?', /* U+8CD2 */
+   0x956f, /* U+8CD3 */
+      '?', /* U+8CD4 */
+      '?', /* U+8CD5 */
+      '?', /* U+8CD6 */
+      '?', /* U+8CD7 */
+      '?', /* U+8CD8 */
+      '?', /* U+8CD9 */
+   0xe6cd, /* U+8CDA */
+   0x8e5e, /* U+8CDB */
+   0x8e92, /* U+8CDC */
+      '?', /* U+8CDD */
+   0x8fdc, /* U+8CDE */
+      '?', /* U+8CDF */
+   0x9485, /* U+8CE0 */
+      '?', /* U+8CE1 */
+   0x8cab, /* U+8CE2 */
+   0xe6cc, /* U+8CE3 */
+   0xe6cb, /* U+8CE4 */
+      '?', /* U+8CE5 */
+   0x958a, /* U+8CE6 */
+      '?', /* U+8CE7 */
+      '?', /* U+8CE8 */
+      '?', /* U+8CE9 */
+   0x8ebf, /* U+8CEA */
+      '?', /* U+8CEB */
+      '?', /* U+8CEC */
+   0x9371, /* U+8CED */
+      '?', /* U+8CEE */
+      '?', /* U+8CEF */
+   0xfbad, /* U+8CF0 */
+      '?', /* U+8CF1 */
+      '?', /* U+8CF2 */
+      '?', /* U+8CF3 */
+   0xfbae, /* U+8CF4 */
+      '?', /* U+8CF5 */
+      '?', /* U+8CF6 */
+      '?', /* U+8CF7 */
+      '?', /* U+8CF8 */
+      '?', /* U+8CF9 */
+   0xe6cf, /* U+8CFA */
+   0xe6d0, /* U+8CFB */
+   0x8d77, /* U+8CFC */
+   0xe6ce, /* U+8CFD */
+      '?', /* U+8CFE */
+      '?', /* U+8CFF */
+      '?', /* U+8D00 */
+      '?', /* U+8D01 */
+      '?', /* U+8D02 */
+      '?', /* U+8D03 */
+   0xe6d1, /* U+8D04 */
+   0xe6d2, /* U+8D05 */
+      '?', /* U+8D06 */
+   0xe6d4, /* U+8D07 */
+   0x91a1, /* U+8D08 */
+      '?', /* U+8D09 */
+   0xe6d3, /* U+8D0A */
+   0x8ae4, /* U+8D0B */
+      '?', /* U+8D0C */
+   0xe6d6, /* U+8D0D */
+      '?', /* U+8D0E */
+   0xe6d5, /* U+8D0F */
+   0xe6d7, /* U+8D10 */
+      '?', /* U+8D11 */
+   0xfbaf, /* U+8D12 */
+   0xe6d9, /* U+8D13 */
+   0xe6db, /* U+8D14 */
+      '?', /* U+8D15 */
+   0xe6dc, /* U+8D16 */
+      '?', /* U+8D17 */
+      '?', /* U+8D18 */
+      '?', /* U+8D19 */
+      '?', /* U+8D1A */
+      '?', /* U+8D1B */
+      '?', /* U+8D1C */
+      '?', /* U+8D1D */
+      '?', /* U+8D1E */
+      '?', /* U+8D1F */
+      '?', /* U+8D20 */
+      '?', /* U+8D21 */
+      '?', /* U+8D22 */
+      '?', /* U+8D23 */
+      '?', /* U+8D24 */
+      '?', /* U+8D25 */
+      '?', /* U+8D26 */
+      '?', /* U+8D27 */
+      '?', /* U+8D28 */
+      '?', /* U+8D29 */
+      '?', /* U+8D2A */
+      '?', /* U+8D2B */
+      '?', /* U+8D2C */
+      '?', /* U+8D2D */
+      '?', /* U+8D2E */
+      '?', /* U+8D2F */
+      '?', /* U+8D30 */
+      '?', /* U+8D31 */
+      '?', /* U+8D32 */
+      '?', /* U+8D33 */
+      '?', /* U+8D34 */
+      '?', /* U+8D35 */
+      '?', /* U+8D36 */
+      '?', /* U+8D37 */
+      '?', /* U+8D38 */
+      '?', /* U+8D39 */
+      '?', /* U+8D3A */
+      '?', /* U+8D3B */
+      '?', /* U+8D3C */
+      '?', /* U+8D3D */
+      '?', /* U+8D3E */
+      '?', /* U+8D3F */
+      '?', /* U+8D40 */
+      '?', /* U+8D41 */
+      '?', /* U+8D42 */
+      '?', /* U+8D43 */
+      '?', /* U+8D44 */
+      '?', /* U+8D45 */
+      '?', /* U+8D46 */
+      '?', /* U+8D47 */
+      '?', /* U+8D48 */
+      '?', /* U+8D49 */
+      '?', /* U+8D4A */
+      '?', /* U+8D4B */
+      '?', /* U+8D4C */
+      '?', /* U+8D4D */
+      '?', /* U+8D4E */
+      '?', /* U+8D4F */
+      '?', /* U+8D50 */
+      '?', /* U+8D51 */
+      '?', /* U+8D52 */
+      '?', /* U+8D53 */
+      '?', /* U+8D54 */
+      '?', /* U+8D55 */
+      '?', /* U+8D56 */
+      '?', /* U+8D57 */
+      '?', /* U+8D58 */
+      '?', /* U+8D59 */
+      '?', /* U+8D5A */
+      '?', /* U+8D5B */
+      '?', /* U+8D5C */
+      '?', /* U+8D5D */
+      '?', /* U+8D5E */
+      '?', /* U+8D5F */
+      '?', /* U+8D60 */
+      '?', /* U+8D61 */
+      '?', /* U+8D62 */
+      '?', /* U+8D63 */
+   0x90d4, /* U+8D64 */
+      '?', /* U+8D65 */
+   0x8ecd, /* U+8D66 */
+   0xe6dd, /* U+8D67 */
+      '?', /* U+8D68 */
+      '?', /* U+8D69 */
+      '?', /* U+8D6A */
+   0x8a71, /* U+8D6B */
+      '?', /* U+8D6C */
+   0xe6de, /* U+8D6D */
+      '?', /* U+8D6E */
+      '?', /* U+8D6F */
+   0x9196, /* U+8D70 */
+   0xe6df, /* U+8D71 */
+      '?', /* U+8D72 */
+   0xe6e0, /* U+8D73 */
+   0x958b, /* U+8D74 */
+      '?', /* U+8D75 */
+   0xfbb0, /* U+8D76 */
+   0x8b4e, /* U+8D77 */
+      '?', /* U+8D78 */
+      '?', /* U+8D79 */
+      '?', /* U+8D7A */
+      '?', /* U+8D7B */
+      '?', /* U+8D7C */
+      '?', /* U+8D7D */
+      '?', /* U+8D7E */
+      '?', /* U+8D7F */
+      '?', /* U+8D80 */
+   0xe6e1, /* U+8D81 */
+      '?', /* U+8D82 */
+      '?', /* U+8D83 */
+      '?', /* U+8D84 */
+   0x92b4, /* U+8D85 */
+      '?', /* U+8D86 */
+      '?', /* U+8D87 */
+      '?', /* U+8D88 */
+      '?', /* U+8D89 */
+   0x897a, /* U+8D8A */
+      '?', /* U+8D8B */
+      '?', /* U+8D8C */
+      '?', /* U+8D8D */
+      '?', /* U+8D8E */
+      '?', /* U+8D8F */
+      '?', /* U+8D90 */
+      '?', /* U+8D91 */
+      '?', /* U+8D92 */
+      '?', /* U+8D93 */
+      '?', /* U+8D94 */
+      '?', /* U+8D95 */
+      '?', /* U+8D96 */
+      '?', /* U+8D97 */
+      '?', /* U+8D98 */
+   0xe6e2, /* U+8D99 */
+      '?', /* U+8D9A */
+      '?', /* U+8D9B */
+      '?', /* U+8D9C */
+      '?', /* U+8D9D */
+      '?', /* U+8D9E */
+      '?', /* U+8D9F */
+      '?', /* U+8DA0 */
+      '?', /* U+8DA1 */
+      '?', /* U+8DA2 */
+   0x8eef, /* U+8DA3 */
+      '?', /* U+8DA4 */
+      '?', /* U+8DA5 */
+      '?', /* U+8DA6 */
+      '?', /* U+8DA7 */
+   0x9096, /* U+8DA8 */
+      '?', /* U+8DA9 */
+      '?', /* U+8DAA */
+      '?', /* U+8DAB */
+      '?', /* U+8DAC */
+      '?', /* U+8DAD */
+      '?', /* U+8DAE */
+      '?', /* U+8DAF */
+      '?', /* U+8DB0 */
+      '?', /* U+8DB1 */
+      '?', /* U+8DB2 */
+   0x91ab, /* U+8DB3 */
+      '?', /* U+8DB4 */
+      '?', /* U+8DB5 */
+      '?', /* U+8DB6 */
+      '?', /* U+8DB7 */
+      '?', /* U+8DB8 */
+      '?', /* U+8DB9 */
+   0xe6e5, /* U+8DBA */
+      '?', /* U+8DBB */
+      '?', /* U+8DBC */
+      '?', /* U+8DBD */
+   0xe6e4, /* U+8DBE */
+      '?', /* U+8DBF */
+      '?', /* U+8DC0 */
+      '?', /* U+8DC1 */
+   0xe6e3, /* U+8DC2 */
+      '?', /* U+8DC3 */
+      '?', /* U+8DC4 */
+      '?', /* U+8DC5 */
+      '?', /* U+8DC6 */
+      '?', /* U+8DC7 */
+      '?', /* U+8DC8 */
+      '?', /* U+8DC9 */
+      '?', /* U+8DCA */
+   0xe6eb, /* U+8DCB */
+   0xe6e9, /* U+8DCC */
+      '?', /* U+8DCD */
+      '?', /* U+8DCE */
+   0xe6e6, /* U+8DCF */
+      '?', /* U+8DD0 */
+      '?', /* U+8DD1 */
+      '?', /* U+8DD2 */
+      '?', /* U+8DD3 */
+      '?', /* U+8DD4 */
+      '?', /* U+8DD5 */
+   0xe6e8, /* U+8DD6 */
+      '?', /* U+8DD7 */
+      '?', /* U+8DD8 */
+      '?', /* U+8DD9 */
+   0xe6e7, /* U+8DDA */
+   0xe6ea, /* U+8DDB */
+      '?', /* U+8DDC */
+   0x8b97, /* U+8DDD */
+      '?', /* U+8DDE */
+   0xe6ee, /* U+8DDF */
+      '?', /* U+8DE0 */
+   0x90d5, /* U+8DE1 */
+      '?', /* U+8DE2 */
+   0xe6ef, /* U+8DE3 */
+      '?', /* U+8DE4 */
+      '?', /* U+8DE5 */
+      '?', /* U+8DE6 */
+      '?', /* U+8DE7 */
+   0x8cd7, /* U+8DE8 */
+      '?', /* U+8DE9 */
+   0xe6ec, /* U+8DEA */
+   0xe6ed, /* U+8DEB */
+      '?', /* U+8DEC */
+      '?', /* U+8DED */
+      '?', /* U+8DEE */
+   0x9848, /* U+8DEF */
+      '?', /* U+8DF0 */
+      '?', /* U+8DF1 */
+      '?', /* U+8DF2 */
+   0x92b5, /* U+8DF3 */
+      '?', /* U+8DF4 */
+   0x9148, /* U+8DF5 */
+      '?', /* U+8DF6 */
+      '?', /* U+8DF7 */
+      '?', /* U+8DF8 */
+      '?', /* U+8DF9 */
+      '?', /* U+8DFA */
+      '?', /* U+8DFB */
+   0xe6f0, /* U+8DFC */
+      '?', /* U+8DFD */
+      '?', /* U+8DFE */
+   0xe6f3, /* U+8DFF */
+      '?', /* U+8E00 */
+      '?', /* U+8E01 */
+      '?', /* U+8E02 */
+      '?', /* U+8E03 */
+      '?', /* U+8E04 */
+      '?', /* U+8E05 */
+      '?', /* U+8E06 */
+      '?', /* U+8E07 */
+   0xe6f1, /* U+8E08 */
+   0xe6f2, /* U+8E09 */
+   0x9778, /* U+8E0A */
+      '?', /* U+8E0B */
+      '?', /* U+8E0C */
+      '?', /* U+8E0D */
+      '?', /* U+8E0E */
+   0x93a5, /* U+8E0F */
+   0xe6f6, /* U+8E10 */
+      '?', /* U+8E11 */
+      '?', /* U+8E12 */
+      '?', /* U+8E13 */
+      '?', /* U+8E14 */
+      '?', /* U+8E15 */
+      '?', /* U+8E16 */
+      '?', /* U+8E17 */
+      '?', /* U+8E18 */
+      '?', /* U+8E19 */
+      '?', /* U+8E1A */
+      '?', /* U+8E1B */
+      '?', /* U+8E1C */
+   0xe6f4, /* U+8E1D */
+   0xe6f5, /* U+8E1E */
+   0xe6f7, /* U+8E1F */
+      '?', /* U+8E20 */
+      '?', /* U+8E21 */
+      '?', /* U+8E22 */
+      '?', /* U+8E23 */
+      '?', /* U+8E24 */
+      '?', /* U+8E25 */
+      '?', /* U+8E26 */
+      '?', /* U+8E27 */
+      '?', /* U+8E28 */
+      '?', /* U+8E29 */
+   0xe748, /* U+8E2A */
+      '?', /* U+8E2B */
+      '?', /* U+8E2C */
+      '?', /* U+8E2D */
+      '?', /* U+8E2E */
+      '?', /* U+8E2F */
+   0xe6fa, /* U+8E30 */
+      '?', /* U+8E31 */
+      '?', /* U+8E32 */
+      '?', /* U+8E33 */
+   0xe6fb, /* U+8E34 */
+   0xe6f9, /* U+8E35 */
+      '?', /* U+8E36 */
+      '?', /* U+8E37 */
+      '?', /* U+8E38 */
+      '?', /* U+8E39 */
+      '?', /* U+8E3A */
+      '?', /* U+8E3B */
+      '?', /* U+8E3C */
+      '?', /* U+8E3D */
+      '?', /* U+8E3E */
+      '?', /* U+8E3F */
+      '?', /* U+8E40 */
+      '?', /* U+8E41 */
+   0xe6f8, /* U+8E42 */
+      '?', /* U+8E43 */
+   0x92fb, /* U+8E44 */
+      '?', /* U+8E45 */
+      '?', /* U+8E46 */
+   0xe740, /* U+8E47 */
+   0xe744, /* U+8E48 */
+   0xe741, /* U+8E49 */
+   0xe6fc, /* U+8E4A */
+      '?', /* U+8E4B */
+   0xe742, /* U+8E4C */
+      '?', /* U+8E4D */
+      '?', /* U+8E4E */
+      '?', /* U+8E4F */
+   0xe743, /* U+8E50 */
+      '?', /* U+8E51 */
+      '?', /* U+8E52 */
+      '?', /* U+8E53 */
+      '?', /* U+8E54 */
+   0xe74a, /* U+8E55 */
+      '?', /* U+8E56 */
+      '?', /* U+8E57 */
+      '?', /* U+8E58 */
+   0xe745, /* U+8E59 */
+      '?', /* U+8E5A */
+      '?', /* U+8E5B */
+      '?', /* U+8E5C */
+      '?', /* U+8E5D */
+      '?', /* U+8E5E */
+   0x90d6, /* U+8E5F */
+   0xe747, /* U+8E60 */
+      '?', /* U+8E61 */
+      '?', /* U+8E62 */
+   0xe749, /* U+8E63 */
+   0xe746, /* U+8E64 */
+      '?', /* U+8E65 */
+      '?', /* U+8E66 */
+      '?', /* U+8E67 */
+      '?', /* U+8E68 */
+      '?', /* U+8E69 */
+      '?', /* U+8E6A */
+      '?', /* U+8E6B */
+      '?', /* U+8E6C */
+      '?', /* U+8E6D */
+      '?', /* U+8E6E */
+      '?', /* U+8E6F */
+      '?', /* U+8E70 */
+      '?', /* U+8E71 */
+   0xe74c, /* U+8E72 */
+      '?', /* U+8E73 */
+   0x8f52, /* U+8E74 */
+      '?', /* U+8E75 */
+   0xe74b, /* U+8E76 */
+      '?', /* U+8E77 */
+      '?', /* U+8E78 */
+      '?', /* U+8E79 */
+      '?', /* U+8E7A */
+      '?', /* U+8E7B */
+   0xe74d, /* U+8E7C */
+      '?', /* U+8E7D */
+      '?', /* U+8E7E */
+      '?', /* U+8E7F */
+      '?', /* U+8E80 */
+   0xe74e, /* U+8E81 */
+      '?', /* U+8E82 */
+      '?', /* U+8E83 */
+   0xe751, /* U+8E84 */
+   0xe750, /* U+8E85 */
+      '?', /* U+8E86 */
+   0xe74f, /* U+8E87 */
+      '?', /* U+8E88 */
+      '?', /* U+8E89 */
+   0xe753, /* U+8E8A */
+   0xe752, /* U+8E8B */
+      '?', /* U+8E8C */
+   0x96f4, /* U+8E8D */
+      '?', /* U+8E8E */
+      '?', /* U+8E8F */
+      '?', /* U+8E90 */
+   0xe755, /* U+8E91 */
+      '?', /* U+8E92 */
+   0xe754, /* U+8E93 */
+   0xe756, /* U+8E94 */
+      '?', /* U+8E95 */
+      '?', /* U+8E96 */
+      '?', /* U+8E97 */
+      '?', /* U+8E98 */
+   0xe757, /* U+8E99 */
+      '?', /* U+8E9A */
+      '?', /* U+8E9B */
+      '?', /* U+8E9C */
+      '?', /* U+8E9D */
+      '?', /* U+8E9E */
+      '?', /* U+8E9F */
+      '?', /* U+8EA0 */
+   0xe759, /* U+8EA1 */
+      '?', /* U+8EA2 */
+      '?', /* U+8EA3 */
+      '?', /* U+8EA4 */
+      '?', /* U+8EA5 */
+      '?', /* U+8EA6 */
+      '?', /* U+8EA7 */
+      '?', /* U+8EA8 */
+      '?', /* U+8EA9 */
+   0xe758, /* U+8EAA */
+   0x9067, /* U+8EAB */
+   0xe75a, /* U+8EAC */
+      '?', /* U+8EAD */
+      '?', /* U+8EAE */
+   0x8beb, /* U+8EAF */
+   0xe75b, /* U+8EB0 */
+   0xe75d, /* U+8EB1 */
+      '?', /* U+8EB2 */
+      '?', /* U+8EB3 */
+      '?', /* U+8EB4 */
+      '?', /* U+8EB5 */
+      '?', /* U+8EB6 */
+      '?', /* U+8EB7 */
+      '?', /* U+8EB8 */
+      '?', /* U+8EB9 */
+      '?', /* U+8EBA */
+      '?', /* U+8EBB */
+      '?', /* U+8EBC */
+      '?', /* U+8EBD */
+   0xe75e, /* U+8EBE */
+      '?', /* U+8EBF */
+      '?', /* U+8EC0 */
+      '?', /* U+8EC1 */
+      '?', /* U+8EC2 */
+      '?', /* U+8EC3 */
+      '?', /* U+8EC4 */
+   0xe75f, /* U+8EC5 */
+   0xe75c, /* U+8EC6 */
+      '?', /* U+8EC7 */
+   0xe760, /* U+8EC8 */
+      '?', /* U+8EC9 */
+   0x8ed4, /* U+8ECA */
+   0xe761, /* U+8ECB */
+   0x8b4f, /* U+8ECC */
+   0x8c52, /* U+8ECD */
+      '?', /* U+8ECE */
+   0xfbb2, /* U+8ECF */
+      '?', /* U+8ED0 */
+      '?', /* U+8ED1 */
+   0x8cac, /* U+8ED2 */
+      '?', /* U+8ED3 */
+      '?', /* U+8ED4 */
+      '?', /* U+8ED5 */
+      '?', /* U+8ED6 */
+      '?', /* U+8ED7 */
+      '?', /* U+8ED8 */
+      '?', /* U+8ED9 */
+      '?', /* U+8EDA */
+   0xe762, /* U+8EDB */
+      '?', /* U+8EDC */
+      '?', /* U+8EDD */
+      '?', /* U+8EDE */
+   0x93ee, /* U+8EDF */
+      '?', /* U+8EE0 */
+      '?', /* U+8EE1 */
+   0x935d, /* U+8EE2 */
+   0xe763, /* U+8EE3 */
+      '?', /* U+8EE4 */
+      '?', /* U+8EE5 */
+      '?', /* U+8EE6 */
+      '?', /* U+8EE7 */
+      '?', /* U+8EE8 */
+      '?', /* U+8EE9 */
+      '?', /* U+8EEA */
+   0xe766, /* U+8EEB */
+      '?', /* U+8EEC */
+      '?', /* U+8EED */
+      '?', /* U+8EEE */
+      '?', /* U+8EEF */
+      '?', /* U+8EF0 */
+      '?', /* U+8EF1 */
+      '?', /* U+8EF2 */
+      '?', /* U+8EF3 */
+      '?', /* U+8EF4 */
+      '?', /* U+8EF5 */
+      '?', /* U+8EF6 */
+      '?', /* U+8EF7 */
+   0x8eb2, /* U+8EF8 */
+      '?', /* U+8EF9 */
+      '?', /* U+8EFA */
+   0xe765, /* U+8EFB */
+   0xe764, /* U+8EFC */
+   0x8c79, /* U+8EFD */
+   0xe767, /* U+8EFE */
+      '?', /* U+8EFF */
+      '?', /* U+8F00 */
+      '?', /* U+8F01 */
+      '?', /* U+8F02 */
+   0x8a72, /* U+8F03 */
+      '?', /* U+8F04 */
+   0xe769, /* U+8F05 */
+      '?', /* U+8F06 */
+      '?', /* U+8F07 */
+      '?', /* U+8F08 */
+   0x8dda, /* U+8F09 */
+   0xe768, /* U+8F0A */
+      '?', /* U+8F0B */
+   0xe771, /* U+8F0C */
+      '?', /* U+8F0D */
+      '?', /* U+8F0E */
+      '?', /* U+8F0F */
+      '?', /* U+8F10 */
+      '?', /* U+8F11 */
+   0xe76b, /* U+8F12 */
+   0xe76d, /* U+8F13 */
+   0x95e3, /* U+8F14 */
+   0xe76a, /* U+8F15 */
+      '?', /* U+8F16 */
+      '?', /* U+8F17 */
+      '?', /* U+8F18 */
+   0xe76c, /* U+8F19 */
+      '?', /* U+8F1A */
+   0xe770, /* U+8F1B */
+   0xe76e, /* U+8F1C */
+   0x8b50, /* U+8F1D */
+      '?', /* U+8F1E */
+   0xe76f, /* U+8F1F */
+      '?', /* U+8F20 */
+      '?', /* U+8F21 */
+      '?', /* U+8F22 */
+      '?', /* U+8F23 */
+      '?', /* U+8F24 */
+      '?', /* U+8F25 */
+   0xe772, /* U+8F26 */
+      '?', /* U+8F27 */
+      '?', /* U+8F28 */
+   0x9479, /* U+8F29 */
+   0x97d6, /* U+8F2A */
+      '?', /* U+8F2B */
+      '?', /* U+8F2C */
+      '?', /* U+8F2D */
+      '?', /* U+8F2E */
+   0x8f53, /* U+8F2F */
+      '?', /* U+8F30 */
+      '?', /* U+8F31 */
+      '?', /* U+8F32 */
+   0xe773, /* U+8F33 */
+      '?', /* U+8F34 */
+      '?', /* U+8F35 */
+      '?', /* U+8F36 */
+      '?', /* U+8F37 */
+   0x9741, /* U+8F38 */
+   0xe775, /* U+8F39 */
+      '?', /* U+8F3A */
+   0xe774, /* U+8F3B */
+      '?', /* U+8F3C */
+      '?', /* U+8F3D */
+   0xe778, /* U+8F3E */
+   0x9760, /* U+8F3F */
+      '?', /* U+8F40 */
+      '?', /* U+8F41 */
+   0xe777, /* U+8F42 */
+      '?', /* U+8F43 */
+   0x8a8d, /* U+8F44 */
+   0xe776, /* U+8F45 */
+   0xe77b, /* U+8F46 */
+      '?', /* U+8F47 */
+      '?', /* U+8F48 */
+   0xe77a, /* U+8F49 */
+      '?', /* U+8F4A */
+      '?', /* U+8F4B */
+   0xe779, /* U+8F4C */
+   0x9351, /* U+8F4D */
+   0xe77c, /* U+8F4E */
+      '?', /* U+8F4F */
+      '?', /* U+8F50 */
+      '?', /* U+8F51 */
+      '?', /* U+8F52 */
+      '?', /* U+8F53 */
+      '?', /* U+8F54 */
+      '?', /* U+8F55 */
+      '?', /* U+8F56 */
+   0xe77d, /* U+8F57 */
+      '?', /* U+8F58 */
+      '?', /* U+8F59 */
+      '?', /* U+8F5A */
+      '?', /* U+8F5B */
+   0xe77e, /* U+8F5C */
+      '?', /* U+8F5D */
+      '?', /* U+8F5E */
+   0x8d8c, /* U+8F5F */
+      '?', /* U+8F60 */
+   0x8c44, /* U+8F61 */
+   0xe780, /* U+8F62 */
+   0xe781, /* U+8F63 */
+   0xe782, /* U+8F64 */
+      '?', /* U+8F65 */
+      '?', /* U+8F66 */
+      '?', /* U+8F67 */
+      '?', /* U+8F68 */
+      '?', /* U+8F69 */
+      '?', /* U+8F6A */
+      '?', /* U+8F6B */
+      '?', /* U+8F6C */
+      '?', /* U+8F6D */
+      '?', /* U+8F6E */
+      '?', /* U+8F6F */
+      '?', /* U+8F70 */
+      '?', /* U+8F71 */
+      '?', /* U+8F72 */
+      '?', /* U+8F73 */
+      '?', /* U+8F74 */
+      '?', /* U+8F75 */
+      '?', /* U+8F76 */
+      '?', /* U+8F77 */
+      '?', /* U+8F78 */
+      '?', /* U+8F79 */
+      '?', /* U+8F7A */
+      '?', /* U+8F7B */
+      '?', /* U+8F7C */
+      '?', /* U+8F7D */
+      '?', /* U+8F7E */
+      '?', /* U+8F7F */
+      '?', /* U+8F80 */
+      '?', /* U+8F81 */
+      '?', /* U+8F82 */
+      '?', /* U+8F83 */
+      '?', /* U+8F84 */
+      '?', /* U+8F85 */
+      '?', /* U+8F86 */
+      '?', /* U+8F87 */
+      '?', /* U+8F88 */
+      '?', /* U+8F89 */
+      '?', /* U+8F8A */
+      '?', /* U+8F8B */
+      '?', /* U+8F8C */
+      '?', /* U+8F8D */
+      '?', /* U+8F8E */
+      '?', /* U+8F8F */
+      '?', /* U+8F90 */
+      '?', /* U+8F91 */
+      '?', /* U+8F92 */
+      '?', /* U+8F93 */
+      '?', /* U+8F94 */
+      '?', /* U+8F95 */
+      '?', /* U+8F96 */
+      '?', /* U+8F97 */
+      '?', /* U+8F98 */
+      '?', /* U+8F99 */
+      '?', /* U+8F9A */
+   0x9068, /* U+8F9B */
+   0xe783, /* U+8F9C */
+      '?', /* U+8F9D */
+   0x8eab, /* U+8F9E */
+   0xe784, /* U+8F9F */
+      '?', /* U+8FA0 */
+      '?', /* U+8FA1 */
+      '?', /* U+8FA2 */
+   0xe785, /* U+8FA3 */
+      '?', /* U+8FA4 */
+      '?', /* U+8FA5 */
+      '?', /* U+8FA6 */
+   0x999f, /* U+8FA7 */
+   0x999e, /* U+8FA8 */
+      '?', /* U+8FA9 */
+      '?', /* U+8FAA */
+      '?', /* U+8FAB */
+      '?', /* U+8FAC */
+   0xe786, /* U+8FAD */
+   0xe390, /* U+8FAE */
+   0xe787, /* U+8FAF */
+   0x9243, /* U+8FB0 */
+   0x904a, /* U+8FB1 */
+   0x945f, /* U+8FB2 */
+      '?', /* U+8FB3 */
+      '?', /* U+8FB4 */
+      '?', /* U+8FB5 */
+      '?', /* U+8FB6 */
+   0xe788, /* U+8FB7 */
+      '?', /* U+8FB8 */
+      '?', /* U+8FB9 */
+   0x95d3, /* U+8FBA */
+   0x92d2, /* U+8FBB */
+   0x8d9e, /* U+8FBC */
+      '?', /* U+8FBD */
+      '?', /* U+8FBE */
+   0x9248, /* U+8FBF */
+      '?', /* U+8FC0 */
+      '?', /* U+8FC1 */
+   0x8949, /* U+8FC2 */
+      '?', /* U+8FC3 */
+   0x9698, /* U+8FC4 */
+   0x9076, /* U+8FC5 */
+      '?', /* U+8FC6 */
+      '?', /* U+8FC7 */
+      '?', /* U+8FC8 */
+      '?', /* U+8FC9 */
+      '?', /* U+8FCA */
+      '?', /* U+8FCB */
+      '?', /* U+8FCC */
+      '?', /* U+8FCD */
+   0x8c7d, /* U+8FCE */
+      '?', /* U+8FCF */
+      '?', /* U+8FD0 */
+   0x8bdf, /* U+8FD1 */
+      '?', /* U+8FD2 */
+      '?', /* U+8FD3 */
+   0x95d4, /* U+8FD4 */
+      '?', /* U+8FD5 */
+      '?', /* U+8FD6 */
+      '?', /* U+8FD7 */
+      '?', /* U+8FD8 */
+      '?', /* U+8FD9 */
+   0xe789, /* U+8FDA */
+      '?', /* U+8FDB */
+      '?', /* U+8FDC */
+      '?', /* U+8FDD */
+      '?', /* U+8FDE */
+      '?', /* U+8FDF */
+      '?', /* U+8FE0 */
+      '?', /* U+8FE1 */
+   0xe78b, /* U+8FE2 */
+      '?', /* U+8FE3 */
+      '?', /* U+8FE4 */
+   0xe78a, /* U+8FE5 */
+   0x89de, /* U+8FE6 */
+      '?', /* U+8FE7 */
+      '?', /* U+8FE8 */
+   0x93f4, /* U+8FE9 */
+   0xe78c, /* U+8FEA */
+   0x9497, /* U+8FEB */
+      '?', /* U+8FEC */
+   0x9352, /* U+8FED */
+      '?', /* U+8FEE */
+   0xe78d, /* U+8FEF */
+   0x8f71, /* U+8FF0 */
+      '?', /* U+8FF1 */
+      '?', /* U+8FF2 */
+      '?', /* U+8FF3 */
+   0xe78f, /* U+8FF4 */
+      '?', /* U+8FF5 */
+      '?', /* U+8FF6 */
+   0x96c0, /* U+8FF7 */
+   0xe79e, /* U+8FF8 */
+   0xe791, /* U+8FF9 */
+   0xe792, /* U+8FFA */
+      '?', /* U+8FFB */
+      '?', /* U+8FFC */
+   0x92c7, /* U+8FFD */
+      '?', /* U+8FFE */
+      '?', /* U+8FFF */
+   0x91de, /* U+9000 */
+   0x9197, /* U+9001 */
+      '?', /* U+9002 */
+   0x93a6, /* U+9003 */
+      '?', /* U+9004 */
+   0xe790, /* U+9005 */
+   0x8b74, /* U+9006 */
+      '?', /* U+9007 */
+      '?', /* U+9008 */
+      '?', /* U+9009 */
+      '?', /* U+900A */
+   0xe799, /* U+900B */
+      '?', /* U+900C */
+   0xe796, /* U+900D */
+   0xe7a3, /* U+900E */
+   0x93a7, /* U+900F */
+   0x9280, /* U+9010 */
+   0xe793, /* U+9011 */
+      '?', /* U+9012 */
+   0x92fc, /* U+9013 */
+   0x9372, /* U+9014 */
+   0xe794, /* U+9015 */
+   0xe798, /* U+9016 */
+   0x9080, /* U+9017 */
+      '?', /* U+9018 */
+   0x9487, /* U+9019 */
+   0x92ca, /* U+901A */
+      '?', /* U+901B */
+      '?', /* U+901C */
+   0x90c0, /* U+901D */
+   0xe797, /* U+901E */
+   0x91ac, /* U+901F */
+   0x91a2, /* U+9020 */
+   0xe795, /* U+9021 */
+   0x88a7, /* U+9022 */
+   0x9841, /* U+9023 */
+      '?', /* U+9024 */
+      '?', /* U+9025 */
+      '?', /* U+9026 */
+   0xe79a, /* U+9027 */
+      '?', /* U+9028 */
+      '?', /* U+9029 */
+      '?', /* U+902A */
+      '?', /* U+902B */
+      '?', /* U+902C */
+      '?', /* U+902D */
+   0x91df, /* U+902E */
+      '?', /* U+902F */
+      '?', /* U+9030 */
+   0x8f54, /* U+9031 */
+   0x9069, /* U+9032 */
+      '?', /* U+9033 */
+      '?', /* U+9034 */
+   0xe79c, /* U+9035 */
+   0xe79b, /* U+9036 */
+      '?', /* U+9037 */
+   0x88ed, /* U+9038 */
+   0xe79d, /* U+9039 */
+      '?', /* U+903A */
+      '?', /* U+903B */
+   0x954e, /* U+903C */
+      '?', /* U+903D */
+   0xe7a5, /* U+903E */
+      '?', /* U+903F */
+      '?', /* U+9040 */
+   0x93d9, /* U+9041 */
+   0x908b, /* U+9042 */
+      '?', /* U+9043 */
+      '?', /* U+9044 */
+   0x9278, /* U+9045 */
+      '?', /* U+9046 */
+   0x8bf6, /* U+9047 */
+      '?', /* U+9048 */
+   0xe7a4, /* U+9049 */
+   0x9756, /* U+904A */
+   0x895e, /* U+904B */
+      '?', /* U+904C */
+   0x95d5, /* U+904D */
+   0x89df, /* U+904E */
+   0xe79f, /* U+904F */
+   0xe7a0, /* U+9050 */
+   0xe7a1, /* U+9051 */
+   0xe7a2, /* U+9052 */
+   0x93b9, /* U+9053 */
+   0x9242, /* U+9054 */
+   0x88e1, /* U+9055 */
+   0xe7a6, /* U+9056 */
+      '?', /* U+9057 */
+   0xe7a7, /* U+9058 */
+   0xeaa1, /* U+9059 */
+      '?', /* U+905A */
+      '?', /* U+905B */
+   0x91bb, /* U+905C */
+      '?', /* U+905D */
+   0xe7a8, /* U+905E */
+      '?', /* U+905F */
+   0x8993, /* U+9060 */
+   0x916b, /* U+9061 */
+      '?', /* U+9062 */
+   0x8cad, /* U+9063 */
+      '?', /* U+9064 */
+   0x9779, /* U+9065 */
+      '?', /* U+9066 */
+   0xfbb5, /* U+9067 */
+   0xe7a9, /* U+9068 */
+   0x934b, /* U+9069 */
+      '?', /* U+906A */
+      '?', /* U+906B */
+      '?', /* U+906C */
+   0x9198, /* U+906D */
+   0x8ed5, /* U+906E */
+   0xe7aa, /* U+906F */
+      '?', /* U+9070 */
+      '?', /* U+9071 */
+   0xe7ad, /* U+9072 */
+      '?', /* U+9073 */
+      '?', /* U+9074 */
+   0x8f85, /* U+9075 */
+   0xe7ab, /* U+9076 */
+   0x914a, /* U+9077 */
+   0x9149, /* U+9078 */
+      '?', /* U+9079 */
+   0x88e2, /* U+907A */
+      '?', /* U+907B */
+   0x97c9, /* U+907C */
+   0xe7af, /* U+907D */
+      '?', /* U+907E */
+   0x94f0, /* U+907F */
+   0xe7b1, /* U+9080 */
+   0xe7b0, /* U+9081 */
+   0xe7ae, /* U+9082 */
+   0xe284, /* U+9083 */
+   0x8ad2, /* U+9084 */
+      '?', /* U+9085 */
+      '?', /* U+9086 */
+   0xe78e, /* U+9087 */
+      '?', /* U+9088 */
+   0xe7b3, /* U+9089 */
+   0xe7b2, /* U+908A */
+      '?', /* U+908B */
+      '?', /* U+908C */
+      '?', /* U+908D */
+      '?', /* U+908E */
+   0xe7b4, /* U+908F */
+      '?', /* U+9090 */
+   0x9757, /* U+9091 */
+      '?', /* U+9092 */
+      '?', /* U+9093 */
+      '?', /* U+9094 */
+      '?', /* U+9095 */
+      '?', /* U+9096 */
+      '?', /* U+9097 */
+      '?', /* U+9098 */
+      '?', /* U+9099 */
+      '?', /* U+909A */
+      '?', /* U+909B */
+      '?', /* U+909C */
+      '?', /* U+909D */
+      '?', /* U+909E */
+      '?', /* U+909F */
+      '?', /* U+90A0 */
+      '?', /* U+90A1 */
+      '?', /* U+90A2 */
+   0x93df, /* U+90A3 */
+      '?', /* U+90A4 */
+      '?', /* U+90A5 */
+   0x964d, /* U+90A6 */
+      '?', /* U+90A7 */
+   0xe7b5, /* U+90A8 */
+      '?', /* U+90A9 */
+   0x8ed7, /* U+90AA */
+      '?', /* U+90AB */
+      '?', /* U+90AC */
+      '?', /* U+90AD */
+      '?', /* U+90AE */
+   0xe7b6, /* U+90AF */
+      '?', /* U+90B0 */
+   0xe7b7, /* U+90B1 */
+      '?', /* U+90B2 */
+      '?', /* U+90B3 */
+      '?', /* U+90B4 */
+   0xe7b8, /* U+90B5 */
+      '?', /* U+90B6 */
+      '?', /* U+90B7 */
+   0x9340, /* U+90B8 */
+      '?', /* U+90B9 */
+      '?', /* U+90BA */
+      '?', /* U+90BB */
+      '?', /* U+90BC */
+      '?', /* U+90BD */
+      '?', /* U+90BE */
+      '?', /* U+90BF */
+      '?', /* U+90C0 */
+   0x88e8, /* U+90C1 */
+      '?', /* U+90C2 */
+      '?', /* U+90C3 */
+      '?', /* U+90C4 */
+      '?', /* U+90C5 */
+      '?', /* U+90C6 */
+      '?', /* U+90C7 */
+      '?', /* U+90C8 */
+      '?', /* U+90C9 */
+   0x8d78, /* U+90CA */
+      '?', /* U+90CB */
+      '?', /* U+90CC */
+      '?', /* U+90CD */
+   0x9859, /* U+90CE */
+      '?', /* U+90CF */
+      '?', /* U+90D0 */
+      '?', /* U+90D1 */
+      '?', /* U+90D2 */
+      '?', /* U+90D3 */
+      '?', /* U+90D4 */
+      '?', /* U+90D5 */
+      '?', /* U+90D6 */
+      '?', /* U+90D7 */
+      '?', /* U+90D8 */
+      '?', /* U+90D9 */
+      '?', /* U+90DA */
+   0xe7bc, /* U+90DB */
+      '?', /* U+90DC */
+      '?', /* U+90DD */
+   0xfbb6, /* U+90DE */
+      '?', /* U+90DF */
+      '?', /* U+90E0 */
+   0x8c53, /* U+90E1 */
+   0xe7b9, /* U+90E2 */
+      '?', /* U+90E3 */
+   0xe7ba, /* U+90E4 */
+      '?', /* U+90E5 */
+      '?', /* U+90E6 */
+      '?', /* U+90E7 */
+   0x9594, /* U+90E8 */
+      '?', /* U+90E9 */
+      '?', /* U+90EA */
+      '?', /* U+90EB */
+      '?', /* U+90EC */
+   0x8a73, /* U+90ED */
+      '?', /* U+90EE */
+      '?', /* U+90EF */
+      '?', /* U+90F0 */
+      '?', /* U+90F1 */
+      '?', /* U+90F2 */
+      '?', /* U+90F3 */
+      '?', /* U+90F4 */
+   0x9758, /* U+90F5 */
+      '?', /* U+90F6 */
+   0x8bbd, /* U+90F7 */
+      '?', /* U+90F8 */
+      '?', /* U+90F9 */
+      '?', /* U+90FA */
+      '?', /* U+90FB */
+      '?', /* U+90FC */
+   0x9373, /* U+90FD */
+      '?', /* U+90FE */
+      '?', /* U+90FF */
+      '?', /* U+9100 */
+      '?', /* U+9101 */
+   0xe7bd, /* U+9102 */
+      '?', /* U+9103 */
+      '?', /* U+9104 */
+      '?', /* U+9105 */
+      '?', /* U+9106 */
+      '?', /* U+9107 */
+      '?', /* U+9108 */
+      '?', /* U+9109 */
+      '?', /* U+910A */
+      '?', /* U+910B */
+      '?', /* U+910C */
+      '?', /* U+910D */
+      '?', /* U+910E */
+      '?', /* U+910F */
+      '?', /* U+9110 */
+      '?', /* U+9111 */
+   0xe7be, /* U+9112 */
+      '?', /* U+9113 */
+      '?', /* U+9114 */
+   0xfbb8, /* U+9115 */
+      '?', /* U+9116 */
+      '?', /* U+9117 */
+      '?', /* U+9118 */
+   0xe7bf, /* U+9119 */
+      '?', /* U+911A */
+      '?', /* U+911B */
+      '?', /* U+911C */
+      '?', /* U+911D */
+      '?', /* U+911E */
+      '?', /* U+911F */
+      '?', /* U+9120 */
+      '?', /* U+9121 */
+      '?', /* U+9122 */
+      '?', /* U+9123 */
+      '?', /* U+9124 */
+      '?', /* U+9125 */
+      '?', /* U+9126 */
+   0xfbb9, /* U+9127 */
+      '?', /* U+9128 */
+      '?', /* U+9129 */
+      '?', /* U+912A */
+      '?', /* U+912B */
+      '?', /* U+912C */
+   0x9341, /* U+912D */
+      '?', /* U+912E */
+      '?', /* U+912F */
+   0xe7c1, /* U+9130 */
+      '?', /* U+9131 */
+   0xe7c0, /* U+9132 */
+      '?', /* U+9133 */
+      '?', /* U+9134 */
+      '?', /* U+9135 */
+      '?', /* U+9136 */
+      '?', /* U+9137 */
+      '?', /* U+9138 */
+      '?', /* U+9139 */
+      '?', /* U+913A */
+      '?', /* U+913B */
+      '?', /* U+913C */
+      '?', /* U+913D */
+      '?', /* U+913E */
+      '?', /* U+913F */
+      '?', /* U+9140 */
+      '?', /* U+9141 */
+      '?', /* U+9142 */
+      '?', /* U+9143 */
+      '?', /* U+9144 */
+      '?', /* U+9145 */
+      '?', /* U+9146 */
+      '?', /* U+9147 */
+      '?', /* U+9148 */
+   0x93d1, /* U+9149 */
+   0xe7c2, /* U+914A */
+   0x8f55, /* U+914B */
+   0x8ede, /* U+914C */
+   0x947a, /* U+914D */
+   0x9291, /* U+914E */
+      '?', /* U+914F */
+      '?', /* U+9150 */
+      '?', /* U+9151 */
+   0x8ef0, /* U+9152 */
+      '?', /* U+9153 */
+   0x908c, /* U+9154 */
+      '?', /* U+9155 */
+   0xe7c3, /* U+9156 */
+      '?', /* U+9157 */
+   0xe7c4, /* U+9158 */
+      '?', /* U+9159 */
+      '?', /* U+915A */
+      '?', /* U+915B */
+      '?', /* U+915C */
+      '?', /* U+915D */
+      '?', /* U+915E */
+      '?', /* U+915F */
+      '?', /* U+9160 */
+      '?', /* U+9161 */
+   0x907c, /* U+9162 */
+   0xe7c5, /* U+9163 */
+      '?', /* U+9164 */
+   0xe7c6, /* U+9165 */
+      '?', /* U+9166 */
+      '?', /* U+9167 */
+      '?', /* U+9168 */
+   0xe7c7, /* U+9169 */
+   0x978f, /* U+916A */
+      '?', /* U+916B */
+   0x8f56, /* U+916C */
+      '?', /* U+916D */
+      '?', /* U+916E */
+      '?', /* U+916F */
+      '?', /* U+9170 */
+      '?', /* U+9171 */
+   0xe7c9, /* U+9172 */
+   0xe7c8, /* U+9173 */
+      '?', /* U+9174 */
+   0x8d79, /* U+9175 */
+      '?', /* U+9176 */
+   0x8d93, /* U+9177 */
+   0x8e5f, /* U+9178 */
+      '?', /* U+9179 */
+      '?', /* U+917A */
+      '?', /* U+917B */
+      '?', /* U+917C */
+      '?', /* U+917D */
+      '?', /* U+917E */
+      '?', /* U+917F */
+      '?', /* U+9180 */
+      '?', /* U+9181 */
+   0xe7cc, /* U+9182 */
+      '?', /* U+9183 */
+      '?', /* U+9184 */
+      '?', /* U+9185 */
+      '?', /* U+9186 */
+   0x8f86, /* U+9187 */
+      '?', /* U+9188 */
+   0xe7cb, /* U+9189 */
+      '?', /* U+918A */
+   0xe7ca, /* U+918B */
+      '?', /* U+918C */
+   0x91e7, /* U+918D */
+      '?', /* U+918E */
+      '?', /* U+918F */
+   0x8ced, /* U+9190 */
+      '?', /* U+9191 */
+   0x90c1, /* U+9192 */
+      '?', /* U+9193 */
+      '?', /* U+9194 */
+      '?', /* U+9195 */
+      '?', /* U+9196 */
+   0x94ae, /* U+9197 */
+      '?', /* U+9198 */
+      '?', /* U+9199 */
+      '?', /* U+919A */
+      '?', /* U+919B */
+   0x8f58, /* U+919C */
+      '?', /* U+919D */
+      '?', /* U+919E */
+      '?', /* U+919F */
+      '?', /* U+91A0 */
+      '?', /* U+91A1 */
+   0xe7cd, /* U+91A2 */
+      '?', /* U+91A3 */
+   0x8fdd, /* U+91A4 */
+      '?', /* U+91A5 */
+      '?', /* U+91A6 */
+      '?', /* U+91A7 */
+      '?', /* U+91A8 */
+      '?', /* U+91A9 */
+   0xe7d0, /* U+91AA */
+   0xe7ce, /* U+91AB */
+      '?', /* U+91AC */
+      '?', /* U+91AD */
+      '?', /* U+91AE */
+   0xe7cf, /* U+91AF */
+      '?', /* U+91B0 */
+      '?', /* U+91B1 */
+      '?', /* U+91B2 */
+      '?', /* U+91B3 */
+   0xe7d2, /* U+91B4 */
+   0xe7d1, /* U+91B5 */
+      '?', /* U+91B6 */
+      '?', /* U+91B7 */
+   0x8ff8, /* U+91B8 */
+      '?', /* U+91B9 */
+   0xe7d3, /* U+91BA */
+      '?', /* U+91BB */
+      '?', /* U+91BC */
+      '?', /* U+91BD */
+      '?', /* U+91BE */
+      '?', /* U+91BF */
+   0xe7d4, /* U+91C0 */
+   0xe7d5, /* U+91C1 */
+      '?', /* U+91C2 */
+      '?', /* U+91C3 */
+      '?', /* U+91C4 */
+      '?', /* U+91C5 */
+   0x94ce, /* U+91C6 */
+   0x8dd1, /* U+91C7 */
+   0x8edf, /* U+91C8 */
+   0xe7d6, /* U+91C9 */
+      '?', /* U+91CA */
+   0xe7d7, /* U+91CB */
+   0x97a2, /* U+91CC */
+   0x8f64, /* U+91CD */
+   0x96ec, /* U+91CE */
+   0x97ca, /* U+91CF */
+   0xe7d8, /* U+91D0 */
+   0x8be0, /* U+91D1 */
+      '?', /* U+91D2 */
+      '?', /* U+91D3 */
+      '?', /* U+91D4 */
+      '?', /* U+91D5 */
+   0xe7d9, /* U+91D6 */
+   0xfbbb, /* U+91D7 */
+   0x9342, /* U+91D8 */
+      '?', /* U+91D9 */
+   0xfbba, /* U+91DA */
+   0xe7dc, /* U+91DB */
+   0x8a98, /* U+91DC */
+   0x906a, /* U+91DD */
+   0xfbbc, /* U+91DE */
+   0xe7da, /* U+91DF */
+      '?', /* U+91E0 */
+   0xe7db, /* U+91E1 */
+      '?', /* U+91E2 */
+   0x92de, /* U+91E3 */
+   0xfbbf, /* U+91E4 */
+   0xfbc0, /* U+91E5 */
+   0x9674, /* U+91E6 */
+   0x8bfa, /* U+91E7 */
+      '?', /* U+91E8 */
+      '?', /* U+91E9 */
+      '?', /* U+91EA */
+      '?', /* U+91EB */
+      '?', /* U+91EC */
+   0xfbbd, /* U+91ED */
+   0xfbbe, /* U+91EE */
+      '?', /* U+91EF */
+      '?', /* U+91F0 */
+      '?', /* U+91F1 */
+      '?', /* U+91F2 */
+      '?', /* U+91F3 */
+      '?', /* U+91F4 */
+   0xe7de, /* U+91F5 */
+   0xe7df, /* U+91F6 */
+      '?', /* U+91F7 */
+      '?', /* U+91F8 */
+      '?', /* U+91F9 */
+      '?', /* U+91FA */
+      '?', /* U+91FB */
+   0xe7dd, /* U+91FC */
+      '?', /* U+91FD */
+      '?', /* U+91FE */
+   0xe7e1, /* U+91FF */
+      '?', /* U+9200 */
+      '?', /* U+9201 */
+      '?', /* U+9202 */
+      '?', /* U+9203 */
+      '?', /* U+9204 */
+      '?', /* U+9205 */
+   0xfbc1, /* U+9206 */
+      '?', /* U+9207 */
+      '?', /* U+9208 */
+      '?', /* U+9209 */
+   0xfbc3, /* U+920A */
+      '?', /* U+920B */
+      '?', /* U+920C */
+   0x93dd, /* U+920D */
+   0x8a62, /* U+920E */
+      '?', /* U+920F */
+   0xfbc2, /* U+9210 */
+   0xe7e5, /* U+9211 */
+      '?', /* U+9212 */
+      '?', /* U+9213 */
+   0xe7e2, /* U+9214 */
+   0xe7e4, /* U+9215 */
+      '?', /* U+9216 */
+      '?', /* U+9217 */
+      '?', /* U+9218 */
+      '?', /* U+9219 */
+      '?', /* U+921A */
+      '?', /* U+921B */
+      '?', /* U+921C */
+      '?', /* U+921D */
+   0xe7e0, /* U+921E */
+      '?', /* U+921F */
+      '?', /* U+9220 */
+      '?', /* U+9221 */
+      '?', /* U+9222 */
+      '?', /* U+9223 */
+      '?', /* U+9224 */
+      '?', /* U+9225 */
+      '?', /* U+9226 */
+      '?', /* U+9227 */
+      '?', /* U+9228 */
+   0xe86e, /* U+9229 */
+      '?', /* U+922A */
+      '?', /* U+922B */
+   0xe7e3, /* U+922C */
+      '?', /* U+922D */
+      '?', /* U+922E */
+      '?', /* U+922F */
+      '?', /* U+9230 */
+      '?', /* U+9231 */
+      '?', /* U+9232 */
+      '?', /* U+9233 */
+   0x97e9, /* U+9234 */
+      '?', /* U+9235 */
+      '?', /* U+9236 */
+   0x8cd8, /* U+9237 */
+      '?', /* U+9238 */
+   0xfbca, /* U+9239 */
+   0xfbc4, /* U+923A */
+      '?', /* U+923B */
+   0xfbc6, /* U+923C */
+      '?', /* U+923D */
+      '?', /* U+923E */
+   0xe7ed, /* U+923F */
+   0xfbc5, /* U+9240 */
+      '?', /* U+9241 */
+      '?', /* U+9242 */
+      '?', /* U+9243 */
+   0x9353, /* U+9244 */
+   0xe7e8, /* U+9245 */
+      '?', /* U+9246 */
+      '?', /* U+9247 */
+   0xe7eb, /* U+9248 */
+   0xe7e9, /* U+9249 */
+      '?', /* U+924A */
+   0xe7ee, /* U+924B */
+      '?', /* U+924C */
+      '?', /* U+924D */
+   0xfbc7, /* U+924E */
+      '?', /* U+924F */
+   0xe7ef, /* U+9250 */
+   0xfbc9, /* U+9251 */
+      '?', /* U+9252 */
+      '?', /* U+9253 */
+      '?', /* U+9254 */
+      '?', /* U+9255 */
+      '?', /* U+9256 */
+   0xe7e7, /* U+9257 */
+      '?', /* U+9258 */
+   0xfbc8, /* U+9259 */
+   0xe7f4, /* U+925A */
+   0x8994, /* U+925B */
+      '?', /* U+925C */
+      '?', /* U+925D */
+   0xe7e6, /* U+925E */
+      '?', /* U+925F */
+      '?', /* U+9260 */
+      '?', /* U+9261 */
+   0x94ab, /* U+9262 */
+      '?', /* U+9263 */
+   0xe7ea, /* U+9264 */
+      '?', /* U+9265 */
+   0x8fde, /* U+9266 */
+   0xfbcb, /* U+9267 */
+      '?', /* U+9268 */
+      '?', /* U+9269 */
+      '?', /* U+926A */
+      '?', /* U+926B */
+      '?', /* U+926C */
+      '?', /* U+926D */
+      '?', /* U+926E */
+      '?', /* U+926F */
+      '?', /* U+9270 */
+   0x8d7a, /* U+9271 */
+      '?', /* U+9272 */
+      '?', /* U+9273 */
+      '?', /* U+9274 */
+      '?', /* U+9275 */
+      '?', /* U+9276 */
+   0xfbcd, /* U+9277 */
+   0xfbce, /* U+9278 */
+      '?', /* U+9279 */
+      '?', /* U+927A */
+      '?', /* U+927B */
+      '?', /* U+927C */
+      '?', /* U+927D */
+   0x9667, /* U+927E */
+      '?', /* U+927F */
+   0x8be2, /* U+9280 */
+      '?', /* U+9281 */
+      '?', /* U+9282 */
+   0x8f65, /* U+9283 */
+      '?', /* U+9284 */
+   0x93ba, /* U+9285 */
+      '?', /* U+9286 */
+      '?', /* U+9287 */
+   0xfa5f, /* U+9288 */
+      '?', /* U+9289 */
+      '?', /* U+928A */
+      '?', /* U+928B */
+      '?', /* U+928C */
+      '?', /* U+928D */
+      '?', /* U+928E */
+      '?', /* U+928F */
+      '?', /* U+9290 */
+   0x914c, /* U+9291 */
+      '?', /* U+9292 */
+   0xe7f2, /* U+9293 */
+      '?', /* U+9294 */
+   0xe7ec, /* U+9295 */
+   0xe7f1, /* U+9296 */
+      '?', /* U+9297 */
+   0x96c1, /* U+9298 */
+      '?', /* U+9299 */
+   0x92b6, /* U+929A */
+   0xe7f3, /* U+929B */
+   0xe7f0, /* U+929C */
+      '?', /* U+929D */
+      '?', /* U+929E */
+      '?', /* U+929F */
+      '?', /* U+92A0 */
+      '?', /* U+92A1 */
+      '?', /* U+92A2 */
+      '?', /* U+92A3 */
+      '?', /* U+92A4 */
+      '?', /* U+92A5 */
+      '?', /* U+92A6 */
+   0xfbcc, /* U+92A7 */
+      '?', /* U+92A8 */
+      '?', /* U+92A9 */
+      '?', /* U+92AA */
+      '?', /* U+92AB */
+      '?', /* U+92AC */
+   0x914b, /* U+92AD */
+      '?', /* U+92AE */
+      '?', /* U+92AF */
+      '?', /* U+92B0 */
+      '?', /* U+92B1 */
+      '?', /* U+92B2 */
+      '?', /* U+92B3 */
+      '?', /* U+92B4 */
+      '?', /* U+92B5 */
+      '?', /* U+92B6 */
+   0xe7f7, /* U+92B7 */
+      '?', /* U+92B8 */
+   0xe7f6, /* U+92B9 */
+      '?', /* U+92BA */
+      '?', /* U+92BB */
+      '?', /* U+92BC */
+      '?', /* U+92BD */
+      '?', /* U+92BE */
+      '?', /* U+92BF */
+      '?', /* U+92C0 */
+      '?', /* U+92C1 */
+      '?', /* U+92C2 */
+      '?', /* U+92C3 */
+      '?', /* U+92C4 */
+      '?', /* U+92C5 */
+      '?', /* U+92C6 */
+      '?', /* U+92C7 */
+      '?', /* U+92C8 */
+      '?', /* U+92C9 */
+      '?', /* U+92CA */
+      '?', /* U+92CB */
+      '?', /* U+92CC */
+      '?', /* U+92CD */
+      '?', /* U+92CE */
+   0xe7f5, /* U+92CF */
+   0xfbd2, /* U+92D0 */
+      '?', /* U+92D1 */
+   0x964e, /* U+92D2 */
+   0xfbd6, /* U+92D3 */
+      '?', /* U+92D4 */
+   0xfbd4, /* U+92D5 */
+      '?', /* U+92D6 */
+   0xfbd0, /* U+92D7 */
+      '?', /* U+92D8 */
+   0xfbd1, /* U+92D9 */
+      '?', /* U+92DA */
+      '?', /* U+92DB */
+      '?', /* U+92DC */
+      '?', /* U+92DD */
+      '?', /* U+92DE */
+      '?', /* U+92DF */
+   0xfbd5, /* U+92E0 */
+      '?', /* U+92E1 */
+      '?', /* U+92E2 */
+      '?', /* U+92E3 */
+   0x8f9b, /* U+92E4 */
+      '?', /* U+92E5 */
+      '?', /* U+92E6 */
+   0xfbcf, /* U+92E7 */
+      '?', /* U+92E8 */
+   0xe7f8, /* U+92E9 */
+   0x95dd, /* U+92EA */
+      '?', /* U+92EB */
+      '?', /* U+92EC */
+   0x8973, /* U+92ED */
+      '?', /* U+92EE */
+      '?', /* U+92EF */
+      '?', /* U+92F0 */
+      '?', /* U+92F1 */
+   0x9565, /* U+92F2 */
+   0x9292, /* U+92F3 */
+      '?', /* U+92F4 */
+      '?', /* U+92F5 */
+      '?', /* U+92F6 */
+      '?', /* U+92F7 */
+   0x8b98, /* U+92F8 */
+   0xfa65, /* U+92F9 */
+   0xe7fa, /* U+92FA */
+   0xfbd9, /* U+92FB */
+   0x8d7c, /* U+92FC */
+      '?', /* U+92FD */
+      '?', /* U+92FE */
+   0xfbdc, /* U+92FF */
+      '?', /* U+9300 */
+      '?', /* U+9301 */
+   0xfbde, /* U+9302 */
+      '?', /* U+9303 */
+      '?', /* U+9304 */
+      '?', /* U+9305 */
+   0x8e4b, /* U+9306 */
+      '?', /* U+9307 */
+      '?', /* U+9308 */
+      '?', /* U+9309 */
+      '?', /* U+930A */
+      '?', /* U+930B */
+      '?', /* U+930C */
+      '?', /* U+930D */
+      '?', /* U+930E */
+   0xe7f9, /* U+930F */
+   0x908d, /* U+9310 */
+      '?', /* U+9311 */
+      '?', /* U+9312 */
+      '?', /* U+9313 */
+      '?', /* U+9314 */
+      '?', /* U+9315 */
+      '?', /* U+9316 */
+      '?', /* U+9317 */
+   0x908e, /* U+9318 */
+   0xe840, /* U+9319 */
+   0xe842, /* U+931A */
+      '?', /* U+931B */
+      '?', /* U+931C */
+   0xfbdd, /* U+931D */
+   0xfbdb, /* U+931E */
+      '?', /* U+931F */
+   0x8ff9, /* U+9320 */
+   0xfbd8, /* U+9321 */
+   0xe841, /* U+9322 */
+   0xe843, /* U+9323 */
+      '?', /* U+9324 */
+   0xfbd7, /* U+9325 */
+   0x8bd1, /* U+9326 */
+      '?', /* U+9327 */
+   0x9564, /* U+9328 */
+      '?', /* U+9329 */
+      '?', /* U+932A */
+   0x8ee0, /* U+932B */
+   0x9842, /* U+932C */
+      '?', /* U+932D */
+   0xe7fc, /* U+932E */
+   0x8df6, /* U+932F */
+      '?', /* U+9330 */
+      '?', /* U+9331 */
+   0x985e, /* U+9332 */
+      '?', /* U+9333 */
+      '?', /* U+9334 */
+   0xe845, /* U+9335 */
+      '?', /* U+9336 */
+      '?', /* U+9337 */
+      '?', /* U+9338 */
+      '?', /* U+9339 */
+   0xe844, /* U+933A */
+   0xe846, /* U+933B */
+      '?', /* U+933C */
+      '?', /* U+933D */
+      '?', /* U+933E */
+      '?', /* U+933F */
+      '?', /* U+9340 */
+      '?', /* U+9341 */
+      '?', /* U+9342 */
+      '?', /* U+9343 */
+   0xe7fb, /* U+9344 */
+      '?', /* U+9345 */
+      '?', /* U+9346 */
+      '?', /* U+9347 */
+   0xfa5e, /* U+9348 */
+      '?', /* U+9349 */
+      '?', /* U+934A */
+   0x93e7, /* U+934B */
+      '?', /* U+934C */
+   0x9374, /* U+934D */
+      '?', /* U+934E */
+      '?', /* U+934F */
+      '?', /* U+9350 */
+      '?', /* U+9351 */
+      '?', /* U+9352 */
+      '?', /* U+9353 */
+   0x92d5, /* U+9354 */
+      '?', /* U+9355 */
+   0xe84b, /* U+9356 */
+   0xfbe0, /* U+9357 */
+      '?', /* U+9358 */
+      '?', /* U+9359 */
+      '?', /* U+935A */
+   0x9262, /* U+935B */
+   0xe847, /* U+935C */
+      '?', /* U+935D */
+      '?', /* U+935E */
+      '?', /* U+935F */
+   0xe848, /* U+9360 */
+      '?', /* U+9361 */
+      '?', /* U+9362 */
+      '?', /* U+9363 */
+      '?', /* U+9364 */
+      '?', /* U+9365 */
+      '?', /* U+9366 */
+      '?', /* U+9367 */
+      '?', /* U+9368 */
+      '?', /* U+9369 */
+      '?', /* U+936A */
+      '?', /* U+936B */
+   0x8c4c, /* U+936C */
+      '?', /* U+936D */
+   0xe84a, /* U+936E */
+      '?', /* U+936F */
+   0xfbdf, /* U+9370 */
+      '?', /* U+9371 */
+      '?', /* U+9372 */
+      '?', /* U+9373 */
+      '?', /* U+9374 */
+   0x8cae, /* U+9375 */
+      '?', /* U+9376 */
+      '?', /* U+9377 */
+      '?', /* U+9378 */
+      '?', /* U+9379 */
+      '?', /* U+937A */
+      '?', /* U+937B */
+   0xe849, /* U+937C */
+      '?', /* U+937D */
+   0x8fdf, /* U+937E */
+      '?', /* U+937F */
+      '?', /* U+9380 */
+      '?', /* U+9381 */
+      '?', /* U+9382 */
+      '?', /* U+9383 */
+      '?', /* U+9384 */
+      '?', /* U+9385 */
+      '?', /* U+9386 */
+      '?', /* U+9387 */
+      '?', /* U+9388 */
+      '?', /* U+9389 */
+      '?', /* U+938A */
+      '?', /* U+938B */
+   0x8a99, /* U+938C */
+      '?', /* U+938D */
+      '?', /* U+938E */
+      '?', /* U+938F */
+      '?', /* U+9390 */
+      '?', /* U+9391 */
+      '?', /* U+9392 */
+      '?', /* U+9393 */
+   0xe84f, /* U+9394 */
+      '?', /* U+9395 */
+   0x8dbd, /* U+9396 */
+   0x9199, /* U+9397 */
+      '?', /* U+9398 */
+      '?', /* U+9399 */
+   0x92c8, /* U+939A */
+      '?', /* U+939B */
+      '?', /* U+939C */
+      '?', /* U+939D */
+      '?', /* U+939E */
+      '?', /* U+939F */
+      '?', /* U+93A0 */
+      '?', /* U+93A1 */
+      '?', /* U+93A2 */
+      '?', /* U+93A3 */
+   0xfbe1, /* U+93A4 */
+      '?', /* U+93A5 */
+      '?', /* U+93A6 */
+   0x8a5a, /* U+93A7 */
+      '?', /* U+93A8 */
+      '?', /* U+93A9 */
+      '?', /* U+93AA */
+      '?', /* U+93AB */
+   0xe84d, /* U+93AC */
+   0xe84e, /* U+93AD */
+   0x92c1, /* U+93AE */
+      '?', /* U+93AF */
+   0xe84c, /* U+93B0 */
+      '?', /* U+93B1 */
+      '?', /* U+93B2 */
+      '?', /* U+93B3 */
+      '?', /* U+93B4 */
+      '?', /* U+93B5 */
+      '?', /* U+93B6 */
+      '?', /* U+93B7 */
+      '?', /* U+93B8 */
+   0xe850, /* U+93B9 */
+      '?', /* U+93BA */
+      '?', /* U+93BB */
+      '?', /* U+93BC */
+      '?', /* U+93BD */
+      '?', /* U+93BE */
+      '?', /* U+93BF */
+      '?', /* U+93C0 */
+      '?', /* U+93C1 */
+      '?', /* U+93C2 */
+   0xe856, /* U+93C3 */
+      '?', /* U+93C4 */
+      '?', /* U+93C5 */
+   0xfbe2, /* U+93C6 */
+      '?', /* U+93C7 */
+   0xe859, /* U+93C8 */
+      '?', /* U+93C9 */
+      '?', /* U+93CA */
+      '?', /* U+93CB */
+      '?', /* U+93CC */
+      '?', /* U+93CD */
+      '?', /* U+93CE */
+      '?', /* U+93CF */
+   0xe858, /* U+93D0 */
+   0x934c, /* U+93D1 */
+      '?', /* U+93D2 */
+      '?', /* U+93D3 */
+      '?', /* U+93D4 */
+      '?', /* U+93D5 */
+   0xe851, /* U+93D6 */
+   0xe852, /* U+93D7 */
+   0xe855, /* U+93D8 */
+      '?', /* U+93D9 */
+      '?', /* U+93DA */
+      '?', /* U+93DB */
+      '?', /* U+93DC */
+   0xe857, /* U+93DD */
+   0xfbe3, /* U+93DE */
+      '?', /* U+93DF */
+      '?', /* U+93E0 */
+   0x8bbe, /* U+93E1 */
+      '?', /* U+93E2 */
+      '?', /* U+93E3 */
+   0xe85a, /* U+93E4 */
+   0xe854, /* U+93E5 */
+      '?', /* U+93E6 */
+      '?', /* U+93E7 */
+   0xe853, /* U+93E8 */
+      '?', /* U+93E9 */
+      '?', /* U+93EA */
+      '?', /* U+93EB */
+      '?', /* U+93EC */
+      '?', /* U+93ED */
+      '?', /* U+93EE */
+      '?', /* U+93EF */
+      '?', /* U+93F0 */
+      '?', /* U+93F1 */
+      '?', /* U+93F2 */
+      '?', /* U+93F3 */
+      '?', /* U+93F4 */
+      '?', /* U+93F5 */
+      '?', /* U+93F6 */
+      '?', /* U+93F7 */
+   0xfbe4, /* U+93F8 */
+      '?', /* U+93F9 */
+      '?', /* U+93FA */
+      '?', /* U+93FB */
+      '?', /* U+93FC */
+      '?', /* U+93FD */
+      '?', /* U+93FE */
+      '?', /* U+93FF */
+      '?', /* U+9400 */
+      '?', /* U+9401 */
+      '?', /* U+9402 */
+   0xe85e, /* U+9403 */
+      '?', /* U+9404 */
+      '?', /* U+9405 */
+      '?', /* U+9406 */
+   0xe85f, /* U+9407 */
+      '?', /* U+9408 */
+      '?', /* U+9409 */
+      '?', /* U+940A */
+      '?', /* U+940B */
+      '?', /* U+940C */
+      '?', /* U+940D */
+      '?', /* U+940E */
+      '?', /* U+940F */
+   0xe860, /* U+9410 */
+      '?', /* U+9411 */
+      '?', /* U+9412 */
+   0xe85d, /* U+9413 */
+   0xe85c, /* U+9414 */
+      '?', /* U+9415 */
+      '?', /* U+9416 */
+      '?', /* U+9417 */
+   0x8fe0, /* U+9418 */
+   0x93a8, /* U+9419 */
+   0xe85b, /* U+941A */
+      '?', /* U+941B */
+      '?', /* U+941C */
+      '?', /* U+941D */
+      '?', /* U+941E */
+      '?', /* U+941F */
+      '?', /* U+9420 */
+   0xe864, /* U+9421 */
+      '?', /* U+9422 */
+      '?', /* U+9423 */
+      '?', /* U+9424 */
+      '?', /* U+9425 */
+      '?', /* U+9426 */
+      '?', /* U+9427 */
+      '?', /* U+9428 */
+      '?', /* U+9429 */
+      '?', /* U+942A */
+   0xe862, /* U+942B */
+      '?', /* U+942C */
+      '?', /* U+942D */
+      '?', /* U+942E */
+      '?', /* U+942F */
+      '?', /* U+9430 */
+   0xfbe5, /* U+9431 */
+      '?', /* U+9432 */
+      '?', /* U+9433 */
+      '?', /* U+9434 */
+   0xe863, /* U+9435 */
+   0xe861, /* U+9436 */
+      '?', /* U+9437 */
+   0x91f6, /* U+9438 */
+      '?', /* U+9439 */
+   0xe865, /* U+943A */
+      '?', /* U+943B */
+      '?', /* U+943C */
+      '?', /* U+943D */
+      '?', /* U+943E */
+      '?', /* U+943F */
+      '?', /* U+9440 */
+   0xe866, /* U+9441 */
+      '?', /* U+9442 */
+      '?', /* U+9443 */
+   0xe868, /* U+9444 */
+   0xfbe6, /* U+9445 */
+      '?', /* U+9446 */
+      '?', /* U+9447 */
+   0xfbe7, /* U+9448 */
+      '?', /* U+9449 */
+      '?', /* U+944A */
+      '?', /* U+944B */
+      '?', /* U+944C */
+      '?', /* U+944D */
+      '?', /* U+944E */
+      '?', /* U+944F */
+      '?', /* U+9450 */
+   0x8ad3, /* U+9451 */
+   0xe867, /* U+9452 */
+   0x96f8, /* U+9453 */
+      '?', /* U+9454 */
+      '?', /* U+9455 */
+      '?', /* U+9456 */
+      '?', /* U+9457 */
+      '?', /* U+9458 */
+      '?', /* U+9459 */
+   0xe873, /* U+945A */
+   0xe869, /* U+945B */
+      '?', /* U+945C */
+      '?', /* U+945D */
+   0xe86c, /* U+945E */
+      '?', /* U+945F */
+   0xe86a, /* U+9460 */
+      '?', /* U+9461 */
+   0xe86b, /* U+9462 */
+      '?', /* U+9463 */
+      '?', /* U+9464 */
+      '?', /* U+9465 */
+      '?', /* U+9466 */
+      '?', /* U+9467 */
+      '?', /* U+9468 */
+      '?', /* U+9469 */
+   0xe86d, /* U+946A */
+      '?', /* U+946B */
+      '?', /* U+946C */
+      '?', /* U+946D */
+      '?', /* U+946E */
+      '?', /* U+946F */
+   0xe86f, /* U+9470 */
+      '?', /* U+9471 */
+      '?', /* U+9472 */
+      '?', /* U+9473 */
+      '?', /* U+9474 */
+   0xe870, /* U+9475 */
+      '?', /* U+9476 */
+   0xe871, /* U+9477 */
+      '?', /* U+9478 */
+      '?', /* U+9479 */
+      '?', /* U+947A */
+      '?', /* U+947B */
+   0xe874, /* U+947C */
+   0xe872, /* U+947D */
+   0xe875, /* U+947E */
+   0xe877, /* U+947F */
+      '?', /* U+9480 */
+   0xe876, /* U+9481 */
+      '?', /* U+9482 */
+      '?', /* U+9483 */
+      '?', /* U+9484 */
+      '?', /* U+9485 */
+      '?', /* U+9486 */
+      '?', /* U+9487 */
+      '?', /* U+9488 */
+      '?', /* U+9489 */
+      '?', /* U+948A */
+      '?', /* U+948B */
+      '?', /* U+948C */
+      '?', /* U+948D */
+      '?', /* U+948E */
+      '?', /* U+948F */
+      '?', /* U+9490 */
+      '?', /* U+9491 */
+      '?', /* U+9492 */
+      '?', /* U+9493 */
+      '?', /* U+9494 */
+      '?', /* U+9495 */
+      '?', /* U+9496 */
+      '?', /* U+9497 */
+      '?', /* U+9498 */
+      '?', /* U+9499 */
+      '?', /* U+949A */
+      '?', /* U+949B */
+      '?', /* U+949C */
+      '?', /* U+949D */
+      '?', /* U+949E */
+      '?', /* U+949F */
+      '?', /* U+94A0 */
+      '?', /* U+94A1 */
+      '?', /* U+94A2 */
+      '?', /* U+94A3 */
+      '?', /* U+94A4 */
+      '?', /* U+94A5 */
+      '?', /* U+94A6 */
+      '?', /* U+94A7 */
+      '?', /* U+94A8 */
+      '?', /* U+94A9 */
+      '?', /* U+94AA */
+      '?', /* U+94AB */
+      '?', /* U+94AC */
+      '?', /* U+94AD */
+      '?', /* U+94AE */
+      '?', /* U+94AF */
+      '?', /* U+94B0 */
+      '?', /* U+94B1 */
+      '?', /* U+94B2 */
+      '?', /* U+94B3 */
+      '?', /* U+94B4 */
+      '?', /* U+94B5 */
+      '?', /* U+94B6 */
+      '?', /* U+94B7 */
+      '?', /* U+94B8 */
+      '?', /* U+94B9 */
+      '?', /* U+94BA */
+      '?', /* U+94BB */
+      '?', /* U+94BC */
+      '?', /* U+94BD */
+      '?', /* U+94BE */
+      '?', /* U+94BF */
+      '?', /* U+94C0 */
+      '?', /* U+94C1 */
+      '?', /* U+94C2 */
+      '?', /* U+94C3 */
+      '?', /* U+94C4 */
+      '?', /* U+94C5 */
+      '?', /* U+94C6 */
+      '?', /* U+94C7 */
+      '?', /* U+94C8 */
+      '?', /* U+94C9 */
+      '?', /* U+94CA */
+      '?', /* U+94CB */
+      '?', /* U+94CC */
+      '?', /* U+94CD */
+      '?', /* U+94CE */
+      '?', /* U+94CF */
+      '?', /* U+94D0 */
+      '?', /* U+94D1 */
+      '?', /* U+94D2 */
+      '?', /* U+94D3 */
+      '?', /* U+94D4 */
+      '?', /* U+94D5 */
+      '?', /* U+94D6 */
+      '?', /* U+94D7 */
+      '?', /* U+94D8 */
+      '?', /* U+94D9 */
+      '?', /* U+94DA */
+      '?', /* U+94DB */
+      '?', /* U+94DC */
+      '?', /* U+94DD */
+      '?', /* U+94DE */
+      '?', /* U+94DF */
+      '?', /* U+94E0 */
+      '?', /* U+94E1 */
+      '?', /* U+94E2 */
+      '?', /* U+94E3 */
+      '?', /* U+94E4 */
+      '?', /* U+94E5 */
+      '?', /* U+94E6 */
+      '?', /* U+94E7 */
+      '?', /* U+94E8 */
+      '?', /* U+94E9 */
+      '?', /* U+94EA */
+      '?', /* U+94EB */
+      '?', /* U+94EC */
+      '?', /* U+94ED */
+      '?', /* U+94EE */
+      '?', /* U+94EF */
+      '?', /* U+94F0 */
+      '?', /* U+94F1 */
+      '?', /* U+94F2 */
+      '?', /* U+94F3 */
+      '?', /* U+94F4 */
+      '?', /* U+94F5 */
+      '?', /* U+94F6 */
+      '?', /* U+94F7 */
+      '?', /* U+94F8 */
+      '?', /* U+94F9 */
+      '?', /* U+94FA */
+      '?', /* U+94FB */
+      '?', /* U+94FC */
+      '?', /* U+94FD */
+      '?', /* U+94FE */
+      '?', /* U+94FF */
+      '?', /* U+9500 */
+      '?', /* U+9501 */
+      '?', /* U+9502 */
+      '?', /* U+9503 */
+      '?', /* U+9504 */
+      '?', /* U+9505 */
+      '?', /* U+9506 */
+      '?', /* U+9507 */
+      '?', /* U+9508 */
+      '?', /* U+9509 */
+      '?', /* U+950A */
+      '?', /* U+950B */
+      '?', /* U+950C */
+      '?', /* U+950D */
+      '?', /* U+950E */
+      '?', /* U+950F */
+      '?', /* U+9510 */
+      '?', /* U+9511 */
+      '?', /* U+9512 */
+      '?', /* U+9513 */
+      '?', /* U+9514 */
+      '?', /* U+9515 */
+      '?', /* U+9516 */
+      '?', /* U+9517 */
+      '?', /* U+9518 */
+      '?', /* U+9519 */
+      '?', /* U+951A */
+      '?', /* U+951B */
+      '?', /* U+951C */
+      '?', /* U+951D */
+      '?', /* U+951E */
+      '?', /* U+951F */
+      '?', /* U+9520 */
+      '?', /* U+9521 */
+      '?', /* U+9522 */
+      '?', /* U+9523 */
+      '?', /* U+9524 */
+      '?', /* U+9525 */
+      '?', /* U+9526 */
+      '?', /* U+9527 */
+      '?', /* U+9528 */
+      '?', /* U+9529 */
+      '?', /* U+952A */
+      '?', /* U+952B */
+      '?', /* U+952C */
+      '?', /* U+952D */
+      '?', /* U+952E */
+      '?', /* U+952F */
+      '?', /* U+9530 */
+      '?', /* U+9531 */
+      '?', /* U+9532 */
+      '?', /* U+9533 */
+      '?', /* U+9534 */
+      '?', /* U+9535 */
+      '?', /* U+9536 */
+      '?', /* U+9537 */
+      '?', /* U+9538 */
+      '?', /* U+9539 */
+      '?', /* U+953A */
+      '?', /* U+953B */
+      '?', /* U+953C */
+      '?', /* U+953D */
+      '?', /* U+953E */
+      '?', /* U+953F */
+      '?', /* U+9540 */
+      '?', /* U+9541 */
+      '?', /* U+9542 */
+      '?', /* U+9543 */
+      '?', /* U+9544 */
+      '?', /* U+9545 */
+      '?', /* U+9546 */
+      '?', /* U+9547 */
+      '?', /* U+9548 */
+      '?', /* U+9549 */
+      '?', /* U+954A */
+      '?', /* U+954B */
+      '?', /* U+954C */
+      '?', /* U+954D */
+      '?', /* U+954E */
+      '?', /* U+954F */
+      '?', /* U+9550 */
+      '?', /* U+9551 */
+      '?', /* U+9552 */
+      '?', /* U+9553 */
+      '?', /* U+9554 */
+      '?', /* U+9555 */
+      '?', /* U+9556 */
+      '?', /* U+9557 */
+      '?', /* U+9558 */
+      '?', /* U+9559 */
+      '?', /* U+955A */
+      '?', /* U+955B */
+      '?', /* U+955C */
+      '?', /* U+955D */
+      '?', /* U+955E */
+      '?', /* U+955F */
+      '?', /* U+9560 */
+      '?', /* U+9561 */
+      '?', /* U+9562 */
+      '?', /* U+9563 */
+      '?', /* U+9564 */
+      '?', /* U+9565 */
+      '?', /* U+9566 */
+      '?', /* U+9567 */
+      '?', /* U+9568 */
+      '?', /* U+9569 */
+      '?', /* U+956A */
+      '?', /* U+956B */
+      '?', /* U+956C */
+      '?', /* U+956D */
+      '?', /* U+956E */
+      '?', /* U+956F */
+      '?', /* U+9570 */
+      '?', /* U+9571 */
+      '?', /* U+9572 */
+      '?', /* U+9573 */
+      '?', /* U+9574 */
+      '?', /* U+9575 */
+      '?', /* U+9576 */
+   0x92b7, /* U+9577 */
+      '?', /* U+9578 */
+      '?', /* U+9579 */
+      '?', /* U+957A */
+      '?', /* U+957B */
+      '?', /* U+957C */
+      '?', /* U+957D */
+      '?', /* U+957E */
+      '?', /* U+957F */
+   0x96e5, /* U+9580 */
+      '?', /* U+9581 */
+   0xe878, /* U+9582 */
+   0x914d, /* U+9583 */
+      '?', /* U+9584 */
+      '?', /* U+9585 */
+      '?', /* U+9586 */
+   0xe879, /* U+9587 */
+      '?', /* U+9588 */
+   0x95c2, /* U+9589 */
+   0xe87a, /* U+958A */
+   0x8a4a, /* U+958B */
+      '?', /* U+958C */
+      '?', /* U+958D */
+      '?', /* U+958E */
+   0x895b, /* U+958F */
+      '?', /* U+9590 */
+   0x8ad5, /* U+9591 */
+   0xfbe8, /* U+9592 */
+   0x8ad4, /* U+9593 */
+   0xe87b, /* U+9594 */
+      '?', /* U+9595 */
+   0xe87c, /* U+9596 */
+      '?', /* U+9597 */
+   0xe87d, /* U+9598 */
+   0xe87e, /* U+9599 */
+      '?', /* U+959A */
+      '?', /* U+959B */
+      '?', /* U+959C */
+      '?', /* U+959D */
+      '?', /* U+959E */
+      '?', /* U+959F */
+   0xe880, /* U+95A0 */
+      '?', /* U+95A1 */
+   0x8ad6, /* U+95A2 */
+   0x8a74, /* U+95A3 */
+   0x8d7d, /* U+95A4 */
+   0x94b4, /* U+95A5 */
+      '?', /* U+95A6 */
+   0xe882, /* U+95A7 */
+   0xe881, /* U+95A8 */
+      '?', /* U+95A9 */
+      '?', /* U+95AA */
+      '?', /* U+95AB */
+      '?', /* U+95AC */
+   0xe883, /* U+95AD */
+      '?', /* U+95AE */
+      '?', /* U+95AF */
+      '?', /* U+95B0 */
+      '?', /* U+95B1 */
+   0x897b, /* U+95B2 */
+      '?', /* U+95B3 */
+      '?', /* U+95B4 */
+      '?', /* U+95B5 */
+      '?', /* U+95B6 */
+      '?', /* U+95B7 */
+      '?', /* U+95B8 */
+   0xe886, /* U+95B9 */
+      '?', /* U+95BA */
+   0xe885, /* U+95BB */
+   0xe884, /* U+95BC */
+      '?', /* U+95BD */
+   0xe887, /* U+95BE */
+      '?', /* U+95BF */
+      '?', /* U+95C0 */
+      '?', /* U+95C1 */
+      '?', /* U+95C2 */
+   0xe88a, /* U+95C3 */
+      '?', /* U+95C4 */
+      '?', /* U+95C5 */
+      '?', /* U+95C6 */
+   0x88c5, /* U+95C7 */
+      '?', /* U+95C8 */
+      '?', /* U+95C9 */
+   0xe888, /* U+95CA */
+      '?', /* U+95CB */
+   0xe88c, /* U+95CC */
+   0xe88b, /* U+95CD */
+      '?', /* U+95CE */
+      '?', /* U+95CF */
+      '?', /* U+95D0 */
+      '?', /* U+95D1 */
+      '?', /* U+95D2 */
+      '?', /* U+95D3 */
+   0xe88e, /* U+95D4 */
+   0xe88d, /* U+95D5 */
+   0xe88f, /* U+95D6 */
+      '?', /* U+95D7 */
+   0x93ac, /* U+95D8 */
+      '?', /* U+95D9 */
+      '?', /* U+95DA */
+      '?', /* U+95DB */
+   0xe890, /* U+95DC */
+      '?', /* U+95DD */
+      '?', /* U+95DE */
+      '?', /* U+95DF */
+      '?', /* U+95E0 */
+   0xe891, /* U+95E1 */
+   0xe893, /* U+95E2 */
+      '?', /* U+95E3 */
+      '?', /* U+95E4 */
+   0xe892, /* U+95E5 */
+      '?', /* U+95E6 */
+      '?', /* U+95E7 */
+      '?', /* U+95E8 */
+      '?', /* U+95E9 */
+      '?', /* U+95EA */
+      '?', /* U+95EB */
+      '?', /* U+95EC */
+      '?', /* U+95ED */
+      '?', /* U+95EE */
+      '?', /* U+95EF */
+      '?', /* U+95F0 */
+      '?', /* U+95F1 */
+      '?', /* U+95F2 */
+      '?', /* U+95F3 */
+      '?', /* U+95F4 */
+      '?', /* U+95F5 */
+      '?', /* U+95F6 */
+      '?', /* U+95F7 */
+      '?', /* U+95F8 */
+      '?', /* U+95F9 */
+      '?', /* U+95FA */
+      '?', /* U+95FB */
+      '?', /* U+95FC */
+      '?', /* U+95FD */
+      '?', /* U+95FE */
+      '?', /* U+95FF */
+      '?', /* U+9600 */
+      '?', /* U+9601 */
+      '?', /* U+9602 */
+      '?', /* U+9603 */
+      '?', /* U+9604 */
+      '?', /* U+9605 */
+      '?', /* U+9606 */
+      '?', /* U+9607 */
+      '?', /* U+9608 */
+      '?', /* U+9609 */
+      '?', /* U+960A */
+      '?', /* U+960B */
+      '?', /* U+960C */
+      '?', /* U+960D */
+      '?', /* U+960E */
+      '?', /* U+960F */
+      '?', /* U+9610 */
+      '?', /* U+9611 */
+      '?', /* U+9612 */
+      '?', /* U+9613 */
+      '?', /* U+9614 */
+      '?', /* U+9615 */
+      '?', /* U+9616 */
+      '?', /* U+9617 */
+      '?', /* U+9618 */
+      '?', /* U+9619 */
+      '?', /* U+961A */
+      '?', /* U+961B */
+   0x958c, /* U+961C */
+      '?', /* U+961D */
+      '?', /* U+961E */
+      '?', /* U+961F */
+      '?', /* U+9620 */
+   0xe894, /* U+9621 */
+      '?', /* U+9622 */
+      '?', /* U+9623 */
+      '?', /* U+9624 */
+      '?', /* U+9625 */
+      '?', /* U+9626 */
+      '?', /* U+9627 */
+   0xe895, /* U+9628 */
+      '?', /* U+9629 */
+   0x8de3, /* U+962A */
+      '?', /* U+962B */
+      '?', /* U+962C */
+      '?', /* U+962D */
+   0xe896, /* U+962E */
+   0xe897, /* U+962F */
+      '?', /* U+9630 */
+      '?', /* U+9631 */
+   0x9668, /* U+9632 */
+      '?', /* U+9633 */
+      '?', /* U+9634 */
+      '?', /* U+9635 */
+      '?', /* U+9636 */
+      '?', /* U+9637 */
+      '?', /* U+9638 */
+      '?', /* U+9639 */
+      '?', /* U+963A */
+   0x916a, /* U+963B */
+      '?', /* U+963C */
+      '?', /* U+963D */
+      '?', /* U+963E */
+   0x88a2, /* U+963F */
+   0x91c9, /* U+9640 */
+      '?', /* U+9641 */
+   0xe898, /* U+9642 */
+      '?', /* U+9643 */
+   0x958d, /* U+9644 */
+      '?', /* U+9645 */
+      '?', /* U+9646 */
+      '?', /* U+9647 */
+      '?', /* U+9648 */
+      '?', /* U+9649 */
+      '?', /* U+964A */
+   0xe89b, /* U+964B */
+   0xe899, /* U+964C */
+   0x8d7e, /* U+964D */
+      '?', /* U+964E */
+   0xe89a, /* U+964F */
+   0x8cc0, /* U+9650 */
+      '?', /* U+9651 */
+      '?', /* U+9652 */
+      '?', /* U+9653 */
+      '?', /* U+9654 */
+      '?', /* U+9655 */
+      '?', /* U+9656 */
+      '?', /* U+9657 */
+      '?', /* U+9658 */
+      '?', /* U+9659 */
+      '?', /* U+965A */
+   0x95c3, /* U+965B */
+   0xe89d, /* U+965C */
+   0xe89f, /* U+965D */
+   0xe89e, /* U+965E */
+   0xe8a0, /* U+965F */
+      '?', /* U+9660 */
+      '?', /* U+9661 */
+   0x8940, /* U+9662 */
+   0x9077, /* U+9663 */
+   0x8f9c, /* U+9664 */
+   0x8ad7, /* U+9665 */
+   0xe8a1, /* U+9666 */
+      '?', /* U+9667 */
+      '?', /* U+9668 */
+      '?', /* U+9669 */
+   0x9486, /* U+966A */
+      '?', /* U+966B */
+   0xe8a3, /* U+966C */
+      '?', /* U+966D */
+      '?', /* U+966E */
+      '?', /* U+966F */
+   0x8941, /* U+9670 */
+      '?', /* U+9671 */
+   0xe8a2, /* U+9672 */
+   0x92c2, /* U+9673 */
+      '?', /* U+9674 */
+   0x97cb, /* U+9675 */
+   0x93a9, /* U+9676 */
+   0xe89c, /* U+9677 */
+   0x97a4, /* U+9678 */
+      '?', /* U+9679 */
+   0x8caf, /* U+967A */
+      '?', /* U+967B */
+      '?', /* U+967C */
+   0x977a, /* U+967D */
+      '?', /* U+967E */
+      '?', /* U+967F */
+      '?', /* U+9680 */
+      '?', /* U+9681 */
+      '?', /* U+9682 */
+      '?', /* U+9683 */
+      '?', /* U+9684 */
+   0x8bf7, /* U+9685 */
+   0x97b2, /* U+9686 */
+      '?', /* U+9687 */
+   0x8c47, /* U+9688 */
+      '?', /* U+9689 */
+   0x91e0, /* U+968A */
+   0xe440, /* U+968B */
+      '?', /* U+968C */
+   0xe8a4, /* U+968D */
+   0x8a4b, /* U+968E */
+   0x908f, /* U+968F */
+      '?', /* U+9690 */
+      '?', /* U+9691 */
+      '?', /* U+9692 */
+      '?', /* U+9693 */
+   0x8a75, /* U+9694 */
+   0xe8a6, /* U+9695 */
+      '?', /* U+9696 */
+   0xe8a7, /* U+9697 */
+   0xe8a5, /* U+9698 */
+   0x8c84, /* U+9699 */
+      '?', /* U+969A */
+   0x8ddb, /* U+969B */
+   0x8fe1, /* U+969C */
+   0xfbeb, /* U+969D */
+      '?', /* U+969E */
+      '?', /* U+969F */
+   0x8942, /* U+96A0 */
+      '?', /* U+96A1 */
+      '?', /* U+96A2 */
+   0x97d7, /* U+96A3 */
+      '?', /* U+96A4 */
+      '?', /* U+96A5 */
+      '?', /* U+96A6 */
+   0xe8a9, /* U+96A7 */
+   0xe7ac, /* U+96A8 */
+      '?', /* U+96A9 */
+   0xe8a8, /* U+96AA */
+      '?', /* U+96AB */
+      '?', /* U+96AC */
+      '?', /* U+96AD */
+      '?', /* U+96AE */
+   0xfbec, /* U+96AF */
+   0xe8ac, /* U+96B0 */
+   0xe8aa, /* U+96B1 */
+   0xe8ab, /* U+96B2 */
+      '?', /* U+96B3 */
+   0xe8ad, /* U+96B4 */
+      '?', /* U+96B5 */
+   0xe8ae, /* U+96B6 */
+   0x97ea, /* U+96B7 */
+   0xe8af, /* U+96B8 */
+   0xe8b0, /* U+96B9 */
+      '?', /* U+96BA */
+   0x90c7, /* U+96BB */
+   0x94b9, /* U+96BC */
+      '?', /* U+96BD */
+      '?', /* U+96BE */
+      '?', /* U+96BF */
+   0x909d, /* U+96C0 */
+   0x8ae5, /* U+96C1 */
+      '?', /* U+96C2 */
+      '?', /* U+96C3 */
+   0x9759, /* U+96C4 */
+   0x89eb, /* U+96C5 */
+   0x8f57, /* U+96C6 */
+   0x8cd9, /* U+96C7 */
+      '?', /* U+96C8 */
+   0xe8b3, /* U+96C9 */
+      '?', /* U+96CA */
+   0xe8b2, /* U+96CB */
+   0x8e93, /* U+96CC */
+   0xe8b4, /* U+96CD */
+   0xe8b1, /* U+96CE */
+      '?', /* U+96CF */
+      '?', /* U+96D0 */
+   0x8e47, /* U+96D1 */
+      '?', /* U+96D2 */
+      '?', /* U+96D3 */
+      '?', /* U+96D4 */
+   0xe8b8, /* U+96D5 */
+   0xe5ab, /* U+96D6 */
+      '?', /* U+96D7 */
+      '?', /* U+96D8 */
+   0x99d4, /* U+96D9 */
+      '?', /* U+96DA */
+   0x9097, /* U+96DB */
+   0xe8b6, /* U+96DC */
+      '?', /* U+96DD */
+      '?', /* U+96DE */
+      '?', /* U+96DF */
+      '?', /* U+96E0 */
+      '?', /* U+96E1 */
+   0x97a3, /* U+96E2 */
+   0x93ef, /* U+96E3 */
+      '?', /* U+96E4 */
+      '?', /* U+96E5 */
+      '?', /* U+96E6 */
+      '?', /* U+96E7 */
+   0x894a, /* U+96E8 */
+      '?', /* U+96E9 */
+   0x90e1, /* U+96EA */
+   0x8eb4, /* U+96EB */
+      '?', /* U+96EC */
+      '?', /* U+96ED */
+      '?', /* U+96EE */
+      '?', /* U+96EF */
+   0x95b5, /* U+96F0 */
+      '?', /* U+96F1 */
+   0x895f, /* U+96F2 */
+      '?', /* U+96F3 */
+      '?', /* U+96F4 */
+      '?', /* U+96F5 */
+   0x97eb, /* U+96F6 */
+   0x978b, /* U+96F7 */
+      '?', /* U+96F8 */
+   0xe8b9, /* U+96F9 */
+      '?', /* U+96FA */
+   0x9364, /* U+96FB */
+      '?', /* U+96FC */
+      '?', /* U+96FD */
+      '?', /* U+96FE */
+      '?', /* U+96FF */
+   0x8ef9, /* U+9700 */
+      '?', /* U+9701 */
+      '?', /* U+9702 */
+      '?', /* U+9703 */
+   0xe8ba, /* U+9704 */
+      '?', /* U+9705 */
+   0xe8bb, /* U+9706 */
+   0x906b, /* U+9707 */
+   0xe8bc, /* U+9708 */
+      '?', /* U+9709 */
+   0x97ec, /* U+970A */
+      '?', /* U+970B */
+      '?', /* U+970C */
+   0xe8b7, /* U+970D */
+   0xe8be, /* U+970E */
+   0xe8c0, /* U+970F */
+      '?', /* U+9710 */
+   0xe8bf, /* U+9711 */
+      '?', /* U+9712 */
+   0xe8bd, /* U+9713 */
+      '?', /* U+9714 */
+      '?', /* U+9715 */
+   0xe8c1, /* U+9716 */
+      '?', /* U+9717 */
+      '?', /* U+9718 */
+   0xe8c2, /* U+9719 */
+      '?', /* U+971A */
+      '?', /* U+971B */
+   0x919a, /* U+971C */
+      '?', /* U+971D */
+   0x89e0, /* U+971E */
+      '?', /* U+971F */
+      '?', /* U+9720 */
+      '?', /* U+9721 */
+      '?', /* U+9722 */
+      '?', /* U+9723 */
+   0xe8c3, /* U+9724 */
+      '?', /* U+9725 */
+      '?', /* U+9726 */
+   0x96b6, /* U+9727 */
+      '?', /* U+9728 */
+      '?', /* U+9729 */
+   0xe8c4, /* U+972A */
+      '?', /* U+972B */
+      '?', /* U+972C */
+      '?', /* U+972D */
+      '?', /* U+972E */
+      '?', /* U+972F */
+   0xe8c5, /* U+9730 */
+      '?', /* U+9731 */
+   0x9849, /* U+9732 */
+   0xfbed, /* U+9733 */
+      '?', /* U+9734 */
+      '?', /* U+9735 */
+      '?', /* U+9736 */
+      '?', /* U+9737 */
+   0x9e50, /* U+9738 */
+   0xe8c6, /* U+9739 */
+      '?', /* U+973A */
+   0xfbee, /* U+973B */
+      '?', /* U+973C */
+   0xe8c7, /* U+973D */
+   0xe8c8, /* U+973E */
+      '?', /* U+973F */
+      '?', /* U+9740 */
+      '?', /* U+9741 */
+   0xe8cc, /* U+9742 */
+   0xfbef, /* U+9743 */
+   0xe8c9, /* U+9744 */
+      '?', /* U+9745 */
+   0xe8ca, /* U+9746 */
+      '?', /* U+9747 */
+   0xe8cb, /* U+9748 */
+   0xe8cd, /* U+9749 */
+      '?', /* U+974A */
+      '?', /* U+974B */
+      '?', /* U+974C */
+   0xfbf0, /* U+974D */
+      '?', /* U+974E */
+   0xfbf1, /* U+974F */
+      '?', /* U+9750 */
+   0xfbf2, /* U+9751 */
+   0x90c2, /* U+9752 */
+      '?', /* U+9753 */
+      '?', /* U+9754 */
+   0xfbf3, /* U+9755 */
+   0x96f5, /* U+9756 */
+      '?', /* U+9757 */
+      '?', /* U+9758 */
+   0x90c3, /* U+9759 */
+      '?', /* U+975A */
+      '?', /* U+975B */
+   0xe8ce, /* U+975C */
+      '?', /* U+975D */
+   0x94f1, /* U+975E */
+      '?', /* U+975F */
+   0xe8cf, /* U+9760 */
+   0xea72, /* U+9761 */
+   0x96ca, /* U+9762 */
+      '?', /* U+9763 */
+   0xe8d0, /* U+9764 */
+      '?', /* U+9765 */
+   0xe8d1, /* U+9766 */
+      '?', /* U+9767 */
+   0xe8d2, /* U+9768 */
+   0x8a76, /* U+9769 */
+      '?', /* U+976A */
+   0xe8d4, /* U+976B */
+      '?', /* U+976C */
+   0x9078, /* U+976D */
+      '?', /* U+976E */
+      '?', /* U+976F */
+      '?', /* U+9770 */
+   0xe8d5, /* U+9771 */
+      '?', /* U+9772 */
+      '?', /* U+9773 */
+   0x8c43, /* U+9774 */
+      '?', /* U+9775 */
+      '?', /* U+9776 */
+      '?', /* U+9777 */
+      '?', /* U+9778 */
+   0xe8d6, /* U+9779 */
+   0xe8da, /* U+977A */
+      '?', /* U+977B */
+   0xe8d8, /* U+977C */
+      '?', /* U+977D */
+      '?', /* U+977E */
+      '?', /* U+977F */
+      '?', /* U+9780 */
+   0xe8d9, /* U+9781 */
+      '?', /* U+9782 */
+      '?', /* U+9783 */
+   0x8a93, /* U+9784 */
+   0xe8d7, /* U+9785 */
+   0xe8db, /* U+9786 */
+      '?', /* U+9787 */
+      '?', /* U+9788 */
+      '?', /* U+9789 */
+      '?', /* U+978A */
+   0xe8dc, /* U+978B */
+      '?', /* U+978C */
+   0x88c6, /* U+978D */
+      '?', /* U+978E */
+   0xe8dd, /* U+978F */
+   0xe8de, /* U+9790 */
+      '?', /* U+9791 */
+      '?', /* U+9792 */
+      '?', /* U+9793 */
+      '?', /* U+9794 */
+      '?', /* U+9795 */
+      '?', /* U+9796 */
+      '?', /* U+9797 */
+   0x8fe2, /* U+9798 */
+      '?', /* U+9799 */
+      '?', /* U+979A */
+      '?', /* U+979B */
+   0xe8df, /* U+979C */
+      '?', /* U+979D */
+      '?', /* U+979E */
+      '?', /* U+979F */
+   0x8b66, /* U+97A0 */
+      '?', /* U+97A1 */
+      '?', /* U+97A2 */
+   0xe8e2, /* U+97A3 */
+      '?', /* U+97A4 */
+      '?', /* U+97A5 */
+   0xe8e1, /* U+97A6 */
+      '?', /* U+97A7 */
+   0xe8e0, /* U+97A8 */
+      '?', /* U+97A9 */
+      '?', /* U+97AA */
+   0xe691, /* U+97AB */
+      '?', /* U+97AC */
+   0x95da, /* U+97AD */
+      '?', /* U+97AE */
+      '?', /* U+97AF */
+      '?', /* U+97B0 */
+      '?', /* U+97B1 */
+      '?', /* U+97B2 */
+   0xe8e3, /* U+97B3 */
+   0xe8e4, /* U+97B4 */
+      '?', /* U+97B5 */
+      '?', /* U+97B6 */
+      '?', /* U+97B7 */
+      '?', /* U+97B8 */
+      '?', /* U+97B9 */
+      '?', /* U+97BA */
+      '?', /* U+97BB */
+      '?', /* U+97BC */
+      '?', /* U+97BD */
+      '?', /* U+97BE */
+      '?', /* U+97BF */
+      '?', /* U+97C0 */
+      '?', /* U+97C1 */
+      '?', /* U+97C2 */
+   0xe8e5, /* U+97C3 */
+      '?', /* U+97C4 */
+      '?', /* U+97C5 */
+   0xe8e6, /* U+97C6 */
+      '?', /* U+97C7 */
+   0xe8e7, /* U+97C8 */
+      '?', /* U+97C9 */
+      '?', /* U+97CA */
+   0xe8e8, /* U+97CB */
+      '?', /* U+97CC */
+      '?', /* U+97CD */
+      '?', /* U+97CE */
+      '?', /* U+97CF */
+      '?', /* U+97D0 */
+      '?', /* U+97D1 */
+      '?', /* U+97D2 */
+   0x8ad8, /* U+97D3 */
+      '?', /* U+97D4 */
+      '?', /* U+97D5 */
+      '?', /* U+97D6 */
+      '?', /* U+97D7 */
+      '?', /* U+97D8 */
+      '?', /* U+97D9 */
+      '?', /* U+97DA */
+      '?', /* U+97DB */
+   0xe8e9, /* U+97DC */
+      '?', /* U+97DD */
+      '?', /* U+97DE */
+      '?', /* U+97DF */
+      '?', /* U+97E0 */
+      '?', /* U+97E1 */
+      '?', /* U+97E2 */
+      '?', /* U+97E3 */
+      '?', /* U+97E4 */
+      '?', /* U+97E5 */
+      '?', /* U+97E6 */
+      '?', /* U+97E7 */
+      '?', /* U+97E8 */
+      '?', /* U+97E9 */
+      '?', /* U+97EA */
+      '?', /* U+97EB */
+      '?', /* U+97EC */
+   0xe8ea, /* U+97ED */
+   0x9442, /* U+97EE */
+      '?', /* U+97EF */
+      '?', /* U+97F0 */
+      '?', /* U+97F1 */
+   0xe8ec, /* U+97F2 */
+   0x89b9, /* U+97F3 */
+      '?', /* U+97F4 */
+   0xe8ef, /* U+97F5 */
+   0xe8ee, /* U+97F6 */
+      '?', /* U+97F7 */
+      '?', /* U+97F8 */
+      '?', /* U+97F9 */
+      '?', /* U+97FA */
+   0x8943, /* U+97FB */
+      '?', /* U+97FC */
+      '?', /* U+97FD */
+      '?', /* U+97FE */
+   0x8bbf, /* U+97FF */
+      '?', /* U+9800 */
+   0x95c5, /* U+9801 */
+   0x92b8, /* U+9802 */
+   0x8da0, /* U+9803 */
+      '?', /* U+9804 */
+   0x8d80, /* U+9805 */
+   0x8f87, /* U+9806 */
+      '?', /* U+9807 */
+   0x907b, /* U+9808 */
+      '?', /* U+9809 */
+      '?', /* U+980A */
+      '?', /* U+980B */
+   0xe8f1, /* U+980C */
+      '?', /* U+980D */
+      '?', /* U+980E */
+   0xe8f0, /* U+980F */
+   0x9761, /* U+9810 */
+   0x8ae6, /* U+9811 */
+   0x94d0, /* U+9812 */
+   0x93da, /* U+9813 */
+      '?', /* U+9814 */
+      '?', /* U+9815 */
+      '?', /* U+9816 */
+   0x909c, /* U+9817 */
+   0x97cc, /* U+9818 */
+      '?', /* U+9819 */
+   0x8c7a, /* U+981A */
+      '?', /* U+981B */
+      '?', /* U+981C */
+      '?', /* U+981D */
+      '?', /* U+981E */
+      '?', /* U+981F */
+      '?', /* U+9820 */
+   0xe8f4, /* U+9821 */
+      '?', /* U+9822 */
+      '?', /* U+9823 */
+   0xe8f3, /* U+9824 */
+      '?', /* U+9825 */
+      '?', /* U+9826 */
+      '?', /* U+9827 */
+      '?', /* U+9828 */
+      '?', /* U+9829 */
+      '?', /* U+982A */
+      '?', /* U+982B */
+   0x966a, /* U+982C */
+   0x93aa, /* U+982D */
+      '?', /* U+982E */
+      '?', /* U+982F */
+      '?', /* U+9830 */
+      '?', /* U+9831 */
+      '?', /* U+9832 */
+      '?', /* U+9833 */
+   0x896f, /* U+9834 */
+      '?', /* U+9835 */
+      '?', /* U+9836 */
+   0xe8f5, /* U+9837 */
+   0xe8f2, /* U+9838 */
+      '?', /* U+9839 */
+      '?', /* U+983A */
+   0x9570, /* U+983B */
+   0x978a, /* U+983C */
+   0xe8f6, /* U+983D */
+      '?', /* U+983E */
+      '?', /* U+983F */
+      '?', /* U+9840 */
+      '?', /* U+9841 */
+      '?', /* U+9842 */
+      '?', /* U+9843 */
+      '?', /* U+9844 */
+      '?', /* U+9845 */
+   0xe8f7, /* U+9846 */
+      '?', /* U+9847 */
+      '?', /* U+9848 */
+      '?', /* U+9849 */
+      '?', /* U+984A */
+   0xe8f9, /* U+984B */
+   0x91e8, /* U+984C */
+   0x8a7a, /* U+984D */
+   0x8a7b, /* U+984E */
+   0xe8f8, /* U+984F */
+      '?', /* U+9850 */
+      '?', /* U+9851 */
+      '?', /* U+9852 */
+      '?', /* U+9853 */
+   0x8ae7, /* U+9854 */
+   0x8cb0, /* U+9855 */
+      '?', /* U+9856 */
+   0xfbf4, /* U+9857 */
+   0x8ae8, /* U+9858 */
+      '?', /* U+9859 */
+      '?', /* U+985A */
+   0x935e, /* U+985B */
+      '?', /* U+985C */
+      '?', /* U+985D */
+   0x97de, /* U+985E */
+      '?', /* U+985F */
+      '?', /* U+9860 */
+      '?', /* U+9861 */
+      '?', /* U+9862 */
+      '?', /* U+9863 */
+      '?', /* U+9864 */
+   0xfbf5, /* U+9865 */
+      '?', /* U+9866 */
+   0x8cda, /* U+9867 */
+      '?', /* U+9868 */
+      '?', /* U+9869 */
+      '?', /* U+986A */
+   0xe8fa, /* U+986B */
+      '?', /* U+986C */
+      '?', /* U+986D */
+      '?', /* U+986E */
+   0xe8fb, /* U+986F */
+   0xe8fc, /* U+9870 */
+   0xe940, /* U+9871 */
+      '?', /* U+9872 */
+   0xe942, /* U+9873 */
+   0xe941, /* U+9874 */
+      '?', /* U+9875 */
+      '?', /* U+9876 */
+      '?', /* U+9877 */
+      '?', /* U+9878 */
+      '?', /* U+9879 */
+      '?', /* U+987A */
+      '?', /* U+987B */
+      '?', /* U+987C */
+      '?', /* U+987D */
+      '?', /* U+987E */
+      '?', /* U+987F */
+      '?', /* U+9880 */
+      '?', /* U+9881 */
+      '?', /* U+9882 */
+      '?', /* U+9883 */
+      '?', /* U+9884 */
+      '?', /* U+9885 */
+      '?', /* U+9886 */
+      '?', /* U+9887 */
+      '?', /* U+9888 */
+      '?', /* U+9889 */
+      '?', /* U+988A */
+      '?', /* U+988B */
+      '?', /* U+988C */
+      '?', /* U+988D */
+      '?', /* U+988E */
+      '?', /* U+988F */
+      '?', /* U+9890 */
+      '?', /* U+9891 */
+      '?', /* U+9892 */
+      '?', /* U+9893 */
+      '?', /* U+9894 */
+      '?', /* U+9895 */
+      '?', /* U+9896 */
+      '?', /* U+9897 */
+      '?', /* U+9898 */
+      '?', /* U+9899 */
+      '?', /* U+989A */
+      '?', /* U+989B */
+      '?', /* U+989C */
+      '?', /* U+989D */
+      '?', /* U+989E */
+      '?', /* U+989F */
+      '?', /* U+98A0 */
+      '?', /* U+98A1 */
+      '?', /* U+98A2 */
+      '?', /* U+98A3 */
+      '?', /* U+98A4 */
+      '?', /* U+98A5 */
+      '?', /* U+98A6 */
+      '?', /* U+98A7 */
+   0x9597, /* U+98A8 */
+      '?', /* U+98A9 */
+   0xe943, /* U+98AA */
+      '?', /* U+98AB */
+      '?', /* U+98AC */
+      '?', /* U+98AD */
+      '?', /* U+98AE */
+   0xe944, /* U+98AF */
+      '?', /* U+98B0 */
+   0xe945, /* U+98B1 */
+      '?', /* U+98B2 */
+      '?', /* U+98B3 */
+      '?', /* U+98B4 */
+      '?', /* U+98B5 */
+   0xe946, /* U+98B6 */
+      '?', /* U+98B7 */
+      '?', /* U+98B8 */
+      '?', /* U+98B9 */
+      '?', /* U+98BA */
+      '?', /* U+98BB */
+      '?', /* U+98BC */
+      '?', /* U+98BD */
+      '?', /* U+98BE */
+      '?', /* U+98BF */
+      '?', /* U+98C0 */
+      '?', /* U+98C1 */
+      '?', /* U+98C2 */
+   0xe948, /* U+98C3 */
+   0xe947, /* U+98C4 */
+      '?', /* U+98C5 */
+   0xe949, /* U+98C6 */
+      '?', /* U+98C7 */
+      '?', /* U+98C8 */
+      '?', /* U+98C9 */
+      '?', /* U+98CA */
+      '?', /* U+98CB */
+      '?', /* U+98CC */
+      '?', /* U+98CD */
+      '?', /* U+98CE */
+      '?', /* U+98CF */
+      '?', /* U+98D0 */
+      '?', /* U+98D1 */
+      '?', /* U+98D2 */
+      '?', /* U+98D3 */
+      '?', /* U+98D4 */
+      '?', /* U+98D5 */
+      '?', /* U+98D6 */
+      '?', /* U+98D7 */
+      '?', /* U+98D8 */
+      '?', /* U+98D9 */
+      '?', /* U+98DA */
+   0x94f2, /* U+98DB */
+   0xe3ca, /* U+98DC */
+      '?', /* U+98DD */
+      '?', /* U+98DE */
+   0x9048, /* U+98DF */
+      '?', /* U+98E0 */
+      '?', /* U+98E1 */
+   0x8b51, /* U+98E2 */
+      '?', /* U+98E3 */
+      '?', /* U+98E4 */
+      '?', /* U+98E5 */
+      '?', /* U+98E6 */
+      '?', /* U+98E7 */
+      '?', /* U+98E8 */
+   0xe94a, /* U+98E9 */
+      '?', /* U+98EA */
+   0xe94b, /* U+98EB */
+      '?', /* U+98EC */
+   0x99aa, /* U+98ED */
+   0x9f5a, /* U+98EE */
+   0x94d1, /* U+98EF */
+      '?', /* U+98F0 */
+      '?', /* U+98F1 */
+   0x88f9, /* U+98F2 */
+      '?', /* U+98F3 */
+   0x88b9, /* U+98F4 */
+      '?', /* U+98F5 */
+      '?', /* U+98F6 */
+      '?', /* U+98F7 */
+      '?', /* U+98F8 */
+      '?', /* U+98F9 */
+      '?', /* U+98FA */
+      '?', /* U+98FB */
+   0x8e94, /* U+98FC */
+   0x964f, /* U+98FD */
+   0x8ffc, /* U+98FE */
+      '?', /* U+98FF */
+      '?', /* U+9900 */
+      '?', /* U+9901 */
+      '?', /* U+9902 */
+   0xe94c, /* U+9903 */
+      '?', /* U+9904 */
+   0x96dd, /* U+9905 */
+      '?', /* U+9906 */
+      '?', /* U+9907 */
+      '?', /* U+9908 */
+   0xe94d, /* U+9909 */
+   0x977b, /* U+990A */
+      '?', /* U+990B */
+   0x8961, /* U+990C */
+      '?', /* U+990D */
+      '?', /* U+990E */
+      '?', /* U+990F */
+   0x8e60, /* U+9910 */
+      '?', /* U+9911 */
+   0xe94e, /* U+9912 */
+   0x89ec, /* U+9913 */
+   0xe94f, /* U+9914 */
+      '?', /* U+9915 */
+      '?', /* U+9916 */
+      '?', /* U+9917 */
+   0xe950, /* U+9918 */
+      '?', /* U+9919 */
+      '?', /* U+991A */
+      '?', /* U+991B */
+      '?', /* U+991C */
+   0xe952, /* U+991D */
+   0xe953, /* U+991E */
+      '?', /* U+991F */
+   0xe955, /* U+9920 */
+   0xe951, /* U+9921 */
+      '?', /* U+9922 */
+      '?', /* U+9923 */
+   0xe954, /* U+9924 */
+      '?', /* U+9925 */
+      '?', /* U+9926 */
+   0xfbf8, /* U+9927 */
+   0x8ad9, /* U+9928 */
+      '?', /* U+9929 */
+      '?', /* U+992A */
+      '?', /* U+992B */
+   0xe956, /* U+992C */
+      '?', /* U+992D */
+   0xe957, /* U+992E */
+      '?', /* U+992F */
+      '?', /* U+9930 */
+      '?', /* U+9931 */
+      '?', /* U+9932 */
+      '?', /* U+9933 */
+      '?', /* U+9934 */
+      '?', /* U+9935 */
+      '?', /* U+9936 */
+      '?', /* U+9937 */
+      '?', /* U+9938 */
+      '?', /* U+9939 */
+      '?', /* U+993A */
+      '?', /* U+993B */
+      '?', /* U+993C */
+   0xe958, /* U+993D */
+   0xe959, /* U+993E */
+      '?', /* U+993F */
+      '?', /* U+9940 */
+      '?', /* U+9941 */
+   0xe95a, /* U+9942 */
+      '?', /* U+9943 */
+      '?', /* U+9944 */
+   0xe95c, /* U+9945 */
+      '?', /* U+9946 */
+      '?', /* U+9947 */
+      '?', /* U+9948 */
+   0xe95b, /* U+9949 */
+      '?', /* U+994A */
+   0xe95e, /* U+994B */
+   0xe961, /* U+994C */
+      '?', /* U+994D */
+      '?', /* U+994E */
+      '?', /* U+994F */
+   0xe95d, /* U+9950 */
+   0xe95f, /* U+9951 */
+   0xe960, /* U+9952 */
+      '?', /* U+9953 */
+      '?', /* U+9954 */
+   0xe962, /* U+9955 */
+      '?', /* U+9956 */
+   0x8bc0, /* U+9957 */
+      '?', /* U+9958 */
+      '?', /* U+9959 */
+      '?', /* U+995A */
+      '?', /* U+995B */
+      '?', /* U+995C */
+      '?', /* U+995D */
+      '?', /* U+995E */
+      '?', /* U+995F */
+      '?', /* U+9960 */
+      '?', /* U+9961 */
+      '?', /* U+9962 */
+      '?', /* U+9963 */
+      '?', /* U+9964 */
+      '?', /* U+9965 */
+      '?', /* U+9966 */
+      '?', /* U+9967 */
+      '?', /* U+9968 */
+      '?', /* U+9969 */
+      '?', /* U+996A */
+      '?', /* U+996B */
+      '?', /* U+996C */
+      '?', /* U+996D */
+      '?', /* U+996E */
+      '?', /* U+996F */
+      '?', /* U+9970 */
+      '?', /* U+9971 */
+      '?', /* U+9972 */
+      '?', /* U+9973 */
+      '?', /* U+9974 */
+      '?', /* U+9975 */
+      '?', /* U+9976 */
+      '?', /* U+9977 */
+      '?', /* U+9978 */
+      '?', /* U+9979 */
+      '?', /* U+997A */
+      '?', /* U+997B */
+      '?', /* U+997C */
+      '?', /* U+997D */
+      '?', /* U+997E */
+      '?', /* U+997F */
+      '?', /* U+9980 */
+      '?', /* U+9981 */
+      '?', /* U+9982 */
+      '?', /* U+9983 */
+      '?', /* U+9984 */
+      '?', /* U+9985 */
+      '?', /* U+9986 */
+      '?', /* U+9987 */
+      '?', /* U+9988 */
+      '?', /* U+9989 */
+      '?', /* U+998A */
+      '?', /* U+998B */
+      '?', /* U+998C */
+      '?', /* U+998D */
+      '?', /* U+998E */
+      '?', /* U+998F */
+      '?', /* U+9990 */
+      '?', /* U+9991 */
+      '?', /* U+9992 */
+      '?', /* U+9993 */
+      '?', /* U+9994 */
+      '?', /* U+9995 */
+   0x8ef1, /* U+9996 */
+   0xe963, /* U+9997 */
+   0xe964, /* U+9998 */
+   0x8d81, /* U+9999 */
+      '?', /* U+999A */
+      '?', /* U+999B */
+      '?', /* U+999C */
+      '?', /* U+999D */
+   0xfbfa, /* U+999E */
+      '?', /* U+999F */
+      '?', /* U+99A0 */
+      '?', /* U+99A1 */
+      '?', /* U+99A2 */
+      '?', /* U+99A3 */
+      '?', /* U+99A4 */
+   0xe965, /* U+99A5 */
+      '?', /* U+99A6 */
+      '?', /* U+99A7 */
+   0x8a5d, /* U+99A8 */
+      '?', /* U+99A9 */
+      '?', /* U+99AA */
+      '?', /* U+99AB */
+   0x946e, /* U+99AC */
+   0xe966, /* U+99AD */
+   0xe967, /* U+99AE */
+      '?', /* U+99AF */
+      '?', /* U+99B0 */
+      '?', /* U+99B1 */
+      '?', /* U+99B2 */
+   0x9279, /* U+99B3 */
+   0x93e9, /* U+99B4 */
+      '?', /* U+99B5 */
+      '?', /* U+99B6 */
+      '?', /* U+99B7 */
+      '?', /* U+99B8 */
+      '?', /* U+99B9 */
+      '?', /* U+99BA */
+      '?', /* U+99BB */
+   0xe968, /* U+99BC */
+      '?', /* U+99BD */
+      '?', /* U+99BE */
+      '?', /* U+99BF */
+      '?', /* U+99C0 */
+   0x949d, /* U+99C1 */
+      '?', /* U+99C2 */
+      '?', /* U+99C3 */
+   0x91ca, /* U+99C4 */
+   0x8977, /* U+99C5 */
+   0x8bec, /* U+99C6 */
+      '?', /* U+99C7 */
+   0x8bed, /* U+99C8 */
+      '?', /* U+99C9 */
+      '?', /* U+99CA */
+      '?', /* U+99CB */
+      '?', /* U+99CC */
+      '?', /* U+99CD */
+      '?', /* U+99CE */
+      '?', /* U+99CF */
+   0x9293, /* U+99D0 */
+   0xe96d, /* U+99D1 */
+   0x8bee, /* U+99D2 */
+      '?', /* U+99D3 */
+      '?', /* U+99D4 */
+   0x89ed, /* U+99D5 */
+      '?', /* U+99D6 */
+      '?', /* U+99D7 */
+   0xe96c, /* U+99D8 */
+      '?', /* U+99D9 */
+      '?', /* U+99DA */
+   0xe96a, /* U+99DB */
+      '?', /* U+99DC */
+   0xe96b, /* U+99DD */
+      '?', /* U+99DE */
+   0xe969, /* U+99DF */
+      '?', /* U+99E0 */
+      '?', /* U+99E1 */
+   0xe977, /* U+99E2 */
+      '?', /* U+99E3 */
+      '?', /* U+99E4 */
+      '?', /* U+99E5 */
+      '?', /* U+99E6 */
+      '?', /* U+99E7 */
+      '?', /* U+99E8 */
+      '?', /* U+99E9 */
+      '?', /* U+99EA */
+      '?', /* U+99EB */
+      '?', /* U+99EC */
+   0xe96e, /* U+99ED */
+   0xe96f, /* U+99EE */
+      '?', /* U+99EF */
+      '?', /* U+99F0 */
+   0xe970, /* U+99F1 */
+   0xe971, /* U+99F2 */
+      '?', /* U+99F3 */
+      '?', /* U+99F4 */
+      '?', /* U+99F5 */
+      '?', /* U+99F6 */
+      '?', /* U+99F7 */
+   0xe973, /* U+99F8 */
+      '?', /* U+99F9 */
+      '?', /* U+99FA */
+   0xe972, /* U+99FB */
+      '?', /* U+99FC */
+      '?', /* U+99FD */
+      '?', /* U+99FE */
+   0x8f78, /* U+99FF */
+      '?', /* U+9A00 */
+   0xe974, /* U+9A01 */
+      '?', /* U+9A02 */
+      '?', /* U+9A03 */
+      '?', /* U+9A04 */
+   0xe976, /* U+9A05 */
+      '?', /* U+9A06 */
+      '?', /* U+9A07 */
+      '?', /* U+9A08 */
+      '?', /* U+9A09 */
+      '?', /* U+9A0A */
+      '?', /* U+9A0B */
+      '?', /* U+9A0C */
+      '?', /* U+9A0D */
+   0x8b52, /* U+9A0E */
+   0xe975, /* U+9A0F */
+      '?', /* U+9A10 */
+      '?', /* U+9A11 */
+   0x919b, /* U+9A12 */
+   0x8cb1, /* U+9A13 */
+      '?', /* U+9A14 */
+      '?', /* U+9A15 */
+      '?', /* U+9A16 */
+      '?', /* U+9A17 */
+      '?', /* U+9A18 */
+   0xe978, /* U+9A19 */
+      '?', /* U+9A1A */
+      '?', /* U+9A1B */
+      '?', /* U+9A1C */
+      '?', /* U+9A1D */
+      '?', /* U+9A1E */
+      '?', /* U+9A1F */
+      '?', /* U+9A20 */
+      '?', /* U+9A21 */
+      '?', /* U+9A22 */
+      '?', /* U+9A23 */
+      '?', /* U+9A24 */
+      '?', /* U+9A25 */
+      '?', /* U+9A26 */
+      '?', /* U+9A27 */
+   0x91cb, /* U+9A28 */
+      '?', /* U+9A29 */
+      '?', /* U+9A2A */
+   0xe979, /* U+9A2B */
+      '?', /* U+9A2C */
+      '?', /* U+9A2D */
+      '?', /* U+9A2E */
+      '?', /* U+9A2F */
+   0x93ab, /* U+9A30 */
+      '?', /* U+9A31 */
+      '?', /* U+9A32 */
+      '?', /* U+9A33 */
+      '?', /* U+9A34 */
+      '?', /* U+9A35 */
+      '?', /* U+9A36 */
+   0xe97a, /* U+9A37 */
+      '?', /* U+9A38 */
+      '?', /* U+9A39 */
+      '?', /* U+9A3A */
+      '?', /* U+9A3B */
+      '?', /* U+9A3C */
+      '?', /* U+9A3D */
+   0xe980, /* U+9A3E */
+      '?', /* U+9A3F */
+   0xe97d, /* U+9A40 */
+      '?', /* U+9A41 */
+   0xe97c, /* U+9A42 */
+   0xe97e, /* U+9A43 */
+      '?', /* U+9A44 */
+   0xe97b, /* U+9A45 */
+      '?', /* U+9A46 */
+      '?', /* U+9A47 */
+      '?', /* U+9A48 */
+      '?', /* U+9A49 */
+      '?', /* U+9A4A */
+      '?', /* U+9A4B */
+      '?', /* U+9A4C */
+   0xe982, /* U+9A4D */
+   0xfbfb, /* U+9A4E */
+      '?', /* U+9A4F */
+      '?', /* U+9A50 */
+      '?', /* U+9A51 */
+      '?', /* U+9A52 */
+      '?', /* U+9A53 */
+      '?', /* U+9A54 */
+   0xe981, /* U+9A55 */
+      '?', /* U+9A56 */
+   0xe984, /* U+9A57 */
+      '?', /* U+9A58 */
+      '?', /* U+9A59 */
+   0x8bc1, /* U+9A5A */
+   0xe983, /* U+9A5B */
+      '?', /* U+9A5C */
+      '?', /* U+9A5D */
+      '?', /* U+9A5E */
+   0xe985, /* U+9A5F */
+      '?', /* U+9A60 */
+      '?', /* U+9A61 */
+   0xe986, /* U+9A62 */
+      '?', /* U+9A63 */
+   0xe988, /* U+9A64 */
+   0xe987, /* U+9A65 */
+      '?', /* U+9A66 */
+      '?', /* U+9A67 */
+      '?', /* U+9A68 */
+   0xe989, /* U+9A69 */
+   0xe98b, /* U+9A6A */
+   0xe98a, /* U+9A6B */
+      '?', /* U+9A6C */
+      '?', /* U+9A6D */
+      '?', /* U+9A6E */
+      '?', /* U+9A6F */
+      '?', /* U+9A70 */
+      '?', /* U+9A71 */
+      '?', /* U+9A72 */
+      '?', /* U+9A73 */
+      '?', /* U+9A74 */
+      '?', /* U+9A75 */
+      '?', /* U+9A76 */
+      '?', /* U+9A77 */
+      '?', /* U+9A78 */
+      '?', /* U+9A79 */
+      '?', /* U+9A7A */
+      '?', /* U+9A7B */
+      '?', /* U+9A7C */
+      '?', /* U+9A7D */
+      '?', /* U+9A7E */
+      '?', /* U+9A7F */
+      '?', /* U+9A80 */
+      '?', /* U+9A81 */
+      '?', /* U+9A82 */
+      '?', /* U+9A83 */
+      '?', /* U+9A84 */
+      '?', /* U+9A85 */
+      '?', /* U+9A86 */
+      '?', /* U+9A87 */
+      '?', /* U+9A88 */
+      '?', /* U+9A89 */
+      '?', /* U+9A8A */
+      '?', /* U+9A8B */
+      '?', /* U+9A8C */
+      '?', /* U+9A8D */
+      '?', /* U+9A8E */
+      '?', /* U+9A8F */
+      '?', /* U+9A90 */
+      '?', /* U+9A91 */
+      '?', /* U+9A92 */
+      '?', /* U+9A93 */
+      '?', /* U+9A94 */
+      '?', /* U+9A95 */
+      '?', /* U+9A96 */
+      '?', /* U+9A97 */
+      '?', /* U+9A98 */
+      '?', /* U+9A99 */
+      '?', /* U+9A9A */
+      '?', /* U+9A9B */
+      '?', /* U+9A9C */
+      '?', /* U+9A9D */
+      '?', /* U+9A9E */
+      '?', /* U+9A9F */
+      '?', /* U+9AA0 */
+      '?', /* U+9AA1 */
+      '?', /* U+9AA2 */
+      '?', /* U+9AA3 */
+      '?', /* U+9AA4 */
+      '?', /* U+9AA5 */
+      '?', /* U+9AA6 */
+      '?', /* U+9AA7 */
+   0x8d9c, /* U+9AA8 */
+      '?', /* U+9AA9 */
+      '?', /* U+9AAA */
+      '?', /* U+9AAB */
+      '?', /* U+9AAC */
+   0xe98c, /* U+9AAD */
+      '?', /* U+9AAE */
+      '?', /* U+9AAF */
+   0xe98d, /* U+9AB0 */
+      '?', /* U+9AB1 */
+      '?', /* U+9AB2 */
+      '?', /* U+9AB3 */
+      '?', /* U+9AB4 */
+      '?', /* U+9AB5 */
+      '?', /* U+9AB6 */
+      '?', /* U+9AB7 */
+   0x8a5b, /* U+9AB8 */
+      '?', /* U+9AB9 */
+      '?', /* U+9ABA */
+      '?', /* U+9ABB */
+   0xe98e, /* U+9ABC */
+      '?', /* U+9ABD */
+      '?', /* U+9ABE */
+      '?', /* U+9ABF */
+   0xe98f, /* U+9AC0 */
+      '?', /* U+9AC1 */
+      '?', /* U+9AC2 */
+      '?', /* U+9AC3 */
+   0x9091, /* U+9AC4 */
+      '?', /* U+9AC5 */
+      '?', /* U+9AC6 */
+      '?', /* U+9AC7 */
+      '?', /* U+9AC8 */
+      '?', /* U+9AC9 */
+      '?', /* U+9ACA */
+      '?', /* U+9ACB */
+      '?', /* U+9ACC */
+      '?', /* U+9ACD */
+      '?', /* U+9ACE */
+   0xe990, /* U+9ACF */
+      '?', /* U+9AD0 */
+   0xe991, /* U+9AD1 */
+      '?', /* U+9AD2 */
+   0xe992, /* U+9AD3 */
+   0xe993, /* U+9AD4 */
+      '?', /* U+9AD5 */
+      '?', /* U+9AD6 */
+      '?', /* U+9AD7 */
+   0x8d82, /* U+9AD8 */
+   0xfbfc, /* U+9AD9 */
+      '?', /* U+9ADA */
+      '?', /* U+9ADB */
+   0xfc40, /* U+9ADC */
+      '?', /* U+9ADD */
+   0xe994, /* U+9ADE */
+   0xe995, /* U+9ADF */
+      '?', /* U+9AE0 */
+      '?', /* U+9AE1 */
+   0xe996, /* U+9AE2 */
+   0xe997, /* U+9AE3 */
+      '?', /* U+9AE4 */
+      '?', /* U+9AE5 */
+   0xe998, /* U+9AE6 */
+      '?', /* U+9AE7 */
+      '?', /* U+9AE8 */
+      '?', /* U+9AE9 */
+   0x94af, /* U+9AEA */
+   0xe99a, /* U+9AEB */
+      '?', /* U+9AEC */
+   0x9545, /* U+9AED */
+   0xe99b, /* U+9AEE */
+   0xe999, /* U+9AEF */
+      '?', /* U+9AF0 */
+   0xe99d, /* U+9AF1 */
+      '?', /* U+9AF2 */
+      '?', /* U+9AF3 */
+   0xe99c, /* U+9AF4 */
+      '?', /* U+9AF5 */
+      '?', /* U+9AF6 */
+   0xe99e, /* U+9AF7 */
+      '?', /* U+9AF8 */
+      '?', /* U+9AF9 */
+      '?', /* U+9AFA */
+   0xe99f, /* U+9AFB */
+      '?', /* U+9AFC */
+      '?', /* U+9AFD */
+      '?', /* U+9AFE */
+      '?', /* U+9AFF */
+      '?', /* U+9B00 */
+      '?', /* U+9B01 */
+      '?', /* U+9B02 */
+      '?', /* U+9B03 */
+      '?', /* U+9B04 */
+      '?', /* U+9B05 */
+   0xe9a0, /* U+9B06 */
+      '?', /* U+9B07 */
+      '?', /* U+9B08 */
+      '?', /* U+9B09 */
+      '?', /* U+9B0A */
+      '?', /* U+9B0B */
+      '?', /* U+9B0C */
+      '?', /* U+9B0D */
+      '?', /* U+9B0E */
+      '?', /* U+9B0F */
+      '?', /* U+9B10 */
+      '?', /* U+9B11 */
+      '?', /* U+9B12 */
+      '?', /* U+9B13 */
+      '?', /* U+9B14 */
+      '?', /* U+9B15 */
+      '?', /* U+9B16 */
+      '?', /* U+9B17 */
+   0xe9a1, /* U+9B18 */
+      '?', /* U+9B19 */
+   0xe9a2, /* U+9B1A */
+      '?', /* U+9B1B */
+      '?', /* U+9B1C */
+      '?', /* U+9B1D */
+      '?', /* U+9B1E */
+   0xe9a3, /* U+9B1F */
+      '?', /* U+9B20 */
+      '?', /* U+9B21 */
+   0xe9a4, /* U+9B22 */
+   0xe9a5, /* U+9B23 */
+      '?', /* U+9B24 */
+   0xe9a6, /* U+9B25 */
+      '?', /* U+9B26 */
+   0xe9a7, /* U+9B27 */
+   0xe9a8, /* U+9B28 */
+   0xe9a9, /* U+9B29 */
+   0xe9aa, /* U+9B2A */
+      '?', /* U+9B2B */
+      '?', /* U+9B2C */
+      '?', /* U+9B2D */
+   0xe9ab, /* U+9B2E */
+   0xe9ac, /* U+9B2F */
+      '?', /* U+9B30 */
+   0x9f54, /* U+9B31 */
+   0xe9ad, /* U+9B32 */
+      '?', /* U+9B33 */
+      '?', /* U+9B34 */
+      '?', /* U+9B35 */
+      '?', /* U+9B36 */
+      '?', /* U+9B37 */
+      '?', /* U+9B38 */
+      '?', /* U+9B39 */
+      '?', /* U+9B3A */
+   0xe2f6, /* U+9B3B */
+   0x8b53, /* U+9B3C */
+      '?', /* U+9B3D */
+      '?', /* U+9B3E */
+      '?', /* U+9B3F */
+      '?', /* U+9B40 */
+   0x8a40, /* U+9B41 */
+   0x8db0, /* U+9B42 */
+   0xe9af, /* U+9B43 */
+   0xe9ae, /* U+9B44 */
+   0x96a3, /* U+9B45 */
+      '?', /* U+9B46 */
+      '?', /* U+9B47 */
+      '?', /* U+9B48 */
+      '?', /* U+9B49 */
+      '?', /* U+9B4A */
+      '?', /* U+9B4B */
+      '?', /* U+9B4C */
+   0xe9b1, /* U+9B4D */
+   0xe9b2, /* U+9B4E */
+   0xe9b0, /* U+9B4F */
+      '?', /* U+9B50 */
+   0xe9b3, /* U+9B51 */
+      '?', /* U+9B52 */
+      '?', /* U+9B53 */
+   0x9682, /* U+9B54 */
+      '?', /* U+9B55 */
+      '?', /* U+9B56 */
+      '?', /* U+9B57 */
+   0xe9b4, /* U+9B58 */
+      '?', /* U+9B59 */
+   0x8b9b, /* U+9B5A */
+      '?', /* U+9B5B */
+      '?', /* U+9B5C */
+      '?', /* U+9B5D */
+      '?', /* U+9B5E */
+      '?', /* U+9B5F */
+      '?', /* U+9B60 */
+      '?', /* U+9B61 */
+      '?', /* U+9B62 */
+      '?', /* U+9B63 */
+      '?', /* U+9B64 */
+      '?', /* U+9B65 */
+      '?', /* U+9B66 */
+      '?', /* U+9B67 */
+      '?', /* U+9B68 */
+      '?', /* U+9B69 */
+      '?', /* U+9B6A */
+      '?', /* U+9B6B */
+      '?', /* U+9B6C */
+      '?', /* U+9B6D */
+      '?', /* U+9B6E */
+   0x9844, /* U+9B6F */
+      '?', /* U+9B70 */
+      '?', /* U+9B71 */
+   0xfc42, /* U+9B72 */
+      '?', /* U+9B73 */
+   0xe9b5, /* U+9B74 */
+   0xfc41, /* U+9B75 */
+      '?', /* U+9B76 */
+      '?', /* U+9B77 */
+      '?', /* U+9B78 */
+      '?', /* U+9B79 */
+      '?', /* U+9B7A */
+      '?', /* U+9B7B */
+      '?', /* U+9B7C */
+      '?', /* U+9B7D */
+      '?', /* U+9B7E */
+      '?', /* U+9B7F */
+      '?', /* U+9B80 */
+      '?', /* U+9B81 */
+      '?', /* U+9B82 */
+   0xe9b7, /* U+9B83 */
+      '?', /* U+9B84 */
+      '?', /* U+9B85 */
+      '?', /* U+9B86 */
+      '?', /* U+9B87 */
+      '?', /* U+9B88 */
+      '?', /* U+9B89 */
+      '?', /* U+9B8A */
+      '?', /* U+9B8B */
+      '?', /* U+9B8C */
+      '?', /* U+9B8D */
+   0x88bc, /* U+9B8E */
+   0xfc43, /* U+9B8F */
+      '?', /* U+9B90 */
+   0xe9b8, /* U+9B91 */
+   0x95a9, /* U+9B92 */
+   0xe9b6, /* U+9B93 */
+      '?', /* U+9B94 */
+      '?', /* U+9B95 */
+   0xe9b9, /* U+9B96 */
+   0xe9ba, /* U+9B97 */
+      '?', /* U+9B98 */
+      '?', /* U+9B99 */
+      '?', /* U+9B9A */
+      '?', /* U+9B9B */
+      '?', /* U+9B9C */
+      '?', /* U+9B9D */
+      '?', /* U+9B9E */
+   0xe9bb, /* U+9B9F */
+   0xe9bc, /* U+9BA0 */
+      '?', /* U+9BA1 */
+      '?', /* U+9BA2 */
+      '?', /* U+9BA3 */
+      '?', /* U+9BA4 */
+      '?', /* U+9BA5 */
+      '?', /* U+9BA6 */
+      '?', /* U+9BA7 */
+   0xe9bd, /* U+9BA8 */
+      '?', /* U+9BA9 */
+   0x968e, /* U+9BAA */
+   0x8e4c, /* U+9BAB */
+      '?', /* U+9BAC */
+   0x8df8, /* U+9BAD */
+   0x914e, /* U+9BAE */
+      '?', /* U+9BAF */
+      '?', /* U+9BB0 */
+   0xfc44, /* U+9BB1 */
+      '?', /* U+9BB2 */
+      '?', /* U+9BB3 */
+   0xe9be, /* U+9BB4 */
+      '?', /* U+9BB5 */
+      '?', /* U+9BB6 */
+      '?', /* U+9BB7 */
+      '?', /* U+9BB8 */
+   0xe9c1, /* U+9BB9 */
+      '?', /* U+9BBA */
+   0xfc45, /* U+9BBB */
+      '?', /* U+9BBC */
+      '?', /* U+9BBD */
+      '?', /* U+9BBE */
+      '?', /* U+9BBF */
+   0xe9bf, /* U+9BC0 */
+      '?', /* U+9BC1 */
+      '?', /* U+9BC2 */
+      '?', /* U+9BC3 */
+      '?', /* U+9BC4 */
+      '?', /* U+9BC5 */
+   0xe9c2, /* U+9BC6 */
+      '?', /* U+9BC7 */
+      '?', /* U+9BC8 */
+   0x8cef, /* U+9BC9 */
+   0xe9c0, /* U+9BCA */
+      '?', /* U+9BCB */
+      '?', /* U+9BCC */
+      '?', /* U+9BCD */
+      '?', /* U+9BCE */
+   0xe9c3, /* U+9BCF */
+      '?', /* U+9BD0 */
+   0xe9c4, /* U+9BD1 */
+   0xe9c5, /* U+9BD2 */
+      '?', /* U+9BD3 */
+   0xe9c9, /* U+9BD4 */
+      '?', /* U+9BD5 */
+   0x8e49, /* U+9BD6 */
+      '?', /* U+9BD7 */
+      '?', /* U+9BD8 */
+      '?', /* U+9BD9 */
+      '?', /* U+9BDA */
+   0x91e2, /* U+9BDB */
+      '?', /* U+9BDC */
+      '?', /* U+9BDD */
+      '?', /* U+9BDE */
+      '?', /* U+9BDF */
+      '?', /* U+9BE0 */
+   0xe9ca, /* U+9BE1 */
+   0xe9c7, /* U+9BE2 */
+   0xe9c6, /* U+9BE3 */
+   0xe9c8, /* U+9BE4 */
+      '?', /* U+9BE5 */
+      '?', /* U+9BE6 */
+      '?', /* U+9BE7 */
+   0x8c7e, /* U+9BE8 */
+      '?', /* U+9BE9 */
+      '?', /* U+9BEA */
+      '?', /* U+9BEB */
+      '?', /* U+9BEC */
+      '?', /* U+9BED */
+      '?', /* U+9BEE */
+      '?', /* U+9BEF */
+   0xe9ce, /* U+9BF0 */
+   0xe9cd, /* U+9BF1 */
+   0xe9cc, /* U+9BF2 */
+      '?', /* U+9BF3 */
+      '?', /* U+9BF4 */
+   0x88b1, /* U+9BF5 */
+      '?', /* U+9BF6 */
+      '?', /* U+9BF7 */
+      '?', /* U+9BF8 */
+      '?', /* U+9BF9 */
+      '?', /* U+9BFA */
+      '?', /* U+9BFB */
+      '?', /* U+9BFC */
+      '?', /* U+9BFD */
+      '?', /* U+9BFE */
+      '?', /* U+9BFF */
+   0xfc46, /* U+9C00 */
+      '?', /* U+9C01 */
+      '?', /* U+9C02 */
+      '?', /* U+9C03 */
+   0xe9d8, /* U+9C04 */
+      '?', /* U+9C05 */
+   0xe9d4, /* U+9C06 */
+      '?', /* U+9C07 */
+   0xe9d5, /* U+9C08 */
+   0xe9d1, /* U+9C09 */
+   0xe9d7, /* U+9C0A */
+      '?', /* U+9C0B */
+   0xe9d3, /* U+9C0C */
+   0x8a82, /* U+9C0D */
+      '?', /* U+9C0E */
+      '?', /* U+9C0F */
+   0x986b, /* U+9C10 */
+      '?', /* U+9C11 */
+   0xe9d6, /* U+9C12 */
+   0xe9d2, /* U+9C13 */
+   0xe9d0, /* U+9C14 */
+   0xe9cf, /* U+9C15 */
+      '?', /* U+9C16 */
+      '?', /* U+9C17 */
+      '?', /* U+9C18 */
+      '?', /* U+9C19 */
+      '?', /* U+9C1A */
+   0xe9da, /* U+9C1B */
+      '?', /* U+9C1C */
+      '?', /* U+9C1D */
+      '?', /* U+9C1E */
+      '?', /* U+9C1F */
+      '?', /* U+9C20 */
+   0xe9dd, /* U+9C21 */
+      '?', /* U+9C22 */
+      '?', /* U+9C23 */
+   0xe9dc, /* U+9C24 */
+   0xe9db, /* U+9C25 */
+      '?', /* U+9C26 */
+      '?', /* U+9C27 */
+      '?', /* U+9C28 */
+      '?', /* U+9C29 */
+      '?', /* U+9C2A */
+      '?', /* U+9C2B */
+      '?', /* U+9C2C */
+   0x9568, /* U+9C2D */
+   0xe9d9, /* U+9C2E */
+   0x88f1, /* U+9C2F */
+   0xe9de, /* U+9C30 */
+      '?', /* U+9C31 */
+   0xe9e0, /* U+9C32 */
+      '?', /* U+9C33 */
+      '?', /* U+9C34 */
+      '?', /* U+9C35 */
+      '?', /* U+9C36 */
+      '?', /* U+9C37 */
+      '?', /* U+9C38 */
+   0x8a8f, /* U+9C39 */
+   0xe9cb, /* U+9C3A */
+   0x8956, /* U+9C3B */
+      '?', /* U+9C3C */
+      '?', /* U+9C3D */
+   0xe9e2, /* U+9C3E */
+      '?', /* U+9C3F */
+      '?', /* U+9C40 */
+      '?', /* U+9C41 */
+      '?', /* U+9C42 */
+      '?', /* U+9C43 */
+      '?', /* U+9C44 */
+      '?', /* U+9C45 */
+   0xe9e1, /* U+9C46 */
+   0xe9df, /* U+9C47 */
+   0x924c, /* U+9C48 */
+      '?', /* U+9C49 */
+      '?', /* U+9C4A */
+      '?', /* U+9C4B */
+      '?', /* U+9C4C */
+      '?', /* U+9C4D */
+      '?', /* U+9C4E */
+      '?', /* U+9C4F */
+      '?', /* U+9C50 */
+      '?', /* U+9C51 */
+   0x9690, /* U+9C52 */
+      '?', /* U+9C53 */
+      '?', /* U+9C54 */
+      '?', /* U+9C55 */
+      '?', /* U+9C56 */
+   0x97d8, /* U+9C57 */
+      '?', /* U+9C58 */
+      '?', /* U+9C59 */
+   0xe9e3, /* U+9C5A */
+      '?', /* U+9C5B */
+      '?', /* U+9C5C */
+      '?', /* U+9C5D */
+      '?', /* U+9C5E */
+      '?', /* U+9C5F */
+   0xe9e4, /* U+9C60 */
+      '?', /* U+9C61 */
+      '?', /* U+9C62 */
+      '?', /* U+9C63 */
+      '?', /* U+9C64 */
+      '?', /* U+9C65 */
+      '?', /* U+9C66 */
+   0xe9e5, /* U+9C67 */
+      '?', /* U+9C68 */
+      '?', /* U+9C69 */
+      '?', /* U+9C6A */
+      '?', /* U+9C6B */
+      '?', /* U+9C6C */
+      '?', /* U+9C6D */
+      '?', /* U+9C6E */
+      '?', /* U+9C6F */
+      '?', /* U+9C70 */
+      '?', /* U+9C71 */
+      '?', /* U+9C72 */
+      '?', /* U+9C73 */
+      '?', /* U+9C74 */
+      '?', /* U+9C75 */
+   0xe9e6, /* U+9C76 */
+      '?', /* U+9C77 */
+   0xe9e7, /* U+9C78 */
+      '?', /* U+9C79 */
+      '?', /* U+9C7A */
+      '?', /* U+9C7B */
+      '?', /* U+9C7C */
+      '?', /* U+9C7D */
+      '?', /* U+9C7E */
+      '?', /* U+9C7F */
+      '?', /* U+9C80 */
+      '?', /* U+9C81 */
+      '?', /* U+9C82 */
+      '?', /* U+9C83 */
+      '?', /* U+9C84 */
+      '?', /* U+9C85 */
+      '?', /* U+9C86 */
+      '?', /* U+9C87 */
+      '?', /* U+9C88 */
+      '?', /* U+9C89 */
+      '?', /* U+9C8A */
+      '?', /* U+9C8B */
+      '?', /* U+9C8C */
+      '?', /* U+9C8D */
+      '?', /* U+9C8E */
+      '?', /* U+9C8F */
+      '?', /* U+9C90 */
+      '?', /* U+9C91 */
+      '?', /* U+9C92 */
+      '?', /* U+9C93 */
+      '?', /* U+9C94 */
+      '?', /* U+9C95 */
+      '?', /* U+9C96 */
+      '?', /* U+9C97 */
+      '?', /* U+9C98 */
+      '?', /* U+9C99 */
+      '?', /* U+9C9A */
+      '?', /* U+9C9B */
+      '?', /* U+9C9C */
+      '?', /* U+9C9D */
+      '?', /* U+9C9E */
+      '?', /* U+9C9F */
+      '?', /* U+9CA0 */
+      '?', /* U+9CA1 */
+      '?', /* U+9CA2 */
+      '?', /* U+9CA3 */
+      '?', /* U+9CA4 */
+      '?', /* U+9CA5 */
+      '?', /* U+9CA6 */
+      '?', /* U+9CA7 */
+      '?', /* U+9CA8 */
+      '?', /* U+9CA9 */
+      '?', /* U+9CAA */
+      '?', /* U+9CAB */
+      '?', /* U+9CAC */
+      '?', /* U+9CAD */
+      '?', /* U+9CAE */
+      '?', /* U+9CAF */
+      '?', /* U+9CB0 */
+      '?', /* U+9CB1 */
+      '?', /* U+9CB2 */
+      '?', /* U+9CB3 */
+      '?', /* U+9CB4 */
+      '?', /* U+9CB5 */
+      '?', /* U+9CB6 */
+      '?', /* U+9CB7 */
+      '?', /* U+9CB8 */
+      '?', /* U+9CB9 */
+      '?', /* U+9CBA */
+      '?', /* U+9CBB */
+      '?', /* U+9CBC */
+      '?', /* U+9CBD */
+      '?', /* U+9CBE */
+      '?', /* U+9CBF */
+      '?', /* U+9CC0 */
+      '?', /* U+9CC1 */
+      '?', /* U+9CC2 */
+      '?', /* U+9CC3 */
+      '?', /* U+9CC4 */
+      '?', /* U+9CC5 */
+      '?', /* U+9CC6 */
+      '?', /* U+9CC7 */
+      '?', /* U+9CC8 */
+      '?', /* U+9CC9 */
+      '?', /* U+9CCA */
+      '?', /* U+9CCB */
+      '?', /* U+9CCC */
+      '?', /* U+9CCD */
+      '?', /* U+9CCE */
+      '?', /* U+9CCF */
+      '?', /* U+9CD0 */
+      '?', /* U+9CD1 */
+      '?', /* U+9CD2 */
+      '?', /* U+9CD3 */
+      '?', /* U+9CD4 */
+      '?', /* U+9CD5 */
+      '?', /* U+9CD6 */
+      '?', /* U+9CD7 */
+      '?', /* U+9CD8 */
+      '?', /* U+9CD9 */
+      '?', /* U+9CDA */
+      '?', /* U+9CDB */
+      '?', /* U+9CDC */
+      '?', /* U+9CDD */
+      '?', /* U+9CDE */
+      '?', /* U+9CDF */
+      '?', /* U+9CE0 */
+      '?', /* U+9CE1 */
+      '?', /* U+9CE2 */
+      '?', /* U+9CE3 */
+      '?', /* U+9CE4 */
+   0x92b9, /* U+9CE5 */
+      '?', /* U+9CE6 */
+   0xe9e8, /* U+9CE7 */
+      '?', /* U+9CE8 */
+   0x94b5, /* U+9CE9 */
+      '?', /* U+9CEA */
+   0xe9ed, /* U+9CEB */
+   0xe9e9, /* U+9CEC */
+      '?', /* U+9CED */
+      '?', /* U+9CEE */
+      '?', /* U+9CEF */
+   0xe9ea, /* U+9CF0 */
+      '?', /* U+9CF1 */
+      '?', /* U+9CF2 */
+   0x9650, /* U+9CF3 */
+   0x96c2, /* U+9CF4 */
+      '?', /* U+9CF5 */
+   0x93ce, /* U+9CF6 */
+      '?', /* U+9CF7 */
+      '?', /* U+9CF8 */
+      '?', /* U+9CF9 */
+      '?', /* U+9CFA */
+      '?', /* U+9CFB */
+      '?', /* U+9CFC */
+      '?', /* U+9CFD */
+      '?', /* U+9CFE */
+      '?', /* U+9CFF */
+      '?', /* U+9D00 */
+      '?', /* U+9D01 */
+      '?', /* U+9D02 */
+   0xe9ee, /* U+9D03 */
+      '?', /* U+9D04 */
+      '?', /* U+9D05 */
+   0xe9ef, /* U+9D06 */
+   0x93bc, /* U+9D07 */
+   0xe9ec, /* U+9D08 */
+   0xe9eb, /* U+9D09 */
+      '?', /* U+9D0A */
+      '?', /* U+9D0B */
+      '?', /* U+9D0C */
+      '?', /* U+9D0D */
+   0x89a8, /* U+9D0E */
+      '?', /* U+9D0F */
+      '?', /* U+9D10 */
+      '?', /* U+9D11 */
+   0xe9f7, /* U+9D12 */
+      '?', /* U+9D13 */
+      '?', /* U+9D14 */
+   0xe9f6, /* U+9D15 */
+      '?', /* U+9D16 */
+      '?', /* U+9D17 */
+      '?', /* U+9D18 */
+      '?', /* U+9D19 */
+      '?', /* U+9D1A */
+   0x8995, /* U+9D1B */
+      '?', /* U+9D1C */
+      '?', /* U+9D1D */
+      '?', /* U+9D1E */
+   0xe9f4, /* U+9D1F */
+      '?', /* U+9D20 */
+      '?', /* U+9D21 */
+      '?', /* U+9D22 */
+   0xe9f3, /* U+9D23 */
+      '?', /* U+9D24 */
+      '?', /* U+9D25 */
+   0xe9f1, /* U+9D26 */
+      '?', /* U+9D27 */
+   0x8a9b, /* U+9D28 */
+      '?', /* U+9D29 */
+   0xe9f0, /* U+9D2A */
+   0x8eb0, /* U+9D2B */
+   0x89a7, /* U+9D2C */
+      '?', /* U+9D2D */
+      '?', /* U+9D2E */
+      '?', /* U+9D2F */
+      '?', /* U+9D30 */
+      '?', /* U+9D31 */
+      '?', /* U+9D32 */
+      '?', /* U+9D33 */
+      '?', /* U+9D34 */
+      '?', /* U+9D35 */
+      '?', /* U+9D36 */
+      '?', /* U+9D37 */
+      '?', /* U+9D38 */
+      '?', /* U+9D39 */
+      '?', /* U+9D3A */
+   0x8d83, /* U+9D3B */
+      '?', /* U+9D3C */
+      '?', /* U+9D3D */
+   0xe9fa, /* U+9D3E */
+   0xe9f9, /* U+9D3F */
+      '?', /* U+9D40 */
+   0xe9f8, /* U+9D41 */
+      '?', /* U+9D42 */
+      '?', /* U+9D43 */
+   0xe9f5, /* U+9D44 */
+      '?', /* U+9D45 */
+   0xe9fb, /* U+9D46 */
+      '?', /* U+9D47 */
+   0xe9fc, /* U+9D48 */
+      '?', /* U+9D49 */
+      '?', /* U+9D4A */
+      '?', /* U+9D4B */
+      '?', /* U+9D4C */
+      '?', /* U+9D4D */
+      '?', /* U+9D4E */
+      '?', /* U+9D4F */
+   0xea44, /* U+9D50 */
+   0xea43, /* U+9D51 */
+      '?', /* U+9D52 */
+      '?', /* U+9D53 */
+      '?', /* U+9D54 */
+      '?', /* U+9D55 */
+      '?', /* U+9D56 */
+      '?', /* U+9D57 */
+      '?', /* U+9D58 */
+   0xea45, /* U+9D59 */
+      '?', /* U+9D5A */
+      '?', /* U+9D5B */
+   0x894c, /* U+9D5C */
+   0xea40, /* U+9D5D */
+   0xea41, /* U+9D5E */
+      '?', /* U+9D5F */
+   0x8d94, /* U+9D60 */
+   0x96b7, /* U+9D61 */
+      '?', /* U+9D62 */
+      '?', /* U+9D63 */
+   0xea42, /* U+9D64 */
+      '?', /* U+9D65 */
+      '?', /* U+9D66 */
+      '?', /* U+9D67 */
+      '?', /* U+9D68 */
+      '?', /* U+9D69 */
+      '?', /* U+9D6A */
+   0xfc48, /* U+9D6B */
+   0x9651, /* U+9D6C */
+      '?', /* U+9D6D */
+      '?', /* U+9D6E */
+   0xea4a, /* U+9D6F */
+   0xfc47, /* U+9D70 */
+      '?', /* U+9D71 */
+   0xea46, /* U+9D72 */
+      '?', /* U+9D73 */
+      '?', /* U+9D74 */
+      '?', /* U+9D75 */
+      '?', /* U+9D76 */
+      '?', /* U+9D77 */
+      '?', /* U+9D78 */
+      '?', /* U+9D79 */
+   0xea4b, /* U+9D7A */
+      '?', /* U+9D7B */
+      '?', /* U+9D7C */
+      '?', /* U+9D7D */
+      '?', /* U+9D7E */
+      '?', /* U+9D7F */
+      '?', /* U+9D80 */
+      '?', /* U+9D81 */
+      '?', /* U+9D82 */
+      '?', /* U+9D83 */
+      '?', /* U+9D84 */
+      '?', /* U+9D85 */
+      '?', /* U+9D86 */
+   0xea48, /* U+9D87 */
+      '?', /* U+9D88 */
+   0xea47, /* U+9D89 */
+      '?', /* U+9D8A */
+      '?', /* U+9D8B */
+      '?', /* U+9D8C */
+      '?', /* U+9D8D */
+      '?', /* U+9D8E */
+   0x8c7b, /* U+9D8F */
+      '?', /* U+9D90 */
+      '?', /* U+9D91 */
+      '?', /* U+9D92 */
+      '?', /* U+9D93 */
+      '?', /* U+9D94 */
+      '?', /* U+9D95 */
+      '?', /* U+9D96 */
+      '?', /* U+9D97 */
+      '?', /* U+9D98 */
+      '?', /* U+9D99 */
+   0xea4c, /* U+9D9A */
+      '?', /* U+9D9B */
+      '?', /* U+9D9C */
+      '?', /* U+9D9D */
+      '?', /* U+9D9E */
+      '?', /* U+9D9F */
+      '?', /* U+9DA0 */
+      '?', /* U+9DA1 */
+      '?', /* U+9DA2 */
+      '?', /* U+9DA3 */
+   0xea4d, /* U+9DA4 */
+      '?', /* U+9DA5 */
+      '?', /* U+9DA6 */
+      '?', /* U+9DA7 */
+      '?', /* U+9DA8 */
+   0xea4e, /* U+9DA9 */
+      '?', /* U+9DAA */
+   0xea49, /* U+9DAB */
+      '?', /* U+9DAC */
+      '?', /* U+9DAD */
+      '?', /* U+9DAE */
+   0xe9f2, /* U+9DAF */
+      '?', /* U+9DB0 */
+      '?', /* U+9DB1 */
+   0xea4f, /* U+9DB2 */
+      '?', /* U+9DB3 */
+   0x92df, /* U+9DB4 */
+      '?', /* U+9DB5 */
+      '?', /* U+9DB6 */
+      '?', /* U+9DB7 */
+   0xea53, /* U+9DB8 */
+      '?', /* U+9DB9 */
+   0xea54, /* U+9DBA */
+   0xea52, /* U+9DBB */
+      '?', /* U+9DBC */
+      '?', /* U+9DBD */
+      '?', /* U+9DBE */
+      '?', /* U+9DBF */
+      '?', /* U+9DC0 */
+   0xea51, /* U+9DC1 */
+   0xea57, /* U+9DC2 */
+      '?', /* U+9DC3 */
+   0xea50, /* U+9DC4 */
+      '?', /* U+9DC5 */
+   0xea55, /* U+9DC6 */
+      '?', /* U+9DC7 */
+      '?', /* U+9DC8 */
+      '?', /* U+9DC9 */
+      '?', /* U+9DCA */
+      '?', /* U+9DCB */
+      '?', /* U+9DCC */
+      '?', /* U+9DCD */
+      '?', /* U+9DCE */
+   0xea56, /* U+9DCF */
+      '?', /* U+9DD0 */
+      '?', /* U+9DD1 */
+      '?', /* U+9DD2 */
+   0xea59, /* U+9DD3 */
+      '?', /* U+9DD4 */
+      '?', /* U+9DD5 */
+      '?', /* U+9DD6 */
+      '?', /* U+9DD7 */
+      '?', /* U+9DD8 */
+   0xea58, /* U+9DD9 */
+      '?', /* U+9DDA */
+      '?', /* U+9DDB */
+      '?', /* U+9DDC */
+      '?', /* U+9DDD */
+      '?', /* U+9DDE */
+      '?', /* U+9DDF */
+      '?', /* U+9DE0 */
+      '?', /* U+9DE1 */
+      '?', /* U+9DE2 */
+      '?', /* U+9DE3 */
+      '?', /* U+9DE4 */
+      '?', /* U+9DE5 */
+   0xea5b, /* U+9DE6 */
+      '?', /* U+9DE7 */
+      '?', /* U+9DE8 */
+      '?', /* U+9DE9 */
+      '?', /* U+9DEA */
+      '?', /* U+9DEB */
+      '?', /* U+9DEC */
+   0xea5c, /* U+9DED */
+      '?', /* U+9DEE */
+   0xea5d, /* U+9DEF */
+      '?', /* U+9DF0 */
+      '?', /* U+9DF1 */
+   0x9868, /* U+9DF2 */
+      '?', /* U+9DF3 */
+      '?', /* U+9DF4 */
+      '?', /* U+9DF5 */
+      '?', /* U+9DF6 */
+      '?', /* U+9DF7 */
+   0xea5a, /* U+9DF8 */
+   0x91e9, /* U+9DF9 */
+   0x8deb, /* U+9DFA */
+      '?', /* U+9DFB */
+      '?', /* U+9DFC */
+   0xea5e, /* U+9DFD */
+      '?', /* U+9DFE */
+      '?', /* U+9DFF */
+      '?', /* U+9E00 */
+      '?', /* U+9E01 */
+      '?', /* U+9E02 */
+      '?', /* U+9E03 */
+      '?', /* U+9E04 */
+      '?', /* U+9E05 */
+      '?', /* U+9E06 */
+      '?', /* U+9E07 */
+      '?', /* U+9E08 */
+      '?', /* U+9E09 */
+      '?', /* U+9E0A */
+      '?', /* U+9E0B */
+      '?', /* U+9E0C */
+      '?', /* U+9E0D */
+      '?', /* U+9E0E */
+      '?', /* U+9E0F */
+      '?', /* U+9E10 */
+      '?', /* U+9E11 */
+      '?', /* U+9E12 */
+      '?', /* U+9E13 */
+      '?', /* U+9E14 */
+      '?', /* U+9E15 */
+      '?', /* U+9E16 */
+      '?', /* U+9E17 */
+      '?', /* U+9E18 */
+   0xfc4a, /* U+9E19 */
+   0xea5f, /* U+9E1A */
+   0xea60, /* U+9E1B */
+      '?', /* U+9E1C */
+      '?', /* U+9E1D */
+   0xea61, /* U+9E1E */
+      '?', /* U+9E1F */
+      '?', /* U+9E20 */
+      '?', /* U+9E21 */
+      '?', /* U+9E22 */
+      '?', /* U+9E23 */
+      '?', /* U+9E24 */
+      '?', /* U+9E25 */
+      '?', /* U+9E26 */
+      '?', /* U+9E27 */
+      '?', /* U+9E28 */
+      '?', /* U+9E29 */
+      '?', /* U+9E2A */
+      '?', /* U+9E2B */
+      '?', /* U+9E2C */
+      '?', /* U+9E2D */
+      '?', /* U+9E2E */
+      '?', /* U+9E2F */
+      '?', /* U+9E30 */
+      '?', /* U+9E31 */
+      '?', /* U+9E32 */
+      '?', /* U+9E33 */
+      '?', /* U+9E34 */
+      '?', /* U+9E35 */
+      '?', /* U+9E36 */
+      '?', /* U+9E37 */
+      '?', /* U+9E38 */
+      '?', /* U+9E39 */
+      '?', /* U+9E3A */
+      '?', /* U+9E3B */
+      '?', /* U+9E3C */
+      '?', /* U+9E3D */
+      '?', /* U+9E3E */
+      '?', /* U+9E3F */
+      '?', /* U+9E40 */
+      '?', /* U+9E41 */
+      '?', /* U+9E42 */
+      '?', /* U+9E43 */
+      '?', /* U+9E44 */
+      '?', /* U+9E45 */
+      '?', /* U+9E46 */
+      '?', /* U+9E47 */
+      '?', /* U+9E48 */
+      '?', /* U+9E49 */
+      '?', /* U+9E4A */
+      '?', /* U+9E4B */
+      '?', /* U+9E4C */
+      '?', /* U+9E4D */
+      '?', /* U+9E4E */
+      '?', /* U+9E4F */
+      '?', /* U+9E50 */
+      '?', /* U+9E51 */
+      '?', /* U+9E52 */
+      '?', /* U+9E53 */
+      '?', /* U+9E54 */
+      '?', /* U+9E55 */
+      '?', /* U+9E56 */
+      '?', /* U+9E57 */
+      '?', /* U+9E58 */
+      '?', /* U+9E59 */
+      '?', /* U+9E5A */
+      '?', /* U+9E5B */
+      '?', /* U+9E5C */
+      '?', /* U+9E5D */
+      '?', /* U+9E5E */
+      '?', /* U+9E5F */
+      '?', /* U+9E60 */
+      '?', /* U+9E61 */
+      '?', /* U+9E62 */
+      '?', /* U+9E63 */
+      '?', /* U+9E64 */
+      '?', /* U+9E65 */
+      '?', /* U+9E66 */
+      '?', /* U+9E67 */
+      '?', /* U+9E68 */
+      '?', /* U+9E69 */
+      '?', /* U+9E6A */
+      '?', /* U+9E6B */
+      '?', /* U+9E6C */
+      '?', /* U+9E6D */
+      '?', /* U+9E6E */
+      '?', /* U+9E6F */
+      '?', /* U+9E70 */
+      '?', /* U+9E71 */
+      '?', /* U+9E72 */
+      '?', /* U+9E73 */
+      '?', /* U+9E74 */
+   0xea62, /* U+9E75 */
+      '?', /* U+9E76 */
+      '?', /* U+9E77 */
+   0x8cb2, /* U+9E78 */
+   0xea63, /* U+9E79 */
+      '?', /* U+9E7A */
+      '?', /* U+9E7B */
+      '?', /* U+9E7C */
+   0xea64, /* U+9E7D */
+      '?', /* U+9E7E */
+   0x8ead, /* U+9E7F */
+      '?', /* U+9E80 */
+   0xea65, /* U+9E81 */
+      '?', /* U+9E82 */
+      '?', /* U+9E83 */
+      '?', /* U+9E84 */
+      '?', /* U+9E85 */
+      '?', /* U+9E86 */
+      '?', /* U+9E87 */
+   0xea66, /* U+9E88 */
+      '?', /* U+9E89 */
+      '?', /* U+9E8A */
+   0xea67, /* U+9E8B */
+   0xea68, /* U+9E8C */
+      '?', /* U+9E8D */
+      '?', /* U+9E8E */
+      '?', /* U+9E8F */
+      '?', /* U+9E90 */
+   0xea6b, /* U+9E91 */
+   0xea69, /* U+9E92 */
+   0x985b, /* U+9E93 */
+      '?', /* U+9E94 */
+   0xea6a, /* U+9E95 */
+      '?', /* U+9E96 */
+   0x97ed, /* U+9E97 */
+      '?', /* U+9E98 */
+      '?', /* U+9E99 */
+      '?', /* U+9E9A */
+      '?', /* U+9E9B */
+      '?', /* U+9E9C */
+   0xea6c, /* U+9E9D */
+      '?', /* U+9E9E */
+   0x97d9, /* U+9E9F */
+      '?', /* U+9EA0 */
+      '?', /* U+9EA1 */
+      '?', /* U+9EA2 */
+      '?', /* U+9EA3 */
+      '?', /* U+9EA4 */
+   0xea6d, /* U+9EA5 */
+   0x949e, /* U+9EA6 */
+      '?', /* U+9EA7 */
+      '?', /* U+9EA8 */
+   0xea6e, /* U+9EA9 */
+   0xea70, /* U+9EAA */
+      '?', /* U+9EAB */
+      '?', /* U+9EAC */
+   0xea71, /* U+9EAD */
+      '?', /* U+9EAE */
+      '?', /* U+9EAF */
+      '?', /* U+9EB0 */
+      '?', /* U+9EB1 */
+      '?', /* U+9EB2 */
+      '?', /* U+9EB3 */
+      '?', /* U+9EB4 */
+      '?', /* U+9EB5 */
+      '?', /* U+9EB6 */
+      '?', /* U+9EB7 */
+   0xea6f, /* U+9EB8 */
+   0x8d8d, /* U+9EB9 */
+   0x96cb, /* U+9EBA */
+   0x9683, /* U+9EBB */
+   0x9bf5, /* U+9EBC */
+      '?', /* U+9EBD */
+   0x9f80, /* U+9EBE */
+   0x969b, /* U+9EBF */
+      '?', /* U+9EC0 */
+      '?', /* U+9EC1 */
+      '?', /* U+9EC2 */
+      '?', /* U+9EC3 */
+   0x89a9, /* U+9EC4 */
+      '?', /* U+9EC5 */
+      '?', /* U+9EC6 */
+      '?', /* U+9EC7 */
+      '?', /* U+9EC8 */
+      '?', /* U+9EC9 */
+      '?', /* U+9ECA */
+      '?', /* U+9ECB */
+   0xea73, /* U+9ECC */
+   0x8b6f, /* U+9ECD */
+   0xea74, /* U+9ECE */
+   0xea75, /* U+9ECF */
+   0xea76, /* U+9ED0 */
+   0xfc4b, /* U+9ED1 */
+   0x8d95, /* U+9ED2 */
+      '?', /* U+9ED3 */
+   0xea77, /* U+9ED4 */
+      '?', /* U+9ED5 */
+      '?', /* U+9ED6 */
+      '?', /* U+9ED7 */
+   0xe0d2, /* U+9ED8 */
+   0x96d9, /* U+9ED9 */
+      '?', /* U+9EDA */
+   0x91e1, /* U+9EDB */
+   0xea78, /* U+9EDC */
+   0xea7a, /* U+9EDD */
+   0xea79, /* U+9EDE */
+      '?', /* U+9EDF */
+   0xea7b, /* U+9EE0 */
+      '?', /* U+9EE1 */
+      '?', /* U+9EE2 */
+      '?', /* U+9EE3 */
+      '?', /* U+9EE4 */
+   0xea7c, /* U+9EE5 */
+      '?', /* U+9EE6 */
+      '?', /* U+9EE7 */
+   0xea7d, /* U+9EE8 */
+      '?', /* U+9EE9 */
+      '?', /* U+9EEA */
+      '?', /* U+9EEB */
+      '?', /* U+9EEC */
+      '?', /* U+9EED */
+      '?', /* U+9EEE */
+   0xea7e, /* U+9EEF */
+      '?', /* U+9EF0 */
+      '?', /* U+9EF1 */
+      '?', /* U+9EF2 */
+      '?', /* U+9EF3 */
+   0xea80, /* U+9EF4 */
+      '?', /* U+9EF5 */
+   0xea81, /* U+9EF6 */
+   0xea82, /* U+9EF7 */
+      '?', /* U+9EF8 */
+   0xea83, /* U+9EF9 */
+      '?', /* U+9EFA */
+   0xea84, /* U+9EFB */
+   0xea85, /* U+9EFC */
+   0xea86, /* U+9EFD */
+      '?', /* U+9EFE */
+      '?', /* U+9EFF */
+      '?', /* U+9F00 */
+      '?', /* U+9F01 */
+      '?', /* U+9F02 */
+      '?', /* U+9F03 */
+      '?', /* U+9F04 */
+      '?', /* U+9F05 */
+      '?', /* U+9F06 */
+   0xea87, /* U+9F07 */
+   0xea88, /* U+9F08 */
+      '?', /* U+9F09 */
+      '?', /* U+9F0A */
+      '?', /* U+9F0B */
+      '?', /* U+9F0C */
+      '?', /* U+9F0D */
+   0x9343, /* U+9F0E */
+      '?', /* U+9F0F */
+      '?', /* U+9F10 */
+      '?', /* U+9F11 */
+      '?', /* U+9F12 */
+   0x8cdb, /* U+9F13 */
+      '?', /* U+9F14 */
+   0xea8a, /* U+9F15 */
+      '?', /* U+9F16 */
+      '?', /* U+9F17 */
+      '?', /* U+9F18 */
+      '?', /* U+9F19 */
+      '?', /* U+9F1A */
+      '?', /* U+9F1B */
+      '?', /* U+9F1C */
+      '?', /* U+9F1D */
+      '?', /* U+9F1E */
+      '?', /* U+9F1F */
+   0x916c, /* U+9F20 */
+   0xea8b, /* U+9F21 */
+      '?', /* U+9F22 */
+      '?', /* U+9F23 */
+      '?', /* U+9F24 */
+      '?', /* U+9F25 */
+      '?', /* U+9F26 */
+      '?', /* U+9F27 */
+      '?', /* U+9F28 */
+      '?', /* U+9F29 */
+      '?', /* U+9F2A */
+      '?', /* U+9F2B */
+   0xea8c, /* U+9F2C */
+      '?', /* U+9F2D */
+      '?', /* U+9F2E */
+      '?', /* U+9F2F */
+      '?', /* U+9F30 */
+      '?', /* U+9F31 */
+      '?', /* U+9F32 */
+      '?', /* U+9F33 */
+      '?', /* U+9F34 */
+      '?', /* U+9F35 */
+      '?', /* U+9F36 */
+      '?', /* U+9F37 */
+      '?', /* U+9F38 */
+      '?', /* U+9F39 */
+      '?', /* U+9F3A */
+   0x9540, /* U+9F3B */
+      '?', /* U+9F3C */
+      '?', /* U+9F3D */
+   0xea8d, /* U+9F3E */
+      '?', /* U+9F3F */
+      '?', /* U+9F40 */
+      '?', /* U+9F41 */
+      '?', /* U+9F42 */
+      '?', /* U+9F43 */
+      '?', /* U+9F44 */
+      '?', /* U+9F45 */
+      '?', /* U+9F46 */
+      '?', /* U+9F47 */
+      '?', /* U+9F48 */
+      '?', /* U+9F49 */
+   0xea8e, /* U+9F4A */
+   0xe256, /* U+9F4B */
+      '?', /* U+9F4C */
+      '?', /* U+9F4D */
+   0xe6d8, /* U+9F4E */
+   0xe8eb, /* U+9F4F */
+      '?', /* U+9F50 */
+      '?', /* U+9F51 */
+   0xea8f, /* U+9F52 */
+      '?', /* U+9F53 */
+   0xea90, /* U+9F54 */
+      '?', /* U+9F55 */
+      '?', /* U+9F56 */
+      '?', /* U+9F57 */
+      '?', /* U+9F58 */
+      '?', /* U+9F59 */
+      '?', /* U+9F5A */
+      '?', /* U+9F5B */
+      '?', /* U+9F5C */
+      '?', /* U+9F5D */
+      '?', /* U+9F5E */
+   0xea92, /* U+9F5F */
+   0xea93, /* U+9F60 */
+   0xea94, /* U+9F61 */
+   0x97ee, /* U+9F62 */
+   0xea91, /* U+9F63 */
+      '?', /* U+9F64 */
+      '?', /* U+9F65 */
+   0xea95, /* U+9F66 */
+   0xea96, /* U+9F67 */
+      '?', /* U+9F68 */
+      '?', /* U+9F69 */
+   0xea98, /* U+9F6A */
+      '?', /* U+9F6B */
+   0xea97, /* U+9F6C */
+      '?', /* U+9F6D */
+      '?', /* U+9F6E */
+      '?', /* U+9F6F */
+      '?', /* U+9F70 */
+      '?', /* U+9F71 */
+   0xea9a, /* U+9F72 */
+      '?', /* U+9F73 */
+      '?', /* U+9F74 */
+      '?', /* U+9F75 */
+   0xea9b, /* U+9F76 */
+   0xea99, /* U+9F77 */
+      '?', /* U+9F78 */
+      '?', /* U+9F79 */
+      '?', /* U+9F7A */
+      '?', /* U+9F7B */
+      '?', /* U+9F7C */
+      '?', /* U+9F7D */
+      '?', /* U+9F7E */
+      '?', /* U+9F7F */
+      '?', /* U+9F80 */
+      '?', /* U+9F81 */
+      '?', /* U+9F82 */
+      '?', /* U+9F83 */
+      '?', /* U+9F84 */
+      '?', /* U+9F85 */
+      '?', /* U+9F86 */
+      '?', /* U+9F87 */
+      '?', /* U+9F88 */
+      '?', /* U+9F89 */
+      '?', /* U+9F8A */
+      '?', /* U+9F8B */
+      '?', /* U+9F8C */
+   0x97b4, /* U+9F8D */
+      '?', /* U+9F8E */
+      '?', /* U+9F8F */
+      '?', /* U+9F90 */
+      '?', /* U+9F91 */
+      '?', /* U+9F92 */
+      '?', /* U+9F93 */
+      '?', /* U+9F94 */
+   0xea9c, /* U+9F95 */
+      '?', /* U+9F96 */
+      '?', /* U+9F97 */
+      '?', /* U+9F98 */
+      '?', /* U+9F99 */
+      '?', /* U+9F9A */
+      '?', /* U+9F9B */
+   0xea9d, /* U+9F9C */
+   0xe273, /* U+9F9D */
+      '?', /* U+9F9E */
+      '?', /* U+9F9F */
+   0xea9e, /* U+9FA0 */
+      '?', /* U+9FA1 */
+      '?', /* U+9FA2 */
+      '?', /* U+9FA3 */
+      '?', /* U+9FA4 */
+      '?', /* U+9FA5 */
+      '?', /* U+9FA6 */
+      '?', /* U+9FA7 */
+      '?', /* U+9FA8 */
+      '?', /* U+9FA9 */
+      '?', /* U+9FAA */
+      '?', /* U+9FAB */
+      '?', /* U+9FAC */
+      '?', /* U+9FAD */
+      '?', /* U+9FAE */
+      '?', /* U+9FAF */
+      '?', /* U+9FB0 */
+      '?', /* U+9FB1 */
+      '?', /* U+9FB2 */
+      '?', /* U+9FB3 */
+      '?', /* U+9FB4 */
+      '?', /* U+9FB5 */
+      '?', /* U+9FB6 */
+      '?', /* U+9FB7 */
+      '?', /* U+9FB8 */
+      '?', /* U+9FB9 */
+      '?', /* U+9FBA */
+      '?', /* U+9FBB */
+      '?', /* U+9FBC */
+      '?', /* U+9FBD */
+      '?', /* U+9FBE */
+      '?', /* U+9FBF */
+      '?', /* U+9FC0 */
+      '?', /* U+9FC1 */
+      '?', /* U+9FC2 */
+      '?', /* U+9FC3 */
+      '?', /* U+9FC4 */
+      '?', /* U+9FC5 */
+      '?', /* U+9FC6 */
+      '?', /* U+9FC7 */
+      '?', /* U+9FC8 */
+      '?', /* U+9FC9 */
+      '?', /* U+9FCA */
+      '?', /* U+9FCB */
+      '?', /* U+9FCC */
+      '?', /* U+9FCD */
+      '?', /* U+9FCE */
+      '?', /* U+9FCF */
+      '?', /* U+9FD0 */
+      '?', /* U+9FD1 */
+      '?', /* U+9FD2 */
+      '?', /* U+9FD3 */
+      '?', /* U+9FD4 */
+      '?', /* U+9FD5 */
+      '?', /* U+9FD6 */
+      '?', /* U+9FD7 */
+      '?', /* U+9FD8 */
+      '?', /* U+9FD9 */
+      '?', /* U+9FDA */
+      '?', /* U+9FDB */
+      '?', /* U+9FDC */
+      '?', /* U+9FDD */
+      '?', /* U+9FDE */
+      '?', /* U+9FDF */
+      '?', /* U+9FE0 */
+      '?', /* U+9FE1 */
+      '?', /* U+9FE2 */
+      '?', /* U+9FE3 */
+      '?', /* U+9FE4 */
+      '?', /* U+9FE5 */
+      '?', /* U+9FE6 */
+      '?', /* U+9FE7 */
+      '?', /* U+9FE8 */
+      '?', /* U+9FE9 */
+      '?', /* U+9FEA */
+      '?', /* U+9FEB */
+      '?', /* U+9FEC */
+      '?', /* U+9FED */
+      '?', /* U+9FEE */
+      '?', /* U+9FEF */
+      '?', /* U+9FF0 */
+      '?', /* U+9FF1 */
+      '?', /* U+9FF2 */
+      '?', /* U+9FF3 */
+      '?', /* U+9FF4 */
+      '?', /* U+9FF5 */
+      '?', /* U+9FF6 */
+      '?', /* U+9FF7 */
+      '?', /* U+9FF8 */
+      '?', /* U+9FF9 */
+      '?', /* U+9FFA */
+      '?', /* U+9FFB */
+      '?', /* U+9FFC */
+      '?', /* U+9FFD */
+      '?', /* U+9FFE */
+      '?', /* U+9FFF */
+      '?', /* U+A000 */
+      '?', /* U+A001 */
+      '?', /* U+A002 */
+      '?', /* U+A003 */
+      '?', /* U+A004 */
+      '?', /* U+A005 */
+      '?', /* U+A006 */
+      '?', /* U+A007 */
+      '?', /* U+A008 */
+      '?', /* U+A009 */
+      '?', /* U+A00A */
+      '?', /* U+A00B */
+      '?', /* U+A00C */
+      '?', /* U+A00D */
+      '?', /* U+A00E */
+      '?', /* U+A00F */
+      '?', /* U+A010 */
+      '?', /* U+A011 */
+      '?', /* U+A012 */
+      '?', /* U+A013 */
+      '?', /* U+A014 */
+      '?', /* U+A015 */
+      '?', /* U+A016 */
+      '?', /* U+A017 */
+      '?', /* U+A018 */
+      '?', /* U+A019 */
+      '?', /* U+A01A */
+      '?', /* U+A01B */
+      '?', /* U+A01C */
+      '?', /* U+A01D */
+      '?', /* U+A01E */
+      '?', /* U+A01F */
+      '?', /* U+A020 */
+      '?', /* U+A021 */
+      '?', /* U+A022 */
+      '?', /* U+A023 */
+      '?', /* U+A024 */
+      '?', /* U+A025 */
+      '?', /* U+A026 */
+      '?', /* U+A027 */
+      '?', /* U+A028 */
+      '?', /* U+A029 */
+      '?', /* U+A02A */
+      '?', /* U+A02B */
+      '?', /* U+A02C */
+      '?', /* U+A02D */
+      '?', /* U+A02E */
+      '?', /* U+A02F */
+      '?', /* U+A030 */
+      '?', /* U+A031 */
+      '?', /* U+A032 */
+      '?', /* U+A033 */
+      '?', /* U+A034 */
+      '?', /* U+A035 */
+      '?', /* U+A036 */
+      '?', /* U+A037 */
+      '?', /* U+A038 */
+      '?', /* U+A039 */
+      '?', /* U+A03A */
+      '?', /* U+A03B */
+      '?', /* U+A03C */
+      '?', /* U+A03D */
+      '?', /* U+A03E */
+      '?', /* U+A03F */
+      '?', /* U+A040 */
+      '?', /* U+A041 */
+      '?', /* U+A042 */
+      '?', /* U+A043 */
+      '?', /* U+A044 */
+      '?', /* U+A045 */
+      '?', /* U+A046 */
+      '?', /* U+A047 */
+      '?', /* U+A048 */
+      '?', /* U+A049 */
+      '?', /* U+A04A */
+      '?', /* U+A04B */
+      '?', /* U+A04C */
+      '?', /* U+A04D */
+      '?', /* U+A04E */
+      '?', /* U+A04F */
+      '?', /* U+A050 */
+      '?', /* U+A051 */
+      '?', /* U+A052 */
+      '?', /* U+A053 */
+      '?', /* U+A054 */
+      '?', /* U+A055 */
+      '?', /* U+A056 */
+      '?', /* U+A057 */
+      '?', /* U+A058 */
+      '?', /* U+A059 */
+      '?', /* U+A05A */
+      '?', /* U+A05B */
+      '?', /* U+A05C */
+      '?', /* U+A05D */
+      '?', /* U+A05E */
+      '?', /* U+A05F */
+      '?', /* U+A060 */
+      '?', /* U+A061 */
+      '?', /* U+A062 */
+      '?', /* U+A063 */
+      '?', /* U+A064 */
+      '?', /* U+A065 */
+      '?', /* U+A066 */
+      '?', /* U+A067 */
+      '?', /* U+A068 */
+      '?', /* U+A069 */
+      '?', /* U+A06A */
+      '?', /* U+A06B */
+      '?', /* U+A06C */
+      '?', /* U+A06D */
+      '?', /* U+A06E */
+      '?', /* U+A06F */
+      '?', /* U+A070 */
+      '?', /* U+A071 */
+      '?', /* U+A072 */
+      '?', /* U+A073 */
+      '?', /* U+A074 */
+      '?', /* U+A075 */
+      '?', /* U+A076 */
+      '?', /* U+A077 */
+      '?', /* U+A078 */
+      '?', /* U+A079 */
+      '?', /* U+A07A */
+      '?', /* U+A07B */
+      '?', /* U+A07C */
+      '?', /* U+A07D */
+      '?', /* U+A07E */
+      '?', /* U+A07F */
+      '?', /* U+A080 */
+      '?', /* U+A081 */
+      '?', /* U+A082 */
+      '?', /* U+A083 */
+      '?', /* U+A084 */
+      '?', /* U+A085 */
+      '?', /* U+A086 */
+      '?', /* U+A087 */
+      '?', /* U+A088 */
+      '?', /* U+A089 */
+      '?', /* U+A08A */
+      '?', /* U+A08B */
+      '?', /* U+A08C */
+      '?', /* U+A08D */
+      '?', /* U+A08E */
+      '?', /* U+A08F */
+      '?', /* U+A090 */
+      '?', /* U+A091 */
+      '?', /* U+A092 */
+      '?', /* U+A093 */
+      '?', /* U+A094 */
+      '?', /* U+A095 */
+      '?', /* U+A096 */
+      '?', /* U+A097 */
+      '?', /* U+A098 */
+      '?', /* U+A099 */
+      '?', /* U+A09A */
+      '?', /* U+A09B */
+      '?', /* U+A09C */
+      '?', /* U+A09D */
+      '?', /* U+A09E */
+      '?', /* U+A09F */
+      '?', /* U+A0A0 */
+      '?', /* U+A0A1 */
+      '?', /* U+A0A2 */
+      '?', /* U+A0A3 */
+      '?', /* U+A0A4 */
+      '?', /* U+A0A5 */
+      '?', /* U+A0A6 */
+      '?', /* U+A0A7 */
+      '?', /* U+A0A8 */
+      '?', /* U+A0A9 */
+      '?', /* U+A0AA */
+      '?', /* U+A0AB */
+      '?', /* U+A0AC */
+      '?', /* U+A0AD */
+      '?', /* U+A0AE */
+      '?', /* U+A0AF */
+      '?', /* U+A0B0 */
+      '?', /* U+A0B1 */
+      '?', /* U+A0B2 */
+      '?', /* U+A0B3 */
+      '?', /* U+A0B4 */
+      '?', /* U+A0B5 */
+      '?', /* U+A0B6 */
+      '?', /* U+A0B7 */
+      '?', /* U+A0B8 */
+      '?', /* U+A0B9 */
+      '?', /* U+A0BA */
+      '?', /* U+A0BB */
+      '?', /* U+A0BC */
+      '?', /* U+A0BD */
+      '?', /* U+A0BE */
+      '?', /* U+A0BF */
+      '?', /* U+A0C0 */
+      '?', /* U+A0C1 */
+      '?', /* U+A0C2 */
+      '?', /* U+A0C3 */
+      '?', /* U+A0C4 */
+      '?', /* U+A0C5 */
+      '?', /* U+A0C6 */
+      '?', /* U+A0C7 */
+      '?', /* U+A0C8 */
+      '?', /* U+A0C9 */
+      '?', /* U+A0CA */
+      '?', /* U+A0CB */
+      '?', /* U+A0CC */
+      '?', /* U+A0CD */
+      '?', /* U+A0CE */
+      '?', /* U+A0CF */
+      '?', /* U+A0D0 */
+      '?', /* U+A0D1 */
+      '?', /* U+A0D2 */
+      '?', /* U+A0D3 */
+      '?', /* U+A0D4 */
+      '?', /* U+A0D5 */
+      '?', /* U+A0D6 */
+      '?', /* U+A0D7 */
+      '?', /* U+A0D8 */
+      '?', /* U+A0D9 */
+      '?', /* U+A0DA */
+      '?', /* U+A0DB */
+      '?', /* U+A0DC */
+      '?', /* U+A0DD */
+      '?', /* U+A0DE */
+      '?', /* U+A0DF */
+      '?', /* U+A0E0 */
+      '?', /* U+A0E1 */
+      '?', /* U+A0E2 */
+      '?', /* U+A0E3 */
+      '?', /* U+A0E4 */
+      '?', /* U+A0E5 */
+      '?', /* U+A0E6 */
+      '?', /* U+A0E7 */
+      '?', /* U+A0E8 */
+      '?', /* U+A0E9 */
+      '?', /* U+A0EA */
+      '?', /* U+A0EB */
+      '?', /* U+A0EC */
+      '?', /* U+A0ED */
+      '?', /* U+A0EE */
+      '?', /* U+A0EF */
+      '?', /* U+A0F0 */
+      '?', /* U+A0F1 */
+      '?', /* U+A0F2 */
+      '?', /* U+A0F3 */
+      '?', /* U+A0F4 */
+      '?', /* U+A0F5 */
+      '?', /* U+A0F6 */
+      '?', /* U+A0F7 */
+      '?', /* U+A0F8 */
+      '?', /* U+A0F9 */
+      '?', /* U+A0FA */
+      '?', /* U+A0FB */
+      '?', /* U+A0FC */
+      '?', /* U+A0FD */
+      '?', /* U+A0FE */
+      '?', /* U+A0FF */
+      '?', /* U+A100 */
+      '?', /* U+A101 */
+      '?', /* U+A102 */
+      '?', /* U+A103 */
+      '?', /* U+A104 */
+      '?', /* U+A105 */
+      '?', /* U+A106 */
+      '?', /* U+A107 */
+      '?', /* U+A108 */
+      '?', /* U+A109 */
+      '?', /* U+A10A */
+      '?', /* U+A10B */
+      '?', /* U+A10C */
+      '?', /* U+A10D */
+      '?', /* U+A10E */
+      '?', /* U+A10F */
+      '?', /* U+A110 */
+      '?', /* U+A111 */
+      '?', /* U+A112 */
+      '?', /* U+A113 */
+      '?', /* U+A114 */
+      '?', /* U+A115 */
+      '?', /* U+A116 */
+      '?', /* U+A117 */
+      '?', /* U+A118 */
+      '?', /* U+A119 */
+      '?', /* U+A11A */
+      '?', /* U+A11B */
+      '?', /* U+A11C */
+      '?', /* U+A11D */
+      '?', /* U+A11E */
+      '?', /* U+A11F */
+      '?', /* U+A120 */
+      '?', /* U+A121 */
+      '?', /* U+A122 */
+      '?', /* U+A123 */
+      '?', /* U+A124 */
+      '?', /* U+A125 */
+      '?', /* U+A126 */
+      '?', /* U+A127 */
+      '?', /* U+A128 */
+      '?', /* U+A129 */
+      '?', /* U+A12A */
+      '?', /* U+A12B */
+      '?', /* U+A12C */
+      '?', /* U+A12D */
+      '?', /* U+A12E */
+      '?', /* U+A12F */
+      '?', /* U+A130 */
+      '?', /* U+A131 */
+      '?', /* U+A132 */
+      '?', /* U+A133 */
+      '?', /* U+A134 */
+      '?', /* U+A135 */
+      '?', /* U+A136 */
+      '?', /* U+A137 */
+      '?', /* U+A138 */
+      '?', /* U+A139 */
+      '?', /* U+A13A */
+      '?', /* U+A13B */
+      '?', /* U+A13C */
+      '?', /* U+A13D */
+      '?', /* U+A13E */
+      '?', /* U+A13F */
+      '?', /* U+A140 */
+      '?', /* U+A141 */
+      '?', /* U+A142 */
+      '?', /* U+A143 */
+      '?', /* U+A144 */
+      '?', /* U+A145 */
+      '?', /* U+A146 */
+      '?', /* U+A147 */
+      '?', /* U+A148 */
+      '?', /* U+A149 */
+      '?', /* U+A14A */
+      '?', /* U+A14B */
+      '?', /* U+A14C */
+      '?', /* U+A14D */
+      '?', /* U+A14E */
+      '?', /* U+A14F */
+      '?', /* U+A150 */
+      '?', /* U+A151 */
+      '?', /* U+A152 */
+      '?', /* U+A153 */
+      '?', /* U+A154 */
+      '?', /* U+A155 */
+      '?', /* U+A156 */
+      '?', /* U+A157 */
+      '?', /* U+A158 */
+      '?', /* U+A159 */
+      '?', /* U+A15A */
+      '?', /* U+A15B */
+      '?', /* U+A15C */
+      '?', /* U+A15D */
+      '?', /* U+A15E */
+      '?', /* U+A15F */
+      '?', /* U+A160 */
+      '?', /* U+A161 */
+      '?', /* U+A162 */
+      '?', /* U+A163 */
+      '?', /* U+A164 */
+      '?', /* U+A165 */
+      '?', /* U+A166 */
+      '?', /* U+A167 */
+      '?', /* U+A168 */
+      '?', /* U+A169 */
+      '?', /* U+A16A */
+      '?', /* U+A16B */
+      '?', /* U+A16C */
+      '?', /* U+A16D */
+      '?', /* U+A16E */
+      '?', /* U+A16F */
+      '?', /* U+A170 */
+      '?', /* U+A171 */
+      '?', /* U+A172 */
+      '?', /* U+A173 */
+      '?', /* U+A174 */
+      '?', /* U+A175 */
+      '?', /* U+A176 */
+      '?', /* U+A177 */
+      '?', /* U+A178 */
+      '?', /* U+A179 */
+      '?', /* U+A17A */
+      '?', /* U+A17B */
+      '?', /* U+A17C */
+      '?', /* U+A17D */
+      '?', /* U+A17E */
+      '?', /* U+A17F */
+      '?', /* U+A180 */
+      '?', /* U+A181 */
+      '?', /* U+A182 */
+      '?', /* U+A183 */
+      '?', /* U+A184 */
+      '?', /* U+A185 */
+      '?', /* U+A186 */
+      '?', /* U+A187 */
+      '?', /* U+A188 */
+      '?', /* U+A189 */
+      '?', /* U+A18A */
+      '?', /* U+A18B */
+      '?', /* U+A18C */
+      '?', /* U+A18D */
+      '?', /* U+A18E */
+      '?', /* U+A18F */
+      '?', /* U+A190 */
+      '?', /* U+A191 */
+      '?', /* U+A192 */
+      '?', /* U+A193 */
+      '?', /* U+A194 */
+      '?', /* U+A195 */
+      '?', /* U+A196 */
+      '?', /* U+A197 */
+      '?', /* U+A198 */
+      '?', /* U+A199 */
+      '?', /* U+A19A */
+      '?', /* U+A19B */
+      '?', /* U+A19C */
+      '?', /* U+A19D */
+      '?', /* U+A19E */
+      '?', /* U+A19F */
+      '?', /* U+A1A0 */
+      '?', /* U+A1A1 */
+      '?', /* U+A1A2 */
+      '?', /* U+A1A3 */
+      '?', /* U+A1A4 */
+      '?', /* U+A1A5 */
+      '?', /* U+A1A6 */
+      '?', /* U+A1A7 */
+      '?', /* U+A1A8 */
+      '?', /* U+A1A9 */
+      '?', /* U+A1AA */
+      '?', /* U+A1AB */
+      '?', /* U+A1AC */
+      '?', /* U+A1AD */
+      '?', /* U+A1AE */
+      '?', /* U+A1AF */
+      '?', /* U+A1B0 */
+      '?', /* U+A1B1 */
+      '?', /* U+A1B2 */
+      '?', /* U+A1B3 */
+      '?', /* U+A1B4 */
+      '?', /* U+A1B5 */
+      '?', /* U+A1B6 */
+      '?', /* U+A1B7 */
+      '?', /* U+A1B8 */
+      '?', /* U+A1B9 */
+      '?', /* U+A1BA */
+      '?', /* U+A1BB */
+      '?', /* U+A1BC */
+      '?', /* U+A1BD */
+      '?', /* U+A1BE */
+      '?', /* U+A1BF */
+      '?', /* U+A1C0 */
+      '?', /* U+A1C1 */
+      '?', /* U+A1C2 */
+      '?', /* U+A1C3 */
+      '?', /* U+A1C4 */
+      '?', /* U+A1C5 */
+      '?', /* U+A1C6 */
+      '?', /* U+A1C7 */
+      '?', /* U+A1C8 */
+      '?', /* U+A1C9 */
+      '?', /* U+A1CA */
+      '?', /* U+A1CB */
+      '?', /* U+A1CC */
+      '?', /* U+A1CD */
+      '?', /* U+A1CE */
+      '?', /* U+A1CF */
+      '?', /* U+A1D0 */
+      '?', /* U+A1D1 */
+      '?', /* U+A1D2 */
+      '?', /* U+A1D3 */
+      '?', /* U+A1D4 */
+      '?', /* U+A1D5 */
+      '?', /* U+A1D6 */
+      '?', /* U+A1D7 */
+      '?', /* U+A1D8 */
+      '?', /* U+A1D9 */
+      '?', /* U+A1DA */
+      '?', /* U+A1DB */
+      '?', /* U+A1DC */
+      '?', /* U+A1DD */
+      '?', /* U+A1DE */
+      '?', /* U+A1DF */
+      '?', /* U+A1E0 */
+      '?', /* U+A1E1 */
+      '?', /* U+A1E2 */
+      '?', /* U+A1E3 */
+      '?', /* U+A1E4 */
+      '?', /* U+A1E5 */
+      '?', /* U+A1E6 */
+      '?', /* U+A1E7 */
+      '?', /* U+A1E8 */
+      '?', /* U+A1E9 */
+      '?', /* U+A1EA */
+      '?', /* U+A1EB */
+      '?', /* U+A1EC */
+      '?', /* U+A1ED */
+      '?', /* U+A1EE */
+      '?', /* U+A1EF */
+      '?', /* U+A1F0 */
+      '?', /* U+A1F1 */
+      '?', /* U+A1F2 */
+      '?', /* U+A1F3 */
+      '?', /* U+A1F4 */
+      '?', /* U+A1F5 */
+      '?', /* U+A1F6 */
+      '?', /* U+A1F7 */
+      '?', /* U+A1F8 */
+      '?', /* U+A1F9 */
+      '?', /* U+A1FA */
+      '?', /* U+A1FB */
+      '?', /* U+A1FC */
+      '?', /* U+A1FD */
+      '?', /* U+A1FE */
+      '?', /* U+A1FF */
+      '?', /* U+A200 */
+      '?', /* U+A201 */
+      '?', /* U+A202 */
+      '?', /* U+A203 */
+      '?', /* U+A204 */
+      '?', /* U+A205 */
+      '?', /* U+A206 */
+      '?', /* U+A207 */
+      '?', /* U+A208 */
+      '?', /* U+A209 */
+      '?', /* U+A20A */
+      '?', /* U+A20B */
+      '?', /* U+A20C */
+      '?', /* U+A20D */
+      '?', /* U+A20E */
+      '?', /* U+A20F */
+      '?', /* U+A210 */
+      '?', /* U+A211 */
+      '?', /* U+A212 */
+      '?', /* U+A213 */
+      '?', /* U+A214 */
+      '?', /* U+A215 */
+      '?', /* U+A216 */
+      '?', /* U+A217 */
+      '?', /* U+A218 */
+      '?', /* U+A219 */
+      '?', /* U+A21A */
+      '?', /* U+A21B */
+      '?', /* U+A21C */
+      '?', /* U+A21D */
+      '?', /* U+A21E */
+      '?', /* U+A21F */
+      '?', /* U+A220 */
+      '?', /* U+A221 */
+      '?', /* U+A222 */
+      '?', /* U+A223 */
+      '?', /* U+A224 */
+      '?', /* U+A225 */
+      '?', /* U+A226 */
+      '?', /* U+A227 */
+      '?', /* U+A228 */
+      '?', /* U+A229 */
+      '?', /* U+A22A */
+      '?', /* U+A22B */
+      '?', /* U+A22C */
+      '?', /* U+A22D */
+      '?', /* U+A22E */
+      '?', /* U+A22F */
+      '?', /* U+A230 */
+      '?', /* U+A231 */
+      '?', /* U+A232 */
+      '?', /* U+A233 */
+      '?', /* U+A234 */
+      '?', /* U+A235 */
+      '?', /* U+A236 */
+      '?', /* U+A237 */
+      '?', /* U+A238 */
+      '?', /* U+A239 */
+      '?', /* U+A23A */
+      '?', /* U+A23B */
+      '?', /* U+A23C */
+      '?', /* U+A23D */
+      '?', /* U+A23E */
+      '?', /* U+A23F */
+      '?', /* U+A240 */
+      '?', /* U+A241 */
+      '?', /* U+A242 */
+      '?', /* U+A243 */
+      '?', /* U+A244 */
+      '?', /* U+A245 */
+      '?', /* U+A246 */
+      '?', /* U+A247 */
+      '?', /* U+A248 */
+      '?', /* U+A249 */
+      '?', /* U+A24A */
+      '?', /* U+A24B */
+      '?', /* U+A24C */
+      '?', /* U+A24D */
+      '?', /* U+A24E */
+      '?', /* U+A24F */
+      '?', /* U+A250 */
+      '?', /* U+A251 */
+      '?', /* U+A252 */
+      '?', /* U+A253 */
+      '?', /* U+A254 */
+      '?', /* U+A255 */
+      '?', /* U+A256 */
+      '?', /* U+A257 */
+      '?', /* U+A258 */
+      '?', /* U+A259 */
+      '?', /* U+A25A */
+      '?', /* U+A25B */
+      '?', /* U+A25C */
+      '?', /* U+A25D */
+      '?', /* U+A25E */
+      '?', /* U+A25F */
+      '?', /* U+A260 */
+      '?', /* U+A261 */
+      '?', /* U+A262 */
+      '?', /* U+A263 */
+      '?', /* U+A264 */
+      '?', /* U+A265 */
+      '?', /* U+A266 */
+      '?', /* U+A267 */
+      '?', /* U+A268 */
+      '?', /* U+A269 */
+      '?', /* U+A26A */
+      '?', /* U+A26B */
+      '?', /* U+A26C */
+      '?', /* U+A26D */
+      '?', /* U+A26E */
+      '?', /* U+A26F */
+      '?', /* U+A270 */
+      '?', /* U+A271 */
+      '?', /* U+A272 */
+      '?', /* U+A273 */
+      '?', /* U+A274 */
+      '?', /* U+A275 */
+      '?', /* U+A276 */
+      '?', /* U+A277 */
+      '?', /* U+A278 */
+      '?', /* U+A279 */
+      '?', /* U+A27A */
+      '?', /* U+A27B */
+      '?', /* U+A27C */
+      '?', /* U+A27D */
+      '?', /* U+A27E */
+      '?', /* U+A27F */
+      '?', /* U+A280 */
+      '?', /* U+A281 */
+      '?', /* U+A282 */
+      '?', /* U+A283 */
+      '?', /* U+A284 */
+      '?', /* U+A285 */
+      '?', /* U+A286 */
+      '?', /* U+A287 */
+      '?', /* U+A288 */
+      '?', /* U+A289 */
+      '?', /* U+A28A */
+      '?', /* U+A28B */
+      '?', /* U+A28C */
+      '?', /* U+A28D */
+      '?', /* U+A28E */
+      '?', /* U+A28F */
+      '?', /* U+A290 */
+      '?', /* U+A291 */
+      '?', /* U+A292 */
+      '?', /* U+A293 */
+      '?', /* U+A294 */
+      '?', /* U+A295 */
+      '?', /* U+A296 */
+      '?', /* U+A297 */
+      '?', /* U+A298 */
+      '?', /* U+A299 */
+      '?', /* U+A29A */
+      '?', /* U+A29B */
+      '?', /* U+A29C */
+      '?', /* U+A29D */
+      '?', /* U+A29E */
+      '?', /* U+A29F */
+      '?', /* U+A2A0 */
+      '?', /* U+A2A1 */
+      '?', /* U+A2A2 */
+      '?', /* U+A2A3 */
+      '?', /* U+A2A4 */
+      '?', /* U+A2A5 */
+      '?', /* U+A2A6 */
+      '?', /* U+A2A7 */
+      '?', /* U+A2A8 */
+      '?', /* U+A2A9 */
+      '?', /* U+A2AA */
+      '?', /* U+A2AB */
+      '?', /* U+A2AC */
+      '?', /* U+A2AD */
+      '?', /* U+A2AE */
+      '?', /* U+A2AF */
+      '?', /* U+A2B0 */
+      '?', /* U+A2B1 */
+      '?', /* U+A2B2 */
+      '?', /* U+A2B3 */
+      '?', /* U+A2B4 */
+      '?', /* U+A2B5 */
+      '?', /* U+A2B6 */
+      '?', /* U+A2B7 */
+      '?', /* U+A2B8 */
+      '?', /* U+A2B9 */
+      '?', /* U+A2BA */
+      '?', /* U+A2BB */
+      '?', /* U+A2BC */
+      '?', /* U+A2BD */
+      '?', /* U+A2BE */
+      '?', /* U+A2BF */
+      '?', /* U+A2C0 */
+      '?', /* U+A2C1 */
+      '?', /* U+A2C2 */
+      '?', /* U+A2C3 */
+      '?', /* U+A2C4 */
+      '?', /* U+A2C5 */
+      '?', /* U+A2C6 */
+      '?', /* U+A2C7 */
+      '?', /* U+A2C8 */
+      '?', /* U+A2C9 */
+      '?', /* U+A2CA */
+      '?', /* U+A2CB */
+      '?', /* U+A2CC */
+      '?', /* U+A2CD */
+      '?', /* U+A2CE */
+      '?', /* U+A2CF */
+      '?', /* U+A2D0 */
+      '?', /* U+A2D1 */
+      '?', /* U+A2D2 */
+      '?', /* U+A2D3 */
+      '?', /* U+A2D4 */
+      '?', /* U+A2D5 */
+      '?', /* U+A2D6 */
+      '?', /* U+A2D7 */
+      '?', /* U+A2D8 */
+      '?', /* U+A2D9 */
+      '?', /* U+A2DA */
+      '?', /* U+A2DB */
+      '?', /* U+A2DC */
+      '?', /* U+A2DD */
+      '?', /* U+A2DE */
+      '?', /* U+A2DF */
+      '?', /* U+A2E0 */
+      '?', /* U+A2E1 */
+      '?', /* U+A2E2 */
+      '?', /* U+A2E3 */
+      '?', /* U+A2E4 */
+      '?', /* U+A2E5 */
+      '?', /* U+A2E6 */
+      '?', /* U+A2E7 */
+      '?', /* U+A2E8 */
+      '?', /* U+A2E9 */
+      '?', /* U+A2EA */
+      '?', /* U+A2EB */
+      '?', /* U+A2EC */
+      '?', /* U+A2ED */
+      '?', /* U+A2EE */
+      '?', /* U+A2EF */
+      '?', /* U+A2F0 */
+      '?', /* U+A2F1 */
+      '?', /* U+A2F2 */
+      '?', /* U+A2F3 */
+      '?', /* U+A2F4 */
+      '?', /* U+A2F5 */
+      '?', /* U+A2F6 */
+      '?', /* U+A2F7 */
+      '?', /* U+A2F8 */
+      '?', /* U+A2F9 */
+      '?', /* U+A2FA */
+      '?', /* U+A2FB */
+      '?', /* U+A2FC */
+      '?', /* U+A2FD */
+      '?', /* U+A2FE */
+      '?', /* U+A2FF */
+      '?', /* U+A300 */
+      '?', /* U+A301 */
+      '?', /* U+A302 */
+      '?', /* U+A303 */
+      '?', /* U+A304 */
+      '?', /* U+A305 */
+      '?', /* U+A306 */
+      '?', /* U+A307 */
+      '?', /* U+A308 */
+      '?', /* U+A309 */
+      '?', /* U+A30A */
+      '?', /* U+A30B */
+      '?', /* U+A30C */
+      '?', /* U+A30D */
+      '?', /* U+A30E */
+      '?', /* U+A30F */
+      '?', /* U+A310 */
+      '?', /* U+A311 */
+      '?', /* U+A312 */
+      '?', /* U+A313 */
+      '?', /* U+A314 */
+      '?', /* U+A315 */
+      '?', /* U+A316 */
+      '?', /* U+A317 */
+      '?', /* U+A318 */
+      '?', /* U+A319 */
+      '?', /* U+A31A */
+      '?', /* U+A31B */
+      '?', /* U+A31C */
+      '?', /* U+A31D */
+      '?', /* U+A31E */
+      '?', /* U+A31F */
+      '?', /* U+A320 */
+      '?', /* U+A321 */
+      '?', /* U+A322 */
+      '?', /* U+A323 */
+      '?', /* U+A324 */
+      '?', /* U+A325 */
+      '?', /* U+A326 */
+      '?', /* U+A327 */
+      '?', /* U+A328 */
+      '?', /* U+A329 */
+      '?', /* U+A32A */
+      '?', /* U+A32B */
+      '?', /* U+A32C */
+      '?', /* U+A32D */
+      '?', /* U+A32E */
+      '?', /* U+A32F */
+      '?', /* U+A330 */
+      '?', /* U+A331 */
+      '?', /* U+A332 */
+      '?', /* U+A333 */
+      '?', /* U+A334 */
+      '?', /* U+A335 */
+      '?', /* U+A336 */
+      '?', /* U+A337 */
+      '?', /* U+A338 */
+      '?', /* U+A339 */
+      '?', /* U+A33A */
+      '?', /* U+A33B */
+      '?', /* U+A33C */
+      '?', /* U+A33D */
+      '?', /* U+A33E */
+      '?', /* U+A33F */
+      '?', /* U+A340 */
+      '?', /* U+A341 */
+      '?', /* U+A342 */
+      '?', /* U+A343 */
+      '?', /* U+A344 */
+      '?', /* U+A345 */
+      '?', /* U+A346 */
+      '?', /* U+A347 */
+      '?', /* U+A348 */
+      '?', /* U+A349 */
+      '?', /* U+A34A */
+      '?', /* U+A34B */
+      '?', /* U+A34C */
+      '?', /* U+A34D */
+      '?', /* U+A34E */
+      '?', /* U+A34F */
+      '?', /* U+A350 */
+      '?', /* U+A351 */
+      '?', /* U+A352 */
+      '?', /* U+A353 */
+      '?', /* U+A354 */
+      '?', /* U+A355 */
+      '?', /* U+A356 */
+      '?', /* U+A357 */
+      '?', /* U+A358 */
+      '?', /* U+A359 */
+      '?', /* U+A35A */
+      '?', /* U+A35B */
+      '?', /* U+A35C */
+      '?', /* U+A35D */
+      '?', /* U+A35E */
+      '?', /* U+A35F */
+      '?', /* U+A360 */
+      '?', /* U+A361 */
+      '?', /* U+A362 */
+      '?', /* U+A363 */
+      '?', /* U+A364 */
+      '?', /* U+A365 */
+      '?', /* U+A366 */
+      '?', /* U+A367 */
+      '?', /* U+A368 */
+      '?', /* U+A369 */
+      '?', /* U+A36A */
+      '?', /* U+A36B */
+      '?', /* U+A36C */
+      '?', /* U+A36D */
+      '?', /* U+A36E */
+      '?', /* U+A36F */
+      '?', /* U+A370 */
+      '?', /* U+A371 */
+      '?', /* U+A372 */
+      '?', /* U+A373 */
+      '?', /* U+A374 */
+      '?', /* U+A375 */
+      '?', /* U+A376 */
+      '?', /* U+A377 */
+      '?', /* U+A378 */
+      '?', /* U+A379 */
+      '?', /* U+A37A */
+      '?', /* U+A37B */
+      '?', /* U+A37C */
+      '?', /* U+A37D */
+      '?', /* U+A37E */
+      '?', /* U+A37F */
+      '?', /* U+A380 */
+      '?', /* U+A381 */
+      '?', /* U+A382 */
+      '?', /* U+A383 */
+      '?', /* U+A384 */
+      '?', /* U+A385 */
+      '?', /* U+A386 */
+      '?', /* U+A387 */
+      '?', /* U+A388 */
+      '?', /* U+A389 */
+      '?', /* U+A38A */
+      '?', /* U+A38B */
+      '?', /* U+A38C */
+      '?', /* U+A38D */
+      '?', /* U+A38E */
+      '?', /* U+A38F */
+      '?', /* U+A390 */
+      '?', /* U+A391 */
+      '?', /* U+A392 */
+      '?', /* U+A393 */
+      '?', /* U+A394 */
+      '?', /* U+A395 */
+      '?', /* U+A396 */
+      '?', /* U+A397 */
+      '?', /* U+A398 */
+      '?', /* U+A399 */
+      '?', /* U+A39A */
+      '?', /* U+A39B */
+      '?', /* U+A39C */
+      '?', /* U+A39D */
+      '?', /* U+A39E */
+      '?', /* U+A39F */
+      '?', /* U+A3A0 */
+      '?', /* U+A3A1 */
+      '?', /* U+A3A2 */
+      '?', /* U+A3A3 */
+      '?', /* U+A3A4 */
+      '?', /* U+A3A5 */
+      '?', /* U+A3A6 */
+      '?', /* U+A3A7 */
+      '?', /* U+A3A8 */
+      '?', /* U+A3A9 */
+      '?', /* U+A3AA */
+      '?', /* U+A3AB */
+      '?', /* U+A3AC */
+      '?', /* U+A3AD */
+      '?', /* U+A3AE */
+      '?', /* U+A3AF */
+      '?', /* U+A3B0 */
+      '?', /* U+A3B1 */
+      '?', /* U+A3B2 */
+      '?', /* U+A3B3 */
+      '?', /* U+A3B4 */
+      '?', /* U+A3B5 */
+      '?', /* U+A3B6 */
+      '?', /* U+A3B7 */
+      '?', /* U+A3B8 */
+      '?', /* U+A3B9 */
+      '?', /* U+A3BA */
+      '?', /* U+A3BB */
+      '?', /* U+A3BC */
+      '?', /* U+A3BD */
+      '?', /* U+A3BE */
+      '?', /* U+A3BF */
+      '?', /* U+A3C0 */
+      '?', /* U+A3C1 */
+      '?', /* U+A3C2 */
+      '?', /* U+A3C3 */
+      '?', /* U+A3C4 */
+      '?', /* U+A3C5 */
+      '?', /* U+A3C6 */
+      '?', /* U+A3C7 */
+      '?', /* U+A3C8 */
+      '?', /* U+A3C9 */
+      '?', /* U+A3CA */
+      '?', /* U+A3CB */
+      '?', /* U+A3CC */
+      '?', /* U+A3CD */
+      '?', /* U+A3CE */
+      '?', /* U+A3CF */
+      '?', /* U+A3D0 */
+      '?', /* U+A3D1 */
+      '?', /* U+A3D2 */
+      '?', /* U+A3D3 */
+      '?', /* U+A3D4 */
+      '?', /* U+A3D5 */
+      '?', /* U+A3D6 */
+      '?', /* U+A3D7 */
+      '?', /* U+A3D8 */
+      '?', /* U+A3D9 */
+      '?', /* U+A3DA */
+      '?', /* U+A3DB */
+      '?', /* U+A3DC */
+      '?', /* U+A3DD */
+      '?', /* U+A3DE */
+      '?', /* U+A3DF */
+      '?', /* U+A3E0 */
+      '?', /* U+A3E1 */
+      '?', /* U+A3E2 */
+      '?', /* U+A3E3 */
+      '?', /* U+A3E4 */
+      '?', /* U+A3E5 */
+      '?', /* U+A3E6 */
+      '?', /* U+A3E7 */
+      '?', /* U+A3E8 */
+      '?', /* U+A3E9 */
+      '?', /* U+A3EA */
+      '?', /* U+A3EB */
+      '?', /* U+A3EC */
+      '?', /* U+A3ED */
+      '?', /* U+A3EE */
+      '?', /* U+A3EF */
+      '?', /* U+A3F0 */
+      '?', /* U+A3F1 */
+      '?', /* U+A3F2 */
+      '?', /* U+A3F3 */
+      '?', /* U+A3F4 */
+      '?', /* U+A3F5 */
+      '?', /* U+A3F6 */
+      '?', /* U+A3F7 */
+      '?', /* U+A3F8 */
+      '?', /* U+A3F9 */
+      '?', /* U+A3FA */
+      '?', /* U+A3FB */
+      '?', /* U+A3FC */
+      '?', /* U+A3FD */
+      '?', /* U+A3FE */
+      '?', /* U+A3FF */
+      '?', /* U+A400 */
+      '?', /* U+A401 */
+      '?', /* U+A402 */
+      '?', /* U+A403 */
+      '?', /* U+A404 */
+      '?', /* U+A405 */
+      '?', /* U+A406 */
+      '?', /* U+A407 */
+      '?', /* U+A408 */
+      '?', /* U+A409 */
+      '?', /* U+A40A */
+      '?', /* U+A40B */
+      '?', /* U+A40C */
+      '?', /* U+A40D */
+      '?', /* U+A40E */
+      '?', /* U+A40F */
+      '?', /* U+A410 */
+      '?', /* U+A411 */
+      '?', /* U+A412 */
+      '?', /* U+A413 */
+      '?', /* U+A414 */
+      '?', /* U+A415 */
+      '?', /* U+A416 */
+      '?', /* U+A417 */
+      '?', /* U+A418 */
+      '?', /* U+A419 */
+      '?', /* U+A41A */
+      '?', /* U+A41B */
+      '?', /* U+A41C */
+      '?', /* U+A41D */
+      '?', /* U+A41E */
+      '?', /* U+A41F */
+      '?', /* U+A420 */
+      '?', /* U+A421 */
+      '?', /* U+A422 */
+      '?', /* U+A423 */
+      '?', /* U+A424 */
+      '?', /* U+A425 */
+      '?', /* U+A426 */
+      '?', /* U+A427 */
+      '?', /* U+A428 */
+      '?', /* U+A429 */
+      '?', /* U+A42A */
+      '?', /* U+A42B */
+      '?', /* U+A42C */
+      '?', /* U+A42D */
+      '?', /* U+A42E */
+      '?', /* U+A42F */
+      '?', /* U+A430 */
+      '?', /* U+A431 */
+      '?', /* U+A432 */
+      '?', /* U+A433 */
+      '?', /* U+A434 */
+      '?', /* U+A435 */
+      '?', /* U+A436 */
+      '?', /* U+A437 */
+      '?', /* U+A438 */
+      '?', /* U+A439 */
+      '?', /* U+A43A */
+      '?', /* U+A43B */
+      '?', /* U+A43C */
+      '?', /* U+A43D */
+      '?', /* U+A43E */
+      '?', /* U+A43F */
+      '?', /* U+A440 */
+      '?', /* U+A441 */
+      '?', /* U+A442 */
+      '?', /* U+A443 */
+      '?', /* U+A444 */
+      '?', /* U+A445 */
+      '?', /* U+A446 */
+      '?', /* U+A447 */
+      '?', /* U+A448 */
+      '?', /* U+A449 */
+      '?', /* U+A44A */
+      '?', /* U+A44B */
+      '?', /* U+A44C */
+      '?', /* U+A44D */
+      '?', /* U+A44E */
+      '?', /* U+A44F */
+      '?', /* U+A450 */
+      '?', /* U+A451 */
+      '?', /* U+A452 */
+      '?', /* U+A453 */
+      '?', /* U+A454 */
+      '?', /* U+A455 */
+      '?', /* U+A456 */
+      '?', /* U+A457 */
+      '?', /* U+A458 */
+      '?', /* U+A459 */
+      '?', /* U+A45A */
+      '?', /* U+A45B */
+      '?', /* U+A45C */
+      '?', /* U+A45D */
+      '?', /* U+A45E */
+      '?', /* U+A45F */
+      '?', /* U+A460 */
+      '?', /* U+A461 */
+      '?', /* U+A462 */
+      '?', /* U+A463 */
+      '?', /* U+A464 */
+      '?', /* U+A465 */
+      '?', /* U+A466 */
+      '?', /* U+A467 */
+      '?', /* U+A468 */
+      '?', /* U+A469 */
+      '?', /* U+A46A */
+      '?', /* U+A46B */
+      '?', /* U+A46C */
+      '?', /* U+A46D */
+      '?', /* U+A46E */
+      '?', /* U+A46F */
+      '?', /* U+A470 */
+      '?', /* U+A471 */
+      '?', /* U+A472 */
+      '?', /* U+A473 */
+      '?', /* U+A474 */
+      '?', /* U+A475 */
+      '?', /* U+A476 */
+      '?', /* U+A477 */
+      '?', /* U+A478 */
+      '?', /* U+A479 */
+      '?', /* U+A47A */
+      '?', /* U+A47B */
+      '?', /* U+A47C */
+      '?', /* U+A47D */
+      '?', /* U+A47E */
+      '?', /* U+A47F */
+      '?', /* U+A480 */
+      '?', /* U+A481 */
+      '?', /* U+A482 */
+      '?', /* U+A483 */
+      '?', /* U+A484 */
+      '?', /* U+A485 */
+      '?', /* U+A486 */
+      '?', /* U+A487 */
+      '?', /* U+A488 */
+      '?', /* U+A489 */
+      '?', /* U+A48A */
+      '?', /* U+A48B */
+      '?', /* U+A48C */
+      '?', /* U+A48D */
+      '?', /* U+A48E */
+      '?', /* U+A48F */
+      '?', /* U+A490 */
+      '?', /* U+A491 */
+      '?', /* U+A492 */
+      '?', /* U+A493 */
+      '?', /* U+A494 */
+      '?', /* U+A495 */
+      '?', /* U+A496 */
+      '?', /* U+A497 */
+      '?', /* U+A498 */
+      '?', /* U+A499 */
+      '?', /* U+A49A */
+      '?', /* U+A49B */
+      '?', /* U+A49C */
+      '?', /* U+A49D */
+      '?', /* U+A49E */
+      '?', /* U+A49F */
+      '?', /* U+A4A0 */
+      '?', /* U+A4A1 */
+      '?', /* U+A4A2 */
+      '?', /* U+A4A3 */
+      '?', /* U+A4A4 */
+      '?', /* U+A4A5 */
+      '?', /* U+A4A6 */
+      '?', /* U+A4A7 */
+      '?', /* U+A4A8 */
+      '?', /* U+A4A9 */
+      '?', /* U+A4AA */
+      '?', /* U+A4AB */
+      '?', /* U+A4AC */
+      '?', /* U+A4AD */
+      '?', /* U+A4AE */
+      '?', /* U+A4AF */
+      '?', /* U+A4B0 */
+      '?', /* U+A4B1 */
+      '?', /* U+A4B2 */
+      '?', /* U+A4B3 */
+      '?', /* U+A4B4 */
+      '?', /* U+A4B5 */
+      '?', /* U+A4B6 */
+      '?', /* U+A4B7 */
+      '?', /* U+A4B8 */
+      '?', /* U+A4B9 */
+      '?', /* U+A4BA */
+      '?', /* U+A4BB */
+      '?', /* U+A4BC */
+      '?', /* U+A4BD */
+      '?', /* U+A4BE */
+      '?', /* U+A4BF */
+      '?', /* U+A4C0 */
+      '?', /* U+A4C1 */
+      '?', /* U+A4C2 */
+      '?', /* U+A4C3 */
+      '?', /* U+A4C4 */
+      '?', /* U+A4C5 */
+      '?', /* U+A4C6 */
+      '?', /* U+A4C7 */
+      '?', /* U+A4C8 */
+      '?', /* U+A4C9 */
+      '?', /* U+A4CA */
+      '?', /* U+A4CB */
+      '?', /* U+A4CC */
+      '?', /* U+A4CD */
+      '?', /* U+A4CE */
+      '?', /* U+A4CF */
+      '?', /* U+A4D0 */
+      '?', /* U+A4D1 */
+      '?', /* U+A4D2 */
+      '?', /* U+A4D3 */
+      '?', /* U+A4D4 */
+      '?', /* U+A4D5 */
+      '?', /* U+A4D6 */
+      '?', /* U+A4D7 */
+      '?', /* U+A4D8 */
+      '?', /* U+A4D9 */
+      '?', /* U+A4DA */
+      '?', /* U+A4DB */
+      '?', /* U+A4DC */
+      '?', /* U+A4DD */
+      '?', /* U+A4DE */
+      '?', /* U+A4DF */
+      '?', /* U+A4E0 */
+      '?', /* U+A4E1 */
+      '?', /* U+A4E2 */
+      '?', /* U+A4E3 */
+      '?', /* U+A4E4 */
+      '?', /* U+A4E5 */
+      '?', /* U+A4E6 */
+      '?', /* U+A4E7 */
+      '?', /* U+A4E8 */
+      '?', /* U+A4E9 */
+      '?', /* U+A4EA */
+      '?', /* U+A4EB */
+      '?', /* U+A4EC */
+      '?', /* U+A4ED */
+      '?', /* U+A4EE */
+      '?', /* U+A4EF */
+      '?', /* U+A4F0 */
+      '?', /* U+A4F1 */
+      '?', /* U+A4F2 */
+      '?', /* U+A4F3 */
+      '?', /* U+A4F4 */
+      '?', /* U+A4F5 */
+      '?', /* U+A4F6 */
+      '?', /* U+A4F7 */
+      '?', /* U+A4F8 */
+      '?', /* U+A4F9 */
+      '?', /* U+A4FA */
+      '?', /* U+A4FB */
+      '?', /* U+A4FC */
+      '?', /* U+A4FD */
+      '?', /* U+A4FE */
+      '?', /* U+A4FF */
+      '?', /* U+A500 */
+      '?', /* U+A501 */
+      '?', /* U+A502 */
+      '?', /* U+A503 */
+      '?', /* U+A504 */
+      '?', /* U+A505 */
+      '?', /* U+A506 */
+      '?', /* U+A507 */
+      '?', /* U+A508 */
+      '?', /* U+A509 */
+      '?', /* U+A50A */
+      '?', /* U+A50B */
+      '?', /* U+A50C */
+      '?', /* U+A50D */
+      '?', /* U+A50E */
+      '?', /* U+A50F */
+      '?', /* U+A510 */
+      '?', /* U+A511 */
+      '?', /* U+A512 */
+      '?', /* U+A513 */
+      '?', /* U+A514 */
+      '?', /* U+A515 */
+      '?', /* U+A516 */
+      '?', /* U+A517 */
+      '?', /* U+A518 */
+      '?', /* U+A519 */
+      '?', /* U+A51A */
+      '?', /* U+A51B */
+      '?', /* U+A51C */
+      '?', /* U+A51D */
+      '?', /* U+A51E */
+      '?', /* U+A51F */
+      '?', /* U+A520 */
+      '?', /* U+A521 */
+      '?', /* U+A522 */
+      '?', /* U+A523 */
+      '?', /* U+A524 */
+      '?', /* U+A525 */
+      '?', /* U+A526 */
+      '?', /* U+A527 */
+      '?', /* U+A528 */
+      '?', /* U+A529 */
+      '?', /* U+A52A */
+      '?', /* U+A52B */
+      '?', /* U+A52C */
+      '?', /* U+A52D */
+      '?', /* U+A52E */
+      '?', /* U+A52F */
+      '?', /* U+A530 */
+      '?', /* U+A531 */
+      '?', /* U+A532 */
+      '?', /* U+A533 */
+      '?', /* U+A534 */
+      '?', /* U+A535 */
+      '?', /* U+A536 */
+      '?', /* U+A537 */
+      '?', /* U+A538 */
+      '?', /* U+A539 */
+      '?', /* U+A53A */
+      '?', /* U+A53B */
+      '?', /* U+A53C */
+      '?', /* U+A53D */
+      '?', /* U+A53E */
+      '?', /* U+A53F */
+      '?', /* U+A540 */
+      '?', /* U+A541 */
+      '?', /* U+A542 */
+      '?', /* U+A543 */
+      '?', /* U+A544 */
+      '?', /* U+A545 */
+      '?', /* U+A546 */
+      '?', /* U+A547 */
+      '?', /* U+A548 */
+      '?', /* U+A549 */
+      '?', /* U+A54A */
+      '?', /* U+A54B */
+      '?', /* U+A54C */
+      '?', /* U+A54D */
+      '?', /* U+A54E */
+      '?', /* U+A54F */
+      '?', /* U+A550 */
+      '?', /* U+A551 */
+      '?', /* U+A552 */
+      '?', /* U+A553 */
+      '?', /* U+A554 */
+      '?', /* U+A555 */
+      '?', /* U+A556 */
+      '?', /* U+A557 */
+      '?', /* U+A558 */
+      '?', /* U+A559 */
+      '?', /* U+A55A */
+      '?', /* U+A55B */
+      '?', /* U+A55C */
+      '?', /* U+A55D */
+      '?', /* U+A55E */
+      '?', /* U+A55F */
+      '?', /* U+A560 */
+      '?', /* U+A561 */
+      '?', /* U+A562 */
+      '?', /* U+A563 */
+      '?', /* U+A564 */
+      '?', /* U+A565 */
+      '?', /* U+A566 */
+      '?', /* U+A567 */
+      '?', /* U+A568 */
+      '?', /* U+A569 */
+      '?', /* U+A56A */
+      '?', /* U+A56B */
+      '?', /* U+A56C */
+      '?', /* U+A56D */
+      '?', /* U+A56E */
+      '?', /* U+A56F */
+      '?', /* U+A570 */
+      '?', /* U+A571 */
+      '?', /* U+A572 */
+      '?', /* U+A573 */
+      '?', /* U+A574 */
+      '?', /* U+A575 */
+      '?', /* U+A576 */
+      '?', /* U+A577 */
+      '?', /* U+A578 */
+      '?', /* U+A579 */
+      '?', /* U+A57A */
+      '?', /* U+A57B */
+      '?', /* U+A57C */
+      '?', /* U+A57D */
+      '?', /* U+A57E */
+      '?', /* U+A57F */
+      '?', /* U+A580 */
+      '?', /* U+A581 */
+      '?', /* U+A582 */
+      '?', /* U+A583 */
+      '?', /* U+A584 */
+      '?', /* U+A585 */
+      '?', /* U+A586 */
+      '?', /* U+A587 */
+      '?', /* U+A588 */
+      '?', /* U+A589 */
+      '?', /* U+A58A */
+      '?', /* U+A58B */
+      '?', /* U+A58C */
+      '?', /* U+A58D */
+      '?', /* U+A58E */
+      '?', /* U+A58F */
+      '?', /* U+A590 */
+      '?', /* U+A591 */
+      '?', /* U+A592 */
+      '?', /* U+A593 */
+      '?', /* U+A594 */
+      '?', /* U+A595 */
+      '?', /* U+A596 */
+      '?', /* U+A597 */
+      '?', /* U+A598 */
+      '?', /* U+A599 */
+      '?', /* U+A59A */
+      '?', /* U+A59B */
+      '?', /* U+A59C */
+      '?', /* U+A59D */
+      '?', /* U+A59E */
+      '?', /* U+A59F */
+      '?', /* U+A5A0 */
+      '?', /* U+A5A1 */
+      '?', /* U+A5A2 */
+      '?', /* U+A5A3 */
+      '?', /* U+A5A4 */
+      '?', /* U+A5A5 */
+      '?', /* U+A5A6 */
+      '?', /* U+A5A7 */
+      '?', /* U+A5A8 */
+      '?', /* U+A5A9 */
+      '?', /* U+A5AA */
+      '?', /* U+A5AB */
+      '?', /* U+A5AC */
+      '?', /* U+A5AD */
+      '?', /* U+A5AE */
+      '?', /* U+A5AF */
+      '?', /* U+A5B0 */
+      '?', /* U+A5B1 */
+      '?', /* U+A5B2 */
+      '?', /* U+A5B3 */
+      '?', /* U+A5B4 */
+      '?', /* U+A5B5 */
+      '?', /* U+A5B6 */
+      '?', /* U+A5B7 */
+      '?', /* U+A5B8 */
+      '?', /* U+A5B9 */
+      '?', /* U+A5BA */
+      '?', /* U+A5BB */
+      '?', /* U+A5BC */
+      '?', /* U+A5BD */
+      '?', /* U+A5BE */
+      '?', /* U+A5BF */
+      '?', /* U+A5C0 */
+      '?', /* U+A5C1 */
+      '?', /* U+A5C2 */
+      '?', /* U+A5C3 */
+      '?', /* U+A5C4 */
+      '?', /* U+A5C5 */
+      '?', /* U+A5C6 */
+      '?', /* U+A5C7 */
+      '?', /* U+A5C8 */
+      '?', /* U+A5C9 */
+      '?', /* U+A5CA */
+      '?', /* U+A5CB */
+      '?', /* U+A5CC */
+      '?', /* U+A5CD */
+      '?', /* U+A5CE */
+      '?', /* U+A5CF */
+      '?', /* U+A5D0 */
+      '?', /* U+A5D1 */
+      '?', /* U+A5D2 */
+      '?', /* U+A5D3 */
+      '?', /* U+A5D4 */
+      '?', /* U+A5D5 */
+      '?', /* U+A5D6 */
+      '?', /* U+A5D7 */
+      '?', /* U+A5D8 */
+      '?', /* U+A5D9 */
+      '?', /* U+A5DA */
+      '?', /* U+A5DB */
+      '?', /* U+A5DC */
+      '?', /* U+A5DD */
+      '?', /* U+A5DE */
+      '?', /* U+A5DF */
+      '?', /* U+A5E0 */
+      '?', /* U+A5E1 */
+      '?', /* U+A5E2 */
+      '?', /* U+A5E3 */
+      '?', /* U+A5E4 */
+      '?', /* U+A5E5 */
+      '?', /* U+A5E6 */
+      '?', /* U+A5E7 */
+      '?', /* U+A5E8 */
+      '?', /* U+A5E9 */
+      '?', /* U+A5EA */
+      '?', /* U+A5EB */
+      '?', /* U+A5EC */
+      '?', /* U+A5ED */
+      '?', /* U+A5EE */
+      '?', /* U+A5EF */
+      '?', /* U+A5F0 */
+      '?', /* U+A5F1 */
+      '?', /* U+A5F2 */
+      '?', /* U+A5F3 */
+      '?', /* U+A5F4 */
+      '?', /* U+A5F5 */
+      '?', /* U+A5F6 */
+      '?', /* U+A5F7 */
+      '?', /* U+A5F8 */
+      '?', /* U+A5F9 */
+      '?', /* U+A5FA */
+      '?', /* U+A5FB */
+      '?', /* U+A5FC */
+      '?', /* U+A5FD */
+      '?', /* U+A5FE */
+      '?', /* U+A5FF */
+      '?', /* U+A600 */
+      '?', /* U+A601 */
+      '?', /* U+A602 */
+      '?', /* U+A603 */
+      '?', /* U+A604 */
+      '?', /* U+A605 */
+      '?', /* U+A606 */
+      '?', /* U+A607 */
+      '?', /* U+A608 */
+      '?', /* U+A609 */
+      '?', /* U+A60A */
+      '?', /* U+A60B */
+      '?', /* U+A60C */
+      '?', /* U+A60D */
+      '?', /* U+A60E */
+      '?', /* U+A60F */
+      '?', /* U+A610 */
+      '?', /* U+A611 */
+      '?', /* U+A612 */
+      '?', /* U+A613 */
+      '?', /* U+A614 */
+      '?', /* U+A615 */
+      '?', /* U+A616 */
+      '?', /* U+A617 */
+      '?', /* U+A618 */
+      '?', /* U+A619 */
+      '?', /* U+A61A */
+      '?', /* U+A61B */
+      '?', /* U+A61C */
+      '?', /* U+A61D */
+      '?', /* U+A61E */
+      '?', /* U+A61F */
+      '?', /* U+A620 */
+      '?', /* U+A621 */
+      '?', /* U+A622 */
+      '?', /* U+A623 */
+      '?', /* U+A624 */
+      '?', /* U+A625 */
+      '?', /* U+A626 */
+      '?', /* U+A627 */
+      '?', /* U+A628 */
+      '?', /* U+A629 */
+      '?', /* U+A62A */
+      '?', /* U+A62B */
+      '?', /* U+A62C */
+      '?', /* U+A62D */
+      '?', /* U+A62E */
+      '?', /* U+A62F */
+      '?', /* U+A630 */
+      '?', /* U+A631 */
+      '?', /* U+A632 */
+      '?', /* U+A633 */
+      '?', /* U+A634 */
+      '?', /* U+A635 */
+      '?', /* U+A636 */
+      '?', /* U+A637 */
+      '?', /* U+A638 */
+      '?', /* U+A639 */
+      '?', /* U+A63A */
+      '?', /* U+A63B */
+      '?', /* U+A63C */
+      '?', /* U+A63D */
+      '?', /* U+A63E */
+      '?', /* U+A63F */
+      '?', /* U+A640 */
+      '?', /* U+A641 */
+      '?', /* U+A642 */
+      '?', /* U+A643 */
+      '?', /* U+A644 */
+      '?', /* U+A645 */
+      '?', /* U+A646 */
+      '?', /* U+A647 */
+      '?', /* U+A648 */
+      '?', /* U+A649 */
+      '?', /* U+A64A */
+      '?', /* U+A64B */
+      '?', /* U+A64C */
+      '?', /* U+A64D */
+      '?', /* U+A64E */
+      '?', /* U+A64F */
+      '?', /* U+A650 */
+      '?', /* U+A651 */
+      '?', /* U+A652 */
+      '?', /* U+A653 */
+      '?', /* U+A654 */
+      '?', /* U+A655 */
+      '?', /* U+A656 */
+      '?', /* U+A657 */
+      '?', /* U+A658 */
+      '?', /* U+A659 */
+      '?', /* U+A65A */
+      '?', /* U+A65B */
+      '?', /* U+A65C */
+      '?', /* U+A65D */
+      '?', /* U+A65E */
+      '?', /* U+A65F */
+      '?', /* U+A660 */
+      '?', /* U+A661 */
+      '?', /* U+A662 */
+      '?', /* U+A663 */
+      '?', /* U+A664 */
+      '?', /* U+A665 */
+      '?', /* U+A666 */
+      '?', /* U+A667 */
+      '?', /* U+A668 */
+      '?', /* U+A669 */
+      '?', /* U+A66A */
+      '?', /* U+A66B */
+      '?', /* U+A66C */
+      '?', /* U+A66D */
+      '?', /* U+A66E */
+      '?', /* U+A66F */
+      '?', /* U+A670 */
+      '?', /* U+A671 */
+      '?', /* U+A672 */
+      '?', /* U+A673 */
+      '?', /* U+A674 */
+      '?', /* U+A675 */
+      '?', /* U+A676 */
+      '?', /* U+A677 */
+      '?', /* U+A678 */
+      '?', /* U+A679 */
+      '?', /* U+A67A */
+      '?', /* U+A67B */
+      '?', /* U+A67C */
+      '?', /* U+A67D */
+      '?', /* U+A67E */
+      '?', /* U+A67F */
+      '?', /* U+A680 */
+      '?', /* U+A681 */
+      '?', /* U+A682 */
+      '?', /* U+A683 */
+      '?', /* U+A684 */
+      '?', /* U+A685 */
+      '?', /* U+A686 */
+      '?', /* U+A687 */
+      '?', /* U+A688 */
+      '?', /* U+A689 */
+      '?', /* U+A68A */
+      '?', /* U+A68B */
+      '?', /* U+A68C */
+      '?', /* U+A68D */
+      '?', /* U+A68E */
+      '?', /* U+A68F */
+      '?', /* U+A690 */
+      '?', /* U+A691 */
+      '?', /* U+A692 */
+      '?', /* U+A693 */
+      '?', /* U+A694 */
+      '?', /* U+A695 */
+      '?', /* U+A696 */
+      '?', /* U+A697 */
+      '?', /* U+A698 */
+      '?', /* U+A699 */
+      '?', /* U+A69A */
+      '?', /* U+A69B */
+      '?', /* U+A69C */
+      '?', /* U+A69D */
+      '?', /* U+A69E */
+      '?', /* U+A69F */
+      '?', /* U+A6A0 */
+      '?', /* U+A6A1 */
+      '?', /* U+A6A2 */
+      '?', /* U+A6A3 */
+      '?', /* U+A6A4 */
+      '?', /* U+A6A5 */
+      '?', /* U+A6A6 */
+      '?', /* U+A6A7 */
+      '?', /* U+A6A8 */
+      '?', /* U+A6A9 */
+      '?', /* U+A6AA */
+      '?', /* U+A6AB */
+      '?', /* U+A6AC */
+      '?', /* U+A6AD */
+      '?', /* U+A6AE */
+      '?', /* U+A6AF */
+      '?', /* U+A6B0 */
+      '?', /* U+A6B1 */
+      '?', /* U+A6B2 */
+      '?', /* U+A6B3 */
+      '?', /* U+A6B4 */
+      '?', /* U+A6B5 */
+      '?', /* U+A6B6 */
+      '?', /* U+A6B7 */
+      '?', /* U+A6B8 */
+      '?', /* U+A6B9 */
+      '?', /* U+A6BA */
+      '?', /* U+A6BB */
+      '?', /* U+A6BC */
+      '?', /* U+A6BD */
+      '?', /* U+A6BE */
+      '?', /* U+A6BF */
+      '?', /* U+A6C0 */
+      '?', /* U+A6C1 */
+      '?', /* U+A6C2 */
+      '?', /* U+A6C3 */
+      '?', /* U+A6C4 */
+      '?', /* U+A6C5 */
+      '?', /* U+A6C6 */
+      '?', /* U+A6C7 */
+      '?', /* U+A6C8 */
+      '?', /* U+A6C9 */
+      '?', /* U+A6CA */
+      '?', /* U+A6CB */
+      '?', /* U+A6CC */
+      '?', /* U+A6CD */
+      '?', /* U+A6CE */
+      '?', /* U+A6CF */
+      '?', /* U+A6D0 */
+      '?', /* U+A6D1 */
+      '?', /* U+A6D2 */
+      '?', /* U+A6D3 */
+      '?', /* U+A6D4 */
+      '?', /* U+A6D5 */
+      '?', /* U+A6D6 */
+      '?', /* U+A6D7 */
+      '?', /* U+A6D8 */
+      '?', /* U+A6D9 */
+      '?', /* U+A6DA */
+      '?', /* U+A6DB */
+      '?', /* U+A6DC */
+      '?', /* U+A6DD */
+      '?', /* U+A6DE */
+      '?', /* U+A6DF */
+      '?', /* U+A6E0 */
+      '?', /* U+A6E1 */
+      '?', /* U+A6E2 */
+      '?', /* U+A6E3 */
+      '?', /* U+A6E4 */
+      '?', /* U+A6E5 */
+      '?', /* U+A6E6 */
+      '?', /* U+A6E7 */
+      '?', /* U+A6E8 */
+      '?', /* U+A6E9 */
+      '?', /* U+A6EA */
+      '?', /* U+A6EB */
+      '?', /* U+A6EC */
+      '?', /* U+A6ED */
+      '?', /* U+A6EE */
+      '?', /* U+A6EF */
+      '?', /* U+A6F0 */
+      '?', /* U+A6F1 */
+      '?', /* U+A6F2 */
+      '?', /* U+A6F3 */
+      '?', /* U+A6F4 */
+      '?', /* U+A6F5 */
+      '?', /* U+A6F6 */
+      '?', /* U+A6F7 */
+      '?', /* U+A6F8 */
+      '?', /* U+A6F9 */
+      '?', /* U+A6FA */
+      '?', /* U+A6FB */
+      '?', /* U+A6FC */
+      '?', /* U+A6FD */
+      '?', /* U+A6FE */
+      '?', /* U+A6FF */
+      '?', /* U+A700 */
+      '?', /* U+A701 */
+      '?', /* U+A702 */
+      '?', /* U+A703 */
+      '?', /* U+A704 */
+      '?', /* U+A705 */
+      '?', /* U+A706 */
+      '?', /* U+A707 */
+      '?', /* U+A708 */
+      '?', /* U+A709 */
+      '?', /* U+A70A */
+      '?', /* U+A70B */
+      '?', /* U+A70C */
+      '?', /* U+A70D */
+      '?', /* U+A70E */
+      '?', /* U+A70F */
+      '?', /* U+A710 */
+      '?', /* U+A711 */
+      '?', /* U+A712 */
+      '?', /* U+A713 */
+      '?', /* U+A714 */
+      '?', /* U+A715 */
+      '?', /* U+A716 */
+      '?', /* U+A717 */
+      '?', /* U+A718 */
+      '?', /* U+A719 */
+      '?', /* U+A71A */
+      '?', /* U+A71B */
+      '?', /* U+A71C */
+      '?', /* U+A71D */
+      '?', /* U+A71E */
+      '?', /* U+A71F */
+      '?', /* U+A720 */
+      '?', /* U+A721 */
+      '?', /* U+A722 */
+      '?', /* U+A723 */
+      '?', /* U+A724 */
+      '?', /* U+A725 */
+      '?', /* U+A726 */
+      '?', /* U+A727 */
+      '?', /* U+A728 */
+      '?', /* U+A729 */
+      '?', /* U+A72A */
+      '?', /* U+A72B */
+      '?', /* U+A72C */
+      '?', /* U+A72D */
+      '?', /* U+A72E */
+      '?', /* U+A72F */
+      '?', /* U+A730 */
+      '?', /* U+A731 */
+      '?', /* U+A732 */
+      '?', /* U+A733 */
+      '?', /* U+A734 */
+      '?', /* U+A735 */
+      '?', /* U+A736 */
+      '?', /* U+A737 */
+      '?', /* U+A738 */
+      '?', /* U+A739 */
+      '?', /* U+A73A */
+      '?', /* U+A73B */
+      '?', /* U+A73C */
+      '?', /* U+A73D */
+      '?', /* U+A73E */
+      '?', /* U+A73F */
+      '?', /* U+A740 */
+      '?', /* U+A741 */
+      '?', /* U+A742 */
+      '?', /* U+A743 */
+      '?', /* U+A744 */
+      '?', /* U+A745 */
+      '?', /* U+A746 */
+      '?', /* U+A747 */
+      '?', /* U+A748 */
+      '?', /* U+A749 */
+      '?', /* U+A74A */
+      '?', /* U+A74B */
+      '?', /* U+A74C */
+      '?', /* U+A74D */
+      '?', /* U+A74E */
+      '?', /* U+A74F */
+      '?', /* U+A750 */
+      '?', /* U+A751 */
+      '?', /* U+A752 */
+      '?', /* U+A753 */
+      '?', /* U+A754 */
+      '?', /* U+A755 */
+      '?', /* U+A756 */
+      '?', /* U+A757 */
+      '?', /* U+A758 */
+      '?', /* U+A759 */
+      '?', /* U+A75A */
+      '?', /* U+A75B */
+      '?', /* U+A75C */
+      '?', /* U+A75D */
+      '?', /* U+A75E */
+      '?', /* U+A75F */
+      '?', /* U+A760 */
+      '?', /* U+A761 */
+      '?', /* U+A762 */
+      '?', /* U+A763 */
+      '?', /* U+A764 */
+      '?', /* U+A765 */
+      '?', /* U+A766 */
+      '?', /* U+A767 */
+      '?', /* U+A768 */
+      '?', /* U+A769 */
+      '?', /* U+A76A */
+      '?', /* U+A76B */
+      '?', /* U+A76C */
+      '?', /* U+A76D */
+      '?', /* U+A76E */
+      '?', /* U+A76F */
+      '?', /* U+A770 */
+      '?', /* U+A771 */
+      '?', /* U+A772 */
+      '?', /* U+A773 */
+      '?', /* U+A774 */
+      '?', /* U+A775 */
+      '?', /* U+A776 */
+      '?', /* U+A777 */
+      '?', /* U+A778 */
+      '?', /* U+A779 */
+      '?', /* U+A77A */
+      '?', /* U+A77B */
+      '?', /* U+A77C */
+      '?', /* U+A77D */
+      '?', /* U+A77E */
+      '?', /* U+A77F */
+      '?', /* U+A780 */
+      '?', /* U+A781 */
+      '?', /* U+A782 */
+      '?', /* U+A783 */
+      '?', /* U+A784 */
+      '?', /* U+A785 */
+      '?', /* U+A786 */
+      '?', /* U+A787 */
+      '?', /* U+A788 */
+      '?', /* U+A789 */
+      '?', /* U+A78A */
+      '?', /* U+A78B */
+      '?', /* U+A78C */
+      '?', /* U+A78D */
+      '?', /* U+A78E */
+      '?', /* U+A78F */
+      '?', /* U+A790 */
+      '?', /* U+A791 */
+      '?', /* U+A792 */
+      '?', /* U+A793 */
+      '?', /* U+A794 */
+      '?', /* U+A795 */
+      '?', /* U+A796 */
+      '?', /* U+A797 */
+      '?', /* U+A798 */
+      '?', /* U+A799 */
+      '?', /* U+A79A */
+      '?', /* U+A79B */
+      '?', /* U+A79C */
+      '?', /* U+A79D */
+      '?', /* U+A79E */
+      '?', /* U+A79F */
+      '?', /* U+A7A0 */
+      '?', /* U+A7A1 */
+      '?', /* U+A7A2 */
+      '?', /* U+A7A3 */
+      '?', /* U+A7A4 */
+      '?', /* U+A7A5 */
+      '?', /* U+A7A6 */
+      '?', /* U+A7A7 */
+      '?', /* U+A7A8 */
+      '?', /* U+A7A9 */
+      '?', /* U+A7AA */
+      '?', /* U+A7AB */
+      '?', /* U+A7AC */
+      '?', /* U+A7AD */
+      '?', /* U+A7AE */
+      '?', /* U+A7AF */
+      '?', /* U+A7B0 */
+      '?', /* U+A7B1 */
+      '?', /* U+A7B2 */
+      '?', /* U+A7B3 */
+      '?', /* U+A7B4 */
+      '?', /* U+A7B5 */
+      '?', /* U+A7B6 */
+      '?', /* U+A7B7 */
+      '?', /* U+A7B8 */
+      '?', /* U+A7B9 */
+      '?', /* U+A7BA */
+      '?', /* U+A7BB */
+      '?', /* U+A7BC */
+      '?', /* U+A7BD */
+      '?', /* U+A7BE */
+      '?', /* U+A7BF */
+      '?', /* U+A7C0 */
+      '?', /* U+A7C1 */
+      '?', /* U+A7C2 */
+      '?', /* U+A7C3 */
+      '?', /* U+A7C4 */
+      '?', /* U+A7C5 */
+      '?', /* U+A7C6 */
+      '?', /* U+A7C7 */
+      '?', /* U+A7C8 */
+      '?', /* U+A7C9 */
+      '?', /* U+A7CA */
+      '?', /* U+A7CB */
+      '?', /* U+A7CC */
+      '?', /* U+A7CD */
+      '?', /* U+A7CE */
+      '?', /* U+A7CF */
+      '?', /* U+A7D0 */
+      '?', /* U+A7D1 */
+      '?', /* U+A7D2 */
+      '?', /* U+A7D3 */
+      '?', /* U+A7D4 */
+      '?', /* U+A7D5 */
+      '?', /* U+A7D6 */
+      '?', /* U+A7D7 */
+      '?', /* U+A7D8 */
+      '?', /* U+A7D9 */
+      '?', /* U+A7DA */
+      '?', /* U+A7DB */
+      '?', /* U+A7DC */
+      '?', /* U+A7DD */
+      '?', /* U+A7DE */
+      '?', /* U+A7DF */
+      '?', /* U+A7E0 */
+      '?', /* U+A7E1 */
+      '?', /* U+A7E2 */
+      '?', /* U+A7E3 */
+      '?', /* U+A7E4 */
+      '?', /* U+A7E5 */
+      '?', /* U+A7E6 */
+      '?', /* U+A7E7 */
+      '?', /* U+A7E8 */
+      '?', /* U+A7E9 */
+      '?', /* U+A7EA */
+      '?', /* U+A7EB */
+      '?', /* U+A7EC */
+      '?', /* U+A7ED */
+      '?', /* U+A7EE */
+      '?', /* U+A7EF */
+      '?', /* U+A7F0 */
+      '?', /* U+A7F1 */
+      '?', /* U+A7F2 */
+      '?', /* U+A7F3 */
+      '?', /* U+A7F4 */
+      '?', /* U+A7F5 */
+      '?', /* U+A7F6 */
+      '?', /* U+A7F7 */
+      '?', /* U+A7F8 */
+      '?', /* U+A7F9 */
+      '?', /* U+A7FA */
+      '?', /* U+A7FB */
+      '?', /* U+A7FC */
+      '?', /* U+A7FD */
+      '?', /* U+A7FE */
+      '?', /* U+A7FF */
+      '?', /* U+A800 */
+      '?', /* U+A801 */
+      '?', /* U+A802 */
+      '?', /* U+A803 */
+      '?', /* U+A804 */
+      '?', /* U+A805 */
+      '?', /* U+A806 */
+      '?', /* U+A807 */
+      '?', /* U+A808 */
+      '?', /* U+A809 */
+      '?', /* U+A80A */
+      '?', /* U+A80B */
+      '?', /* U+A80C */
+      '?', /* U+A80D */
+      '?', /* U+A80E */
+      '?', /* U+A80F */
+      '?', /* U+A810 */
+      '?', /* U+A811 */
+      '?', /* U+A812 */
+      '?', /* U+A813 */
+      '?', /* U+A814 */
+      '?', /* U+A815 */
+      '?', /* U+A816 */
+      '?', /* U+A817 */
+      '?', /* U+A818 */
+      '?', /* U+A819 */
+      '?', /* U+A81A */
+      '?', /* U+A81B */
+      '?', /* U+A81C */
+      '?', /* U+A81D */
+      '?', /* U+A81E */
+      '?', /* U+A81F */
+      '?', /* U+A820 */
+      '?', /* U+A821 */
+      '?', /* U+A822 */
+      '?', /* U+A823 */
+      '?', /* U+A824 */
+      '?', /* U+A825 */
+      '?', /* U+A826 */
+      '?', /* U+A827 */
+      '?', /* U+A828 */
+      '?', /* U+A829 */
+      '?', /* U+A82A */
+      '?', /* U+A82B */
+      '?', /* U+A82C */
+      '?', /* U+A82D */
+      '?', /* U+A82E */
+      '?', /* U+A82F */
+      '?', /* U+A830 */
+      '?', /* U+A831 */
+      '?', /* U+A832 */
+      '?', /* U+A833 */
+      '?', /* U+A834 */
+      '?', /* U+A835 */
+      '?', /* U+A836 */
+      '?', /* U+A837 */
+      '?', /* U+A838 */
+      '?', /* U+A839 */
+      '?', /* U+A83A */
+      '?', /* U+A83B */
+      '?', /* U+A83C */
+      '?', /* U+A83D */
+      '?', /* U+A83E */
+      '?', /* U+A83F */
+      '?', /* U+A840 */
+      '?', /* U+A841 */
+      '?', /* U+A842 */
+      '?', /* U+A843 */
+      '?', /* U+A844 */
+      '?', /* U+A845 */
+      '?', /* U+A846 */
+      '?', /* U+A847 */
+      '?', /* U+A848 */
+      '?', /* U+A849 */
+      '?', /* U+A84A */
+      '?', /* U+A84B */
+      '?', /* U+A84C */
+      '?', /* U+A84D */
+      '?', /* U+A84E */
+      '?', /* U+A84F */
+      '?', /* U+A850 */
+      '?', /* U+A851 */
+      '?', /* U+A852 */
+      '?', /* U+A853 */
+      '?', /* U+A854 */
+      '?', /* U+A855 */
+      '?', /* U+A856 */
+      '?', /* U+A857 */
+      '?', /* U+A858 */
+      '?', /* U+A859 */
+      '?', /* U+A85A */
+      '?', /* U+A85B */
+      '?', /* U+A85C */
+      '?', /* U+A85D */
+      '?', /* U+A85E */
+      '?', /* U+A85F */
+      '?', /* U+A860 */
+      '?', /* U+A861 */
+      '?', /* U+A862 */
+      '?', /* U+A863 */
+      '?', /* U+A864 */
+      '?', /* U+A865 */
+      '?', /* U+A866 */
+      '?', /* U+A867 */
+      '?', /* U+A868 */
+      '?', /* U+A869 */
+      '?', /* U+A86A */
+      '?', /* U+A86B */
+      '?', /* U+A86C */
+      '?', /* U+A86D */
+      '?', /* U+A86E */
+      '?', /* U+A86F */
+      '?', /* U+A870 */
+      '?', /* U+A871 */
+      '?', /* U+A872 */
+      '?', /* U+A873 */
+      '?', /* U+A874 */
+      '?', /* U+A875 */
+      '?', /* U+A876 */
+      '?', /* U+A877 */
+      '?', /* U+A878 */
+      '?', /* U+A879 */
+      '?', /* U+A87A */
+      '?', /* U+A87B */
+      '?', /* U+A87C */
+      '?', /* U+A87D */
+      '?', /* U+A87E */
+      '?', /* U+A87F */
+      '?', /* U+A880 */
+      '?', /* U+A881 */
+      '?', /* U+A882 */
+      '?', /* U+A883 */
+      '?', /* U+A884 */
+      '?', /* U+A885 */
+      '?', /* U+A886 */
+      '?', /* U+A887 */
+      '?', /* U+A888 */
+      '?', /* U+A889 */
+      '?', /* U+A88A */
+      '?', /* U+A88B */
+      '?', /* U+A88C */
+      '?', /* U+A88D */
+      '?', /* U+A88E */
+      '?', /* U+A88F */
+      '?', /* U+A890 */
+      '?', /* U+A891 */
+      '?', /* U+A892 */
+      '?', /* U+A893 */
+      '?', /* U+A894 */
+      '?', /* U+A895 */
+      '?', /* U+A896 */
+      '?', /* U+A897 */
+      '?', /* U+A898 */
+      '?', /* U+A899 */
+      '?', /* U+A89A */
+      '?', /* U+A89B */
+      '?', /* U+A89C */
+      '?', /* U+A89D */
+      '?', /* U+A89E */
+      '?', /* U+A89F */
+      '?', /* U+A8A0 */
+      '?', /* U+A8A1 */
+      '?', /* U+A8A2 */
+      '?', /* U+A8A3 */
+      '?', /* U+A8A4 */
+      '?', /* U+A8A5 */
+      '?', /* U+A8A6 */
+      '?', /* U+A8A7 */
+      '?', /* U+A8A8 */
+      '?', /* U+A8A9 */
+      '?', /* U+A8AA */
+      '?', /* U+A8AB */
+      '?', /* U+A8AC */
+      '?', /* U+A8AD */
+      '?', /* U+A8AE */
+      '?', /* U+A8AF */
+      '?', /* U+A8B0 */
+      '?', /* U+A8B1 */
+      '?', /* U+A8B2 */
+      '?', /* U+A8B3 */
+      '?', /* U+A8B4 */
+      '?', /* U+A8B5 */
+      '?', /* U+A8B6 */
+      '?', /* U+A8B7 */
+      '?', /* U+A8B8 */
+      '?', /* U+A8B9 */
+      '?', /* U+A8BA */
+      '?', /* U+A8BB */
+      '?', /* U+A8BC */
+      '?', /* U+A8BD */
+      '?', /* U+A8BE */
+      '?', /* U+A8BF */
+      '?', /* U+A8C0 */
+      '?', /* U+A8C1 */
+      '?', /* U+A8C2 */
+      '?', /* U+A8C3 */
+      '?', /* U+A8C4 */
+      '?', /* U+A8C5 */
+      '?', /* U+A8C6 */
+      '?', /* U+A8C7 */
+      '?', /* U+A8C8 */
+      '?', /* U+A8C9 */
+      '?', /* U+A8CA */
+      '?', /* U+A8CB */
+      '?', /* U+A8CC */
+      '?', /* U+A8CD */
+      '?', /* U+A8CE */
+      '?', /* U+A8CF */
+      '?', /* U+A8D0 */
+      '?', /* U+A8D1 */
+      '?', /* U+A8D2 */
+      '?', /* U+A8D3 */
+      '?', /* U+A8D4 */
+      '?', /* U+A8D5 */
+      '?', /* U+A8D6 */
+      '?', /* U+A8D7 */
+      '?', /* U+A8D8 */
+      '?', /* U+A8D9 */
+      '?', /* U+A8DA */
+      '?', /* U+A8DB */
+      '?', /* U+A8DC */
+      '?', /* U+A8DD */
+      '?', /* U+A8DE */
+      '?', /* U+A8DF */
+      '?', /* U+A8E0 */
+      '?', /* U+A8E1 */
+      '?', /* U+A8E2 */
+      '?', /* U+A8E3 */
+      '?', /* U+A8E4 */
+      '?', /* U+A8E5 */
+      '?', /* U+A8E6 */
+      '?', /* U+A8E7 */
+      '?', /* U+A8E8 */
+      '?', /* U+A8E9 */
+      '?', /* U+A8EA */
+      '?', /* U+A8EB */
+      '?', /* U+A8EC */
+      '?', /* U+A8ED */
+      '?', /* U+A8EE */
+      '?', /* U+A8EF */
+      '?', /* U+A8F0 */
+      '?', /* U+A8F1 */
+      '?', /* U+A8F2 */
+      '?', /* U+A8F3 */
+      '?', /* U+A8F4 */
+      '?', /* U+A8F5 */
+      '?', /* U+A8F6 */
+      '?', /* U+A8F7 */
+      '?', /* U+A8F8 */
+      '?', /* U+A8F9 */
+      '?', /* U+A8FA */
+      '?', /* U+A8FB */
+      '?', /* U+A8FC */
+      '?', /* U+A8FD */
+      '?', /* U+A8FE */
+      '?', /* U+A8FF */
+      '?', /* U+A900 */
+      '?', /* U+A901 */
+      '?', /* U+A902 */
+      '?', /* U+A903 */
+      '?', /* U+A904 */
+      '?', /* U+A905 */
+      '?', /* U+A906 */
+      '?', /* U+A907 */
+      '?', /* U+A908 */
+      '?', /* U+A909 */
+      '?', /* U+A90A */
+      '?', /* U+A90B */
+      '?', /* U+A90C */
+      '?', /* U+A90D */
+      '?', /* U+A90E */
+      '?', /* U+A90F */
+      '?', /* U+A910 */
+      '?', /* U+A911 */
+      '?', /* U+A912 */
+      '?', /* U+A913 */
+      '?', /* U+A914 */
+      '?', /* U+A915 */
+      '?', /* U+A916 */
+      '?', /* U+A917 */
+      '?', /* U+A918 */
+      '?', /* U+A919 */
+      '?', /* U+A91A */
+      '?', /* U+A91B */
+      '?', /* U+A91C */
+      '?', /* U+A91D */
+      '?', /* U+A91E */
+      '?', /* U+A91F */
+      '?', /* U+A920 */
+      '?', /* U+A921 */
+      '?', /* U+A922 */
+      '?', /* U+A923 */
+      '?', /* U+A924 */
+      '?', /* U+A925 */
+      '?', /* U+A926 */
+      '?', /* U+A927 */
+      '?', /* U+A928 */
+      '?', /* U+A929 */
+      '?', /* U+A92A */
+      '?', /* U+A92B */
+      '?', /* U+A92C */
+      '?', /* U+A92D */
+      '?', /* U+A92E */
+      '?', /* U+A92F */
+      '?', /* U+A930 */
+      '?', /* U+A931 */
+      '?', /* U+A932 */
+      '?', /* U+A933 */
+      '?', /* U+A934 */
+      '?', /* U+A935 */
+      '?', /* U+A936 */
+      '?', /* U+A937 */
+      '?', /* U+A938 */
+      '?', /* U+A939 */
+      '?', /* U+A93A */
+      '?', /* U+A93B */
+      '?', /* U+A93C */
+      '?', /* U+A93D */
+      '?', /* U+A93E */
+      '?', /* U+A93F */
+      '?', /* U+A940 */
+      '?', /* U+A941 */
+      '?', /* U+A942 */
+      '?', /* U+A943 */
+      '?', /* U+A944 */
+      '?', /* U+A945 */
+      '?', /* U+A946 */
+      '?', /* U+A947 */
+      '?', /* U+A948 */
+      '?', /* U+A949 */
+      '?', /* U+A94A */
+      '?', /* U+A94B */
+      '?', /* U+A94C */
+      '?', /* U+A94D */
+      '?', /* U+A94E */
+      '?', /* U+A94F */
+      '?', /* U+A950 */
+      '?', /* U+A951 */
+      '?', /* U+A952 */
+      '?', /* U+A953 */
+      '?', /* U+A954 */
+      '?', /* U+A955 */
+      '?', /* U+A956 */
+      '?', /* U+A957 */
+      '?', /* U+A958 */
+      '?', /* U+A959 */
+      '?', /* U+A95A */
+      '?', /* U+A95B */
+      '?', /* U+A95C */
+      '?', /* U+A95D */
+      '?', /* U+A95E */
+      '?', /* U+A95F */
+      '?', /* U+A960 */
+      '?', /* U+A961 */
+      '?', /* U+A962 */
+      '?', /* U+A963 */
+      '?', /* U+A964 */
+      '?', /* U+A965 */
+      '?', /* U+A966 */
+      '?', /* U+A967 */
+      '?', /* U+A968 */
+      '?', /* U+A969 */
+      '?', /* U+A96A */
+      '?', /* U+A96B */
+      '?', /* U+A96C */
+      '?', /* U+A96D */
+      '?', /* U+A96E */
+      '?', /* U+A96F */
+      '?', /* U+A970 */
+      '?', /* U+A971 */
+      '?', /* U+A972 */
+      '?', /* U+A973 */
+      '?', /* U+A974 */
+      '?', /* U+A975 */
+      '?', /* U+A976 */
+      '?', /* U+A977 */
+      '?', /* U+A978 */
+      '?', /* U+A979 */
+      '?', /* U+A97A */
+      '?', /* U+A97B */
+      '?', /* U+A97C */
+      '?', /* U+A97D */
+      '?', /* U+A97E */
+      '?', /* U+A97F */
+      '?', /* U+A980 */
+      '?', /* U+A981 */
+      '?', /* U+A982 */
+      '?', /* U+A983 */
+      '?', /* U+A984 */
+      '?', /* U+A985 */
+      '?', /* U+A986 */
+      '?', /* U+A987 */
+      '?', /* U+A988 */
+      '?', /* U+A989 */
+      '?', /* U+A98A */
+      '?', /* U+A98B */
+      '?', /* U+A98C */
+      '?', /* U+A98D */
+      '?', /* U+A98E */
+      '?', /* U+A98F */
+      '?', /* U+A990 */
+      '?', /* U+A991 */
+      '?', /* U+A992 */
+      '?', /* U+A993 */
+      '?', /* U+A994 */
+      '?', /* U+A995 */
+      '?', /* U+A996 */
+      '?', /* U+A997 */
+      '?', /* U+A998 */
+      '?', /* U+A999 */
+      '?', /* U+A99A */
+      '?', /* U+A99B */
+      '?', /* U+A99C */
+      '?', /* U+A99D */
+      '?', /* U+A99E */
+      '?', /* U+A99F */
+      '?', /* U+A9A0 */
+      '?', /* U+A9A1 */
+      '?', /* U+A9A2 */
+      '?', /* U+A9A3 */
+      '?', /* U+A9A4 */
+      '?', /* U+A9A5 */
+      '?', /* U+A9A6 */
+      '?', /* U+A9A7 */
+      '?', /* U+A9A8 */
+      '?', /* U+A9A9 */
+      '?', /* U+A9AA */
+      '?', /* U+A9AB */
+      '?', /* U+A9AC */
+      '?', /* U+A9AD */
+      '?', /* U+A9AE */
+      '?', /* U+A9AF */
+      '?', /* U+A9B0 */
+      '?', /* U+A9B1 */
+      '?', /* U+A9B2 */
+      '?', /* U+A9B3 */
+      '?', /* U+A9B4 */
+      '?', /* U+A9B5 */
+      '?', /* U+A9B6 */
+      '?', /* U+A9B7 */
+      '?', /* U+A9B8 */
+      '?', /* U+A9B9 */
+      '?', /* U+A9BA */
+      '?', /* U+A9BB */
+      '?', /* U+A9BC */
+      '?', /* U+A9BD */
+      '?', /* U+A9BE */
+      '?', /* U+A9BF */
+      '?', /* U+A9C0 */
+      '?', /* U+A9C1 */
+      '?', /* U+A9C2 */
+      '?', /* U+A9C3 */
+      '?', /* U+A9C4 */
+      '?', /* U+A9C5 */
+      '?', /* U+A9C6 */
+      '?', /* U+A9C7 */
+      '?', /* U+A9C8 */
+      '?', /* U+A9C9 */
+      '?', /* U+A9CA */
+      '?', /* U+A9CB */
+      '?', /* U+A9CC */
+      '?', /* U+A9CD */
+      '?', /* U+A9CE */
+      '?', /* U+A9CF */
+      '?', /* U+A9D0 */
+      '?', /* U+A9D1 */
+      '?', /* U+A9D2 */
+      '?', /* U+A9D3 */
+      '?', /* U+A9D4 */
+      '?', /* U+A9D5 */
+      '?', /* U+A9D6 */
+      '?', /* U+A9D7 */
+      '?', /* U+A9D8 */
+      '?', /* U+A9D9 */
+      '?', /* U+A9DA */
+      '?', /* U+A9DB */
+      '?', /* U+A9DC */
+      '?', /* U+A9DD */
+      '?', /* U+A9DE */
+      '?', /* U+A9DF */
+      '?', /* U+A9E0 */
+      '?', /* U+A9E1 */
+      '?', /* U+A9E2 */
+      '?', /* U+A9E3 */
+      '?', /* U+A9E4 */
+      '?', /* U+A9E5 */
+      '?', /* U+A9E6 */
+      '?', /* U+A9E7 */
+      '?', /* U+A9E8 */
+      '?', /* U+A9E9 */
+      '?', /* U+A9EA */
+      '?', /* U+A9EB */
+      '?', /* U+A9EC */
+      '?', /* U+A9ED */
+      '?', /* U+A9EE */
+      '?', /* U+A9EF */
+      '?', /* U+A9F0 */
+      '?', /* U+A9F1 */
+      '?', /* U+A9F2 */
+      '?', /* U+A9F3 */
+      '?', /* U+A9F4 */
+      '?', /* U+A9F5 */
+      '?', /* U+A9F6 */
+      '?', /* U+A9F7 */
+      '?', /* U+A9F8 */
+      '?', /* U+A9F9 */
+      '?', /* U+A9FA */
+      '?', /* U+A9FB */
+      '?', /* U+A9FC */
+      '?', /* U+A9FD */
+      '?', /* U+A9FE */
+      '?', /* U+A9FF */
+      '?', /* U+AA00 */
+      '?', /* U+AA01 */
+      '?', /* U+AA02 */
+      '?', /* U+AA03 */
+      '?', /* U+AA04 */
+      '?', /* U+AA05 */
+      '?', /* U+AA06 */
+      '?', /* U+AA07 */
+      '?', /* U+AA08 */
+      '?', /* U+AA09 */
+      '?', /* U+AA0A */
+      '?', /* U+AA0B */
+      '?', /* U+AA0C */
+      '?', /* U+AA0D */
+      '?', /* U+AA0E */
+      '?', /* U+AA0F */
+      '?', /* U+AA10 */
+      '?', /* U+AA11 */
+      '?', /* U+AA12 */
+      '?', /* U+AA13 */
+      '?', /* U+AA14 */
+      '?', /* U+AA15 */
+      '?', /* U+AA16 */
+      '?', /* U+AA17 */
+      '?', /* U+AA18 */
+      '?', /* U+AA19 */
+      '?', /* U+AA1A */
+      '?', /* U+AA1B */
+      '?', /* U+AA1C */
+      '?', /* U+AA1D */
+      '?', /* U+AA1E */
+      '?', /* U+AA1F */
+      '?', /* U+AA20 */
+      '?', /* U+AA21 */
+      '?', /* U+AA22 */
+      '?', /* U+AA23 */
+      '?', /* U+AA24 */
+      '?', /* U+AA25 */
+      '?', /* U+AA26 */
+      '?', /* U+AA27 */
+      '?', /* U+AA28 */
+      '?', /* U+AA29 */
+      '?', /* U+AA2A */
+      '?', /* U+AA2B */
+      '?', /* U+AA2C */
+      '?', /* U+AA2D */
+      '?', /* U+AA2E */
+      '?', /* U+AA2F */
+      '?', /* U+AA30 */
+      '?', /* U+AA31 */
+      '?', /* U+AA32 */
+      '?', /* U+AA33 */
+      '?', /* U+AA34 */
+      '?', /* U+AA35 */
+      '?', /* U+AA36 */
+      '?', /* U+AA37 */
+      '?', /* U+AA38 */
+      '?', /* U+AA39 */
+      '?', /* U+AA3A */
+      '?', /* U+AA3B */
+      '?', /* U+AA3C */
+      '?', /* U+AA3D */
+      '?', /* U+AA3E */
+      '?', /* U+AA3F */
+      '?', /* U+AA40 */
+      '?', /* U+AA41 */
+      '?', /* U+AA42 */
+      '?', /* U+AA43 */
+      '?', /* U+AA44 */
+      '?', /* U+AA45 */
+      '?', /* U+AA46 */
+      '?', /* U+AA47 */
+      '?', /* U+AA48 */
+      '?', /* U+AA49 */
+      '?', /* U+AA4A */
+      '?', /* U+AA4B */
+      '?', /* U+AA4C */
+      '?', /* U+AA4D */
+      '?', /* U+AA4E */
+      '?', /* U+AA4F */
+      '?', /* U+AA50 */
+      '?', /* U+AA51 */
+      '?', /* U+AA52 */
+      '?', /* U+AA53 */
+      '?', /* U+AA54 */
+      '?', /* U+AA55 */
+      '?', /* U+AA56 */
+      '?', /* U+AA57 */
+      '?', /* U+AA58 */
+      '?', /* U+AA59 */
+      '?', /* U+AA5A */
+      '?', /* U+AA5B */
+      '?', /* U+AA5C */
+      '?', /* U+AA5D */
+      '?', /* U+AA5E */
+      '?', /* U+AA5F */
+      '?', /* U+AA60 */
+      '?', /* U+AA61 */
+      '?', /* U+AA62 */
+      '?', /* U+AA63 */
+      '?', /* U+AA64 */
+      '?', /* U+AA65 */
+      '?', /* U+AA66 */
+      '?', /* U+AA67 */
+      '?', /* U+AA68 */
+      '?', /* U+AA69 */
+      '?', /* U+AA6A */
+      '?', /* U+AA6B */
+      '?', /* U+AA6C */
+      '?', /* U+AA6D */
+      '?', /* U+AA6E */
+      '?', /* U+AA6F */
+      '?', /* U+AA70 */
+      '?', /* U+AA71 */
+      '?', /* U+AA72 */
+      '?', /* U+AA73 */
+      '?', /* U+AA74 */
+      '?', /* U+AA75 */
+      '?', /* U+AA76 */
+      '?', /* U+AA77 */
+      '?', /* U+AA78 */
+      '?', /* U+AA79 */
+      '?', /* U+AA7A */
+      '?', /* U+AA7B */
+      '?', /* U+AA7C */
+      '?', /* U+AA7D */
+      '?', /* U+AA7E */
+      '?', /* U+AA7F */
+      '?', /* U+AA80 */
+      '?', /* U+AA81 */
+      '?', /* U+AA82 */
+      '?', /* U+AA83 */
+      '?', /* U+AA84 */
+      '?', /* U+AA85 */
+      '?', /* U+AA86 */
+      '?', /* U+AA87 */
+      '?', /* U+AA88 */
+      '?', /* U+AA89 */
+      '?', /* U+AA8A */
+      '?', /* U+AA8B */
+      '?', /* U+AA8C */
+      '?', /* U+AA8D */
+      '?', /* U+AA8E */
+      '?', /* U+AA8F */
+      '?', /* U+AA90 */
+      '?', /* U+AA91 */
+      '?', /* U+AA92 */
+      '?', /* U+AA93 */
+      '?', /* U+AA94 */
+      '?', /* U+AA95 */
+      '?', /* U+AA96 */
+      '?', /* U+AA97 */
+      '?', /* U+AA98 */
+      '?', /* U+AA99 */
+      '?', /* U+AA9A */
+      '?', /* U+AA9B */
+      '?', /* U+AA9C */
+      '?', /* U+AA9D */
+      '?', /* U+AA9E */
+      '?', /* U+AA9F */
+      '?', /* U+AAA0 */
+      '?', /* U+AAA1 */
+      '?', /* U+AAA2 */
+      '?', /* U+AAA3 */
+      '?', /* U+AAA4 */
+      '?', /* U+AAA5 */
+      '?', /* U+AAA6 */
+      '?', /* U+AAA7 */
+      '?', /* U+AAA8 */
+      '?', /* U+AAA9 */
+      '?', /* U+AAAA */
+      '?', /* U+AAAB */
+      '?', /* U+AAAC */
+      '?', /* U+AAAD */
+      '?', /* U+AAAE */
+      '?', /* U+AAAF */
+      '?', /* U+AAB0 */
+      '?', /* U+AAB1 */
+      '?', /* U+AAB2 */
+      '?', /* U+AAB3 */
+      '?', /* U+AAB4 */
+      '?', /* U+AAB5 */
+      '?', /* U+AAB6 */
+      '?', /* U+AAB7 */
+      '?', /* U+AAB8 */
+      '?', /* U+AAB9 */
+      '?', /* U+AABA */
+      '?', /* U+AABB */
+      '?', /* U+AABC */
+      '?', /* U+AABD */
+      '?', /* U+AABE */
+      '?', /* U+AABF */
+      '?', /* U+AAC0 */
+      '?', /* U+AAC1 */
+      '?', /* U+AAC2 */
+      '?', /* U+AAC3 */
+      '?', /* U+AAC4 */
+      '?', /* U+AAC5 */
+      '?', /* U+AAC6 */
+      '?', /* U+AAC7 */
+      '?', /* U+AAC8 */
+      '?', /* U+AAC9 */
+      '?', /* U+AACA */
+      '?', /* U+AACB */
+      '?', /* U+AACC */
+      '?', /* U+AACD */
+      '?', /* U+AACE */
+      '?', /* U+AACF */
+      '?', /* U+AAD0 */
+      '?', /* U+AAD1 */
+      '?', /* U+AAD2 */
+      '?', /* U+AAD3 */
+      '?', /* U+AAD4 */
+      '?', /* U+AAD5 */
+      '?', /* U+AAD6 */
+      '?', /* U+AAD7 */
+      '?', /* U+AAD8 */
+      '?', /* U+AAD9 */
+      '?', /* U+AADA */
+      '?', /* U+AADB */
+      '?', /* U+AADC */
+      '?', /* U+AADD */
+      '?', /* U+AADE */
+      '?', /* U+AADF */
+      '?', /* U+AAE0 */
+      '?', /* U+AAE1 */
+      '?', /* U+AAE2 */
+      '?', /* U+AAE3 */
+      '?', /* U+AAE4 */
+      '?', /* U+AAE5 */
+      '?', /* U+AAE6 */
+      '?', /* U+AAE7 */
+      '?', /* U+AAE8 */
+      '?', /* U+AAE9 */
+      '?', /* U+AAEA */
+      '?', /* U+AAEB */
+      '?', /* U+AAEC */
+      '?', /* U+AAED */
+      '?', /* U+AAEE */
+      '?', /* U+AAEF */
+      '?', /* U+AAF0 */
+      '?', /* U+AAF1 */
+      '?', /* U+AAF2 */
+      '?', /* U+AAF3 */
+      '?', /* U+AAF4 */
+      '?', /* U+AAF5 */
+      '?', /* U+AAF6 */
+      '?', /* U+AAF7 */
+      '?', /* U+AAF8 */
+      '?', /* U+AAF9 */
+      '?', /* U+AAFA */
+      '?', /* U+AAFB */
+      '?', /* U+AAFC */
+      '?', /* U+AAFD */
+      '?', /* U+AAFE */
+      '?', /* U+AAFF */
+      '?', /* U+AB00 */
+      '?', /* U+AB01 */
+      '?', /* U+AB02 */
+      '?', /* U+AB03 */
+      '?', /* U+AB04 */
+      '?', /* U+AB05 */
+      '?', /* U+AB06 */
+      '?', /* U+AB07 */
+      '?', /* U+AB08 */
+      '?', /* U+AB09 */
+      '?', /* U+AB0A */
+      '?', /* U+AB0B */
+      '?', /* U+AB0C */
+      '?', /* U+AB0D */
+      '?', /* U+AB0E */
+      '?', /* U+AB0F */
+      '?', /* U+AB10 */
+      '?', /* U+AB11 */
+      '?', /* U+AB12 */
+      '?', /* U+AB13 */
+      '?', /* U+AB14 */
+      '?', /* U+AB15 */
+      '?', /* U+AB16 */
+      '?', /* U+AB17 */
+      '?', /* U+AB18 */
+      '?', /* U+AB19 */
+      '?', /* U+AB1A */
+      '?', /* U+AB1B */
+      '?', /* U+AB1C */
+      '?', /* U+AB1D */
+      '?', /* U+AB1E */
+      '?', /* U+AB1F */
+      '?', /* U+AB20 */
+      '?', /* U+AB21 */
+      '?', /* U+AB22 */
+      '?', /* U+AB23 */
+      '?', /* U+AB24 */
+      '?', /* U+AB25 */
+      '?', /* U+AB26 */
+      '?', /* U+AB27 */
+      '?', /* U+AB28 */
+      '?', /* U+AB29 */
+      '?', /* U+AB2A */
+      '?', /* U+AB2B */
+      '?', /* U+AB2C */
+      '?', /* U+AB2D */
+      '?', /* U+AB2E */
+      '?', /* U+AB2F */
+      '?', /* U+AB30 */
+      '?', /* U+AB31 */
+      '?', /* U+AB32 */
+      '?', /* U+AB33 */
+      '?', /* U+AB34 */
+      '?', /* U+AB35 */
+      '?', /* U+AB36 */
+      '?', /* U+AB37 */
+      '?', /* U+AB38 */
+      '?', /* U+AB39 */
+      '?', /* U+AB3A */
+      '?', /* U+AB3B */
+      '?', /* U+AB3C */
+      '?', /* U+AB3D */
+      '?', /* U+AB3E */
+      '?', /* U+AB3F */
+      '?', /* U+AB40 */
+      '?', /* U+AB41 */
+      '?', /* U+AB42 */
+      '?', /* U+AB43 */
+      '?', /* U+AB44 */
+      '?', /* U+AB45 */
+      '?', /* U+AB46 */
+      '?', /* U+AB47 */
+      '?', /* U+AB48 */
+      '?', /* U+AB49 */
+      '?', /* U+AB4A */
+      '?', /* U+AB4B */
+      '?', /* U+AB4C */
+      '?', /* U+AB4D */
+      '?', /* U+AB4E */
+      '?', /* U+AB4F */
+      '?', /* U+AB50 */
+      '?', /* U+AB51 */
+      '?', /* U+AB52 */
+      '?', /* U+AB53 */
+      '?', /* U+AB54 */
+      '?', /* U+AB55 */
+      '?', /* U+AB56 */
+      '?', /* U+AB57 */
+      '?', /* U+AB58 */
+      '?', /* U+AB59 */
+      '?', /* U+AB5A */
+      '?', /* U+AB5B */
+      '?', /* U+AB5C */
+      '?', /* U+AB5D */
+      '?', /* U+AB5E */
+      '?', /* U+AB5F */
+      '?', /* U+AB60 */
+      '?', /* U+AB61 */
+      '?', /* U+AB62 */
+      '?', /* U+AB63 */
+      '?', /* U+AB64 */
+      '?', /* U+AB65 */
+      '?', /* U+AB66 */
+      '?', /* U+AB67 */
+      '?', /* U+AB68 */
+      '?', /* U+AB69 */
+      '?', /* U+AB6A */
+      '?', /* U+AB6B */
+      '?', /* U+AB6C */
+      '?', /* U+AB6D */
+      '?', /* U+AB6E */
+      '?', /* U+AB6F */
+      '?', /* U+AB70 */
+      '?', /* U+AB71 */
+      '?', /* U+AB72 */
+      '?', /* U+AB73 */
+      '?', /* U+AB74 */
+      '?', /* U+AB75 */
+      '?', /* U+AB76 */
+      '?', /* U+AB77 */
+      '?', /* U+AB78 */
+      '?', /* U+AB79 */
+      '?', /* U+AB7A */
+      '?', /* U+AB7B */
+      '?', /* U+AB7C */
+      '?', /* U+AB7D */
+      '?', /* U+AB7E */
+      '?', /* U+AB7F */
+      '?', /* U+AB80 */
+      '?', /* U+AB81 */
+      '?', /* U+AB82 */
+      '?', /* U+AB83 */
+      '?', /* U+AB84 */
+      '?', /* U+AB85 */
+      '?', /* U+AB86 */
+      '?', /* U+AB87 */
+      '?', /* U+AB88 */
+      '?', /* U+AB89 */
+      '?', /* U+AB8A */
+      '?', /* U+AB8B */
+      '?', /* U+AB8C */
+      '?', /* U+AB8D */
+      '?', /* U+AB8E */
+      '?', /* U+AB8F */
+      '?', /* U+AB90 */
+      '?', /* U+AB91 */
+      '?', /* U+AB92 */
+      '?', /* U+AB93 */
+      '?', /* U+AB94 */
+      '?', /* U+AB95 */
+      '?', /* U+AB96 */
+      '?', /* U+AB97 */
+      '?', /* U+AB98 */
+      '?', /* U+AB99 */
+      '?', /* U+AB9A */
+      '?', /* U+AB9B */
+      '?', /* U+AB9C */
+      '?', /* U+AB9D */
+      '?', /* U+AB9E */
+      '?', /* U+AB9F */
+      '?', /* U+ABA0 */
+      '?', /* U+ABA1 */
+      '?', /* U+ABA2 */
+      '?', /* U+ABA3 */
+      '?', /* U+ABA4 */
+      '?', /* U+ABA5 */
+      '?', /* U+ABA6 */
+      '?', /* U+ABA7 */
+      '?', /* U+ABA8 */
+      '?', /* U+ABA9 */
+      '?', /* U+ABAA */
+      '?', /* U+ABAB */
+      '?', /* U+ABAC */
+      '?', /* U+ABAD */
+      '?', /* U+ABAE */
+      '?', /* U+ABAF */
+      '?', /* U+ABB0 */
+      '?', /* U+ABB1 */
+      '?', /* U+ABB2 */
+      '?', /* U+ABB3 */
+      '?', /* U+ABB4 */
+      '?', /* U+ABB5 */
+      '?', /* U+ABB6 */
+      '?', /* U+ABB7 */
+      '?', /* U+ABB8 */
+      '?', /* U+ABB9 */
+      '?', /* U+ABBA */
+      '?', /* U+ABBB */
+      '?', /* U+ABBC */
+      '?', /* U+ABBD */
+      '?', /* U+ABBE */
+      '?', /* U+ABBF */
+      '?', /* U+ABC0 */
+      '?', /* U+ABC1 */
+      '?', /* U+ABC2 */
+      '?', /* U+ABC3 */
+      '?', /* U+ABC4 */
+      '?', /* U+ABC5 */
+      '?', /* U+ABC6 */
+      '?', /* U+ABC7 */
+      '?', /* U+ABC8 */
+      '?', /* U+ABC9 */
+      '?', /* U+ABCA */
+      '?', /* U+ABCB */
+      '?', /* U+ABCC */
+      '?', /* U+ABCD */
+      '?', /* U+ABCE */
+      '?', /* U+ABCF */
+      '?', /* U+ABD0 */
+      '?', /* U+ABD1 */
+      '?', /* U+ABD2 */
+      '?', /* U+ABD3 */
+      '?', /* U+ABD4 */
+      '?', /* U+ABD5 */
+      '?', /* U+ABD6 */
+      '?', /* U+ABD7 */
+      '?', /* U+ABD8 */
+      '?', /* U+ABD9 */
+      '?', /* U+ABDA */
+      '?', /* U+ABDB */
+      '?', /* U+ABDC */
+      '?', /* U+ABDD */
+      '?', /* U+ABDE */
+      '?', /* U+ABDF */
+      '?', /* U+ABE0 */
+      '?', /* U+ABE1 */
+      '?', /* U+ABE2 */
+      '?', /* U+ABE3 */
+      '?', /* U+ABE4 */
+      '?', /* U+ABE5 */
+      '?', /* U+ABE6 */
+      '?', /* U+ABE7 */
+      '?', /* U+ABE8 */
+      '?', /* U+ABE9 */
+      '?', /* U+ABEA */
+      '?', /* U+ABEB */
+      '?', /* U+ABEC */
+      '?', /* U+ABED */
+      '?', /* U+ABEE */
+      '?', /* U+ABEF */
+      '?', /* U+ABF0 */
+      '?', /* U+ABF1 */
+      '?', /* U+ABF2 */
+      '?', /* U+ABF3 */
+      '?', /* U+ABF4 */
+      '?', /* U+ABF5 */
+      '?', /* U+ABF6 */
+      '?', /* U+ABF7 */
+      '?', /* U+ABF8 */
+      '?', /* U+ABF9 */
+      '?', /* U+ABFA */
+      '?', /* U+ABFB */
+      '?', /* U+ABFC */
+      '?', /* U+ABFD */
+      '?', /* U+ABFE */
+      '?', /* U+ABFF */
+      '?', /* U+AC00 */
+      '?', /* U+AC01 */
+      '?', /* U+AC02 */
+      '?', /* U+AC03 */
+      '?', /* U+AC04 */
+      '?', /* U+AC05 */
+      '?', /* U+AC06 */
+      '?', /* U+AC07 */
+      '?', /* U+AC08 */
+      '?', /* U+AC09 */
+      '?', /* U+AC0A */
+      '?', /* U+AC0B */
+      '?', /* U+AC0C */
+      '?', /* U+AC0D */
+      '?', /* U+AC0E */
+      '?', /* U+AC0F */
+      '?', /* U+AC10 */
+      '?', /* U+AC11 */
+      '?', /* U+AC12 */
+      '?', /* U+AC13 */
+      '?', /* U+AC14 */
+      '?', /* U+AC15 */
+      '?', /* U+AC16 */
+      '?', /* U+AC17 */
+      '?', /* U+AC18 */
+      '?', /* U+AC19 */
+      '?', /* U+AC1A */
+      '?', /* U+AC1B */
+      '?', /* U+AC1C */
+      '?', /* U+AC1D */
+      '?', /* U+AC1E */
+      '?', /* U+AC1F */
+      '?', /* U+AC20 */
+      '?', /* U+AC21 */
+      '?', /* U+AC22 */
+      '?', /* U+AC23 */
+      '?', /* U+AC24 */
+      '?', /* U+AC25 */
+      '?', /* U+AC26 */
+      '?', /* U+AC27 */
+      '?', /* U+AC28 */
+      '?', /* U+AC29 */
+      '?', /* U+AC2A */
+      '?', /* U+AC2B */
+      '?', /* U+AC2C */
+      '?', /* U+AC2D */
+      '?', /* U+AC2E */
+      '?', /* U+AC2F */
+      '?', /* U+AC30 */
+      '?', /* U+AC31 */
+      '?', /* U+AC32 */
+      '?', /* U+AC33 */
+      '?', /* U+AC34 */
+      '?', /* U+AC35 */
+      '?', /* U+AC36 */
+      '?', /* U+AC37 */
+      '?', /* U+AC38 */
+      '?', /* U+AC39 */
+      '?', /* U+AC3A */
+      '?', /* U+AC3B */
+      '?', /* U+AC3C */
+      '?', /* U+AC3D */
+      '?', /* U+AC3E */
+      '?', /* U+AC3F */
+      '?', /* U+AC40 */
+      '?', /* U+AC41 */
+      '?', /* U+AC42 */
+      '?', /* U+AC43 */
+      '?', /* U+AC44 */
+      '?', /* U+AC45 */
+      '?', /* U+AC46 */
+      '?', /* U+AC47 */
+      '?', /* U+AC48 */
+      '?', /* U+AC49 */
+      '?', /* U+AC4A */
+      '?', /* U+AC4B */
+      '?', /* U+AC4C */
+      '?', /* U+AC4D */
+      '?', /* U+AC4E */
+      '?', /* U+AC4F */
+      '?', /* U+AC50 */
+      '?', /* U+AC51 */
+      '?', /* U+AC52 */
+      '?', /* U+AC53 */
+      '?', /* U+AC54 */
+      '?', /* U+AC55 */
+      '?', /* U+AC56 */
+      '?', /* U+AC57 */
+      '?', /* U+AC58 */
+      '?', /* U+AC59 */
+      '?', /* U+AC5A */
+      '?', /* U+AC5B */
+      '?', /* U+AC5C */
+      '?', /* U+AC5D */
+      '?', /* U+AC5E */
+      '?', /* U+AC5F */
+      '?', /* U+AC60 */
+      '?', /* U+AC61 */
+      '?', /* U+AC62 */
+      '?', /* U+AC63 */
+      '?', /* U+AC64 */
+      '?', /* U+AC65 */
+      '?', /* U+AC66 */
+      '?', /* U+AC67 */
+      '?', /* U+AC68 */
+      '?', /* U+AC69 */
+      '?', /* U+AC6A */
+      '?', /* U+AC6B */
+      '?', /* U+AC6C */
+      '?', /* U+AC6D */
+      '?', /* U+AC6E */
+      '?', /* U+AC6F */
+      '?', /* U+AC70 */
+      '?', /* U+AC71 */
+      '?', /* U+AC72 */
+      '?', /* U+AC73 */
+      '?', /* U+AC74 */
+      '?', /* U+AC75 */
+      '?', /* U+AC76 */
+      '?', /* U+AC77 */
+      '?', /* U+AC78 */
+      '?', /* U+AC79 */
+      '?', /* U+AC7A */
+      '?', /* U+AC7B */
+      '?', /* U+AC7C */
+      '?', /* U+AC7D */
+      '?', /* U+AC7E */
+      '?', /* U+AC7F */
+      '?', /* U+AC80 */
+      '?', /* U+AC81 */
+      '?', /* U+AC82 */
+      '?', /* U+AC83 */
+      '?', /* U+AC84 */
+      '?', /* U+AC85 */
+      '?', /* U+AC86 */
+      '?', /* U+AC87 */
+      '?', /* U+AC88 */
+      '?', /* U+AC89 */
+      '?', /* U+AC8A */
+      '?', /* U+AC8B */
+      '?', /* U+AC8C */
+      '?', /* U+AC8D */
+      '?', /* U+AC8E */
+      '?', /* U+AC8F */
+      '?', /* U+AC90 */
+      '?', /* U+AC91 */
+      '?', /* U+AC92 */
+      '?', /* U+AC93 */
+      '?', /* U+AC94 */
+      '?', /* U+AC95 */
+      '?', /* U+AC96 */
+      '?', /* U+AC97 */
+      '?', /* U+AC98 */
+      '?', /* U+AC99 */
+      '?', /* U+AC9A */
+      '?', /* U+AC9B */
+      '?', /* U+AC9C */
+      '?', /* U+AC9D */
+      '?', /* U+AC9E */
+      '?', /* U+AC9F */
+      '?', /* U+ACA0 */
+      '?', /* U+ACA1 */
+      '?', /* U+ACA2 */
+      '?', /* U+ACA3 */
+      '?', /* U+ACA4 */
+      '?', /* U+ACA5 */
+      '?', /* U+ACA6 */
+      '?', /* U+ACA7 */
+      '?', /* U+ACA8 */
+      '?', /* U+ACA9 */
+      '?', /* U+ACAA */
+      '?', /* U+ACAB */
+      '?', /* U+ACAC */
+      '?', /* U+ACAD */
+      '?', /* U+ACAE */
+      '?', /* U+ACAF */
+      '?', /* U+ACB0 */
+      '?', /* U+ACB1 */
+      '?', /* U+ACB2 */
+      '?', /* U+ACB3 */
+      '?', /* U+ACB4 */
+      '?', /* U+ACB5 */
+      '?', /* U+ACB6 */
+      '?', /* U+ACB7 */
+      '?', /* U+ACB8 */
+      '?', /* U+ACB9 */
+      '?', /* U+ACBA */
+      '?', /* U+ACBB */
+      '?', /* U+ACBC */
+      '?', /* U+ACBD */
+      '?', /* U+ACBE */
+      '?', /* U+ACBF */
+      '?', /* U+ACC0 */
+      '?', /* U+ACC1 */
+      '?', /* U+ACC2 */
+      '?', /* U+ACC3 */
+      '?', /* U+ACC4 */
+      '?', /* U+ACC5 */
+      '?', /* U+ACC6 */
+      '?', /* U+ACC7 */
+      '?', /* U+ACC8 */
+      '?', /* U+ACC9 */
+      '?', /* U+ACCA */
+      '?', /* U+ACCB */
+      '?', /* U+ACCC */
+      '?', /* U+ACCD */
+      '?', /* U+ACCE */
+      '?', /* U+ACCF */
+      '?', /* U+ACD0 */
+      '?', /* U+ACD1 */
+      '?', /* U+ACD2 */
+      '?', /* U+ACD3 */
+      '?', /* U+ACD4 */
+      '?', /* U+ACD5 */
+      '?', /* U+ACD6 */
+      '?', /* U+ACD7 */
+      '?', /* U+ACD8 */
+      '?', /* U+ACD9 */
+      '?', /* U+ACDA */
+      '?', /* U+ACDB */
+      '?', /* U+ACDC */
+      '?', /* U+ACDD */
+      '?', /* U+ACDE */
+      '?', /* U+ACDF */
+      '?', /* U+ACE0 */
+      '?', /* U+ACE1 */
+      '?', /* U+ACE2 */
+      '?', /* U+ACE3 */
+      '?', /* U+ACE4 */
+      '?', /* U+ACE5 */
+      '?', /* U+ACE6 */
+      '?', /* U+ACE7 */
+      '?', /* U+ACE8 */
+      '?', /* U+ACE9 */
+      '?', /* U+ACEA */
+      '?', /* U+ACEB */
+      '?', /* U+ACEC */
+      '?', /* U+ACED */
+      '?', /* U+ACEE */
+      '?', /* U+ACEF */
+      '?', /* U+ACF0 */
+      '?', /* U+ACF1 */
+      '?', /* U+ACF2 */
+      '?', /* U+ACF3 */
+      '?', /* U+ACF4 */
+      '?', /* U+ACF5 */
+      '?', /* U+ACF6 */
+      '?', /* U+ACF7 */
+      '?', /* U+ACF8 */
+      '?', /* U+ACF9 */
+      '?', /* U+ACFA */
+      '?', /* U+ACFB */
+      '?', /* U+ACFC */
+      '?', /* U+ACFD */
+      '?', /* U+ACFE */
+      '?', /* U+ACFF */
+      '?', /* U+AD00 */
+      '?', /* U+AD01 */
+      '?', /* U+AD02 */
+      '?', /* U+AD03 */
+      '?', /* U+AD04 */
+      '?', /* U+AD05 */
+      '?', /* U+AD06 */
+      '?', /* U+AD07 */
+      '?', /* U+AD08 */
+      '?', /* U+AD09 */
+      '?', /* U+AD0A */
+      '?', /* U+AD0B */
+      '?', /* U+AD0C */
+      '?', /* U+AD0D */
+      '?', /* U+AD0E */
+      '?', /* U+AD0F */
+      '?', /* U+AD10 */
+      '?', /* U+AD11 */
+      '?', /* U+AD12 */
+      '?', /* U+AD13 */
+      '?', /* U+AD14 */
+      '?', /* U+AD15 */
+      '?', /* U+AD16 */
+      '?', /* U+AD17 */
+      '?', /* U+AD18 */
+      '?', /* U+AD19 */
+      '?', /* U+AD1A */
+      '?', /* U+AD1B */
+      '?', /* U+AD1C */
+      '?', /* U+AD1D */
+      '?', /* U+AD1E */
+      '?', /* U+AD1F */
+      '?', /* U+AD20 */
+      '?', /* U+AD21 */
+      '?', /* U+AD22 */
+      '?', /* U+AD23 */
+      '?', /* U+AD24 */
+      '?', /* U+AD25 */
+      '?', /* U+AD26 */
+      '?', /* U+AD27 */
+      '?', /* U+AD28 */
+      '?', /* U+AD29 */
+      '?', /* U+AD2A */
+      '?', /* U+AD2B */
+      '?', /* U+AD2C */
+      '?', /* U+AD2D */
+      '?', /* U+AD2E */
+      '?', /* U+AD2F */
+      '?', /* U+AD30 */
+      '?', /* U+AD31 */
+      '?', /* U+AD32 */
+      '?', /* U+AD33 */
+      '?', /* U+AD34 */
+      '?', /* U+AD35 */
+      '?', /* U+AD36 */
+      '?', /* U+AD37 */
+      '?', /* U+AD38 */
+      '?', /* U+AD39 */
+      '?', /* U+AD3A */
+      '?', /* U+AD3B */
+      '?', /* U+AD3C */
+      '?', /* U+AD3D */
+      '?', /* U+AD3E */
+      '?', /* U+AD3F */
+      '?', /* U+AD40 */
+      '?', /* U+AD41 */
+      '?', /* U+AD42 */
+      '?', /* U+AD43 */
+      '?', /* U+AD44 */
+      '?', /* U+AD45 */
+      '?', /* U+AD46 */
+      '?', /* U+AD47 */
+      '?', /* U+AD48 */
+      '?', /* U+AD49 */
+      '?', /* U+AD4A */
+      '?', /* U+AD4B */
+      '?', /* U+AD4C */
+      '?', /* U+AD4D */
+      '?', /* U+AD4E */
+      '?', /* U+AD4F */
+      '?', /* U+AD50 */
+      '?', /* U+AD51 */
+      '?', /* U+AD52 */
+      '?', /* U+AD53 */
+      '?', /* U+AD54 */
+      '?', /* U+AD55 */
+      '?', /* U+AD56 */
+      '?', /* U+AD57 */
+      '?', /* U+AD58 */
+      '?', /* U+AD59 */
+      '?', /* U+AD5A */
+      '?', /* U+AD5B */
+      '?', /* U+AD5C */
+      '?', /* U+AD5D */
+      '?', /* U+AD5E */
+      '?', /* U+AD5F */
+      '?', /* U+AD60 */
+      '?', /* U+AD61 */
+      '?', /* U+AD62 */
+      '?', /* U+AD63 */
+      '?', /* U+AD64 */
+      '?', /* U+AD65 */
+      '?', /* U+AD66 */
+      '?', /* U+AD67 */
+      '?', /* U+AD68 */
+      '?', /* U+AD69 */
+      '?', /* U+AD6A */
+      '?', /* U+AD6B */
+      '?', /* U+AD6C */
+      '?', /* U+AD6D */
+      '?', /* U+AD6E */
+      '?', /* U+AD6F */
+      '?', /* U+AD70 */
+      '?', /* U+AD71 */
+      '?', /* U+AD72 */
+      '?', /* U+AD73 */
+      '?', /* U+AD74 */
+      '?', /* U+AD75 */
+      '?', /* U+AD76 */
+      '?', /* U+AD77 */
+      '?', /* U+AD78 */
+      '?', /* U+AD79 */
+      '?', /* U+AD7A */
+      '?', /* U+AD7B */
+      '?', /* U+AD7C */
+      '?', /* U+AD7D */
+      '?', /* U+AD7E */
+      '?', /* U+AD7F */
+      '?', /* U+AD80 */
+      '?', /* U+AD81 */
+      '?', /* U+AD82 */
+      '?', /* U+AD83 */
+      '?', /* U+AD84 */
+      '?', /* U+AD85 */
+      '?', /* U+AD86 */
+      '?', /* U+AD87 */
+      '?', /* U+AD88 */
+      '?', /* U+AD89 */
+      '?', /* U+AD8A */
+      '?', /* U+AD8B */
+      '?', /* U+AD8C */
+      '?', /* U+AD8D */
+      '?', /* U+AD8E */
+      '?', /* U+AD8F */
+      '?', /* U+AD90 */
+      '?', /* U+AD91 */
+      '?', /* U+AD92 */
+      '?', /* U+AD93 */
+      '?', /* U+AD94 */
+      '?', /* U+AD95 */
+      '?', /* U+AD96 */
+      '?', /* U+AD97 */
+      '?', /* U+AD98 */
+      '?', /* U+AD99 */
+      '?', /* U+AD9A */
+      '?', /* U+AD9B */
+      '?', /* U+AD9C */
+      '?', /* U+AD9D */
+      '?', /* U+AD9E */
+      '?', /* U+AD9F */
+      '?', /* U+ADA0 */
+      '?', /* U+ADA1 */
+      '?', /* U+ADA2 */
+      '?', /* U+ADA3 */
+      '?', /* U+ADA4 */
+      '?', /* U+ADA5 */
+      '?', /* U+ADA6 */
+      '?', /* U+ADA7 */
+      '?', /* U+ADA8 */
+      '?', /* U+ADA9 */
+      '?', /* U+ADAA */
+      '?', /* U+ADAB */
+      '?', /* U+ADAC */
+      '?', /* U+ADAD */
+      '?', /* U+ADAE */
+      '?', /* U+ADAF */
+      '?', /* U+ADB0 */
+      '?', /* U+ADB1 */
+      '?', /* U+ADB2 */
+      '?', /* U+ADB3 */
+      '?', /* U+ADB4 */
+      '?', /* U+ADB5 */
+      '?', /* U+ADB6 */
+      '?', /* U+ADB7 */
+      '?', /* U+ADB8 */
+      '?', /* U+ADB9 */
+      '?', /* U+ADBA */
+      '?', /* U+ADBB */
+      '?', /* U+ADBC */
+      '?', /* U+ADBD */
+      '?', /* U+ADBE */
+      '?', /* U+ADBF */
+      '?', /* U+ADC0 */
+      '?', /* U+ADC1 */
+      '?', /* U+ADC2 */
+      '?', /* U+ADC3 */
+      '?', /* U+ADC4 */
+      '?', /* U+ADC5 */
+      '?', /* U+ADC6 */
+      '?', /* U+ADC7 */
+      '?', /* U+ADC8 */
+      '?', /* U+ADC9 */
+      '?', /* U+ADCA */
+      '?', /* U+ADCB */
+      '?', /* U+ADCC */
+      '?', /* U+ADCD */
+      '?', /* U+ADCE */
+      '?', /* U+ADCF */
+      '?', /* U+ADD0 */
+      '?', /* U+ADD1 */
+      '?', /* U+ADD2 */
+      '?', /* U+ADD3 */
+      '?', /* U+ADD4 */
+      '?', /* U+ADD5 */
+      '?', /* U+ADD6 */
+      '?', /* U+ADD7 */
+      '?', /* U+ADD8 */
+      '?', /* U+ADD9 */
+      '?', /* U+ADDA */
+      '?', /* U+ADDB */
+      '?', /* U+ADDC */
+      '?', /* U+ADDD */
+      '?', /* U+ADDE */
+      '?', /* U+ADDF */
+      '?', /* U+ADE0 */
+      '?', /* U+ADE1 */
+      '?', /* U+ADE2 */
+      '?', /* U+ADE3 */
+      '?', /* U+ADE4 */
+      '?', /* U+ADE5 */
+      '?', /* U+ADE6 */
+      '?', /* U+ADE7 */
+      '?', /* U+ADE8 */
+      '?', /* U+ADE9 */
+      '?', /* U+ADEA */
+      '?', /* U+ADEB */
+      '?', /* U+ADEC */
+      '?', /* U+ADED */
+      '?', /* U+ADEE */
+      '?', /* U+ADEF */
+      '?', /* U+ADF0 */
+      '?', /* U+ADF1 */
+      '?', /* U+ADF2 */
+      '?', /* U+ADF3 */
+      '?', /* U+ADF4 */
+      '?', /* U+ADF5 */
+      '?', /* U+ADF6 */
+      '?', /* U+ADF7 */
+      '?', /* U+ADF8 */
+      '?', /* U+ADF9 */
+      '?', /* U+ADFA */
+      '?', /* U+ADFB */
+      '?', /* U+ADFC */
+      '?', /* U+ADFD */
+      '?', /* U+ADFE */
+      '?', /* U+ADFF */
+      '?', /* U+AE00 */
+      '?', /* U+AE01 */
+      '?', /* U+AE02 */
+      '?', /* U+AE03 */
+      '?', /* U+AE04 */
+      '?', /* U+AE05 */
+      '?', /* U+AE06 */
+      '?', /* U+AE07 */
+      '?', /* U+AE08 */
+      '?', /* U+AE09 */
+      '?', /* U+AE0A */
+      '?', /* U+AE0B */
+      '?', /* U+AE0C */
+      '?', /* U+AE0D */
+      '?', /* U+AE0E */
+      '?', /* U+AE0F */
+      '?', /* U+AE10 */
+      '?', /* U+AE11 */
+      '?', /* U+AE12 */
+      '?', /* U+AE13 */
+      '?', /* U+AE14 */
+      '?', /* U+AE15 */
+      '?', /* U+AE16 */
+      '?', /* U+AE17 */
+      '?', /* U+AE18 */
+      '?', /* U+AE19 */
+      '?', /* U+AE1A */
+      '?', /* U+AE1B */
+      '?', /* U+AE1C */
+      '?', /* U+AE1D */
+      '?', /* U+AE1E */
+      '?', /* U+AE1F */
+      '?', /* U+AE20 */
+      '?', /* U+AE21 */
+      '?', /* U+AE22 */
+      '?', /* U+AE23 */
+      '?', /* U+AE24 */
+      '?', /* U+AE25 */
+      '?', /* U+AE26 */
+      '?', /* U+AE27 */
+      '?', /* U+AE28 */
+      '?', /* U+AE29 */
+      '?', /* U+AE2A */
+      '?', /* U+AE2B */
+      '?', /* U+AE2C */
+      '?', /* U+AE2D */
+      '?', /* U+AE2E */
+      '?', /* U+AE2F */
+      '?', /* U+AE30 */
+      '?', /* U+AE31 */
+      '?', /* U+AE32 */
+      '?', /* U+AE33 */
+      '?', /* U+AE34 */
+      '?', /* U+AE35 */
+      '?', /* U+AE36 */
+      '?', /* U+AE37 */
+      '?', /* U+AE38 */
+      '?', /* U+AE39 */
+      '?', /* U+AE3A */
+      '?', /* U+AE3B */
+      '?', /* U+AE3C */
+      '?', /* U+AE3D */
+      '?', /* U+AE3E */
+      '?', /* U+AE3F */
+      '?', /* U+AE40 */
+      '?', /* U+AE41 */
+      '?', /* U+AE42 */
+      '?', /* U+AE43 */
+      '?', /* U+AE44 */
+      '?', /* U+AE45 */
+      '?', /* U+AE46 */
+      '?', /* U+AE47 */
+      '?', /* U+AE48 */
+      '?', /* U+AE49 */
+      '?', /* U+AE4A */
+      '?', /* U+AE4B */
+      '?', /* U+AE4C */
+      '?', /* U+AE4D */
+      '?', /* U+AE4E */
+      '?', /* U+AE4F */
+      '?', /* U+AE50 */
+      '?', /* U+AE51 */
+      '?', /* U+AE52 */
+      '?', /* U+AE53 */
+      '?', /* U+AE54 */
+      '?', /* U+AE55 */
+      '?', /* U+AE56 */
+      '?', /* U+AE57 */
+      '?', /* U+AE58 */
+      '?', /* U+AE59 */
+      '?', /* U+AE5A */
+      '?', /* U+AE5B */
+      '?', /* U+AE5C */
+      '?', /* U+AE5D */
+      '?', /* U+AE5E */
+      '?', /* U+AE5F */
+      '?', /* U+AE60 */
+      '?', /* U+AE61 */
+      '?', /* U+AE62 */
+      '?', /* U+AE63 */
+      '?', /* U+AE64 */
+      '?', /* U+AE65 */
+      '?', /* U+AE66 */
+      '?', /* U+AE67 */
+      '?', /* U+AE68 */
+      '?', /* U+AE69 */
+      '?', /* U+AE6A */
+      '?', /* U+AE6B */
+      '?', /* U+AE6C */
+      '?', /* U+AE6D */
+      '?', /* U+AE6E */
+      '?', /* U+AE6F */
+      '?', /* U+AE70 */
+      '?', /* U+AE71 */
+      '?', /* U+AE72 */
+      '?', /* U+AE73 */
+      '?', /* U+AE74 */
+      '?', /* U+AE75 */
+      '?', /* U+AE76 */
+      '?', /* U+AE77 */
+      '?', /* U+AE78 */
+      '?', /* U+AE79 */
+      '?', /* U+AE7A */
+      '?', /* U+AE7B */
+      '?', /* U+AE7C */
+      '?', /* U+AE7D */
+      '?', /* U+AE7E */
+      '?', /* U+AE7F */
+      '?', /* U+AE80 */
+      '?', /* U+AE81 */
+      '?', /* U+AE82 */
+      '?', /* U+AE83 */
+      '?', /* U+AE84 */
+      '?', /* U+AE85 */
+      '?', /* U+AE86 */
+      '?', /* U+AE87 */
+      '?', /* U+AE88 */
+      '?', /* U+AE89 */
+      '?', /* U+AE8A */
+      '?', /* U+AE8B */
+      '?', /* U+AE8C */
+      '?', /* U+AE8D */
+      '?', /* U+AE8E */
+      '?', /* U+AE8F */
+      '?', /* U+AE90 */
+      '?', /* U+AE91 */
+      '?', /* U+AE92 */
+      '?', /* U+AE93 */
+      '?', /* U+AE94 */
+      '?', /* U+AE95 */
+      '?', /* U+AE96 */
+      '?', /* U+AE97 */
+      '?', /* U+AE98 */
+      '?', /* U+AE99 */
+      '?', /* U+AE9A */
+      '?', /* U+AE9B */
+      '?', /* U+AE9C */
+      '?', /* U+AE9D */
+      '?', /* U+AE9E */
+      '?', /* U+AE9F */
+      '?', /* U+AEA0 */
+      '?', /* U+AEA1 */
+      '?', /* U+AEA2 */
+      '?', /* U+AEA3 */
+      '?', /* U+AEA4 */
+      '?', /* U+AEA5 */
+      '?', /* U+AEA6 */
+      '?', /* U+AEA7 */
+      '?', /* U+AEA8 */
+      '?', /* U+AEA9 */
+      '?', /* U+AEAA */
+      '?', /* U+AEAB */
+      '?', /* U+AEAC */
+      '?', /* U+AEAD */
+      '?', /* U+AEAE */
+      '?', /* U+AEAF */
+      '?', /* U+AEB0 */
+      '?', /* U+AEB1 */
+      '?', /* U+AEB2 */
+      '?', /* U+AEB3 */
+      '?', /* U+AEB4 */
+      '?', /* U+AEB5 */
+      '?', /* U+AEB6 */
+      '?', /* U+AEB7 */
+      '?', /* U+AEB8 */
+      '?', /* U+AEB9 */
+      '?', /* U+AEBA */
+      '?', /* U+AEBB */
+      '?', /* U+AEBC */
+      '?', /* U+AEBD */
+      '?', /* U+AEBE */
+      '?', /* U+AEBF */
+      '?', /* U+AEC0 */
+      '?', /* U+AEC1 */
+      '?', /* U+AEC2 */
+      '?', /* U+AEC3 */
+      '?', /* U+AEC4 */
+      '?', /* U+AEC5 */
+      '?', /* U+AEC6 */
+      '?', /* U+AEC7 */
+      '?', /* U+AEC8 */
+      '?', /* U+AEC9 */
+      '?', /* U+AECA */
+      '?', /* U+AECB */
+      '?', /* U+AECC */
+      '?', /* U+AECD */
+      '?', /* U+AECE */
+      '?', /* U+AECF */
+      '?', /* U+AED0 */
+      '?', /* U+AED1 */
+      '?', /* U+AED2 */
+      '?', /* U+AED3 */
+      '?', /* U+AED4 */
+      '?', /* U+AED5 */
+      '?', /* U+AED6 */
+      '?', /* U+AED7 */
+      '?', /* U+AED8 */
+      '?', /* U+AED9 */
+      '?', /* U+AEDA */
+      '?', /* U+AEDB */
+      '?', /* U+AEDC */
+      '?', /* U+AEDD */
+      '?', /* U+AEDE */
+      '?', /* U+AEDF */
+      '?', /* U+AEE0 */
+      '?', /* U+AEE1 */
+      '?', /* U+AEE2 */
+      '?', /* U+AEE3 */
+      '?', /* U+AEE4 */
+      '?', /* U+AEE5 */
+      '?', /* U+AEE6 */
+      '?', /* U+AEE7 */
+      '?', /* U+AEE8 */
+      '?', /* U+AEE9 */
+      '?', /* U+AEEA */
+      '?', /* U+AEEB */
+      '?', /* U+AEEC */
+      '?', /* U+AEED */
+      '?', /* U+AEEE */
+      '?', /* U+AEEF */
+      '?', /* U+AEF0 */
+      '?', /* U+AEF1 */
+      '?', /* U+AEF2 */
+      '?', /* U+AEF3 */
+      '?', /* U+AEF4 */
+      '?', /* U+AEF5 */
+      '?', /* U+AEF6 */
+      '?', /* U+AEF7 */
+      '?', /* U+AEF8 */
+      '?', /* U+AEF9 */
+      '?', /* U+AEFA */
+      '?', /* U+AEFB */
+      '?', /* U+AEFC */
+      '?', /* U+AEFD */
+      '?', /* U+AEFE */
+      '?', /* U+AEFF */
+      '?', /* U+AF00 */
+      '?', /* U+AF01 */
+      '?', /* U+AF02 */
+      '?', /* U+AF03 */
+      '?', /* U+AF04 */
+      '?', /* U+AF05 */
+      '?', /* U+AF06 */
+      '?', /* U+AF07 */
+      '?', /* U+AF08 */
+      '?', /* U+AF09 */
+      '?', /* U+AF0A */
+      '?', /* U+AF0B */
+      '?', /* U+AF0C */
+      '?', /* U+AF0D */
+      '?', /* U+AF0E */
+      '?', /* U+AF0F */
+      '?', /* U+AF10 */
+      '?', /* U+AF11 */
+      '?', /* U+AF12 */
+      '?', /* U+AF13 */
+      '?', /* U+AF14 */
+      '?', /* U+AF15 */
+      '?', /* U+AF16 */
+      '?', /* U+AF17 */
+      '?', /* U+AF18 */
+      '?', /* U+AF19 */
+      '?', /* U+AF1A */
+      '?', /* U+AF1B */
+      '?', /* U+AF1C */
+      '?', /* U+AF1D */
+      '?', /* U+AF1E */
+      '?', /* U+AF1F */
+      '?', /* U+AF20 */
+      '?', /* U+AF21 */
+      '?', /* U+AF22 */
+      '?', /* U+AF23 */
+      '?', /* U+AF24 */
+      '?', /* U+AF25 */
+      '?', /* U+AF26 */
+      '?', /* U+AF27 */
+      '?', /* U+AF28 */
+      '?', /* U+AF29 */
+      '?', /* U+AF2A */
+      '?', /* U+AF2B */
+      '?', /* U+AF2C */
+      '?', /* U+AF2D */
+      '?', /* U+AF2E */
+      '?', /* U+AF2F */
+      '?', /* U+AF30 */
+      '?', /* U+AF31 */
+      '?', /* U+AF32 */
+      '?', /* U+AF33 */
+      '?', /* U+AF34 */
+      '?', /* U+AF35 */
+      '?', /* U+AF36 */
+      '?', /* U+AF37 */
+      '?', /* U+AF38 */
+      '?', /* U+AF39 */
+      '?', /* U+AF3A */
+      '?', /* U+AF3B */
+      '?', /* U+AF3C */
+      '?', /* U+AF3D */
+      '?', /* U+AF3E */
+      '?', /* U+AF3F */
+      '?', /* U+AF40 */
+      '?', /* U+AF41 */
+      '?', /* U+AF42 */
+      '?', /* U+AF43 */
+      '?', /* U+AF44 */
+      '?', /* U+AF45 */
+      '?', /* U+AF46 */
+      '?', /* U+AF47 */
+      '?', /* U+AF48 */
+      '?', /* U+AF49 */
+      '?', /* U+AF4A */
+      '?', /* U+AF4B */
+      '?', /* U+AF4C */
+      '?', /* U+AF4D */
+      '?', /* U+AF4E */
+      '?', /* U+AF4F */
+      '?', /* U+AF50 */
+      '?', /* U+AF51 */
+      '?', /* U+AF52 */
+      '?', /* U+AF53 */
+      '?', /* U+AF54 */
+      '?', /* U+AF55 */
+      '?', /* U+AF56 */
+      '?', /* U+AF57 */
+      '?', /* U+AF58 */
+      '?', /* U+AF59 */
+      '?', /* U+AF5A */
+      '?', /* U+AF5B */
+      '?', /* U+AF5C */
+      '?', /* U+AF5D */
+      '?', /* U+AF5E */
+      '?', /* U+AF5F */
+      '?', /* U+AF60 */
+      '?', /* U+AF61 */
+      '?', /* U+AF62 */
+      '?', /* U+AF63 */
+      '?', /* U+AF64 */
+      '?', /* U+AF65 */
+      '?', /* U+AF66 */
+      '?', /* U+AF67 */
+      '?', /* U+AF68 */
+      '?', /* U+AF69 */
+      '?', /* U+AF6A */
+      '?', /* U+AF6B */
+      '?', /* U+AF6C */
+      '?', /* U+AF6D */
+      '?', /* U+AF6E */
+      '?', /* U+AF6F */
+      '?', /* U+AF70 */
+      '?', /* U+AF71 */
+      '?', /* U+AF72 */
+      '?', /* U+AF73 */
+      '?', /* U+AF74 */
+      '?', /* U+AF75 */
+      '?', /* U+AF76 */
+      '?', /* U+AF77 */
+      '?', /* U+AF78 */
+      '?', /* U+AF79 */
+      '?', /* U+AF7A */
+      '?', /* U+AF7B */
+      '?', /* U+AF7C */
+      '?', /* U+AF7D */
+      '?', /* U+AF7E */
+      '?', /* U+AF7F */
+      '?', /* U+AF80 */
+      '?', /* U+AF81 */
+      '?', /* U+AF82 */
+      '?', /* U+AF83 */
+      '?', /* U+AF84 */
+      '?', /* U+AF85 */
+      '?', /* U+AF86 */
+      '?', /* U+AF87 */
+      '?', /* U+AF88 */
+      '?', /* U+AF89 */
+      '?', /* U+AF8A */
+      '?', /* U+AF8B */
+      '?', /* U+AF8C */
+      '?', /* U+AF8D */
+      '?', /* U+AF8E */
+      '?', /* U+AF8F */
+      '?', /* U+AF90 */
+      '?', /* U+AF91 */
+      '?', /* U+AF92 */
+      '?', /* U+AF93 */
+      '?', /* U+AF94 */
+      '?', /* U+AF95 */
+      '?', /* U+AF96 */
+      '?', /* U+AF97 */
+      '?', /* U+AF98 */
+      '?', /* U+AF99 */
+      '?', /* U+AF9A */
+      '?', /* U+AF9B */
+      '?', /* U+AF9C */
+      '?', /* U+AF9D */
+      '?', /* U+AF9E */
+      '?', /* U+AF9F */
+      '?', /* U+AFA0 */
+      '?', /* U+AFA1 */
+      '?', /* U+AFA2 */
+      '?', /* U+AFA3 */
+      '?', /* U+AFA4 */
+      '?', /* U+AFA5 */
+      '?', /* U+AFA6 */
+      '?', /* U+AFA7 */
+      '?', /* U+AFA8 */
+      '?', /* U+AFA9 */
+      '?', /* U+AFAA */
+      '?', /* U+AFAB */
+      '?', /* U+AFAC */
+      '?', /* U+AFAD */
+      '?', /* U+AFAE */
+      '?', /* U+AFAF */
+      '?', /* U+AFB0 */
+      '?', /* U+AFB1 */
+      '?', /* U+AFB2 */
+      '?', /* U+AFB3 */
+      '?', /* U+AFB4 */
+      '?', /* U+AFB5 */
+      '?', /* U+AFB6 */
+      '?', /* U+AFB7 */
+      '?', /* U+AFB8 */
+      '?', /* U+AFB9 */
+      '?', /* U+AFBA */
+      '?', /* U+AFBB */
+      '?', /* U+AFBC */
+      '?', /* U+AFBD */
+      '?', /* U+AFBE */
+      '?', /* U+AFBF */
+      '?', /* U+AFC0 */
+      '?', /* U+AFC1 */
+      '?', /* U+AFC2 */
+      '?', /* U+AFC3 */
+      '?', /* U+AFC4 */
+      '?', /* U+AFC5 */
+      '?', /* U+AFC6 */
+      '?', /* U+AFC7 */
+      '?', /* U+AFC8 */
+      '?', /* U+AFC9 */
+      '?', /* U+AFCA */
+      '?', /* U+AFCB */
+      '?', /* U+AFCC */
+      '?', /* U+AFCD */
+      '?', /* U+AFCE */
+      '?', /* U+AFCF */
+      '?', /* U+AFD0 */
+      '?', /* U+AFD1 */
+      '?', /* U+AFD2 */
+      '?', /* U+AFD3 */
+      '?', /* U+AFD4 */
+      '?', /* U+AFD5 */
+      '?', /* U+AFD6 */
+      '?', /* U+AFD7 */
+      '?', /* U+AFD8 */
+      '?', /* U+AFD9 */
+      '?', /* U+AFDA */
+      '?', /* U+AFDB */
+      '?', /* U+AFDC */
+      '?', /* U+AFDD */
+      '?', /* U+AFDE */
+      '?', /* U+AFDF */
+      '?', /* U+AFE0 */
+      '?', /* U+AFE1 */
+      '?', /* U+AFE2 */
+      '?', /* U+AFE3 */
+      '?', /* U+AFE4 */
+      '?', /* U+AFE5 */
+      '?', /* U+AFE6 */
+      '?', /* U+AFE7 */
+      '?', /* U+AFE8 */
+      '?', /* U+AFE9 */
+      '?', /* U+AFEA */
+      '?', /* U+AFEB */
+      '?', /* U+AFEC */
+      '?', /* U+AFED */
+      '?', /* U+AFEE */
+      '?', /* U+AFEF */
+      '?', /* U+AFF0 */
+      '?', /* U+AFF1 */
+      '?', /* U+AFF2 */
+      '?', /* U+AFF3 */
+      '?', /* U+AFF4 */
+      '?', /* U+AFF5 */
+      '?', /* U+AFF6 */
+      '?', /* U+AFF7 */
+      '?', /* U+AFF8 */
+      '?', /* U+AFF9 */
+      '?', /* U+AFFA */
+      '?', /* U+AFFB */
+      '?', /* U+AFFC */
+      '?', /* U+AFFD */
+      '?', /* U+AFFE */
+      '?', /* U+AFFF */
+      '?', /* U+B000 */
+      '?', /* U+B001 */
+      '?', /* U+B002 */
+      '?', /* U+B003 */
+      '?', /* U+B004 */
+      '?', /* U+B005 */
+      '?', /* U+B006 */
+      '?', /* U+B007 */
+      '?', /* U+B008 */
+      '?', /* U+B009 */
+      '?', /* U+B00A */
+      '?', /* U+B00B */
+      '?', /* U+B00C */
+      '?', /* U+B00D */
+      '?', /* U+B00E */
+      '?', /* U+B00F */
+      '?', /* U+B010 */
+      '?', /* U+B011 */
+      '?', /* U+B012 */
+      '?', /* U+B013 */
+      '?', /* U+B014 */
+      '?', /* U+B015 */
+      '?', /* U+B016 */
+      '?', /* U+B017 */
+      '?', /* U+B018 */
+      '?', /* U+B019 */
+      '?', /* U+B01A */
+      '?', /* U+B01B */
+      '?', /* U+B01C */
+      '?', /* U+B01D */
+      '?', /* U+B01E */
+      '?', /* U+B01F */
+      '?', /* U+B020 */
+      '?', /* U+B021 */
+      '?', /* U+B022 */
+      '?', /* U+B023 */
+      '?', /* U+B024 */
+      '?', /* U+B025 */
+      '?', /* U+B026 */
+      '?', /* U+B027 */
+      '?', /* U+B028 */
+      '?', /* U+B029 */
+      '?', /* U+B02A */
+      '?', /* U+B02B */
+      '?', /* U+B02C */
+      '?', /* U+B02D */
+      '?', /* U+B02E */
+      '?', /* U+B02F */
+      '?', /* U+B030 */
+      '?', /* U+B031 */
+      '?', /* U+B032 */
+      '?', /* U+B033 */
+      '?', /* U+B034 */
+      '?', /* U+B035 */
+      '?', /* U+B036 */
+      '?', /* U+B037 */
+      '?', /* U+B038 */
+      '?', /* U+B039 */
+      '?', /* U+B03A */
+      '?', /* U+B03B */
+      '?', /* U+B03C */
+      '?', /* U+B03D */
+      '?', /* U+B03E */
+      '?', /* U+B03F */
+      '?', /* U+B040 */
+      '?', /* U+B041 */
+      '?', /* U+B042 */
+      '?', /* U+B043 */
+      '?', /* U+B044 */
+      '?', /* U+B045 */
+      '?', /* U+B046 */
+      '?', /* U+B047 */
+      '?', /* U+B048 */
+      '?', /* U+B049 */
+      '?', /* U+B04A */
+      '?', /* U+B04B */
+      '?', /* U+B04C */
+      '?', /* U+B04D */
+      '?', /* U+B04E */
+      '?', /* U+B04F */
+      '?', /* U+B050 */
+      '?', /* U+B051 */
+      '?', /* U+B052 */
+      '?', /* U+B053 */
+      '?', /* U+B054 */
+      '?', /* U+B055 */
+      '?', /* U+B056 */
+      '?', /* U+B057 */
+      '?', /* U+B058 */
+      '?', /* U+B059 */
+      '?', /* U+B05A */
+      '?', /* U+B05B */
+      '?', /* U+B05C */
+      '?', /* U+B05D */
+      '?', /* U+B05E */
+      '?', /* U+B05F */
+      '?', /* U+B060 */
+      '?', /* U+B061 */
+      '?', /* U+B062 */
+      '?', /* U+B063 */
+      '?', /* U+B064 */
+      '?', /* U+B065 */
+      '?', /* U+B066 */
+      '?', /* U+B067 */
+      '?', /* U+B068 */
+      '?', /* U+B069 */
+      '?', /* U+B06A */
+      '?', /* U+B06B */
+      '?', /* U+B06C */
+      '?', /* U+B06D */
+      '?', /* U+B06E */
+      '?', /* U+B06F */
+      '?', /* U+B070 */
+      '?', /* U+B071 */
+      '?', /* U+B072 */
+      '?', /* U+B073 */
+      '?', /* U+B074 */
+      '?', /* U+B075 */
+      '?', /* U+B076 */
+      '?', /* U+B077 */
+      '?', /* U+B078 */
+      '?', /* U+B079 */
+      '?', /* U+B07A */
+      '?', /* U+B07B */
+      '?', /* U+B07C */
+      '?', /* U+B07D */
+      '?', /* U+B07E */
+      '?', /* U+B07F */
+      '?', /* U+B080 */
+      '?', /* U+B081 */
+      '?', /* U+B082 */
+      '?', /* U+B083 */
+      '?', /* U+B084 */
+      '?', /* U+B085 */
+      '?', /* U+B086 */
+      '?', /* U+B087 */
+      '?', /* U+B088 */
+      '?', /* U+B089 */
+      '?', /* U+B08A */
+      '?', /* U+B08B */
+      '?', /* U+B08C */
+      '?', /* U+B08D */
+      '?', /* U+B08E */
+      '?', /* U+B08F */
+      '?', /* U+B090 */
+      '?', /* U+B091 */
+      '?', /* U+B092 */
+      '?', /* U+B093 */
+      '?', /* U+B094 */
+      '?', /* U+B095 */
+      '?', /* U+B096 */
+      '?', /* U+B097 */
+      '?', /* U+B098 */
+      '?', /* U+B099 */
+      '?', /* U+B09A */
+      '?', /* U+B09B */
+      '?', /* U+B09C */
+      '?', /* U+B09D */
+      '?', /* U+B09E */
+      '?', /* U+B09F */
+      '?', /* U+B0A0 */
+      '?', /* U+B0A1 */
+      '?', /* U+B0A2 */
+      '?', /* U+B0A3 */
+      '?', /* U+B0A4 */
+      '?', /* U+B0A5 */
+      '?', /* U+B0A6 */
+      '?', /* U+B0A7 */
+      '?', /* U+B0A8 */
+      '?', /* U+B0A9 */
+      '?', /* U+B0AA */
+      '?', /* U+B0AB */
+      '?', /* U+B0AC */
+      '?', /* U+B0AD */
+      '?', /* U+B0AE */
+      '?', /* U+B0AF */
+      '?', /* U+B0B0 */
+      '?', /* U+B0B1 */
+      '?', /* U+B0B2 */
+      '?', /* U+B0B3 */
+      '?', /* U+B0B4 */
+      '?', /* U+B0B5 */
+      '?', /* U+B0B6 */
+      '?', /* U+B0B7 */
+      '?', /* U+B0B8 */
+      '?', /* U+B0B9 */
+      '?', /* U+B0BA */
+      '?', /* U+B0BB */
+      '?', /* U+B0BC */
+      '?', /* U+B0BD */
+      '?', /* U+B0BE */
+      '?', /* U+B0BF */
+      '?', /* U+B0C0 */
+      '?', /* U+B0C1 */
+      '?', /* U+B0C2 */
+      '?', /* U+B0C3 */
+      '?', /* U+B0C4 */
+      '?', /* U+B0C5 */
+      '?', /* U+B0C6 */
+      '?', /* U+B0C7 */
+      '?', /* U+B0C8 */
+      '?', /* U+B0C9 */
+      '?', /* U+B0CA */
+      '?', /* U+B0CB */
+      '?', /* U+B0CC */
+      '?', /* U+B0CD */
+      '?', /* U+B0CE */
+      '?', /* U+B0CF */
+      '?', /* U+B0D0 */
+      '?', /* U+B0D1 */
+      '?', /* U+B0D2 */
+      '?', /* U+B0D3 */
+      '?', /* U+B0D4 */
+      '?', /* U+B0D5 */
+      '?', /* U+B0D6 */
+      '?', /* U+B0D7 */
+      '?', /* U+B0D8 */
+      '?', /* U+B0D9 */
+      '?', /* U+B0DA */
+      '?', /* U+B0DB */
+      '?', /* U+B0DC */
+      '?', /* U+B0DD */
+      '?', /* U+B0DE */
+      '?', /* U+B0DF */
+      '?', /* U+B0E0 */
+      '?', /* U+B0E1 */
+      '?', /* U+B0E2 */
+      '?', /* U+B0E3 */
+      '?', /* U+B0E4 */
+      '?', /* U+B0E5 */
+      '?', /* U+B0E6 */
+      '?', /* U+B0E7 */
+      '?', /* U+B0E8 */
+      '?', /* U+B0E9 */
+      '?', /* U+B0EA */
+      '?', /* U+B0EB */
+      '?', /* U+B0EC */
+      '?', /* U+B0ED */
+      '?', /* U+B0EE */
+      '?', /* U+B0EF */
+      '?', /* U+B0F0 */
+      '?', /* U+B0F1 */
+      '?', /* U+B0F2 */
+      '?', /* U+B0F3 */
+      '?', /* U+B0F4 */
+      '?', /* U+B0F5 */
+      '?', /* U+B0F6 */
+      '?', /* U+B0F7 */
+      '?', /* U+B0F8 */
+      '?', /* U+B0F9 */
+      '?', /* U+B0FA */
+      '?', /* U+B0FB */
+      '?', /* U+B0FC */
+      '?', /* U+B0FD */
+      '?', /* U+B0FE */
+      '?', /* U+B0FF */
+      '?', /* U+B100 */
+      '?', /* U+B101 */
+      '?', /* U+B102 */
+      '?', /* U+B103 */
+      '?', /* U+B104 */
+      '?', /* U+B105 */
+      '?', /* U+B106 */
+      '?', /* U+B107 */
+      '?', /* U+B108 */
+      '?', /* U+B109 */
+      '?', /* U+B10A */
+      '?', /* U+B10B */
+      '?', /* U+B10C */
+      '?', /* U+B10D */
+      '?', /* U+B10E */
+      '?', /* U+B10F */
+      '?', /* U+B110 */
+      '?', /* U+B111 */
+      '?', /* U+B112 */
+      '?', /* U+B113 */
+      '?', /* U+B114 */
+      '?', /* U+B115 */
+      '?', /* U+B116 */
+      '?', /* U+B117 */
+      '?', /* U+B118 */
+      '?', /* U+B119 */
+      '?', /* U+B11A */
+      '?', /* U+B11B */
+      '?', /* U+B11C */
+      '?', /* U+B11D */
+      '?', /* U+B11E */
+      '?', /* U+B11F */
+      '?', /* U+B120 */
+      '?', /* U+B121 */
+      '?', /* U+B122 */
+      '?', /* U+B123 */
+      '?', /* U+B124 */
+      '?', /* U+B125 */
+      '?', /* U+B126 */
+      '?', /* U+B127 */
+      '?', /* U+B128 */
+      '?', /* U+B129 */
+      '?', /* U+B12A */
+      '?', /* U+B12B */
+      '?', /* U+B12C */
+      '?', /* U+B12D */
+      '?', /* U+B12E */
+      '?', /* U+B12F */
+      '?', /* U+B130 */
+      '?', /* U+B131 */
+      '?', /* U+B132 */
+      '?', /* U+B133 */
+      '?', /* U+B134 */
+      '?', /* U+B135 */
+      '?', /* U+B136 */
+      '?', /* U+B137 */
+      '?', /* U+B138 */
+      '?', /* U+B139 */
+      '?', /* U+B13A */
+      '?', /* U+B13B */
+      '?', /* U+B13C */
+      '?', /* U+B13D */
+      '?', /* U+B13E */
+      '?', /* U+B13F */
+      '?', /* U+B140 */
+      '?', /* U+B141 */
+      '?', /* U+B142 */
+      '?', /* U+B143 */
+      '?', /* U+B144 */
+      '?', /* U+B145 */
+      '?', /* U+B146 */
+      '?', /* U+B147 */
+      '?', /* U+B148 */
+      '?', /* U+B149 */
+      '?', /* U+B14A */
+      '?', /* U+B14B */
+      '?', /* U+B14C */
+      '?', /* U+B14D */
+      '?', /* U+B14E */
+      '?', /* U+B14F */
+      '?', /* U+B150 */
+      '?', /* U+B151 */
+      '?', /* U+B152 */
+      '?', /* U+B153 */
+      '?', /* U+B154 */
+      '?', /* U+B155 */
+      '?', /* U+B156 */
+      '?', /* U+B157 */
+      '?', /* U+B158 */
+      '?', /* U+B159 */
+      '?', /* U+B15A */
+      '?', /* U+B15B */
+      '?', /* U+B15C */
+      '?', /* U+B15D */
+      '?', /* U+B15E */
+      '?', /* U+B15F */
+      '?', /* U+B160 */
+      '?', /* U+B161 */
+      '?', /* U+B162 */
+      '?', /* U+B163 */
+      '?', /* U+B164 */
+      '?', /* U+B165 */
+      '?', /* U+B166 */
+      '?', /* U+B167 */
+      '?', /* U+B168 */
+      '?', /* U+B169 */
+      '?', /* U+B16A */
+      '?', /* U+B16B */
+      '?', /* U+B16C */
+      '?', /* U+B16D */
+      '?', /* U+B16E */
+      '?', /* U+B16F */
+      '?', /* U+B170 */
+      '?', /* U+B171 */
+      '?', /* U+B172 */
+      '?', /* U+B173 */
+      '?', /* U+B174 */
+      '?', /* U+B175 */
+      '?', /* U+B176 */
+      '?', /* U+B177 */
+      '?', /* U+B178 */
+      '?', /* U+B179 */
+      '?', /* U+B17A */
+      '?', /* U+B17B */
+      '?', /* U+B17C */
+      '?', /* U+B17D */
+      '?', /* U+B17E */
+      '?', /* U+B17F */
+      '?', /* U+B180 */
+      '?', /* U+B181 */
+      '?', /* U+B182 */
+      '?', /* U+B183 */
+      '?', /* U+B184 */
+      '?', /* U+B185 */
+      '?', /* U+B186 */
+      '?', /* U+B187 */
+      '?', /* U+B188 */
+      '?', /* U+B189 */
+      '?', /* U+B18A */
+      '?', /* U+B18B */
+      '?', /* U+B18C */
+      '?', /* U+B18D */
+      '?', /* U+B18E */
+      '?', /* U+B18F */
+      '?', /* U+B190 */
+      '?', /* U+B191 */
+      '?', /* U+B192 */
+      '?', /* U+B193 */
+      '?', /* U+B194 */
+      '?', /* U+B195 */
+      '?', /* U+B196 */
+      '?', /* U+B197 */
+      '?', /* U+B198 */
+      '?', /* U+B199 */
+      '?', /* U+B19A */
+      '?', /* U+B19B */
+      '?', /* U+B19C */
+      '?', /* U+B19D */
+      '?', /* U+B19E */
+      '?', /* U+B19F */
+      '?', /* U+B1A0 */
+      '?', /* U+B1A1 */
+      '?', /* U+B1A2 */
+      '?', /* U+B1A3 */
+      '?', /* U+B1A4 */
+      '?', /* U+B1A5 */
+      '?', /* U+B1A6 */
+      '?', /* U+B1A7 */
+      '?', /* U+B1A8 */
+      '?', /* U+B1A9 */
+      '?', /* U+B1AA */
+      '?', /* U+B1AB */
+      '?', /* U+B1AC */
+      '?', /* U+B1AD */
+      '?', /* U+B1AE */
+      '?', /* U+B1AF */
+      '?', /* U+B1B0 */
+      '?', /* U+B1B1 */
+      '?', /* U+B1B2 */
+      '?', /* U+B1B3 */
+      '?', /* U+B1B4 */
+      '?', /* U+B1B5 */
+      '?', /* U+B1B6 */
+      '?', /* U+B1B7 */
+      '?', /* U+B1B8 */
+      '?', /* U+B1B9 */
+      '?', /* U+B1BA */
+      '?', /* U+B1BB */
+      '?', /* U+B1BC */
+      '?', /* U+B1BD */
+      '?', /* U+B1BE */
+      '?', /* U+B1BF */
+      '?', /* U+B1C0 */
+      '?', /* U+B1C1 */
+      '?', /* U+B1C2 */
+      '?', /* U+B1C3 */
+      '?', /* U+B1C4 */
+      '?', /* U+B1C5 */
+      '?', /* U+B1C6 */
+      '?', /* U+B1C7 */
+      '?', /* U+B1C8 */
+      '?', /* U+B1C9 */
+      '?', /* U+B1CA */
+      '?', /* U+B1CB */
+      '?', /* U+B1CC */
+      '?', /* U+B1CD */
+      '?', /* U+B1CE */
+      '?', /* U+B1CF */
+      '?', /* U+B1D0 */
+      '?', /* U+B1D1 */
+      '?', /* U+B1D2 */
+      '?', /* U+B1D3 */
+      '?', /* U+B1D4 */
+      '?', /* U+B1D5 */
+      '?', /* U+B1D6 */
+      '?', /* U+B1D7 */
+      '?', /* U+B1D8 */
+      '?', /* U+B1D9 */
+      '?', /* U+B1DA */
+      '?', /* U+B1DB */
+      '?', /* U+B1DC */
+      '?', /* U+B1DD */
+      '?', /* U+B1DE */
+      '?', /* U+B1DF */
+      '?', /* U+B1E0 */
+      '?', /* U+B1E1 */
+      '?', /* U+B1E2 */
+      '?', /* U+B1E3 */
+      '?', /* U+B1E4 */
+      '?', /* U+B1E5 */
+      '?', /* U+B1E6 */
+      '?', /* U+B1E7 */
+      '?', /* U+B1E8 */
+      '?', /* U+B1E9 */
+      '?', /* U+B1EA */
+      '?', /* U+B1EB */
+      '?', /* U+B1EC */
+      '?', /* U+B1ED */
+      '?', /* U+B1EE */
+      '?', /* U+B1EF */
+      '?', /* U+B1F0 */
+      '?', /* U+B1F1 */
+      '?', /* U+B1F2 */
+      '?', /* U+B1F3 */
+      '?', /* U+B1F4 */
+      '?', /* U+B1F5 */
+      '?', /* U+B1F6 */
+      '?', /* U+B1F7 */
+      '?', /* U+B1F8 */
+      '?', /* U+B1F9 */
+      '?', /* U+B1FA */
+      '?', /* U+B1FB */
+      '?', /* U+B1FC */
+      '?', /* U+B1FD */
+      '?', /* U+B1FE */
+      '?', /* U+B1FF */
+      '?', /* U+B200 */
+      '?', /* U+B201 */
+      '?', /* U+B202 */
+      '?', /* U+B203 */
+      '?', /* U+B204 */
+      '?', /* U+B205 */
+      '?', /* U+B206 */
+      '?', /* U+B207 */
+      '?', /* U+B208 */
+      '?', /* U+B209 */
+      '?', /* U+B20A */
+      '?', /* U+B20B */
+      '?', /* U+B20C */
+      '?', /* U+B20D */
+      '?', /* U+B20E */
+      '?', /* U+B20F */
+      '?', /* U+B210 */
+      '?', /* U+B211 */
+      '?', /* U+B212 */
+      '?', /* U+B213 */
+      '?', /* U+B214 */
+      '?', /* U+B215 */
+      '?', /* U+B216 */
+      '?', /* U+B217 */
+      '?', /* U+B218 */
+      '?', /* U+B219 */
+      '?', /* U+B21A */
+      '?', /* U+B21B */
+      '?', /* U+B21C */
+      '?', /* U+B21D */
+      '?', /* U+B21E */
+      '?', /* U+B21F */
+      '?', /* U+B220 */
+      '?', /* U+B221 */
+      '?', /* U+B222 */
+      '?', /* U+B223 */
+      '?', /* U+B224 */
+      '?', /* U+B225 */
+      '?', /* U+B226 */
+      '?', /* U+B227 */
+      '?', /* U+B228 */
+      '?', /* U+B229 */
+      '?', /* U+B22A */
+      '?', /* U+B22B */
+      '?', /* U+B22C */
+      '?', /* U+B22D */
+      '?', /* U+B22E */
+      '?', /* U+B22F */
+      '?', /* U+B230 */
+      '?', /* U+B231 */
+      '?', /* U+B232 */
+      '?', /* U+B233 */
+      '?', /* U+B234 */
+      '?', /* U+B235 */
+      '?', /* U+B236 */
+      '?', /* U+B237 */
+      '?', /* U+B238 */
+      '?', /* U+B239 */
+      '?', /* U+B23A */
+      '?', /* U+B23B */
+      '?', /* U+B23C */
+      '?', /* U+B23D */
+      '?', /* U+B23E */
+      '?', /* U+B23F */
+      '?', /* U+B240 */
+      '?', /* U+B241 */
+      '?', /* U+B242 */
+      '?', /* U+B243 */
+      '?', /* U+B244 */
+      '?', /* U+B245 */
+      '?', /* U+B246 */
+      '?', /* U+B247 */
+      '?', /* U+B248 */
+      '?', /* U+B249 */
+      '?', /* U+B24A */
+      '?', /* U+B24B */
+      '?', /* U+B24C */
+      '?', /* U+B24D */
+      '?', /* U+B24E */
+      '?', /* U+B24F */
+      '?', /* U+B250 */
+      '?', /* U+B251 */
+      '?', /* U+B252 */
+      '?', /* U+B253 */
+      '?', /* U+B254 */
+      '?', /* U+B255 */
+      '?', /* U+B256 */
+      '?', /* U+B257 */
+      '?', /* U+B258 */
+      '?', /* U+B259 */
+      '?', /* U+B25A */
+      '?', /* U+B25B */
+      '?', /* U+B25C */
+      '?', /* U+B25D */
+      '?', /* U+B25E */
+      '?', /* U+B25F */
+      '?', /* U+B260 */
+      '?', /* U+B261 */
+      '?', /* U+B262 */
+      '?', /* U+B263 */
+      '?', /* U+B264 */
+      '?', /* U+B265 */
+      '?', /* U+B266 */
+      '?', /* U+B267 */
+      '?', /* U+B268 */
+      '?', /* U+B269 */
+      '?', /* U+B26A */
+      '?', /* U+B26B */
+      '?', /* U+B26C */
+      '?', /* U+B26D */
+      '?', /* U+B26E */
+      '?', /* U+B26F */
+      '?', /* U+B270 */
+      '?', /* U+B271 */
+      '?', /* U+B272 */
+      '?', /* U+B273 */
+      '?', /* U+B274 */
+      '?', /* U+B275 */
+      '?', /* U+B276 */
+      '?', /* U+B277 */
+      '?', /* U+B278 */
+      '?', /* U+B279 */
+      '?', /* U+B27A */
+      '?', /* U+B27B */
+      '?', /* U+B27C */
+      '?', /* U+B27D */
+      '?', /* U+B27E */
+      '?', /* U+B27F */
+      '?', /* U+B280 */
+      '?', /* U+B281 */
+      '?', /* U+B282 */
+      '?', /* U+B283 */
+      '?', /* U+B284 */
+      '?', /* U+B285 */
+      '?', /* U+B286 */
+      '?', /* U+B287 */
+      '?', /* U+B288 */
+      '?', /* U+B289 */
+      '?', /* U+B28A */
+      '?', /* U+B28B */
+      '?', /* U+B28C */
+      '?', /* U+B28D */
+      '?', /* U+B28E */
+      '?', /* U+B28F */
+      '?', /* U+B290 */
+      '?', /* U+B291 */
+      '?', /* U+B292 */
+      '?', /* U+B293 */
+      '?', /* U+B294 */
+      '?', /* U+B295 */
+      '?', /* U+B296 */
+      '?', /* U+B297 */
+      '?', /* U+B298 */
+      '?', /* U+B299 */
+      '?', /* U+B29A */
+      '?', /* U+B29B */
+      '?', /* U+B29C */
+      '?', /* U+B29D */
+      '?', /* U+B29E */
+      '?', /* U+B29F */
+      '?', /* U+B2A0 */
+      '?', /* U+B2A1 */
+      '?', /* U+B2A2 */
+      '?', /* U+B2A3 */
+      '?', /* U+B2A4 */
+      '?', /* U+B2A5 */
+      '?', /* U+B2A6 */
+      '?', /* U+B2A7 */
+      '?', /* U+B2A8 */
+      '?', /* U+B2A9 */
+      '?', /* U+B2AA */
+      '?', /* U+B2AB */
+      '?', /* U+B2AC */
+      '?', /* U+B2AD */
+      '?', /* U+B2AE */
+      '?', /* U+B2AF */
+      '?', /* U+B2B0 */
+      '?', /* U+B2B1 */
+      '?', /* U+B2B2 */
+      '?', /* U+B2B3 */
+      '?', /* U+B2B4 */
+      '?', /* U+B2B5 */
+      '?', /* U+B2B6 */
+      '?', /* U+B2B7 */
+      '?', /* U+B2B8 */
+      '?', /* U+B2B9 */
+      '?', /* U+B2BA */
+      '?', /* U+B2BB */
+      '?', /* U+B2BC */
+      '?', /* U+B2BD */
+      '?', /* U+B2BE */
+      '?', /* U+B2BF */
+      '?', /* U+B2C0 */
+      '?', /* U+B2C1 */
+      '?', /* U+B2C2 */
+      '?', /* U+B2C3 */
+      '?', /* U+B2C4 */
+      '?', /* U+B2C5 */
+      '?', /* U+B2C6 */
+      '?', /* U+B2C7 */
+      '?', /* U+B2C8 */
+      '?', /* U+B2C9 */
+      '?', /* U+B2CA */
+      '?', /* U+B2CB */
+      '?', /* U+B2CC */
+      '?', /* U+B2CD */
+      '?', /* U+B2CE */
+      '?', /* U+B2CF */
+      '?', /* U+B2D0 */
+      '?', /* U+B2D1 */
+      '?', /* U+B2D2 */
+      '?', /* U+B2D3 */
+      '?', /* U+B2D4 */
+      '?', /* U+B2D5 */
+      '?', /* U+B2D6 */
+      '?', /* U+B2D7 */
+      '?', /* U+B2D8 */
+      '?', /* U+B2D9 */
+      '?', /* U+B2DA */
+      '?', /* U+B2DB */
+      '?', /* U+B2DC */
+      '?', /* U+B2DD */
+      '?', /* U+B2DE */
+      '?', /* U+B2DF */
+      '?', /* U+B2E0 */
+      '?', /* U+B2E1 */
+      '?', /* U+B2E2 */
+      '?', /* U+B2E3 */
+      '?', /* U+B2E4 */
+      '?', /* U+B2E5 */
+      '?', /* U+B2E6 */
+      '?', /* U+B2E7 */
+      '?', /* U+B2E8 */
+      '?', /* U+B2E9 */
+      '?', /* U+B2EA */
+      '?', /* U+B2EB */
+      '?', /* U+B2EC */
+      '?', /* U+B2ED */
+      '?', /* U+B2EE */
+      '?', /* U+B2EF */
+      '?', /* U+B2F0 */
+      '?', /* U+B2F1 */
+      '?', /* U+B2F2 */
+      '?', /* U+B2F3 */
+      '?', /* U+B2F4 */
+      '?', /* U+B2F5 */
+      '?', /* U+B2F6 */
+      '?', /* U+B2F7 */
+      '?', /* U+B2F8 */
+      '?', /* U+B2F9 */
+      '?', /* U+B2FA */
+      '?', /* U+B2FB */
+      '?', /* U+B2FC */
+      '?', /* U+B2FD */
+      '?', /* U+B2FE */
+      '?', /* U+B2FF */
+      '?', /* U+B300 */
+      '?', /* U+B301 */
+      '?', /* U+B302 */
+      '?', /* U+B303 */
+      '?', /* U+B304 */
+      '?', /* U+B305 */
+      '?', /* U+B306 */
+      '?', /* U+B307 */
+      '?', /* U+B308 */
+      '?', /* U+B309 */
+      '?', /* U+B30A */
+      '?', /* U+B30B */
+      '?', /* U+B30C */
+      '?', /* U+B30D */
+      '?', /* U+B30E */
+      '?', /* U+B30F */
+      '?', /* U+B310 */
+      '?', /* U+B311 */
+      '?', /* U+B312 */
+      '?', /* U+B313 */
+      '?', /* U+B314 */
+      '?', /* U+B315 */
+      '?', /* U+B316 */
+      '?', /* U+B317 */
+      '?', /* U+B318 */
+      '?', /* U+B319 */
+      '?', /* U+B31A */
+      '?', /* U+B31B */
+      '?', /* U+B31C */
+      '?', /* U+B31D */
+      '?', /* U+B31E */
+      '?', /* U+B31F */
+      '?', /* U+B320 */
+      '?', /* U+B321 */
+      '?', /* U+B322 */
+      '?', /* U+B323 */
+      '?', /* U+B324 */
+      '?', /* U+B325 */
+      '?', /* U+B326 */
+      '?', /* U+B327 */
+      '?', /* U+B328 */
+      '?', /* U+B329 */
+      '?', /* U+B32A */
+      '?', /* U+B32B */
+      '?', /* U+B32C */
+      '?', /* U+B32D */
+      '?', /* U+B32E */
+      '?', /* U+B32F */
+      '?', /* U+B330 */
+      '?', /* U+B331 */
+      '?', /* U+B332 */
+      '?', /* U+B333 */
+      '?', /* U+B334 */
+      '?', /* U+B335 */
+      '?', /* U+B336 */
+      '?', /* U+B337 */
+      '?', /* U+B338 */
+      '?', /* U+B339 */
+      '?', /* U+B33A */
+      '?', /* U+B33B */
+      '?', /* U+B33C */
+      '?', /* U+B33D */
+      '?', /* U+B33E */
+      '?', /* U+B33F */
+      '?', /* U+B340 */
+      '?', /* U+B341 */
+      '?', /* U+B342 */
+      '?', /* U+B343 */
+      '?', /* U+B344 */
+      '?', /* U+B345 */
+      '?', /* U+B346 */
+      '?', /* U+B347 */
+      '?', /* U+B348 */
+      '?', /* U+B349 */
+      '?', /* U+B34A */
+      '?', /* U+B34B */
+      '?', /* U+B34C */
+      '?', /* U+B34D */
+      '?', /* U+B34E */
+      '?', /* U+B34F */
+      '?', /* U+B350 */
+      '?', /* U+B351 */
+      '?', /* U+B352 */
+      '?', /* U+B353 */
+      '?', /* U+B354 */
+      '?', /* U+B355 */
+      '?', /* U+B356 */
+      '?', /* U+B357 */
+      '?', /* U+B358 */
+      '?', /* U+B359 */
+      '?', /* U+B35A */
+      '?', /* U+B35B */
+      '?', /* U+B35C */
+      '?', /* U+B35D */
+      '?', /* U+B35E */
+      '?', /* U+B35F */
+      '?', /* U+B360 */
+      '?', /* U+B361 */
+      '?', /* U+B362 */
+      '?', /* U+B363 */
+      '?', /* U+B364 */
+      '?', /* U+B365 */
+      '?', /* U+B366 */
+      '?', /* U+B367 */
+      '?', /* U+B368 */
+      '?', /* U+B369 */
+      '?', /* U+B36A */
+      '?', /* U+B36B */
+      '?', /* U+B36C */
+      '?', /* U+B36D */
+      '?', /* U+B36E */
+      '?', /* U+B36F */
+      '?', /* U+B370 */
+      '?', /* U+B371 */
+      '?', /* U+B372 */
+      '?', /* U+B373 */
+      '?', /* U+B374 */
+      '?', /* U+B375 */
+      '?', /* U+B376 */
+      '?', /* U+B377 */
+      '?', /* U+B378 */
+      '?', /* U+B379 */
+      '?', /* U+B37A */
+      '?', /* U+B37B */
+      '?', /* U+B37C */
+      '?', /* U+B37D */
+      '?', /* U+B37E */
+      '?', /* U+B37F */
+      '?', /* U+B380 */
+      '?', /* U+B381 */
+      '?', /* U+B382 */
+      '?', /* U+B383 */
+      '?', /* U+B384 */
+      '?', /* U+B385 */
+      '?', /* U+B386 */
+      '?', /* U+B387 */
+      '?', /* U+B388 */
+      '?', /* U+B389 */
+      '?', /* U+B38A */
+      '?', /* U+B38B */
+      '?', /* U+B38C */
+      '?', /* U+B38D */
+      '?', /* U+B38E */
+      '?', /* U+B38F */
+      '?', /* U+B390 */
+      '?', /* U+B391 */
+      '?', /* U+B392 */
+      '?', /* U+B393 */
+      '?', /* U+B394 */
+      '?', /* U+B395 */
+      '?', /* U+B396 */
+      '?', /* U+B397 */
+      '?', /* U+B398 */
+      '?', /* U+B399 */
+      '?', /* U+B39A */
+      '?', /* U+B39B */
+      '?', /* U+B39C */
+      '?', /* U+B39D */
+      '?', /* U+B39E */
+      '?', /* U+B39F */
+      '?', /* U+B3A0 */
+      '?', /* U+B3A1 */
+      '?', /* U+B3A2 */
+      '?', /* U+B3A3 */
+      '?', /* U+B3A4 */
+      '?', /* U+B3A5 */
+      '?', /* U+B3A6 */
+      '?', /* U+B3A7 */
+      '?', /* U+B3A8 */
+      '?', /* U+B3A9 */
+      '?', /* U+B3AA */
+      '?', /* U+B3AB */
+      '?', /* U+B3AC */
+      '?', /* U+B3AD */
+      '?', /* U+B3AE */
+      '?', /* U+B3AF */
+      '?', /* U+B3B0 */
+      '?', /* U+B3B1 */
+      '?', /* U+B3B2 */
+      '?', /* U+B3B3 */
+      '?', /* U+B3B4 */
+      '?', /* U+B3B5 */
+      '?', /* U+B3B6 */
+      '?', /* U+B3B7 */
+      '?', /* U+B3B8 */
+      '?', /* U+B3B9 */
+      '?', /* U+B3BA */
+      '?', /* U+B3BB */
+      '?', /* U+B3BC */
+      '?', /* U+B3BD */
+      '?', /* U+B3BE */
+      '?', /* U+B3BF */
+      '?', /* U+B3C0 */
+      '?', /* U+B3C1 */
+      '?', /* U+B3C2 */
+      '?', /* U+B3C3 */
+      '?', /* U+B3C4 */
+      '?', /* U+B3C5 */
+      '?', /* U+B3C6 */
+      '?', /* U+B3C7 */
+      '?', /* U+B3C8 */
+      '?', /* U+B3C9 */
+      '?', /* U+B3CA */
+      '?', /* U+B3CB */
+      '?', /* U+B3CC */
+      '?', /* U+B3CD */
+      '?', /* U+B3CE */
+      '?', /* U+B3CF */
+      '?', /* U+B3D0 */
+      '?', /* U+B3D1 */
+      '?', /* U+B3D2 */
+      '?', /* U+B3D3 */
+      '?', /* U+B3D4 */
+      '?', /* U+B3D5 */
+      '?', /* U+B3D6 */
+      '?', /* U+B3D7 */
+      '?', /* U+B3D8 */
+      '?', /* U+B3D9 */
+      '?', /* U+B3DA */
+      '?', /* U+B3DB */
+      '?', /* U+B3DC */
+      '?', /* U+B3DD */
+      '?', /* U+B3DE */
+      '?', /* U+B3DF */
+      '?', /* U+B3E0 */
+      '?', /* U+B3E1 */
+      '?', /* U+B3E2 */
+      '?', /* U+B3E3 */
+      '?', /* U+B3E4 */
+      '?', /* U+B3E5 */
+      '?', /* U+B3E6 */
+      '?', /* U+B3E7 */
+      '?', /* U+B3E8 */
+      '?', /* U+B3E9 */
+      '?', /* U+B3EA */
+      '?', /* U+B3EB */
+      '?', /* U+B3EC */
+      '?', /* U+B3ED */
+      '?', /* U+B3EE */
+      '?', /* U+B3EF */
+      '?', /* U+B3F0 */
+      '?', /* U+B3F1 */
+      '?', /* U+B3F2 */
+      '?', /* U+B3F3 */
+      '?', /* U+B3F4 */
+      '?', /* U+B3F5 */
+      '?', /* U+B3F6 */
+      '?', /* U+B3F7 */
+      '?', /* U+B3F8 */
+      '?', /* U+B3F9 */
+      '?', /* U+B3FA */
+      '?', /* U+B3FB */
+      '?', /* U+B3FC */
+      '?', /* U+B3FD */
+      '?', /* U+B3FE */
+      '?', /* U+B3FF */
+      '?', /* U+B400 */
+      '?', /* U+B401 */
+      '?', /* U+B402 */
+      '?', /* U+B403 */
+      '?', /* U+B404 */
+      '?', /* U+B405 */
+      '?', /* U+B406 */
+      '?', /* U+B407 */
+      '?', /* U+B408 */
+      '?', /* U+B409 */
+      '?', /* U+B40A */
+      '?', /* U+B40B */
+      '?', /* U+B40C */
+      '?', /* U+B40D */
+      '?', /* U+B40E */
+      '?', /* U+B40F */
+      '?', /* U+B410 */
+      '?', /* U+B411 */
+      '?', /* U+B412 */
+      '?', /* U+B413 */
+      '?', /* U+B414 */
+      '?', /* U+B415 */
+      '?', /* U+B416 */
+      '?', /* U+B417 */
+      '?', /* U+B418 */
+      '?', /* U+B419 */
+      '?', /* U+B41A */
+      '?', /* U+B41B */
+      '?', /* U+B41C */
+      '?', /* U+B41D */
+      '?', /* U+B41E */
+      '?', /* U+B41F */
+      '?', /* U+B420 */
+      '?', /* U+B421 */
+      '?', /* U+B422 */
+      '?', /* U+B423 */
+      '?', /* U+B424 */
+      '?', /* U+B425 */
+      '?', /* U+B426 */
+      '?', /* U+B427 */
+      '?', /* U+B428 */
+      '?', /* U+B429 */
+      '?', /* U+B42A */
+      '?', /* U+B42B */
+      '?', /* U+B42C */
+      '?', /* U+B42D */
+      '?', /* U+B42E */
+      '?', /* U+B42F */
+      '?', /* U+B430 */
+      '?', /* U+B431 */
+      '?', /* U+B432 */
+      '?', /* U+B433 */
+      '?', /* U+B434 */
+      '?', /* U+B435 */
+      '?', /* U+B436 */
+      '?', /* U+B437 */
+      '?', /* U+B438 */
+      '?', /* U+B439 */
+      '?', /* U+B43A */
+      '?', /* U+B43B */
+      '?', /* U+B43C */
+      '?', /* U+B43D */
+      '?', /* U+B43E */
+      '?', /* U+B43F */
+      '?', /* U+B440 */
+      '?', /* U+B441 */
+      '?', /* U+B442 */
+      '?', /* U+B443 */
+      '?', /* U+B444 */
+      '?', /* U+B445 */
+      '?', /* U+B446 */
+      '?', /* U+B447 */
+      '?', /* U+B448 */
+      '?', /* U+B449 */
+      '?', /* U+B44A */
+      '?', /* U+B44B */
+      '?', /* U+B44C */
+      '?', /* U+B44D */
+      '?', /* U+B44E */
+      '?', /* U+B44F */
+      '?', /* U+B450 */
+      '?', /* U+B451 */
+      '?', /* U+B452 */
+      '?', /* U+B453 */
+      '?', /* U+B454 */
+      '?', /* U+B455 */
+      '?', /* U+B456 */
+      '?', /* U+B457 */
+      '?', /* U+B458 */
+      '?', /* U+B459 */
+      '?', /* U+B45A */
+      '?', /* U+B45B */
+      '?', /* U+B45C */
+      '?', /* U+B45D */
+      '?', /* U+B45E */
+      '?', /* U+B45F */
+      '?', /* U+B460 */
+      '?', /* U+B461 */
+      '?', /* U+B462 */
+      '?', /* U+B463 */
+      '?', /* U+B464 */
+      '?', /* U+B465 */
+      '?', /* U+B466 */
+      '?', /* U+B467 */
+      '?', /* U+B468 */
+      '?', /* U+B469 */
+      '?', /* U+B46A */
+      '?', /* U+B46B */
+      '?', /* U+B46C */
+      '?', /* U+B46D */
+      '?', /* U+B46E */
+      '?', /* U+B46F */
+      '?', /* U+B470 */
+      '?', /* U+B471 */
+      '?', /* U+B472 */
+      '?', /* U+B473 */
+      '?', /* U+B474 */
+      '?', /* U+B475 */
+      '?', /* U+B476 */
+      '?', /* U+B477 */
+      '?', /* U+B478 */
+      '?', /* U+B479 */
+      '?', /* U+B47A */
+      '?', /* U+B47B */
+      '?', /* U+B47C */
+      '?', /* U+B47D */
+      '?', /* U+B47E */
+      '?', /* U+B47F */
+      '?', /* U+B480 */
+      '?', /* U+B481 */
+      '?', /* U+B482 */
+      '?', /* U+B483 */
+      '?', /* U+B484 */
+      '?', /* U+B485 */
+      '?', /* U+B486 */
+      '?', /* U+B487 */
+      '?', /* U+B488 */
+      '?', /* U+B489 */
+      '?', /* U+B48A */
+      '?', /* U+B48B */
+      '?', /* U+B48C */
+      '?', /* U+B48D */
+      '?', /* U+B48E */
+      '?', /* U+B48F */
+      '?', /* U+B490 */
+      '?', /* U+B491 */
+      '?', /* U+B492 */
+      '?', /* U+B493 */
+      '?', /* U+B494 */
+      '?', /* U+B495 */
+      '?', /* U+B496 */
+      '?', /* U+B497 */
+      '?', /* U+B498 */
+      '?', /* U+B499 */
+      '?', /* U+B49A */
+      '?', /* U+B49B */
+      '?', /* U+B49C */
+      '?', /* U+B49D */
+      '?', /* U+B49E */
+      '?', /* U+B49F */
+      '?', /* U+B4A0 */
+      '?', /* U+B4A1 */
+      '?', /* U+B4A2 */
+      '?', /* U+B4A3 */
+      '?', /* U+B4A4 */
+      '?', /* U+B4A5 */
+      '?', /* U+B4A6 */
+      '?', /* U+B4A7 */
+      '?', /* U+B4A8 */
+      '?', /* U+B4A9 */
+      '?', /* U+B4AA */
+      '?', /* U+B4AB */
+      '?', /* U+B4AC */
+      '?', /* U+B4AD */
+      '?', /* U+B4AE */
+      '?', /* U+B4AF */
+      '?', /* U+B4B0 */
+      '?', /* U+B4B1 */
+      '?', /* U+B4B2 */
+      '?', /* U+B4B3 */
+      '?', /* U+B4B4 */
+      '?', /* U+B4B5 */
+      '?', /* U+B4B6 */
+      '?', /* U+B4B7 */
+      '?', /* U+B4B8 */
+      '?', /* U+B4B9 */
+      '?', /* U+B4BA */
+      '?', /* U+B4BB */
+      '?', /* U+B4BC */
+      '?', /* U+B4BD */
+      '?', /* U+B4BE */
+      '?', /* U+B4BF */
+      '?', /* U+B4C0 */
+      '?', /* U+B4C1 */
+      '?', /* U+B4C2 */
+      '?', /* U+B4C3 */
+      '?', /* U+B4C4 */
+      '?', /* U+B4C5 */
+      '?', /* U+B4C6 */
+      '?', /* U+B4C7 */
+      '?', /* U+B4C8 */
+      '?', /* U+B4C9 */
+      '?', /* U+B4CA */
+      '?', /* U+B4CB */
+      '?', /* U+B4CC */
+      '?', /* U+B4CD */
+      '?', /* U+B4CE */
+      '?', /* U+B4CF */
+      '?', /* U+B4D0 */
+      '?', /* U+B4D1 */
+      '?', /* U+B4D2 */
+      '?', /* U+B4D3 */
+      '?', /* U+B4D4 */
+      '?', /* U+B4D5 */
+      '?', /* U+B4D6 */
+      '?', /* U+B4D7 */
+      '?', /* U+B4D8 */
+      '?', /* U+B4D9 */
+      '?', /* U+B4DA */
+      '?', /* U+B4DB */
+      '?', /* U+B4DC */
+      '?', /* U+B4DD */
+      '?', /* U+B4DE */
+      '?', /* U+B4DF */
+      '?', /* U+B4E0 */
+      '?', /* U+B4E1 */
+      '?', /* U+B4E2 */
+      '?', /* U+B4E3 */
+      '?', /* U+B4E4 */
+      '?', /* U+B4E5 */
+      '?', /* U+B4E6 */
+      '?', /* U+B4E7 */
+      '?', /* U+B4E8 */
+      '?', /* U+B4E9 */
+      '?', /* U+B4EA */
+      '?', /* U+B4EB */
+      '?', /* U+B4EC */
+      '?', /* U+B4ED */
+      '?', /* U+B4EE */
+      '?', /* U+B4EF */
+      '?', /* U+B4F0 */
+      '?', /* U+B4F1 */
+      '?', /* U+B4F2 */
+      '?', /* U+B4F3 */
+      '?', /* U+B4F4 */
+      '?', /* U+B4F5 */
+      '?', /* U+B4F6 */
+      '?', /* U+B4F7 */
+      '?', /* U+B4F8 */
+      '?', /* U+B4F9 */
+      '?', /* U+B4FA */
+      '?', /* U+B4FB */
+      '?', /* U+B4FC */
+      '?', /* U+B4FD */
+      '?', /* U+B4FE */
+      '?', /* U+B4FF */
+      '?', /* U+B500 */
+      '?', /* U+B501 */
+      '?', /* U+B502 */
+      '?', /* U+B503 */
+      '?', /* U+B504 */
+      '?', /* U+B505 */
+      '?', /* U+B506 */
+      '?', /* U+B507 */
+      '?', /* U+B508 */
+      '?', /* U+B509 */
+      '?', /* U+B50A */
+      '?', /* U+B50B */
+      '?', /* U+B50C */
+      '?', /* U+B50D */
+      '?', /* U+B50E */
+      '?', /* U+B50F */
+      '?', /* U+B510 */
+      '?', /* U+B511 */
+      '?', /* U+B512 */
+      '?', /* U+B513 */
+      '?', /* U+B514 */
+      '?', /* U+B515 */
+      '?', /* U+B516 */
+      '?', /* U+B517 */
+      '?', /* U+B518 */
+      '?', /* U+B519 */
+      '?', /* U+B51A */
+      '?', /* U+B51B */
+      '?', /* U+B51C */
+      '?', /* U+B51D */
+      '?', /* U+B51E */
+      '?', /* U+B51F */
+      '?', /* U+B520 */
+      '?', /* U+B521 */
+      '?', /* U+B522 */
+      '?', /* U+B523 */
+      '?', /* U+B524 */
+      '?', /* U+B525 */
+      '?', /* U+B526 */
+      '?', /* U+B527 */
+      '?', /* U+B528 */
+      '?', /* U+B529 */
+      '?', /* U+B52A */
+      '?', /* U+B52B */
+      '?', /* U+B52C */
+      '?', /* U+B52D */
+      '?', /* U+B52E */
+      '?', /* U+B52F */
+      '?', /* U+B530 */
+      '?', /* U+B531 */
+      '?', /* U+B532 */
+      '?', /* U+B533 */
+      '?', /* U+B534 */
+      '?', /* U+B535 */
+      '?', /* U+B536 */
+      '?', /* U+B537 */
+      '?', /* U+B538 */
+      '?', /* U+B539 */
+      '?', /* U+B53A */
+      '?', /* U+B53B */
+      '?', /* U+B53C */
+      '?', /* U+B53D */
+      '?', /* U+B53E */
+      '?', /* U+B53F */
+      '?', /* U+B540 */
+      '?', /* U+B541 */
+      '?', /* U+B542 */
+      '?', /* U+B543 */
+      '?', /* U+B544 */
+      '?', /* U+B545 */
+      '?', /* U+B546 */
+      '?', /* U+B547 */
+      '?', /* U+B548 */
+      '?', /* U+B549 */
+      '?', /* U+B54A */
+      '?', /* U+B54B */
+      '?', /* U+B54C */
+      '?', /* U+B54D */
+      '?', /* U+B54E */
+      '?', /* U+B54F */
+      '?', /* U+B550 */
+      '?', /* U+B551 */
+      '?', /* U+B552 */
+      '?', /* U+B553 */
+      '?', /* U+B554 */
+      '?', /* U+B555 */
+      '?', /* U+B556 */
+      '?', /* U+B557 */
+      '?', /* U+B558 */
+      '?', /* U+B559 */
+      '?', /* U+B55A */
+      '?', /* U+B55B */
+      '?', /* U+B55C */
+      '?', /* U+B55D */
+      '?', /* U+B55E */
+      '?', /* U+B55F */
+      '?', /* U+B560 */
+      '?', /* U+B561 */
+      '?', /* U+B562 */
+      '?', /* U+B563 */
+      '?', /* U+B564 */
+      '?', /* U+B565 */
+      '?', /* U+B566 */
+      '?', /* U+B567 */
+      '?', /* U+B568 */
+      '?', /* U+B569 */
+      '?', /* U+B56A */
+      '?', /* U+B56B */
+      '?', /* U+B56C */
+      '?', /* U+B56D */
+      '?', /* U+B56E */
+      '?', /* U+B56F */
+      '?', /* U+B570 */
+      '?', /* U+B571 */
+      '?', /* U+B572 */
+      '?', /* U+B573 */
+      '?', /* U+B574 */
+      '?', /* U+B575 */
+      '?', /* U+B576 */
+      '?', /* U+B577 */
+      '?', /* U+B578 */
+      '?', /* U+B579 */
+      '?', /* U+B57A */
+      '?', /* U+B57B */
+      '?', /* U+B57C */
+      '?', /* U+B57D */
+      '?', /* U+B57E */
+      '?', /* U+B57F */
+      '?', /* U+B580 */
+      '?', /* U+B581 */
+      '?', /* U+B582 */
+      '?', /* U+B583 */
+      '?', /* U+B584 */
+      '?', /* U+B585 */
+      '?', /* U+B586 */
+      '?', /* U+B587 */
+      '?', /* U+B588 */
+      '?', /* U+B589 */
+      '?', /* U+B58A */
+      '?', /* U+B58B */
+      '?', /* U+B58C */
+      '?', /* U+B58D */
+      '?', /* U+B58E */
+      '?', /* U+B58F */
+      '?', /* U+B590 */
+      '?', /* U+B591 */
+      '?', /* U+B592 */
+      '?', /* U+B593 */
+      '?', /* U+B594 */
+      '?', /* U+B595 */
+      '?', /* U+B596 */
+      '?', /* U+B597 */
+      '?', /* U+B598 */
+      '?', /* U+B599 */
+      '?', /* U+B59A */
+      '?', /* U+B59B */
+      '?', /* U+B59C */
+      '?', /* U+B59D */
+      '?', /* U+B59E */
+      '?', /* U+B59F */
+      '?', /* U+B5A0 */
+      '?', /* U+B5A1 */
+      '?', /* U+B5A2 */
+      '?', /* U+B5A3 */
+      '?', /* U+B5A4 */
+      '?', /* U+B5A5 */
+      '?', /* U+B5A6 */
+      '?', /* U+B5A7 */
+      '?', /* U+B5A8 */
+      '?', /* U+B5A9 */
+      '?', /* U+B5AA */
+      '?', /* U+B5AB */
+      '?', /* U+B5AC */
+      '?', /* U+B5AD */
+      '?', /* U+B5AE */
+      '?', /* U+B5AF */
+      '?', /* U+B5B0 */
+      '?', /* U+B5B1 */
+      '?', /* U+B5B2 */
+      '?', /* U+B5B3 */
+      '?', /* U+B5B4 */
+      '?', /* U+B5B5 */
+      '?', /* U+B5B6 */
+      '?', /* U+B5B7 */
+      '?', /* U+B5B8 */
+      '?', /* U+B5B9 */
+      '?', /* U+B5BA */
+      '?', /* U+B5BB */
+      '?', /* U+B5BC */
+      '?', /* U+B5BD */
+      '?', /* U+B5BE */
+      '?', /* U+B5BF */
+      '?', /* U+B5C0 */
+      '?', /* U+B5C1 */
+      '?', /* U+B5C2 */
+      '?', /* U+B5C3 */
+      '?', /* U+B5C4 */
+      '?', /* U+B5C5 */
+      '?', /* U+B5C6 */
+      '?', /* U+B5C7 */
+      '?', /* U+B5C8 */
+      '?', /* U+B5C9 */
+      '?', /* U+B5CA */
+      '?', /* U+B5CB */
+      '?', /* U+B5CC */
+      '?', /* U+B5CD */
+      '?', /* U+B5CE */
+      '?', /* U+B5CF */
+      '?', /* U+B5D0 */
+      '?', /* U+B5D1 */
+      '?', /* U+B5D2 */
+      '?', /* U+B5D3 */
+      '?', /* U+B5D4 */
+      '?', /* U+B5D5 */
+      '?', /* U+B5D6 */
+      '?', /* U+B5D7 */
+      '?', /* U+B5D8 */
+      '?', /* U+B5D9 */
+      '?', /* U+B5DA */
+      '?', /* U+B5DB */
+      '?', /* U+B5DC */
+      '?', /* U+B5DD */
+      '?', /* U+B5DE */
+      '?', /* U+B5DF */
+      '?', /* U+B5E0 */
+      '?', /* U+B5E1 */
+      '?', /* U+B5E2 */
+      '?', /* U+B5E3 */
+      '?', /* U+B5E4 */
+      '?', /* U+B5E5 */
+      '?', /* U+B5E6 */
+      '?', /* U+B5E7 */
+      '?', /* U+B5E8 */
+      '?', /* U+B5E9 */
+      '?', /* U+B5EA */
+      '?', /* U+B5EB */
+      '?', /* U+B5EC */
+      '?', /* U+B5ED */
+      '?', /* U+B5EE */
+      '?', /* U+B5EF */
+      '?', /* U+B5F0 */
+      '?', /* U+B5F1 */
+      '?', /* U+B5F2 */
+      '?', /* U+B5F3 */
+      '?', /* U+B5F4 */
+      '?', /* U+B5F5 */
+      '?', /* U+B5F6 */
+      '?', /* U+B5F7 */
+      '?', /* U+B5F8 */
+      '?', /* U+B5F9 */
+      '?', /* U+B5FA */
+      '?', /* U+B5FB */
+      '?', /* U+B5FC */
+      '?', /* U+B5FD */
+      '?', /* U+B5FE */
+      '?', /* U+B5FF */
+      '?', /* U+B600 */
+      '?', /* U+B601 */
+      '?', /* U+B602 */
+      '?', /* U+B603 */
+      '?', /* U+B604 */
+      '?', /* U+B605 */
+      '?', /* U+B606 */
+      '?', /* U+B607 */
+      '?', /* U+B608 */
+      '?', /* U+B609 */
+      '?', /* U+B60A */
+      '?', /* U+B60B */
+      '?', /* U+B60C */
+      '?', /* U+B60D */
+      '?', /* U+B60E */
+      '?', /* U+B60F */
+      '?', /* U+B610 */
+      '?', /* U+B611 */
+      '?', /* U+B612 */
+      '?', /* U+B613 */
+      '?', /* U+B614 */
+      '?', /* U+B615 */
+      '?', /* U+B616 */
+      '?', /* U+B617 */
+      '?', /* U+B618 */
+      '?', /* U+B619 */
+      '?', /* U+B61A */
+      '?', /* U+B61B */
+      '?', /* U+B61C */
+      '?', /* U+B61D */
+      '?', /* U+B61E */
+      '?', /* U+B61F */
+      '?', /* U+B620 */
+      '?', /* U+B621 */
+      '?', /* U+B622 */
+      '?', /* U+B623 */
+      '?', /* U+B624 */
+      '?', /* U+B625 */
+      '?', /* U+B626 */
+      '?', /* U+B627 */
+      '?', /* U+B628 */
+      '?', /* U+B629 */
+      '?', /* U+B62A */
+      '?', /* U+B62B */
+      '?', /* U+B62C */
+      '?', /* U+B62D */
+      '?', /* U+B62E */
+      '?', /* U+B62F */
+      '?', /* U+B630 */
+      '?', /* U+B631 */
+      '?', /* U+B632 */
+      '?', /* U+B633 */
+      '?', /* U+B634 */
+      '?', /* U+B635 */
+      '?', /* U+B636 */
+      '?', /* U+B637 */
+      '?', /* U+B638 */
+      '?', /* U+B639 */
+      '?', /* U+B63A */
+      '?', /* U+B63B */
+      '?', /* U+B63C */
+      '?', /* U+B63D */
+      '?', /* U+B63E */
+      '?', /* U+B63F */
+      '?', /* U+B640 */
+      '?', /* U+B641 */
+      '?', /* U+B642 */
+      '?', /* U+B643 */
+      '?', /* U+B644 */
+      '?', /* U+B645 */
+      '?', /* U+B646 */
+      '?', /* U+B647 */
+      '?', /* U+B648 */
+      '?', /* U+B649 */
+      '?', /* U+B64A */
+      '?', /* U+B64B */
+      '?', /* U+B64C */
+      '?', /* U+B64D */
+      '?', /* U+B64E */
+      '?', /* U+B64F */
+      '?', /* U+B650 */
+      '?', /* U+B651 */
+      '?', /* U+B652 */
+      '?', /* U+B653 */
+      '?', /* U+B654 */
+      '?', /* U+B655 */
+      '?', /* U+B656 */
+      '?', /* U+B657 */
+      '?', /* U+B658 */
+      '?', /* U+B659 */
+      '?', /* U+B65A */
+      '?', /* U+B65B */
+      '?', /* U+B65C */
+      '?', /* U+B65D */
+      '?', /* U+B65E */
+      '?', /* U+B65F */
+      '?', /* U+B660 */
+      '?', /* U+B661 */
+      '?', /* U+B662 */
+      '?', /* U+B663 */
+      '?', /* U+B664 */
+      '?', /* U+B665 */
+      '?', /* U+B666 */
+      '?', /* U+B667 */
+      '?', /* U+B668 */
+      '?', /* U+B669 */
+      '?', /* U+B66A */
+      '?', /* U+B66B */
+      '?', /* U+B66C */
+      '?', /* U+B66D */
+      '?', /* U+B66E */
+      '?', /* U+B66F */
+      '?', /* U+B670 */
+      '?', /* U+B671 */
+      '?', /* U+B672 */
+      '?', /* U+B673 */
+      '?', /* U+B674 */
+      '?', /* U+B675 */
+      '?', /* U+B676 */
+      '?', /* U+B677 */
+      '?', /* U+B678 */
+      '?', /* U+B679 */
+      '?', /* U+B67A */
+      '?', /* U+B67B */
+      '?', /* U+B67C */
+      '?', /* U+B67D */
+      '?', /* U+B67E */
+      '?', /* U+B67F */
+      '?', /* U+B680 */
+      '?', /* U+B681 */
+      '?', /* U+B682 */
+      '?', /* U+B683 */
+      '?', /* U+B684 */
+      '?', /* U+B685 */
+      '?', /* U+B686 */
+      '?', /* U+B687 */
+      '?', /* U+B688 */
+      '?', /* U+B689 */
+      '?', /* U+B68A */
+      '?', /* U+B68B */
+      '?', /* U+B68C */
+      '?', /* U+B68D */
+      '?', /* U+B68E */
+      '?', /* U+B68F */
+      '?', /* U+B690 */
+      '?', /* U+B691 */
+      '?', /* U+B692 */
+      '?', /* U+B693 */
+      '?', /* U+B694 */
+      '?', /* U+B695 */
+      '?', /* U+B696 */
+      '?', /* U+B697 */
+      '?', /* U+B698 */
+      '?', /* U+B699 */
+      '?', /* U+B69A */
+      '?', /* U+B69B */
+      '?', /* U+B69C */
+      '?', /* U+B69D */
+      '?', /* U+B69E */
+      '?', /* U+B69F */
+      '?', /* U+B6A0 */
+      '?', /* U+B6A1 */
+      '?', /* U+B6A2 */
+      '?', /* U+B6A3 */
+      '?', /* U+B6A4 */
+      '?', /* U+B6A5 */
+      '?', /* U+B6A6 */
+      '?', /* U+B6A7 */
+      '?', /* U+B6A8 */
+      '?', /* U+B6A9 */
+      '?', /* U+B6AA */
+      '?', /* U+B6AB */
+      '?', /* U+B6AC */
+      '?', /* U+B6AD */
+      '?', /* U+B6AE */
+      '?', /* U+B6AF */
+      '?', /* U+B6B0 */
+      '?', /* U+B6B1 */
+      '?', /* U+B6B2 */
+      '?', /* U+B6B3 */
+      '?', /* U+B6B4 */
+      '?', /* U+B6B5 */
+      '?', /* U+B6B6 */
+      '?', /* U+B6B7 */
+      '?', /* U+B6B8 */
+      '?', /* U+B6B9 */
+      '?', /* U+B6BA */
+      '?', /* U+B6BB */
+      '?', /* U+B6BC */
+      '?', /* U+B6BD */
+      '?', /* U+B6BE */
+      '?', /* U+B6BF */
+      '?', /* U+B6C0 */
+      '?', /* U+B6C1 */
+      '?', /* U+B6C2 */
+      '?', /* U+B6C3 */
+      '?', /* U+B6C4 */
+      '?', /* U+B6C5 */
+      '?', /* U+B6C6 */
+      '?', /* U+B6C7 */
+      '?', /* U+B6C8 */
+      '?', /* U+B6C9 */
+      '?', /* U+B6CA */
+      '?', /* U+B6CB */
+      '?', /* U+B6CC */
+      '?', /* U+B6CD */
+      '?', /* U+B6CE */
+      '?', /* U+B6CF */
+      '?', /* U+B6D0 */
+      '?', /* U+B6D1 */
+      '?', /* U+B6D2 */
+      '?', /* U+B6D3 */
+      '?', /* U+B6D4 */
+      '?', /* U+B6D5 */
+      '?', /* U+B6D6 */
+      '?', /* U+B6D7 */
+      '?', /* U+B6D8 */
+      '?', /* U+B6D9 */
+      '?', /* U+B6DA */
+      '?', /* U+B6DB */
+      '?', /* U+B6DC */
+      '?', /* U+B6DD */
+      '?', /* U+B6DE */
+      '?', /* U+B6DF */
+      '?', /* U+B6E0 */
+      '?', /* U+B6E1 */
+      '?', /* U+B6E2 */
+      '?', /* U+B6E3 */
+      '?', /* U+B6E4 */
+      '?', /* U+B6E5 */
+      '?', /* U+B6E6 */
+      '?', /* U+B6E7 */
+      '?', /* U+B6E8 */
+      '?', /* U+B6E9 */
+      '?', /* U+B6EA */
+      '?', /* U+B6EB */
+      '?', /* U+B6EC */
+      '?', /* U+B6ED */
+      '?', /* U+B6EE */
+      '?', /* U+B6EF */
+      '?', /* U+B6F0 */
+      '?', /* U+B6F1 */
+      '?', /* U+B6F2 */
+      '?', /* U+B6F3 */
+      '?', /* U+B6F4 */
+      '?', /* U+B6F5 */
+      '?', /* U+B6F6 */
+      '?', /* U+B6F7 */
+      '?', /* U+B6F8 */
+      '?', /* U+B6F9 */
+      '?', /* U+B6FA */
+      '?', /* U+B6FB */
+      '?', /* U+B6FC */
+      '?', /* U+B6FD */
+      '?', /* U+B6FE */
+      '?', /* U+B6FF */
+      '?', /* U+B700 */
+      '?', /* U+B701 */
+      '?', /* U+B702 */
+      '?', /* U+B703 */
+      '?', /* U+B704 */
+      '?', /* U+B705 */
+      '?', /* U+B706 */
+      '?', /* U+B707 */
+      '?', /* U+B708 */
+      '?', /* U+B709 */
+      '?', /* U+B70A */
+      '?', /* U+B70B */
+      '?', /* U+B70C */
+      '?', /* U+B70D */
+      '?', /* U+B70E */
+      '?', /* U+B70F */
+      '?', /* U+B710 */
+      '?', /* U+B711 */
+      '?', /* U+B712 */
+      '?', /* U+B713 */
+      '?', /* U+B714 */
+      '?', /* U+B715 */
+      '?', /* U+B716 */
+      '?', /* U+B717 */
+      '?', /* U+B718 */
+      '?', /* U+B719 */
+      '?', /* U+B71A */
+      '?', /* U+B71B */
+      '?', /* U+B71C */
+      '?', /* U+B71D */
+      '?', /* U+B71E */
+      '?', /* U+B71F */
+      '?', /* U+B720 */
+      '?', /* U+B721 */
+      '?', /* U+B722 */
+      '?', /* U+B723 */
+      '?', /* U+B724 */
+      '?', /* U+B725 */
+      '?', /* U+B726 */
+      '?', /* U+B727 */
+      '?', /* U+B728 */
+      '?', /* U+B729 */
+      '?', /* U+B72A */
+      '?', /* U+B72B */
+      '?', /* U+B72C */
+      '?', /* U+B72D */
+      '?', /* U+B72E */
+      '?', /* U+B72F */
+      '?', /* U+B730 */
+      '?', /* U+B731 */
+      '?', /* U+B732 */
+      '?', /* U+B733 */
+      '?', /* U+B734 */
+      '?', /* U+B735 */
+      '?', /* U+B736 */
+      '?', /* U+B737 */
+      '?', /* U+B738 */
+      '?', /* U+B739 */
+      '?', /* U+B73A */
+      '?', /* U+B73B */
+      '?', /* U+B73C */
+      '?', /* U+B73D */
+      '?', /* U+B73E */
+      '?', /* U+B73F */
+      '?', /* U+B740 */
+      '?', /* U+B741 */
+      '?', /* U+B742 */
+      '?', /* U+B743 */
+      '?', /* U+B744 */
+      '?', /* U+B745 */
+      '?', /* U+B746 */
+      '?', /* U+B747 */
+      '?', /* U+B748 */
+      '?', /* U+B749 */
+      '?', /* U+B74A */
+      '?', /* U+B74B */
+      '?', /* U+B74C */
+      '?', /* U+B74D */
+      '?', /* U+B74E */
+      '?', /* U+B74F */
+      '?', /* U+B750 */
+      '?', /* U+B751 */
+      '?', /* U+B752 */
+      '?', /* U+B753 */
+      '?', /* U+B754 */
+      '?', /* U+B755 */
+      '?', /* U+B756 */
+      '?', /* U+B757 */
+      '?', /* U+B758 */
+      '?', /* U+B759 */
+      '?', /* U+B75A */
+      '?', /* U+B75B */
+      '?', /* U+B75C */
+      '?', /* U+B75D */
+      '?', /* U+B75E */
+      '?', /* U+B75F */
+      '?', /* U+B760 */
+      '?', /* U+B761 */
+      '?', /* U+B762 */
+      '?', /* U+B763 */
+      '?', /* U+B764 */
+      '?', /* U+B765 */
+      '?', /* U+B766 */
+      '?', /* U+B767 */
+      '?', /* U+B768 */
+      '?', /* U+B769 */
+      '?', /* U+B76A */
+      '?', /* U+B76B */
+      '?', /* U+B76C */
+      '?', /* U+B76D */
+      '?', /* U+B76E */
+      '?', /* U+B76F */
+      '?', /* U+B770 */
+      '?', /* U+B771 */
+      '?', /* U+B772 */
+      '?', /* U+B773 */
+      '?', /* U+B774 */
+      '?', /* U+B775 */
+      '?', /* U+B776 */
+      '?', /* U+B777 */
+      '?', /* U+B778 */
+      '?', /* U+B779 */
+      '?', /* U+B77A */
+      '?', /* U+B77B */
+      '?', /* U+B77C */
+      '?', /* U+B77D */
+      '?', /* U+B77E */
+      '?', /* U+B77F */
+      '?', /* U+B780 */
+      '?', /* U+B781 */
+      '?', /* U+B782 */
+      '?', /* U+B783 */
+      '?', /* U+B784 */
+      '?', /* U+B785 */
+      '?', /* U+B786 */
+      '?', /* U+B787 */
+      '?', /* U+B788 */
+      '?', /* U+B789 */
+      '?', /* U+B78A */
+      '?', /* U+B78B */
+      '?', /* U+B78C */
+      '?', /* U+B78D */
+      '?', /* U+B78E */
+      '?', /* U+B78F */
+      '?', /* U+B790 */
+      '?', /* U+B791 */
+      '?', /* U+B792 */
+      '?', /* U+B793 */
+      '?', /* U+B794 */
+      '?', /* U+B795 */
+      '?', /* U+B796 */
+      '?', /* U+B797 */
+      '?', /* U+B798 */
+      '?', /* U+B799 */
+      '?', /* U+B79A */
+      '?', /* U+B79B */
+      '?', /* U+B79C */
+      '?', /* U+B79D */
+      '?', /* U+B79E */
+      '?', /* U+B79F */
+      '?', /* U+B7A0 */
+      '?', /* U+B7A1 */
+      '?', /* U+B7A2 */
+      '?', /* U+B7A3 */
+      '?', /* U+B7A4 */
+      '?', /* U+B7A5 */
+      '?', /* U+B7A6 */
+      '?', /* U+B7A7 */
+      '?', /* U+B7A8 */
+      '?', /* U+B7A9 */
+      '?', /* U+B7AA */
+      '?', /* U+B7AB */
+      '?', /* U+B7AC */
+      '?', /* U+B7AD */
+      '?', /* U+B7AE */
+      '?', /* U+B7AF */
+      '?', /* U+B7B0 */
+      '?', /* U+B7B1 */
+      '?', /* U+B7B2 */
+      '?', /* U+B7B3 */
+      '?', /* U+B7B4 */
+      '?', /* U+B7B5 */
+      '?', /* U+B7B6 */
+      '?', /* U+B7B7 */
+      '?', /* U+B7B8 */
+      '?', /* U+B7B9 */
+      '?', /* U+B7BA */
+      '?', /* U+B7BB */
+      '?', /* U+B7BC */
+      '?', /* U+B7BD */
+      '?', /* U+B7BE */
+      '?', /* U+B7BF */
+      '?', /* U+B7C0 */
+      '?', /* U+B7C1 */
+      '?', /* U+B7C2 */
+      '?', /* U+B7C3 */
+      '?', /* U+B7C4 */
+      '?', /* U+B7C5 */
+      '?', /* U+B7C6 */
+      '?', /* U+B7C7 */
+      '?', /* U+B7C8 */
+      '?', /* U+B7C9 */
+      '?', /* U+B7CA */
+      '?', /* U+B7CB */
+      '?', /* U+B7CC */
+      '?', /* U+B7CD */
+      '?', /* U+B7CE */
+      '?', /* U+B7CF */
+      '?', /* U+B7D0 */
+      '?', /* U+B7D1 */
+      '?', /* U+B7D2 */
+      '?', /* U+B7D3 */
+      '?', /* U+B7D4 */
+      '?', /* U+B7D5 */
+      '?', /* U+B7D6 */
+      '?', /* U+B7D7 */
+      '?', /* U+B7D8 */
+      '?', /* U+B7D9 */
+      '?', /* U+B7DA */
+      '?', /* U+B7DB */
+      '?', /* U+B7DC */
+      '?', /* U+B7DD */
+      '?', /* U+B7DE */
+      '?', /* U+B7DF */
+      '?', /* U+B7E0 */
+      '?', /* U+B7E1 */
+      '?', /* U+B7E2 */
+      '?', /* U+B7E3 */
+      '?', /* U+B7E4 */
+      '?', /* U+B7E5 */
+      '?', /* U+B7E6 */
+      '?', /* U+B7E7 */
+      '?', /* U+B7E8 */
+      '?', /* U+B7E9 */
+      '?', /* U+B7EA */
+      '?', /* U+B7EB */
+      '?', /* U+B7EC */
+      '?', /* U+B7ED */
+      '?', /* U+B7EE */
+      '?', /* U+B7EF */
+      '?', /* U+B7F0 */
+      '?', /* U+B7F1 */
+      '?', /* U+B7F2 */
+      '?', /* U+B7F3 */
+      '?', /* U+B7F4 */
+      '?', /* U+B7F5 */
+      '?', /* U+B7F6 */
+      '?', /* U+B7F7 */
+      '?', /* U+B7F8 */
+      '?', /* U+B7F9 */
+      '?', /* U+B7FA */
+      '?', /* U+B7FB */
+      '?', /* U+B7FC */
+      '?', /* U+B7FD */
+      '?', /* U+B7FE */
+      '?', /* U+B7FF */
+      '?', /* U+B800 */
+      '?', /* U+B801 */
+      '?', /* U+B802 */
+      '?', /* U+B803 */
+      '?', /* U+B804 */
+      '?', /* U+B805 */
+      '?', /* U+B806 */
+      '?', /* U+B807 */
+      '?', /* U+B808 */
+      '?', /* U+B809 */
+      '?', /* U+B80A */
+      '?', /* U+B80B */
+      '?', /* U+B80C */
+      '?', /* U+B80D */
+      '?', /* U+B80E */
+      '?', /* U+B80F */
+      '?', /* U+B810 */
+      '?', /* U+B811 */
+      '?', /* U+B812 */
+      '?', /* U+B813 */
+      '?', /* U+B814 */
+      '?', /* U+B815 */
+      '?', /* U+B816 */
+      '?', /* U+B817 */
+      '?', /* U+B818 */
+      '?', /* U+B819 */
+      '?', /* U+B81A */
+      '?', /* U+B81B */
+      '?', /* U+B81C */
+      '?', /* U+B81D */
+      '?', /* U+B81E */
+      '?', /* U+B81F */
+      '?', /* U+B820 */
+      '?', /* U+B821 */
+      '?', /* U+B822 */
+      '?', /* U+B823 */
+      '?', /* U+B824 */
+      '?', /* U+B825 */
+      '?', /* U+B826 */
+      '?', /* U+B827 */
+      '?', /* U+B828 */
+      '?', /* U+B829 */
+      '?', /* U+B82A */
+      '?', /* U+B82B */
+      '?', /* U+B82C */
+      '?', /* U+B82D */
+      '?', /* U+B82E */
+      '?', /* U+B82F */
+      '?', /* U+B830 */
+      '?', /* U+B831 */
+      '?', /* U+B832 */
+      '?', /* U+B833 */
+      '?', /* U+B834 */
+      '?', /* U+B835 */
+      '?', /* U+B836 */
+      '?', /* U+B837 */
+      '?', /* U+B838 */
+      '?', /* U+B839 */
+      '?', /* U+B83A */
+      '?', /* U+B83B */
+      '?', /* U+B83C */
+      '?', /* U+B83D */
+      '?', /* U+B83E */
+      '?', /* U+B83F */
+      '?', /* U+B840 */
+      '?', /* U+B841 */
+      '?', /* U+B842 */
+      '?', /* U+B843 */
+      '?', /* U+B844 */
+      '?', /* U+B845 */
+      '?', /* U+B846 */
+      '?', /* U+B847 */
+      '?', /* U+B848 */
+      '?', /* U+B849 */
+      '?', /* U+B84A */
+      '?', /* U+B84B */
+      '?', /* U+B84C */
+      '?', /* U+B84D */
+      '?', /* U+B84E */
+      '?', /* U+B84F */
+      '?', /* U+B850 */
+      '?', /* U+B851 */
+      '?', /* U+B852 */
+      '?', /* U+B853 */
+      '?', /* U+B854 */
+      '?', /* U+B855 */
+      '?', /* U+B856 */
+      '?', /* U+B857 */
+      '?', /* U+B858 */
+      '?', /* U+B859 */
+      '?', /* U+B85A */
+      '?', /* U+B85B */
+      '?', /* U+B85C */
+      '?', /* U+B85D */
+      '?', /* U+B85E */
+      '?', /* U+B85F */
+      '?', /* U+B860 */
+      '?', /* U+B861 */
+      '?', /* U+B862 */
+      '?', /* U+B863 */
+      '?', /* U+B864 */
+      '?', /* U+B865 */
+      '?', /* U+B866 */
+      '?', /* U+B867 */
+      '?', /* U+B868 */
+      '?', /* U+B869 */
+      '?', /* U+B86A */
+      '?', /* U+B86B */
+      '?', /* U+B86C */
+      '?', /* U+B86D */
+      '?', /* U+B86E */
+      '?', /* U+B86F */
+      '?', /* U+B870 */
+      '?', /* U+B871 */
+      '?', /* U+B872 */
+      '?', /* U+B873 */
+      '?', /* U+B874 */
+      '?', /* U+B875 */
+      '?', /* U+B876 */
+      '?', /* U+B877 */
+      '?', /* U+B878 */
+      '?', /* U+B879 */
+      '?', /* U+B87A */
+      '?', /* U+B87B */
+      '?', /* U+B87C */
+      '?', /* U+B87D */
+      '?', /* U+B87E */
+      '?', /* U+B87F */
+      '?', /* U+B880 */
+      '?', /* U+B881 */
+      '?', /* U+B882 */
+      '?', /* U+B883 */
+      '?', /* U+B884 */
+      '?', /* U+B885 */
+      '?', /* U+B886 */
+      '?', /* U+B887 */
+      '?', /* U+B888 */
+      '?', /* U+B889 */
+      '?', /* U+B88A */
+      '?', /* U+B88B */
+      '?', /* U+B88C */
+      '?', /* U+B88D */
+      '?', /* U+B88E */
+      '?', /* U+B88F */
+      '?', /* U+B890 */
+      '?', /* U+B891 */
+      '?', /* U+B892 */
+      '?', /* U+B893 */
+      '?', /* U+B894 */
+      '?', /* U+B895 */
+      '?', /* U+B896 */
+      '?', /* U+B897 */
+      '?', /* U+B898 */
+      '?', /* U+B899 */
+      '?', /* U+B89A */
+      '?', /* U+B89B */
+      '?', /* U+B89C */
+      '?', /* U+B89D */
+      '?', /* U+B89E */
+      '?', /* U+B89F */
+      '?', /* U+B8A0 */
+      '?', /* U+B8A1 */
+      '?', /* U+B8A2 */
+      '?', /* U+B8A3 */
+      '?', /* U+B8A4 */
+      '?', /* U+B8A5 */
+      '?', /* U+B8A6 */
+      '?', /* U+B8A7 */
+      '?', /* U+B8A8 */
+      '?', /* U+B8A9 */
+      '?', /* U+B8AA */
+      '?', /* U+B8AB */
+      '?', /* U+B8AC */
+      '?', /* U+B8AD */
+      '?', /* U+B8AE */
+      '?', /* U+B8AF */
+      '?', /* U+B8B0 */
+      '?', /* U+B8B1 */
+      '?', /* U+B8B2 */
+      '?', /* U+B8B3 */
+      '?', /* U+B8B4 */
+      '?', /* U+B8B5 */
+      '?', /* U+B8B6 */
+      '?', /* U+B8B7 */
+      '?', /* U+B8B8 */
+      '?', /* U+B8B9 */
+      '?', /* U+B8BA */
+      '?', /* U+B8BB */
+      '?', /* U+B8BC */
+      '?', /* U+B8BD */
+      '?', /* U+B8BE */
+      '?', /* U+B8BF */
+      '?', /* U+B8C0 */
+      '?', /* U+B8C1 */
+      '?', /* U+B8C2 */
+      '?', /* U+B8C3 */
+      '?', /* U+B8C4 */
+      '?', /* U+B8C5 */
+      '?', /* U+B8C6 */
+      '?', /* U+B8C7 */
+      '?', /* U+B8C8 */
+      '?', /* U+B8C9 */
+      '?', /* U+B8CA */
+      '?', /* U+B8CB */
+      '?', /* U+B8CC */
+      '?', /* U+B8CD */
+      '?', /* U+B8CE */
+      '?', /* U+B8CF */
+      '?', /* U+B8D0 */
+      '?', /* U+B8D1 */
+      '?', /* U+B8D2 */
+      '?', /* U+B8D3 */
+      '?', /* U+B8D4 */
+      '?', /* U+B8D5 */
+      '?', /* U+B8D6 */
+      '?', /* U+B8D7 */
+      '?', /* U+B8D8 */
+      '?', /* U+B8D9 */
+      '?', /* U+B8DA */
+      '?', /* U+B8DB */
+      '?', /* U+B8DC */
+      '?', /* U+B8DD */
+      '?', /* U+B8DE */
+      '?', /* U+B8DF */
+      '?', /* U+B8E0 */
+      '?', /* U+B8E1 */
+      '?', /* U+B8E2 */
+      '?', /* U+B8E3 */
+      '?', /* U+B8E4 */
+      '?', /* U+B8E5 */
+      '?', /* U+B8E6 */
+      '?', /* U+B8E7 */
+      '?', /* U+B8E8 */
+      '?', /* U+B8E9 */
+      '?', /* U+B8EA */
+      '?', /* U+B8EB */
+      '?', /* U+B8EC */
+      '?', /* U+B8ED */
+      '?', /* U+B8EE */
+      '?', /* U+B8EF */
+      '?', /* U+B8F0 */
+      '?', /* U+B8F1 */
+      '?', /* U+B8F2 */
+      '?', /* U+B8F3 */
+      '?', /* U+B8F4 */
+      '?', /* U+B8F5 */
+      '?', /* U+B8F6 */
+      '?', /* U+B8F7 */
+      '?', /* U+B8F8 */
+      '?', /* U+B8F9 */
+      '?', /* U+B8FA */
+      '?', /* U+B8FB */
+      '?', /* U+B8FC */
+      '?', /* U+B8FD */
+      '?', /* U+B8FE */
+      '?', /* U+B8FF */
+      '?', /* U+B900 */
+      '?', /* U+B901 */
+      '?', /* U+B902 */
+      '?', /* U+B903 */
+      '?', /* U+B904 */
+      '?', /* U+B905 */
+      '?', /* U+B906 */
+      '?', /* U+B907 */
+      '?', /* U+B908 */
+      '?', /* U+B909 */
+      '?', /* U+B90A */
+      '?', /* U+B90B */
+      '?', /* U+B90C */
+      '?', /* U+B90D */
+      '?', /* U+B90E */
+      '?', /* U+B90F */
+      '?', /* U+B910 */
+      '?', /* U+B911 */
+      '?', /* U+B912 */
+      '?', /* U+B913 */
+      '?', /* U+B914 */
+      '?', /* U+B915 */
+      '?', /* U+B916 */
+      '?', /* U+B917 */
+      '?', /* U+B918 */
+      '?', /* U+B919 */
+      '?', /* U+B91A */
+      '?', /* U+B91B */
+      '?', /* U+B91C */
+      '?', /* U+B91D */
+      '?', /* U+B91E */
+      '?', /* U+B91F */
+      '?', /* U+B920 */
+      '?', /* U+B921 */
+      '?', /* U+B922 */
+      '?', /* U+B923 */
+      '?', /* U+B924 */
+      '?', /* U+B925 */
+      '?', /* U+B926 */
+      '?', /* U+B927 */
+      '?', /* U+B928 */
+      '?', /* U+B929 */
+      '?', /* U+B92A */
+      '?', /* U+B92B */
+      '?', /* U+B92C */
+      '?', /* U+B92D */
+      '?', /* U+B92E */
+      '?', /* U+B92F */
+      '?', /* U+B930 */
+      '?', /* U+B931 */
+      '?', /* U+B932 */
+      '?', /* U+B933 */
+      '?', /* U+B934 */
+      '?', /* U+B935 */
+      '?', /* U+B936 */
+      '?', /* U+B937 */
+      '?', /* U+B938 */
+      '?', /* U+B939 */
+      '?', /* U+B93A */
+      '?', /* U+B93B */
+      '?', /* U+B93C */
+      '?', /* U+B93D */
+      '?', /* U+B93E */
+      '?', /* U+B93F */
+      '?', /* U+B940 */
+      '?', /* U+B941 */
+      '?', /* U+B942 */
+      '?', /* U+B943 */
+      '?', /* U+B944 */
+      '?', /* U+B945 */
+      '?', /* U+B946 */
+      '?', /* U+B947 */
+      '?', /* U+B948 */
+      '?', /* U+B949 */
+      '?', /* U+B94A */
+      '?', /* U+B94B */
+      '?', /* U+B94C */
+      '?', /* U+B94D */
+      '?', /* U+B94E */
+      '?', /* U+B94F */
+      '?', /* U+B950 */
+      '?', /* U+B951 */
+      '?', /* U+B952 */
+      '?', /* U+B953 */
+      '?', /* U+B954 */
+      '?', /* U+B955 */
+      '?', /* U+B956 */
+      '?', /* U+B957 */
+      '?', /* U+B958 */
+      '?', /* U+B959 */
+      '?', /* U+B95A */
+      '?', /* U+B95B */
+      '?', /* U+B95C */
+      '?', /* U+B95D */
+      '?', /* U+B95E */
+      '?', /* U+B95F */
+      '?', /* U+B960 */
+      '?', /* U+B961 */
+      '?', /* U+B962 */
+      '?', /* U+B963 */
+      '?', /* U+B964 */
+      '?', /* U+B965 */
+      '?', /* U+B966 */
+      '?', /* U+B967 */
+      '?', /* U+B968 */
+      '?', /* U+B969 */
+      '?', /* U+B96A */
+      '?', /* U+B96B */
+      '?', /* U+B96C */
+      '?', /* U+B96D */
+      '?', /* U+B96E */
+      '?', /* U+B96F */
+      '?', /* U+B970 */
+      '?', /* U+B971 */
+      '?', /* U+B972 */
+      '?', /* U+B973 */
+      '?', /* U+B974 */
+      '?', /* U+B975 */
+      '?', /* U+B976 */
+      '?', /* U+B977 */
+      '?', /* U+B978 */
+      '?', /* U+B979 */
+      '?', /* U+B97A */
+      '?', /* U+B97B */
+      '?', /* U+B97C */
+      '?', /* U+B97D */
+      '?', /* U+B97E */
+      '?', /* U+B97F */
+      '?', /* U+B980 */
+      '?', /* U+B981 */
+      '?', /* U+B982 */
+      '?', /* U+B983 */
+      '?', /* U+B984 */
+      '?', /* U+B985 */
+      '?', /* U+B986 */
+      '?', /* U+B987 */
+      '?', /* U+B988 */
+      '?', /* U+B989 */
+      '?', /* U+B98A */
+      '?', /* U+B98B */
+      '?', /* U+B98C */
+      '?', /* U+B98D */
+      '?', /* U+B98E */
+      '?', /* U+B98F */
+      '?', /* U+B990 */
+      '?', /* U+B991 */
+      '?', /* U+B992 */
+      '?', /* U+B993 */
+      '?', /* U+B994 */
+      '?', /* U+B995 */
+      '?', /* U+B996 */
+      '?', /* U+B997 */
+      '?', /* U+B998 */
+      '?', /* U+B999 */
+      '?', /* U+B99A */
+      '?', /* U+B99B */
+      '?', /* U+B99C */
+      '?', /* U+B99D */
+      '?', /* U+B99E */
+      '?', /* U+B99F */
+      '?', /* U+B9A0 */
+      '?', /* U+B9A1 */
+      '?', /* U+B9A2 */
+      '?', /* U+B9A3 */
+      '?', /* U+B9A4 */
+      '?', /* U+B9A5 */
+      '?', /* U+B9A6 */
+      '?', /* U+B9A7 */
+      '?', /* U+B9A8 */
+      '?', /* U+B9A9 */
+      '?', /* U+B9AA */
+      '?', /* U+B9AB */
+      '?', /* U+B9AC */
+      '?', /* U+B9AD */
+      '?', /* U+B9AE */
+      '?', /* U+B9AF */
+      '?', /* U+B9B0 */
+      '?', /* U+B9B1 */
+      '?', /* U+B9B2 */
+      '?', /* U+B9B3 */
+      '?', /* U+B9B4 */
+      '?', /* U+B9B5 */
+      '?', /* U+B9B6 */
+      '?', /* U+B9B7 */
+      '?', /* U+B9B8 */
+      '?', /* U+B9B9 */
+      '?', /* U+B9BA */
+      '?', /* U+B9BB */
+      '?', /* U+B9BC */
+      '?', /* U+B9BD */
+      '?', /* U+B9BE */
+      '?', /* U+B9BF */
+      '?', /* U+B9C0 */
+      '?', /* U+B9C1 */
+      '?', /* U+B9C2 */
+      '?', /* U+B9C3 */
+      '?', /* U+B9C4 */
+      '?', /* U+B9C5 */
+      '?', /* U+B9C6 */
+      '?', /* U+B9C7 */
+      '?', /* U+B9C8 */
+      '?', /* U+B9C9 */
+      '?', /* U+B9CA */
+      '?', /* U+B9CB */
+      '?', /* U+B9CC */
+      '?', /* U+B9CD */
+      '?', /* U+B9CE */
+      '?', /* U+B9CF */
+      '?', /* U+B9D0 */
+      '?', /* U+B9D1 */
+      '?', /* U+B9D2 */
+      '?', /* U+B9D3 */
+      '?', /* U+B9D4 */
+      '?', /* U+B9D5 */
+      '?', /* U+B9D6 */
+      '?', /* U+B9D7 */
+      '?', /* U+B9D8 */
+      '?', /* U+B9D9 */
+      '?', /* U+B9DA */
+      '?', /* U+B9DB */
+      '?', /* U+B9DC */
+      '?', /* U+B9DD */
+      '?', /* U+B9DE */
+      '?', /* U+B9DF */
+      '?', /* U+B9E0 */
+      '?', /* U+B9E1 */
+      '?', /* U+B9E2 */
+      '?', /* U+B9E3 */
+      '?', /* U+B9E4 */
+      '?', /* U+B9E5 */
+      '?', /* U+B9E6 */
+      '?', /* U+B9E7 */
+      '?', /* U+B9E8 */
+      '?', /* U+B9E9 */
+      '?', /* U+B9EA */
+      '?', /* U+B9EB */
+      '?', /* U+B9EC */
+      '?', /* U+B9ED */
+      '?', /* U+B9EE */
+      '?', /* U+B9EF */
+      '?', /* U+B9F0 */
+      '?', /* U+B9F1 */
+      '?', /* U+B9F2 */
+      '?', /* U+B9F3 */
+      '?', /* U+B9F4 */
+      '?', /* U+B9F5 */
+      '?', /* U+B9F6 */
+      '?', /* U+B9F7 */
+      '?', /* U+B9F8 */
+      '?', /* U+B9F9 */
+      '?', /* U+B9FA */
+      '?', /* U+B9FB */
+      '?', /* U+B9FC */
+      '?', /* U+B9FD */
+      '?', /* U+B9FE */
+      '?', /* U+B9FF */
+      '?', /* U+BA00 */
+      '?', /* U+BA01 */
+      '?', /* U+BA02 */
+      '?', /* U+BA03 */
+      '?', /* U+BA04 */
+      '?', /* U+BA05 */
+      '?', /* U+BA06 */
+      '?', /* U+BA07 */
+      '?', /* U+BA08 */
+      '?', /* U+BA09 */
+      '?', /* U+BA0A */
+      '?', /* U+BA0B */
+      '?', /* U+BA0C */
+      '?', /* U+BA0D */
+      '?', /* U+BA0E */
+      '?', /* U+BA0F */
+      '?', /* U+BA10 */
+      '?', /* U+BA11 */
+      '?', /* U+BA12 */
+      '?', /* U+BA13 */
+      '?', /* U+BA14 */
+      '?', /* U+BA15 */
+      '?', /* U+BA16 */
+      '?', /* U+BA17 */
+      '?', /* U+BA18 */
+      '?', /* U+BA19 */
+      '?', /* U+BA1A */
+      '?', /* U+BA1B */
+      '?', /* U+BA1C */
+      '?', /* U+BA1D */
+      '?', /* U+BA1E */
+      '?', /* U+BA1F */
+      '?', /* U+BA20 */
+      '?', /* U+BA21 */
+      '?', /* U+BA22 */
+      '?', /* U+BA23 */
+      '?', /* U+BA24 */
+      '?', /* U+BA25 */
+      '?', /* U+BA26 */
+      '?', /* U+BA27 */
+      '?', /* U+BA28 */
+      '?', /* U+BA29 */
+      '?', /* U+BA2A */
+      '?', /* U+BA2B */
+      '?', /* U+BA2C */
+      '?', /* U+BA2D */
+      '?', /* U+BA2E */
+      '?', /* U+BA2F */
+      '?', /* U+BA30 */
+      '?', /* U+BA31 */
+      '?', /* U+BA32 */
+      '?', /* U+BA33 */
+      '?', /* U+BA34 */
+      '?', /* U+BA35 */
+      '?', /* U+BA36 */
+      '?', /* U+BA37 */
+      '?', /* U+BA38 */
+      '?', /* U+BA39 */
+      '?', /* U+BA3A */
+      '?', /* U+BA3B */
+      '?', /* U+BA3C */
+      '?', /* U+BA3D */
+      '?', /* U+BA3E */
+      '?', /* U+BA3F */
+      '?', /* U+BA40 */
+      '?', /* U+BA41 */
+      '?', /* U+BA42 */
+      '?', /* U+BA43 */
+      '?', /* U+BA44 */
+      '?', /* U+BA45 */
+      '?', /* U+BA46 */
+      '?', /* U+BA47 */
+      '?', /* U+BA48 */
+      '?', /* U+BA49 */
+      '?', /* U+BA4A */
+      '?', /* U+BA4B */
+      '?', /* U+BA4C */
+      '?', /* U+BA4D */
+      '?', /* U+BA4E */
+      '?', /* U+BA4F */
+      '?', /* U+BA50 */
+      '?', /* U+BA51 */
+      '?', /* U+BA52 */
+      '?', /* U+BA53 */
+      '?', /* U+BA54 */
+      '?', /* U+BA55 */
+      '?', /* U+BA56 */
+      '?', /* U+BA57 */
+      '?', /* U+BA58 */
+      '?', /* U+BA59 */
+      '?', /* U+BA5A */
+      '?', /* U+BA5B */
+      '?', /* U+BA5C */
+      '?', /* U+BA5D */
+      '?', /* U+BA5E */
+      '?', /* U+BA5F */
+      '?', /* U+BA60 */
+      '?', /* U+BA61 */
+      '?', /* U+BA62 */
+      '?', /* U+BA63 */
+      '?', /* U+BA64 */
+      '?', /* U+BA65 */
+      '?', /* U+BA66 */
+      '?', /* U+BA67 */
+      '?', /* U+BA68 */
+      '?', /* U+BA69 */
+      '?', /* U+BA6A */
+      '?', /* U+BA6B */
+      '?', /* U+BA6C */
+      '?', /* U+BA6D */
+      '?', /* U+BA6E */
+      '?', /* U+BA6F */
+      '?', /* U+BA70 */
+      '?', /* U+BA71 */
+      '?', /* U+BA72 */
+      '?', /* U+BA73 */
+      '?', /* U+BA74 */
+      '?', /* U+BA75 */
+      '?', /* U+BA76 */
+      '?', /* U+BA77 */
+      '?', /* U+BA78 */
+      '?', /* U+BA79 */
+      '?', /* U+BA7A */
+      '?', /* U+BA7B */
+      '?', /* U+BA7C */
+      '?', /* U+BA7D */
+      '?', /* U+BA7E */
+      '?', /* U+BA7F */
+      '?', /* U+BA80 */
+      '?', /* U+BA81 */
+      '?', /* U+BA82 */
+      '?', /* U+BA83 */
+      '?', /* U+BA84 */
+      '?', /* U+BA85 */
+      '?', /* U+BA86 */
+      '?', /* U+BA87 */
+      '?', /* U+BA88 */
+      '?', /* U+BA89 */
+      '?', /* U+BA8A */
+      '?', /* U+BA8B */
+      '?', /* U+BA8C */
+      '?', /* U+BA8D */
+      '?', /* U+BA8E */
+      '?', /* U+BA8F */
+      '?', /* U+BA90 */
+      '?', /* U+BA91 */
+      '?', /* U+BA92 */
+      '?', /* U+BA93 */
+      '?', /* U+BA94 */
+      '?', /* U+BA95 */
+      '?', /* U+BA96 */
+      '?', /* U+BA97 */
+      '?', /* U+BA98 */
+      '?', /* U+BA99 */
+      '?', /* U+BA9A */
+      '?', /* U+BA9B */
+      '?', /* U+BA9C */
+      '?', /* U+BA9D */
+      '?', /* U+BA9E */
+      '?', /* U+BA9F */
+      '?', /* U+BAA0 */
+      '?', /* U+BAA1 */
+      '?', /* U+BAA2 */
+      '?', /* U+BAA3 */
+      '?', /* U+BAA4 */
+      '?', /* U+BAA5 */
+      '?', /* U+BAA6 */
+      '?', /* U+BAA7 */
+      '?', /* U+BAA8 */
+      '?', /* U+BAA9 */
+      '?', /* U+BAAA */
+      '?', /* U+BAAB */
+      '?', /* U+BAAC */
+      '?', /* U+BAAD */
+      '?', /* U+BAAE */
+      '?', /* U+BAAF */
+      '?', /* U+BAB0 */
+      '?', /* U+BAB1 */
+      '?', /* U+BAB2 */
+      '?', /* U+BAB3 */
+      '?', /* U+BAB4 */
+      '?', /* U+BAB5 */
+      '?', /* U+BAB6 */
+      '?', /* U+BAB7 */
+      '?', /* U+BAB8 */
+      '?', /* U+BAB9 */
+      '?', /* U+BABA */
+      '?', /* U+BABB */
+      '?', /* U+BABC */
+      '?', /* U+BABD */
+      '?', /* U+BABE */
+      '?', /* U+BABF */
+      '?', /* U+BAC0 */
+      '?', /* U+BAC1 */
+      '?', /* U+BAC2 */
+      '?', /* U+BAC3 */
+      '?', /* U+BAC4 */
+      '?', /* U+BAC5 */
+      '?', /* U+BAC6 */
+      '?', /* U+BAC7 */
+      '?', /* U+BAC8 */
+      '?', /* U+BAC9 */
+      '?', /* U+BACA */
+      '?', /* U+BACB */
+      '?', /* U+BACC */
+      '?', /* U+BACD */
+      '?', /* U+BACE */
+      '?', /* U+BACF */
+      '?', /* U+BAD0 */
+      '?', /* U+BAD1 */
+      '?', /* U+BAD2 */
+      '?', /* U+BAD3 */
+      '?', /* U+BAD4 */
+      '?', /* U+BAD5 */
+      '?', /* U+BAD6 */
+      '?', /* U+BAD7 */
+      '?', /* U+BAD8 */
+      '?', /* U+BAD9 */
+      '?', /* U+BADA */
+      '?', /* U+BADB */
+      '?', /* U+BADC */
+      '?', /* U+BADD */
+      '?', /* U+BADE */
+      '?', /* U+BADF */
+      '?', /* U+BAE0 */
+      '?', /* U+BAE1 */
+      '?', /* U+BAE2 */
+      '?', /* U+BAE3 */
+      '?', /* U+BAE4 */
+      '?', /* U+BAE5 */
+      '?', /* U+BAE6 */
+      '?', /* U+BAE7 */
+      '?', /* U+BAE8 */
+      '?', /* U+BAE9 */
+      '?', /* U+BAEA */
+      '?', /* U+BAEB */
+      '?', /* U+BAEC */
+      '?', /* U+BAED */
+      '?', /* U+BAEE */
+      '?', /* U+BAEF */
+      '?', /* U+BAF0 */
+      '?', /* U+BAF1 */
+      '?', /* U+BAF2 */
+      '?', /* U+BAF3 */
+      '?', /* U+BAF4 */
+      '?', /* U+BAF5 */
+      '?', /* U+BAF6 */
+      '?', /* U+BAF7 */
+      '?', /* U+BAF8 */
+      '?', /* U+BAF9 */
+      '?', /* U+BAFA */
+      '?', /* U+BAFB */
+      '?', /* U+BAFC */
+      '?', /* U+BAFD */
+      '?', /* U+BAFE */
+      '?', /* U+BAFF */
+      '?', /* U+BB00 */
+      '?', /* U+BB01 */
+      '?', /* U+BB02 */
+      '?', /* U+BB03 */
+      '?', /* U+BB04 */
+      '?', /* U+BB05 */
+      '?', /* U+BB06 */
+      '?', /* U+BB07 */
+      '?', /* U+BB08 */
+      '?', /* U+BB09 */
+      '?', /* U+BB0A */
+      '?', /* U+BB0B */
+      '?', /* U+BB0C */
+      '?', /* U+BB0D */
+      '?', /* U+BB0E */
+      '?', /* U+BB0F */
+      '?', /* U+BB10 */
+      '?', /* U+BB11 */
+      '?', /* U+BB12 */
+      '?', /* U+BB13 */
+      '?', /* U+BB14 */
+      '?', /* U+BB15 */
+      '?', /* U+BB16 */
+      '?', /* U+BB17 */
+      '?', /* U+BB18 */
+      '?', /* U+BB19 */
+      '?', /* U+BB1A */
+      '?', /* U+BB1B */
+      '?', /* U+BB1C */
+      '?', /* U+BB1D */
+      '?', /* U+BB1E */
+      '?', /* U+BB1F */
+      '?', /* U+BB20 */
+      '?', /* U+BB21 */
+      '?', /* U+BB22 */
+      '?', /* U+BB23 */
+      '?', /* U+BB24 */
+      '?', /* U+BB25 */
+      '?', /* U+BB26 */
+      '?', /* U+BB27 */
+      '?', /* U+BB28 */
+      '?', /* U+BB29 */
+      '?', /* U+BB2A */
+      '?', /* U+BB2B */
+      '?', /* U+BB2C */
+      '?', /* U+BB2D */
+      '?', /* U+BB2E */
+      '?', /* U+BB2F */
+      '?', /* U+BB30 */
+      '?', /* U+BB31 */
+      '?', /* U+BB32 */
+      '?', /* U+BB33 */
+      '?', /* U+BB34 */
+      '?', /* U+BB35 */
+      '?', /* U+BB36 */
+      '?', /* U+BB37 */
+      '?', /* U+BB38 */
+      '?', /* U+BB39 */
+      '?', /* U+BB3A */
+      '?', /* U+BB3B */
+      '?', /* U+BB3C */
+      '?', /* U+BB3D */
+      '?', /* U+BB3E */
+      '?', /* U+BB3F */
+      '?', /* U+BB40 */
+      '?', /* U+BB41 */
+      '?', /* U+BB42 */
+      '?', /* U+BB43 */
+      '?', /* U+BB44 */
+      '?', /* U+BB45 */
+      '?', /* U+BB46 */
+      '?', /* U+BB47 */
+      '?', /* U+BB48 */
+      '?', /* U+BB49 */
+      '?', /* U+BB4A */
+      '?', /* U+BB4B */
+      '?', /* U+BB4C */
+      '?', /* U+BB4D */
+      '?', /* U+BB4E */
+      '?', /* U+BB4F */
+      '?', /* U+BB50 */
+      '?', /* U+BB51 */
+      '?', /* U+BB52 */
+      '?', /* U+BB53 */
+      '?', /* U+BB54 */
+      '?', /* U+BB55 */
+      '?', /* U+BB56 */
+      '?', /* U+BB57 */
+      '?', /* U+BB58 */
+      '?', /* U+BB59 */
+      '?', /* U+BB5A */
+      '?', /* U+BB5B */
+      '?', /* U+BB5C */
+      '?', /* U+BB5D */
+      '?', /* U+BB5E */
+      '?', /* U+BB5F */
+      '?', /* U+BB60 */
+      '?', /* U+BB61 */
+      '?', /* U+BB62 */
+      '?', /* U+BB63 */
+      '?', /* U+BB64 */
+      '?', /* U+BB65 */
+      '?', /* U+BB66 */
+      '?', /* U+BB67 */
+      '?', /* U+BB68 */
+      '?', /* U+BB69 */
+      '?', /* U+BB6A */
+      '?', /* U+BB6B */
+      '?', /* U+BB6C */
+      '?', /* U+BB6D */
+      '?', /* U+BB6E */
+      '?', /* U+BB6F */
+      '?', /* U+BB70 */
+      '?', /* U+BB71 */
+      '?', /* U+BB72 */
+      '?', /* U+BB73 */
+      '?', /* U+BB74 */
+      '?', /* U+BB75 */
+      '?', /* U+BB76 */
+      '?', /* U+BB77 */
+      '?', /* U+BB78 */
+      '?', /* U+BB79 */
+      '?', /* U+BB7A */
+      '?', /* U+BB7B */
+      '?', /* U+BB7C */
+      '?', /* U+BB7D */
+      '?', /* U+BB7E */
+      '?', /* U+BB7F */
+      '?', /* U+BB80 */
+      '?', /* U+BB81 */
+      '?', /* U+BB82 */
+      '?', /* U+BB83 */
+      '?', /* U+BB84 */
+      '?', /* U+BB85 */
+      '?', /* U+BB86 */
+      '?', /* U+BB87 */
+      '?', /* U+BB88 */
+      '?', /* U+BB89 */
+      '?', /* U+BB8A */
+      '?', /* U+BB8B */
+      '?', /* U+BB8C */
+      '?', /* U+BB8D */
+      '?', /* U+BB8E */
+      '?', /* U+BB8F */
+      '?', /* U+BB90 */
+      '?', /* U+BB91 */
+      '?', /* U+BB92 */
+      '?', /* U+BB93 */
+      '?', /* U+BB94 */
+      '?', /* U+BB95 */
+      '?', /* U+BB96 */
+      '?', /* U+BB97 */
+      '?', /* U+BB98 */
+      '?', /* U+BB99 */
+      '?', /* U+BB9A */
+      '?', /* U+BB9B */
+      '?', /* U+BB9C */
+      '?', /* U+BB9D */
+      '?', /* U+BB9E */
+      '?', /* U+BB9F */
+      '?', /* U+BBA0 */
+      '?', /* U+BBA1 */
+      '?', /* U+BBA2 */
+      '?', /* U+BBA3 */
+      '?', /* U+BBA4 */
+      '?', /* U+BBA5 */
+      '?', /* U+BBA6 */
+      '?', /* U+BBA7 */
+      '?', /* U+BBA8 */
+      '?', /* U+BBA9 */
+      '?', /* U+BBAA */
+      '?', /* U+BBAB */
+      '?', /* U+BBAC */
+      '?', /* U+BBAD */
+      '?', /* U+BBAE */
+      '?', /* U+BBAF */
+      '?', /* U+BBB0 */
+      '?', /* U+BBB1 */
+      '?', /* U+BBB2 */
+      '?', /* U+BBB3 */
+      '?', /* U+BBB4 */
+      '?', /* U+BBB5 */
+      '?', /* U+BBB6 */
+      '?', /* U+BBB7 */
+      '?', /* U+BBB8 */
+      '?', /* U+BBB9 */
+      '?', /* U+BBBA */
+      '?', /* U+BBBB */
+      '?', /* U+BBBC */
+      '?', /* U+BBBD */
+      '?', /* U+BBBE */
+      '?', /* U+BBBF */
+      '?', /* U+BBC0 */
+      '?', /* U+BBC1 */
+      '?', /* U+BBC2 */
+      '?', /* U+BBC3 */
+      '?', /* U+BBC4 */
+      '?', /* U+BBC5 */
+      '?', /* U+BBC6 */
+      '?', /* U+BBC7 */
+      '?', /* U+BBC8 */
+      '?', /* U+BBC9 */
+      '?', /* U+BBCA */
+      '?', /* U+BBCB */
+      '?', /* U+BBCC */
+      '?', /* U+BBCD */
+      '?', /* U+BBCE */
+      '?', /* U+BBCF */
+      '?', /* U+BBD0 */
+      '?', /* U+BBD1 */
+      '?', /* U+BBD2 */
+      '?', /* U+BBD3 */
+      '?', /* U+BBD4 */
+      '?', /* U+BBD5 */
+      '?', /* U+BBD6 */
+      '?', /* U+BBD7 */
+      '?', /* U+BBD8 */
+      '?', /* U+BBD9 */
+      '?', /* U+BBDA */
+      '?', /* U+BBDB */
+      '?', /* U+BBDC */
+      '?', /* U+BBDD */
+      '?', /* U+BBDE */
+      '?', /* U+BBDF */
+      '?', /* U+BBE0 */
+      '?', /* U+BBE1 */
+      '?', /* U+BBE2 */
+      '?', /* U+BBE3 */
+      '?', /* U+BBE4 */
+      '?', /* U+BBE5 */
+      '?', /* U+BBE6 */
+      '?', /* U+BBE7 */
+      '?', /* U+BBE8 */
+      '?', /* U+BBE9 */
+      '?', /* U+BBEA */
+      '?', /* U+BBEB */
+      '?', /* U+BBEC */
+      '?', /* U+BBED */
+      '?', /* U+BBEE */
+      '?', /* U+BBEF */
+      '?', /* U+BBF0 */
+      '?', /* U+BBF1 */
+      '?', /* U+BBF2 */
+      '?', /* U+BBF3 */
+      '?', /* U+BBF4 */
+      '?', /* U+BBF5 */
+      '?', /* U+BBF6 */
+      '?', /* U+BBF7 */
+      '?', /* U+BBF8 */
+      '?', /* U+BBF9 */
+      '?', /* U+BBFA */
+      '?', /* U+BBFB */
+      '?', /* U+BBFC */
+      '?', /* U+BBFD */
+      '?', /* U+BBFE */
+      '?', /* U+BBFF */
+      '?', /* U+BC00 */
+      '?', /* U+BC01 */
+      '?', /* U+BC02 */
+      '?', /* U+BC03 */
+      '?', /* U+BC04 */
+      '?', /* U+BC05 */
+      '?', /* U+BC06 */
+      '?', /* U+BC07 */
+      '?', /* U+BC08 */
+      '?', /* U+BC09 */
+      '?', /* U+BC0A */
+      '?', /* U+BC0B */
+      '?', /* U+BC0C */
+      '?', /* U+BC0D */
+      '?', /* U+BC0E */
+      '?', /* U+BC0F */
+      '?', /* U+BC10 */
+      '?', /* U+BC11 */
+      '?', /* U+BC12 */
+      '?', /* U+BC13 */
+      '?', /* U+BC14 */
+      '?', /* U+BC15 */
+      '?', /* U+BC16 */
+      '?', /* U+BC17 */
+      '?', /* U+BC18 */
+      '?', /* U+BC19 */
+      '?', /* U+BC1A */
+      '?', /* U+BC1B */
+      '?', /* U+BC1C */
+      '?', /* U+BC1D */
+      '?', /* U+BC1E */
+      '?', /* U+BC1F */
+      '?', /* U+BC20 */
+      '?', /* U+BC21 */
+      '?', /* U+BC22 */
+      '?', /* U+BC23 */
+      '?', /* U+BC24 */
+      '?', /* U+BC25 */
+      '?', /* U+BC26 */
+      '?', /* U+BC27 */
+      '?', /* U+BC28 */
+      '?', /* U+BC29 */
+      '?', /* U+BC2A */
+      '?', /* U+BC2B */
+      '?', /* U+BC2C */
+      '?', /* U+BC2D */
+      '?', /* U+BC2E */
+      '?', /* U+BC2F */
+      '?', /* U+BC30 */
+      '?', /* U+BC31 */
+      '?', /* U+BC32 */
+      '?', /* U+BC33 */
+      '?', /* U+BC34 */
+      '?', /* U+BC35 */
+      '?', /* U+BC36 */
+      '?', /* U+BC37 */
+      '?', /* U+BC38 */
+      '?', /* U+BC39 */
+      '?', /* U+BC3A */
+      '?', /* U+BC3B */
+      '?', /* U+BC3C */
+      '?', /* U+BC3D */
+      '?', /* U+BC3E */
+      '?', /* U+BC3F */
+      '?', /* U+BC40 */
+      '?', /* U+BC41 */
+      '?', /* U+BC42 */
+      '?', /* U+BC43 */
+      '?', /* U+BC44 */
+      '?', /* U+BC45 */
+      '?', /* U+BC46 */
+      '?', /* U+BC47 */
+      '?', /* U+BC48 */
+      '?', /* U+BC49 */
+      '?', /* U+BC4A */
+      '?', /* U+BC4B */
+      '?', /* U+BC4C */
+      '?', /* U+BC4D */
+      '?', /* U+BC4E */
+      '?', /* U+BC4F */
+      '?', /* U+BC50 */
+      '?', /* U+BC51 */
+      '?', /* U+BC52 */
+      '?', /* U+BC53 */
+      '?', /* U+BC54 */
+      '?', /* U+BC55 */
+      '?', /* U+BC56 */
+      '?', /* U+BC57 */
+      '?', /* U+BC58 */
+      '?', /* U+BC59 */
+      '?', /* U+BC5A */
+      '?', /* U+BC5B */
+      '?', /* U+BC5C */
+      '?', /* U+BC5D */
+      '?', /* U+BC5E */
+      '?', /* U+BC5F */
+      '?', /* U+BC60 */
+      '?', /* U+BC61 */
+      '?', /* U+BC62 */
+      '?', /* U+BC63 */
+      '?', /* U+BC64 */
+      '?', /* U+BC65 */
+      '?', /* U+BC66 */
+      '?', /* U+BC67 */
+      '?', /* U+BC68 */
+      '?', /* U+BC69 */
+      '?', /* U+BC6A */
+      '?', /* U+BC6B */
+      '?', /* U+BC6C */
+      '?', /* U+BC6D */
+      '?', /* U+BC6E */
+      '?', /* U+BC6F */
+      '?', /* U+BC70 */
+      '?', /* U+BC71 */
+      '?', /* U+BC72 */
+      '?', /* U+BC73 */
+      '?', /* U+BC74 */
+      '?', /* U+BC75 */
+      '?', /* U+BC76 */
+      '?', /* U+BC77 */
+      '?', /* U+BC78 */
+      '?', /* U+BC79 */
+      '?', /* U+BC7A */
+      '?', /* U+BC7B */
+      '?', /* U+BC7C */
+      '?', /* U+BC7D */
+      '?', /* U+BC7E */
+      '?', /* U+BC7F */
+      '?', /* U+BC80 */
+      '?', /* U+BC81 */
+      '?', /* U+BC82 */
+      '?', /* U+BC83 */
+      '?', /* U+BC84 */
+      '?', /* U+BC85 */
+      '?', /* U+BC86 */
+      '?', /* U+BC87 */
+      '?', /* U+BC88 */
+      '?', /* U+BC89 */
+      '?', /* U+BC8A */
+      '?', /* U+BC8B */
+      '?', /* U+BC8C */
+      '?', /* U+BC8D */
+      '?', /* U+BC8E */
+      '?', /* U+BC8F */
+      '?', /* U+BC90 */
+      '?', /* U+BC91 */
+      '?', /* U+BC92 */
+      '?', /* U+BC93 */
+      '?', /* U+BC94 */
+      '?', /* U+BC95 */
+      '?', /* U+BC96 */
+      '?', /* U+BC97 */
+      '?', /* U+BC98 */
+      '?', /* U+BC99 */
+      '?', /* U+BC9A */
+      '?', /* U+BC9B */
+      '?', /* U+BC9C */
+      '?', /* U+BC9D */
+      '?', /* U+BC9E */
+      '?', /* U+BC9F */
+      '?', /* U+BCA0 */
+      '?', /* U+BCA1 */
+      '?', /* U+BCA2 */
+      '?', /* U+BCA3 */
+      '?', /* U+BCA4 */
+      '?', /* U+BCA5 */
+      '?', /* U+BCA6 */
+      '?', /* U+BCA7 */
+      '?', /* U+BCA8 */
+      '?', /* U+BCA9 */
+      '?', /* U+BCAA */
+      '?', /* U+BCAB */
+      '?', /* U+BCAC */
+      '?', /* U+BCAD */
+      '?', /* U+BCAE */
+      '?', /* U+BCAF */
+      '?', /* U+BCB0 */
+      '?', /* U+BCB1 */
+      '?', /* U+BCB2 */
+      '?', /* U+BCB3 */
+      '?', /* U+BCB4 */
+      '?', /* U+BCB5 */
+      '?', /* U+BCB6 */
+      '?', /* U+BCB7 */
+      '?', /* U+BCB8 */
+      '?', /* U+BCB9 */
+      '?', /* U+BCBA */
+      '?', /* U+BCBB */
+      '?', /* U+BCBC */
+      '?', /* U+BCBD */
+      '?', /* U+BCBE */
+      '?', /* U+BCBF */
+      '?', /* U+BCC0 */
+      '?', /* U+BCC1 */
+      '?', /* U+BCC2 */
+      '?', /* U+BCC3 */
+      '?', /* U+BCC4 */
+      '?', /* U+BCC5 */
+      '?', /* U+BCC6 */
+      '?', /* U+BCC7 */
+      '?', /* U+BCC8 */
+      '?', /* U+BCC9 */
+      '?', /* U+BCCA */
+      '?', /* U+BCCB */
+      '?', /* U+BCCC */
+      '?', /* U+BCCD */
+      '?', /* U+BCCE */
+      '?', /* U+BCCF */
+      '?', /* U+BCD0 */
+      '?', /* U+BCD1 */
+      '?', /* U+BCD2 */
+      '?', /* U+BCD3 */
+      '?', /* U+BCD4 */
+      '?', /* U+BCD5 */
+      '?', /* U+BCD6 */
+      '?', /* U+BCD7 */
+      '?', /* U+BCD8 */
+      '?', /* U+BCD9 */
+      '?', /* U+BCDA */
+      '?', /* U+BCDB */
+      '?', /* U+BCDC */
+      '?', /* U+BCDD */
+      '?', /* U+BCDE */
+      '?', /* U+BCDF */
+      '?', /* U+BCE0 */
+      '?', /* U+BCE1 */
+      '?', /* U+BCE2 */
+      '?', /* U+BCE3 */
+      '?', /* U+BCE4 */
+      '?', /* U+BCE5 */
+      '?', /* U+BCE6 */
+      '?', /* U+BCE7 */
+      '?', /* U+BCE8 */
+      '?', /* U+BCE9 */
+      '?', /* U+BCEA */
+      '?', /* U+BCEB */
+      '?', /* U+BCEC */
+      '?', /* U+BCED */
+      '?', /* U+BCEE */
+      '?', /* U+BCEF */
+      '?', /* U+BCF0 */
+      '?', /* U+BCF1 */
+      '?', /* U+BCF2 */
+      '?', /* U+BCF3 */
+      '?', /* U+BCF4 */
+      '?', /* U+BCF5 */
+      '?', /* U+BCF6 */
+      '?', /* U+BCF7 */
+      '?', /* U+BCF8 */
+      '?', /* U+BCF9 */
+      '?', /* U+BCFA */
+      '?', /* U+BCFB */
+      '?', /* U+BCFC */
+      '?', /* U+BCFD */
+      '?', /* U+BCFE */
+      '?', /* U+BCFF */
+      '?', /* U+BD00 */
+      '?', /* U+BD01 */
+      '?', /* U+BD02 */
+      '?', /* U+BD03 */
+      '?', /* U+BD04 */
+      '?', /* U+BD05 */
+      '?', /* U+BD06 */
+      '?', /* U+BD07 */
+      '?', /* U+BD08 */
+      '?', /* U+BD09 */
+      '?', /* U+BD0A */
+      '?', /* U+BD0B */
+      '?', /* U+BD0C */
+      '?', /* U+BD0D */
+      '?', /* U+BD0E */
+      '?', /* U+BD0F */
+      '?', /* U+BD10 */
+      '?', /* U+BD11 */
+      '?', /* U+BD12 */
+      '?', /* U+BD13 */
+      '?', /* U+BD14 */
+      '?', /* U+BD15 */
+      '?', /* U+BD16 */
+      '?', /* U+BD17 */
+      '?', /* U+BD18 */
+      '?', /* U+BD19 */
+      '?', /* U+BD1A */
+      '?', /* U+BD1B */
+      '?', /* U+BD1C */
+      '?', /* U+BD1D */
+      '?', /* U+BD1E */
+      '?', /* U+BD1F */
+      '?', /* U+BD20 */
+      '?', /* U+BD21 */
+      '?', /* U+BD22 */
+      '?', /* U+BD23 */
+      '?', /* U+BD24 */
+      '?', /* U+BD25 */
+      '?', /* U+BD26 */
+      '?', /* U+BD27 */
+      '?', /* U+BD28 */
+      '?', /* U+BD29 */
+      '?', /* U+BD2A */
+      '?', /* U+BD2B */
+      '?', /* U+BD2C */
+      '?', /* U+BD2D */
+      '?', /* U+BD2E */
+      '?', /* U+BD2F */
+      '?', /* U+BD30 */
+      '?', /* U+BD31 */
+      '?', /* U+BD32 */
+      '?', /* U+BD33 */
+      '?', /* U+BD34 */
+      '?', /* U+BD35 */
+      '?', /* U+BD36 */
+      '?', /* U+BD37 */
+      '?', /* U+BD38 */
+      '?', /* U+BD39 */
+      '?', /* U+BD3A */
+      '?', /* U+BD3B */
+      '?', /* U+BD3C */
+      '?', /* U+BD3D */
+      '?', /* U+BD3E */
+      '?', /* U+BD3F */
+      '?', /* U+BD40 */
+      '?', /* U+BD41 */
+      '?', /* U+BD42 */
+      '?', /* U+BD43 */
+      '?', /* U+BD44 */
+      '?', /* U+BD45 */
+      '?', /* U+BD46 */
+      '?', /* U+BD47 */
+      '?', /* U+BD48 */
+      '?', /* U+BD49 */
+      '?', /* U+BD4A */
+      '?', /* U+BD4B */
+      '?', /* U+BD4C */
+      '?', /* U+BD4D */
+      '?', /* U+BD4E */
+      '?', /* U+BD4F */
+      '?', /* U+BD50 */
+      '?', /* U+BD51 */
+      '?', /* U+BD52 */
+      '?', /* U+BD53 */
+      '?', /* U+BD54 */
+      '?', /* U+BD55 */
+      '?', /* U+BD56 */
+      '?', /* U+BD57 */
+      '?', /* U+BD58 */
+      '?', /* U+BD59 */
+      '?', /* U+BD5A */
+      '?', /* U+BD5B */
+      '?', /* U+BD5C */
+      '?', /* U+BD5D */
+      '?', /* U+BD5E */
+      '?', /* U+BD5F */
+      '?', /* U+BD60 */
+      '?', /* U+BD61 */
+      '?', /* U+BD62 */
+      '?', /* U+BD63 */
+      '?', /* U+BD64 */
+      '?', /* U+BD65 */
+      '?', /* U+BD66 */
+      '?', /* U+BD67 */
+      '?', /* U+BD68 */
+      '?', /* U+BD69 */
+      '?', /* U+BD6A */
+      '?', /* U+BD6B */
+      '?', /* U+BD6C */
+      '?', /* U+BD6D */
+      '?', /* U+BD6E */
+      '?', /* U+BD6F */
+      '?', /* U+BD70 */
+      '?', /* U+BD71 */
+      '?', /* U+BD72 */
+      '?', /* U+BD73 */
+      '?', /* U+BD74 */
+      '?', /* U+BD75 */
+      '?', /* U+BD76 */
+      '?', /* U+BD77 */
+      '?', /* U+BD78 */
+      '?', /* U+BD79 */
+      '?', /* U+BD7A */
+      '?', /* U+BD7B */
+      '?', /* U+BD7C */
+      '?', /* U+BD7D */
+      '?', /* U+BD7E */
+      '?', /* U+BD7F */
+      '?', /* U+BD80 */
+      '?', /* U+BD81 */
+      '?', /* U+BD82 */
+      '?', /* U+BD83 */
+      '?', /* U+BD84 */
+      '?', /* U+BD85 */
+      '?', /* U+BD86 */
+      '?', /* U+BD87 */
+      '?', /* U+BD88 */
+      '?', /* U+BD89 */
+      '?', /* U+BD8A */
+      '?', /* U+BD8B */
+      '?', /* U+BD8C */
+      '?', /* U+BD8D */
+      '?', /* U+BD8E */
+      '?', /* U+BD8F */
+      '?', /* U+BD90 */
+      '?', /* U+BD91 */
+      '?', /* U+BD92 */
+      '?', /* U+BD93 */
+      '?', /* U+BD94 */
+      '?', /* U+BD95 */
+      '?', /* U+BD96 */
+      '?', /* U+BD97 */
+      '?', /* U+BD98 */
+      '?', /* U+BD99 */
+      '?', /* U+BD9A */
+      '?', /* U+BD9B */
+      '?', /* U+BD9C */
+      '?', /* U+BD9D */
+      '?', /* U+BD9E */
+      '?', /* U+BD9F */
+      '?', /* U+BDA0 */
+      '?', /* U+BDA1 */
+      '?', /* U+BDA2 */
+      '?', /* U+BDA3 */
+      '?', /* U+BDA4 */
+      '?', /* U+BDA5 */
+      '?', /* U+BDA6 */
+      '?', /* U+BDA7 */
+      '?', /* U+BDA8 */
+      '?', /* U+BDA9 */
+      '?', /* U+BDAA */
+      '?', /* U+BDAB */
+      '?', /* U+BDAC */
+      '?', /* U+BDAD */
+      '?', /* U+BDAE */
+      '?', /* U+BDAF */
+      '?', /* U+BDB0 */
+      '?', /* U+BDB1 */
+      '?', /* U+BDB2 */
+      '?', /* U+BDB3 */
+      '?', /* U+BDB4 */
+      '?', /* U+BDB5 */
+      '?', /* U+BDB6 */
+      '?', /* U+BDB7 */
+      '?', /* U+BDB8 */
+      '?', /* U+BDB9 */
+      '?', /* U+BDBA */
+      '?', /* U+BDBB */
+      '?', /* U+BDBC */
+      '?', /* U+BDBD */
+      '?', /* U+BDBE */
+      '?', /* U+BDBF */
+      '?', /* U+BDC0 */
+      '?', /* U+BDC1 */
+      '?', /* U+BDC2 */
+      '?', /* U+BDC3 */
+      '?', /* U+BDC4 */
+      '?', /* U+BDC5 */
+      '?', /* U+BDC6 */
+      '?', /* U+BDC7 */
+      '?', /* U+BDC8 */
+      '?', /* U+BDC9 */
+      '?', /* U+BDCA */
+      '?', /* U+BDCB */
+      '?', /* U+BDCC */
+      '?', /* U+BDCD */
+      '?', /* U+BDCE */
+      '?', /* U+BDCF */
+      '?', /* U+BDD0 */
+      '?', /* U+BDD1 */
+      '?', /* U+BDD2 */
+      '?', /* U+BDD3 */
+      '?', /* U+BDD4 */
+      '?', /* U+BDD5 */
+      '?', /* U+BDD6 */
+      '?', /* U+BDD7 */
+      '?', /* U+BDD8 */
+      '?', /* U+BDD9 */
+      '?', /* U+BDDA */
+      '?', /* U+BDDB */
+      '?', /* U+BDDC */
+      '?', /* U+BDDD */
+      '?', /* U+BDDE */
+      '?', /* U+BDDF */
+      '?', /* U+BDE0 */
+      '?', /* U+BDE1 */
+      '?', /* U+BDE2 */
+      '?', /* U+BDE3 */
+      '?', /* U+BDE4 */
+      '?', /* U+BDE5 */
+      '?', /* U+BDE6 */
+      '?', /* U+BDE7 */
+      '?', /* U+BDE8 */
+      '?', /* U+BDE9 */
+      '?', /* U+BDEA */
+      '?', /* U+BDEB */
+      '?', /* U+BDEC */
+      '?', /* U+BDED */
+      '?', /* U+BDEE */
+      '?', /* U+BDEF */
+      '?', /* U+BDF0 */
+      '?', /* U+BDF1 */
+      '?', /* U+BDF2 */
+      '?', /* U+BDF3 */
+      '?', /* U+BDF4 */
+      '?', /* U+BDF5 */
+      '?', /* U+BDF6 */
+      '?', /* U+BDF7 */
+      '?', /* U+BDF8 */
+      '?', /* U+BDF9 */
+      '?', /* U+BDFA */
+      '?', /* U+BDFB */
+      '?', /* U+BDFC */
+      '?', /* U+BDFD */
+      '?', /* U+BDFE */
+      '?', /* U+BDFF */
+      '?', /* U+BE00 */
+      '?', /* U+BE01 */
+      '?', /* U+BE02 */
+      '?', /* U+BE03 */
+      '?', /* U+BE04 */
+      '?', /* U+BE05 */
+      '?', /* U+BE06 */
+      '?', /* U+BE07 */
+      '?', /* U+BE08 */
+      '?', /* U+BE09 */
+      '?', /* U+BE0A */
+      '?', /* U+BE0B */
+      '?', /* U+BE0C */
+      '?', /* U+BE0D */
+      '?', /* U+BE0E */
+      '?', /* U+BE0F */
+      '?', /* U+BE10 */
+      '?', /* U+BE11 */
+      '?', /* U+BE12 */
+      '?', /* U+BE13 */
+      '?', /* U+BE14 */
+      '?', /* U+BE15 */
+      '?', /* U+BE16 */
+      '?', /* U+BE17 */
+      '?', /* U+BE18 */
+      '?', /* U+BE19 */
+      '?', /* U+BE1A */
+      '?', /* U+BE1B */
+      '?', /* U+BE1C */
+      '?', /* U+BE1D */
+      '?', /* U+BE1E */
+      '?', /* U+BE1F */
+      '?', /* U+BE20 */
+      '?', /* U+BE21 */
+      '?', /* U+BE22 */
+      '?', /* U+BE23 */
+      '?', /* U+BE24 */
+      '?', /* U+BE25 */
+      '?', /* U+BE26 */
+      '?', /* U+BE27 */
+      '?', /* U+BE28 */
+      '?', /* U+BE29 */
+      '?', /* U+BE2A */
+      '?', /* U+BE2B */
+      '?', /* U+BE2C */
+      '?', /* U+BE2D */
+      '?', /* U+BE2E */
+      '?', /* U+BE2F */
+      '?', /* U+BE30 */
+      '?', /* U+BE31 */
+      '?', /* U+BE32 */
+      '?', /* U+BE33 */
+      '?', /* U+BE34 */
+      '?', /* U+BE35 */
+      '?', /* U+BE36 */
+      '?', /* U+BE37 */
+      '?', /* U+BE38 */
+      '?', /* U+BE39 */
+      '?', /* U+BE3A */
+      '?', /* U+BE3B */
+      '?', /* U+BE3C */
+      '?', /* U+BE3D */
+      '?', /* U+BE3E */
+      '?', /* U+BE3F */
+      '?', /* U+BE40 */
+      '?', /* U+BE41 */
+      '?', /* U+BE42 */
+      '?', /* U+BE43 */
+      '?', /* U+BE44 */
+      '?', /* U+BE45 */
+      '?', /* U+BE46 */
+      '?', /* U+BE47 */
+      '?', /* U+BE48 */
+      '?', /* U+BE49 */
+      '?', /* U+BE4A */
+      '?', /* U+BE4B */
+      '?', /* U+BE4C */
+      '?', /* U+BE4D */
+      '?', /* U+BE4E */
+      '?', /* U+BE4F */
+      '?', /* U+BE50 */
+      '?', /* U+BE51 */
+      '?', /* U+BE52 */
+      '?', /* U+BE53 */
+      '?', /* U+BE54 */
+      '?', /* U+BE55 */
+      '?', /* U+BE56 */
+      '?', /* U+BE57 */
+      '?', /* U+BE58 */
+      '?', /* U+BE59 */
+      '?', /* U+BE5A */
+      '?', /* U+BE5B */
+      '?', /* U+BE5C */
+      '?', /* U+BE5D */
+      '?', /* U+BE5E */
+      '?', /* U+BE5F */
+      '?', /* U+BE60 */
+      '?', /* U+BE61 */
+      '?', /* U+BE62 */
+      '?', /* U+BE63 */
+      '?', /* U+BE64 */
+      '?', /* U+BE65 */
+      '?', /* U+BE66 */
+      '?', /* U+BE67 */
+      '?', /* U+BE68 */
+      '?', /* U+BE69 */
+      '?', /* U+BE6A */
+      '?', /* U+BE6B */
+      '?', /* U+BE6C */
+      '?', /* U+BE6D */
+      '?', /* U+BE6E */
+      '?', /* U+BE6F */
+      '?', /* U+BE70 */
+      '?', /* U+BE71 */
+      '?', /* U+BE72 */
+      '?', /* U+BE73 */
+      '?', /* U+BE74 */
+      '?', /* U+BE75 */
+      '?', /* U+BE76 */
+      '?', /* U+BE77 */
+      '?', /* U+BE78 */
+      '?', /* U+BE79 */
+      '?', /* U+BE7A */
+      '?', /* U+BE7B */
+      '?', /* U+BE7C */
+      '?', /* U+BE7D */
+      '?', /* U+BE7E */
+      '?', /* U+BE7F */
+      '?', /* U+BE80 */
+      '?', /* U+BE81 */
+      '?', /* U+BE82 */
+      '?', /* U+BE83 */
+      '?', /* U+BE84 */
+      '?', /* U+BE85 */
+      '?', /* U+BE86 */
+      '?', /* U+BE87 */
+      '?', /* U+BE88 */
+      '?', /* U+BE89 */
+      '?', /* U+BE8A */
+      '?', /* U+BE8B */
+      '?', /* U+BE8C */
+      '?', /* U+BE8D */
+      '?', /* U+BE8E */
+      '?', /* U+BE8F */
+      '?', /* U+BE90 */
+      '?', /* U+BE91 */
+      '?', /* U+BE92 */
+      '?', /* U+BE93 */
+      '?', /* U+BE94 */
+      '?', /* U+BE95 */
+      '?', /* U+BE96 */
+      '?', /* U+BE97 */
+      '?', /* U+BE98 */
+      '?', /* U+BE99 */
+      '?', /* U+BE9A */
+      '?', /* U+BE9B */
+      '?', /* U+BE9C */
+      '?', /* U+BE9D */
+      '?', /* U+BE9E */
+      '?', /* U+BE9F */
+      '?', /* U+BEA0 */
+      '?', /* U+BEA1 */
+      '?', /* U+BEA2 */
+      '?', /* U+BEA3 */
+      '?', /* U+BEA4 */
+      '?', /* U+BEA5 */
+      '?', /* U+BEA6 */
+      '?', /* U+BEA7 */
+      '?', /* U+BEA8 */
+      '?', /* U+BEA9 */
+      '?', /* U+BEAA */
+      '?', /* U+BEAB */
+      '?', /* U+BEAC */
+      '?', /* U+BEAD */
+      '?', /* U+BEAE */
+      '?', /* U+BEAF */
+      '?', /* U+BEB0 */
+      '?', /* U+BEB1 */
+      '?', /* U+BEB2 */
+      '?', /* U+BEB3 */
+      '?', /* U+BEB4 */
+      '?', /* U+BEB5 */
+      '?', /* U+BEB6 */
+      '?', /* U+BEB7 */
+      '?', /* U+BEB8 */
+      '?', /* U+BEB9 */
+      '?', /* U+BEBA */
+      '?', /* U+BEBB */
+      '?', /* U+BEBC */
+      '?', /* U+BEBD */
+      '?', /* U+BEBE */
+      '?', /* U+BEBF */
+      '?', /* U+BEC0 */
+      '?', /* U+BEC1 */
+      '?', /* U+BEC2 */
+      '?', /* U+BEC3 */
+      '?', /* U+BEC4 */
+      '?', /* U+BEC5 */
+      '?', /* U+BEC6 */
+      '?', /* U+BEC7 */
+      '?', /* U+BEC8 */
+      '?', /* U+BEC9 */
+      '?', /* U+BECA */
+      '?', /* U+BECB */
+      '?', /* U+BECC */
+      '?', /* U+BECD */
+      '?', /* U+BECE */
+      '?', /* U+BECF */
+      '?', /* U+BED0 */
+      '?', /* U+BED1 */
+      '?', /* U+BED2 */
+      '?', /* U+BED3 */
+      '?', /* U+BED4 */
+      '?', /* U+BED5 */
+      '?', /* U+BED6 */
+      '?', /* U+BED7 */
+      '?', /* U+BED8 */
+      '?', /* U+BED9 */
+      '?', /* U+BEDA */
+      '?', /* U+BEDB */
+      '?', /* U+BEDC */
+      '?', /* U+BEDD */
+      '?', /* U+BEDE */
+      '?', /* U+BEDF */
+      '?', /* U+BEE0 */
+      '?', /* U+BEE1 */
+      '?', /* U+BEE2 */
+      '?', /* U+BEE3 */
+      '?', /* U+BEE4 */
+      '?', /* U+BEE5 */
+      '?', /* U+BEE6 */
+      '?', /* U+BEE7 */
+      '?', /* U+BEE8 */
+      '?', /* U+BEE9 */
+      '?', /* U+BEEA */
+      '?', /* U+BEEB */
+      '?', /* U+BEEC */
+      '?', /* U+BEED */
+      '?', /* U+BEEE */
+      '?', /* U+BEEF */
+      '?', /* U+BEF0 */
+      '?', /* U+BEF1 */
+      '?', /* U+BEF2 */
+      '?', /* U+BEF3 */
+      '?', /* U+BEF4 */
+      '?', /* U+BEF5 */
+      '?', /* U+BEF6 */
+      '?', /* U+BEF7 */
+      '?', /* U+BEF8 */
+      '?', /* U+BEF9 */
+      '?', /* U+BEFA */
+      '?', /* U+BEFB */
+      '?', /* U+BEFC */
+      '?', /* U+BEFD */
+      '?', /* U+BEFE */
+      '?', /* U+BEFF */
+      '?', /* U+BF00 */
+      '?', /* U+BF01 */
+      '?', /* U+BF02 */
+      '?', /* U+BF03 */
+      '?', /* U+BF04 */
+      '?', /* U+BF05 */
+      '?', /* U+BF06 */
+      '?', /* U+BF07 */
+      '?', /* U+BF08 */
+      '?', /* U+BF09 */
+      '?', /* U+BF0A */
+      '?', /* U+BF0B */
+      '?', /* U+BF0C */
+      '?', /* U+BF0D */
+      '?', /* U+BF0E */
+      '?', /* U+BF0F */
+      '?', /* U+BF10 */
+      '?', /* U+BF11 */
+      '?', /* U+BF12 */
+      '?', /* U+BF13 */
+      '?', /* U+BF14 */
+      '?', /* U+BF15 */
+      '?', /* U+BF16 */
+      '?', /* U+BF17 */
+      '?', /* U+BF18 */
+      '?', /* U+BF19 */
+      '?', /* U+BF1A */
+      '?', /* U+BF1B */
+      '?', /* U+BF1C */
+      '?', /* U+BF1D */
+      '?', /* U+BF1E */
+      '?', /* U+BF1F */
+      '?', /* U+BF20 */
+      '?', /* U+BF21 */
+      '?', /* U+BF22 */
+      '?', /* U+BF23 */
+      '?', /* U+BF24 */
+      '?', /* U+BF25 */
+      '?', /* U+BF26 */
+      '?', /* U+BF27 */
+      '?', /* U+BF28 */
+      '?', /* U+BF29 */
+      '?', /* U+BF2A */
+      '?', /* U+BF2B */
+      '?', /* U+BF2C */
+      '?', /* U+BF2D */
+      '?', /* U+BF2E */
+      '?', /* U+BF2F */
+      '?', /* U+BF30 */
+      '?', /* U+BF31 */
+      '?', /* U+BF32 */
+      '?', /* U+BF33 */
+      '?', /* U+BF34 */
+      '?', /* U+BF35 */
+      '?', /* U+BF36 */
+      '?', /* U+BF37 */
+      '?', /* U+BF38 */
+      '?', /* U+BF39 */
+      '?', /* U+BF3A */
+      '?', /* U+BF3B */
+      '?', /* U+BF3C */
+      '?', /* U+BF3D */
+      '?', /* U+BF3E */
+      '?', /* U+BF3F */
+      '?', /* U+BF40 */
+      '?', /* U+BF41 */
+      '?', /* U+BF42 */
+      '?', /* U+BF43 */
+      '?', /* U+BF44 */
+      '?', /* U+BF45 */
+      '?', /* U+BF46 */
+      '?', /* U+BF47 */
+      '?', /* U+BF48 */
+      '?', /* U+BF49 */
+      '?', /* U+BF4A */
+      '?', /* U+BF4B */
+      '?', /* U+BF4C */
+      '?', /* U+BF4D */
+      '?', /* U+BF4E */
+      '?', /* U+BF4F */
+      '?', /* U+BF50 */
+      '?', /* U+BF51 */
+      '?', /* U+BF52 */
+      '?', /* U+BF53 */
+      '?', /* U+BF54 */
+      '?', /* U+BF55 */
+      '?', /* U+BF56 */
+      '?', /* U+BF57 */
+      '?', /* U+BF58 */
+      '?', /* U+BF59 */
+      '?', /* U+BF5A */
+      '?', /* U+BF5B */
+      '?', /* U+BF5C */
+      '?', /* U+BF5D */
+      '?', /* U+BF5E */
+      '?', /* U+BF5F */
+      '?', /* U+BF60 */
+      '?', /* U+BF61 */
+      '?', /* U+BF62 */
+      '?', /* U+BF63 */
+      '?', /* U+BF64 */
+      '?', /* U+BF65 */
+      '?', /* U+BF66 */
+      '?', /* U+BF67 */
+      '?', /* U+BF68 */
+      '?', /* U+BF69 */
+      '?', /* U+BF6A */
+      '?', /* U+BF6B */
+      '?', /* U+BF6C */
+      '?', /* U+BF6D */
+      '?', /* U+BF6E */
+      '?', /* U+BF6F */
+      '?', /* U+BF70 */
+      '?', /* U+BF71 */
+      '?', /* U+BF72 */
+      '?', /* U+BF73 */
+      '?', /* U+BF74 */
+      '?', /* U+BF75 */
+      '?', /* U+BF76 */
+      '?', /* U+BF77 */
+      '?', /* U+BF78 */
+      '?', /* U+BF79 */
+      '?', /* U+BF7A */
+      '?', /* U+BF7B */
+      '?', /* U+BF7C */
+      '?', /* U+BF7D */
+      '?', /* U+BF7E */
+      '?', /* U+BF7F */
+      '?', /* U+BF80 */
+      '?', /* U+BF81 */
+      '?', /* U+BF82 */
+      '?', /* U+BF83 */
+      '?', /* U+BF84 */
+      '?', /* U+BF85 */
+      '?', /* U+BF86 */
+      '?', /* U+BF87 */
+      '?', /* U+BF88 */
+      '?', /* U+BF89 */
+      '?', /* U+BF8A */
+      '?', /* U+BF8B */
+      '?', /* U+BF8C */
+      '?', /* U+BF8D */
+      '?', /* U+BF8E */
+      '?', /* U+BF8F */
+      '?', /* U+BF90 */
+      '?', /* U+BF91 */
+      '?', /* U+BF92 */
+      '?', /* U+BF93 */
+      '?', /* U+BF94 */
+      '?', /* U+BF95 */
+      '?', /* U+BF96 */
+      '?', /* U+BF97 */
+      '?', /* U+BF98 */
+      '?', /* U+BF99 */
+      '?', /* U+BF9A */
+      '?', /* U+BF9B */
+      '?', /* U+BF9C */
+      '?', /* U+BF9D */
+      '?', /* U+BF9E */
+      '?', /* U+BF9F */
+      '?', /* U+BFA0 */
+      '?', /* U+BFA1 */
+      '?', /* U+BFA2 */
+      '?', /* U+BFA3 */
+      '?', /* U+BFA4 */
+      '?', /* U+BFA5 */
+      '?', /* U+BFA6 */
+      '?', /* U+BFA7 */
+      '?', /* U+BFA8 */
+      '?', /* U+BFA9 */
+      '?', /* U+BFAA */
+      '?', /* U+BFAB */
+      '?', /* U+BFAC */
+      '?', /* U+BFAD */
+      '?', /* U+BFAE */
+      '?', /* U+BFAF */
+      '?', /* U+BFB0 */
+      '?', /* U+BFB1 */
+      '?', /* U+BFB2 */
+      '?', /* U+BFB3 */
+      '?', /* U+BFB4 */
+      '?', /* U+BFB5 */
+      '?', /* U+BFB6 */
+      '?', /* U+BFB7 */
+      '?', /* U+BFB8 */
+      '?', /* U+BFB9 */
+      '?', /* U+BFBA */
+      '?', /* U+BFBB */
+      '?', /* U+BFBC */
+      '?', /* U+BFBD */
+      '?', /* U+BFBE */
+      '?', /* U+BFBF */
+      '?', /* U+BFC0 */
+      '?', /* U+BFC1 */
+      '?', /* U+BFC2 */
+      '?', /* U+BFC3 */
+      '?', /* U+BFC4 */
+      '?', /* U+BFC5 */
+      '?', /* U+BFC6 */
+      '?', /* U+BFC7 */
+      '?', /* U+BFC8 */
+      '?', /* U+BFC9 */
+      '?', /* U+BFCA */
+      '?', /* U+BFCB */
+      '?', /* U+BFCC */
+      '?', /* U+BFCD */
+      '?', /* U+BFCE */
+      '?', /* U+BFCF */
+      '?', /* U+BFD0 */
+      '?', /* U+BFD1 */
+      '?', /* U+BFD2 */
+      '?', /* U+BFD3 */
+      '?', /* U+BFD4 */
+      '?', /* U+BFD5 */
+      '?', /* U+BFD6 */
+      '?', /* U+BFD7 */
+      '?', /* U+BFD8 */
+      '?', /* U+BFD9 */
+      '?', /* U+BFDA */
+      '?', /* U+BFDB */
+      '?', /* U+BFDC */
+      '?', /* U+BFDD */
+      '?', /* U+BFDE */
+      '?', /* U+BFDF */
+      '?', /* U+BFE0 */
+      '?', /* U+BFE1 */
+      '?', /* U+BFE2 */
+      '?', /* U+BFE3 */
+      '?', /* U+BFE4 */
+      '?', /* U+BFE5 */
+      '?', /* U+BFE6 */
+      '?', /* U+BFE7 */
+      '?', /* U+BFE8 */
+      '?', /* U+BFE9 */
+      '?', /* U+BFEA */
+      '?', /* U+BFEB */
+      '?', /* U+BFEC */
+      '?', /* U+BFED */
+      '?', /* U+BFEE */
+      '?', /* U+BFEF */
+      '?', /* U+BFF0 */
+      '?', /* U+BFF1 */
+      '?', /* U+BFF2 */
+      '?', /* U+BFF3 */
+      '?', /* U+BFF4 */
+      '?', /* U+BFF5 */
+      '?', /* U+BFF6 */
+      '?', /* U+BFF7 */
+      '?', /* U+BFF8 */
+      '?', /* U+BFF9 */
+      '?', /* U+BFFA */
+      '?', /* U+BFFB */
+      '?', /* U+BFFC */
+      '?', /* U+BFFD */
+      '?', /* U+BFFE */
+      '?', /* U+BFFF */
+      '?', /* U+C000 */
+      '?', /* U+C001 */
+      '?', /* U+C002 */
+      '?', /* U+C003 */
+      '?', /* U+C004 */
+      '?', /* U+C005 */
+      '?', /* U+C006 */
+      '?', /* U+C007 */
+      '?', /* U+C008 */
+      '?', /* U+C009 */
+      '?', /* U+C00A */
+      '?', /* U+C00B */
+      '?', /* U+C00C */
+      '?', /* U+C00D */
+      '?', /* U+C00E */
+      '?', /* U+C00F */
+      '?', /* U+C010 */
+      '?', /* U+C011 */
+      '?', /* U+C012 */
+      '?', /* U+C013 */
+      '?', /* U+C014 */
+      '?', /* U+C015 */
+      '?', /* U+C016 */
+      '?', /* U+C017 */
+      '?', /* U+C018 */
+      '?', /* U+C019 */
+      '?', /* U+C01A */
+      '?', /* U+C01B */
+      '?', /* U+C01C */
+      '?', /* U+C01D */
+      '?', /* U+C01E */
+      '?', /* U+C01F */
+      '?', /* U+C020 */
+      '?', /* U+C021 */
+      '?', /* U+C022 */
+      '?', /* U+C023 */
+      '?', /* U+C024 */
+      '?', /* U+C025 */
+      '?', /* U+C026 */
+      '?', /* U+C027 */
+      '?', /* U+C028 */
+      '?', /* U+C029 */
+      '?', /* U+C02A */
+      '?', /* U+C02B */
+      '?', /* U+C02C */
+      '?', /* U+C02D */
+      '?', /* U+C02E */
+      '?', /* U+C02F */
+      '?', /* U+C030 */
+      '?', /* U+C031 */
+      '?', /* U+C032 */
+      '?', /* U+C033 */
+      '?', /* U+C034 */
+      '?', /* U+C035 */
+      '?', /* U+C036 */
+      '?', /* U+C037 */
+      '?', /* U+C038 */
+      '?', /* U+C039 */
+      '?', /* U+C03A */
+      '?', /* U+C03B */
+      '?', /* U+C03C */
+      '?', /* U+C03D */
+      '?', /* U+C03E */
+      '?', /* U+C03F */
+      '?', /* U+C040 */
+      '?', /* U+C041 */
+      '?', /* U+C042 */
+      '?', /* U+C043 */
+      '?', /* U+C044 */
+      '?', /* U+C045 */
+      '?', /* U+C046 */
+      '?', /* U+C047 */
+      '?', /* U+C048 */
+      '?', /* U+C049 */
+      '?', /* U+C04A */
+      '?', /* U+C04B */
+      '?', /* U+C04C */
+      '?', /* U+C04D */
+      '?', /* U+C04E */
+      '?', /* U+C04F */
+      '?', /* U+C050 */
+      '?', /* U+C051 */
+      '?', /* U+C052 */
+      '?', /* U+C053 */
+      '?', /* U+C054 */
+      '?', /* U+C055 */
+      '?', /* U+C056 */
+      '?', /* U+C057 */
+      '?', /* U+C058 */
+      '?', /* U+C059 */
+      '?', /* U+C05A */
+      '?', /* U+C05B */
+      '?', /* U+C05C */
+      '?', /* U+C05D */
+      '?', /* U+C05E */
+      '?', /* U+C05F */
+      '?', /* U+C060 */
+      '?', /* U+C061 */
+      '?', /* U+C062 */
+      '?', /* U+C063 */
+      '?', /* U+C064 */
+      '?', /* U+C065 */
+      '?', /* U+C066 */
+      '?', /* U+C067 */
+      '?', /* U+C068 */
+      '?', /* U+C069 */
+      '?', /* U+C06A */
+      '?', /* U+C06B */
+      '?', /* U+C06C */
+      '?', /* U+C06D */
+      '?', /* U+C06E */
+      '?', /* U+C06F */
+      '?', /* U+C070 */
+      '?', /* U+C071 */
+      '?', /* U+C072 */
+      '?', /* U+C073 */
+      '?', /* U+C074 */
+      '?', /* U+C075 */
+      '?', /* U+C076 */
+      '?', /* U+C077 */
+      '?', /* U+C078 */
+      '?', /* U+C079 */
+      '?', /* U+C07A */
+      '?', /* U+C07B */
+      '?', /* U+C07C */
+      '?', /* U+C07D */
+      '?', /* U+C07E */
+      '?', /* U+C07F */
+      '?', /* U+C080 */
+      '?', /* U+C081 */
+      '?', /* U+C082 */
+      '?', /* U+C083 */
+      '?', /* U+C084 */
+      '?', /* U+C085 */
+      '?', /* U+C086 */
+      '?', /* U+C087 */
+      '?', /* U+C088 */
+      '?', /* U+C089 */
+      '?', /* U+C08A */
+      '?', /* U+C08B */
+      '?', /* U+C08C */
+      '?', /* U+C08D */
+      '?', /* U+C08E */
+      '?', /* U+C08F */
+      '?', /* U+C090 */
+      '?', /* U+C091 */
+      '?', /* U+C092 */
+      '?', /* U+C093 */
+      '?', /* U+C094 */
+      '?', /* U+C095 */
+      '?', /* U+C096 */
+      '?', /* U+C097 */
+      '?', /* U+C098 */
+      '?', /* U+C099 */
+      '?', /* U+C09A */
+      '?', /* U+C09B */
+      '?', /* U+C09C */
+      '?', /* U+C09D */
+      '?', /* U+C09E */
+      '?', /* U+C09F */
+      '?', /* U+C0A0 */
+      '?', /* U+C0A1 */
+      '?', /* U+C0A2 */
+      '?', /* U+C0A3 */
+      '?', /* U+C0A4 */
+      '?', /* U+C0A5 */
+      '?', /* U+C0A6 */
+      '?', /* U+C0A7 */
+      '?', /* U+C0A8 */
+      '?', /* U+C0A9 */
+      '?', /* U+C0AA */
+      '?', /* U+C0AB */
+      '?', /* U+C0AC */
+      '?', /* U+C0AD */
+      '?', /* U+C0AE */
+      '?', /* U+C0AF */
+      '?', /* U+C0B0 */
+      '?', /* U+C0B1 */
+      '?', /* U+C0B2 */
+      '?', /* U+C0B3 */
+      '?', /* U+C0B4 */
+      '?', /* U+C0B5 */
+      '?', /* U+C0B6 */
+      '?', /* U+C0B7 */
+      '?', /* U+C0B8 */
+      '?', /* U+C0B9 */
+      '?', /* U+C0BA */
+      '?', /* U+C0BB */
+      '?', /* U+C0BC */
+      '?', /* U+C0BD */
+      '?', /* U+C0BE */
+      '?', /* U+C0BF */
+      '?', /* U+C0C0 */
+      '?', /* U+C0C1 */
+      '?', /* U+C0C2 */
+      '?', /* U+C0C3 */
+      '?', /* U+C0C4 */
+      '?', /* U+C0C5 */
+      '?', /* U+C0C6 */
+      '?', /* U+C0C7 */
+      '?', /* U+C0C8 */
+      '?', /* U+C0C9 */
+      '?', /* U+C0CA */
+      '?', /* U+C0CB */
+      '?', /* U+C0CC */
+      '?', /* U+C0CD */
+      '?', /* U+C0CE */
+      '?', /* U+C0CF */
+      '?', /* U+C0D0 */
+      '?', /* U+C0D1 */
+      '?', /* U+C0D2 */
+      '?', /* U+C0D3 */
+      '?', /* U+C0D4 */
+      '?', /* U+C0D5 */
+      '?', /* U+C0D6 */
+      '?', /* U+C0D7 */
+      '?', /* U+C0D8 */
+      '?', /* U+C0D9 */
+      '?', /* U+C0DA */
+      '?', /* U+C0DB */
+      '?', /* U+C0DC */
+      '?', /* U+C0DD */
+      '?', /* U+C0DE */
+      '?', /* U+C0DF */
+      '?', /* U+C0E0 */
+      '?', /* U+C0E1 */
+      '?', /* U+C0E2 */
+      '?', /* U+C0E3 */
+      '?', /* U+C0E4 */
+      '?', /* U+C0E5 */
+      '?', /* U+C0E6 */
+      '?', /* U+C0E7 */
+      '?', /* U+C0E8 */
+      '?', /* U+C0E9 */
+      '?', /* U+C0EA */
+      '?', /* U+C0EB */
+      '?', /* U+C0EC */
+      '?', /* U+C0ED */
+      '?', /* U+C0EE */
+      '?', /* U+C0EF */
+      '?', /* U+C0F0 */
+      '?', /* U+C0F1 */
+      '?', /* U+C0F2 */
+      '?', /* U+C0F3 */
+      '?', /* U+C0F4 */
+      '?', /* U+C0F5 */
+      '?', /* U+C0F6 */
+      '?', /* U+C0F7 */
+      '?', /* U+C0F8 */
+      '?', /* U+C0F9 */
+      '?', /* U+C0FA */
+      '?', /* U+C0FB */
+      '?', /* U+C0FC */
+      '?', /* U+C0FD */
+      '?', /* U+C0FE */
+      '?', /* U+C0FF */
+      '?', /* U+C100 */
+      '?', /* U+C101 */
+      '?', /* U+C102 */
+      '?', /* U+C103 */
+      '?', /* U+C104 */
+      '?', /* U+C105 */
+      '?', /* U+C106 */
+      '?', /* U+C107 */
+      '?', /* U+C108 */
+      '?', /* U+C109 */
+      '?', /* U+C10A */
+      '?', /* U+C10B */
+      '?', /* U+C10C */
+      '?', /* U+C10D */
+      '?', /* U+C10E */
+      '?', /* U+C10F */
+      '?', /* U+C110 */
+      '?', /* U+C111 */
+      '?', /* U+C112 */
+      '?', /* U+C113 */
+      '?', /* U+C114 */
+      '?', /* U+C115 */
+      '?', /* U+C116 */
+      '?', /* U+C117 */
+      '?', /* U+C118 */
+      '?', /* U+C119 */
+      '?', /* U+C11A */
+      '?', /* U+C11B */
+      '?', /* U+C11C */
+      '?', /* U+C11D */
+      '?', /* U+C11E */
+      '?', /* U+C11F */
+      '?', /* U+C120 */
+      '?', /* U+C121 */
+      '?', /* U+C122 */
+      '?', /* U+C123 */
+      '?', /* U+C124 */
+      '?', /* U+C125 */
+      '?', /* U+C126 */
+      '?', /* U+C127 */
+      '?', /* U+C128 */
+      '?', /* U+C129 */
+      '?', /* U+C12A */
+      '?', /* U+C12B */
+      '?', /* U+C12C */
+      '?', /* U+C12D */
+      '?', /* U+C12E */
+      '?', /* U+C12F */
+      '?', /* U+C130 */
+      '?', /* U+C131 */
+      '?', /* U+C132 */
+      '?', /* U+C133 */
+      '?', /* U+C134 */
+      '?', /* U+C135 */
+      '?', /* U+C136 */
+      '?', /* U+C137 */
+      '?', /* U+C138 */
+      '?', /* U+C139 */
+      '?', /* U+C13A */
+      '?', /* U+C13B */
+      '?', /* U+C13C */
+      '?', /* U+C13D */
+      '?', /* U+C13E */
+      '?', /* U+C13F */
+      '?', /* U+C140 */
+      '?', /* U+C141 */
+      '?', /* U+C142 */
+      '?', /* U+C143 */
+      '?', /* U+C144 */
+      '?', /* U+C145 */
+      '?', /* U+C146 */
+      '?', /* U+C147 */
+      '?', /* U+C148 */
+      '?', /* U+C149 */
+      '?', /* U+C14A */
+      '?', /* U+C14B */
+      '?', /* U+C14C */
+      '?', /* U+C14D */
+      '?', /* U+C14E */
+      '?', /* U+C14F */
+      '?', /* U+C150 */
+      '?', /* U+C151 */
+      '?', /* U+C152 */
+      '?', /* U+C153 */
+      '?', /* U+C154 */
+      '?', /* U+C155 */
+      '?', /* U+C156 */
+      '?', /* U+C157 */
+      '?', /* U+C158 */
+      '?', /* U+C159 */
+      '?', /* U+C15A */
+      '?', /* U+C15B */
+      '?', /* U+C15C */
+      '?', /* U+C15D */
+      '?', /* U+C15E */
+      '?', /* U+C15F */
+      '?', /* U+C160 */
+      '?', /* U+C161 */
+      '?', /* U+C162 */
+      '?', /* U+C163 */
+      '?', /* U+C164 */
+      '?', /* U+C165 */
+      '?', /* U+C166 */
+      '?', /* U+C167 */
+      '?', /* U+C168 */
+      '?', /* U+C169 */
+      '?', /* U+C16A */
+      '?', /* U+C16B */
+      '?', /* U+C16C */
+      '?', /* U+C16D */
+      '?', /* U+C16E */
+      '?', /* U+C16F */
+      '?', /* U+C170 */
+      '?', /* U+C171 */
+      '?', /* U+C172 */
+      '?', /* U+C173 */
+      '?', /* U+C174 */
+      '?', /* U+C175 */
+      '?', /* U+C176 */
+      '?', /* U+C177 */
+      '?', /* U+C178 */
+      '?', /* U+C179 */
+      '?', /* U+C17A */
+      '?', /* U+C17B */
+      '?', /* U+C17C */
+      '?', /* U+C17D */
+      '?', /* U+C17E */
+      '?', /* U+C17F */
+      '?', /* U+C180 */
+      '?', /* U+C181 */
+      '?', /* U+C182 */
+      '?', /* U+C183 */
+      '?', /* U+C184 */
+      '?', /* U+C185 */
+      '?', /* U+C186 */
+      '?', /* U+C187 */
+      '?', /* U+C188 */
+      '?', /* U+C189 */
+      '?', /* U+C18A */
+      '?', /* U+C18B */
+      '?', /* U+C18C */
+      '?', /* U+C18D */
+      '?', /* U+C18E */
+      '?', /* U+C18F */
+      '?', /* U+C190 */
+      '?', /* U+C191 */
+      '?', /* U+C192 */
+      '?', /* U+C193 */
+      '?', /* U+C194 */
+      '?', /* U+C195 */
+      '?', /* U+C196 */
+      '?', /* U+C197 */
+      '?', /* U+C198 */
+      '?', /* U+C199 */
+      '?', /* U+C19A */
+      '?', /* U+C19B */
+      '?', /* U+C19C */
+      '?', /* U+C19D */
+      '?', /* U+C19E */
+      '?', /* U+C19F */
+      '?', /* U+C1A0 */
+      '?', /* U+C1A1 */
+      '?', /* U+C1A2 */
+      '?', /* U+C1A3 */
+      '?', /* U+C1A4 */
+      '?', /* U+C1A5 */
+      '?', /* U+C1A6 */
+      '?', /* U+C1A7 */
+      '?', /* U+C1A8 */
+      '?', /* U+C1A9 */
+      '?', /* U+C1AA */
+      '?', /* U+C1AB */
+      '?', /* U+C1AC */
+      '?', /* U+C1AD */
+      '?', /* U+C1AE */
+      '?', /* U+C1AF */
+      '?', /* U+C1B0 */
+      '?', /* U+C1B1 */
+      '?', /* U+C1B2 */
+      '?', /* U+C1B3 */
+      '?', /* U+C1B4 */
+      '?', /* U+C1B5 */
+      '?', /* U+C1B6 */
+      '?', /* U+C1B7 */
+      '?', /* U+C1B8 */
+      '?', /* U+C1B9 */
+      '?', /* U+C1BA */
+      '?', /* U+C1BB */
+      '?', /* U+C1BC */
+      '?', /* U+C1BD */
+      '?', /* U+C1BE */
+      '?', /* U+C1BF */
+      '?', /* U+C1C0 */
+      '?', /* U+C1C1 */
+      '?', /* U+C1C2 */
+      '?', /* U+C1C3 */
+      '?', /* U+C1C4 */
+      '?', /* U+C1C5 */
+      '?', /* U+C1C6 */
+      '?', /* U+C1C7 */
+      '?', /* U+C1C8 */
+      '?', /* U+C1C9 */
+      '?', /* U+C1CA */
+      '?', /* U+C1CB */
+      '?', /* U+C1CC */
+      '?', /* U+C1CD */
+      '?', /* U+C1CE */
+      '?', /* U+C1CF */
+      '?', /* U+C1D0 */
+      '?', /* U+C1D1 */
+      '?', /* U+C1D2 */
+      '?', /* U+C1D3 */
+      '?', /* U+C1D4 */
+      '?', /* U+C1D5 */
+      '?', /* U+C1D6 */
+      '?', /* U+C1D7 */
+      '?', /* U+C1D8 */
+      '?', /* U+C1D9 */
+      '?', /* U+C1DA */
+      '?', /* U+C1DB */
+      '?', /* U+C1DC */
+      '?', /* U+C1DD */
+      '?', /* U+C1DE */
+      '?', /* U+C1DF */
+      '?', /* U+C1E0 */
+      '?', /* U+C1E1 */
+      '?', /* U+C1E2 */
+      '?', /* U+C1E3 */
+      '?', /* U+C1E4 */
+      '?', /* U+C1E5 */
+      '?', /* U+C1E6 */
+      '?', /* U+C1E7 */
+      '?', /* U+C1E8 */
+      '?', /* U+C1E9 */
+      '?', /* U+C1EA */
+      '?', /* U+C1EB */
+      '?', /* U+C1EC */
+      '?', /* U+C1ED */
+      '?', /* U+C1EE */
+      '?', /* U+C1EF */
+      '?', /* U+C1F0 */
+      '?', /* U+C1F1 */
+      '?', /* U+C1F2 */
+      '?', /* U+C1F3 */
+      '?', /* U+C1F4 */
+      '?', /* U+C1F5 */
+      '?', /* U+C1F6 */
+      '?', /* U+C1F7 */
+      '?', /* U+C1F8 */
+      '?', /* U+C1F9 */
+      '?', /* U+C1FA */
+      '?', /* U+C1FB */
+      '?', /* U+C1FC */
+      '?', /* U+C1FD */
+      '?', /* U+C1FE */
+      '?', /* U+C1FF */
+      '?', /* U+C200 */
+      '?', /* U+C201 */
+      '?', /* U+C202 */
+      '?', /* U+C203 */
+      '?', /* U+C204 */
+      '?', /* U+C205 */
+      '?', /* U+C206 */
+      '?', /* U+C207 */
+      '?', /* U+C208 */
+      '?', /* U+C209 */
+      '?', /* U+C20A */
+      '?', /* U+C20B */
+      '?', /* U+C20C */
+      '?', /* U+C20D */
+      '?', /* U+C20E */
+      '?', /* U+C20F */
+      '?', /* U+C210 */
+      '?', /* U+C211 */
+      '?', /* U+C212 */
+      '?', /* U+C213 */
+      '?', /* U+C214 */
+      '?', /* U+C215 */
+      '?', /* U+C216 */
+      '?', /* U+C217 */
+      '?', /* U+C218 */
+      '?', /* U+C219 */
+      '?', /* U+C21A */
+      '?', /* U+C21B */
+      '?', /* U+C21C */
+      '?', /* U+C21D */
+      '?', /* U+C21E */
+      '?', /* U+C21F */
+      '?', /* U+C220 */
+      '?', /* U+C221 */
+      '?', /* U+C222 */
+      '?', /* U+C223 */
+      '?', /* U+C224 */
+      '?', /* U+C225 */
+      '?', /* U+C226 */
+      '?', /* U+C227 */
+      '?', /* U+C228 */
+      '?', /* U+C229 */
+      '?', /* U+C22A */
+      '?', /* U+C22B */
+      '?', /* U+C22C */
+      '?', /* U+C22D */
+      '?', /* U+C22E */
+      '?', /* U+C22F */
+      '?', /* U+C230 */
+      '?', /* U+C231 */
+      '?', /* U+C232 */
+      '?', /* U+C233 */
+      '?', /* U+C234 */
+      '?', /* U+C235 */
+      '?', /* U+C236 */
+      '?', /* U+C237 */
+      '?', /* U+C238 */
+      '?', /* U+C239 */
+      '?', /* U+C23A */
+      '?', /* U+C23B */
+      '?', /* U+C23C */
+      '?', /* U+C23D */
+      '?', /* U+C23E */
+      '?', /* U+C23F */
+      '?', /* U+C240 */
+      '?', /* U+C241 */
+      '?', /* U+C242 */
+      '?', /* U+C243 */
+      '?', /* U+C244 */
+      '?', /* U+C245 */
+      '?', /* U+C246 */
+      '?', /* U+C247 */
+      '?', /* U+C248 */
+      '?', /* U+C249 */
+      '?', /* U+C24A */
+      '?', /* U+C24B */
+      '?', /* U+C24C */
+      '?', /* U+C24D */
+      '?', /* U+C24E */
+      '?', /* U+C24F */
+      '?', /* U+C250 */
+      '?', /* U+C251 */
+      '?', /* U+C252 */
+      '?', /* U+C253 */
+      '?', /* U+C254 */
+      '?', /* U+C255 */
+      '?', /* U+C256 */
+      '?', /* U+C257 */
+      '?', /* U+C258 */
+      '?', /* U+C259 */
+      '?', /* U+C25A */
+      '?', /* U+C25B */
+      '?', /* U+C25C */
+      '?', /* U+C25D */
+      '?', /* U+C25E */
+      '?', /* U+C25F */
+      '?', /* U+C260 */
+      '?', /* U+C261 */
+      '?', /* U+C262 */
+      '?', /* U+C263 */
+      '?', /* U+C264 */
+      '?', /* U+C265 */
+      '?', /* U+C266 */
+      '?', /* U+C267 */
+      '?', /* U+C268 */
+      '?', /* U+C269 */
+      '?', /* U+C26A */
+      '?', /* U+C26B */
+      '?', /* U+C26C */
+      '?', /* U+C26D */
+      '?', /* U+C26E */
+      '?', /* U+C26F */
+      '?', /* U+C270 */
+      '?', /* U+C271 */
+      '?', /* U+C272 */
+      '?', /* U+C273 */
+      '?', /* U+C274 */
+      '?', /* U+C275 */
+      '?', /* U+C276 */
+      '?', /* U+C277 */
+      '?', /* U+C278 */
+      '?', /* U+C279 */
+      '?', /* U+C27A */
+      '?', /* U+C27B */
+      '?', /* U+C27C */
+      '?', /* U+C27D */
+      '?', /* U+C27E */
+      '?', /* U+C27F */
+      '?', /* U+C280 */
+      '?', /* U+C281 */
+      '?', /* U+C282 */
+      '?', /* U+C283 */
+      '?', /* U+C284 */
+      '?', /* U+C285 */
+      '?', /* U+C286 */
+      '?', /* U+C287 */
+      '?', /* U+C288 */
+      '?', /* U+C289 */
+      '?', /* U+C28A */
+      '?', /* U+C28B */
+      '?', /* U+C28C */
+      '?', /* U+C28D */
+      '?', /* U+C28E */
+      '?', /* U+C28F */
+      '?', /* U+C290 */
+      '?', /* U+C291 */
+      '?', /* U+C292 */
+      '?', /* U+C293 */
+      '?', /* U+C294 */
+      '?', /* U+C295 */
+      '?', /* U+C296 */
+      '?', /* U+C297 */
+      '?', /* U+C298 */
+      '?', /* U+C299 */
+      '?', /* U+C29A */
+      '?', /* U+C29B */
+      '?', /* U+C29C */
+      '?', /* U+C29D */
+      '?', /* U+C29E */
+      '?', /* U+C29F */
+      '?', /* U+C2A0 */
+      '?', /* U+C2A1 */
+      '?', /* U+C2A2 */
+      '?', /* U+C2A3 */
+      '?', /* U+C2A4 */
+      '?', /* U+C2A5 */
+      '?', /* U+C2A6 */
+      '?', /* U+C2A7 */
+      '?', /* U+C2A8 */
+      '?', /* U+C2A9 */
+      '?', /* U+C2AA */
+      '?', /* U+C2AB */
+      '?', /* U+C2AC */
+      '?', /* U+C2AD */
+      '?', /* U+C2AE */
+      '?', /* U+C2AF */
+      '?', /* U+C2B0 */
+      '?', /* U+C2B1 */
+      '?', /* U+C2B2 */
+      '?', /* U+C2B3 */
+      '?', /* U+C2B4 */
+      '?', /* U+C2B5 */
+      '?', /* U+C2B6 */
+      '?', /* U+C2B7 */
+      '?', /* U+C2B8 */
+      '?', /* U+C2B9 */
+      '?', /* U+C2BA */
+      '?', /* U+C2BB */
+      '?', /* U+C2BC */
+      '?', /* U+C2BD */
+      '?', /* U+C2BE */
+      '?', /* U+C2BF */
+      '?', /* U+C2C0 */
+      '?', /* U+C2C1 */
+      '?', /* U+C2C2 */
+      '?', /* U+C2C3 */
+      '?', /* U+C2C4 */
+      '?', /* U+C2C5 */
+      '?', /* U+C2C6 */
+      '?', /* U+C2C7 */
+      '?', /* U+C2C8 */
+      '?', /* U+C2C9 */
+      '?', /* U+C2CA */
+      '?', /* U+C2CB */
+      '?', /* U+C2CC */
+      '?', /* U+C2CD */
+      '?', /* U+C2CE */
+      '?', /* U+C2CF */
+      '?', /* U+C2D0 */
+      '?', /* U+C2D1 */
+      '?', /* U+C2D2 */
+      '?', /* U+C2D3 */
+      '?', /* U+C2D4 */
+      '?', /* U+C2D5 */
+      '?', /* U+C2D6 */
+      '?', /* U+C2D7 */
+      '?', /* U+C2D8 */
+      '?', /* U+C2D9 */
+      '?', /* U+C2DA */
+      '?', /* U+C2DB */
+      '?', /* U+C2DC */
+      '?', /* U+C2DD */
+      '?', /* U+C2DE */
+      '?', /* U+C2DF */
+      '?', /* U+C2E0 */
+      '?', /* U+C2E1 */
+      '?', /* U+C2E2 */
+      '?', /* U+C2E3 */
+      '?', /* U+C2E4 */
+      '?', /* U+C2E5 */
+      '?', /* U+C2E6 */
+      '?', /* U+C2E7 */
+      '?', /* U+C2E8 */
+      '?', /* U+C2E9 */
+      '?', /* U+C2EA */
+      '?', /* U+C2EB */
+      '?', /* U+C2EC */
+      '?', /* U+C2ED */
+      '?', /* U+C2EE */
+      '?', /* U+C2EF */
+      '?', /* U+C2F0 */
+      '?', /* U+C2F1 */
+      '?', /* U+C2F2 */
+      '?', /* U+C2F3 */
+      '?', /* U+C2F4 */
+      '?', /* U+C2F5 */
+      '?', /* U+C2F6 */
+      '?', /* U+C2F7 */
+      '?', /* U+C2F8 */
+      '?', /* U+C2F9 */
+      '?', /* U+C2FA */
+      '?', /* U+C2FB */
+      '?', /* U+C2FC */
+      '?', /* U+C2FD */
+      '?', /* U+C2FE */
+      '?', /* U+C2FF */
+      '?', /* U+C300 */
+      '?', /* U+C301 */
+      '?', /* U+C302 */
+      '?', /* U+C303 */
+      '?', /* U+C304 */
+      '?', /* U+C305 */
+      '?', /* U+C306 */
+      '?', /* U+C307 */
+      '?', /* U+C308 */
+      '?', /* U+C309 */
+      '?', /* U+C30A */
+      '?', /* U+C30B */
+      '?', /* U+C30C */
+      '?', /* U+C30D */
+      '?', /* U+C30E */
+      '?', /* U+C30F */
+      '?', /* U+C310 */
+      '?', /* U+C311 */
+      '?', /* U+C312 */
+      '?', /* U+C313 */
+      '?', /* U+C314 */
+      '?', /* U+C315 */
+      '?', /* U+C316 */
+      '?', /* U+C317 */
+      '?', /* U+C318 */
+      '?', /* U+C319 */
+      '?', /* U+C31A */
+      '?', /* U+C31B */
+      '?', /* U+C31C */
+      '?', /* U+C31D */
+      '?', /* U+C31E */
+      '?', /* U+C31F */
+      '?', /* U+C320 */
+      '?', /* U+C321 */
+      '?', /* U+C322 */
+      '?', /* U+C323 */
+      '?', /* U+C324 */
+      '?', /* U+C325 */
+      '?', /* U+C326 */
+      '?', /* U+C327 */
+      '?', /* U+C328 */
+      '?', /* U+C329 */
+      '?', /* U+C32A */
+      '?', /* U+C32B */
+      '?', /* U+C32C */
+      '?', /* U+C32D */
+      '?', /* U+C32E */
+      '?', /* U+C32F */
+      '?', /* U+C330 */
+      '?', /* U+C331 */
+      '?', /* U+C332 */
+      '?', /* U+C333 */
+      '?', /* U+C334 */
+      '?', /* U+C335 */
+      '?', /* U+C336 */
+      '?', /* U+C337 */
+      '?', /* U+C338 */
+      '?', /* U+C339 */
+      '?', /* U+C33A */
+      '?', /* U+C33B */
+      '?', /* U+C33C */
+      '?', /* U+C33D */
+      '?', /* U+C33E */
+      '?', /* U+C33F */
+      '?', /* U+C340 */
+      '?', /* U+C341 */
+      '?', /* U+C342 */
+      '?', /* U+C343 */
+      '?', /* U+C344 */
+      '?', /* U+C345 */
+      '?', /* U+C346 */
+      '?', /* U+C347 */
+      '?', /* U+C348 */
+      '?', /* U+C349 */
+      '?', /* U+C34A */
+      '?', /* U+C34B */
+      '?', /* U+C34C */
+      '?', /* U+C34D */
+      '?', /* U+C34E */
+      '?', /* U+C34F */
+      '?', /* U+C350 */
+      '?', /* U+C351 */
+      '?', /* U+C352 */
+      '?', /* U+C353 */
+      '?', /* U+C354 */
+      '?', /* U+C355 */
+      '?', /* U+C356 */
+      '?', /* U+C357 */
+      '?', /* U+C358 */
+      '?', /* U+C359 */
+      '?', /* U+C35A */
+      '?', /* U+C35B */
+      '?', /* U+C35C */
+      '?', /* U+C35D */
+      '?', /* U+C35E */
+      '?', /* U+C35F */
+      '?', /* U+C360 */
+      '?', /* U+C361 */
+      '?', /* U+C362 */
+      '?', /* U+C363 */
+      '?', /* U+C364 */
+      '?', /* U+C365 */
+      '?', /* U+C366 */
+      '?', /* U+C367 */
+      '?', /* U+C368 */
+      '?', /* U+C369 */
+      '?', /* U+C36A */
+      '?', /* U+C36B */
+      '?', /* U+C36C */
+      '?', /* U+C36D */
+      '?', /* U+C36E */
+      '?', /* U+C36F */
+      '?', /* U+C370 */
+      '?', /* U+C371 */
+      '?', /* U+C372 */
+      '?', /* U+C373 */
+      '?', /* U+C374 */
+      '?', /* U+C375 */
+      '?', /* U+C376 */
+      '?', /* U+C377 */
+      '?', /* U+C378 */
+      '?', /* U+C379 */
+      '?', /* U+C37A */
+      '?', /* U+C37B */
+      '?', /* U+C37C */
+      '?', /* U+C37D */
+      '?', /* U+C37E */
+      '?', /* U+C37F */
+      '?', /* U+C380 */
+      '?', /* U+C381 */
+      '?', /* U+C382 */
+      '?', /* U+C383 */
+      '?', /* U+C384 */
+      '?', /* U+C385 */
+      '?', /* U+C386 */
+      '?', /* U+C387 */
+      '?', /* U+C388 */
+      '?', /* U+C389 */
+      '?', /* U+C38A */
+      '?', /* U+C38B */
+      '?', /* U+C38C */
+      '?', /* U+C38D */
+      '?', /* U+C38E */
+      '?', /* U+C38F */
+      '?', /* U+C390 */
+      '?', /* U+C391 */
+      '?', /* U+C392 */
+      '?', /* U+C393 */
+      '?', /* U+C394 */
+      '?', /* U+C395 */
+      '?', /* U+C396 */
+      '?', /* U+C397 */
+      '?', /* U+C398 */
+      '?', /* U+C399 */
+      '?', /* U+C39A */
+      '?', /* U+C39B */
+      '?', /* U+C39C */
+      '?', /* U+C39D */
+      '?', /* U+C39E */
+      '?', /* U+C39F */
+      '?', /* U+C3A0 */
+      '?', /* U+C3A1 */
+      '?', /* U+C3A2 */
+      '?', /* U+C3A3 */
+      '?', /* U+C3A4 */
+      '?', /* U+C3A5 */
+      '?', /* U+C3A6 */
+      '?', /* U+C3A7 */
+      '?', /* U+C3A8 */
+      '?', /* U+C3A9 */
+      '?', /* U+C3AA */
+      '?', /* U+C3AB */
+      '?', /* U+C3AC */
+      '?', /* U+C3AD */
+      '?', /* U+C3AE */
+      '?', /* U+C3AF */
+      '?', /* U+C3B0 */
+      '?', /* U+C3B1 */
+      '?', /* U+C3B2 */
+      '?', /* U+C3B3 */
+      '?', /* U+C3B4 */
+      '?', /* U+C3B5 */
+      '?', /* U+C3B6 */
+      '?', /* U+C3B7 */
+      '?', /* U+C3B8 */
+      '?', /* U+C3B9 */
+      '?', /* U+C3BA */
+      '?', /* U+C3BB */
+      '?', /* U+C3BC */
+      '?', /* U+C3BD */
+      '?', /* U+C3BE */
+      '?', /* U+C3BF */
+      '?', /* U+C3C0 */
+      '?', /* U+C3C1 */
+      '?', /* U+C3C2 */
+      '?', /* U+C3C3 */
+      '?', /* U+C3C4 */
+      '?', /* U+C3C5 */
+      '?', /* U+C3C6 */
+      '?', /* U+C3C7 */
+      '?', /* U+C3C8 */
+      '?', /* U+C3C9 */
+      '?', /* U+C3CA */
+      '?', /* U+C3CB */
+      '?', /* U+C3CC */
+      '?', /* U+C3CD */
+      '?', /* U+C3CE */
+      '?', /* U+C3CF */
+      '?', /* U+C3D0 */
+      '?', /* U+C3D1 */
+      '?', /* U+C3D2 */
+      '?', /* U+C3D3 */
+      '?', /* U+C3D4 */
+      '?', /* U+C3D5 */
+      '?', /* U+C3D6 */
+      '?', /* U+C3D7 */
+      '?', /* U+C3D8 */
+      '?', /* U+C3D9 */
+      '?', /* U+C3DA */
+      '?', /* U+C3DB */
+      '?', /* U+C3DC */
+      '?', /* U+C3DD */
+      '?', /* U+C3DE */
+      '?', /* U+C3DF */
+      '?', /* U+C3E0 */
+      '?', /* U+C3E1 */
+      '?', /* U+C3E2 */
+      '?', /* U+C3E3 */
+      '?', /* U+C3E4 */
+      '?', /* U+C3E5 */
+      '?', /* U+C3E6 */
+      '?', /* U+C3E7 */
+      '?', /* U+C3E8 */
+      '?', /* U+C3E9 */
+      '?', /* U+C3EA */
+      '?', /* U+C3EB */
+      '?', /* U+C3EC */
+      '?', /* U+C3ED */
+      '?', /* U+C3EE */
+      '?', /* U+C3EF */
+      '?', /* U+C3F0 */
+      '?', /* U+C3F1 */
+      '?', /* U+C3F2 */
+      '?', /* U+C3F3 */
+      '?', /* U+C3F4 */
+      '?', /* U+C3F5 */
+      '?', /* U+C3F6 */
+      '?', /* U+C3F7 */
+      '?', /* U+C3F8 */
+      '?', /* U+C3F9 */
+      '?', /* U+C3FA */
+      '?', /* U+C3FB */
+      '?', /* U+C3FC */
+      '?', /* U+C3FD */
+      '?', /* U+C3FE */
+      '?', /* U+C3FF */
+      '?', /* U+C400 */
+      '?', /* U+C401 */
+      '?', /* U+C402 */
+      '?', /* U+C403 */
+      '?', /* U+C404 */
+      '?', /* U+C405 */
+      '?', /* U+C406 */
+      '?', /* U+C407 */
+      '?', /* U+C408 */
+      '?', /* U+C409 */
+      '?', /* U+C40A */
+      '?', /* U+C40B */
+      '?', /* U+C40C */
+      '?', /* U+C40D */
+      '?', /* U+C40E */
+      '?', /* U+C40F */
+      '?', /* U+C410 */
+      '?', /* U+C411 */
+      '?', /* U+C412 */
+      '?', /* U+C413 */
+      '?', /* U+C414 */
+      '?', /* U+C415 */
+      '?', /* U+C416 */
+      '?', /* U+C417 */
+      '?', /* U+C418 */
+      '?', /* U+C419 */
+      '?', /* U+C41A */
+      '?', /* U+C41B */
+      '?', /* U+C41C */
+      '?', /* U+C41D */
+      '?', /* U+C41E */
+      '?', /* U+C41F */
+      '?', /* U+C420 */
+      '?', /* U+C421 */
+      '?', /* U+C422 */
+      '?', /* U+C423 */
+      '?', /* U+C424 */
+      '?', /* U+C425 */
+      '?', /* U+C426 */
+      '?', /* U+C427 */
+      '?', /* U+C428 */
+      '?', /* U+C429 */
+      '?', /* U+C42A */
+      '?', /* U+C42B */
+      '?', /* U+C42C */
+      '?', /* U+C42D */
+      '?', /* U+C42E */
+      '?', /* U+C42F */
+      '?', /* U+C430 */
+      '?', /* U+C431 */
+      '?', /* U+C432 */
+      '?', /* U+C433 */
+      '?', /* U+C434 */
+      '?', /* U+C435 */
+      '?', /* U+C436 */
+      '?', /* U+C437 */
+      '?', /* U+C438 */
+      '?', /* U+C439 */
+      '?', /* U+C43A */
+      '?', /* U+C43B */
+      '?', /* U+C43C */
+      '?', /* U+C43D */
+      '?', /* U+C43E */
+      '?', /* U+C43F */
+      '?', /* U+C440 */
+      '?', /* U+C441 */
+      '?', /* U+C442 */
+      '?', /* U+C443 */
+      '?', /* U+C444 */
+      '?', /* U+C445 */
+      '?', /* U+C446 */
+      '?', /* U+C447 */
+      '?', /* U+C448 */
+      '?', /* U+C449 */
+      '?', /* U+C44A */
+      '?', /* U+C44B */
+      '?', /* U+C44C */
+      '?', /* U+C44D */
+      '?', /* U+C44E */
+      '?', /* U+C44F */
+      '?', /* U+C450 */
+      '?', /* U+C451 */
+      '?', /* U+C452 */
+      '?', /* U+C453 */
+      '?', /* U+C454 */
+      '?', /* U+C455 */
+      '?', /* U+C456 */
+      '?', /* U+C457 */
+      '?', /* U+C458 */
+      '?', /* U+C459 */
+      '?', /* U+C45A */
+      '?', /* U+C45B */
+      '?', /* U+C45C */
+      '?', /* U+C45D */
+      '?', /* U+C45E */
+      '?', /* U+C45F */
+      '?', /* U+C460 */
+      '?', /* U+C461 */
+      '?', /* U+C462 */
+      '?', /* U+C463 */
+      '?', /* U+C464 */
+      '?', /* U+C465 */
+      '?', /* U+C466 */
+      '?', /* U+C467 */
+      '?', /* U+C468 */
+      '?', /* U+C469 */
+      '?', /* U+C46A */
+      '?', /* U+C46B */
+      '?', /* U+C46C */
+      '?', /* U+C46D */
+      '?', /* U+C46E */
+      '?', /* U+C46F */
+      '?', /* U+C470 */
+      '?', /* U+C471 */
+      '?', /* U+C472 */
+      '?', /* U+C473 */
+      '?', /* U+C474 */
+      '?', /* U+C475 */
+      '?', /* U+C476 */
+      '?', /* U+C477 */
+      '?', /* U+C478 */
+      '?', /* U+C479 */
+      '?', /* U+C47A */
+      '?', /* U+C47B */
+      '?', /* U+C47C */
+      '?', /* U+C47D */
+      '?', /* U+C47E */
+      '?', /* U+C47F */
+      '?', /* U+C480 */
+      '?', /* U+C481 */
+      '?', /* U+C482 */
+      '?', /* U+C483 */
+      '?', /* U+C484 */
+      '?', /* U+C485 */
+      '?', /* U+C486 */
+      '?', /* U+C487 */
+      '?', /* U+C488 */
+      '?', /* U+C489 */
+      '?', /* U+C48A */
+      '?', /* U+C48B */
+      '?', /* U+C48C */
+      '?', /* U+C48D */
+      '?', /* U+C48E */
+      '?', /* U+C48F */
+      '?', /* U+C490 */
+      '?', /* U+C491 */
+      '?', /* U+C492 */
+      '?', /* U+C493 */
+      '?', /* U+C494 */
+      '?', /* U+C495 */
+      '?', /* U+C496 */
+      '?', /* U+C497 */
+      '?', /* U+C498 */
+      '?', /* U+C499 */
+      '?', /* U+C49A */
+      '?', /* U+C49B */
+      '?', /* U+C49C */
+      '?', /* U+C49D */
+      '?', /* U+C49E */
+      '?', /* U+C49F */
+      '?', /* U+C4A0 */
+      '?', /* U+C4A1 */
+      '?', /* U+C4A2 */
+      '?', /* U+C4A3 */
+      '?', /* U+C4A4 */
+      '?', /* U+C4A5 */
+      '?', /* U+C4A6 */
+      '?', /* U+C4A7 */
+      '?', /* U+C4A8 */
+      '?', /* U+C4A9 */
+      '?', /* U+C4AA */
+      '?', /* U+C4AB */
+      '?', /* U+C4AC */
+      '?', /* U+C4AD */
+      '?', /* U+C4AE */
+      '?', /* U+C4AF */
+      '?', /* U+C4B0 */
+      '?', /* U+C4B1 */
+      '?', /* U+C4B2 */
+      '?', /* U+C4B3 */
+      '?', /* U+C4B4 */
+      '?', /* U+C4B5 */
+      '?', /* U+C4B6 */
+      '?', /* U+C4B7 */
+      '?', /* U+C4B8 */
+      '?', /* U+C4B9 */
+      '?', /* U+C4BA */
+      '?', /* U+C4BB */
+      '?', /* U+C4BC */
+      '?', /* U+C4BD */
+      '?', /* U+C4BE */
+      '?', /* U+C4BF */
+      '?', /* U+C4C0 */
+      '?', /* U+C4C1 */
+      '?', /* U+C4C2 */
+      '?', /* U+C4C3 */
+      '?', /* U+C4C4 */
+      '?', /* U+C4C5 */
+      '?', /* U+C4C6 */
+      '?', /* U+C4C7 */
+      '?', /* U+C4C8 */
+      '?', /* U+C4C9 */
+      '?', /* U+C4CA */
+      '?', /* U+C4CB */
+      '?', /* U+C4CC */
+      '?', /* U+C4CD */
+      '?', /* U+C4CE */
+      '?', /* U+C4CF */
+      '?', /* U+C4D0 */
+      '?', /* U+C4D1 */
+      '?', /* U+C4D2 */
+      '?', /* U+C4D3 */
+      '?', /* U+C4D4 */
+      '?', /* U+C4D5 */
+      '?', /* U+C4D6 */
+      '?', /* U+C4D7 */
+      '?', /* U+C4D8 */
+      '?', /* U+C4D9 */
+      '?', /* U+C4DA */
+      '?', /* U+C4DB */
+      '?', /* U+C4DC */
+      '?', /* U+C4DD */
+      '?', /* U+C4DE */
+      '?', /* U+C4DF */
+      '?', /* U+C4E0 */
+      '?', /* U+C4E1 */
+      '?', /* U+C4E2 */
+      '?', /* U+C4E3 */
+      '?', /* U+C4E4 */
+      '?', /* U+C4E5 */
+      '?', /* U+C4E6 */
+      '?', /* U+C4E7 */
+      '?', /* U+C4E8 */
+      '?', /* U+C4E9 */
+      '?', /* U+C4EA */
+      '?', /* U+C4EB */
+      '?', /* U+C4EC */
+      '?', /* U+C4ED */
+      '?', /* U+C4EE */
+      '?', /* U+C4EF */
+      '?', /* U+C4F0 */
+      '?', /* U+C4F1 */
+      '?', /* U+C4F2 */
+      '?', /* U+C4F3 */
+      '?', /* U+C4F4 */
+      '?', /* U+C4F5 */
+      '?', /* U+C4F6 */
+      '?', /* U+C4F7 */
+      '?', /* U+C4F8 */
+      '?', /* U+C4F9 */
+      '?', /* U+C4FA */
+      '?', /* U+C4FB */
+      '?', /* U+C4FC */
+      '?', /* U+C4FD */
+      '?', /* U+C4FE */
+      '?', /* U+C4FF */
+      '?', /* U+C500 */
+      '?', /* U+C501 */
+      '?', /* U+C502 */
+      '?', /* U+C503 */
+      '?', /* U+C504 */
+      '?', /* U+C505 */
+      '?', /* U+C506 */
+      '?', /* U+C507 */
+      '?', /* U+C508 */
+      '?', /* U+C509 */
+      '?', /* U+C50A */
+      '?', /* U+C50B */
+      '?', /* U+C50C */
+      '?', /* U+C50D */
+      '?', /* U+C50E */
+      '?', /* U+C50F */
+      '?', /* U+C510 */
+      '?', /* U+C511 */
+      '?', /* U+C512 */
+      '?', /* U+C513 */
+      '?', /* U+C514 */
+      '?', /* U+C515 */
+      '?', /* U+C516 */
+      '?', /* U+C517 */
+      '?', /* U+C518 */
+      '?', /* U+C519 */
+      '?', /* U+C51A */
+      '?', /* U+C51B */
+      '?', /* U+C51C */
+      '?', /* U+C51D */
+      '?', /* U+C51E */
+      '?', /* U+C51F */
+      '?', /* U+C520 */
+      '?', /* U+C521 */
+      '?', /* U+C522 */
+      '?', /* U+C523 */
+      '?', /* U+C524 */
+      '?', /* U+C525 */
+      '?', /* U+C526 */
+      '?', /* U+C527 */
+      '?', /* U+C528 */
+      '?', /* U+C529 */
+      '?', /* U+C52A */
+      '?', /* U+C52B */
+      '?', /* U+C52C */
+      '?', /* U+C52D */
+      '?', /* U+C52E */
+      '?', /* U+C52F */
+      '?', /* U+C530 */
+      '?', /* U+C531 */
+      '?', /* U+C532 */
+      '?', /* U+C533 */
+      '?', /* U+C534 */
+      '?', /* U+C535 */
+      '?', /* U+C536 */
+      '?', /* U+C537 */
+      '?', /* U+C538 */
+      '?', /* U+C539 */
+      '?', /* U+C53A */
+      '?', /* U+C53B */
+      '?', /* U+C53C */
+      '?', /* U+C53D */
+      '?', /* U+C53E */
+      '?', /* U+C53F */
+      '?', /* U+C540 */
+      '?', /* U+C541 */
+      '?', /* U+C542 */
+      '?', /* U+C543 */
+      '?', /* U+C544 */
+      '?', /* U+C545 */
+      '?', /* U+C546 */
+      '?', /* U+C547 */
+      '?', /* U+C548 */
+      '?', /* U+C549 */
+      '?', /* U+C54A */
+      '?', /* U+C54B */
+      '?', /* U+C54C */
+      '?', /* U+C54D */
+      '?', /* U+C54E */
+      '?', /* U+C54F */
+      '?', /* U+C550 */
+      '?', /* U+C551 */
+      '?', /* U+C552 */
+      '?', /* U+C553 */
+      '?', /* U+C554 */
+      '?', /* U+C555 */
+      '?', /* U+C556 */
+      '?', /* U+C557 */
+      '?', /* U+C558 */
+      '?', /* U+C559 */
+      '?', /* U+C55A */
+      '?', /* U+C55B */
+      '?', /* U+C55C */
+      '?', /* U+C55D */
+      '?', /* U+C55E */
+      '?', /* U+C55F */
+      '?', /* U+C560 */
+      '?', /* U+C561 */
+      '?', /* U+C562 */
+      '?', /* U+C563 */
+      '?', /* U+C564 */
+      '?', /* U+C565 */
+      '?', /* U+C566 */
+      '?', /* U+C567 */
+      '?', /* U+C568 */
+      '?', /* U+C569 */
+      '?', /* U+C56A */
+      '?', /* U+C56B */
+      '?', /* U+C56C */
+      '?', /* U+C56D */
+      '?', /* U+C56E */
+      '?', /* U+C56F */
+      '?', /* U+C570 */
+      '?', /* U+C571 */
+      '?', /* U+C572 */
+      '?', /* U+C573 */
+      '?', /* U+C574 */
+      '?', /* U+C575 */
+      '?', /* U+C576 */
+      '?', /* U+C577 */
+      '?', /* U+C578 */
+      '?', /* U+C579 */
+      '?', /* U+C57A */
+      '?', /* U+C57B */
+      '?', /* U+C57C */
+      '?', /* U+C57D */
+      '?', /* U+C57E */
+      '?', /* U+C57F */
+      '?', /* U+C580 */
+      '?', /* U+C581 */
+      '?', /* U+C582 */
+      '?', /* U+C583 */
+      '?', /* U+C584 */
+      '?', /* U+C585 */
+      '?', /* U+C586 */
+      '?', /* U+C587 */
+      '?', /* U+C588 */
+      '?', /* U+C589 */
+      '?', /* U+C58A */
+      '?', /* U+C58B */
+      '?', /* U+C58C */
+      '?', /* U+C58D */
+      '?', /* U+C58E */
+      '?', /* U+C58F */
+      '?', /* U+C590 */
+      '?', /* U+C591 */
+      '?', /* U+C592 */
+      '?', /* U+C593 */
+      '?', /* U+C594 */
+      '?', /* U+C595 */
+      '?', /* U+C596 */
+      '?', /* U+C597 */
+      '?', /* U+C598 */
+      '?', /* U+C599 */
+      '?', /* U+C59A */
+      '?', /* U+C59B */
+      '?', /* U+C59C */
+      '?', /* U+C59D */
+      '?', /* U+C59E */
+      '?', /* U+C59F */
+      '?', /* U+C5A0 */
+      '?', /* U+C5A1 */
+      '?', /* U+C5A2 */
+      '?', /* U+C5A3 */
+      '?', /* U+C5A4 */
+      '?', /* U+C5A5 */
+      '?', /* U+C5A6 */
+      '?', /* U+C5A7 */
+      '?', /* U+C5A8 */
+      '?', /* U+C5A9 */
+      '?', /* U+C5AA */
+      '?', /* U+C5AB */
+      '?', /* U+C5AC */
+      '?', /* U+C5AD */
+      '?', /* U+C5AE */
+      '?', /* U+C5AF */
+      '?', /* U+C5B0 */
+      '?', /* U+C5B1 */
+      '?', /* U+C5B2 */
+      '?', /* U+C5B3 */
+      '?', /* U+C5B4 */
+      '?', /* U+C5B5 */
+      '?', /* U+C5B6 */
+      '?', /* U+C5B7 */
+      '?', /* U+C5B8 */
+      '?', /* U+C5B9 */
+      '?', /* U+C5BA */
+      '?', /* U+C5BB */
+      '?', /* U+C5BC */
+      '?', /* U+C5BD */
+      '?', /* U+C5BE */
+      '?', /* U+C5BF */
+      '?', /* U+C5C0 */
+      '?', /* U+C5C1 */
+      '?', /* U+C5C2 */
+      '?', /* U+C5C3 */
+      '?', /* U+C5C4 */
+      '?', /* U+C5C5 */
+      '?', /* U+C5C6 */
+      '?', /* U+C5C7 */
+      '?', /* U+C5C8 */
+      '?', /* U+C5C9 */
+      '?', /* U+C5CA */
+      '?', /* U+C5CB */
+      '?', /* U+C5CC */
+      '?', /* U+C5CD */
+      '?', /* U+C5CE */
+      '?', /* U+C5CF */
+      '?', /* U+C5D0 */
+      '?', /* U+C5D1 */
+      '?', /* U+C5D2 */
+      '?', /* U+C5D3 */
+      '?', /* U+C5D4 */
+      '?', /* U+C5D5 */
+      '?', /* U+C5D6 */
+      '?', /* U+C5D7 */
+      '?', /* U+C5D8 */
+      '?', /* U+C5D9 */
+      '?', /* U+C5DA */
+      '?', /* U+C5DB */
+      '?', /* U+C5DC */
+      '?', /* U+C5DD */
+      '?', /* U+C5DE */
+      '?', /* U+C5DF */
+      '?', /* U+C5E0 */
+      '?', /* U+C5E1 */
+      '?', /* U+C5E2 */
+      '?', /* U+C5E3 */
+      '?', /* U+C5E4 */
+      '?', /* U+C5E5 */
+      '?', /* U+C5E6 */
+      '?', /* U+C5E7 */
+      '?', /* U+C5E8 */
+      '?', /* U+C5E9 */
+      '?', /* U+C5EA */
+      '?', /* U+C5EB */
+      '?', /* U+C5EC */
+      '?', /* U+C5ED */
+      '?', /* U+C5EE */
+      '?', /* U+C5EF */
+      '?', /* U+C5F0 */
+      '?', /* U+C5F1 */
+      '?', /* U+C5F2 */
+      '?', /* U+C5F3 */
+      '?', /* U+C5F4 */
+      '?', /* U+C5F5 */
+      '?', /* U+C5F6 */
+      '?', /* U+C5F7 */
+      '?', /* U+C5F8 */
+      '?', /* U+C5F9 */
+      '?', /* U+C5FA */
+      '?', /* U+C5FB */
+      '?', /* U+C5FC */
+      '?', /* U+C5FD */
+      '?', /* U+C5FE */
+      '?', /* U+C5FF */
+      '?', /* U+C600 */
+      '?', /* U+C601 */
+      '?', /* U+C602 */
+      '?', /* U+C603 */
+      '?', /* U+C604 */
+      '?', /* U+C605 */
+      '?', /* U+C606 */
+      '?', /* U+C607 */
+      '?', /* U+C608 */
+      '?', /* U+C609 */
+      '?', /* U+C60A */
+      '?', /* U+C60B */
+      '?', /* U+C60C */
+      '?', /* U+C60D */
+      '?', /* U+C60E */
+      '?', /* U+C60F */
+      '?', /* U+C610 */
+      '?', /* U+C611 */
+      '?', /* U+C612 */
+      '?', /* U+C613 */
+      '?', /* U+C614 */
+      '?', /* U+C615 */
+      '?', /* U+C616 */
+      '?', /* U+C617 */
+      '?', /* U+C618 */
+      '?', /* U+C619 */
+      '?', /* U+C61A */
+      '?', /* U+C61B */
+      '?', /* U+C61C */
+      '?', /* U+C61D */
+      '?', /* U+C61E */
+      '?', /* U+C61F */
+      '?', /* U+C620 */
+      '?', /* U+C621 */
+      '?', /* U+C622 */
+      '?', /* U+C623 */
+      '?', /* U+C624 */
+      '?', /* U+C625 */
+      '?', /* U+C626 */
+      '?', /* U+C627 */
+      '?', /* U+C628 */
+      '?', /* U+C629 */
+      '?', /* U+C62A */
+      '?', /* U+C62B */
+      '?', /* U+C62C */
+      '?', /* U+C62D */
+      '?', /* U+C62E */
+      '?', /* U+C62F */
+      '?', /* U+C630 */
+      '?', /* U+C631 */
+      '?', /* U+C632 */
+      '?', /* U+C633 */
+      '?', /* U+C634 */
+      '?', /* U+C635 */
+      '?', /* U+C636 */
+      '?', /* U+C637 */
+      '?', /* U+C638 */
+      '?', /* U+C639 */
+      '?', /* U+C63A */
+      '?', /* U+C63B */
+      '?', /* U+C63C */
+      '?', /* U+C63D */
+      '?', /* U+C63E */
+      '?', /* U+C63F */
+      '?', /* U+C640 */
+      '?', /* U+C641 */
+      '?', /* U+C642 */
+      '?', /* U+C643 */
+      '?', /* U+C644 */
+      '?', /* U+C645 */
+      '?', /* U+C646 */
+      '?', /* U+C647 */
+      '?', /* U+C648 */
+      '?', /* U+C649 */
+      '?', /* U+C64A */
+      '?', /* U+C64B */
+      '?', /* U+C64C */
+      '?', /* U+C64D */
+      '?', /* U+C64E */
+      '?', /* U+C64F */
+      '?', /* U+C650 */
+      '?', /* U+C651 */
+      '?', /* U+C652 */
+      '?', /* U+C653 */
+      '?', /* U+C654 */
+      '?', /* U+C655 */
+      '?', /* U+C656 */
+      '?', /* U+C657 */
+      '?', /* U+C658 */
+      '?', /* U+C659 */
+      '?', /* U+C65A */
+      '?', /* U+C65B */
+      '?', /* U+C65C */
+      '?', /* U+C65D */
+      '?', /* U+C65E */
+      '?', /* U+C65F */
+      '?', /* U+C660 */
+      '?', /* U+C661 */
+      '?', /* U+C662 */
+      '?', /* U+C663 */
+      '?', /* U+C664 */
+      '?', /* U+C665 */
+      '?', /* U+C666 */
+      '?', /* U+C667 */
+      '?', /* U+C668 */
+      '?', /* U+C669 */
+      '?', /* U+C66A */
+      '?', /* U+C66B */
+      '?', /* U+C66C */
+      '?', /* U+C66D */
+      '?', /* U+C66E */
+      '?', /* U+C66F */
+      '?', /* U+C670 */
+      '?', /* U+C671 */
+      '?', /* U+C672 */
+      '?', /* U+C673 */
+      '?', /* U+C674 */
+      '?', /* U+C675 */
+      '?', /* U+C676 */
+      '?', /* U+C677 */
+      '?', /* U+C678 */
+      '?', /* U+C679 */
+      '?', /* U+C67A */
+      '?', /* U+C67B */
+      '?', /* U+C67C */
+      '?', /* U+C67D */
+      '?', /* U+C67E */
+      '?', /* U+C67F */
+      '?', /* U+C680 */
+      '?', /* U+C681 */
+      '?', /* U+C682 */
+      '?', /* U+C683 */
+      '?', /* U+C684 */
+      '?', /* U+C685 */
+      '?', /* U+C686 */
+      '?', /* U+C687 */
+      '?', /* U+C688 */
+      '?', /* U+C689 */
+      '?', /* U+C68A */
+      '?', /* U+C68B */
+      '?', /* U+C68C */
+      '?', /* U+C68D */
+      '?', /* U+C68E */
+      '?', /* U+C68F */
+      '?', /* U+C690 */
+      '?', /* U+C691 */
+      '?', /* U+C692 */
+      '?', /* U+C693 */
+      '?', /* U+C694 */
+      '?', /* U+C695 */
+      '?', /* U+C696 */
+      '?', /* U+C697 */
+      '?', /* U+C698 */
+      '?', /* U+C699 */
+      '?', /* U+C69A */
+      '?', /* U+C69B */
+      '?', /* U+C69C */
+      '?', /* U+C69D */
+      '?', /* U+C69E */
+      '?', /* U+C69F */
+      '?', /* U+C6A0 */
+      '?', /* U+C6A1 */
+      '?', /* U+C6A2 */
+      '?', /* U+C6A3 */
+      '?', /* U+C6A4 */
+      '?', /* U+C6A5 */
+      '?', /* U+C6A6 */
+      '?', /* U+C6A7 */
+      '?', /* U+C6A8 */
+      '?', /* U+C6A9 */
+      '?', /* U+C6AA */
+      '?', /* U+C6AB */
+      '?', /* U+C6AC */
+      '?', /* U+C6AD */
+      '?', /* U+C6AE */
+      '?', /* U+C6AF */
+      '?', /* U+C6B0 */
+      '?', /* U+C6B1 */
+      '?', /* U+C6B2 */
+      '?', /* U+C6B3 */
+      '?', /* U+C6B4 */
+      '?', /* U+C6B5 */
+      '?', /* U+C6B6 */
+      '?', /* U+C6B7 */
+      '?', /* U+C6B8 */
+      '?', /* U+C6B9 */
+      '?', /* U+C6BA */
+      '?', /* U+C6BB */
+      '?', /* U+C6BC */
+      '?', /* U+C6BD */
+      '?', /* U+C6BE */
+      '?', /* U+C6BF */
+      '?', /* U+C6C0 */
+      '?', /* U+C6C1 */
+      '?', /* U+C6C2 */
+      '?', /* U+C6C3 */
+      '?', /* U+C6C4 */
+      '?', /* U+C6C5 */
+      '?', /* U+C6C6 */
+      '?', /* U+C6C7 */
+      '?', /* U+C6C8 */
+      '?', /* U+C6C9 */
+      '?', /* U+C6CA */
+      '?', /* U+C6CB */
+      '?', /* U+C6CC */
+      '?', /* U+C6CD */
+      '?', /* U+C6CE */
+      '?', /* U+C6CF */
+      '?', /* U+C6D0 */
+      '?', /* U+C6D1 */
+      '?', /* U+C6D2 */
+      '?', /* U+C6D3 */
+      '?', /* U+C6D4 */
+      '?', /* U+C6D5 */
+      '?', /* U+C6D6 */
+      '?', /* U+C6D7 */
+      '?', /* U+C6D8 */
+      '?', /* U+C6D9 */
+      '?', /* U+C6DA */
+      '?', /* U+C6DB */
+      '?', /* U+C6DC */
+      '?', /* U+C6DD */
+      '?', /* U+C6DE */
+      '?', /* U+C6DF */
+      '?', /* U+C6E0 */
+      '?', /* U+C6E1 */
+      '?', /* U+C6E2 */
+      '?', /* U+C6E3 */
+      '?', /* U+C6E4 */
+      '?', /* U+C6E5 */
+      '?', /* U+C6E6 */
+      '?', /* U+C6E7 */
+      '?', /* U+C6E8 */
+      '?', /* U+C6E9 */
+      '?', /* U+C6EA */
+      '?', /* U+C6EB */
+      '?', /* U+C6EC */
+      '?', /* U+C6ED */
+      '?', /* U+C6EE */
+      '?', /* U+C6EF */
+      '?', /* U+C6F0 */
+      '?', /* U+C6F1 */
+      '?', /* U+C6F2 */
+      '?', /* U+C6F3 */
+      '?', /* U+C6F4 */
+      '?', /* U+C6F5 */
+      '?', /* U+C6F6 */
+      '?', /* U+C6F7 */
+      '?', /* U+C6F8 */
+      '?', /* U+C6F9 */
+      '?', /* U+C6FA */
+      '?', /* U+C6FB */
+      '?', /* U+C6FC */
+      '?', /* U+C6FD */
+      '?', /* U+C6FE */
+      '?', /* U+C6FF */
+      '?', /* U+C700 */
+      '?', /* U+C701 */
+      '?', /* U+C702 */
+      '?', /* U+C703 */
+      '?', /* U+C704 */
+      '?', /* U+C705 */
+      '?', /* U+C706 */
+      '?', /* U+C707 */
+      '?', /* U+C708 */
+      '?', /* U+C709 */
+      '?', /* U+C70A */
+      '?', /* U+C70B */
+      '?', /* U+C70C */
+      '?', /* U+C70D */
+      '?', /* U+C70E */
+      '?', /* U+C70F */
+      '?', /* U+C710 */
+      '?', /* U+C711 */
+      '?', /* U+C712 */
+      '?', /* U+C713 */
+      '?', /* U+C714 */
+      '?', /* U+C715 */
+      '?', /* U+C716 */
+      '?', /* U+C717 */
+      '?', /* U+C718 */
+      '?', /* U+C719 */
+      '?', /* U+C71A */
+      '?', /* U+C71B */
+      '?', /* U+C71C */
+      '?', /* U+C71D */
+      '?', /* U+C71E */
+      '?', /* U+C71F */
+      '?', /* U+C720 */
+      '?', /* U+C721 */
+      '?', /* U+C722 */
+      '?', /* U+C723 */
+      '?', /* U+C724 */
+      '?', /* U+C725 */
+      '?', /* U+C726 */
+      '?', /* U+C727 */
+      '?', /* U+C728 */
+      '?', /* U+C729 */
+      '?', /* U+C72A */
+      '?', /* U+C72B */
+      '?', /* U+C72C */
+      '?', /* U+C72D */
+      '?', /* U+C72E */
+      '?', /* U+C72F */
+      '?', /* U+C730 */
+      '?', /* U+C731 */
+      '?', /* U+C732 */
+      '?', /* U+C733 */
+      '?', /* U+C734 */
+      '?', /* U+C735 */
+      '?', /* U+C736 */
+      '?', /* U+C737 */
+      '?', /* U+C738 */
+      '?', /* U+C739 */
+      '?', /* U+C73A */
+      '?', /* U+C73B */
+      '?', /* U+C73C */
+      '?', /* U+C73D */
+      '?', /* U+C73E */
+      '?', /* U+C73F */
+      '?', /* U+C740 */
+      '?', /* U+C741 */
+      '?', /* U+C742 */
+      '?', /* U+C743 */
+      '?', /* U+C744 */
+      '?', /* U+C745 */
+      '?', /* U+C746 */
+      '?', /* U+C747 */
+      '?', /* U+C748 */
+      '?', /* U+C749 */
+      '?', /* U+C74A */
+      '?', /* U+C74B */
+      '?', /* U+C74C */
+      '?', /* U+C74D */
+      '?', /* U+C74E */
+      '?', /* U+C74F */
+      '?', /* U+C750 */
+      '?', /* U+C751 */
+      '?', /* U+C752 */
+      '?', /* U+C753 */
+      '?', /* U+C754 */
+      '?', /* U+C755 */
+      '?', /* U+C756 */
+      '?', /* U+C757 */
+      '?', /* U+C758 */
+      '?', /* U+C759 */
+      '?', /* U+C75A */
+      '?', /* U+C75B */
+      '?', /* U+C75C */
+      '?', /* U+C75D */
+      '?', /* U+C75E */
+      '?', /* U+C75F */
+      '?', /* U+C760 */
+      '?', /* U+C761 */
+      '?', /* U+C762 */
+      '?', /* U+C763 */
+      '?', /* U+C764 */
+      '?', /* U+C765 */
+      '?', /* U+C766 */
+      '?', /* U+C767 */
+      '?', /* U+C768 */
+      '?', /* U+C769 */
+      '?', /* U+C76A */
+      '?', /* U+C76B */
+      '?', /* U+C76C */
+      '?', /* U+C76D */
+      '?', /* U+C76E */
+      '?', /* U+C76F */
+      '?', /* U+C770 */
+      '?', /* U+C771 */
+      '?', /* U+C772 */
+      '?', /* U+C773 */
+      '?', /* U+C774 */
+      '?', /* U+C775 */
+      '?', /* U+C776 */
+      '?', /* U+C777 */
+      '?', /* U+C778 */
+      '?', /* U+C779 */
+      '?', /* U+C77A */
+      '?', /* U+C77B */
+      '?', /* U+C77C */
+      '?', /* U+C77D */
+      '?', /* U+C77E */
+      '?', /* U+C77F */
+      '?', /* U+C780 */
+      '?', /* U+C781 */
+      '?', /* U+C782 */
+      '?', /* U+C783 */
+      '?', /* U+C784 */
+      '?', /* U+C785 */
+      '?', /* U+C786 */
+      '?', /* U+C787 */
+      '?', /* U+C788 */
+      '?', /* U+C789 */
+      '?', /* U+C78A */
+      '?', /* U+C78B */
+      '?', /* U+C78C */
+      '?', /* U+C78D */
+      '?', /* U+C78E */
+      '?', /* U+C78F */
+      '?', /* U+C790 */
+      '?', /* U+C791 */
+      '?', /* U+C792 */
+      '?', /* U+C793 */
+      '?', /* U+C794 */
+      '?', /* U+C795 */
+      '?', /* U+C796 */
+      '?', /* U+C797 */
+      '?', /* U+C798 */
+      '?', /* U+C799 */
+      '?', /* U+C79A */
+      '?', /* U+C79B */
+      '?', /* U+C79C */
+      '?', /* U+C79D */
+      '?', /* U+C79E */
+      '?', /* U+C79F */
+      '?', /* U+C7A0 */
+      '?', /* U+C7A1 */
+      '?', /* U+C7A2 */
+      '?', /* U+C7A3 */
+      '?', /* U+C7A4 */
+      '?', /* U+C7A5 */
+      '?', /* U+C7A6 */
+      '?', /* U+C7A7 */
+      '?', /* U+C7A8 */
+      '?', /* U+C7A9 */
+      '?', /* U+C7AA */
+      '?', /* U+C7AB */
+      '?', /* U+C7AC */
+      '?', /* U+C7AD */
+      '?', /* U+C7AE */
+      '?', /* U+C7AF */
+      '?', /* U+C7B0 */
+      '?', /* U+C7B1 */
+      '?', /* U+C7B2 */
+      '?', /* U+C7B3 */
+      '?', /* U+C7B4 */
+      '?', /* U+C7B5 */
+      '?', /* U+C7B6 */
+      '?', /* U+C7B7 */
+      '?', /* U+C7B8 */
+      '?', /* U+C7B9 */
+      '?', /* U+C7BA */
+      '?', /* U+C7BB */
+      '?', /* U+C7BC */
+      '?', /* U+C7BD */
+      '?', /* U+C7BE */
+      '?', /* U+C7BF */
+      '?', /* U+C7C0 */
+      '?', /* U+C7C1 */
+      '?', /* U+C7C2 */
+      '?', /* U+C7C3 */
+      '?', /* U+C7C4 */
+      '?', /* U+C7C5 */
+      '?', /* U+C7C6 */
+      '?', /* U+C7C7 */
+      '?', /* U+C7C8 */
+      '?', /* U+C7C9 */
+      '?', /* U+C7CA */
+      '?', /* U+C7CB */
+      '?', /* U+C7CC */
+      '?', /* U+C7CD */
+      '?', /* U+C7CE */
+      '?', /* U+C7CF */
+      '?', /* U+C7D0 */
+      '?', /* U+C7D1 */
+      '?', /* U+C7D2 */
+      '?', /* U+C7D3 */
+      '?', /* U+C7D4 */
+      '?', /* U+C7D5 */
+      '?', /* U+C7D6 */
+      '?', /* U+C7D7 */
+      '?', /* U+C7D8 */
+      '?', /* U+C7D9 */
+      '?', /* U+C7DA */
+      '?', /* U+C7DB */
+      '?', /* U+C7DC */
+      '?', /* U+C7DD */
+      '?', /* U+C7DE */
+      '?', /* U+C7DF */
+      '?', /* U+C7E0 */
+      '?', /* U+C7E1 */
+      '?', /* U+C7E2 */
+      '?', /* U+C7E3 */
+      '?', /* U+C7E4 */
+      '?', /* U+C7E5 */
+      '?', /* U+C7E6 */
+      '?', /* U+C7E7 */
+      '?', /* U+C7E8 */
+      '?', /* U+C7E9 */
+      '?', /* U+C7EA */
+      '?', /* U+C7EB */
+      '?', /* U+C7EC */
+      '?', /* U+C7ED */
+      '?', /* U+C7EE */
+      '?', /* U+C7EF */
+      '?', /* U+C7F0 */
+      '?', /* U+C7F1 */
+      '?', /* U+C7F2 */
+      '?', /* U+C7F3 */
+      '?', /* U+C7F4 */
+      '?', /* U+C7F5 */
+      '?', /* U+C7F6 */
+      '?', /* U+C7F7 */
+      '?', /* U+C7F8 */
+      '?', /* U+C7F9 */
+      '?', /* U+C7FA */
+      '?', /* U+C7FB */
+      '?', /* U+C7FC */
+      '?', /* U+C7FD */
+      '?', /* U+C7FE */
+      '?', /* U+C7FF */
+      '?', /* U+C800 */
+      '?', /* U+C801 */
+      '?', /* U+C802 */
+      '?', /* U+C803 */
+      '?', /* U+C804 */
+      '?', /* U+C805 */
+      '?', /* U+C806 */
+      '?', /* U+C807 */
+      '?', /* U+C808 */
+      '?', /* U+C809 */
+      '?', /* U+C80A */
+      '?', /* U+C80B */
+      '?', /* U+C80C */
+      '?', /* U+C80D */
+      '?', /* U+C80E */
+      '?', /* U+C80F */
+      '?', /* U+C810 */
+      '?', /* U+C811 */
+      '?', /* U+C812 */
+      '?', /* U+C813 */
+      '?', /* U+C814 */
+      '?', /* U+C815 */
+      '?', /* U+C816 */
+      '?', /* U+C817 */
+      '?', /* U+C818 */
+      '?', /* U+C819 */
+      '?', /* U+C81A */
+      '?', /* U+C81B */
+      '?', /* U+C81C */
+      '?', /* U+C81D */
+      '?', /* U+C81E */
+      '?', /* U+C81F */
+      '?', /* U+C820 */
+      '?', /* U+C821 */
+      '?', /* U+C822 */
+      '?', /* U+C823 */
+      '?', /* U+C824 */
+      '?', /* U+C825 */
+      '?', /* U+C826 */
+      '?', /* U+C827 */
+      '?', /* U+C828 */
+      '?', /* U+C829 */
+      '?', /* U+C82A */
+      '?', /* U+C82B */
+      '?', /* U+C82C */
+      '?', /* U+C82D */
+      '?', /* U+C82E */
+      '?', /* U+C82F */
+      '?', /* U+C830 */
+      '?', /* U+C831 */
+      '?', /* U+C832 */
+      '?', /* U+C833 */
+      '?', /* U+C834 */
+      '?', /* U+C835 */
+      '?', /* U+C836 */
+      '?', /* U+C837 */
+      '?', /* U+C838 */
+      '?', /* U+C839 */
+      '?', /* U+C83A */
+      '?', /* U+C83B */
+      '?', /* U+C83C */
+      '?', /* U+C83D */
+      '?', /* U+C83E */
+      '?', /* U+C83F */
+      '?', /* U+C840 */
+      '?', /* U+C841 */
+      '?', /* U+C842 */
+      '?', /* U+C843 */
+      '?', /* U+C844 */
+      '?', /* U+C845 */
+      '?', /* U+C846 */
+      '?', /* U+C847 */
+      '?', /* U+C848 */
+      '?', /* U+C849 */
+      '?', /* U+C84A */
+      '?', /* U+C84B */
+      '?', /* U+C84C */
+      '?', /* U+C84D */
+      '?', /* U+C84E */
+      '?', /* U+C84F */
+      '?', /* U+C850 */
+      '?', /* U+C851 */
+      '?', /* U+C852 */
+      '?', /* U+C853 */
+      '?', /* U+C854 */
+      '?', /* U+C855 */
+      '?', /* U+C856 */
+      '?', /* U+C857 */
+      '?', /* U+C858 */
+      '?', /* U+C859 */
+      '?', /* U+C85A */
+      '?', /* U+C85B */
+      '?', /* U+C85C */
+      '?', /* U+C85D */
+      '?', /* U+C85E */
+      '?', /* U+C85F */
+      '?', /* U+C860 */
+      '?', /* U+C861 */
+      '?', /* U+C862 */
+      '?', /* U+C863 */
+      '?', /* U+C864 */
+      '?', /* U+C865 */
+      '?', /* U+C866 */
+      '?', /* U+C867 */
+      '?', /* U+C868 */
+      '?', /* U+C869 */
+      '?', /* U+C86A */
+      '?', /* U+C86B */
+      '?', /* U+C86C */
+      '?', /* U+C86D */
+      '?', /* U+C86E */
+      '?', /* U+C86F */
+      '?', /* U+C870 */
+      '?', /* U+C871 */
+      '?', /* U+C872 */
+      '?', /* U+C873 */
+      '?', /* U+C874 */
+      '?', /* U+C875 */
+      '?', /* U+C876 */
+      '?', /* U+C877 */
+      '?', /* U+C878 */
+      '?', /* U+C879 */
+      '?', /* U+C87A */
+      '?', /* U+C87B */
+      '?', /* U+C87C */
+      '?', /* U+C87D */
+      '?', /* U+C87E */
+      '?', /* U+C87F */
+      '?', /* U+C880 */
+      '?', /* U+C881 */
+      '?', /* U+C882 */
+      '?', /* U+C883 */
+      '?', /* U+C884 */
+      '?', /* U+C885 */
+      '?', /* U+C886 */
+      '?', /* U+C887 */
+      '?', /* U+C888 */
+      '?', /* U+C889 */
+      '?', /* U+C88A */
+      '?', /* U+C88B */
+      '?', /* U+C88C */
+      '?', /* U+C88D */
+      '?', /* U+C88E */
+      '?', /* U+C88F */
+      '?', /* U+C890 */
+      '?', /* U+C891 */
+      '?', /* U+C892 */
+      '?', /* U+C893 */
+      '?', /* U+C894 */
+      '?', /* U+C895 */
+      '?', /* U+C896 */
+      '?', /* U+C897 */
+      '?', /* U+C898 */
+      '?', /* U+C899 */
+      '?', /* U+C89A */
+      '?', /* U+C89B */
+      '?', /* U+C89C */
+      '?', /* U+C89D */
+      '?', /* U+C89E */
+      '?', /* U+C89F */
+      '?', /* U+C8A0 */
+      '?', /* U+C8A1 */
+      '?', /* U+C8A2 */
+      '?', /* U+C8A3 */
+      '?', /* U+C8A4 */
+      '?', /* U+C8A5 */
+      '?', /* U+C8A6 */
+      '?', /* U+C8A7 */
+      '?', /* U+C8A8 */
+      '?', /* U+C8A9 */
+      '?', /* U+C8AA */
+      '?', /* U+C8AB */
+      '?', /* U+C8AC */
+      '?', /* U+C8AD */
+      '?', /* U+C8AE */
+      '?', /* U+C8AF */
+      '?', /* U+C8B0 */
+      '?', /* U+C8B1 */
+      '?', /* U+C8B2 */
+      '?', /* U+C8B3 */
+      '?', /* U+C8B4 */
+      '?', /* U+C8B5 */
+      '?', /* U+C8B6 */
+      '?', /* U+C8B7 */
+      '?', /* U+C8B8 */
+      '?', /* U+C8B9 */
+      '?', /* U+C8BA */
+      '?', /* U+C8BB */
+      '?', /* U+C8BC */
+      '?', /* U+C8BD */
+      '?', /* U+C8BE */
+      '?', /* U+C8BF */
+      '?', /* U+C8C0 */
+      '?', /* U+C8C1 */
+      '?', /* U+C8C2 */
+      '?', /* U+C8C3 */
+      '?', /* U+C8C4 */
+      '?', /* U+C8C5 */
+      '?', /* U+C8C6 */
+      '?', /* U+C8C7 */
+      '?', /* U+C8C8 */
+      '?', /* U+C8C9 */
+      '?', /* U+C8CA */
+      '?', /* U+C8CB */
+      '?', /* U+C8CC */
+      '?', /* U+C8CD */
+      '?', /* U+C8CE */
+      '?', /* U+C8CF */
+      '?', /* U+C8D0 */
+      '?', /* U+C8D1 */
+      '?', /* U+C8D2 */
+      '?', /* U+C8D3 */
+      '?', /* U+C8D4 */
+      '?', /* U+C8D5 */
+      '?', /* U+C8D6 */
+      '?', /* U+C8D7 */
+      '?', /* U+C8D8 */
+      '?', /* U+C8D9 */
+      '?', /* U+C8DA */
+      '?', /* U+C8DB */
+      '?', /* U+C8DC */
+      '?', /* U+C8DD */
+      '?', /* U+C8DE */
+      '?', /* U+C8DF */
+      '?', /* U+C8E0 */
+      '?', /* U+C8E1 */
+      '?', /* U+C8E2 */
+      '?', /* U+C8E3 */
+      '?', /* U+C8E4 */
+      '?', /* U+C8E5 */
+      '?', /* U+C8E6 */
+      '?', /* U+C8E7 */
+      '?', /* U+C8E8 */
+      '?', /* U+C8E9 */
+      '?', /* U+C8EA */
+      '?', /* U+C8EB */
+      '?', /* U+C8EC */
+      '?', /* U+C8ED */
+      '?', /* U+C8EE */
+      '?', /* U+C8EF */
+      '?', /* U+C8F0 */
+      '?', /* U+C8F1 */
+      '?', /* U+C8F2 */
+      '?', /* U+C8F3 */
+      '?', /* U+C8F4 */
+      '?', /* U+C8F5 */
+      '?', /* U+C8F6 */
+      '?', /* U+C8F7 */
+      '?', /* U+C8F8 */
+      '?', /* U+C8F9 */
+      '?', /* U+C8FA */
+      '?', /* U+C8FB */
+      '?', /* U+C8FC */
+      '?', /* U+C8FD */
+      '?', /* U+C8FE */
+      '?', /* U+C8FF */
+      '?', /* U+C900 */
+      '?', /* U+C901 */
+      '?', /* U+C902 */
+      '?', /* U+C903 */
+      '?', /* U+C904 */
+      '?', /* U+C905 */
+      '?', /* U+C906 */
+      '?', /* U+C907 */
+      '?', /* U+C908 */
+      '?', /* U+C909 */
+      '?', /* U+C90A */
+      '?', /* U+C90B */
+      '?', /* U+C90C */
+      '?', /* U+C90D */
+      '?', /* U+C90E */
+      '?', /* U+C90F */
+      '?', /* U+C910 */
+      '?', /* U+C911 */
+      '?', /* U+C912 */
+      '?', /* U+C913 */
+      '?', /* U+C914 */
+      '?', /* U+C915 */
+      '?', /* U+C916 */
+      '?', /* U+C917 */
+      '?', /* U+C918 */
+      '?', /* U+C919 */
+      '?', /* U+C91A */
+      '?', /* U+C91B */
+      '?', /* U+C91C */
+      '?', /* U+C91D */
+      '?', /* U+C91E */
+      '?', /* U+C91F */
+      '?', /* U+C920 */
+      '?', /* U+C921 */
+      '?', /* U+C922 */
+      '?', /* U+C923 */
+      '?', /* U+C924 */
+      '?', /* U+C925 */
+      '?', /* U+C926 */
+      '?', /* U+C927 */
+      '?', /* U+C928 */
+      '?', /* U+C929 */
+      '?', /* U+C92A */
+      '?', /* U+C92B */
+      '?', /* U+C92C */
+      '?', /* U+C92D */
+      '?', /* U+C92E */
+      '?', /* U+C92F */
+      '?', /* U+C930 */
+      '?', /* U+C931 */
+      '?', /* U+C932 */
+      '?', /* U+C933 */
+      '?', /* U+C934 */
+      '?', /* U+C935 */
+      '?', /* U+C936 */
+      '?', /* U+C937 */
+      '?', /* U+C938 */
+      '?', /* U+C939 */
+      '?', /* U+C93A */
+      '?', /* U+C93B */
+      '?', /* U+C93C */
+      '?', /* U+C93D */
+      '?', /* U+C93E */
+      '?', /* U+C93F */
+      '?', /* U+C940 */
+      '?', /* U+C941 */
+      '?', /* U+C942 */
+      '?', /* U+C943 */
+      '?', /* U+C944 */
+      '?', /* U+C945 */
+      '?', /* U+C946 */
+      '?', /* U+C947 */
+      '?', /* U+C948 */
+      '?', /* U+C949 */
+      '?', /* U+C94A */
+      '?', /* U+C94B */
+      '?', /* U+C94C */
+      '?', /* U+C94D */
+      '?', /* U+C94E */
+      '?', /* U+C94F */
+      '?', /* U+C950 */
+      '?', /* U+C951 */
+      '?', /* U+C952 */
+      '?', /* U+C953 */
+      '?', /* U+C954 */
+      '?', /* U+C955 */
+      '?', /* U+C956 */
+      '?', /* U+C957 */
+      '?', /* U+C958 */
+      '?', /* U+C959 */
+      '?', /* U+C95A */
+      '?', /* U+C95B */
+      '?', /* U+C95C */
+      '?', /* U+C95D */
+      '?', /* U+C95E */
+      '?', /* U+C95F */
+      '?', /* U+C960 */
+      '?', /* U+C961 */
+      '?', /* U+C962 */
+      '?', /* U+C963 */
+      '?', /* U+C964 */
+      '?', /* U+C965 */
+      '?', /* U+C966 */
+      '?', /* U+C967 */
+      '?', /* U+C968 */
+      '?', /* U+C969 */
+      '?', /* U+C96A */
+      '?', /* U+C96B */
+      '?', /* U+C96C */
+      '?', /* U+C96D */
+      '?', /* U+C96E */
+      '?', /* U+C96F */
+      '?', /* U+C970 */
+      '?', /* U+C971 */
+      '?', /* U+C972 */
+      '?', /* U+C973 */
+      '?', /* U+C974 */
+      '?', /* U+C975 */
+      '?', /* U+C976 */
+      '?', /* U+C977 */
+      '?', /* U+C978 */
+      '?', /* U+C979 */
+      '?', /* U+C97A */
+      '?', /* U+C97B */
+      '?', /* U+C97C */
+      '?', /* U+C97D */
+      '?', /* U+C97E */
+      '?', /* U+C97F */
+      '?', /* U+C980 */
+      '?', /* U+C981 */
+      '?', /* U+C982 */
+      '?', /* U+C983 */
+      '?', /* U+C984 */
+      '?', /* U+C985 */
+      '?', /* U+C986 */
+      '?', /* U+C987 */
+      '?', /* U+C988 */
+      '?', /* U+C989 */
+      '?', /* U+C98A */
+      '?', /* U+C98B */
+      '?', /* U+C98C */
+      '?', /* U+C98D */
+      '?', /* U+C98E */
+      '?', /* U+C98F */
+      '?', /* U+C990 */
+      '?', /* U+C991 */
+      '?', /* U+C992 */
+      '?', /* U+C993 */
+      '?', /* U+C994 */
+      '?', /* U+C995 */
+      '?', /* U+C996 */
+      '?', /* U+C997 */
+      '?', /* U+C998 */
+      '?', /* U+C999 */
+      '?', /* U+C99A */
+      '?', /* U+C99B */
+      '?', /* U+C99C */
+      '?', /* U+C99D */
+      '?', /* U+C99E */
+      '?', /* U+C99F */
+      '?', /* U+C9A0 */
+      '?', /* U+C9A1 */
+      '?', /* U+C9A2 */
+      '?', /* U+C9A3 */
+      '?', /* U+C9A4 */
+      '?', /* U+C9A5 */
+      '?', /* U+C9A6 */
+      '?', /* U+C9A7 */
+      '?', /* U+C9A8 */
+      '?', /* U+C9A9 */
+      '?', /* U+C9AA */
+      '?', /* U+C9AB */
+      '?', /* U+C9AC */
+      '?', /* U+C9AD */
+      '?', /* U+C9AE */
+      '?', /* U+C9AF */
+      '?', /* U+C9B0 */
+      '?', /* U+C9B1 */
+      '?', /* U+C9B2 */
+      '?', /* U+C9B3 */
+      '?', /* U+C9B4 */
+      '?', /* U+C9B5 */
+      '?', /* U+C9B6 */
+      '?', /* U+C9B7 */
+      '?', /* U+C9B8 */
+      '?', /* U+C9B9 */
+      '?', /* U+C9BA */
+      '?', /* U+C9BB */
+      '?', /* U+C9BC */
+      '?', /* U+C9BD */
+      '?', /* U+C9BE */
+      '?', /* U+C9BF */
+      '?', /* U+C9C0 */
+      '?', /* U+C9C1 */
+      '?', /* U+C9C2 */
+      '?', /* U+C9C3 */
+      '?', /* U+C9C4 */
+      '?', /* U+C9C5 */
+      '?', /* U+C9C6 */
+      '?', /* U+C9C7 */
+      '?', /* U+C9C8 */
+      '?', /* U+C9C9 */
+      '?', /* U+C9CA */
+      '?', /* U+C9CB */
+      '?', /* U+C9CC */
+      '?', /* U+C9CD */
+      '?', /* U+C9CE */
+      '?', /* U+C9CF */
+      '?', /* U+C9D0 */
+      '?', /* U+C9D1 */
+      '?', /* U+C9D2 */
+      '?', /* U+C9D3 */
+      '?', /* U+C9D4 */
+      '?', /* U+C9D5 */
+      '?', /* U+C9D6 */
+      '?', /* U+C9D7 */
+      '?', /* U+C9D8 */
+      '?', /* U+C9D9 */
+      '?', /* U+C9DA */
+      '?', /* U+C9DB */
+      '?', /* U+C9DC */
+      '?', /* U+C9DD */
+      '?', /* U+C9DE */
+      '?', /* U+C9DF */
+      '?', /* U+C9E0 */
+      '?', /* U+C9E1 */
+      '?', /* U+C9E2 */
+      '?', /* U+C9E3 */
+      '?', /* U+C9E4 */
+      '?', /* U+C9E5 */
+      '?', /* U+C9E6 */
+      '?', /* U+C9E7 */
+      '?', /* U+C9E8 */
+      '?', /* U+C9E9 */
+      '?', /* U+C9EA */
+      '?', /* U+C9EB */
+      '?', /* U+C9EC */
+      '?', /* U+C9ED */
+      '?', /* U+C9EE */
+      '?', /* U+C9EF */
+      '?', /* U+C9F0 */
+      '?', /* U+C9F1 */
+      '?', /* U+C9F2 */
+      '?', /* U+C9F3 */
+      '?', /* U+C9F4 */
+      '?', /* U+C9F5 */
+      '?', /* U+C9F6 */
+      '?', /* U+C9F7 */
+      '?', /* U+C9F8 */
+      '?', /* U+C9F9 */
+      '?', /* U+C9FA */
+      '?', /* U+C9FB */
+      '?', /* U+C9FC */
+      '?', /* U+C9FD */
+      '?', /* U+C9FE */
+      '?', /* U+C9FF */
+      '?', /* U+CA00 */
+      '?', /* U+CA01 */
+      '?', /* U+CA02 */
+      '?', /* U+CA03 */
+      '?', /* U+CA04 */
+      '?', /* U+CA05 */
+      '?', /* U+CA06 */
+      '?', /* U+CA07 */
+      '?', /* U+CA08 */
+      '?', /* U+CA09 */
+      '?', /* U+CA0A */
+      '?', /* U+CA0B */
+      '?', /* U+CA0C */
+      '?', /* U+CA0D */
+      '?', /* U+CA0E */
+      '?', /* U+CA0F */
+      '?', /* U+CA10 */
+      '?', /* U+CA11 */
+      '?', /* U+CA12 */
+      '?', /* U+CA13 */
+      '?', /* U+CA14 */
+      '?', /* U+CA15 */
+      '?', /* U+CA16 */
+      '?', /* U+CA17 */
+      '?', /* U+CA18 */
+      '?', /* U+CA19 */
+      '?', /* U+CA1A */
+      '?', /* U+CA1B */
+      '?', /* U+CA1C */
+      '?', /* U+CA1D */
+      '?', /* U+CA1E */
+      '?', /* U+CA1F */
+      '?', /* U+CA20 */
+      '?', /* U+CA21 */
+      '?', /* U+CA22 */
+      '?', /* U+CA23 */
+      '?', /* U+CA24 */
+      '?', /* U+CA25 */
+      '?', /* U+CA26 */
+      '?', /* U+CA27 */
+      '?', /* U+CA28 */
+      '?', /* U+CA29 */
+      '?', /* U+CA2A */
+      '?', /* U+CA2B */
+      '?', /* U+CA2C */
+      '?', /* U+CA2D */
+      '?', /* U+CA2E */
+      '?', /* U+CA2F */
+      '?', /* U+CA30 */
+      '?', /* U+CA31 */
+      '?', /* U+CA32 */
+      '?', /* U+CA33 */
+      '?', /* U+CA34 */
+      '?', /* U+CA35 */
+      '?', /* U+CA36 */
+      '?', /* U+CA37 */
+      '?', /* U+CA38 */
+      '?', /* U+CA39 */
+      '?', /* U+CA3A */
+      '?', /* U+CA3B */
+      '?', /* U+CA3C */
+      '?', /* U+CA3D */
+      '?', /* U+CA3E */
+      '?', /* U+CA3F */
+      '?', /* U+CA40 */
+      '?', /* U+CA41 */
+      '?', /* U+CA42 */
+      '?', /* U+CA43 */
+      '?', /* U+CA44 */
+      '?', /* U+CA45 */
+      '?', /* U+CA46 */
+      '?', /* U+CA47 */
+      '?', /* U+CA48 */
+      '?', /* U+CA49 */
+      '?', /* U+CA4A */
+      '?', /* U+CA4B */
+      '?', /* U+CA4C */
+      '?', /* U+CA4D */
+      '?', /* U+CA4E */
+      '?', /* U+CA4F */
+      '?', /* U+CA50 */
+      '?', /* U+CA51 */
+      '?', /* U+CA52 */
+      '?', /* U+CA53 */
+      '?', /* U+CA54 */
+      '?', /* U+CA55 */
+      '?', /* U+CA56 */
+      '?', /* U+CA57 */
+      '?', /* U+CA58 */
+      '?', /* U+CA59 */
+      '?', /* U+CA5A */
+      '?', /* U+CA5B */
+      '?', /* U+CA5C */
+      '?', /* U+CA5D */
+      '?', /* U+CA5E */
+      '?', /* U+CA5F */
+      '?', /* U+CA60 */
+      '?', /* U+CA61 */
+      '?', /* U+CA62 */
+      '?', /* U+CA63 */
+      '?', /* U+CA64 */
+      '?', /* U+CA65 */
+      '?', /* U+CA66 */
+      '?', /* U+CA67 */
+      '?', /* U+CA68 */
+      '?', /* U+CA69 */
+      '?', /* U+CA6A */
+      '?', /* U+CA6B */
+      '?', /* U+CA6C */
+      '?', /* U+CA6D */
+      '?', /* U+CA6E */
+      '?', /* U+CA6F */
+      '?', /* U+CA70 */
+      '?', /* U+CA71 */
+      '?', /* U+CA72 */
+      '?', /* U+CA73 */
+      '?', /* U+CA74 */
+      '?', /* U+CA75 */
+      '?', /* U+CA76 */
+      '?', /* U+CA77 */
+      '?', /* U+CA78 */
+      '?', /* U+CA79 */
+      '?', /* U+CA7A */
+      '?', /* U+CA7B */
+      '?', /* U+CA7C */
+      '?', /* U+CA7D */
+      '?', /* U+CA7E */
+      '?', /* U+CA7F */
+      '?', /* U+CA80 */
+      '?', /* U+CA81 */
+      '?', /* U+CA82 */
+      '?', /* U+CA83 */
+      '?', /* U+CA84 */
+      '?', /* U+CA85 */
+      '?', /* U+CA86 */
+      '?', /* U+CA87 */
+      '?', /* U+CA88 */
+      '?', /* U+CA89 */
+      '?', /* U+CA8A */
+      '?', /* U+CA8B */
+      '?', /* U+CA8C */
+      '?', /* U+CA8D */
+      '?', /* U+CA8E */
+      '?', /* U+CA8F */
+      '?', /* U+CA90 */
+      '?', /* U+CA91 */
+      '?', /* U+CA92 */
+      '?', /* U+CA93 */
+      '?', /* U+CA94 */
+      '?', /* U+CA95 */
+      '?', /* U+CA96 */
+      '?', /* U+CA97 */
+      '?', /* U+CA98 */
+      '?', /* U+CA99 */
+      '?', /* U+CA9A */
+      '?', /* U+CA9B */
+      '?', /* U+CA9C */
+      '?', /* U+CA9D */
+      '?', /* U+CA9E */
+      '?', /* U+CA9F */
+      '?', /* U+CAA0 */
+      '?', /* U+CAA1 */
+      '?', /* U+CAA2 */
+      '?', /* U+CAA3 */
+      '?', /* U+CAA4 */
+      '?', /* U+CAA5 */
+      '?', /* U+CAA6 */
+      '?', /* U+CAA7 */
+      '?', /* U+CAA8 */
+      '?', /* U+CAA9 */
+      '?', /* U+CAAA */
+      '?', /* U+CAAB */
+      '?', /* U+CAAC */
+      '?', /* U+CAAD */
+      '?', /* U+CAAE */
+      '?', /* U+CAAF */
+      '?', /* U+CAB0 */
+      '?', /* U+CAB1 */
+      '?', /* U+CAB2 */
+      '?', /* U+CAB3 */
+      '?', /* U+CAB4 */
+      '?', /* U+CAB5 */
+      '?', /* U+CAB6 */
+      '?', /* U+CAB7 */
+      '?', /* U+CAB8 */
+      '?', /* U+CAB9 */
+      '?', /* U+CABA */
+      '?', /* U+CABB */
+      '?', /* U+CABC */
+      '?', /* U+CABD */
+      '?', /* U+CABE */
+      '?', /* U+CABF */
+      '?', /* U+CAC0 */
+      '?', /* U+CAC1 */
+      '?', /* U+CAC2 */
+      '?', /* U+CAC3 */
+      '?', /* U+CAC4 */
+      '?', /* U+CAC5 */
+      '?', /* U+CAC6 */
+      '?', /* U+CAC7 */
+      '?', /* U+CAC8 */
+      '?', /* U+CAC9 */
+      '?', /* U+CACA */
+      '?', /* U+CACB */
+      '?', /* U+CACC */
+      '?', /* U+CACD */
+      '?', /* U+CACE */
+      '?', /* U+CACF */
+      '?', /* U+CAD0 */
+      '?', /* U+CAD1 */
+      '?', /* U+CAD2 */
+      '?', /* U+CAD3 */
+      '?', /* U+CAD4 */
+      '?', /* U+CAD5 */
+      '?', /* U+CAD6 */
+      '?', /* U+CAD7 */
+      '?', /* U+CAD8 */
+      '?', /* U+CAD9 */
+      '?', /* U+CADA */
+      '?', /* U+CADB */
+      '?', /* U+CADC */
+      '?', /* U+CADD */
+      '?', /* U+CADE */
+      '?', /* U+CADF */
+      '?', /* U+CAE0 */
+      '?', /* U+CAE1 */
+      '?', /* U+CAE2 */
+      '?', /* U+CAE3 */
+      '?', /* U+CAE4 */
+      '?', /* U+CAE5 */
+      '?', /* U+CAE6 */
+      '?', /* U+CAE7 */
+      '?', /* U+CAE8 */
+      '?', /* U+CAE9 */
+      '?', /* U+CAEA */
+      '?', /* U+CAEB */
+      '?', /* U+CAEC */
+      '?', /* U+CAED */
+      '?', /* U+CAEE */
+      '?', /* U+CAEF */
+      '?', /* U+CAF0 */
+      '?', /* U+CAF1 */
+      '?', /* U+CAF2 */
+      '?', /* U+CAF3 */
+      '?', /* U+CAF4 */
+      '?', /* U+CAF5 */
+      '?', /* U+CAF6 */
+      '?', /* U+CAF7 */
+      '?', /* U+CAF8 */
+      '?', /* U+CAF9 */
+      '?', /* U+CAFA */
+      '?', /* U+CAFB */
+      '?', /* U+CAFC */
+      '?', /* U+CAFD */
+      '?', /* U+CAFE */
+      '?', /* U+CAFF */
+      '?', /* U+CB00 */
+      '?', /* U+CB01 */
+      '?', /* U+CB02 */
+      '?', /* U+CB03 */
+      '?', /* U+CB04 */
+      '?', /* U+CB05 */
+      '?', /* U+CB06 */
+      '?', /* U+CB07 */
+      '?', /* U+CB08 */
+      '?', /* U+CB09 */
+      '?', /* U+CB0A */
+      '?', /* U+CB0B */
+      '?', /* U+CB0C */
+      '?', /* U+CB0D */
+      '?', /* U+CB0E */
+      '?', /* U+CB0F */
+      '?', /* U+CB10 */
+      '?', /* U+CB11 */
+      '?', /* U+CB12 */
+      '?', /* U+CB13 */
+      '?', /* U+CB14 */
+      '?', /* U+CB15 */
+      '?', /* U+CB16 */
+      '?', /* U+CB17 */
+      '?', /* U+CB18 */
+      '?', /* U+CB19 */
+      '?', /* U+CB1A */
+      '?', /* U+CB1B */
+      '?', /* U+CB1C */
+      '?', /* U+CB1D */
+      '?', /* U+CB1E */
+      '?', /* U+CB1F */
+      '?', /* U+CB20 */
+      '?', /* U+CB21 */
+      '?', /* U+CB22 */
+      '?', /* U+CB23 */
+      '?', /* U+CB24 */
+      '?', /* U+CB25 */
+      '?', /* U+CB26 */
+      '?', /* U+CB27 */
+      '?', /* U+CB28 */
+      '?', /* U+CB29 */
+      '?', /* U+CB2A */
+      '?', /* U+CB2B */
+      '?', /* U+CB2C */
+      '?', /* U+CB2D */
+      '?', /* U+CB2E */
+      '?', /* U+CB2F */
+      '?', /* U+CB30 */
+      '?', /* U+CB31 */
+      '?', /* U+CB32 */
+      '?', /* U+CB33 */
+      '?', /* U+CB34 */
+      '?', /* U+CB35 */
+      '?', /* U+CB36 */
+      '?', /* U+CB37 */
+      '?', /* U+CB38 */
+      '?', /* U+CB39 */
+      '?', /* U+CB3A */
+      '?', /* U+CB3B */
+      '?', /* U+CB3C */
+      '?', /* U+CB3D */
+      '?', /* U+CB3E */
+      '?', /* U+CB3F */
+      '?', /* U+CB40 */
+      '?', /* U+CB41 */
+      '?', /* U+CB42 */
+      '?', /* U+CB43 */
+      '?', /* U+CB44 */
+      '?', /* U+CB45 */
+      '?', /* U+CB46 */
+      '?', /* U+CB47 */
+      '?', /* U+CB48 */
+      '?', /* U+CB49 */
+      '?', /* U+CB4A */
+      '?', /* U+CB4B */
+      '?', /* U+CB4C */
+      '?', /* U+CB4D */
+      '?', /* U+CB4E */
+      '?', /* U+CB4F */
+      '?', /* U+CB50 */
+      '?', /* U+CB51 */
+      '?', /* U+CB52 */
+      '?', /* U+CB53 */
+      '?', /* U+CB54 */
+      '?', /* U+CB55 */
+      '?', /* U+CB56 */
+      '?', /* U+CB57 */
+      '?', /* U+CB58 */
+      '?', /* U+CB59 */
+      '?', /* U+CB5A */
+      '?', /* U+CB5B */
+      '?', /* U+CB5C */
+      '?', /* U+CB5D */
+      '?', /* U+CB5E */
+      '?', /* U+CB5F */
+      '?', /* U+CB60 */
+      '?', /* U+CB61 */
+      '?', /* U+CB62 */
+      '?', /* U+CB63 */
+      '?', /* U+CB64 */
+      '?', /* U+CB65 */
+      '?', /* U+CB66 */
+      '?', /* U+CB67 */
+      '?', /* U+CB68 */
+      '?', /* U+CB69 */
+      '?', /* U+CB6A */
+      '?', /* U+CB6B */
+      '?', /* U+CB6C */
+      '?', /* U+CB6D */
+      '?', /* U+CB6E */
+      '?', /* U+CB6F */
+      '?', /* U+CB70 */
+      '?', /* U+CB71 */
+      '?', /* U+CB72 */
+      '?', /* U+CB73 */
+      '?', /* U+CB74 */
+      '?', /* U+CB75 */
+      '?', /* U+CB76 */
+      '?', /* U+CB77 */
+      '?', /* U+CB78 */
+      '?', /* U+CB79 */
+      '?', /* U+CB7A */
+      '?', /* U+CB7B */
+      '?', /* U+CB7C */
+      '?', /* U+CB7D */
+      '?', /* U+CB7E */
+      '?', /* U+CB7F */
+      '?', /* U+CB80 */
+      '?', /* U+CB81 */
+      '?', /* U+CB82 */
+      '?', /* U+CB83 */
+      '?', /* U+CB84 */
+      '?', /* U+CB85 */
+      '?', /* U+CB86 */
+      '?', /* U+CB87 */
+      '?', /* U+CB88 */
+      '?', /* U+CB89 */
+      '?', /* U+CB8A */
+      '?', /* U+CB8B */
+      '?', /* U+CB8C */
+      '?', /* U+CB8D */
+      '?', /* U+CB8E */
+      '?', /* U+CB8F */
+      '?', /* U+CB90 */
+      '?', /* U+CB91 */
+      '?', /* U+CB92 */
+      '?', /* U+CB93 */
+      '?', /* U+CB94 */
+      '?', /* U+CB95 */
+      '?', /* U+CB96 */
+      '?', /* U+CB97 */
+      '?', /* U+CB98 */
+      '?', /* U+CB99 */
+      '?', /* U+CB9A */
+      '?', /* U+CB9B */
+      '?', /* U+CB9C */
+      '?', /* U+CB9D */
+      '?', /* U+CB9E */
+      '?', /* U+CB9F */
+      '?', /* U+CBA0 */
+      '?', /* U+CBA1 */
+      '?', /* U+CBA2 */
+      '?', /* U+CBA3 */
+      '?', /* U+CBA4 */
+      '?', /* U+CBA5 */
+      '?', /* U+CBA6 */
+      '?', /* U+CBA7 */
+      '?', /* U+CBA8 */
+      '?', /* U+CBA9 */
+      '?', /* U+CBAA */
+      '?', /* U+CBAB */
+      '?', /* U+CBAC */
+      '?', /* U+CBAD */
+      '?', /* U+CBAE */
+      '?', /* U+CBAF */
+      '?', /* U+CBB0 */
+      '?', /* U+CBB1 */
+      '?', /* U+CBB2 */
+      '?', /* U+CBB3 */
+      '?', /* U+CBB4 */
+      '?', /* U+CBB5 */
+      '?', /* U+CBB6 */
+      '?', /* U+CBB7 */
+      '?', /* U+CBB8 */
+      '?', /* U+CBB9 */
+      '?', /* U+CBBA */
+      '?', /* U+CBBB */
+      '?', /* U+CBBC */
+      '?', /* U+CBBD */
+      '?', /* U+CBBE */
+      '?', /* U+CBBF */
+      '?', /* U+CBC0 */
+      '?', /* U+CBC1 */
+      '?', /* U+CBC2 */
+      '?', /* U+CBC3 */
+      '?', /* U+CBC4 */
+      '?', /* U+CBC5 */
+      '?', /* U+CBC6 */
+      '?', /* U+CBC7 */
+      '?', /* U+CBC8 */
+      '?', /* U+CBC9 */
+      '?', /* U+CBCA */
+      '?', /* U+CBCB */
+      '?', /* U+CBCC */
+      '?', /* U+CBCD */
+      '?', /* U+CBCE */
+      '?', /* U+CBCF */
+      '?', /* U+CBD0 */
+      '?', /* U+CBD1 */
+      '?', /* U+CBD2 */
+      '?', /* U+CBD3 */
+      '?', /* U+CBD4 */
+      '?', /* U+CBD5 */
+      '?', /* U+CBD6 */
+      '?', /* U+CBD7 */
+      '?', /* U+CBD8 */
+      '?', /* U+CBD9 */
+      '?', /* U+CBDA */
+      '?', /* U+CBDB */
+      '?', /* U+CBDC */
+      '?', /* U+CBDD */
+      '?', /* U+CBDE */
+      '?', /* U+CBDF */
+      '?', /* U+CBE0 */
+      '?', /* U+CBE1 */
+      '?', /* U+CBE2 */
+      '?', /* U+CBE3 */
+      '?', /* U+CBE4 */
+      '?', /* U+CBE5 */
+      '?', /* U+CBE6 */
+      '?', /* U+CBE7 */
+      '?', /* U+CBE8 */
+      '?', /* U+CBE9 */
+      '?', /* U+CBEA */
+      '?', /* U+CBEB */
+      '?', /* U+CBEC */
+      '?', /* U+CBED */
+      '?', /* U+CBEE */
+      '?', /* U+CBEF */
+      '?', /* U+CBF0 */
+      '?', /* U+CBF1 */
+      '?', /* U+CBF2 */
+      '?', /* U+CBF3 */
+      '?', /* U+CBF4 */
+      '?', /* U+CBF5 */
+      '?', /* U+CBF6 */
+      '?', /* U+CBF7 */
+      '?', /* U+CBF8 */
+      '?', /* U+CBF9 */
+      '?', /* U+CBFA */
+      '?', /* U+CBFB */
+      '?', /* U+CBFC */
+      '?', /* U+CBFD */
+      '?', /* U+CBFE */
+      '?', /* U+CBFF */
+      '?', /* U+CC00 */
+      '?', /* U+CC01 */
+      '?', /* U+CC02 */
+      '?', /* U+CC03 */
+      '?', /* U+CC04 */
+      '?', /* U+CC05 */
+      '?', /* U+CC06 */
+      '?', /* U+CC07 */
+      '?', /* U+CC08 */
+      '?', /* U+CC09 */
+      '?', /* U+CC0A */
+      '?', /* U+CC0B */
+      '?', /* U+CC0C */
+      '?', /* U+CC0D */
+      '?', /* U+CC0E */
+      '?', /* U+CC0F */
+      '?', /* U+CC10 */
+      '?', /* U+CC11 */
+      '?', /* U+CC12 */
+      '?', /* U+CC13 */
+      '?', /* U+CC14 */
+      '?', /* U+CC15 */
+      '?', /* U+CC16 */
+      '?', /* U+CC17 */
+      '?', /* U+CC18 */
+      '?', /* U+CC19 */
+      '?', /* U+CC1A */
+      '?', /* U+CC1B */
+      '?', /* U+CC1C */
+      '?', /* U+CC1D */
+      '?', /* U+CC1E */
+      '?', /* U+CC1F */
+      '?', /* U+CC20 */
+      '?', /* U+CC21 */
+      '?', /* U+CC22 */
+      '?', /* U+CC23 */
+      '?', /* U+CC24 */
+      '?', /* U+CC25 */
+      '?', /* U+CC26 */
+      '?', /* U+CC27 */
+      '?', /* U+CC28 */
+      '?', /* U+CC29 */
+      '?', /* U+CC2A */
+      '?', /* U+CC2B */
+      '?', /* U+CC2C */
+      '?', /* U+CC2D */
+      '?', /* U+CC2E */
+      '?', /* U+CC2F */
+      '?', /* U+CC30 */
+      '?', /* U+CC31 */
+      '?', /* U+CC32 */
+      '?', /* U+CC33 */
+      '?', /* U+CC34 */
+      '?', /* U+CC35 */
+      '?', /* U+CC36 */
+      '?', /* U+CC37 */
+      '?', /* U+CC38 */
+      '?', /* U+CC39 */
+      '?', /* U+CC3A */
+      '?', /* U+CC3B */
+      '?', /* U+CC3C */
+      '?', /* U+CC3D */
+      '?', /* U+CC3E */
+      '?', /* U+CC3F */
+      '?', /* U+CC40 */
+      '?', /* U+CC41 */
+      '?', /* U+CC42 */
+      '?', /* U+CC43 */
+      '?', /* U+CC44 */
+      '?', /* U+CC45 */
+      '?', /* U+CC46 */
+      '?', /* U+CC47 */
+      '?', /* U+CC48 */
+      '?', /* U+CC49 */
+      '?', /* U+CC4A */
+      '?', /* U+CC4B */
+      '?', /* U+CC4C */
+      '?', /* U+CC4D */
+      '?', /* U+CC4E */
+      '?', /* U+CC4F */
+      '?', /* U+CC50 */
+      '?', /* U+CC51 */
+      '?', /* U+CC52 */
+      '?', /* U+CC53 */
+      '?', /* U+CC54 */
+      '?', /* U+CC55 */
+      '?', /* U+CC56 */
+      '?', /* U+CC57 */
+      '?', /* U+CC58 */
+      '?', /* U+CC59 */
+      '?', /* U+CC5A */
+      '?', /* U+CC5B */
+      '?', /* U+CC5C */
+      '?', /* U+CC5D */
+      '?', /* U+CC5E */
+      '?', /* U+CC5F */
+      '?', /* U+CC60 */
+      '?', /* U+CC61 */
+      '?', /* U+CC62 */
+      '?', /* U+CC63 */
+      '?', /* U+CC64 */
+      '?', /* U+CC65 */
+      '?', /* U+CC66 */
+      '?', /* U+CC67 */
+      '?', /* U+CC68 */
+      '?', /* U+CC69 */
+      '?', /* U+CC6A */
+      '?', /* U+CC6B */
+      '?', /* U+CC6C */
+      '?', /* U+CC6D */
+      '?', /* U+CC6E */
+      '?', /* U+CC6F */
+      '?', /* U+CC70 */
+      '?', /* U+CC71 */
+      '?', /* U+CC72 */
+      '?', /* U+CC73 */
+      '?', /* U+CC74 */
+      '?', /* U+CC75 */
+      '?', /* U+CC76 */
+      '?', /* U+CC77 */
+      '?', /* U+CC78 */
+      '?', /* U+CC79 */
+      '?', /* U+CC7A */
+      '?', /* U+CC7B */
+      '?', /* U+CC7C */
+      '?', /* U+CC7D */
+      '?', /* U+CC7E */
+      '?', /* U+CC7F */
+      '?', /* U+CC80 */
+      '?', /* U+CC81 */
+      '?', /* U+CC82 */
+      '?', /* U+CC83 */
+      '?', /* U+CC84 */
+      '?', /* U+CC85 */
+      '?', /* U+CC86 */
+      '?', /* U+CC87 */
+      '?', /* U+CC88 */
+      '?', /* U+CC89 */
+      '?', /* U+CC8A */
+      '?', /* U+CC8B */
+      '?', /* U+CC8C */
+      '?', /* U+CC8D */
+      '?', /* U+CC8E */
+      '?', /* U+CC8F */
+      '?', /* U+CC90 */
+      '?', /* U+CC91 */
+      '?', /* U+CC92 */
+      '?', /* U+CC93 */
+      '?', /* U+CC94 */
+      '?', /* U+CC95 */
+      '?', /* U+CC96 */
+      '?', /* U+CC97 */
+      '?', /* U+CC98 */
+      '?', /* U+CC99 */
+      '?', /* U+CC9A */
+      '?', /* U+CC9B */
+      '?', /* U+CC9C */
+      '?', /* U+CC9D */
+      '?', /* U+CC9E */
+      '?', /* U+CC9F */
+      '?', /* U+CCA0 */
+      '?', /* U+CCA1 */
+      '?', /* U+CCA2 */
+      '?', /* U+CCA3 */
+      '?', /* U+CCA4 */
+      '?', /* U+CCA5 */
+      '?', /* U+CCA6 */
+      '?', /* U+CCA7 */
+      '?', /* U+CCA8 */
+      '?', /* U+CCA9 */
+      '?', /* U+CCAA */
+      '?', /* U+CCAB */
+      '?', /* U+CCAC */
+      '?', /* U+CCAD */
+      '?', /* U+CCAE */
+      '?', /* U+CCAF */
+      '?', /* U+CCB0 */
+      '?', /* U+CCB1 */
+      '?', /* U+CCB2 */
+      '?', /* U+CCB3 */
+      '?', /* U+CCB4 */
+      '?', /* U+CCB5 */
+      '?', /* U+CCB6 */
+      '?', /* U+CCB7 */
+      '?', /* U+CCB8 */
+      '?', /* U+CCB9 */
+      '?', /* U+CCBA */
+      '?', /* U+CCBB */
+      '?', /* U+CCBC */
+      '?', /* U+CCBD */
+      '?', /* U+CCBE */
+      '?', /* U+CCBF */
+      '?', /* U+CCC0 */
+      '?', /* U+CCC1 */
+      '?', /* U+CCC2 */
+      '?', /* U+CCC3 */
+      '?', /* U+CCC4 */
+      '?', /* U+CCC5 */
+      '?', /* U+CCC6 */
+      '?', /* U+CCC7 */
+      '?', /* U+CCC8 */
+      '?', /* U+CCC9 */
+      '?', /* U+CCCA */
+      '?', /* U+CCCB */
+      '?', /* U+CCCC */
+      '?', /* U+CCCD */
+      '?', /* U+CCCE */
+      '?', /* U+CCCF */
+      '?', /* U+CCD0 */
+      '?', /* U+CCD1 */
+      '?', /* U+CCD2 */
+      '?', /* U+CCD3 */
+      '?', /* U+CCD4 */
+      '?', /* U+CCD5 */
+      '?', /* U+CCD6 */
+      '?', /* U+CCD7 */
+      '?', /* U+CCD8 */
+      '?', /* U+CCD9 */
+      '?', /* U+CCDA */
+      '?', /* U+CCDB */
+      '?', /* U+CCDC */
+      '?', /* U+CCDD */
+      '?', /* U+CCDE */
+      '?', /* U+CCDF */
+      '?', /* U+CCE0 */
+      '?', /* U+CCE1 */
+      '?', /* U+CCE2 */
+      '?', /* U+CCE3 */
+      '?', /* U+CCE4 */
+      '?', /* U+CCE5 */
+      '?', /* U+CCE6 */
+      '?', /* U+CCE7 */
+      '?', /* U+CCE8 */
+      '?', /* U+CCE9 */
+      '?', /* U+CCEA */
+      '?', /* U+CCEB */
+      '?', /* U+CCEC */
+      '?', /* U+CCED */
+      '?', /* U+CCEE */
+      '?', /* U+CCEF */
+      '?', /* U+CCF0 */
+      '?', /* U+CCF1 */
+      '?', /* U+CCF2 */
+      '?', /* U+CCF3 */
+      '?', /* U+CCF4 */
+      '?', /* U+CCF5 */
+      '?', /* U+CCF6 */
+      '?', /* U+CCF7 */
+      '?', /* U+CCF8 */
+      '?', /* U+CCF9 */
+      '?', /* U+CCFA */
+      '?', /* U+CCFB */
+      '?', /* U+CCFC */
+      '?', /* U+CCFD */
+      '?', /* U+CCFE */
+      '?', /* U+CCFF */
+      '?', /* U+CD00 */
+      '?', /* U+CD01 */
+      '?', /* U+CD02 */
+      '?', /* U+CD03 */
+      '?', /* U+CD04 */
+      '?', /* U+CD05 */
+      '?', /* U+CD06 */
+      '?', /* U+CD07 */
+      '?', /* U+CD08 */
+      '?', /* U+CD09 */
+      '?', /* U+CD0A */
+      '?', /* U+CD0B */
+      '?', /* U+CD0C */
+      '?', /* U+CD0D */
+      '?', /* U+CD0E */
+      '?', /* U+CD0F */
+      '?', /* U+CD10 */
+      '?', /* U+CD11 */
+      '?', /* U+CD12 */
+      '?', /* U+CD13 */
+      '?', /* U+CD14 */
+      '?', /* U+CD15 */
+      '?', /* U+CD16 */
+      '?', /* U+CD17 */
+      '?', /* U+CD18 */
+      '?', /* U+CD19 */
+      '?', /* U+CD1A */
+      '?', /* U+CD1B */
+      '?', /* U+CD1C */
+      '?', /* U+CD1D */
+      '?', /* U+CD1E */
+      '?', /* U+CD1F */
+      '?', /* U+CD20 */
+      '?', /* U+CD21 */
+      '?', /* U+CD22 */
+      '?', /* U+CD23 */
+      '?', /* U+CD24 */
+      '?', /* U+CD25 */
+      '?', /* U+CD26 */
+      '?', /* U+CD27 */
+      '?', /* U+CD28 */
+      '?', /* U+CD29 */
+      '?', /* U+CD2A */
+      '?', /* U+CD2B */
+      '?', /* U+CD2C */
+      '?', /* U+CD2D */
+      '?', /* U+CD2E */
+      '?', /* U+CD2F */
+      '?', /* U+CD30 */
+      '?', /* U+CD31 */
+      '?', /* U+CD32 */
+      '?', /* U+CD33 */
+      '?', /* U+CD34 */
+      '?', /* U+CD35 */
+      '?', /* U+CD36 */
+      '?', /* U+CD37 */
+      '?', /* U+CD38 */
+      '?', /* U+CD39 */
+      '?', /* U+CD3A */
+      '?', /* U+CD3B */
+      '?', /* U+CD3C */
+      '?', /* U+CD3D */
+      '?', /* U+CD3E */
+      '?', /* U+CD3F */
+      '?', /* U+CD40 */
+      '?', /* U+CD41 */
+      '?', /* U+CD42 */
+      '?', /* U+CD43 */
+      '?', /* U+CD44 */
+      '?', /* U+CD45 */
+      '?', /* U+CD46 */
+      '?', /* U+CD47 */
+      '?', /* U+CD48 */
+      '?', /* U+CD49 */
+      '?', /* U+CD4A */
+      '?', /* U+CD4B */
+      '?', /* U+CD4C */
+      '?', /* U+CD4D */
+      '?', /* U+CD4E */
+      '?', /* U+CD4F */
+      '?', /* U+CD50 */
+      '?', /* U+CD51 */
+      '?', /* U+CD52 */
+      '?', /* U+CD53 */
+      '?', /* U+CD54 */
+      '?', /* U+CD55 */
+      '?', /* U+CD56 */
+      '?', /* U+CD57 */
+      '?', /* U+CD58 */
+      '?', /* U+CD59 */
+      '?', /* U+CD5A */
+      '?', /* U+CD5B */
+      '?', /* U+CD5C */
+      '?', /* U+CD5D */
+      '?', /* U+CD5E */
+      '?', /* U+CD5F */
+      '?', /* U+CD60 */
+      '?', /* U+CD61 */
+      '?', /* U+CD62 */
+      '?', /* U+CD63 */
+      '?', /* U+CD64 */
+      '?', /* U+CD65 */
+      '?', /* U+CD66 */
+      '?', /* U+CD67 */
+      '?', /* U+CD68 */
+      '?', /* U+CD69 */
+      '?', /* U+CD6A */
+      '?', /* U+CD6B */
+      '?', /* U+CD6C */
+      '?', /* U+CD6D */
+      '?', /* U+CD6E */
+      '?', /* U+CD6F */
+      '?', /* U+CD70 */
+      '?', /* U+CD71 */
+      '?', /* U+CD72 */
+      '?', /* U+CD73 */
+      '?', /* U+CD74 */
+      '?', /* U+CD75 */
+      '?', /* U+CD76 */
+      '?', /* U+CD77 */
+      '?', /* U+CD78 */
+      '?', /* U+CD79 */
+      '?', /* U+CD7A */
+      '?', /* U+CD7B */
+      '?', /* U+CD7C */
+      '?', /* U+CD7D */
+      '?', /* U+CD7E */
+      '?', /* U+CD7F */
+      '?', /* U+CD80 */
+      '?', /* U+CD81 */
+      '?', /* U+CD82 */
+      '?', /* U+CD83 */
+      '?', /* U+CD84 */
+      '?', /* U+CD85 */
+      '?', /* U+CD86 */
+      '?', /* U+CD87 */
+      '?', /* U+CD88 */
+      '?', /* U+CD89 */
+      '?', /* U+CD8A */
+      '?', /* U+CD8B */
+      '?', /* U+CD8C */
+      '?', /* U+CD8D */
+      '?', /* U+CD8E */
+      '?', /* U+CD8F */
+      '?', /* U+CD90 */
+      '?', /* U+CD91 */
+      '?', /* U+CD92 */
+      '?', /* U+CD93 */
+      '?', /* U+CD94 */
+      '?', /* U+CD95 */
+      '?', /* U+CD96 */
+      '?', /* U+CD97 */
+      '?', /* U+CD98 */
+      '?', /* U+CD99 */
+      '?', /* U+CD9A */
+      '?', /* U+CD9B */
+      '?', /* U+CD9C */
+      '?', /* U+CD9D */
+      '?', /* U+CD9E */
+      '?', /* U+CD9F */
+      '?', /* U+CDA0 */
+      '?', /* U+CDA1 */
+      '?', /* U+CDA2 */
+      '?', /* U+CDA3 */
+      '?', /* U+CDA4 */
+      '?', /* U+CDA5 */
+      '?', /* U+CDA6 */
+      '?', /* U+CDA7 */
+      '?', /* U+CDA8 */
+      '?', /* U+CDA9 */
+      '?', /* U+CDAA */
+      '?', /* U+CDAB */
+      '?', /* U+CDAC */
+      '?', /* U+CDAD */
+      '?', /* U+CDAE */
+      '?', /* U+CDAF */
+      '?', /* U+CDB0 */
+      '?', /* U+CDB1 */
+      '?', /* U+CDB2 */
+      '?', /* U+CDB3 */
+      '?', /* U+CDB4 */
+      '?', /* U+CDB5 */
+      '?', /* U+CDB6 */
+      '?', /* U+CDB7 */
+      '?', /* U+CDB8 */
+      '?', /* U+CDB9 */
+      '?', /* U+CDBA */
+      '?', /* U+CDBB */
+      '?', /* U+CDBC */
+      '?', /* U+CDBD */
+      '?', /* U+CDBE */
+      '?', /* U+CDBF */
+      '?', /* U+CDC0 */
+      '?', /* U+CDC1 */
+      '?', /* U+CDC2 */
+      '?', /* U+CDC3 */
+      '?', /* U+CDC4 */
+      '?', /* U+CDC5 */
+      '?', /* U+CDC6 */
+      '?', /* U+CDC7 */
+      '?', /* U+CDC8 */
+      '?', /* U+CDC9 */
+      '?', /* U+CDCA */
+      '?', /* U+CDCB */
+      '?', /* U+CDCC */
+      '?', /* U+CDCD */
+      '?', /* U+CDCE */
+      '?', /* U+CDCF */
+      '?', /* U+CDD0 */
+      '?', /* U+CDD1 */
+      '?', /* U+CDD2 */
+      '?', /* U+CDD3 */
+      '?', /* U+CDD4 */
+      '?', /* U+CDD5 */
+      '?', /* U+CDD6 */
+      '?', /* U+CDD7 */
+      '?', /* U+CDD8 */
+      '?', /* U+CDD9 */
+      '?', /* U+CDDA */
+      '?', /* U+CDDB */
+      '?', /* U+CDDC */
+      '?', /* U+CDDD */
+      '?', /* U+CDDE */
+      '?', /* U+CDDF */
+      '?', /* U+CDE0 */
+      '?', /* U+CDE1 */
+      '?', /* U+CDE2 */
+      '?', /* U+CDE3 */
+      '?', /* U+CDE4 */
+      '?', /* U+CDE5 */
+      '?', /* U+CDE6 */
+      '?', /* U+CDE7 */
+      '?', /* U+CDE8 */
+      '?', /* U+CDE9 */
+      '?', /* U+CDEA */
+      '?', /* U+CDEB */
+      '?', /* U+CDEC */
+      '?', /* U+CDED */
+      '?', /* U+CDEE */
+      '?', /* U+CDEF */
+      '?', /* U+CDF0 */
+      '?', /* U+CDF1 */
+      '?', /* U+CDF2 */
+      '?', /* U+CDF3 */
+      '?', /* U+CDF4 */
+      '?', /* U+CDF5 */
+      '?', /* U+CDF6 */
+      '?', /* U+CDF7 */
+      '?', /* U+CDF8 */
+      '?', /* U+CDF9 */
+      '?', /* U+CDFA */
+      '?', /* U+CDFB */
+      '?', /* U+CDFC */
+      '?', /* U+CDFD */
+      '?', /* U+CDFE */
+      '?', /* U+CDFF */
+      '?', /* U+CE00 */
+      '?', /* U+CE01 */
+      '?', /* U+CE02 */
+      '?', /* U+CE03 */
+      '?', /* U+CE04 */
+      '?', /* U+CE05 */
+      '?', /* U+CE06 */
+      '?', /* U+CE07 */
+      '?', /* U+CE08 */
+      '?', /* U+CE09 */
+      '?', /* U+CE0A */
+      '?', /* U+CE0B */
+      '?', /* U+CE0C */
+      '?', /* U+CE0D */
+      '?', /* U+CE0E */
+      '?', /* U+CE0F */
+      '?', /* U+CE10 */
+      '?', /* U+CE11 */
+      '?', /* U+CE12 */
+      '?', /* U+CE13 */
+      '?', /* U+CE14 */
+      '?', /* U+CE15 */
+      '?', /* U+CE16 */
+      '?', /* U+CE17 */
+      '?', /* U+CE18 */
+      '?', /* U+CE19 */
+      '?', /* U+CE1A */
+      '?', /* U+CE1B */
+      '?', /* U+CE1C */
+      '?', /* U+CE1D */
+      '?', /* U+CE1E */
+      '?', /* U+CE1F */
+      '?', /* U+CE20 */
+      '?', /* U+CE21 */
+      '?', /* U+CE22 */
+      '?', /* U+CE23 */
+      '?', /* U+CE24 */
+      '?', /* U+CE25 */
+      '?', /* U+CE26 */
+      '?', /* U+CE27 */
+      '?', /* U+CE28 */
+      '?', /* U+CE29 */
+      '?', /* U+CE2A */
+      '?', /* U+CE2B */
+      '?', /* U+CE2C */
+      '?', /* U+CE2D */
+      '?', /* U+CE2E */
+      '?', /* U+CE2F */
+      '?', /* U+CE30 */
+      '?', /* U+CE31 */
+      '?', /* U+CE32 */
+      '?', /* U+CE33 */
+      '?', /* U+CE34 */
+      '?', /* U+CE35 */
+      '?', /* U+CE36 */
+      '?', /* U+CE37 */
+      '?', /* U+CE38 */
+      '?', /* U+CE39 */
+      '?', /* U+CE3A */
+      '?', /* U+CE3B */
+      '?', /* U+CE3C */
+      '?', /* U+CE3D */
+      '?', /* U+CE3E */
+      '?', /* U+CE3F */
+      '?', /* U+CE40 */
+      '?', /* U+CE41 */
+      '?', /* U+CE42 */
+      '?', /* U+CE43 */
+      '?', /* U+CE44 */
+      '?', /* U+CE45 */
+      '?', /* U+CE46 */
+      '?', /* U+CE47 */
+      '?', /* U+CE48 */
+      '?', /* U+CE49 */
+      '?', /* U+CE4A */
+      '?', /* U+CE4B */
+      '?', /* U+CE4C */
+      '?', /* U+CE4D */
+      '?', /* U+CE4E */
+      '?', /* U+CE4F */
+      '?', /* U+CE50 */
+      '?', /* U+CE51 */
+      '?', /* U+CE52 */
+      '?', /* U+CE53 */
+      '?', /* U+CE54 */
+      '?', /* U+CE55 */
+      '?', /* U+CE56 */
+      '?', /* U+CE57 */
+      '?', /* U+CE58 */
+      '?', /* U+CE59 */
+      '?', /* U+CE5A */
+      '?', /* U+CE5B */
+      '?', /* U+CE5C */
+      '?', /* U+CE5D */
+      '?', /* U+CE5E */
+      '?', /* U+CE5F */
+      '?', /* U+CE60 */
+      '?', /* U+CE61 */
+      '?', /* U+CE62 */
+      '?', /* U+CE63 */
+      '?', /* U+CE64 */
+      '?', /* U+CE65 */
+      '?', /* U+CE66 */
+      '?', /* U+CE67 */
+      '?', /* U+CE68 */
+      '?', /* U+CE69 */
+      '?', /* U+CE6A */
+      '?', /* U+CE6B */
+      '?', /* U+CE6C */
+      '?', /* U+CE6D */
+      '?', /* U+CE6E */
+      '?', /* U+CE6F */
+      '?', /* U+CE70 */
+      '?', /* U+CE71 */
+      '?', /* U+CE72 */
+      '?', /* U+CE73 */
+      '?', /* U+CE74 */
+      '?', /* U+CE75 */
+      '?', /* U+CE76 */
+      '?', /* U+CE77 */
+      '?', /* U+CE78 */
+      '?', /* U+CE79 */
+      '?', /* U+CE7A */
+      '?', /* U+CE7B */
+      '?', /* U+CE7C */
+      '?', /* U+CE7D */
+      '?', /* U+CE7E */
+      '?', /* U+CE7F */
+      '?', /* U+CE80 */
+      '?', /* U+CE81 */
+      '?', /* U+CE82 */
+      '?', /* U+CE83 */
+      '?', /* U+CE84 */
+      '?', /* U+CE85 */
+      '?', /* U+CE86 */
+      '?', /* U+CE87 */
+      '?', /* U+CE88 */
+      '?', /* U+CE89 */
+      '?', /* U+CE8A */
+      '?', /* U+CE8B */
+      '?', /* U+CE8C */
+      '?', /* U+CE8D */
+      '?', /* U+CE8E */
+      '?', /* U+CE8F */
+      '?', /* U+CE90 */
+      '?', /* U+CE91 */
+      '?', /* U+CE92 */
+      '?', /* U+CE93 */
+      '?', /* U+CE94 */
+      '?', /* U+CE95 */
+      '?', /* U+CE96 */
+      '?', /* U+CE97 */
+      '?', /* U+CE98 */
+      '?', /* U+CE99 */
+      '?', /* U+CE9A */
+      '?', /* U+CE9B */
+      '?', /* U+CE9C */
+      '?', /* U+CE9D */
+      '?', /* U+CE9E */
+      '?', /* U+CE9F */
+      '?', /* U+CEA0 */
+      '?', /* U+CEA1 */
+      '?', /* U+CEA2 */
+      '?', /* U+CEA3 */
+      '?', /* U+CEA4 */
+      '?', /* U+CEA5 */
+      '?', /* U+CEA6 */
+      '?', /* U+CEA7 */
+      '?', /* U+CEA8 */
+      '?', /* U+CEA9 */
+      '?', /* U+CEAA */
+      '?', /* U+CEAB */
+      '?', /* U+CEAC */
+      '?', /* U+CEAD */
+      '?', /* U+CEAE */
+      '?', /* U+CEAF */
+      '?', /* U+CEB0 */
+      '?', /* U+CEB1 */
+      '?', /* U+CEB2 */
+      '?', /* U+CEB3 */
+      '?', /* U+CEB4 */
+      '?', /* U+CEB5 */
+      '?', /* U+CEB6 */
+      '?', /* U+CEB7 */
+      '?', /* U+CEB8 */
+      '?', /* U+CEB9 */
+      '?', /* U+CEBA */
+      '?', /* U+CEBB */
+      '?', /* U+CEBC */
+      '?', /* U+CEBD */
+      '?', /* U+CEBE */
+      '?', /* U+CEBF */
+      '?', /* U+CEC0 */
+      '?', /* U+CEC1 */
+      '?', /* U+CEC2 */
+      '?', /* U+CEC3 */
+      '?', /* U+CEC4 */
+      '?', /* U+CEC5 */
+      '?', /* U+CEC6 */
+      '?', /* U+CEC7 */
+      '?', /* U+CEC8 */
+      '?', /* U+CEC9 */
+      '?', /* U+CECA */
+      '?', /* U+CECB */
+      '?', /* U+CECC */
+      '?', /* U+CECD */
+      '?', /* U+CECE */
+      '?', /* U+CECF */
+      '?', /* U+CED0 */
+      '?', /* U+CED1 */
+      '?', /* U+CED2 */
+      '?', /* U+CED3 */
+      '?', /* U+CED4 */
+      '?', /* U+CED5 */
+      '?', /* U+CED6 */
+      '?', /* U+CED7 */
+      '?', /* U+CED8 */
+      '?', /* U+CED9 */
+      '?', /* U+CEDA */
+      '?', /* U+CEDB */
+      '?', /* U+CEDC */
+      '?', /* U+CEDD */
+      '?', /* U+CEDE */
+      '?', /* U+CEDF */
+      '?', /* U+CEE0 */
+      '?', /* U+CEE1 */
+      '?', /* U+CEE2 */
+      '?', /* U+CEE3 */
+      '?', /* U+CEE4 */
+      '?', /* U+CEE5 */
+      '?', /* U+CEE6 */
+      '?', /* U+CEE7 */
+      '?', /* U+CEE8 */
+      '?', /* U+CEE9 */
+      '?', /* U+CEEA */
+      '?', /* U+CEEB */
+      '?', /* U+CEEC */
+      '?', /* U+CEED */
+      '?', /* U+CEEE */
+      '?', /* U+CEEF */
+      '?', /* U+CEF0 */
+      '?', /* U+CEF1 */
+      '?', /* U+CEF2 */
+      '?', /* U+CEF3 */
+      '?', /* U+CEF4 */
+      '?', /* U+CEF5 */
+      '?', /* U+CEF6 */
+      '?', /* U+CEF7 */
+      '?', /* U+CEF8 */
+      '?', /* U+CEF9 */
+      '?', /* U+CEFA */
+      '?', /* U+CEFB */
+      '?', /* U+CEFC */
+      '?', /* U+CEFD */
+      '?', /* U+CEFE */
+      '?', /* U+CEFF */
+      '?', /* U+CF00 */
+      '?', /* U+CF01 */
+      '?', /* U+CF02 */
+      '?', /* U+CF03 */
+      '?', /* U+CF04 */
+      '?', /* U+CF05 */
+      '?', /* U+CF06 */
+      '?', /* U+CF07 */
+      '?', /* U+CF08 */
+      '?', /* U+CF09 */
+      '?', /* U+CF0A */
+      '?', /* U+CF0B */
+      '?', /* U+CF0C */
+      '?', /* U+CF0D */
+      '?', /* U+CF0E */
+      '?', /* U+CF0F */
+      '?', /* U+CF10 */
+      '?', /* U+CF11 */
+      '?', /* U+CF12 */
+      '?', /* U+CF13 */
+      '?', /* U+CF14 */
+      '?', /* U+CF15 */
+      '?', /* U+CF16 */
+      '?', /* U+CF17 */
+      '?', /* U+CF18 */
+      '?', /* U+CF19 */
+      '?', /* U+CF1A */
+      '?', /* U+CF1B */
+      '?', /* U+CF1C */
+      '?', /* U+CF1D */
+      '?', /* U+CF1E */
+      '?', /* U+CF1F */
+      '?', /* U+CF20 */
+      '?', /* U+CF21 */
+      '?', /* U+CF22 */
+      '?', /* U+CF23 */
+      '?', /* U+CF24 */
+      '?', /* U+CF25 */
+      '?', /* U+CF26 */
+      '?', /* U+CF27 */
+      '?', /* U+CF28 */
+      '?', /* U+CF29 */
+      '?', /* U+CF2A */
+      '?', /* U+CF2B */
+      '?', /* U+CF2C */
+      '?', /* U+CF2D */
+      '?', /* U+CF2E */
+      '?', /* U+CF2F */
+      '?', /* U+CF30 */
+      '?', /* U+CF31 */
+      '?', /* U+CF32 */
+      '?', /* U+CF33 */
+      '?', /* U+CF34 */
+      '?', /* U+CF35 */
+      '?', /* U+CF36 */
+      '?', /* U+CF37 */
+      '?', /* U+CF38 */
+      '?', /* U+CF39 */
+      '?', /* U+CF3A */
+      '?', /* U+CF3B */
+      '?', /* U+CF3C */
+      '?', /* U+CF3D */
+      '?', /* U+CF3E */
+      '?', /* U+CF3F */
+      '?', /* U+CF40 */
+      '?', /* U+CF41 */
+      '?', /* U+CF42 */
+      '?', /* U+CF43 */
+      '?', /* U+CF44 */
+      '?', /* U+CF45 */
+      '?', /* U+CF46 */
+      '?', /* U+CF47 */
+      '?', /* U+CF48 */
+      '?', /* U+CF49 */
+      '?', /* U+CF4A */
+      '?', /* U+CF4B */
+      '?', /* U+CF4C */
+      '?', /* U+CF4D */
+      '?', /* U+CF4E */
+      '?', /* U+CF4F */
+      '?', /* U+CF50 */
+      '?', /* U+CF51 */
+      '?', /* U+CF52 */
+      '?', /* U+CF53 */
+      '?', /* U+CF54 */
+      '?', /* U+CF55 */
+      '?', /* U+CF56 */
+      '?', /* U+CF57 */
+      '?', /* U+CF58 */
+      '?', /* U+CF59 */
+      '?', /* U+CF5A */
+      '?', /* U+CF5B */
+      '?', /* U+CF5C */
+      '?', /* U+CF5D */
+      '?', /* U+CF5E */
+      '?', /* U+CF5F */
+      '?', /* U+CF60 */
+      '?', /* U+CF61 */
+      '?', /* U+CF62 */
+      '?', /* U+CF63 */
+      '?', /* U+CF64 */
+      '?', /* U+CF65 */
+      '?', /* U+CF66 */
+      '?', /* U+CF67 */
+      '?', /* U+CF68 */
+      '?', /* U+CF69 */
+      '?', /* U+CF6A */
+      '?', /* U+CF6B */
+      '?', /* U+CF6C */
+      '?', /* U+CF6D */
+      '?', /* U+CF6E */
+      '?', /* U+CF6F */
+      '?', /* U+CF70 */
+      '?', /* U+CF71 */
+      '?', /* U+CF72 */
+      '?', /* U+CF73 */
+      '?', /* U+CF74 */
+      '?', /* U+CF75 */
+      '?', /* U+CF76 */
+      '?', /* U+CF77 */
+      '?', /* U+CF78 */
+      '?', /* U+CF79 */
+      '?', /* U+CF7A */
+      '?', /* U+CF7B */
+      '?', /* U+CF7C */
+      '?', /* U+CF7D */
+      '?', /* U+CF7E */
+      '?', /* U+CF7F */
+      '?', /* U+CF80 */
+      '?', /* U+CF81 */
+      '?', /* U+CF82 */
+      '?', /* U+CF83 */
+      '?', /* U+CF84 */
+      '?', /* U+CF85 */
+      '?', /* U+CF86 */
+      '?', /* U+CF87 */
+      '?', /* U+CF88 */
+      '?', /* U+CF89 */
+      '?', /* U+CF8A */
+      '?', /* U+CF8B */
+      '?', /* U+CF8C */
+      '?', /* U+CF8D */
+      '?', /* U+CF8E */
+      '?', /* U+CF8F */
+      '?', /* U+CF90 */
+      '?', /* U+CF91 */
+      '?', /* U+CF92 */
+      '?', /* U+CF93 */
+      '?', /* U+CF94 */
+      '?', /* U+CF95 */
+      '?', /* U+CF96 */
+      '?', /* U+CF97 */
+      '?', /* U+CF98 */
+      '?', /* U+CF99 */
+      '?', /* U+CF9A */
+      '?', /* U+CF9B */
+      '?', /* U+CF9C */
+      '?', /* U+CF9D */
+      '?', /* U+CF9E */
+      '?', /* U+CF9F */
+      '?', /* U+CFA0 */
+      '?', /* U+CFA1 */
+      '?', /* U+CFA2 */
+      '?', /* U+CFA3 */
+      '?', /* U+CFA4 */
+      '?', /* U+CFA5 */
+      '?', /* U+CFA6 */
+      '?', /* U+CFA7 */
+      '?', /* U+CFA8 */
+      '?', /* U+CFA9 */
+      '?', /* U+CFAA */
+      '?', /* U+CFAB */
+      '?', /* U+CFAC */
+      '?', /* U+CFAD */
+      '?', /* U+CFAE */
+      '?', /* U+CFAF */
+      '?', /* U+CFB0 */
+      '?', /* U+CFB1 */
+      '?', /* U+CFB2 */
+      '?', /* U+CFB3 */
+      '?', /* U+CFB4 */
+      '?', /* U+CFB5 */
+      '?', /* U+CFB6 */
+      '?', /* U+CFB7 */
+      '?', /* U+CFB8 */
+      '?', /* U+CFB9 */
+      '?', /* U+CFBA */
+      '?', /* U+CFBB */
+      '?', /* U+CFBC */
+      '?', /* U+CFBD */
+      '?', /* U+CFBE */
+      '?', /* U+CFBF */
+      '?', /* U+CFC0 */
+      '?', /* U+CFC1 */
+      '?', /* U+CFC2 */
+      '?', /* U+CFC3 */
+      '?', /* U+CFC4 */
+      '?', /* U+CFC5 */
+      '?', /* U+CFC6 */
+      '?', /* U+CFC7 */
+      '?', /* U+CFC8 */
+      '?', /* U+CFC9 */
+      '?', /* U+CFCA */
+      '?', /* U+CFCB */
+      '?', /* U+CFCC */
+      '?', /* U+CFCD */
+      '?', /* U+CFCE */
+      '?', /* U+CFCF */
+      '?', /* U+CFD0 */
+      '?', /* U+CFD1 */
+      '?', /* U+CFD2 */
+      '?', /* U+CFD3 */
+      '?', /* U+CFD4 */
+      '?', /* U+CFD5 */
+      '?', /* U+CFD6 */
+      '?', /* U+CFD7 */
+      '?', /* U+CFD8 */
+      '?', /* U+CFD9 */
+      '?', /* U+CFDA */
+      '?', /* U+CFDB */
+      '?', /* U+CFDC */
+      '?', /* U+CFDD */
+      '?', /* U+CFDE */
+      '?', /* U+CFDF */
+      '?', /* U+CFE0 */
+      '?', /* U+CFE1 */
+      '?', /* U+CFE2 */
+      '?', /* U+CFE3 */
+      '?', /* U+CFE4 */
+      '?', /* U+CFE5 */
+      '?', /* U+CFE6 */
+      '?', /* U+CFE7 */
+      '?', /* U+CFE8 */
+      '?', /* U+CFE9 */
+      '?', /* U+CFEA */
+      '?', /* U+CFEB */
+      '?', /* U+CFEC */
+      '?', /* U+CFED */
+      '?', /* U+CFEE */
+      '?', /* U+CFEF */
+      '?', /* U+CFF0 */
+      '?', /* U+CFF1 */
+      '?', /* U+CFF2 */
+      '?', /* U+CFF3 */
+      '?', /* U+CFF4 */
+      '?', /* U+CFF5 */
+      '?', /* U+CFF6 */
+      '?', /* U+CFF7 */
+      '?', /* U+CFF8 */
+      '?', /* U+CFF9 */
+      '?', /* U+CFFA */
+      '?', /* U+CFFB */
+      '?', /* U+CFFC */
+      '?', /* U+CFFD */
+      '?', /* U+CFFE */
+      '?', /* U+CFFF */
+      '?', /* U+D000 */
+      '?', /* U+D001 */
+      '?', /* U+D002 */
+      '?', /* U+D003 */
+      '?', /* U+D004 */
+      '?', /* U+D005 */
+      '?', /* U+D006 */
+      '?', /* U+D007 */
+      '?', /* U+D008 */
+      '?', /* U+D009 */
+      '?', /* U+D00A */
+      '?', /* U+D00B */
+      '?', /* U+D00C */
+      '?', /* U+D00D */
+      '?', /* U+D00E */
+      '?', /* U+D00F */
+      '?', /* U+D010 */
+      '?', /* U+D011 */
+      '?', /* U+D012 */
+      '?', /* U+D013 */
+      '?', /* U+D014 */
+      '?', /* U+D015 */
+      '?', /* U+D016 */
+      '?', /* U+D017 */
+      '?', /* U+D018 */
+      '?', /* U+D019 */
+      '?', /* U+D01A */
+      '?', /* U+D01B */
+      '?', /* U+D01C */
+      '?', /* U+D01D */
+      '?', /* U+D01E */
+      '?', /* U+D01F */
+      '?', /* U+D020 */
+      '?', /* U+D021 */
+      '?', /* U+D022 */
+      '?', /* U+D023 */
+      '?', /* U+D024 */
+      '?', /* U+D025 */
+      '?', /* U+D026 */
+      '?', /* U+D027 */
+      '?', /* U+D028 */
+      '?', /* U+D029 */
+      '?', /* U+D02A */
+      '?', /* U+D02B */
+      '?', /* U+D02C */
+      '?', /* U+D02D */
+      '?', /* U+D02E */
+      '?', /* U+D02F */
+      '?', /* U+D030 */
+      '?', /* U+D031 */
+      '?', /* U+D032 */
+      '?', /* U+D033 */
+      '?', /* U+D034 */
+      '?', /* U+D035 */
+      '?', /* U+D036 */
+      '?', /* U+D037 */
+      '?', /* U+D038 */
+      '?', /* U+D039 */
+      '?', /* U+D03A */
+      '?', /* U+D03B */
+      '?', /* U+D03C */
+      '?', /* U+D03D */
+      '?', /* U+D03E */
+      '?', /* U+D03F */
+      '?', /* U+D040 */
+      '?', /* U+D041 */
+      '?', /* U+D042 */
+      '?', /* U+D043 */
+      '?', /* U+D044 */
+      '?', /* U+D045 */
+      '?', /* U+D046 */
+      '?', /* U+D047 */
+      '?', /* U+D048 */
+      '?', /* U+D049 */
+      '?', /* U+D04A */
+      '?', /* U+D04B */
+      '?', /* U+D04C */
+      '?', /* U+D04D */
+      '?', /* U+D04E */
+      '?', /* U+D04F */
+      '?', /* U+D050 */
+      '?', /* U+D051 */
+      '?', /* U+D052 */
+      '?', /* U+D053 */
+      '?', /* U+D054 */
+      '?', /* U+D055 */
+      '?', /* U+D056 */
+      '?', /* U+D057 */
+      '?', /* U+D058 */
+      '?', /* U+D059 */
+      '?', /* U+D05A */
+      '?', /* U+D05B */
+      '?', /* U+D05C */
+      '?', /* U+D05D */
+      '?', /* U+D05E */
+      '?', /* U+D05F */
+      '?', /* U+D060 */
+      '?', /* U+D061 */
+      '?', /* U+D062 */
+      '?', /* U+D063 */
+      '?', /* U+D064 */
+      '?', /* U+D065 */
+      '?', /* U+D066 */
+      '?', /* U+D067 */
+      '?', /* U+D068 */
+      '?', /* U+D069 */
+      '?', /* U+D06A */
+      '?', /* U+D06B */
+      '?', /* U+D06C */
+      '?', /* U+D06D */
+      '?', /* U+D06E */
+      '?', /* U+D06F */
+      '?', /* U+D070 */
+      '?', /* U+D071 */
+      '?', /* U+D072 */
+      '?', /* U+D073 */
+      '?', /* U+D074 */
+      '?', /* U+D075 */
+      '?', /* U+D076 */
+      '?', /* U+D077 */
+      '?', /* U+D078 */
+      '?', /* U+D079 */
+      '?', /* U+D07A */
+      '?', /* U+D07B */
+      '?', /* U+D07C */
+      '?', /* U+D07D */
+      '?', /* U+D07E */
+      '?', /* U+D07F */
+      '?', /* U+D080 */
+      '?', /* U+D081 */
+      '?', /* U+D082 */
+      '?', /* U+D083 */
+      '?', /* U+D084 */
+      '?', /* U+D085 */
+      '?', /* U+D086 */
+      '?', /* U+D087 */
+      '?', /* U+D088 */
+      '?', /* U+D089 */
+      '?', /* U+D08A */
+      '?', /* U+D08B */
+      '?', /* U+D08C */
+      '?', /* U+D08D */
+      '?', /* U+D08E */
+      '?', /* U+D08F */
+      '?', /* U+D090 */
+      '?', /* U+D091 */
+      '?', /* U+D092 */
+      '?', /* U+D093 */
+      '?', /* U+D094 */
+      '?', /* U+D095 */
+      '?', /* U+D096 */
+      '?', /* U+D097 */
+      '?', /* U+D098 */
+      '?', /* U+D099 */
+      '?', /* U+D09A */
+      '?', /* U+D09B */
+      '?', /* U+D09C */
+      '?', /* U+D09D */
+      '?', /* U+D09E */
+      '?', /* U+D09F */
+      '?', /* U+D0A0 */
+      '?', /* U+D0A1 */
+      '?', /* U+D0A2 */
+      '?', /* U+D0A3 */
+      '?', /* U+D0A4 */
+      '?', /* U+D0A5 */
+      '?', /* U+D0A6 */
+      '?', /* U+D0A7 */
+      '?', /* U+D0A8 */
+      '?', /* U+D0A9 */
+      '?', /* U+D0AA */
+      '?', /* U+D0AB */
+      '?', /* U+D0AC */
+      '?', /* U+D0AD */
+      '?', /* U+D0AE */
+      '?', /* U+D0AF */
+      '?', /* U+D0B0 */
+      '?', /* U+D0B1 */
+      '?', /* U+D0B2 */
+      '?', /* U+D0B3 */
+      '?', /* U+D0B4 */
+      '?', /* U+D0B5 */
+      '?', /* U+D0B6 */
+      '?', /* U+D0B7 */
+      '?', /* U+D0B8 */
+      '?', /* U+D0B9 */
+      '?', /* U+D0BA */
+      '?', /* U+D0BB */
+      '?', /* U+D0BC */
+      '?', /* U+D0BD */
+      '?', /* U+D0BE */
+      '?', /* U+D0BF */
+      '?', /* U+D0C0 */
+      '?', /* U+D0C1 */
+      '?', /* U+D0C2 */
+      '?', /* U+D0C3 */
+      '?', /* U+D0C4 */
+      '?', /* U+D0C5 */
+      '?', /* U+D0C6 */
+      '?', /* U+D0C7 */
+      '?', /* U+D0C8 */
+      '?', /* U+D0C9 */
+      '?', /* U+D0CA */
+      '?', /* U+D0CB */
+      '?', /* U+D0CC */
+      '?', /* U+D0CD */
+      '?', /* U+D0CE */
+      '?', /* U+D0CF */
+      '?', /* U+D0D0 */
+      '?', /* U+D0D1 */
+      '?', /* U+D0D2 */
+      '?', /* U+D0D3 */
+      '?', /* U+D0D4 */
+      '?', /* U+D0D5 */
+      '?', /* U+D0D6 */
+      '?', /* U+D0D7 */
+      '?', /* U+D0D8 */
+      '?', /* U+D0D9 */
+      '?', /* U+D0DA */
+      '?', /* U+D0DB */
+      '?', /* U+D0DC */
+      '?', /* U+D0DD */
+      '?', /* U+D0DE */
+      '?', /* U+D0DF */
+      '?', /* U+D0E0 */
+      '?', /* U+D0E1 */
+      '?', /* U+D0E2 */
+      '?', /* U+D0E3 */
+      '?', /* U+D0E4 */
+      '?', /* U+D0E5 */
+      '?', /* U+D0E6 */
+      '?', /* U+D0E7 */
+      '?', /* U+D0E8 */
+      '?', /* U+D0E9 */
+      '?', /* U+D0EA */
+      '?', /* U+D0EB */
+      '?', /* U+D0EC */
+      '?', /* U+D0ED */
+      '?', /* U+D0EE */
+      '?', /* U+D0EF */
+      '?', /* U+D0F0 */
+      '?', /* U+D0F1 */
+      '?', /* U+D0F2 */
+      '?', /* U+D0F3 */
+      '?', /* U+D0F4 */
+      '?', /* U+D0F5 */
+      '?', /* U+D0F6 */
+      '?', /* U+D0F7 */
+      '?', /* U+D0F8 */
+      '?', /* U+D0F9 */
+      '?', /* U+D0FA */
+      '?', /* U+D0FB */
+      '?', /* U+D0FC */
+      '?', /* U+D0FD */
+      '?', /* U+D0FE */
+      '?', /* U+D0FF */
+      '?', /* U+D100 */
+      '?', /* U+D101 */
+      '?', /* U+D102 */
+      '?', /* U+D103 */
+      '?', /* U+D104 */
+      '?', /* U+D105 */
+      '?', /* U+D106 */
+      '?', /* U+D107 */
+      '?', /* U+D108 */
+      '?', /* U+D109 */
+      '?', /* U+D10A */
+      '?', /* U+D10B */
+      '?', /* U+D10C */
+      '?', /* U+D10D */
+      '?', /* U+D10E */
+      '?', /* U+D10F */
+      '?', /* U+D110 */
+      '?', /* U+D111 */
+      '?', /* U+D112 */
+      '?', /* U+D113 */
+      '?', /* U+D114 */
+      '?', /* U+D115 */
+      '?', /* U+D116 */
+      '?', /* U+D117 */
+      '?', /* U+D118 */
+      '?', /* U+D119 */
+      '?', /* U+D11A */
+      '?', /* U+D11B */
+      '?', /* U+D11C */
+      '?', /* U+D11D */
+      '?', /* U+D11E */
+      '?', /* U+D11F */
+      '?', /* U+D120 */
+      '?', /* U+D121 */
+      '?', /* U+D122 */
+      '?', /* U+D123 */
+      '?', /* U+D124 */
+      '?', /* U+D125 */
+      '?', /* U+D126 */
+      '?', /* U+D127 */
+      '?', /* U+D128 */
+      '?', /* U+D129 */
+      '?', /* U+D12A */
+      '?', /* U+D12B */
+      '?', /* U+D12C */
+      '?', /* U+D12D */
+      '?', /* U+D12E */
+      '?', /* U+D12F */
+      '?', /* U+D130 */
+      '?', /* U+D131 */
+      '?', /* U+D132 */
+      '?', /* U+D133 */
+      '?', /* U+D134 */
+      '?', /* U+D135 */
+      '?', /* U+D136 */
+      '?', /* U+D137 */
+      '?', /* U+D138 */
+      '?', /* U+D139 */
+      '?', /* U+D13A */
+      '?', /* U+D13B */
+      '?', /* U+D13C */
+      '?', /* U+D13D */
+      '?', /* U+D13E */
+      '?', /* U+D13F */
+      '?', /* U+D140 */
+      '?', /* U+D141 */
+      '?', /* U+D142 */
+      '?', /* U+D143 */
+      '?', /* U+D144 */
+      '?', /* U+D145 */
+      '?', /* U+D146 */
+      '?', /* U+D147 */
+      '?', /* U+D148 */
+      '?', /* U+D149 */
+      '?', /* U+D14A */
+      '?', /* U+D14B */
+      '?', /* U+D14C */
+      '?', /* U+D14D */
+      '?', /* U+D14E */
+      '?', /* U+D14F */
+      '?', /* U+D150 */
+      '?', /* U+D151 */
+      '?', /* U+D152 */
+      '?', /* U+D153 */
+      '?', /* U+D154 */
+      '?', /* U+D155 */
+      '?', /* U+D156 */
+      '?', /* U+D157 */
+      '?', /* U+D158 */
+      '?', /* U+D159 */
+      '?', /* U+D15A */
+      '?', /* U+D15B */
+      '?', /* U+D15C */
+      '?', /* U+D15D */
+      '?', /* U+D15E */
+      '?', /* U+D15F */
+      '?', /* U+D160 */
+      '?', /* U+D161 */
+      '?', /* U+D162 */
+      '?', /* U+D163 */
+      '?', /* U+D164 */
+      '?', /* U+D165 */
+      '?', /* U+D166 */
+      '?', /* U+D167 */
+      '?', /* U+D168 */
+      '?', /* U+D169 */
+      '?', /* U+D16A */
+      '?', /* U+D16B */
+      '?', /* U+D16C */
+      '?', /* U+D16D */
+      '?', /* U+D16E */
+      '?', /* U+D16F */
+      '?', /* U+D170 */
+      '?', /* U+D171 */
+      '?', /* U+D172 */
+      '?', /* U+D173 */
+      '?', /* U+D174 */
+      '?', /* U+D175 */
+      '?', /* U+D176 */
+      '?', /* U+D177 */
+      '?', /* U+D178 */
+      '?', /* U+D179 */
+      '?', /* U+D17A */
+      '?', /* U+D17B */
+      '?', /* U+D17C */
+      '?', /* U+D17D */
+      '?', /* U+D17E */
+      '?', /* U+D17F */
+      '?', /* U+D180 */
+      '?', /* U+D181 */
+      '?', /* U+D182 */
+      '?', /* U+D183 */
+      '?', /* U+D184 */
+      '?', /* U+D185 */
+      '?', /* U+D186 */
+      '?', /* U+D187 */
+      '?', /* U+D188 */
+      '?', /* U+D189 */
+      '?', /* U+D18A */
+      '?', /* U+D18B */
+      '?', /* U+D18C */
+      '?', /* U+D18D */
+      '?', /* U+D18E */
+      '?', /* U+D18F */
+      '?', /* U+D190 */
+      '?', /* U+D191 */
+      '?', /* U+D192 */
+      '?', /* U+D193 */
+      '?', /* U+D194 */
+      '?', /* U+D195 */
+      '?', /* U+D196 */
+      '?', /* U+D197 */
+      '?', /* U+D198 */
+      '?', /* U+D199 */
+      '?', /* U+D19A */
+      '?', /* U+D19B */
+      '?', /* U+D19C */
+      '?', /* U+D19D */
+      '?', /* U+D19E */
+      '?', /* U+D19F */
+      '?', /* U+D1A0 */
+      '?', /* U+D1A1 */
+      '?', /* U+D1A2 */
+      '?', /* U+D1A3 */
+      '?', /* U+D1A4 */
+      '?', /* U+D1A5 */
+      '?', /* U+D1A6 */
+      '?', /* U+D1A7 */
+      '?', /* U+D1A8 */
+      '?', /* U+D1A9 */
+      '?', /* U+D1AA */
+      '?', /* U+D1AB */
+      '?', /* U+D1AC */
+      '?', /* U+D1AD */
+      '?', /* U+D1AE */
+      '?', /* U+D1AF */
+      '?', /* U+D1B0 */
+      '?', /* U+D1B1 */
+      '?', /* U+D1B2 */
+      '?', /* U+D1B3 */
+      '?', /* U+D1B4 */
+      '?', /* U+D1B5 */
+      '?', /* U+D1B6 */
+      '?', /* U+D1B7 */
+      '?', /* U+D1B8 */
+      '?', /* U+D1B9 */
+      '?', /* U+D1BA */
+      '?', /* U+D1BB */
+      '?', /* U+D1BC */
+      '?', /* U+D1BD */
+      '?', /* U+D1BE */
+      '?', /* U+D1BF */
+      '?', /* U+D1C0 */
+      '?', /* U+D1C1 */
+      '?', /* U+D1C2 */
+      '?', /* U+D1C3 */
+      '?', /* U+D1C4 */
+      '?', /* U+D1C5 */
+      '?', /* U+D1C6 */
+      '?', /* U+D1C7 */
+      '?', /* U+D1C8 */
+      '?', /* U+D1C9 */
+      '?', /* U+D1CA */
+      '?', /* U+D1CB */
+      '?', /* U+D1CC */
+      '?', /* U+D1CD */
+      '?', /* U+D1CE */
+      '?', /* U+D1CF */
+      '?', /* U+D1D0 */
+      '?', /* U+D1D1 */
+      '?', /* U+D1D2 */
+      '?', /* U+D1D3 */
+      '?', /* U+D1D4 */
+      '?', /* U+D1D5 */
+      '?', /* U+D1D6 */
+      '?', /* U+D1D7 */
+      '?', /* U+D1D8 */
+      '?', /* U+D1D9 */
+      '?', /* U+D1DA */
+      '?', /* U+D1DB */
+      '?', /* U+D1DC */
+      '?', /* U+D1DD */
+      '?', /* U+D1DE */
+      '?', /* U+D1DF */
+      '?', /* U+D1E0 */
+      '?', /* U+D1E1 */
+      '?', /* U+D1E2 */
+      '?', /* U+D1E3 */
+      '?', /* U+D1E4 */
+      '?', /* U+D1E5 */
+      '?', /* U+D1E6 */
+      '?', /* U+D1E7 */
+      '?', /* U+D1E8 */
+      '?', /* U+D1E9 */
+      '?', /* U+D1EA */
+      '?', /* U+D1EB */
+      '?', /* U+D1EC */
+      '?', /* U+D1ED */
+      '?', /* U+D1EE */
+      '?', /* U+D1EF */
+      '?', /* U+D1F0 */
+      '?', /* U+D1F1 */
+      '?', /* U+D1F2 */
+      '?', /* U+D1F3 */
+      '?', /* U+D1F4 */
+      '?', /* U+D1F5 */
+      '?', /* U+D1F6 */
+      '?', /* U+D1F7 */
+      '?', /* U+D1F8 */
+      '?', /* U+D1F9 */
+      '?', /* U+D1FA */
+      '?', /* U+D1FB */
+      '?', /* U+D1FC */
+      '?', /* U+D1FD */
+      '?', /* U+D1FE */
+      '?', /* U+D1FF */
+      '?', /* U+D200 */
+      '?', /* U+D201 */
+      '?', /* U+D202 */
+      '?', /* U+D203 */
+      '?', /* U+D204 */
+      '?', /* U+D205 */
+      '?', /* U+D206 */
+      '?', /* U+D207 */
+      '?', /* U+D208 */
+      '?', /* U+D209 */
+      '?', /* U+D20A */
+      '?', /* U+D20B */
+      '?', /* U+D20C */
+      '?', /* U+D20D */
+      '?', /* U+D20E */
+      '?', /* U+D20F */
+      '?', /* U+D210 */
+      '?', /* U+D211 */
+      '?', /* U+D212 */
+      '?', /* U+D213 */
+      '?', /* U+D214 */
+      '?', /* U+D215 */
+      '?', /* U+D216 */
+      '?', /* U+D217 */
+      '?', /* U+D218 */
+      '?', /* U+D219 */
+      '?', /* U+D21A */
+      '?', /* U+D21B */
+      '?', /* U+D21C */
+      '?', /* U+D21D */
+      '?', /* U+D21E */
+      '?', /* U+D21F */
+      '?', /* U+D220 */
+      '?', /* U+D221 */
+      '?', /* U+D222 */
+      '?', /* U+D223 */
+      '?', /* U+D224 */
+      '?', /* U+D225 */
+      '?', /* U+D226 */
+      '?', /* U+D227 */
+      '?', /* U+D228 */
+      '?', /* U+D229 */
+      '?', /* U+D22A */
+      '?', /* U+D22B */
+      '?', /* U+D22C */
+      '?', /* U+D22D */
+      '?', /* U+D22E */
+      '?', /* U+D22F */
+      '?', /* U+D230 */
+      '?', /* U+D231 */
+      '?', /* U+D232 */
+      '?', /* U+D233 */
+      '?', /* U+D234 */
+      '?', /* U+D235 */
+      '?', /* U+D236 */
+      '?', /* U+D237 */
+      '?', /* U+D238 */
+      '?', /* U+D239 */
+      '?', /* U+D23A */
+      '?', /* U+D23B */
+      '?', /* U+D23C */
+      '?', /* U+D23D */
+      '?', /* U+D23E */
+      '?', /* U+D23F */
+      '?', /* U+D240 */
+      '?', /* U+D241 */
+      '?', /* U+D242 */
+      '?', /* U+D243 */
+      '?', /* U+D244 */
+      '?', /* U+D245 */
+      '?', /* U+D246 */
+      '?', /* U+D247 */
+      '?', /* U+D248 */
+      '?', /* U+D249 */
+      '?', /* U+D24A */
+      '?', /* U+D24B */
+      '?', /* U+D24C */
+      '?', /* U+D24D */
+      '?', /* U+D24E */
+      '?', /* U+D24F */
+      '?', /* U+D250 */
+      '?', /* U+D251 */
+      '?', /* U+D252 */
+      '?', /* U+D253 */
+      '?', /* U+D254 */
+      '?', /* U+D255 */
+      '?', /* U+D256 */
+      '?', /* U+D257 */
+      '?', /* U+D258 */
+      '?', /* U+D259 */
+      '?', /* U+D25A */
+      '?', /* U+D25B */
+      '?', /* U+D25C */
+      '?', /* U+D25D */
+      '?', /* U+D25E */
+      '?', /* U+D25F */
+      '?', /* U+D260 */
+      '?', /* U+D261 */
+      '?', /* U+D262 */
+      '?', /* U+D263 */
+      '?', /* U+D264 */
+      '?', /* U+D265 */
+      '?', /* U+D266 */
+      '?', /* U+D267 */
+      '?', /* U+D268 */
+      '?', /* U+D269 */
+      '?', /* U+D26A */
+      '?', /* U+D26B */
+      '?', /* U+D26C */
+      '?', /* U+D26D */
+      '?', /* U+D26E */
+      '?', /* U+D26F */
+      '?', /* U+D270 */
+      '?', /* U+D271 */
+      '?', /* U+D272 */
+      '?', /* U+D273 */
+      '?', /* U+D274 */
+      '?', /* U+D275 */
+      '?', /* U+D276 */
+      '?', /* U+D277 */
+      '?', /* U+D278 */
+      '?', /* U+D279 */
+      '?', /* U+D27A */
+      '?', /* U+D27B */
+      '?', /* U+D27C */
+      '?', /* U+D27D */
+      '?', /* U+D27E */
+      '?', /* U+D27F */
+      '?', /* U+D280 */
+      '?', /* U+D281 */
+      '?', /* U+D282 */
+      '?', /* U+D283 */
+      '?', /* U+D284 */
+      '?', /* U+D285 */
+      '?', /* U+D286 */
+      '?', /* U+D287 */
+      '?', /* U+D288 */
+      '?', /* U+D289 */
+      '?', /* U+D28A */
+      '?', /* U+D28B */
+      '?', /* U+D28C */
+      '?', /* U+D28D */
+      '?', /* U+D28E */
+      '?', /* U+D28F */
+      '?', /* U+D290 */
+      '?', /* U+D291 */
+      '?', /* U+D292 */
+      '?', /* U+D293 */
+      '?', /* U+D294 */
+      '?', /* U+D295 */
+      '?', /* U+D296 */
+      '?', /* U+D297 */
+      '?', /* U+D298 */
+      '?', /* U+D299 */
+      '?', /* U+D29A */
+      '?', /* U+D29B */
+      '?', /* U+D29C */
+      '?', /* U+D29D */
+      '?', /* U+D29E */
+      '?', /* U+D29F */
+      '?', /* U+D2A0 */
+      '?', /* U+D2A1 */
+      '?', /* U+D2A2 */
+      '?', /* U+D2A3 */
+      '?', /* U+D2A4 */
+      '?', /* U+D2A5 */
+      '?', /* U+D2A6 */
+      '?', /* U+D2A7 */
+      '?', /* U+D2A8 */
+      '?', /* U+D2A9 */
+      '?', /* U+D2AA */
+      '?', /* U+D2AB */
+      '?', /* U+D2AC */
+      '?', /* U+D2AD */
+      '?', /* U+D2AE */
+      '?', /* U+D2AF */
+      '?', /* U+D2B0 */
+      '?', /* U+D2B1 */
+      '?', /* U+D2B2 */
+      '?', /* U+D2B3 */
+      '?', /* U+D2B4 */
+      '?', /* U+D2B5 */
+      '?', /* U+D2B6 */
+      '?', /* U+D2B7 */
+      '?', /* U+D2B8 */
+      '?', /* U+D2B9 */
+      '?', /* U+D2BA */
+      '?', /* U+D2BB */
+      '?', /* U+D2BC */
+      '?', /* U+D2BD */
+      '?', /* U+D2BE */
+      '?', /* U+D2BF */
+      '?', /* U+D2C0 */
+      '?', /* U+D2C1 */
+      '?', /* U+D2C2 */
+      '?', /* U+D2C3 */
+      '?', /* U+D2C4 */
+      '?', /* U+D2C5 */
+      '?', /* U+D2C6 */
+      '?', /* U+D2C7 */
+      '?', /* U+D2C8 */
+      '?', /* U+D2C9 */
+      '?', /* U+D2CA */
+      '?', /* U+D2CB */
+      '?', /* U+D2CC */
+      '?', /* U+D2CD */
+      '?', /* U+D2CE */
+      '?', /* U+D2CF */
+      '?', /* U+D2D0 */
+      '?', /* U+D2D1 */
+      '?', /* U+D2D2 */
+      '?', /* U+D2D3 */
+      '?', /* U+D2D4 */
+      '?', /* U+D2D5 */
+      '?', /* U+D2D6 */
+      '?', /* U+D2D7 */
+      '?', /* U+D2D8 */
+      '?', /* U+D2D9 */
+      '?', /* U+D2DA */
+      '?', /* U+D2DB */
+      '?', /* U+D2DC */
+      '?', /* U+D2DD */
+      '?', /* U+D2DE */
+      '?', /* U+D2DF */
+      '?', /* U+D2E0 */
+      '?', /* U+D2E1 */
+      '?', /* U+D2E2 */
+      '?', /* U+D2E3 */
+      '?', /* U+D2E4 */
+      '?', /* U+D2E5 */
+      '?', /* U+D2E6 */
+      '?', /* U+D2E7 */
+      '?', /* U+D2E8 */
+      '?', /* U+D2E9 */
+      '?', /* U+D2EA */
+      '?', /* U+D2EB */
+      '?', /* U+D2EC */
+      '?', /* U+D2ED */
+      '?', /* U+D2EE */
+      '?', /* U+D2EF */
+      '?', /* U+D2F0 */
+      '?', /* U+D2F1 */
+      '?', /* U+D2F2 */
+      '?', /* U+D2F3 */
+      '?', /* U+D2F4 */
+      '?', /* U+D2F5 */
+      '?', /* U+D2F6 */
+      '?', /* U+D2F7 */
+      '?', /* U+D2F8 */
+      '?', /* U+D2F9 */
+      '?', /* U+D2FA */
+      '?', /* U+D2FB */
+      '?', /* U+D2FC */
+      '?', /* U+D2FD */
+      '?', /* U+D2FE */
+      '?', /* U+D2FF */
+      '?', /* U+D300 */
+      '?', /* U+D301 */
+      '?', /* U+D302 */
+      '?', /* U+D303 */
+      '?', /* U+D304 */
+      '?', /* U+D305 */
+      '?', /* U+D306 */
+      '?', /* U+D307 */
+      '?', /* U+D308 */
+      '?', /* U+D309 */
+      '?', /* U+D30A */
+      '?', /* U+D30B */
+      '?', /* U+D30C */
+      '?', /* U+D30D */
+      '?', /* U+D30E */
+      '?', /* U+D30F */
+      '?', /* U+D310 */
+      '?', /* U+D311 */
+      '?', /* U+D312 */
+      '?', /* U+D313 */
+      '?', /* U+D314 */
+      '?', /* U+D315 */
+      '?', /* U+D316 */
+      '?', /* U+D317 */
+      '?', /* U+D318 */
+      '?', /* U+D319 */
+      '?', /* U+D31A */
+      '?', /* U+D31B */
+      '?', /* U+D31C */
+      '?', /* U+D31D */
+      '?', /* U+D31E */
+      '?', /* U+D31F */
+      '?', /* U+D320 */
+      '?', /* U+D321 */
+      '?', /* U+D322 */
+      '?', /* U+D323 */
+      '?', /* U+D324 */
+      '?', /* U+D325 */
+      '?', /* U+D326 */
+      '?', /* U+D327 */
+      '?', /* U+D328 */
+      '?', /* U+D329 */
+      '?', /* U+D32A */
+      '?', /* U+D32B */
+      '?', /* U+D32C */
+      '?', /* U+D32D */
+      '?', /* U+D32E */
+      '?', /* U+D32F */
+      '?', /* U+D330 */
+      '?', /* U+D331 */
+      '?', /* U+D332 */
+      '?', /* U+D333 */
+      '?', /* U+D334 */
+      '?', /* U+D335 */
+      '?', /* U+D336 */
+      '?', /* U+D337 */
+      '?', /* U+D338 */
+      '?', /* U+D339 */
+      '?', /* U+D33A */
+      '?', /* U+D33B */
+      '?', /* U+D33C */
+      '?', /* U+D33D */
+      '?', /* U+D33E */
+      '?', /* U+D33F */
+      '?', /* U+D340 */
+      '?', /* U+D341 */
+      '?', /* U+D342 */
+      '?', /* U+D343 */
+      '?', /* U+D344 */
+      '?', /* U+D345 */
+      '?', /* U+D346 */
+      '?', /* U+D347 */
+      '?', /* U+D348 */
+      '?', /* U+D349 */
+      '?', /* U+D34A */
+      '?', /* U+D34B */
+      '?', /* U+D34C */
+      '?', /* U+D34D */
+      '?', /* U+D34E */
+      '?', /* U+D34F */
+      '?', /* U+D350 */
+      '?', /* U+D351 */
+      '?', /* U+D352 */
+      '?', /* U+D353 */
+      '?', /* U+D354 */
+      '?', /* U+D355 */
+      '?', /* U+D356 */
+      '?', /* U+D357 */
+      '?', /* U+D358 */
+      '?', /* U+D359 */
+      '?', /* U+D35A */
+      '?', /* U+D35B */
+      '?', /* U+D35C */
+      '?', /* U+D35D */
+      '?', /* U+D35E */
+      '?', /* U+D35F */
+      '?', /* U+D360 */
+      '?', /* U+D361 */
+      '?', /* U+D362 */
+      '?', /* U+D363 */
+      '?', /* U+D364 */
+      '?', /* U+D365 */
+      '?', /* U+D366 */
+      '?', /* U+D367 */
+      '?', /* U+D368 */
+      '?', /* U+D369 */
+      '?', /* U+D36A */
+      '?', /* U+D36B */
+      '?', /* U+D36C */
+      '?', /* U+D36D */
+      '?', /* U+D36E */
+      '?', /* U+D36F */
+      '?', /* U+D370 */
+      '?', /* U+D371 */
+      '?', /* U+D372 */
+      '?', /* U+D373 */
+      '?', /* U+D374 */
+      '?', /* U+D375 */
+      '?', /* U+D376 */
+      '?', /* U+D377 */
+      '?', /* U+D378 */
+      '?', /* U+D379 */
+      '?', /* U+D37A */
+      '?', /* U+D37B */
+      '?', /* U+D37C */
+      '?', /* U+D37D */
+      '?', /* U+D37E */
+      '?', /* U+D37F */
+      '?', /* U+D380 */
+      '?', /* U+D381 */
+      '?', /* U+D382 */
+      '?', /* U+D383 */
+      '?', /* U+D384 */
+      '?', /* U+D385 */
+      '?', /* U+D386 */
+      '?', /* U+D387 */
+      '?', /* U+D388 */
+      '?', /* U+D389 */
+      '?', /* U+D38A */
+      '?', /* U+D38B */
+      '?', /* U+D38C */
+      '?', /* U+D38D */
+      '?', /* U+D38E */
+      '?', /* U+D38F */
+      '?', /* U+D390 */
+      '?', /* U+D391 */
+      '?', /* U+D392 */
+      '?', /* U+D393 */
+      '?', /* U+D394 */
+      '?', /* U+D395 */
+      '?', /* U+D396 */
+      '?', /* U+D397 */
+      '?', /* U+D398 */
+      '?', /* U+D399 */
+      '?', /* U+D39A */
+      '?', /* U+D39B */
+      '?', /* U+D39C */
+      '?', /* U+D39D */
+      '?', /* U+D39E */
+      '?', /* U+D39F */
+      '?', /* U+D3A0 */
+      '?', /* U+D3A1 */
+      '?', /* U+D3A2 */
+      '?', /* U+D3A3 */
+      '?', /* U+D3A4 */
+      '?', /* U+D3A5 */
+      '?', /* U+D3A6 */
+      '?', /* U+D3A7 */
+      '?', /* U+D3A8 */
+      '?', /* U+D3A9 */
+      '?', /* U+D3AA */
+      '?', /* U+D3AB */
+      '?', /* U+D3AC */
+      '?', /* U+D3AD */
+      '?', /* U+D3AE */
+      '?', /* U+D3AF */
+      '?', /* U+D3B0 */
+      '?', /* U+D3B1 */
+      '?', /* U+D3B2 */
+      '?', /* U+D3B3 */
+      '?', /* U+D3B4 */
+      '?', /* U+D3B5 */
+      '?', /* U+D3B6 */
+      '?', /* U+D3B7 */
+      '?', /* U+D3B8 */
+      '?', /* U+D3B9 */
+      '?', /* U+D3BA */
+      '?', /* U+D3BB */
+      '?', /* U+D3BC */
+      '?', /* U+D3BD */
+      '?', /* U+D3BE */
+      '?', /* U+D3BF */
+      '?', /* U+D3C0 */
+      '?', /* U+D3C1 */
+      '?', /* U+D3C2 */
+      '?', /* U+D3C3 */
+      '?', /* U+D3C4 */
+      '?', /* U+D3C5 */
+      '?', /* U+D3C6 */
+      '?', /* U+D3C7 */
+      '?', /* U+D3C8 */
+      '?', /* U+D3C9 */
+      '?', /* U+D3CA */
+      '?', /* U+D3CB */
+      '?', /* U+D3CC */
+      '?', /* U+D3CD */
+      '?', /* U+D3CE */
+      '?', /* U+D3CF */
+      '?', /* U+D3D0 */
+      '?', /* U+D3D1 */
+      '?', /* U+D3D2 */
+      '?', /* U+D3D3 */
+      '?', /* U+D3D4 */
+      '?', /* U+D3D5 */
+      '?', /* U+D3D6 */
+      '?', /* U+D3D7 */
+      '?', /* U+D3D8 */
+      '?', /* U+D3D9 */
+      '?', /* U+D3DA */
+      '?', /* U+D3DB */
+      '?', /* U+D3DC */
+      '?', /* U+D3DD */
+      '?', /* U+D3DE */
+      '?', /* U+D3DF */
+      '?', /* U+D3E0 */
+      '?', /* U+D3E1 */
+      '?', /* U+D3E2 */
+      '?', /* U+D3E3 */
+      '?', /* U+D3E4 */
+      '?', /* U+D3E5 */
+      '?', /* U+D3E6 */
+      '?', /* U+D3E7 */
+      '?', /* U+D3E8 */
+      '?', /* U+D3E9 */
+      '?', /* U+D3EA */
+      '?', /* U+D3EB */
+      '?', /* U+D3EC */
+      '?', /* U+D3ED */
+      '?', /* U+D3EE */
+      '?', /* U+D3EF */
+      '?', /* U+D3F0 */
+      '?', /* U+D3F1 */
+      '?', /* U+D3F2 */
+      '?', /* U+D3F3 */
+      '?', /* U+D3F4 */
+      '?', /* U+D3F5 */
+      '?', /* U+D3F6 */
+      '?', /* U+D3F7 */
+      '?', /* U+D3F8 */
+      '?', /* U+D3F9 */
+      '?', /* U+D3FA */
+      '?', /* U+D3FB */
+      '?', /* U+D3FC */
+      '?', /* U+D3FD */
+      '?', /* U+D3FE */
+      '?', /* U+D3FF */
+      '?', /* U+D400 */
+      '?', /* U+D401 */
+      '?', /* U+D402 */
+      '?', /* U+D403 */
+      '?', /* U+D404 */
+      '?', /* U+D405 */
+      '?', /* U+D406 */
+      '?', /* U+D407 */
+      '?', /* U+D408 */
+      '?', /* U+D409 */
+      '?', /* U+D40A */
+      '?', /* U+D40B */
+      '?', /* U+D40C */
+      '?', /* U+D40D */
+      '?', /* U+D40E */
+      '?', /* U+D40F */
+      '?', /* U+D410 */
+      '?', /* U+D411 */
+      '?', /* U+D412 */
+      '?', /* U+D413 */
+      '?', /* U+D414 */
+      '?', /* U+D415 */
+      '?', /* U+D416 */
+      '?', /* U+D417 */
+      '?', /* U+D418 */
+      '?', /* U+D419 */
+      '?', /* U+D41A */
+      '?', /* U+D41B */
+      '?', /* U+D41C */
+      '?', /* U+D41D */
+      '?', /* U+D41E */
+      '?', /* U+D41F */
+      '?', /* U+D420 */
+      '?', /* U+D421 */
+      '?', /* U+D422 */
+      '?', /* U+D423 */
+      '?', /* U+D424 */
+      '?', /* U+D425 */
+      '?', /* U+D426 */
+      '?', /* U+D427 */
+      '?', /* U+D428 */
+      '?', /* U+D429 */
+      '?', /* U+D42A */
+      '?', /* U+D42B */
+      '?', /* U+D42C */
+      '?', /* U+D42D */
+      '?', /* U+D42E */
+      '?', /* U+D42F */
+      '?', /* U+D430 */
+      '?', /* U+D431 */
+      '?', /* U+D432 */
+      '?', /* U+D433 */
+      '?', /* U+D434 */
+      '?', /* U+D435 */
+      '?', /* U+D436 */
+      '?', /* U+D437 */
+      '?', /* U+D438 */
+      '?', /* U+D439 */
+      '?', /* U+D43A */
+      '?', /* U+D43B */
+      '?', /* U+D43C */
+      '?', /* U+D43D */
+      '?', /* U+D43E */
+      '?', /* U+D43F */
+      '?', /* U+D440 */
+      '?', /* U+D441 */
+      '?', /* U+D442 */
+      '?', /* U+D443 */
+      '?', /* U+D444 */
+      '?', /* U+D445 */
+      '?', /* U+D446 */
+      '?', /* U+D447 */
+      '?', /* U+D448 */
+      '?', /* U+D449 */
+      '?', /* U+D44A */
+      '?', /* U+D44B */
+      '?', /* U+D44C */
+      '?', /* U+D44D */
+      '?', /* U+D44E */
+      '?', /* U+D44F */
+      '?', /* U+D450 */
+      '?', /* U+D451 */
+      '?', /* U+D452 */
+      '?', /* U+D453 */
+      '?', /* U+D454 */
+      '?', /* U+D455 */
+      '?', /* U+D456 */
+      '?', /* U+D457 */
+      '?', /* U+D458 */
+      '?', /* U+D459 */
+      '?', /* U+D45A */
+      '?', /* U+D45B */
+      '?', /* U+D45C */
+      '?', /* U+D45D */
+      '?', /* U+D45E */
+      '?', /* U+D45F */
+      '?', /* U+D460 */
+      '?', /* U+D461 */
+      '?', /* U+D462 */
+      '?', /* U+D463 */
+      '?', /* U+D464 */
+      '?', /* U+D465 */
+      '?', /* U+D466 */
+      '?', /* U+D467 */
+      '?', /* U+D468 */
+      '?', /* U+D469 */
+      '?', /* U+D46A */
+      '?', /* U+D46B */
+      '?', /* U+D46C */
+      '?', /* U+D46D */
+      '?', /* U+D46E */
+      '?', /* U+D46F */
+      '?', /* U+D470 */
+      '?', /* U+D471 */
+      '?', /* U+D472 */
+      '?', /* U+D473 */
+      '?', /* U+D474 */
+      '?', /* U+D475 */
+      '?', /* U+D476 */
+      '?', /* U+D477 */
+      '?', /* U+D478 */
+      '?', /* U+D479 */
+      '?', /* U+D47A */
+      '?', /* U+D47B */
+      '?', /* U+D47C */
+      '?', /* U+D47D */
+      '?', /* U+D47E */
+      '?', /* U+D47F */
+      '?', /* U+D480 */
+      '?', /* U+D481 */
+      '?', /* U+D482 */
+      '?', /* U+D483 */
+      '?', /* U+D484 */
+      '?', /* U+D485 */
+      '?', /* U+D486 */
+      '?', /* U+D487 */
+      '?', /* U+D488 */
+      '?', /* U+D489 */
+      '?', /* U+D48A */
+      '?', /* U+D48B */
+      '?', /* U+D48C */
+      '?', /* U+D48D */
+      '?', /* U+D48E */
+      '?', /* U+D48F */
+      '?', /* U+D490 */
+      '?', /* U+D491 */
+      '?', /* U+D492 */
+      '?', /* U+D493 */
+      '?', /* U+D494 */
+      '?', /* U+D495 */
+      '?', /* U+D496 */
+      '?', /* U+D497 */
+      '?', /* U+D498 */
+      '?', /* U+D499 */
+      '?', /* U+D49A */
+      '?', /* U+D49B */
+      '?', /* U+D49C */
+      '?', /* U+D49D */
+      '?', /* U+D49E */
+      '?', /* U+D49F */
+      '?', /* U+D4A0 */
+      '?', /* U+D4A1 */
+      '?', /* U+D4A2 */
+      '?', /* U+D4A3 */
+      '?', /* U+D4A4 */
+      '?', /* U+D4A5 */
+      '?', /* U+D4A6 */
+      '?', /* U+D4A7 */
+      '?', /* U+D4A8 */
+      '?', /* U+D4A9 */
+      '?', /* U+D4AA */
+      '?', /* U+D4AB */
+      '?', /* U+D4AC */
+      '?', /* U+D4AD */
+      '?', /* U+D4AE */
+      '?', /* U+D4AF */
+      '?', /* U+D4B0 */
+      '?', /* U+D4B1 */
+      '?', /* U+D4B2 */
+      '?', /* U+D4B3 */
+      '?', /* U+D4B4 */
+      '?', /* U+D4B5 */
+      '?', /* U+D4B6 */
+      '?', /* U+D4B7 */
+      '?', /* U+D4B8 */
+      '?', /* U+D4B9 */
+      '?', /* U+D4BA */
+      '?', /* U+D4BB */
+      '?', /* U+D4BC */
+      '?', /* U+D4BD */
+      '?', /* U+D4BE */
+      '?', /* U+D4BF */
+      '?', /* U+D4C0 */
+      '?', /* U+D4C1 */
+      '?', /* U+D4C2 */
+      '?', /* U+D4C3 */
+      '?', /* U+D4C4 */
+      '?', /* U+D4C5 */
+      '?', /* U+D4C6 */
+      '?', /* U+D4C7 */
+      '?', /* U+D4C8 */
+      '?', /* U+D4C9 */
+      '?', /* U+D4CA */
+      '?', /* U+D4CB */
+      '?', /* U+D4CC */
+      '?', /* U+D4CD */
+      '?', /* U+D4CE */
+      '?', /* U+D4CF */
+      '?', /* U+D4D0 */
+      '?', /* U+D4D1 */
+      '?', /* U+D4D2 */
+      '?', /* U+D4D3 */
+      '?', /* U+D4D4 */
+      '?', /* U+D4D5 */
+      '?', /* U+D4D6 */
+      '?', /* U+D4D7 */
+      '?', /* U+D4D8 */
+      '?', /* U+D4D9 */
+      '?', /* U+D4DA */
+      '?', /* U+D4DB */
+      '?', /* U+D4DC */
+      '?', /* U+D4DD */
+      '?', /* U+D4DE */
+      '?', /* U+D4DF */
+      '?', /* U+D4E0 */
+      '?', /* U+D4E1 */
+      '?', /* U+D4E2 */
+      '?', /* U+D4E3 */
+      '?', /* U+D4E4 */
+      '?', /* U+D4E5 */
+      '?', /* U+D4E6 */
+      '?', /* U+D4E7 */
+      '?', /* U+D4E8 */
+      '?', /* U+D4E9 */
+      '?', /* U+D4EA */
+      '?', /* U+D4EB */
+      '?', /* U+D4EC */
+      '?', /* U+D4ED */
+      '?', /* U+D4EE */
+      '?', /* U+D4EF */
+      '?', /* U+D4F0 */
+      '?', /* U+D4F1 */
+      '?', /* U+D4F2 */
+      '?', /* U+D4F3 */
+      '?', /* U+D4F4 */
+      '?', /* U+D4F5 */
+      '?', /* U+D4F6 */
+      '?', /* U+D4F7 */
+      '?', /* U+D4F8 */
+      '?', /* U+D4F9 */
+      '?', /* U+D4FA */
+      '?', /* U+D4FB */
+      '?', /* U+D4FC */
+      '?', /* U+D4FD */
+      '?', /* U+D4FE */
+      '?', /* U+D4FF */
+      '?', /* U+D500 */
+      '?', /* U+D501 */
+      '?', /* U+D502 */
+      '?', /* U+D503 */
+      '?', /* U+D504 */
+      '?', /* U+D505 */
+      '?', /* U+D506 */
+      '?', /* U+D507 */
+      '?', /* U+D508 */
+      '?', /* U+D509 */
+      '?', /* U+D50A */
+      '?', /* U+D50B */
+      '?', /* U+D50C */
+      '?', /* U+D50D */
+      '?', /* U+D50E */
+      '?', /* U+D50F */
+      '?', /* U+D510 */
+      '?', /* U+D511 */
+      '?', /* U+D512 */
+      '?', /* U+D513 */
+      '?', /* U+D514 */
+      '?', /* U+D515 */
+      '?', /* U+D516 */
+      '?', /* U+D517 */
+      '?', /* U+D518 */
+      '?', /* U+D519 */
+      '?', /* U+D51A */
+      '?', /* U+D51B */
+      '?', /* U+D51C */
+      '?', /* U+D51D */
+      '?', /* U+D51E */
+      '?', /* U+D51F */
+      '?', /* U+D520 */
+      '?', /* U+D521 */
+      '?', /* U+D522 */
+      '?', /* U+D523 */
+      '?', /* U+D524 */
+      '?', /* U+D525 */
+      '?', /* U+D526 */
+      '?', /* U+D527 */
+      '?', /* U+D528 */
+      '?', /* U+D529 */
+      '?', /* U+D52A */
+      '?', /* U+D52B */
+      '?', /* U+D52C */
+      '?', /* U+D52D */
+      '?', /* U+D52E */
+      '?', /* U+D52F */
+      '?', /* U+D530 */
+      '?', /* U+D531 */
+      '?', /* U+D532 */
+      '?', /* U+D533 */
+      '?', /* U+D534 */
+      '?', /* U+D535 */
+      '?', /* U+D536 */
+      '?', /* U+D537 */
+      '?', /* U+D538 */
+      '?', /* U+D539 */
+      '?', /* U+D53A */
+      '?', /* U+D53B */
+      '?', /* U+D53C */
+      '?', /* U+D53D */
+      '?', /* U+D53E */
+      '?', /* U+D53F */
+      '?', /* U+D540 */
+      '?', /* U+D541 */
+      '?', /* U+D542 */
+      '?', /* U+D543 */
+      '?', /* U+D544 */
+      '?', /* U+D545 */
+      '?', /* U+D546 */
+      '?', /* U+D547 */
+      '?', /* U+D548 */
+      '?', /* U+D549 */
+      '?', /* U+D54A */
+      '?', /* U+D54B */
+      '?', /* U+D54C */
+      '?', /* U+D54D */
+      '?', /* U+D54E */
+      '?', /* U+D54F */
+      '?', /* U+D550 */
+      '?', /* U+D551 */
+      '?', /* U+D552 */
+      '?', /* U+D553 */
+      '?', /* U+D554 */
+      '?', /* U+D555 */
+      '?', /* U+D556 */
+      '?', /* U+D557 */
+      '?', /* U+D558 */
+      '?', /* U+D559 */
+      '?', /* U+D55A */
+      '?', /* U+D55B */
+      '?', /* U+D55C */
+      '?', /* U+D55D */
+      '?', /* U+D55E */
+      '?', /* U+D55F */
+      '?', /* U+D560 */
+      '?', /* U+D561 */
+      '?', /* U+D562 */
+      '?', /* U+D563 */
+      '?', /* U+D564 */
+      '?', /* U+D565 */
+      '?', /* U+D566 */
+      '?', /* U+D567 */
+      '?', /* U+D568 */
+      '?', /* U+D569 */
+      '?', /* U+D56A */
+      '?', /* U+D56B */
+      '?', /* U+D56C */
+      '?', /* U+D56D */
+      '?', /* U+D56E */
+      '?', /* U+D56F */
+      '?', /* U+D570 */
+      '?', /* U+D571 */
+      '?', /* U+D572 */
+      '?', /* U+D573 */
+      '?', /* U+D574 */
+      '?', /* U+D575 */
+      '?', /* U+D576 */
+      '?', /* U+D577 */
+      '?', /* U+D578 */
+      '?', /* U+D579 */
+      '?', /* U+D57A */
+      '?', /* U+D57B */
+      '?', /* U+D57C */
+      '?', /* U+D57D */
+      '?', /* U+D57E */
+      '?', /* U+D57F */
+      '?', /* U+D580 */
+      '?', /* U+D581 */
+      '?', /* U+D582 */
+      '?', /* U+D583 */
+      '?', /* U+D584 */
+      '?', /* U+D585 */
+      '?', /* U+D586 */
+      '?', /* U+D587 */
+      '?', /* U+D588 */
+      '?', /* U+D589 */
+      '?', /* U+D58A */
+      '?', /* U+D58B */
+      '?', /* U+D58C */
+      '?', /* U+D58D */
+      '?', /* U+D58E */
+      '?', /* U+D58F */
+      '?', /* U+D590 */
+      '?', /* U+D591 */
+      '?', /* U+D592 */
+      '?', /* U+D593 */
+      '?', /* U+D594 */
+      '?', /* U+D595 */
+      '?', /* U+D596 */
+      '?', /* U+D597 */
+      '?', /* U+D598 */
+      '?', /* U+D599 */
+      '?', /* U+D59A */
+      '?', /* U+D59B */
+      '?', /* U+D59C */
+      '?', /* U+D59D */
+      '?', /* U+D59E */
+      '?', /* U+D59F */
+      '?', /* U+D5A0 */
+      '?', /* U+D5A1 */
+      '?', /* U+D5A2 */
+      '?', /* U+D5A3 */
+      '?', /* U+D5A4 */
+      '?', /* U+D5A5 */
+      '?', /* U+D5A6 */
+      '?', /* U+D5A7 */
+      '?', /* U+D5A8 */
+      '?', /* U+D5A9 */
+      '?', /* U+D5AA */
+      '?', /* U+D5AB */
+      '?', /* U+D5AC */
+      '?', /* U+D5AD */
+      '?', /* U+D5AE */
+      '?', /* U+D5AF */
+      '?', /* U+D5B0 */
+      '?', /* U+D5B1 */
+      '?', /* U+D5B2 */
+      '?', /* U+D5B3 */
+      '?', /* U+D5B4 */
+      '?', /* U+D5B5 */
+      '?', /* U+D5B6 */
+      '?', /* U+D5B7 */
+      '?', /* U+D5B8 */
+      '?', /* U+D5B9 */
+      '?', /* U+D5BA */
+      '?', /* U+D5BB */
+      '?', /* U+D5BC */
+      '?', /* U+D5BD */
+      '?', /* U+D5BE */
+      '?', /* U+D5BF */
+      '?', /* U+D5C0 */
+      '?', /* U+D5C1 */
+      '?', /* U+D5C2 */
+      '?', /* U+D5C3 */
+      '?', /* U+D5C4 */
+      '?', /* U+D5C5 */
+      '?', /* U+D5C6 */
+      '?', /* U+D5C7 */
+      '?', /* U+D5C8 */
+      '?', /* U+D5C9 */
+      '?', /* U+D5CA */
+      '?', /* U+D5CB */
+      '?', /* U+D5CC */
+      '?', /* U+D5CD */
+      '?', /* U+D5CE */
+      '?', /* U+D5CF */
+      '?', /* U+D5D0 */
+      '?', /* U+D5D1 */
+      '?', /* U+D5D2 */
+      '?', /* U+D5D3 */
+      '?', /* U+D5D4 */
+      '?', /* U+D5D5 */
+      '?', /* U+D5D6 */
+      '?', /* U+D5D7 */
+      '?', /* U+D5D8 */
+      '?', /* U+D5D9 */
+      '?', /* U+D5DA */
+      '?', /* U+D5DB */
+      '?', /* U+D5DC */
+      '?', /* U+D5DD */
+      '?', /* U+D5DE */
+      '?', /* U+D5DF */
+      '?', /* U+D5E0 */
+      '?', /* U+D5E1 */
+      '?', /* U+D5E2 */
+      '?', /* U+D5E3 */
+      '?', /* U+D5E4 */
+      '?', /* U+D5E5 */
+      '?', /* U+D5E6 */
+      '?', /* U+D5E7 */
+      '?', /* U+D5E8 */
+      '?', /* U+D5E9 */
+      '?', /* U+D5EA */
+      '?', /* U+D5EB */
+      '?', /* U+D5EC */
+      '?', /* U+D5ED */
+      '?', /* U+D5EE */
+      '?', /* U+D5EF */
+      '?', /* U+D5F0 */
+      '?', /* U+D5F1 */
+      '?', /* U+D5F2 */
+      '?', /* U+D5F3 */
+      '?', /* U+D5F4 */
+      '?', /* U+D5F5 */
+      '?', /* U+D5F6 */
+      '?', /* U+D5F7 */
+      '?', /* U+D5F8 */
+      '?', /* U+D5F9 */
+      '?', /* U+D5FA */
+      '?', /* U+D5FB */
+      '?', /* U+D5FC */
+      '?', /* U+D5FD */
+      '?', /* U+D5FE */
+      '?', /* U+D5FF */
+      '?', /* U+D600 */
+      '?', /* U+D601 */
+      '?', /* U+D602 */
+      '?', /* U+D603 */
+      '?', /* U+D604 */
+      '?', /* U+D605 */
+      '?', /* U+D606 */
+      '?', /* U+D607 */
+      '?', /* U+D608 */
+      '?', /* U+D609 */
+      '?', /* U+D60A */
+      '?', /* U+D60B */
+      '?', /* U+D60C */
+      '?', /* U+D60D */
+      '?', /* U+D60E */
+      '?', /* U+D60F */
+      '?', /* U+D610 */
+      '?', /* U+D611 */
+      '?', /* U+D612 */
+      '?', /* U+D613 */
+      '?', /* U+D614 */
+      '?', /* U+D615 */
+      '?', /* U+D616 */
+      '?', /* U+D617 */
+      '?', /* U+D618 */
+      '?', /* U+D619 */
+      '?', /* U+D61A */
+      '?', /* U+D61B */
+      '?', /* U+D61C */
+      '?', /* U+D61D */
+      '?', /* U+D61E */
+      '?', /* U+D61F */
+      '?', /* U+D620 */
+      '?', /* U+D621 */
+      '?', /* U+D622 */
+      '?', /* U+D623 */
+      '?', /* U+D624 */
+      '?', /* U+D625 */
+      '?', /* U+D626 */
+      '?', /* U+D627 */
+      '?', /* U+D628 */
+      '?', /* U+D629 */
+      '?', /* U+D62A */
+      '?', /* U+D62B */
+      '?', /* U+D62C */
+      '?', /* U+D62D */
+      '?', /* U+D62E */
+      '?', /* U+D62F */
+      '?', /* U+D630 */
+      '?', /* U+D631 */
+      '?', /* U+D632 */
+      '?', /* U+D633 */
+      '?', /* U+D634 */
+      '?', /* U+D635 */
+      '?', /* U+D636 */
+      '?', /* U+D637 */
+      '?', /* U+D638 */
+      '?', /* U+D639 */
+      '?', /* U+D63A */
+      '?', /* U+D63B */
+      '?', /* U+D63C */
+      '?', /* U+D63D */
+      '?', /* U+D63E */
+      '?', /* U+D63F */
+      '?', /* U+D640 */
+      '?', /* U+D641 */
+      '?', /* U+D642 */
+      '?', /* U+D643 */
+      '?', /* U+D644 */
+      '?', /* U+D645 */
+      '?', /* U+D646 */
+      '?', /* U+D647 */
+      '?', /* U+D648 */
+      '?', /* U+D649 */
+      '?', /* U+D64A */
+      '?', /* U+D64B */
+      '?', /* U+D64C */
+      '?', /* U+D64D */
+      '?', /* U+D64E */
+      '?', /* U+D64F */
+      '?', /* U+D650 */
+      '?', /* U+D651 */
+      '?', /* U+D652 */
+      '?', /* U+D653 */
+      '?', /* U+D654 */
+      '?', /* U+D655 */
+      '?', /* U+D656 */
+      '?', /* U+D657 */
+      '?', /* U+D658 */
+      '?', /* U+D659 */
+      '?', /* U+D65A */
+      '?', /* U+D65B */
+      '?', /* U+D65C */
+      '?', /* U+D65D */
+      '?', /* U+D65E */
+      '?', /* U+D65F */
+      '?', /* U+D660 */
+      '?', /* U+D661 */
+      '?', /* U+D662 */
+      '?', /* U+D663 */
+      '?', /* U+D664 */
+      '?', /* U+D665 */
+      '?', /* U+D666 */
+      '?', /* U+D667 */
+      '?', /* U+D668 */
+      '?', /* U+D669 */
+      '?', /* U+D66A */
+      '?', /* U+D66B */
+      '?', /* U+D66C */
+      '?', /* U+D66D */
+      '?', /* U+D66E */
+      '?', /* U+D66F */
+      '?', /* U+D670 */
+      '?', /* U+D671 */
+      '?', /* U+D672 */
+      '?', /* U+D673 */
+      '?', /* U+D674 */
+      '?', /* U+D675 */
+      '?', /* U+D676 */
+      '?', /* U+D677 */
+      '?', /* U+D678 */
+      '?', /* U+D679 */
+      '?', /* U+D67A */
+      '?', /* U+D67B */
+      '?', /* U+D67C */
+      '?', /* U+D67D */
+      '?', /* U+D67E */
+      '?', /* U+D67F */
+      '?', /* U+D680 */
+      '?', /* U+D681 */
+      '?', /* U+D682 */
+      '?', /* U+D683 */
+      '?', /* U+D684 */
+      '?', /* U+D685 */
+      '?', /* U+D686 */
+      '?', /* U+D687 */
+      '?', /* U+D688 */
+      '?', /* U+D689 */
+      '?', /* U+D68A */
+      '?', /* U+D68B */
+      '?', /* U+D68C */
+      '?', /* U+D68D */
+      '?', /* U+D68E */
+      '?', /* U+D68F */
+      '?', /* U+D690 */
+      '?', /* U+D691 */
+      '?', /* U+D692 */
+      '?', /* U+D693 */
+      '?', /* U+D694 */
+      '?', /* U+D695 */
+      '?', /* U+D696 */
+      '?', /* U+D697 */
+      '?', /* U+D698 */
+      '?', /* U+D699 */
+      '?', /* U+D69A */
+      '?', /* U+D69B */
+      '?', /* U+D69C */
+      '?', /* U+D69D */
+      '?', /* U+D69E */
+      '?', /* U+D69F */
+      '?', /* U+D6A0 */
+      '?', /* U+D6A1 */
+      '?', /* U+D6A2 */
+      '?', /* U+D6A3 */
+      '?', /* U+D6A4 */
+      '?', /* U+D6A5 */
+      '?', /* U+D6A6 */
+      '?', /* U+D6A7 */
+      '?', /* U+D6A8 */
+      '?', /* U+D6A9 */
+      '?', /* U+D6AA */
+      '?', /* U+D6AB */
+      '?', /* U+D6AC */
+      '?', /* U+D6AD */
+      '?', /* U+D6AE */
+      '?', /* U+D6AF */
+      '?', /* U+D6B0 */
+      '?', /* U+D6B1 */
+      '?', /* U+D6B2 */
+      '?', /* U+D6B3 */
+      '?', /* U+D6B4 */
+      '?', /* U+D6B5 */
+      '?', /* U+D6B6 */
+      '?', /* U+D6B7 */
+      '?', /* U+D6B8 */
+      '?', /* U+D6B9 */
+      '?', /* U+D6BA */
+      '?', /* U+D6BB */
+      '?', /* U+D6BC */
+      '?', /* U+D6BD */
+      '?', /* U+D6BE */
+      '?', /* U+D6BF */
+      '?', /* U+D6C0 */
+      '?', /* U+D6C1 */
+      '?', /* U+D6C2 */
+      '?', /* U+D6C3 */
+      '?', /* U+D6C4 */
+      '?', /* U+D6C5 */
+      '?', /* U+D6C6 */
+      '?', /* U+D6C7 */
+      '?', /* U+D6C8 */
+      '?', /* U+D6C9 */
+      '?', /* U+D6CA */
+      '?', /* U+D6CB */
+      '?', /* U+D6CC */
+      '?', /* U+D6CD */
+      '?', /* U+D6CE */
+      '?', /* U+D6CF */
+      '?', /* U+D6D0 */
+      '?', /* U+D6D1 */
+      '?', /* U+D6D2 */
+      '?', /* U+D6D3 */
+      '?', /* U+D6D4 */
+      '?', /* U+D6D5 */
+      '?', /* U+D6D6 */
+      '?', /* U+D6D7 */
+      '?', /* U+D6D8 */
+      '?', /* U+D6D9 */
+      '?', /* U+D6DA */
+      '?', /* U+D6DB */
+      '?', /* U+D6DC */
+      '?', /* U+D6DD */
+      '?', /* U+D6DE */
+      '?', /* U+D6DF */
+      '?', /* U+D6E0 */
+      '?', /* U+D6E1 */
+      '?', /* U+D6E2 */
+      '?', /* U+D6E3 */
+      '?', /* U+D6E4 */
+      '?', /* U+D6E5 */
+      '?', /* U+D6E6 */
+      '?', /* U+D6E7 */
+      '?', /* U+D6E8 */
+      '?', /* U+D6E9 */
+      '?', /* U+D6EA */
+      '?', /* U+D6EB */
+      '?', /* U+D6EC */
+      '?', /* U+D6ED */
+      '?', /* U+D6EE */
+      '?', /* U+D6EF */
+      '?', /* U+D6F0 */
+      '?', /* U+D6F1 */
+      '?', /* U+D6F2 */
+      '?', /* U+D6F3 */
+      '?', /* U+D6F4 */
+      '?', /* U+D6F5 */
+      '?', /* U+D6F6 */
+      '?', /* U+D6F7 */
+      '?', /* U+D6F8 */
+      '?', /* U+D6F9 */
+      '?', /* U+D6FA */
+      '?', /* U+D6FB */
+      '?', /* U+D6FC */
+      '?', /* U+D6FD */
+      '?', /* U+D6FE */
+      '?', /* U+D6FF */
+      '?', /* U+D700 */
+      '?', /* U+D701 */
+      '?', /* U+D702 */
+      '?', /* U+D703 */
+      '?', /* U+D704 */
+      '?', /* U+D705 */
+      '?', /* U+D706 */
+      '?', /* U+D707 */
+      '?', /* U+D708 */
+      '?', /* U+D709 */
+      '?', /* U+D70A */
+      '?', /* U+D70B */
+      '?', /* U+D70C */
+      '?', /* U+D70D */
+      '?', /* U+D70E */
+      '?', /* U+D70F */
+      '?', /* U+D710 */
+      '?', /* U+D711 */
+      '?', /* U+D712 */
+      '?', /* U+D713 */
+      '?', /* U+D714 */
+      '?', /* U+D715 */
+      '?', /* U+D716 */
+      '?', /* U+D717 */
+      '?', /* U+D718 */
+      '?', /* U+D719 */
+      '?', /* U+D71A */
+      '?', /* U+D71B */
+      '?', /* U+D71C */
+      '?', /* U+D71D */
+      '?', /* U+D71E */
+      '?', /* U+D71F */
+      '?', /* U+D720 */
+      '?', /* U+D721 */
+      '?', /* U+D722 */
+      '?', /* U+D723 */
+      '?', /* U+D724 */
+      '?', /* U+D725 */
+      '?', /* U+D726 */
+      '?', /* U+D727 */
+      '?', /* U+D728 */
+      '?', /* U+D729 */
+      '?', /* U+D72A */
+      '?', /* U+D72B */
+      '?', /* U+D72C */
+      '?', /* U+D72D */
+      '?', /* U+D72E */
+      '?', /* U+D72F */
+      '?', /* U+D730 */
+      '?', /* U+D731 */
+      '?', /* U+D732 */
+      '?', /* U+D733 */
+      '?', /* U+D734 */
+      '?', /* U+D735 */
+      '?', /* U+D736 */
+      '?', /* U+D737 */
+      '?', /* U+D738 */
+      '?', /* U+D739 */
+      '?', /* U+D73A */
+      '?', /* U+D73B */
+      '?', /* U+D73C */
+      '?', /* U+D73D */
+      '?', /* U+D73E */
+      '?', /* U+D73F */
+      '?', /* U+D740 */
+      '?', /* U+D741 */
+      '?', /* U+D742 */
+      '?', /* U+D743 */
+      '?', /* U+D744 */
+      '?', /* U+D745 */
+      '?', /* U+D746 */
+      '?', /* U+D747 */
+      '?', /* U+D748 */
+      '?', /* U+D749 */
+      '?', /* U+D74A */
+      '?', /* U+D74B */
+      '?', /* U+D74C */
+      '?', /* U+D74D */
+      '?', /* U+D74E */
+      '?', /* U+D74F */
+      '?', /* U+D750 */
+      '?', /* U+D751 */
+      '?', /* U+D752 */
+      '?', /* U+D753 */
+      '?', /* U+D754 */
+      '?', /* U+D755 */
+      '?', /* U+D756 */
+      '?', /* U+D757 */
+      '?', /* U+D758 */
+      '?', /* U+D759 */
+      '?', /* U+D75A */
+      '?', /* U+D75B */
+      '?', /* U+D75C */
+      '?', /* U+D75D */
+      '?', /* U+D75E */
+      '?', /* U+D75F */
+      '?', /* U+D760 */
+      '?', /* U+D761 */
+      '?', /* U+D762 */
+      '?', /* U+D763 */
+      '?', /* U+D764 */
+      '?', /* U+D765 */
+      '?', /* U+D766 */
+      '?', /* U+D767 */
+      '?', /* U+D768 */
+      '?', /* U+D769 */
+      '?', /* U+D76A */
+      '?', /* U+D76B */
+      '?', /* U+D76C */
+      '?', /* U+D76D */
+      '?', /* U+D76E */
+      '?', /* U+D76F */
+      '?', /* U+D770 */
+      '?', /* U+D771 */
+      '?', /* U+D772 */
+      '?', /* U+D773 */
+      '?', /* U+D774 */
+      '?', /* U+D775 */
+      '?', /* U+D776 */
+      '?', /* U+D777 */
+      '?', /* U+D778 */
+      '?', /* U+D779 */
+      '?', /* U+D77A */
+      '?', /* U+D77B */
+      '?', /* U+D77C */
+      '?', /* U+D77D */
+      '?', /* U+D77E */
+      '?', /* U+D77F */
+      '?', /* U+D780 */
+      '?', /* U+D781 */
+      '?', /* U+D782 */
+      '?', /* U+D783 */
+      '?', /* U+D784 */
+      '?', /* U+D785 */
+      '?', /* U+D786 */
+      '?', /* U+D787 */
+      '?', /* U+D788 */
+      '?', /* U+D789 */
+      '?', /* U+D78A */
+      '?', /* U+D78B */
+      '?', /* U+D78C */
+      '?', /* U+D78D */
+      '?', /* U+D78E */
+      '?', /* U+D78F */
+      '?', /* U+D790 */
+      '?', /* U+D791 */
+      '?', /* U+D792 */
+      '?', /* U+D793 */
+      '?', /* U+D794 */
+      '?', /* U+D795 */
+      '?', /* U+D796 */
+      '?', /* U+D797 */
+      '?', /* U+D798 */
+      '?', /* U+D799 */
+      '?', /* U+D79A */
+      '?', /* U+D79B */
+      '?', /* U+D79C */
+      '?', /* U+D79D */
+      '?', /* U+D79E */
+      '?', /* U+D79F */
+      '?', /* U+D7A0 */
+      '?', /* U+D7A1 */
+      '?', /* U+D7A2 */
+      '?', /* U+D7A3 */
+      '?', /* U+D7A4 */
+      '?', /* U+D7A5 */
+      '?', /* U+D7A6 */
+      '?', /* U+D7A7 */
+      '?', /* U+D7A8 */
+      '?', /* U+D7A9 */
+      '?', /* U+D7AA */
+      '?', /* U+D7AB */
+      '?', /* U+D7AC */
+      '?', /* U+D7AD */
+      '?', /* U+D7AE */
+      '?', /* U+D7AF */
+      '?', /* U+D7B0 */
+      '?', /* U+D7B1 */
+      '?', /* U+D7B2 */
+      '?', /* U+D7B3 */
+      '?', /* U+D7B4 */
+      '?', /* U+D7B5 */
+      '?', /* U+D7B6 */
+      '?', /* U+D7B7 */
+      '?', /* U+D7B8 */
+      '?', /* U+D7B9 */
+      '?', /* U+D7BA */
+      '?', /* U+D7BB */
+      '?', /* U+D7BC */
+      '?', /* U+D7BD */
+      '?', /* U+D7BE */
+      '?', /* U+D7BF */
+      '?', /* U+D7C0 */
+      '?', /* U+D7C1 */
+      '?', /* U+D7C2 */
+      '?', /* U+D7C3 */
+      '?', /* U+D7C4 */
+      '?', /* U+D7C5 */
+      '?', /* U+D7C6 */
+      '?', /* U+D7C7 */
+      '?', /* U+D7C8 */
+      '?', /* U+D7C9 */
+      '?', /* U+D7CA */
+      '?', /* U+D7CB */
+      '?', /* U+D7CC */
+      '?', /* U+D7CD */
+      '?', /* U+D7CE */
+      '?', /* U+D7CF */
+      '?', /* U+D7D0 */
+      '?', /* U+D7D1 */
+      '?', /* U+D7D2 */
+      '?', /* U+D7D3 */
+      '?', /* U+D7D4 */
+      '?', /* U+D7D5 */
+      '?', /* U+D7D6 */
+      '?', /* U+D7D7 */
+      '?', /* U+D7D8 */
+      '?', /* U+D7D9 */
+      '?', /* U+D7DA */
+      '?', /* U+D7DB */
+      '?', /* U+D7DC */
+      '?', /* U+D7DD */
+      '?', /* U+D7DE */
+      '?', /* U+D7DF */
+      '?', /* U+D7E0 */
+      '?', /* U+D7E1 */
+      '?', /* U+D7E2 */
+      '?', /* U+D7E3 */
+      '?', /* U+D7E4 */
+      '?', /* U+D7E5 */
+      '?', /* U+D7E6 */
+      '?', /* U+D7E7 */
+      '?', /* U+D7E8 */
+      '?', /* U+D7E9 */
+      '?', /* U+D7EA */
+      '?', /* U+D7EB */
+      '?', /* U+D7EC */
+      '?', /* U+D7ED */
+      '?', /* U+D7EE */
+      '?', /* U+D7EF */
+      '?', /* U+D7F0 */
+      '?', /* U+D7F1 */
+      '?', /* U+D7F2 */
+      '?', /* U+D7F3 */
+      '?', /* U+D7F4 */
+      '?', /* U+D7F5 */
+      '?', /* U+D7F6 */
+      '?', /* U+D7F7 */
+      '?', /* U+D7F8 */
+      '?', /* U+D7F9 */
+      '?', /* U+D7FA */
+      '?', /* U+D7FB */
+      '?', /* U+D7FC */
+      '?', /* U+D7FD */
+      '?', /* U+D7FE */
+      '?', /* U+D7FF */
+      '?', /* U+D800 */
+      '?', /* U+D801 */
+      '?', /* U+D802 */
+      '?', /* U+D803 */
+      '?', /* U+D804 */
+      '?', /* U+D805 */
+      '?', /* U+D806 */
+      '?', /* U+D807 */
+      '?', /* U+D808 */
+      '?', /* U+D809 */
+      '?', /* U+D80A */
+      '?', /* U+D80B */
+      '?', /* U+D80C */
+      '?', /* U+D80D */
+      '?', /* U+D80E */
+      '?', /* U+D80F */
+      '?', /* U+D810 */
+      '?', /* U+D811 */
+      '?', /* U+D812 */
+      '?', /* U+D813 */
+      '?', /* U+D814 */
+      '?', /* U+D815 */
+      '?', /* U+D816 */
+      '?', /* U+D817 */
+      '?', /* U+D818 */
+      '?', /* U+D819 */
+      '?', /* U+D81A */
+      '?', /* U+D81B */
+      '?', /* U+D81C */
+      '?', /* U+D81D */
+      '?', /* U+D81E */
+      '?', /* U+D81F */
+      '?', /* U+D820 */
+      '?', /* U+D821 */
+      '?', /* U+D822 */
+      '?', /* U+D823 */
+      '?', /* U+D824 */
+      '?', /* U+D825 */
+      '?', /* U+D826 */
+      '?', /* U+D827 */
+      '?', /* U+D828 */
+      '?', /* U+D829 */
+      '?', /* U+D82A */
+      '?', /* U+D82B */
+      '?', /* U+D82C */
+      '?', /* U+D82D */
+      '?', /* U+D82E */
+      '?', /* U+D82F */
+      '?', /* U+D830 */
+      '?', /* U+D831 */
+      '?', /* U+D832 */
+      '?', /* U+D833 */
+      '?', /* U+D834 */
+      '?', /* U+D835 */
+      '?', /* U+D836 */
+      '?', /* U+D837 */
+      '?', /* U+D838 */
+      '?', /* U+D839 */
+      '?', /* U+D83A */
+      '?', /* U+D83B */
+      '?', /* U+D83C */
+      '?', /* U+D83D */
+      '?', /* U+D83E */
+      '?', /* U+D83F */
+      '?', /* U+D840 */
+      '?', /* U+D841 */
+      '?', /* U+D842 */
+      '?', /* U+D843 */
+      '?', /* U+D844 */
+      '?', /* U+D845 */
+      '?', /* U+D846 */
+      '?', /* U+D847 */
+      '?', /* U+D848 */
+      '?', /* U+D849 */
+      '?', /* U+D84A */
+      '?', /* U+D84B */
+      '?', /* U+D84C */
+      '?', /* U+D84D */
+      '?', /* U+D84E */
+      '?', /* U+D84F */
+      '?', /* U+D850 */
+      '?', /* U+D851 */
+      '?', /* U+D852 */
+      '?', /* U+D853 */
+      '?', /* U+D854 */
+      '?', /* U+D855 */
+      '?', /* U+D856 */
+      '?', /* U+D857 */
+      '?', /* U+D858 */
+      '?', /* U+D859 */
+      '?', /* U+D85A */
+      '?', /* U+D85B */
+      '?', /* U+D85C */
+      '?', /* U+D85D */
+      '?', /* U+D85E */
+      '?', /* U+D85F */
+      '?', /* U+D860 */
+      '?', /* U+D861 */
+      '?', /* U+D862 */
+      '?', /* U+D863 */
+      '?', /* U+D864 */
+      '?', /* U+D865 */
+      '?', /* U+D866 */
+      '?', /* U+D867 */
+      '?', /* U+D868 */
+      '?', /* U+D869 */
+      '?', /* U+D86A */
+      '?', /* U+D86B */
+      '?', /* U+D86C */
+      '?', /* U+D86D */
+      '?', /* U+D86E */
+      '?', /* U+D86F */
+      '?', /* U+D870 */
+      '?', /* U+D871 */
+      '?', /* U+D872 */
+      '?', /* U+D873 */
+      '?', /* U+D874 */
+      '?', /* U+D875 */
+      '?', /* U+D876 */
+      '?', /* U+D877 */
+      '?', /* U+D878 */
+      '?', /* U+D879 */
+      '?', /* U+D87A */
+      '?', /* U+D87B */
+      '?', /* U+D87C */
+      '?', /* U+D87D */
+      '?', /* U+D87E */
+      '?', /* U+D87F */
+      '?', /* U+D880 */
+      '?', /* U+D881 */
+      '?', /* U+D882 */
+      '?', /* U+D883 */
+      '?', /* U+D884 */
+      '?', /* U+D885 */
+      '?', /* U+D886 */
+      '?', /* U+D887 */
+      '?', /* U+D888 */
+      '?', /* U+D889 */
+      '?', /* U+D88A */
+      '?', /* U+D88B */
+      '?', /* U+D88C */
+      '?', /* U+D88D */
+      '?', /* U+D88E */
+      '?', /* U+D88F */
+      '?', /* U+D890 */
+      '?', /* U+D891 */
+      '?', /* U+D892 */
+      '?', /* U+D893 */
+      '?', /* U+D894 */
+      '?', /* U+D895 */
+      '?', /* U+D896 */
+      '?', /* U+D897 */
+      '?', /* U+D898 */
+      '?', /* U+D899 */
+      '?', /* U+D89A */
+      '?', /* U+D89B */
+      '?', /* U+D89C */
+      '?', /* U+D89D */
+      '?', /* U+D89E */
+      '?', /* U+D89F */
+      '?', /* U+D8A0 */
+      '?', /* U+D8A1 */
+      '?', /* U+D8A2 */
+      '?', /* U+D8A3 */
+      '?', /* U+D8A4 */
+      '?', /* U+D8A5 */
+      '?', /* U+D8A6 */
+      '?', /* U+D8A7 */
+      '?', /* U+D8A8 */
+      '?', /* U+D8A9 */
+      '?', /* U+D8AA */
+      '?', /* U+D8AB */
+      '?', /* U+D8AC */
+      '?', /* U+D8AD */
+      '?', /* U+D8AE */
+      '?', /* U+D8AF */
+      '?', /* U+D8B0 */
+      '?', /* U+D8B1 */
+      '?', /* U+D8B2 */
+      '?', /* U+D8B3 */
+      '?', /* U+D8B4 */
+      '?', /* U+D8B5 */
+      '?', /* U+D8B6 */
+      '?', /* U+D8B7 */
+      '?', /* U+D8B8 */
+      '?', /* U+D8B9 */
+      '?', /* U+D8BA */
+      '?', /* U+D8BB */
+      '?', /* U+D8BC */
+      '?', /* U+D8BD */
+      '?', /* U+D8BE */
+      '?', /* U+D8BF */
+      '?', /* U+D8C0 */
+      '?', /* U+D8C1 */
+      '?', /* U+D8C2 */
+      '?', /* U+D8C3 */
+      '?', /* U+D8C4 */
+      '?', /* U+D8C5 */
+      '?', /* U+D8C6 */
+      '?', /* U+D8C7 */
+      '?', /* U+D8C8 */
+      '?', /* U+D8C9 */
+      '?', /* U+D8CA */
+      '?', /* U+D8CB */
+      '?', /* U+D8CC */
+      '?', /* U+D8CD */
+      '?', /* U+D8CE */
+      '?', /* U+D8CF */
+      '?', /* U+D8D0 */
+      '?', /* U+D8D1 */
+      '?', /* U+D8D2 */
+      '?', /* U+D8D3 */
+      '?', /* U+D8D4 */
+      '?', /* U+D8D5 */
+      '?', /* U+D8D6 */
+      '?', /* U+D8D7 */
+      '?', /* U+D8D8 */
+      '?', /* U+D8D9 */
+      '?', /* U+D8DA */
+      '?', /* U+D8DB */
+      '?', /* U+D8DC */
+      '?', /* U+D8DD */
+      '?', /* U+D8DE */
+      '?', /* U+D8DF */
+      '?', /* U+D8E0 */
+      '?', /* U+D8E1 */
+      '?', /* U+D8E2 */
+      '?', /* U+D8E3 */
+      '?', /* U+D8E4 */
+      '?', /* U+D8E5 */
+      '?', /* U+D8E6 */
+      '?', /* U+D8E7 */
+      '?', /* U+D8E8 */
+      '?', /* U+D8E9 */
+      '?', /* U+D8EA */
+      '?', /* U+D8EB */
+      '?', /* U+D8EC */
+      '?', /* U+D8ED */
+      '?', /* U+D8EE */
+      '?', /* U+D8EF */
+      '?', /* U+D8F0 */
+      '?', /* U+D8F1 */
+      '?', /* U+D8F2 */
+      '?', /* U+D8F3 */
+      '?', /* U+D8F4 */
+      '?', /* U+D8F5 */
+      '?', /* U+D8F6 */
+      '?', /* U+D8F7 */
+      '?', /* U+D8F8 */
+      '?', /* U+D8F9 */
+      '?', /* U+D8FA */
+      '?', /* U+D8FB */
+      '?', /* U+D8FC */
+      '?', /* U+D8FD */
+      '?', /* U+D8FE */
+      '?', /* U+D8FF */
+      '?', /* U+D900 */
+      '?', /* U+D901 */
+      '?', /* U+D902 */
+      '?', /* U+D903 */
+      '?', /* U+D904 */
+      '?', /* U+D905 */
+      '?', /* U+D906 */
+      '?', /* U+D907 */
+      '?', /* U+D908 */
+      '?', /* U+D909 */
+      '?', /* U+D90A */
+      '?', /* U+D90B */
+      '?', /* U+D90C */
+      '?', /* U+D90D */
+      '?', /* U+D90E */
+      '?', /* U+D90F */
+      '?', /* U+D910 */
+      '?', /* U+D911 */
+      '?', /* U+D912 */
+      '?', /* U+D913 */
+      '?', /* U+D914 */
+      '?', /* U+D915 */
+      '?', /* U+D916 */
+      '?', /* U+D917 */
+      '?', /* U+D918 */
+      '?', /* U+D919 */
+      '?', /* U+D91A */
+      '?', /* U+D91B */
+      '?', /* U+D91C */
+      '?', /* U+D91D */
+      '?', /* U+D91E */
+      '?', /* U+D91F */
+      '?', /* U+D920 */
+      '?', /* U+D921 */
+      '?', /* U+D922 */
+      '?', /* U+D923 */
+      '?', /* U+D924 */
+      '?', /* U+D925 */
+      '?', /* U+D926 */
+      '?', /* U+D927 */
+      '?', /* U+D928 */
+      '?', /* U+D929 */
+      '?', /* U+D92A */
+      '?', /* U+D92B */
+      '?', /* U+D92C */
+      '?', /* U+D92D */
+      '?', /* U+D92E */
+      '?', /* U+D92F */
+      '?', /* U+D930 */
+      '?', /* U+D931 */
+      '?', /* U+D932 */
+      '?', /* U+D933 */
+      '?', /* U+D934 */
+      '?', /* U+D935 */
+      '?', /* U+D936 */
+      '?', /* U+D937 */
+      '?', /* U+D938 */
+      '?', /* U+D939 */
+      '?', /* U+D93A */
+      '?', /* U+D93B */
+      '?', /* U+D93C */
+      '?', /* U+D93D */
+      '?', /* U+D93E */
+      '?', /* U+D93F */
+      '?', /* U+D940 */
+      '?', /* U+D941 */
+      '?', /* U+D942 */
+      '?', /* U+D943 */
+      '?', /* U+D944 */
+      '?', /* U+D945 */
+      '?', /* U+D946 */
+      '?', /* U+D947 */
+      '?', /* U+D948 */
+      '?', /* U+D949 */
+      '?', /* U+D94A */
+      '?', /* U+D94B */
+      '?', /* U+D94C */
+      '?', /* U+D94D */
+      '?', /* U+D94E */
+      '?', /* U+D94F */
+      '?', /* U+D950 */
+      '?', /* U+D951 */
+      '?', /* U+D952 */
+      '?', /* U+D953 */
+      '?', /* U+D954 */
+      '?', /* U+D955 */
+      '?', /* U+D956 */
+      '?', /* U+D957 */
+      '?', /* U+D958 */
+      '?', /* U+D959 */
+      '?', /* U+D95A */
+      '?', /* U+D95B */
+      '?', /* U+D95C */
+      '?', /* U+D95D */
+      '?', /* U+D95E */
+      '?', /* U+D95F */
+      '?', /* U+D960 */
+      '?', /* U+D961 */
+      '?', /* U+D962 */
+      '?', /* U+D963 */
+      '?', /* U+D964 */
+      '?', /* U+D965 */
+      '?', /* U+D966 */
+      '?', /* U+D967 */
+      '?', /* U+D968 */
+      '?', /* U+D969 */
+      '?', /* U+D96A */
+      '?', /* U+D96B */
+      '?', /* U+D96C */
+      '?', /* U+D96D */
+      '?', /* U+D96E */
+      '?', /* U+D96F */
+      '?', /* U+D970 */
+      '?', /* U+D971 */
+      '?', /* U+D972 */
+      '?', /* U+D973 */
+      '?', /* U+D974 */
+      '?', /* U+D975 */
+      '?', /* U+D976 */
+      '?', /* U+D977 */
+      '?', /* U+D978 */
+      '?', /* U+D979 */
+      '?', /* U+D97A */
+      '?', /* U+D97B */
+      '?', /* U+D97C */
+      '?', /* U+D97D */
+      '?', /* U+D97E */
+      '?', /* U+D97F */
+      '?', /* U+D980 */
+      '?', /* U+D981 */
+      '?', /* U+D982 */
+      '?', /* U+D983 */
+      '?', /* U+D984 */
+      '?', /* U+D985 */
+      '?', /* U+D986 */
+      '?', /* U+D987 */
+      '?', /* U+D988 */
+      '?', /* U+D989 */
+      '?', /* U+D98A */
+      '?', /* U+D98B */
+      '?', /* U+D98C */
+      '?', /* U+D98D */
+      '?', /* U+D98E */
+      '?', /* U+D98F */
+      '?', /* U+D990 */
+      '?', /* U+D991 */
+      '?', /* U+D992 */
+      '?', /* U+D993 */
+      '?', /* U+D994 */
+      '?', /* U+D995 */
+      '?', /* U+D996 */
+      '?', /* U+D997 */
+      '?', /* U+D998 */
+      '?', /* U+D999 */
+      '?', /* U+D99A */
+      '?', /* U+D99B */
+      '?', /* U+D99C */
+      '?', /* U+D99D */
+      '?', /* U+D99E */
+      '?', /* U+D99F */
+      '?', /* U+D9A0 */
+      '?', /* U+D9A1 */
+      '?', /* U+D9A2 */
+      '?', /* U+D9A3 */
+      '?', /* U+D9A4 */
+      '?', /* U+D9A5 */
+      '?', /* U+D9A6 */
+      '?', /* U+D9A7 */
+      '?', /* U+D9A8 */
+      '?', /* U+D9A9 */
+      '?', /* U+D9AA */
+      '?', /* U+D9AB */
+      '?', /* U+D9AC */
+      '?', /* U+D9AD */
+      '?', /* U+D9AE */
+      '?', /* U+D9AF */
+      '?', /* U+D9B0 */
+      '?', /* U+D9B1 */
+      '?', /* U+D9B2 */
+      '?', /* U+D9B3 */
+      '?', /* U+D9B4 */
+      '?', /* U+D9B5 */
+      '?', /* U+D9B6 */
+      '?', /* U+D9B7 */
+      '?', /* U+D9B8 */
+      '?', /* U+D9B9 */
+      '?', /* U+D9BA */
+      '?', /* U+D9BB */
+      '?', /* U+D9BC */
+      '?', /* U+D9BD */
+      '?', /* U+D9BE */
+      '?', /* U+D9BF */
+      '?', /* U+D9C0 */
+      '?', /* U+D9C1 */
+      '?', /* U+D9C2 */
+      '?', /* U+D9C3 */
+      '?', /* U+D9C4 */
+      '?', /* U+D9C5 */
+      '?', /* U+D9C6 */
+      '?', /* U+D9C7 */
+      '?', /* U+D9C8 */
+      '?', /* U+D9C9 */
+      '?', /* U+D9CA */
+      '?', /* U+D9CB */
+      '?', /* U+D9CC */
+      '?', /* U+D9CD */
+      '?', /* U+D9CE */
+      '?', /* U+D9CF */
+      '?', /* U+D9D0 */
+      '?', /* U+D9D1 */
+      '?', /* U+D9D2 */
+      '?', /* U+D9D3 */
+      '?', /* U+D9D4 */
+      '?', /* U+D9D5 */
+      '?', /* U+D9D6 */
+      '?', /* U+D9D7 */
+      '?', /* U+D9D8 */
+      '?', /* U+D9D9 */
+      '?', /* U+D9DA */
+      '?', /* U+D9DB */
+      '?', /* U+D9DC */
+      '?', /* U+D9DD */
+      '?', /* U+D9DE */
+      '?', /* U+D9DF */
+      '?', /* U+D9E0 */
+      '?', /* U+D9E1 */
+      '?', /* U+D9E2 */
+      '?', /* U+D9E3 */
+      '?', /* U+D9E4 */
+      '?', /* U+D9E5 */
+      '?', /* U+D9E6 */
+      '?', /* U+D9E7 */
+      '?', /* U+D9E8 */
+      '?', /* U+D9E9 */
+      '?', /* U+D9EA */
+      '?', /* U+D9EB */
+      '?', /* U+D9EC */
+      '?', /* U+D9ED */
+      '?', /* U+D9EE */
+      '?', /* U+D9EF */
+      '?', /* U+D9F0 */
+      '?', /* U+D9F1 */
+      '?', /* U+D9F2 */
+      '?', /* U+D9F3 */
+      '?', /* U+D9F4 */
+      '?', /* U+D9F5 */
+      '?', /* U+D9F6 */
+      '?', /* U+D9F7 */
+      '?', /* U+D9F8 */
+      '?', /* U+D9F9 */
+      '?', /* U+D9FA */
+      '?', /* U+D9FB */
+      '?', /* U+D9FC */
+      '?', /* U+D9FD */
+      '?', /* U+D9FE */
+      '?', /* U+D9FF */
+      '?', /* U+DA00 */
+      '?', /* U+DA01 */
+      '?', /* U+DA02 */
+      '?', /* U+DA03 */
+      '?', /* U+DA04 */
+      '?', /* U+DA05 */
+      '?', /* U+DA06 */
+      '?', /* U+DA07 */
+      '?', /* U+DA08 */
+      '?', /* U+DA09 */
+      '?', /* U+DA0A */
+      '?', /* U+DA0B */
+      '?', /* U+DA0C */
+      '?', /* U+DA0D */
+      '?', /* U+DA0E */
+      '?', /* U+DA0F */
+      '?', /* U+DA10 */
+      '?', /* U+DA11 */
+      '?', /* U+DA12 */
+      '?', /* U+DA13 */
+      '?', /* U+DA14 */
+      '?', /* U+DA15 */
+      '?', /* U+DA16 */
+      '?', /* U+DA17 */
+      '?', /* U+DA18 */
+      '?', /* U+DA19 */
+      '?', /* U+DA1A */
+      '?', /* U+DA1B */
+      '?', /* U+DA1C */
+      '?', /* U+DA1D */
+      '?', /* U+DA1E */
+      '?', /* U+DA1F */
+      '?', /* U+DA20 */
+      '?', /* U+DA21 */
+      '?', /* U+DA22 */
+      '?', /* U+DA23 */
+      '?', /* U+DA24 */
+      '?', /* U+DA25 */
+      '?', /* U+DA26 */
+      '?', /* U+DA27 */
+      '?', /* U+DA28 */
+      '?', /* U+DA29 */
+      '?', /* U+DA2A */
+      '?', /* U+DA2B */
+      '?', /* U+DA2C */
+      '?', /* U+DA2D */
+      '?', /* U+DA2E */
+      '?', /* U+DA2F */
+      '?', /* U+DA30 */
+      '?', /* U+DA31 */
+      '?', /* U+DA32 */
+      '?', /* U+DA33 */
+      '?', /* U+DA34 */
+      '?', /* U+DA35 */
+      '?', /* U+DA36 */
+      '?', /* U+DA37 */
+      '?', /* U+DA38 */
+      '?', /* U+DA39 */
+      '?', /* U+DA3A */
+      '?', /* U+DA3B */
+      '?', /* U+DA3C */
+      '?', /* U+DA3D */
+      '?', /* U+DA3E */
+      '?', /* U+DA3F */
+      '?', /* U+DA40 */
+      '?', /* U+DA41 */
+      '?', /* U+DA42 */
+      '?', /* U+DA43 */
+      '?', /* U+DA44 */
+      '?', /* U+DA45 */
+      '?', /* U+DA46 */
+      '?', /* U+DA47 */
+      '?', /* U+DA48 */
+      '?', /* U+DA49 */
+      '?', /* U+DA4A */
+      '?', /* U+DA4B */
+      '?', /* U+DA4C */
+      '?', /* U+DA4D */
+      '?', /* U+DA4E */
+      '?', /* U+DA4F */
+      '?', /* U+DA50 */
+      '?', /* U+DA51 */
+      '?', /* U+DA52 */
+      '?', /* U+DA53 */
+      '?', /* U+DA54 */
+      '?', /* U+DA55 */
+      '?', /* U+DA56 */
+      '?', /* U+DA57 */
+      '?', /* U+DA58 */
+      '?', /* U+DA59 */
+      '?', /* U+DA5A */
+      '?', /* U+DA5B */
+      '?', /* U+DA5C */
+      '?', /* U+DA5D */
+      '?', /* U+DA5E */
+      '?', /* U+DA5F */
+      '?', /* U+DA60 */
+      '?', /* U+DA61 */
+      '?', /* U+DA62 */
+      '?', /* U+DA63 */
+      '?', /* U+DA64 */
+      '?', /* U+DA65 */
+      '?', /* U+DA66 */
+      '?', /* U+DA67 */
+      '?', /* U+DA68 */
+      '?', /* U+DA69 */
+      '?', /* U+DA6A */
+      '?', /* U+DA6B */
+      '?', /* U+DA6C */
+      '?', /* U+DA6D */
+      '?', /* U+DA6E */
+      '?', /* U+DA6F */
+      '?', /* U+DA70 */
+      '?', /* U+DA71 */
+      '?', /* U+DA72 */
+      '?', /* U+DA73 */
+      '?', /* U+DA74 */
+      '?', /* U+DA75 */
+      '?', /* U+DA76 */
+      '?', /* U+DA77 */
+      '?', /* U+DA78 */
+      '?', /* U+DA79 */
+      '?', /* U+DA7A */
+      '?', /* U+DA7B */
+      '?', /* U+DA7C */
+      '?', /* U+DA7D */
+      '?', /* U+DA7E */
+      '?', /* U+DA7F */
+      '?', /* U+DA80 */
+      '?', /* U+DA81 */
+      '?', /* U+DA82 */
+      '?', /* U+DA83 */
+      '?', /* U+DA84 */
+      '?', /* U+DA85 */
+      '?', /* U+DA86 */
+      '?', /* U+DA87 */
+      '?', /* U+DA88 */
+      '?', /* U+DA89 */
+      '?', /* U+DA8A */
+      '?', /* U+DA8B */
+      '?', /* U+DA8C */
+      '?', /* U+DA8D */
+      '?', /* U+DA8E */
+      '?', /* U+DA8F */
+      '?', /* U+DA90 */
+      '?', /* U+DA91 */
+      '?', /* U+DA92 */
+      '?', /* U+DA93 */
+      '?', /* U+DA94 */
+      '?', /* U+DA95 */
+      '?', /* U+DA96 */
+      '?', /* U+DA97 */
+      '?', /* U+DA98 */
+      '?', /* U+DA99 */
+      '?', /* U+DA9A */
+      '?', /* U+DA9B */
+      '?', /* U+DA9C */
+      '?', /* U+DA9D */
+      '?', /* U+DA9E */
+      '?', /* U+DA9F */
+      '?', /* U+DAA0 */
+      '?', /* U+DAA1 */
+      '?', /* U+DAA2 */
+      '?', /* U+DAA3 */
+      '?', /* U+DAA4 */
+      '?', /* U+DAA5 */
+      '?', /* U+DAA6 */
+      '?', /* U+DAA7 */
+      '?', /* U+DAA8 */
+      '?', /* U+DAA9 */
+      '?', /* U+DAAA */
+      '?', /* U+DAAB */
+      '?', /* U+DAAC */
+      '?', /* U+DAAD */
+      '?', /* U+DAAE */
+      '?', /* U+DAAF */
+      '?', /* U+DAB0 */
+      '?', /* U+DAB1 */
+      '?', /* U+DAB2 */
+      '?', /* U+DAB3 */
+      '?', /* U+DAB4 */
+      '?', /* U+DAB5 */
+      '?', /* U+DAB6 */
+      '?', /* U+DAB7 */
+      '?', /* U+DAB8 */
+      '?', /* U+DAB9 */
+      '?', /* U+DABA */
+      '?', /* U+DABB */
+      '?', /* U+DABC */
+      '?', /* U+DABD */
+      '?', /* U+DABE */
+      '?', /* U+DABF */
+      '?', /* U+DAC0 */
+      '?', /* U+DAC1 */
+      '?', /* U+DAC2 */
+      '?', /* U+DAC3 */
+      '?', /* U+DAC4 */
+      '?', /* U+DAC5 */
+      '?', /* U+DAC6 */
+      '?', /* U+DAC7 */
+      '?', /* U+DAC8 */
+      '?', /* U+DAC9 */
+      '?', /* U+DACA */
+      '?', /* U+DACB */
+      '?', /* U+DACC */
+      '?', /* U+DACD */
+      '?', /* U+DACE */
+      '?', /* U+DACF */
+      '?', /* U+DAD0 */
+      '?', /* U+DAD1 */
+      '?', /* U+DAD2 */
+      '?', /* U+DAD3 */
+      '?', /* U+DAD4 */
+      '?', /* U+DAD5 */
+      '?', /* U+DAD6 */
+      '?', /* U+DAD7 */
+      '?', /* U+DAD8 */
+      '?', /* U+DAD9 */
+      '?', /* U+DADA */
+      '?', /* U+DADB */
+      '?', /* U+DADC */
+      '?', /* U+DADD */
+      '?', /* U+DADE */
+      '?', /* U+DADF */
+      '?', /* U+DAE0 */
+      '?', /* U+DAE1 */
+      '?', /* U+DAE2 */
+      '?', /* U+DAE3 */
+      '?', /* U+DAE4 */
+      '?', /* U+DAE5 */
+      '?', /* U+DAE6 */
+      '?', /* U+DAE7 */
+      '?', /* U+DAE8 */
+      '?', /* U+DAE9 */
+      '?', /* U+DAEA */
+      '?', /* U+DAEB */
+      '?', /* U+DAEC */
+      '?', /* U+DAED */
+      '?', /* U+DAEE */
+      '?', /* U+DAEF */
+      '?', /* U+DAF0 */
+      '?', /* U+DAF1 */
+      '?', /* U+DAF2 */
+      '?', /* U+DAF3 */
+      '?', /* U+DAF4 */
+      '?', /* U+DAF5 */
+      '?', /* U+DAF6 */
+      '?', /* U+DAF7 */
+      '?', /* U+DAF8 */
+      '?', /* U+DAF9 */
+      '?', /* U+DAFA */
+      '?', /* U+DAFB */
+      '?', /* U+DAFC */
+      '?', /* U+DAFD */
+      '?', /* U+DAFE */
+      '?', /* U+DAFF */
+      '?', /* U+DB00 */
+      '?', /* U+DB01 */
+      '?', /* U+DB02 */
+      '?', /* U+DB03 */
+      '?', /* U+DB04 */
+      '?', /* U+DB05 */
+      '?', /* U+DB06 */
+      '?', /* U+DB07 */
+      '?', /* U+DB08 */
+      '?', /* U+DB09 */
+      '?', /* U+DB0A */
+      '?', /* U+DB0B */
+      '?', /* U+DB0C */
+      '?', /* U+DB0D */
+      '?', /* U+DB0E */
+      '?', /* U+DB0F */
+      '?', /* U+DB10 */
+      '?', /* U+DB11 */
+      '?', /* U+DB12 */
+      '?', /* U+DB13 */
+      '?', /* U+DB14 */
+      '?', /* U+DB15 */
+      '?', /* U+DB16 */
+      '?', /* U+DB17 */
+      '?', /* U+DB18 */
+      '?', /* U+DB19 */
+      '?', /* U+DB1A */
+      '?', /* U+DB1B */
+      '?', /* U+DB1C */
+      '?', /* U+DB1D */
+      '?', /* U+DB1E */
+      '?', /* U+DB1F */
+      '?', /* U+DB20 */
+      '?', /* U+DB21 */
+      '?', /* U+DB22 */
+      '?', /* U+DB23 */
+      '?', /* U+DB24 */
+      '?', /* U+DB25 */
+      '?', /* U+DB26 */
+      '?', /* U+DB27 */
+      '?', /* U+DB28 */
+      '?', /* U+DB29 */
+      '?', /* U+DB2A */
+      '?', /* U+DB2B */
+      '?', /* U+DB2C */
+      '?', /* U+DB2D */
+      '?', /* U+DB2E */
+      '?', /* U+DB2F */
+      '?', /* U+DB30 */
+      '?', /* U+DB31 */
+      '?', /* U+DB32 */
+      '?', /* U+DB33 */
+      '?', /* U+DB34 */
+      '?', /* U+DB35 */
+      '?', /* U+DB36 */
+      '?', /* U+DB37 */
+      '?', /* U+DB38 */
+      '?', /* U+DB39 */
+      '?', /* U+DB3A */
+      '?', /* U+DB3B */
+      '?', /* U+DB3C */
+      '?', /* U+DB3D */
+      '?', /* U+DB3E */
+      '?', /* U+DB3F */
+      '?', /* U+DB40 */
+      '?', /* U+DB41 */
+      '?', /* U+DB42 */
+      '?', /* U+DB43 */
+      '?', /* U+DB44 */
+      '?', /* U+DB45 */
+      '?', /* U+DB46 */
+      '?', /* U+DB47 */
+      '?', /* U+DB48 */
+      '?', /* U+DB49 */
+      '?', /* U+DB4A */
+      '?', /* U+DB4B */
+      '?', /* U+DB4C */
+      '?', /* U+DB4D */
+      '?', /* U+DB4E */
+      '?', /* U+DB4F */
+      '?', /* U+DB50 */
+      '?', /* U+DB51 */
+      '?', /* U+DB52 */
+      '?', /* U+DB53 */
+      '?', /* U+DB54 */
+      '?', /* U+DB55 */
+      '?', /* U+DB56 */
+      '?', /* U+DB57 */
+      '?', /* U+DB58 */
+      '?', /* U+DB59 */
+      '?', /* U+DB5A */
+      '?', /* U+DB5B */
+      '?', /* U+DB5C */
+      '?', /* U+DB5D */
+      '?', /* U+DB5E */
+      '?', /* U+DB5F */
+      '?', /* U+DB60 */
+      '?', /* U+DB61 */
+      '?', /* U+DB62 */
+      '?', /* U+DB63 */
+      '?', /* U+DB64 */
+      '?', /* U+DB65 */
+      '?', /* U+DB66 */
+      '?', /* U+DB67 */
+      '?', /* U+DB68 */
+      '?', /* U+DB69 */
+      '?', /* U+DB6A */
+      '?', /* U+DB6B */
+      '?', /* U+DB6C */
+      '?', /* U+DB6D */
+      '?', /* U+DB6E */
+      '?', /* U+DB6F */
+      '?', /* U+DB70 */
+      '?', /* U+DB71 */
+      '?', /* U+DB72 */
+      '?', /* U+DB73 */
+      '?', /* U+DB74 */
+      '?', /* U+DB75 */
+      '?', /* U+DB76 */
+      '?', /* U+DB77 */
+      '?', /* U+DB78 */
+      '?', /* U+DB79 */
+      '?', /* U+DB7A */
+      '?', /* U+DB7B */
+      '?', /* U+DB7C */
+      '?', /* U+DB7D */
+      '?', /* U+DB7E */
+      '?', /* U+DB7F */
+      '?', /* U+DB80 */
+      '?', /* U+DB81 */
+      '?', /* U+DB82 */
+      '?', /* U+DB83 */
+      '?', /* U+DB84 */
+      '?', /* U+DB85 */
+      '?', /* U+DB86 */
+      '?', /* U+DB87 */
+      '?', /* U+DB88 */
+      '?', /* U+DB89 */
+      '?', /* U+DB8A */
+      '?', /* U+DB8B */
+      '?', /* U+DB8C */
+      '?', /* U+DB8D */
+      '?', /* U+DB8E */
+      '?', /* U+DB8F */
+      '?', /* U+DB90 */
+      '?', /* U+DB91 */
+      '?', /* U+DB92 */
+      '?', /* U+DB93 */
+      '?', /* U+DB94 */
+      '?', /* U+DB95 */
+      '?', /* U+DB96 */
+      '?', /* U+DB97 */
+      '?', /* U+DB98 */
+      '?', /* U+DB99 */
+      '?', /* U+DB9A */
+      '?', /* U+DB9B */
+      '?', /* U+DB9C */
+      '?', /* U+DB9D */
+      '?', /* U+DB9E */
+      '?', /* U+DB9F */
+      '?', /* U+DBA0 */
+      '?', /* U+DBA1 */
+      '?', /* U+DBA2 */
+      '?', /* U+DBA3 */
+      '?', /* U+DBA4 */
+      '?', /* U+DBA5 */
+      '?', /* U+DBA6 */
+      '?', /* U+DBA7 */
+      '?', /* U+DBA8 */
+      '?', /* U+DBA9 */
+      '?', /* U+DBAA */
+      '?', /* U+DBAB */
+      '?', /* U+DBAC */
+      '?', /* U+DBAD */
+      '?', /* U+DBAE */
+      '?', /* U+DBAF */
+      '?', /* U+DBB0 */
+      '?', /* U+DBB1 */
+      '?', /* U+DBB2 */
+      '?', /* U+DBB3 */
+      '?', /* U+DBB4 */
+      '?', /* U+DBB5 */
+      '?', /* U+DBB6 */
+      '?', /* U+DBB7 */
+      '?', /* U+DBB8 */
+      '?', /* U+DBB9 */
+      '?', /* U+DBBA */
+      '?', /* U+DBBB */
+      '?', /* U+DBBC */
+      '?', /* U+DBBD */
+      '?', /* U+DBBE */
+      '?', /* U+DBBF */
+      '?', /* U+DBC0 */
+      '?', /* U+DBC1 */
+      '?', /* U+DBC2 */
+      '?', /* U+DBC3 */
+      '?', /* U+DBC4 */
+      '?', /* U+DBC5 */
+      '?', /* U+DBC6 */
+      '?', /* U+DBC7 */
+      '?', /* U+DBC8 */
+      '?', /* U+DBC9 */
+      '?', /* U+DBCA */
+      '?', /* U+DBCB */
+      '?', /* U+DBCC */
+      '?', /* U+DBCD */
+      '?', /* U+DBCE */
+      '?', /* U+DBCF */
+      '?', /* U+DBD0 */
+      '?', /* U+DBD1 */
+      '?', /* U+DBD2 */
+      '?', /* U+DBD3 */
+      '?', /* U+DBD4 */
+      '?', /* U+DBD5 */
+      '?', /* U+DBD6 */
+      '?', /* U+DBD7 */
+      '?', /* U+DBD8 */
+      '?', /* U+DBD9 */
+      '?', /* U+DBDA */
+      '?', /* U+DBDB */
+      '?', /* U+DBDC */
+      '?', /* U+DBDD */
+      '?', /* U+DBDE */
+      '?', /* U+DBDF */
+      '?', /* U+DBE0 */
+      '?', /* U+DBE1 */
+      '?', /* U+DBE2 */
+      '?', /* U+DBE3 */
+      '?', /* U+DBE4 */
+      '?', /* U+DBE5 */
+      '?', /* U+DBE6 */
+      '?', /* U+DBE7 */
+      '?', /* U+DBE8 */
+      '?', /* U+DBE9 */
+      '?', /* U+DBEA */
+      '?', /* U+DBEB */
+      '?', /* U+DBEC */
+      '?', /* U+DBED */
+      '?', /* U+DBEE */
+      '?', /* U+DBEF */
+      '?', /* U+DBF0 */
+      '?', /* U+DBF1 */
+      '?', /* U+DBF2 */
+      '?', /* U+DBF3 */
+      '?', /* U+DBF4 */
+      '?', /* U+DBF5 */
+      '?', /* U+DBF6 */
+      '?', /* U+DBF7 */
+      '?', /* U+DBF8 */
+      '?', /* U+DBF9 */
+      '?', /* U+DBFA */
+      '?', /* U+DBFB */
+      '?', /* U+DBFC */
+      '?', /* U+DBFD */
+      '?', /* U+DBFE */
+      '?', /* U+DBFF */
+      '?', /* U+DC00 */
+      '?', /* U+DC01 */
+      '?', /* U+DC02 */
+      '?', /* U+DC03 */
+      '?', /* U+DC04 */
+      '?', /* U+DC05 */
+      '?', /* U+DC06 */
+      '?', /* U+DC07 */
+      '?', /* U+DC08 */
+      '?', /* U+DC09 */
+      '?', /* U+DC0A */
+      '?', /* U+DC0B */
+      '?', /* U+DC0C */
+      '?', /* U+DC0D */
+      '?', /* U+DC0E */
+      '?', /* U+DC0F */
+      '?', /* U+DC10 */
+      '?', /* U+DC11 */
+      '?', /* U+DC12 */
+      '?', /* U+DC13 */
+      '?', /* U+DC14 */
+      '?', /* U+DC15 */
+      '?', /* U+DC16 */
+      '?', /* U+DC17 */
+      '?', /* U+DC18 */
+      '?', /* U+DC19 */
+      '?', /* U+DC1A */
+      '?', /* U+DC1B */
+      '?', /* U+DC1C */
+      '?', /* U+DC1D */
+      '?', /* U+DC1E */
+      '?', /* U+DC1F */
+      '?', /* U+DC20 */
+      '?', /* U+DC21 */
+      '?', /* U+DC22 */
+      '?', /* U+DC23 */
+      '?', /* U+DC24 */
+      '?', /* U+DC25 */
+      '?', /* U+DC26 */
+      '?', /* U+DC27 */
+      '?', /* U+DC28 */
+      '?', /* U+DC29 */
+      '?', /* U+DC2A */
+      '?', /* U+DC2B */
+      '?', /* U+DC2C */
+      '?', /* U+DC2D */
+      '?', /* U+DC2E */
+      '?', /* U+DC2F */
+      '?', /* U+DC30 */
+      '?', /* U+DC31 */
+      '?', /* U+DC32 */
+      '?', /* U+DC33 */
+      '?', /* U+DC34 */
+      '?', /* U+DC35 */
+      '?', /* U+DC36 */
+      '?', /* U+DC37 */
+      '?', /* U+DC38 */
+      '?', /* U+DC39 */
+      '?', /* U+DC3A */
+      '?', /* U+DC3B */
+      '?', /* U+DC3C */
+      '?', /* U+DC3D */
+      '?', /* U+DC3E */
+      '?', /* U+DC3F */
+      '?', /* U+DC40 */
+      '?', /* U+DC41 */
+      '?', /* U+DC42 */
+      '?', /* U+DC43 */
+      '?', /* U+DC44 */
+      '?', /* U+DC45 */
+      '?', /* U+DC46 */
+      '?', /* U+DC47 */
+      '?', /* U+DC48 */
+      '?', /* U+DC49 */
+      '?', /* U+DC4A */
+      '?', /* U+DC4B */
+      '?', /* U+DC4C */
+      '?', /* U+DC4D */
+      '?', /* U+DC4E */
+      '?', /* U+DC4F */
+      '?', /* U+DC50 */
+      '?', /* U+DC51 */
+      '?', /* U+DC52 */
+      '?', /* U+DC53 */
+      '?', /* U+DC54 */
+      '?', /* U+DC55 */
+      '?', /* U+DC56 */
+      '?', /* U+DC57 */
+      '?', /* U+DC58 */
+      '?', /* U+DC59 */
+      '?', /* U+DC5A */
+      '?', /* U+DC5B */
+      '?', /* U+DC5C */
+      '?', /* U+DC5D */
+      '?', /* U+DC5E */
+      '?', /* U+DC5F */
+      '?', /* U+DC60 */
+      '?', /* U+DC61 */
+      '?', /* U+DC62 */
+      '?', /* U+DC63 */
+      '?', /* U+DC64 */
+      '?', /* U+DC65 */
+      '?', /* U+DC66 */
+      '?', /* U+DC67 */
+      '?', /* U+DC68 */
+      '?', /* U+DC69 */
+      '?', /* U+DC6A */
+      '?', /* U+DC6B */
+      '?', /* U+DC6C */
+      '?', /* U+DC6D */
+      '?', /* U+DC6E */
+      '?', /* U+DC6F */
+      '?', /* U+DC70 */
+      '?', /* U+DC71 */
+      '?', /* U+DC72 */
+      '?', /* U+DC73 */
+      '?', /* U+DC74 */
+      '?', /* U+DC75 */
+      '?', /* U+DC76 */
+      '?', /* U+DC77 */
+      '?', /* U+DC78 */
+      '?', /* U+DC79 */
+      '?', /* U+DC7A */
+      '?', /* U+DC7B */
+      '?', /* U+DC7C */
+      '?', /* U+DC7D */
+      '?', /* U+DC7E */
+      '?', /* U+DC7F */
+      '?', /* U+DC80 */
+      '?', /* U+DC81 */
+      '?', /* U+DC82 */
+      '?', /* U+DC83 */
+      '?', /* U+DC84 */
+      '?', /* U+DC85 */
+      '?', /* U+DC86 */
+      '?', /* U+DC87 */
+      '?', /* U+DC88 */
+      '?', /* U+DC89 */
+      '?', /* U+DC8A */
+      '?', /* U+DC8B */
+      '?', /* U+DC8C */
+      '?', /* U+DC8D */
+      '?', /* U+DC8E */
+      '?', /* U+DC8F */
+      '?', /* U+DC90 */
+      '?', /* U+DC91 */
+      '?', /* U+DC92 */
+      '?', /* U+DC93 */
+      '?', /* U+DC94 */
+      '?', /* U+DC95 */
+      '?', /* U+DC96 */
+      '?', /* U+DC97 */
+      '?', /* U+DC98 */
+      '?', /* U+DC99 */
+      '?', /* U+DC9A */
+      '?', /* U+DC9B */
+      '?', /* U+DC9C */
+      '?', /* U+DC9D */
+      '?', /* U+DC9E */
+      '?', /* U+DC9F */
+      '?', /* U+DCA0 */
+      '?', /* U+DCA1 */
+      '?', /* U+DCA2 */
+      '?', /* U+DCA3 */
+      '?', /* U+DCA4 */
+      '?', /* U+DCA5 */
+      '?', /* U+DCA6 */
+      '?', /* U+DCA7 */
+      '?', /* U+DCA8 */
+      '?', /* U+DCA9 */
+      '?', /* U+DCAA */
+      '?', /* U+DCAB */
+      '?', /* U+DCAC */
+      '?', /* U+DCAD */
+      '?', /* U+DCAE */
+      '?', /* U+DCAF */
+      '?', /* U+DCB0 */
+      '?', /* U+DCB1 */
+      '?', /* U+DCB2 */
+      '?', /* U+DCB3 */
+      '?', /* U+DCB4 */
+      '?', /* U+DCB5 */
+      '?', /* U+DCB6 */
+      '?', /* U+DCB7 */
+      '?', /* U+DCB8 */
+      '?', /* U+DCB9 */
+      '?', /* U+DCBA */
+      '?', /* U+DCBB */
+      '?', /* U+DCBC */
+      '?', /* U+DCBD */
+      '?', /* U+DCBE */
+      '?', /* U+DCBF */
+      '?', /* U+DCC0 */
+      '?', /* U+DCC1 */
+      '?', /* U+DCC2 */
+      '?', /* U+DCC3 */
+      '?', /* U+DCC4 */
+      '?', /* U+DCC5 */
+      '?', /* U+DCC6 */
+      '?', /* U+DCC7 */
+      '?', /* U+DCC8 */
+      '?', /* U+DCC9 */
+      '?', /* U+DCCA */
+      '?', /* U+DCCB */
+      '?', /* U+DCCC */
+      '?', /* U+DCCD */
+      '?', /* U+DCCE */
+      '?', /* U+DCCF */
+      '?', /* U+DCD0 */
+      '?', /* U+DCD1 */
+      '?', /* U+DCD2 */
+      '?', /* U+DCD3 */
+      '?', /* U+DCD4 */
+      '?', /* U+DCD5 */
+      '?', /* U+DCD6 */
+      '?', /* U+DCD7 */
+      '?', /* U+DCD8 */
+      '?', /* U+DCD9 */
+      '?', /* U+DCDA */
+      '?', /* U+DCDB */
+      '?', /* U+DCDC */
+      '?', /* U+DCDD */
+      '?', /* U+DCDE */
+      '?', /* U+DCDF */
+      '?', /* U+DCE0 */
+      '?', /* U+DCE1 */
+      '?', /* U+DCE2 */
+      '?', /* U+DCE3 */
+      '?', /* U+DCE4 */
+      '?', /* U+DCE5 */
+      '?', /* U+DCE6 */
+      '?', /* U+DCE7 */
+      '?', /* U+DCE8 */
+      '?', /* U+DCE9 */
+      '?', /* U+DCEA */
+      '?', /* U+DCEB */
+      '?', /* U+DCEC */
+      '?', /* U+DCED */
+      '?', /* U+DCEE */
+      '?', /* U+DCEF */
+      '?', /* U+DCF0 */
+      '?', /* U+DCF1 */
+      '?', /* U+DCF2 */
+      '?', /* U+DCF3 */
+      '?', /* U+DCF4 */
+      '?', /* U+DCF5 */
+      '?', /* U+DCF6 */
+      '?', /* U+DCF7 */
+      '?', /* U+DCF8 */
+      '?', /* U+DCF9 */
+      '?', /* U+DCFA */
+      '?', /* U+DCFB */
+      '?', /* U+DCFC */
+      '?', /* U+DCFD */
+      '?', /* U+DCFE */
+      '?', /* U+DCFF */
+      '?', /* U+DD00 */
+      '?', /* U+DD01 */
+      '?', /* U+DD02 */
+      '?', /* U+DD03 */
+      '?', /* U+DD04 */
+      '?', /* U+DD05 */
+      '?', /* U+DD06 */
+      '?', /* U+DD07 */
+      '?', /* U+DD08 */
+      '?', /* U+DD09 */
+      '?', /* U+DD0A */
+      '?', /* U+DD0B */
+      '?', /* U+DD0C */
+      '?', /* U+DD0D */
+      '?', /* U+DD0E */
+      '?', /* U+DD0F */
+      '?', /* U+DD10 */
+      '?', /* U+DD11 */
+      '?', /* U+DD12 */
+      '?', /* U+DD13 */
+      '?', /* U+DD14 */
+      '?', /* U+DD15 */
+      '?', /* U+DD16 */
+      '?', /* U+DD17 */
+      '?', /* U+DD18 */
+      '?', /* U+DD19 */
+      '?', /* U+DD1A */
+      '?', /* U+DD1B */
+      '?', /* U+DD1C */
+      '?', /* U+DD1D */
+      '?', /* U+DD1E */
+      '?', /* U+DD1F */
+      '?', /* U+DD20 */
+      '?', /* U+DD21 */
+      '?', /* U+DD22 */
+      '?', /* U+DD23 */
+      '?', /* U+DD24 */
+      '?', /* U+DD25 */
+      '?', /* U+DD26 */
+      '?', /* U+DD27 */
+      '?', /* U+DD28 */
+      '?', /* U+DD29 */
+      '?', /* U+DD2A */
+      '?', /* U+DD2B */
+      '?', /* U+DD2C */
+      '?', /* U+DD2D */
+      '?', /* U+DD2E */
+      '?', /* U+DD2F */
+      '?', /* U+DD30 */
+      '?', /* U+DD31 */
+      '?', /* U+DD32 */
+      '?', /* U+DD33 */
+      '?', /* U+DD34 */
+      '?', /* U+DD35 */
+      '?', /* U+DD36 */
+      '?', /* U+DD37 */
+      '?', /* U+DD38 */
+      '?', /* U+DD39 */
+      '?', /* U+DD3A */
+      '?', /* U+DD3B */
+      '?', /* U+DD3C */
+      '?', /* U+DD3D */
+      '?', /* U+DD3E */
+      '?', /* U+DD3F */
+      '?', /* U+DD40 */
+      '?', /* U+DD41 */
+      '?', /* U+DD42 */
+      '?', /* U+DD43 */
+      '?', /* U+DD44 */
+      '?', /* U+DD45 */
+      '?', /* U+DD46 */
+      '?', /* U+DD47 */
+      '?', /* U+DD48 */
+      '?', /* U+DD49 */
+      '?', /* U+DD4A */
+      '?', /* U+DD4B */
+      '?', /* U+DD4C */
+      '?', /* U+DD4D */
+      '?', /* U+DD4E */
+      '?', /* U+DD4F */
+      '?', /* U+DD50 */
+      '?', /* U+DD51 */
+      '?', /* U+DD52 */
+      '?', /* U+DD53 */
+      '?', /* U+DD54 */
+      '?', /* U+DD55 */
+      '?', /* U+DD56 */
+      '?', /* U+DD57 */
+      '?', /* U+DD58 */
+      '?', /* U+DD59 */
+      '?', /* U+DD5A */
+      '?', /* U+DD5B */
+      '?', /* U+DD5C */
+      '?', /* U+DD5D */
+      '?', /* U+DD5E */
+      '?', /* U+DD5F */
+      '?', /* U+DD60 */
+      '?', /* U+DD61 */
+      '?', /* U+DD62 */
+      '?', /* U+DD63 */
+      '?', /* U+DD64 */
+      '?', /* U+DD65 */
+      '?', /* U+DD66 */
+      '?', /* U+DD67 */
+      '?', /* U+DD68 */
+      '?', /* U+DD69 */
+      '?', /* U+DD6A */
+      '?', /* U+DD6B */
+      '?', /* U+DD6C */
+      '?', /* U+DD6D */
+      '?', /* U+DD6E */
+      '?', /* U+DD6F */
+      '?', /* U+DD70 */
+      '?', /* U+DD71 */
+      '?', /* U+DD72 */
+      '?', /* U+DD73 */
+      '?', /* U+DD74 */
+      '?', /* U+DD75 */
+      '?', /* U+DD76 */
+      '?', /* U+DD77 */
+      '?', /* U+DD78 */
+      '?', /* U+DD79 */
+      '?', /* U+DD7A */
+      '?', /* U+DD7B */
+      '?', /* U+DD7C */
+      '?', /* U+DD7D */
+      '?', /* U+DD7E */
+      '?', /* U+DD7F */
+      '?', /* U+DD80 */
+      '?', /* U+DD81 */
+      '?', /* U+DD82 */
+      '?', /* U+DD83 */
+      '?', /* U+DD84 */
+      '?', /* U+DD85 */
+      '?', /* U+DD86 */
+      '?', /* U+DD87 */
+      '?', /* U+DD88 */
+      '?', /* U+DD89 */
+      '?', /* U+DD8A */
+      '?', /* U+DD8B */
+      '?', /* U+DD8C */
+      '?', /* U+DD8D */
+      '?', /* U+DD8E */
+      '?', /* U+DD8F */
+      '?', /* U+DD90 */
+      '?', /* U+DD91 */
+      '?', /* U+DD92 */
+      '?', /* U+DD93 */
+      '?', /* U+DD94 */
+      '?', /* U+DD95 */
+      '?', /* U+DD96 */
+      '?', /* U+DD97 */
+      '?', /* U+DD98 */
+      '?', /* U+DD99 */
+      '?', /* U+DD9A */
+      '?', /* U+DD9B */
+      '?', /* U+DD9C */
+      '?', /* U+DD9D */
+      '?', /* U+DD9E */
+      '?', /* U+DD9F */
+      '?', /* U+DDA0 */
+      '?', /* U+DDA1 */
+      '?', /* U+DDA2 */
+      '?', /* U+DDA3 */
+      '?', /* U+DDA4 */
+      '?', /* U+DDA5 */
+      '?', /* U+DDA6 */
+      '?', /* U+DDA7 */
+      '?', /* U+DDA8 */
+      '?', /* U+DDA9 */
+      '?', /* U+DDAA */
+      '?', /* U+DDAB */
+      '?', /* U+DDAC */
+      '?', /* U+DDAD */
+      '?', /* U+DDAE */
+      '?', /* U+DDAF */
+      '?', /* U+DDB0 */
+      '?', /* U+DDB1 */
+      '?', /* U+DDB2 */
+      '?', /* U+DDB3 */
+      '?', /* U+DDB4 */
+      '?', /* U+DDB5 */
+      '?', /* U+DDB6 */
+      '?', /* U+DDB7 */
+      '?', /* U+DDB8 */
+      '?', /* U+DDB9 */
+      '?', /* U+DDBA */
+      '?', /* U+DDBB */
+      '?', /* U+DDBC */
+      '?', /* U+DDBD */
+      '?', /* U+DDBE */
+      '?', /* U+DDBF */
+      '?', /* U+DDC0 */
+      '?', /* U+DDC1 */
+      '?', /* U+DDC2 */
+      '?', /* U+DDC3 */
+      '?', /* U+DDC4 */
+      '?', /* U+DDC5 */
+      '?', /* U+DDC6 */
+      '?', /* U+DDC7 */
+      '?', /* U+DDC8 */
+      '?', /* U+DDC9 */
+      '?', /* U+DDCA */
+      '?', /* U+DDCB */
+      '?', /* U+DDCC */
+      '?', /* U+DDCD */
+      '?', /* U+DDCE */
+      '?', /* U+DDCF */
+      '?', /* U+DDD0 */
+      '?', /* U+DDD1 */
+      '?', /* U+DDD2 */
+      '?', /* U+DDD3 */
+      '?', /* U+DDD4 */
+      '?', /* U+DDD5 */
+      '?', /* U+DDD6 */
+      '?', /* U+DDD7 */
+      '?', /* U+DDD8 */
+      '?', /* U+DDD9 */
+      '?', /* U+DDDA */
+      '?', /* U+DDDB */
+      '?', /* U+DDDC */
+      '?', /* U+DDDD */
+      '?', /* U+DDDE */
+      '?', /* U+DDDF */
+      '?', /* U+DDE0 */
+      '?', /* U+DDE1 */
+      '?', /* U+DDE2 */
+      '?', /* U+DDE3 */
+      '?', /* U+DDE4 */
+      '?', /* U+DDE5 */
+      '?', /* U+DDE6 */
+      '?', /* U+DDE7 */
+      '?', /* U+DDE8 */
+      '?', /* U+DDE9 */
+      '?', /* U+DDEA */
+      '?', /* U+DDEB */
+      '?', /* U+DDEC */
+      '?', /* U+DDED */
+      '?', /* U+DDEE */
+      '?', /* U+DDEF */
+      '?', /* U+DDF0 */
+      '?', /* U+DDF1 */
+      '?', /* U+DDF2 */
+      '?', /* U+DDF3 */
+      '?', /* U+DDF4 */
+      '?', /* U+DDF5 */
+      '?', /* U+DDF6 */
+      '?', /* U+DDF7 */
+      '?', /* U+DDF8 */
+      '?', /* U+DDF9 */
+      '?', /* U+DDFA */
+      '?', /* U+DDFB */
+      '?', /* U+DDFC */
+      '?', /* U+DDFD */
+      '?', /* U+DDFE */
+      '?', /* U+DDFF */
+      '?', /* U+DE00 */
+      '?', /* U+DE01 */
+      '?', /* U+DE02 */
+      '?', /* U+DE03 */
+      '?', /* U+DE04 */
+      '?', /* U+DE05 */
+      '?', /* U+DE06 */
+      '?', /* U+DE07 */
+      '?', /* U+DE08 */
+      '?', /* U+DE09 */
+      '?', /* U+DE0A */
+      '?', /* U+DE0B */
+      '?', /* U+DE0C */
+      '?', /* U+DE0D */
+      '?', /* U+DE0E */
+      '?', /* U+DE0F */
+      '?', /* U+DE10 */
+      '?', /* U+DE11 */
+      '?', /* U+DE12 */
+      '?', /* U+DE13 */
+      '?', /* U+DE14 */
+      '?', /* U+DE15 */
+      '?', /* U+DE16 */
+      '?', /* U+DE17 */
+      '?', /* U+DE18 */
+      '?', /* U+DE19 */
+      '?', /* U+DE1A */
+      '?', /* U+DE1B */
+      '?', /* U+DE1C */
+      '?', /* U+DE1D */
+      '?', /* U+DE1E */
+      '?', /* U+DE1F */
+      '?', /* U+DE20 */
+      '?', /* U+DE21 */
+      '?', /* U+DE22 */
+      '?', /* U+DE23 */
+      '?', /* U+DE24 */
+      '?', /* U+DE25 */
+      '?', /* U+DE26 */
+      '?', /* U+DE27 */
+      '?', /* U+DE28 */
+      '?', /* U+DE29 */
+      '?', /* U+DE2A */
+      '?', /* U+DE2B */
+      '?', /* U+DE2C */
+      '?', /* U+DE2D */
+      '?', /* U+DE2E */
+      '?', /* U+DE2F */
+      '?', /* U+DE30 */
+      '?', /* U+DE31 */
+      '?', /* U+DE32 */
+      '?', /* U+DE33 */
+      '?', /* U+DE34 */
+      '?', /* U+DE35 */
+      '?', /* U+DE36 */
+      '?', /* U+DE37 */
+      '?', /* U+DE38 */
+      '?', /* U+DE39 */
+      '?', /* U+DE3A */
+      '?', /* U+DE3B */
+      '?', /* U+DE3C */
+      '?', /* U+DE3D */
+      '?', /* U+DE3E */
+      '?', /* U+DE3F */
+      '?', /* U+DE40 */
+      '?', /* U+DE41 */
+      '?', /* U+DE42 */
+      '?', /* U+DE43 */
+      '?', /* U+DE44 */
+      '?', /* U+DE45 */
+      '?', /* U+DE46 */
+      '?', /* U+DE47 */
+      '?', /* U+DE48 */
+      '?', /* U+DE49 */
+      '?', /* U+DE4A */
+      '?', /* U+DE4B */
+      '?', /* U+DE4C */
+      '?', /* U+DE4D */
+      '?', /* U+DE4E */
+      '?', /* U+DE4F */
+      '?', /* U+DE50 */
+      '?', /* U+DE51 */
+      '?', /* U+DE52 */
+      '?', /* U+DE53 */
+      '?', /* U+DE54 */
+      '?', /* U+DE55 */
+      '?', /* U+DE56 */
+      '?', /* U+DE57 */
+      '?', /* U+DE58 */
+      '?', /* U+DE59 */
+      '?', /* U+DE5A */
+      '?', /* U+DE5B */
+      '?', /* U+DE5C */
+      '?', /* U+DE5D */
+      '?', /* U+DE5E */
+      '?', /* U+DE5F */
+      '?', /* U+DE60 */
+      '?', /* U+DE61 */
+      '?', /* U+DE62 */
+      '?', /* U+DE63 */
+      '?', /* U+DE64 */
+      '?', /* U+DE65 */
+      '?', /* U+DE66 */
+      '?', /* U+DE67 */
+      '?', /* U+DE68 */
+      '?', /* U+DE69 */
+      '?', /* U+DE6A */
+      '?', /* U+DE6B */
+      '?', /* U+DE6C */
+      '?', /* U+DE6D */
+      '?', /* U+DE6E */
+      '?', /* U+DE6F */
+      '?', /* U+DE70 */
+      '?', /* U+DE71 */
+      '?', /* U+DE72 */
+      '?', /* U+DE73 */
+      '?', /* U+DE74 */
+      '?', /* U+DE75 */
+      '?', /* U+DE76 */
+      '?', /* U+DE77 */
+      '?', /* U+DE78 */
+      '?', /* U+DE79 */
+      '?', /* U+DE7A */
+      '?', /* U+DE7B */
+      '?', /* U+DE7C */
+      '?', /* U+DE7D */
+      '?', /* U+DE7E */
+      '?', /* U+DE7F */
+      '?', /* U+DE80 */
+      '?', /* U+DE81 */
+      '?', /* U+DE82 */
+      '?', /* U+DE83 */
+      '?', /* U+DE84 */
+      '?', /* U+DE85 */
+      '?', /* U+DE86 */
+      '?', /* U+DE87 */
+      '?', /* U+DE88 */
+      '?', /* U+DE89 */
+      '?', /* U+DE8A */
+      '?', /* U+DE8B */
+      '?', /* U+DE8C */
+      '?', /* U+DE8D */
+      '?', /* U+DE8E */
+      '?', /* U+DE8F */
+      '?', /* U+DE90 */
+      '?', /* U+DE91 */
+      '?', /* U+DE92 */
+      '?', /* U+DE93 */
+      '?', /* U+DE94 */
+      '?', /* U+DE95 */
+      '?', /* U+DE96 */
+      '?', /* U+DE97 */
+      '?', /* U+DE98 */
+      '?', /* U+DE99 */
+      '?', /* U+DE9A */
+      '?', /* U+DE9B */
+      '?', /* U+DE9C */
+      '?', /* U+DE9D */
+      '?', /* U+DE9E */
+      '?', /* U+DE9F */
+      '?', /* U+DEA0 */
+      '?', /* U+DEA1 */
+      '?', /* U+DEA2 */
+      '?', /* U+DEA3 */
+      '?', /* U+DEA4 */
+      '?', /* U+DEA5 */
+      '?', /* U+DEA6 */
+      '?', /* U+DEA7 */
+      '?', /* U+DEA8 */
+      '?', /* U+DEA9 */
+      '?', /* U+DEAA */
+      '?', /* U+DEAB */
+      '?', /* U+DEAC */
+      '?', /* U+DEAD */
+      '?', /* U+DEAE */
+      '?', /* U+DEAF */
+      '?', /* U+DEB0 */
+      '?', /* U+DEB1 */
+      '?', /* U+DEB2 */
+      '?', /* U+DEB3 */
+      '?', /* U+DEB4 */
+      '?', /* U+DEB5 */
+      '?', /* U+DEB6 */
+      '?', /* U+DEB7 */
+      '?', /* U+DEB8 */
+      '?', /* U+DEB9 */
+      '?', /* U+DEBA */
+      '?', /* U+DEBB */
+      '?', /* U+DEBC */
+      '?', /* U+DEBD */
+      '?', /* U+DEBE */
+      '?', /* U+DEBF */
+      '?', /* U+DEC0 */
+      '?', /* U+DEC1 */
+      '?', /* U+DEC2 */
+      '?', /* U+DEC3 */
+      '?', /* U+DEC4 */
+      '?', /* U+DEC5 */
+      '?', /* U+DEC6 */
+      '?', /* U+DEC7 */
+      '?', /* U+DEC8 */
+      '?', /* U+DEC9 */
+      '?', /* U+DECA */
+      '?', /* U+DECB */
+      '?', /* U+DECC */
+      '?', /* U+DECD */
+      '?', /* U+DECE */
+      '?', /* U+DECF */
+      '?', /* U+DED0 */
+      '?', /* U+DED1 */
+      '?', /* U+DED2 */
+      '?', /* U+DED3 */
+      '?', /* U+DED4 */
+      '?', /* U+DED5 */
+      '?', /* U+DED6 */
+      '?', /* U+DED7 */
+      '?', /* U+DED8 */
+      '?', /* U+DED9 */
+      '?', /* U+DEDA */
+      '?', /* U+DEDB */
+      '?', /* U+DEDC */
+      '?', /* U+DEDD */
+      '?', /* U+DEDE */
+      '?', /* U+DEDF */
+      '?', /* U+DEE0 */
+      '?', /* U+DEE1 */
+      '?', /* U+DEE2 */
+      '?', /* U+DEE3 */
+      '?', /* U+DEE4 */
+      '?', /* U+DEE5 */
+      '?', /* U+DEE6 */
+      '?', /* U+DEE7 */
+      '?', /* U+DEE8 */
+      '?', /* U+DEE9 */
+      '?', /* U+DEEA */
+      '?', /* U+DEEB */
+      '?', /* U+DEEC */
+      '?', /* U+DEED */
+      '?', /* U+DEEE */
+      '?', /* U+DEEF */
+      '?', /* U+DEF0 */
+      '?', /* U+DEF1 */
+      '?', /* U+DEF2 */
+      '?', /* U+DEF3 */
+      '?', /* U+DEF4 */
+      '?', /* U+DEF5 */
+      '?', /* U+DEF6 */
+      '?', /* U+DEF7 */
+      '?', /* U+DEF8 */
+      '?', /* U+DEF9 */
+      '?', /* U+DEFA */
+      '?', /* U+DEFB */
+      '?', /* U+DEFC */
+      '?', /* U+DEFD */
+      '?', /* U+DEFE */
+      '?', /* U+DEFF */
+      '?', /* U+DF00 */
+      '?', /* U+DF01 */
+      '?', /* U+DF02 */
+      '?', /* U+DF03 */
+      '?', /* U+DF04 */
+      '?', /* U+DF05 */
+      '?', /* U+DF06 */
+      '?', /* U+DF07 */
+      '?', /* U+DF08 */
+      '?', /* U+DF09 */
+      '?', /* U+DF0A */
+      '?', /* U+DF0B */
+      '?', /* U+DF0C */
+      '?', /* U+DF0D */
+      '?', /* U+DF0E */
+      '?', /* U+DF0F */
+      '?', /* U+DF10 */
+      '?', /* U+DF11 */
+      '?', /* U+DF12 */
+      '?', /* U+DF13 */
+      '?', /* U+DF14 */
+      '?', /* U+DF15 */
+      '?', /* U+DF16 */
+      '?', /* U+DF17 */
+      '?', /* U+DF18 */
+      '?', /* U+DF19 */
+      '?', /* U+DF1A */
+      '?', /* U+DF1B */
+      '?', /* U+DF1C */
+      '?', /* U+DF1D */
+      '?', /* U+DF1E */
+      '?', /* U+DF1F */
+      '?', /* U+DF20 */
+      '?', /* U+DF21 */
+      '?', /* U+DF22 */
+      '?', /* U+DF23 */
+      '?', /* U+DF24 */
+      '?', /* U+DF25 */
+      '?', /* U+DF26 */
+      '?', /* U+DF27 */
+      '?', /* U+DF28 */
+      '?', /* U+DF29 */
+      '?', /* U+DF2A */
+      '?', /* U+DF2B */
+      '?', /* U+DF2C */
+      '?', /* U+DF2D */
+      '?', /* U+DF2E */
+      '?', /* U+DF2F */
+      '?', /* U+DF30 */
+      '?', /* U+DF31 */
+      '?', /* U+DF32 */
+      '?', /* U+DF33 */
+      '?', /* U+DF34 */
+      '?', /* U+DF35 */
+      '?', /* U+DF36 */
+      '?', /* U+DF37 */
+      '?', /* U+DF38 */
+      '?', /* U+DF39 */
+      '?', /* U+DF3A */
+      '?', /* U+DF3B */
+      '?', /* U+DF3C */
+      '?', /* U+DF3D */
+      '?', /* U+DF3E */
+      '?', /* U+DF3F */
+      '?', /* U+DF40 */
+      '?', /* U+DF41 */
+      '?', /* U+DF42 */
+      '?', /* U+DF43 */
+      '?', /* U+DF44 */
+      '?', /* U+DF45 */
+      '?', /* U+DF46 */
+      '?', /* U+DF47 */
+      '?', /* U+DF48 */
+      '?', /* U+DF49 */
+      '?', /* U+DF4A */
+      '?', /* U+DF4B */
+      '?', /* U+DF4C */
+      '?', /* U+DF4D */
+      '?', /* U+DF4E */
+      '?', /* U+DF4F */
+      '?', /* U+DF50 */
+      '?', /* U+DF51 */
+      '?', /* U+DF52 */
+      '?', /* U+DF53 */
+      '?', /* U+DF54 */
+      '?', /* U+DF55 */
+      '?', /* U+DF56 */
+      '?', /* U+DF57 */
+      '?', /* U+DF58 */
+      '?', /* U+DF59 */
+      '?', /* U+DF5A */
+      '?', /* U+DF5B */
+      '?', /* U+DF5C */
+      '?', /* U+DF5D */
+      '?', /* U+DF5E */
+      '?', /* U+DF5F */
+      '?', /* U+DF60 */
+      '?', /* U+DF61 */
+      '?', /* U+DF62 */
+      '?', /* U+DF63 */
+      '?', /* U+DF64 */
+      '?', /* U+DF65 */
+      '?', /* U+DF66 */
+      '?', /* U+DF67 */
+      '?', /* U+DF68 */
+      '?', /* U+DF69 */
+      '?', /* U+DF6A */
+      '?', /* U+DF6B */
+      '?', /* U+DF6C */
+      '?', /* U+DF6D */
+      '?', /* U+DF6E */
+      '?', /* U+DF6F */
+      '?', /* U+DF70 */
+      '?', /* U+DF71 */
+      '?', /* U+DF72 */
+      '?', /* U+DF73 */
+      '?', /* U+DF74 */
+      '?', /* U+DF75 */
+      '?', /* U+DF76 */
+      '?', /* U+DF77 */
+      '?', /* U+DF78 */
+      '?', /* U+DF79 */
+      '?', /* U+DF7A */
+      '?', /* U+DF7B */
+      '?', /* U+DF7C */
+      '?', /* U+DF7D */
+      '?', /* U+DF7E */
+      '?', /* U+DF7F */
+      '?', /* U+DF80 */
+      '?', /* U+DF81 */
+      '?', /* U+DF82 */
+      '?', /* U+DF83 */
+      '?', /* U+DF84 */
+      '?', /* U+DF85 */
+      '?', /* U+DF86 */
+      '?', /* U+DF87 */
+      '?', /* U+DF88 */
+      '?', /* U+DF89 */
+      '?', /* U+DF8A */
+      '?', /* U+DF8B */
+      '?', /* U+DF8C */
+      '?', /* U+DF8D */
+      '?', /* U+DF8E */
+      '?', /* U+DF8F */
+      '?', /* U+DF90 */
+      '?', /* U+DF91 */
+      '?', /* U+DF92 */
+      '?', /* U+DF93 */
+      '?', /* U+DF94 */
+      '?', /* U+DF95 */
+      '?', /* U+DF96 */
+      '?', /* U+DF97 */
+      '?', /* U+DF98 */
+      '?', /* U+DF99 */
+      '?', /* U+DF9A */
+      '?', /* U+DF9B */
+      '?', /* U+DF9C */
+      '?', /* U+DF9D */
+      '?', /* U+DF9E */
+      '?', /* U+DF9F */
+      '?', /* U+DFA0 */
+      '?', /* U+DFA1 */
+      '?', /* U+DFA2 */
+      '?', /* U+DFA3 */
+      '?', /* U+DFA4 */
+      '?', /* U+DFA5 */
+      '?', /* U+DFA6 */
+      '?', /* U+DFA7 */
+      '?', /* U+DFA8 */
+      '?', /* U+DFA9 */
+      '?', /* U+DFAA */
+      '?', /* U+DFAB */
+      '?', /* U+DFAC */
+      '?', /* U+DFAD */
+      '?', /* U+DFAE */
+      '?', /* U+DFAF */
+      '?', /* U+DFB0 */
+      '?', /* U+DFB1 */
+      '?', /* U+DFB2 */
+      '?', /* U+DFB3 */
+      '?', /* U+DFB4 */
+      '?', /* U+DFB5 */
+      '?', /* U+DFB6 */
+      '?', /* U+DFB7 */
+      '?', /* U+DFB8 */
+      '?', /* U+DFB9 */
+      '?', /* U+DFBA */
+      '?', /* U+DFBB */
+      '?', /* U+DFBC */
+      '?', /* U+DFBD */
+      '?', /* U+DFBE */
+      '?', /* U+DFBF */
+      '?', /* U+DFC0 */
+      '?', /* U+DFC1 */
+      '?', /* U+DFC2 */
+      '?', /* U+DFC3 */
+      '?', /* U+DFC4 */
+      '?', /* U+DFC5 */
+      '?', /* U+DFC6 */
+      '?', /* U+DFC7 */
+      '?', /* U+DFC8 */
+      '?', /* U+DFC9 */
+      '?', /* U+DFCA */
+      '?', /* U+DFCB */
+      '?', /* U+DFCC */
+      '?', /* U+DFCD */
+      '?', /* U+DFCE */
+      '?', /* U+DFCF */
+      '?', /* U+DFD0 */
+      '?', /* U+DFD1 */
+      '?', /* U+DFD2 */
+      '?', /* U+DFD3 */
+      '?', /* U+DFD4 */
+      '?', /* U+DFD5 */
+      '?', /* U+DFD6 */
+      '?', /* U+DFD7 */
+      '?', /* U+DFD8 */
+      '?', /* U+DFD9 */
+      '?', /* U+DFDA */
+      '?', /* U+DFDB */
+      '?', /* U+DFDC */
+      '?', /* U+DFDD */
+      '?', /* U+DFDE */
+      '?', /* U+DFDF */
+      '?', /* U+DFE0 */
+      '?', /* U+DFE1 */
+      '?', /* U+DFE2 */
+      '?', /* U+DFE3 */
+      '?', /* U+DFE4 */
+      '?', /* U+DFE5 */
+      '?', /* U+DFE6 */
+      '?', /* U+DFE7 */
+      '?', /* U+DFE8 */
+      '?', /* U+DFE9 */
+      '?', /* U+DFEA */
+      '?', /* U+DFEB */
+      '?', /* U+DFEC */
+      '?', /* U+DFED */
+      '?', /* U+DFEE */
+      '?', /* U+DFEF */
+      '?', /* U+DFF0 */
+      '?', /* U+DFF1 */
+      '?', /* U+DFF2 */
+      '?', /* U+DFF3 */
+      '?', /* U+DFF4 */
+      '?', /* U+DFF5 */
+      '?', /* U+DFF6 */
+      '?', /* U+DFF7 */
+      '?', /* U+DFF8 */
+      '?', /* U+DFF9 */
+      '?', /* U+DFFA */
+      '?', /* U+DFFB */
+      '?', /* U+DFFC */
+      '?', /* U+DFFD */
+      '?', /* U+DFFE */
+      '?', /* U+DFFF */
+      '?', /* U+E000 */
+      '?', /* U+E001 */
+      '?', /* U+E002 */
+      '?', /* U+E003 */
+      '?', /* U+E004 */
+      '?', /* U+E005 */
+      '?', /* U+E006 */
+      '?', /* U+E007 */
+      '?', /* U+E008 */
+      '?', /* U+E009 */
+      '?', /* U+E00A */
+      '?', /* U+E00B */
+      '?', /* U+E00C */
+      '?', /* U+E00D */
+      '?', /* U+E00E */
+      '?', /* U+E00F */
+      '?', /* U+E010 */
+      '?', /* U+E011 */
+      '?', /* U+E012 */
+      '?', /* U+E013 */
+      '?', /* U+E014 */
+      '?', /* U+E015 */
+      '?', /* U+E016 */
+      '?', /* U+E017 */
+      '?', /* U+E018 */
+      '?', /* U+E019 */
+      '?', /* U+E01A */
+      '?', /* U+E01B */
+      '?', /* U+E01C */
+      '?', /* U+E01D */
+      '?', /* U+E01E */
+      '?', /* U+E01F */
+      '?', /* U+E020 */
+      '?', /* U+E021 */
+      '?', /* U+E022 */
+      '?', /* U+E023 */
+      '?', /* U+E024 */
+      '?', /* U+E025 */
+      '?', /* U+E026 */
+      '?', /* U+E027 */
+      '?', /* U+E028 */
+      '?', /* U+E029 */
+      '?', /* U+E02A */
+      '?', /* U+E02B */
+      '?', /* U+E02C */
+      '?', /* U+E02D */
+      '?', /* U+E02E */
+      '?', /* U+E02F */
+      '?', /* U+E030 */
+      '?', /* U+E031 */
+      '?', /* U+E032 */
+      '?', /* U+E033 */
+      '?', /* U+E034 */
+      '?', /* U+E035 */
+      '?', /* U+E036 */
+      '?', /* U+E037 */
+      '?', /* U+E038 */
+      '?', /* U+E039 */
+      '?', /* U+E03A */
+      '?', /* U+E03B */
+      '?', /* U+E03C */
+      '?', /* U+E03D */
+      '?', /* U+E03E */
+      '?', /* U+E03F */
+      '?', /* U+E040 */
+      '?', /* U+E041 */
+      '?', /* U+E042 */
+      '?', /* U+E043 */
+      '?', /* U+E044 */
+      '?', /* U+E045 */
+      '?', /* U+E046 */
+      '?', /* U+E047 */
+      '?', /* U+E048 */
+      '?', /* U+E049 */
+      '?', /* U+E04A */
+      '?', /* U+E04B */
+      '?', /* U+E04C */
+      '?', /* U+E04D */
+      '?', /* U+E04E */
+      '?', /* U+E04F */
+      '?', /* U+E050 */
+      '?', /* U+E051 */
+      '?', /* U+E052 */
+      '?', /* U+E053 */
+      '?', /* U+E054 */
+      '?', /* U+E055 */
+      '?', /* U+E056 */
+      '?', /* U+E057 */
+      '?', /* U+E058 */
+      '?', /* U+E059 */
+      '?', /* U+E05A */
+      '?', /* U+E05B */
+      '?', /* U+E05C */
+      '?', /* U+E05D */
+      '?', /* U+E05E */
+      '?', /* U+E05F */
+      '?', /* U+E060 */
+      '?', /* U+E061 */
+      '?', /* U+E062 */
+      '?', /* U+E063 */
+      '?', /* U+E064 */
+      '?', /* U+E065 */
+      '?', /* U+E066 */
+      '?', /* U+E067 */
+      '?', /* U+E068 */
+      '?', /* U+E069 */
+      '?', /* U+E06A */
+      '?', /* U+E06B */
+      '?', /* U+E06C */
+      '?', /* U+E06D */
+      '?', /* U+E06E */
+      '?', /* U+E06F */
+      '?', /* U+E070 */
+      '?', /* U+E071 */
+      '?', /* U+E072 */
+      '?', /* U+E073 */
+      '?', /* U+E074 */
+      '?', /* U+E075 */
+      '?', /* U+E076 */
+      '?', /* U+E077 */
+      '?', /* U+E078 */
+      '?', /* U+E079 */
+      '?', /* U+E07A */
+      '?', /* U+E07B */
+      '?', /* U+E07C */
+      '?', /* U+E07D */
+      '?', /* U+E07E */
+      '?', /* U+E07F */
+      '?', /* U+E080 */
+      '?', /* U+E081 */
+      '?', /* U+E082 */
+      '?', /* U+E083 */
+      '?', /* U+E084 */
+      '?', /* U+E085 */
+      '?', /* U+E086 */
+      '?', /* U+E087 */
+      '?', /* U+E088 */
+      '?', /* U+E089 */
+      '?', /* U+E08A */
+      '?', /* U+E08B */
+      '?', /* U+E08C */
+      '?', /* U+E08D */
+      '?', /* U+E08E */
+      '?', /* U+E08F */
+      '?', /* U+E090 */
+      '?', /* U+E091 */
+      '?', /* U+E092 */
+      '?', /* U+E093 */
+      '?', /* U+E094 */
+      '?', /* U+E095 */
+      '?', /* U+E096 */
+      '?', /* U+E097 */
+      '?', /* U+E098 */
+      '?', /* U+E099 */
+      '?', /* U+E09A */
+      '?', /* U+E09B */
+      '?', /* U+E09C */
+      '?', /* U+E09D */
+      '?', /* U+E09E */
+      '?', /* U+E09F */
+      '?', /* U+E0A0 */
+      '?', /* U+E0A1 */
+      '?', /* U+E0A2 */
+      '?', /* U+E0A3 */
+      '?', /* U+E0A4 */
+      '?', /* U+E0A5 */
+      '?', /* U+E0A6 */
+      '?', /* U+E0A7 */
+      '?', /* U+E0A8 */
+      '?', /* U+E0A9 */
+      '?', /* U+E0AA */
+      '?', /* U+E0AB */
+      '?', /* U+E0AC */
+      '?', /* U+E0AD */
+      '?', /* U+E0AE */
+      '?', /* U+E0AF */
+      '?', /* U+E0B0 */
+      '?', /* U+E0B1 */
+      '?', /* U+E0B2 */
+      '?', /* U+E0B3 */
+      '?', /* U+E0B4 */
+      '?', /* U+E0B5 */
+      '?', /* U+E0B6 */
+      '?', /* U+E0B7 */
+      '?', /* U+E0B8 */
+      '?', /* U+E0B9 */
+      '?', /* U+E0BA */
+      '?', /* U+E0BB */
+      '?', /* U+E0BC */
+      '?', /* U+E0BD */
+      '?', /* U+E0BE */
+      '?', /* U+E0BF */
+      '?', /* U+E0C0 */
+      '?', /* U+E0C1 */
+      '?', /* U+E0C2 */
+      '?', /* U+E0C3 */
+      '?', /* U+E0C4 */
+      '?', /* U+E0C5 */
+      '?', /* U+E0C6 */
+      '?', /* U+E0C7 */
+      '?', /* U+E0C8 */
+      '?', /* U+E0C9 */
+      '?', /* U+E0CA */
+      '?', /* U+E0CB */
+      '?', /* U+E0CC */
+      '?', /* U+E0CD */
+      '?', /* U+E0CE */
+      '?', /* U+E0CF */
+      '?', /* U+E0D0 */
+      '?', /* U+E0D1 */
+      '?', /* U+E0D2 */
+      '?', /* U+E0D3 */
+      '?', /* U+E0D4 */
+      '?', /* U+E0D5 */
+      '?', /* U+E0D6 */
+      '?', /* U+E0D7 */
+      '?', /* U+E0D8 */
+      '?', /* U+E0D9 */
+      '?', /* U+E0DA */
+      '?', /* U+E0DB */
+      '?', /* U+E0DC */
+      '?', /* U+E0DD */
+      '?', /* U+E0DE */
+      '?', /* U+E0DF */
+      '?', /* U+E0E0 */
+      '?', /* U+E0E1 */
+      '?', /* U+E0E2 */
+      '?', /* U+E0E3 */
+      '?', /* U+E0E4 */
+      '?', /* U+E0E5 */
+      '?', /* U+E0E6 */
+      '?', /* U+E0E7 */
+      '?', /* U+E0E8 */
+      '?', /* U+E0E9 */
+      '?', /* U+E0EA */
+      '?', /* U+E0EB */
+      '?', /* U+E0EC */
+      '?', /* U+E0ED */
+      '?', /* U+E0EE */
+      '?', /* U+E0EF */
+      '?', /* U+E0F0 */
+      '?', /* U+E0F1 */
+      '?', /* U+E0F2 */
+      '?', /* U+E0F3 */
+      '?', /* U+E0F4 */
+      '?', /* U+E0F5 */
+      '?', /* U+E0F6 */
+      '?', /* U+E0F7 */
+      '?', /* U+E0F8 */
+      '?', /* U+E0F9 */
+      '?', /* U+E0FA */
+      '?', /* U+E0FB */
+      '?', /* U+E0FC */
+      '?', /* U+E0FD */
+      '?', /* U+E0FE */
+      '?', /* U+E0FF */
+      '?', /* U+E100 */
+      '?', /* U+E101 */
+      '?', /* U+E102 */
+      '?', /* U+E103 */
+      '?', /* U+E104 */
+      '?', /* U+E105 */
+      '?', /* U+E106 */
+      '?', /* U+E107 */
+      '?', /* U+E108 */
+      '?', /* U+E109 */
+      '?', /* U+E10A */
+      '?', /* U+E10B */
+      '?', /* U+E10C */
+      '?', /* U+E10D */
+      '?', /* U+E10E */
+      '?', /* U+E10F */
+      '?', /* U+E110 */
+      '?', /* U+E111 */
+      '?', /* U+E112 */
+      '?', /* U+E113 */
+      '?', /* U+E114 */
+      '?', /* U+E115 */
+      '?', /* U+E116 */
+      '?', /* U+E117 */
+      '?', /* U+E118 */
+      '?', /* U+E119 */
+      '?', /* U+E11A */
+      '?', /* U+E11B */
+      '?', /* U+E11C */
+      '?', /* U+E11D */
+      '?', /* U+E11E */
+      '?', /* U+E11F */
+      '?', /* U+E120 */
+      '?', /* U+E121 */
+      '?', /* U+E122 */
+      '?', /* U+E123 */
+      '?', /* U+E124 */
+      '?', /* U+E125 */
+      '?', /* U+E126 */
+      '?', /* U+E127 */
+      '?', /* U+E128 */
+      '?', /* U+E129 */
+      '?', /* U+E12A */
+      '?', /* U+E12B */
+      '?', /* U+E12C */
+      '?', /* U+E12D */
+      '?', /* U+E12E */
+      '?', /* U+E12F */
+      '?', /* U+E130 */
+      '?', /* U+E131 */
+      '?', /* U+E132 */
+      '?', /* U+E133 */
+      '?', /* U+E134 */
+      '?', /* U+E135 */
+      '?', /* U+E136 */
+      '?', /* U+E137 */
+      '?', /* U+E138 */
+      '?', /* U+E139 */
+      '?', /* U+E13A */
+      '?', /* U+E13B */
+      '?', /* U+E13C */
+      '?', /* U+E13D */
+      '?', /* U+E13E */
+      '?', /* U+E13F */
+      '?', /* U+E140 */
+      '?', /* U+E141 */
+      '?', /* U+E142 */
+      '?', /* U+E143 */
+      '?', /* U+E144 */
+      '?', /* U+E145 */
+      '?', /* U+E146 */
+      '?', /* U+E147 */
+      '?', /* U+E148 */
+      '?', /* U+E149 */
+      '?', /* U+E14A */
+      '?', /* U+E14B */
+      '?', /* U+E14C */
+      '?', /* U+E14D */
+      '?', /* U+E14E */
+      '?', /* U+E14F */
+      '?', /* U+E150 */
+      '?', /* U+E151 */
+      '?', /* U+E152 */
+      '?', /* U+E153 */
+      '?', /* U+E154 */
+      '?', /* U+E155 */
+      '?', /* U+E156 */
+      '?', /* U+E157 */
+      '?', /* U+E158 */
+      '?', /* U+E159 */
+      '?', /* U+E15A */
+      '?', /* U+E15B */
+      '?', /* U+E15C */
+      '?', /* U+E15D */
+      '?', /* U+E15E */
+      '?', /* U+E15F */
+      '?', /* U+E160 */
+      '?', /* U+E161 */
+      '?', /* U+E162 */
+      '?', /* U+E163 */
+      '?', /* U+E164 */
+      '?', /* U+E165 */
+      '?', /* U+E166 */
+      '?', /* U+E167 */
+      '?', /* U+E168 */
+      '?', /* U+E169 */
+      '?', /* U+E16A */
+      '?', /* U+E16B */
+      '?', /* U+E16C */
+      '?', /* U+E16D */
+      '?', /* U+E16E */
+      '?', /* U+E16F */
+      '?', /* U+E170 */
+      '?', /* U+E171 */
+      '?', /* U+E172 */
+      '?', /* U+E173 */
+      '?', /* U+E174 */
+      '?', /* U+E175 */
+      '?', /* U+E176 */
+      '?', /* U+E177 */
+      '?', /* U+E178 */
+      '?', /* U+E179 */
+      '?', /* U+E17A */
+      '?', /* U+E17B */
+      '?', /* U+E17C */
+      '?', /* U+E17D */
+      '?', /* U+E17E */
+      '?', /* U+E17F */
+      '?', /* U+E180 */
+      '?', /* U+E181 */
+      '?', /* U+E182 */
+      '?', /* U+E183 */
+      '?', /* U+E184 */
+      '?', /* U+E185 */
+      '?', /* U+E186 */
+      '?', /* U+E187 */
+      '?', /* U+E188 */
+      '?', /* U+E189 */
+      '?', /* U+E18A */
+      '?', /* U+E18B */
+      '?', /* U+E18C */
+      '?', /* U+E18D */
+      '?', /* U+E18E */
+      '?', /* U+E18F */
+      '?', /* U+E190 */
+      '?', /* U+E191 */
+      '?', /* U+E192 */
+      '?', /* U+E193 */
+      '?', /* U+E194 */
+      '?', /* U+E195 */
+      '?', /* U+E196 */
+      '?', /* U+E197 */
+      '?', /* U+E198 */
+      '?', /* U+E199 */
+      '?', /* U+E19A */
+      '?', /* U+E19B */
+      '?', /* U+E19C */
+      '?', /* U+E19D */
+      '?', /* U+E19E */
+      '?', /* U+E19F */
+      '?', /* U+E1A0 */
+      '?', /* U+E1A1 */
+      '?', /* U+E1A2 */
+      '?', /* U+E1A3 */
+      '?', /* U+E1A4 */
+      '?', /* U+E1A5 */
+      '?', /* U+E1A6 */
+      '?', /* U+E1A7 */
+      '?', /* U+E1A8 */
+      '?', /* U+E1A9 */
+      '?', /* U+E1AA */
+      '?', /* U+E1AB */
+      '?', /* U+E1AC */
+      '?', /* U+E1AD */
+      '?', /* U+E1AE */
+      '?', /* U+E1AF */
+      '?', /* U+E1B0 */
+      '?', /* U+E1B1 */
+      '?', /* U+E1B2 */
+      '?', /* U+E1B3 */
+      '?', /* U+E1B4 */
+      '?', /* U+E1B5 */
+      '?', /* U+E1B6 */
+      '?', /* U+E1B7 */
+      '?', /* U+E1B8 */
+      '?', /* U+E1B9 */
+      '?', /* U+E1BA */
+      '?', /* U+E1BB */
+      '?', /* U+E1BC */
+      '?', /* U+E1BD */
+      '?', /* U+E1BE */
+      '?', /* U+E1BF */
+      '?', /* U+E1C0 */
+      '?', /* U+E1C1 */
+      '?', /* U+E1C2 */
+      '?', /* U+E1C3 */
+      '?', /* U+E1C4 */
+      '?', /* U+E1C5 */
+      '?', /* U+E1C6 */
+      '?', /* U+E1C7 */
+      '?', /* U+E1C8 */
+      '?', /* U+E1C9 */
+      '?', /* U+E1CA */
+      '?', /* U+E1CB */
+      '?', /* U+E1CC */
+      '?', /* U+E1CD */
+      '?', /* U+E1CE */
+      '?', /* U+E1CF */
+      '?', /* U+E1D0 */
+      '?', /* U+E1D1 */
+      '?', /* U+E1D2 */
+      '?', /* U+E1D3 */
+      '?', /* U+E1D4 */
+      '?', /* U+E1D5 */
+      '?', /* U+E1D6 */
+      '?', /* U+E1D7 */
+      '?', /* U+E1D8 */
+      '?', /* U+E1D9 */
+      '?', /* U+E1DA */
+      '?', /* U+E1DB */
+      '?', /* U+E1DC */
+      '?', /* U+E1DD */
+      '?', /* U+E1DE */
+      '?', /* U+E1DF */
+      '?', /* U+E1E0 */
+      '?', /* U+E1E1 */
+      '?', /* U+E1E2 */
+      '?', /* U+E1E3 */
+      '?', /* U+E1E4 */
+      '?', /* U+E1E5 */
+      '?', /* U+E1E6 */
+      '?', /* U+E1E7 */
+      '?', /* U+E1E8 */
+      '?', /* U+E1E9 */
+      '?', /* U+E1EA */
+      '?', /* U+E1EB */
+      '?', /* U+E1EC */
+      '?', /* U+E1ED */
+      '?', /* U+E1EE */
+      '?', /* U+E1EF */
+      '?', /* U+E1F0 */
+      '?', /* U+E1F1 */
+      '?', /* U+E1F2 */
+      '?', /* U+E1F3 */
+      '?', /* U+E1F4 */
+      '?', /* U+E1F5 */
+      '?', /* U+E1F6 */
+      '?', /* U+E1F7 */
+      '?', /* U+E1F8 */
+      '?', /* U+E1F9 */
+      '?', /* U+E1FA */
+      '?', /* U+E1FB */
+      '?', /* U+E1FC */
+      '?', /* U+E1FD */
+      '?', /* U+E1FE */
+      '?', /* U+E1FF */
+      '?', /* U+E200 */
+      '?', /* U+E201 */
+      '?', /* U+E202 */
+      '?', /* U+E203 */
+      '?', /* U+E204 */
+      '?', /* U+E205 */
+      '?', /* U+E206 */
+      '?', /* U+E207 */
+      '?', /* U+E208 */
+      '?', /* U+E209 */
+      '?', /* U+E20A */
+      '?', /* U+E20B */
+      '?', /* U+E20C */
+      '?', /* U+E20D */
+      '?', /* U+E20E */
+      '?', /* U+E20F */
+      '?', /* U+E210 */
+      '?', /* U+E211 */
+      '?', /* U+E212 */
+      '?', /* U+E213 */
+      '?', /* U+E214 */
+      '?', /* U+E215 */
+      '?', /* U+E216 */
+      '?', /* U+E217 */
+      '?', /* U+E218 */
+      '?', /* U+E219 */
+      '?', /* U+E21A */
+      '?', /* U+E21B */
+      '?', /* U+E21C */
+      '?', /* U+E21D */
+      '?', /* U+E21E */
+      '?', /* U+E21F */
+      '?', /* U+E220 */
+      '?', /* U+E221 */
+      '?', /* U+E222 */
+      '?', /* U+E223 */
+      '?', /* U+E224 */
+      '?', /* U+E225 */
+      '?', /* U+E226 */
+      '?', /* U+E227 */
+      '?', /* U+E228 */
+      '?', /* U+E229 */
+      '?', /* U+E22A */
+      '?', /* U+E22B */
+      '?', /* U+E22C */
+      '?', /* U+E22D */
+      '?', /* U+E22E */
+      '?', /* U+E22F */
+      '?', /* U+E230 */
+      '?', /* U+E231 */
+      '?', /* U+E232 */
+      '?', /* U+E233 */
+      '?', /* U+E234 */
+      '?', /* U+E235 */
+      '?', /* U+E236 */
+      '?', /* U+E237 */
+      '?', /* U+E238 */
+      '?', /* U+E239 */
+      '?', /* U+E23A */
+      '?', /* U+E23B */
+      '?', /* U+E23C */
+      '?', /* U+E23D */
+      '?', /* U+E23E */
+      '?', /* U+E23F */
+      '?', /* U+E240 */
+      '?', /* U+E241 */
+      '?', /* U+E242 */
+      '?', /* U+E243 */
+      '?', /* U+E244 */
+      '?', /* U+E245 */
+      '?', /* U+E246 */
+      '?', /* U+E247 */
+      '?', /* U+E248 */
+      '?', /* U+E249 */
+      '?', /* U+E24A */
+      '?', /* U+E24B */
+      '?', /* U+E24C */
+      '?', /* U+E24D */
+      '?', /* U+E24E */
+      '?', /* U+E24F */
+      '?', /* U+E250 */
+      '?', /* U+E251 */
+      '?', /* U+E252 */
+      '?', /* U+E253 */
+      '?', /* U+E254 */
+      '?', /* U+E255 */
+      '?', /* U+E256 */
+      '?', /* U+E257 */
+      '?', /* U+E258 */
+      '?', /* U+E259 */
+      '?', /* U+E25A */
+      '?', /* U+E25B */
+      '?', /* U+E25C */
+      '?', /* U+E25D */
+      '?', /* U+E25E */
+      '?', /* U+E25F */
+      '?', /* U+E260 */
+      '?', /* U+E261 */
+      '?', /* U+E262 */
+      '?', /* U+E263 */
+      '?', /* U+E264 */
+      '?', /* U+E265 */
+      '?', /* U+E266 */
+      '?', /* U+E267 */
+      '?', /* U+E268 */
+      '?', /* U+E269 */
+      '?', /* U+E26A */
+      '?', /* U+E26B */
+      '?', /* U+E26C */
+      '?', /* U+E26D */
+      '?', /* U+E26E */
+      '?', /* U+E26F */
+      '?', /* U+E270 */
+      '?', /* U+E271 */
+      '?', /* U+E272 */
+      '?', /* U+E273 */
+      '?', /* U+E274 */
+      '?', /* U+E275 */
+      '?', /* U+E276 */
+      '?', /* U+E277 */
+      '?', /* U+E278 */
+      '?', /* U+E279 */
+      '?', /* U+E27A */
+      '?', /* U+E27B */
+      '?', /* U+E27C */
+      '?', /* U+E27D */
+      '?', /* U+E27E */
+      '?', /* U+E27F */
+      '?', /* U+E280 */
+      '?', /* U+E281 */
+      '?', /* U+E282 */
+      '?', /* U+E283 */
+      '?', /* U+E284 */
+      '?', /* U+E285 */
+      '?', /* U+E286 */
+      '?', /* U+E287 */
+      '?', /* U+E288 */
+      '?', /* U+E289 */
+      '?', /* U+E28A */
+      '?', /* U+E28B */
+      '?', /* U+E28C */
+      '?', /* U+E28D */
+      '?', /* U+E28E */
+      '?', /* U+E28F */
+      '?', /* U+E290 */
+      '?', /* U+E291 */
+      '?', /* U+E292 */
+      '?', /* U+E293 */
+      '?', /* U+E294 */
+      '?', /* U+E295 */
+      '?', /* U+E296 */
+      '?', /* U+E297 */
+      '?', /* U+E298 */
+      '?', /* U+E299 */
+      '?', /* U+E29A */
+      '?', /* U+E29B */
+      '?', /* U+E29C */
+      '?', /* U+E29D */
+      '?', /* U+E29E */
+      '?', /* U+E29F */
+      '?', /* U+E2A0 */
+      '?', /* U+E2A1 */
+      '?', /* U+E2A2 */
+      '?', /* U+E2A3 */
+      '?', /* U+E2A4 */
+      '?', /* U+E2A5 */
+      '?', /* U+E2A6 */
+      '?', /* U+E2A7 */
+      '?', /* U+E2A8 */
+      '?', /* U+E2A9 */
+      '?', /* U+E2AA */
+      '?', /* U+E2AB */
+      '?', /* U+E2AC */
+      '?', /* U+E2AD */
+      '?', /* U+E2AE */
+      '?', /* U+E2AF */
+      '?', /* U+E2B0 */
+      '?', /* U+E2B1 */
+      '?', /* U+E2B2 */
+      '?', /* U+E2B3 */
+      '?', /* U+E2B4 */
+      '?', /* U+E2B5 */
+      '?', /* U+E2B6 */
+      '?', /* U+E2B7 */
+      '?', /* U+E2B8 */
+      '?', /* U+E2B9 */
+      '?', /* U+E2BA */
+      '?', /* U+E2BB */
+      '?', /* U+E2BC */
+      '?', /* U+E2BD */
+      '?', /* U+E2BE */
+      '?', /* U+E2BF */
+      '?', /* U+E2C0 */
+      '?', /* U+E2C1 */
+      '?', /* U+E2C2 */
+      '?', /* U+E2C3 */
+      '?', /* U+E2C4 */
+      '?', /* U+E2C5 */
+      '?', /* U+E2C6 */
+      '?', /* U+E2C7 */
+      '?', /* U+E2C8 */
+      '?', /* U+E2C9 */
+      '?', /* U+E2CA */
+      '?', /* U+E2CB */
+      '?', /* U+E2CC */
+      '?', /* U+E2CD */
+      '?', /* U+E2CE */
+      '?', /* U+E2CF */
+      '?', /* U+E2D0 */
+      '?', /* U+E2D1 */
+      '?', /* U+E2D2 */
+      '?', /* U+E2D3 */
+      '?', /* U+E2D4 */
+      '?', /* U+E2D5 */
+      '?', /* U+E2D6 */
+      '?', /* U+E2D7 */
+      '?', /* U+E2D8 */
+      '?', /* U+E2D9 */
+      '?', /* U+E2DA */
+      '?', /* U+E2DB */
+      '?', /* U+E2DC */
+      '?', /* U+E2DD */
+      '?', /* U+E2DE */
+      '?', /* U+E2DF */
+      '?', /* U+E2E0 */
+      '?', /* U+E2E1 */
+      '?', /* U+E2E2 */
+      '?', /* U+E2E3 */
+      '?', /* U+E2E4 */
+      '?', /* U+E2E5 */
+      '?', /* U+E2E6 */
+      '?', /* U+E2E7 */
+      '?', /* U+E2E8 */
+      '?', /* U+E2E9 */
+      '?', /* U+E2EA */
+      '?', /* U+E2EB */
+      '?', /* U+E2EC */
+      '?', /* U+E2ED */
+      '?', /* U+E2EE */
+      '?', /* U+E2EF */
+      '?', /* U+E2F0 */
+      '?', /* U+E2F1 */
+      '?', /* U+E2F2 */
+      '?', /* U+E2F3 */
+      '?', /* U+E2F4 */
+      '?', /* U+E2F5 */
+      '?', /* U+E2F6 */
+      '?', /* U+E2F7 */
+      '?', /* U+E2F8 */
+      '?', /* U+E2F9 */
+      '?', /* U+E2FA */
+      '?', /* U+E2FB */
+      '?', /* U+E2FC */
+      '?', /* U+E2FD */
+      '?', /* U+E2FE */
+      '?', /* U+E2FF */
+      '?', /* U+E300 */
+      '?', /* U+E301 */
+      '?', /* U+E302 */
+      '?', /* U+E303 */
+      '?', /* U+E304 */
+      '?', /* U+E305 */
+      '?', /* U+E306 */
+      '?', /* U+E307 */
+      '?', /* U+E308 */
+      '?', /* U+E309 */
+      '?', /* U+E30A */
+      '?', /* U+E30B */
+      '?', /* U+E30C */
+      '?', /* U+E30D */
+      '?', /* U+E30E */
+      '?', /* U+E30F */
+      '?', /* U+E310 */
+      '?', /* U+E311 */
+      '?', /* U+E312 */
+      '?', /* U+E313 */
+      '?', /* U+E314 */
+      '?', /* U+E315 */
+      '?', /* U+E316 */
+      '?', /* U+E317 */
+      '?', /* U+E318 */
+      '?', /* U+E319 */
+      '?', /* U+E31A */
+      '?', /* U+E31B */
+      '?', /* U+E31C */
+      '?', /* U+E31D */
+      '?', /* U+E31E */
+      '?', /* U+E31F */
+      '?', /* U+E320 */
+      '?', /* U+E321 */
+      '?', /* U+E322 */
+      '?', /* U+E323 */
+      '?', /* U+E324 */
+      '?', /* U+E325 */
+      '?', /* U+E326 */
+      '?', /* U+E327 */
+      '?', /* U+E328 */
+      '?', /* U+E329 */
+      '?', /* U+E32A */
+      '?', /* U+E32B */
+      '?', /* U+E32C */
+      '?', /* U+E32D */
+      '?', /* U+E32E */
+      '?', /* U+E32F */
+      '?', /* U+E330 */
+      '?', /* U+E331 */
+      '?', /* U+E332 */
+      '?', /* U+E333 */
+      '?', /* U+E334 */
+      '?', /* U+E335 */
+      '?', /* U+E336 */
+      '?', /* U+E337 */
+      '?', /* U+E338 */
+      '?', /* U+E339 */
+      '?', /* U+E33A */
+      '?', /* U+E33B */
+      '?', /* U+E33C */
+      '?', /* U+E33D */
+      '?', /* U+E33E */
+      '?', /* U+E33F */
+      '?', /* U+E340 */
+      '?', /* U+E341 */
+      '?', /* U+E342 */
+      '?', /* U+E343 */
+      '?', /* U+E344 */
+      '?', /* U+E345 */
+      '?', /* U+E346 */
+      '?', /* U+E347 */
+      '?', /* U+E348 */
+      '?', /* U+E349 */
+      '?', /* U+E34A */
+      '?', /* U+E34B */
+      '?', /* U+E34C */
+      '?', /* U+E34D */
+      '?', /* U+E34E */
+      '?', /* U+E34F */
+      '?', /* U+E350 */
+      '?', /* U+E351 */
+      '?', /* U+E352 */
+      '?', /* U+E353 */
+      '?', /* U+E354 */
+      '?', /* U+E355 */
+      '?', /* U+E356 */
+      '?', /* U+E357 */
+      '?', /* U+E358 */
+      '?', /* U+E359 */
+      '?', /* U+E35A */
+      '?', /* U+E35B */
+      '?', /* U+E35C */
+      '?', /* U+E35D */
+      '?', /* U+E35E */
+      '?', /* U+E35F */
+      '?', /* U+E360 */
+      '?', /* U+E361 */
+      '?', /* U+E362 */
+      '?', /* U+E363 */
+      '?', /* U+E364 */
+      '?', /* U+E365 */
+      '?', /* U+E366 */
+      '?', /* U+E367 */
+      '?', /* U+E368 */
+      '?', /* U+E369 */
+      '?', /* U+E36A */
+      '?', /* U+E36B */
+      '?', /* U+E36C */
+      '?', /* U+E36D */
+      '?', /* U+E36E */
+      '?', /* U+E36F */
+      '?', /* U+E370 */
+      '?', /* U+E371 */
+      '?', /* U+E372 */
+      '?', /* U+E373 */
+      '?', /* U+E374 */
+      '?', /* U+E375 */
+      '?', /* U+E376 */
+      '?', /* U+E377 */
+      '?', /* U+E378 */
+      '?', /* U+E379 */
+      '?', /* U+E37A */
+      '?', /* U+E37B */
+      '?', /* U+E37C */
+      '?', /* U+E37D */
+      '?', /* U+E37E */
+      '?', /* U+E37F */
+      '?', /* U+E380 */
+      '?', /* U+E381 */
+      '?', /* U+E382 */
+      '?', /* U+E383 */
+      '?', /* U+E384 */
+      '?', /* U+E385 */
+      '?', /* U+E386 */
+      '?', /* U+E387 */
+      '?', /* U+E388 */
+      '?', /* U+E389 */
+      '?', /* U+E38A */
+      '?', /* U+E38B */
+      '?', /* U+E38C */
+      '?', /* U+E38D */
+      '?', /* U+E38E */
+      '?', /* U+E38F */
+      '?', /* U+E390 */
+      '?', /* U+E391 */
+      '?', /* U+E392 */
+      '?', /* U+E393 */
+      '?', /* U+E394 */
+      '?', /* U+E395 */
+      '?', /* U+E396 */
+      '?', /* U+E397 */
+      '?', /* U+E398 */
+      '?', /* U+E399 */
+      '?', /* U+E39A */
+      '?', /* U+E39B */
+      '?', /* U+E39C */
+      '?', /* U+E39D */
+      '?', /* U+E39E */
+      '?', /* U+E39F */
+      '?', /* U+E3A0 */
+      '?', /* U+E3A1 */
+      '?', /* U+E3A2 */
+      '?', /* U+E3A3 */
+      '?', /* U+E3A4 */
+      '?', /* U+E3A5 */
+      '?', /* U+E3A6 */
+      '?', /* U+E3A7 */
+      '?', /* U+E3A8 */
+      '?', /* U+E3A9 */
+      '?', /* U+E3AA */
+      '?', /* U+E3AB */
+      '?', /* U+E3AC */
+      '?', /* U+E3AD */
+      '?', /* U+E3AE */
+      '?', /* U+E3AF */
+      '?', /* U+E3B0 */
+      '?', /* U+E3B1 */
+      '?', /* U+E3B2 */
+      '?', /* U+E3B3 */
+      '?', /* U+E3B4 */
+      '?', /* U+E3B5 */
+      '?', /* U+E3B6 */
+      '?', /* U+E3B7 */
+      '?', /* U+E3B8 */
+      '?', /* U+E3B9 */
+      '?', /* U+E3BA */
+      '?', /* U+E3BB */
+      '?', /* U+E3BC */
+      '?', /* U+E3BD */
+      '?', /* U+E3BE */
+      '?', /* U+E3BF */
+      '?', /* U+E3C0 */
+      '?', /* U+E3C1 */
+      '?', /* U+E3C2 */
+      '?', /* U+E3C3 */
+      '?', /* U+E3C4 */
+      '?', /* U+E3C5 */
+      '?', /* U+E3C6 */
+      '?', /* U+E3C7 */
+      '?', /* U+E3C8 */
+      '?', /* U+E3C9 */
+      '?', /* U+E3CA */
+      '?', /* U+E3CB */
+      '?', /* U+E3CC */
+      '?', /* U+E3CD */
+      '?', /* U+E3CE */
+      '?', /* U+E3CF */
+      '?', /* U+E3D0 */
+      '?', /* U+E3D1 */
+      '?', /* U+E3D2 */
+      '?', /* U+E3D3 */
+      '?', /* U+E3D4 */
+      '?', /* U+E3D5 */
+      '?', /* U+E3D6 */
+      '?', /* U+E3D7 */
+      '?', /* U+E3D8 */
+      '?', /* U+E3D9 */
+      '?', /* U+E3DA */
+      '?', /* U+E3DB */
+      '?', /* U+E3DC */
+      '?', /* U+E3DD */
+      '?', /* U+E3DE */
+      '?', /* U+E3DF */
+      '?', /* U+E3E0 */
+      '?', /* U+E3E1 */
+      '?', /* U+E3E2 */
+      '?', /* U+E3E3 */
+      '?', /* U+E3E4 */
+      '?', /* U+E3E5 */
+      '?', /* U+E3E6 */
+      '?', /* U+E3E7 */
+      '?', /* U+E3E8 */
+      '?', /* U+E3E9 */
+      '?', /* U+E3EA */
+      '?', /* U+E3EB */
+      '?', /* U+E3EC */
+      '?', /* U+E3ED */
+      '?', /* U+E3EE */
+      '?', /* U+E3EF */
+      '?', /* U+E3F0 */
+      '?', /* U+E3F1 */
+      '?', /* U+E3F2 */
+      '?', /* U+E3F3 */
+      '?', /* U+E3F4 */
+      '?', /* U+E3F5 */
+      '?', /* U+E3F6 */
+      '?', /* U+E3F7 */
+      '?', /* U+E3F8 */
+      '?', /* U+E3F9 */
+      '?', /* U+E3FA */
+      '?', /* U+E3FB */
+      '?', /* U+E3FC */
+      '?', /* U+E3FD */
+      '?', /* U+E3FE */
+      '?', /* U+E3FF */
+      '?', /* U+E400 */
+      '?', /* U+E401 */
+      '?', /* U+E402 */
+      '?', /* U+E403 */
+      '?', /* U+E404 */
+      '?', /* U+E405 */
+      '?', /* U+E406 */
+      '?', /* U+E407 */
+      '?', /* U+E408 */
+      '?', /* U+E409 */
+      '?', /* U+E40A */
+      '?', /* U+E40B */
+      '?', /* U+E40C */
+      '?', /* U+E40D */
+      '?', /* U+E40E */
+      '?', /* U+E40F */
+      '?', /* U+E410 */
+      '?', /* U+E411 */
+      '?', /* U+E412 */
+      '?', /* U+E413 */
+      '?', /* U+E414 */
+      '?', /* U+E415 */
+      '?', /* U+E416 */
+      '?', /* U+E417 */
+      '?', /* U+E418 */
+      '?', /* U+E419 */
+      '?', /* U+E41A */
+      '?', /* U+E41B */
+      '?', /* U+E41C */
+      '?', /* U+E41D */
+      '?', /* U+E41E */
+      '?', /* U+E41F */
+      '?', /* U+E420 */
+      '?', /* U+E421 */
+      '?', /* U+E422 */
+      '?', /* U+E423 */
+      '?', /* U+E424 */
+      '?', /* U+E425 */
+      '?', /* U+E426 */
+      '?', /* U+E427 */
+      '?', /* U+E428 */
+      '?', /* U+E429 */
+      '?', /* U+E42A */
+      '?', /* U+E42B */
+      '?', /* U+E42C */
+      '?', /* U+E42D */
+      '?', /* U+E42E */
+      '?', /* U+E42F */
+      '?', /* U+E430 */
+      '?', /* U+E431 */
+      '?', /* U+E432 */
+      '?', /* U+E433 */
+      '?', /* U+E434 */
+      '?', /* U+E435 */
+      '?', /* U+E436 */
+      '?', /* U+E437 */
+      '?', /* U+E438 */
+      '?', /* U+E439 */
+      '?', /* U+E43A */
+      '?', /* U+E43B */
+      '?', /* U+E43C */
+      '?', /* U+E43D */
+      '?', /* U+E43E */
+      '?', /* U+E43F */
+      '?', /* U+E440 */
+      '?', /* U+E441 */
+      '?', /* U+E442 */
+      '?', /* U+E443 */
+      '?', /* U+E444 */
+      '?', /* U+E445 */
+      '?', /* U+E446 */
+      '?', /* U+E447 */
+      '?', /* U+E448 */
+      '?', /* U+E449 */
+      '?', /* U+E44A */
+      '?', /* U+E44B */
+      '?', /* U+E44C */
+      '?', /* U+E44D */
+      '?', /* U+E44E */
+      '?', /* U+E44F */
+      '?', /* U+E450 */
+      '?', /* U+E451 */
+      '?', /* U+E452 */
+      '?', /* U+E453 */
+      '?', /* U+E454 */
+      '?', /* U+E455 */
+      '?', /* U+E456 */
+      '?', /* U+E457 */
+      '?', /* U+E458 */
+      '?', /* U+E459 */
+      '?', /* U+E45A */
+      '?', /* U+E45B */
+      '?', /* U+E45C */
+      '?', /* U+E45D */
+      '?', /* U+E45E */
+      '?', /* U+E45F */
+      '?', /* U+E460 */
+      '?', /* U+E461 */
+      '?', /* U+E462 */
+      '?', /* U+E463 */
+      '?', /* U+E464 */
+      '?', /* U+E465 */
+      '?', /* U+E466 */
+      '?', /* U+E467 */
+      '?', /* U+E468 */
+      '?', /* U+E469 */
+      '?', /* U+E46A */
+      '?', /* U+E46B */
+      '?', /* U+E46C */
+      '?', /* U+E46D */
+      '?', /* U+E46E */
+      '?', /* U+E46F */
+      '?', /* U+E470 */
+      '?', /* U+E471 */
+      '?', /* U+E472 */
+      '?', /* U+E473 */
+      '?', /* U+E474 */
+      '?', /* U+E475 */
+      '?', /* U+E476 */
+      '?', /* U+E477 */
+      '?', /* U+E478 */
+      '?', /* U+E479 */
+      '?', /* U+E47A */
+      '?', /* U+E47B */
+      '?', /* U+E47C */
+      '?', /* U+E47D */
+      '?', /* U+E47E */
+      '?', /* U+E47F */
+      '?', /* U+E480 */
+      '?', /* U+E481 */
+      '?', /* U+E482 */
+      '?', /* U+E483 */
+      '?', /* U+E484 */
+      '?', /* U+E485 */
+      '?', /* U+E486 */
+      '?', /* U+E487 */
+      '?', /* U+E488 */
+      '?', /* U+E489 */
+      '?', /* U+E48A */
+      '?', /* U+E48B */
+      '?', /* U+E48C */
+      '?', /* U+E48D */
+      '?', /* U+E48E */
+      '?', /* U+E48F */
+      '?', /* U+E490 */
+      '?', /* U+E491 */
+      '?', /* U+E492 */
+      '?', /* U+E493 */
+      '?', /* U+E494 */
+      '?', /* U+E495 */
+      '?', /* U+E496 */
+      '?', /* U+E497 */
+      '?', /* U+E498 */
+      '?', /* U+E499 */
+      '?', /* U+E49A */
+      '?', /* U+E49B */
+      '?', /* U+E49C */
+      '?', /* U+E49D */
+      '?', /* U+E49E */
+      '?', /* U+E49F */
+      '?', /* U+E4A0 */
+      '?', /* U+E4A1 */
+      '?', /* U+E4A2 */
+      '?', /* U+E4A3 */
+      '?', /* U+E4A4 */
+      '?', /* U+E4A5 */
+      '?', /* U+E4A6 */
+      '?', /* U+E4A7 */
+      '?', /* U+E4A8 */
+      '?', /* U+E4A9 */
+      '?', /* U+E4AA */
+      '?', /* U+E4AB */
+      '?', /* U+E4AC */
+      '?', /* U+E4AD */
+      '?', /* U+E4AE */
+      '?', /* U+E4AF */
+      '?', /* U+E4B0 */
+      '?', /* U+E4B1 */
+      '?', /* U+E4B2 */
+      '?', /* U+E4B3 */
+      '?', /* U+E4B4 */
+      '?', /* U+E4B5 */
+      '?', /* U+E4B6 */
+      '?', /* U+E4B7 */
+      '?', /* U+E4B8 */
+      '?', /* U+E4B9 */
+      '?', /* U+E4BA */
+      '?', /* U+E4BB */
+      '?', /* U+E4BC */
+      '?', /* U+E4BD */
+      '?', /* U+E4BE */
+      '?', /* U+E4BF */
+      '?', /* U+E4C0 */
+      '?', /* U+E4C1 */
+      '?', /* U+E4C2 */
+      '?', /* U+E4C3 */
+      '?', /* U+E4C4 */
+      '?', /* U+E4C5 */
+      '?', /* U+E4C6 */
+      '?', /* U+E4C7 */
+      '?', /* U+E4C8 */
+      '?', /* U+E4C9 */
+      '?', /* U+E4CA */
+      '?', /* U+E4CB */
+      '?', /* U+E4CC */
+      '?', /* U+E4CD */
+      '?', /* U+E4CE */
+      '?', /* U+E4CF */
+      '?', /* U+E4D0 */
+      '?', /* U+E4D1 */
+      '?', /* U+E4D2 */
+      '?', /* U+E4D3 */
+      '?', /* U+E4D4 */
+      '?', /* U+E4D5 */
+      '?', /* U+E4D6 */
+      '?', /* U+E4D7 */
+      '?', /* U+E4D8 */
+      '?', /* U+E4D9 */
+      '?', /* U+E4DA */
+      '?', /* U+E4DB */
+      '?', /* U+E4DC */
+      '?', /* U+E4DD */
+      '?', /* U+E4DE */
+      '?', /* U+E4DF */
+      '?', /* U+E4E0 */
+      '?', /* U+E4E1 */
+      '?', /* U+E4E2 */
+      '?', /* U+E4E3 */
+      '?', /* U+E4E4 */
+      '?', /* U+E4E5 */
+      '?', /* U+E4E6 */
+      '?', /* U+E4E7 */
+      '?', /* U+E4E8 */
+      '?', /* U+E4E9 */
+      '?', /* U+E4EA */
+      '?', /* U+E4EB */
+      '?', /* U+E4EC */
+      '?', /* U+E4ED */
+      '?', /* U+E4EE */
+      '?', /* U+E4EF */
+      '?', /* U+E4F0 */
+      '?', /* U+E4F1 */
+      '?', /* U+E4F2 */
+      '?', /* U+E4F3 */
+      '?', /* U+E4F4 */
+      '?', /* U+E4F5 */
+      '?', /* U+E4F6 */
+      '?', /* U+E4F7 */
+      '?', /* U+E4F8 */
+      '?', /* U+E4F9 */
+      '?', /* U+E4FA */
+      '?', /* U+E4FB */
+      '?', /* U+E4FC */
+      '?', /* U+E4FD */
+      '?', /* U+E4FE */
+      '?', /* U+E4FF */
+      '?', /* U+E500 */
+      '?', /* U+E501 */
+      '?', /* U+E502 */
+      '?', /* U+E503 */
+      '?', /* U+E504 */
+      '?', /* U+E505 */
+      '?', /* U+E506 */
+      '?', /* U+E507 */
+      '?', /* U+E508 */
+      '?', /* U+E509 */
+      '?', /* U+E50A */
+      '?', /* U+E50B */
+      '?', /* U+E50C */
+      '?', /* U+E50D */
+      '?', /* U+E50E */
+      '?', /* U+E50F */
+      '?', /* U+E510 */
+      '?', /* U+E511 */
+      '?', /* U+E512 */
+      '?', /* U+E513 */
+      '?', /* U+E514 */
+      '?', /* U+E515 */
+      '?', /* U+E516 */
+      '?', /* U+E517 */
+      '?', /* U+E518 */
+      '?', /* U+E519 */
+      '?', /* U+E51A */
+      '?', /* U+E51B */
+      '?', /* U+E51C */
+      '?', /* U+E51D */
+      '?', /* U+E51E */
+      '?', /* U+E51F */
+      '?', /* U+E520 */
+      '?', /* U+E521 */
+      '?', /* U+E522 */
+      '?', /* U+E523 */
+      '?', /* U+E524 */
+      '?', /* U+E525 */
+      '?', /* U+E526 */
+      '?', /* U+E527 */
+      '?', /* U+E528 */
+      '?', /* U+E529 */
+      '?', /* U+E52A */
+      '?', /* U+E52B */
+      '?', /* U+E52C */
+      '?', /* U+E52D */
+      '?', /* U+E52E */
+      '?', /* U+E52F */
+      '?', /* U+E530 */
+      '?', /* U+E531 */
+      '?', /* U+E532 */
+      '?', /* U+E533 */
+      '?', /* U+E534 */
+      '?', /* U+E535 */
+      '?', /* U+E536 */
+      '?', /* U+E537 */
+      '?', /* U+E538 */
+      '?', /* U+E539 */
+      '?', /* U+E53A */
+      '?', /* U+E53B */
+      '?', /* U+E53C */
+      '?', /* U+E53D */
+      '?', /* U+E53E */
+      '?', /* U+E53F */
+      '?', /* U+E540 */
+      '?', /* U+E541 */
+      '?', /* U+E542 */
+      '?', /* U+E543 */
+      '?', /* U+E544 */
+      '?', /* U+E545 */
+      '?', /* U+E546 */
+      '?', /* U+E547 */
+      '?', /* U+E548 */
+      '?', /* U+E549 */
+      '?', /* U+E54A */
+      '?', /* U+E54B */
+      '?', /* U+E54C */
+      '?', /* U+E54D */
+      '?', /* U+E54E */
+      '?', /* U+E54F */
+      '?', /* U+E550 */
+      '?', /* U+E551 */
+      '?', /* U+E552 */
+      '?', /* U+E553 */
+      '?', /* U+E554 */
+      '?', /* U+E555 */
+      '?', /* U+E556 */
+      '?', /* U+E557 */
+      '?', /* U+E558 */
+      '?', /* U+E559 */
+      '?', /* U+E55A */
+      '?', /* U+E55B */
+      '?', /* U+E55C */
+      '?', /* U+E55D */
+      '?', /* U+E55E */
+      '?', /* U+E55F */
+      '?', /* U+E560 */
+      '?', /* U+E561 */
+      '?', /* U+E562 */
+      '?', /* U+E563 */
+      '?', /* U+E564 */
+      '?', /* U+E565 */
+      '?', /* U+E566 */
+      '?', /* U+E567 */
+      '?', /* U+E568 */
+      '?', /* U+E569 */
+      '?', /* U+E56A */
+      '?', /* U+E56B */
+      '?', /* U+E56C */
+      '?', /* U+E56D */
+      '?', /* U+E56E */
+      '?', /* U+E56F */
+      '?', /* U+E570 */
+      '?', /* U+E571 */
+      '?', /* U+E572 */
+      '?', /* U+E573 */
+      '?', /* U+E574 */
+      '?', /* U+E575 */
+      '?', /* U+E576 */
+      '?', /* U+E577 */
+      '?', /* U+E578 */
+      '?', /* U+E579 */
+      '?', /* U+E57A */
+      '?', /* U+E57B */
+      '?', /* U+E57C */
+      '?', /* U+E57D */
+      '?', /* U+E57E */
+      '?', /* U+E57F */
+      '?', /* U+E580 */
+      '?', /* U+E581 */
+      '?', /* U+E582 */
+      '?', /* U+E583 */
+      '?', /* U+E584 */
+      '?', /* U+E585 */
+      '?', /* U+E586 */
+      '?', /* U+E587 */
+      '?', /* U+E588 */
+      '?', /* U+E589 */
+      '?', /* U+E58A */
+      '?', /* U+E58B */
+      '?', /* U+E58C */
+      '?', /* U+E58D */
+      '?', /* U+E58E */
+      '?', /* U+E58F */
+      '?', /* U+E590 */
+      '?', /* U+E591 */
+      '?', /* U+E592 */
+      '?', /* U+E593 */
+      '?', /* U+E594 */
+      '?', /* U+E595 */
+      '?', /* U+E596 */
+      '?', /* U+E597 */
+      '?', /* U+E598 */
+      '?', /* U+E599 */
+      '?', /* U+E59A */
+      '?', /* U+E59B */
+      '?', /* U+E59C */
+      '?', /* U+E59D */
+      '?', /* U+E59E */
+      '?', /* U+E59F */
+      '?', /* U+E5A0 */
+      '?', /* U+E5A1 */
+      '?', /* U+E5A2 */
+      '?', /* U+E5A3 */
+      '?', /* U+E5A4 */
+      '?', /* U+E5A5 */
+      '?', /* U+E5A6 */
+      '?', /* U+E5A7 */
+      '?', /* U+E5A8 */
+      '?', /* U+E5A9 */
+      '?', /* U+E5AA */
+      '?', /* U+E5AB */
+      '?', /* U+E5AC */
+      '?', /* U+E5AD */
+      '?', /* U+E5AE */
+      '?', /* U+E5AF */
+      '?', /* U+E5B0 */
+      '?', /* U+E5B1 */
+      '?', /* U+E5B2 */
+      '?', /* U+E5B3 */
+      '?', /* U+E5B4 */
+      '?', /* U+E5B5 */
+      '?', /* U+E5B6 */
+      '?', /* U+E5B7 */
+      '?', /* U+E5B8 */
+      '?', /* U+E5B9 */
+      '?', /* U+E5BA */
+      '?', /* U+E5BB */
+      '?', /* U+E5BC */
+      '?', /* U+E5BD */
+      '?', /* U+E5BE */
+      '?', /* U+E5BF */
+      '?', /* U+E5C0 */
+      '?', /* U+E5C1 */
+      '?', /* U+E5C2 */
+      '?', /* U+E5C3 */
+      '?', /* U+E5C4 */
+      '?', /* U+E5C5 */
+      '?', /* U+E5C6 */
+      '?', /* U+E5C7 */
+      '?', /* U+E5C8 */
+      '?', /* U+E5C9 */
+      '?', /* U+E5CA */
+      '?', /* U+E5CB */
+      '?', /* U+E5CC */
+      '?', /* U+E5CD */
+      '?', /* U+E5CE */
+      '?', /* U+E5CF */
+      '?', /* U+E5D0 */
+      '?', /* U+E5D1 */
+      '?', /* U+E5D2 */
+      '?', /* U+E5D3 */
+      '?', /* U+E5D4 */
+      '?', /* U+E5D5 */
+      '?', /* U+E5D6 */
+      '?', /* U+E5D7 */
+      '?', /* U+E5D8 */
+      '?', /* U+E5D9 */
+      '?', /* U+E5DA */
+      '?', /* U+E5DB */
+      '?', /* U+E5DC */
+      '?', /* U+E5DD */
+      '?', /* U+E5DE */
+      '?', /* U+E5DF */
+      '?', /* U+E5E0 */
+      '?', /* U+E5E1 */
+      '?', /* U+E5E2 */
+      '?', /* U+E5E3 */
+      '?', /* U+E5E4 */
+      '?', /* U+E5E5 */
+      '?', /* U+E5E6 */
+      '?', /* U+E5E7 */
+      '?', /* U+E5E8 */
+      '?', /* U+E5E9 */
+      '?', /* U+E5EA */
+      '?', /* U+E5EB */
+      '?', /* U+E5EC */
+      '?', /* U+E5ED */
+      '?', /* U+E5EE */
+      '?', /* U+E5EF */
+      '?', /* U+E5F0 */
+      '?', /* U+E5F1 */
+      '?', /* U+E5F2 */
+      '?', /* U+E5F3 */
+      '?', /* U+E5F4 */
+      '?', /* U+E5F5 */
+      '?', /* U+E5F6 */
+      '?', /* U+E5F7 */
+      '?', /* U+E5F8 */
+      '?', /* U+E5F9 */
+      '?', /* U+E5FA */
+      '?', /* U+E5FB */
+      '?', /* U+E5FC */
+      '?', /* U+E5FD */
+      '?', /* U+E5FE */
+      '?', /* U+E5FF */
+      '?', /* U+E600 */
+      '?', /* U+E601 */
+      '?', /* U+E602 */
+      '?', /* U+E603 */
+      '?', /* U+E604 */
+      '?', /* U+E605 */
+      '?', /* U+E606 */
+      '?', /* U+E607 */
+      '?', /* U+E608 */
+      '?', /* U+E609 */
+      '?', /* U+E60A */
+      '?', /* U+E60B */
+      '?', /* U+E60C */
+      '?', /* U+E60D */
+      '?', /* U+E60E */
+      '?', /* U+E60F */
+      '?', /* U+E610 */
+      '?', /* U+E611 */
+      '?', /* U+E612 */
+      '?', /* U+E613 */
+      '?', /* U+E614 */
+      '?', /* U+E615 */
+      '?', /* U+E616 */
+      '?', /* U+E617 */
+      '?', /* U+E618 */
+      '?', /* U+E619 */
+      '?', /* U+E61A */
+      '?', /* U+E61B */
+      '?', /* U+E61C */
+      '?', /* U+E61D */
+      '?', /* U+E61E */
+      '?', /* U+E61F */
+      '?', /* U+E620 */
+      '?', /* U+E621 */
+      '?', /* U+E622 */
+      '?', /* U+E623 */
+      '?', /* U+E624 */
+      '?', /* U+E625 */
+      '?', /* U+E626 */
+      '?', /* U+E627 */
+      '?', /* U+E628 */
+      '?', /* U+E629 */
+      '?', /* U+E62A */
+      '?', /* U+E62B */
+      '?', /* U+E62C */
+      '?', /* U+E62D */
+      '?', /* U+E62E */
+      '?', /* U+E62F */
+      '?', /* U+E630 */
+      '?', /* U+E631 */
+      '?', /* U+E632 */
+      '?', /* U+E633 */
+      '?', /* U+E634 */
+      '?', /* U+E635 */
+      '?', /* U+E636 */
+      '?', /* U+E637 */
+      '?', /* U+E638 */
+      '?', /* U+E639 */
+      '?', /* U+E63A */
+      '?', /* U+E63B */
+      '?', /* U+E63C */
+      '?', /* U+E63D */
+      '?', /* U+E63E */
+      '?', /* U+E63F */
+      '?', /* U+E640 */
+      '?', /* U+E641 */
+      '?', /* U+E642 */
+      '?', /* U+E643 */
+      '?', /* U+E644 */
+      '?', /* U+E645 */
+      '?', /* U+E646 */
+      '?', /* U+E647 */
+      '?', /* U+E648 */
+      '?', /* U+E649 */
+      '?', /* U+E64A */
+      '?', /* U+E64B */
+      '?', /* U+E64C */
+      '?', /* U+E64D */
+      '?', /* U+E64E */
+      '?', /* U+E64F */
+      '?', /* U+E650 */
+      '?', /* U+E651 */
+      '?', /* U+E652 */
+      '?', /* U+E653 */
+      '?', /* U+E654 */
+      '?', /* U+E655 */
+      '?', /* U+E656 */
+      '?', /* U+E657 */
+      '?', /* U+E658 */
+      '?', /* U+E659 */
+      '?', /* U+E65A */
+      '?', /* U+E65B */
+      '?', /* U+E65C */
+      '?', /* U+E65D */
+      '?', /* U+E65E */
+      '?', /* U+E65F */
+      '?', /* U+E660 */
+      '?', /* U+E661 */
+      '?', /* U+E662 */
+      '?', /* U+E663 */
+      '?', /* U+E664 */
+      '?', /* U+E665 */
+      '?', /* U+E666 */
+      '?', /* U+E667 */
+      '?', /* U+E668 */
+      '?', /* U+E669 */
+      '?', /* U+E66A */
+      '?', /* U+E66B */
+      '?', /* U+E66C */
+      '?', /* U+E66D */
+      '?', /* U+E66E */
+      '?', /* U+E66F */
+      '?', /* U+E670 */
+      '?', /* U+E671 */
+      '?', /* U+E672 */
+      '?', /* U+E673 */
+      '?', /* U+E674 */
+      '?', /* U+E675 */
+      '?', /* U+E676 */
+      '?', /* U+E677 */
+      '?', /* U+E678 */
+      '?', /* U+E679 */
+      '?', /* U+E67A */
+      '?', /* U+E67B */
+      '?', /* U+E67C */
+      '?', /* U+E67D */
+      '?', /* U+E67E */
+      '?', /* U+E67F */
+      '?', /* U+E680 */
+      '?', /* U+E681 */
+      '?', /* U+E682 */
+      '?', /* U+E683 */
+      '?', /* U+E684 */
+      '?', /* U+E685 */
+      '?', /* U+E686 */
+      '?', /* U+E687 */
+      '?', /* U+E688 */
+      '?', /* U+E689 */
+      '?', /* U+E68A */
+      '?', /* U+E68B */
+      '?', /* U+E68C */
+      '?', /* U+E68D */
+      '?', /* U+E68E */
+      '?', /* U+E68F */
+      '?', /* U+E690 */
+      '?', /* U+E691 */
+      '?', /* U+E692 */
+      '?', /* U+E693 */
+      '?', /* U+E694 */
+      '?', /* U+E695 */
+      '?', /* U+E696 */
+      '?', /* U+E697 */
+      '?', /* U+E698 */
+      '?', /* U+E699 */
+      '?', /* U+E69A */
+      '?', /* U+E69B */
+      '?', /* U+E69C */
+      '?', /* U+E69D */
+      '?', /* U+E69E */
+      '?', /* U+E69F */
+      '?', /* U+E6A0 */
+      '?', /* U+E6A1 */
+      '?', /* U+E6A2 */
+      '?', /* U+E6A3 */
+      '?', /* U+E6A4 */
+      '?', /* U+E6A5 */
+      '?', /* U+E6A6 */
+      '?', /* U+E6A7 */
+      '?', /* U+E6A8 */
+      '?', /* U+E6A9 */
+      '?', /* U+E6AA */
+      '?', /* U+E6AB */
+      '?', /* U+E6AC */
+      '?', /* U+E6AD */
+      '?', /* U+E6AE */
+      '?', /* U+E6AF */
+      '?', /* U+E6B0 */
+      '?', /* U+E6B1 */
+      '?', /* U+E6B2 */
+      '?', /* U+E6B3 */
+      '?', /* U+E6B4 */
+      '?', /* U+E6B5 */
+      '?', /* U+E6B6 */
+      '?', /* U+E6B7 */
+      '?', /* U+E6B8 */
+      '?', /* U+E6B9 */
+      '?', /* U+E6BA */
+      '?', /* U+E6BB */
+      '?', /* U+E6BC */
+      '?', /* U+E6BD */
+      '?', /* U+E6BE */
+      '?', /* U+E6BF */
+      '?', /* U+E6C0 */
+      '?', /* U+E6C1 */
+      '?', /* U+E6C2 */
+      '?', /* U+E6C3 */
+      '?', /* U+E6C4 */
+      '?', /* U+E6C5 */
+      '?', /* U+E6C6 */
+      '?', /* U+E6C7 */
+      '?', /* U+E6C8 */
+      '?', /* U+E6C9 */
+      '?', /* U+E6CA */
+      '?', /* U+E6CB */
+      '?', /* U+E6CC */
+      '?', /* U+E6CD */
+      '?', /* U+E6CE */
+      '?', /* U+E6CF */
+      '?', /* U+E6D0 */
+      '?', /* U+E6D1 */
+      '?', /* U+E6D2 */
+      '?', /* U+E6D3 */
+      '?', /* U+E6D4 */
+      '?', /* U+E6D5 */
+      '?', /* U+E6D6 */
+      '?', /* U+E6D7 */
+      '?', /* U+E6D8 */
+      '?', /* U+E6D9 */
+      '?', /* U+E6DA */
+      '?', /* U+E6DB */
+      '?', /* U+E6DC */
+      '?', /* U+E6DD */
+      '?', /* U+E6DE */
+      '?', /* U+E6DF */
+      '?', /* U+E6E0 */
+      '?', /* U+E6E1 */
+      '?', /* U+E6E2 */
+      '?', /* U+E6E3 */
+      '?', /* U+E6E4 */
+      '?', /* U+E6E5 */
+      '?', /* U+E6E6 */
+      '?', /* U+E6E7 */
+      '?', /* U+E6E8 */
+      '?', /* U+E6E9 */
+      '?', /* U+E6EA */
+      '?', /* U+E6EB */
+      '?', /* U+E6EC */
+      '?', /* U+E6ED */
+      '?', /* U+E6EE */
+      '?', /* U+E6EF */
+      '?', /* U+E6F0 */
+      '?', /* U+E6F1 */
+      '?', /* U+E6F2 */
+      '?', /* U+E6F3 */
+      '?', /* U+E6F4 */
+      '?', /* U+E6F5 */
+      '?', /* U+E6F6 */
+      '?', /* U+E6F7 */
+      '?', /* U+E6F8 */
+      '?', /* U+E6F9 */
+      '?', /* U+E6FA */
+      '?', /* U+E6FB */
+      '?', /* U+E6FC */
+      '?', /* U+E6FD */
+      '?', /* U+E6FE */
+      '?', /* U+E6FF */
+      '?', /* U+E700 */
+      '?', /* U+E701 */
+      '?', /* U+E702 */
+      '?', /* U+E703 */
+      '?', /* U+E704 */
+      '?', /* U+E705 */
+      '?', /* U+E706 */
+      '?', /* U+E707 */
+      '?', /* U+E708 */
+      '?', /* U+E709 */
+      '?', /* U+E70A */
+      '?', /* U+E70B */
+      '?', /* U+E70C */
+      '?', /* U+E70D */
+      '?', /* U+E70E */
+      '?', /* U+E70F */
+      '?', /* U+E710 */
+      '?', /* U+E711 */
+      '?', /* U+E712 */
+      '?', /* U+E713 */
+      '?', /* U+E714 */
+      '?', /* U+E715 */
+      '?', /* U+E716 */
+      '?', /* U+E717 */
+      '?', /* U+E718 */
+      '?', /* U+E719 */
+      '?', /* U+E71A */
+      '?', /* U+E71B */
+      '?', /* U+E71C */
+      '?', /* U+E71D */
+      '?', /* U+E71E */
+      '?', /* U+E71F */
+      '?', /* U+E720 */
+      '?', /* U+E721 */
+      '?', /* U+E722 */
+      '?', /* U+E723 */
+      '?', /* U+E724 */
+      '?', /* U+E725 */
+      '?', /* U+E726 */
+      '?', /* U+E727 */
+      '?', /* U+E728 */
+      '?', /* U+E729 */
+      '?', /* U+E72A */
+      '?', /* U+E72B */
+      '?', /* U+E72C */
+      '?', /* U+E72D */
+      '?', /* U+E72E */
+      '?', /* U+E72F */
+      '?', /* U+E730 */
+      '?', /* U+E731 */
+      '?', /* U+E732 */
+      '?', /* U+E733 */
+      '?', /* U+E734 */
+      '?', /* U+E735 */
+      '?', /* U+E736 */
+      '?', /* U+E737 */
+      '?', /* U+E738 */
+      '?', /* U+E739 */
+      '?', /* U+E73A */
+      '?', /* U+E73B */
+      '?', /* U+E73C */
+      '?', /* U+E73D */
+      '?', /* U+E73E */
+      '?', /* U+E73F */
+      '?', /* U+E740 */
+      '?', /* U+E741 */
+      '?', /* U+E742 */
+      '?', /* U+E743 */
+      '?', /* U+E744 */
+      '?', /* U+E745 */
+      '?', /* U+E746 */
+      '?', /* U+E747 */
+      '?', /* U+E748 */
+      '?', /* U+E749 */
+      '?', /* U+E74A */
+      '?', /* U+E74B */
+      '?', /* U+E74C */
+      '?', /* U+E74D */
+      '?', /* U+E74E */
+      '?', /* U+E74F */
+      '?', /* U+E750 */
+      '?', /* U+E751 */
+      '?', /* U+E752 */
+      '?', /* U+E753 */
+      '?', /* U+E754 */
+      '?', /* U+E755 */
+      '?', /* U+E756 */
+      '?', /* U+E757 */
+      '?', /* U+E758 */
+      '?', /* U+E759 */
+      '?', /* U+E75A */
+      '?', /* U+E75B */
+      '?', /* U+E75C */
+      '?', /* U+E75D */
+      '?', /* U+E75E */
+      '?', /* U+E75F */
+      '?', /* U+E760 */
+      '?', /* U+E761 */
+      '?', /* U+E762 */
+      '?', /* U+E763 */
+      '?', /* U+E764 */
+      '?', /* U+E765 */
+      '?', /* U+E766 */
+      '?', /* U+E767 */
+      '?', /* U+E768 */
+      '?', /* U+E769 */
+      '?', /* U+E76A */
+      '?', /* U+E76B */
+      '?', /* U+E76C */
+      '?', /* U+E76D */
+      '?', /* U+E76E */
+      '?', /* U+E76F */
+      '?', /* U+E770 */
+      '?', /* U+E771 */
+      '?', /* U+E772 */
+      '?', /* U+E773 */
+      '?', /* U+E774 */
+      '?', /* U+E775 */
+      '?', /* U+E776 */
+      '?', /* U+E777 */
+      '?', /* U+E778 */
+      '?', /* U+E779 */
+      '?', /* U+E77A */
+      '?', /* U+E77B */
+      '?', /* U+E77C */
+      '?', /* U+E77D */
+      '?', /* U+E77E */
+      '?', /* U+E77F */
+      '?', /* U+E780 */
+      '?', /* U+E781 */
+      '?', /* U+E782 */
+      '?', /* U+E783 */
+      '?', /* U+E784 */
+      '?', /* U+E785 */
+      '?', /* U+E786 */
+      '?', /* U+E787 */
+      '?', /* U+E788 */
+      '?', /* U+E789 */
+      '?', /* U+E78A */
+      '?', /* U+E78B */
+      '?', /* U+E78C */
+      '?', /* U+E78D */
+      '?', /* U+E78E */
+      '?', /* U+E78F */
+      '?', /* U+E790 */
+      '?', /* U+E791 */
+      '?', /* U+E792 */
+      '?', /* U+E793 */
+      '?', /* U+E794 */
+      '?', /* U+E795 */
+      '?', /* U+E796 */
+      '?', /* U+E797 */
+      '?', /* U+E798 */
+      '?', /* U+E799 */
+      '?', /* U+E79A */
+      '?', /* U+E79B */
+      '?', /* U+E79C */
+      '?', /* U+E79D */
+      '?', /* U+E79E */
+      '?', /* U+E79F */
+      '?', /* U+E7A0 */
+      '?', /* U+E7A1 */
+      '?', /* U+E7A2 */
+      '?', /* U+E7A3 */
+      '?', /* U+E7A4 */
+      '?', /* U+E7A5 */
+      '?', /* U+E7A6 */
+      '?', /* U+E7A7 */
+      '?', /* U+E7A8 */
+      '?', /* U+E7A9 */
+      '?', /* U+E7AA */
+      '?', /* U+E7AB */
+      '?', /* U+E7AC */
+      '?', /* U+E7AD */
+      '?', /* U+E7AE */
+      '?', /* U+E7AF */
+      '?', /* U+E7B0 */
+      '?', /* U+E7B1 */
+      '?', /* U+E7B2 */
+      '?', /* U+E7B3 */
+      '?', /* U+E7B4 */
+      '?', /* U+E7B5 */
+      '?', /* U+E7B6 */
+      '?', /* U+E7B7 */
+      '?', /* U+E7B8 */
+      '?', /* U+E7B9 */
+      '?', /* U+E7BA */
+      '?', /* U+E7BB */
+      '?', /* U+E7BC */
+      '?', /* U+E7BD */
+      '?', /* U+E7BE */
+      '?', /* U+E7BF */
+      '?', /* U+E7C0 */
+      '?', /* U+E7C1 */
+      '?', /* U+E7C2 */
+      '?', /* U+E7C3 */
+      '?', /* U+E7C4 */
+      '?', /* U+E7C5 */
+      '?', /* U+E7C6 */
+      '?', /* U+E7C7 */
+      '?', /* U+E7C8 */
+      '?', /* U+E7C9 */
+      '?', /* U+E7CA */
+      '?', /* U+E7CB */
+      '?', /* U+E7CC */
+      '?', /* U+E7CD */
+      '?', /* U+E7CE */
+      '?', /* U+E7CF */
+      '?', /* U+E7D0 */
+      '?', /* U+E7D1 */
+      '?', /* U+E7D2 */
+      '?', /* U+E7D3 */
+      '?', /* U+E7D4 */
+      '?', /* U+E7D5 */
+      '?', /* U+E7D6 */
+      '?', /* U+E7D7 */
+      '?', /* U+E7D8 */
+      '?', /* U+E7D9 */
+      '?', /* U+E7DA */
+      '?', /* U+E7DB */
+      '?', /* U+E7DC */
+      '?', /* U+E7DD */
+      '?', /* U+E7DE */
+      '?', /* U+E7DF */
+      '?', /* U+E7E0 */
+      '?', /* U+E7E1 */
+      '?', /* U+E7E2 */
+      '?', /* U+E7E3 */
+      '?', /* U+E7E4 */
+      '?', /* U+E7E5 */
+      '?', /* U+E7E6 */
+      '?', /* U+E7E7 */
+      '?', /* U+E7E8 */
+      '?', /* U+E7E9 */
+      '?', /* U+E7EA */
+      '?', /* U+E7EB */
+      '?', /* U+E7EC */
+      '?', /* U+E7ED */
+      '?', /* U+E7EE */
+      '?', /* U+E7EF */
+      '?', /* U+E7F0 */
+      '?', /* U+E7F1 */
+      '?', /* U+E7F2 */
+      '?', /* U+E7F3 */
+      '?', /* U+E7F4 */
+      '?', /* U+E7F5 */
+      '?', /* U+E7F6 */
+      '?', /* U+E7F7 */
+      '?', /* U+E7F8 */
+      '?', /* U+E7F9 */
+      '?', /* U+E7FA */
+      '?', /* U+E7FB */
+      '?', /* U+E7FC */
+      '?', /* U+E7FD */
+      '?', /* U+E7FE */
+      '?', /* U+E7FF */
+      '?', /* U+E800 */
+      '?', /* U+E801 */
+      '?', /* U+E802 */
+      '?', /* U+E803 */
+      '?', /* U+E804 */
+      '?', /* U+E805 */
+      '?', /* U+E806 */
+      '?', /* U+E807 */
+      '?', /* U+E808 */
+      '?', /* U+E809 */
+      '?', /* U+E80A */
+      '?', /* U+E80B */
+      '?', /* U+E80C */
+      '?', /* U+E80D */
+      '?', /* U+E80E */
+      '?', /* U+E80F */
+      '?', /* U+E810 */
+      '?', /* U+E811 */
+      '?', /* U+E812 */
+      '?', /* U+E813 */
+      '?', /* U+E814 */
+      '?', /* U+E815 */
+      '?', /* U+E816 */
+      '?', /* U+E817 */
+      '?', /* U+E818 */
+      '?', /* U+E819 */
+      '?', /* U+E81A */
+      '?', /* U+E81B */
+      '?', /* U+E81C */
+      '?', /* U+E81D */
+      '?', /* U+E81E */
+      '?', /* U+E81F */
+      '?', /* U+E820 */
+      '?', /* U+E821 */
+      '?', /* U+E822 */
+      '?', /* U+E823 */
+      '?', /* U+E824 */
+      '?', /* U+E825 */
+      '?', /* U+E826 */
+      '?', /* U+E827 */
+      '?', /* U+E828 */
+      '?', /* U+E829 */
+      '?', /* U+E82A */
+      '?', /* U+E82B */
+      '?', /* U+E82C */
+      '?', /* U+E82D */
+      '?', /* U+E82E */
+      '?', /* U+E82F */
+      '?', /* U+E830 */
+      '?', /* U+E831 */
+      '?', /* U+E832 */
+      '?', /* U+E833 */
+      '?', /* U+E834 */
+      '?', /* U+E835 */
+      '?', /* U+E836 */
+      '?', /* U+E837 */
+      '?', /* U+E838 */
+      '?', /* U+E839 */
+      '?', /* U+E83A */
+      '?', /* U+E83B */
+      '?', /* U+E83C */
+      '?', /* U+E83D */
+      '?', /* U+E83E */
+      '?', /* U+E83F */
+      '?', /* U+E840 */
+      '?', /* U+E841 */
+      '?', /* U+E842 */
+      '?', /* U+E843 */
+      '?', /* U+E844 */
+      '?', /* U+E845 */
+      '?', /* U+E846 */
+      '?', /* U+E847 */
+      '?', /* U+E848 */
+      '?', /* U+E849 */
+      '?', /* U+E84A */
+      '?', /* U+E84B */
+      '?', /* U+E84C */
+      '?', /* U+E84D */
+      '?', /* U+E84E */
+      '?', /* U+E84F */
+      '?', /* U+E850 */
+      '?', /* U+E851 */
+      '?', /* U+E852 */
+      '?', /* U+E853 */
+      '?', /* U+E854 */
+      '?', /* U+E855 */
+      '?', /* U+E856 */
+      '?', /* U+E857 */
+      '?', /* U+E858 */
+      '?', /* U+E859 */
+      '?', /* U+E85A */
+      '?', /* U+E85B */
+      '?', /* U+E85C */
+      '?', /* U+E85D */
+      '?', /* U+E85E */
+      '?', /* U+E85F */
+      '?', /* U+E860 */
+      '?', /* U+E861 */
+      '?', /* U+E862 */
+      '?', /* U+E863 */
+      '?', /* U+E864 */
+      '?', /* U+E865 */
+      '?', /* U+E866 */
+      '?', /* U+E867 */
+      '?', /* U+E868 */
+      '?', /* U+E869 */
+      '?', /* U+E86A */
+      '?', /* U+E86B */
+      '?', /* U+E86C */
+      '?', /* U+E86D */
+      '?', /* U+E86E */
+      '?', /* U+E86F */
+      '?', /* U+E870 */
+      '?', /* U+E871 */
+      '?', /* U+E872 */
+      '?', /* U+E873 */
+      '?', /* U+E874 */
+      '?', /* U+E875 */
+      '?', /* U+E876 */
+      '?', /* U+E877 */
+      '?', /* U+E878 */
+      '?', /* U+E879 */
+      '?', /* U+E87A */
+      '?', /* U+E87B */
+      '?', /* U+E87C */
+      '?', /* U+E87D */
+      '?', /* U+E87E */
+      '?', /* U+E87F */
+      '?', /* U+E880 */
+      '?', /* U+E881 */
+      '?', /* U+E882 */
+      '?', /* U+E883 */
+      '?', /* U+E884 */
+      '?', /* U+E885 */
+      '?', /* U+E886 */
+      '?', /* U+E887 */
+      '?', /* U+E888 */
+      '?', /* U+E889 */
+      '?', /* U+E88A */
+      '?', /* U+E88B */
+      '?', /* U+E88C */
+      '?', /* U+E88D */
+      '?', /* U+E88E */
+      '?', /* U+E88F */
+      '?', /* U+E890 */
+      '?', /* U+E891 */
+      '?', /* U+E892 */
+      '?', /* U+E893 */
+      '?', /* U+E894 */
+      '?', /* U+E895 */
+      '?', /* U+E896 */
+      '?', /* U+E897 */
+      '?', /* U+E898 */
+      '?', /* U+E899 */
+      '?', /* U+E89A */
+      '?', /* U+E89B */
+      '?', /* U+E89C */
+      '?', /* U+E89D */
+      '?', /* U+E89E */
+      '?', /* U+E89F */
+      '?', /* U+E8A0 */
+      '?', /* U+E8A1 */
+      '?', /* U+E8A2 */
+      '?', /* U+E8A3 */
+      '?', /* U+E8A4 */
+      '?', /* U+E8A5 */
+      '?', /* U+E8A6 */
+      '?', /* U+E8A7 */
+      '?', /* U+E8A8 */
+      '?', /* U+E8A9 */
+      '?', /* U+E8AA */
+      '?', /* U+E8AB */
+      '?', /* U+E8AC */
+      '?', /* U+E8AD */
+      '?', /* U+E8AE */
+      '?', /* U+E8AF */
+      '?', /* U+E8B0 */
+      '?', /* U+E8B1 */
+      '?', /* U+E8B2 */
+      '?', /* U+E8B3 */
+      '?', /* U+E8B4 */
+      '?', /* U+E8B5 */
+      '?', /* U+E8B6 */
+      '?', /* U+E8B7 */
+      '?', /* U+E8B8 */
+      '?', /* U+E8B9 */
+      '?', /* U+E8BA */
+      '?', /* U+E8BB */
+      '?', /* U+E8BC */
+      '?', /* U+E8BD */
+      '?', /* U+E8BE */
+      '?', /* U+E8BF */
+      '?', /* U+E8C0 */
+      '?', /* U+E8C1 */
+      '?', /* U+E8C2 */
+      '?', /* U+E8C3 */
+      '?', /* U+E8C4 */
+      '?', /* U+E8C5 */
+      '?', /* U+E8C6 */
+      '?', /* U+E8C7 */
+      '?', /* U+E8C8 */
+      '?', /* U+E8C9 */
+      '?', /* U+E8CA */
+      '?', /* U+E8CB */
+      '?', /* U+E8CC */
+      '?', /* U+E8CD */
+      '?', /* U+E8CE */
+      '?', /* U+E8CF */
+      '?', /* U+E8D0 */
+      '?', /* U+E8D1 */
+      '?', /* U+E8D2 */
+      '?', /* U+E8D3 */
+      '?', /* U+E8D4 */
+      '?', /* U+E8D5 */
+      '?', /* U+E8D6 */
+      '?', /* U+E8D7 */
+      '?', /* U+E8D8 */
+      '?', /* U+E8D9 */
+      '?', /* U+E8DA */
+      '?', /* U+E8DB */
+      '?', /* U+E8DC */
+      '?', /* U+E8DD */
+      '?', /* U+E8DE */
+      '?', /* U+E8DF */
+      '?', /* U+E8E0 */
+      '?', /* U+E8E1 */
+      '?', /* U+E8E2 */
+      '?', /* U+E8E3 */
+      '?', /* U+E8E4 */
+      '?', /* U+E8E5 */
+      '?', /* U+E8E6 */
+      '?', /* U+E8E7 */
+      '?', /* U+E8E8 */
+      '?', /* U+E8E9 */
+      '?', /* U+E8EA */
+      '?', /* U+E8EB */
+      '?', /* U+E8EC */
+      '?', /* U+E8ED */
+      '?', /* U+E8EE */
+      '?', /* U+E8EF */
+      '?', /* U+E8F0 */
+      '?', /* U+E8F1 */
+      '?', /* U+E8F2 */
+      '?', /* U+E8F3 */
+      '?', /* U+E8F4 */
+      '?', /* U+E8F5 */
+      '?', /* U+E8F6 */
+      '?', /* U+E8F7 */
+      '?', /* U+E8F8 */
+      '?', /* U+E8F9 */
+      '?', /* U+E8FA */
+      '?', /* U+E8FB */
+      '?', /* U+E8FC */
+      '?', /* U+E8FD */
+      '?', /* U+E8FE */
+      '?', /* U+E8FF */
+      '?', /* U+E900 */
+      '?', /* U+E901 */
+      '?', /* U+E902 */
+      '?', /* U+E903 */
+      '?', /* U+E904 */
+      '?', /* U+E905 */
+      '?', /* U+E906 */
+      '?', /* U+E907 */
+      '?', /* U+E908 */
+      '?', /* U+E909 */
+      '?', /* U+E90A */
+      '?', /* U+E90B */
+      '?', /* U+E90C */
+      '?', /* U+E90D */
+      '?', /* U+E90E */
+      '?', /* U+E90F */
+      '?', /* U+E910 */
+      '?', /* U+E911 */
+      '?', /* U+E912 */
+      '?', /* U+E913 */
+      '?', /* U+E914 */
+      '?', /* U+E915 */
+      '?', /* U+E916 */
+      '?', /* U+E917 */
+      '?', /* U+E918 */
+      '?', /* U+E919 */
+      '?', /* U+E91A */
+      '?', /* U+E91B */
+      '?', /* U+E91C */
+      '?', /* U+E91D */
+      '?', /* U+E91E */
+      '?', /* U+E91F */
+      '?', /* U+E920 */
+      '?', /* U+E921 */
+      '?', /* U+E922 */
+      '?', /* U+E923 */
+      '?', /* U+E924 */
+      '?', /* U+E925 */
+      '?', /* U+E926 */
+      '?', /* U+E927 */
+      '?', /* U+E928 */
+      '?', /* U+E929 */
+      '?', /* U+E92A */
+      '?', /* U+E92B */
+      '?', /* U+E92C */
+      '?', /* U+E92D */
+      '?', /* U+E92E */
+      '?', /* U+E92F */
+      '?', /* U+E930 */
+      '?', /* U+E931 */
+      '?', /* U+E932 */
+      '?', /* U+E933 */
+      '?', /* U+E934 */
+      '?', /* U+E935 */
+      '?', /* U+E936 */
+      '?', /* U+E937 */
+      '?', /* U+E938 */
+      '?', /* U+E939 */
+      '?', /* U+E93A */
+      '?', /* U+E93B */
+      '?', /* U+E93C */
+      '?', /* U+E93D */
+      '?', /* U+E93E */
+      '?', /* U+E93F */
+      '?', /* U+E940 */
+      '?', /* U+E941 */
+      '?', /* U+E942 */
+      '?', /* U+E943 */
+      '?', /* U+E944 */
+      '?', /* U+E945 */
+      '?', /* U+E946 */
+      '?', /* U+E947 */
+      '?', /* U+E948 */
+      '?', /* U+E949 */
+      '?', /* U+E94A */
+      '?', /* U+E94B */
+      '?', /* U+E94C */
+      '?', /* U+E94D */
+      '?', /* U+E94E */
+      '?', /* U+E94F */
+      '?', /* U+E950 */
+      '?', /* U+E951 */
+      '?', /* U+E952 */
+      '?', /* U+E953 */
+      '?', /* U+E954 */
+      '?', /* U+E955 */
+      '?', /* U+E956 */
+      '?', /* U+E957 */
+      '?', /* U+E958 */
+      '?', /* U+E959 */
+      '?', /* U+E95A */
+      '?', /* U+E95B */
+      '?', /* U+E95C */
+      '?', /* U+E95D */
+      '?', /* U+E95E */
+      '?', /* U+E95F */
+      '?', /* U+E960 */
+      '?', /* U+E961 */
+      '?', /* U+E962 */
+      '?', /* U+E963 */
+      '?', /* U+E964 */
+      '?', /* U+E965 */
+      '?', /* U+E966 */
+      '?', /* U+E967 */
+      '?', /* U+E968 */
+      '?', /* U+E969 */
+      '?', /* U+E96A */
+      '?', /* U+E96B */
+      '?', /* U+E96C */
+      '?', /* U+E96D */
+      '?', /* U+E96E */
+      '?', /* U+E96F */
+      '?', /* U+E970 */
+      '?', /* U+E971 */
+      '?', /* U+E972 */
+      '?', /* U+E973 */
+      '?', /* U+E974 */
+      '?', /* U+E975 */
+      '?', /* U+E976 */
+      '?', /* U+E977 */
+      '?', /* U+E978 */
+      '?', /* U+E979 */
+      '?', /* U+E97A */
+      '?', /* U+E97B */
+      '?', /* U+E97C */
+      '?', /* U+E97D */
+      '?', /* U+E97E */
+      '?', /* U+E97F */
+      '?', /* U+E980 */
+      '?', /* U+E981 */
+      '?', /* U+E982 */
+      '?', /* U+E983 */
+      '?', /* U+E984 */
+      '?', /* U+E985 */
+      '?', /* U+E986 */
+      '?', /* U+E987 */
+      '?', /* U+E988 */
+      '?', /* U+E989 */
+      '?', /* U+E98A */
+      '?', /* U+E98B */
+      '?', /* U+E98C */
+      '?', /* U+E98D */
+      '?', /* U+E98E */
+      '?', /* U+E98F */
+      '?', /* U+E990 */
+      '?', /* U+E991 */
+      '?', /* U+E992 */
+      '?', /* U+E993 */
+      '?', /* U+E994 */
+      '?', /* U+E995 */
+      '?', /* U+E996 */
+      '?', /* U+E997 */
+      '?', /* U+E998 */
+      '?', /* U+E999 */
+      '?', /* U+E99A */
+      '?', /* U+E99B */
+      '?', /* U+E99C */
+      '?', /* U+E99D */
+      '?', /* U+E99E */
+      '?', /* U+E99F */
+      '?', /* U+E9A0 */
+      '?', /* U+E9A1 */
+      '?', /* U+E9A2 */
+      '?', /* U+E9A3 */
+      '?', /* U+E9A4 */
+      '?', /* U+E9A5 */
+      '?', /* U+E9A6 */
+      '?', /* U+E9A7 */
+      '?', /* U+E9A8 */
+      '?', /* U+E9A9 */
+      '?', /* U+E9AA */
+      '?', /* U+E9AB */
+      '?', /* U+E9AC */
+      '?', /* U+E9AD */
+      '?', /* U+E9AE */
+      '?', /* U+E9AF */
+      '?', /* U+E9B0 */
+      '?', /* U+E9B1 */
+      '?', /* U+E9B2 */
+      '?', /* U+E9B3 */
+      '?', /* U+E9B4 */
+      '?', /* U+E9B5 */
+      '?', /* U+E9B6 */
+      '?', /* U+E9B7 */
+      '?', /* U+E9B8 */
+      '?', /* U+E9B9 */
+      '?', /* U+E9BA */
+      '?', /* U+E9BB */
+      '?', /* U+E9BC */
+      '?', /* U+E9BD */
+      '?', /* U+E9BE */
+      '?', /* U+E9BF */
+      '?', /* U+E9C0 */
+      '?', /* U+E9C1 */
+      '?', /* U+E9C2 */
+      '?', /* U+E9C3 */
+      '?', /* U+E9C4 */
+      '?', /* U+E9C5 */
+      '?', /* U+E9C6 */
+      '?', /* U+E9C7 */
+      '?', /* U+E9C8 */
+      '?', /* U+E9C9 */
+      '?', /* U+E9CA */
+      '?', /* U+E9CB */
+      '?', /* U+E9CC */
+      '?', /* U+E9CD */
+      '?', /* U+E9CE */
+      '?', /* U+E9CF */
+      '?', /* U+E9D0 */
+      '?', /* U+E9D1 */
+      '?', /* U+E9D2 */
+      '?', /* U+E9D3 */
+      '?', /* U+E9D4 */
+      '?', /* U+E9D5 */
+      '?', /* U+E9D6 */
+      '?', /* U+E9D7 */
+      '?', /* U+E9D8 */
+      '?', /* U+E9D9 */
+      '?', /* U+E9DA */
+      '?', /* U+E9DB */
+      '?', /* U+E9DC */
+      '?', /* U+E9DD */
+      '?', /* U+E9DE */
+      '?', /* U+E9DF */
+      '?', /* U+E9E0 */
+      '?', /* U+E9E1 */
+      '?', /* U+E9E2 */
+      '?', /* U+E9E3 */
+      '?', /* U+E9E4 */
+      '?', /* U+E9E5 */
+      '?', /* U+E9E6 */
+      '?', /* U+E9E7 */
+      '?', /* U+E9E8 */
+      '?', /* U+E9E9 */
+      '?', /* U+E9EA */
+      '?', /* U+E9EB */
+      '?', /* U+E9EC */
+      '?', /* U+E9ED */
+      '?', /* U+E9EE */
+      '?', /* U+E9EF */
+      '?', /* U+E9F0 */
+      '?', /* U+E9F1 */
+      '?', /* U+E9F2 */
+      '?', /* U+E9F3 */
+      '?', /* U+E9F4 */
+      '?', /* U+E9F5 */
+      '?', /* U+E9F6 */
+      '?', /* U+E9F7 */
+      '?', /* U+E9F8 */
+      '?', /* U+E9F9 */
+      '?', /* U+E9FA */
+      '?', /* U+E9FB */
+      '?', /* U+E9FC */
+      '?', /* U+E9FD */
+      '?', /* U+E9FE */
+      '?', /* U+E9FF */
+      '?', /* U+EA00 */
+      '?', /* U+EA01 */
+      '?', /* U+EA02 */
+      '?', /* U+EA03 */
+      '?', /* U+EA04 */
+      '?', /* U+EA05 */
+      '?', /* U+EA06 */
+      '?', /* U+EA07 */
+      '?', /* U+EA08 */
+      '?', /* U+EA09 */
+      '?', /* U+EA0A */
+      '?', /* U+EA0B */
+      '?', /* U+EA0C */
+      '?', /* U+EA0D */
+      '?', /* U+EA0E */
+      '?', /* U+EA0F */
+      '?', /* U+EA10 */
+      '?', /* U+EA11 */
+      '?', /* U+EA12 */
+      '?', /* U+EA13 */
+      '?', /* U+EA14 */
+      '?', /* U+EA15 */
+      '?', /* U+EA16 */
+      '?', /* U+EA17 */
+      '?', /* U+EA18 */
+      '?', /* U+EA19 */
+      '?', /* U+EA1A */
+      '?', /* U+EA1B */
+      '?', /* U+EA1C */
+      '?', /* U+EA1D */
+      '?', /* U+EA1E */
+      '?', /* U+EA1F */
+      '?', /* U+EA20 */
+      '?', /* U+EA21 */
+      '?', /* U+EA22 */
+      '?', /* U+EA23 */
+      '?', /* U+EA24 */
+      '?', /* U+EA25 */
+      '?', /* U+EA26 */
+      '?', /* U+EA27 */
+      '?', /* U+EA28 */
+      '?', /* U+EA29 */
+      '?', /* U+EA2A */
+      '?', /* U+EA2B */
+      '?', /* U+EA2C */
+      '?', /* U+EA2D */
+      '?', /* U+EA2E */
+      '?', /* U+EA2F */
+      '?', /* U+EA30 */
+      '?', /* U+EA31 */
+      '?', /* U+EA32 */
+      '?', /* U+EA33 */
+      '?', /* U+EA34 */
+      '?', /* U+EA35 */
+      '?', /* U+EA36 */
+      '?', /* U+EA37 */
+      '?', /* U+EA38 */
+      '?', /* U+EA39 */
+      '?', /* U+EA3A */
+      '?', /* U+EA3B */
+      '?', /* U+EA3C */
+      '?', /* U+EA3D */
+      '?', /* U+EA3E */
+      '?', /* U+EA3F */
+      '?', /* U+EA40 */
+      '?', /* U+EA41 */
+      '?', /* U+EA42 */
+      '?', /* U+EA43 */
+      '?', /* U+EA44 */
+      '?', /* U+EA45 */
+      '?', /* U+EA46 */
+      '?', /* U+EA47 */
+      '?', /* U+EA48 */
+      '?', /* U+EA49 */
+      '?', /* U+EA4A */
+      '?', /* U+EA4B */
+      '?', /* U+EA4C */
+      '?', /* U+EA4D */
+      '?', /* U+EA4E */
+      '?', /* U+EA4F */
+      '?', /* U+EA50 */
+      '?', /* U+EA51 */
+      '?', /* U+EA52 */
+      '?', /* U+EA53 */
+      '?', /* U+EA54 */
+      '?', /* U+EA55 */
+      '?', /* U+EA56 */
+      '?', /* U+EA57 */
+      '?', /* U+EA58 */
+      '?', /* U+EA59 */
+      '?', /* U+EA5A */
+      '?', /* U+EA5B */
+      '?', /* U+EA5C */
+      '?', /* U+EA5D */
+      '?', /* U+EA5E */
+      '?', /* U+EA5F */
+      '?', /* U+EA60 */
+      '?', /* U+EA61 */
+      '?', /* U+EA62 */
+      '?', /* U+EA63 */
+      '?', /* U+EA64 */
+      '?', /* U+EA65 */
+      '?', /* U+EA66 */
+      '?', /* U+EA67 */
+      '?', /* U+EA68 */
+      '?', /* U+EA69 */
+      '?', /* U+EA6A */
+      '?', /* U+EA6B */
+      '?', /* U+EA6C */
+      '?', /* U+EA6D */
+      '?', /* U+EA6E */
+      '?', /* U+EA6F */
+      '?', /* U+EA70 */
+      '?', /* U+EA71 */
+      '?', /* U+EA72 */
+      '?', /* U+EA73 */
+      '?', /* U+EA74 */
+      '?', /* U+EA75 */
+      '?', /* U+EA76 */
+      '?', /* U+EA77 */
+      '?', /* U+EA78 */
+      '?', /* U+EA79 */
+      '?', /* U+EA7A */
+      '?', /* U+EA7B */
+      '?', /* U+EA7C */
+      '?', /* U+EA7D */
+      '?', /* U+EA7E */
+      '?', /* U+EA7F */
+      '?', /* U+EA80 */
+      '?', /* U+EA81 */
+      '?', /* U+EA82 */
+      '?', /* U+EA83 */
+      '?', /* U+EA84 */
+      '?', /* U+EA85 */
+      '?', /* U+EA86 */
+      '?', /* U+EA87 */
+      '?', /* U+EA88 */
+      '?', /* U+EA89 */
+      '?', /* U+EA8A */
+      '?', /* U+EA8B */
+      '?', /* U+EA8C */
+      '?', /* U+EA8D */
+      '?', /* U+EA8E */
+      '?', /* U+EA8F */
+      '?', /* U+EA90 */
+      '?', /* U+EA91 */
+      '?', /* U+EA92 */
+      '?', /* U+EA93 */
+      '?', /* U+EA94 */
+      '?', /* U+EA95 */
+      '?', /* U+EA96 */
+      '?', /* U+EA97 */
+      '?', /* U+EA98 */
+      '?', /* U+EA99 */
+      '?', /* U+EA9A */
+      '?', /* U+EA9B */
+      '?', /* U+EA9C */
+      '?', /* U+EA9D */
+      '?', /* U+EA9E */
+      '?', /* U+EA9F */
+      '?', /* U+EAA0 */
+      '?', /* U+EAA1 */
+      '?', /* U+EAA2 */
+      '?', /* U+EAA3 */
+      '?', /* U+EAA4 */
+      '?', /* U+EAA5 */
+      '?', /* U+EAA6 */
+      '?', /* U+EAA7 */
+      '?', /* U+EAA8 */
+      '?', /* U+EAA9 */
+      '?', /* U+EAAA */
+      '?', /* U+EAAB */
+      '?', /* U+EAAC */
+      '?', /* U+EAAD */
+      '?', /* U+EAAE */
+      '?', /* U+EAAF */
+      '?', /* U+EAB0 */
+      '?', /* U+EAB1 */
+      '?', /* U+EAB2 */
+      '?', /* U+EAB3 */
+      '?', /* U+EAB4 */
+      '?', /* U+EAB5 */
+      '?', /* U+EAB6 */
+      '?', /* U+EAB7 */
+      '?', /* U+EAB8 */
+      '?', /* U+EAB9 */
+      '?', /* U+EABA */
+      '?', /* U+EABB */
+      '?', /* U+EABC */
+      '?', /* U+EABD */
+      '?', /* U+EABE */
+      '?', /* U+EABF */
+      '?', /* U+EAC0 */
+      '?', /* U+EAC1 */
+      '?', /* U+EAC2 */
+      '?', /* U+EAC3 */
+      '?', /* U+EAC4 */
+      '?', /* U+EAC5 */
+      '?', /* U+EAC6 */
+      '?', /* U+EAC7 */
+      '?', /* U+EAC8 */
+      '?', /* U+EAC9 */
+      '?', /* U+EACA */
+      '?', /* U+EACB */
+      '?', /* U+EACC */
+      '?', /* U+EACD */
+      '?', /* U+EACE */
+      '?', /* U+EACF */
+      '?', /* U+EAD0 */
+      '?', /* U+EAD1 */
+      '?', /* U+EAD2 */
+      '?', /* U+EAD3 */
+      '?', /* U+EAD4 */
+      '?', /* U+EAD5 */
+      '?', /* U+EAD6 */
+      '?', /* U+EAD7 */
+      '?', /* U+EAD8 */
+      '?', /* U+EAD9 */
+      '?', /* U+EADA */
+      '?', /* U+EADB */
+      '?', /* U+EADC */
+      '?', /* U+EADD */
+      '?', /* U+EADE */
+      '?', /* U+EADF */
+      '?', /* U+EAE0 */
+      '?', /* U+EAE1 */
+      '?', /* U+EAE2 */
+      '?', /* U+EAE3 */
+      '?', /* U+EAE4 */
+      '?', /* U+EAE5 */
+      '?', /* U+EAE6 */
+      '?', /* U+EAE7 */
+      '?', /* U+EAE8 */
+      '?', /* U+EAE9 */
+      '?', /* U+EAEA */
+      '?', /* U+EAEB */
+      '?', /* U+EAEC */
+      '?', /* U+EAED */
+      '?', /* U+EAEE */
+      '?', /* U+EAEF */
+      '?', /* U+EAF0 */
+      '?', /* U+EAF1 */
+      '?', /* U+EAF2 */
+      '?', /* U+EAF3 */
+      '?', /* U+EAF4 */
+      '?', /* U+EAF5 */
+      '?', /* U+EAF6 */
+      '?', /* U+EAF7 */
+      '?', /* U+EAF8 */
+      '?', /* U+EAF9 */
+      '?', /* U+EAFA */
+      '?', /* U+EAFB */
+      '?', /* U+EAFC */
+      '?', /* U+EAFD */
+      '?', /* U+EAFE */
+      '?', /* U+EAFF */
+      '?', /* U+EB00 */
+      '?', /* U+EB01 */
+      '?', /* U+EB02 */
+      '?', /* U+EB03 */
+      '?', /* U+EB04 */
+      '?', /* U+EB05 */
+      '?', /* U+EB06 */
+      '?', /* U+EB07 */
+      '?', /* U+EB08 */
+      '?', /* U+EB09 */
+      '?', /* U+EB0A */
+      '?', /* U+EB0B */
+      '?', /* U+EB0C */
+      '?', /* U+EB0D */
+      '?', /* U+EB0E */
+      '?', /* U+EB0F */
+      '?', /* U+EB10 */
+      '?', /* U+EB11 */
+      '?', /* U+EB12 */
+      '?', /* U+EB13 */
+      '?', /* U+EB14 */
+      '?', /* U+EB15 */
+      '?', /* U+EB16 */
+      '?', /* U+EB17 */
+      '?', /* U+EB18 */
+      '?', /* U+EB19 */
+      '?', /* U+EB1A */
+      '?', /* U+EB1B */
+      '?', /* U+EB1C */
+      '?', /* U+EB1D */
+      '?', /* U+EB1E */
+      '?', /* U+EB1F */
+      '?', /* U+EB20 */
+      '?', /* U+EB21 */
+      '?', /* U+EB22 */
+      '?', /* U+EB23 */
+      '?', /* U+EB24 */
+      '?', /* U+EB25 */
+      '?', /* U+EB26 */
+      '?', /* U+EB27 */
+      '?', /* U+EB28 */
+      '?', /* U+EB29 */
+      '?', /* U+EB2A */
+      '?', /* U+EB2B */
+      '?', /* U+EB2C */
+      '?', /* U+EB2D */
+      '?', /* U+EB2E */
+      '?', /* U+EB2F */
+      '?', /* U+EB30 */
+      '?', /* U+EB31 */
+      '?', /* U+EB32 */
+      '?', /* U+EB33 */
+      '?', /* U+EB34 */
+      '?', /* U+EB35 */
+      '?', /* U+EB36 */
+      '?', /* U+EB37 */
+      '?', /* U+EB38 */
+      '?', /* U+EB39 */
+      '?', /* U+EB3A */
+      '?', /* U+EB3B */
+      '?', /* U+EB3C */
+      '?', /* U+EB3D */
+      '?', /* U+EB3E */
+      '?', /* U+EB3F */
+      '?', /* U+EB40 */
+      '?', /* U+EB41 */
+      '?', /* U+EB42 */
+      '?', /* U+EB43 */
+      '?', /* U+EB44 */
+      '?', /* U+EB45 */
+      '?', /* U+EB46 */
+      '?', /* U+EB47 */
+      '?', /* U+EB48 */
+      '?', /* U+EB49 */
+      '?', /* U+EB4A */
+      '?', /* U+EB4B */
+      '?', /* U+EB4C */
+      '?', /* U+EB4D */
+      '?', /* U+EB4E */
+      '?', /* U+EB4F */
+      '?', /* U+EB50 */
+      '?', /* U+EB51 */
+      '?', /* U+EB52 */
+      '?', /* U+EB53 */
+      '?', /* U+EB54 */
+      '?', /* U+EB55 */
+      '?', /* U+EB56 */
+      '?', /* U+EB57 */
+      '?', /* U+EB58 */
+      '?', /* U+EB59 */
+      '?', /* U+EB5A */
+      '?', /* U+EB5B */
+      '?', /* U+EB5C */
+      '?', /* U+EB5D */
+      '?', /* U+EB5E */
+      '?', /* U+EB5F */
+      '?', /* U+EB60 */
+      '?', /* U+EB61 */
+      '?', /* U+EB62 */
+      '?', /* U+EB63 */
+      '?', /* U+EB64 */
+      '?', /* U+EB65 */
+      '?', /* U+EB66 */
+      '?', /* U+EB67 */
+      '?', /* U+EB68 */
+      '?', /* U+EB69 */
+      '?', /* U+EB6A */
+      '?', /* U+EB6B */
+      '?', /* U+EB6C */
+      '?', /* U+EB6D */
+      '?', /* U+EB6E */
+      '?', /* U+EB6F */
+      '?', /* U+EB70 */
+      '?', /* U+EB71 */
+      '?', /* U+EB72 */
+      '?', /* U+EB73 */
+      '?', /* U+EB74 */
+      '?', /* U+EB75 */
+      '?', /* U+EB76 */
+      '?', /* U+EB77 */
+      '?', /* U+EB78 */
+      '?', /* U+EB79 */
+      '?', /* U+EB7A */
+      '?', /* U+EB7B */
+      '?', /* U+EB7C */
+      '?', /* U+EB7D */
+      '?', /* U+EB7E */
+      '?', /* U+EB7F */
+      '?', /* U+EB80 */
+      '?', /* U+EB81 */
+      '?', /* U+EB82 */
+      '?', /* U+EB83 */
+      '?', /* U+EB84 */
+      '?', /* U+EB85 */
+      '?', /* U+EB86 */
+      '?', /* U+EB87 */
+      '?', /* U+EB88 */
+      '?', /* U+EB89 */
+      '?', /* U+EB8A */
+      '?', /* U+EB8B */
+      '?', /* U+EB8C */
+      '?', /* U+EB8D */
+      '?', /* U+EB8E */
+      '?', /* U+EB8F */
+      '?', /* U+EB90 */
+      '?', /* U+EB91 */
+      '?', /* U+EB92 */
+      '?', /* U+EB93 */
+      '?', /* U+EB94 */
+      '?', /* U+EB95 */
+      '?', /* U+EB96 */
+      '?', /* U+EB97 */
+      '?', /* U+EB98 */
+      '?', /* U+EB99 */
+      '?', /* U+EB9A */
+      '?', /* U+EB9B */
+      '?', /* U+EB9C */
+      '?', /* U+EB9D */
+      '?', /* U+EB9E */
+      '?', /* U+EB9F */
+      '?', /* U+EBA0 */
+      '?', /* U+EBA1 */
+      '?', /* U+EBA2 */
+      '?', /* U+EBA3 */
+      '?', /* U+EBA4 */
+      '?', /* U+EBA5 */
+      '?', /* U+EBA6 */
+      '?', /* U+EBA7 */
+      '?', /* U+EBA8 */
+      '?', /* U+EBA9 */
+      '?', /* U+EBAA */
+      '?', /* U+EBAB */
+      '?', /* U+EBAC */
+      '?', /* U+EBAD */
+      '?', /* U+EBAE */
+      '?', /* U+EBAF */
+      '?', /* U+EBB0 */
+      '?', /* U+EBB1 */
+      '?', /* U+EBB2 */
+      '?', /* U+EBB3 */
+      '?', /* U+EBB4 */
+      '?', /* U+EBB5 */
+      '?', /* U+EBB6 */
+      '?', /* U+EBB7 */
+      '?', /* U+EBB8 */
+      '?', /* U+EBB9 */
+      '?', /* U+EBBA */
+      '?', /* U+EBBB */
+      '?', /* U+EBBC */
+      '?', /* U+EBBD */
+      '?', /* U+EBBE */
+      '?', /* U+EBBF */
+      '?', /* U+EBC0 */
+      '?', /* U+EBC1 */
+      '?', /* U+EBC2 */
+      '?', /* U+EBC3 */
+      '?', /* U+EBC4 */
+      '?', /* U+EBC5 */
+      '?', /* U+EBC6 */
+      '?', /* U+EBC7 */
+      '?', /* U+EBC8 */
+      '?', /* U+EBC9 */
+      '?', /* U+EBCA */
+      '?', /* U+EBCB */
+      '?', /* U+EBCC */
+      '?', /* U+EBCD */
+      '?', /* U+EBCE */
+      '?', /* U+EBCF */
+      '?', /* U+EBD0 */
+      '?', /* U+EBD1 */
+      '?', /* U+EBD2 */
+      '?', /* U+EBD3 */
+      '?', /* U+EBD4 */
+      '?', /* U+EBD5 */
+      '?', /* U+EBD6 */
+      '?', /* U+EBD7 */
+      '?', /* U+EBD8 */
+      '?', /* U+EBD9 */
+      '?', /* U+EBDA */
+      '?', /* U+EBDB */
+      '?', /* U+EBDC */
+      '?', /* U+EBDD */
+      '?', /* U+EBDE */
+      '?', /* U+EBDF */
+      '?', /* U+EBE0 */
+      '?', /* U+EBE1 */
+      '?', /* U+EBE2 */
+      '?', /* U+EBE3 */
+      '?', /* U+EBE4 */
+      '?', /* U+EBE5 */
+      '?', /* U+EBE6 */
+      '?', /* U+EBE7 */
+      '?', /* U+EBE8 */
+      '?', /* U+EBE9 */
+      '?', /* U+EBEA */
+      '?', /* U+EBEB */
+      '?', /* U+EBEC */
+      '?', /* U+EBED */
+      '?', /* U+EBEE */
+      '?', /* U+EBEF */
+      '?', /* U+EBF0 */
+      '?', /* U+EBF1 */
+      '?', /* U+EBF2 */
+      '?', /* U+EBF3 */
+      '?', /* U+EBF4 */
+      '?', /* U+EBF5 */
+      '?', /* U+EBF6 */
+      '?', /* U+EBF7 */
+      '?', /* U+EBF8 */
+      '?', /* U+EBF9 */
+      '?', /* U+EBFA */
+      '?', /* U+EBFB */
+      '?', /* U+EBFC */
+      '?', /* U+EBFD */
+      '?', /* U+EBFE */
+      '?', /* U+EBFF */
+      '?', /* U+EC00 */
+      '?', /* U+EC01 */
+      '?', /* U+EC02 */
+      '?', /* U+EC03 */
+      '?', /* U+EC04 */
+      '?', /* U+EC05 */
+      '?', /* U+EC06 */
+      '?', /* U+EC07 */
+      '?', /* U+EC08 */
+      '?', /* U+EC09 */
+      '?', /* U+EC0A */
+      '?', /* U+EC0B */
+      '?', /* U+EC0C */
+      '?', /* U+EC0D */
+      '?', /* U+EC0E */
+      '?', /* U+EC0F */
+      '?', /* U+EC10 */
+      '?', /* U+EC11 */
+      '?', /* U+EC12 */
+      '?', /* U+EC13 */
+      '?', /* U+EC14 */
+      '?', /* U+EC15 */
+      '?', /* U+EC16 */
+      '?', /* U+EC17 */
+      '?', /* U+EC18 */
+      '?', /* U+EC19 */
+      '?', /* U+EC1A */
+      '?', /* U+EC1B */
+      '?', /* U+EC1C */
+      '?', /* U+EC1D */
+      '?', /* U+EC1E */
+      '?', /* U+EC1F */
+      '?', /* U+EC20 */
+      '?', /* U+EC21 */
+      '?', /* U+EC22 */
+      '?', /* U+EC23 */
+      '?', /* U+EC24 */
+      '?', /* U+EC25 */
+      '?', /* U+EC26 */
+      '?', /* U+EC27 */
+      '?', /* U+EC28 */
+      '?', /* U+EC29 */
+      '?', /* U+EC2A */
+      '?', /* U+EC2B */
+      '?', /* U+EC2C */
+      '?', /* U+EC2D */
+      '?', /* U+EC2E */
+      '?', /* U+EC2F */
+      '?', /* U+EC30 */
+      '?', /* U+EC31 */
+      '?', /* U+EC32 */
+      '?', /* U+EC33 */
+      '?', /* U+EC34 */
+      '?', /* U+EC35 */
+      '?', /* U+EC36 */
+      '?', /* U+EC37 */
+      '?', /* U+EC38 */
+      '?', /* U+EC39 */
+      '?', /* U+EC3A */
+      '?', /* U+EC3B */
+      '?', /* U+EC3C */
+      '?', /* U+EC3D */
+      '?', /* U+EC3E */
+      '?', /* U+EC3F */
+      '?', /* U+EC40 */
+      '?', /* U+EC41 */
+      '?', /* U+EC42 */
+      '?', /* U+EC43 */
+      '?', /* U+EC44 */
+      '?', /* U+EC45 */
+      '?', /* U+EC46 */
+      '?', /* U+EC47 */
+      '?', /* U+EC48 */
+      '?', /* U+EC49 */
+      '?', /* U+EC4A */
+      '?', /* U+EC4B */
+      '?', /* U+EC4C */
+      '?', /* U+EC4D */
+      '?', /* U+EC4E */
+      '?', /* U+EC4F */
+      '?', /* U+EC50 */
+      '?', /* U+EC51 */
+      '?', /* U+EC52 */
+      '?', /* U+EC53 */
+      '?', /* U+EC54 */
+      '?', /* U+EC55 */
+      '?', /* U+EC56 */
+      '?', /* U+EC57 */
+      '?', /* U+EC58 */
+      '?', /* U+EC59 */
+      '?', /* U+EC5A */
+      '?', /* U+EC5B */
+      '?', /* U+EC5C */
+      '?', /* U+EC5D */
+      '?', /* U+EC5E */
+      '?', /* U+EC5F */
+      '?', /* U+EC60 */
+      '?', /* U+EC61 */
+      '?', /* U+EC62 */
+      '?', /* U+EC63 */
+      '?', /* U+EC64 */
+      '?', /* U+EC65 */
+      '?', /* U+EC66 */
+      '?', /* U+EC67 */
+      '?', /* U+EC68 */
+      '?', /* U+EC69 */
+      '?', /* U+EC6A */
+      '?', /* U+EC6B */
+      '?', /* U+EC6C */
+      '?', /* U+EC6D */
+      '?', /* U+EC6E */
+      '?', /* U+EC6F */
+      '?', /* U+EC70 */
+      '?', /* U+EC71 */
+      '?', /* U+EC72 */
+      '?', /* U+EC73 */
+      '?', /* U+EC74 */
+      '?', /* U+EC75 */
+      '?', /* U+EC76 */
+      '?', /* U+EC77 */
+      '?', /* U+EC78 */
+      '?', /* U+EC79 */
+      '?', /* U+EC7A */
+      '?', /* U+EC7B */
+      '?', /* U+EC7C */
+      '?', /* U+EC7D */
+      '?', /* U+EC7E */
+      '?', /* U+EC7F */
+      '?', /* U+EC80 */
+      '?', /* U+EC81 */
+      '?', /* U+EC82 */
+      '?', /* U+EC83 */
+      '?', /* U+EC84 */
+      '?', /* U+EC85 */
+      '?', /* U+EC86 */
+      '?', /* U+EC87 */
+      '?', /* U+EC88 */
+      '?', /* U+EC89 */
+      '?', /* U+EC8A */
+      '?', /* U+EC8B */
+      '?', /* U+EC8C */
+      '?', /* U+EC8D */
+      '?', /* U+EC8E */
+      '?', /* U+EC8F */
+      '?', /* U+EC90 */
+      '?', /* U+EC91 */
+      '?', /* U+EC92 */
+      '?', /* U+EC93 */
+      '?', /* U+EC94 */
+      '?', /* U+EC95 */
+      '?', /* U+EC96 */
+      '?', /* U+EC97 */
+      '?', /* U+EC98 */
+      '?', /* U+EC99 */
+      '?', /* U+EC9A */
+      '?', /* U+EC9B */
+      '?', /* U+EC9C */
+      '?', /* U+EC9D */
+      '?', /* U+EC9E */
+      '?', /* U+EC9F */
+      '?', /* U+ECA0 */
+      '?', /* U+ECA1 */
+      '?', /* U+ECA2 */
+      '?', /* U+ECA3 */
+      '?', /* U+ECA4 */
+      '?', /* U+ECA5 */
+      '?', /* U+ECA6 */
+      '?', /* U+ECA7 */
+      '?', /* U+ECA8 */
+      '?', /* U+ECA9 */
+      '?', /* U+ECAA */
+      '?', /* U+ECAB */
+      '?', /* U+ECAC */
+      '?', /* U+ECAD */
+      '?', /* U+ECAE */
+      '?', /* U+ECAF */
+      '?', /* U+ECB0 */
+      '?', /* U+ECB1 */
+      '?', /* U+ECB2 */
+      '?', /* U+ECB3 */
+      '?', /* U+ECB4 */
+      '?', /* U+ECB5 */
+      '?', /* U+ECB6 */
+      '?', /* U+ECB7 */
+      '?', /* U+ECB8 */
+      '?', /* U+ECB9 */
+      '?', /* U+ECBA */
+      '?', /* U+ECBB */
+      '?', /* U+ECBC */
+      '?', /* U+ECBD */
+      '?', /* U+ECBE */
+      '?', /* U+ECBF */
+      '?', /* U+ECC0 */
+      '?', /* U+ECC1 */
+      '?', /* U+ECC2 */
+      '?', /* U+ECC3 */
+      '?', /* U+ECC4 */
+      '?', /* U+ECC5 */
+      '?', /* U+ECC6 */
+      '?', /* U+ECC7 */
+      '?', /* U+ECC8 */
+      '?', /* U+ECC9 */
+      '?', /* U+ECCA */
+      '?', /* U+ECCB */
+      '?', /* U+ECCC */
+      '?', /* U+ECCD */
+      '?', /* U+ECCE */
+      '?', /* U+ECCF */
+      '?', /* U+ECD0 */
+      '?', /* U+ECD1 */
+      '?', /* U+ECD2 */
+      '?', /* U+ECD3 */
+      '?', /* U+ECD4 */
+      '?', /* U+ECD5 */
+      '?', /* U+ECD6 */
+      '?', /* U+ECD7 */
+      '?', /* U+ECD8 */
+      '?', /* U+ECD9 */
+      '?', /* U+ECDA */
+      '?', /* U+ECDB */
+      '?', /* U+ECDC */
+      '?', /* U+ECDD */
+      '?', /* U+ECDE */
+      '?', /* U+ECDF */
+      '?', /* U+ECE0 */
+      '?', /* U+ECE1 */
+      '?', /* U+ECE2 */
+      '?', /* U+ECE3 */
+      '?', /* U+ECE4 */
+      '?', /* U+ECE5 */
+      '?', /* U+ECE6 */
+      '?', /* U+ECE7 */
+      '?', /* U+ECE8 */
+      '?', /* U+ECE9 */
+      '?', /* U+ECEA */
+      '?', /* U+ECEB */
+      '?', /* U+ECEC */
+      '?', /* U+ECED */
+      '?', /* U+ECEE */
+      '?', /* U+ECEF */
+      '?', /* U+ECF0 */
+      '?', /* U+ECF1 */
+      '?', /* U+ECF2 */
+      '?', /* U+ECF3 */
+      '?', /* U+ECF4 */
+      '?', /* U+ECF5 */
+      '?', /* U+ECF6 */
+      '?', /* U+ECF7 */
+      '?', /* U+ECF8 */
+      '?', /* U+ECF9 */
+      '?', /* U+ECFA */
+      '?', /* U+ECFB */
+      '?', /* U+ECFC */
+      '?', /* U+ECFD */
+      '?', /* U+ECFE */
+      '?', /* U+ECFF */
+      '?', /* U+ED00 */
+      '?', /* U+ED01 */
+      '?', /* U+ED02 */
+      '?', /* U+ED03 */
+      '?', /* U+ED04 */
+      '?', /* U+ED05 */
+      '?', /* U+ED06 */
+      '?', /* U+ED07 */
+      '?', /* U+ED08 */
+      '?', /* U+ED09 */
+      '?', /* U+ED0A */
+      '?', /* U+ED0B */
+      '?', /* U+ED0C */
+      '?', /* U+ED0D */
+      '?', /* U+ED0E */
+      '?', /* U+ED0F */
+      '?', /* U+ED10 */
+      '?', /* U+ED11 */
+      '?', /* U+ED12 */
+      '?', /* U+ED13 */
+      '?', /* U+ED14 */
+      '?', /* U+ED15 */
+      '?', /* U+ED16 */
+      '?', /* U+ED17 */
+      '?', /* U+ED18 */
+      '?', /* U+ED19 */
+      '?', /* U+ED1A */
+      '?', /* U+ED1B */
+      '?', /* U+ED1C */
+      '?', /* U+ED1D */
+      '?', /* U+ED1E */
+      '?', /* U+ED1F */
+      '?', /* U+ED20 */
+      '?', /* U+ED21 */
+      '?', /* U+ED22 */
+      '?', /* U+ED23 */
+      '?', /* U+ED24 */
+      '?', /* U+ED25 */
+      '?', /* U+ED26 */
+      '?', /* U+ED27 */
+      '?', /* U+ED28 */
+      '?', /* U+ED29 */
+      '?', /* U+ED2A */
+      '?', /* U+ED2B */
+      '?', /* U+ED2C */
+      '?', /* U+ED2D */
+      '?', /* U+ED2E */
+      '?', /* U+ED2F */
+      '?', /* U+ED30 */
+      '?', /* U+ED31 */
+      '?', /* U+ED32 */
+      '?', /* U+ED33 */
+      '?', /* U+ED34 */
+      '?', /* U+ED35 */
+      '?', /* U+ED36 */
+      '?', /* U+ED37 */
+      '?', /* U+ED38 */
+      '?', /* U+ED39 */
+      '?', /* U+ED3A */
+      '?', /* U+ED3B */
+      '?', /* U+ED3C */
+      '?', /* U+ED3D */
+      '?', /* U+ED3E */
+      '?', /* U+ED3F */
+      '?', /* U+ED40 */
+      '?', /* U+ED41 */
+      '?', /* U+ED42 */
+      '?', /* U+ED43 */
+      '?', /* U+ED44 */
+      '?', /* U+ED45 */
+      '?', /* U+ED46 */
+      '?', /* U+ED47 */
+      '?', /* U+ED48 */
+      '?', /* U+ED49 */
+      '?', /* U+ED4A */
+      '?', /* U+ED4B */
+      '?', /* U+ED4C */
+      '?', /* U+ED4D */
+      '?', /* U+ED4E */
+      '?', /* U+ED4F */
+      '?', /* U+ED50 */
+      '?', /* U+ED51 */
+      '?', /* U+ED52 */
+      '?', /* U+ED53 */
+      '?', /* U+ED54 */
+      '?', /* U+ED55 */
+      '?', /* U+ED56 */
+      '?', /* U+ED57 */
+      '?', /* U+ED58 */
+      '?', /* U+ED59 */
+      '?', /* U+ED5A */
+      '?', /* U+ED5B */
+      '?', /* U+ED5C */
+      '?', /* U+ED5D */
+      '?', /* U+ED5E */
+      '?', /* U+ED5F */
+      '?', /* U+ED60 */
+      '?', /* U+ED61 */
+      '?', /* U+ED62 */
+      '?', /* U+ED63 */
+      '?', /* U+ED64 */
+      '?', /* U+ED65 */
+      '?', /* U+ED66 */
+      '?', /* U+ED67 */
+      '?', /* U+ED68 */
+      '?', /* U+ED69 */
+      '?', /* U+ED6A */
+      '?', /* U+ED6B */
+      '?', /* U+ED6C */
+      '?', /* U+ED6D */
+      '?', /* U+ED6E */
+      '?', /* U+ED6F */
+      '?', /* U+ED70 */
+      '?', /* U+ED71 */
+      '?', /* U+ED72 */
+      '?', /* U+ED73 */
+      '?', /* U+ED74 */
+      '?', /* U+ED75 */
+      '?', /* U+ED76 */
+      '?', /* U+ED77 */
+      '?', /* U+ED78 */
+      '?', /* U+ED79 */
+      '?', /* U+ED7A */
+      '?', /* U+ED7B */
+      '?', /* U+ED7C */
+      '?', /* U+ED7D */
+      '?', /* U+ED7E */
+      '?', /* U+ED7F */
+      '?', /* U+ED80 */
+      '?', /* U+ED81 */
+      '?', /* U+ED82 */
+      '?', /* U+ED83 */
+      '?', /* U+ED84 */
+      '?', /* U+ED85 */
+      '?', /* U+ED86 */
+      '?', /* U+ED87 */
+      '?', /* U+ED88 */
+      '?', /* U+ED89 */
+      '?', /* U+ED8A */
+      '?', /* U+ED8B */
+      '?', /* U+ED8C */
+      '?', /* U+ED8D */
+      '?', /* U+ED8E */
+      '?', /* U+ED8F */
+      '?', /* U+ED90 */
+      '?', /* U+ED91 */
+      '?', /* U+ED92 */
+      '?', /* U+ED93 */
+      '?', /* U+ED94 */
+      '?', /* U+ED95 */
+      '?', /* U+ED96 */
+      '?', /* U+ED97 */
+      '?', /* U+ED98 */
+      '?', /* U+ED99 */
+      '?', /* U+ED9A */
+      '?', /* U+ED9B */
+      '?', /* U+ED9C */
+      '?', /* U+ED9D */
+      '?', /* U+ED9E */
+      '?', /* U+ED9F */
+      '?', /* U+EDA0 */
+      '?', /* U+EDA1 */
+      '?', /* U+EDA2 */
+      '?', /* U+EDA3 */
+      '?', /* U+EDA4 */
+      '?', /* U+EDA5 */
+      '?', /* U+EDA6 */
+      '?', /* U+EDA7 */
+      '?', /* U+EDA8 */
+      '?', /* U+EDA9 */
+      '?', /* U+EDAA */
+      '?', /* U+EDAB */
+      '?', /* U+EDAC */
+      '?', /* U+EDAD */
+      '?', /* U+EDAE */
+      '?', /* U+EDAF */
+      '?', /* U+EDB0 */
+      '?', /* U+EDB1 */
+      '?', /* U+EDB2 */
+      '?', /* U+EDB3 */
+      '?', /* U+EDB4 */
+      '?', /* U+EDB5 */
+      '?', /* U+EDB6 */
+      '?', /* U+EDB7 */
+      '?', /* U+EDB8 */
+      '?', /* U+EDB9 */
+      '?', /* U+EDBA */
+      '?', /* U+EDBB */
+      '?', /* U+EDBC */
+      '?', /* U+EDBD */
+      '?', /* U+EDBE */
+      '?', /* U+EDBF */
+      '?', /* U+EDC0 */
+      '?', /* U+EDC1 */
+      '?', /* U+EDC2 */
+      '?', /* U+EDC3 */
+      '?', /* U+EDC4 */
+      '?', /* U+EDC5 */
+      '?', /* U+EDC6 */
+      '?', /* U+EDC7 */
+      '?', /* U+EDC8 */
+      '?', /* U+EDC9 */
+      '?', /* U+EDCA */
+      '?', /* U+EDCB */
+      '?', /* U+EDCC */
+      '?', /* U+EDCD */
+      '?', /* U+EDCE */
+      '?', /* U+EDCF */
+      '?', /* U+EDD0 */
+      '?', /* U+EDD1 */
+      '?', /* U+EDD2 */
+      '?', /* U+EDD3 */
+      '?', /* U+EDD4 */
+      '?', /* U+EDD5 */
+      '?', /* U+EDD6 */
+      '?', /* U+EDD7 */
+      '?', /* U+EDD8 */
+      '?', /* U+EDD9 */
+      '?', /* U+EDDA */
+      '?', /* U+EDDB */
+      '?', /* U+EDDC */
+      '?', /* U+EDDD */
+      '?', /* U+EDDE */
+      '?', /* U+EDDF */
+      '?', /* U+EDE0 */
+      '?', /* U+EDE1 */
+      '?', /* U+EDE2 */
+      '?', /* U+EDE3 */
+      '?', /* U+EDE4 */
+      '?', /* U+EDE5 */
+      '?', /* U+EDE6 */
+      '?', /* U+EDE7 */
+      '?', /* U+EDE8 */
+      '?', /* U+EDE9 */
+      '?', /* U+EDEA */
+      '?', /* U+EDEB */
+      '?', /* U+EDEC */
+      '?', /* U+EDED */
+      '?', /* U+EDEE */
+      '?', /* U+EDEF */
+      '?', /* U+EDF0 */
+      '?', /* U+EDF1 */
+      '?', /* U+EDF2 */
+      '?', /* U+EDF3 */
+      '?', /* U+EDF4 */
+      '?', /* U+EDF5 */
+      '?', /* U+EDF6 */
+      '?', /* U+EDF7 */
+      '?', /* U+EDF8 */
+      '?', /* U+EDF9 */
+      '?', /* U+EDFA */
+      '?', /* U+EDFB */
+      '?', /* U+EDFC */
+      '?', /* U+EDFD */
+      '?', /* U+EDFE */
+      '?', /* U+EDFF */
+      '?', /* U+EE00 */
+      '?', /* U+EE01 */
+      '?', /* U+EE02 */
+      '?', /* U+EE03 */
+      '?', /* U+EE04 */
+      '?', /* U+EE05 */
+      '?', /* U+EE06 */
+      '?', /* U+EE07 */
+      '?', /* U+EE08 */
+      '?', /* U+EE09 */
+      '?', /* U+EE0A */
+      '?', /* U+EE0B */
+      '?', /* U+EE0C */
+      '?', /* U+EE0D */
+      '?', /* U+EE0E */
+      '?', /* U+EE0F */
+      '?', /* U+EE10 */
+      '?', /* U+EE11 */
+      '?', /* U+EE12 */
+      '?', /* U+EE13 */
+      '?', /* U+EE14 */
+      '?', /* U+EE15 */
+      '?', /* U+EE16 */
+      '?', /* U+EE17 */
+      '?', /* U+EE18 */
+      '?', /* U+EE19 */
+      '?', /* U+EE1A */
+      '?', /* U+EE1B */
+      '?', /* U+EE1C */
+      '?', /* U+EE1D */
+      '?', /* U+EE1E */
+      '?', /* U+EE1F */
+      '?', /* U+EE20 */
+      '?', /* U+EE21 */
+      '?', /* U+EE22 */
+      '?', /* U+EE23 */
+      '?', /* U+EE24 */
+      '?', /* U+EE25 */
+      '?', /* U+EE26 */
+      '?', /* U+EE27 */
+      '?', /* U+EE28 */
+      '?', /* U+EE29 */
+      '?', /* U+EE2A */
+      '?', /* U+EE2B */
+      '?', /* U+EE2C */
+      '?', /* U+EE2D */
+      '?', /* U+EE2E */
+      '?', /* U+EE2F */
+      '?', /* U+EE30 */
+      '?', /* U+EE31 */
+      '?', /* U+EE32 */
+      '?', /* U+EE33 */
+      '?', /* U+EE34 */
+      '?', /* U+EE35 */
+      '?', /* U+EE36 */
+      '?', /* U+EE37 */
+      '?', /* U+EE38 */
+      '?', /* U+EE39 */
+      '?', /* U+EE3A */
+      '?', /* U+EE3B */
+      '?', /* U+EE3C */
+      '?', /* U+EE3D */
+      '?', /* U+EE3E */
+      '?', /* U+EE3F */
+      '?', /* U+EE40 */
+      '?', /* U+EE41 */
+      '?', /* U+EE42 */
+      '?', /* U+EE43 */
+      '?', /* U+EE44 */
+      '?', /* U+EE45 */
+      '?', /* U+EE46 */
+      '?', /* U+EE47 */
+      '?', /* U+EE48 */
+      '?', /* U+EE49 */
+      '?', /* U+EE4A */
+      '?', /* U+EE4B */
+      '?', /* U+EE4C */
+      '?', /* U+EE4D */
+      '?', /* U+EE4E */
+      '?', /* U+EE4F */
+      '?', /* U+EE50 */
+      '?', /* U+EE51 */
+      '?', /* U+EE52 */
+      '?', /* U+EE53 */
+      '?', /* U+EE54 */
+      '?', /* U+EE55 */
+      '?', /* U+EE56 */
+      '?', /* U+EE57 */
+      '?', /* U+EE58 */
+      '?', /* U+EE59 */
+      '?', /* U+EE5A */
+      '?', /* U+EE5B */
+      '?', /* U+EE5C */
+      '?', /* U+EE5D */
+      '?', /* U+EE5E */
+      '?', /* U+EE5F */
+      '?', /* U+EE60 */
+      '?', /* U+EE61 */
+      '?', /* U+EE62 */
+      '?', /* U+EE63 */
+      '?', /* U+EE64 */
+      '?', /* U+EE65 */
+      '?', /* U+EE66 */
+      '?', /* U+EE67 */
+      '?', /* U+EE68 */
+      '?', /* U+EE69 */
+      '?', /* U+EE6A */
+      '?', /* U+EE6B */
+      '?', /* U+EE6C */
+      '?', /* U+EE6D */
+      '?', /* U+EE6E */
+      '?', /* U+EE6F */
+      '?', /* U+EE70 */
+      '?', /* U+EE71 */
+      '?', /* U+EE72 */
+      '?', /* U+EE73 */
+      '?', /* U+EE74 */
+      '?', /* U+EE75 */
+      '?', /* U+EE76 */
+      '?', /* U+EE77 */
+      '?', /* U+EE78 */
+      '?', /* U+EE79 */
+      '?', /* U+EE7A */
+      '?', /* U+EE7B */
+      '?', /* U+EE7C */
+      '?', /* U+EE7D */
+      '?', /* U+EE7E */
+      '?', /* U+EE7F */
+      '?', /* U+EE80 */
+      '?', /* U+EE81 */
+      '?', /* U+EE82 */
+      '?', /* U+EE83 */
+      '?', /* U+EE84 */
+      '?', /* U+EE85 */
+      '?', /* U+EE86 */
+      '?', /* U+EE87 */
+      '?', /* U+EE88 */
+      '?', /* U+EE89 */
+      '?', /* U+EE8A */
+      '?', /* U+EE8B */
+      '?', /* U+EE8C */
+      '?', /* U+EE8D */
+      '?', /* U+EE8E */
+      '?', /* U+EE8F */
+      '?', /* U+EE90 */
+      '?', /* U+EE91 */
+      '?', /* U+EE92 */
+      '?', /* U+EE93 */
+      '?', /* U+EE94 */
+      '?', /* U+EE95 */
+      '?', /* U+EE96 */
+      '?', /* U+EE97 */
+      '?', /* U+EE98 */
+      '?', /* U+EE99 */
+      '?', /* U+EE9A */
+      '?', /* U+EE9B */
+      '?', /* U+EE9C */
+      '?', /* U+EE9D */
+      '?', /* U+EE9E */
+      '?', /* U+EE9F */
+      '?', /* U+EEA0 */
+      '?', /* U+EEA1 */
+      '?', /* U+EEA2 */
+      '?', /* U+EEA3 */
+      '?', /* U+EEA4 */
+      '?', /* U+EEA5 */
+      '?', /* U+EEA6 */
+      '?', /* U+EEA7 */
+      '?', /* U+EEA8 */
+      '?', /* U+EEA9 */
+      '?', /* U+EEAA */
+      '?', /* U+EEAB */
+      '?', /* U+EEAC */
+      '?', /* U+EEAD */
+      '?', /* U+EEAE */
+      '?', /* U+EEAF */
+      '?', /* U+EEB0 */
+      '?', /* U+EEB1 */
+      '?', /* U+EEB2 */
+      '?', /* U+EEB3 */
+      '?', /* U+EEB4 */
+      '?', /* U+EEB5 */
+      '?', /* U+EEB6 */
+      '?', /* U+EEB7 */
+      '?', /* U+EEB8 */
+      '?', /* U+EEB9 */
+      '?', /* U+EEBA */
+      '?', /* U+EEBB */
+      '?', /* U+EEBC */
+      '?', /* U+EEBD */
+      '?', /* U+EEBE */
+      '?', /* U+EEBF */
+      '?', /* U+EEC0 */
+      '?', /* U+EEC1 */
+      '?', /* U+EEC2 */
+      '?', /* U+EEC3 */
+      '?', /* U+EEC4 */
+      '?', /* U+EEC5 */
+      '?', /* U+EEC6 */
+      '?', /* U+EEC7 */
+      '?', /* U+EEC8 */
+      '?', /* U+EEC9 */
+      '?', /* U+EECA */
+      '?', /* U+EECB */
+      '?', /* U+EECC */
+      '?', /* U+EECD */
+      '?', /* U+EECE */
+      '?', /* U+EECF */
+      '?', /* U+EED0 */
+      '?', /* U+EED1 */
+      '?', /* U+EED2 */
+      '?', /* U+EED3 */
+      '?', /* U+EED4 */
+      '?', /* U+EED5 */
+      '?', /* U+EED6 */
+      '?', /* U+EED7 */
+      '?', /* U+EED8 */
+      '?', /* U+EED9 */
+      '?', /* U+EEDA */
+      '?', /* U+EEDB */
+      '?', /* U+EEDC */
+      '?', /* U+EEDD */
+      '?', /* U+EEDE */
+      '?', /* U+EEDF */
+      '?', /* U+EEE0 */
+      '?', /* U+EEE1 */
+      '?', /* U+EEE2 */
+      '?', /* U+EEE3 */
+      '?', /* U+EEE4 */
+      '?', /* U+EEE5 */
+      '?', /* U+EEE6 */
+      '?', /* U+EEE7 */
+      '?', /* U+EEE8 */
+      '?', /* U+EEE9 */
+      '?', /* U+EEEA */
+      '?', /* U+EEEB */
+      '?', /* U+EEEC */
+      '?', /* U+EEED */
+      '?', /* U+EEEE */
+      '?', /* U+EEEF */
+      '?', /* U+EEF0 */
+      '?', /* U+EEF1 */
+      '?', /* U+EEF2 */
+      '?', /* U+EEF3 */
+      '?', /* U+EEF4 */
+      '?', /* U+EEF5 */
+      '?', /* U+EEF6 */
+      '?', /* U+EEF7 */
+      '?', /* U+EEF8 */
+      '?', /* U+EEF9 */
+      '?', /* U+EEFA */
+      '?', /* U+EEFB */
+      '?', /* U+EEFC */
+      '?', /* U+EEFD */
+      '?', /* U+EEFE */
+      '?', /* U+EEFF */
+      '?', /* U+EF00 */
+      '?', /* U+EF01 */
+      '?', /* U+EF02 */
+      '?', /* U+EF03 */
+      '?', /* U+EF04 */
+      '?', /* U+EF05 */
+      '?', /* U+EF06 */
+      '?', /* U+EF07 */
+      '?', /* U+EF08 */
+      '?', /* U+EF09 */
+      '?', /* U+EF0A */
+      '?', /* U+EF0B */
+      '?', /* U+EF0C */
+      '?', /* U+EF0D */
+      '?', /* U+EF0E */
+      '?', /* U+EF0F */
+      '?', /* U+EF10 */
+      '?', /* U+EF11 */
+      '?', /* U+EF12 */
+      '?', /* U+EF13 */
+      '?', /* U+EF14 */
+      '?', /* U+EF15 */
+      '?', /* U+EF16 */
+      '?', /* U+EF17 */
+      '?', /* U+EF18 */
+      '?', /* U+EF19 */
+      '?', /* U+EF1A */
+      '?', /* U+EF1B */
+      '?', /* U+EF1C */
+      '?', /* U+EF1D */
+      '?', /* U+EF1E */
+      '?', /* U+EF1F */
+      '?', /* U+EF20 */
+      '?', /* U+EF21 */
+      '?', /* U+EF22 */
+      '?', /* U+EF23 */
+      '?', /* U+EF24 */
+      '?', /* U+EF25 */
+      '?', /* U+EF26 */
+      '?', /* U+EF27 */
+      '?', /* U+EF28 */
+      '?', /* U+EF29 */
+      '?', /* U+EF2A */
+      '?', /* U+EF2B */
+      '?', /* U+EF2C */
+      '?', /* U+EF2D */
+      '?', /* U+EF2E */
+      '?', /* U+EF2F */
+      '?', /* U+EF30 */
+      '?', /* U+EF31 */
+      '?', /* U+EF32 */
+      '?', /* U+EF33 */
+      '?', /* U+EF34 */
+      '?', /* U+EF35 */
+      '?', /* U+EF36 */
+      '?', /* U+EF37 */
+      '?', /* U+EF38 */
+      '?', /* U+EF39 */
+      '?', /* U+EF3A */
+      '?', /* U+EF3B */
+      '?', /* U+EF3C */
+      '?', /* U+EF3D */
+      '?', /* U+EF3E */
+      '?', /* U+EF3F */
+      '?', /* U+EF40 */
+      '?', /* U+EF41 */
+      '?', /* U+EF42 */
+      '?', /* U+EF43 */
+      '?', /* U+EF44 */
+      '?', /* U+EF45 */
+      '?', /* U+EF46 */
+      '?', /* U+EF47 */
+      '?', /* U+EF48 */
+      '?', /* U+EF49 */
+      '?', /* U+EF4A */
+      '?', /* U+EF4B */
+      '?', /* U+EF4C */
+      '?', /* U+EF4D */
+      '?', /* U+EF4E */
+      '?', /* U+EF4F */
+      '?', /* U+EF50 */
+      '?', /* U+EF51 */
+      '?', /* U+EF52 */
+      '?', /* U+EF53 */
+      '?', /* U+EF54 */
+      '?', /* U+EF55 */
+      '?', /* U+EF56 */
+      '?', /* U+EF57 */
+      '?', /* U+EF58 */
+      '?', /* U+EF59 */
+      '?', /* U+EF5A */
+      '?', /* U+EF5B */
+      '?', /* U+EF5C */
+      '?', /* U+EF5D */
+      '?', /* U+EF5E */
+      '?', /* U+EF5F */
+      '?', /* U+EF60 */
+      '?', /* U+EF61 */
+      '?', /* U+EF62 */
+      '?', /* U+EF63 */
+      '?', /* U+EF64 */
+      '?', /* U+EF65 */
+      '?', /* U+EF66 */
+      '?', /* U+EF67 */
+      '?', /* U+EF68 */
+      '?', /* U+EF69 */
+      '?', /* U+EF6A */
+      '?', /* U+EF6B */
+      '?', /* U+EF6C */
+      '?', /* U+EF6D */
+      '?', /* U+EF6E */
+      '?', /* U+EF6F */
+      '?', /* U+EF70 */
+      '?', /* U+EF71 */
+      '?', /* U+EF72 */
+      '?', /* U+EF73 */
+      '?', /* U+EF74 */
+      '?', /* U+EF75 */
+      '?', /* U+EF76 */
+      '?', /* U+EF77 */
+      '?', /* U+EF78 */
+      '?', /* U+EF79 */
+      '?', /* U+EF7A */
+      '?', /* U+EF7B */
+      '?', /* U+EF7C */
+      '?', /* U+EF7D */
+      '?', /* U+EF7E */
+      '?', /* U+EF7F */
+      '?', /* U+EF80 */
+      '?', /* U+EF81 */
+      '?', /* U+EF82 */
+      '?', /* U+EF83 */
+      '?', /* U+EF84 */
+      '?', /* U+EF85 */
+      '?', /* U+EF86 */
+      '?', /* U+EF87 */
+      '?', /* U+EF88 */
+      '?', /* U+EF89 */
+      '?', /* U+EF8A */
+      '?', /* U+EF8B */
+      '?', /* U+EF8C */
+      '?', /* U+EF8D */
+      '?', /* U+EF8E */
+      '?', /* U+EF8F */
+      '?', /* U+EF90 */
+      '?', /* U+EF91 */
+      '?', /* U+EF92 */
+      '?', /* U+EF93 */
+      '?', /* U+EF94 */
+      '?', /* U+EF95 */
+      '?', /* U+EF96 */
+      '?', /* U+EF97 */
+      '?', /* U+EF98 */
+      '?', /* U+EF99 */
+      '?', /* U+EF9A */
+      '?', /* U+EF9B */
+      '?', /* U+EF9C */
+      '?', /* U+EF9D */
+      '?', /* U+EF9E */
+      '?', /* U+EF9F */
+      '?', /* U+EFA0 */
+      '?', /* U+EFA1 */
+      '?', /* U+EFA2 */
+      '?', /* U+EFA3 */
+      '?', /* U+EFA4 */
+      '?', /* U+EFA5 */
+      '?', /* U+EFA6 */
+      '?', /* U+EFA7 */
+      '?', /* U+EFA8 */
+      '?', /* U+EFA9 */
+      '?', /* U+EFAA */
+      '?', /* U+EFAB */
+      '?', /* U+EFAC */
+      '?', /* U+EFAD */
+      '?', /* U+EFAE */
+      '?', /* U+EFAF */
+      '?', /* U+EFB0 */
+      '?', /* U+EFB1 */
+      '?', /* U+EFB2 */
+      '?', /* U+EFB3 */
+      '?', /* U+EFB4 */
+      '?', /* U+EFB5 */
+      '?', /* U+EFB6 */
+      '?', /* U+EFB7 */
+      '?', /* U+EFB8 */
+      '?', /* U+EFB9 */
+      '?', /* U+EFBA */
+      '?', /* U+EFBB */
+      '?', /* U+EFBC */
+      '?', /* U+EFBD */
+      '?', /* U+EFBE */
+      '?', /* U+EFBF */
+      '?', /* U+EFC0 */
+      '?', /* U+EFC1 */
+      '?', /* U+EFC2 */
+      '?', /* U+EFC3 */
+      '?', /* U+EFC4 */
+      '?', /* U+EFC5 */
+      '?', /* U+EFC6 */
+      '?', /* U+EFC7 */
+      '?', /* U+EFC8 */
+      '?', /* U+EFC9 */
+      '?', /* U+EFCA */
+      '?', /* U+EFCB */
+      '?', /* U+EFCC */
+      '?', /* U+EFCD */
+      '?', /* U+EFCE */
+      '?', /* U+EFCF */
+      '?', /* U+EFD0 */
+      '?', /* U+EFD1 */
+      '?', /* U+EFD2 */
+      '?', /* U+EFD3 */
+      '?', /* U+EFD4 */
+      '?', /* U+EFD5 */
+      '?', /* U+EFD6 */
+      '?', /* U+EFD7 */
+      '?', /* U+EFD8 */
+      '?', /* U+EFD9 */
+      '?', /* U+EFDA */
+      '?', /* U+EFDB */
+      '?', /* U+EFDC */
+      '?', /* U+EFDD */
+      '?', /* U+EFDE */
+      '?', /* U+EFDF */
+      '?', /* U+EFE0 */
+      '?', /* U+EFE1 */
+      '?', /* U+EFE2 */
+      '?', /* U+EFE3 */
+      '?', /* U+EFE4 */
+      '?', /* U+EFE5 */
+      '?', /* U+EFE6 */
+      '?', /* U+EFE7 */
+      '?', /* U+EFE8 */
+      '?', /* U+EFE9 */
+      '?', /* U+EFEA */
+      '?', /* U+EFEB */
+      '?', /* U+EFEC */
+      '?', /* U+EFED */
+      '?', /* U+EFEE */
+      '?', /* U+EFEF */
+      '?', /* U+EFF0 */
+      '?', /* U+EFF1 */
+      '?', /* U+EFF2 */
+      '?', /* U+EFF3 */
+      '?', /* U+EFF4 */
+      '?', /* U+EFF5 */
+      '?', /* U+EFF6 */
+      '?', /* U+EFF7 */
+      '?', /* U+EFF8 */
+      '?', /* U+EFF9 */
+      '?', /* U+EFFA */
+      '?', /* U+EFFB */
+      '?', /* U+EFFC */
+      '?', /* U+EFFD */
+      '?', /* U+EFFE */
+      '?', /* U+EFFF */
+      '?', /* U+F000 */
+      '?', /* U+F001 */
+      '?', /* U+F002 */
+      '?', /* U+F003 */
+      '?', /* U+F004 */
+      '?', /* U+F005 */
+      '?', /* U+F006 */
+      '?', /* U+F007 */
+      '?', /* U+F008 */
+      '?', /* U+F009 */
+      '?', /* U+F00A */
+      '?', /* U+F00B */
+      '?', /* U+F00C */
+      '?', /* U+F00D */
+      '?', /* U+F00E */
+      '?', /* U+F00F */
+      '?', /* U+F010 */
+      '?', /* U+F011 */
+      '?', /* U+F012 */
+      '?', /* U+F013 */
+      '?', /* U+F014 */
+      '?', /* U+F015 */
+      '?', /* U+F016 */
+      '?', /* U+F017 */
+      '?', /* U+F018 */
+      '?', /* U+F019 */
+      '?', /* U+F01A */
+      '?', /* U+F01B */
+      '?', /* U+F01C */
+      '?', /* U+F01D */
+      '?', /* U+F01E */
+      '?', /* U+F01F */
+      '?', /* U+F020 */
+      '?', /* U+F021 */
+      '?', /* U+F022 */
+      '?', /* U+F023 */
+      '?', /* U+F024 */
+      '?', /* U+F025 */
+      '?', /* U+F026 */
+      '?', /* U+F027 */
+      '?', /* U+F028 */
+      '?', /* U+F029 */
+      '?', /* U+F02A */
+      '?', /* U+F02B */
+      '?', /* U+F02C */
+      '?', /* U+F02D */
+      '?', /* U+F02E */
+      '?', /* U+F02F */
+      '?', /* U+F030 */
+      '?', /* U+F031 */
+      '?', /* U+F032 */
+      '?', /* U+F033 */
+      '?', /* U+F034 */
+      '?', /* U+F035 */
+      '?', /* U+F036 */
+      '?', /* U+F037 */
+      '?', /* U+F038 */
+      '?', /* U+F039 */
+      '?', /* U+F03A */
+      '?', /* U+F03B */
+      '?', /* U+F03C */
+      '?', /* U+F03D */
+      '?', /* U+F03E */
+      '?', /* U+F03F */
+      '?', /* U+F040 */
+      '?', /* U+F041 */
+      '?', /* U+F042 */
+      '?', /* U+F043 */
+      '?', /* U+F044 */
+      '?', /* U+F045 */
+      '?', /* U+F046 */
+      '?', /* U+F047 */
+      '?', /* U+F048 */
+      '?', /* U+F049 */
+      '?', /* U+F04A */
+      '?', /* U+F04B */
+      '?', /* U+F04C */
+      '?', /* U+F04D */
+      '?', /* U+F04E */
+      '?', /* U+F04F */
+      '?', /* U+F050 */
+      '?', /* U+F051 */
+      '?', /* U+F052 */
+      '?', /* U+F053 */
+      '?', /* U+F054 */
+      '?', /* U+F055 */
+      '?', /* U+F056 */
+      '?', /* U+F057 */
+      '?', /* U+F058 */
+      '?', /* U+F059 */
+      '?', /* U+F05A */
+      '?', /* U+F05B */
+      '?', /* U+F05C */
+      '?', /* U+F05D */
+      '?', /* U+F05E */
+      '?', /* U+F05F */
+      '?', /* U+F060 */
+      '?', /* U+F061 */
+      '?', /* U+F062 */
+      '?', /* U+F063 */
+      '?', /* U+F064 */
+      '?', /* U+F065 */
+      '?', /* U+F066 */
+      '?', /* U+F067 */
+      '?', /* U+F068 */
+      '?', /* U+F069 */
+      '?', /* U+F06A */
+      '?', /* U+F06B */
+      '?', /* U+F06C */
+      '?', /* U+F06D */
+      '?', /* U+F06E */
+      '?', /* U+F06F */
+      '?', /* U+F070 */
+      '?', /* U+F071 */
+      '?', /* U+F072 */
+      '?', /* U+F073 */
+      '?', /* U+F074 */
+      '?', /* U+F075 */
+      '?', /* U+F076 */
+      '?', /* U+F077 */
+      '?', /* U+F078 */
+      '?', /* U+F079 */
+      '?', /* U+F07A */
+      '?', /* U+F07B */
+      '?', /* U+F07C */
+      '?', /* U+F07D */
+      '?', /* U+F07E */
+      '?', /* U+F07F */
+      '?', /* U+F080 */
+      '?', /* U+F081 */
+      '?', /* U+F082 */
+      '?', /* U+F083 */
+      '?', /* U+F084 */
+      '?', /* U+F085 */
+      '?', /* U+F086 */
+      '?', /* U+F087 */
+      '?', /* U+F088 */
+      '?', /* U+F089 */
+      '?', /* U+F08A */
+      '?', /* U+F08B */
+      '?', /* U+F08C */
+      '?', /* U+F08D */
+      '?', /* U+F08E */
+      '?', /* U+F08F */
+      '?', /* U+F090 */
+      '?', /* U+F091 */
+      '?', /* U+F092 */
+      '?', /* U+F093 */
+      '?', /* U+F094 */
+      '?', /* U+F095 */
+      '?', /* U+F096 */
+      '?', /* U+F097 */
+      '?', /* U+F098 */
+      '?', /* U+F099 */
+      '?', /* U+F09A */
+      '?', /* U+F09B */
+      '?', /* U+F09C */
+      '?', /* U+F09D */
+      '?', /* U+F09E */
+      '?', /* U+F09F */
+      '?', /* U+F0A0 */
+      '?', /* U+F0A1 */
+      '?', /* U+F0A2 */
+      '?', /* U+F0A3 */
+      '?', /* U+F0A4 */
+      '?', /* U+F0A5 */
+      '?', /* U+F0A6 */
+      '?', /* U+F0A7 */
+      '?', /* U+F0A8 */
+      '?', /* U+F0A9 */
+      '?', /* U+F0AA */
+      '?', /* U+F0AB */
+      '?', /* U+F0AC */
+      '?', /* U+F0AD */
+      '?', /* U+F0AE */
+      '?', /* U+F0AF */
+      '?', /* U+F0B0 */
+      '?', /* U+F0B1 */
+      '?', /* U+F0B2 */
+      '?', /* U+F0B3 */
+      '?', /* U+F0B4 */
+      '?', /* U+F0B5 */
+      '?', /* U+F0B6 */
+      '?', /* U+F0B7 */
+      '?', /* U+F0B8 */
+      '?', /* U+F0B9 */
+      '?', /* U+F0BA */
+      '?', /* U+F0BB */
+      '?', /* U+F0BC */
+      '?', /* U+F0BD */
+      '?', /* U+F0BE */
+      '?', /* U+F0BF */
+      '?', /* U+F0C0 */
+      '?', /* U+F0C1 */
+      '?', /* U+F0C2 */
+      '?', /* U+F0C3 */
+      '?', /* U+F0C4 */
+      '?', /* U+F0C5 */
+      '?', /* U+F0C6 */
+      '?', /* U+F0C7 */
+      '?', /* U+F0C8 */
+      '?', /* U+F0C9 */
+      '?', /* U+F0CA */
+      '?', /* U+F0CB */
+      '?', /* U+F0CC */
+      '?', /* U+F0CD */
+      '?', /* U+F0CE */
+      '?', /* U+F0CF */
+      '?', /* U+F0D0 */
+      '?', /* U+F0D1 */
+      '?', /* U+F0D2 */
+      '?', /* U+F0D3 */
+      '?', /* U+F0D4 */
+      '?', /* U+F0D5 */
+      '?', /* U+F0D6 */
+      '?', /* U+F0D7 */
+      '?', /* U+F0D8 */
+      '?', /* U+F0D9 */
+      '?', /* U+F0DA */
+      '?', /* U+F0DB */
+      '?', /* U+F0DC */
+      '?', /* U+F0DD */
+      '?', /* U+F0DE */
+      '?', /* U+F0DF */
+      '?', /* U+F0E0 */
+      '?', /* U+F0E1 */
+      '?', /* U+F0E2 */
+      '?', /* U+F0E3 */
+      '?', /* U+F0E4 */
+      '?', /* U+F0E5 */
+      '?', /* U+F0E6 */
+      '?', /* U+F0E7 */
+      '?', /* U+F0E8 */
+      '?', /* U+F0E9 */
+      '?', /* U+F0EA */
+      '?', /* U+F0EB */
+      '?', /* U+F0EC */
+      '?', /* U+F0ED */
+      '?', /* U+F0EE */
+      '?', /* U+F0EF */
+      '?', /* U+F0F0 */
+      '?', /* U+F0F1 */
+      '?', /* U+F0F2 */
+      '?', /* U+F0F3 */
+      '?', /* U+F0F4 */
+      '?', /* U+F0F5 */
+      '?', /* U+F0F6 */
+      '?', /* U+F0F7 */
+      '?', /* U+F0F8 */
+      '?', /* U+F0F9 */
+      '?', /* U+F0FA */
+      '?', /* U+F0FB */
+      '?', /* U+F0FC */
+      '?', /* U+F0FD */
+      '?', /* U+F0FE */
+      '?', /* U+F0FF */
+      '?', /* U+F100 */
+      '?', /* U+F101 */
+      '?', /* U+F102 */
+      '?', /* U+F103 */
+      '?', /* U+F104 */
+      '?', /* U+F105 */
+      '?', /* U+F106 */
+      '?', /* U+F107 */
+      '?', /* U+F108 */
+      '?', /* U+F109 */
+      '?', /* U+F10A */
+      '?', /* U+F10B */
+      '?', /* U+F10C */
+      '?', /* U+F10D */
+      '?', /* U+F10E */
+      '?', /* U+F10F */
+      '?', /* U+F110 */
+      '?', /* U+F111 */
+      '?', /* U+F112 */
+      '?', /* U+F113 */
+      '?', /* U+F114 */
+      '?', /* U+F115 */
+      '?', /* U+F116 */
+      '?', /* U+F117 */
+      '?', /* U+F118 */
+      '?', /* U+F119 */
+      '?', /* U+F11A */
+      '?', /* U+F11B */
+      '?', /* U+F11C */
+      '?', /* U+F11D */
+      '?', /* U+F11E */
+      '?', /* U+F11F */
+      '?', /* U+F120 */
+      '?', /* U+F121 */
+      '?', /* U+F122 */
+      '?', /* U+F123 */
+      '?', /* U+F124 */
+      '?', /* U+F125 */
+      '?', /* U+F126 */
+      '?', /* U+F127 */
+      '?', /* U+F128 */
+      '?', /* U+F129 */
+      '?', /* U+F12A */
+      '?', /* U+F12B */
+      '?', /* U+F12C */
+      '?', /* U+F12D */
+      '?', /* U+F12E */
+      '?', /* U+F12F */
+      '?', /* U+F130 */
+      '?', /* U+F131 */
+      '?', /* U+F132 */
+      '?', /* U+F133 */
+      '?', /* U+F134 */
+      '?', /* U+F135 */
+      '?', /* U+F136 */
+      '?', /* U+F137 */
+      '?', /* U+F138 */
+      '?', /* U+F139 */
+      '?', /* U+F13A */
+      '?', /* U+F13B */
+      '?', /* U+F13C */
+      '?', /* U+F13D */
+      '?', /* U+F13E */
+      '?', /* U+F13F */
+      '?', /* U+F140 */
+      '?', /* U+F141 */
+      '?', /* U+F142 */
+      '?', /* U+F143 */
+      '?', /* U+F144 */
+      '?', /* U+F145 */
+      '?', /* U+F146 */
+      '?', /* U+F147 */
+      '?', /* U+F148 */
+      '?', /* U+F149 */
+      '?', /* U+F14A */
+      '?', /* U+F14B */
+      '?', /* U+F14C */
+      '?', /* U+F14D */
+      '?', /* U+F14E */
+      '?', /* U+F14F */
+      '?', /* U+F150 */
+      '?', /* U+F151 */
+      '?', /* U+F152 */
+      '?', /* U+F153 */
+      '?', /* U+F154 */
+      '?', /* U+F155 */
+      '?', /* U+F156 */
+      '?', /* U+F157 */
+      '?', /* U+F158 */
+      '?', /* U+F159 */
+      '?', /* U+F15A */
+      '?', /* U+F15B */
+      '?', /* U+F15C */
+      '?', /* U+F15D */
+      '?', /* U+F15E */
+      '?', /* U+F15F */
+      '?', /* U+F160 */
+      '?', /* U+F161 */
+      '?', /* U+F162 */
+      '?', /* U+F163 */
+      '?', /* U+F164 */
+      '?', /* U+F165 */
+      '?', /* U+F166 */
+      '?', /* U+F167 */
+      '?', /* U+F168 */
+      '?', /* U+F169 */
+      '?', /* U+F16A */
+      '?', /* U+F16B */
+      '?', /* U+F16C */
+      '?', /* U+F16D */
+      '?', /* U+F16E */
+      '?', /* U+F16F */
+      '?', /* U+F170 */
+      '?', /* U+F171 */
+      '?', /* U+F172 */
+      '?', /* U+F173 */
+      '?', /* U+F174 */
+      '?', /* U+F175 */
+      '?', /* U+F176 */
+      '?', /* U+F177 */
+      '?', /* U+F178 */
+      '?', /* U+F179 */
+      '?', /* U+F17A */
+      '?', /* U+F17B */
+      '?', /* U+F17C */
+      '?', /* U+F17D */
+      '?', /* U+F17E */
+      '?', /* U+F17F */
+      '?', /* U+F180 */
+      '?', /* U+F181 */
+      '?', /* U+F182 */
+      '?', /* U+F183 */
+      '?', /* U+F184 */
+      '?', /* U+F185 */
+      '?', /* U+F186 */
+      '?', /* U+F187 */
+      '?', /* U+F188 */
+      '?', /* U+F189 */
+      '?', /* U+F18A */
+      '?', /* U+F18B */
+      '?', /* U+F18C */
+      '?', /* U+F18D */
+      '?', /* U+F18E */
+      '?', /* U+F18F */
+      '?', /* U+F190 */
+      '?', /* U+F191 */
+      '?', /* U+F192 */
+      '?', /* U+F193 */
+      '?', /* U+F194 */
+      '?', /* U+F195 */
+      '?', /* U+F196 */
+      '?', /* U+F197 */
+      '?', /* U+F198 */
+      '?', /* U+F199 */
+      '?', /* U+F19A */
+      '?', /* U+F19B */
+      '?', /* U+F19C */
+      '?', /* U+F19D */
+      '?', /* U+F19E */
+      '?', /* U+F19F */
+      '?', /* U+F1A0 */
+      '?', /* U+F1A1 */
+      '?', /* U+F1A2 */
+      '?', /* U+F1A3 */
+      '?', /* U+F1A4 */
+      '?', /* U+F1A5 */
+      '?', /* U+F1A6 */
+      '?', /* U+F1A7 */
+      '?', /* U+F1A8 */
+      '?', /* U+F1A9 */
+      '?', /* U+F1AA */
+      '?', /* U+F1AB */
+      '?', /* U+F1AC */
+      '?', /* U+F1AD */
+      '?', /* U+F1AE */
+      '?', /* U+F1AF */
+      '?', /* U+F1B0 */
+      '?', /* U+F1B1 */
+      '?', /* U+F1B2 */
+      '?', /* U+F1B3 */
+      '?', /* U+F1B4 */
+      '?', /* U+F1B5 */
+      '?', /* U+F1B6 */
+      '?', /* U+F1B7 */
+      '?', /* U+F1B8 */
+      '?', /* U+F1B9 */
+      '?', /* U+F1BA */
+      '?', /* U+F1BB */
+      '?', /* U+F1BC */
+      '?', /* U+F1BD */
+      '?', /* U+F1BE */
+      '?', /* U+F1BF */
+      '?', /* U+F1C0 */
+      '?', /* U+F1C1 */
+      '?', /* U+F1C2 */
+      '?', /* U+F1C3 */
+      '?', /* U+F1C4 */
+      '?', /* U+F1C5 */
+      '?', /* U+F1C6 */
+      '?', /* U+F1C7 */
+      '?', /* U+F1C8 */
+      '?', /* U+F1C9 */
+      '?', /* U+F1CA */
+      '?', /* U+F1CB */
+      '?', /* U+F1CC */
+      '?', /* U+F1CD */
+      '?', /* U+F1CE */
+      '?', /* U+F1CF */
+      '?', /* U+F1D0 */
+      '?', /* U+F1D1 */
+      '?', /* U+F1D2 */
+      '?', /* U+F1D3 */
+      '?', /* U+F1D4 */
+      '?', /* U+F1D5 */
+      '?', /* U+F1D6 */
+      '?', /* U+F1D7 */
+      '?', /* U+F1D8 */
+      '?', /* U+F1D9 */
+      '?', /* U+F1DA */
+      '?', /* U+F1DB */
+      '?', /* U+F1DC */
+      '?', /* U+F1DD */
+      '?', /* U+F1DE */
+      '?', /* U+F1DF */
+      '?', /* U+F1E0 */
+      '?', /* U+F1E1 */
+      '?', /* U+F1E2 */
+      '?', /* U+F1E3 */
+      '?', /* U+F1E4 */
+      '?', /* U+F1E5 */
+      '?', /* U+F1E6 */
+      '?', /* U+F1E7 */
+      '?', /* U+F1E8 */
+      '?', /* U+F1E9 */
+      '?', /* U+F1EA */
+      '?', /* U+F1EB */
+      '?', /* U+F1EC */
+      '?', /* U+F1ED */
+      '?', /* U+F1EE */
+      '?', /* U+F1EF */
+      '?', /* U+F1F0 */
+      '?', /* U+F1F1 */
+      '?', /* U+F1F2 */
+      '?', /* U+F1F3 */
+      '?', /* U+F1F4 */
+      '?', /* U+F1F5 */
+      '?', /* U+F1F6 */
+      '?', /* U+F1F7 */
+      '?', /* U+F1F8 */
+      '?', /* U+F1F9 */
+      '?', /* U+F1FA */
+      '?', /* U+F1FB */
+      '?', /* U+F1FC */
+      '?', /* U+F1FD */
+      '?', /* U+F1FE */
+      '?', /* U+F1FF */
+      '?', /* U+F200 */
+      '?', /* U+F201 */
+      '?', /* U+F202 */
+      '?', /* U+F203 */
+      '?', /* U+F204 */
+      '?', /* U+F205 */
+      '?', /* U+F206 */
+      '?', /* U+F207 */
+      '?', /* U+F208 */
+      '?', /* U+F209 */
+      '?', /* U+F20A */
+      '?', /* U+F20B */
+      '?', /* U+F20C */
+      '?', /* U+F20D */
+      '?', /* U+F20E */
+      '?', /* U+F20F */
+      '?', /* U+F210 */
+      '?', /* U+F211 */
+      '?', /* U+F212 */
+      '?', /* U+F213 */
+      '?', /* U+F214 */
+      '?', /* U+F215 */
+      '?', /* U+F216 */
+      '?', /* U+F217 */
+      '?', /* U+F218 */
+      '?', /* U+F219 */
+      '?', /* U+F21A */
+      '?', /* U+F21B */
+      '?', /* U+F21C */
+      '?', /* U+F21D */
+      '?', /* U+F21E */
+      '?', /* U+F21F */
+      '?', /* U+F220 */
+      '?', /* U+F221 */
+      '?', /* U+F222 */
+      '?', /* U+F223 */
+      '?', /* U+F224 */
+      '?', /* U+F225 */
+      '?', /* U+F226 */
+      '?', /* U+F227 */
+      '?', /* U+F228 */
+      '?', /* U+F229 */
+      '?', /* U+F22A */
+      '?', /* U+F22B */
+      '?', /* U+F22C */
+      '?', /* U+F22D */
+      '?', /* U+F22E */
+      '?', /* U+F22F */
+      '?', /* U+F230 */
+      '?', /* U+F231 */
+      '?', /* U+F232 */
+      '?', /* U+F233 */
+      '?', /* U+F234 */
+      '?', /* U+F235 */
+      '?', /* U+F236 */
+      '?', /* U+F237 */
+      '?', /* U+F238 */
+      '?', /* U+F239 */
+      '?', /* U+F23A */
+      '?', /* U+F23B */
+      '?', /* U+F23C */
+      '?', /* U+F23D */
+      '?', /* U+F23E */
+      '?', /* U+F23F */
+      '?', /* U+F240 */
+      '?', /* U+F241 */
+      '?', /* U+F242 */
+      '?', /* U+F243 */
+      '?', /* U+F244 */
+      '?', /* U+F245 */
+      '?', /* U+F246 */
+      '?', /* U+F247 */
+      '?', /* U+F248 */
+      '?', /* U+F249 */
+      '?', /* U+F24A */
+      '?', /* U+F24B */
+      '?', /* U+F24C */
+      '?', /* U+F24D */
+      '?', /* U+F24E */
+      '?', /* U+F24F */
+      '?', /* U+F250 */
+      '?', /* U+F251 */
+      '?', /* U+F252 */
+      '?', /* U+F253 */
+      '?', /* U+F254 */
+      '?', /* U+F255 */
+      '?', /* U+F256 */
+      '?', /* U+F257 */
+      '?', /* U+F258 */
+      '?', /* U+F259 */
+      '?', /* U+F25A */
+      '?', /* U+F25B */
+      '?', /* U+F25C */
+      '?', /* U+F25D */
+      '?', /* U+F25E */
+      '?', /* U+F25F */
+      '?', /* U+F260 */
+      '?', /* U+F261 */
+      '?', /* U+F262 */
+      '?', /* U+F263 */
+      '?', /* U+F264 */
+      '?', /* U+F265 */
+      '?', /* U+F266 */
+      '?', /* U+F267 */
+      '?', /* U+F268 */
+      '?', /* U+F269 */
+      '?', /* U+F26A */
+      '?', /* U+F26B */
+      '?', /* U+F26C */
+      '?', /* U+F26D */
+      '?', /* U+F26E */
+      '?', /* U+F26F */
+      '?', /* U+F270 */
+      '?', /* U+F271 */
+      '?', /* U+F272 */
+      '?', /* U+F273 */
+      '?', /* U+F274 */
+      '?', /* U+F275 */
+      '?', /* U+F276 */
+      '?', /* U+F277 */
+      '?', /* U+F278 */
+      '?', /* U+F279 */
+      '?', /* U+F27A */
+      '?', /* U+F27B */
+      '?', /* U+F27C */
+      '?', /* U+F27D */
+      '?', /* U+F27E */
+      '?', /* U+F27F */
+      '?', /* U+F280 */
+      '?', /* U+F281 */
+      '?', /* U+F282 */
+      '?', /* U+F283 */
+      '?', /* U+F284 */
+      '?', /* U+F285 */
+      '?', /* U+F286 */
+      '?', /* U+F287 */
+      '?', /* U+F288 */
+      '?', /* U+F289 */
+      '?', /* U+F28A */
+      '?', /* U+F28B */
+      '?', /* U+F28C */
+      '?', /* U+F28D */
+      '?', /* U+F28E */
+      '?', /* U+F28F */
+      '?', /* U+F290 */
+      '?', /* U+F291 */
+      '?', /* U+F292 */
+      '?', /* U+F293 */
+      '?', /* U+F294 */
+      '?', /* U+F295 */
+      '?', /* U+F296 */
+      '?', /* U+F297 */
+      '?', /* U+F298 */
+      '?', /* U+F299 */
+      '?', /* U+F29A */
+      '?', /* U+F29B */
+      '?', /* U+F29C */
+      '?', /* U+F29D */
+      '?', /* U+F29E */
+      '?', /* U+F29F */
+      '?', /* U+F2A0 */
+      '?', /* U+F2A1 */
+      '?', /* U+F2A2 */
+      '?', /* U+F2A3 */
+      '?', /* U+F2A4 */
+      '?', /* U+F2A5 */
+      '?', /* U+F2A6 */
+      '?', /* U+F2A7 */
+      '?', /* U+F2A8 */
+      '?', /* U+F2A9 */
+      '?', /* U+F2AA */
+      '?', /* U+F2AB */
+      '?', /* U+F2AC */
+      '?', /* U+F2AD */
+      '?', /* U+F2AE */
+      '?', /* U+F2AF */
+      '?', /* U+F2B0 */
+      '?', /* U+F2B1 */
+      '?', /* U+F2B2 */
+      '?', /* U+F2B3 */
+      '?', /* U+F2B4 */
+      '?', /* U+F2B5 */
+      '?', /* U+F2B6 */
+      '?', /* U+F2B7 */
+      '?', /* U+F2B8 */
+      '?', /* U+F2B9 */
+      '?', /* U+F2BA */
+      '?', /* U+F2BB */
+      '?', /* U+F2BC */
+      '?', /* U+F2BD */
+      '?', /* U+F2BE */
+      '?', /* U+F2BF */
+      '?', /* U+F2C0 */
+      '?', /* U+F2C1 */
+      '?', /* U+F2C2 */
+      '?', /* U+F2C3 */
+      '?', /* U+F2C4 */
+      '?', /* U+F2C5 */
+      '?', /* U+F2C6 */
+      '?', /* U+F2C7 */
+      '?', /* U+F2C8 */
+      '?', /* U+F2C9 */
+      '?', /* U+F2CA */
+      '?', /* U+F2CB */
+      '?', /* U+F2CC */
+      '?', /* U+F2CD */
+      '?', /* U+F2CE */
+      '?', /* U+F2CF */
+      '?', /* U+F2D0 */
+      '?', /* U+F2D1 */
+      '?', /* U+F2D2 */
+      '?', /* U+F2D3 */
+      '?', /* U+F2D4 */
+      '?', /* U+F2D5 */
+      '?', /* U+F2D6 */
+      '?', /* U+F2D7 */
+      '?', /* U+F2D8 */
+      '?', /* U+F2D9 */
+      '?', /* U+F2DA */
+      '?', /* U+F2DB */
+      '?', /* U+F2DC */
+      '?', /* U+F2DD */
+      '?', /* U+F2DE */
+      '?', /* U+F2DF */
+      '?', /* U+F2E0 */
+      '?', /* U+F2E1 */
+      '?', /* U+F2E2 */
+      '?', /* U+F2E3 */
+      '?', /* U+F2E4 */
+      '?', /* U+F2E5 */
+      '?', /* U+F2E6 */
+      '?', /* U+F2E7 */
+      '?', /* U+F2E8 */
+      '?', /* U+F2E9 */
+      '?', /* U+F2EA */
+      '?', /* U+F2EB */
+      '?', /* U+F2EC */
+      '?', /* U+F2ED */
+      '?', /* U+F2EE */
+      '?', /* U+F2EF */
+      '?', /* U+F2F0 */
+      '?', /* U+F2F1 */
+      '?', /* U+F2F2 */
+      '?', /* U+F2F3 */
+      '?', /* U+F2F4 */
+      '?', /* U+F2F5 */
+      '?', /* U+F2F6 */
+      '?', /* U+F2F7 */
+      '?', /* U+F2F8 */
+      '?', /* U+F2F9 */
+      '?', /* U+F2FA */
+      '?', /* U+F2FB */
+      '?', /* U+F2FC */
+      '?', /* U+F2FD */
+      '?', /* U+F2FE */
+      '?', /* U+F2FF */
+      '?', /* U+F300 */
+      '?', /* U+F301 */
+      '?', /* U+F302 */
+      '?', /* U+F303 */
+      '?', /* U+F304 */
+      '?', /* U+F305 */
+      '?', /* U+F306 */
+      '?', /* U+F307 */
+      '?', /* U+F308 */
+      '?', /* U+F309 */
+      '?', /* U+F30A */
+      '?', /* U+F30B */
+      '?', /* U+F30C */
+      '?', /* U+F30D */
+      '?', /* U+F30E */
+      '?', /* U+F30F */
+      '?', /* U+F310 */
+      '?', /* U+F311 */
+      '?', /* U+F312 */
+      '?', /* U+F313 */
+      '?', /* U+F314 */
+      '?', /* U+F315 */
+      '?', /* U+F316 */
+      '?', /* U+F317 */
+      '?', /* U+F318 */
+      '?', /* U+F319 */
+      '?', /* U+F31A */
+      '?', /* U+F31B */
+      '?', /* U+F31C */
+      '?', /* U+F31D */
+      '?', /* U+F31E */
+      '?', /* U+F31F */
+      '?', /* U+F320 */
+      '?', /* U+F321 */
+      '?', /* U+F322 */
+      '?', /* U+F323 */
+      '?', /* U+F324 */
+      '?', /* U+F325 */
+      '?', /* U+F326 */
+      '?', /* U+F327 */
+      '?', /* U+F328 */
+      '?', /* U+F329 */
+      '?', /* U+F32A */
+      '?', /* U+F32B */
+      '?', /* U+F32C */
+      '?', /* U+F32D */
+      '?', /* U+F32E */
+      '?', /* U+F32F */
+      '?', /* U+F330 */
+      '?', /* U+F331 */
+      '?', /* U+F332 */
+      '?', /* U+F333 */
+      '?', /* U+F334 */
+      '?', /* U+F335 */
+      '?', /* U+F336 */
+      '?', /* U+F337 */
+      '?', /* U+F338 */
+      '?', /* U+F339 */
+      '?', /* U+F33A */
+      '?', /* U+F33B */
+      '?', /* U+F33C */
+      '?', /* U+F33D */
+      '?', /* U+F33E */
+      '?', /* U+F33F */
+      '?', /* U+F340 */
+      '?', /* U+F341 */
+      '?', /* U+F342 */
+      '?', /* U+F343 */
+      '?', /* U+F344 */
+      '?', /* U+F345 */
+      '?', /* U+F346 */
+      '?', /* U+F347 */
+      '?', /* U+F348 */
+      '?', /* U+F349 */
+      '?', /* U+F34A */
+      '?', /* U+F34B */
+      '?', /* U+F34C */
+      '?', /* U+F34D */
+      '?', /* U+F34E */
+      '?', /* U+F34F */
+      '?', /* U+F350 */
+      '?', /* U+F351 */
+      '?', /* U+F352 */
+      '?', /* U+F353 */
+      '?', /* U+F354 */
+      '?', /* U+F355 */
+      '?', /* U+F356 */
+      '?', /* U+F357 */
+      '?', /* U+F358 */
+      '?', /* U+F359 */
+      '?', /* U+F35A */
+      '?', /* U+F35B */
+      '?', /* U+F35C */
+      '?', /* U+F35D */
+      '?', /* U+F35E */
+      '?', /* U+F35F */
+      '?', /* U+F360 */
+      '?', /* U+F361 */
+      '?', /* U+F362 */
+      '?', /* U+F363 */
+      '?', /* U+F364 */
+      '?', /* U+F365 */
+      '?', /* U+F366 */
+      '?', /* U+F367 */
+      '?', /* U+F368 */
+      '?', /* U+F369 */
+      '?', /* U+F36A */
+      '?', /* U+F36B */
+      '?', /* U+F36C */
+      '?', /* U+F36D */
+      '?', /* U+F36E */
+      '?', /* U+F36F */
+      '?', /* U+F370 */
+      '?', /* U+F371 */
+      '?', /* U+F372 */
+      '?', /* U+F373 */
+      '?', /* U+F374 */
+      '?', /* U+F375 */
+      '?', /* U+F376 */
+      '?', /* U+F377 */
+      '?', /* U+F378 */
+      '?', /* U+F379 */
+      '?', /* U+F37A */
+      '?', /* U+F37B */
+      '?', /* U+F37C */
+      '?', /* U+F37D */
+      '?', /* U+F37E */
+      '?', /* U+F37F */
+      '?', /* U+F380 */
+      '?', /* U+F381 */
+      '?', /* U+F382 */
+      '?', /* U+F383 */
+      '?', /* U+F384 */
+      '?', /* U+F385 */
+      '?', /* U+F386 */
+      '?', /* U+F387 */
+      '?', /* U+F388 */
+      '?', /* U+F389 */
+      '?', /* U+F38A */
+      '?', /* U+F38B */
+      '?', /* U+F38C */
+      '?', /* U+F38D */
+      '?', /* U+F38E */
+      '?', /* U+F38F */
+      '?', /* U+F390 */
+      '?', /* U+F391 */
+      '?', /* U+F392 */
+      '?', /* U+F393 */
+      '?', /* U+F394 */
+      '?', /* U+F395 */
+      '?', /* U+F396 */
+      '?', /* U+F397 */
+      '?', /* U+F398 */
+      '?', /* U+F399 */
+      '?', /* U+F39A */
+      '?', /* U+F39B */
+      '?', /* U+F39C */
+      '?', /* U+F39D */
+      '?', /* U+F39E */
+      '?', /* U+F39F */
+      '?', /* U+F3A0 */
+      '?', /* U+F3A1 */
+      '?', /* U+F3A2 */
+      '?', /* U+F3A3 */
+      '?', /* U+F3A4 */
+      '?', /* U+F3A5 */
+      '?', /* U+F3A6 */
+      '?', /* U+F3A7 */
+      '?', /* U+F3A8 */
+      '?', /* U+F3A9 */
+      '?', /* U+F3AA */
+      '?', /* U+F3AB */
+      '?', /* U+F3AC */
+      '?', /* U+F3AD */
+      '?', /* U+F3AE */
+      '?', /* U+F3AF */
+      '?', /* U+F3B0 */
+      '?', /* U+F3B1 */
+      '?', /* U+F3B2 */
+      '?', /* U+F3B3 */
+      '?', /* U+F3B4 */
+      '?', /* U+F3B5 */
+      '?', /* U+F3B6 */
+      '?', /* U+F3B7 */
+      '?', /* U+F3B8 */
+      '?', /* U+F3B9 */
+      '?', /* U+F3BA */
+      '?', /* U+F3BB */
+      '?', /* U+F3BC */
+      '?', /* U+F3BD */
+      '?', /* U+F3BE */
+      '?', /* U+F3BF */
+      '?', /* U+F3C0 */
+      '?', /* U+F3C1 */
+      '?', /* U+F3C2 */
+      '?', /* U+F3C3 */
+      '?', /* U+F3C4 */
+      '?', /* U+F3C5 */
+      '?', /* U+F3C6 */
+      '?', /* U+F3C7 */
+      '?', /* U+F3C8 */
+      '?', /* U+F3C9 */
+      '?', /* U+F3CA */
+      '?', /* U+F3CB */
+      '?', /* U+F3CC */
+      '?', /* U+F3CD */
+      '?', /* U+F3CE */
+      '?', /* U+F3CF */
+      '?', /* U+F3D0 */
+      '?', /* U+F3D1 */
+      '?', /* U+F3D2 */
+      '?', /* U+F3D3 */
+      '?', /* U+F3D4 */
+      '?', /* U+F3D5 */
+      '?', /* U+F3D6 */
+      '?', /* U+F3D7 */
+      '?', /* U+F3D8 */
+      '?', /* U+F3D9 */
+      '?', /* U+F3DA */
+      '?', /* U+F3DB */
+      '?', /* U+F3DC */
+      '?', /* U+F3DD */
+      '?', /* U+F3DE */
+      '?', /* U+F3DF */
+      '?', /* U+F3E0 */
+      '?', /* U+F3E1 */
+      '?', /* U+F3E2 */
+      '?', /* U+F3E3 */
+      '?', /* U+F3E4 */
+      '?', /* U+F3E5 */
+      '?', /* U+F3E6 */
+      '?', /* U+F3E7 */
+      '?', /* U+F3E8 */
+      '?', /* U+F3E9 */
+      '?', /* U+F3EA */
+      '?', /* U+F3EB */
+      '?', /* U+F3EC */
+      '?', /* U+F3ED */
+      '?', /* U+F3EE */
+      '?', /* U+F3EF */
+      '?', /* U+F3F0 */
+      '?', /* U+F3F1 */
+      '?', /* U+F3F2 */
+      '?', /* U+F3F3 */
+      '?', /* U+F3F4 */
+      '?', /* U+F3F5 */
+      '?', /* U+F3F6 */
+      '?', /* U+F3F7 */
+      '?', /* U+F3F8 */
+      '?', /* U+F3F9 */
+      '?', /* U+F3FA */
+      '?', /* U+F3FB */
+      '?', /* U+F3FC */
+      '?', /* U+F3FD */
+      '?', /* U+F3FE */
+      '?', /* U+F3FF */
+      '?', /* U+F400 */
+      '?', /* U+F401 */
+      '?', /* U+F402 */
+      '?', /* U+F403 */
+      '?', /* U+F404 */
+      '?', /* U+F405 */
+      '?', /* U+F406 */
+      '?', /* U+F407 */
+      '?', /* U+F408 */
+      '?', /* U+F409 */
+      '?', /* U+F40A */
+      '?', /* U+F40B */
+      '?', /* U+F40C */
+      '?', /* U+F40D */
+      '?', /* U+F40E */
+      '?', /* U+F40F */
+      '?', /* U+F410 */
+      '?', /* U+F411 */
+      '?', /* U+F412 */
+      '?', /* U+F413 */
+      '?', /* U+F414 */
+      '?', /* U+F415 */
+      '?', /* U+F416 */
+      '?', /* U+F417 */
+      '?', /* U+F418 */
+      '?', /* U+F419 */
+      '?', /* U+F41A */
+      '?', /* U+F41B */
+      '?', /* U+F41C */
+      '?', /* U+F41D */
+      '?', /* U+F41E */
+      '?', /* U+F41F */
+      '?', /* U+F420 */
+      '?', /* U+F421 */
+      '?', /* U+F422 */
+      '?', /* U+F423 */
+      '?', /* U+F424 */
+      '?', /* U+F425 */
+      '?', /* U+F426 */
+      '?', /* U+F427 */
+      '?', /* U+F428 */
+      '?', /* U+F429 */
+      '?', /* U+F42A */
+      '?', /* U+F42B */
+      '?', /* U+F42C */
+      '?', /* U+F42D */
+      '?', /* U+F42E */
+      '?', /* U+F42F */
+      '?', /* U+F430 */
+      '?', /* U+F431 */
+      '?', /* U+F432 */
+      '?', /* U+F433 */
+      '?', /* U+F434 */
+      '?', /* U+F435 */
+      '?', /* U+F436 */
+      '?', /* U+F437 */
+      '?', /* U+F438 */
+      '?', /* U+F439 */
+      '?', /* U+F43A */
+      '?', /* U+F43B */
+      '?', /* U+F43C */
+      '?', /* U+F43D */
+      '?', /* U+F43E */
+      '?', /* U+F43F */
+      '?', /* U+F440 */
+      '?', /* U+F441 */
+      '?', /* U+F442 */
+      '?', /* U+F443 */
+      '?', /* U+F444 */
+      '?', /* U+F445 */
+      '?', /* U+F446 */
+      '?', /* U+F447 */
+      '?', /* U+F448 */
+      '?', /* U+F449 */
+      '?', /* U+F44A */
+      '?', /* U+F44B */
+      '?', /* U+F44C */
+      '?', /* U+F44D */
+      '?', /* U+F44E */
+      '?', /* U+F44F */
+      '?', /* U+F450 */
+      '?', /* U+F451 */
+      '?', /* U+F452 */
+      '?', /* U+F453 */
+      '?', /* U+F454 */
+      '?', /* U+F455 */
+      '?', /* U+F456 */
+      '?', /* U+F457 */
+      '?', /* U+F458 */
+      '?', /* U+F459 */
+      '?', /* U+F45A */
+      '?', /* U+F45B */
+      '?', /* U+F45C */
+      '?', /* U+F45D */
+      '?', /* U+F45E */
+      '?', /* U+F45F */
+      '?', /* U+F460 */
+      '?', /* U+F461 */
+      '?', /* U+F462 */
+      '?', /* U+F463 */
+      '?', /* U+F464 */
+      '?', /* U+F465 */
+      '?', /* U+F466 */
+      '?', /* U+F467 */
+      '?', /* U+F468 */
+      '?', /* U+F469 */
+      '?', /* U+F46A */
+      '?', /* U+F46B */
+      '?', /* U+F46C */
+      '?', /* U+F46D */
+      '?', /* U+F46E */
+      '?', /* U+F46F */
+      '?', /* U+F470 */
+      '?', /* U+F471 */
+      '?', /* U+F472 */
+      '?', /* U+F473 */
+      '?', /* U+F474 */
+      '?', /* U+F475 */
+      '?', /* U+F476 */
+      '?', /* U+F477 */
+      '?', /* U+F478 */
+      '?', /* U+F479 */
+      '?', /* U+F47A */
+      '?', /* U+F47B */
+      '?', /* U+F47C */
+      '?', /* U+F47D */
+      '?', /* U+F47E */
+      '?', /* U+F47F */
+      '?', /* U+F480 */
+      '?', /* U+F481 */
+      '?', /* U+F482 */
+      '?', /* U+F483 */
+      '?', /* U+F484 */
+      '?', /* U+F485 */
+      '?', /* U+F486 */
+      '?', /* U+F487 */
+      '?', /* U+F488 */
+      '?', /* U+F489 */
+      '?', /* U+F48A */
+      '?', /* U+F48B */
+      '?', /* U+F48C */
+      '?', /* U+F48D */
+      '?', /* U+F48E */
+      '?', /* U+F48F */
+      '?', /* U+F490 */
+      '?', /* U+F491 */
+      '?', /* U+F492 */
+      '?', /* U+F493 */
+      '?', /* U+F494 */
+      '?', /* U+F495 */
+      '?', /* U+F496 */
+      '?', /* U+F497 */
+      '?', /* U+F498 */
+      '?', /* U+F499 */
+      '?', /* U+F49A */
+      '?', /* U+F49B */
+      '?', /* U+F49C */
+      '?', /* U+F49D */
+      '?', /* U+F49E */
+      '?', /* U+F49F */
+      '?', /* U+F4A0 */
+      '?', /* U+F4A1 */
+      '?', /* U+F4A2 */
+      '?', /* U+F4A3 */
+      '?', /* U+F4A4 */
+      '?', /* U+F4A5 */
+      '?', /* U+F4A6 */
+      '?', /* U+F4A7 */
+      '?', /* U+F4A8 */
+      '?', /* U+F4A9 */
+      '?', /* U+F4AA */
+      '?', /* U+F4AB */
+      '?', /* U+F4AC */
+      '?', /* U+F4AD */
+      '?', /* U+F4AE */
+      '?', /* U+F4AF */
+      '?', /* U+F4B0 */
+      '?', /* U+F4B1 */
+      '?', /* U+F4B2 */
+      '?', /* U+F4B3 */
+      '?', /* U+F4B4 */
+      '?', /* U+F4B5 */
+      '?', /* U+F4B6 */
+      '?', /* U+F4B7 */
+      '?', /* U+F4B8 */
+      '?', /* U+F4B9 */
+      '?', /* U+F4BA */
+      '?', /* U+F4BB */
+      '?', /* U+F4BC */
+      '?', /* U+F4BD */
+      '?', /* U+F4BE */
+      '?', /* U+F4BF */
+      '?', /* U+F4C0 */
+      '?', /* U+F4C1 */
+      '?', /* U+F4C2 */
+      '?', /* U+F4C3 */
+      '?', /* U+F4C4 */
+      '?', /* U+F4C5 */
+      '?', /* U+F4C6 */
+      '?', /* U+F4C7 */
+      '?', /* U+F4C8 */
+      '?', /* U+F4C9 */
+      '?', /* U+F4CA */
+      '?', /* U+F4CB */
+      '?', /* U+F4CC */
+      '?', /* U+F4CD */
+      '?', /* U+F4CE */
+      '?', /* U+F4CF */
+      '?', /* U+F4D0 */
+      '?', /* U+F4D1 */
+      '?', /* U+F4D2 */
+      '?', /* U+F4D3 */
+      '?', /* U+F4D4 */
+      '?', /* U+F4D5 */
+      '?', /* U+F4D6 */
+      '?', /* U+F4D7 */
+      '?', /* U+F4D8 */
+      '?', /* U+F4D9 */
+      '?', /* U+F4DA */
+      '?', /* U+F4DB */
+      '?', /* U+F4DC */
+      '?', /* U+F4DD */
+      '?', /* U+F4DE */
+      '?', /* U+F4DF */
+      '?', /* U+F4E0 */
+      '?', /* U+F4E1 */
+      '?', /* U+F4E2 */
+      '?', /* U+F4E3 */
+      '?', /* U+F4E4 */
+      '?', /* U+F4E5 */
+      '?', /* U+F4E6 */
+      '?', /* U+F4E7 */
+      '?', /* U+F4E8 */
+      '?', /* U+F4E9 */
+      '?', /* U+F4EA */
+      '?', /* U+F4EB */
+      '?', /* U+F4EC */
+      '?', /* U+F4ED */
+      '?', /* U+F4EE */
+      '?', /* U+F4EF */
+      '?', /* U+F4F0 */
+      '?', /* U+F4F1 */
+      '?', /* U+F4F2 */
+      '?', /* U+F4F3 */
+      '?', /* U+F4F4 */
+      '?', /* U+F4F5 */
+      '?', /* U+F4F6 */
+      '?', /* U+F4F7 */
+      '?', /* U+F4F8 */
+      '?', /* U+F4F9 */
+      '?', /* U+F4FA */
+      '?', /* U+F4FB */
+      '?', /* U+F4FC */
+      '?', /* U+F4FD */
+      '?', /* U+F4FE */
+      '?', /* U+F4FF */
+      '?', /* U+F500 */
+      '?', /* U+F501 */
+      '?', /* U+F502 */
+      '?', /* U+F503 */
+      '?', /* U+F504 */
+      '?', /* U+F505 */
+      '?', /* U+F506 */
+      '?', /* U+F507 */
+      '?', /* U+F508 */
+      '?', /* U+F509 */
+      '?', /* U+F50A */
+      '?', /* U+F50B */
+      '?', /* U+F50C */
+      '?', /* U+F50D */
+      '?', /* U+F50E */
+      '?', /* U+F50F */
+      '?', /* U+F510 */
+      '?', /* U+F511 */
+      '?', /* U+F512 */
+      '?', /* U+F513 */
+      '?', /* U+F514 */
+      '?', /* U+F515 */
+      '?', /* U+F516 */
+      '?', /* U+F517 */
+      '?', /* U+F518 */
+      '?', /* U+F519 */
+      '?', /* U+F51A */
+      '?', /* U+F51B */
+      '?', /* U+F51C */
+      '?', /* U+F51D */
+      '?', /* U+F51E */
+      '?', /* U+F51F */
+      '?', /* U+F520 */
+      '?', /* U+F521 */
+      '?', /* U+F522 */
+      '?', /* U+F523 */
+      '?', /* U+F524 */
+      '?', /* U+F525 */
+      '?', /* U+F526 */
+      '?', /* U+F527 */
+      '?', /* U+F528 */
+      '?', /* U+F529 */
+      '?', /* U+F52A */
+      '?', /* U+F52B */
+      '?', /* U+F52C */
+      '?', /* U+F52D */
+      '?', /* U+F52E */
+      '?', /* U+F52F */
+      '?', /* U+F530 */
+      '?', /* U+F531 */
+      '?', /* U+F532 */
+      '?', /* U+F533 */
+      '?', /* U+F534 */
+      '?', /* U+F535 */
+      '?', /* U+F536 */
+      '?', /* U+F537 */
+      '?', /* U+F538 */
+      '?', /* U+F539 */
+      '?', /* U+F53A */
+      '?', /* U+F53B */
+      '?', /* U+F53C */
+      '?', /* U+F53D */
+      '?', /* U+F53E */
+      '?', /* U+F53F */
+      '?', /* U+F540 */
+      '?', /* U+F541 */
+      '?', /* U+F542 */
+      '?', /* U+F543 */
+      '?', /* U+F544 */
+      '?', /* U+F545 */
+      '?', /* U+F546 */
+      '?', /* U+F547 */
+      '?', /* U+F548 */
+      '?', /* U+F549 */
+      '?', /* U+F54A */
+      '?', /* U+F54B */
+      '?', /* U+F54C */
+      '?', /* U+F54D */
+      '?', /* U+F54E */
+      '?', /* U+F54F */
+      '?', /* U+F550 */
+      '?', /* U+F551 */
+      '?', /* U+F552 */
+      '?', /* U+F553 */
+      '?', /* U+F554 */
+      '?', /* U+F555 */
+      '?', /* U+F556 */
+      '?', /* U+F557 */
+      '?', /* U+F558 */
+      '?', /* U+F559 */
+      '?', /* U+F55A */
+      '?', /* U+F55B */
+      '?', /* U+F55C */
+      '?', /* U+F55D */
+      '?', /* U+F55E */
+      '?', /* U+F55F */
+      '?', /* U+F560 */
+      '?', /* U+F561 */
+      '?', /* U+F562 */
+      '?', /* U+F563 */
+      '?', /* U+F564 */
+      '?', /* U+F565 */
+      '?', /* U+F566 */
+      '?', /* U+F567 */
+      '?', /* U+F568 */
+      '?', /* U+F569 */
+      '?', /* U+F56A */
+      '?', /* U+F56B */
+      '?', /* U+F56C */
+      '?', /* U+F56D */
+      '?', /* U+F56E */
+      '?', /* U+F56F */
+      '?', /* U+F570 */
+      '?', /* U+F571 */
+      '?', /* U+F572 */
+      '?', /* U+F573 */
+      '?', /* U+F574 */
+      '?', /* U+F575 */
+      '?', /* U+F576 */
+      '?', /* U+F577 */
+      '?', /* U+F578 */
+      '?', /* U+F579 */
+      '?', /* U+F57A */
+      '?', /* U+F57B */
+      '?', /* U+F57C */
+      '?', /* U+F57D */
+      '?', /* U+F57E */
+      '?', /* U+F57F */
+      '?', /* U+F580 */
+      '?', /* U+F581 */
+      '?', /* U+F582 */
+      '?', /* U+F583 */
+      '?', /* U+F584 */
+      '?', /* U+F585 */
+      '?', /* U+F586 */
+      '?', /* U+F587 */
+      '?', /* U+F588 */
+      '?', /* U+F589 */
+      '?', /* U+F58A */
+      '?', /* U+F58B */
+      '?', /* U+F58C */
+      '?', /* U+F58D */
+      '?', /* U+F58E */
+      '?', /* U+F58F */
+      '?', /* U+F590 */
+      '?', /* U+F591 */
+      '?', /* U+F592 */
+      '?', /* U+F593 */
+      '?', /* U+F594 */
+      '?', /* U+F595 */
+      '?', /* U+F596 */
+      '?', /* U+F597 */
+      '?', /* U+F598 */
+      '?', /* U+F599 */
+      '?', /* U+F59A */
+      '?', /* U+F59B */
+      '?', /* U+F59C */
+      '?', /* U+F59D */
+      '?', /* U+F59E */
+      '?', /* U+F59F */
+      '?', /* U+F5A0 */
+      '?', /* U+F5A1 */
+      '?', /* U+F5A2 */
+      '?', /* U+F5A3 */
+      '?', /* U+F5A4 */
+      '?', /* U+F5A5 */
+      '?', /* U+F5A6 */
+      '?', /* U+F5A7 */
+      '?', /* U+F5A8 */
+      '?', /* U+F5A9 */
+      '?', /* U+F5AA */
+      '?', /* U+F5AB */
+      '?', /* U+F5AC */
+      '?', /* U+F5AD */
+      '?', /* U+F5AE */
+      '?', /* U+F5AF */
+      '?', /* U+F5B0 */
+      '?', /* U+F5B1 */
+      '?', /* U+F5B2 */
+      '?', /* U+F5B3 */
+      '?', /* U+F5B4 */
+      '?', /* U+F5B5 */
+      '?', /* U+F5B6 */
+      '?', /* U+F5B7 */
+      '?', /* U+F5B8 */
+      '?', /* U+F5B9 */
+      '?', /* U+F5BA */
+      '?', /* U+F5BB */
+      '?', /* U+F5BC */
+      '?', /* U+F5BD */
+      '?', /* U+F5BE */
+      '?', /* U+F5BF */
+      '?', /* U+F5C0 */
+      '?', /* U+F5C1 */
+      '?', /* U+F5C2 */
+      '?', /* U+F5C3 */
+      '?', /* U+F5C4 */
+      '?', /* U+F5C5 */
+      '?', /* U+F5C6 */
+      '?', /* U+F5C7 */
+      '?', /* U+F5C8 */
+      '?', /* U+F5C9 */
+      '?', /* U+F5CA */
+      '?', /* U+F5CB */
+      '?', /* U+F5CC */
+      '?', /* U+F5CD */
+      '?', /* U+F5CE */
+      '?', /* U+F5CF */
+      '?', /* U+F5D0 */
+      '?', /* U+F5D1 */
+      '?', /* U+F5D2 */
+      '?', /* U+F5D3 */
+      '?', /* U+F5D4 */
+      '?', /* U+F5D5 */
+      '?', /* U+F5D6 */
+      '?', /* U+F5D7 */
+      '?', /* U+F5D8 */
+      '?', /* U+F5D9 */
+      '?', /* U+F5DA */
+      '?', /* U+F5DB */
+      '?', /* U+F5DC */
+      '?', /* U+F5DD */
+      '?', /* U+F5DE */
+      '?', /* U+F5DF */
+      '?', /* U+F5E0 */
+      '?', /* U+F5E1 */
+      '?', /* U+F5E2 */
+      '?', /* U+F5E3 */
+      '?', /* U+F5E4 */
+      '?', /* U+F5E5 */
+      '?', /* U+F5E6 */
+      '?', /* U+F5E7 */
+      '?', /* U+F5E8 */
+      '?', /* U+F5E9 */
+      '?', /* U+F5EA */
+      '?', /* U+F5EB */
+      '?', /* U+F5EC */
+      '?', /* U+F5ED */
+      '?', /* U+F5EE */
+      '?', /* U+F5EF */
+      '?', /* U+F5F0 */
+      '?', /* U+F5F1 */
+      '?', /* U+F5F2 */
+      '?', /* U+F5F3 */
+      '?', /* U+F5F4 */
+      '?', /* U+F5F5 */
+      '?', /* U+F5F6 */
+      '?', /* U+F5F7 */
+      '?', /* U+F5F8 */
+      '?', /* U+F5F9 */
+      '?', /* U+F5FA */
+      '?', /* U+F5FB */
+      '?', /* U+F5FC */
+      '?', /* U+F5FD */
+      '?', /* U+F5FE */
+      '?', /* U+F5FF */
+      '?', /* U+F600 */
+      '?', /* U+F601 */
+      '?', /* U+F602 */
+      '?', /* U+F603 */
+      '?', /* U+F604 */
+      '?', /* U+F605 */
+      '?', /* U+F606 */
+      '?', /* U+F607 */
+      '?', /* U+F608 */
+      '?', /* U+F609 */
+      '?', /* U+F60A */
+      '?', /* U+F60B */
+      '?', /* U+F60C */
+      '?', /* U+F60D */
+      '?', /* U+F60E */
+      '?', /* U+F60F */
+      '?', /* U+F610 */
+      '?', /* U+F611 */
+      '?', /* U+F612 */
+      '?', /* U+F613 */
+      '?', /* U+F614 */
+      '?', /* U+F615 */
+      '?', /* U+F616 */
+      '?', /* U+F617 */
+      '?', /* U+F618 */
+      '?', /* U+F619 */
+      '?', /* U+F61A */
+      '?', /* U+F61B */
+      '?', /* U+F61C */
+      '?', /* U+F61D */
+      '?', /* U+F61E */
+      '?', /* U+F61F */
+      '?', /* U+F620 */
+      '?', /* U+F621 */
+      '?', /* U+F622 */
+      '?', /* U+F623 */
+      '?', /* U+F624 */
+      '?', /* U+F625 */
+      '?', /* U+F626 */
+      '?', /* U+F627 */
+      '?', /* U+F628 */
+      '?', /* U+F629 */
+      '?', /* U+F62A */
+      '?', /* U+F62B */
+      '?', /* U+F62C */
+      '?', /* U+F62D */
+      '?', /* U+F62E */
+      '?', /* U+F62F */
+      '?', /* U+F630 */
+      '?', /* U+F631 */
+      '?', /* U+F632 */
+      '?', /* U+F633 */
+      '?', /* U+F634 */
+      '?', /* U+F635 */
+      '?', /* U+F636 */
+      '?', /* U+F637 */
+      '?', /* U+F638 */
+      '?', /* U+F639 */
+      '?', /* U+F63A */
+      '?', /* U+F63B */
+      '?', /* U+F63C */
+      '?', /* U+F63D */
+      '?', /* U+F63E */
+      '?', /* U+F63F */
+      '?', /* U+F640 */
+      '?', /* U+F641 */
+      '?', /* U+F642 */
+      '?', /* U+F643 */
+      '?', /* U+F644 */
+      '?', /* U+F645 */
+      '?', /* U+F646 */
+      '?', /* U+F647 */
+      '?', /* U+F648 */
+      '?', /* U+F649 */
+      '?', /* U+F64A */
+      '?', /* U+F64B */
+      '?', /* U+F64C */
+      '?', /* U+F64D */
+      '?', /* U+F64E */
+      '?', /* U+F64F */
+      '?', /* U+F650 */
+      '?', /* U+F651 */
+      '?', /* U+F652 */
+      '?', /* U+F653 */
+      '?', /* U+F654 */
+      '?', /* U+F655 */
+      '?', /* U+F656 */
+      '?', /* U+F657 */
+      '?', /* U+F658 */
+      '?', /* U+F659 */
+      '?', /* U+F65A */
+      '?', /* U+F65B */
+      '?', /* U+F65C */
+      '?', /* U+F65D */
+      '?', /* U+F65E */
+      '?', /* U+F65F */
+      '?', /* U+F660 */
+      '?', /* U+F661 */
+      '?', /* U+F662 */
+      '?', /* U+F663 */
+      '?', /* U+F664 */
+      '?', /* U+F665 */
+      '?', /* U+F666 */
+      '?', /* U+F667 */
+      '?', /* U+F668 */
+      '?', /* U+F669 */
+      '?', /* U+F66A */
+      '?', /* U+F66B */
+      '?', /* U+F66C */
+      '?', /* U+F66D */
+      '?', /* U+F66E */
+      '?', /* U+F66F */
+      '?', /* U+F670 */
+      '?', /* U+F671 */
+      '?', /* U+F672 */
+      '?', /* U+F673 */
+      '?', /* U+F674 */
+      '?', /* U+F675 */
+      '?', /* U+F676 */
+      '?', /* U+F677 */
+      '?', /* U+F678 */
+      '?', /* U+F679 */
+      '?', /* U+F67A */
+      '?', /* U+F67B */
+      '?', /* U+F67C */
+      '?', /* U+F67D */
+      '?', /* U+F67E */
+      '?', /* U+F67F */
+      '?', /* U+F680 */
+      '?', /* U+F681 */
+      '?', /* U+F682 */
+      '?', /* U+F683 */
+      '?', /* U+F684 */
+      '?', /* U+F685 */
+      '?', /* U+F686 */
+      '?', /* U+F687 */
+      '?', /* U+F688 */
+      '?', /* U+F689 */
+      '?', /* U+F68A */
+      '?', /* U+F68B */
+      '?', /* U+F68C */
+      '?', /* U+F68D */
+      '?', /* U+F68E */
+      '?', /* U+F68F */
+      '?', /* U+F690 */
+      '?', /* U+F691 */
+      '?', /* U+F692 */
+      '?', /* U+F693 */
+      '?', /* U+F694 */
+      '?', /* U+F695 */
+      '?', /* U+F696 */
+      '?', /* U+F697 */
+      '?', /* U+F698 */
+      '?', /* U+F699 */
+      '?', /* U+F69A */
+      '?', /* U+F69B */
+      '?', /* U+F69C */
+      '?', /* U+F69D */
+      '?', /* U+F69E */
+      '?', /* U+F69F */
+      '?', /* U+F6A0 */
+      '?', /* U+F6A1 */
+      '?', /* U+F6A2 */
+      '?', /* U+F6A3 */
+      '?', /* U+F6A4 */
+      '?', /* U+F6A5 */
+      '?', /* U+F6A6 */
+      '?', /* U+F6A7 */
+      '?', /* U+F6A8 */
+      '?', /* U+F6A9 */
+      '?', /* U+F6AA */
+      '?', /* U+F6AB */
+      '?', /* U+F6AC */
+      '?', /* U+F6AD */
+      '?', /* U+F6AE */
+      '?', /* U+F6AF */
+      '?', /* U+F6B0 */
+      '?', /* U+F6B1 */
+      '?', /* U+F6B2 */
+      '?', /* U+F6B3 */
+      '?', /* U+F6B4 */
+      '?', /* U+F6B5 */
+      '?', /* U+F6B6 */
+      '?', /* U+F6B7 */
+      '?', /* U+F6B8 */
+      '?', /* U+F6B9 */
+      '?', /* U+F6BA */
+      '?', /* U+F6BB */
+      '?', /* U+F6BC */
+      '?', /* U+F6BD */
+      '?', /* U+F6BE */
+      '?', /* U+F6BF */
+      '?', /* U+F6C0 */
+      '?', /* U+F6C1 */
+      '?', /* U+F6C2 */
+      '?', /* U+F6C3 */
+      '?', /* U+F6C4 */
+      '?', /* U+F6C5 */
+      '?', /* U+F6C6 */
+      '?', /* U+F6C7 */
+      '?', /* U+F6C8 */
+      '?', /* U+F6C9 */
+      '?', /* U+F6CA */
+      '?', /* U+F6CB */
+      '?', /* U+F6CC */
+      '?', /* U+F6CD */
+      '?', /* U+F6CE */
+      '?', /* U+F6CF */
+      '?', /* U+F6D0 */
+      '?', /* U+F6D1 */
+      '?', /* U+F6D2 */
+      '?', /* U+F6D3 */
+      '?', /* U+F6D4 */
+      '?', /* U+F6D5 */
+      '?', /* U+F6D6 */
+      '?', /* U+F6D7 */
+      '?', /* U+F6D8 */
+      '?', /* U+F6D9 */
+      '?', /* U+F6DA */
+      '?', /* U+F6DB */
+      '?', /* U+F6DC */
+      '?', /* U+F6DD */
+      '?', /* U+F6DE */
+      '?', /* U+F6DF */
+      '?', /* U+F6E0 */
+      '?', /* U+F6E1 */
+      '?', /* U+F6E2 */
+      '?', /* U+F6E3 */
+      '?', /* U+F6E4 */
+      '?', /* U+F6E5 */
+      '?', /* U+F6E6 */
+      '?', /* U+F6E7 */
+      '?', /* U+F6E8 */
+      '?', /* U+F6E9 */
+      '?', /* U+F6EA */
+      '?', /* U+F6EB */
+      '?', /* U+F6EC */
+      '?', /* U+F6ED */
+      '?', /* U+F6EE */
+      '?', /* U+F6EF */
+      '?', /* U+F6F0 */
+      '?', /* U+F6F1 */
+      '?', /* U+F6F2 */
+      '?', /* U+F6F3 */
+      '?', /* U+F6F4 */
+      '?', /* U+F6F5 */
+      '?', /* U+F6F6 */
+      '?', /* U+F6F7 */
+      '?', /* U+F6F8 */
+      '?', /* U+F6F9 */
+      '?', /* U+F6FA */
+      '?', /* U+F6FB */
+      '?', /* U+F6FC */
+      '?', /* U+F6FD */
+      '?', /* U+F6FE */
+      '?', /* U+F6FF */
+      '?', /* U+F700 */
+      '?', /* U+F701 */
+      '?', /* U+F702 */
+      '?', /* U+F703 */
+      '?', /* U+F704 */
+      '?', /* U+F705 */
+      '?', /* U+F706 */
+      '?', /* U+F707 */
+      '?', /* U+F708 */
+      '?', /* U+F709 */
+      '?', /* U+F70A */
+      '?', /* U+F70B */
+      '?', /* U+F70C */
+      '?', /* U+F70D */
+      '?', /* U+F70E */
+      '?', /* U+F70F */
+      '?', /* U+F710 */
+      '?', /* U+F711 */
+      '?', /* U+F712 */
+      '?', /* U+F713 */
+      '?', /* U+F714 */
+      '?', /* U+F715 */
+      '?', /* U+F716 */
+      '?', /* U+F717 */
+      '?', /* U+F718 */
+      '?', /* U+F719 */
+      '?', /* U+F71A */
+      '?', /* U+F71B */
+      '?', /* U+F71C */
+      '?', /* U+F71D */
+      '?', /* U+F71E */
+      '?', /* U+F71F */
+      '?', /* U+F720 */
+      '?', /* U+F721 */
+      '?', /* U+F722 */
+      '?', /* U+F723 */
+      '?', /* U+F724 */
+      '?', /* U+F725 */
+      '?', /* U+F726 */
+      '?', /* U+F727 */
+      '?', /* U+F728 */
+      '?', /* U+F729 */
+      '?', /* U+F72A */
+      '?', /* U+F72B */
+      '?', /* U+F72C */
+      '?', /* U+F72D */
+      '?', /* U+F72E */
+      '?', /* U+F72F */
+      '?', /* U+F730 */
+      '?', /* U+F731 */
+      '?', /* U+F732 */
+      '?', /* U+F733 */
+      '?', /* U+F734 */
+      '?', /* U+F735 */
+      '?', /* U+F736 */
+      '?', /* U+F737 */
+      '?', /* U+F738 */
+      '?', /* U+F739 */
+      '?', /* U+F73A */
+      '?', /* U+F73B */
+      '?', /* U+F73C */
+      '?', /* U+F73D */
+      '?', /* U+F73E */
+      '?', /* U+F73F */
+      '?', /* U+F740 */
+      '?', /* U+F741 */
+      '?', /* U+F742 */
+      '?', /* U+F743 */
+      '?', /* U+F744 */
+      '?', /* U+F745 */
+      '?', /* U+F746 */
+      '?', /* U+F747 */
+      '?', /* U+F748 */
+      '?', /* U+F749 */
+      '?', /* U+F74A */
+      '?', /* U+F74B */
+      '?', /* U+F74C */
+      '?', /* U+F74D */
+      '?', /* U+F74E */
+      '?', /* U+F74F */
+      '?', /* U+F750 */
+      '?', /* U+F751 */
+      '?', /* U+F752 */
+      '?', /* U+F753 */
+      '?', /* U+F754 */
+      '?', /* U+F755 */
+      '?', /* U+F756 */
+      '?', /* U+F757 */
+      '?', /* U+F758 */
+      '?', /* U+F759 */
+      '?', /* U+F75A */
+      '?', /* U+F75B */
+      '?', /* U+F75C */
+      '?', /* U+F75D */
+      '?', /* U+F75E */
+      '?', /* U+F75F */
+      '?', /* U+F760 */
+      '?', /* U+F761 */
+      '?', /* U+F762 */
+      '?', /* U+F763 */
+      '?', /* U+F764 */
+      '?', /* U+F765 */
+      '?', /* U+F766 */
+      '?', /* U+F767 */
+      '?', /* U+F768 */
+      '?', /* U+F769 */
+      '?', /* U+F76A */
+      '?', /* U+F76B */
+      '?', /* U+F76C */
+      '?', /* U+F76D */
+      '?', /* U+F76E */
+      '?', /* U+F76F */
+      '?', /* U+F770 */
+      '?', /* U+F771 */
+      '?', /* U+F772 */
+      '?', /* U+F773 */
+      '?', /* U+F774 */
+      '?', /* U+F775 */
+      '?', /* U+F776 */
+      '?', /* U+F777 */
+      '?', /* U+F778 */
+      '?', /* U+F779 */
+      '?', /* U+F77A */
+      '?', /* U+F77B */
+      '?', /* U+F77C */
+      '?', /* U+F77D */
+      '?', /* U+F77E */
+      '?', /* U+F77F */
+      '?', /* U+F780 */
+      '?', /* U+F781 */
+      '?', /* U+F782 */
+      '?', /* U+F783 */
+      '?', /* U+F784 */
+      '?', /* U+F785 */
+      '?', /* U+F786 */
+      '?', /* U+F787 */
+      '?', /* U+F788 */
+      '?', /* U+F789 */
+      '?', /* U+F78A */
+      '?', /* U+F78B */
+      '?', /* U+F78C */
+      '?', /* U+F78D */
+      '?', /* U+F78E */
+      '?', /* U+F78F */
+      '?', /* U+F790 */
+      '?', /* U+F791 */
+      '?', /* U+F792 */
+      '?', /* U+F793 */
+      '?', /* U+F794 */
+      '?', /* U+F795 */
+      '?', /* U+F796 */
+      '?', /* U+F797 */
+      '?', /* U+F798 */
+      '?', /* U+F799 */
+      '?', /* U+F79A */
+      '?', /* U+F79B */
+      '?', /* U+F79C */
+      '?', /* U+F79D */
+      '?', /* U+F79E */
+      '?', /* U+F79F */
+      '?', /* U+F7A0 */
+      '?', /* U+F7A1 */
+      '?', /* U+F7A2 */
+      '?', /* U+F7A3 */
+      '?', /* U+F7A4 */
+      '?', /* U+F7A5 */
+      '?', /* U+F7A6 */
+      '?', /* U+F7A7 */
+      '?', /* U+F7A8 */
+      '?', /* U+F7A9 */
+      '?', /* U+F7AA */
+      '?', /* U+F7AB */
+      '?', /* U+F7AC */
+      '?', /* U+F7AD */
+      '?', /* U+F7AE */
+      '?', /* U+F7AF */
+      '?', /* U+F7B0 */
+      '?', /* U+F7B1 */
+      '?', /* U+F7B2 */
+      '?', /* U+F7B3 */
+      '?', /* U+F7B4 */
+      '?', /* U+F7B5 */
+      '?', /* U+F7B6 */
+      '?', /* U+F7B7 */
+      '?', /* U+F7B8 */
+      '?', /* U+F7B9 */
+      '?', /* U+F7BA */
+      '?', /* U+F7BB */
+      '?', /* U+F7BC */
+      '?', /* U+F7BD */
+      '?', /* U+F7BE */
+      '?', /* U+F7BF */
+      '?', /* U+F7C0 */
+      '?', /* U+F7C1 */
+      '?', /* U+F7C2 */
+      '?', /* U+F7C3 */
+      '?', /* U+F7C4 */
+      '?', /* U+F7C5 */
+      '?', /* U+F7C6 */
+      '?', /* U+F7C7 */
+      '?', /* U+F7C8 */
+      '?', /* U+F7C9 */
+      '?', /* U+F7CA */
+      '?', /* U+F7CB */
+      '?', /* U+F7CC */
+      '?', /* U+F7CD */
+      '?', /* U+F7CE */
+      '?', /* U+F7CF */
+      '?', /* U+F7D0 */
+      '?', /* U+F7D1 */
+      '?', /* U+F7D2 */
+      '?', /* U+F7D3 */
+      '?', /* U+F7D4 */
+      '?', /* U+F7D5 */
+      '?', /* U+F7D6 */
+      '?', /* U+F7D7 */
+      '?', /* U+F7D8 */
+      '?', /* U+F7D9 */
+      '?', /* U+F7DA */
+      '?', /* U+F7DB */
+      '?', /* U+F7DC */
+      '?', /* U+F7DD */
+      '?', /* U+F7DE */
+      '?', /* U+F7DF */
+      '?', /* U+F7E0 */
+      '?', /* U+F7E1 */
+      '?', /* U+F7E2 */
+      '?', /* U+F7E3 */
+      '?', /* U+F7E4 */
+      '?', /* U+F7E5 */
+      '?', /* U+F7E6 */
+      '?', /* U+F7E7 */
+      '?', /* U+F7E8 */
+      '?', /* U+F7E9 */
+      '?', /* U+F7EA */
+      '?', /* U+F7EB */
+      '?', /* U+F7EC */
+      '?', /* U+F7ED */
+      '?', /* U+F7EE */
+      '?', /* U+F7EF */
+      '?', /* U+F7F0 */
+      '?', /* U+F7F1 */
+      '?', /* U+F7F2 */
+      '?', /* U+F7F3 */
+      '?', /* U+F7F4 */
+      '?', /* U+F7F5 */
+      '?', /* U+F7F6 */
+      '?', /* U+F7F7 */
+      '?', /* U+F7F8 */
+      '?', /* U+F7F9 */
+      '?', /* U+F7FA */
+      '?', /* U+F7FB */
+      '?', /* U+F7FC */
+      '?', /* U+F7FD */
+      '?', /* U+F7FE */
+      '?', /* U+F7FF */
+      '?', /* U+F800 */
+      '?', /* U+F801 */
+      '?', /* U+F802 */
+      '?', /* U+F803 */
+      '?', /* U+F804 */
+      '?', /* U+F805 */
+      '?', /* U+F806 */
+      '?', /* U+F807 */
+      '?', /* U+F808 */
+      '?', /* U+F809 */
+      '?', /* U+F80A */
+      '?', /* U+F80B */
+      '?', /* U+F80C */
+      '?', /* U+F80D */
+      '?', /* U+F80E */
+      '?', /* U+F80F */
+      '?', /* U+F810 */
+      '?', /* U+F811 */
+      '?', /* U+F812 */
+      '?', /* U+F813 */
+      '?', /* U+F814 */
+      '?', /* U+F815 */
+      '?', /* U+F816 */
+      '?', /* U+F817 */
+      '?', /* U+F818 */
+      '?', /* U+F819 */
+      '?', /* U+F81A */
+      '?', /* U+F81B */
+      '?', /* U+F81C */
+      '?', /* U+F81D */
+      '?', /* U+F81E */
+      '?', /* U+F81F */
+      '?', /* U+F820 */
+      '?', /* U+F821 */
+      '?', /* U+F822 */
+      '?', /* U+F823 */
+      '?', /* U+F824 */
+      '?', /* U+F825 */
+      '?', /* U+F826 */
+      '?', /* U+F827 */
+      '?', /* U+F828 */
+      '?', /* U+F829 */
+      '?', /* U+F82A */
+      '?', /* U+F82B */
+      '?', /* U+F82C */
+      '?', /* U+F82D */
+      '?', /* U+F82E */
+      '?', /* U+F82F */
+      '?', /* U+F830 */
+      '?', /* U+F831 */
+      '?', /* U+F832 */
+      '?', /* U+F833 */
+      '?', /* U+F834 */
+      '?', /* U+F835 */
+      '?', /* U+F836 */
+      '?', /* U+F837 */
+      '?', /* U+F838 */
+      '?', /* U+F839 */
+      '?', /* U+F83A */
+      '?', /* U+F83B */
+      '?', /* U+F83C */
+      '?', /* U+F83D */
+      '?', /* U+F83E */
+      '?', /* U+F83F */
+      '?', /* U+F840 */
+      '?', /* U+F841 */
+      '?', /* U+F842 */
+      '?', /* U+F843 */
+      '?', /* U+F844 */
+      '?', /* U+F845 */
+      '?', /* U+F846 */
+      '?', /* U+F847 */
+      '?', /* U+F848 */
+      '?', /* U+F849 */
+      '?', /* U+F84A */
+      '?', /* U+F84B */
+      '?', /* U+F84C */
+      '?', /* U+F84D */
+      '?', /* U+F84E */
+      '?', /* U+F84F */
+      '?', /* U+F850 */
+      '?', /* U+F851 */
+      '?', /* U+F852 */
+      '?', /* U+F853 */
+      '?', /* U+F854 */
+      '?', /* U+F855 */
+      '?', /* U+F856 */
+      '?', /* U+F857 */
+      '?', /* U+F858 */
+      '?', /* U+F859 */
+      '?', /* U+F85A */
+      '?', /* U+F85B */
+      '?', /* U+F85C */
+      '?', /* U+F85D */
+      '?', /* U+F85E */
+      '?', /* U+F85F */
+      '?', /* U+F860 */
+      '?', /* U+F861 */
+      '?', /* U+F862 */
+      '?', /* U+F863 */
+      '?', /* U+F864 */
+      '?', /* U+F865 */
+      '?', /* U+F866 */
+      '?', /* U+F867 */
+      '?', /* U+F868 */
+      '?', /* U+F869 */
+      '?', /* U+F86A */
+      '?', /* U+F86B */
+      '?', /* U+F86C */
+      '?', /* U+F86D */
+      '?', /* U+F86E */
+      '?', /* U+F86F */
+      '?', /* U+F870 */
+      '?', /* U+F871 */
+      '?', /* U+F872 */
+      '?', /* U+F873 */
+      '?', /* U+F874 */
+      '?', /* U+F875 */
+      '?', /* U+F876 */
+      '?', /* U+F877 */
+      '?', /* U+F878 */
+      '?', /* U+F879 */
+      '?', /* U+F87A */
+      '?', /* U+F87B */
+      '?', /* U+F87C */
+      '?', /* U+F87D */
+      '?', /* U+F87E */
+      '?', /* U+F87F */
+      '?', /* U+F880 */
+      '?', /* U+F881 */
+      '?', /* U+F882 */
+      '?', /* U+F883 */
+      '?', /* U+F884 */
+      '?', /* U+F885 */
+      '?', /* U+F886 */
+      '?', /* U+F887 */
+      '?', /* U+F888 */
+      '?', /* U+F889 */
+      '?', /* U+F88A */
+      '?', /* U+F88B */
+      '?', /* U+F88C */
+      '?', /* U+F88D */
+      '?', /* U+F88E */
+      '?', /* U+F88F */
+      '?', /* U+F890 */
+      '?', /* U+F891 */
+      '?', /* U+F892 */
+      '?', /* U+F893 */
+      '?', /* U+F894 */
+      '?', /* U+F895 */
+      '?', /* U+F896 */
+      '?', /* U+F897 */
+      '?', /* U+F898 */
+      '?', /* U+F899 */
+      '?', /* U+F89A */
+      '?', /* U+F89B */
+      '?', /* U+F89C */
+      '?', /* U+F89D */
+      '?', /* U+F89E */
+      '?', /* U+F89F */
+      '?', /* U+F8A0 */
+      '?', /* U+F8A1 */
+      '?', /* U+F8A2 */
+      '?', /* U+F8A3 */
+      '?', /* U+F8A4 */
+      '?', /* U+F8A5 */
+      '?', /* U+F8A6 */
+      '?', /* U+F8A7 */
+      '?', /* U+F8A8 */
+      '?', /* U+F8A9 */
+      '?', /* U+F8AA */
+      '?', /* U+F8AB */
+      '?', /* U+F8AC */
+      '?', /* U+F8AD */
+      '?', /* U+F8AE */
+      '?', /* U+F8AF */
+      '?', /* U+F8B0 */
+      '?', /* U+F8B1 */
+      '?', /* U+F8B2 */
+      '?', /* U+F8B3 */
+      '?', /* U+F8B4 */
+      '?', /* U+F8B5 */
+      '?', /* U+F8B6 */
+      '?', /* U+F8B7 */
+      '?', /* U+F8B8 */
+      '?', /* U+F8B9 */
+      '?', /* U+F8BA */
+      '?', /* U+F8BB */
+      '?', /* U+F8BC */
+      '?', /* U+F8BD */
+      '?', /* U+F8BE */
+      '?', /* U+F8BF */
+      '?', /* U+F8C0 */
+      '?', /* U+F8C1 */
+      '?', /* U+F8C2 */
+      '?', /* U+F8C3 */
+      '?', /* U+F8C4 */
+      '?', /* U+F8C5 */
+      '?', /* U+F8C6 */
+      '?', /* U+F8C7 */
+      '?', /* U+F8C8 */
+      '?', /* U+F8C9 */
+      '?', /* U+F8CA */
+      '?', /* U+F8CB */
+      '?', /* U+F8CC */
+      '?', /* U+F8CD */
+      '?', /* U+F8CE */
+      '?', /* U+F8CF */
+      '?', /* U+F8D0 */
+      '?', /* U+F8D1 */
+      '?', /* U+F8D2 */
+      '?', /* U+F8D3 */
+      '?', /* U+F8D4 */
+      '?', /* U+F8D5 */
+      '?', /* U+F8D6 */
+      '?', /* U+F8D7 */
+      '?', /* U+F8D8 */
+      '?', /* U+F8D9 */
+      '?', /* U+F8DA */
+      '?', /* U+F8DB */
+      '?', /* U+F8DC */
+      '?', /* U+F8DD */
+      '?', /* U+F8DE */
+      '?', /* U+F8DF */
+      '?', /* U+F8E0 */
+      '?', /* U+F8E1 */
+      '?', /* U+F8E2 */
+      '?', /* U+F8E3 */
+      '?', /* U+F8E4 */
+      '?', /* U+F8E5 */
+      '?', /* U+F8E6 */
+      '?', /* U+F8E7 */
+      '?', /* U+F8E8 */
+      '?', /* U+F8E9 */
+      '?', /* U+F8EA */
+      '?', /* U+F8EB */
+      '?', /* U+F8EC */
+      '?', /* U+F8ED */
+      '?', /* U+F8EE */
+      '?', /* U+F8EF */
+      '?', /* U+F8F0 */
+      '?', /* U+F8F1 */
+      '?', /* U+F8F2 */
+      '?', /* U+F8F3 */
+      '?', /* U+F8F4 */
+      '?', /* U+F8F5 */
+      '?', /* U+F8F6 */
+      '?', /* U+F8F7 */
+      '?', /* U+F8F8 */
+      '?', /* U+F8F9 */
+      '?', /* U+F8FA */
+      '?', /* U+F8FB */
+      '?', /* U+F8FC */
+      '?', /* U+F8FD */
+      '?', /* U+F8FE */
+      '?', /* U+F8FF */
+      '?', /* U+F900 */
+      '?', /* U+F901 */
+      '?', /* U+F902 */
+      '?', /* U+F903 */
+      '?', /* U+F904 */
+      '?', /* U+F905 */
+      '?', /* U+F906 */
+      '?', /* U+F907 */
+      '?', /* U+F908 */
+      '?', /* U+F909 */
+      '?', /* U+F90A */
+      '?', /* U+F90B */
+      '?', /* U+F90C */
+      '?', /* U+F90D */
+      '?', /* U+F90E */
+      '?', /* U+F90F */
+      '?', /* U+F910 */
+      '?', /* U+F911 */
+      '?', /* U+F912 */
+      '?', /* U+F913 */
+      '?', /* U+F914 */
+      '?', /* U+F915 */
+      '?', /* U+F916 */
+      '?', /* U+F917 */
+      '?', /* U+F918 */
+      '?', /* U+F919 */
+      '?', /* U+F91A */
+      '?', /* U+F91B */
+      '?', /* U+F91C */
+      '?', /* U+F91D */
+      '?', /* U+F91E */
+      '?', /* U+F91F */
+      '?', /* U+F920 */
+      '?', /* U+F921 */
+      '?', /* U+F922 */
+      '?', /* U+F923 */
+      '?', /* U+F924 */
+      '?', /* U+F925 */
+      '?', /* U+F926 */
+      '?', /* U+F927 */
+      '?', /* U+F928 */
+   0xfae0, /* U+F929 */
+      '?', /* U+F92A */
+      '?', /* U+F92B */
+      '?', /* U+F92C */
+      '?', /* U+F92D */
+      '?', /* U+F92E */
+      '?', /* U+F92F */
+      '?', /* U+F930 */
+      '?', /* U+F931 */
+      '?', /* U+F932 */
+      '?', /* U+F933 */
+      '?', /* U+F934 */
+      '?', /* U+F935 */
+      '?', /* U+F936 */
+      '?', /* U+F937 */
+      '?', /* U+F938 */
+      '?', /* U+F939 */
+      '?', /* U+F93A */
+      '?', /* U+F93B */
+      '?', /* U+F93C */
+      '?', /* U+F93D */
+      '?', /* U+F93E */
+      '?', /* U+F93F */
+      '?', /* U+F940 */
+      '?', /* U+F941 */
+      '?', /* U+F942 */
+      '?', /* U+F943 */
+      '?', /* U+F944 */
+      '?', /* U+F945 */
+      '?', /* U+F946 */
+      '?', /* U+F947 */
+      '?', /* U+F948 */
+      '?', /* U+F949 */
+      '?', /* U+F94A */
+      '?', /* U+F94B */
+      '?', /* U+F94C */
+      '?', /* U+F94D */
+      '?', /* U+F94E */
+      '?', /* U+F94F */
+      '?', /* U+F950 */
+      '?', /* U+F951 */
+      '?', /* U+F952 */
+      '?', /* U+F953 */
+      '?', /* U+F954 */
+      '?', /* U+F955 */
+      '?', /* U+F956 */
+      '?', /* U+F957 */
+      '?', /* U+F958 */
+      '?', /* U+F959 */
+      '?', /* U+F95A */
+      '?', /* U+F95B */
+      '?', /* U+F95C */
+      '?', /* U+F95D */
+      '?', /* U+F95E */
+      '?', /* U+F95F */
+      '?', /* U+F960 */
+      '?', /* U+F961 */
+      '?', /* U+F962 */
+      '?', /* U+F963 */
+      '?', /* U+F964 */
+      '?', /* U+F965 */
+      '?', /* U+F966 */
+      '?', /* U+F967 */
+      '?', /* U+F968 */
+      '?', /* U+F969 */
+      '?', /* U+F96A */
+      '?', /* U+F96B */
+      '?', /* U+F96C */
+      '?', /* U+F96D */
+      '?', /* U+F96E */
+      '?', /* U+F96F */
+      '?', /* U+F970 */
+      '?', /* U+F971 */
+      '?', /* U+F972 */
+      '?', /* U+F973 */
+      '?', /* U+F974 */
+      '?', /* U+F975 */
+      '?', /* U+F976 */
+      '?', /* U+F977 */
+      '?', /* U+F978 */
+      '?', /* U+F979 */
+      '?', /* U+F97A */
+      '?', /* U+F97B */
+      '?', /* U+F97C */
+      '?', /* U+F97D */
+      '?', /* U+F97E */
+      '?', /* U+F97F */
+      '?', /* U+F980 */
+      '?', /* U+F981 */
+      '?', /* U+F982 */
+      '?', /* U+F983 */
+      '?', /* U+F984 */
+      '?', /* U+F985 */
+      '?', /* U+F986 */
+      '?', /* U+F987 */
+      '?', /* U+F988 */
+      '?', /* U+F989 */
+      '?', /* U+F98A */
+      '?', /* U+F98B */
+      '?', /* U+F98C */
+      '?', /* U+F98D */
+      '?', /* U+F98E */
+      '?', /* U+F98F */
+      '?', /* U+F990 */
+      '?', /* U+F991 */
+      '?', /* U+F992 */
+      '?', /* U+F993 */
+      '?', /* U+F994 */
+      '?', /* U+F995 */
+      '?', /* U+F996 */
+      '?', /* U+F997 */
+      '?', /* U+F998 */
+      '?', /* U+F999 */
+      '?', /* U+F99A */
+      '?', /* U+F99B */
+      '?', /* U+F99C */
+      '?', /* U+F99D */
+      '?', /* U+F99E */
+      '?', /* U+F99F */
+      '?', /* U+F9A0 */
+      '?', /* U+F9A1 */
+      '?', /* U+F9A2 */
+      '?', /* U+F9A3 */
+      '?', /* U+F9A4 */
+      '?', /* U+F9A5 */
+      '?', /* U+F9A6 */
+      '?', /* U+F9A7 */
+      '?', /* U+F9A8 */
+      '?', /* U+F9A9 */
+      '?', /* U+F9AA */
+      '?', /* U+F9AB */
+      '?', /* U+F9AC */
+      '?', /* U+F9AD */
+      '?', /* U+F9AE */
+      '?', /* U+F9AF */
+      '?', /* U+F9B0 */
+      '?', /* U+F9B1 */
+      '?', /* U+F9B2 */
+      '?', /* U+F9B3 */
+      '?', /* U+F9B4 */
+      '?', /* U+F9B5 */
+      '?', /* U+F9B6 */
+      '?', /* U+F9B7 */
+      '?', /* U+F9B8 */
+      '?', /* U+F9B9 */
+      '?', /* U+F9BA */
+      '?', /* U+F9BB */
+      '?', /* U+F9BC */
+      '?', /* U+F9BD */
+      '?', /* U+F9BE */
+      '?', /* U+F9BF */
+      '?', /* U+F9C0 */
+      '?', /* U+F9C1 */
+      '?', /* U+F9C2 */
+      '?', /* U+F9C3 */
+      '?', /* U+F9C4 */
+      '?', /* U+F9C5 */
+      '?', /* U+F9C6 */
+      '?', /* U+F9C7 */
+      '?', /* U+F9C8 */
+      '?', /* U+F9C9 */
+      '?', /* U+F9CA */
+      '?', /* U+F9CB */
+      '?', /* U+F9CC */
+      '?', /* U+F9CD */
+      '?', /* U+F9CE */
+      '?', /* U+F9CF */
+      '?', /* U+F9D0 */
+      '?', /* U+F9D1 */
+      '?', /* U+F9D2 */
+      '?', /* U+F9D3 */
+      '?', /* U+F9D4 */
+      '?', /* U+F9D5 */
+      '?', /* U+F9D6 */
+      '?', /* U+F9D7 */
+      '?', /* U+F9D8 */
+      '?', /* U+F9D9 */
+      '?', /* U+F9DA */
+      '?', /* U+F9DB */
+   0xfbe9, /* U+F9DC */
+      '?', /* U+F9DD */
+      '?', /* U+F9DE */
+      '?', /* U+F9DF */
+      '?', /* U+F9E0 */
+      '?', /* U+F9E1 */
+      '?', /* U+F9E2 */
+      '?', /* U+F9E3 */
+      '?', /* U+F9E4 */
+      '?', /* U+F9E5 */
+      '?', /* U+F9E6 */
+      '?', /* U+F9E7 */
+      '?', /* U+F9E8 */
+      '?', /* U+F9E9 */
+      '?', /* U+F9EA */
+      '?', /* U+F9EB */
+      '?', /* U+F9EC */
+      '?', /* U+F9ED */
+      '?', /* U+F9EE */
+      '?', /* U+F9EF */
+      '?', /* U+F9F0 */
+      '?', /* U+F9F1 */
+      '?', /* U+F9F2 */
+      '?', /* U+F9F3 */
+      '?', /* U+F9F4 */
+      '?', /* U+F9F5 */
+      '?', /* U+F9F6 */
+      '?', /* U+F9F7 */
+      '?', /* U+F9F8 */
+      '?', /* U+F9F9 */
+      '?', /* U+F9FA */
+      '?', /* U+F9FB */
+      '?', /* U+F9FC */
+      '?', /* U+F9FD */
+      '?', /* U+F9FE */
+      '?', /* U+F9FF */
+      '?', /* U+FA00 */
+      '?', /* U+FA01 */
+      '?', /* U+FA02 */
+      '?', /* U+FA03 */
+      '?', /* U+FA04 */
+      '?', /* U+FA05 */
+      '?', /* U+FA06 */
+      '?', /* U+FA07 */
+      '?', /* U+FA08 */
+      '?', /* U+FA09 */
+      '?', /* U+FA0A */
+      '?', /* U+FA0B */
+      '?', /* U+FA0C */
+      '?', /* U+FA0D */
+   0xfa90, /* U+FA0E */
+   0xfa9b, /* U+FA0F */
+   0xfa9c, /* U+FA10 */
+   0xfab1, /* U+FA11 */
+   0xfad8, /* U+FA12 */
+   0xfae8, /* U+FA13 */
+   0xfaea, /* U+FA14 */
+   0xfb58, /* U+FA15 */
+   0xfb5e, /* U+FA16 */
+   0xfb75, /* U+FA17 */
+   0xfb7d, /* U+FA18 */
+   0xfb7e, /* U+FA19 */
+   0xfb80, /* U+FA1A */
+   0xfb82, /* U+FA1B */
+   0xfb86, /* U+FA1C */
+   0xfb89, /* U+FA1D */
+   0xfb92, /* U+FA1E */
+   0xfb9d, /* U+FA1F */
+   0xfb9f, /* U+FA20 */
+   0xfba0, /* U+FA21 */
+   0xfba9, /* U+FA22 */
+   0xfbb1, /* U+FA23 */
+   0xfbb3, /* U+FA24 */
+   0xfbb4, /* U+FA25 */
+   0xfbb7, /* U+FA26 */
+   0xfbd3, /* U+FA27 */
+   0xfbda, /* U+FA28 */
+   0xfbea, /* U+FA29 */
+   0xfbf6, /* U+FA2A */
+   0xfbf7, /* U+FA2B */
+   0xfbf9, /* U+FA2C */
+   0xfc49, /* U+FA2D */
+      '?', /* U+FA2E */
+      '?', /* U+FA2F */
+      '?', /* U+FA30 */
+      '?', /* U+FA31 */
+      '?', /* U+FA32 */
+      '?', /* U+FA33 */
+      '?', /* U+FA34 */
+      '?', /* U+FA35 */
+      '?', /* U+FA36 */
+      '?', /* U+FA37 */
+      '?', /* U+FA38 */
+      '?', /* U+FA39 */
+      '?', /* U+FA3A */
+      '?', /* U+FA3B */
+      '?', /* U+FA3C */
+      '?', /* U+FA3D */
+      '?', /* U+FA3E */
+      '?', /* U+FA3F */
+      '?', /* U+FA40 */
+      '?', /* U+FA41 */
+      '?', /* U+FA42 */
+      '?', /* U+FA43 */
+      '?', /* U+FA44 */
+      '?', /* U+FA45 */
+      '?', /* U+FA46 */
+      '?', /* U+FA47 */
+      '?', /* U+FA48 */
+      '?', /* U+FA49 */
+      '?', /* U+FA4A */
+      '?', /* U+FA4B */
+      '?', /* U+FA4C */
+      '?', /* U+FA4D */
+      '?', /* U+FA4E */
+      '?', /* U+FA4F */
+      '?', /* U+FA50 */
+      '?', /* U+FA51 */
+      '?', /* U+FA52 */
+      '?', /* U+FA53 */
+      '?', /* U+FA54 */
+      '?', /* U+FA55 */
+      '?', /* U+FA56 */
+      '?', /* U+FA57 */
+      '?', /* U+FA58 */
+      '?', /* U+FA59 */
+      '?', /* U+FA5A */
+      '?', /* U+FA5B */
+      '?', /* U+FA5C */
+      '?', /* U+FA5D */
+      '?', /* U+FA5E */
+      '?', /* U+FA5F */
+      '?', /* U+FA60 */
+      '?', /* U+FA61 */
+      '?', /* U+FA62 */
+      '?', /* U+FA63 */
+      '?', /* U+FA64 */
+      '?', /* U+FA65 */
+      '?', /* U+FA66 */
+      '?', /* U+FA67 */
+      '?', /* U+FA68 */
+      '?', /* U+FA69 */
+      '?', /* U+FA6A */
+      '?', /* U+FA6B */
+      '?', /* U+FA6C */
+      '?', /* U+FA6D */
+      '?', /* U+FA6E */
+      '?', /* U+FA6F */
+      '?', /* U+FA70 */
+      '?', /* U+FA71 */
+      '?', /* U+FA72 */
+      '?', /* U+FA73 */
+      '?', /* U+FA74 */
+      '?', /* U+FA75 */
+      '?', /* U+FA76 */
+      '?', /* U+FA77 */
+      '?', /* U+FA78 */
+      '?', /* U+FA79 */
+      '?', /* U+FA7A */
+      '?', /* U+FA7B */
+      '?', /* U+FA7C */
+      '?', /* U+FA7D */
+      '?', /* U+FA7E */
+      '?', /* U+FA7F */
+      '?', /* U+FA80 */
+      '?', /* U+FA81 */
+      '?', /* U+FA82 */
+      '?', /* U+FA83 */
+      '?', /* U+FA84 */
+      '?', /* U+FA85 */
+      '?', /* U+FA86 */
+      '?', /* U+FA87 */
+      '?', /* U+FA88 */
+      '?', /* U+FA89 */
+      '?', /* U+FA8A */
+      '?', /* U+FA8B */
+      '?', /* U+FA8C */
+      '?', /* U+FA8D */
+      '?', /* U+FA8E */
+      '?', /* U+FA8F */
+      '?', /* U+FA90 */
+      '?', /* U+FA91 */
+      '?', /* U+FA92 */
+      '?', /* U+FA93 */
+      '?', /* U+FA94 */
+      '?', /* U+FA95 */
+      '?', /* U+FA96 */
+      '?', /* U+FA97 */
+      '?', /* U+FA98 */
+      '?', /* U+FA99 */
+      '?', /* U+FA9A */
+      '?', /* U+FA9B */
+      '?', /* U+FA9C */
+      '?', /* U+FA9D */
+      '?', /* U+FA9E */
+      '?', /* U+FA9F */
+      '?', /* U+FAA0 */
+      '?', /* U+FAA1 */
+      '?', /* U+FAA2 */
+      '?', /* U+FAA3 */
+      '?', /* U+FAA4 */
+      '?', /* U+FAA5 */
+      '?', /* U+FAA6 */
+      '?', /* U+FAA7 */
+      '?', /* U+FAA8 */
+      '?', /* U+FAA9 */
+      '?', /* U+FAAA */
+      '?', /* U+FAAB */
+      '?', /* U+FAAC */
+      '?', /* U+FAAD */
+      '?', /* U+FAAE */
+      '?', /* U+FAAF */
+      '?', /* U+FAB0 */
+      '?', /* U+FAB1 */
+      '?', /* U+FAB2 */
+      '?', /* U+FAB3 */
+      '?', /* U+FAB4 */
+      '?', /* U+FAB5 */
+      '?', /* U+FAB6 */
+      '?', /* U+FAB7 */
+      '?', /* U+FAB8 */
+      '?', /* U+FAB9 */
+      '?', /* U+FABA */
+      '?', /* U+FABB */
+      '?', /* U+FABC */
+      '?', /* U+FABD */
+      '?', /* U+FABE */
+      '?', /* U+FABF */
+      '?', /* U+FAC0 */
+      '?', /* U+FAC1 */
+      '?', /* U+FAC2 */
+      '?', /* U+FAC3 */
+      '?', /* U+FAC4 */
+      '?', /* U+FAC5 */
+      '?', /* U+FAC6 */
+      '?', /* U+FAC7 */
+      '?', /* U+FAC8 */
+      '?', /* U+FAC9 */
+      '?', /* U+FACA */
+      '?', /* U+FACB */
+      '?', /* U+FACC */
+      '?', /* U+FACD */
+      '?', /* U+FACE */
+      '?', /* U+FACF */
+      '?', /* U+FAD0 */
+      '?', /* U+FAD1 */
+      '?', /* U+FAD2 */
+      '?', /* U+FAD3 */
+      '?', /* U+FAD4 */
+      '?', /* U+FAD5 */
+      '?', /* U+FAD6 */
+      '?', /* U+FAD7 */
+      '?', /* U+FAD8 */
+      '?', /* U+FAD9 */
+      '?', /* U+FADA */
+      '?', /* U+FADB */
+      '?', /* U+FADC */
+      '?', /* U+FADD */
+      '?', /* U+FADE */
+      '?', /* U+FADF */
+      '?', /* U+FAE0 */
+      '?', /* U+FAE1 */
+      '?', /* U+FAE2 */
+      '?', /* U+FAE3 */
+      '?', /* U+FAE4 */
+      '?', /* U+FAE5 */
+      '?', /* U+FAE6 */
+      '?', /* U+FAE7 */
+      '?', /* U+FAE8 */
+      '?', /* U+FAE9 */
+      '?', /* U+FAEA */
+      '?', /* U+FAEB */
+      '?', /* U+FAEC */
+      '?', /* U+FAED */
+      '?', /* U+FAEE */
+      '?', /* U+FAEF */
+      '?', /* U+FAF0 */
+      '?', /* U+FAF1 */
+      '?', /* U+FAF2 */
+      '?', /* U+FAF3 */
+      '?', /* U+FAF4 */
+      '?', /* U+FAF5 */
+      '?', /* U+FAF6 */
+      '?', /* U+FAF7 */
+      '?', /* U+FAF8 */
+      '?', /* U+FAF9 */
+      '?', /* U+FAFA */
+      '?', /* U+FAFB */
+      '?', /* U+FAFC */
+      '?', /* U+FAFD */
+      '?', /* U+FAFE */
+      '?', /* U+FAFF */
+      '?', /* U+FB00 */
+      '?', /* U+FB01 */
+      '?', /* U+FB02 */
+      '?', /* U+FB03 */
+      '?', /* U+FB04 */
+      '?', /* U+FB05 */
+      '?', /* U+FB06 */
+      '?', /* U+FB07 */
+      '?', /* U+FB08 */
+      '?', /* U+FB09 */
+      '?', /* U+FB0A */
+      '?', /* U+FB0B */
+      '?', /* U+FB0C */
+      '?', /* U+FB0D */
+      '?', /* U+FB0E */
+      '?', /* U+FB0F */
+      '?', /* U+FB10 */
+      '?', /* U+FB11 */
+      '?', /* U+FB12 */
+      '?', /* U+FB13 */
+      '?', /* U+FB14 */
+      '?', /* U+FB15 */
+      '?', /* U+FB16 */
+      '?', /* U+FB17 */
+      '?', /* U+FB18 */
+      '?', /* U+FB19 */
+      '?', /* U+FB1A */
+      '?', /* U+FB1B */
+      '?', /* U+FB1C */
+      '?', /* U+FB1D */
+      '?', /* U+FB1E */
+      '?', /* U+FB1F */
+      '?', /* U+FB20 */
+      '?', /* U+FB21 */
+      '?', /* U+FB22 */
+      '?', /* U+FB23 */
+      '?', /* U+FB24 */
+      '?', /* U+FB25 */
+      '?', /* U+FB26 */
+      '?', /* U+FB27 */
+      '?', /* U+FB28 */
+      '?', /* U+FB29 */
+      '?', /* U+FB2A */
+      '?', /* U+FB2B */
+      '?', /* U+FB2C */
+      '?', /* U+FB2D */
+      '?', /* U+FB2E */
+      '?', /* U+FB2F */
+      '?', /* U+FB30 */
+      '?', /* U+FB31 */
+      '?', /* U+FB32 */
+      '?', /* U+FB33 */
+      '?', /* U+FB34 */
+      '?', /* U+FB35 */
+      '?', /* U+FB36 */
+      '?', /* U+FB37 */
+      '?', /* U+FB38 */
+      '?', /* U+FB39 */
+      '?', /* U+FB3A */
+      '?', /* U+FB3B */
+      '?', /* U+FB3C */
+      '?', /* U+FB3D */
+      '?', /* U+FB3E */
+      '?', /* U+FB3F */
+      '?', /* U+FB40 */
+      '?', /* U+FB41 */
+      '?', /* U+FB42 */
+      '?', /* U+FB43 */
+      '?', /* U+FB44 */
+      '?', /* U+FB45 */
+      '?', /* U+FB46 */
+      '?', /* U+FB47 */
+      '?', /* U+FB48 */
+      '?', /* U+FB49 */
+      '?', /* U+FB4A */
+      '?', /* U+FB4B */
+      '?', /* U+FB4C */
+      '?', /* U+FB4D */
+      '?', /* U+FB4E */
+      '?', /* U+FB4F */
+      '?', /* U+FB50 */
+      '?', /* U+FB51 */
+      '?', /* U+FB52 */
+      '?', /* U+FB53 */
+      '?', /* U+FB54 */
+      '?', /* U+FB55 */
+      '?', /* U+FB56 */
+      '?', /* U+FB57 */
+      '?', /* U+FB58 */
+      '?', /* U+FB59 */
+      '?', /* U+FB5A */
+      '?', /* U+FB5B */
+      '?', /* U+FB5C */
+      '?', /* U+FB5D */
+      '?', /* U+FB5E */
+      '?', /* U+FB5F */
+      '?', /* U+FB60 */
+      '?', /* U+FB61 */
+      '?', /* U+FB62 */
+      '?', /* U+FB63 */
+      '?', /* U+FB64 */
+      '?', /* U+FB65 */
+      '?', /* U+FB66 */
+      '?', /* U+FB67 */
+      '?', /* U+FB68 */
+      '?', /* U+FB69 */
+      '?', /* U+FB6A */
+      '?', /* U+FB6B */
+      '?', /* U+FB6C */
+      '?', /* U+FB6D */
+      '?', /* U+FB6E */
+      '?', /* U+FB6F */
+      '?', /* U+FB70 */
+      '?', /* U+FB71 */
+      '?', /* U+FB72 */
+      '?', /* U+FB73 */
+      '?', /* U+FB74 */
+      '?', /* U+FB75 */
+      '?', /* U+FB76 */
+      '?', /* U+FB77 */
+      '?', /* U+FB78 */
+      '?', /* U+FB79 */
+      '?', /* U+FB7A */
+      '?', /* U+FB7B */
+      '?', /* U+FB7C */
+      '?', /* U+FB7D */
+      '?', /* U+FB7E */
+      '?', /* U+FB7F */
+      '?', /* U+FB80 */
+      '?', /* U+FB81 */
+      '?', /* U+FB82 */
+      '?', /* U+FB83 */
+      '?', /* U+FB84 */
+      '?', /* U+FB85 */
+      '?', /* U+FB86 */
+      '?', /* U+FB87 */
+      '?', /* U+FB88 */
+      '?', /* U+FB89 */
+      '?', /* U+FB8A */
+      '?', /* U+FB8B */
+      '?', /* U+FB8C */
+      '?', /* U+FB8D */
+      '?', /* U+FB8E */
+      '?', /* U+FB8F */
+      '?', /* U+FB90 */
+      '?', /* U+FB91 */
+      '?', /* U+FB92 */
+      '?', /* U+FB93 */
+      '?', /* U+FB94 */
+      '?', /* U+FB95 */
+      '?', /* U+FB96 */
+      '?', /* U+FB97 */
+      '?', /* U+FB98 */
+      '?', /* U+FB99 */
+      '?', /* U+FB9A */
+      '?', /* U+FB9B */
+      '?', /* U+FB9C */
+      '?', /* U+FB9D */
+      '?', /* U+FB9E */
+      '?', /* U+FB9F */
+      '?', /* U+FBA0 */
+      '?', /* U+FBA1 */
+      '?', /* U+FBA2 */
+      '?', /* U+FBA3 */
+      '?', /* U+FBA4 */
+      '?', /* U+FBA5 */
+      '?', /* U+FBA6 */
+      '?', /* U+FBA7 */
+      '?', /* U+FBA8 */
+      '?', /* U+FBA9 */
+      '?', /* U+FBAA */
+      '?', /* U+FBAB */
+      '?', /* U+FBAC */
+      '?', /* U+FBAD */
+      '?', /* U+FBAE */
+      '?', /* U+FBAF */
+      '?', /* U+FBB0 */
+      '?', /* U+FBB1 */
+      '?', /* U+FBB2 */
+      '?', /* U+FBB3 */
+      '?', /* U+FBB4 */
+      '?', /* U+FBB5 */
+      '?', /* U+FBB6 */
+      '?', /* U+FBB7 */
+      '?', /* U+FBB8 */
+      '?', /* U+FBB9 */
+      '?', /* U+FBBA */
+      '?', /* U+FBBB */
+      '?', /* U+FBBC */
+      '?', /* U+FBBD */
+      '?', /* U+FBBE */
+      '?', /* U+FBBF */
+      '?', /* U+FBC0 */
+      '?', /* U+FBC1 */
+      '?', /* U+FBC2 */
+      '?', /* U+FBC3 */
+      '?', /* U+FBC4 */
+      '?', /* U+FBC5 */
+      '?', /* U+FBC6 */
+      '?', /* U+FBC7 */
+      '?', /* U+FBC8 */
+      '?', /* U+FBC9 */
+      '?', /* U+FBCA */
+      '?', /* U+FBCB */
+      '?', /* U+FBCC */
+      '?', /* U+FBCD */
+      '?', /* U+FBCE */
+      '?', /* U+FBCF */
+      '?', /* U+FBD0 */
+      '?', /* U+FBD1 */
+      '?', /* U+FBD2 */
+      '?', /* U+FBD3 */
+      '?', /* U+FBD4 */
+      '?', /* U+FBD5 */
+      '?', /* U+FBD6 */
+      '?', /* U+FBD7 */
+      '?', /* U+FBD8 */
+      '?', /* U+FBD9 */
+      '?', /* U+FBDA */
+      '?', /* U+FBDB */
+      '?', /* U+FBDC */
+      '?', /* U+FBDD */
+      '?', /* U+FBDE */
+      '?', /* U+FBDF */
+      '?', /* U+FBE0 */
+      '?', /* U+FBE1 */
+      '?', /* U+FBE2 */
+      '?', /* U+FBE3 */
+      '?', /* U+FBE4 */
+      '?', /* U+FBE5 */
+      '?', /* U+FBE6 */
+      '?', /* U+FBE7 */
+      '?', /* U+FBE8 */
+      '?', /* U+FBE9 */
+      '?', /* U+FBEA */
+      '?', /* U+FBEB */
+      '?', /* U+FBEC */
+      '?', /* U+FBED */
+      '?', /* U+FBEE */
+      '?', /* U+FBEF */
+      '?', /* U+FBF0 */
+      '?', /* U+FBF1 */
+      '?', /* U+FBF2 */
+      '?', /* U+FBF3 */
+      '?', /* U+FBF4 */
+      '?', /* U+FBF5 */
+      '?', /* U+FBF6 */
+      '?', /* U+FBF7 */
+      '?', /* U+FBF8 */
+      '?', /* U+FBF9 */
+      '?', /* U+FBFA */
+      '?', /* U+FBFB */
+      '?', /* U+FBFC */
+      '?', /* U+FBFD */
+      '?', /* U+FBFE */
+      '?', /* U+FBFF */
+      '?', /* U+FC00 */
+      '?', /* U+FC01 */
+      '?', /* U+FC02 */
+      '?', /* U+FC03 */
+      '?', /* U+FC04 */
+      '?', /* U+FC05 */
+      '?', /* U+FC06 */
+      '?', /* U+FC07 */
+      '?', /* U+FC08 */
+      '?', /* U+FC09 */
+      '?', /* U+FC0A */
+      '?', /* U+FC0B */
+      '?', /* U+FC0C */
+      '?', /* U+FC0D */
+      '?', /* U+FC0E */
+      '?', /* U+FC0F */
+      '?', /* U+FC10 */
+      '?', /* U+FC11 */
+      '?', /* U+FC12 */
+      '?', /* U+FC13 */
+      '?', /* U+FC14 */
+      '?', /* U+FC15 */
+      '?', /* U+FC16 */
+      '?', /* U+FC17 */
+      '?', /* U+FC18 */
+      '?', /* U+FC19 */
+      '?', /* U+FC1A */
+      '?', /* U+FC1B */
+      '?', /* U+FC1C */
+      '?', /* U+FC1D */
+      '?', /* U+FC1E */
+      '?', /* U+FC1F */
+      '?', /* U+FC20 */
+      '?', /* U+FC21 */
+      '?', /* U+FC22 */
+      '?', /* U+FC23 */
+      '?', /* U+FC24 */
+      '?', /* U+FC25 */
+      '?', /* U+FC26 */
+      '?', /* U+FC27 */
+      '?', /* U+FC28 */
+      '?', /* U+FC29 */
+      '?', /* U+FC2A */
+      '?', /* U+FC2B */
+      '?', /* U+FC2C */
+      '?', /* U+FC2D */
+      '?', /* U+FC2E */
+      '?', /* U+FC2F */
+      '?', /* U+FC30 */
+      '?', /* U+FC31 */
+      '?', /* U+FC32 */
+      '?', /* U+FC33 */
+      '?', /* U+FC34 */
+      '?', /* U+FC35 */
+      '?', /* U+FC36 */
+      '?', /* U+FC37 */
+      '?', /* U+FC38 */
+      '?', /* U+FC39 */
+      '?', /* U+FC3A */
+      '?', /* U+FC3B */
+      '?', /* U+FC3C */
+      '?', /* U+FC3D */
+      '?', /* U+FC3E */
+      '?', /* U+FC3F */
+      '?', /* U+FC40 */
+      '?', /* U+FC41 */
+      '?', /* U+FC42 */
+      '?', /* U+FC43 */
+      '?', /* U+FC44 */
+      '?', /* U+FC45 */
+      '?', /* U+FC46 */
+      '?', /* U+FC47 */
+      '?', /* U+FC48 */
+      '?', /* U+FC49 */
+      '?', /* U+FC4A */
+      '?', /* U+FC4B */
+      '?', /* U+FC4C */
+      '?', /* U+FC4D */
+      '?', /* U+FC4E */
+      '?', /* U+FC4F */
+      '?', /* U+FC50 */
+      '?', /* U+FC51 */
+      '?', /* U+FC52 */
+      '?', /* U+FC53 */
+      '?', /* U+FC54 */
+      '?', /* U+FC55 */
+      '?', /* U+FC56 */
+      '?', /* U+FC57 */
+      '?', /* U+FC58 */
+      '?', /* U+FC59 */
+      '?', /* U+FC5A */
+      '?', /* U+FC5B */
+      '?', /* U+FC5C */
+      '?', /* U+FC5D */
+      '?', /* U+FC5E */
+      '?', /* U+FC5F */
+      '?', /* U+FC60 */
+      '?', /* U+FC61 */
+      '?', /* U+FC62 */
+      '?', /* U+FC63 */
+      '?', /* U+FC64 */
+      '?', /* U+FC65 */
+      '?', /* U+FC66 */
+      '?', /* U+FC67 */
+      '?', /* U+FC68 */
+      '?', /* U+FC69 */
+      '?', /* U+FC6A */
+      '?', /* U+FC6B */
+      '?', /* U+FC6C */
+      '?', /* U+FC6D */
+      '?', /* U+FC6E */
+      '?', /* U+FC6F */
+      '?', /* U+FC70 */
+      '?', /* U+FC71 */
+      '?', /* U+FC72 */
+      '?', /* U+FC73 */
+      '?', /* U+FC74 */
+      '?', /* U+FC75 */
+      '?', /* U+FC76 */
+      '?', /* U+FC77 */
+      '?', /* U+FC78 */
+      '?', /* U+FC79 */
+      '?', /* U+FC7A */
+      '?', /* U+FC7B */
+      '?', /* U+FC7C */
+      '?', /* U+FC7D */
+      '?', /* U+FC7E */
+      '?', /* U+FC7F */
+      '?', /* U+FC80 */
+      '?', /* U+FC81 */
+      '?', /* U+FC82 */
+      '?', /* U+FC83 */
+      '?', /* U+FC84 */
+      '?', /* U+FC85 */
+      '?', /* U+FC86 */
+      '?', /* U+FC87 */
+      '?', /* U+FC88 */
+      '?', /* U+FC89 */
+      '?', /* U+FC8A */
+      '?', /* U+FC8B */
+      '?', /* U+FC8C */
+      '?', /* U+FC8D */
+      '?', /* U+FC8E */
+      '?', /* U+FC8F */
+      '?', /* U+FC90 */
+      '?', /* U+FC91 */
+      '?', /* U+FC92 */
+      '?', /* U+FC93 */
+      '?', /* U+FC94 */
+      '?', /* U+FC95 */
+      '?', /* U+FC96 */
+      '?', /* U+FC97 */
+      '?', /* U+FC98 */
+      '?', /* U+FC99 */
+      '?', /* U+FC9A */
+      '?', /* U+FC9B */
+      '?', /* U+FC9C */
+      '?', /* U+FC9D */
+      '?', /* U+FC9E */
+      '?', /* U+FC9F */
+      '?', /* U+FCA0 */
+      '?', /* U+FCA1 */
+      '?', /* U+FCA2 */
+      '?', /* U+FCA3 */
+      '?', /* U+FCA4 */
+      '?', /* U+FCA5 */
+      '?', /* U+FCA6 */
+      '?', /* U+FCA7 */
+      '?', /* U+FCA8 */
+      '?', /* U+FCA9 */
+      '?', /* U+FCAA */
+      '?', /* U+FCAB */
+      '?', /* U+FCAC */
+      '?', /* U+FCAD */
+      '?', /* U+FCAE */
+      '?', /* U+FCAF */
+      '?', /* U+FCB0 */
+      '?', /* U+FCB1 */
+      '?', /* U+FCB2 */
+      '?', /* U+FCB3 */
+      '?', /* U+FCB4 */
+      '?', /* U+FCB5 */
+      '?', /* U+FCB6 */
+      '?', /* U+FCB7 */
+      '?', /* U+FCB8 */
+      '?', /* U+FCB9 */
+      '?', /* U+FCBA */
+      '?', /* U+FCBB */
+      '?', /* U+FCBC */
+      '?', /* U+FCBD */
+      '?', /* U+FCBE */
+      '?', /* U+FCBF */
+      '?', /* U+FCC0 */
+      '?', /* U+FCC1 */
+      '?', /* U+FCC2 */
+      '?', /* U+FCC3 */
+      '?', /* U+FCC4 */
+      '?', /* U+FCC5 */
+      '?', /* U+FCC6 */
+      '?', /* U+FCC7 */
+      '?', /* U+FCC8 */
+      '?', /* U+FCC9 */
+      '?', /* U+FCCA */
+      '?', /* U+FCCB */
+      '?', /* U+FCCC */
+      '?', /* U+FCCD */
+      '?', /* U+FCCE */
+      '?', /* U+FCCF */
+      '?', /* U+FCD0 */
+      '?', /* U+FCD1 */
+      '?', /* U+FCD2 */
+      '?', /* U+FCD3 */
+      '?', /* U+FCD4 */
+      '?', /* U+FCD5 */
+      '?', /* U+FCD6 */
+      '?', /* U+FCD7 */
+      '?', /* U+FCD8 */
+      '?', /* U+FCD9 */
+      '?', /* U+FCDA */
+      '?', /* U+FCDB */
+      '?', /* U+FCDC */
+      '?', /* U+FCDD */
+      '?', /* U+FCDE */
+      '?', /* U+FCDF */
+      '?', /* U+FCE0 */
+      '?', /* U+FCE1 */
+      '?', /* U+FCE2 */
+      '?', /* U+FCE3 */
+      '?', /* U+FCE4 */
+      '?', /* U+FCE5 */
+      '?', /* U+FCE6 */
+      '?', /* U+FCE7 */
+      '?', /* U+FCE8 */
+      '?', /* U+FCE9 */
+      '?', /* U+FCEA */
+      '?', /* U+FCEB */
+      '?', /* U+FCEC */
+      '?', /* U+FCED */
+      '?', /* U+FCEE */
+      '?', /* U+FCEF */
+      '?', /* U+FCF0 */
+      '?', /* U+FCF1 */
+      '?', /* U+FCF2 */
+      '?', /* U+FCF3 */
+      '?', /* U+FCF4 */
+      '?', /* U+FCF5 */
+      '?', /* U+FCF6 */
+      '?', /* U+FCF7 */
+      '?', /* U+FCF8 */
+      '?', /* U+FCF9 */
+      '?', /* U+FCFA */
+      '?', /* U+FCFB */
+      '?', /* U+FCFC */
+      '?', /* U+FCFD */
+      '?', /* U+FCFE */
+      '?', /* U+FCFF */
+      '?', /* U+FD00 */
+      '?', /* U+FD01 */
+      '?', /* U+FD02 */
+      '?', /* U+FD03 */
+      '?', /* U+FD04 */
+      '?', /* U+FD05 */
+      '?', /* U+FD06 */
+      '?', /* U+FD07 */
+      '?', /* U+FD08 */
+      '?', /* U+FD09 */
+      '?', /* U+FD0A */
+      '?', /* U+FD0B */
+      '?', /* U+FD0C */
+      '?', /* U+FD0D */
+      '?', /* U+FD0E */
+      '?', /* U+FD0F */
+      '?', /* U+FD10 */
+      '?', /* U+FD11 */
+      '?', /* U+FD12 */
+      '?', /* U+FD13 */
+      '?', /* U+FD14 */
+      '?', /* U+FD15 */
+      '?', /* U+FD16 */
+      '?', /* U+FD17 */
+      '?', /* U+FD18 */
+      '?', /* U+FD19 */
+      '?', /* U+FD1A */
+      '?', /* U+FD1B */
+      '?', /* U+FD1C */
+      '?', /* U+FD1D */
+      '?', /* U+FD1E */
+      '?', /* U+FD1F */
+      '?', /* U+FD20 */
+      '?', /* U+FD21 */
+      '?', /* U+FD22 */
+      '?', /* U+FD23 */
+      '?', /* U+FD24 */
+      '?', /* U+FD25 */
+      '?', /* U+FD26 */
+      '?', /* U+FD27 */
+      '?', /* U+FD28 */
+      '?', /* U+FD29 */
+      '?', /* U+FD2A */
+      '?', /* U+FD2B */
+      '?', /* U+FD2C */
+      '?', /* U+FD2D */
+      '?', /* U+FD2E */
+      '?', /* U+FD2F */
+      '?', /* U+FD30 */
+      '?', /* U+FD31 */
+      '?', /* U+FD32 */
+      '?', /* U+FD33 */
+      '?', /* U+FD34 */
+      '?', /* U+FD35 */
+      '?', /* U+FD36 */
+      '?', /* U+FD37 */
+      '?', /* U+FD38 */
+      '?', /* U+FD39 */
+      '?', /* U+FD3A */
+      '?', /* U+FD3B */
+      '?', /* U+FD3C */
+      '?', /* U+FD3D */
+      '?', /* U+FD3E */
+      '?', /* U+FD3F */
+      '?', /* U+FD40 */
+      '?', /* U+FD41 */
+      '?', /* U+FD42 */
+      '?', /* U+FD43 */
+      '?', /* U+FD44 */
+      '?', /* U+FD45 */
+      '?', /* U+FD46 */
+      '?', /* U+FD47 */
+      '?', /* U+FD48 */
+      '?', /* U+FD49 */
+      '?', /* U+FD4A */
+      '?', /* U+FD4B */
+      '?', /* U+FD4C */
+      '?', /* U+FD4D */
+      '?', /* U+FD4E */
+      '?', /* U+FD4F */
+      '?', /* U+FD50 */
+      '?', /* U+FD51 */
+      '?', /* U+FD52 */
+      '?', /* U+FD53 */
+      '?', /* U+FD54 */
+      '?', /* U+FD55 */
+      '?', /* U+FD56 */
+      '?', /* U+FD57 */
+      '?', /* U+FD58 */
+      '?', /* U+FD59 */
+      '?', /* U+FD5A */
+      '?', /* U+FD5B */
+      '?', /* U+FD5C */
+      '?', /* U+FD5D */
+      '?', /* U+FD5E */
+      '?', /* U+FD5F */
+      '?', /* U+FD60 */
+      '?', /* U+FD61 */
+      '?', /* U+FD62 */
+      '?', /* U+FD63 */
+      '?', /* U+FD64 */
+      '?', /* U+FD65 */
+      '?', /* U+FD66 */
+      '?', /* U+FD67 */
+      '?', /* U+FD68 */
+      '?', /* U+FD69 */
+      '?', /* U+FD6A */
+      '?', /* U+FD6B */
+      '?', /* U+FD6C */
+      '?', /* U+FD6D */
+      '?', /* U+FD6E */
+      '?', /* U+FD6F */
+      '?', /* U+FD70 */
+      '?', /* U+FD71 */
+      '?', /* U+FD72 */
+      '?', /* U+FD73 */
+      '?', /* U+FD74 */
+      '?', /* U+FD75 */
+      '?', /* U+FD76 */
+      '?', /* U+FD77 */
+      '?', /* U+FD78 */
+      '?', /* U+FD79 */
+      '?', /* U+FD7A */
+      '?', /* U+FD7B */
+      '?', /* U+FD7C */
+      '?', /* U+FD7D */
+      '?', /* U+FD7E */
+      '?', /* U+FD7F */
+      '?', /* U+FD80 */
+      '?', /* U+FD81 */
+      '?', /* U+FD82 */
+      '?', /* U+FD83 */
+      '?', /* U+FD84 */
+      '?', /* U+FD85 */
+      '?', /* U+FD86 */
+      '?', /* U+FD87 */
+      '?', /* U+FD88 */
+      '?', /* U+FD89 */
+      '?', /* U+FD8A */
+      '?', /* U+FD8B */
+      '?', /* U+FD8C */
+      '?', /* U+FD8D */
+      '?', /* U+FD8E */
+      '?', /* U+FD8F */
+      '?', /* U+FD90 */
+      '?', /* U+FD91 */
+      '?', /* U+FD92 */
+      '?', /* U+FD93 */
+      '?', /* U+FD94 */
+      '?', /* U+FD95 */
+      '?', /* U+FD96 */
+      '?', /* U+FD97 */
+      '?', /* U+FD98 */
+      '?', /* U+FD99 */
+      '?', /* U+FD9A */
+      '?', /* U+FD9B */
+      '?', /* U+FD9C */
+      '?', /* U+FD9D */
+      '?', /* U+FD9E */
+      '?', /* U+FD9F */
+      '?', /* U+FDA0 */
+      '?', /* U+FDA1 */
+      '?', /* U+FDA2 */
+      '?', /* U+FDA3 */
+      '?', /* U+FDA4 */
+      '?', /* U+FDA5 */
+      '?', /* U+FDA6 */
+      '?', /* U+FDA7 */
+      '?', /* U+FDA8 */
+      '?', /* U+FDA9 */
+      '?', /* U+FDAA */
+      '?', /* U+FDAB */
+      '?', /* U+FDAC */
+      '?', /* U+FDAD */
+      '?', /* U+FDAE */
+      '?', /* U+FDAF */
+      '?', /* U+FDB0 */
+      '?', /* U+FDB1 */
+      '?', /* U+FDB2 */
+      '?', /* U+FDB3 */
+      '?', /* U+FDB4 */
+      '?', /* U+FDB5 */
+      '?', /* U+FDB6 */
+      '?', /* U+FDB7 */
+      '?', /* U+FDB8 */
+      '?', /* U+FDB9 */
+      '?', /* U+FDBA */
+      '?', /* U+FDBB */
+      '?', /* U+FDBC */
+      '?', /* U+FDBD */
+      '?', /* U+FDBE */
+      '?', /* U+FDBF */
+      '?', /* U+FDC0 */
+      '?', /* U+FDC1 */
+      '?', /* U+FDC2 */
+      '?', /* U+FDC3 */
+      '?', /* U+FDC4 */
+      '?', /* U+FDC5 */
+      '?', /* U+FDC6 */
+      '?', /* U+FDC7 */
+      '?', /* U+FDC8 */
+      '?', /* U+FDC9 */
+      '?', /* U+FDCA */
+      '?', /* U+FDCB */
+      '?', /* U+FDCC */
+      '?', /* U+FDCD */
+      '?', /* U+FDCE */
+      '?', /* U+FDCF */
+      '?', /* U+FDD0 */
+      '?', /* U+FDD1 */
+      '?', /* U+FDD2 */
+      '?', /* U+FDD3 */
+      '?', /* U+FDD4 */
+      '?', /* U+FDD5 */
+      '?', /* U+FDD6 */
+      '?', /* U+FDD7 */
+      '?', /* U+FDD8 */
+      '?', /* U+FDD9 */
+      '?', /* U+FDDA */
+      '?', /* U+FDDB */
+      '?', /* U+FDDC */
+      '?', /* U+FDDD */
+      '?', /* U+FDDE */
+      '?', /* U+FDDF */
+      '?', /* U+FDE0 */
+      '?', /* U+FDE1 */
+      '?', /* U+FDE2 */
+      '?', /* U+FDE3 */
+      '?', /* U+FDE4 */
+      '?', /* U+FDE5 */
+      '?', /* U+FDE6 */
+      '?', /* U+FDE7 */
+      '?', /* U+FDE8 */
+      '?', /* U+FDE9 */
+      '?', /* U+FDEA */
+      '?', /* U+FDEB */
+      '?', /* U+FDEC */
+      '?', /* U+FDED */
+      '?', /* U+FDEE */
+      '?', /* U+FDEF */
+      '?', /* U+FDF0 */
+      '?', /* U+FDF1 */
+      '?', /* U+FDF2 */
+      '?', /* U+FDF3 */
+      '?', /* U+FDF4 */
+      '?', /* U+FDF5 */
+      '?', /* U+FDF6 */
+      '?', /* U+FDF7 */
+      '?', /* U+FDF8 */
+      '?', /* U+FDF9 */
+      '?', /* U+FDFA */
+      '?', /* U+FDFB */
+      '?', /* U+FDFC */
+      '?', /* U+FDFD */
+      '?', /* U+FDFE */
+      '?', /* U+FDFF */
+      '?', /* U+FE00 */
+      '?', /* U+FE01 */
+      '?', /* U+FE02 */
+      '?', /* U+FE03 */
+      '?', /* U+FE04 */
+      '?', /* U+FE05 */
+      '?', /* U+FE06 */
+      '?', /* U+FE07 */
+      '?', /* U+FE08 */
+      '?', /* U+FE09 */
+      '?', /* U+FE0A */
+      '?', /* U+FE0B */
+      '?', /* U+FE0C */
+      '?', /* U+FE0D */
+      '?', /* U+FE0E */
+      '?', /* U+FE0F */
+      '?', /* U+FE10 */
+      '?', /* U+FE11 */
+      '?', /* U+FE12 */
+      '?', /* U+FE13 */
+      '?', /* U+FE14 */
+      '?', /* U+FE15 */
+      '?', /* U+FE16 */
+      '?', /* U+FE17 */
+      '?', /* U+FE18 */
+      '?', /* U+FE19 */
+      '?', /* U+FE1A */
+      '?', /* U+FE1B */
+      '?', /* U+FE1C */
+      '?', /* U+FE1D */
+      '?', /* U+FE1E */
+      '?', /* U+FE1F */
+      '?', /* U+FE20 */
+      '?', /* U+FE21 */
+      '?', /* U+FE22 */
+      '?', /* U+FE23 */
+      '?', /* U+FE24 */
+      '?', /* U+FE25 */
+      '?', /* U+FE26 */
+      '?', /* U+FE27 */
+      '?', /* U+FE28 */
+      '?', /* U+FE29 */
+      '?', /* U+FE2A */
+      '?', /* U+FE2B */
+      '?', /* U+FE2C */
+      '?', /* U+FE2D */
+      '?', /* U+FE2E */
+      '?', /* U+FE2F */
+      '?', /* U+FE30 */
+      '?', /* U+FE31 */
+      '?', /* U+FE32 */
+      '?', /* U+FE33 */
+      '?', /* U+FE34 */
+      '?', /* U+FE35 */
+      '?', /* U+FE36 */
+      '?', /* U+FE37 */
+      '?', /* U+FE38 */
+      '?', /* U+FE39 */
+      '?', /* U+FE3A */
+      '?', /* U+FE3B */
+      '?', /* U+FE3C */
+      '?', /* U+FE3D */
+      '?', /* U+FE3E */
+      '?', /* U+FE3F */
+      '?', /* U+FE40 */
+      '?', /* U+FE41 */
+      '?', /* U+FE42 */
+      '?', /* U+FE43 */
+      '?', /* U+FE44 */
+      '?', /* U+FE45 */
+      '?', /* U+FE46 */
+      '?', /* U+FE47 */
+      '?', /* U+FE48 */
+      '?', /* U+FE49 */
+      '?', /* U+FE4A */
+      '?', /* U+FE4B */
+      '?', /* U+FE4C */
+      '?', /* U+FE4D */
+      '?', /* U+FE4E */
+      '?', /* U+FE4F */
+      '?', /* U+FE50 */
+      '?', /* U+FE51 */
+      '?', /* U+FE52 */
+      '?', /* U+FE53 */
+      '?', /* U+FE54 */
+      '?', /* U+FE55 */
+      '?', /* U+FE56 */
+      '?', /* U+FE57 */
+      '?', /* U+FE58 */
+      '?', /* U+FE59 */
+      '?', /* U+FE5A */
+      '?', /* U+FE5B */
+      '?', /* U+FE5C */
+      '?', /* U+FE5D */
+      '?', /* U+FE5E */
+      '?', /* U+FE5F */
+      '?', /* U+FE60 */
+      '?', /* U+FE61 */
+      '?', /* U+FE62 */
+      '?', /* U+FE63 */
+      '?', /* U+FE64 */
+      '?', /* U+FE65 */
+      '?', /* U+FE66 */
+      '?', /* U+FE67 */
+      '?', /* U+FE68 */
+      '?', /* U+FE69 */
+      '?', /* U+FE6A */
+      '?', /* U+FE6B */
+      '?', /* U+FE6C */
+      '?', /* U+FE6D */
+      '?', /* U+FE6E */
+      '?', /* U+FE6F */
+      '?', /* U+FE70 */
+      '?', /* U+FE71 */
+      '?', /* U+FE72 */
+      '?', /* U+FE73 */
+      '?', /* U+FE74 */
+      '?', /* U+FE75 */
+      '?', /* U+FE76 */
+      '?', /* U+FE77 */
+      '?', /* U+FE78 */
+      '?', /* U+FE79 */
+      '?', /* U+FE7A */
+      '?', /* U+FE7B */
+      '?', /* U+FE7C */
+      '?', /* U+FE7D */
+      '?', /* U+FE7E */
+      '?', /* U+FE7F */
+      '?', /* U+FE80 */
+      '?', /* U+FE81 */
+      '?', /* U+FE82 */
+      '?', /* U+FE83 */
+      '?', /* U+FE84 */
+      '?', /* U+FE85 */
+      '?', /* U+FE86 */
+      '?', /* U+FE87 */
+      '?', /* U+FE88 */
+      '?', /* U+FE89 */
+      '?', /* U+FE8A */
+      '?', /* U+FE8B */
+      '?', /* U+FE8C */
+      '?', /* U+FE8D */
+      '?', /* U+FE8E */
+      '?', /* U+FE8F */
+      '?', /* U+FE90 */
+      '?', /* U+FE91 */
+      '?', /* U+FE92 */
+      '?', /* U+FE93 */
+      '?', /* U+FE94 */
+      '?', /* U+FE95 */
+      '?', /* U+FE96 */
+      '?', /* U+FE97 */
+      '?', /* U+FE98 */
+      '?', /* U+FE99 */
+      '?', /* U+FE9A */
+      '?', /* U+FE9B */
+      '?', /* U+FE9C */
+      '?', /* U+FE9D */
+      '?', /* U+FE9E */
+      '?', /* U+FE9F */
+      '?', /* U+FEA0 */
+      '?', /* U+FEA1 */
+      '?', /* U+FEA2 */
+      '?', /* U+FEA3 */
+      '?', /* U+FEA4 */
+      '?', /* U+FEA5 */
+      '?', /* U+FEA6 */
+      '?', /* U+FEA7 */
+      '?', /* U+FEA8 */
+      '?', /* U+FEA9 */
+      '?', /* U+FEAA */
+      '?', /* U+FEAB */
+      '?', /* U+FEAC */
+      '?', /* U+FEAD */
+      '?', /* U+FEAE */
+      '?', /* U+FEAF */
+      '?', /* U+FEB0 */
+      '?', /* U+FEB1 */
+      '?', /* U+FEB2 */
+      '?', /* U+FEB3 */
+      '?', /* U+FEB4 */
+      '?', /* U+FEB5 */
+      '?', /* U+FEB6 */
+      '?', /* U+FEB7 */
+      '?', /* U+FEB8 */
+      '?', /* U+FEB9 */
+      '?', /* U+FEBA */
+      '?', /* U+FEBB */
+      '?', /* U+FEBC */
+      '?', /* U+FEBD */
+      '?', /* U+FEBE */
+      '?', /* U+FEBF */
+      '?', /* U+FEC0 */
+      '?', /* U+FEC1 */
+      '?', /* U+FEC2 */
+      '?', /* U+FEC3 */
+      '?', /* U+FEC4 */
+      '?', /* U+FEC5 */
+      '?', /* U+FEC6 */
+      '?', /* U+FEC7 */
+      '?', /* U+FEC8 */
+      '?', /* U+FEC9 */
+      '?', /* U+FECA */
+      '?', /* U+FECB */
+      '?', /* U+FECC */
+      '?', /* U+FECD */
+      '?', /* U+FECE */
+      '?', /* U+FECF */
+      '?', /* U+FED0 */
+      '?', /* U+FED1 */
+      '?', /* U+FED2 */
+      '?', /* U+FED3 */
+      '?', /* U+FED4 */
+      '?', /* U+FED5 */
+      '?', /* U+FED6 */
+      '?', /* U+FED7 */
+      '?', /* U+FED8 */
+      '?', /* U+FED9 */
+      '?', /* U+FEDA */
+      '?', /* U+FEDB */
+      '?', /* U+FEDC */
+      '?', /* U+FEDD */
+      '?', /* U+FEDE */
+      '?', /* U+FEDF */
+      '?', /* U+FEE0 */
+      '?', /* U+FEE1 */
+      '?', /* U+FEE2 */
+      '?', /* U+FEE3 */
+      '?', /* U+FEE4 */
+      '?', /* U+FEE5 */
+      '?', /* U+FEE6 */
+      '?', /* U+FEE7 */
+      '?', /* U+FEE8 */
+      '?', /* U+FEE9 */
+      '?', /* U+FEEA */
+      '?', /* U+FEEB */
+      '?', /* U+FEEC */
+      '?', /* U+FEED */
+      '?', /* U+FEEE */
+      '?', /* U+FEEF */
+      '?', /* U+FEF0 */
+      '?', /* U+FEF1 */
+      '?', /* U+FEF2 */
+      '?', /* U+FEF3 */
+      '?', /* U+FEF4 */
+      '?', /* U+FEF5 */
+      '?', /* U+FEF6 */
+      '?', /* U+FEF7 */
+      '?', /* U+FEF8 */
+      '?', /* U+FEF9 */
+      '?', /* U+FEFA */
+      '?', /* U+FEFB */
+      '?', /* U+FEFC */
+      '?', /* U+FEFD */
+      '?', /* U+FEFE */
+      '?', /* U+FEFF */
+      '?', /* U+FF00 */
+   0x8149, /* U+FF01 */
+   0xfa57, /* U+FF02 */
+   0x8194, /* U+FF03 */
+   0x8190, /* U+FF04 */
+   0x8193, /* U+FF05 */
+   0x8195, /* U+FF06 */
+   0xfa56, /* U+FF07 */
+   0x8169, /* U+FF08 */
+   0x816a, /* U+FF09 */
+   0x8196, /* U+FF0A */
+   0x817b, /* U+FF0B */
+   0x8143, /* U+FF0C */
+   0x817c, /* U+FF0D */
+   0x8144, /* U+FF0E */
+   0x815e, /* U+FF0F */
+   0x824f, /* U+FF10 */
+   0x8250, /* U+FF11 */
+   0x8251, /* U+FF12 */
+   0x8252, /* U+FF13 */
+   0x8253, /* U+FF14 */
+   0x8254, /* U+FF15 */
+   0x8255, /* U+FF16 */
+   0x8256, /* U+FF17 */
+   0x8257, /* U+FF18 */
+   0x8258, /* U+FF19 */
+   0x8146, /* U+FF1A */
+   0x8147, /* U+FF1B */
+   0x8183, /* U+FF1C */
+   0x8181, /* U+FF1D */
+   0x8184, /* U+FF1E */
+   0x8148, /* U+FF1F */
+   0x8197, /* U+FF20 */
+   0x8260, /* U+FF21 */
+   0x8261, /* U+FF22 */
+   0x8262, /* U+FF23 */
+   0x8263, /* U+FF24 */
+   0x8264, /* U+FF25 */
+   0x8265, /* U+FF26 */
+   0x8266, /* U+FF27 */
+   0x8267, /* U+FF28 */
+   0x8268, /* U+FF29 */
+   0x8269, /* U+FF2A */
+   0x826a, /* U+FF2B */
+   0x826b, /* U+FF2C */
+   0x826c, /* U+FF2D */
+   0x826d, /* U+FF2E */
+   0x826e, /* U+FF2F */
+   0x826f, /* U+FF30 */
+   0x8270, /* U+FF31 */
+   0x8271, /* U+FF32 */
+   0x8272, /* U+FF33 */
+   0x8273, /* U+FF34 */
+   0x8274, /* U+FF35 */
+   0x8275, /* U+FF36 */
+   0x8276, /* U+FF37 */
+   0x8277, /* U+FF38 */
+   0x8278, /* U+FF39 */
+   0x8279, /* U+FF3A */
+   0x816d, /* U+FF3B */
+   0x815f, /* U+FF3C */
+   0x816e, /* U+FF3D */
+   0x814f, /* U+FF3E */
+   0x8151, /* U+FF3F */
+   0x814d, /* U+FF40 */
+   0x8281, /* U+FF41 */
+   0x8282, /* U+FF42 */
+   0x8283, /* U+FF43 */
+   0x8284, /* U+FF44 */
+   0x8285, /* U+FF45 */
+   0x8286, /* U+FF46 */
+   0x8287, /* U+FF47 */
+   0x8288, /* U+FF48 */
+   0x8289, /* U+FF49 */
+   0x828a, /* U+FF4A */
+   0x828b, /* U+FF4B */
+   0x828c, /* U+FF4C */
+   0x828d, /* U+FF4D */
+   0x828e, /* U+FF4E */
+   0x828f, /* U+FF4F */
+   0x8290, /* U+FF50 */
+   0x8291, /* U+FF51 */
+   0x8292, /* U+FF52 */
+   0x8293, /* U+FF53 */
+   0x8294, /* U+FF54 */
+   0x8295, /* U+FF55 */
+   0x8296, /* U+FF56 */
+   0x8297, /* U+FF57 */
+   0x8298, /* U+FF58 */
+   0x8299, /* U+FF59 */
+   0x829a, /* U+FF5A */
+   0x816f, /* U+FF5B */
+   0x8162, /* U+FF5C */
+   0x8170, /* U+FF5D */
+   0x8160, /* U+FF5E */
+      '?', /* U+FF5F */
+      '?', /* U+FF60 */
+   0x00a1, /* U+FF61 */
+   0x00a2, /* U+FF62 */
+   0x00a3, /* U+FF63 */
+   0x00a4, /* U+FF64 */
+   0x00a5, /* U+FF65 */
+   0x00a6, /* U+FF66 */
+   0x00a7, /* U+FF67 */
+   0x00a8, /* U+FF68 */
+   0x00a9, /* U+FF69 */
+   0x00aa, /* U+FF6A */
+   0x00ab, /* U+FF6B */
+   0x00ac, /* U+FF6C */
+   0x00ad, /* U+FF6D */
+   0x00ae, /* U+FF6E */
+   0x00af, /* U+FF6F */
+   0x00b0, /* U+FF70 */
+   0x00b1, /* U+FF71 */
+   0x00b2, /* U+FF72 */
+   0x00b3, /* U+FF73 */
+   0x00b4, /* U+FF74 */
+   0x00b5, /* U+FF75 */
+   0x00b6, /* U+FF76 */
+   0x00b7, /* U+FF77 */
+   0x00b8, /* U+FF78 */
+   0x00b9, /* U+FF79 */
+   0x00ba, /* U+FF7A */
+   0x00bb, /* U+FF7B */
+   0x00bc, /* U+FF7C */
+   0x00bd, /* U+FF7D */
+   0x00be, /* U+FF7E */
+   0x00bf, /* U+FF7F */
+   0x00c0, /* U+FF80 */
+   0x00c1, /* U+FF81 */
+   0x00c2, /* U+FF82 */
+   0x00c3, /* U+FF83 */
+   0x00c4, /* U+FF84 */
+   0x00c5, /* U+FF85 */
+   0x00c6, /* U+FF86 */
+   0x00c7, /* U+FF87 */
+   0x00c8, /* U+FF88 */
+   0x00c9, /* U+FF89 */
+   0x00ca, /* U+FF8A */
+   0x00cb, /* U+FF8B */
+   0x00cc, /* U+FF8C */
+   0x00cd, /* U+FF8D */
+   0x00ce, /* U+FF8E */
+   0x00cf, /* U+FF8F */
+   0x00d0, /* U+FF90 */
+   0x00d1, /* U+FF91 */
+   0x00d2, /* U+FF92 */
+   0x00d3, /* U+FF93 */
+   0x00d4, /* U+FF94 */
+   0x00d5, /* U+FF95 */
+   0x00d6, /* U+FF96 */
+   0x00d7, /* U+FF97 */
+   0x00d8, /* U+FF98 */
+   0x00d9, /* U+FF99 */
+   0x00da, /* U+FF9A */
+   0x00db, /* U+FF9B */
+   0x00dc, /* U+FF9C */
+   0x00dd, /* U+FF9D */
+   0x00de, /* U+FF9E */
+   0x00df, /* U+FF9F */
+      '?', /* U+FFA0 */
+      '?', /* U+FFA1 */
+      '?', /* U+FFA2 */
+      '?', /* U+FFA3 */
+      '?', /* U+FFA4 */
+      '?', /* U+FFA5 */
+      '?', /* U+FFA6 */
+      '?', /* U+FFA7 */
+      '?', /* U+FFA8 */
+      '?', /* U+FFA9 */
+      '?', /* U+FFAA */
+      '?', /* U+FFAB */
+      '?', /* U+FFAC */
+      '?', /* U+FFAD */
+      '?', /* U+FFAE */
+      '?', /* U+FFAF */
+      '?', /* U+FFB0 */
+      '?', /* U+FFB1 */
+      '?', /* U+FFB2 */
+      '?', /* U+FFB3 */
+      '?', /* U+FFB4 */
+      '?', /* U+FFB5 */
+      '?', /* U+FFB6 */
+      '?', /* U+FFB7 */
+      '?', /* U+FFB8 */
+      '?', /* U+FFB9 */
+      '?', /* U+FFBA */
+      '?', /* U+FFBB */
+      '?', /* U+FFBC */
+      '?', /* U+FFBD */
+      '?', /* U+FFBE */
+      '?', /* U+FFBF */
+      '?', /* U+FFC0 */
+      '?', /* U+FFC1 */
+      '?', /* U+FFC2 */
+      '?', /* U+FFC3 */
+      '?', /* U+FFC4 */
+      '?', /* U+FFC5 */
+      '?', /* U+FFC6 */
+      '?', /* U+FFC7 */
+      '?', /* U+FFC8 */
+      '?', /* U+FFC9 */
+      '?', /* U+FFCA */
+      '?', /* U+FFCB */
+      '?', /* U+FFCC */
+      '?', /* U+FFCD */
+      '?', /* U+FFCE */
+      '?', /* U+FFCF */
+      '?', /* U+FFD0 */
+      '?', /* U+FFD1 */
+      '?', /* U+FFD2 */
+      '?', /* U+FFD3 */
+      '?', /* U+FFD4 */
+      '?', /* U+FFD5 */
+      '?', /* U+FFD6 */
+      '?', /* U+FFD7 */
+      '?', /* U+FFD8 */
+      '?', /* U+FFD9 */
+      '?', /* U+FFDA */
+      '?', /* U+FFDB */
+      '?', /* U+FFDC */
+      '?', /* U+FFDD */
+      '?', /* U+FFDE */
+      '?', /* U+FFDF */
+   0x8191, /* U+FFE0 */
+   0x8192, /* U+FFE1 */
+   0xfa54, /* U+FFE2 */
+   0x8150, /* U+FFE3 */
+   0xfa55, /* U+FFE4 */
+   0x818f, /* U+FFE5 */
+      '?', /* U+FFE6 */
+      '?', /* U+FFE7 */
+      '?', /* U+FFE8 */
+      '?', /* U+FFE9 */
+      '?', /* U+FFEA */
+      '?', /* U+FFEB */
+      '?', /* U+FFEC */
+      '?', /* U+FFED */
+      '?', /* U+FFEE */
+      '?', /* U+FFEF */
+      '?', /* U+FFF0 */
+      '?', /* U+FFF1 */
+      '?', /* U+FFF2 */
+      '?', /* U+FFF3 */
+      '?', /* U+FFF4 */
+      '?', /* U+FFF5 */
+      '?', /* U+FFF6 */
+      '?', /* U+FFF7 */
+      '?', /* U+FFF8 */
+      '?', /* U+FFF9 */
+      '?', /* U+FFFA */
+      '?', /* U+FFFB */
+      '?', /* U+FFFC */
+      '?', /* U+FFFD */
+      '?', /* U+FFFE */
+      '?'  /* U+FFFF */
+ };
+ 
+ int
+ ucs2sjis(ucs, sjis)
+ unsigned short ucs;
+ unsigned char* sjis;
+ {
+   unsigned short sj = u2stbl[ucs];
+   if (sj < 0x100) {
+     sjis[0] = sj;
+     return 1;
+   }
+   sjis[0] = sj >> 8;
+   sjis[1] = sj & 255;
+   return 2;
+ }
+ # endif
+ #endif
diff -crN ../orig/src/undo.c ./src/undo.c
*** ../orig/src/undo.c	Wed Aug 10 13:54:10 1994
--- ./src/undo.c	Sat May 10 10:52:14 1997
***************
*** 180,186 ****
  		u_getbot();
  
  	size = bot - top - 1;
! #ifndef UNIX
  		/*
  		 * With Amiga and MSDOS we can't handle big undo's, because then
  		 * u_alloc_line would have to allocate a block larger than 32K
--- 180,186 ----
  		u_getbot();
  
  	size = bot - top - 1;
! #if !defined(UNIX) && !defined(NT)
  		/*
  		 * With Amiga and MSDOS we can't handle big undo's, because then
  		 * u_alloc_line would have to allocate a block larger than 32K
diff -crN ../orig/src/unix.c ./src/unix.c
*** ../orig/src/unix.c	Sun Aug 14 05:40:54 1994
--- ./src/unix.c	Thu Jul 08 06:46:06 1999
***************
*** 30,39 ****
  
  #ifndef USE_SYSTEM		/* use fork/exec to start the shell */
  # include <sys/wait.h>
! # if !defined(SCO) && !defined(SOLARIS) && !defined(hpux) && !defined(__NetBSD__) && !defined(__FreeBSD__) && !defined(_SEQUENT_) && !defined(UNISYS)	/* SCO returns pid_t */
  extern int fork();
  # endif
! # if !defined(linux) && !defined(SOLARIS) && !defined(USL) && !defined(sun) && !(defined(hpux) && defined(__STDC__)) && !defined(__NetBSD__) && !defined(__FreeBSD__) && !defined(USL) && !defined(UNISYS)
  extern int execvp __ARGS((const char *, const char **));
  # endif
  #endif
--- 30,39 ----
  
  #ifndef USE_SYSTEM		/* use fork/exec to start the shell */
  # include <sys/wait.h>
! # if !defined(SCO) && !defined(SOLARIS) && !defined(hpux) && !defined(__NetBSD__) && !defined(__FreeBSD__) && !defined(_SEQUENT_) && !defined(UNISYS) && !defined(__sgi) && !defined(AIX)	/* SCO returns pid_t */
  extern int fork();
  # endif
! # if !defined(linux) && !defined(SOLARIS) && !defined(USL) && !defined(sun) && !(defined(hpux) && defined(__STDC__)) && !defined(__NetBSD__) && !defined(__FreeBSD__) && !defined(USL) && !defined(UNISYS) && !defined(sony) && !defined(__sgi) && !defined(AIX) && !defined(__CYGWIN__)
  extern int execvp __ARGS((const char *, const char **));
  # endif
  #endif
***************
*** 49,57 ****
  #  include <sys/select.h>
  #  define bzero(a, b)	memset((a), 0, (b))
  # endif
! # if !defined(M_XENIX) && !defined(UNICOS)
  #  include <poll.h>
  # endif
  # if defined(SCO) || defined(ISC)
  #  include <sys/stream.h>
  #  include <sys/ptem.h>
--- 49,60 ----
  #  include <sys/select.h>
  #  define bzero(a, b)	memset((a), 0, (b))
  # endif
! # if !defined(M_XENIX) && !defined(UNICOS) && !defined(AIX31)
  #  include <poll.h>
  # endif
+ # if defined(AIX31)
+ #  include <sys/poll.h>
+ # endif
  # if defined(SCO) || defined(ISC)
  #  include <sys/stream.h>
  #  include <sys/ptem.h>
***************
*** 65,71 ****
  # include <termio.h>
  #else	/* SYSV_UNIX */
  # include <sys/time.h>
! # if defined(hpux) || defined(linux)
  #  include <termio.h>
  #  if defined(hpux) && !defined(SIGWINCH)	/* hpux 9.01 has it */
  #   define SIGWINCH SIGWINDOW
--- 68,74 ----
  # include <termio.h>
  #else	/* SYSV_UNIX */
  # include <sys/time.h>
! # if defined(hpux) || defined(linux) || defined(__CYGWIN__)
  #  include <termio.h>
  #  if defined(hpux) && !defined(SIGWINCH)	/* hpux 9.01 has it */
  #   define SIGWINCH SIGWINDOW
***************
*** 113,119 ****
  #ifdef USL
  static void sig_winch __ARGS((int));
  #else
! # if defined(SIGWINCH) && !defined(linux) && !defined(__alpha) && !defined(mips) && !defined(_SEQUENT_) && !defined(SCO) && !defined(SOLARIS) && !defined(ISC)
  static void sig_winch __ARGS((int, int, struct sigcontext *));
  # endif
  #endif
--- 116,122 ----
  #ifdef USL
  static void sig_winch __ARGS((int));
  #else
! # if defined(SIGWINCH) && !defined(linux) && !defined(__alpha) && !defined(mips) && !defined(_SEQUENT_) && !defined(SCO) && !defined(SOLARIS) && !defined(ISC) && !defined(__CYGWIN__)
  static void sig_winch __ARGS((int, int, struct sigcontext *));
  # endif
  #endif
***************
*** 215,235 ****
--- 218,265 ----
  	void
  vim_delay()
  {
+ # ifdef notdef
  	poll(0, 0, 500);
+ # else
+ 	int			i;
+ 
+ 	for (i = 0; i < 5; i++)
+ 	{
+ 		if (WaitForChar(0))
+ 			break;
+ 		poll(0, 0, 100);
+ 	}
+ # endif
  }
  #else
+ # ifndef __bsdi__	/* ken */
  # if (defined(__STDC__) && !defined(hpux)) || defined(ultrix)
  extern int select __ARGS((int, fd_set *, fd_set *, fd_set *, struct timeval *));
  # endif
+ # endif
  
  	void
  vim_delay()
  {
+ #  ifdef notdef
  	struct timeval tv;
  
  	tv.tv_sec = 25 / 50;
  	tv.tv_usec = (25 % 50) * (1000000/50);
  	select(0, 0, 0, 0, &tv);
+ #  else
+ 	struct timeval tv;
+ 	int			i;
+ 
+ 	tv.tv_sec = 100 / 1000;
+ 	tv.tv_usec = (100 % 1000) * 1000;
+ 	for (i = 0; i < 5; i++)
+ 	{
+ 		if (WaitForChar(0))
+ 			break;
+ 		select(0, NULL, NULL, NULL, &tv);
+ 	}
+ #  endif
  }
  #endif
  
***************
*** 268,273 ****
--- 298,306 ----
  	void
  mch_suspend()
  {
+ #if defined(FEPCTRL) && defined(ONEW)
+ 	onew_freqsave();
+ #endif
  #ifdef SIGTSTP
  	settmode(0);
  	kill(0, SIGTSTP);		/* send ourselves a STOP signal */
***************
*** 451,456 ****
--- 484,491 ----
  
  #else	/* USE_X11 */
  
+ # ifdef notdef		/* original */
+ 
  	static void
  get_x11_title()
  {
***************
*** 466,471 ****
--- 501,531 ----
  		oldicon = term_strings.t_name;
  }
  
+ # else
+ 
+ 	static char_u *
+ get_term_strings()
+ {
+ 	if (STRNCMP(term_strings.t_name, "builtin_", 8) == 0)
+ 		return term_strings.t_name + 8;
+ 	else
+ 		return term_strings.t_name;
+ }
+ 
+ 	static void
+ get_x11_title()
+ {
+ 	oldtitle = get_term_strings();
+ }
+ 
+ 	static void
+ get_x11_icon()
+ {
+ 	oldicon = get_term_strings();
+ }
+ 
+ # endif
+ 
  #endif	/* USE_X11 */
  
  
***************
*** 496,501 ****
--- 556,564 ----
  	 * 		 than x11 calls, because the x11 calls don't always work
  	 */
  	if (	STRCMP(term_strings.t_name, "xterm") == 0 ||
+ #ifdef KANJI
+ 			STRCMP(term_strings.t_name, "kterm") == 0 ||
+ #endif
  			STRCMP(term_strings.t_name, "builtin_xterm") == 0)
  		type = 2;
  
***************
*** 591,597 ****
--- 654,662 ----
  {
  #if defined(SYSV_UNIX) || defined(USL) || defined(hpux) || defined(linux)
  	extern int		errno;
+ # ifndef linux
  	extern char		*sys_errlist[];
+ # endif
  
  	if (getcwd((char *)buf, len) == NULL)
  	{
***************
*** 740,751 ****
--- 805,823 ----
  mch_windexit(r)
  	int r;
  {
+ #ifdef FEPCTRL
+ 	if (FepInit)
+ 		fep_term();
+ #endif
  	settmode(0);
  	exiting = TRUE;
  	mch_settitle(oldtitle, oldicon);	/* restore xterm title */
  	stoptermcap();
  	flushbuf();
  	ml_close_all(); 				/* remove all memfiles */
+ #if defined(FEPCTRL) && defined(ONEW)
+ 	onew_freqsave();
+ #endif
  	exit(r);
  }
  
***************
*** 905,910 ****
--- 977,985 ----
  	check_winsize();
  
  /* if size changed: screenalloc will allocate new screen buffers */
+ #ifdef CANNA
+ 	canna_resize();
+ #endif
  	return OK;
  }
  
***************
*** 927,932 ****
--- 1002,1012 ----
  
  	flushbuf();
  
+ # ifdef FEPCTRL
+ 	if (FepInit)
+ 		fep_term();
+ # endif
+ 
  	if (cooked)
  		settmode(0); 				/* set to cooked mode */
  
***************
*** 956,961 ****
--- 1036,1045 ----
  	if (cooked)
  		settmode(1); 						/* set to raw mode */
  	resettitle();
+ # ifdef FEPCTRL
+ 	if (FepInit)
+ 		fep_init();
+ # endif
  	return (x ? FAIL : OK);
  
  #else /* USE_SYSTEM */		/* first attempt at not using system() */
***************
*** 970,975 ****
--- 1054,1065 ----
  	int		inquote;
  
  	flushbuf();
+ 
+ # ifdef FEPCTRL
+ 	if (FepInit)
+ 		fep_term();
+ # endif
+ 
  	signal(SIGINT, SIG_IGN);	/* we don't want to be killed here */
  	if (cooked)
  		settmode(0);			/* set to cooked mode */
***************
*** 1034,1040 ****
--- 1124,1135 ----
  	}
  	else					/* parent */
  	{
+ #if defined(notdef) || !defined(ECHILD)
  		wait(&status);
+ #else
+ 		while (wait(&status) != 0 && errno != ECHILD)
+ 			;
+ #endif
  		status = (status >> 8) & 255;
  		if (status)
  		{
***************
*** 1074,1079 ****
--- 1169,1178 ----
  		settmode(1); 						/* set to raw mode */
  	resettitle();
  	signal(SIGINT, SIG_DFL);
+ # ifdef FEPCTRL
+ 	if (FepInit)
+ 		fep_init();
+ # endif
  	return (status ? FAIL : OK);
  
  #endif /* USE_SYSTEM */
***************
*** 1125,1130 ****
--- 1224,1237 ----
  	len = read(0, inbuf + inbufcount, (long)(INBUFLEN - inbufcount));
  	if (len <= 0)	/* cannot read input??? */
  	{
+ #if defined(__CYGWIN__)
+ 		if (do_resize)
+ 		{
+ 			set_winsize(0, 0, FALSE);
+ 			do_resize = FALSE;
+ 			return;
+ 		}
+ #endif
  		fprintf(stderr, "Vim: Error reading input, exiting...\n");
  		exit(1);
  	}
***************
*** 1170,1176 ****
--- 1277,1287 ----
  	struct pollfd fds;
  
  	fds.fd = 0;
+ # if defined(AIX31)
+ 	fds.reqevents = POLLIN;
+ # else  /* AIX31 */
  	fds.events = POLLIN;
+ # endif /* AIX31 */
  	return (poll(&fds, 1, ticks));
  #else
  	struct timeval tv;
***************
*** 1184,1190 ****
--- 1295,1305 ----
  
  	FD_ZERO(&fdset);
  	FD_SET(0, &fdset);
+ # if (defined(__STDC__) && !defined(hpux)) || defined(ultrix)
  	return (select(1, &fdset, NULL, NULL, (ticks >= 0) ? &tv : NULL));
+ # else
+ 	return (select(1, (int*)&fdset, NULL, NULL, (ticks >= 0) ? &tv : NULL));
+ # endif
  #endif
  }
  
diff -crN ../orig/src/unix.h ./src/unix.h
*** ../orig/src/unix.h	Wed Aug 10 13:54:10 1994
--- ./src/unix.h	Tue Dec 15 14:27:04 1998
***************
*** 55,61 ****
--- 55,64 ----
  
  #define BASENAMELEN		(MAXNAMLEN - 5)
  
+ #ifdef stricmp
+ #undef stricmp
  #define stricmp vim_stricmp
+ #endif
  
  /*
   * prototypes for functions not in unix.c
***************
*** 80,86 ****
  int		stricmp __ARGS((char *, char *));
  
  /* memmove is not present on all systems, use our own version or bcopy */
! #if !defined(SCO) && !defined(SOLARIS) && !defined(AIX) && !defined(UTS4) && !defined(USL) && !defined(MIPS) && !defined(__NetBSD__) && !defined(__FreeBSD__) && !defined(linux) && !defined(UNISYS)
  # ifdef SYSV_UNIX
  #   define MEMMOVE
  void *memmove __ARGS((void *, void *, int));
--- 83,89 ----
  int		stricmp __ARGS((char *, char *));
  
  /* memmove is not present on all systems, use our own version or bcopy */
! #if !defined(SCO) && !defined(SOLARIS) && !defined(AIX) && !defined(UTS4) && !defined(USL) && !defined(MIPS) && !defined(__NetBSD__) && !defined(__FreeBSD__) && !defined(linux) && !defined(UNISYS) && !defined(__CYGWIN__)
  # ifdef SYSV_UNIX
  #   define MEMMOVE
  void *memmove __ARGS((void *, void *, int));
***************
*** 110,126 ****
   * Most unixes don't have these in include files.
   * If you get a "redefined" error, delete the offending line.
   */
! #if !defined(__NetBSD__) && !defined(__FreeBSD__)
    extern int	ioctl __ARGS((int, int, ...));
  #endif
  extern int	fsync __ARGS((int));
  extern char *getwd __ARGS((char *));
! #if !defined(__NetBSD__) && !defined(__FreeBSD__)
! # ifdef linux
!    extern void bzero __ARGS((void *, int));
! # else
!    extern void bzero __ARGS((char *, int));
! # endif
  #endif
  #if defined(system_that_does_not_have_access_in_an_include_file)
  extern int access __ARGS((char *, int));
--- 113,125 ----
   * Most unixes don't have these in include files.
   * If you get a "redefined" error, delete the offending line.
   */
! #if !defined(__NetBSD__) && !defined(__FreeBSD__) && !defined(linux) && !defined(__CYGWIN__)
    extern int	ioctl __ARGS((int, int, ...));
  #endif
  extern int	fsync __ARGS((int));
  extern char *getwd __ARGS((char *));
! #if !defined(__NetBSD__) && !defined(__FreeBSD__) && !defined(linux) && !defined(__CYGWIN__)
!   extern void bzero __ARGS((char *, int));
  #endif
  #if defined(system_that_does_not_have_access_in_an_include_file)
  extern int access __ARGS((char *, int));
diff -crN ../orig/src/version.c ./src/version.c
*** ../orig/src/version.c	Sat Aug 13 02:44:42 1994
--- ./src/version.c	Sun Dec 05 18:55:38 1999
***************
*** 278,280 ****
--- 278,290 ----
  #else
  char		   *longVersion = "Vi IMproved 3.0 by Bram Moolenaar (1994 Aug 12, compiled " __DATE__ " " __TIME__ ")";
  #endif
+ 
+ #ifdef KANJI
+ /*
+  *	 Japanized version
+  */
+ char		   *JpVersion = "JVim 3.0-j2.0";
+ char		   *longJpVersion
+ 					= "JVim 3.0-j2.0 by Ken'ichi Tsuchida (1999 Dec 4)";
+ #endif
+ 
diff -crN ../orig/src/vim.h ./src/vim.h
*** ../orig/src/vim.h	Wed Aug 10 13:54:10 1994
--- ./src/vim.h	Sun Sep 19 20:46:08 1999
***************
*** 112,123 ****
--- 112,134 ----
  
  #ifdef __TURBOC__
  # define __ARGS(x) x
+ # define __PARMS(x)	x
  #endif
+ #ifdef __BORLANDC__
+ # define __ARGS(x) x
+ # define __PARMS(x)	x
+ #endif
  
  #if defined(MSDOS) && !defined(NT)
  # include <dos.h>
  # include <dir.h>
  #endif
+ #if defined(MSDOS) && defined(NT) && defined(__BORLANDC__)
+ # include <dir.h>
+ #endif
+ #if __TURBOC__ >= 0x500
+ # include <wtypes.h>
+ #endif
  
  #ifdef SOLARIS
  # include <stdlib.h>
***************
*** 129,135 ****
  #  undef M_XENIX
  #  include <sys/ndir.h>		/* for MAXNAMLEN */
  # else
! #  if defined(SOLARIS) || defined(AIX) || defined(ARCHIE)
  #   include <dirent.h>		/* for MAXNAMLEN */
  #  else
  #   include <sys/dir.h>		/* for MAXNAMLEN */
--- 140,146 ----
  #  undef M_XENIX
  #  include <sys/ndir.h>		/* for MAXNAMLEN */
  # else
! #  if defined(SOLARIS) || defined(AIX) || defined(ARCHIE)  || __FreeBSD__ >= 3 || __CYGWIN__
  #   include <dirent.h>		/* for MAXNAMLEN */
  #  else
  #   include <sys/dir.h>		/* for MAXNAMLEN */
***************
*** 276,282 ****
  /*
   * Buffer sizes
   */
! #ifdef UNIX		/* Unix has plenty of memory */
  # define CMDBUFFSIZE	1024	/* size of the command processing buffer */
  #else
  # define CMDBUFFSIZE	256		/* size of the command processing buffer */
--- 287,293 ----
  /*
   * Buffer sizes
   */
! #if defined(UNIX) || defined(NT)		/* Unix has plenty of memory */
  # define CMDBUFFSIZE	1024	/* size of the command processing buffer */
  #else
  # define CMDBUFFSIZE	256		/* size of the command processing buffer */
***************
*** 300,306 ****
--- 311,321 ----
  #ifdef UNIX
  # define MAXPATHL	1024		/* Unix has long paths and plenty of memory */
  #else
+ # if 0
  # define MAXPATHL	128			/* not too long to put name on stack */
+ # else
+ # define MAXPATHL	260			/* WIN-NT or WIN-95 later max 260 char */
+ # endif
  #endif
  
  #ifdef MSDOS
***************
*** 376,379 ****
--- 391,399 ----
  
  #ifdef UNIX
  # include "unix.h"
+ #endif
+ 
+ #if defined(USE_EXFILE) && defined(NT)
+ # include "exfile.h"
+ # undef   DELETE
  #endif
Binary files ../orig/src/vim.ico and ./src/vim.ico differ
Only in ../orig/src: vim.prj
diff -crN ../orig/src/vim32.rc ./src/vim32.rc
*** ../orig/src/vim32.rc	Thu Jan 01 09:00:00 1970
--- ./src/vim32.rc	Sat Dec 18 18:52:10 1999
***************
*** 0 ****
--- 1,396 ----
+ #include <winver.h>
+ #include <winnt.h>
+ #include <winuser.h>
+ #include <dlgs.h>
+ #include "winjmenu.h"
+ #define IDC_STATIC	(-1)
+ 
+ vim       ICON      "vim.ico"
+ 
+ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
+ #pragma code_page(932)
+ 
+ VS_VERSION_INFO		VERSIONINFO
+ 	FILEVERSION		2,0,0,0
+ 	PRODUCTVERSION	2,0,0,0
+ 	FILEFLAGSMASK	VS_FFI_FILEFLAGSMASK
+ 	FILEFLAGS		0L
+ 	FILEOS          VOS__WINDOWS32
+ 	FILETYPE        VFT_APP
+ 	FILESUBTYPE     VFT2_UNKNOWN
+ BEGIN
+ 	BLOCK	"StringFileInfo"
+ 	BEGIN
+ 		BLOCK	"041104B0"
+ 		BEGIN
+ 			VALUE "Comments",			"JVim 3.0-j2.0"
+ 			VALUE "CompanyName",		"B.Moolenaar / K.Tsuchida"
+ 			VALUE "FileVersion",        "2.0.0.0"
+ 			VALUE "FileDescription",    "Vi IMproved 3.0 / JVim 3.0-j2.0"
+ 			VALUE "ProductName",        "ken_t@st.rim.or.jp (Ken'ichi Tsuchida)"
+ 			VALUE "ProductVersion",     "2.0.0.0"
+ 			VALUE "InternalName",       "JVim"
+ 			VALUE "OriginalFilename",   "Vim"
+ 			VALUE "LegalCopyright",     "Bram Moolenaar / Ken'ichi Tsuchida"
+ 			VALUE "LegalTrademarks",	"\0"
+ 		END
+ 	END
+ 	BLOCK	"VarFileInfo"
+ 	BEGIN
+ 		VALUE "Translation", 0x0411, 0x04b0
+ 	END
+ END
+ 
+ ACCKEYS ACCELERATORS
+ {
+ #if 0
+ 	VK_F1,		IDM_HELP,			VIRTKEY
+ #endif
+ 	VK_F4,		IDM_EXIT,			VIRTKEY, ALT
+ 	VK_F9,		IDM_BITMIXONOFF,	VIRTKEY, ALT
+ #ifdef USE_BDF
+ 	VK_F10,		IDM_BDFONOFF,		VIRTKEY, ALT
+ #endif
+ 	VK_F11,		IDM_WAVEONOFF,		VIRTKEY, ALT
+ 	VK_F12,		IDM_BITMAPONOFF,	VIRTKEY, ALT
+ 	VK_INSERT,	IDM_CONFUP,			VIRTKEY, ALT
+ 	VK_DELETE,	IDM_CONFDOWN,		VIRTKEY, ALT
+ 	VK_PRIOR,	IDM_BITMAPUP,		VIRTKEY, ALT
+ 	VK_NEXT,	IDM_BITMAPDOWN,		VIRTKEY, ALT
+ 	VK_PRIOR,	IDM_BITMIXUP,		VIRTKEY, CONTROL, ALT
+ 	VK_NEXT,	IDM_BITMIXDOWN,		VIRTKEY, CONTROL, ALT
+ 	"0",		IDM_COMDS,			VIRTKEY, CONTROL, ALT, SHIFT
+ 	"0",		IDM_CONF0,			ALT
+ 	"0",		IDM_COMD0,			VIRTKEY, CONTROL, ALT
+ 	"1",		IDM_CONF1,			ALT
+ 	"1",		IDM_COMD1,			VIRTKEY, CONTROL, ALT
+ 	"2",		IDM_CONF2,			ALT
+ 	"2",		IDM_COMD2,			VIRTKEY, CONTROL, ALT
+ 	"3",		IDM_CONF3,			ALT
+ 	"3",		IDM_COMD3,			VIRTKEY, CONTROL, ALT
+ 	"4",		IDM_CONF4,			ALT
+ 	"4",		IDM_COMD4,			VIRTKEY, CONTROL, ALT
+ 	"5",		IDM_CONF5,			ALT
+ 	"5",		IDM_COMD5,			VIRTKEY, CONTROL, ALT
+ 	"6",		IDM_CONF6,			ALT
+ 	"6",		IDM_COMD6,			VIRTKEY, CONTROL, ALT
+ 	"7",		IDM_CONF7,			ALT
+ 	"7",		IDM_COMD7,			VIRTKEY, CONTROL, ALT
+ 	"8",		IDM_CONF8,			ALT
+ 	"8",		IDM_COMD8,			VIRTKEY, CONTROL, ALT
+ 	"9",		IDM_CONF9,			ALT
+ 	"9",		IDM_COMD9,			VIRTKEY, CONTROL, ALT
+ 	"a",		IDM_VER2,			ALT
+ 	"c",		IDM_YANK,			ALT
+ 	"k",		IDM_VER,			ALT
+ 	"m",		IDM_MENU,			ALT
+ 	"n",		IDM_NEW,			ALT
+ 	"o",		IDM_FILE,			ALT
+ 	"p",		IDM_PRINT,			ALT
+ 	"r",		IDM_CLICK,			ALT
+ 	"s",		IDM_SBAR,			ALT
+ 	"v",		IDM_PASTE,			ALT
+ 	"x",		IDM_DELETE,			ALT
+ 	"E",		IDM_EXTEND,			ALT
+ }
+ 
+ VIMMENU MENU
+ {
+ 	POPUP	"&File"
+ 	{
+ 		MENUITEM	"&New Window\tAlt+N",	IDM_NEW
+ 		MENUITEM	"&Open File\tAlt+O",	IDM_FILE
+ 		MENUITEM	"&Save File",			IDM_SFILE
+ 		MENUITEM	"Save &As...",			IDM_AFILE
+ 		MENUITEM	"&Run",					IDM_CLICK
+ 		MENUITEM	"&Print\tAlt+P",		IDM_PRINT
+ 		MENUITEM	"E&xit\tAlt+F4",		IDM_EXIT
+ 	}
+ 	POPUP	"&Edit"
+ 	{
+ 		MENUITEM	"&Delete\tAlt+X",		IDM_DELETE
+ 		MENUITEM	"&Yank\tAlt+C",			IDM_YANK
+ 		MENUITEM	"&Paste\tAlt+V",		IDM_PASTE
+ 	}
+ 	POPUP	"G&lobal"
+ 	{
+ 		MENUITEM	"&Scrollbar\tAlt+S",	IDM_SBAR
+ 		MENUITEM	"&Unicode Font",		IDM_UNICODE
+ 		MENUITEM	"&Task Tray",			IDM_TRAY
+ 		MENUITEM	"&Erase Mouse",			IDM_MOUSE
+ 		MENUITEM	"&Print Command",		IDM_PRINTSET
+ 	}
+ 	POPUP	"Set&up"
+ 	{
+ 		MENUITEM	"&Font",				IDM_FONT
+ #ifdef USE_BDF
+ 		MENUITEM	"B&DF Font",			IDM_BDF
+ #endif
+ 		POPUP	"&Text Color"
+ 		{
+ 			MENUITEM	"&White",				IDM_FWHITE
+ 			MENUITEM	"&Black",				IDM_FBLACK
+ 			MENUITEM	"&NavyBlue",			IDM_FBLUE
+ 			MENUITEM	"&Choice",				IDM_FCOLOR
+ 		}
+ 		POPUP	"Back &Color"
+ 		{
+ 			MENUITEM	"&White",				IDM_BWHITE
+ 			MENUITEM	"&Black",				IDM_BBLACK
+ 			MENUITEM	"&Choice",				IDM_BCOLOR
+ 		}
+ 		MENUITEM	"&Bitmap File",			IDM_BITMAP
+ 		MENUITEM	"&Wave File",			IDM_WAVE
+ 		MENUITEM	"&Save Window Position",IDM_SAVE
+ 	}
+ 	POPUP	"Confi&g"
+ 	{
+ 		MENUITEM	"&Save Config",			IDM_CONFS
+ 		MENUITEM	"Default(&0)\tAlt+0",	IDM_CONF0
+ 		MENUITEM	"Config (&1)\tAlt+1",	IDM_CONF1
+ 		MENUITEM	"Config (&2)\tAlt+2",	IDM_CONF2
+ 		MENUITEM	"Config (&3)\tAlt+3",	IDM_CONF3
+ 	}
+ 	MENUITEM	"P&rev File",			IDM_PFILE
+ 	MENUITEM	"&Next File",			IDM_NFILE
+ 	MENUITEM	"&Help",				IDM_HELP
+ }
+ 
+ LOGIN DIALOG DISCARDABLE  0, 0, 123, 68
+ STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | WS_POPUP | 
+     WS_VISIBLE | WS_CAPTION
+ CAPTION "LOGIN"
+ FONT 10, "Terminal"
+ BEGIN
+     EDITTEXT        1000,47,3,68,13,ES_AUTOHSCROLL
+     EDITTEXT        1001,47,19,68,13,ES_PASSWORD | ES_AUTOHSCROLL
+     CONTROL         "config",1004,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,106,
+                     35,10,10
+     DEFPUSHBUTTON   "OK",IDOK,8,50,50,14
+     PUSHBUTTON      "CANCEL",IDCANCEL,65,50,50,14
+     LTEXT           "USER:",IDC_STATIC,5,5,40,10
+     LTEXT           "PASSWORD:",IDC_STATIC,5,21,40,10
+     LTEXT           "PROXY",IDC_STATIC,80,36,20,10
+ END
+ 
+ PRINTER DIALOG DISCARDABLE  0, 0, 187, 57
+ STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | WS_POPUP | 
+     WS_VISIBLE | WS_CAPTION
+ CAPTION "Printout Command Setup"
+ FONT 10, "Terminal"
+ BEGIN
+     EDITTEXT        1000,14,21,126,12,ES_AUTOHSCROLL
+     PUSHBUTTON      "&Reference",1001,144,21,40,12
+     LTEXT           "Printout Command",-1,14,7,71,9
+     DEFPUSHBUTTON   "OK",IDOK,31,37,50,14
+     PUSHBUTTON      "CANCEL",IDCANCEL,102,37,50,14
+ END
+ 
+ BITMAP DIALOG DISCARDABLE  0, 0, 187, 57
+ STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | WS_POPUP | 
+     WS_VISIBLE | WS_CAPTION
+ CAPTION "Bitmap File Select"
+ FONT 10, "Terminal"
+ BEGIN
+     EDITTEXT        1000,14,19,126,12,ES_AUTOHSCROLL
+     PUSHBUTTON      "&Reference",1001,144,19,40,12
+     LTEXT           "Bitmap File     ",IDC_STATIC,14,4,40,9
+     DEFPUSHBUTTON   "OK",IDOK,22,39,50,14
+     PUSHBUTTON      "CANCEL",IDCANCEL,84,39,50,14
+     CONTROL         "&USE",1003,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,172,41,
+                     6,8
+     LTEXT           "USE",IDC_STATIC,152,42,15,10
+ END
+ 
+ WAVE DIALOG DISCARDABLE  0, 0, 187, 57
+ STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | WS_POPUP | 
+     WS_VISIBLE | WS_CAPTION
+ CAPTION "Wave File Select"
+ FONT 10, "Terminal"
+ BEGIN
+     EDITTEXT        1000,14,21,126,12,ES_AUTOHSCROLL
+     PUSHBUTTON      "&Reference",1001,144,21,40,12
+     LTEXT           "Wave Sound File ",IDC_STATIC,14,7,71,9
+     DEFPUSHBUTTON   "OK",IDOK,22,39,50,14
+     PUSHBUTTON      "CANCEL",IDCANCEL,84,39,50,14
+     CONTROL         "&USE",1003,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,172,41,
+                     6,8
+     LTEXT           "USE",IDC_STATIC,152,42,15,10
+ END
+ 
+ BDF DIALOGEX 0, 0, 187, 83
+ STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | WS_POPUP | 
+     WS_VISIBLE | WS_CAPTION
+ CAPTION "BDF FONT Setup"
+ FONT 10, "Terminal"
+ BEGIN
+     LTEXT           "ASCII",IDC_STATIC,14,7,20,9
+     EDITTEXT        2000,55,5,81,12,ES_AUTOHSCROLL | ES_READONLY | NOT 
+                     WS_BORDER | NOT WS_TABSTOP
+     EDITTEXT        2001,142,5,12,12,ES_READONLY | NOT WS_BORDER | NOT 
+                     WS_TABSTOP,WS_EX_RIGHT
+     LTEXT           "X",IDC_STATIC,156,6,8,8
+     EDITTEXT        2002,164,5,11,12,ES_AUTOHSCROLL | ES_READONLY | NOT 
+                     WS_BORDER | NOT WS_TABSTOP
+     LTEXT           "pt",IDC_STATIC,177,6,9,10
+     EDITTEXT        1000,14,21,126,12,ES_AUTOHSCROLL
+     PUSHBUTTON      "&Reference",1001,144,21,40,12
+     LTEXT           "Japanese",IDC_STATIC,14,37,36,9
+     EDITTEXT        4000,55,37,81,12,ES_AUTOHSCROLL | ES_READONLY | NOT 
+                     WS_BORDER | NOT WS_TABSTOP
+     EDITTEXT        4001,142,37,12,12,ES_READONLY | NOT WS_BORDER | NOT 
+                     WS_TABSTOP,WS_EX_RIGHT
+     LTEXT           "X",IDC_STATIC,156,38,8,8
+     EDITTEXT        4002,164,37,11,12,ES_AUTOHSCROLL | ES_READONLY | NOT 
+                     WS_BORDER | NOT WS_TABSTOP
+     LTEXT           "pt",IDC_STATIC,177,40,9,10
+     EDITTEXT        3000,14,51,126,12,ES_AUTOHSCROLL
+     PUSHBUTTON      "R&eference",3001,144,53,40,12
+     DEFPUSHBUTTON   "OK",IDOK,15,65,50,14
+     PUSHBUTTON      "CANCEL",IDCANCEL,75,65,50,14
+     LTEXT           "USE",IDC_STATIC,145,68,15,8
+     CONTROL         "&USE",1002,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,164,66,
+                     10,10
+ END
+ 
+ LOAD DIALOG DISCARDABLE  0, 0, 100, 25
+ STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | WS_POPUP | 
+     WS_VISIBLE | WS_CAPTION
+ CAPTION "Loading ...."
+ BEGIN
+     LTEXT           "Loading .ini file...",-1,14,7,71,9
+ END
+ 
+ TERM DIALOG DISCARDABLE  0, 0, 100, 25
+ STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | WS_POPUP | 
+     WS_VISIBLE | WS_CAPTION
+ CAPTION "Terminate ...."
+ BEGIN
+     LTEXT           "Terminate JVim ...",-1,14,7,71,9
+ END
+ 
+ BITMAPEX DIALOG DISCARDABLE  0, 0, 187, 57
+ STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | WS_POPUP | 
+     WS_VISIBLE | WS_CAPTION
+ CAPTION "Bitmap File Select"
+ FONT 10, "Terminal"
+ BEGIN
+     EDITTEXT        1000,14,19,126,12,ES_AUTOHSCROLL
+     PUSHBUTTON      "&Reference",1001,144,19,40,12
+     LTEXT           "Bitmap File     ",IDC_STATIC,14,4,40,9
+     DEFPUSHBUTTON   "OK",IDOK,15,39,50,14
+     PUSHBUTTON      "CANCEL",IDCANCEL,72,39,50,14
+     EDITTEXT        1002,128,39,28,12,ES_NUMBER
+     LTEXT           "USE",IDC_STATIC,156,41,15,10
+     CONTROL         "&USE",1003,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,175,41,
+                     6,7
+ END
+ 
+ COMMAND DIALOG DISCARDABLE  0, 0, 187, 93
+ STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | WS_POPUP | 
+     WS_VISIBLE | WS_CAPTION
+ CAPTION "COMMAND"
+ FONT 10, "Terminal"
+ BEGIN
+     DEFPUSHBUTTON   "OK",IDOK,69,71,44,13
+     PUSHBUTTON      "CANCEL",IDCANCEL,123,71,44,13
+     EDITTEXT        1001,15,16,155,14,ES_AUTOHSCROLL
+     EDITTEXT        1002,14,47,155,14,ES_AUTOHSCROLL
+     LTEXT           "Load Command",IDC_STATIC,14,3,70,11
+     LTEXT           "Unload Command",IDC_STATIC,14,35,70,11
+     COMBOBOX        1003,15,71,44,50,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | 
+                     WS_TABSTOP
+ END
+ 
+ WAVEFILEOPENDIALOG DIALOG DISCARDABLE  36, 24, 264, 134
+ STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
+ CAPTION "Wave File Selection"
+ FONT 10, "Terminal"
+ BEGIN
+     LTEXT           "File &Name:",stc3,6,6,76,9
+     EDITTEXT        edt1,6,16,90,12,ES_AUTOHSCROLL | ES_OEMCONVERT
+     LISTBOX         lst1,6,32,90,68,LBS_SORT | LBS_OWNERDRAWFIXED | 
+                     LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL | 
+                     WS_TABSTOP
+     LTEXT           "&Directories:",-1,110,6,92,9
+     LTEXT           "",stc1,110,18,92,9,SS_NOPREFIX
+     LISTBOX         lst2,110,32,92,68,LBS_SORT | LBS_OWNERDRAWFIXED | 
+                     LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL | 
+                     WS_TABSTOP
+     LTEXT           "List Files of &Type:",stc2,6,104,90,9
+     COMBOBOX        cmb1,6,114,90,36,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | 
+                     WS_BORDER | WS_VSCROLL | WS_TABSTOP
+     LTEXT           "Dri&ves:",stc4,110,104,92,9
+     COMBOBOX        cmb2,110,114,92,68,CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | 
+                     CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | 
+                     WS_VSCROLL | WS_TABSTOP
+     DEFPUSHBUTTON   "OK",IDOK,208,6,50,14,WS_GROUP
+     PUSHBUTTON      "Cancel",IDCANCEL,208,24,50,14,WS_GROUP
+     PUSHBUTTON      "&Test",1013,208,42,50,14,WS_GROUP
+     CONTROL         "&Read Only",chx1,"Button",BS_AUTOCHECKBOX | NOT 
+                     WS_VISIBLE | WS_DISABLED | WS_GROUP | WS_TABSTOP,211,172,
+                     50,12
+ END
+ 
+ BITMAPOPENDIALOG DIALOG DISCARDABLE  36, 24, 264, 134
+ STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
+ CAPTION "Bitmap File Selection"
+ FONT 10, "Terminal"
+ BEGIN
+     LTEXT           "File &Name:",stc3,6,6,76,9
+     EDITTEXT        edt1,6,16,90,12,ES_AUTOHSCROLL | ES_OEMCONVERT
+     LISTBOX         lst1,6,32,90,68,LBS_SORT | LBS_OWNERDRAWFIXED | 
+                     LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL | 
+                     WS_TABSTOP
+     LTEXT           "&Directories:",-1,110,6,92,9
+     LTEXT           "",stc1,110,18,92,9,SS_NOPREFIX
+     LISTBOX         lst2,110,32,92,68,LBS_SORT | LBS_OWNERDRAWFIXED | 
+                     LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL | 
+                     WS_TABSTOP
+     LTEXT           "List Files of &Type:",stc2,6,104,90,9
+     COMBOBOX        cmb1,6,114,90,36,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | 
+                     WS_BORDER | WS_VSCROLL | WS_TABSTOP
+     LTEXT           "Dri&ves:",stc4,110,104,92,9
+     COMBOBOX        cmb2,110,114,92,68,CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | 
+                     CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | 
+                     WS_VSCROLL | WS_TABSTOP
+     DEFPUSHBUTTON   "OK",IDOK,208,6,50,14,WS_GROUP
+     PUSHBUTTON      "Cancel",IDCANCEL,208,24,50,14,WS_GROUP
+     PUSHBUTTON      "Dis&play",1013,208,42,50,14,WS_GROUP
+     CONTROL         "&Read Only",chx1,"Button",BS_AUTOCHECKBOX | NOT 
+                     WS_VISIBLE | WS_DISABLED | WS_GROUP | WS_TABSTOP,211,172,
+                     50,12
+     CONTROL         "",1010,"Static",SS_BLACKFRAME,208,75,50,40
+ END
+ 
+ WAVEDLGEXP DIALOG DISCARDABLE  0, 0, 295, 58
+ STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | 
+     WS_CAPTION
+ CAPTION "Wave File Selection"
+ FONT 10, "Terminal"
+ BEGIN
+     LTEXT           "",stc32,4,2,287,37
+     PUSHBUTTON      "&Test",1013,3,42,65,14,WS_GROUP
+ END
+ 
+ BITMAPDLGEXP DIALOG DISCARDABLE  0, 0, 280, 90
+ STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | 
+     WS_CAPTION
+ CAPTION "Bitmap File Selection"
+ FONT 10, "Terminal"
+ BEGIN
+     LTEXT           "",stc32,4,2,272,38
+     CONTROL         "",1010,"Static",SS_BLACKFRAME,4,44,70,44
+ END
+ 
+ BDFDLGEXP DIALOG DISCARDABLE  0, 0, 280, 70
+ STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | 
+     WS_CAPTION
+ CAPTION "BDF Font Selection"
+ FONT 10, "Terminal"
+ BEGIN
+     LTEXT           "",stc32,0,0,280,40
+     LTEXT           "",1010,5,47,270,20,NOT WS_GROUP
+ END
+ 
+ //BuildVer:	21
diff -crN ../orig/src/vim32s/mak32s.mak ./src/vim32s/mak32s.mak
*** ../orig/src/vim32s/mak32s.mak	Thu Jan 01 09:00:00 1970
--- ./src/vim32s/mak32s.mak	Fri Jul 30 06:54:58 1999
***************
*** 0 ****
--- 1,40 ----
+ # vi:ts=8:sw=8
+ # Makefile for VIM on WINNT, using MS SDK
+ #
+ NODEBUG=1
+ TARGETOS=WIN95
+ !include <ntwin32.mak>
+ ccommon= /O2 #/G5 /GA
+ 
+ #>>>>> choose options:
+ DEFINES	= -DKANJI -DWIN32 -DUCODE
+ 
+ #>>>>> name of the compiler and linker, name of lib directory
+ CC	= cl -nologo
+ LINK	= cl
+ DBG	= #-v
+ CFLAGS	= -DMSDOS -DNT $(DEFINES) $(DBG) $(cflags) $(cdebug) $(cvarsmt)
+ 
+ #>>>>> end of choices
+ 
+ ###########################################################################
+ INCL =	vim.h globals.h param.h keymap.h macros.h ascii.h msdos.h structs.h
+ OBJ = vim32s.obj alloc.obj charset.obj kanji.obj regexp.obj regsub.obj
+ 
+ ###########################################################################
+ vim32s.exe: $(OBJ) vim32s.res
+ 	$(link) $(linkdebug) $(guilflags) -out:vim32s.exe $(OBJ) vim32s.res $(guilibsmt)
+ 	del vim32s.obj
+ 
+ vim32s.obj: vim32s/vim32s.c $(INCL)
+ 	$(CC) -I. $(CFLAGS) -c vim32s\vim32s.c
+ 
+ vim32s.res: vim32s/vim32s.rc
+ 	rc /fo vim32s.res vim32s/vim32s.rc
+ 
+ ###########################################################################
+ alloc.obj:	alloc.c  $(INCL)
+ charset.obj:	charset.c  $(INCL)
+ regexp.obj:	regexp.c  $(INCL)
+ regsub.obj:	regsub.c  $(INCL)
+ kanji.obj:	kanji.c  $(INCL) jptab.h
diff -crN ../orig/src/vim32s/vim32s.c ./src/vim32s/vim32s.c
*** ../orig/src/vim32s/vim32s.c	Thu Jan 01 09:00:00 1970
--- ./src/vim32s/vim32s.c	Wed Jan 27 21:40:48 1999
***************
*** 0 ****
--- 1,617 ----
+ /*=============================================================== vim:ts=4:sw=4:
+  *
+  * GREP	- Japanized GREP
+  *
+  *============================================================================*/
+ #include <windows.h>
+ #define EXTERN
+ #include "vim.h"
+ #include "globals.h"
+ #include "proto.h"
+ #include "kanji.h"
+ #include "regexp.h"
+ #include "fcntl.h"
+ 
+ /*==============================================================================
+  *	I/O parameter
+  *============================================================================*/
+ static unsigned char	*	IObuffer;
+ static long					IOsize;
+ static unsigned char	*	IOstart;
+ static long					IOrest;
+ 
+ /*==============================================================================
+  *	line parameter
+  *============================================================================*/
+ typedef struct {
+ 	long					num;			/* line number					  */
+ 	long					size;			/* line size					  */
+ 	long					rest;			/* line rest size				  */
+ 	unsigned char		*	lp;				/* line pointer					  */
+ } LINE;
+ 
+ /*==============================================================================
+  *	command parameter
+  *============================================================================*/
+ typedef struct {
+ 	char					cmd[MAX_PATH + 32];
+ 	int						dir;
+ 	int						val;
+ 	int						wait;
+ } SEL;
+ static SEL					SelBox[32];
+ static int					SelCnt = 0;
+ static int					SelVal = 0;
+ 
+ /*==============================================================================
+  *	global parameter
+  *============================================================================*/
+ int							reg_ic;
+ int							reg_jic;
+ int							p_magic = TRUE;
+ int							p_jkc	= FALSE;
+ int							p_opt;
+ char_u						p_jp	= 'S';
+ int							p_cpage = CP_ACP;
+ 
+ int
+ emsg(msg)
+ char_u		*	msg;
+ {
+ 	return(TRUE);
+ }
+ 
+ char_u	*
+ ml_get_buf(buf, lnum, will_change)
+ BUF			*buf;
+ linenr_t	lnum;
+ int			will_change;		/* line will be changed */
+ {
+ 	return(NULL);
+ }
+ 
+ int
+ mf_release_all()
+ {
+ 	return(0);
+ }
+ 
+ long
+ mch_avail_mem(spec)
+ int spec;
+ {
+ 	return 0x7fffffff;		/* virual memory eh */
+ }
+ 
+ /*==============================================================================
+  *	prototype define
+  *============================================================================*/
+ static void
+ mbox(char_u *s, ...)
+ {
+ 	char		buf[1024];
+ 	va_list		ap;
+ 
+ 	va_start(ap, s);
+ 	wvsprintf(buf, s, ap);
+ 	va_end(ap);
+ #if 0
+ 	if (getenv("VIM32DEBUG") != NULL)
+ 		MessageBox(NULL, buf, "Debug", MB_OK);
+ #endif
+ }
+ 
+ /*==============================================================================
+  *	prototype define
+  *============================================================================*/
+ static int			fileopen __ARGS((const char *));
+ static int			fileread __ARGS((int, LINE *));
+ 
+ /*==============================================================================
+  *	line parameter
+  *============================================================================*/
+ static int
+ fileopen(fname)
+ const char		*	fname;
+ {
+ 	int					fd;
+ 
+ 	if (IObuffer == NULL)
+ 	{
+ 		IOsize = 0x10000L;					/* read 64K at a time */
+ 		while ((IObuffer = malloc(IOsize)) == NULL)
+ 		{
+ 			IOsize >>= 1;
+ 			if (IOsize < 1024)
+ 				ExitProcess(2);
+ 		}
+ 	}
+ 	IOstart= IObuffer;
+ 	IOrest = 0;
+ 	fd = open(fname, O_RDONLY);
+ 	if (fd < 0)
+ 		return(-1);
+ 	if ((IOrest = read(fd, (char *)IObuffer, (size_t)IOsize)) <= 0)
+ 		return(fd);
+ 	p_jp = judge_jcode(&p_jp, IObuffer, IOrest);
+ 	if (toupper(p_jp) == JP_WIDE)	/* UNICODE */
+ 		IOrest = wide2multi(IObuffer, IOrest, TRUE);
+ 	return(fd);
+ }
+ 
+ static int
+ fileread(fd, lp)
+ int					fd;
+ LINE			*	lp;
+ {
+ 	long				size;
+ 	unsigned char	*	ptr;
+ 	unsigned char		c;
+ 	int					n;
+ 	int					found = FALSE;
+ 
+ 	if (IOrest == 0)	/* end of file */
+ 		return(-1);
+ 	lp->rest += lp->size;
+ 	lp->size  = 0;
+ 	ptr  = IOstart;
+ 	size = IOrest;
+ 	ptr--;
+ 	while (++ptr, --size >= 0)
+ 	{
+ 		if ((c = *ptr) != '\0' && c != '\n')	/* catch most common case */
+ 			continue;
+ 		if (c == '\0')
+ 			*ptr = '\n';		/* NULs are replaced by newlines! */
+ 		else if (ptr[-1] == '\r')	/* remove CR */
+ 			ptr[-1] = '\0';
+ 		found = TRUE;
+ retry:
+ 		n = (ptr - IOstart) * 2 + 1;
+ 		if (n > lp->rest)
+ 		{
+ 			char	*	p = lp->lp;
+ 
+ 			if ((lp->lp = malloc(n)) == NULL)
+ 				ExitProcess(2);
+ 			if (p != NULL)
+ 			{
+ 				memmove(lp->lp, p, lp->size);
+ 				free(p);
+ 			}
+ 			lp->rest = n;
+ 			lp->lp[lp->size] = '\0';
+ 		}
+ 		n = kanjiconvsfrom(IOstart, ptr - IOstart,
+ 						&lp->lp[lp->size], n, NULL, toupper(p_jp), NULL);
+ 		lp->size += n;
+ 		lp->lp[lp->size] = '\0';	/* end of line */
+ 		lp->rest = lp->rest - n;
+ 		ptr++;
+ 		IOrest -= ptr - IOstart;
+ 		IOstart = ptr;	/* nothing left to write */
+ 		if (IOrest == 0)
+ 		{
+ 			if ((IOrest = read(fd, (char *)IObuffer, (size_t)IOsize)) < 0)
+ 				return(-1);
+ 			if (toupper(p_jp) == JP_WIDE)	/* UNICODE */
+ 				IOrest = wide2multi(IObuffer, IOrest, FALSE);
+ 			if (IOrest == 0)		/* end of file */
+ 				return(0);
+ 			ptr = IOstart = IObuffer;	/* nothing left to write */
+ 			size = IOrest;
+ 			ptr--;
+ 		}
+ 		if (found == TRUE)
+ 			return(0);
+ 	}
+ 	ptr--;
+ 	goto retry;
+ }
+ 
+ /*==============================================================================
+  *	Main function
+  *============================================================================*/
+ /*------------------------------------------------------------------------------
+  *	select dialog
+  *----------------------------------------------------------------------------*/
+ static LRESULT CALLBACK
+ DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+ {
+     int					wmId;
+ 	int					i;
+ 	LRESULT				lResult;
+ 	OPENFILENAME		ofn;
+ 	char				NameBuff[MAX_PATH+2];
+ 
+ 	switch (uMsg) {
+ 	case WM_INITDIALOG:
+ 		for (i = 0; i < SelCnt; i++)
+ 		{
+ 			lResult = SendDlgItemMessage(hWnd, 1000,
+ 							CB_ADDSTRING, 0, (LPARAM)(LPSTR)SelBox[i].cmd);
+ 			if (lResult == CB_ERR || lResult == CB_ERRSPACE)
+ 				ExitProcess(8);
+ 			lResult = SendDlgItemMessage(hWnd, 1000,
+ 							CB_SETITEMDATA, (WPARAM)lResult, (LPARAM)(DWORD)i); 
+ 			if (lResult == CB_ERR ) 
+ 				ExitProcess(8);
+ 		}
+ 		SendDlgItemMessage(hWnd, 1000, CB_SETCURSEL, 0, 0L);
+ 		return(TRUE);
+ 	case WM_DESTROY:
+ 		break;
+ 	case WM_COMMAND:
+ 		wmId = LOWORD(wParam);
+ 		switch (wmId) {
+ 		case IDOK:
+ 			lResult = SendDlgItemMessage(hWnd, 1000, CB_GETCURSEL, 0, 0);
+ 			if (lResult == CB_ERR)
+ 			{
+ 				if (GetDlgItemText(hWnd, 1000, NameBuff, sizeof(NameBuff)) == 0)
+ 					ExitProcess(8);
+ 				SelBox[0].dir = TRUE;
+ 				SelBox[0].wait= FALSE;
+ 				strcpy(SelBox[0].cmd, NameBuff);
+ 				lResult = 0;
+ 			}
+ 			else
+ 			{
+ 				lResult = SendDlgItemMessage(hWnd, 1000, CB_GETITEMDATA, lResult, 0);
+ 				if (lResult == CB_ERR)
+ 					ExitProcess(8);
+ 				else if (GetDlgItemText(hWnd, 1000, NameBuff, sizeof(NameBuff)) == 0)
+ 					ExitProcess(8);
+ 				if (lResult >= SelCnt
+ 						|| strcmp(SelBox[lResult].cmd, NameBuff) != 0)
+ 				{
+ 					SelBox[0].dir = TRUE;
+ 					SelBox[0].wait= FALSE;
+ 					strcpy(SelBox[0].cmd, NameBuff);
+ 					lResult = 0;
+ 				}
+ 			}
+ 			EndDialog(hWnd, lResult);
+ 			return(TRUE);
+ 		case IDCANCEL:
+ 			EndDialog(hWnd, -1);
+ 			return(TRUE);
+ 		case 1003:
+ 			memset(&ofn, 0, sizeof(ofn));
+ 			NameBuff[0] = '\0';
+ 			ofn.lStructSize		= sizeof(ofn);
+ 			ofn.hwndOwner		= hWnd;
+ 			ofn.hInstance		= (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);
+ 			ofn.lpstrFilter		= "Program File(*.exe;*.com;*.bat)\0*.exe;*.com;*.bat\0ALL(*.*)\0*.*\0";
+ 			ofn.lpstrCustomFilter = (LPSTR)NULL;
+ 			ofn.nMaxCustFilter	= 0L;
+ 			ofn.nFilterIndex	= 1;
+ 			ofn.lpstrFile		= &NameBuff[1];
+ 			ofn.nMaxFile		= MAX_PATH;
+ 			ofn.lpstrFileTitle	= NULL;
+ 			ofn.nMaxFileTitle	= 0;
+ 			ofn.lpstrInitialDir	= NULL;
+ 			ofn.lpstrTitle		= NULL;
+ 			ofn.Flags			= OFN_HIDEREADONLY | OFN_EXPLORER;
+ 			ofn.nFileOffset		= 0;
+ 			ofn.nFileExtension	= 0;
+ 			ofn.lpstrDefExt		= NULL;
+ 			if (GetOpenFileName(&ofn))
+ 			{
+ 				NameBuff[0] = '"';
+ 				strcat(NameBuff, "\"");
+ 				SendDlgItemMessage(hWnd, 1000, EM_SETSEL, 0, (LPARAM)-2);
+ 				SendDlgItemMessage(hWnd, 1000, WM_SETTEXT, 0, (LPARAM)NameBuff);
+ 			}
+ 			break;
+ 		}
+ 		break;
+ 	}
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	select dialog
+  *----------------------------------------------------------------------------*/
+ BOOL CALLBACK
+ EnumWindowsProc(HWND hwnd, LPARAM lParam)
+ {
+ 	DWORD		procid;
+ 
+ 	if (GetWindowThreadProcessId(hwnd, &procid))
+ 	{
+ 		if (procid == lParam)
+ 		{
+ 			SetForegroundWindow(hwnd);
+ 			SetFocus(hwnd);
+ 			return(0);
+ 		}
+ 	}
+ 	return(1);
+ }
+ 
+ /*==============================================================================
+  *	Main function
+  *============================================================================*/
+ /*
+  * ini file argument
+  *		extend   directory   search line   regular expression   command line
+  *		.alm   ; +         ; 30          ; Subject: hello     ; "vim32.exe" -no
+  *		.alm   ; -         ; 30          ; Subject: Re: hello ; "vim32.exe"
+  *		.c     ; +         ;             ;                    ; "vim32.exe"
+  *		       ;           ;             ;                    ; "vim32.exe"
+  *
+  */
+ int APIENTRY
+ WinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow)
+ HINSTANCE	hInstance;
+ HINSTANCE	hPrevInstance;
+ LPSTR		lpCmdLine;
+ int			nCmdShow;
+ {
+ 	char					cline[4096];
+ 	char				*	p;
+ 	int						rc;
+ 	char					ini[MAX_PATH];
+ 	char					buf[4096];
+ 	FILE			*		fdi;
+ 
+ 	GetModuleFileName(NULL, ini, sizeof(ini));
+ 	if ((p = strrchr(ini, '.')) == NULL)
+ 		ExitProcess(1);
+ 	strcpy(p, ".ini");
+ 	if ((fdi = fopen(ini, "r")) == NULL)
+ 		ExitProcess(3);
+ 	while (fgets(buf, sizeof(buf), fdi) != NULL)
+ 	{
+ 		char				*	data[5];
+ 		int						member = 0;
+ 
+ 		if (buf[0] == '#')
+ 			continue;
+ 		if (buf[strlen(buf) - 1] == '\n')
+ 			buf[strlen(buf) - 1] = '\0';
+ 		memset(data, 0, sizeof(data));
+ 		p = buf;
+ 		data[member++] = p;
+ 		while (*p)
+ 		{
+ 			if (*p == ';')
+ 			{
+ 				data[member++] = &p[1];
+ 				*p = '\0';
+ 			}
+ 			++p;
+ 			if (member >= (sizeof(data) / sizeof(char *)))
+ 			{
+ 				int						i;
+ 				int						line = 25;
+ 				int						bin = FALSE;
+ 				int						val = 0;
+ 				int						chdir = TRUE;
+ 				int						wait = FALSE;
+ 
+ 				for (i = 0; i < (sizeof(data) / sizeof(char *)); i++)
+ 				{
+ 					p = data[i];
+ 					while (*p && (*p == ' ' || *p == '\t'))
+ 						*p++;
+ 					data[i] = p;
+ 					p = &p[strlen(p) - 1];
+ 					while (p > data[i] && (*p == ' ' || *p == '\t'))
+ 						*p--;
+ 					p[1] = '\0';
+ 				}
+ 				if (strlen(data[0]))	/* extend */
+ 				{
+ 					WIN32_FIND_DATA fb;
+ 					HANDLE          hFind;
+ 
+ 					if ((hFind = FindFirstFile(lpCmdLine, &fb)) == INVALID_HANDLE_VALUE)
+ 					{
+ 						if ((p = strrchr(lpCmdLine, '.')) == NULL)
+ 							break;
+ 					}
+ 					else
+ 					{
+ 						FindClose(hFind);
+ 						if ((p = strrchr(fb.cFileName, '.')) == NULL)
+ 							break;
+ 					}
+ 					if (stricmp(p, data[0]) != 0)
+ 					{
+ 						if ((strlen(p) - 1) == strlen(data[0])
+ 								&& p[strlen(p) - 1] == '"'
+ 								&& strnicmp(p, data[0], strlen(data[0])) == 0)
+ 							;
+ 						else
+ 							break;
+ 						mbox(".ext = \"%s\":\"%s\"", p, data[0]);
+ 					}
+ 					val += 100;
+ 				}
+ 				if (strlen(data[1]))	/* directory */
+ 				{
+ 					char		*	w = data[1];
+ 
+ 					while (*w)
+ 					{
+ 						switch (*w) {
+ 						case '-':
+ 							chdir = FALSE;
+ 							break;
+ 						case '+':
+ 							chdir = TRUE;
+ 							break;
+ 						case 's':
+ 						case 'c': {
+ 							BYTE	KeyState[256];
+ 
+ 							if (GetKeyboardState(KeyState))
+ 							{
+ 								if (*w == 's' && KeyState[VK_SHIFT] & 0x80)
+ 								{
+ 									mbox("key = %x", KeyState[VK_SHIFT]);
+ 									val += 10;
+ 								}
+ 								else if (*w == 'c' && KeyState[VK_CONTROL] & 0x80)
+ 								{
+ 									mbox("key = %x", KeyState[VK_CONTROL]);
+ 									val += 10;
+ 								}
+ 								else
+ 									val -= 10000;
+ 							}
+ 							else
+ 								val -= 10000;
+ 							}
+ 							break;
+ 						case 'w':
+ 							wait = TRUE;
+ 							break;
+ 						}
+ 						w++;
+ 					}
+ 				}
+ 				if (strlen(data[2]))	/* search line number */
+ 				{
+ 					if (data[2][0] == 'b' || data[2][0] == 'B')
+ 						bin = TRUE;
+ 					else
+ 						line = strtol(data[2], (char **)0, 0);
+ 				}
+ 				if (strlen(data[3]))	/* regular expression */
+ 				{
+ 					int						match = FALSE;
+ 					char					fname[MAX_PATH];
+ 
+ 					strcpy(fname, lpCmdLine);
+ 					if (lpCmdLine[0] == '"'
+ 								&& lpCmdLine[strlen(lpCmdLine) - 1] == '"')
+ 					{
+ 
+ 						strcpy(fname, &lpCmdLine[1]);
+ 						fname[strlen(fname) - 1] = '\0';
+ 					}
+ 					if (bin)
+ 					{
+ 						FILE			*		fdb;
+ 						char			*		top;
+ 
+ 						if ((fdb = fopen(fname, "rb")) == NULL)
+ 							break;
+ 						top = p = data[3];
+ 						for (;;)
+ 						{
+ 							if (*p == '\0' || *p == ',')
+ 							{
+ 								if (*top == 'x')
+ 									(void)fgetc(fdb);	/* skip 1byte */
+ 								else if (strtol(top, (char **)0, 16) != fgetc(fdb))
+ 									break;
+ 								top = p + 1;
+ 							}
+ 							if (*p == '\0')
+ 							{
+ 								match = TRUE;
+ 								break;
+ 							}
+ 							p++;
+ 						}
+ 						fclose(fdb);
+ 					}
+ 					else
+ 					{
+ 						regexp				*	prog;
+ 						int						fd;
+ 						LINE					str;
+ 
+ 						memset(&str, 0, sizeof(str));
+ 						if ((prog = regcomp(data[3])) == NULL)
+ 							break;
+ 						if ((fd = fileopen(fname)) < 0)
+ 							break;
+ 						while (line--)
+ 						{
+ 							if (fileread(fd, &str) < 0)
+ 								break;
+ 							if (regexec(prog, str.lp, TRUE))
+ 							{
+ 								match = TRUE;
+ 								break;
+ 							}
+ 						}
+ 						close(fd);
+ 						free(prog);
+ 						free(str.lp);
+ 					}
+ 					if (!match)
+ 						break;
+ 					val += 50;
+ 					mbox("match = \"%s\"", data[3]);
+ 				}
+ 				if (val > SelVal)
+ 				{
+ 					SelCnt = 0;
+ 					SelVal = val;
+ 				}
+ 				if (val >= SelVal)
+ 				{
+ 					int						found = FALSE;
+ 
+ 					for (i = 0; i < SelCnt; i++)
+ 					{
+ 						if (strcmp(SelBox[i].cmd, data[4]) == 0)
+ 						{
+ 							found = TRUE;
+ 							break;
+ 						}
+ 					}
+ 					if (!found && (sizeof(SelBox) / sizeof(SEL)) > SelCnt)
+ 					{
+ 						strcpy(SelBox[SelCnt].cmd, data[4]);
+ 						SelBox[SelCnt].dir = chdir;
+ 						SelBox[SelCnt].val = val;
+ 						SelBox[SelCnt].wait= wait;
+ 						SelCnt++;
+ 					}
+ 				}
+ 				break;
+ 			}
+ 		}
+ 	}
+ 	fclose(fdi);
+ 	rc = 0;
+ 	if (SelCnt == 0
+ 			|| (SelCnt > 1 && (rc = DialogBoxParam(hInstance, "SELECT", NULL, DialogProc, (LPARAM)0)) < 0))
+ 		ExitProcess(9);
+ 	wsprintf(cline, "%s %s", SelBox[rc].cmd, lpCmdLine);
+ 	if (SelBox[rc].dir)
+ 	{
+ 		char					dir[MAX_PATH];
+ 		char				*	tname;
+ 
+ 		if (GetFullPathName(lpCmdLine, sizeof(dir), dir, &tname) != 0)
+ 		{
+ 			*tname = '\0';
+ 			SetCurrentDirectory(dir);
+ 		}
+ 	}
+ 	{
+ 		STARTUPINFO				si;
+ 		PROCESS_INFORMATION		pi;
+ 
+ 		ZeroMemory(&pi, sizeof(pi));
+ 		ZeroMemory(&si, sizeof(si));
+ 		si.cb = sizeof(si);
+ 		si.wShowWindow = SW_SHOWNORMAL;
+ 		if (CreateProcess(NULL, cline, NULL, NULL, FALSE,
+ 							CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi) != TRUE)
+ 			ExitProcess(9);
+ 		Sleep(300);
+ 		EnumWindows(EnumWindowsProc, pi.dwProcessId);
+ 		if (SelBox[rc].wait)
+ 			WaitForSingleObject(pi.hProcess, INFINITE);
+ 	}
+ 	ExitProcess(0);
+ }
diff -crN ../orig/src/vim32s/vim32s.ini ./src/vim32s/vim32s.ini
*** ../orig/src/vim32s/vim32s.ini	Thu Jan 01 09:00:00 1970
--- ./src/vim32s/vim32s.ini	Mon Jun 08 01:22:12 1998
***************
*** 0 ****
--- 1,80 ----
+ #
+ # rs`                        vim:set sw=4 ts=4 et jc=s:
+ #
+ #                                                            Version 1.1
+ #                                                    1998 N  6   7 
+ #                                        yc   (ken_t@st.rim.or.jp)
+ #
+ #   g
+ #     o LAp[^B
+ #     o `t@CAs`fBNguB
+ #     o s`t@CXA`t@CO
+ #       XB
+ #           ex:vim32s.exe -> run.exe  => vim32s.ini -> run.ini
+ #       A SendTo GgALl
+ #       s`Rs[Oo^`B
+ #     o SendTo fBNguA SendTo `g
+ #       A[OGfB^w`AGfB
+ #       ^gggFXvB
+ #
+ #   p[^
+ #     extend (ext)                t@Cgq
+ #     etc                         fBNgw
+ #                                   -   JgfBNgt@C
+ #                                       
+ #                                   s   SHIFT L[g
+ #                                       pGg
+ #                                   w   NAvP[VI
+ #                                       Gg (t@CoRA
+ #                                       GfB^N[p)
+ #     search line (line)          K\ws
+ #                                 ftHg 25 s
+ #                                 w b AoCi
+ #     regular expression (reg)    K\
+ #                                 oCiA , 
+ #                                 t@C 16 iw
+ #     command line (cmd)          sR}h
+ #                                 R}hA " Kv
+ #
+ #   
+ #     1.  `t@CR[h SJIS 
+ #     2.  s 256 
+ #     3.  ep[^ ; 
+ #     4.  ep[^O (space/tab) 
+ #     5.  s # ARgs
+ #     6.  }b`OAR}h`s
+ #         Is
+ #     7.  K\A JVim hLgs{Ql
+ #         
+ #
+ #   Tv
+ #     1.  gq .c/.h  vim32.exe -no NAfBNg
+ #         
+ #     2.   vim: (modeline )  vim32.exe N
+ #     3.  gq .alm A "Subject: Re:" (M) 
+ #          vim32.exe -no N
+ #     4.  gq .alm A "Subject: Re:" O gvim.exe N
+ #     5.  gq .doc At@C 0xd0,0xcf,0x11,0xe0,0xa1 
+ #          Word N
+ #     6.  gq .el  mule N
+ #     7.  gq .tmp A "Subject: Re:" (M) AvZX
+ #         I[h mule N
+ #     8.  gq .tmp A "Subject: Re:" OAvZXI
+ #         [h notepad N
+ #     9.  A SHIFT L[ vim32.exe N
+ #    10.  A vim32.exe PEChE[hN
+ #
+ 
+ # ext  etc line  regular expression   command line
+  .c   ; + ;    ;                    ; "vim32.exe" -no
+  .h   ; + ;    ;                    ; "vim32.exe" -no
+       ;   ;  5 ; vim:               ; "vim32.exe"
+  .alm ; - ; 20 ; Subject: Re:       ; "vim32.exe" -no
+  .alm ; - ;    ;                    ; "gvim.exe"
+  .doc ; + ;  b ; d0,cf,11,e0,a1     ; "C:\Program Files\Microsoft Office\Office\WINWORD.EXE"
+  .el  ; + ;    ;                    ; "C:\usr\local\mule2\bin\mule.exe"
+  .tmp ; -w; 20 ; Subject: Re:       ; "C:\usr\local\mule2\bin\mule.exe"
+  .tmp ; -w;    ;                    ; "notepad.exe"
+       ; s ;    ;                    ; "vim32.exe"
+       ;   ;    ;                    ; "vim32.exe" -no
+ 
diff -crN ../orig/src/vim32s/vim32s.rc ./src/vim32s/vim32s.rc
*** ../orig/src/vim32s/vim32s.rc	Thu Jan 01 09:00:00 1970
--- ./src/vim32s/vim32s.rc	Fri Jan 22 06:40:44 1999
***************
*** 0 ****
--- 1,53 ----
+ #include <winver.h>
+ #include <winnt.h>
+ #include <winuser.h>
+ #define IDC_STATIC	(-1)
+ 
+ vim       ICON      "vim.ico"
+ 
+ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
+ #pragma code_page(932)
+ 
+ VS_VERSION_INFO		VERSIONINFO
+ 	FILEVERSION		1,1,0,0
+ 	PRODUCTVERSION	1,1,0,0
+ 	FILEFLAGSMASK	VS_FFI_FILEFLAGSMASK
+ 	FILEFLAGS		0L
+ 	FILEOS          VOS__WINDOWS32
+ 	FILETYPE        VFT_APP
+ 	FILESUBTYPE     VFT2_UNKNOWN
+ BEGIN
+ 	BLOCK	"StringFileInfo"
+ 	BEGIN
+ 		BLOCK	"041104B0"
+ 		BEGIN
+ 			VALUE "Comments",			"launcher"
+ 			VALUE "FileDescription",    "launcher 1.1"
+ 			VALUE "FileVersion",        "01.01.00.00"
+ 			VALUE "ProductVersion",     "01.01.00.00"
+ 			VALUE "InternalName",       "launcher"
+ 			VALUE "OriginalFilename",   "launcher"
+ 			VALUE "ProductName",        "Vi IMproved 3.0/JVim 3.0-j1.5"
+ 			VALUE "LegalCopyright",     "Ken'ichi Tsuchida"
+ 		END
+ 	END
+ 	BLOCK	"VarFileInfo"
+ 	BEGIN
+ 		VALUE "Translation", 0x0411, 0x04b0
+ 	END
+ END
+ 
+ SELECT DIALOG DISCARDABLE  0, 0, 127, 41
+ STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | WS_POPUP | 
+     WS_CAPTION
+ CAPTION "SELECT APPLICATION"
+ FONT 9, "lr oSVbN"
+ BEGIN
+     DEFPUSHBUTTON   "OK",1,9,22,34,14
+     PUSHBUTTON      "",2,48,22,34,14
+     COMBOBOX        1000,5,5,118,56,CBS_DROPDOWN | CBS_AUTOHSCROLL | 
+                     WS_VSCROLL | WS_TABSTOP
+     PUSHBUTTON      "Q",1003,87,22,34,14
+ END
+ 
+ //BuildVer:	1
Only in ../orig/src: vimresp
diff -crN ../orig/src/window.c ./src/window.c
*** ../orig/src/window.c	Wed Aug 10 13:54:10 1994
--- ./src/window.c	Sat Sep 25 23:19:14 1999
***************
*** 1157,1163 ****
--- 1157,1167 ----
  	{
  		if ((file_name = strsave(NameBuff)) == NULL)
  			return NULL;
+ #ifdef KANJI
+ 		if (getperm(fileconvsto(file_name)) >= 0)
+ #else
  		if (getperm(file_name) >= 0)
+ #endif
  			return file_name;
  	}
  	else							/* relative path, use 'path' option */
***************
*** 1183,1189 ****
--- 1187,1197 ----
  					file_name[len] = '/';
  				STRCPY(file_name + len + 1, NameBuff);
  			}
+ #ifdef KANJI
+ 			if (getperm(fileconvsto(file_name)) >= 0)
+ #else
  			if (getperm(file_name) >= 0)
+ #endif
  				return file_name;
  			dir += len;
  		}
diff -crN ../orig/src/winjmenu.h ./src/winjmenu.h
*** ../orig/src/winjmenu.h	Thu Jan 01 09:00:00 1970
--- ./src/winjmenu.h	Sat Dec 11 10:31:14 1999
***************
*** 0 ****
--- 1,75 ----
+ /* Win32 GUI mode param */
+ #define	IDM_EXTEND		0x100
+ #define IDM_CANCEL		0x110
+ #define IDM_EXIT		0x120
+ #define IDM_VER			0x130
+ #define IDM_VER2		0x131
+ #define IDM_HELP		0x140
+ #define IDM_NFILE		0x150
+ #define IDM_PFILE		0x160
+ #define IDM_TAIL		0x170
+ #define IDM_OPEN		0x200
+ #define IDM_SFILE		0x201
+ #define IDM_AFILE		0x202
+ #define IDM_NEW			0x210
+ #define IDM_FILE		0x220
+ #define IDM_CLICK		0x230
+ #define IDM_PRINT		0x240
+ #define IDM_SAVE		0x300
+ #define IDM_SBAR		0x310
+ #define IDM_UNICODE		0x320
+ #define IDM_TRAY		0x330
+ #define IDM_MOUSE		0x340
+ #define IDM_PRINTSET	0x350
+ #define	IDM_MENU		0x360
+ #define IDM_YANK		0x400
+ #define IDM_DELETE		0x410
+ #define IDM_PASTE		0x420
+ #define IDM_FONT		0x500
+ #define IDM_BDF			0x510
+ #define IDM_BDFONOFF	0x511
+ #define IDM_FWHITE		0x520
+ #define IDM_FBLACK		0x521
+ #define IDM_FBLUE		0x522
+ #define IDM_FCOLOR		0x523
+ #define IDM_BWHITE		0x530
+ #define IDM_BBLACK		0x531
+ #define IDM_BCOLOR		0x532
+ #define IDM_TBCOLOR		0x540
+ #define IDM_SOCOLOR		0x541
+ #define IDM_TICOLOR		0x542
+ #define IDM_DELCOLOR	0x543
+ #define IDM_BITMAP		0x550
+ #define IDM_BITMAPONOFF	0x551
+ #define IDM_BITMAPUP	0x552
+ #define IDM_BITMAPDOWN	0x553
+ #define IDM_BITMIXONOFF	0x554
+ #define IDM_BITMIXUP	0x555
+ #define IDM_BITMIXDOWN	0x556
+ #define IDM_WAVE		0x560
+ #define IDM_WAVEONOFF	0x561
+ #define IDM_CONFS		0x600
+ #define IDM_CONFUP		0x601
+ #define IDM_CONFDOWN	0x602
+ #define IDM_CONF0		0x610
+ #define IDM_CONF1		0x611
+ #define IDM_CONF2		0x612
+ #define IDM_CONF3		0x613
+ #define IDM_CONF4		0x614
+ #define IDM_CONF5		0x615
+ #define IDM_CONF6		0x616
+ #define IDM_CONF7		0x617
+ #define IDM_CONF8		0x618
+ #define IDM_CONF9		0x619
+ #define IDM_COMDS		0x620
+ #define IDM_COMD0		0x630
+ #define IDM_COMD1		0x631
+ #define IDM_COMD2		0x632
+ #define IDM_COMD3		0x633
+ #define IDM_COMD4		0x634
+ #define IDM_COMD5		0x635
+ #define IDM_COMD6		0x636
+ #define IDM_COMD7		0x637
+ #define IDM_COMD8		0x638
+ #define IDM_COMD9		0x639
+ #define	IDM_COMB		0x640
diff -crN ../orig/src/winjnt.c ./src/winjnt.c
*** ../orig/src/winjnt.c	Thu Jan 01 09:00:00 1970
--- ./src/winjnt.c	Thu Dec 23 18:05:38 1999
***************
*** 0 ****
--- 1,8068 ----
+ /* vi:ts=4:sw=4
+  *
+  * VIM - Vi IMproved
+  *
+  */
+ 
+ /*
+  * winnt.c
+  *
+  * Windows NT system-dependent routines.
+  * A reasonable approximation of the amiga dependent code.
+  * Portions lifted from SDK samples, from the MSDOS dependent code,
+  * and from NetHack 3.1.3.
+  *
+  * rogerk@wonderware.com
+  */
+ 
+ #include <io.h>
+ #include "vim.h"
+ #include "globals.h"
+ #include "param.h"
+ #include "ops.h"
+ #include "proto.h"
+ #include <fcntl.h>
+ #ifdef KANJI
+ #include "kanji.h"
+ #endif
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <errno.h>
+ #include <stdlib.h>
+ #include <direct.h>
+ #undef DELETE
+ #include <windows.h>
+ #include <windowsx.h>
+ #include <wincon.h>
+ #include <commctrl.h>
+ #include <dlgs.h>
+ #ifndef NO_WHEEL
+ # include <zmouse.h>
+ # ifndef SPI_GETWHEELSCROLLLINES
+ #  define SPI_GETWHEELSCROLLLINES   104
+ # endif
+ #endif
+ #include "winjmenu.h"
+ 
+ static int WaitForChar __ARGS((int));
+ static int cbrk_handler __ARGS(());
+ static void delay __ARGS((int));
+ static void gotoxy __ARGS((int, int));
+ static void scroll __ARGS((void));
+ static void vbell __ARGS((void));
+ static void cursor_visible __ARGS((int));
+ static void clrscr __ARGS((void));
+ static void clreol __ARGS((void));
+ static void insline __ARGS((int));
+ static void delline __ARGS((int));
+ static void normvideo __ARGS((void));
+ static void textattr __ARGS((WORD));
+ static void putch __ARGS((char));
+ static int kbhit __ARGS((void));
+ static int tgetch __ARGS((void));
+ static void resizeConBufAndWindow __ARGS((HANDLE, long, long));
+ #ifndef notdef
+ static int isctlkey __ARGS((void));
+ #endif
+ 
+ /* Win32 Console handles for input and output */
+ HANDLE          hConIn;
+ HANDLE          hConOut;
+ static int		maxRows;
+ #ifndef notdef
+ static HANDLE	h_mainthread;
+ #endif
+ static BOOL		v_nt;
+ static BOOL		IsTelnet = FALSE;
+ 
+ /* Win32 Screen buffer,coordinate,console I/O information */
+ CONSOLE_SCREEN_BUFFER_INFO csbi;
+ COORD           ntcoord;
+ INPUT_RECORD    ir;
+ 
+ /* The attribute of the screen when the editor was started */
+ WORD            DefaultAttribute;
+ 
+ #define KEY_TIME		1
+ #define MOVE_TIME		2
+ #define MOUSE_TIME		3
+ #define TRIPLE_TIME		4
+ #define SHOW_TIME		5
+ #define TAIL_TIME		6
+ #define WM_TASKTRAY		(WM_APP + 100)
+ 
+ #define KEY_REP			10		/* key repeat count */
+ #define KEY_REDRAW		7		/* redraw use count */
+ 
+ static INT				iScrollLines			= 3;
+ #ifndef NO_WHEEL
+ static UINT				uiMsh_MsgMouseWheel		= 0;
+ static UINT				uiMsh_Msg3DSupport		= 0;
+ static UINT				uiMsh_MsgScrollLines	= 0;
+ static BOOL				f3DSupport				= 0;
+ #endif
+ static BOOL				bIClose					= FALSE;
+ static int				nowRows = 25;
+ static int				nowCols = 80;
+ static char				keybuf[128];
+ static char_u		*	cbuf = keybuf;
+ static char				szAppName[16] = "JVim";
+ static int				c_size = sizeof(keybuf);
+ static int				c_end = 0;
+ static int				c_next = 0;
+ static int				c_ind = 0;
+ static int				w_p_ai;
+ static int				w_p_tw;
+ static int				w_p_et;
+ static int				w_p_uc;
+ 	   HWND				hVimWnd	= NULL;
+ static HACCEL			hAcc = NULL;
+ static int				config_cmd		= 0;
+ static DWORD			config_x;
+ static DWORD			config_y;
+ static DWORD			config_w;
+ static DWORD			config_h;
+ static DWORD			config_sbar		= TRUE;
+ static DWORD			config_save		= FALSE;
+ static DWORD			config_comb		= FALSE;
+ static DWORD			config_unicode	= FALSE;
+ static DWORD			config_tray		= FALSE;
+ static DWORD			config_mouse	= FALSE;
+ static DWORD			config_menu		= TRUE;
+ static LOGFONT			config_font;
+ static DWORD			config_fgcolor	= RGB(  0,   0,   0);
+ static DWORD			config_bgcolor	= RGB(255, 255, 255);
+ static DWORD			config_tbcolor	= (-1);	/* bold */
+ static DWORD			config_socolor	= (-1);	/* standout */
+ static DWORD			config_ticolor	= (-1);	/* invert/reverse */
+ static DWORD			config_color[16];
+ static char				config_printer[MAXPATHL];
+ static DWORD			config_bitmap	= FALSE;
+ static char				config_bitmapfile[MAXPATHL];
+ static DWORD			config_bitmix	= 0;
+ static BOOL				config_trans	= FALSE;
+ static DWORD			config_wave		= FALSE;
+ static char				config_wavefile[MAXPATHL];
+ #ifdef USE_BDF
+ extern void				GetBDFfont(HINSTANCE, int, char *, char *, int *, int *, DWORD *);
+ extern int				bdfTextOut(HDC, int, int, UINT, CONST RECT *, char *, UINT, CONST INT *, int, int, DWORD, DWORD);
+ static BOOL				config_bdf		= FALSE;
+ static char				config_bdffile[MAXPATHL];
+ static char				config_jbdffile[MAXPATHL];
+ static DWORD			config_fgbdf= RGB(  0,   0,   0);
+ static DWORD			config_bgbdf= RGB(255, 255, 255);
+ static int				v_bxchar	= 0;
+ static int				v_bychar	= 0;
+ #endif
+ static int				config_overflow = 3; 	/* larger than 2 */
+ static DWORD			config_show = 500;
+ static BOOL				config_ini	= FALSE;
+ static int				do_resize	= FALSE;
+ static BOOL				do_time		= FALSE;
+ static BOOL				do_vb		= FALSE;
+ static BOOL				do_trip		= FALSE;
+ static BOOL				do_drag		= FALSE;
+ static int				v_row		= 0;
+ static int				v_col		= 0;
+ static int				v_region	= 0;
+ static BOOL				v_cursor	= FALSE;
+ static BOOL				v_focus		= FALSE;
+ static int				v_caret		= 0;
+ static int				v_xchar		= 0;
+ static int				v_ychar		= 0;
+ static DWORD		*	v_fgcolor	= &config_fgcolor;
+ static DWORD		*	v_bgcolor	= &config_bgcolor;
+ static BOOL				v_ttfont;
+ static HFONT			v_font;
+ static INT			*	v_space		= NULL;
+ static short		*	v_char		= NULL;
+ static INT				v_ssize		= 0;
+ static HANDLE			hInst;
+ static HMENU			v_menu		= NULL;
+ static BOOL				v_extend	= FALSE;
+ static BOOL				v_macro		= FALSE;
+ static OSVERSIONINFO	ver_info;
+ static BOOL				do_msg		= FALSE;
+ static NOTIFYICONDATA	nIcon;
+ static BOOL CALLBACK	PrinterDialog(HWND, UINT, WPARAM, LPARAM);
+ static BOOL CALLBACK	BitmapDialog(HWND, UINT, WPARAM, LPARAM);
+ static BOOL CALLBACK	WaveDialog(HWND, UINT, WPARAM, LPARAM);
+ static BOOL CALLBACK	CommandDialog(HWND, UINT, WPARAM, LPARAM);
+ static BOOL CALLBACK	LoadDialog(HWND, UINT, WPARAM, LPARAM);
+ static void				LoadCommand();
+ static void				UnloadCommand();
+ static void				ScrollBar();
+ static int				isbitmap(char *);
+ static int				iswave(char *);
+ static BOOL				CopyScreenToBitmap(HDC hDC, BOOL force);
+ static BOOL				LoadBitmapFromBMPFile(HDC hDC, LPTSTR szFileName);
+ 
+ typedef HWND			(WINAPI *tCreateUpDownControl)(DWORD, int, int, int, int, HWND, int, HINSTANCE, HWND, int, int, int);
+ static	tCreateUpDownControl		pCreateUpDownControl	= NULL;
+ 
+ typedef struct filelist
+ {
+ 	char_u        **file;
+ 	int             nfiles;
+ 	int             maxfiles;
+ } FileList;
+ 
+ static void		addfile __ARGS((FileList *, char *, int));
+ #ifdef __BORLANDC__
+ static int      pstrcmp();      /* __ARGS((char **, char **)); BCC does not
+ 								 * like this */
+ #else
+ static int      pstrcmp __ARGS((const void *, const void *));
+ #endif
+ static void		strlowcpy __ARGS((char *, char *));
+ static int		expandpath __ARGS((FileList *, char *, int, int, int));
+ 
+ static int      cbrk_pressed = FALSE;   /* set by ctrl-break interrupt */
+ static int      ctrlc_pressed = FALSE;  /* set when ctrl-C or ctrl-break
+ 										 * detected */
+ 
+ /*
+  *
+  */
+ static VOID
+ LoadConfig(BOOL init)
+ {
+ 	HKEY		hKey;
+ 	DWORD		size;
+ 	DWORD		type;
+ 	int			openkey = FALSE;
+ 	char		name[_MAX_PATH];
+ 
+ 	if (BenchTime)
+ 		goto error;
+ 	for (;;)		/* ini file */
+ 	{
+ 		char			szIniFile[_MAX_PATH];	/* private profile file name  */
+ 		char			color[128];
+ 		char		*	p;
+ 		char		*	last;
+ 		HWND			hWnd;
+ 
+ 		if (GetModuleFileName(NULL, szIniFile, _MAX_PATH) == 0)
+ 			break;
+ 		last = p = szIniFile + 3;	/* drive + : + \ */
+ 		while (*p)
+ 		{
+ 			if (*p == '.')
+ 				last = p + 1;
+ 			p++;
+ 		}
+ 		*last = '\0';
+ 		lstrcpy(last, "ini");
+ 		if (getperm(szIniFile) == (-1))
+ 			break;
+ 		config_ini = TRUE;
+ 		hWnd = CreateDialog(hInst, "LOAD", NULL, LoadDialog);
+ 		ShowWindow(hWnd, SW_NORMAL);
+ 		Sleep(1000);
+ 		/* get parameter */
+ 		GetPrivateProfileString("vim", "printer", "",
+ 							config_printer, sizeof(config_printer), szIniFile);
+ 		config_unicode = GetPrivateProfileInt("vim", "unicode", FALSE, szIniFile);
+ 		Columns = GetPrivateProfileInt("vim", "cols", 80, szIniFile);
+ 		Rows = GetPrivateProfileInt("vim", "rows", 25, szIniFile);
+ 		config_sbar = GetPrivateProfileInt("vim", "scrollbar", TRUE, szIniFile);
+ 		GetPrivateProfileString("vim", "bitmap", "",
+ 							config_bitmapfile, sizeof(config_bitmapfile), szIniFile);
+ 		if (!isbitmap(config_bitmapfile))
+ 			config_bitmapfile[0] = '\0';
+ 		else
+ 			config_bitmap = TRUE;
+ 		GetPrivateProfileString("vim", "wave", "",
+ 						config_wavefile, sizeof(config_wavefile), szIniFile);
+ 		if (!iswave(config_wavefile))
+ 			config_wavefile[0] = '\0';
+ 		else
+ 			config_wave = TRUE;
+ #ifdef USE_BDF
+ 		GetPrivateProfileString("vim", "bdffile", "",
+ 						config_bdffile, sizeof(config_bdffile), szIniFile);
+ 		GetPrivateProfileString("vim", "jbdffile", "",
+ 						config_jbdffile, sizeof(config_jbdffile), szIniFile);
+ 		config_bdf = GetPrivateProfileInt("vim", "bdf", FALSE, szIniFile);
+ #endif
+ 		config_fgcolor = GetPrivateProfileInt("vim", "textcolor",
+ 													RGB(0, 0, 0), szIniFile);
+ 		if (config_fgcolor == 0)
+ 		{
+ 			config_fgcolor = RGB(0, 0, 0);
+ 			GetPrivateProfileString("vim", "textcolor", "",
+ 											color, sizeof(color), szIniFile);
+ 			if (strcmp("white", color) == 0)
+ 				config_fgcolor = RGB(255, 255, 255);
+ 			else if (strcmp("black", color) == 0)
+ 				config_fgcolor = RGB(0, 0, 0);
+ 			else if (strcmp("blue", color) == 0)
+ 				config_fgcolor = RGB(0, 0, 128);
+ 		}
+ 		config_bgcolor = GetPrivateProfileInt("vim", "backcolor",
+ 												RGB(255, 255, 255), szIniFile);
+ 		if (config_bgcolor == 0)
+ 		{
+ 			config_bgcolor = RGB(255, 255, 255);
+ 			GetPrivateProfileString("vim", "backcolor", "",
+ 											color, sizeof(color), szIniFile);
+ 			if (strcmp("white", color) == 0)
+ 				config_bgcolor = RGB(255, 255, 255);
+ 			else if (strcmp("black", color) == 0)
+ 				config_bgcolor = RGB(0, 0, 0);
+ 			else if (strcmp("blue", color) == 0)
+ 				config_bgcolor = RGB(0, 0, 128);
+ 		}
+ 		config_font.lfHeight
+ 					= GetPrivateProfileInt("vim", "fontsize", 14, szIniFile);
+ 		config_font.lfWidth			= 0;
+ 		config_font.lfEscapement	= 0;
+ 		config_font.lfOrientation	= 0;
+ 		config_font.lfWeight		= 0;
+ 		config_font.lfItalic		= 0;
+ 		config_font.lfUnderline		= 0;
+ 		config_font.lfStrikeOut		= 0;
+ 		/* config_font.lfCharSet	= OEM_CHARSET; */
+ 		config_font.lfCharSet		= SHIFTJIS_CHARSET;
+ 		config_font.lfOutPrecision	= OUT_DEFAULT_PRECIS;
+ 		config_font.lfClipPrecision = CLIP_DEFAULT_PRECIS;
+ 		config_font.lfQuality		= DEFAULT_QUALITY;
+ 		config_font.lfPitchAndFamily= FIXED_PITCH | FF_MODERN;
+ 		GetPrivateProfileString("vim", "fontname", "FixedSys",
+ 			config_font.lfFaceName, sizeof(config_font.lfFaceName), szIniFile);
+ 		config_x = CW_USEDEFAULT;
+ 		config_y = CW_USEDEFAULT;
+ 		config_w = CW_USEDEFAULT;
+ 		config_h = CW_USEDEFAULT;
+ 		DestroyWindow(hWnd);
+ 		return;
+ 	}
+ 	/*
+ 	 *	Common Registory
+ 	 */
+ 	if (RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Vim", 0,
+ 										KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS)
+ 		goto error;
+ 	openkey = TRUE;
+ 	size = sizeof(config_printer);
+ 	type = REG_SZ;
+ 	if (RegQueryValueEx(hKey, "printer", NULL, &type, (BYTE *)&config_printer, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_unicode);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "unicode", NULL, &type, (BYTE *)&config_unicode, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_tray);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "tray", NULL, &type, (BYTE *)&config_tray, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_mouse);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "mouse", NULL, &type, (BYTE *)&config_mouse, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_menu);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "menu", NULL, &type, (BYTE *)&config_menu, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_sbar);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "scrollbar", NULL, &type, (BYTE *)&config_sbar, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_color);
+ 	type = REG_BINARY;
+ 	if (RegQueryValueEx(hKey, "custcolor", NULL, &type, (BYTE *)config_color, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_overflow);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "overflow", NULL, &type, (BYTE *)&config_overflow, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_show);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "show", NULL, &type, (BYTE *)&config_show, &size)
+ 															!= ERROR_SUCCESS)
+ 		config_show = 500;
+ 	/*
+ 	 *	Original Registory
+ 	 */
+ 	RegCloseKey(hKey);
+ 	openkey = FALSE;
+ 	sprintf(name, "Software\\Vim\\%d", GuiConfig);
+ 	if (RegOpenKeyEx(HKEY_CURRENT_USER, name, 0,
+ 									KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS)
+ 		goto error;
+ 	openkey = TRUE;
+ 	size = sizeof(config_w);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "width", NULL, &type, (BYTE *)&config_w, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_h);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "height", NULL, &type, (BYTE *)&config_h, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(Columns);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "cols", NULL, &type, (BYTE *)&Columns, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(Rows);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "rows", NULL, &type, (BYTE *)&Rows, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_fgcolor);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "color-fg", NULL, &type, (BYTE *)&config_fgcolor, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_bgcolor);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "color-bg", NULL, &type, (BYTE *)&config_bgcolor, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_tbcolor);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "color-tb", NULL, &type, (BYTE *)&config_tbcolor, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_socolor);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "color-so", NULL, &type, (BYTE *)&config_socolor, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_ticolor);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "color-ti", NULL, &type, (BYTE *)&config_ticolor, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_font);
+ 	type = REG_BINARY;
+ 	if (RegQueryValueEx(hKey, "font", NULL, &type, (BYTE *)&config_font, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_bitmap);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "bitmap", NULL, &type, (BYTE *)&config_bitmap, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_bitmapfile);
+ 	type = REG_SZ;
+ 	if (RegQueryValueEx(hKey, "bitmapfile", NULL, &type, (BYTE *)config_bitmapfile, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	if (!isbitmap(config_bitmapfile))
+ 	{
+ 		config_bitmap = FALSE;
+ 		config_bitmapfile[0] = '\0';
+ 	}
+ 	size = sizeof(config_bitmix);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "bitmix", NULL, &type, (BYTE *)&config_bitmix, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_wave);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "wave", NULL, &type, (BYTE *)&config_wave, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_wavefile);
+ 	type = REG_SZ;
+ 	if (RegQueryValueEx(hKey, "wavefile", NULL, &type, (BYTE *)&config_wavefile, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	if (!iswave(config_wavefile))
+ 	{
+ 		config_wave = FALSE;
+ 		config_wavefile[0] = '\0';
+ 	}
+ #ifdef USE_BDF
+ 	size = sizeof(config_bdf);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "bdf", NULL, &type, (BYTE *)&config_bdf, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_bdffile);
+ 	type = REG_SZ;
+ 	if (RegQueryValueEx(hKey, "bdffile", NULL, &type, (BYTE *)&config_bdffile, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_jbdffile);
+ 	type = REG_SZ;
+ 	if (RegQueryValueEx(hKey, "bdffilej", NULL, &type, (BYTE *)&config_jbdffile, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_fgbdf);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "bdf-fg", NULL, &type, (BYTE *)&config_fgbdf, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_bgbdf);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "bdf-bg", NULL, &type, (BYTE *)&config_bgbdf, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ #endif
+ 	size = sizeof(config_comb);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "comb", NULL, &type, (BYTE *)&config_comb, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_save);
+ 	type = REG_DWORD;
+ 	if (RegQueryValueEx(hKey, "save", NULL, &type, (BYTE *)&config_save, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	if (config_save)
+ 	{
+ 		size = sizeof(config_x);
+ 		type = REG_DWORD;
+ 		if (RegQueryValueEx(hKey, "posx", NULL, &type, (BYTE *)&config_x, &size)
+ 															!= ERROR_SUCCESS)
+ 			goto error;
+ 		size = sizeof(config_y);
+ 		type = REG_DWORD;
+ 		if (RegQueryValueEx(hKey, "posy", NULL, &type, (BYTE *)&config_y, &size)
+ 															!= ERROR_SUCCESS)
+ 			goto error;
+ 		if ((int)config_x > GetSystemMetrics(SM_CXSCREEN))
+ 			config_x = init? CW_USEDEFAULT : 0;
+ 		if ((int)config_y > GetSystemMetrics(SM_CYSCREEN))
+ 			config_y = init? CW_USEDEFAULT : 0;
+ 		if (config_w > GetSystemMetrics(SM_CXSCREEN))
+ 			config_x = 0;
+ 		if (config_h > GetSystemMetrics(SM_CYSCREEN))
+ 			config_y = 0;
+ 	}
+ 	else
+ 	{
+ 		config_x = CW_USEDEFAULT;
+ 		config_y = CW_USEDEFAULT;
+ 	}
+ 	RegCloseKey(hKey);
+ 	return;
+ error:
+ 	if (openkey)
+ 		RegCloseKey(hKey);
+ 	if (!init && !BenchTime)
+ 		return;
+ 	Columns	= 80;
+ 	Rows	= 25;
+ 	config_x = CW_USEDEFAULT;
+ 	config_y = CW_USEDEFAULT;
+ 	if (BenchTime)
+ 		config_x = config_y = 1;
+ 	config_w = CW_USEDEFAULT;
+ 	config_h = CW_USEDEFAULT;
+ 
+ 	config_sbar		= TRUE;
+ 	config_save		= FALSE;
+ 	config_comb		= FALSE;
+ 	config_unicode	= FALSE;
+ 	config_tray		= FALSE;
+ 	config_mouse	= FALSE;
+ 	config_menu		= TRUE;
+ 	config_font.lfHeight		= 14;
+ 	config_font.lfWidth			= 0;
+ 	config_font.lfEscapement	= 0;
+ 	config_font.lfOrientation	= 0;
+ 	config_font.lfWeight		= 0;
+ 	config_font.lfItalic		= 0;
+ 	config_font.lfUnderline		= 0;
+ 	config_font.lfStrikeOut		= 0;
+ 	/* config_font.lfCharSet	= OEM_CHARSET; */
+ 	config_font.lfCharSet		= SHIFTJIS_CHARSET;
+ 	config_font.lfOutPrecision	= OUT_DEFAULT_PRECIS;
+ 	config_font.lfClipPrecision = CLIP_DEFAULT_PRECIS;
+ 	config_font.lfQuality		= DEFAULT_QUALITY;
+ 	config_font.lfPitchAndFamily= FIXED_PITCH | FF_MODERN;
+ 	strcpy(config_font.lfFaceName, "FixedSys");
+ 	config_fgcolor	= RGB(  0,   0,   0);
+ 	config_bgcolor	= RGB(255, 255, 255);
+ 	config_tbcolor	= (-1);
+ 	config_socolor	= (-1);
+ 	config_ticolor	= (-1);
+ 	config_printer[0] = '\0';
+ 	config_bitmap	= FALSE;
+ 	config_bitmapfile[0] = '\0';
+ 	config_bitmix	= 0;
+ 	config_trans	= FALSE;
+ 	config_wave		= FALSE;
+ 	config_wavefile[0] = '\0';
+ #ifdef USE_BDF
+ 	config_bdf		= FALSE;
+ 	config_bdffile[0]	= '\0';
+ 	config_jbdffile[0]	= '\0';
+ 	config_fgbdf	= RGB(  0,   0,   0);
+ 	config_bgbdf	= RGB(255, 255, 255);
+ 	if (BenchTime && GuiConfig)
+ 	{
+ 		sprintf(name, "Software\\Vim\\%d", GuiConfig);
+ 		if (RegOpenKeyEx(HKEY_CURRENT_USER, name, 0,
+ 										KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
+ 		{
+ 			size = sizeof(config_bdf);
+ 			type = REG_DWORD;
+ 			RegQueryValueEx(hKey, "bdf", NULL, &type, (BYTE *)&config_bdf, &size);
+ 			size = sizeof(config_bdffile);
+ 			type = REG_SZ;
+ 			RegQueryValueEx(hKey, "bdffile", NULL, &type, (BYTE *)&config_bdffile, &size);
+ 			size = sizeof(config_jbdffile);
+ 			type = REG_SZ;
+ 			RegQueryValueEx(hKey, "bdffilej", NULL, &type, (BYTE *)&config_jbdffile, &size);
+ 			RegCloseKey(hKey);
+ 		}
+ 	}
+ #endif
+ 	config_overflow	= 3;
+ 	if (BenchTime)
+ 	{
+ 		char_u	font[] = {	0xf5, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 							0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 							0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 							0x03, 0x02, 0x01, 0x31, 0x82, 0x6c, 0x82, 0x72,
+ 							0x20, 0x83, 0x53, 0x83, 0x56, 0x83, 0x62, 0x83,
+ 							0x4e, 0x00, 0x00, 0x00, 0x54, 0x67, 0x02, 0x00,
+ 							0xdb, 0x0f, 0x78, 0x7b, 0x2f, 0x13, 0x97, 0x27,
+ 							0x00, 0xa0, 0x00, 0x00};
+ 		memcpy(&config_font, font, sizeof(config_font));
+ 	}
+ }
+ 
+ static VOID
+ SaveConfig()
+ {
+ 	HKEY		hKey;
+ 	DWORD		size;
+ 	int			openkey = FALSE;
+ 	RECT		rcWindow;
+ 	char		name[_MAX_PATH];
+ 
+ 	if (BenchTime || config_ini)
+ 		return;
+ 	if (GetWindowRect(hVimWnd, &rcWindow))
+ 	{
+ 		config_x = rcWindow.left;
+ 		config_y = rcWindow.top;
+ 	}
+ 	else
+ 	{
+ 		config_x = CW_USEDEFAULT;
+ 		config_y = CW_USEDEFAULT;
+ 	}
+ 	/*
+ 	 *	Common Registory
+ 	 */
+ 	if (RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Vim", 0, NULL,
+ 			REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	openkey = TRUE;
+ #ifdef KANJI
+ 	{
+ 		size = strlen(longJpVersion) + 1;
+ 		if (RegSetValueEx(hKey, NULL, 0, REG_SZ, longJpVersion, size)
+ 															!= ERROR_SUCCESS)
+ 			goto error;
+ 	}
+ #endif
+ 	size = strlen(config_printer) + 1;
+ 	if (RegSetValueEx(hKey, "printer", 0, REG_SZ, (BYTE *)&config_printer, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_unicode);
+ 	if (RegSetValueEx(hKey, "unicode", 0, REG_DWORD, (BYTE *)&config_unicode, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_tray);
+ 	if (RegSetValueEx(hKey, "tray", 0, REG_DWORD, (BYTE *)&config_tray, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_mouse);
+ 	if (RegSetValueEx(hKey, "mouse", 0, REG_DWORD, (BYTE *)&config_mouse, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_menu);
+ 	if (RegSetValueEx(hKey, "menu", 0, REG_DWORD, (BYTE *)&config_menu, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_sbar);
+ 	if (RegSetValueEx(hKey, "scrollbar", 0, REG_DWORD, (BYTE *)&config_sbar, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_color);
+ 	if (RegSetValueEx(hKey, "custcolor", 0, REG_BINARY, (BYTE *)config_color, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_overflow);
+ 	if (RegSetValueEx(hKey, "overflow", 0, REG_DWORD, (BYTE *)&config_overflow, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	/*
+ 	 *	Original Registory
+ 	 */
+ 	RegCloseKey(hKey);
+ 	openkey = FALSE;
+ 	sprintf(name, "Software\\Vim\\%d", GuiConfig);
+ 	if (RegCreateKeyEx(HKEY_CURRENT_USER, name, 0, NULL,
+ 			REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &size)
+ 														!= ERROR_SUCCESS)
+ 		goto error;
+ 	openkey = TRUE;
+ 	{
+ 		GetDateFormat(LOCALE_USER_DEFAULT, 0, NULL, NULL, name, sizeof(name));
+ 		strcat(name, " ");
+ 		GetTimeFormat(LOCALE_USER_DEFAULT, 0, NULL, NULL, &name[strlen(name)], sizeof(name) - strlen(name));
+ 		size = strlen(name) + 1;
+ 		if (RegSetValueEx(hKey, NULL, 0, REG_SZ, name, size) != ERROR_SUCCESS)
+ 			goto error;
+ 	}
+ 	size = sizeof(config_w);
+ 	if (RegSetValueEx(hKey, "width", 0, REG_DWORD, (BYTE *)&config_w, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_h);
+ 	if (RegSetValueEx(hKey, "height", 0, REG_DWORD, (BYTE *)&config_h, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(Columns);
+ 	if (RegSetValueEx(hKey, "cols", 0, REG_DWORD, (BYTE *)&Columns, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(Rows);
+ 	if (RegSetValueEx(hKey, "rows", 0, REG_DWORD, (BYTE *)&Rows, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_fgcolor);
+ 	if (RegSetValueEx(hKey, "color-fg", 0, REG_DWORD, (BYTE *)&config_fgcolor, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_bgcolor);
+ 	if (RegSetValueEx(hKey, "color-bg", 0, REG_DWORD, (BYTE *)&config_bgcolor, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_tbcolor);
+ 	if (RegSetValueEx(hKey, "color-tb", 0, REG_DWORD, (BYTE *)&config_tbcolor, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_socolor);
+ 	if (RegSetValueEx(hKey, "color-so", 0, REG_DWORD, (BYTE *)&config_socolor, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_ticolor);
+ 	if (RegSetValueEx(hKey, "color-ti", 0, REG_DWORD, (BYTE *)&config_ticolor, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_font);
+ 	if (RegSetValueEx(hKey, "font", 0, REG_BINARY, (BYTE *)&config_font, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_bitmap);
+ 	if (RegSetValueEx(hKey, "bitmap", 0, REG_DWORD, (BYTE *)&config_bitmap, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = strlen(config_bitmapfile) + 1;
+ 	if (RegSetValueEx(hKey, "bitmapfile", 0, REG_SZ, (BYTE *)config_bitmapfile, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_bitmix);
+ 	if (RegSetValueEx(hKey, "bitmix", 0, REG_DWORD, (BYTE *)&config_bitmix, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_wave);
+ 	if (RegSetValueEx(hKey, "wave", 0, REG_DWORD, (BYTE *)&config_wave, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = strlen(config_wavefile) + 1;
+ 	if (RegSetValueEx(hKey, "wavefile", 0, REG_SZ, (BYTE *)&config_wavefile, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ #ifdef USE_BDF
+ 	size = sizeof(config_bdf);
+ 	if (RegSetValueEx(hKey, "bdf", 0, REG_DWORD, (BYTE *)&config_bdf, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = strlen(config_bdffile) + 1;
+ 	if (RegSetValueEx(hKey, "bdffile", 0, REG_SZ, (BYTE *)&config_bdffile, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = strlen(config_jbdffile) + 1;
+ 	if (RegSetValueEx(hKey, "bdffilej", 0, REG_SZ, (BYTE *)&config_jbdffile, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_fgbdf);
+ 	if (RegSetValueEx(hKey, "bdf-fg", 0, REG_DWORD, (BYTE *)&config_fgbdf, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_bgbdf);
+ 	if (RegSetValueEx(hKey, "bdf-bg", 0, REG_DWORD, (BYTE *)&config_bgbdf, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ #endif
+ 	size = sizeof(config_comb);
+ 	if (RegSetValueEx(hKey, "comb", 0, REG_DWORD, (BYTE *)&config_comb, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_save);
+ 	if (RegSetValueEx(hKey, "save", 0, REG_DWORD, (BYTE *)&config_save, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_x);
+ 	if (RegSetValueEx(hKey, "posx", 0, REG_DWORD, (BYTE *)&config_x, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	size = sizeof(config_y);
+ 	if (RegSetValueEx(hKey, "posy", 0, REG_DWORD, (BYTE *)&config_y, size)
+ 															!= ERROR_SUCCESS)
+ 		goto error;
+ 	RegCloseKey(hKey);
+ 	return;
+ error:
+ 	if (openkey)
+ 		RegCloseKey(hKey);
+ }
+ 
+ static BOOL
+ ResetScreen(HWND hWnd)
+ {
+ 	HDC         hDC;
+ 	TEXTMETRIC  tm;
+ 
+ 	if (NULL != v_font)
+ 		DeleteObject(v_font);
+ 
+ 	v_font = CreateFontIndirect(&config_font);
+ 
+ 	hDC = GetDC(hWnd);
+ 	SelectObject(hDC, v_font);
+ 	GetTextMetrics(hDC, &tm);
+ 	ReleaseDC(hWnd, hDC);
+ 
+ 	if (tm.tmPitchAndFamily & TMPF_TRUETYPE)
+ 		v_ttfont = TRUE;
+ 	else
+ 		v_ttfont = FALSE;
+ 	v_xchar = tm.tmAveCharWidth;
+ 	v_ychar = tm.tmHeight + tm.tmExternalLeading;
+ #ifdef USE_BDF
+ 	if (config_bdf)
+ 	{
+ 		v_xchar = v_bxchar;
+ 		v_ychar = v_bychar;
+ 	}
+ #endif
+ 
+ 	do_resize = TRUE;
+ 	if (v_cursor && v_focus)
+ 		HideCaret(hWnd);
+ 	v_caret = 0;
+ 	return(TRUE);
+ }
+ 
+ static VOID
+ MoveCursor(HWND hWnd)
+ {
+ 	int			width;
+ 
+ 	if (v_cursor && v_focus)
+ 	{
+ #ifdef KANJI
+ 		if (WinScreen == NULL)
+ 			width = 1;
+ 		else
+ 			width = ISkanji(*(WinScreen[v_row] + v_col)) ? 2 : 1;
+ #else
+ 		width = 1;
+ #endif
+ 		if (width != v_caret)
+ 		{
+ 			CreateCaret(hWnd, NULL, width * v_xchar, v_ychar);
+ 			ShowCaret(hWnd);
+ 			v_caret = width;
+ 		}
+ 	}
+ 	SetCaretPos(v_col * v_xchar, v_row * v_ychar);
+ }
+ 
+ static INT
+ WindowSize(HWND hWnd, WORD wVertSize, WORD wHorzSize)
+ {
+ 	RECT		rcClient;
+ 	int			i;
+ 
+ 	if (!IsIconic(hWnd) && GetClientRect(hWnd, &rcClient))
+ 	{
+ 		do_resize = TRUE;
+ 		nowRows = (rcClient.bottom - rcClient.top) / v_ychar;
+ 		nowCols = (rcClient.right - rcClient.left) / v_xchar;
+ 	}
+ 	else
+ 	{
+ 		nowRows = Rows;
+ 		nowCols = Columns;
+ 	}
+ 	if (nowCols > v_ssize)
+ 	{
+ 		v_ssize = nowCols;
+ 		free(v_space);
+ 		v_space = malloc(sizeof(INT) * nowCols);
+ 		free(v_char);
+ 		v_char = malloc(sizeof(short) * nowCols);
+ 	}
+ 	for (i = 0; i < v_ssize; i++)
+ 		v_space[i] = v_xchar;
+ 	return(0);
+ }
+ 
+ #ifdef KANJI
+ static DWORD
+ GetColor(int mode, int tb)
+ {
+ 	int			color;
+ 	DWORD		red;
+ 	DWORD		green;
+ 	DWORD		blue;
+ 	DWORD		rgb;
+ 	char_u	*	p = NULL;
+ 
+ 	if (tb == 't')
+ 		rgb = *v_fgcolor;
+ 	else
+ 		rgb = *v_bgcolor;
+ 	switch(mode) {
+ 	case 'b':	/* bold */
+ 		if (config_tbcolor != (-1))
+ 		{
+ 			if (tb == 't')
+ 				rgb = config_tbcolor;
+ 			else
+ 				rgb = config_socolor;
+ 		}
+ 		else
+ 			p = T_TB;
+ 		break;
+ 	case 's':	/* standout */
+ 		if (config_socolor != (-1))
+ 		{
+ 			if (tb == 't')
+ 				rgb = config_socolor;
+ 			else
+ 				rgb = config_tbcolor;
+ 		}
+ 		else
+ 			p = T_SO;
+ 		break;
+ 	default:	/* invert/reverse */
+ 		if (config_ticolor != (-1))
+ 		{
+ 			if (tb == 't')
+ 				rgb = config_ticolor;
+ 			else
+ 				rgb = config_tbcolor;
+ 		}
+ 		else
+ 			p = T_TI;
+ 		break;
+ 	}
+ 	if (p != NULL && *p != NUL)
+ 	{
+ 		p += 2;
+ 		color = getdigits(&p);
+ 		if (tb != 't')
+ 			color = (color & 0xf0) >> 4;
+ 		red = green = blue = 0;
+ 		if (color & FOREGROUND_BLUE)
+ 			blue = 255;
+ 		if (color & FOREGROUND_GREEN)
+ 			green = 255;
+ 		if (color & FOREGROUND_RED)
+ 			red = 255;
+ 		if ((color & FOREGROUND_INTENSITY) == 0)
+ 		{
+ 			blue	= (blue  == 0 ? 0 : 160);
+ 			green	= (green == 0 ? 0 : 160);
+ 			red		= (red   == 0 ? 0 : 160);
+ 		}
+ 		rgb = RGB(red, green, blue);
+ 	}
+ 	return(rgb);
+ }
+ #endif
+ 
+ static void
+ PrintChar(HDC hdc, RECT *rt, char_u *p, int size)
+ {
+ #ifdef USE_BDF
+ 	if (config_bdf)
+ 		bdfTextOut(hdc, rt->left, rt->top,
+ 					0, rt, p, size, v_space,
+ 					config_bitmap, GetBkColor(hdc) == *v_bgcolor ? FALSE : TRUE,
+ 					GetTextColor(hdc), GetBkColor(hdc));
+ 	else
+ #endif
+ 	if (config_unicode)
+ 	{
+ 		if (ver_info.dwPlatformId == VER_PLATFORM_WIN32_NT)
+ 		{
+ 			int				i;
+ 			int			*	w = v_space;
+ 
+ 			for (i = 0; i < size; i++, w++)
+ 			{
+ 				if (ISkanji(p[i]))
+ 				{
+ 					*w = v_xchar * 2;
+ 					i++;
+ 				}
+ 				else
+ 					*w = v_xchar;
+ 			}
+ 			size = MultiByteToWideChar(p_cpage, MB_PRECOMPOSED,
+ 												p, size, v_char, v_ssize);
+ 			ExtTextOutW(hdc, rt->left, rt->top,
+ 					config_bitmap ? 0 : ETO_OPAQUE, rt, v_char, size, v_space);
+ 		}
+ 		else if (v_ttfont)
+ 		{
+ 			int				i;
+ 			int			*	w = v_space;
+ 			LONG			left;
+ 
+ 			for (i = 0; i < size; i++, w++)
+ 			{
+ 				if (ISkanji(p[i]))
+ 				{
+ 					*w = v_xchar * 2;
+ 					i++;
+ 				}
+ 				else
+ 					*w = v_xchar;
+ 			}
+ 			w = v_space;
+ 			size = MultiByteToWideChar(p_cpage, MB_PRECOMPOSED,
+ 												p, size, v_char, v_ssize);
+ 			for (i = 0, left = rt->left; i < size; left += *w, i++, w++)
+ 			{
+ 				rt->left  = left;
+ 				rt->right = left + *w;
+ 				ExtTextOutW(hdc, left, rt->top,
+ 						config_bitmap ? 0 : ETO_OPAQUE, rt, &v_char[i], 1, w);
+ 			}
+ 		}
+ 		else
+ 		{
+ 			size = MultiByteToWideChar(p_cpage, MB_PRECOMPOSED,
+ 												p, size, v_char, v_ssize);
+ 			ExtTextOutW(hdc, rt->left, rt->top,
+ 						config_bitmap ? 0 : ETO_OPAQUE, rt, v_char, size, NULL);
+ 		}
+ 	}
+ 	else
+ 		ExtTextOutA(hdc, rt->left, rt->top,
+ 					config_bitmap ? 0 : ETO_OPAQUE, rt, p, size, v_space);
+ }
+ 
+ static BOOL
+ PaintWindow(HWND hWnd)
+ {
+ 	int				nRow, nCol, nEndRow, nEndCol;
+ 	HDC				hDC;
+ 	HFONT			hOldFont;
+ 	PAINTSTRUCT		ps;
+ 	RECT			rect;
+ 	char_u		*	p;
+ 	int				caret = FALSE;
+ 
+ 	if (GetUpdateRect(hWnd, &rect, FALSE) != TRUE)
+ 		return(0);
+ 
+ 	hDC		= BeginPaint(hWnd, &ps);
+ 	rect	= ps.rcPaint;
+ 	hOldFont= SelectObject(hDC, v_font);
+ 
+ 	if (config_bitmap && config_trans && CopyScreenToBitmap(hDC, FALSE))
+ 		SetBkMode(hDC, TRANSPARENT);
+ 	else if (config_bitmap && LoadBitmapFromBMPFile(hDC, config_bitmapfile))
+ 		SetBkMode(hDC, TRANSPARENT);
+ 	else
+ 		SetBkMode(hDC, OPAQUE);
+ 
+ 	if (!screen_valid())
+ 		goto no_draw;
+ 
+ 	nRow	= min(Rows - 1, max(0, rect.top / v_ychar));
+ 	nEndRow	= min(Rows - 1, ((rect.bottom - 1) / v_ychar));
+ #ifdef KANJI
+ 	nCol	= min(Columns - 1, max(0, (rect.left - v_xchar) / v_xchar));
+ #else
+ 	nCol	= min(Columns - 1, max(0, rect.left / v_xchar));
+ #endif
+ 	nEndCol	= min(Columns - 1, ((rect.right - 1) / v_xchar));
+ 	if (v_cursor && v_focus)
+ 	{
+ 		HideCaret(hWnd);
+ 		caret = TRUE;
+ 	}
+ 	for (; nRow <= nEndRow; nRow++)
+ 	{
+ 		int			i;
+ 		int			i0;
+ 		char_u		attr;
+ 
+ 		rect.top	= nRow * v_ychar;
+ 		rect.bottom	= nRow * v_ychar + v_ychar;
+ 		rect.left	= nCol * v_xchar;
+ 
+ 		p = WinScreen[nRow];
+ 		attr = 0xff;
+ 		for (i = i0 = nCol; i <= nEndCol; i++)
+ 		{
+ #ifdef KANJI
+ 			if (attr != p[Columns + i])
+ #else
+ 			if (attr != (p[i] & 0x80))
+ #endif
+ 			{
+ #ifdef KANJI
+ 				if (p[Columns + i0])
+ #else
+ 				if (p[i0] & 0x80)
+ #endif
+ 				{
+ #ifdef KANJI
+ 					if (do_vb)
+ 					{
+ 						SetTextColor(hDC, GetColor(p[Columns + i0], 'b'));
+ 						SetBkColor(hDC, GetColor(p[Columns + i0], 't'));
+ 					}
+ 					else
+ 					{
+ 						SetTextColor(hDC, GetColor(p[Columns + i0], 't'));
+ 						SetBkColor(hDC, GetColor(p[Columns + i0], 'b'));
+ 					}
+ #else
+ 					if (do_vb)
+ 					{
+ 						SetTextColor(hDC, *v_fgcolor);
+ 						SetBkColor(hDC, *v_bgcolor);
+ 					}
+ 					else
+ 					{
+ 						SetTextColor(hDC, *v_bgcolor);
+ 						SetBkColor(hDC, *v_fgcolor);
+ 					}
+ #endif
+ 				}
+ 				else
+ 				{
+ 					if (do_vb)
+ 					{
+ 						SetTextColor(hDC, *v_bgcolor);
+ 						SetBkColor(hDC, *v_fgcolor);
+ 					}
+ 					else
+ 					{
+ 						SetTextColor(hDC, *v_fgcolor);
+ 						SetBkColor(hDC, *v_bgcolor);
+ 					}
+ 				}
+ 				if ((i - i0) > 0)
+ 				{
+ 					rect.right	= i * v_xchar;
+ #ifdef KANJI
+ 					if ((ISkanjiPosition(p, i0 + 1) == 2)
+ 									&& (ISkanjiPosition(p, i) == 1))
+ 					{
+ 						rect.left  = (i0 + 1) * v_xchar;
+ 						rect.right = (i + 1) * v_xchar;
+ 						PrintChar(hDC, &rect, p + i0 + 1, i - i0);
+ 					}
+ 					else if (ISkanjiPosition(p, i0 + 1) == 2)
+ 					{
+ 						rect.left  = (i0 + 1) * v_xchar;
+ 						if ((i - (i0 + 1)) > 0)
+ 							PrintChar(hDC, &rect, p + i0 + 1, i - (i0 + 1));
+ 					}
+ 					else if (ISkanjiPosition(p, i) == 1)
+ 					{
+ 						rect.right = (i + 1) * v_xchar;
+ 						PrintChar(hDC, &rect, p + i0, (i - i0) + 1);
+ 					}
+ 					else
+ #endif
+ 					PrintChar(hDC, &rect, p + i0, i - i0);
+ 					rect.left	= i * v_xchar;
+ 					i0 = i;
+ 				}
+ #ifdef KANJI
+ 				attr = p[Columns + i];
+ #else
+ 				attr = (p[i] & 0x80);
+ #endif
+ 			}
+ 		}
+ 		if ((i - i0) > 0)
+ 		{
+ #ifdef KANJI
+ 			if (p[Columns + i0])
+ #else
+ 			if (p[i0] & 0x80)
+ #endif
+ 			{
+ #ifdef KANJI
+ 				if (do_vb)
+ 				{
+ 					SetTextColor(hDC, GetColor(p[Columns + i0], 'b'));
+ 					SetBkColor(hDC, GetColor(p[Columns + i0], 't'));
+ 				}
+ 				else
+ 				{
+ 					SetTextColor(hDC, GetColor(p[Columns + i0], 't'));
+ 					SetBkColor(hDC, GetColor(p[Columns + i0], 'b'));
+ 				}
+ #else
+ 				if (do_vb)
+ 				{
+ 					SetTextColor(hDC, *v_fgcolor);
+ 					SetBkColor(hDC, *v_bgcolor);
+ 				}
+ 				else
+ 				{
+ 					SetTextColor(hDC, *v_bgcolor);
+ 					SetBkColor(hDC, *v_fgcolor);
+ 				}
+ #endif
+ 			}
+ 			else
+ 			{
+ 				if (do_vb)
+ 				{
+ 					SetTextColor(hDC, *v_bgcolor);
+ 					SetBkColor(hDC, *v_fgcolor);
+ 				}
+ 				else
+ 				{
+ 					SetTextColor(hDC, *v_fgcolor);
+ 					SetBkColor(hDC, *v_bgcolor);
+ 				}
+ 			}
+ 			rect.right	= i * v_xchar;
+ #ifdef KANJI
+ 			if ((ISkanjiPosition(p, i0 + 1) == 2)
+ 							&& (ISkanjiPosition(p, i) == 1))
+ 			{
+ 				rect.left  = (i0 + 1) * v_xchar;
+ 				rect.right = (i + 1) * v_xchar;
+ 				PrintChar(hDC, &rect, p + i0 + 1, i - i0);
+ 			}
+ 			else if (ISkanjiPosition(p, i0 + 1) == 2)
+ 			{
+ 				rect.left  = (i0 + 1) * v_xchar;
+ 				if ((i - (i0 + 1)) > 0)
+ 					PrintChar(hDC, &rect, p + i0 + 1, i - (i0 + 1));
+ 			}
+ 			else if (ISkanjiPosition(p, i) == 1)
+ 			{
+ 				rect.right = (i + 1) * v_xchar;
+ 				PrintChar(hDC, &rect, p + i0, (i - i0) + 1);
+ 			}
+ 			else
+ #endif
+ 			PrintChar(hDC, &rect, p + i0, i - i0);
+ 		}
+ 	}
+ no_draw:
+ 	SelectObject(hDC, hOldFont);
+ 	EndPaint(hWnd, &ps);
+ 	if (caret == TRUE)
+ 		ShowCaret(hWnd);
+ 	return(0);
+ }
+ 
+ static BOOL
+ keybuf_chk(area)
+ int			area;
+ {
+ 	char		*	p;
+ 
+ 	if ((area + c_end) >= c_size)
+ 	{
+ 		if ((p = alloc(c_end + ((area / sizeof(keybuf)) + 1) * sizeof(keybuf))) != NULL)
+ 		{
+ 			memcpy(p, cbuf, c_size);
+ 			if (cbuf != keybuf)
+ 				free(cbuf);
+ 			cbuf = p;
+ 			c_size = c_end + ((area / sizeof(keybuf)) + 1) * sizeof(keybuf);
+ 			return(TRUE);
+ 		}
+ 		return(FALSE);
+ 	}
+ 	return(TRUE);
+ }
+ 
+ static WIN *
+ get_linecol(LPARAM lParam, FPOS *pos, int *row, int *col)
+ {
+ 	WIN		*	wp;
+ 	int			x;
+ 	int			y;
+ 	int			i;
+ 	int			j;
+ 	linenr_t	lnum;
+ 
+ 	*col = x = min(Columns - 1, max(0, LOWORD(lParam) / v_xchar));
+ 	*row = y = min(Rows - 1, (HIWORD(lParam) - 1) / v_ychar);
+ #ifdef KANJI
+ 	if (ISkanjiPosition(WinScreen[y], x + 1) == 2)
+ 		x--;
+ #endif
+ 	wp = firstwin;
+ 	pos->lnum = 0;
+ 	pos->col = MAXCOL;
+ 	while (wp != NULL)
+ 	{
+ 		if (wp->w_winpos <= y && y < (wp->w_winpos + wp->w_height))
+ 			break;
+ 		wp = wp->w_next;
+ 	}
+ 	if (wp == NULL)
+ 		return(NULL);
+ 	if (wp->w_p_wrap)			/* long line wrapping, adjust curwin->w_row */
+ 	{
+ 		lnum = wp->w_topline;
+ 		for (i = wp->w_winpos; i < (wp->w_winpos + wp->w_height); )
+ 		{
+ 			if (wp->w_buffer->b_ml.ml_line_count < lnum)
+ 				break;
+ 			j = plines_win(wp, lnum);
+ 			if (i <= y && y < (i + j))
+ 			{
+ 				j = Columns * (y - i) + x - (wp->w_p_nu ? 8 : 0);
+ 				if (j < 0)
+ 					j = 0;
+ 				pos->col = vcol2col(wp, lnum, j, NULL);
+ 				pos->lnum = lnum;
+ 				return(wp);
+ 			}
+ 			i += j;
+ 			lnum ++;
+ 		}
+ 	}
+ 	else
+ 	{
+ 		lnum = wp->w_topline + (y - wp->w_winpos);
+ 		j = x - (wp->w_p_nu ? 8 : 0) + curwin->w_leftcol;
+ 		if (j < 0)
+ 			j = 0;
+ 		pos->col = vcol2col(wp, lnum, j, NULL);
+ 		pos->lnum = lnum;
+ 	}
+ 	return(wp);
+ }
+ 
+ static WIN *
+ get_statusline(LPARAM lParam, int *row)
+ {
+ 	WIN		*	wp;
+ 	int			y;
+ 
+ 	*row = y = min(Rows - 1, (HIWORD(lParam) - 1) / v_ychar);
+ 	wp = firstwin;
+ 	while (wp != NULL)
+ 	{
+ 		if (y == (wp->w_winpos + wp->w_height))
+ 			break;
+ 		wp = wp->w_next;
+ 	}
+ 	if (wp == NULL || wp == lastwin)
+ 		return(NULL);
+ 	return(wp);
+ }
+ 
+ static VOID
+ cursor_refresh(HWND hWnd)
+ {
+ 	adjust_cursor();
+ 	cursupdate();
+ 	if (VIsual.lnum)
+ 		updateScreen(INVERTED);
+ 	if (must_redraw)
+ 		updateScreen(must_redraw);
+ 	showruler(FALSE);
+ 	setcursor();
+ 	cursor_on();
+ 	flushbuf();
+ 	MoveCursor(hWnd);
+ }
+ 
+ static VOID
+ clear_visual(HWND hWnd)
+ {
+ 	if (VIsual.lnum != 0)
+ 	{
+ 		VIsual.lnum = 0;
+ 		Visual_block = FALSE;
+ 		updateScreen(NOT_VALID);
+ 		cursor_refresh(hWnd);
+ 	}
+ }
+ 
+ static VOID
+ clear_cmode(HWND hWnd)
+ {
+ 	int				i;
+ 	int				j;
+ 	char_u		*	p;
+ 	RECT			rect;
+ 
+ 	for (i = 0; i < Rows; i++)
+ 	{
+ 		p = WinScreen[i];
+ 		for (j = 0; j < Columns; j++)
+ 			p[Columns + j] &= ~0x80;
+ 	}
+ 	rect.left	= 0;
+ 	rect.right	= Columns * v_xchar;
+ 	rect.top	= 0;
+ 	rect.bottom	= Rows * v_ychar;
+ 	InvalidateRect(hWnd, &rect, FALSE);
+ }
+ 
+ static VOID
+ draw_cmode(HWND hWnd, int cs_row, int cs_col, int ce_row, int ce_col)
+ {
+ 	int				nRow, nCol, nEndRow, nEndCol;
+ 	int				i;
+ 	int				j;
+ 	char_u		*	p;
+ 	RECT			rect;
+ 
+ 	clear_cmode(hWnd);
+ 	nRow	= min(cs_row, ce_row);
+ 	nEndRow	= max(cs_row, ce_row);
+ 	nCol	= min(cs_col, ce_col);
+ 	nEndCol	= max(cs_col, ce_col);
+ 	for (i = nRow; i <= nEndRow; i++)
+ 	{
+ 		p = WinScreen[i];
+ 		for (j = nCol; j <= nEndCol; j++)
+ 		{
+ #ifdef KANJI
+ 			if (j == nCol)
+ 			{
+ 				if (ISkanjiPosition(p, j + 1) == 2)
+ 					p[Columns + j - 1] |= 0x80;
+ 			}
+ 			else if (j == nEndCol)
+ 			{
+ 				if (ISkanjiPosition(p, j + 1) == 1)
+ 					p[Columns + j + 1] |= 0x80;
+ 			}
+ #endif
+ 			p[Columns + j] |= 0x80;
+ 		}
+ 	}
+ 	rect.left	= nCol * v_xchar;
+ 	rect.right	= (nEndCol + 1) * v_xchar - 1;
+ 	rect.top	= nRow * v_ychar;
+ 	rect.bottom	= (nEndRow + 1) * v_ychar - 1;
+ 	InvalidateRect(hWnd, &rect, FALSE);
+ }
+ 
+ static VOID
+ yank_cmode(HWND hWnd, BOOL clip)
+ {
+ 	HANDLE			hClipData;
+ 	char		*	lpClipData;
+ 	int				i;
+ 	int				j;
+ 	char_u		*	p;
+ 	char_u		*	ptr;
+ 	int				num = 0;
+ 	int				line = 0;
+ 	BOOL			flg;
+ 
+ 	for (i = 0; i < Rows; i++)
+ 	{
+ 		flg = FALSE;
+ 		p = WinScreen[i];
+ 		for (j = 0; j < Columns; j++)
+ 		{
+ 			if (p[Columns + j] & 0x80)
+ 			{
+ 				num++;
+ 				flg = TRUE;
+ 			}
+ 		}
+ 		if (flg)
+ 			line++;
+ 	}
+ 	if (num == 0)
+ 		return;
+ 	if (clip)
+ 	{
+ 		hClipData = GlobalAlloc(GMEM_MOVEABLE, num + (line * 2));
+ 		if (hClipData == NULL)
+ 			return;
+ 		if ((lpClipData = GlobalLock(hClipData)) == NULL)
+ 		{
+ 			GlobalFree(hClipData);
+ 			return;
+ 		}
+ 		ptr = lpClipData;
+ 		for (i = 0; i < Rows; i++)
+ 		{
+ 			flg = FALSE;
+ 			p = WinScreen[i];
+ 			for (j = 0; j < Columns; j++)
+ 			{
+ 				if (p[Columns + j] & 0x80)
+ 				{
+ 					*ptr++ = p[j];
+ 					flg = TRUE;
+ 				}
+ 			}
+ 			if (flg)
+ 			{
+ 				*ptr++ = '\r';
+ 				*ptr++ = '\n';
+ 			}
+ 		}
+ 		ptr[-2] = '\0';
+ 		GlobalUnlock(hClipData);
+ 		if (OpenClipboard(hWnd) == FALSE)
+ 		{
+ 			GlobalFree(hClipData);
+ 			return;
+ 		}
+ 		EmptyClipboard();
+ 		SetClipboardData(CF_TEXT, hClipData);
+ 		CloseClipboard();
+ 	}
+ 	else
+ 	{
+ 		if (!keybuf_chk(num + line))
+ 			return;
+ 		for (i = 0; i < Rows; i++)
+ 		{
+ 			flg = FALSE;
+ 			p = WinScreen[i];
+ 			for (j = 0; j < Columns; j++)
+ 			{
+ 				if (p[Columns + j] & 0x80)
+ 				{
+ 					cbuf[c_end++] = p[j];
+ 					flg = TRUE;
+ 				}
+ 			}
+ 			if (flg)
+ 				cbuf[c_end++] = '\n';
+ 		}
+ 		cbuf[--c_end] = '\0';
+ 	}
+ }
+ 
+ static void
+ TopWindow(HWND hWnd)
+ {
+ 	SetForegroundWindow(hWnd);
+ 	if (ver_info.dwPlatformId != VER_PLATFORM_WIN32_NT
+ 			&& ver_info.dwMajorVersion == 4
+ 			&& ver_info.dwMinorVersion == 10)
+ 	{		/* Windows 98 */
+ 		if (GetForegroundWindow() != hVimWnd)
+ 		{
+ 			ShowWindow(hWnd, SW_MINIMIZE);
+ 			OpenIcon(hWnd);
+ 		}
+ 	}
+ }
+ 
+ LRESULT FAR PASCAL
+ WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+ {
+ 	extern void			start_arrow __ARGS((void));
+ 	static DWORD		repeat = 0;
+ 	static BOOL			state_shift	= FALSE;
+ 	static BOOL			state_ctrl	= FALSE;
+ 	static WIN		*	selwin		= NULL;
+ 	static WIN		*	selstatus	= NULL;
+ 	static FPOS			selpos;
+ 	static int			updown	= 0;
+ 	static int			leftright = 0;
+ 	static BOOL			vmode	= FALSE;
+ 	static BOOL			cmode	= FALSE;
+ 	static int			cs_row	= 0;
+ 	static int			cs_col	= 0;
+ 	static int			ce_row	= 0;
+ 	static int			ce_col	= 0;
+ 	static LPARAM		mouse_pos;
+ 	static BOOL			s_cursor	= TRUE;
+ 	static DWORD		oldmix	= 0;
+ 	static FILETIME		byFile;
+ 	static char			filter[] = "ALL\0*.*\0C\0*.cpp;*.h;*.def;*.rc\0DOC\0*.txt;*.doc\0";
+ 	CHOOSEFONT			cfFont;
+ 	OPENFILENAME		ofn;
+ 	CHOOSECOLOR			cfColor;
+ 	COPYDATASTRUCT	*	cds;
+ 	DWORD			*	pColor;
+ 	HANDLE				hClipData;
+ 	char			*	lpClipData;
+ 	char_u			*	p;
+ 	INT					i;
+ 	INT					files;
+ 	WIN				*	wp;
+ 	BUF				*	buf;
+ 	FPOS				pos;
+ 	int					row;
+ 	int					col;
+ 	int					more;
+ 	BOOL				redraw	= FALSE;
+ 	RECT				rcWindow;
+ 	HMENU				hEdit;
+ 	HMENU				hMenu;
+ 	POINT				point;
+ 	DWORD				wk;
+ 	BOOL				bClear;
+ 
+ 	switch (uMsg) {
+ 	case WM_CREATE:
+ 		nIcon.cbSize	= sizeof(NOTIFYICONDATA);
+ 		nIcon.uID		= 1;
+ 		nIcon.hWnd		= hWnd;
+ 		nIcon.uFlags	= NIF_MESSAGE|NIF_ICON|NIF_TIP;
+ 		nIcon.hIcon		= LoadIcon(hInst, "vim");
+ 		nIcon.uCallbackMessage = WM_TASKTRAY;
+ 		DragAcceptFiles(hWnd, TRUE);
+ 		ResetScreen(hWnd);
+ 		MoveCursor(hWnd);
+ 		return(0);
+ 	case WM_TASKTRAY:
+ 		switch (lParam) {
+ 		case WM_LBUTTONDBLCLK:
+ 			Shell_NotifyIcon(NIM_DELETE, &nIcon);
+ 			ShowWindow(hWnd, SW_SHOW);
+ 			OpenIcon(hWnd);
+ 			SetForegroundWindow(hWnd);
+ 			break;
+ 		case WM_RBUTTONDOWN:
+ 			SetForegroundWindow(hWnd);
+ 			GetCursorPos(&point);
+ 			hEdit = CreatePopupMenu();
+ 			AppendMenu(hEdit,  MF_STRING,   IDM_OPEN,  "&Open");
+ 			AppendMenu(hEdit,  MF_STRING,   IDM_EXIT,  "&Exit");
+ 			AppendMenu(hEdit,  MF_SEPARATOR,0,			NULL);
+ 			AppendMenu(hEdit,  MF_STRING,   IDM_CANCEL, "&Cancel");
+ 			TrackPopupMenu(hEdit, TPM_LEFTBUTTON | TPM_RIGHTBUTTON,
+ 								point.x, point.y, 0, hWnd, NULL);
+ 			DestroyMenu(hEdit);
+ 			break;
+ 		}
+ 		return(0);
+ 	case WM_ERASEBKGND:
+ 		return(1);
+ 	case WM_PAINT:
+ 		return(PaintWindow(hWnd));
+ 	case WM_SIZE:
+ 		return(WindowSize(hWnd, HIWORD(lParam), LOWORD(lParam)));
+ 	case WM_MOVE:
+ 		if (config_bitmap && config_trans)
+ 		{
+ 			KillTimer(hWnd, MOVE_TIME);
+ 			SetTimer(hWnd, MOVE_TIME, 300, NULL);
+ 		}
+ 		break;
+ 	case WM_ACTIVATE:
+ 		if (config_bitmap && config_trans && LOWORD(wParam) != WA_INACTIVE)
+ 			CopyScreenToBitmap(NULL, TRUE);
+ 		break;
+ 	case WM_NCLBUTTONDOWN:
+ 		if (config_bitmap && config_trans && wParam == HTCAPTION)
+ 			CopyScreenToBitmap(NULL, TRUE);
+ 		break;
+ 	case WM_CHAR:
+ 		if (cmode)
+ 		{
+ 			if (LOBYTE(wParam) == Ctrl('C'))
+ 				yank_cmode(hWnd, TRUE);
+ 			cmode = FALSE;
+ 			clear_cmode(hWnd);
+ 			if (LOBYTE(wParam) == Ctrl('C'))
+ 			{
+ 				ctrlc_pressed = FALSE;
+ 				return(0);
+ 			}
+ 		}
+ 		if (s_cursor && config_mouse
+ 			&& (((State & NORMAL) && strchr("aAiIoOR", LOBYTE(wParam)) != NULL)
+ 								|| ((State & INSERT) && LOBYTE(wParam) != ESC)))
+ 		{
+ 			s_cursor = FALSE;
+ 			ShowCursor(FALSE);
+ 		}
+ 		else if (!s_cursor && (State & INSERT) && LOBYTE(wParam) == ESC)
+ 		{
+ 			s_cursor = TRUE;
+ 			ShowCursor(TRUE);
+ 		}
+ 		if (!keybuf_chk(2))
+ 			return(0);
+ 		switch (LOBYTE(wParam)) {
+ 		case Ctrl('^'):
+ 		case Ctrl('@'):
+ 			/* already processed on WM_KEYDOWN */
+ 			break;
+ 		default:
+ #ifdef FEPCTRL
+ 			if (!(State & NORMAL)
+ 					&& (curbuf->b_p_fc && (p_fk != NULL && STRRCHR(p_fk, ESC+'@') != NULL)))
+ 			/* shift + space key special routine */
+ 			{
+ 				static int		kanji = 0;
+ 
+ 				if (kanji)
+ 				{
+ 					if (LOBYTE(wParam) == 0x40)
+ 					{
+ 						if (fep_get_mode())
+ 							fep_force_off();
+ 						else
+ 							fep_force_on();
+ 					}
+ 					else
+ 					{
+ 						cbuf[c_end++] = kanji;
+ 						cbuf[c_end++] = LOBYTE(wParam);
+ 					}
+ 					kanji = 0;
+ 				}
+ 				else if (LOBYTE(wParam) == ' ' && state_shift)
+ 				{
+ 					if (fep_get_mode())
+ 						fep_force_off();
+ 					else
+ 						fep_force_on();
+ 				}
+ 				else if (LOBYTE(wParam) == 0x81 && state_shift)
+ 					kanji = 0x81;
+ 				else
+ 					cbuf[c_end++] = LOBYTE(wParam);
+ 			}
+ 			else
+ #endif
+ 			if (repeat && (config_overflow < 3))
+ 				cbuf[c_end++] = LOBYTE(wParam);
+ 			else if (repeat && (LOBYTE(wParam) == 'j'
+ 										|| LOBYTE(wParam) == 'k'
+ 										|| LOBYTE(wParam) == Ctrl('N')
+ 										|| LOBYTE(wParam) == Ctrl('P')
+ 										|| LOBYTE(wParam) == Ctrl('E')
+ 										|| LOBYTE(wParam) == Ctrl('Y')))
+ 			{
+ 				i = 1;
+ 				if ((p_sj > 1)
+ 						&& ((curwin->w_winpos + curwin->w_height - 1 <= v_row)
+ 												|| (curwin->w_winpos == v_row)))
+ 					;
+ 				else if (curwin->w_height <= 3)
+ 					;
+ 				else if ((curwin->w_winpos + curwin->w_height - 1 <= v_row)
+ 												|| (curwin->w_winpos == v_row))
+ 				{
+ 					repeat++;
+ 					i = repeat / KEY_REP + (repeat > 3 ? 2 : 1);
+ 					if (i > curwin->w_p_scroll)
+ 						i = curwin->w_p_scroll;
+ 					if (i > config_overflow)
+ 						i = config_overflow;
+ 				}
+ 				if (i == 0)
+ 					;
+ 				else if (vpeekc() != NUL)
+ 				{
+ 					if (c_next == 0)
+ 						;
+ 					else if ((c_end - c_next) <= config_overflow)
+ 						i = 1;
+ 					else
+ 					{
+ 						if (i > 3)
+ 							config_overflow = --i;
+ 						i = 0;		/* key buffer overflow */
+ 					}
+ 				}
+ 				else
+ 				{
+ 					if (i == config_overflow && curwin->w_height > 10 && c_next == 0)
+ 						config_overflow = ++i;
+ 					else if ((c_end - c_next) <= config_overflow)
+ 					{
+ 						col = config_overflow - (c_end - c_next);
+ 						i = i > col ? col : i;
+ 					}
+ 					else
+ 						i = 0;		/* key buffer overflow */
+ 				}
+ 				while (i--)
+ 				{
+ 					if (!keybuf_chk(1))
+ 						break;
+ 					cbuf[c_end++] = LOBYTE(wParam);
+ 				}
+ 			}
+ 			else if (repeat && (!curwin->w_p_wrap || (p_ww & 4))
+ 							&& (LOBYTE(wParam) == 'h' || LOBYTE(wParam) == 'l'))
+ 			{
+ 				repeat++;
+ 				if (c_next != 0 && vpeekc() != NUL)
+ 					;
+ 				else if (repeat > KEY_REP)
+ 					cbuf[c_end++] = LOBYTE(wParam);
+ 				cbuf[c_end++] = LOBYTE(wParam);
+ 			}
+ 			else if (repeat && isalpha(LOBYTE(wParam))
+ 					&& (c_end - c_next) && (cbuf[c_end - 1] == LOBYTE(wParam)))
+ 				/* key repeat cancel */;
+ 			else
+ 				cbuf[c_end++] = LOBYTE(wParam);
+ 			break;
+ 		}
+ 		return(0);
+ 	case WM_KEYDOWN:
+ 		if ((State & NORMAL) && (lParam & 0x40000000))
+ 		{
+ 			if (repeat == 0)
+ 				repeat = 1;
+ 		}
+ 		else
+ 			repeat = 0;
+ 		if (wParam == VK_SHIFT)
+ 			state_shift	= TRUE;
+ 		else if (wParam == VK_CONTROL)
+ 			state_ctrl	= TRUE;
+ 		else if (wParam == VK_NUMLOCK || wParam == VK_CAPITAL)
+ 			;
+ 		else if (state_ctrl)
+ 		{
+ 			if (GetKeyState(VK_CONTROL) & 0x8000)
+ 			{
+ 				if (!keybuf_chk(2))
+ 					return(0);
+ 				switch (wParam) {
+ 				case '6':
+ 				case 0xde: /* '^' key */
+ 					cbuf[c_end++] = '^' & 0x1f;
+ 					break;
+ 				case 'c':
+ 				case 'C':
+ 					ctrlc_pressed = TRUE;
+ 					break;
+ 				case '@':
+ 				case 0xc0: /* '@' key */
+ 					cbuf[c_end++] = K_ZERO;
+ 					break;
+ 				case VK_LEFT:
+ 					cbuf[c_end++] = K_NUL;
+ 					cbuf[c_end++] = 's';
+ 					break;
+ 				case VK_RIGHT:
+ 					cbuf[c_end++] = K_NUL;
+ 					cbuf[c_end++] = 't';
+ 					break;
+ 				}
+ 			}
+ 		}
+ 		else if (state_shift)
+ 		{
+ 			if (!keybuf_chk(2))
+ 				return(0);
+ 			switch (wParam) {
+ 			case VK_LEFT:	cbuf[c_end++] = K_NUL; cbuf[c_end++] = 's'; break;
+ 			case VK_RIGHT:	cbuf[c_end++] = K_NUL; cbuf[c_end++] = 't'; break;
+ 			case VK_F1:		cbuf[c_end++] = K_NUL; cbuf[c_end++] = 'T'; break;
+ 			case VK_F2:		cbuf[c_end++] = K_NUL; cbuf[c_end++] = 'U'; break;
+ 			case VK_F3:		cbuf[c_end++] = K_NUL; cbuf[c_end++] = 'V'; break;
+ 			case VK_F4:		cbuf[c_end++] = K_NUL; cbuf[c_end++] = 'W'; break;
+ 			case VK_F5:		cbuf[c_end++] = K_NUL; cbuf[c_end++] = 'X'; break;
+ 			case VK_F6:		cbuf[c_end++] = K_NUL; cbuf[c_end++] = 'Y'; break;
+ 			case VK_F7:		cbuf[c_end++] = K_NUL; cbuf[c_end++] = 'Z'; break;
+ 			case VK_F8:		cbuf[c_end++] = K_NUL; cbuf[c_end++] = '['; break;
+ 			case VK_F9:		cbuf[c_end++] = K_NUL; cbuf[c_end++] = '\\'; break;
+ 			case VK_F10:	cbuf[c_end++] = K_NUL; cbuf[c_end++] = ']'; break;
+ 			}
+ 		}
+ 		else
+ 		{
+ 			if (repeat && (config_overflow < 3))
+ 				;
+ 			else if (repeat && (wParam == VK_UP || wParam == VK_DOWN))
+ 			{
+ 				if ((p_sj > 1)
+ 						&& ((curwin->w_winpos + curwin->w_height - 1 <= v_row)
+ 												|| (curwin->w_winpos == v_row)))
+ 					;
+ 				else if (curwin->w_height <= 3)
+ 					;
+ 				else
+ 				{
+ 					repeat++;
+ 					i = repeat / KEY_REP + 1;
+ 					if (i > curwin->w_p_scroll)
+ 						i = curwin->w_p_scroll;
+ 					if (i > config_overflow)
+ 						i = config_overflow;
+ 					if (vpeekc() != NUL)
+ 					{
+ 						if (c_next == 0)
+ 							;
+ 						else if ((c_end - c_next) <= (2 * config_overflow))
+ 							i = 1;
+ 						else
+ 						{
+ 							if (i > 3)
+ 								config_overflow = --i;
+ 							i = 0;		/* key buffer overflow */
+ 						}
+ 					}
+ 					else
+ 					{
+ 						if (i == config_overflow && curwin->w_height > 10 && c_next == 0)
+ 							config_overflow = ++i;
+ 						else if ((c_end - c_next) <= (config_overflow * 2))
+ 						{
+ 							col = ((config_overflow * 2) - (c_end - c_next)) / 2;
+ 							i = i > col ? col : i;
+ 						}
+ 						else
+ 							i = 0;		/* key buffer overflow */
+ 					}
+ 					while (i-- > 1)
+ 					{
+ 						if (!keybuf_chk(2))
+ 							break;
+ 						cbuf[c_end++] = K_NUL;
+ 						if (wParam == VK_UP)
+ 							cbuf[c_end++] = 'H';
+ 						else
+ 							cbuf[c_end++] = 'P';
+ 					}
+ 				}
+ 			}
+ 			else if (repeat && (!curwin->w_p_wrap || (p_ww & 8))
+ 					&& (wParam == VK_LEFT || wParam == VK_RIGHT))
+ 			{
+ 				repeat++;
+ 				if (c_next != 0 && vpeekc() != NUL)
+ 					;
+ 				else if (repeat > KEY_REP && keybuf_chk(2))
+ 				{
+ 					cbuf[c_end++] = K_NUL;
+ 					if (wParam == VK_LEFT)
+ 						cbuf[c_end++] = 'K';
+ 					else if (wParam == VK_RIGHT)
+ 						cbuf[c_end++] = 'M';
+ 				}
+ 			}
+ 			if (!keybuf_chk(2))
+ 				return(0);
+ 			switch (wParam) {
+ 			case VK_PRIOR:	cbuf[c_end++] = K_NUL; cbuf[c_end++] = 'I'; break;
+ 			case VK_NEXT:	cbuf[c_end++] = K_NUL; cbuf[c_end++] = 'Q'; break;
+ 			case VK_UP:		cbuf[c_end++] = K_NUL; cbuf[c_end++] = 'H'; break;
+ 			case VK_DOWN:	cbuf[c_end++] = K_NUL; cbuf[c_end++] = 'P'; break;
+ 			case VK_LEFT:	cbuf[c_end++] = K_NUL; cbuf[c_end++] = 'K'; break;
+ 			case VK_RIGHT:	cbuf[c_end++] = K_NUL; cbuf[c_end++] = 'M'; break;
+ 			case VK_DELETE:	cbuf[c_end++] = '\177';	break;
+ 			case VK_F1:		cbuf[c_end++] = K_NUL; cbuf[c_end++] = ';'; break;
+ 			case VK_F2:		cbuf[c_end++] = K_NUL; cbuf[c_end++] = '<'; break;
+ 			case VK_F3:		cbuf[c_end++] = K_NUL; cbuf[c_end++] = '='; break;
+ 			case VK_F4:		cbuf[c_end++] = K_NUL; cbuf[c_end++] = '>'; break;
+ 			case VK_F5:		cbuf[c_end++] = K_NUL; cbuf[c_end++] = '?'; break;
+ 			case VK_F6:		cbuf[c_end++] = K_NUL; cbuf[c_end++] = '@'; break;
+ 			case VK_F7:		cbuf[c_end++] = K_NUL; cbuf[c_end++] = 'A'; break;
+ 			case VK_F8:		cbuf[c_end++] = K_NUL; cbuf[c_end++] = 'B'; break;
+ 			case VK_F9:		cbuf[c_end++] = K_NUL; cbuf[c_end++] = 'C'; break;
+ 			case VK_F10:	cbuf[c_end++] = K_NUL; cbuf[c_end++] = 'D'; break;
+ #ifdef NT106KEY
+ 			/* ZENKAKU / HANKAKU KEY */
+ 			case 0xf3:		cbuf[c_end++] = '[' & 0x1f; break;	/* ESC key !! */
+ 			case 0xf4:		cbuf[c_end++] = '[' & 0x1f; break;	/* ESC key !! */
+ #endif
+ 			}
+ 		}
+ 		return(0);
+ 	case WM_KEYUP:
+ 		if (repeat && c_ind == 0)
+ 		{
+ 			for (i = c_next; i < c_end; i++)
+ 			{
+ 				if (cbuf[i] == cbuf[c_end - 1])
+ 					c_end = i + 1;
+ 			}
+ 		}
+ 		repeat = 0;
+ 		switch (wParam) {
+ 		case VK_SHIFT:
+ 		case VK_LSHIFT:
+ 		case VK_RSHIFT:
+ 			state_shift = FALSE;
+ 			break;
+ 		case VK_CONTROL:
+ 		case VK_LCONTROL:
+ 		case VK_RCONTROL:
+ 			state_ctrl	= FALSE;
+ 			break;
+ 		case VK_NUMLOCK:
+ 		case VK_CAPITAL:
+ 			break;
+ 		}
+ 		return(0);
+ 	case WM_SYSKEYDOWN:
+ 		if (lParam & (1 << 29))
+ 			break;
+ 		return(0);
+ 	case WM_SYSKEYUP:
+ 		return(0);
+ 	case WM_SETFOCUS:
+ 		v_focus = TRUE;
+ 		MoveCursor(hWnd);
+ #ifdef FEPCTRL
+ 		if (FepInit)
+ 			fep_win_font(hWnd, &config_font);
+ #endif
+ 		return(0);
+ 	case WM_KILLFOCUS:
+ 		if (v_cursor && v_focus)
+ 			HideCaret(hWnd);
+ 		v_focus = FALSE;
+ 		v_caret = 0;
+ 		state_shift	= FALSE;
+ 		state_ctrl	= FALSE;
+ 		repeat = 0;
+ 		return(0);
+ 	case WM_DESTROY:
+ 		DragAcceptFiles(hWnd, FALSE);
+ 		DeleteObject(v_font);
+ 		PostQuitMessage(0);
+ 		return(0);
+ 	case WM_COPYDATA:
+ 		cds = (COPYDATASTRUCT *)lParam;
+ 		if (do_msg != TRUE && GuiWin == '1' && NameBuff != NULL
+ 				&& cds->dwData != 0 && (State & NORMAL) && cmode == FALSE
+ 				&& selwin == NULL && VIsual.lnum == 0
+ 				&& !(!p_hid && curbuf->b_changed && (autowrite(curbuf) == FAIL)))
+ 		{
+ 			COPYDATASTRUCT	*	cds = (COPYDATASTRUCT *)lParam;
+ 
+ 			do_msg = TRUE;
+ 			more = p_more;
+ 			p_more = FALSE;
+ 			++no_wait_return;
+ 			if (!did_cd)
+ 			{
+ 				BUF		*buf;
+ 
+ 				for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+ 				{
+ 					buf->b_xfilename = buf->b_filename;
+ 					mf_fullname(buf->b_ml.ml_mfp);
+ 				}
+ 				status_redraw_all();
+ 			}
+ 			did_cd = TRUE;
+ 			p = cds->lpData;
+ 			SetCurrentDirectory(p);
+ 			strncpy(IObuff, &p[cds->dwData], IOSIZE);
+ 			docmdline(IObuff);
+ 			--no_wait_return;
+ 			p_more = more;
+ 			cursor_refresh(hWnd);
+ 			if (!(ver_info.dwPlatformId == VER_PLATFORM_WIN32_NT
+ 										&& ver_info.dwMajorVersion == 3))
+ 				Shell_NotifyIcon(NIM_DELETE, &nIcon);
+ 			ShowWindow(hWnd, SW_SHOW);
+ 			OpenIcon(hWnd);
+ 			SetForegroundWindow(hWnd);
+ 			SetTimer(hWnd, SHOW_TIME, config_show, NULL);
+ 			do_msg = FALSE;
+ 			return(TRUE);
+ 		}
+ 		break;
+ 	case WM_DROPFILES:
+ 		selwin = NULL;
+ 		cmode = FALSE;
+ 		clear_cmode(hWnd);
+ 		clear_visual(hWnd);
+ 		more = p_more;
+ 		p_more = FALSE;
+ 		++no_wait_return;
+ 		if (State & NORMAL)
+ 		{
+ 			int			change = FALSE;
+ 			int			bitmap = FALSE;
+ 
+ 			if (!p_hid && curbuf->b_changed && (autowrite(curbuf) == FAIL))
+ 				change = TRUE;
+ 			if (change && win_split(0L, FALSE) == FAIL)
+ 			{
+ 				WIN 	*	nextwp;
+ 				WIN		*	now = curwin;
+ 
+ 				for (wp = firstwin; wp != NULL; wp = nextwp)
+ 				{
+ 					nextwp = wp->w_next;
+ 					if (wp->w_buffer->b_changed && (autowrite(wp->w_buffer) == FAIL))
+ 						;
+ 					else if (lastwin != firstwin)
+ 					{
+ 						win_enter(wp, TRUE);
+ 						close_window(TRUE);
+ 					}
+ 				}
+ 				win_enter(now, TRUE);
+ 			}
+ 			else
+ 				change = FALSE;
+ 			if (change && win_split(0L, FALSE) == FAIL)
+ 				;
+ 			else
+ 			{
+ 				files = DragQueryFile((HANDLE)wParam, 0xffffffff, NULL, 0);
+ 				memset(IObuff, '\0', IOSIZE);
+ 				strcpy(IObuff, ":args");
+ 				for (i = 0; i < files; i++)
+ 				{
+ 					if (DragQueryFile((HANDLE)wParam, i, NameBuff, MAXPATHL) != 0)
+ 					{
+ 						if (isbitmap(NameBuff))
+ 						{
+ 							if (bitmap)
+ 								Sleep(1000);
+ 							strcpy(config_bitmapfile, NameBuff);
+ 							config_bitmap = TRUE;
+ 							InvalidateRect(hWnd, NULL, TRUE);
+ 							UpdateWindow(hWnd);
+ 							bitmap = TRUE;
+ 						}
+ 						else if (iswave(NameBuff))
+ 						{
+ 							int			j = 0;
+ 
+ 							if (bitmap)
+ 								Sleep(1000);
+ 							strcpy(config_wavefile, NameBuff);
+ 							config_wave = TRUE;
+ 							sndPlaySound(config_wavefile, SND_SYNC);
+ 						}
+ 						else
+ 						{
+ 							if ((strlen(IObuff) + strlen(NameBuff) + 3) > IOSIZE)
+ 								break;
+ 							strcat(IObuff, " \"");
+ 							strcat(IObuff, NameBuff);
+ 							strcat(IObuff, "\"");
+ 						}
+ 					}
+ 				}
+ 				do_drag = TRUE;
+ 				if (strlen(IObuff) > 5)
+ 					docmdline(IObuff);
+ 				do_drag = FALSE;
+ 			}
+ 		}
+ 		else if (State & INSERT)
+ 		{
+ 			files = DragQueryFile((HANDLE)wParam, 0xffffffff, NULL, 0);
+ 			memset(IObuff, '\0', IOSIZE);
+ 			for (i = 0; i < files; i++)
+ 			{
+ 				if (DragQueryFile((HANDLE)wParam, i, NameBuff, MAXPATHL) != 0)
+ 				{
+ 					if ((strlen(IObuff) + strlen(NameBuff) + 3) > IOSIZE)
+ 						break;
+ 					strcat(IObuff, "\"");
+ 					strcat(IObuff, NameBuff);
+ 					strcat(IObuff, "\"");
+ 				}
+ 				if (i != (files - 1))
+ 					strcat(IObuff, "\n");
+ 			}
+ 			if (keybuf_chk(strlen(IObuff)))
+ 			{
+ 				memcpy(&cbuf[c_end], IObuff, strlen(IObuff));
+ 				c_end += strlen(IObuff);
+ 			}
+ 		}
+ 		else
+ 			emsg("No command mode");
+ 		--no_wait_return;
+ 		p_more = more;
+ 		cursor_refresh(hWnd);
+ 		DragFinish((HANDLE)wParam);
+ 		if (IsIconic(hWnd))
+ 			OpenIcon(hWnd);
+ 		TopWindow(hWnd);
+ 		return(0);
+ 	case WM_QUERYOPEN:
+ 		return(TRUE);
+ 	case WM_INITMENU:
+ 		hMenu = GetSystemMenu(hVimWnd, FALSE);
+ 		for (i = 0; i < 2; i++)
+ 		{
+ 			int				j;
+ 
+ #ifdef USE_BDF
+ 			if (config_bdf)
+ 			{
+ 				CheckMenuItem(hMenu, IDM_FONT, MF_BYCOMMAND | MF_UNCHECKED);
+ 				CheckMenuItem(hMenu, IDM_BDF, MF_BYCOMMAND | MF_CHECKED);
+ 			}
+ 			else
+ 			{
+ 				CheckMenuItem(hMenu, IDM_FONT, MF_BYCOMMAND | MF_CHECKED);
+ 				CheckMenuItem(hMenu, IDM_BDF, MF_BYCOMMAND | MF_UNCHECKED);
+ 			}
+ #endif
+ 			for (j = IDM_CONF0; j <= IDM_CONF3; j++)
+ 				CheckMenuItem(hMenu, j, MF_BYCOMMAND | MF_UNCHECKED);
+ 			if (GuiConfig <= IDM_CONF3)
+ 				CheckMenuItem(hMenu, IDM_CONF0 + GuiConfig, MF_BYCOMMAND | MF_CHECKED);
+ 			if (State & NORMAL)
+ 			{
+ 				if (i == 0)
+ 				{
+ 					EnableMenuItem(hMenu, 7, MF_BYPOSITION | MF_ENABLED);
+ 					EnableMenuItem(hMenu, 8, MF_BYPOSITION | MF_ENABLED);
+ 					if (config_ini)
+ 						EnableMenuItem(hMenu, 9, MF_BYPOSITION | MF_GRAYED);
+ 					else
+ 						EnableMenuItem(hMenu, 9, MF_BYPOSITION | MF_ENABLED);
+ 				}
+ 				else
+ 				{
+ 					EnableMenuItem(hMenu, 1, MF_BYPOSITION | MF_ENABLED);
+ 					EnableMenuItem(hMenu, 2, MF_BYPOSITION | MF_ENABLED);
+ 					EnableMenuItem(hMenu, 3, MF_BYPOSITION | MF_ENABLED);
+ 					if (config_ini)
+ 						EnableMenuItem(hMenu, 4, MF_BYPOSITION | MF_GRAYED);
+ 					else
+ 						EnableMenuItem(hMenu, 4, MF_BYPOSITION | MF_ENABLED);
+ 					EnableMenuItem(hMenu, IDM_HELP,  MF_BYCOMMAND | MF_ENABLED);
+ 				}
+ 				if (VIsual.lnum != 0 || cmode)
+ 					EnableMenuItem(hMenu, IDM_YANK,  MF_BYCOMMAND | MF_ENABLED);
+ 				else
+ 					EnableMenuItem(hMenu, IDM_YANK,  MF_BYCOMMAND | MF_GRAYED);
+ 				if (VIsual.lnum != 0)
+ 					EnableMenuItem(hMenu, IDM_DELETE,MF_BYCOMMAND | MF_ENABLED);
+ 				else
+ 					EnableMenuItem(hMenu, IDM_DELETE,MF_BYCOMMAND | MF_GRAYED);
+ 				if (cmode)
+ 					EnableMenuItem(hMenu, IDM_PASTE, MF_BYCOMMAND | MF_GRAYED);
+ 				else
+ 					EnableMenuItem(hMenu, IDM_PASTE, MF_BYCOMMAND | MF_ENABLED);
+ 				EnableMenuItem(hMenu, IDM_CLICK, MF_BYCOMMAND | MF_ENABLED);
+ 				EnableMenuItem(hMenu, IDM_FILE,  MF_BYCOMMAND | MF_ENABLED);
+ 				if (curbuf != NULL && curbuf->b_filename != NULL)
+ 					EnableMenuItem(hMenu, IDM_SFILE, MF_BYCOMMAND | MF_ENABLED);
+ 				else
+ 					EnableMenuItem(hMenu, IDM_SFILE, MF_BYCOMMAND | MF_GRAYED);
+ 				EnableMenuItem(hMenu, IDM_AFILE, MF_BYCOMMAND | MF_ENABLED);
+ 				if (strlen(config_printer) == 0 ||
+ 						(curbuf->b_ml.ml_line_count == 1 && strlen(ml_get(1)) == 0))
+ 					EnableMenuItem(hMenu, IDM_PRINT, MF_BYCOMMAND | MF_GRAYED);
+ 				else
+ 					EnableMenuItem(hMenu, IDM_PRINT, MF_BYCOMMAND | MF_ENABLED);
+ 				EnableMenuItem(hMenu, IDM_EXIT,  MF_BYCOMMAND | MF_ENABLED);
+ 				if (!curbuf->b_changed && (lastwin == firstwin)
+ 											&& (curbuf->b_filename != NULL))
+ 					EnableMenuItem(hMenu, IDM_TAIL,  MF_BYCOMMAND | MF_ENABLED);
+ 				else
+ 					EnableMenuItem(hMenu, IDM_TAIL,  MF_BYCOMMAND | MF_GRAYED);
+ 			}
+ 			else
+ 			{
+ 				if (i == 0)
+ 				{
+ 					EnableMenuItem(hMenu, 7, MF_BYPOSITION | MF_GRAYED);
+ 					EnableMenuItem(hMenu, 8, MF_BYPOSITION | MF_GRAYED);
+ 					EnableMenuItem(hMenu, 9, MF_BYPOSITION | MF_GRAYED);
+ 				}
+ 				else
+ 				{
+ 					EnableMenuItem(hMenu, 2, MF_BYPOSITION | MF_DISABLED);
+ 					EnableMenuItem(hMenu, 3, MF_BYPOSITION | MF_DISABLED);
+ 					if (config_ini)
+ 						EnableMenuItem(hMenu, 4, MF_BYPOSITION | MF_GRAYED);
+ 					else
+ 						EnableMenuItem(hMenu, 4, MF_BYPOSITION | MF_DISABLED);
+ 					EnableMenuItem(hMenu, IDM_HELP,  MF_BYCOMMAND|MF_DISABLED);
+ 				}
+ 				if (cmode)
+ 					EnableMenuItem(hMenu, IDM_YANK,  MF_BYCOMMAND | MF_ENABLED);
+ 				else
+ 					EnableMenuItem(hMenu, IDM_YANK,  MF_BYCOMMAND | MF_GRAYED);
+ 				EnableMenuItem(hMenu, IDM_DELETE,MF_BYCOMMAND | MF_GRAYED);
+ 				EnableMenuItem(hMenu, IDM_PASTE, MF_BYCOMMAND | MF_ENABLED);
+ 				EnableMenuItem(hMenu, IDM_CLICK, MF_BYCOMMAND | MF_GRAYED);
+ 				EnableMenuItem(hMenu, IDM_FILE,  MF_BYCOMMAND | MF_GRAYED);
+ 				EnableMenuItem(hMenu, IDM_SFILE, MF_BYCOMMAND | MF_GRAYED);
+ 				EnableMenuItem(hMenu, IDM_AFILE, MF_BYCOMMAND | MF_GRAYED);
+ 				EnableMenuItem(hMenu, IDM_PRINT, MF_BYCOMMAND | MF_GRAYED);
+ 				EnableMenuItem(hMenu, IDM_EXIT,  MF_BYCOMMAND | MF_GRAYED);
+ 				EnableMenuItem(hMenu, IDM_TAIL,  MF_BYCOMMAND | MF_GRAYED);
+ 			}
+ 			if ((curwin->w_arg_idx + 1) < arg_count)
+ 				EnableMenuItem(hMenu, IDM_NFILE, MF_BYCOMMAND | MF_ENABLED);
+ 			else
+ 				EnableMenuItem(hMenu, IDM_NFILE, MF_BYCOMMAND | MF_GRAYED);
+ 			if (curwin->w_arg_idx >= 1)
+ 				EnableMenuItem(hMenu, IDM_PFILE, MF_BYCOMMAND | MF_ENABLED);
+ 			else
+ 				EnableMenuItem(hMenu, IDM_PFILE, MF_BYCOMMAND | MF_GRAYED);
+ 			if (config_bitmap)
+ 				CheckMenuItem(hMenu, IDM_BITMAP, MF_BYCOMMAND | MF_CHECKED);
+ 			else
+ 				CheckMenuItem(hMenu, IDM_BITMAP, MF_BYCOMMAND | MF_UNCHECKED);
+ 			if (config_wave)
+ 				CheckMenuItem(hMenu, IDM_WAVE, MF_BYCOMMAND | MF_CHECKED);
+ 			else
+ 				CheckMenuItem(hMenu, IDM_WAVE, MF_BYCOMMAND | MF_UNCHECKED);
+ 			if (config_save)
+ 				CheckMenuItem(hMenu, IDM_SAVE, MF_BYCOMMAND | MF_CHECKED);
+ 			else
+ 				CheckMenuItem(hMenu, IDM_SAVE, MF_BYCOMMAND | MF_UNCHECKED);
+ 			if (config_comb)
+ 				CheckMenuItem(hMenu, IDM_COMB, MF_BYCOMMAND | MF_CHECKED);
+ 			else
+ 				CheckMenuItem(hMenu, IDM_COMB, MF_BYCOMMAND | MF_UNCHECKED);
+ 			if (config_sbar)
+ 				CheckMenuItem(hMenu, IDM_SBAR, MF_BYCOMMAND | MF_CHECKED);
+ 			else
+ 				CheckMenuItem(hMenu, IDM_SBAR, MF_BYCOMMAND | MF_UNCHECKED);
+ 			if (config_unicode)
+ 				CheckMenuItem(hMenu, IDM_UNICODE, MF_BYCOMMAND | MF_CHECKED);
+ 			else
+ 				CheckMenuItem(hMenu, IDM_UNICODE, MF_BYCOMMAND | MF_UNCHECKED);
+ 			if (config_tray)
+ 				CheckMenuItem(hMenu, IDM_TRAY, MF_BYCOMMAND | MF_CHECKED);
+ 			else
+ 				CheckMenuItem(hMenu, IDM_TRAY, MF_BYCOMMAND | MF_UNCHECKED);
+ 			if (config_mouse)
+ 				CheckMenuItem(hMenu, IDM_MOUSE, MF_BYCOMMAND | MF_CHECKED);
+ 			else
+ 				CheckMenuItem(hMenu, IDM_MOUSE, MF_BYCOMMAND | MF_UNCHECKED);
+ 			if (config_menu)
+ 				CheckMenuItem(hMenu, IDM_MENU, MF_BYCOMMAND | MF_CHECKED);
+ 			else
+ 				CheckMenuItem(hMenu, IDM_MENU, MF_BYCOMMAND | MF_UNCHECKED);
+ 			if (v_macro)
+ 				CheckMenuItem(hMenu, IDM_TAIL, MF_BYCOMMAND | MF_CHECKED);
+ 			else
+ 				CheckMenuItem(hMenu, IDM_TAIL, MF_BYCOMMAND | MF_UNCHECKED);
+ 			hMenu = v_menu;
+ 		}
+ 		DrawMenuBar(hWnd);
+ 		return(0);
+ 	case WM_COMMAND:
+ 		wParam = LOWORD(wParam);
+ 	case WM_SYSCOMMAND:
+ 		selwin = NULL;
+ 		bClear = TRUE;
+ 		if (!s_cursor)
+ 		{
+ 			s_cursor = TRUE;
+ 			ShowCursor(TRUE);
+ 		}
+ 		switch (wParam) {
+ 		case IDM_PASTE:
+ 		case IDM_YANK:
+ 		case IDM_DELETE:
+ 		case IDM_CLICK:
+ 		case IDM_PRINT:
+ 			break;
+ 		default:
+ 			if ((wParam & 0xf000) != 0xf000)
+ 			{
+ 				cmode = FALSE;
+ 				clear_cmode(hWnd);
+ 				clear_visual(hWnd);
+ 			}
+ 			break;
+ 		}
+ 		switch (wParam) {
+ 		case IDM_EXTEND:
+ 			if (!v_extend)
+ 			{
+ 				HMENU			hMenu;
+ 				HMENU			hSetup;
+ 				HMENU			hColor;
+ 				static	BOOL	first = TRUE;
+ 
+ 				hMenu = GetSystemMenu(hVimWnd, FALSE);
+ 				InsertMenu(hMenu, IDM_CLICK, MF_UNCHECKED, IDM_TAIL, "&Tail");
+ 				hSetup = GetSubMenu(hMenu, 8);
+ 				hColor = CreatePopupMenu();
+ 				AppendMenu(hColor, MF_STRING, IDM_TBCOLOR,  "&TB");
+ 				AppendMenu(hColor, MF_STRING, IDM_SOCOLOR,  "&SO");
+ 				AppendMenu(hColor, MF_STRING, IDM_TICOLOR,  "T&I");
+ 				AppendMenu(hColor, MF_STRING, IDM_DELCOLOR, "&DEL");
+ 				InsertMenu(hSetup, IDM_BITMAP, MF_POPUP, (UINT)hColor,"&Extend Color");
+ 				InsertMenu(hSetup, IDM_SAVE, MF_UNCHECKED, IDM_COMB, "Combi&nation");
+ 
+ 				hSetup = GetSubMenu(v_menu, 2);
+ 				InsertMenu(hSetup, IDM_BITMAP, MF_POPUP, (UINT)hColor,"&Extend Color");
+ 				InsertMenu(hSetup, IDM_SAVE, MF_UNCHECKED, IDM_COMB, "Combi&nation");
+ 			}
+ 			v_extend = TRUE;
+ 			break;
+ 		case IDM_VER:
+ 			{
+ 				char		msg[1024];
+ 				sprintf(msg,
+ #ifdef KANJI
+ 					"    %s\r\nPorted to W32-GUI and Japanized Ver. %s",
+ 					longVersion,
+ 					longJpVersion
+ #else
+ 					"%s",
+ 					longVersion
+ #endif
+ 				);
+ 				MessageBox(hWnd, msg,
+ #ifdef KANJI
+ 					JpVersion,
+ #else
+ 					Version,
+ #endif
+ 				MB_OK);
+ 			}
+ 			break;
+ 		case IDM_VER2:
+ 			{
+ 				char		msg[4096];
+ 				sprintf(msg,
+ #ifdef KANJI
+ 					"    %s\r\nPorted to W32-GUI and Japanized Ver. %s",
+ 					longVersion,
+ 					longJpVersion
+ #else
+ 					"%s",
+ 					longVersion
+ #endif
+ 				);
+ #ifdef USE_EXFILE
+ 				sprintf(&msg[strlen(msg)],
+ 						"\r\n    Extend File System Support:\r\n%s", ef_ver());
+ # ifdef USE_MATOME
+ 				sprintf(&msg[strlen(msg)],
+ 						"\r\n    MIME Decode Support:\r\n%s", decode_ver());
+ # endif
+ #endif
+ 				MessageBox(hWnd, msg,
+ #ifdef KANJI
+ 					JpVersion,
+ #else
+ 					Version,
+ #endif
+ 				MB_OK);
+ 			}
+ 			break;
+ 		case IDM_HELP:
+ 			if ((State & NORMAL) && VIsual.lnum == 0 && !cmode)
+ 			{
+ 				docmdline(":help");
+ 				cursor_refresh(hWnd);
+ 			}
+ 			break;
+ 		case IDM_NFILE:
+ 			if ((State & NORMAL) && ((curwin->w_arg_idx + 1) < arg_count)
+ 												&& VIsual.lnum == 0 && !cmode)
+ 				docmdline(":next");
+ 			SendMessage(hVimWnd, WM_INITMENU, 0, 0);
+ 			cursor_refresh(hWnd);
+ 			break;
+ 		case IDM_PFILE:
+ 			if ((State & NORMAL) && (curwin->w_arg_idx >= 1)
+ 												&& VIsual.lnum == 0 && !cmode)
+ 				docmdline(":Next");
+ 			SendMessage(hVimWnd, WM_INITMENU, 0, 0);
+ 			cursor_refresh(hWnd);
+ 			break;
+ 		case IDM_TAIL:
+ 			v_macro = !v_macro;
+ 			if (v_macro)
+ 			{
+ 				SetTimer(hWnd, TAIL_TIME, config_show * 5, NULL);
+ 				ZeroMemory(&byFile, sizeof(byFile));
+ 			}
+ 			else
+ 				KillTimer(hWnd, TAIL_TIME);
+ 			break;
+ 		case IDM_MENU:
+ 			config_menu = !config_menu;
+ 			if (config_menu)
+ 				SetMenu(hVimWnd, v_menu);
+ 			else
+ 				SetMenu(hVimWnd, NULL);
+ 			do_resize = TRUE;
+ 			{
+ 				RECT		rcWindow;
+ 				if (GetWindowRect(hWnd, &rcWindow))
+ 				{
+ 					config_x = rcWindow.left;
+ 					config_y = rcWindow.top;
+ 				}
+ 			}
+ 			if ((int)config_x > GetSystemMetrics(SM_CXSCREEN))
+ 				config_x = 0;
+ 			if ((int)config_y > GetSystemMetrics(SM_CYSCREEN))
+ 				config_y = 0;
+ 			nowCols = Columns;
+ 			nowRows = Rows;
+ 			MoveWindow(hWnd, config_x, config_y, config_w, config_h, TRUE);
+ 			mch_get_winsize();
+ 			break;
+ 		case IDM_FONT:
+ 			memset(&cfFont, 0, sizeof(cfFont));
+ 			cfFont.lStructSize	= sizeof(cfFont);
+ 			cfFont.hwndOwner	= hWnd;
+ 			cfFont.hDC			= NULL;
+ 			cfFont.rgbColors	= *v_fgcolor;
+ 			cfFont.lpLogFont	= &config_font;
+ 			cfFont.Flags		= CF_SCREENFONTS | CF_FIXEDPITCHONLY
+ 									/*| CF_EFFECTS*/ | CF_INITTOLOGFONTSTRUCT;
+ 			cfFont.lCustData	= 0;
+ 			cfFont.lpfnHook		= NULL;
+ 			cfFont.lpTemplateName= NULL;
+ 			cfFont.hInstance	= hInst;
+ 			if (ChooseFont(&cfFont))
+ 				*v_fgcolor = cfFont.rgbColors;
+ #ifdef FEPCTRL
+ 			if (FepInit)
+ 				fep_win_font(hWnd, &config_font);
+ #endif
+ 			ResetScreen(hWnd);
+ 			break;
+ #ifdef USE_BDF
+ 		case IDM_BDF:
+ 			GetBDFfont(hInst, 1, config_bdffile, config_jbdffile, &v_bxchar, &v_bychar, &config_bdf);
+ 			if (!config_ini && config_bdf && config_bitmap)
+ 			{
+ 				v_fgcolor = &config_fgbdf;
+ 				v_bgcolor = &config_bgbdf;
+ 			}
+ 			else
+ 			{
+ 				v_fgcolor = &config_fgcolor;
+ 				v_bgcolor = &config_bgcolor;
+ 			}
+ 			ResetScreen(hWnd);
+ 			break;
+ 		case IDM_BDFONOFF:
+ 			config_bdf = !config_bdf;
+ 			GetBDFfont(hInst, 0, config_bdffile, config_jbdffile, &v_bxchar, &v_bychar, &config_bdf);
+ 			if (!config_ini && config_bdf && config_bitmap)
+ 			{
+ 				v_fgcolor = &config_fgbdf;
+ 				v_bgcolor = &config_bgbdf;
+ 			}
+ 			else
+ 			{
+ 				v_fgcolor = &config_fgcolor;
+ 				v_bgcolor = &config_bgcolor;
+ 			}
+ 			ResetScreen(hWnd);
+ 			break;
+ 			break;
+ #endif
+ 		case IDM_FILE:
+ 			memset(&ofn, 0, sizeof(ofn));
+ 			NameBuff[0] = '\0';
+ 			IObuff[0] = '\0';
+ 			if (curbuf->b_filename != NULL)
+ 			{
+ 				strcpy(IObuff, curbuf->b_filename);
+ 				*gettail(IObuff) = NUL;
+ 			}
+ 			ofn.lStructSize		= sizeof(ofn);
+ 			ofn.hwndOwner		= hWnd;
+ 			ofn.hInstance		= hInst;
+ 			ofn.lpstrFilter		= "ALL(*.*)\0*.*\0EFS(*.lzh;*.gz;*.Z;*.tgz;*.taz)\0*.lzh;*.gz;*.Z;*.tgz;*.taz;*.tar;*.tar.gz;*.tar.Z\0C(*.c;*.cpp;*.h;*.def;*.rc)\0*.c;*.cpp;*.h;*.def;*.rc\0DOC(*.txt;*.doc)\0*.txt;*.doc\0";
+ 			ofn.lpstrCustomFilter = (LPSTR)NULL;
+ 			ofn.nMaxCustFilter	= 0L;
+ 			ofn.nFilterIndex	= 1;
+ 			ofn.lpstrFile		= NameBuff;
+ 			ofn.nMaxFile		= MAXPATHL;
+ 			ofn.lpstrFileTitle	= NULL;
+ 			ofn.nMaxFileTitle	= 0;
+ 			ofn.lpstrInitialDir	= IObuff;
+ 			ofn.lpstrTitle		= NULL;
+ 			ofn.Flags			= OFN_HIDEREADONLY | OFN_CREATEPROMPT | OFN_ALLOWMULTISELECT
+ 									| OFN_EXPLORER | OFN_NOCHANGEDIR /*| OFN_NOVALIDATE */;
+ 			ofn.nFileOffset		= 0;
+ 			ofn.nFileExtension	= 0;
+ 			ofn.lpstrDefExt		= NULL;
+ 			i = GetOpenFileName(&ofn);
+ 			if (i)
+ 			{
+ 				int			change = FALSE;
+ 
+ 				selwin = NULL;
+ 				more = p_more;
+ 				p_more = FALSE;
+ 				++no_wait_return;
+ 				if (!p_hid && curbuf->b_changed && (autowrite(curbuf) == FAIL))
+ 					change = TRUE;
+ 				if (change && win_split(0L, FALSE) == FAIL)
+ 				{
+ 					WIN 	*	nextwp;
+ 					WIN		*	now = curwin;
+ 
+ 					for (wp = firstwin; wp != NULL; wp = nextwp)
+ 					{
+ 						nextwp = wp->w_next;
+ 						if (wp->w_buffer->b_changed && (autowrite(wp->w_buffer) == FAIL))
+ 							;
+ 						else if (lastwin != firstwin)
+ 						{
+ 							win_enter(wp, TRUE);
+ 							close_window(TRUE);
+ 						}
+ 					}
+ 					win_enter(now, TRUE);
+ 				}
+ 				else
+ 					change = FALSE;
+ 				if (change && win_split(0L, FALSE) == FAIL)
+ 					;
+ 				else
+ 				{
+ 					memset(IObuff, '\0', IOSIZE);
+ 					strcpy(IObuff, ":args");
+ 					if (NameBuff[ofn.nFileOffset - 1] != '\0')
+ 					{
+ 						strcat(IObuff, " \"");
+ 						strcat(IObuff, NameBuff);
+ 						strcat(IObuff, "\"");
+ 					}
+ 					else
+ 					{
+ 						col = strlen(NameBuff);
+ 						for (;;)
+ 						{
+ 							col++;
+ 							if (NameBuff[col] == '\0')
+ 								break;
+ 							if ((IOSIZE - strlen(IObuff))
+ 									< (strlen(NameBuff) + strlen(&NameBuff[col]) + 5))
+ 								break;
+ 							strcat(IObuff, " \"");
+ 							strcat(IObuff, NameBuff);
+ 							strcat(IObuff, "\\");
+ 							strcat(IObuff, &NameBuff[col]);
+ 							strcat(IObuff, "\"");
+ 							col += strlen(&NameBuff[col]);
+ 						}
+ 					}
+ 					do_drag = TRUE;
+ 					docmdline(IObuff);
+ 					do_drag = FALSE;
+ 				}
+ 				--no_wait_return;
+ 				p_more = more;
+ 				cursor_refresh(hWnd);
+ 			}
+ 			break;
+ 		case IDM_SFILE:
+ 			selwin = NULL;
+ 			more = p_more;
+ 			p_more = FALSE;
+ 			++no_wait_return;
+ 			docmdline(":w!");
+ 			--no_wait_return;
+ 			p_more = more;
+ 			cursor_refresh(hWnd);
+ 			break;
+ 		case IDM_AFILE:
+ 			memset(&ofn, 0, sizeof(ofn));
+ 			NameBuff[0] = '\0';
+ 			IObuff[0] = '\0';
+ 			if (curbuf->b_filename != NULL)
+ 			{
+ 				strcpy(IObuff, curbuf->b_filename);
+ 				*gettail(IObuff) = NUL;
+ 				strcpy(NameBuff, gettail(curbuf->b_filename));
+ 			}
+ 			ofn.lStructSize		= sizeof(ofn);
+ 			ofn.hwndOwner		= hWnd;
+ 			ofn.hInstance		= hInst;
+ 			ofn.lpstrFilter		= NULL;
+ 			ofn.lpstrCustomFilter = (LPSTR)NULL;
+ 			ofn.nMaxCustFilter	= 0L;
+ 			ofn.nFilterIndex	= 0;
+ 			ofn.lpstrFile		= NameBuff;
+ 			ofn.nMaxFile		= MAXPATHL;
+ 			ofn.lpstrFileTitle	= NULL;
+ 			ofn.nMaxFileTitle	= 0;
+ 			ofn.lpstrInitialDir	= IObuff;
+ 			ofn.lpstrTitle		= NULL;
+ 			ofn.Flags			= OFN_HIDEREADONLY | OFN_CREATEPROMPT | OFN_OVERWRITEPROMPT
+ 									| OFN_EXPLORER | OFN_NOCHANGEDIR /*| OFN_NOVALIDATE */;
+ 			ofn.nFileOffset		= 0;
+ 			ofn.nFileExtension	= 0;
+ 			ofn.lpstrDefExt		= NULL;
+ 			if (GetSaveFileName(&ofn))
+ 			{
+ 				selwin = NULL;
+ 				more = p_more;
+ 				p_more = FALSE;
+ 				++no_wait_return;
+ 				memset(IObuff, '\0', IOSIZE);
+ 				strcpy(IObuff, ":w! ");
+ 				strcat(IObuff, NameBuff);
+ 				docmdline(IObuff);
+ 				--no_wait_return;
+ 				p_more = more;
+ 				cursor_refresh(hWnd);
+ 			}
+ 			break;
+ 		case IDM_BWHITE:
+ 			*v_bgcolor = RGB(255, 255, 255);
+ 			ResetScreen(hWnd);
+ 			break;
+ 		case IDM_BBLACK:
+ 			*v_bgcolor = RGB(0, 0, 0);
+ 			ResetScreen(hWnd);
+ 			break;
+ 		case IDM_FWHITE:
+ 			*v_fgcolor = RGB(255, 255, 255);
+ 			ResetScreen(hWnd);
+ 			break;
+ 		case IDM_FBLACK:
+ 			*v_fgcolor = RGB(0, 0, 0);
+ 			ResetScreen(hWnd);
+ 			break;
+ 		case IDM_FBLUE:
+ 			*v_fgcolor = RGB(0, 0, 128);
+ 			ResetScreen(hWnd);
+ 			break;
+ 		case IDM_BCOLOR:
+ 			pColor	= v_bgcolor;
+ 			goto SetColor;
+ 		case IDM_FCOLOR:
+ 			pColor	= v_fgcolor;
+ 			goto SetColor;
+ 		case IDM_TBCOLOR:
+ 			pColor = &config_tbcolor;
+ 			goto SetColor;
+ 		case IDM_SOCOLOR:
+ 			pColor = &config_socolor;
+ 			goto SetColor;
+ 		case IDM_TICOLOR:
+ 			pColor = &config_ticolor;
+ SetColor:
+ 			memset(&cfColor, 0, sizeof(cfColor));
+ 			cfColor.lStructSize	= sizeof(cfColor);
+ 			cfColor.hwndOwner	= hWnd;
+ 			cfColor.hInstance	= hInst;
+ 			cfColor.rgbResult	= *pColor;
+ 			cfColor.lpCustColors= config_color;
+ 			cfColor.Flags		= 0;
+ 			cfColor.lCustData	= 0;
+ 			cfColor.lpfnHook	= NULL;
+ 			cfColor.lpTemplateName	= NULL;
+ 			if (ChooseColor(&cfColor))
+ 				*pColor = cfColor.rgbResult;
+ 			ResetScreen(hWnd);
+ 			break;
+ 		case IDM_DELCOLOR:
+ 			config_tbcolor = (-1);
+ 			config_socolor = (-1);
+ 			config_ticolor = (-1);
+ 			ResetScreen(hWnd);
+ 			break;
+ 		case IDM_CANCEL:
+ 			break;
+ 		case IDM_PASTE:
+ 			if (cmode)
+ 				yank_cmode(hWnd, FALSE);
+ 			else
+ 			{
+ 				long			size = 0;
+ 				extern int		restart_edit;	/* this is in edit.c */
+ 
+ 				if (((State & NORMAL) || State == INSERT) && OpenClipboard(hWnd))
+ 				{
+ 					if ((hClipData = GetClipboardData(CF_TEXT)) != NULL)
+ 					{
+ 						if ((lpClipData = GlobalLock(hClipData)) != NULL)
+ 							size = strlen(lpClipData);
+ 						GlobalUnlock(hClipData);
+ 					}
+ 					CloseClipboard();
+ 				}
+ 				if ((size > 2048) && !VIsual.lnum)
+ 				{
+ 					if (State & NORMAL)
+ 					{
+ 						yankbuffer = '@';
+ 						if (restart_edit)
+ 							doput(BACKWARD, 1, FALSE);
+ 						else
+ 							doput(FORWARD, 1, FALSE);
+ 						yankbuffer = 0;
+ 						curwin->w_cursor = curbuf->b_endop;
+ 						cursor_refresh(hWnd);
+ 						if (restart_edit && !lineempty(curwin->w_cursor.lnum))
+ 						{
+ 							inc_cursor();
+ 							if (gchar_cursor() != NUL)
+ 								dec_cursor();
+ 						}
+ 					}
+ 					else if (keybuf_chk(3))
+ 					{
+ 						cbuf[c_end++] = Ctrl('O');
+ 						cbuf[c_end++] = 'g';
+ 						cbuf[c_end++] = 'V';
+ 					}
+ 					break;	/* no use keyboard buffer */
+ 				}
+ 				else if (OpenClipboard(hWnd))
+ 				{
+ 					int				imode = 0;
+ 
+ 					if ((State & NORMAL) && !restart_edit)
+ 						imode = 2;
+ 					if ((hClipData = GetClipboardData(CF_TEXT)) != NULL)
+ 					{
+ 						if ((lpClipData = GlobalLock(hClipData)) != NULL)
+ 						{
+ 							if (!keybuf_chk(strlen(lpClipData) + 1 + imode))
+ 							{
+ 								GlobalUnlock(hClipData);
+ 								CloseClipboard();
+ 								break;
+ 							}
+ 							if (imode)
+ 							{
+ 								if (VIsual.lnum)
+ 								{
+ 									cbuf[c_end++] = 's';
+ 									bClear = FALSE;
+ 								}
+ 								else
+ 									cbuf[c_end++] = 'a';
+ 							}
+ 							for (p = lpClipData; *p; )
+ 							{
+ #ifdef KANJI
+ 								if (ISkanji(*p))
+ 								{
+ 									cbuf[c_end++] = *p++;
+ 									cbuf[c_end++] = *p++;
+ 								}
+ 								else if (*p == 0xa0)	/* hannkaku kana space */
+ 								{
+ 									cbuf[c_end++] = ' ';
+ 									*p++;
+ 								}
+ 								else
+ #endif
+ 								{
+ 									if (*p == '\r' && *(p+1) == '\n')
+ 										++p;
+ 									cbuf[c_end++] = *p++;
+ 								}
+ 							}
+ 							if (imode)
+ 								cbuf[c_end++] = ESC;
+ 							GlobalUnlock(hClipData);
+ 						}
+ 					}
+ 					CloseClipboard();
+ 				}
+ 			}
+ 			c_ind = c_end;
+ 			if (c_ind > 0)
+ 			{
+ 				w_p_ai = curbuf->b_p_ai;
+ 				w_p_tw = curbuf->b_p_tw;
+ 				w_p_et = curbuf->b_p_et;
+ 				w_p_uc = p_uc;
+ 				p_uc = c_ind;
+ 				curbuf->b_p_ai = FALSE;
+ 				curbuf->b_p_tw = 0;
+ 				curbuf->b_p_et = FALSE;
+ 			}
+ 			break;
+ 		case IDM_YANK:
+ 			if (cmode)
+ 			{
+ 				yank_cmode(hWnd, TRUE);
+ 				break;
+ 			}
+ 		case IDM_DELETE:
+ 		case IDM_CLICK:
+ 			if (VIsual.lnum)
+ 			{
+ 				curbuf->b_startop = VIsual;
+ 				if (lt(curbuf->b_startop, curwin->w_cursor))
+ 				{
+ 					curbuf->b_endop = curwin->w_cursor;
+ 					if (wParam != IDM_YANK)		/* notepad compatible */
+ 						curwin->w_cursor = curbuf->b_startop;
+ 				}
+ 				else
+ 				{
+ 					curbuf->b_endop = curbuf->b_startop;
+ 					curbuf->b_startop = curwin->w_cursor;
+ 				}
+ 				nlines = curbuf->b_endop.lnum - curbuf->b_startop.lnum + 1;
+ 				mincl = TRUE;
+ 				if (VIsual.col == VISUALLINE)
+ 					mtype = MLINE;
+ 				else
+ 				{
+ 					mtype = MCHAR;
+ 					if (*ml_get_pos(&(curbuf->b_endop)) == NUL)
+ 						mincl = FALSE;
+ 				}
+ 				curwin->w_set_curswant = 1;
+ 				if (mtype == MCHAR && !mincl &&
+ 									equal(curbuf->b_startop, curbuf->b_endop))
+ 					break;
+ #ifdef KANJI
+ 				if (mincl && curbuf->b_endop.col != VISUALLINE
+ 										&& ISkanji(gchar(&curbuf->b_endop)))
+ 				{
+ 					mincl = FALSE;
+ 					curbuf->b_endop.col += 2;
+ 				}
+ #endif
+ 				if (mtype == MCHAR && mincl == FALSE && curbuf->b_endop.col == 0 && nlines > 1)
+ 				{
+ 					--nlines;
+ 					--curbuf->b_endop.lnum;
+ 					if (inindent())
+ 						mtype = MLINE;
+ 					else
+ 					{
+ 						curbuf->b_endop.col = STRLEN(ml_get(curbuf->b_endop.lnum));
+ 						if (curbuf->b_endop.col)
+ 						{
+ 							--curbuf->b_endop.col;
+ 							mincl = TRUE;
+ 						}
+ 					}
+ 				}
+ 				if (Visual_block)				/* block mode */
+ 				{
+ 					colnr_t			n;
+ 					startvcol = getvcol(curwin, &(curbuf->b_startop), 2);
+ 					n = getvcol(curwin, &(curbuf->b_endop), 2);
+ 					if (n < startvcol)
+ 						startvcol = (colnr_t)n;
+ 					endvcol = getvcol(curwin, &(curbuf->b_startop), 3);
+ 					n = getvcol(curwin, &(curbuf->b_endop), 3);
+ 					if (n > endvcol)
+ 						endvcol = n;
+ 					coladvance(startvcol);
+ 				}
+ 			}
+ 			if ((wParam == IDM_YANK) && (VIsual.lnum))
+ 			{
+ 				operator = STRCHR(opchars, 'y') - opchars + 1;
+ 				yankbuffer = '@';
+ 				(void)doyank(FALSE);
+ 				yankbuffer = 0;
+ 				operator = NOP;
+ 				goto get_clipdata;
+ 			}
+ 			else if (wParam == IDM_YANK)
+ 				goto get_clipdata;
+ 			else if ((wParam == IDM_DELETE) && (VIsual.lnum))
+ 			{
+ 				operator = STRCHR(opchars, 'd') - opchars + 1;
+ 				yankbuffer = '@';
+ 				dodelete();
+ 				yankbuffer = 0;
+ 				operator = NOP;
+ 				goto get_clipdata;
+ 			}
+ 			else if (wParam == IDM_CLICK && VIsual.lnum
+ 							&& curbuf->b_startop.lnum == curbuf->b_endop.lnum)
+ 			{
+ 				if (mtype == MLINE)
+ 				{
+ 					i = strlen(ml_get(curbuf->b_startop.lnum));
+ 					curbuf->b_startop.col = 0;
+ 				}
+ 				else
+ 				{
+ 					i = curbuf->b_endop.col - curbuf->b_startop.col + 1 - !mincl;
+ #ifdef KANJI
+ 					if (ISkanjiFpos(&curbuf->b_endop) == 2)
+ 						i++;
+ #endif
+ 				}
+ 				if (i == 0 || i >= MAXPATHL || i >= IOSIZE)
+ 					break;
+ 				strncpy(IObuff, ml_get(curbuf->b_startop.lnum) + curbuf->b_startop.col, (int)i);
+ 				IObuff[i] = NUL;
+ 				if ((int)ShellExecute(NULL, NULL, IObuff, NULL, ".", SW_SHOW)
+ 															== SE_ERR_NOASSOC)
+ 				{
+ 					if (FullName(IObuff, NameBuff, MAXPATHL) == OK
+ 											&& strcmp(IObuff, NameBuff) != 0)
+ 						ShellExecute(NULL, NULL, NameBuff, NULL, ".", SW_SHOW);
+ 				}
+ 				break;
+ 			}
+ 			else
+ 				break;
+ get_clipdata:
+ 			if ((i = yank_to_clipboard(NULL)) != 0)
+ 			{
+ 				hClipData = GlobalAlloc(GMEM_MOVEABLE, i);
+ 				if (hClipData == NULL)
+ 					break;
+ 				if ((lpClipData = GlobalLock(hClipData)) == NULL)
+ 				{
+ 					GlobalFree(hClipData);
+ 					break;
+ 				}
+ 				yank_to_clipboard(lpClipData);
+ 				GlobalUnlock(hClipData);
+ 				if (OpenClipboard(hWnd) == FALSE)
+ 				{
+ 					GlobalFree(hClipData);
+ 					break;
+ 				}
+ 				EmptyClipboard();
+ 				SetClipboardData(CF_TEXT, hClipData);
+ 				CloseClipboard();
+ 			}
+ 			break;
+ 		case IDM_COMB:
+ 			config_comb = !config_comb;
+ 			break;
+ 		case IDM_SAVE:
+ 			config_save = !config_save;
+ 			break;
+ 		case IDM_TRAY:
+ 			config_tray = !config_tray;
+ 			break;
+ 		case IDM_MOUSE:
+ 			config_mouse = !config_mouse;
+ 			break;
+ 		case IDM_UNICODE:
+ 			config_unicode = !config_unicode;
+ 			for (i = 0; i < v_ssize; i++)
+ 				v_space[i] = v_xchar;
+ 			break;
+ 		case IDM_OPEN:
+ 			if (!(ver_info.dwPlatformId == VER_PLATFORM_WIN32_NT
+ 										&& ver_info.dwMajorVersion == 3))
+ 			{
+ 				Shell_NotifyIcon(NIM_DELETE, &nIcon);
+ 				ShowWindow(hWnd, SW_SHOW);
+ 				OpenIcon(hWnd);
+ 				TopWindow(hWnd);
+ 			}
+ 			break;
+ 		case IDM_EXIT:
+ 			bIClose = TRUE;
+ 			PostMessage(hWnd, WM_CLOSE, 0, 0);
+ 			break;
+ 		case IDM_NEW:
+ 			{
+ 				char					name[MAXPATHL];
+ 				STARTUPINFO				si;
+ 				PROCESS_INFORMATION		pi;
+ 
+ 				GetModuleFileName(NULL, name, sizeof(name));
+ 				memset(&pi, 0, sizeof(pi));
+ 				memset(&si, 0, sizeof(si));
+ 				si.cb = sizeof(si);
+ 				if (CreateProcess(name, NULL, NULL, NULL, FALSE,
+ 						CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi) == TRUE)
+ 				{
+ 					CloseHandle(pi.hProcess);
+ 					CloseHandle(pi.hThread);
+ 				}
+ 			}
+ 			break;
+ 		case IDM_PRINT:
+ 			{
+ 				char					filename[MAXPATHL];
+ 				char				*	fn;
+ 				int						textmode = curbuf->b_p_tx;
+ #ifdef USE_OPT
+ 				int						opt = p_opt;
+ #endif
+ #ifdef KANJI
+ 				char_u					code = *curbuf->b_p_jc;
+ #endif
+ 				DWORD					hThreadID;
+ 				extern WINAPI			PrinterThread(PVOID filename);
+ 
+ 				fn = curbuf->b_sfilename != NULL ? gettail(curbuf->b_sfilename) : "Untitled";
+ 				for (i = 0; i < 1000; i++)
+ 				{
+ 					filename[0] = '\0';
+ 					if (p_dir != NULL && *p_dir != '\0')
+ 					{
+ 						if (*p_dir == '>')	/* skip '>' in front of dir name */
+ 							STRCPY(filename, p_dir + 1);
+ 						else
+ 							STRCPY(filename, p_dir);
+ 						if (!ispathsep(*(filename + STRLEN(filename) - 1)))
+ 							STRCAT(filename, PATHSEPSTR);
+ 					}
+ 					if (i == 0)
+ 						sprintf(&filename[STRLEN(filename)], "%s", fn);
+ 					else
+ 						sprintf(&filename[STRLEN(filename)], "%s(%d)", fn, i);
+ 					if (getperm(filename) < 0)
+ 						break;		/* for loop */
+ 				}
+ 				curbuf->b_p_tx = TRUE;
+ #ifdef USE_OPT
+ 				p_opt = 0;
+ #endif
+ #ifdef KANJI
+ 				*curbuf->b_p_jc = tolower(JP_SYS);
+ #endif
+ 				++no_wait_return;
+ 				if (VIsual.lnum)
+ 				{
+ 					curbuf->b_startop = VIsual;
+ 					if (lt(curbuf->b_startop, curwin->w_cursor))
+ 					{
+ 						curbuf->b_endop = curwin->w_cursor;
+ 						curwin->w_cursor = curbuf->b_startop;
+ 					}
+ 					else
+ 					{
+ 						curbuf->b_endop = curbuf->b_startop;
+ 						curbuf->b_startop = curwin->w_cursor;
+ 					}
+ #if 0
+ 					if (1 < curbuf->b_startop.lnum
+ 							|| curbuf->b_endop.lnum < curbuf->b_ml.ml_line_count)
+ 						STRCAT(filename, "[digest]");
+ #endif
+ 					buf_write(curbuf, filename, NULL,
+ 							curbuf->b_startop.lnum, curbuf->b_endop.lnum,
+ 							FALSE, 0, FALSE);
+ 				}
+ 				else
+ 					buf_write(curbuf, filename, NULL,
+ 							(linenr_t)1, curbuf->b_ml.ml_line_count,
+ 							FALSE, 0, FALSE);
+ 				--no_wait_return;
+ 				updateScreen(CLEAR);
+ 				cursor_refresh(hWnd);
+ #ifdef KANJI
+ 				*curbuf->b_p_jc = code;
+ #endif
+ #ifdef USE_OPT
+ 				p_opt = opt;
+ #endif
+ 				curbuf->b_p_tx = textmode;
+ 				fn = malloc(strlen(filename) + 1);
+ 				strcpy(fn, filename);
+ 				CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)PrinterThread, fn, 0, &hThreadID);
+ 			}
+ 			break;
+ 		case IDM_PRINTSET:
+ 			if (DialogBoxParam(hInst, "PRINTER", hWnd, PrinterDialog, (LPARAM)NULL) != 0)
+ 				return(FALSE); 
+ 			break;
+ 		case IDM_BITMAP:
+ 			if (v_extend)
+ 				DialogBoxParam(hInst, "BITMAPEX", hWnd, BitmapDialog, (LPARAM)NULL);
+ 			else
+ 				DialogBoxParam(hInst, "BITMAP", hWnd, BitmapDialog, (LPARAM)NULL);
+ #ifdef USE_BDF
+ 			if (!config_ini && config_bdf && config_bitmap)
+ 			{
+ 				v_fgcolor = &config_fgbdf;
+ 				v_bgcolor = &config_bgbdf;
+ 			}
+ 			else
+ 			{
+ 				v_fgcolor = &config_fgcolor;
+ 				v_bgcolor = &config_bgcolor;
+ 			}
+ #endif
+ 			break;
+ 		case IDM_BITMAPONOFF:
+ 			config_bitmap = !config_bitmap;
+ 			if (!isbitmap(config_bitmapfile))
+ 				config_bitmap = FALSE;
+ #ifdef USE_BDF
+ 			if (!config_ini && config_bdf && config_bitmap)
+ 			{
+ 				v_fgcolor = &config_fgbdf;
+ 				v_bgcolor = &config_bgbdf;
+ 			}
+ 			else
+ 			{
+ 				v_fgcolor = &config_fgcolor;
+ 				v_bgcolor = &config_bgcolor;
+ 			}
+ #endif
+ 			break;
+ 		case IDM_BITMAPUP:
+ 		case IDM_BITMAPDOWN:
+ 			if (v_extend && config_bitmap)
+ 			{
+ 				char_u		*	q;
+ 				WIN32_FIND_DATA fb;
+ 				HANDLE          hFind;
+ 				char			buf[MAXPATHL];
+ 				char			first[MAXPATHL];
+ 				char			before[MAXPATHL];
+ 				BOOL			bFlg = TRUE;
+ 				BOOL			bFind = FALSE;
+ 				int				cnt = 0;
+ 
+ 				STRCPY(buf, config_bitmapfile);
+ 				q = buf;
+ 				q = gettail(buf);
+ 				*q = NUL;
+ 				if (buf[0] && ispathsep(*(buf + STRLEN(buf) - 1)))
+ 					q = buf + STRLEN(buf) - 1;
+ 				*q = NUL;
+ 				strcat(buf, "\\*.bmp");
+ 				if ((hFind = FindFirstFile(buf, &fb)) != INVALID_HANDLE_VALUE)
+ 				{
+ 					while (bFlg)
+ 					{
+ 						*q = NUL;
+ 						strcat(buf, "\\");
+ 						strcat(buf, fb.cFileName);
+ 						if (isbitmap(buf))
+ 						{
+ 							if (bFind && wParam == IDM_BITMAPUP)
+ 							{
+ 								strcpy(config_bitmapfile, buf);
+ 								bFind = FALSE;
+ 								break;
+ 							}
+ 							if (cnt == 0)
+ 								strcpy(first, buf);
+ 							if (stricmp(buf, config_bitmapfile) == 0)
+ 							{
+ 								if (wParam == IDM_BITMAPDOWN && cnt)
+ 								{
+ 									strcpy(config_bitmapfile, before);
+ 									break;
+ 								}
+ 								bFind = TRUE;
+ 							}
+ 							else
+ 								strcpy(before, buf);
+ 							cnt++;
+ 						}
+ 						bFlg = FindNextFile(hFind, &fb);
+ 					}
+ 					FindClose(hFind);
+ 					if (bFind)
+ 					{
+ 						if (wParam == IDM_BITMAPUP)
+ 							strcpy(config_bitmapfile, first);
+ 						else if (cnt > 1)
+ 							strcpy(config_bitmapfile, before);
+ 					}
+ 				}
+ 				if (!isbitmap(config_bitmapfile))
+ 					config_bitmap = FALSE;
+ 			}
+ 			break;
+ 		case IDM_BITMIXONOFF:
+ 			if (v_extend)
+ 			{
+ 				wk = config_bitmix;
+ 				config_bitmix = oldmix;
+ 				oldmix = wk;
+ 			}
+ 			break;
+ 		case IDM_BITMIXUP:
+ 			if (v_extend && config_bitmap && (config_bitmix <= 95))
+ 				config_bitmix += 5;
+ 			break;
+ 		case IDM_BITMIXDOWN:
+ 			if (v_extend && config_bitmap && (config_bitmix >= 5))
+ 				config_bitmix -= 5;
+ 			break;
+ 		case IDM_WAVE:
+ 			DialogBoxParam(hInst, "WAVE", hWnd, WaveDialog, (LPARAM)NULL);
+ 			break;
+ 		case IDM_WAVEONOFF:
+ 			config_wave = !config_wave;
+ 			if (!iswave(config_wavefile))
+ 				config_wave = FALSE;
+ 			break;
+ 		case IDM_SBAR:
+ 			config_sbar = !config_sbar;
+ 			ScrollBar();
+ 			mch_set_winsize();
+ 			break;
+ 		case IDM_COMDS:
+ 			if (v_extend)
+ 				DialogBoxParam(hInst, "COMMAND", hWnd, CommandDialog, (LPARAM)NULL);
+ 			break;
+ 		case IDM_CONFS:
+ 			SaveConfig();
+ 			break;
+ 		case IDM_CONFUP:
+ 			if (!config_ini)
+ 			{
+ 				int			find = 0;
+ 				int			max = v_extend ? IDM_CONF9 : IDM_CONF3;
+ 				HKEY		hKey;
+ 				char		name[8];
+ 
+ 				for (i = GuiConfig + 1; i <= (max - IDM_CONF0); i++)
+ 				{
+ 					sprintf(name, "Software\\Vim\\%d", i);
+ 					if (RegOpenKeyEx(HKEY_CURRENT_USER, name, 0,
+ 										KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
+ 					{
+ 						find = IDM_CONF0 + i;
+ 						RegCloseKey(hKey);
+ 						break;
+ 					}
+ 				}
+ 				if (!find)
+ 				{
+ 					for (i = IDM_CONF0 - IDM_CONF0; i < GuiConfig; i++)
+ 					{
+ 						sprintf(name, "Software\\Vim\\%d", i);
+ 						if (RegOpenKeyEx(HKEY_CURRENT_USER, name, 0,
+ 										KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
+ 						{
+ 							find = IDM_CONF0 + i;
+ 							RegCloseKey(hKey);
+ 							break;
+ 						}
+ 					}
+ 				}
+ 				if (find)
+ 					return(SendMessage(hWnd, WM_COMMAND, find, 0));
+ 			}
+ 			break;
+ 		case IDM_CONFDOWN:
+ 			if (v_extend && !config_ini)
+ 			{
+ 				int			find = 0;
+ 				int			max = v_extend ? IDM_CONF9 : IDM_CONF3;
+ 				HKEY		hKey;
+ 				char		name[8];
+ 
+ 				for (i = GuiConfig - 1; i >= IDM_CONF0 - IDM_CONF0; i--)
+ 				{
+ 					sprintf(name, "Software\\Vim\\%d", i);
+ 					if (RegOpenKeyEx(HKEY_CURRENT_USER, name, 0,
+ 										KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
+ 					{
+ 						find = IDM_CONF0 + i;
+ 						RegCloseKey(hKey);
+ 						break;
+ 					}
+ 				}
+ 				if (!find)
+ 				{
+ 					for (i = max ; i >= GuiConfig; i--)
+ 					{
+ 						sprintf(name, "Software\\Vim\\%d", i);
+ 						if (RegOpenKeyEx(HKEY_CURRENT_USER, name, 0,
+ 										KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
+ 						{
+ 							find = IDM_CONF0 + i;
+ 							RegCloseKey(hKey);
+ 							break;
+ 						}
+ 					}
+ 				}
+ 				if (find)
+ 					return(SendMessage(hWnd, WM_COMMAND, find, 0));
+ 			}
+ 			break;
+ 		default:
+ 			if (IDM_CONF0 <= wParam && wParam <= IDM_CONF9)
+ 			{
+ 				if (RedrawingDisabled)
+ 					break;
+ 				if (!v_extend && IDM_CONF3 < wParam)
+ 					break;
+ 				GuiConfig = wParam - IDM_CONF0;
+ 				flushbuf();
+ 				if (config_cmd != 0 && config_comb)
+ 					UnloadCommand();
+ 				config_cmd = 0;
+ 				LoadConfig(FALSE);
+ 				oldmix = 0;
+ #ifdef USE_BDF
+ 				if (config_bdf)
+ 					GetBDFfont(hInst, 0, config_bdffile, config_jbdffile, &v_bxchar, &v_bychar, &config_bdf);
+ 				if (!config_ini && config_bdf && config_bitmap)
+ 				{
+ 					v_fgcolor = &config_fgbdf;
+ 					v_bgcolor = &config_bgbdf;
+ 				}
+ 				else
+ 				{
+ 					v_fgcolor = &config_fgcolor;
+ 					v_bgcolor = &config_bgcolor;
+ 				}
+ #endif
+ 				ResetScreen(hWnd);
+ 				ScrollBar();
+ 				do_resize = TRUE;
+ 				if (!config_save)
+ 				{
+ 					RECT		rcWindow;
+ 					if (GetWindowRect(hWnd, &rcWindow))
+ 					{
+ 						config_x = rcWindow.left;
+ 						config_y = rcWindow.top;
+ 					}
+ 				}
+ 				if ((int)config_x > GetSystemMetrics(SM_CXSCREEN))
+ 					config_x = 0;
+ 				if ((int)config_y > GetSystemMetrics(SM_CYSCREEN))
+ 					config_y = 0;
+ 				nowCols = Columns;
+ 				nowRows = Rows;
+ 				MoveWindow(hWnd, config_x, config_y, config_w, config_h, TRUE);
+ 				mch_get_winsize();
+ 				comp_Botline_all();
+ 				cursor_refresh(hWnd);
+ 				if (config_comb)
+ 				{
+ 					config_cmd = wParam - IDM_CONF0;
+ 					LoadCommand();
+ 				}
+ 				break;
+ 			}
+ 			else if (IDM_COMD0 <= wParam && wParam <= IDM_COMD9)
+ 			{
+ 				if (!v_extend)
+ 					break;
+ 				flushbuf();
+ 				UnloadCommand();
+ 				config_cmd = wParam - IDM_COMD0;
+ 				LoadCommand();
+ 				break;
+ 			}
+ 			return(DefWindowProc(hWnd, uMsg, wParam, lParam));
+ 		}
+ 		cmode = FALSE;
+ 		clear_cmode(hWnd);
+ 		if (bClear)
+ 			clear_visual(hWnd);
+ 		return(0);
+ 	case WM_TIMER:
+ 		if (wParam == KEY_TIME)
+ 			do_time = TRUE;
+ 		else if (wParam == MOVE_TIME)
+ 		{
+ 			KillTimer(hWnd, MOVE_TIME);
+ 			CopyScreenToBitmap(NULL, FALSE);
+ 		}
+ 		else if (wParam == SHOW_TIME)
+ 		{
+ 			KillTimer(hWnd, SHOW_TIME);
+ 			TopWindow(hWnd);
+ 		}
+ 		else if (wParam == TAIL_TIME)
+ 		{
+ 			HANDLE			hFile;
+ 			FILETIME		nowFile;
+ 
+ 			KillTimer(hWnd, TAIL_TIME);
+ 			v_macro = FALSE;
+ 			if (curbuf->b_changed || !(State & NORMAL)
+ 					|| (lastwin != firstwin) || (curbuf->b_filename == NULL))
+ 				return(0);
+ 			hFile = CreateFile(curbuf->b_filename, GENERIC_READ,
+ 										FILE_SHARE_READ | FILE_SHARE_WRITE,
+ 										NULL, OPEN_EXISTING, 0, 0);
+ 			if (hFile == INVALID_HANDLE_VALUE)
+ 				return(0);
+ 			v_macro = TRUE;
+ 			while (GetFileTime(hFile, NULL, NULL, &nowFile)
+ 						&& (CompareFileTime(&byFile, &nowFile) < 0))
+ 			{
+ 				if (curwin->w_cursor.lnum != curbuf->b_ml.ml_line_count)
+ 					break;
+ 				CopyMemory(&byFile, &nowFile, sizeof(byFile));
+ 				more = p_more;
+ 				p_more = FALSE;
+ 				++no_wait_return;
+ 				docmdline(":e!");
+ 				--no_wait_return;
+ 				p_more = more;
+ 				curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
+ 				if (keybuf_chk(2))
+ 				{
+ 					cbuf[c_end++] = 'z';
+ 					cbuf[c_end++] = '-';
+ 				}
+ 				beginline(TRUE);
+ 				cursor_refresh(hWnd);
+ 				break;
+ 			}
+ 			CloseHandle(hFile);
+ 			SetTimer(hWnd, TAIL_TIME, config_show * 5, NULL);
+ 		}
+ 		else if ((wParam == MOUSE_TIME) && (selwin != NULL) && VIsual.lnum)
+ 		{
+ 			if (updown == 0 && leftright == 0)
+ 				return(0);
+ 			else if (updown > 0)
+ 				oneup(updown);
+ 			else if (updown < 0)
+ 				onedown(-updown);
+ 			else if (leftright < 0 && selwin->w_leftcol)
+ 				oneleft();
+ 			else if (leftright > 0 && selwin->w_p_wrap != TRUE)
+ 			{
+ 				if (p_ss == 0)
+ 					i = Columns / 2;
+ 				else
+ 					i = p_ss;
+ 				while (i--)
+ 					oneright();
+ 			}
+ 			cursor_refresh(hWnd);
+ 		}
+ 		else if (wParam == TRIPLE_TIME)
+ 			do_trip = FALSE;
+ 		return(0);
+ 	case WM_MOUSEACTIVATE:
+ 		if (LOWORD(lParam) == HTCLIENT || LOWORD(lParam) == HTVSCROLL)
+ 			return(MA_ACTIVATEANDEAT);
+ 		return(MA_ACTIVATE);
+ 	case WM_LBUTTONDOWN:
+ 		if (cmode)
+ 		{
+ 			clear_cmode(hWnd);
+ 			cmode = FALSE;
+ 		}
+ 		if (VIsual.lnum != 0)
+ 		{
+ 			updateScreen(NOT_VALID);
+ 			cursor_refresh(hWnd);
+ 			clear_visual(hWnd);
+ 		}
+ 		wp = get_linecol(lParam, &pos, &row, &col);
+ 		if (GetKeyState(VK_MENU) & 0x8000)
+ 		{
+ 			if (do_trip)
+ 			{
+ 				int			start	= Columns;
+ 				int			end		= 0;
+ 
+ 				p = WinScreen[row];
+ 				for (col = 0; col < Columns; col++)
+ 				{
+ 					if (p[col] != ' ')
+ 					{
+ 						start = col;
+ 						break;
+ 					}
+ 				}
+ 				for (col = Columns - 1; col >= 0; col--)
+ 				{
+ 					if (p[col] != ' ')
+ 					{
+ 						end = col;
+ 						break;
+ 					}
+ 				}
+ 				for (col = start; col <= end; col++)
+ 				{
+ 					p[Columns + col] |= 0x80;
+ 					cmode = TRUE;
+ 				}
+ 				KillTimer(hWnd, TRIPLE_TIME);
+ 				do_trip = FALSE;
+ 				if (cmode)
+ 				{
+ 					rcWindow.left	= 0;
+ 					rcWindow.right	= Columns * v_xchar - 1;
+ 					rcWindow.top	= row * v_ychar;
+ 					rcWindow.bottom	= (row + 1) * v_ychar - 1;
+ 					InvalidateRect(hWnd, &rcWindow, FALSE);
+ 				}
+ 			}
+ 			else
+ 			{
+ 				if (cmode)
+ 					clear_cmode(hWnd);
+ 				cs_row = row;
+ 				cs_col = col;
+ 				cmode = TRUE;
+ 			}
+ 		}
+ 		else if (wp == NULL)
+ 		{
+ 			if (((wp = get_statusline(lParam, &row)) != NULL) && (State & NORMAL))
+ 			{
+ 				if (curwin != wp)
+ 					win_enter(wp, TRUE);
+ 				curwin->w_set_curswant = TRUE;
+ 				updateScreen(CLEAR);
+ 				cursor_refresh(hWnd);
+ 				if (VIsual.lnum != 0)
+ 					clear_visual(hWnd);
+ 				selstatus = wp;
+ 				cs_row = row;
+ 			}
+ 		}
+ 		else if (wp == NULL || pos.lnum == 0)
+ 			;
+ 		else if (State & NORMAL)
+ 		{
+ 			wp->w_cursor = pos;
+ 			if (curwin != wp)
+ 				win_enter(wp, TRUE);
+ 			curwin->w_set_curswant = TRUE;
+ 			updateScreen(NOT_VALID);
+ 			cursor_refresh(hWnd);
+ 			if (VIsual.lnum != 0)
+ 				clear_visual(hWnd);
+ 			if (pos.lnum != 0 && SetTimer(hWnd, MOUSE_TIME, 60, NULL) != 0)
+ 			{
+ 				vmode = FALSE;
+ 				selwin = wp;
+ 				selpos = pos;
+ 				if (wParam & MK_SHIFT)
+ 					selpos.col = MAXCOL;
+ 				else if (wParam & MK_CONTROL)
+ 					vmode = TRUE;
+ 				SetCapture(hWnd);
+ 			}
+ 		}
+ 		else if (State & INSERT)
+ 		{
+ 			start_arrow();
+ 			wp->w_cursor = pos;
+ 			win_enter(wp, TRUE);
+ 			curwin->w_set_curswant = TRUE;
+ 			cursor_refresh(hWnd);
+ #ifdef FEPCTRL
+ 			if (curbuf->b_p_fc && fep_get_mode())
+ 				fep_win_sync(hVimWnd);
+ #endif
+ 		}
+ 		return(0);
+ 	case WM_MOUSEMOVE:
+ 		if (mouse_pos == lParam)
+ 			return(0);
+ 		mouse_pos = lParam;
+ 		if (!s_cursor)
+ 		{
+ 			s_cursor = TRUE;
+ 			ShowCursor(TRUE);
+ 		}
+ 		updown = 0;
+ 		leftright = 0;
+ 		if (cmode && (wParam & MK_LBUTTON))
+ 		{
+ 			get_linecol(lParam, &pos, &ce_row, &ce_col);
+ 			draw_cmode(hVimWnd, cs_row, cs_col, ce_row, ce_col);
+ 		}
+ 		else if ((selwin != NULL) && (wParam & MK_LBUTTON))
+ 		{
+ 			GetClientRect(hVimWnd, &rcWindow);
+ 			if ((short)HIWORD(lParam) < 0)
+ 			{
+ 				if ((short)HIWORD(lParam) < -(v_ychar * 5))
+ 					updown = 5;
+ 				else
+ 					updown = 1;
+ 				return(0);
+ 			}
+ 			else if (rcWindow.bottom < HIWORD(lParam))
+ 			{
+ 				if ((HIWORD(lParam) - rcWindow.bottom) > (v_ychar * 5))
+ 					updown = -5;
+ 				else
+ 					updown = -1;
+ 				return(0);
+ 			}
+ 			if ((short)LOWORD(lParam) < 0)
+ 			{
+ 				leftright = -1;
+ 				lParam = MAKELONG(1, HIWORD(lParam));
+ 			}
+ 			else if (rcWindow.right < LOWORD(lParam))
+ 			{
+ 				leftright = 1;
+ 				lParam = MAKELONG(rcWindow.right - 1, HIWORD(lParam));
+ 			}
+ 			if (((wp = get_linecol(lParam, &pos, &row, &col)) != NULL)
+ 														&& (wp == selwin))
+ 			{
+ 				if (selpos.col == pos.col && selpos.lnum == pos.lnum)
+ 					return(0);
+ 				if (VIsual.lnum == 0)
+ 				{
+ 					VIsual = selpos;
+ 					Visual_block = vmode;
+ 					if (selpos.col == MAXCOL)
+ 						wp->w_cursor.col = 0;
+ 					else
+ 						wp->w_cursor.col = selpos.col;
+ 					wp->w_cursor.lnum = selpos.lnum;
+ 					cursor_refresh(hWnd);
+ 				}
+ 				if (pos.lnum != 0)
+ 					wp->w_cursor = pos;
+ 				cursor_refresh(hWnd);
+ 			}
+ 			if (row < selwin->w_winpos)
+ 			{
+ 				updown = 1;
+ 				leftright = 0;
+ 			}
+ 			else if ((selwin->w_winpos + selwin->w_height) <= row)
+ 			{
+ 				updown = -1;
+ 				leftright = 0;
+ 			}
+ 			else
+ 				updown = 0;
+ 		}
+ 		else if ((selstatus != NULL) && (wParam & MK_LBUTTON))
+ 		{
+ 			i = min(Rows - 1, (HIWORD(lParam) - 1) / v_ychar);
+ 			if (i > cs_row)
+ 				win_setheight(curwin->w_height + (i - cs_row));
+ 			else if (i < cs_row)
+ 				win_setheight(curwin->w_height - (cs_row - i));
+ 			if (i == (curwin->w_winpos + curwin->w_height))
+ 				cs_row = i;
+ 			cursor_refresh(hWnd);
+ 		}
+ 		return(0);
+ 	case WM_LBUTTONUP:
+ 		if (selwin != NULL)
+ 		{
+ 			wp = get_linecol(lParam, &pos, &row, &col);
+ 			if (wp == selwin
+ 					&& selpos.col == pos.col && selpos.lnum == selpos.lnum)
+ 				;
+ 			else if (VIsual.lnum)
+ 			{
+ 				if ((wp != NULL) && (wp == selwin) && (pos.lnum != 0))
+ 					wp->w_cursor = pos;
+ 				updateScreen(VALID);
+ 				cursor_refresh(hWnd);
+ 			}
+ 			selwin = NULL;
+ 			KillTimer(hWnd, MOUSE_TIME);
+ 			ReleaseCapture();
+ 		}
+ 		selstatus = NULL;
+ 		return(0);
+ 	case WM_LBUTTONDBLCLK:
+ 		selwin = NULL;
+ 		cmode = FALSE;
+ 		clear_cmode(hWnd);
+ 		clear_visual(hWnd);
+ 		wp = get_linecol(lParam, &pos, &row, &col);
+ 		if (GetKeyState(VK_MENU) & 0x8000)
+ 		{
+ 			p = WinScreen[row];
+ #ifdef KANJI
+ 			if (col > 0 && ISkanjiPosition(p, col + 1) == 2)
+ 				col--;
+ 			if (ISkanji(p[col]))
+ 			{
+ 				int class;
+ 				class = jpcls(p[col], p[col+1]);
+ 				while (col > 0 && class == jpcls(p[col-2],p[col-1]))
+ 					col -= 2;
+ 				while (col < Columns && class == jpcls(p[col],p[col+1]))
+ 				{
+ 					p[Columns + col + 0] |= 0x80;
+ 					p[Columns + col + 1] |= 0x80;
+ 					col += 2;
+ 					cmode = TRUE;
+ 				}
+ 			}
+ 			else
+ 			{
+ 				while (col > 0 && ISkanjiPosition(p, col) == 0 && isidchar(p[col - 1]))
+ 					--col;
+ 				while (col < Columns && !ISkanji(p[col]) && isidchar(p[col]))
+ 				{
+ 					p[Columns + col] |= 0x80;
+ 					col++;
+ 					cmode = TRUE;
+ 				}
+ 			}
+ #else
+ 			while (col > 0 && isidchar(ptr[col - 1]))
+ 				--col;
+ 			while (col < Columns && isidchar(p[col]))
+ 			{
+ 				p[Columns + col] |= 0x80;
+ 				++col;
+ 				cmode = TRUE;
+ 			}
+ #endif
+ 			if (cmode)
+ 			{
+ 				rcWindow.left	= 0;
+ 				rcWindow.right	= Columns * v_xchar - 1;
+ 				rcWindow.top	= row * v_ychar;
+ 				rcWindow.bottom	= (row + 1) * v_ychar - 1;
+ 				InvalidateRect(hWnd, &rcWindow, FALSE);
+ 				if (SetTimer(hWnd, TRIPLE_TIME, GetDoubleClickTime(), NULL) != 0)
+ 					do_trip = TRUE;
+ 			}
+ 		}
+ 		else if (wp == NULL || pos.lnum == 0)
+ 			;
+ 		else if (State & NORMAL)
+ 		{
+ 			if (Visual_block)
+ 				return(0);
+ 			if (!(GetKeyState(VK_CONTROL) & 0x8000))
+ 			{
+ 				cbuf[c_end++] = 'g';
+ 				cbuf[c_end++] = 'g';
+ 				return(0);
+ 			}
+ 			p = ml_get_buf(wp->w_buffer, pos.lnum, FALSE);
+ 			i = pos.col;
+ 			while (i > 0 && !iswhite(p[i - 1]))
+ #ifdef KANJI
+ 				if (ISkanjiPosition(p, i) == 2
+ 									&& p[i-2] == 0x81 && p[i-1] == 0x40)
+ 					break;
+ 				else
+ #endif
+ 				--i;
+ 			p = &p[i];
+ 			i = 0;
+ 			while (p[i] != NUL && !iswhite(p[i]))
+ #ifdef KANJI
+ 				if (p[i] == 0x81 && p[i+1] == 0x40)
+ 					break;
+ 				else
+ #endif
+ 				++i;
+ 			if (i == 0 || i >= MAXPATHL || i >= IOSIZE)
+ 				return(0);
+ 			strncpy(IObuff, p, i);
+ 			IObuff[i] = NUL;
+ 			if ((int)ShellExecute(NULL, NULL, IObuff, NULL, ".", SW_SHOW)
+ 														== SE_ERR_NOASSOC)
+ 			{
+ 				if (FullName(IObuff, NameBuff, MAXPATHL) == OK
+ 										&& strcmp(IObuff, NameBuff) != 0)
+ 					ShellExecute(NULL, NULL, NameBuff, NULL, ".", SW_SHOW);
+ 			}
+ 		}
+ 		return(0);
+ 	case WM_RBUTTONDOWN:
+ 		selwin = NULL;
+ 		redraw = TRUE;
+ 		if (!s_cursor)
+ 		{
+ 			s_cursor = TRUE;
+ 			ShowCursor(TRUE);
+ 		}
+ 		GetWindowRect(hWnd, &rcWindow);
+ 		hEdit = CreatePopupMenu();
+ 		if (cmode)
+ 		{
+ 			AppendMenu(hEdit,  MF_STRING,   IDM_YANK,   "&Yank");
+ 			if (State == CMDLINE || State == INSERT || State == REPLACE)
+ 			{
+ 				AppendMenu(hEdit,  MF_STRING,   IDM_PASTE,  "&Paste");
+ 				if (GetKeyState(VK_MENU) & 0x8000)
+ 				{
+ 					redraw = FALSE;
+ 					yank_cmode(hWnd, FALSE);
+ 					cmode = FALSE;
+ 					clear_cmode(hWnd);
+ 				}
+ 			}
+ 		}
+ 		else if (VIsual.lnum == 0)
+ 		{
+ 			AppendMenu(hEdit,  MF_STRING,   IDM_PASTE,  "&Put");
+ 			if (State & NORMAL)
+ 			{
+ 				if ((curwin->w_arg_idx + 1) < arg_count)
+ 					AppendMenu(hEdit,  MF_STRING,   IDM_NFILE,  "&Next");
+ 				if (curwin->w_arg_idx >= 1)
+ 					AppendMenu(hEdit,  MF_STRING,   IDM_PFILE,  "P&rev");
+ 			}
+ 		}
+ 		else if (State & NORMAL)
+ 		{
+ 			AppendMenu(hEdit,  MF_STRING,   IDM_DELETE, "&Delete");
+ 			AppendMenu(hEdit,  MF_STRING,   IDM_YANK,   "&Yank");
+ 			AppendMenu(hEdit,  MF_STRING,   IDM_PASTE,  "P&ut");
+ 			AppendMenu(hEdit,  MF_SEPARATOR,0,			NULL);
+ 			AppendMenu(hEdit,  MF_STRING,   IDM_CLICK,  "&Run");
+ 			if (strlen(config_printer))
+ 			{
+ 				AppendMenu(hEdit,  MF_SEPARATOR,0,			NULL);
+ 				AppendMenu(hEdit,  MF_STRING,   IDM_PRINT,  "&Print");
+ 			}
+ 		}
+ 		if (redraw)
+ 		{
+ 			AppendMenu(hEdit,  MF_SEPARATOR,0,			NULL);
+ 			AppendMenu(hEdit,  MF_STRING,   IDM_CANCEL, "&Cancel");
+ 			TrackPopupMenu(hEdit, TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,
+ 					rcWindow.left + LOWORD(lParam),
+ 					rcWindow.top + HIWORD(lParam) + (cmode || VIsual.lnum == 0 ? v_ychar - 2 : -2),
+ 					0, hWnd, NULL);
+ 		}
+ 		DestroyMenu(hEdit);
+ 		return(0);
+ #ifdef WM_MOUSEWHEEL
+ 	case WM_MOUSEWHEEL:
+ 		{
+ 			WPARAM			UpDown;
+ 
+ 			if ((signed)wParam < 0)
+ 				UpDown = SB_LINEDOWN;
+ 			else
+ 				UpDown = SB_LINEUP;
+ 			for (i = 0; i < iScrollLines; i++)
+ 				PostMessage(hWnd, WM_VSCROLL, UpDown, 0);
+ 		}
+ 		return(0);
+ #endif
+ 	case WM_VSCROLL:
+ 		selwin = NULL;
+ 		if (cmode)
+ 		{
+ 			cmode = FALSE;
+ 			clear_cmode(hWnd);
+ 		}
+ 		clear_visual(hWnd);
+ 		if (!((State & NORMAL) || (State & INSERT)))
+ 			return(0);
+ 		if (State & INSERT)
+ 			start_arrow();
+ 		switch (LOWORD(wParam)) {
+ 		case SB_LINEDOWN:
+ 			if (curwin->w_empty_rows
+ 							&& curwin->w_botline >= curbuf->b_ml.ml_line_count)
+ 				;
+ 			else
+ 			{
+ 				scrollup(1);
+ 				coladvance(curwin->w_curswant);
+ 				updateScreen(VALID);
+ 			}
+ 			break;
+ 		case SB_LINEUP:
+ 			scrolldown(1);
+ 			coladvance(curwin->w_curswant);
+ 			updateScreen(VALID);
+ 			break;
+ 		case SB_PAGEDOWN:
+ 			if (curwin->w_empty_rows
+ 							&& curwin->w_botline >= curbuf->b_ml.ml_line_count)
+ 				;
+ 			else
+ 				(void)onepage(FORWARD, 1);
+ 			break;
+ 		case SB_PAGEUP:
+ 			if (curwin->w_cursor.lnum <= (Rows - 1))
+ 			{
+ 				curwin->w_cursor.lnum = 1;
+ 				beginline(TRUE);
+ 			}
+ 			else
+ 				(void)onepage(BACKWARD, 1);
+ 			break;
+ 		case SB_THUMBTRACK:
+ 			{
+ 				linenr_t	lnum = curbuf->b_ml.ml_line_count;
+ 				INT			high = curwin->w_height - curwin->w_status_height;
+ 				linenr_t	disp = (high * lnum) / curbuf->b_ml.ml_line_count;
+ 				INT			param;
+ 
+ 				while (lnum > 0x7ff)
+ 					lnum >>= 1;
+ 				if (HIWORD(wParam) < 1)
+ 					param = 0;
+ 				else
+ 					param = ((HIWORD(wParam) + 1) * lnum) / (lnum - disp);
+ 				curwin->w_cursor.lnum
+ 								= (param * curbuf->b_ml.ml_line_count) / lnum;
+ 			}
+ 			if (curwin->w_cursor.lnum <= 0)
+ 				curwin->w_cursor.lnum = 1;
+ 			else if (curwin->w_cursor.lnum >= curbuf->b_ml.ml_line_count)
+ 				curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
+ 			beginline(TRUE);
+ 			break;
+ 		case SB_ENDSCROLL:
+ 			break;
+ 		}
+ 		cursor_refresh(hWnd);
+ 		return(0);
+ 	case WM_QUERYENDSESSION:
+ 		hWnd = CreateDialog(hInst, "TERM", NULL, LoadDialog);
+ 		ShowWindow(hWnd, SW_NORMAL);
+ 		Sleep(1000);
+ 		ml_sync_all(FALSE);
+ 		DestroyWindow(hWnd);
+ 		return(TRUE);
+ 	case WM_ENDSESSION:
+ 		ShowWindow(hWnd, SW_HIDE);
+ 		break;
+ 	case WM_CLOSE:
+ 		if (config_tray && BenchTime == 0 && !bIClose
+ 				&& (!(ver_info.dwPlatformId == VER_PLATFORM_WIN32_NT
+ 										&& ver_info.dwMajorVersion == 3)))
+ 		{
+ 			ShowWindow(hWnd, SW_HIDE);
+ 			GetWindowText(hWnd, nIcon.szTip, sizeof(nIcon.szTip));
+ 			Shell_NotifyIcon(NIM_ADD, &nIcon);
+ 			return(0);
+ 		}
+ 		if (bIClose && !(ver_info.dwPlatformId == VER_PLATFORM_WIN32_NT
+ 											&& ver_info.dwMajorVersion == 3))
+ 		{
+ 			Shell_NotifyIcon(NIM_DELETE, &nIcon);
+ 			ShowWindow(hWnd, SW_SHOW);
+ 			OpenIcon(hWnd);
+ 			TopWindow(hWnd);
+ 		}
+ 		bIClose = FALSE;
+ 		ctrlc_pressed = TRUE;
+ 		for (buf = firstbuf; BenchTime == 0 && buf != NULL; buf = buf->b_next)
+ 		{
+ 			if (buf->b_changed && (autowrite(buf) == FAIL))
+ 			{
+ 				i = MessageBox(hWnd, "No write since last change. Write quit ?", szAppName, MB_YESNOCANCEL|MB_DEFBUTTON2);
+ 				switch (i) {
+ 				case IDYES:
+ 					i = 0;
+ 					for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+ 					{
+ 						if (buf->b_changed && buf->b_filename == NULL)
+ 						{
+ 							char		batbuf[MAXPATHL];
+ 
+ 							for (i++; i <= 0xfffff; i++)
+ 							{
+ 								batbuf[0] = '\0';
+ 								if (p_dir != NULL && *p_dir != NUL)
+ 								{
+ 									if (*p_dir == '>')
+ 										STRCPY(batbuf, p_dir + 1);
+ 									else
+ 										STRCPY(batbuf, p_dir);
+ 									if (!ispathsep(*(batbuf + STRLEN(batbuf) - 1)))
+ 										STRCAT(batbuf, PATHSEPSTR);
+ 								}
+ 								sprintf(&batbuf[STRLEN(batbuf)], "bak%05x.txt", i);
+ 								if (getperm(batbuf) < 0)
+ 								{
+ 									buf->b_filename = strsave(batbuf);
+ 									break;		/* for loop */
+ 								}
+ 							}
+ 						}
+ 					}
+ 					docmdline(":wqall!");
+ 					break;
+ 				case IDNO:
+ 					docmdline(":qall!");
+ 					break;
+ 				case IDCANCEL:
+ 					return(0);
+ 				}
+ 				break;
+ 			}
+ 		}
+ 		docmdline(":qall!");
+ 		/* no break */
+ 	default:
+ #ifndef NO_WHEEL
+ 		if (uiMsh_MsgMouseWheel != 0 && uMsg == uiMsh_MsgMouseWheel)
+ 			return(SendMessage(hWnd, WM_MOUSEWHEEL, wParam, lParam));
+ #endif
+ 		break;
+ 	}
+ 	return(DefWindowProc(hWnd, uMsg, wParam, lParam));
+ }
+ 
+ /*
+  *
+  */
+ void
+ wincmd_paste()
+ {
+ 	if (GuiWin)
+ 		SendMessage(hVimWnd, WM_COMMAND, IDM_PASTE, 0);
+ }
+ 
+ /*
+  *
+  */
+ void
+ wincmd_cut()
+ {
+ 	if (GuiWin)
+ 		SendMessage(hVimWnd, WM_COMMAND, IDM_YANK, 0);
+ }
+ 
+ /*
+  *
+  */
+ void
+ wincmd_delete()
+ {
+ 	if (GuiWin)
+ 		SendMessage(hVimWnd, WM_COMMAND, IDM_DELETE, 0);
+ }
+ 
+ /*
+  *
+  */
+ void
+ wincmd_active()
+ {
+ 	if (GuiWin)
+ 	{
+ 		SetForegroundWindow(hVimWnd);
+ 		SetTimer(hVimWnd, SHOW_TIME, config_show, NULL);
+ 	}
+ }
+ 
+ /*
+  *
+  */
+ 	void
+ vim_delay()
+ {
+ 	delay(500);
+ }
+ 
+ /*
+  * this version of remove is not scared by a readonly (backup) file
+  */
+ 	int
+ vim_remove(name)
+ 	char_u         *name;
+ {
+ 	setperm(name, S_IREAD|S_IWRITE);    /* default permissions */
+ 	return unlink(name);
+ }
+ 
+ 	static void
+ ScrollBar()
+ {
+ 	SCROLLINFO		si;
+ 	static INT		sbar = (-1);
+ 	static SCROLLINFO		oSi;
+ 
+ 	if (config_sbar)
+ 	{
+ 		INT			nPos, nPage;
+ 		INT			high = curwin->w_height - curwin->w_status_height;
+ 		linenr_t	lnum;
+ 		linenr_t	elnum = curwin->w_empty_rows ? curwin->w_empty_rows - 1 : 0;
+ 		INT			shift = 0;
+ 
+ 		if (high < 1)
+ 			high = 1;
+ 
+ 		lnum = curbuf->b_ml.ml_line_count + elnum;
+ 		while (lnum > 0x7ff)
+ 		{
+ 			shift++;
+ 			lnum >>= 1;
+ 		}
+ 		high >>= shift;
+ 		if (high <= 0)
+ 			high = 1;
+ 		nPage = ((curwin->w_botline - curwin->w_topline - 1) * lnum)
+ 										/ (curbuf->b_ml.ml_line_count + elnum);
+ 		if (nPage < 1)
+ 			nPage = 1;
+ 		nPos  = (curwin->w_topline >> shift) - 1;
+ 		if (nPos < 0)
+ 			nPos = 0;
+ 
+ 		memset(&si, 0, sizeof(si));
+ 		si.cbSize = sizeof(si);
+ 
+ 		if (config_sbar != sbar)
+ 		{
+ 			si.fMask = SIF_ALL;
+ 			si.nMin  = 0;
+ 			si.nMax  = 1;
+ 			si.nPos  = 0;
+ 			si.nPage = 1;
+ 			SetScrollInfo(hVimWnd, SB_VERT, &si, TRUE);
+ 		}
+ 
+ 		si.fMask = SIF_ALL | SIF_DISABLENOSCROLL;
+ 		si.nMin  = 0;
+ 		si.nMax  = lnum - 1;
+ 		si.nPos  = nPos;
+ 		si.nPage = nPage;
+ 		if ((curwin->w_botline - 1) >= curbuf->b_ml.ml_line_count)
+ 			si.nPage = lnum - nPos;
+ 		if (curwin->w_topline <= 1
+ 					&& (curwin->w_botline - 1) >= curbuf->b_ml.ml_line_count)
+ 			si.nMax = 0;
+ 		if (memcmp(&oSi, &si, sizeof(si)) != 0)
+ 		{
+ 			SetScrollInfo(hVimWnd, SB_VERT, &si, TRUE);
+ 			memcpy(&oSi, &si, sizeof(si));
+ 		}
+ 		sbar = config_sbar;
+ 	}
+ 	else if (config_sbar != sbar)
+ 	{
+ 		sbar = config_sbar;
+ 		memset(&oSi, 0, sizeof(oSi));
+ 		oSi.cbSize = sizeof(oSi);
+ 		oSi.fMask  = SIF_ALL;
+ 		SetScrollInfo(hVimWnd, SB_VERT, &oSi, TRUE);
+ 	}
+ }
+ 
+ /*
+  * mch_write(): write the output buffer to the screen
+  */
+ 	void
+ mch_write(s, len)
+ 	char_u         *s;
+ 	int             len;
+ {
+ 	char_u         *p;
+ 	WORD			row,
+ 					col;
+ 
+ 	s[len] = '\0';
+ 	if (GuiWin)
+ 	{
+ 		RECT			rect;
+ 
+ 		ScrollBar();
+ 		while (len--)
+ 		{
+ 			if (s[0] == '\n')
+ 			{
+ 				v_col = 0;
+ 				v_row++;
+ 				if (v_row >= (Rows - 1))
+ 				{
+ 					v_row = Rows - 1;
+ 					if (!config_bitmap)
+ 						ScrollWindow(hVimWnd, 0, v_ychar, NULL, NULL);
+ 					else
+ 						InvalidateRect(hVimWnd, NULL, FALSE);
+ 				}
+ 				s++;
+ 				continue;
+ 			}
+ 			else if (s[0] == '\r')
+ 			{
+ 				v_col = 0;
+ 				s++;
+ 				continue;
+ 			}
+ 			else if (s[0] == '\b')		/* backspace */
+ 			{
+ 				if (--v_col < 0)
+ 					v_col = 0;
+ 				s++;
+ 				continue;
+ 			}
+ 			else if (s[0] == '\a' || s[0] == '\007')
+ 			{
+ 				if (p_vb)
+ 				{
+ 					do_vb = TRUE;
+ 					InvalidateRect(hVimWnd, NULL, FALSE);
+ 					UpdateWindow(hVimWnd);
+ 					delay(50);
+ 					do_vb = FALSE;
+ 					InvalidateRect(hVimWnd, NULL, FALSE);
+ 					UpdateWindow(hVimWnd);
+ 					Sleep(50);
+ 				}
+ 				else if (config_wave)
+ 					sndPlaySound(config_wavefile, SND_ASYNC|SND_NOSTOP);
+ 				else
+ 					MessageBeep(0);
+ 				s++;
+ 				continue;
+ 			} else if (s[0] == ESC && len > 1 && s[1] == '|') {
+ 				switch (s[2]) {
+ 				case 'v':
+ 					if (v_cursor && v_focus)
+ 						HideCaret(hVimWnd);
+ 					v_cursor = FALSE;
+ 					goto wgot3;
+ 
+ 				case 'V':
+ 					if (v_cursor != TRUE && v_focus)
+ 						ShowCaret(hVimWnd);
+ 					v_cursor = TRUE;
+ 					MoveCursor(hVimWnd);
+ 					goto wgot3;
+ 
+ 				case 'J':	/* clear screen */
+ 					rect.left	= 0;
+ 					rect.right	= Columns * v_xchar;
+ 					rect.top	= 0;
+ 					rect.bottom	= Rows * v_ychar;
+ 					if (!config_bitmap)
+ 					{
+ 						HDC			hDC;
+ 						HBRUSH		hbrush;
+ 						HBRUSH		holdbrush;
+ 
+ 						UpdateWindow(hVimWnd);
+ 						hDC = GetDC(hVimWnd);
+ 						hbrush	= CreateSolidBrush(*v_bgcolor);
+ 						holdbrush = SelectObject(hDC, hbrush);
+ 						FillRect(hDC, &rect, hbrush);
+ 						SelectObject(hDC, holdbrush);
+ 						DeleteObject(hbrush);
+ 						ReleaseDC(hVimWnd, hDC);
+ 					}
+ 					else
+ 						InvalidateRect(hVimWnd, &rect, FALSE);
+ 					goto wgot3;
+ 
+ 				case 'K':	/* clreol */
+ 					rect.left	= v_col * v_xchar;
+ 					rect.right	= Columns * v_xchar;
+ 					rect.top	= v_row * v_ychar;
+ 					rect.bottom	= rect.top + v_ychar;
+ 					if (!config_bitmap)
+ 					{
+ 						HDC			hDC;
+ 						HBRUSH		hbrush;
+ 						HBRUSH		holdbrush;
+ 
+ 						UpdateWindow(hVimWnd);
+ 						hDC = GetDC(hVimWnd);
+ 						hbrush	= CreateSolidBrush(*v_bgcolor);
+ 						holdbrush = SelectObject(hDC, hbrush);
+ 						FillRect(hDC, &rect, hbrush);
+ 						SelectObject(hDC, holdbrush);
+ 						DeleteObject(hbrush);
+ 						ReleaseDC(hVimWnd, hDC);
+ 					}
+ 					else
+ 						InvalidateRect(hVimWnd, &rect, FALSE);
+ 					goto wgot3;
+ 
+ 				case 'L':	/* insline */
+ 					rect.left	= 0;
+ 					rect.top	= v_row * v_ychar;
+ 					rect.right	= Columns * v_xchar;
+ 					rect.bottom	= v_region * v_ychar;
+ 					if (!config_bitmap)
+ 						ScrollWindow(hVimWnd, 0, v_ychar, NULL, &rect);
+ 					else
+ 						InvalidateRect(hVimWnd, &rect, FALSE);
+ 					goto wgot3;
+ 
+ 				case 'M':	/* delline */
+ 					rect.left	= 0;
+ 					rect.top	= v_row * v_ychar;
+ 					rect.right	= Columns * v_xchar;
+ 					rect.bottom	= v_region * v_ychar;
+ 					if (!config_bitmap)
+ 						ScrollWindow(hVimWnd, 0, -v_ychar, NULL, &rect);
+ 					else
+ 						InvalidateRect(hVimWnd, &rect, FALSE);
+ 			wgot3:  s += 3;
+ 					len -= 2;
+ 					continue;
+ 
+ 				case '0':
+ 				case '1':
+ 				case '2':
+ 				case '3':
+ 				case '4':
+ 				case '5':
+ 				case '6':
+ 				case '7':
+ 				case '8':
+ 				case '9':
+ 					p = s + 2;
+ 					row = getdigits(&p);        /* no check for length! */
+ 					if (p > s + len)
+ 						break;
+ 					if (*p == ';')
+ 					{
+ 						++p;
+ 						col = getdigits(&p);    /* no check for length! */
+ 						if (p > s + len)
+ 							break;
+ 						if (*p == 'H')
+ 						{
+ 							if (!RedrawingDisabled && !((row - 2) <= v_row && v_row <= row))
+ 								UpdateWindow(hVimWnd);
+ 							v_col = col - 1;
+ 							v_row = row - 1;
+ 							len -= p - s;
+ 							s = p + 1;
+ 							continue;
+ 						}
+ 						else if (*p == 'S')
+ 						{
+ 							v_region = col + 1;
+ 							len -= p - s;
+ 							s = p + 1;
+ 							continue;
+ 						}
+ 					}
+ 					else if (*p == 'm')
+ 					{
+ 						/* video color */
+ 						len -= p - s;
+ 						s = p + 1;
+ 						continue;
+ 					}
+ 					else if (*p == 'L')
+ 					{
+ 						/* insline(row) */
+ 						rect.left	= 0;
+ 						rect.top	= v_row * v_ychar;
+ 						rect.right	= Columns * v_xchar;
+ 						rect.bottom	= v_region * v_ychar;
+ 						if (!config_bitmap)
+ 							ScrollWindow(hVimWnd, 0, v_ychar * row, NULL, &rect);
+ 						else
+ 							InvalidateRect(hVimWnd, &rect, FALSE);
+ 						len -= p - s;
+ 						s = p + 1;
+ 						continue;
+ 					}
+ 					else if (*p == 'M')
+ 					{
+ 						/* delline(row) */
+ 						rect.left	= 0;
+ 						rect.top	= v_row * v_ychar;
+ 						rect.right	= Columns * v_xchar;
+ 						rect.bottom	= v_region * v_ychar;
+ 						if (!config_bitmap)
+ 							ScrollWindow(hVimWnd, 0, -(v_ychar * row), NULL, &rect);
+ 						else
+ 							InvalidateRect(hVimWnd, &rect, FALSE);
+ 						len -= p - s;
+ 						s = p + 1;
+ 						continue;
+ 					}
+ 				}
+ 			}
+ 			else
+ 			{
+ 				int           prefix = 1;
+ 				
+ 				if (len >= 2)
+ 				{
+ 					prefix = strcspn(s, "\n\r\a\b\033\007");
+ 					if (prefix > (Columns - v_col))
+ 						prefix = Columns - v_col;
+ 					else if (prefix == 0)
+ 						prefix = 1;
+ 				}
+ 				rect.left	= v_col * v_xchar;
+ 				rect.right	= rect.left + v_xchar * prefix;
+ 				rect.top	= v_row * v_ychar;
+ 				rect.bottom	= rect.top + v_ychar;
+ 				InvalidateRect(hVimWnd, &rect, FALSE);
+ 				v_col += prefix;
+ 				s += prefix;
+ 				len -= prefix - 1;
+ 				if (v_col >= Columns)
+ 				{
+ 					v_col = 0;
+ 					v_row++;
+ 					if (v_row >= Rows)
+ 					{
+ 						v_row = Rows - 1;
+ 						if (!config_bitmap)
+ 							ScrollWindow(hVimWnd, 0, v_ychar, NULL, NULL);
+ 						else
+ 							InvalidateRect(hVimWnd, NULL, FALSE);
+ 					}
+ 				}
+ 				continue;
+ 			}
+ 			s++;
+ 		}
+ 	}
+ 	else if (IsTelnet || !term_console)
+ 		write(1, s, (unsigned)len);
+ 	else
+ 	{
+ 		while (len--) {
+ 
+ 			/* optimization: use one single WriteConsole for runs of text,
+ 			   rather than calling putch() multiple times.  It ain't curses,
+ 			   but it helps. */
+ 
+ 			DWORD           prefix = strcspn(s, "\n\r\a\033");
+ 
+ 			if (prefix) {
+ 				DWORD           nwritten;
+ 
+ 				if (WriteConsole(hConOut, s, prefix, &nwritten, 0)) {
+ 
+ 					len -= (nwritten - 1);
+ 					s += nwritten;
+ 				}
+ 				continue;
+ 			}
+ 
+ 			if (s[0] == '\n') {
+ 				if (ntcoord.Y == (Rows - 1)) {
+ 					gotoxy(1, ntcoord.Y + 1);
+ 					scroll();
+ 				} else {
+ 					gotoxy(1, ntcoord.Y + 2);
+ 				}
+ 				s++;
+ 				continue;
+ 			} else if (s[0] == '\r') {
+ 				gotoxy(1, ntcoord.Y + 1);
+ 				s++;
+ 				continue;
+ 			} else if (s[0] == '\a') {
+ 				vbell();
+ 				s++;
+ 				continue;
+ 			} else if (s[0] == ESC && len > 1 && s[1] == '|') {
+ 				switch (s[2]) {
+ 
+ 				case 'v':
+ 					cursor_visible(0);
+ 					goto got3;
+ 
+ 				case 'V':
+ 					cursor_visible(1);
+ 					goto got3;
+ 
+ 				case 'J':
+ 					clrscr();
+ 					goto got3;
+ 
+ 				case 'K':
+ 					clreol();
+ 					goto got3;
+ 
+ 				case 'L':
+ 					insline(1);
+ 					goto got3;
+ 
+ 				case 'M':
+ 					delline(1);
+ 			got3:   s += 3;
+ 					len -= 2;
+ 					continue;
+ 
+ 				case '0':
+ 				case '1':
+ 				case '2':
+ 				case '3':
+ 				case '4':
+ 				case '5':
+ 				case '6':
+ 				case '7':
+ 				case '8':
+ 				case '9':
+ 					p = s + 2;
+ 					row = getdigits(&p);        /* no check for length! */
+ 					if (p > s + len)
+ 						break;
+ 					if (*p == ';') {
+ 						++p;
+ 						col = getdigits(&p);    /* no check for length! */
+ 						if (p > s + len)
+ 							break;
+ 						if (*p == 'H') {
+ 							gotoxy(col, row);
+ 							len -= p - s;
+ 							s = p + 1;
+ 							continue;
+ 						}
+ 					} else if (*p == 'm') {
+ 						if (row == 0)
+ 							normvideo();
+ 						else
+ 							textattr(row);
+ 						len -= p - s;
+ 						s = p + 1;
+ 						continue;
+ 					} else if (*p == 'L') {
+ 						insline(row);
+ 						len -= p - s;
+ 						s = p + 1;
+ 						continue;
+ 					} else if (*p == 'M') {
+ 						delline(row);
+ 						len -= p - s;
+ 						s = p + 1;
+ 						continue;
+ 					}
+ 				}
+ 			}
+ 			putch(*s++);
+ 		}
+ 	}
+ }
+ 
+ /*
+  *  Keyboard translation tables.
+  *  (Adopted from the MSDOS port)
+  */
+ 
+ #define KEYPADLO    0x47
+ #define KEYPADHI    0x53
+ 
+ #define PADKEYS     (KEYPADHI - KEYPADLO + 1)
+ #define iskeypad(x)    (KEYPADLO <= (x) && (x) <= KEYPADHI)
+ 
+ /*
+  * Wait until console input is available
+  */
+ 
+ 	static int
+ WaitForChar(msec)
+ 	int             msec;
+ {
+ 	if (GuiWin)
+ 	{
+ 		MSG				msg;
+ 		int				settime = FALSE;
+ #ifdef FEPCTRL
+ 		int				fepsync = FALSE;
+ #endif
+ 
+ 		if (msec == 0)
+ 			do_time = TRUE;
+ 		else if (msec > 0)
+ 		{
+ 			do_time = FALSE;
+ 			if (SetTimer(hVimWnd, KEY_TIME, msec, NULL) != 0)
+ 				settime = TRUE;
+ 		}
+ 		else
+ 			do_time = FALSE;
+ 		for (;;)
+ 		{
+ 			if (do_resize)
+ 			{
+ 				if (settime)
+ 					KillTimer(hVimWnd, KEY_TIME);
+ 				return FALSE;
+ 			}
+ 			if (kbhit())
+ 			{
+ 				if (settime)
+ 					KillTimer(hVimWnd, KEY_TIME);
+ 				return TRUE;
+ 			}
+ 			if (do_time)
+ 				break;
+ #ifdef FEPCTRL
+ 			if (curbuf->b_p_fc && fep_get_mode())
+ 			{
+ 				if (fepsync == FALSE)
+ 					fep_win_sync(hVimWnd);
+ 				fepsync = TRUE;
+ 			}
+ 			else
+ 				fepsync = FALSE;
+ #endif
+ 			if (PeekMessage(&msg, NULL, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE))
+ 			{
+ 				if (!TranslateAccelerator(hVimWnd, hAcc, &msg))
+ 				{
+ 					TranslateMessage(&msg);
+ 					DispatchMessage(&msg);
+ 				}
+ 				continue;
+ 			}
+ 			if (GetMessage(&msg, NULL, 0, 0))
+ 			{
+ 				if (!TranslateAccelerator(hVimWnd, hAcc, &msg))
+ 				{
+ 					TranslateMessage(&msg);
+ 					DispatchMessage(&msg);
+ 				}
+ 			}
+ 		}
+ 		if (settime)
+ 			KillTimer(hVimWnd, KEY_TIME);
+ 		return FALSE;
+ 	}
+ 	else
+ 	{
+ 		DWORD           count;
+ 		int             ch;
+ 		int             scan;
+ 		int             retval = 0;
+ 		DWORD			time = GetTickCount() + msec;
+ 
+ retry:
+ 		if (WaitForSingleObject(hConIn, msec) == WAIT_OBJECT_0) {
+ 			count = 0;
+ 			(void)PeekConsoleInput(hConIn, &ir, 1, &count);
+ 			if (count > 0) {
+ 				ch = ir.Event.KeyEvent.uChar.AsciiChar;
+ 				scan = ir.Event.KeyEvent.wVirtualScanCode;
+ #ifndef notdef
+ 				if (!ch)
+ 					ch = isctlkey();
+ #endif
+ 				if (((ir.EventType == KEY_EVENT) && ir.Event.KeyEvent.bKeyDown) &&
+ 					(ch || (iskeypad(scan)))) {
+ 					retval = 1;     /* Found what we sought */
+ 				}
+ 			} else {                /* There are no events in console event queue */
+ 				retval = 0;
+ 			}
+ 		}
+ 		if (retval == 0
+ #ifdef FEPCTRL
+ 					&& curbuf->b_p_fc && fep_get_mode() == 0
+ #endif
+ 								&& time > GetTickCount()) {
+ 			if (count)
+ 				(void)ReadConsoleInput(hConIn, &ir, 1, &count);
+ 			goto retry;
+ 		}
+ 		return retval;
+ 	}
+ }
+ 
+ static int pending = 0;
+ 
+ 	static int
+ tgetch()
+ {
+ 	int             valid = 0;
+ 	DWORD           count;
+ 	unsigned short int scan;
+ 	unsigned char   ch;
+ 
+ 	if (pending)
+ 	{
+ 		ch = pending;
+ 		pending = 0;
+ 	}
+ 	else
+ 	{
+ 
+ 		valid = 0;
+ 		while (!valid)
+ 		{
+ 			(void)ReadConsoleInput(hConIn, &ir, 1, &count);
+ 			if (ir.EventType == WINDOW_BUFFER_SIZE_EVENT)
+ 			{
+ 				set_winsize(Rows, Columns, FALSE);
+ 			} 
+ 			else
+ 			{
+ 				if ((ir.EventType == KEY_EVENT) && ir.Event.KeyEvent.bKeyDown) 
+ 				{
+ 					ch = ir.Event.KeyEvent.uChar.AsciiChar;
+ 					scan = ir.Event.KeyEvent.wVirtualScanCode;
+ #ifndef notdef
+ 					if (!ch)
+ 						ch = isctlkey();
+ #endif
+ 					if (ch || (iskeypad(scan)))
+ 						valid = 1;
+ 				}
+ 			}
+ 		}
+ 		if (!ch)
+ 		{
+ 			pending = scan;
+ 			ch = 0;
+ 		}
+ 	}
+ 	return ch;
+ }
+ 
+ 
+ 	static int
+ kbhit()
+ {
+ 	if (GuiWin)
+ 		return(c_next < c_end);
+ 	else
+ 	{
+ 		int             done = 0;   /* true =  "stop searching"        */
+ 		int             retval;     /* true =  "we had a match"        */
+ 		DWORD           count;
+ 		unsigned short int scan;
+ 		unsigned char   ch;
+ 
+ 		if (pending)
+ 			return 1;
+ 
+ 		done = 0;
+ 		retval = 0;
+ 		while (!done)
+ 		{
+ 			count = 0;
+ 			PeekConsoleInput(hConIn, &ir, 1, &count);
+ 			if (count > 0) {
+ 				ch = ir.Event.KeyEvent.uChar.AsciiChar;
+ 				scan = ir.Event.KeyEvent.wVirtualScanCode;
+ #ifndef notdef
+ 				if (!ch)
+ 					ch = isctlkey();
+ #endif
+ 				if (((ir.EventType == KEY_EVENT) && ir.Event.KeyEvent.bKeyDown) &&
+ 						(ch || (iskeypad(scan)) ))
+ 				{
+ 					done = 1;       /* Stop looking         */
+ 					retval = 1;     /* Found what we sought */
+ 				} else              /* Discard it, its an insignificant event */
+ 					ReadConsoleInput(hConIn, &ir, 1, &count);
+ 			}
+ 			else                	/* There are no events in console event queue */
+ 			{
+ 				done = 1;           /* Stop looking               */
+ 				retval = 0;
+ 			}
+ 		}
+ 		return retval;
+ 	}
+ }
+ 
+ 	static int
+ getch()
+ {
+ 	int				c;
+ 
+ 	c = cbuf[c_next++];
+ 	if (c_next == c_end)
+ 		c_next = c_end = 0;
+ 	if (GuiWin && c_ind > 0 && (c_next == c_ind || c_end == 0))
+ 		c_ind = -1;
+ 	return c;
+ }
+ 
+ /*
+  * GetChars(): low level input funcion.
+  * Get a characters from the keyboard.
+  * If time == 0 do not wait for characters.
+  * If time == n wait a short time for characters.
+  * If time == -1 wait forever for characters.
+  */
+ 	int
+ GetChars(buf, maxlen, time)
+ 	char_u         *buf;
+ 	int             maxlen;
+ 	int             time;
+ {
+ 	int             len = 0;
+ 	int             c;
+ 	static int		disp = 0;
+ 	static int		oldState = (-1);
+ 
+ 	if (GuiWin)
+ 	{
+ 		if (oldState != (State & NORMAL))
+ 		{
+ 			oldState = (State & NORMAL);
+ 			SendMessage(hVimWnd, WM_INITMENU, 0, 0);
+ 		}
+ 		if (c_ind < 0)
+ 		{
+ 			c_ind = 0;
+ 			curbuf->b_p_ai = w_p_ai;
+ 			curbuf->b_p_tw = w_p_tw;
+ 			curbuf->b_p_et = w_p_et;
+ 			p_uc = w_p_uc;
+ 			disp = 0;
+ 		}
+ 		else if (c_ind > (c_next + 32))
+ 		{
+ 			if (config_overflow < KEY_REDRAW)
+ 			{
+ 				RedrawingDisabled = TRUE;
+ 				if ((disp % 41) == 0)
+ 					RedrawingDisabled = FALSE;
+ 				disp++;
+ 			}
+ 		}
+ 		flushbuf();
+ 		MoveCursor(hVimWnd);
+ 		if (time >= 0)
+ 		{
+ 			while (WaitForChar(time) == 0)		/* no character available */
+ 			{
+ 				if (!do_resize)		/* return if not interrupted by resize */
+ 					return 0;
+ 				set_winsize(0, 0, FALSE);
+ 				do_resize = FALSE;
+ 				cursor_refresh(hVimWnd);
+ 			}
+ 		}
+ 		else	/* time == -1 */
+ 		{
+ 		/*
+ 		 * If there is no character available within 2 seconds (default)
+ 		 * write the autoscript file to disk
+ 		 */
+ 			if (WaitForChar((int)p_ut) == 0)
+ 				updatescript(0);
+ 		}
+ 
+ 	/*
+ 	 * Try to read as many characters as there are.
+ 	 * Works for the controlling tty only.
+ 	 */
+ 		--maxlen;		/* may get two chars at once */
+ 		/*
+ 		 * we will get at least one key. Get more if they are available
+ 		 * After a ctrl-break we have to read a 0 (!) from the buffer.
+ 		 * bioskey(1) will return 0 if no key is available and when a
+ 		 * ctrl-break was typed. When ctrl-break is hit, this does not always
+ 		 * implies a key hit.
+ 		 */
+ 		for (;;)	/* repeat until we got a character */
+ 		{
+ 			if (do_resize)		/* window changed size */
+ 			{
+ 				set_winsize(0, 0, FALSE);
+ 				do_resize = FALSE;
+ 				cursor_refresh(hVimWnd);
+ 			}
+ 			WaitForChar(-1);
+ 			if (do_resize)
+ 				continue;
+ 			c = 0;
+ 			while (kbhit() && len < maxlen)
+ 			{
+ 				switch (c = getch()) {
+ 				case 0:
+ 					*buf++ = K_NUL;
+ 					break;
+ 				default:
+ 					*buf++ = c;
+ 					break;
+ 				}
+ 				len++;
+ 				if (c_ind < 0)
+ 				{
+ 					RedrawingDisabled = FALSE;
+ 					break;
+ 				}
+ 			}
+ 			if (c == K_NUL && WaitForChar((int)p_tm))
+ 			{
+ 				*buf++ = getch();
+ 				len++;
+ 			}
+ 			if (len > 0)
+ 				return len;
+ 		}
+ 	}
+ 	else if (IsTelnet)
+ 	{
+ 		DWORD		count;
+ 
+ 		flushbuf();
+ 		if (time >= 0)
+ 		{
+ 			while (time > 0)
+ 			{
+ 				if (PeekNamedPipe(hConIn, NULL, 0, NULL, NULL, &count) == 0)
+ 					return 0;
+ 				if (count == 0)
+ 				{
+ 					Sleep(20);
+ 					time -= 20;
+ 				}
+ 				else
+ 					break;
+ 			}
+ 			if (count == 0)
+ 				return 0;
+ 		}
+ 		else
+ 		{
+ 			time = p_ut;
+ 			while (time > 0)
+ 			{
+ 				if (PeekNamedPipe(hConIn, NULL, 0, NULL, NULL, &count) == 0)
+ 					return 0;
+ 				if (count == 0)
+ 				{
+ 					Sleep(20);
+ 					time -= 20;
+ 				}
+ 				else
+ 					break;
+ 			}
+ 			if (count == 0)
+ 			{
+ 				updatescript(0);
+ 				count = maxlen;
+ 			}
+ 		}
+ 		if (count > maxlen)
+ 			count = maxlen;
+ 		if (ReadFile(hConIn, buf, count, &count, NULL) != 0 && count)
+ 			return count;
+ 		return 0;
+ 	}
+ 	else
+ 	{
+ 		if (time >= 0) {
+ 			if (time == 0)          /* don't know if time == 0 is allowed */
+ 				time = 1;
+ 			if (WaitForChar(time) == 0)     /* no character available */
+ 				return 0;
+ 		} else {                    /* time == -1 */
+ 			/* If there is no character available within 2 seconds (default)
+ 			 * write the autoscript file to disk */
+ 			if (WaitForChar((int) p_ut) == 0)
+ 				updatescript(0);
+ 		}
+ 		if (!v_nt) {
+ 			DWORD	count = 0;
+ 			for (;;) {
+ #ifdef FEPCTRL
+ 				if (curbuf->b_p_fc && fep_get_mode() != 0) {
+ 						/* IME enable mode... try special IME handling */
+ 					if (ReadConsole(hConIn, buf, maxlen, &count, NULL) && count)
+ 						return count;
+ 				}
+ #endif
+ 				if (WaitForSingleObject(hConIn, INFINITE) != WAIT_OBJECT_0) {
+ 					return 0;			/* no KEY data */
+ 				}
+ 				ir.Event.KeyEvent.uChar.AsciiChar = 0;
+ 				if (!PeekConsoleInput(hConIn, &ir, 1, &count) || count == 0) {
+ 					continue;
+ 				}
+ 				if (ir.EventType != KEY_EVENT) {	/* MOUSE/WINDOWS EVENT */
+ 					(void)ReadConsoleInput(hConIn, &ir, 1, &count);
+ 					continue;
+ 				}
+ 				if (ir.Event.KeyEvent.bKeyDown
+ 					&& (ir.Event.KeyEvent.dwControlKeyState
+ 						& (RIGHT_ALT_PRESSED|LEFT_ALT_PRESSED|ENHANCED_KEY)) == 0
+ 					&& ir.Event.KeyEvent.uChar.AsciiChar != 0) {
+ 										/* but Bata Release : ZEN/HAN key is '@' */
+ 					if (ReadConsole(hConIn, buf, maxlen, &count, NULL) && count) {
+ 						return count;
+ 					}
+ 					continue;
+ 				}
+ 				if (!ReadConsoleInput(hConIn, &ir, 1, &count) || count == 0) {
+ 					continue;
+ 				}
+ 				if (ir.EventType == KEY_EVENT && ir.Event.KeyEvent.bKeyDown) {
+ 					if ((buf[0] = isctlkey()) != 0) {
+ 						return 1;
+ 					} else if (iskeypad(ir.Event.KeyEvent.wVirtualScanCode)) {
+ 						buf[0] = K_NUL;
+ 						buf[1] = ir.Event.KeyEvent.wVirtualScanCode;
+ 						return 2;
+ 					} else if ((ir.Event.KeyEvent.wVirtualScanCode == '}')
+ 								&& (ir.Event.KeyEvent.dwControlKeyState
+ 									& (RIGHT_CTRL_PRESSED | LEFT_CTRL_PRESSED))) {
+ 						ReadConsoleInput(hConIn, &ir, 1, &count);
+ 						buf[0] = Ctrl('\\');
+ 						return 1;
+ 					}
+ 				}
+ 			}
+ 		}
+ 
+ 	/*
+ 	 * Try to read as many characters as there are.
+ 	 * Works for the controlling tty only.
+ 	 */
+ 		--maxlen;                   /* may get two chars at once */
+ 		/* we will get at least one key. Get more if they are available After a
+ 		 * ctrl-break we have to read a 0 (!) from the buffer. bioskey(1) will
+ 		 * return 0 if no key is available and when a ctrl-break was typed. When
+ 		 * ctrl-break is hit, this does not always implies a key hit. */
+ 		cbrk_pressed = FALSE;
+ 		while ((len == 0 || kbhit()) && len < maxlen) {
+ 			switch (c = tgetch()) {
+ 			case 0:
+ 				*buf++ = K_NUL;
+ 				break;
+ 			case 3:
+ 				cbrk_pressed = TRUE;
+ 				/* FALLTHROUGH */
+ 			default:
+ 				*buf++ = c;
+ 			}
+ 			len++;
+ 		}
+ 		return len;
+ 	}
+ }
+ 
+ /*
+  * We have no job control, fake it by starting a new shell.
+  */
+ 	void
+ mch_suspend()
+ {
+ 	outstr("new shell started\n");
+ 	call_shell(NULL, 0, TRUE);
+ }
+ 
+ extern int      _fmode;
+ char            OrigTitle[256];
+ 
+ /*
+  *
+  */
+ int APIENTRY
+ WinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow)
+ HINSTANCE hInstance;
+ HINSTANCE hPrevInstance;
+ LPSTR lpCmdLine;
+ int nCmdShow;
+ {
+ 	char			**	argv;
+ 	int					argc	= 1;
+ 	int					num		= 4;
+ 	char			*	p;
+ 	int					c;
+ 	BOOL				cygnus;
+ 	static char			name[MAXPATHL];
+ 	static char		*	dmy[2]	= {name, NULL};
+ 
+ 	hInst = hInstance;
+ 	SubSysCon = FALSE;
+ 	GetModuleFileName(NULL, name, sizeof(name));
+ 	if (lpCmdLine == NULL || (lpCmdLine != NULL && *lpCmdLine == '\0')
+ 				|| (argv = malloc(num * sizeof(char *))) == NULL
+ 				|| (p = malloc(strlen(lpCmdLine) + 1)) == NULL)
+ 		argv = dmy;
+ 	else
+ 	{
+ 		argv[0] = name;
+ 		strcpy(p, lpCmdLine);
+ 		while (*p != '\0')
+ 		{
+ 			if (argc >= num)
+ 			{
+ 				num += 4;
+ 				if ((argv = realloc(argv, num * sizeof(char *))) == NULL)
+ 					goto end;
+ 			}
+ 			if (*p == '"')
+ 			{
+ 				argv[argc++] = p + 1;
+ 				while (*++p != '"')
+ 					if (*p == '\0')
+ 						goto end;
+ 			}
+ 			else if (getperm(p) != (-1))
+ 			{
+ 				argv[argc++] = p;
+ 				break;
+ 			}
+ 			else
+ 			{
+ 				argv[argc++] = p;
+ 				c = *p;
+ 				cygnus = FALSE;
+ 				if (p[0] == '/' && p[1] == '/' && isalpha(p[2]) && p[3] == '/')
+ 					cygnus = TRUE;
+ 				while (c != ' ' && c != '\t')
+ 				{
+ #ifdef KANJI
+ 					if (ISkanji(c))
+ 						++p;
+ #endif
+ 					c = *++p;
+ 					if (cygnus && c == '\\')
+ 					{
+ 						memmove(&p[0], &p[1], strlen(p));
+ 						if (*p == ' ' || *p == '\t')
+ 							;
+ 						else
+ 							c = *p;
+ 					}
+ 					if (c == '\0')
+ 						goto end;
+ 				}
+ 			}
+ 			*p = '\0';
+ 			c = *++p;
+ 			while (c == ' ' || c == '\t')
+ 				c = *++p;
+ 		}
+ end:
+ 		;
+ 	}
+ 	if (vimgetenv("VIM32DEBUG") == NULL)
+ 	{
+ 		__try {
+ 			main(argc, argv);
+ 		}
+ 		__except (EXCEPTION_CONTINUE_EXECUTION) {
+ 			;
+ 		}
+ 	}
+ 	else
+ 		main(argc, argv);
+ 	return(0);
+ }
+ 
+ /*
+  *
+  */
+ 	void
+ mch_windinit(argc, argv)
+ 	int				argc;
+ 	char		  **argv;
+ {
+ 	CONSOLE_SCREEN_BUFFER_INFO	csbi;
+ 
+ 	_fmode = O_BINARY;          /* we do our own CR-LF translation */
+ 	flushbuf();
+ 
+ 	v_nt = FALSE;
+ 
+ 	ver_info.dwOSVersionInfoSize = sizeof(ver_info);
+ 	if (!GetVersionEx(&ver_info))
+ 	{
+ 		FatalAppExit(0, "Win32 API error.");
+ 		ExitProcess(99);
+ 	}
+ 	if (ver_info.dwPlatformId == VER_PLATFORM_WIN32s)
+ 	{
+ 		FatalAppExit(0, "Win32s is not support");
+ 		ExitProcess(99);
+ 	}
+ 	if (ver_info.dwPlatformId == VER_PLATFORM_WIN32_NT)
+ 		v_nt = TRUE;
+ 	if (GuiWin)
+ 	{
+ 		HMENU		hMenu;
+ 		HMENU		hTColor;
+ 		HMENU		hBColor;
+ 		HMENU		hEdit;
+ 		HMENU		hSetup;
+ 		HMENU		hGSetup;
+ 		HMENU		hFile;
+ 		HMENU		hConf;
+ 		WNDCLASS	wndclass;
+ 		UINT		w;
+ 		HANDLE		hLibrary;
+ 
+ 		if (SubSysCon)
+ 			hInst = GetModuleHandle(NULL);
+ 		v_region = Rows = nowRows;
+ 		Columns = nowCols;
+ 		if (SubSysCon)
+ 			FreeConsole();
+ 
+ 		v_cursor				= FALSE;
+ 		v_font					= NULL;
+ 
+ 		v_ssize = 256;
+ 		if ((v_space = malloc(sizeof(INT) * v_ssize)) == NULL)
+ 			ExitProcess(99);
+ 		if ((v_char = malloc(sizeof(short) * v_ssize)) == NULL)
+ 			ExitProcess(99);
+ 		wndclass.style			= CS_DBLCLKS;
+ 		wndclass.lpfnWndProc	= WndProc;
+ 		wndclass.cbClsExtra		= 0;
+ 		wndclass.cbWndExtra		= sizeof(LONG);
+ 		wndclass.hInstance		= hInst;
+ 		wndclass.hIcon			= LoadIcon(NULL, IDI_WINLOGO);
+ 		wndclass.hCursor		= LoadCursor(NULL, IDC_ARROW);
+ 		wndclass.hbrBackground	= NULL;	/* GetStockObject(WHITE_BRUSH); */
+ 		wndclass.lpszMenuName	= NULL;
+ 		wndclass.lpszClassName	= szAppName;
+ 		if (RegisterClass(&wndclass) == 0)
+ 			ExitProcess(99);
+ 		LoadConfig(TRUE);
+ #ifdef USE_BDF
+ 		if (config_bdf)
+ 			GetBDFfont(hInst, 0, config_bdffile, config_jbdffile, &v_bxchar, &v_bychar, &config_bdf);
+ 		if (!config_ini && config_bdf && config_bitmap)
+ 		{
+ 			v_fgcolor = &config_fgbdf;
+ 			v_bgcolor = &config_bgbdf;
+ 		}
+ 		else
+ 		{
+ 			v_fgcolor = &config_fgcolor;
+ 			v_bgcolor = &config_bgcolor;
+ 		}
+ #endif
+ 		v_menu = LoadMenu(hInst, "VIMMENU");
+ 		hVimWnd = CreateWindow(szAppName, szAppName,
+ 				   WS_OVERLAPPEDWINDOW|(config_sbar ? WS_VSCROLL : 0),
+ 				   config_x, config_y,
+ 				   config_w, config_h, NULL, config_menu ? v_menu : NULL, hInst, NULL);
+ 		if (NULL == hVimWnd)
+ 			ExitProcess(99);
+ 		hAcc = LoadAccelerators(hInst, "ACCKEYS");
+ 		SetClassLong(hVimWnd, GCL_HICON, (LONG)LoadIcon(hInst, "vim"));
+ 		hTColor= CreatePopupMenu();
+ 		AppendMenu(hTColor,MF_STRING,    IDM_FWHITE,   "&White");
+ 		AppendMenu(hTColor,MF_STRING,    IDM_FBLACK,   "&Black");
+ 		AppendMenu(hTColor,MF_STRING,    IDM_FBLUE,    "&NavyBlue");
+ 		AppendMenu(hTColor,MF_STRING,    IDM_FCOLOR,   "&Choice");
+ 		hBColor= CreatePopupMenu();
+ 		AppendMenu(hBColor,MF_STRING,    IDM_BWHITE,   "&White");
+ 		AppendMenu(hBColor,MF_STRING,    IDM_BBLACK,   "&Black");
+ 		AppendMenu(hBColor,MF_STRING,    IDM_BCOLOR,   "&Choice");
+ 		hSetup= CreatePopupMenu();
+ 		AppendMenu(hSetup, MF_STRING,    IDM_FONT,     "&Font");
+ #ifdef USE_BDF
+ 		AppendMenu(hSetup, MF_STRING,    IDM_BDF,      "B&DF FONT");
+ #endif
+ 		AppendMenu(hSetup, MF_POPUP,     (UINT)hTColor,"&Text Color");
+ 		AppendMenu(hSetup, MF_POPUP,     (UINT)hBColor,"Back &Color");
+ 		AppendMenu(hSetup, MF_STRING,    IDM_BITMAP,   "&Bitmap File");
+ 		AppendMenu(hSetup, MF_STRING,    IDM_WAVE,     "&Wave File");
+ 		AppendMenu(hSetup, MF_UNCHECKED, IDM_SAVE,     "&Save Window Position");
+ 		hGSetup= CreatePopupMenu();
+ 		AppendMenu(hGSetup,MF_CHECKED,   IDM_SBAR,     "&Scrollbar\tAlt+S");
+ 		AppendMenu(hGSetup,MF_UNCHECKED, IDM_MENU,     "&Menu\tAlt+M");
+ 		AppendMenu(hGSetup,MF_UNCHECKED, IDM_UNICODE,  "&Unicode Font");
+ 		AppendMenu(hGSetup,MF_UNCHECKED, IDM_TRAY,     "&Task Tray");
+ 		AppendMenu(hGSetup,MF_UNCHECKED, IDM_MOUSE,    "&Erase Mouse");
+ 		AppendMenu(hGSetup,MF_STRING,    IDM_PRINTSET, "&Print Command");
+ 		hConf = CreatePopupMenu();
+ 		AppendMenu(hConf,  MF_STRING,    IDM_CONFS,    "&Save Config");
+ 		AppendMenu(hConf,  MF_UNCHECKED, IDM_CONF0,    "Default(&0)\tAlt+0");
+ 		AppendMenu(hConf,  MF_UNCHECKED, IDM_CONF1,    "Config (&1)\tAlt+1");
+ 		AppendMenu(hConf,  MF_UNCHECKED, IDM_CONF2,    "Config (&2)\tAlt+2");
+ 		AppendMenu(hConf,  MF_UNCHECKED, IDM_CONF3,    "Config (&3)\tAlt+3");
+ 		hEdit = CreatePopupMenu();
+ 		AppendMenu(hEdit,  MF_STRING,    IDM_DELETE,   "&Delete\tAlt+X");
+ 		AppendMenu(hEdit,  MF_STRING,    IDM_YANK,     "&Yank\tAlt+C");
+ 		AppendMenu(hEdit,  MF_STRING,    IDM_PASTE,    "&Paste\tAlt+V");
+ 		hFile = CreatePopupMenu();
+ 		AppendMenu(hFile,  MF_STRING,    IDM_NEW,      "&New Window\tAlt+N");
+ 		AppendMenu(hFile,  MF_STRING,    IDM_CLICK,    "&Run");
+ 		AppendMenu(hFile,  MF_STRING,    IDM_FILE,     "&Open File\tAlt+O");
+ 		AppendMenu(hFile,  MF_STRING,    IDM_SFILE,    "&Save File");
+ 		AppendMenu(hFile,  MF_STRING,    IDM_AFILE,    "Save &As...");
+ 		AppendMenu(hFile,  MF_STRING,    IDM_PRINT,    "&Print\tAlt+P");
+ 		hMenu = GetSystemMenu(hVimWnd, FALSE);
+ 		DeleteMenu(hMenu,  5, MF_BYPOSITION);
+ 		AppendMenu(hMenu,  MF_SEPARATOR, 0, NULL);
+ 		AppendMenu(hMenu,  MF_POPUP,     (UINT)hGSetup,"G&lobal Setup");
+ 		AppendMenu(hMenu,  MF_POPUP,     (UINT)hSetup, "Set&up");
+ 		AppendMenu(hMenu,  MF_POPUP,     (UINT)hConf,  "Confi&g");
+ 		AppendMenu(hMenu,  MF_POPUP,     (UINT)hFile,  "&File");
+ 		AppendMenu(hMenu,  MF_POPUP,     (UINT)hEdit,  "&Edit");
+ 		SetMenuItemBitmaps(hMenu, IDM_BITMAP, MF_BYCOMMAND, NULL, NULL);
+ 		SetMenuItemBitmaps(hMenu, IDM_WAVE, MF_BYCOMMAND, NULL, NULL);
+ 		SetMenuItemBitmaps(hMenu, IDM_SAVE, MF_BYCOMMAND, NULL, NULL);
+ 		SetMenuItemBitmaps(hMenu, IDM_MENU, MF_BYCOMMAND, NULL, NULL);
+ 		SetMenuItemBitmaps(hMenu, IDM_UNICODE, MF_BYCOMMAND, NULL, NULL);
+ 		SetMenuItemBitmaps(hMenu, IDM_TRAY, MF_BYCOMMAND, NULL, NULL);
+ 		SetMenuItemBitmaps(hMenu, IDM_MOUSE, MF_BYCOMMAND, NULL, NULL);
+ 		if (GuiWin == '1')
+ 		{
+ 			HWND			hWnd;
+ 			COPYDATASTRUCT	cds;
+ 			char			buf[MAXPATHL];
+ 			int				size = 8;
+ 			int				j;
+ 			char		*	p;
+ 
+ 			if (argc > 1)
+ 			{
+ 				GetCurrentDirectory(MAXPATHL, buf);
+ 				for (j = 0; j < (argc - 1); j++)
+ 					size += strlen(argv[j]) + 3;
+ 				size += strlen(buf) + 1;
+ 			}
+ 			cds.dwData = 0;
+ 			cds.cbData = size;
+ 			if ((cds.lpData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, cds.cbData)) != NULL)
+ 			{
+ 				if (argc > 1)
+ 				{
+ 					p = cds.lpData;
+ 					strcpy(p, buf);
+ 					size = strlen(buf) + 1;
+ 					strcpy(&p[size], ":args");
+ 					for (j = 0; j < (argc - 1); j++)
+ 					{
+ 						strcat(&p[size], " \"");
+ 						strcat(&p[size], argv[j]);
+ 						strcat(&p[size], "\"");
+ 					}
+ 					cds.dwData = size;
+ 				}
+ 				do_msg	= TRUE;
+ 				hWnd = GetFirstSibling(hVimWnd);
+ 				while (IsWindow(hWnd))
+ 				{
+ 					GetClassName(hWnd, buf, sizeof(buf));
+ 					if (strcmp(buf, szAppName) == 0 && hVimWnd != hWnd)
+ 					{
+ 						if (SendMessage(hWnd, WM_COPYDATA,
+ 									(WPARAM)hVimWnd, (LPARAM)&cds) == TRUE)
+ 							ExitProcess(0);
+ 					}
+ 					hWnd = GetNextSibling(hWnd);
+ 				}
+ 				HeapFree(GetProcessHeap(), 0, cds.lpData);
+ 				do_msg	= FALSE;
+ 			}
+ 		}
+ 		ShowWindow(hVimWnd, SW_SHOWDEFAULT);
+ 		UpdateWindow(hVimWnd);
+ 		GetWindowText(hVimWnd, OrigTitle, sizeof(OrigTitle));
+ 
+ #ifndef NO_WHEEL
+ 		/* NT 4 and later supports WM_MOUSEWHEEL */
+ 		/* Future Win32 versions ( >= 5.0 ) should support WM_MOUSEWHEEL */
+ 		if ((ver_info.dwMajorVersion >= 5)
+ 					|| (VER_PLATFORM_WIN32_NT == ver_info.dwPlatformId
+ 											&& ver_info.dwMajorVersion >= 4))
+ 		{
+ 			if (!SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0,
+ 											&iScrollLines, SPIF_UPDATEINIFILE))
+ 				iScrollLines = 3;
+ 		}
+ 		else
+ 		{
+ 			HwndMSWheel(&uiMsh_MsgMouseWheel, &uiMsh_Msg3DSupport,
+ 						  &uiMsh_MsgScrollLines, &f3DSupport, &iScrollLines);
+ 			if (iScrollLines == 0)
+ 				iScrollLines = 3;
+ 		}
+ #endif
+ 
+ 		w = SetErrorMode(SEM_NOOPENFILEERRORBOX);
+ 		hLibrary = LoadLibrary("comctl32.dll");
+ 		SetErrorMode(w);
+ 		if (hLibrary != NULL)
+ 		{
+ 			pCreateUpDownControl
+ 					= (tCreateUpDownControl)GetProcAddress(hLibrary, "CreateUpDownControl");
+ 		}
+ 
+ 		mch_set_winsize();
+ 		do_resize = FALSE;
+ 	}
+ 	else if (IsTelnet)
+ 	{
+ 		BenchTime = 0;
+ 		hConIn = GetStdHandle(STD_INPUT_HANDLE);
+ 		hConOut = GetStdHandle(STD_OUTPUT_HANDLE);
+ 	}
+ 	else
+ 	{
+ 		BenchTime = 0;
+ 		/* Obtain handles for the standard Console I/O devices */
+ 		hConIn = CreateFile("CONIN$",
+ 						GENERIC_READ | GENERIC_WRITE,
+ 						FILE_SHARE_READ | FILE_SHARE_WRITE,
+ 						NULL, OPEN_EXISTING, 0, NULL);
+ 
+ 		hConOut = CreateFile("CONOUT$",
+ 						 GENERIC_READ | GENERIC_WRITE,
+ 						 FILE_SHARE_READ | FILE_SHARE_WRITE,
+ 						 NULL, OPEN_EXISTING, 0, NULL);
+ #ifndef notdef
+ 		if (!DuplicateHandle(GetCurrentProcess(), GetCurrentThread(),
+ 							GetCurrentProcess(), &h_mainthread,
+ 						0, FALSE, DUPLICATE_SAME_ACCESS))
+ 		{
+ 			FatalAppExit(0, "initialize error\n");
+ 			ExitProcess(99);
+ 		}
+ #endif
+ 		GetConsoleScreenBufferInfo(hConOut, &csbi);
+ 		DefaultAttribute = csbi.wAttributes;
+ #ifndef notdef
+ 		if (!v_nt)
+ 			DefaultAttribute = csbi.wAttributes | FOREGROUND_INTENSITY;
+ #endif
+ 		mch_get_winsize();
+ 		GetConsoleTitle(OrigTitle, sizeof(OrigTitle));
+ 	}
+ 	if (vimgetenv("HOME") == NULL)
+ 	{
+ 		char	home[MAXPATHL+8];
+ 
+ 		strcpy(home, "HOME=");
+ 		if (v_nt && vimgetenv("HOMEDRIVE") != NULL
+ 											&& vimgetenv("HOMEPATH") != NULL)
+ 		{
+ 			strcat(home, vimgetenv("HOMEDRIVE"));
+ 			strcat(home, vimgetenv("HOMEPATH"));
+ 		}
+ 		else
+ 		{
+ 			char *	p;
+ 			char *	last;
+ 
+ 			GetModuleFileName(NULL, &home[5], MAXPATHL);
+ 			last = p = home + 8;	/* drive + : + \ */
+ 			while (*p)
+ 			{
+ 				if (*p == '\\')
+ 					last = p;
+ 				p++;
+ 			}
+ 			*last = '\0';
+ 		}
+ 		putenv(home);
+ 	}
+ 	if (vimgetenv("TMP") == NULL)
+ 	{
+ 		char	tmp[MAXPATHL+4];
+ 		strcpy(tmp, "TMP=");
+ 		if (vimgetenv("TEMP") != NULL)
+ 			strcat(tmp, vimgetenv("TEMP"));
+ 		else if (GetTempPath(MAXPATHL, &tmp[4]) != 0)
+ 			;
+ 		else
+ 			GetCurrentDirectory(MAXPATHL, &tmp[4]);
+ 		if (tmp[strlen(tmp) - 1] == '\\')
+ 			tmp[strlen(tmp) - 1] = '\0';
+ 		putenv(tmp);
+ 	}
+ 	if (BenchTime)
+ 	{
+ 		putenv("VIMINIT=");	putenv("EXINIT=");	putenv("HOME=_");
+ 		putenv("TEMP=.");	putenv("TMP=.");
+ 		BenchTime = GetTickCount();
+ 	}
+ #ifdef USE_EXFILE
+ 	else
+ 		ef_init(hVimWnd);
+ #endif
+ }
+ 
+ 	void
+ check_win(argc, argv)
+ 	int             argc;
+ 	char          **argv;
+ {
+ 	if (!isatty(0) || !isatty(1))
+ 	{
+ #ifdef notdef		/* Windows NT telnetd support */
+ 		fprintf(stderr, "VIM: no controlling terminal\n");
+ 		exit(2);
+ #else
+ 		IsTelnet = TRUE;
+ #endif
+ 	}
+ 	/* In some cases with DOS 6.0 on a NEC notebook there is a 12 seconds
+ 	 * delay when starting up that can be avoided by the next two lines.
+ 	 * Don't ask me why! This could be fixed by removing setver.sys from
+ 	 * config.sys. Forget it. gotoxy(1,1); cputs(" "); */
+ }
+ 
+ /*
+  * fname_case(): Set the case of the filename, if it already exists.
+  *                 msdos filesystem is far to primitive for that. do nothing.
+  */
+ 	void
+ fname_case(name)
+ 	char_u         *name;
+ {
+ #ifndef notdef
+ 	WIN32_FIND_DATA fb;
+ 	HANDLE          hFind;
+ 	char_u		*	tname;
+ 	char_u			buf[MAXPATHL];
+ 
+ 	if (GetFullPathName(name, sizeof(buf), buf, &tname) == 0)
+ 		return;
+ 	if ((hFind = FindFirstFile(buf, &fb)) != INVALID_HANDLE_VALUE)
+ 	{
+ 		if (strlen(name) == strlen(buf))
+ 		{
+ 			strcpy(tname, fb.cFileName);
+ 			strcpy(name, buf);
+ 		}
+ 		FindClose(hFind);
+ 	}
+ #endif
+ }
+ 
+ 
+ /*
+  * mch_settitle(): set titlebar of our window
+  * Can the icon also be set?
+  */
+ 	void
+ mch_settitle(title, icon)
+ 	char_u         *title;
+ 	char_u         *icon;
+ {
+ 	if (title != NULL)
+ 	{
+ 		if (GuiWin)
+ 		{
+ 			if (icon != NULL && strlen(title) > sizeof(nIcon.szTip))
+ 				SetWindowText(hVimWnd, icon);
+ 			else if (strlen(title) > sizeof(nIcon.szTip))
+ 			{
+ 				char_u	*	p = strsave(title);
+ 
+ 				strcpy(&p[6], gettail(&p[6]));
+ 				SetWindowText(hVimWnd, p);
+ 				free(p);
+ 			}
+ 			else
+ 				SetWindowText(hVimWnd, title);
+ 		}
+ 		else if (IsTelnet)
+ 			;
+ 		else
+ 		{
+ 			if (icon != NULL && strlen(title) > sizeof(nIcon.szTip))
+ 				SetConsoleTitle(icon);
+ 			else
+ 				SetConsoleTitle(title);
+ 		}
+ 	}
+ 	else if (icon != NULL)
+ 	{
+ 		if (GuiWin)
+ 			SetWindowText(hVimWnd, icon);
+ 		else if (IsTelnet)
+ 			;
+ 		else
+ 			SetConsoleTitle(icon);
+ 	}
+ }
+ 
+ /*
+  * Restore the window/icon title.
+  * which is one of:
+  *    1  Just restore title
+  *  2  Just restore icon (which we don't have)
+  *    3  Restore title and icon (which we don't have)
+  */
+ 	void
+ mch_restore_title(which)
+ 	int which;
+ {
+ 	mch_settitle((which & 1) ? OrigTitle : NULL, NULL);
+ }
+ 
+ /*
+  * Get name of current directory into buffer 'buf' of length 'len' bytes.
+  * Return non-zero for success.
+  */
+ 	int
+ vim_dirname(buf, len)
+ 	char_u         *buf;
+ 	int             len;
+ {
+ #ifdef __BORLANDC__
+ 	return (getcwd(buf, len) != NULL ? OK : FAIL);
+ #else
+ 	return (_getcwd(buf, len) != NULL ? OK : FAIL);
+ #endif
+ }
+ 
+ /*
+  * get absolute filename into buffer 'buf' of length 'len' bytes
+  */
+ 	int
+ FullName(fname, buf, len)
+ 	char_u         *fname,
+ 				   *buf;
+ 	int             len;
+ {
+ 	if (fname == NULL)          /* always fail */
+ 		return FAIL;
+ 
+ 	if (_fullpath(buf, fname, len) == NULL) {
+ 		strncpy(buf, fname, len);       /* failed, use the relative path name */
+ 		return FAIL;
+ 	}
+ 	return OK;
+ }
+ 
+ /*
+  * return TRUE is fname is an absolute path name
+  */
+ 	int
+ isFullName(fname)
+ 	char_u        *fname;
+ {
+ #ifdef notdef
+ 	return (STRCHR(fname, ':') != NULL);
+ #else
+ 	if (strlen(fname) > 3 && isalpha(fname[0]) && fname[1] == ':' && fname[2] == '\\')
+ 		return(TRUE);
+ # if 0
+ 	if (strlen(fname) > 3 && isalpha(fname[0]) && fname[1] == ':' && fname[2] == '/')
+ 		return(TRUE);
+ # endif
+ 	if (strlen(fname) >= 2 && fname[0] == '\\' && fname[1] == '\\')
+ 		return(TRUE);
+ 	return(FALSE);
+ #endif
+ }
+ 
+ /*
+  * get file permissions for 'name'
+  * -1 : error
+  * else FA_attributes defined in dos.h
+  */
+ 	long
+ getperm(name)
+ 	char_u         *name;
+ {
+ 	struct stat statb;
+ 	long        r;
+ 
+ #ifdef USE_EXFILE
+ 	if (ef_stat(name, &statb))
+ #else
+ 	if (stat(name, &statb))
+ #endif
+ 		return -1;
+ 	r = statb.st_mode & 0x7fffffff;
+ 	return r;
+ }
+ 
+ /*
+  * set file permission for 'name' to 'perm'
+  */
+ 	int
+ setperm(name, perm)
+ 	char_u         *name;
+ 	long            perm;
+ {
+ 	return chmod(name, perm);
+ }
+ 
+ /*
+  * check if "name" is a directory
+  */
+ int             isdir(name)
+ 	char_u         *name;
+ {
+ 	int f;
+ 
+ 	f = getperm(name);
+ 	if (f == -1)
+ 		return -1;                    /* file does not exist at all */
+ 	if ((f & S_IFDIR) == 0)
+ 		return FAIL;                /* not a directory */
+ 	return OK;
+ }
+ 
+ /*
+  * Careful: mch_windexit() may be called before mch_windinit()!
+  */
+ 	void
+ mch_windexit(r)
+ 	int             r;
+ {
+ 	if (GuiWin && NameBuff != NULL)
+ 	{
+ 		if (GuiConfig == 0)
+ 			SaveConfig();
+ 	}
+ 	else
+ 		GuiWin = FALSE;
+ #ifdef FEPCTRL
+ 	if (FepInit)
+ 		fep_term();
+ #endif
+ 	if (GuiWin)
+ 		delay(100);
+ 	settmode(0);
+ 	stoptermcap();
+ 	flushbuf();
+ 	ml_close_all();                 /* remove all memfiles */
+ 	mch_restore_title(3);
+ 	if (scriptout)
+ 		fclose(scriptout);
+ 	if (GuiWin)
+ 	{
+ 		MSG				msg;
+ 
+ 		DestroyWindow(hVimWnd);
+ 		while (GetMessage(&msg, NULL, 0, 0))
+ 		{
+ 			if (!TranslateAccelerator(hVimWnd, hAcc, &msg))
+ 			{
+ 				TranslateMessage(&msg);
+ 				DispatchMessage(&msg);
+ 			}
+ 		}
+ 	}
+ #ifdef USE_EXFILE
+ 	ef_term();
+ #endif
+ 	if (BenchTime && !ctrlc_pressed)
+ 	{
+ 		DWORD		tm = GetTickCount() - BenchTime;
+ 		char		buf[256];
+ 
+ 		sprintf(buf, "%dm %ds %d",
+ 				tm / (60 * 1000), (tm % (60 * 1000)) / 1000, tm % 1000);
+ 		MessageBox(NULL, buf, "Bench Mark Time", MB_OK);
+ 	}
+ 	ExitProcess(r);
+ }
+ 
+ /*
+  * function for ctrl-break interrupt
+  */
+ #ifndef notdef
+ 	static void
+ v_hangup(void *arg)
+ {
+ 	TerminateThread(h_mainthread, 0);    /* forced terminate main processing */
+ 	docmdline(":qall!");
+ }
+ #endif
+ 
+ 	BOOL WINAPI
+ handler_routine(DWORD dwCtrlType)
+ {
+ #ifdef notdef
+ 	cbrk_pressed = TRUE;
+ 	ctrlc_pressed = TRUE;
+ #else
+ # ifdef __BORLANDC__
+ 	DWORD		IdThread;
+ 	HANDLE		hang_thread;
+ # else
+ 	ULONG		hang_thread;
+ # endif
+ 	static int firsttime = TRUE;
+ 
+ 	switch (dwCtrlType) {
+ 	case CTRL_BREAK_EVENT:
+ 	case CTRL_C_EVENT:
+ 		cbrk_pressed = TRUE;
+ 		ctrlc_pressed = TRUE;
+ 		return(TRUE);
+ 	case CTRL_CLOSE_EVENT:
+ 	case CTRL_LOGOFF_EVENT:
+ 	case CTRL_SHUTDOWN_EVENT:
+ 		if (!firsttime) {
+ 			return (TRUE);                /* show default dialog box */
+ 		}
+ 		firsttime = FALSE;
+ 		SuspendThread(h_mainthread);		/* suspend main processing */
+ # ifdef __BORLANDC__
+ #  if 1
+ 		TerminateThread(h_mainthread, 0);	/*forced terminate main processing*/
+ 		docmdline(":qall!");
+ #  else
+ 		hang_thread = CreateThread(NULL, 0,
+ 					(LPTHREAD_START_ROUTINE)v_hangup, NULL, 0, &IdThread);
+ 		if (hang_thread != NULL) {
+ 			WaitForSingleObject(hang_thread, 10000);
+ 										/* wait for finish thread */
+ 		}
+ #  endif
+ # else    /* MICROSOFT */
+ 		hang_thread = _beginthread(v_hangup, 0x2000, NULL);
+ 						/* process exception by multi-thread C Library manner */
+ 		if (hang_thread != (ULONG)-1) {
+ 			WaitForSingleObject((HANDLE)hang_thread, 10000);
+ 										/* wait for finish thread */
+ 		}
+ # endif
+ 		return(TRUE);
+ 	}
+ 	return(FALSE);
+ #endif
+ }
+ 
+ /*
+  * set the tty in (raw) ? "raw" : "cooked" mode
+  *
+  */
+ 
+ 	void
+ mch_settmode(raw)
+ 	int             raw;
+ {
+ 	DWORD           cmodein;
+ 	DWORD           cmodeout;
+ 
+ 	if (GuiWin || IsTelnet)
+ 		return;
+ 	if (term_console)
+ 		scroll_region = FALSE;
+ 	GetConsoleMode(hConIn, &cmodein);
+ 	GetConsoleMode(hConOut, &cmodeout);
+ 
+ 	if (raw) {
+ 		if (term_console)
+ 			outstr(T_TP);       /* set colors */
+ 
+ 		cmodein &= ~(ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT |
+ #ifdef KANJI
+ 					 ENABLE_MOUSE_INPUT |
+ #endif
+ 					 ENABLE_ECHO_INPUT);
+ #ifdef notdef
+ 		cmodein |= ENABLE_WINDOW_INPUT;
+ #endif
+ 
+ 		SetConsoleMode(hConIn, cmodein);
+ 
+ #ifndef KANJI
+ 		cmodeout &= ~(ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT);
+ #endif
+ 
+ 		SetConsoleMode(hConOut, cmodeout);
+ 		SetConsoleCtrlHandler(handler_routine, TRUE);
+ 	} else {
+ 
+ 		if (term_console)
+ 			normvideo();        /* restore screen colors */
+ 
+ 		cmodein |= (ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT |
+ #ifdef KANJI
+ 					ENABLE_MOUSE_INPUT |
+ #endif
+ 					ENABLE_ECHO_INPUT);
+ 		cmodein &= ~(ENABLE_WINDOW_INPUT);
+ 
+ 		SetConsoleMode(hConIn, cmodein);
+ 
+ #ifndef KANJI
+ 		cmodeout |= (ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT);
+ #endif
+ 
+ 		SetConsoleMode(hConOut, cmodeout);
+ 
+ 		SetConsoleCtrlHandler(handler_routine, FALSE);
+ 	}
+ }
+ 
+ 	int
+ mch_get_winsize()
+ {
+ 	if (GuiWin)
+ 	{
+ 		Columns = nowCols;
+ 		v_region = Rows = nowRows;
+ 		mch_set_winsize();
+ #ifdef FEPCTRL
+ 		if (FepInit)
+ 			fep_win_font(hVimWnd, &config_font);
+ #endif
+ 	}
+ 	else if (IsTelnet)
+ 	{
+ 		getlinecol();	/* get "co" and "li" entries from termcap */
+ 		if (Columns <= 0 || Rows <= 0)
+ 		{
+ 			Columns = 80;
+ 			maxRows = Rows = 25;
+ 			return OK;
+ 		}
+ 	}
+ 	else
+ 	{
+ 		/*
+ 		 * Use the console mode API
+ 		 */
+ 		if (GetConsoleScreenBufferInfo(hConOut, &csbi)) {
+ 			maxRows = Rows = csbi.dwSize.Y;
+ 			maxRows = csbi.dwSize.Y;
+ 			Rows = csbi.srWindow.Bottom - csbi.srWindow.Top + 1;
+ 			Columns = csbi.dwSize.X;
+ 			DefaultAttribute = csbi.wAttributes;
+ #ifndef notdef
+ 			if (!v_nt)
+ 				DefaultAttribute = csbi.wAttributes | FOREGROUND_INTENSITY;
+ #endif
+ #ifdef KANJI
+ 			if (term_console) {
+ 				if (!(ver_info.dwPlatformId == VER_PLATFORM_WIN32_NT
+ 						&& ver_info.dwMajorVersion == 3
+ 						&& ver_info.dwMinorVersion == 50)) {
+ 					Rows--;
+ 				} else {
+ #  ifdef FEPCTRL
+ 					if (FepInit)
+ 					{
+ 						if (fep_init())
+ 							Rows--;
+ 					}
+ #  endif
+ 				}
+ 			}
+ #endif
+ 		} else {
+ 			maxRows = Rows = 25;
+ 			Columns = 80;
+ 		}
+ 
+ 		if (Columns < 5 || Columns > MAX_COLUMNS ||
+ 			Rows < 2 || Rows > MAX_COLUMNS) {
+ 			/* these values are overwritten by termcap size or default */
+ 			Columns = 80;
+ 			maxRows = Rows = 25;
+ 			return OK;
+ 		}
+ 	}
+ 	check_winsize();
+ 	/*script_winsize();*/
+ 
+ 	return OK;
+ }
+ 
+ /*********************************************************************
+ * FUNCTION: perr(PCHAR szFileName, int line, PCHAR szApiName,        *
+ *                DWORD dwError)                                      *
+ *                                                                    *
+ * PURPOSE: report API errors. Allocate a new console buffer, display *
+ *          error number and error text, restore previous console     *
+ *          buffer                                                    *
+ *                                                                    *
+ * INPUT: current source file name, current line number, name of the  *
+ *        API that failed, and the error number                       *
+ *                                                                    *
+ * RETURNS: none                                                      *
+ *********************************************************************/
+ 
+ /* maximum size of the buffer to be returned from FormatMessage */
+ #define MAX_MSG_BUF_SIZE 512
+ 
+ 	void
+ perr(PCHAR szFileName, int line, PCHAR szApiName, DWORD dwError)
+ {
+ 	CHAR            szTemp[1024];
+ 	DWORD           cMsgLen;
+ 	CHAR           *msgBuf;     /* buffer for message text from system */
+ 	int             iButtonPressed;     /* receives button pressed in the
+ 										 * error box */
+ 
+ 	/* format our error message */
+ 	sprintf(szTemp, "%s: Error %d from %s on line %d:\n", szFileName,
+ 			dwError, szApiName, line);
+ 	/* get the text description for that error number from the system */
+ 	cMsgLen = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM |
+ 						 FORMAT_MESSAGE_ALLOCATE_BUFFER | 40, NULL, dwError,
+ 	 MAKELANGID(0, SUBLANG_ENGLISH_US), (LPTSTR) & msgBuf, MAX_MSG_BUF_SIZE,
+ 							NULL);
+ 	if (!cMsgLen)
+ 		sprintf(szTemp + strlen(szTemp), "Unable to obtain error message text! \n"
+ 				"%s: Error %d from %s on line %d", __FILE__,
+ 				GetLastError(), "FormatMessage", __LINE__);
+ 	else
+ 		strcat(szTemp, msgBuf);
+ 	strcat(szTemp, "\n\nContinue execution?");
+ 	MessageBeep(MB_ICONEXCLAMATION);
+ 	iButtonPressed = MessageBox(NULL, szTemp, "Console API Error",
+ 						  MB_ICONEXCLAMATION | MB_YESNO | MB_SETFOREGROUND);
+ 	/* free the message buffer returned to us by the system */
+ 	if (cMsgLen)
+ 		LocalFree((HLOCAL) msgBuf);
+ 	if (iButtonPressed == IDNO)
+ 		exit(1);
+ 	return;
+ }
+ #define PERR(bSuccess, api) {if (!(bSuccess)) perr(__FILE__, __LINE__, \
+ 	api, GetLastError());}
+ 
+ 
+ 	static void
+ resizeConBufAndWindow(HANDLE hConsole, long xSize, long ySize)
+ {
+ 	CONSOLE_SCREEN_BUFFER_INFO csbi;    /* hold current console buffer info */
+ 	BOOL            bSuccess;
+ 	SMALL_RECT      srWindowRect;       /* hold the new console size */
+ 	COORD           coordScreen;
+ 
+ 	bSuccess = GetConsoleScreenBufferInfo(hConsole, &csbi);
+ 	PERR(bSuccess, "GetConsoleScreenBufferInfo");
+ 	/* get the largest size we can size the console window to */
+ 	coordScreen = GetLargestConsoleWindowSize(hConsole);
+ 	PERR(coordScreen.X | coordScreen.Y, "GetLargestConsoleWindowSize");
+ 	/* define the new console window size and scroll position */
+ 	srWindowRect.Right = (SHORT) (min(xSize, coordScreen.X) - 1);
+ 	srWindowRect.Bottom = (SHORT) (min(ySize, coordScreen.Y) - 1);
+ 	srWindowRect.Left = srWindowRect.Top = (SHORT) 0;
+ 	/* define the new console buffer size */
+ 	coordScreen.X = xSize;
+ 	coordScreen.Y = ySize;
+ 	/* if the current buffer is larger than what we want, resize the */
+ 	/* console window first, then the buffer */
+ 	if ((DWORD) csbi.dwSize.X * csbi.dwSize.Y > (DWORD) xSize * ySize) {
+ 		bSuccess = SetConsoleWindowInfo(hConsole, TRUE, &srWindowRect);
+ 		PERR(bSuccess, "SetConsoleWindowInfo");
+ 		bSuccess = SetConsoleScreenBufferSize(hConsole, coordScreen);
+ 		PERR(bSuccess, "SetConsoleScreenBufferSize");
+ 	}
+ 	/* if the current buffer is smaller than what we want, resize the */
+ 	/* buffer first, then the console window */
+ 	if ((DWORD) csbi.dwSize.X * csbi.dwSize.Y < (DWORD) xSize * ySize) {
+ 		bSuccess = SetConsoleScreenBufferSize(hConsole, coordScreen);
+ 		PERR(bSuccess, "SetConsoleScreenBufferSize");
+ 		bSuccess = SetConsoleWindowInfo(hConsole, TRUE, &srWindowRect);
+ 		PERR(bSuccess, "SetConsoleWindowInfo");
+ 	}
+ 	/* if the current buffer *is* the size we want, don't do anything! */
+ 	return;
+ }
+ 
+ 	void
+ mch_set_winsize()
+ {
+ 	if (GuiWin)
+ 	{
+ 		RECT		rcClient;
+ 		RECT		rcWindow;
+ 
+ 		GetClientRect(hVimWnd, &rcClient);
+ 		if (GetWindowRect(hVimWnd, &rcWindow))
+ 		{
+ 			config_w = ((rcWindow.right - rcWindow.left)
+ 							- (rcClient.right - rcClient.left))
+ 							+ v_xchar * Columns;
+ 			config_h = ((rcWindow.bottom - rcWindow.top)
+ 							- (rcClient.bottom - rcClient.top))
+ 							+ v_ychar * Rows;
+ 			MoveWindow(hVimWnd, rcWindow.left, rcWindow.top, config_w, config_h, TRUE);
+ 		}
+ 	}
+ 	else if (IsTelnet)
+ 		;
+ 	else
+ 	{
+ 		resizeConBufAndWindow(hConOut, Columns, Rows);
+ 		mch_get_winsize();
+ 	}
+ }
+ 
+ 	int
+ call_shell(cmd, filter, cooked)
+ 	char_u         *cmd;
+ 	int             filter;     /* if != 0: called by dofilter() */
+ 	int             cooked;
+ {
+ 	int             x = 0;
+ 	char            newcmd[200];
+ 
+ 	flushbuf();
+ 
+ #ifdef FEPCTRL
+ 	if (FepInit && !GuiWin)
+ 		fep_term();
+ #endif
+ 
+ 	if (cooked)
+ 		settmode(0);            /* set to cooked mode */
+ 
+ 	if (GuiWin)
+ 	{
+ 		STARTUPINFO				si;
+ 		PROCESS_INFORMATION		pi;
+ 
+ 		memset(&pi, 0, sizeof(pi));
+ 		memset(&si, 0, sizeof(si));
+ 		si.cb = sizeof(si);
+ 		if (cmd == NULL)
+ 		{
+ 			if (CreateProcess(p_sh, NULL, NULL, NULL, FALSE,
+ 					CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi) == TRUE)
+ 			{
+ 				CloseHandle(pi.hProcess);
+ 				CloseHandle(pi.hThread);
+ 			}
+ 			else
+ 				x = GetLastError();
+ 		}
+ 		else if (filter || DoMake || BenchTime)
+ 		{
+ 			si.dwFlags = STARTF_USESHOWWINDOW;
+ 			si.wShowWindow = /*SW_HIDE*/SW_MINIMIZE;
+ 			sprintf(newcmd, "%s /c %s", p_sh, cmd);
+ 			if (CreateProcess(NULL, newcmd, NULL, NULL, TRUE,
+ 					CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi) == TRUE)
+ 			{
+ 				for (;;)
+ 				{
+ 					if (WaitForSingleObject(pi.hProcess, 100) == WAIT_OBJECT_0)
+ 					{
+ 						CloseHandle(pi.hProcess);
+ 						CloseHandle(pi.hThread);
+ 						break;
+ 					}
+ 					breakcheck();
+ 				}
+ 				TopWindow(hVimWnd);
+ 			}
+ 			else
+ 				x = GetLastError();
+ 		}
+ 		else
+ 		{
+ 			if (v_nt)
+ 				sprintf(newcmd, "%s /c %s && pause", p_sh, cmd);
+ 			else
+ 			{
+ 				FILE	*	fp;
+ 				int			i;
+ 				char		batbuf[MAXPATHL];
+ 
+ 				for (i = 0; i < 1000; i++)
+ 				{
+ 					batbuf[0] = '\0';
+ 					if (p_dir != NULL && *p_dir != NUL)
+ 					{
+ 						if (*p_dir == '>')	/* skip '>' in front of dir name */
+ 							STRCPY(batbuf, p_dir + 1);
+ 						else
+ 							STRCPY(batbuf, p_dir);
+ 						if (!ispathsep(*(batbuf + STRLEN(batbuf) - 1)))
+ 							STRCAT(batbuf, PATHSEPSTR);
+ 					}
+ 					sprintf(&batbuf[STRLEN(batbuf)], "vim%05d.bat", i);
+ 					if (getperm(batbuf) < 0)
+ 					{
+ 						if ((fp = fopen(batbuf, "w")) != NULL)
+ 						{
+ 							fprintf(fp, "%s\r\n", cmd);
+ 							fprintf(fp, "pause\r\n");
+ 							fprintf(fp, "del \"%s\"\r\n", batbuf);
+ 							fclose(fp);
+ 							sprintf(newcmd, "%s /c %s", p_sh, batbuf);
+ 							break;		/* for loop */
+ 						}
+ 					}
+ 				}
+ 			}
+ 			if (CreateProcess(NULL, newcmd, NULL, NULL, FALSE,
+ 					CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi) == TRUE)
+ 			{
+ 				CloseHandle(pi.hProcess);
+ 				CloseHandle(pi.hThread);
+ 			}
+ 			else
+ 				x = GetLastError();
+ 		}
+ 		if (!filter && x == 0 && c_end == 0)
+ 			cbuf[c_end++] = '\n';
+ 	}
+ 	else
+ 	{
+ 		if (cmd == NULL)
+ 			x = system(p_sh);
+ 		else
+ 		{
+ 			sprintf(newcmd, "%s /c %s", p_sh, cmd);
+ 			x = system(newcmd);
+ 		}
+ 		outchar('\n');
+ 	}
+ 	if (cooked)
+ 		settmode(1);            /* set to raw mode */
+ 
+ #ifdef WEBB_COMPLETE
+ 	if (x && !expand_interactively)
+ #else
+ 	if (x)
+ #endif
+ 	{
+ 		smsg("%d returned", x);
+ 		outchar('\n');
+ 	}
+ 
+ #ifdef FEPCTRL
+ 	if (FepInit && !GuiWin)
+ 		fep_init();
+ #endif
+ 
+ 	resettitle();
+ 	return x;
+ }
+ 
+ #define FL_CHUNK 32
+ 
+ 	static void
+ addfile(fl, f, isdir)
+ 	FileList       *fl;
+ 	char           *f;
+ 	int             isdir;
+ {
+ 	char           *p;
+ 
+ 	if (!fl->file) {
+ 		fl->file = (char_u **) alloc(sizeof(char *) * FL_CHUNK);
+ 		if (!fl->file)
+ 			return;
+ 		fl->nfiles = 0;
+ 		fl->maxfiles = FL_CHUNK;
+ 	}
+ 	if (fl->nfiles >= fl->maxfiles) {
+ 		char_u        **t;
+ 		int             i;
+ 
+ 		t = (char_u **)lalloc(sizeof(char *) * (fl->maxfiles + FL_CHUNK), TRUE);
+ 		if (!t)
+ 			return;
+ 		for (i = fl->nfiles - 1; i >= 0; i--)
+ 			t[i] = fl->file[i];
+ 		free(fl->file);
+ 		fl->file = t;
+ 		fl->maxfiles += FL_CHUNK;
+ 	}
+ 	p = alloc((unsigned) (strlen(f) + 1 + isdir));
+ 	if (p) {
+ 		strcpy(p, f);
+ 		if (isdir)
+ 			strcat(p, "/");
+ 	}
+ 	fl->file[fl->nfiles++] = p;
+ }
+ 
+ #ifdef __BORLANDC__
+ 	static int
+ pstrcmp(a, b)
+ 	char_u        **a,
+ 				  **b;
+ {
+ 	return (strcmp(*a, *b));
+ }
+ #else
+ 	static int
+ pstrcmp(const void *s1, const void *s2)
+ {
+ 	unsigned char * p1 = *(unsigned char **)s1;
+ 	unsigned char * p2 = *(unsigned char **)s2;
+ 
+ 	return (strcmp(p1, p2));
+ }
+ #endif
+ 
+ 	int
+ has_wildcard(s)
+ 	char_u         *s;
+ {
+ 	int			pos = 1;
+ 
+ 	if (do_drag)
+ 		return 0;
+ 	if (s)
+ #ifndef notdef
+ 		if (*s == '~' || *s == '$')
+ 			return 1;
+ 		else
+ #endif
+ 		for (; *s; ++s, ++pos)
+ 		{
+ #ifdef XARGS
+ 			if (*s == '[' || *s == '{')
+ 				return pos;
+ 			else
+ #endif
+ 			if (*s == '?' || *s == '*')
+ 				return pos;
+ #ifdef KANJI
+ 			if (ISkanji(*s))
+ 			{
+ 				++s;
+ 				++pos;
+ 			}
+ #endif
+ 		}
+ 	return 0;
+ }
+ 
+ static int
+ has_wildcards(s)
+ 	char_u         *s;
+ {
+ 	int			pos = 1;
+ 	if (s)
+ 		for (; *s; ++s, ++pos)
+ 		{
+ 			if (*s == '?' || *s == '*')
+ 				return pos;
+ #ifdef KANJI
+ 			if (ISkanji(*s))
+ 			{
+ 				++s;
+ 				++pos;
+ 			}
+ #endif
+ 		}
+ 	return 0;
+ }
+ 
+ 	static void
+ strlowcpy(d, s)
+ 	char           *d,
+ 				   *s;
+ {
+ 	while (*s)
+ 		*d++ = tolower(*s++);
+ 	*d = '\0';
+ }
+ 
+ 	static int
+ expandpath(fl, path, fonly, donly, notf)
+ 	FileList       *fl;
+ 	char           *path;
+ 	int             fonly,
+ 					donly,
+ 					notf;
+ {
+ 	char            buf[MAX_PATH];
+ 	char           *p,
+ 				   *s,
+ 				   *e;
+ 	int             lastn,
+ 					c = 1,
+ 					r;
+ 	WIN32_FIND_DATA fb;
+ 	HANDLE          hFind;
+ 
+ 	lastn = fl->nfiles;
+ 
+ /*
+  * Find the first part in the path name that contains a wildcard.
+  * Copy it into buf, including the preceding characters.
+  */
+ 	p = buf;
+ 	s = NULL;
+ 	e = NULL;
+ #ifndef notdef
+ 	memset(buf, NUL, sizeof(buf));
+ #endif
+ 	while (*path) {
+ 		if (*path == '\\' || *path == ':' || *path == '/') {
+ 			if (e)
+ 				break;
+ 			else
+ 				s = p;
+ 		}
+ 		if (*path == '*' || *path == '?')
+ 			e = p;
+ #ifdef KANJI
+ 		if (ISkanji(*path))
+ 			*p++ = *path++;
+ #endif
+ 		*p++ = *path++;
+ 	}
+ 	e = p;
+ 	if (s)
+ 		s++;
+ 	else
+ 		s = buf;
+ 
+ 	/* now we have one wildcard component between s and e */
+ 	*e = '\0';
+ 	r = 0;
+ 	/* If we are expanding wildcards we try both files and directories */
+ 	if ((hFind = FindFirstFile(buf, &fb)) == INVALID_HANDLE_VALUE) {
+ 		/* not found */
+ #ifndef notdef
+ 		if (has_wildcard(buf))
+ 			return 0;
+ #endif
+ 		strcpy(e, path);
+ 		if (notf)
+ 			addfile(fl, buf, FALSE);
+ 		return 1;               /* unexpanded or empty */
+ 	}
+ 	while (c) {
+ #ifdef notdef
+ 		strlowcpy(s, fb.cFileName);
+ #else
+ 		strcpy(s, fb.cFileName);
+ #endif
+ 		if (*s != '.' || (s[1] != '\0' && (s[1] != '.' || s[2] != '\0'))) {
+ 			strcat(buf, path);
+ 			if (!has_wildcard(path))
+ 				addfile(fl, buf, (isdir(buf) > 0));
+ 			else
+ 				r |= expandpath(fl, buf, fonly, donly, notf);
+ 		}
+ 		c = FindNextFile(hFind, &fb);
+ 	}
+ 	qsort(fl->file + lastn, fl->nfiles - lastn, sizeof(char *), pstrcmp);
+ 	FindClose(hFind);
+ 	return r;
+ }
+ 
+ /*
+  * MSDOS rebuilt of Scott Ballantynes ExpandWildCard for amiga/arp.
+  * jw
+  */
+ 
+ 	int
+ ExpandWildCards(num_pat, pat, num_file, file, files_only, list_notfound)
+ 	int             num_pat;
+ 	char_u        **pat;
+ 	int            *num_file;
+ 	char_u       ***file;
+ 	int             files_only,
+ 					list_notfound;
+ {
+ 	int             i,
+ 					r = 0;
+ 	FileList        f;
+ 
+ 	f.file = NULL;
+ 	f.nfiles = 0;
+ 	for (i = 0; i < num_pat; i++)
+ 	{
+ #if !defined(notdef) && defined(XARGS)
+ 		char_u		buf[MAXPATHL+4];
+ 		int			j;
+ 		char	**	result;
+ 
+ 		memset(buf, 0, sizeof(buf));
+ 		expand_env(pat[i], buf, MAXPATHL);
+ 		if (strcspn(buf, " \t{") < strlen(buf))
+ 		{
+ 			if (do_drag)
+ 				j = strlen(buf) + 1;
+ 			else if ((j = has_wildcards(buf)) == 0)
+ 				j = strlen(buf) + 1;
+ 			memmove(&buf[1], buf, strlen(buf) + 1);
+ 			memmove(&buf[j+1], &buf[j], strlen(buf) + 1 - j);
+ 			buf[0] = '\"';
+ 			buf[j] = '\"';
+ 		}
+ # ifdef USE_EXFILE
+ 		if (is_efarc(buf, '\0'))
+ 		{
+ 			strcat(buf, ":*");
+ 			result = ef_globfilename(buf, FALSE);
+ 		}
+ 		else if (buf[strlen(buf) - 1] == '\"')
+ 		{
+ 			buf[strlen(buf) - 1] = '\0';
+ 			if (is_efarc(&buf[1], '\0'))
+ 			{
+ 				strcat(buf, "\":*");
+ 				result = ef_globfilename(buf, FALSE);
+ 			}
+ 			else
+ 			{
+ 				strcat(buf, "\"");
+ 				result = ef_globfilename(buf, TRUE);
+ 			}
+ 		}
+ 		else
+ 			result = ef_globfilename(buf, TRUE);
+ # else
+ 		result = glob_filename(buf);
+ # endif
+ 		for (j = 0; result[j] != NULL; j++)
+ 		{
+ 			if (!has_wildcard(result[j]))
+ 				addfile(&f, result[j], files_only ? FALSE : (isdir(result[j]) == TRUE));
+ 			else
+ 				r |= expandpath(&f, result[j], files_only, 0, list_notfound);
+ 			free(result[j]);
+ 		}
+ 		free(result);
+ #else
+ 		if (!has_wildcard(pat[i]))
+ 			addfile(&f, pat[i], files_only ? FALSE : (isdir(pat[i]) > 0));
+ 		else
+ 			r |= expandpath(&f, pat[i], files_only, 0, list_notfound);
+ #endif
+ 	}
+ 	if (r == 0)
+ 	{
+ 		*num_file = f.nfiles;
+ 		*file = f.file;
+ 	}
+ 	else
+ 	{
+ 		*num_file = 0;
+ 		*file = NULL;
+ 	}
+ 	return (r ? FAIL : OK);
+ }
+ 
+ 	void
+ FreeWild(num, file)
+ 	int             num;
+ 	char_u        **file;
+ {
+ 	if (file == NULL || num <= 0)
+ 		return;
+ 	while (num--)
+ 		free(file[num]);
+ 	free(file);
+ }
+ 
+ /*
+  * The normal chdir() does not change the default drive.
+  * This one does.
+  */
+ #undef chdir
+ int             vim_chdir(path)
+ 	char_u         *path;
+ {
+ 	if (path[0] == NUL)         /* just checking... */
+ 		return FAIL;
+ 	if (path[1] == ':') {       /* has a drive name */
+ 		if (_chdrive(toupper(path[0]) - 'A' + 1))
+ 			return -1;          /* invalid drive name */
+ 		path += 2;
+ 	}
+ 	if (*path == NUL)           /* drive name only */
+ 		return OK;
+ #ifdef __BORLANDC__
+ 	return chdir(path);         /* let the normal chdir() do the rest */
+ #else
+ 	return _chdir(path);        /* let the normal chdir() do the rest */
+ #endif
+ }
+ 
+ 	static void
+ clrscr()
+ {
+ 	DWORD           count;
+ 
+ 	ntcoord.X = 0;
+ 	ntcoord.Y = 0;
+ 	FillConsoleOutputCharacter(hConOut, ' ', Columns * maxRows,
+ 							   ntcoord, &count);
+ 	FillConsoleOutputAttribute(hConOut, DefaultAttribute, maxRows * Columns,
+ 							   ntcoord, &count);
+ }
+ 
+ 	static void
+ clreol()
+ {
+ 	DWORD           count;
+ 	FillConsoleOutputCharacter(hConOut, ' ',
+ 								Columns - ntcoord.X,
+ 								ntcoord, &count);
+ 	FillConsoleOutputAttribute(hConOut, DefaultAttribute,
+ 								Columns - ntcoord.X,
+ 								ntcoord, &count);
+ }
+ 
+ 	static void
+ insline(int count)
+ {
+ 	SMALL_RECT      source;
+ 	COORD           dest;
+ 	CHAR_INFO       fill;
+ 
+ 	dest.X = 0;
+ 	dest.Y = ntcoord.Y + count;
+ 
+ 	source.Left = 0;
+ 	source.Top = ntcoord.Y;
+ 	source.Right = Columns;
+ 	source.Bottom = Rows - 1;
+ 
+ 	fill.Char.AsciiChar = ' ';
+ 	fill.Attributes = DefaultAttribute;
+ 
+ 	ScrollConsoleScreenBuffer(hConOut, &source, (PSMALL_RECT) 0, dest, &fill);
+ #ifndef notdef
+ 	if (maxRows != Rows)
+ 	{
+ 		DWORD           w;
+ 		dest.X = 0;
+ 		dest.Y = maxRows - 1;
+ 		FillConsoleOutputCharacter(hConOut, ' ', Columns, dest, &w);
+ 		FillConsoleOutputAttribute(hConOut, DefaultAttribute, Columns, dest, &w);
+ 	}
+ #endif
+ }
+ 
+ 	static void
+ delline(int count)
+ {
+ 	SMALL_RECT      source;
+ 	COORD           dest;
+ 	CHAR_INFO       fill;
+ 
+ 	dest.X = 0;
+ 	dest.Y = ntcoord.Y;
+ 
+ 	source.Left = 0;
+ 	source.Top = ntcoord.Y + count;
+ 	source.Right = Columns;
+ 	source.Bottom = maxRows - 1;
+ 
+ 	/* get current attributes and fill out CHAR_INFO structure for fill char */
+ 	fill.Char.AsciiChar = ' ';
+ 	fill.Attributes = DefaultAttribute;
+ 
+ 	ScrollConsoleScreenBuffer(hConOut, &source, (PSMALL_RECT) 0, dest, &fill);
+ #ifndef notdef
+ 	if (count > 2)
+ 	{
+ 		DWORD           w;
+ 		dest.X = 0;
+ 		dest.Y = maxRows - 1 - count;
+ 		FillConsoleOutputCharacter(hConOut, ' ', Columns * count, dest, &w);
+ 		FillConsoleOutputAttribute(hConOut, DefaultAttribute,
+ 												Columns * count, dest, &w);
+ 	}
+ #endif
+ }
+ 
+ 
+ 	static void
+ scroll()
+ {
+ 	SMALL_RECT      source;
+ 	COORD           dest;
+ 	CHAR_INFO       fill;
+ 
+ 	dest.X = 0;
+ 	dest.Y = 0;
+ 
+ 	source.Left = 0;
+ 	source.Top = 1;
+ 	source.Right = Columns;
+ 	source.Bottom = Rows - 1;
+ 
+ 	/* get current attributes and fill out CHAR_INFO structure for fill char */
+ 	fill.Char.AsciiChar = ' ';
+ 	fill.Attributes = DefaultAttribute;
+ 
+ 	ScrollConsoleScreenBuffer(hConOut, &source, (PSMALL_RECT) 0, dest, &fill);
+ }
+ 
+ 	static void
+ gotoxy(x, y)
+ 	register int    x,
+ 					y;
+ {
+ 	ntcoord.X = x - 1;
+ 	ntcoord.Y = y - 1;
+ 	SetConsoleCursorPosition(hConOut, ntcoord);
+ }
+ 
+ 	static void
+ normvideo()
+ {
+ 	WORD            attr = DefaultAttribute;
+ 
+ 	SetConsoleTextAttribute(hConOut, attr);
+ }
+ 
+ 	static void
+ textattr(WORD attr)
+ {
+ 	SetConsoleTextAttribute(hConOut, attr);
+ }
+ 
+ 	static void
+ putch(char c)
+ {
+ 	DWORD           count;
+ 
+ 	WriteConsole(hConOut, &c, 1, &count, 0);
+ 	ntcoord.X += count;
+ }
+ 
+ 	static void
+ delay(x)
+ {
+ 	if (GuiWin)
+ 	{
+ 		if (BenchTime == 0)
+ 			WaitForChar(x);
+ 	}
+ 	else if (IsTelnet)
+ 		Sleep(x);
+ 	else
+ 	{
+ #ifdef notdef
+ 		Sleep(x);
+ #else
+ 		while (x > 0)
+ 		{
+ 			if (kbhit())
+ 				break;
+ 			Sleep(100);
+ 			x -= 100;
+ 		}
+ #endif
+ 	}
+ }
+ 
+ #ifdef __BORLANDC__
+ 	void
+ #endif
+ sleep(x)
+ {
+ #ifdef notdef
+ 	Sleep(x * 1000);
+ #else
+ 	delay(x * 1000);
+ #endif
+ #ifndef __BORLANDC__
+ 	return 0;
+ #endif
+ }
+ 
+ 	static void
+ vbell()
+ {
+ 	COORD           origin = {0, 0};
+ 	WORD            flash = ~DefaultAttribute & 0xff;
+ 	DWORD           count;
+ 	LPWORD          oldattrs;
+ 
+ 	if (p_vb) {
+ 		oldattrs = (LPWORD) alloc(Rows * Columns * sizeof(WORD));
+ 		if (oldattrs) {
+ 			ReadConsoleOutputAttribute(hConOut, oldattrs, Rows * Columns,
+ 											origin, &count);
+ 			FillConsoleOutputAttribute(hConOut, flash, Rows * Columns,
+ 											origin, &count);
+ 			WriteConsoleOutputAttribute(hConOut, oldattrs, Rows * Columns,
+ 											origin, &count);
+ 			free(oldattrs);
+ 		}
+ 	} else {
+ 		WriteConsole(hConOut, "\a", 1, &count, 0);
+ 	}
+ }
+ 
+ 	static void
+ cursor_visible(int visible)
+ {
+ #ifndef FEPCTRL
+ 	CONSOLE_CURSOR_INFO cci;
+ 
+ 	cci.bVisible = visible ? TRUE : FALSE;
+ #ifdef notdef
+ 	cci.dwSize = 100;           /* 100 percent cursor */
+ #else
+ 	cci.dwSize = 30;            /*  30 percent cursor */
+ #endif
+ 	SetConsoleCursorInfo(hConOut, &cci);
+ #endif
+ }
+ 
+ 	void
+ set_window(void)
+ {
+ }
+ 
+ /*
+  * check for an "interrupt signal": CTRL-break or CTRL-C
+  */
+ 	void
+ breakcheck()
+ {
+ 	if (GuiWin)
+ 	{
+ 		MSG				msg;
+ 
+ 		while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) == TRUE)
+ 		{
+ 			if (!TranslateAccelerator(hVimWnd, hAcc, &msg))
+ 			{
+ 				TranslateMessage(&msg);
+ 				DispatchMessage(&msg);
+ 			}
+ 		}
+ 	}
+ #ifdef USE_EXFILE
+ 	if (ef_breakcheck() || ctrlc_pressed)
+ #else
+ 	if (ctrlc_pressed)
+ #endif
+ 	{
+ 		ctrlc_pressed = FALSE;
+ 		got_int = TRUE;
+ 	}
+ }
+ 
+ 	long
+ mch_avail_mem(spec)
+ 	int spec;
+ {
+ 	return 0x7fffffff;        /* virual memory eh */
+ }
+ 
+ /*
+  * return non-zero if a character is available
+  */
+ 	int
+ mch_char_avail()
+ {
+ 	return WaitForChar(0);
+ }
+ 
+ /*
+  * set screen mode, always fails.
+  */
+ 	int
+ mch_screenmode(arg)
+ 	char_u     *arg;
+ {
+ 	EMSG("Screen mode setting not supported");
+ 	return FAIL;
+ }
+ 
+ #ifndef notdef
+ 	static int
+ isctlkey()
+ {
+ 	switch (ir.Event.KeyEvent.wVirtualKeyCode) {
+ 	case VK_DELETE:
+ 		return '\177';
+ #ifdef NT106KEY
+ 	case 0xf3:  case 0xf4:        /* ZENKAKU / HANKAKU KEY */
+ 		if (v_nt)
+ 			return '[' & 0x1f;        /* ESC key !! */
+ 		break;
+ #endif
+ 	case '6':                    /* jkeyb.sys */ /* ken add */
+ 	case 0xde:                    /* ^ key */
+ 		if (ir.Event.KeyEvent.dwControlKeyState
+ 				& (RIGHT_CTRL_PRESSED | LEFT_CTRL_PRESSED))
+ 			return '^' & 0x1f;
+ 		break;
+ 	case '@':
+ 	case 0xc0: /* '@' key */
+ 		if (ir.Event.KeyEvent.dwControlKeyState
+ 				& (RIGHT_CTRL_PRESSED | LEFT_CTRL_PRESSED))
+ 			return K_ZERO;
+ 		break;
+ 	}
+ 	return 0;
+ }
+ #endif
+ 
+ 	void
+ chk_ctlkey(c, k)
+ 	int		*c;
+ 	int		*k;
+ {
+ 	int		w;
+ 
+ 	if (term_console)
+ 		return;
+ 	while (1)
+ 	{
+ 		if (*c == Ctrl('Q') || *c == Ctrl(']'))
+ 		{
+ 			w = vgetc();
+ 			switch (w) {
+ 			case 'h':
+ 				*c = K_LARROW;
+ 				break;
+ 			case 'j':
+ 				*c = K_DARROW;
+ 				break;
+ 			case 'k':
+ 				*c = K_UARROW;
+ 				break;
+ 			case 'l':
+ 				*c = K_RARROW;
+ 				break;
+ 			case 'H':
+ 			case 'b':
+ 				*c = K_SLARROW;
+ 				break;
+ 			case 'J':
+ 			case Ctrl('F'):
+ 				*c = K_SDARROW;
+ 				break;
+ 			case 'K':
+ 			case Ctrl('B'):
+ 				*c = K_SUARROW;
+ 				break;
+ 			case 'L':
+ 			case 'w':
+ 				*c = K_SRARROW;
+ 				break;
+ 			default:
+ 				beep();
+ #ifdef KANJI
+ 				if (ISkanji(w))
+ 					vgetc();
+ #endif
+ 				*c = vgetc();
+ #ifdef KANJI
+ 				if (ISkanji(*c))
+ 					*k = vgetc();
+ #endif
+ 				continue;
+ 			}
+ 		}
+ 		break;
+ 	}
+ }
+ 
+ typedef struct tagBIT {
+ 	WORD	bfType;			/* 00 */
+ 	BYTE	dummy1[16];		/* 02 */
+ 	WORD	biWidth;		/* 10 */
+ 	BYTE	dummy2[2];		/* 02 */
+ 	WORD	biHeight;		/* 14 */
+ } BIT;
+ 
+ static BIT	magic;
+ 
+ static int
+ isbitmap(fname)
+ char		*	fname;
+ {
+ 	int				fd;
+ 	int				len;
+ 
+ 	config_trans = FALSE;
+ 	if ((strlen(fname) >= strlen(".bmp"))
+ 			&& strnicmp(&fname[strlen(fname) - 4], ".bmp", strlen(".bmp")) == 0)
+ 	{
+ 		if ((fd = open(fname, O_RDONLY, S_IREAD | S_IWRITE)) < 0)
+ 			goto fail;
+ 		len = read(fd, &magic, sizeof(magic));
+ 		close(fd);
+ 		if (len < sizeof(magic))
+ 			goto fail;
+ 		if (memcmp(&magic.bfType, "BM", 2) == 0)
+ 			return(TRUE);
+ 	}
+ fail:
+ 	if (strcmp(fname, "trans") == 0)
+ 	{
+ 		config_trans = TRUE;
+ 		return(TRUE);
+ 	}
+ 	return(FALSE);
+ }
+ 
+ static BOOL
+ DrawBitmap(HDC hDC, HBITMAP hBitmap, BOOL bh)
+ {
+ 	HBITMAP				hOldBitmap;
+ 	HPALETTE			hPalette, hOldPalette;
+ 	HDC					hMemDC;
+ 	BITMAP				bm;
+ 	int					cxDesired = 0;
+ 	int					cyDesired = 0;
+ 
+ 	if (hBitmap == NULL)
+ 		return FALSE;
+ 
+ 	cxDesired = Columns * v_xchar;
+ 	cyDesired = Rows * v_ychar;
+ 	GetObject(hBitmap, sizeof(BITMAP), &bm);
+ 	if ((bm.bmBitsPixel * bm.bmPlanes) <= 8)
+ 	{
+ 		HDC				hMemDC;
+ 		HBITMAP			hOldBitmap;
+ 		RGBQUAD			rgb[256];
+ 		LPLOGPALETTE	pLogPal;
+ 		WORD			i;
+ 
+ 		hMemDC = CreateCompatibleDC(NULL);
+ 		hOldBitmap = SelectObject(hMemDC, hBitmap);
+ 		GetDIBColorTable(hMemDC, 0, 256, rgb);
+ 		pLogPal = malloc(sizeof(LOGPALETTE) + (256 * sizeof(PALETTEENTRY)));
+ 		pLogPal->palVersion = 0x300;
+ 		pLogPal->palNumEntries = 256;
+ 		for (i = 0; i < 256; i++)
+ 		{
+ 			pLogPal->palPalEntry[i].peRed	= rgb[i].rgbRed;
+ 			pLogPal->palPalEntry[i].peGreen	= rgb[i].rgbGreen;
+ 			pLogPal->palPalEntry[i].peBlue	= rgb[i].rgbBlue;
+ 			pLogPal->palPalEntry[i].peFlags	= 0;
+ 		}
+ 		hPalette = CreatePalette(pLogPal);
+ 		free(pLogPal);
+ 		SelectObject(hMemDC, hOldBitmap);
+ 		DeleteDC(hMemDC);
+ 	}
+ 	else
+ 	{
+ 		HDC			hRefDC;
+ 
+ 		hRefDC = GetDC(NULL);
+ 		hPalette = CreateHalftonePalette(hRefDC);
+ 		ReleaseDC(NULL, hRefDC);
+ 	}
+ 	hMemDC		= CreateCompatibleDC(hDC);
+ 	hOldBitmap	= SelectObject(hMemDC, hBitmap);
+ 	hOldPalette	= SelectPalette(hDC, hPalette, FALSE);
+ 	RealizePalette(hDC);
+ 
+ #if 1
+ 	{
+ 		HBRUSH		hbrush, holdbrush;
+ 		RECT		rcWindow;
+ 
+ 		hbrush	= CreateSolidBrush(*v_bgcolor);
+ 	    holdbrush = SelectObject(hDC, hbrush);
+ 		if (bh)
+ 		{
+ 			rcWindow.left = 0;
+ 			rcWindow.top = 0;
+ 			rcWindow.right = (cxDesired - bm.bmWidth) / 2;
+ 			rcWindow.bottom = cyDesired;
+ 			FillRect(hDC, &rcWindow, hbrush);
+ 			rcWindow.left = (cxDesired - bm.bmWidth) / 2 + bm.bmWidth;
+ 			rcWindow.top = 0;
+ 			rcWindow.right = cxDesired;
+ 			rcWindow.bottom = cyDesired;
+ 			FillRect(hDC, &rcWindow, hbrush);
+ 		}
+ 		else
+ 		{
+ 			rcWindow.left = 0;
+ 			rcWindow.top = 0;
+ 			rcWindow.right = cxDesired;
+ 			rcWindow.bottom = (cyDesired - bm.bmHeight) / 2;
+ 			FillRect(hDC, &rcWindow, hbrush);
+ 			rcWindow.left = 0;
+ 			rcWindow.top = (cyDesired - bm.bmHeight) / 2 + bm.bmHeight;
+ 			rcWindow.right = cxDesired;
+ 			rcWindow.bottom = cyDesired;
+ 			FillRect(hDC, &rcWindow, hbrush);
+ 		}
+ 		SelectObject(hDC, holdbrush);
+ 		DeleteObject(hbrush);
+ 	}
+ 	BitBlt(hDC, (cxDesired - bm.bmWidth) / 2, (cyDesired - bm.bmHeight) / 2,
+ 								bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
+ #else
+ 	BitBlt(hDC, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
+ #endif
+ 
+ 	SelectObject(hMemDC, hOldBitmap);
+ 	/* DeleteObject(hBitmap); */
+ 	SelectPalette(hDC, hOldPalette, FALSE);
+ 	DeleteObject(hPalette);
+ 	return TRUE;
+ }
+ 
+ static BOOL
+ LoadBitmapFromBMPFile(HDC hDC, LPTSTR szFileName)
+ {
+ 	static HBITMAP		hBitmap = NULL;
+ 	static int			cxDesired = 0;
+ 	static int			cyDesired = 0;
+ 	static BOOL			bh = FALSE;
+ 	static char			bitmap[MAXPATHL];
+ 	static DWORD		bitmix;
+ 	static DWORD		bgcolor;
+ 
+ 	if (hBitmap != NULL
+ 			&& ((cxDesired != (Columns * v_xchar) || cyDesired != (Rows * v_ychar))
+ 				|| strcmp(bitmap, szFileName) != 0 || bitmix != config_bitmix)
+ 				|| bgcolor != *v_bgcolor)
+ 	{
+ 		DeleteObject(hBitmap);
+ 		hBitmap = NULL;
+ 		strcpy(bitmap, szFileName);
+ 		bitmix = config_bitmix;
+ 		bgcolor = *v_bgcolor;
+ 	}
+ 	if (hBitmap == NULL)
+ 	{
+ 		int			cx;
+ 		int			cy;
+ 		double		per= 1;
+ 
+ 		cxDesired = Columns * v_xchar;
+ 		cyDesired = Rows * v_ychar;
+ 		if (magic.biWidth > cxDesired || magic.biHeight > cyDesired)
+ 		{
+ 			if (((double)magic.biWidth / (double)cxDesired)
+ 								> ((double)magic.biHeight / (double)cyDesired))
+ 			{
+ 				per = 1.0 / ((double)magic.biWidth / (double)cxDesired);
+ 				bh = FALSE;
+ 			}
+ 			else
+ 			{
+ 				per = 1.0 / ((double)magic.biHeight / (double)cyDesired);
+ 				bh = TRUE;
+ 			}
+ 		}
+ 		else
+ 		{
+ 			if (((double)cxDesired / (double)magic.biWidth)
+ 								< ((double)cyDesired / (double)magic.biHeight))
+ 			{
+ 				per = (double)cxDesired / (double)magic.biWidth;
+ 				bh = FALSE;
+ 			}
+ 			else
+ 			{
+ 				per = (double)cyDesired / (double)magic.biHeight;
+ 				bh = TRUE;
+ 			}
+ 		}
+ 		cx = cxDesired;
+ 		cy = cyDesired;
+ 		if (bh)
+ 			cx = magic.biWidth * per;
+ 		else
+ 			cy = magic.biHeight * per;
+ 		hBitmap = LoadImage(NULL, szFileName, IMAGE_BITMAP,
+ #if 1
+ 						cx > cxDesired ? cxDesired : cx,
+ 						cy > cyDesired ? cyDesired : cy,
+ #else
+ 						Columns * v_xchar, Rows * v_ychar,
+ #endif
+ 						LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE);
+ 		if (hBitmap != NULL && config_bitmix)
+ 		{
+ 			BYTE			*	p;
+ 			int					i;
+ 			int					j;
+ 			BITMAP				bm;
+ 			int					rgb[3];
+ 
+ 			if (config_bitmix > 100)
+ 				config_bitmix = 100;
+ 			rgb[0] = (int)((GetRValue(*v_bgcolor) - 128) * config_bitmix) / 100;
+ 			rgb[1] = (int)((GetGValue(*v_bgcolor) - 128) * config_bitmix) / 100;
+ 			rgb[2] = (int)((GetBValue(*v_bgcolor) - 128) * config_bitmix) / 100;
+ 			GetObject(hBitmap, sizeof(BITMAP), &bm);
+ 			if ((bm.bmBitsPixel * bm.bmPlanes) > 8)
+ 			{
+ 				p = bm.bmBits;
+ 				for (i = 0; i < (bm.bmWidthBytes * bm.bmHeight) / 3; i++)
+ 				{
+ 					for (j = 0; j < 3; j++)
+ 					{
+ 						if ((int)(rgb[j] + p[j]) > 255)
+ 							p[j] = 255;
+ 						else if ((int)(rgb[j] + p[j]) < 0)
+ 							p[j] = 0;
+ 						else
+ 							p[j] += rgb[j];
+ 					}
+ 					p += 3;
+ 				}
+ 			}
+ 		}
+ 	}
+ 	return DrawBitmap(hDC, hBitmap, bh);
+ }
+ 
+ static BOOL
+ CopyScreenToBitmap(HDC hDC, BOOL force)
+ {
+ 	static HBITMAP		hBitmap;		// handles to deice-dependent bitmaps
+ 	HBITMAP				hOldBitmap;		// handles to deice-dependent bitmaps
+ 	HDC					hScrDC, hMemDC;		// screen DC and memory DC
+ 	int					nWidth, nHeight;	// DIB width and height
+ 	RECT				rectClient;
+ 	POINT				pt1, pt2;
+ 	static POINT		pt1o, pt2o;
+ 
+ 	GetClientRect(hVimWnd, &rectClient);
+ 	pt1.x = rectClient.left;
+ 	pt1.y = rectClient.top;
+ 	pt2.x = rectClient.right;
+ 	pt2.y = rectClient.bottom;
+ 	ClientToScreen(hVimWnd, &pt1);
+ 	ClientToScreen(hVimWnd, &pt2);
+ 	rectClient.left = pt1.x;
+ 	rectClient.top = pt1.y;
+ 	rectClient.right = pt2.x;
+ 	rectClient.bottom = pt2.y;
+ 
+ 	// check for an empty rectangle
+ 	if (IsRectEmpty(&rectClient))
+ 		return FALSE;
+ 
+ 	if (hBitmap == NULL || force
+ 			|| (hDC == NULL && (pt1o.x != pt1.x || pt1o.y != pt1.y
+ 							|| pt2o.x != pt2.x || pt2o.y != pt2.y)))
+ 	{
+ 		RECT		rcClient;
+ 		RECT		rcWindow;
+ 		MSG			msg;
+ 
+ 		pt1o.x = pt1.x;
+ 		pt1o.y = pt1.y;
+ 		pt2o.x = pt2.x;
+ 		pt2o.y = pt2.y;
+ 		GetClientRect(hVimWnd, &rcClient);
+ 		GetWindowRect(hVimWnd, &rcWindow);
+ 		MoveWindow(hVimWnd, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), config_w, config_h, TRUE);
+ 		while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+ 		{
+ 			if (!TranslateAccelerator(hVimWnd, hAcc, &msg))
+ 			{
+ 				TranslateMessage(&msg);
+ 				DispatchMessage(&msg);
+ 			}
+ 		}
+ 		Sleep(72);
+ 		if (hBitmap)
+ 			DeleteObject(hBitmap);
+ 		hBitmap = NULL;
+ 		// create a DC for the screen and create
+ 		// a memory DC compatible to screen DC
+ 
+ 		hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);
+ 		hMemDC = CreateCompatibleDC(hScrDC);
+ 
+ 		// get points of rectangle to grab
+ 
+ 		nWidth = rectClient.right - rectClient.left;
+ 		nHeight = rectClient.bottom - rectClient.top;
+ 
+ 		// create a bitmap compatible with the screen DC
+ 		hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);
+ 
+ 		// select new bitmap into memory DC
+ 		hOldBitmap = SelectObject(hMemDC, hBitmap);
+ 
+ 		// bitblt screen DC to memory DC
+ 		BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, rectClient.left, rectClient.top, SRCCOPY);
+ 
+ 		// select old bitmap back into memory DC and get handle to
+ 		// bitmap of the screen
+ 
+ 		hBitmap = SelectObject(hMemDC, hOldBitmap);
+ 
+ 		// clean up
+ 		DeleteDC(hScrDC);
+ 		DeleteDC(hMemDC);
+ 		MoveWindow(hVimWnd, rcWindow.left, rcWindow.top, config_w, config_h, TRUE);
+ 	}
+ 
+ 	if (hDC == NULL)
+ 		return(FALSE);
+ 	return DrawBitmap(hDC, hBitmap, FALSE);
+ }
+ 
+ static int
+ iswave(fname)
+ char		*	fname;
+ {
+ 	int				fd;
+ 	char			magic[15];
+ 	int				len;
+ 
+ 	if ((strlen(fname) >= strlen(".wav"))
+ 			&& strnicmp(&fname[strlen(fname) - 4], ".wav", strlen(".wav")) == 0)
+ 	{
+ 		if ((fd = open(fname, O_RDONLY, S_IREAD | S_IWRITE)) < 0)
+ 			return(FALSE);
+ 		len = read(fd, magic, 15);
+ 		close(fd);
+ 		if (len < 15)
+ 			return(FALSE);
+ 		if (memcmp(magic, "RIFF", 4) == 0
+ 								&& memcmp(&magic[8], "WAVEfmt", 4) == 0)
+ 			return(TRUE);
+ 	}
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	login dialog
+  *----------------------------------------------------------------------------*/
+ static BOOL CALLBACK
+ PrinterDialog(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+ {
+     int					wmId;
+ 	OPENFILENAME		ofn;
+ 
+ 	switch (uMsg) {
+ 	case WM_INITDIALOG:
+ 		if (strlen(config_printer))
+ 			SendDlgItemMessage(hWnd, 1000, WM_SETTEXT, 0, (LPARAM)config_printer);
+ 		return(TRUE);
+ 	case WM_DESTROY:
+ 		break;
+ 	case WM_COMMAND:
+ 		wmId = LOWORD(wParam);
+ 		switch (wmId) {
+ 		case IDOK:
+ 			GetDlgItemText(hWnd, 1000, config_printer, sizeof(config_printer));
+ 			EndDialog(hWnd, 0);
+ 			return(TRUE);
+ 		case IDCANCEL:
+ 			EndDialog(hWnd, 1);
+ 			return(TRUE);
+ 		case 1001:
+ 			memset(&ofn, 0, sizeof(ofn));
+ 			NameBuff[0] = '\0';
+ 			GetDlgItemText(hWnd, 1000, IObuff, IOSIZE);
+ 			*gettail(IObuff) = NUL;
+ 			ofn.lStructSize		= sizeof(ofn);
+ 			ofn.hwndOwner		= hWnd;
+ 			ofn.hInstance		= hInst;
+ 			ofn.lpstrFilter		= "Program File(*.exe;*.com;*.bat)\0*.exe;*.com;*.bat\0ALL(*.*)\0*.*\0";
+ 			ofn.lpstrCustomFilter = (LPSTR)NULL;
+ 			ofn.nMaxCustFilter	= 0L;
+ 			ofn.nFilterIndex	= 1;
+ 			ofn.lpstrFile		= NameBuff;
+ 			ofn.nMaxFile		= MAXPATHL;
+ 			ofn.lpstrFileTitle	= NULL;
+ 			ofn.nMaxFileTitle	= 0;
+ 			ofn.lpstrInitialDir	= IObuff;
+ 			ofn.lpstrTitle		= "Print Command Select";
+ 			ofn.Flags			= OFN_HIDEREADONLY | OFN_EXPLORER | OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST;
+ 			ofn.nFileOffset		= 0;
+ 			ofn.nFileExtension	= 0;
+ 			ofn.lpstrDefExt		= NULL;
+ 			if (GetOpenFileName(&ofn))
+ 			{
+ 				strcpy(IObuff, "\"");
+ 				strcat(IObuff, NameBuff);
+ 				strcat(IObuff, "\"");
+ 				SendDlgItemMessage(hWnd, 1000, EM_SETSEL, 0, (LPARAM)-2);
+ 				SendDlgItemMessage(hWnd, 1000, WM_SETTEXT, 0, (LPARAM)IObuff);
+ 			}
+ 			break;
+ 		}
+ 		break;
+ 	}
+ 	return(FALSE);
+ }
+ 
+ WINAPI
+ PrinterThread(PVOID filename)
+ {
+ 	STARTUPINFO				si;
+ 	PROCESS_INFORMATION		pi;
+ 	char					command[MAXPATHL * 2];
+ 
+ 	memset(&pi, 0, sizeof(pi));
+ 	memset(&si, 0, sizeof(si));
+ 	si.cb = sizeof(si);
+ 	si.dwFlags = STARTF_USESHOWWINDOW;
+ 	si.wShowWindow = /*SW_HIDE*/SW_MINIMIZE;
+ 	sprintf(command, "%s \"%s\"", config_printer, filename);
+ 	if (CreateProcess(NULL, command, NULL, NULL, FALSE,
+ 						CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi) == TRUE)
+ 	{
+ 		WaitForSingleObject(pi.hProcess, INFINITE);
+ 		CloseHandle(pi.hProcess);
+ 		CloseHandle(pi.hThread);
+ 		TopWindow(hVimWnd);
+ 	}
+ 	remove(filename);
+ 	free(filename);
+ 	ExitThread(0);
+ 	return(0);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	login dialog
+  *----------------------------------------------------------------------------*/
+ LRESULT PASCAL
+ BitmapHookProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+ {
+     static HWND hwndBrush;
+     static RECT rctBrush;
+     static HBITMAP hbm;
+ 	LPOFNOTIFY pofn;
+     HDC hdc;
+ 
+ 	switch (uMsg) {
+ 	case WM_INITDIALOG: 
+ 		hwndBrush = GetDlgItem(hwnd, 1010); 
+ 		GetClientRect(hwndBrush, &rctBrush); 
+ 		return(TRUE);
+ 	case WM_NOTIFY:
+ 		pofn = (LPOFNOTIFY)lParam;
+ 		if (pofn->hdr.code == CDN_SELCHANGE)
+ 		{
+ 			if (CommDlg_OpenSave_GetSpec(GetParent(hwnd), NameBuff, MAXPATHL) <= MAXPATHL)
+ 			{
+ 				if ((hbm = LoadImage(NULL, NameBuff, IMAGE_BITMAP,
+ 						rctBrush.right - rctBrush.left,
+ 						rctBrush.bottom - rctBrush.top,
+ 						LR_DEFAULTSIZE|LR_LOADFROMFILE)) != NULL)
+ 				{
+ 					HDC					hMemDC;
+ 					HBITMAP				hOldBitmap;
+ 
+ 					hdc = GetDC(hwndBrush);
+ 					hMemDC = CreateCompatibleDC(hdc);
+ 					hOldBitmap	= SelectObject(hMemDC, hbm);
+ 					BitBlt(hdc, 0, 0, rctBrush.right - rctBrush.left,
+ 							rctBrush.bottom - rctBrush.top, hMemDC, 0, 0, SRCCOPY);
+ 					SelectObject(hMemDC, hOldBitmap);
+ 					DeleteDC(hMemDC);
+ 					DeleteObject(hbm);
+ 					ReleaseDC(hwndBrush, hdc);
+ 				}
+ 			}
+ 		}
+ 		break;
+ 	case WM_COMMAND:
+ 		if (wParam == 1013)
+ 		{
+ 			GetDlgItemText(hwnd, edt1, NameBuff, MAXPATHL);
+ 		}
+ 		break;
+ 	}
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	login dialog
+  *----------------------------------------------------------------------------*/
+ static BOOL CALLBACK
+ BitmapDialog(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+ {
+     int					wmId;
+ 	OPENFILENAME		ofn;
+ 	static DWORD		bUse;
+ 	static HWND			udWnd;
+ 	static DWORD		bitmix;
+ 
+ 	switch (uMsg) {
+ 	case WM_INITDIALOG:
+ 		if (strlen(config_bitmapfile))
+ 			SendDlgItemMessage(hWnd, 1000, WM_SETTEXT, 0, (LPARAM)config_bitmapfile);
+ 		bUse = config_bitmap;
+ 		if (bUse)
+ 			CheckDlgButton(hWnd, 1003, MF_CHECKED);
+ 		else
+ 			CheckDlgButton(hWnd, 1003, MF_UNCHECKED);
+ 		bitmix = config_bitmix;
+ 		if (v_extend)
+ 		{
+ 			if (pCreateUpDownControl != NULL)
+ 			{
+ 				udWnd = pCreateUpDownControl(
+ 						WS_CHILD | WS_BORDER | WS_VISIBLE | UDS_SETBUDDYINT | UDS_ALIGNRIGHT,
+ 						132, 39, 8, 12, hWnd, 1009, hInst,
+ 						GetDlgItem(hWnd, 1002), 100, 0, config_bitmix);
+ 			}
+ 			else
+ 			{
+ 				udWnd = NULL;
+ 				wsprintf(NameBuff, "%d", config_bitmix);
+ 				SendDlgItemMessage(hWnd, 1002, WM_SETTEXT, 0, (LPARAM)NameBuff);
+ 			}
+ 		}
+ 		return(TRUE);
+ 	case WM_DESTROY:
+ 		break;
+ 	case WM_VSCROLL:
+ 		if (udWnd == (HWND)lParam)
+ 		{
+ 			config_bitmix = GetDlgItemInt(hWnd, 1002, NULL, FALSE);
+ 			updateScreen(CLEAR);
+ 			return 1;
+ 		}
+ 		break;
+ 	case WM_COMMAND:
+ 		wmId = LOWORD(wParam);
+ 		switch (wmId) {
+ 		case IDOK:
+ 			GetDlgItemText(hWnd, 1000, config_bitmapfile, sizeof(config_bitmapfile));
+ 			config_bitmix = 0;
+ 			config_bitmap = bUse;
+ 			if (isbitmap(config_bitmapfile))
+ 			{
+ 				if (v_extend)
+ 				{
+ 					config_bitmix = GetDlgItemInt(hWnd, 1002, NULL, FALSE);
+ 					if (config_bitmix > 100)
+ 						config_bitmix = 100;
+ 				}
+ 				EndDialog(hWnd, 0);
+ 			}
+ 			else
+ 			{
+ 				config_bitmap = FALSE;
+ 				config_bitmapfile[0] = '\0';
+ 				config_bitmix = 0;
+ 				EndDialog(hWnd, 1);
+ 			}
+ 			return(TRUE);
+ 		case IDCANCEL:
+ 			config_bitmix = bitmix;
+ 			EndDialog(hWnd, 1);
+ 			return(TRUE);
+ 		case 1001:
+ 			memset(&ofn, 0, sizeof(ofn));
+ 			NameBuff[0] = '\0';
+ 			GetDlgItemText(hWnd, 1000, IObuff, IOSIZE);
+ 			*gettail(IObuff) = NUL;
+ 			ofn.lStructSize		= sizeof(ofn);
+ 			ofn.hwndOwner		= hWnd;
+ 			ofn.hInstance		= hInst;
+ 			ofn.lpstrFilter		= "Bitmap File(*.bmp)\0*.bmp\0ALL(*.*)\0*.*\0";
+ 			ofn.lpstrCustomFilter = (LPSTR)NULL;
+ 			ofn.nMaxCustFilter	= 0L;
+ 			ofn.nFilterIndex	= 1;
+ 			ofn.lpstrFile		= NameBuff;
+ 			ofn.nMaxFile		= MAXPATHL;
+ 			ofn.lpstrFileTitle	= NULL;
+ 			ofn.nMaxFileTitle	= 0;
+ 			ofn.lpstrInitialDir	= IObuff;
+ 			ofn.lpstrTitle		= "Bitmap File Select";
+ 			ofn.Flags			= OFN_HIDEREADONLY | OFN_EXPLORER | OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST;
+ 			ofn.nFileOffset		= 0;
+ 			ofn.nFileExtension	= 0;
+ 			ofn.lpstrDefExt		= NULL;
+ 			if (!(ver_info.dwPlatformId == VER_PLATFORM_WIN32_NT
+ 											&& ver_info.dwMajorVersion == 3))
+ 			{
+ 				ofn.Flags			= OFN_HIDEREADONLY | OFN_EXPLORER | OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST | OFN_ENABLEHOOK | OFN_ENABLETEMPLATE;
+ 				ofn.lpTemplateName	= "BITMAPDLGEXP";
+ 				ofn.lpfnHook		= BitmapHookProc;
+ 			}
+ 			if (GetOpenFileName(&ofn))
+ 			{
+ 				SendDlgItemMessage(hWnd, 1000, EM_SETSEL, 0, (LPARAM)-2);
+ 				SendDlgItemMessage(hWnd, 1000, WM_SETTEXT, 0, (LPARAM)NameBuff);
+ 				if (strcmp(config_bitmapfile, NameBuff) != 0)
+ 				{
+ 					config_bitmix = 0;
+ 					wsprintf(NameBuff, "%d", config_bitmix);
+ 					SendDlgItemMessage(hWnd, 1002, WM_SETTEXT, 0, (LPARAM)NameBuff);
+ 				}
+ 			}
+ 			break;
+ 		case 1003:
+ 			if (bUse)
+ 			{
+ 				bUse = FALSE;
+ 				CheckDlgButton(hWnd, 1003, MF_UNCHECKED);
+ 			}
+ 			else
+ 			{
+ 				bUse = TRUE;
+ 				CheckDlgButton(hWnd, 1003, MF_CHECKED);
+ 			}
+ 			break;
+ 		}
+ 		break;
+ 	}
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	login dialog
+  *----------------------------------------------------------------------------*/
+ LRESULT PASCAL
+ WaveHookProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+ {
+ 	LPOFNOTIFY pofn;
+ 
+ 	switch (uMsg) {
+ 	case WM_INITDIALOG: 
+ 		return(TRUE);
+ 	case WM_NOTIFY:
+ 		pofn = (LPOFNOTIFY)lParam;
+ 		if (pofn->hdr.code == CDN_SELCHANGE)
+ 			CommDlg_OpenSave_GetSpec(GetParent(hwnd), NameBuff, MAXPATHL);
+ 		break;
+ 	case WM_COMMAND:
+ 		if (wParam == 1013)
+ 		{
+ 			if (ver_info.dwPlatformId == VER_PLATFORM_WIN32_NT
+ 											&& ver_info.dwMajorVersion == 3)
+ 				GetDlgItemText(hwnd, edt1, NameBuff, MAXPATHL);
+ 			PlaySound(NameBuff, NULL, SND_FILENAME);
+ 		}
+ 		break;
+ 	}
+ 	return FALSE;
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	login dialog
+  *----------------------------------------------------------------------------*/
+ static BOOL CALLBACK
+ WaveDialog(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+ {
+     int					wmId;
+ 	OPENFILENAME		ofn;
+ 	static DWORD		bUse;
+ 
+ 	switch (uMsg) {
+ 	case WM_INITDIALOG:
+ 		if (strlen(config_wavefile))
+ 			SendDlgItemMessage(hWnd, 1000, WM_SETTEXT, 0, (LPARAM)config_wavefile);
+ 		bUse = config_wave;
+ 		if (bUse)
+ 			CheckDlgButton(hWnd, 1003, MF_CHECKED);
+ 		else
+ 			CheckDlgButton(hWnd, 1003, MF_UNCHECKED);
+ 		return(TRUE);
+ 	case WM_DESTROY:
+ 		break;
+ 	case WM_COMMAND:
+ 		wmId = LOWORD(wParam);
+ 		switch (wmId) {
+ 		case IDOK:
+ 			GetDlgItemText(hWnd, 1000, config_wavefile, sizeof(config_wavefile));
+ 			config_wave = bUse;
+ 			if (iswave(config_wavefile))
+ 				EndDialog(hWnd, 0);
+ 			else
+ 			{
+ 				config_wavefile[0] = '\0';
+ 				config_wave = FALSE;
+ 				EndDialog(hWnd, 1);
+ 			}
+ 			return(TRUE);
+ 		case IDCANCEL:
+ 			EndDialog(hWnd, 1);
+ 			return(TRUE);
+ 		case 1001:
+ 			memset(&ofn, 0, sizeof(ofn));
+ 			NameBuff[0] = '\0';
+ 			GetDlgItemText(hWnd, 1000, IObuff, IOSIZE);
+ 			*gettail(IObuff) = NUL;
+ 			ofn.lStructSize		= sizeof(ofn);
+ 			ofn.hwndOwner		= hWnd;
+ 			ofn.hInstance		= hInst;
+ 			ofn.lpstrFilter		= "Wave File(*.wav)\0*.wav\0ALL(*.*)\0*.*\0";
+ 			ofn.lpstrCustomFilter = (LPSTR)NULL;
+ 			ofn.nMaxCustFilter	= 0L;
+ 			ofn.nFilterIndex	= 1;
+ 			ofn.lpstrFile		= NameBuff;
+ 			ofn.nMaxFile		= MAXPATHL;
+ 			ofn.lpstrFileTitle	= NULL;
+ 			ofn.nMaxFileTitle	= 0;
+ 			ofn.lpstrInitialDir	= IObuff;
+ 			ofn.lpstrTitle		= "Wave File Select";
+ 			ofn.Flags			= OFN_HIDEREADONLY | OFN_EXPLORER | OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST;
+ 			ofn.nFileOffset		= 0;
+ 			ofn.nFileExtension	= 0;
+ 			ofn.lpstrDefExt		= NULL;
+ 			if (ver_info.dwPlatformId == VER_PLATFORM_WIN32_NT
+ 											&& ver_info.dwMajorVersion == 3)
+ 			{
+ 				ofn.Flags			= OFN_HIDEREADONLY | OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST | OFN_ENABLEHOOK | OFN_ENABLETEMPLATE;
+ 				ofn.lpTemplateName	= "WAVEFILEOPENDIALOG";
+ 			}
+ 			else
+ 			{
+ 				ofn.Flags			= OFN_HIDEREADONLY | OFN_EXPLORER | OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST | OFN_ENABLEHOOK | OFN_ENABLETEMPLATE;
+ 				ofn.lpTemplateName	= "WAVEDLGEXP";
+ 			}
+ 			ofn.lpfnHook		= WaveHookProc;
+ 			if (GetOpenFileName(&ofn))
+ 			{
+ 				SendDlgItemMessage(hWnd, 1000, EM_SETSEL, 0, (LPARAM)-2);
+ 				SendDlgItemMessage(hWnd, 1000, WM_SETTEXT, 0, (LPARAM)NameBuff);
+ 			}
+ 			break;
+ 		case 1003:
+ 			if (bUse)
+ 			{
+ 				bUse = FALSE;
+ 				CheckDlgButton(hWnd, 1003, MF_UNCHECKED);
+ 			}
+ 			else
+ 			{
+ 				bUse = TRUE;
+ 				CheckDlgButton(hWnd, 1003, MF_CHECKED);
+ 			}
+ 			break;
+ 		}
+ 		break;
+ 	}
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	login dialog
+  *----------------------------------------------------------------------------*/
+ static BOOL CALLBACK
+ CommandDialog(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+ {
+     int					wmId;
+ 	HKEY				hKey;
+ 	DWORD				size;
+ 	DWORD				type;
+ 	char				name[CMDBUFFSIZE];
+ 
+ 	switch (uMsg) {
+ 	case WM_INITDIALOG:
+ 		SendDlgItemMessage(hWnd, 1001, EM_SETLIMITTEXT, 0, (LPARAM)sizeof(name));
+ 		SendDlgItemMessage(hWnd, 1002, EM_SETLIMITTEXT, 0, (LPARAM)sizeof(name));
+ 		name[0] = '\0';
+ 		SendDlgItemMessage(hWnd, 1001, WM_SETTEXT, 0, (LPARAM)name);
+ 		SendDlgItemMessage(hWnd, 1002, WM_SETTEXT, 0, (LPARAM)name);
+ 		for (type = IDM_COMD0; type <= IDM_COMD9; type++)
+ 		{
+ 			sprintf(name, "%d", type - IDM_COMD0);
+ 			size = SendDlgItemMessage(hWnd, 1003, CB_ADDSTRING, 0, (LPARAM)name);
+ 			SendDlgItemMessage(hWnd, 1003, CB_SETITEMDATA, size, type - IDM_COMD0);
+ 			if ((type - IDM_COMD0) == config_cmd)
+ 				SendDlgItemMessage(hWnd, 1003, CB_SETCURSEL, size, 0);
+ 		}
+ 		if (config_cmd == 0)
+ 		{
+ 			SendDlgItemMessage(hWnd, 1001, EM_SETREADONLY, TRUE, 0);
+ 			SendDlgItemMessage(hWnd, 1002, EM_SETREADONLY, TRUE, 0);
+ 		}
+ 		sprintf(name, "Software\\Vim\\cmd%d", config_cmd);
+ 		if (RegOpenKeyEx(HKEY_CURRENT_USER, name, 0,
+ 									KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
+ 		{
+ 			size = sizeof(name);
+ 			type = REG_SZ;
+ 			if (RegQueryValueEx(hKey, "load", NULL, &type, (BYTE *)&name, &size)
+ 															== ERROR_SUCCESS)
+ 				SendDlgItemMessage(hWnd, 1001, WM_SETTEXT, 0, (LPARAM)name);
+ 			size = sizeof(name);
+ 			type = REG_SZ;
+ 			if (RegQueryValueEx(hKey, "unload", NULL, &type, (BYTE *)&name, &size)
+ 															== ERROR_SUCCESS)
+ 				SendDlgItemMessage(hWnd, 1002, WM_SETTEXT, 0, (LPARAM)name);
+ 			RegCloseKey(hKey);
+ 		}
+ 		return(TRUE);
+ 	case WM_DESTROY:
+ 		break;
+ 	case WM_COMMAND:
+ 		wmId = LOWORD(wParam);
+ 		switch (wmId) {
+ 		case IDOK:
+ 			size = SendDlgItemMessage(hWnd, 1003, CB_GETCURSEL, 0, 0);
+ 			type = SendDlgItemMessage(hWnd, 1003, CB_GETITEMDATA, size, 0);
+ 			if (type != 0 && type != CB_ERR)
+ 			{
+ 				sprintf(name, "Software\\Vim\\cmd%d", type);
+ 				if (RegCreateKeyEx(HKEY_CURRENT_USER, name, 0, NULL,
+ 						REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL,
+ 											&hKey, &size) == ERROR_SUCCESS)
+ 				{
+ 					GetDateFormat(LOCALE_USER_DEFAULT, 0, NULL, NULL,
+ 														name, sizeof(name));
+ 					strcat(name, " ");
+ 					GetTimeFormat(LOCALE_USER_DEFAULT, 0, NULL, NULL,
+ 							&name[strlen(name)], sizeof(name) - strlen(name));
+ 					size = strlen(name) + 1;
+ 					RegSetValueEx(hKey, NULL, 0, REG_SZ, name, size);
+ 					GetDlgItemText(hWnd, 1001, name, sizeof(name));
+ 					size = strlen(name) + 1;
+ 					RegSetValueEx(hKey, "load", 0, REG_SZ, (BYTE *)&name, size);
+ 					GetDlgItemText(hWnd, 1002, name, sizeof(name));
+ 					size = strlen(name) + 1;
+ 					RegSetValueEx(hKey, "unload", 0, REG_SZ, (BYTE *)&name, size);
+ 					RegCloseKey(hKey);
+ 				}
+ 			}
+ 			EndDialog(hWnd, 0);
+ 			return(TRUE);
+ 		case IDCANCEL:
+ 			EndDialog(hWnd, 1);
+ 			return(TRUE);
+ 		case 1003:
+ 			if (HIWORD(wParam) == CBN_SELCHANGE)
+ 			{
+ 				size = SendDlgItemMessage(hWnd, 1003, CB_GETCURSEL, 0, 0);
+ 				type = SendDlgItemMessage(hWnd, 1003, CB_GETITEMDATA, size, 0);
+ 				name[0] = '\0';
+ 				SendDlgItemMessage(hWnd, 1001, WM_SETTEXT, 0, (LPARAM)name);
+ 				SendDlgItemMessage(hWnd, 1002, WM_SETTEXT, 0, (LPARAM)name);
+ 				if (type == 0 || type == CB_ERR)
+ 				{
+ 					SendDlgItemMessage(hWnd, 1001, EM_SETREADONLY, TRUE, 0);
+ 					SendDlgItemMessage(hWnd, 1002, EM_SETREADONLY, TRUE, 0);
+ 				}
+ 				else
+ 				{
+ 					SendDlgItemMessage(hWnd, 1001, EM_SETREADONLY, FALSE, 0);
+ 					SendDlgItemMessage(hWnd, 1002, EM_SETREADONLY, FALSE, 0);
+ 					sprintf(name, "Software\\Vim\\cmd%d", type);
+ 					if (RegOpenKeyEx(HKEY_CURRENT_USER, name, 0,
+ 										KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
+ 					{
+ 						size = sizeof(name);
+ 						type = REG_SZ;
+ 						if (RegQueryValueEx(hKey, "load", NULL, &type,
+ 										(BYTE *)&name, &size) == ERROR_SUCCESS)
+ 							SendDlgItemMessage(hWnd, 1001, WM_SETTEXT, 0, (LPARAM)name);
+ 						size = sizeof(name);
+ 						type = REG_SZ;
+ 						if (RegQueryValueEx(hKey, "unload", NULL, &type,
+ 										(BYTE *)&name, &size) == ERROR_SUCCESS)
+ 							SendDlgItemMessage(hWnd, 1002, WM_SETTEXT, 0, (LPARAM)name);
+ 						RegCloseKey(hKey);
+ 					}
+ 				}
+ 			}
+ 			break;
+ 		}
+ 		break;
+ 	}
+ 	return(FALSE);
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	login dialog
+  *----------------------------------------------------------------------------*/
+ static void
+ UnloadCommand()
+ {
+ 	HKEY				hKey;
+ 	DWORD				size;
+ 	DWORD				type;
+ 	char				name[CMDBUFFSIZE];
+ 
+ 	++no_wait_return;
+ 	if (config_cmd != 0)
+ 	{
+ 		sprintf(name, "Software\\Vim\\cmd%d", config_cmd);
+ 		if (RegOpenKeyEx(HKEY_CURRENT_USER, name, 0,
+ 										KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
+ 		{
+ 			size = sizeof(name);
+ 			type = REG_SZ;
+ 			if (RegQueryValueEx(hKey, "unload", NULL, &type,
+ 										(BYTE *)&name, &size) == ERROR_SUCCESS)
+ 				docmdline(name);
+ 			RegCloseKey(hKey);
+ 		}
+ 	}
+ 	--no_wait_return;
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	login dialog
+  *----------------------------------------------------------------------------*/
+ static void
+ LoadCommand()
+ {
+ 	HKEY				hKey;
+ 	DWORD				size;
+ 	DWORD				type;
+ 	char				name[CMDBUFFSIZE];
+ 	char			*	p;
+ 
+ 	++no_wait_return;
+ 	if (config_cmd != 0)
+ 	{
+ 		sprintf(name, "Software\\Vim\\cmd%d", config_cmd);
+ 		if (RegOpenKeyEx(HKEY_CURRENT_USER, name, 0,
+ 										KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
+ 		{
+ 			size = sizeof(name);
+ 			type = REG_SZ;
+ 			if (RegQueryValueEx(hKey, "load", NULL, &type,
+ 										(BYTE *)&name, &size) == ERROR_SUCCESS)
+ 			{
+ 				p = name;
+ 				while (*p)
+ 				{
+ 					if (*p == '\\' && p[1])
+ 					{
+ 						if (isalpha(p[1]))
+ 							*p = toupper(p[1]) - 0x40;
+ 						else
+ 							*p = p[1];
+ 						STRCPY(p + 1, p + 2);
+ 					}
+ 					p++;
+ 				}
+ 				docmdline(name);
+ 			}
+ 			RegCloseKey(hKey);
+ 		}
+ 	}
+ 	--no_wait_return;
+ }
+ 
+ /*------------------------------------------------------------------------------
+  *	login dialog
+  *----------------------------------------------------------------------------*/
+ static BOOL CALLBACK
+ LoadDialog(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+ {
+ 	switch (uMsg) {
+ 	case WM_INITDIALOG:
+ 		SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE	| SWP_NOSIZE);
+ 		return(TRUE);
+ 	default:
+  		break;
+  	}
+  	return(FALSE);
+ }
+ 
+ 	int
+ mbox(char_u *s, ...)
+ {
+ 	char		buf[256];
+ 	va_list		ap;
+ 
+ 	va_start(ap, s);
+ 	wvsprintf(buf, s, ap);
+ 	va_end(ap);
+ 	MessageBox(NULL, buf, "Debug", MB_OK);
+ 	return(0);
+ }
+ 
+ 	int
+ debugf(char_u *s, ...)
+ {
+ 	char		buf[512];
+ 	va_list		ap;
+ 	static FILE *fp = NULL;
+ 
+ 	if (fp == NULL)
+ 	{
+ 		if ((fp = fopen("d:\\tmp\\vim.log", "w")) == NULL)
+ 			return 0;
+ 	}
+ 	GetTimeFormat(LOCALE_USER_DEFAULT, 0, NULL, NULL, buf, sizeof(buf));
+ 	wsprintf(&buf[strlen(buf)], ":%08x: ", GetTickCount());
+ 	va_start(ap, s);
+ 	wvsprintf(&buf[strlen(buf)], s, ap);
+ 	va_end(ap);
+ 	fprintf(fp, buf);
+ 	fflush(fp);
+ 	return(0);
+ }
diff -crN ../orig/src/xargs.c ./src/xargs.c
*** ../orig/src/xargs.c	Thu Jan 01 09:00:00 1970
--- ./src/xargs.c	Sat May 09 23:12:58 1998
***************
*** 0 ****
--- 1,978 ----
+ /* wild card expand routine
+  *  for Turbo-C, MS-C, LSI-C..
+  *
+  *  This code is in the public domain.
+  *
+  *  Bug for use of wild card in directory part was fixed.
+  *
+  * $Id: xargs1.c 1.9a 92/05/03 06:00:00 AssistantIO Exp $
+  *
+  *  Bug for DOT_DLM=0 was fixed.
+  *
+  * $Id: xargs1.c 1.9 92/03/16 16:30:57 AssistantIO Exp $
+  *
+  *  Buggy code was fixed, macro became externaly definable.
+  *
+  * $Id: xargs1.c 1.8 91/11/24 08:15:12 AssistantIO Exp $
+  *
+  *  Configuration from file was added.
+  *
+  * $Id: xargs1.c 1.7 91/10/27 17:15:12 AssistantIO Exp $
+  *
+  *  Definition of ustrcmp() was changed.
+  *
+  * $Id: xargs1.c 1.6 91/08/31 09:15:12 AssistantIO Exp $
+  *
+  *  Recursive globbing was added.
+  *  Use of character class regexp was added.
+  *
+  * $Id: xargs1.c 1.5 91/04/17 08:51:50 AssistantIO Exp $
+  */
+ /*
+  * add glob_filename	K.Tsuchida   ken_t@st.rim.or.jp
+  */
+ /* WindowsNT Support (enclosed bt "WIN32")
+  *   Modified by Tomonori.Watanabe(Tom_W)  GCD02235@niftyserve.or.jp
+  */
+ #ifndef USE_CFG
+ #define USE_CFG 0		/* if 1, configuratin from file */
+ #endif
+ #ifndef USE_CCL
+ #define USE_CCL 1		/* if 0, to the original source */
+ #endif
+ #ifndef DOT_DLM
+ #define DOT_DLM 0		/* if 0, '.' is not delimiter */
+ #endif
+ 
+ /* wild card expand routine
+  *  for Turbo-C, MS-C, LSI-C..
+  *
+  * $Id: xargs.c 1.2 90/12/28 21:51:50 serow Exp Locker: serow $
+  */
+ 
+ /* #include <stdio.h> */
+ #ifdef	WIN32			/*Tom_W*/
+ #include <windows.h>
+ # ifdef USE_EXFILE
+ #  include "exfile.h"
+ # endif
+ #else
+ #include <dos.h>
+ #endif
+ #include <string.h>
+ #include <io.h>
+ #include <stdlib.h>
+ 
+ #define PSP	_psp
+ 
+ #ifndef ArgsAttr
+ #define ArgsAttr	0x3f	/*	1	/* Default attribute when file search */
+ #endif
+ #ifndef DirAttr
+ #define DirAttr		0x3f	/*	16	/* Default attribute when dir search */
+ #endif
+ #ifndef DO_SORT
+ #define DO_SORT	1	/* NON 0:wild card args will be sorted by name */
+ #endif
+ #ifndef CVLOWER
+ # ifndef WIN32
+ #  define CVLOWER	1	/* if 1, wildargs to lower */
+ # else
+ #  define CVLOWER	0	/* if 1, wildargs to lower */
+ # endif
+ #endif
+ 
+ #if USE_CCL
+ #define LBRACE	0x7f
+ #if DOT_DLM
+ #define is_delimiter(c)	((c) == '\0' || (c) == '.')
+ #else
+ #define is_delimiter(c)	((c) == '\0')
+ #endif
+ 
+ #define IGNORE_CASE	1
+ 
+ #ifdef  isupper
+ # undef isupper
+ #endif
+ #define isupper(c)	((c) >= 'A' && (c) <= 'Z')
+ #define tolower(c)	((c) | 0x20)
+ #endif /* USE_CCL */
+ 
+ #ifdef  isspace
+ # undef isspace
+ #endif
+ #define isspace(c)	((c) == ' ' || (c) == '\t' || (c) == '\n' )
+ #define UCH(c)  ((unsigned char)(c))
+ #define isk1(c) ((0x81<=UCH(c)&&UCH(c)<=0x9F)||(0xE0<=UCH(c)&&UCH(c)<=0xFC))
+ #define isk2(c) ((0x40<=UCH(c)&&UCH(c)<=0x7E)||(0x80<=UCH(c)&&UCH(c)<=0xFC))
+ 
+ #define REALLOC_UNIT	256/*128*/
+ 
+ #ifdef LDATA
+ #undef LDATA
+ #endif
+ 
+ #ifdef	WIN32		/*Tom_W*/
+ typedef	struct {
+ 	HANDLE 			hFind;
+ 	WIN32_FIND_DATA 	data;
+ } DTA_BUF;
+ #define	d_attribute	data.dwFileAttributes
+ #undef	ArgsAttr
+ #define ArgsAttr	FILE_ATTRIBUTE_NORMAL
+ #undef	DirAttr
+ #define DirAttr		FILE_ATTRIBUTE_DIRECTORY
+ 
+ #else	/*WIN32*/
+ #ifdef __TURBOC__
+ #if (sizeof(char *) == 4)
+ #define LDATA	1
+ #endif
+ #else /* may be MS-C */
+ #if defined(M_I86LM) || defined(M_I86CM) || defined(M_I86HM)
+ #define LDATA	1
+ #endif
+ #endif
+ 
+ #if defined(LSI_C)
+ /* union REGS dose not have '.cflag' but '.flags' */
+ #else
+ #define HAVE_CFLAG	1
+ #endif
+ 
+ #ifdef FP_OFF
+ #undef FP_OFF
+ #endif
+ #ifdef FP_SEG
+ #undef FP_SEG
+ #endif
+ #ifdef MK_FP
+ #undef MK_FP
+ #endif
+ #define FP_OFF(fp) ((unsigned int)(fp))
+ #define FP_SEG(fp) ((unsigned int)((unsigned long)(fp) >> 16))
+ #define MK_FP(sg,of) ((void far *)(((unsigned long)(sg) << 16)|(unsigned)(of)))
+ 
+ typedef struct {
+ 	char           d_buf[21];
+ 	char           d_attribute;
+ 	unsigned short d_time;
+ 	unsigned short d_date;
+ 	long           d_size;
+ 	char           d_name[13];
+ } DTA_BUF;
+ 
+ #if !USE_CCL
+ static DTA_BUF    dtabuf;
+ #endif
+ static union REGS reg, nreg;
+ 
+ #ifdef LDATA
+ static struct SREGS sreg;
+ #endif
+ #endif	/*WIN32*/
+ 
+ static char     ERNEM[] = "not enought mem\r\n";
+ /***************************************************************/
+ 
+ #if USE_CCL
+ static int regcmp(char *t, char *p)
+ {
+ 	int r, include, exclude;
+ 	unsigned int ks, ke, kp, kt;
+ 	char *s, *u;
+ 
+ 	while (*p) {
+ 		switch (*p) {
+ 		case LBRACE:
+ 			if (is_delimiter(*t)) {
+ 				return 0;
+ 			}
+ 			s = t;
+ 			u = s;
+ 			p++;
+ 			do {
+ 				t = s;
+ 				r = 1;
+ 				do {
+ 					if (is_delimiter(*p)) {
+ 						return -1;
+ 					}
+ 					kt = UCH(*t++);
+ 					if (isk1(kt) && isk2(*t)) {
+ 						kt = (kt << 8) + UCH(*t++);
+ 					}
+ 					kp = UCH(*p++);
+ 					if (isk1(kp) && isk2(*p)) {
+ 						kp = (kp << 8) + UCH(*p++);
+ 					}
+ #if IGNORE_CASE
+ 					if (isupper(kt)) {
+ 						kt = tolower(kt);
+ 					}
+ 					if (isupper(kp)) {
+ 						kp = tolower(kp);
+ 					}
+ #endif
+ 					if (kt != kp) {
+ 						r = 0;
+ 					}
+ 				} while (*p != ',' && *p != '}' && *p != '\0');
+ 				if (*p == '\0')
+ 					return 0;
+ 				if (r == 1 && t - s > u - s) {
+ 					u = t;
+ 				}
+ 				if (*p == ',') {
+ 					p++;
+ 				}
+ 			} while (*p != '}' && *p != '\0');
+ 			if (*p == '\0')
+ 				return 0;
+ 			if (u == s) {
+ 				return 0;
+ 			}
+ 			p++;
+ 			t = u;
+ 			break;
+ 		case '?':
+ 			if (is_delimiter(*t)) {
+ 				return 0;
+ 			}
+ 			if (isk1(*t) && isk2(*(t + 1))) {
+ 				t++;
+ 			}
+ 			t++;
+ 			p++;
+ 			break;
+ 		case '*':
+ 			while (!((r = regcmp(t, p + 1)) != 0
+ 					 || is_delimiter(*t))) {
+ 				if (isk1(*t) && isk2(*(t + 1))) {
+ 					t++;
+ 				}
+ 				t++;
+ 			}
+ 			return r;
+ 		case '[':
+ 			if (is_delimiter(*t)) {
+ 				return 0;
+ 			}
+ 			include = 0;
+ 			exclude = 0;
+ 			p++;
+ 			if (*p == '^') {
+ 				exclude = 1;
+ 				p++;
+ 			}
+ 			if (*p == '\0')
+ 				return 0;
+ 			kt = UCH(*t++);
+ 			if (isk1(kt) && isk2(*t)) {
+ 				kt = (kt << 8) + UCH(*t++);
+ 			}
+ #if IGNORE_CASE
+ 			if (isupper(kt)) {
+ 				kt = tolower(kt);
+ 			}
+ #endif
+ 			do {
+ 				if (is_delimiter(*p)) {
+ 					return -1;
+ 				}
+ 				ks = UCH(*p++);
+ 				if (isk1(ks) && isk2(*p)) {
+ 					ks = (ks << 8) + UCH(*p++);
+ 				}
+ 				ke = ks;
+ 				if (*p == '-' && *(p + 1) != ']') {
+ 					p++;
+ 					if (*p == '\0')
+ 						return 0;
+ 					if (is_delimiter(*p)) {
+ 						return -1;
+ 					}
+ 					ke = UCH(*p++);
+ 					if (isk1(ke) && isk2(*p)) {
+ 						ke = (ke << 8) + UCH(*p++);
+ 					}
+ 				}
+ #if IGNORE_CASE
+ 				if (isupper(ks)) {
+ 					ks = tolower(ks);
+ 				}
+ 				if (isupper(ke)) {
+ 					ke = tolower(ke);
+ 				}
+ #endif
+ 				if (kt >= ks && kt <= ke) {
+ 					include = 1;
+ 				}
+ 			} while (*p != ']' && *p != '\0');
+ 			if (*p == '\0')
+ 				return 0;
+ 			if (include == exclude) {
+ 				return 0;
+ 			}
+ 			p++;
+ 			break;
+ #if DOT_DLM
+ 		case '.':
+ 			if (!(is_delimiter(*t))) {
+ 				return 0;
+ 			}
+ 			if (*t == '.') {
+ 				t++;
+ 			}
+ 			p++;
+ 			break;
+ #endif
+ 		default:
+ 			kt = UCH(*t++);
+ 			if (isk1(kt) && isk2(*t)) {
+ 				kt = (kt << 8) + UCH(*t++);
+ 			}
+ 			kp = UCH(*p++);
+ 			if (isk1(kp) && isk2(*p)) {
+ 				kp = (kp << 8) + UCH(*p++);
+ 			}
+ #if IGNORE_CASE
+ 			if (isupper(kt)) {
+ 				kt = tolower(kt);
+ 			}
+ 			if (isupper(kp)) {
+ 				kp = tolower(kp);
+ 			}
+ #endif
+ 			if (kt != kp) {
+ 				return 0;
+ 			}
+ 		}
+ 	}
+ 	return *t == '\0' ? 1 : 0;
+ }
+ #endif /* USE_CCL */
+ 
+ static void error(char * s)
+ {
+ 	write(2, "xargs: ", 7);
+ 	write(2, s, strlen(s));
+ 	exit(1);
+ }
+ 
+ #if USE_CCL
+ #ifdef	WIN32		/*Tom_W*/
+ /*  In WindowsNT support you must set USE_CCL=1 !!  */
+ static char *find_file(char *dir, int attr, DTA_BUF *dtabuf)
+ {
+ 
+ 	if (dir != (char *) 0) {	/* get first entry */
+ 		if ((dtabuf->hFind = FindFirstFile(dir, &dtabuf->data))
+ 						 == INVALID_HANDLE_VALUE)
+ 			return (char *)0;
+ 	} else {			/* get next entry */
+ 		if (!FindNextFile(dtabuf->hFind, &dtabuf->data)) {
+ 			FindClose(dtabuf->hFind);
+ 			return (char *)0;
+ 		}
+ 	}
+ 	return dtabuf->data.cFileName;
+ }
+ #else	/*!WIN32*/
+ static void set_dta(DTA_BUF *dtabuf)
+ {
+ 	reg.h.ah = 0x1A;
+ #ifdef LDATA
+ 	reg.x.dx = FP_OFF(dtabuf);
+ 	sreg.ds = FP_SEG(dtabuf);
+ 	intdosx(&reg, &nreg, &sreg);
+ #else
+ 	reg.x.dx = (unsigned) dtabuf;
+ 	intdos(&reg, &nreg);
+ #endif
+ }
+ 
+ static char *find_file(char *dir, int attr, DTA_BUF *dtabuf)
+ {
+ 	set_dta(dtabuf);	/* setup DTA */
+ 	if (dir != (char *) 0) { /* get first entry */
+ 		reg.h.ah = 0x4E;
+ 		reg.h.cl = (char) attr;
+ #ifdef LDATA
+ 		reg.x.dx = FP_OFF(dir);
+ 		sreg.ds = FP_SEG(dir);
+ #else
+ 		reg.x.dx = (unsigned) dir;
+ #endif
+ 	} else {			/* get next entry */
+ 		reg.h.ah = 0x4F;
+ 	}
+ #ifdef LDATA
+ 	intdosx(&reg, &nreg, &sreg);
+ #else
+ 	intdos(&reg, &nreg);
+ #endif
+ 
+ #ifdef HAVE_CFLAG
+ 	if (nreg.x.cflag)
+ #else
+ 	if (nreg.x.flags & 1)
+ #endif
+ 		return (char *) 0;
+ 
+ 	if (dtabuf->d_name[0] == 5) dtabuf->d_name[0] = 0xE5;
+ 	return dtabuf->d_name;
+ }
+ 
+ #endif	/*WIN32*/
+ #else /* !USE_CCL */
+ 
+ static void set_dta(void)
+ {
+ 	reg.h.ah = 0x1A;
+ #ifdef LDATA
+ 	reg.x.dx = FP_OFF(&dtabuf);
+ 	sreg.ds = FP_SEG(&dtabuf);
+ 	intdosx(&reg, &nreg, &sreg);
+ #else
+ 	reg.x.dx = (int) &dtabuf;
+ 	intdos(&reg, &nreg);
+ #endif
+ }
+ 
+ static char *find_file(char *dir)
+ {
+ 	if (dir != (char *) 0) { /* get first entry */
+ 		set_dta();	/* setup DTA */
+ 		reg.h.ah = 0x4E;
+ 		reg.h.cl = ArgsAttr;
+ #ifdef LDATA
+ 		reg.x.dx = FP_OFF(dir);
+ 		sreg.ds = FP_SEG(dir);
+ #else
+ 		reg.x.dx = (unsigned) dir;
+ #endif
+ 	} else {			/* get next entry */
+ 		reg.h.ah = 0x4F;
+ #ifdef LDATA
+ 		reg.x.dx = FP_OFF(&dtabuf);
+ 		sreg.ds = FP_SEG(&dtabuf);
+ #else
+ 		reg.x.dx = (unsigned) &dtabuf;
+ #endif
+ 	}
+ #ifdef LDATA
+ 	intdosx(&reg, &nreg, &sreg);
+ #else
+ 	intdos(&reg, &nreg);
+ #endif
+ 
+ #ifdef HAVE_CFLAG
+ 	if (nreg.x.cflag)
+ #else
+ 	if (nreg.x.flags & 1)
+ #endif
+ 		return (char *) 0;
+ 
+ 	if (dtabuf.d_name[0] == 5) dtabuf.d_name[0] = 0xE5;
+ 	return dtabuf.d_name;
+ }
+ 
+ #endif /* USE_CCL */
+ 
+ #if CVLOWER
+ static char * jstrtolower(char *p)
+ {
+ 	char *op = p;
+ 
+ 	while (*p) {
+ 		if (isk1(*p) && p[1])
+ 			p++;
+ 		else if (('A' <= *p) && (*p <= 'Z'))
+ 			*p |= 0x20;
+ 		p++;
+ 	}
+ 	return op;
+ }
+ #else
+ #define jstrtolower(s)	(s)
+ #endif
+ 
+ static char * jrindex(char * p, char c)
+ {
+ 	char           *oldp;
+ 
+ 	for (oldp = (char *)0; *p; p++) {
+ 		if (isk1(*p) && isk2(p[1])) {
+ 			p++;
+ 		} else if (*p == c) {
+ 			oldp = p;
+ 		}
+ 	}
+ 	return oldp;
+ }
+ 
+ #if DO_SORT
+ static int ustrcmp(const void *s1, const void *s2)
+ {
+ 	unsigned char * p1 = *(unsigned char **)s1;
+ 	unsigned char * p2 = *(unsigned char **)s2;
+ 
+ 	while ((*p1 != '\0') && (*p1 == *p2)) {
+ 		p1++;
+ 		p2++;
+ 	}
+ 	return *p1 - *p2;
+ }
+ #endif
+ 
+ static char * xalloc(size_t n)
+ {
+ 	char  *bp;
+ 
+ 	if ((bp = malloc(n)) == (char *) 0)
+ 		error(ERNEM);
+ 	return bp;
+ }
+ 
+ static char *xrealloc(void *blk, size_t n)
+ {
+ 	char  *bp;
+ 
+ 	if ((bp = realloc(blk, n)) == (char *) 0)
+ 		error(ERNEM);
+ 	return bp;
+ }
+ 
+ #if USE_CCL
+ int
+ expand_arg(char *arg, char *wld,
+ 	char ***argbuf, int *argcnt, size_t *absiz)
+ {
+ 	char *ap, *qp, *pp, *wp, *cp, *dp;
+ 	int r, l, c, ap_keep;
+ 	DTA_BUF    dtabuf;
+ 	static char *work;
+ 
+ 	if (wld == NULL) {
+ 		work = xalloc(strlen(arg) + 128 + 1);
+ 		work[0] = '\0';
+ 		wld = work;
+ 	}
+ 	ap = arg;
+ 	qp = wld;
+ 	pp = arg;
+ 	wp = NULL;
+ 	dp = NULL;
+ 	while (*ap != '\0'
+ 		   && (wp == NULL || (*ap != '\\' && *ap != '/'))) {
+ 		if (isk1(*ap) && ap[1] != '\0') {
+ 			*qp++ = *ap++;
+ 			*qp++ = *ap++;
+ 		} else {
+ 			if (wp == NULL
+ 				&& (*ap == '*' || *ap == '?'
+ 					|| *ap == '[' || *ap == LBRACE)) {
+ 				wp = qp;
+ 			} else if (wp == NULL
+ 					   && (*ap == ':' || *ap == '\\' || *ap == '/')) {
+ 				pp = ap + 1;
+ 				wld = qp + 1;
+ #if !DOT_DLM
+ 				dp = NULL;
+ 			} else if (wp == NULL && *ap == '.') {
+ #else
+ 			} else if (wp != NULL && *ap == '.') {
+ #endif
+ 				dp = qp;
+ 			}
+ 			c = *ap++;
+ #ifndef	WIN32			/* ken */
+ 			if (isupper(c)) {
+ 				c = tolower(c);
+ 			}
+ #endif
+ 			*qp++ = (char) c;
+ 		}
+ 	}
+ 	*qp = '\0';
+ 	if (wp) {
+ #if DOT_DLM
+ 		if (dp) {
+ #else
+ 		if (!dp) {
+ #endif
+ 			strcpy(wp, "*.*");
+ 		} else {
+ 			strcpy(wp, "*");
+ 		}
+ 	}
+ 	ap_keep = *ap;
+ 	if ((cp = find_file(work, ap_keep ? DirAttr : ArgsAttr, &dtabuf)) != (char *)0) {
+ 		*ap = '\0';
+ 		*wld = '\0';
+ 		do {
+ #ifdef	WIN32			/*Tom_W*/
+ 			/* NOTE: WindowsNT support unix like file name,
+ 			 *      such as ".profile"!!
+ 			 */
+ 			if (strcmp(cp, ".") != 0 && strcmp(cp, "..") != 0) {
+ 			    if ((r = regcmp(cp, pp)) == 1) {
+ #else
+ 			if (*cp != '.' && (r = regcmp(cp, pp)) == 1) {
+ #endif
+ 				if (ap_keep == '\0') {
+ 					strcat(strcpy((*argbuf)[(*argcnt)++] = xalloc(strlen(work) + strlen(cp) + 1), work), jstrtolower(cp));
+ 					if ((size_t) (*argcnt) >= *absiz)
+ 						*argbuf = (char **) xrealloc(*argbuf, (*absiz += REALLOC_UNIT) * sizeof((*argbuf)[0]));
+ 				} else if (dtabuf.d_attribute & DirAttr) {
+ 					strcpy(wld, jstrtolower(cp));
+ 					l = strlen(cp);
+ 					wld[l] = (char) ap_keep;
+ 					wld[l + 1] = '\0';
+ 					if (expand_arg(ap + 1, wld + l + 1, argbuf, argcnt, absiz)) {
+ 						return -1;
+ 					}
+ 				}
+ #ifdef	WIN32			/*Tom_W*/
+ 			    } else if (r == -1) {
+ 				FindClose(dtabuf.hFind);
+ 			    }
+ 			}
+ #else
+ 			} else if (*cp != '.' && r == -1) {
+ 				return -1;
+ 			}
+ #endif
+ 		} while ((cp = find_file((char *)0, 0, &dtabuf)) != (char *)0);
+ 		*ap = (char) ap_keep;
+ 	}
+ 	return 0;
+ }
+ #endif
+ 
+ static void setargv(char * NCptr, int *_ARGC, char ***_ARGV)
+ {
+ 	int      i;
+ 	char     c;
+ 	char     quote, withwild;	/* flags */
+ 	char    *str;
+ 	char    *ap;
+ 	char    *cp;
+ 	size_t   absiz;
+ 	char    *buf = 0;
+ 	size_t   bfsiz;
+ #define argbuf (*_ARGV)
+ #define argcnt (*_ARGC)
+ 
+ #if USE_CCL
+ 	char	*wmk = 0;
+ 	int      no_sort = 0;
+ 
+ 	if ((ap = getenv("XARGS")) != NULL
+ 		&& strstr(ap, "NO_SORT") != NULL) {
+ 		no_sort = 1;
+ 	}
+ 	wmk = (char *) xalloc((bfsiz = REALLOC_UNIT * 2) * sizeof(wmk[0]));
+ #endif /* USE_CCL */
+ 
+ 	buf = (char *) xalloc((bfsiz = REALLOC_UNIT * 2) * sizeof(buf[0]));
+ 	ap = _ARGV[0][0];
+ 	argbuf = (char **) xalloc((absiz = REALLOC_UNIT) * sizeof(argbuf[0]));
+ 
+ 	for (str = NCptr, i = 0;
+ 	     ((c = *str) != '\r' && c != '\0');
+ 	     str++, i++);
+ 	*str = 0;
+ 	cp = str;
+ 	str = NCptr;
+ 	for (; *str == ' ' || *str == '\t'; str++)
+ 		;
+ 	for (; --cp >= str && (*cp == ' ' || *cp == '\t' || *cp == '\r');)
+ 		;
+ 	cp[1] = 0;
+ 	argbuf[0] = jstrtolower(ap); /* may be my name... */
+ 	argcnt = 1;
+ 
+ 	while (*str) {
+ 		withwild = quote = 0;
+ 		while (isspace(*str))
+ 			str++;
+ 		if (*str == 0)
+ 			break;
+ 		ap = buf;
+ #if USE_CCL
+ 		if (*str == '~' && getenv("HOME")
+ 				&& (str[1] == 0 || isspace(str[1]) || str[1] == '\\' || str[1] == '/')) {
+ 			int	len = strlen(getenv("HOME"));
+ 			if (len >= bfsiz) {
+ 				wmk = (char *)xrealloc(buf, (bfsiz + REALLOC_UNIT) * sizeof(wmk[0]));
+ 				buf = (char *)xrealloc(buf, (bfsiz + REALLOC_UNIT) * sizeof(buf[0]));
+ 				ap = buf;
+ 				bfsiz += REALLOC_UNIT;
+ 			}
+ 			strcpy(wmk, getenv("HOME"));
+ 			strcpy(buf, getenv("HOME"));
+ 			ap += len;
+ 			str++;
+ 		}
+ 		if (*str == 0)
+ 			goto addbuf;
+ #endif
+ 		do {
+ 			if (ap == &buf[bfsiz - 1]) {
+ #if USE_CCL
+ 				wmk = (char *)xrealloc(buf, (bfsiz + REALLOC_UNIT) * sizeof(wmk[0]));
+ #endif
+ 				buf = (char *)xrealloc(buf, (bfsiz + REALLOC_UNIT) * sizeof(buf[0]));
+ 				ap = &buf[bfsiz - 1];
+ 				bfsiz += REALLOC_UNIT;
+ 			}
+ 			if (isk1(*str) && str[1]) {
+ #if USE_CCL
+ 				wmk[ap - buf] = *str;
+ #endif
+ 				*ap++ = *str++;
+ 				if (ap == &buf[bfsiz - 1]) {
+ #if USE_CCL
+ 					wmk = (char *)xrealloc(buf, (bfsiz + REALLOC_UNIT) * sizeof(wmk[0]));
+ #endif
+ 					buf = (char *)xrealloc(buf, (bfsiz + REALLOC_UNIT) * sizeof(buf[0]));
+ 					ap = &buf[bfsiz - 1];
+ 					bfsiz += REALLOC_UNIT;
+ 				}
+ #if USE_CCL
+ 				wmk[ap - buf] = *str;
+ #endif
+ 				*ap++ = *str++;
+ 				continue;
+ 			}
+ #if USE_CCL
+ 			if (!quote && (*str == '*' || *str == '?'
+ 						   || *str == '[' || *str == '{'))
+ #else
+ 			if (!quote && (*str == '*' || *str == '?'))
+ #endif /* USE_CCL */
+ 				withwild = 1;
+ 			if (*str == quote) {	/* end of quoted string */
+ 				quote = 0;
+ 				str++;	/* Skip quote */
+ 			} else if (!quote && (*str == '\'' || *str == '"')) {
+ 				quote = *str++;
+ 			} else {
+ 				 if (*str == '\\' && (str[1] == '"' || str[1] == '\''))
+ 					str++;
+ #if USE_CCL
+ 				 if (!quote && *str == '\\' && str[1] == '{') {
+ 					str++;
+ 					wmk[ap - buf] = *str;
+ 				 } else if (!quote && *str == '{') {
+ 					wmk[ap - buf] = LBRACE;
+ 				 } else {
+ 					wmk[ap - buf] = *str;
+ 				 }
+ #endif
+ 				 *ap++ = *str++;
+ 			}
+ 		} while (*str && (quote || !isspace(*str)));
+ addbuf:
+ 		*ap = 0;
+ #if USE_CCL
+ 		wmk[ap - buf] = 0;
+ 		i = argcnt;
+ 		if (withwild) {
+ 			(void) expand_arg(wmk, NULL, &argbuf, &argcnt, &absiz);
+ 		}
+ 		if (argcnt - i > 0) {
+ #if DO_SORT
+ 			if (!no_sort) {
+ 				qsort(&argbuf[i], argcnt - i, sizeof(argbuf[0]), ustrcmp);
+ 			}
+ #endif
+ 		} else {
+ 			strcpy(argbuf[argcnt++] = xalloc(strlen(buf) + 1), buf);
+ 			if ((size_t) argcnt >= absiz)
+ 				argbuf = (char **) xrealloc(argbuf, (absiz += REALLOC_UNIT) * sizeof(argbuf[0]));
+ 		}
+ 	}
+ 	free(wmk);
+ #else /* USE_CCL */
+ 		if (withwild && ((cp = find_file(buf)) != (char *)0)) {
+ 			{
+ 				char * ap1, * ap2;
+ 
+ 				ap1 = jrindex(buf, '\\');
+ 				ap2 = jrindex(buf, '/');
+ 				if ((ap = (ap1 < ap2) ? ap2:ap1) == (char *)0)
+ 					ap = jrindex(buf, ':');
+ 			}
+ 			if (ap) {
+ 				ap[1] = 0;
+ 			} else {
+ 				buf[0] = 0;
+ 			}
+ #if DO_SORT
+ 			i = argcnt;
+ #endif
+ 			do {
+ 				strcat(strcpy(argbuf[argcnt++] = xalloc(strlen(buf) + strlen(cp) + 1), buf), jstrtolower(cp));
+ 				if (argcnt >= absiz)
+ 					argbuf = (char **) xrealloc(argbuf, (absiz += REALLOC_UNIT) * sizeof(argbuf[0]));
+ 			} while ((cp = find_file((char *)0)) != (char *)0);
+ #if DO_SORT
+ 			qsort(&argbuf[i], argcnt - i, sizeof(argbuf[0]), ustrcmp);
+ #endif
+ 		} else {
+ 			argbuf[argcnt++] = ap = xalloc((int) (ap - buf) + 1);
+ 			if (argcnt >= absiz)
+ 				argbuf = (char **) xrealloc(argbuf, (absiz += REALLOC_UNIT) * sizeof(argbuf[0]));
+ 			for (cp = buf; (*ap++ = *cp++) != '\0';)
+ 				;
+ 		}
+ 	}
+ #endif /* USE_CCL */
+ 
+ 	argbuf[argcnt] = (char *) 0;
+ 	argbuf = (char **) xrealloc(argbuf, (argcnt + 1) * sizeof(argbuf[0]));
+ 	free(buf);
+ }
+ 
+ #if USE_CFG
+ #define CFG_ALLOC_UNIT	256
+ #define CFG_REALLOC_UNIT	256
+ #endif
+ 
+ void
+ xargs(int *argc, char ***argv)
+ {
+ #ifdef	WIN32				/*Tom_W*/
+ 	char *s;
+ #else
+ 	char far *pp;
+ 	char s[128];
+ #endif
+ #if USE_CFG
+ 	char *cfg_fname, *cfg_line, *period, *p;
+ 	int cfg_allocated, cfg_used;
+ 	FILE *fp;
+ #endif
+ 	int  i;
+ 
+ #if USE_CFG
+ 	cfg_fname = xalloc(strlen(*argv[0]) + 4);
+ 	strcpy(cfg_fname, *argv[0]);
+ 	period = NULL;
+ 	for (p = cfg_fname; *p != '\0'; p++) {
+ 		if (isk1(*p) && isk2(p[1])) {
+ 			p++;
+ 		} else if (*p == '\\' || *p == '/') {
+ 			period = NULL;
+ 		} else if (*p == '.') {
+ 			period = p;
+ 		}
+ 	}
+ 	*period = '\0';
+ 	strcat(cfg_fname, ".cfg");
+ 	cfg_line = xalloc(cfg_allocated = CFG_ALLOC_UNIT);
+ 	cfg_line[cfg_used = 0] = '\0';
+ 
+ 	if ((fp = fopen(cfg_fname, "r")) != NULL) {
+ 		while (fgets(cfg_line + cfg_used, cfg_allocated - cfg_used, fp) != NULL) {
+ 			cfg_used = strlen(cfg_line);
+ 			if (cfg_line[cfg_used - 1] == '\n') {
+ 				cfg_line[cfg_used - 1] = ' ';
+ 			}
+ 			if (cfg_used + 1 >= cfg_allocated) {
+ 				cfg_line = xrealloc(cfg_line, cfg_allocated += CFG_REALLOC_UNIT);
+ 			}
+ 		}
+ 		fclose(fp);
+ 	}
+ #endif
+ 
+ #ifdef	WIN32			/*Tom_W*/
+ 	s = GetCommandLine();
+ 	while (*s && *s != ' ' && *s != '\t')
+ 		++s;				/* skip argv[0] */
+ 	while (*s && (*s == ' ' || *s == '\t'))
+ 		++s;
+ 	i = strlen(s);
+ #else	/*WIN32*/
+ 	pp = MK_FP(PSP, 129);
+ 	for (i = 0; i < 127 && (s[i] = *pp++) != '\0' && s[i] != '\r'; i++)
+ 		;
+ #endif	/*WIN32*/
+ #if USE_CFG
+ 	s[i] = 0;
+ 	if ((i = cfg_used + 1 + strlen(s) + 1) > cfg_allocated) {
+ 		cfg_line = xrealloc(cfg_line, i);
+ 	}
+ 	strcat(cfg_line, " ");
+ 	strcat(cfg_line, s);
+ 	setargv(cfg_line, argc, argv);
+ 	free(cfg_line);
+ #else
+ #ifndef	WIN32				/*Tom_W*/
+ 	if (i == 127 && (s[126] != '\r' && s[126] != 0)) {
+ 		s[126] = 0;
+ 	}
+ #endif
+ 	setargv(s, argc, argv);
+ #endif
+ }
+ 
+ #ifdef TEST
+ #include <stdio.h>
+ #include <stdlib.h>
+ 
+ static char QUOTE[]  = "\033[33m\"\033[m";
+ 
+ void
+ main(int argc, char *argv[])
+ {
+ 	int a = 0;
+ 
+ 	(void)setbuf(stdout, malloc(BUFSIZ));	/* for speed up */
+ 
+ 	xargs(&argc, &argv);
+ 
+ 	printf("[argv]-------------------------- %d argument(s)\n", argc);
+ 	while (argc--) {
+ 		printf("[%4d]%s%s%s\n", a++, QUOTE, *argv++, QUOTE);
+ 	}
+ 	printf("-------------------------------- Thats all\n");
+ }
+ #endif
+ 
+ 
+ #undef argbuf
+ #undef argcnt
+ 
+ char  **
+ glob_filename(char *p)
+ {
+ 	char	**	argv;
+ 	char	**	argbuf;
+ 	int			argc = 1;
+ 	char	*	s;
+ 	char	*	arg[3];
+ 	int			i;
+ 
+ 	s = xalloc(strlen(p) + 1);
+ 	arg[0] = "xargs";
+ 	arg[1] = p;
+ 	arg[2] = NULL;
+ 	argv = arg;
+ 	strcpy(s, p);
+ 	s[strlen(p)] = 0;
+ 	setargv(s, &argc, &argv);
+ 	argbuf = (char **) xalloc(argc * sizeof(char *));
+ 	for (i = 1; i < argc; i++) {
+ 		argbuf[i - 1] = argv[i];
+ 	}
+ 	argbuf[argc - 1] = NULL;
+ 	free(argv);
+ 	free(s);
+ 	return argbuf;
+ }
